Artifact [51ee1d90b0]

Artifact 51ee1d90b0b9b198b969b690ae69e412f676f24d862b7f9247bae700ed52f940:


# Auto generated from "SHAKE256LongMsg.rsp"
package require tls
package require tcltest

tcltest::testConstraint SHAKE256 [expr {[lsearch -nocase [tls::digests] SHAKE256] > -1}]

tcltest::test Hash_SHAKE256-3.1 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex dc5a100fa16df1583c79722a0d72833d3bf22c109b8889dbd35213c6bfce205813edae3242695cfd9f59b9a1c203c1b72ef1a5423147cb990b5316a85266675894e2644c3f9578cebe451a09e58c53788fe77a9e850943f8a275f830354b0593a762bac55e984db3e0661eca3cb83f67a6fb348e6177f7dee2df40c4322602f094953905681be3954fe44c4c902c8f6bba565a788b38f13411ba76ce0f9f6756a2a2687424c5435a51e62df7a8934b6e141f74c6ccf539e3782d22b5955d3baf1ab2cf7b5c3f74ec2f9447344e937957fd7f0bdfec56d5d25f61cde18c0986e244ecf780d6307e313117256948d4230ebb9ea62bb302cfe80d7dfebabc4a51d7687967ed5b416a139e974c005fff507a96]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 2bac5716803a9cda8f9e84365ab0a681327b5ba34fdedfb1c12e6e807f45284b

tcltest::test Hash_SHAKE256-3.2 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 16caf60da14b4fa9174a6d40c23cff93ed8fc9279990f749718db1500036ef2222498ffab86fa568a0611299e54e58d83281ac558d3f4d2541ee158b1c7d4d76dbffc64ae39925e3329f7fd894fa26fc1acdc22bc858a3438e1c55707a3f75ad2b33c48789937a24b34ddd85390611088cba3231b2a3a0a93e5d9a8780470fcff92cb03811234a330db353283b3bc3036f9125efb3eaed613bfa0c59975cc2e52c33b3e6e5123e1626190a4a0261e1f5ad9bc2ee34f331736b3bd26d274536f5ae90f5186c27fdd7e8c72972f64016e72d1d32b59b8715e5b867154b99cb140a668b9d560e2c307e3904d9297f9f07dfd7629ccc526e41c109c8fc7c53b604293c6cd42933e77e11031a42f605485fe893b129bcbf705c0f45a4b087bfcead5c187ac1174322909a2d4f8b61f001c4074951000c4c550ed5564458f444dab8aae2fe8daaa6a30d209fecddf2a893df46e18b4b4460e4011d23f01d4c49a4cc1c82405f6ac5339eac41385f3295c657ac43a72fed62e6daee94ef271638f292b8e18860de0699eb45fb7d3aa81f61d44158edd68ebc244451918b]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 21a48efd949c3f785179a0e340756a23f77d29a7625229a71a05731c7fbd5aa9

tcltest::test Hash_SHAKE256-3.3 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex fbcfacf7a3667d043ca2f2670d7fab8ede75cc610a43ac23d6ebd29901fe1d6f9c1942d71cb07c73ae0a7e75ca8dad050b3c8ce33e7e774db9219523ee9e08493f9f664d14be6d492b90f20b30e21b748e42ce1e84c269417bf8b4d8974914ff8c6801a0b319b94e5d3b367167055ea40e907b5b0595eac9c57917012586a95b2a7cf9192048c94ae91333ef967edf5d342c79e2e88262ab3faaa6e5bfde2f23c2e3380084d304057a20cfcde5d60566a820b2fb560e39b090954ace8ed80e20fba5a49d0643d146b66bf3527d94378911740cee77c3d8a06042e902b9fcae1a7ecb2737cf1f9ad745fb88c78640df8c172e71027228a54359b76cca69d277d9f25da81706efc67ed0d87474276364386358c88070c5096121febc6ec6e3d22400610e86d43cbd04ff0ba1a189842e559df9f9b098236dc1601fbf36f7b625c450e143ca618ce631799bf596d42ba5ab6d1aebda13c9372cbf205f6a25d3d98289e42e2bd46aabcce7905a9a2fe0310179c28846083fd16ae50b835177c357245373b7f3555b739ff0f3b7f7c22c3a216cf9b73ca00ea1437ce71334160d06725895c6680ee9a7703dcbf3f3b69628d1ecc7600303bd117f29bdf65b29394d363d5243d4249bad087520f8d733a763daa1356be458d487e59694160ed9d09636adb2167dc2f9ee2f41faadeb60e55304354ac127c7dc6d3e6b745a954e59483b4ebe28ac0e8cd2ac4962fa7666da60164d0f48147a5c2a524f66aa37af5cca0dc87d5f]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result f7c566438926889d92f8d59c070bb2cdd7ea5c79cda501c7cf1fba605ce984fd

tcltest::test Hash_SHAKE256-3.4 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex b2d23865af8f256e6440e20d498e3e6446d203a419e37b80f72b32e27601feddaa333de48ee15e39a692a3a7e3812474c7381892c9605015fbd804eaea04d2c5c668045bc37512d2bea2677524bf68ad1086b32cb374a46cf9d71e58692788494e99153314f24921f499b9ded4f112f568e55cdc9ec5806d39500895bb12275089f0f9d54a010b0d909f1e4ababe2836197d9c0a51fbeb00026c4b0aa86cb7c4c09237a72d496180d9db20219fcfb4576975fa1c95bfee0d9e526e1ef8dd418c3baa571384735262187646cc4bcbbd40a1f6ff7b32b9907c532cf938720fcb90425ee2801926e799969818b1865b4cd90827318ff090d9356a1f75c2e0a760b81dd65f56b20b270e98671f391827680ae8311bc097ecd1202a556923085005ec133b56fc18c91aa9690ee2ccc8d619bb873b4277ee778126ddf65dc3b2b0c4146db54fdc1309c85350b3ead35f1167d42f6e301abed6f02dc929d90aa86fa418746bd35d6a733af2947fbdb4a67f5b3d26f26c13cfb4261e38176660b136aee06d8669e7e7ae776f7e99e5d962c9fcdeb4ee7ec8e9b72ce270e88b2d94ade854a32d9ae2506387b35629eaa85e96539f238aefa3d487095fbac3d1d91a7b5c5d5d89edb66e3973a56459528b618f6669b9f0450a57cdc57f5dd0bfcc0b4812e1e2c2eacc09d9422cef4fa7e9325c3f22c0450b673c316929a339dd6e2fbe10c97bff198ae9eafc324133702a9aa4e6b47eb4c621495afc45d223b3284d8360fe70680359d515aa9ea02e36b5610f61053c6200a047f186ba33b8ca602f3f0a6709272fa296025258556880f44f47baff417a404cfd9d10720e20a97f9b9b14eb8e6125cbf458ff47a708d64e2bf1f989d7220f8d3507a054ab83d8ee5a3e887446416e3eb7c0b655e036c02bbfb8248a4482f4cbb5d741485108e01434d26de97aec9161a7e18169471cc7f3]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 64ea246aab80379e08e2199e0969e2ee1a5dd16868ec8d42d0f8b8447454873e

tcltest::test Hash_SHAKE256-3.5 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 537e36516a5794c1c1983fb83285f944a140f028d4473781853e73a9b6efd75c458f5219c04206cb7ae2fda9dffc175b041c475e834bffa985d5e9912050d8eae4d9fe6fb0a15f64caa985792fc976f228f7e3051ec6a283af2d5fbb028a8e9c57e6a319e27b86d2d97341f0ccf3fc5035582ce550c107572ccd3bf002a6dfb9c73eaae0fdd8635dcecb98d55b8293bf52c88ac5be42166d243de6f8cbabb58b5b67798caac1de4fd236f2f2877f2285a7ce656e1354b70cbe06c99b03a1f7583ceb7ae5903cdfee0c3eb70df5f191eb5df225a9f5fcd27e22af4ba153908d69915214b258544e84a56a50ef50e0c8399cbc323c0d444f0979c0d3d162815e068322aebda90e1357c44223603e55aeb78bb5f5ef023316f6ebc2cbf4d97b54763ae5b2cc2c7416af924f992867562dad5364d48c7cd1108d9f3c9ad25f875603dd2287a8888d40d637181b0e75ee2c621b5138d925272315beb6a8339dac4df39462951966617713da260fdb0d22941f0c058aa0a23c38d86fb85ddf3af21f8f892c44e76ef9a4ada3ffde57d9fc4b2c4e0730a79e19381cdbcb219ddf61b51fe108fcd9475cb0edbb2df14a81833ad108df94b7bfc4092a29765c373402f7ebc77e25b89a92811b4a38af7cadbf495663161c97ad47954a82427673e0dccd3a6117274c0ea4017f77a67fb504b961028633321111aac2c30eb6d71a8cf72056d75a6a5d4c9916606b01cbbc2e78681e99be3deb93f37adff45ae7f4df5cd68552d057b3fb79aa084ed0fa5ad40448f2c640a5eeda2ca4e45db60fc88212d910faff5415c44da4bd479c74579e66e7c63340d1e28f5c281b7053b5601c210f3ff671ca4d4f1cecc87eeca07b33a52fe208462b8f598ceecc56b84382569262596fae222143ee6a711c48e88d3cc9068d6eda1abce1c3dd3f366d1ff7d86cb9a88c3cc25a49cb06ff4938b35760db56118d850633cf09dfbb39fbb38649b7fb7276a514c008bca8bc2c456a9f48e206b48cce57baca66db8a87e965f9527c120054717e1a29c838eeeef6732e9be6febf933e761a7ae3baf247bf9f179ac2e59a4f266a3253f89edeb6d437cc02f0267acc5bc91b8887623ca206c8a7ca915c878f4e3fce2f53c2d4ad661e402506662c5db0b9849c]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result b2061c2224244f9bef261270a92649f8ccdc59bb303f016dcc13391ef51e49b8

tcltest::test Hash_SHAKE256-3.6 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex fce6b5134c950c231a6a0ce0eb297ec2ddc59302ddc9c01519f6cc73b82e289cc9917e5d7ae58c4f8b3b33a202cfcb181f31ba5492a24555ecc1a63e54675e587bcfcc59d2faffe7fa51c9587b8d14bcbad4791d25240f05b1f58141861a64e5f8e9c790ba9b0bf14ef6f58ac02901b494f7f9e4fd17c72c50db8805b711e14b2a2796899b925877716fdfc1386b390a97e16231824314d3b0bbe01150127e93f8d062ccdea58f804a07b0844b1d65c6aadcdb8d1c709f01bbddb4edb7e6e3c4492e52e2e99d5815c105905c61052ceeb42e8c7e336510be58882a225655b7e607878f5226415a3dbeb0a6d0e2ed378c9f209e8e2feb0e126f066a379426a202192440a4fb5b3e0029521b68369b2ea752fa394578ca4106e99d9db4d8234e1e674d8e61d2b1ab66ea3116acc6d7b748b504842a76ca52a1ac96eb228c126045d949a110120d4a78ea95c025f86b7d76b086a8c592b2e9eca1397b0717bc837c5762a0392335c33d0fc8415a351d26392bc7cd9e324cadedb0cd76eee1e95dcdc9deb3656df1bdbd4211c0d3e6b75b990e10193ec05e47aec29c035c5260963f1706041a580be1016cb7651971ffc39f41a9b72ca2b15e37bdec4bdbd2ebd7da2922b8e34c49d61073035ab340be0752acdacdf0420d9b8e8b0676f2c950c8a7e77afa45b17544f3413dc429b9bbcebb38eb8413063aa6bd1232ab2a9f5810ad3a55f0caef55d5b0bcadce0446c0c1e0cb23031c58ff26cc3cb71209bccb57f508fdc2f96eb22f51ce9a9dcb4e9388cb4ecb73939f25c4c1efdfd419887147853bb8995a9653fadd5e4e5c0639fdca84aa2bfb00427527a615f019e26c128667b9cf9d76d002df5d530f313e6ec62f11c58bc4ecabb4f782953308ebce75bca36c8af5d4828585d8972644f957b6617c8933f5df41adde5e57f0cabc1763923f3a30cafd16a5965611dbbec25b9505cddd6ab75f6c278241436f86ddb0a4af450d0b4377f22ab7e0a975c71ee22ac60aa87a32f694e98b3341f765d7ff00bdbccc6189cc80dc927c473e8697543e493dd4a98d2b21bca23d39d18f306e3f61ad5f7bc3832683cf35d37c24b41a99396d4840f1867b686f6513462b736428451fada11a254ee616103578c9fd9a033ca3ec8685900bb599b5b79c62254984111aa01ab6395fce0d17567a9bfb3d44fae6a8c572d0376bc9350d1b5bd0841b6da71f30be47c1035f511cc9c5356b231d3e6443dfcf6851a6ecfe0d3ffb7fb5ffcc13295ad8db4db2c670af6d348d6a4ab3084af5130730d9e270b8352fa11a7293624eb4731774af7f3b72bc7e09df2b4e7c20db267ad0091f4c6666f35211]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 4b4b35d915d6aa6e64a7716045532a96a7211c5cbcab150d291fdc26a1adf20f

tcltest::test Hash_SHAKE256-3.7 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex e17d557607ae1b5bf061f3403ec424df0e8d5bbe208ef460388a75bcc3485beebee51a2dd46e5ffdc6af98a51045b6e4cafb31e0cc534d5f15629d396ee1c50e4a828334f180f1f3dd7a04f5648159f8987031c66c7bba67180b9095beca83704df99b73a60a59a7fd6b401682a09483419462584731c0e0072e56b6fc281d7e8ff567d23a35207fee2953f2b2c9efed8e10cc7fa79be932ab72f8866f261c9ed71cf13af728cde5775d45703c24f39e448c7721d2e1bcc5cc807dec61e9073aee164091230ce84062af1f7767da27ff2eaf6c27112cc10232ffedcf189c66b99d8c5cc10708f9f875c6e8f17d1314761322b27aaca4814fa4985019dd65c283aa264eb0eb458975794ba8c5c4f6406cba8d5100eb708315ebf3afb1f86ca100dd8b1d4816ea1f1e35e567db85ac354aec9652a316b94fbdcfb7117fb1da8e980064d16fd220445d733d2e1b075c7b7671e8bc4a74a66ead188d7f6b50d70eb3d958730f650f7f99f9fb046d942f985a112997dd4e60674f8e1c005d1c8aabb93210090f18de583b90c6f2b9724d165c9402eb43ec0ec20af90d9c3d5e1cec12d1339e5733b657a90046ffe7eadd7de6c11ac16696d9084520075bf35fb559267e6a37cffebe054c112433df4408535f611a202d94e9c06accb34667647b7b5d035dde5fc11fe98c8b089689c8f5222f3ca911802d6572e0c5b86482b899d92027b39aefc3008cd2359931cdbecd71bd1a709b47ab75a70fd3c0be2aa235fcd5b11574674d8a7484d8800b946db7c973c316c66a5443e55fbe705a4869786ae66a2a72afa7e42b0c3c652cc41edcb1b8fe449ad271f4b7384d7242c55689adb91a9b9faf193839d029ee9d471963b1f495a2206549b3a2024a6e7e87b1904db8890f0050ebab243a67c66503a67551904ed75f0c26a630257b0b1478c2b7d0497e2f9f78646776b0bd938ce20d3a1af2f28c5fb04ef5e809a8f20e7fd024c0d6c2a38310cd94b69cf5fe1bcb95d99383496829370ac952169bcb738325ffa4c61e12b4016e596d65d5ae19a5877b45ab1a14c48ba24af7b51b3d4c6e0771058157243b318fdf2273264c8e5a2b47b6d32f3738925e9f5e4ceff0a027bfa26a6f38821f8a784e5d2eaf7f83d1c96670614e7a8e3686f11045e08d779694b95bf888d468f371cda7fe3af0fef2a9fffbbf4085cd5d61679306b6bcdaa3d0de60840ec11e53c184864b8d460aa5133bdd53ccfffdf1382a71f93924cf36b93b027b93f24a94b19c847d722aacd24e42a087bc9127d953613184306e613799f5c845df0ff49d893d29fcae44ee61a33bcbc2d7e252fdfa355c116541958eb6373b4ababf2256918efc300c3bd73a5a4ee76be49b864575ce79079e4675235927e1f2ecaadea710b8858253b86f46bba57becac63cb990b5310cea42508dec9ed45a63c792f7850e24c584a62bf6b0d650facf7e32ae106ecaace3f8556a850b2eccc74d41eb19735da1bbbe2ce929ab92c138cc2aa05acc3ce6e360e6867349e60ce5a62b13a2ed9b6]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 3c4a422bb47db5ef8e4e4029dd172d757258b1419444059799761138ce404944

tcltest::test Hash_SHAKE256-3.8 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex e2f6f200c1ed92da4b529e459fd2e16f862bf51a0e3b094b745de24247f620afcb4bc3239c96edc59358e946edf06d17aa6d1cd934a14f154176152dfa8679925de50338e0418147572e061417bb344f5c49b77ee89d12a9ed339e572dd5cfba606dba27d618d4c95d7bfd95655abd806266cdf07257d971403b84aa280ead8f9c8af0d8c64070b16ee8d4b31ff69013856e66191af82cd40237cf0d32579879d8e5ae32f7e4dd68521d95548cb6366e8d068ae028a8933aface886795d81ae0de26fb1fb32aa157d1c14862f5c336fb42d8422de38e970bf1a9b6a297bbba2c74f4e087403a46e5b37cf3c4a24418216c8c95e894d3bfb0af7061a5812501c563f76450e73d5479bff8a062db626547d2ca8cfa839e948ffcca91589b40751472d88f63f05b517dbeda5624e845a4d73d392e49f8189d11a05f4fa32c34a07f6b3f69a8a3bbc75879cd1ef210145d38758183be3b69629e62d8a26e7e290a6f14d3fb0748863d72b577ffb49df818d2424b934193b86b9f0bdd93a1d746394d373d4c6926e33c333d800152d5185e0d6c3f67bb4a2d417a6315292480b3b77f9a2564b486fb4b03d8912cb4019db651ba040612a6f26b9932296cdfc1990c6f06314cd2b0f6f24a4d5289c368aea906f5437830f02c716240c064bbe120be83420c0ba9ecfbb970656a1f655474be94e5a3c6fb6f06dc3f55831a9e2a6f5725185ca923823229dde882f6830b167d6352cdf75d6da63297381a9572e2af5fbc4eca2f27b9c4c9f99e411706d6bd6edb0468133d3034fed2b22cdd1d52075cb0adfda49cdbd9212d4e5089d4fd911a65c21d238201d9c5578b61fb89c2a0d868fd9e106c2e98badfc25654d7c8b9086756942d1628bc11908b63f69c79a15a4e06547c7efb2a1b79c0fc81f57f5ec04b86743ce0ed0769e479d7d640c1336bc98fc8efba89b7cc6111ea171869a7cb771b6555c898df56bb1f68a45ce07e924162a17108226656017dc71e27cfbdb055dd1182b6706e5f7e43bc67d71fa9571e45880a500c5f40bfcb3b9f0af9c7f74b931dca92bedc0c93ae7b279bc6dd42c90125c37a90cb1205c5f0a0a92fee29c307343644ca51e563284eec8f1d41dca85e1fa36ef6d2553a318b2cecb95acd24fffcccb5dcf4735679ddbf9b6cfeac24231fb215869b90c5d8b748bbde326bd6441d96cb3ced3dd568cfa7a7fa3b3aa61accf955884f4b10821afefee89f8b419e409c6f3265cb46beccad9b10210f9409cf7f1743150f82f65c559d1dc8b6cdd40de58a0584a612437ed85ff6d8b257b9cf4d4400166283fe265680c6d673e2b02b7902fe7155a2bf8a30dcf487ab58f27569c20779cf7b6020078f2af04be8f84360c16555605dfa9bbdf8525683fe7b69dd7ba067dbd2e5f172b3933fc54775fca2ad825750aabb57889c576ec1b01e52b155130810f155419fd247ea6967efff48b09ca0acf3cc6698b14cf7edd8a1d8eb3aa783f53e78ba94d58f1abfb02ef35ab1fc57fc9ff371f51d791890ddcda49511a501122216025ba5b3f7508bf981de97eba5c916f920a8ca26fa31276a5eb6c255a9f006f6c1fc28fba8a35e1951de4cafb299bfa61ab89e9bc5581e40ae5734ffa41650e1a07d48af564092570a61b790a5f704c1082d831fa08d2a163a7f51eb190c6a9f46e8ec1628b090795470c0d8a6684c14911060fcb359b3b6ad360061315bbaf85d44fc79477abf]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result d1467acf22c5550911a52f1f09cda70bda914e9ed3d303d4676ff8b1bb77cf0a

tcltest::test Hash_SHAKE256-3.9 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 0109f4992ae7954e89927931735dbac6eb909131160b6df9f02c420c3cf32403c16414a8b32d1ab5708994df6d64cd136fc0d100fe5780d51682e24c2159bae7221c5e7933d2c5e9312fe233b6bb30af47318f96cf254ec24cea89b5c9b3b5dd8cf87917901cbf71364c0c3437aa0c22ddab72fc73bdff47fa2edf501d493c6e67c20e87b45430d5e5a8b9ead87989f298f62239d067baed86148e24056278201b40c4d285c1409ea80a925e826fcea9dfd94855d06ba73a59653b396a48917e103b4401edad1553e63c3e971bd504ce1c1d8c595a10efb8dbe890983241ae0daf7a351cd35eda7c0604669d8cf352eab68a954c55a0baef746735484796f7575ec740291e1db5a2722bb279be11e18415e80c36ab612f668da8d2518f8f95e386e80d32b832ce4c9179c9329877d924a1ff981f439c77a58c750ebcf473b03990a6433e88e54e02cbb554d0016d6153c297e2100598b934db9491905d8c6fe2e2c98a56767e5d4c88a9fa5ce33aa197e0779110d99f1e9ce0cd04d5b120fb65e6198c816a4422b3301b64dd2527c27b63684e28a7f7ce6405ea0f94da787c4a035eeec74c80c6be2bd43a5baf7cec84b332c15f57e9f014b1b159d4bfdc191aa05f5b30047b70f6e29c23df6981463c389d91bdd1bdad344bec8b9d4893fa5c27e579c57b7a49e1bb3ac76f3b7df92a5a71674afdbb2c4d3d614cf75de74898ffb8f08d97c879091f78cf160dba2cd68275ea0fc42b96e6eed945ebe61e2b5690a0699041ac27f6771ce3d9c77e08c91672c3130c541288c61b1e80cb81ca1f42658cd7626d7c2e29efaac25112b58a8030995ebf7fc9ba2df17ebff4584e7a7dce0069e0549f3b9fb9cdd893be5aa1267715f9c3f4e2048b210dae4aebdef0a9a46e4fa5a9b8a53f42f32375c92097720fdfeb02fb86ee48747458b381a3082eaf7d8f97b4f1f27351c5ace07d2ef3cabf9e3c62dcdd01ccb25bc21864c54a74b7d633a0bc70aca2b0eb7aba20ad3d9850faf5cdde0ec480a369f662da6b3ee4842042a70b5d5a33250c95edfbc4fe438b9d1d2a4a42c0ca0e47fb772cbd6de4dd04c593e7e1859079d0065f569cbc33352cbc6168a07b13bd9dd941a2e45edd8c2ac34e9924b42074e1d4fa795c02d01952db5980517fc4761298a783089938573944bf684d6f4bdde407a4ab2d5582feb580fcda7c5443024e41901950a75b07da51ce9e843f797e84a84735373fb1abfdb631be4a80fa29fadce6aae50fb064b4f06382f3aa121d67beca5fa147c5e9d382e073e38d4fb2be6f907fef599d35702c665bbf3a7e833551157194f62680dfeef1426e03ac67410476e0950e8c44b50abf7213772678976a10b337d23c38c8014d731368780e2ca28014ffb5e4572c94570f15e870c3340fa36db36570d936c3da4efc461b702652966556d60d377cd11479ed15c52eb64bb6e62f37282ad33d811a4e24fd55d81ba019c2f96fac4ec9dffac4868e7fc2233167d4cecdf444762b21348b8685e90586796aa7727d4a85a1d8c2c4317f03a1fc38c9b4c8ff3476bea9d4021ec7021830cd77677e74170c405c0e5618f61eccffa137717f13494624fb56112de4cb5d865d10c2fb575e66a6ced1c4a9acbeac23ea468b5cf82bed435fe3401ba5ebdb71705e3f51efc69cb97632974e68894a4e5a1d8cc6758373051ca31850cf0b9ad7508966e804f8b5639b5a566ef427ad693ae5fc2554f9e1507cbd20342dd2a3a243b8bf285e9bb98a877089701641dd5dd2c561e05b343e0ec559e02f86e9fdb89213d37ac458b118809db8be977fe3106ae6456153dd922640a1e1aaa1f7b00385c32944ffd7a4f4cf096cbf3e88c66c4a702f0f039be68035bbaa0b47a5c56963f049efd8bf9a06bcdb2cdbd5058e58ba8aa85235174104eccfc4bc]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 6a22c83f1d43c4c4635be4ec54e9d422951a1765d0e7a8c6a421a98942004293

tcltest::test Hash_SHAKE256-3.10 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex e71258e5133a24f8b8f04fd259c2fd95de03084b7f1efdd5e32b682389c052ab680a0713d21c1d319e86b136862af426ce4be78c27e7626bd2475b7708d465859a2c7741d575ef1fa8f2d69409d366859452c90075fb242a894bd478c07df822c6a12fd5e2eea3a91e594652a8675b9a783f390f33034bf84f605c8e796411693390b739c22f3fb647e687da2c8bdc4dc13abc2127a6e0bf6eae7a21fa31bb422b2298d33ddfce306cbe23925ce9ef86b96ddc9e1a8dea662c5cb6990c8bfb95f47f590d1aa655fed50ca2e402299f2da6fe20eed56071d5d293985f771adb4ad7ce824e232ede08caf68a37e4f3f12ad11510791dc67ef4a77aa9d90387624a1c389cfd1e1c703693a465f2ccedef6582db35a7bd6717abf53a7070777a987b0be42e84d41b1470773fba7f80c2a0c7017716e17bec47e202fa758c9d9a86c6ecfac04a0dd1d19ebfef1245c8180c3695123c8d21fd138118e341963b90331306a4dab790e6afa8b4dbf4ac6e983c9b87d42d15754185707d1d5bf41a03a84ba20805332703b6769b2ce81c38e937df1fe473df4061a49779cf4b10029ceb54084ec82698d0eff0bf0976fdf0b305e8a56b9655490478de56219a51bb030618809facf8acf461ff679b27b75ca0afa061901cdd5ad30a2e5a3ccf1e0cdf007e522338112b181489da0a82b245563cee9b7c8fe13976616dcf4872e1bed9e26dc501f4dadde31177617d1057727db4b99a5676c8af948585fb6c0c019998b3cf226268b98afe5fb2441c570cadbe20eba7475afa84d57f5c27d124e665c57b8bb16d1d17f9100621cb10e13abcc1876b0a77c2df80e356dc9a9f42f8ea074389ba4b9a5df3c20fab3e81364a682df1210b0d36df6b6312ec9efdee9ff00712b1852367f140bc813ae496dca279aa66f5f2323e620c00bc737913b1433e6cf0eb5a1e0d3da8a564b506785dacb7e2efcf060d63d02c605b5b740a124c9ddfe51f806413a7f325c103ec4f41cfea7a939790c72c91932bf78bd70a9a22d508fa35401c0199e8e69f0ede420e72d91d5b35d887220d090a99ebea3acf2dae8e3615e26e607a508d06bd24794eff4d714d912676cbac56a44763f5c33bd5f01aa2a7ae83b6b2f3c5fef8051d88dd0e1e7494c2bcb2d741a30bdb3fcd6683625344d4eb838ea9993490a7ca564574e4cdd524f3805cf494aced3b117fd79dcde22682e3966dc60a82c3b3bc4b0c2c97267a2a03ea536d156af46bb301168df96e509adce2dd730d58a0022025656deed06a8f38231ea88d8228536d7cabb9aea0c8051f9265186c5e2d7d410bd89fb274ad39db53450fc39f91dc87181f8bb42098a9f4cc8e1bed3b740c6626ee2aabb94c1233a15008816738ec48fcf869d295c870a2b8dee559977d98d69e2e76a1484e018a36c8fd8d82246cf951c1bdd2a75e417380dfde771c4e07da9a21eb5cc8bbed263a3555b0995d45e23effee7aff6403ad49196e1170f143ba424df2a3e29bc050d41d78b254ec5d4bec3c649345e1a0993e13feed3b6e32bebf3cf1403ef761502c0ace5b5ad89e7c82ff87e421deff7f8455f4d526cbbe2e397652f983d6b86e6b83bf735429efbc29d1bf37396208a74667ba8ed812ce51d7817b975941adf2b911b3c1e9e83755093974523875a358aad2b6e3fa4b4970c2e7d6e26a3f28233d3a120ec21c608d49bf0efec41fb8dcd81d529b347c19d32230c9a15bd8114b2089442286cd51ad12ebf50385692f79f9d0f57d2daf25c21ee2be9ed71450b08983b1c5de03f2fc8b469129255af078357306538eeb5585de871c9f84fccd9aa1b2c1bf72c72bc4dd574b3849fbe421b38fefe3fe3991638ba64b6d0a977153909dddd7e920e44b2fa689f79b52f1bb9cab17f626a0c1a64dc8b3d012ee22227dcc6bd7ec1705dbaabcb42fc36a00901750e653ae28cd944b74bc8f4407c94e90c8d58522b376ba752035a86948fae64d05c4c43dd99d76ae32ce7447ec4f20f31881a934fc1f30ba5a722a34f6c5066652190f7bbc1a939d8a5145c4a59ae0cb44d90dc9fae9879ef3d57dcc7b4b3889bf4dfd12d82a354105adcb623894d643d543788ab6ba054b72c568dadf72c3de]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result a39af0168a84e5871d3155abdaa1fc49cb3467f2ac551e7133008817e4045086

tcltest::test Hash_SHAKE256-3.11 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 16ac07905b3a88cbad786e78c4124544aeabb48a6722afbca914ed0405a29d2b337455b9a7fd4b5e6401c7901555d8765ae7470560fec969b4c278a659fe847f182526971793d6d6ad16be0e75ad6edea18fd1d7916f60dea5ff95d14fb3a36e6cc76470d48393fa2fbe3b390ba16f462cad3c4923ffdce423d32ccf0f4861bfd763f68d0555e8949301265b00b94374a3486fa33e36a543d64726e6c245253c03ffc436d3923f6a80e767ba7b7d5330ac69522d099b23c36762695f903359ab95a6b6b266c1ff469f79e79ea5760544f217cd2fadb6bf2b7e2dde82a09864d5385db44be56a90ee98be8c51a62bc2761b5ac8f0520fdf45c2ae6d961bffae82922ea64778165a2a12be3f1aa524f390d03a2bb91e2fedd7dcefffe528ed9f794b2074ef494bc5c4b682e940caeafe58b8c0ded23c9d4faa73f87ab5f0ec9f840c3b068b7d9439822b11700c3f044d977cf3c983d2e16f8630cfc84f9b8316697d8844633f761e2e1974bec629fa4614c3dcd5140984b333bb7ecffb503b6cf1450e17beb57bdc8e2ab1b9b6b35553993681e8cc080d8578bb0d7900379a09e40cd665e6072adb6b04d24b23029cdbec7decebf4f8044c1ed982aca8792a550a7ce618215e0b838c4fde5b57415746d63f25c7d400f16feebce752393e73b92b3b4816b8e2a73dbbb4ded098960ffb1f243262b4495d58ad0c4352fcadfc9b0ef10449f3ba856fbedad9942f294a648fd61da6dcfad06e26739f9439ef4d647c472097190f2e835e6bd78e642393e8eefaee7a933cd01920970200382bee7d3de4a6ea740828df630ce1a67eac6fef033babc52337e7c16220747e408a684c19729d294acefded9567fdc4c7eb68e1973e5e71d2129cceb5b7fef69a34413bd8960e3ce4883413bc2436d08509052772ae0e65e9f677a8e104a6508f5004b141fa000a8a5f56bb9feb91b2012ece275c31c489af0a01b8aeae7674650736161d467b7d837bea4c0762185383804c4a1d6f87c56e77c164e45e764a648061d13422887c1903782ebc34d299522a06f87c125f016c6440154abbadbbd6e40c4c4e342df0921f89c88607c76db852859a43bf5425f3fa0434a96e23ad015ac0ee332774bf37f9a4842d8400b8fb214f9638206f1949609727c91ee0092f0b041faaa165d250b651c97852846064beee5624ddb7c5b6bf81587274edb8a61e60477d4a07112581180030195b4f3b51ea40ce9e3512843f482d6c1751a1aebc5cce72cc6264fd80828f1d838e6bc804c9be000aefe6f90776107eb114ab910d811d52cc7eb422db16df0736249e52fd153780c9ef2b5f40926872e73fc09538569ae4f564e7dabb5c58b6da25ce2364551317843dc7fc11259d0e63d8c7046664aef2ec1be76e48dd62f2189ae5816212b98de3dfa419a3b6171bcdeaa724be31c1425cab9a26a9206682988acab51fd393aa8ddfa8fd1ecd3d60cc7a4a3e69473c9eeb1dea4907aeca2f01fd6507c22008362b44bdf2a9f379a7099297998e2e85cc4178be21890df8c1fbfb9ebe738180f86417ca3e6cae32b62c39767f566c069407c4fdf458c75600308d5d245c7f63b9e15fb62a9089d156dc78cf36e98b26c0e509910b9b644eb345ba8a7fa2a11a4149246bfe3d09bc4fc1568a076e134c16825061ae7b6a47a4e58b0d1870700b58456fd0029ab85c6984db903a0d8ae26087a055242063a999b606ce37ec739fc67d47cd7ed01d196ccd0fc717f07a4f649b0255b7b1d6db5b6035b6243e323e5298b44ab906c05c1f43fb18e63c6afbeb677d49ad564c47b28c20ab268f3551c63fbe2ffc652a8b4b8fa66bee1ce34ebc9319194f394c5465e2ce968607053ee8196e648f15e210b85918a978b66cb0a1c6deaee57f5e6a3e0947608dcd296f81cfcbd2ba3d70512e485ab8cc328d8960a8d5eeb7530af103aa93ef800a294a5808dd5fc5065db87504738232b9ce41c2e205c20cdbd9517d6cbb2daae58e39376dadf4f79730ab54366beef273b8408f1c77122e3f52f374f8c6015287dea3e4a5427a9919719495864be35387d2ee8ffd31c763a8fe3db0f5bc52bf17a4f02859a5d7f3b3a9dafe9b1a4b9e1da4b4892e3dc7f43e6398f80ca50a3abe6587cb31dcf54d8e5fe5581ee00d1c5fb7f84757a3fc29280b6d15e58a100ba4abd295d4f1baefd11b1d6ab6a511127392238f1f694d498f7e22d027724c7af0fd384eebeb1020a565eafe0c723fcb81be9e2a2e99a19e9a4221ef7a66a6cfcbe421bd1dd3de2a32c6b4dac74e7f8eb2c1d0e02d3ae26e72e1d03a886d06]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result e7862d9e578c16c6640f3e047e8171e020d69fdc95dfececb626245ddf59c072

tcltest::test Hash_SHAKE256-3.12 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 8c254defe9cc5fe0dfd1dc02ee826cab2586a767f066849b324c1468930a70d21c5df02201739d88bdace905649e9e88355b15586ff6a8b1674369b2d6df157777704382d22ee15f52a3e1879eae308626cee859fc9dc61ae69bdedfb12d8ddfc8e6b0d6050413abc63e2d5044bd0aeb206888333f64c61cd8dbdab6cbfdc25235459de841fe1cb541053328fdd014ff4aaf5daedf529000658cc500cd569b1ae617747e2f23e2c5ea815cd771f1360ccd2dd09185700d0eb43506855e41007e04e39c61767b4e23e939102449275858d16a47a6d8c5238dee5e070d27c5d9c5b7327d59bf0e481667b5b8d92d7b622c7ded2bb38159bbc73a902f60d0ea0e38268b7f2db2e5b9e78c7ebabcc4f33cd0f93ee5812734be02c151e64500b8881f7a760aa7f60787df7f1b8096b79ace8c6ee5dbd8735f1287aa2c94865f382dc2da7b868d347c9c446914702ead7501a8046a777f0de1a19e1ea6a1e99671e6686f235ba8134dde5e71f2f44e4f8ebb6be25620409cc2518e454976374d6b9c5a61f5f1c03c813777c03c73bc45ece51f31313de1c80a0ca1469c79372b2f35e1d77ab19d56208ed57d7a55413697680a1881382b3bc2b91d4a2713b3d9c49b43f93801060a33cac1d13501a5cb982a74c0d078e69af2404b7873ac71ff32b4c8f0b94ac400c0d583e4f3e1b0abf615a750a565da90a08973f907ad3b44826abae485f5a0dfd29663dd3f5c2a7eb910eaf18967cec3d67bddf46b7cd750bba35ffc22685f506ef5a9e49edadaeeea0284cb03e68cdb9b00d09228830dcce54901611a0dccfa9eda9c239ac389a18fd5be059b4ada81f8ff96fbc529a7600943e63bf54bae86692d85bfba80ff3fb370e0c8d9fb815df3617556cad56bb32e7956b13989cc9bd8d6ace3867704715bbb323b46624916970cb6cbc0f1236e5cd39beb7031efe2f1be59b5871160df919efb8769e5f954e9e9a0842ee495389b39fc1221aadf02becbd45d44b6da305c0185d3caed5bc1f3e07da69c168abaf493c04ed55c64a447e6640446cf3c0cc5cc1648f2e33503bcda935c92efc99c6ec930c613af467093f853d213c24c1dd2e7f70e682d50c24cbd2ccc99d71c8512c394a3630b4c0daae7e7ee35f9d3088d3a704cb43574a7ac738e1e3836491de76a340c4dd84024949d698134da9878feaec82a5f616859e3e2017bf874190df5a4572a5a7ee85c590020b296cf65132c2949d1f01bf681f9f4cf0b60f954fd445a462511650c5e02fa56aae53f00811f943969efcae4c7f78f3ef5f82dc294dd754a24fbf576d297725190a892326bdfd8e119e5d5fbd2e49d986248792a7bc7dba94f9e97ed5e1e4f5b8d682fc37975db890a59a6034bc8052379d943565a0a76abcf84b138ada17bbac9ac807b52e8877964d3a4c4d9abaf286332f40cd8af2c9acc35ad206527ddb66bfcec229f40c3f84edb3706259683ee47dbf5159dbce7bc6d38f16d2fb95d999ce0db7f0785764ff0fac790d79069bf4e5dad39523c8e5bdb14e7e7b25ee3a983e1b55b33c08ac773b7bc2b96a249e19f3f833f9f3409bd3e54f555971e57304986e37ecaf9e6a6ff9b7f9f0ad30b9d6409e1f12bae402abd7d85818501a1741558cbb075367234bb2d76b4dc2b973bc2442e159fb11bec8019fe312510aabe10ded6b9dc8116bbd0f50a31b4b2d503e377d174a246824ab0afc82e1f52585561a06c60a6e1ba81667ba3e03971ae3def2a34d6dd745d8b75c84b401ad094833226f66e7c5f46cfa348aa87146f08300de5be03f74394f8f6ebee2ebe90478ea8f9daac0501a2edb2e385efedb4cd256631d7c299bb0fd95ca01cc2b49c57bfeda082dfead1b723b9d49ee06a49e3642295e7dc6be5b676ce703ac2a4fcae5e29a354d2d2d76bb9e1a45c2236353435689a561a14c8721675e1b1f735b632b3838bba4c661aa7f651da267cf780a6e060c68d423d6c2902797de92910d4cd0524de1b144ea2542432fe66b7563323ac34a4f21c8ddac48301cc4a20dd5d669e3427dff331775889ab98839bfa5592e309b9ee72ad192cdf35553da3435ae4c4daeb6db1b7a29d6de531e5f08ceedacb0a8fea0a4431475e3ea0287cead231c03eb42f16892a091a0750f47eb307e5ac5cad4cadfb2bff4a443574717bcd34da89098ce94f1786d73a7e180d18a69ad02a9b7d237a0e3be96e9d8a4b9e54d559e373ecf4b071fbeba642b96462d6e17e9ae2e63468e2e385e55fd0d1fa6dfc877379b7fd55414f9f72243f4c3a9ca2fdd409eea86eb0de64d103b0cd382391aa62a356cde68f6c3bc7ac128d4802c5960198fc46337f16ce59119105ff7b7c0bd7792f2c0a613907cc639aef330f339149177ad76057720da512db43f87fa5f2fb84abe269c19e4aaad03f3aa4cbd236d30fcf239c40da68de8ef54dcb36f5a6f64b32b6acb6834e887c6a35423f8bccc80863f2904336262c0b49eb1fa85271ef562d717b48d0598fed81a9]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result edef6e8ed7e1fd79067d72d502da25490ae02a1a6cf077027f956cf0a69f1d7d

tcltest::test Hash_SHAKE256-3.13 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 5cf4123ca07cbdb02586138f23faae1d9e5d4c2ee847753b67175eb598e50e9954b8bf4553f9878aee28370229ce84a4f0b36495a150bb41cb8737ab36927801233a7574d4491b474f413725604e95b7dd7a69762d20efbe0ba34f24885fc30a4fe0fb712d52c10ed139d99fd0632b7fec1a2478959e59d9b0d26dc9983535db62141be366fec007fa79e61981f38c24a5fb5a44e0b140bb417b5b426dfa189de43d9b728534625b5567253a7ce701cd9085d6821643ee8c4608df360f98b2775bc244c794dced32676c60abc828d2a236215fd9403ba97348e0c24e87f54c92510dde8a9addaab3baf15d136d9d47cc1e35bcf16580ba98ce6bcb31dcfb2d164d853163a021e107d55ce51b742da873d02bb6738dfc69246011c48716909f2ad89204f8ad8fda554016c06be4c23cbed5691507c096fd3f863a73fa3e9ee8f6799c21f4c90fdcc68488b6aac5434cd6b459a1540736c010c94ea2305a0c51a3b80b4efdfc89308228198f801f9720e3f561210369c4f8c0b0b517d175c222591d4854bb4fe51fb0b4301297fba8000c21eb5fbbef29ee76c4d79b8694a8a33f31b9fbd8c90bef79b0370994605d3479bf5e2125a04bea5b8b1df5f7c1a61c7e7bc70af973e4e804a5953a22579e0353572230e9841333978fedefcb03a4d43d83da4bc85356547a1bb26de7e753b7c2719f54aea369135158b04faa638a14a5d25b84ed744a790298f66c8b186496ed963d541c0636d0b26ccfde3ee74024deefb07e10dba9a1c5a6c9feb7f2bae9fd4d64fadcb460b3e155b0642c99ae4c0f624301d8925912eacc93ea137e3bf7191f7c0c96b5d104069bbda91f81bdd461b47bd5eda044149a93bcf946c3d00a6a93ed53f1126f0b4bc45d74bda65303fb6cbfc1f80d50f1fd81acf3f9c9626818311f9796d22410d65af78eae1059220512798ea1e167ef3a20cba0d399d75a4a817aa02dfdd75acfe5f5c09bc7b879a92f10048f2570587af882c77d3a1928280c67355d9c70325febbed02cd456500d4aeceb6be15372e48f37329eb40e1adb594c20ceb5d6e0aef6ba86083e1def59eb750bdc1bf886a16f53a7df10a0788bf092272953f3ace38d51acd80df49db69a132c8bdd47dbd8203fefe855b6895f5aa213167baedd2639eb084349c2a44ce02e151f2e28bbb22862d2608b3796801ee2ab3c37efbda180f064f2fb714a42442e8f4117836c57112317efbb0de716c4bcb9448e9e9279edc8868c2be8d8c04f7b62999e4037ee63ec883eec1fc448d59703d589a4a5d905db36badf0f95f0877d56cece47649fa424ebf52655753ed8db53982ee73ee752923e2421cecbf8769c3289ac803b945e3209bc7197412155ef6f358750a5cb5b536571f80dc000a441c07142d304f21880aa39d6cd7219d43d1f539cc721aea887724a6db4be3198d2c62f972906e45b7595175cdf4e4dde2c2d9a7335fbb8c2972e5686ab0bb2dab90d6ab3688a90ae7994fc0cb51ee6fa245fb416807c1030e9613e4ddaefacf25c5dcb9f7ad81e99f46d91ec38290bb18d7f468d92e9df7ae7d2a9ca2ab44769257efa624538b7a44ee97d074eb9e58ad053fbde518d4c29f84b400481a0aac57b379e04b3f28358f0d06862e0149c0d53a47813a7af80c48392ab03c9fdfe91c5515f8eab4da93c40eafc07d78357c27f3968347b96a2d3f27191cfe8116a526d95e707149251d9a7ffdefd194e3e32bcdc7147b48bdbdeacad9a71c8251792dac8db77d80aa5b58ed6b94c90bd7ae473533b563cd6536e19116ff04f802dd874b5e6e6defaca5a5b3833fd221833600a676f68fabf310aa164b854676cd3ada323ae5d0eadeb5078edf416b9a6902febe0b586d68e9e3bac6d1ca5f72f3198cfd9dbe3506a2e1d4bbda5a23cb0bad87c86b4b7b88ac188a2f544ece612702160a016818c78bb4b3e70eea6937ed9e32721150388fcc379ebc4d8311e5db8d0be40073eaa20bb62b7cd762ca65814d953787f722e2ccb96efa27f7a8658302e5181552292aa56e8209de63b5d86934167549b0d936202681757e1d1064b01c2822ba8352d5eb367e0a8e5dca04f7fa3cd7d11db9de68f76c9aaa73d867d5214b705aa806183fb665fb61c1657fd0087ecbb88e435ff9b486e6579c7ee374cad59d8010a1763556e058f33f16ad63d762cd6a93144f74e676f4efe7526c11714d16c55db3844ea063afad175c1235ff8f5951bc9b014cf5a322edf511763dad186894ffcaa6fe2b666c19eab442b8d93afc186b5639f47a921ccc463a765be6ddff79674572c6406f1aa449adc38f0d1c22294fb43dfdddda3f253b2bf0eea6f467dd34b25c3987f437e684a6f90b0399780eba53a1eba7d1f66374648a7865f22e5ae8afe7ba7a8c404b5c4e67cf45394a333ba2fa20511fff116272878bcc6daf5ce38c99db909dd06d00f2a44e4a82253154309b5e722aa5b995e49c9b22bd876dc5d6e71f52bf44a64332230a9bfaa573847b29d8837886c67f191e29016832f7f02d43f8495739a1739b5886b20927846ce11a20fd801ec29ebea0a7f0f43ea602de54f8ecfc0bc9128cd935154437ee4e10e0ea58d7da286513b8ba79f806d27e988e83a6245787b08519a84e22631bc86912771df6457272d6cab2f4da2817b3ba554b0d568987de228e52c52a25876c782379c551ed3b386]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 01687fe6caaf222afc3351ea3027e68aa1c5ea015689726610125bf9ff6ab4dc

tcltest::test Hash_SHAKE256-3.14 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex c2b4a04413a1781e9527fc8f9574773b7371f98a4adf1259d3a5daef87683432045d541ab25b7f67a635128fc746c6fb2f4d3272d47c92d667cbc60e7c929e43ec57544f77e45a72ae9d564711116cf774cfbbada77b2a4a552164592dc82145404ba8c9aa6491a9750ad0a0bafdef99099f9b220b05621d664ebbb8e13347a0c9e056729302ad73c22287800c31d948b864dab84a42c3b762fbd314e2fb97bc4fbf68317ae735375f8d83d14dd6b16b47c68159ab59d48011cfb553764799029a8fe5eda63bb15f12f4cc79c613006c7f6f97ec75721de13b73685fe63fd6d871f9d6906025aa52a4ff6b62bf114db228042458f1b72740a78ef41e7a0dd5a79da54201f0cda778dd5567727ff720a50a303187674e79061ec9627a79d61ed8e73a31289e5c3039849fc89350ee01adec99c4601e5f9c9c68ccb95a2dc53ad11461acedb2facdfd638496ac781e793298e7e8cb601316684d3e01a5dcffb0fcefc1b93873ce072c40addaa440ae0f9cd4c3a2b0739171d495c74345cfaf08c03f0363f12a01652ee4c19c65f0c74c5369d5fcf7a0023447071086214efbcb84cbceaf001fba706b1769e2d6d090b7bf1fc4fd892f8ee8296cc1d221a00b80b25ccba74d9a22ae4ca04db6df2832d849bd38ad4c685c14e18c822f2d0f08afb1baa152c1e361a93749141f683fd437570ddb1529939540d92ff9a62de11ae1e9adf9b842419ee995d86726595e9f5d53d5523c08f760f5781dd13e095f689cc2fd7be2b9fe02f4cf16edd19acdbbd1a3de482bd2dde6b9261db000a9d11b6ba471ced70f60b4544bcb4f2a14d44f1bb1f063e86d8d4f174bf93ff2f67f5ad3f7d39b9f2ab0dc9173bf3439adbb83c4e3d34b7dc34fc2944f77251ed6b04e5e23e98943f435a431aeb945054ec98053a34ea9f1bb6b67ba9b600a8c32ae1f93907c41ca543932be63832a96e0476e50582a254d3c286710957b9843f3bff4faa6536a3c3102aec0fce38af4497d7543692f669830d0ea1ea692754bff2cf51cce38ada275d941bde0a20d2873b3bbb5402515da7ea9176d366b49ac403d4c806ef1b2030706133f77885c3944316b2e44d4d91c0efc1784aed0bd6e9d391eaff0472067cfd14bcd295c1f2fa63eab34dd045b65c81012eb7487789afd6a962fba02a0d6b58211f05ee8fd128024a351737c43bd942f2f2bf25823384a16d98a36ead959a1608f2e7ef29febb9297d0c6e05382c5a9f96cb8f0d664e6b861247cac674f77bb4ea12f143adc13b965eed3767e2bb02a97053b26ce8e6480267efe06018b92bc64d211fa3ce9dedb3707d346aea717495e54cc53f5207c9d10009df7e6ea599dedee571d9aa86b7c7db43ced5f85798ab1c3d2f4c4bbad63d061d2fe91dc6ae44c5e54dafea84811cc7c86d72b37356333eae585c7c06578ca1b43869ce21503f2ba91ceb369f33f85b927a07c4cf97747227a8368df33407f85561c629c0681938ba475635e0b6a4bf2b5b5dd27341b7e13187a4258955f6348814c7d5aadf18139f34b8904ef0681c1b7a3c86653e44b2535d6cecd1a2a17cd5b9357be79b85e5e04dd9eff2ca8b9ae83e6c88af74630e1692578cd2044ff9c5b6d8c28086a8d506f980f8d22c57601c0eb47f59cd5c1d018e2daa94614ad3df7478537c87c80c989f7756f8ff12973e54dd14693076069cb9b6f120a3d831ab5bddd5e3852eb11ea984af6c290566d777b0eee984faf26f7cb9067db0423bb2d4cef1bd6a23ed207e70ac349478f66edff2b6e0b33008033d0094b372d01b7b45154f131dede8278602f45a26b26e8bf46e1357a46071df655141cbcfc9f68f177896ec86d4c9ba290430e6c9fdf7b71debae553fd2548b5d75b5ccb177f774b3c06f518d22b962cf3c07de649fb978c5302ee26cceda908c3499beff2043b47fb581491a1ddfa6e074224cdfe1db5951063c06139b2b75595595aaa10d05d7e51e75dc150f640ec4722837220b86df2a3580ca1c826ec22ea250977e8663634cc4f212663e6f22e3ffc2a81465e194b885a1356fcbcc0072e1738d80d285e21c70a1f4f5f3296ba6e298a69f3715ff63be4850f5be6cb68cdba5948e3b94dbbce82989aa75b97073e55139aac849a894a71c2294a2776ce6588fb59007b8d796f434da6e0e48b9b3ce95691e61a618b109c6b335c114aae720d9f76f7f185d115e67ed2704fecfcf660e3fe14a54d624aced0bc1616cf9f7fa2a6311ebddf595ed6cccbfa002392d7562c2dccb7a6a53583a331ecba6e07eaf2aff5f932e278a68eb7f1c2a7d7f37c339fbf72c405da8d554323647ebe8e40882d541be347c59988b0c28ea962a54173cf01bb4cf3689eae510ef1c639792cadaeda0b6177b6845f57dc92776c1eb3a12ab2eac4f7d606192d533943578eec0d94d62c1fead2036d1dae92b44cc66f56434195ce8bb9400058ae9f58a1061b128ff71281198e935c6296f3c29d42c0eda91c50cc0768d90e637f98889e954646f0bb3337ac62c087c7443a34d60a54d1bcc19040239b3d8dce24a955b8a2da2557712295ebf4f789cc24da8d7f8397cd0edfc8bd4896ea29095c664277b5633824d7554e809bc4dce1c7592f0245061a0fa58eb5ef026b4aa57543c164535df9f95c3fa3d2ed94fb989a3abbf6d52c634fd146ac9f543d7d131dc67506f346e5455e66488b610460611bf396d5aa77133fd18513d212dd3ad29472bfc81b9a74897c5daef27c8f95cbcb1852174b72a46034ce8e1fa4c70e74a7bd142032e53246248a39a0b6831649361d70441ebbb15169876de0a0976279961a04b7efa3a8fbf5709b2e95ab6c69db7773e4ba9eb473ee4455cd9caac1420e1e23f7a852432b4da525f4a055029e29cacf6]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 04a76a25aac4a6a4765c626ed67639ef96fab65998ec3a9a898629d943dd01c7

tcltest::test Hash_SHAKE256-3.15 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 5bbf1aa2b13c67b2ddecfa4f4726219a60296ff0e45219bc5c93a090e620b075386b497fe3531ca4d59838cd2293e52e0424d0d320eb697c0abb8aab0c4b59fb232f6fb34b073a9bfcf79f0ff557e45138abce2456d50696ec89c11d6e02a0e523f3d56971c188415bef793a48dae6ac06a6af080e78b8b10ae58f0d94ab4fdb419fc4c7dee7cf3bf9690c79a483b3e775fdbca9d13c47756ab83aa307b02c84841c82f519e3d734df4ea2f28fbc12a98d983d2f26897a8c16e80b094e770089f450571caa1b68d2138481cd93edcd9a575f7ac296c71a9b165f4a64f16a929199248d641af94abd9ff5f133387caa63da3bba88a85eef4d70033fdf79efac457c806bf4f0e3449e8a873c4c05d272ac1f1247ace4b6c1472ebe329f6d70144da44d38f5b443201ddd24a93f8257ec1c2cce6754d237583458776acf5554935019713d8eef80a4e19fb37f353773e25c0b5563a9fb4a7cbaf4163095ba03f1f7e4d6c2e828029993d81c0755ad8f1a14c49183d2e655f4810c82cc1922e5f6e90c620e2ae731c6da914789c86b115eeb5d680ef71bc28932a7a5868418626ace99ff6b7db475f55fd11c4cb5f9637489e0c44e4223f70375ce66a5fe21e2145094941f091836eccaa0839a45e0eb2497548c89d9855e2af188ad73aec7cdbd15040973f59adc74c20664b99fa71338bdc2a808e4c95dc54fdd6236bd918b2dc5f146af6ac3cf55ef0ca7f2edd64276a231ff138c785e9e36d56e375307842c0963321b8f197757fab9348d54f6dfa8efa97bf1f819c87b4f79b7be96b220828963b7ff8d263d428b16f3d2fe8e54944b3303ec5234032542d02613b119c8f6ecf8bca28b7287dd4929cc09132608035fd5804abf517764b6e2a37dcac5e252da2b2a4db283bef1ddfca879ba4663bcd399d85469f98cff54b817450a3cd85cfd03e7482ae34b46ee976d6b1c77cd894e87f45278b3aac0c35968b4980810ddfa88dcdb1a1a94a4250005276140ae3078a6bc8c1408396dabcd80109db0f49c7cc2f14eaaae03d32a4156f5b02a6e7afafe1849637fa1cfb61d45a140bdea6329ba0fe80429ff9aa4624a1d31bc752f7c97f1d390a04aae8a50a1b1aab65cf8a9771cf24d13efc33c69c8e60e7e2c17a57a2d70c1f39cd2cf6e7b860223b124a50101b4b0f23d149960b79a6cf8f9f91eaeb6691f0100022e80ba69718d51afc561a77653505056644e017f76b3459f8e3b7206d151dc084e8d48a21f7ba461b09ef5805eb49050443c8ddd513679cf9e2a4b8eff6b99aad99d0c79337512020fc0d219faa765cce23143fe2809fb52f682284bd3d8a0b174b9ee36d503035989d0288b4fb03790e5350b2921b535f03d4bf083731f58e4c9e7d6202faedf2fc7d4de1c84576e66f650cda564c18d701c8d8d7f07c8280d8031ac8066fd0e4c70d7dc15c1247214bd8b71bb1ab56d9c3a51e687b85c7af2419f589ea579f8782dde0abe30a0ac62e1eddfb36b1a3c3a409ee3e2ad62b55db338c3c212a8057ba6f3505ef652821a0b7f00d57e766213d57d6cda106240147e04d334d5149e1c821d963e3ec25d02e248ba687c5447efa2f569b506e485df4b0b713b174529246a65c4a72e79a6e40f50f6b68c3953964e0ec2bcb971eb88c256862100c2105c05d1c2dfeefec386399f9d05d7afeecf82d060375190dad58aecf82cb713b989fc6c782ea7d91eb0093e959e853d8063e644296ef5caba904cd5b1a565c08e76f63bcede81931d2c2634c8c9bd6c711b217106a8cea6f47faf1a97d43151f5ea9c48ad36a3b32ac13a891ccea7c229bddc60df2f04acee6b5cc29400444f58ac969afb7d36c1ac36ea457bf46cc91011be179d49be64111bfad58f72c5421e858b39a2fc61460b54e071cc8434098ee170a0263f2457c559325c6f73ddb0af3d232e88fb4dc9aee3c415f7c626090cf399036459600c73ebac5d1e49b423739c078097c121d2ffab3d37e3026b51f010e2463ede970b819a0fe3833c7122d26adf37b59806e96573f4e17a802a69a400f3739b18f4dd592e03f386963d36346e525cccc624974805911aa3878cda8e8b7391654d9c09616f32970f9d3fe5017109f5c394a2631027bbeb4661b92a18790ba983c6ba17032541d6069ba0baa13bac0d824aa9d626a21a5a4c54d8e4a99162c2ddcb7490a617dbb953d6873a7c94e2a9f1306076f03d57729ba9128da89c21e45ba3f2fbb10ea646df971deffa4453d3f88ef0ced7c21a381ca88eaf7f63ef17e5985de08ed24a87902589608412a8927fab806344f70ab6b79875d195ab756463f0ddc7a42b70844fcaf41580c789ef6ed039bf9da6d0f355c3ee7c523f5ad2bdf499395be1c04405cc8697582b9df0ad4543694b9514f7dc6f22371ee6476adbecbabd1bbbe1cf9874666d72068da02452c5e9b78d7dcb36e5388a6167e433a52067dc4c827c2df20abd1f38200004bc3fe7c84855b376496d59fd838bd83504d7c91d56fe3867f9d6b23610419f265b53d38d65b75f00ff4ead19ec1acc78de5b0808a2f7be83971f6e396430120dead7aec0787929723ed25b6505dc67051df24b259635b58cb32f19b09bb600c15213a3e9e864b8d3f03f8c6a349852e3a7e5bafd9b7fc687344cda231d9b124b794fd7911d40b52bfcde67aee218341a667c7f171a9f997e04bfd91b52a7efb249d3753f7fd5c7824af715bb7822b6b340febffb795bd5780ad03f20a2a13ffea9e6a37c76ea97e1c2d2bd195c7f80b51fb5a532227c227e2ec634b87553ac3780d289cf6a49cc4f4cb6884ef8f73928eae756437bca2a9758ebdf6d3383dc66b8dd51c0c3b80fd5d0ed9ee4b351891489ddfdb6ee0c92cb708569c644fa7793385020d7e900087a36bd2663f4571a82e3dfc014e10c05225eddf94b108026c4e873219d44e95e46666f485125cf9179e234c7e4be9029a50a3bb88500dd9103b08d79993c3aba41484a2e38ad8299026d263baeec61a65b5de6cefb7ad85f5778e853543abdc374c598fd9ff438d8246cfb44fbd347254d3d286235e73a38c928cad554a43822e6c39fe00f62b8]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result e79e31d569ab9720eea4bd48e44868e783d6c4d1c80cc91681a58de1f98ad382

tcltest::test Hash_SHAKE256-3.16 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 0ecbc479e99e61a98b625736cf1506199d8f2f186bfc9fe2038f0e5b87754635b30888c063462b035581860b2f571083c4e5c6859338cdb09004597b2899cdc87f1224bdfcd08fcf07275f1f1156260ad5bd19fbde4ab9844a35b3aecded048df9526017bc24d5362abbac1b7cf990d6597ef223551aab87b888e39c805932a9a92e0676ab2a455f45a733a67928950ed88f17a5ff91ebe16266b3ee48c5a147170fdc84d2cb2672e052bd690fcb7edad85a5028e595c0b9d038e94c2e19978dcc5eace638edc2998324110c46cb9363e34667540d0f74378b644e5d383d5da34f813c47e5795ffab785f936260e1cd180bb22d381e84d851a54aaca70193bb228e2544de25846bd03dd3b8fb87d614c38214b4a490694c8056ec53ade9678e2e0e7bea03670bf0bf094a0c00300aafb91e1a8646b53902bd51c6656899a5e5afefa41e9e9ab110c0512f0710f803e06156102c7f1b68bd311c557c6790e33430a82a4d004f086e7cac0f349e5e366964c0a201be216cbeb41d05e31b6db40c48ce7b0fc8e2664c5c70470f18c136ad3bd44cc09475d9999eda7444049e7cd060d902d168f37f4cd854731110cf692e4f078cc3827723d059eb1d09a391c223115e7e3c5100a7e288bf2fc506e7625f16d0ce9528a3dff59db56cce78e61866c2a5399b217874afd616b9a56b97a6d24bd6aebfc79a627ba2dfefed1509d43dfd63c1985af969f75901cd3ccf5e9b0a367f89ae0fa95fc521b1130fe88ba9fb3a00a29e5dd1fc7b89f6b6e5a2bad3796f320bea618f2c7492df728163e9fe3101026927aab0a08ed16c235a762ad4a26e9491ef6d8a5d0c7eb19afc27834561daff61bed203fab3c7e88ee5ca2d1317ad2da837644965ff3dedd8caa4061420304e38ee644a7f7ce5d256220f30133bc363db5d163aebcf58dac89759d0eede99856b20c202836cb3e01599c5e2599119bd97cad3dd32ff680ef6ccb9823a0f8f1b54e08bbabae5ba6849b78ea25aca38b16a0b3dbeeff1e400cfe563788a35899692b811e19a9a41f16ef5ba0e9b19a8d5ce88a44e87594546d07bb84263e3018db11204f586dd1301f1eed865af31e2a131dda80a7d98144784fa587e3b9a8f472c78d585242086207f1d7a75eb955e8a3074d9815730c99979dba47a85beab795176f40ed72713b362dc108de4a6a52756e8993198a5eda31baa2cc5e6e1be8aec76f1013443645149d52b3c3ef83edef1a36799a679e8fad6f061eeb38661024a034cfabff7c080a0833aff3f0c9437ad3fd538253f54175828e463902f1b65f6a67859dec6e0b7e350c04589563db7f608628b8948b77f0bbe14b2e13e462c7edaf3bd15331d6d9ed84bbd926793d648a7800247287b986e4a835b4b5689dc4f0b5f82e7cf0f184f843da5dea35f293197be3ae37118f9fc38a0cb22ea5edbe3d20c49eaed1e5e51ef26cce2abd8172d539da3e295382a32230d90fc7c2dd1d9a99a70932fc3866273976132e39726b8557ecbc927219fac741a4b5c8e7f249d0c8aa55519a756edabf02143ed24ee4f3802210b899dd0d7a66738b793eb6aaa754d46b50d32164002d17b9a2af9b47e55a8222e4ee54420547507921ecb0a8e6e62e337acec6b2612abeeaa1fae4fb248d17da5d9908022f8b42670a1c68ac5725be9516b4ebbfc55ffe8f84d8ae6878c2e6216dc381b6bfdb523d7af4671cc0ba8e7a6bac19f3f473df90947383f6a8a1f9dd5a9445c47ede86e3ba9c3462ea4ca6c8c2dfd7b6b50f69d516f3ea0d7ed157f86d33de96343de842123d57e49d840c696375ad70d2dba54655806c15c0fb0858eec9d492a89f8040c9ff590ca00aca4396952389117e9acc9840907637c615e7257dad22a4ad54c62909c141bd85e840a367c2693ba1504d265ede98abdb858b5978f3adee0f6fbd788417eaba9d6c47d114117918ebd0b24800dee4e4e1602ed4e12d9b4f6cd60bff97e47160fb603f6ac4991f6f0521e4464f19c0a981aeb7dce1e4538f6c939a066bae3d7747cb12b49ee0c409964bca68721695c363780ebaa09f3f76b8ac50d52700b6c728b6a7f8cb70d1af47574bf6915dccfb2ec61bb645e6c6ccf82c17b3f45f44174728e67d73d1ac27c04c5137d677cb178a9ec617f9415058d318d6eafa554f314c29b78dbc89bf39a832c37467ebfcdf210af727e33945e3f27a75c060693fdbdec1026ed12271afa81288f56c41c61d9811962c2c550e35fd59db7e4f247cdea5f9af69d824295067f38a020e0290979abb8b6ffb1e11169bbef26bee0c6e024bd8a6c6fa1551e38eddb0e374b5c416cd11be38791bb74e74b0a1d166ab7e0e7567d0cd5e7f5031c4d8e2dfc8e2c962d91a17cfcdd468a43137d0f6de8912cccdad13c62de98e02b2ed083f2f11074367df7f7b21d18de27a5b67237f2c9402fbb258f88edc731dff230b4cd3cbe6811f66dc859a9b8ccef6254fa0711e6a79a77e88acaadf674c5483d14bdc97cee3a8b9183562b9cf314e9c6eb5dbe7fef9781a892aa87ad2555913438772fe2733abe019d3a1b3bcd22ac9adaae50db64a168d45bab1351c01b5dd4947bb875937cfe1c9a77e12bd7b30b2f4c6b91afc332adfa2a4ed99ad1811e9ccd2e2baccb8bdc60ef9225c39f20b612c537c96377d5c188a2f832ded62143db2710d1fe87d1c97d210b51c980061de3b975907cef05341e4a49c7945a767e3e56c653f1650955afc355ed7416ddb2f0bdb76f72b54b862984b5f061baeb1e34b0b11a1bcf7d01974b045179e01205e8366fbedb57132818d6cf55bd8409b43ce9639cd443b74db22c993631684d9738a821172d40f6aa8ad4f8501e525cd0d5554074c14e429a9eec8704411bdad740a75e00df0f507dedf3c387ea825ee49c78ea1a596ba998ac0f40341f775456bea888f4671ecb22c0b7a365c8b07a6fd0e8c2f6030856a86809675e23174485f120346a5c0bc13981952a622f5959f331196da064c0c44a516f6edaf25825f59692e2fb3432dd12df20cb0594e957ef2b8f4c91e5118d0f06a5c94313c673260d9506ff7630695f07cf07e88fdd0ee43ebed2630a771b56e641092efdeea687c4ab331f9881106eba04535376c0e952c92ca16c4b6df9c27ed590e7174d5a9b5a29d9b421b14cd25475500ef02171bb895d4c363e52a2d24eb81304064ee9f14ca57d55982d891a65766053627b229ecdc5055949e190f6c48ce22e318fef0a0aa2908c62725fb77bac16c9743a967d25089f4e04975eb07ea8909]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 90b0b77c4e273a73f86fa4854b144f003b2d554e397e4afd1ab5f276e7d45252

tcltest::test Hash_SHAKE256-3.17 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 8e0913b9ec90db893e90389ad99ac918026f99f8b1b8ff4495f7c3b357be827d231f546d6563ab38d0fe7f0da5c3a86d32558b3d99def81ad20353ecf317f2beaf8ec7cd1db53fdebba169d5b3655b845d89d2c104b718bbedb62b8e959d1b143b40b4fe9eef5d240860401a8be9ab048bf2b6ab7dab27d0edfa92c0c6b8c528ce1c632b7077ceb2be224a03b6b56096c47a81238922ec00dbb6d2aa0dd0b7a2700a1b7a19b75a2fe5d1d1b9bb3342e111087953b28430f4bed23175f24dba2929f225132315c84486541b6422ca188e7985e8617f39bb539e35f849fd97966502bcc91f16fbe298a893702a74e1ac4405d7147578a955c684c96e4db71613ff02514fc678d06ed453761a3638e2c4acbce746b8263cc6f57675ddaaa732f89f3297ff2fd3fc359f8fe560aef634296da69dc551105bd5877f218b8756540fec98772183aee7ffa265c889bb373fa330cbe1db69bf6c4c25a4b5c10d4ae21e8f3ed9fce992f99484dc07de84816bfa9d349cce28b9d9f176ef1ac7640d46ee2f2ca6d98a069abbeefd8aa7325f20f55be8b4e7b588088d236736e5b327e6477569c4008e92323e88cf392cec56c65d13ef136e39b363e7d314f263221e2cf109fd1db91cbe29e3f95afdb4dbf0c5fa6c529fabdbc350c92fff3788db7c7fb392f0984c5c13e773eaa6bc8826b485940f1842e5c43f39f9de2feb9e03c84656b94a1c007718d4b502bc60f1f72a6ff3a349e3661baf854089acf7ebc58beba32514931f95565873eaa3cf3573dbe9ded1ee6a74099c9c66d87f44b8474cd55f7e56e4efdd53dc734963f39cc44e5c1f410dbe58b68de63372afb94cb1936c556e16f7b97899c67ec805b270120b317c9ab1c95a490acb6f00443df12ce9184c9b5eb4c48eb0805c0f8ff6f7849bcebe85df72c1eb9bb3e12947baede0d4410bad35035a461e70d5c50ca67b43859dada9a1a1d7c3c9065296bf1789f4de4f5b4da4ccc1c86d00b19281aa4276510410affe3ee2fa1b2c8aefb43c0d908faa0423b1f7423d2497b720f8ea9446886db03eff322bb71a8d51db2f11c1de6ebaced6676c25cdcc9cb014784dbbdbb13f56ffaa63fa234c916f02367dec0303e8810fcb13b29fec7965190abdfe5c54e2c89909ba97663ba1ab0dd46bd82ad69ae475e7d431dc0c959bd5b522a4f2fabecfb5241f49a76f23cea40ec0cb797039c0b1c298e9abb5581df08162f6c42a3b32fb017b590e6f81a06eee650e18582edd6a644523356d2ab21376663cfb6cc1bb12aab40fc4c321e9147b42e93016e00349d6c527a1bf7321e69d16bebe48b830a327b4b3f1f36d713dbd3fa3e933b6faf51ffe3d18309b3310fd5ac33647885a557e618dbc87cb0092bd45866a361a891747daadc24a0ab03a9e1b958af09901d1b9a5e54e08a55dbb823ad8dca7737a575740bec69429600b893f7ae3cb53edbfe06702cffe62515f1408e2660f28935c5617b94d965e0a2cc5b0bb69611fe5c5f98f2d66ef6aa4267c95ec31f4a39dcf4c49e67ed91278445a549f433963b28e0e04ae3b65251ebac1cb3e65e14b5f5741bd8d82e4ae70fc5115709adc881cc026b0cd77e7fb86c0eb901f295b88a39d3e5bf6803f98bbfcb1da7495d0f7eb044a7ad242fe54a6e303ced9a5ecc22f494a0b69a1733a21eb828af55d9f17e701814a04c3309844c9106cb2021b61cc026eb52d0d07fb6971cd0f3919d04fd860d308ac23082f291a1a52f36870cd4270b1418beb83425d37995089f2ec0985c8489c12890b811d7f2a68e3fe746f593c1b97cb637079c3e5ee352c107aacb7e2e9ef7e1ec3f6e89f4696ccedaeadd90eb4a0359f55076423d4a66c9a02a03656bde7380ab7f7512479c4f45ca7f0898d854210c4ba540897548b8fb90d4ccacbcc6d87746fea21b3c8daa474e5a132629566a6fd27c876ec75ccde94221a3be91f6ab584743920f73dc0245df2269c35ecf53d7025cb78c84052a154c9715059bdc408644d4a1695df5ebc3e56e98fad93d51e453bc5d4d4bb0320208ab9d2c3ae65c9398287cb38b69cb43f9750d37291f091a5f21e53b7f0c8a221ee5b8acefb333f2e9c570786cb63538a3fc52f2dee2cddb8d13ebd19e78a717e7cbd3d23ab18b468222191272599e344d6af6d86b3734ca5608ddaa4a72fd360bd48b66ac6fb6e129c4f32c4cc28aa98e2765324e7ac2495277472fe38a011ef3764bc4a55c3b6529248b205c9f6f1aced81aab092bfaeafaf594ccfa2c67252747a166b5f5ad4508d74d99123edffa87e3a39d1bc93321c7fa531c0ed8840b2fcf08d76eca71036153b6e11e2f41eb51e08ca306e12f8031fc1e97822cdc1365530e9130592b229b0053b2c0ff294fb53532374b023478d18133ca0497f3f0709a0f2e9b0030153e83a068bb1d1aaa1a8840d4688ae69e1f105f2e06885004ca0aa6fa1f7e246dc444298d5d078a8cfa201504e009ca42932fed2df89c74d2ea0b52ae2e217caec4c85b9b374cfd6afcb33b4331fd3418a6466a546b32d6dd59328e955788bd2a9896c30cda6be7b66aa82019eed3c872e0ea433bcef9faa68006d75a2c124a93e825dc7ca6d2de11fc757fe3673bfc03db82244ea44054a1070eb9670c5cb96d1bfc14453d2044e00ab1874a4b84532deea47a078ba4796f46a0a13678d69e08bc901700fdc2b0b31dd2f2c8fc4b4273a2d7b0e0d594dd63d7632b63020e4d093278313a7938a60dbe502eba0a0f6e579082658512aff52121ccb45738626ae1261b1f5c2ff0a94264cfb7c7f53f1b4c204b044ee3446519ce53d89d7c815c22f00f2dd092991f1399980a6d3e58fde3da7829b897f081d0258f14a05ed9b53138bad95231808bd3d54fb30445fb6aa147c0224cd142ffc6dfe4d50a5fd9faae58a4ce3bad458415906d3e37cc8505f6c0899a95ffaa137055dba625e010810ce863690736667c5b63670872028444670d5aff0ea394815f1ffa14ad8ffc0cbf606d364f8d51f917b6c3ae4db887aa7456aadc314da0ae05a6c68cebc02ae2384928b26f12967ecd13099c152efdaca164ff9e885e4d1de672a79b7b20fba62a0b2c6a0056b2620e00bf5e730654cf6090dfd27e65f845941c33acc6130ccce74efec98dda24673cf84b61f1bf2b874462b204adf540b970fbf15d7726cccb125d065d721d6ae2ec724442fbb9f068df631c91717ca4ee1faa4719e8ccca251dede9925780f4698ef7107dfba731e8641a7625837c9347e2afcb5eb585637f7c59ff1498a56f6fb70f568f9bd77e8aa4e1652d3e659a7b8c64e4b847e1471ea029dd30d00b2a69d7138cd436fb14d4046060151cd838fd5f7239a31a50e3974be60a837822c3ec81bc19f87752b338f50fdd799944ed21ee4020abc754b78db216ed990b7cba6c29618478b7aed84e095853c75e2c359dbb67303eb98d314685251cce04897c7d309c52b1824fd]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result da1f76a3256e7f1cf92522b5a266f977c0c4bdd0d15c93f8875e5caaac3de888

tcltest::test Hash_SHAKE256-3.18 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex a639d821468a9715194505280747e32a71f745eabac13c4c06c6b19c41d19422648d37f7f3f6f417ca0e16b61ad1f7d8af6a651c74a74ad838ab8c6bb2e333cfc33bca6efc9107376069aef06be3b2ce53eb9d438db03317935752bae5f01dd94da95a2f6841179e62c0947e01665d35e5e1b7070ec33d309e32cb30e0e19b678a40aee13ff06e73587a9107e4404034edb47912fec7b24ce1a5bf76ad9ff5a10168902d8a8552dfcbff6d331d5ba3f4f4cbac0965a6d892e516f534541173b03a8ac6bb50e80c0a42b7f0acb39dce9c819018974b47f82b31ee3611db1e5dbcbd0c19329901e41b450ae117aef008551d6a8462b992593e4e964ab54cb0faec1358513b6db8213a5c600a1f173b9b474fc1b912b66f45f4c274f9c9aeae9369c3d4367dd5f50d911021316af566cd999ffe80504bc6027517f20bf50aff705b55ea8fa1d8a0ee45e8b51fa05058e77495879fc47f7fd9e8d47747e0678dd9e95101264e7fa10d816d849c6a30fb30ffbac5de155a821275826a7633cd3f163b4080c12dd1e0b26b25f770709e36f263952007ebe4b7f546a835609545fd6e7aaad129e5d645252b9a746259a1f173c7af01e0f02607ca80ce3fcdafd5af2bce155b261f96b9adea54643bcd4214fd548ece33ca2758d84e7df08529883d935e0b8680831a2293d0da30c3768888d631bcf1c621ef9468d63bb04faa6390ef5313bafeb8696a2004b33ec2f97b334688c1d0619e87a1c24093e7f5da708e86d4b65f69678b7799af6af8000123fe977e23d5cee8f6692eb50afd3d62b620a20a7add8937893349f884c5443489d10f3d6c66d4a844d2f45d2a5af0ea3d2f891dea9d26d16a8477088b0c583ab495f8ed23ed3a867ac65b5f7a67d6190ea184348b0508dc36546a06073702bcac3098b5d1d1c9299f2cace3828ab6983060db77e77ef601f58a6b1b7ead0b627a8c38befd7a493abbeb3013cb2c590eab52d60f8571bae8b00ec26f7ad63bd325901f302f508260d7ed2c15dcb688248861bd24ed441a386fc8b729821a59b8b5239732f0bb3b44f919eb113d8e0982ce74d7dda861df9a38a092721fe12fb8332fe6ecc6233e8e2c57b430771ea4cf85726d633d2ed1b5157e9a71d793837ca69b55873cf051e5758fce9911cd23b4b545c7de3415b7320d4a184f35981eab164f2c2bd78a3df1dea9827693024cd867d42d75167c5ab828ec5433be58c8ee8b32b3ff2159c95b6e8e18ec8627e9e4a307e75069cd83f06f4c9646fc3c48ed0e2e322ca1c6bfcb2d24d82571a3c07f6fc63c98b86ff881e95226af76aa684fa62af0d9df37e5e824540949dcde9a52d5f9767588ca82159fe74b97b40beebd5c0f362f6415055b5a07f57f4f403e04dc88db0e6346e85197f14f263fc8a3de37c34c56b7c9e5cbd723e2f05331763e8c5bb48cd04bf4dfdb5978839e474f5b3f2f7a7560b94ee1a49119c46f1908a8ee5b481658416c6773080fd759f2badb7c3b08b5e84f0745c83ae2222c60bde9096ee1d58190199065e55b49f930ab07f7d03d3dd6f2da9e4b058432116e5daae67dc5f1d6a0c303bbd7a6020568ec87b7d46236b2098d9536d9491ea6abb0928b713d91dcda31687dc8362a05044302c431bfc705fee9d190a0770b73807d4a023091dd1da42d66b19f55e8816b792027cd9c195538b6fb6141572301538e7953a409fe20677da5614449640205568ae79241532d1fbcbab2a4318ed78da9c884b3ed1c6d8ceace949e5ac70f3aa1e80c66f59e121bc2b78ab14d747d9797df9f47845e8d793c895397d239317224e19f3302228e949299f150f2fc7cd72065ab4717ed07983b7da516f7e1ef15a51ea6e0ae0628f2f209ef696a4e5bb70b03b19beef16350af53920413e8d18bed472c554273699dabaf8de4fb93a29e2260b82b51912a085fb222476c755f3cc403367a0590d7fe8532d2a9eef3daf42b25c8df88f5e32a14435ec84ab12291f1face374186fc7b473bc7a08b958a20eff9e99fda46161d96ae4d6ff7c4a1f03ed5fb743c7c607dbb7172b219a23a8c3685245391ac4b49ad9af725bad564c2713cc619409b896da77dddc5e241729fc87080e3f34e0b1621af65d0da0cf47053d6350e930a01b1d40610c22c9bbbc16c6306374955ddecb9969e59a092d860ac4c533b7df250b30ab5119240d89c5aec06bd37dae84a333ef7aaa9548f98fc44452588487bfcd91032ea1b661f9ed20e00adccf030d953797992a73e2abdabe26ab5de3acc8f8db024a347e59847929bfadedcd15512b42fc55d3aa58cced450630a239d0e9136b03342fd076c22005a9b5950c67e7dbe2b83134cd3dd53e154d72c41b768883bd908d12512c3b485158c251117d3a3da345abdc40e44d539b76f241ed103fe06f34b57a64fc4878a92744a060c7d0b6e11f262899fe9db4440d2f9a432077afec6a4dd6a069822759afcd116eda43de48bf40a85cef5ed6ab9a8b3b9249b858b19b96a587f660daff5ccc12b016fc2a26a08bd9fe2909313e89b5b47ede7a615b63506580157d1a16b8b222c9107211276d584bf25e156a79751f735d614650463beb952d593f5b2c4e1fc00e594e29a760466cddd11bd8e8c72926b274a4ac1e9fc8c2e44410149c7785891453d8ea4343c6cb25347513090a731d128b0deb2109986d4948a7dd03ef53dc6f92aac9776269d54cfac98f66a98de4f216fa8409f3ab02d0d95f2aeef03b4874884c4db056a019c98681c46e4eca0cd59ae30d36089101ff98be84ba248c4bc7c735ed8a9afa072f8a26589c44b80331996ffd4192eb1939e93e50f216c754ddb1e03f6299d83bf3583f928d35f8469a94f9ca993d1987246d673623318cf23aeae3a9d4fddb16998326289d9cdb65751008fbc9619cfa2377b19ac9ff4db243c4a8c35e117325a69d728169e401ee659d26174eaae5d0db9ab60552ea7a039cf1b8026a8f20f78f09cd136e95ec3fc08ec993856394a99168ecec5a8da264bad499ed86c174fad75a7e75083cfad82a776bf72a3629e30944bed64d53476401ffb6eb3f52efae03f20f2ce353ce4617e9a5c8999d062b97d0b459b7c5e97026d5979200ade19f997307817c54d717fd57ef7e5002c9e1c17f55cd067ff9177df8c468575cfb2dfc5ff0393fba95bc6f44a18eea01d5841ab32bc6c5cc06d89bdbc5d4bfcaad07c11b41aaaa1f9aa1d2227470c414c9a1080e9edd82449321f4e1047db681778b7c27746c47de4666ba93d0da7aa606b71e043757b8741e820dbb18b9b80bdb47822720d495913989acfb3f127a402d44c1168debc4c509876acc7b1f50e458ba777cafaa1fb2d4891ddb17cf4f7dadb895c7fb0053d1f490809794250d856062d0aaa92342bdb7c381a6134766b8f8b1009b071bd205603be3aefc514a8992bf023385f6bb3c53e77d0e9a315c7cae9c96025ab4bbe9dce808652c2a844b604d90a9ce8ac5a9295364571513ad532ff9ca903e519df9ab33637cac176745499d006ffb560e7eb8a5dc322c54b5b70d4722b75a88e4af8b9c8937e4be5021bf0be60894ff0237723d4902387b2222b70312fa17b12c95de91ee397e75db4b5138961613dc2d6df6a83f49d1fd5f20cdcc3fdafe60d227249216e3c1e4654c70a1b4eb00740]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result fd00e1fda91d07ddfd86bbbeb04d01c07ffc63b9543018c6a191036bfb1ae66d

tcltest::test Hash_SHAKE256-3.19 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex ff15c16a1705888a933b2c0cff60bf8c1794f2c537102a57120ad6c8a7d9ffc8715a20b9de92396e03951f338ea6160efc9fa1450c94992073b37df0d16e0950e4dd0aabfb5d70ffae7ea5e0cd1c1dbf96cb2f6c2b7923da434e8c231fd7d8cbc064254957ae56c3fdbd661aa409fd264de041437c07ef0ce9a4aa66795b93c16cb8199ad8cd1344561c0ce9fbb7ddcc8aa582d0e788263ecf7d80c3c74462b852a18fa66701ce0a22613c55ba6ce637b3e3971d5542eff95ca1b541f1d86e3ad9e62f76ed94af9bca55a067c97140f132622b32ac7e73c3f8d7f2e8df60dfce6951a01150ccdf81b4c0e026100e12826deae415d684d9270be8dfc17a23ddfd6aa88b7f7af286444a6aa49b788a8470ce436ad0b99c4aaafd9d23d3a86b8f4d44b497c9514dcb6af31a93cce72fc045bb34666b3f0eeed637bc6727527e1d48603d6df6bf27d77d169a55c34643eb889e8780ec4f21ec321f0d52c361a5b076240bb40eabc6d2051db093887e0f30c2de025f5dd01f6d461e5a8db1bb28705ef9e5151afc73e3886f25f52175dbb57ae36eacc5ac4e989b9d69bff94a4f8488489438219c76329074c0229815efa23815920e2dcaf796b8020391a1f462147c77e1c42b7217e8a4944bc3f545922085dc382e9c12618e25b6f0abb3a3a84ac3f0916241669e2d4d378c7f3eec0d57e7a026b31a6cd6a96b22f8b4363e6a4ce4196fb96960522811c54dff7df4a86ee8c92546b0c09c0f11ade35533adf042675c4272ad487d027ba654eab944ab8d10bffd8f64f6fce79fbe7835b1d88255d520d134150665e2104269e9fbc45edee6ea763540f63e599ebf80fdb8a768acb4cce5a8a88352f15a0256a44a5c0986f2b358e14ca8aa8f9517c4545102e9718fca46756ea58e57e04ce2c2aef4f3b0bc806a3a8ff588ae0c2e09e382d14fc9eb81bc446f55603b2a89d4ec2f746582cdba75e911c31fe18b6c1a5155fce0de52590fbdb47c0fc5c122f5c9d6c4a724acca4195dafcb84e9b39be47d26be5d84bba06874400e41f2c7d0d02aacd01bfe11696e7f3869b1dc3fdbc6d0006a5df5f0c6b4b27cb276ef304e43eb375bb7bf5083c87634b10778c20dd6ae7b66a1914b704b066c320dd9f1e4126faa51c7f6f07fa1c32315f847d0ae9e78f617ab1f5239a5f08d21691b732ed6186466df4d77a9a4e6822cf6b1e23a88b01f01ecd87b9f4ff15df53b5c3aab198603ef701b6cbe2c70e05a955f7d4e1ff444c9e9654dfdc3996d11d6f4bed53738e77ffcf92619b2c2cc1366991835eea605b4233e3fe18b59292bde7d8639b991ad7d086f6a48d28c840bbd0739ae5f55e0752ccbc7f711a11097b47f17453b30b48b14d67fc7f61ec6983b1257f3fc84537158b68c8af111b1e9eb41f8841686ab1e94c6fd13a7f9f24d535309c340a1dd3d4966e439a41b9b97058e9072f613ef9c1ac958b872bea59f8831b578b63eec2d7155657f953f2c2375bd759e3468f0a819561922c0dd3f035c56e1a0e7dc1ee6631a96b96eecf213ce571e625be66cb712e5c4ff1cc65d2d420b24c83fd9d3ec911ede937bb56bfc71c4017bf71ca24d8a00d28a010a5e51dbe6e54b38e8b9a47dfad38a56191821f2bcb527708c3fd0012fd86ff839d1257c72a9c66d692ea2ac06ec0a88988538e389a00172b593e2fadb2d2d8cb5442cc636e8b637dba16b8debae907db421b5a6c368a658195d0ae99b672f190d25bc2b8c389742c0b073a61181b8cfec7c0ccee26562ab37e99c5fd91d0127b204682f1b0fe5f8b8ea3f77111befd9b1f2c2ce7f2ce2d681c82bb01c952053345ec5434be52ed414ad339342c3a23595345c27e235938497873dacfe862916149347fa973eee6f7478046d5f1f7c6e169f5d5dc405e11fe9955688c76677dad35054d7a5a3812548e90687ae85eaeda6c22af28d147812e880eae63f9c992be104904ccf899390126ede44c9ad5a2ed61b6968b5f7b50814b88f47afbef983de2e7edcad77a22a5177d05728ec56cc25298d32d716246a1eca982f9034357d1b3c750997e4196e96a2a12144c97d20046b0ae358f642b33725b9f099a2c96238cd1756475585d7526da525c5db19d5046e66ecb41e9c6e2e68594d246121fdb74eda35145253ff053770e70487d955959225d191059e0534f0faa7b925db8a07403248875120402fae88f78956181c4874cc144831c4131b5e0262c03762a1a93fb3e328d85735422151a9dcdc72a38d84ce377239ab12221e2530f23c33cf2d9bd3a7715e8558ed3e6fa067716595e550a0bd8763cf8ce99fc784979adb8d04e31607e96a27258154375dd1bb6d4de056f818f0668dddf2816dc058d9d645bfb40f770981b9258f114d547410f635ff1618cc55b872afad319c869e8f90a3ce7d04974a1bb7d396e41606e7289d0891fc975a2fb02a5c9a4eb849d112a701b1aca9cb33beafaa195b25f7a358ce2059990854d703f17f4a27558ca90995f9e9d173955ed10d3396d5019931380607b679c01ef42a84723d59f8c18eead9e70779d68813f95cea8fe01d8df93cd13928fd734aff7a4fffd465267aeb2cdf737b046705fbae1b49650aee2893ddbc3f31b2865b6199a052afc7432b56463309c51f99b18e55c4cad6c4081b7991237461276db2b30f42253ffee36548dd61246619e2fd4496f6092599dfa9230db39327dabdf37c2191e2058a9b8b4b48e65dee81c75ba6c80b6f01faf9841899c8f5f63aeb9025971c1380e8c03fc61f3f10bef5db5f3d8f9186dc75ca2ec2cbe0276cc67b1b37c64d344297e5e551c6d7d767c4837a615404cb1578e5fbda2aa5a1fc1be0f73b45a1bebb26910e76e64d3c69ac542fca9bf1a65da2c18da72c75f01489b1a6987bb62d6b03462d9de40b9a44ebc1f1d1edc4c31551e166b247cd9c56ce61bbe7fef70ac2bc79c54f569f8b8a2151730fc01a8bcd24c9e9941338f1232875a99245e0d162c0a067f394758a99db8705ec995f8af589efb8b50534a91a4661f23fd7101bcb9e5e7833442a020478e72ce0f0002b1f0fc736bd944d2eac96cb283928e1345dd4089876ec39ac4a97d67a955a98f6ba14e505e646defc4a97f5ae26b1f0d5a9d0332b46e300c3eca6e951624fa6685737cd88e7a3869c74d886168118ab5a203162b32bcf3bf35b34a453e035a51a66e6e5423a20c079cbc700d3c0b39d4c61661bc28e0727b526af7c0487a3116769b0c0b45655192ebfe1da787e192316ddecc2cbe6217073df95f4b5d11e87e9f013f471a4a70d35b1c7976701cff96406440c51ecb492d9d676831a551e551c6a8ed4ecdd9cf8f951d6bc42043e6c9e6afa3cd6da36fb31abdfcb847c191579699ff6a849ad7914109dad7bfdeb19308c7df8dd670f3625d02022a6cea5457b4db5ee06716f0a006e9b0f97475c7bc4eb5da4d7fbc3c020e3e62cd3b52971bcb76f0fba0d483838cc4d46f6791900c5f807e55900eb25bd57a04eadd83c06981739f02545cf6037ca22e84c1b9744be430b1ec32efbd3458bdd0c87905390a7ed9523cae37b3e87e8ba67faa76db4084ce5d5b8ce6c557420faeb1385e68c66bb0f1f2d3ec20fa398824a7494f2db4e86169ebc87b328a397886eb4218b764f001636dee03a70056a09046c7ccd26fb8f1bde10b366c96e50140bfbeba8daeb4d392f22505afc47cdcd2a24b7533399b87418880a0db43f0b1c475d4cd516a602e65cca0799f0c5442d203fed3b6da3929dd274c40e858ff91fa55aed86d619b1ac44188e7e1a186dd79b3086dc4193be279059a9ef99fbda7caa77163485b0ea0979b05d7dc4bb9b2adf990cbc6bf49b7fd6b904378decf]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 45b861f7b11453cd4760df4be8cdee5d72bc8cd609c0f2bc5aa2aee01ebae0b8

tcltest::test Hash_SHAKE256-3.20 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 4fd5945546458215ad617d6c0b607ad10a138c5688b2a088ecdb6a96b6d89fb65b2165c54f21082d633dee0c5113cd9395ff1bac7fe4c6df87292676e00130df50f0ec533e8b29b50d7f6fbda8d435555e735443f1e6bc09e96065092efd89edd64a11463c084d73522de7c5382c1ae10d761f650541e8cebb881199c95314a89738bce87022dc31db51406d28a2e4fd49116458e37cb4f5a5aa116cd98b37d838c1d57f03603eb54ff261fda1bffb72ba4b0b65b41f87484ecc4dca852e5c4464ee44541c4adbc7571932bdca09c707092cfcd4a0b3c88d5ff9adfdf5c3eab5c1c6f1afe4691b319bcd9bf4cc0ab186debc20edcebfe18d7f36194c52d249f3f751c4d7834467bac21684ecce4a1fb5e0045df867cb3910578d79fec4e3e0c6af97a6162064252975fcd5ebf9507a5eb80b9c3c925f38de8f05b55c727f19f691a17db2e34fbf475b88763a74a42b470ed9c602780446becea6b5ae852d5b4a447633f4f58f9bdc1dc14f2168ce98398977c1924041cb79bc79623c24760f8b711eae247eac23b062b049e7fd562bfbd1ec7734139f2fd70285a24d78e19b81bfa2d88aa52cbd8ad35b4ad65ac54b578f40ce3019a5daa048d35e2aa9f668f4d709976e9399d33317cc3b34a8a35f136b7cb0cd79db359c35697f1cde3ddeac605bd517707acc74d70b054a0e76d1f80ca704545cc9a6937251eb693f3f657003a079ce63581013bb1e8e60b5c808ce1bc9b20de9f8964ca7938c59f583660a68e16bdb94ba07d86a0fc0bec5206c5d3feba14049ef6e907b35483628914740362693862c28198d8de682ab6507656c2113bb35a336942796410946fff272db1575d917532aaef8cba9bb71bd045bc5684ce734205672d9a1beb6d3a32d4da3afd825d530492ee3cd625556f69fb62ebd9b0d84e8d66e6e44b537233cca425fa9565f09ec0c01143b1837a33860de70c80a166e223ef2ad262d747ef152b8d9aef76ffbaefc8f53bcd4499faad03c5330a0e83af717655ff02e542eea4c17d764c43df39f9f406af89d73947576369e9e656c308ee72f4c49c1c27a5040c62273c4b139e7807d1f987b9dc8c0da351bb9628a971039b83cdaeca3a94bb62f828400b414ad24ac3c4476af84b485a2902a9e2bb9a49267f74bb9e0040237b9be3f7e2cce19153787a397911079fee3c6982135dc737ca644433061d39e4acca04b4803ad55da84c95ee52cb436cd6285acf49249a47edded6a580e5e4678d0ee51661ffa86fbfdc91c6866b8147b85940e1e2848602172b86939cfec23482d71f8de6afcd7000851862928633a8fb6bd65a7e120cfebce6ee8db8dc65d424cf1e9bacafd6e720f27442f5bffd0915cc65998a31b186659d78e472e351bee9336cb02294373d97914fd83e5d2000ade7894f8587f641a7bba04849c7f85d56b0747bc6e170fbbaee0592bb025f081a69bbbcfe795da8e9de0f29abdecc47e3d2d05f281c169a216530231a23fc87e1bf7792638a5a34a2512fe927bc600716f71acab4a89ab1519359d9ca56ab189a553730433f7e6d67d16d373bd5360376b99e4f0b0b7fa9d1f4dd575a0ecd32bac795471c0d2ccbb0bb417456add0d57976d57c89e9281c190644fc37a0e55eb982fc275c7807d8039b673106caa2f595db7ab3bf9636509d442b68e1d185f52d23e6519304720ad6ee28eddaa02edc6243d8851aa72d1fd53afb0df70521be7c06ee764e370ddca110211b30c2f6f2553c897139907eb267573e5bd5b03af32cb86ed5fc842dd608cdca39b7a78defe54207f88ae6adb0ba355ff30c67543bb5b502210c80748f64639ed9cdc2462da8e0de9b8d2e2ca34431fa34099ee000bd9922b81c9054615a7e096be1a7c223f69577dacebb9e02abf977bf6bcb70da9ab15b3bab486fd44179b47091dc847b84dc5e26be23544747d862f591818931d3ba160c172d0980bfe30a886cb50f8caa221c1fda09f1f9ae7b367719358baf0f0fedaa0ea2b3df2c468603c0d5b5effd031c16b0c3f982563e8ca4716c1a9a931f3ca5f03e11582d10b1834cc32a0de3fbe8bbc0d5cd89c5beb00e28a9989d06849d804a73947428ee17774ee1ee8ef588fc6f88d3f06873685b24bd52981edfcc8ab99bd7afbbb61b126065c655bbb816e1b2873314b6f5c7e8888e1b9ba895538ec252ced5b73b345ccf1ff4f23c923213253a778cfda359e29a394915c2bdb6142b1deda8cf4ed63123ebe2668a1a771b281105cb95329ad3ea3d8f88e5cf60b5644ba89b9c675d4a0f4803051cc732644ba9827315fa0726e91943878a30efdd0e6a841086fb5601d1b2fb707d1f1088f07261f618802b66274b09743888b00579f904ba17913ce32bcb201b23888de3c6fa38e6f55b741c154135e1793d5dc93785aefad6cf9e886def156788a9f72f2fbf5ba834e27db343aa7d41b4d54592d78ef7554cece74c289d400844ea08a5ab205ecc6fcba4c632c5343783d703ecda83525bd29fa3b8dc54346fc0cf2ef1b9cbb6b5fe6d95bf535fff155ec92551a0e15471104e505909b266f094dfd69dec1ff817795ead2935a9327dbe02064bdb4772277e8f79a721265c4d29729c04b2aba74368f5777e4a5f82d32a384345da244ff185c98c1dc33e88d8075debb09ded28dc35e8613911d144b81bd248da3df62261ce83044760597123a6c8423c1e531144789e16d41cad0c9f0b46a373773bbdfaa1427e9e7905b9a290683c01a48bd51e999ce4f9db515eea912bdf9c0663672ea69e579d8dc1a6e74ca435abd0e608bd215b77f4ce5c904d15e849ce7c0ba26056ed2bbf0f2bed745402db9513f010c298503c6f762d551932129e9538a314523ac5679d8d92d1bc1f1a7a47fe4881a17721aec4635221e15e213a5accc82156ba9da793799518212641ae5ef03dcfec46364b9e06597b27f29aa9b9c8c95df06efc484b63b10566021ef4248a7e70057e049f56efa1b57fa7f5692c9d452ea1c067e62fdc554ddd2b18c8433d59067f971316797fd9853ae6a7f51dbaba180d4746edbb3420461919b5b735797bf7dd19f84d80475f5efc2748da17b1a6ae756c3feb780b70828c467c2d65df45c8808f1aa105d6a1a735e25e84a51279568cb7a95bd0e2e487a949e2b76ecf550d1c5f00bd749e5ef27ac04f81404dd0a4b5b229ab602aeaba129c7fd1cada081a031220ff570ec5b52d19926c73d41b1d82d42776b07401be4aa6aa08e47ffd83d74111f317b8a493ef86cd82aa35d72576a6293a1c3eb808a40107c95631a3defb545a15412c49e3147067706df38360f390b5623deb7c0dc1240f9f8a9f799ff1c45ff26dca44374e6ee6c2398dae349c3c328b801acc42249827f81c0a0d2b5d2999f6f8231204ffeac1e49774c634d2f157127d4d374a40c5e76f6511dd259ffc9ebf7ab731d09b7c9f44023959c63a6869939fe33b8a9845d462003747f33ca5d4986007323ec38cc58cf45bd78d350a008b628d4797bd80657c77fafc38b5cde23e32938183eaa3db1c085cddee454ea2766f9bf9d6031e111b36dd685a8ddd4e0d7cdcae64834a566d98accb5dfdbec5c101afb0ea1b777ddab73efadd374c5e82a94327352ff8ae1e3fdc2e70c0c2f107e3290b285914f21783c042254493ba3a42877a9a4337789a585b75bb3103aac76ea877356e8f246e26e1cce7385bd790c2ea16e85f7f1c6e9cbb4f91c0e9596c1eae7385ae3e6b5b1b240987850d4d22c51b9ac3f7382007577c0a98f2fc93827d9b8e8dbabb5d5adaf7768aad10616ca37c64a18d0b19f1230e453539b5df96f5f036d1f67e60d9e0ec9265231deadaf88d0305936060b889e27dfb179d9406325cfae6f4002c74b763ebab897e1ffa3ede04649cc0aad9f6a9135f1f1c677c9d32493125e906a7d90df0d242c99746e0dfc7432bb44eb1f3c2a3e5b2dab056a110a0452e8185efc04b305de188d75d7922fa25a2a3d2ecfbbfbe0365210520e858ae97507230a9079c28b2d824568a7217eb80a427bdf78900b04cc8b7dc67cdaab2ac4]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 5d0b15b198b731b3462d29e0677914a64f85b290851268500f313ec0b7130ff2

tcltest::test Hash_SHAKE256-3.21 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 2f46fc1d60552bba4c86f67fcae87e1a9dbe4dfe3e2f39b7dd3f8b7aa2fe610138ff51968c0c4f6dd218d136ca7531f341485207da3986900e6faff772bba5c63813d8b9f9433717b2df50420c7cb88de01fad4ffaf6fa361d461bdd48a5a2a03869d9af2e60a961f2c2bacb1863dc92822da6fd26ce5c4e11ae1653ac241f383fe99c9fb3cd6ef29ca859f8779465a72f59843ae7297683f38eea8127a0e635557b68b211f04e74b77b73f2b0751b76f08b912dc36f0e7acacddd904081bd408207870fcf33108c4c2251e14b70c5a7ccab13ff4408edde9e5538a8802f6d01cf753fe075fd7ee462853becd0ec2de2cca253d7f25ddb55780d43f06e13be1f43add94a8cb55e24018c783bc85119cef75699de54d4a0875fdd459192937743e7989c779bc579f4311f52f7bb06521355b02d3bf2d6031e5bad88b374186214c11cd28f2a9497fafb260f482f75a05aee98561754cccdbf7465527c9d0b453bdc22c1b9c18a80e16689f855ae05ca4bcbf75d9a031cc614b3eeec1794d2e95f3d93b31ee90ffb4f7b305547bf1e9a8df3b38aeb8630b6c51f2e9eaae1d71629ee55eee6298bd1ed41036e45eb28d6c96eb62533656e657ac00eaf5e0d809340f652bb380a66ca62c0eb8a78b88b47a645e6769929409bda9f76695a9f372a4e5d70613c1308ae5600cef308b0b0b5cd7f2dc546590d1f8dc34f12c71f63a1f82b992a1cccda45730a96ef1c5bfde8e5247259627d3cba3c357ff3cc156bc1e869b45cfdbd42575ee529c7dc40dba7973d9d7b141d37348ffbf054920ab952c61fa9400a6fa9abc29971c371e7b3bb8bd0957384c265552d1f887d4086b41c3953601e6869780a452f542a03d8ebed68e84489dbf32ee4bfa831b5ff0fc4e6ea0fc03e4233153c8faebc46b99ced03d68a91054139faabec9fd245f72f517a815ab3e7be56ea09491e905dbcba1fc57fc0642edd1b31705d0b53754f6dc39ea53d216204595d391b87b8b834baebfd0891a54dd8213bfcb9f49b8d3051831bfebef0f83dc4d893acf21b9f4825b8711c063caa59d38117a96394d5c164f7b935e809ee9120c2e0a566a3592081edea6125128d89ba6988d55e25952b2d883ff2c0548f27f383e8adec3730e559f4307ff80d3e905d5c19e4f0361495359e77dc50b92228c883736d8bbf6abf32340b1f8716049544c3907f1eb09b2802a2279c9f21eebb2429498d4b2450d5961543e9d81629c0f804b64df279720b1efa18dab5723c0991df31b4344c2a500cff9f84f6f3f33a008953f7737ae1671110123d9b96543a960df58a4f2040571d5ae999e697ab2be4b82f24a99b3064614bdd6d58737e75bc195bb9a388d9134f8ee7cfb1e898bb2dfb117d9dc5a62998124013f4f302e2896c2ce6386d3fac2d0362cf60d0041062b9c3a956de8cdf3dcf04d778fd27aa876e2fbb17b5b8493c222140fb3635550b590b51dccf2aadd9e9f160eb7837f53e872ee0474a8d120651eecb880174b0b145b21d3881c8bcf3c8cf57554e78ea3520effdd012063012f98f18111b0949dbe480b471dbae3413d46663be6633b2f49f3cb9bbf76acbe883cdce9d6b3c49119e3cbf8fc4243cc2757e2d2fa8af74036edbbc0fe0030a1155709535d955d8dbdbb0e59b2671fc8613de5caffc3659ebf394afd4b4171614d94017e04d9b1dc203a2cf9ce8de9dea164f99474a0e893398313a135def17797605f9a6af57414d7edb259af2b34773e6998cfe7a802b63c47804d3c2d334c99386e68fe7d26b05b5238e9e2c3821abeb84dcdc74d46803de33b61ccb0a958b9a8c84a4de51c4700e41b2ae7eb454198dd832e92052679c5028f7f660de6347f2df7bec7a1f7418f2ff3ad5d0710745355c352e674251b58120706a6995c6850347746fa483a285ca23ce180ab563b849d98eb22feb4dd7d9e2c97fce78e5ce358c173645c4773dfc76158114c990f93317e47d62968489c038a93e77cfe9a9f0750b48432b1acaf2c0b817d6f5b59059dee098e68b1d539ee8b8ad4de2f99f9ccbf9ae8800b3b412c95ee23880fb0625f62a0aa51241bddbbb9fd736f83e37a156886efa8b6c81c658b0eb23b489e2fd2669db85731850df7906c11b5be0f967de619283136bbb753756397dd788ac4b37451470f5c99313ea9475e551066d572b2b210ae2d8e9862cf7d430321fed76f268bc4de17d0fddd5f2fa7a23d81cd7048f24763edc9463003bc5220d772be61c77db047f5b4aa604c858c4197f8d503335a2b1709f43737bcc133db0b7f103801d7a7c178cced73dbd97aa7a23482b7ec4a3a2bf487e1e644fc6676208c435e5009f9ff13723d64979c01390ebd6ceaee5303175ffcecc856fe78a6c922ee412c855545585cf0df0a5dbe9a100bea38b3f4f46d9eeb9e5a4d27d8d167cb678d01ea1838a9e5ce2f9e9ee13f68a8810dc7b0bc9323ac9d18a209058a8efe559e7aa8d14d9a952bf2eec0379d7b0bd7f6b4069a2c90e86f9ff0229d36a1241ef1f1320f08ace370b555721038b9ae457fe3773bae69077c3ca1f4ee6a40e54a3400162fde537952e37d151995c7185005e0730f7d0e82498b5210a799d0aa6db111e5c243109f3909c039a23905d28e25359a842d13f15e186ad62749e2fbd005b0f154eb86fda994c94048970855665a4d5e4842fbdd304066e60bfefa4237be67f9561c08fd1b10e2d97b3441296f11b22eba33389e56bfd090b42d89260b27a14e54792916040ab765c89542b71ee7ee9c58925ccd37c33296be6a121fa0fdf760ce6769e0faeec165af4e7f96ec496d17b1c4dad26a16f74899191787bf9dc4e1228b3de676396b699da47a415db2b831446f25565417b926c2cf1c06bd83b4400f39378efc774fd2225ba53ee9b05a698ed5eeb18c31d2c1ca009205013c2ffdd315c942f424d94fcbb892e826debe310fbd798c7911eeaa2d321c1b4143a28b1c9575cb03de8222f86fc5e58b7a6e28357a684fb12457305af81cb1e426a6685a3ccf6f91e0e50c46c5a0bf8e2ff4af9e913d63bae5c704d1b716517051c6260a7038a934f87c6c257ed5ceb57bbc47a9965b710cd298883fe38b726c516c44abd434104361b2b312efb7ab87da5f70f4fe64e01d77664ae421fead3ea21334bcdd642d63d92281ad9cd8de7bb848cbff3dcc4963409abd6ce6e26a6dc05576cbf02b690cbb364843fabbc017b1f2a936d9040574daa06038a6d9228048ad9b47b10c5bb474788774adc2f8d243f7a91a54aebcd88231d3e5e6357e0c878612ce94896de1b163bfbe1aa0f131eac23c38452ec7f4e3b978e329a9c56919696daf2f15281aee82619ec5b841bd02ece31f0ef6cf508b91dfcee588a13c8ad21c87c54202d6885f0d85438b52ea48d23e2d26a93b81c66568f7ae6499ed385a9fe70ba2968b1b54241ff89cbd30190c9de130b884ff40aeb4fbe8c007f1ce6d782b76995bdf13fc45ad696ed934f01692d991a7442f66d8344a391d83f0998535e37aa8bb190ec1d2dc1a644f5f7a6aad84edf7e1a8c56c7770f3ff8650462c49adac433cef684f6c2a903f8815f4735e519a2cf5e1d8e5eefebdc8879740ed33c8701b69b8ccff61f74f330bff0aeb15fe1aa8e9610def2b420b1b204c162274e26a73ca0b894c64e0cbf143812a2c74b9040e44bcf0c28cf95069c8d522769d79effec66e39d0d5757afcd732eea1fb30dacf903c1e0aa4731236e9c912440e0d951ef7476b074403f0a83f8aa4f609e4036f4494e242024de4f51b9e5235570bee56d52d796a313ab1a5d50f09933151126fea2de9e316f83d36d6db6ea4f8f35028d89701741d88225840266903f1f68c33e98d917862f07f7e93f6d43d74526f177a0a8faf695ae74209676fb2dc42d56ddb2a858c76c5403edb870f4959b79fb541fe6096c54164f589587a4a40c48270279b1269b2e513fa35e28c5309816664c8f940a481ca2fd548600514d00a17ed6735d4caa7ee6f331bcfd805145e67a867719c635f63ac83df14bcbd0a721a3812a14909d63fb66bf5758eb9fa8cf812b5fdd05d9e8c6f63b5ecfdad40aaedd2a263fbc1ce678e176b99fd0c3ccbac162cf488edcfd2ed07556f445012f3176f9ed4496ce0e45ac7d693cf564b690835450c22be73a5a9e146022d6002093b417098de75ce34b0ffdef95222b70370f2869b3a2a2a933a83f05c15379e5bae0ac0280766d6d70521ed41421bf0199ad07a3]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result ffd3b57299ecd07e1c95653b48109478bc5e749313e2295d51b9d57a409ac1b4

tcltest::test Hash_SHAKE256-3.22 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 535e5a7f716d302c1a9c687f79b8a2625cac34a5e65c7dfd83d0774c21958c229e60ab847cf59aeddc478e93aae1f9eb1584a36f4212fc9f41aab14640157dfefe6142f683cb58f30fe3249550eaeddcd77feceacd7ba20be2196ff2875a5f465da7475dedb8114799b6540ed29c283c8ce3389eef5e18485063d9d95f2bdb00a27be33f22846def640944859abf4f131bf9ae121184065e71d0188231519936b5253d268af716f556231c820f1b0d6a6c0977ce99b612562faa5475639540ef7eed7f998dd9b160594e058d99770748675bba5af1bae7377137b43b5fbd7834e41bce2193f1e93954d0272fa09de8b5f436a03f7f582b091ec1615b8b91eb0cd2f65545040863872ef2a9ef8c5356b9fbe45104ad5a87d4208e835d51db3f7f2dc7398d48e6ca52d1fcb356c662f95d64abf431e286a2a15ee641ca18611c95ded6a581c753c4a324366febb4927ba817d4b14e85a62577c013c32947ec2b57cd6bbfaae917f9810fe70336bfaa81a3fca6b1e40080b75f2e5c3202484413cce2ceaf8f17f913f47a5997bf4f74b654fc6b1c7abadd01609008b6de82317dfc06469eb8b7c3b7044dd2540fcdb6bfc5fd691a991b84aa82ce6076435d7b11f01f1db4ae333b8fba709b61ad9f3947fee8ead1c88b3f5bcdd1ac9bbc41e976af169918f8f12a431dccfce7212fc5f405a6346c8f72d4bc4a7f344cce96455541d403f31e5b577b35473c0ef4e4226ee41e8f1176380c7400c13fb203c45555af40a36ca9d78cde0bcaa5fdad25175ea33745e90645af2cf88016f4e233e21f0041c0ac20cf8f14a63e7dddd45c6d6c48db9d1bc602858b38a2023cf34cb35a3cc1a3da0baa29c60f890dd5f1f0ec3fddf1decf3fd5553aca1049afbf7592af6ca7951ff3d0229c4c959d0e8d495c806960512ff727e9e0b5b33377cd1745c697dbdca35ea9423d674875b02fcf85d6f5123e607861072602720abca59b9546c544c08dd79d5152678cdce260ea2fea88eeed8d4ae978b4b83414a5d0674ad8fecc8b05e314168255481ccca70221642adca5dcf3290431dfe39b5bd5e52c234b5a83350c765a7638647b978c7f24ebe3c4af75fd8772468066e5063c7c02d0b3d7f243d92be5d518c7426b97c90027bc8e5381f06d8c9aa2a53acc8e9396863f291e57d29b7f48fe5bb86f51487dc1bc23d928524218d64d88e4d85294aeeef639509a802ef077f00727cc41646261ec698991ad6edfa189f72a5010e613afe0efcf336a4dff09f9b3d5a9f08679ae5249abe58859a9a45fda535d51f18d720533e54b195e76a71e470b2fe4148851f8ab864b6c6b3e86d619a8269b1de4df6eeed80a13cb1bf869ac1186a77858f1e67863ece00c65f0f79c71d479d2df9d2206f197e2fab7a5e1c82fd5c118b13723968af06ca4e88ac94bf68e707847552965781b0d5511558e84ad44b85e5bcbb7ef437e989b8dfb540f7e7d0a77e4ae8cf1b5bd1d42f3b179c9d2fd16b11d54aa6ad6beed591deca0ce52c8ce377e515294efa6992b2360a97de8256278c07b04ee8ad9f2465f04b672bb994421dde5833570fd09776a0b268935e7251d0de7ce65a9f730ca1dec9de1ff15f59bc81328bc7eebf68e905af9d60269e607c94010b6793f2d4e1d4b5d056666680e098347106298e7d85df4294b96d32d9ebf30d0c943da733828caffc43ab425e366dceb1b642b64bd9982becf3b4e834ab65d18864ef08af206118908c126b580a8c719c4cbcdf5a50babc14c37026e73756fefd5e4a8f8e27fc706b845e59f4f97ebdbf3e1a523f87c1839a9d3167881c50f5e9e4b2a47725b947bbc0c186bb6faf13890ecdc751eb4712ece57b229dc6ee56bc9cc9ffe096122f2fc5ee8a21f9a8039843599747f7b5da9a30b0008ec3898213eaf2fa60e5a16725f857dcbf14041e4b50405a6839984b00f36259d1aebd185e53c01c6eb0f1b04cfc8fe6e94b2db430ca1489593d58f4efd224c70cc4e37a1a6bb3ee60745d7af346e941470b9f75e715389c915f8268852159b0a6b2a737c6a730d8fcac7f27b74c06644ed1c3d3bcd63f0c973caf068f7583af260472c1e17ad97479c5c157078069d8673a554e40619a61d131396f5d43352b0126d0b9097b10399e5cbe897288860626a1ae56106bdd34d5f9bbf37d1ed0bcde864b7d9d0c77a0a0ddd12f76c8dd8613a4497b8b3979ee1bd2a1437d7d08cd04cf3d901ac3724247c5a3c982d5f2c0a4beb13f3f7ef306297873dfccc22fe41a5e419111248286e9b0a0d83514485e505d7011ab90cb158547be18e9a2c88a95afd1e10e943af70d0b42ebfc2850b7bd1cf0733e13748495ccea8f62736538ed50791061b70e0b3842246546669e553159cd04856b81dbf17483c3b5d88877b7dc919fb8f17e4be201afe4b273a3cf63a06026002d75941edb0426522694bf5ba0d5ff82d80e2190a65feabec3e37eaa9d54684ccdc245846d0657d6023c786f4990b04ddf3034daccbed7c9cbfffb9c9d143bb9c0ea58a8a6e4b8afefc24b59336c42887b76fe16d1373c72103bbea01c2a20d5ab6056221539c94e43d8a0affac326b13154d5db407399362539406bb6f0a82ee1c6b65734701a4fa2d200ea1c3fed56955c54aeb6de7e847f6b2945ea124234188001de81221c028160f48df43d06e72bf012f790e25ceb8363c1c522098f73942ec11e97ba6f3563e7e4122f34f3f149a2694c6b2994e9d595b27feb40d06bf9156c9dc4b35426cee967fd39c244f38305f013a20ee6fdea8363ccc252b59bcbf66ce2b4a79b7526e7f8c5806f7a6c7c7d2ff3d22ca3a646bf6e3233a9bf7161246a73c401759f00660f01bf96f4da7a8a715377ed6b515eac2a46bbc05e8b7d31bdc79f5ba302efe6131823d344bc21b07cc90fdb9eada6cc3080d741035854910f649310845f59dacd9f799efa8fe671aabb0671be19c3b20966f2765e56abe4a7c13bba99f2b2d6670e1d7486d45d6073aff84a6a1419d02d7faa0ac004d78f4f6415c4646baf4ba7ca8bde6a17eaef701e61c0032b2db915116a68c8f15c034ec3adc8743883bce87b314724c91381189cbf6d19cd83cf48e2c00ad99acde32e76603139d7f49ca186ca3937665bc7e5917dbc2e79a0a5416a277b826f91a186f2d98935c8668d7b83a34f228e48265f933937a1cdf8bd86fe2d3553fe4bc0b0af765ae8984de1ded858d366af5d1eff285e6a2439109a92352dc2bea550b35422c300d2b63f4c342b677084280f343cb779ce26297caeeba5c59e3313450be9e34c2574a0af2f13c33ba10ba6e2e8b0c707ce183d917d0ba6714241c69d4cea677e335ee6120d165651ef5d9a5cbec3ed84f48ad3f3777addad397b2dddc8be35e5a4f2050c58844b46b60a70e1190e816ddbee9b1740a1a1f5fe4fb76b320dc4ff14ce7bf2b41618968f82d914a9f9294eeec3e1714b28a9d80b2ff1da0b319b36ed54c969822454ade667217bc40c4b94a7ab459609684bcfda9c7bbea6d23f39a9156bd5553776196517e86b19c07edb80f535fa0df90e4a0725a36da7581753d290d1caafd7f3455625ac86fdbe298025324111cb4367d2fb5c078b8f4bba31f44799cde48e62de6410dc33e24de22eef02e581b3effef73190267cc115ae4078ba3233b5b33b210959f61689f81f4458b791ae7a472a3344727ed5df5e59fbfa5929a075fee2d9a06198834765674cecf0e41c60f18ff3ae737f1b4c7e43e0d3c4eea8b7ba0054d3e8222e9cee20b5361f4b301a7776c4ca03b5a1ab0e028baf5e0f90fd8d0a2f1e2e216d0d2af219aec335adf931953341a3912d5d860c58e7a4fb1db9d066c4e9d424c31a7441f6d16d41caafc861ab8fe3c002d66ec7d5073a3f936f3cacb2b14a9ac5478296b9287dee3a809442ba1f4490c6c820cb8ca87e5b86a02a52751f21f1e806be76fd1e8599623e3ddecb6a36a1ed85649dec25f1cd8bdf11ee889ddac8afea80592f4e14e1d61b1d9c7c1b4a61ebb072a5701a3504078e9be76997d59d817580b3bc119c460ab9cbe2388ce06f45bc0388b4ffa89d8e2110b39497c2df010a381d40239c34648cc1667d59a908901a7f9e3730cd08845928f9a637f31ba34b0f0c47de853b9826868fd6ec04ec3f4e4f7c537822c38e793d2ffad316b1fcaa8e073fbcf7da19f993d4c1be7488b7ea0ba9a6104a6d0123d5bd1f137e50519b2d749439648e4e8861cbca6b785cae503c8cbba3945380cb8b279f53ca7566af75fae1fe4bd6ba5588db5d5da0d667234abbe0aca11591d2b5f5d82e6b7f8059fff0a5561e21e1e36189f72f5e8496d5cebdd195e12198fbeeae75fdd1fd532d140c5aeb6c1e59a4946e243b31f591ea20e8fae9e5161a89bdc7e56cae7d339b5a847f28b62a963b89ee611b9b880cc2f9e3b9332d51ab2e7bd892d]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 991c6134366f0484dca7a5b3bd93791ab198bccc7647dec5ded78fd740356b90

tcltest::test Hash_SHAKE256-3.23 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex b4f9afec428a8608546be3325720caad93a3daeebbac80fec22e6c20f12541b4378f915bc0b8085cc8bbe746b246b4d7549d301d96e28adb3b93d22efe54b070e1ef565dc299b3742f77eaa07b60021811e5df84098e7161f9672ba60ebbb7a85b20e83b70b3f01a2fa5d389dbf71b387281ce6b3d399d58a5b25ed048e3bc224c2a2d3df3912514704f8a47fa9267ff1e7be419596a7688e67d53f4d55329a75d160faa73b8bc2b9b7cf622ffb94e35bedb0bd886aa64b865cff25adc9364ff36eb75cc17b21b275835016412f438a1f9a72aeeec80cfb2cab0234a862cd7f27eb146e90805acd04e8192535dcc8d0c78e928a4b2741f3cbc28ce0bfba5e848dd706c4a6e3cd5ee2668923905c8b53ee3a8ef42010ebc1fe340dbe6628601c8fd31ce3770dc004888f2e75c357119ffe1ed661000d70e23e8ff3223e358893c83fb54f7366f94a71a287a05134d1f171abf7556d8567e0f736ebb0aa8a2e86a1ad7e6d4e97df9d38711337bc7e6304d3726045bb01372ad2b935fe2d6ec851a68cc6c14b18c969475b5fa087ac4b56ae02afb68b19753c3b97804f598bfca1615e2ce00b526d5b28d1db8f2546d1437bcd442c502698a1ac425938914a11e25ca21f4e01ed21df4765053827c6bb779742bc2bacd127d7af5a0f5e7721de90e2f92c7fc1319d723d856b5001b4604fbaf37618f371896aaf4f31057dbb8949aeb3c2d9bbd8169075d38c4b4588465841601088b6a053c746826ce2077fc8591a7280f0744943c68abfd6ae55caf41db5190a0f78e60d69efa3f168c6d7025bb0a5c5686cfdab80e6aad8edd4e4effc907ed0f1bcab2cef15148cfe1e69cdcdfbde2e86186da45c1435118e257ea0916e01e3f3f47828b351648e368090913c767c2afe0921c4c48ddf0ef3d9f0ac68a862d16ab2d587532f0483969ff3e3039b102924a1b28336ce292fd364d369eec9e217ea6a3bcf4af884fb92cefc39dfe42ac78e9488764f5f73f29148af7f906d3035e7ad137707685654bf80221c0dec4c74b0342c045abc6005b217dd33f9ecada9d6de050514d9092d7175fdf03a0dc5cf2e1315b4055f7dc7ba34f54d87d2eae25c8f890fffd51df45cf3085cd0e347255cb3ce0bcbd32dc72e327022d6ba588ddd3407ee34e6f537d699a9c85ee74115c088bd821a91e0726292e64a430d76fadd5e1a2630793f7682cc7ab95094441efe247cbd6e2636580bd8b02a6936e6b7d180384e8f264d1ec62df3a64274a0bf69f983f4530aafe68e667649c5d0f8435e2ccaddbd58becf25109d15a1031765988a5bed55a9bdbc7edea13ec5664c3be7c67a4a279af4d63436ef9df8b9f8b00e597cfee2add03831a3b960046152ffe2efaf1a7a679fe257e36395b613d51d3fe95fbf866197e86b583753ef5cad0de3fae1d50239006224b881a365ab2d0bb1ac8c85bd7f655b606e939102b2aaf46f9aaaf07ba9e6d40f18c23d83ea6109e8358c080451d8ffd559669ddafddd31fa2172f3331483b69ba6cdcaad5c31a667f6c6bcd78353442e9b28d0c4a8c454f831c253b51387984ec4dcd12e7aef5f9572c50ab37e74d6d0b642d07c4df0bc0e4e21a89e2162f79d05a7f793b12a94153c1f7834bdbe06503d4d235e57d2f580d909684ac896330aeb879489a953f24ba53e8bb7db8f814192b03fe740fb801454f1f94763a1f90ce9243e5ccdfbe8cd609acbd93269a61959149ca3b3cafa2d5473f210ad16a83770e66ba99992e60ed0ccaef55cfd034be2d2b0100ad1b23059f7d932ef54df1f254692dc96b97884884cabb8d58a175dd28310b8c09046b1d806153ab4ecec0888dd4a823fc02eb2f983588016c160c3aa9e351a7f97364651174c74985f8d97ee1309270f57673e97091bd7ab135e21dd9ca3918256ef5257b3d58cf42d0241f77035378fdfc07c03569c4c0cf08ddcee06d2ca9340006a4e5456e072c6089b278d85303bd9b8ffa0f42049b6f97e694e5549320cf2e802b781272b7ecaff17e0b34f9d9dd5bf4e025a6e5d339e8e6b91008d4469d0249025b2ecaa82ac542cc59a1afc104441cbaa01ccf2fd406c3838a1059e347834a71b721e0a28dab66e48aa6dd85da5ff0d0a72d2a79e9f6673b7bf488bf74b96bc0b4711b6dbd68430ec5cce9eb09b35869635f5e771fc1b8280b3dcba1cdad953679a8e2d06304c39232993cbc36483dcffc3dd3f21f70a09460728953f966ae1c2f4d9f942788cdb7fa973ebf0b278548994cf2b1900b06c5a51b299ba1ec9fbafde9b981b0fb48c7454e57be30571a1d6216217e1b98d10400c115426d4851580c03985fa7651e083a45f07f4de0e2968022c91f6821eb9999ebb4100481ab3e8423a4f6b3ce36c302046fcc09cbc7fa1bf8535d1ead3bcc99216ecc0f9f94b48cd2450e7d3f783fc4133e6b0c1fb0935a212500e545a9e528ebab4035abf6014c96e36eacbfccc6a9fbc324ffe484a76624a9d067f01d2b6dd2d3321facb86eedfae6dfe9571a9ed94368c18a232d7f6789469549b67fe7915d4e6b75aac2439783b629dc0e4a107b73940854e3926384d96316369fb762bb1585b3deaefcc871bbbb142cec4464b813aec3062c9b9ae59b6a1cd4b4aee11480ded102be4e44a4295d6882f9f0e2b7ac20b84706306eb357c26fcbfc4aafc428c28f8ae5a001575505ec853e37d2a1c551b0c07a39251695d3d7c47f7413f2959ab31e28da45b3c81969dec2ff7b9de7a972198f9e0835de051c67461554c74dcc066591e459e00903a7348d3226d49990c8f94e475f39b9c0055b5813bb6adac2500827a68505a0296e30a8b61b6d636e7808bd1d7249af6c5b49be589003c4e259aef208104b16f5867a1a75a291cdab4befe706888e4771e6d87eca1bbc9196e800fbf344d9f2cdb6b9eb55036860af0956d1ebeb3009376eb1a253a3bbcb45c7a6494d67d8bc1bc79524408519a3e37ae485b5e1567d27bb7b31da7228f956bc47e400c26ffd4682b8cc1d71cd1fad65420a4ab3282ca794df3446ce2ca433908bd5f29dc73bb6acc7ebd40fab5a7694186894a9cf9d20c385b28100ef53430b1c230d400701d3106d8a4ca7dcdea7cd0da77a0a7358fb0e14b3724f988eeef49fd637f258d4057550af6f818733a6d9c9d0e3203be69e3e354001054fde9c15bff75afce23eb4a2186524e5d5dfdd80f5ebb93150ce731b8f5f16693ec9b534228d5da6ccc648606eb1531aee6cb28939fee386da98e06ccb1b99c28ad9a11a70a028383ff52977fa9de469f9628fbe3c13496700cd4ffb907972595e96c98f5239a3fa6251bfaf6330c01a1e47dbe5a731d31beaf4278e87838a76e087935a6f5eb6345e6473d05172cd7587a5fec7216169ecc195d0ee5740c76038346845711a492d5ab6aba16e6cf4c15903602c53aaf320ad38b2e3a9b812618f25b116fd72442e7fcdd0eb5f251e48bfea69dce4145900d566353425f454bf0de3d496be708f7ff4334b76cfa53150dfe1819e7da783d462a6c1ab72fb73c3d9f53b8d591b1268e270820a64f51722e170103bc66c59e47b81be0e39d559b51ce34cc3797bb631710adf6fc61cb606ee1f7e7c666ac477497e9426218becddfd3671ffc4996121c88bc96c9e22f8432e77332606a9aad7f425abbbd3241682a575110be27cfc81107ba8cb9410c323c8ff97044d32f54aa3fe6b95f6a8bdee3b2893ad7c2c70997060e3524fed01ece43f12dde40c8b197e923d7b3320cb67e8d761ae3ab2a3b111c4e4ca78c199e7acc00d78723f568cae68873632932736d40be2d5c3157f111b2e12fab695735c4609ee9ea0d43cea5b08b28f9a09b9a3264b7eecc05deb01b527d5acb2707793daa31f1716d2277dacfb274b148a69f507209db9d893cec8073695a6145a8dd3911406ab7b41fe8bcac84d35471f1f769e11a706b4be12af3ae3bab1835b9d6692e60d22782aa95dddf78b14dccfc36c14a60499fbe69efe76b6ac95a77c8f9206a09b43b4940f3b0c114baf7aa33d2090671d3a56135afde238d41a29c44ba015cb17d7d8871a6c7f9df4cfcaa175da3bdd58b36d4e2ef3a7f09808b13cb9d8e6eeeba68b0bb13a5f23ee3c73d354e23c8f1ecbe79e022aec666126e6eac281a2917e787629bcebd42ba0be1e41c07fbc05d8496d0cbee8da23983d71d84ce4703d381540e824c8053e741d73f2a2fae3c8ecf6a69f4a7699aea315f90e404a797881459251cf191be3d12019eee39bd85fc49a3b5f8e1c508fec76279287f9e5cdc1cf146aa6263da31f91b93d69aac452c6fdd3547321284fd928a36e073adbc1607c6d3d91369405c736fae81e6fce2a5ce61787dfcf4875d4f214aaaa5483dec61446d2799348912fd785f5e9321f6eed1eaeffbb6cd889449e234c579106ab5c5f462f448380cfc03e016fb13adea6e06e42c4f041021491f2775ef6378cb08824165edc4f6448e232175b60d0345b9f9c78df6596ec9d22b7b9e76e8f3c76b32d5d67273f1d83fe7a6fc3dd3c49139170fa5701b3beac61b490f0a9e13f844640c4500f9ad3087adfb0ae10c644591eb47034aedfa1c9b5b3a5808e75bd62a726f3237baaad60c0298325e1b64eb2ae2e817f5363bd7d86]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 67162ff0c07e2cf06e6b0c94a5abbfdc68f8100611113b3f1fa6d61229b6929c

tcltest::test Hash_SHAKE256-3.24 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex c34c1f8c031376c9d06a7dd0a37126dda0504685d470f490bbec31060542cf8c994f8bf1db7a7d052a2fb2aaad8f172d506598d6095c8abd607046e02ea31773a5f157779085d48edc2d790e580c2a54b98fef5be1a2558d612311d83c96e705ee1bca45ac9e450dee4e19242b5028fbe3b4913ce3a81da5c5ebda17b68505ea7cb62d84b72c962a6678dc15aec3d8c9d7bdc7a298d7a9b094b2e8c524d73acb57a8c85b3797908c4e95080969cd04679c93d9b58697c354d65f84090ef44e5088dbe3f3b646fbdcad8ce627e5d7727c3a1c0f9c3751313994daf60bfd4409201635c674bba39fc18c45be98a947ebb1ba42b180336bbc08d60b86f4792f33e409a0b905cf1543e4f2a8d8843d8737ae23ec0688004f2c69a2da7cec081d9343690303ce7904b1ece79d7b122afd1e1a7d0257dd28634903022f1f1a3476f2e63f45edf841d8af82740cf06af713689dd16beca63311db7ffdf2b8a784a218749250bfabaffa064e9fdd80b52c30dce026110d0ca7c0a9849b0b8fba8009cd966b0bc10e4cd07ef772f8701b52bb448b84db02370ed77cbbe562ec7cb113d9f4d15e3a4a9fc3de26f5450bc3f01e6646f3b1124eefc01ccce2df17159e290335cc317486303cf0822fad98d68ec00ab77c7b8779d3e2515e9b6b57acd0b11402646cb5eb88a17ab428165e7bb409fa892621a7e241a5e31916ecf669cd15d502a2f846a12e5b4563e86aa6dbeb61fd62fa8cbbaec17199a75d4c3a751fbb0bde8dbb6fcfaad31938788fb81dba30daebfea20a08dbae3cad78716cf84d0d813d2e9e779e8570bddbdf6fdc6baade5acb3c4cde1618c494d66d45d319e071fec88b89a8354699fbf325f05aea42d345aabc737d00ff1c69c746aeb9015f514927ae6548bd75b8992853fc79c40a78633285fd30ef191c832b0b9664d852142b019f18a05d9b3460246f7a83218a337b099ed43f0bec2daaa8c2e41dc542226cfe648cf83e3f75188c8451be284b6d57d712def27b02b8a5e675802cf0b6e3d4c707a79887e9e3890b976b7302d48fbd45e6059168e3233d8e2b51d98236bf2a049053c76121e67a47b2afe9d6adff76fa242f63f915d73a48ed416ca34a1e385c0577cef470e6b5e8dc056acd5f274a9fd446b157223d64bbc2372c7a7b68c47870fbf5675d4b00971e553c0f716e00dcfc31c3a992bc8290b21c633050059700d8c684e2717d24fc7f87a8c36b3b6258a6d8e118ebbb5e6fc5d657ec525d799b46c2c38f32e4e9be0784f612d6f836bcd92353ccb7a4befe044e50d707d832f1c1d6fa942ae81685be326e23380c45af9efa60ec7dde6be8766c9819f9df89ab51ea7019e1f275fbad7a581f1cdf57dafc4552a0c6d12dd3231976d9b0d84771fee76e47de68ccc6db44fb2d07d934e5fbec6f1219e5cb68143b313fb32d34ead1b33c45a9b4e48e5079a0768362a377a3d70067fe820f4e50bb12758a4418bfd137223cca3c85fc15ff8f2117e26d38fdef4ccafd10bf2ddf8261a0bd87bb98075b6854c96a76b731c010574cc15ad2101a9d619ff7a4afca7766ebd45ce51b790855b42fa58168aca36b40a86732eae44139546b9f867a1881687c582d5df33124328584546cb78f8fe703b53cbd2b824d69ccea712d36d18ab17bd161ecc6379847ee4ee1004be16ecdc9fba9c33af12475f1a2d3608cfe798711c5605a3d914ddc1817b305cdaa2765b901140bc239b0a5ea1d2ee923a6363366be926fff492a392b663243e4f2a2f7fc4fe65e6963d741e0e3eb8ea5d1a8fca1435ff2b56716a64ec4c68239c2c7cbb96d8884d7768390fa7a7018b787b92ceadd2fad06f1fb6aa9b8d78974217e2919e46045b57a9bdb616c274e03d1500a6b126a669bf1c0ce65cacd213c18af58443ad869ab78076a3c4176fa31b655dd496d78e61b6e4d1aaa82101239ae42a161fa57b76076af85b47fc7e2e93fb1eeaf73c1f52f718a969f69082414eb1f4c98a944f87d7f7b74f1b081cfd2734a85c3aeae5a7f015f896d061e1e75d72ea113d109f4a998537e1a5b0c8a945a09e9ada5a5dfb226b43d3be1b8ca037b58e7f7f90d738dcb1fed5709d0d8d8fcd66496e00f4a70e871f8328340ee67de83686faab83dd11fc707d241358446629a3ca6e8556463507e037a731c534908986aa06b72191c9d3315b08ba35485933bba0444ddf53165c3a63a39b6c14f028036b5c4a3d1164b4b5e1c6f82123e97a326d97c11c5823028289b5e740024d32114d43db32b6833f82c3c763a841877b8c84c19589bffb796d3c469c0d76e83654b265f0bf0ba5d20c538273373bc3a64e786a219414f04f3eddde2010fd61b3325d2b111e8b3cfac72390bd5a6d1e88ecdae9fbe7d1b1f29bf10529e7003a272e800bc2edafc93857b67a889e7008a1ec0ed98ae180b0e1e91834001c29e200cddda06ca8f3db19128e989b5fcf126fb096b1651dac6dbbcab5e3491cd4e9ee84c85194ed01d2fbac1e833c3ae4bc70ff04fa00f8af58ee954cab6b659bc22ee7d2c7d20634417e78d8b3019c5b67241bcc2bf50f23f2d8fd5ef4fd82d8fb706b7f5b8aa105b7100d5fb062109dc3179b7ebfa7cd84dc29576f4865f1270621844085453a10a43ece15f404142620b9f27f3d9fb05c654e37f01e4b4d0072d0c6a8ed982dcf89795f9e063e337f3099c5501e4354153ec613840f03d2ffb1fca72afcda18bce74e265a6f96eb1353156893ea493539c91f7e9d73263f7f5403ba492ba177433e3bb6cd88a4a78d08db60bd1a07b05484b8dd9ee328eef9c99454760274c60d0ea08589e9cde546d25a422e360561d00220b51ae7927e09931d1a5409da8164d94b16f21b9940db4ff09179c6d8d646b1f59993e8e94929311c8045ba3936051e69ffa8968d36a4c25cb32234e86a232495ff9c7f93fcd333f10add9c1750484eab840fe320434de9fd4bba18bab9ffca906b971438e5921c593e8e17fb6cb8fa7e58ba79d8d3311730afa3dad63227245342063f3ebfd04ab37fc9b66be7d1a250f21ac33d72f8eab5737203b15f53c27d277c691bd8284f7e63330fdf5e2cc6d1c4b367c4af0fc4fa2b971bd2bde0157c906c1a56cb14ab387d3c8ccc4c14e86f6516dff4e3d0465d3c959bc0ca669dbff157db86050fee602258a5c91e44778837b78444ce04ef7d1af00bf20151ebd5eec2251002748993f719f34c511604cad117fd3aa9f810c86b38d4ecff2c505cdd3d7f9b600ced325ff2fddc91141095a5aac35d24345add91d29f1810709b93311c437eaa13b9c9e1661dd04ac91b7749f25f12a9444e1b234fb319e1a8fe37aef129302d335fc92ff5dbedda9f95fe228128f1c5923b0f9412c958ef4028a89b5e995675e64fce7034c07bed220078c3d9c970f5c8d22968ce3a6b95d08b748ab70c6810a72a3866856410eedafba5a26eb926b632840725d49ea881c49719f18d0adb89f04fa5776a2f334c34d7d342a260897379c1173fc86eb61fb6fc0764630d375e4c507427759a59a1ca35a0293757ffda0929d82b0c131adc01facb57bb9be1ea25ad430b1a2e0a7c05858aca701810465b2ed88c32242d534033e440093f81da16e69076da62ac376157f1aaff2951450a3086b7bd2a83f1fc37d0b1de509d8a9a7ccb1f38c0e560782d835f2704495270ef61521f9eb55490772f319d777b982ad07148b7d11c83c466ae3baa214efb39ac06cfcbe917e797623e23e93cc26f329221a7da1bd82db0a3e0d4db08f8bbcf06d5a564a242179b89ac1d23e8f89c6c323aa101f99eaac755a9cf4c33dcf0ab705c675c52ca80f76df791e034949c12214ab8e202d697930c876f703a52464989197a2562f7a0458f8f06a0881ceadeffc073dcb026808e290859e974ff3933b18b72525b7ff1f05ef10fe75bf8051d1e4a566499f4d2234b8af31a7c3a26047a20d465b4b9f2a26ccc021738cc77771d36d50c18c818fce4adef75d8a9b906538814d2074c2eb6295e71c2a6e0be576d147455c526d17574df939df2b44ee3ce0fb819bb8d02c62546f37c1efb46489e71b8b4278788278cae83f552e074175a4632cf5a231b3cd103fba60972abc521bd16b9a860997d8c89351e81c4b50b78ca19455b74d484cd23fed31edd5b57877512d8c058a1f204fe2b7bf7b77e4ab9f9e01e4818db587a1571859791e17a4038319427c62e3f768bdb804d6f5c5f8e540bdca8757c125856f8203c36ba97dc65077e173f9a806190c9edcb22cbb4766700f2e511433cf866f7455542534acc89e8e9472b739f46cb7af7199848e402b173e38682dd42cad3f3677b3b580d81157a78102045d6a69a634eb1265058a3b1b931253086ce501c81092688155aaaa610ad0aa48db1017c17472a637eace9e6656e19a0fc3a18af04acefcf37bca9aa6ffaaf3eb7c8d7ef1b92cdb6203b35ddecfd0c6a9a00951a02b52f672b9dfe90cce376455088aa61c49443c4e19e27f6d45045e3dccc45dc1fc47de65d9919f7dbe9e85ee47ae982b6de04e64f3020cfa02a8ea35107bb73906d43d36a18ac5e01808de1f00a25b076d299b0a5bbc0d6c4ce2f2f832d665f28e22994cda6f631c259cf84efd0df7969146aaa917b889ad6cdaffeefa7c71d2df597d0f4ceb7f1b2a835ae5049875c2215f03aaf09d88a4aaba987f3216e2c340a06ee7bea423c472e48c4adeebdc72649e2f73ae1412394da74613a04bc1acf81ff63cf94256ff44e817e753ad348ea329b56e19c430549fcb90120ec4157450ff9c76c66e21b4e7b682222a8685fd26281d02f856e9dde64efee44229]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 03da7174a4d58e9fc735b5f567a1ae965400edfcd144e774bc67f9e83a0f1415

tcltest::test Hash_SHAKE256-3.25 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 1987f99d3496eea0cb3817312f0502bbf0e24f6b5b755a3f41dc1b60fa9e4ab1aae1c6a8c3de375dcb93f2e060b71ed079f31529ee4f0d5e3bebf8a881efa99dcdc437049d85a6e8a0b0c4ebbe2252dd5842648dd17c0bdf4df1301fb86cc3950b98165aca71836ad1f955f9512ce60b1635043f0be299ebff568b6ea9fee2c2eac62951538c160ae7d46db322be21813a36bce6a46b02aada82d13d5c8b4c4cf4b439923fbca6f169abd3c138c14c684cac562aa5fe8c4365ddca33d7fc4a5ab1cb0dc496eb7d46dfe550ca9b1bafe7d4ff98b5158281df28d03ef9243a2414a8736f906100e132d2eaac7654b692275b964b2cfce127a5acc1f4374b2c22a36115259ea7e31bddc922af6f6a783d4f68db373a6202c7be7819b59452b98c2f6417f895707c736e4cf5205ae54bf7888435238550cda851154149b843cba9df3ae3b01ec4b3300de3cbc9e2ce160afa360cd8b5cd2a1487099f784c2549c2dc6adf15e0ac709ce4170c70ad2cc1bccc06c91f73e2015188de9d0af8011a1f4e7c75ee842f9bfd186f20de63073356277cd2be67963aa87b1ba2c663de28085cf80c05b1561c9cd4746fdbad67561f3221907d38f1bd618849157536c45ac52e670b201028dbc13eac622f33551161167c6b268efb72c4d9ef60df18bc989ded51dc0848adc0b47ea15fa19cd84c62fa16cc7f13bd42199395eaccb2cccadac13ce68502edb4bcbddbcffa90f9ef6c077519526d3e13a7e1c41b04acffd8c2d1b2915fe6f19d2223e11b02b9bfe3c56423bc654486cfb7e9025b4ead5aab9e463a455d9bc0652fd73aa981bc320eb53ba81b80419e5c91d3da12745de729b5475d6a48ca62f2280271e33f445a5986b18aa06d0b8da47dc8d1a83c65ad3b51fda168e81ae02e58cb0b3003f740ac7ef053b1f34b5b8dc3f071856f6db4cab89091a8053441ff065b92f7977debf0e7208ab8d9a91101aa724112d51c05bc3327b29067bf8d4f79d98ea2c17f630b0768b81ce8ccb6e77b76c9b5351ba7fb0aea8e89d564cc05fa6e85984aa5b1e727f16445e85d52267f2692d75811a26d8502acfc19cb0709d1420141fa96dc6b8ee3169ba103eea8fba823e107a7fffcec97944ff99b4643467c890598fbec7e86655786da6790543a2404390885c58f86d0cfec3e7d8f9ba145a64cee7bea0a559fad6e5d31431283c3be492352fc0d9cd6e439b018ecf929c4de7ec2bfddf644baa3bbf0080cca1dacd87822b7ac6076d15ba0161564452722bc03dd6ecd2a9bdebed55c94f5645109da2dcb5bde6f5ce8bd87391bff67e386c5430731c28da2328824687e05c967ff4dd2e8e79a2296439058e2d3c647a51983a707b0c509a1df8811de6e44dfa7b8b8ce3f02e6616b0b5f7ad7e4c0cdb5027d95a792dd85df0c4602840bbb8f585ca3899955cc142568af55e1f8f6e25a6a3b76ad8013eaa5e24b6024fe71c2c412966bbd8753230a810a51c7b46e6cde7946b3e2216e1e3b891e9484ee6e5e31031adc75418376637ff7d653c23254875625b20e1ef60ae92847046d84bb4ce857b644872b65f67789ff4c4bca4a839e2a60ddf91eb396f7e84f1aa6685f753135f30bbcec008990c8a81b7873bce06a1c809b6acaaeabacf0bd3df94162c053c55899dc2d5d18f4647daba266925235550c532bcaee2f516919d42cb8cd1498316d56af95828cec840365904bd4c345fd8c6f02c57b0c2e7aec490874a75b469ebaabfccd79cbc050c4af0cc9881ae43b8856b8635e288b4cbc03551ef87ca636c8fe8d7c4abfb8f147f2dc88b83f58378970154d9e6db006146adb5dc95f00211eb8284bfb4e1c8f1497c9316b19e91a1625e02b43c1e4d179e661da21ec9c87444296e296623351b4049b6caa92e10cb8dde3a4560e71d575dfb13c080bc18fc3029fe822e24660aea31ae07c918634f600e461dd3b9d398fbd912c86a4b96122620a06a8b69de48adb0e36e9ff22bb58f6ac0ae330b12650e8ca52a49fca26e9c9a1e32fc68004d1133e15f9c2fbc8662703466dd5f4c33ec9245569e43d06a19f2a28bffa37e80ab57326b5c35984a9fcb0bd8512b039e3c666dede5b5a28d14b6e7c603a09b9bd28751124ea8617a8db7d1832cf2bafc7485a9409ed68b5013735881b6e409f72d40c7d4e20c9a8eb2d30ff7df4af4e70b8c620f480b1d4b9ca47f3f77e22c1b22100123c4b695ffb5b92196c69823d687c7329a7fd7bae826c6b66fd52f84804771879f554af655fcb6b0f0a16eca537fe2958284d0f6be3856b8934d2095bf13e1d5a8124e3e29fe783885ce337ae63a4af558156b532657d0d03a4e79f2300ded85ce9a24dfd4416a12d6cb9a97f76d8cfc7ba02b42b8ebd1a7d557700c8b9bf0e2834b534dfd5bf8fa6417e8c41f8014f56d938567fe9ab599e506b7571a4498a666a47e2b0da4c139ae31c261b6f86f8abe8e0e156fbb0940f9cac46464ae513bd943f9d97dc24f6b25b79c03665d1926eeee19ed74e3591774121bb7032f970d5b984aebc62afff95b07fa1ba6149e547f425d52b69a0197f48b11c17e4ef6a57e1005d48f455f8ebea1413ceec56b8dc0193ce79d45af4cfb846b062e92dc9eb149af1631a7ea75e12225c9a8d60d5d81d13d0ea18ccea0e99c7c07ac81d55385b3ab4345d92d6942e90c547cccf02e1508d24a6bc5dc3e4f31b94870925d5e7bdc8ece444f94b35494696fd310c089fa3e913d4487446fbcf2c74b035af139f432de29a581bcfea682c17e3457dafbc1d0fe39d447b3df834e1a81dd322d509f44fde7f1f61295b952a90228f8bbeddc7e8dc2839d96e862b2277f76be6e4cdd81727bb2331232fd72848e1979effaca75a489eaff6a14bbbd72b6685630892f76d0775ecf4830e370e8849e61f38d1c84e6d262c3aa0efece80a91aa0108005a3ac4d6001312a2bbc49882037432f42fad95e93a0d321bc63e5da16128aec00864a705e9f498906d32c0b37607b5bce65d060e60d71e7752bf6bbd3340c07a09d5f82a2f01dd8355414805c83f89d1f44808be27002daa97547e0ea7b107d56673ff6f58a1a8217ad7779f808375dc6154e52115f0275d9de6dcbc45e34b7a262804faee3bc212e4dd96a9263d4285356be35eb40fd4376d5bceee953e541151db4ef37939f4ff9b3ced4d43d4b87379744c9e8cc6fbe10e9d9ccc202be941f07426837f020490a8dac4b15eb09f4f35576608237b660288928e7f6d10d4b209dad4d28afeba6c12a163fdff39bfc06ffc7ac50397db43e424ec2f0456db0da7f7a0072195e03ce178115aaed7e06f314bcffcb483234c293afd036e66c7facfb2d14acd2f3ca71d4618f0f4f2c903822cafd6bca606c45fbb0a2432a65f208bf3b1c514349856cff5bee658f243256b87607ba5674b538f915bbad8806d28e2a2869d810cbaf0ff6c4c64633f167df2442b12f730bca2c0a338ece95bb7b9dda899fd991f6a1eb39309949b410ab2224b58c338681f59fad9e9e2ec9f077c82eb320be6d67288f5523f9c8a60e66d00842fb8f2763d20451bb5c569b32319db5499efef9799d5cc9134a4b805745596d7f816acc4de9daa51e6bde801d337f0cb15d23ccba6ae413832d5ac967a13eb2dfa08efb9c97b3063c2f1f2f0e17ec739efdc56db62ba5a2f7f56ee7dc14e076c7eb442bdc860e039928a0ee813986a847034c42d95a2215e6350062011aff37ecc422d38a1f5c0bc9dafc551332ae196dd030e2b060d9eae28eb7de932deb6492cdb38921de1dbd22d899e9407df32558170bd3c7fa4d805144ed93feb8258b7e6a7ec3404cc366488402117585c67aba3a458c7c60fd74d71a2a5890543e2af41cdd0841e60db5bf7fbd643ed4c887f8ac66736a5f5a36c850e663149cb5b1886756deb3342d19dc2e2468090559bb87fff72f0e1fe454c99bba69e7cbfcbdcfec949d20a1d2014311ef837071faa40ca77025d45d3c4d3f4d1ec3869ca3ae2eeeeee9f6c97d1a68cd774ce1b53bcfeb3559ee5981c28ebe077c167d792b112a10fe4bc2158ea3d1a3443af9499dada82c2cff0a180797ba3d5ac938dbf37545e52b18ff10976c0245eec403a980bbc7ee51ce629a8c06a8614352454fad5906cdfdf82a4527a17f27df7ebd5f9578cf0e70d2ff83c05a2d15ce482f4eb92ae14dff6fb01da002accb8ed172c63c63220ef2a33d6e34e0accd44215353976969e7a7c64d14a0fe1fa37552b087f61975626fc5b8b45a58abfa5d646df8c893152d7fb24dc49b024c323b79131f52fa1dab30a0dde0b110af1f6287bb98ed465771ffaa3ea80eadb71a49bb06f6c3839f3bfdcb299dd9b72abf0c11d8ce55e1b57790249c397c5ee4ae18af08a8d8548eb72fbb3826249aa35bb289520392f3c380e9a7e2e35494597030cb949ff1db408f3ee766243259bd77ee54a3d3350ae63064aaaf5027fc89f31a773756a0967936b3d650028372bd96281a3ab7ac85b20889a35dea86e60ac94e586d6784f47d30171e726b78643828e830a31b79f29b7bc1387b2cc1ef304544d5b34cff93e12de11639a9b1acc1b2a73e69992de026fcb3c083819986af098675857170e339629a543257afbacec60da9ea9b28ccd91dd9d213a34e3aeb888bce607f9970da90bb6ee8ffd32cd3d563f9c2ac0b1726519bf387ec807a6a44dd36e0b1c9bb691accbcca0cbc51556342a47e36356d833a829b7ce7b0d39fc0f34562c2a221596336c45208dbf6e7e2323079e4481e943b26304f0f5fc5107f5680732c8351202c921c1d6ea25bfff4bb344210b3d8cdc5ef689acdfdcd50e28f6eae5a0da951b9573a88b8b01f01fd36166355f8fa948d469accce1b6ac59d066660c5a1b862bc0e96207175ae827e3b6d5a2e88129cd3d44d716a291c0301341e2719e00cd78710c57123739915fa539fa304f1af2b4c1107154cb75f8db1c0ec8da1290534bd162f07493a5d20e3f723ba73c62ed458754e24c036a3ca111557f1061d3feeb0875]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 09a1e351a38ce0647065a47a4ca6fba8b396e9c69e0e583fed092f5d702d63ee

tcltest::test Hash_SHAKE256-3.26 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 6ccbec3de410588b80ea012d035ee8eda41a1485c059e5aacc07a6498d2561118b70f731c33d6f639ca88f291ceda9565c16b8d139d7ac964db601fd1e6e963f9496bd36b17e8e647c5a82373ea23d8bf1b8aa71f6cc4d2f06fdd5886bc0f13d708665d316995d97084701e0d14349944d4813ed5dff737ddf234a70dee31a12058818915a57830329b935aa3d997877560e1aced83ac489c172873fdd9eb8c63de3fef6e580a9b0c5f6451feb6c6f3ef651e89bce43e85a9230b57cd2bb7362ffe13e8c1fdc76a7c5475ac74184d9f1145ba4dca7e388f83ca6fbb02400f5ec32c801db713293ef12f49c29a8a85c969872771acae24c6ca51c82623b36e36fc0e16e6a414ca790924532cd89a2a03769df89dba108dbbdb7d9711a7f25e8f09074aec1f8f05b932f82453b4a384edb71ea01aa931ddef35827f1615894aa798ac9e868ffe757ffd0f2fcfc55330e8b97da080c08e8fc17724c2abd2e4cd111962745e8bcf942dc5dde8097105a874ec3f9c58b6832de30ec9143b9691606c19cd8edc799edc533bd8ef894e577622cdd8d61ae1cc32b46ae3e65da71b8f19084220790fd8d870bda4a8d7c3b50462dcedf03fd8a638c62a09bb7aaaefa3986364ebbc8509f316c9b5a67d579afdc5a7c37d4011bdaa98aaaf062b089a686ab9ba333f9f9ec6a5ee805ad2a095accbad0ddfc4137ef29c9b4848d7468828208996b94aa623cdbeaa99588005219bd55b218a246476cb524a6a0617fb458d3a419ec0964f2572b17c6501fe1bcb658340b31ee96b117f4a5688c0658d6ee21870470b7ae110403ee287f9b54aff7445ec17009bbdfb88f53e290a387340c15ba403dc910270d0b75b56923e293a629dbbe1d1b3d37192d36fdf46095387c5644b79b65129c38eab65658e011d089b1b4e8804ba2230177579fff660949058d2d4fd4b43dd94e49b9f492f96cce6982f029e1c2740a3714bdb1fadd6bce6e627ef22fdd184416cf8475609778f60d44976887a83a5484ad701c2ded4431807c3e87f3082c465a2521c30ae2bfae3fa0b28dbb247d68b0ea79c6e0bc1ad9038475f6695fff48e0f298c4d801c85fc53d487fc55ec4b08372df995b75782ebf212b27d9071bb071dfef62121d1b7268c56128ed7f9793c5eeaa7ce53ee3987bfc69018a2b08e7d5943083ff5d414df0dd056f7baf7e793d05e356c83fe57f01bd366ec6f14c56d4b86311e8eac15a252f3d3cb61502cab46091114aa2054b170b9b56d381716436f38ef315eb2300cf631077e7daaaeff2a7bc94b48ccc64868e9f9ffa04ff78c2efbb11ce89f0a6b52187095625ff4ebf816cc74e27c03315ef4a3283a27cfc4151f1535becafb6a010a9d84b1f8850e396aa925f9b6b1e8ed6a4f7b68272577cc439a1033be89758d87ecd0ef0cd5d258f7ddd3110558eb7eab6d6dbcd68f138ee9ae3109f23b1a5220ed0e6bf56de4e14ee900aad04ec5ad487b839aae73240771c01c83fe96c4f9662ca1db4ac3926cc0493339a029e3d3c1f83194276825b08c7e37444c1301ddb81a1f9f956d87560c7cef400d70e29c88721c3bd9d495049a4725bd53465d89a733fc3b3dc2103773f2a940709a2e523c6787f42e4efe8e1ba94c71bc973487a418ac20dc77e98ba758d5dd622c43bf3e47295f9d4dceb791132fe3d08c23524f26c402d9d56fbd170e19596aadbf1e1eaf64c0bf47821b8b235496479ba673f8ecc833be911f563380c856e274fd094dfebeea0cc2c5147a483f0b8a5c4a5741e91d46030164e18d6f875872387a0b5cb3bc1dfe55e45cdef063b601346b96ba8a57bc3fccfce9a518bac0825ed29ebb7cd0ef1c678c3f39ca472854baa69cb37efc08ed4a33c8eb1af741ab6e832dfaa891cfef7e09461b247dc4ed6567e3cd057ebe641fa629fff4b13e55de08538ac57352d010080be39d6c2e43bb4c0687dc543f5ca3d06734246d290a23de89fc51f9fa66b3e4eb23a396c6e022af6f4452111e3f7d2f1b2828af9440d6824bcfec9a392bd04c8e7bb582215b422ea8b31539dd85022eb05c7fed02827c701365e3d891980b9b402c71b2c01d80362d347442ffb5e95bc141a8a9f6577c346b6ed6499623bc4dbae636ad159f635277491da0f74a8942b868216ad2285c5bde3b4241b96768f0591992d5b469620011717fe856cb6850103088a4388da332c66ba6656dcba81f953704c10ef412cb764e099d80b11d10635b3cea9bffd765ce60813935d8d02819df1af397d7ec11302f491517840e102c18bcb27ee76f7150ca4111a407a7a6317223e1d17d647db9a5bd038dccb1cbd529867053dce1d1e80984a33ae065168680de206e6d026d8d31d3cd55e3be9fe8ee38b8ad58c4f41e9eca426cfbbf05838ba813a11f4c6d25643bf6f2717b28f1d7320ffde38f744efa6093aca20bdfb312f0402c1ca8f91cad5404f5ee7de36a8500cac7f5b7cf03bd060b8c8bd2119f97654a61edbeadcd8d9a6be2c34d5bcd78339d9e17c460d757191e8f01b85793897576e4fae3d7c2859db02b984fee951138dce2c23bd63459283126bc14fe49798f7a27dcbf13a615cc6632c62c384bf08f2d287d849b9513a207e6037e922bd831b89cfbb6fdc2beb4f2bad538b57c86b4f2f1a2452d944714f74f806b9fb545fab6c6e051e2a300d5ea066e1bf2815438b2b0e8e4089c43ff83b5bb5293701358e93813165ee15cadb0c7c93c5c04d98900f8b9f7b9279ad031cb0cc9f9d6e0cae4631c8aeee852aaeb51af106e719724523b8dd6bbc0dc2595f1fd485f643ecf2cda65160f32636c0e46684ea6421da92aebed278ce2587e04cd254420a27de426f0754e2c5a0f5f7e088d3da010cd75ffac5060b926c02812aeed43ea1c3e886767c599e2c9c703cf3a9673c848372944df4008ace873d25439edce183bf15a6282fe9fbf0c2ad7863f1c679b62db21af073485f4b2140b2dd08f59377c26a8bce458b61d8b9b69179877afa5fb39fd72b6b66f0d1e011124154a6bc4774f11bafe9c838ae2a93717d940b2647bc41b44504e2a7286cba2bb7ab78c4b97fb13f154127e938bc4afeb73fff6435f1a199886545eb176e43e78635f2139688b2e0467530da3f18e5226eb1e01ef3f9c66f3ab71723678eb22cf8199c11a53afde48bae6b748ae56bc3ec1135bb477eb81ca421deb9e07311e45380fe27b03a99352c14611fe3cce5cb778887a3fa25808a0ecc24144ac667f6e091a1bb7d338eb971ce994410755a21583e5d3dd498259fbfdf709c6d2ebd4ae7750c37d6cbe55aa2059b49da87d2add75a3ff39c7faf4501834bb911541ac8b053c70181aaa5fe06e0f09809ab56573b05b52c1c8127631ae03cd3fddf865882545b834679d68fe6881f976588ec07ce6648511a4794e1531dcb52fa780ae2a7a04f23efe080f48a24b0b0b5c79fa5d6a67fc85f79fea6f463809ed0c7ac4e655e2b4b4286ac153add2c4ac30f74199cece3fab3be6d9c45d9e41f4773768405b67862091462da3edb1acc5509754b6861fb4fddbeeaaa8ea87e3e2625706cced1bcd00a31a82bdd4502a0345ca924822c4f30a7227cb816f7d6613784a1ef0ad782fc0e8688f061436c2d28b1188a31776703d7922caf26ef75f2403911f3fff04f50dcbb091110ffe1dbf9b0cb66be67cc3136b5017506b8e2570aebc861f742ad333e773376339ee8126e00c9a1712605238c3403f3fe79a5fa5d43cf2238f8230dfa620f08114b0a3a504a1a2192dc9a40a1b63a11565a474101e92d1c0a383a47d925a4adf42ccebb6735c7d069b013ef3ce4afb855844f96bd84ea39b72a7847a368fb4e2269bcfe7b6ad7953ecbf99a276669ce441f45605abc0f6086f8687620d21ad4e42b5c69549052575855d4a828e3703c6b52b206a13ba279bec78f3c170c0b25829a3765b950410000752a810804cdeb12461df257a6ae6ba8c2770252bed62b44ddd45b7452ab777e53858d8e7087c281230e8b47a838208c0ea72e978f81cc721dbbb14b3d98a41a186c3384cfa6a8ff100d3938e74a7fb2d6a72aaf2716f2538175d107ba106f1cec68deb0cb3387d635a364f10beb706140005c622f9c843032892170701cc0cbf600f3dc0a34464cbb57743bbd24dbe274392e774f1c6a51577f0b4d08c37f705fbcdbce34b4cdaacab2d1dea5fca87e9bda07b82e9d8cfe19e0f568290e94534e24fe4ff2b80438893be4a26a7bc07add6b4eeb7527d27fa03349877c03e7bcecc1c426ec4ad33d217a134fb4a9092161756dd9cbc2241b13006e73a8ad61f3611a961dc9712203baf7c7ac2d8f6cba5080cb4ad9776a1c9ad0ccf45611e83fd4b7dafa3136d9d07a3b69827b34d18cd112d006474d8cc85f29cbd12e3965ea6d21fa86ce9fe0ed8ccd5f9946a021e00db5e4d4bc4d72688796d3d4d72cc13a56df5c8945b71fa2163513b937dc42fe2cf06f7de07e04433d9c4cc3faf2e278b4796acb41837e3641fcebaaf5ef1e2e554bd9ca5ce82ba3a7c59e673e94b2ebb2788a13680de6f334a9513329e19cb8b04f8a80d893cdceed9831884c1918dd7563262a625c3d1f18c4ac1e7bbba3e36683eb6afb88d30d389d6eeecb89fb9428c2a5d9d8786d0314d5643192841df99f70624f6ece26a8b05dbb6064ec4559f11e6fe6726a5ce75165e1351744f140829c58f6d96dace77c5f81a7bf4bdd74f8fdec19d739f412f6fb8af1b103070138913628e26e4f12c52b298b83adab2d66ea843cb0ed1bce2c20c92f09ca4783e8d762ad34d8f670b24a19d4591b97cc636a9f15a48fbb611b5b05b5c7a09910bbf4464d75b3894a6c43bb4ae89c89981607a56e5c25bb14ea34a74c928ee5eed97248d04e07efe81a9e76b5d93869daa848fe0d7fba032fc23315bc129b136669d9d2fd66dd1292e5e4b1dcd3f71fdb41b512bab6537bfacae1b8cdf0cf0bc094af4b9d663cd990f59cd6887fe293e007d7493fa9fa0bbd2bc5f847d432b544817e1b78f52d2c29714e4c818400ae3425350c63ffb69bbf0c683ef165cdf93a59cda956bcb7f3a781837b8f8c5a561ec158c1ed619013499650f0944ca7c0e943255fff62e216504fc1cb7a3cf674e504c6d2a6768e5ba3f00778f831c8f09a680da43a90b67e6d0093a4093edef1d21509a556e7bb5b1544153ce5ba397395ef0de0d1ee3c1145bf7e6e063a1ab32d]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 2707e51a500018ea983ef3f4788c30dc020257b06049026181bf61fa01570efa

tcltest::test Hash_SHAKE256-3.27 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex d8af74f9e0f7c1e4e7cebac2356c84b1be045c8b4b52da16d574777b31fa4efaf3401fdb8cfc99a8b513d99911b12e500d981fc60cb8af86c100df19db7575c1e881fc6a738d0cdd70d2cb37db6bb4999baf9722acbfe11a7d5b1e7097fabc678019128cdfd3a1ebe0b29982dac59ff630f2cd85758efa3cd32b3c6aadb1ac5483b1692a16f5e03acd5c4a6458e575ce9309c8d9ad4e8253891942ee64c3ccf0b9f00a2d611c5132ff77e6c49bf3c1898d9b90049d26ffc768cc37e30658a4a4e97ffc7b08707d3c3dac7689ec18088ee6502ef08d3ffbff38ed2333d997bdd6dd0547fe5318ebbe51a3009d937bd44766d2a983c4c0fd65c1230fc526a99ef05b2bf49c8a3d232201038fe7d846ac1bd4c609a78cd28e60ca17028134b6cf582c990a3ff406aece1674284f039e1972fad757432b9d35581d70044f4de5d97818f691ceda9c132c58a0d5bd5bada2b59eab9a3eea487ab580d71d17b75e43b6e6ea92318426daa28e2c9d19299bcf4a89eada8211fce5e0bcf456c1bb4a957c601f13503acd8c9a82c3894bb590289a833d1ff6e8e0ff3f996eb635a1d158314c3a1f1344b9b07bfa0b9f3c47b3360d544c7282b71d4f3bdeee455cb11a133c73e6bb62e911ceadbface9d2272c800cc3beda0ec5da5d3d551b0c1c334e4e079dc9f12573fe6e98994f6ff69d248efd993b60825b40b2abc49e125e6e9492f9918bc84428a719a44f9c3891f0c3e9499e6d0bc6c177d5eef41e600bab15657a19d549a751355639ab3a4c89693018599af9e3c33fa64e6fad44fc0932f852f2fb4f7a3635cfaebf73d2b3c85094a394558af05f1df5a695b6b8f0424b66dec900a065da1e9ea89e700b7534ed16136196c63b83a28d64c7d921449c3e879368f070127952c9cc3e6a8e9bb787dfef2a2755cb181796106fdc27fe015282f835936987fc1a79a20729022d386716bf56cee0a804c43733f488732858d0809599b131ce4cbed6b3627410319ed6e40c4d540fdb31f19954bea5adc98900a8f3fd1170ef4f860786b51460b1d31a715c7681896b85e6e4fb35fb7dea7b2a2399c77ccff0efba35a369d299b4be7be43a3b1cf760eaea3fb0c15189921896180f61baf5db13a18793e77463434743652b03ef00c34747d2fcca717cc9478cb0de31938cb7a38426dd96c2686556b81eb937c04d9b8343c666b821fc97f053138da1cf398d86ab3909dd864d22d324346b3d5885f088274377f32ab105fb3468a41735a664a65ee9a02686bd82a6cdd2c97e7f51ca3d3b70b5e354451a5177d7acfd8e7b44eae55e29d88b5e8eb8fc1e5c62fc59328ac676aaf0665ddfd8648a2cbaa25f363a87bf2c5a5dd84deff840ab5299442f57127dde832aa45a7942a6acb639fb407e8e343116c4d4c8340b613fb41cbbca8c65acd80266bf951d5b56b4591bf76d9e40e7c17388fa05707ba99ef14e650a12082b20d7e35998aaf5c0cd0b0ffac283e6fd63d970f10e89913f5272f7ebf7cf43233e686918690a590c7e34dfac4913c7a1a0b04662eb69954ce39edff499ac5dbcba1fc0a41223cf63503c51b709372df9ff61d0f4a2f6cff7d7dccd29f991a01d1d63afa69bdf9eedca8b2ec00ad85e2d0852d7503d1a8669b8968b311e67526fef9bffc60a2410d174893d7255dca36643ec221dc3bb04c90d33dfb61014bcd9b63178ab69dc6b38d69f4872f12d44cc39977b043dc38f405f1b925dd8822684fc8ce2febfeef8497933156be6b1898671bca8adb21970f635b56cd07d97d797481405661542ff2de4af6e033d52babd73c172bf2aa5ef12176b34b7073d193b2331a98c72c0c80b9f7919e2fdf61e98c810a1e3ae4f53bd8da4b4b97f5b3298144b9517de509a0c33fbdeb12e87fe40f70ffdc044ffe61e20c9b27fecd96bd5a3ca92b062dabf58279b8718d8eca2dc88284dfff79dee5e5740f7b1569e0c1b581668ff04467d1603c3dabe040d529504c25b47cc11b4a4bb724bf6c5945d91bc97dfabce7c1d6e50daa14cbad25693f244ed41cd438019d3c775f642a2a66056b6be5dc864e6899448a2690023f5fdda18cc94011c9ae427a83f5ad4b02eafaed9cfbcf9e7228f5a74a6bee0e879fb44a5c0e97082492f3f7b6fca84a73ea74d6ad87169eb17a827c874f3610928b7b95391e8235ed61fa4a9ceed596d1e70bacfa22320590ffa85abd6af8b6e4b56c08a0638219989dedd9b246c5beb16317d72f57b271a50b0fb85929a67002903e2b2e8827219aa9472b839ee92096e121fb99921851422f012bf715dfca50ce4a633ff6d1fc88168eb67d41c07b06d3c270e55bc4231cfe250bf3ba053463a21947613a22f8d5683d112bf9ec1c65cd71dd8f2f467589eb040eeb80a72ccfce334e1ecc8aa4f700dac20c01bc834830a8a7e3973fa71d67f67b4af44631d9a520fdd518899f8182d02f9a03c25e32afef56aefde0663c07a4f7aeaf62e235c95acd30c8a036f960b5d0526a8dfba99dbe603dfe09018a4c67fa62fc7d9c48ad59329e375f09c32d044ab1c07fea017c8e5b1d01fa277ca8e7fa2475f6eea6b394d499ff2686734a4405648038b7feeed7bdc8943436879f8d8d4fa67f47c48ea619908a874b8e3aed86b74428c3e64732fecd3f57cd3fa2c11a60f877462690f5783e5401b7788179453666c0cc5c2828a4976dd54a09653b27f5066f58416d1b86d0061668c6b06fc76e72a10fc5041135c3aa2d3b8929543c683ad7fca97580bc11fb45bdfd4a4993cbe24a2cb55d9528be7ec010139194de571031a1c33cbd8e60be005590b19f20eb501c91a1b72cf3f4465e764d2085843e211cf623452a8448c8e69e0578c8f5292698ed1e83213e11ab38cc9a489ea489e7fa584e01701436966915d0225f9721e06f7d80544a5d7317ef819f8c58d5c6cf4a56a803f6e4b6c0f84b9520eb7d4217d0f17bace0d8b516f343a16e4c8e71518d6fc5bf574c45b324ada906c51e26379db764ef9d463422d4716460d235162944023bb5f9d16ff76ecaa036a5002aba065de0bec81c9cb613994d06827021810ebc5e6a570a920847110f52d3b9ec29ab43537d09c24b6b3139bfb1e5b630233e0cb25f075e68603e1f3ace09a1d7110d0651bccaddcc9cadc15115748dae7a6261ec0683533f89c443d71a9f6e77eaac254ff093d59cd4f9ce9583a74d08e11c5a4ff3437f93ff7a3d58cb0d564b10f91ec2aaed30289e95bff19f069aec01ac6472a7d03a123bb05a3451ec2fcd4e84513e6e4f841c741223f9ba0afda456c30ee886a22916c91738fe41b4217addce7b379d3337d4dfff8912873ccbee5ad0b8162241b33e220f481b0cedf1d06947db32ca20c1fe4cae6dd06914ac068865fe700d276ee4d119061f2602076a5b712fb477a0b8d544af30b7e21b14a959e350aaa9dbc29740b4f17f3f98d8a52eeab731282b93065282703d84c87c3359e94d1a8ad744e20b73a8bf8bfafc1d7e15203d5e39d70df0c8aad5c395693102d8524412926c419bc58a64cdd0d84fb370e93d7c440b6899d25f15211a521eef40febbf395bf327c4b24e367930398599e80b614e28682c84ffb801fbfdd7979a3a0e6807994312744e6cfdbc9e4a3eaee653bba8dff0906920e8b220e51cd2c80e7685b86b1ca17636e9eacde11dee1f13532dfcedb47df2916bada7e558692694095d7756e69e7272ab45d4811c5d9374f4ff6fd81ebbca59273ab985f4225bd3b03a6ae409cf0f089c56fb04ad52b3131c782b2a9411978006a17e4e56c610d35462b99cedfcf602a36468f43a9627f7b4e1586a8049020fef291dc7e71dec9ddb1e8d06faefcf67a7b943d82af29628a5821d214929b20dc91bbf790fee98382fb60eab996f4140929bb539e52ba8afd5a3a3d6577a50827ebf8bea3703bbac367263123043f4944b53e69ed30c06932e8c121112038377f55daaa4c522fe02da9ab5c42934916bba28fd8f5c5c58dc9785915be28ef4f2163d432f2314094101752b47ea0ac0cec7642294e8e24592f7d5483a2fe14afec9a77f11b7a08371954cee25dd8d28c35a4d7f36df6776be38c5603861c62ea0f6e286d4eb90159b7d6725e5688472555b2d39fca9b39368419d01dde00248e285377fff26ab66c6a10ef910f5b94589b24a7b6fae8e4396faa552b014603fcb5eee921bcfb81ffae989922debf24a6947ed6b1556c02e524b247c3966a7bc636a4fe9af5080e73f3d1f17c4b2f829fc025d31790a10fda31c64a6003c9e66b38fa1a94310cb679e851ab05eb293894acce4f6203048589255abf98eff0fe6c2b62efd607760461ea9c08782528a125c8bc8e294322ee625de429d6a18c0e399c83c0b8ded092dc8915ac1b8fda76d3929521c5c768b50669f71b91ced79063eab14fb52da8cc4a2262f898818b042e98ccacd0066263d5d817f762de804f7bb49fef637a6b2b2b74e89057b0c6e38759e781c0868c956116ab6fb2470285d18884124c5b943a00cf2ae5d1841a9f8e445a332fde63a438a435c7189ecace05b5227ac837c0735abfbe7bae71f292a3e6b9536674742abd0f5baffe5c659298e8ef6b6f955c61a9b4f7c44710fb5758cf79451ccf3a937ec6718cebe65f7e0b824f76cb0ad47f6e4d8b5223d771781d5d1e9abb652378ee580be059f314eade2fb72f42fed53728f7cda7dd4c015f721e1dc6bacccb458c32af3cd0d92253613fdaf76fe7bb236a225327cbc53787f780fb4ba37c9e73f8e4c004e92f045265311f51ba6c12ce928ba06487f9607c0e343bbbfdeb199e94fcd2dafb5b37723aa1f8e0aae25883326239e08a4f38c63696537a329ec92fe0e97c219ff4381d52110c06c9e1190bea64842e5b4d1cd0f135d718da0e29a27d19107b3f6092be6bfcad469ffec0a2faf113a073698946de813b1a6ccfb790ca2a344a6246b3ffb8d361228581ebf314a66cd95b2afa725f06f3f1534a0f65488b5c01911d283bf913cc1d2310f776a7e2f45b7b180cede335a62036037dba78cafc43543a7c1d7d5c52a8e1227fa825354e897ba72d340baba6398d92aeeafb47998214450bfee61b7968584ce0f22d1bdff5a55ed7df58c798afb26dff8110afc84069c3746aa3bfc4bdf0e6c80f20152d12b0a5993a2b17d1f55cfc0c078961ed00cd1c21db36d7a92c339691399eafca830621fdef232b06acd5d33108a5fc8c35a6d5b0eb2ff1bb2598c2d91c094a1ca91e4a5268a16f8b38c57a2aeef6de3a619f869df4ff7c5f5ca8f20c10e082a807719543215653f41ba45746350c855c170f85459315f62a13ecaaa6d2c4d80120a8794cc39276c5d7eaf11f75579085c88f78344013ed9ffdcc6345bc16b89c871b8ceba9e65674f001ee132a587e2bf897c6068669d]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 6a36ca59c101c70852cfed4e1e501bb345d8bce00346e440926ada0a30a8f8cb

tcltest::test Hash_SHAKE256-3.28 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 98ce1b9961f07e54c064aa73baaf65b1f17411fb6e308bc79d2852a7999fec1eaa4b85b20d0ada42f3d2559acbe67945c45081a28e8b443b61805c5141b487bc80bf4df28400e465cb8f50122b73ce565f157304bff511b64f9c5a60fbd2482b2110bc80503865625084e30262bc2c8dc8ad2f4988d6b8e06e6494fc5061f51395281885f81c24e48a995692f62b5b9209fefd9872960262c6c0514bc7c9571ee5eda9280512eb9182b7f0ec7127220c2af22519049db7e45f99db78e87236f21849b992fe8480113fc4fa355b174ba43170eef6c6549f0d42d578a93bc45a3736238eea6bd9ac0dc9a9bc983a659c01285fa25440218186765e710749288a9648627159d579372d294f7e3b9878decc16a9875efb6d27f6031a0eb9990490b655f0aa07c3cce918669d8846fcb8d8ac0435e5397ea15706f2f396e7b3c1324165b4811bbd3a8a77887a21e2ef8d544af9eb06105123da5e4ad053bb20c839dc81963ebd4b2be1f198d09337f85f184dfdb33109fd5d78a513988b5b67806c31af7e2817f607b72f9c86246c9f96ee5e1875ad4c09b5f884553587ef105095e8f954884e4536d4d89f841da96c9a9c255319c302fd9524a2198e8fa0a4a27aa96700a68dc1200095a6b2c618e8d4ea49b587bb536264c2a8668bea95aadde51b006bcafaf02d030ebbf866de9aaaa27347a8dd66be8a9b3d4514e2f8aa689ce6cc7b3cbd5cc6a4eae53e46260a858a4a106270649c6f770abd11bdee2cad67b3d31943ff8d51acd22d6caf16c1ce6c77189ebe74817b1eb6d66ac4a1b913102a1e2e29e80a38e46d996ae7d646eb0ea167450dbff71657ea98083f39d8025df2b4a0349f5be111643420368f21463871063da66d85a8eb4e0cd176dd12e218b49d59ad4d08b6fe5e0376e669db45b48efc70d1a5b499a38939aeb0b6ee1c0717e23fdc19991d720410553e8bfb5249a251c4d68f0a514544288737ecf416f3c48a3c082c978034fe62a3851e09d4be520d23fc5411389926df4551a6ac39a3629d377aad8a460df3014a04498e33dc4839748c1c51b669d868ce470c9fede19a24177bc5f8d7c58bf630033511d66b2cdd9fce0e51347b01cb0c6148549b731425c6519c6b9b246f483fc9091a2733a5ff8b0a539918984a0ee6e67f53a92277ab2b44596afaf247ff5da0ee318dfb5ca9228812b1cc885b3b4320dc2581b66bbb2e9e257e5cf6ba2474ce0cdf708df9e24b8f7422b613db590d55845189f79a5fb7a5272d29f971bd6b9c8aab38af23b3ee69a172400173712bcea25f2bada99eaea38802c9c314d52a52911e4e2a8222f45cc02cd119ca8a85d35cd8ce9f4381fbde6f82a41c4a71993848be18c5bf3a43b1fad5d02489ac03abda43d9960e0e879f053722ccbb9ba096d816ff4a8200c4b076f7a7eb57df8da04528b65ab24f382d71a8ac9a105a27b368ab6c7f727e5fa05d19bd33dd2c0bf8c50fccb3d84cf7d2dc5da84ff1b716d82107c52e38bbfdcbd6c47ac7c29a65fc81818369280cadd46edf80b305b8554d2bb1731d7cbf84770a7f466eaf3283f4a20543434997407c4eb59a8ef568cc5aad31df15e593deed20d289ef4cfb4d284f24740ae4f59a12a56760a868cc6447cf1070dd1b3ef1754145ab1340fdacdfb1657e86a02fa1de9a7e38c907ee035bbbd58d3fc7c8a756956114a234408663f050ca7f264b3f2756818cb87ad592df9608a001913ae6da43ad2d64cfcdc5fa336dbebd1d545b3701f8c33e6889fa1b8b3110ec209b984774b25c20baab4feda245c3072e4fdc54c26b45237a132157bfd945c81df3a4e64ff60aa09ce20e84675f42270146acc7c1637a2f577af1db5d87a75d2f4af2fffd03a0aa1e7be806a743a1e33d40b2d82768ca29a7c651ee8bc49e72ffa96adaa5618407e87dc7bd8d7a4a048a46d6ce1c009ddb14ff28da711792d13417f4be7096207fa1f092ef3e8ba352925f00f3c7b55b0b442e60e53908eb40779d78f5862cdbd9f1dc31e5e5fe1694fa93188d510e6c82df5be058081f11887042dec50eab1cdf824a8be7a85c09946dea06e5e19338088e8c907b09e56c71c60e0e7730994d57f9418a3caf2ce618916db243a0cd2865f9cb589561e164c22209f0521680d50a01ca152e23f614e90e2305eeb643a260c71f20f03b9c62452b3c6da0e5e71cc040ec14032c43fbcf8d15e5304a7d0fc2a091d0d2bd9cccc08aae6ba7c8578a405eaf7004f1990391b6493b4f8404d8532e2750840f6b0cfce667d3b1e5578754041b0f799b8394f930c9f0948d5f63db16eb884e5a9188c1e8708e04646f7bc2da39daaa518616cda49dea478d161a2203e56177c694aad638d083e86e27ce538710b9de3c2cf1d6b9cb13b0abb264ef9b1cc1497afed9057d8f99a72b08e8cfb4a8955f84fc8ddc185d521710baa80c8698920a9f567c145fb6ba88c29931fe080a5473507e53a7685a8ec3e4b6503f6d61ba035c25fdcc884ccdd25b6212a82c3de063c83ba9fe52cbb1fd4e2fc351f880237cdaf2c3f59d59b9ce20ecf194c7491f7716baf8aa7eb7a20d76ac690acefcb3bc4045365749e668c437be378b8237fbf65f83a9749326493b85b5aa3198dd540db7a6beb932f9c1fbc8614d55050e5b2ace1f22213a218ecfa3d2ee90fd2bedb5679ec3e5009dacbdfc5b99baf7d626598815cd7c1aae5910f78c9deda6ef65fd77b4ada15cd71150fa368582009846ccb8ed114cdcd89247aa6a1f113a31a62d1071e4b6eeb1d8fdeb797874c95ba2cb8430555827a421bce3f5dcc462f7978d595cd0ec5d32ea0cf7adda59fa27229d14650369a41ceeb7cbb33dcdc64b20657bfdda0a51622dc5455912f93b04ae8c91148247fa47e2808a2ea8f60d3429fc9ddc68da744a8a70fe058a1c32fb2ede23c63abad22de35e47ee8605e0bb9a9be882e4226bf1e954493aa98a8a138adcf101938ad4d7da9b2b7940c3e6e65b8a8476b4abe16033ba4f7ed70ae955aace2450f57ea74cb07d5d593cf8c8bf55119840423d7c9d4eea385c7c66f8c777fce338c860f4944b4d0516e46c2d4e6e784c69f4a0e4b2242c2b5900645e73d7ad574374f662b895524d369fe6be9a8f06c978349bc2a69cc850ffcccdc361b32ba8f861099abf75d65b43d43023aba10437f569f7be829d05d0d54668d198f4bcfddff76043b1d21f57c5ed1003898ababe68fa7c7f4d112dd363d7ff2e2080a97e819fc5069796766a42514f063d3470845a51f2ae0fdf868032e7588201413a5565bffe8b78a823bc4468b5d5ce856eb453d521f2d1ef5900c9df3d76431eb6a714c1d4795cf06e74529a09184467fb74d9eed1f49a29ed7bb02574b1effe679f140b0f794b569fbaf54f1576a7c161ec7604c95c72758c187023c5dc0dcb9362ef0777324ec2fdb8b3ef9f98007ae646b17fd2d161bb7cff9040fa9fa36c831b2c1bd34d6c1cd19317e27026567cd3a712c8b4fb70e3065998e3d9a1bbc97ff054b1ed71ae4c6376a69050c7b2ae703922453783a6d5724e11762c8b5ccace09ee308b471a3afb87ea6206231bf80424685f22110c7908058260b9048f57ba8f82007676bbcfe1ee6abe5ce39942d9906d7e3f4ca8b710a7730949b55b5889aa998976a796f15cd4ae0d18af347435a4b70b54dd8478d15b6cd9a346c8b58481ba325382b589b6613fb8032ef5776188d06c2a6ba8a2944af638915ede56f33d6d65d4ae1f8035bca425e509e331a565400b899f1a1fa19b988ed9a5a6231e053a8ac2d4dcbc220e65be86e8078b48638d4f3921e4d54077db4344c527054c02aa07e59bf527c57e0beaad71676d94a9419f01980eaeb90646bf9a6369e2c75c444505ac71a865351d10244f0dc0cf60e365aaad9e91536f616aa32a75a4d53a90aceaae58264b5a239ab128016a42affc08fd079e6557dbb4ad26bf5231bfc417a55b4ab28bc016a5ef1da5495535bf13f0bf4f15140d71c8eeedcd0873cd246096222888be0a912c772f6def67efb7b085bb2c0c85bd5a2496befaa050467ff4e805efe1a771f23f9ab129fb8abac05c2eb8478aa0afbd500e62ee21b274005904cd48c62e3f6267c0698073a5dc029d567d47974d2bc3d5bda15293809dcc195042da3e3bba082b51211b61a09ea4fe62d3d53b7478943a0a42ceffa20a0ebc362b4e51b62c0d13b59fa1cc6348cf04bb82997ffddf57075f0f096cff03ecc81d514b0787db98a754acbbbdd522aa39c9523a6ad0a835c523ceace281cf8ec76d7d7a699610d270970f113be0745e24f40b6105d61b55fbbd485e690fb81d408d75827ecb12e2f5e4924a4e6b85124da574b557f57fe0319745c80a9104c1bce7010d4f0f2bf1bea4fb0efe5f9eef3d4256df68161efdef188d92ccf0fca1c2e2ebc0e248a1275440130754a2071d7b35798640223ed5bea8e763b812e8e6dae6fa454160bdab3e1ea2db571d08c38fe4a553e8ff288f25af1ce3d4e010b78c5bf544743dc7a604a8703210b8e90902b9a2ed67972454ad95f5bb2a42bb3d61aaa56481c9073f2f4544b5855cf1185b1a37fec5d0794cdcc33793c22133a0e039d24e72eac49f465ce70bc0ef691822712e2b0a94719e3d9fad12a263be07927143aa4f8a48edd15722ddc95a9931e0254d1e3fca527355921ee1d4f2a59afdbac21f1e90d952599dbbd3a686c9891b9e5d7f6c5a65f2ae0551a860b43083ab7d1555e9e4c0f665967a94615a414b5e4425f5972bf244cf5e0f0e4c93a6e7242005f5b76e45007daa29c902bd489d2e7f6f29ca274190400720bba27651f1ee0d5aa79116af9929418e198f9928a715b701c30c3599ff8a664c586a4477c693aadc127ec448e8f2c3732d12d527929a54a46a663d44b934e55b8daae761919b6153df866056165f989eac92598e8646be20c6de2888e5c6ea14016c4657788c9986b5b1d2224af928d73f180da5aa9f5d3d807fdcaeabc8df405db749a0a3f0b93e3d0802f4ad46dce88eabd9b3272f9ac3404e42fd34c32ba74894d8863b4e2b431f92d81467d01a984053a502257edb79ad5542bfa83f36116b09db4f682f565d02573dc99f1f4baefe1859d8cb128928709bc53a2fc268466d213a44511aa2548e60175c7db9d8f36f03dd7e41750d983128b1b8efd6290df8e1ddad1f9777ef6cb450152a28272f3c1b193cb02fcd919705f07f1302e130b153add2f92e3df7445bce3ccef4a2290c69f55940c633db4a3968d7c1cff875427e90fa08685c35bd5e7b1990a3b0ab88f35a1f18c4a63df3cc030a21c3d6a5536a6f6f74cc3c6e80c43df499bfb87b58c32ed461b18d813ac7a75f5d68e3888b20337764e3466d3595fe1411d0246223e15bc14213526dc6313e1d9a4688e593a7c25b0033e0f983daa5c21f5c5b289153c72ee4745cca4012af8d03e32b8512070663724673d9129a1a46ebedc5954b235c626e5b135f4f72e2f7bdc93631b149e6d6dfa468d68bdd45e89e0aca71f95900a70951dff69c5abfa3f3800faf187449fe72d325b896ab0ef0603cd28343fb9d43dddd2855ced12ed8cb8e20c7ee901921505d1447da0d5da558]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 0f77db48d3993d887b364026181fd9ba6a2f1301318377df7eb9167270c9cc00

tcltest::test Hash_SHAKE256-3.29 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 9a562c766897a984ea44450899c45b3ed1d24e4e277f7a72fd766b5a54844dd0e158a49862873e9a32d365431bac59286cf7fdec4c0fd0644e091ffa463d794f5a0164255cb84e7b570cc6f96777ec8fce08265a456415c7900bc8fa55dc2f712edcd2e4fd33c2708077d0f5252dfebd1f8d335eb98633e1ea02cd232a6b577c856e579feeff83c1d59decfefcd776f8860f8bc1517e10fb8578983d6df1d8b986415c1cd62478b67f0580db947c3b892b15964ab453965c89f49010c6779c705adc47245eab8897a637f655962437b83727bcc38a0dab4e1dff1d63db048ae928c7817f2e9b9dab71bcb434aad751ccd2cd65f27db539176920a70057a08a6b198b73f5edfc9e3b091b2440779e710f2390f9a13351270096df96ade053843f55af844e43d6728f96dcac40a6807fc753f7e09654ec5d51ccc453331e2660ae03bb1b51da3203ef3f88b6fede86643d898b829a898bc3523258445abb2006fe4c37a2c8571738a32ca6a940c8b706b9eed248747a38414bf122d2e95c4a5f7757ac8079658ef9f286beedcf0c1b4e82aa5698eecefabf8330aa65aaabaa51634da21d2caa9e2e267558ea7351ba24e2e49fdbce2dda254318796663504bc508559fe1abce4fbf8520fd08f33f9d711fc5337add41de5bd3d1163bddf332a4b0982d34bd7aa99558b034af197fcb1b82749cdbe3af10497b82094ee03b69d4a13dd37e2956b596e64c8647abb94c0c53196268a82278d88354db0634d0f73f236d1a27b8097aab791d7a387294292adade0b88f3401dee326e13caa05be4cb80508897323c00bd574b98ea36b9695f5fe921a28db10774d1f83904ed843862fe0da7365f9650b2c9fd68c5bfd0149229622c203f1e3e53a81cd61be3f2fcebe7cdff6d06c07174175b7332d48033ab8172b269cf2fcb71ff0071774a4e384e81b716a2f1616be9898e40973f71cc91af413de5058bb5b81ecc9280ea3ff27315f4763ee62247fb67be575dc64cea2efbf654fcabdb040f4ca9c19e8b6e3442eaaba7aaaeab0c91f81241ed32b99269acb9801687c6c05dd3bf8739f48205a34a052f4d11a3c29285b385ad4a5fce2a0cb4479b63f5f28cf9356bb9ee246e7e7b2a988ed6b272e856c9ab07d8e7a559610c34f3050fa2830733f68641fc75bbc6416ad7c781237ab37b3c62a2f820dff4eccc8635bdd62a44e3ae08b5b1254273722b8faab8dd30e4f1bf26723b45a20d7a99bdbda79869fa6b1da711ec83fbcae7651d48ffa8f23054bcba0e581e8bf4de22fe6474ef286ff3cbcc1f5499ce13c59feb69fc8da8e1ccbb883ef6b382f041efb2f1cde44feda43fdda5926ea495376260d45a933a3d8045f7ccbd0a704acb89422d597dc6baa501446c4d0a63996335e453bfc3908d99e16f7e572d3b4ba37714e0c1c4751e1f99673c2e76f56771a0dfacd42393183e18581e6924cd38f24192d1acc145633a90b0ddddb940478a2bb9a840be292898711b729ef50c5cdf7023cac37b1ccf1d6c861601db2e81d65fdb0fab993b03cf741e439baae2fe938b2e91aefae4acf1b850b042e5a65c7cc3aba9bfbeb2f20aa9ca580b4b3665351a1df014468340ddf978744ade8f21a4e0923e2134743d7199877b94deefdaeea557ac9d68e3d40ab96527beced319783cf9957c036b2c2dcbbe72de6df7a5e6b54490f267eaafa07f7f9449bd59891d61467776347d0766c7d50692ff350e44d14c63bb4b821bc6d42e8291b409bcbed7e3acb7cd9415431636ff589d915d3182d7ec9f1c925ea43fdab83ebacbf9812436fce8d9979fed3f4725d74ef3d9d44f4df447e301c16348ebfff9d887878ed2a92fb15d6eed8cca7240b81a43cb56c016435ba8b98c2b77c91f6a1525af0e69a20cb963014747401e17a209697bde5d9aa18271a1072355dce038798db9296f8b5ca9f238f54628b2733e244e3195af42d66448a17a74698d0a0b0ca8ed066ecbe72813fb3eb20a981c3472d835a23d74a9aa34a12c453b42648dd75c92ceedca75dfcd326cb36e37da2bfbf0ce2e8f99e4fc3e8966bf5464b764e192f2a875f0ce7628c5c570ddf775ccc87f46612e1a4d016c41700a3b5ccb38323353bd8da5b9942c9c9212df40b4bee06be362a15dad62c8b2924d789168b2d325fe35bd5100e1e29f1ac0fa7a60a94c9eee5a70cccbc75ac214b1946a5679cb523b378d5c690751b7a7a3b80d413712feae7024ce71d6295a3d5d16515c3622a052eb862ebdab81ca7fe3a0621f0e3c756dcd44ca653a3d63567986ad4491e1f98a7a2f2fc3787bc1eba73adfc2d6d1ea7198582a70999ec3a72f6de5d4310f442c0c10c84513468533170fedf238da4404fae9555a9c556478a55263d5bfb46980c8b25f0927eafd9f5ca6f576db5e6d6c1b7eb3ebea682c1103bd8e0ee2d94fced79c5ed95a7010779e875d1769654cf1229faceb2ce205b97236ce494384e05e61562b7b54dfa802043b8e9d87f8c9dd38d4a82109c8d6ba1a468b4c8ac003778d6930b7be3fac89b749f1d0df1dcc7684a60f562a24875a22742de05e92a063835cd35740990354df39ed7719de3d062f9c495236fdffe2b2491ccd6704a0686cb77e2181f497aba294e95cdd4304d3603fbeddd65c289af44cc1db4e1de9cf700398df2a584fd62be14f45d1530a264015d7bfb248e9c90e0582d2bbe564e0b6c78957e2cd131ca0a886fba0163546f7a8fabf71c92ab828fcc8795565f9e2678bb852525ccbc72a72f646f0946e7dac8090a7bbe7d3b06bbafc99c5a4911faad88f97220c5f1df0c507ed6ad69e118723023d3aabcdf7fec684fab2aa12dda83475f0f9e6b8671b2c21bab5e3ab4bb11bb64a931cfed50aa8ca64c5806665882ad2237ff0bcecd22cac7379c37f7352f0169571434f94b7e9349fa62d73ff733f0ff95d3454f63e4f10e1607f00d1912889e87a26a87b2c102c72fcb923f291fd923a3bba69cb861cb5cc101e18ac974d760956cff2d192a519a7702d5c8809ebc4aec088e1b4d41b04fc31a8ae4e8ce647c1ae4613df10306304a990080704910d1c95a8a6f94dd563386c26a9fd977c63d82a91f5edcf3a715250ea0eb8a978d64e62229ee21bd13b49699ff302e096321671ba7e42f74aad580c4456e32127850acefcb3b76697f5f8cf1b73a590bc1c432cc99828afe97ee086a5c8d0932684198140ccbf55b0f70b46a2112dcf77892602c42ae51f9e4cb065154cc628fe394324f6d04311a3ab4a783db5e4c44de1889cb51cc270f18092529cca0f08360e4f5f24a98bc2f8787f0af3471098c88c31a1a35607ca6a804bf5432af15a566907d9d43edf8e38c570a7cdaffa7270f2e9ba97bffc5492b5a6f51154b547e7b4313b0d7787a0eafce6f5d1d5ea7bcc7c788f9841e937f0876afb0f30a2f67056962cd83cca1e9684a99c09a227db6490a5c7aec3159a0d5f5eae43a7028f79b7fe553c75f231c5c581457dfcfbb9c098390be12ec9a66fa34cb7b79f1b3c8a3f315d410a4500fd27369834cdac3d69fafd023a684d83a0bdfabd730137232c56f6eeefe30cb4c9128f3c36fb8391e620b655c05ae958281330697db69c6ce66416ad4fe98e74aeee56da8b6fc8dabf702fab7cece54d8d0fb863dfa5924041d15a4468021569362351193c12c3437d542fad7407888c59175952a1b563c7c405875b4217e7bae81949a24fcbbcf1a7337d03b2911b3a1395dadec9d05528f7696899e6114d904c38051ccf81fa0fc574e2543e74e68244f004b061ddb28c6263c4a75bd68f13ebe94f30c11ec6c35f8126481e96318a73909f7070c3c01a8e5c622ca950f56a4c92ed862f896835fec111885ce1447a28dd73c6ff6cc8fb02bd0bd1d965c7bef89da8c520aa288f299c6abc003b667bec3f475815bf115646ec873ef2ff4c36757048959d694df6697afb8c108ee1b5451ee4d1baa4e554e3539e1afc05cdfb4d7595a0adae219445c38a9e96c1fb4fbee213d7f6038a1d6058180e005f92340712578b5861ea9145dfe09d99bcfd71dcf39a12d2c449d84565bcc104f5e30a2cb15501a66af115f137c52f22672f4529b9412c55d06aad1be153dc13af08a543b958a8a0b17e47d23101fc38aad8f02c9dd2ca880d35c56834a5063275482cd49228284d1fd94f6f365bade36d419d6d0513977164f248b7c57ae86b2fedc868a38d2ab69a495650af9cea2b98b372755ace381abde85e8dfe9a29c5c53da086564f56e10b1784fe028c5a19137497cb05c9588b01602d7446cd72491f81ddb6123553d85b8c000099f3a6b4c6cc35f76ccd9dcb16a2e0f305da6bfd2500a6804008caa370eef3deda99760599057482f9a1afe1e6f69d93a48abbebc004246d46906248348584212f46701275667bf3130f37d858a48cda89a50b1bd6d37e048d95c4d18e9bdc50ffc13fe5403673d221ddddb553f3d7521df3029350b6ddcd7ddf9745657622f3b1d38986e4be83a88dd44882c12da383c83b495d17f569517e3584ada35f7f93af44f7fb4746d4fbbebc214789981bf4f347878112d84917f96133102f9e1bb760dc304e53158e561c5d0f0a937c642d04dd650528a7a6a854294b76f17b1de72c62dd87ee75d83e0f7ebbd5c723a9b665c68bf343a9a78af95675e8d13eadab7ba0a5ac02acda3dffe9ccaf0dd410187ccaa0524a2775474eb0586cb72ef58cb55c31c77603bdda5464eba14dd6c1dab3b04d2b24693767bdfe9d0d8b941a11425f28df32c2a99e76b8c0b16f72e58471423985bbb71670ad0aebd035b847c38b7133fd1e31c50fceadf2e95bf0a49e1d460c68f6593aec869aebbf9de2a228f659fa2822983ab7c20a2a51f99825b1218570ddbd96ca62af7744e1ac5a53caece12468263e2f1ebb990ff032b19144e4c70beaf8b8ef5b92699f3e48678331d6cf5ac5126ccdca22204aceec850fe0ced3859a8f05d05e9637a4df5a535ae31aec4348ce6a3c455d6882f3105ac80c477387f26bc696f323abfacbcb64ff6a220088f84280a317d63960688779e450b76db9fc724268a2a18b4a0a81e39b4e54d3d0de57f62ac6f35a8c34372a8a34868ac2bf8dc36ff478a03ba5661855151a2cc400f313fbdc1e95ad5f0ab5e2411c924b43a58fd27011b276a3614a5649dbd50b68ff203be1beb06bf2e76115fee24dfb91a0efba9fd289a20c59c2c571fe944e1e6465155b3a7470f4b5774bf43e837bb0682b4f0724ec68e938c9cb16ed323528082aafd4fca9616d5e3faba999fb72a8e38bb83270a47041e5a590bf0f776790d5b731d36b17e965c9015ea75c7e8982fb571ea81c7a611c489e3bf4cc2a8d5eb253c4e1ef85aee5de058c76edd4684597d6a8ef9233e48249fef53e8c154e9886489085f0bd58f485925b9cb6c5b6f99e517f91389aa07cd00be523b7fe53483bdcbc47d685909ba6f2f6a31d191ba6fa10ca1678763e11c50f342db5ae4475b85870af0aa6fee1296b83138c974155925bb204b98e654a105009e4efedc828e504d646f2e849cef6462b726a08cd0e4e7a5fe562abbe2d99178dcfcb828768aa271393f712196af6cb154a1f346ad716b4f840dd95f0c549abe776b2372a3def0a521e81ee18be0f416a2213e3bebad253a69e9114a417065640610dd259af9cf6b970f942ecd12af25183aedd71be6a9d9086e6f0822db95ec019421cbbc799317010c5d73dab3024f3f458e92cebc6dbdf8044f0310e4b0c8e25bbddf98cce03a0864f75b455072077fd79d1974acf54ba1413de5a]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 8f38bbeee3a2bb1a3e648987fdda589efc4b543c018414cd1c16f530f479c7b8

tcltest::test Hash_SHAKE256-3.30 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex f3aeaa57dc5aad810c0a23ce58c83eb828f13b9b35e7410c90078d6de7dbccbe0490c8b696aa471334f6302e9fc0f0d247471c4e116e58c958b477d63266e449f4144048f8414ca59d5e0a6b90fa1fb64a337cc8da703d5ae552d130ebe75cf0cb2159348a8784de502bf7acb3dc930c389ca1311755b9663fc7e3a29ac5fd5d92a15da3d4e5b7675443401991cf137b1a6cd4b0518494956ffdf555c8688f38517b92bc5fc1ace7b1902ddbb13c69abf78a5d6d0f6796917cda4f71fc38da280e9741a8b2842c0770f9051a9b895b45d7de8491d96587ff6e48391dbf9da5d6d3ddb18e5597ff6f986512fdd820b2f1c350914437e62e8a4e2efa8198ffbaeaa7352c97d160edc631be9aadef673556c1c8cbadb25254d82373dbc60fc6df0b9387f8ebad49beb444ebe65268c8ae1ddc2e7cf5d112c191f5012414ac5adde19dbb5eb171b939e3d7d43e13cca9e3ed196aea431d8c3d5eccbf1d92f8237b15d0b9a612a61827f8f561e918a2749e6f82645dc01d2990e7b1950d697a8a834f31691835d3cd509ea37a318a7290a54b1e051f94595181d3ab6b3ec0baf5bb36cab3fc4380427c7beb075c91c565c028f53377e6596ddacac329f6c041cded73a280996335de7337d4f0b354215bb9ae10d7acdea6e3617600b87e91967bdfaec1b638be7b09fc7b661d7efc11da578676da07a6c71ddf7c6afe1e5a42655a8e303f217bd92be1efaa7605b01a4a61582f22d06344811b8709e41d44cbf525bbf6019cc3d8ace83aa7e48f99c613a0cb44994f40a679df3de652c576bb920ade1be6f1befef5da04664d66de9c9ddc88bc26cb63736cf14608315c1899a3cf9fa8d56793d66c7ef7ed9bd0a92451dc379fb08ef436c21a4b77672b54ee923da5a4b5476be57a9eb946b4161fe7956a7ff621de1c74e222f43cde7a5041c61c991770d96db58700f27982806a6cd24c08c8600402b736d1e85e7c91341aa7342209ed65c2cdfc6d4b8ceb55b23b714b7b1d5548d08625efd0e52bb729019d4ce983143391b53fad6b89d9df1eddd82f80fde8f1ab6a174353dad235577f102e958ccd8b03f6ba88fc773364d7d971c0be710149bdea74961a445953e51b68a0cf2d00b44017d4c6a35fe12d05b7a3c6de8088962e8ea5b0cc2ba759fb5e0d6b3f6d95f76fa0f42e0a48ca82ce00d5088733652126de10591297a68fc3cf68578c54749cb819848ad93ad8aa5d3b714f62918032cc631e5994913d3d62f6df2b5fea86eb440beba0b83ef2efd8f0de6317a2c11048a43777f92054aa035bdbb15f38b12b3bfe91384d5a009768a8840c4d6e1105c329c47cea4dd41fcc87c5af3545dea6c578de1c4398ebeb34e9cb12acfe5657657b2b310e1fa3e4e50103ee8819f6a208033a1340009933653e1b3cde597a4f5521d65b0e9eaa417751ff3601bddf682f260de4ec99f3b7222cdc5388876335bca32bc591d2d17eaa001f4e48388340606abf58f16be1be943d76205591fb51c18a943640c401e2a595cd000492c871c355b837f47e4c92e2f85168ea7e28ea8d5d7875c37b20b691987012ddd4984582716049a0db1a7935e5d5f6f256d44a47a43f4bc1ff174295916f4d7d05da02c24620559a8935bcb58d6b911321e6b718e85080e259cfceda093479892d76f1ae5a5e258d9083a389777900f5e8467a28af15dccf902fa28888265eac54535a6b38837f1ff9ee75da2b690c41b3dcdb9e84f52730ac1e06c694adc38c835b852465f82cf8cb5d7ccf32a17d9f889021a2ec5828acb68641bcb73172d1c275b9ff6a24f4c10eb7fe91138b1bb6714a965e71a6a8ecb54e9c93781a312417894024d06e9e22cae64447568dad2f75f280f79a486f98b15e5f735fd1c92d8c8060bc1f40f4c208d1961a8411fdb19c702898efa44557b29ed283f5bc0293284062efdd01bc4ad0603b32247ed1e5efacd667f923f2d1c1f63cecc144a3fef3b28ee49418bf61287b7db6be3cf273758ed28c3f2d3dafe54ee7d54cd17618f6be2bc4cbefc5b01a0aa2cfdbb3280237ff63304a2bef99278e19671ccc4186384d83b60bed96dfadf5f3a4024b3a3a3be5d27ba083d0368d9e1bcabb9bcdf3c145dce3db7af995e924b85ebb6cf2c58b2a6894cb9fa82f22663525b1a8e2059a907f73c3feb77ad78039248e7e16482fb46aa453e53f2bebceaea0845a4764ca14b48d4be198377eefbd1f04e96f6e2d6d23d2bebf5dd3f2bfd065be18c6b959bbc259fc8c6474e75a8e76a415c5dc8f3bda479694c9cf3e1fe199e64c25ac506bf3005d65e3d818aaf252f66ae03d5d08d62a62cc4cc6d7d82a67855d2de4b60e8daaf7d5dd0c1bc532db835187379dbb60a4abcfae61c6d0f3f522b3a60a938bd97e504519b8f8959638d2308472593cc0ddf804b74712f1846b45b658c5f0ca1fa5f21b6083b50165926c709d9798733efcd1d52e20c32124f277ce0bbed4b3a74765c17a155cf0e910d77a9b4e6348222abea9dd96e24a1cb23e63869d472eb88a2f9d2f17f44c68db9db5453ec1a3b38e48e98a4f7553b5d225dd920951239b99da19473186fc2b1a45886510ba6c3a51f6fbfef38724347ab1a4f7aafb7a999aee9b890a19e87af6585dc16c568bff9a5148012b1da5e4d46c207d294c1bf8b6f18dbe4bb5f89d975d9b23f89ee84a92e0385b9f41be0c05ddb9eb2e4dee00146d56ae9b6214db24dca9515f996b63602b34d3f6fa57f3388cd80b6004dcfbdde95e21a329247dc65ef113474ffd912ebaa232d85158e29302e3a3687bcb2f38ee0ddf0b1110cba46ada3359c9841e2116eb40ef4ca9213ec6447cedbaa4e54e03cbaf7a23c00de788cc773c0ee95063c678c5e0f632f86260615e98c7506546b0005b98661c8bb6402fa9982615701c52b0895654dcaf2759a41111acb6f7497d14a90ee20d8d3a1b6c8f171aefc57343fa53f7708d8db438745cff71bde37ff36f62849f795a9aa0e9f25ff15e99911fc0ed6b512edb328538080b1c4f700f99794ea1a64a3bff580f9918b34c329e71691d5bffa8e2c8c95adddcb753e822f79b340efe667891c9464eeb69a0d9c1be5dac6f83e1e79f8a41a31b49b091df963bdd73afb759777df7d77f1a42d6229003624ee4c335de5355226fdb50b46ffdc31276c22325dafc88fd7ece1971ea6ec506a12a3513aea9fe2281741a98f9b49999c23e9426e1cc63888d8d0ff241e10a620f5d1ec83716a46af81cf687a644273afd2bf1a2b577ee4056600ba04e703b3c4186689da021afc37ddbccc79e34d3bfd09122e27d8593ed814ef6c53aa3be5ddeadfada125387f5b8ba84a1080c07eee2790e2e627cb956b660b6a72c02fc8d8fd8bcc7b43294c850c0075d0c552a91dcea9fce8ce6c7449c9d348e4d165d93fc1196abaf483f04eef63b43d496a46e65edbc09224a277fdb0d58c4c5664a39cc5f70d02a1dee703962099b8557dc4e26894d284d3140cf1cb80b90bb7a2945a8cb327c4e370ad5da0e59ac4a213cf8c6c63b7334227afc07a7333957db6380375bc4f84320fcfb780214bf497a2b36eeac6c3200a53dcd43e1b908c31061b222190e8c30602baabc45201caaed11ce4644c9add842f10b796e864524a18aa3100df97f3d7dfeaa4dde670b96ff578975953a2ce582fe7e50578138a517451aaa3e6b1b9401dfc2d5d8d0d4353a632f24a7a8f64eeccdee71a391286bf9fce198b44da65a7435bcf93842beae259e88fa83f9543c09c423835aa05fa1cf16be81778869ba5c675e6308a7122a48705ba030178ed75f4ce42f8595236d22fb7a0d9002acda43df71bb50e619d02c4272bdb6e8ec4678cefb1d2a57bdf77812dde506a5b7e2b004bca816e718c9587a93fa1e56b5b2dcb02ef454d075685cc5aeb1e158d1fb2c3e09d364925a3c548287ff6f483342115c465c08e792e8537bb7182902434d3ef51ee441cf2652a9c01673b1a5ac1fa1380bff50845e9ee79dbec3e78d56ff6e91c482b686c332de9e07ffed57697014ae4482338f1fb39f918c5a23e04f39447ac355c99f7a067b82244a2a45b25ef024bb90baf11e4f03c0e984e3e379254919e306840293f309d633fd7057cf11bf0436cfeb90a3989c929ce9317e1be804d4ec3def9756230f01fdbfc77507b008b57ee7d055f5b9f1706f3214997cadfd14a5a111470abe156b4a393887a364549f5b8171285ed88bc02807951ce59abd42d7dbf2f8f9eba37ce212ca75eb542a2a9445d4f2241ef0eb900fbaef9ed7cbc44a939a9369d3429c8cf3862727a912bef3da039990b2aa5a6ff38dfbef8daf04c6701201a39e7933128472869f8a94c33ee90607eabc41748d5b162620e4f268131a6128ef73d1a93a6c99789b2039a13e19e3227a663ba0b1ed5c5978031b5af83a8ff2947ad166cd5400e6629288c0bb13a4d487d62248a554677d4013b2413f78a546dcdd01d292e3b1b93d090a897d7e51045b347dd32f363f78c13b4085ae7baa0b0dc1e95653c2b3d774ad45624b03f09a3ca9d5a9183ced3440a44c8d0eeca62b70501258d6980e2a4fa5c3b4ee4a8b7d735db132270d789708755ec32672a18d4db20342e40eca99151a0ce82ffa2997487799d52652e88b60d7fe8ec0b6a419ec0f447a45ccf00b1033a664d4bbd3cf021f15fddbb245f78ff2b556a25fb6b7948e5e6ac179886a86191b92a537900deb7fae0f10d698c2deed0a849516e04f8f57d87820bd989dc0f3f3d96c13683949bceb748b65e9d695f1867e618329c923933a0e29422a8c06eab4a0effa633c6501559415083e1afc25afadce4d990d996a0d93a5ad451fa026e851f7928afc877472d77567a1765ab21079a41d38043903d76f5da9f23ed5ce16534c83e462f73dcda6752919d2f9bf2e4baa9a0f944a87230916dc38d1ee0bc70eb6767956fc85eb67dbf6ae161f759389a96d25a6161d76cb9bee1fc0330482eafd1352c1df7456847078692b15fcc69d6a3d8223e3ee5a1cb388aff3ece2cf4fe8017689e9319563fc5451f7237b4fedb2b32ff1fa2256642552f15261cc36a541e9ed985fe5306e47356f63901ab7e34c7733faa3e0f30cbaf3ecc6daeb4054ce72c0d48cb7af0b18c1c957a60384e5ff3096242550b77a3a14a8359e6674c45845f627b7d09ba438a06abcab5b415d92866159ca9b2c176d5c2e89f6665b5da609977827577ca0707b5778e84d73b2ce239b80d8e9da4b1a7485a82a137b888267acae2575d86786fa9975a5fea44c7bac4c819861487f0b03b57c82945fabb2073cb3f952396142c439992a995b9361cc7c44522cfe1906b2c7eb45128c30ff904f6eeb1526f66e823fcebe4421ef472934b04e718483d429c2dfbdb48c7d31abedc743e7288ed0dbb1fbaa277dc8f66b7bafd35963233d0fae3f30a3e5fc10ff1fa648efc69132789908376cf786373b5a292a0c2263080c94f3e70622136335ecf3435688675a00fedcaa381791d041d8049cb149aaffca7be22a06c82cf4f45d967c43f678101ce9614eb666518924fd296f71605fe8ee6bf641cb61ae89e579783bdf992c1e74617e6a0b6b2f2c8cd180eb73f0ec8c236c16737c7501ebaf487fc851f8ec4baf6e1b4562ae917f235df15ae080b8b30f872a09428a8de2fbd2946ac29b1e5e76182128e1b8e04c8ea86502df992b245ac31b4b442ab9367120a06b5a0b2c207068765bb010855978bac22d99c2ada9ad29cf81abdcefaeb839891140cf7c5946650326f83ee66e879cf2213583a608b0bf2ff39e299713792539a59d6f78d09f18b0d1e1cb6d556355db26dc647e0a0a8f23e94697172d5bed966e9874864f248766a3923e81d5b5ed6786b6ee9d7763a194aacab0d8c407988ab65a65109c7dbc0be5341f89b5256d7d87eaa86c1765fb687f53fc42a0242efcc30bca7d8051bf88e0eef7efbe5adc0473a11b51b2b6a789b00902be885bb8d3dfd12c35]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result cc6b3ee87952496c7212e1e015591740f54532ee556bba649ff60cc9b0eb62e4

tcltest::test Hash_SHAKE256-3.31 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex d8415e6cbe4761621ea126dc96c2628aa977be3f6ccb2ef481287e1049be2ee756287f801f4dce9bf88521f241fe00c0dd5d8680e6a8b7f79e631474a9f96d577a5ef7d00cf39ee9d2aa9cc7f06a4b2cabb537411e8878932f823f5bc249ae022d2aede4ebff7a559456c0e10ccfecd8fbc6fc0b7e3218d01dcd264cfc7699f155d38945253a09e526d2b5cafef58accb6d9fb646d7040b64e8cf2cfbf47d52bdba2f57a236cf4a37066a20a2da4ce0fc2365cd75308984eab07ca6c73850bb8a8df560b4c5de2975b59af2700a45fa8092548e999c3c79f1c86d7ac80f8e2a1a3d2d78107d47cc8cdf506abe1bce7a272eee724a56976b18a5040164f6803edb3c29d63be9b6a3eaf80cc1e37b60b02e4d8600fe0c24c8ddbae2e33469d15a4c2f9d339d8785301ea432c06695875d2492cdc32b295f23af9e8c989ce5ec1cfb7bd9f8cbd34df1a64864cede16bcd1a8833821684ac0fc0ca4638a25075af74795729e2d497b7900791545a06b6bae089327b42bccd4c28380fa40632a8869ef20f9ac68768836bbaab6dd64003e52e3474ee3ec4c151792a8d343bdec0ee52092c1abd3d71eab3641dbfe8f718f60b714004930250c5bb870611cbba85919aa6f8d0515f789571ef30711893be948028dde4c8e04151f739c3623e30be147db1b9e50953462cad4229abee7cbd67934194b865c45e9c34270c501aa635220413b8816d82a3566d455397f31bdd184ea4ada5f3186d4f7a392903e986b06135b23dca065456bbbbe0f55aaed6e64fb93970d5f9433711d15761a23237f8791a778feb5b3229049efb561fa7169fb3dbe92470ffad848b4269fd567e21d513bb4af80af582e2d91f7ebf0c6744d1edbc9a139d8dbe1c64d457454654ac0ed71e14be505aad4ae14451784975c644a5643583852cdec6459009819b3c406d6c4dbb2ae4141c29c5175dc9ff5906c082dca3bd5063754cd67c68f97cbe45b87b502984eeab36472da088fa569c6a0d2c2bca0925bbeb74bea35af5126323b8ab2d441498a5626bbfe6bb5275c55cf24c5994ae2cbba807a60ac8bc84b24235a5eef621088c0a5f26f1df1a855c43398a6fe8f68feb14cc35bb9b97fb340bf7109b26f566e795e908c9da9badea87a88d74ad2773d3988d14bdb9ce9f6fe4c5953abcd6db3f6bd20e77961a16f68f08fe70cd8a02fc9a10ea180ca997ed3668dcd59f0d8f1bf4e1df02f9e2e708c520846b2f6764ed841e60d47b6f0c366aa98c73b9e2a90397e02472ed3a49a890bac86ebb06c12ebc7f1efaed6a25d0e64e4d1df19c517fbf9584cf5969645f589c718059ae4048acfbcb924ce00b45141fc9da2f85b118d1caa82224b85fb4868f28aaf1a909c2ba5a0fa27f1ae51d5be6a5b25be3ee5536453773386f6330805b95f36b3d4524506394346e60dcde22698cad5eff33bf56cfdac87cd69759afc85f63afb31cf7d5dfff4f01fa1812d37124d41e21a6dc992f392bd83424ba7b9e2f02a653b5c1b197fbfc202fc040d5c6152e84916f37682ffba334d331d84da4acd93664390d4b502e42b348fdf1903008c37896b7552995c83878f9e73d8ba37fef4830cf600dd54029a28df6ac6c77a59ce379a6c0462a4af38def6e709f644f4cc5fda0445eeddab9d546d4f9d16293c0ab8363ff25b626db59fdedf9efacc5f99314d440a65fa4fb34bbbe6027bb7b37baf9179a300107f9c56a8c61e54689fd9cbd92dd4ef445f6a834dd6ad648040af626e919cdd29353b980752ee7f94260c63f02a1bc7466b217f8589e46d2d7404951020566f272f41e85cdeb5f8c982bfbe44d1659a7ae386b505885df209be19ac189e6622a4de1dac2bf1db4c8356522f29bc48d54c68f8a8405a50afcf9f6d0bfa7422940cc23d77f704e4e75be1623b21332c14555bf5edc86892d2c9986d59384a323fc96c3fb040b05955bde46e66cdee85b4004d1cd9f04b6b279229990854790b82854c93098b6cbf1413bfe5268236ec50e7bccc117a6b6ffab3d37e9dd1992508aad3b5d849927caf07d4551ed0b4d657761b8218a950f7e8a9169c8e2213053ec4a236a11dea188314d24cb44be0ca5425e9ed541f84c95ddc73615dd88f22914d2883e84aac193ca53a2a6b66333ec391c85c484f8f2ae6e86a7b81675603acaee73c3282810538336c7cb89234aa1224075d89bbd8b300377c39ad51103eed846ebe0447d1531269e9b220525da2ec67576f8cd6e9f83654192a1628362ae0581f87d1fd458937935279374926afaed61910c6334b40f5c8d1cb604f405e01848a283025362e246a072071c91836d5eaccdfda536543bb0036ac2058c75eeda42f2d83522ba87538a8464474bacefe3ff33b1db9d0671284a83abab72393e1318ef65006ae8e8689966943be76de84202c9114d9053198d0b6f5b3fcfd93a8a71a212ab53756f4f751f7d408e4ec0445c99054338c199a7ed37b808cade4809f611c87d04e883cfc7b709a068d8dfb1b5ab7604bcda5a3e99e2ac508ccfd2564f466dbfa6c98baf37371fa19c92ae51b7054ad94526c41ab6781e5d3d343f3a2349eaba60a1f1b86ca6a68d530593ec08b16b0afb2c4002ed02f5790396f77d1a2028b35bf71cb20f0c88aab4b7f74950b7bfdf057434c0e6861bea097b62e7ddd50ef5be537465c772ac41e8324331381d309f8c86091a480f77f8756ee840147083c7b23d61983ddffa9916fedd6c67eda594b7eb28d9bca2f1ed70f4f14f67f771705f3e4b15195b5afc67a12fc2872f0504af2af7c5e949710f2197e5dd7c74bf39ecdd9aa202eeb4b003a59ffb3de93a389bcbe0a5780bdfa8b1de2cb2feee556a82a3b608a0a1f0fe119297de33252b78a4564a4210f123fe47512e96936e1b4b4817080e9c7bf62eb9ee7e3411eac00cf2549d655a0126590c795351e3fbf92367c1f67e9e84ae882543bcc57e41e13bac4d40d4fd45ce0328dd04aa979dd73c0629e91f4dc501547a18b9592330764efbc79d58a2c50443c206a76b575c9ddc4ed84ab85245d5d9e3f6dcb8a8c2678d064c1bb8f188b160027aa65aca41334c67557f12540d146086648fa9b4fc9c40f66322be9196bba311c36740995381d47828f2f5fc23a4318bea3af6efe8feaff2951a302bf70c54176954e46c9b6fbba9da0928f2916f941b104365038d732223686bd766b48abb3bf2d310e91fe64b24f22e75dd5f5bd15e5f13bf95f3e4e0b0667e7bebd31f1fa6e84e8abbe9ccca0ef8c8a26693522f7b5e12cb50233a32c217b9e4615fb2ca80d22c1b88010b8192743f7834373bf79a96a853d9245b60810285d9715d2a02f039d58bf96d89b8d5effabff052fd72e58d3e1ddbfe31b214af4b23c3d771101ea4b1a2b53730b702f1633f41ed82e582cd3af3fcbaa36fa4a6718afed46e3c339b28286567e6c53f00e1bfd00fb19b99de069be45f98e1587061d6cb5d09cd57a6a2e4b003952bb4a6dc0944c072db534608dd3cf5fa4e599481cfd1792a0db14e879f3f1524328b6abce34608adecd78faa83ac85b0ffce9a3b3db930b9426a1a3f21b9a47b1fe9d4ea167ef04a174e405353db15a23ce00bf6e72a8a9eb5a9933232c7b9823df86dcc6a937f32a4e0e26a1772b0b84db76d1996cd90c1ae973fc89a115b21d3e0bccba62ebe4bdbb4fc5995185bda797a4b0e124a490b745ca86a203e924028c94a5094f6b37e03f31687967620f009522a3c2348be62511f567e8ef666c785da9dc1fa9468b466c4b95ce13406e24566940b916ff5b08b08d06eaae3e09e323b3f87a1afe5d34a506b4040f9159875df10e32368f8db6b419ea03dab07ad7715b80b51f030c4f8bfb79b796d56fae1e4272ca2dbcfcc39ef487e0ef6e4dd9c908eb4d1fe5370b83822d55539d0f1d19e5f4ed76f806c3d3d566ee76d7d14e8d34be9eb8356bed2e336569c058c638c3443b187cd15a2bf5151da8eb7dc3ba407761465243f958de97a871678903a5bcf58be7d9d95550653c129cc7d093b1953989c088b18df327276ce8a3be65c869728db8086096f5b6c2cc369670afa8ce038e99c60e98309a5b394c2f696b355b33a71573078d706c31c102d1ce96248d5de63e94ab8695aabb8428450a6250f4c16e9cb44ea754f821878e045ae5a945b1372b6f28f796dac0d3e99f1209cfe8945a9a46a68317dcea96349895fc9b79a5d7ecd00759b89cf3bf2c9820bff68934e1baa49f8f3dad2553931910699fab947eff41b73b7f83cc9c4dbab70369691b9a6a48aa5a3acb3a7626005aab1a5e1562df4eb8fb5001c3f1e99135628d0ac0fb15cd474293c9c24469e8c54f9003914a09519d37dea972667c963c5bf5e0cd6a698d06f6dd2b3564db3ce0b5952ea08b09e4d47f7fed405073442c6e287d899ec21269d58b620c4e06674d7b9e51bbac6d92ef20c83fc6466a2595f799439ddebbf7d06d02f0cf6658026c001fff5b3480c65dca2c336cbecdb509a6dcd562c0b397db3be869f7546ca8bcf19e9a07aa0009a0da204abc301a6ce7fa47a580db459cfab0b0400c8e9094c0be9eb4397347d748ef58f82d30dcc7b1507e366094ee51bf69dee5877b808107d5a4c06936e4b9b6681ace484781600647e50a9a741a6089d5e8fce0b198e802b525612f5b531b89d30a2f95daa490574f208486ff5643fa7352e8b0b7662441fba4f8f4570f8733ce9bbe8e60b30314e49546ce9d3e7681c0912b6ff364d03617b80a50c09687349933ddaa704922df96d7c3d9e41f62a05c484786fc11765f77b317ad0e74961cf1871f629fb36a07d44c8e215a85b2d694dccf9e47f8814eba4aa391c7263e4d35f9f65f359e533e3b87f84d671dc1a508c3260e6d867b545dd320875127ea55f500f4e8d87678e32b0eb4a6a024299c269fed6fb347ef30b0d120f652f614b7ad308da80eb84587213525d58c55451c8cc7782adfb9373471e93787331d57f2dd0d43153ef043aabcbfde42820dceb699de68d83956fe000f7fb682880a2e97f2fb97a8efaaedbe6bf3408637da00eaec4931e056adae03f8092090a84903078d800deba734be42bd73ff190436a639d29c65ebce29c1b0ba1a283a3a666fd20b4f0845ec4a3fc80fb65c637da009241b5c7742f667c3b6c4271fe7b4ceef780a9d39402547eccef13efb0e0aa2a429f4edd89e75c43e56a4b48a118e0eec79fa0ef382e8ba4fb7f0725d6141bb21bc1dd52c56a2eb9c30ea46f9404c82f1485828e966bd1dd3238bf4f615a955fc7ae4b6c4f4242a67d5f362e00c76e79873b35f6d6408ef0192324b5783b80f8eb6e7e7450f602d2bb65e7cd0de73894c8c8a36f21362aa657471c9f443e4446320a60b1ef0fd5052429a093e2ee90477e34b2439fd40dc795ad9054eceb49114189d86d5514220660b24acaa864dd5b51884cb877a2a01b7a5b691d99caf720c3f3cdeea98d539e1809cbb886cf8699ebcb5818d2284969af5b8d427364b73d5e50297e1403cf95f4340da5a5b9f5c6f105bea9d7ef717bdbb5e60ba140ef2ebaa9d363befdfeb39b3df6db2ca991ad0e3e66b4af7e8117a76f5bbf4ce609bc8005b3e5ce0348bfb62b70a14428c215e87f3880815ddf06bb93d3a89bdf6baf586db14e6d9d1583ec07623e15bdf0c527cf1c577615f50fbe28380cb7b27fcfe9e8b5e4c254cdc5e6d8b3fbc6f083867437fa7fb62d2afc59377134c7e7abe4dc7ea7f1f6afd84e4ba64d208049e32077beba41682de59433c76668f40759b5d8376fbb30379ee6c47a17f56a51795bd76c44e5b49d909ef5e0fff06699f00b861cf58b99728854f95bf9c1ad8fabff3c4980b3c30692e3468a24134425d8ae8e3422a859eafc629151dbce708be2d3505e56f3bdf0532bcfcebd1ab63378669788dc5c972763d63564a562dcce87a0b8b2afeccae13b3d37b3b24de64c3afb491e0ced7baf26798c9d3fc619df002e1f4d71e71063b2e32742ebf4f9f785344e009ba42e0cab133f0392424e46b7452b38862cbafd20e3478250571abdc2da4b366fc9d8c65c6cf59e841da38c12ad847ad403ee38ed063e7bcabe6f2557b5ebc672a4a063a04b5777fea141387b2dd31b45b4d49a8114b5353f7020b7ad8dd3ba8a7caf6dde7a0c95e91450d2598fc024c08696ad44d553b999b656fb2c2aae]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result b338b80efb270cf6d936304bcdf18f2b949ce2ff6f1ade6f9ffa322e6a190c49

tcltest::test Hash_SHAKE256-3.32 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 520599c0d56bdbe4eddc9f942a75206bd334f4fd3600f7033ce985b840b2ec82218c20d59625b154c2e1fb3a09679df921602c216c7b288285b52e9519d77018f84063f96be4b775c9958c814582e3690afd52b78a81fd5612f3c1f7a228b2b4fda8c8f3fcb1d58e277fba3186cbdb03b592d08837175ec60c2ba5a686ac9a9e584cb88df093f3e60728ee11764c6d0e4ba70d5c1c4733199be6426a6b6b111d32b49c8df093f9c68f168eeabb0c82d4f3c471fae0186498e6aa000bfa6efd7ab369dabca3b8cf76e7d30484fd13009bd672642c2c93d98b16024750dabc48fe02f2dce2b20a5e3e38e7b6a7e56ad1ac1b384eb8a8be7a3a52737f02b35dd8ee48d708c7c4918c66aad80e1b1a18db4feb9f9767fba330ecc38710e92f5a9795aca1c83282564235643072a7452508cb6e2ea701ce4ae1ea91c562cdf4ba6b3a57d783ed936069f48f764c150e9a3e6acb6de74ec8b9767de3b5dd76aa853e247001a0bea1b7e7ec5233032b1c7e67722be4bd1692fad8ebe1e0eaacfac4f79c20a7896e5164a662d6eeffb218d96a2cb51c9220d315ed7cb5cdef368c7e7eea8f52a5c54d6e8ca1422fa871a9b32fe0929ccf3534109f7a840456dd07bbbb56e4895c8a3ddd83f0bf7f663278159ed6e9ecda1d5df5d52b790e85691383962848d51687c8ba72967564a1bb2d069f55e3951da0f5cc77d9b972e6a259dff7a7e2bd3b82970c40dc8b68c1d56f8f1aa6a81efe85a59b6cca6fb8df4f81d6c61cdbc9334452dbd70a2a132e48e6b7f7125f0fe796146c9e46c169da3a3371ebcf5a816795a02f1e6879ec50dc3b861edf31f13f99ea46f497d70c3e2916b74e08886e3d3c2911fd3da17b905916047755454a6e57d1325604da2973e5d2b0d70f8c171e0396885cd3c94854861e3aebbec4a5dc986f36acd4f249e13610646f2b8f0473b08f9d23701adc052cfc2f6060d587f1246c5dde5046f3f0e378dcfca6b9bea20cbb573a5dbcbe0c1358ebbf85a17a15c271acd5c0ffaf08b6b11f67c631cc15dfc3be8ae2d676cf03d877f1734f05b03c262d776c44059175643599d420b632f14edaf946908db8c427dadd7208b12a5832e7ad9b3e7ef3e938277917ad05630905b470d3138a2e1deb1c6accf404ebdf3ee2609615a196dad6fceed901400ff19053d8cf87f598d8cd4682c73a885b98f12776a6f0f6e210e5bce26043ef9d6f96bf1783145760bb745f0cad03c5e24df4bdd911f70640520e6f3cf69c9b774cbf011737e036ed8f896fefc47642e9c4eeac6f1f54581669f91ee4e134cb044fb520be33161da71bb37f1555bc87d6c688fd221a2c75cd1e4dd1c1693207ac421d24f6bedc91f6299b9565a7fc1c131b6ab7d848aae3ce37b28ebdd8bfd7d7eba216a6215a1c427fe8bcc7045f8a068b3be27bf3f32c807cd25fbf7402c4ed14eafdb6a5ba45f3e643f923b20d5819dea387f26132d74ab7524bb087245556839de10d8f21947126545661fa2d0eb3db4cac25da8d6d96aedd5a76574c137b0164ca952ab9922507c2da6a24e7343b4cdb5cfca82c75cb2a1995fa2da384c255e7c135bdaac67551368d247865531bf7fb9c5f12387750f3ae03245051329449cdcdd58f1cb9cacb5778783eccf2baa45276365fd9fc8fd145addd0a7da55aa3bef75de936f18d3fcea24ebd479a801d88f169d8368bef8c86990ba14f637a2c6446b61320f8247342148f3efbd2d5294615e0c578acd8eb18d1975ef0f65eac64c2c6550356f92f5cd421091322218f34eb846ec6e7b2b8a45d6a8988e66ceb697376f70791723dc4ecee66b512cc18f97a3b1a49c5e6b9d1436b6a3eb90eb01962af405333f9642163dd9d0a2b3e8c3dcbee1229cddab7488d81483bf9abc41c96577a10c4f56b1b42d5f539f4e0b3aae4869f8d88f779b043966da72daaf01b1757eb65cace1b5b90c0b76af61854e6cfe9079d7ca5c9b26b911fa9de75fabeee98db7bcfeb3c8955852cc7b74f399994019283334d6df60f59a7699373aaac220194795ab6964d9a0c9975c1ee286c39b48a6435552e2336d84d10d40cca8ebb795d88f496f04d663d499f9c5bea06c8ec356b0827d4e1e9f558c62aa8200bc2ea7dd023f31334c100836bce0047114890ddbd362927da2f9812b21baf76cc3e3b3d787236c8a8b33d8e01e1440632c288c88547c5efb310a9c1fd318992783754e5a966c5d55145dcb38a5d8ef1133dbc3ee9c162f3179411aecef49f3cb8b51dbd8a890902d97ec53a2ec848ce5cc11489112e67fcacc4b6214eeb573e34c17e0c44626a19e567e06b14acd966b55778f026153ed21aa78161a59e1a5f93625f1cfe7951e02006168d6590a981c405d0ba50ff4e3d0a455ab8fa9551667ea1a833e15724212f654dea48fd20e734d50430b673ff0524a72a6c7559621c9c84419a15834ca2bd8c6ec8e67aa65fabcffc9a81f9b9f10fd4d7c64071b74996161299c185322c70816270678fa3b2d1faa040d819e4ca74d44b0e8065b6b5135c03770de63d86f04e0f2af2c47fa8505ed969e45ce858fab06c8c60bec927bc60fd7e222dd47ae6fb5f3eafa2a209cd038d5ecd492e634a6f2488060357683929e6f428e261cefa8e39f3c7b0749df3f2a568ba691cb30b195a499abcc84131bfa822468e4b4bd311849262765e2c67320acdd3421b0fe6b7f618457183774c2b2950a5b8fab91a8b2a63a77dc67dd4cba2d5425e94418350df3d2eabf2d5337453c66de8d6e0760512aebf4c1559e0c657ca2c45ed0f89ecff007ff17c228ea20ccbc5a64787908624bbd26cb488332a10f2bc7d9042a1933da85dcc892504be3ea8d57bb5780f1648d1076309d276ffb5971790e3a2724e817ff2c381a73eced0a6c6ee88799cbd663a86bb7eff514d2dff680650f6a524b3cb665ecd70e4ddaa0bc0882853df84663c78fb7ad66b1d6272d5653d08e11ebcd5e125d3489df0b41feacffdce7f72302005ac65206d763b3a8637149ecf4382e58aa1fcf71111d62c6d4d70b12590ad2e5455a6a5fe61a09ea4033c81169bee438959b044e947f878718ae7c678e5c3ad8e7ea72dc7e579e557521d795f2ee83607d558f9cd9b024c1d0dcbd321795be7dab0cf80700aae58c6ab1f4d520559072c9e5adc6413dcf0995e85a1c7545e2261718665a0d8283f1a96aac7962727ff1f3b20b657ba6eac0e057bf8137fb2a74a4c34a6ff58cde27a9b26add49c3c640934104e4d95a1c8a48a179fad0141bebec64109369186880f43fbc8b36d7e7e1112946eefae5b8b8276c0603ce2f1aee5691657ed8b3c7a011591e0dca1d797605c13dce50c853fd151dd01682aacc1e6bc1957cb4fd501779a51bdf6402ef51d9af561d6b7082ab8a1d84bdbe2593dea47b3d379e43b639958a126aa536ae17155a1c56bb8ca9460f018063a12e06b18934c919f5254e890d9eae4a0e075a3841381d04b16b5c7f0c505fa30c0299399274d5be4a20ada84a595c07ff236837d5ffc4a1ed9b00a91a907ee63f61bfd948b1cf7f0db437f9c42087ff08e95c984be7afa8e0aa2a46b2386ac7bbba0f03248232d6c05e921013aadec9abe7abcc3ba63a941af75dea5bbeafa21189fb69be5c9c70029e306db15ebce2689cda55fda201fdfd3100068f99ba1fd130195f6ea758b534e1976515929ec3bf876cc83a61724117b5b52db660269b6b7acd66be091430e7c73bb8b90d10f82115e7955a7b1807fb13e1b27898519f40989c0244e84b5d8bbd91cb2414affa2de6bf4fd6456fad07ca1a573ea8d7b6113809d46bcb6aa5a1433e0eef5fc8444678684a4666f5cace56c36e8128355a3dc7ab3fcb28fe93c8e695066334f6610b398737233626cbdf28717ae88cd70626c5d4c6cb9773c253263b44383ab6cadca87078e5599f3a8adda90ecd4d59447cc13aebe58d669bd070a54ac6d7860c4b43d8921547ab8181e4ee8ca7f0188f90382211b181439ad154477ca7a1e08fc79a04052b66f85b34cc9697110bb16211994efab8099749d64fa66c531052cfe229a764a05df20213f3459090f6a0467172f5e9518cde234fd156ac41b959672b7127130c832520bff7801b905751b72043db80268194a1be77bc9efbe370dfe3eef7b2d88cfe319957ba9aa794623ebe8a54319f9e376fa2a16cb6fa451584dc11bda69cc209bf208279904f344e479cb4f480352942c78cfccba6c554d4005477dd60b1c8c423f606318eefbd726c5b6230ee7fb95353ddc87dc0d58918dcfd9fdb93c007b9fa7a5166f901a67b077b009dfee7d4d59f25c2e7b7b348707527e83c92301557bd3e02ae713d75c4b36c2e9013f5f235f3f54a9ddde749575373ef750e9a6839e6a1986c69fbb1fbfaaf3abbd04298111cbcee04a5d9d25a125214194b5786bd0155612545b4d16d47c4b375b6264ce353fd1bb0c20399e51c5304adeb0fe76d97ca1b6db7015aa5154d27523839771944266226a50cf684ebf72f87501c00c8046015aa1069b4300d9914e5d8f4ad4f67d94fdab15e8eb60baf034a3d246968e1c7fe6ef43684aa7b48fa850ad055e2397633418960b8e4e5eb0e7ae48197acca521420d5203250f8dd46d45065177e239dbaff9fcc0bce254bcf7df8dc022ff8af1574359f43e000a698384c2b587fc0b0556966e90dae2441c4e7ec9c3f4f272f70bd981c4fc42d655d45508baf63ab4e8123615015117d5d6d2d323ab5a6c063a4716f1fac69c97a0460000e62d62dd8cc922199d8949b0f46d25c4febb34eec2f444d21e06d7f653c3ccd4c4923c2dfa64a3a1ecea407d7d06bed4477f13d197f8a94bb823bb9a753203a9d98e924d39ccffd575ddc3e37a84e47a0b0dd157c23d8d855185102c0e7aebaaaf8a2ae451e77edec0c89c8af2d1e0ded4cf36294aa93aa770949e532785ccfccdeccd9b4b9f6ae45514911bedd4fa29292c09ef3726f7da9eb82db8c63af0cabb1d431a2edb090ebd2a6b3e74757983938c1450919b0b4662598402f6819e3a028654080283a5857f70f19a8d9ca71399571df561efbf1244df6cdabc421d74298ec80ed07e84712350edd84331ca02c3f6ed86af0c5b67ccb2ade82265b6a1b89c66d39fb6eef93131259f9b1c2b7799cf4caa81d9276c833a0fd32fd3b1e9371af70077122d45327b63989f45129ba44b0209e13e6a4af0df5a44eb7256732f6f433c607a887eae956d6b5695c6966bd2d64cd6236e289c0a55e25f2bec682803123063d646cc2be90bbfc8f2918f76cd911b6870792f0d21c95692e7bdefa83e2c83870eb05633de073cfe45b9ae4ea2fb1da00dd486cd8e7e478c8c0f31398859ded50b0e454ddc288bff77871d7abbdcfb85e3c75764b73c5e56032b56624960e953b3a8c0024b3554d36e4301827efc5d20d899c75806cb43f7355985ace90a4b0befc5f0d894f73e83143585ef5523e977d5940033e1f29d7709e1e69dd01fad05a8aefd591d36f21650a5ce48a7184a95c3fe2a7cb27a14df660aa2bf6667b648c4ac0e0d4fb9189409da0715dca4267f88206cbce02c5136361de19a14a90fdc2d054b7b924a5706291d56df5c8f263f0e42ef7ad3cefc846062cab440af5fc9c901dd2b4faf577397b6e32c8ea1f1db3bacdb3ef328bdd2cc218697543f4f1782eaeca5ecb1c1e33bedd787dca1305ef9a55791a8043a2762a23ccbb62287cf3e069f72d3183d5efd095a75ad598acd2f768bf95a281e8b0a2c15d6d020aef9e79f1f196aac72edc55493806a8fa832c568a000715d0f06ac09394208006c9b64fb94221b3509977b14ab2f790c3194a2c1be2e556bb5a1307fcf97c88c6bbf9d6225164d7aa9650792ca0a4398cefcb0c90c0a6e1aba637ed7005b778a506c7a1efa7b6744fb5d5116169a30fa2771d6cab31c2532c3557e59f3187cc3c6abe3763cdcd35ba78a42e8ba66a9fce3fbfc0adbece07a7b7d194cd15541ff7383c0b113bef88754f1c04fdcf71464aaa20ad2aa0308bb87e535fac19b2d05fffcf918a6ab3e90aa9cb495a5d3dafb266fe96a4be806bd9295bba9ec71a89f131e76f31e2a0d3d539207003c846489fd697f1ae4234048429394a2795f1a9357f2208aa2c4cd57f4db9fd9c99219d6d799b52a9e3d20243fe9a62d91edebaa727fdd245bffe6a638806667768360a95d0574e1a0bd0d18329fdb915ca484ac0dcd960a7166c1f2c48843f469e1a3cc36b7a289132b6feec3bb1a18010b4b61cfe534850b7ec40343fb1dc6ca3349050bb728681e10ad6c99474a08a9aba99161ce9ddb51d158a15be1de26c202ba1d840befc6eaf2315b5d4a55aa7b0a07036a90bb546ce6e693b4436d5c79d55ddc48bddeed]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 8ef8ee7f513ae828c28b5934d5338e78f51b8e2b71046e4545225964e06cc34a

tcltest::test Hash_SHAKE256-3.33 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 48f1582a12f27d8bc3a1652d0a84d5d569a4feff3986a376ef5c79219d7dd320bc137e182813eaca6c738beb40977f2f500c71a83f78bd4eecd1d5dff4cee3e9789bb02420d1c4065fa5cf92f9604771c30f5343aa7be837f75b31d9d2c9352c04f3b4f90113516625a1f7ca3ec675c04b156b7b83766a59996257ba3f561012e981523dd3c0db1345cdcb3d16b450476f8682f5d1508cdb594e0d28435dbec3aeaf54999ec2a83547931591890f212bb7ca605c9cf396e5c0881ccbe7c68566dbe480b46b0000f3b45a9b6e9fc03097ab49cd56ed46d0a155764c4d3279ae23f887a03741622d751389267d61afc5b1d46b918bcb318135a08164532d5e80238e027ac929d076e4ec8a7e65d6c428a1b99973a53e9cf3c929112e88de5e458e24bcd7132a322268c8c46bcf06e8a090e2393d494e6f6c86798f70914f5f438c431d7ebc4c707a282d9fb563fa0177a6d8b5b521049235931761f319884ac443728d396d9773c64da68323c8b9f8f30a2273a4d567ee96198bf17fc68f080ede3974cece14214efeb8d87fa74bb65de548ddd10d7f69d6405ea6dc406e806983203a0686ca635964ed068fa7b922fd5ed359067055ec3f2f17e7d1302d991f5bb047a93ec22230a6cc751c710a231a9e4a5109a6f060170f3e1e273ed23d778d70047f9d02441ceedd8eedac46a3fdcc352ca35859aba7075bb2a6116753b841e9d74f4c94b26361a9b7cc017689ef111d529c2e96b73740f70b1652f3c22ba1a129e3f27f554d29b7597f18a1bd3695882bbccfb16a0fe299913fa87f7418d222630138cc14246e8fddcf98cf261a7f011fcbe4b1ae7614caace9bc1250c7fff4eb72c682d62e57baa9842a08aee5f70d9690149f6ab6fe11c4db36b43e7f4e9d2bfe43a985b50dbf276675553cdd2736f8d408828615c9f641debd6d2689e7a7896c584a08ffb826be3c22bdb94c3503ad5f6762e9dc9d018bbaf946f02df39a6f86ac6c47547e78d5d0d8490b7849fc1df9da487d52a1bb0a37934685b39afc4412e8172afe8a3cd6e840001baa8caab06a093a29c1feab261c3376cb63035770d9b353994402fa284d01ead1292594cf799b43d56fdb5a483380dcab8557325ba3b6297c6d0f3b33c7c40f153f3d43e0f0396869a5614ed64223820d60bd166d3898a0bbc2d8855f1e3178d032fc3d4d958ab3ceabb8113a12c370da3d5e8a0e5f02c13e8b86631419ef2ce84b890c7c31372beac9072bda6b09adf8646216a6e29c93ed10405aba81a73347d20d37d78be7d8a647762220159d41511df0429d870d1eb1982ff4b91e0096d30faf47c46d43c3eb6c2f8073d72634ccb030975b17fe6a706c7ab879b8a35c764998c3ad9df2f39f8257cc3a7a4d8e50644b9c4859168014d54b2e6317378d17caef33f9e49d70abcf198fdfc7b958c78369dacc17fe678319c7dfdd0265329ed8dd20100aec43f89c9b50c983129a1853b1d750175d27a78018525043d551f2bc8a115ad786736d3005976079025a2b1d4c1d3a22dcc96654660f25a02ef5fdbe1d8e3f131408f1d580ed0c702fa2e8286234f4002353aadbd89fc2e21923a625bf1f27853d0b6ed134d8352f417937be1aa2e479d9d05a5f978991d13de5d53b974d7af6aa83cb6d48e2437fe1e800259cf17455a6455e26ca55f83443427246ce9fa02e0378f0f1e4939e28b7f52ba611a80b5b34bc9e789a8c61d4d243668f8b9e01f5eff3c5a53272aef26aaba089a1501054283c019f2fb5337a93ee975ef7d0051316fa31d05707dca5a30f47167370ed092dce71e2b058d6ec2d4deefb3abf154f21981fbc7eda8e08092b0895b090093fe979d68846feb2f3496853ad7bf39772b8d274afcd742de44506cc4d7f39ccc1044516da182e2f568f45afbde2f3f54482b219f26c5c2201fea8798709f19e56273a1a204f70b5dfa6eee8739847958d283ff6cd841ad427dd1af98b7543e7c5fa61caa2124cac54376be817c577e1155181f3873d37aa1e896332a1ecb40fd724c10ea78a4b7c7ee9c295f1900b3fa4a681f96abe3a0eadab8b0e1196ce7e544e62cf79def48d2565fdd949228c1901cf46eebc30ab679eeb9b74229a189d041f4df35e37cf471153249b66a382d6f573d8bcc6ba131cb7f09a4b1d211ad2ae4089649fbd651309593dc3913a73de483a4049d085f897c163907d4a525d861c581e0883973d57d6225238120fe999c2ce857f22b9e53f83eb85f1f1566822141015c954eee07c40546ae4314b6b6f2ad4af44037d5f7cc731828f5a54c30c5f10758e58e9d4eb0f988eae361682c84af7c782bdf9f0b653dd8e3fcd75f7aec5ff463ed9b1a30b0b95c57e6897b40ce8ddd42096561f55f096b2e991e18b6f0d8591c31d6dd443fcf4173c10f78ca3cd2ede06d7bc74c16604f575efbf07b6014b5d046d46f0fda95c8cd0765d8ff5c193ee1cc75278637dd05fcb2f37f4ed67f9b2e910647ea0db762d23e2f2476a8cb30a4ab041b2a1fda2f8d49973d97b0837985a50ee06945aea011b9cde3b6bf5383d78d8b0abe4ad21c97674983ec8acab183f730d1140ee5f10a1eb48f35ec5c78c8e88c8e99556f6d99a0ad1ab3c1a003980c2e8260e5f7d639e1958f8adc40b017408b1f61ac0c93029a144a93f1cdc040685a8cd6574ed01f86c38d1bebaa9a312a0925addb341d7098219bf3978e87fb704748eadf657f2992d0d06fb6f4c7a5098939b44f706d524f5797692f7cbb47c8675f24fae623f67a30220cbab9a8f1737de43b953c13260418c55b2612dab3e55d280b161b7ef4c183ca695353be94dc798daa3911af7a7b079e4017eb86be3b7b4c13cdafe0a2fd2e620c3d6d890dc8eece66a77b82be08869abe81612fc54f5433b58e0de99f71a2616bc56198daad500f175ce44d6f3128333cdf0e3667a56a6786e3affa38e382411e87da5e7a1e3fc822e5d6500c796f00319d5d4b13c240600e4b10a30db740a99af1225a6a8020922fceec4b2465cd7a3358d8ce681a58a59240da749c616fd3479df40d3a6784f57474708f457ab619c87e0b40d33235b0d94167df43765276caeaa9f75858ef5ac7831dacce2cdb5757996f42c39e4a0a49e93353b16aab0c8b63ce9942c8c23a6f574e244d008fdb67276f34d7b3182a4a94e76264b2ec0d0f95dc73883ba03cf27d8c76307a55ee8da495a77e15129971c0de9bcbf367d0de0d4e16a725fbaae7625323170eb029218d7d0b3538ebc0461993605580d1206d16bde31e1c573cb4b22cab7f324113c96e8fe08b92e6474dfba0409fffaa54335e86796b83254af0c9838fc7996b26ebb448c7efb7a486efe37fbd19d445f4d751423a0dfef85e123502308e88b0eb1efb2211d01ba917a26dac464183467abf7b7bb573e442fe9f60f34e42a494d8c9afc65eeb3366620bf6907ca5a12e6e52599d6c3be787a50efa013972518968824e802f8fa35f0e931ad6b0c4926038466811ded45d58d9d74ca6729c342112bf63f9d43bc01565ce56e9931cfb7e70f213937dcbca19158ef54d8a3ea0ee80076c8e1d8e3e0c10241743941d30eb90ec087ce980c25ad0ac707100c84c3408c0d4d73be551b5961ae86f2453c74a20aaa34872a1ba90a3a64abb46c78aa44592394fefdfcf94503956e6c43f42fca8a47080c99d375cf702e086fccae0b19ee2167289ebec4ae705cf25046e2875816ffca05ed1bd025348de5e6330e2eead36d8c99a885c2bb2e6ddb4653eec674363a44192fda04340fe90bc4a9805add9171cbfa23383d95c72ef0f57400324873603cf166fa572388aa43af36ecd81aaf94eef318bf7b63c309fb06b00015f954d97b359a62121b2838534fe33af1cab53dbb2b8e02c54ea865c22010d6b5b2620dc98cd3fa7c4375fb034eb752ea152bd6fc4b8de8627e00a90fec9a6b5b992365ed9e1aaadfc4f95c1d51bb1c0e229ac677fa1d5b9c1a523fa81258a54ed62147b114765a81c53cc16703f581a41a8a75f5e14743b94b278e5539526dd892e41cdb96f0f2ac6fc593ab096f67f324814b3da81286023806fee0098fac3ff5f24d34cb8f5aa6ea1c3baf0e31b8446909b019f6870dbf0a77f70f2c1748cc26d540845c5b7bb75dc91f3cb8415adf11a90c4f73acc038e802e1ac47f22bc74e155f93f05c3b29f054a919afa9370c43eac7a8c88b87b4fb30247d05293b7894381128309b8342cd4640109c713513275249ec9d2c4b7d6a88284b0bc2622621c8bd0dc41f3c4c19274be7279f3e3be66bfae39995f2d95e9356dd04c8861b1c4dcd0853f04c8dff7d3467f73d39cea8bd435465d06611ffd714fd9640919dae4da8e285179d4ea5d26258b5520d1294ce8a09a9e58d6c74decb7169346af5ff52b663049b15d633ad3d8208e7a450d32938c80cda5134e630e40226abf96b36e35f5275849e6fd2972dac9903e5cf8c53b65a36b999af7c53c57875ae26467c890b7883db1f5faa179aa010aeb8d9e8d56b87d08a4c275fd1d89bfd44d9d0f8ca229ed4a77fefe2b5ec2414f005b40f38be16825354e2b63284336775fa4fd3310c8a10f0a867a2f98b014dd2b4a9280419d1f31e9829aafc30075a49710c34433105e0be810f146ce0ff645bae005cbfe37eccf2004363b946e07fc9264f448afad6ec1af22e5d9551e50194d901d2f383e6b4d8747a08f02d867efc02602a8dcdc7db0be30ea8fc477dcb831ef4b32763d154d6dc14c22a4dc1feebeb860fd4139e559a3cf51b2a2b8d6b32662026e4ea0754f7205ab8ee0e59a79cca0a1be8352404cee52cdea663de88a997ce54b1804f5b40299413c4d81523198834755099218dafc7fb1af85938cbef9a4664168d7211bbdd0afa3413be176a0b4c4694a95d9b45c8a9f7a97362dc0b58d07f9b79391f6f250396c7271c2e953d9ab53dcc9fd499d1809c401b266208b8b4cdc9ad692d64eac90e047cf70ea40566ebd269b0e0b2cbc63245b84a06eba13975278fcde2a312a28b747a175f9e4af710dbea5968989cc4e041b1976fbefda8a03e882ce73386d7359d8a44ca8cf6964be0b66014542ec2cfbb70d54589b3497594014de31c2faf33091245f675f08bc46a358d8bed6708263b5ccc3252ab641db360f97f67f474ae407ce38d61201ea400cfaa766b31dd0e49dd43dc23cd41bf230ef8631bbc6ccdc82ee634596e97132bec7d7cd7738baf6e5b04eb030128846a7412364071e1b92b92169563c23d3872f4d04638155830313ed508fb2f609412f90fa1dffa1999f10e3a588a04593c5d4f697b96fe8dba1bef7fdb113f3216a304b64bfe3f5d96a00c1c25d31c3346746510c4f9187174b3d4ca0b4f19e632a3ffd0dda828f4d8c2f382a248f2137f409f8fc96a4a4e8781567d41bda5c4129c5125fee29d2886de2b357af06f410f4863ad31f07c6a1a0ddd622462cc13db15627d57b6863fc97d1cfd53d379041d141a31a594960f56e0d23f5d46741db8979aa08f2bcb82c8262ea1d6faf9a6d12d2de4cc5d818363819bdd93718628cfa961564f495439ac61c9ebaa6cd86d541a028e4f53230e6878a2046feceb7d48d31f663f1909ac9cb655a17731fca2ce6303f7d57e65fa8d4e4e7b98be89644c9d3c9906a2d322c1ae3a8ce7524f8c669197e607e72f8dfc8a060cb7ef4a24039020b74ded98e542d0e074a0d6b875452b25248d956a11dab4347d7488150794333388bb00423b48a5af214ac51ea393b9177a0e90fccc52543f97768fd153270eded3f9e5b76dfbb4105a8e286b5f77c4d4ad32e1cf0789f38f22660f6851e6aa8762aea4e1c2828569e8140686f119d3c488a28fca09aa188ce6eb0dc149f78e98fb8343a68406a02394836757a1a26e4fd206a2d41cdb4c9eabae93c4838242776720ccf0f9ae8ea7248353c6b73a1ddd520523d78644162d3857a85946b04f8e6e2c46a66ba3d65c60bed3bb7a0869d6d14819ba900ffea1568d5568dca83c43d750bab0200c00a912d9ee1e3335d9a217778c6582618c62cdf8a1d98b9391006c332ff6611294f8007fadd72be8f6a9ec3984bfa46549d8654194949c99d72cf37ead5f75dd1bb0f35616cea74a465418360ab23d40bc6be510368257e1952e35d83dd5a6941d38b30634ecf283530962172526971d6e84170c908903945370faeae5403a6020fa08380c1753baa5319484de01f822e589c1dea992e9d99a59095baf867a68ae5dba94a8381118c23574243c2ca977abe4ac2e898652d9f0512cd4a390aed54ec990c10f3875c4347bcba0478ff24548fba0a3394b84bce0c029fdc8461ece89a6546849fdc7e6836d609f07121ab4423865e5c0cbc8a9ef0ec97d2690117ce55dcc305f714fa83572fdca859e6beb2302c29d26ec65c8a7a4d4fdc557d106ec54c1c2587b5430d4f168c9c8192b1372c080737498a5428fe81224ae81a49526f4fac53c0220a6e8546a43d86da353b8dc670eb1b6ce3f2f434b9be8f8d3511aa541e213f0f933f702cbe1be801bd47cbd3f17e52e29e6101e46097ba2a56150d05cc1e62c28ff8b]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 13e65bd35157230914fad21957875fd51f8039855dcf756e4c55fd46cac92cbc

tcltest::test Hash_SHAKE256-3.34 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 2e3e674d28e00fedc3e1d677c343c99ab0c0c68587b1d5f2af2ebb632e77cdab1d9203b159364d717ce82a430c647660f23e83a22dc96c8bc738a6890803d878eb8ded69ce0367a26d87f6e6118e49f6058624574abdb3568b7e1e4a537d5d197e744efdee0f04887f0662e63c88e963d3e0cf2c4653515ae4474a2c78ab0394c0924df62021cd2c98ac98cdf41c00af4294adaa8954ef9fb8dd52b9dd5573f3972e13dbce036a95a1c2bd22a01033e33ce9e5587b87342ef1865f79eb45553eed8fc7345f7b82cb8390fc6eaa2d2c05a8289fbf85b6c90e758b99f30a42507ba9fe928a3b52bdd7245e7b38793b93206d9a05650da755472e3427afa3130cb4b3c39c63ca50c5c06e74620875020f3975843cd47d2381e202c831351c8132f0f3260c4a733c3f8e4819da660649495aa7316f943bf2f5e6db91e10edf546a38516f0ac4a1dfd64a99970bdb94dae98aebe8c42bb1dc585ba0d55dc152545b93b5e5c05bb90230fb4b341cee877b96d229f0632345a9524a39ddcdd6df48ae0907d15496246bf5a94539352847f5f8384992750461208dba8df15ad5edfa0aa22f7beefd4ae3ce5c6fee80103c10b8c7341622546c0baeb386582c47e3301867152bb7199331631db19a222ecf937e84d0c4919dce30603d0b5c6ab42bb3805fa129d671681f5bf3f386460a6648f17906e3eb66ee57496105433ca22c4be992bcbc748e2f735ee71dfb122d6bf5baadbfbd5738364a11265a56cb9b4ebffb094c2eb9f652f61600173fae1e44638128e198fe9a0dd06195f3dd3f26f9d95fcb3ac5cc3337702846c99a43655b5aedf355bd0814dbb0e1b4b820c0cc955fbde06fcad6cd48a93fc11c56f98b16a2a61504749c2e09b3388d916674138a1abc51d284fe4aeb68017af6baf717df025596d505e271fda10e2867f9868641d205254a3d6d348a771678410d66911d43a27fafb7036420420d8b201f1caa204f4064c13b4a128c9c27c3e3986d81372d34d77cd32790da5ddbc0a6215f09905814171ec8be6d59a0dc64c6a335709788b4a623a1757b94bc20cfdf47762afab72945492af1cc594adc62d075e6e6a41cc9f48c6916afb42585beb5d88995c43228f629a90ab7f464d0c5eb58a769c6b11cca9f7332b4a461b1970f1ec2d35892b932a88f32b692b45f96fe92a083650e542f4406f010ca384e62d45f476b1c9e8302ad2290529b0432dcf06cfabbe9fc1a2c636c784d90710125eee440e57a202f6d21ac4d12771af09fab2edd99bb4316c8e4ebf3f25dd674ea44f5d6cad9de647cea73907f8ebe42e7162070a641abef0bafcc8988982d4fb8bed930a0a0a2cb36f1c0821f48bad0bd198adc69e4fc4efdac576196ab3f399844da78f239320ca31eda4a7d0ed541289cb3486b0cfddaa7c4d3a4a4fdd4db90be3ed3450b56cecb5a0b121e46d63e3187e4dd3222773c10dd8a793bf6b4ddab144e6b237ed8b9b78b99ff8c5a866edfc265c3488c321b40e0c209e2fea6e6ee2f526813fa7f766e9acd3b4eb0ad7a3a367e2135b4f62040b6c47b217d739e63f592f29ee712adf870efeeecb213094ac9771f7f008bf31745d8f880dbe3af114f552f4aad5a055ef3473feec67fc4186497e7b0dab83bcd7745a88880bebe0025e54aa2b41f27a70d1c57dd56ba52abf0279e4fa946a06b3355b2c0d5cc76396088692b6528bbdba5b85e41c98d5d0b536f6fe5d5feccf8604e3fb040d57cc3e687b56f263f6803a3617ba087bd8a4177b780f9c6a5647ce87976e12aa07ba6a12a55f5602ad625ee60d684f81583544247f913e3061300b21e80dafcf619eb78b871457cb2ae4c70fd9874845cf04c9e6603bc96e87f8aa68584231c9ffe99527b33e8e09f987d107fe9f993597832725ec67a47125025acf5ab45f463d3b819b9c165f6b93bc2b630f09a8dd5c40da67569d85c4d2fd6acb81dc7ea0a4051b4bb434425c840224a56d6dfda987ce521f4145b3e61c4a78e140131685bec6a0bc9e20ed4934ea6b53ac250e26a47c2cd23f18d5516b69f3a527f0cd51f800e062ac54a6de30e54dd24dd760d13cdad914925f50934adc699b9c1df991ea3428d28168057802836ab5b4fd8c45ab7ad55afdb1bc38253259193ec321c20fe108809fa38fa32435407293ffe6d09adcb019e3988e9c94dc30b262b8ec5ed397fdf169bfbbec107b4dad4d57172e6560e7e5c67c3e5d146a9f0bca479fe4cfb977a9721500bf41e600aa53bb839ba5b7eb2318e541d62e4dd269b7f7d2f07ec6141d4b4c049942d6081e4965b2c4c63238667d6c4fb44cf69970be522bee4b5e41d147ad2e069dfba25d911e3b1661706e245669ae53eb0542956feef14acfe29f4a19e0e383bd978e0ccd1d732ce1f2eaf12675e451a2fa7c6c3f16c99266e36b0c146fcb9d2c6a2990401bf164d22a3d3170099829ef3695599e721b51cae1537bd9b25ccf64c3e38cac724c5abc96e389c5ad20493a5a2be210797d15466ce73ddc410d76e1356a4664b8ca7b0bb96c4e89c9133c0ec5be9a37a5553983d674a68e9454403c4f1c720b6822424a0236145ef5e77ef719bbe6667e3a5aedbeaa6a8344d797d0718883f308ba4ce221ef6f97bc238e6dc6a25b4f7ca2d5ee95e6ee3cbafe0a483d2cf0de0318f77e78e6b4d6744de6ed4d006d3519155720fcc8a62d6f3df3fe12784d0effb4de7977ba889dc6dd14f01d6490c9fc084b0f43be16d7ea2e018c81f90d1857146e6dbed94f501c379510c83d6a706e021e241b35d4bea434af5e1c3d958c81ce23c5bed19d9ffd03f3c9de095ecb07896ce9d3de546445e859fd41a48ade3838ab0be821e7cfd1c89d75bf36e23c5104a3db1df62a4b17bf9de482cc517fc2fa40cacb58c27242dc0ebefc64a936c30a5f625a3baae5b230e79e60239df3ca69a16cf8d49229c8d4d4000610f85ce610fc3a091d6ac6add2c3a55a38a4eca72d297cc123eb58cc4969e37caa741132af06acab09ee60632bbe73d17a2aacf1ab6564e4c53281c5805cd3c0bf80f6214b0b44c08faa355a923494867673b7227ac1dfb4471c276d30194b62cec37e3a6b769cea1d32d82cacc281c9ac34bdc201eb27b017eccbfbdf1bd4e336a00c0686e51f7840fcab31d1e4c61b89d20348d73de778b638e229c3f0eab2a59b41ee23b3370b898c3112b827cc0cadc03a3f7136997eb0950c5fa52507618a399289d87d9e0455460c37b5e82e0d76a3c51e5661b8228575ad05e924a56062ff70320bb09f0342de8f1951b246be72e1365dfd4bce14a34f36c5167c6f4fbe518daf33d8c488c0aa5c502222b060310d0076dc5135b5a8a65c15a398af7ffad43d39f772a8f55d2dd6549da5e5b31f8ba6118a1e9995e40f6f6017060081a6fbf16abcfaa6e976fd9f9f2aa87127bce1a9867d00642613eef33ce740ecf5513d5cc9fafd68c5bc8e1aa86fc6cd3e97a38d7e3ba32ff686c98a24aae5cf3b781cd1d047e7492a8c53c9f8c37d74582e55c4412c735787db23868fc84141d49a2ef3060a44d27874e34028cc28e104ef5ce077e60d654a7f818b06c5ffcf4125c822e3e8929f4ff4b0ff80e0759dd5593d549afebde3cef2681a023a8de211a98d03e2395d0a018a416ab9b6d0254a0a8bb322cd216d75b24b960a8c5804b693f1f89993009d4da429143ba5c4f1c361ac6e97d7b43cef6da08198320aa1b0837b83727c29d384e0bc8e7f43c0ade1fd33f972a5030c8c530b8f33d1f2638fe6ae36f56b355737be802c0d076f94164b96e63bbb7a46ed20f10155d2cbb4c53bee859ac6bf72e6ac189f6d670e5ee0cb69a76b91a6668245d57a86bae30fc0f1d0e1eb3524b10217fa3b08e93958c1fb10cf7ace03f5dc304d6d3f00d4ef23b6e9ee6f3d01bc2aa0899168147d3c4a6910d0f1a71f7f5b8ead5bf73b0ddd6df99e0d8f34e2deb0d46b35236f5653ea740e3e68d3556d90af99b937c01a54f01851c1d3b324a3450203889350314a12da5d6a38c9424b1c117727893676d06ab1c9adc53e63a457d7d72e607dba8953da8306fa0f62824e62ea096414affa3e445a13ec4d0c5c59b47a78e33e3e9c4e13137714fc32bdb7f256e140d1221cdb5e87b6b145ab35db36520ac41859fd3202835d22463f57e97e4241b80289c2c24ee6e8aceebcbb4ccbf2566ba28916d037570b9a43e4eb433530ad220f237693c3dc3c477ead673ee3dfde4253388389001314f59bcfe255d5a686278d9bc2c02bec24099c19d4121c7f24f0a104cdcd1b2bfbbca46cc7a1ce185f20d46f11c8059b227bbd7e5c76e454acff126a502ce7164267f42815b79d0aaab699fa0e2bdf7dda0669479acdc9f4e8b63dd5b528e2766b8011ae56f7a0f1fb5134d8f26c17e89d42160209974bd46ace79d357319ba0e98d734c05f2a862c3793b9878f95d8ffea74a3a1363d877a5906cefc0e7714a4ef89fadad28e1e1959724a4fc540eb870be7c5c52a3fe631bb47d878cab11b70e4a0d2fb71b0bd2d453767b171caa1685f032e541e82c0b5fa32247150cdb9b9a0a326eae4974cb1206a7a733b3ce0ec0d4f4716b90fff4c3d4f18af47d6d5c94b1a5d70d24bb4ed1593ea5eca9d92593e5476d2a4ed893fac271df958d156e60c8ddf55e4d5db29493b1f3ac7f59ef819982452862448d671419c192bc826590b851461c13cabade7e981cfd94cec11c7a5ba5c08bd2258b125fbd567c22c6a718a645b11880bc0152678e4a9ab64ec6f039eb9d2bf010f975ca4f6b4c850606622370d7ec1e2acfb796c43de19eed03a383a318b32cc41486dfd44bce17a8511d7f53daef01ab7c36ac5b2219f720750cef58bdb1e6b37efe070862415921f9b3006b4491d9a2a9281ebfa1a44d8d7d84d36916c8cc539b23e6386976c80772bb5d23af84e4a4d934746e370100889fa3b6709e383c48eb90e400abbef2cd5eaefc297638d1267eb433e34cc0bea64e022efbceb0c4f802dd86edb38a57f8000653c9231e1dac2c5fe3cb7d53e67b2af8936722a2e4e55362555c1b7975fc2949fa9f40a538aa447fea63234b065b992f9a4f248f1aa56fb7b5d83e0cbb5e1ce26728598e90a5699cde66e9069cdc3aff9a106ee5d49cba565eeeb5a4b6a26d781fd0d80ad4220e4f36233927288162e119574c47b14fc5b6870bfce1f64d9d738b4546da71b4950f68448e2d27dfa38c9e8057152f330460e4bc8e34d8d42f5d4fe2105de7b1b0460b377279193b9f5aa02819eeacfb18edee7ce42dfcca95adc423ef05a4cdc29b8568609b8b49a8c3b4bb0f24c8ec55a60ad9992dc08552ed8ea71d72374d5e687d73e324ec7e425042c5a167f1ab5d21d03f07c4d2b8f98515d836242dd4e64549d67475bb3e0ea8e0b46b18b59c9209c529ca8391c9fc0ce033c38be6d8ecaa710c9f3e862d60160513d6c79354869650366bda8c3cdcfd74463029f0edf4108982bdcfbbb0d92036707ef50957cd8017c1364a30861edf488c267eda787f1009d57aa9fa6cfc6fdb36ce11860ab92f7276e4430d3a241ae371f10b11fcf0116871306d90b62c4d89f34eada801ec2cf6b3e065a0cd9f48cb943a4f360ff9ad3be2898b3d20fb51b9226b39ddc1d8e12af4a51269b4e2d1776f6ccb9515fe3beaa5e0734e41ec14ff40be4695cef1e475d5bce9e684915d5d7ff300dda37055fb47cfb6427d70ffb2cab2546e8de9bf6dc3924c95c12d450422877f6e3ce273e424c1e4c8482c8a7a4ce1c3d68302da894acfcaf5df0911020374a7d546d72e4be9415f3e36613dcc33c7455c42efbe3ed7cfe59542d759bdaf550a8155c0ed88e1d8b622dcc1920f1bcd397e4202e324f70d1ce2a0fa77bd62a32810fe322a21caf269f48fc02fe9618e209b14eed1a22521e16c5df4f387e9e9710284ad6cbce128eb41e3ef5fb1a1648b511ff6125cee88c3a0fe497583918285c49d853da0e0d6ca896da1aa1e67fada3ed7db2dabbfbc441ef68a5656e628d6d5bd6c1574369688497179a77601abbda2e0e07c151526d334cb1a1e787426d4b448c48cad4ee294f0b3f9d05f1b11862bafb8863f9b730191008b464eb8170ffee420ebc2b645811d9984ad4010a6c437b8c5f4719f0b5fa22b5066602e73f903f403eb5af939cd3e96bca6bf9ef60855808b1f61bc6a3de6a00be74343b820621cdfe3bc8439e9c23ff45523f269b3138b9a9f66501a3cdd0310417e947e0697b3376d8de3b06746f9ee2123d77c64f05e56cd161695cd03c8f02d589d102c234b8d01359447b63b58ec9325aac89e5a6d5250e75c577ee9663dd397ca2901836a53174a226a572dd18233afd8b8bfd03d1fa360bdf9b30c6f5c0c82a8231746842c3841fa92da8cf8418b390de759e042013d08a7d719cb48dd10cfc388dddb2d6aeca3994bb0e731acf247a6beed1910c99645a68a03d4973388c588e4d5bfcab1acf58b1f6aab122711523fb9f9d92dbb47be368d1186bee1ed0a74a19f62e072e19e5c6878672e3250ef355300aefd68b9c8c45ac370348ab61523598b731331232469c15aa9ca61498524348209045474fbfc6d8a1fac706c6bf1773a5eb77efa2e5fb491c19b3653aa88b8fe85d700f1ce4b4fe5e36b4588758b852c9451aedef29abcbe6cf52417d5df6af693f9e0c8c61d7c577a157c82d84dfdb29276633a379734210a8cbd0e8d94c4dab1c1966269ff7d6f322f77f3faa56b9cf7aa1ea453f1c57a08b653903845514b7de27]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 7683b6e2a5cda08e3284620a6c316872035e4fa21340b96cf47f0194c6d84eda

tcltest::test Hash_SHAKE256-3.35 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 534ee633ffb3bed9c4786d0ea2b384ae4a59f47dcb54cdd06dd64c8addec154a8b56bde351968b0d5547805a30b0946b509943639a5d489c5441a9994304f33c10b8c739f1d095cb8579a8a6ff2e632c8686cae3dc5144273ee49e1c8cb154e7aa1b0c1e2688647c1bb7edda5554775ab5c990e6d75847d9f36636fb011abfb32127957839e67e89e0a858de7b4a5a5ea50a9d52d598db1a3a71761eea68bc083c85693172136d589cf5f09ab939949e1ef0fa111c3c8752ddaa686e8fc2d34ec4dd902f1937b9531645bef65649ab84e823ae09f46ad4e9a2bb13d137518ded82d6135c7679e8e11841c8db9ca12977ca4cc124a74a4847524c7f302c3d714d3b19f99ed10284696891182fd16a96de8e133c487c066dd4b504b574b4ad08d7ba4e4adf71fa1555cfdcb6dc3ecb7823fa1f265fbac3cbf9928cbc8318c9d8f1c61c0f069f88210c15caa8c82bed59add7198750aaace81cb28b9c47a0bb6b04262b4ffba3d432f60204f8dddff7c0e4eca8670394e64ea7deaa5ea793a84979a32412a6c507cf7b5e32ae01a41236300375cf60c09c8500dc91098a3bbbf8b605af60ef4d498103f0fcd01ec06642f9e227c64f75f4139174e7a5dade190225147342be82c1cef68108681b7c1a6ca7526755b8fc1682c070553b7ec5edef2d9719bffbad9841bcd9017de020573ca21bdd83839d2b5af79782d15e385d45355848e08e16f55fbdc08d1855f4443b5305305898a05b219db01772627e918ea71da9ac5f0501b262fe544062400af020d809dcdf4dcd611984bb2372e1b251eaafe42b56c2e4c1115afffdef4bd0e3725b0f1841ecaaa1d5db17ee76a7e81766d6a0655c94c514339e3657e45ebf9db257eb13a4c4196a387cd2da56195a678359856357c5cc343190a05729c1ffa5469544d5f21e4343aa3195effa7f31c9a9023c2c319b23a871f9e604a6bcb78398dac367114250b493c008364a2194c540976dc8d05feff85da0b06744970fc00ef110d0eb7867455cf2d2b62f46ace4b0e1c0401e585bad5c4fa586e99930e312a1d2186608b07f6b8f9c788f38a1ad61a8db9b01d08c4ed5cc6d6b7e0b42740bb1b1486c3954e9295f0d82543d9aa9bcb469e1630dad6332e0b11eec356cfc61ea5767e4557b0cfe29cede649ebf5e27cc101a2b58e474da5319a5195fd7027b14697db5a24c6e53b78694a9a339560bba784f41f9590a35ed4c0aefd1ab0ec3f79293c969f0998ecfdeaa09933019d1444a888d3836acab76f35555d20fa8a05a78af07f18f15193a7e2a6eb8cb2ddf332ecbf65da0e3a4b5b58c32ac2b597a06c3dc57844f685ac00d1bbf58331c9f4ecb2267afc13688733bb970a528a8bac41c1fa1685b1cbb283486e4bc906e775fca94c577c12dbf782ce3f6062e1ec65a2b82cde6d9b9a23c9a72c42c09a9d12cd229f9fec850b18c3113ac1764410790970cc446f2c579c2e8e749efc657147f8ceaeb89fd28c777f2507a1ff39ce53008c56cd0cdcaa783c5ee5a4ff0ffa81ea0de8363883c670016a2486803b4c90028b6aecc934f9447da8ddf92af2af5d1b50eaad39214faf14611fe38bb1319ca9ce673816bdda8d6cecec1012a5f6362738046204339e91029a684d843403f540f5da1387efb4bf74ab9e6e48a265a97843e4093c2329b266868c290c4c3a16727242139f331e574f6553783f607423a8d508174388777faaa60a1a76625a9ca8c42dcccf307de1379aa9c25978b831139bcf00bccc1e7569894076750edbd47e7bfb939a6069e9d7cc0fe14953985e52d8c749fa7675100d90edd16aba347a4e0a49fc733b58dd9a6a04396179ab07d14c8f779f0011fc116d60cfd9ecfaeaa1ef878bfc39c1491a05155f445346da3947660e2d018b861f7f27b6452fa5a214ac32b697d44998b11db1a764892221d55a097206f3384a8236c1192eeabb3d10b0ea00d8a348690a2477c63483939b4004d837bf4daeb5e434cb8d19b6b21810ae0bff311f44168fb9c62056cb318303d860e3d8795554afe98576781c10cfbef4170633b0d34dbc3e2b3a2dd862959b3521fac52ed2a35fd5ad59dc735dc0561399ba43006c5b1a2215983c33dd2f70bb99f127a69d2e7e8991cbb964ff96808d128ff17675eb142623bf0455d7dd1edc374b52a92b628665e13091598cbec8d10ffbc18b966a548ac41308b7091b0ff7987de88ee3cc01fb0a2cf6d97bb5898ff08235d8345535f08538dbefe765cece2c0d4bc07cd76bc97b154c5d42f76d0a42c7b0b4d62832d7d594d068d939d5a0607e1ef65d213e51b28e146d8900cde09510e4da027ff5a133bb98aa7523bf2ee454b498eb1604145efbe172a47e3693660224902fb8e8fd2e11973d31afd5ba1605bf10cd422791cef336253bac31a31420027fe46f774c334b5e89a54ac3d2742591067a12434a80e884cd953739904ddf010197103b0ed1ad4128266104289d18dcd25822d1bf23504ff4679bd8db71b392cdde27aec597cc01915b9f110cef73e51d0de04d6014df0a32193679f50e325a2d10224cf0d43bf24dbb5174ffe9bb6c3ef1c720cde3c945ff30b3a76d91cfa9b7d39c80213551a5b5bc24aa822a53b4c0ba63f658fec385c4348febb59b0013e6af0302c739c19e71d4951c241fc1614abe3338b1e4324c299b27b15d98682b41f8d22f633ff03f0a9b0f547638a8f42573b1523922b9fb87db1782d6086c524247a67075d65229d8861fedc9036edff9816afd8f48bf36678adbfaaf69811b7021dc709f8b8bc1741c2342bd1e87a72f4dcc74f4b4a66f5110e1635a3a4b09440e009a10ddf1a865c3d5edc2d887cc4f5f526339f52418dd13c46767092e8e5662af779a3c2841161394697adff3c1c23ca942af98acc553fa01714644a02cffd625739c24941e0d91eb203583302a305c1d9dc60da4e76e3a050b888b5457c8cf2f289725c9b1c4c536bc8360d16802343bcf3dc2a111845a5bb09e2b9fb149b41900fbce3d8ed4042398f4f75bfdc05b9061475625b61ee181eb07d3f6abeb2b7f976a7c6417a3f52e300ac5446df34897fe9346b757c655f42545e30dca35abcf4643ced1eecd0eb33c25490f3b0371def1a202ba78f32e4ef9e8f7297eb1ab84a828240b76a7c75ef7e4f130e7896db1e4f418b38c3de0dec3517efe4bd7b13c37781a8531dc958e0dba6c3df5eda2dd42fa073723ff04403c3fe8d0a41043527eb410b3c2d41fdce82608aae8b8a7ad86244cc9b2cf0f0faed4c3653a13d873e88cb53b8c16cca811a854fc2272e29f391367cfcb166789a5d0ad10502ae6fd0f326661001d128c04c1efa64594ea4ed647c6dddf7db46abbb4046698fe056a4d75a2e8c16f88054c03172dc4973528e8220858625d7c1f5aef47dc76d5aa583da709173286938061dc9a17220249b9d9429ae3e64e0513fdf305d67c7a4c235a46f790f5eadba9c0beb6e6e06eae7e441a0cf4edc805e53f6fbd090c3471782de5fcda6e14b6cde34a1c117224c9e29328cd0feb43e50f79a5ebe8b89ca0a3230487581d9cbb8963df282b69dd228350ef5989615a290f4735f0da142b5050c413358e86db6058ad1e799939e04eed07ee4115e263584122a09a61716916fd9ba276022c592ba839686eff64e6b56c12a5f229e107e9518676171382ce4b061422d74790aea414934d96a27d58ec9d2b971b39dfa062bd0d171564bad39306c824c7c33644301a454e8f36d5af5b0c9d41fada40d53af0011403e97c01556c2228c6199fa27625c9eb973120529716f2273f6fb70ef8771cfd60f658e028c2ac9f509f3f51dcc38b957d05cffb1768c4c7477ea4c621debb23cb3fd3f873a6e1f905d897caea7024ec7f494701525e8f92a18b9c932d836627910a7fa2dc654ce6445a2b8605b800412c50180dee84ad29ec2af0ee91f19889510abe77a99a57b79aa88d1be507b84412ded5593267c7ed75b15440e5c5dcc999a502ff81b28d0d87281ee4defba755c139e1abc4644a6ddcc33922af6cad58c95e0fa2fb4a7758887d637979e0780695e5df5e2b26bf2b9fe5121c455284c76eba16fa6cde81291cfcfd523c6284d72f8720e8cd1b90972d8b71964e13fd85f83dcb7e5ccb54efc34b3f079d0e6837ec8258e420bf5941041ada19302d7225045d8f9741bd4d1d09dccaf222209ca96b6be9d8cc8e93a9c237ae1d720b7d15019df5edc200d4415f1603ba52659ccc1aa8462f3705ba41d656702bba3a88e68e7370ea4452a4fd41ab8bc8a439e2e078cc006fe6b147a9befbc2cc4f372019f97293054f1f19914ff1c595ae09f9b7044bbb03622dc631fa9c1867c78ddd1fd11fded748b2ccbdd88d33a9c6725b905bbba8921fb7a07af7bbd396a9ab1a78a3dfb6c8d7da18c379d2788d83ff830cdd708b9495fb80f564dfa6c16c2b52a4f046bd6262e19852b265e6b96d0e0a9d081ec6736b75c231907be480956b203534c9452c8065b5ec00bc10a5f82a5cc17a2adbc6e692fea029152f5cac070d99effbf09fa6d31beff34988ebabd0e40a92094df7bdff90d18d3fe9ae166b7553903342244cb614dee8a2b1e30e9e4ae8fe5e9f8e57f823363b50960d7b24f1f2b423bc62e88b4b498f3c1e3486eefbdcfd7f43132b39105ec20bd6e330affde7ca21c1d410cf29b0258a4058ab4f71673e0fcb0ece2f02bbafa60ed7dd8903a350d1e4e04c0e3a936a21aab7e24c46082e74b9d9a73654cd52d3b043e83cbdd5d6a8a82000a4e873bb76cfdad241d4405d32721c5d0b910469f96dcfc73756cfca1a8e0bb53fddd1981e2249e1dcc6a038ed964f460b421143ab99c421059921b99c091bf04b652d8e7c348d978977984ffa88daf8b1d2447e4eb6d95c23ef5c03c1abc9483428e81d05990e79b471a910edec47fb9bec4e88775777ff1eb3df671fe8ac03a693a1c26ea254ff0a4f430a3c233ea525da7fe0a9fe187052913c220b323cd8ff2feafd0bf2f99dd75b06ca69bff7abec3759155b1d43666c01f2e3182ae43eca78144b620d54ecc84f54affb253b766b8d7aa50f377127c7808418db353a8b84e6ce2c0543ff524976cd4974f5528b003744fe3adf3a5b01976031a8e3c865bb06692d6a596164d77bc1154b92d55056ef68bf6266f77686a137dc15a8e643d95185be0590239afec8e091f3a04c6cebf026371a7140e0d3484b66b6174cbc6c52945c6b9aae7b2bd8ac5e118020471bf43e13c7809f4083f74b6fee914425e074258700db7a7beb4574c809c4e9658365e0c3fe177b1bf538986643b96516d240b9dc69d50023b979ea6e60e1104e9ecfeec632a86cb9c386b2d839f23805be52b1bb1b09e7f912f06dcf9b672d78ea8c98a8e9a5dcc06b5c3b3455ce358900f4bda1790c9a6284438f5a3db9a96ae3467eda97a253c6594392190bcfd60746d12e3e283f8ff689edbf9cac7b0c9b056811d9d1205a1209b747e4e0599206fc6293df8d25313ba0498f158c0ddf8fed7bf2350aa2685a1931dd26680e121eae137f043c50369843f17e4340f49acff7ec806ac8ab06f4f43db26c075fbea4b87e505a9a330892f18ffda46fc1b6c1b1545ce98facae892755781442c0f04fc80db8314b601fc2454f9db76ce7cc1ba62dd84fb419c77d2ef39ebdaec46f56394c0726b449f49cabeacf0accf9332442f392fbfa84fa4777a286c6affc747ea8b3ddb969632f8881dc120d0458947214200d7cb770bf7e9decc0ddcabbb81f82cf9c57cf4e192c838df74ca798588ba63db8407f6f7f991e3ced518394a2cf4409d3807a5d49ef1d8aff282b3b07e755c723f5b6c3c31d551d6cd06f19bcf488fd03c1ef334a46bc5d8a4e13b31b0bbf46c0faf2301271eef8bfb8f1ad7f25be13bdaa924292c9dc70392cd5831a6f5f272fdeb616f64d586966999fd251e95fe85199181dabff1a6d8c32f53d8e9891f2b10f76fae6f60de9e1f0de3aed95eae5702bc5270e4ce29fe3ff0744d00e1434050bb95e5d029bf4c23d4129aae1eb8599b13df12249c1a1e0ef603b973632658c5201a3d1096f1487fd4d310223de532ee7e6fe906c43fdf392b4843cb798f1c780c48ddb6113b393bf76d38bf23fd8b03e64c1d12ac60eac6768b148f8a4733706865ed4a0167c85d242a3b0c39c80be031bcd5d0bd47e6c0be135347fd1747b51dba9755ce3b9cef43504191e50d5b8f490839c95fbb7c2ced29297c3cc5fd50128f015edf805ef83b2871d79096221814787284fb835414ea15beb4ae19ff482e2c53ed9efdb581f6faf465a32909817c53a889f768157f9d1f397abbddf5a55bd8b68a727c4a915b0ef2c3848fb8d468e30261bd326876ee8fc353cbd7867080dc52bec3c3c43052ab927a9d90d619bf6ea993b3a9f400c5ac83c946d05bb084804e10fa9ccc66c31afc1155f30b566b3dc5a7439462250abfa26395911c6d510cd2097dcd0a3c96a459101382019553987d26d4bd59eda51047aa1edf70afcec8082fb51e25b9b38fd10041035ddd5fc6f997cdea82617ee79b244a85ff7fe3fc160d0a59c6e603238b68463fca377711628298e485887e8cc65b814972e478ef2428e54494c96caab0d08afeeea983bfe06f9c73096b8b46efd72cf571e775ea5b0aaca9386dd76a67c07507713e6b199ae7415eb6108e5f3e1eb14fa38fc235e23ac94e59d72dacd9c16f24fcfb1767b971ef6f3581701ddcba7a20b1e44818e240a2fba01154b82d5ae01b37ea70f164960e6c2ec617c9f133ed2f42eeeddb83a5a17ab42236d68c1430b5c9125cfec4dd061e48e56daaa40f7446ffb69ac5ecf02c923f12ba4e1e76c7ba5b7bc4d801ce404d2ce8590a1ed8762b9043381f46a9ad0ae6e9c7670a080df2942e91c542f122c182d6c22f87155ba79c9dad31b8588bab53b0476b79526b251d32a90eafcf1541f1b8]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 86385c0373a23da9fd7a0b4ef38257377c8341767d8b781ef45f264fea3a05d6

tcltest::test Hash_SHAKE256-3.36 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex fb7f7928b7e9a3ae53c734be1cc37b797d2ae1b4c6a0cc4d2d13c3bf13edd2f5888e305c10f91f3ca7cd1448047818741ba76e06e50076f06314d15de18fc68a78b2e4d7d604e91e4244e343daa1950c1f2e1c33b490d3ba63f9737f615b7f10d3d5dfc09072cafb2912ead627a8bbea93a63563bcb6aa5434abf14e1cb7c430a1de6740c7aa8a7b6621712a71f452b67ef9ffbd83dbc465de1193f1990c5e92ebb5c57f0216f147ff57c06643ed2217e90ec36a9368ea966a12a19060c316ddb94241a4c91dc707ff9e1eb322fbf2b6dbcdc89274c3e28fdf986255fa42b2b9116d22d8a427d3626bddd53998868c3b5c1e585bac5674f7458a1f66eef3fad0fd1eb2421c9cde014dfc2b1f2cf6b64d74e9b9f0c5886a77a5cf20ebc43db8c7843d370bb8e5b08cace2698e67b339942c16347747c08bb60651ad0d0587b249aeb2fa5a016811aa9179d6adcf25ddba8b8d1119b8689e5d70f70ef3383bb1fc846543587e8ec90303a8bca5eeb569649a3798fda2e76c13eba98ac7e5c07d880d3e5a2cb7bf9f400a57619d4cc9a73c60fa114c8ca5bd81804f6aae947ede965226860034645d09ae6e0ebe6fcb5deae5bfc32dff0a584e36d2f7d2cedd9cce590310f97ee3c905f8d60b30e1215416316ff7c9827e07231618765b1a457ed72cbf40411ca6acddef75a01a2a3554674df0f5479d6990a8260a3271011e4e5ad3405e009613cd399c3415a4d06d2585402c05d0d833bc847090723a0ad0d2fe5470b25d7594f6bf05fbb1f85d338e1912096f8cbc445360fc937de1bdc3d36cb93584813f90ed1a34b3be3b59ee58cbcb717aa2d0041de3d0f99c8ca25f184b0a791b947f6f7bf0314282984a054b42744b6f3b9cdce2b6f6ac1764420d6b444d23c0bdba9868ea02924635bae22f27157f967ea932698076923690243392ff8c1bbb247a757cafb18a513a30eccc21b4f437947e6f7bea56954138d03b5623ce4954f2466d7fe84611edd0358bead95b949aa4a4fce09ca09c7f86cf8b7f581c95d34fa7e8383cc711601f502750f6114607d7a13f603d5c8e39a0a88dd5487de77f62244e70543e71f34e0928c721dff2c555ffa2c2759055b7aee3a72099f927a1544508efd7b219ee85e8f71702cb801d45458cd0ee46d841d9094327f3983d814c927c7d6e2cf099ee76fa0840e0d957cffc65504d85ff1f48a1c8b3ff631167739413e2c1b3e03bae3a9a618423e3bb1dab940b3d56b29825339e8c64618b9bf1d235e5774fd11ef0bc3fec759e879054da83c964bfd9f595472d7acb9a9464edd44b503808a988da85526fbc58ae209f1299526acb5c7fc266dc45dc17120c8f23bbe9aee751c2941c39b300593eb124d93e6df87f237bd41715b43edfefd90146ef797ff3b11447095e80eaaa218c0bbadae4b6e51734f3e340909afa111468c54dc75335b1c51bd5279e22523df97d3ad57d4b041ef14551c3a197716204ef293f9dd3b33a1f3707fed44f597c3fa2e3980160e421f9f5e907afde4bc8f3bbf92cc1a6773268c4274aeb19c8c4a8a13c89379c8e09952933748216902d27f7bd7cfc758983e9e9be73ac2aa6ff7aa2cd11e9a809bc0d0ab873e1e84978e9c9fe9616e8ef13eacf53e1dc27fb14fecf1f99dd2b5d24a9bfff6a96fc7d91815942e4d7a6b3ccb39d6efb46bbcfeb7c4eb987dcce9328b17090c267f9346037d014cd0758dd948b7c972bb18c2b6c3c472344ae39b2af6c47f4e41d8876cc5356f9b96da57355bc9457d9e442167f85e3e6391b13c2a32369b23680504cbf1c127b10d2367ff68c0c356ba886990ca14989cdeb04cceb1e01522257fabd21db2d213bfeb2085f440dba4ac500bbfbd6a39467e5b6d66fa5355d0f6c2dd2d8d9cf73a0b9c217782bbe6cde035784346d169071d3ceeb17002d5a65859292cd5b1efaa8cb0eb3298b48d68f2a33fc9fadcc04527bf710cb7612d18b6bd005e8ac453dbbfb3de45aaad27dc6013e2c25e0ed7872a5d74f73500c4aebe6903312136ac54212f8b2f3d285ebe9511d1bac4ca074391b16aff7d7424eecbd7a2531d7b618a3d9e626dc4989a762e27bd11d3b0e810fa45d393f50dd64f6ba35e22e4150c04815b047fd570539977cfe5761f35f265c0754f33306041571a36a72f29960459791fd1e3e46212af2e74eb45ebdbaec880da2e7bc40e0e8c541c0de6427102dfa1476b1885c0700d9ea14f0fee0475afb7eef1dc04599655b5ce02d6b328602d865c30ac1e3dc46b64ff81428a630f81d22e59b285e561499bc7167f104ea4b994d8b31d321cb81f0dca127c4559a4e57c02a6bddd33f7ee8281c95dde36591a494762ca45ff93bef5ab831b936afe50f226695c6ec7e2ab16989bd17181f5b63022e051ee491fb1b90e43bf1919744ae0e421fcaf138a05a475fea86ea3f313d5e58c428fab94adc48ce4b53ae7af39d4d6513d32998694d8a472114a3ed9b9a729f6fa9e799af9a481e6cc7d47f7b43a77978c8ddc30cf0fae86ca88a5322e204a8108bf45bb2bd597ba3354cce6307e323579055e411ad5febd22ae6964d7edd1eaeb56924dbad438dfa855f903353cb0db715d92101eb80f75c8300e1a5d4c5a7520f8e1fb3d2cefd789f52ed748e25dfa03eb1a2631126b51099205ab14d84eb0381aa71c195c273256c700cad1fba401bf32490bf8919ccf8558d29f951e194c9f307458d5ce6960ad20016667052d92e1c7b139eba21e51c9f91770549a547ac4debc1a090030f2eba493227e8b552e4a2ff52860c06a88260726c5e9b98aeb5779f0d819ae1859a0d948979efaa52426bf57602e78fbc347e792f8bb18271eb596b52b8e048a154b12943e3edfa815260a8a697b386ca3ae3eee914f22b3857dc96b8cecc000b66905087ee4a6d891b695f0bcfd8b1799a7519c182c55baaffe66a664ac5d06ad791517d206fcb0fa56f61cd31bed8725e1e41e05b94d96fed602d85b4328267b09b734e04c2dcbef958f71345cec55d8ec5b06d2ac66e302933283c957ddca9f89800221fac683b1e0e6905946e3fe13052ac9174c3e295b945a3b4740da7d9b76f3e20fb9636311c77ffcda5070da64eac7e74c3f2fd45a780e614d94aaa9ef60876711fe60f46fc7d01900002f855efbd6e3d9ebd86e9fbcb38854c9cafa1bc4bef3c1306bb22c507b6792ec5c8961c6cc3158e8b4728bb0de32f566b7c891120f3aa605c026e7ffc67adb6ba4510dca1c7231ac506abf1302d397e1fdbfffd6fc8e38d52acd232465c572048366c3744c090cad18c19a41b5fcc4d2091ab8920b70e224e80f5e7ccdd9df5d66551353ef7832618a11bddb6c00f4ad76934bc1b0854a7ba4780a67632a7bcce9868df75b425b7020c59a3e99a2bfdaa2a439f4803dca5fdc91a752ca29efd9798593cd23f9d04f8977afe9c3347ee029b7f388ff0cfa47fce6c5ed676aa41992dcb543ddf1495600827f6b7d58ca648869191d916542aa81e1e685cf7f20e3c1e66309fddb2f3a328079422c622ace2b120b20cbe94c1e080d79ba66a9fefe835d3d7de819ea52abfc3dfc64e30883ae4d5a11230b6f08fbe3f009d1ad8690538ba51e41301335c9502e089b7dec3b6e95868d1b4e3401d9eff9e274ec606fbf0c2a797db0226a0716d9d544756e4c087500f33924337f2e9bf7e2d4d914d322594e0e121ca05601dab201048bd73bf85659c1f11fd5f766626a6986060c6139fd804a92c8058035f6571a3003ef81bac40197c7a3a4012dfdd204ecf5bfa0425351cd7454da8f1004396f7b8fefc3bc4898d341521602c1a8cf439e2ac706e81532f52b4597b91c8ec99f2b728078995e7012e2adb492ee1da2840e178b0ba79db4504c1cb5c4d7e09817e47e29f6ce6037c52018f837efa6fc64a13ea434ed67566d4b4ccd08cec415782ae544e4c80850688e26694862df4d541c127b0945fc89baad48361b7d83d22e535a89b922c14a7b8148806ac44115e0c335a7ff2de7deb6e6a1996340ba5ea9124030ea4b05868cae01c615a056d6893b1a939d2193b5f08beb5f76c4d20b86dc38f30ebd4fb50a68e4a2bf73ab1fbbe833c659bdaabfe6118800dc765569361597488cf62a26835663ceeeba9841f75f03c8bb5e775d05fc0a25fae1df0835530da9fb920f7b75daf17319d1b8fdda041d134880840ddebfd4276873b9690318ee8fb0fd8a24507b3067d77577a3c27bf22e77c07b42eee1988d8bb88efc3ddbcc6263a504b1a1cb82f59e027ec45f2af582cf9ab7aca4e5a9d0fb3cca42342029da8a351993f8207ba4d40518dffe95c9a8b67bb3ab9f509a9a3d6cf5cb846a79507b1a234bb23e8d0e1009e0672f50d118d2e009b04c96dd31a8b58c08bd2f5d5cdcb0dc596e5a2999e86d6ffa6fc09e5b9b64246b2b4d044fe3c3178a3cf3286815b58f4d8b27f3c0b3bc11fa4e7993d976748e3cb9d7824d650202b0923a7cfacc84c688a71c5e1b187260f739f0541b0aadc19586bae9a2b2fee81c3b89cd9d57ab1cab40abdb216d3cf771b0b951b8be5c4905f08bace84416324db7459cb84d94fc15c64afd4c48582fda51291f0b182c9f1eb5be4e969ed46b9584125ce424dedf68c69e3724307084c189e40eba8e7b3e4014c7413629e61eb43064a0a953e55104b00a0b219bf290a7c96eb31fa7e4a10abc3b173f8b97a5fa3ab0ea608144db8a21130bcd017ace0d9e1daed2ead561ef0a8e532b2a75ac08017bacb20379e969785d9b9f0755b7538695545cdde9eb5d9e3567719d0c9b4e33495a0670f10513542e4d1ff43fc72a015a4615e78eb7e6c5d4c6bb39c8ee3d3e9e94e64056a928131992b87e8587e1acd0e6a69e30521b3fc11360b7473f7581efcfc9f7f7600853a3ff00fcc3742ad79dc887786b445b6a9ecffa6be3e957abb18d3a1e6fa4448461f4720576165610257e20fcbc0927c4d24ee0ee3b86742a983fbf1a3bf05d23b825941f19d903e4ec4a1b919f0b20dce022dca4ca915b7ce859b171c8dec2c03ae4efa02b46b4d466eecfdd90d4a7116cee16260d947e11368db9cbb2ba15d84ec4dd3f26f9d95d29cec6471df05b00bd0355e860fa4c96072e407e763cb6da8837e552994cf1edb95c9754a2e88d3974f4f472815d4769eeddee007fb126555bd0a0710eba8f147a2aab9ccc27ee2a19557a5adb180f0b31ff1b085bc204c75e019710d3ed115000bb7b65f638de310e876fe7dac5040895143fdc86e9a2aef35d21c8953f192ec181af66cd85de0ce91d3dc00cdeb6d07caff5238d92b07ab045e8fedf3b171f511f80159ea97e0c2d798c69edefa7f14d44b343dc479ec9195e5529fe6b9b9023d7c5d9061e3ecd404ea45bfa5247f9ab54f2d3ff92ce0892f8eee09f4b072fae5cb947705e80bec5ff3e0cbec127480b635c4a63eedec7b1b81ea91e53fa5c751102e789d4f45f22fdb1f2a796b66ae1f2282da5c64174fa2e7cea1800d5950c971b1faf3bfa2cebdca8a4414d85e0b3840ed431b3869ed0ae823a08ec3967d9516a765cde12b6951e7aa818701628148b78f4a4211ea3d9bab70f6d7086436fc289720f45de7a9325a064a998d7df799aff0559b99a3289f593d0a2385cc6347cf0a9530dadf77aa4c26051125b456714f96ceec759b945c1913463ae1d5ecbf32872b480019bcffe5931cb870118419bf0b1bfe50da6b1b147811e4c588b9a97a964a06799f5e7a4cd4f556179b6ad928d7a699d069932471f7d3e8d9ebb350cebf5a30ea794763aa71fab3c15af0f8b280d5849d4ff6bf5915f50fc409c0fb578bc38ffead5d0226f391961757ffc08490128960947a34f45cdd212fe7c9f13d81eeeb5b458a9ee9e124c8c0997d77c78fc46ec14109ca6953f4e6c18fb77ba72a410ca948b4811ac31a1265285466a20352fc675d8acbe182a225230870e1bd0c25b991bfc5f1e222db3aae0d6ad53e7626fbfbf0e47d837250a8fc5ade6ba9b103bcbab1a4376984cf08424fa90cc26fa7332403012978aa6435f58ee86190a141dbce26399bd6745e46caf6f75257773d6c8b9cc816e7b24895b6aa750a9d6249df72276c645177f0baed0b3ef12515506dd8c6218ef9136290e6b96faff57e818f50ba25dc0417ed2d5495652f53d148ffb286f4d7d6541ced2dc0bd98c37d53b510ea4c4915dbbd68a79c54550a338eeac1e6293aa5fddd7635c9470d2de526175abcc9f4ac4bc8308d29f3aa71c488f6aeeda9ff8f970cf1a3dbf5565b40617fd43a8425f2f07650ae422a78b10b9fea21a35a6ebba9132722ffafba76156eb3296b66240e51308eb3f2e105f1903b90c11125cf51bb59e0583c5d82a6edb47bff57553829f75cb4443e009b5adcc5ae373ef2697b5546e3ed9ae7f7124f9ba1ff073aaa6b68648808306f801476a30d2a33aa855f0042fa8a21355ee3c38bebd082fec2fb2eaed3a8cf16fc46e63f7543f6336b2543b5ebd7da2f0240d1ec231ad087c802d1a45ccb23dd5918b500ae2a917763f6a7077f7bccbe2a5202260f87fabf04a7d7aced1a35adddb36a4d7f860b5db5fab3a07e1fffc81d41dda178bd078dbe13ca304c3d0c6cd23f8d90b1006dcca858efe9b06a7c362434ebc62564ffd83d6d319742dbb0047ee3a7300c3fbeae8539e348dd054af18753b2fbe025eb8acade9549979c2a5b2ac83f9558ec06ea94c41826cc9771e08ec7bca96fa8d28aad8e7dae132a815b1d16dd275dae4e681d2215ec46c9faea81b891399b94bcc02ea4712e7e2abdeba1f4094ee32e9d10687a62001343ecf9a74db7112c91b1149549f9319f47e7f2fc8a4c72b113fbcabdf588ccfbac4ff449afb89bea49ba6e29a49e1f3f27065a77012dfb9006707e63bb0eb6c6ac2cc2af061c3e9d61deb633dee7602672220a5a81355148af0514a3f37c283bed8a4d217969610c8426d4fb1e5d5c1cd144eaed31eadca1b5c174c5c55b892314717ce730296e005898b0c98d867be9eb72e2783ad60463c1ad86115a314146cce9374854e3cc41853f33e553ed26546ab6da42c48132557acf33ceda89b86cbbfb668d0d20e397b42043969717c327f318ba94f672cc40893161466de8555d89aef2ff82671bca8d45c926818ebc28319f6ab6f8]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 8bbcab616ddd66b2efb440d6fc1d44f75c4d876b470c4d436bb728e55064659e

tcltest::test Hash_SHAKE256-3.37 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex ff76619f13a0f3fa12afdb4279018d6e6ef2894d995bd2253559a29b67505cd2ce2fc2d75bf5683d63746804f25458c0635c79f62ded31ca00cfbcd711311e5fb2ea5ca42505eb95b27d69adf7458b19808b5719973e93a85dce7d5f1a33bc97d23097ce19d9654c275344052fdb0ec2ed09897c7f56de0875dd4dfa2b5e1ec35788db1cde78bca8ec7d63d4431ec903d35e79e88b3efc327084946fecbb2d2a687b90571deadaf226832ce2da16a5235a108d2466fdd36e754bba870451cf162e901e477d38a57100ee09f79dcc886ca9a92ffab69b4d04acbb270a1c28edcdd04fedb4a769076fa04461da34475c24e9b1c6302421513b3e5b43c0db497098774065664285e7322e109c54468f079441aeba8f5796c65d53b37770eabb3ebf4becef24f7952c03d3d7212d7bad7304da2a72dff80296b0124c29e4f086418a73daf1b86e9fc02ab6235a2d7da886bbdbac58e8ae6ea87da4adc3e296b35f411892d5e84eae8aef017bae1bf1882a036dbdd37122e1e40b315eab338449822b619d017d3fc7729ad96885c182564622b8e44b44fb6332a4e0e84b9f615091917782df3febf46072687148e5d619c161e3a92827e2fc7a8ed9d209edd5d174bb81c9d5f5f73c3cc0d61e5d5095d985081794d3e37fb5a41245a44fe78ad213f1a8fb4d690ea8eecc4bf72dca689e795f7b2eb240799598784ce78453255e567b149fae61d63e5fdeee85201bf77185ae38fe2e0579a43f0815220ffa517a25a0ec3d60a6f708753ee74f9f0ae959913c758cb0fc26eb7f0ac9dd5aa4b43068aa595dcb001a0e19345fdd1060e65f85525b619eeb297141c58fa1cc18f68707df82885736e75734077eb8dce5988a49381204619b293f6e8290f4cd20c088ea8890456c1205ebac006b676c61a4e2c636c1fd62d4cf5bec89f361c582ba39f9ecaa1d725a1dd26b674f72279cb56fe29490d5085dc3cfa522e16d1c078ba41d55f997d1d7d61457845162745d713a8699a813ba00aca37f9582a23b77dbd13c09a43bf151d9ba5a9e9abebd6e804a9b8e313fe28332dd6429fd87889a54c63f51d4913a90cdcc5bfe510e69958ba707bb52e2e7affe873b277ba46c389c8d0f75b122155b5b5041ed9fdbe09b3a5ab4683483314cb8a8ecd7238250185b2e92bd6275e87b2b50f6b1acab8948346a88ddffaa282208495e811ea89a033aafb27110121cb9e4d361929f09ce6322df6d61dadf34f894717b6d939eb4c1e01a56d8e2821adb2ee26adaa07a16b6abc24a3eedabbd9807282ae3abed041af776663b014c49a9b384f9cfd988ca07781a06ba61952bc80776532a8e1cf4d624ccc9e294f810ed18c1f6bb6fba501f30ef8b1e5e26e6513c64de8b63b3eabc11236915c40fd96d08a149e48d9811c67c49c0b20be456fb50f9b44e523b509566832d1cb9180bf2292ddb9359ab75c304318dbd9159e38de83ebbbb853b8d29caf5fd3e9a9b0d44236c920ffb7ae5e06faeda89180df6d1af39dc19213b0940e67fc1c58f20492b9f6757a29c8ec7e366c98f5cc787f58d4af400b251c32ca2622c61f7c230266f45241392646d84959089957fc64f4a8a64770dcc3b5c5e16e501c61d58520cd7bcadac287aa185be96f6d23a3eed5b90a3c8edb0078d07661708d67e7c0f632dad0a0cac07b231261f182fd457e99267aff186a6dedf8f58a2487a6454ee9437bf4119663226ef94d4f8949738cc56d631fac2f5e8d95eb52bc99b15087705be9b5cbd9d248729d25c9deac90a1e0ea6d1e987e74c03dc445d941fdac1321f89e862de9b045c46a6610f17b3f465249f36c8bfc233e572cfddb0f0fba7a84a624f5c66a6fb2eaed98857059d1f2bff89099e51cfc408861c5625f4c0e160ef0f78513c073184c8337b7c9aceb2f7072cf174255628f382f56efc157198e274590a494806cde6fe7be286c090d652a4509751239f862ecc20cd3c3955f3b74308ae4d72eaf8dcb77b647e5e29b3c33ebca23d33f10742ce651ced4ab51b66c2e40b63a2fdd9ef5cf9aa6b5ce270d23d39bb413d96d3b6ee8e03172fd937775bb4ca96c08599a653be5c55a1033607098f8a6329d41112966129c3d0097073754292ebb4cb5f8a0592214417d42ceb0a86b6addff4e9df2da837f9158deee177540c6c66175422da3ca141a59d7b05a9e5e827473d84a31b29d4bfe6acd849cbb3df20bfb19ff63b86855333a54add4c76c7d84af90ae9c7ada91f2bb05633d827b40fa5e06a8e8e367583aa35c2fc5dfffcc8ce6ea3369bfb5e20ccdf92280678334201edda733c1518d8f0950be942492effbce67514fedd9acab182b1afbd6d03c0bc20192caeeb175aee0d4c2c651c0686fda7ab0a58190526c3e0de5165cfcd91bcc14f414b8019118ce5ad4e2c402c6477f96ba11278483be8433f95666638beeb18a33a7a9bc706b36457d6017c47a11426dd5f92c20b1209f1fc0329faed4e306d3ea0a506c94049d3724c4b99ff46bb752bcf41bff5b10f333e2314539349720748fb3387c6c7377a25397160fe59542d7a768736af22e0512d7e9038d3b89b2fe8d18ce767a466a19924dd96e9e5c697f5decdf1e16d6693f09b067355a2922d46ac18ed53debd90f695f6066beffbfbc18e79b632988741b002dccac00f3f498b133e63327d238e631424772a81daa1090ef54e4aad2da2943c7c06bd078acbdf8f690fae8a82e5082acfb0cea24bd0f3e7a781d2b33fffc5d04ceff3935bfa69a7febb6d0bc1db0e5e5f7a005b36d1a7a0f91672b3a5a06a46b64c0bba9a1f52e3662d170bc8b99d393c9d68b383ed4ec152d7d1b447cdac2720e7ac852f82c1cb092e558f7fc7dc42cfe1adb21b6910d2198a98be0dceb3faf4867ffa026bdfe84f85cfa1ce4cf4017e0e7760e490145cb8f86ed9dfeaa64799f22b24fc22d4c1a1fc2c489d920dfeb2eb70c6c7a983e796e9fc0ea56bad9777f3590803eec7de6559148dd4df4dc2d4413eebacfb84f91b25ea644797f270f650b1b00019e0c8056531765b7cdfd44ad889d77ccf401caf73dfe4adb79a5d7ed3da23dce94906e7e8280e1ab1e9bc7e78fa931d6ddfd7ba9c8395bf12d0e377427d697da7272075aaa45af9c59403d6e93826791d88b2a4697f7f66f2ba8c4966418bcd9aa59f15724b64e1020730bcf2ec9877276336d59f7baa889d80df5c07cf90b30ce80a3109c533b8ae6bcb975dbef2fed299eab6091e1f0e5c4b6419edce8016431be93038bbcf6812e75ccff0553bf8685257ad6e11e5e17743a4e6dfe763e08864c57ac5d541d776a46ccc745a7b4c2fb5032395fc04e7368f262ca6c242f823eb247778ba90ef21c982f5b074bae270eb78814785850ae15872540a0624465cd9918f1b13c4965d7f27b46e4c01a2721b3e2d4c576f31bfc511c4d35c12b27b56912a7487e6b670eee270748a57747f6edb916c18ca4419ff8ae6c96b1324c789aeb04dbffc36a33d3b928bd5c540dd0cd9136f719e2a372d6521b4dc2f84899b6f896c6211fe3e95ba807bd552eed51cc01d1c09f4cd61782bdc5b566eba0ab45c1d99192af6891de8a30c330666afc716163c89d314df0863818782d9ae8ffafed49e8c5106ccfe4c630697e990b3346566979844e7f8049577000777496398dc1742628d164e5f6f2930a80454298c3474f5df4e2ef6944a268e8f5171cdb47f4c4c44e70e5869d75b530f5e9b58f60caa1e05f9d11fe208f6f9bf6d0f14776ddd85d965d632430e633774ff4b899b746fd9b34db9bc135a4f0841d50c81083030b5ca125624179ca7a47df04e04a2f42bf09153cc1452c59985bd914e5c8f50afa4bef377760a079162d5388a11341447294612f371c5d33c36daa7bfed3653c0195e121f6f46d9873822dfe9f8795d294d7b921719940ba0e34121467b23c3cddd52763758f399f3f00dee520098563a24d7dc1e55e8f52d569a06ca507e273db94127a87938d03c503d6cac72ba88e27503f7f26de91a4c568c5f35b270087872d32e581a3e05ca215b61e19606798a0aa6eb79a9be0163aabf336eea21ede6d3b19231832dc0052a0ed6d8b4a5b398a969c19d519033dc1bdc8a5d3fb85eefa3835b1afc2c8a5535ffd17914bebe761bf48044ac86361d718b6deafb5de3fba9f091facc63e92208d55dacfe7a208a27ee305803c994907473e2fd643a0572aea13dbb3cfb67d46d397f59b901633e9700dac09e80d49beb3df47ec4744bbc7a3e6744941c8cd329d341688e7a0ef932d18564c5d47fa8a090a85561363e41d56e157d1ceddf87074aaac1c50daa22bf0a392cc0ed1c1e5915086a84a6646987d9514e1b97e859ce47c24da6e4be230752fe00d6f23365df741ba574ec489d5728229fdb412faf457192f27824d263d252ddc8510b4de5fa54e9ef7b316f430f039158a2143df23671219985f86f4ae7b1dd6c7762f105715d7b2edf9d63c57511a461b938998b67ee782b13861c40101807d4911ca7300e38d84ce957ab8952fb65a268d4cbe0a0919d8e6bf661ad132f61e9e664f7cb978d082fe188cff96d68dc04f6115c5bab029aacd571c6f9b99df691c0606a3fd50314c10f57577b9001106dad16d3634fe8776b981fd48cca0bcbb5653887f4904303e8baedcc79816e09c6d30cb85f53eb3ab5fe2712cf0e20ea3e1e15d65290f5dd8e2c71b65a0956cff8b11a94b980b4ed714db108284d855a12331fe0c29cc0ab9aab0c9b86f0626bea8f69edd89eeb9787cee73f004ee1231bec7d2caa7e4c74f480e60565fe39e483b5204e24753841dec9ef3ec0dadd4e3f91584373fc424084f3267b5ffb8342ad6a683c05cc41f26086f18dceb921e16869d7ab86df4a17324bf586dcaeea8d4ff76941e36cb1b2f44c16b594b354e77dbd23ee49ee0b02e6d27aad44e014ce50a44ae4261e2e898265853d788f1e6566d5639326f32e0888cede78ff59a90d9ab934ae36a86080f31767ade41729650bf9c02384b45a320088486f75e15250147e4e257cd2f19e2dabe48e3f111aee54716225cbfb38873648e11b0e40b7a1a63bc1d35e6686ec19692367f1469c0929847021628e700f1256d003333d7f073837b440452aca709f984dc0627e55bd727c12a0b335a9d27df93eaf4aa2528bb2bb50f29ae86234a8818921fa81ed12179f722925ba8bd95d7a53a8bd35da33fc0fbc73c366f9401a6d001321160d100036b54420e4c02b9c213675f2bfbc09ff7b214b2a6d359adfa2da1d3f075dc0158806790c7aedd02036109e5307a315a147a70035c4be4cdd693ec8bc1a84293fdf8b515245bdd1d30108ac46d7355ecbba751c4e353d5efe09549b00182b5364816c53580dd5359bca472635f51aec661db427dc865ad628cc451e73c8f9476db7d2088799e00462d8f594872afbc758b88ba74780bcbe45f839d97df4970c43c9e5f647b384460f74397ea43e80f88bd32326f6eb0c1d3cd657558762acaaccffcca7012169048ae63b6df4f95086e5b6a42b538ff1fcf5aec819f7dbe12af2a1b0a31bac3846bb7624e9df23147950a9353fc533146258c8b4ad3727de939cf6b870ff1c99128a6c1c78cd8373d9b3f3fee9b4a11c574d6b429aad0e4aedb2470d9813393372df0f4aa426e216aff5dd28b1889fb2e4bce09a67c358cd411bdcd6a3c1cbaf6da2a8d7f45208a40200afdb1faaf67e0f8d70e59ce0cc1096c1fd3c177099b40bbb7feaf0b9bdc6dbbbb13ebc806e27e2a8604bc26b34bbf48bf2677e876ceb5512dcac21c3c924410e2a7a0f73ce5665f5fbf360ce56766361027e5f700cfc528f07450ed9f3653ce164b6a0ece0b29f5d8806fe70fae7ec2b77a94392418e0b1b47dc40610432d41ca51bf8516ae498c64eab24b9eab996d19712b155d349869ce6993dc5c53212a836d19e0b3593581a960b5b11ed926a3cabde312189d7cdfc2aa58f6bfb0efd6b5fff1a830968e83fa84d2ae0ca1b6e52fa384b5e2cdde8215c28bdbd716d9e4e67cef520ad0b4f1fcc9b1a8e4afbacfcce4688748406ddf5c3495021eef8fb399865b649eb2395a04a1ab28335da2c236d306fcc59f7b65ea931cf0139571e1538ede5688958c3ac69f47a285362f5ad201f89cc735b7b465408c2c41b310fc8908d0be45054df2a7351fae36b390e842f3b5cdd9ad832940df5b2d25c2ed43ce86eaf2508bcf401ae58bb1d4707828ee2ab72689516e5301c202693c4f7775788b75993793b071b6332443fad7556b5819853d32dbe9b01c9b2a66f1a340003b79191966a77225fd9061daf662a94df532985872a785df15cd3bace288c7527be24e096a5184cb55afdcfd73acf44f6a18792ed54eb32e71caaeb18b4a8e0abe597cdfbf0c78e052c3fe11ef00c6ce1b3d9026c72c022cc5360c0b5873048767412e12d142cef3798f3dbeb52881688d1485b6b4e9f3586471cc20d69cbb672b3bfa294d9ee7734e64246a826ec49d343fc2754ae2e74fe4007778822213186eac49a9806b52ee25e53a8bc35df0eaa501ced8e5b18e61c8849698f79dbc19a604951a2652b1d2a484f8c8f470a6cf542d036811d0393c96609208837a16e975e774e18bcf64bf4eb5d778924156b9c5f428995bb9884eb216f23dd241a41632c751964d4bec02990a6f31293a71387f0976e32ff7ec06b02a5faf408ef41e7126c3aec752c85af7f5187925d686d9f3cfa6dc0af5d4f3251d02d37abc8770b5884391a66e7a1700087bc714a0280ca8d910fa794df3a27561b440cd54be9b845e49f5571981c535b701817221a54f12984db4f76aa883158acc8dd4d23a1d422b5f4045ce7ff3fd73325ecad5bf2fd59fc5a211d66413aa1ab4111dcf6a748371ebe91f07b511ebdf96b59b36a61d46521128350bc6e29774135104a6d01fdcc488763f5fd1ad755e971c4fbf2a960951a8dded95316e623962e425f2fb9da295bd6e233146252e72cbf964e99d3873110539b7ed54158ecd1b30fe2e5d7c6967e347672693277bbe9dd387407e633802aea2008e7f7691c1a4ddf9d3661ab5ad9288779a4912e1949541035e5ea4bcb91dcd73e334100fa9b821a56cb6170be953a7d116c885f4874aa8859dbe8b75a6cb126ea612605cd79dd28d64bdefd0adaf2c002691ef291916a07a790e65f75e4ef77d219af61dedfe371e55fe13a86cfd9b814445bcf3cc819f4e8adef2b64212031bf02e3fa75f31e5e4aaf710f799d76ce0ea547de914341b9e4d908036e4acbbc7ac4cab9d9dd1555cfe296642d6b5168ba33eb08d72769bd63bd3bcfdd877980c8086c8654c650bf3aa05821e862f3f0de97]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 02abc87550d9cfa8aff504fc39b31c66878683efc446ff9de3ba69d3a1483464

tcltest::test Hash_SHAKE256-3.38 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 33711b2078ec0b6b872c3e3a237c2251d1dd04dbdcfa32029b5e5cbef6e540ea2770879dbedde9b7e83798baf029dcdc06b9fa5a40335b0ede62ea44d206beca8083f946c2d7f0cc2fce8cb09d79f099e4dc5bd7e5e750f7cba8f59491beba70c5113ac38bc066d2e45be0c43053a5b1f2aeeffdd4ff5ae4eb9645553bf47b047e8213bb218294f090455d9db39e444cb8987e711464bffdc495a130d9904aaf333d49d68d03c24fbaf4cbe42d441591bf00cfdeadfcc76ce00ed3cd72796f986daca7bdd62d3817ead0f240a72c60a98e4fabeaa8b1bc56c767a1d30e9932e9b336f41804e63d6fa841995a283e6dbcaeeeda3d0c6ae4e6ff0ad4ebb5d7dac78e43f78e20181a7f7daf8ad9b86283f1a5432480e10f8941125d34bc701bb15c853b79c830aa1870f0828b665f80ec70fdb8515b2f87f19288ca88ef464dfdd02087426e3f847d6a8a2265a92680ee623db42875ffbc64ffe7b79a2b4056074be78d1a27528e9194d1f7e049144ad2efee9f727758952cb0b98e3019651c17f463b6c99b73b09e174f6ac3ef32c7e03e97e0f70843fa90ce85b61360bd8875f31b6a1673a9d2ea1b8ce1d84287dd5f78c0e17fd1c7d3d781d4970ba9508268719712cb57fddcbec70fc5e5eb1b7599c4f209d27aec084af02d99df9c27f339966014aeee75b66243607fb391f678d44bb3c0b7aaba823144182459e049c13189fdda88e11c481eb807750add21cc59348e6ef8093a27d4a41da03f1ebed69673f6ca20d7f77b3a4e8c11b177a35b70a8087b5b4073e07a39c5755afd8f18b07bd44e40791035fd2c78ba7206840b60cfab50a9f76d966c2b970b7226c371c9ca1ecdae6f6e5fb17b53d71332ccc673d0fe53a9d5312ff3a11ccb4f4062c827875caf336019e29c62a3d25da58473efd489ed2583c69555c3da1bb8f4750413db175b97f51aa4060af2121804b4fa1d02d586e3a934aedaba5b6476ea020fd5eed53ba2d5788f399ac7ff0cfa624345836987adee8464ccae270f52c914d0b5e721b61ca83b8a7c3bab01002d9835af7ecd5649fabd9d71c6c482113ab02ffbee8034cc186c7c16152580be455dbaa21c8a5d7f76e743132bbc277ee4e014ee2d7c1d7bcb114f504fbde40cebbab968852703190a0b3df80597656070ab67d7c99cdaf16935ea7212fb95b3c7b51b47e02cafdd5d3073687bdba37e851a10feed68d1f69bdd35c48568fc7b8059c6885522cb95185ecdadb5124ba1cc33f8abbf696b520913188dd18b7f2bbeaba3720e90be07e29d330edcc3c491ec000526672610cc5ade7b171dec878d2bb59a4f30fef0fc64f68dd2187776168e8920b60e28292e364746a892147d676d7e9465e6f4c93b4670c34290b5c9f85ad532a5dcf51c3e47546189588ac7822c0e77fe56fbb18e2f14bda66d0525fef7ec2139f81753c5320fb40296d6cfa6116e2d60a89a10bbc7e96446d6eff2f20ed6d7bb8b16348aa280285a7481fb9ac3a59cd3055a4e8bb7f79e69f4fc989a469b3a72bc7829573daea3db1b12b528ebbbaea195c2d3c6a7465458efb37fbe484434a8b4c799f2aba10ecbb311641631b949107f5a07343edf6f5cee9d0f28bcd9aca39a8aec249561527363076f2d3ca6576aecaa539c25c9d5bb1940b19f486089ad974a89b5a3f7551b547b4035b58abff5033b1dc8040c70bd9926cbea97e3b50cd38eda6d7c6a010baef53ef6436d69faed94ce7e82b126ac96d7c7d24f69170875de4614c9c23d8a98fdd1388f583dc0d13dcf8747bee1ce37da0b1f19fb97eba6c235713107f0e13a1c61c241522391d8bf87abfc3e886da5b601999ca01dfb8dc30f4d5d420459bdd9565d006403b329a15db1493603cf08f60f078160918253683d70f47b603849bd19d17495c56fee6bbb63d5b03a3c871f9f336f43dbc61f3a25a29fb8ecc6054f10e646ed510d4ca6088749b315fe4abb18e30f52e4101ac030ab0603904d1a17a4631e748fd56dd9abe64c487c5c7a51e2e0099492a76b82c652d0633413b09d3d12a333680f798c0e488776579d3f6a65f20412ced53c085060a6e1c061ed6a44b97e31c20297479875a1458e0ac08d08e0a8d281e0b2db349e2f831c7ffc051f21577687f7f093b13443bd09eb264236749ede9111f782dcd1145331b503f63812d40b9d36acf7c14e15e7b088981254748e3ee8b03385aec4fc59e54b2bc6f654a0f7ee07f2fc308cbeca6c283f83cba91ff86c058d6d143e909c21889bfcc0ae614260b2ea2867b4e76e2314431f03dbfa1607572ec075067824ceb67c2000e9c0f5dd7ebe06cc8e37dcbe95cb6e64d2c79fa0f03e0939e55bf9d21bf5ba1dcd64174cb5931bc8e4571b26f1fff757552d9c1e16e4cdc7a3e12417ff2f537f22f6b0949d94f1c47cee3341700842422ed4146b1248968908b3ac83ac51728eb01dc99f7ee60f261fa52df95c0ed78e23650f6e2c93ebe6db7999006984a0b23f826854a2b4fd5795241035fb383fa4fd88960fabed5546e6daf3757df0645396cc989b502444c0a612e4dd97af01ea83e4af36d97d5b11ef7fc3c931bc46d97ea45e5ccf5e6bc81a18b2d8769ba5ca7f2265cbfc6c85b0bf1011e6cd11ceacbfb2c47f688bfad6b8dd8110e023b3abb7e9bdb65de15b891e34e3b399168534219dd1ed63d37954490a596c1f6fb4f5f5e2c1df44056605d4934318dcf4f2d96c0e8d8c085d71a9954642d47aa8300fffb5782ff8002d8ca8d638fde0d29e0467ac01459e526a3d643a453038f6ad639d09ea8cc3f9388763a5ca4aebd90f1bdb2034016fd9ea787e8d6968a280b558998620dfeb18105ccda702e74630cf8890112ea6c11b7bc2abe8b765006fcf56bad52111b9873c75ae85e7bd390166b14e28f81ddd40a483b2f3350d9aea84c5c79ef508756b4438cee782b20b715a00dd0d994f0b6fee235c55ed49b71a5a0e8988a5ae67efb10ff573d9af06aa35db0467192393d0df0a71b7e702a027db97c83c38ead7380a61ead4f79d70d47eac8cde8180bc8c01a0b9c02a1e9e388fc94b62b6a30c71d79676b0e1629216beda3e1bd850cfcbdc4efb19be87f775fd0cdca128c34fc0a11661b0a1e8b4997ccde0c6267a14b4f67a0169ab23f307adc941a19531e84dee48737b3d151e8540ed3a8774e6d370d98e9159f9dcdc162766430b05d51f41499673bac0d3170193a21604c97c54260df07491b198f8c9f44daa8780973bc437672b142f09e835fb543ae82d24deff180a72b8db4191499be43ebc0f5f86fd42246132949fda4a026b6fd9a8c6bb23844252767dbeedbea495c753b9154615f133debbf67c3368304f7d7f434a31b9d902de75a1f7544f98c70cf387a1c434ccfd6a585e8a3bb60c682c84059889ea9db1dc5a4ed41024fde1d6457feb48805ceaccb1d3b03c5d1e1f448df7980bdd5ab615d08d3d68665e4dedf1acdc1a242863ce6d5dd67c85eeda8c451f33febb977b517d651aa33d4072199e135a8146b9ce363404e444540502cd51874facabdd675709de530ad02db822f4be4ec70f9594cdb0d1c3dcf5ea00cf5c37d55bd6b3e2f11d00d0e548ac87cf9db4a132a6461e5b87cb598c8e253a5a0c35ae5463a154e561d47a7ccc4647e93efd390b3354d3a861fb8f9c483f1a36098bc0df7b2f25fc7c6137168581603882a20099e0451a7be7674e534abf072afc41f54346e6befe17aff0fc9be83b840eaadd26d3a35d9ec0197cfbbd2d69008d5d34caeb4d85b3d9c78e7735003e958d1db7f834f503d7951902dac812a77e63e964ba93ede3e36bb0f7cd7b53d233a50378582cc474ef0e6dc93894f42b6d27ec6f5c654c41557472154696686025fe65078ee39717aed21fb85f485e5c94806f3cf88af405d29d16ce2caec74e34414a4ce280f656db8a37b6960dd5a2bd1779b3d6296d99228ea30cc5eaf9052816bb2f9c2b699840ddbbad240be365ae9312bc3d6b3d630dee21b65b7385eec924bf98030e7946a374b58452690f0d309e423f7778eecd5b6599b43471f370de145e6f604eadc6cdf62c236850e1020bdd1224ca77083dd39d12ee980bccf2318da09cfb168e81860c2972aee7e2ad07fa89537f90111d3e3b944bd16996de88388e071c8ca3df955eb3586b579974ec9db0b5dded93d464ea27b626b4dc9bacbd2f990bd87449c493d2c0e9c78fc0816d8d302eb315ca0d50d414de14239165c38c380f238925d9548e8f6e604afa8f132badb80d20670115a24e42b0f5287af2abcd72956bdc9d48f0ae43495488de368f15c5213b1307e29a4c9ab1d9c8b5f496417a55a1d7d818ff05b0ab35d4367fc34e9b17ee36e95fc2f62e3e58d9dc6e557a708cb37d526bc47cfcae73445f96ce428218c1386d3324344580f9c3b80bee629c612a35d2ea45fc717998422022b8d7c44c3d815c06c8ef289f44ee11706be045fd8c69223d8c6b55352c3543cc89f7a8dae9797d82b40d20c2c1c3af48d3dbb4876480080ba1b3f109b5858e3b4a8975ea4d899a4df2787311f9a859392f3d322837e24dfc8aba8d1ebd99ca17037574a6f217790f8a1669b57306d9eb86ed05088ff6b9b9516a719ccbdbbf0abaa3ed345f8de37182d14cd6b746f508e0d3754ef32613eafea9e4aa68b234ba79fb27bc1c51a01ae490629b4ece763546d7cc23ecda253797612f701a86f2cf47646c67b2cd78b4b83bf52dbf08231cbee150ae0178b54626799b176cc0c2f22dc9025ca86733e404b94bb4925ac66553d94b18ba698cc2b2d96ec7e3c66acb310f32c486899854d2f4ac57502e25b80aa703889f1572514469f0a70901b2015e1f44c7d59a71ac29d3623e80eb0abbed33c12739e42e9be3116be065d9643db9e1808c1c028493123eb492aaf93b190365cc1c0f3f8a4997b925997fb746264c3d2e3ce3289ab2931de97b56c0807854266e90a98c4c03684967fbe00122651e1c95feb3767ab1b7584a200da8a381e95cedab90343d705fa9792e0f21bea13764fefb1253ee3783d81faa56196adbc9f192944ba0253983c1a359947de283a0ffb15b8b27bcec0183b040ba7b9f2efccba5746237cc06dd792da5f87f58b260d3f645a35bad7a3842440bc03608248bd46e725e60f97e73ba5e39c28de7d77fca15e1e455898630fe2433f0b26e637df234b7c68576494f6a803e7a11569a06cb5558d57e18bbf29d99dfd2579893da0f416b220d09107973d9dba9726ea2fcbd00d2fe3e21be8509e937ef8e505dab12dbb4fb607b7bf7bbb239d618f798698a5c76e8fe6e3af1285c64cebd5c69f7e34bbdd7e69331d32c527f896bb9235519b26d1a24c5d53fe43c8ef74e855ec66ad9ac41071bdb15ad03d64ad37becc95249df1c1aef377623cfdcf3a793e4208fccaabe2bd920c3250b66a2b8079bcc1d6bf37746b4099ecf5f7749324ea50e3a6eded8ba97a9e77eb356188223d767625ed1b212dbf3c0cf328781557e4697530571161c1b1d889f43cf35999848a1096ba255e52e9ce20b9033247aea72c4c2da8a00b92d25af7003f87f652d9782fada8ee92673ad0f6bc3a3b9085bcf9c6f35521ff9976963d93afa804fac6c121ef3bcf53f73cd4cd71200c867990527425df1fa452090acc232fcc0bddb6e5a5bfe550197f6a5a337c472d9fe6cbd6d249c8e1a038f4392133127c6188446619a42809596c4dd1b73222075379c9f77fb3851059dad291eb480a21ac96d9c2fc408663aa4a41cbc7374332379f0524cb17a63457942eb578d679644365f17cdbf982e77295f0a8f2002d26c2d317ff42caaec6201163046872d2bccc9215f42753a01d58dbd509b601326d7b927cd78561013e29bf0a1f1881c883be97d1d96cc3607db388696e91cf057ec869ae5df15f4014fb199e562797ad619fd39f9d2aed367119382837f3de28c33fc526e31539dde30aadaa5a143903cec6f1e9afd025a4aff0479c067a92fed3583161176f754d10eee7989b4cca6e33ea6f4a91fb013d72ef432f5a94a1fa37984b076b7e9610270e53e38a5fe04f3960a83cd419f463725cc76c94b06fcd68765e644fc110c9adef7f35b7cc0f1937d0392af69b93b916cf20de457c70cade89081234b579dc1e08c5e993ff9b7eb7af9ebf6a2e53a0e8cd0bfefd4749951236b49bdaea35b9eff0c499bf8939c241554544bf10b8ad60ccc5492cbf5e9eac06005b72cdd8f5ac2df7a09ae75e966d67c965660147410745093744332449f48d67fbccded811cb26db98a6a87e5d846da79bef6e640e54dc3453e4412f49842357d729abb790d551ed0c633b1daa3ecd4c42cbb6a367c1d8d3297d78040fe36e4c8819a2fbf55365b856611db0eee50d34147b8889dfe6f16222802616ff9ac4d2892d6329a1bda8aa2120cedcae2fb40b6b8f429bf92c8c5dd99cf9ecab02dd7644d54aa5487cb15ed712dcf56a77481ec267733e261b2042a91461f994c40ea46591e8133c390622f2c7b6afa644300ab3a4a904f92b43bd3b86ecc24f46eee945f3c9d80f4b1db2feafea4fe42f123ba9c74264e4e57d09eb74f8db2d13e4b1706b4e88245b6e6b754bf66a9680554e3f3fddf26bd212c5436f14b8c0b386a97f7904883dc28ed8d12c59945fe07faece7eea121069cb7bddc5decfbc9e4b1dcd9d8a7c9e18f577acb1923182e807c9e224e56855250d9a0529a5a4533cb89ad5592ec9d7d718c4627c1ee6b1ef744c14925e59bc8c4fbc640b07bb272745bd313c8ff47d758f4b9d0c7e085f6f4b91d077c36ab918083f84ca8398cae678d17ba81c80f19cbf79b6b32e3b0dfff4379015a31fdd40cdbfc21897b190e2d893ff2c62e3d6853fdb3a30bde3201a14a9fe2c7bed8baf1699a655b28a3bb4db513659e1c18ef776eca1d59b8548361365550cbc5866bb6979cc1262a70dd4f7b5db91177e9d3bfb2a884245b5e8dc87064f36f2e4d0ee3ccc8dcf368c89bbc42e3962728f83fb331157e75ae98495d5e9475bae176cb006fe85fc9caf51d1b716ea5e9178d59dc53d9b3539949dda869ac7bb5c648cb96eac2f1b1383e8cf472c68d5e2cf049c181bbcdc604bb7131f976b066c60d362ca41f3bb29aea10d0acb3f78e506838ea218571d6d7342e8177b8b9d7c70b344b05c6e4d4d842d03587fd8b82693f4ee09dfd498cfafd3b1f493b4110b28ceb7a7581951fdb8ef5ae6b6bf04160bbb22a5becfdef565ec193d9c7ee1770d686415c16f69c8916a6c0c0c7cfd31e258d50c5193507d19ee8668e2468f6e8312b28224eae52cb210cf5eed7cf418ac506db414e98dd5407d71fcf1958b501e703b82ff1664a8af84ed45d6499928be246523951ce78c8dfb746066f665aa53f3578ecc7c58aace496e57635d4ce0bc5743d14eb80e1136faf639aee39efbb80e9f1bf97741c1a2b09b19f1429fef1b7b9253ae4561e1fffe8fff35e7a7b2af349a9112b1a07bd15d1bf41c7402925fe3d901304f739d2d78aa17987d007dce07a2a4b4960547cec1697c517c0578e]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 4f58d0c9d678d9144ef71dabb6185e185b883284d29a3aaea7d7778bcc5e441d

tcltest::test Hash_SHAKE256-3.39 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 9fa7c9e675c5cc07d3a096cd4f090aa56c0271c26372616f231de3a496d2d4d726e68c1480e2be5097799ffbecbd4bd40e9264015c62fc5f1212b51784352672a48081eeca7e7391b5854c7dcde960c5aa6fad7fda05be1adfb0cff278c53122225cf099dd02b47133aee57c77f7121f4b83946364c36e4992dd785efaeabd90a662214041d447981bdbb11f744d298af6b560d68304d6933183f983930c91633b7a5b097c5ef4af75f4f98f4a556db0b5ed5bffbe30bca1c6899a88ca937644e68ce81c1807855e47e005f38475a6368f13cb079dafe91a58d7a39528e834dbb1800ea29d36c04c9b891d74a7179bc78d10f915a8e925a7f0555cd4347193cfa33e16c391556f2278d6893a3da21509b5ca2d52684737f095eb0d6b76975bc9c4af48a67ecb5887e7af906cce7edca4112aafe5642fe99c4f81fd8276c253701db9eb74eb004424eefc7c32e012b841a918c6f7240a015426ff7542bd5b446db5454954615cfaa198a593b5fdc87188837dbbb0314148bf234dbdd2d2c8f667953ca86f674744a5ea931e1dac07ce20a93fd637123a86864d531d5b3d733107c38451ed8529e8d8eeac6492763898b223485fb54f5f8350adfadd0587c2bdf549078cf5436aafe3abd9af3be1c197e5f77e9e51711706c6492844f7371f61d82faba0af2a72616e29034540770b93622fcbdb34ffc9d9902bc69b5ad5f1e6587b5ad744c1a9c62071106fcac07e54d0d3165d8581dfc2555bbd2a55e9a0151e37fb77dc9078a5a28aea75014382a1d8e9476d6d80c08abddff33911fc94b4d26a76c99e2045c89b7c779f0c888044227b45531483d4f972c15210b695348b1c1db315b3f879f5b450a1351317de035590fa57a11283d61909c1f76b3dea64a25799a343a17df5950d4e7e407906a719314dc13db535eb5dbd2735587b1e050f2012ba75a1b890e5bb68c3b9355ef8186526d80ff552fee3e76e13a6d73637098006a37182918d4d63d64ca6d350bdf7346de5405942d8568e7dd97dd99bc238805ba760cb72b6740b806130db43c061a60a30f76a6d415cbb3ccf040ab56e4627fa0c6a05c2d103be4e4a7fd69fc7fcc4e6015dae3c009d75933c64f1ec03d87ecb1ab6b7e8a7a181284eba4ccb9b7095e7a09aaf15dfc3c46a6ac417a948998bb61b6d694e00f75ef6b709c331046621f654d5f561a473b0a99f4d0252062e58a455b6a45ba4ac5ca0cb95c538c98671fc673606891857423824273c510542ed7b11baee775a69830ed386d948b4778cdf1fe66cf3031781ff41794d0c0d7b502597a0d20aebd6dc29160488c98be27a89c50daf092d5b76e73d6bbbede6818b882f91d57c209a6ed7de365823176e44e0a0d255325dca27d66227105a57fda68e21b58136bf5e42017144d3bf20c4f1cefa5ee8d55d0c9eb5f6d2d3bd2a97a71eb4335d9e90c95e90185781036e8b893a19d9f05cf3cae36d42978d7d25f6981f3234f11d5d84cc6a1b97e958c86c150b466af32ee8acfce48e9cc50211c3807be1dfc61cec369479c22b9327f70f9c2bc9397bb30359f304220903b4b5a568190a5d63010688bca3553b07d6c41b2681ea6f0f530e7ad0b44507d0fbdb4557e1f4d5503573224ed21bf1cecff439bcf5f1343876cfb699db40beb23f494a55bbe9701621fbab51ed5d736f785210646f25af7c8410b658635b5533e8c85d6b8f2f563c2c66cccedc63e9723ba54928d7d00966e597211433def4db5e20269f450fae4abd7b2ccc87757c607fb48b101538697b012ca0d63311c53109194cfbc5d1a0c93e037453d6db53bfab487f2312a5f8454199dba54b3cedbd527b7887f7bd564016c74b6cb1dc981a2929cc69b461de4b0ba5798963a697079f0d514ac41bf537ad8c5a1d00c270f6601f1beae4b34215c817238a6398e9985998804c1232a8366b1d4870abd305ddb8f214af8be24c2ce1b880b1335a0bf7e9e4ac95cb4b95c6b841be6d9a587f5699695ebf8f372617bc503905bc3426acb5b97e2ed5aee46efcbf641bb59806ea6b4ea222dafaf55ec3a7f58ee46e624027df9e1e1aa3beb79f60e182e5ddc01f966787e15273e48a5d845d55944fe63aa61db36d80724b2809ecdeaa106dd880827db603e1e91822f1b01861b520db22993d6523f162b249a22b029c1f9174929857d6906ea6bcaee9f4cfbb2d2a68816a055e4954bc1ca2d3e4f65ffb91bddf3ebf9091e0f0f6b6ac162a69e6b2b6dd803e43e790c9b0bc02e161fb8ab5daeedd7b8c0d2110eec3a2ded075c603edc143b0bf038fce971e99e8ec79b645f347de54710c184ece5c33166ae6b76434b21b2278a73816f850fec23fe066883273a712e896adf1bb0ac7849fc5a01cb33a705d16da73e8fcdb9b37013882c7bdf9a27d98b4c843df54c6f21819687493e0aa2a42a5288bca46d60eda89f14abc61365c2a6d518a62c298267deaf9b4fc2c314fa40e3f488c19191174dc9d595834ca7945ca300f6cdca5e875413a2415a76e94e320a16767ddcb0674386d3cb8f8c89a92d14e1a232b5602a825130b07d8c7c3a7e03430851953b685a6493a06389788b88c91f2b236113abf9e6cb3f948a5a29a58e1ea0e551be94d2d199d67799f0b6003e2e13f853f5a62b42d62147d71fb628f91df2a198a6674d5c5ab054548ea323d2a2df3a1492838703f6180019194a78d2a55ffee08f7a3a636ad0823faefd5424f1ff511956dead988f8645c6f35125b9595b85bfd6282a952ea989c1de0f21a3bff6e5d8df01ff7f16ee81471a84a00bbe77be9d170b8e502acdb37198630ced415850e987b80d3620d36b301b4f8848392701eede9ee622f39fc7c56a9386404a863ab1dd4b574c41b73c18620c4f0d4e0c185b795cb29bfdb21f33d11b1e7b1022fbc86c465e3fde1cac468b5554b981793a3983cf8419cd773253485445cc56912ca3a133826f7a761460e3b549db6801102f9a51cb2ac781999a4cf99cd2726345ca189d84798b560cee27a68ee166360294099e085d9053bd7f6b55741bf81bcfa23eeea4dca52f0e54b393a47a008aba0d7e0ecc109c50368900027c175c1d22c2809194174c73911b14272af3cb618f02442e76e260197d3dc78b0543130a07b18a30a2a7e5d62dd7c5bb72fd2b7cfa09187799517021fa040e49b02db144b6e5b846810cf5993ce154db1ce4a51f93884764b3dc40dc458260d8fd35bb6fe8e5974d9fc5106f66ee2df09948ccdbe4067d8056e156dad82f5bc35d0995edf617b3b05f4ebabb0444cdb678980734541a1754f30f26804a615b735007e54167127a09603858fecd8bc0772b60f8ab7c39a15cf8c4348ee4ceec6366cf0dfcc46c66d312e08fbd0b3982dd3221f5c3b4cba803089f05395fde8b3e01ad8482966c168807f5a37845c491332d5992ffa66697d1830e1d221406b45dc141fd8545b7e5a2bfd648b315b388235d8664c1c980fd63088ff0cba9edf43d262abd476ad670adab00e3fff39cc4187326cfbc86a14511f99304b869eac76690a6687b6e2e34234a1419a157d6c1aceeb95832665e0b78d6b5dd5b0c83aa64a1637383d8459c8e1d7e3e59caf82d3b30cc82e5f10dbcf24076ff45ea4f19a1d8d052e321b33658a5add69bb587535dd9ced429bf46e6389744cedb9bb3a1c8978bab2be2dd8e1d733186b9bffad08f5a3eb080197ff3967bade0be8947bf236de3d0c0944b0046f697b36632c9214a22aacc8ba83f81b64e20b9513b71de5cdc776843ae72396fb04ed113c678c208d3717caed40bfcf28f2bdd264ad89bdf63c4d627a9f995e220d58434e3903f65dd51455c354be1d5cf5db0b01fd26425843aaedf0f27a258d8ba315c0295f5cbb098bb264495bcfa8f04d89122f5b3c9ce7756ec56a2eb3e386b6cfbbc0081b4fdd642af7a700abb3edfb91c0cc9272692d962d208f1dd0cd0779b9668466fbc0588703a5f4147b26f3cd6e325b32ad681ff5722ae8b044f314d41aeaffe1c3b782dd8595baff05a80bab669264a3b541c47b850afd4dd6fcb8af3c6eb9e23ddb644cfaf0802812e23c7dc3056f4c529b240eade9565e5091f8f2651b39cf2fd505bda8ddcff9697c8e2bcbb505974c1e489734ef7c497859de85de190712624c6e19d8852ed9d41d099dc7caadeb6a7337ff6043f67817fd7150ef8fab119ee9a546d30f2530196db6bbfe6cf0b07542f92c7a0e4c51f424b93bdfa5ad36aa54b42edea43c6701169c6ebac1554f36329708c977073ed977bf2ff88596e85034a2b7446cfce454bdc39c41f4642e72ec187a97a7aea58c9d8a128054ee8e563178cb4b8eec10da0d342edd2ba5b6f41884692ac6c9f0d63f22cec03d3b9285f43d513d3395535aabf60dd38ea14f835de4bfccfbe0867f0590490066075ba525f93160827d169e42111f6e47df62e6633f63c26e7ccf4f96db6d88f7d9517e6cb553fda42ebf6c788e4ef57be755e6d39d3d574824330e9b0b209f193adcd76f789f5bc030b88df57481af5542924b550635d2b1611a83bb294c8ef3b1647ad94afdc4ff0967c962cba0e5fa777fdd9083337ad0baec779f3cd89eafc6512d5033557e894336e7679c92e0950e86632d1b1f99ceb711b2ef4cac1472010bb97c3c8fd285658cb1abee41e54c900ea7d3d7e175d2e0f2fc5262b03b67ebfae6076c93081bf8d0edd7c9943f47847e6f2bbd615605bef51d7084cc5ab30b877b96cc496875836c6492357334af724084ddd888868fd883dcf2bde8b881e91842d462993ab88ec7de853bc60eace2bbae902d3c4c97b605028012ec9ef70e170166386cc50fa2492358e27513655d57b4ecc666ef45e1e157c18dc0543d01ea81f756a852a0465afab233698c036a7c609baaefb8c2e081a35e354c227c4afb8a2dc237299302622c3b3488c0ad92927842e1bdef363b4baefe127950dc72b0e4b086ff92115ec9829cefbbf98c5c01c58c74badcc97ba9404a2d2d258400735629aaead542e3f7c17d6ceb7dc850320f1e6accc6a1270220ea8d51ea9d7caba94034df394d1855b485b2fe9688f68b1ea3cbddf7e9c7bd17853acee84e6fbfa59c2ec5075a8549225dc9de89f4d775b9c19fd4b5c7e444edc33d8a64c0601912e69f868893b33cd2adb971a1367a59aa20ef99496305fe6a4e9d6fa91ad720b8c59009011e29978d1c8aa12573679db769c214fbe6b25355cb6264fe855c3c5fe20836bd236fc01b5245545cd627aba944212d127873ab78e59550aa2978d5cee40ff503cb0e2144f8f2748f8441e9475813ccd840d16e99423d1df62db253ce74ad2e1a3d8d20d0b697e807a83dc15b4ea0d993675304818a62b22aba931f273aebc94ba2742786333e980968a49aabcdd03c8c1482d6f8660cf78ef7a29fa1ddd0aede224c9d2f18ee6ce0ecfddb017eacdd0b70e44ac67e44d4690d673c030665c61be49cea930cb04cd35dd0ee23093ba457a303c9b279113105236a5e175cb1f74911ec757ab88b2029e3a63ad915867abad467bc85ff7cf6a862346ea388bc2ab2d0c5a8acc387d02ba50527ed4a93457a2c968907ba8c0b9bf24cd270318e489c4aadeaf0d6ac4421cc781d25526cefe0d21a9a004f495826fa3af44600303750a72ea410990365537f84844bd2195e34ee7b553869bbc690a2873bed9da9e1160ed03cd2b3931908e7b3c42575a07cbeaa3f2477aeeb3b2314ba0e2caf012c35a71a1bffcd6449892c8c457ce00b2fc52cf06e84c6e0a025755bd7ccde4002f79b94a95f8e7fde1f75977017be6261939c159a285aa2dedff0f2fd96d46f4aa212c64eb99febbe10ea5dabc0b5abf96e2337122b123adb99aa08e84f3696ec7f333973d6a7b0d3a4b5655f3d6df0df9fe9dd3d5595af819bce24ffc2afbbcfd627747e7f4fd70325fb37f5579038fb6e158f836d8c09b72c82cfacb6e5e8ddef16ffd97a3f6738d9e75cd3d6c38c3522cfd64c3d9e516495ee9057f28024fd112763ea8f1e68590a9e5b6382b0f375054138008b748e721f3cef663f2978178682271b8895e34efe4bbc0c23ff75a35d903f0720b5c8c80f9174426588ea149450d3d32c4bdefffd14083580581aa773e773cac40a074eb018a8532c4485da84b9f07942e964545121c6486261eb698f6c5baf3e1b54ec49f612015c054e529ee4057793167a35419b7eac91c5efd1f9477f1f588fb68a21563bb5bc754f6429fa9a34e77b2a8a14aab9c9d52a2ec8f8a16783d80f3610815ea9d5153a8ff96f22371805bf7b3b1375fd07f639b134d5a29c418742db66b136e6cb2ffc16f7b685658bb78b76308625d5cebb997fffd971a5c32dd1ad75f9077afdd264ed48474aabf5c3872151b5e1c686edf2a00f49370a6f9263b423a1f9ebd5c6191bd26a9a92bef25a8687e7d25a9754ee1d4e701b54af7da1f959f033c3b9d2c4a87f669da14e0cadadb865201869b833fda295460aeab83283002fde8913c00d9d35857a600ed9279ccd78f28864e16948f5ffdfb48709c05afea721c64a569b01de0d5a576421715daf667033f19739072ef70fdaf039f0873d9d2501c65d17dc6147640fb9ab32f84477c4a076a14b4135c5fe058c106c11a35c11c2ef9c2836a67bc10f7640137376f513575dc846fef2b1d3bcc355dc001a2b0e922ddd771895f198df01a8bcd82c2688e10cd4d2464d03b788fdd2e75d895144f7e8e6ac8916f01208c4abd42f4e5448c5ed8d98222e02d1f0a24d362fd717da7b88806e9211c157112510047ec3c57e8b66ba40997df74a7c1a8f717eeec5f9a67573653a6ead8e828ea1f3cf75c150bce12572b4222a49b4ce603f52b5a3c8ff17873a8915fae0e4662449294b92e6dfc594d57a05e3f721248748b414f8700ed7849587eef074bd1562b0952d7f697c7ad011f30e6a7b4a85ce35abf30e185b1b311d3de2d973980323ce1903cf011c68a1cf272606feb75afbae403a2be96f4c577bb2d7fb04fa982f4bc0b5cbd546f7ceb71f3301a8f109d75a7ad1980bd1d3be57eeb6a0506d3c4dd08f2cbb0e828f2170e21ea1a07ffc2ae261a19da509162e57fa680e7e78574705904ee7d3589860a378d02f0fe999bcedfd9081dfa07f6f26ddd48db7a451e391ca04964d517a54f7ea30f21cb84a542457878ee21d75486a9fe167237792ea1d453711a4f49dc5153f2534f07376bc2f766f0ad6085f83cc4979e2e97b8223500acda1ffc9697ba47f993bb2a284bab5622e3ee3eaa7e6f3e2834832388958d320b08c8659473d4db273518bcede175e24ae722f49b43a8872e6df2535104f4d8fc61a632b9dd4b8e19bbca37eeb9ad4c3d5eee5b0ee4632028cf0ebfa7dd16760f995bbc8d4098c14f8c4213a130dbc478df92ba4bdd49a985cc2ab0f3aa6c99a2f43b9b655a2715174b32e8abe36c1b9bddc29af89aa673f3e9f8efdad961a45526e827f876711a2f6cff1f754df89204de00958ba9142fc1acdbc4b4069026a495c41aad122110e676293083dcebc84244af027b851d3d9d8955c815ae62b0ffc551cc09d991c9dadb23b46e2cc03ed2c6508a5ecb2c1dd613f962762d73a3f53a33b485295d858b1081237a9a006644c787959bc7cb5109b1394c6c202daff368dc7ca57deed465bab4065fb146cf06cca6bcc9176567b6f597be5e12fb1598d5ae8cf163c047094e5ec5841eedd9a74a40584d46a4d25c558760d2728]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result ef3ba3f06f0ae0479cae518b27b6d2176a9abda2b0d371f2635eaf694fbd3345

tcltest::test Hash_SHAKE256-3.40 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 0cc722d81343400c0add2f47852e378124a41e360a24402191f4e2483cd9c338ee7cf4925912eac6b83cd21fc12c2400d50a7b6d7b96a4cc0c0ef4edb052df498846c7872d7812455a037f14e5b3bac4f4692ee36dc11a80aef3e7347ff7b96444ed44c078bbe10f56f8e02fd9092057e789dea0c9efcbc4df6a6125921076118938124420247eae16e49d7785767f41183234ad7866de20073d0ac7d1e541d8c0f0d91b0ffb11aa008e5ef5d244ff08ed2cd711616e7c1c8e328c2224bd40424fdd434e2b88c4897ec0caafa6b9c736d03e71d46b51cd41dd128c3e74e29bd69fc7f6e45e12bdd5f74089afeb1f00522832a7ff8055f8165aa4b524a79a7b1c18769ae58ee32415d3d744fd87bcd1e55dce239887c426246eb2acdba72e089d22b2d85aa54122d2794da39f64d96376d7db8daa67e47ef181021c6b5ae669e02642584a8a75df93536a4d9f68bdde8dfd208c3a0afe2907fc5eabddaa09c76e8aefc1bd25c782e0c8f6eb047db269b33967c95257594eee458c01387ee149cdb881bbbb5e7e334140b824d78afe2c6ef276ecf9363f162cc654c784bdb4188716c0f04d1de41c3f2379a11f76ea504991169c388ff6a94be680a5c951cb5b240e73057a4a3f6261da0109e42bbefdc97c0f81164ac72ed30cd64210216e3b2a0764a54bcdd83030cb18052f90c25a781c29449b50facd4aa220476015e4e023695976c68ef7ac335f863d078d3e90ddd92c8dcf87d7b03a0f245bc2157771969b1b20f576e4fef2fe1258740a79c6801cdf03bbd8a6fc2abbab273d096d160c07724ce06be64ff51186ff7eefbc25ea4b0b4f662baedca30e7c53d9d90ff90c1425a28e5646c7c5fea8d92e244fd5a2d07819d86938762c7061869e6ea53f1e2afec907204d8de92f418f8b927afd3011ee081a788cf24d49206895ae7713cab1c36a53af40cae90a18c89d1f85c61d7835c43342f2798e0182a2c582cc9b99113d2c7bed6aa54ef9f72d6db4b757f06b14f62baeb23378004fdc37d2eeff12b334b886c112479e63a465023a59d9315455460ba3134792ae4fbdf1872368befd70b57c127fd764b0e8196597b373699abe5bda0b5edd647449eefd87b4fe2358b8cc65cafa7e25478bf19cb50d4e1fa518dea0cddc1f77b8071763bce9e8cb2dd5a54ad0cb646b925594b17aaf91dbdd2a7665d1d23352e34fdf290d094f3ee290e7320c3ab0bdf80eababd0e06525aabecc32ff8b417e5eeaee59615e5a02e1af3a26668f8ba4e17ddd939eeaf286749a870e3f4e728190a0edfaa22e32a190fa482dc6111ca7b56bd370cc135f85a38750027962ede5e0388415b7c2fea3593bb64f14098c4edda0354a41a4d5ab9f4dcf159510db31b87c5ab18862e78ea3382f9438bf0221bfe4aa2ae7e47b7ed0b4ab4f7ba064ee7f3218d6fd5515ecd5ba59051a7ba7a9c4ffda17a51d7a889f848db8135aafa39c23658cfee5af445989dca9a385a26d54b86e196395f95172841c594685e5d87917eadc7358dd1f966d6189b9241cf5d8d80e380996215fb27d0139fa6b2d167dd64fcd44f7c904f42e90ab45a23dcab628617d8066193cc838e3601852b0e310273b68590a987bdb93101930452c73586d10efae4d0a701a7a6bd7898396ca9ad356b49ad9750cb3668adb605612782472c2967c951c81120e41a53346065083a349b9f0ab8640e46da5f7bf1c166284fe207bd28476f917bb0cd200e328ff345cbc7f41caf39ed6710a7734e161b8dfd8d2a59964416090487467d7a1255e13c9560f777ce5aff2396062a6eb1a029dc97f1cb77ba43ce77e236b9fc925f589b1c070780a84f99e8f50c1ff846ac92599cfe91612c8178325bee642a34f4dffdba2aa2ebcf7064339829b26f27993e1106c139c70d578cc05f0e1a777cceddb10a2c67fd9675e4a009df8037d6eeb38f5fba233dff2e82ae55e62b68dc45d86186bcb55abfb8719ac4ae17e6f72569212279fc2a547ee058eb374572c5e2669bba3c19778dc0b1a05305c7f0eac5e572d9511310bfd12c5c9951c729ec2cfebc1f3b02d893172b4d2f874eea4458af00ff00068593cdcd25cad64ef2919e073f102a1fe2623424edd492eb3776462c380de754ed72bd5950fa253b6168be26b14799bf496da0552eccc94b6cf326f39480776cdcdf38474ac1cf1b0ad3f5c3af2ffa7f6237d4227c828ade0f6d738bb2e150ecc82bb71d8f9c547c3355ed648533dcced1334823539068117337a46affbad42343fac252ac0425cd8f80fd8fdffda12bfaf294ce4070e1944cd431f7e77791ceb4cee27d0c73e39d83c7bebc1bd7f81553f81289cf9e77c500d5b4d916a21a3daf1a8ff34d75fe4a94ac996fc57d422970b679ec5d83ab2213bea584f9c4ddfe9760336bcb74d67356a2262169380fc6d5a0137c76caec4a19f17c61fd5a4d901222653d231b1ca62e3aed6773a2c17c076777a0a7decb9b6800b216bdcce98083e39dedd0b33131aff947a87147f7c76a5f2f0f7d39b994a28eef09a7a7424e8126660450e7a4c4404fdd6afe8223279309a1ff435646d44dde7bc14773e8687e6d36071022f7cc83b10735580bc41af5f96916a6def3c8ce81e0c409bd3c5cf02a866cbaff9ac8eecf6d8e3a2f6b202790fcec241e30e0a91bc6888addce9a6ad0efabadc81e37d5fd68dbf17788c59c82c5c627ae9eba61fe958537700fbf6312da5a6536f297fdbd91b53a6e9d79b9216c5b4e0a8dc48dccc650abfe802a6d42ceef7da6a867baa27090519f29cb220f4911e3ac9e8d80e8e16134e3b069edf335e163a1a035a12e7df3f373ae285baef460a52f3183efe56f4d7eca210c69a6c7b693b28a7025c422668c76ab1fca72f6edfeecf7362f44d86be60c526064cfdd059a43c7b5ccf5f65e7922911ff31db9005d704012c379b5431744b53463e0ee24f3ffd8550b567242660200b769e1b35e4d53bca851167e696eedd9c6eb9c83bb1d214cfc75481eb8cf8f6a6493719e4e4af1cd753c8d9c55697220b66035262e8262861a7f6d643812454eb6144fa256d2f4e2f80a51b78da37c3a71664d5df5d03e241dae18db36daae2e0a40de980e71b7adaf2f05287899667786626793b7730ea79465dcfc4b953478ffbd90c7eba3c47e193f1a97bca7bb7873f9065fd9d77e711d5b4c4fccbe72c004ef28ba64e5a5e4b49f046da07b05adb87e9c2ad399e820f6e2c93e60c2e383a869e8f810b3d6620fe34512fa7fbf97c287ab7d3b26e627df80f6507e4f01445892640955aac08689906f3ff12253c73088b6df870af2f625da361e9bcf4672941d2c56da170ec2c02ae53d4aff6cac711630ca3db2993c78431b013fa03daee95e9478e4951b97421749b35e8354c80294cbb5d5ba334b35500790d08e5159d6cb5ed82bb171846de9ff0ab24ac69a73a8ca2ad58e7ba2eb85ae5604c62bf3eb07ce0d05e8ab0ac21797cbdcc21ca432b6cea1b3abbce4195851c93304180d74887470099722aadd24867f3465d175ce434bb2f69e818f2d4ca452e1a4c02721c1e4b9ad6962d51d955d9d5fb28f7fb4d2c3c724d363f4b5d7188b97449ea16148814277cbf62a11ee8f9ec534912264e9c966b4e6cec5418c20ebda501e3cc180fc92ff3b570a48949efbfb78a11e8cfcbf0a3d554c614ee05ffc2153c939b10f99238a240016303bfe4d68db19c46b80273a048b47693c581834e2cc2a28be48f98ccf328bae4729300ba3e875a4af18947ec1155a3d9877fc0eb525ab9a47c1903724d344531c00e6af233d4f4fb62a8930f96fff6ef1a47e120efce80efc0dffbb3182e4a52d3754b06d3601161f4a77f8f417916dc68210c756be49e739928a715bddc704d9513ca7f85f25a858dcd35f6798dada857556a732e65bc38ed3e2f22a206602cec2f10e4b354776e1663dacba501605cd12a22a1a0188147a667bc623076c2f7c21044bdc44c0f2478b199972f9ed9febde95c882ac796a7aaec765ccff33db4feff8f9320a3cab099ff98e17e2cc09902db42ae3238a260e3158498e844796d884419ec2f2152196395ff31fa73bc328a45f99d22344e7b37290e9ee1321f2948270953588d4c67bdbaf70f0b3a76d33c72acdd608342ff90723ef72485d7f126f0874d06b063a38eb8a804194b968300a981f456ed25f4d5363a2a170548cc0ae6bd649e533dd4c0d539978c6cc34bbe31a06c6a3a9f63eebe2abf24791bc2dc52d11f893c82023a5ad251cc66a5315e5332cd06315a53c252373eb2abf7db847ceb062f34db35e48f9db94101e540c9575f9d919cfbcc3b39893028618520eaac34a2f802f076a6bbbf5754042b7de5854e6673412dd640bd471df0646d98f62ad37a4d7068cc682763b36b391ef29b2428af13e8967aba24998b717c564b913df1179444eb40121caf56f06667a6d47e1401db5bdebf8fb7a8041370e842a12fb6ff374723d98ce0cbc74954aea176d93be33261aeaea8be9c0f3e0acc840f4649bc9c41b59fbebbe08ee0cb9aec6a7ec5dd80c1ae4ded819d355a10aa19c4cbd3d62dfa4c9a91f716341b93d38e99b5d9772e4485a64647d1fccf4b290aa7057bd350398ed3ebdb94406473028feac69f3aa2b2dbc19c5a63ef0683f25e9f3e6a3d6fc82351b6ae833a2234cff844f840ad45d35aa4d50079936580ad1d96bcc79bf16db41cd8b90aaabc9ee1d09194e4597f6ea859db823c725509015073c9bb763ef1e93d3b4452199c79e11fb8e2b2c4b94d6de89428d3133fe896fe1eab6e55be1b69bbc596830f298d76eda12ad37859365257ea3966fe89e3152f7eaa07c0d9b5dd9e60f9c412cba2494334b46ffdc9f2feb0c4ff1fbc9dc326eb7d10af3ff785eceff3b33dacea7f012859c7add96f491bfb09c024d4e14f703b02238d5b80553fb5650d1764eeed47a5f8adb596b5024e3ea3c59dcebf519c26f62dca9bdceb7df8a04f7ac240b4c3c1f9acb0bb02e741837956b3339e8f51b53f748d88730f4fc08bc18d4f469c1c84440dc6d1bdbe9cd173ba8d89e5d338efc641ffa8ad8b5d160eab7992696dfbf6c1181e5f50500631793b555bfee3f9dc73db4786f3264e011154651411ee07205914e1ed226528a9731f302e50873b842f8c8fa7aba7cb8a7c057a5ba7e8e909f24b36049bc5aa4449af488c4389a6f0e09afc953fd77bb83706e0f1912348b97503462b23373307e433c5fc3fb0e3276f4eb8d7157e07932b9fbe5e3967cd39cb8538ea22846bfc2af3cf07acc39a31c5f0ebf5976416233e183c28057c2090da1935c90074fc2a04368c33f28b7217c8c8bc772b50517159b884d95f29e8c68c06655125cf8b995a46270b79d014e0621d54e63b0b5f8465c8bbf8ae37cde4c896ef09fa5dc3521569c614aa5928947a39dbca2e5eea6448900c0e5a6f79f1750ffc79e5e6495c1be892d8ebf0553cf86278a96c0e971aec589da2cb9691f57dbab32a4f31c8bf560bb2dea55b43dec3e1530d5de610ad3768963c6877c0f9c7df3da3a107e684ad194eae41639b85c5fe957d69adfd25130720659bd9ac033bc6c16c41304bb2075c90d125d00536e5006682f82a058b677f63a3cc83fd1ec1b6680e9974a0514e1a9ecebb6a28fb0b31eda37226d1e61b168681613e5c4f41f95a100f9b8d6a699ca02d6af9addb1fd753683f69093e1615b184c3d271a0a3d5befa0d6cb903402abf7799443bdf0a3bbf59c7bb549b42c40e365a07e318cf93bc55fab0cd27bb0b2233b2147b0db2a55aff72e45a06866ac21e8ea55abfae7a7ea83e2f70dbc289f3e91c31156f005c4ce1a9abc486ca50f8c4c873809e26d4297b41b14b293dea57213f63b00ddcaabc87d2da3a24f6bfd6b16e3afabc20e7e8576afe0618147778648372f4ed2fd5d27a573763e7f3fd846ceac2732285fde1c223dd48b02f787e3950258b19df26b8419e8be8d7a7522b7da2d391d63b5c3c46d418b9fa763591290e451a99d6e59364119d70fcfb08f36d0035fce22c4c226be37502fdd2f5d7bb259a4c73fa5a8e6c1637a45fd76603c36aaf5d4d3e17bbb8b9bdcbc229027b77fdecc6b135cdcee0171f2c0724b384074a0b5c205b042eb5beb7bb4f65a2a3e5fe03335b6e857e487b1eaffcc8389dc2070fa0626a5aa4ea5a2d7bae6c1e788e91a739778dcbc42daafcd647ad3d777b0984d21b536244e0f6e5b3e728be21f91c9f800f79e7c8150c8148efb90939bab8319954fe64371ef8a90a007fc9c6ae09b4b12a1c21b38b0975adfcd6e60c077ce09e1453a7a42cca3f28035b899136beae74d15dc0ad14099faf77eb1a18ebbd5789633a75b493d26fb6f7a344a818a555700b240edd3a74c8f467e0ee84ede35f01499b148eda7a035ce53f4333dc24704ee059516c84b2b824d49daa799656c0aecf5ecd5c8929c1c1d416ce5b0ba5c9b558e5d2827a2b37e8c609961e6c7e4239fc6be8432946738ecc122c472c8f264e7caed945a5470de8460efa9cf9c4ad4ad9aaad6d413bdf6ad61aa721c74a50c1539daee08c6f01cb5b931d1ac58ec8886c036402596fcefef817850e643e0fb5e59a9879b809dd390e8148c156455c9cbf5f5429f94a07f23cef0f388cd32ad33b8ee039af7f67dc66bec3b93652312ddaa4c60baa3454edaa8b8dc7c6716bc25c5fcf47fb3768596b33d629ed1b0fe4c3bc02d0f3957b9749d347e39b80982a50f7abcc239ba75b25c8c939010abe69848d509f5dd5459921af84b292687ab5203cbcefb011ee889d66e313fc8605632501f8a06f5c7a9b3a088e5f3391d909d3184cd929030388daf36ddc66f6ae7bacff41fdb193e2449dc4ab1006637dce7172a1b116d8af04e458afbfc5c47f58236e75dbabe0443d51cd24ee94472dad033104a000f8baa4c47ef1e2a35741a39138da65e6ac6a2d5e09412064a3b34d903fbdce6ecbec0f814c7b6d8717bb03ff44b8c0e9601abdcd6249cefee0d55820831462e8b90dee23a99489fa6cb721747a59173c621d95a5bf8622eb675c73bce55184f62ae4e8b37f865e83befba4f8c20490681c3b5cee073e42b29f0f486a4dbb5e21863aa637b59713aa75513593040053f4f43bbbb024ba56dbefb87f34a39b15f035d7cfba3310d0f7f97f7c4e2896896854e759f4fd4287efc11dc022cf39d4ec9f830c41e139bff3b34d2030160e5a4da305dfc17a1dfc757c08b23bbaddc19b2c0605d6a75905250985ca42b7b0ed29495ef4208395dff5873ffd874acf0487452761806db9cd1564ed218bf1c36b87aeba411800f055f74c8a4a0e6856c63850afc9481ba23d4c2d4fce13ad91fbec3ae16db1d977880432b341d9fdbc2f35b767e434995a7d51ca7178e2d460c6e2559a21f3f772a0a3a18089efef476606e0145b4fcf29b6aca51bc8014c79f4f067ae05e74029c45d01bbcb58284094333581d59ea55910e624176577ff24ac9fd8e6c0949de31db9bb2aae1d8eefe0441c75fb2b0431b286b12cf94cd3a916751008fb03f6ead33f3596db450b9b73c2ffb775fdd2f8c514b3212988b24f5bfc77dc5d3a34840d77d8c6f9d8868d74354510ea1cf9f7701992bf9f34835fa3bc752c8f433dfaf3ea0c84b1dfe60e0c23564802915f76dc1cb5ce03582e21153c73be3826fb94af1f3a96ab60156463169a276663eebc30a58616fcfa9addda04d75b01e95599669ec8c58e66fad7a0957975be9a8c13953c6c5e3324b1db199c0bcb9296325343f020d902f67db1ec295bf9b13f23c1336acf7050dd5a62fb8d75d692347c086b9ca89ab11a86386e58a87ce8589a0f31b61712fa2e7dbca85d7f44aacc1a01092acad040d9fdb64fadc8c60bf0d945b8a9ad0dd91d032f479790dc8165f4864323ed425a3cca71b6ad239fc10cc8abefc9]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 0780af9c26d5c1ac654fa3f22f069b829c1d91d5b207f51e67b28a7a1fc993ad

tcltest::test Hash_SHAKE256-3.41 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 6a9213162b82e8e8fd702d256324a15d4046552d460cbe09b01509383494ae2033b048c4342ba48b904218436ed51665f2c8009bb2a93e7f6a938fa6f0529cdd6ac7d3b2be8e72374adfe202d6b24778c627554c942465427e40c8397ce05b68759f5be8b2f47b72930f346b81035d1d232afb48d5c55ad956e45df9c0861249be00896cf9a3e7c7d399b68458107fdd719b9b975bd446cc5847f5eea58bea09abb2054879e4ddbb72460f574320d63f1940dc42109950a4ee30392111390a2fa67c76841cfe85d8d8dee8ec2b7d8acb81e1674fdb5ca1e87f68d099edd69a4316288526c93b08a56e29e849f66dc2091248e3c9a364602072b8645e22abc4ce637cd93868e18eaa9aeeb8788e39a682343cf9b552fab6d531e69a799700ae57f4411bc1e0393e70c5f7ff81d9295fbd5084511dcf66cb8d23ba1cf1331d8066333ef2ca1b8b417e580a666ac1841542cce9920802f0c6d3b0fe92cee0496383873d075a001fbf5cb9f0953d2d94ef9a1233657fd3e0d02c4078a31985cd7f3758040179773cdf9352713302049f164c882a71892a7d10223bf1f8d909f1fb090f5d892f682bc9aa8a54e8bf30eeb2e098955f2eef10af3c0a32391656fdff82120e4785bb35a629c8635e7e98c9eadfa93ed6760ae1d40313000dd85339b528cadfe28258a09e9976643a462477e6d022eb7f6a6338a8fdbf261c28e8ed43869f9a032f28b4d881fb202720bc42cf3b6d650211e35d53b4766a0f0dfd60d121fa05519211bb7d69bf5fcb124870cda8f17406747097fcb0a1968e907adb888341ea75b6fcfbb4d92ae8ce27b04a07a016df3399f330cb77a67040b847a68f33de0f16a0d2bda65aa485d964dc18a6aa4470328a556ee993efc1ce8d4d090fb9373cdd5a79497a7395fc94d3b522d14fe3edab4f7c9a7e8ce250df17724c309eb63b71ebdbe759ad6516a67b21afb1165b1f45ee52fbb1e8e9e71c5f9fb61969c1d37c5bdfdf6b8f7c9bb86409096e8715cea971bedbab316b4c2d6cbd90f3a2c2cba3b26c78d7a14253719756762f2a77c27fdfa78094eed048b946b222e5d120ec90f96cfcc66b20067a1bee3f1c88eac26e41f73393a87fa368f668b4187f43feeb38c6b15f767c7b7af8bbac5e28d7981e9e953cd0e6e225e483c58eb43393c95b7562e0cb49bf7b1a37a4041d92a40a38fe69e374306096d2f5b3f8e076781489ba28d0316c52ce02df9091804fbbe1646a5b70a70e61bddd551939c4cf5aa91d0e00cbba689b3cd9f86999b0e682e449e8532a90094d63abaade9a89c6a14ebe7ad2178ec4048d478b1665d5df63dd9083395b58a88d50e4fcec6357e3b5cc140486fdd408f488f69e7f3d16c3c492e040f5492674874c31532adc55affeeac8b704c5b5bdd3f68b3c8c689b190fcde2296f3c23f4a41f3ab8804cacb1e572829834b7586a089fb16a25308d69ab543e45907e77b04c90a632d6fd8371d02ae9b1fe1be697fd4b0e3232db143c00ef9b9c3e564930e8691dca1435037828dca6094b3886cc19c24a9b9bb257187668a137620bc1fdde704987233d544d564e61a801576192c4cb0ead48fd7f887586f91de5e6099e986ecf71e95d9d79c049c1970ac09e70663002712104b31165104b56ad2f469b7c2a5a904fdc0782d0946edd4cbb66ef67b7cdee0f0e1c3daecf3eeba42ea37df46e90ed3d04b9f2edf91182b190e1953029172df865e193b88b7be3b12a46ca6700198f9c1bdb507e3e528f208636ed274d8a34c64f2c9bec0baa46bb6d570d3da99e7e526a9725ed2cd80b80e68e7cb5edcc0d5f1522deb019721dac3dffcbdd31c7c3493913f8a18b4cfebbf810cc42cf85c0adffede36d7b7b6f6be3658eb1603b6567d0775102235570b804e56437bc5e539654b5328cfa6e44e0a7b3dd20fea36c9676ecb878bb9c6a5f5234ccfa7cfed0045ea154735ef3a4f3d00e4192d2a6e1bd749ab66b1dc8f3982a268df5d70f3ede63dad08c6fb1988ca8a0416fa5edcbc412a8d2430f82144bd3e32e8f9536a60cac882e3ef5512793759165203f1f3292983e95685a72d4609692372f7d1d0f7581d1f7f0b77a5af08009350b68e51e114e868643c63f3bbfbb5b303f596c810329e0b20c7ed5388b112f3a99e8e798287ca52d3a1a9251518a67a226efcb059deedbe7f9120ac94c6f2bfb3286cca7bf69c612b620121ffc4ade154c07e0a12b16eb1f1f3bc0151ce426003f0b3d54bf5e0fbe209e68aca945e80f196b565f96ea37e0e6c19f25e1b648d22640e1a60ea3a8b8de5d3b0041c1ab1af5e2d347c4b2e8b5b66b5100852eb8f851ea61a59580ba885a253424aa0752bd4833ff609eb62523f7027baeee949ffa26d464593c3d6db7fabdfb1fce5f03817a2784b20c3d17b4114fc838063024610fc593cbec21e8cc28ef37f99310e6ecf3860745f791e5ef6c17dda5b34970b4738496028b75544f4b8190bbe36425881b18332245f8b85c702565fddf29aa7bbada14060281d8c8ca3cb06ca5a1e5dd5ba4ad50e0bbb884864006487116fb3f4b8fb5e03a8d9dc00fe83c14c110517119f420d7ae220cee142f688f51598b86906b22971ae1cbbf814ddfbb1ef98ecfbece32c09974dd2284bb34da673a81dbf036033389c5894b88323f6aa6a4c77cb3fb8b1288fb52a93cac122f9b0005c3d3b7ffbd7180ffee8c610429405822015f43d4d562fd940aa6caa998d5f541c8a1b7bf3cb95b562ff5a0d7fed45fc7e7296db51111c3cacd28dca21cfd5f5a71c3feebb8499eb6962cb860f34bffdfb67b43d5cf7c951d7b2caca4c3fb877b469f542a39099146ac9771460f8b8192f4bc8bdd178bbab59b19005896b7b5cad09e8124c8e17b2ff89f92315a7d2d072b530e74ef267cb9b557a1669c19316f96284c826cb9a69803ace5cbdd094a67e2aa944361352152524e5775de0a429321a67eec2e7958aa532730b99f1822d9a228e5f274a0f2a7f966e92d6270315ef77edf091409da8d72763ca6a890fb86f235c828304f37e132072138323547f7a21a378229517468e803d138015b1e965a39068d9e2b38278599c53b563fc987aae04efe72396d633b35b617b15fd330629c67cac51a3ca27b849ee1d4780235953aec26f9aa0fa8f573b5ecc086617c93c7b387ae058d799b3074cfb6c6392aed8fd8a2c58aa05c9d27945f37b612a37420b26b5fd571d56d050fb00413b58d3947db19dec369aabcb81c171dd92ccd8e102c1fe27031de7a6c362ac446bf8702cabd344d3bb2b8d98e15bd7ad6f8216700e84b3fc015bb49cbb3e500479f40cf7f469a19dcc3ae7c1147f85795bec88956af967cac6495638b4c8abffe9ddf28d03df34a8ce3b52ea97a71bbfec6ea7c7c49a8a31b68934e15cac10a53018d95246ce9e9355bf575be75d0aef957adc6d87e2abbf767de94d0f431e82e12719fe49922fcbe7495dcb801bc386eba3cf1d416c4cd27aa9dbc239483617719b4cd768d468e0f73bde8ffe6dd624538bd85d6d81de09379f94f78705f7d165e7da84310fea410a39723fbecdc3366175908488ddefc231c1ad436526b45f329f5b7b3eaf248a94b481414da61b4b99f370491fdae29bfda27d3c40052c0f6c243822fe2c981c2b2fb43b37a13eb271a800019f036704ffc49d58c42baf6087091911dc12b584321d6393e929be296ce5b85482e1ed8bbcaa761f5e24cf00f7d046de64fc2d314e0017d1feba0a1ef04f11a867e0d6aeb8c6aff67a6afb5f42fc69df35433fd1d37a597bc4dcb2e1b0469473baaab2dc78ab9374a588b4da0cfffa9ab9829db476eea107f80c4930116ec94cf78a129380cbd9207be8ac1faa4d61a75e24a7778ccf76fcf4b32d88882a28aaab1976624599d9704a15218e9f87476bbfc3ed8999af53c1377be039a8fb2b0341d34ed75ba82cfaac88b5a57110148e4acae0693210b00b5cc0f1e1e87458ed68321c5117794c061fdde902b38a41558bb420a4ca662411c12ce30fbb082adf6ac06f6e2d8faf49206f2c14db585677ef1a1ebae74218ab011a2421b539294fe618989ce24ddf3a3ac71f5a4d0cdc5c01574b1a0d27160d991345b65b79ccb54685585bfa56443feb700341ad1a4b885f1626409077a4dff592b83c126c9db628910f29ca1b86e09ef498796ff31c7364b140dd35c63d88a3230c217e6414b8e8e63d84d6100fc2e1cf4f501a49d7a39ec31b4e519558ae2e4eb214f402ba3423df540b92d6573d405a98741060f59f79c625f278677e96f3703a7527caf6ce5606f31ca4d0f5d62730f443f6db0edd8224f1881eaf27f9af3215d06e2f72ddfbd78b467082541422ece34e323a8bd45489fe6db8fedd4c9dfec4954ba286e971db9d078a7d0a8dbfe8f5f166f1e51a4d4fbd21dbb916e65c40d75244b6db87747d98de672371995abfacebe983a325e8f0ae22fb706d7d76a2be95fdeec91e60581f397b1831cd8fcb688c4e726e7dc417520f9cb73978699efacebbbcd844c1d590b74acdb390cba6c9511a407f885b2e394643e0034d91900c5b22a3916125808dc65ab68f999adc3fe8c1708eec0a9fd45565ad7383ab1083f9b7358d19e7e376e53f551e3e89d64ca1c874e50f7f06b3bb8651d2b102bac1f8ddd513c59578dca24d3bf805f52f601ab3e04a6914dd47e73a8fd93c24d966f72b14ddfabaab3f7c28dda56679322ac20825079f689e0176d6b9dfabae06e3731387343fd4150fd136bc9ef692a90d1629c5a4f8d6c380d90f625e75fabdb7db2b7ecefb5e20de501b4b5d3cbdde77b5bd44bb3c0bd8468c390bee31978864bdd79df6b3d5692b673b2c588f775cfaff2714b2af6466b30ed829075500d17a89ac57540fb65867850ab229853baf2770fbd813e98cd966ef815c2256c33359dd1e2d5f559d6923482e8f38b4973f5da9afe16760c1bad2acb8e7c7bd5b288306a192912bd735df1f0b161e73f6a83e17c7d325abbf8576a4e38e800f452b96b4db29620910290b7824e94369f6542929b82fb730d2b3c38695a2b3b2fdb705662f546a63c4cd28e2006b3ffd02ddaf7e0549c486b7e059b043b70b4ef1454f89229612c2619cc7fb222e7cb3a8af418333d3b623bb75a9c0724ddf49dc60e59c3980e3ab731259120ea5721454338fb7d830147e69fe2415a5d9a829fb94681de887659575b86cd52a62c8959224daaa46f1581d5fe4694e62ed0e65fb5a379cc42c1106e619739319e8d8bdeeddc2d92499f986f9c2e9d91dfa7a94382cd48730e16e86409ffe0a31aa3b03c6d8c8a2d59c9121b40406344b74652b5e76df6bd339d68a11c67c79161957fdb6a06cb5fe6b97943b427eee8ffd6691cae2b8c91fb80188d6176f8e4bc8c8124acf1f80f3a97544ebe894663007e77e09dae11d6ace48091a2d57a8273b03c7dfaf617259b8c2ca4270f749fff6703687d9f8d768ff32913a52b5555ce283a4f1dbd328852c088adb6607f8247b8951e15a50858ecd59a7d33219144141d0303deed5022a75af0d035256ff61f9ab5692f698b640bb25b35145f37368fb61dff032e7adae182ec786a054ce2ce35ecb191921d8233b1f5a5108c4f15851c12ad542ab7984a62050a1fa91f2d9db0c15f04c9c79aaefaef33ef50dfc83f766a749b860f44281fc2ef1ab8f0c1d434bdd950b69094c2b6d1497855f13705edabbb9eed8ac7c4e4ac8f24dbc585bbe866883d008058b80d244e74408c4a1fa95fec2605310766d7495204baa86199f547d493509fcfd8266eaaacbcb9e9d4d10d6efb760bed562024a184fca03db882e526194df6df692a3ac4e56f7ffc6d8e3ea9e5e92061dbe8c2e26a49b5015eb8cae498a08c71b5400d06ea01e66b32077905ac06794c3e57ad7f7f4bf096d4bf7d78d9f0696e029171d7821bf61e6b6546ea17741d94c8946cde8ba758e262be8648a1e696bc9945ed9f7465b8fd60cf2dc0f0dc1423bec887695608f6ce4fdd6ebebb2a1a45c2830ac7898633f1596eb7effde567df6b1a8686a714d042e546bb40ee63fdefc4734eb589276fe09d696bdf07381db216b3f29f4773f1276a1ef838013948a4e93e43d23cef75b475e9d2f8d57c3e8306ba531bffce5e632790aa0dbd56024b770c718669874c53291672a3315ad33984582f6295cd20e064c15b27ea5f33ccb7045f3ada96fca70117d646e17ae3bed8b510dcd117408469dc92ee50ffe30ff14f955455c58e964415834bae8376f94af87df17d55c6397d07d8cab6dc1bfb6d149b3ea3bc090a3c370318601e94d2224aff095f2eb8e6e96ab423e59ee27a727cfa5e8c2275ea2fa6dc17bff24631a7d21d8c414b2073f62fae61a6ee417449af391ed79fdb1e668999ae92a893fe22b95fe2e95305c7e97b4eecbf743fcf3bd4e0e54edd428d2909bf47a3e78421db264d731fef70cc0d791d2cf8d7e4748e14771ab781b221c04ed849b85820831a4270a7adc76869a94ea28a1bbf384b8a968727db3633c1727f6c1c9aa26f0a27344fe75a82f5860425656ceed6443c7983977382a2ce5588c50128116e799f49257299edc91f0c6724ef3b3bc10f30a1023066736d8ac64a4721d4e564472bca3d62272f43efe11a73c760c82ba10d4c3cd968784070fa002e538add2be094f0a3a6f7e8996cee653b75415dba03bdc0581ae157c386daf2a120b2c26c4cc40480c673df729f1b90a48248c4163c26457f7b39d99dd64e68c90eb25cce94a14dfb4b01de778e51e2d575dcc4e8543225d985d8c676683fa9cda7f373fabf15153dbc0bab504376a4f7d66424d854c8a68dbf27e6f84293fed673ddcf97d507a26ea1f80fa4c6731f312e4aad8d43cf12c4b28c01c96e34af0cf9d9374edf5e3eb48330d21b1d3198ac04f527b02931afa5e470de91f4080496c14d75c7e3042f3ae81bbc5e52975a8fe0cd5ae80fd5c659df3c46f9daf9449d53a24fa9ece0bd265b2195156d8cac034a3a0ddefca39e072b5601a82aeeb94838418e9dffda32a161aa24e874fad530cba40a3af88381d84e28d748eccea9c0f790fa4a26dad4d2841e327d71c81e3dea7317a30b5db5f4d218907e26835d2c18f95a5968c8ede24be5877f6bdecf53300ffdc13e1983823f90f3f4e2f41db523e37771ce8cc3f83e67eb946b24309924e1833d989f33aa1bf7c95227093183a1b61a3b5e0f9e3de60c2664788288384e4f73bf21d70d96f0b5da3ffeaae0bd1ad9095e2237c8d9ca3dff989ae0215736c294eee2aa596b4532ee646dbf738c14b60d8322ed88f3736040d8d926411f65a3ad73e2fe5e54a3d5cd697f30321719b4ed52651a25b367dfafcb3e3c31b8625887f52abd657791083ef539e56587b03b7372f3a4e8423020151ad00a3949b54bea1dc0cdb6fc97330bb0a5c7540362b3658cd47519c8568d396d9878a0fae7e29d93ae18990c3dbcfa44cabc47b4b5848c471173006c5f8ce56a9c6fb0f57f876afefc8456cf0c0cd456b0ad85c13317b04cb088e457d587dfbce6d5af5f05a11707b0fb346c8b8b60916083575364d29942bc9b0fb13fe5f0097e94e66301986d55d4647c0b43a1689ae1240592cf1e0ed23a93c7a1260ee0fa6a929d26fcd334916fa677d6bab7b21c3b7ad7a5fc64d8a4345a554f116a7736b4b91cd37ebc34628aab6af37a3308bd776c14b5730abf5fb1d701e488617d6664efaa900dba34712c5aa08a0b7f30259ce106e9bd7a8bacbaf21288135bb931801e90853335fe655d9b60c4f301f2fdb2c3f36a611a04325693d2623bc0f440122d17dc779558e72556f1c8bc2318edc2f9245fe754f29a8da2879b87f8f63a210484ba61430b9f8d739cbfed4c689cd26be1f1d88f1c8b67077a5a806b87c8b68b22497aa5df349cdba9d10fe3acb3ed017248ba324baeedaaf3c8ac816f92d8aa38b149249b4f5b746025a952aad918a31e8b18a747ab2674390d95a3753f8f490d1a57290997d02708e443002bb75d392ee37755d8291b4b9650c3376377e350eaab2a1aefb505ddeb356655f6f5c3abea7761a4c6d0d21950b9bda7ffe4dda7178c4c601650027c4f4198b9d53a52e19a705dfcd84955c4b0720b59]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result f7bf54a23d4adbd17fbd8b9e86338bebc8351f9bcbe87f8982b0e661570101ca

tcltest::test Hash_SHAKE256-3.42 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 10fec3f83b7a97e092877a5bf9081283f502a0a46b50e395ab983a49ac7d08a199165c848d9fd2329c6fb4d5122a655aff38007ef3763c2c062b93061b3da34266a5d4b72c203b37ca27be20f922792e50d961930b2b274a0a0260a81d86e2347e9171b89f639b982698e063365716a8f1cb0c0b3bd76e97c005e85638c08e1feac47cb06ed2b9fdb8a862c75230046fe9f8490d0be2d7bd2f1d7539f6536fadb0243cc622d45f0c87408b73d4170a2c404660c104b42b615f304d79dea84d84da9bfb2342d053709b49a48f4473f287ff9f9850adb5312e5927b93d7825f04c6f10ffee56305ecffca9f5452bab82272dea3ae28e4eb3c924eb01ad4d3320ae786a9250e75b48d2b34ac6bb102983b5d20f8e9e30e577ddc8636df2e43ba451fc93fa717cb9d920c6125f197b54bcd8f7f5dcad1ae447104e764534c5a345df03727f789db2d96240eb0788f494f739a2866c37d4b1e90abd0ed09a79d4cbfd96ef6b8ed2ae0f3f26bc08300451fa80dea98563e7b625741d12574d8737fe55bbf204daa4154460826da83832f38e54b0467159da59c5f6776922757733a58f7c6394859a4f406c5be530c807e27b5d2246764235048f37d2fd7938d22f8a53e12a61b63dc4cb0cba0ee80a0a8789443b8fdd46811e4de036b5a4c11f957347f130b49613ddade8a6cf1724c34880b1030aee8c450fc598ab79ea36e6cc2916b45bd44da600ada72710063eba8e274b839ff03d093ec0083a3195c0b03c746632940b027e9695f145b9fe8178c247bbc2372d80561505d8eac5eb86034d1be074c49fdd21082b7009b34514844aa8a8c8b8eb7eb2fb5eafc41e35b16a67e82b81d1d90719bc38c97ae42320669012bb9e0c735ea8589135ce22ba686af2a1ef61a501a8ee1c83a7a135e2cda7fa4d9c4b190d49bd95671312bac4d48d560fd61d265fe7268fd6b0848ec942cef220f2d7c900677b18a8f198cf991c5afbfa86bc3e3aed4b7cf78c2dd81fa863df55664b0296df694a1c766647826a594a2aa746d4dce2e44dafe4a4f92d26ee29b29faeae15da0f938a4b860cc7e313a966e2c4cf8bed7a69c660efdb3be5f837004608b4c67ff65cbc180004b0b10f8177df3d199036943804a71864900d0873060262fcf1f7a50b7884da1985fcd53b2645b99933e6ba223162277e76c5a7448e7cc36ede69a40a87371e328debee3d39bc4037bb25758f1438221033355c125e5b33f2d4fe7cbfb1dad43611a7e1f178eedbdb721a4be776d213021086af464048ba701ddeb494bd15020f595836bead80916d9eeec6921fd7013c55e02846f9eb61d0ff30d4ef758fb2a4ad24760b9e1d6bd588c86ef8d7f0f5a54a6a507b54eb2ffac31d653a9ff1ebdd55362842146b6ffb78d1ca8266c5f627374dae4d18f12dd6b0cceedc04e2b6a298b4d4cad712a7c8b531629693fd0ca963b0cb250ca4614d1065f73d6c0b1adbc0c7030bafbb1b22890fbe9e27413f1417bc2d69faadd545291208c59f131f7013963b6d640ed2f33a936700eb38984e9b995e83a8b391a745f9aadc64a4cd49da4a0758bdb2d42111e7e426a48b1e40376ee6d9de5f9b5caa4264ea84632d4f5c0aec34845029955630bd761de1dad233634bd56659fd4ba016bf57c8fa4668e3ff74697f8fda3851997b5a1de3d2edd6a217dd0748bf5b719d428bf511207db550265f7718edf14a47a5396b3910776950d15b88d4e77663fe75efd64fc4771b268a7e33926da78865c37ad08a9c5a349802b6b2a67f83c062e0e9325d393c5da9292f7da65f4454195d87147e7c7c7fa031564d668e69cef00ce2d0e287b6c3008ad81bfccdaff68bfcc7ffbebac79290e6a321bc1d12d6d180437987b7cb955436e3d63bbed0b6e527a258f25e21b491aa05f54e33651f2cc472f5f4d0651accb3b6760b3b8fdb4c6780e9c26e742fcb03e492c7d84af32a61d90cd0da6b9b918bbbc3164bd4afea43c978d4f4a749657ca8c1cd14a998f3dede86c4dec560ca45588501f68778e743e5ced3f7a24b879ab94808f06a57aec3eb2a77e25bb1a06af7837744907f6bef3db365804d7d5be77fef22737678839967c192f115d63b81ff861e3ed70c9dd037ef3296902606ea6380c0a6b3439be6ba13bc10db16c212d8569eeb4567a56d3c49e341538fb32bcbc18d8f0a001e354be89e4995bb5ea6e9bba054c0d7ac4eb58a20897e018833207c2e3863f6340b8408dfa32b0b36c49c7dcc7f31a5dafc087a9077f9c2ad89cb774ea9a76e03f2cc3b2827854f73f45863c976811a56fe9fe1dc12ac1a4bb5327b93e9bcb0b6718b4821db8bce3cbe86364041967c49dce087ac637f538a40bf4fa5ff8c0473112af871c926d2baab8cbed8e65a13da1f3534a6705bb491b1d9bd2df6feb262580f13c1f93ca11442d3c33a6fb429324e05af754326848990e78bd3d3f901add0a361b871b684730bc30d0de38b0478f1b7c1bfe4ca0c996653823ea0673b79014ea9ff3b7dc3ff8fc463fa4bc9edd591b5322d592d94eab9846a17652fa6f17279b53d5f78a6df553f8fa9ae552c71b566ca66ac3963a414e20b0528398a3aab8a4b1be38e753ce69a57c114170973e5325013e5d4c3eefcd52cb1f36d317f34eb3441d1a9773dc83f84eb86f7cc03a9818edb0ae8faf0fbc597c2cdb3e2e69602385630b0f50b8594dece0addbc4b8abb4a67255c51d3981a12e1bff3e49758391e03098a37cda5032c13abb122700f484d5e3d1810bf5c3c66b6cf1580bb02f7b0ef632185acaef338616e5b469dc1915f695b047fdbcd945be80701fe7a1ca3b4c2465c27d02accc8615dc370f826fc47308608e6507588b8206f9fa6fb2fa7f326bb236460a0f5a5ba7fd2e8a9c8f2cf5ac60c8c45dc8147050ed8bf67c26a35c1c85e868599d89715dc6ef5d92fdcbd9023f8bae388e8ce40ec9293e55e54413b78f5d3669cdc651a7d80e1b0e120da79a6b4b8520323167811b6689e8acde13dd0d1942c3169d97069f1f2556828eebe5628ceb9d59ce756862d87bace3ddb6fdad810fee0e7b9c0a8a771f14c5ac1063c3d444084b9088252dd3860b20cf8789df3910532beceb1438ca6ab13201afa5ed961119ae443a37db0c3b8bfa20001210b5d68ae57e0ec4187d8ac47e1c341c6e56e519f845e61108d6feb7c68bbb16f06bd50dd18b718aa7f501b6f0482847c4ab32b19002266125b852172c4f1318ecef9e5456a1ade875e572114f3206b86ee78c592c257578b044d81271f69288649594e70b6d2e6df0b33e6bd15659deebb05479131c5df836f0f3425e2ec3f606125b4e662a8d7ba6e2c91f2d218c3bc98a1da9fb533a403841362f473421e23fda43e2dd8615a206f8c4b3c920384f66c96a643b66b4e122ba0311a3c336cd7041f15cf7ec8161af6993b21bdec89a6212ad2059c3386b94c00cc21a387d18460de6054bea4b4afeb9d8a2bbb9c7ad39ea6866dd054f4ffcf7959911205f733f8294842ffbcdbe836de5fe2f5dbfe86cb52ec04b8963fec9c5401f0f07683ecb448f523a8d934cbbfa5e3cdd170bdc690752951bdc00f889cd9ebc8a5a220b57c828e7e23c366636f393d74b825609bd55868dc479c0edcb54f40a09951749838213cdcd7421ab52ce4965f13c08f0d8244cf2ebff0e2efd0002701344b279cd06b26c42c1ef8cbdfec1617480af1257f7f86ce8b8533c9d632c972de57e2c92ca975be8a1ea7ac719ae423c1cb2feab451b6441523aa73ad2e4d7bff3f4d2835225052590cd060c836290be4cbf0650a048719c491eef43f3cdca4ffc90fc0d120e00901ae1af0ce080c581bd1dd9c67df20d4ff99a85472a39e7646bed09ae9e94c6aeacc2e636957b691cda79e99b529aafd3001809c30adba783ce53abc66c6bdfe7d30b3c1836d4f3e6113da64da2b4c1dbe921dd360a059334908f3302eff5b4b20a152120390fee741de3903c02d2fbb11142801eac5a22dd6eda3fe2bdc4ddb3ce6b35fd109eb15d4d065804d767a5f914f482eb564bef0495df32c43a5bc363ac87dafd5203f4f82b003e26b505691a60b2663abc5d4040c208ac460a1cfe2800f590bf71c221eb348be320101ebdab80f6aa8b32f0def85fe12cd6919af697883ee7a1f47bb09cf5e3b77f6d260c12f24bb03b5ec913b1ebf30504655835389ebe50435e733983ebb25b9340bdecf7312c17e9a42876f3e2a8e54df9d74261a11e5b12145b15369272201a2f48c8aeca12520487a17144c09d4e11c39aa6c95bb978acba95ec3b669da5628d5937c02988ff1a8db6bb1b222aaffe5704cac61b2a2961b5a626f8e4bf7c0aef51a2d1ec1a6faa2afa8ced73db6b7228c836fe6beb0defaa2e4df5a931e471c9d4a24a6e213421f3cf9f42324a310bbd3763c8ca666684ec70c9c800af9f45a154be904c47ed105cc84a9fe9e1713988e4e9bbb346e3e0112032d6a7830ce51a544049e2f8db03ea57178d072bac7a1043214db2e7068f9cbf11a7ea56bdde7955dfedeebebe6b00fe9e601693634bf7f4b30545d13ec203afeec2658512a052cc05d2bbf3e7b4554147df94b3062d845c0768e8900d45ca7502ac95b8abc94b392acec742f78e3bb19c421e0535ad59fba6ff27adf289759125cce74bf9c7a72fe708bd265e4748b2043dfef44239fd561a1e6f757eeb8996a0b9f6c98d0a1b129336fa189c7df0d53839c42aec51c2fdc96d3ca1030a7af80bea30abc62efb83e7c00a9422a0c89d80bc19f374936f554d622b9b3f54ce37dfd4218d4594ece63d4a6b23914e346d763b4cf87b6d46ef0e7398de8468f7c8950e45c87bea53dc0c2c983158d4c8e7914df9a4714dee3d953820d562a58c4cb40f1a07e98db4b7fced1e57f9d2fa7e5a5a9c71f6b3b9c36a26303a6a98f016c54d1aa60efda41c58026a01f4d74da449e7920b6c4d5e1305a46357fcb1c7c9315ed42d6cc8967bd61307c9ca4036fbe88b96bb52693faef05926d8a99e77d6909ab328836d0048cf858419faac4ae7aead071c39a5d2e9a2aaf716f1ad84c16ba74411d3597615dcd04b6cf68a0dfa14c26fa89271bc75a520509d556d830c1b0b1363ed1c6c756699da4d5e57d495a3623ceafd5b50b5604fcff6456cd739371c8da9213467c9f538cd3582a4535ce312fb4dcac1443b7c8fc1ac521a15bb38723f5c202fdc86113380b013ddeeb25c4b275b8b51eb6a4266d21a0bf3a31497a284f75a6d4f5c4320814782832b3867814d9ecf7bcae46a7b7dd9c39823c7fd041af5408b34aef3766b564f327d519d4bda8207ad771c4d2421662965fc67b13d5de062f830e0baab9b86da4a798086015aafb475548473076939adebb1565ca4ba534232a8a3f1468e33c45994678a485a72665207bf747bc1eeb1a7d72667e0dca86ed9206b4fcddff79dde4259329736649dc1e52fba27a7dfd518d25a6b68215a394a1c991ea7fd3cc75727e817648b00bb539157cc61979798bd3764cfa12503420411dff66b629db142a986a136d4d14f7570ba13d02da07d036ad80d22541e09a594826f9eac751c2f4bd758948050daa627d938e9c684e29a1116cc723b25009d1932d2a8376d487b833ca5f43a09ed741b379414eebf79df9eb356075692c7591463d82e9fe0c6c5e43921dc5e56e85dcf57cde822aa93527830626812e1be780a97d888527a378cf35f54c359d26bc1b8bc4ee9fee0df8132105a0b0cbc565880416c4bdb93eb4f1511a73fd906d84e6bc78f90dffcbeea50d5a566a06d3fa909e2fbefa7b8826addf2a1a8486ece625d2c18533258a1fc68e2ed018a9edab81c0f1ffa53626d8ec264cc932474be9c013c61c7b28f2945ceea997207aba8241b2840e24b2c3d2946fa9096f9a31969fc8b0454ccfac545073f232ec42e386b9bc0f73e1b7051a8e026861a34946f3ab38a6890ee360678b663229e2c80fbfd126bab7420d94bac327b35a361a330bcaadd16e2a2db5d6f40f90056cd6e7367237af61b17b19ba1a26af7a91d6a0e3e56d587e067254a872b5354cf13213f2823813f995cb3c207a46864c1a453485e5c164410b7de5e5efa14889d9a53afbea71110756c3a4f6cdd060553a2e98f8b0f11d3ea1150f95521cf2418bf7045a932ace145c2cfa44fa0c641f595a74443045aafd31017ac1836c5bfe71f01b1664ab75a70ecde510e942bb31e0926f724b053406210acf7169d9aa47f2582437443b2c49d6700e6482ba8c13359c3188eb78e2e2dbf8b6abeead08a576f6cac61d241b811bdb1c47adbb004ec2406391f7e7dd18c593d679f92e9c9f6593b2cad6ac6cd746d7b8c2528f3f69ee48ad92579a4c3049a2d8e273a68fbd28f7874b571c44d3bd2c8adb597c70ec207ab695f3d958b2ceef63ef425b088725eaef5288bccefee9a2399caacbbc5fc2a027a1b3ec2927bc4020a64f963086c53492e551d32fdf32016e0d2dc44a4b3b80a7bf7f1ae6177a5eb711829e2e41709c1a0f9aab92ff0110d035cbae4338f3e3dff63fadb8087211cf38c3bd2b408fec2cd54b8a1de4bc98081c6ad3ceac5290764edbebc6840b201021fb394f0c88ea73414cb9f818cd61bdcaf3791431c05115cf3b1d3912ad5524d6105bc12cc55f945a85804c239a3398484fe93c4ea5ec6482478a383bc076b05fec6baa28ac123a28de26418b8dd6419d646b6f8c692a0a6ee87cec85ac4c5fc275b13189a7cd0bb440f5feda0c115fd11c46d57174d3b09b04397c7ada9fd60995747fd61d56af059133ac9781ae9aed5ec495872eaffd12840a11a2b037c03c33febb977676cf23bb29724b53739cf7112bd85600859ada5137d38497dbc36137950e5519f51317a41f797dea290afa1fc4c565501f2efb5108e9a8f85587828882a096709b22e8365ce8b5ae988ffb6fd7853c8743627e6ec57c96396bb5a6100d98e5e230a59e572ae87c0787d104e9ac3f630ebade6a8fb5b3d7c4e6f5d6b67d1fc7d77b4342f1cfa1585dbf781c758a1c634b4c49c79c21b7f2ff8dee19621c5cc6b745a5dbeb943ad418092d4cfbbb44c2a8c04c9e7c51af6f542a4977fc307869eb5672712dc1dc75a02b989b6385de0b8ce08ef6198dc4d72a83adf86d029a38d976530d9f9eaec55ded6011953112c35f72b8d75a1d1eb0e862c3a59bdaebbcea6df0b52973d94bb8192db67a060a74883f71492748e485f88d33856f00937c8602f074b387848f1775a993f84eeba5710f625568583fdbc1cca4a0d1bbb90116fffc4f2523d81ae3cb7aaff84fe0df81aa32020593563cabe9bfffaa5485d1002abb50678ffd7385e1481263530ea920d78a59e742522f1eaa2ba9e0132076ae4bd67e61131a22637fbcc51fa0a08bb6601260f4ac5a3d82d990a65d40b278862cf4e1fcf757b0e76f7dcf167ebc0dab0b7121151b97ec3f3c98ff0723625df294be821e82dda4787834382e378bb868a150a433d530c7bd9ce9bbc80459af594adb68b0fdd4867d6189095112341353e956ef34234e5365c02be2872abff52317f49b9bb064df60f323496656dfa7d5ad2c0c024d191a9d72077d2cdebbb8b7c3b124c5e3b33588f6ab00554cb6fa57b37903839bb8a3ce7824939e68757f7f16b90a18deec135d32c836063cde963fc4e6daa1555476619b2c2cc71016d2e2d8b5557be835fe476e23f4606d8203f6a81b9b42c2141cbca3c4508e1ec63948d04c0ed54bb680ae7464414d29c8c7e527bf4e502b211c49589608dbd9ac3d19c7273c104d9920fa0a3226b5b6d86c73097af9b2d8a2fe6f824a5b968af165be85eee71337036793f935aa7e5ddb7a0715f6a65011c04b95e88852a879bc3a9dd24817c6511edbe20816d59166f9770b14d85c121ea38a2553f7f4f7ee36431f76ddd511e212064d017dafd61959ede6cfcb24e0467243868b3f496c318708ac385628dc3407703daa114135be2463000b7505a2d356fe20580959ef89d611ade15b190f8d249f1bcd7b92979c8162c1937e07400b76445b82fd2d69404be7883993af9236911d4d3063aae2fc9971912e8f32a237fb9c9fd0c2ccc09c1011a708a7f24d7777723d9c6f9200269418d8a3508fb19e0c8f540b013edee64a1770163eea2997fe2451d84a51d76299dffebb6825538ad2a4e2fb618ca96524824d2b01a00ce04dbdf3ae9aef51f8d04f6b3e80fc71417463b1688bbd0b63c4d8a50e981be0988dc58ae40875552f62ef87f43f1df40c1b54291a26d9eb2652a4e088aa638b08e5c27e433beaca517747bba44e8fc233ef00b3d8dbe930]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 459a21a751062cd65e2e9dca4765241c20ae265a9b6c031f80fcdabffb2bd890

tcltest::test Hash_SHAKE256-3.43 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex daf1e7ca7d3baccdbde1cc77dd67c8187f38700d1748f9899ff84f968d3aac5602f56a8f44ab16666e59c56b669eabd61020e910c12ca776f79c635947fe884996f243938cd49208469b9e004b014a9fc2e50c57e2edfcaea96f2a42d192350a00b019de3fff493aad71fe3f74d8cefafd4e80e960d41fbb1f394d58133eda21a6f79579437462840ba18d2eca6b5e702924eecf25293825bfc273a3f549a017f28f5f6b827b066ec8f4f4d833012388ae2ffd0f17347172f3d1452c60fdae734a3f1ebce25c5d814c32db4298e445caf43756b3203cf02c22306bfa3aa02dbd18d07a754d5e8e440023e976e25aebbe6404a0c2278bdddab3a58c156d7b447ec30b1d9daacac2404a8ec77bf7ac3ded645d84451367610510f95086dfd61c3cb3b5ac3ce1e820fb933d1d59c12264de5d0caa43ce19a434a0f461547af9dc825099d25bd900d1ff44f6921827038819b8d7b9c43fe8cdefcb5d6487242badd5027e35007c5afcd4c382cec11099d027db875ad14e1e04bff9fe0428c7b5b7bf312b7d36b13eca007aa97a5c662a658f30e43470e302732a929de73e4adf21c74569530260f3630dcf323eef10ff6fd91db5f0ace6db3fbafe03b5d195f11476a6005f6e71c2ee832ce7c184f660158e0cc4358a3ff293f7a6f817ea9033b752bcb84881cdf393e8f88eac2200947f3564d7ac14d78f9568f043b48f23ed33e5f059b6435ace7cc69bf0a6d216e5d6568db7fc5194f96d9545ae36cb3666afb7a8aa53bd019acea47dd5589b20994279ef2cce495f7a44060eff42a3b1e7544e4d74c4f6aba1b40b0605698506f9ea27f2fdca0521584244b1ff83217cb84934487fb4f63e2954829e478298b04df7e7fef4978cc0dc8ed698769e4c7f21b7f1ff93c9c6a47bd691ad644bdd06dd90427bd7dee6264e5144292c3e2ca36ac60bdc78ab6dc3df63c09b256b5bf1f0debfd16f461c39f6b217cee809caceda9d0c46f503f3859c2398d04f8b1a57d009e668847835e31bdad6ee74a72de9ba657ca5d47961d0fc3da0b4ad522322c3383fa8de1b390a07f009f096c15ddd5245e160dbb4be8e45d960af06697d38129353fa44d83198001d383e17ff6390ea66c5e1d35d12a6c021612a217730830543a9c47f5724744f89ec3fbe0846eccaf0af8f831b6600b53b2a8bc72545e9e370c96f583f1a863c5bac5b55850ed83a0a28d2b597c1846c4f443cc01bc354f6413c6494391bb60ebc01faa21dc43b81dcb7122f792b1a2c8635a3d400b2ab84df890afeec30ec0fd372846f796fffe88fe4b7ba68acaa3f07872acb7d1bd6d67238c85d01601085c987618240170bb74b37291e0c4d1cebfbc1386c3905bc3421d208781fb40ab9c5c8faa31bc447363739d1230e1558798a6c3480dd7847e514de3118ef32c2f3f0beb59cb27f9bac7c711591160d4631db0f88cf107c5e3374e4ab0518e4217b71f0fb34ac4fef6341675e2fcb3bcf5a17329b217b1ae964696cdd0743d20d9871e63532b23d2ba1afa415c6d6a9d93d655ed53ec559d1c11aff31e618036f931829c95f6b5037afeeafa01ede5f4d23ee199eee9742fc92b0240e693e7f30b48d4021838090fbd5251069ff8c631452daee5ef899db531f5264dc5a5e4e3643f9b3a3669805605a7d50d63188bf141350627d25722ebeaf2946047f1f796b88830bb9cf5cb84c881df6517b797b37ad78ff633dcb43268c5d52eca02a06b6cb54cfca8773b0a8a52d8a41a7089d646a7b4c79084b2071fc1510fd872600fe5393873d5787f55dfad7950e7bdc2f839081d1254d9bcf894879099ffbbc6c2d6969bc7c053d9052cf419e1fc09e387b68b117d0d6625854b8b2c43bc394542a55fef4ee593f886e6c932dde3df5c1363a34a5e36949c1bc93e8c937a855bfdd5f79bafb1d35e59b18f6cab2bc8ad19b4e3203c4cff814a82342a1fd72a8b62ecf03930b17c6b0c01c92fe0303047092ebd2baddd01659ffaee9d3f3e9344005ecc30986109bf0c4c08e503adc0ca6035a3c5195334b96ab7d05e783d4a2654affe2a3d5d15cad914c1249bd0d4a7cd6e4995053c241d593d8bd6614fd992de55087ea5e1fb0ef0e08486ff55e65f9f3cf114081439d1d9f0639d70d2ac2a1be27db648ac53fbf233c564d4a9906264363cba8867f0a77b751a2c2d824c5c8becc069bc189b224b82f64682584d409aceaf010ca3e2ee9c3ff20afdcb349abcb862f176c35b127b52a9b4aece978ad17aaa700b547b17eab59da27819ef650ce9f7e5ef18fe3cf0275227a098e99176dec1901af643c3b57a7f9b12faf75c1b05d1cfaba60f12488582280e23be05194f86d9a205b772ab031a4d64eac6e06570931732d6f822e2d1bc3e5e1baf4627616cc5470f509529c3e041d465e8825adeae44fb4863ff6da052c306cd27f52fa8e5eb607fa9bbb0418410e808d6c28994a5e18b66bd083785f86e9ed4a262907a74a484d32d46ed10582316201c216026fc7559be7dcdded71f898cbeb93f087abb992ab655d72e94eef0f558131f8d2a2468fcac20b0d2383abc66e7d6eaf61e0d21d875addcf363bb12fc2d761d5f02b034dadc4071a00ddc7fa3ec85e6c7d8fbe704adafd8e9f13f0190fc9fbb544522717abb5750c6ec773bda3930c31c3ffa4135dad65b60b20d356a620a7a1b65fda752c5c00ec5488d79605a820051b7aad8f269bbc4f64a8836deda30c9f2e9943f098824ec199691c0dcccd41f16d46016b0f6caa6291f428e64e1cd3ba944a8b0f58ef079327b26aaa60cb17fba1acc72f7fe7d9f57a4ce94a2f51a3f7d0b8d95bd26bd46ae5abe8f629694b2e9ff42864ded5ee1307f7ee20fa0c2560ca2b565b6fbe5d4fbb9bbf789071858f4f664b9193fe94c1203f60f0161301fc6bed2a9797af494991cc16b8fba96c28994a593e082a7109ad6a6743eb2eded399457c97b30840614f84163fd3dba90066e779f3a4212df296c12a9fe12764ee3d7a74e4298fec9ede0ce79481cde41f9c86d439cfaa7184c38cd28f60c53c5440d53c05630df20824acb0406b48c48e256f9197f18fe5c81c138698d0cf0e0d889ef982c749fda70aab9ac9fb13f154e7ead996729630c58a9d6f44990e8122ff1dd6e4bf0db3847853ccb998f81479cc3fd4bcbb88fa84f374b41a234a3e9a8c99f9b1b21fbca657ea6e97a9bdd506bbb5a994322ced0b41de7fa2d74aed7d165c8a740848c1158db9aaec982bdb029b9581a3404caf645a24f5651bd835d487acb2b228506ada0408a63fcc0acf75562783734daee897288e40ea58babea6c6d298f57cff5efca21f8a18ad225867d3b3d88bc21b41aa916388b9f7b931fbbb1666c46b1d468351457fffa33a1fe1fa81a773055b61a77fedf45b5e9d36db4ebf41a85d71c978f8c3ad7d161ccbeab3d919b48036f295d972ad57f72e744f67175328bac490e27fe13b196e8e058be60256d59a74997d873bdb352934945eee64c4ccebde42c9cde7515c135975cb7b45855ebadc00667090a47e5b763d11cbefbc1c56878835cc1d19cd6e45c2b25aeaced74a38cf587eb833b9f7bd186fe60062a164870a2f63cbb8f4e51995486c395ac9b14eae5c98fdae6e64d1cd8027dedee27da56fbe7a385959e19f9596977951bc57e64378a6a53e260a7a034c77d359670aaa60ebfaad2285cb9d6ba3c4f4db36a4ca39b691f90a67518062dcbc25fbb9715f84bdc9723bff09dcbe77dcf01ec100c1361e3f413bbca1aa9437e01deb5f1c89843cd0cfcd4f0524371bc5b645e4d392e2b799c5f8aa62c13e65c90352e171f30770f70c00fe253c7e96698e76288506e78987cc6abbfc8e0b6f611f57c8da64b6622770fb93d3ee3af0aebfd9137ee5ea9cf2a0b876d7d6a05c8eb8239bbea339194644e796760013327e93982f26f796f9c0870b635b64a8343a18dde28579379d3dd0eb8f753bb363c050d804e60390a7dbca8b0bf1ffc9ff4c85ae2696ae58f7f55c30073a67bf8b5c3fc41824d383ae29b15ff5ff6eabc6ac48beed5b0a452e5530de862c4ce2b239a881f6492d15179483b0a9ef7af79142a934c23b55a64a44941c92b3b1c2e141d33a23bedaeee9038aa5b027eb5566f6ef382a9e562254accf12b5376007205b071528eaa2b72c5d0c679111896c4fb064f4afecd66253742ae976201f5a756f8e3a8e344c18e88c521dd4131be553584e8dd88e9d0e4f84edc95dd7b763ea66aed2dd06a2b82677a4f002976b677ad6f62e2dea73cd50c460d9f3c2f0c98626b0059bc76a40ee064908a2043f9bcd12a4fd376920475f1cca42bf4a91345198dcfa52de6d5746218b8c3cc2602953f4a0227d736b258374752b4ad7644e54a479da89b573a638b0b0a5593996b8156531c688711d0fc5b4a7bd1ad22fbc9633d1ccc9b344d5cb9b017a80d1a8f0194ba011dec9feac2bc4a920b9a1bb291f2b2af99940a78b07cac63439f2607b6990362a09e5d6a5c08cc37bafaed03bf876cd8981c46570f52647fa0c0484fe0d1a383a912b6da189f43cf68260359a28fa02a309a7462d9c95cbf5826fdd240bd3f168fc058b4990e55ebbbc1eb4efb7a1106fba52126a05009c4c229b33926da1a8ddd4daf745dc456fefe45213e2ae5141161b2b91ce3650002874f04ef33b6ea4c0a0127a3c75feb8bd83631b1a14f4dbc0b59b8b02396b40b101d7f5ed7b212e3ae915dcd764f6814b20b99440f17127940e0bc7ae163ba40e50b6f22837a28e73364ae5bdb01712c143bc46fb4eb06dbbb0e10e79d3a77368eaf60b4d76d90c920f1b5c966147b24875d4f9f43299f55d2387280b7a96f7e65500090441aef0c0fcef0b0c8070aa083c6974d3a51406a0ed63dd0d12f276b11b3bb3f49f098124862fb8c51379432823e3803faf09e9af98dff527a4a239f0c30ed3c698d208e734412c69254ac2d0afaae5e05960e7b0ac613700378e88ccd6e32f2234f1cd308f8e2fa1bbcb722a6a266b5faa0146ccaf536c41d39eab6ddb2191ae7c4e18281e7e8915dfe49a5bdbbfd964abd44e2a2b1c5c9180bae9fa5a2fbf1577d131f6697a016c987d818e8adef99662c249f3a724cf9947ca8b9cdc7781fd2d635fc4f8e8604eef7e70e900e9919ed9b17d4eacd38d012fb6d97ae860a10fa7eaecb754316e65eacfaf94c44a6a23188a3364c1915d7041661bbd0652e5f2ec4f1ef904bef356945886b85e674cce2536b35c6ec6098e84c2998cbeb5174e047b3eb290f6b7ccf2023d7d57aaff470a9c455f3bda570400b39b1099f2fdcdf85593098140816d0eb31b0a367a4a35cfa33195b135107abd1f68701e6f6015cfc467275d061be1ef546988833ef6417a35be25573ffc97c4f049d5d69507ce91b20034afaf4bd19dce701ec760cb1215393638b561e2041c0c866747ccbca14706a757fca3dae5210775f588479151a796dff554018b69cd5d674dfb7d4535f8a8a4b8ce4990c482e9c334515b10a539360285bb89c06ce0c933b07a0e6b34ac7f3f80ac0b3417c85ba104a70410b7d200e60f725f47b85c3a34b74ae9f6436b75c0d71f509085fb44568d14aa582e7adcd5bc02ede8f34997b08bf574ae0c3e716ee4ae816ab7248e2bf61fb5b1b339b215b4f2996dc6afc8f05303195b372c5c93d0e1048b544b206868518de3ee186aef1ecacd9cd897b43c38fa3fc46c3e1c75c24042bb0576e2550a309ab6861eedab2213f03fd20845dc62644db2527b9a5ce354a3c172afbc39054645f224542191ea546a1c5b0b6217f8c8aded91ebbe925ba4906742fd965e801bf45e6fc0efe99b15a2fc1ca7f33623afc63dd296715e51b86f731e69580aa43510c3106c3ffa60df02a6bce4e1810aa0006abd859907ed19a9aeadf9ea86991e02e9ae60fa0d5f38f1e4e4ca1240d623c33bf9bf1fd6594ea7e098b7341a865e3198f2a3066ac0abd77c3c626fbbaec077792f4cec13badfd0d186ab1f0d937b0498833c4d59acbd1d376bb3e03abb0084ec0635e7063b558b4820dc91a9eaffe5b00b36b6224bf829dd1ac54e04246a535c2781f7f60137420f0e527334b0723baa2f96280cc4e36436f0a19f6212874a913938062d370d5cecf715aef7105a6d4c99668d6040063609964ebd9cadddd252e563fbf1036041a8832e283a3041e55ff1aecc67e6ea0820b3d48efa1cf65469d308bd8b8db6580b5ba4cb4538ae0aaade74cd66df164041f03cfcc3885a369caa323643fe9a0bdc277f7e5f512a44f709c278a852124835f58dee41188fe2b412e64d607e91c1e58ec728d1a33cfb0c1a9fb574686786c469cf4bbaf51fbe79b52eea2c3425e3ec3985b3e4556c97b2b8146c11489c64b5f50bfd77469234b23811f5ed49ddd7bad0c106dd8f4280b18b2785c81c3948d24048ebc0346eaa29469857ece5410617fa8109077b471fd13ce2e8e109c79ce1f38efddde73d8aa485c9f6712edad8ca5fcfa4a93e02dada734d7da439cdc7abb5e51b1586863bec9daebbc34f2fb69da8b2bf0a03fb1a93d76f2d58d4d331f82f562db13ad225c9374f8e2c6ec906567d334273f0bb48c51150de470161429008e81bf92aa8b002fbb258f2b42e31be8558152c2dc9ca38c9f879b7e900623ae9a4cd357f90446190e1ff5e48e8a09d692b217de3ad0ab4a670e7f1b437f9c07a902cad601249ac9fe46db8527fbabbd1b44cae3af06e0150bf0e3d898f6fe862b71ea9f6b727accfc18848fc79e6df63fa7f06591960e670edd8e2908f2c7b4a1e8c7068064629c9823a556c608ed3ca05a3ce69b0472dae032c2af3bf9840d9cf5f4bdf880feb342f6a29cabb195dacdd9e4f913e8b9cb108f15bd7a71c01b8d17d8283c3e8b9b9ce000a3f13ef46b28b5acefa4a93fc220411be66d01e848e2cd05d7b413a5c0069e341f3ef78558316bd96cb5cc914a8ff739bc8c1089204e83f23f08a6e9db007fd160dd71b54c886b1ee2dfc94aeec02ff3a250240f3c20eb11e0924ea4271b135d0b553430928e31d1d48b35c9095149de2a41c306f6fa61094ef991813ed6e73b915ec553e4c36e86c43088a834c3e35dd6d963eceb3b643cec9715fdac9469f175229bab9db87fc234784844fb987af71a9f8d4d738483214c032265db041a2339793da437edc408a7badb3bc83f7f3e780cb5953a363c5aefc66d765486862550ab01da3dd3f9ce8080e7f925396ea871995350b9f10e4e3a494d9ba39c2c8c5d30beca39fb7f887152c5198d06d7a989de1cfc4d25677fce14594242c57bcca1b29ad096c4c3cadcb918f97a3838c6433349149e43d6641da00706bc93027ad0a94ca9eee0751a352c4a35873e009310418e2617ecd99fab84dd556b754efb7c7d3a92acaef1db1d14df3a0e98dd74838142ad3480ff86fa2b42baf9fcbfe2d7b6eb475ab0d891e70b5e93aad91e0f1f6b1d268e90a6ce8c1beda3c289e3a5a4ded514637677d345982ebed66f40a73667540e80ac6dbac3cf24ac6fbd48d8566d9ea661608e239b13f6380bcbf3f18b1eadd1b524c2f043cd9e314bf75def5edbae69ef1f59e76a371b8bc59f96626ff9811c86aa34e38e9f90ef01d8a14f30b16adb470379b3354a25269e2aa67e6770645b9f9d322906add3120bd1a19c7e877a7703ad7bfb8ef59994f02da2aa042bcdfb4a8e59153e80ab66d462dd4b9ab643c9cf8ddf44c9a1ff5355f92969c874249821fe085cb8a0a039f61cb2d117d66d4fe514f21387d7bcee4a1d995216f21e9eb05cce53e7963827eb5fd0c168504d760ee372ec5c2f58c2571b80f7822e029b602b299f5dca099d1ebca5911ecc6ad88769c02388e1597be7736eaeac70770adc0998838dc46b262aa3bfc4ad934be3e928787dc0c6457775a5b0fbd871e2596e4899c4fa1df34f79b57de0975d7724ceaffa4f86169351ac22f663989aeb23a198abc8152f387596526e596e7363279250c41d3b8ac976d59bbd7a8f63e7e6105a5d01718081350b1b0fa3858d9648cecb647b637b6e63ac4064b50f557f1d250e1c1591aa83fa427fe0639f049724ee6069ce9060e8b47ae18a87baf807357a347758f815a751c6e17efdfd60dc287bc0329b44e3cec5cbdfad86f4b416cb6a6ddd50174a71d812f039f7333adbefe15b6d65f37c9734399b3c174f22244b800adc9f71c159d9b11cbfc3c2eb2cc7d9a258c31e83c87c3eb4b4dd4ccac632559bf3ab8a02e5e32bd76f084f0a356caf35a31738a1d8fa35bcb63d5006632c55b190e8d297ac80eda0c6291a108c3aec75dae6e44f5f5ac903aeac1b7d91760acc52fbedf8044f6119639ad676a7bf1be34ec673f4b20a633a0ccde188b7bbdf4cb8393e9c838b40a1a5f1e6d4fe65b81e9d2a9a2a77859eb06f0754c06c7a5dc31f45370da0d0e6ca3bb2cd9426cb4b884477b9691658c61733ecd7ad261e00b0169489b3f2ccde0363521d4c875c30b0b352443924f093def9e30cb75b3362b]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 2f2c24b7f8d33586eb0986eec98600242d03932fbc11e201139af8511d60fdb2

tcltest::test Hash_SHAKE256-3.44 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 3dde1d6ffcba7dad645c4b6cecaed3956e76d7b2d736e2f62350d97d896ed3d4f2212abcb0c9d32b6db4ea94618a9168c9e8fbdd944bc4ee5f3084a3a379a3922d136fa6cfd66b1f56aceadabbf6ddd39e2beae8efc2bee0ef53a3ab57f955ebd6fa11b4c1aaf090078c73c763bb5fddd588cb5b526577d3bb025f1e0cb590e8d61f3b6fef0d0887679cace2bfa1be8e5647c6bf24fa98cfaa84e0832976fd9013ca135dbfc65b0b6024beb3386fa3ee09b0059bcd4ac8dca6234d62180444eb7643c1089a9f9224d96bd1c237efb506d60bad77b51db0039725ce4440270c01e7d16ef8e95e55dabbba0b9822e79ddda69fe9db443bf74b63d38daf09a7fddb4fbd42b312cc4b36ec5997bc6220027b5fb5df50e26b46bdf375af2edb4bc080945064c37fb11d3f55909bb660628de9eb95b75df776455f2f535f461edcfdf8a0cffdb096d573fedea7400f8374e62e30879a8beb259b3bffb4c3813a235b4c59853400c1fff37970e5ad4e3220b45218d3b061263ef1594ce2036698e58383a9b9323d67f948baf1930bfbd72c9f5e8ac020671089eebffc23487d9eed1da577b21eeeef8918c94bf9819ed96151596d97132511d03b77f9c0ba4fb502d0bbaab9219cc3780cac645f38c0a0876f4baba1b02492d97f892901806345eb44cb2c1663ce4a8dcb6d260d57e89466a43d2b2320ebf96d63fb762dc341b77122e0e4110b0cec92fe14774a079f1dc59535d5688a02b0548fd7c78eaa72715c12ffbaf242df114d4ca74160706ca36eed3e91b717f21d56aa25036a5e7ddd74bb3296002fcd21885e306b95b9d78e27525d4757ee42aa3b5ceb140a06ea6280c6806084fb608409dbb6dd320b6846b96d9cdf91397abeca4f33e1b6cb42674adaf200c6cd20a3996c427f7e8da833ece50241ad1d23c0cc280452b5d50c5698a08e5f0ece94e4ffb9db39c3681ebd87629756f3c4c41a0a92674f514bd09633c05e63a42544b0056989f347c3534d548e6404aa56e533493362c0d055178fe3e16af5cffcb8707124549554c7cd49190e70341cfa0e7354b3008d7b1d67a96fabb8fed978798a0c944507309b161b9f8dc4cf8fd9c842f2bb469f9ac84b4ca1c8536408c30e689e5f63312369b629aeb166bb4c1b9a08eaf33edc758148e03fdd4011a505ff70ef2db7fb775633dd0e2260e29be70d2d0502ef2d536ee8cd129588ebf765d50cc6a7474e728c179e8689ba2ac365a8190b91617a7eb7b27be29534dc480c17a3ec741d105e33e9d3df8e7a7d0ebff335c4479dac3c852e5377884ccbde224d9c2a3d412b817232e6e1d8aac2c21a76e7f7cdaaa9d600e5bb9814d69f03ceff6146aab9852472793e541051e128a1ba986eca905b944f5e1c0fe1dc42fc38b65908628f088e5b464300dd78c1887946b1efe758a9bd9b21dfa298659b1489f9ec3a0ecb9b0954225dade8264c2acda29843cc097a9b0bb76a1ae17a9292e95182a2557325db8593f422d9636955c357b73220abb874c8a7273e63220fbd7f45830ae091904d172370285737005383ec75838b474a91f9797cd8c765fadf745d5738572cc3a7325a39870aabfa6a36e93900b7e3183ac7b6d3aeb44b3b3eef2167f4604da631fdbfb7079bc63de304d76d6f498a0ab65ae5938ad3ddbb22191a1908a6fb2133a1da536fb291b206143c7899ec41084fd98e2432cc2260d51acfd63acf3e1cf446337389f612411a8fa3c2464612fa4b6c3aee6e4622139e19c80754841e7fbd1253811b1053d3699c91b33dff04c8f33d6f5908eae6bdc43e8e121c6ca432d630c1e3eea75c4e396490b348c01f5a8f71b8cdc65f754490b3a8615b30d71d87c60503ca64339cd30f272a2d316c9867339ab2724dd8924a9d9e5ad877c02918fda84777efe2a37fc4df80b5f9f26bc2a99f70d25e158d3a27f9675dea653cd0fc3119bcef714d84ab3e1da8c0bab9eafb4e6faf38361fa77640efb031d03ff8ec28e0620de6802cedce69ce30ca6c25522f17d083422fdbb5fb5a9af3091bd8f4150332f04b26bdb217cdefef2c6abcd6cbd1ffe842a41c0ab30fe3d816b6b83d81ecf140a7268021a0afd2a5e89df7aea903020e3d68b39dee78538a01fae0eef4026aa70368bd63f17840fb04eb1d035217a29f3b62e89737fcb2aed2ce9730f4ad64cb66d4bc9f929101988a3e78fc4c73a740457a02201303c7ef8f19272b0b55a654d852c4fe0c60dd26817d4ec22181d99b61984b5f0cf55bf242c5d606c062f9eb62ca1ea8e54f9c4af290e87c58a700589aa4097da93b3662f2b9edea9b3c25380a2413c4a8c505aee45e8e537a4fe31ff58685a2723b20e5a8ddb3fe254cf2e2da48e97bda2ae1fa5fd1876f0ee04b967c2707f4f05ee1236b19726be5f82892da1ee8f405e5f8d66cd01df79cc20068366dd69eaa0c40c64355705864a98eef118f5a58b06012e811449613ad5cca3b2b413cc629ae07733879f7ee28c8eda2878185ce6402f7db58133bedc81871b8648c7f95f3aafcd4536d4d54bbbb0d5244ddb37fa8336e55492654aa755dbc86e834e832926ae8919b19bab3a5ecb6a8518c2a92045b41feeb6529753c94744dbf23bfc58e549252196688336cc1b04bb575323000e2368046b80174a62361b7f23f4c786dd2c4bed33afdfb9aa4c2e5787f158125311680620826cf3a734b6a8872d671b94b447dd37f6334b6fcb61ba39419acfaaea8a9483bdeaf80ecfa0e89a2a7d8f927db38211b0005493152973c9b88da08c2b6a0ff3b723c01f6364cfeb905d6b6cd5197c3f81d97daab5f014e7ba832d5d506108fee2a9d44fac6ccee9e399377a76e41c3fc0112f1d1a400de1ec2ddeb50629f013e4dfbd25e733561398b36c41cfadf2811f69d170deb3df66b1d02d29990f55c12257d318c052f5f7242e72594bc18fb1e4260d2c6fa609d4a03ca101a58bba851f84cebea4464f131a8d023777d95430a2e84ad659a10dca3ba5d2f3a8499ede50f8f88e2f7791e5e0316452e05fd08bf02312d5093f5ba5e8be2b760da3634b5b26f8edbe819efe19ce4141f1cf95324068edcf0adb83f64be812ef6243b84a92814873dddea6aa2bb6017b38a312b2182c441adb001739b9b641e63284fe6a9bba5fa6f9f94998aa8b2d652164c989ebdfae4f063775fec6ab00e0faf1b619db14a70dbf6c0847faa03d9658af3a28300594e1f8fc30a3f729087628047fd6d532d70e8a916326a0a7ba952accd52b8930906a4fc8d7c7dfc2a10c4657ac202e97382fe823dab341141cd834583af26be3194e5727cbe8c50a6319d245cb942bb472e8547def7c3047ecd5e1cbcc1b3c9fa814cb938d756b62d72558696e91610cffde5c1a01f012e59324dfb219148fb8b543f986acfc276e75c5453d05b6632337687b82c2ad5d6fb82b7a85926ce9d0d9528d9baafb7d7fb760253b1151b679c22d1f4292026438b4804ec0d892bf7a7cd6e42cf7e1f229148c84de2211bf832872c3c4009debe32099b8fe5c049518283799c5244e1a0d35b0c0b0b87502d1c2f015919eee48f184fe65988d50ef3c53fb1aeea09e596e7363753d34da14d83a2b6145bd620fe64a14c129fcf642499897e4240d6134ff562b2eee27df5a28e66b533aeca7a533f883581d1b7322e26ea481efbb253122665e4a4e11e36726605647ebcd1dad5d08b096fc794605793e9770bc4a68d26a1c9343c78394b0632072dbf2af328cd403231a4296ed5e8090f73d143b9a9d48f150c804ed51ca61bf277bca3384c83b60513e89e4e7b28afe2a4381ff38f6418d2d3360cfa91994950a93ecda92e3f5b8d1803ce3b3961aeec7308015c271e6387f02759b09229e3a82d0d504db7495651a8bc623df7d92db5460890fd5a4999bccd1bde00079c11836af1d52dcde8d0d92cdc025c9dda55c3860175dd0e2fe1fad1da43f1d83bfd68c8b2044f5966f1ae0a2c55a114aa4da09cbc57042c1664c7642b2f8ced4eccdfaf1784bd4409e057ac71041342913ed4eefedf7b9d474aaeeed74ad82e1da97087eafe7f741ac65c7876b6ba10d950e5e692b549470aba34d7a73ddd84efbaa4b8f1199bd3e0ca46d802149f66c8aa5deb3f807614a7dce38860b0a3d50e2702aaf57e1b48a5159c33dcc6c92da875c464cce80beb65d94267cd4a330bc01913c6bdd406baafcee6f1cd73404bbfd8a0bb02970fb38dd9d9ddb5b4940c4eb85d7213c46513481ead799dc30daa56fc7b57a9328a5667033153df96cec2002b6a17bdf63f3ab62d773514603730b409dca0896485bb3b80d12f1496ea131d9bc21e84119c174122cf8cf9efc6c723264cfe69d206ca517841da1c5fefe9ef2febed30be859233263ae6161bc356e97b52d91227186bf0120abdbf97e52bbc106fee89a40093d26042ab318935c54f3176994d09c0866276b33fc5e7d4c1cd65d688566c180268f96e4413e424fc9d7040a6e0210803edcdc4c7f5f6c5926a57a62261bdd2c73b18461784d299e21b5f39699316f7cada3fc6bf186dbf88da0e6926704038ca93e6538d4cfb9a611127e848309095c471f3408ef6f3cb8a67b1a6fb4c9c51f4ba8b1c0f32093260c6efd5ac7d39ebd7f912ba9c5731f0815768e609bd7a252bf72e2a03ffa166c883e089fe44b600ecbcc3bc5103ce3653f35db0b88b82bd5891f703d27b6d407f90228ba44bb2ddec002fcf15c173a5e983b58c707d5b2064d10f31e56e15c76e35dc63085bd388bd0e7d7a505bc8462b4f9b02995cae5635ff9e3ca3a041037dba379a903bc10b492ed6466a977420019e359b9bf02268b563cbaa73d998fd95665ab7a6b5256e76a762bacb3e203b54baabdede01605dca44bf05bfe0c2bc9c826d42b18fa7b72ec3485edb1873a00ae92654cb570f3d5eeca2d4ee7e68487c569ac41992eef058c8b1ba03ec16560d74ce83c8b9d81158a19ba0687b32aa1b2a07c44586a320dcffc457a984b06543a3caf53ef163e0a0acd2f0949fc7e96346dcca9f336d50a2b0aabc37a6ead696bd433296c557b21e55704cdcb1d00d3af1425e8e60f58791238a71131b6cb0ed0c60c036fe5d8fbae39d3ca77bf41f8a7561097ad7e3cd939f8dffa7aaddfb2fd64a2988641c805ca080495ec3dc263a186052cb5ede2a8f6edbed591de6c0466428f5f2be3d8cecd242fa67522f2a322367c2eabe8ea76ed69bc3933b2e0619fe23aaded667bc52c20ad82bf096345adea0df3dbf9c4b1620f60abccb5ed590eb63d2b372431776b8016a1264b94a9a9031342d28b01f709313493b961d3593750ff4d95b78a540fb4f3885783f77da82424623c3712964791b087a64142f0ae24f99b859af6e99d51bcaeaf2d1c002fdfc9f85568873db1835cfe0fceacadd7b4d48b833907b678c8da9aa9b162ffa4786c6bcaa9c05bbba8a27d528480ff5882e8941b3c2d39469cf5c2e3bb7cbaaa80943318756e5eea54197c1aed60438511de4bb9fee7e06b4066bdd9a5b9cfa6aad9f4bb45e1d5a2183a80d573bb38f1d40e28ec0bb85a7b55d5f1e7fababd3d4996171fb5bb5e97878e01feb2024e236bf0a22ded2ef5db4fabe5bb44eff1b2df6110d22f6b382f047ca60322c5e1ae2c3e5dfc1dac412f80513fbffeda0bcbeeb3786f2d6210cd319eb38f408691d6a74f92e307c0cadcaa7e3662930979ccfa15c4433a306716715cd10f85b4dd516f9d175f460d0167207b803fabeeba5a74007afad076b98f564f74e07ce12292d7bf21dd52d1835384f193c3940a4bd90efc12f27a85769c42df15ce909c100f921e68f9b8ceaf263a48f78b05dcbced0d6112c6b2ed2cc1e9944a066b36244c01434320e2450353d30a12025be67bfb01e7f0e3f42e5a949d077844574fbdccb7b646df69e51e60c1bd79a610b807878ef933d6c8c96e88ef9126e50f696b0627ffeaa1aa1f5ed198db94f2ceb1fe17070d621bab3ef71353c9dc84dde3aa8cc488b5043d64532acadd0a74d064ae2e0cacf22f060f82c86c2a1f905d7f0ac53fd93c739e4489d0da3a30b8e050c630f2407a9d83ab802c9b3a6694087bfa43dc69c76c47507178398bae1b5906a4c46a7041c38ea37d945373280c696af78d3cc30c7ac2e888657b49e928b4e6e85cd7b50e5d9177d9b4374cfa65eadc8105d37d621b8b9d5d4d21ed687d8e81ff6ecc7736a836a932e0b950443d2741354232f17ecb2bef6e739ffea2764058588ebb3f315fd8a807ce5c059bfe892972d6cdb799160e4f1a9d77e63d9f64ea92111695a4d11214c6b191e578269b05c81826386768ad4d000f3c4c807586b92aaa70e2f7985d400e5eed685f41c756b3aabf0c604fa369bd6d4f8a1185003480cf5cdfb03224da2d1ad106c7ecb8acb3e30aac0a377b15812c3437774a7bed42d43cc4552b0343d169ff692863c96847759b8fcbcc8ed119c08cdd08325463df7d93395cef730d69e09ad817638429fcb6d4202b5b693cd5cebbd37ac91408b51fe2b73dfbeea77503660c1b487362324b6725bf8094b953ab43b315ab457c722fcdc68edcf0a27146d35d8aaf11918697a6e8eeb89bc701eaa7148f25731f854196dfb60f037efd2f55450be3e938782025e23f8fd8f66f0168503dd407626ce9e06b5a0ea19d57217e6b15a354e7756966ba2862f6b7f98409fea8338cf5978d3d11d158559e4dd1b1381e5a0eff0cf7dbd94fce5f9c4fe70e8864c06e49a3afff3bb28889f21f949024ac74521fad4017b81c4e8e13c0aee875ea1745cf0fc6b97173fbd9296afe8dc9367ec8a9e4e68cdef4500caefa501a5fbe848df64a660e3bac4eadb4ae842c8e52f5fd2e323fbdc68e7f45ce6b5f36ae38b4b17fd2024ff2b1dd822458a9defc78665a2d23c02d073128e4028230afda0f045a9c352ff14f2b44f0e907e4279c1d4c5a27181c5d1992e941ebdd88f87ba81fe40be253b4a98ef174732ad798d5b824879cada8b0560a3cf9daebbc92fb7a43d82f77f1fc8a438f77633fe8a531ef6b6cfe5309e9753da076602b3021e21c3cc17754af2b79ef6b8439c58bcf49199d74ec86944adf7390421c1aa807b7f4571a8406cfd3e0e90225574a558983dd3729c7d6fc670d6298d75f4878d6f5a92f5dd61cf88867d70fd55c3cca666a80d51610c286c0777136c0aa2326f2239121f5ddf59dab773fd11ea91b5ee875cad3a467b7e7d9a625d6789d3926ebba42db9d1c2f43df8769f26bde7487823e11df6f2d45843532071479a8f91d463234b89e01387f77110be0375cc6d8b61bdc34d0f1f9d045838b5d3e4df16e7413fd45933d9f9514bc8c271bb490c71697a090642623709d13293d510ca0af17e7f30ef711c3493ae26143837650d70649f56eb35a70d9ae7977213c5595338416cc71343e41f05c1b31a20902858d17ab511c290f507fec1edb957ac93da05b38c018f513aa2efadf63df16f9ad5dcd243a454fa550d7f89bfd2676d80879ffb6a472a4225a5989978e5727bc46dd895d176691ccd07636492240baf284350438bffabbfae1049aebf7b6c5dad060feae8efc99e68ddf37cf0170d1a94f45eb07993db6fdccb4a145565a7bc5d89c7fa0f773b272b7877f960133457cb83126cbb6982fbb7bfe3f2c20deb41dddf49ecce76885f20be37036b80470ed5d9b49fd9eb680a47d25c708cd9009434eedde9ad5478f04e987ac097c60fe6bbdc8c705b7f544595edfcb83d33ad5c6aa0ca193579d37fbdee8a5b6f4d54888476e108ca8f0f53a8f90cef5c82bb4188dc5aa3ed4e61b776a9adfa787edd9c388efd8fae8262de88dcd440722ef3ed9589d3b05d39ea3d80af2cc63cbf74c9e00c262c8dc0128b3e809cd1069f1a0599917e670ea335bce3ea4fe64279dfb782d7a507f1b1ea04d1cbaccaa03cfb349ddba3f187f50bdaa8415d821215e70f29d9c24961bdb1f149a74b54c96f5d20a74f8a755095343fd69ba0c435f95479daf9c41a664c2ef9affbc39707a00771c2d57a1cf2ed789475e25ed2328fee9c9f1ff5a187c62ac50aaf5abae535c2d0f355bd0ef4639f818efde0d4913e7d217f339b074c936dfd62aa59e5e89756e544b79972de6170ad27d46ef3db6dc8af831eff733d1bbf48bfd608429a2e8b57bce35770394eb4c14b4f4f56978698efb1c6690ee3c6e84e2a1aaef6826229ce63c23e328c923364ff56cd274df0b58913142000c5fdafb8aa5e942c289cf7f4423a98dd5f95b53f4dd12e8b8513e724b1f06e706b26de2e488a030a1542be6e6034ab9c3bbe02fa3ca8bbacc857f668914399865eab3b570b8741b8d0be46e7c699c195a677e13cd4c3bcb29d24a9ffbdf3ea6c25f28fdcfb3b965fe17657057a4f20f02a281cad1e0a79c58de2c98e3deaa9474865a164208f4c27d1d4b970864010d64f3779f62166390b1ff91ec0170e1e42506a3b98836baa37273e33d1f152db6f9c0dc1bfe6bd46afdbd1703a55499182c46b23202bb8f7b86b1e8fd0c46fc8e29912bbaf73f9e6d749d287a7ff8249322ccf22a3205c7cd126db9314067e1e58ceae316fd20062acf2652bad1ba18f7811fe00ca6b4181abdfdd0846bf6726f8c44ae9a70bbc02555df023f4b38dab7cf960853c134d4d6d1e8cb50df81228eb024cadfe24130dfa12dd3825ce30e5676f5d79a1206a2a406b506412b8676b5810]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 1ef2bcf74ed341a93222110ec107c34a84f2e727e39d3ce4d5ba5aee4f24456c

tcltest::test Hash_SHAKE256-3.45 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex fead8b5f0a48c0ee105769b0d81721e17cca71f66cadf430b429b872824de850e27ca868cd6341f5622e7ea173fc569b4390caea8e491101ca54f393ad2073a8ef12b0f1517b0d58dec790dc71f7889c77517331f6551e41cff40e5140fd1fdbacd86ba19f766d400d886708daef000b9f743274acba631b4970d25642cb3511a234a121be3ea9d575dacaceb7ce07114463d05bb65e28b5c2320747bb74fd71578f1918b6b9093ea02682d60f7be3d6ed85158d1e2bb537c1a175cfb3dfbf2455529c2f90d1d5a416d258c7eadedc812242c8b3ec0851cacf25e39433f4c35224e3f20e536d542e5d48114a50df3c3b6c02b37426dc469673261b3e429b50214aace35c0774cf05ffee78064a66492b512d9c79d691dac2350ce376e9bcb0bc511337c1b4d08e50842e54a4df5b4d7a5b2b4c6a030e56769d4004e42f3f2949c182b5e76368d938726f6ccb18a68e4f12658beeb63b02dc3428462f1c0c04f1206026731c24f8e553188924fb2f55d3fd4120adf6002519812d70ffb80c89dbf8155210e5ec327eae93735693dfe92da428d550cb4508580cb74cfe0c25ff30d0090164c8a8d12c0c47f20ae59c94868f83707f3df2f4bf5e2fa0d21f40b01731a4fb17cc401b16f49ccee8fb4f9c0647b8bae155ef2f76fefb3523f946e2b9a24e07d2f99c5965eeface97dce14ad453317b1f1a2401a67485d39aa31dde3dab6fef3d58a5d24082c9bcc09038e6193b547be0957ab477493441de24afecccd46f79fff041d0d039715e0a203eb8fc888b81cdccd78f10046f499884e2538ea6b66ec0ca59993c9a5a7c1e93d907a6c13d578ec925d99a2da0b170cca05daaa8ac952aecd676ad2eede0a3f1f31d3f6ed1c3ca944adb3c4d2e420d03d0504963b9b8e3609eaf4b7b905142427340ee17b18e293330dd1feb81c418315a75925d469d932e9b8c3d0bac96a38f41b9db45448055b0bd266a8f01ff385e2514ae20b90de35cb355ac66aa786ddf45d02f7ff260f312db0046c116bb16931b75c4347cd07af4d051bf12f0bf493b67cc124e23f8ae6271b1db0a28bf5ad823dffd1ff5ae02fdd9c99f99e833deaa8ff7ab393f0e2ba7668250f19fd4ab33259c816b8e6f2080b6057383f99bd534a59723c8ae6b15e9a4bbceffe3c2b1ae0af2779faeda7e844f4d64568ac1d5e191f5a183d9d7123112a47cba5c511550b82a0744bcb9c4118ce99a9c056b87ba3b594ef32619ca86988583ac72487f21188b5be122d29a2f55203cdcd16292c68b0a529ffefbe7f01ea50a5d8e71962a125f98fe47eda6e7923c739f566ea00e6a52d40fca430e778c4d3a54169203728fece92493d493402b83666cfc565698be77fcccf0bae924cac53b1974746e01757c74d96e4e0743083e3ecb2be45e6e71c2f35dda2820fec15534340edf7de0ae5561a84022aaf711b422444bde6098697be14aee555b0d57454d2e4e9bdb1620bfd916711926642f2f3b60c40d031c90eaee1c9608415a75dcb08d9b6f2eabb50404ad69fb209248f5b0a6fe39f004cc57405a390b7aec046382dc5c241fa8536b09f49190438a454faa9f622acf580709028c3e24afccea22eea0fb825514e43b10734f9f34530f8551d156a7471e28495a3b0f1c880011611963df5179f74fbd43b30cf29ef58cdfccc6437a0060175f70ee13baac925f682eac7059325a7c39c83b314f2779a6a544069269a325bc936d2db2c8c489be7e53041662294453f6c793247f77e6441ee017a93dd876ff2c7980540c77ee15edb0f2393305bdbc3e69444f4a37444e93c983f2bd465ac874bb7061506ec84bfb6ffe41956fcd9f57d5d519770f9bab4c26d2d3b396d9ffb15c84415a501f4af1b5b096500f7de48a34cee9d0a6f44591208ab6e56ffb8c2c83455df2c6fcf917ad91a02c8cd4731faeb8291ba55603aadf35021d7ac9572d59391be2786640b47c28c8f18fda345e6a1a4021b3cacdde8a5a1f215f4a48fc06eae4f10d6507114dfd7466bf98108f917c96aa79578b774a8275b9c58648e0b1e021e62e01367746990d54c515edf94a66937e9f0525bb46346caf54863d2383a1388a8243b62c8f83fc83485ab5e5be619f64ccdc84f3a7f86ccab551110ba3b793a5b2326d785143a8bbf16d4e9b15f42225a8e58e669456ddd190efaae139aa98ff65d644a5b46278c46858a26376a88489dc272c5e36d7278d8c69f2ec6f00b15f443823fadf67d6655423978509042d5810aa4721b402b2c652c6cf766b43458ef65ff3befbda29685dd41748f890855aeb77c5f83760e6438a0e2bc555fabb5524539a3a2f44d8932c7509f668d4f5571695902be7772ccedb4aed2256ae7d7a761d02b6a42c4daf690d54d58359e316390c8e02ebd2ea2ded81fdd596e6f2c593c41179811aef83bca5e22e71a6b860fbe5a9c56cf6892969bb43263c2a82002450b1cdef9626d9cb449a485a43ddfd0427c7bb916d728af700a65d700295f1d0cac9f816295a7741f2646d65b9b8b5fddad22d83be0c183e5911c15cf79362403941431d5af326c4b728e3ba8fb3508e07b1636971be9be7cd699b2590e5191ca501f62db259aefc9ccef3824d35955eb54ca56c0ef2da99659733f656f1de0b17f0596db8f5d793a83fe5e57ca54d16ec8b3bb41e0f9efd2883d1f5d0207bb595f8b406f42d692ee461010aa36d405db4566c68297dafbb1e15bd4a86dab6c32a004e1fee6a2b78561d8f1a4af436dc169582b1b5a3d57a4f363e1e008859dddbf170e12f15e616085cd63cf9a2f73b1930c3b64cebd8e2c4cc9e99c7902aaab2b162743e9462b302041f9939df4a21c60f78a075bc7f9c84c023e2625cf2d3b6296cffa35167f54afeb2589113f936231be896b97e935097fb1622595278ffef41d6aae7b2bd84ea33d7a38aa6ca233b3a5dc19e9adda50664bf8035dc86d766e2e79f91212b09ea8ad69faa01869013551d48ae762244d8e265257c61e20322f2e80329057b2c50eaf6767c8af524b5557154717b2dd5155f5138b949552a2b5a210137c67394263d805085aade882820a10d6e11c5ffc5c2cce271fba7f48a03dabe44ccdcea746abc544fc90a6474a0f59a2da1b16af1f31c4b2ee1a00b46d45b65d77e7dd54059f2ab6150425fa2bbb5243691babfa1d9899a7762081467b4eb1c794620fe94f26a7c43a54c21b85b28d2124ba8a6db5e5df8d5e6a6baf68dd40bb18b8b0c771d6bf07e32f053c16797cd483543c6a969de8ccfd543a2fa465c5c07b687a8f2c23f2f995ef89dc2c74a3c60b952c812e3567fed98a7777bc7cc34032ddc7a0bc92c601c902aa6c5638948e23e9f531fb20bf8b7959adf82f86cbe2e595229cc1a7bac8f325017d1239c19572cf010d6bf4620b635e48215c1831f0fa2b15e3d9d743a7bab3097efefcad647ea0ea741f24e1e71e04c0a3f0a5b822f71c0c0653b5e33686393cf26af5da838e2c1bf68336d1b70ff9c1c05bb3a0d142c48f84cda83bedcc240667e4b9bb6b47bd000516be93f3cf89a6371bc69e8483d11adfa63290461300105ffabcd29421d051406800bb15c350f848af5303c530ae38878bf992c7e159c54b2b73a286b3026a08f5c1b9a581cc22a584ed631bbfd8631cdd41b5fbcd9dafa9e582cdcb51cfc4ff2e56121b9177dfbe4b0a5ee0a7cc14f018cf6c5a1e483a0cb74e96caa4a4fc63905246f068d069f3501e39cc7f15e8a1dce7485b79e5fed42f4ba01d220e7b06ca3aeabc7e626bf532bd9627bc3238c2781dbc88670358a0ac1e7c3b4078bb391a745fe8589a5034714cf69ad5ad9fa2a8f74b595c0cf1e2bc1b8d9d8680577b2f83290c6e04b1218a60cd8e51e487f2bdf87756cf7f352aede756cc6a91ba5d680bd881552e095cec7dad8ac7737c134595c2f937e6ace9aff65a3073496e506262d0ff7472b3372617f9188cd6f684ce53a0c93bbfc39f70cd1a7226f3dde49d2cc4cf627f5950b5b442a0488b91d7c6b6b34f218703cceec019f9fc4da39a76ce068995b0662a19d71cca510db88cbd335ce3bfc907e26893db4079a339d28ddb28a684926433d0f4e9ef5cd9d504105e102f3cf22a807cacd0ee05812b3d50b8adbec5a1de0e59923c97b28c91de6eab6faa4f8ef617997f8d4b5683d23b5dfb083acf6b2e0a4233774bf872599c368fedbd5e1bf5285d8082f0b317c94d0416ba93186afec7f95d3c84a537b6adf68ffd00ff15a22327543466c1b99af2f1a04750170daab80d73feda3f5913842d303fed990877a8957f2425f8e5a1bd950c310a61efbc6aed1c30a52d32facf58f5090bb26100290645c4a6df28980d6cdf0a2a8f6dce4116ca747e0571f6dff862eac3d1bbb615185cb871cafec882f77d3528d6244aeb28e32cdd4e82824689ee77be8d85140d4a38520f72d4cd9eb38b449dfc9facb9820adc4b6ed117939c1c22443c399461fa4d33e83d5701b12f7daaf2593c7e4cb0b60540fd0a31379d606cfd7455d1c3c72fd094a0d22f7ad9c8eabe82773a1543593a365f8a69b30c5fca62ac7636933f34ba8d33e2814c30e1865afefc6a93a888edc43cde2b86676eccec6af74d60a110544a6d14b1c5c37c006025288a585eb98252eb71e1324d01d723366580bcbb272044c2c53b480feceb669b8803c3e45fba6b01e245471bdd9b8f755d7af7ec0db114cb90886384b899c6d8977176c80fd89506aba22562566c89ce3b96a292288922edf323a8b063ae1952e35de1783e7f39703a925daee0dcbaa77c5e6d6c0c1b07b059878821829ac6a0d82384736010e0b52b806050116e9a77bc4c88c82ce93ba9503e724679e26738f26cd0581920236bdb16ddf46c9491d567fbb5450f66273f63b2f79dce177381ce846584ce4f7a0ad5a0171a56e149370bb65351283462e9008f9895f39c6411d914b497f3d14cf8b7d6bc2074c719231436e37b0bb6674cb32ed5dd9f03b17f8e983df02e6814dbde053da52ac89a101de7f6212e7ebcc0f80b2fc304c004117b89722bd2767a2ad4c5fc270d68448485340bf214efcbfc4bbf16e4e963a47e0c62e1a9947ee54c1883a814712890f6e6b5855c33ac2d452ab51bc191514b2bddbf1d07c903ded635e8a1fc1a8c07fdbee702ce1f1649321187bed7b13b40815be884b50487df5fa94f8a5c5df521ff7a42f4d64bc0b8499ca16095bd642d450389a93fbb8d5f2eef32b1a3a0167772b543ebf32e3df302388cb19a0a7e79bd511cfb167286e6ea643cc860a542610ddc8448a35ae071e251c422334cecae70e11d1ac7adf6ff08c4c82f21c21b87177c6eab75365acd6094c2232fe93153f62ff458c1e27010107d5f66558af45225f17d84d764ff5e135e1134be63eed2c39a5d65a3a464c287fa8cfe7a648f4acff83b55485b50bc613a3bf78d4167c35fcc92a1db58577ed5c8bb680ee32ed96bdd129d568df150d0959cbc0b064eae21134e9dd792cabd80747533918b6596803cbded607153c3f81cde22c62705fbbe1aebca26d830f72e6a44d190c1c60ab383779624a9fa8e3e2c5aac2d3820249d4ff4b7579d2cc4262694d28b3ac29e6c3dea57e19c48081940acb8ce9e2fb1353ee3d5d856009d0e460fa6ff3aedda10e8808345cceeda1ff64ee928dd873a1c4443a637976efa5d24ffdf5b569a36580fc4a8bfb0316cc8b9abbdba8ab927c90c9ec8e3d5ca64895fffdc3e226a4b88104148cdeac2489a076d96f20a47f2b2045f8e6ba5a55419638a3df602d072579660e3ded103e61a6bef156df0b6336db800973d6b824193cc1975319c6f531d0ebdfa811798ddb053baa98cb2865262841c53e7abd3c57ee648027f3399666ef5b2fd5302d387f25b5ad3ece42ae827152d44e8fb2c58316e70661d8cd114b3c7ea8ca337568d56ef4a150cfa265d21d79dfabfbdfe6261b13d20bafcb8f68201cf0910399456649bf2fd4b591b39f947f8e5ea88cc8c765b08c2c607b374604fcaf3286e1f6b91cdfffd46a55c06f3d2c886e7c0193ee5c86dccdd225326c4ee78eb3a695a456501db857d536b3cd824776e361856e23685c68f5ef11a76268a5341e4afc76c64e3f0266de7eb43eca9affc63e6281eff1fcdbac9e87bfb1b8fe4b7a5a5f95907d0d87086d73ed4c7eebcc1efadef5d95f2cdbfac7cea2e0a8ba78d0bd06283c4451ec456a5f837e040384f37f42f26a1ab510e8522f77779ea065275d3958530dd1dc25bd88a15cc5aad04db4d69f288a5f247d28f266ff0479ba8721404d5c3f56fdb14f376d6f29a7583581e1259d17f1bcc22f5f99ff410d1ef9f1622edf41a8f7f006b30f3e99c4c3b2ceadac512a3583bd50bd35ffbd243a83b5e923647d8f73ebcb46b0527bc7bacd83805bcb29f11e7874566587e086b630551b56745ad319a8873678313879e48d89a35a937eee38fb81704f2012fa3905ba41ec96403b903120cc8e6539a2eafac65ed2318ff4774c61541b51bb4a6b0ccaa210539791818e80501b76e50a731c23f8eb2dc6cb8375fa4af2a3433cf64c6e88e832c89b93c58d0a46eaa37828fc88bbcc108a3a057e3699fc9d12997fcd8f399cbb39226fe03141384bddb6b0a1deed9e62420aa56dfb8b60c79028b19813fe557653edbce6523f1820fa8ab5130bd788a958030a4c336647a926b331b4e41f3bec7ec623e0da4a0ff262bddc5bf9c1b36f33eddd22c573d8cc3a00aa29e8e475a423734cd5b0ab45487c17cf808ef2463b3b90c5f899fa3cb736d9c20009952c26a8bddecdbcaae1aab25f368ab4b46a96d8b46bd597439af2800421402d7987fb776c82d1e68e0ca06b5fb882524d4707722076c1a7951b06824970f13ed9afaaf648dfe716a1edb310ddfe6f50060416719d8fc5b13ae77aa272571b23fdcbbb8f189e1a3429ad6a07a2b0599527ca4b3df35ee79d7825d64a457dc7c42d04b7a9a6666f286f734eb97675480bf8c02f3eea8a315398fda3e18c8bfd09b18225abb8e0f0dabb68e68e20f54599c10f49dd49bcabbbe19867cf0d28c3dad06c8dff17b3a43355b3baef6ad95727c9de2180da9b5cbe9d1ead7b91fd231fd4ea770c8b889319847e52421ac9879e5956409163d04c4212b7fa4fdfb224c003266c3adc07c67591ee37f0f96cdce4b99f2d76ad0283308a89d8b2c1eecea5a645f3f1d1d74430c42df062cf6b5ee231e0709980da0a714bbfce0cfd592ab70472959933a11530656305ff646d158009419260a400e8eb9d7f65c65c9c3fdc67d3d99aca0c425fbcb7fe2e7f1b0aa788eb1a35e01b2588caf12346a65f16fd1590475d5ec1d2a411526459ea1d443df706907ffdd3ca2f193f93f5a349b50357d26748b767cde6ab5cbfe76b1acb2b9eb97da5c4d2ddc8d18e3a3b1a0326d475c1c2c49ca73c0fd3fc9540cbbba85ac52d6811fabd693a3b09a281d535715ab784df3ad7292606d15a70ccd1a7e2b1b48ad92a6a3f736f9fd5522d9a869c7b654446102e9493b3ed9fd7f247868117b2f75858dbfe054e451dd2a9329eb121c62880b06a918bfe6ff3531df3028e76099c6e0314a226bf7407ab5b6526b7332359148053c717cf9e7d6bb29fc10fb5ffa2a293ded4dfaa75bb64adfac6b799c4fe8aeab0df3e0ec366a71a116b0fbcdd317d70013c37f791628506bb25b83bf1406b544b8009a326d58fbd12a99373eb7086034581368f0d2496cd6eecc201f2473e28ea537e760ff3ac036923a5c2708845b2724be4583428206cdcc2ddd30e3a8bcd56ffa870c6e88555e0804c91b6a142e64f444a3b4d97ab4acd5012998f41dbab572d8c7792dba2193d6891c803e10608a5126f209f98bdcf093e683bbb86b42ab4853474bdf48cb949857a4fa073187e3c5d5bf07354e0635733e8a1db2ea1b237aea7508d5dca9bcc7c120ed57d00b2dcce179111f39b6e80d799b3366427aba651edf14b3be4298ef85eede928470a4d0caaedc19c76584dd3835a164ed07dca150f413eb963c9569f68d5269b74f056c01cebcb77fa8983cfae7cc11423906ba31427b0fccee5ed1937acd2ff0fcbc192767276adae6aed72230280dfa84d51a2048ae72fade41c0fd35c367ba0035429bf6c0c661b615265e9d59bd7e81a43bbe7542c78892ea92945cb9a38b000d82effc0d3c9c7d7795008db5a236a600a96c66cc7ffe82b5c0e94e3455dc62914483e5614ff3c352bd989fe05ecb6886edaa8ba00ed5543ff67c88a81136be8d2208516162f02e130ab7325e35955f8373096261f6a55de58dbeaaa948226a4d85edbe823829f45506cce383d93ce1a2d3f97986b9d72643113002ac7d17fc6efa949b481209dc753c5a21e5bc1a95518b0b3f82daf333d50b615f26229feb4dfa9d662793084d1005df8c1850c6f10bf2af22eaec820d17d6d2eeaadb12cd770078ada53dbdaca20ddd708039ca7b5eb565d22330ec28882e055faf09290976a6b6d045748291a7bec48db1c98d9ab64dbfbbd07aca0cb26b6910a72f3b35d947c88c8cda0f828d93352221a288e5af263d5e571c843003098eb027cfd1b8fb7e3e20ffc0ad05e0259fdc543764c2a5d93f183b88b3191692d69ca56d752979b4883bf2daf3823bd0751ade0a79e836c155980251cf4e4991e164a48abe0db085174c2a8b6b8dfd4e557c038e609cde99115c200a314638812f76b9a9e4bc5c6a9bcfeb548d8fb0d9a16e7955917709aae2b33914a1774fdb2161393da1dbb9cf6635d9c8d21dd31cf960b3d284fd44715a5ba1f378781c1a67a2b7c87dd2754e172c6a4ac1aee082be012797c3961ba6e8a3ef492ebf19d952b9c9dcc1470b411f02016ce4c965957fbe6917d5e80ba60e3a95684cc2c5627324c3ed249fe852fe5]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 9016e95160f1f178c850e6815291dfca22bd25aa490411a85dc7cf7610974c05

tcltest::test Hash_SHAKE256-3.46 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 543892657906b3a1290ca213534de47fbd4497d89c29a7a9627145b3d79495d76b12a737cab8a999b21f5b0c0177c3cd1382216b4ae3252aee9960a538c7f9b8a9b6a19da01cc8552c9f114a1f950432640e043692148054c0316d029c32f314b72b66df23bb799f4091ae16d32f117658ee26819a4320ef804053102a5eecb23c79e0457a1c223d96ff19b845ce5161982c71948af86dc3d6cffc180bd24d5be1a9f517cec82df8d5f03a789ff92cbaccd0cbb68bbccf9768e54f6166167cd74ec28f9c46450098a56df99d06390a4b9ce01e31c515ae34e18a343564b3e3ee2acc951d0b1d05e5b07d3e71a41553daae66514b5f8e7263e7c693da2d30e8681ed0efe244d7a2a79b28f13aa1156f30ad694c4d81ac83ea22a25499e815f50cd1d485331afc41a51176fa4125c1c7153ff2f77f55f949913c2560babdeb71a3ece33f58b51349a8b87041ce57a2c1510c083a2800fc2d22da589d85d538c4f5160205983ca42278381daf295f3fc6abbdb3fd91ad3d9563a741f442588755caf83bbf3dd83833dd3a862a9966203fecfafb28038245ea1e48ea4d386e5d8eea3995558db056e69f66b19b6794ce92dc6ae9a3c4a79b9519685b91b03d44d61d8219afd1ed86a28563a8ebdc10d02943b684561c45c7fc1dad9ba6f2f0c3952a7bcdb550b650d058da73003e03ae6ae986d52955845289f1bfb17646ad6334dacbbb5054343dd6e07218c4d594f1bf9680e205b68bc3a35f47a8e8f49caa19f51beb66238ed41de5d4a11eebec208f114fb5d08683a2b12ded85e343e722ad431263e006ed9d0d2fa715f5c632c341239956740e93781d245852517db353588b592da74579210e85947d33af8f633f9407cbd796e4cb4e0c311719e82bc483979751a22859e789b143e0bfee2b87f02c401ee3659e26acad1fda23cc74fd942d75d5b8f7b678e4795b4681cb2db7bcb2ed577ec5e80e9fcecba55773b986f5169bc3d3f9b75a89a685b8618ebd7b0bf0b57c92fcea0d8f39dc7f9d2420e80c1ab022da778517de00683c477e055c45ac41970653cdaae4b4fb71dd26d1aa43005dfbb4b947374d4eaddd1be42ae1d2af38afc212b96e0608d081ffc2f554019249554b0726403d5afba0c50857931bc143cdae81d5df5efd02b9eb40b46ead961c3886a94abc16eafb8f2d32b2f886a90af8b2e84a87525a3a2189e83581b1d580ad4de6da323fc754b13caa639a7c313438b68e3fee4be91fc0c201a11474171bba8808ff2b22b9af0ed8b79301661f6a95a2bcdd9ab2705a9e7cd51fb05e23956a1f55e02e2687b4afeaa36ab3aa3c53185eba4c15edb892c3a0aad8dcd7c397c2fb16a6c3b3fb0a9b5bb40f3ab25098c8d2d0b3e76689703817c9f42047bdc9cc0292787231db5ada1133ab1ee423e0aee7463a9683aa9c04c77a9a0416dad28f1d137fc408f04b75f66865e5aa7cd4d083630bacaee5bd2f9a05f211ace25b1335dfe240a1028673f19a66196b251b388f704bb14e007bc277b125ce729d0b61303fca6f62d9b2dce912d5418ee45eeef4b5252bcac480c445c75bc4ced38b80f87b5fd7b43c78b9c819dbe67d8245f8987abfa48cf9713dee8fbb79294b827873dbc80200f4801175f5a08f9fc77760650741a3fb67f93559516e77ecce99528ba72e78acca71ecd8ee4bc45c7a9d2e42a3d4b17fd5beb56e559c467d2478152726b8bf2283f452d94e050e1c655e681698a055800d68c415e26b6c4615c6c92ea18f61c8eab04c605bf5f3474e6318cb2ccc1766d5a06b36420673ad692b768a60dae608c64ee1555f44fd45fe544548a8807f9af60eb1b9bb93e31ce7512522abc2d449de751aa0a019b47f3dd8f87554e6168238599e86963b42fa58dddedeca6fb5f2fbcefd29679d9f5bd297383a7723638762293a861b251aaf847aa7a60408106de50095d9fbf74642873a0d7f5a62ee113e288e9f917af2a333ce8a62a3b66e2164b4e796a650319d22697f2c46c9408992fca1ba4261533e2d818efaeda056764092fd49aed0e9d26ccb97298180e055274d7bc07403c4e8393cbb562bef50d44041dedb5c9ef54b2d095c5e53b056dfc5c425977087cd0921a71a5fa4cae4a32e6a9232f8e3dd6e2dcad7b406812b8e3308a6297e16f609ab69b2fba25a9b4bd0b42238cac62aa533b70e11e11ae6c93bc2065ce5d8c850a02a8c136bc6fc34eec895d31970635709780b5f2ba40ffaa39a4e1aeff4ca46c794ae90483790c7524df3ed2f0910eb75b4d6842d462f883437854ae2938553ea4d225881d5dd6ac3ec446d52b8b9cb4013756a2f29cddbb642b3d407dc7fe0cffdf0555ec76d86084d913bcba5e75e323ff2f77874715bf162e09fa6f842533f4d1e6d2736c884ea17e13fe2f9210c12dd54155250a370ad401595070e561602e4b68a234974ca31f33d61dedcf03daa98a4ab03e5ec82b1845a9d7147418fe06cbf939b29fbc2a588ac890975db59c015e9a0d45ad3f9c6d5b59f2ecb8d28a18a4270d7fde5d30d7f369fa9ed6ac81dff2bde0dd8e13db4db308484c1c1480ce846091feeb864337fe38b076b25f389fc734cf6869cb6433fd232bc516656eb2ed346bb24fedfdd31bc356b189540cbb4c8d2d78d8ecc3aa9a3921da503bc0404f10ff2c63eabd43cc8851c1c4118add13258f7143fe863c0ac8cf1e220e11f10a94c0efd0130e04a1064649eb1e4f5f8b9c69f443670842df4097e33462d06fd02e555f0ced6c8009ab889c66e0a6cd366041745fbce669883ef0ebefb08807105c210c82d055608706bd4bdfff4da0a40fba73e1668d1a76228e7abcada5414b9cb86aca625500a9a638dabec0807454f91975710a88d05989a5123380b4b9026e901c5c29e7fad1e8afcb8beb0ba2b9caf2eba6ff561582d2f964ecf032d8a5402c73a08d8ab9a06c6690afc53bd642e3eb58cbeb616492acdfd53162bc2ad4cff2134013c9c795a011bcc2e58d6990e2474f88255747f965ecd5a95e9d19e15c957db333019f120225b24dd29ce72424bb323453943a379c94f8dd5a62408b746b156281decaa6211713a902d6c96d499ba388eca4b5cdcf6cb125dcb81913b6077ce686cdb4d27b6a537cfcc7aaecbf8d05de6705453c6cd8811b5beb1e1a8fef06a7983af8278f93e43226ebe61304f3fbad493252f3f36d0b366e97ca106086553e5cc2ff05cc28685127b02580a854d79e09b87994f19e91ff7b3a9795d651eb034ad2540dbf9c326265b0c3a618443bf92f04239ff5e1c7ef0830210b6ff63aaec905719fd863e4de777a4b03e3369b773fa1eb656edb1f8dac34d0f18bd7c6997dc8f24cb513f23db359462a87a06860a22e3b95caef0b43cda531d8c87b014bcf993094c420ed08cfea3f7a7416357dfce58e91a8a21db9e30dce3194549d4e44f2b6f8842f27b823b98184370c9507b6746ef97678b94882db009c7df8dd0964621fe8837354d43523c6c85f07e9965567572dc2f7708833996369e3ec5315a463c5f530b1d6d59ad579c74a7ca5b2502ad1befc82d5f16bc5712a748381eb8b7433af1a4f3034cb2b14f187ef7be44d2b692da1cf5c0ca1ebb46e9e630c03901ff366becfe39a2cb112e7a5d4ce94930577ea511175326c78a7a6c01f33e648c38fcc8c98835e55f40e0a12d1005bc835a875691da42b21f8c55397fcac1c2c0b5341025d71f9cd5070e95d48c3926328556f78388b2f68f8980574afd71d90640854ce7342050972c605f3c08ae0ea7a1938fce67cd7b7d48a3ce48d47534c49f9783f7e760880c777d064bcb8bfc4975e6275cc0bbc8529265a76397f658639b13bd3d3806cc9cb20e92eb1ff97880cbf5c614daa465772f6ee9818d1bcf4cfca102a06f3aa4afa3ba0c034a200bb4696b74deffafdb52e7679c8cff0d20e68ae85b0bd32699ad142a7b7b95273c4d18ee39a27504b14d82f8c96b35f3d3980d91cf63adef32ffcb06e73b483794b3a0261e4885cc6fcfc7c8770677f670cc4c43679145c0f80b90f5592aab779a4fc9bd2ab9772f9e3f7f80ae450d3e80e910a72a7de3bf723a2d9fd7320610d6875b5866db9354c50772c776103ef28b572165200fcf1428f468ad6c3aa029d0c41da2d89721646c8e6846d84f543b177d4724513050e8a2a20bc71d2bc2eb116fd8408ad668861b3c29a5dbea9540aec54a8cc6c6b06369aadc94f4ebb47e20ee54dd847eb1e35b797c8b88c94a2ad796f14686ba35ac0476a4bdf863be0985ab591fcc7844a2b3ad2ba0e5d5ba201b5805fa99f528ecfb6c2ae9317b28b4c90cafae6cad69edac40fc8dfdf42f4b00744f4f085ed14ad7f638c1a81c39a9737b1d336c0468e9cc9bb8fad50fefd2105094eedadc77ef1e7b94ed642c3a0d0b5f6d56d26488c09e24278e770f43ded3559f7f175963025b6307146d94730b192065bea8b7129aa74410f2eada7397d0eb37a9c7bcdeac131559decc3d2cc82626ce14f6e44e9e71633cce365ac7248f7b2314f3ed2e15d0fb52f5880ead6fb9d86fffc2d384f583ea74c9647587ae986b2c69a3d39b64197cbafea9ee3d265ba01228166cfcc6653f7e8b7a15fa5c74251a50dd586fc2770058a438c7261593e57d36f997fd3aa0cc22bd83216957aa0fb570ab63f05671eff58c3c80ae66e91079d2743cd179bbf82a0784811cc6c293c47214dd68498fb25961bd011e3ee587cea48d43beaa3e2a5c10871d5bd2441811fd21ac1dc259af4cc9c432bec810b344534e940df6b1cc828193dd6ea3b90662bad8b958ea584f966c57fbd529f1fca388bf1706849d456201b1a99c60a9c4805143ec60e813fafef48144ad8c11cbb2eae7b5f07d8afdc539e8692f329abc33696a2d7fe512194e0647f58c17f6863a22ce541508fe5c72d040056d40165542aa5365fb09de124c4db3f6bbf22a9703d77cddbb4e83ca336fc1659fb3a4f777be087a1d7bfe4fc16ecc2f82463564d5b2fa392b76a0afcebe74710cb2cd0a984a91562d64fa3674149a88283b9d57785b4f4eada9de730c646012fe6617f66ef9f4df73eb5b312fe526eaf7f8ecd6b3798306880fc37eb50a8d2ebbf60c24c1703bff3639a8a7b889773b35a6a94b50b49f4806cfd938915704ae8c8b34fa595a6e9dc0756900d8a995652b6c5d1d15b6a9fb6d12a80a67f4cc7bb94d16e1fd5d93a157c827a357ed894e21738fb4cb24ac0906ffb75a0188ed7b8a633a427721b4f2445a68fafdfc5ae05ee2c7783aa9ad5919bf8e9125bc709847f628838d4fd87acf52b76c927f10012ce28ed129ebb6d3ee79b5189c385cb9372d690e088f08203fd99961dd1db49bd19b6a276192ce5fcc56b5552ea3b9c6a3318449af884bccde169841a77f4d959634e6e2ab47fee5fd7e14b2a2a690a6d329019e4ce3a966f2323b75b84ce3d7c3d6876acdb24d4dc7185d96c2e8e8430f3e6974a5472ad7c4540a63d82d7f49a0a8d7278f7ac37f734c15695412c9849f984232845dd7059ca58e74cfca27d375d35d82bb4768644844c69221cb3b51ca5e1742afcdb7d9c24d4e1064cae65d897ea1e117c345e29025f77bf1bc4792dab96d0bee3ed23b7d73d3a061d6c1cf25d22cad6d9461e2911a318b8c8cf42f15d0cef50b593114163fa38a8c95c21191f7854f8362c44d9548fb2ab9e44b11c4ccc168ccc5db4ad5da4838adb0f00b1514342d21d67709e2daddc0426c521e2ed4cfccfb2ad8c7026c4a108ece53a6f951c2b111978100c0f65fb5edcb133f9d117e895e323171e51c2f7cf698f4c884d7b6421a4eea1879c50a7283aa965d57aa5907be83ed32c61381e3acb5da5affce984703a3bb3b546e655dcbb0e15ea5c8e5afe2c514f1ec79c7ad79ce0d45b25ef12a953dfb509819f9df8f86fe2ccf93ace794a1af96a0758a41258b966fe5ad475298c5b23f8ef04c6195d3f5ad1d3235189abec5082a2f510978937cc2e0e62527d4e2e8f07e18e849a640cccbd7ce08abbdc65e31d2d0a46c3a8fc725ea2f1011103da64aafbc55008a758d6c448eae06c55e82f8e0800bd23226807f4db09278167ef3376b0219ef0919407aad9bae937a303a459b660fa32901aeba4f9332c4ac4cd89ff812be7debd4ebdc5a1c90b9a4e48d004cab3748e7c859bd39fd795d9b4f5c689f15cc11f750987a933adddf0a2284123b760c27342289705318edacaa30877ba833c915f6324e3ca01d1c6f75912661b0f015a9d8b747bbe40c1817a39761c05b933ff0b125160ac8ecd5d0add97bd6f341da369a309a86360182074c2bf31f005eb50aedcff7cc55d0906a7aa38b594b90e33743358bb98f1eb1e56f954481debbb4cb75d8f96a8df0d6a5a4975fd30205b9129b6d213c388b2f17d27d5ccc3ed3c39b10e924ccb9752ee9f25cfe2a5ecae3316a8164f7797184073e8944ea68ce6ae285aa81db2086219e2d9b7048a804e9fa78185cd399f8361b7a6403c1a4d331089dc2177d0c4c362c1dfbbe1327de54d78ddb12b6e247cfbd50b4a13b3a0aa17520daee9bc3eef5fb8a25ef75257eaa2f70728d8a9a87d7548622273f719c4191d6990f1e8e95e6733cc00b55e80c766aea84d5350adfd448e5559cb493b199c586a881ecb56992fdfa751b9ab9b13defc3b9f3a17a78500035f60884e6703277faae4cef809180ff8eec252ee0948928c3bbeeb43179d2e63eac7496b3029311f854790d373638e3becc34f8a5dfe17cb12fce58790be361c720e7d2418f44f949420f30217f430f53bd4de050b7ce5357c09c7498560ad99af96920da3ece99b51f163f879528ed15697ace2846d7167b145fefd781cfb67de00268c437b85703939722b19f6fe3cb75c2aa76b4842be6d31fb37eb5ba61397dbb9248a38a9dfd4898c1e7c6a15b3f8c2e5c82295dfb60a6e4a7d519544096779b86aeaacdd269e32404713245bc3754c4cd94ccebeeb135b7b324d624bc5b77aa2d3e73085d100f40d3960ae36e7c758ee3f4c5b56da0279fbfb213b23e5224f16d4027c3a8ba72f616a07703d9d6989487ea3d43def624a5b3c8f9872c4127772ffbed871a2eb44db5d5a02e650c65dda2bd5c1eaa7bd6d077aeb02aeff127455cb8eeda1b367e4e987eaeeb7ae883711ab649cd3af7e228f4ac5f23f02acd61dabf5147139878ffa7e2c8c380309b58d91d2dd8f532f3b5100a2efb96b3c1d593583f536a1d496acb4b173ddfad549ac53a2fc842f3af80b40f46394856aaa96dcbe088898d9997eaffc2e1ff275740c85478248b04be90c904cf6570d930e3525f5b6dd6b0128ced47f23748664b52c9b42f74372bc9ed3531f0087505fc8d295dd98aba4e5a53bd6bcfc82331d9d6afa37d41ae3178a0e2ded2a9bfa2b6aeda0d81689e2e19f440b3801bf651a9d664678a1157de72b0b6539dd0b678064f4cb77c8ee819f87560672eb82a8f6259cf487d6f9cf960259bd77805c24e927769a3f18402d79ee004ce002828b1ac68d8907ee0e44ce90878b48bd14bee052e181909d35230b53c14311ff2577f310a6785b7ee989db6603430ffbbb91e057c4160ec0242ece29277d8b29e1ec3964764714d201eb56e35b994fc4c74a73a6accc1c19938d2cfe9170be2b5e7438627b79a6bfedf5cba8fee28a90ae4514effa284b0219eab2449db12d7be19c8a7b34949371143594277bb332f7f71e3e644a9f1e321db3f88bbab34b8411b1aa1f200c5d9e0b376adf408ffb6338427ad3fca4f7f215756a4456fbbadc657011dedc5587af49579a40fbdd265ad83e348faeee8afa97ab820f20fede0d63445c3aa814842d3522bcecfc3f56475d8e0627dfb029942ac2ca3c7741376f81aad3a331ade58075354d43c00b0dc13e9e6a1cedbe66573557cd5ce84749ab571032b907a62e518ffbc5d5e5d4af50f20bdadf774dc3cc5dd6e600e285a7294a20d3dc7871c108cbd2a123ec20dd6f2e42c2f00b02b46bfaccbe98f490b261d139419e22b5302edf7689ae3183fa8449cfccfef751daae92a5a1b5acdd0dfd82d5f66e84c51e2c2143c9f554529928bb2f534ceadf891cbc0e59b769ef1c54e5838cde2d45cd9947c6fc69d3313bd518ddf07a43f0522eed43214eba2b6ff06fde5f6d7aabd0fea96c9b9c2c844501d9582ef7a138c86d9d00b2cc2c367b688822f88cfb6bcab4ccc1120ccee06747832a6955711d5e4141a368b02e74b115d51de2cd3e0a0d6428511a2c48c9f51e9cc12a043212765281c7bdab3f8ab390cd0ba89e910b3b7552a8fe8b18a580ef8cb8fb9472bcc319c3ca4c1ddddcf551d698a481c2e3b770c21549a9bcf79d42d97e58869170a6ff8e477e7897eff8e198318107122813df0d3285f8a454aca1198dcb4b3cd2a47c57bbef5bfc3830c87852a8af2d4cd3288a8d2df87d313192b373be62d3573e289693f928594a2f6efd9895da62d677d5c091cc399611be803daccc5de382f68cf15c367e5d9a674d9e6fd3295139648f45cccb3c9d8ab6022eb55facebca4011ce9111ce67ad5b0ce144eb1c86fa3b8d90aab561e1e0ba90fd09f2c05aa1cd3fa4cf358905f78cf55cb4381462ad6f7927c8155a01c83ea52f372048cebdd09f0a62fc3ec71d6fcf773a54b172a772da719165757ba5b4b74ba962a6a652fc987608e060196395d3b743cb64459ce81a04831054ce1daf5fc8fd245a7025c3b45e0d8c9d8b7e71aa937d06bd49e231c06739c078677491072d9effd4ca9ab89b58fd5b377bd295cc9222911cfe0bd2661011d040d65f0c35fffb6fc5f4263d85cd54c6de88e474b249e0e513e09e5c6375a7da5ea9417374a6bece7ebb4cd53c41b079f3314890e411449d32800e32412e6839124eb0694bb845c69f5e9311f74c7ccf05e3537cea8eaa03e95adff69790cf970c35104013ab2cd2887c8d767f443640873db98b2e28adc3b8df881bdf537a5ecd0b05ba6505d06cca8390651cdf5979079edf5e3765ac57119c9b0470dcc51ab51ef51ac84edd0fe6124070586472c3079539688ecc422894008d5304934c35551f62f3b5fcaf366b97123aca7a0ed8f7af5c3cacd]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result ca1d7e00056682e2de120f20c99b82dc2990b33ae79bd94fa2fd0cfb83c235c0

tcltest::test Hash_SHAKE256-3.47 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 1df4d0443e00947a54d60e5ef93255b5ad287f4ed516c59303d6e35e7838be0ee8af49d97d4aa9641ee69890f0a307971d940759d5bbe9f09334a48aa2b07878df25d182c0c46e7e952cc2210edd9b14feef014a5e046192957beb68f7e638118bbe30e711562bf1430e56b65cc95953d7a136cc79d974a091127ea07fc2460073e32daf77e827e4b0f51afae04f887d30126e852d226c42106325d9422de96e1ffa9282fb62ab80624ad892a45871b991aa711d82c78fa299d5aabb490d6a83186d250aa3acffece3735629b0ca5d3083d1063d80b026e5b4d0d4f09b4c1166e5a2afec79af6b51bbda5d650a8f920a8deff78d30c57836e9bc6a1d40d026400e03f7d3855137d770e5b4eebc8d596e386c0ab499efcfbbc10235ed4183f1381cf6c765ce7baaa58cfe256dceaef9840bb0085bc314719cc308fd05a54bba7796e5e54a5c160de4978c768a46d8bc758e23b829b71da702783789107412c82504371a2b3708a8bb17f770ec2ef5e869492de4c77cf3b91566f7a3b4b6bf6469ee542eb0683bc35396a6db3c8decc687c53752dc1a7ceffc17b11199743ad66bdda4e980f695a6d49b037f216ca59ef889a7cb119aa291e013cb9c68b66b6654598f1344e9009965af752344d208b8e41de7170e034ce6e8e0af0cc9823a5c4ce87d73a34963e32e5964914cc7fd5b720a5dfe7a5d62373d08c32963e28fff7a14d6d2461fa5cd5821388fe2546cd0cad77348fdb1cbcc061371bbdfdd5298076402f8d472b09f0b8f5ae6ae7f3d60150c90bc400671ed6c872089e47b6b6f1a6069adf64b6ba16e2c305e575258507b321b24eb643be297ee375c1bc5c2ccdc9173b954b1be1aaa7f23be86d5a5eb23d07e46a6d311f2aecf20fc2cc23ff7757e89e395ac9154e6109cd0e20f0d78366e20ea175cdb67d9b34231be7bcb370cb011f46244cc954b68015a1408763edb9469dae9068187422105c379f64cd6c9ad75b562825826010ebb25c3c8ca863bcbc1ddc2daec9b0ea1d179073dac1ad5ff1beb3e6d1b4f2f8a33f99858ef987d9a90ba4bde02ea68bb0e1c0d58d14c582d6d619d0efe57fe65d09d3bbfcfbccb8a3e3a2b1cacbe76f82474364da5b379c0d1de286be9889526f9db5305503a4a2233250a9cd35d60df7c4927260e99613fb129878ec5281d55187988335c5924ead84392655d104ff97c638bebf6443832740b617f7880bd7b9440844fda63816a935b697e341f6bcc8d8a08a244fd2522824c5e44ecd89e1fd5f8ec64b19e882bcd3737f23ed2dbe218854655e00c509643b427e70778e7c943696b77cb5362b4ef9da5c66571c8c3831dee0bb1b9e2161f0a6470b3a7c101465aa7920fc9368d5f565a048f4359f5371aa8cda14c032a7e18bce5d7ae5450469548bc654a2d3f872affb4a691b7029d441ba2970cda5bc8a4d8505bd5c73dabe0f7feb51c6f51cee03cdc91a309721c62f0927c439030657760b826644251dd045c5fe788234b9b42b88638c178cb1b3ecfa536374c32bd59fb2622a3ef1244c91ee7e4d672b658161cb983332c97049e5ee4ae3037e7381251a136daf40a48f6e59e924e83186c250f7e5a404c5d3e4b4856cc7879d93f690b314a5079c152555b8dda387ffc3f373adca53200a6310d3303795639903827d1de474ea7bec8ac26bba4db8de7391445db4c4f72f945abc8f49b119f938d144ab1131ca58914c4ee30d980d663c283d78337e0c7dee2efae301bf2d56aa4f81fb197029caa9c655cf55f6f81f7424d98dd4f2c2add709f8dbfe241009de79bf8e7bb48b4a9ca56171120f0b72c213a32f07a7dc17f57840faad7464bb4bcc57b596835140f0561c88c034ba088c7124ac4a119b44bff66daf8e148dc388d3d53118412e564b44c176fefc763959c9d8b62ad492ccad10d96b1ea91dbb1c1cc2617f8274e2e41e0abc1cead29db09a39ad1845551823340ecded96771a5c03a9d71adbc78f713e52d8a874519e174eb221910854afd8ec983869613c69ef24f5f298a198b46922344d202d75c2f463ec943372140c34b6e05b108dc0123bfd215477686aea4266299a227ab194de8643756e3705a5ad0f81767190c4abd8f8d66d15b4a09983769d401de0979c4c025155afbbbc14c872e63b1b0eacbf2ca46fbd120aec5aa2d019cf80f38a41a38490b58674a9c21d6da9196b5bda94dd8c67b4eadfa0a6270f2998ea281c1dab797c0560f65145f27c2491f11ce0f5321d58f51ea76ff49680474cb7f2cf889a4d8dd5fdb545190e1af3253aa65238e0e3adfe1bf69cde67efed5b78e8173b169d40978b35e7a3b6c6af43a69c90d8505bf1206141d9bc118aa635bb8c757d96d53edab7fcdb7e930b838dc3644f6c06f2ad0c8d1d89263a0cec7bee348cf8a181d31ff27e732219564a642fa1c06c8b544c330dee3da537c33a9e8f84a004bd2f97c7d93f5106b0334e5739b9a64243dd5914523869a1916a1afe2e01615a403b1762bab3e7c4fe2f29e770306395c71a5e2108808fb3ed4e084b381f4341d130bc813580c9c569a64785718a8acf9b87b5f97f6b3244920b7ce63c52b863f6bd01a3d80a5980793531c1ac4c7e6827921afe453cd3dc261ef36fb9305329171c813af0c5299eb358631c8eead0e7f1e5d7bff899f7032fe506382d2c8609c8eba5c73e55bc788e9c7606a7ea04d780ef86bee7e71e32061a2fe006cbd3ae62a6f9d91f108496915dc51065be9cbf6b1ba26bb1c8bbe14f1adae7e482ce5f9aeb07d0f1aa14813238eaba76fd0af806f6a556e49342a9616391c024e5d8c5d8043a4f7476deb1079a51652a19c229fb0d29f0defb54f2f380def97669755980af0bb5160b55be681e93c11d9974bdadcb8ada2f5565466bff2d04278246834b3816a234cc1bf20a122c2ebff0753b95be52634435f61c414b0670d6c4aeeb9e2bc5877f5d94043431753e9fc3561c49521b3ccc118a0d09d0f5bff2a520fad016b2e54424506d9ce919511b6699e84f333fc7157c93712c3d755209b84f29a775493c31b4c386aaa58306d16eb3180dbe5a82bedb94e12eecffc79a527c007ac4030ca6838fe7c3e34cd0504024340b6fd60026b310e5987c0f9113185a07d08f6ad74114f8199f4ed14df69f7fc4ded44cbffb9799e6ef472f3f128e4bb83f340b1c6ffdae948334aac052b12832ee6829229bfd927d99fad931f708d39a1d5e4e4ca18205e1264143e7f349b016b0b7f5c896699d123ee3981a5f3c8415f16abef87456b077ded1371536ada9d8dc302d2259400c3d34bdd648b97dcfb461e5d7a056f010c13370fee8bb717801b75d59c07325726711d62e4d7461390dd55c22c4d7c2b965caad05c2f0299d19d8bbe613729e62185cc91aa93e7b328ac24a1ae665631cddfae1d644533a9b99c6c86c9bb5ff5dd98c0305ec66205ea3cf1c4a758e35bd824acc0aed7318f609f80f57e9dbecc82316007a8799f51ff1425f1c02c0df1dfb30a7fe1ece693ed2e2fd225e52db337d916e02eb385df8fbd29f1a1e9ba3a0c153223a58d39fd89d1e1e7699993f124174a819b7cfef6c1bd648cf197d47f85d18a74a4c112145b11fefaefc3dacf727362b395dcf2dfbd9e3d89593f4208726f7c39839059218c75eed4626ae9954975c73ec4dc47e3ace71eb280e7ec1dfc776f3ced02f66c4386193d6897a88bd0a6e1ead283e648b6216ecd0f9aba064b72cb438820d23da9cae8fca951fff8308d187f64dab75602d394a3ad5d940a86e8f717fcf1d3dce6cbc1dbcfa0d62690b3d5c425e7a257b985fafc033a6273d55f5d80f27de29021110da07f8c155b199e7e82bab4909102c007a0b8380c876161644512cde8a382223514631ea4e0f3d87d81ce49674d060a2356755f7a8f5275743003e8cb5b32889fff235d6bfd45e9388907ac11d3eceeb6e7e2b895d2d024f5076ed6750159cbb529675253f9375719620de7746bddf1281ca64a439a02f44f93faa0ccdc1e71de59d603421ef3ac86d389027a5d019de2bb6a1e6d2d106feb9c504dba36aa048159187a21b29e6fe9a623030af07f794a8cd53afcd4231d2fea17e52655250c08efd6bfd9fe6329a9a182f40b6e800dc95990a8d6d763858444f871f782b60fdae4b8d8504a68612e8d4fdc671d2be2c8e84270e57ef72f53739bf8170585975fff65cf70ded59fe03131c40546a97fad0294980f1107a30240a7826d26bb2bff0a86ac2001d36c2757d1b3cd30216ce16f2e2a3ed7bd6afb70c518e12d805422cbc27547fc8a4e6bc5d6b1a725bc32cdf7b72d59193f0ba4ce9cc05b61fb98300cc234cf1721cf1444e9c77b6ba258d862d8aa481fb50e6721d584c30c558291932df09f9ac0778a9cb2fb314bfa66697738a8f33148fcab30176c0174b597ad28acb29fcd91cd3595d857b10dece5eaff802f42971f5bd7c40b7ffee14461ed95e781b7f8b9597ef704e3e3f9a25cc2c357481d9864b655a558c5a09d2a67b7a18565cf6263a3cb89dda6b0574153598866f96c7e3c928c9ba746d0ef8e3174132f66cf54b53485140ca8fe6ef4521719544c178fd179e46ea00b771e98488db48c8d9f16d793156038f1b787e1e2643dca4906144bf2c5e5ea1b7b737233684c45e128f0f248e1350a8ac1ea308aa8bb70f72154d28697ca2e7ec636417a6fa3016a502a2edc535b2a7a06df0ad34b5ced5e51998cbbc2e3133d3eaf30a609806931000bb2d6d2993fc96cae9744b5e8ea867c29a41caef9425fcd25643e9dac243d21dca7bec5b9f17fdd9efe654e270e788b4d402ec4d362ec5ae208ca95f0db9799e6341d9681eaa540f868be7fe0023b674d897b6a3b1cedcc2c42d258123645526e8279acbacf437c05fcd8aedd6dd7f671a68a09f718690d4c3adf4edadc5132bfb95d6f2c4b5f7b0ae33a45e4f8552201bfe30ad0fd68048a1a78df1276c22320004e479e04032452446caabe4bbcd244fe0fd38e74f2992d07267380aba10cd87fd69cd9a2365f2448f747330d14ee838995cef92410b47f2b7072ee24f5d4305f7cd6a6ce0114c71662820ae6655d0688fd62d8b6c93dc6aede442289c66570c8c85dcb306a2b84d835c50d80b8091524d0f6f5d1261c4bb8f851e4811da6e0e1439a106f7c8da3b3f977028014d9f88494f4161e2d3a566f4702feb4017fc7d374f33f333c206cd135ffb29182b5f6d2d4c30444e87d2efe52bd36cb7ad86fc5e4d11e26b4cd265a71c7e5590985593315cb87ec5fce1d8ba1eb566e90991ee0199d77eeeb7d1b7635366280b13167d1e17466be9916693fbdf524444cab1d4c9dbd1033e916914b0ab4f3af82a269d4bf266b619e3b5b412d4169f6b5f4b430f89bb19eb781d10477a95e8e85bea66438495c7e76273bba7939ec2bd35d2ab4b09d24d65ca723c7057d6cc4c16e68a7d34502bc2ac051d12a44778cafcec9024f2d3084e06fcebc3a99e5fa3e9bf5c8188225c4c0f0e4afc7c9d0c15030d73f5db29c504cc01c0da16391d7052b97ed8f698d3d439d3e7bd832c071bf699d96609431e1a78453dfbf4438041d08933fc16001d0b8b1a55ee6e60f440263632de23ab7e0f9a2bc5d1ea5a1288e1834e535d04b2529136280784d85e42304712c6a0ef6f44a029fac45ec95ec6145c107732231e39dabbd0816cfeaf629360ebc8177b5c6a38c44f7bc83dcf89d7581cf04bc7cb31d61fd1e48d405251de08305adddbefe0b28f2640cd03ef34a92bd636f08f43cb01d6cec97c49f1606ea192e79a8d7438bbef31bbc3d83857183beeb3c6c60275ec750978a078074ec3b155f6a41c93d2a368d45543072571930c990f452891b2f47f24aaa0570e5d8bdc2c20a0e5b95f078090a5c13d4114a8129791e2138c12c859a2b7d273711d057677ce07857f3e56caf915d4d715b0c5e24d0424133c15c6a90628dd39ca2dff14bb874e883fe12fbc603df4611db68af04bae81a42c2c8dc1b186272693d0a74b79c4fc4a95f7e0b988768667c3c655c0f6199142f6c76c48475826d648c5bc6f350f8758fbe31856b46821579240c4d8eeddc97c168700b14a0772a5637d9d047fdf764fec134528868b4bbd23c646bc8863a0bbf5ebe9710c2c91306e68c7afbcbd5f8bd138e58371486c04d2b759c07523ad8f2f56652c302fe8f3e407dad56e11998965a4781bf72818cb39947c9917c646622d672237489a005c4edb34fa1684bae4f3f68b46aab2c87cb30e3dbb02a401d16a9e9f16a7e37df619636492587f4a1b169f8d97ee7101a5f9550b8a98557669815d4a6ee0a4984dde30f8427679bd98481ffd7444db3ab3573964ac7b430a76ec23a294855605c007b45e7f22fc8be902e869804069fa41770be7751df534961592362c08603cf9207e059cd0803b89c19930306395c6bcb34ce298e3049b5398298399ec6bb455a2ee9c4ff1ad52f72e93100910f706a1968d147c7cd9952bee49f96293c0e262199670fd18cc58bd8476577eeb06507cbb4ccb945decb87b8284361aa1186daafef62228b875c3497db39506643c3aca7bfc9674d8c68beeef58982696cabc9ccd9e3e575322092774cb4733ff110c07732cf392afef75e29f47be1ae76045c40fff040d6b69b0d3f43dec9c1e1d6ab01b4e717225e00cf31cd2067c15619f9d208941bf83a550eb967c038363c9cd40eee18e97fd10b78ce2780fae935720a4c9dd45e21e7d5fbab6161a9e429eba565886a978781a1c3c8aaa483703b98f57465baf19ae5a33eded8ca0514d14a85d029e50983964917e6ff93eb9c8f122413094dbcab5b473d1a7501320f5b41dc15799227ba388cdcf1ce5518b65a68fdf03095a79b71496226e0101a1af05813fd2278da768df17bb2bef3f405c323ead5839b9bb4513214ccc0fea380b8189050c99f08fdc0005aee787466d3f3ca5188a9667e3c208abad2bdd4b787da08bcd619109a99f741e270a4e0556612e59cd24bfe3a7c09d7be0180993d797fb1ff56b7d2798f5a3d7bffe940ab0847fc327b116cb5bc32a38721b1551d9cce99c29a4eed8b2a137b8e62ef9b4ffeba987b4ba2b7d944c3757dfaf8113f39f04a6b68846abab1478381625ff929939440df0aa7e78c5be5d60853fbd48b970c4c64890150ed6b21debec7e162210efd7dc67fc705b84abf4d90f665a6e9004b2513c56ea70ca1c613ab591cdf1fb61cd69873ab18445a7b627da9dc8f41bad55fe2e37378fe9c61aab2dfb9770bd51ad3bdaefb2818d03e9d373508987b0ed18138adb7caada1182c3a235f33cdb11efc9ef85e3e1cf73387266293c87f4467147ce9e3a500fb1320aaebb7194d9251daa1197c6038167fa7b3f7222835a4c19f18609e11dff07b0e6c00693474c2dbf42fd8fe9954744d8544be60be857604aa73da911732ca787ee72a1c892888e3d2b1fe8cee585ac3aa437df29458015bbef51f64bee1cf31f983307822522b91fd8d53cd692c10099d16fd83b2948eec6206f6be0fd548cf06a8dc2706dbf40efc2d9f6a11b8de48e62706b91e2365df1e0e284710f47c792ebef4ce3da92b8257f7aa0aeee50ca80edc603ce2ebce5d7a757ea8cb27b558f82d4118d0a6181597553c560999e1509c9fd2b506d6118effa3bd8948573994ec5e8baac6b802ed43ae1cf669bda66918d725cc90cb75993401b0918e6a525492b79a2f27c93335e3691391163aa41a0beb21288ab143a6a1f51e69a54a45c073a1354dfbc0f11300f0e9cf19f6208cfc458e72fb72c4dfcfe8ceb995dd5d02168526ac4b8585af21aa665a79db65e6734c3451ecf53d6a45438928660de13f03c933f51e003732ceff51d73ed0ba51f868db6e6422f96f8b6c175e21c018a2c3d725d07d194ec48f5774f171bc66f514014a706be13f172acd4004cee04b50dd15c3e46fb8148ced1a954e1989b2f94e7f4a00091a5689a9ccccc27354c374d9edd7dafcc5cfb36fb07d963e1ee6862f4ba3c647b587ee90d3823f1a04c53440c627592c28c8609e82f472e8634ac33ecb1d692c9a1a6e68492b24cad89cb899077d0a08c947bc00f6c28a204025d903687f92c1b25730b8968f188cb88f296c1a9f95979093ef1f75ae85ed9dc1ef068a93e80de3855d082176c4678ce5af426655a1e266f6208368810b5862642ed09a1f141816ee1ce154a8cf633ce771a15369d6ef31b678b23503c6687757bee8feecbdea34d896c996ece288b0dd981449a1dec8db1c1e3646fc5b25c4e2c6d620c28c8c238cf34a500ca5dfd10f4b20b0c75e754a703a9701347597324c6e2367692905cd525aece8cebf6f85c4b34ff0a101fc68faf65bd073bac7a7dfe0563aa83b5d1871f336c7fbd940b545f82871f86c671b01780c1a80d2bc0ce141f703486a9cee33e7b0555b9a5b4adb41339c934abe4dcfe8314624667e4a9bbc8e291260cb36de5ee2fab5abc72accb6f9d73c4107e5aa6f53be271e16475576a414cbc2f2d8bb7f551fd2b38c3f6081018bb9f94ccbdb35f9e951a18bed579ac02b3e3b17bb1273902a7b5bb36fe1c7d321d31c94e7aa61ab2f6998e523e84e6bd8327144c92b621b85764b43a495b3f8ff524fe8215e1bf2f839aa2dd051ba2c836e0c80e94d737f968b2a44c5c66af78ffe3c4f61418d54ac87806adedb088b92bbb5d403c2ce43c784a1bfbaba1758389f8bd18f99dc5bb31cc1a434cb5d106ee1144600d09cef7f2857ba6bb9e0a461fce47693af338f76c016e3ba6ce4447fa8d0e1c6c0050c253ef540c00ded6274deed4755cbb8775b3a27305805c2ae2dd891aa3eda3021238f2256a1fd671ad80d514bbd35939bcb549b92f6dd22d7e13801ab506546b6e0e38706f6d07655f551b68ab434ed832fd41b127c3d2a450191c6ebe5ab6e53c401cb57a7cf41993372c50d2011eeb8ed834eb7d26d0282f7ab8872e3f2d18137b397529c42f171fa3725dbeb15bdc16f29dd89e1b5d316294ef049348396c7a1bf93fdbd71ad62b2697efcfb8583261b8e6f908f5dc5870142a577bea6e6ae6aee6662f3a39ef6c3d07a793aac67705b79add5c5acff5fe54e50046ba2e9bdfa08b9892421ecb49534bf598ed1922696b43e5f6cebaa253f3c99f921c1c67cbad533783934be24905df5a4e13b2bd03305cc366a63ed6276d2275dca49a673101d7d391b223ccf1d13c5631a335bf69c35fc63a959f19df2d9a3384d83b02b65a73ed4b033903ca21dd79d21014a21380c78ed0f18dd5e1b18b49292b7]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result e24e666c1be1a00c4c64de857fb72104ee9c405ee663a7c5ed8acafdb1a24633

tcltest::test Hash_SHAKE256-3.48 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 28bf7abad560d623639abee9d72a8955683c439791315bb0649e9c8f21985e7a072ffeb06a388b4d0650c26d931d3d949ad7e74e8607b312fe8f8e6c72eb925cf4b67cf94a706059417e9bb544720ac92c8d797a5a825ebb037dc8b1cc649215975ddcdb9c90bb11bb2e300910b257bac967e164342ac4731c7131a6568cc770972b069f8921063b1d6769b122648e30176b07543d864e02f172b39339ea99349d29e28c38aaa8a00e322ef4a01016f3bea3d4919d1e622f298835bf9c077128505d59ecd1b309083796671cb33f57cb67172e657b7a6ac36dbba073a869b51659d151057ec4913b3f9bfc6f8277b980baceff16ff23cc876414daf7859acfc45f8db3216566a800d049d5363643a4d95ed02ded53a0f240b79acc935a2225fa0b976886ae20b6208fa9dbb8f62880a0fc25a1329c7942b90d565e8f4f87218205f9577c827b236426c2f43febb0b59b3bd6442d053726b90f4e79328e532923f4bb674d09fe57913d9c09113c62ab93c4e9fd26b3610507658c03c53c0da7a480e3823f6a31bb727b40037712c6ca4f3e69b364d17f466cb618e690843e02ce527b8f9cce9cb5ce89b5c8b995657b99525b5030851953b0aaf808db8c6da269128a75aa5cc8ae6c0e03421fecc62437a8c9bbd2f7b8939bea3653ee7c22ef3d68191eb23d3c0f15b33357f140722ff2e7badc9251e36ef41edaad107de65111fa2f71fb98803e91204cf176b8ef0292b7379bb7b8234c85eeea008bb73f30ae73d456cf961da5a8fc56f7f77dc707dfc247e08b56ff9514007033a551b8f4dd7910b5745f9aaa22f05a51bcb681a4a1adf2935453ffb16aff732ea773d60564b4ec76331a7fb7c6a35ee70d8ca6439f23409c5bd7ab094f91fcd9d94723cb0bce6f8254ef55335dbe6da13227bd4ba2ca3ae3e8098c038b5e121c82f226af9c6ca2bf1f07a286afe88c6772ae4e24724ae75143112908e50fbddfeb9f6717dd398b16dc8af11784cac521174ae235d74c50ccb3180a81264c050a5d746f6c98da346fd2a0c750a40b1fb7672200e899787b3d8146b8d416bcf3851e99c51793faa5b34a6fae98d754a311ab5f30a47f75728df6c2ba6b7d088e387637f17e973fe5c88c222d57e44d57172a28fad252ec3da258b598ac23d8df0baf767c0b6b51fb98e0dfcdf6949d45b22ea6e7d8da84e266ef46db01d0d2ece7107ded25d9d9f20a8ece14dbafed75c8fd007e1fdfe66bc0059e0ad14ba1bfb2e075cc33a77fcf05dd198c6ffde4ed42e05f470f29b9df97e0e4ad835deb60566885a29f9eea9c7317e5bd1a452bb7091febcb107fa647d5c9414d81ce59d5b9f0d6f5d086c3613b825d2e455169db0402cb918bab55aa6108dd7132669228c5bf90502e27b1244566a66756e7475f1ad12822e6736d1023e5dfa1feec3f61601fda3821485def790debf0b7d06d4d35d329048ba0978203a86f654d2a07867456dc3711b36ec9bfbe5252ced482ac3c51f7c1e0fa7a06e998b74687e693a1e8adbfd4662e8dbbffc0031405ba2f851693b9e14f48bfa7bdfedccb14e98ab9a46cab98888262cb215c27bec34c1bdfade198ea3f540d6a6722097d5dfb95d790dbc709e07794030ddae6d86f50eec2e883bc6618e40d59cf4c64e2c8e35c0294423cb1d4d4cc6bab8267eb738f5237afc04cdc41c1667bdec41584be6b864298e83118cd63b10ae49bd37e36d1ed44eae271d524b3c1d87ad145eba859bc9f8416cfc434eaece89e6f511a20dd67f4812f52d82881c6798cbd1c9dec76a52240143e3f6f32240dc2440a46997d694c5df0186db5f51c65fdcec124f48aead2b42aa511e80302823963268a09779b56646cea1c33d56ca4b34d5d08265d32b8c9a02cc005242e4ee914cc6ed894a4197fedf16e0aea5d3f988217cfecb626da65bdfdd6305f4f79bc9f247b6e9c2d9d97b954eaa3fc983d93b41803ad5f6d4271ca3ddbd07a0d0c994b57383457ddeb92193c1964d3c4a68b2c872bd01eb0f8d60f17554c3e120e67618d2e908d5d0a5a55d181b6368a836a338dd0bfbc97027ad4b1ce0e7303871029ede3eb055402d5b53aac02ee92db170f5279e101c96a476133cd7de18b7f7beba0e1ae886bdced81a022aec483b67a08fdae9eb4ef3824fdc6db014f50ff90efceb03fde4a9f89002a69247d061c7b68b7f85e9fb072f8f2927f0287fa0e377c9dd608cf9853907b010bcae4c2160275a7dd8988b522ad86be41e84f32b558dc38dd6f23fd00ec3a4c900ac060abf779f6e78738a64f2a0272a91c70a0fbdb55c54ddea123af8485347e4bd887e442bacb9ec1772a0257aed84004b2ebe8a8306dacbc12af6840a4e15ff4f5e0c7cb814f899d0ce9421cd1158d09dcbb84a8b55784713e4c3108de7aba6fdf125f7b15a93084c18c1761b4541893b8bad8c12bac5c65eda014c47d2818235ec6b138c0021bdf5cbb890ea0bb6a0b0c8eebdcdc93bd00e753185cc71200783aa4c7ebc882d314a61da10bdb720ad7a1dfc5e20e352eaaf30e45b80561fad63a53a87d7650df8d675b6640ada280613f566fb90ab937cbdb79a4c17e3c8ea5287c5cd41295c7b0671ce19660735510ad9af04b184860cb653b3c5d7ccc454dcac6ecdae47814e76d0918f33b0c104bb554507e7f0a32125afc16754538a636e8da5f7533224d9943ca15418596397c1d2c983c89263408816638f222a93ac94c5fbd8f49bbfa2daf06e0668738590aaec9cf6c7cc5ef15a41facba5b47876cbdfe0e0f6c6aa30d7a657f4c891bf75d30d4fdf6a10ee9a289cf7ab738391788025f5bdde557d1a06c91fcd9d2669bdd6bf42ac1402aac15f91fa8cf01a87286e429abe1fcab0b4e4c2f5ef7ac42cdf227d25fb7a140c0d8bcb640ecfdbb1ecc2b050703f88eda7fe4eaae8d5dd716042b16a4bf0b79ab519a3e49f5759ba5c49f9a762b2327c59bfa67f3822e4cfd7b4067ffc1c8fdf7ea5b5cccd2b16f8fd507910041c39f540a575135c067ca0bbf2e6d7aa61ef32b0ac6bad06bf96062662d91ad2d211d0f35c34e7d2e5078c638bdd11c545683d018a5005da89596a8e1d74386d785ca7f820506d2b4317fb84eb43bedb4b7d76d7ebed67b71cc38e8adce4e922736ce2b5ae7233c3a5106696add52f6ae8b148aa3d9e233aee86fab32da5cda067e509b262f4ac3a8f93660f2febf3e2b1865b0efc0cf8c472f6278d8c212645aa378584ca62570e671372550e02acd11a8f065ca3a438f24ea3ad707501a3a0dee6fe936145c4add013040ea4b39ac4a81dd349c0ee6432d601e50274a1c6405a75dd64a41975973f1493a2a0797e2bceb55a2cd0562b04bdb376ca079bfe82c166aa8f2f47da69188ac9977dbea7751308039c5e75cde64a1acb2daa5acd06883bce695f7b638200f7ee83890db74ef978580ed7c7fd661fba6ab3e968b24a3357e189a10eb1806ceeaacd7ee11e080678cffab8b709f2b314ddd321303eac475d6c76b08c44c2d0d156fbbbd35c3ebe9bf3f68deda41a88bc8d21fe6bc2cb38bec7a6fa6e8de7b142ab84cc5ee26186544c78d3b63c5c25140126ed55ff158bfe9b90eb400d5da2a4f10f2cee510ef22431f806bb33260cadc2385a994429b58f50cb0f8b33a3199acfe159fc189586ae5d0ab3673906a3fc58fce29022664a037fcbd3caa1467a76b0a1d012b993b83516175634be7c7f822deaf1f52a59bddd8109d468c6b669db1bc72bccb4980b6b05a45bce240613d1c9692512bc72858ffd1b9de024815c3a99d7c9848a00f4b2a448507e1a21f56db41de893695f359d5c577ceb4b25c607834a45d4ba6d08ae6a69c0def16e98a8666fb8d1b16e428827640dd49b123bd490950d27b64acbb0d08f296b5a3a723468e51258152e40c2d6c7dd26a4d522342a5e9c081e18925c6f2ef6adb5141674240481b1052d94fff2d9476be8fd2d88b8fd8ef042651113aedfb500828a09fa3044836711dad371f43ef91ee7e89244d4f8427ad39eac791807e11e431aa129062b93d4cbb460db536f4eba1226051b06e543024243e8ff234e0751873480a32e303f948358e18eb8c0d4b80843fa6db73b2d110ef33b1859089444cf663cdb00e8e320e926ba2e7cfa17a32ab0f6af7e605d419a0b374741ce14627c3e1a4336cc2af46dac7f1d1861741609fb6e62b50b4ffe841a522e460514352e1acd7e383083a9716894ed23ad966b2691e62a038291b25d9f001ffe53f027558aaaee7dec699a94d990112724eb1cf102d257d26cbef78717e5aed32144c3731c571680265952587df52b8b6deec609ccd79eba2024587103674d6cf39e94073e3678d794ef6b3cc4289ec8ef1dd0c16e5a4123536e3fdbe0099e14514a13926eed97fcae884fa25adedd883ef4e7c855def1966cf928083c40f361b0f3cca53cd0f657d9a07a39905c7a11c410558f11da229be351ab8686a1ffed991819a016851681ace465531335f72e24dca47630c0569c4d1434f74db11610801395238a7e7b02aeb0ab9f41ffd715c7c67f1e11460020009d5eab0fd2d862fc92c990072186435591b77eab1e9c61236a2ff761cfa1bfa46973422b9bb96d650221862b12eadc17f41361bd26a9a8ce44519270d1cdd3bf152d2d4f802b885fee377654c6fb258c7449e9068ca1553ec16e6fecd0e704a70ce6fcea04b15c53b365d122b249c8198eb58505c4f5eeeb8de0f024518fbaf2dd3b1169aded41d6fe5726f379492c55aff0c6397429ee5ae643b3b5d82a6f38e2940b6cf031f1602b65f875609bdaa764961d200ebfcc1387213b2fe939b9dfd97c5b626021b365d72cc5f71c944ba528e00a47e91a108bdce3f6e0e94ff35e1e7e81c8622f208e6e16001711d507d579991e1fb7db445a541667776cdfd43a2df50f2d9accc1106cac4743c4d097aed31bb915ef85efd579330d61f86ba50a848a64006e8d0db25f6a0c0bca196397d1d26bd8f48c7ba3d8c4792f00761e35ae9910cf51e27edac2e9beed76120426d267b6d75b51603bef450b3d0971885228cba608e96f8cf01385d0477d4ce1e271462a7fa8974614292f642a98007bd67f7c843b9976c0a8edc8f0d8343c95411af8275050a085b312fde466208581392f364be5e6bab25bae4d90ee3f6386c95be84de7f82fb79f493b3c7e378300f094836d76558dca8ec16e2117f3544ee1a0b0feb4e377443f1861bce1418ba3a35bee598b6a7281b8e3c531d3f481563085ccca25b729c4291d0be61dd2f1b1b7e1d1a0939a0b607071cd33b0b76d253c67a630d8e7a9afd3c38468b26077e3b4d2c7c31d78aaff4bf7f0b72cb09a444be2d7b34cf9997fc5b885851d7e6092008b4b41876af3a681e2ca2ca6747b2c0573cbc1d0715bbc854869fbdd815e454197d69c6ff5580ed8ced414bc779254ef971d0d21c372de891fbc0d611dc385fe64f44445bc5a80a718890fed3e624770c925c5bf84716e478ae66a46a822dc7d9f2ed997047db4835c636ea74d8d8c1f8680bbe818d9d4573693730cc51ea16582d0bcd2822412d406fdc17909568b626bb8205a150eb92e9f2db811d8f98d3cdca46e96aa00143fa4b298e1066fddefc536c383fda27534212fb9f47855e879f8f48f31d074412cc21c656dd93bfc0e3f76f5d43717a11e5913f93307b65b93645b6f62ba031211cbb5a77dd64d5e44471337e945e0c523c374e64c2b8d4f1fab43bf77bb3f1f853df8efafa2168d2858761a21ce904a1aeccd11ae386d4b853a37d00f588ab1fda560ae61b119f131002a1d2c2598b83a3176fbe7d2b8d94a9db24188166881f17e87543287da32e4ba99a156ef8c88283e1d15777f026106425d9480797b07e745c781a08ad9baba046f573080ce425b7f29eedb91dc8b1ec4744976f614ac7587cba72a5e9b013769f59f479de06f4a5127f892bfa9a01a9090c0da10d7e7f2b0ee453e6790aec347e6fa1a7b65778b6091c31b5cfc5870435d9b286e2763054db9dc5b3a4d0c144a9df817bdcff38529e1cf03fe370cb6391558f042a57613dab8ed1f4b42b170de8509cdd9725bde29b28cbb17fc4562fe726ab042b4c9b4d465e7e91ef4278f7056bfbb630f18dccc6e7ccf3ebe9afd1fdf40e6f2f7a65ec73b6d5739e3e6b6ac6d7a5ecef8c327ae702faed6f065eaf9b68c12b7c0c4782fc3edc80084679cef53ca2691c1e3452c8205d885343ec338b29cb225a28c977a79d9da17783288b5844fb13ffce19be30eafeaadec9e0c494e0343a13f774343d7c20bf311c0309b895b7d4e0c56b25e607e43c59c0c2c97d35055deea0cf1f85826bc07f3a8fb1dcd7de93062bb1efb32017270c501bac0fcf4572324b63a14958888ea90556e98eb37938ba2774835fdda0513f9f71d41257fc612822b6234fa57f0ff7a4df1a94d08faa44e13b4bb2e586a43ad84fa94e743212184a520b6012562db140b2adb7d828d3ec828eae74e1d10744213a938acff06c49eebfc2444717ce1e005808bf704c9afa32f5146c788a61a7a2bcfa90103d59053483b1c3ebcadc870d5895744204e7b518f9e56353b89ca9855c4626de22c19244283fa5a6753e348e3abb9ef657a2665d218a211a639f93efa3df15e1a68a394736d3b12222dc6dac87e104344eb45528f6696e749352ad0a172e24c2d19d426533d7b004d89e7a8fc6716fa3f003caa2ffeb1209519d3efe42991d29abe2f5c5a9b26bf7a06ca25e7fd2a7eb45780df3c478d482a46890f3ac89c6bd3d419a901fcca7a1812e2f423a6c74b555fb6542cd797d87959be910db67e9278ea378ed1e8d2faa83cc676280a79ea929751cb7a354d5bf2b1e927d59994c0fa6eed8052d5dcabbae2e93e7d8ebec6ec8cc787ccd73a4d36ed9d363ae89b81b8e0c0200d4a43f7c0b3dfaf8cba027ad3aeac2b6d33cb26a66b5f3ea609df4f64de33e059bca5794a1dfe6bee02e170d88b541903e19c72d1c983c39f93fca46eb5dd43c0b37daac78fd9d609ffd8437b9173f309471aac4976cf47901d600b471610bceab53906b99806807907536d2d5f702be60ac24d6df1764d1feca5fe7e6d62de30387407a0b4e8fdb3cfff487e53cd3632731fd0bfd83d46a7a82af8852a680a29c39b480d6515a032a0188feefd0fa46736afd0df8968b6bfc68b83ebeb84d34fdd3b226036f11a8e2e5b8defe9abf91cbbeeb81d83ad3fd0de341b231f4dbc1aebb03149992fbf1ed114dcf17826a69b8959112a656f248345b148bb3427470385b6ff1a0a16107d2ef0f7b447042f8c158b56669d13173f938f7724c8a5e692219bd6521848b1119e5c5878c4c90666e6d20252995d8a7e4e3b30f05b4e2d5f45fb71a2223c1384b5d399ef8fe9cdb473d9af8ee892f0b7ec21009e5a848dc379423b5ae664ba4efbe31668e6fae7ed530eb87c1957ec84e3ed509f44fd8a5721fcae1ca35707c8d70768758850e779fafda79a9a10c05dcc0ccb63b8fda592d6a744480787ae9addbd0aa5e2904ef2d203076af9522ebb1aebbb9c151951ff1dce886d717af12d8670677a744d70e08ecb528da5908a254716bb98f7e522044ddf050d8fa5820957ce2953bbcd0fbb77c313432d606514d72a45fabfc5983b1d5524a8909bc3a6d822aad227b37dfc2376c45bff2642025182d531fb5f271bd2cd71bf42d2589e7e1a766646754e1b2842d018a96693863cad03cf38f6512f24b476b214cd9348b0121690a6a6e2a0ecd3e109aab5ec18ff253c22d74f98dd7986ae4164f2164e14a605d1c6bcee15e79651bf7178be232f77f8ed74bf70bf47c082cdd1f454172252beba051bd2f2bf06bcaaac438c4d3411c48f8fca7b3d260e8eb7ea28df2c5f84bbba006813cfb9918c4ba98ad8ffa38f298996e51aef8aad3caffc241a0622c89742371622f59de33b22f7d316a2f44c824c18b3d23eec491706a66a872d22aabbe327aaa30ca26863b125a0e7dfbcd6897783ab33b3d14ea87c6760b919c597943d4099f69d8dad7086a168af1e53b9897c663fa1e6c04a6b41cd9b2244820bda811068bff0a60efc03f9beeee76f621ccb4ee5bf303fa8ca17379e5545fe93d98f159b41de821960c99d0829b3466cbe049c41ee28b6065f6d33dec49681bc2b97deb63e9fb859394819d8d21a9f35d788ecb8b158b9df95a450d0e2aeb1d14b3bca2df8bcaf5b0fffeea59a85d06a13f89ece9b18b191076cfd1951f7059fb2fb767722cded7b3f6199f2c57d7055dda441082e1133c72f27c71c75280363fd5742362f4bd946520d9a54f569f5a5af4c71d9ccbac6ee67551d6ede8a21ca74cfdbcf80af1958e2646e20ace3d6b603318fd8097dd1736a758e64e0c5f73fd3d5a1c7c970241f6af683fa4e739a2373f4196766e2f9f2832988a34e43ea4074f912936c276ff646448a467c81c66a6c14ad2c578296e85bb19abe598c7158e2baccd6db4d739a2ecedfa999a6e1e76613997b7dc53ec14ede42faa51822f5978b2ee6b94ac5676f15f278384b5346fc618cf92c335829f6d0000cb37f85a32dfac76768b7ebea918a7156daf7b0f5999ee619f545896ece675049071b0ffdf08a14cd7c1d4d8030bccaa9e424717fc81c43526b84392c5fe4c2541283284299a9958d65d360e4b72d6d06066a2b42027a1336f167edcf05d8c4925830753d83e9d82ba882cc74bf4ce6ef943134e8c328d43c19792de35ac3d5a85abb6d2b49bb3b2cd693f6cc93abb6cb200224d094b914d666306fe5e93673fa9c7c76b845ae6d05529f6638eeca5b1d3c657195f1ab339a4a162a631b913e0d900c38512223bc49befda1562b19427a4bc3b1a5646fdefc4792f3d78c749255d7e3187249cbc76e7e472ea0c3191b56d0b55b9b57877570d14f32bf9640ff67c6899db836f70cf812f464b5615a34375da2d5c4657285ac99a39d77d396f3b80e683e8f7445fb5b0fade9e0605d3ba05524c6dcf8c18de3e3386abcbee70dcaf22781648c39211bd6ac34ce5a82800659b395219be4fccb605640ead2a1ac15241ffcd3d9310ccf0a97cbebba7aafedddc7c75ec96d60d773b5a68e99576d3b06ea1759f5de1cc91df915b50a9619cb53d9e3c10bcb487c9fbf12248d88bf813cfe57636c80efbe8338a8a6b5756c334e726114cd7f124f66dafa2929b6219c18c5339ca7d9e403dcef0b5d6599059a3029c5b698f96cb45bb1f518f85011f03ce732423239982d7d84b43575617474ab58981308ea964fd0ac697063f72f021bdcea0086308abff78219cb7f7f476712974ed667935d667852eddc171bd766380eb1643e5f2a2fdd6fc28bde32ecd6086e506d6fb3f0bcb51de8986c2e897114052ec9a505f4f191b634e33c2cd335ef3643447bad1ea71995e051edafd3d72248c8cd64d579a9b6fdf79df3eda92b5987adf805ef25ba08337b75162034fcf55205cbf83e36bcaf9f70e8b]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 5f495a9e6d20dbcd0aa7bd223cf5c4890a57444125d08c6264d166356c0c3a0e

tcltest::test Hash_SHAKE256-3.49 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex abae4491adbc185cb2bd263d3217cf5cc5cd9a793b46e0d2e950c947416477bca62c80bf7e42a26a883bb28b6fe4d603a0cbf46c59016aff031f00b4c2871aaa4aec33caf41586a811dd0ea97e7fb16b7910b961b24d83bea5977b95283c483e40f843fb39bc2edbf6ad23df8570ca5cf6a5cfa06eb193d877c122329a0c663e30589a9a75bf00cedeb3d775ad40889ec2912071b4b6021620a4ded2417ddd73c1121eefcfa7664872f613b21d7652f883dc921cace2393e494895be451915a59c30b94170fac7105a7ec0e0fe9a9233e28f0fe880c09e1899b6303fcd68769c69b952da80438bef3d53c4457734af1786b17e1f55d59a6eb9f5989b01f1691fcfb6d000260719adc37e0929b1cd116c184ac60756ab9606500db31a0a3c54f8762e1dfc8ad0db12950675d6d3ec20fa3f63d1e8a8c9f8a907076b0610d1a0ed07292016d52538e55bf3f293061a4489a402860c76b7291f86eaa7a53a39b6c72ab0c1952f8f98f0bc4d67a772dee5e0ee32cdbae6fe923074be4f41b1fbfc4d86c9e8c3bf9563f9611dbb5b3ec06bc8c6f88e3920259aa47a8c4a209d9fdc49c47f7de6aebf02c9f26bd8f793483e09d45eb1d24db4a8423f5b828a25adbd818bd768472395db28163da5c398ffc66bbf6b1fcd953326d36c33dec971ae07bf84db912e47a057de759d0a06766c6bb63027be721f2b7b1fa81c4624aa2a21c95792e1e24267deb2b892ef0a541896b1ce9b770814240fee9c1fa2e2f8a77567ab043ead3b72d96d87243c155b89ad2542ce33d99ba44a08ef43da4c82af6a63283a91d55a4aaed7895cd970b2491ada33c8d82bdd3594354a91d7aa71c96884773bc3a3c976c7b86741af6383e043984a924f47025e553c550f7f44ec7ed791400fba5fad7e8ad8c9dca435f3d492272f33817531a8f5e6b7c7bb611c5420532abf605131eb61ff5533a1302caf6d4e89b355fd9299dcfb19c1744a29d5a992de529cc17a44b3f4b6518f9a56f83ed6001bb2264ebb7243220490483a89db1504d055f6b311e880923b54bc98386c883d7282398d9620857b98f9a177f71ea64342753902db686b92fbdade1bf65f2ae8c0ac7e76b04c8bcb85959d09a7db0b43afe3d28f289a7d5d97074807ba7f84a90e183d3293601bbbd34e861821780dad1f87098383e87d9c1ac541830d34602663aebee8c7c2fef38b0aa2cbee5f74299a49250671b935f689fb12b775e6840ac75648c1d2dcfc1ab5b33b4b95f6085e2911703f7c766b14ee9104cc7cfdb9fb42f825e53e14dcd8573097c09ea791f5d3c730572b85e89d506e5deaaae1c7a1dd7c9b7b93d468d77b69fe5192d9d695a153ae76064f743ab87c653886fa76a69fcaf3ac578366bc2846ba26f7f3a0e7999d32c2963cd6932da266df98b18eaf91ca759f14889f3267af1268585fb793c68e046662b5d84fb7c8a607686cd667b965687d514ddbdf3f8c4d3f3a84e3402d0c6b88f32040165ed66ed67f9417732181166d9739e16bb8c5b4d227caec96d800b151cfe6d7922bb506776492197ed107c5986db47b7fda428f4aa699993fce531ce880706569254bb6109fcca42ecfe0be255b266fc3aeec26ce4059b3e017ebf5758e25b2435581c6cab9ac802b25f2493de9f786de3ba9c0877b720224bcb283227f6c85c9c1407dcc3999741edb27ad08a09088798962a69de24d4eb0c48f1015ddafa8a2736e253fa7fb4aaff76634ad07573d3ba1002137fa505f2f3769e2762f55e17773f4044a8c39c88583962455a7b56dcd8a69777d4de4fd471d2a426efec6f9f0c7bb62166ebdb74986a1c6270613dfd64c87f0986272efa07fb97825d169b8b479aa89cad8eedea2096e624caed75cfff040d6b0c160fee364feccc230a8e56c91a8c08f4f34073913e540eb276bacf07d7e6fecf317f2b8d5e1866da3ea4abf159f4e8d5df7f8b5aceea72df7359750fb2805757f0093c6d94aed50b398ad560f767ceb899f7ac0dc71e13aa89fe5c77326de73ed82a8b678214a90e718d7d8861592d25b9455ffac563439c20f5dffec60420dc604fb2fba4ee558c8d390ee8364d8695c3f511c2385e952cbefc89d6ebd7b6b90f052daa8b906cedd319f400d4a95d9130636bf4ae747af4da6ee4c0128d0b6d6ad765f494bf51aae9bce752cb213490952cb8f27629875cf9c97b2ae8688161da32f65a6eaf965c377e336e88198e2c48cd935c5df22cfda398b777cc0ecb2ef3a4494c57f5cd7a52ea72a4aa06dcbce1a285829472fe3f5e5914474be44b3d3da7f96b0f36497db29e2fa59f7da2daf6680a15d8005d9a80873c19c68d84052eba6106f2c5aceedcf5c4d1e6e2630edd6a9b86874ecda7b0af795fea6ef82f3d582ad081486a36487dccc9fee9bfb12d46a4452092e0ef753e668a261d2a13e00db1285922f3fc6bb2c1fe65d7fb7a6c78dee2329129ca34b07e48e7fcac4bbd579eaed8d9ec99ed212edfba51b8b2f17d85de4bbdfac075b24afccea1d13f3ba23db49ef1c6a713457dee4acb7a0372b14399da7de68ace90371648813b76d18a38da09fef4ac948c39bab5c9b1e456d092c54d557f6195f6dd35c43f6d8b158bfaafa855f902d781dcc589b0e2ce2447edc132d917ed6232a7cbe020c9d48e040d76089b665262c2f19f15359f294183cf1e196d6296c9f021692ad9f2fb91aedbed8933af03bcabf28806bc599e6520c14c7fb6c1e6239bd46de2bf5b68c6c90076d8b355af4bb96a40ccb98495d58b4edcb419c86405b22b6ac6656594a40ef5a2459edcad9677c339e5b1a298393fc23f851ae898f6cfb0e03450c407afdd45d07e5ab697336387d3d039562df6bae5f5313ea4ed6d40ef5ecb05e94a40b05bb1d17b65e4991942bf1ab4f1bf9499048e66f98fe9dfa24146d8f937d50d24a1a6ed858d2e3de56e5c23b917d5a936c87b84effc06d48041391caf42207ba6d23030ed7edca864752b99ba3b089b308c3d19668bdcc2578995d4ac9ac502b347de3a37cd685f22f1bddb3cddb0e0f2ca53a311b1d45f9464edbf55a42b48d69d0167d8fb69c89d6e8376b57277211a2d4fa0560075d2d37dc12b4ee0dba48d2c6a58658b498b20360cdac88bb3c1f31f919fc7fa39e2713e80a70ce35eac4380597a41ef900d7802ba95caac0f4a3a0bca0fdbf1a8f50a21dcc0f43e1cc696235f4c12bad5c5f13f2d365035d2304b8c496ef6a94b810ab205f7b9339e9a01affc5c4c5f635b2855d51addcbb50aa41ba03bcc638a2d0f89ccb9a0666c8cf260b119535ff11389d132d1e7c0103fd0345ef4b1c2fd4f64f371956e690f1604f00e01cc3ee7b5925bd6f9f2d58c465c50e6384b3a1d6ec7999509579deedb95d863a41b6ecf87de3021d1735e81c4a51bd664fd5b531183e6b784109794344184728ec5820120ca18b4170ddd892146df90194c8936ce465559a41dc897b6748e8b105efb3506e25ffe2916d51af2be26a3b3bd5640fb7b8febc7d3a351e8cb414de74c4cc3a0b370709622d7af9f777b91c2c4450a3f8fd0fe9dd6da5b31a2571b6211f94594ba14bbdcb647cfae1f68eac505d7eaf11fd2f2649bc02c27963a741f4473334972a7206b45c7e3a4f2590f48d6817bb6980077da96e74d310365f87d686d054559925ec055ba940aace68fbccac424f684e3ff5e5cc226f49664191ad22933fefb70b78a6aa24945bb7bec9f67228f4762e7e96e51e351d8bbaf4666364a57fcb4ccdb17f9118bec8a93967f102f031fbe96c6992acd4663ffb210ede942e9c532012a07957ad465b6b81dca7a4c38f5f47b275d2bd28d1cbf16f9208fa551cedfa834b7a460ab57bc73f30fea0c9950a10f8c38e9a59e6986487f9c7de438903a3c7bc6ba458938f831b6ce03d29cb650ce559af8c8e2d0e1c104b0587206afce487fb35babe660168bc9734c40cb9d60322411bd9ef2f95e0b390a93e134840836b0ebed065b8383ecbb9e27d99e8c6bc5783bcc9a573967a18d19b4b44aa37481afff02e75109ccdefdbd1b0f9df9e002b2578a6d88177b0e616c3f6dc1849fd3dd6b21b15f795dcd103eba55326c497463139b6afe2a24bc5650987031ade687b99ebe16df48b35183c17a4d046a24951aee643531d7d135fc85545e0395e537d5285c6a68fe69e6d8b3df498c69edef4a56793ecba72cf59468f799cfc3184eb086713e8500ee078fa46ded22e221dd61da4eea142e8495ee79f6b5eecbfc36cc4790f5ac06cc3e09018aaa70795cfa01e849e9a3c474714b46d634f8f70daa88da3042566660e4e559ca03ed75fbcf9b1f2ea0030f69223b4e1a99770ad8f486bcd3870ca658b6952ba07c029e8ac8adcd319fba65ff234f0e4845d14dcacf466dff46475d200da8e5b2954829767fba91074b227e92eef6e5c3ec90567f75387c18029ee13364811654c236cd6b4f32091434e3afc10fb38331d05cab4390ed55c24e6bd92f55ce4c2b9546e0d5d1a483ecef668005e01564f6a36eb2d39cc589628c46bb504be0e58b81011a2281929ff5cd3385de1a8ce9a6c87f038c1361958d3ea7fe62d159711907fdbfede98cbbd360d327c6199aafa6d1e623f97f41f8b6f80818c360988d38bc85689473e375ea5cbdec3a67bf259b323c9a984ad731542b0fa0ee844e888ef140aab2ab474ccef35c59b77f7ac9e87bfabde50091be095a071d60b6bbf17058a7ecd50a28aed5c746e6d9db5e2b131199246c3b221d2af786e4b6729166815533a5582ae82ab36b0619fe15c9b7af95b0549a54d8cd5da6179d5c323f4636796c6ad868363edc310279b0994e0e027aa8d4fbd8565d05c831bdce90461f0427cab3b24c7359a4dbd47c7dd07b8ce0231b1c0d4ffb3aa7e05dbc89f7265f7f02d70692623009c1adf498d275b2b29d315f904b2667e4d880f4202ae150960b7d09d9e523ecdda729db654ad3841dae281ed831f60cfa0c2cbd7f0de975413e08dba4172c1a33c9f1f1583384703c9779b16a5e395ad8b735f22fbf69d4ff8b28d50bc4c538baae88eee84902f78deda8bfbd3c5af20f6e5f3ab8bc0d200f877f8e676a99d8c0c9412cabe7d99a802527a24738f5330c95eb0fb0902db71f975f605d75046ae4aecd22f99c72d9c1b29901aef072be6ec27bd99db8563aae4f6ad34470bf7f94d38f7a87d35925b12a5f464adf6df494888430d6b1110b1a24048fb2ea05876fbc0a8bad29171edd00fcf8a17231761c3c86ae0206e8a901a9bede2f4d8102c3dcb0eef00a1715b3caf481593587a374631599961637a4f3351c572017bc824fca250ce6f2e3bac3dcc888c8b5bb0d2ba0939c098b988f4d7a9f732be5127641e8e98df88ff76e8bdafb67766f5623b059931dd2c385b89edeaabab9121d6f68cd50babb1decb18a3a1fb5f8cee387811296a7985a89c155c5d0b63e3b57ce12fbfd3b95391e243d7e87fca650ed993c4010c1b0bd1f2a10e4a3ce41dd3c22eee961891d7e1627140cc6943591dee9308683e4c267b0634eaf969b6a54450e4b0a001bca396f4aac897e14fd0e21e81c4a828933e6d80d6d8b1b85fe5d0cd0b5f27b7c121783ff7568f117832261264e007f378bb70078fc0bb5169433ee2ace2716228b84eec5fd3fe1f45e7b1714443cec783054c43688a5f5d5c295836ce21c6287acfe2a2eb252a333e574be42ad744cb3d84c9dd681fe504befee472790470343ed0fa0aa2355c76eceabc131c83b3282da0ae7d9865956d192aab3db573b6acfc225fcb8cebdb0fd609cba5252f6105dcc2c5cafe45b7c1f41575408b56dfb93d2dd98eb12ff127851a42434ac3978bd050d46da4a79227d8270a2202953482875930fb1aeae4e67f87e79495289de293b4a40d92746fc84cc8318c2318fd30650e2bb9ce02fd734eb683410d44bb31ad54fd53cf9296ccd860b426f5c782ea5cb49371d56184f77911ddf1ba0039a0a49aa7e763eb4f5a04575997808b0ad9f6b330ca38edc19989febf4da5455e5902ed69705666e29a5915e988cc4ade24ba73ca6dfe90fb8205e7effcd5f974814eb40c97b0ea96b55e022ba0e2ee47f5305d29012f317cd9753336a75205c143115959037a61b5d39c86e988c95d8b71e1d7142fd4b88ac7624a5cf625528ec5d243155cbcb2851b990ae9e78981f2c2544a559ff30c6e745394299055c7222f19da0b4c7cc54fb6dff4f4662b40c610111fb2f897177007d079651eea4bc7aa6f860279c4825accf6aed2adb5844d82a1bcf4e3c5c0d7a96161d747edc8c35e5aafc18b9bd1f084649e4b633234d1418b8be30787efed818fb448b465255f7264bd112b0a9a5706b32e2730a738987457f2460de48cf8b8e1da800d5a4ae30e1518ba0117c5d87b6ac52dbe1e78ea448e5be69ce5804175e03b47f9d51f975cf42884b4cd3abb0b12ca26b29edb11d9b72d8c5d90b110e1123f6520dc8bc281895637ed31e148dd32a7dbb7304b545a5ad0fef7ef08ad24014fa12b7a79aea85c089a534da2c71a52c31173dbb0faf000ac05130a6d5f6535d1c4c2b4cea1f7f6a7768f28667fe9fb86938ea7f04cc230296859e7c96fcc352f968c9473e496de9c9348ca13b973b35828b19cf492f972aff1709002258289cfdf322150bfae9c4eb9273c93bddf05a19784c3a414bc4ea666010d02c9afb91b675b634d7967b924b0d385ccd35676c9a9ae23e819344d7690b364afa37a4d79f6b063535ce8bc883ff5ada84300903826d8c4a9eb88f687372f9ff3fb0cce5353d92848ae5a2de13035bd0e5404da57d6a9afcdd0e1d141231dc6b5188dc410477dba16b8e49596493abce54f8bdc8c80caeb3e1167670d1b23dfdd4324b5189a4422a3c2af7a1153adb2177cbc1f40eee280e2f5413f51e8ecf452c4f92bd314d867d914e367b91535a78b23c02adce69a77a3c698e276521e0cfee335ada97cde919ef5a7e1f6597ba4298cbe85c6319ad768ca93d6e5216230c8e800c4029c01a9dcaf237230e527b0d9ffdfb9689789a8184b5ba5051d5f67981a81f6463ae7b67a8880a1cf82e0d483c34b4d29df0ff39d8f17d63d0ebeb956c2e1cedd1f38c060c9e6f63bf84e170f2129c970d3d5bfdedff0f2f7bb262eea2847d12f139dd076b97cfadd0f1a816561a1b6a7398314c3820e809aed40cf3d94dc89a4debdeca4a26b341b8fec1a6ecbdd9b35dac1fa34c298088e6cb4a3354ec87da547421fd2cada2d5e3f6beb10a60200827e357a19e5b7133a0029b2bb9d32359817d16ee87af26b0fe840fb343c3b6df6ec8a9b5a34922808714705b8cb423ae71615e3cefadb7894521352c3d3ae6bf9ee6666e0f752cf5f86b7a3121e2213f80cb3856c92bcdc57458bf9a3b48381f34a72e191761e90a7082194b3dff74835c1565caa8abd1dbe8950f7be27e3384cc9551656f81ff449c02ce18155ec6205fda471712908c533e50b54fa73f6176c33b70d18c77c82ab73819166ca26e8cf8745cba7b9c25c1d23641941e2e3a6bb5042cdbd295ec336ecc8ac4984d062fd28e27236801668e409024d7abad36da2e89c5e2e67ed3d52f2a83b11cc1058f6a8236f04c72a73ef608ef88d44edf587c26dc854c8507a684cc945a8ea0e5322cfafc9fbd52604a8efaf2261c85ac5d3a75e131696b002dec3d4d2f526f4dbe9642f8802f433a476800ed4e08e4165ef5f16485b17345b1e1f71ebe0c8e776b3314ab5006a79d9c1d95216f1ddcb5e41b23e6f0d95050f8e284796511711aee8fca957df801f2ef2c324ee7cff1f3733687e8e13564aa698a5ffdd305c9a0af08ef376867e4d286f062c666a3a67782c487daf55a32ca6a36040c865e0aa1233afd11addac2d51a16a1185a1d7c8aa941be4d9bbc3d399161fb35ed9e8674f1a26eb4ccc51e430f0b77c530a1d6c54d2a95a152d0066065bab00a772bffc480bbde8133bb79d4dc5b414d98d567bfe50ba886a93a00e76d9ccceab19ac8f856f3a717812247e31862a821e13c81c30751616e0d5ecf270f849c573b7f6498faf662d8239e1af639de26d2a82bd7873a984ab7fdb2c3b7c20ec8e0632e651ed3109c5399836596b70a17e06c47bb74e54ceef508da81022b97bd16c74c4d0275febe0a5186aa4d269325db9bf4a004adeba8c5ad4a79aeb2bbf35ae63d8edc6a0d327cf9fc7b71fee5cb14b5d747bedb01127a59673005edf8063d3e969d1515b8b41be1693bbda69e622c5844052c2309a6b3abd526b043b8603e3edc0a350fad9d87a6617d78c41995a2e1ef5aa4ec71ffd202f8d0363a898bce756268c4ce486910c759b34bcde3dfe8e12dcae1bdd66885fd66bef058f8036e50ee1b4cc815a167b2d67f9f2a89ab9ee483d83b0db39b2009836587256041ae8fc394258391c0fcf75c24fb607773055a8605495275e230a5f34653067ed10f508785e787496231134f65e91639d0ecb1a8c47532b9d848512af3fc92802bf161ae432b59a8efb4854494d0a24d5f958860a84714ec07d7a99ed0dc5030dd0521ac7e39613cd3f7cbc0445aab2e59905d4233477f78db5f0dc37f8aa5fd4eab2f0679ca4471b96b5546e6df7759598d9ec1c7fed90ced5efc2d42802a321b63c850d83659f3fa8fc04d1ee7bd6af9bddb6408c5c8049847f350ec45439badcfabf00c06381031e58b473efbe3bf94d171bd6844c2fc76ba91d2bf529886703f4878a7c26562da0d24c9e99470d3d539101258e43050f32746074e208f8f2d331c6f1df348786d571b498149eb54158535276d3cb6aeb80e9e731b479f121f6b9627e10177ad6663dd5a9874b99ce0263f4117b6bc621fd0e9aaa9204dbbe11944579385799e5fa3e951b1ad623abf9cbd13eadac817a52ed6126a5321e8fcfcb552a7e7a4b7a3a7ddd34f7c8baa2e693cf45911403be278e25ef148a225dd5647cd80b0af75fce01963e43a9c57971c1d86d502db4b523f7cc4b089550efce6aa0cd068f075a5dd2a67f29ffaef9415fd300127ffd26ef324083a9d90e0f60e2ab4f988fe2348ff9f740cf54dceaff74a744fe9044db334767de1ee0c58333d684a7e994f0b50e7d6fc85d2fb71452093e823debf29a963c2ba69032de14f04d131d202599a47f66f861fc19a73ee3257f01f615702cc01b73212655bf8a3f5040f866cb45ca8dbd7951d49914325ad0520b529725595aec269909d3d2adc7e6f382e20c5cf0de89d9e10c3766b65e129fe679fa78e80cb52e5460347e4531171401bd7346dc1ad20259cc7b059397f44edb92c6d3a37d80729b54fe2a1924eb8bbe1e856b57eaa0db013eee5a91ae7d4832c6819d505654dab50dbb40f2496b40012ecc3428f6fc4c208717cb774bb673333cb53db83e3a4eecb2f22798489e1c1214cf0719e5ed3d00d27ec10f15a5b8261de91da3de38b6866c2c47d3c88d0538f9164df05f7c96e745aca51fb554005290a6a4d9de59facc62f0086b713ee4bc052a6f760eb03f1e0828dd70d2cb3100be733a21e5a20306bdc6d227edbba2e65f92d373979121ed447ad3ca15113478ced847449b1db77ca4360dd0e10c25fe30d6e3afa527229b212bedf4262df202e95d330ba9d1ff7540c9212ef837574c9f7f06f1de7b2b72c6c295b8ac2a52e6378b673bb7c6c43bb8067609d8]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result c8ad8b317def92bf92b494b203179c273bbe89bc5b8ab6de3e0cadc16fab599d

tcltest::test Hash_SHAKE256-3.50 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 8cd614399bb3a452376b1575afa6bdaeaafc286cb064bb91edef97c632b6c1113d107fa93a0905098a105043c2f05397f702514439a08a9e5ddc196100721d45c8fc17d2ed659376f8a00bd5cb9a0860e26d8a29d8d6aaf52de97e9346033d6db501a35dbbaf97c20b830cd2d18c2532f3a59cc497ee64c0e57d8d060e5069b28d86edf1adcf59144b221ce3ddaef134b3124fbc7dd000240eff0f5f5f41e83cd7f5bb37c9ae21953fe302b0f6e8b68fa91c6ab99265c64b2fd9cd4942be04321bb5d6d71932376c6f2f88e02422ba6a5e2cb765df93fd5dd0728c6abdaf03bce22e0678a544e2c3636f741b6f4447ee58a8fc656b43ef817932176adbfc2e04b2c812c273cd6cbfa4098f0be036a34221fa02643f5ee2e0b38135f2a18ecd2f16ebc45f8eb31b8ab967a1567ee016904188910861ca1fa205c7adaa194b286893ffe2f4fbe0384c2aef72a4522aeafd3ebc71f9db71eeeef86c48394a1c86d5b36c352cc33a0a2c800bc99e62fd65b3a2fd69e0b53996ec13d8ce483ce9319efd9a85acefabdb5342226febb83fd1daf4b24265f50c61c6de74077ef89b6fecf9f29a1f871af1e9f89b2d345cda7499bd45c42fa5d195a1e1a6ba84851889e730da3b2b916e96152ae0c92154b49719841db7e7cc707ba8a5d7b101eb4ac7b629bb327817910fff61580b59aab78182d1a2e33473d05b00b170b29e331870826cfe45af206aa7d0246bbd8566ca7cfb2d3c10bfa1db7dd48dd786036469ce7282093d78b5e1a5b0fc81a54c8ed4ceac1e5305305e78284ac276f5d7862727aff246e17addde50c670028d572cbfc0be2e4f8b2eb28fa68ad7b4c6c2a239c460441bfb5ea049f23b08563b4e47729a59e5986a61a6093dbd54f8c36ebe87edae01f251cb060ad1364ce677d7e8d5a4a4ca966a7241cc360bc2acb280e5f9e9c1b032ad6a180a35e0c5180b9d16d026c865b252098cc1d99ba7375ca31c7702c0d943d5e3dd2f6861fa55bd46d94b67ed3e52eccd8dd06d968e01897d6de97ed3058d91dd5d62b1e07306577b392eb039dee0fe674ee23c23fc7200b6df37a624ba78ab01a18c5785b9919fe33f6149d7ccc2517ed7dd8c6b7bf28bf77a49c2d8836ce9f6b093a37a53605e27f2cc7aed9062adbb2eaba69692e9f0e847071a1ae5d115649361dde4c9d95bee5b588ba4b326dac65d32d2cbcabff8304d5af5106a0ff5f550dc4deea46660e180ebc323bc789f466c5c5732a9dc6b7795289de2998e524ff1ee3abd6b6e33a86b6e6b9333bfc5e4610f7ff4b9a81167255b58b9fab6f31a7d7eee7ca6599dea24cacb1ba062154746359039828cb2a607d96fbd16f0a2fffd73af51de8e664fb1e52be48ccb541722b5d3288bee15dc438c2a1574a225a578b7c664997756811ca9d3157f614dfefe7790ea5c3703b2df5ad0ea9d3645b6f6317bde627b35256dfd0ad7ff8cc7a2e1630fa67dd044cfe52dab631712cad780c915e7be02cae6aac81a5296b489abd3619785771fa0dd5cec01a96ca07cb21c67dea63774de69ddf449adcb415cc2dd5971afd08edf814d7f1be3234623efd5f31c44543a39590d68e011269b088f0533e64b1384c865bfcd413ac56e8636b05518e99dbaa35c430c26a5302b55b955d73c82c5692431bac0bad6d97f6e2db7761abb9b5de41a86c8659270570be9d52dbb7b70a4bb8d473fd0dee7e1a37ff13c69e5d58bc33dde84e3ff6f88f1c68c1ead5f9b9f551f6c33c97a78fbedd266904f8dd4ad0a6a5328ea15b327d0f982905855cfc1ba923382eed4133714cf1f5b12dc1e297f4bee9cc0fbc69a7029bf6c06869372b18ca415871140fcdf1d2383fbf93d69eb88b6c8adda304b99ff4c9bfd196f1a04b5c6d4dc5c87b317647af2520cb9d315c9b495fbda77a0132230048537eb2179b7a1a734db71c2844e2d8e5f3f18d1c7b5eee9f0222503a53c738ee80890f0d9373d77d9b68592ee81434169b8e4cac7f46eaed6dbc1db19f21e236cb3e5edebe0a32a11164b8b1da5c4f1ba9fa426de2f3ccaf32cd49035ee37aa5b6173817957daaa25234c15d963b988981de14cd40e5e27903ee58ac2d8c90afb39c0144947eadd5d040f99e96329ed4c5a22a67138deabf4397c308757d92d9564560f2556dcad00e21d7d164c1c081e7def9b7d56c340694422ec4e1471fa7009bdd8d32cb70158e4fc2b28c69ac155aed093bf0f16cd35875d25ddb79859d6517bd91b7283c0ab333609e77bac003b174ef6000cde39a12bb844fde757320d641a79c7d048d442f653811a1059ad16ddf02d08f4236ef558b8af764cb56d5e69221f9ded0f246556d9fa8b30aab02f2b3f9e9f70ee537935e7cf108fbaf3118819356772df985b7b52dc0081a5f1ce27c2b28d2846d075ebcc0c93586eaa6eeb8922eb06c1186e8c458e42ab54593bf901d199c333cd30a1efcfc64eda7bbdb7f94ef252bc8ce4b13b7a1957bfcebdca84648deabd32f380d97e721a054e4517f22143fed8dc0614bb074c2ded399dc2d4d12f44ede706b011835f64f70c4f31fb03a8b11df11cda4d9da5d4e68324087882487acad5b1581f4455d3b99b232d9c5ce71394b16e2e79a4eaf5b29297c5f8dd9f335ce23ca18c2b1c0f52e509345d94c9cd44054336c884e4375a504120dd4cfe18acf7eeb2df9e7bc1cad1496ec713168736d5e51ac1a65b43e5a46942ad362bd0c1fd10b4a0073c912a462a02614196e8700a9a03ed7017c05b755652f303ef04a4daeace58cd2526792ef518b3871099fc8aab19d24bdf57c4ad5179341a125c5b78c4298e58ff29bf70f3da464b4e42e23f6083faa07cb02933a2dffae55c7ff0bde6ecca10914104f4696ea1f6168a2810006aedd5b77291ef91abcccb95166a939740945da51751a2a2fc4df13119d8e4d5f53154564505c96606333484c8d2e1214d75a70152ad62e5add0a36798f9a5254d508321d38ca96817b688f23e2f8fca3af4566e9b211c79a8b4737faf943a3999d2cce2c12e77e007dd30a7208984db309ad2b49ab4b8a71680cb4305b08b59023d965fbaf31b16fd30926b15e9aa9b56ed839bf66e1eb71fbd1279435580ccb01b486164e47d5222381706c556e854d577d2eb585736f1eaf2afea108b01dccaf34cb0670886dc9d7c273fd9d8264cd4c0256b6778e99ca0a70c5e155bf6cf784e09146c681cfb97842bdff9774ccd7c4ee5e4ccd81d026865909dfacc47eee4b3e7551b0a28f938d989afcc3c431df4ab7b1f2e7fbb696bb2a36e66e7dc8133aa4e3a1bf8931ca702ab74fb2ef184655f4de13676ac1ad119ad9a01b39dd090bba68d153a43ad0d87f7f92d553f4cf7f0c5f58cc4d65dc11f16ea74387322216f5714b0d622f391f1d7050bba15bbd1e84a22d771237a634e4723677e44c10e4dc99895d617385cc7b25f3d645c1b1ccf432fbf867ab8e02da610818efaf380de65e06b4109c29591f0d06a5bfab2ff2b1ae5ee0ac26060449c786b6f7b019fa891b6db20e2db65d8f8203aa8d9c9a386360c0905e5ba0a1c9222cd29b1339235b6e08d7a89c9f42234175752dfa73067ff6cbb80ca0e073ceed74dc582d0820d3d272857e6d469fa0b7c6661f696cd57ddcca98159a47f2c195f964ad82296b68c5355c0e146ede5e51912de05dca2dd38f57e137ac399757c824ec09a6ff7ba0d2cbbbb6265a76d2ab400d0f4c2d88178b0e03b15b57d9e7e081e2fb000cca127790353517bc0194316db3fab9097cb05c3780312c0542f86b8ada0011d3ef14104d48d96ce5f7196074934118e064448f6ed72592d46b1fe5ba41a770d7534c593d77319a6adfe8c4ff2b510044e73a713e790d3447aab4db9aaa6f91a98f11aefb30cc34dd2478eb580cd8f3996e08be01066664c19a5db9a684b708acfb1a8e011607a0af5d502029881777607145d270dfbfb8f4a2710c68511c2a644fbd72e997827243e2e51fee4dbae03c99683ae89587b5336ba5404aa00d8b61c570fa0f25bb3e4d6dce4710ce21d2803ee673e2a83cce104e50f1e7f219a02824db8ffc5110492e5672223b89eac2ddea56f9e9886d881dd31a9daab7bf0d19c663a13b9a30476925572dc8f184459814205987c69857ae9258a01d716c36d9229fda4771899d706303e633957cbf5144d90f27e32bd164f491a5baafbf91c8d1f6a7aa678adff697fed815f632b49c14f787545eb679b3825c2afcd317c27b5cee75cefcc2734e2cbe7fea9454a9daecf24e97a9b6b52cb42e8c7e7c032d631c0dd14fa1befbf999b93a2be0412390355fe16c44bb1833127f669a1b105702a7db5686e6dede8b7775b3447a86964e9696dc3cc022076915c525ea30bdc3fc78bd521f4ca09f664e7a67eeb3a39688894d9ba3ac8a272146a666d94d69e893174a707333b2b33c774dd4653c1698b075daac1b5a51ec1e2d898601d1b35978fc091e1d4c73be509a566552645e1168e4d49a1e5a27da9222e52fee5e188b10af5fd797e7721555103aa730dcf895147ea1c2273c6a573fdf5fb0e95307f1eca9d5295da52c5cbc8151167b065498358bf8c0b071a7f669ab4fa59d4100228f63ff8fe8f600f8e966304fbb61209f5e951022648a4f3cc22f3b9a74b8af915b664577c46a9e8e8e275e9f5c8dbb1f0232ae439df6eeaebbc3a9fbfa1a54c2e3493d7d6a736361fd4d4291e8dca29ba2dd19b0d73804a0d9112146b7f6ae4bb9554e0d6590ee37c96072d3eaee6599b30ce906aade0fd78c80280718ddfa704042fda420539d5474d965c1dd23729dd54aa2a173598e9748a934c9a720e7e50a7ad2de352c0f6c8240a1d82a2c682c7c0ecd0deb2b0f84bff4bdeaed7ff51e9a6554181e9aa2c4741e9da37c59a4aa09d1cec85cd2e11434eb59f7563b909152ab07ee471ff610bccbefa02e4bb6bb112c2e5d52d1c1ba6a056f7b7bf448c1d5b444dd393c77c5dee0ee5aca732cb42486723967a8100ba1cb84f3b92a8c449609c1417f70b6585ce6302fdb506549a67920e905e66a7c8eb620dca85ed98e0623d3c7844d304cb9644bbbcb73fec0396cc0e8a7fd2f81734dc9b2c401cef2c88b12ebe232541766b3a77b354e67dc3fd9c8b4e85cddbf120af5f296a3db373fb7f51b13b0b04d077cc9fa83502ee23c58aeda21960389cd762c388ab56cbfee22f0c19358c351fe2829964029b276b161e9c4fe391f761807d2d13ad711f156649c9bdb8b0bcacd4e4ceaf62ba10e317e1001d8a6a008843880790159597ffaf56ef666d8081bf747ba650fd6591d3f15a81d3b7f33b59490cb8c88ecb1b06e4dee6dcfb036ca0eace8a117ca79282cb12883b1133911cba91a883be1a93702d6715e70c4266965f65e0b88785fb39ce8f7b1b4132e818be9d3f894d8ae786b37be64f454355eafbc9110ec509b440225bc43ceef82a967bbae5a1e423ff909ea1c0db501023e5e58186dbdf3aa5dfeefec966c18e3dde1c6f02952beec3d616620b55d5b1b6cc4615a6e77c20b75e5afef46061fb0b38c744fe2bc9f21c9f424430837b2cf8ea450ed8f945c4d00490e5acf478477aeca5c2412c6737f0354ad1952deb8bcf860bf386dbe22dd91ab53a58e8ab7b7441dd70335facc629de5791a31dcdd625e7bf4c1753fa63bbe8f4866205a49de08097d73d8e41a6ade3910bc21ac813e1568aa2f32a356f5cb6735031130bb8a5f2fd7dc57fcddf668c1fc75beb844ceb1b947b82283d58a6cc5a202dda87d1addc34ec35fbf97a3a20294dd459aa882b7e04622b14b7268071d27ebe21c1f2df8967acf3ca6d7e13e9d926972ce2d089c702dc59b74ee2d1ef03f34cb261222340bc4369b4d0f3d82d55d90a2cd32bed3db87371daa893838c14063f530e6a61485b3bfd81cae27135c5ee972026a13f294caedc436d417d912d40ffcd70d081ea6d1c19f80552c54952eda5d2823a67d3e61502bb46f4a7467828f4e8305f6c6e1a6c24e3264bbeb0245f9b0890ff4d83af314b09dbb5e9f21a46876bf61c081c89b58608d8d543b462cce38bf8f7d981ce8920f7d38b2bde3e221e2069113e3be37ea62fc1f93d9b34bae423612af4146ca6e74bd67f55530a4523cd3245f7154f50ee2289be92aec3b3069773a18486b10e0ace8e984f97a636fc3bf9c019f0f6b2c5a8d92d2b35373eb1b1d763721dc44bef48a0de01f23b7d1332658b8d15002c9388594cf078b8e44d373578a722cee50081b75954aef1a3ce7a1ead3ccc9446c18bb025c9be6c2b42f234e90adcf662a34079122e12ef2f97dacd2e0d5dda89b57986c09f517e9ef9aa7dbd8295654c424f8e1079655ea9d51b1a17e70ffb7cd81a8523587714c2d827b8fcf993422a44749f5b1bf06599ef05ac6fb42b1fa892355358de79572148308caf5620b685117854fcfefb2d884f602c3e5bf96d934c949867179f6e42b28fa1dd8182e9e4112254fa08cddefe5cf4418cc4c10ec76cfdfd56ed3081ad7c0aa08e610102cfac3c485d23b09f817e899462d7cb2acc5c39292f4776baeb106a31cae0e72ace4a8cd72e36ea989b1de6ccc77c5ee8288210c6fa0cb73f83d476fb9ae57a886a53dcaa7428c4f2d3a1d492c49bc47065484979bd263c38fd32f8a7055904452a2ff26837e386d5b1731b8e601c43eb0a15aeec827c4dcee291b6dc1422cb88974696ba7f4e7868bef98367a3e72481a05005c750f63128b8587a43ce29187a370092485551e2d4819cd4c695e4af59ae6317b1307c32700af10a843b56324295c6adb9c0d40b4083c4d5523ffc2b9cbcb5ac5328f696cb5dc32e466392630a36feaeb6c9bf3cd54ada4fb4a815e27153ae8c55434ca6633b36b0314fc3f1f7a4125ee677fabdbb60440a93d8181a01fab67e5e8667aa602bb257ee06d22533666885f2d26ed6194d6cce98d8ee1c7339354b16fb2deaeab69fea2590a847e6046aeb81e201cf1797b8636baf7d30f09893bb27a987ad276265327df62b9f37067e573cb09cefdfc89290b365af9da0a0389636985d3d42ba6cf79f3f45744ff50e92ca43287f9667611e18036badaad88da4eed198e061431d003373dd1056598165d5a38bc767fd8dd6449098a637c8f8adf45b1edfad87de17e09bdbb973b83f9502d9af0f78117e7ddc1420d16ef9e278f33ed9824d0d18024ebd26b8ce9cb0edfbec7a9ff12b9bde8b98ea7678f2b4ce9183b010695d348a26e4a855908c3c3468e4d6befbd44ec0f722dedd7c3bd47776318ad32b009877101548d7e1114b31f0caaab6be92ffeac8bde44da35dac3b4b505111b97dae91b35aee88e8b245ad3ca5decd61f01425a76ee41015dfa2e2b8e9ec133b5cdda0b8ba82aecef79270f47d594c0c73f6393c3fc66cf949203364024321da268c6bc63eed92ba689a42bf5a057be9a50dee2e3772aa77248df7f8a63e82bd6225bb86ec157cd58ec5eb4545c9a11d0dc10c255ed111b9f751f61bdac5800e980f58a0cee3b347f07c322f458d07d3337b5acbbdc9ebe44ad4f876a8c061f250b20abbec3f81371625e1256339f631a0a1a1c55b437e23a67dc5b117176e931376997f4c122ccd892abecea6b6b45fdb9da9be4128149c91b624732fb2ef1968c3cc96f842fd33d0f192d316ea89866cd53a5c755ef37795e7df64f9792cacd8016ca5f8b93c8e73e424dbbbbebfcedcb31c4701cf63dd3a76bc2d7c556c72ea984157525d3109fb693e8f9e1a9d5eb29d1628ec61aef607cc8476c12cf99626f01351101824c9efeaa697c6e76a5f76fdf2a73ffe1be98451fee6cee8193e1471aa3e3ad15cf9d7ce259a3b0b6ff8b13a766b018df1df396df426ad6f15933d84cec4d67022bf3c7d83410670f452eabc6b1d3af679ffaf892cde66ab35bc288f468beedcbe43a45f88332efc4094a9eb9864f321fb726d0b70b5ff82c0e15dfcdb3c89ff78ae9adcfc18bb999de7762fc7e933f6be5ffb5d865382de002c6531557fb0c09728a35ca69ab62e5173daf0be54025d0cefe2e53661f6a63bc3c7987cfb6a0765d849474f5f26a3a55f5c96464c683e2b49a90d4a8764c2bace0b971759bfbc28e71305bf0f13e0e1d4858927796e816497d83c886cd319c576ba98f040b7c8297d89febe5385cc4df9db3129841b0efffef8d9bab94b95a3e25b02cd595b11b0c0349a14d3855131f7e8f7141578cd44a8904ea615d51d9e3c763d774cb28005db9b4288361a56d4f53441afd38ba67bbd28021529779afca993b1b6c0c4fd6ff4475ce4244dc47f1c4578c3675e82eb64485dce9d3bf206533bc6515e9a713734be52ee4725817a94a5051878f947ddc679c79b18290e0462f5e412cd3bc2a6c28a8a6f44aa760d84dc4e76af62df990b42a8424248d63efe4a73bfb5afda02c7326e2ec6e48b801470bda5b4a330675a2c688cc4a032fb4dc1db21c0ff9f936a3f64f573dca91a6eebb96c2ec4248fdbbe6f4146390b857ae284009432fba3d438d68af399b624b7d5a995c6cba258b88026296f1c4722ab35d624d950d5782ca52bb6ef239be61ab4f7e623c2910c16faf30be850d01b09433a543862145b9b0fcb410f8341a8bd120a28eeb0dbf120b53fb158dd8cb8bb93165a586fa29449fd1ef3fac08fb2c8764a22ce9e674ffb3873e168cc6540e9add3fce37f666b5df78c9459e26c4b64691f9e6c931d70d20bf564c02442fdbd1ada037e9b4828ff857debd3f2c2bdb972f1626f97e59bcbb72f0207ed0a355d619236d3c93012593059c111f6784eee19283880b2a7170ec38782e62fa731f10a625f8a130672907f88debaf976472be62ce647ed4b2dc4b767ae04f30039a29eb4444b81b290cffb720a7700a4f09a6266346b4fb925151c364c0a40fd9497a4efafbd1a1db43c2a7f0df015ea9060143cec95e1da4728785c259f1f868cfaa47a6688e62d26ff9618aecc3f3070a88417d46caa94da265641016c978367f026bf3155edcb2d41c7a3b6b4875ed9983b60b699b2d028363b4da818b0dc6ea3b325dacc38e0132a448aee4ff35c1158c07d58c301777781b1e8e14c727ae93bd2142794ce521ee195331b468e1260119bd88293a06f102f3f7a75b0e64320df0cf4e256b70b978f420808405d6810eb55d7feb096a23b676e6b2deb13205ab8e82ed1b9fcf1c65bd36f7ce66a47680d75e493c4ebf64051c423cfa602f9e1eeee28bd66a4eef26ed1d23ee0bc95afa083660874a7556616cb0a2388b9b7fba8a64b6d04b7e964efc49817d55b3c2ecb08c5266ad3a6f6de0b88f33a4240f10e99ffab3c3ec965073229cf6d50222db78b68b54e77d138d00b060563a57e0b4a4ead3db63f783bdea5ed2e51a231f38b94b97dc799bd741553ea22ace85890814dbbec19c5dd2e9ba44cfc29594fca70ab1f457e4354f2d46b9e12bd15b5cade1f93800dd5e08867b8ae009c7e66f88e5902d71b7c7df936dc889d3d337fff864b9bc13c79698f69677b0353175dc60c25caf9454d20d3632c128bd54b9d78a4593d774bb8608dca3c1bcdf62f1c7c1398e074a4bc26c682e6a3a32c64f77d5ed2e069e59badc8b1bcf6262ccb8b62ca38aa0fe1d4751bbc8fa2aeeb867555dc3deb60b0283989477174d69df592c05a909194a49af61a38b17975b9b9ff4a4722c8245469ea17b3e2fea4f2b419ddea25fec99418910a1fd38fbd3f067da2c709de7d7a66a9bc1e97fa59d3110802a38157785a552f35987e4c512474d7a6837b9533ca265fbeb019d2bde7124777ad2b05679e59b6e1cc3918f8110cf59ea4ff550debb1f26690efec98d7c2be842fab715f072d1057e28c5b79aed5bfd2511e86d4860f4cfce7a1b2]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 796c4eb8aa343c8115127aab7479500935c0136680eb68759ead6786f157f83c

tcltest::test Hash_SHAKE256-3.51 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 1ac2cbde8a887c0a8e26e154801fc9643a767b75d96299acc1494aa8e1ec975a38e01617973dc6eba99a3b313238fb60947d272897a45ebe69b4de74e4aeec8c100b774ee965f85862759c36a93da532ad860d6dde8d6d2f33fa1e7c72119ee8ac2c35ac0669d8f8c0a04d8b6f9890828d7a766d348590a8270452e9127d7415132c995878af2f74cb0396590caf84f73d3fa85024f48dd14cbac2e24d5a38bc4df1eb7ac7a1c4738b86bec806ec4939c4bfec3d33422d51aa04b590a911b0846365733c79a6619e09120fffe7b6a6f12ae0895cebd838d149cb751ab008a5165c6f78c41825cc9d4c8dcf27367464c7788cc9d6d31c76f832f548a9eaa8de1940f6443a2c88ce175ce147677c904b62b5aaf2d37377af6f6c6c7765de59253617e41dc73b362fb542f4bfe84071236be9224d7a5452aaddff16497514844015ea204c93cf97b71e05b07fd10a7fb4891cdc22f4fd1330ebf4dd0802148ff85dc09218c56f132efaadfbce4b6322c66557bfb969f624094152a8fa3367e415b6a222cb85a4125bf343bff67ed1c220a6a1b55900c8ebfd86215e693194e95fca97b8acfdf4fc07afcde33d91dec78bf503a64be1fad2d46269e99b2323089e3ea73c0252ea39fad6564fecad1299cffa8478d835143f557f3330d9329ca899bdda9616af0b31fc11e3eb4af9f4a0b45c2c1446249f9c4982861b6a86883019ed39ae303ae14dd5087e9fa19e0c4502c40362ddd5225078166b9298466f0ae676cb6c971bf3f34c622e5337c3e2ee80d9124ae77125c3aae1e97da99bd79dc80199b9957bc98c2bc7fcef5691ff05f74460b5aa1f305da78b08c4e6ac4a518736a97b7082ec8138e1ee5b4430eaf02facf5896f08cc8636bdd05097a24f8eeabc059c7157e3383c550f7f49c72b19f0badab07e5380a6211f4a0704a46fbcba3cb502e023361bfece6443af7e4be6021616101f29d5252e587dd274db3043bf5dbf97050d6e9148f2f790bc7ed1c12c67b1939ab2526b2611729a316e1d8cc1c82d41273e1201e069cf4cbaef45113755b42036157fe0d0f12f458186bbfd882407ea90ddaad58fdcf461eff9303dec8a269e3d7be4edf6a1bebcad4b94ffdb1a53798613be741df36fb5a4c218af10ab0ff7f50b0af85ec827e8fce42ffb84521bd65208d74652554732207588ce6e637812a7ee786bd10f70b0b87a1457497366e93ce37cb3f6ab84bfad380502cd5768d79a4bb6ac171ea3fb2734cc7df3263d9a8bcd3623d09c2f43913319b3f432e72e184b4d25f89cc7b3933bded34a12a7d189ed8cfea9d14ea815904b49ac9afdff6716c43c3c31e5bf42b6d2c315e0ac767c6c06ac49f1ecd58174232cbd37b332d0d3a35baa8604077dce31b31e375471ad712c9578a50eb21d092ac5efb310af9bab73e90c432c738bab810d2bc0a8aa64258722fe95be273077e77a0ab31c5e10c5ba4e281065ebb6744d380522af09e9af9eb9a268031c04e6e3b4d5e2e028774a03f1c693b85744521a9c740671778338f9c42dc7e679df7da4dc19e563f31761d33cb0772c9f7e6c72a13f14f7da7be821a968596d260a64b4589e67aea93933b496ad62caabacebdcaf30f3481c19e69dd218c7a20bcdc49b922c0ec73025e72d6784fd996316f6e12e0d4c6c23a55bf5a508b88d116fc5dff08b82b87223a6c718feefa1b003b607869fc66cd9676eb28cffd5351e3a8e0adc826c89557b98080fe3e0ea78bd52d91fae0a4f24a7485beec4c6a21b7448a4bddb7440c374e47ab5fb7a7da58af3dc6202bf1deeac1078322032dcf1661a33fb5c41e7a357b3a5720d62611db3c19ab5628edf1ebfef92c2dbc1ec86582d41fece7c85dc6c2c10afe3439eca7fe39a81971f9c9c280d3005bd1cd9c492a8552df8cc2358fb7843d243c33d923882642f6a195c502f91da638eebab925bb4f8f2a4dac8fe4cbec645f68a455f24c58125a02527221ca4184415d56ad7fd79b0b4984e7cb6a727226ec441be188dd578cd04ea06fa366d73101b831f7dbe1e08dc9dcf476853dbdeb77490b0a5b9d9d18e5d1100c0c615722f689dd26be7cc85d07b0532fc99018287d01e24eef1fa15cf72411e5c14c39e0ac4ca8989bfaab1f9fa99445bc1c196459e9421da7c60cbfa0c2367b668a07d07f7b24ebf90e113bfe233866b1344a35ba799b053a4327b76f35ee3b60ad4998fc8fe28f5a098338bfa7afe15d6b23130b3d6d841af99adabef9b9a4541867a0b0056201339f89ac30b17b6425433c62c8af3a18ae6bcea01c882954957dea6e167613c01a129cfd1ddb1b6d8d3edecb7f397131791c4b9e045badbab9205a77bc5c886a720525a1b38f104c19c0b2a39b76a37d0f8d8a3b030ec74543b23053fe23206ee009bc40be47faae3f7b3081a9e16149d62212fd94fbf692b995f46978648c3bc872d9407a802b0282b0e0fc27040b26719c6e5c36bdcc117f6e2f4ea78b2c5fbff3052794e231c768243c69af5921a1463f04dd64bea840298d4969f81171491aecb87c89c89f8b7427ab608f5b4538e89c7f07bb992bad3c85cb5206920b968dd27ba5c5bdc4cd2b4dd6575374e65bbd27255187b7c6c72cea2d8d4f874bb66d36c739d52c61eaf20915d4a84075985881a04175a4fa2c6f2cf8723f5bc2275dac13af34bed7836cec126eda48736d3f1e686de1eb462b97c0b4b752a9ff67c384e98c60cf9614f059346c85f77048c57ff62d78f52b632b37daa325dc64062363c147e5f93e2e20f2f47417d7fcc9a008c206874d2a51ae14e2ec257d808111cb337830a6301d732beb1c2c54695e435b649fb97db37574ca55f8ee07e547032da873dd510c816b7680ab2007567523da564f7be1675d23cabc4fcc0602e67bfda8e158a433f87e654dc79f6b34acc6280f9c4b22a6673fb88e575be259dde0ddbd471efa36d1306abae7f6fa9473aea7090ca3bc01323d0634a62a375aabd6204e0baced95aa06194092b33ff65841e9cb270208082c802647c2937fa5bec077d3a59ed8c0e173d3874e7095cad93462de6202b11bd4bdab502344259ba54446f6ab414659261e3bf771bbb68254daa4ab542221ccc95a07b64e98c3dcfdb6002f8350d0bed649b509a2d0fccd79b911ca63cce48b58d9ce12bb2dc4ca16aa55d6d439f28270aac136686ce30cb6645ca4177f73e821a150cdef6fc2e38ea59a951459161493a6031628ec03b08940c7d0e5b65a63b265527051cb28c9c41c50d2aa5ac6059dcfdd217adac96960e2f5d9651df27e698a258288ec70ed65931b282cab8cd62d7cc1d0b4c5be97dbdf59160bf2f698d5845c7d0b3035bec18e5bfe01c7d4f6915153bc8d196dbc588a842f40e1b15374d869e84f32d1ce968285dcd03c28f787d2054d6a6231477568e97dba76cd3ed61ac02cdb60ff8d23044b4d0e7513596f7348fbb31ca3d9b11f1b99cf0e94ab67b011d32646f98b1587feb7130f0e8cc6b9a1401dc55fe37a017cfbf535c239a83cb173b6516a38dc7222b3846685021c19b0c2f0e8afe55eb4902cd378b05a16253187022ccc26f67749bae9280169de17d9fce2e33e6fcdace7a4d044099d4fee1475a01589d5e1fbf645a7a02e248b488f465a6165d3555f05ec72141873a40bccc806b84db62d749adc467b45b2b2006347cddfc0c0744f5d6c3f85676db102ed06ac9162583775c9f75c2602a4d0e3d869c3bac9a7a8f260ccaf0490ec0577d7ba181d722cae83e62f4f1ccf7b66776134b28f0b0961ecb256371e1f8f0fbf2f4acfd8f7b3e10371dc95ec1696f11f902140c8ef664d92c4c17e3e5dc73e6d56413a306d7e8d891f87d6f06287ff60e7c7c4f4f13eba990a76daf1e6152fe6ef25fdd03dfce28921c978e65ddeefdfda90d59fbb03374415eed3b5430942d04c71712503bfae984b19f22a430c50d0db04e935a744524859a1ff04ef1415ae10ac3a9b3927401adde1e938cc80b1088bac7633308289fa5838c36d64b626d4be4ec0cf58c425a56cc9b48e54ec8edb4ee01325013e4cfe840bb76b2e6fe4d8b7d19a2ded26edbc6a39eab7769048cda758369773e829a98fa3416ab6b1de4e9fcd2d3350c006b478aaf2309c2c8d54176d56e713109eafbd880808982c719ac899f07c4e2fef41fa9571865001bb0331a80ab069381a65b03261a14d205d41e4e09a651fa725d97291df251cc0605f6890b86fd0df3b6fea2ae4e1404defd85709718a5ff638ef7328a1a96ce90bcd3eafe69204666022ddea18350bf5b7d2a1ad2c68897da6e87eb25f6fcadc1bd1265e2bb35e7e2712fdf862091ac833a55724016c16adee78f7d76ef4a12a1f0fb243ee405976fed4ecce58f9f735e1d4ea06b711a2177e05610056e4aa4393dd64c9a4c58ff165ed0cd473742bbf40e5ccddb405964ad4225ca5bd9c20c908dea087e5bf6c6deaafe0c3280422c4ef6c82116e947da89f344d6ff997bf1aec6807e7379a695d0ba20ae31d2666f73bbdbc3a6d6ac2c12dcfb5a79173dfc9cd2e0d6000e3114f2767edec995772c6b47dadc136d500251e5927f52bacfd561975239ae8260ea4ec65fc284313e0a3f801093e318fa024cf7506c11e9fb2305ff1ecf043df9c0ec930d82e90f80b2f650c411a03e74d70df87e4a3e0e878e91f18bbf8aa7c43dd2c3ce47809508cc989e3d7dd14684279cd2644061903cc00c54e232c8288b0a0a40eb39d22c9dff2e51c400ff9af39bff6b4a7703d7e25e7e126c4f472914ce9cf0ac7f663c06f3be53a1c2b1a188da40ad7816ab4b4113f0126e3f8e1028328ebd5842c42e0c51538b1cea6fc30d8d677e3546e2542084683c332925478fdeea8e39a9756877c1f2e17da1c268485b7ac8cb2f2f5a495cf178023695341179b84a95dd00540feaa53d0b0e30f803ed837280f81ac5824190ae228d654176abfedbb505ed599b7573870f5a43db04ea89649dca2bfd94dc4fc6dc581dd5851ec628e14ac5dee50965a7d1ac837a14fb958669cceb6a47d435a878bc46570777171960d40f4db34f8186992d773bfac8aec02e27e17462d14a3d3ee36731c561fa967cca530dceefd10aaf04a78780f8dcfa32029684af7d976b75f508ca848275877b541a86fe905d1c5a5b9bc76c33271cbf869000f47d231b6719b18a0f8293d4a69cea200ada2ba5e457dc618723980e1bda5952fa7cf7365a78ebd92d0a596645c74e43bc77468b9322f1bf996e36b88e2879e0892019a2973a3d1fa5c2d123a000cb57da0cb3b8b0e462476abc0a026295761469119349668630c4405102f4fe6debc42d447b1282c4b863c1b61ad5dd4bda5561f86d110e844b30c660f4c1a93635f27dc4a78353eb7a7a6703701749722c0a3a7dade4d95e16ccff96b073e784314a92373ff2698130f3254c14b2ec31f59dbc475da90d3919feb29c3df0017f6832334349460ead6238c1390c8c0fb1bc75afff8448f340dd2fa919a3223f4e61132a90cf69879799b00371628ff91a09fadb4c2ba8d398e9c8aab6ebf0e81aa4563dc7d8421f685cc3b59d1ea2f493659408d759b3f56cc52f7e1b1c41460aba6135906db91d4834d99d6446ac464456abfd481650a0e2faceedef3eff9f472a9ed99295b6c85ea85a856fe497385666a783466a671e220f0cbeda5a113cf87c73f37658216ad340ae3366ff4a12f11df062795ee1b5558c50bb86765f6546394a49e3bee249ce843e6fefa0ad1c3c02ee628af9a4aea3fa04aa989dd16159e88aa582d0e2ad78fd7003b5cea89e609d0a4a2144995133df8f54bbd44f7a58119bcdfb9507e0f932adb55e9123df8576aae4e545a8e52ec659819525c1f66b3de589f5153a2978ab5e4f93f10628d11638f67f06bab4bb34caf8ce970f1ebcf2d0a3195964cf1df1e997fbf739c16f041a49968fb50403b34a830f32213a70bbc4e10e686b1b128bb8563faaa4f285c8baa5d3e6831e2eca41e800ffdf92b21d290d7c4b39557c013153061330033ceb7ed2de150a4a630217f04805326da8a267ed0d08b4c586dcbe58f938c33bbbf4d0975e2434cfcae134638f4d00157ad1e64a67a9c6b255a3c62bc02346e32b6b17bdfc19e7f78cf100097fdd33d051320eeb3235566614deb19502dca243b3d8ba0d5ffe0d08d1bae4aabebfb1e7554e489a17b54b27e916e65e6769bda37cc4234c2fda8d4bc0c3460df4fb64a2adacfa1dbd308f3efcd1cf4e99d4814badb7b94516b64f0882948ffbca97324882d58e3dceae09f3769ad32d3d25d5826f37e4bfba993b873eb5283ce79d0523fb4f6ac2ef38a18d7ff65ac2fe62a092eace0c81c38b390f1daf7798f514c47941a4f874cad43f563e6fccd68195ccc145039954da9531e94708e6d7990557937b5b9e1b078dcb94dc8c923171c54058a95ef300a7bd0b5ee34bdcc07d77a5b9d2fdc67e4e682d9081d5129b74fbe49e3d68834dd10dafb41afdc11c497298326e11d766456f4e9253d3b5dc323ea0dd2aa8af03018d053313a8fcb3a5ff1748761f399b97a914e17d0de3bb55965c5b97a7e0e9de44f625f7d3f74d37240b4112b053e5ea1e68c7250c0502820b0062adeb7fc8113a68d0ed0719b2aaeb5a666c4b8f0ce7d7338a7456817763a6743893fef2684177447e1ecbcaa9a45cedffa97854d735db5b739175c1e3a06ea0257268a39117047375b1a772fccd7eac54f4bf0b0f7c32cacaa4f12b0de16c6d7372aff80b3ae8dcfdcf237971cf597fac73a91a7c66e566d7d75029bfcda6c168ba5d5b9d542b6660a0c848d14ff54f514ebdeae699fb19e1501c22bf0c26864e73f933110ad6fbe44b1d45e3f85b0289ae83e315bd7cc93237dc7ed647f4a26bc40ce82d06ef82d3f9abd9716f92829dbb846dd17b716010b519a4cc2616ff08d61de2baf081e273d1f86c415fa2b5d59c47f1e17be1c5c4f25afe695096836cd1b4887f6f91050dfc8e671d6e9485787a55d50e64d4e0961527f3756e7b18e1dc5a44462c29d2e8a1f530cb446fd9d07c348320de5299cd4608ebb727cea5ad1f957dd5cf50314ee9b331138a3b9823cb6e61df9364d8b3af864ef824961119c3f09cf5ff0f0a85fc52d1bfe800acba8e8bd9122811858e752885000cdb466df0f0076e646d45d6015a779505c7fcddee115283486288a7c377f69788a62bf1cd1f2708a772cb8920518d5f8a9770d3138a34f8995dc946bffa0a8540fea8ed8304648b702682e683c17ae31e79f0e6247de63ac30c31b391392991dbeba5a8392727be669253354f31a6ea6a74645c4973d2116f77a63562bcbc8502750a6b1811d66a32bd26bdaf2a793b1690b47eacf35f4445a511155a0c29275ca5bf7e4849db577cafe4c7c9335ba0c9d5c9947285f59dec9e5b9ca0b0da409282ad29f0579c4deb71739bc5d4b4df2b4c89e6c6b1fce20d6a6a0f5d3035974b14bab439c48314270abd81cc95ecc1e5fcddbbce00dcdc4f1228b9b815a4f63064cf664a17f673d982a9c106ff6b0e9feead5db2f9fe535b9d7ce1dae58e23e879d5884cd85f34a9e21ea29a99998e0028e2129b25c80fd8134dceea2b5be71c5cb2626690251d3e31066db0ebdf08b1b46223b10aa3d76f7c85c9116c720a7413503cc1c6b0f74177486b727ea3465a9a17d81b32f874c8e10b1a77323d5497a8955e8402688959bccce106d94e0ea2e0e87802252daf8a49c7094304238d2e226b0fd8ccb59d2f097a1a948549293190bc4d8d69ac4e5dbda1de9e6b8c7ce08ab999e5adfff96a653a5d4508fb5fb0b17d9de588db19eb4481e0afeee0ea56e76742d22cae66b3d9f4f140eccb77c74c12b1310a24dad9e64f589f15889f38415c53c8d22aacb26c901faeb8233b1d6863d19a75ee57d2abf38e9568ea632da18213ee25db930e26f62fb7f56a715b0d58444853a0597c9c55caba706ffedd0ec0cc6daf2ae3700f0e69822a07e22843d954622ba4a87fc05e5435b47f37f190fec46cf87d637f30c11438df64562d13ce471086610c8420f4732fbc83d7112f244514863ddce490f57a009de89512841f667ceb3f4d33c20071d011e1a7e4f41b958ce3d317463793e103eafb667e9fb4f9cbe2a63233b06b943f3a036c13e6c9fcfd97a5d94e2e849269510592196b754828f3fe852df21b25a5bf4ff1450d17c48f281deda47caed559576ee28cf04b9ab9a7af0cc88efa6b29292ffd2372ed336920a21aef29fbf2fb869f1b7f361c39a6852190ad8eefb0f4ff0a57551c3493b4079b27d73e52307865fe089946d26b1816bdd883f9e13a2dc948c88213d22a976372dd06c29ad8f87cf4708327537937e0e9aef3d8ba53fd1050185260b1413bbe8e0421bdbd32a254ea1ae5e189ab2a6d0ed8a53261418c5a8c0f6f0ab71fc89f5764d338a2869f7446cf657d5a481a45951f400fbe4c013263747e19ce0e658f35c4c139311c17647157ae02b09a2eeee44b6d78b9be851d3d112a96dd543a1590ed96cb523b31add47a667872e78ff26524d3733add3fa582ac1888cc3a70b9d0a8f8f3ed2d15d6d60036e7887864d97f711b0b29f358519b0ef3f783082f035dbb90bbea38ec67deb0c558d995d62999fcec456e46f7a9eeff61ece9069e7ca0ee052a31a5dee95653bcd24f850d6c1d8bef2bf11e4536e4470a6de87ce6abff0bff48abbc12e3a5b1c25ed192302972e7cbc49bc56a7fe6ad988567b12e18e3d8281e3ec4b1dd33928003480267e900d8291852828d0d5afab0394fee9f4cb51f25b3d307e25f68be9dc99a1edc332f26b130ff9cd666a9f6fc93867b61cedba6a11053cbcef2acfcc2b8b02eb48f67980a138b5c6e143c69249af5a09b26bf36423ba4599c1d671697d9727a1a8510f7ddc9dc0a7d9f7a1bd05684a576ddc796b03eb0f9756901d2c333c849349e920bd15bdcee2a8dcad4a7d01cd1197a5d9094215df2815de2f9efce9be52a61559c8fd0714f9e68965b510fa36dac85e8ea96ea958ee7817253c2b3d1942557c272be30857701b74579771b03c15987d06d5da33f13d05d1aa7e5e9549f4d063f540784ffac7a033ff6c1fd221546077ce1925343ca637a40bfff780a4ec9f8350c12d3c73731d3eb9ad6bceab19b8d560edc0389fbc95f4e61b969dde8c2b50d608625c5604fafb32c5f6041dc81a1c5bbe4baf8ee2994aa56bbc3b4b75fc32d190c82e16efc1ffe7603f211e020cc31b252807aeaaca2be65ac8e7601c9acffff4bf303ab5fac353e6b7941039f9502b9cd5df6397a10f05835d30d0f27f8e9d9ec7f135da1ddbe4d3efdb98e2685a199fd5a5521ba66aaf6fd996029a22d5571962ff9cde93b026b258761c9df22741a8b7e7deb952d5306ade8579662d5aa8df20a9d43604d695fc81d21fbf0f7e4031fd257de32ec5251ecc8daa08e7750f6a718e7062e9b5cf3cecae16d81895a1e605ccb44ba2b119f6342d18d4e9caf745e61c0607aad41ede0938968bb623c31f726c2635472f7b7b95d24a6cccb2fcebfee0e976c0c8116a5820132c509f3058b382285294a6c639722bc332d8c38ce71c6bbf42e3f8536c69e3113c806e862c598d5f0603ad869a5977f7c9c67323a1df1adbfe5ceb415eaef0155ece2820f4d50c1ec22cba4928ac656c83fe585db6a78ce40bc42757aba7e5a3f582428d6ca68d0c3978336a6efb729613e8d9979016204bfd921322fdd5222183554447de5e6e9bbe6edf76d7b71e18dc2e8d6dc89b7398364f652fafc734329aafa3dcd45d4f31e388e4fafd7fc6495f37ca5cbab7f54d586463da4bfeaa3bae09f7b8e9239d832b4f0a733aa609cc1f8d46c0f0fc33dfd669b5af5cdbe2c12ffca6688761e7f40839a65c29da57058fa7594705c8bdc432e7c13b4cff7c47b2e046682978ad08fcc14f32458d4c7a420e986b63bdd19ee0372cfab6c9e553b95d4e3469d85b369b8e7b72182f58beb93b7a9a953c3dc480f04f7a04dbac69b5dc2459a311810146f9a1b80c30ea3767a6764114d440d977abaf15c1a53ffe3ae56f447fb49cfd9]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result be92f07b4b7cc6d61bca233f565f7f6f9a36ff20a48433f30e1ce22e28be6974

tcltest::test Hash_SHAKE256-3.52 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex aeefb1889ebfa4ccbedb194dd8f6cc6c179ee04a6d116b383253356f0e7dbd0218587d103f2a6f3eead0d064db0d248759227a088e9ff11a2e787b79595be15ac341089d1244724a87b0073be15c16167e3b977fc42eb38bbf1c86770b45239af5d3d898ddb2b4d9dfa24739b28ba901cf10be17d666b7712e67dccfece289aaf7367767691f3dd138cf17c61541e53094ca77388ef107b6c48007ebc4db1e7211916d747e31161cdb5fff4ad326d38c15904a4ab274ab40c6908f315bd7e7da8a0c4026e39046a01079872db4e37afb998bc0b50b9aa9f97fbefa0b797feecbacd17ae462e5d5471e4538d88020e3666ae260e161080bc73633d2e0e57b3a2bbd05a218c1d8ccf74fec99b1ff8414b6cebeb2367c69d99432169e186872d3e406d34129c910329ae9963321f9b817d10e473f1d23631947bc90e71bca0dc2dccf61de7f42360f17356a8c913564f4a172a48efc209ed5c81cc93450d3f30efd60d70182f4f16c567b912e677c2fb10d41fe283c39c314ff9ae80d214accbf2d005e339aa7ea503f0333a10d96c158fcc57c9346377adfd47e16faf5f942de56f81efa2f22c9c3ba14766be94bc3f05844475981e16a3d2f0f7a8435a6fb715f913ee1a92e35cdaff785166563dd820807860154013c36f8963d32471a9f833010e66d7093d67706f5862ae7a5b615f4566214295d98d2175b868d941dd719b1c04028ec1955c8a754a22dd9daf7b10479031967bf241a74a67e1c84774b3dcae8719985875ac97a5c00a9a2ca475e20b7909875ed8b15f7bf4c6780efa2f663cfa448a4a78c806857c925aa3d4f253059321abdaf73cb89ed1af6ee4e844d64beffbeaf3f94f7578b242a59fbb70d1ca71026a6cf8545107a0d52375c9b48b5fdaa821018193630413a3f17cb261fcce953449813688a75ac4f02c4e18cf23ed4ce1c2dfac443dcc132ec4c774462286722fcfb45c4a2a1cc088efca50250e88b931570ad3d28425335b960c5bade1969a6d7382b43967b215f7f466fa36c996920f440f82bed493f6b2fbb7e309b8536065cb58e8b6deaf57d5b0c09174d3ab79e4104a43798dbccfbd5c56a4da256176b14db35442fd88e8aadb53907fbb4be348526790833df440e33e750bafa7254fd8512ea17e52c35adfaa9c81b7fedc30b460d3f47c53cedcbd287f91fabc335e339c373ab96ce320ecc4f7efae0cf114a0f21be9b57dc105b390f2e22be2f0146b85499aa4aa5cdd6aa11224d2641ef1a65cabeadf0a6f4e5f0e5b56e3aa0024d882f24b9099b4e2d1d567ebb592aa4a3d27006249882e392807356a927fd7e2133badc82dc97fc3aac8758ed8274790cdd7b5fa95758238a701fdb7c8d2ebee9415f89adca822126df0a798aa906b67e0f5391e43610fdf448530a8e751a0ace3885f2e2dc4203183e48a93bd4c8a320ee60647c3c93b9f89176ad88e6abaaf8a293e0c819c0ea3952a9afa80da2871b040ba01a72c79fc0d2f08a11e9c8e58e06f31b0789e420b1a29655785b7cac96d9ba0c65de95f77193286ad2855904b9ed0c6b483497eca7b6756154c73e58baf3d671068ae508365d881472c2474fa0de46983323bf954317af9ce357d0d4afdcc897a47ea01b35b677529aa8780e6c6109696f5d4564af4cadcece151a689c1cf746e8c1ac7896295deaf240d58944febda7a5ea12a110ddd6bfbc09055ba939ca46795af367823ba3a521914608513eca1a7cd30d9491539136563a77f700bdab5e01545c302176af4bd0a3b4d2baa8998a9d1f1d84573548fd44b05982c630015825b4ce1a9a61eaa4a67f0530a8c590bfafd62cbb8d0b62da2d739445261833fa8f84336e1684bc774c2c236a431b18805b01217f595e4796b98c0e8846ffab0de7cc7275bc688e8e69b2f4c8b2349a9749a6e319e3b45ef99102b1934e6cd058d4927374b594c6afa61a62911e987cca20d05cd1549811ca5ddd64ad67e80aa5ffe01eb62890cea3ab6b540faecd28e2888473eed48fc7d3c4250e1fb9fac1ba10bd5b823ee50c321fadb1888b5d04a72bcc10ba8a23e9da6fe399326b2a5d60ae32121f1e1aea23abe96345dcd07ae0aeaf1b7b9fdbdda8061fec2ba500465f81452bd6f2b7ce40f626518ecaacf057bc367d7a3b3f0c0530dfef559105e57f32008eefdf45224fa96c63ab7d7bd0d2fb671cff84d8deb8952d8af754c0a088696b23b20f4b4d196bc381e31cc4811a134ce151a52dbc8bde10a55819b9e041cd8dd366aa51b766e534937fd0106bf7adedb4bac4c70c44b39128c106790e73076e8455d7dfc8febec681c7c0e6f63071507e800a2c37acbbb6fb7a438790e6bf161fc5bf7ee8a89f82330315ce8a8f067f25ec9ee6a68b9f8907cbf96bd0629c8e8dff8ab57f2e306e927bf6508fda15829346a87dc0a9071232fc50ae34af46ddb44b5f0df556189584778cf56dda455faed65277eccd995865546fd72694660b7ef0660db2e900fcf23efe448c573f2060e3c25e94c10063891c7f6e0ddba421d238c93d1eae8fadc51975c65519aacd90b720b91f4be23b849da7fc514aa7269769ad25a26f6eafe35019012ee72f6c26989511f534e8e9401c100859aa1822b7cc3c4ea4f2440a362b117f808a760709cf49ed7e43b974a3e4e11a8fc29e1d19a99e3f8e00bac6a5f186c8b4cb26a523a463d52142fee4973c43ba5a5ce220a548fb80c66178ec17ec9f623070e74f5b5e0b5149f75e41036b5e71223e8b3243f07a9ab6dd2584766285d75e41630c99476bea5b2c8294ceba59c65031425cdbeb4314c43c6994a99c5fafa5083fe4c5a5a827c0a711e5e2715d424afdafa5557f7f765a45ee2698e256706c8b26dfc8c1ed91e031b43a26d8916b796a791599f55649dfc159412b7c92a41d93be0688e360ae2391139d82361ecc454049b49095ef13bb7955ee4ab13ad21fe8af60ee532909f291d515ded52bea1746c68b20a6735f55328834ddca7783da52a2f5e2587127b3f7a2aa22fbe14f554599a1327209b217b79a1bcc0f703eb6993fce4d3b6092d08c246537f16882690669feaf3fda9668cf34abffc84e8b1b842df215451dd1af18004d03ffe70bb94edfab7d560e92b041feed5e3d38f271dd156924bbd16cba63e16b6f6c8673afe8a3af86ffcc2f58d69fe8d2b657fc206a9e3c60e8a3eb57346dc563826f40b19b5c12b0813cf3c656c0a4417ad23090f47172b313bcd7f0544c66c887c7fd292eb2dde52687686389082a95d2d21729423513048343b8ec8c275384c4b92f7e6a4f170c34d51697362081b4067f37541e93283a816114b3a2a69581816a601817d8c80df44d84cb27afb1885e001b774e33b83f553e75ad5e7035a50605175ffdf8f8d0ae183a65225ec3f7217e48fc9bbccbfa470162428a2e3bda9ab0ddbbe355b03caa5dc0cff0d5beeb99204849cdd769539fd364daec87ad07869339949297f73b2f459f6f59bbaa4b0c0fa1c8ac2b9b32a4db02dd4e24951413d8b352d367d6b586f85eaf24b890ffc372dedfff61687f9f42c4b376acfae886a4d35d6c6d5490f89d85f61b7677ee067284f89020d922d82f32c42cc8e56d2a22221d255079b5cb5d9cab049a67021d371d7a2511f50497cbd5783a205d8a467727fbc8b84d0c475f2c38a8cf68224fe831cd87dbc40b243d3438675b6a2721ce6a5d1b4fd97db6ccbc04cfbb8336e5ae46597e274e20c6aed76a7a22142d044d74ace8ba24f15ecbd5774006bf2727b0e685d29d9c2cc74647783c1c6482371ccc51f5a4364e8985fef9c55925db5d1798bb4ae4b5156d2c0bc875f2610f0264fab20ab3187e7d21bff2245cbb3bcf0ae563afa5a1c50189abc4ec4b14bcad4d8739f18fd16782c8a0ca26b68b2fc5b253e3c9876922ca84b0d26bd083727ffefa4d71e169f3e2a22ae9930f9da086366ca4603314161246a15cb829b817c1a0db555151e909e3d6e4b83311f7745bbfb80e3c50aa881ff706c99cfdbb94bc5ab3bb5a865890cf8d579dce62a3958c75be8a2487345f3bbd6881dff492d2b55509e65429be72ecee09012baaa9e9617f067ee280b885acc34dec49b747b8f7b8653e07e124968322844d13920f5a210618533ce241e1ba2f4072a2eee22dc9ac4f2b3a5791e4db5050e74ec1dfcf16317d72fb56d45baf2ac67bb141691b72595015b7330d443ea1f339a4e1212f8629bc41e7837bdbd1db696f3f56e6693be6ef64441ca09ef23df7a9dd97db64ba155d2ac7123d496a6bb0b614d860ff6c7cb580aaba53da404be4a1c08d1755fa1ee89464aa238dc00123b8f86de0c54d4229d2b0b62de070f34088166bdcea8e6ce6e787f433901bc64bddb3bd6da32561d3c020b83698ca5f95c6a7d8330bbd26df8af6977738c5e2af8e0c710f813e003bb3c16777eb96b46ac33b7d22a0d07559e77a3cf76e057cd831cd31ce47de48ea145a6cf7bf1b1d48e69a02b4910f80de65da8bba1b22bc4c30bca4b3dd4e616749b46ebffea2c0b6998b0eeec6c270f56ce02bc82565cb95f1a273c52bd6723abc9716d58e73c53c44d849da28316c276452c5297616d13bde46460d19bda3ecd3ca0c4359d655624d475d7f9da49dfab5f900e6f47df5c45d72c391904d1e04f817f711451398b11da1efe50e622af8c89d850589e160bad8ec955b76cc080a924480453c71b5b01cadaa1564b43ca90306fb911c8c3aa4b67d6273b5838c86091a4ee92539d4e8b235331685e2fb94cffb0b8f94c4aa0b5fedd3df33bacf01c4610a04e7b41fdf48ff35f05b348e4195455d09dbd2d8763b048fa9dab9fc032de15b9f6c27bc1f44d556accdf11e38bbac9806d8feed6db28a3fd990c73912ab61eac19bddd330107d3e51c263d202abf8658f738f11782c468a753f2daeb8a6ab5e725c1d8d9812bf96e724d0d326cbf16bab94cf6b2011011987ce34857c868560ba972e11e1b4650677da81482c855f5362230424ecc98393162521e3e6b4b898a2345988925d353507ccbe5a9d4009c4bc08776365bc94a12b2c3ff27f960cad311ce61a3474f9cca2e2cf31ff63b867c22b70511152fcebcdcbd5dace95484870351dee4e6377724d04fbf4dd5834e47b7536167af4821804ea2ac35c1a36106568452d689178d0121a8bccbc8645e2f0cc13d92808f0d0d87187d4af8b9cae1a9ea8fe0b66c38ef80cc7e02655b309271a4dc2a2f80cbd52483435515143c997bd8c8abd4a225307c2f759a22d45022a452dfb702a9f857957790fcad5f30ae2ae3af909a55bc74824635eb976c4750136fba91a0870d056879e8aa07e7318055afa7274df3793c21b5318f198f909b2d6fff728f84947efbeeacd5db38d9d08a8141d88607e5f7e8d0eaed5fba967470c810b2364f0914ee5a60188de073ef17fcf23cc91f8d28264dd49ea089f37c7bfc80d93b32e577be51b4daa66aaa5cac974acc8d86c95d8860811ba25a2203bd91d26fe4dcb417ca48eda4ab33e7a9b6d4bdf059ea45088ddd72dccbb79caaa41c87dee9a8ff65b0c4acff02d8b646a539ce50a4c66aa984f91c6a833edde1cdf113cea02421f20049655253c580c4163afe65f487b4b12c68003d7f3c6049a9b3f887bedab63d173b9946f486f1a2785cb098dfcabdcfd29ea0de065cce32a5d9c8c27c3936b7843fcb359b9963525a13a761bcebd056260180b4bf0c624d70d6e6d79ecc2df1c5ba7db68f79605419f425691287b6d48525226a1fb7e6ea693fe56f6d00066c6a30233266a373385672cd17871abbdb7e9e08668f0ba6aa1d7946d28d715a87d0354e41a7a4067f9e1400e5711169cb80c09522b3643c0cfc278da966ac84e4963e715cc907b48a4f6c536b67084b351a316b36f35e117383af1c6c8efe20032ab01efc512ae7f8e8c05701df6bdaa8c974fd0be555b17e528485947d02c6541c3eb9a8c6aa2b4bf8c46e5150b882871cefcd29ffe7b69dd75c6ba9a736b267d93ed3da9fe1f8e40dfd1bc2517aed5073165e09b9807b52807b01249426aeaef044e00a538edb5186bee1ed682f85a56a8d223398bc8a2cfc85188dda3f05a9dfc580c077fd3d24f1ae433afb42b5f661c8ac2013f86d9d99ff045dd00c41e91645189573a9a8deed3fd223815128b4073d6e67b1d09024e73d470d1c0afddd325829f1ed30a8dfb7d7f14f90e7487eb97feb7308b18c4372e4632414b793f69253374e2b1eb7b8102b3307b0518fa6f6e4a5ca7f27dc79bb78eb3b609eaee5d4eac332e3c05fe8549e19f4563c78dd5e201fe68bbfeb482f6f41ab862c98fb787340287dc20bf113a5188df9149e824da6dc4fc4c6433f4d3c090cdbee0cd7db7140977f903652cbd4a14d2f566b2643dd4d7ea0f76ebfa36393c7f85f54db9c8957285fb7799dfba166ba5f9e6949df57f5eba6afe859b07a847551fd1ba72a1fd623a4a44033119fbb4e0049035d8e9b682f5c7c2a8e02e55d8d7f43cbab12a94031c4e324a2ac242180c7d2d3e1d01c16b228d8cfdcf9388188e6cfef57d4ba47db5700817d29e32beb0ce85567225e740c924222c731f892e01f0de15deec73f88d169011329315ce545e6026e13d712a72f44cdcd1b89f43b9e6a5bfdcf54a9b2aaa90e1518a3172809586557131a750a665d4b5f347147f3cb81b9d804e718e1692d12e376cd0d0bddbbf8c2ae9d1dbecdf8161e0b52e0914cc0857d1e030fad9381ba1ed1f38109298d273154e37f2cdca1a85a0e8360ac88c3495d791cf07f90236e27a8db15b883488b1394621bed08e68cc3cca73a9e15f67fe9b4a95dc005ae998e69c85d92617a9ef9fbad6667d9333dbbb422f0fe6ac683a24f4cca276a7fd6b3a36fab1f4aafdd44d939f135c41425d2537b0635fdd00f27b75ba80e1503b057d425a0c7a534b094db7c4edf6015ff8829340ced559f7cea6b7a79fcbbf680bb7a8eb11417b5d35a7108d1bd2395054db3d2578cf881575afa0dd26bb5b4f28f050f6e9d08bf901618541c67853de1a371da788d5d221909d1aa33e3a8cb7023122c2bbafe9e81585fd2a1571b5d1f29f1b10276f9fe5c6790c400fcfba6741810699b067fff1181a628e3144c9f1831a1fa67c265727c04a5dfdc0024d288ee9e4c1f07f34deb3299bb64179f50676b011b3b08162b02518f7227a5badc29170a483a27fef768db990ea6e99a3d77269d97dea0928489eecc1f7646343fdf11e2e27eeef9a804fd22972e02b3a2d204e5f4d534412b6d3cda3c3a7a175a156fb6af5fd589cc5a07c4e95beb722d028668c6a13bc86c46bc385d06a9dac756a104035f7425d0d29c0e79c30c5c28831ba461e51f9ed380fd64f64d6e05142d264992e0433451f91a5dccf60de841de35076af3581b0db660fe9c813f1cad039ff5b294ab5bcc5813415767389cf56e8320566e8de357519753c44485881e745ea706ef44f2ac5a1747ad9944f0cfce568d98b9298e6cecf102e1f9d9edc4f9e2cbe45288af7e8986df440e9b7a1d785f8dc665a352aad31e9a8a33b4a45cfedcd2ff60eec8bf60f2769f29a49f7af6decf43e693f68dce60793164ae42331dad6aac8d0ff4eb7adabc338d08d764c484b0b5de73e0a219773d5c1f1f5de3b0c4e1605934ba9f31b00e85ab30c8676bc1e0809fbb87745ec3358ec5904deb62c3d5df382570271002ec2a06a4d90f4716cd38bcd3717108c5102dfaa998a69e1ac66dac2abc2fa053e37511ed8fa8f113d542b8642524920d4bde10b3c4c1ed4a119047ecf5256d23731b7f6362e0f419a73304e6290ba4fc5703ba4768b9bad275eb8dc4c184d0e2197181bee923cab8918e44c1d3929c22b03369eceb0a913431d3d04a87ea6610451bdb48890ddf7152b8da9feb55f210e5d1821cd2110aeff3edc1f6eeb2b75e946eeea8d8fbccd4394748c8a6c241377682954f947982762a9dd5523c7a2efd760f3e584f79fd31d3be11e4bc73f406c0bb360dd8a0926744788cd5179d47ad78613ccf52f4fb4aa081b87c82c7a51f82efc6dfe532a523efe24b07f6b89bcf0a097c768a19416f2e46cee89049bee20b94da2e608c454c7b7fb253604895d2a97c70066b435a2feb51a7b17b86bbeee95ee271c139fd3185b5355fdac9b068d51eb9c76d0fcffd5656e58f9aeb26a69a8272528da837837d075685ccb895f22b74bc6215dafd57fdab0aab750389999db40c493c738eb2e00a985dbc9190ff0b12fa4eec317ce05fe289cda05c4f48717802be34085d305d137d4030f14bfff28de5e656bfc906eb71e53e93420233a423183a3af34d9c22d667e5b0341165802a11d0ebb26c3c2efd9fa6c4712cdba4599f3587b0ba46ffb7fab6c0e6abd0229c009721c5c100a8da2b7eba5639a100900a48c0cd3dd1323ca82bc99555b0583834918f7681f4d79c1b2efb6db344375b0bdc6ca532bb78c8f2cd50acb996afa310688b21097939b7e15ffe241405b70f0678f1d5537622016d13fca941f387514674bb71d20e4db2005a4915f6961e407ca6e6d9fa81cc6a6978042789477db7295e86c56644921f1ac652bfb545cb83e0deb22fb27ed6689a922d93fa0301694b7e73b8508c9553732ca18deac54d4dd598ea42f5cdee9052dadf6b0ec6a0dc2f6d18b70b76d5f3bbf5bc0d01752202cd5e05b03eef635634ca70395202da8447a2dc3e0173c274579a18c983d5c8472aa68b041863e33eb2d9a67b4e481cf616a834d9dd03e959d8b23e200c87de8f9ffae09afcbbccbe4f90d8ad5de6f6a62ee5c906f8b7b928a1b692bce5dba3407fd3bcf17667ae698d789d4c2b9fe618f303ef41ef0fc045552fcd0cba61d50e5cb966b3ffe806a4df095ad421b379c3055b4e171a6c8d547576337bf4bad24db934743ef3cd4414c6bb97d1cad20048d8843bf3256e7eba65326ca72f47298307ad7c1f1c88051dd717dac1916c47feeef75f627a76230ba6dcef0ab4875952eaacd4c0c498c84472a6aa201fe28f69ab2d1ee1942408acdcee21034efbd011b4bb14b0767fec0d4bd07c79c0f5652dafadf10cfce89e3259dea94d39252c640840c28abcbe0efca53dc84b1ef5579f6ef28c213f445220b036fe351d93dcae57e654ac01d39f87213723f0a462d5536b8336dab5c7d2fc728f865756b85f7526144190e0412c3142650616dbde7cde17e887a60ad39f2a1330d8209f13233ce5431fd5c297238f8b3ff53a3fb89c84168b04ffa8f7f53e14c36a2d3124d68a27fb55e7334613f65e3057c74a91e309c9f325641ac593ace9dfc2d9d77dd7d170b57a41ccce8c0a5deec43a76fabec3b4a96f6fda9ce8fb14be68b2dc7ea5a7320a0371d990da3fecb3b1206f43ae466926596f531e63ad2817d244bab7de7fee517803e45dad0b9d27b5057e1d200659f26a0f2eaaa2379654761c1cb9c0c028344e54975572f1d1d336463dd7c287f98617bbc7c2132ee1fcea856ce52b1c522afcf04d38ba974d1ebb8f2913f44fda59f8f1b90545078d89a62d15da4be90e8e1a739077e2404192cb3cca5233c27f06644d7ce496361b831f8fb1f9c1bab0061d3aeb93889171b7cbdb8c030f8459e4102b7dd0a54efe61dd09cbd41b05e90b7bd2c90c2c1f3ff663e7f8a6f609fdab53184669f0c6b8be6547cde9b65f1c16ccb7a3423b3e0ee6f9ee9ade75d7dca4c3906100e721dce12eb622bb323abba0767624e634628102146becea0d526968d820584616d4cd82bfc174b90d0d6a410f8aa868b64128c039cc698a3b2e36700744969a0e741d0b9f164e73a56b8a60fe61b83a1f4e58a9d09c9b0f7dafc652e789968d1c745df42310fa7ba9b99e98d987deeb0ddea3478f68ec1a437b9b79ef4bf29fef59e2d5024e0321789c3941278986ebd0969b01bc9de71b3af6186d85281532e5894e16a32a13159077dd024ed33acd25fa9260eec81682b2c3ef965f8a88e6ada712419c3184b89fc0ec54d5f184ff6c7f4bfdac53f4f14959639cc50fc84b9627b1de33f0e29ae52bf9a14360d00322990a206bee0ce77d2b26d95c044da23d9fcf5530e4c73d0f0d87801dbdb678d6dc6f91a3d2b8c5bcadabe49b24a3bb0253ad3ee9897d0f7bea1869db44a2b0f7cdee99face932c86756546f8dd44d692f7ee03e46bae82ca461ed6f2a21f5c03c209c1c72e267c6906d568fb9abb855df0f43ca7e7b64768a62d400a62a6ca996d43a19f7ded45e2d68ec329e97257c1e37251aa9]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result f1069e30c930a6b16d80fd500daf519c7fe6f16e8a65ccc6240cb635ce407c4b

tcltest::test Hash_SHAKE256-3.53 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex e3ed1f4a7232bd65821ee185c5b05cc240e70138f1d664b8b6fbe1be6acde0a351945814b67d92c3d2ee305cf0176dbbcfcaa65c488c1a1330eceefd801374b6b39daccc70a70b7469297c7c8387a58137626b6238b4b8f4561c7bf8a276f14ad3af245be8d7b1e00f78cdccc6278a7c405857320a77c6c5ee349397181ee1c67773c6a766360a708c832c340020a615b15472b506fccdedc1db3bc22932cb9468909c9932eca08aa7f1a09c7b9981b254fdc5d1736c55d497ba7d611eda381b6eafae199320fb98296b32ec7dbba1bdeffc576f9beee4e23878605c3f40afc350780210d3fba100db98e90c4fad909c4bf83178c4ab047f6bbeec9bd489b8f4d892a26438a41c2c8221cde53998d6b9309a59d237ca3c13f9342a0625e0db16cca696ff0b43f482e9ade65d82a4f97a668ad9673c741406ab8121867a6ba191f55be4c79302af6cd7e53d5d74f88349b46fb91d1ad115c0474eda011a5291ce1b5a96a61a07d7501370d9ce55bdfc8de3f2ffde1b08c6aa95425b604ebe3433064bb483e67af39866f8c2966e1aeaadbbbab5918542b02a5f06ae8c5ed710297dd4444540848cab9822019f0738d7130470e21ea1a659a96b41db6c92c4af194aa050d6704d29f171989dcf683f4a2686bb8f6cb75d4b90829ce8e731ae99693355df1dbefc52d2b9029e10d856cc4e0944c3650f8e0e456cbfdfe785bc5483019cfa0272b990b637070d49a1a5e4f354b286f0f0622832f151c753d4176acd7c1ca86dd3ae6905b450f16209551a7d30aee0f5a40123bdd9fba91267e663b16b7ef1462a006727f8855242598ef65565e0da5d71928750eb648c0e8652c5959769dd75bfda1285cb4d38d3d87701e1bbef7b0ea03dda52f034782e79831ae3c98675e3da62f185f550acfcd039c28afa84ccf1782ca62bb115765a87a0e902c77dc076c3c08c903d37b5a587fbc1b8e946d3ee43847242f3ad8c7af9d1bb5a59f5c617c11d6b0f6caa5cb646e687d451de9aee4770c70181a4c57717401753499690af1ea117684a50a81855229b44faf329d7ce162ccf22a32637291285555e092524207317059fd2a1b1fcd68572ac2e86931e9e29149d52b9a377728dc85ff68e6010bcf34c33d74f6a832bcec42f37bb087f314639bb5885a34986b8141504d14936a334a7ce08bb2c3148fda44ab5d0203bf70ca4445e9220e6768da148dcf8c9d951617d370decdd50559a79c750cbc1991702be000be900976b95d8bf260ac742ed0235378dea66267c2eab6cb1b6d5e0b9b1efb608912da48d561f4489102abaa09f399631beb0fce340a20280984359079fa030fc928d55035adf9dad11dc8792c1f01ca06fa219b258c550647af34c2656373490f50af1f62981933b15c4f1eaefc290820523c712fe7e200663cd00415e1e8b6cc18bc28d496beedb25ca42d1b217bc81891d4c2bbb35380e5bb9bf7e3dbbfd37fef70ef14407763447d6c06e915766430277f124165061236b9fcf057d785199b4381e49a2bcf3ef85d0b5ea14ea57707819fe25983863ed996779ffa5bc513cec353abee9f12cb3e7a0676cc33957b1f3ebbb58c7550616eff905943eeec3c5aed6aa78a310ea29742f1f1d27aa2eae7cd46fe32e0f1243753dbbebcf7870df0003b59e5780f5f934632424c7a6a30e1abf64ee52cf4e1e321ce32de0c12030eca4a4588ea915ca2f25c0aa2b967f79d691e0a2bdfb834f2e7cc481fa319a6079a1bfd0cff312446e5e39d7dce08a99b7332c26f6fd797e7147a710a430a818afe24e2ba2c6b310f8f4d8d261ee8c13c58d90a3853bf8520463d40266261000975099948f8ac1d6d5d1e5c442264d9208875341f31fc873eeba937ec87b9bbf38d1e8311fa7053d0edba8d408f294bc890abf27c60fb08a37322cac539711fe9b4e822ad98544eeaafc682b3ab92b394ffc1a7e89757a3fe8b5e6b58ee33a64c6b0b0a8468c4991b11b6ff060e2d8b26247ad6dc1b8ec39072a0bc101c5de9ac3ddbad3ec25dbcd2c1f034c03d764cfcbd1c01df840cf219f78e1f735a6c4479abfe8d255b6c14a22f26d67aaff973791849bb6b575ea9eb589b180b1efb514513d81ce09a9c4b19b7bf568ddc23893bc46855f81bf07595344c284fd0679a8f23ecfee8e64acaa9fa2e2782488118a5501c840e386ecf980915e2aa255d8ad84ac185b6e5141dc374f7ebe08b9e8c5629caa82633262274558cb9a27429ac8106ea53c31d64af06a6a0f6310bd86ebeeff744d892b318ba98152fd143786a39d6cbeba5d5d918d41dbde8ec5fdb3a5fe126dc8ded921ccb4f53b7bf29b65e6338eabfd7c4ddc5cc28a3368addf369b9cbddf1ce9a5fa936e9ace3b48d6ff39dabcb32c150ef405f760561952ccd974cfe8107032f58387e05953669e501c429bde1f6fb108a12fe8438ec83c2d62d9a07b49ed42328551111b11237d7084ac7ddc37f0d7a3aa829c1c249df1689a71155ed2bba0c5c99809c6519b6ba0fe1d899e43d40f47d9a81bd460c1fbe749e53979f301d4141405d1435bf5f248543dc60c8b46e25cf4466d518a5ce21037dc11b4f4e867893140707b775a9ace4cb63c0f576cd64ac4079b7dea952c4d2bffa7f81c97e08be6f0ee55edf2ea9baf2df38dee6e75791190ab3fc8956305eff6022bb536c781fdbd54b804e46a17444df46f99754751a38ca87e6b840e9f49682a3705efa5d53c51a98e0559a2aad5bb469ea0a9d33b41a197241c89b68502fd280255e801ee6c51f5be38781bbd2822f1014b31a19db577821823cce21ee25e0376ec49633455684030e56a5cb60728fe7fe13539e0c5b77042c8761ad2b033c37a143b530fbe3c93cc5456edff38757402acdf246d3a096a8a53afe709362371f513e65ae77075f57acd6557fe83b25b71f255e9abdb1477d80b9ecf2b3ad713d13271ff2434bc6f2297bf211db287bbb3fcbf100172819f14396c5ca085f7b4f5b904cb2ed0b908acfb8bd3c38b9b9db2124621d9c5f7ea26254016d1df2a5949f0c9456e0c13c80041f2f657d89708557c12a59a9e1f61f6174384240f180cb51ee5f54ab272b706b11b11435f220584814a24abc3a10b6d579d2e02df6ad4218d83632b8880dea7922eaceee9e59b276a162476fc24f1712c759cd415c8ba7583c9187a58e244c92e554fc03d88d2277f9f2f62135019ebe0f357007ad9c49949df9b9de843f155cbb6832125b2b26a080dccd7cecf8dc4b941e6f0d646fc7527ee74fe0049ee34b279cf79670b44d94d88843df74655e20084d10af1b66af2641e2c036a9c424c2bc7bc30cc3c8f5c9637ddfd5460772ffce7a1b892d215f64a964a16ede5f5877dc8d1ae1ced9bdc2a42617daec3fd92f78fdd618342056a1f7f569e50cc10ccf2a3965c1fc5713f52d29826cc17eef237a70d6c8aad42372c00d8035cf89a02d08193a09c6d186f560f0960780553390555b94370bcd543b94259acd9129b13608951e35d8d98527e203c947834334ea9c16a4dfc16c5780e6d61038fc11ce6eae4578e28ccfad2112db928954e96196b15a7f2f8631abd72a8766f45ae2363b6b92d07c6d245d65960098697f885829376f99a2a4ddcf92f1b2258c581bb720b315cb8ff4881459cdfb31446dc0671680ee7ad5c7a14168befec26d5e1e9fb33746b079ad6b70923d23f3c6aa224ce3305f9935492cafbcf4c5c423e76b7e674a9e25e6123ee0936623565caf2e4813c83b7b5db3e04904259fb12c7e92c1b17f84a241ad82e2d1db61ef62f725072cbafaa79b826ccbd2e3f50ff3ae25083638a29c18e9c7f5d1ff8825961cd6f8a28b15948b5f1296ad925e4725e082c04a2870a9d8518ea81854de7f528a949af9bb24c8b9847247f8c343dd1fa04c7871a177220c7f4768198dfd7324cafe7ca6bda0ca82ad2c3e48f94e585d77d2af51560ebb21bd72c459dd6d978948650c4e1502009333710822a6c64f7bd1c5b34d98dfcbb4a6912b6df5a762fc9d68c83453d10147b21133fa5e4408e7389642eaec42ea31d5333baa59134bfb349a4f1dfc86533c936d304472603b1c36b4cc9de2d07d2593d943a36a69e911a859ff5f61aa6cde61e58ba5a5734ca736b1cefb0f211b0c9ce3f1fdbbf390bc6328576d35a5b499b82aa4724a25c404c30db876b38d4a634af3b4fdc058f967ff95f5ebfb10d11ae0ad295ee2d027b16639179582ad71a618890b4819f279b0c8234940047438ce75dd78aff20aee399ab47adbfeda2751900473512b5898036740c00de4385221024c110a1a4e9e09cb1040ae8acbd2024bf66b9d6713eafc577ef8aa3cd5b3bef06980e1ae139dae91cd07a1a8db1814a6ef82a16f9cd8e8135e61a950f4e3f4eac656bb3fe29394695b3e59eb8040253b5026f1a75be873153f898fe2ee596f3bd3011b4233e657cc4b631bd56410a063b8e702a0e9a009f7c2eec2455a9a9a6e2ffe7657a02c65350e047bc8fed002ca9a3158eebe76391568efe50aa20de31c3dcd50d28fcc492e23a0fe68a924e8da64a468d363017d08923b6c955d49e5b07cec3f658b4c80321ca718270b75bf1db8aeb7014fa8424bef2fdd97f4d52eb57de996630b3386cb69a56d768e58f20ef6bec80afcf12549d05b9c6501160aa5a123fa6d8807e9648b2a42e9ba352e18bf531022f36292acd63d4d9efaa3260b9749efe79a30049801845cf31790cfe5731a241bcb8316cf714345a85a02ed41b0c9cb53ba5284c06d61f0251ef253dfa2628847cdc92e3c221c3913979bed029e02215450d5d6981f41c0f238e05671ddca9129a2ab457d79167c534bf491a8bfb1964c06306669978233dd0dd1544675c0e343c2a0090dd6c0a409df9377be86267ebd3308d0cf76c1bd68065bb9b81ad40328b65dc557dba93489db0efbbe81ff6f2a7fa592343d7ee205aac603512d72654ae62b16f5f84ea265c6bdba23438acc1634cd27324c28364873c6ddbc3e3a7e2cda9e8a72ad2f72201b262f874b8739f30ab60c34334c2e92f9d48533cd8ad2312c3e7c386aaa283b50dec844fa432d636a16bdd483593f978555b6524be1f60a337188b1d16d3939f05e10f6e06d1ac9cb55b87dacddeda8dee0ddb249ee4e1a88de2c9941d7298e821aa6179e5376a8b70988aa1058bd594f0c57ce37fe6ee4a4eac4396c767dbb7eaad42174a4e572a588aae47e48232b6e1ed0f0a690ccfb001e0c2c91d9aa435e7537af03cfdbda2f79aba7173ac391a4bec5d40643ecb042ee50ed526f33b89a004d0adc32ce21ad52e78c9b9ef32e9b52a2e2e79642b6b5d23ef63eb5be7dd9d290ef6e7c30fbb78b0aef7be34644aa80f497baf67380f17022d1b72b8f1566728fa72b1ab8cad6a8625a38a641866ab0378d00f2d3718e3ea8fa4c5f4a11e856b5dca28caa117331aa57426659664466e81d59f9f73ae4a43dfa7ecf53f5d7f58fea65509962159d2f6129921266d01b82d3169a533f7d375e3cbeda5133ade59a7ac3e50b2f56618df26eb7e10a96549448d7528be1e06e864b9d2ea65de28d51e87ed883fb8e253295824669b3ff9898e90c90e5d496b042918a3ae7c71e8342cdd6a97839553ea9c4f4dc0105845e1d3e36f4158a18b32fc9166d8a11aa3dd9957bb67c7b2434700b46e74b71bd2b7da2d6fa7f74dedd8a3cc25501c01e33a2d9ceadf523739d11d2e8d69d8b127746c17cf2a82751960e770e7fe354f2fb2b055ffe66e4dbef0bb66b489bb41cd81514999b1404398309025b5ca342c10ade9290066611c590ca103eabba8f44a44516ad5237addf1b26695969c60bf0d93a1c1f74674cb928d98ae38e7e6f228273322896a786bac4c3166925c0231aecda0c4eb6eef82f1dc680fa4f5be62ee91c11bbf6d82165268b840b1f262a97bc1aedbe5c51a6bff5fd9cd39ce786c25eac1fa7e14e0056a6dc4ccfc46c850fdd893aeec353cab437fb291fc585c3a5499fc6acf47d9627cc31db17a407c4ebb7a16e408a69f6d45a4bd02f77cb1f103083a11b8eeb65210d28b9833c9c5ca3d10012541fe89d78e37c0c93123c1bcbb9e439744f1c0ffaf01d62930c7edec0c001a1ba0264311a59e848db233d2c102c3dea578383c91e0bac50b78243adeafb42a6c2c0615441243d1f783962d2863dfd5e35eac75302c6521e713c6f5c5ae92f8c0ee8646985e8c6fafab321a1a635aeef8fd33b2021a68b2640a9765cc92044ec0ec8f203410e3255c32f1e0bf8c9df28d5db63a32322c402b647dd418e271f2133007e941b0afbca621b9c93e650ea849871e56e6fc1993e3296288d42641ad62c2d8eae6c758fd377f741bbf7616dad582514e4701987235622dca26e7db4755a8e86b4cdc46adb454091f6c481e4ed856396a7cc80fa7c916c6e236aba98893ec21b49a77e097c8a8601d6b628ccdfb0cbdf2add9e7f8464d15182dfd1238c596690cf92090821984615de44cc91fe6abc42d04bd892e550f01b433627e1e92acaabd9160be354feff426008f3e0c403b3864a6fb5b119d6574fd6f645503a338cb0d89bed07913f201c2e6b2525cb1c500dfbe1bc768c756563c0a8a00af9f41b4450ac32f160d947077c03d6cd6e34f04e672a634fd7aeb8dba2c5ce5ea2fd04dac3bf543d4e4dd298eb3b9f6447be42cc1ea230a965f2b02bcfb636d7cfbec7e8c45df747b40d5144ee9ad576c248960b74f1ab0fc1d1e9d8da226002caa9d2f2b4f062bd2cb851a018aa1f71684488811c91390f75dcc4774472e07c3e5eb48d382f4cea22af421edbd1d3e0c43288c187f97114ec73ee6b81301e80a53dfb1ca0630c7b3082a125cabaa94150a3254119a2d9bcb027b63a22d290dc69d80525802427ccd0b30d6947ccf61f8816cc847415e9634b78ba77abd2edcc26ad713c79eb357b8db0d53de57150d7e4fe0d1019db16a528d779988ed96bfc563eadd5d0409be3b21c973816403006f1c965586d6ae80ed2d462013e3eb1d9630c3966459cf1b20856d1dc7cd21a29392943d1f13dd3ecd3e002665c7b45efe786a2822c88ad52dae0039f6b7f75cb157e472147cc70db969ae92c4c27ae9c5e3e579e076c4542b458aae574c0e9493138edbad3bf3567a56564c79fcc428b31b3e73e58e0400e1f1146632b4edb3ff6f985f3275e97fd8ac033bcb9c1a828fc57dfd7b36d341195ba448cf171c22be120ce8ea5532f29b14ba4904ca045f238ca8fee896b87f992b453c759c244898a6f15d1e0055158b35855d6bb00b273515c96075d83b222a08fc2a6d6b8c8c54d050a516a1da5270b86b5f4773b6438e0be70a6a21e492949ad3fa00addc58bc3a30aa1a5e4a1011447538e13e8e19f6140be40f9c3c379f8ad194738a9d13968c9953725f2cb63782a9ce81371a1235d83cd6ab6eca7a1380fee111295624ab6d948865cd08aeaa19110a6e86e296120182c888c216c1b72363c721b38ff5c38627313cd0675f32b2b5d4f2546e0e5634e5a2ecbea975541c072fea4fd0eda67f5d37408fcf3197f59b1553c947e0c91b6e4c208a0affb212f302b526a2741bff3b80b633cb8ca089cdb3da0cf476335e24ae6c4fc1c599ae2d26ca608cf2ebaecbf5e9e3e0d817175398cf46fd375ca510b117355731d198bf85712417cfde36147e20c8987dc24633aa7a9eeb8a0c97383b6b6353aa2177b006f29ac974bc3c1e04a20a7ae369bf77d3223d44d90adca635ae023d9753f4099094eb2d474d6bf26db8d00e73d62a27fa114a938b1f1d628829399e622db6d10da13fc8b1596897a3aa42dd93d02e49078dee5d081302721a2431fd72786610645fbd241ba7de158cc08a6eac1e73e7e1df512cb7ae32e0d5e711e22ffbabcf7d178ec8eb0073751242cd492789a208724f9a8702b756b4a0b902d501802e154010d93c8b2ccfbe1c7736f76ad963b5a124f2f750f815f462e42c5f50cd96ea9594c70961f39bf891a8eaffdfd65df556a880030a3718aa05aeb60784ac8c5664e980b6d71d7f2b5b1d14e9ed4739d079216d33963d06dd7060c95605e2b86295582bcb53712260611eda3efbf69e4ef3d8e00f5dd288968b418cd33c3ac1151029f1d03fb82d9f8bf3648573a93578aa150220c7bd46dc3e9b28068f7b5078bda4f94e02ba47eec1e3db46bc29a6558720faed3dc8e7b771b4c477676c0c9184116ccd043f1957eb37670a3e3e98ed7240f1fe25b9142f0cd689af2dd79e6a4eb771d3ad0f4be1f1382f5761afb34954be0fdce859744df7479f354782ad0b01df31ea65f18494bb2b5cb88d46a07013e27b0eef70b0181b4f2d911f35e27a87d1d39994af6c79325b15b22ac9076a99f45e1ca1c66f995e385b4c1bbae5c1c6d58069a20fac973c0f83cfa0018f40cc3cdf8f65225ad6a94853eda5d85de8a83360e0f7daecf7c28ece9657b6e1f9960227eea54e18d9e5c93afc2456f2f514329a88fbd7d39fad211d8fb8b0a59dde8d5dc1c81052aaf8013b0100fd4df2f11b57e917d00a99e310984329b682358c26aa913631b04fcc397b85a09516e62936be89b18b39ed4ea36939139220c8871536e45679d9d247b825106ee6f4daa3cbf8f233d207a1d522b5f9df0a285eb9a2284592af763a53c85f28d1b790d547222cac036b1cbf5fd4a70cf3e742ff0915a939519d2e90d7af515731d192dffd83833d8b1e214ed60264f9b9f015b45fb5e04afc09aadbbab62524f7fda100ad35252f31b5be5721f4174897ef4a84a3cbf6fff9bc9223e6250017890165413f81390a5ff69ae128f2e682f7aa8878bd9f12e0b17e8d7142440cb950a588a99bafe7547cab5ef4d344f92e40eb789796795d768c1643ccb65a7191b4b3af41aa075997f09ab1980a3179d4da78c2e914a1ff48f34e5d3c2ab157281ef1841052d0b45a228c3cd6b5028efd2d190d76205e1fdf4cec83c9868fe504f429af1e7c5423267c48a7b5bc005f30a1980147a3fae5c100b95c7cb23d43af9f21d87311d9cc826598993e077015f59ebc476383bb7a78787d915c97039ab188a2a618f7a8d7f64542ba787e9dd7d48c4c87d2aaea068c1b00c9711b2812901673c11418096d0a850fb36b0acece56d311689dfeceb0835009adc427f6d2d6b05ed26f5a43b6478bc72c1f914a2202dbd393cb69b1a1e78162e55ca4b3030ac0298131a7a0d934c032cc9dfc5afa600c59b064d2d9013f15d1184278a8ccb5ad9d7563e666fe5a8c173cec34467ef9cf6d6671208ff714741fee7c8d1d565edf82570dffde4f3f584024142056d8548ad55df83d1babed06141114c95ac88dbea0ce35d950f16d8a732a1ea7d22dfaa75a3e0410c546523277261116a64bcbb2be83e55e040f6c8c79f911b301a8718cc4b19a81d5f0cb6312d87c5b4b079e23a61d247541cfc2c41a37f52b2c6e43a3db5dc47892d0e1feabcc5c808f2391791e45fb065159f99c1d8dd2f69baaf75267eb89dd460f1b6c0badb96cbbc8291cefa370fa7ad6997a4ca2b1fe968216032f02f29837d40215fa219c09161df074e1de8e37056e28c86d1f992a651e271dfc4b0592ad481c613fd00c3eea4b6deabb9f5aa63a4830ed49ab93624fa7b208966eccb1f293f4b9a46411f37d7928e4478dde2f608d3851a8efa68e9d45402bc5124fde4ddc0f83ef82b31019d0aacb4b5121bbc064c95c5292da97981f58f051df9502054bf728e9d4fb7e04787a0890922b30a3f66a760e3d3763855e82be017fa603630a33115a02f02386982001def905784f6ba307a598c6dbaf2946fe9e978acbaf3e4ba50ab49ae8e9582520fc2eb6790deafc77e04a8ee75da92d16f0d249403112c74bc09102b573e110ccb4d8461d249bfe2e85fc9770d606be6fbfd5ec4c30ac306d46412f736e5b696ccc9fbe4adea730955c55ea5c63678271d34b7bd6f6340e72626d290820eeb96a0d2d25ea81361a122ffe8e954cf4ff84f4dafcc5c9d3e7c2ddbdf95ed2c0862d3f2783e4566f450ec49e8b01d9d7bf11e92a7903f2b045c57ed8a65ccbfc5b1d2a38e020a57b38f2e4deea8a52354a7e7be4f977b8f5afe30f6738e955c8bda295064586b6827b245766b217fe39263572b0850965c7ae845611b8efb64c36244a39b9fed0ab970ee5ddeb8f2608dd9c963524a14050c9101d7f2d5537b24d0b0f7a45703c1e131656ec9edc12cdf71dae1cde2790b888ef2a589f03201f8bbfad71f0c4430477a6713ad2e50aaefa1f840cbb839e277389454517e0b9bd76a8ecc5c2e22b854c25ff708f9256d3700adeaec49eb2c4134638ee9bd649b4982f931ec3b23cc819fbc835ddcb3d65e04585aa005e13b7ef8fcafa36cc1a2c79ba6c26fc1dc0f6668f9432c578088cd33a41a778ac0b298fcac212edab724c9fb33d827409fd36bc4b2b0e4e81006fd050d94d3271e0]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result b54b7e4d7888a484e8ee74ebe06e05369f204200181d15a7b7219aa0f1f2e57d

tcltest::test Hash_SHAKE256-3.54 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex e217ced2bad6f56ef24e757e589f3851cbbeb19dfc26c3cf76cbdea0dc506be972796ab8dfe359a332f3585c220c8c869a05c1c775da531f86a14e78dbc0d47e425ebfb00d1788b713f468f7f79abc65adc1ae9839e81222ba478e20a806fe105aac16e3cbda49539d39ea775eb192950bdcc137d2bac8811ca6e6c1cb88b148c04db779a194661fd9aa2904e0b9d4bfbc3c42cdc8b63ce3b4a49d83cdb0b4ce7e27ea9917ada5c2ce306cc4041a4b8ac9cb7981a14638f1882afd8d35e5d1499c24f76bb68dcfe584b1fae2523cbf9f396fad7ce7d18253a3214c088b8ece61202b2518059dac2f04161c845288f8a5141228e521bfe3b00a6fd31b581574bf1423bec88d43034955481ad38d64bd45629b30e5d87723b0c7fedaef22e18b0b7ff608a2d4e89dda7f2e3cf68a39d7272cf20ea493630afce0b4a9ab745adbec6a8b4ccf64f5438b8bafca15d1700ff27aff0a49daea603c607b8778d3e82b0bdccad177c5d0bb0480b50b5aeb6f2b4e52aa6bfd3574ec174c3abe7ec9f34510dd9be1c07de3cdec662748eb5fa0f3e5bedb7be72d697736aed994e4dde3efa275e6c2d5169543ec46ecc9f0b56a315cc57a80304932c9418d3f52d39820f269ad93bddc184de4ab27eed6927634ab5e6f6fc3ff1235aadff2563f728012160f8c8a1afe097577d21114b7f829682a91c5a28c7d0fdbe2b8e405a5ea1f2222391bb421627374c5080c46b34c566d769dcefb23d1c88c38756b34ca62fdb6e09161f71a31ddb296f6216c13b385ab572b9363cf25c5b176be8fcbf703a03816bf663c4c92d097b143576f20573f8a95e31ac0d99e8fb0623a59b374f5920e8d6b326c00aed38be098b7351f600b72f76c6dfc8966adf3c592d0d2895f5ba20d3cce6d7eac6ef6e99d47a75bf672cb476f94fd27a5a7e0666efd117e69815a5eda41290eb5294095f911ad1b3ffbfd4b9395adfb8206e10f74e6589a3d8ea047ee9386f8f18dd1ac551d30a6662e70cc817af24d26505d864f959027000adb9120cc6e83872111f65871164591938c91e04bb664b910bc94a5129f6bdd7b720417f5c8f8a06d693bab174940e9b3ba64590ee08962cb65011f636faffa6bcf687c167c9f63fa3f42f517afdf9515600b94cd5804490bc2956492e73a7f615985f63571c0f94ffcd4df77326abd41e84f388f061d97573a181da7ee5695e678232e5c91a389f509b91141b9288bc0b8f8ed5dd21c74383551f1a86e4964819409cb92c3903c72ccb9327d2b6225193ace5d3ea44807351b09899f4e5c13ba150076e0efce3a50af9bea317260b3d4d4992e3a64ea79d655088c9376d7ca1964d0d74cfda6aa161929e367756a5e7af0200859fa4af1a34916a38dcd02b327e74195e1d660b44d7229c2261cc84d92f52c94a44eb0982560fb76943d24f36b071a59a46044827c216432774fc1aaa44b857922486496e3027eacb0ae87b56d2c25ca9f8499392b90a2d960f69e9a385af360dbd1ad12659869ede906711fb6bf2891d92ba904e326ab5fecf9a847d7893ef1d8cfd534348882e3482e2b59cd26ec555a3bba092a4b466d204024d908422dd3202c2226d73c9234d40efd8c3acb39bf2b9e15708b673dab06b45d7854ed89afbbcedd0dd61a6088968e2ee08614d777533a02628be256c0a53b9a4a42f01a2cb29f4d14ba8cb6889497087c386b8d24daf9c807b4255a5505be227a5ab4a8f30c85bc600af95adbd80fd189d837246ec9c1b1868d9610112f263e2e24a1fbabd16a701c4ec9152a6ae0d22eefe065ff277c03079e9e429d2a59368f2920dafd0a35b26e0f63af1d50f0539404ce157cfc1107b470a6b6a0fe4152c4f0970f91bececa7ed331f05b94299ce29f68ff90506805b38a1435c3b4c5daf5016f600ef51d0075259aa08d3e71f4414818eae12c69452c745187ae53cc154ce511961db7099c7b8a06865a54b2a5d988469d1797fc0e48b7c67408e3404cee23e379650d7ce5b78cdd6b6be0d3f5d1e658e1db9a09aa2edadac4796d08c706434fd08ffe5e2452b2881767e9bc2d52ebb77ed53c785f0865f43eabf70ccebacebc65429395a274846d52f7785594831dcb3cac853176fbe17eac438c34a9324b92fe27d30aa4438bf5e4c39486748d07fce3087d1c3631d5dfd4ec31689f97423864e5c6a575ea4e889472453713972eb33a932d22e9d2c97f7e4cf090f9113b185f25744f5c8f568f2bad9350bbca1c560af29c29d50545c6740bd09400c7bf99b68fe6eea05b2970721b87b9b24e584f1bd0d21a44f3d21c7dd2da5cf9e2552333ca236b8a7551952e65285a404a6a0435d3d8de7cc4f7e9604914d02f89861e9c7f33af620556642a327f1bafe6dbdf20a3b55bc69f3d95e61788d9e9e5d9f2ba551fa17035be472d2b92e5454c3146a3e9717b69ac2b88d7e43e5d6e1ed60855f5ee28fb2b13a5fef86b9e4ca1f7a3884d1525af15492afb5a3c45075b05c63506a82e4d0fdce6664012300a10b25d9576a841deff1fe4191f8c7afcc4ef952131569aac0aa2712dab8d81c8beecdc930d32b63f94361cfbdb36e395831bdee21efe546144ecb01be3e67bcdd62c8849b9bc6e1afc153b673740671abd11074074ab43b3e4420af78d2505637efbc981234c50b75f44aa26dab4f0d29d5a7a03dc6251ec122ce78b545006d0dee00701f3ed445de44cd0006e996506487d9df3fd2d6553f833af9ddd71685d2063aa92d0a43255b3b414bc98f8adfee902dad88013672fbbdecbf6d38f1252690c1afc627b02e8f504e02402d8b202a67298790c1d40c986b6a15edcb3ecf7e464bf0752799c5bd2c59bfe54415b5aa7543e9f4a51d6697f429a9da0e4de93b6f2027b48a6e9f9717eac13353c904d15303612e1b91256ce0a1e7ac92ad0700a3e491feb0bcf09fbb77d2b4ecf3924188fe79a7a5ddcda9c9696befc8daad406d1fdbce4af37d297f8750e47053f28d7f7b9ffbd431d3b116f6831e3165408d232871ada9b0a9d6ecafc83c7e3889e7bf314085175bbc2541cfe9b26ccb65497e94d0176d52eb2a8b47a537673fdd12b08607fdffba0b78e25bfc46db8b9ff7d7fb93960678d596c3f5746febc860810c0052a0edbb262e61312745fe04353ab7b32893f580edae2f1fc2404c60c8a52a26bd1871fdb0a856c6172a44e3d964a651fbbbcb1987c3355cfb5339a75a01836fb3ef2cf02f992bb1387e50a901181c6ea957e79158987f039c1303fab928a051b38f6f10f753685907bca1a220c7925fae02eb86c47054ca30fa6bd94a8d29634863b8fe9c799543f16fa88ddcf590ab763737785ffd6f073683b1d1a2a1571aff16ab07a37e2af8a1f1e5ca8a14afd89e8f6bd48f8216413949766245f7e1ff2412b5da90c3a1fd860dd9c6acc7487d8355e929d7c0f31e95b63a099903227673e259d5e90c82b929fe0520d96fe2f0c1454fe6cd1c8de5f8547d363055c1175af01788109b55b1ea5ce857848117e8d4a800a9d4073f3dbd9ea0869062266835e66f6fbc02837e53a503e9329d4fbc4a289bd181139f8c720f54793dbacadfb11fd20b2fd4a484f250e844683702e17e31820c58c41768a220f96c9cb236e44916efd8f084215c530af5f799c0c9fefd4d4398cf9b4f58ca7e1fff31faf32c6a660957a283926ad21dcd714bed1d7b53f6612569fb9fb35771389f920777fe9177bf15ca6570470c13cf5ff2fe75dcfea75b309c77912ed594c3cc313a4e015ae68181bcac33677d878c0233775b9a79daa228fb91bc11c1734213a435ddab231cf12a1dca644292e37416620a374a322ad69cebdc8912a77743f44f7cbf7286957e8d42427b7ed8a227eb1309b152d402590b01ba8087f42b49fca7616bedf1ea9a19eea6f162db6e081edb18224acbeba9d1c1ae2b0833f9b47b50965b740186d45e675a5e950781a5200e983298865159af9039f119f38d241ebf8e06bb11e4add940ef2b9be9978f7d421c3ad28fdde8e311e06b139f30195568bb1619bfae8708ffd7e0cdee1a17a4fa06d38f64ebc82abb3401abb3acf49dd0afd216772f006c18a706d1a173ee25bb0a750591f587d4f0a74d48bd3e46767bcef347b4f0aa711fdf161d905f638df97997fb9395a87056bcb651386e9f6deeaac214158dd5c679d287284717283c29e6d4c7f6569a8b51d6d57b91d86ff29dc5f701f57122cabb33e2781245acbee0d483f11692de947698132e75e628930da2eaa7f125020c5875a0839e655194a2c54e1d80d5051a3972f7c0413269cdb2c4156c853403f9e61a59e147e0b74be42b9b93c1b77e9b2efa1bf780279401219c1fc62e08a911c8947707bb625e432999f50a6594cb85ab8fc82aaf4047ebdead625b581d51e28466707d4544b718e772d2c7c9177c6843c6b4e04b06f5dc4e8a7582900c9efabe22de988212424ba258bd72789a01b19c114aaed0061e60f585d1d26240f0b8ba3c2a000e559049febe2d9100a6ec0ff901f1ecdaa822086851ffc14b44f7ab2d24eb4a368911923105ab89edb89bc20f1b5320d777b1312b6167e5b79304506b6f8abd871756c2fde1afe38c69a17622bfe6f132ff4c799326a2a633b5b737199e90f09caad04ac9b4b32489149d9af88215c489a94450442428894c1780cdac149679d39e0ea809014dd35053d0bee4e4682147f04943c2ec62157d52e1928773f3cfc87b62495059e8667ea1fb507c69767e0a8ecbc283e207c123d25a04503f3158e7cd9bcd14210b5460896dde138399512dbf2c6afba75222fc206ac18ad8e7abadfeeb91e8e93f33a264b8d66ec579414e1c1b9bbe9f099142c794289bd38f3eb7aa02463334fc6ab0ee5cc7d2917ea4c82ff9d3314b66b2b43256c807a18098613940488776bb901860da30e39a1212485557afe83f21fdacfb331e52e5743f473756174a31051a4576b1802621ec102b46a59067eca3e8b97ca9aa01f1c2a9d62e94411fe6518fc49a6363fedb65050d5e741324d664fa56413ad9a959044e9a798b446d2939572236702ae22905875b1733b6a37efda90fe3674b9dadb1c410c2cb9fb65c1506caf55863748d560d910b74e96858d68b32ddaf7e63524370b574a5b180118d253b319c9c3a8acf1e4ba5a829f80678078b9a73d0aed931fb0519ca386ecc0a290f85ad3388b3e92fe7605df6b6da6aa4669474e0b4b525b99c2ca982b6ee0488946c1ad8037b3cb8f0d606ee397716e86065f32d39786732d727c42f0d1a04da864f65e81f53224ff481236ef45f1559e589af148195aefd32859aabd5b2938541ca0ee250ce326b6edc43f78be4ee6f7279d945418f458f5ae09d77b56a391f434676652c6ef581dc41d92644bafaaf93b1323dede7c36faca35d1100836e1f275f5cdf2697e429a97c6369d343c270c5ca2a4cdb11b0f4a4585a166ba08aeb5a7ef2bec3eb76d962c663309c11fe79951f2210bdaf86d4de6a04e64b34483a5920088288dc3607a4ca692923a7d7206e3aca17fa03dd76b772fe0f13d10e52afdceed8e9ecaa3acbf2e5a1fe6814ebdda782d114d0fd60cbed960f79e945eacb2016106b8f3bf964da593970e500524fefdcca92898f1988547d55d1ffa75937742ed7824663b9ebeb446e4fa151fa516e4862f7800b0779220470b0867b347153998cc2b4c9f2ed9027aedf2f622a7ecd4638b866f9b11ad0dbfe8a1059e30548d6aea13cd74ad6738379a3e1b989246766ca69a0c3bcea0b643de31fcc0b7fbe66bba2410418330fd85d325ad08cded72a866fbff171732c2ded40274a142d4eea425a83e8e17fcfa6d80f0d4fbc2a96f20b4f371b7522ada95b35a94c73ba54a1c11e57ee4d393d6f689e8b7f8d84115da79c88aa4e951a572618284bc0837a5db6824f9c91ebd3a29d6527f87777f0ee09bc37165426fcc7cc7c26d081352a5ea10add6c86041ce0c507953300729ff3a042c4f82c74cf6bbcd617731c2bdf250f3c83e6602e839aadda45c7cf00893ee9a4b4b84deafcc385ca9c9c17f423515f7bd592d6a7a2408661ac2f29be4700647678ef2f161f5fa5ae08c40b1a7164206d34ea401bf3630d424ac1b6e853e89f1ca3f54672b1a09b14fe734bfb53cde075446532f7e18290d0a427dd2b2a68082ba8733a8d3e36e473e0327133450f1e18668c35d8171fbfb14aea230354ff2e1808e151c21f73006f507a014ecf9847eb2dd7bf18eeaaf858a1512eed4e3e7f6647b852bdfff57d4bb1c282aa5e09dc51fcc03556e2b4b92b3a25376580768a9ad76083dd3a2ec9bda6a46bd26ad479e175ee4efe9dbda0cd87aef2e88657be2a5a928bac689f64298188235380787f1e0bba529c6a261da41c86e802ea52b89923a6c0a815c7db13e4f64fba39667a6c30ace6acf2aeae436b256d3106f7d86bd515c95c9c28ad0133675752f03eea60874e819ca187c12ff60318ef8697bc16e1781c36963238761f63c0ca3f624d7f7207aa08017204ce3fb861bac3e2c23edb362fd27e853be6eb64128c9161222d8360c66b9cddd7a2babdee1f4949892814e88a9cdf91f5d849f0d32670cbf6ff2e026d33ce2bb842097c0489a14c8f773107931213d914ce9d92790467f34a78e44514fd3ffc25207e8b4b86465c33b0b20bffbec5db073e58b17ac2e1877b0f48a144244ccfbcc2bc542991c2f914491a7e271f50084bac2dd66ede77f92746cdbf81458f06ddbd357f353881c3bfc4dcc68f906cf160ac6f89bba385b8cda3e5f842dd714206546c64e4e71d2c84a87b8dbfde5726d493b043e7dea556ec9b13d40f689df1d53cd39dcf39ef940158692c2e45b9091616728d89dc5143f2b0e9eb4d536fa6b8eb0d823a8d93aac479383a61630d18b38938df082914107e79da96933a50c12fd37ccadd6e83d13c7f6b30efb2cdf62b8065b0e941683cfe5a687e6799fbe1b87aa3d02e694a97d7df74982fb175f1ec80ab9ba3b1c839e0d715fb30decb88d165052a83ea526f251de6e8a7eb8fcc84fe5cf7ddf6ae87c47465a595954a1709172342948e35e7b2bf249afecd85c6737e0c6dee8c95b717b6ca05fc39f21cddf580b0d6b16f61ff37c0378ad3f27036743c666be018486912c584db594e2abea4afeda0e0599e791c4c36e29b506a5c756f69bc9da0ac271ceaaac96fc89129990351a9b79edd9ed12b217c802a0533f617f07711c962e039abf02ce9fc10ad471d954793a9a00f0aef8fef3ed9f17b7ab89321f8ecfd030d7bfdac545309c833612111010496180dfbca81040a8f9177d3ba339f95eb2decfd2b9e2b67ecf8f2807d8c8c3a20686ef269f89c16600471fbde22925eadcf6c81e298fb954acde8ce131091a4cf6eb245f6ac4397e342fd9387755da1c54610bceb134185a3959adc7a43bdef03995c78f912b6f9b9db8f3d4eb27e09c2405e008da37993780e8d2e2bac6d735d86e1fdd9c242d6344c8b4b8c405fe1154cc8ef42a0105938974425afa12cdc4da5d76721419397e3048650d8d59fe23ea9d5fbc2bfa23185ae34656ed8788444749127681715c9569214efacb8aa67bf05f9985658abd6cfd1f26fe198ecf5e271c3c1069945e50f839b7a80800bfc16dfc857a5f1a99377a0e2a7b088d6cba83bd3c6856ea0756e47ae83ecb23109d6a5b6bc0a1108122d79a9af542ee25ff62145aa7cfdb1f5035cb28e59d5b63b5ee649382b3d63ad41eaabd934d17c3d5cd09def55dcf6de5f413c1c505107eb401ff44e61ed28ff65725dc7eb3720ee6cb840f79862ebabe283cf9058baa2a40ab14c814696e473088f53fdefc65cdd7646d375cd560ce82d92d19ceb7912f01f58b65351c112929bb012edaae5aca53a0ac9cc5cfcd71da0fce6847122d55a1e64c6471bf22ff8af731f19a53b8cb00882986ddfedd6b6ed307309923e764c587400defdb0b8ffa456dcf4772e7998623cd3fcce9f983e52cc0b7eb72252317de4da7d8f733a222ac9d1209944ffc8e7a7e0eb9188783e823e1476688505b3ff65c7c539c02ffaa34a900074058bbc093253acc14f1311ebf522631ecd1d4e5d456d28951e07039e579e26afe6aa0c378ab0c2f649d553008fb9c76260e56b08221f2a29e35bb77c8f6ff5956ed714031f6cc0790f5b9c506c5f35abf71a94807a724c50b69a90ee406a1fdd149f7dec4f0c27f215f2486c29671073e6194566bceaf1a21e402a341920e7ef6e6fa463b8035bc9e455d1a435860a52b46e182b680ddca670f8ee1e8838f034e2c421f9d8d6fe98f0e2d2b91f1065b0f875673f1a4f4fd6650146de0bf6cb460849612f301b62c7c225c5eb54bac52718ebcd224223ddaa4105ef23130edbab454bfc744c353adeee9b25db64c99b2d9c2da4655e2008aabb83216e4bd5a3dd20586e598bb8e956dcbf7d09cde17a2cf8b7a788ecb853503ae5981004dfa644300b115f8d1ae0c7f30f25e70e86c4adc51620fd6c71301325c9bdc8dca16588eac08fe6aedfd39ae806cb03951e1d3877c5bb436bef319c228bfcf941bf6413b705549f9f7c14581232d6eff03be6559742d0fb4966ea33b7c8f011b28e246d2b65e9daad743588081fd3fcae54b27d9a2a0c75b38cac823bfd11b2dd9228fdce5eca38775cb983402a4cba3dfd0428f6c7c85308c4faf04594ec4cf16fd45e164c70297b9a030240fe9bb91d994de033b88f03d7a478165b2cea50bc7bd90679db763e28c0c46d90e95b79dbbe021be788db189ebf865cf321966e8d4a897f8f7846e71d45503d9697066ce6dfc364789536f1cc5ab84c941f6ae6f2507831bdaf5ca4b7bc48eae8642712cd8304326d8a2d3fff2a905db472e25a6a2217b59aed4207867a110dfcfd37fbfe2c471e4cb4285395837118dac8974973440a838dce717018234b0f5aaeb399074ffe708ccfa2cd2e1a0d068d8cf434ac1aa3242caf758edb2c49777815147a6772ace1a429470d3742a69f333c839c532a840ffe1cb8a44e19becedbbce5009d18d4da295d6fb43f81f05b6263cff127082faf6892d560ff6ffd8e0c02afcc26c708d292c89722a57c5cb3a17f23d39628089af2be36455d93983d7f82df5d82e1bb536717580907865e4066fb39a40efea15b22db65b1e7291145acb9ee05301d5ee52cb61cb7e434677a39747be310107c588f96ee472a94eb3f1a147683ccce86004a216fbfba0b2ad97f57652137f20c2b8f5d3a65a66ba8a25e2ee339a779a32d45f5db91077efae6cf308feef507d34ca8bac4add911bbe7df65ce975e9348d4a68fcadc4b046a1a9f8c469cc5e66424622c3770412ba7a82455933d50cfd98ef26bb7e1f33ffaed76b733cb2902314b521ded6d6d1dfe4ba38adb9c3c73f7c4a0164d429e862ff7db6dd1eaacefbd39ff2c60e5bb6d224af351f2246024060e462bd59ebb8b7b92340cab8ba0038a78afc43c89baada63e9a5781667a54a6d43af90b36c894507527102b2ed0e20b700a71dac9f9340c9eff1803f2d99a3caf152a38ab445550f90b14cb348e1fc2c885b1b616e5b4d7d487fff42a0c493a176b1be87ccd22ff968687263d55f132dab80069010e846a87fb9bdcac80f64175836ab51bb1a1bee5ffe3a6b9b71afe3ef7ea6e08e2476711906817dae625c562147319189036116ffdb6d73a2001676dfbec3faeff52401a0cd150359a6c586584e17ef3f774898cf68d322f3f2910d00a625853b45977f9c783f05d1c1e5ce86b22612e45d199c570b3321953168d0dc9f932a7afb1814936ec82b1f9d055732db26a3809c1d4c202d561790a3e3e8fa12d791b5ffefe80f17781c4a216c49e431df491c1e99ceb13705aded324a7de265b761f439642297db16815a3464cb251c18adbecad84a928f068bb3c5e4b61d02fc433d91bfebb4226c0158c033057b049b77718821e94c9f2158ea43fabc324f6ede9aef476aec5440454bac222071512e4e3a40bbd266ce20bd9a96d4b7a9b6d4db123b45c8cad95bf43be079448c6b9ada23daef2f6883c961cca5bace0b9df7e1ad5d012cd31985b73043809856baa6c4333f0525db28e6ed8858f429de6ea099743dc3bf917d853633bf7f4556a71cb4725545de46243d08d497c9f1ad9095aa6ec3d3a88b6b25184b3bbd721498c251e905f68231df975bba4a834efd6b9fbea4d87810494c2b0681a0834819f662449f38623824c1bb8d415968675867857a1c62fc1f548960a7dcd419efec2ac2349cd4cf29a832734771acc16545ec1188e04aa5fc33888ca464c0c78e159aabcae9c2867d449a8531532cd56f4d620990f879bcd06eb377a4214cd54e1db0e4ae8debcf5b8161baf2eebfeeaef63136396ad688c28e71e8501c618a568bd337879036f1ebe6efda334b4e524acbc1602c404853fb1a29a9505ce52fcfe76a6afefb8a3657fbacad9b70c24a6a517b4e1182b963a39a45804be9c20ce0badf46bad5d1e4c44801fad367011e3612c5ca8f361002e1962c36e9ccde69b28a99936426f2445c56548b8238f516d795089a4e663576dd974693d30c238e6ce20019a3f7d59e47ac0e2651e9847a7562ad87f7190f07c024fb5eb1b177c237477c9f204f623aadd29894e884989137021a]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result cf9a18eb7a3cf651007a76e8254c77cf3e6abdf41cadecc7bd9cc829c649d03e

tcltest::test Hash_SHAKE256-3.55 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex a31e288a18be8adeef02a419dd9af8088b599db6ec39358dcf9e1fbdb0dfeee2d40219e195c7f312fae9dea58aa0bc3e626aa7e3860be21875d20f48001fa2675b2295d675e55e87858d1e61e5dd1be624fb701357770387af89b8e8519ae483610605326021b083b978ca169659fb47f895600d07848022a74a82654b599d7c0e37cfbd0082d24fbd314c8c451c46aa07bfdf9b3f3a4131829dd5869763b39b893c5d3ffa10ac33ba400a8b992fe25779015583a7a22ffc6b0a1914ddc01028fb9d1580f9d32676d82e6edb3a99b99675e32a8ee6c330cb881ab6d8c4799a6b8be36147a3d429623e81de43d162b1af23eec684a5a62de501541497f5953bab6295a85ea01a9b3d15c4c48d0693b4e9aca9922d8b510f93ff419b1c181cda32a73b518b99ad6650847c877f8032a98e389cf45141cebc1daa67b42ed4175e46835ec697369670e3b4338fe2e84a77e4ee5055b76e251ecb2950c594d18db1301e856e4a1edca33ecd70447de5e00834f74c1e28bb5c1ce4a5843817b886ba389f38b16bfa87e5a8f6bc0e1a20fe43c57b18b56ccf7d9db24589737f310a61a52ffff7c471a0206b579e557f40ab10e1a13d844b548f8b7b32e9e094e3228ec1f563a81b2c2d3bcd199e8175eef057ce9142f18def9bcd88932ce51d77d529d21aeb2c39d2391e176444fac4d2d400d574af66f94aa84b2191d8ece4942c1a21c520ece60cc9b1905f192834935ff43e720d4a580dbeed8e54775cafe32d49f61f884ee982e7dc8233a4748dda991951b2e30572e0e59b1603909d470ce29f9950adbb0cdb9a8733076d44964e8b58565db9ff0f69263d02c6ac1774b65302517f179c15c0eb9aec04fd0118983c9a949a189ff75388bb9ac75232fd89875b67d44c57cdd8e0fdf552db14dc5fb4c55492864ff14414fd262b0a56ac2f86932378d656fccc849896188fe3a74cfcc2de6c8d77c7e4d1ebee1d5deb474d5890cd933dff6a43dc53177fa2d844071b7a7a51b57d3fddc76e3ac3d159978e063cad4c07bcdee6f217bfae9b5a793719d4706985ca22d4fe6c5145f0086497967e0bccbef4225dcdcad8cd02d01084ffb707db85c637747fce7ccc42607613133d2e3be90efc4f7556a80660a4cf98d40d88d03dd94862517d03804eca94a882635fc011743564f3a1787f3c3d7f18a0bd3b6f366c1b497c602e889cac88feedd7e683bd8d95454e958f601e03e8af6baf68e1f7e57acf095e440cb46f18be5b810bad75c1e39a8e1937d28e5ed1033ecb574d08ae2b9cff618f361f7c0d90d5491666c278e90abc14b6fd15b603bc20f950dcf22df6596650552c643a2e1b62174ed52a1a6d3ede7055083a7347831a219ab63ccca5ae4612df160b1045080ad3fc23370f38deff145c1b86fd6300332b7e026ef2fe42a891751d9c6818fed565687771c0129124e8136080bd1fda73ff44e91106cbbe93b45f69a0a971a6ccb5dafa5f93c2ff57d4c1fcb01945b9e2853492ac72d2c91063e4219f3a16a8f6ac9ad489f112d19fc0b01a9e7a9b4789a69525c79ddc0c26864d6d1f85cfab5c30ef2c7743c8af059426e0d349eb296f48b1cceaefb02fdd06e276aaf16657042a232ab2efad408f386c76d6ecfb0a9c54cead9ed018d93dc9eb64c7e6a156f8837cf8c15f892d4794ca052fcd939019b335f06aa8dab24fb8b05fffcc4a4d402143bb2cf9241d359187b567527d63ed4b2ebed7dfbf631abb798ed80c27e7e2eebf9e7c2745b96015edad05e5802c2006003f6cdd8f94a6bb8d19dc0c01cae8d13ac63850b6a9d009421691ed6393bbcbf59ab10b12ecfc9e352993359f9e59b1fa5ee8db3d948d56cf1793d2ef3fc58153f82ecf0f14234eb9e684efcb0c3e78488c1432a323a0e2dcd994fbecd9461263806c9250b423b1617737a34bbb9e0d6c7845bcaffd1097b1841cd2220847656d5bf2bd9b7305b1740434b7e8558158ae4c02e12bcae55c953fb1be5875ce62b9b048b6b9f9d0353cb704956a7ff041562dd409dd342718d232dd2758c8e6f18ea8f7e772ef8c24ffb62ea399e3f1b0ab45429c8fe1dfb5ae862775e8a894fa366b86b68dfd426806293a4b3d298f8df6bcd4020779151a72631711d1bde265f7207d8dd4caf9e89939b0f41df9cfc07fba12a40ea5cf2f65f03661dab0d71a1aef65d30dffb98c000d190502f9bb318e6685e86b0d17dcd1560bcecd297b02e601c4f001438a3c82cffde8b4d45ac96be8b437e858f409fcbc1fc171cfd703a57e254c783f75e068a4e204fb30b46e5e6927fa4b2e6f9e2f4bf8a08d4bf2069d8e0d4f3a9b8160fbb652c19fb6d209ae1167975d398e83b22b20d4ea44d5f4185706610efeb7a4802dd487670dbb83a407fb78e61e5ba1cd831fc6506386b35c0497eabd101d954231f1be1cdd77c288746b03ae88dedec87b7bdd86500f2db1bb4952107abe1988e82fce86d00fb0a27f40a27c1d1e23ea3dbe8056b2774861a4a201cce49f19997d19206d8c8a34395101bc198523597dee6f198632c7eeb3e92c5fbcf5ca7ebe16341a99b9f035961136b84e69f566c7b9170fdf770606eeaf6fd5a756462e3fdc0a25d2004a9d02e86800e1719d3411c43dca292a3c785b21f2c954af1b1364f622aadf099f53c3fe1efb9a4422a9a23769b22cf2722c42643da48ca75214758c040f897bf73f217ae011438b8cafc43b242faf78af09eba3d8cf17e6f118b9c839be98fe5a49668436aaa2ede32dbdf8f4a97c63fbf99d044cb0bd15030979d0481dd43cd159d846a92e8113300ad6956488595c5ee4a1af1fb146dc8dcefdccb99604da6357c1e5c005a6a47b30573af9340f0be1b040cddc3979e2994f8de5158ff283192b678c0498d949ca8688113d1566178b46bf8608af1fd02e747142e27264ddf9bd1361fb4de4aa27f4b03fb7932529658e69012d7d004d5525f00daba623900ef50c8c2f8d8e6e996219efef1716e875708567d20ae402154a536bf593f7455dbc9c3628c19e3e29b809476e07fffdc5d55adf80be939676cbe3864aa1a7a4f0f809876c4fddc1dddec96fbbcda90f5da33192be01d4b28090e5863138fd54ce939ca685a113a0bfbda1905ecfdcc743c452a8143b71fe3c81a49333c0bffeff739dbcfb1d0782d73bd8d2e0775fcd811e05480ad43021b18767d3d7a1b6498c8254f0542d83102b41b85cc82cfcc81f9b929a2934dac4e7887571a543aade7ca6086b1a384df2c6b887579e557960232240c7f8c4378ee76d1793250f6364d7c90354d4a62ecfad868eeaeb5c9f3e979a59f700ea0e28b81f9562e06ba884a5d28bd40bdeee4fea95153e35a8360a82ed2351c70f2839628537055dc042e6efa9e913464a551b83cb647a07a1066bed02e7fed79c4e6aee8645a42477fa31bd3665380d512bdb8312c2c7e6afd60adfc1ec26b8f74663630c0669bef6960d1561466ce85b3736ef51794d5c3a708f60127ceff08ad8cbc9fec37ab2a7de240112d6d660d042d5d170cf33f0aa9aa178dddd8409bcce4b2943c4ff88f19c1b88315b9ffc19146030560da22b671de8300a580b8bf4ef8a8ac55121c93b969db2a61eee459c757e15ed7ac193d9c10e8f8135adfc9c0231f46bb207fcef9550885967ecc2c22dd7871c60b9b2694db89e2bbc91e61bd0e76f1d2edba97461dc11327ec0fbf303148ecb05b1107d8b9064ee35e0d0d9215504c30ec25832c2ea561aaa947898c1dd32e2b2d2337f413ee9b3e7c1433ebc22ba469be6929180225df7348dc2172dd97c4aaf44a5d5386a35631b5dc6b26bf79a8c1a6fdef9622b30b364d560da10b173e9442eeee938bb51e419dbe19df47caa7ed685c5d232aed7348294da47310d20a8b9b8942109d9442029641c672058f404164ece84b6525864d6f1b9c85a93896f550c21e7726d16fd93200078b734800721f58177b7c0bd29a81583c451eeb827624f1da23c1fcf659e36143881b7546d40a06613fc9f0e6d3f28c3a3dfc4b5b626ac0eb92f96783f93cfe010468a7a20bb7806c14f985117e451feccccbe8606ea497e96137b1973ba12ed66cd54fa06daa4e8e77653900fdfb8bea9e08335fef54ef4a0b075b8e85b28c2a3dfbeda09e54c94ef3a77d23d78868aa1e3bcca8591e4f93fce2d5f88be38e83044702410239a933f63ac2089f7e3eb1c9c104b85043314db344a153a2b6be573c411e002ddb46c41b99c81dba3f66882d428c2e59762cddcab75e3e6e9e943d6264914c95bc2a75b04edfd1bc5e8893c53ab368d9299acabfb56cf7441d989c034c2ca4ce5edcdf70b479c31a5e0d6b0e142b0643d023aaeec94e4cd7b634099b4210973c35c657c975367058b07d84746953754dfc2fe4e45d827d7dfb1efc86f11da263c39f75270b8657fbf851669494bd345c20480f3d0c9a27bb4e81eb72d38434d99a90be15e1f9e888881187fb40c8c1d2cee490653105ca2443356cdb63e4fd023d62a9029301b06302367ef4d826bc566a8e0ed97545d32d5b81d72d1cc03971fe8dbc99892e3e3fd958a23dd537725b85bcd12643eae15b09ffe0e488a698bd807a7f474eefe0538fc09812b27b925692f99db827656311d117e09e11f88929559157785eb755628836d7301a737aec34bcbb2b8a35d70633627cc653468959d09adbb93324fbc174f3d60257afba60cd8ebfecf6dccb8cc3580bd9b70127d393df728666a94214b8b01b060490df78dfd8227907eaaf39e3611454d7c8d30b11e7c27c53c4d6c0d5d42ca7abc73878ee31795c07bff08226363cd41ffe1984dd3c31e7a508185a5ed86183b7a374057b132af2a0fd3dfa0e2fdbb40a2179c558454764b4d38545b6458016b2c61082f905bdf95e02f6060db6778120d3623105bb89801dc7ac077ea3dedd179f7c960a81b8dc8961a73a9772a6d7fe74617c77d76ea64a450b340a6bf44360a036a3020f91f8cda9d00c5ddcd014fd8505fc21516d63b4ec115ffc1656f62868cd3e8217efea954bfeffa37d89b498a5ae3494921c35081d6ccfd63b7d41d969beccfd23092e7ab882891aad4a537a26f8ba4411e1969e696c17fb23edc2fe2379d2f5c9a430e870093d1604886dfcb943f1a26953f4f2409dcd0d981ef5f1168ce4ee6417ae59230190481bca609abd3e7f4200e9fcae4370637fe097676cc36677699af9d35711fa07034b86d7fea336b7b5612a0a1ce2925fb4a5cd73dbaaa50ed9d6b16c6cfd5115fa2c5430831bdb3f4f128aa9e89e62265e4047c7984cb71fb19fd4b60525b5517f36a906b2877a7aa18d92587be76e6bdf489cbf5d1a2b2ea35eea6cba2b852e14e30bc71766b30e4f4ac792514e2584ba4712e784a35fc001bc48dce68f4f204db9e2fe2c3a134e9ad290f4034315f561a460cc9978e3587f00a6a334c181ccac43c5186b91f9c026ad84da0c56be5287e8fcdb15fb547c5df45a4c0f52bb8792e928b24feef517753429c0c7099d107f9d5d8f84ab018030dffa33e0c35ad5a432943863a193a9092ee654dddc10b3cb39f976602899288a5bfcf74383fe5b52b88e27216a33e954c640e2bb3ee7a0ed37571c22c489c9ecd0e902c224f47d20e37d1b1399747cdac2d016e9b2508c781dfced673f31d8bad734e2c7270bbf813bf770b4dfc3c81d7d0a4de3c709caee76616687c94ff986f76713dcfa7297062a73b47f7db04f9f8d561433fd61e0a2a91b241f232290d389f6127e1fe79832477872fe13b897d35c59f644b60772475e908297bd68332337786b2517c937681b8c289b324b255b627c50a09148d44eef581e8bf87f54e858549a6c7296094a0f1531e149f67c8a4833dfd20fc49b1bd3d8545684d67ab595110caea0ec624aaaaa4b6adb2901f27626e05392093b50b497d091b30c18fd56444e76332ae6dc66b1c19266816a3664ac0eafc86549600a2cffc8239eb4321454ec5d99e01b81dbd230e26c6df998ac69b731038729dc3cfe5e6456fcd0f667c942cf558a54dd727215e55d6d44cba5b676a1e3ed7127d58268f0cdb503acc9280e45f6a84741b327ed15d9fdd031f938c95cd9e693d55c6f9bf7e835a0e7a0e79b4bedb85751164a32fe329e305e1f572bcc6621265749fc83d4371d4d19978e666bbb48f97e248f640927dcc9b270982a9b192b9d4016efad204ada7cc505931c0fdfc8c24b663e0cc0fa2820d19582223353446d025b8f746693db947c838c18b2dbb6362b43fca9a05a0eba3e169bbf1fa52a0a208072661192bf48a289dfe8ef2fafc9a05631a731a80f1a5a4c4b6dca9f3b192d1e2f1eabd7f3fdc99105093f5c03f13d0573a1ff6497b5a8df279acea2060e7a9d2bfabfc3f8187431a1f60dd1514173ea490664203700bc17a6e2964e095ebb75ef96a7f75a4d14d42d3bf530163ec77d18610a6b6ba006be4fc1ac03b38e4240e05f0ed288f03e011d475ff8d14dba26682e4c96b4081b1b98a49a539321b176a4c05ef612a64230e8b4d88c00f2ce8ebeeab542aead6bb80827cbce369d8b9fb36702d275d3e3fc15e0e97a33c2770e9312deef9a046b2c14b7cad40c66331482cfb4e8210d75bb2b67fd33c831463e8b33240e24a1abe054d111f583103a8d9946cfb7a2b79a06afc6ae595cd3ae86edc82f2ecd09b06d2f002ba3493014637d78cdb18966a3670969574b600e2280514e4ab1f1a0eb3b39c1927dbd2a532e95e2397633af2444ceec829a506544a34c322138411beec2db91c0e55d837957790f9d664fd5bf2876acdac6cc5d877845102d3229bf2dacaafd416ab8bff966ad4d54121c8eb6aa8746ba41327b6d77b264d9302a1f1a511e609e8e4d5455e4994817fa484ecd1377369b9a0133591a3aacafa2a0c04748ac7832c089d50149c37c339f517a452bccf90941d709ece844643b1a4c2736fbeb8098920cb69e1ec2564171a6b5c12c0efa8dd912839b5a4607e6078ad86c0342265a73346d8edbfc52cc01d665b3ccb3d793b05224e6f8d6245aeacb4858c746e5d2f49f8e55fa081e2dd05f2ebf66320ca5780462523c7b25e434abeb7fe0702bac96ac8d86014c05015dbf65268120064d90a7c06fad8ba91c859b5653b7448431c9f9ef817a5eb3c11a659d9bc5f461068abac381c4ae0a8e5e280d76e43a6c2d1ef628eadda686f796e05c817d25894ac6cbe04b0a58e6941ec0755bdfd86fd8f63fce2493ba0b1f43ce167a3f49fb84f549ab2de6f2b9e857f322750294fbeff02553c1451fbc92a17d5fd884c8346f66c298ad0321f0d58a3e994504f69cbc9d453e436a3e281c407c9d4ee636d044bbb51d3ab75d17f636114e5e5f83cec94e1df21d6babb9f6a14a532fcbfc3bcf649fbd79ac1abbb4ec09b6336ab30eb0832e23d1c1cefecc3475160daeaee349f1e10dcc39d148bc0c966536cf0ad8fcece427e3153e73078a7b6a6b16c5735ed43762b4e9174b561835d00ae4f1b9f8ebde92d3de70a33303cba4ba9cb658688bf170c64253402daf669b12551e2e4ef08bd91675ebfbc940f4699e9917ff1199ad9c62de2ba3ad32a70adf97d6a269ab6a8f4d84270954c2743d69a450f3c48dca6a3d04f6f25f3285b3d515b1b2c37cf919cb81a8484ff8d974be3707c30bc8e65e975f5bb8ae3f713a955745ec06d5c5fd22e6f635255472c40ed992e951eb8fee1465a07334b9f7f392f4f99a8e463fcde62c875c7f85fe8fddf488d33156058d36808b9e6d1298635047536ad45ef4f087dad21aa8ddcb5c9e20601d14a905d0706873b6c209c12e4ff6c9b9738054098a7a6d2c5bfc77aee1e59f239644ff4c4465df38dde000a8f45be322e64afb7d5073cedde33271fb2baccc8310ca6055450144b10b45d557e01f2613a72f49c09c6f6dbbe94048b5edfe4eb82ea9b79fd4d34a9bf49bcddf95991928209ddd77a0b5d042d8867a839b42bc3f4a5393608654377604624894875222ccfd2705170fff7d0f2b7575d8d6228b94ee68525bdbfcb1cbc529e41b27e2d97e975b7f035ca4fa8d7cbdc92a01063335a54892e638453009b1631ed809c3b3a9899ba9d1093eaf2a269fe2fbce7659ade984c3a43db648bc539e576fbf6d37fa4e68041488252171c3bc61d270fb557a359d62fa6ed85250164c2c268b57dcdd40611c226c10e800de93b4229afdbd0714030f7d2e23e36183fd1ba1200c18df19e750af275a6943d1b65870cef606f0ff5617810e11726d371194640002825c359b4fff4c9a2ba73784dd416f8cb9b471f719ca712995df8a3a24f39dd39fe12dcd78b73e38b5c79a8fa1291f2a4bbdf666949e19e4b444f7c75bb46be7d80a6d2e695b9ebe9e115547427c3057439a074506904adb541a2a59974afcb7a1347e1e7040c0a42b11024c4fdf557c17c52ee2ee3596660bdb7c51660bc2eba20bcb1e4c2b567203431bff17b6e1316ecbd7f0b9f28f2d3215785f569b50cc50dceebe4b6fb2c0ad242ce0388785ff8f1a8cdf085b97996d34a8d3d76e19021444537f0c8287e89f309f8030e5963f1f3dd80e47d5322323d5884f66e89df582be93c0fe0838724ff50e6f8f45a49885a2241f06f3f152ec54913293bf524f22c81a349e6536f635edd3fea22c336468e40b81b43c67b12d5e4e1ddc46d8575aed713a6c2e15ece7878ace27fdc54b1f7ff8c6de12e7c67d4f2971af1392a6b19b1352f5d757beeb5ebd5e6f5eccb53fe2665ee31bf3fb42a3bdce8aaa03c5bd4d8b1eb9d56ee4a7efd61016b3dc3b4097feda71cc3ed813e875950d7ebe3ce49142ee36bcee06a3975f938ca15635a82d0c99f8880ad577a9eb5596063464bdf2c541db02379d7501c4495f8bdd3cfcfe2a4de5f3fa8bc4548990c2d4d8e5afeeacda3529ee01829baeb1fde7d3c9b5a7d246d8748053b074cad6f27f4e2830e143e7d3b873eb52e1795de649cc6448968f153eae3ed592973988d349f6b4f777352b15126ba37c5faebdb73649854c66db4986e5888a01185036b3d955145a2cfaf497ec27d25582c941df11bdb5378521545fdeefd97284a95132b1fbbeef5f0fd4ca8a5ae074e7639acc80ab6c706e0bb617eef75c6d689f78ce485d1d0d99de5c3b91576660f9e8291de79523adadf4ff4d8a117b6840cd0de520fbd75b7a00eb5985bfdc8036c16d31db0d6335b177807f54d0cee9899c9125c05a465f5bf222a2dbf6ab892aa9e7a6bf66b3bf150dfa0bc3a7bf67cf98a2ee9aeb126fdc3c62b6088e5bb241ec18fb29539d904512cca15b28d5796f4ba3de35309423573a4be1900985b21912819d9d36795fce3068ae8fb6a9850510144313cd741079964ee406da91ff1cc7b20c8f91ef742ce15ea1d5e394111da094dbbb141a9dafbaec0bd18408ffc9461ad674e85883cda02f19d2323db4055775f69fa6f041563283e78498634aab482c69e1cc5cf53ce75a74e924fed478bf683235e8ad922977d6f5a48a29564f2877655a90554ef74151519f3e5ff8d442cc0d126bab1685f535b495cbd3b901818c2743f6ea079928b42e68d0f997a47c11e5b9b26134f85530b2eceffac98ecdcb4e324283a57f17e379ea9f344765e5ea5a902f7873fcf2486f2e68f72e2377c538aa05aaaf35997fa278fb987e94fab5ea3a65495a0076ed47bec9615d8c09fa751fd2c79b4927e956b878aeb3be34f5032ce66c6daf3dbfeb3283b1be051eeb92181c72e0163da0f51d98ef7d4e2f3833cc155a1555c110b81e2a70e64b01190e076535144955471c0ccec331d143e00aac848af7a09b803cc610175cba6af347822f76be4f093c2a2a9cd277c41d9ce652b6776afc479ef7eee72d97dfb70aecfcedc03493c400adeb8585c5a306bf55432db805d53fcd67ed122c1e277fe05cfc12aa1db4102525c41b65920aa9d7e5e25cc55ed7fe8c0b45238b562e2fe415f4508cd02c782a1048c0ea6347717706d4b617bc510e5b508b9dd3d65031b6b66a09e10269567ffbee189cc005f80d368edc37c4fce9dbe624d38e253a3fb8ace1b15f1af745a7472874f52ea2a80b036531ae0f281b5e2aa57722b948a46a67efe95f9052c030908c787c05c9fc10ec1c58d2d15f0d82ac81fb2a19080a5c85e9145ae908509c568e9599fbd87e8f5f08b44ed22e4ac9ca4ed21caaf4dbff6561c4e9ab84715b17a35ee7575aaa06dabec68a78025d9432709e7315ab83e3a4ee6d845e639ced327f26ecdecd08f7fda3121e4977b082437ba2b5bf78bc79c2e380a368024dd35556a012c89c15d3266a3962bcfaee149bd4a15d2f08c0523de5a0cf5f0d0e9dfede3cd1cb644b38f3587f00490850bb9a2ffce1dab849dd74694070a9c059bd7d8a6fd24db23399c302856f742c92f7ccc227ec4923a3ac04f2e23feee8b9b27fcfbb7cd5e2496633fcdf18d4d42f49b25fa4c4f0b7882e7df6f87574c2990d74329239da81072ec4bbde94d19b8031d94d1614780041d53dfa05ca020a922ed947a6b1e21ae773d3a4165c00ef3030a00ede53458a7b40c3809c95ed1d1fa73d634b4d831c84b60f6a18d6c95ba9d6a5397ff9cfb29ef1bd0f2f71bc76ac070f3a029524124965d65258adb14d779467417d709d152758791a30d5e6a3b1cedd206ef14b78c013a71158495f5103ea54bb5960242eaef58626334b0220eb4f15bae31a6fdc5330101b8a2209e2e9490c0b96410b6b804972a7c949857a9338476df1591799ad5bafc570d0679f9250ebb6a68b995855d4bd334549e71d53fae0be3c35c95d28f6b4c3aedcfec3896272412cb884719a17c44d49d4ad85a80780200648fb834081ed8]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 6ac118580dd7473d5a55c72342852a023e8d181074e2dfb214b9725c59abc14c

tcltest::test Hash_SHAKE256-3.56 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex dbcc18ca23374d090dc5fd2768dc8b4dc5913ff3d1b63b01e214b034cff551c405e60844d7bae8c916d2644ee29cbe57bf5ac2d5ec25b34af031862d75524e9059bff800031738adf3a1c3cb9dd8bf377827775e52f1545be6d4095fb02f0d5600e14ec74e5424fccdbb8364429776351780c855ab22047bed86a1922993765e22d47461607b9300cba60de279e2cb99c5ed1c84a1c1adf32dcdb68d888671efe51ed096e2936fff16ecc80ce9c0a6aaa9f7dcb1dad4360ccd34b0197410e6527449cc2e7ca59f42d5141bac3b39efb1ec256ea5fe66870bf540f7fe953abdd0f5ddcef0d5b80b1131a7708817558ef6b5003b28b67c883bcf7bf304940bdeaf916040a596d49bb4522c2e6a231d6bc12d0fab02aa2021e3806c0cf2198c31376f5c8915660137725f2bbc180a986e5a7bda27fa81593a4a339bab92cbc39fb2b8581108ee48c794812d845a72ce8008c9e915d9e330bbb90e9136aa53ba0e6693dd4046d6b03362dfb9edfa04c887153cc5de677aab8c7839d517035879679c29727e96c5426324a2575fbe678d6cc7fef5eb6cebd595cfddefb4658306939ca19f33c263053f22f18f4270432518673701a3b0e1b3bf06226877987c6b79ae24ecc7905901b0a4f5eaffd64299723c0e726dfa024ff0642fc7c763eab0001adae2a2c94f3e9cf1d5effcb90af06190acceb314f6b011322d940b8f76db1227ea082c35ecc5ed52ba27a2e04332cfa939a0dcc466de0bb94358ade4c7f6961f7de6ce9bd99d890fcc1859159668a3d0dc6d50d3fae2c43e9a99142a86087348ba05eec4bece5a70324c8a1eaa99c54dbdbf760959c3260c59e2a8295a1a93ebcaecf679416146bc154b9bc429cd1c68051db82d2c89186aa9b8d1a9ec33dd4fd4234c800d5d373d9c9bf6cfb80c9269dc107d091a3c819fb2a5f771e35b39be01335aa1c8ca1439f0c60107015f0e97691f2e63cce54bf49b30824ae89a8f7e79a386a61bb0c5f938542634accd793cd5d23104e98c5db18de2dafca3f9c7d863fb3a55ad1831c59dcbcc1d615fb99e47b1efb41a379f1eaf41674fbb7fca14e7c4dd78270942e547b55a8bc71cb705e845d03a07f0f9822ad7920bd9357e7a2f85d7d5308cdfa05d993a46860c5bbbe0153d6057be5327252cc1f7a421cc5260c68f3571a8f03f0800d31647378e0756a99cecb3aa9553c9c65ddcc54d9ce3a5106f5f91655e0a6f718dc3b2a63630728a56a7c2baa74f3e2fcf82e3c1d77624e9de1d39cb0f49bb74d0146e603c7f5e3fd4592df87163abef7eb1a784635305dc443511e3ec44139104d2246d893c3f507dca9b6cdcd6388cd131b89d2ac2716e0a70c0b4dd43a05191c57bd604af4046b8c1b51dcef20f9032c9c017130b90299696ef46cb8d893be0b51ca2941f86a8ef08231330fd5583084364f705758994516f45a29c6bf7d8576aaed923d63cfe89658c56eb4035ebba654e47ea498537a3c26bcf3a2512ae5fabda84981a88d1eea198efe503d552b2f8260fa9d0ab9bf55908d58b030147614248a9da3492a78584f0e5088e5d3f57c393552a4f2447adfac5bd794ced2bc3f59f53d36c830bb8d53c403b28f63b11903e23551117c3356e4a8eeb4afde0ef8d87876a098382ee5e2308651ac8cd4825cf80125dad98f37d3e50c8435af04bd2aa4f8755b99690e54e4670adfa7d644bed75497a0d4d51ee4a0cfa802be3418badb212964ece043365024326b4d3cdca4008e2b1616ab58b15c96849993f37823bb9f4156ab2b3100f42c6d02058ec6a7143c54ace78891a488ffae6cc8e977dfa6a131a33cb0543f410e1f2639327f3282eda8d7efe34648a66989eeb57c84592cf58ecd4a06396bd737cd3a80ce72c0cd00ac199841e3184572aba1f2332a2acf0abd573ba33cf12747fbc154c95dec6313b304692af49dd6998828f793d5bf0d3f51b399fdeb79a19d2f5d2da97d1fe595620aeb14f733ea5ca3e64e1513a05821c074dd9cd16fe6c5ec6083e57cd5b5144daf96866794f11a936c5e3d60594050ae1d7f067b4e6750977df013b9a8520eba64e405c21b7b81bb2db0834854462a5f1016a1358f83bbc4f7eaaadff25ce35cbd5c099341f9f09f9cdd7d382bea3d77ef1d13bccdfc660970ec114c6e3640993b87085792ed05c54c4d91cc4a9d087d2cfac46d6411edb98b6cfd8b566e94e441cd889ba8d52fa0be8947512aeef9d33c4849c3fc74c17979f5b60955765ee272b810bbde32dcd6660924735750a00eaf8e0a5ce1857fadff0ed162d5de0d0840df2754bd969bcac555bfbf6a5289a3f9248c84ddd476eb7d20d61472163dca3eab32d2c170fae27ee75f71be6525279ba447082bd245a666d44a9a94af5facbe94d9d2844278d1d546aa56ce28f10e29a5d023761f7a535e819571c819f124632472b0708b740d7aec26cb33ee7bcc0571ae73270c8396c6c15d1686e680c5aee2941900dc9af9d2503b3b6a5623f5c1c04873c939dfd5320be8055b858d050457c468cf864c2b7e1b7e43ebd097ffe0fa14a1c7280d9312d9fccab087747705ec6a2c47491616c096566132ee365ee587c999cb478b550ba3d1e3105ce57016292bcfd27577405c696a1fda1f8d973201ada82018d79f6f022dcb05864e94d7865fe02b9bee3ca3fd1fdc4be51c4d68f05779703c80e6cf7d570f1a841e69ac9c9cf9ad3ce96039d9ee22f2cf50c60ccc4d6a35f305afaf6de40b99e6e34317d45978c1d9075f80785b80894ec9b5600df616ec0ce46e715c6b6d3e2f2bd5abb62bfa13e0b69f1a60fe7159d3f570352de7ebfcca8ba7d7e1338061bd5675caba6ada1df475835a1c3d71ff0f52aaeeb4a975f2bc99f0256503019f1201c81769bca54a74d2c0d212af0ed3416fb9ef2ab13178636dbbfc80205d50edac30f44c97e813f24cbc14eca9b4912abb11c90875aad85f858fcf9b31f02170b444f3cb732f24ed41f994f2e3ef932bb3670ed68d4e9cf18fc0114eae668b7bb878987ed4c6d7d660edc4ddb43c63b4e71e230d5e9950d9eb1153f30c2ce94f373054cf336bb74e182d46f5b1078d66c4aba82570177e6905e81a20c1bfd56baf20ab45256a4da4d62c7de340fd7aa1ea93f0a75845903f8eb8e670659bea619ece1e79116ef57b396fec1f1a6aa606b76baf1b7da010bdd3f81b3a6e4d72c1747d30c38dd66951a05c141173fbb9f5c99735ea56b37a74844a5b17524108fbcec264ccf12cf398a9958863041d010f8fbb27ac89fc57f40e14186fa82337710c322cedf1ff3ee0b390ab7c414b25a4782bf6ca7df723acdfe9c5dbd64068e1cb411bbef6b9a5aa6cd20fd592029265117e15dca910581f784ff5c47335379e7a8393a885e8b25623ee27f79ccfd1c1fa36275ba1f47fbc759b2ab1f58e0e37985e474316090f848729866ab82f5e3b80c88dbfeef00514466fd73cd397572db35589072d96f7b5e528ad978aada24243c9cb81e6bf72a779328dcda40dcce149eddb7d331f155aec6000166aa74866c19e533a3f9f62f66c97a0dcdd4dca02caabd11ddd0de2e40b74105ffeb8bb2978dad751403c3081bee3c2f2e5c3c902c403ec5171ffeb01a0b960ecbd5e74fad7f3aa6f9f0275c9eebb7698642c5451b47aafc0a84198146ac474451d14f06b7d6d6ecdb28ead3f5a930e45ced3f6801a947dd3c68f649cc809cce19458d7fbb7cc7724013d4162a0ff2c738c572a0e74d5e9137345eb1b271dcd5ab9a6761c458555eb319adcd4504443ba2322596d41b363f834e1960026651809039a655d752cad9b9a23ca04c726d68239c22f2d0fb1910a620ef00c44641f84f881202fe526c0adc164a354940b675426b2f5be3d54d2c2a10a836fefbf56470f172114040851aa3dd9f374356678b8807157916911bba97880bacba6cb5ed7bdb8f29a6045b30965f034c439cc8d17cd99bf57017cbe273efe10aff81c9bbf9ae32f3368736753e043e1c50fa2070a6478b77f94fa5ce48adf2f7d62278f572d12116faaf6011223517507258b98f8ebaaca6ba22f1a39d2a061c45370bc46cae253bfa65202bcb585890b19ed957bd9bc52bba76f68cfbcde52157a8ca4f71ac050a3d92bdebbfd7c78316b4c9f0ba509fad0235fdafe90056ad115dfdbf08338b2acb1c807a88182dd2a882d1810d4302d598454e34ef2b23687d3fec3bbaab7d44acedb100ae85512570f038323fdab54b8690314495b412fca234dfec0d7ca4ffe9eb98a4b784fd2274e7482dd77f82b6d4fcee076404ec0e88251df98b0fc80488007c8f2d7ff774be4d47975d992fbf8873cca4e383784938fbef8bbccab1fa9413a7e997dd08c1560c7e9b5990850dacdc14439b998052b99c9dca2716268a120b5fd97e06f8b2420a355e54cb4c49471e0f0e12afcad413f26fdd545cf05c0cd2ed8769628fee8c31b40bd6b44c1a6223022bd22b20754fe4acedcb02d717894f991ce059951e3c6742c865b24c2904d238c2637748dd74599e211572a364926aaac06b53d1e9589628bd8b2d161d3513f8fc4bf90ab58a3b8ba2b9121cea2e0b6a9a93b80cf8eaa5af14cf8d709ffdce8900141b30a59a71bc973f4c0a52651a1fd3dff00ef2f97c1cf2b93b235765eb34f745448054aae37929308734433f7f1292d8639f808e03ba81d29df7ec7453410967dbc46bc5790a80122a6366c5228b000479874ab022d0e9a11cb30733ecf85d014ac291f01bb6c3709f5f63feecd145ed9b8df767c1a552af21214fa89fa01c9bf8436f35b1c61bcf4df0e1f3c32e881b2f7b2fbbc882e38212076ddd55836dbe4d0ead9b2382afb99cde88aa91e8f1159f179cb51fafc4a4582e08daf4e779f0b1edf22a5932a8b5f4f0012d3c48aa63512ae45cae741e9d5c5ec9a5651568bc8ca6e6eb3b1e2d4cbdeff484ad96d88daf7bafb95e1919f3855e5748915561a7460232e5b28e67045fa408b5cd1aa61b1fd4a6d215e5dc303af85ccb5fef8c3b47c97e21a4c97d6842d4e6ca831c3a960bfb70b1bc2190dbe5f27d34b62a12fff8c371a5fb1898fdcf4a36cab6e3bc86dab9b65e3c165c7ded15648d804f1b7bbfb7b47b9dc3e04d6ccd9fbe50b85571f4d620df7b09699dba29b9dea4a6ce38056fefab74127cdf8224c9ad38e32ce1c11a553e6345dec3b4f6232d0a7754bd33b1c93b664c953b7a185d9f56ac6b5da94dfe83db11e47843434b849a0ad592af46ea355dbb52eaba71039d925a376e1436c2b4cab4a342cfdad9ea3ca67840e3f6fba040a5dc73acf762add437bb9a6a9e4adb1a7742acc0817468d895654e3588a485f7535a5eb77123da04891c6c134d3effb2a2ea3b7e01c404561dc5440fc68ceb690df53442a9ed290a998569770b45297a7dc279712272c89e87c0abd8765cda801bd57bb76569a4ceaf1c1bfea007605a4ff3ed01ab26bc981b7d0af861bb5b23c421be7d6e3f523913090911d32dac3a62a41f976687e72d2025e9d74f52743a510282fc8c163b310c75bb166d5f1502fcfe9899193e5143e0dfd0dd08c92fae0a9f519c8696689fe388ba773744a49a6629df718df302c3a1d4487253c794653721b2c52668e06ce1698d9af68560eae84c7c858a4d0396ac2bd8fef9f4aa4820af2edf3234ab7e4b41bce975c952dbc98ff83fd8f45ba2490d09e9c3f9793f0d724c5273a1d2bf6c37d0ca7bb98053531bda063e9112d1bfa2629b767e093345919486b1585c168b7450a7cffdf43bcc18aa4185cc310a58116b7cdd2a630a11358ee4b401516aef1fc4e73a3cb67c7daef15a754cbe345a83acf5bfa68eaeb986c3d24343baa5e161b4f2841eccfcae0335b8d6bac4390e1fae6ce399920585abbab928c69eaea962a930754d40a5a74201c370bd4800bc0ef84a12ac78f9bccdfb022933056d8f492b09d46e1a5eaf91dae30bfe5471ac7712f814874771a8130f130f32f7cadb3fc0e56b2c600e0f184a806e24ef74258385dcb1d107548fa67d56a16a7dadd46bf22c002c1c9f1001d80262d822f1715ad860b133c08cbaadcd31a9849efec3f648465c1955f8f8710dd1afc2f4d0d62393ebdb547b007151880eed2763a5f0074a9b479914010f926f551d896df99d073fe4f8dd4098fcba355437fcd28aa3c78193895460a29f8c88f773d695550d2d63b5d075153ca20f5c6b4dabf696245d7497e9f441c3ee87e01d7b5075ca70bd87c52bc504d4ac7985bbf7dbd4afbaf2ac0d301ebf4c45aafd31fba014410ce1337cd1741448621f39acff3476beafaeaf5f267ce325ec1d6999bc6d7aa32bbff0428a2b4d800c2affa62c60e3ac49b807f393b6b4372b09acbf8660b0d6137f457f1d92b865f2c160114504235fd1393b333f743a684a964c092121bdc40c4abb9b53505cdd5c0de35513cb3fc18e58d486f25d7ea190ebd3e15457a9536048d9fef40e42d1913510da5e5a3eb9ca3e5953731987cb4731c9aee8aa7d6d55a02711c873702ada626f08ed5c282ecb1252048b515eccb58fb4d7a6c440f9357b2d3a9628f0ce7fbc89488a77050adbfd480002ad098e222e1ec6534afadf460074e228d4caa7c86ae500fb53de344027c2afa0d492f7d8358ee2bae7b307d15883724420049cfc950b9a0999ba9442b748792c6f00f11ecd8d93a24174591daae250b3b4a8946564847c7cf1a2122bd662c670255c633b1ea241d20044bd741f1ae63c37bd794900d7101c029d9641ab99fe329fad34784f555413cd2c1b1cdfb29ba9524c32f1908cbcb175b308ce5f74893b84fb4e1d892e342d50335b5e1132d6c1ac5ca7a53d2cea02f1ec5018197ccf537d4f9872f3b64ae830616582dd22014beef5c0ad2f3e01d81f5156680237394132b0fabeb674fc0c15be21d06c0b8310bf1f65508d4a69fba7e90305422f2dcf4a265c4bf9f0b360a9537790e675c4d8c8e37ed77fd8893330bd3d3900ec14c36eb9a65fe5b3d8ad9127500973e62c6ab048f38a2f71cb4862d3ed4a64f457e64572c043a244d1bb7842928439e823902057acb1c29c9601e735fc8197d15c007858933f572b085204ad274963021110c017919463e2532764eb5026c10b8dd9ae73059a2cf1e33add6ff5a017bd5eb337908b7b38ca688284fbd3810928513890ccff9e4a1dcc3aac90e6d17d9f72412eca80ad69dc3edaec6f6bd998b20fe7c56a6a91d9372a1c1919e123bf32b5824cce5a731fa03df7474e0278963131acf6562cbc00c865a6cb11cde002fe903e3aa3ff15829fcda13ba17fa42a2b1e50cb962f67e857e5a16b80944e718a693c9f5159dbb960579f706fcaa67c2a3e9beb3459dab96c11d4a06f1db5315ea94524e14e0ced6b41ba90c0cbc6b5b5f954ff37945c9a8f530913e4505f6d02b921715ac8f24549f5ba409d6a4bfd55b745aea8c736b34912066cea15934bffff982dc4aed3ea81d9672a0c8f7f7b90e034a18edab12d21b79452865498f3dbe5710027e8f8039b5788f61822a858f1dcea80f1b41330a0a87b6dc2f5b78e21d276948c5da9b920d6e74cc60b0fbbfd132ff2da3fa4e34c4e8366a5e03844562e6d8efaf72e3497be4ad22032fccd3eeeca9f4f62ae6fb01174e537fe633c04601f997a9dce9b88767a332d7fb6b63bd385305b0577fc515a159181357f9fb2d2545b1337d2167b683f15f5db879d7c2b264d031048b1b98f2f138a6ed694e9ebd47ccdae82cff9fb6021812cb5aa8a5f769d516c69b66f1a8a125b92ae44301366a5b0e826eb8997a7fed85c8907ecd53dc94cff2234fb61ee37fa8750d70fb2d47ec5ce0695b4a4da5402514bd92af74378fcb2bb53e6ce232a713704740e30e4ae13486af3018ac2cd08f5434bcd2c4f536a6e7b3ab6c7f092c8881243b6f65fdea23f992df8b2270ff12eb9825cdb2b029d19ac12f6b61f180564c16d8e6a0cb57b99dc6c2182d1c2c5e6f4a95f6e9d2c9d9c94022b02766332b25a1a1ff5b5dca5407bd80563878f8d043de65e4c6e7973e07b33df13be1c565a2571ef0020fa281abe982bbe131e5070dc61e2dd669326ccabcc9951beea7a436a9b88f116b80d11ecd51bf93b161612194472894c1fbe476bf6e2244076a55771c072315fbe5b0c4fb65e7ec81fe7d23bb497b8eac8443b02d941f40a67df7d81063329c3b31af22d647bb381e3cc988cdbd8d20633bf8fb99c3e29e666309de49855400a3f53adcf06fa023007cc4c52e1bd3f690b372bd868612b9a1ba1a0e09c60ddfb0b0d247dc564d29b36f0d6d6eece67dbf6b5f7a7643362ee2d396cbe3bda6a60bf503f7fc9408a8b163f1e602894b3239c3fdb6db93b37ac4501eac69c4d4eff0324e61c391694c84fc10c38ba96890ba7e0bf748e01109a0aff023fe840f1a07d92019d3d6f571a8a7e89a5ca5c5259bc9d8b020c0e5682253d9d73463cbb0dd8a1784affd13b496f7f7bf0816f77d6858027605ae9722a3dc3a1a8dfc8140dba5a336ba4c7a81ca5cbcc6206565e4aaa907bd6a21aca5afb97f827da6c6467ccc31b4857d6065dd56a62418299717dd3d56fab092ac8dc07c3883860b013e4b5e716293e88bdd2a66527d51cc11736a758ec29b9a0d377084f3b22991d894c1dcb0d5581643544c1c30168fd55b73fce20d896da0452f2a641f72fac3a2e67ae79e91549f2d77acd8cda404cddbb5ef1351d3b93dfaf168aa3a6a5c28f6bfc0ef890b1bebb093e73c899a632e28a5cb8a0a1600db851ab5c7c2fcd02a5a6d5e550ec71074634565b8026e2d7eb8c00ca684e4d7017a079c3d57aef950348b8dc8ae49c4d1bc18b2cbc693c62802914d0950a49e384044768b56f53a232ba6e9aac5f7cb7c316a58e824afcfb29c95e7130bf9d8e88e5def324f64052b863bfc8c147576ec59d6c2bdcb169cc6fd4a8564054929aaaab070b2bf700cd1faa720ece837699a9bda8a8d186ccfad9b2b826cdb16e2f73be8858d05ad93aeef95113ddfb2161f8dd20b069b16db0f0cb568ae0be79746a8729841d0714c1aeb72280f597a0ee39679de9ad1a94143a884c2a7f63fd92176cb4341ae6f88ce64baefc1f3f3a67f4c2e7fba4a9894e414f61adb58840b102d6ef12cee0cfc01e1fbd3062db38f4b256c68f574793878d895cbc87158bf7b42ea4c641dbdf88df9a17c4c653e2bff98b024dccdafce7a49f06fefff2268fb4da99f87bc0720aaf24835f538f80ed54c962dc0d4b0a9510f7271c2407599f8a44974f8578ce6e1925caa912775aa94878afe5228306ba59fb87bdfe3c6c50bfd2657366ea3bdda205b44c0af4b8195f00b10f1169387d0512ed8a967aa6c9daeecd0d26fd037fd42d09ed43ece16520c93003e4e4e7079ea3222af3a7513363ff95c5ce9b6d7b36039137c6491eb6133bf468a3de5c7fac18ef461dadb3b5e26d864264abc0f950f014cf9af1b734c1bfc4e7543ee00eb5d81a861d721478e09f682df3144523ab5d5960c7cef406b1bb6a2801ecb9dc434b6b91fae0bea3e5ff032d80c0441fceb0299056c61c556b99acd2b1cf2f10ddd9ac10bcdef85f77f41eeb1596041541534c074ec3794878bf538d6dd18cd30ceaa3aa6c5309d420e6830eb97ecf2e8dac8a6eb7ac51085f9727033cd9164c56e6190811293a29673df83f7560eb913925ab6d9a69edbca887efd926d017a44635d7d2b347d387d46246265024a168cd2476abfee1958ddcf975ba339cd502613fa2af5a951c15f0bb356a52b339d8d213b4d1ebfe91a382547f4c6c26998f316d45470ffb5cfc42b18cb483f3fb0bcf592d8669a728252200d637d856aa723d258643d961dd6353ad15abeccd2f294c5ea97381c4a33b456542247f1552d40dd02f4bc1afe573a91596f894291c59d18af0403a3e4a0f72eb8abb6a49d7dd2ad70606cecdbd53ce52d84283f00bc4e745c9949dfb65c631fa78a3a0db82b41ba0d41d08a3ad2d4acda332c208449215f7fe17b0e43c8b0afad28529b49b8268956037771afc26a3edbe70585b0feae40855727de11784865361080eba6a6e9a1d74fd2418f4686319f3a34dd0b4f4dbe0974d0cdb3dd92c6dedd556d736a1389fd6171686db1b11bb0873aa4e7ada82e78c4f63b8f7b384b03e9309f24943ca854f2c554dfa66363ac68a76bfabc16186fb218c628d3a17851beb30f3e97bd836a7e4ea53997259fef58db90a8dd30123ad6b8fbf47956c524d85d2c15f71eb1aa6e9dc820067026f5d277b176938e9286bd472b96ced0c809d08f746f34e8a9914e033c1766cbaf5c5fec5ce8618a1fbfb043f3746697d78d01da769ec3a3e1bb874f8f744a907f8f7ba9e172e9ab20625a4fe201b3249a1b16beb12945c8e085b4b320eb34774e0b9040fdaa7e6a3afb35cb55e346ff762079bca2931dd02c8c50de9ed096e8615d4841fff3a25fc606bd36ed8d949102599544d970ce422c3be63257c8e45c7ff10e1d66e2f7f468017b2307652e81b51303f7b426d9a77620ef5efa38cf5be0634c33c0fce1b07777da00420e673a04e94035c139b27880b7c6a4e4a49a5f3930ad45aca5e22caac6646f0bede1228838d49f8f2e0b2dd27d26a4b590e7eef0c58b9378829bb1489994bff3882ef3a5ae3b958c88263ff1fd69fedb823a839dbe71ddb2f750f6f75e05936761a2f5e3a5dfa837bca63755951ae3c50d04a59667fa64fa98b4662d801159f61eefd1c8bc5b581f500dac73f0a4240075d8dd817e7fc9adcb387761bc52941df467ffdb6e1915b1c6cf07e38cb0102c611983d55e9c8c4b235fa31a4f43d24d969dd88217a3718da56cb21ab5a938976369410874bb2d61258c81edc56f85138a0404635574ec0160596380280a1ddfd12a8da17d661d7e36519c22bb203cfe233d0bd5a427f5cb8c2774ca405d30745edfd216c527ecf0fa414a7fad205a6c16ab477f90172f2a7d596e4f9b1d00e3411ba70ee87b0c77d5de254af7ca7dfbc8c15fc785dce8dcd861c88694c41fab4c5084c053da0c515d8]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 2a470de95dba44b48f612e8f24c6e8b505f79e755b463aa1f60be8bcfdaf4a5b

tcltest::test Hash_SHAKE256-3.57 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 00e183f8f98816ed59f182f0b4ebad64b9fe4e3470a14fafc0ad779734124574ffc91f2e3d0aacdb7bbe7ed67a37f411301f5eac10ae63c68b20a093d76792aeef1db6b1dbbcee04311127f2dcee39021c200e84cea0076aee0e9b595a5a4200d8c591a95b08a60d82d2c66d627845de85e8a6e532e00443ef5db11245551c11c3a8f83d46559aa177e9a36e943ee04e74616ef6c5d422fa99f627e621bfe98ab7b03295220a9366163f061efba6d1faef72aee00ee52837f1c148fc74007112bdc489da7a91590469ba37a51e19e2890103adca967be0a101a65b7dc9807c52dccc4334d351b42478437d2a8500d9a4affdb4dde3ff10e1d08ea790a5a6d2f21cb1a9cab7b26c6e49c322d5b9c17ff203460b407fd7819f665f755e92dc3a99855903c5ad1c4889e7206ccf41c69c1c04c7fa1cf26dfb82cc030d0f178a7eef20ad994c3ef7121e5744a440a575f8c9ba68c999c22846320960b7cabd16649ef495b288f0ab90d4a21511506e385aa22e12bfde796f29582560bbb70ae9b54b09fa98a14ea08b54d17dfd2523768c4e67ab25149eac6d9c29ea60ff886b38a068c291bedd3fca45ec63aeea4c9654766d1c4362ba46daa51ce5f0cabf04b74518d7e60727ee1750f9ae6dc572027bc2494e61f154a5381c063bb13f361df8e2211fdfa5b316381d024882de1c21c9d90228c7e9f4314fa8efd3ec87751cc51e8c84c3c00920f6530e18355ed25b0564a091bd712352e7f2e095e8c9046be4a160eddc7fb272199a2606ce6d1c18f90a2c738ab16770c7a1e069ef2e6c701d14a541700b3576699c51fa943283c06b74adb577d24bf3b85ef83747de34953a1f646ac88c1a93aefe97dcd0d68ebb244a2b3fccfc544382d12fe73900e4410169a44f2c29ea30af6b0094cb80c672ec33aff9d1560cc8eda18d610dbd04db3c9b6dd8e30a2cb73589950bca59b14b8ad73fcbcd09faeac1771a8d0b3c1dcdb15cc7ed3758688f08005d271889d9afc8dfe69d0a3ca612c5fadf547ba6b67e2955bb766e3b2620f07960d1fc37c6076cf3a957ce1899a6c2d3e39ca42258566b2e505bd1daefd2b59ca7f2bd8cfeb93fba92e162c55a1080a92e4fcfd98abd418e8f84a85e4a0d1e103970a4af0b2f09dda8230e6a71b6c725c95344f2d41b711d7eda3beec039f47e1f35f9c875cf9203f305193067025fefbb924b96bed8c4842843d1b3d8beff8d5f270401c203a1d57c70cd3ec35a0fae0cf22cedd15c026b92a8b4d51a0407e603300c807c3200fb4a4a70bd0d28a00ac55d2e1e9410f379c6f22a7b0e74d43012375b6d2ac3751c657d4bd4ced3dbadedba9a52905a5e57cb077ccd3d742d14952337f15520c9e0d6efa6ac8cc3853c8cf1b8b04ba30dada9d1f2f42e6ddc3a93dee93484b0c4f1a48ac96cd2606962abe9d0614f54c6226837d31869c8a749144fb85d3fdb2df4d734fb3d25124ec5508c2a8c24d3525e1120696077eb57ea215eee940f09ce9478d785470f41fb0d86c10e5a508a790aac76faf5df40b4c4c0f3d2037aa26d778e5aafb1175539e35270c3f35ddf02ce3f20cfff292d8580fcf6abcf0a0ed34521a5c1a4c6b6d0efbe81927ed33cb751d40630a5de1c94c5da4fc22347b6c8a73aa00347a2cc88d8d1ddc32338085e3c7210640f8574a73c64e75f25b8001344df33bdc335002946936a9e0c16abc0362226b566a69d878ca1a4c9fde5557ec61b46363f07b87ae30d116a5ef48da5e8eb3069d2c9fffc5e996f4ad4561ecfd2f3c1b7e49e5d445446bb71445b16d5f9d516c97a7702cd5a553128d294c1cf13718c88d984584f44464ef9e4d2ae1712e8c01d87370ec427dcd0ac1e26a8462e9c8ff147410f635916b44b66e1bd34db2d16ad20928ba76e36361ee19439fcce7cb33a565bec483bbdd3aff310abf5fbab01c06e0fe13fd66c49c64267deb8991adeaa2d5c56c59343956cb3e8e01f1b6a67a0993678540885f3eb6a26fe44377df98af5ccb5a409b1e0cccdf0c47de2733293c88fb8aeab891ad78059006651aded22d53170ab440e9e1569b0bfd6f9cd48e223a30a146881a8d0ad884ee78fb3a0baf615f1a3ed62b690b1b13af1078093d5d3f9d44fe774841f193c4f8e9896fc9a80ff9f53abb61085cb7a9b97b595f9b300197f28cf6a960cebfc6b25155ee80a9a78e2852711943cdf944c90ab1364c6d18c7464c96bc6de4c510a72ad144b516c0722ff097b2afc1685b3a49002bb546fd91ace7c80fcdf63c2943f09bf0fb81f34c78af8fcba0f97d73a9b0d6be6a60288d82d91b0205559d77152d0671b87db8739ee9c9d2cbb8b11483cc955cc04b1221848af041a8955180a73ab145706c789e1f39e6568491abc44506dc857b5a42e41e87f82d2c3800ec56c42cfab7c0cc12561a65d56016b5f989fa0cc6e030434bbd5a834314b01400b043c9fff33d1b76eff5b8bdf2aa782abf10b6af934f9bcedd7d3221d6801364502428d3b713ff4259666f9e90df5aee50e55a9e191aa4f41b6a8537f63a879d92ffba0477f7effb0ee6eaf5df37e69aebe27920c6240741e39cecf40841d90315310e00ba5b56079cf1cb324226a3e6ec8292b63efe2b4ec2aee9e46138903b3362855702a0da0e601180f24e3e0b28df5027ece7fb996144fafc97b58135bc99fec085c58ad46614b09cb477d084f730d5b93365ceda2fc70ba56c69be41fda570300b875bdda517798ed743a0b9c89d8db7081cca5600d57b6500e2323d74d2717456dca67e51e4b6c7f93601121351d2b1f99180959afcb4cbc3d39f90c8cd5cde0629fd1ee2f902e888b384167e0a6f2a8648842144b9324a43a258e44fe29cfd87e3c237dee0d8511460ac4f5f339d911cc6378194778e50fed2f090a0bedc535abe8861ac28c1a21ab1ec253d49f8864b8f3d2f10d4238063e9f93e31be75600d0ec224e13d394c0a2bb620aeda0a6a90f7e792303b9c49015bc535996e02b40d4901ea04aac9cf6132acca1a503dbe6bb4d953793a432b55acf72f3e5a1ecfda11ca299cddddacce6b429a06392d125a3a84db624cd297df520173a6eef403f1ed8d8bf052ef549039fa19091132d6dafd6c9271dfa52f1cef76bb49a95cf0f330ce69d5a69967653335bf8964f9ac7c7213212e8f45518ce9c96ebd1594274c8fff4b835546459bcba8060da0ebe39d3cfb0ffec83d9fbdb56bf677c054177c5fa2b9afcb908fd277a3750c51741cebb296a77916e86a0de6f0eae015f731f1245b2ca195e29677dbca951bf34cc8b677789013f7f0511c02dac4aca3081749828b2d0f20b70a1a4c8fdea302b077ac00134265e7cfe5667d9c1c33d3f127e3deb5335f18a84b286e65ca480c599a2ac0e946d562e1875bdba749fc456cf46ead5bc807ca20fa20a5eee0617ca2b0b14e8d15e905dfc78a91aee68c63b60d3882f1639fd1ab6791777da985d0264bee1d5128172d15266123f57a5abb76c2dfd4188e8dbbb2340977b49e2bb35edc2f91e7f5f6551c148e272d6dfda929b5d33533b167e4dfeff71b0626d972a6d1f460b417fd2a7f12500fb939dbd94976a10ad574a4e98eebc8d5f4ec05aaa8ddeafe380691f998b055422b767bb85055c7e97030db3639c81d3cf34636d7df5061bf063a6b6f037f1c62f6ac53c2c903c645867e61578b0552b4a3ddf366b4c9f747813bdfd739cef3e69d340a852de11a939ac5ddc9dd1417d1691bb1f3c3ab2a1c4b8365eec630aa41a1b5f68bf97e33782fafa709ba74bb17c577f8fb769458a1c799a3f213347e08869abe23b64baf57b78463939db7eafc4b8b4eea57e6317c77e700adcb5b0dafbe6ab7f8eed9fcb6b4fc8a04115df5f36dbe1a3ce2411300ff04026e3914c7bbdbae7a77fd999a19ca6080b79fc78a91ae98e18fa0159bd3af793fbfe6e23a9150ce7c3d8d0b15f54a68fe3ab395076b70943b4f1bd42a691baeff1f7f43e4d4a0434395f7ceeeedc77e4919d746fac566489df7a01d4d35c62df7095cca450a5cc5573dd8258347c40907b1854de353f21e7015f75182ce316e8e09f9e5d986e89d2d7198df71a7b2a190be381a4f7ba69e68266c0159a6dff94a9de11720fed6634cfdd43d488235c09a8c8a4c9dc0f640ccb588ad40344446a331aceea9c698901c2ef4cf667bafee7b98d6556cb8539e442fc7d5b51ae0ff2e71a7dcd262c1ac4181851659d893a3ca8fb6b52ab6511f3501c3fb46af485b52ba8c524977c42023820fa2a14d8368fdcda5fc566f713c35d7e78e7385ed03a688a4ef6d6a228458ccfee4cb2ef1a68bdf2e8b7e38368dbd2ebd1faa13318090789c14bcbe6f6147bedd6d361150f4fb30aaf310a5137c3152bf1f78fbd84ab6e6dc62b5e8fd1f86d4159c808933dcd26ec5b3ac3a9a904900682e5e9423da707fe049f77e7e378ca9420328fb1cb697e5e95dbf6d2e625aa4429cd970b6b85390424aefe34541cfbaed219ddb7e1ac2329051b8b1515aecaac90b6806034ce6b46cd61dbbf4c6c66571885dceda91d7e1552026aba5e275a085fa88e88c309078da8bff6d0f2f174579a7f739b4844f5e925987c09ea19c11e3eaca8cd3ebe74a15dd037ae6e328d75ff0e8a08e9a9f16f25e6a749e10c67b6d3c8b675ce761a4a939c87a3e9b71a7af03b0a7db2d5db6dfbf3d4c46b86b49ac906a1c99ab76150f22cccf58b09812f140dd942cb4f19ac4ec7ecc0ae111091c66e4f11cb0cb17a2487f0ed7baf2c59148ce09f5d9f15f4c76bd586d534e3627207a99588fa7291ceb5d9d3e23181c397c007dc904e350c0ee6795e067895d677d9979cfa0b0c5e9bbf71efe718ea3446b237408be3e3beca40be8f69638eb57aec027048c6e7a630ac9e88b3ebce73c969561477e686d0a3828e63287f36c72649d0579bb36b3438844ae86d329549c7ed4da07bdf850b43b3d0206854f6d320f7eb9a1b5b01cf594f5c553e76a67ee847052cc0574a374fdb6c0f546834a313fe3981ef450f3e3b16bc184e3d6bdad57e65006ed63c1c72024978114659fda567a45340f9ff4a87e15279c4124b25369a5464ace2c381523151a3ca73ceaa7e39135a350037bbe5b606bfc87aae26b2a4bc9fa205473097706bd7a578fa72477c6ddcf7e12159fc9fc03484fffca6f2a384fa79c630efeac57f5ecade441ca8389c22ad2423eb75a3681e1d289e6d9e9f94bd59ade787f33a767e622d1672487687748052a73bf7cae6c6be7dfa435da0d4306943d2c059d6368095ebd73ad03e161998f2140f2b1d22748d8779f0d7af2c9ad20f5a61c4a1a8ac8aa2ee3de796315b1c8cd230b9a30470b2cd833bb5d38445bb9ae734dea4b4496ad9c5433688c08035a949664865750156d881ed9f15c4774d6ae2ff4ce643a15c19c314651babd10ad0e17880695b70a12ed9ce3c7bd479b009b18bb96f3bfa89e950771b57da96c48902300bb9a006ba59f5a635109c930bffbea0cb48869d19d1d435004536178a5c14548e5d2a08cae13b3d31d9040c86d270052a780ad23359b716bdeca59b85d27fadb45be3c1f84c155bd9e0f52e4b0c2e847f07b1e0ff0a62e2fa55106cdc72ab0322bdb1786d24eac7d52c553f7f3462e372fe6111a66b3b615e8660d0b8c4001e838b7e7450f0224accc50e884dd373ebaa6404ab5005ab5b92897b104151e7c57dcb31feca3925ac67b40651db70c964d04181f7245e1b973e664b749ea0c6c2b887b25e03865ab54d0027e25193cc168b9ec03d4b00f1de0923b743f83a06dbddc6e9dc225f2b2c26b15782d8c5e4c98482a9c5ed7397f89bcaa6c776a510d99491bec0504cffdb9cd0807a988c794463f524d6303d73ad9d620246416b4b8384ef1951b4d63f8855638913b873f350cfff19b93fe8efc5b7f4b20980131ea356e8e2d8778451fcf9755a9260ffbab570a970b740fc710790879e585c26f3ffb284019dc0df9eff310bdb42baba363beffa11165cff633cd123ae7bfd2b31613ecc5ee8b86e8e59a52ff46aeb2bcfa9f4fbe41eba7b2c2c21d0cab98aaa3f8fa5c7e10186b98ad1fce88d511edaeec926b2d21983f7349f2997da5b2c2c87518d7d732f5448f830de3f8e407950f9612e29c14ddefce35d917fc6a90a3870719ff7fabc47a4413ef53adf7f24145a3ab3689a03f411a12d009176eb4d5662b5823c5fee8954cec3e6e4685648ae771c5e754683ecbed6d91ed4d2691c0ec5e7de548b0e42e006875c42120d0da7bacfd75aac15ef8bea279450c36ba0e902cd5d48656399d15051fd5ec3eb9a868a1ac51fb301250145e00a0d2f38006e7f30a51fd437b7ad16eb713f643918d34ec6d1ca458eb5a74fcc271400196526a5d75ee1c2d0c4ffbf1b61edde40ae17709ba2654906c80571b2946c1c56f797dc8c31971677e74cb3aa7571174585d85761e1f7a6af85a4115bf91d6d37dd4b8d15c548b874481e596054d2f993c4a16be0358946d2150b9990fc30d90340ca1e3bc4fc8f0f10fc1b04a7186b7194f714e0472210b69fc26f1748ac4a04479af9c6d3bb8590676f6060154b54261d64ba28becaeca54c52fdb88399a7801b45847e9c8e813e74fe913a47749efb866fc5814389c2e54442a93d56ffd8c0e353292bc77c6c636031145be49b3038f8a19db37e687abfae1add6c68e7c40cc84a4f94fc8e2c455290528b95c6f2259a80aa86166efd7bb263000f625855acf2b45d82e2cbaa2c73a4b39102ffcc09959655c2b4a431617aa47aeceb5b72e78818bdbd213bce62ebf4a037d24da62e106b042eff10ffb92b65b2ccacf70306b3ffd60d62e6812ee1087f43aeb968da34852093a0bc4fcaf02f12764c34f1519af0103a4dd5a9d77d69b97e3d49fa56296e12b93eb00addef8801b4741a22106673d30b890f2fa6e99eb7b0280744ea16ae416882f3163a50fbe74cccb27f8b3e108749bf9cfce34a2fe0a116fb2fdd23cb1468138c5d293c0d2d07fb03f00a4b5094bc9685f7d6cba59b18b02ca1797a4ff5809b86c6f2db4839adaa155ed4b4ba632cb7d107c6918752df9ea2830440c24b7abfe638dc5433740680f1af32a2d75a61c98816fdc75d6cbc8765bec7a0aa7d1c29b69d30d05646d9269ecd6c3d2de22275b30bc193b05178137e380ac091f52f81fedc37763a18f043249ecaac4664396358cd5b1d0668dbebf4db15c8fe1a7a6ec4dd366f665011808c0c9318aa466c3a8246138eea1bacb7cf8e2fe17a54c799128878e262580585ddfe11a8dff284a2365d300ee1d1b51e1738a1338c0bdcaaefc544f8b79694f91f5b8a856fce49457efafcc475f3bcc9d5c3b4e5bca78248647ce1d8ec7485855b0d47d6e24482c86105bdd92de78a601116ad1f9290811b779598ac8958a2d098fb90c4bebaf9d6e867bc759116e78ad119d70b972fa1cc32f8b19917acb183de0dad778d9a7415190641be2ae89aef1fb479ce52eaaa039d8d74c91dd77b45352be516d64bbc2dfecb93df7fc66d3802cfda934b2a6367bf3d28642341c8bfa63d81ca223599c79f9efcfe1916260d835243800b5895a1a0ee1791b1526098382bc9baf8c0d28b0268c2447e418e15a825fcbd19da08594889877950720a79f4dd050fe0543120310f2ed838b06df97b314d73fd1a8436c0f7c1448709900ae03c7df062597c2f347d88e2cfca8b61045c7eca407ed1e00f1e0d19df7fb8f2072e798607377c5f1198188cc9f6aff34a8fd6e96970b6003de8b220df3c4bda6e9c40f85656f959d24a25fcb09ea35a55b39ef90057fd3e533cfa830fa810691f6f1b6fd81fbbc47f7af95a0b292d3c2dae1f218e9b6c4158012b67f72cd148218d521313f889491e10dacf63ff1642db6a9e8a9aa3ccb254218ef6202e541e7ce02d0b914a2c90b9f311833f88251366cd665bacd9e4384f836b5811186294384ff380da7e6d40570de69d272b2458d6c1bebd4ca47e7c520f0ab55250c3525ec1ee9974fa12010145a045a353d9b8332dedd8036c602564adb2346c403ffff620647fe928e37dbe8389a53c650edc86f83cd3589a53dc8e45adfde64e9e4306539e59c16faa5996afe7e279ca896bd70cf3d7d4941f49d7bf413948e4a7c89842e45082362d4091b20327e3ea130e2c505a0bfdc38c134703b7101b692333b3d57e8cb6e735d8b872259a002d736d8facb8985e8f62e3e6fa57a9e545db2f60f4b334e4e98ac912d895635bfc732f070857a57c616860bd8a682d31df9462a687cc7195a4f4bca7cc9aab79bdd9fc9c4c7d5be19f6733d39c34c384a119748d76116a50803b5980377d9ae4da6e7e576173e214b328033019019468f2310e1da9ca489de52647a4ff875723b9fa5a3f2d81619d037079dde718c8643aa3d85f083f32043b7f2f1b0efd0bbec4453b5d99ee0005f90a3de1f0c18601e238795a7cb8510eea0cb8ee4a2add3d6116c7b78d04e9d2fbbdf6441a43f6c550b89a16eb7ccc425a968b249d55f629fa36a658f209418f73504c0f4fe8413aedebe29c3fd4cc29f3e44fc5eec57d0af66e8145ae4633c1c88ce94976f68fe82198faf35e0879491ec0adda24c39b66bd840087ab03e4f2623972fa77b60756558989233260fa2d41f04d6a299778c7b740ca27cf887fa9a91f922a3a70d20cef843835a123785ac63dd67de4893bb44c6c882d041c2a6f0505efe2a66c17925952af30959b1a5a136ff11b3de10db6e4cee19f31080dcbdeb43129a5f1ff71f9bb951cf50e09b3924e454d1ce61554e7307e873e9552459cf501081f48b23039869202a9c56cf0a9a17b1a69e17c16bd5806ec12081e65a78e0786faba5757807d50e998086c96c2323a8b0c1a6984ce0e22d797ac9cb46747eaab1f8d176e356674d9ac1f312f44c72ba7eed90527821c7a4fb4c8f1b945ea527f760919fec20aa9dacc51e2439729f576f56677864249b55c51a348fca73de90be778868e8e3195f5e0e7a858232041000a08e829745c7c065786c706f60a54565b2085a701a2e031d129aaf84f74b74e16098099821e7656acb9965e9b173e68b84b3fd083273397855f11aa85ecfe67ffaf665dd2574c533984de8cfc2c4d4ae83fdb917c86362de5d104f72d51bf53af43c3fdcecea506e62fc71983132903d1448272548890fdd9c7ac65ad6ba11b0c0cbe02dc4d2a759c01788c97937b9b5da45cfc73f5e90f4a88307e6e024dc6005480f3669a83aa41431a6d9f73eb1b73a590b64295eb691e5db9cad8de6a5c72613158d37e57adbe3ed445057c208afa91472927303c153f8e6fd054c6a1e6497df7ba8bc14e84fc37cf9b3076c3f0dcaea8db8b8d841b9363791848849a6a6feefd9ff62b1139e27932f788297b560045dc56d7756c810423002a1ddefcf3cbfc69927c8448d4574b26e1755cf1c34e9d0a2271b09b5179182b8f3c9d708645f1641885939b5b45f4d3e25fd9cd3fae005bc5c306bb93d98823ce0b899d2dc51315bb7921b0d893bd6081ae66b6d208b4f7c9333f714d0ebc0f6ff4692cef33aca502c0f6325229eef647cacc5485440205b62b226789fffc18fa5e06c4d577023b75c2dac7d2efcfbcbb1cd2505f4a32ad121278454e949066f8b1290ee57a5d009de795175fcda7db650a425268028c19675009b2a5b5bf20f15498b12922071c0198eecb01abc07acdfde301a955586e3c4d9d57944ad26f6bb11c56a95847b62a3baf8bc07160c27c5e7c062929ddd71a70fcdc263b117af02f7ca56c0564f69e3a9efea507d0dbf993d608f168647a8823ede86070c46a073682457a0fa705e7fb84cdb75558eccc06b9b007f8357f0ece3a234cd23366392ef4dfdb60580b8de828a0ff433f1d7e1deca675c3980f34d7a937f147a6970c7f9b1a98debf2f1667541d83bacf989642399143afd55283a703c957b864240a923f9fb773239a0ce2ceef4da04e829cdc661a77a6336f82a60f84870eb636bbcda8154306ce74f6c05fbc65df050618533ce81b8ffb8eba3c970d882fe4f5a6999d25417e06e45d69cf2dd15d3c49930e83a4365176d9b1d2610f62053688535fe777bbc51412c845e6e99b043b76957703f5d1d6e976f1ce37301e77f3184a854eb2b8c24027bfbc6c99cbba49b3a4f58384f3059f8d029adf18c36c65cc14759a7f415dd14bca3628e46769af284af0cdf8a4c6df476a9c217059ced2cd389593855d7e11a5721be37379f8b6ff0ed0a7faec01f0cbb33ec7e0e98483423e4f016d140d465e3ed365ed084fa35d78feda32d49e1b4264e7970f7976c054af0aabde6ef2b99db7c676fb1d56c16c11e02e476386a8d406fe5ba6148cd12b112d5a817415b28b635cde45bff5575460df6ae2a29fdfa820edd94cbfaefdeeef22d6fe2d5f7850ccfe6472f614ac3dee6458aa97d207e73a1bdaaa84c48dc6ce50e7fca2b655137a12d22aca9b094e41d5be484c086ab8ddf025686ab6c9da381f5523d9048ffcf402ee174472b6afe39b6563c9274e448fd4842d796cf953b4f7e71cdc2f6f35c23481df6b81fb895c1f15a41418fcb3db2fbda1bace6558cb40668fb3203de36c12522a48b1200432c895b237c4bc2c4669996d34c5551203629b2364c041317a022ba1e1e86c47effdaf373a12d6d75aeae039f03710a8e7c54b81f9f6c345756ed2eb400f287b1a2829d823e991dd9e1b5aacf40edf43fcd2415179a90a47e5bd10b16d0f9dc73cb0cc3ffc3336669a62ce6f4a300a0bccef443aedc35f605057ad9b6ece1054dcfd6014cdd70d99d728062afa87d927de851be45c2b0ab740a471504d36cc498277adfe9cbd5e9fdcd6c8840af993c0bafd8ff8cec953763c0c2479122e18cfb7867aa673cd71a031d2dd25847082fde9bd681e4c8581c2cdf78dbdc39d3b0e019291b459ef8dc35f860db66fd3ec07f22f6efddc47dec679cd75c56a6d7e2deb03b8cf570bfc30ed581fdfd40a1a055dba683e89f7b0a7cbf6a4390e852955fa41b89f7309041063b2dd47bafc5420b3c52088587d409048dae2c0b8cd84adb8b459cdb7d1ee8b4afb0d972993e2807aba5c8453c1d6a77ae1f7026f2dd65eacc462012b4b02c8299b78762ab60b4c3d00e5da81acba14e874aaa83b8d698f5eda9de2d66087f088fae68dc34d18ad81ff8331ea2433001af9c45a24d58369575cd019c0f6c72aef801f84fe4151cad01ffd3197]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 7787c5312475791d84a9885be393c27decf06cac2985e4509e2c43dbdd9f6193

tcltest::test Hash_SHAKE256-3.58 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex e11bbb20930251c5b5ad58d06c40ba9b7b00f5b508080933a33f954684863d1314364ebeb0c9a5c8a9d7cd9c8f456764afb9cf21da50fcfb6894a8d57da8b1258bc6c00318ec2880c2d11138801ed52b2adbaac83c27824bd72d2f490853cb894db4571655d1a29208836ccdc735cc97f54fcfd2b6f562cbf6f272caaeef51e762e95c20efe2dba983d62883edf0145017fe8666d0236522cfcbb87ef5e40ce6d34c16486c859a6b3cb08c8179b974ff98cf17ac131753f86aa14b90689bc42fa7c4cfb75624a9803afbdff0f3f7b54c81a9c9cd063af4f7cd5a71268c7a416ae63bcd943426ce91859d6af7e3119fded976e5f132f40fc502e07369ebea4a3e99985a088ff3d246268075bfd271fa5ea81db33f1dae6e0a111999800c54a953c7c3bc3beef37c46248a4770487e8e73f6867be051ced76f00ef2a93771e245278a33b54d98e963a87a52a31cba023c6cc9985fc56be139bd94970ccb5b284e3b422217cd82ce6c958b8642ae53f80fe313e18bab2e4ea38a40eb1514d7690ad8427b4da7435369c9eaa3e841dc36ec42e5d7e42efaa23eb6728364ac7d41259ef9b3e9734114c5a61650067fb95b5c0cadefdbd9477885e2c7e47e0ac33d08efe6405daa128f0aca9d0f2fa081b1d990da9de532ab2df39faf82b3a82fa94f5b86b52cc41e2ec3a7fd35c66cbbe6ef8ffa6692b38c5f123da7e2c82d493243625986c949fa807abea5685d2cde66f84a9bee56e461786c5d2f890dd276548f84dd49d5c40e008a8f341b66794fce9e612d79c43dd1066c7ed4ea07505d8cae339052b49aef4b8d8a17c374daa66a4c542dad4d3841858d03069a472f55471a0f0145f85704adfe4fcf050ab978e68ca42b0d645c3972588a52fe4fc804104d77aea81380e4c45730c8349a9e1dafd9d193feac222f595995389a7392c074c2fe06dd9891060b12eda1e697112b42ae5cf7157722a9a70a8425f3754840e11512987aea1fff0ecbc6daaf928b183b84a6d2d677c62ef7e607b9ada730dbf1ae55d1f4aa86363bfc7cd0d41f947af7076fa5a6009525a87660520d9bf51803192851df3c5c221eff40331890a5ba0170e7ee28b4083445265e8db7c5fd7ba1c00a768f220a69247ed16fc198375bd78bd02ac304a7c16a8032db20a7b27d6a4d8ceea8fe2961e8e5a0e58388d1e705a298ca0974ec53651e8db8ccd3dca3a91c2ff8a11331b2d8be2f42c3050dc2184fa27a60775e70e15bdfa530bcb4750ab654430c23abc27072ecf6047f33a36bfd9d8a6cae76904bc2a93ee0d4d267fba6aa4c4e8200174cae6a7dbc69ebd18d36ea98826cbd3820dd6ac451becf02e8578282fcc0c727c9cb18487f57bef2f8860a1346449aeefd16a50407ccf2cc7d538d657b62798a745376f4b1baf57e3a657c893cb8b81b3d08d84c77a2062b17252b825ed99fa5e8c216f0f81657d9df4fd278ba5b6d436d2e852c25b041a54246dd681bb8920073b178dbb70c3eac33bf7c50538f530df9f23c11968a5dd18b3313654661f930c18c0d0382ef125bf43f0abeace6e1b18fee5d9b4e92b3265e648e2843785dad3ecc5406c0318b6f7d48edf20ad491f49b9d6a37b26bea2a38657e2fb76e07dc67ecde540396026d5b6796b911dafc4d8969f26576684b43a5b093c9f6b5b054b9881c89c17f0fcbfb05a562368c8912e5ee86b2ef3a8f0922d03fa5a5e1bf9cc0089f069e4f1c01f8cd9a9c0d5bb0eb3d85878ea1350de13c4f02413964be1b07f8c658de98afb5c109d6b4fabb1c3cfce9857710fa50726e876c0b25c11465fdd3330f26ee434de054fa4b833d139eb065010ad2fcef231603dd81ef895ae41e225587eba26f30d32965de3b544f76d4a27a984baf3279ef5ee7341b200a4be560ae51b1779c051611b9db8783185bf60c52ce0fa3e2fd36f319a02d17aad3e008ce0b0cb05241258866c1fc6c16c4710d3a0a835d5913a96ad54499f2a5329a95150251ff1a6b8e07ed200e51b336f24f90ec4b4e0d539310ba9fe62391de719013d625b66cfabc1abd8431e69629e62de7d1bbf88843a0af2a10a63cf93e01845af4ec78b2553c3b685d0b9d0823b942bf5979df425a4e70b4553ea123e7c6ec5afd3ab893219ae47e28ffe7a1ab080877f1f984e40df91fe9cc23f2da524e22844d84e877e634905f568358fb264ef9b219cf6bb5d53d072ae3fa946513e3e167746f9ae8f9a5d99c844a536d2bfa80fe5f4006505686b1084b37186c83448394f03f426ef27b2aa630997980329758ad310fe74bf862c7f2504e014946cc936d4f88716267010e1cca153ddcc0a1cb4f2d838101415d967991c3c193c5088b80e0dfaa6badf3fe60df2212cb6ca66364a34f55f8b7d3b72e9e1cdbc49464f65062b940035db06602ee649ad48d11bb8e30d7f8cac261a461c3ddd2642b8e4e5c3389e491fcb2ff83564128a0a8803e1c6491cbdff783e8b3a17b27eaf0d10e14d1d60acfe1980552c53c6e88455e55afad2151b0ddc6eea4c5695ed19ad9b01adc3224f5c2cc2201a9dabf23fa18bca878eb2cd5db8740a59e4ce9b07004decea112c5ac06cbc00082909cdc2d5bbda76673afb7775169569a8a5af016eee4b0ceec5f6b341389efddf2aa495573e32ce44f7cfe47c1d30858a62518f5f45c51c44374bbc13fca101a7559d4191dc79970c2f6f2b345085b3724cab3a3b1b0320fac880634ad2b21c69d1e04de95c58d9a92b03d404793cfd48ace2896a38ac23f8c1bd304e8079570de79641c988769d0233b468565efd6bf4ca21055464692a266a2cac88ce9db97bdfe7a698267ceaff8ea96e91c96f045fee8e346167e23f6c0af25e5e86c74b9c01fa02beff11c988860c6e1c803ad06f6051a0fa08be69b2ea3ace396e9e145694f8e0a3dbde41856102f0614b07d70d6793d18510a6b1e0532a858250cb1c92e208c5af828a5ade68b57dc7f47e22224d7c4e6c48411dde8bea0a9ff2f56b3931533b4abbbe1c7ce34d9cb64146b89458339f157538b894daa3e5fa1cc50a31ca01c9dc4f2290451af1d696fc08a14dd1e14cea623287ea8a7d9ff998e20064f539f8cd075dbd2254cab2d0eb6be63300addd51d6d894c9e29fbf062df655b8fa234e85a918acfbdb00b8cad7188e302cc0dbb498d2e6172932cd88a2a6111720e8556cfdfa63b9f5ba70ed87b6a12b9e41ce7a71c785bea85d52e7c09c3d68b0b095eacdacec42eb2063a1c5ee280b9f593c0b295f7aa4a749d58a4f80e193f2a29568dfd54f80055c184f576829ba7530afcf8843ccb36d1ddedb17f9037f2ee7dd4cfc1e925a8a93175d06cbaf1f68edae2e561b83d14402f541dfb0ad16aca6f500ec2fbfb7c4f0e9359abfbf22c2b9c2905a8ea8e87220a324714de63fb30866ea77afdd81f998153ddbee63abc9bb715d5d4541df409e6fec9377b7e28d35b6746547f59f72b623df91fda2a2c71c46fd27e8599ef6a5e2020ed626e8805470057d9e0ef977709c82839785ef0203c6d8801ef50ddc5c82cca9133e37d58e1904885d30774fee078d7a62127bc3997b56308f1f143aecdab32ed604b8d40a3bdb4f2b63014459ec6a3e06532c5105ece0fee4de9b577c6f2063c68253c4f15df197b1b07f9cd9d380972c50ebf670a1dcb3c53b8a7c35cb79128cbff1ef6a08ae2b961ed9a09545374d7c10a1f80223b417d93cc9f13f752701d0c3789b9ec37ad283b6f798b6c9f7279d9b34a0e2f9cef2c9ec40fec1f593f93997d211b416bd53207fc1cc63e828ee38f98e3639ab940c3c50d8ebe3d424c16f42e599d589df7714812083c529326af43395022ec26c2ddb7277ffcf9941231bcc9b7a29a5480608c4fa0704147e637a4f334beac5c01c4e590683aacc54e5e53edafed7f161c8a351399e473172a171584f5b953cf7a23c0d6ebf9ff5c4d0749f8c6b08f690848e2fc391b60977eb8253d07856af79874e9795fbd39df9ac71f7980ae33a3e04706682287b23f60b554aa0eb55a7ae932bfe657f714b5b41834ee6239147d40ef2ff5caabb0755c79144a6fcbbacfe8d7b4ac5929f88525653ad5efe39a5b86bbc013b61a13efee8de4acaf2b044d13fe8839c7e85db46b5881be8e204da54e375740693524f5736e663f4175bf98f6f18b2d4894dcc9f24cba16c191a700f3dc560a589f9c2ca784e970cb1e552a0e6b3df54fc1ce3c56cc446d2e9a2ef504356ceff8bbc20bd78c1eefa0975d76c6c6210041f1da920551a12029bc4dd81bbcdc5fee0c3f09afce571a66734115cc9cd4fcc3975a518a6760de476aac4096ed54e89d237bac8cd6227f9124a87d6c49ba394944f6016297f4061c4792b5024147088a74007afb3e119d954dec1432674154476d16080a4deb25fcb5c9bbea43233e4a8055db7750a4d2f7318480cb702abc428232fc0e03a6bc7d5799bbbb8d89f831daf4748dd84cde4b821a3973fea6ffcf26e553ca53c748228f8b3af26aebd4e4e654acab1f8a1de6b215a4e86d769d51bda585eba8cd4770c026b02b75b942d8250f0a5ba0dcf07d43ff698536fa035ed8ec28de9d1938dcbbf4c1c33882c090398c041c06c61463ba4fedc705a1c06aeb31a30f8b3baaeac56dd6562dc8ec8176442078bbc5e82e778fa84a341e52ea770e9b1b0dc50c1f6efa6460c00c15407dcff5de2a6cfa521e273f7b5cc049720eeb677d9f15dadf2b43025f89bcd931b2a7eac8ed2bb96310af09d6ea28027605409ea3b9dea5ce8cb026bef56bb6f9a73475d58e72a3d5f19f9de956c61c8b1cb6a729d86fdb51f5ca581b9d992cfcee2e3d6058e2582f3371622f4d1af61597b6277c954a1a0e1909fcd1ecb5a9afd9cd981606eb24d348bd0d1517a73d9a18b786185b0db05748e7ab9e6d41cba70ccb1c53030dc866b3eae53750eb51ad12435989a42b5cc217fbdacd89ddf166f98f4093c7ba815e077391028367b0b316d2084d0b136de308bf10ebdceab96412829b74df820e2db5ff771319acf94098fc18eeea56621e9d99d465d0f882230a5d8362b4e4bd6a41e72dc5ae1b89da0b1a01cbec84e7e949249be80067fa282378aee9e2631d782db32ba69b43f0e3ffc469806bff5dd78dd7eddee5e97fe8005c5476e28dbcebfbfbd7427ba6acf2e983a688f356427dee3c20b6ebdd91e723814a962fb50a4a1f19d705c9c43c9b5ac04f621d0a1420ecca0b0cacc4beba0f7fc7c4448983f71995a18d001d2e21c602da88438b61850bf9d34c832f74b516b0728dab6bc8976e17ad34a921e03aadd3ce87f16aa90ece443003197e527cfbcbc15edeec369faef870894f72f15a84bb91ddb1286912964197acca51c686011a3ab4497b5c643eb092174d70dfe5ed22cae60d351055167a70b6302a4f44d924553a95a9b8a9afe8685b3dac1a814981e05d60213d3aa14761bbc5685b5de692973e2df7c9c4750889c19a952f912c817890546d5e37d940d13a14ac7925abbd875b8cd60e4920896ce6decc8db9f889da2b5489e1d110ff459d88573720bb3d8bff3cd4f4ac34e3983794a2b3505003ab8adb07669b0acb45729b0913f3776b3bb5b8652b6214cf723036c84ee8a5a7533b62565afa093d4745e7327e0272ff0cfb7a17010f5275b16d4fadaf077bbd67c984f74d72aeddc173d753f3d23041865d1c5b240870aeac4b49b3622144de6f91bd7aac996e255aa905fe03e721db2e46f9b1e2e1f1b2e966af79f6ca8382c130665106d2c99c6941dd813cb5ea346b45acabfc30582aef2c0b71db67da4313223a0acab343bb73dad89dfcc2dbe5d3d5afb9ae58068f2417c83b8e8d9b87bbf3831886cf5efb00d071a4c2928957ee637d6b97ddaf583ec670279eb059c94200ebfac96b8de3a6cf53262ca97513119b80223745950e85949dd67a5497904bf6df31e13c52fdcc23d792a97c219fe3ea628e0b046a2a9f2eabc8bffec7751031d75e8c9640b1f77a899ab79f0166ebbc9eff91be9124f1e1145ebe138bd0553e5ec12a2dd9a8af3fe37ed566b7008f9e900759c89c96144882391347374a7198e01a2857703a59e07fef918794e5460ce025c1a6fee67ce15fc85dee6c3c0bce15ba2597b6ff8e18a93d6a563d8db593f9eb67fe4aae9238179cdc9d9d3d7a4a3a3190831050c2251a18ce77138244a067c8cb22e2570ab934173db93cb74399f801079e1ee68ca22ce24c4ea93b89ce943e59b958683ce15fd7ffe5ed420e29c9b8e94d3519442c6c2a52618141db8b19cca2263f6abf4cd54f7198016610a619b9b414f5719f1052617f441e0dd04262e422fde9c6f8585efe51442b8c216b7293f689c287e3ea6a28316ae2280ea0fa255aa50a157e9037550d7ece3c86f66ed83f103eb4b9373ddf073a7008cd1359f0b7bff2ceb88108f4149c6befd7d368e6ec4ccc90957328066f573a28b2161ce6d8a3466b4cb73e5bf541872e8a8efb509ca3fe93ff1ac32ed835c31044159d682bf36763918f61ed2df2926115958095be9a37475cba99c8e05a8d5809be56153034f8502d85fe282d3420301f63a336c0a4291334cf1665064a0b58696cf14e63cc5bb987477dbd816ab313fe95dda4416626902dc4b373c868cfa9e9ade994554e13f825206afdb91acd7539889a7ecf34c2369e380b75854b4cb500fd9987831eb3a48dcd406942c8d1dc66d86416b8b48e8f1c9598faeb65f51255e89b885bd2bd37379a88909d0952c1fce1b52c9c49de020f79b674695d7b4a4edb6a276dee8338a904bdf44630d2ce625127f0e88953281d311e626d7621b562527fe537e6c81158b86b14dce3d45a4d9317243be760799c682b5586649aec16ea6732284fde69dd11fa72afa6d9ddf5241d3704e8986f239b57ce428d4976f31f9a9edd8e48aa9cade68e5cee55f22f809499b1f16d8139273e2d0074afbe8d4e949bb626994c1de8d9d8631ecb1f233537dce1b6524843b848f26eaf505b2c13efb950ad32d6d75f2ed130dccbbd96be5171029bd93ce9ab02ceeb81bda575ec06682b86c7c36f7d7019649cba65e0888be6a31684d7819bf612e5b05a55f1537338a547aaaa3cc028016cd329a0a72041ae21cac790a1e78d5f0bafb8c504d6a09b5c646de3d5c3b139c8149be631121d483d0d23f0c13a4313bbd44b7b46d22910cf618418a104c622f4d573bf34ea794523621c8075f0b1c184c2a4f12df277396cc38fb144efc14d719a639428f5d015936e33c836a753f8d4ff37cf30a41565b31ed33637f12d29ccd7cdfd63d0cc49fb95ec3069caa41a5aee865de5638e2640b8011fd0c57438751225539c17c852ca5dc831a5d71cc655151335b2bd3c0b84439be6c5b93109f8de0c4f38175eb09e4a3a746159485d721760df2f1db985fc2606238d68de0ed69fd548ae7bf9e3d5cfb55132cd91602049e1c2c101911626f3d24e7e40f5c77cec32c885a2147d0f72eb5070a0927eee3138890f052d4c831182d03ecdf2c47a278757541658ecb9b83f1ac17ec5fa4a71b78a7fa518999f238a51458c6f765cf6556d706511a3532412e8abc49672b36ff14f794ddd7de99e6b3a08f8c65d73bd2f83810ae9416a3b197275fe9e68b7a07860a27bd669e0e6a7f31f9f91fa7d006821fc743a376d61b510d6a9585cd5a7af3681cbadfe1390c324efed5cddd744b1d1593daf05eb3c787c44313ecf8bda28697d99ceaaf0214f48006e7177f11e7f1a1dc3922d522fc5fd2542bc2148dc56421c82b2e1151c9ec4d79f8a3978e23254b0a29e2e40b0301c103a7b02ab12cb88e502e540e0e744340bfd01c2cd347e29b8572d89256249619ba4e5d40111fa864d86f03af215d20de40372847c89b4f1ab6dcabe7eba74660e0e7726195e55c2dcab4e4fb72ccacb165f56fef5567954f032f04ebb2d43820dc3b969225c8fd708dc69ffae9090f4094d19a2c62f2dbc2d5328aa794f395e0181272dda90eb3b6896ddbb46f5b701336955106d7854afc95aee622774b8429fb33ad490900a58626704032ea0cf7b3b4073b869c680a84a96cbf6445252e82ed68f0de2de6fc68cc99777b4462cea774f001b399e342e27b31be76e4c9bb735677e3a5fd08dfe4e3ae289763a61a77e0174b96b73e1a9f71c88b5f3e7f52849f292da562ad7783d378fb8f311f06ac5f46c035dcc0bb42f5f8cd27398f1b3e2e4677e7421feccc04bf966a9417b7cd5843089af1b24d536e882cd7bf403f286c96687187a46548df4ba43076d4586235d7cccddf5cf75b44415276b7dce6cbc1e0a94d17850a7dcae3cbe9be9f0ff35dcab4d48c06e2e1deebe40c08a937ad96eee183dc0a04f52e51b39e54c0040938e467b9e2f8366da64e8da29cf05b585186b919bc7a7b38745b0557207f612b2eed8e84c8791a870331f33e5af87a545c71d919a11f96cc02ca691a09244be2a7acd03b25d3b6b85d5dbeeb2a0bba271d77e88a723f7e3b426586f1faf6ecb50bead6e8e34c33871d9b97aef46f465bfe5f8f7517235b0d9af605e3d83e6c2cc26f4792e92db97da9b12691a06d447865f375e1771354c874438df88c45f3cf3403cc421fbe6f206a67129b174ddd04bcf943d67c5691f63716c739fe50a827ca6e0dff6d467efbc88703d43f5738896a3aa05d0d363b1e4b355bad16aab3bbea77b1d1bb0f0e932cd7a34501d37e8ed77e357c12f97ac91868f05dbd9a3d13fde861c0f15f4672fc2197f54608d69c6b8da93d74e8757e06792e4fd9676eb86c87c4d5f77f4e1fa22b8aecf43f693a8e2ea5a8194b55c57d2ebf8d535a6d319e1d8317b5b74f2284be2233f4c05ef0a82bd1c4ea6a4126e551481f14bb6306fa71458f144e71040ca107d12fd3de46214ad499cf8c622aa6a8740b03d277c0ea4db343fa8edb4ca09ee2ce8cc011c56154572fb1fbe05828fce85b07e6d2e6d477743d50bdb682aa7b5b33f2ce1ef4d010018f76fde239d3144f170a409b0022b83185ff24292e910119074b462e5bd7487bc008db905310ba4f45f329fb973bd89221ee0b5dd9bdf8c5527e706883dcc26cca4ddd133145b490efaae71a32879f3e1b04b9790a9628061d7394f5f349477db62f4a9358dccbbb1c16c21f596ed5de7b2b78a64a8458856f12fafc33849f568b956c37523bc778d521043294584119474a8e0c20ef52ea5043eaa6ccf7929e51668928a5cc706e21b2f37d6cadac98894844d2143fdcdcc8eeab1b4508e8fd108cea8edcf58e4608b2d92568d5de03480fe221aedcbf03e0fb86822621681dd1eed7907c20e8a89207fc5511399f018d86b020772ec3089f52c303f8a9dca39b7497560fb4473ac89aa533ed3fb73a5f95f6f8f69eaf930edbaac842080a3a770674091d1973a7b1531be78650ed57c624fbd0b3924d4b337f82f68ca5ba886c8cb4d12cb63495551aa89a64d50a00ca1b08d1377363d9182495b85feab63582eea0d5c6f552adbdd892740d34d7dc7462652209aabae4c5b32934413ec5eac114803e723d9496f073229c0bd71994cbe25aedb29d1a1540158792bd09ae4f32e79c33b9f7c3f8f6d5a03be6249bcfd7812f57b8b64a149330f7fb58b43a0bdc4d3bdd2189a77dd8e4547824852436a1282b8aa55c1488c6eec0979ca531c7c82fa764345c08cb9d8a857c4f617b7130c097ae00f63e1adf362c8d10455b2afc7626ef7ad8ae8a4dae7d6eee1f69278d2fbbea52ee9171e8ef81063cfc7fdd820801a67a656163f13882778a29b600be5fdf6722abd536e8030829a933678762cf80b2bc6ce8fd900fddbfaae62aa6cd364b4df895d210e859091fde50d9d1a2b2ea3bc8530c02321dd66dd6be8cbec19e46c35c144fa8efd9cc0f63bd9e624c98896827849517df49b4aa9719a6f3a37e1af1d79016a5056b9822c1e07ee4676ba36260654be6a07bc19d735f3eea7abd0d00f071edb032f7b77f7f2340fcfc128151fb60f5177c9b436ff4f81d4e4e456818301f9d717f656f5025edae5412756b5c80dc5d527c928347a24d0bc528fd73601e03ee8ff39d09ba3ca58e94b17ca8ab7841493ea746c94e04c4d0f70fcd75014283a7b39788cce74bb5a964e10f82676bf6828305a05daba2c6338e0b9db82324089284710c02ffda84c76aab163fb8df65d0ca9e88868704bcfd2f245582ec4dfb75ab8c12f129717ab051167928c55ef5fabb7be78d0ab30cf68463de1c8744c219cfed83e38e99ff2bbf2b2085b76f0ecafda3a3ba5b3620e635cf1ece1a91c746999e451e56d97b015df1f39eb59b1806391ea655a3155e95ea70fedfcebd70c3b0a642eba8ba56fad270dbbae8687b7716f5d6a609d930cb4a4f6699ca4f275abe0d6091acc3f8dec6b0be237860a0e53d2f1df5b609fd4ffd733f4237cf53d168db895a8c7cca75e3ba861f8c0bed1855d46289d22d2ceaace56f233cc55bf15819a48c6d6d3287ce9519f74cf0cbd707ed8dab84cd2764ffabe08402baa98236cf99707a1f99db324961f3e197a3ebfb8085a3f47255859dcf78adb036a44ca903504ed819683ab5df445a7388db1dd89834b94ba31e142f5821e56fbfb4165abfb06eb2e3056cff5eac76294cdd33463a8135b1e9eadb5c4fc27567df41aaf10aa3172e06da39b9ce808d2c6a0ff5ef70545e4dcb21a0cdbb43a5bf1db3ce15ed119274094d698b37a8e8a46adb2d7841957d48d12b2c29a48bbda001734b6e6ee028ad74c8c31ca20bcfb8d5a8a18cb62cdac9837147191384053114e7e9a598f91e01d0b210151693899031dd1ad1d502bdf96a59b8450e15c59bdd786f627044bf97a373181d9c27605509e460efa8fd6e000d4c4954a0264405e58ea74c00a952987873a3dd3baf9a2fe2243b8f37063405f4b3c0efcea0cb98b292570c4f111e2bd41979fdfb1480454605735988065930a8f4e6bda269a27bceea484a65626c7941cf6124e43c5ac0bcefcff4a6e323aab0798367236a11d7c10042ad4b8684aa46fd25faff1070c7cd4a19099687db9b94a85f94598b60d4113b0ddd0863aee56c098b2953780983ff7e173f61d8c82bddeb41ed4db5d69948027083a4e33252395c5c56e85d6f1cddf3923f10c0348012a9f31906cebc4fedbf344728ed571a375e5f2bc7a5e8b9ec1251b0ab2665c5bb493bc18cbf5a1d89d921d09b686765ee775e50f73abd82b6411e3b38f1a4206135e28de871f82ca3b8ffc7053ea85ae5101f6d800236a0c2e9bf88c10b39b98bd4b02421cbdea4c3c496d36e566322a48f6c296be79a3b9873fd3e4d5b6cb9c18e6c2f3fb454ac7265ae9ddf98dfe4b35e0b2cbfd0337ac145a005e5c985488bcbe0554b16a16c36030ecc5fec66c99be3c41f84a44786c4c97087903dcb8d72f3d23f4cd80e0d9a067f09f73a]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result b81de30113fe503a01d4f5d229a4ff0b7af288d70de6c9af2ab4c37da7a2fdc7

tcltest::test Hash_SHAKE256-3.59 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex c5038e4d5fe9f9f3fab407ba0a957485b6a54550ded6f3c05d29cbfe8b2295c6067a74bbb3130dfeff31ebfe6be6229247ce3345bdfd30f01236218f295da54d492fdde11f31851d07e664c48745e79d1c6a09c53a8c75498e2feff4869bf066138c9066ae2ba97a993d3ab4679b09cebee28d7a5c6b0af3587efed8aac2bc3aeef857f465e9c13a3d9d347512ced14eb49c88092b833715f88916e19ebc52f161dbf8304e5415887b6e1cb090c887458602c11dafba44d8f7bafeb7696ffab2f59e3cc47052ed8adc19b80cea6f73dbbd7b025cf1f97863dc78800313c5fca530a7eb58d3cc9068e704d13227addd36e06e116ef8291ddf2f2a626da5a59ff39d5fcd9380ab474b25982ec94f690c817745b7fccc307973793a6d9c26f62cc4c12ea91e7ed55a5b1c3d997a6b8b49e20b67bcae76f8d448400f69399ea2eb3f267d49a0d53411bf565cd8ed81fadc81233ce82bfd6778850f111eeb1690248d53b273c28eafb3a05b5bb4c99ca00d87472c031c6967ac536ba8545b94a81fd5d037f02cb02d8a25b1a4f5b7c164241cff9fd428c3dfb7dade3cd23123d22340267288854398dc77e29d635efa2e6867d4fd24f812b6e241ef356114c8f67af6dccd027650d7f2bd76b0c5674ee622914daebb335ed675b127fbc9ac8dfc6a1e7aae28a6ddd21420f344e579c6759ac1f31a6182af26b8510cf6d2a279cc3ce1887fc0bef5718ac8e3c0893d68c118204caade8d0e8ef24a288f439e944f38668fa793659d9c9bdccd8e7a5a3eb3e4d6e2c4f9fb82f66dc3032ce647e76ba5d6178e6944df3b90843a1580795033450a3dd27b7514466fe5233781467909cd58a69c0a02c236b1eab1bd6242a42a85e5e33a2da2cb6641d71216dd425312f615c6393d484e754633baeeea5c447eea8e5e66d42baf3f2bc25833c2e47b6c6934fecdcbbe8ce0978add10de703819bd2d36bc3bb7c8b774ce7bf4f8d4fb016eded6c07d0b8360ec15a38b072586e145ecf1a629ef1fb7662205c346b9dbb74c3bd77a19d83cdb8cfc93c82d2438c0ccf1198a657abb2847e77e07753c21784d72886467ccbd3ac068362d1815569d986435d2b802a4f060446c274d04d72bb7ac72e431901066d08112238f9ee65ff26ecee5ea2ce3f9f962598d96ba04b8d3101b633dcb3d46046eb1135c6af2f022376b2bc3a27f295a69cca01805b106e9c70d4a54264ac1a3589b63451f813770e6940c0b0c806aca804ec89b8ee5ff41f8d0ff3e4941c1f766567d13669c1c24a3d2f08911efa393cf666de6fca88a22cceaecc3db292d46c16cc78ee64a878598ab3f065ad3bcfb7f9cf7c2f8028fd66be577ab850becd99065ab7d489360dceaa9614a8f349c4bb878cff72afcf7a3fc490abdeeeee8f8fcc78fa9337f8f71c454bf1d571a2dcaa1835b4d399da8d2a79c0cc2beda08eb2d1cdddb5017fd8c4c33bf475a8e56c26344048cceee8baa9668e5839fd834f94aebfcd947629075aaceca8f4197ff792543327b90f58875ee34fcc537ee546b7bbd546bbf68317307ad49beb43e103810094ee328bc8879da89bb532e275189ea194d5b6032c9d08b59a29c5a8a72474c1dbe8c3d4b710080ee89f42d88119bbc874f70d3c73ed25d593ff1dc830bee0007ec3e78a82d5008ebce6fdc1b7de91c8fc271c0307ac2a6358685e131c47555503ec181dda2b19b08f38de2e77dbb30ba0e27ce7363e88d76e120129d8623727f1edcfff2ba6d61ce5e16e8f4fa58208f9b5aa69ae38b3ba3b78917ce37427f1cf3599aed5bcb81c478d2954bda091597d2d1f0ace1f4d7446f8997ccc018a6b025fefbd86f122373a98892f307163758195653b2446c8ae173e83ba00aee0dc21c94cabadd8b71615a0286f467c7ad5cd9af77b3f6397c032a6eaa51fc0bdcda3fe2ae9c8d7e9018f1061a57e463a02b7ba505b7dea3d431fce28ce77db93c80f8b250856732ab20d85df6236534374b6500a5c7e4f4bbf4510e8b6b773e553dafca587d53f1e8ff75cfc160d1809b460188fee9f07258d391b84de4d1e34e98caf36d8d39016f3f322323161290f3a4b605b927ea67d45624a97a5a73f04f1ab2f537bb01ab69677623c64e0fac68ebeb3e7d89ba19560573a9bbd545ad8249cf9860119337fe00a8954f10b01c22a50afcf31649d10769e480b85e2e610db089a48d97d7ed559132426962dd2748597a07c3d67dd60e09e0f518fc195618d449e06854b61597a27bf2ba4e7e160290a32794d13f72946dd0d183b8ebd2cc3f7515995016f6ebbceb6ceadb7b317ad1ed240e1078ebc11e1adca3998d1e5078770bc893e1d97a66ea7aa211bcc0d5a4c0c5da9a0e8abca328de1da7e782cd07b58a9c26fd066c28e0e28af92a0b3e9184d3a077eb97ae84609f9ceae1456b75995abd1054c5e88a356d499aab5adb21a11707b0f55abe4a2ce6c66b64b151488942d459cc5e161551e388fd28f4d4db7f56b84c161a157cf37d4331560ca80bef0c890a4f181f509d0cee288a225248865b5b533521daa21c2abc44a19f9743327e8329c43d2bc37fb02425b72c7dee1fed97ce39b5364511b6d9ad2bb2477aba616bc1121361f76096d1fc995a7c57b0d314c40c1f51ec39e94173de8de037ef7ce8d723e3ea73a9879eb317f3780ba3d67b3d95a7521ffc8a9d9ea07789033999a375def4eebfc04b3254184198905ebe7441bc946266c26394375bba6a65007e43a22b9094640faa37e6868a05704b53a6d96930a84af33acf44f69cace5acf47167f2fd04e9fc6c52724817e633d05cba0c84c14d52f7d8f5d05966770ba5c3d5cb1b8467d6f1582dff4630645f57a357e3f59078073705afe06c5ff26053b316d68f6de5b455377095681da77e47ee2664a4e552ef1988a57e17d1466b1f8cdd903400a50a90d1c33c9625d6170806cf997a080394062b7eb142029ab46f15d102f385d0600aeeccfdb89119b302b3f98a5d40b27e67b4e382d53b17c4ac179b33b5438d3f2a5636dfb6a99ad99dbc4c3e36d68733a2ec7bf7b8c4e5223f5be22b6083052d5ad0a7eb78b57e1141eb72bdee12ab3d219bef1bd3e52b568ea64ff3dd8d5fb40226c728e6fdf0e45606100f6b3c46244a89e6f30ee612e903c38a9215a9c45c881e409ee9c916d844d6d13d979c7f6e877d0989520ec16205783a10ef1f5cac5581b7556760187773235a4d597a7fa53f4100e485a76049fb8f077652364e2cd116d756490b1f494bb5564a981d6e50d99b720c91f719274fce9bcb2837c36464a745a8781253d535536b393ece73f8bf54070a5c47128368fe9b17586ae2dd77faac53dbbddba397c7412432d5b624583468e5d0de73e5aee7b262ca17d41e70d9b2605953df3bdad781125c7a605c0c023da5d40665d5895086b56686c0afb90affd6dc1e8926674cd30ca405992943882d534f0510dc6102bf1714ffcf19b8553cbd4b64ffeba5edde19f2bd8811658ce1f52b249b819ec60691bcc929e3d784111d8d6e6912fb844b412eeb569edad701964fab2e4da862032a462df5957d5d25ff8c84f023d3d7c18c40d72a580b31343ba3e2f3c7e89e5dea9a735cb811aa216a2feebca794b0e90310c92dc65e6122ee0f100f77c444bcd9a0e385d3fd31ac675ef3f426a5d56bad870987703c3174b67b7fade5a51aca0041c4986ea8bb6ffd01dcc026700eee938bde5fde0e67d29ccf75f39af4ea2c666360bf117a0f123401f149315c251abb0592dd993acce3a6f33b091d177a8d13effd2045dbf73c14447ab7ced1e0992fde6b2b282a2850decf1918f678929310cee4e391333995a6b3bf3286370910f7fcb26e134443c04c4c5648ae7dfce664e65d317eea9ec6f13608e1dff7662a1949aed1e3f2e4dcf7503cc0cc907f2f1721af329368ee77fdb69cec6377c08d9faca9791f9bd54ce7c411a9d818e2163266240d5816f14fd319c47c9a20dee1900ce9914fa6dcb724911e2a5a7dee42bc9c02eb555a6ef77a49c8b90b5a8acff553b73ffb7dc2c6b79dab6cdb266b5cbdad92f3139d2f17fa2cf0ca3e8e8afed5685babac874e20a7d20097e37d210b3e801c4e1948fa565cac83d7bb22a71838331dffe92c4a6dfc1764d2f8e9d7f845fde823efc1985ca7b0cb0a0b80a9c2279c45603bd47c57be532145a4d257cbdd0c3d9b1e72d1d2e31f0e89b50e58a6a88b1af829e7ae84f6707d196ea0672b0b9565de2dc16c6019e3957c41367c6cc6e8e5ef3bcda69cac55c176debcd0c0d980a613a41833ad50e3a80c375fdcbc869bee6df9ef2d48e6ea34837d8c59334eb549620cdeec6290078f6020f0413cf28c7d99ecb30a30ae172069d279cc2c721d95f4eb7b6026e13791a28453739711a4da9b9b8207fb0bc4cb4f66ecf0524e9ed4f1cc5757a24c5bf7f7e9ef3a73ebc94d9c8ec5ea5106d97e5ebf4b8c4ee9214c8134da997ed85b0a89d92c5e7989e41dc44ee27cdca53e81be67ff69c74c8f47caad6ced618e1f0f80db72a650f2de933a62438541f2dc1c96e6714f667dce0bf7be751cf3749051047829dba02e9df727524ecd2bf599970ec20805d386c8e02ef05defdd9594173b36b9c513460b91b2a76d1b40b55e3950852b55b56e631097c98c2bc7f614a850a08b2c4f410fa804e80738283a144c81b64405b53e89e25cd36a9b58a1f94d693b05d8fc279085449d83ed8c8ca116ccdebade7afd219da2966006399d294eaf919091c30178719b4f4b0014b4efe05784f5a8adb3138a9499d43312f28ef34929951e4cd6aeb23185c63967b9e4f14a305d2bf56947f157642feb8aa90f845f8b7a483eae1a902dc75c622ea36a93ce6b5a2efb26a41a167fdaf649c893481b40a9d74191a455b79d7541107a680c0bbb547b66f2144cf7733b1cf85a0488a3cf8893ff883447f99079a0b647c5a528abb3d8dfd57fd022c6bc253f64498c1fc081431d9ab2b01827d045c7126ba64dc0df0e0ed8cbefc003c4d8c5f04a9cb89cfab146d006d63febe3f8ece14157a48440e59a02e1eef9afbafe3305ef0095e95da32030180294621883cdbe2fff527e3e242c5ca918f454085f30ac20ffe03211e253c5d07b3f16d8ad11b01de8823642956bec0bb4da7915c365ecc5e2befc7e368894178b698f8c3d61c0f3585a35b2fe00bcf009d2a749f279cdc6f259d10c6667a7d3783a539afc64f499980202f82892d43e6005650cb315570b74d938233c9705ee8bd9ec6cb2c356f8f0a3257adbca3adf019b3bc6d0e1937cb366ba2b7ec1b64e0c6fe2682625eef6a76527a2de50f8b934bbb1df0f848802f626de8cf58cc3dd4323bbf82233c27c076f8fd7fbcb16b6418d50bf39a73e8384442cae69a13381771e01836c95dd7356eae580f8e39abd6f3a9fcf16f1bee8a6e62cfaa2a70e24f2873b71cdf244c1ddfdb2079e418eb508ea27756d0b0f1aa43567d667475cadfa87f2290df20150e4d17cd3b58df98852c46e1a079c3900c65864ab81292604d846ad15f43e1a06b38dce4c056ee41d96f1fe27ad4d45815477abe2b9f47411d4ebf49c4a7e9acd915a2dda558d565c1b995f0225c63a8795bcc5e1d5504cbc359f4f26d659868cc86023e56f92572d2be2171537ae20f9d24d39129de7b8ed4589471b6178e82b9ec637d51924ef780cf7b0c7adae00be53528fdcdb5ebf8c4ad263e4b383c7915cb5f2121ceb272507feb27f4e6de1c060f450a6556069818da12ce794212ca84954da044091061c6420a3a7e194cbe6415a03dad493bfb4561f298dccfa1e57afcc79144cbb95466b840da62fcac6183dae30df209fc80ded73e23e22b7a586d44457a80a13db89645377e400b8db3e9d155f1d012d8d7599c7df636000c91d01e5fa2a4041e0ce96b46ac91b051141aab919fc3fe514d2a340a9624c7c93057ed7ec00b7edacfe4ad06dbd4a5a7107a9c2e5e4a16e670e5308c7a5afd40a249341b59437be48ffc8ce0828535f0179e5584c3df1718e0ff147c19250b03763884bdb4c885cbbbb58d7c372ffbbcb7fa5a1d56ff5958fbfc5242093f9b620aaa41fe89271700d18421327031617d70230c808e27683740417c86a0f7091cfe231e264cdbba24600cda9bb43601a2be8cff36dfe3be245c82e5b2a6e7ee74cf175bfd5642e996f5a42c2079ba56dd11bca4b8d2c0e5b08f25304e517eb619dc1b9dcc5c192fe900ee9859471acb7d18169f7efd2b596c76aceeb25747fa6cc394461bb4baf78af030a1be92e3ea13104f41f1b5af93a8918e73971ec025fe1406077406a4db0d623edab8f3b23d3fb8bb2ed9a2aa2ef57e4e61652e73b33e2c05346db86334d0c55da5e0cfe23f437fdec87f3ac785f38b612a94fcdf3cbd9a066f514072af85a81185ceae105aceb44ea15ae4643303476b41bf007f2cecdc8e1ac7356fa59c68ff0ccb04b93a52147f4c05462ca0a530c1493bdfb00e5c71f0c9581d96b175b68aad6e7a49384e0ee52af6c67d6969e607a3a3f12e5b8ce8f2ed5c5f944db1ef28ea41653cef431214b0c7ebd2f7b1c5a2e38fdb468eeea009197c71e4f4c1916e35bc5c20c9b1ac828fc12cc9d62d5e377b47f4a532f23587b0110b1521353bdf3267d581521a6cb32a9b1fbe8f3d2e19fd64e3a6c258280353b271816d7d4cd042bc47db02fda12ae3be2b4d7d51a3eecc8f1ee7c760e60076e94bd6341a5305f922599a76dc086e7da2e5f33b1b5e0a7aff0cc4acad0e038c2e00601f9cdcc4c842514c0825f0d24ac1c62c42eacb117b6d43ea0cacee9125e925db7a6548b12294e57c417bf90acdc342652f50697860224ab441d1261db6b32294ef04353fba827c87ad3e9f8c890fe13a5adcb7c3abe687bff6ca432dc1049d28f81a10e4d2938d0ac5fe42bc0f1039284ff04477c102915995f8a425d765ec03ffe76a351d60ad82062b813dc26ca09b993b8e09420ede3da9dce7ba6c4f95a2912cafa4fd524469f856e976457dbe10a10ef2fca173f4c8acf78c3fe23a20a1463a6fb8f4e0e83f1700d9e9faebf83401fb11b661da4b8709c8e04afbbe238c799118e586a51f8deca9d12d650fd552367078eaf59a68f55ad1a25ffb3404a0b5d149bf450740c2e3b27da51681dc17a91f870eef4cc3a01a9230e373445a9a857b60aa92aff26a86db1de581ca82e0f448da76c169e1f3c39b2a79e6577bd662effc3c01d7bb01605460633942504a829cd1c6ee5a5a7ce05ced87e6f61ee0d8af7ae80536f113eaeeb3a29f91caa0ee7c0b73f8c683a7eb47f891d7988a56415a7b433f463b1e80eaa628373158a09276e612631704115efcda2c5ac7648347416bb1f27dff8decd8a668a29990b6091e0006afd43225c5dc10bbc30b24145524cac8e156c4ee794942e83442f95ddcc1d7d54176b4718a762ac4a2cc4f65f555270c6e6911bca0bcea2b9eb609046812dc12ca770161474b96db9c835d14a252fed10c1d7c750d942ab7347b364645719b33ad7d8f9176dcc374f2e8b38cd6beb0db3cec5ba41a6f82ff880b07afff7e83ac5cd2d57e83aa5f056835195b2cf8fb7f937e35c651cf61791bddf38df08a24017b1f69850824c8214f20c4fbff822d32821b91683e1464c8626c907cb3350ac76acbc2317edc7d3d2a046cebd8fac4889b6d04e659df0b51fe5f5508c20f8662be60662052520cdd7b8867a733b3600641eaf6dd1f9fa39a41feb79ea76a5557d865cbce1cf5f576d6055bbaba5c6e20181dedc909c6ec25cff34ecadde5c63b6b4469975968a58dac03af92b7567d6a706e6026a30533790aa570f9dff27771d9a4d61871fabba6702bd9cbc521ec49fd54e46265ab27f884bdc4c82820d79f95df87de015c9645c4b660c26e4f59432179e128ec492848c084c0a230e17529328d053481eed3e01c6beb131d4f32ea5f45fcd6816fb2de4092eb0494c4be833215c4c87e21e309d984cf4a5ca207b439318de7df7f662d7770aa8bce3b324207024d0640b64227aec983b496d8561531d51af9510890bae7a6959447c57eea43eb048a83ec7fcdee82befe66629c91cb992a77809bf11b239d12ba9bf3d2f05b3891a1b2550a612b48c79445c159ce790642eed899d5a28ddcd86b2536fcd8cf636b0856806085e79433f2bf84fc0fcca4eacbd382dcf5b8de2d229e1f5b281303f71aeaff20b095fd9ab63e2e11fa38ed989b0c0765892729a77d410d5c42c882dc45ea11a955d8dd524b3c1d2a024048b2e8ec680de14b47cdd7b8919edd42786135ce6888fa02cbf11e53e2b2ac655ef011ff554472a7a106de8f4c914c334d5c5712744e21b6320dcbf00f3a7d3a98a6b2bf2f97d1cecdf8de2f8eb213fd89f42650c5474165b7fec0ab032fe9127e6d579687766323470a6303d89fb913b6ef1003cc22fd93b64a98df5f11749f88aa5d2fdd7ecb4774b219b6caa8c0184c93c096096faab2c577b127837da4243fe45fe5920f6e9e0f964eb2d57bbd6dc398a4a1fd6bcd656e1ca5fe00c2fc631cb1bc5255a6b1a9401d9e82797705a6a454489228c5fa0e089fe3ed678fe1bea7891ef098d358fbeebe759037293d35775d08f10bfca52f3d87f7402842f8a958d0d43acc23b908440f50868f00d8aca5197249278e533b655b6cc0b37aa5b5b92f98ab70165650e876dbbff1ac4c7ec62010f50be988d5288090d9a9a57d66310bc8cd1509b558548b63b70f7a1d2e42f771af199cba6eef9e1fe56b31e43d68fbe11a3b9c5a9110c3850628f8cf2db405f0b1e1166c8b331a769e88ce8e9db9567e1d543cbaad9595bc17deb6e70f91e22ab7e2f5139c9b7c114f72d9b119bac1fc30ef6959d06ba87586a122d94655029c2bafa7541571399c72c9c21033d5b4e81f6db0ccdbfb424dbd10cb3a6485edb18797bb82a85ce954c2fe36007ea2b5ce136f916812dd19a1359e2e6eec9d19f7464b8033a7d6f1f6aa70a4265caa2b1ac76599c00789851c8ab9bb0b41130dfa022bb3fbb647e9ee83c17ae64044ab5a95d018793c791b2c26f3ff83f470302625c8c52f365837a8f97148b4dc1abd1a294fbbd82424523c84cd7a6d894d37083ba31262ba5071a276008c368284b6b5dc34f2815133b0da4ea6aa1c7202690cbe3b4a1aa4f92e8783efc3dfd62b4eda49103af945ffbd91cf200d3541287cc01801cadba89aa4b49daf7e154966ebd3da6213946510eedf90ca123c7937b8bef387231a17bd9ab63dc0197b5edff45f0abb0b0740efbb302df567967ca8c365bb4bd14a84fa6718feb2247678ff1eb8748b9fb66c14a91011426bd7de041330e9c0540172a990393af63d9b3a3cc19c8244302649084f1bc521ad751fc22ebd097539c36363bca37d2cb35e15116367de856adb6a3303afd4239b02b47b8c6684dae104c9b132e45f9634439c359aa6c3bfae4a323d6d48a8c8b2e53e98a2da0671e84a381aa9883ce32ec021e1cdc5ec6388f7438ff272bd7183a100921863e8dabe0810f866ebbf94016868de8361a3117967209329baacbe9bdaccf033a0b665e0c2f6d3119b32295ab0b36441f6a23a0e1e2bff798ce11059d6d64bab2cf9b3ef1f5c4330234f03a91da41b8ff1444da580f81d6865e5174c49cf0ce5552d353751a3c1290050b36b23bd7cc3fe13dcde4407858cd23323f18809ac58a5bb7a681e8fc582af01c91f47520094599b6816bbccc04d5e55d6d83638b29bbb4ef3efea52d8c3abbcb5341d243f67a0456ffd6cca462066b7a06ec8beb814f232224d29af637272fbf858098681c46e9c64e0eb828fbc97f30133a41e156ae71f85ee70f80e05914a12f9910b9011212ae76fac8825684e7279a57cd952f40661bf6234cf20f3832185773825b2f4445b4808144d7fca16c08a62a7730946cc930f37098754d2c50cd07f836792e464b83738d73527386d67b3c9b87da0d9d64e25eb53d31209d3867460f7339847eecc157059e18459ded27669244ba2338fdd63eda814d13f3b08f1da083c3bb56ef1734d00d54f94c79b52bf7f8f95da65db79bc6adf2ab9681ed9294ac405b341e2c13d8082c18fd41cc94b2e9be444f4c2b7e63084772ee7328b0d137d8ea823fa9fb04d7c829170e15a7ac5f325e9b91daee98dc75ef644de97c406cb2f2a71b35f53cc151b402a8386ecba47d36f3f66ef34d6fa3aa5ed9d700c992f7fa0b7a7908680fef4225d7dcf1f8ffc651bd418c956a0bfa2c45dd9b4355f2ce8b16241c3c710ac95aea63a9371cb73539623bdeddd8f6a2fc8222dc4dcad5602c30e0c7993df70884b81349481d15f4754bac0cd27d78c2a27b7043271281d565c1772228b521d348f8b0612ce561288ddf5cbe7c42db82a79a8e78d8133f54be31b2d4f0c1cf532f10029ceb5ae3fc0985129be40f650b9246462268b75605c0e85786f94a48b0c069d19f8e66e29672a7984b11cd6085ebe65ee9e0e41011f24f2edf4c36d511846be5151df0a81e50acb4770b6212183be49f774784b3a0dccc0188f06fbe9e017e06a49edf7bbd29fc2fc7dbb8c4ea08a7d171a57e88d907c89628eddb4b81c10bfbf41b1da49a87ffd0e288b6bd26dd97bc8202bad7e5faacb6684c64c4df4c788dae9b916adff11d61711a4347f23f1c27506720e8ec3dde29f014f170e3282f847a272317b1f0bea81b9a49a876b89edc83db98021559c8b7674d6998b2df96a8ffc6bbf23a0b4a6f890faf29dccf85a1c4670a6e88d5d0287600b68477f917c0e6804142a2ca297c62815d12490d393fbb125e756e396043c434bf7c58fc1996d65d9d5011b5c3974ff93aabe7f8227e0fe47c5def0edfd1faf16cc87d7204f07866b864ae55808af87d303bde1aa92568e54c6e32dbb59abf3fa5af0fe23f9774a278c5a131c91c0418260c56fb34fe701eb7f260284966bc27527a36d53453711ac6bd13d104141ccf056476212dcfcc96a32fa07e05fd98b05b7219d24aeb17d48b922cbe9b3be7acb38c6616fa612755fa6e1b635027fce3a8dce161e92910daad8d137ff4590eb619cc4f62057c2764a2f7f86292ab90c62203b50a79d3013416f6f19c793638f51f6b598bb4e774ca851260003452fb64af2ebe5662b295e8ac15ed9e90990e72aeb3ab1b716cb78f89077bc79ce4e6c238a424cc0d8e72005931300ca34b3734acea6e9aa3d198bc981d703e3329f8eaa6ae0ef5e02f40830394e16e19155c430359c98eb1dfbe58999e68ed61e8dae3df94a457445ca87a9484294d5abd25a89948e581055ed26b73d08a5d8feb33b5cd9e107ca2df51ecf34a302fce0b396a58ffe9fa06167bfe10fcff1523f8ac69571477ec607ee5e1082e1d9fddc9419126c5fe821ccf62175769ee9d87d8ed05643d042de8020962bb771822efbde426ede44ca0af502fc13061807e21539d94de62dcc9a0326775f46f4b426cb0cb3094a2fadc27628901832add3f5b30641baccb2a48f2d8a7259b5cdc86bc6b9eb7034831beedcd18e1380d2c689c39eca4b6c0143045ba71779887f37647b304c4221d18cf67598568385296824b34da36e489c20b00a26b75d338b99b7553a55dd96bd896fecd]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 5d0c5819820dbc44d06fc6b00e02972f852a260c2dbda5d7e52e1ed79e198060

tcltest::test Hash_SHAKE256-3.60 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 7e0ea9a441ebdbf1ed6b0d83fe2a3cf4f1c06fbea9953dae10f78e960169a643663e5fae9d67b576218a888e66549e33040fe82218770607e7c90c38c51e87a336f7bb0652192f5e6e9b6ca1f83d01afa3fbca86c4e272b6fc2337161866edb43560461228a8508f1dc63f237d8d6d4f16ac9f54767f8aa4972b9696c2e9e15dada2873be7bd21f275358b7cbeeeebfba449eef3f4f655b70009b1218a506a86e4e406e956ffa86fc00dd7138006819b96fa40cb06eedbd87ee6102039439117234f4c853e17efef4479ac528e7d3a1834e91c44760f25f05bea3cf997695df9b20be07567acfe584b9f91a0affc1b58c63b0ac60b023ae5dd3cbc166c6bd612d93f4a239967db941ba70e65aa2b2e44941b92b98c6f23a14d0518dd80f0044be01413f59cf09089fcbaab0a48b17ac4e6af3d85c2fde60af36cd9b89ba1f08d0eb1c25537ee25213800f1f5513707c1031f929275558d0a169a860e8426a1bead3edfaa3409a04216a0678f8d64de2134941a496c1f1f88ffb6a74604261fc703e5f35c59ea0bd6ddc29640c3e106cec1365b107102a56bf7e9c4cae34a739159cc85d36f396dc4d6900471bd5587aef22cdf504aa6269d445b6601e939a403f61b1d763d9dcff4492f3b8841696aab0e9f2e72c0b4aa052e331453dd9bba0424fb43af8dbf384e7dcac3ef18c5b6ac5fb6cedc9bd43a8bff9a5728891abe7e299480e62547b0babc87220c0a1073982b9a49f8a3addc17fdb7b6e8b35cb7584e0d5b81cedc40204c8ee249def2a959bb72272da0e89a9172b3b9fb2409ad7adb8e5de95026ee6876088a0d5e1561d65767eee2592c7ce1a4b5e8caa4caa8cc18410c8673cfc47a821da3bf501ea3f747a12881972289f0dce6ccbbfb47b1354c4cf3c0ff7cca3eb8f4b4c97db875a4d2475c712272c9a4616dec37f027cfa0c1d79700bbd7079d60b64592ad89e1c54181131ac2c344e67d73d0a74c120bf2bd0b82ac7088837dc18adf82a739ee42dc79d4e43fbd039f76200171d7b26c14890f3b2ee63746c8249909013571a403eb54273760090db5959b06ff59acfaee6d0c4aece58b5964d10b4b771dd90cf1b63d947bee4f6a12220d67b79aabbd68b02a3850352cc33b10072d4c28182df2855aa418b236239c659dad036155be6b9c908bc09dc38c3329b538e81ed710ef9fd3de7671673f3da5745f4a785204dd7767cea6e7f8bd36633ef3b4c7bdbbd14dd1cbfdf68ac6dc2cb905f3a54b97a88ad68669d9725c2b08cae616eb73387ed77cf1160846c16040952868b1e880b21d063d713cda74f95e809a7751a08fe085fbda276e4337b32a304f1064d0c6e5781f7a26d7d70a8aae899640c2edc6de9e770e9af12a30bc32b1025385ac7127e248c6f0741228c53f0d62d70601e75f6c1713d559a3b4639f41c999de238a62a5a9a837d932d5925b3387a6e586f94d350473426e55cc90bb072d4a35de177d076ba863cfe01ad948238c132721058f4265b647f7e97f2bcc2cb5ce5384236051b64edc1ec4fe824f06f988937c120ddb63624ebe06d61c1bd7ea8e00beb3f3cab1230a8e858976b804576cf23f28af482601be8955d74bf03152f00334d11ebc85ae56e7ccc39bcb442d270c124f5dd0d51aff217e8ca19362775d268d84c96d597726f040b5dad0ef0321a99b90ffbc9836794e28fd044b91e13e2f72d5dc265607e3728a661c0e2c62c19185f27d5499dc94d7fb315d61e616f9e78aca3f2fa4e5f63651de47ce24d0718b767ebfe0fd94b886a130951d8aa0f8167e6edad06a99c5013e264458fed79961163bada8efe74d21bf0292c7a507a184f5c69551d1acba9ef945fcf4e3ff9fd90f3130f4955bbb7100b03ea75ed15ef898dc59f900a53cd3294356eafbcfecbc06682e0b177a6a3e09408005de88963c0fb70c121f0cb26a762939816dcfe8d1a6e990369eccc25085bd3f284db3b016015f98e2586a86298afe8f026287fbe294bb3fbd52d82c6e1a2c6559d2db164f16dde3b2d1461fd90aca3fb501808eb57be622e85a260e627097d9e095872faff738d7c9b228e542a19531e273410714017320fede3ed1f230058305bf3f63fd4c785b712498402bf5684dd1df52d0c5ce69234908a9dee7027f4b10788c1a03bca656f04f1f985dae4a7bca6e3c4f908bd0120ffeee9c088d0c1948e7f4bc87f0c8b28f5a4455a17544a3144886ee3fe0b0d499e895721f7ab4d5f63501b15290e956966d90dfbdf25dadf894b814987412532fef26caf2707f6762893b622c430e2a4db28a9f79cc9d81be7b5b2865f0fd76193b2a0b4b1876b7d40c2935dcb14116fb4ebafb9fab0c07ae24f6946cfb7a259ef3299cf01aa0ae94e653932c838902ea6ca85cf539b3280fb711bf763e9048073fa9e7a91d0632e93e41e5e261efd66032dd2b451b99ca2b5e34114a6147c89c48345340c9ae2c1d3c7c91c7f2797aa6c8e0ce55fcc6d6483fe8f2b20ba78ba53651487bc8a285760a8b01a3df31d6045739afed824335af82b4ca74e4b97a6a31892e24bfea233dcdf69b3ecf1fd3c1077134d75517cda85021015995847d3360626e01598cf0b9b046c95f6b4a5727ff0fc7da1e4a887ad1b6ff29c6107d47eb666edb3c92d334d802f2d05bba4b7c689bcfbd85e54d6f2cfb2dac1e6660effb1d97791003b3f470b27d5746779809699db44931ef03cd8a78f1a9468d1073b80e51a57ee87a429eded4bdd58a24162b9edd46cb7094dd12b6b4eae68d731b49c105252d480f668a0f5ec9affad9ebd626b47cfa71e7e7ed3cdf35a56f732ed6be19c2c72b5aa85ecc83457ccf9ecf91bba0b267f8e4334292d8532b3af7f6898ef744f19a43503f9eabf7e6115a0c84e709b2ba1073083a41090c21f6e6b988b80573559bb2a5570c3ea993c9f7e8d83157429abe7cb0fdd0d8272fac2ac0fbc4ad179b398ff0ce9ea4212bff5cacb521f32baf0ce771b2c7af6efc63aa530b3a56f76b79c279ccdc462857b9719f42404334a2019c9481aff5a731234ebadfa367dc6b653388784f8a85bf011e0ba815b0271ba58460930e129b75f4fe3ca1874a8e4604cb65fa7ed9020ade4b360e29a3cbc101851f106f6e1271dfa222766c66d5a25e70587bf19c65e059e0699d0282e73d1c8817205771d4cdeb22b588dc2379287c0ba823313977eb78c5ec7d2ab64436ff7692e95083a83021663aff5ee9417f65859e19c51a00d045e307d529a8aa55b035d696e10c57428757fc037b20f64f21c4828635a5c83ac82002cd85bfe04239af2b4d9374aaac28db42bab9306042b9b29c910a4496cf0865248fc862b0a4a1cadb36ec23661609db534fa38247fe34363363cb5e33370d9bb74079fbe024f1702d7b76815627344078e8be7c732b9a379023005a681bdfa8010b21f1396930886841b9f74188b0f0f9ae9487ac72f49ffcfa32a2fb2387764b1647ac831c66fad5b33cebeee185d51ec8ac0cb97b4955bd10e89db4f60cebdc89739486e49caebcf687c626d9bcd62f5e8e7163eda1411b8caab35d3d76f1fe8d2e11096ad98b653522f1b1185bda739ac3207270044b6096004cbc9fcd6ff74afe8bd655257b179696d257476dcb33a2d27faeae7b5bd25873d09bc51a4c10e76e6ab34e88661b4169d3e00ef790b79e43f8de4c0d59bbf78aa7c0566572918c031669fd0b32ba5f265b1314031147b79ff1ccf5c32d619ece3af3fbb4c8c26347f7c009b5c8391852d1b90298362b146cd43e4fa3bf0d73c5effe5c1136ea91c1757f1b8f10e393779f9a7fbfe7aadf3508fd02b8f7069ef92fa82083a45341f9f970da9ff2fff91c2c7e347f0c0d3d7ff5d1b707be9648f263b8f013fa439978e959efef57d471cae02dc8e08d9d58d40381169afa039936f1f773c72003c1c5af03018725ab2408236ee4ea529f58bb9ad7c6789596b84f432d52a9ffdbe268b136b96d46cc3a5e5d0b30a6435e65bd229970a97597cec5bf2134c17d1224ea59b9bfaba07fda54f6ca531b4921a5610390bb36844e021ecf9dc21583f2aed20e56ba491d0c2c735674f6514a2f432fa5845026a8027de4da67a4b0fac1a9a837d3524da4ba5942e6d1c0512fd165af713dd681cbfd669e48488197c8c83cf53ef930c11cd3894a0ca85a22e14f346acd82f64fd485e6d5800801d4d74f903f8a90fcac6f9de31131c26bcc47f1d7e7221c5899abe32510ec6fcd6d0d9ecc1183605d1784619021bee89c5848ff76aed9d4a367385f4ad7f3458d6d54fc19f09130fc094366b80219e095cdcec03b4858707fbf63407eb2fd51e8d993b39f661cca818a94f6813aac72fd33c07d4c3c09b896ab14d0e82a725c87bbb20985fa8cf493a25f571653de687d93057ed11253768d323355b1c6bb2e121a9847f4354977da5a8cd29dd51689bcf4870bf3539d700f5ca818000f3e8f30ff2fb4139dbb1b00b903af3f46be9c635e2d6cd986516fc2325b61fe8c644789715e9a0bbc4ba7aac8ad3623303d6a19d9dfe8ad33d63b4ebb3478d2c5951dc6780d3f031a5fe5828e70af721afbbb876e85c894e2949c5c001ca4a6423adb8f1c24ec243d619b30133561538d605654240855b81cf35a9407f92e9f8cb9478b668ce996afb7925c5fe595ef10d40529044ed441685b3c9ddab55ee72a7c2a635d2b7e80f8cb92ad7b66936d2bbf8eae144090574f340c2081367ca6a4e94bbf0aeaf30a9e0363cb6ea2a3f66689ba8a5ec6d02058e690c40266d003836a744573b18f5e2bc9cc5f407f0db24a9a5166eac9dbc70bd99132672ba2274d666ba0a2699ca127849611f9e718c85e5a1be9be2ffa72f075d611b86f393a8d45f9769ff860fe189b8988a2c10d612a32e0bce4e2754a9023290afb19de63c86ee6707048249b88786d6d43f534a43788678664c89476724950c53a11d9ca884bfa351f402fa0fe820a67e26ad5ba0cc579f044cb9f1e1e5114e97c3f72985443fd6eb4c7cb360321281f890a38ca3252dea28ed2dd6c1da13d1eca8bf1f5b5beb6c235c73e851ebd8e3c3fbca5fd2f955e434ac49786f6a3930e2bdd9d083224eedaac27d1b4d7be05670d68637b8df8c07b7e8b159431bdde5fa71dbffa53de6d5d20cfccebb68d5548f9f6bb6bd3e2cef4340e9fbf5759e5b946339ff2a052fbf49aa67754449046860e4ff5f58abb4e5373357d2eefde71c511078519a2e960472196191408309fca5159594339ea094344e8f60b81b44a2a0f81b997e00b63fdbd87fc568ad52abbccfd2e7a68d9c76aad0f537b95433891488a8293e221cebe765f664053e8ad028624bec5a0ef5070b992dda8b4f203a2c5082a35319167345507a0faeacff14687b44f4a67946bfe6d59d9ba652b72048de5f7a754c5f7056167f2add7f4be30d8972a314830e2bcd34d92d931564e60a807320ed32345d9a367a381a3bddc6880b397a3c82b7b51f2544f2b9fd95f5d1f58229537151b5921f0fd9dd594129587f2ddc871eeff66d25757db371d6da4f9be116107023f2ce5e8462af5e0295ff63a46c7cadf35a27c3ff30f818a40dc3e23459dcb527afbf739c74f8c09ea70d47518c85b67e7aef7f26bf006899faef76e076f0c6c946e5dc9c83521771a6d298a9cf5adefdb314b5a07a54d8054c22b879fff50ba552c218291033c918401fd611a7447dddad4815e0f56ded825bfe256557622a385de4b4a69e265c1efd259e2da6db19aac3fa0e5ca2d42fadb4e24c271fc078feb2be10b9afa256f228844f52309748f1919b0d9814f004c3e16fab53ab889e650bcedac6a720301e6ccc7823f6f1723e90aba217ce7a03815c06b17f9d32f117c387615227388e00346e97174c922bde3bcc4a5031bab252af380cef77581763748852e09243a74419db2aa0b3c1ec7d1d4d94d5e13a87b435840c379c4087e499421df69aea42568792a154bf292a879fdfe01d4f81fa12996b3decaeb4b9179c3521088384b5c3f845a9b7e1306c8a3dd3da9aef29801a456e1083110d318907e20a9b0ebb97f8f634922eac6028f191c9d2d35289c027b40d327f55c2679576c949227ef75f820c1ff93d9340f65a2632775aec3b20c78fb90245ff6ce1e9336b5b3356b072dba4485d79185b4b2055ae16964ea6387613020e8b706536d0f838cf42487f8882594e2d45be07ade0ba8d5f29ec636dbff868c5a45b63bd092fc1f3e3a6dce6f285a1e747e6de8517cf50bf6a37fb3711aa6db61502c10aee3497877c142144c8d3e429e4456867320eb895ebc3c62af7a3715e72290596fcb119f89ff314f861ae7553af3c0dcadbe3059133125ccfee6e243d3010b9f7a12fc9a5a3d5f098598fe5f2fd4d57365206c83fc4a6478c7274f6b0d36c5693980b473d4c2f7c9b1ce2a69672fbdd2040c480d004f1eee700525987c08e53f13dcde32ded81f1872861479c94ca081f34b6b0109877eb763480dcf0ac193a970f025dd5fc5ff7d3086649a3d72a50999a57f66fe3ba95a06b8ae1a9ea8f930b8822e7e41d2c1805397c1d1abeaf4f15de12945c6b3ca5fc31db18020043c5b545ba41c6b478aa94381d328fbfdb6c1a9c913a54b37074f013ebd0a791e87b3aa432dc0c56c8581680c43a615f01302e423e58e740f88b127e47bbe8f3e00bf230271713788d78f2b00b953e20e323b75b846092982760d9fd792a64babcf07275f1a37a9e5ab5bf224dc38489e3cf4c650df1c52d9f9ecd0dfabca95af1d131f23cd1a03c9276e2641555c30e758b53eb358d2d85d38d422c46e305690126c711634232d7d734f301fcbc88332af0745a85830a1535c50fd4d82e27497d5998700f7590f49b8867686e78227c7697143f8874096068ce5c94490e8d90c8f22c8a9bec592741e9c623e519406eead7ca06b8f099fbdf11dee6f3f486b3767909bd9306d9c48cc185b0eb00507efa3aec5c91593a5bfb37fd496380c145f86696a57f55b160beb82c8c0adde1111749218dac4e78e55f993e483233cbbce13389cecb697e906a263131aef260e9e48ad0266410c44c7ebe284fda7de48ca378299601b27fb811a42a3e51fe5e5dc4689ec34370aad5db3f31dcb6cfca29c1ad1c87bcb1536c47aa7e0e8e4247e1497ad3c0d4ceab35f764e18b61b9db38ce3ac93046f698116eb1a32ede7eac18d62a15cb928b33d145f7cdb865cca62e1bb9c61c5ae29c3c1952401bacf3f9691d0eeb200746d32c59304d003d68a97e5c9289b84315fe60b9f4cb519452be566091ba8aad8207cba3d6e5ef432e53ade36d8a70a9f12d13d321bb6cff1b7965534b0a47efbd5023b8343ec2317e334152934ee1fa14b6c9e75186da77aea91a67a3510458694ac908d0ae4562e8d6bd2cbc5d88adf119f7891cb406889cdbea1023353c720636200844bad561feac85d4312ce15006c5211adbc98d9c566058ef532d5cc724c0cd4908fafeb910233fdbaa33686ad646db3f274dec4d7bf4fb47ab8fe1c24569255d85c52dc2cde95fb580179a68d02d8a4887a78ef66e0825cba4f367edd89dcc8853dfef39985d49f44b3003d494d7c2c9656d0221bcf88cedc7ee5bc45eed378beb71bf680ffda31a7413213884e3f9544914c279e96475209ce739c058c5dacac5411ae88558df9a83476eff30b0a25bcb256c5963da93069c548e7c56c63ab779b48e35a8ed73f7013369b318ec626234155c3abca95af23edcc642c94cebe4614295d9eb29f4a2666d9ddebdf59dea4c6b1ea8647f21860ce68dde30e842d41481ae3fbcacd63f3b6c77ec904ad9664cad102cfbbaab347ee821892e26f4092be843f19dd48d2ff8967467207a8958ed51fd32d2fa4c801d784dfe016763f5efed037a1f3fadf716a23fc8fef3425486d022449aac89fb511d4f875b48071d09164943b14cad272de626ac7c5388cba1ce2becb34fe808c22dc2bfac3771f0dfeaa1d8e49a0f2296f8d56c3909b130e69286a5ad52eb2ae940242174c429140cd089c43996488bfa40a892b58470269dc3aee9e96407e42efb0037356c90f8f87e8d7010dfedc5b0542cba62623a1f5fe8112417e1c2c70b94d38b7e9f4e122b3b19871ac5736261b9de3dc011737da5665a0e896ab04627c41a78a0dab4e22d9cba53b7e55de486d849b76f10b0e406d4f5e3de5d34d3dbff31995cbd69fb7829ec6068be11be8845db91cfee76c4ec9a516e8737d512c0bcd55802a5d1d083592c57adce4372ee691067531939a2cf4d08e9148925655e73625f233280d3e7a0f6940784478431d894a2a91f8e00376398fdf6df8a5e0db964f93ed1fba80d97d790067eb274fb1ac4de226fc85fbd547e07ae99986f66f569c0c602b6bf7db44be61b2bf8b792861d646f988d33b9b614b0bc45b40bf2cdcd405943267cb07cc000c60aaeeea0c12affe118510ec4ff1963a06281d629991bf25921df723e57d06a9799396cae4269eb177d985357a5e8aaeb8e763073fdd241561d56327fec09adf0661cc4039056c07316e7a3fa310ef10e2805bd8a429cd7d0941f301d9fb82560dfed8749217e1aa492a3731526f8d078ada4dfa52db80039348efd6ff9887b79951028f77c3c43fc6f7033410e32b3cbadf8198d15d065206d49ed1f6fd71aaaf4292b97074df71b1bc287063d4935679763ed8a71527106acc4917489408d659b9cf19068ff8e51161ec0cd6aa8bfed087cee25e6daae6c71738d37cc314e49e9e03d8c07dd846eecd9831eecddcdcc5fb77df7ecb597b269fb32b1bf45c7b87d9741d27a6473a51ea730635a54e9763b882f78d99fa788e4b0247ac8ea9441a536a11c1720c69419fc7b4329ba8d8afa73751153e568408036c50b7f9c3e761f22fdc194af17dc6d4da626d15b446b3b0dd169d2235489baf3a6ec59c720b649f0aa5b494bc1be871f6396f7c388a76bcbd6daead5f6b4f38b5c85de17e582a4342941cb936edb05f6161bf39fd4b00b1207fcf479b962c842287072fae78bbc420d3d822279b25846301e5b2cb325a794c748858b2713b7cccd24befcb101f0cec87703657cd4fc946416a5169e78bfa8a7361486da38308fad2b2879dcb5e01eedb6c5c8d2a3716504ad57da1119b1e21a4e37f92d50c11f3afc360ec4e818d6df555fe935ae454cb44ae9d395893cb5b309566e9aedf7d009007e280449097b3fdb3832f065e69fd577e1bfa667aeb7e3fff633cd70336699d047521539106061c0c532ad6ae3f2fa9cb5eace05865d3f8aadf51f780227600448296238ec4af79ead64b71dbbda86520ce17713521a2841d43f1b75f2b6fde4f6fa85d8eb8f53ed4745c80edcab2b102d302bf1a07330be0f5e4bfa7389b62aba61fa99aca2290539523aaed5093b5fbd537720effcdb47c5ff2b6603043b1e28dc3aeb9e27d99eea16a98e236949b923c7c331af1b9a778e7e34593fdaff67c8e5b15f3e84d812d00f7f1d464fd8850709aaa45c5400d5cf77e1347862757ff10b18550c4db70981a925eccc116a6bbd9597e9763a80eb1f68cc984b3f3fcf57b8ba7d95f6f8db8570587d037261d5de0805718b339d1fe4cd50e526c5a0ee536b223959f500014201713ebad7715beebd9dfd19e3d7fcb60218bba99a5b558abeea08d6dc8f234db8fab220c4fb564642abbc90afa3fa19c38e7c3221d18d54106c6c7b21d8ba1f236f67f3af725d9b13c9608e1b93a0667e2cb76ef0760e460c43f4d5498f2e2cbd49d0920b78ea53cd7169709c2978529e6dfd9e9aeb40d70eeb0273d81507fd03147c8a6d6184e6bc2e37d6c5d7fa34b0dcaf7f6593dd9d94dc45b5320cc0167149dc5b59eea5ea8c7a6c2f0d21aea331f35d5ff4f23cf04a921f380bc8feffa46460733552d5d5aac076f7f688fe14ae4c77dedd98d7857ca6ff6aa9fc0d1f090eb960a4408d1e83aad8b00690710f82329f6a63fa35a3b77576dbb0f8830b1b8347b20b3a444bc39411e5a1ba900a6a6024814c98fff197a805f9a550f92a586c8bd5fea283d3d716a3177c79e38ba33fb7c1ebf76ef579994d42fb97c8234c45064ad30bd45d3aad1ca3eb40d409e93bc98ab6883b05f9d38d56282f785c6387379f4cf8be3e6ab1ef4972c1fa1b88eeca7a50ddbcc974d16681bfaaa25c3abda031b0db99fde3df8b46a75fce272eb33aef3f6a9cb6973d6984267bbe993e62d0a0a337001242807149fd8cb8b33743bb77d6b13333cd5206abf1252599eae1397a988d7921e34f41b1f9db52562efa9c92bb4418e773d9ae87a4398fe4cce34b0e05617d9352867d1d00ce137692528ede5185c638471ef195c42b45f060c396097e3575ed1ce073f9b6d7749afde5e2a93e08c3bca39c5054b56cf053232caacb679c0aa5bec7d6c6807a1e39ce1f3881d55f89db15fc5b530c811763a068e9e255e7a44394b70612023858e98f8900f6bbcc911a1a99630f4e0a13c84512e3dccdaacb4d5b38924a9094bd10be9ddc86560261f02e1e07e7de6a8df7ada519193377e8396ec70bfed011c355d7d81baf48838503ccd4da8b5224de5826ba0a363bb1938e3bdcc39d3532041f67c25edfe7b272bb73683b583dcb9d806cac37a22b0a55b26ef469b42467e7d3fae706a6c821a39dce32aadce5b133f6dc0611eba5c4975c64a85ec24235f719edb0b3827e53900119eeb9980e884a31f15229811082e0d2b9632346032eaa67cca9d5f16ecad0abf2d6e8080cb348b8491b0ef11fb7cabbd9bf47cdebb48a34244cfe820df9edf4f595a6ab64c4a7f04fcb02ba17f5ad7e42174cb8606a0f0561149da2f05330527ea575f0ab3ef07071dcd55a8daf01a08ef5929405b1b1622f9b23d2aa79506b1a80f6864474aacf5bdad74105567fb91ce4c9ef401e19c0cc4b21af80dec6a545b278cac5184f536a4f890c038e703e786f5338a41190a7e39f378837f5fb777ca4ad4ca19c46b329a57b2a0cb97b872dffbefea63ebe9df211a5fb245167784be1e46a6e73394516771e09856a0a49aa107dbfcaf80bf9744d2d76da63a31e2ff4bed2903f9fbfcd2f02490202a4fc893c0fda96c00170e6ac1e99cebf36ef9557ace39b43d2599a5798670725c40627ecf5fd7e49376ab5b8f9c285d68b5318853f3bf44279c92a6b70d20945effd22adb096f5d5f66d8dee5f9f741c28ef25f7d63a4f9e0e74d9e4fc188ce59147e5f8d015a208f6efdbd6b06f2e22881a4a3a126ce1c908e3454ecaa91687508d0e58d517e75491780bec8cd0187c317af1c664527f45e19ad9234d121a9d9612e838201c5a3b5e7caaaa4560d77bbd77b9275c796cb7311221ecf3d21daaeaa0203141716f4fd684348a9a7fcfb374a70cd75b402e7f7fefac166f67a431b68b32bec9d58ae462253627dcab85b5ff6f7940f14559111669d43a105122c4925a9c4b29a751abb9c63bec8c727df5c6576b1ebf07611e9d3736c2771d3dd5f684c950e175480815ed92633a433cf561f57eab04f4dafa8cce404a142a49d86ba0468a61bdd28c3f01f5f656bc37274aa0008063ac2b376da58d2b6816cb6e6a2390325aef859a7db9b340724be11df90dbd397b8bd647a83379f0f35156ea6a8532f31d88d5d55a6b76cc1d50ef4bf594e1208d1260cdd52e9335366860eef54bab472a2847af6d9dace3a889a633b8bc38f048de5f1c6ccd6562b1ca7dde82fd65a9213c5f9b2fc6b241b444aa67bb0a11031f5e25b5e7b66d03f606025bac010e936343922b098d4340b120604a84f505e37100694cde602683639992c8c8fce]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 85ad0d51dc9a58edc353adb7648f46f485bd8c727ea366e49e208e62abb8f4b4

tcltest::test Hash_SHAKE256-3.61 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex bc96472b868caa71a59f5ecb78c359e450170ef4d1baee379ce02f9f2b25ccc6fb21cd26f13cc88cf7c3a8cae63cadaca8f7b42e9ee6b9ec3fae9ada02fe1d357e2035bad0ce81153e46169c1aa17e3de86000b5c3482203fc706d1d059870e18dbc084eede9def4c35030a9dc99d57e58797bf2088734651b4b31cffa98ccb1701ccc4c0e36e512ce077f5af6ccb9573f6bac4b374bf4f8e4696d57aaa93a8d6e6a0c1bfc5ca055a6968a152ee332b0e75d1c29163e6ca59ef2a91fdd71c15dd1cb4d237f0417a69523d9434e864871967851f56f06a355930e6d8e5a986909df6919cc5ed651eee1d7f54d1c5c048395e4d515084ba1ee09e3420cebc73a7ae16cf77e63795613d3d96599610e6dcc2cc830f3a9b66f59499caf0156a63d961efc70a154962effb352b191e4438b35a24ce8f51cee147f9b5f3dd564dc7946e03f0b9dfad4e298c969629c6fa467a6419a8785289c9847465472f1dd12f6736d6050da1ddc78c85c47ff21c8d908084fd7950a9468049894a5d9bb89efbd030f85c7c18555fb75b613108ab8897741152e98ec29f95f5ccb77f79c301cd5e00bd7f9b8f9e870891df61e3e075cba3bdbc51a92aff8b17a34f556fd994046f0ac7d6d28433de1ebda18b0a57dfcdbdce9c4a266ee0c02da17447d448d04191d399fab7a29fb558335a04e27e20ee10e8654b9cfadde5b64bc8ff4dbd410554df9673c1474cbd53975b6802cfd3dd5b8fb9de535b616c3006afc4428360b026a35fba760ec5468f5e484cf1c972ebec291c6b100cf5b43966bb3f4957b9d295b368374c4583f169fc82fc25f788ca4138df7a299c155e20e05dd8c886a6fd10841282caa8133e71f6ae2e25d68fd90953a5a426653ada85081a2946bcc290259a111567930d9e45d12c3b57f2f29882fdf1418d04f0b9d44272995a56973c4369c687a992bd9144208fac52b94ba97c9c350ac407b16cad33e9b179e09f320877c5220723ada80b493b09aca6155c24c2f34871ca17736e3101fa0be74541d3487f9d16c27842e9cfc0dbac55ca4139e6be830cd87d6e95de3deba6d713cc425068514efb98028e38c38af824e4f91a8bf952fbcf6d9ec2a0000ec13ca541c43401e7263b776766f885a016bfefe445273630d50b52b4630afacbe1845432d747fea7230ea0d1e2a3b9a36e736583585ce7951f08e72ff59370ab9e4abb1ffa109149cbe1aee2afbec21d85dbc056b27190083064757208ce24364dfc3489bb328c278750ec1a1c9e2166f3759aeee219d1f2cf9a981b0b1f67f487257ad0890211d8fbe902d8c7e66a281dcd5fbc75c9fffd3317c99b7afbce5eb032d8b4e223f4c68ff66daf201c0ed98b4f893fdbf6ac7001688463e707c9ed7fc0f88764fc9778ba15971db3a381e3b278a1f983145a03b1094314bdb7ed194c3c34c860106c8810d319a5011165ef39d5246a19c77b20d876a01e9d809a7a8c21180891f3f65d1aab6fc576ea1d4467e19b11fe74924fde3d05f1d4f66489d5fc3cc8491bd7603dfb040fb3922a9be32a7071afa031f948c8ff3f128dedbfb049fd7813fc524a016e60d415ae104e321c4f19bbdedca58ea6f646c4bb78948186f4a8711a2962fb6210c33b9260e3cb43817a8184e4ed365375b96a139790e03f9cc9fef9af6382729e5d83f39ee5151ca204cf370d28d66b17f7810aed4d42c0606d0c1f76943d0c63f38d261cdaa6244b58c36997f0d53a37919815cc123fd5da0226fff19d91bc0c25c5be8d3d04d6c7d72c9127ddb96d6f082dd8c6982ddc8419de1fb2e816fde174bc314274a7c0b21059423f37f95128db90a87f379340d914aff32d0c434e9e60df02ef2a055e8484d7f130981ba1ef8c8f29288906bf53a30b2ee2529d3aad6abcc7d5b5b42cd9b53732ce96a6cc4d8b67bf85050e848e157e0755838b2e6902c3e4b8b02a980c11e56b4b8c212cad58c8fff724014ce31c872118f793a68bc982ddeaa1df4ca63b612f4a10f16f9985115f117e9574ecf8a5107f275d3f701f88380df348a7329248d34cadbdf19c90df51466d11a9266a563a2abb3e65a0753277652d0d343ba6fb1bc5badd5f210c917b18882c3609c229229dfbbd95a77b1010b2c783702bf9f64d37d0e604b138c630fa484bc811908c5e3b91616bff91af98695b51e77dfbd90c25785e8ee7d5ec178e35d6bbd865fe4195e4b03513497f72eb40ef06bc3d01cd2139ad5a1f44719326d973adb8b30d614f9e20ad7d12fe34db20b15a613e0f048d6d58f2d2050538669b990a5cf828519b064921b77eba529b634f6f076f6f46fcbbf7e5aab8057bcff4cd4e1fb5dd873ab5802e3cfd1250ae912f9119418108e17df0bef3ae00d1c59d77058b6c9b7681346c4f881ec4c3a732c87d016512cece5bd9cb678765dee9ce2cbd2a9cf0a4210b63f22344100007b0a09f6a4a630d25be29b750a4c3079f3f64d177c76b947c931db2890da2aa32935e54be5210488a1d56ef59b6a6c06849a5eeed6c7adc0673e00d43fbeb36ca634859782c99056e01e7ffed1d6fbdd775666205fc8ccf4116616ece6f581a31a8f4fa222a6bd8440463458549ac346f5b2cd76c083ff2df030853930887e90adcfad346ec17159e8d4f7cacdbeae892637fbb5a1002fb12c24b683c27e907a857b06140e21951e01502f1de448a3ed316c59a8a94642caecca0f9247dfa1abcd1bc10ba9ce121cb2434319404289bb3ed94d16815d22bd58abf92d65b39869ab3848e1e7d1ce9824349d868ab34a3c770740c6d14db5d59a4edd1ec4035dfd4759025e7231b3dd7eaba42c69a4cdb5027d9b81401ee559d73b212b0dd6d8afca065749eff6a832e930c0d3861cfa7107c3c40f76d998903afb2f1de835f1c65cc7af6c092994de8d4c59428823b9b7af6225381c86b8c3e8156dbbfc27908c2425728d66d1612a9186d74218c1f2ce21e124c4da2b2c3b0c1145cff2b49d474ba70875aef6f65e1e67a39bdeff8dff86c82b7a57d2dc3dcc781e1f71e40040f8d6daec8aa03bc25b76231581e4729206a0a1233c82b01450d15f7522c0a1bf54384ebaa2d8189d713bc077aa798acfc8f0ee8730449007c1a47297ad4f680b8757cda69da57539873ee28b00c5bbfdf540796edc1f645d477abe4db99a3e6eb8bbc07923103adcc608f2172cd0ee66b419aca0e71b145f09d9ab61eea7092e10ea8dfbde204fcf562056e4d5a20c502e01eee4fa408855304ca199f680b394b66e9ef473dd9c5a5e0e78baa444fb048b82a804bd97a987e35808bf762d22e8d2cf592c8d4f0ac4065bbf6141bda5caf22440c6d7275d3c4b87489919b440728e93286bd27f7f57788e92a05315f0e98b6e1ff3f1f88dbd9060c9f0841ff37910447278ea74e459d92f5b408254c6ab7fe8ad53b2132253d96bf48b6276254780699e1c7e36221354c6810a78830e56f61a52adc37f02444e312f3459bfbd22078b161f36ce1fcd0edc6cc3daaab033178d77cacb4417d81939e3b11104a353cd314149b943c5cf32f8833653cf938a0bc88273736b47595f0b79cb344cbf22f9e38761b09dfb60e6a3302a89fca1a3fa53dd6e63fb7c0d4b30574a67a0f9d6b32a5031c2e5a8c95264db662438c1c50bb7ee8342fc9d3e022fe7f6540739b9258c047f9822b653a0c3eab3cd8cdb3a667b1f7cb9779232af909097a389671174930b14d95c0c43f548c6d92cfed8483427d7206f72433178dcb9f4fc2e6b27cbc7ceb82e9b92e47c7cd7a0e8999e389d447d360df89885859accd605ff2d4350afb3323fe8307d5ae685d0a9621652c8597b873a0e7975ff523005690395ad2bd3234cb34ace55ba0f3930196328dddeee38db9fbece480e8d4d49ce428cac85bb87cc33ca54b5c27d5989dea3bd23068b1cf9e30f7f47d9d18b6addc5f88986f0457b666faae59aba4fa3a02abb6a69b98fabaf0a74ba89a9522f3d93c38d55f9c721f541b92d6b4e814608010cfb2efff9b7abb595e9459a0a6196b4d3fd1b5e7386874867d55dbf593abd2f961e7ee6c2e67e1acb1b362e1bc892311224ffa8b371c58d9d2497973d4668bc431a81f55200d141fc9984eced2cd71166492a5eeeac56174463425d9734b1b1f9395eb412cd4b3011ac565ce8550d5cb9b3c3088bfde4ee42db859aceca3f15a2c13eab681595f1f39ad407750bdd1bf2abf32ef42d141b81d189d54ad1bbf025fb4863bd9f568c88ab2874fa15ef55f979e259900490a5e79075967310cc4a6a2fa5637a343707ba29772be13cea12b665b710c74900945e5f7266b1511b2c59a57c33059ce06c705aecb59048765a11b79bdc01c60bf1cd85a8cb6c5a509ddaa4f65cc89ff8c39288ac9971013c36f2b6b544a6415ac31b4b3e4f0cf412a6d5753b652904281207f9e25fea2ee4ad41ab2ed01e83951232f95d7af9e7094e326172d692951763b9f5b490659916c8e6de2d08d25463e6f9d72cd39bfbde9dd9aec4386a186dbd8fc64ab34908798ec997db75287b6c48582cd4e25bf8399bb2a458111956d42971b3cd50fe44b507d21e5f9e89c2593f37427c2f9fa5c151a68d57ec0717f2ad470365f0ec15733beabae20b5eefd2d47e5f4d43d0cb1fc69bafe84e9c236f54f9ff391a7b425b33f7b58c450dcb7e0e15cc6fa55732fb027a5434c14041f42370ef7256139514f6e25584d3001e06f5e5d109dd9aa2fb0e2cc262cc5b3b2924921b372c1cd4478c94e3f33d9db01191d4b5437403e3caf198419bf855d7b55e48cab125fec89bfef4a6000c4e4848ebcbc246f1f9bc0eb3a51b07cb96de41d97b4508c82139b953e9e8d4c77ab0530ab33e3adce3f7705d3d96cdcf8617749e11d5639dedef48935def96f688aed9f6727247be2b5a97f647fc168c8d4cf7b4f4c0ea2dcbb1f1c637056f22e20b82b8f2a6931d38ae2c86aa930989144371230a4ec7ff21485cf55f7087d2ef8ef8571922498472bad61650a4cf4e81c58bf43dc91f9c587d3028bc78058e1701e0dbd12d8f7841483eac20768f633e9aed2e73771d8ad9161565386712dec22ae54d01108d830d1e0b5302537251b18a3ed996a2e6530bdbb5b6ba83d54b58d3adb491146d2c3e05e610de81a09f445d26fe8d90a57e5596b5222b16775c41c2e018687e54fb3cc577ed9c4940d55eda4fa340898094210dc0b171661f9ae6c0278170996c79702665f125f37a7b66cb5ed397d79f1cd6097c6c75bcf68bad942af890acdd2d40f059245fc7781ac6f6fe937ac12b9edb52915a1f5f24b9ff089084b0fecfa015eafa8f330d5f39e523d5edd18e4ca39ab0a8845899d0ac45e2012eb8d8695858def139890c5a612b1c8be8848729b27aeb69f006b022eae5eb27fd9182d3df6f92e52b4a0d8e1900a8c98c7bf4eb53e3ca7ba812ed43fd49eba7f9214436bdc4ce7f6b5c5826e9cc8e37e29f1db90e3d1787b465985b6dd7aa2c2a5166ba78bd5c6703a9354859f7977cf1d649bc6cf198341ae6f991c0f9ef5c990a2f869ac40344fa18ec1df2e98b40c209c11cf465162be47c570e801683df4d32e9c3ab408abe5990c4cc3b0b322d5b21ce002f0258131a11fcfa34952f5e4eb2da983199ba7e27fb067dbdc353e9c604b690a3302895c28c2e7c65e0b981a5734a2eb6365b2c6c40fb5afe7ab81c0b9cc1f6da584c59e6d436bc9a5ee9ef595c83acc18135703147e8888899276f30cf39575ce08d068dd35ce35b7789517254cc3bdbe10ff07df81832e38669893f8764deaf32b344c070e71931935f4ef9456c038abeb257583bd27e95ab46143fab8cb05db486bd86932185a21a358ff516ac2b5981e74bcaf85d94286f85b53923f7f8eed0ce16e72450503874d1bb6eafd4dccd907474dc17029d2439f01634d7eddce8ed52faeb0cbda17b0afb7b6cf82c3d7054217c958009c10f734ddf38afb884d572db0f9b31b0a1f2427d77f8d9fb77c935b808fe1bba27738465b84e939f193cc931fdfe7c707825851e56193a8bb1609cffc31dd15cf8d7d400477c6be9c3a6591c6d1cd5474d9c3ca5c1d8032214beefc052fc88395bc4cbe637cc1fdfa99a8a6407fe257b48e0cddb5f3b1c09c86a97c160a3299779c1d1de2e4697c9f4a0c4d072ab52559378a288d94d6d88f4ecfdcb93189dbf7a564eb1d4f1bbefcb406f29572b461d53ec2174d613dee6c0cd88a59365caf9850baa27d3d574985703f3375d87e71bb3c5b466ff97586d55949f1909929a8dc2694d08d0faa80dc070b9c22dc61f97d98ac227fce0c163dbc9aced9da5f4c25af79f1c766940972d1027926ef0d5d8edc3b38074f6031179f516eaf6a8bfe1753d092b6a29257cc669a66ec90ef12718f8ee360fe204bf589f45d8bda2e5323ac4f1fc57423d04b5059f20e6275acc81b2dd1476abaeb5a04fa17f999c4dfdd213c058e3bd72791f6c786e6c43fa0f5278e7e15159e73a788d92a6339ddf8a65b3df07b6a1ab212f249b21046ab837b0d3746447f5999708e2801732ad83201a2ab4d179f6d0460ab76e0155a57c8ec54aec660185ab1579d5d3983fd421091902a97ed4c4c82edbad5bd508fb2e5ab965b8af271405faf3eff3f2021ba18b8bc225d56e147d21c88cc867c475b7e4b4ac3e0760a78f8e9db648ed2289ebef98f3909ff0edd669f9de1f7d321afd74dda8e7365448311ba0b43b504827e87d671c51a40158bb4d972ac7e0f9f2e9525ce01b03acfed3e7247132e51bfc7e7c21c5d2ac4a5c1414caf92858c20563c55adc433810d25d3b5074967244109636ed777a7f7301c907b9d2aaac355c5416ff25c59b27cab75f4c45d0c06a6b19f1f4b8b1e4234fc36e8d3db5a6f9fea28e72420bf59af1c99b416c46973616edf65d13dfa5024fe8916dc2b10cb7f33773dcbb7b0d104c7c37577162be5018fc8d510d6c88b90821b782ea06a71644f90d64197fad32e5b67ab5dd8bff5f792cfdf830c156f0825729f43c1c3fbff8d2a633e37e9ba8c360ae843828200b416790790344d64ec67030ea415c9c5917a98470a1e0a019ee6319eb08a3eafe79948cfd0e5ed27cdb56128c7f2c858daa65f044dc0c842e6fa50313d76325dd299b3aabda771022c9ef170380f5c303b7f032d71a6c0f8e4d10b6232cd099535764e2aceef85ae799258977cc201f6249319250e66709e1908b794490520d060dd6cc27d247767352deae0fe9135e53651058d7c56539d141fd939e8a514b9e52db3f450fce2c6ffc04d0f461384b7d1575cb9641ce680466504d58a23519c42f5a852e2cf44683a07e354ebcf6ad89604834b2e10b5e220a6bef9b60664020aa3ce409b1208a564534254480b44b1e4f71db562d82e3d43236c18e4d4d8859ce67a5fe27bcc291f30eeafe37dceee5e8d908a8ae9cbfc2e8990a5af050b817a0c40f37152fb4dbb2f4cba568d55e85356603d0ebc1b993337c1426d1d89a042a3b6cd903e129dd8bce0f619c0763a73e0113f76d5a9bef1cc7251b794ef4c673b5020f793ae83f8584ff595adac5f30a938245bacd2b80a96286616f188f0583181bff00a2bba8a9fee3b62ab64b10a10296e15c8432ebe4357f1f3ba0336a634efdd11f8168c0fe25039f9403bfa70b3898f4dbe577dbd529577d664ca79c1a3df0ae5f3fb8308cdfa63d2129e75f501bcfa5bd5ac4f6832458a47786b544b0cf3ebe474473a05b1515b858908be17995851d8c4adfe4f60fc8bcf6b5230a2eea2d285ff861b774b09937c2a075d58e8d0083cf1d914e36d3f0ec6c40ba959b7807152fc4491ede9678e2e5c26ce195ea8a000f3aa2dc4c56185d6091428eff6012ac400ef57da1b1fae24b5c37b0989669bcd30bda353f8288375a0f839c628a9716193f2b7bc6e7695f7cd89fe89e78e5dea3f70102173e87a1e2224568cddedd7a42c0b4c053220b80ff9c6c32b078488f0766deeadc715ec381324f9a47442e0144f858f553492a6e5b126635d57ed8f688c03a96970556c6bea76ad9d9a4d0d2a64edec2cb440c511ba0549a1572df3cad6eddad50e1b5d222ea5ecd8ae60c17f02c10cec5fbf950c4b00008783ca388ffd68fd80dedc30e3461f31f62f22af5abf9b4c248563b93e0a9302807c56d03056118bfd811caa37c75f07769b072965e1c93455d3d1943f6f3ada2c9f384d447773f09b83510b9828e1f7ca8092c2291ff75000b98da888ff63f1dc7af32254d81cd5fb641de76cf1546d726e39fc0cc09229a5a4fc7893219ad4107e2bd1ba0e58b68d81d7c05ea702e30eb28149998a261bc524a286f67c7c1b793726ee0c70d3ecd28b2328c5b099f2d00bed3d57c32fb0efc714561b765412773498d9c4a5fb135aee64834ab4761796c8f249b0121b9375fad6588a85cf638ad4d6276b245ab4971a2052461913bba37814f13add861e083e4d10cc414a8934b6834978526f3b179cfb3850551f6996a7e9b670bbdbbb071ffd21493f51fe054814d274e6a5214ce53987e1fee5abd0c6d52bca039915030e7aec89c6822c6d17ff34d9278901a7918fc3838d02fcf2535ba3df6b5a967c882ad5167d37bedc94c6f31dbba756c810429dad75f3d76bec01b0f9497cc9e42ba19d77c9ff0fe44cf09fcb097c8b2ee01668d85034c5bddf5bf5d0248c29da576388164354aa14bf008d69a775393c8f6fa79c92423258dbced4dc931530bf99e5478a6fb507de497b6e620c2dcb818ca2ec52b2a8b7dd3fdec0770b947914719b3e4ca5bcc3b1aac5955cae12cc9e6674a9a337d4c0bb9a005b47f4765d696d19dec58bc8482f2173a4a203a0b6d38b4961f6a852e76468e807c7e457683eead5cb8d98642fb76c0a1eeab36414c1899597d57aaf96782ada586f61a423f57953771d520cc4ead90d569f23d950f8dfedddb8355748576e6bbfb6f2e91b3da71753fd2f4ea229f6d20e27db8d05e9fcb686274ec687929220c026fe92b867e295f495a69661f5540c881d50dbae057e84339b4d99deaa347dec480b3d8614ca63db8f4e707eed6f2167081a61b3ebc3eb68acb82db81ed3e7a6929f45fec4ace57b329d694372a6952d409e9bb20d7b3087a3f51eae60ef02818f31489ce828af4637f9fd6a15a8fc4d8f640622cae3083339aac91c00e4430f9647b1eb0fcc35df080a895d56d4bb4a1cf12d70d4c9e6ddd63fd99b7f621d9350691e639bf5fdb81b45a987b6b84695a1cc7e369b6e30f9f23abcb74cd716cf461bfa812d348b43ea21da93a5d242c2966c74ee9f6e9b1a2611eed9f9b1b315dfb6b2ee240643050d25a8eba4a1245363379e03412969b0ea5bec7e0690770995eff3e520e9d99dfcc7710a43a36fcaa0e4760f315d4140a78f323dd3e1d71cf12e1a10a46d9351219def7a0357898ad7c9898cd048a65be6025c74122457b289d7b1fb1f0024e1240f50b5544c0636607d54e6be9a0d753e7bc7cb21d67d8cc89337fef12ff2a07c926146c6ef6a3fe36644b74cbfdb0f195200ad8386bcee25e738b6eb6b811183dd8d98cbc02a19d91ae5791b38b38bff1b9395d7a39a693a2a209d3e3154d6d2272235e34cca569a11b396aa831b9e683f0d1e6ecb9a806df27c2c9a2fe252f035eba8ae13df78ded14bba6b2d7798ed32b991e94d41b649c6c7ef6fa5be086650366b7c83bde2ffeffa3edd965c1dd6ad35aaa7c7049d462d80402f314c799d2c9ef8df3afa4785a45bae926c4d9fecf51dc35ac76787fb8d31e9695112291d1181cb669828f8f8b4fc840a0da09178a0be7652acff18c26c5925ae93b3995eb58b6d7329ae89c1984959a50909951246b43e20061fc24341629f5f67853cea6f1859b57e1f6c98a4be8a03ccfd0d324d8b7553616e06f6b2fab10c4b1b9648d4c51a7df3e033c680e8bf96e7df8c612ba0d66d2d5e7945276e0525ccfb47e25cfe2a6d298551d3a34444eee83575177780bbcde8557bc72549064c5b88a44f8e3003e38d935958925dc47c2ca359dd97c7a006110790e513282ed075683df8df172171ae8ebccdc481b8bf439dcd1c32d21d9645d95b379767f962b8fe9776c5f01da7fadbfe9bb07c8c38cb79316baf3caf0ee54f3d2728a4f07384d02331e96752f7010f914aec9ad96902ea19448363bec07ddda94c2d4bae73677183c2aff96bdf4f9e0773ef790ad0a854f72f45e3d77b7e09421f3be88de2ef571ba18012b2d1350bd37f2f73aaf01a4e5d946d39836074567a08dae809627af55d47103fe26d5fdd87f533273457e73abf0c7fe14d3fef49c39160e6bb4298c0eb2bb6fd55143e87975e810021788d9e8e0fe4579f6a5d67a16184511e33c77e37d81ac795664fae84139fab1cc27c1e6d074118e4602d14b5c1abb3ac969551b5d4822b2dc41196c0cce56460d6310ebe9afcb1c6c20ce5536a5d8ae0eb70fff799a39478be02e4ffe308d8a8145af405239d9eb0f04b6e2ca4004345b2f8dd7fafe59020d4b22d73ee60845d1d4862d349aa5c3d8b86f384073a79658d7b7eb07fdeaa9078adb4df5782e3fa4197df9b758956c6f43e39fc1c6299aacb97582c91e540524a343f94a6f663fa31a7dee02fd13ad7badf86175c2f209ffddb0e568e9ffde09a0412266511a0f76e16c523e118650a5fe98c583ee6aaafb494e5d0be654fc6188bc1170a9b175c476346e921a561b943faa1213d2fa4746073930da9eb926d2649e0f91fc933a35dfbb8a27a2ead7f07816914ff708a6881f57a6fe989726043bce62f1d427267226ebee2530ac4c63afc48a5de4fe906a9792099f5c57c2a1153452b7b8d7002353aae1b34d034193ee9c44652142cd9379d19fe4735fc34efbb8290c310b92f06ce2acf97f577f283c850990373e25adcdfcb2f66419f0b5f3422d17c629a27f7b7a98205111cfcba26a1f05ad58605d99fa88fdb7eb137e08baa801ff9af97b875aeb504897f7242630cfed0bfa454de7b56920f53ff2513f08e0f164c65f8a996aedb0ee52bfdad3c06170da8b9e25be149f87a57c57d4a2141e107e159b54b892e869caaaf196ae021db5a173318c27ff715b4f0a08b238c6a985d4f07782ecba22a2640853ffc1de4be5e819c72b285e26c47b51cd910907cb79eebdb9bc3dcae48445d2afbe133d322738e727aacc1907e9b2b9701a1ebdca1455e52aa9b4aa7637f472cb7aac051ba417441bb018195cf37baab7f47ed2ef7d90d192f2584220e2f94e6fdc95204e84109869e516446d095f8c6cc7312c82dd27e8b93f327a2aaeddd0658bd57413eea84cdaf3cd838154e5c7553d40b5cb5ba3916637483bdbc2275e743074ebb20a69c6367f45bfe1fc95c33bfcb25311208b366382a46b7d475f6263737b6c7201da6f453487ded628f7e8e5ac8ff09e54673e76c94ef456640e43fbfbf1de9dfb83afceb79acaa600949f1df6e073b81dc01168b44cbcaf42bb690471de2b791fedef9bb3866999adf34ea982acc4a8a61c1700eaa8adcf08ee3c467c4a3a4f969f9572ce54a5f9579c5f52f7fbcbb61506b808146aae00df2f2488c53ef36688210b1cb00b640c251838e0fdd5702993035c46d998a688ef078994f4c13e081cfcb76102b3901c40ee431b3e439b4b479d6b84e23c7fb05ffdd330b0dc037b7ab703086c55106fd0a6e6cb5f4c34625a5b4d88d65d20c0589a6a25a1962a08cbda56db95f7cc4dfcc98bb70bf923b7f3c56a1a5e0471000164b63a70f79bf737ee17a026a4ac00ecde99a8e85150923b642a0422385ab783e52039c5073f90e57ab020c66198cfc96d78669e5ca33a5abff60dc901c32f05a50ee847cffc1bfe0688231e387801bbfe8fb9d62205f9775f34fcfc6794aeb02be9119f56bbdfa91a0771d63034dfe91a486938ac5c15baca4e9a6273b57dabff1a7a75a465250f3f95d19551b4b17c480a3d6b0192d74c8aaaafa42c0ee41fa907ec70c2e03557fc9a0c03a4e1bf9b113efe18298d875527b203]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result b0fdf72b82c8ff335d2011c9051d71a4e9359f3546d346ed37077cbfdf7b4270

tcltest::test Hash_SHAKE256-3.62 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 0f9a7a41e1966cfa4dce8f718d63116a60e8c6bb5d691e6687ab550521b6e96bc4915188ae4dec8d5d4438515da344f35e2668c28923335914caa50e14ab9e8e937997c1e30d90f431ad49365d8fb5020a99ac1ff16be0c57a9f12018d4f865aa5d8b4b527de4076f3912ce8382e4ddf8cc8fb9c3c480df0e0b305a533ab87192239102c23c9e45cc876482f9488f2d20d3bbeff12c3a2236f8ce4c1afc68a11322113ee7fd564efdae605d31aa68d22b57b5b111de287a64fb4181ea8a9788cfb1a25c2e20ba8745168cb9b718f0718ab0f3c9a02afa5c1a7b30a84c75a37d0a8abae71f471993655850250414b46fc187fc7626c32e2bc9f0f21bab4e3b1255f5d16c45e121d7c0cc312ba34e3341623546630017227de6152c48a164bccd548b6c580c8f31d8da1ad64a1f05eb8adf51580cd69775d7112035dba969b72278d402370d91e82b23ac85ecd1dc4b90ab54a7c024d496abbddab5313dbda8a625383995b3a9a3233009e6906641e21768c7cc49555f13805e8d10e5d8e10fccfc5068d08936f17581ab6ee136d73d737a232bf4e2876ad965bfdf6605646b0b6085168408ba61869b09853bddfcbc3951ef4d5f76fe0b3b85fb873e3dc838d5f47ec93cbca451cadeccd02cc622ecdda284a6e56d13731b11c88edb0c7cf7d11a8607471f9570d6df4dc6108a0a5dd4ceabdf235f7840ecab9f8cc8dc0326815533375fac0e1d2f1f04dda383e37db3589d4c95a88cf344b5e8d78436fb534b471f0fd2dc6ed538109a9d326e7edafdb30185c8d2d1e8a7c35d1599a7b5fca332a1c73d3b48278656676b69841cd4187050f11988e7bf8a4634bd7598d3912dda54141b431a929e4313fea57f4e279803043514252ed660d13835b4a4c49f4f90be6ce98e6694e478f89d72ba9314010da3c8552227dbcfd6b024b33619959ce839482477acacfd7aadee5db08c47c7d2b801391a531e2bd934f11dd733127a536d2c58896d494d9aac57c31b8a217104a9965c78413c195b4f213102b1748c64c28ff25e2908598b7c704f362d3f711600fe1bb662b3fccf674bb933155a279ec1e98e405058b5bf76be5eaad6006c89468f137f47f45ac805c70302cf31f063e3df88ea83b8c69953987de42502a7c0f2efc01d61abc7b7b3299adc4f7a6b46b0c88eb723b710bb7b95397c8ab4d77f8e86ae2b3018a820e7fa0d3a26b1ecd9b14aec20c0c23898674afdce87956ff781fa2a2333e990962c9ec6a6e567197f5dbd3dc1db6892b29f104764ac32d5db75a0e09ffd7cf589e9be53acfc1865ba2eb60024e428a39c8b8bb2e9591bad9dc2115dfbfd716b6eb7af30a6eb34560caccbbfa47b710fa8d523aca71e9e5ba10fc1feb1a43556d71f07ea4f33496f093044e8caf1d02b79e46eb1288d5964a7a7494f6b92574c35784eece054c6151281d80822f7d47b8231c35d07f5cb5cf4310ddc844845a01c6bfab514c048eccaf9fb8a36edec945455d7fca01862a92925960296269f16ee5271df5726305a9511060b615486fa62b9033c9b45cdddb90d686e1bbdb2054dd46ad811c72af3035fadf84cbc32122ff3db89540e5b6f2640fb7b7f8e2cff9d5a4c1bff43872a984e49dd53958c702e6ec76f64e2a9e1e388c5c75c186e6a6f6c7c375a2bd375b65570270060e4a8f0a26d5b486317ba831d6dbe1bdd04ea36839196cce09e78f01da761fdbee900e93723d968f0437d879749ec495c7ed3852822d6c1f25688d7ff561a860fe82caa959166612abb8f638ee0be5f174acaddc28653d3d18a49d08302bd43c48080a7262c8eab62ce84a95cd8c0e77dd734930b52ba6d1ea8107c4143c6b18d40b151915bbeb2491ad1cb9978805d20c2b5673b1e67083a3e912da28fc359ba87134c4fa573003e2f1b3ccd76793a809ba1ad0a2fd63fa4cc30773f4d4fa6ece24af9c9a0583fc259b58f5129080a2da0ade6d12da47dfedf72eb6012a81384e0acec87c2baab76493535cd26d94678902e97288e4e4d98c6ccfccd66793a22e0dd97028336edba6c1ec2a9e6597a01e8985088d830291330c32dcfcf4f854781417be27839710f40d6b87ffe050f49f89f857a81f68aee9be9f0ff93778f53406d1d80085ed00555f179a7c46880c16e98b866120dfd9b76a5d8d579ada2d68cd4fe63b9f3851d19f398c9d00078f8a9186bd40ef2fbaa3f8b57d9d84e8a61e50d911613b3fab70b51984ea74952604683126cef220f8b851ef07545d68055d77b780f9c0cbb73b89ffabec0bfa798b58d3e69292793cfb5b5355038c23f52e2a305d8b96a41c390333292a2dfd2f2749b6281437042d76ff288c327be11c97518dcd9f259283720cfc252c4368f0e0212012dd4a87743026b8d76a916a22a3d417fabed45d94ef8aa4c77bb30166bfc95acc7431cbb831b6495c313685b0579b130c6f0dccf6b76771399ee79137cb29ac7f615698a28299244312d2fc6ebd8fcc2b3b38a852d289aca01d45df0b0d295d532d1fb6da2ab591b592cd9503dc96897da9bbb94f49da9c278137b58b8bb2b76f5ff6ec0731f4d7da3b901918bc99912d41ffc79623408bf35124d95e4faa00fc7f4203d1a03c40d994814f5466812d618b6c9ace68a5bf2f1574142d61fb8121166bc4e27e7712da25090160e134a542106bf9a021f08101568e2ea0c78b8207abd9f4dfd38c96077791f5e3359c41f75762aeb4550919919adcef5e8b444bd5c6f35e73a7631486117ff4866ba049a8e8ba7fb10cd8cf086cc51f10b50c23b4ef23c94403e4d47f7b3cc6f18a27047f4cdc35404e44eb8e51b1855d4bcd54ccafd1fcfaeef71d1b3e3133cb9a1bbba10a2e98082437b44ad308eaee576e24448d63c03e71843981e1c503bca463b639aa1a6fb2959973657933166ae0d7dc451242ddb893736edbec5ffd6eaee73d6db50784e5aa507107cb98d17aeff0c3f6c4d61b0f5cac054ee869eb86c38f9865b25d9d4a6a45f35652a0e3c68ba123802e8742ebd41745045c4a93afe8430e4a29838388dd60447d95b313f5bcd2420ad5be19f6049d7825d06abd8f27ebe844a2e3fe480b8aaba21d3a2ab08a6b6abd43e169d5f324e4d8cc3133ce876f6f7aa6e4d532fda96fee709bf19efe54e1c1ff5afa33a995d346d907bc1511b7e815bceed2edbaa6d98818402d681f75ef3d918f94b62fd98b977e541f0ccbab9e3c6d69bb224a6a31989d8fa9b5f6b6de5982eaff068cd655f24480255abf34d81840bd5978b6dcbf4885f22c2e8900f43f58d102ccc876787fb2f396a7f538ddd1bd53749805e3cabe5ad07d7be2397b149eae67b0eca03e6850153a9d73a0f68e6c91d4293f699c22a3916543094bb903d9e8f459ff3cedd2a64fd8e243556b77d6e040d46d557b9de99cac2e041cf73193e772700931cee73d073a1e6d3e84b682a98141958fb057b35b1ae6dd967cc95313a89c136929cf9ca626faf7428970f8525f17c2fe8277893576109ca092f1a2d4608623cb46b24b95651deb4bc1d0c145a2fff98c3b25f3928a5747217fd1079260d6443f6cb7d33bbf31504075fb64e812a04420228b7ada1c60e8038c930ab571337bade406bbfffbdb2f08ed1c69a577a3aaa27ecea576f5d6862d015c33a55b45d2fdf7c88b4be3c58f8d715959e398af34fb9819fdccdd5f2a8726570bcae6b55017ea25cc863d9778b649dabb093e6de811b89209459ca3dbf942a9198dda2bfde408440517d2f8f36bbcc817813184d0cd25615149f94ca16b9f7de554fe4ee24a984ebe686a910694134bf6b2399df41729af5d41bdff84c583f9f8881bc70632e16a7fe0cd0abc1a978ade041e605ad80aa4b693b0668def3745d992f93d72852cc1d1e7c20a1ae38dae5adfa7740cf61167e3a99a29c3d1038a10d860592c29c17b3be512392ad840deefab9e82125b86216cea43f02f542ef026c418c33e08e8bf46428541f3e1f74327d0c93172edb1f9dabd7362d75e029ea2bde822af09e9b57867e3c77de7f90589b6f02a3696d918b38cf127c5d8c5bd0c2a9a1f88130b865cbaf476d1d08f4b9dc6dd15663d48a582be86e801abc074ed75f461d010985a77a480f3f686013dec66579908ca44c9ccbbfa4d91bd3beccc05bf918fe7d658538e4ee9f4ef9705fdff255e262416ac1bea15fd7ff87e4c3142c256ce800ea977de27fed4f599c858fa100dc7350675f6b59ea1d343d0bda494c75994c387746bfed3da9d7f4eb186bde04ef4e45b4de6835fe093857b67ae639441e9988be2b8541a265774ffe50eb25dc8b4195f5b72bd1e63c9a8c571d617f3b7d5e7601be54ac48a0abef48f78404e240fbc58c822c9a4d17c93f704a518a96361984f467a4698adbf4475d54dce7d090db68fbb7e10b9d3b52e5847a2cf81ec9493a08cffb25f387eeecadf14c6b020b7ed4c5d0ffa24117b61326355a242fb77c09b14fdf5e1d24da43ad6558fb011144ad7d55cf0af32d614cb7f46fab33710078807fc77e624364e0ee2999145832cb5774ced5820dfce2f6dc4fe409e496951ae8c82a036d640d48f2a6634361e081775ea4b9b40bf6c9a5e5a04dac9d88a8456cc19d8988f731e02d747e04d8baf5619d6fd22d77bb73ee668e032fc8d798ac8ee4887d6f7d815b210c1fd5072295cab398b54adbab8014f161bae011040494c1b9815b6b7769fe6fe5ef3087a7f0f733a7e98892575ccdf8e3cb89f08e7ab2a7b8fea017756a5e5c9a52a3d4cb859b9025d583563f888e0f5cbb79d1d7497a935b76e7ede7e10f8981e0bb790dc21c4b8b0fb771d491b98765013c4f8f1f41272980af795f8c6679352fc3dedf44fdd8500e918fb6e6f50365433dc4165acad59b8243244ccb17ae4c866990b07ca4c91d389e0a4716a4f605f81ad9fd9a6c213a126f99200b879b008b291931d7c5903b44596c159f6df1af764febb54ca99c7db7612279ec2ab229b46ee2d3e4c4c04288404f92ffa468ca644983dde007a9eec7e45acadb9595f088c778073226cbbb9aff0f5fa5dcde0f38a44cc7f30acc05ea45cc93684cb92d7eaf635c3e60251ee2c235dc209bc3b669cc81040427854b9521d25400b49e191ca31f3378056ed4f6465d890e55bc788e3ecb3281e268283ef5269d3361b74bd93f263d6d9b0b865bf7d0e6bd9f1ace0c77a5a40adfe7446e3c13cf7ed8874e3adff2da8d758dab7a635a85bcdc812f7b138af8fd5474f89953347b518d9098c8020f8b563957ace7f534e68a926205307f05a1d7f4b3ed56f6f32149f575a3f741f6c0666b1c030b3a0a79b5554fe7e326803f2945067b1d83fa41d6a479084f1c332a2c6f2d567abe45cfbba9ad5009b695117fa9ff2a5386945d761f4d2e35fd3f2916da1e1fbcee71490be3fcd5fa9baec939b800839f8b6be4a6da549e5261853dc41050b72837078634a8d0d25c3257d6e5d3ad1f67eeeb77e74a11d11ae5afe8a2c687c563449307b47cabed95370acb02a17746333d9d77c5f3175ef5f609ba315105c2e4838e3e19b3f0704c0642062e95d19097f3ec74b179d7908a2f4d130e346d2832706399b3034112d72c9828c8255ea6ecbe72ff3832d53e3dddc4837805206dc397bdcb3ecf103dcd1677934dc470c1c7d9ab57d8a2928097ae1a9c3d37c21c1e55e7130b9bd069a4505ae64e17baa9bff2004f016d82300dfcb9cd9c40c4bba9679a31b7ee242ed366dc8237838ea71b741c2540e8369527662c8833b49ab50b192177b23a6de600c65707a89c8f4280fc498b159722586a56ed6c8207d6a0a9f7278588f5203782fb64e6ffd71f1486d732d10e1ed7d25d6b66db15beeaf71c8e16cbbac2dd8bf0728090dba7c09573b142a788d3c99b670033644d5e4a30b94a69bab618186bcfd824a59a93163dfe07036f245a6a2c1db1dd98b74a96e636c8baf30969434f7778eb85db2d72867c44ffa85f174c0cf7eccfd8e218437feb6564d5233b00bf9de12fc20beb77f784f791d397aef1a67c3d84a54c5bc2666dbd01f1a211b33499bd7bdaab31a9199e9b54816c65cd91111086ae5469a652244c1cd8f461dd36f14a5a4047b468652facc2325be062455d12502498e6619ba58f1ffb98b0013f4b3435935fc84852bea87556d4a3424bc69f7bd8883686db67e275ca1d80a1c5fdf7b8345201bb6ad21ac87f6532d01cd424640ab0fe7879f202d8c4e16851638ff13ca3dcd55425f080360c9bf3ae211c4da36ba192d8ffda5c938c82bb729087dd4d824ed7851c9055689ed78a3ef0e577b45bb8880ae5675c4081801e97b55c086520267cd0a74816ba96a64b0524e64f015b846290b34f8e5a3457f6237aa30f1e3df239c96e7e50b69496da9305951024fb83a6fd01e96f6b2578c6c838c35dc31c4092d1daa97fe71917ad5b4b588799bc44c9c229db7bddc57124d87853711e4b801c7c646010c684a727d03ec6f1da0e364f72b38c304ca4cf84e6d1c9e56a5c4f3b3b94289fdf77d3fe9488670b5071d6ac713772291233e26b75adad2741cefc73a1f269998c531c861a909f20b777a465502e23c2c903683d078453b33f04165a2207b98a67b6ef52d4eff5de59903e1e91f02799fb93af9e0efe7425ac9c2b533e3c8eeefc03cae9460ef180c15bf21ca925e42b145556f31e7484db3517ba0379195023b3da4dbdf07628d4892b7ef42847efd29dd8cce0987eec6042d730cf4516b3e5299ad64576adf2360b8f134971deb14d028e9fcb1f763131608b2e3b34cd009fc7d603141b2ee421e3177d612842ced6ecf73e271602f9eb188410bbca94fcb0091c32be806175248a251bffbe2c9f2cb79326890ead8cd9c55276e57916ded277ce138938fe3bba7b685d59a5e4b89aecf2f7758bce80aa1186cf2cc2cb4d539e7bf418975d9e603131d023621391ce07871f50fffe7bc8679198162a1abecfe79672f13df82392461202c19521b122a1d00ccfeda5b4a141f35026319da9a3ddbe0e879f5641dd149973d891a7ad35266e5e26d76ce1e13b3c85c15bbca48c0b4325603e109fbd472891ccfa1dcc720fa2721a4fac79f4bdcdb79c1b0025c4dad6660f9c8f939f386feb1330ecc565e82ce6fea8fcf3584437440ae1f0a40ad6e82eda2d5ba41f72affe4fc89cfe8d2a5e3b6895d6d4885909e9926316b5aa89e91e7472dd679a708929d743c6fe5450c6dddc78b2940176a5e6c6f0eac1405e5983530fbd54bcdc8c2c4e14d33b5805f74cced428b860279bea1d2dd55d58eeda1bfa5653d1e2f1294418ce4a3c04845016b42a91c800e66c52197c7ef04095bb36dee939859978c12fcbd2a486e68661aa210e9639702d97bd206f3010b3fdad72752ae6d66cbe143debc46a928a66bca599d29e833a879e99d67891351f81014d51ade45ac93b72fcdd0614f54ccfc1678339234bdc6ef166a01b3ad3efba5725f8f4aa793b9b7dfb242a3c05ca0c008e7184cce9b25e20b221d97583a1242f9adf61b1b8303885a765a3386a6eb60a78e947e3e378dfbceab035d9bad038fb2a79a7829e43bd2a8ff603a299c7483fb55f1500df8c6e269effb2effff9733a436c28a5a1e273fd2379cdf2fa405d20d2575ebc245973ee3d54d320b9896d7d740b57935999075df05564b222864f5e4e46a77e588c9b84544409047e1c82254aebc6c43be3d1cd750d5a5898f5a93887c161bff2824f796261d713b40f5bd22691f8b0af3f8ddc3026216ed41af5402d3c200978d70a4de622cfc701ee44f495826ff14a18760aa0245c6d5a62be259d3b54e351f756626e0b55a6de45e81d26219f0e931b34c9438c6dcc92696e29563392c6146fbe6758800b2baf82bfbc4713f850f094449898c2d815129b7ffbf6a94c2a46ac9cbd342552de0c41364276ce1e71093020192e6c1dcf61757dfded20f3985f3a8be48f6fbf366aede64043a473e7436b519b62ecb163f583e2afa82f2b98d496067dd8c3b2bd42053a562c5b9b1c159243cfe4c9356b55434891c62856942d4b96d99ec5dfdb3813bcc49f47f6881661810702861c5de7301a34a5a10722efc7b7985fea99289395e84c1afe08c3bc4593d17ab7d8b451e6c228e52dafcd92a6d32a7ab6612e1b08473d3de254578dbaf6cf8bb2ecf6fbb3fabf0322c2ecac4584109d9dea5404d7541866a97babf13e2451d41beb9e6b440e977e24e308934044db3715771307af897e3397b1498d4b96f8d267372316f38812b4a882b9ee039ffab5c1aa1389fd71df0341c7a8b86fd9350509622d856ee1e145322479232bffffb806f5be122d87ab743c115219176586fa96ef063cf2c663be363abeb905df4abc79dc7b16cc456404fb10de15dec67f11845055b44b801a7e394803464dd86c118ee0f32e5625b913e358954522767de846189481c5b98603cfdedf215055e475aa858ecf57c2fb4fa95b100d9ee013ed70ba3b0bfddd36fd4e61baf0b9e24447714cd6605d87ab16919ae6f580bdd1af88b7b1d950659db959731f2ae6f80c1567a93287b40e58e7509a8293944a279cf293a16069ed3ac66575844664218c5df22d5bac179175505acc6b4e262f864442d08247a6ce8eb2e70b82c9bdd9758fa53b9a53d4eb90e004b319abd2d89e23fde0ccd5939419fd7287832b509a3828f576770598673bf502e1163306cfafba8866f9c0bcd85d048c8c1de1c8ee44c867408a37ce8ec72dc9d8d95a5e9f6b7676b5816f8f05d866997bab9383404bdc7f3c4c60d3ecd2e8ce0cdba836a231f64d5f0c5886a71ca22df8c4a72c3a8de3b1cc262764ebdfc483efa5932b8293a880e5f30240268a35be65e1930027ab5c8362bfe1ee165e3f8013cfb1a9bb111b95dccdf3282eb1afcf659afdbba224d578b26236dbe6deb846fba27a3da63aae0095f5b1cb0a136ed55a493dcb348abd161dc58cbaf7c1cd4d19d65353fe60fe65b422b485433ff164b694d99b593d91c017525a07a3a7fd16e0c3d3890e348b19b9ad72038487d6022cd667c88abde22b3181254e8511b619030381496015b2b1192e80a2389b9b120fa65ecf339c2c9beeda84fc166f86d7d31dd3119e9523b044fe570dc9dbaf38f18d251c0e58dfb6c1d6efacd241fde7e36b5f7e14234c8befc56b92c2e880cb54e3612b556489f03d0edbbd330979adb6747cfb5b50abc85bfc34ddbe12ce6dbc518999b35fb9dcc2dabfb9d35688bdced1b1f5eeadbfea2c0b594b160ad6748a5004d3929acdd0f5d3223f1d99b98c9f0b950a588af765d28b4f6765313794615769659db654614880a9998c437a8e997aacb50388f0cfd1f46dbf16167031b3d03dcc1f22dc222d4b9c75a9f44a5850b75f727a181a8ccccf5abeb33b0ec10462e873a170d39826cc913fe12cb76e574a23bf46c9032105848ce2c71f61e6d5880ff8cf20b917d76c2e74ec4d20351f9b9017d40c19212ebc7ac7cc241807a9a80ad7f2a32b3591b2aaa105e643411c243b08bc61eb01aabfbada3ce9afa7f35b6f7db6887875e828bc40d8786f16cf8c8afe6a5ae746fc36b3a683e0874c351aa46675314f5d6d46c9d0de84222acc3ce68568679c75b59a0b994ba94d68f14e503ec94e0e60738569dd8299faf174adf42a311888f24962094efe945082ba9ee9432d2f3403ad7d02c35f1a680f6b682a594ede2b613a17531417423f3df364d6301b656edb8d862b2ede85d7d902e40f9f3c38f2270a326fa5202367df3e48bd621e810d3c6649497c8b7ce8f2fdb9fa7863a98bd83c3bc55ea3c878faeda2f57590f29dcafa3ef438e06019c19e5291516fb046d932abeacd0ca1d125941c14d73d3aaefb9bcfa1e077cfc8d977366ac6aaddb1ceaffb466cd5300ec3c40c92035de9af32ed83d91fbc2c94bf1adddd44cf926b1ce6b27eba97f39079f00d03768d501d2541e4102318070bd6fbc16f68287ec1488969ea32cf8cf49caa85dfcd463e77374b78dda725df7ca59c89978d5fe352d60a7a1f61d63ca9c0461f9d6402e55bed5caaa828601685cf6f8efc40d0709e49dc6b84c466b33e797532b2d75de529bc1801e603515ca5a8f759f40f2497121891d6c0d6db61112c9a57b6a3c1ce7f27e0173de474126ab6c6731564b6d74cc6ad144a15bec6c04e38071f35b901bab55743063832c8339d5f52d6de21a1bcd890dc970d8b64ca72c0b96319ae1f6ae8e01de56b27fe9eb12471cec7df96d0c2ef781e3acbcbae2ee6f718cc3b780e371d204219ce161a96a86863de5b17271a1b7f6609ea5bd9d6fd38b6d9cbcc233460c2a2b09fbf15b27daf1c7e2eb32e52976b05077195ec0f9606a3aef96c38454dad9dcc175a4e98f6ae7f23c4fb64e0f5c361cffc2a434d23d985d82ed8bc0e462979c8bf67f3ceb5fef26ba8405969c900f2afe4597df42949d3c1d6a23cd3eccefd331268c3a82e092cb253327a3153bc6e43c4d3faa938aff418ab49295aa4166e979aed2cc9e1656494503255fc584e0b18080a57d0b4948d29074e0fe70e986462c3659db8529c609e29d06b0f394e7f89486d041f4f9ff59f65216f2d7ebd65312652a4d80406771c4a8d280e69263233e08c8dc94c1ad3d85f53b58286fde76f2e44c0cd783c3eab2cd91b6e7a7da9947ae963834cad9e605065717ac9f2718955ac7fed21b61dd76b44c3a3efbd6c2771f413c1b3c0bbc3e2c7319a8a138a2c470a40db930c9b0d6040bf433b5de069504d1cf933ecc27f7109545679d997a45ceea20d3e984cd9b66d4cc0efe7bcd6b044fdbe2f8a28ffa5ac88330bcd30ae01ba11e696f199a8d81b1aa16fd337fbfc8c2475193185c0db111bb4a256db95f00d1f1c3ea108173fea97694db91845af732fb2837b3f6f9bd7ad5fe02efee882483802981f2e81684c418d0bf1a44043aa7deaf0bfdc585270aba9478e2132530bfb3e35c45393fbc0b7812d2582884392ada2e387d327b97c95054b1cd8ffccb8b7238a494dbb44d857ea23bd296a49bc2d6ece5bba3a1b4c08085d538cad69ef1a5728164363ee13b13c72310f72a0978bb323b4081c127f633710bab2c7a50f834d71a3fb2a41d331dcbb29bb4df2a536f48629335a197734f5e7caf1db28aa807b098acb7b0ab7785f40ffa338ba75bdb76813c250aad40bd9550cb0544f40a07442234ad28330f348b63b5def62798e704c1c4bbc31164665eae884cf935251adde15dfcd55c0111d7d5551ce753137c3949b25e966ae73100be6d5a99f60229c1fdb20c7fcf5703228e615428d3d3805e428e754961d205c5aa0297ecdea71d399db846ed3419f4b2b661f07f4ee0ddbbd3e16aa59d2cccf397cf6cb9961edc8de9f910e9324dcbd174dd57b56c4379982531a472c7fd6dd3af5d3fcac56f50050afcd33971fd70c5f05ef192d6033e3d5f098b78864ed0ad1a3379e514a05fe92849f8a69a30cad6536b26dd342812f1aaee877e8326ddc900d983d32bbbf3806a69e5f855efc34ec58d5e602dbbdffe2e6a004e658d7c6e88d8c35cb1c7f313f9e304f7494142736d4b01e16ac28caa12045eaed58b95e6dab7a3474fcd47eafd3fbc6b1f2e308f742d77299348013e7f4509677b2910771ffe8a5eacd4d74d9d06741b7ebe73e801bb28004f5226019cb36a41fe6ed56a7f36e06771e48b8401bf96d00ffaf4c63d7e7d2d46eae33d92d8e7030763cc0721e60c2b45054bd652f289527ae99b7350fddc7a21172038883ce9773d0ede952e967872d140ff8db827b5696693513661c0aead88e2c53ca765d9634979f15ecdce8b04bc9c8fef5ae782dd7b01fc5698505c8f2251ba8f16dd1d90d2aceea82717ada8af22e34561b95875623a851c1e344ce8986fe779fe2c1fc681adbebc64f8462852d9e3d6f4269ffac346d5d01bf4e8809141344487d845ccfe8647e2abfabe4a4cc978ec3cb5bf35452ed3bab619971eb6d18a36d86bf96cf03f736124a37ed746fa88cd61ee20eb91f96621182ac08caf26cf991a6da26cffde2983f87eec96e775fcc28a592ae74faf784f69afcd902348edb37464a795d46d518e4f107151d841bd13df7f46f02659f08ad03125f3bb40cacd0fda72af17f3d2cb50e376cec066b20889e7dacdbefeb51b7537307c1e15502e13566a8270799682247e61d648edc2e9b0195047c0a6b14a814956f5f4cf]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 6e58b74ae43f2f4b4c010b5a7fa22e79b11e7441dc0a5cb5c6ae53fd67804ae5

tcltest::test Hash_SHAKE256-3.63 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 7b4eb2e072d9ff6cb793765b2ea0389a23ec1116de6faa2178b00018ed8814427129e5fc085e9b1351150572a21a45fd5a25cabc73177f3c57814232f566986213429fbfe64a44d4e0f6b562c9bd1a4b111f80ae65e9155480b59b4b44b017d009a0c973352561750c3e7075ca101d4befe31935db6ed5319a54f2a901eef955fa4b4c5e1c755cbf7ff61df1ce9bb7c79d787f97fd2c259a4e672e9555a9a5b98f4c0ec8c4c49c7ade26a41ffce75085c3e6981cf4ad6e5844f43957686785c46faaf9fb5499896ed4d4ed477d7b514f08364e0ee87919342306fa3761b3003e426df43ef57d8b62070adfb178df20eb146f87b300168cf394a2597d68127eeeb29ee6d8cff70a201fcf64a4169c272190992d55650e31603ed23e70a70e679d6543b912098f6e6ec52c636a7f39cdbb24bd273a3fe96f42ca9d9159432e241303675434cccd1f15a127c549da3e797f77e25daab52dad60df0c3a8067fa1b18350f9f863f3a86dd5acb708a4f3495373210b7efef6455832625222d39fbb574a345824f8b5d098d981d4d7408a288a9fc4f1d501615ce7346f22fa8e1b85aeef410e5d9d7be11ef052744512a10ba9e7ea8771452c980f8e87b4a3888ba7350d079b06a4ce607c947f03e67e00693dd6022ad84ca07d3dab4c75c2756876660e186cb4b125c51e406802100500d7b3049c6a7e8a7572fe051de4bbb72a99de7cc411ec450a85908ebe0d762a2acda5de19b4e881041fcd468c8013d05a87eac3cb2921c2e5385fc9d1746d5ff6c182dd1a988ab2e4ea27ca08d64f4360a7379d7e00d9dd5e43f8ac52d58a38fd49d68c1f83e9a290589a0a2365e2a2e59e31445d3788d6de3ee780b2bf312796cd1d65891599e28ef190a16cbd625141c36462f93bc351dd9f98f1618016ce6bc1d3e3f7bbffd5392bb81a252b32f11dcd3d73d29bfdd0e4dca978ffc69f7fd4de76a1ebe5affd378d5ccf1d5df8e4d20248f169c6bcd68c7c8581ddf13fce7a698209c6310eed029d1b4a95b418aef70903663f4a74c52cf5b9a69cae7c2cb4f99296170cb10712c150173edc16d20547f93cb395aa3f4eeeb241bc4cd93d2d1514d16f072afdf080b7bf692477d0755596ff7746e1b77abe0bfdad6adb523b3275363e8ed11424819e9db52bb04cdfa87928eadcafa038fa3334e076f71e87d8505ef62247ec171a915c935054899cc6fc439ea5688bf219a48205ffb0f46b8d2296365ff40840d22c569440e9294527acda035fa0fd4e92ec5f8e639d767eb758866fa669eb4a3ecc26386bc29e51410746a959ed56a6fc7747da51211739ed8eaa12841df79bc6fd45e04f857b69a9a8240132a23a73cce1b58a36c0491596217bbf7784cfadf12c202c4ab622c6d7ec0c9b58641b6d7a98331e831f9eaa57bd65d6ff32d60944056f8d0bb93711426f3ae859b77bdc8c274ae7d4738a6098bf02f999acad2645e56e8301232ad17f8e6968b4f0de59880b67a699809ec0efa2ed87c566a79d5d58b79ea968707ff5e602ace8b4a55ce4a103bb40ab4e43a315601200d567d710dbd540831d9a852bf281256387836f28a4b9a678780b8189630518ea8d705c06eb42191ca72b89b8307f52b3cddaf8ca72f3e89f6b78d2d928671cd103339496137878e48985e5f11c57b5681c1e9250984d0223e9f8e038e1e08e52bb242944c102e069594c228d32a4ddeed6e0b441812f73b4980e021f0c1bfdfe39e48299805bf0198ae0d7d30fd13cb6a2b3e723ca15cdafea4ae0f21373ec21f3d7291aedfe288392d67e790087425df3faa36ddf8a60a45521e568a482c96c7d9e953f4653ea1605bf7ed5b1119f533f3761863e07ed006d1587d92bc3264c2b8d5f7d4617c57f57ee617fae1aa43508fcba036218c36296a850ca05af733fa225d05b59943afe0df5bedd340ce151d5bd057be8377439765cd8b1eeb240b5661a906ffd73cb309c67ff84ff62d75829eaec463cee8ff360a5783733760f4bebce28219e10f6a597a7abfd6ca706a67a28c708ec98673efa04c7c070654f71a7a30ff6d7f63dcb64573cad1853ffcb4ad93e1a53dfaa6ab71d3fc4220a71b52e4ba07627be012096d92a2a6ef41345108eaa112f2eba050c3158d8c4d02694f42a921609c2f133b3b01cebfd01f1927fbbb383bb0026ac7df3ab64d540de7f7dc24d6cfa9f8e732f7e5d682f081b41ccd2b2c8a3fe70bf90d6900edfe6f9f33f954ac186be297d8e9694359170d0b19c864076566418bcd95caf1d413d199ece2612da1aa962a1459b29cab0c6e2907328e5036eeb8f32abe86136a5bdadc08e072e1d32dbca8cd8eeb69e0984a13cc54d09064a0f54afad1c5ee189d33707139af4f16befb1aedd13a3360834ad35276534e5742a0982416ae0844a3835d0d3541ffd323fb875b6ac7809295156f7fe03f12779c61e690d56aeb583373abc61e5079702565f7ffa1bbdbe09554f23dd9bb652c78de3b2656201fba16ab63823a0346578ce172c1bd3ec9b14dae6173aaefcdde9cc29fcee0f92ad414d28d2bd383edee201601890877d46e83ccc6099c04d4f5d1b31a70bd1d960cf4902fa82ff8f69fa9adab3fc88f837d005528e6f52202d9df59b5f433b3ebcc808f53e19689ead1ee4d79cb46ae5e478cf290f4fd70def28e5e77428be4af7b7e7400be525e4febb89f7115cafaee34ee4b051afe17f0a9a66769420dd76c80b7ea3f27aaa0b057cf4b9e069c9ebaadf0078f403e3fc064ee1f91dd00b5a945f3971704e577927cfbf8058403c04b1858ce364e060ed78c2f2bf9f9aea5ef31f923903d4c0a7fc2044eb078498927deef4a032d9eafbc8a3136a97f5dd0c5ac9337b2ba2782fe91b1f7a6cbb420d8687d21fdc34e48f7c4bce6a758565db31e877b8664be069851cb98ef638dade61dcafb2df95e0211a498e3fd6ae17541ef9e96132158bfd36a1adc942a1b5ad7649d8199b8150491918cd6b39f4540f888a03161da3ed53a4566689c07a84d35a7c05a4be6bd77fff36267cfdecce55f4f55f37978b96f524877e70fe17aae874df92f4b6c9c82e431e03d5b0ebc8dffad858562e10fb5a5dc15fff5a2daa656be11a89f33fa4ec6b5cf015e195e5f5e0bf78e24ff88d0ba6a07585731105d2961d06c5122210230e6f65ae1e6fa8406cf74b7c8b86ee81958169b3c7664fa88a0fd24692058c7a72c1ff1eb5dd8237f63c4a855f607244b0f0a70ad591ea5fbe26277ed17e6c5b5ef106d84663f654f2daf08d3a09dadd7f8ab7eb1c285880b90c50ee7ee1423e1979278b4e979720097fd7f4b9e76ab457ac06e5099e2c83f10ef905e8d2a0ab38c6db784cecc711a0775b7c4d8da451efc13e792c67d9020cba8a65bdc70a1b43769d4fbfd818a23e7e055463513a3e8e86a9280319e063529b7f8e5c22d116bfe4e77225fdfe7a59e0604d9a068ee2ea58e1721c38d520693e62d042aab81614ae347ffda30ad2794af6a86fe204e759b471d7e62919d1b6ffbeec0f9301a1c84f1ed9d57ba073231a32f543884ea47325c4c9df7f40ffd26bfe2221805032612401001bfc71b4ddda9fc4c36dceb2bd2974e886bfccf3321fab2316f7265075e985935f89d1100008b7974e07078aae3bec847a4f20645c77405f6e6be6845cec17040ec8412d3020f4dd61e87ba4bcd9a65e08c1edbbc7ff484776633336acc82fc2a81c6464f4bfe207ad96ad996f8f3ca5d0ac7771eb344d7bed517effebfa5a6fba1aad4fb431f9c66f762fc13cd91a2c5053601f6ca2aa5d31db3c3870ff015bc3377e45f533c67a462b54b4bb23b932167b4a2c92c6f96bc244fd88f232cf1751f76a004e11b293c00abefc510bb45781787822140db5383d433569d6521e42c4def2e7157858b34bb8e100950d762d2fdf7c8857035843013a6643a3c9694eba529b62e1b4234967aa4d5a0d8588f38014e9d7e2447d1c9cbf12aec1054a9b90e6e61c4971ace6a25376711120576b00bd22893c2d7e058e35dd13e4a24cc9f730456ba31d5feb6a38deee464a8bf4503cd924cb3ae5ce4433081b550cca5a3b934be98533a6e84deee91a2380712fcd18502315f94eb76d3b261db8b14dbd0c946c1e76413c6dbbda478d2f5ec15df5d43a1cb2e5035157b2d9a3763c6172b8b82862ecc26adc428f6ccfc031d73f58f4e96a189ace3c923e7535141a800bee73036f5f23ccc45072bb5a8ca62d24650f00a3bd66e9d9ab329b5b28b843f90c697f8c5401ccb69428c5a5fb285dbdb866f25227e5f0a91133be8e1ab207ba90e00f5241d905135c261e4a8234c35bb1b140eddea47d3b52b65136607445d12a9b3559df15e06b36df27a0c858188eef527eef481eea00fe3ef5fca09ba8cd27df83fb5254f94ea2c86451240ea7e7dfef0ecf0aa1b18a52420f3941749b1f17417dbf61f2ba0e2e8666d42bc50bd6f1cb63158cf98e381d442f84c9bb87478755752e748bad5a487db1924617aedcc39c3e5b4572baaabdd9b957bfcd07c6e6702cc1008c3d837f32b71419832b79d3c5d2e8daa9d15292574f3a8a25972db345e70fac81054a3129e9e20c73ec3e90dcd376930b5cb059614395bf51bfdc7c3b4672cee67eff1ce7ec8495867b8b8945b26d3513d754717c5901c5dddc63bfc4bd92ee49151280d111645b1753e12b94e245075fbbaf58fcd20744269753ec76ded8910562350b9a1b19b3c30ff0064f0586a04b94319e87510ea0c85b1d90c60cbc4dc7d0d72b974c1d35f60a0897d87eba8663db7ba0905890723fa2213b36d9c67afd0b694f5d26d7684ccccb6ec5c0492034fbfe1dac5b251ef8f71f4a4dc88fbf015c7c15505dd0b123d298e99b7ccb143b9039543fcb452d90e4684c8f5b6070915e7fec1543a1a717b5f196cdf6b8c8f422ade2cf4b692473d48cc05004f136198bf552106ac2b084e175f4e1e08ac4db1ddc47df3e198a2e620d344447aa76066f7cd5d645ac7417ef96925bacb97e7cfc3501e425cec53cf76a16e0a604c6e46366e5db66d7583d2ac3edbfcddd7c3648589f7295016c0c1f13f699a2889f30124410a440cbe3713d9e6562c66f44b38ca78f1efe59e538339b41f3cfbe7575f6a4d4a556029c309276a80928d74e5123b23f2de420d73dff708763801ed0228b09b0632913e907c3fd13f767be1fbbb7f94e33c90eb879bd34458d561235d249d312724c6850634c8237d1f58c2f4fc3fd3ad52f6bef980746fac5c4411ce1bda19937127878df86b6821d64ba0389b23e636689d10305683915a15d140bed40f5b3461ddcb8e92d0a913e37c022f60d2d768c6ad6894e5a7b3494831379618e3fdf03e10d96fc89eee3b8e14704115f5ae2ab34d4f8df489db633d8b7ebcaffe09b14ee73a9a637d3d811f3b72d68033716379a54c834dd0148f3c089e9a6109865edb8b75752b17a0cddd1891566b352afd5edee7deb62563b58cd01e96f6ac7ddf2b24126ae7111e0711d454299ca3e0dfab20a806f830d2be760a861a358ef51c86d99ae06116bf17039644b7db249cf1a7921864db98689042df5f8de758f6fc36d2943f5fcc8ce5fb87e768f260651b9c5dbe5e26062d1438762f57d4b1896a823888eeaadb8c5941cfc8a5a7004345d0a8225da3212a329ff881e0c442b44bb133fe570aecc85c1c956cd4c4ac3e578c9ccdca189266d3c18cda8f7fb381880cea7fe146a746d4d6015d5f0f0b5f391861460b4e00e9dde45bc4ceccabf809db8692f428b310abb53d22ac51c6add4bc1e158a0d14bc3a518cc60575d220b6662ec0f876b92ec7026e43255184300ec0fcc3ad1c76e6d05048699a40d10177f40b9055f960a61204bf4830d9eef1d06b22d7de45cd6f8928b733f6f650a335ce458a74795182720556ba37afacf70307b8d9844ec1604b2300ae815ff60fd63d0336bbbe33cad14b5b21a19c654b8ddae8520600fcc000874c62a3426c4c44876d1d938faf84161ff703d668c1f3582dd8c9ce2323978f9dc2d6c5685a6265f4acc665b56dba29c951ea3edb6af94a47b0c6437fe1eee0ad8b924d9a665a23cee8b997f91473f291935d41bd05644d7299d1cddbdbccdbffce1ea59e3b3b655b487f93214cb858bfe2e547d53d3d48f4bb73d401bc3968dab403333c7f0d12e5f59fbff5bf90469a6909b8ecb78b22163d33c0b72a3d6f8865c8613edbd814b217a1853f1303a16b4d51fcca1e56c520479afac6cde1d84f08f5966af6a5520ad50e4cc5f019527ab9457b3718a7185a032fe8f64f2c8b78c512398a797bb437576d7b50ffdb410fd36e9dfb4d85030b977af30e5527704ac5a8b4640b632280c6467ca8e7505672c353cbdd67f86e7d2b0383d88ad8700f303e6ec15564842c4a22b69551807aeab27c6ba70b0841f6e853011a9349710d2e5dcf68fe86c2840a8791dfe57493c1c872e71fe3be64bff5f1d39d1b825c8ee58c3f23afd1c5d02f00754d4a338a3d2cbca50e9721c0207b656329c8891ad8805326b8104e7358e012caa929c548a707e20f3bcf393b60a238188642689233253aecf0c804b5634647f8b92933b447806d8b70320fbec991f1597b3227abe9fdcaf99380fc743a88266746f384b564c0e4837368aa32a1711890d140cc4f412f8ab669df3c9626d03780172ec03547eecf5e0d1a137d316935245013616582e30389398ece046d4303a9f683f01b3933b78406f05089c1a2d17dc054edd4f543bbdbcd34b9a7570b114ba99a1b4f80b7225d26916b3c99447303e9aa7986e2743c15eb7a06662e50e9cff91a49b864a19b5135a66b800076a41e93be0c6291a10e9d5c08bc283839149baeac82402f19a7c8fad6593c4060eb368538ae5049f0b7dde885e3d7bfef191990f7cfce2749d02a3eca3c589f2bd0b388bf67385389c13b569a845a099a80b066a4374b96579ddfc9291cbb66ffdbfd64fb4002f795b42170eea6995e60d2c7fa5ac39dc26b964f639c024fdc03957ce19540977d3c16f6fc2a517c086c96c812c27aadf4ae44e2d4cbf4fb4b608598c63570dd2da57122c3f58deb4ee4541a7783646373472e01e35dfda7f93d34badd82d6bd4ff94c0d8df863ce77f19525f14689a7895fdd125afb223b2fc32848ec257c1f2a5f301f22dada0dccbadf5148b3f2627c1ed77fff4c6da0351aebacbcc56aec0700a4c04944fb909568bd064371a67a95aba6ae9bf9e5bc5369054c150ba70a2e043058ccdecd3f1a22b4acab29add91c2fd109f5a99278d1d8fc92bf9f3b63e7925c4f714f5803a2114eab4882106559d1e1f6d7057dbdf6915ae581282ede7ad2b10d0140a4c2765c126be225d60893ba5ddf07b4ad710cb9a6ac244f88622eedb6fa4358ba66df2d885541b907a91411cd2b4e5f2a7d597b695171bb52d94d0bf47e0140a1d523a939cf2ce7ac3022ffba4274aefdca26fd2a3b2d14942a1d53f102019f61f98afaac426d57cb8406acab8c41482d3fba6771d22304543de7ee37ec0c1e03b85e486917cab06f8f083f28717dd6c2c35fe2c77e1a319cfaf2044ea6ea658dfce5baf9b40c9b9d386fe1b959efffc5405b96b2a7d943734988bcbc96631b0aac6979e383fbbf5f6785b9e7ac606c3d9df7aabcb529e3e212ef3e0b263fe87fb030acafea5ec5bc0490f039d298c532c27b466d10d2b9ef3d70b3c2bd4576f6f0827ce653fe54bdf8d9ad38335fb1ad972f944c209c6ca5b253436ac23e6a7653a9110f25a4156829a8196a377dd8b4035ab9e14e4fa50959e0158a9ff36f08c3ec92b2c816afc780455c5947b9e352f146e0b400b20b251a5f52aabb292bb328922858a41dcbe2e5f79d8dc9dc7a8c46392f4e9f8e4700de1721537eab467f68e4fa88218011bf4107048d27ae446ceb7cce3694ab00a28b51ab0b504069746c2a31caa70928687abdbae1c7f7eaf9c857e6f446d1df140b55175d99af3c9b1cacf4a69e7eb9e57a61e711137f133bc5119f111cc88b5d446b8ecec1c166fb60b16ca56ea86b3c273bb2a5710e683bcbf420148057ad8520db38e8303e909c2183c04e7f4fe7776b9344264b6b9100c0469285d948ed9586ec3c324fee618745681929393bd59e2db0c51c085f35928e501ced8e61f2945de7c334849882c3b6a99fbf0533dbb755db5c0d10b2fcfa1b5ae7d2096b658a8f14f47738069a585a8d79974900a4ccca5c3183cb2c903f51ac1bbfb12ded7f03bbf882d4fe524f1b5ed03a6e6ad6e4767b6d05a1949669168ddf39ee71337ca124f6ddbe4952afe062cb2edd391a084080381cfab4b98154475bca28fddf885197171160af418090e393fdfd35173f10b2b94e3e529f8ef220b8f9c79a98acfb5b83a521f7c7cb15274f2e35267691ce5a1926d537f098d8611e4e331006ef87b9612168eb8d975677284aefd3de0662c07f29272b55a8ee51b452d527d259ddf9d90e9f513bec3b1a46d89205f8a7b52c14e19cf675c41c3aa38c13a7a4f2e66315f32df279d2ac5ad06086846c7bade600d59d5ffaf74a621285565723c3883e3a587a96ed52917def6b3218e18a33356a8d902f894660122ac30700f8d3acd473c5ee044273d2ccca800089ffdd30637a92df2ecdbb469213d08c6acb2a3b6be6c3f1061e3e588f8a27579e6f7b8ab65a6bf0246b5de42af4344f5d43d11b4cbbd9eb622ab9090e56e89f20d96c2b772fa02dd90e342222f575b6a108cf36bf1b9044e10deece90574c41d8e4b9f9ed24bafd155c49e9c1401d2bfdc32c720b2e6f644b6fe5905fb4daa38b3969de625e40c79ffda31f51fab4153b1cf1b97a1bfeb368faa535c1961b2e048084c11c08baf5409a4aae184ec0dc21ba25f2520bc59a005436a6ff25954a0a6013896448b0eec0db477c5f62cbe77846d005dc254d7fda25a0cc6088d26064811d208246ab1ae767a1736d5e5ca00767fad960921dcbbf16eb8e2ee85ad6db8caa6dbe2c33e17ce7607a8c6bfc6e98c6ac582679bde777ce20d3af6cb3163729c358601fceab49028d7802b131b9f10aee697503b639caf647852d3d678640ff6ec9af4906e014612f57185786eadbdcc6f497578f2b8036668bee82fe90bdb7b5a8f4d262e8a6ab4efe168580671ee43ee2d29fd024603587cd3b64fe9b78f8a0dd78e26a2bc789f2554465a99982c95d196f00028c339cb1335b0bf10e376b3651809fa7123ea32444e91c88e8cf342b82b5a4accac112eda5989e5e53c3b87fea5734a003d5a0ebb34fd5a5bdccccb105eeb35648d240420b3846ced1e486839144c7dd675229508abcb6897e423af68b6054886d2eceb84d842ac8f0617d4b2f8e81e7a77ee55ab179e7bb95fa2502fa55b0cba19c635753c473d4180446deaa7e894529217d1110ce91c368b936de3c13efa64ce6a7280540487ab1938944ec5c087f5703987d9002dc2a614a159137e238a2d6d244324c3fd24323d7ed86db70251e98ebdfa7175fef77e6746923d50cb345a829df7d0e0b38b6d7981bab610109a953a3f9968e2bf33261feda9dfcd88a1a28b2231235eaa35c339ebbbb6558dba8f2f19052deaf0fe439b11206968de2a6bf37b5f8a7253bbba0b074bfcebec4a4dc9e49e4ed336c14d655b6668a74e673d57e40374e03275d8798eebd8679ec247972ce53a5ff314aa0b271c6c0d5bb08d3516ad810ce90ca4e1cd2c074d17ab03134c7a7ed5a870eff8fe82d20f88ced1f76dbe2d7cc9d885f05c8cd801096d06caedbe9ac8e96e95bb5c6a392247fab23b53c5d8a477721201a77ee927c6a0d92a6b320cce185621cedb130fea2bcc946d835521185451dfb25882a925f1bee0be5f754349c7d02aafd51dd4cbb6ccfefa56dc854cf300257eca28a68ffd4fc3f334e8dcc06a54f6dad50b164b4b74588e68dc73a6c605a9b396e14fda5bbbd975760d47c6926d3cec753b52ed8c4b478613c57ada6fcac31d294d23798f8bb791bd6302c0b2716331105ef936ebca427df238195c32d81807fbbccff22b47e4e4558aac436d19f05550b6979bdc69bfd27ea4cd80c1a60f00a8b093e89178c7f9e8d492c304cf6ad59102bca0e0b23620338c15fc9ecd1e939ae91da16486f72ee1e154d41bfa391e6ba3b6ca9b3c3be39b5e61242ca5cd3d6c96cbd1170af91fdb2160db3522e1bc3b1a349d6e50479920ac5d9bedd8a16a787a3cdc2b6d24392f25555cc2f20b2ba9e6b47ddc96cfbd6df669d874ce21a758d3cf4704362ef7786d90ed67b01bd91299950058885accddbcf44e340ed4807864218653ee7ff7215aa1e176157a611f9374b984ad7f53ea70ab81be131062718ba23e7d0e7da4c47d16fd807acd402b74c1fdc36e83cf3eb1fdf765638bd9bebaefc3f21ece8cdc655e7609587af2c0ae1b61a7543eab24e14a33ec88ad62ca8258bb5587d91bc373e70f934719f569bfdf7992e6d684478f3ebb95eadb7a2f728b8909e233de24595f1e90cf10c4a12a8caa38aef1d7112c49e31412bcac57fbe6b1a1a64540896615179448f5ece16ea177eb1527000c48da6ec988c765de9ef8c99f5cb3ef4d2aa7af104d3fdab4fccc673ca1ecbbb3558ea338c562231dcc3035656dd636fa2785399764652a96655c0cafed995680e2c524d4513380a0143b89966242c40aed4c4b8bf6fc38f038eebcb740d35d0f612c684ea4a1fb0007694aa4c27ff319dc5b5980ad6b927cd7d30be554115bb96102e1ea4843feb80657dd0316e450817540e7f7d049d376d2c78eac8fe9cf1963172649a48008329165c543d82678ec688b7b64080d5888aa3a998f6cb32399d7a7b9ef51eca3fa5931a7e97eacb8b4f6999857cd2cbe2cde9ac1006303f5c53f52f14dc8e05e899e49d96682edbc75dff9a335983e50cde056a9a21b52b2361a9770d78211946b00fcfe4d7d7fe099653a30afe1a8dd06402ca7e6fe35f536f9e3cd3f05e6e21901e97b00d6c9b1aa26c9d50941f2af408e5b303174141b724dd64ac6dce6c41e118dc4132751cc32a526e4e421b234171b80f7242583a16296dd8e117f77c6e4c0688e06d7ae8cad60e004c3195e27f4783c51317aeb337255681b91563046f78ef82d5e60467f74da739928815ce76344cbd2ebfcd12e3c1a1467e909a6e0d0fdbb268c69a01143825036770234fedde1ddf0b613dc0e2a5550e76af222010b6d300e135c51ee73e9145151148cdaeedfd13f2268426fc787ac3eb9b85844017dd54875a0c263a08f2e7e2920bb07f0af5412a362cabf9e3194c237b4b0064da0496a35ef781d33d50d0171cf56129dd0b51fcb8bdb6a08d38916778fafe46a74dae7d680e977a86b3eafbd68d46740d492bb0d4bdb1ba1fe27afeba1ce5ac24c2845da1dad1f98b241cd8e95bc82743b7b78eb4b6030f401cef3268381d5ffc6a018b31e29517f3aa4ef47ce74f0c265cdedd7d2f146799f0d849abd70e27d54d0b4e3fae4c9b674e6899b8ba44e95f4086e75ab14c8ad1651d8caa8020cb58748bf0f3c75f4e8e17530dc55b0d87956b98f271c313409183a6438ebbbb152ce66ab776b434f8110df598ca5214ae71e6fd47eaedd15081535bb67e1047cbf9ab8eecf0fd356197383784ef28c0259ab89b2eeeb7ee8348dc252ca3082cb669cce1d6882bc950c9a101175e6478b6b9e95ceea5aad2a18f27eaef242ad29e22504abf67c5578e4f4f3c9b3c8ea627768227d1364de572fd3a94452affa14bcc3fb0edb55349e4d04ace56b42eb1417889e31dc92890bd3b1f0977dd0e028410a2fda9995e0617f49ba191ebcd01cc68097a1b88c4394cf0de33cc64df5b129680183b3b6df6f264499c930cf2fe90ed07d31399a84ae5c57df88ee8fa15be05e1e9ebc408813cc85ca6a63d261055b08dd64d245c29516206420390e8994e05cd58015cb70fbcc7dda910a6f09fe259a26b10526940586e80f87585304e8a404d4dc42a03083b0ad38c1a71d813008f4f7aa64a56f5c192f4022aee5a9b3c5b68b07d5773d4813946370cc366d477fa9beb5535abb2567569486bf4eeea2a012769750a90db56fb3e912ec7234a0f438ea6663bf1deddc0e7b17fbf75a21dd89060f16ce08682f8c484c7a296dd8f1230942183afe01f1a7727b076772add88ae7e3ca5ed3bccd9dff8217f48f6c10e8a9bcd366d22e42c1f9244427aec32ba86a99ddc3f63fe4698d38284bffb6be0a3a4b37bb40bf39de9d8844a084fe41622ca5b3a5c67dee6f6fe33d98556563083981c7b0a031616dde2b8b7a8bbba4389cabfe6cead356201617ca7226d4aa5335d4e5efa72133f029828b0e3987eeac38f11081d9fca61c1e4a4161caa0fe7badd924b09c0b3bf60e21b5e3f4ff6b2d90399cacfa4]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result edca6f266fd8dc28dadc3455e3f9c5f934434d58b94b3e7f3ed768aa6a16bde4

tcltest::test Hash_SHAKE256-3.64 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex a04ec35a5fe0dcdea8c72745dd293b9970042f6452d0b073af6052dad80a24398107873d2c1c4069e57acb1630e4f2b8400f9f64694eef8fd86f871982df2b8a5a158d9bc72e62f855d5bb44ab66935dbd53a4e242c680f36988dc38c7212f2594417c7c185e6b13609f9fd735f944114f98e7e8c5808b27c874f941911657939851fce807f483426e9f1ed8b8e32d5b5ea5107ddac339b45ffb853bc708cc5bcd0db7e87c37d10ee79ee14e1b6d78c35243c6aa69d9b12194e4292f513db5059a3f52835f707efe3364904146df4ad1933ab1765a081cf6d1f98c2417fe3b1969ad78c298e8b19bbab9d2b92081ce0e89527ae99599a2bc7d00572200928620a120cfab0fe4936be5654fbf939a29019c52c90b03d46afaffc23132f643bda2a960ff49adaf4cf81a2fb05a87748633350445e58a009d38c107c35ae1570925eb35b1a1589003cac2e19d93e2550b2aba2e977e136662ff2a96b4a4a7179133ce678dbdf9cee1674641bd718d86e070959967de874fe2d5a239ad1831cb7e53babd3aa479b20d590c18b9fc704f2e8d2c0d5c0ecc01454591b656bd67bbf70e1701615ebe84af287e2d383c73f71d07e9521e15ccc5b2d45fd6569b312e25ea4ef9a9f4b28cf15a034ae33a7fc8d468332f56fb6de2510c756156ba786e2f71c56ebb6d3c11f979023562fd7a087c37716dacc999a24b74391ffd2322c13e2be5273ed1435def0de5b75c8d4e003cfd0dd4c786374bc89414d8f4dd19707a9f16eedb28b1b6fc9c13987af3e1f83d416e2c503a2f26eff56f53e2f043c20a55c1893a7b6d6548b0f4a063361d38a68bfc3deeed697be91eb05970658a0117d54cc102d15fb1fad0f097bf5ee807a0641fcf4aa8cc92de9741b24643d573c8a8215edb336fe43a856f4438742caf53523fa90b7242b2f5e988260b920b624655a6286fa885453255d970747ed076e6dfc494da54b324569bef7d675a1614b86445e76338891b07cb96e31b87bca5829316585f5505312a35dc7e04a4ddd2475d656262eb63afe46c0e65d694d8834ef59dbd417d211f9940b9f2877748e31bc96d6212cafb49efc2aabe4daf0c5a738dc28b29d4ef36ca43eda19bdc3f915b30c7af1bdc39305054d0b527df407018e3eb89be6357c0e6c6e053e6daaa223018da11262a06ae30aae9140c2d5c0f66808280a93142031451fad0107971dfc10b0e50dbba4809b74d5ea1a69f487d85ebed38914696487d6da3dfc2c17d103790cb33e196e98a0cc495259a40ec029cac96791fab3dd748a1434aa4bbb4fdb9307983e1c6cf795897f867931530e8d34ce30bfb671df89e7642d75d6effed707180088250e41ec24fee313728fd7553523eb5cc8220f3a773084f96e3472a83de498a6d3e0ec07373de492e8039f344460e403a052d0f8a20fd79f62072fa1bfc3ad1499837a9928b32782125cea8ceb1ba75eff72b9670058a1f262f69a66055bca4bf64461f481f5186b820a2dd1719ac19906004ce80ab1507cd181575797038cd77ac236bbdb8a33b9a789fd94a094bf7c8499f00e39908fa94e15db18fd514121877b6d518dd905f7035ace68d06ffd63cb9e473c057c9c0239428a0c90dba3c4bcee7a4821780b9e160b04a089a307d97b8bb71406ec2212138608c509f9013b7b89e2222eddb1296ff954ee54c46b57f4e0c408b6559e536d6ecbb4b13005e053dc39521e70932361d423a49a4a9469c84bf29c8c4f8d30b75b476e3f270e7dc653e46a68d72e16abf9f565e2bc2f89861bc74201406b5481da00440c24a74e539f77dda687fe7daef94e94c68f79318edeb69badbeb5195d698af890ef5cec7c0d682e4ff960b2db4093d3be4b1dec7313550bfa40e6f98a984bde75bd9bd2b02c49cedda21160c17e698522559a24a34807056f4d9d9fc9d4c7781335e08b908a7141d8286d11e1e1343b9b555a74cffb612a855b35667bbd825801dec7918d969329b7e2f010cd37886991c0fb57398bd7edc4e04ad820a100f0ba2ebd6f17df03e905682717d3efea81ae0ed9467097ffc1b6835a7f492dd7c4b48c3e8ebfd26802393e9e81a668bf3638b590bd15ae2d48d29ac0c655b25b6679adc77af60f1407dbccb2d8b5308ad9da5bae45991d04d591bd2a47f6ed203881d9f4be4ae3bc5c5598f09770d5e1fefb478e5a6b830b0a8c60f36e7d2caacd65b722b33f0eb5824f39f44869d73918242fbd761d6e945a1b1cc8c488ff7f878dbbee0442de941c21162a6610a314b7dd6aa8131f4e5546d646f6c48ae3f319725ec33be6d1dc8c63b40f7b05c7f9409f9efadbf190b253367629f8f368c9d5ac262e94ab86f3559f9a1fe1a9b44b64e313121b34d43001c430bedc62fc586ea398acd8f17c7cfa2d4ed8448d06af77309d9a6b498752c507fd41d95a1d2326e12cba636910ddfca538c51e203d8a0a1064d046a0389f2f6a324f9a3959bea0fd68c3be62f29adf8ffe72d8f3a76f8ffb2f6037e95689a36376247991207f5f50c375548f80381555e64e0f77f2c49b6943c6b9857f86c39c4f8d01e21009d473c33bc03f483a309fa6c31c3d9e2d9ed3488035f4f22af27d24d5cdbc96e282eeee838c02b925a3b5b68e99b5180f2cd1b40947c87cfad28e7c9b3781237dfd1abbe9127a616f01307bed026edeeda7ed0cee69607e5ac628dd49c9c04440a59fa1d8edf6cf8abba88d8ae0db714d927db98c156d54ef5004bd6e0efa87df1ed646df9918521d458661c4bf7b7db39f0c508ed64fbf0d028a937471b05cadbb6701698e4fa78b21427f46f8df42940021584316781b58403305f99c5231412dba6803481d2e48f1755c7e17776e83885537657086d835bb867b79e970b41dc858e13940f154fb18977fc6a5c45fe67a0084525eec9449b6fd7a51e39c43b82dcb1388237cba0619116fdd2e56a55167cbb5964c19ddf8d520692e05356e84b079655c4a1fdbfe757b931e1b9ecd38c41f41adb2bef3c79867ee7ad8cca32812fc5d423f4b3938b04e8005e81d36213163bf054d2c943a736c70a4d8c27006a7bc71b67d9f30695c02cd213e427e9f1231943955e32dc5e88676588fc75395014239458f7c7ff4cb20b0fc68bf14f6f91157b687833efe8a4e85e2684bdc7792161a5bdf73667fa030f1f401d397ed588b80093c8d2648bb3d25feecb06912ecb0ab860804824e5dac06b4943055d6b2f883adef5192390ddabcfa97a587fb63aa534073b061f5560a559a9a55fd478af0f9213a810143f49fd161f38bb795b95ba817bcf774094bd465227ea4ecb4630d56ef888be20df204f9c18ae38676305d10784e5a470e9182bbf8cbadb2a1bd96137573e2b2dba892ac85c84d63117b1732de92593959b99dd06a0bf0cd940d23b56f6715f2416ad1504b2619ec0bfc2275d74364e98f36ae3912b9eebc1fd44eb319dca63ee3cb498b8e4ed96faa35f76ffebc1dd6239b0c5c6f50280c89957f93216f03e7174c53b4ab8d1c8c80ab1e779176d46dab5960c0fc591d2d75e32eec0288df89705088723f7b53c133edf0234c0e393e7ae413fd365f3e9d792fe52429a469a4739a603ab6940f9c185124f98aecbcc736edce6799bd1cdae7ee2ab2235c52a6956c7384ad51b07bb2872570ea8ccf7653b8d896b30d387466a0783c7c1b2b3e4a592ac6904ee6eea6e26a1fc788e1ea55e7cb110eca01d859e94619906b43aa26e30e96ebf603635a157b5cbe4ba481a1fd3e5d096e19a5561b2ce00cb74c98af9c977c3cc196883072c1ce4b5f87eaec5b7ae13f83d039dfd895164da9a67848d84dccef3c20cbeeace5dadb2efc7489a529341d85d6245b840722df9cd1d787389a2f9fe0328cd90640090a5482bd0e4cc1cc2ffe8be34db00b9c3f1b5f24ef40150abb383c69842178ef454aab22fec4dd1ff35872054adf0af8f89fbeeee56146f4bdcebed07470f8e4189be654bfafc3b5e41e28f8c7839dbf78b471941e1e986433fe2a602e97388de0a2c4b0d5501e148eda013c48202c564bd407c2ddfa91dfaa511f8716e6b04359f9b6c5d47854b26ff6ab4e41574f63fe98f1e9b967bbdd8d51feb3c1f218bad12b3d12416b0025e40e77bd577b7f5eed5dc07744f88ec4599b5874b44baa4ae2a1d81480ba98d5a78c06f7df0f24adb4ace409e52f735a9b77bd5862561d8a0ae8184b36e9974806f9c99c5ca4d7e6c0f0dd003e7f11d6cf818dcd6093caeec6786e34b87a7403aec24ff954bf1180bee42bf8a569e2ef62435a4213a73aef81dd5a5fa9dfc78efb900abd6bd06a01fad15161ae625efb003793651fe2f602d9716d2a7fabfa4069cd7a56e66b39f10152ddc9de1afe8005c8d994c9e984df39ff0733ae4194de95e51f3478f219c45ee3319fa8d63a24ff918d5fc61d5fcb3fb0b8f9aa432faffc7179f487f781f2800ced519336aa406a0c3f347910ff5d374102eb1823133b09ed1b15880dfb02012a719e21aeb768b1a36fa17746dc1bdd2a75866c53e8064ad272f61d87ed895ee65ec3d8c0fa1482f18f2535418e7d7dd7716a1b7836a83babf234ad07e1eef5ab15712cffeaca3a612e4e37737ef8b5d296f4a9e2578758e4494fbb0070b971f3361492cdf1f0649cbd7af26f3624019646c4ac34f33a3f15c8b5bc04026f3059212caebda83d8deecd39ea874c75ddad114876e272173aaaf0f544852f76cd377727d54195f812e1ce09a47e1a64c68186feae7d5cc4e83e628cd8f65066b53898a4aafc13b690104078b496288748be0855b7582bc9d42a9deafde9fdc564b71611a43fd9ff81f4b4f57f721f33d0bd15fc3615677c6b09f3ae07d2b009684d6ffd359f314964f9ac1e79943720faf940408f478873395714349b42ffa94c6616d5f39cb21ab5a99632377f38a5240d17c147311744ab9c702d2cbd453b7d8bab2a42bae4f9f09ef3ff3d857c56e872fd0cd2948c475e3477d64094192668488d68c77c425da22455d400697aacc4957071d5d46011bdd9cbee5b79f3f0b9073e2fe64342bc46d42c3f047dcc1d251f129eb5632b2a36d6ccd3f1d15e20dc525dde13b27e9c5b48f7bede44e93e966a43f1e5d3560775c60b05883cc04d4eb43cf1f45c4e846bdd38d1d2514a7794f184fa0ba7792fe711f711a31eb2cc8ca78c19fc734afad51b7ff6a515785ebd5f66458b51fd0a07652186b6e9be3512969b9490c9ec66438e3dbbbb23eb6a5c0e6832e9656a3c531a0ab358404b0d7d2c1c2055b2bb6d13afe29f78ef2c111d88fb60aa44391d56cb2345fb94d1bc28b26e1bbfb02065e1fb0ef082e9a2e96e49a04d4280f2438ed2fbad1569fac7a1d412053354d3e72aea337d5da5f869baeae76746ae1e4577dc04673a221ec6750b986b55131e774b07c0846d969508afc7412d3b2e25898e30ddf2de7fc62f1eb361bca97d888ceeee66b4375df14ca9794e2d748390864e9bd8de76b579781b862e8784e6aa9e72d8766b4f4e95bc347b5ee6973107c2455785889785b117d7de2f4a8c00ed227380704819fb1abddd37f3c727d8c3d3ef0e849fb542f5a4f0361484333ed8cf6d60f4a93be5c8f80059cd7d8acd7d21c82b3672547fdfa5d1285ea2ff02f5ebcce4742d099158c14a3b1c4854919c324d381bbef9bea771172f6e4563ffbd1e1e956f32177022c0176690c5f9b7999c0aafb4b4296205bd2ea5d3e9e67796ccdefe5656ea24bf6af4669b850ec20db57d0c8210482c72d074362fef1b2d3b7e9a89ba1a060197287db5cd03f823611500e91451fa506761a45ac2e36662e3a9bdb21ae9dfa9429effce85a13a7e2c3152afebd794806bd72b8e4d555ccb57e4c521e944fb8e3a25073b560b6a04c7a0decb693fcb2ef8a7764b1fc352c8d0a65d33b5c9de12f6513066ce90fb89dbda01e62cf8f2de8669111bcaac0cee1664c27200d6ebf9ffb9e7eb5fe0636fd153686a97719ff19d72886ade7ddf9d71b6b1674afac985ceb5ba237a68361930937ee34958471ab67a48c2bbb74f797b02967df4b3eb58dbdb03c9be96e8388210b1cab30b7cbc69e6debde2f6e0e4aadede40be70c5e5bfa071288cfafe203e51bd8b4519a559103eb6b6f4ab187189b21539d8efedaee29c7eea7612fc62ddecdecfaff1557351e87d3861526aa28002c7d4045fc736dd25896a0a6d4792e938a1e23421018da77a7edca96b5bea367762a9a16ee6f007e22d21aa687422d8cbb38d82273e1a697b57fe4d7470db05567215308bc17d1b38d6cbe6a31685252c600c0a826fac40517527be0c2dd7854672c14234eb305fc012a33f9b834c76c153f84db11ab5a49372e38b7107723ebde1185708c8bc7dee6d6215c06eeb1620ebccbc41d3c91ec7bdbc3661723d8a334994df65fe63de3a436329901de3bbd1b413e6930f490754d20c3f5c128bf02d18c14bead0e8f92a3130cba934b8a04a39485d4331c806c14c6e16af4d001921db284ce6049e6734b3457c6a37fc9bf0e7e470d0ffc88593796c4cf9a61c6db81d343305ee06a0f0563bcc618c01e77c3c72c1aaadcd1c52055142b9a24356463b6f9ec911b42ed3766e2c1dc57b1b22c37de05ee04823836ce7b87dc6177b52c244f08df4197964b0673bfd68cabfbb09602d6c2bbc438e1c89fea4860b35645e5ec8e329c9090a70b14c9eea634d7b7ab43930d4bbf4f890a285cc66812d014c17a8571725665b53d6fe50cef73d0a93f4646b9fa9a04965dbfe63ec2bca903809ef6840c109cdb642c1e18ad916def1ab6f6ad117edf70890c8e98b7d86c79e902e852b2e7be8347f379fa29b636ef0439acd1d792698056b65ebc8d8f9edec54e63c5ab035214af6a009bab08b412c5776f0d96ff292c8c665e928c08c999dc2a70c4418be0f6643cbae17ab26ec0241a474994eca8ddf2c39503fe6c7414f63c1538baa7f1902e0fafb5e0daed62ebc73c6d1b826cfc51760bf529e228b6db2f5c075f810c4cd58ce80023a9b75ee028576171e8ffef7126c85157936ce752a94d1a783eb991205a6ca88c46561ecce59f0dde47e9201a7cd500cea6c80f2552ef594d0980c8d821439763d9520876a61d5aacc7b0f5141f39e9d644c4961ad44aac2508ea57c58b76b3f08c3186a812d72e218fded826b9fcf3b995e9e5fad466fc4a637ea7af3e0ce67a857dff28d1d77387c8fa301aef2708bdc0be628cfd4c2f0243c4205ee20d164becbddbbf8c250f24998d65b66bc00f2ceecc769af4032f96d0452a9a20822da9ea7a8135ebc7ec412b1edfc3d5d2ef4c469989ea6493e24e31882e2aa07212dda73b5b5295c7f025a6350508d4629266f1af0446f30532718f1692d709e5ad2f4a88d0de332c051a315b414f117adfc116964d74496006491175c06903e3e6e6fbe948a06cff1266f416fa5e3421bea7ded4ce3c0fac451ce02f1ea83875a54ce4e72b61e947fe5218f199fee460175e71f3ee68edf1d93323cc165b4da2d2a72a09e2e9510cb326c57184f7c93ed22ff67b14be8a38a9d603d20f4ced735540f8d8d3004d57182a222024118cc3d86295f2aa088f889d4ca8cb7141beee165f74db676e852f15a65885e114d5f70f3f78e2170ca3ea9ddf393ea303681dfe4cc69a06faa09c92e18e2824c74be3600ec4d2c3936f6591d5deb40f5a9408f34e179d196e47a67724ed9253f3978eb316a44b16649b016177c1b41c0deab6deae8f6d06902156acb79d4ad8606100f1a03ed47849cec6f60d07c632e6112fa8b555913729d7b31ae2c5d819d6504200f4baf55108b0bd36dfdb72b9abb27b37a89291120010c5a7ed8ec5801d0c5bca5a4136096aeaed0a346341192574a375d26df601df75953c1f1f9873fc3e53361afb200837245f5a56c7babb1c00ae497a0f466b8cad2ac2c1a1d95c3d8e332b7b0f3ab63705190f8b30660558fda49ae79f0cb8d0618d1f1b3b11a2a6a30293c6a50c7c3136250f1cc6cb60a0148d526246cd4f7339c43d7516c7ad0026c85544e71fc0ef5f8b4451b07335bded7258332c139a3ddcd902175983e512be8d593afbfaeb372751957117e6ea782f5a94a2786500f6f3d358482dcdb2a6145a87f3092666d23681e9c622aae997824eeef7534ce96525bb2652ba2e7c82cf36c7b63a29988835222a96fa4998e290554e79e44fbd531b98547b272dab6f982a01cab58de820cc3d3f2ac64b6123fe779c7154f6e5887d72c90c9d53a735173d1d78a3d9c064a2d910caaf36ab2077bcc027cac9c7ccf2526f4c4326d89cf37703082c96871a60fe85bddd94dda2a12da2e36f51cce7223f2d854230a76cd5e09bc2774ba40badb4864d77ec617124d12bed6a155ca0b641ebfdc1f97a6c6481ceedad8081ff3204fbc0a5c79e55a9b1418ce49de0c0566091fee907ba65496182d3f5be85be97f5cc5f91acfc16d8d3cd0a0572be10a9a508cee1e4d0202b88a0ba788b180f8390e1726023e37b5841b8adf41b6055581736b5d2182262b3ff11eb5e72a2bb9edc22413db4bb4ed203e8beda202c5a0abe04fde4291af689cdbbaecef88b8b91e178134ee8ec55ed1f4784de0a8ce668a35aec3ea11fa354fa884bf0a73c4404a7c932bb46de59529fbc492960e7c01acd21cc09089830bc8f5f09ed061bb19e37ffe4ad57fa21a88a2e53e2aaa5b1c7443fe36ce4ef666b932731ed9d9199089800724ca1a67798e987ec32712d8117119e7a90bf8b0d060eca0b17f507c3ead2b624bfae4b21cac3ae5a413be9f8b43b24d89d20d4ed38092fdf9495e3f8eaee07412f0652e8e5208be5369340dd43cabb47ba9032cda68a3ef58c058e00b3f3dd13c32f2194920906d73afe9afa6fc74a0d0f960d76fb9cdf9426ce71a3ebe91fe0a4b322ed7884077674065f15dd39b973c5bacdb1dd44fa068a77f3a93bd8b5f1f91abcba409c760c0d32f8f73828f0c10484da44f58c7791e1887bd94ac9868eebea56c591563bdf2c0acb68269dd63ff37d9df7ea7b3e7e538a73fcc1c37cfea2ad5ad414bc3e37fa1741304f9e5535bb2c7c9464193815070442da47cf7e8b45ea2fb070d5685e9fe0c3165d3654ea8319e0e10d6f4b9d267e503b85f4757bfc2a3d214ea99f9b42eeb7e3f56abca774cd32a88a846060d78005e7223a4717f1f4ecef5641cc350bc7865fc14473b4b6cfd8af866160a44393c9a5c7a9dda749d0a4e12fa4d87523f5995269cb625970a73cbfa70c31b2913e043f1c4a1f732f46cdc082daa9a3b2005784950771decbdec49f958fbdd2ea0a1e7bc824f5c2c9dfcf54f6ec2907df6e27bdec01898aeefbda19f9f2ea4b767e7f22743f48de3f22126534e13ee8d3c973c416c090a60186e5f37b3ba2675c228ffcc7a4fe0dba98ffbbe3c1d290b698a262bc4c707a2e084df6c274cc6cc57eb7d06a5a019862c7fc1dac95cc45af641c5f86ae0f4e9b0879ea77a450a3d81b5d68046937c75e39725537641450e6b448831bed576a700ed39741d41654be80eb8a3eda8ae1d776ca292b3692f98410909524112e15d6a2c2c4c90b05c79e35c7ffc0b4e130f4046a6231132e87b1005b5f48237e99f54dae3bb7510743a1c35b8e31ff23fade6dbcc8f004d044940d12a7302a2e3cf496ffc2b2ae0312efb10d013ac43a88bc3926221110607656be1b36832e2647fb061e22622be27aaf87471f820a0d22b7ee123a3b40c6661e9cdfd4ea384e023423712370cf8ac40ace70afb2d9840ff716e7d6179bea5c152ec6480d4e8eb4c578618c84a3e437270def7a71398799a3380dbf4c29b49f63fc395c937bcea6d68a572745add81d2fcc2e486833fe06e3ddecbd83f20d792f8e9ed625c4f62190e3b9ba5cf74fbc499394e03eced19fe18cec9764ffdb30a16d5e7f6a33ee6b1a0af00e70892f5e9eeb890c9c13e9acc2cd75179657080de320e21f0bcf9ecc9d8765eb2a696249555b75922a082c75b128ef03c2027a581a2f917eafa0ee8e41e37f1832a1cec5976cc13b8fb78341d426c2248f091b597123d263ffafc7f82da5a55f2f395d1c8ca4d3cf7428d65a534e5642a673d1580e820f98a2030f518a554186ca37f6945b8e141680620e0657291325ae48869c19d7afe341a4b0e27f7bba56aaa580772dafecd85c6d118e083d62945090216ebba71a0d849b90f335a07897778ae50b2991c4dcaf51c93a8d15a95834548a161b7cb7de12ef99cbd44be311dbef0c9978bb02eb22161d510f365139019ca9dc63ddf01d94a8b1b48305638b7cdbdd6841b510cd5dc5f41db52ac3ff606e6607b8532c94b1cfc2f46a5560cf025640c2ad08544a076638e4a8786672f8d4a9e14465d409126bb3d4b2c342a316691dede43b3829c8ffd0ef0fa8a15a72d55ab02f9b4e455f846c9c83d771d0601a5c320dd622344a9aa4861342de7e757961bda17d03103f23d594041a551e8773e5d950617c31323e9cf0dccf84a7aac9a650c1945b315a4ed6045e135654347ca02ad665ade92bf4a07791d7fb9db8cc11b1b767bf7259105733b84bdd3c0e3c766dc76a1d24dbc398615ae0aa28498b8b27ac7e9599e46e406a3b48509cbebb4de94bf634aaeab36cf76074fb10020cfafbc862466fa27279f10f94193deb010fe788935a4201cc0481cb1a551c8d594876329a3bbc3c23ea105bb79ee73e17a2afa9c8f7b6c8174847c35b2016927a5bdd13aedb4859897c0f473749615e04f089d41d73cce69b21906fbdc5c4b8751d7b92278ddaa2ad1535fd9e8175f5d0dfbd321b364d046075a6f7caaaeea8547497d88cbb3cbf969ecba273ade9a8845992ea49a800c96f2ecf840a385e0a1f4a780c65cc34574c0019613f378621264551243032afdecf32543e04d7db85dc8667573b288b12d821676089861408c18a430a563a20ea886b7d4c40f02cc19510ace19437099a41ebfdc7d9025b045a12adc1452a1c96a3bf91d646e91a6751d08fd1fb6075948f4522bfb71322befbc4da7485686b8a2718da069f2c6d1f19ae584ff50e98abcb162070ac2133deab8811499c5ed56d1c5d9e02d21fed90f4924e850ca63b85fc483d013f94540b73469968147222e78b7626f2672c6163ea64ba99c79124ca2ac2c29af9d44eed59e6bbfa750e19a27b4abaffe6ba933f030ce4b3ae371c235d6cf7656149e92d6851bf2745998443f4c3a151d83049cd487214fc4a00ea389e2e2387ff5cec73a56ded160e7b2975fec8250fc5f84cb5c07e929b225558b0f4f08f2b5b7321661a238cf0571bd0dea2428c613379649e7319a5b9bf9c2c33689a8477fef84eafce5ce6dca9e34326e7171f70ac1b58306a29977ea73f2f6b011448936f513cf6c9fe41038b3a49f6d6302664b746f214ac97ae1164a429fdc74623a836e8b3e214f2e68d8588a9f67575e965dd62f8f2414c339b7e35e294c2195fdedc237b1bb6211da11f362ccdceceaf99a4d73371322f6d437b5821d6fb73435ce86c5b4ab7722e67e2aa9a23e924c22b970e6b3a8627a632e577b06b793e164be22a1c1720cc6008554dbba2cc5d68413b6d68f5451e248f43f955fc446021d252c48629f819fcac018756f08163ea041a5df14978fb31831e46d93165c3ac1ac1a4612947404a7a6cc135b5101c909bbb47d0de26a61336fdc603b1e34dfe4bb73175be1529929b20611e9a7f72a12ea691cb5d570612cf68e19d25c6e8618cbad38a916bbc1c37a5d1da46d84c67e764a5ab6e13057877e7ff6d34177b1b0554f2674950e12f7581773163239128ec7ce937b8638a8b5503883d87dded75df0cf6d58fcd80157d3ebdea96662b2d6576c739e44e7e959243e4d3c52028b7426a489c0be9811478630acf89ab01be7bdba67799ddc7dc55307bf797e8132955f74e8464accc758e79c5a6e4f9fb225531edbb80174ea9c750b573a53e9613413a7155431e4980e60758384e5901a31d0306cb4104fb430f2efb0e962999bc2dbc19d64f48e17ca9952a4d70d1fb87f8d6586f83acb7f4574fb38f13b2046d4203afd031317ab3feaca3adf26cd11710344b71ee186802c43d47bfc3e0bf6ea899990b90e1fd6b0ed32b1f7b2f6c9b8da447982b4ff7b6807f1d664fbbb3078606414f156153ed00922a6cb324b25b97afb4abe2594d58b39d9f4c5e4bc68004d00d6468b86281fd71085c44528c9e54dbfa73ba3f5030841f33389999e1204c81671130ee146e2df92db7d3c1e2aeefb381b85c08ea851c8e43f3a7aced3083a0b61f150c50feb7b102450b7a9dd18ebcb24170bc02a1a3723646328cd0f8d4b66257c119fd77c421edce9184a3505a80f3d89d6480ca405174f6df4274c0654ad37ed91d05227bd2571910e7de737a86ad438b064b491bb565ce58d5bfd05ee4705f08214f47054ba9ef2eac35811656494be3ad4d665d257195454d9b6fe80da3c1f42bc32e8914491893da8fc458792db84d5e6d682e2a00124db3efe72b4bd46b4546491e30b6a15ce879d6826676c35270239399b54b7a0e190ea37e4e296926a477c96122b81783d592f10468d572e1f503a73f1b10]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 2fef8f1e378998694b471f7d3b1945d3ab21ae2358abc0634279ab17761eae29

tcltest::test Hash_SHAKE256-3.65 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex b1eb7f6770046d3682979a3efbb6e0c59e6838ae504fd03fcc885e2897d3b5c137f49594a059c81beffc6acb5a8b895167c7ee1b5d2a391af8cc34c6618761635d59d583c50b49cd36106ffc09b0822b8666214f54865d053422118ef02f72178de4e63ec8631ad3c19b4edbf16df4db610d7a531eac6488e8549d862a130f662f5b71cd92a960b5f665b270f80907e96286a02ea1e4752b7a2881b8f87a61d7a9871d360a2546fc3f3541c207cee2def0983de8c775b8775367652c43ae8ff264309383171ef12f03d5a3d90702ae42720af68a77a956f3dbd9f0e9f1f5c23fc81e7bbca3de8cd6a90b81bddeee929b52a5751a99c677287a45cbf7eb9822473e187ce795ab3d799ba0837776dab773f73162a31415429c99749e5e1aded6912ce83e0ed5ce2ca1405c500db50e4451c976642ad2dee0d99e2f1026651107a5fb546a384a8f83d50006918a85d162be303b24b9ba697967f33cc958b377dc0c1425a86ede35679e4368edf3cd6d3941944a4a57b4fd34ccfe6372fcee5a7e4ddd229fb7780a028371480d527528f0625d697d0da8e33992296eb318fd0014f0c015f81b00547c0cf26f98ae644bb0a9f36165e27e64b140db2333b6c8b2c77e24c45aa25f5cfdc12fa53710841da09fbff9abde1ec6c45f7b4c9bdd37b7bf7e71f96e557b6aac2b8eb1927fbce8e9cb27fbf7097151997673af9296325923780e7adc3b3dc5b1d1785d5003f4f2b2b5942df06c5d4f590d2a15c1e8a1de1bf4650f4b5c8db7353b566f1aa4148524e66f593f0ecb062bad0845cfdb6c8fd17bdd8263c1548660f28eb0976b05e767e51e458cf7a4bf38dc750965777bb46a94de9acd71787b597d8ae8705fad60a23a0bba7e30cec2a725d9272bc5b69511c8d01e3174e3de4964b0df4c89f53afd6e9c7fbdc03357a10d9c68c8cc0679ec9e1cd736d37bf757306a5cd4efc5bba1083b5ef2afbac64e1e2694e59451aa239e288d85952a0dac681f29b09b062db6904f1dc5064a56d5dfe0732926816edf505d07c6c2d76a6f94360c87959ed6638f4085ddcccd515fd830cc3d897c0e483d230fa0636a54c93d19ce01e377ffd18c755ee3092afd13927f69c8c52cd185ece36bbb7fca14e2ea2f37c78f78ef280f58707ec549a31a94361073e37701bfe503e4c01ee1f2e123e00e81a188f08fa050825709128a9b66bb8ae6ea47e41db1ed4257489635ee70941dd71f91482ec8c55e15dc6dfcbf91789fc8e283c4c8d7074d2706d127335ab32a6f137a402e0e1fca6147423fae9cd316c2d413e7e7dfbbcdd95f7a0ed568a5fef4842b20b7fbc78fe351799c8f0f36b97bc7df96a3527089145c7a33ff23d3610c7b8b30f01623754202fa5b8a73084e9cc3ce1824b78d4a8104b7ded711a31a5fff84b802e79c432762adc4c94fb19eccd0cab791967cd8c85f1a5785bc7ef39618fdff15f69bc3397a7a1f712b9971b4f7bbb91278a4fb90758be532accdb259cedf4e4fcc86bb21514ab3ad8f288ffb3f8767d1e36d7b814ff3d10667f6204f2a10eddbf0c6f486ef03c9a304c6bf4ab11709f3623f1f44f438642877630521337924dfeac436115d8fa97b11dbca495353e7a37a82b0816c44e3c1647a2977f2023b8443e7486aa2d49b5e3fcf799f2f234807b59ef7dfc0fd99f8b4a553f76d9479f18296f438c6bce774150a92f54d7076479afcb907f74dcdf6f14b4d4cae15274f2f3b0023d22ed4e41bf4ddf2b320b78cb102c1a1191bc6e2a2d3dd1cbd6f8dc5d23d35d5cd11abd7d9f5243f6b1d54fe8319d6542f4ecde550a7cc10a088f37cf4045bf3bf4fb574d8762d837d4d95c497a9bfc83fd02a27822ee1cf614aa19b1cf83a28b1cf37e49fddc167ef9ac107751b45a6548825cfc0d0e602089bde4bd3819919a9797c4eb694a893cbeb22eea6d53096735e060693f5a1509b65f4b4a0074271b235cbdba601aaae1927fea2b141483fa63a14f38105dc62248f29fd0bf2fbd6d1eb6bb2f68e8f60df389e4a1ec6544af40498bf14685ddfaa01c64f9caa8df11083a5fd2ea21e5327054a0f76cb1e5e66a4da91d487ed7036a312d1dc97c06976e5c1e1d7a4202cf876491940ba6c240203229248c853bdcf5d57ac52215be60bfa078878fe5e965b73e58f04fa0744d207b8e9f894596d7d17db0787b12812d8a8be1a99179d3756e464994bf3b765de99e3c06c54c52848b9e80b01aded92e4d830bec257a8b7f4b10f619b0d432f2ca2ed3c2d6e6098392bc4df4a7f73113873a39d7c2646bf3ac32e0c7fb0754cc7081c87c24cf2635755b7adea8d8235da5f60df4eec3ef7320009c57c441361b4b5b9c9b3544331ab1f0b9a6741e2a6d486afabc1115906e351e7b21c31e619fc8f0b2989f01aab3b7206d04b025a0d2eced7295cfd5f95559e12fbe6dfb619a8805cd0cb8740781134f2771d37b312ee212283a719184b91d0d0c962b74b0cc06ff2e601807e41354f15b6664ab55c1e66d6de2acb4bd19ecd6a44191f6c984a431792b3459aaeada9b8b6ada22894c5853c656e7cc2ce847f28939280e36550e610fc6a3d5c66832c229f7aa7d461ec659c3dfa9543eb4ccd51df5543761cd93f284dadd08e12bfbf9d9856c1816c9af03e91567c97d0fd9e2f4febceee65ee36a6ad0566f65967496fc9c758f65dd70d69870b9b86249fdc080cdb8b12e796b3d143f9675ee485b4e15b57d4fcdbaba46747a059d78f3b6e253dade0ac4bd99ef338113b8c5b20e73b768e9d5b8e1f9e7efa9d1d54bbd73cce0bea378238bfdf52b3d54b486441cac541f31bdb1f3ae1f7c88b51c34d7e2e4a9e19f75e57515f36ddcefd5caaef45c7e50eb7433605561ad8f05cedf0352ce31dc28806509604e9de83ba8ed33240888a67d75d7a86e52e5357a69a4a061edfb06e5242ca96b7b2dd7ceba88812a3515687e5ef94c7777d6045979103f8ec8781a3bddc6e5a61d80242f6707098566a74f547c22bd0f24d2844979cc4137e23b5ec319ae3e9e8a4775c45af34cb411b0a39679ee8a740e7d3db0e813560bcfb77ce1646d14c365e61523e2c7bb44dac41dcab4b7356479388936409fde68f56edd3d4a6e289314eebad4bb1ee59606440657d9073e5f1986ff201fcc4aedd7e3f82d383bcaac3bb3af4d30435c4638c305c4436915a2440b1824d2234be90b996637ba407b6d3ef79af3eeef7fd3f6c3849670674bfcad176cbb143f3208e501aff35d36cb64830ce67f337dc0ada4c81b550c5c41bca94e5549326a9dcc18bf2dd67d692b10cc761a25ca78ef51e743228663e2b770cd127a55c94fff80fb147867b7623af06fc5bebe006b2c6f22b742811384fda78d0634675559c7e620c4080d77bc4b91e16e4c7e71bf3833dbb6f3fb97ad84cf6d8c2c044312a75a1e20655e5ad1fd53c5f23c0d9aff636e96a4af4c6cd6fd66e326c9933f04ee6b47cc08c0bd4dc0e481d415d1f8a66e6dd812ecfa0f9bc7ec827885ca959b2d8822297aeb3b7a3692a9966261f74e99c01474259b0c6664eecfd3f8e0e35fe53f51bb342441f1af0cb1bb8a44235275f3d06af195cfc164ec2fcb8b9c94cda60f4b13bd026d4ecaa11ea625ef094ca3779049c980d627385336e1c644466ec05682a57e1c09ebf9fe5508add925b772c9d8b325c2cc126fb25999218e64bdf4c37cf31fc7c453cd8309359a78e50d84791e198ef1fe1d6b881c7435c17c2593d4ae8eea9c1900a5cd8fcf6464e3c958f3d4ef7d9508a2cc5303e56b83f9502df89bdb970f848d133c7d3894238e6560d8a1c77a02584cf291946f4b4c68a843adc95b8da87353b66e3603c21b618c2c75e913fce089669ec232945d9156a84562cba136ed71feefc16ea356d2f9881c7a3f778ea608a9f17382d70ae92fcad3c5f72f3b450ce92fd46bb9cad0b2f3c153f94497d95261bb03f9c9ebca60aa4f35f0680355a0ad0725d199a6ab1a59bb71cb1db0e0f3385c21fbcf689b95a148312bee1785e9a5062424d572b8bc245b72095562535788452c2d6a19f34b6a3f562e13f06c247b9d5dd9ffa78004ee31c358ae14b71bfc16a0f31c6867de4f95036b9c165f0d9b3d31656abd978101cef42d6a4062acee411ee178ec4feacbf9c758c901f4e18e865d5bc94d75bd199372ec2c8e1c96e945047ce21e31ed89de109a3d3bc46cbfd920217daf9125901fce3967561b467792e029fa66b442e3a28d946b3c23fbc9d6385b0a8c80370fd47489ad21054813cb308d245e2da783f78cdbc58bba1b16ede46cf24cb97de351f45160875118485e73faf28d2477c53dacd4fe92ed373180d2ebc768a366a508cc2513e185437fbd3907e74c2f3031f55c1458ea43fca44f823bec78d49def796a7949d828363477ee386543b46d44bf191e771a44c7d9aa60e1e3f5d3600d146dc274d3a08d011f02110eec4a8b97eb6267db7b66256c11fd8250581679987a34a5275c84946003230646ae5817860ad664f8b62e91b626b671842814270c0b5d75d3eb5b08dbc4bfacaf12639da9add3aa4133149952493a5421de6314f25856c8fcf88a36cee43668aab1038a7d44f8ac677aaeb8cb09e79eabf369bfc5d1af23151c98cad3e235bebbf2ae6a7b5093ffbe05635c8ad94ca574ffce840117d4f8beb01d21653f2c33655fcaca1e6153f8c76bb9010c47d82d2f6bd7fe3e9b46de5c6b7dd70d6b885b4970ff05f0f7b74c16063652d9d6288a3dc03caad8cc93287097315826e7d89aaabea1ba7d741c5e1c7d61ae8df4ac41228553066a3c388b8ddbde216c44ab763b9169642e6711936d29a1907323e1e67033c19d5d5ab56c26a1eacf27f26f726ea19c8f8e5125a06aa39c85240457ee9943fedc3cb8884ebd71ddbdf481a313a657d18907c2d6f9a763b9193ae67cce104e615f82d62f97c4d43d7a5c72d4de853c9f0d452c9403a5f26db9027acf0977ab9f73ca2429fbcf316080ca3673378dc86b78a10eeb52d8d840d12511dd2531f41fc57d22f5df5f220d7dc85d0cb32273bd47b5da4b6bd27dc91e1d4c15b5d1a058c1066311b6d71e9aadc1471fe5d5d70b16fe2f42b3055b7cec559a171fc948d10300650c16e99f7ead5f951b243a5aeb52e47e5fccf419c2c8688c3fd7ab562ee805995383e91d40090db78d02a287b487f338011e2101313eb0831e81da40b90c508076625820852d263ef415b0e62d22b4ecc52b1eda4ebbe82f3182e8a105ccabaae346d94194a6639bdeb1e7ee8bbfb41d1a883fed81cc59d0f77f48efabc5618938a5cee914f1304eab8bba0976cb4b497f9a26b360ec9028fecb9d9501730cabd513cb9f8c8a06c7f8f799df64b214e272f545d472a91587a5ec3929ad52177346f531cd41fd61b8357a19d8dc109b88830e2fc91d6e748d9b75ce2615df1c701ceea40afbb7db6fefa7bc7e537339ac2e6946f9e7b917ab3decaf12b1968642b54484d10045de8f95f4f448513689ade37b1dff682589510bb55e683704df3baebb76a80623d567a6e653cf5be7063e30d83731f510442f93647eaeeca6a1fb77a7dbf863de6ab8c0f04d6bea1139bd94f5054a3525d287437e624f68f858d29e9e375aafd218d342a763a672319ebc8e561a90aec2af08ca67cbd222867e8182031b4740ab4a57ca7019178ab49fab9b6fe9bda863541466b4fdcfafbd8d68d06afa36dcd679a6b6eee037aa36c71b3ac6e529d8a44c4ac6ea7aa0771a0ff8e85a56b1cac0414096885b7f4724af7bfaefbf5da5f2020c598ce4fd0f3860d26845a33091051bd5f7b0dd66e80ab35e4a5ebac1a6d91fe99cf0bf2dee753a55aec1724bd62183a7490d087703557d22a7787a1e41c5f0631fca5bbb7b6cf7134a32466bf081f36519014f383f91577990d17f9c0d451df9408e5d3e5c9c219bb92c920976c2f57fc6122412e34afcc3a4fe3df36fd3032cad91362f087f445f7a14e7bcef40f457fed429afa4eeb7814253279cfffc4a6dc59778f5e572d9cf1b9fa9eeb0a89a9e21abb266eaf92242f784eef1242d5e4d16e5883b9a334c6b0c016b17615632b2bd2d70c12bf6c77942e7d6a882f2b93b102006688d2d26c3ca0eadef87d667264fcdc756ee7401a4a310812b72c8d5c85fcb55f544ccf369e3fbe4bf8a95a27948013880b8dd8b45967370e29a2c5e75444c096a478f3cbdd87da20fe0307f1c446c46e701bfaeecaba518766fa99db26c2693400c005d4015e858692f23479fb35374e25f76f70a411a0a4f49ad2e1035ef761f08bcff813ae09a53ddeab674137b351b38bfee1ef536a8e5dec38a0f400b444fd4217e01a5eaca4862f32629e33829fa13d71eab46af86c295692c10090e606ae4ba6331e56b7abf64e92121b12ea5f77778f32fa3d9267de42aaeb30f6d6ce8c0f449a287e72e413a19320bfba34babea01f62c9b47fa7061746c78b1accc51ef6b8bd3ebe24756891fc349314a7d7fd1fea2129b70953283d2ffc19e40f13ec69cc436bfe16867a8797f59d088ddfbc5eb818232e7693cd1c2d33e23de9df7ece46d5b4269140d3e92a0ce77f2cf983c450eebe010f917c1c0714ef0ba0515d8eef1a231edbcafa207e20795fce4edbb97c4c03191c72bda5874647387d9310128fbbbfce3c4d77955bda5992b9054ba502daf85ce561181f7372f2aac8ca1fc1ee5f901efef1d3af88e291fe35475cf1ab3fa7b3b18416f2943ff94bc9211302d3af9ff768dd95d5cfdf298d8c3c94033f241806ca033e86b2566301c8be723f0852f33fc13a4571f67a2726040b7e448630523e76071943955e38b60cc9c7df53f194e0522f6beac65a95b0e7dd9f1c480c5d41feb82d9204008051de6b974a7d348bc063e590a807277a157bd981f44c5f41f9aa3d05d9c8e444ba86cb6ce74ec2dfc93b843b13818bdf3c0928ab325bd2064dc1bf2681a9b18cd94c13cd208d4498e12433f593fb2ccb0dd8f1a5403d0db5248d651af36f105e967768435c0461bff2641a45903fb24670325df884bab7566854586896e2a8c4d951f4550479c25be34462b37213c6594d5d942b689978ef005fbf98d1ca22c58a20df8b7eb50f749c0c33c7a140100a8ca2bdc652a4fa8ad4f6c3320eee2569912d516d3380ef130504b40a858e376315490051aca1e22ecc608cbfb4175ab9d6c071848ba10a3e06740e0386c4e46cd09a8655dd59dbe4d0e741c72b0d68bc41216757efe2090087a3683b0dacbe2ca6dd775a4d948bb3c8d10ad0da98f97bbb975c6ec509945e70daeb38800c6eab7d59fbe6641a9aa39c6710642b80b2fc2a6b785276df5262a961bf8449ad9bf13f5738838ab2b1bc34f17b0a858c3d4978e6e28a6b2cec131a800ba7ce57ee07d21f59b82726780778b7734b5086426a8b4dc39e0bb80979ac7ff72779d10ef420f9840da33c968b51001fadf53468654deb4217bd4a529d45a5ad8eb1e5a5c00f2de20b66bdb450a516a7bada5e5844a407887cebac6f86ce3b5263dd59587489029a39d870795f5e3f34fa68ceba0f7ae8bc55fca4073c3089112f67f6d11675c1d420621f8ebf62c4eef4074b35ccb6d7072b58fbc2c851d71079b684b8b1bab3ba466a909a789bedfc30209c7185401c918467794a311b6d77c932cbb44a421d71355a8c4693ef018636198a174100ff81eb90e5447f75926fa743926eebf44a247598db3a17484ab68f5cddcf09dec8ffe53e085bbb4690209c51a38e9bb881f98c8e451d0c8d0eb2c24f5d40e4c2be35fcd6ab35ec78adb12fc4c4bb6376091804a292977ba696a2575cd113da942a49b7c1947a1af2324ae904be9d49162baa653e89526b7a2aafd6ea03eff33c54639e678cd34d9c6715517959dd58812fd735c9f4f3e4f31101c860b97d38a284ac3a305ae88e5e9337ef8c5c23959d5dc6feab9925eef895bfb528bc65b0ae024b1285c860e420ffdb4ba391160a53fca0474b408e9272fc1123a9d44e63491569afcc9ce358caf427ee28be5fbe8c568c9913b3d6d7478f209c4bc8e05a59072e976f9f1bf144b8435f81aca6b92eb1b37b6ab9a6c6609614a77662c49cc71ec154d499adb7769358261823920422563d75b819a665a55915cd9268a2317ca34b6e655244b249cf8ecc53ebcba6518d510f669c7dbefe1f499407a321225fddf36b889186eba3b30cd89ccbfaa7a29e17d2da0ad3d95432db873edbea765716e2d5a7201b696e86fbd25a8cc710fcd0b8457d2b52bc8dd8f12b9dd8a5354e943f3329c5ac3490918242f4f6d9e8496c5cf1b7c6a071935ab40a8d61f9682ba1330e7649e155f31ccab1d4d1d93770ba2a5cf1a565004c004bab77408e16d683e6edf67361d37d6efba761e56e0559024b10918e4a6fa211de96c13b0d4736827f58110dd5b618d13caa03fa415bec8ce795014af6c87cd79754d51b1e0335e827d72fdde407ab8bb54422d7f940119f2571a7a11313c1989c6c19a76853bafb05f3b8ad37cd1de58ffc26453fbdb0852d2eed5a46565b9d1566f7a9943eae054233144375105827f25a780cbbd9b18428533a3f399b312e2bcbd6e749cdf74c0520ab6747d8439905e77ef4149cfce53e69f51694e92b9205211d2b30077e197740e5e3552ec683f12aa1c5f30e79f096f788a8fe493113cdf3363bf1f42bb3bf1e2b7e4619c92cddac4946ff3811ec59855abd20c12bf7a8c688df339ce764073fe3ffc3a234ddf2f3df40e121aa23ae9cd31da25c0187c0247be19e089872742d772f73d0efde5889c97b40d12ddbbec35b8f2b1f9c0b3d947708db3f2726306f4dd6ffabe37736f671bfc551835db0825adc6314e2cb479fe41b92497dc8638dcfbc0e3bf6f0b4c03dd418a892f1ad6138ccf442bc0e04cb2ae36a2f80a0340f63a849891190fc719781e0de44dedde95d2783b1121e9fa3b1280cf81af5cc7e7363579c1da03390e68fc5fc806e67a132b5bb6acd413eace2b120ac3211536266b6e27c006884a692c771092de774111d3e4174d3c00a7023484d54b03af041a4668f32a430153a03ee890d35922bc28789c0d70ee32a76ddb33bf67bb9cba5953e08c5ef400ed4a0cfb8117fb7b53bd95fde9c65f1c64679bb939d7dd60d15a105f53dcbdf98fdd331a41bf39e3904798843cabf3408695d28fd4e9dd8de1a3082fda31f57db3b04dbf536798ee0a6d1cc986906f21666f3c22013c309653baa7ec9fed3eefe1999965467f9d1d2a847f38582217418c5a251a5f3d7afcb0077c10156ceed291cfb2a69b85bad369245c4b11bf802370fd19c33f7c21337f1ff134cb3fa9c86ce925fdb30876b34ed3208c53f73e39acbea6c73256a7dd297aa3c521e3e423ab6c6fd52d76652f640768768f37a616b8154890d87b834c479e103bc9e8228705c00cb78b6deaca11379094341f5c2cfb977bba8259482341f0a32323cae974e49a692f2d4d8bf60efa256fe30cc4ff0fcbbcaec05e7ad4a128f8f5bffabd5fc04221a6b3a3dd5595a5b3540c8e750f6d1887d833197fe30d9d6e3e0ef5f2aa315da2b89eef334b4de0c70b1122e0d09c1469d12b18ebd0bfc49f56814b3e06b05388df4fae4249a031bcdfa158acd4f535df2448bb23206044e8f9c778f3e7b5ba2075565f6ef3350f115c3dae1daf30f3544bec9eda546784f77241fdc8bfc9f8263543813dca64df60fb3671d7a1b7d365b2b73265df6e0b376a7148010155a3f67987a22321c82928573c624f6f026c9ff318f45a33cc5e254ce5f6515ef1341dcca330b3abc782e3dabffe096999154f7782731bf40ad44d9400771e1b152f089916cb63cafb63001021837a13e46410ca942d4f92b2341cda5148ebe849fb438962c0b7f1cc40297201b136109cef6066ce9159825ac41f7a78fa3f29083f5af817bf24d2c2b0ac7ae0f5b1c20b0ddad6823dce655d2ac20ec7f98c6fc851bb7f96153ec0672b25b54fdf71bab745cc846f81129e41cea101cec5582f12e8e18a6e716a5d4216119b9eccea6d3a3dd21ad709daafa12638fe0dec16e9604b69a311423c0bbc17ecb86e4ca04bfc4c77e469466b1bd3d7f65e05ec6d21491fc0542f16285e5d9733762eed27f995f82a8b96b55865824a759c3734bf5925dc6208084bb3c7af1a726f610cf5d86fc7667adfd5270f15041353126392039ee7db494d7172ca191825fea54a7e7b0240b82cb5346b8b147b7bfd47e769b31ce8a8925f25c9e83426cace5c243653f5ea9c3ba7417a7bf936fc05183ebaea1855367dcdb74da488bcdd38f618b1f5b33b8f02268af8344bbd3ff533d80a1b1994216619c452817f50d9d9139675c2a2aa0d2ad38f4946748494680b51ebb8b94be5d5b3db9d0180794d29352c066d7cbc93101ebd02451c13b5b80f2ab4554fe2e0673c4b7197549cb3a3cb57c83889e9bd5c6892a7929ae1007fcfc1087375dfcd7503b264d5343189c356985fc662c7f85a51be9dc189830129cdc36c95a3b8f999ba9f0b2dd7ee4c22576c11998fcdb0b45a8f7954606034407990453e51f4f13fb17fc9038819872b5e51a214696182d50383becda80f165e63b616c0192a40f198c32318fd49a758dbd775e9a839fb46bd49d29fc8e623ce0cb375ed61bf6539c107adc080054935406bf16ba4ad76740820593d6b9be929e4f6d6f8b42ada92dabbcd8cb8c2c93b3c8dc92ce732710774c5b738d886d2fc7d2ebe8488f31d77466e06e01008c3f510cb51aff87f975b83a87114c84d7db04599911378beba51848cee6d2e5db5dd7d932f5740db460aa5372b53933645efdee5f317dbd41ddc25a6f8865c181b6ec383b6d578dbf97f59f02a77c1f7d7f5998259145ad9c4519a3a99be31fe6123930b8c8cd8f84e24226202e3ed08807c160d37ab5e465a7c62b65697384723965c9914f009c6a0b39f1b594a7cdefbfdc4c5132f5e902c970fa8c383e7a8df2190baf4a183bd9d88107a71fde9e186c536787012e44dd73c01904516c889f06fdfff8013cf53913c370e0180ccb6dd9cdb65d31887e5c6f5d8fb7fc2437103eb8ac55bb9551f382a63546c758dc54cdf343bc092a1ee984f1648b818e0d4860f31baec24bd76deed35dc373eb5a370f6d158ad03daceb7921a06a27d394af345552ec5c850f101ef1f03e65eccd7d68e234b1cfe8b1ca17974c3b371b54ad84875bf5d26b8244dca9f79ee684bb8ea0faa9174e54b4ed26fb70e6f98dd4ab16303eb36c27b772eea378cd3cdbaed27f5e7ba694a83dbe6ef41252b5529c0fb3f9010d71de36001d867eb2af182db1cdb6b244eb0dd4a4b62b3c69b3913443238aaeea2bbb885831fa0e358964c19351a957db99ab0207c848f5123a7325ad2e8a4c34e0e334e0f2a9323e10e6f0e0d4e07052e7a94e4f6af246359420f5b79ca2e4d2d981c2022838f1b58ec745001e0308911d3041e565d135bb07bf2fc834797dac5ebbbb259a525482492e455bf7b924808367612f808ecd8adc795847bfb81faab6b9a6b0119d618e8a447a5927aace076177399685d1138b5b75fa9e0606d2b42ba40b0d55c122bf98306b63757f0d0efe874e833a4111a6cbdc9c34ce0c9fb203a472a32e679ffebd1ba0dfaae0ea7da3c02a5c6987cec476d5c771e2718d8c87e064da6437df343f2da2378e746b3c984a548ad84b52cba28902bd09dea52aff81681abed8ea47678df8d1e9e49b33254c54765034a6a5981fd5800afbee74b3ae07cb05f3c8217d642a1783d77f4b92eeb38798ead138a0c0c822ae6f7053ea90c855012f82a8c9d9c16f24f6216a265af8247a16db6e0194640bbde333adee4f33217a351ec69215444393e988792ab5abb7bc60cd2d05c230a4fffe406c0512d09538aca76222403bfa9957bc61e62a54a7276fae5ff273b5533b699e767801281a023d2263bf812efcfee9c608a2de7c5c83ec86eb11ce79813bcb55b58f46c219a29099b3b200a6b18a46ad58a6fcaa3e987e5db9aafc0697c5cd6e0f910626f8de4c133943e62b810416793839aa67b52dce3cb10524e4fba217f06ec86cdd217f1999ddb95b43d43603328fa5103a290c832abb696f99179a50e3b97a9d6efa4da132875e867812e6b3e1473058ab02fb4630bf2005af5274204fd8f0c461ed0f89e61f789051a3ddce8e4723a742a8c3bf55a5700dae13fa313db272073f608f7cbd8d50a056efe3fd3f77c62888832c95a155a2af1cc4f228b431478e8fbd9320c0b92edf105fc0e8febf600004fbfd711cb7fd1583cc25b0bd3cb982d96be41df68c597506593b36d2073b5a3f7900facfb4cb646a935b6f5fbb0e0ba6d24a1c68ec1b89c0461d8fc4379d5cbf63fbd9c13252c75a815b0da2978f507c5a8cc51cc2ba43c78f2e9dda37cf2e0e23b7b5fa1adc64dafeef338eb6847ae66b74bf1cf77fcca29a36051eef19f9b41ffc378355af637272dd892c0135b0696dc8b37071b24cd9d1fd729848c2e537c1910763ca13edaa45eeb68360e91b8fc851481e1a9beaf59b4a8a4f281419217040cca260522a0bdfea639bbceae3dfe4d72730d982cf7d5fe7f54b7955bef993cf2e4901b3411ca899377dfb7e2fe12a22f7ad95ae23f9879a5c9421cefb489407d75f947d5a6509c3db3007ee271e00f9619e38680df27a2c67330ac7f995dab06cec00f99f6f682ff6bcc682f51dcf250d0aa9f8b5efa065bd2f1a87df68cd9298f92f6f36c12ea6312a2281be66006fa2f9d0a64478610c07903b58d649d5]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 46939e3054365e2c0384a051f9596edc975a5ed951d4917bedbc40af9d5e361a

tcltest::test Hash_SHAKE256-3.66 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 5a23ad0ce89e0fb1df4a95bb2488f0ae8308dedd4edff02247d991d2c01044f001bd2da1ea4fd3e0daba2473cf12ba1ece585c168594c8b82f23af7bb8530224212d6c39279220b71f8ad40725d80d2f75d29e46196f6b2ac5a27375ffe60eac821a72bae5907c9d7861ae606f037449421dab53539963ded2fbe4a6ddf2f0f2ec2d480e6d7072faabe7b864f4ba74d4fbe18b277b3a383e1dd90bf79c9f315c270ef51b075b873781c5fcfcfe26973869c847a8d97970b170e2ee5083145854fa6481cbfa7945bac2a38211d36e64dd5478e6c0b47f959e91be979ad97aed412fd8f50490f133ec36285089bcbc632c8499705656742e6f49160ebbe7f8788b8c1158b00fecd935a4fd704e01351d8bc0d4ee51057fc48b6092599df5b78299dab8b2b6c091c0fed6caea46ea031963d1d1679b0ac8de5a9ed982264adf92d5e0740cfeeb096fad9236c45bbf4edf1d8037e31bad780444cb949140309731a668ee6d70d87b6eaca1e90874c73df81f93ae6ab935b7bfb1ae6a8cd2ed07e67438cdddf4ce104661cb8cbe784bf9ebd3d2e0055decac950910047dc4ca5839a81aba647217f07e36d7c7ec5193aa40a00772bbef188010b4b9096bfe0fb2b2a8d35d0bd2f9429e918f419ce6e77680edf80f9557025ab81a71225f67043cdadd2e5dd9fcbd2f2fdcb9a3d51f8f8832246e5d997df26314a400f760e9f11f38aff263d7d8aadeb87e1e94a0e4d206deac3104d14a2fc3acb82d2f766b1d825587e6160b4f0a77c1df86bd041dfa190ded09ad45a403a108c0c173a9d6d18eb7cbd41f7f472324d267b9c509b24de8454fbe00fc75b425b122856a0210556be8e582253ba93f0b747e7e56b78b149c113a17a4fea38b792e483ebd8802f140703bb8d1455ea4542e8c9e151791965cf616de425317d0c20798b7134494ed35d53740cba74d9a2889f9e2ac30aa1d517e4bd98104bacb2bc57cb7153caf9074a13fe1ba695d6baf0c2d0fc30abfefa23041d10a1773c4d9ef5b056b7a3923225bbd624691785d103f91f001aeb9557894608d84972902f70d9c6abc061cee6a8c188c182985ba74aa8b4c0f237e97fb3311d79889c6ceaba7a9aeb0e63e3972bbb827d8386bc802d684ea9471f8fd5294ba75eef731701d46e999f024894c627005fb2ec714d0e34ae59339a10dcfa640c5302de852307771c4f224c8e36e633467cfc0dd67193e8e140fa6baa7541ebd98d0fd651155deb1a283f4d836e99d8d466c39824ced3c2b7b2682c4add5e3959d1d087556297c8deb12065e690337060a9b3fbeab9205a880a076c8079a1c4f3adff32009f2798d07680561640559241b227a9a6c51c08d8d4429cc9debf274d9dd696e12f9fd395f4d97ea0f372d71e1c9941d7872956309db44db57108d8be1e0106859862f1a5989640052e0d874c55a3250b53dadb05c2d6efa1d50141cbab09015c7e137b75ee315ab154985b52d9bff390cfa30ffed025033d7f5b0b0cb15927e42513e98d72452f340bb5abd8256a0e265f046d52622918d6d4588ce7ed7bea9b31f6c462a14c2e1bb7c7f132d51c053a96815bc6e55da11c789c5fe3abdbba00394e848c17b0e7c6ed41d3f94550593beaac83b2d62d3c5cd088ec86890326b18f6db260221decd410d5cca212917a98efe85dbcc1223b3680c0cb56e18ca10dc8d6c6957ced8da1d6e633b3b979fa000ac7422b12d73e37edb664cb51d2c9936a3c4982749a7ade83e5b1a4965457dfbfbbf9a457b6a5bf8bec515a567ff0d0d7e0a3bd95bf14e8cc66bf0b55cb04a69358bcbf0c3b125bffd5199a6bdec754b6767dbd7cc5fc3ef4ebc43e644890f31a0033c1bcfef49bae0315f21e99bd8d7a603ff88649816fb1d769e44e577d23b844c752c65cdcdd0af8ef07cb1b33e9983052f54ea454f967dc0863706239d6f2b91fe8d4ef3bbebb18fd221deddb0794695f3a3280d74aab4c28527713477b5dcf860a452081af22f5d8f7638c0345f36ddd4dde4998f1e0ba5227cec5369f5dea922db38b5f3cc711fafe58605d5339c02596ae790a7daca91e69e402879177acdcc99caa14d63bffeb8d5925398ddc02f0bb3f99bc5c639ad57f6355ab103f88ce645ce74309e612234ae22538745ea8a701ee162f0caa022ffea929219a1a00df9490dd8a5659eb2aad7ffaca954623b1214698c30ce461766e32177b8dab9798c0c4f73b2a0c0d7a3baf10706f06f6b79fe57c28dba74b5124aa8b296948df728f65bed62370db8a6bebf0ca7025b422b4274ab107672248d85f0eabbb862b0546ffbefba13ce7e3b4b336293736ce7b24a88f0c0ea888b5ffec1c8302f81cc98dff521c41a4a50eac913b2d229eb83967c5b38a6fffe120e1be2f4fcdf32727cae122a8735cb573ca028a36d0e203d5d42b42cc89b1be324461d1527b2bdca89441ab30b4d97bab8393ade6b09523e91035d7330a7282329e638d3ba8f69fd460ad5635948f7a2e7fa110ad401caadb9261cb6e60c6dfda362fcd8bc5d7f333c660be3781033374f4c74d0b1e0d1b35e15ba9df0b032971c2431c935064793f1c183da708b93a07a982cd8098dad780737ffcf587dbf191b939f512d710946ef8406f14aa35f06f04402c9e4f0a6233cf4b2f5265a5bac29170d16ad860d74be155cd00d3fde9037babb4c4af106dd86b49db6602e5078cd1845c0bc2d9a43e4de4d1ec1465967d9602208447813cd6bdf86bb10e3e4a48ffe0df8634efadeeb45a1836ea218b25ea0fea6d96d171c75dd36ac3d606058f7322e66a9d1736b5bb41fa91d3a639a4ce116cd12b858f12c177530f08d0cbe8e1a70b1969e4e13ba929035d6f682472d8a3326f5411f7517f30aef30522ffbdb1f9a81329ed3fd9247bcd29fbebce088051d588df1b3cfbedabf920597123a66a9768086b749526a3b6b26827a5b8ee6b99c0cdfae5e28a9355ac17744fea1b821ca5499d2fa39cbd665d98612a578ce0e78eaf56166a8616aa4238f41395858ed5fa573d82cdb3c807194b36ee3c7c86c7899d6f314766de3656154760b88ce77fd1c1daf285f45a159ff12775ca25c3b66c28a4ab0bb55066522cfccbe59a3266b609e4136ee6ea1e3c1aa135a3213e3080c1a50829ea23d6b0f062999f25e61731afe749db040e8d882842b239e74cc26208debd148dbef41d00377e37c8792dbf24632a7cc42deffeca6a8000f085f8aa5eb05e7e18883ad0cce9ce51ea7206c8f7d629a6bfdeb22a51a7039ad5502fb443c850a903163786b6d82e7014573ee9aabecbfb4f7780755e86d169fe51e40a58953837d5ff66a97ea0f304ce9f329bad8b75ed0baeb77a51685df0e401c226fd9579ad199a44a354c2d0a281b08e5980dadbfe6ceae3a3caea2db21ec62694b357996b468d5e2f09cc3bbbd641ae9dc52b5291fb92718c4b7ab5301735adde0a4a1c14d53f1f86de1b88c324b91fe2dadb7e6a305c0d9e23a888fd55d6b45d72eb761c5e260555723f6c5b059d5ec33289c3c9939e044403e21d7c630fc6bd7dba3bf439d8bc1546b64ae5e144e7b97ca4a7429deee2386cb5e73fc76771589b44d23f00dd8030cc0ea8f65066472019baad57d7b543c5ce927aa9eb6430c94c09dd4f4b9b0e5292a70afecb7809b18a4a4a9ba98795768a164c6d579c818a2087c1c76297c2d50b1de571cae08bc85ec21360bbec53e55fafd0dc8466e005892d0419ee6a2a42b5e1ccf1d73669ef07b07c69673a0b8c9fddac8a0a59d8e6068838c95778c126238135f168e0009ff5a409f8342728c6cb1e33e841ebd8862927b458364a03f9d47a94f2f8840c55d90b209fbb0a383e81e01b99d3a36b70516a2b4903648f28394c7e692e78d99b025474e26479b65e24c1a7f128070e3f2fede21e274ebf5bc26566d64364e4ea122e5b52b8ec3fa054417d90c79d4d4d15219d3a4a6f00ef1063c2cd0faedacd78e7685320d8109f60de10fb3abc85149183a13fc55c106ca3a636bfbbdd17bfb71e107654d3e5c60af5e692ea0b524025a29291208c5a4eeccb17210066283b4d40e83ead563b9e933782fa6e00413a51fce5d0f4764b206c31088355e088cabbee540e92d56e939a016a842f11be7da7011f61b9a06f6b92867f7924c2b5d87374e888bde81b4f9fe201d2b5d64674854da3e5d8a133ab0029d05515833bff14731a1f76f4be1d1557dd688ac455d98d3117bfe9ef34492599cfb970a887a91f776d456681b3a68ae171b8264288f71f59ef6255f0fdc08364b218feb92560e4e0569d0525b856710d534410f74c77cc369f7fb53cdccbaa092be5e82ba1b1154c6a88cb4728b75849f68ec3491cb61445ac6a80496db4f9f591b2f5766904112a2d9b316c8143b115d01ac5ce763c7805aaa53fad3d0703b888128f3ff7e478f7f436c00c5e861bff745a80ede5956804fed25bbea74c47d083671ddeeadcad4472fe0fbd1ce8e96567d09d2de74b74b23d545d1458ff46cbf82339d9ae573e7e0e5378e548f6a9f60f0f6304f7b92e9bcabdbc44ae9a71096af96bc6aeeead234ad9842b6f39ee1fee898b199378e6304b6111a634986727504c1c1c88fd69d29cf2b9e5fc2d26419ab16dc247054c0e1400d5df778389945c8dd341b92df4ea9921a2ab7c4ad319782993a58ed8c083d8ff7146d3f668dec44119ecabdaeef9b408a6e27c1d84f62b549519e78dd44ffecf8c82f64b85754c086863fd9eb87e61fa5f31580fbc6608c4dac5cd7ef7b0f9f3800a4afd5fe63836374e1ad3e1f74789340eacabd9f7b4fced0fbd36bb555f0de4434ea668a03d7d1f018034dbe2c927cdd0f67c6e19945f347e434f9fab827121c47db12041b02f8834ca1c36cf6b78753ea1fbf94a4b7e5987ec24053238bfe11454c8273934dffb4e5504631ba2ddc29e5ba50c183edcb4b3045e9c77b65c7aa97035edf53000f0c4bd87e16603da4e767ff206f1e2fcee864849b5fa9fd9870a3c84d5142634f12e7011522d12f0716d7b7d8a65dc516f88148ff22959b97ead265f7cf4abee84e1f93b05ef34b2c3d9faa1f6e28f6ca03ef59bd182787eca08ca00564525801485c55fad0afd93ce426a09ed0670c138f157f7c494808c01a3a431f15437ac38907109882ee205e93d461fdd3024d18265d82e4bede683be14214ecec036c5698868c357c9669bbd311b4e380e102024f2e299e7ed2ed847c0edc15f07b76e1fd439177c490fc7a2b4563f8dded72f893f03d52910de0c4730462412993e08c41a4e70664c521c524d834e5f50ce723780c87a7007689224f8e7019a034f181eb13558b641c20c14433f052cd27a7aa88e8cc46d2f42fc79613cc455c44f2e583f7a5aeca7c409816bc5fe66f27fbb64bedd7d70f711bdad3fb3f6c65ac2be391b89d16a0cfca721fdc484ae2f22b6f48836f01bfd496848bad9136c455e4a09ebe066ceefc0676e9fb74262e727ffc07135b6ceb05e6ed48938a4d802665473170a757baeb3ccdfb82ac215c8d3f86100364c19beb533c9114f256a106f5fed3384a800e84b49eddd7b6e3722db234ecbd52a8d570279aef9890fc30dfdeed0b7db58ef1afb51218645a157b39212f22a7edc8a37ba82ee9872de43498663e61a8b12a6c5489513390625f7c99d49e3a2bfcca0cf52021074a91b9b519d6165d1f06fc855b7682b6c294687f3513aabcb0495519c4d59ad1478421bc4a76a0884b7cab46acc5ce2964bad98bf5267b319e9a12d0d110c2d0e7cec44f138d016994dbe0b72fbe5c15dd9a59a9c15438215cb8a93b0418c08b92364c795c65648963ea42dfcda8550295fd91e081e70a12546bc1624537bd8ab1865e3f0d44ef6e1e727ac66ccde076f4aa28381d25188eed7a024b7db3e156aa84a5ab0e73caa22f3b2f74f57326fb626bc7b97d578b1c8faf160092d55376e7f9c6c4473a1eadfc0d0af251e34e184706166c89c48a45a2d0a2896ee53c72ceac6c92a0e01315efb0b347666581560b44bc582ab63e8f8ea651ecf72bc3d3c9673d1e02afd0646eebd17b1e40e73b16ed62854673ce84bcf9c83317ee11203ff0e16f53ed7e21e3880c9760bea751d0c9affcc64463ac9291b266b5784de19810018d7de344d5b54d0ea11325ea20a29f4cc49371258e7935b58bb90fa09f3b8f458166d94b074c037ca421bed72ff239e0e593423bb2daaf79ac0afc32e092355452f816ba3f107201a571d19706295d1468b0ffcea01bc5a7d092872a2f04cad70819e4ba06696143aeeba6512db0d49054d1ef05e1a640e70038f7b111f91575acb38973e2bf99eac677842e2ded66fbb1de5b09fce1e7e043e496ee10d9dfd745ad4e0c5e7ae39ff6fdb5568c4adafe88be8b017936843ba17eaa0ab30df0a4dbef7baeff02050a45657ff0d52efa40e05bc716e10cdd9f22ef7c2c82fb1085776158804fbfc7d2bb972b248d018c6ac19c5770bacabcb5cf1d547d060c07221feb2dabd51af39f607c001c3e2a5923336982368fdae725aff17a25c6a89c22de75415619794f1b3dfa48fd6f1329143faa9291e5a32696ca53354b4b38992eb9e7ddaaa445a5ec59fa49f2a923c4e4ec47cda8468d43b1292cce171b22c4edba2949cffde7bbbabc654d2073c2f13c43297ca43900041dd3628db2c0d0e508e823cdecacc5592e6f219ab255587ac44a36e6ac47643382d0dfba44c2a8c6264bbeb1293a4949ef791878ced74d25230b5755e9f621968a29899df4a7142ef0ece03caf2eda52a6e230319d820abb028e750f82d19ff6dbe54a7eebf97be40dd272b7a610df3bfbb3530c46ddf50308d9765da05d471a1d0c09a4513f45b126055d6a3669c2cd95f36850f17177c7def644876b247fccf9a7ae584d02d95de38e879d85bfead01daa5746c8c4f9cd2bedc5d50aadb0d216bd20e207c9a1b0eb74da98be9dbf0c3ae00836f060e1de98c4e38fa68043f51e56498aa81c0472e7bf3da20788a948959e626794cd98c2cd8584fc66269efdb67a109858836a6a7e789705880a104ed6eb4f23da9187417138926573262bb288325d533e873b6159a6d2076baa5ce4a4d0b7b0ea3615232ce3f412f40851dc3c85180483afe01f2051d5f1d5f1f5d3a7548057ed44a92fa890924b125577427a7c2af34e84bf6c7a81880bf06544e2887f93600b41ad2e8a465458f59407ade91e7968c88d41100f3fd39ce490afdbef59d8136bb788e97d0e2280c44d68e53173eeab1952ced288929eeed9fa9f8483eb37b8362da22527efe40da80802b2fb837103685bcf7b8d83d147f6297da7ed3c9996932c63ad30f18245c84e3ddcef57ebbadd31aad3c51954f063a7af0ad554e4f6ab3b3348411ce4714da6812ab4f64216a25bc9a2d95c0f3149fc9f76e13c0220a6e27abd0279f3d85e993665f3686060dc6192b07054eb51d0aeb3b2bcfbd95caba9a0d51a0f95c424aec45553b62bdfb6cc6fc5330ace9a1f4755880c9953f2e2190d5832e6b37bc66d93c27de78ddd5622c7a8ca85a2525f4fecbe7a1f572974b9290ef10736466d5e0b7418036da0e4ee0222dccd4dc2b74ce01dad94cc4b89115dbe0079046d410a9532cd13b27189b587fb11ebb93250c8986d4e009c9e48aa0f320644073869f897c6441d46986c01c0fb13e6cce9514a7e76046cae6bda0ba930ac7125ef0eb07bf6242c105db75914e987c67031e35bf9ff78dfeaf967bc91819a0748d957bba78b1545f8088f46eb8f18948c502e8271d251613892164631ed770e573f6da0854dc172e6e01e4faeb36c57078f59474eb538fa807c0f30ef3beb8f3a6977e77b03cdbac22e8cfcc31e2b17cb368d32f971d5b3aa007b023535a090d99f9e19f377e426743a01d59398fedcbf8df1ccd8cecf939e6682456aa13b1c1c290abd546facbce54ca46386e98dafcbdcae9c5493cfa245f64b80f5486738eb4ee25b06b4cd86fbac9d2d05d87f97d76aeb2ad68a7ce985f8ff3b40f2caee2e584f7b710ef08c9fa215bb762e7c9dcb80d1ffc4797f6f47b3c5ffb2660c45cd8d78a6fd44bdd5ba75349642b32ec88f6688a287297f3d7470c652b36ed646b03686631220db69326e2145d22f3a200c64379b88622559f27729bfabd0d0f7bf9aa03b1868f350f1d505508d6a4bad28c206732eeb19cdab1017cb0255a162e303efb577e5ac92ddf20740da2b0778ccc71eb1e08e02a18583b80021c5f18f02b79a59975faf38e00c509c233c1688e1bca7dd081188db6a1733e56ee86a8405ffcaafe09ea34ae16c07eccf6321e54de9c8800d3d54854115b1025286b24bd523a740bb6931cec75b55b94669d098fa96aa2157da0ea6f2c559e0366671ec586b58938e8901ce7c1f6289ef16caa8ce0b75484eb05e47646f54068051506d781f0630c2c7ba51e70055e73431b81db38f507d5a86ea6f815bc9fc9a0ff6d81c86d8a0c0e90460f04856587c844100906c6349e3265d2630d1e14bea680d342ce9f76aefb789027f3d8f6630d50e584ce8d73351565d745918c47ada243a8a8f908a16b6fbee3f7c292598b6edc62dd14cd4c40cdf9262e4799911d00a27e12fc3ba2d7f7bde1fcf5243767794128706e081827c89a6f7ba3c889936e37c41f3caaf36b100ffab61010f89db919a6fd3eb07f7091b3e3cc1a9bb997377e0b3c3ec90b9b352f9ea187db1584bae05ec20b78eab1c5f0537e2075799ef8efc3d8773853eef3975e5dd10526c2db1fc07d58a3d251b1ba0f206a0872112f078ea27a5b84ecc7d1ba299001a4bea6326c7dbad3ced7018ba7513ba71ba4464fbbf8ccb4e70b2e5922b3296307feb8c2c341868b48b811ef9c6f39e3debedb42dc69c2c722d093b8388921abd9097f4b5567502cd87b8f505ef8c94143d75a6b80640124a0c3a4595bf9fd4e80455626a36dac5ae6a7c6487f8c8e31e374403418761c3fe95abcc71da430bda658fa0f2db30f780bc343427e78dd58261c2927352e588b750c597bee06409ba3aac74f74d5de16a034a2d8cc6c5b06943581df36eb6a99dc6f07025daec14b10c14a71e954bcb95c925175f9c57bdfa666c6a6ce3ba6ed77e951d4ecfc275e7622e0111bae0fc28952dba47722b445e51684384badb1f8e001a67e0c7ce7483c4644978c406be4cf0cadeed4f298dbc8cb26ee3faff03e9d5e91684cbf858aeba1d49fabca4572961644af83b39df3da0b4b332ab1063118468f2e1e1286b8fcdc2c740a9a210e67063c7113f43840914d4dc19d5f5872d9501c2a01446f34f84b98cf293e731aca52f1de0612fc247707caf3f8196b766911b5068693a3915686b60b7825d02a28930140cabe5e21f3d13f64db7db3be4ff1d62e2eaec850a00400a377febcbf1a3cf733e254d2bba010177ea7dac5ace6771c1b59e451f55d4a1541b9179d3c07b72041dd650e74047adfbbfddf15e4c517e358a8d2b4e206cf4040bc1f063389a838d52c6d45cd994814974de928d8846ac8609c0875b9051a2e3ae1636c3818768d784fdc2d4ab72e42bb0887730a7cd637bd93e428ecf0a14b9ad98343bc2ca8baa5c840395e1683e671be4898ed46f0bdda30f422f051fb14eaf4fd21323ec52ce82627de7a1fff8c65ef9aef135b30c740e3c71865918e0695d44f992cd74270a9d9f1a1413bd781021d0cf9ff221cf08c3ccb6dbf47e0bd45f7e8f01e8ea71275544c163612d270d0b6fd5e13441ba6169c7f875fed999555c057da89bd797ee54575a1bb0d46d84c5e0a6ff239c3646a936219d9eaff2b5fde2accf0fc203243fe3cc852b3cb33ff72b2c41e6b9ac812b20189bfc8a7ebbe91c03be6c331c94c1ed01e9f7ec5f0448564defa62082d8968dc5b741f1a431c8bb69bcd9b24a05807fe08f3f6cdb9c606bf3508a5a221493851039956dcfdd44c8c8137ec8f53e24a051be29458dcfe87105adbbeef2fdc911e1681f8564890349070984fc850856593cbfddfedf6488716b4e60645c5ae138208d08c1ccfbad490ee713d7622bbeb189db841f3825e7720d7ba245c6f58203b5f077a96ffcebcdc5f552e0f56f03b021574630ffd8ae7cd37ca9189a94557888d995c6b55365df147a6a9fa49ccd5eea7e4aba9e468497a5989c653f0001a282908a9f07cac286e3c0839cd879c6c4cd97b9457c3712cc6b19a3b51d012f86895c7dbccb27aacb1a0dc360facf94e9b2e9ba57017300220d45e88e9c5e872e868796a66b33c7b4a1aa55727066dfd582bd767a95c1f5a27365907b24e1b0a16257ffe44db6be4c60df5f5aa4065091235b1535a0ea995385c0c6011d5053e70315ddfedb783a983ff30aa1fc778e247f0bbe108ab7953d2ca0b0aaef74170953085b7d7b40e1a227307dcee28042967d159994bbed91684e4b76fd0215a50e397a9ee897d75b71fedce169bdeb14f004c0cf489c5734ddd40a4182bffba4fe9cb1d1c79606510dae405dfaf57eab39fe5688b593bc27a3a72539c28cedbde166f61aa3e0936b7f1da41a0af202b079521deb6109e312c2ade48544d2b498c07e91a102dd4650ce354f3f201b3ecab8e85e21d667959b43d08f4e90fa18dca2ccca8f6ff5e9a902dc8bf5c5dafca2ffa860519c139a6d2df76dbb2f6ae1329038e90c6f90421d24fc9e64809602e0557a6da43977ba2e880ac7f5a88cd74191aa353f8c161b553a7cd1b3d9b8192bc346cb4237f9bd875cf0e52383c7c2b2ad0af7514def3af84f446c0b58a6092b50f4c3521e036a1fb2930f6e4982692cec40786a3a8367af683cb79386c99a89046c9dfd74fc8a9f91da8dfe812795585734fdb0dc3a6c228f4cfa74ea8994ede796a16ac34ce5ae02ada6fab31d0eddf5cfd14eba7d10f8cb5c7cd50d4fbefe025a17c2925a43f50cf4a48a68cc9c65cff73b6a5db21ada255486df7581e1655ca1462c6a906c1bb797cdd8269c0795eb95822d4b43536fa31c60b9ac89c5cafd5177d1d25527c90b7f6a0978f516175392efbe0e968360509c528d3acd32d3ee54f2d852113ea71192c248e33f93930fd4ca452e15725431bda480a5b7f02b3690ff6a722d775cd0b91fbbf1e244b025455bec3126e7f450659dbc77adc678ddefe6afbb0f9b9150ddc78a2946f1179fcce9d9a133abe8b47d866937197e63ec58eeceb42072ed9ae403de13d364708450be3405a387d765eea7ae6e62de936ab260f0e6c8c319b5b81bdf38f26462ddbb2026e6de40696c9e48b4a3f0afb15fe7843cd77058bca93f57b41f09b895b1f458d7cb4ca147d077b1a35e2bb864d4dea2db117ef77f7f63ff86518229b208e3ad6e3c55711999602aa2287bc355cf7f02f41c5c690a3e0a5a7c54c37f61eb706913c1617786cf40fad98748962b5bb2ecb07e707504ee1eb1bfb23682496083d2f0e3d87c377b016a7105fafb8f7d5fa737c124e51698864c76f241f9137204322a292248d4a58ac2922af9b7293f6e7cb06cdf80e7432a73ca9d4eae6626dbcfec1ca7a30453c34a637dad95a0a8c7b34308080d20f7f26ee33ac467eb86f0f25c42cf556f8f94490d867f5c9dc053941a1c095568bcc684e8510bed4a992be2a2260325be60e509b7cdd5d3c790f8665a304920689b8eff016b8b082a6775e9e74da9dd99cf9ed08adb18c4c71f9f732ecd3035c79b3225580fab7f33f9b44d53412b43a7e2a7e7ae37b1f544763101bc7a265e2ec59a3f12c5d61c0e56d2570d89ef2091a3e8964a69062ee79b94592cbf9361451faf945a1571a56386b54f3ead5f3bfe1a4a2487fa81395898b2c3a724df07b3b4576e5688e5e3d992477d0d35e15e974eb3db8c7189dd3e7571865532721821897b132ea59a9e19816e28a3aadf4f04470c01825685e14138bbec5d70b55c36a804cc0bf4f89ecb5b149a2794c0d7ec0d3edf9032df0e0aeb773be7660e9b9b18d8e115fe68aa96292019c279ecbef8a930bddf8bfe2c41958dbc1d9de69cf7e1e19a734a508c22f27aee9ce3cbcccf22c9e396ec4a038e3fe4b7259ca628f30c053f4e61190a18be0a61dc59c5c91980f398deda2b5a97f0667427ebb407379f2e17cdc92ced2095b8b9ab64427c80cb9525dfdf09fa07b0fa3a4c137a016aa5436b190ceffce1806c40308baaaeaa0c96d2c0824cac84878853bb9b5edd34232c8359b1cc0104860e3c945665273f4be0e7aa4c5c36b67ef9059d0bca653f23d1a7b6412ac230b086f6fe4ddbafe88e5aacc4c3a260479c33991aec255f30ac1a1f584371090e05bcb697f9740e4ddfec69377184f4dcea1f5759c5d794b2c7ef32663f089c468d98c486e1990b15457e652ade6bb8206ea586831e48cc6b7b382a08be59437f500367f48db070e8c9f8e9c690c076b832ae6fbf7fe0cf03d0dd4d6847cbc86157e3e8098623037071423d3211e9f44f3e205b3671076423cec6e4ab62c6f296a9228fec53588d524745a997e950fb8b98e590107b2555737edb36fc97b288c34ea6a4c67cb9d53953e7751d9e5b52144ae3577426a2689ae7058d816ff853934f596fbe8aaca5cb9c11e8ebba74c3935c04f78af9e66641112a2f6271fe1babb32138fd049bc3b02aac4b2ac50214b0d42eba7b7c59160f053365c8262da7b682e846ab72edf891059ee601456d0e12bc4be66f376342adca0977db14edc15ac495e2ef5c0a0c1636d10199c41c79621b42c48db36db0c26892adc2c5a72f3f821054f14b5ac7e6c42be41ac9791d47fafb9cfe77dd29f7e8b84fa6c1c1ba0ec441e4dac745f1aab796d7abddebc16a605eb6ea0b1d75f45162a4ae8ea52a6f9010dad25633510917f9217487da2f7255535978f8935c60ab78f503b6b94709f0657d00828cb0aced3b0b9e4fae2d08e2c2ced0c5a9a6e3ffe18accc167d985eb28168dd2b8d63a4046dd51bdd084d40d935e1bfac61a265487ab323516a78a8941eda0ce1f8b5c]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 7bb462b6025b920bd517af25a5f2936528312352c2dd1e81d34d53376eaca7e1

tcltest::test Hash_SHAKE256-3.67 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex ce1daf6b11023090e40306c947ea5edff166b998a00ee8dcada33415e395dddc91c9c6d1de9a6eca5d1e2231e1aa71a79398e1ed4147e005f964fd94d768588b1b6257067ef79b75c7a733f999520f118ffab7758bca3d424a576f583c2752009370ccd39a21a1d74926a1ea16e81f640d14a4f8239ee5dbc805f328bbd8b28422798cfeda2166380c24d3cc017788e9376f113db4cbc2189af5efcefc85605df007ff4fe5fed4e237293367010434e83392640de45aba40e9afcd10a63543d324a18d9064c0d21cf3bb2882bf990aa8290507305b52b79ddcbcf3b761f14530e7d09e87fe70472d68641ae7e23df2734251606ec2bba0759ca3cb8bd7c04dba601a9afd5c151d5ebdab715c13f9d48fa5fdd98fc19e5d1150ecbb53adaa44bbb80ae9bb26b73bf71b1896aafad498457c91d85aff02d5b921202dd98eb710791625f386035e8940a934ef993ed627ddec96c79825eff2b537c688e320f09a3da3f521299b13ef809086e5f08807679f1f930d11da6d9b4cb966343a0b5cca4e8601d96a97dd5501f797e1797f7041d33d10128dc785b8c7cf8999a6f80389f6e8d184139fc5a30907ed49facc189dc06d953ed4943e326ea3b61fee8feebd7bf1ee8bea5ad2c1e1e712863c160764afd8abf9ade8a1ef895a752edc77244f26c8df54b8710c97d1c18e010706467ce8a6d9abe26bb4d8601f4e2e3659ad283f962c49448b7b0e20bae7212244dccfb3fea8bc39c681d53b18ca87c5dc922e0e825ed15851280c18fca74d5777d14458089f947ba110cf616d70a151a9da4bdab5fc53ba6b1a7affaf55ef6c472ec21eee469b70a367ac1b47c8e4a2678d66ed578e39338059411efa7a6e2a5efa334fd5253adf759056b1ce5bb97fbfb4678d8f9cea8b38ee47bd069d3259613d7e31e7c5d791bf93b36b29b086b15956350385afce8a3de07624fb46a3c1fbff8b0d4caddc4f2876ad908150b401dc7bba97624e4df83437b59a00fe2929d249422a2c65afdf58432b6afdc1ac34f12bdd904e02cf9cc8fceb683d4b2c5b8e228bd2ae76ba09f802143fc68dd5153f6f86387052bc3f9f3602d7dbb8141dd8934e4bfa676397b0b95258033b966b6f4e9dd5f1c67ca961ede12d02ca493858a373de39c0144f2772ccfddd5459fd28d10bb0f8e677a2b72970b2d90b3374b55ae2d3930a34fb06346a767c5f859413ffb611ae3b16f249f397b089023a9897c083722fcb2b61f408140a07e482f8d7e0873f3b4cbf60be523e6d3937c76ea8de3e02368e604a9af4b202a66cb7f11d7c6684c6a1dbb6be4f4d32123340bc8dbbfccdcfd83d7d9f032ca6837e8e478ddc3c2677c3d3baf3f1ac473c7d0f4bf15fa319233329c4ad3a6a3ec3a26ec1ce07ef6e77390d35024044f4de9d9ae37ad31d2f5a268ce569a355129160bf29890569a4ee8bf3ee9644fb81211c4b4bd01e50579b3acfa97d45d36a1341ea4565df90100442ecaf5506ba352c81894d9c4826d90ef558d89128cd8d71cc55de0b9c4efadfe55f3ee78d6a5a2854bbaf865a86fcdce2903a4c552cc4d48a69bb22448aa9aafcb664f5e1f1363c1e4b3a355b57092d86df9657d3d65764018ea653e02c668b1058e9270b39119165a0b652538348286baeb659aab58e48bb2d6546761b79aaa8ad95241228354eb422eb844bf101f6186360fbe3b0b0a940acc1a211412a304c1d3095fea8e99c9039a17449897cbe15685de585ae07ae16758210b685c14584108121d8a074a3834d9fca583300a9eb2375be9899d980c7ee70376fcf8510d9ee5171a7f71f8a14c6ae2d7dd7d7df21fe6f2f25586f46db8152c04307bfbad21f682c7397327acc0c9645c25d47873f5f15df32d31129d895f2523b16b76af80b8efb4467f59a31871fbb2ead99cacdb02d77caf20751489116965de2b549d11b8b86234faf13cda01037c9b015cf5458809ef29d98e5b2df8733b354017fe7b526741737aa0c28bd33609c4c02bf5cbfd6fdb4bc0d0d9fe60dd24554e233c243286e29072caec8484edfae6aaac16b4df73b1737aef3960e6f1b19cba28ee82b5a1b60a77e2037a72a5b08f353fe0b6aaa0123f6c3bc1fbf77b5399f87b7e3d78124c400e88bfd448f7db0cd469dc37eb8f7e1e19493c261eb49adbadad63bad68305df8b117a08545edb0e2cbc71bf1eac458e1699e085c947e7b02e2157617d6e8347823ebaad41352101829a49c2b061191dc890578193afdad61e99a1e7b92f350698430a398c255d659aa5bcd95d48592bb3df19bfea56e4bbe358dba4365fbb9b11d0d11381a9d0c8c941537951ec96567cd8af7749c775b000f17d3d617a5783a36ab7e1ee3d3b99930f96094aa8412c781f716e4e9c3e711bf60f09c709b94ea173271b1e59ee667c630d2fb415f9fc2a06180b452f8f6d88d8f99fd388515ab07c97359e8a79ae09ee11530ab02164274efbb4ea0bf913dc1cc5761360a046450980b7eb395ddebff35af9db0147e2e43ca51189bbfbf28a241b03033d368fd38c8c1880f11b77033542aa8183ee06d5619ca7c0aa1888179132ed2f788495d08811de0c4c3315880650ebbaa2743e9f505ace0b60cf4308e6d59b04ad0af6e07eaa8ec9a5252892f90e13d2f77af8968b681ae68a90c1e2975b830f453a3177f2ce915596723ec87ff2d9670d82d35f653d04de620d7319253d3bbbcba2c40b66e68c3c8a9aa69d2d7792d32f0c3d5e8042225f8185d52103032ba6bad53d1f5d9ae5fb0c1f1e956434e6c40677c5286f3fe9e6839a76aed345e93c9d31fb38495424fd95600525d6933ba61e65d921845ec20fd2cbc5f6f86deb09ed598ccabc9acfd0b11dd8e2d71b07f5c15707ee62574137e99a51bdf4f3a77b25ac605b29e75cf0e9a92830e844d24fa9bbcfe38b91fdfb427688485b6fb52cd0bb247e03b242fa998271b4aca930f032149fb552974ec677f0f84a8e4a8a8b69063787fc84184a6b3a23c286a09a93f4e205b869efca35e49a1029100c9e03690e181d56f5536cb940dd0ef8c385a75cb480813403d6a632c27e58933e66415b4354b2b56e7ade1e36fbee85aa68b6f3fc9e84436c1aa3cd0a817d6a5889b1ba366bdc8a57f50af47d1ee5bf9dda2f353ace560a910ccb2de2c7fc07d36ed0f057cbef685a589ff693a488f946509caaff8e6b1c0b0368dfebc0591e479c2bb848038fb1ee2c097f1b2b4ce51c426bcfab5d27da42b5295d75e918f01d882e5c679122097bd5b4086421a5e58846390dceb930d7c098792121c0b04fddb9556736f34ad18bfc3c2d0f06288d22c2710ffa310a971d03c4b56fe5b36ff0a64d6346a86eacb6e60e579c67494e745d90208e53199ab0adb894c0b6a6e30ee552db173ef1ed6559a7126cc38cabe56e32fa2b7de24513ecb149c4b1ef3b70ed12291915a9361f9da2d8109977280e7ac5f7323ff938bf574b4edc6600fbdf2417e7ccdac8f95e486e2328577d354819c5923307c2e83b63e31e78519086a230b091c2ece5b999d0858e148c23663ab1be75be63d3d5e099152338f2f27e528998b16bca83f96acc657355b5ee3d5ed91cfc34e2b084776d5e079ec8cb4578951cc157f2282b49a2aa7d6c53522d1cf66da026f2cd7648672a460a516f7e7cf9d93bf80256e1aed9a0f6d8e2d3b7fda02d0c15229f1ddc0d06391c1b737be81e4aabcc69749f1308059a2bf30750895ce79a7fd0b9fdbad57e8b44856be03278dd7b559625c60e8434b1c5e251a9488309d5d7ab82986d370fa7043dad2df4a02e352426cef909f4bae8476f3704a3c91038ad11ad705bc81606db92dbc7a71aa963a889f4aa9dc0049810c84c053385a74d70818f081f0f4e354b236c4fb24edb71633e1b4d228cae6bc2abf51d704f1b8eb2999be21f52f4bcd36dd318beb33108d4c1c77330a114bdcd78c6dfd29c097703b87870e559c607f4e0a4d514fe46748d937d9f50a3d418a1cd35aed2e2dd90b47c9946f98a1e91301a55e76d76885eee51a2340b0b6906e007c61d09ba2456654472d6d44a8b0305896ad210c28322875ad9c3b85e4002f8b70cacef986a4296ae99a30e3187b7f59c5827b748a359e93d88e0f10305976c595dd0ecf41befc919722dffc5913a80e1b25ac99f758f746833fe3d90062eab7d4e2b9a53b5b85d2390ea218d340527f7edddb03d861dc9796f8e069bde434681620f604db436f34b7a6a3beeec925b3d7f330389319f48cf9012e47d0a8fbe041e0ee728b3d60c0f93207761278cbb20fafd4c29248e83094a2f4fb9f73e8283e6ac879b313007de7faf9c9a713e9840c59ef293bb65f884f235b0e9410a347f606ada1b98bf9736a469f3d15632a32b839a8f3f82a029e13cb8a071645d34550fcc571066ef0aa685d215cc43033c2fa9728aa306e7979c6e4a96e8cdc202b339337710283902bca88a8ae1c42af3fb9ba97d54a486b2152b4e2cc609b340089142c2915947efd790f5cba866044aedfeb1cfdb081809f9d845ba8f94bb4cc39c7cb22a86765285c3a640868549a195372dfa9c9e161fa919b3c8abfb44b972bf43de321c6ebb55a50e8202be45a87fd970961fd2fb63a1543aefa1a9d9f6a47e3a9f4ea77b8ab5d9b128b38d92c01c5a2c2aeb435266810c2d98172cf584c75dc38de694275124c6108d0f6fab78e93da311656b95a8a6c61e4a62f131f469d26122808f1caf20eebf277cc11a4364f887f234b84faab1068f7f2b92f9c5fa70a5e5a2e4a5e548d81f90824e49a01e1f4d35dfc5eadd0e41f3cec79eb769f7bd045fd4217da3fb06b450c653d42f83166564bcf0e1b03d0cdd81cd511550e01c0ee98ae1ee5bc5ff0fd0bf6e24422282630752d5eed4bbcbcf60a3667e3b5222181b3d92828d28259498b419b4788ac7b88637f14cbb19032bc3f05b7c59bc43d28d62bfc4b8902ee5216ad32f330a6af869e2bf95c3b34785242a8c7a6c8d05a098a0c64f5e9c5f74033a26df224ff0854ad9bd549f390d6e19b895f2c452fc14c56e426cefbb4bc3b6b8816e96c9dcf1718357039e18d9391d30e49ff19c7ba1ac31b0b7fc6b7856a44c8f3830e6a4bfa686391d50c11f98971a14cc84c828c9b5819dbb052b799f548c8cd66144dc622248c02c57c054ef2fda92f2fe74781f69d475e08a89a4105fff16b3a852d86bad41789b03952dbf3ff8ebbdbf1fddf541a0b5b30cf4ac5c2f0ab97a86af4d4e8006eef3f4cdee8b500b7b875728eefdc58ce9cd0cfad6d53a35f1757ca89f8d431f8fb19bc93bd60888eeea473e1f9b7def9e78fb1ad80e0a073b4f1add43aa8ee1d77e69158a11b1d7a2411fade450c34f205157c3148937051361b1cbde289c0452950d314de0e49e32464126d1a04e323be0b38200b929a5f657f1d2c37a12ed8dbfd8bb1ba629331b444c076c2c772f2d919ee641205a60709c5bb098218c03e5395c1167e3f83cd9d590ee1837c69c920e6a5e4a5151cb0e995fb3c0b16fee05ac17b2b71cca21da64c0396a64b510f591b65880ce985c1ce95e7ad1ac27124b729c3d8dd32778a99c5a77e725db02c4d5f36388eab69a480708645f744a0733474a00508988b7d3d6b037f31da1188c45b21dc74804ec0c7cce0eaeac51336974a1b9a3b27645c59e71e8229eaf98b86b72d5c0792be7d6b52fe853a6d53d3a9553a7fbe078c90b6e00170a4b3f29d5a1a63a08c09404333a9e7ff3063e7b4323a079dd95f8b821cffb22fe8608326092cc9914e0d5d7ae879a33e14d0573ffaa48adad457e79952ec3ba93d17358e5c966a1594c49b8a526c3b2c2edb2cdec839ca1ff6192a3c224ea3c4ed008e3d18004b15a55985dc3928b6b0c5adedf865a1cf5589cadbd552cef36a3f45189b0811767acaf2a0d665551cb1226d22f49a85a162d39583cbab1332827a0b5b11f372f22a4bb876e19e9c76198e44543c2d8d49301da0a986f5c668f4e77dde05a0cbc70f70d28e66aba5cbcf4f5a0a37e660cea5ae13d56ef88e9ea8cec029e0d8c3fe10816870cb551723bbadd6cc4d8fa738abd01790eb7b14db8577ffc40b63029d14c5a4a57a649a86c5f2e022e6ee098f29c9d4606548ff2775296038ec0931af0585acb4d9a0d8fdd564a2956acd2fdc06e271d04425f88a602d0b0bed92f839ca09a82552d0768fd34d41ac41f2c0272c631665f0dba70d2ccc29c875c5fe454b99c1814bbe1f45a7f3e8f0d42565768294eda9d132b3b7c24be2f4eb6becda707d1e4e2e307925399fbde78930c6d3f0bc1b234ff1c5910af55d19b94c690121fce91762ef2c3a7198e81bc9da8a455e25cb5bd3e284a1ec11c3be46301ec1465f47614fc3e18938289214fdea5ad5b41523dac3cb99f151e63b6cfadfb222c7ef62b65d73401c7495e3588b29dd89dad54b278975ab891fbdeeaa3d20ce2c8cf1629df4c9f0fa0f280271dd5fbc6bb9ad6cca8ba8636f40de040077bd1ae87db06f9f7c8b9a2bef2918e759539e8337e4ae4c332b69ad9a91a4f6107c3d5d8373af435d82e5b8fee04c4069cf2cd73dc43834e8c8644b171ef6157026e09384814d11ff767aa82294c70674990e72b493330a1145fc4f9ecc23e40083aa9369236f91cb2f0003458fb0c0e27aeb59829ac657186bdac316e553ec265a44641ba13e4c277420d14e1730f71a3a6b9691211aa16402a6ae69afadb34b74550e8143e1c97c0e821b25756f3286a1372fc77056735dd207197e735ac3d89a869a8251809033c6cde9b2f194f98d77f72f0ecea3526ba2a60b3d7882a433927f0f0812452ab262a941ddd2c8d49783529b4d8529c8f63c2b8c8e084bdcc624e775facf561e63aac02d8e62324c0c8ef17d6cdb0f5c66663da45969e0f5f81a67d53fd0dbf4ad68b7b4ade7fbe855607cdc52197e9723e9845c86e46777303ba636c15dfd35f76239de22aa4a31d8c19ac1e9869dff958daabbfdc109e8d84e4da067bee368ab61ecb4d5f348aefe79f333186c951e251954caa748edd2571c031b193ab715302d783dae0a1ce72f4f303ac7118d7c39572c906ac13cbc156d71b0bf1a9ec4ee8e86829636f064d40df9dedebeae9f3b0dda152f731d2f7a083e6642a7c2fe4d4cbe8973c0e9ae5379f52846bb201191040661dfa7b9b2eeb7134688264b4ab52ec75c2ff0314c165ccd1fe5500a5aa504577d60a537cdd94098567ae261318efe4a03b00ef0c6837d29cca4c59400ddd575709cb5c008a36c74a000222a3a4082ee84e0624da504a6af356b61e88da33e0942791f7cecb403502c032dd1ed33835ce9a534716f009d0a64236e2b895e08bbfbe12a920074cdd300694c7cd2cfc83b3ae9cb84afdf2be061b232887a75fb32a4bb1f2bcc4c92a6261cc754727d1b347d9370adea0818da3202f625ea52df1745ef466ed9a21970a602e68054a342efbc8b6b14aae52c9fe1fa012a605c7c11e464e784aedf2bda8605f12800ab0613feb904e276dd2fd876819dc065fb9ac98b044a94d46c908cd00c2f76fffb2f484c05833fd758e82cf781100f809700e641b6b7c7d1af102d8cfee990d8fd8538ad572f5254be20446ee1a33e399877110f6275452f127265c0c5679e1317d0892997514475789fc7e2899e751867c7f2fbf0cd3575fc80de7648f1c939b3d7e3c8ad313cc2ec2d5e5c6049dea66ab830104907bf2cd5003db56fcf38d13863ef93811763c48392b1e350eb9e6a0a117453536b0ddb04bb2d86224815630e3c5491fb4be102a595677f41cee0ecaf9c65cef740440af37954ef49a585779d2abbca0414dd04bb0028381938cab5c21fac881ed08f4209025afbcc2fb2964cf5cc4782bc7f532b999e17c172844ca963f089ae611409ae1de8af932bc44785642e0f5f89f1765f296f2321c43739ce30dada913cfbea4a94a61587e4e313b0408a2a81c458f5bd77436521750b05974e1282ada96d6a452d3b348ea13581335187a1d2b4df59af4dc3e3aacf27376e843f89ecef921308b1501491a9e519775fce7b38a3ab299c7196a7a218b457ba9b09f83458916cf9e78cbe79451963e43206c09dd7e7edecac65b9f399d9eee35c1ad66f2a92fd819998392cbdfae8e391d879e899b92e06c6d81f839abf83518c172b84aebf4f098d1b8d9459af2fda46ecad01314972548796e33c638d9e6bf6abff5b2c3ee9f78cbec3986160c03217e964d0e7c0443db7480d043b6cc79b617c5bdcec3753b45e29e21f1c372454cd78a63c034629291d95a3c56c848749943246ef35d316a9cb03f213d359e2a630407c2fcc02ab808226af663cfc65db5876c97c5139b93d9bf4fc5bcef1829207eaed918b1d51abaea238cff4fdeaba75f0eb6b8693c4d795a606df55258d7f1c1d024889bfa31069b247e8dbae9c4eb347b4a41d06c0e183be1b87b01d8ad53582c23d0b0e2a187bfee3993b3806ffda232c0f5dbc34c22be7403b260201fb1bc035585c356d2bab2d14ca5ac2ad36b12e5c9590dda8e255c77fe300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df6787327e5c6d6a55a187a6481389d6564cf979d7d2926b018debfeb17f544d69af00cd94666a25129ef140f0b8c5a0776d07f569072cee87d1a34f56ccb74423a3b6f445e1535aa2624950750741ed4eaef6115a62973ee4ce6daa1cf8bd92172cf0d01835f1b00ed4d7005d6ac466e1f80cf730499a04206e90378a6b2edf4d30f58995cb0cd05ddbe276324815b33a3193cc7626ffe844985620288dd2d5cb980e4644096c619761b4da7b09fd7b6143d1bbb1608c915734058a7ec7701a9b4d832fae58d80cc54d9355c11444665c140fe96b5f0aa86129e69f157fd256c5369c6e5a211979ed87c80f8bd3b21e358e94812b8b40d46b614187741ebe324f3aa128d0caf74f1af69a2f61ad0e48f498aaa97a4cf8be7bc35e6a230dfd554343d98899bd3a37518453ddcb0a228f9f199789df0af80e9c37846fabb35769a8388db33c60aad89c183a435252b49840fba44be22d096bd3a5fcbe93779313870005d4411d0fdb029a96867dee8d0ede2519140b1df37d2af50f8063c37bfde7858911315b30e78cf3b0d1d5447597827f3e0fe3427eeda80f02dda4fed5cfd0ae61929381d6a54009d04ae1bd34db33f15a61f105726355dc20fcdd8f6a304b63d480eff9c9bc28c53d1929c19184f963b735bdcc96863a42b00696e002c95e8c2b03ce2ad1d54c0f416735b95537dcbd9bb1d000b3ff5e2af922575865421412af42b67cb698b2d0225c8e0b489ee5e74ffdb10a9175ca7d4479a95f5a4272dba56632573fac64ee291fbb2132611bc91b42e850f8918421d933135daa7182d05896c72336ba6a539ed94462db28874c46a8fe3cb0fb960000771eba1d794bd90ffbff486169cae5c9b1b2350b9a2f561a567a35805a0701016d50df7bffd5df11bd612e88628e8ef1d08b04895f1dd0dd75e4a23257e00b233e34328cae29c8a703753e754dbe35605d5a361e2059a3d82cc5ed8c992808b0124f1c182b4e7e19f5c4deefd160c25c81a4339285e9b553a4a47d57c9e7dfee102b06e6214ce7afbdd577bd967e1c2e64f362ad35d7f0960409ba5a8e267826614f56bf362cedb1803072a8451f2d1e2dce2d36d92b3be8757c0c5f91ecbb9f2c43766b12f57766695e3578864cdc7305befbf718eb7d931f86db2c794190a39a90ccb25eaf6c179de62af5000c1177134a35b69b21a0dd29ae8f8bef2ddf78d3bdc25cc262b60c4750b8e65c67b47080fa413c09d48b0fbc7d90419bb99067fe52be30e5173c8d8d2546154165aea7735688510b0d2670ff7a471924ec8bb844d72af770d6e6e297ec3e48580fe56415e772bc49d3594a1b2d1ada33cfb8b3ccd56d790aa59c528e2d0748496c42ef8d3468476a2e0ce3371e724b6f68ffa0bfd4ef7e5c8e46269a7109ddbb84ad8f04c5d0b8172627857cd6b83681c149c6445a18ce0e98cca7e23eacce56600f8da22313d8f7c4927612dc526110e27c6e84f15030c7cb161a8f1f58e5c3074e318ed59a6fb30f36fe20b8aa94c5d182e0a620ff6e2f300dcac89975e8aa8154c3f163cc45f210f967cef3269948984164d3708d4eefce97feb6366ba0b2d7078bf25610215dcdc4f746143037403fa34233676299afae9dfd817da2d5841051d1ba35d0cd9b5080f8ada32f3555cc8fc1ed8fe61616d6081050f6834fc83419dc7088730f55a113b02e288b5c3049ec2a2a70828fcd50be7f4b2a74d5254c47f53dd861b033c66768ee2cab7479bda4c511909cca7c24a9929ca0de31435fc26449ab0178dcc962671837f945d7319edacb799e91ca58b09168e02a29cb757471bb8cbd2ef9b1eef7d2cfdc96f3acc2b17fb3eeaa5ff6bac3da73be8665964464bc00fc9c3187f25e447ebc307536f89256c4f6dde405b17117e0040fb8cb1a84739127882d5255e598cb02dc04d728c478361cf4018e7ce34aaf628e6d1bde1a09c6a4bb951a01d4f33e146048983a900c91cab55d980361996942c92b8f786ea527dcfd10e8dd737f605b84eb80163e3a5b67eaa12b2e332c950b8a9b2ed1c8703d371546c3d10964b83f129298a5162c1e5b59744fe5a02cbb25976500cf70928f1ecde0b3c5e0cacf29d0e7e7cd5f07610dcb7f0d10f1c164f8b8300d5bad32a6f7eb86c0a13ed82b7f8892757763f6ade7076a6c976f1217ecb7a45e5ec978082b38dff34d6cb656aa003b4a8c681f8950d7dc75625f485c695b6afabe0a8d3f237c9453b2b28dd81301896ff2b7aa7db0017d2f590c8abbd76b2ae965b999d3467f4ce8b6578537215224eb9398c011704ef6a265bd01bd9eb08b34391dc34afb08b0bb42a5c5fd3bbdb5c6555289cef686efd66cb9d5e926f236e22480342eace168d33fe276b1cb08e408222f2c3bab710fd457492dc7d7f8d3fb0d281406c0d01b399357bfdc38fc58bae175d1e1f7d6ffa30fb531e01a8c0988db5e8a5b9f9e71f3284cc905ea61bae47a6da246437f674b7b450bbb5574808f786abeb4b113140be409bbb449ffb18cd45fc4f4f532edd58241e0e1f279e11bcb94d9995df6a988b1d5be72bd9de6bcd993627377b83c480ef0dbd85763d431bc2403920e11db7376fafac5ae05007b7050a2492fd9faac069b212aeefa00db33616328292a4fd31bbe963884fda8d281e0ac00875cd009518add5e1d060e20189522e2170ab0b0876abb50a74e86c7f589a920e50b6568d90535fd4e4ea509530667494079a413a44590977fc04165b294c12fb3ac62d08554518ee89b6e9ccdfc5be30c3ed30359993e94751a82b1a1491bb758086e4a3dbe5a9953b511e36cc1263be423e7888eaceccfef26f0b5aaefe03f3ce732dde98c78a7f66435e6199cefd62eee85aa2bc8c3d156aa3478b6cf3750c71155917207d23f3b7082acbdd4de3e536857721933eb21136ff502ab324971614d806ebe7491e989a0a23d3eb21dfabc5905e73e358b478c3ddc5c735e3e2a72645b7db61edc2d49bd3aa1867ed192d08937118318cbcc2bdb918df49c3d03621f8dc5424cdc94e18ff5e07b80258ef6bf94f9d022d4375713bb9d18336e859944bf4e4b45b9a5bade780307ff3f7798c5c4a60e9dce1077ab0295c56dfa37809b9821b7529ae93c726e12114547d51d61702023cfe1e0f56c107ce59009a17deec14570bba7e6cf137d138098662eed5c4070f901332d381e8a5a5fe5c24cf903e1c25cc80a26dc884d103e41c30c707ddb9d777aef82a8891b371bb44ebf5da3a1a165c1e831c99a8710328788f60e8eeaaf84843b64ad74691c0145d5820f96a9e972ed6c8d0011d31c44b4da752f5514af0a653f5dafa91c10f9df7e1e79a4a0a26a95bbc4e7b5d83b5c0fe3103b9c02a4f06625f416eedd1cebcb711a01952fd53701005ee84d3f7562dfcb4f9a295b961ecf12b24a0c5447bf52d7fe1130fd89c07961e16aa3afd23e6dbabab4c4c88e7be8301db3cb28995dbad853103eb3c6ed4506d7d57dd15bd901d7daf137f192f1f8a7bfbaf2011aad4b9ba06687f894a6ac18c790a44d1719e24a36ba497dad67499f20c54b89d3984f496d7ad375fcd3f7bf3a05e0ca0fe75a3c5675c115e4c6213fc63e9c65cb040c0943b6ead1055c6f22b79bf8f0492cafd5c38c686041f4c9af3b8bae400adbcb04a88194b5b829596ac6bab669cfce2a3c04650607cbda8918071649c09903d461274398c91b2300beefcae0daa9b7139aa16a63b18a60a8a2b045348d7f666f494565bfb43930ab47bb333feeddcdb21623014607876f7074c0823950c4eae4e48c4dd11f1739a12db15e9b4b75fa4ed9119478b0c9ed27b7bf341eb171797a59836496b1bf272b975ab1bc997824310af38ac25558c4169233c2ac578dfa7bd1b212d51338e091ad3c956981ef35a1d2524bea9e3dda852ea696abeb20542d73a2c058ec8a4e1b99e1736caae114e759b43fb8327f19bcb29f17e3143371d968dad4e5e5be581180d1b18bbe56a94bc6a4cef6ba26670247a7ad1c7bcc38c6d7e2b845a6dae5ba8d92b98f6257dc1441a7606add3baea11545c01dc8f6913ee943d240d6e9df5fe5aef13f40ea958cf4475ddd44c5d5df4301b8afa2b66487c6848c9d1df02d48b3adc365001abcf9050b2d1897ccc405fa63fe9ab11699ea952d4d2625f9b7bd1d1596c74aec39a49c7b38e07d59635a61f4f8a69e1d19af7fc77ca1930b65064b70d12fc46af4d5e220e6009e729a28a13b0f9a11d3ca1eabd983d7122f1f6a6645de63199bd6d4fe81a03ea32251b5e1c0ab40b141957f41ebc990486ccd32961d242bef87c5e81927cc64346e704b4a0c355e276e62196b85b693ddca57a7027f0b51ef37aa5a5b98d438f860df3004a613bd1a631a354f30b2aa7a51a50ed3f3fb9bc0b26e72eb5e1e8398ff86ac3616af253326a31b1573259bc70a9fb230015cd30a00f778f201140cbb534d0908e5705e1ac1e713e6d7772f6bfc2eda423296bf772a2fb497071c9d0a651d8da39abd2f763bcd65eae3102e0f2f38cd310d1128ad37fd6e03faa0fc2d3cdc822fbd0061f09d3c58481f59605aaca6d4241b36d5542f48ed5d6107]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 3566da4760e0890629fecdc7a6a99b9af5b552457d15ff1ffdaab1fe8c76f26a

tcltest::test Hash_SHAKE256-3.68 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 025054b3c6a9992fa93979198af7652e069787fc3e48a83cdaa250614eda2f715b39bb14d9cc1bebb55c442236a0624984b2795f6ac04c305b047ee2b3f6f7ca40c0898401f2d3422d77666477c82749915ff565ef6f8b94cdd2a7ae73426c5cb8cd042ac5838bdd1b722806d8d47dd73586423654bc2c1039f414f0162855d0cb48762fade709638635d231de2d2c9b790fa9f92111f94ba6510dce220f7bcd811925ba4186167d77a7ac0c133bfc3c64e272d7dfd5b8ee1cd3d970215fa7fce3285af40ac979d3f5b2fec0fe66b563ffe8e5f7156f32a0a361c2ff9a7f9f04f85d5c048f16fc0c083d0f7427171eb7510749824b492f0a44e30ea316d92b8fc9a1751358d665d0b831285117b400e16228e89f09ca77d4064206831cd415425cdaeb49ee727dc90e74917f55a723883a340877d85ad1a5f264f2c834d824c7bbf207cdd8500c9d11ef922569564f55e211f2313f6106250e321a99e64d1fc6eecf11c89edadaf4ca8a736bdc2b4cef61a9eef6c747dffd6494c51fbb9ccfe6fb5b5161c977ae773f2e7b7a358ce100bfe243eef67521d5fc733d823a2bfcd0ec7c0ec1e08e51cd7ac1f37afce3d82d04a63b4057519754dcb5c8e9ec636d2cc91c920f6b898c9f832c2393ba97f72039dc1c156f4408230e44af7c57aceca198222374f3cf2595605853ebf5100781666c2f94c8b73bea9a063a65056f3fd763760a18ffc8e4561b2ccbad38b6cff7913dbce6e910f95086e5b0c97e122f7731008f2217dc938bbc8fd2ff08f1192bc4390b325ab90afddcc85bd348ff84290ba8f9bbc373f8db496bb209ef29abc5064763a1a418369aa49681a8ed9c0694f856920a8cf5ddefcca7b1f474c64e6c604f0e5b4e9745cfe4396b73f5537d6100f2a038f9ca086e4c2b18e82030cac8d83a5287e09cfe43a698615ae68bb0372b646c6c935a4101d2df2f0c79cfe78279ee784de2912a9ff19baa854aab68bf82943ecfe00e525065ab3d89090c6d424854c7d6dddd918ace2a901da81d6da10c6a5e896a4c02020d778c87584d23af4f54894a59e8fbad432d594a89488784d1cf13c1b97d18c0d22b622decfbd27295d704d1dc1a30af5b8c4e3374947e10daa9a69f530a5d31bdaf08a34f7f423322c38291f0dbf73a1b2fb701f16919ee2ee25f4cc25999fed5ebc612093f3b99ff0249b51c931af38dffdcdb882f21c6d56086f08ed493ce23c7e3a2a0a5854c337aa163e9aa5f84b8e204eac24e5f3fd80d63b23de2154aad2ca97a9e18e7f5c615d4c3dd888f95a4c17956262e98023ecf3ebb59eae51a7d005ec38bff2b3cc1b929ff829572cd5a8581463d3897b70f905e336a56cce59b2d4ba4edc417c82b50e73c603acfd5e11465e28dd2230554370c41f68d92530d99b8464ece74420cc157a5fddd6f5441586d54a065039414ac900d87f7ff0ddd2eecd0358509516cf4c15fe3e81bf38338e0c1fe5a000d57d732c0a4fcdbbb13d2316b2b51a09e54d16d959ac1995aae9b08542d17e21825a03a82d604ed05b56fcd3fb79affd0cb40a26da8d2b130ca6b2b32b706715c87efef7aa377fe91cdec097361c8ef90da29a90f97812d1ee08f9286248e748284ac9ad196bdd60a62312d30b14338868874caa4ef38d4cbf6ef8576fa16b53125bf83ae343e3d167d26819d3074a259dd094d54365e6de017734b2ac308fa127110f23a0763fb5d25b34de365c1f5b2e1d07a46f65ac10448032ecb06cb0ccd70872f9d9692d78862c0d829d893f8389db299a3b69698e0938774814cc7b3092a0d81fe69349b3f3c356b98125374941895f192ff79b91bffe766731c64b66ea888328509b20d29bcfa4e589a67326d5a63cb3c586bee5e940b4ccafe0adfa5f1e2885cfd72f6efe9f7c990f839f76c6c026fc949d4fd515bdb6ead7a21f4560d01cca8cdde1d39cc152468b52f8e39555c25605a1daf9b5b4013451911be2905cf4594025d4cae6b3aa60958b3be7b1d57352914accce59d2085ba624205c4e0323d45235649f6d04f989b692c4edacddde64dfeea1cd627650a33de1d91d2a614fae6b833ddba033d4245710207006cd582f4a13f661703f5ebd8130829f95f5cc59d495bd0a20aeaec30f79cb19202264f458314744f39ba70d28b6c97e114f2e6925f36ea55ef40de848364143b98ba96692ecf0c27cf9ae049ceb2a133cdbea5ef812cf37cba265f689dc1f7a134789e882adaf747cf7f85646240109790a74ad938a5b2be7183b904ce1b236ce148b1c8fd9bfd564050a54cd180abb467981c7a0b09f0c41e4132819ddb6145a4121554317ce5fd2bf58929a3d83c33597664fa82c07535c8471307936777d487be13524ee379e3975579225eb289bb6e2a6b81253209ba787da4bd36282dc09135f3ebda3a7fb18c5abc5f8c755cf5af9c76367dc874fb35cb2ccc11864db1ca5dfd465fe8c00e13eb9c09b4897b8923b4d04111e87d9f0719f55ca9ea9d513b1f798c645504a332f05f485f56ae1ed35bc0cb69fbee4ff64f459488bae745eb64aee472e91317f3524e431444bf5cc5778dfc0e6a8db20b55659c3560f138e212e577100cb4135ef7b1235bbb74ed03f180fb879c23714d139d9d384284d02912666cc626b13f7ac8d00fbc23977695b2e1f15cf87733c57234bf1aca67b5c74d79ec1c9fd0424fadf230c0e4eea281a1f80516e853a179587429625e6490c4aa661f9bdfdac5e58f61aeee664216d1a50c603cd27d6273aea304986841092910742cca4e966f455463b0cf115a7d8da866295620be1fbb5d0a77444fc7c7fd69ec3c3155cee976e6415ee94e007dbb914f89ed39de80574cf1abef7bbe73489c1676595a48da802b43e1c783fabe65480da88885a52c51629fc72054eeb413913a03c9c7cdeb6c0db061ee1a11e992b4e8adaf6cdbccb1895ef460421e336530a00a090225c44173d205e8790da64bbf2ac0ea5647077da8745a36ad1898466190b4a275180c0744eff63b0ab69c9750190bc2abb286bfa62a202afda28abe0c51291b866e6bc66a505c7233d4747e50ffb3bed3e4f17e6dc86fc49a85b1d6192c90fc9fee8b87cc3d5e125e2ed608a522e36737a5efc3e4966e8dec89b695706911ce2762115152fd24a5f28d683e38cbc1433dbd2895f3dc460c5c754104f950d6188690a82de4dad7b357b9d527f14175dc4ef345fc82e11ec95013f9299d2804622340f6226a1a9fc2f47ac3cbb8ce28bad310ee0079ee1f4d3129870e423bc635683ca338cc06a35c3398db3376b8026332ddcaaac04b701f688092bbd1cf4217bc4b5877f2e60c087bdac46611482a61d51f820140403bc85be0c336332da0938734bde8c502014f3509266c73c6c93c22a1bd0ddf15a5ce7410c2894e9d092e32c079922ba1abb7c7edab4e827a067a832a24d78611d8bb1ada36bc0c66a57223b7357e0d0d32ca9a4ef91328ab0aa55f815f661e7dfc16b404c8d554d29be6c3e198b2548cbd1016f4b8c34ca3fc441d6f15c38da13868ac571fde0d2714127a054b38e6677410a3a79167d6a805e027bceef4bdc5b538699be4de21ae377fb1edf518ade68052aa2e2b06ad034d00e430940394319b0e5398bede77af2db4ce5f3f589050095e915230a8bbfcfb2cbc92acf7fc2c1172d21556e5f7721d393b24d00276ef36bdc2db4555e7da38ed17ace1d9dc003fed4edc53fb893e30975e04521d490930f6a391141619e72bc95d44d8b01bf34e062fb35e28155d8d55a1c66ab2f0e71f919e3b45f23969fd4af6233c84a34e6646dd631f7583155efb6b34c2c853d12a161aa380f230a9d5f84b11b35e5b59ae34c1b43de9bbafc812231402675a0e790e7f8f6c1de4efdc5ac2d6e5452b5b4f58416d618da672f521332fd297ede8350134c8b17b3e8339f8c4397c41fb9e713ac65832672aa80db0024dd861f4a58675a316f81426ac155aba031d5ab3683a63b93b598230973747f836bfcc578e93f43340e9f185b398090afc72993c02d55a80df7de3a1899c6f7db12de1feeb85054c102b1941e0e98c1eec23057cb468a7850c479463c464aff987cba7d1048331564c6794447b316b5c9bd8a65cc51cd32e895e9c6091b690d4804026b920b6feb9bd446b74cc972f2ed13885c47f1865e5206c037e37ba99766434669c8946f6de2b6ba5bb1b445ffb55eba99d2885e5119716d1a7009a5248fb517064855aa12b5e834a00af60832af09a1bcd098adb19b7060fc2327b43b00d3c4bf75d1a86091d35632bd11223256aede13e6a50d06748e4c5b71688f51761a0ff3f59af2de13129f623c982c8538b8b05d693fe4c621257f96ef4e6efe6c0239522c0411e1963060ed2dfd9f91c1a1d8e7fcbbdd572dc08b5ce14c0b983f26d148adcf7e21b7974b01f5b3f3fe8e14a85205bb5f5ff709f00c1bd3cdc58bf27845ef3fa004d3b1de6f284db211fa6bbf1a18b0d337194c3e32f3882dfcbeff9ed864e72001973a6b733a3d627293217dae9a3ee1731111c64fecebb4a46498a58e935866be6e7ba2cca0057d96f4d0749e2eb7f2aa5af538e17c40fa6309683cc71ef5ec71b60ff4ba0e387c057be334473abe9f3363510666265a579f19e8b5205c6239f22a61d1e9b948e634a4f42d6842a53fb4c6dfaf6c7f8a64ef1294bf18d00fd786281bdada45a934ab1c6dd04feb1e6c8501dba452fc439aa97ff6bb1f2e613dc43b987fea47fbefef2ecabd8c788c9e4a80ef85b801287174de7929a1ac08e522d15221c8149380677895559c8f725d7be085b41a42ab81c7bab68b5eed69563885f370c250129eaa665828fe9462227f9d38bfe8154f34287119709566f5195bc5d6dd776eeb933e947db8313bce75ec036319a01d8600fdae2c49e3bd5ea7331d86d865e5a0e68a7f9073c2ca29d037dfaf51e0bfd280ddce5997d834e87825097de21c48b53114741afc21d406b9f97e77e91860d73c4f5e4bead1823504c7f6469ae8fcaaeb733e87b1ecfde7ab976c575fb5c4e68bb8ea5db36e09c6e582705b637a95f47e1d2b6125729c4f2d9825c81647409307a0df29721c500092eb1436cc3f99247178c721d75123afa8823744bd5b685f289dc919a75ae99485783e6335b67abd6e1c9e643817487ba4cc1d47a550a0cd771614a8d3a82ad545a07b6b506dbf11bc8f1d82d8236f45bb0c445b7ed58e407b906e718792b8555bfa47b97cc3dad3f536c11838040c90539948faaa48856a9e9322ee2399069720fc1fc84b57528690ba359ec847a4edf71997afa8282aae6894ce9948299a0d3d1c80222ca6ca7c276fc771094ccca12df3bce508f2e28e522beded55c2e74a18d205519120875721ee03598bb1e87c50be35253d47518cf3befd64ed0372b04cb31bd129532d9a08bb8592cfe58cb217ef7cfac583dc1cb5d4798a7e59c0e23146302b55cd31a7543eaac736762df4ebfe10d0223706c020f2eee87a4456527ef1eeba96ed18118d0e0f616fd240b735607d4fe3ef4619bd90c9e96131b7837e5ca4197d41656b1ba00ffbcc88696b9ccd3ec48b0b3e8bf4349717d3d048e7c7dcfcc269488e16a87b48e0ed171ca47a8ab1c8781934996d64d2fe427e9f11e3f9554ffb8116969c1636db41fcbed4672f92d63ba7ecb471981a072dbb3e744b385a1c9479838d6ef746255ba7e48ddb324e886625bb7fb954b8bd06048b91662057a2d4a0494da9a513699ab702335f1941295811255d9d014baa6be92afbdd37ea9d3c83fc69d4961b12af98bc675b7b1763b208aed0a5445f39bfd7810618e59f462c9301546840c9aadacb578c68ae3db1e45adc7b5a944ff5726e126291cfc248356bfcbfdd4babbcdcdd88250f49208e6fb622b03557ba68341b7373e04d101dd75d42fecbfd3da3063db2c3a7c26c63c4791601ce250afc754e18cc8ce3e521931578838cfbfc07e76a6beadab07ddc83322af27d82de4ca69476dee03ade1de8f301f0c8ce735600f2180d0079d1531c6fe604cbd790b3587d121d82a8574d599483c8e7db1007d3434bacc1a51361f080bbbb51b9cedafb767f2afcb2ed4a5568526e62a86eb7ff0c7b3c86c89073c0232078779fe52e100f1269b6e10c9f7ced0273d1bcfbc0b48c2b4ed83ae512dbb5c8eed600702726a5706c39c931a730a1285bbd9f23ccc460d0562e929dc9d3b6f960d571fc40bfd81da50dc1f91c011318987eb593367f190ee50266070328b55680fe6ae6154c257ea69b71cf487eb177bcad96a69875134b7dfc0bdd594b2f44c1c951ca2f4c0c27d37b4f20c6fa1aaa3ab2c8fa5d26fdfa73641a7d26cb836895cedd14c94ffa8dde25b09a1213ad448536b2fb1f0527a077e31863162a60169f675352adb88f3509134c97b44be7bb4e91eb1538a02ee1fde16c1b81d833f3212b5b0037262891f6cc89b618136892d96cd7f54488821377f7ac2304657d72dda36ab9e009554929c9ee51c80a9e5fc8201007bd1ebfd9789e4f060842bb1a2747f8cc42e2a3af0493e1075e81f7769d4419c92ce33698723ddb3128006b5d90819bd3da42825839a31853162a027bbb516bb5fe6694c4e75ec730ce2f0cb19bf8aa4d10997fc91b8feab1b9535dd3c4c07c5acc2949035a899981751f1dbacc05cab480680a763cb2de9fa2ae58132c29c223f09bc1c84e46c8afb7512cdd83416396942ea0d41fa47a995c8b9fbe63e5d3be064e9d88350eeb280f75a89e64341b5fd66dd18726dd352b518b733a0e9d376597b24ac7915a6766e7fd2f71e146489cc1961af404d594c22c1e912a8ea853c71f57480b05a1c3f8cb48000c7d0071c9e047fbaf1c261fea46c577e456afbf6ef7be23c6e48d976a33f6e8a2a9eb3d63bce3e22cef374d203c10860c091be0a9cb475c8fc0764817bc7a47e90a7ee1f6b20a7cd1f09192f066704a1618655e24049350ca2be45cadcf528c53f13435ff5a2c0a42c2bd97d77075327707248e4a3e12af1a79605b78e710445800937fea2fb938f3c823b251c48fedc357c207a8c255d5d55b62bb258e240e89ab154643ad428779936c78dbdd30ba7f8cd640bc4bcd539f2463f2204f1e295d73421fa85d48542896e051e244f856f008c9cfe14509a6ec770ca6f5845f4347dba26264aa4b4da55527e401865711e96e251bd4286b5e31c5a53001d877dacd56aec5153ebbd25450bb95c60bdd99b02f709af16082d7f392c623f1a5e86e7276dfae46652a60da0c13ed8c5fec4ce8cf24f3c5a7e0a2c650f7f93197316ccbbebd8454c817979b09b961e0fd13b9f7cfca8ccd48f55d1e92b3364e06d3543d80b0fdecd1f3e50bbc2489406dd45f6193c9ec74de415550da7051b39f5eb34c7f52616b0d4fb7c0a5edca471cbeabbacdbb8968e2552a219ab7e1eeab34187d1d2a554bf4abae4e596dbb51a4232d67d007f9f5cf9149f556124d6bb4e3e243cca1502c02682709392cc2ec7eb262fd4d4794b8208643409ef82ab766febf45004fd877c135c085e7b3779416ecdaff97f3002c6fb49497c7d1d06e1bd4edd57a9e54bbbb74e948c79a4fd5072303c33282c2df27accc6f7347f4dc6e172c897e055b644ba63fc66b39c22bb9f55bfccf7f332cc2cf493c23b2feaeb825c9e59d2d630e1c5a0283452a6504c9e46210a150f7b1dbac99925bbb54318491645e5a6ef2158800f013e7d4befc9170b4836aa086eaccb53be68dc9ac217dda7a7838529f17292b76dcb5d1267fbb1aa1e97dd647543089bebd2c565cdafe817ab7b970b08f7a4a055251a8321aa152d8a77d7adf7a819a809ac9f9ecea70f6e3814031dceaf5dd3a292db26839eeb9b731cc06a5ca4a582fe3e91cd2cc8fcb53898f2e7ac6266573a5bc884f69edafdc3cfbf240bff5432b4d0c47b4fda57f4924d8bf208d7663407c80a24e3748a5a61d8fc626e81d0bf11aa602f9fa5c7312e7cf7c54bd70673f020c98eb0e6a4ba357fa0acecf2be31ff148c7284f0f576f46c5de8de2aee1bdcad2c4bc7bdd026270cd38aed19c991655570cb668589cacc67e6e42798c534b5b55ce28ec0b5a41fc6bc85d9bf97e62ab635c2ad2a2a369eb3ba4090e933c7628181db6fb9fc3f05f7842419acd038387f03dfc1a880c05299008480e4e2dacb59c2bfd06e4cfcc1e552f013a81d8f76f801ab0ac63473d061e1395f527778d88447151ba94ee53bd84f70307b26f4cc6858adf14eee54005384e694fb9da6714c3965b730aa015c1aa32cd8ec926e22192f6ddc06556dcab7121389a7fa6e7ef7c0380ccb07580af275ac74c509066051af7434b812c517d4b248a51e36d7e7ce031482440df32ea7ed796acc35c36f590049622acd64cdf38d0e5027fae994192b84816265d9b182351a24cabbad35794975cc252d53d65ccaecf28ceead6d205f0d71ecb71279cb7217088646cc9bf8b37edc70da991857926bf313b92a5b2ac839baabaaa770cacff980ca7c29892065eef9d57d3e7d2c0d11bc85036944818d8fc467e79f7dc67246f35c05cbe837874c8a1abe4bec226269b3a97670126bd897f8e7160287098389c9058aba9e864321f90844c74c82baf84149b849ab31cedabcf5ded978d92b47698db3ff9555bff4ad67b8ba87943c48ce2b71fcf91b99df7957e72b377f910a3dbc27a1b3ec234d0effc12c84a011e0c3184a8fe270612e98d6da00ac43df59ac5a8fa8e29298b4849708262bee604886d8ea0c507a4d507f3a5f60bf6c3abd1e2e921d099046b277f934af64c652098133fb7a2a7f86cc984b1d545844ccbdfb01d907102e54ce4febeed0176f0faa1bf122e258c8342a4ad1bde35f11bde1ac9b0b6edeb4ea917436de902c32beb3bbd9094bc19d7df3fc93e616bc1c35b197c4d15a5d6a32824fa2abf78b5787accbb558bd4f458cae185a41f457ad5bb62544d3d47498512946f6fe0d1d26931eb24bb741e90a87e305ee7685180b5777bee2b8e30b85720ec2fc7edbc8e60a91d863ccdd7732971b2b172cd1e880527ccb6729900b7abbba2c7ad46875e1148ba5c7429be206e3dcf29d0be1ad52744eb29ccde25abf54b4ea39a7bc0d5dd796813ebf8310ce94b1c247bdbc51cae474dd464de1e19c66846601a0e076a37e39d48feb9cead2d11f03dee76aba30cb76b2305095885919b3069967db9afb2ffd068370ee5859c3b01d2b34f4d2cc50dd9b217f07383d94c834cba3b55fac12687fe2f38143ad91eb78f349617fe59c30ffe0823ed791004b575dfc77af005104a7741f5e911464587c01d1b9abc5d6f7463600424e9d84c4d6181c28713d1159e700998c2cd76480921c72043db227bbd7eba11c86a949bc1bc4a8d08dac7deda5500c13fa3eb8ea200bd44b1df5b7021cc70ed366fd77bb8d294b77ea95ba4b4a2a1efce590891e9097a09633d6ad577c92ef6fd5e13547940eab267240f3f83f57774ed417fea548887eeb679c313f5f13ebf9bd9cabea983d70e50cf44e7deb9fc011ae194006b2a61554a1916d442d13ab780577022b017c43baa0fbf363b5c9a14d5ddf76c934b80ed8c9fb86ed4f5ad7f495ba62923894ccaf179b0b32079fc10bc8b1c9773888107fc723a7c22bb0167555adf2a8a34db2cb571dbe7048e7c953d7d6619725dcc4528351f64c2add10042d97dbf4ab6e9d1649c933a7df6a602b729865b1637dd258e5cd9b12b4a86ea805c244ffb8c13799d5e6935e36f02f9d813dfe4e5a33e19ad6debf9d32dad86ac574564f330c255be4be051eb441deb0ec0e53f572c5991e3ccd8a730a3bf55055f6396e821812645c97b26ec124146c9b538d2e13fda4ee01e3231ea6936e659d9014e40fada4bd27bac2d6c56279da7754d381a5a1a7120b65b3266caaeaae85890f374192836d2b6f5cde28c3b60166584e77907a4d90449e6111c6481235f62b54f17f91587c52fda80f530f73ea51a925973c503b7292d556691b348e01d6bc08993370cbf382aecff0ac0e579b218d816911eb1cc0df51b9b5d337051a0f8556b8c4f883d9a5c8f90a9c880b1ebc4d8a7678129680125bb37e5619208987ce64d59af12936a2944de38c44377b0c316745d78f51bc133b6c4b0ba2865528df5a781d236413615af405e20b82b8f880415f9728f67bca390ba45c99df86d8ff612ab556dd77ca6216f808a594df67843f4a21a62dc61f9db911b0c8d5258177a171ca513c6ac5f3d94264da16f743838a90dcd09da4faae9d1b70f50e380a9041d8c4dd28f43a56686d6072b00973c649b82f70ef1d43b5e04902e932ca5b8f69e40bc2491e11d4e9016234091cdf95a54b844ccb39e2faa924cf6ceae05cbf431f07c848ef32b38584d4e9ca386f38c6d0422ed701bfc521333f46de84f567f41020b6cd70853b63801d599a650bf6d3cfd0dcbe7cc25e6ffebb3eb5bd0ecea73fbf567fa7f3b6ac7ca54c22ac9b18f5d1981e26b2d40cbd0da91d17948f3d82354a6e079e626a8701d48a0a1407e6535d01beb8acdb1930e972abae0f60fcad792bc70c5dbba01d9612daf9a637a816fb73821b71c0cbf2197fb01f3969535193c82937eae7a095c3c706976913a665335634f7096c6b2b2537f41517938a960c8b5c304fcdb218105bd48d658428698e139af67dc6400296013e36b3c4e8a36bdb279e94541ece06360d83a270754993107dbed4b594a0f247582a14e5b6a1381f532abf662bde2cc0792029c1d62ecbb6a4f71623ad2dc470089a42df3db7fcc1a87bdaea23710a62df0d015d9340bc6dd94a4cf7d4d091e4172e4698c20e3d28ee3aecc74cae298208f2322ef4a6f09ee25e7d1951b1e30a4d8d27fa90cd86bced0efee7efbe108abd75c51a4089efaf88ddb1706cf9414c7160edecee1d5ce56da0173153c847e0c441c10bc1103f0a936cf0e66dd034114d4ea0552326490b35973f8dc2f557eee5fc2ee8bd646a15cbb543629b5d43c2a700491f780fd4960e9c7ee3826dc71aea4f14997dacf83af860b1cd40c9f6c5481df031350186eec057dd1bdc571fce99e17c0549116fe0e115430da23bd583f84e9b73a223e57b136f631e18dbe871bc5b6d1669bb596e4f7b000b09dc69647e3b54cd069e7ba6cf8d19d27e23a96b1964f0b324d13d4e0a3af0afbfd439d1a48b2227ab99d0d5bb5805205654ea2379a50cc4c37ca4e7dafb1be20b4acd3030e70e69d73d6a71a07931f0e7993403a3c5c9328ee315a187668a8a3466aeeaebf61e7bd3b2d3e34697a52b7a180d72616d2fe3cd2f18e4d8224490835263689d615c45e71f9392755b68b757f900d8794547c0c887351896d851dd403374110ecfd0b05aac30e5f56c817ec665929eb4f418b1c714f5a5892fba58b3346a4c05e981a2768334468d74fb670f844d2ada23aa9f11fddff479d086e8237acc834c57770481c9271c0718db59797db8e5b3790670ef6b7c6b2e62bd77da30221da9c0babfc4a98fce29022b3e4d795b37069f330ea98652736f8e68ec1e7cf582e5cc53b98749f6c6bcdaf3fdd49fbf899d3c395f8775eb7506fc8d2e3886cb19c82449dc12d1e36b8747397e53186b413ef9214dd061cfd7b953372770772f4c1970a40fac6adf2554f207a9150be7c9b27ef2bfce718403513b6bbe0d77a682a2576c399e3c715ce983646661a1bc87c172b49cc7ce945f965e33db59adba242982aa44316e21780fa1599d7e0171e5327e70ce049f87554f6196669a42f29877996617aa2877e18ef4ec36b5558e49cf492d3ccd0de34b46ef9d48195ed6475443a69a5494fc002e2527194ec29c1d5e7cf3ce6a4032ab41ae4e671e27ef99872874b576d7373bb7dc122e917222c8a8beca6c225ffbdc0946b3acf0c8c4f7daf1d750571cb0fbf0c0b45ec58da8b275b8bbfe3e93c7466660d4ffd967dec71346d8534089f0a9a27a158f343ab6438d11cd6c06031d511fa4b7491f2dc372fbce7da679467eab95b23daa24a2d5e3b772099ec2d88565feb966700b41fd615a32d0324a7ce26b910f3598deed8cfabd83757dba3987eac948e95ee5cb14fbf81ad9ddfb53a54f5e39043faa4264f065eb1cef364fac4849f846f9f5f58ea79c2c9f90d3f24ec1c3d9b289cfc9e42d785303dd7d417be74672872b82e5f5cf10132a341b8265288a97485d97ac9419bd623430d8387d30885db4dbd6c3d0da1a7582af1c2a73ec791acda24810fc1dfec1b6ce8f5c3889d662d3f137b8a83083fbb0eb1b13ff74590b49422b1fa59f011791a1ead4365bf929ee54eeec0439124cbbce6364912af111c424880116098f0dcd9030c9ff0fba590cee43866c5c9111ab423b46b1750bd54730a7ded7c1704b7382ab62190bdf9a36a67dae6804c6f1882eeae1e8bd6dfed94ecfdd71316c788b61a1c80eb930967364e68e81967b955b79b95cbd6be03583664a266bbf4b3c1b145b22668077f2cb10c44b3e7b76a42c0df0e0b9e52c224c605ee24dd5d4412d832199a7c77a5946936010281b80c701d1d7946294196c3c245439a0dad02cc8963b555bf80271edd30203c5de60a6e4adb5a143e06fbc5b9b7452ea3608a8f535f07d097ad7e2c7b9f24ca02de0e8dc89d42ee132f5b9b2ab0556b650415bbb48893a3ab5c155dc2d77143e6ec635f14d7a64c6f0740c483d516c899246ed22b74eb3751188723518da83290bdb372ce2f06b7984b55c253a9ebded63de07326a871142f6f3e0d96064c0e86ae793942e7e6a82547d5252883571692bd051f4497c7b29cccc48d0ef5af403f5b2f4321a6b896aca9796d6115eaf8653e5726f3d751ab3fbd95123ab0746021203000c8e01f2b74ccacfb9bb609fca41e513ab2cb91567ebe3a4d97eb2df6e2ba35f2d7386caf444dda50470856abf5e98dbb1009195ce04b1e8fa4fa2e6cfa75bba9aaf433ca61999c2be171338ed12c573889f45c26eaf0dc68f052084abeef1b95c2c806d5733c6cbef985330dbc6368238f31dc3d252bde69f8a74e18c682d037cd085888efa2c6b9fdb8d7b11e0b1b1cae260c17f578aef32c5e624f97dd941028599b3d4d69248d7c7094017caffa8455658e3ff243c8a509ebe767b95bb1af4320516b02fc10a9e460ea876eae80eb1364b52d8239b5e02fd43fe99189d375cbf12dbaa6d825afd40e5dbb5aa338b176a823595ba6e144fcabee5db6e453f411305274af89be0fb9bd7005c71aac97ed945b5bb537f5340ed7752c9ff7bdbac1829251938d443a0402a40f3a6136dee6ddcfad45594c4dc4fb66eec3309b3a4b5c5fa9e96f72bf41726c203b337226f0d8e2b6828760e2bd6c360cb73b66e31d220d1]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 8c7956b44b4ac7f0b87490f2571a2111c3abc5160dff4702f36edb8729c6d433

tcltest::test Hash_SHAKE256-3.69 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 3d06d3e282a8d84e0de1de6974bf495469fc7f338f8054d58c26c49360c3e87af56523acf6d89d03e56ff2f868002bc3e431edc44df2f0223d4bb3b243586e1a7d924936694fcbbaf88d9519e4eb50a644f8e4f95eb0ea95bc4465c8821aacd2fe15ab4981164bbb6dc32f969087a145b0d9cc9c67c22b763299419cc4128be9a077b3ace634064e6d99283513dc06e7515d0d73132e9a0dc6d3b1f8b246f1a98a3fc72941b1e3bb2098e8bf16f268d64f0b0f4707fe1ea1a1791ba2f3c0c758e5f551863a96c949ad47d7fb40d2ad58d16c3adfee3aa17bea13e9633088f63fd821b88c78eaa2413d2e5eb33a83bfb6ff06f7056ee80ae4ca2a820311a465a68c4c6403a4b555ebf7d6e3adab0d84380264ac7f2f12412269454e4a3d1efbd428fdbdb36500ca8f04c6d0b23c79e625020bc316dabf2d7deeecb5005dfea213d5bd2b6364d2e9758b868b8a95ceccc72685a29217f8b83f81a71fec184a41a9bb1316dd49339ae5b59f7efd5d141d649758b3bb8dc4c9ae4cfff4d7170cbfdf0187e6e7bb2bc526aa980fd33c53c3457d0f5c59e52b4914747b9c89024b06fdd0a1034a62c3528191f9a8d3dc94a5b2ff2f0733c7351eb724a480ca8010fd4b4fead5cee702293e924bb0c7e2deabf245421b12d9eb31e08200066239628c11a7e9c53af2f132a5d7158f75f93abd4f78d000bec6546ad6b6199718d6499b96ff2639582a9656fd85dfaca5c7afc30fc05f1dff3478b1e3e9779cb5ffcd1223802a9aee38fb7b90c7327121f445a57b4479dc9dcc60ef4d43a07b025bf7d900517c51c5c3288aa4c39445b029044bdb2da5a45f35130a5deb1e9ec493ced9759ca5c4a574236c82a19090190ef59e77a26cde0e1799ec5b0a796bc64e5af8ca862b5d55f3f607728aabbb254a1f8496cc54f0721cfb7b8fc7374ccf35a41f463998839fe7a945bba66f2c9c868be682d3e74353ea40a1404be2a8a6f0b33732dd739d49f9420da71c634c46693fad81dead3f79297045b8bd01e614269026d69945151cd0cb467c150f83ea9c45bfdc152d4cac82944f3d461d70e17f41d67a969552e0154bda83b8fc3a52c6a506dba1efd3b39cb3a6180ebdadd5a5d02d66fcebbc5d6fcbb0042eb1d744906569c5aa7b3a5721d534913c6905b73d4415e1f2cfbb5a8752b0479eb6c489a18fcfe4575aeb60b602e0eff9aae051f2a67535a0cab7a104e8c293319467e9a32a227ed1134c960543927c6c06a66969fd34a82f6318f88f95ce320ed22a2b3b3f49dc402ec7c0b69f327ebe07bfc84d513c83c7234628d062bc6a5ff8741913d52c46cb33c3a8711fa93e1635943644ab740e8f91aaf96e567484498fac79d3f4b3039aaba814ddcadd049d178b7bf612c490b035aa32127adfc7f61e3c1423a4c65dd61eddcda2a8b7187a350d5e0d8e14535297af9d63d4e37d8e2d8bb2a9ee4d9aa712cc9b69c11fc1d61783a82e274c9d9b4022000a6f69ec3844011b10d930033411dc45da1efe48d946532103e655b7b6b76924ae505a5e1dec0616fe6e57e0a6a275959cc63af5aa49e79134d215e9c984eed1f8819c1965ac026c1cb4aa79244eff5158c1bd1072a8a5c069f3757afd3017ce8f091966370d5de511b31215d79be242b5186de158ecf77649525db479424ee51df0b78cbb967f49857375fee71387305cd234b0859c447a7cf6b6dd6642fadc473e60d51bcfd16022fdbd7a7b3e54e3f4f7f9c42140f395abe8663eebb8827cb7fcfb877c40b9f28d58d0d2bba3b2222690a46653606e8f7e2e571f312d508d153270eb0972a0c6718c984ed0ca0ab69aa31cde43851c309cd26fc85f29cbd708e6a749e7ecefa574a2fb35e23bc268f73b4b741a36653faedb98809e325b21392287e941360c573ea1e3d1187f44fee55d187000fcb1865b52b99016d2683550edfa123dd961a4789137689b1df6400e136b191c5e68cb4c3eba40ee905ad9f450e80d035c5454ca7adf43939d42f817642cb897e4f2d728a782d84ff49ad6cd513723bc474f2edb65c2aa27888fecab5943959816b8729896fba060878ef484fbd0999023b9fb5459cae47f6444e570f899f8487d206344110ce04ad09ffac1539bbaa676fa83dc5fde3bc4bccbab0e4b1429cfa09374d3239ddf345835b22b6380cd27cb7a8e1c7ee6f51e158b062e5a9d6f54077a6beed197e647a5b9e26b3268193aa7a0e4bcbecb5bb4f9ecbe782b1d14ff3b3b113c25e03daa41915329c839e70894d64c632773b5afef569a93c97a5ef9c3402e6626612c86b427cd0c2edd7fb9198490b9c2c74b3680316428399e966a27ef8a13dc02fb0384e218bc6b3a2974bf10766896af647232e5e2de846f037af0b2ecec50acf1483b29fbe2873a2d610ce3c715ab144a8b90dadd5eb3d7ef4fa5f01e988945577e60663f268bc4d2a98a654a6a0adc43a81f791c4fcebda014ce10e6c08fb675cc7c00ac2f7ebf6274c1fec90fbaf198f16928695adb085feff47c0d0c6be8935b165f0aa6681523e938170aacc339918ff5508a27e4a274089e9b5b2324c2f953b6eb213251ad5e317716d7e82e9e75aa4b5a485df072278854d597aec22befdbe50cb97c426f5a730665f66b02078e69f4ac6ba40860c0979e928b544e0dbc1b292a992b424361d86e6a2fde475b22f577b0bba63354865c053afdbecf4fa93c0dad8ae85a11b988368f4ce906847a765ccd00087936c2001035b6944dd9fe6616fd545b91c1abaae63b13334669de132c6a0175e2eebdaa48ec7e7dd19303c0ce82bf2bef3b7f6706d54e650ff295f46ef187937765bc8333c51c216165ff73bca493017c677de61fc7c3266907e942aac95a0a3f810ab35b295a2908373ca668cc9784412eed50b8783b1f5d902025685a4283422bee614881fe3dcbf100825b60945d457616cc5a507df8f27583c4310c07a6894cafb68033d104b47b942f1cca5233902941838cb75358319e5a488c47701a1bca96d98da99b27cabd40d4337099af2b2db69cd61583e720f4edd802734688018febf2f749244d159f4b9a29bc31791d6cbd40c0d2d64eca5d839d1af851974181f62b447d331f9e0affa88514e1386ecc9e97d356143534c266bf5c3e59f0e58afeaafeac92456ce4a227cfe272942737a0c8960a0543680cdc6550ae263af4914d97ac3d076687177d3e908dad374f940cfc925470216d212eb77fae7f1e777d291bd79a5b2af889d8164e7d57c6eecb2a5a4d9d1f774beba4de70a72e447538db5e062a563bc624fbd6941a3bec0dc3420b514ed8ec0a518502ab02f953f6a9aa87c155bf3ef9ce2da7e7cc204fb2669c3626cd6428b33a1b4ab925a9f403b8e0be918360de9a71b7b1d1fbcd97e89b800452848bd44e90acdf217a06cea24dc42dfc1cffc1b0f4e11bd90f0b6db44a359d5fd91498e13a81e96b67d78ade509df98c88658f433ff30e8870a279205b0428d536c91b7620e28f2056e6cfbca9b44dc9305af15c3a35b164865a6233b735cd3a027006142a16f9c7aef9464641514f3a7aa58e01cdef2df7bafbd0f54410b618a5d200c4406750e8d7d99683febb2767cf10103de068a9c9724c6d6febdc08f687b7b28d4a1bbc0b394e687bc93cfed898611c155be94e601716dea895e3ee5d10e7c377307b64b93c1f64378b1afc163b615d9326ba43461221cea8286b8ed4a829dc8adacf7179481631be2a9e48a822d878be2923b103c935e3788ebd10e3b746a5cf305f0ad4c5f9781890100b16b38e189e4d6cc01da61ac51fad219d12a507c54d1b7258511b91e04ea3b86ce9584ae33c78dc971e10971da56fde5deada31e50c81528378b2a612674ddd94a878d6819f93bc5f8e6f769313ba3e77f2be8fac154c45b2d1f200b56b74c9aadb7af89bcf87543ff32a7dce70788713b2b9e8c36f62940de54466726302c2d70ac879d9d53aec60d7ab7577c490025bb33403d122ad87bd3b0ea1f156de1143bec920e2b896cceac159253518eaf7757c95a97f371365ea5bb97ad94cf0fe157ee5b75f80823c043a9c57b1736eae899646a275b57e78bbceaeb6d34d20d076d38404f736e583d6c9dcd193dd046ec087adb65aa4d506591b5420866256d18d440ed153e1a9ea89f6815c825e948141d934add70d0058ecca127f9b927a478359ebe41a89b5b94549f3c026ff062d3513424e93f7e6b69b64529ab9e6747b7f9a8405f536f138314b9bc528c742bbc4be3e62376a71678e707b3a89642cb5aa903ffe8cf145ae7683df3330bf3073156192b16a6e88b5ee76f527b2168b3d2bc2859686c199653b7928d1e5edb99c5184a503d50c13e6e3fe2729dd04775a2bb8bf948cafd5a3a9b6df68f05bc37f9fb0df201f4bfb4394917b08b235d955d2fb53c145c2e1b1e8c16ac0f8113765286ba8d0f13426142ab6588bd8b19a764712abe55a02a5d71f2233a1a615fe94144068daf3cd7da1ccf6267cf880a005b3852dc872770a5c7762a0d3a271fe558ab48707cc20e831a3d84ea1b9abd54a3ddd4331362af68a17081b1d932d21efb2516d1f2535500ed7e436c2c438208d0ea154e94d2252a7279c0b49224f4eacb59e83eaa5129b7e8fa247a9c03268154d59c7b9616707fcd1a7d81df6e16dd2bb232f2ff5c1b3caf39be91d569e972b238e06671702fcd13bb0e962b8ea65aaeb69dab8bc4a7e3a2c5685e52e869417b8c678bb19fa186e8d3fa8df0f73207c6ef7ed4ba3b3e615625b81caeff14721338c857f0f57451af0dc7c5ea48385906c55ceb15206d2a5bc33479442e89891bd659579a0226a1e8c10cda51e227c2d0c0ce7b2704b293063653d0bce726fae7ddb107275626ec28862047e2658ed9c76a39f15a588d5ff7f79cdf63c97b4c19c755f33361f3b4e0c5b87af642ec026d3a25da49bc7bd5a37f85e1f335f4f1241bce8818a61b80a4281bf007fabdd114b928b25f70fc988b369574c5cd328e9953614271931cd3e505f143b20d82da505fa90616469e1d31c5422465ffa288ec06d4beb8c9662315e7aef26eebb962c2a62d42088dbed819a4126d5e3dd3548e9e9f6978b995f2c955cb68b925f01ece152bf290b70d5db54b9cbc09082386138307bf1bd41ac771c8cd330b3c9572e5353b946962d8129734379d10ff31a1fd6cc44c2cb96325a1c92acddfa037e3aa7ec2a3dd11cdab31e6898ce0838c1cbeb45b7d15ca0d71dbdf7ab5c0e14605806a67ad76344c6c07eaf9080225717ac9e213ee819688407264236749904e4d0980811dcf5ad2e9abba0caaf065a030c18ea40cdaaf5226180fbb7ec40dbf1e9849a57142e60fb87fcc3ac235c486c3181272549b64f9773f2aa958dada271edf3e4b547b76413d069a19fa3cb2a3c6400615424e57fcd85a5d8381f88614b220c6f913c37c160bd2bc10cf9fb075aedbd1f3726e18caadfc10c086a781e67d1f8c254bc5780c9956aab59eb95e7ae14e1e935174f7e18c96dcf6d3526e3ad41de65678fbfa835a24de8f04241d320219447b6beda5efe8ad1a8cf4a3ab705bce7e1307d16418e2afdff37c5a6d1985bfdc222e42833436b161f966f5ba357883bbd194e0454bb76a278983e6decfe0c45e1e251e105d1b464bc2a6d31ad8bee018189c933e7a4ce63dc79733d293a7a932d5ccdaedc8fade208f30b65e0893662b6e8b74805317968b2442ebf9234ed102df92037c1659db98a5a139f4139a885e39de0eeb34ac1da8260359b2ed5afe469211123bb3bce10cac54b86da838c9390120ccbfbd7ece1d535507805030736693d6a1ad3f98610519d7dc3b25029b345ae0387e4c043a4312b49fe20a73c2eb6b3f1c610880ee1a64b6ffed186c80e8bd98ccb76ed0e4c21aae7d686aa97f6d7ed6fcc7aceaeaa5235eade400fb1cbe9fb713fba4695002a1af1a83ff260b35451abd719b4ad94dbc5b50b06d12c13e87c788ab7b41fe9d6e3301b5469df90b6496f8df62255c6cb629a2e2bb6810e0ec56a54761df62eac6d6cd8ccf65bb3833c81961801ec68a9735fefb8a5f7e3e63c0e47fd6b60f934216c87af801e444692aa9b8737bba4fe62cdf5b485d7bbf54a2e095684a66ff765facf06f16e6c84b2b2444cae0aa05196ace9274069bdc5579042895210ba7ca2dc58d8309452c70661386e4c21842a77c47219bdf512ddccfd9b9cbbe5024b41dbcb2d25d82096f57f20f5fb4779116ddc3993e4c3e1c50f3dbb99a96f6eeda8bfd00db881fb7ae7d3a3eaa2c5a78fe0bee59c9d1b53068a184c8703f427e941500e81d1d90dfa44266a5429e3352b38301f3dd0449027a456f36fb1bd55c773562e9058267e9e75401c3b77e94b6eddfb8f7d6587bfb0c4be5a589a121e10a598d74335b176eee0e962a7761f13df38e7dc64442c0829541a294aa83aad4b41dfb2a150c21c73eee9e4a10dcdb206afbbaffa567b941bbb30084ec27f2800aef367b291a098b407074930243a536bab41af4881bb8b0e61c89d6ad027b8b8549c9d7ee1951339940c3a5da4af1c97953f8555ae361588aeac93a8bb7b84f99ba2fc0e26e7b58bfbc15e2f73743511d37ed829c63258130aa3901069c3b54eebcc2e694adfa531a6eb5eae7ad1c761cfc651cdaff87f36dd743ca9c347723cace3d89733c50cb3fb55e1e2a10efa10efde984853d0b07a8fe8417bb14ee44d46b0a5a1cbe1119a64c690d4d172f5a59d9054a29801136588c7448e1c22320821f83a8ef87add6d4805138bf046e1a840a22de468d5d28130d9f0ebea0985f5a5864266a4da97b40fdb110fe7d2e5a13fddcd15aa921256f0e5ea99054c059d3b216331b64768f8201032699f5e2a190409d93d4681fe6a2eb5dda05333d987499045f8160a78bfe56c1fa0ff32d898f6eefc6423eabb48530f6f09be052a3b399c91c3ac6bee94c5b780bcee9616a47d53dc932b157475c8bc48db2d0c1f42710def9860b1f2fc28b8fcc656d10cc7010221d245494f7af484111e878ee1235bab06811a26ae8176383cc51e2ce388eac1742759d074e03e2e72dab6d497665d3d7f85c21047aa18ffe8c12eefc36fa1597d9c50f00c2f10841218a1266a94e18d01ac40b8e8ff74d5a7c26e62d3058c92e33810f23fedd14c9ae030cb82344e6135ff7c66b709f38221d1c6cc3cd114334e03821e34a4e84fb1384b0d06ce0c82c3855e62dc4ffdcdfff51e77255ca10668068ebb14dbbf55002ada321feb83b85247cff3805afb7fe9375ea9b72c9cd1d6481d13061bbd262fbdc583f4121bca8a4bb562cbb05360869d6eab1acb6b5d43d1156c33eb4a89e5f9f448aecb3c82159bfaf8e4db6f387f3236c575c1787255aa600fc3d3ce47cae750c9749e4ea6983f84faf463b5cf7bfb9e3ef0942ad7b4dae444dd5bb128878ebf4d6f14b9ffbe3d3db322ce8fed23028f60b5cee85609698b52a90c5cf4c4f72a1ec6b4e5552c9f0b6a97a664591f4eef71e9f61cb5fc603b83506d357328287a82a2063a708d6dd8667a729cdc16e7a8bab7952dbd34c6de1dfa07a56d5c2b95c22b93211787ad8bf0f4bb9f3eb1d6a083453283365aa35b69ce6015a90808652688e20014c2690c502d08d4479722c114bb5586e815009aaff502ebf0d3c5d1f5e27c402de7a843ce4ce1a5be70d3f1b442879e9b0ee483379775910a656cc07960e74a2b9e7318b27ace796de6f21aac024e3316ed57fe48da3f6dbf67041cf82bad85d58ed17343de58b91a9f8523452235ad225961f32be9eae9d78196ccbb6a5558f560ca3ccaa106cb8e4397f4c4cac17487fa0b4a29eafe6b195a29b80a46682d51bc665b8fea6118917b2d7574247cf00d795ceb8806015d4e9bc5c82de76d6bb348aeb8dae2f008ebef518e9c55ed897b7e5dbe90647d263eeb72e46b74ec79e1afa93bf3b03b0463460a2783889ca89bb014ac8b2df92eb1f339f40d166ec1a3975fcd217eca72c228612872e312b333b88b9bbf88fedd6f5b21e05bf47aaac3a9d954ae7126bbd03f5c79b18ed6140c3dca74759e139b3fca33909d37989c078c1eb9e0b3d6485530060288b27031eee8d720f596c0d0ebe876ec1b0650ff39e836e5006c628019a664ac3f776974a161bc8687998de4395ef2dd1d8a2b3c1f672abf55c353cae347805d1d044844ec4f818d73cf033ff2d4af49eaeab0b982af012e29e12f907dbb61fe6b829508985b2c1f005fa949def1b61acb4f68df2968c31cc2ee8139adab0f787218d92a6d2cc7237872076bc45e0e3608e1d916de3b79706911ce2d3cbf93b177ef9a11336b5980212fa60b6dc3bf87e9c78dc767cf2a126672a0d3f29ef493c52e6325b2bfeb2044bf0d93a2c6d2f3b52a0c588dcedee9013a7e9596f13a05a3feb9ceb2d184ea2849c46929124e64b631dc3318dd9ddf8291f1daf25f6dee58872674fa482cc617f654f7ca4d3bc1320587bed0a670db309e800bcc9196382df0317f53cdeb9c57ee44a34f20a1f272cd95637dd15ec6558ab38eed2ebdca6a6263578508ca5431581cd77e3289debeb28c89e6067086377c12cc1ddfe88c5704426458a0d0d7ed5c65fa212cfa6f5edcf697d4ecad041e9d262d234c21663bff580f943e060bd324a674feb5fd8c99725af70f2b1d285415761ac91c6f40607a2dbe008972d92bd567acde76991db89d41105f6cc8db200b8af9d5f8db020c9e47da652a1e293c9a310c8816d60b0384324a8c57b703c9a7eb3310876b94889330cc8bc812e44f998afbc63ebc3cc250b50d5d93f18998132031427229de1c8070fb3a0c55f0acfafde15e9654993d2852c19bc97e56d574b15a33601dc90f8d8dce3a9dee379be60f2719c5a50abc3592ce0ea06751c8f52715aafa4e3babe411af5225e8a064854a33bf74b778869efc9d7ec1b361b8bb09cc71e8c41d36aa84054c4948124efe356e184a93c9e48c1994b3d36a70eff1dfe64ed18758f90a6c37eeb31877a27a5840ebf040e71e276f1c747f9565b3bd32cb0a5da0d23c2a53af010b60b6a9203c12020dc6b87c96889e8b6d3a274d4788e26d3516754732c0d44cf826b7a819684a234a2e264502ec80be4464a005b86c953e01f128614b3c0e99237462ea8c6452174f7f18c392212cd6ac18b72238634b476839d2d39d4ec5ae34519fb6a2b990a6c3c1753c6fb1089b4f6054eeeef76d4e13f75de64f7e6154d2c6565382ee6e974ffd27f9c0247ed4d2435faf03af611caa33b0df89544a53a5d96f0a568b52b49a3a1542ae00f44be0cac1ae9f139079d4f3b3097559e9735694d2234319a6c34d80275f61cfd4c61ffb6033e8ac622c39414eab3814a47c8dff67e6731fd18d0fd745970018850e37e02585090140ff8224690cfd0de435f121179a0e253bda89485733b4646febd181f8ee289b90b857a5ec75eacd12672b02c8893bb34c7262da457ba43afa2495e4c2b46e00bb205fcabf2e27db94dae3aa63f923526c1c4396f7b7f9228e832a13692002ba2aff439dcb7fddbfd456c022d133ee8903a2d482562fdaa493ce3916d77a0c51441dab26f6b0340238a36a71f87fc3e179cabca9482b704971ce69f3f20ab64b70413d6c2908532b2a888a9fc224cae1365da410b6f2e298904b63b4a41726321835a4774dd063c211cfc8b5166c2d11a22233c189cd591a590dce61d4eb848da3bf864f48518b50553ecbbadb9d11f926e312c3a704fd5532db53006accf9e579a88cfd04d0f45c5d9e3cb6fb00a0222866e81efadff5d3847e9a9b4d03adc102b75d886798c56e93b6c2b15ddd021312745eda69a56a1cb8bf4a3967d8c7a9a5b6a2f85bf0270e5e5006b4e97c5f544ad51c00dba083b634640be39f926f25cd6b0255c71f42c52632afc68724de6e3a51c9983a16692b623587a0dd7bcfbedfa026a8926e3d1a542566f01f1fa7e848b00da86d504303a9fc637809d90cfb441bb5f9a62541964ef1d33999b3e34adeb9923a5c963ac4707f4a730cf5516564a5584eea8c75bf7d5e9da9dd29ba1d6335fd55ef3076f82187e29acc17c482a705b7b146ea022049346d48d4c953e73fedf9020e651e2623dcd3f432878ddd76057929a2890f3e1b3aea1f64dad733d9a62c48a17e5bd7de46c689268cd5fb376b46bee6afc5a35939bd3576a66d869b2b3e2f90c35492ba8d6362916fc4665400c879fba54cd66dfa8d92f3733e6aec43d8bfc37c32df1f785186597981a5338ca461c7b3cb5fbd42033fc18a726634b5a20122f11c4675d139fd68ef35403ed7857f33206ac7b3dcc743ca333003dc4a43fc966a3b50245ec2d0a41c07bfdba811d927365394b58f80a6f4b5a0c74aca64b8052eb68494e89506f74720ab74c8f07a8c3bab512d22d671295aeb3ce7fdac3e5986b66b2d3659a748b7a78c7000cb6748789d83825e73ab506839ea1baac49578ba638b5812b7bc7eb5c5e837164aa945354eb41c0bfc5c5128b1584f9b53c54c12e46f7b42574c8389a24931d2144969bae96b63f11c8c14e27c0ee99602d7bbd5629c008fe05f3e7b6536c6fed24f9e4e9431bfd7794480dec194536479d2af4d049c4dc1fbfd97d337385e602bc1cb3a778d9886bb8b7f63a973f3cd5fbe0fc0f3f5cca04f2f76d83fd661c2c8a9d8c7bc0756c78b6af9ba5c3233985ca4c3775632e3f385fcc3d3a69837ea500eac3a8827616091e8d42c01597a8f1a8bb2ba56d8fc84446d660c930648a06cf931de06762119740df9ffc1702f783e7bc6d11b717e19358948cb2fa9fcaec4714efa5b7bffbcdce1507bc300bc1c737ce603cc85d17bff584f58a108bcdbff7eebd5b2be610f736dc1ea309088435f97fa99929a5d724be264fa12abeeeec628f1b831c8b0dcdeb835922fa9fbb4aad3ebdb943a89c6c13070fbaa1bfcb0c07846eb002055e9c8ca92bde9d27d39fd399f11fbecbf3e084959a190df4ce99675d3b6484eb6fed7acc2b18593769800cfff83ee3967a3c9350935ed7f4860ef28806131db3de5b365abb62c744e9a5a9ff37996a7e7bdabfd66fee88456df74973633e24e516505fd371606fe6d07b3b1643a1ac0a85457a85a46aa75e02ccdccdb75842f5945757d4d173ab83ca7b50b380fa30c1230743ecc535bda4d10a1cf58703e07bf4eaaecd403f12b214206b7594059128e18abc8a36f213c055398a69669395dea484d52b62052dd859f4ebdad15635a82d6a44cc9e0272170bd5b5b7cab9cb942fb05b8dab78658d18736231ed5ea6c573006d525ee9314f61692f6f17d90a32f2e7b25280fb4246bc265f393ca15d176ef7a689fe38e9aff25e57ddf263da419ab57a1887205c7bd188535f33a0d1045dba70f1f053f3df3b3fafa2defca4368384034e226a1cb2d513bef286ef9b12ebb36d18d9ecf843a887c74c3206009849edee71e74afb82534312b19ae023c9858ceb7d1f465f73c6c11f48901267dd6a4dac124a457140c8a0ff0ae42503aeb7b18c7d44f2a1f6127618167d94527c414dccadcfec3694a1b7c47cf710a338eeabb0b7cf946831280152345f2e48fb7b58b0b2fca183e47af2136648459adeb6e608bb239e0acb541d5e20b922c3e184e908b034f811c6a0ea6c855c3643269ceaf4e5f562020b43048c7a10245bb4da8925342d6248a1dffb2028a76544970d44f5c69992f69751617d9ef8a568ec08b3a69d2a72910c84cedeeece5507b6846e9bdba4a350f62baea21dd718740d7be30d79d0ab936d1bb01936158814eb9ed247a38b15998e1e667a554010258fc0b1ba58947fc85a11593f9d2160e4ccc91a999cd15c48e5c60396f3a80ec5e9638a4d980a51984a0214e29286820fd07fa1f2560c09e783af10687793770da0d0e727d696d38bc36a9d72a4996dfe8d3ef2f23d8f80edfe36177f3f76eb355c8552e982be883b3cc73d9041fe872959939819d1f063c4abf7833bd9e6de05731d57f33b05b20f3c849fac091a5028cbfa0bc9a1c32514136fee3ed547b1d66af550e55df11370494f1e2658617b656afec8923b7c3754cb0ba2e8903e1920caa9f8206a051f16c96333afbe884b77acfe58f3fd803cff49575bd9b92e869d08a79844edb6275b538d9aa8b9e352c80895377f6673888c04df7372ae9d5c73ab8acbc36788dec66e1a9d91b90723ef144fde8504cabc7394008453ff0f3d6d39a00d1c5601a7e08f86d70b6a683155367ac8b566fa4b5e5d6708fe18f89be22993c6c0479515222e7eb1661c8afd8315c28080fb96a7a4e78f6bc18aedea7b01e2a34f9ac79913c15ec7426de3fb0108a39068410473dfc8c6474ec353bb8038f90d2aee2dc62dfea37320cd07bc47a59a72dbb5e8126767c8061660ce819a55537ed2b01c0ee91ce96f71b86ab3df6313926be89615f44ae13298d1b2df31ed9e72e76f26e5ddd29cf6b5ce817420d7ab899957a2f0dee8ce4746a4b526ef482673c999e2ed64863ab37d6df07fc459ced2d461a335bfc7cbdeb03829eb1b1b781c19cec48815ce4f2039251c29229ff9d8bdb50b56ff7e8643562a95ae5dce2fb6285c30387a0156c769628912d3e0c935b5b03fc716737a2fb8fa9cf31fe6a9ec95e0da8109c5ce039ec4abcf50e299644cf1d518ad2d13fe5906842be9eb7329e2fb17f43d92218f49ca18b1120bf6dee3e85fce1c21e039a6fd0feb344317f88fe97d049ded0da4eac1345aafc37e102b02345a0be86b6c334c84a3979404c30d5a7e34a33ccefef268a34e72bf7ba282edf73ec4f711f07e5376d78c34c633ebbc9ff6d61801f8011ed9ef13469c007bea1d0f0fb47070f8c07b097adbd8a59b9e56edaef5231a97624ccef9ff4ba486b51a2d14d703683301f5bbfbcfb8a29d5e376ba65acef115c16060af5ff72923ad732baca54740ada67b6177a6e2b5719ab60354cf51f61cbad946abcf4ae8e351bc8d1fc5b894c91c708c86e7e348b8d2574722b958a40ccd0bd367f3a37e46306ac3e6aee3cf25d279bf920946f6c383af99a8af4f8576567ca97c339d53bcc7e252a9c7356a4466fb5d31916a2a322d039d4f17a314ea05b03b412594f3b796c7cbd1b54a00955879f7ee06e96d853d07a49e98ffccc8592b0b6f3026f8d71b9fa1e6ef7dfca9157a121fd0213b2d4230520f99b22791bf519c4ef9cfbd9bc4be4761dc6de8e03c802e4f93ce1d9acaf2282aa066cfe6a6c86078d8fbcc6630c85ecb12764feb1c00cf05b83c7f6e35e189783389f037ae03ea655437afd6de324a9b18438c2a528056dab3e8eb1821731860c99862f54378acacf21fd26e2b708d4a5442381e7e9368372d7feb18fc1b378cd92e82bff5bb29b848f0ce8cb727a9615cfede37de9e75836b5df9f1546e7944f898c9e8332fe40fbf671eb2ffbc2178a8d5e92711260178240f922198d150319e73b31e9a6b5e2bcbff2d8163a287e8ce63d33cb4be8e6dbe014e3a57e85ecb315bd8c389e21a8505058578817f4f4a1425471917bc8edcbfdf789c0017e78a679da56780188bb3e136a0f]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 8966ae53ad35e0beea4e441fc1a6d88545267f4641acbc754aa84f75f8c3be34

tcltest::test Hash_SHAKE256-3.70 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex a4ca086c5316553242c8031ed73d46a87bcc6ff19db40d53f952593d1a98d13e1dba225fb92a4bb67cc7003857524ccf5d217badc81737df3dd3f125512883014bcd130e2b563a93ec63655807187cb838cdc2f88406fdd77ba5d666bb5e821ab56ca220b48268f01b05fc25ed781e8c93380c7bda69a6643c30d0a9602218b2e4fd993e59961ef68f138b48135a7972f7ca21ddd1287bad06dca796495d8bf15eeabe0f247ba4cdd2f7db6881a7d693ebebc8c7722bc4db641122d47df524fead99da3c1c17429c6c17b42e3e457d17f703cbe1c45ac915db370a0c04d42b025874b46c4953408be3ddde42521eb625a37af0d2cf9ed184f5b627e5e7e0e824e8e11648b418e5c4c1b0204bc519c9e578b800439bdd254f39f641082d03a28de44ac677644c7b6c8df743f29f1dfd80fd25c2db31010ea02f60201cde24a364d4168da261d848aed01c10dee9149c1ebb29004398f0d29c605a8bca032b31d241ad3371b4a595b011864cb7abe5ece6382d8022d894b96d534d4cbaa2ff95ffb277808b649aa99ad89dc227eb783601fe970b21fad30d3b90a22993c68a1712afdc3c99799ece95aec939d4b3b5c19795d169e80497142da0bfebfe74b3fe34c0442e42fc9b4ac9197278660a84d7cf8341621e01c7186c0a0e5aa2b662948c6e171f2ff478665da3004886f9cdbed15251be6bf64b5f1f56f53d28937f1f4340bdd708691d6a79d4db71dc8678bfc689684479ed0b316f0dde5d3714f3e880bf9e1e7464729e47336bbb0fbc6d22d6b1edbdededeed884b63083783fa4376c7122bc1beb5e49ec4819eec8a0942f28514af272ffde9b85d95375921e7b542fe0b278a609ccb5939b4bd1ae3cd52ee5f1e6a8ae2ac3c19bffaffc2eb96086f094b41bbdc3a12862b56a2d6a971966341a29aa49768393edafacdff4163c16d714926d0723c6eb811ddfcaa3b946203e527bbfeceb0759a471b2e88b3ff54c0de8b2362d302346195b117002ab46a42a2444ae3f92375be7cd29dd9c3c7570ba987e3ed6f2a08052f867e72e74ff3a2115ec40e972fbe0df4c7987ce13a2ca05ac5c4dab7226e3537b4bf6d01c5b2a4bafdb3d93933c32b3750aaecace66a217adb62a54b79bb5456c246790ac41bbcf797a6de4fee0978cd0441a3875a83f1823f39e78c9e93f4f545900152b9836d6fb2f9785bad15892e69092be0e50ea2f947b71bfb1f6c99ab9548a08a14ae387be63851dcff5bcec3e54df07a345eb848ab66bd376ac9b4e267ccc10163e0a0b497ffd5546360dc361f9c9b93b718a408c0c535920f1fc92203990d6935cf38924e9c8d5267b913ed5e8187ddfbb0f8b23e5f3fcb8af368e31f39c021f8ce62ad80bae4477ab9286248894fa960bc18cd5a9116245cd8f6be012b93bc3b62a16ec4c764a42b056c2d54005d96849e96c2dc07633cf335051b5feaf2986c20874e813ea908e71261b717a32c15d5dcf52b092ea185fc9c067392046757098c86c55cad0be63d649b97f9de45b7e30bb67e88735b8fb7729d6f3de46c78921b228bad8f17cc9c709c38711e34fd2a8f5d35c081ebdae25d1c56ca176c6da430dcd9fa51570c92cac62123df74461aec4bd947b6ecc7dbb015d2ad29f1b6ae723868c9903456aed7bbda78be8e2342b724d194aed90722101c6b7d7896e41f63a790a1c85a1b5f3befdce627dd2520545ad72db63ae943f19279b1afc6668569bcea096612db024bd490f2a7fbcc3268602279898d1ebfd91a85c01c0abe6f18eaed76f60906569bfcaf34cb74790747c77c1e8549f8044b07384f69ce6c3ad5a41360f4a72dcab0ea7012eea1cc0d97131c7325ec05afac0ad9b605abf087449ae45dee77d1cd0f009c239e3e35b3cab5bc1e07fdd8109078127a7c0ddbc2da11e8c45ff572dc1ae18bcd569436a84731b37597f9efe57ce15b23297e9e7c0abb894aa59a817678ffb796b43e4f49b1199b20526aad8ce5c91c36ba68a9114afa5e476be19e2a9dddb81613a6f0168cdffba4c3baa1755fb1ee3b9b769c313f50c0412f651976ededf5a21168c9ad3ef72d5968845c4d3f1e49884902d85a4c4167de4c9f93ea0dc308e119fe2c5c4be1c8d4bd324e632870a6d35fa7fddaf66ead656ffb9dd261df5a59b9c1a8c23832569d3e5ee855905b8e732bd07d51d21b297cf5f387ee8ea572526d7dbf7d887b5f196864ca930b31890e4a16c74d43e9349b7b21f28ce8a7e981916ce0dcc0ff2aefd7de65b9fd84fefb36e57c2bd04b77375c015e4c0479185de229bd6e56607276e9463a28ebe888c08eb6fc8c0bd469d7351c3b9a667b975dcc3e95a0cd31ae452916c87e5abe9f049e15d8dc6af674f182dd1af68331def7bc060a22a9d546e123da8118ce89aa2e019c819b5244312cc1be6ceeef3e67b23e3a9b5250ddc4c1460c0486bbdc42a335859757762026df7e5aa1f20ef3ba13cf26c9be76bdb06c2c25b346b718f11ac69b8a8f2b1cbe90151c7a9e76e45ea2eb6505d56ff7825832a22de724e22deb1138cba105bc60c5328e27429ba2bdd62f7fe025c10dc30be62bc4d699aa619ac1d7db4b7a71d615331a689d01916033e7d1e92e0e72eafdd30d389399e424b0450359dd1dcf56d6a36b8efc2d42ee22b0f5716c9cd972b475d0c9bc8a21ffb2174597d454379ba00fdc3aee9329a049277519401083f2b64b1118a00ee64b16b51945dfb24cecf7e506dcf2b7d83f1d97bb5176fe04d379cf38a5ec8c93af54aae8b44dbc71f344af55e5972fb102f6ae42ba4fb9fe9d757ed1e20077dc9502654e93acd739272ceb43f54a5f66a48ab795a458d8b3d94fd6576d7a7503849670c5447b9714f107157b8c9acb4b8c40604eb010dee6ef5f6243a8b8f8bb069759c7474870a7f969aa470bf6f7e2329e24b85e1630ea783aaf21144a7755836b8ccf3c81f834a8cb365103ed59bd301a618d1eb78340ec48296a30bd758593a9966764c6927d77b23603f4ec855efd3bc31772932a7cb42e4da99e7077adafd7e30a8064e3d4feb525ea6f830f2a0288b5e1ea37ab1078539849be11f250406d0f42e00b40cd962a826ed43f3bb0d877b696e603998ea13ea5d5000079fffddf878b34285dd9e6a8d82bb38faf85f78f418116855a59b765d2d614ca830f20a5c85ddd2a7f8c68a6938b8dd2df1bd835e35acc3b8204336fcbc75cde822051566e254ba04a5784ba4118d3c74ed50312186ea7a485109d92ed1358cb0bb62877d59c102822cdc33a6d5e25db8363f09a5d47093ef7f16e95a364990e9452ee808b0ccb00bd41bccd74c5e46df12b39453e6e91993f491eeeab158e1790694be71b01cce86e75d9ea03daa01d3cad4589186fb111ef6a36e450b0a884a47ba931f215a63daabc92f67726e967aa5c9dfc87a4e8577ce74f3d30c098c424fc8ee7acb2d78f169880a95b1510bbeedbbb1618b8b7c86c42b04fc7bfaf54b68e758ea753e14b268c1b493c3fb6a86e8d154c2815aff331ff12a282188cc4cd83f58d7e9353f05f29db6c87015bbb9e03452552462156629edebbfc759182ce8f776a9edb901d24d44999b7f4704411b0b33813c4cc6072848d2293315e1d5e0373ac84a726301c2dde576ba384f05e27f7dad90bf1afe652964ce2e652f2e08292d9dc8096c7b999120c0e791a3ed7cb8ba43e9641a3328b92b177ff10b1fa7f2d68e2e2625261a87d4e0cff909e133dd71aa0fe3cd8fb91fae6af0607c9007bdbd04467094eb8de888403a1987c94d172b4acae33cf85f847530475a8b696eb06b68d690c3b339dbc547f099288d138d6f8be20c6d57631009d24d893f9225f36720a72dba646789125db820f116cd68c5d51e086a950deaf1b6ca92a0f474af399681f080e75f19f7ea5b56ec4ac3cfb590477c3b98a53bb5468620b675a20c6a302b811c2569b4fc56a2e420123cebc8242513e64a732adee948d98afef93181586f879905cd82aa0a5272955782e385f980737592bfe0f306d9652378bf47067513abfc6ed2aa886c36a754ffdbe075772044ef57d0857c07026d89c93d7582eee0944f4ac1551fe5152c64f3900a1e07cd2f5d83ef4001538999c5dbbbe47c2d9eea9a80e2aaf5deb6a8cd1ce8880a0f4edbc6fd64390b523690de9481bb7c991557e3f87dd294bde2c498612d83c1f96cf232ad7799216cd3fbdcded6230a9a0c81349adaf484eb6128cca9a522c92bef19aa7b7088cc092681c8a00444af984d10944e41394bd1fb7b71de9a8eac0f9ffa344f962d9391f9cba9c25145f2fb9ead0cfcf9c973d6786690e752eef20b433ddb1132b1fe6c1280872b064f5c2cc800a28c4bcb84619f902fac166b2189a58aa4a98c3b950239496ac56a89749193b060e67f6704dc39a259152d2dc3f08b8799ffecf4e1bc38ce5b77c71cc293c6664ef2ddc77dae0e43130ae15b5fa8bedfc1fc9a046900d6b66129632fce9a2bc97399ac10763fe61c6773781e7e1906382486dd92b537daaa85c388eb210f8882d7c1366d78f789d45c383b9da7ab2a3bcb86ffc64eca0d51ce2e7c784258a6388253c1040a3ebf14fa41720162c6f48fbde546c9bb1f3754445087fdb9df4d947d3896fdb47c4f844a76657137d22adc0289fbc384a0205aef12f3a20f0b443dcf56fd81fe1902cb53c05b16af3795cca35c65db32b48f0cd85c0691cb4355dc80973db8717da0921e059e17515dfd05a745ce3a4cc24d1206170aef75f1461999e2a0c99410f180b12f749da6ac2a2f162b7c085a342313812945e7957ce09b201e6cdcef3bbc3e162426d0358de3f3f9f8b86ce571d6b7527c009eb44ceb0b2035ea1b0b64cb7355cefbd78666f1f95793ca8e74e131a780f7823f59c92f109e0e62ac6ff5e4c874133ddb21a01de838e4fa978fecfb8b138115f00d5b7453a4911cb7a354d0e57ddd32038fa42d68a4d390afbefafb0a1404ffd9576a817c39a65f6530eb57717713247857d9e923a448d3fd8a73facd8a678924bf5e1f32663575dd9d2040156b9d596101a61bbe3f2b0caa7abfc07c7d92fbf6cd9f161d3226a448725d557860631ae7157589e47e6484dd174615bef56c9d7a0a952ee6a56135ce38095c435e4cae321cadfc3b67db80bfe771c13bfbdfb6d5fda82e35c7cf7096768b1e1d6e425f699eb53c6b05794b7874a68b9c96d390322f41e0b1a1569cc9b44d63af962d73b521f7111d5d242c2f464e3d89cf2e71b726c60a033adf028e7bb6f2a0e0f3333d2fda43f979c56a0de3d29da9add9a28c6ca175d39a53eb0e512e9599547de72a4fc699a660454e39d59874a538bc6bda8938e9c8ca989d71c11d1242f9b3d7a30a23ddcd1a8a20dba40a892478bf13c903f52e8ad19861de50eb3242d77d4ad1e65ad515b07e281dd68fa6cf76cbe480643f0bc2b7397e7d8801bd42f6c48adb6dd14a272908ad25f58e914e39c62428337d491885653e77f0c57be95f6eddea27f103aa8d0ff91b89711348c99a1ce8f919b0334203e7f410a034e019658c269b22ca47e47d5228189ff4662f2d14e93d7a08bcf6fbc21b71fbafce2c8fdeb651cd65a6373901742c80fc4f726954528708195aa93517159a3cb55ca1d61dc3d1589d6e8d2b4d264c7cf3ab9a34234c602babb664982e0a13cd0e327f218f74a42d3a47ef3b806601fba024b078cbff4e4b85772e0e4e21651482f7ce577ef251b204db6451e15ed165cc60ba1c9292dbd07046107fc082177bd953966230646051c3cff455b73347223f07c308c12e8f2234cb11d1cd56b168daf0e029eef359713ecea72f4b10e89ac1c2d0249ffaf1a999ad39edbbc5bc454e73b394ffc7c5793e7e86c7e51b3e361a39eb58761f89ce679590bbd2f6bf79fd87188bad072cd38b879805cc7cd05c11131b8c8cc4dff7652a1f235c12426cafd216f63edc14e6ed92e6d24a5c267570f869a82b127c8e5c15ed0e9f40cd862cfcb5bdfb6d071a2c477614a5e3c9eafd92db949931e7f914fd0262e4a9e92f3baefdc92ce38cd70f4d52b52638402181867c381e48a8a2558b670973741dcfa690f70019652c855f4d829b15841384c37f517c047f48efe76723e994caf2ce3349aa4b091c6d8ce4ee0cb0baeecb7a8d23644991ff4e4a91383eec8fd3ef94ab821f93462fda5566d9fada5c9fef6aa51abc850ff0421a1ca6c1f9abb69c89d5e25cbe16c7f846adb5540345be07bed40d611ac47aadc6515bb3f7329c81167b126bb5c20c51c8802b2012bb749bdde2a45ceef9c315b8f5fc1cd06aac27a163b9546191256c44a9e368ef07e9342f9786b4ebf5f60557d334056b9c0f159456801da9cd3bd120ee8433827144591cbb5c71f80239020bb2a875b00fecd3551c0fd074bc7509c618b78ab340ae930c15cd9cfc66b4963c590374870d6cea4e7d0d74aca8fc9b9cef23746abe4e69676e823be16a91485291eb0ad8dcb7e1e541221238d7f70f0c3a71f98f314d63958e22598e56f5a0b52208408bc5f440842ff7b100928fee7cc348210ae2d209fe3d56fbeb720a27ced4041d88104c9092113459ec20ecbe565051f5c31906e40b43c62be005f864036f84a9b705e65777ad8112e4cb350a01aa337ca21e107b226719f05559e7e0bdba33ed01eceb209acb84e5d0d99357e59997be90381956ad72f85332b4fe21657eb6f04c0c82706535e8d998932d2f6ae425c473b049fe122d0a5a5f5f65b16183b8bb82aed4d13fb253f724412c19f855849535cec7fabb5df80fc4a245181b91df54891a08ca90096e465c2bb79ef7b25d39bcdabcd20ecd697a4ac4c6dcf970d3c54b9847e4c103e0ce2998f744cfc457b9f21c4f0f754406a2d70f0f8765e73d16ae70b9a53868519771d21396e8531b1cbddca9385789778f54c949a1c6c0c54d9ce985975e006baa1e1f3419ab27506a0761f1d51b656349aa3b9bb084c11274fc4cd4429b92d30e16c882577e079facb7f4506f2ba072d9bfad2e3e07b3cd92b5e1cd2d58e834cb431424d7cabcb0e9b5ddee8dee024d467d6729d2b65d9db0b1f099e0fbc834ea8b4d4321f80f2a29e964f2b7cc539c98cbb0b5f5fb892bd5d7c15fe3eefb7b72d8b906be6ec5b6743bd185752d5a06d790d2fa2d3dfd1f090f9c48bf9749b26b11a2963596a9fbd3936bce5079e0340cb6131f05e582205441c87cfb607981dd1e4e1a0ed782a24dd97bf6cf18adce3f24bc4d0259e0d6bf558e221fb0558fd1e706bbd2981752ebf549247b73897b76c214abae02dfea51343662b3eea3854e5311a1084331b4b4cf1d81daf03ce3bb7865629048470413c4086540842c0a5d4cb9f3383f986fb04f3f3576f88daf152ef5993094dfcb0bee4b534ed9b8c705ba44daeaf4142ce75ef667d7f445878dcc0e79174c70e8439b495463550f644e83fb7da7ca6d9362e28c3f834a2c12293af62accdac202c3b1488e0960f88840902605f6296a4b28c447e604640af9f360f5d3d7a49dc2911a912cc7623cdbe4c90d996079d5fd41ed7084e2a8a7e3f327559cc114c9d0b7bc6c5425c3a3074116f7626c227450b6444e40a380cb7930755cae11900dd33d81202facebf5b15f602e87a28c10ed8eb02b43d1533d63b23454314f823374294ff7e4e343fa83478df8318a1f707bd11b4db5f388c648814a834c0451015a8510379b53317a2500879e88ad445ea3876cfdbd92892ed1a6a13228b765402d59ab297e821e3c3f923467b39261a00db98b838335bd3da5281fa8edf026b797ab0815b2fa730978067e9ddbc1e0ff606f5f2730648cba6d0fae2fc237fc303e850f43624396a978634c8627c3274345afd231eca85e6fd063350dcf154f71caeea8fab4e3f1e4e8b1856cc01fa0346383cbe8de879b22772d9b8b3d118744e4efbb84d064ea8270f91395cd5db19963f233962f8bab9c0975caf134b40c6f348e3027df4eeb4ab742dd4a7706c43cec04f081063cf7a52f41a987db8446ba61d5ef2c09275b056694cbd2e6a140e3a7c2ebf18c21e505919b20945b0b9eef14cce0db7579a27b24f7c57741b68d573b330c30e9c2de83d68a1762dcd17ad4f47aec7b4ccb28749a74b37fb1cd136051603c8544a74be8a6177637855d4333aae7f956b5a654b870127d335d6f39c5914f6137c55992fcab48255c7e3762d2dd1bf0b2d991900e4dda0cdb6e236950a20a648f965f1d878a270d19f0e73d79361fbad8e0144440d9d246bf0b720bc72d992ed5dc415251eebc14b503f53ef25cfa3d10f1b7d614bd0414265de385f3d902a651c2889b217d0e237adeeacc04f9b463a13403af53a1785f5a8bfe409c4f4fb34a6dbb5fc1df2523aeaa4e4e76b25613d5d27f37c52c350da1be4ba48a37883f0a086205f7bd09fa9a8ea72e1131e635f2f3b4d631074307441e531a8438b331d7b905f78cbfc39286b37fd39d1e6fb041be28f560daaa368ad29d0854fada71faa82d9c488c59d1ba405da5e220f66e0a5c65fa1b4c7281bd03b1d7c02604e6bbff615cf2cdd6a17d5eca0ca7e0855695f5f34f2805a4cf23d818f091643a7a61e32a9f54293fe919354d70b606235029b0585a4fae480a067a59b98e5b8314367e0fcd34499e91d4ec6e39d539d9440fb51e855aef6419ac10fc9c81b4e79c80f8984e5bd4fa80f7acb5cfcd21ae1a902dcc370f6f02e45ec38a0030166efb88794d8b91735ca0c99cab9b6567aabaf240ebd738d7295363bb8a4d652a21179628b7ea9dcecbd894e5d70367b3d50d7d1502cf9bcee24e051f84eae69807d9f12d5dd4498c4f109eaec17099ac38f97bd5998601fd34bd8a1700417b072829e3b1c7b25b56f0303120f24bc5fbda6732a73964310b27883bcd87b9ee1f8df0b2dc7eea9cd3b7219363f1fab148c340ebb468d1f5a1c3976066a0ba06893d14a7d509e6d4acabc90c9e46e7263afc6aee23b135136711d2410dd4ac8aed407f0ac5f00ccb88d511e6f97a78eb798ccf831d99f85404182225e8aaf843f29f1723d3bcc648103be1679d1417caae7b56f2caaa828021e06d561faa04f94161c63928f47b15ece722d9b29c2b8981d2e682516b3c5f65729d1adb5c3973828e7396eb2092f8c3e1ba825f9b1cf19998697ddb648cb879d598ba4449ff7b5c2f068045c975ba3d2f93abcd9851ca9fd5c6298f1edb550411487d81f8bfd7774b66405e768b2303db949b241b34dc3a91e5cf962092fcaf2f93adbbf1df507cea7d1e5daf3cfabdeda49c8bac2cee13d5aeb617f217762236639019bdc9ae131432616afcf009136badf42ad4a1cad1a809283b1dd48b042e9f70c4e3e3b9e3d26d53afe60f16ab5f96ec2a1afb361d13de6b2a282f02fe202f93e3eb9739952b163a51f401ea30d047ccb307a3fb9f1d15c80b9b92a5b713fb429f5e4cf5d028165f7baf2f4d48c7a7dcec22ffe1fece968706ff643ad80feac420c369b63dd0530a539dff069b4ba064fef378afe32e49f045db0d8a081ce6638da25844842bb6830148dadfd26419ab1102772ff546164bedb7f55df043d7650e8480674c412711ae38299e951afbfa4bd86227dd1de6df291b847b378ba313cdef49e73d1b8ffd82f3520c8b762c99d7fca26042bb9ff51f9022ab86fd33b5ef6e1b8b00c0d490a403bff15d7f95d0dbf6a0a2cd292bd5f79d37b6859f6f939f865e1c3d38e00f3df0d615b33e1ee7804fc3b4266e70c7dacb2b65db7b3ff403c17a639b8c99c57440013f33b9b025ed8e7260f4925813f0a1667e31998c2243a6d825c3c3e9f9727da73988fa31d34b3b176cdf9eca0060a750c92eff3c6388bdde2d5de5b7f25e2e2fc958098b39c1de19a19199add7536551107bb73900fa8ff54210fbeaf961dc03b84ceca49f7800e0c7af8bebe1f064d219bfc96941c0a3852b840b6c56a30e8acd0bad664d9728d4a6e47d6b63602b39ada33bb66d0381f7b1622024514b4c2cd23e54b78a47df5d05d57515a8ca42f094cf1707ceeab2b19c523ffa32821f518d8ce781a0b0ace3ae2d7ed1f757325d96ea6543aa9ebd1db4fb72d6406f0d61c89e70abd5f917ce67929d87972e82ea7b9c2b544a462aa2c006c0a0c43ba0c4491bf61d724ba886f9addc1fd179bafe0a8f7321f60b82a78a1a3240060d60e3d9ac82bfbecde8732c254281ed5d63000c684492f5154c96d8e0ce9f4e0ed4243ff91b7903a85efdc7a2d7963304045a4ad2a78f918b10d673009ea3e46584f045a9c9338703938d94cea444ea9625738973a200109557cf2321aa350f3cf8b0b16494d594070d89594eb0745c3a4eb394f340cdbb5da7e9afebf83e19b8b9ca4cd4854770db565bdfcd040fcf19088232fb86dfda088b8ce10893a448034ea8de9fa37163a9f669eef1a6fb8c5bda482a337e1cb5c188207f1d8051e5453fb02f6df73bb796731d4e62a022db274d6d45422f6d93ae280d52d5c82b37a5154c06e7878eb2cc57dec6c9fa6a03a5e8594bd1a1babef7f2bb22d5741c884c57e32cb45d509e7329131fcebabd4eff33750487ddec7cc56e93b7c88c0b1e628ddc6a7d816bc1b272262118ea02025ab627370deae9164025fbd85416df430e3fa186eaf9c564b2b97e9450912168e1fad8ae0ad09bd48f9e5c4f211c823c78f69948a2cf48ce9b8683401db801c8b986f12f2798e9fddb611fe2d8a5db54c9392c7a4e0bdb4994629ded28668c6a0de2d8830c49badb4bf7aa5a21bad2d22991c2e295b3651bc5d3346219a3a9950397f77260ebf8b408e7677ea3624ffdbf85c34a20d1d08d5763b06897774093c32cb5c3cb878ad139b9bc1807a53a1fb49d9778976c03e7729a79c74aeb3aaa76297940f723587a07f613eef48b7b7e2f61a734a08de6713dfff747db067d234417adaf89ca4af69a25d3ca131dfb62595a5948e63b6173e11a93aff2d1f246547cb8d92c81488f19ce64720c62a0155a0f167a0f7e5c348673b3c93652815acfe3028686523a8bac7a2eae866253de59084794c45ebffd5293c15b509313a9dcd1f37d3f4408337daf99482a26fd047ece525cace472167001232ee79c8e79a4d0f388005f9acfb1f80d069fb584d0f3e8a19b70175dc70645430aa473dc134f676a6d71acd8a773daf2b28d18d28addde9a18b70069583de887b72f22e3bf041fc0f53932ab02e9dfb0129e55cd7a6739a79d2aa57c103c7159fc2fb18dc4eb7e5de800faf92a3b8eafef78765fe7b6802ff071107f382c6820a24d26c06c2d0ea90e700aac65926f5710c3826f1bf53b9ada33495b1834554372308b66fdf2570d2f2f6caafc160b113f2882e45c4af34f231856f6f87dc12c3180e766c061e0ef12e528dd37eee943424e7da8f3dd2eb893ca413a202e3442aae743a8fda331b8803b442b5d439257e2df7ba228d7773cf2ee120ed77034eda40ba614fcdfd2d141d8ca7eb83c8cb3e78085ba42605343072fcf59676b4b95e6941892043e4ca01d66c1bd8e0261c119dba1d88b9f4c359b328205164600a2392ba20a5ee8258fdc8a32d028bc98e74098dae449bde97b76a232f92d2adb7c65784a645304e80545ee249ece93ba8f235f35c6c5e2b27b6025e81df33e658c32221a8829bb1a6a213a9f11c7af4e208bd6bc674734309e2163ab59b2ab253868d21a5e283445253816ac105d37dc0240a876ad16deea4c80068395b098a4e9ce2f51cf9a98f0a052285184d653ed9c0a7b6b817c0669ee47b378b9372e68082de2c7c1c50ea442371b98537b2d0858b1f8a4ccbfd533ea3c1493ad8d94fbfb4d92841df3bfe873ae95896694eab59dfcc628742872d2aa28d1db59faf3e52cf6e891cc6ad2449b813e2ba569b57cd4b48dff63ff05ce94d29259a6c873ac01f08bf5b57270402276c086f841b4e663a1f7327f8cb8ad1204fe137a3d3bdae40225b8bf55c1657156c0a248660f7ab38baac8b216b1f98b84bd13bfa374f63cf65be3d459ec3aeee8e9887b1eefc02c3a4ec9e2e71839671b78615b4045897192d77cdbc81a4802f6e03f7bb27c4136768c3ef94516f60d91d703385dd71aeb9f418ebbe87215154650cf2e6add843a060c2ede79d3b7e7ae81033c41523111e4401e5e021d2b90a2df417e8d3b129eb375a179cb76045c3a1f685136dd574d2b7d36ab5d4212d9d0359c5265bd71cc456f9fb2822765d4fc583b5e82a012063aa0dd8a430a505a98fbe891388c2b2a84a43171e81063b7bdd5834a6ec4eda5da501ce3fa9d6f7ac4d92d254fcfc82237b95e9e4356856e453d48ff42716d90d335fa9ecb22f7a01a7674f5f2afce1b28592f21dc24545f5c39936446ce1c30edf87fa4fec16e36647bc4e96854c77d1d2aaae2fba057f3ca716b61c20481edf041b3dbdba45ea3688f26e9fbe53aafdfd4d9cae8f21692568cd8defd3a2430a3b79f2caaf04e4fef5ba1ddf18ab01b3600c4bfea4319a5ca33e2c340998e5fcf034a7fb2d0c7a2c0873dad936db028e95672aa4abbe992ec0d92f8d34946e43ccdbcbd3c6a5004a5ba024229b3c23ec27deb7451810dc385c3ef66fe71d425b2bcfecc90e671dd649cf982fb876ec5871e370344be0d9e5cfc01f3093ac18cf9781796f66db295c6d62956500f3d2501e05f416e99728d3b61d1883bcb947fd8aa0f02b6279c9493109ba67273b6c7f86c6a15163bc2f7e899660edd4dd56819faeff7173bb64293f1555ba7dc62113469606683cb88442c4dc96b37e70dae820fbe5f62d188088d22615b3872c76c7c80491efe7249dbcf25008991c2c3b9dc928421e0139b4c4b4bc7906d5c6f4199592e24cf588f2699c8154e33057ff1ee2a4925d627767793138de18dc3e2f6549b16603ea4e18c52df0fa464d9c9be828016538f35a2f22e22bd35e2cea6f573ee0aba937fc875c111f7726e662a885e3bf2935266a524e4215e76b2a645a4befc111a1510cb49af07d4a097d329b74b04e6cd66e109747cb8798b4672476dff6a33680d807271e469ae1528494fb31183f9e914cf554cc08e155ce65b32b7fce3788cc3f6455328de8ebb68ef22e4785f33cfa4581213764c3ad1d98990e97e0de96e7f9bcd58430e7b79a1ee2cb348419c675ea3c7306799f0d26923e86d4d908df7899691e8fca27d37196df58648d03d9a89d9fc0d5b1e4047dc51c3aa31156d0d2810196c1c429cdd1a9503c641b51d4e6f213a111a8331187b3da808f2448f99a631ee4a6c95e154ea8de0dcfc97446c56a407a46b6fcc2d8e0c1fef57c4fd84492097ecb1445382d17e142e3e1fbbdd878aee2e178a186e5de9b0c72a3ebfb45a069cb8b6f6fa5019902526d2f589874afa7417e77d1dc42ffae4f83159db13200a86184254dfa608ea9d2b7fc0b654e71c23c8a0f0e3154e6742ea35be5b88e555dc731c06096de8b504a40c284b2ba51982a70d8a734b00595306fd1446faef0e26310db3808bff18e0fb42d74ff3cd19191df5f4d44c8ef89db25304a553885eedb9dd034dea963cbb97e972ca96a74371931fd60e02406baa57fd367f7af66db77554a07770f4491ce0c9a4c5fb7bc0116f54d62a535ddb025ec451dc5781620fcc392f060763668c3ea912460a91b8811a5c9f2f292f6f2b2d70fec5d273667a26565b039629bb9219526758ab30524afdffd7256bfc50af2ec9e440d312a082eb71c975058f71b6d98d4900c6a2b6f37f052714010da516c896ac5842]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 3c144f7bf339e899cf7f5697532041a7f68db6a71dec6b42f4a44a83b01e9ef4

tcltest::test Hash_SHAKE256-3.71 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex e69ab474f65fcb419f749ae9a994c11e4b26daa19512ffb50bd48dd593cf28a291e3001f50415220a47e3100cde786939f15565be0c143fff2d956f8b1d2fb8e9f414d033fa5940ebe870c8bd8c6e970fa2c9703a444464a1270a6c31b36ef5659db25888a339af136b7b4f093d8f09da59327ffa9461180b4c2079d98a10de207da0f16fb926bb35435b099c3c6a502e8738eb9b76daa8720f600eeefbc5c1af1659415586b0f3a602a88ec333710880af4529796611b499e351a1fe92ee4e75ea53aed6a658f70a2bdc553aad43815553dfd030dcb6cac76a7db964e9fad2f98c18c06f929f23b6217ee35ef4525920f771764e653a39aef73cdbce6b9c0dce5e20fc9cd5e4085e75f8bf9cb31dfe881c92622e7a0cafa52c278f9782124d48e304d9cadad82357abe250906406ffdf35cb4a5d95be8b3e7bb63b6ce82e101dad2cde862bebf33635c43cc681bdcbbad574854832b06aff6871659ae82004913f11716b538ff67ea606daab96a2e09f6e36b99afb92bd5c74d194ce1c988967fb4b48c6bc44ab957f32b0bc0d46dce1828a3db23ad5f0da236f5f52f0081cf68442bb44f09a911f13c06574602a2f4594d7b83a8aeaa3fce6a31be5fcff3dc14c804f528b02357016485f6139cd562027b78f7066415539410550e3bdde7a5cc69c8b6bd60c173cf923151ef490c005ad924a00578a7323c50e94c89d36411d74ffe61d7c28a4da3ef90cea2b151b6ab9006e66d9269c20e5376e21258730a7fa12e5d3e7d86cdc5a32cd6f37dab6c3bc7a632055961ec514184379e151b780a88e012ba3abddc7cd58dd2ab55230a54a78dea967699994f4299b3f5b26441c12b9de813a1386012ad392892e0bf783c584278e89019af4e7c3fbeded6564eecb3ec471059fe42cd54ba4270c7899e3b014d42c350e718971afdc02229fa87d34756977b0b176bf6f298860db189659bca37b2ef5e0dba72425b21895557d4bd1062401a5e8cc2d4ae595e3147c6b3a2dc872e3361937f261de249dbff751ef43598aab6fb642eb1b18731a33148729a5fc52059027f4dfdd219a1e0d15d4bbedf803d1689a799d323a9662c161788c97a7aef27e8db0e3d89898f607316456436a36204b15dea832b4867949f3cdf78562d0366bbafa92f6cb87c228da8f22d61887f461b8f0909f1eb9ba373be5dee1b66c4dd2501061ba030d1efc61c3c6389b7fea56e45ddad9e1a6a203ba5ec75f0ad9a56ccdb0d495079f48fc6790a4cd5b945e9538550b75a5e3cd59ef97353fd8bed975844a600a2194fca36c743326e15beda7159496e4c3d798845c3d9d16b87256a7245b98abe9a4868be0fd15b7b53cf3f71c8b11c9d418902d70b0837622aaa95c2e42e2dcd84493005589b1025fce2e2fada6e0774f2d50bfdd7e7cd09fae4e0ef2bed32f75db9ebb4aa899894975e89b5986977fad7c36b5f315eda89813c15a222dee163af0061720d833defacabfd49098ab65778bce9a42055a80a4718fa82d0ea813a01865ae88a71455fc331065f36ba0bb25d294e74adb47db3d3e159383df75ca3dcb29ebe283bf90b65576b9f25dfbd330f706279de63a2acad00f86b71eeb8c7c7eef49bf0caa11c1987f6b0e0e2150415fbed58bd4b5f1e5ddb9fc475b8dece4aa22627e80485b968296d3b6fac5b4af730b7bc5252fb316bdc18ea503b16dfed34fa0b1ad2ec0bd9a399e7d824d7303e79874ba461c00c606a2a870a61a722390d39ef8e1d2039f45e425d2531d0db713d27adbb61f4d8c4ec9c40ac11dbc0b595ab7a4bcb676c41c230455ebd907618e35d8b9f38e0bc1dcc37bf3c33f8e1ea34175559c50acc49382a4689af5d27bbd5f28d59d0cce1f571c3acc5ae47ac5e534628c0f450809326fa08b0ef8016e37aae5aef0f006ed34308ae4c6c104a9b58019a883f83b1a7f56634da64416d173a589b6cdfc38c40aacd6edb549be329ad0e53ba8de9860e0e377210f8e751e07dbaf7d5275f63c30edc94794e2f9e8eb835fc5ec8cc284fd734695992bcecc5ab9a1734cf1a1ae4d7fbc72f4215a354e3403d7ad772bef2ba27c2bd1a06664e2cc1a290be3dda2b6df3af0418961b0295f5bd18a22471801ed62444790ee70369f741f2de0fca21398bf500b8f82e21351e253f112969806b0b38f7951c966dc8039c6116da134da18d412b0b8303382d811cf80ccbcd7a088ca6dd57779b13b2af5ae54ee4dc370ebf3a8ef781c3cfe4e74b4a7b50c5f65f2115fea7691f7d90c124866e774e68e9eb89306538956fc217593d46017b7dd7942d636e384a34c802a14d5fd9916798d7d6193ef1a29e2fdbefd955261496d8ac9713922d43bfc43a7a410752ccbc854cc85268f411e793f9b5279007bbcaca30fb16fd9033a6ea31566b4f2c27f0161107e2cd890bcf563a522ee0eb96a016e9007595a94172a4aeded11fadcb8ab5f03cd154f8b8e0e0666ff62b1ccda0229f4f3744bf96aa597bba7d601fe012c9af0f28e4883fa19a45b3885be0895257199064f11c59d6705e9177f8c88d11ba1727ee6783c99aea9ec7eb5680f23f1d216a058406b37f53200bc5d1f1fb0eeff02d2bc42f7d54393b522706432feedd7d8521e4c6cc2c6989d171d2e15291d202c8e7e3d58456f0e2fd45517369e7fdf68ac0fba4cb651a608b83e2e2b922ca14a12bacbc0528755c704c2156c7b3e75421eab0e7d8b2ce6fe101eb3a584a3ff05ffe072e2953327152445d3672d9015ff1a8ebd91d9ced7c79f5d4325890995cab69dc71185e8de84c36ed5991e1b5dfa30194c0bfaadf50fe668512e17d41212d7313cef9d1f08b0529b9084d546a9bdefe94e5e9650db3165de5221a989d078c24948df435c2202625a88aceb9875c4ba6d190c153dd6c69e1deaa2c6916d5718447f633116b705632a4293b9876ea920134096ffeb845a0fa57f13f781555839c1451dbed53433e59952bbc7a9e0d5a17a5971cee070463b03940794e004d6b73e4e51751e26185a161d97be5678d4bf10d83f0a93072590c6adf05724086d0119dfb0dc68091d413f17b9d6439310e96521612b99d572b15d316096c3ec85b7f29dbe5d3959cd3b52d594d7c7cc24b0e5e95aba6b47b81d45c2daec561dab4c46ecdc801894b2991fdbab1b79809a962174be2f6dfa5014fee6b1b04108682e85619ded7c4647faf4ae8f19cf6cbd199677fe033859f56906f1979b1b5926df4c8064eddaeaf7c15fa2936b3fcd36bbb3578cce40d2f269fc97fef54b7c71fefabdd419baff6c9cdf7c6a88513e81ed1687fcf92e11e1a82e2e5a6767eed3de1e9e7de9a30ff0ddf27076e99a3d192e1eadc11c46833d943a493c59e72cc72d369694e619793f1517433b177155770f6a2d7b9020a380ceaf5d07555fb2b63cb13aeb8784e7a1d2dc59498a8cf42601578b8f0d52ff35a7dbfe6de2281d4bbd4cffd4568bb7c387b01704cb33b5a094854c6ddc33f2e6c06e91b278d6c8d20f3859d1cb84861ea411210f420c06614961e4aa956a2afe98c5bb8791e241f3b321dd767f05cf0dd89dfbcb978c5302808be8c7b16c13f7a18fd04fb5e1152b3987ff34b995ef2b65a50bbc342b47eeea41dd47c8a02a5c7b1b749d6d49bed302d9439f23ab83020bd4d573906f4190e74216ad33aceab775f71cd31092bba5cfa42f0845bd16fc1b8bed6434dedc92f80b395aaae8e17322a13da3583277fdc0672622884117a41568b810b9d0755f9cebc9f266fa8b2a21b85b609ccf9055b5a0dd5073ee018499c9da0b681aa87166922ce710486446d39afa9d76c07147ffcf9924910a6108194da7b6f7e3e252b56cf6bb3f58e953b8d79fdc4e9bb74f0f620e11583cb2b90452b595c1e2bf8e39ea9bd13cb2a6cb51dccf8facd7cec57506809931eb7311fb77884a5e8d9c8e34a9a0eba0dc19282f38ee4a19fb1455c10bb54ed69d3ead5f3aa427364b15dd66289a4d043bad04b17a907e0e8c447a640000848ec851d5b00a7dcee1b197e62ec5dc97cf57fecb88f03aae02f1cbadee71f6ecf30369458e6599a3d947af52ff200c2e6ac77ae70658614c9fc2166ab0effcea7bc4f1575aea7c389573d88e67b59da37ef0ae01ca1198fc2d83b13b6bc8a70fb1836695a5f78a1f9edc8002f9050589747a0486349a361f349d288a7f9a79bf1cd5558ae01b67ab6dd8524b138cd832d3ba1b0ee670ed385d94e8e25cd3e99b16213a9199d4897e7afdabe157bb8a5225375de6502412da01017edd84138b0645fd72645391640b5ec31940261f9049d17859a6e2324b76b75956d695c7b29324d0b95d7e008bc481bf17021f379e8c71037aeb4d19fb90f9031d58027f04c42b216bf7a970655c7c482181a381e9bc8c5f4e0dd149a7ab4e951efc4a87f60bd19606cd468f8515a704c549438d164c7be25fa92f4fd4380095f81dee911afca0751638d5ac6f92ba5b7ee38fc7b8aec8430c27a7ab05c9e77c15475f28c7f9206516e4e7558955fee2bacad8b0256619e7f013ead9b0d34bbe13032c9da193d9dc853bfc2966d21d010589bee50104b94787e8596a79e6b5e25ddbd78e1c5f2551edb874869c897d5ceb8ac2b4b00d5ef8503f83bba566ae7f722bd078bcad9b4bbce4e10b7f0e984cd95864cdd6d24360d563fa6bd7e5adebec8db7cbe721b4407f4be206a2b406575b6d158eda163f1784001df995e62cbe198bee16403e08d6b157d8268c2c4012fe5365862e2b8a92d89e6ec343eab37ca570e3d64c64f164df8333e9bfd9cdf61e85c5326794be496f998d778665caae0d07599a60391671666895ae923f1887588ed5120ae452d1a58bca84c1d9eaa8bca99fc1202cd082f2726e03c7eea82d18d8e5b38c8ce09216dfd6597ad99c1330c226e900a2c82fe03b4d77b54b057dfbfe97756110d0213010018435c7476405fb9f80864d65bedc2d8488eee6a8e05e6a6b062cf2b9f59dc70c8377358511a8b06a06259f21e632b3c3a5c9441b0adc96d0b444b506859c6f37e5b396cdb2a58b070862fa950c80788b5cf8d5d443e31e492e5cda2e67c87314197f8d99bd68e60705c2e227b831e64c2ce23e5d220e6b64c2b9c4ca02ae6d419d3f6c61a87f4bda7cda08626fe387667429c01e3bab08941ff02741fccad810ef77d5cdea653701dbfcbfcdaa01d69ae1141dbfe7657067a4a4543e9c8a2e229ebd3c271997320da1bf9ad1ed194e39f245a98abbba2d4fef2aee088888e9f719740215bca1c76e7ca70c07af9678c41632f6372f25a9bd5e1857384723860efe40ea1229f16194bb3785e76805c0e9cb60762dc81470508fd122663f06acca9b88369508228b30ebd5baf9bcf3c0eb8062cbd70d131b89e309c1faf69ea8ba9fde9a26cda1ce939d25fda704cce379e39e49db64ae05c9f606d86ef458146f7998673ff0fb865d2d9ce087e60dc2e5539782a37541c9a1477cb84acebf7a59976a3059089c5cfe4b9ee604b732c9ee5ec308b7a58ac1a045cff416dc5144f997a8780a7af0ace745c080b61ee882d573c53e908bc598377f751e4ba3aa0edfe8f7c0bcdeb510b8ca963304837b683b2102b6b67eaeb7d753008951bb26226d19cc8ce88a4602e338849f886b87e49fe4ffe3a21482ab207ef6e7e199523a31988b4f2634300de72e1008ba5d8aa2743e3157dbe40ddc7341cc9c43b4cab0bde3d889fe32ef9c3509cd1102dfe00c48ab3b85dc439ce67059f62920a3dc20729a28cfc92ce1386d5a204afa4944ac9daa72e02bd9bc3388060810e0dd1303f019f0832f78b16cf09d9e19294014edd3ca7c19330cd85e2af486e60cc70bc5a6e1c43689acec945f52ab0de84add5a9b79bb738a639dc0e9a3d70b1cf833001780186c704fdf591a07db8befd00a6d5536b591ba6468f644828d0299f7052db28361977bc82625b12bb425886628b081800ef61b85c688bc1f2d7efc3a1eb9185a4449f4ac3d84a54ca96d4a73b4aea0f40c13564e32d2c0d81ca2cc37cc2ca97314f68372a1f066d94fc5be8f3ac243f1416bd3343a7ee35bff407286ba12f67c681f90a1dfe386500bc15d2f2795eb1643821ace59e7a40939ca978d54e67fc4c237b4b063f8845f51d29eca0793f6b196d8a582fda7736e409393e22921b5fa97d15834ca89d145d68bfbe6673707719fe20bd8a228e1f9c84e0ffb935f396c7d7f039570220da1fe601d1aa3199dd4e330a655f3f6704a255c64504ff96ab8c7933f58f14b89f23dc15acd57961a39f5371d814faa9ecdec412976ab8ada5e2aa073f5ca80e6c519523d8501470d3f3a87c9c1319fce03819ed7e5327df8db0b494a02684c948915854db82ca6f743478543bc2640ae7989b7e812715d56adedd019f5571923ccb6ccf3fd262068f490c203d8ba57809e693ee284f4a3744536e77c55137114fe71abd8baaa6dc2b1aac0928d5a2f14e0a4964fb318eac24f9ae1d98829eed89cdaa4648715c9a508f9f378607241bbfec05098336a9dc11b7e71ca2516ecff2656491fd8e4de706902fd1de8bf39e63750f0447c6627013755f9b6b246e5e93988fc7326b416c5605a2ffb9c8d723438bae7ecf4a8210321b60c379646743734c750f706f00d147d641eb9e26985265172c9fa428d263779230bb567a22259a6a5c923d0251bde2eb54ba150dfdd2d302cf8e4dca1712e9c017ac8acc64ad11db8d78248cfdd82e2c2397a6e5d04c9532e07452961cc4908e5fbe9bc4f883df8550e8aa75cdcb3382f5a8da16d767b191a6783cf6a82275e44e1813c9a54e0c52ed0a5926863ef9d314153808dbcc31066bc3925182d49fab2ee37a4232b6a129ab07b805f3d88909c6074924a3221c78757cdc0f738116c9454656996865a5f1d3074f7bdb42ea0a54a693d0f9127bd10ecca39743d1e328dc6a31350f002094ad31a7f1052424c00619a075a34455f87cdb6d53ba6e0dae3a77927eef321bf981ae47cd3a2440112389f87c6a5fb2d507d0c5aa9ffd9c45a99402dccfa09c0897a6b77842ed45e7f51d214b160c9b50f9d43004bc2999d46fe908b778f5aea93640805be5253b29c2fea54c6ff21651980e38c9d7970b43d59f2c77b3d756c4a8a429ddeb752abfd3530ce63cba2ec02ea76462b9f2fa7a23def68446ef9e4133fb3a651b841b907045dc80470be88501c63c352ae06f60a1cdef47f9e48d08206d3c5d3efb1586e0fc9f84568e4e88599449abf20970df97959e26965e2b02b721b62c1c8121886d9fdc5932ea67b28039122dd81708de4c5d8b8ae30781153f40303a7dbf467f5d561c67a3c83be9bddc2021a5af3c46094e3fdcaa84962a02f132ef295c8c51f94be61671d0d31657a5f9f0217b16fd16904182b180732a465d45b3e701fbe789a3c2ce63a9362297bd270314239decbb4a19e6c1a11efb54abf0ee81569c29558938f742fc6cf3c54c32c1464fd9fb40a5506ea18fa1877404bc08bd0276ffa423d1f9d6707e732979a0917fa6d313ecc86d841bf304b4ed90306964ae9152c099143ce7ae73880a6dfbdd86d0921a08dbf88ff5754d6c0976d4793e01f608ef148a293d5d531cb250ca0c24761efadc087af7f8bc86960edf30a112a4ac0b7abcb9269f2627166749968621408099b0757a23ec71b61a45f2cd47aa3ebb41a9b82b9cd7b1f65e7280e6b245d5bfe1cc4a807d993be6e0f6d832d5cc782c94c33168f4aba5c8dc1b1e42fa57dee3b877b0146cc6c31dcf69b8e7b141fa06eb124ef694e4aba578a94b32c52102f508fbcfbf583db163d1e5bb7545d06b512ddc385fe64a6a961a662e3f7c69eafcb89ece08a9c4acc0cdb40963f7437416446a162b50a48ba2aa98f0f085f83d00b0a9d578c8245c3dac1cc9393161bc5c170411e03cbcb5d21088b8ce4996a40ad8640e951b256ae1546624805af1ec2b8ef151081158912d347eaf60300ac72018169fea0b8e7eb5aed941bfd9bcab8b917bfd2a3741c6bbfec1fd2ea31e4d4d5808b0fc01293fbfa2bf497e188aa28508e83dcf163ffd84579bc9c00898df9680836a5563bc5609195e63457e227820db813b7e1619de9125523b9fc841240578cdf47c9a106a9bf900b89d734ed665f38e1cbf9f9910e9522f7d524ce1c5a1282e77f90fed247b2ceb6f0d5fd4645a36570b1a19853c94c47ab461fb40697278f01b55291a2cb39867b11eab7dc9098d232e18eca6099b657b0b553c25b981515a07174f61294b27bea656bd11ae7ae03cad4080c420051b7aa8b4795a5cd599b364c7eb88c449c0367540fe58bab418e8b11b3da728dad0beb30919a5fb763a4459ed6458a4b74a194761d61a96bf1b70622f8c16ca226b9055d984cf3e6d1a550f122299719cafad4343ae1ee9a3d31ce707d3daaee6d438b5ae21a0ccc1232daebd8d13d501d63b926dec2d5c68273369287bbb7b2ef3fefd0f5adf4e7a3b165d770d8d76eda70a5b67fa0f9717feff0f1ced81da00b029528596566ba14c5644c70ad1fc680a64c7ba3e8c41b842c6026a90f47266f303de973ecbcc3d3d368c35eca5107be78ffeed226b0251dad1699acbdcec67a4d2c9cdb8071956f6fe5d491bd25a2c26d427880c7684ecae686d340800ef0babdf3baf6dd2f9f55ff6de8cff208185af7b6a1366736c90a6d236c1ae29245bf0725bc6c5f314206066388500562e8e6accf017972b6546aa59ebc9251f325e5bd35199293413e2e19592bd873e084e400fe11c07661515a243b4d2d4aac31dd54946b0ff5b9e40cacc15bafa9eb8cd178b65a81eec240576d9ba6625927c9e441d6294b0315c440353e906c33fe513d989a24544843b1e0e63250c7f9e07eb9298cccca57ef6f57472352948e938296c51c37ae1f8026952291d4d4a980c0ca5ffade0450a135b067121a9f3635816ba2beecf5d0e20ed2b72c9afef463207679d2c59f79c5c7f9f97d7102b77efe2a95f4ccd208f3eb27f8851bcd47022e6beb972be25fe7968282d7ce557eba296233404fb924203c138b1defc62e084b1949aa69736f6111e8a7b3bb1e1881b380ff33ee21cf118213c3698f6015dff6ed089f16d924dccaaabc93afb301602d354e52408246224da755fa6321aae3b275ace7bc6a1cb5413755fa14bac5dfe6cdc4fdbf7145ed0f5c9733038139ce1e31ab16b2dca374e61cf849929bd24b80d8e7c8e3752adc47922bc609156ef99abf87ae927785a659da0824a1ecb35d8bd52b3634e4817a76e67805cc4496f0a86dc701f3e10fd3fced29fdbb13e560585103b82c65c6421dd80084c5956e3dd7caedc33f9fbe684fc4c24746b7e50e76bb05d1427f85bdccd549c59d8e415b99556064de0a1dedd2ff6593fd3f3eb277a1b6141f783c67d46cd83abca5acb47dabc36967c6aacf270b885617106ee6db7378f30c0656baf50d20769b722ce2f52c8b43554bf1a6ac67af105cd1d23602ced2e0a09051218f44c6ebb25a3e6180563c753f106eeed3a24e65170a250a9e02688f65bcd8560392101ca9e45daaafc73b918d9a9f125d39eaa6de1fb3ef0dbc8e31d3d248b30283a08bea970748e3ee1d0ab960eebb799d08582a892b5dc26bc88a73772eb30c77fcbbfcf8c7a6cd3965535b09fa44e94a3c1b84ecd7d15c8ebbfbbd1206e0720d891f39601b5ebc4798fddadc2e390cdfda5365a165d44c93cd0819494dc5d3b2ea4858938edb41871c8cc17e172254bc8782554d41e11329602220737fddc1e674a9b2d97ea6fd7684629756317b616ea83acc46e88230ae39ec6b371982ad36dcc5e0c8773c30a45531d50b09beb374d0ef4334e6323590aec941eab77ef622672f5ad715258b8f035d02f30c56bb5d7602529db77b827f334b5d24b60d4d17c838898bb4dd7e95034699a4b5fdf9872c3662c7d8c8b7d86be5157bb1c802a56494156cf2de8a54f9a1119692feee9057ddfc69c694362abd18f3361739d759b0a466e13b932f5d4adef35f2ff41af77d7b97ea0d789df4ab797f0a72cd0b8350fbf68f1bb5ee0c8b72c754e957ff2b2191cdcf29e05fb4bb69215f411c3fd0ba0d5cdd0f9136f11feef62e5b951ba9d8b2f69f8865ebe9617a82bafe81e4b0504af23173dfaa998cb61821f355f1020751bac1b573d30132200b9427a88ab0b8577f5304dbb964565a96065d050fb231e072ec3d8495aab1ec347148faa23056952c882f1fd3e0116f1811d51cd848ecf1c7559d22b434455185e8def2cbedbf96a2675f368aab2245e6fb1817db249d0820b430d8af3c70d28851561b581767de796711aa5e141d81ab18728098d3d696078eb510f731d8f1a4414aeed76bc3df1a1de2d5ceb977a4dcf090e181d50e2de42b76662ca2c231723f29e7ea49680aecd24f534d19a521e519dfa536b6b8226f311132a00de1047ab17f90d13ec9049a5ab3ad69a34a7b6c0adb5617e77925d1260210f1e1aa0d163ec8745cca7b3e8aedcc3ea4e4cc33da4a008ec5e5a5aae280c59bb2bc719ded3d710cbd6ad32b4721d5a17f6caecda83deb89914fe223fbc7d80d32fcfc49584415b4a39e855d478d7c50598956bb5e7cf9012a7493238561a61023319e91ffd933168fe3f63704873cd5d3f9788f757db57ff1f25d1c27f4dc3ee3d8dd0a3c6335acd2c99a6b26b573ac7f0b78ac85c6ad40785794905bd7e6d3f5813c04a688b9e22cbe064c068edd4eab5ddbb4f7de4d0d3e02de0289b13289e8993033c6a01c50fe4fbe6c2c79c636f95f161b542b1130b3828df539e75bcb3daf5dfa054ff963b7dd274e111cbaefd99dcc5213339655695548eb0500cf12552219d9eafecda4fa14d5544cde47e3dc7842fbcd9e48e5c0098346438408f9cf9008460023059f25554d315834e9bd729d2e6aebb1b55c680dc1a9ade7a5dc2d878de0bd533dbcda3cf3479bb71cd72c7ae341e6144843c1e088978cb20243cf672f1cab15c288892a6c19afeb5dcb6a7015f3454c9e165e105c726869cacb55cd707c31c1507ca2ac1c2a0d3828f4dd3b1b01a1b1035ead1b91ccd9754bdd3108d661ea0c6423b74087fb3c340afdc53a86ff53e834772f60dd29587b21f3e1c7e5604c5d59f8477643ff95557040e2dcce4f04688e1a659e930a5dd1c999f8790219d12abe74d3cbb4c9d112f56886b075730ba89c92e01367d2621fcf59e5aad0e100fb0e13dc9f7ecc57f306df515400fe022edc8b1f6da023fdcb9f9e29cbc6486444c57fd28fe689a28c311fb315f5526071ca6d841bf071995bb6e1455a56c263ae80f3561ba0843934e0942c94b712aef7e2b4ae9cbd3dbd46a1bdb8e506e1978ead38c7a1113e8483b1e73e4eeab15657b1faff6e8b0ae212ecae04ea5b18686bc69aa7dedd3b3d0f018368b2f4a0fee7b49b171fde4ba056f41cb9d8c7f96edc4993871358ecab2d7bf32c5f6983f14e672f661f2b8260795494383ed1e70346c2dde5fd18d557656da109a2bdbce5e246226ceaf741bb008aaf009b0d73ee31beb434ea8187da5d7337712b75ce4549de1eac01b60c086302c7b36bdf22583389d1046a47669c6c19010368063a77fb9b7ea4020c43e1376978c13fcb74f9b2d09ec50acf143617cba830d6f384266e1abcd55a5e7bcdf40b2caa6556ee4b361f88072a9cf30fe7079779f6c22db927b873b0893126370f746def9b15e0b533c3174b681595a26059495f5606a9b89f111de60d08d5b50041b6f14f6d0ed04267e6f241dd7e960a3d584163159a9d5a9125b6545a0cb07cdf926fd0e0cb24d87a519c365910535b202ec0ac9352efd0d515d1fda93db1bbca8abbedf5a81b7c76f1b9b41ced42c9ae477da0e46518a83988a9778adb51638efa55f530282c94ea41db49ad881cdc343cb8dead63b0375ad8ad405377e80a898bde6514bdf0b850cc61756f532a095e7902b442b13f04a5906de6a7961df76699a5dc07fbd05d26ebfcb5f6e102e79976fbd038e02da6a64a6be90bb84bd092be5cb8ae447409e94afd89b8b42fed51d0f4a114730483d96117b5e450fa1c9a5453996c2a24352443f47f493f098123f1ada559ec4c22bb7f01dbb5e2b141ea163aecc63f9965447171f51d0448599c63576b7dbe6d09c8eeaad9150009d70e5e632140e72c20e65de689988644cd1790a241f45c0fbf8e4a831c761b5c4273b77cd560a354ee6653d2ab6047875212241ee752577caa781d1b445da7211ab69be887aa06bc24611db6e8f8ca989f38782dca1c336c6112d0e3bf303610d6537626a68183ca7952f613b0c671e0fae7274f58c6723759eb007d0b923a73fbb6f0c7c09bacf833b88769a15df018fb9a9bf411c596661b7d1637a7f836f2f16d763c543cd4de1a0e4c392923a77917ef40cc83ae02812c259cb422d6cdf66df39104dff9bdd462c0bef2b6bc1aa9e641d0393cf46910f2911e62eab241f6b7c5bba1c266aa83c47c4a36d89bcc23dd3ea4ba9c1d1c8e052be5d49e1f358c657050a3b9e83d64a59d88761d273e6f733258d12facaf60da72bd798b723b200d601a7b1512e8ef9ca10420e2f2d3f53ed9470d76079421e8e1ffd2516fb54a063163b8625b3f8cf02327d7d8834f5d967009dffdd25d59c716177f7e4c2672e650b6bc204593d566906dfb4c6ce2f110a30bb925817d60fb7baec160bc1123344a9e16ed5698516675611bdcf4415843eee7399b8986efdc8f2048b71407e3667b84592802bf79665e8baa08dded1b96c006d1ae7eec5f00cd1685d0086d2bf38003e34ece7bc5ec9858363e7e38838fa2f5020cc61026feb1fc0949edd37561e48755e03e5fbf6fdf51410c49d658a5243c4b04f3b4e03cda3b339358bd584815a9217ac6cdde7670014ae0e528d36da0473d458c2d0321a26ea52acd9d3d0c9fc3c68cfc68ab7716e2c46ac4b2bc4fc3a0293cf40b1873a700deaeb0f5ac35ff71b57553929f1820603df86d065bd1fac1cf69cfb18879549c306da7591e3a912d8ef240ee31a01914281842863a8aa236703a83c2ebc9379b4b06153a1bb10171b35258ddfbc58d890348e9d4e0d07678bc4d94a1aad9dc789ef68f0b1d0fdcc8b3340fd465eeea096018c754e749d403141186f05e219fceaccd795eaacd6fbd1f05ea83f892bb4fbef66f98a66d47601814ef117e471e07e4d968a74d6046a957465d4f3c477db680704712b6a14d0a28c6119773a0b3bee7d8d1776d6f0e27ec83fca89973adc85504e255809c517bd6a3b2f4e6c51d5e161a5841835012a34f3d2d22a8adc80f9d22d5c3aca4f13f924c27bc303a9760003c418847a9e0c60fd0833fe26c58f6d958760f9351b8cffc0e044ff867de5f36ad31cdf2d314eaaefc7372cf25ed188a24677bcd28f4a76497cd42a7d34eb619ebbd854d621b9b9d0f924dd770d0df30050eaab2a141407c47d716b703650f3a8629408fed61536a88543383b3b0d55b78f01f0c413b45a3bcd64eae8ebdc508fb298262cb82ac87f53dc66c8519757d0e903b028f2f016b553f5d06dbb56205b922bd4e92fbf185e4b378ea6b574a152483a16df1b91e33bf76b45850e880d14e9973abca39ecd4c559bd95bd16cda4593ec4770f45f6bd4a11070ba4c38bdc3a122822d7c8d905259526f710c46aab1b2626e63e7215388392a7a93dd2fd870a115d1c4225509773fa27770cdccbb9f8ce4b1415aa1465fa7028a9829350721d1b8520afdbedfc3efd419de7ec4b2160bb93891b7a5ea62d3e0c9529912f2e019522a86758fbb3e512f7f4586f73a1f162b2cdb65f6e798a60b5f48938d40b4612d84c1f39244f14efdce2c4d2df9c19580b5a8cc5ce60a06cd7302806f99a6918f8641dd8d23e3cc84311c3b2d97047101fa7e549e8fbedc6c2d09c980a7bc91c158909d49ff1cb40ece9cb8c1bdf090f624e8658689be]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 9081c7939dec7edcaee2c2c7e88b2a3fb171a604739880c0f5c96e4cf49243e8

tcltest::test Hash_SHAKE256-3.72 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex d09066932f606f4fb3eacd7f89793355297006f92ed2c92b6508d92924df5ad3ddd1710df285b365cb99def6279ec78baf649408d1782b06cbecebbe06569928a61b9d645fee6e588a934b9b78e92c910627f8d87166f8e36c608ce570771cf154f9525f1da2867117627a37256148af55419831b7a3160a70ec24680a49cb760ef0f8c7d5a9e5f89b8dd591d50e042dc438dedb4b376fc3fe181b0d7bd48ffefd8af7642e0c71353d9dc27331f949527d96319dd42aea563e6dd99d6c204ed2484eb7fed1d2146f2619aba3e029fd68a5e2f840fb846e0a5972c6df8436f23b19c4a15d6503b5f07d89f7ea8ba609b567a59d8d674ee52977b04a9d6c1d617f95751b4893a83cfe6b760e10da795682e9668749c09036f9bfadce9dcbdd85e6e6e88e8903c790e2186758dd74a9cb1653ad1e3fb05049c35af3b8a84a7f44ba34a563e65c6b9be4abe43d19023e4fbbce03ca36dd9806ce700a728691098841a63500284799444b4d75258b2b41ccb782eef3f5ef6f5564287862ff478638c5651fcf176b5b736125a378fc98b9295396f801458fde1ecbaac7f2db14fb3c8c98eb367a71b8106c5cf59e34f1ae4ed732a95cee65eb494c1f7e89e1a2727cde68229f1a00b904b519f4fffbdd29238b80886cb818a1be2faf268eda96f2df05fd4b71c0c16435848526031904308fb6a51d9a6b510565bc81466b8f9b844f487eee14325bc38c21c81513550fce7da2ccf04cceb721263bbe6687c5572fb4ee1494f03977def1d309499578a608d2951b8aebaaf3fceaf38d0f4a4772fbf440e6c46d9cbdbb4de37049f34a70e877d8ba72e0c7ac9e972d17c71cdc95f0f8861d06f325d4648699269d9393167554b3d23092ed8b1017318319654b6817a808e0e2ea9a65e1863d53cddf1b3fb7516d8b4d68e437595047fa8a8d5d9277ec0d58e1bac4173833171e613daa94b757500c50cc7359812cb7a4a4fcdabc18addfac8acb6b9373776fb0e21707bd7c4ca27ec12564999192c8a8ee1b8a8d03d1c405658557819a398c31d8d4fb610e1aac0829da7d9e9069c32ff05034ae3f42058bfb514f87b361b7c8c9dc4e2876a7b6d30e558711869bf0603304a2c6d4e6e965d3951c50c8d6389d3f97c8bcbbdd0807fbfd49997b0f97643ea09a7ecba7babc76ba8682e08257d9c16d30c2e5a2e9cb753a8ddf78ad0062998ae57e2b6cbeb76a2955c6044c5ca4d8c650e5fde0a3470674198b845d7383cd2c4b6dfc1c3f7f394951c33b1c8e250a0aeecb0a7e7ca43513b644a80737ef61ed93f347a1833b6a8142228dda3685e2a1d31c1464bd0a8a7f2cb2eb9395cddd3487b913e2d314863bef8a026e9cebe5f3c781247aada08e21437e55e9d545ca6bed6768c7763214de21a4a3c108809d6892a140a8968fc85fc350eef23f81aff98ea54e38b6bc9cd2a01877b9c26c9169fb2673d6befec1a273cfbf941aa614463219ce1dd9dba77e348d863f11d6495ccbb5c2ec6e16ff531ca4cfb8b0df81baa06eef5e28b6bc4ca5abd93c3fe64eabcaf937d2eeff0cd88677264747527fbda24abae4eb7663a3ba1b779692c627bcc097d97086e0709b79efcd27282795b7fe5635956a4224eb3c856837539b5cf9753ab0ae7ee1b102bdb4cb429b874c107d396a5aec43888df490b505c99076c9b188c5751d2c5977196f287ee79a2b30e79b611cbba016efa7e565ea3ecafc933b291fabade6f06157c8edc55687ba7f042621c11d82577a202c80cdf87476c1dcc6c63a743afc283d6621fe2e7781669c80b2325b11d196260c0f9540b46cba5c07c308bb4e073394f2cc11b891094b76511c58bc740eac802d192c5eb267e683931dffc94a98ec2313f6e53cfed9975b42671a8ad49622f738a6799a98efad1813dc06e85738bab472a86402e579b313fa9c5f0b58ef6253d5bf643c8b8a77e52e09045e9d6d050db6ea75516f72056622c3118929a3d25cab6ad58bb5c2acb08dabe37443c236f788c20073c34bf71c62e2174a6e3adcd963b1b4d03e1eb442d7ca8a7271bcb33a903aeeae0b8cf0fc61035997503ae794a49ce9544e26f763b56ee1a051e5e59e7559254b6cbe58cfc82dbfb7f72d5a5317325d5c0b63dedacfa0d04508c434ebe0278e911068965d3e6931f48a9a9fdf647bf633a05ccf71cc673fabc1e109e878ad11ca1f12146e6cbe9794320a1d00327f9d20339933ee55cc1618a2c5ca5ee6f2973cc04439cafa34d9e016043c7d29473b6aeda3731a11d63dd5d3f7e116d1fe06311c876d388fd3df205f106420f2dab65af501f5bda98d9c2a7dffb4d5e2da48ef5b621882d3a4919c34b6fdaf3540f838743b239fc4f91c5ec866ad66c18d43bea45ea26e70aed89bbe7f6ff39982e74c91da64870b23a3bbdbb33290151fe1e81f0174c50bf99a6724f223b4c7a76ddd75651f3f25121a87df6ead1a869908b4f6d6f44e4f8ec1468f987fba67b771344764be8dbcce6a0bfb2085cdbe02a2694e628bd3e174338127f7eccc20bbda9a3060a83a7560798f5850227162629650522fa11a6cb3da5f1399d3b49ab9925558e0450efacf315b1d86ecce1dc2ccb127c49fed96549c2a7c069a387ebc80ade66cfdd0f32379b6734a4bab94292cd4f8a9eb12075e632889c4ab2174c98cec028c384a076538ea8225a7d1729f9e00eb67ef5168d916a3635d6c3623ea9e58d6c95e42df9c583d719e68095d2c0a7e2885127461ce9de13159474134269e3b87aad78123d0c0f8693ef619fdd95897d88bbb419944e02b1c3ea3084e8674db40b80bcf7a095862918bb9c9fcad709023015482b943c6c84c96e7551a100981277963f38c5008c5120f1ae3ffb13ab4307044fd68d33902e8e87dee40ce4374647745b702acb86713527f2db1eb9f4a2860f37b4ffd211f19bdcc9b67c80bfe203a1ae184265092bddb5171b76585993257c9c316c86468069c3c2637054a6583484b3ab9c5b88c3832f975bc27d6ea77df2e9f643deb25d80d35555a8de6f2b42b3e8a4a91d99dabdfdd02663778851f7f8ad5e1629e9eb6981ff27568c9eddc6b5d99de92990f3e6a67df5d9f55b251c0452e3641651ac9c662c3339fd99e228e0f2e1ed1e1281b5cfed64a6753b93528c7720be229e3381e66913938004caf1ebb13b2559a32673d09add5955ce1f4417869074bd03f2c299423323e2441aaa3cb0e4126aa734d93f22da5335774b693c1dad3864477cd6d5243c4b62fc33ca3a6e8734dfb34f3e8201e63482bb8a2a4088f179b6bd2427409b797aa081b8da8b469f2d173bc81c3fb48b6ddc2f6e1ffb64e7a902f9ab4c6224854219791c4395d5863bafc5520adeb7247f903759a2934e0a46f77154ae903bea324c46c0adf097e71117d45f82d5866bea4d67ff6abe90d3e402a8d2d6716e12bba77f6862020a4c2ddddd530cbaaeac2e6235a1d0e3c9cf009324884c8c27995eb987561870a90fe26064df00f49c7fbc8d24f36da975761d4768f78926e4d88bf0f32c2992f0bcef4dff562829ec51251cca66a9561043aa8dea9314f8426ad3fc475d2e0f8dcda505014abab0fabaf8af7a7e0c9016c228e52e0d6866bccac72a086b8e3cbcdc94141f4f612054379793c9ac1fde157c28cba7a90c08b072c6189ac9d2a11a443d09adb6940e953192884c634ba688dc2adfec086844c9fd5126830a93e332af20443122cbc21a4369fb5746287fed5c9f607fae15a165b518f265a03a697277be525e1680e17fe79e5b8ec72ec0bf87f71bb70c8ca510445e0a972d4eaa763897b268f45bf31288a0176768d71f7bf8d250369645d65625c0bdbc04393caa5c2cf2f66ea56d9ec10fed65adb9f2bef9b1ac82fdc9aba3d3c1aa38c792867b6cee829ac805b7610b4e1bfdf83fd0d535059f008590ab85d8d14e81d9e31e85f56cefaaa2e576f5d1db41b4eae1406b255e9643d0333c88af80294bcd936b466028a8ca81dd12e9bf37fd1ef836a7fd351d20d15019f508b24eb8eb152c033937923c5ee74511a92e048c90a2b89de7fed1dd2da7cd6ba29bbd7be443256cdb064a18fc35c5f9b098a19ebe7cdf98c7ed1d19ad29b5e6c2c62cf0cbda181ea836a0dd171fd8419ca99f91fce9240f298a4f64f4787c1d05cc3d96063c6c8f2d6346e733e7e47fc9bb6f14d06a2e877950f95d87f67874c808600a27fcab34d6f69cc5c730831ad4589075dd82479823cb9b41dc364364a625349ba59d4ca6316b22f7657c2c99290b945378c40797d564b5e065aa65831c8d0be90390d969d95b7a0a834d5971443efb3c36a2072cfab6c987b8e5474697ba8660d679d9e61b31f26da5068239b28d258eab9e9ebe003c56c64a597135a438149172aab6a183793caf4f5a4f690050b3c92c3c66d1826fde1a9e896bc6ce7047097cc5f832beaba93df69b19759a34167a4cedd7fdfdcbdff329f7af70731d8e27693e27000943d8981f4b68e60ca1de2092356a99decadcfe7126a4c93e7a5a79ac85cb901fdc3b4c3e0db640c4146b4a70a5a73ba1f7458b1888f4478d215c8edb2f4e795ecf51d8d734aa0c4d265e568ca11669e3dbba3764b10661ebace4c569bd381232a7bcbc8f728caf243227e33ada209b10e29b620a1163bed67783bbcc9210f1580fcc65ab2a06afd5d2485eff935e45c59679b95d3c94a4ea0bc9e0985051ad2b320172dedd7094de8140586f7f48005e81c5abf28501ba72e427c2417a729c28e90c528eff82e4aac9903dfef05641681f1f984ead43661dab1ddf5c730c44dd8f4d8320229625c715c89e2299018f5ed8e82ce5f7c24e56ab1c964ddc873db58f359356c922cebfe059e77ecbe250cf49afc84d1716c9aa6ec4959a096bfd4d7364f18765d145f1c3b4b8682b612c15dbe708e86da96e7580764bc59c32fa01d65c2c368afa22093a697f731a1677ef2a1e5d4c7e02a3646ad237551764ca7f227ba1d8ab35f962bef8ab242a7adaa79ec633ddbabb1ee39848c6ccdd89c521e244010238ed229abbe2ca0fdef6bacbb46f3b30c62b376f934aa8a1811a90768055b847d6b8442ddba86a7a9a229ee80589b1ea02eb6384e6682b57948fb2f9a72145fde70fb47878c9fb08fe770d78fc96564e036449b00c21ed637a618337a12728a8fc5c1a272dc7fa4f8e7c6cfb242596e14a3e407d6ef85d69b528a79d18e7dedd8935eb966512f692acab63eaf6b7e24849c1fe49a96bf9bed74d96b668d3d70000258f62b93b6e96eb7c58c4febdc6e774a7b9b125ed50f75368b7003b8bbfc513939c0884b1c0a0bd67d225a6b7b3537d4829207f0ce197abe2aef6eb7fe771161887e46216ab64b5065669892645f0a63bc3240f3b2a046343e5270310ecb89a1ce9a2dbca7d4744d05c1d1099ed6391fb0e38710898e1fc14d00d1cff4de0122927b05c5db4ccff4e69ccc7731800b2fe60ea2ef5cca4e8de1615938b79ac10b5c8996e30e06a46e8f5d52852647cabce6195a37323c1abf81ddd0145fe51085b52ca8bf49e93be3886e2bdb8412bced396e779014cccd7fb6dcfd0df5a938b823cc020093dfdb7a5a351f2053c82beb6673c1a40962aef706c6a9c97fcd7fcb30d16d4ff5d0cd5b8c1cf6fc9b535dddf592001819e6044cfc039cf008392ee764a3b15476a25aafa6897719659a9bec6e32fb974c4018a91dfb9e2b95d58c3346aa96b61e3ec89e31e66b1cb8852c405aba7bc7ab583234f31777223089e3d85e4fe41ef58c5f4fb49a9ab09dfc5a00419448503d16991505bdee7ce03d79fd34f86233047469ebb70dcc7b1be76b55a9272adb0b639775db56cde1aed998cb510fd99e52df2c99c2a7c9253a2ea8661cdbe9101b25727cfe4bdafba045866a3cfa1106e7b3f1825ed0585702ba595c21184c9677467351f502de6fc1698b017d23d214ccda00cd12f043b97c71c65e41461c1627ace21d48e5a0e8162df1b89df0e470083aa1a3676f50f2af3c369502cd213731410707805bea0ca97afeb823cb0ec1a3bd1c2ce4b548aba404f328ef1623a29feb293824cb82838136fc29971b19afa64ab88f112af28b61af43408d87eafe799492d7bc9f31f6a64b31338247cee418c8bff57637183bf0266f0566893df4c523880dd03ebf0d219fe6fc6ab9f205012177859c4280625952be9e0185e62c8d805402e910f46ff91c62afdad850bd6a3c29680ab5f3a9a21a7a34e6e1ab4dd8933edd8e7d98c536a9ef72570cafb15a011cc548f639b8d565e9ee9e075500af448dc748ed72b6e12dd36d6bbdd68cd9589ac5df6f1a36f91d55f5b05dacec197b8be79ec84beb009257ca9d538ef4ef29e99056865ecb17290470a44d77ba1e207e661876eb0b9ebfc3ae75369f91a55c524d35a5cc2036713f88033d8011c61baf6b3e5f1abfc09c5f437ccfd10d02d91d2505332edd5edd4d6553978d9a1a54661f99eca0af701172b13984ec0d0e88923f4c984aaa9755782e1fc267fc21b3eba9b0834482b506462035beb73cd252f9c4953be82deac1060cec26d6e0e32185320b8ecfe1986321b7f6e6fb3f551d99db6586d2115e094026442ba1ee69847de233730a731f104c9e066280c1a0d3bbad46e0cffcfc156ea5ae3992cdbac61be0af9cbae154f50ffeed9c0e68b95aa761bfb1a697cbcdd8b0b3b86f26decda755076faad23ffbb1ff31fa6ddcaa9ca52059622089d31ac570d91001a0de836968c456a1efe7087cc85ce664c67b7ffd129a59057a1ce27f0caba910e4c1cea9426db866e05405b682f6c7bdce32edf65e0cff1d14af0f4cadaeec64998f98ae0a8afcc24c8edba85485053e9bd9cdd92d37bc2ffc9387757b6c3fc46851c8c1e9a48c7ddb9e709a679308b0d67706eea6a2f905ddd034419d6c0bf9f90e462a0742cf5f368baed4e2a737da2615827df2d51c655d6ffcfa3c36b9ccf3cefa318bec2d30055d7c9dee4afc8634ba28ce38588f182477c9e67f53af02ff99cc1e9e2a0eb7ef1cc13fb302be7aa86ee029a1b4b8e6dbf0824f8f4a5766c478a4386785dabd9dd16700585ae67f293992d5557001962ae20f7b93a318bfeb726ac80f84f90ab784552906d7da5d5f24261b7b14d1f2b85658b3b4e759d41b900616bdb0d466e43b7301e40303dcf33685433b288fc02e53443e1a9d846efdd9606a9a8fd199cc00a9d21b65c9c48d789595be35a5c933e2bd66ec4d00553855600cceab596a18dadfe2d28595dcd4f03f582cc37ad5700aab71537f3551750cef43808cd5a270d2fd7b32eccded71a86cd6ad5876ac8dd3f4a876bc8b2a5c07f359d8b8ab097beeebe36321dbbf0ba80255677e0115314581537e8b6aa7944d5594ffb94567e23891628cac251a4bf6eb1e85bc83d904693aba92753a92c6e6fe3d1d1709844cb8d842d51615c6d99c0d792d9a64c0b0460724db0163b199dbd59b595861286275a6c967e6118a5ca252ad88a10c92dae4d1db80b74dcdb633c1f8dc06b41acc77e5416aa483307d0ea004bd58e4172c4c7e25aa1f60adc4f6ac9acea8692331c67bf005d9d27ee3eae1c4f44852174e85f84b81c2051b6c2c7dca56c7ea0b3a6b521f610c663d363efc3657f7bf59e89725942c27a2dd56de1cd09cea9e9a8e6d5015a6c5a7342010d9a20bef94a6a18bef4ad4d6a1bc291470f4c999ed97d6d45f1cfb8cfd2d476a60503bb837c621683db3a05868808ed4637e055d3fccb9a8667a88ead0ee535379870dd812811136f619b93461f12c28dcb577bcfcffe0f24c7876668841edd40c91a9d98b9f19fe04c246f2f2d6ac17c4e348408cf9f2bafb5eed898decbdf301b438430ce7e0c74ef7701b85f9b5a9014e9f71588298065a7414d947b76aba4039e29cfc220f99bcff5f368120f0e77c3ea5d6c6627ae0510114e01f6c9d31b168ce6ec3184d7c36243acb4e1404d81dfd82f73f603f4fc84f15267bd1fd5f3d882540c9914379a4ac2a62549d9a85cdd25d5c2c458f5ca7a43e32c4b0334ccae30e9b75559997eee05684fa825af472045e8ef3d9140dd649b78c63cfe60041bfb206312bf6dffd08e7b8aa8deb2ff5dcaf14fee4736c3e86a9bcbef6bf848b65390965dd0257b76c0487cc84f63e3fa27576b32e5781c5a23c4a3fef65df8e1dca2c773166090553d678c6302227379edb3d7c7e665354e797bf4d818219342e8df8d0f0cafdd0078413015918f4c41706f0c09e48ead49be3a34f73bb3b64e2abf4d8e2d53afece37e0e5c780add0572117e654a64e2b07477caf8eba4b067f4ca9f7ce30c878f11768db41015842a4523a586928884373ecd4d49a2754014e979d967d83af27b74b32499143ff0247c1e27da5759e0227f932265fa95b3f97b55a1bb875f7f26afcc6987defa9f7889896bdcf369b526a971f0da4e96aa7a2ce68f045aea9c05051ad31cead5f0baefcdf80b112841a86ee22f1338f8821b6094d7becd7cd7bb3736e7a4b2428250317442e11b26342c125c33ad242be951c8e93267798690ad98991ddbefd0c2dcd114d2fb8bd3fb164658a504aaa13eb1d86c158ac9887550bbc9fc1eddf130c551282ec6edc2151b6d5009c62708f0bff19607855802e4490341f8ea27346a8e3416ccbfab71009019eac84e43c3ade0a6ef7f038f767bfb21899aba361aceabec6923526f514c18be7167196b51d4a88ae0e271ea639aeb7909582b8504dba30ca7c93b83f35619ed9c7cc42843f38bf002e85ce34acf9e8c69c7aabe832017f75b34b793c7cd2809c46fbae51a891f88ddd72124ac8888ddf35fb43d262a5f4eebec73195f0fa79571b68a3c3613b7b7ca656b0909643ee06e96d47b6e590d75e256da8f19ac2d332cf79e882712090f60e9971ad1d1352613f39803bc4a870ec71a7a5f98012d456e9984737e0277f239fa31d4a65de0318bfc5b60a06d706c129dcf255acd3c6ebf12c868ab7378f2ae0dd7c0e778e4754f17ab0cbb304e304d57355ac26ebef18709d6e22fd3a0a3459ad55a25a09673d5ec03825d4174ddefed697a6f4449806ed52c7a8ba173668937c72ad1639aafa8d0014c070f78d772b6c80ec20c508ddf0b559c3f6b65cef15b399d8b4045ab406a00d458f8eebf6e49dd726b25589c4012deb1cbaffc3f067b893cb3b54bd92520aeb5c39c3ae83b1d166fcb0de61e3a922475a0ddab59412f5282db3101dbdf8a476ac777e20481b70f3142447d9636ffc3326f82f78039dd01fa72520c05c80d876de50a7876aa9e247191578396cdc24782882e6556490b342e0986cef98730db299cd272c14e4902ab18c58c9257700de07b3e794df7405578114dbf19958aaf386f5e4576c52e0638490d1d1b7c8f92c6c931a7d9ed02e2731a1571086b719014dd0c7509a7d3bbc3b29ca984a57782cfe2b6758c62c967a9948c8928719c1a49566b85ec7ed0afb7e5f2c6704ade3a46682b76c8210a518601014c0c6040aa406c0a0ca1b28b3e9f43bdd861051a35d4ba0f002f805c3c82f0224e268035cc849e565ddbdb8a04e46c4c63d94cb211f568efc6250925853ae24e040989b1fd906ddf1dcd62537f21c03cfd4b9a4c4b12f53c1d4b340cc82848030217c56bba0e4b12a128df5e29c1cfee192a663f3dd7df729a04996871b5a1efdcf3cbb99e28c68fac60bb20816f1bfe2c084901869e8831b0d391cf1e6d7042d9001521f6aa60a483f77e31026414ebca67ab39a1e1afe7e64ac5a72ada43caaadf3a4b6ffd9a0fbc6fa116495b5b1558cb155e1c4b8703ceec9d9733668ce5a6e3938c668cd30fda3bcc36b2af4f297ba50fd55236de23cf0b9205a4accc0271afc96b86e2bc5351ee4818dafa719687780345e02de5a66b5a3b791b1781cf8fb6347f2d99b648b7f9bd432ea752cb20d6981642bb6e3a284b0277e3313eab45797d2de71c417e70d0842c2a507355cc2326ccf649b82d8a407f78b9845304577bfbfe3fd4fe531115455a5a6043b4edf047d07763641f05ed2af1fa7b8f892a304976847e3d751d3a69544b6154770ab063d74292e27d2fa36d8a129114983228ee1d71529f3309b2789059ce260aa7061337e442b3c67c05df97be7fb2c003e84259730c943b4b1feb95122128ee4743ce88e91d78995f76f9a14a61ca7f13d0eec10606acfc65c55ad910e4dd90601c0e20ad6d71545e99343d4311cc53e6856bcaa6cb49d4fe651ee2b293d4af85d14ab5cdcd6e960dcf27d234fa48bd0078120cd1e51b835951c03893b88e8a2d062cbea6b7a0bcc19b4cf69c75c038d62ba9de13ce62562b2de74110cd6bceca4cfc81e4b6b8573e800c20e62eb345ec027bd4e8f1eedbc84beca2d63d0ccbf1f852c5f43525f3b90fedd7ae8fa262b6bf0077cdf9e192d55e58c44091d22018bac7e141cd79f0e5bd8a8162130e2dda93e03d4f411b19c6b7b42bdc766c69c2e6b47a79ea14fd38fb3ab48d4366f5ac3393abc951dbbf010a774026353be7651eb0e7f9159767275ba6f79cbb3d58c0108339d8c6a41138991ab7aa58b14793b545b04bda61dd255127b12cc501d5aaad476e09fa14aec21626e8d57b7d08c36cdb79eea314bdd77e65779a0b54eab08c48ceb976adf631f4246a33f7ef896887ea8b5dfa2087a225c8c180f8970696101fc283b6c0760ca58ba24278996817a90b8b165a05c91a09ca156e0748c7bfeb24efd5550cacb6ccd5278d580b134542b6ffa44d3500b37cf1e9add20a8c927000bd4abbd308c4bc89608110952975e7654f844e4ebce301d8c4ecc32cf3b2313ba14075c428caf720f3aa5cf8092e09aef142c7b36c3d3ad71d9765506b93c12e3252fd507b1e2f344775778430d21bfc8b4c63f37d267a858a3a32f572bb8250f6febcf87e42b72bd28f1ada3f06a0b6842d8d9f8e43635c6141a68c979e076c45a05f3cb0ed11703b33915a92303a956242bf081df867d4594a5a9648bfc2a8d4e43e8da151d0c9d82f8595c8e34bf1ac4872dd8ada0a85c8b0a9a3149546cefb36f56bde3577613fbf520c51a45763d88b4380734ccdd946112e2379c2f6274f14fe77a5ec780ee88fa13eaad7df546da79b8165e5144737e85297f6ad734a370ac411b70b44fb590cddad5302565bd219f560b117906834a2b190f9d920b04984d0ca700680ef07b371c8e8c85ed2ac4efb9f0378a4b4c2ecc58f11ba90f20d2fcf127f529e328b000811ba7e5b6162d2e89ccb7cd3a55902f8e2dce64677e847f97a23940f6e399f0b3866b8de709c32770a8798afc26d91d64c99c0a3ca7189fa820b3f570ac9dcf57d7bfc4a989eea1148b6509b847725e81cf6fe5b521f424c9aa4b8f7908246418148ad4242016631d7d63919741c1ba8f462e3bfb7682d6a446e958388196789b47b6037f55a33634875b6bc19a30f93337c155352d287de1ff7596d69e5cd38b772a9ae3b0fde201af35e05ddd26e217a90f7b8ccf50e028dad7927be7dc3d8eadcee077ba8d2f2bffd936948f0b3ee3a402f428e361c81fe1f8944de57f7e4cf08a1f64fab9e55b7f2fb58d3a46d53f31810a30f1c3fd711bbee3771fad5d6f48469dd1f9eacb383620a77165416fd1567503cc82dd47c49012c91f1ecfa49cbdeaa4e73d89aa6b2c9252679963d4441dc428261d196ec149dd8c6e684b197d585e7acd50fc4a9b696e00985d14cb3e8e57c1634ade390f4d05758b878b85ba208a67acbaad7371f69df72b39bc1e67b01616ae91957156a474cc9e03f5affb1e57b5ac0102ed94da067f49b5c393698be96e2d7ba4de405710d9d162f361e758abaaf4af657fae1d90e21a5a92f3e927b913088f7448736dc3e34a2eec6126d87090ad4b3df364c82566c5af8f05928d6c4b68556d7797ee733431ee487861a68cadfe5ef20f60e1ac55733d239309c4ec5f7556f73355e30a12af2b6e6e40c8e94a106fec9c4a730cf54b8ab663f9d41f9756197b4355536fc6ec6cc80b6a486dae0b069261c9832f8f7620b13f08c6ef3a34275f703e468a980f39bd17882d022316ac4e28861bfc6a1b877aeddea1439236060d82b8c443cf401ab55941808fef59e787b729425bd063457b35246d02e58540eb416dd682b5a998189a3e48fb5bfd42a6d75901340776e41be18232167c485d637402832f906f3a4fa2268d30af2a421150be5f6f587becc1b79ff9669fa8e3dce522d432a9bd89c039a2581533077131ea0164f50b9ae3d78124c9da95cd5cbe5a73cf7348b90cd4275ab0922fbd566e6dca18ac68fd53c405b8ab5aa8de4f709c9d7edbb58b4bf333f59d8fea737931a0c0847db7c9c3f00c04a6ce1e03455c7349e950375cce86271c27f4ad5263e04c8caf503f29bcc35db0c21e4066c5e9a61f17bb17541ef3c97657a9c0829be539d6a10e4943c5a5c2630733562c577fffc610059e9ac2a4e2ac34976b2aa9a62f45639d1d3f66fe01c57ef3a880838644e7dc14115742ff3965c6a4f673168df681fce703462736e37f2e477d88d2663e2984d2bbb2276e984a16b9a8846900553374d3438091b5303920171f6ccb88b5350f26e3d4f758c5022bbfca862a691603d44824142be3b09a5a4cd455f75271b285f7d0e43d2589360e9ca4a0e22fff982330ef2a7d292a4be6cce56bdc2d3949ee2fcb0b7e3cac8ec53a7efb18bad99b6972edec10ed68f4cc819ad50482d6a253b51c714407f6b15a7fa0be54726bb3aef663806b98303c12523abcf7b71164bb710b3d16ed2f48d45551121ebf7f89fba49c0e17934bcbc2260f473b36b0372f4be0987d561efa3ca3db1fff09dbc45764dfbf9a45814ae3e75f9f5a657bc5b62be2a900aa8c709951840c7eb8480dcb1e73ba7e1599617e7c73ebdcae3cb358f95a9927524152f346950224348e0c5ebaa1284a6d5db79acd93544778b9ac1d9d908f7ab40547536c552877e575681820b13187b493f53fc20602252abb560effccb48239a0f7c0aa0ea70134c5ca0138ebfcbc5104c27543161cfd2e0a593208562fc649d90b42e806a64a8745d922eb96b271ae78c7453809ca58eb6e5e929e7529ce4d792be10e874ed847be3e821ffc7a2f32b7acb6892836bdc9af0d34aa73ca23ab49fea605d7c635ddf9a029bd637d7c458818d11ebb85b430940d221596394ccd0e2d98b33e37e9afbba820ae14e3e34fb4b39ddf0ae2c588e70764c5279fd119935fbf0106c97a27cffe6ed857d3e9b8042622b55c7379396ea200a46d233bf99f3d24d775a372acfc491b25747518e93d196886fb6057abf2870099b2ee11d4f96fce1ed5ee59a50931307cb2f2f7482a33783c2dd2e8473a5d6b8b3c27db126a9cc5bc6cd1b57cbf60b4c45a720e3e921d59bd3bf1b27310cd4a6455f7221aba6c129b83751098e67bafe7b41ce6343c7f13f36de43f983a7fa40b43866c56b189bca16102f161462d2acc08190690f1ffafc40ad4171f811a81684efb442d1698cbb8509fe13fa61b2b5b9e91f6bb7948341a5ce8c06ead47ea63c07f2f07b34448c79674679acff0bd7cbdab3f1e9c00aadca949c4ef86ade5e4df39b74c4e323ab67caa0bda8a52e517af8f682022d019f23a1eab09d3f57dd3f5526365b00da96d4a6955679deaad14ba66f928d25f8a435790fb235ec6b71848f1bbb8a17b9ed348d8ceaad05f1c5b27587ba0755604b947c73ea7edc99d9b203f48aee9241fd2be20fd09ed593ad53e8c75efd35c903b54eafbfc49a53645c76491b04fb23751f3686aedba821068462b6f7db41a35b2c421bb8a3a038afc84871f249ccaeb3930d99ebf017fa5fd895cf1b2e037fb04e09605b9888ba2a99ed0787398164570bd9b20e588fb027d4d4884f61e5cea1af06e61f1fae485355e6826060b3e4cdfe2d578c9189c2dcedb16afb138310bdc3cd4579a59b73b860c77b144bdea086ee7b02fd1780a30da7beffb4bf45d65320bee701c6dabcd86f0249f9476c182061353cc6772ee138774fbef2c1b890005a7e433dffe69421b51987a60fd6bc18dafe6d7f2ccf0dcbf106113bc755ce53b56df294cd498a22f79fbc90f1b91cded0393d9da4fb79569954aef64c97f1bbe6107d8c9b6e1f6a9ae74150998dbaf0c57]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 495c83b585f83f7f13442bb76a658b590360827e623853cce05610f369858db0

tcltest::test Hash_SHAKE256-3.73 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 41fac1461aa84a31051f83f1c61ff67acb721de90e346d743d7393a119f8fdb71c639c725e7ee8fbb9cb25172b5fe59f7df3cf3022399e23626c6dc0b82b31ae788787aeb45bb08a61dcd947b670a0a2d5c4d5bbad187d0b1fde1d9b5f8435789e8e0a62e6e7a8c4457928e92dfb2f6c1b0ab7f0777c1212bbf12b9cd8aa10fbd69fadf4bacbda92accb996359a798e497f0fe39470b642180cc202aea47ca2167e2f9cdf9af4edde0f9b41e021de5f1909b31fde76d7b21b49884ac5c006cd19b8075556b3a0b8b272c0182f0051e7d5036d8a31d4b5ff8a07cdd8cf77ffcf3b8a1aaf4d7151985ca8c09f8ea06496f1de77b95b24d19908ca1b531836c856e076c1e1306e880b4104053e6bac870af40d6a33a6e1aafcfc02e9303c86e0c2cd00a5b18c15a48ff437167b526f49a24012dd7fa185b2c9f834c006a8d2e9b145ba3e96dce137a4da946cecef732d0b8a711a03d7ab795e71f2383ce9c54390eef5e4e78f5bc1e888ce80f97f42919527cac856b5ad7f48fdadaa497bb87ef02d56314a300fd3a97327eb27ae7827ddac6260eec8162507efd9aeb2db36fc4d856dbc255b57dd862e43140de96e40439cea7c329b701b29ecf8ae1f94bb5c078b8eee1f5dee5ffd1e929402bcbf8b755dc562d88c35c21d69ad30d614d01ebcb43c3f8ed41dcb8cc8b8d3ac84c669d17375bd3726f1aa50ea49cf7ce7ffa4eb741838fa4a70b0a3b1085b61fe1d5be6729df3d5081e4462e370e28a9ab49f025f8552f82d719fd06c13b3d9754ed232ef80af488c2610d1f995127589796d9feb1625eef9baf9915e6d456986c57d352ed037f84fa3a01c7128c7c450c881228b4d1a753b975e750c77b8a8af0bbd6bd50f366aaf1162b0fece7b0d6d1c7a28d49cb8f16fa12eea0ab5660d6a9c03555690132646e9e91df6d8b4a75b0fc9114b878a0a0262fb6ebdc8d60e25f0ff7047f566a193b7a3d20dfa0d2896fcfe8a448ff615a0573481ba0491217d95024b1dc1996301e5137b8884dd17ad7e7ae2743895aaa5e87ab1640b2ffdde12ac544c6733f13e0cb8591b1bbceafb0edeb84ef3d14f9fb12e7c603efae9d3d45e1a4868cec2949913192a1125192c288a7a3954416b0a2bd05113329a7bdb64a80bb648b25da204b43a2a279e28ad461eb6c7cc5e8351c300ce1168773a714e1aa70a798728e2fa1c1abfa180affb01fbec7eee913f23112041df63299c11fb168ab99dd5cad3c39b594f21850591c6b299c31d81e4da80cf6ad1951a1759f63c154807f6a9f10be2645d2a13d01e1ed33d38eb991b04bc5e979c80d142a5b9ebe54a5a925cd73d61da5e2da585dc74ce4544db4f582e0e6e5684a8e79471c0b66915081139d2c29a19e6aec29d695314407b6f3d12b3016f264e9fb5836aa52c1f4c92fbe780560ba17b1ff38d515435cd4119bad1303fe1955eb7c3a5ecd1ad76557dcaec7c42370f900390ec00d2b33a4a5d711a221456121993ba5274d0bb1cd43b069f03219cc2a9fc532004690d15dbbcd86405194d3b13b5d24f9f1ce5612d6d2795d17ebd593d6c92cfe881b3fe99ba593555c9375ed190d3c3c820bce1e556b66743b41941ced6e85219a74842e8d88c1490be951bd7a717758c96922d70ba2b69f65c10fae2bdbc4d04642a816d99e9784243f6f0aa8b15cb68b9159273fa0f3455f16502fd9397175522db488c60e9d6e6f3cd5bae9f673bc932b7bf5388ca4cdefe65f893faf147787dfaf6b9d015b6fb6898db7866845d3a8de91283f8f52a1deda42a2a566363eadfda1a9a79e5af0bfcd9fe7c72e59639152a1aa9cd18428f399036453855e328c329329290e215753b11134f37137d51730b6629779c2caf8ccaab5903515bbeb238bd36e78380e3added855458688f0220d53878b095efb31a3d7fa69ee241947b948fbd05287b3cf83bc1300c73fb1ac90814869d83ffee2cc6a9dbe74d2c4de0b3455ddc780821aa01d2d0b4e08026d456de0a6916626fa94c1b7839dee4dffbf2dd9727b01cb09d499f7c793885f0e8c87e4c3bd681ff3ad8bdc4bb1ed11273583fb30b591eb2761a107b8302743eae64dd943c4ac2658771770996945badf0ed54f9b2fa78f0e07d0d17f9c6b4d9ce34e12a93fa8e6b371f318df1c9eb7a1cba02b0441b912f81787e96030dad89ef4073556a6e4ed7f2ead39af543e73f9cc63222e844d13a01164b41cb5dc715b98e7c5fe62f687262db4576c98cb9c51b1acd95c7fea0d8095c5d6076416a47d629e28e31c446042df96f69972cc7d43fbcb95209d066d041549a3b2f3efee5eb168f2b73b54e55fb4d39bd84a97b34b0b6e0a1d5438beb5005eb191cdeebb8a35e697dd38bea2c75dd8cb8ba8d3cac171028c953de77f1df77384465a89988a30a5ace7acd815242b34ea4615f71051cd07b14ad2993aa95b36a023324711d9622496490037a900bd769c7a0a884076600c0c808ac45dd1bc0679caedbd93e22ac1d893cb53fac784fc36aa0efdc7a9ea7df2e8ff0f65418a6195afd543ab5efb2c082a66c376e302546d489bce1266bcebf8e677c0fd5356e67834917fd48a63b199af7afcaa0dc61d94f8298fbd3767c4a30bbd8f6291a1f3861b9ad88c0ef5010185707600823096321b309924867b9675bb18d15186ec1763a769d45e471f88d43edfb6170ae27ce9345990e4ee58dfe597122d369d95d0857a76f9a7ed53b7865e213359e25c201ed60d0d7ad9801f870241f97e605f9d60075acf154c221b9c45dd7455a2ee3e4772b35552d291c3be9f20dcb5597a0c87c08dbb130e1b339a887d0f76e74915f79cf50f19540e7b00c0272d67f3a57c615878442d8daf8de5b8885b4a09dd45a3a74a911af84683f207dd9202c9428b8111a300c1454f89124877ee5ba52b4bd0340c91f419ea9d16f8ac711234d1a86b9eb6577aef8bc3b4aac44f0823a3a701c5e37811435b24c3f52c6112e0e3518551faeeb6c6d4bc216215e3fc1fe6d5bcdf47ba1f0f2899ad9fd5d88137f82562de190d0185bae10d00b54383e4556675e2b1ee59d7d38a185b215de9b4708298857958e786ceb0bc095af45c3b8fb7a162aa7b7e27dc74b8a99747b8e0ed077b0a9448d55460c9d2de4f6cd16ff667d3e1a9e7e889b3c7e32db04c7b47ee02aeb002535769118ad6123b13800c19f591e228ba1587ea124c3a04d2bd53d42288284c1efa5f61822a27869ed49a6acf4fe6bf78a17cefd24860fd60db8f3fe5bbd5c9f21a81c13e6390ba456b9589738261c6aa090355966c35127d626491aa9e3b1483548ad11e06e05edda187c680cdd5e6a4b8a59bcd2c28dc8efe7e6a0fc3eaa42914d4e1bf8888ec9e12dbd25576d5981f3cce22e50caec42bec374973b1470179f7fa93716d1cdc2d3c1c0d8031c3436001f79b8c824961bad8298084eae2a4ec5a66670228feb5f199c3088f7331811da4bc6602219b2de23ebfcfa1c5401706d892dcb040b10281986b33e1bf92c9bea18703046ef691088c748758f4d1d04fef1a452a58d62a63c47f10157b8995b964e20301ceee23b43de24828ee3a592e0a6760ceb5c0c60eaa694d993b686da47b47d678d6046e6bef83627025cc1a37a704901bfc234df8c6d41ceb73d1c9e661330dd7f8bbc9a60dd296ed1019bbe3617c63a0a0503a98862a2e9ab9382315933e09adbb96dde9154a35fe41a586b7b6294beb26ea048484e5f315700e11b8adc36a78a30803ab9274c0123ef2332b21a5b95a145334432f820afa4ce61e25fd6d90b73381e36401cce5c76c7229c4107c5c8bdd2e623b02a8c697843291042e873ce7d1b6f5b8ffcce78c6ec7d3091f1785ef05cdf6f29aa4b69bda9622c9adca9f9921f9a300c8ef75ef9a45d760aa01c5f202d46af054106b7594633bfcf782592998ec83e209cee15f938eaf714dc5ad4378b446cabb765593663c55049858fa479ae200b33ec5ea5acf04b3a186cdac41cbf012d85d40f593a4740676fca8e341cc8cb21ae48ed17fc13a9c87c194337b711a47afa60adbe4f3ccb8dab11cb4c6923f008f7764372d0eb2b27aaab3d35f0c855db7222e6915c888e486420eef34809b846783e09be0fbefae108ea72c7af2e3ed955e363d94874b22303c09e32a1c04b65986ae703a3d53d7e009d87f4dc8984fb0c6bcb9efd485fa3eeb983105c91d0edbec0844a73781d84f98e27c55f2252cafd82c7e9624cbc528ed3469562c46f64540a899a67eec27d5b83f8402041cecd91f0ffc15fc8f2b74bd68fc999a15254c10e9dfc678153f08d45a26f082e208c307c1a2edc03285a8e8905b5ea709e446d9569775b77f866f99cce5afd30718f43f0c138c14687c4bdb551603d787ebdc06695132b19db66064f2408e890e95f30129be8f6d9377c42221bd27b021846224bc8d8c0af21781c284b81b297af8361ab514564045f0a83980a148a569467fb0aaacf0081f524a3edeccd418aec833c828a57f10f28f7eadfc62d54bc1ba8b36ce4ffd4d67df30367aef57fb4c7e82b61ef278641b9caddbef825c07cd592b2391e7124f8e16ca55e3a00535c6938950e27bc0ce33b0bc6ff4805b5dde9ac6039ff2bd92d4a18ef9a37f6a4c9f9fee252db1f693dd5430c685dd41d287f7e26333037d9bee07d4ae24edf5c44a0bf79f5b3568797b0f917c2e09adfa6c1916af1599d0ef3ca251fff27c462158605c4bf566b4c39f3b54fd4785fe39cd56c953921635f133198d4ba69ac9e84d2572a786d65a26ac7ff1c68ce2c1155e39810d43093b3683c5cd3d9bca0f8d9ad3e13e79f4d70745460e64489085118149b428a2f34f43814fb8224caa7585b3e41e7d5952a9e9dc15f153152fc8b2c8fff9222c64f09cce0fd4b6538c9a653aee80f0af704132e378511f7d10fa7da7d4b6a669cebda6cc9e89562b10eca0924bbf14e6ce4b96edd58425ead498d6a0608311c5a104f5ff746c7e4db7facc5c943f6699cd177a7dc62112e8fb2252451bd4e0da7c650ef919e4bb35e2335cfc407862230d3351f5b2be42e1e53584f87f22b012c16c562bf798897e3034b6e3e8f0a42d0f2db208339242703330c35cf302fc091079601ab5ee6581225d7ec5f64e892233752f07b163ae2e55a2a1c52fdc2117da2ab147ad5cdbd9293c28f4e0d8ad7d2a980d76c4a8c246dd19b4d38e44cbd98eeece35766a5900c55f2a0341256dc84504e1f7e5b84b8439f4510a86a358d8bf342b5689ad6972771516638fcb668e235a40ed8d389650ecc12adca19e646feb993d4d5f8c89b8cf1c62b83521142945f6beea33a02f27661e96bc778c5b39849c986c709e463e2dc38353c9ccf3341d68905061659282565b193c70f3b9b02aaca14665390b9d23b91ce8c63570391a3e89c2af1f5cfc0e0546df167b1c5e4e480c6d96035630415b83c9b2d137a2ecd6efa37523eaff2dbb9416e078dfae400d1e349b83c2a1f7295c790856a5fbd5c056954c29c8f605cc85766773802ad05a7b5dde10bd6cc5b10b994f0c47ce959942fa9c87738b56e69f600401ba5e5fbe982be650c2fb2d61158cef8899757cb03955fec37739716846864e99dab35ea7f9313cca6fc7aee80ee67242279b2ba3ae39eb64406af5e01f3bbfa25db44db5030059c4007cba845c186fcf5eaa02f20618daf07b9a44dc8e02dfc1dfebbd546a0bc5f44164e0e481954096bb2c9309f57555ee6561eebc277e176ecdc41e1482d5f9c19f2aa277240f9d2ed98d7c89e0c1d4b4aa3c741d5ff00f0fa3d7f063f1d16dc276388fba97d9ce0e1656ffc06c90eff9c6a4456eac2b1f2afe91c4c11b90ba6d6319093d61765b9b0e13bd6bdd6500142714033ea061d0573a7c1bba74963828e2369f6e2577de7c3d4e35dac7b0ad9a68161debb146bb0ae41165ce91549f8b702bc2cb3850cf281060f99bb0065102e614f614734c47cc87dc236bf64e391b996303e33e93960513f6693d3ac882d44dbb3c474ad50f029246e51128059d4fca76e3348ca2dbb9d469052dac89bb84fb5350d2cc9369439fec1b6c8afd44ae9fd1d13dc72108acce436deba9cc83ab7b87c4656ce9ff061d2646ccb3a7c79e65fe6e7d627095646e100405970353ae3ac3176da05b28d076afe7b016978eb5c9771b61e3240a67205957fa18c0a403d59fba6a0b698f2958c38ec5483f128b46b65889cdbde02ba179ea3783770d42c8683dd8f2978a77101bac6abd20eb654a46b6538690bf285e1c2b5c8bb8f7f18fd712391a57b3505902b11ed9cf81fa60a2a56da26eeff3c29aabc785e8ec869846c808d74c923b70334d6042ad6eb10644b626a58b0b045b8fdc07069953888e41cfd6cdc89f9f1217c1cd7c4d1a0fc7c7592d048788e095664ca9824ce55dbe52aa11426e4401ab1aceb4eb111c8d11851edf43e6f20f0ca87e0d8d65faacb4e3e756e99017f997c6b4b513bbdeaf701867bbe81bdee63de0d0d18c870bcc1e9ff7f627f093ed84a6245c8a8fd8fd6ffbd44175b8980c8589f5640432a15237c16c9d91e23053ee238e09b41fb3ed6d99e51e512fb5f8801e4c5388db43c5ad02a5bb9c0785d330e9625b34edc7f5f59d0a912ef3d120ca18561e8ee37b9cfade43becab2fcd1f94241af617cbdad945fc54843a7421bb00293238b0db15e9daec73582771de6b3d89c94de3eed8ac66c95b253bcb15fce57941111ac7d70f21e90be77e66167dd16e3aa0fc6d004084e0c5db3a6874391a1c9559732487ab48840980f63500be187a74d8a871dbfd67e89a907e73c9d965bb36fa0419ad241864770ad9072196da567fdb3022ef4cd68ae22b501599448ffe2dda15cfd2e259315c6f6d03036edea96393dca7c7939a6ea694f8756ee1608c81e3ed6e7d4dd395c196fb522daced1c28e7f329e83b7b3beeb3bebdcf1a9f0e3afbd61d37cd4d36ad67ca1b27bacf57d7bebfcfdcad419ac070e9124556162b610c160487ca91bc28ca24877afe4c01780286c22a50b43226b3c39e57fe8b8cfdfdf64cf5ac65d03ba74fbeade22bc2119a91295a8b9cac276492898d78c7d916b6be1d09db921aece694e748cc3644ac6e282df4c8c0afcb6b9ffb6f2d92b9b51fb69e4cbfe041456f3b2ad326332c506692f6816ee9e41bb0321b8685b3d4e02026f845c016ee4e2a8cb0d757eb25066a19ab89e5dff21e1b931159e9f4d3a2a155527d47fec80e00cfa1dcc726d5d562037492946a83dd95090670bf1b5e008a8cd57aba5e788dd74b2568deace4c536997a26e5523c5e04dd225470f11c04c313a9c683ffa5d3994962050444fbdece23e5cc3f5ec7ab52588c8c653eb6b53432f5e908a9f8e92c11833aa1b8c22912e9dd0d0a58cccc65bf6da005cad31bc631e169b32318d67aebae8f1dcee0adeb32896faf06f2c7275dec19b75c1c3f5f5797d0eb37afa2691f0c8de04ffe723f48117c9430e2a67e79327ee5be3928e8ed3ca517ab6256e3f4c4bb5202c381f8719ebc22a04471545a6657f6b6d1de4a3bfb71a148dbf8cfb3fea2dcb1d8e1fcf658b6c11dbf2e9049b12d520d8c6a6b89fabbf0d6c29314a5e4c8e422e49a351f66f2da6efbe71a8e3b86618b14d3351f610b6c1dbe2c9c0f9bb7d41e90b58933f0f8d35ca1a3da712bed8af70e218f4459e97de478cd4e3c4ef7126d8439e27c205116af596bb83aa9e7381a255d60420ade8bf5987d1273230e08d7672e27401c84092fca469c30dffed0bdff8e925f9b71fe16c545d0fb42861c24e19d40c80c1916a39d3c6e9cf3b9bba644bc0ce4342b3e10a72b701dd4e7b81b9c8d145c1998a4d5795516c60da0619e9defb619ff93b3abe73adb2101b743863d068d436b8a1a8b079a7cf6563c2a6cb23078452131c6ae2d77f74ff080252b6f1092c72977e28eef128874f5147fda2a863ab1c58ddde320ecadeecac9c5d2d8b40c2e7be563a6d8c5238713b1c6aeadfae4a61130621069a0e648b61b8d4520f9e1c18a5e059a6abc3379d89969b1e5935e6a2da1bbfeb09b88a3ddfde44bf0e8fac87e6930344efea1906b56ceab77599045426852759ce67c4867f732abf0873f8b7f8f4c3a2c935615f5705f640e546381780e8d3dd588ab7f7b91e02ec7e09851b356c175ab84394f9d6d82a3508dbd65f61ad61d0489fc904154549c1dfbee644549f8ad74d831888cd7a132e50b8838e51494ded1f256c2e2c7f7bd9cde270a5bed57aa2f972806e93523d776d6aa436c842e48e3caa35e86733158ea932d8c1ecc473383ca0513dd10705babf70dceb4f30e23e319caac54de6b37af22e632b56d31121878b0f590eff0852b759720e5e99b3778e7b3f475920b2094913c4348587b0d97a910f4295a0b1f9f58328326ec3d4c4b3d467e11177bdc40ea160901168feda8650f5ad1d929efaea9c53d9f865c2903226b914ff321335d355bca062ed379f2b5946daff5b2bf016f3797793e6097499f0a7757b067ec9078f5cf7f28b17b1ea08877ec350e553fb272d9dc9cb25ec5bb0b7652d5b4d183bdcb60958d90b9d32fd1beaf22a579117a5d4bef29b8461e7e56d768eb6fa8de0bc5c46fe3d7fdba69588b2142dff51fd0e035db6cdb17fdf0d3e2c079023a486bcb4537b5f00d7b5605256920259010bbe3dec7ee8398091a6bde8307d44f6ae3c529128842b1bdfec1d6b141dd118d444e8fdc351992eb030415d81e4dafec7e9bb92ae635b3286a72e41e2f71413d72099042cb03cd4ab387cde845d5217541363da75631da65a10198da7147e8c94dfd292038ab11cf33dd4fda04d46ead367cfdb1619eed1cab573a0d8fc9ced8dd10a29e027726228aece3d7e3b25e3e6456406e8de4b5f4915a12de115dba132b2b42e6b3d1d3eac09ed0076bd7b9cdd3ac5009656bfa965af46776806d75213e37521dd220e1cfdeda609123ac47058c6773a86e9c83aa0e0c83fd6460c8ac1e1a1a6ee8cc197beb87d99e9397d08b966df27432dd1ad7b68aac9a439e7859d4bee2ff7c3d4093ef8f845544011b0af9a81594389785c558552b75a78f50d26709f2f816da21c2f3d9a9dfbd53f128beff233008338d1dff5748b7179b17bfdfe591823f0d83aefd4d906386f31a8dec5966722b17fa87b0774a881c2a94c7453909c57d3e2dff18d3800a284b5ee28ba0248028ad94aa759d7b0f3da49093a0eda0e85bd3e85e4953c3fc2ac185cfa4bba682875c232f55b121750271d3cbf8e89f135e357c739ab59f6014bf56fb3d9234a1d18b6ebd599c85e1f3f9251655144e7010ccb1e512e15d5e6fac9a0f610d15048da43efd8744ef7c99a44e1cc058f424f8004f5cb9c04420c2f019b2151493d5430e5b97e992a66e7bdb1586409cda5a9e3a1d8298389ecb95f39b8d638ff4397b318d32876ef4de210444fcdec849388be0e4fcb632b18a711ce8485266815abe759c7667c11ff41489a125a1c587e6465c6c751c97c783dcd5c78aea81826093424f0d937170dadbd0f5aa9179dc8d57147d93d04d26de608602fb34c83f7383006f9c13682fb5fe430732b6cd92554772dffedc3e16c485955f443724ffb91517c4ceed8ca4b00648a16619a9f0659ddc595f4750e15dd26ba70dfc7b0c5dd1ef16482bc717f07a4989eec1f63de6e1bcb55e1a6dced0cf70a1fd89b7ac853ff02db5d500cfa0e2ad8871b69ac2ff9c79b9a25c7c2446040c17bde8be285ae883d1bbf11f15e6c7dc6698017fc7d9557b2ed415652ce6faa8cff5217ac803530ec902890b31eaaf3eeb0aa98b939b942adb9b4e102ed938aa934c3ad1d3a808fbde33a4ae6bd5253bdf6fb6a8706ee1ee8aa00e657146467c296a3dad937390b0d8f64bef0acfae3b097131bda47ac52f018b5d4c3f56ad8459f831f54e8a72977ff285b658ffd4a632b621b278e6c755090343adde30f42ced9e1f914d1536169ad05aeb9b8e1ee422e68e6f34db70c86ab0c97097fea3dbab030e68d83d6597f337d2771ca4145da1aa80db208046f0ec3bf67db2e543f85dd006643629868150d0f64023673f7977aa00e084fed336574cd3bc770f5bedc9ac106cb103213c7a43cd2ff80226a16b8d1565a77c9f00728a66152ea47321b84032698ff0be3039375f2ce29b523b47fbc853d22330b7069eb9711ecb13fcf1347641191ae6c55455b5202a5b49b1d19e20904d1b10c4db2fd4b690adc4e63e2fe4dd97a920639544d6f119699569d21b2505608bc78db9e6bdcecc720d4765d9832551c5f572c2acca89f5eebdcd111ddf9a539bdb7c686b7e9f1a4177872fdb5b018e94ec5aa4379ace06114a43584a57386d75d6f8af651f13c242890e64dd745a98418d83038b4daa96fbc3356d4a94c5f73e4068587da6110b9fcb45cc86d716b5f26055a750eb04ebd3b00a19c69e2a39219f36295a1d803f7dc5922e7f8b1f2ed0ee39572f7dc34ec29a2a24667e507b447dc9eba58b4aa407005e546f985b4b02be95ddcf0ad107f008fd56d13b1e05cf61896505f9568262031204ff07b453b058d2ffda9a155e8482eb77b0dd7b1eebd4de61236e8c23b9561407d7df119004455986f536779ba6905c4eaa6d5110c05d30a5a6f2d4ce3282ce259e285948240c9139cae4df0580bbb8a468f187217584e7fb378d16caf50ea625fdea76c43835e1e201ae35e5378a67419174059a32d16b297e483a602b8206d19b2e4f4c6949b347429c6183f686d1edcefbb3c321cd25f7222a28d8fc6755ef21fbcc27decf6e3234b54c27e3355e70c79079e367ff7b2fcc3cc97a8f43fb48365ad59fc14f79697f01dc1926217791233a3f432fefd6972385038d0da160a4835252fa37513eb4cc88faa0e8d282198b02ed2c9f269ff9d00dbf5b9d06eccbafeb2b816a5e24ddc3538f0651cfe9d1a6ee6be4df2b3c1b7adce62a68fc0784632d497c82fd93aa0b69819188a0127e1d09a1b3188617c5cafb5e43960a199847219233a6b7f3e54dd2ba8ab6cd67eb975877e372c096c1677111ee4eb98ad002ceefedff13ad543097203902de4edfbde5d6bb146023d6fb46e573b88fc2f23d3d48f4b59927c05dbf9de5955c312137b7a48227ee25cb2b82c419fd1629c69f74868eefd1caf07b5218d796cf777aacd6cb81d2f30469a12e952945d62716d17d8f04d544feae335978582ebd88b2c44b31003ef62778055240ebb75625a87a604d9e91792cc02ddaa7ae85b0cc91281dc046927ff8c0fef4aca77c1e89454323a7a348f8baef10e08c21c22fabdf80545e9df716de08351ec3a5bbb6bdb5d4d0845d254a120384700ffb0ec38d6373f9f54b9544411a52d76c2c9da727c0d46ece124df69ac43394188290f2dae6aa126c99939089bcfc288f864a77312eec066c0beb84bcfac2538f007147fa30cdaaabcf1a831fb7db1715f9e9b142c6c39f4690257ddf6cdcb65cbbd847550983c69a3551a369d298afe4cea3dac151024144e823686ae327c368fcee7c533974702113617bd0d7dbf5e54d9f7c189850f44e5d0ecdc7274b84990ada6d5d8749af28b07190bd8c4bf300bd061eae6056c14c350e345d00f101d82fc5a2d9bcaa8c9755aa6c96bb91b01e68ff49eb74bbaf26b94a269436c1410eb1d7a431a03e0d564a3496c42a55342594b384379b28c7c431eb2ad490624c21d937facbfbae3d4dd73696b0a23e88ff8a4957fa9c45100ee518c985d77d2afbef0e2c1195a1216544d8f5c1eaf4b39292ea4a9c40b992ed1cfa8a0fd3b9e4823b83c36936c0c384d8443a5ecc20bdc8f3bee6854f2d554720b9f5db4cbf80a004bf463da5b32a93dc9fedf10e6aaf87f7ecb21e91486206377c924f0a36093c94ea3df4ab215e7b981496e1797990b9e49d37cdcdb3c010aa6bead4d4c7843d312b30f610b3682254c8be96d5f6684503f8fbfbcd15774fc1b084d3741afb8d24aaa8ab9c104f7258e6ec78ea883f139c268811571790a9c370e8b2b0d67513b5902d7b16e01b52eb94a9ef7fd81e0bf74e667534611208fad69fdb51a3fbb72b0545ce48cdd4a957fa7c635e8d0c155b991b912c9a0553ac0730b41f2b9461d0307a0cf87d8361e242ed3c4d501219122f31cc066a7172222e23a7e11348f9ea3a539def983061d59184e215c937ff6237308d8c7b5f4ca471011a61061f67c24a58e9f5c7e1917812cabd7e9f83af94d99e3e8472d6cb79f8517765aa2293a0891259d2b2a0d912ea46354f7bfe11ef3f0546b7fadfd6ebec9b25b6a75866cb1f08534d007421ed4481b35204b10ebd8eec0dedb981554075688c1ca6cac68d33c2402f5966514f46019d4de3a38c44f1dcfbed57c431c1ba3e145e4f7e9c2cedc98940677c518118505d09bfdc74ce8e5c78817db050b6e4a82546497ed1f176a49448cfc009cbe3f6594e4165afa18df4ec6fd34e9b671a2b279a3dd24b24f6dbcb0f3c3a6274cf79fbe311452405172cbf8000a5fa1b85518223d280f40d94f7955c54f142c60363aa92d684ba44548d597cadbd561c4da19ea9b192b3f4797f59f9bfed9307a83bcd21382b5ba56b9e222b819f95b099a3e4f4810f6f20cdfb81ac26363b80e58ace59e141ee6f84e783552552a12091e0bacbeb0012dab7f4743e31d52479e3d7140276ce5aebc9f1e2c140de60b45fdf89f7976c836a5ff19a7787d13439c9aa07e4a2db89616043a8387b4cbcb32828ba412c5baa18ee7a5b1ed132550ac08b0fc60b6e621871663e827ea39c671744b36e53d66f2c8c171ffdb6006e32f00394725992cd5a25e00a67f0ebe71651bade49b3e3baed60514edadf4466fa8099feae354cb26da33b76af792d87090112a299f58d73a493af507ef30627aa99d6b54347a6f99a14fee921c27063884dd56625c0d982994cba8db19b4c988a624121f936a78b29a0b2cb8673bc63da5d8a94b6bdd1cf14b4f86e3a7f20a1e20462ab97aa574e626ede83a634196f495ab99314937c435df3f359e346892af9a6c1b9e74dbf2b8da70a7b49ab906f1b6cebcb07ebe2c4bb3033b77299901b1871e7b5afc4e60af172bf1a3783284b99baa6a4576d0c3b78943ef1b01f3b5c878d5b05b8bad5d4d7f883c83762eaeb0b6d7586cbc00191da469e6d658194d68e21a513cad5926f8761e1ed13f1dc38b9acddd92d8dc9ac2a6edb955966a36f75554e45adbd27c549d45ef191d70818eaa06805437b6d76af367bd053776f108352dd05281b9bbd6579843d7abc7674e8719d72d633f4d6b3c408851d5c00a20140daba0497f73e2279da37954a2d35f9460488ad5c66b37c400a1e7dbc5e0b3747cdcb09d84232cafce848ac273541664726b0929fccf753d307023c3f92356d8d3fa2ff878480a32937d885fb9682779e8a504ba42d8980a58999228ea306eb3db8a6ae4bc610f6294e50ea6f58df7370b9d2a11291514bdd174bf6519968f87dbe3fdecd0fca0a24b516a12a843fa4e8399c5c920037fca33a80822f7c42de75dbd556b567962941f59472d5228c502b941844cb8323da2178a08cd1557be34f96d0dfaad65c99a89531271838adc06451ac206621fd2e7c5c13dddf2bfd5030779941546504a3821d54869ad08a3cb9f9c2ba0ae3ad40df6b413d0007af6d420796445c1b768ff716675904f10b0b5213c1d860cf1b58702f9373dcf07981adcd30af6a019aa52e07d166fda41877582711430ff030be572f6f491cee43d69952cf4c251d582d5078fa762ef099c6f3be1ac3c04bd2b9bdf33e856809f5b22d1cdce13679996e84f14a503fdd76414a5f43201beaea93ca0469f0674a785e91b5bd37441d43b1f3fb29bed77397308692f621c7d46192a5e95652c2b8b222eea5dc16f80f403ec41dff869ebbe4dbcedf9b8f6d111dff772a6f73215c8c456c72a046fa59765d20e034713ebc46894bcf9832b4aa082267501b1a2a3cee1132a6708ef103cf562fcb30475c7ea38425e956d245a609429ee2c1118862c1cc69c8b6b78613327018665bd0a30ae51283b53d37c70d07a84368cb1ee1d6ebbf3861d98a609386f404391ed3b867f27c8dbcb628e3e7ec9d7f6aa00ade9e5632c8f841cc288ab52a1acddf1a469db40a6d85276f413d9f677a71a89c26c4e86c401556488501a65a83a9076bf3b511034899f9d28816084e5b044b9e62508bb7c9417fc520ff41cc6655ff8f67b6f3b1497e951a617b0f9c4bacf1d6394826598b02270aa08c6ec8ec5a2e4e4ba8415a95be610f73739c9771f0020e54b6a19bade3b3e0aeb015953d3ffb6f4794e34757e1c77867069789f658e60c5aa1e4c5]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 54de12f1efb4e4ea9b37d9e07e2284d0ffbfdec2ce78b47fc82dcdacbb0e9576

tcltest::test Hash_SHAKE256-3.74 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex d9e565ac6d9b35aa70ddc91ec221914de2f9a57c53e74e614573c8d8717c46d745cc37a441efc845a144aa393c541565ac630d51af45e494cd73008d3b5ede54000357f056c022cb53669b63c88fc2416a32872f2f7445a6fbc18c867c1c230952b34dfa74b74c22cf6a2404307aa1ca638d9b7e9d1d797d1786f429fc5d1edf8504a229627b4d345d79cd843abcb9e6e19dd2a6bfe7890369e9c1e082cad5bce01ddde4eab52de744bb1f4baffd137e2a89b30f5d7b7c1e38137a12d80b528aaa278695d20df525ce57a1c156e7b57b877ac72241805ab8ce2ca726c4c79d2f2c4926a3e32aacd54176dc4ef920a9c340989445329f2bb8715bd0860fa6bc95aeac4476e5b55adfe63f565b5e50f7409d0aa4e1f780f8066ac87e998152b9a277776876a055072a05db994e4e20a5d8e6f97f5f59cac88a019c38c7e1709b40d1d31a0bdcb3bca0e6712d919137bd75628cab252026a42c7dff8778f9ab6b5602e8e39d60778128d02a988aef3f46fe5aecb29d143b93d42818f2148fa830cb53dd4a94f5485caa0d2e64a330dd495b16401c2efcb29d6a481001036c12f2890cdbd85863ce570fe3a418431bbbcd74deb16f3fa232cad6260e3cae588fba777509135172b2793d9bb43dd17a81da31fa67353acc6423000a3b2c7b1ac78f7dd69085e7e99cca1d7c885ab713d7787ab189f58643efafd03bbf58d37c6479837697b68392335397d045f75cae63b0374d40388bcf7d772f03c1481f440b80719e472d8b33201b94dd169d2815d0895014b385b137b38103a86985c53b66ad2f96c87269950b2afaed21d2830fc40cad4f0b6460453bd73673e0962f291d07a6a6410d83809a89b3468e21d563e74036456f5d00bfbd81aeac4e03c3d6d896bc16da8743bc783fa530860f86dae32dd44008f9f96ee085559bdb55eb093e635a2dbd6610104b54baf53126fe3c5ddb6d86fdbfb31a4ded1188ad130e8cf77569340f355145bcd1d8dcb6eda6510053ea607738978bacc1ccbaefc59325acd5cf73fb79702372bde92c3dece4e0719c34169eea0b88a4076d7ac7f4e49d05897632a6bcd4721620d42ef0ac21b35bbe31f0995f78dbddc9dc105d2768bba99b44b93b85e5fa4f03812af5b4c69064c2cb36911f474a000e01c4dae687494112234fe05d0b83c66dd867748c394034afe92fadb0de9eb5dfc4dd66b9a90d74f7fa3ebdcbaed42266c12f96bde48b748d7324169ca79ea3430da5282936d1eb51b0ccfc5736b60cf624c882ce2e38cc64505df36b08147342c46249bd965b4d282f42c2890bf12c26e97b61477e11e33d6a226da36bc6cce4d15df0fe327343855ee83aea954d29fdf8905bb13edc621fa8bbacce377e57321cde467270e3756f250589013d92ac83394f9793d562f013f26fd773d402bc338d2d73a3b9728aee6ce2da5669875cc195003e75ab6b36203088171baa1aa2ef0d919e1976e72b0a1bc8537282f5e2bef2ea77df28bfdc4e4a4c934d2190b16f8254f05a0d0bffcc1bfd1cdcf1a4e5833a566b5ab42589a529047491a12b92bad6bc90f0e8a6af3b52c95e1c1d5c0e16538c426db766e52eb3f7e16f92b2edd8ef12a6636d80e25fa97641bb6de5058127d423a1994a99f0d16f03705cee69d2b79d5c3906604141084bec404b0671cc9c76367dc2994df36cb2011b67a7afaf14a7d8fc1a0f73e8588f88331e89fafd9cb9a5899a1ba8406a0904f91ba46777f07642331056215c7f8b3c1d4d34491e0ee7954d8a9853deb5bc3490e1af38333253c36752fbf3a66787318542d00636d9463052f8d7f6d53313b86b1f8ecaeac286831f47c690cdf6ca8ef36424d94ee71f9e1f4da1382ece56b90f3e0ac6a48857a9e35781a1d9169e7cef1bfa686d1fb9073cf2bec1f06ccc5e06a7ebd4696b0e5d3beaf2cdd3ae492302cf185e9b695e92324df63a23f7bed0d7c1f99b4256f2c9b068e3bdc2a614aab3e84761e0ad546788c8114bd05674360af3fcc4362e4c12c93a1a19aee6473a8bce4f1945d3e4afc6cad69bfe7136b927a7bbf64edc64630fc65f88a0552afa11eaf830d1c4569275ba0ed3b5304c81b744ffda914882e209757cb29edd0513cda20a4b8d66f2371c02819afd7bfdb542329018075aeeb73faf3740b3651fac475f4c157fa200c74309f799df3a937e4ed83657b8fbef0b39dd5adae4d6c1ee088a8733b161c769723738786255540365a0b93fad11cf068065ab273b163301978983502b89904632f40bde8fb4896d0ef1e079ed85d4cf9bb1f3d0bf0ebd0c7cc60812f303a3850aa83a736c4079e3d23374ad8040478f1227f97c78a6a73740a7de2113b8485083bb8be004df6e8e37cf3e826f29706d6e3187d46fc738ac6a96cc26938fc7cc2396c7cd5c7aae95c72b03a1c127969235366380ab57b99082fa9cc9796f6723759fb6e17efa82210ab08eb27e240225f29e5627343f720e103b14b1cf42717dfe3f1fc57145325a87c6a65cae07fd4f2ad028711368ab4b9dc1fd879def2d0148decb213d450667c6d612475ab8cd386736a1084fb9ac72b0f31ef2e95ee3d8dae5839cebe046714f469b1c8a1eba0730378991f019bca9d23b419bbd77db293cba0dde8100399fab80098344230ee50e3ba7b7ff7225188a002c2920225c1df7c731900a8c281a61ea242392ae0ff988aac41f83ab2de960aba8451b47b0dc9273b95a8b6c5b09f9eeb3a57ba8076c26eda87484ac1d41dca27d97b4ce1d8d95256be30e881a95fbf380b008f73c65706a1b5c0b5d3d4b874e73c6f59fec59884711d49ac8ade6f06151ed3f84f70def8ae57f1ea6d42ce817527be6a26567f44071d438145b23609fef042a377f8b2ab5cd87c86f2c0f8866e15d8ec0cfe06178548cef546e75d117229cd1f81e08a9549d190ea08b1aeda1e915f5df74eb555781a3c7702c03cd30b15d3ab01aacf5cd1be0fa213a75a132324a23e89ab15a45c2c2c850def6db5266f16f45bc9e958a108193da81492c7f84a521c48a59f7aadd91fbdccb7584e507fd78a14c0711f143a7e1b3a7be14f2a7cef6598c0cb5ee9bb767fd3da94e515d2c5baa120ef26c7ef8ed95f6fbe3f1626caa91e7f21a79c4dd14997ab9c3ff3023224a55dcbf62871cbe66b42920e67f274653e532b0b320aa0b99cbce6b55488dd5685f98003b27bc5c102a6f5438c4a9d086ccf5ff0576c753e67810cdbc6c107aec766b3e5e2680d079a0f6064ffa975314e5628ed590dbf466c9a6719d66541bbde37dff354c0f218b5de5be93e99cd4e478a2e58c348ff70306b9df5efc02bfc5eef5ce276112572cab65056c585e5ddecddc8c932b8b63a47670a069f7c26febdefc309c2c307b46d09e61421085f5ea2b390c503d76403162f43b241e3b3217fdb9affc761294c015b75d7ddabaa5f0dce1eb2d31f99791126c38f93b1610319155d2b0075faa82c2d97e857ca574d826fbb491d1bb6faece01204f14fa1122e3f7211ea7c0c6741f2b4ec2beed6a8a52afece4e365d06fdedb798d73903ed03bc825af1eddee7e74d6549d6a3a8fefa7271d8d309ec2bc8921ce1d1e809e24e1f065cb335d2d880801187c4636eced6f88cef6800f4e7d19fca466dd7139061c966adbb0e9887a24d523c81c87886df0fd88869b5f7b9ad49385d07a0c185f35e2ba455b28093c107afceab2d56b5874abd2a5483752fc030ff8c3bbf8421574fddf73fcc3b7b614172b48d0c99e9441bd34bb513fd989ed9786a76addbf12210f61cb5d619ad178d4394c400a280b9f5936307c1e1a2adc54b5e44d65983c843fc6b745abbb7383daad5dc94111a3d8a8616d927d1dc8166d10e22d36d47de5b6989e7b4821857e510fe23216624633d13cd85a03e849e40b1c0ad1f87bbc8b9c5ee8c8e1d4f0b161e845443022dbf7fc50da9e5985978e5663c2035496e1bf18a1fcf41edd9a6430beedc738594a6d5323dc2426fc985c756c7389f12cd3c952e844c7a6436ddfe91c4283d50f7bddfb3f44b51353369691bf862c79457cf173bb2709220e5069b287ac3fb04d558e1f2c7b19c8945783d1e561b491e9c37fa3a20d8139472a4cb38993c5711ac2cae570ea18ecc7e56c5e656ee9e32190ba09265ef894f5e5ce16a95fdbbf7faad77595f87a27f2c7995fc7149317f4cbebcece8336db2068380070784a4283f3fef8230c06231fe552fd94ba79d56b5d5a1923e203b5d09bd29b6447d9a32e868796a09085855527df6053ca64c48d2c4f13ace427ca0e66e30f0f32528a884bba7696ebc0f89d7587af8cab1c8c622112e4f1f169c3e1b1b584f9a27b9e9a2adfc18c857c22feb79413c7c569d6f224eab37a72924852648e21a8001e886b0c3d9e0bc684ab80d54cb38d80134a461e21a8d0cd6a006867b70ea6b201f003d71d369a169f3c2bb7f8b86544e18f65f5fded7a6cb9942ba278747b22ed7c6b75c7b1c1dd947d0846df49d8799c4e5793c7a700b547aba3fe187badb6a9d7aacc833608832c151e684b8f6d870c2e25dec601eb12dceed961e14ac6d8ffa7c8c699edf8702fad750682b1acd6f9d8d6c04421c1ea3f05d4b5190a4eefb595ce4a50ff180c65ec1609cdd81dce2bf37220872f0da539979ce009e2cb639448c33ff294f0c0957b0857742c49d8692802e5d85454aa924c3accf9fbc79b6469af8fc5d309f2890153dabfd4b75a7d1f8cf97fb7206312ceb55f307cc901ed9f9b2112e5ea0c07270078f6f9efbe2d7f1b43c482f83780c21583f88e5afcf6938edd20f21b74d895161b60c27a6a42f0b4abefda658ea6d3631f975901f449ec90ab39212594c4f29daa4658dfc8841c611947e9eed14aa7a61a56044651ac53a973a39a8fd292e69e0df0e2a63ebaa8297515d71b6635e6e65e7db8b17ce870e21da786e1980c1b1f2ca6895836ae3f15a7a1cc74b62f392bd2549ccbdbc5ea42918d0da44df8362befb0757c1726872b9833ef822900487e5e23d91bd70a6ad1b89d565f581fe2c73e55cd9a49eb28752e1368cc286fbae6ea319629d9819798781f8a9a2349c5fd01dfba3a34c5cbfb528960da1945376c5ec7fc7e47f01a9eba5ad0de153d87d4209463e5407b18c4eddcff35654a6917a22d33a18a209aec679751b196c5d15583bdf122d5d7b6d8e5556c647546f5ef9fab621a0bd9c088651e349e0ea74b8612a18b7a5b9f4e3f243cd0efb00186fc3b89b17231e2347c9e37a22ae5ac9c71b68a5a743a9c870190d9525f7d42c2475f0e493063059dd0f82ac3df849c6c1e55be8598da960a2713731b3b46d351d7f48352dc0b08a38a5d3ebe44513f6593d886356ea3557eb99453520b727adcb4e030f3ff90b4efb4b4bcbce1b55d2dda282a927ffea08cbdfac2205869000be70d5d55205ad12955e5ece43f19bd6cfb2bf2c3525140dc3d2f06ada8922d85776152a0c7d127f976d7165fe5e328cbfccb26f16f05fe15401a67208657c8f36cc656fb7c5d7d051e7482545b7d66f1e7ef0d435f83a0dfcfa32fa1771f9bfccf23b38ec8669df855a378ec2a4d3f88c37ff0e2a932eee4f1b2a45a05536c49a75faf8232544d78234c3f4fd9bd7b35996217f5d579b2c9ae2f1070b7590481fc6493ff438f562d915720a4f033e1a27082caa56cc2b2390e02b90e159a2b4dd619a72c817f80c1a6ad6313f8193a7750c6511af574b7da1a14e85aa87ea8553e663232768c92d96b3450c678d64e5b4216f37bf8f68954d94be47cf76e45403b337e39aa1f5620e6d52ee2f8d2e5f74c5afaf0fdb2f0505490f79d8bd0c8b7d668d168a49e923b217947920075c7f3797aaca38d0fb47691cc67e5ea0dfa6116ee74e7ec730fd52406e1fc1927bbf6ce5f52b92f759c6d9ae57d7b9e8ea3e703abafdf0a049594f5664548ca508ba855ef335d6c4c72de77c581882fba8bf0a588c97886bbec209e7fbb9f9c58fdb3151399b5cbfdfc702e52bb3323f87925056d0cd9e9ffdb22273b8a2916a7dabc16b4cae9d4ee03ccc97672a504b2372d2a43be2bbb372b429680fc0dc0a5e96e61b80f220f884e994f17f005594f8bb21cf0289582cda427f538577422bbf46efd09b0880533a780c91f7b7cab373e59e45e9240c8280e7a4b4ae485c54fc167f28df5423d58d4293e755c3281d118cc8973435314b031e2a19eeb6930cb1aff492e26793f5d9e3bb601db4e6387e0b3131985f7efcdd508fe1cb447eb95c5de09d28a5494accd5f3aab3ff9d9c060b58b379e54e0e7c1936aac86487f178aad3a636afcc3ab293cd05bd25a6ce55e7bf8b5d7916f66be2cee36ab9473b73314e4c80e9854c4797b83f9da9aa35ca3ad627a78d724b2947b90a269524fdf86ba10e9be51d05e87c3586da0e0078ef7f2d170c94d88330b275ad809aa9cf64d48c6aec24fbee019bd599f6c551fe321f24e7e121c2252ead954c0d2c5e0644e650cff61b9a6b4f8108d78862073c4eb56e08c9a6b7a75fb3885430ecba69052baecc4e5b71041ec65fcde356b8b971bc69083aa63190604edf54703e473e420ef6de5947385efbd64afbac25bf0c57ae965498a2c866bce9facb5fb36d1c782ab974ab7128c2632b4adf5751a29b7d06867c782ed490e21f7b3763cec47a13e9673dc95bfae4e14fefe7596d0bed4e5ea9ee5daceeb55c59d11700e2c5edb1d59088178a072cf2be9ab246da437838018138cd9f8f3aa8138ce8dbb1e9cdbe79c5f22a6dd60123f1ebbe942bf1d2e6b9acda2c893e9741e70f3b48aec8c0a64067ea8689f007d184436ab5c49f83c6c17d410efc6561a65ef86cdc2bbb3d05b406ff9060edb797d04255404694e154c3831bf96bac1061b5a92bfacb69b9696f23affc851786f38068fcb8247a921d2a4eb960597b29f0b5c1c749002cbc2dbc3e5a0f6915fc50ff17cf81e0c90c7c8030a7c8384b14dfc9b2ed3b6cacbbef35b7ac6d7f519e5cb6ef4c320e08c72f4ff975b5aa94778b5bfcfc4653424f0a6630058b4a62d3534240014cfea2487203e981ad02ffb88ff71082fe6685dc2bb83803ed5cb231f11bca7d37453e06f126818a12e3e56e5a259e0fc828ffe9bfc620160828d84092cddf2e85742489293261cd8bcfddff8661e5f147ed18fe22fa98ba60314d75d4b30e73bc0e0e5586a20aea7c1951e2713688d5d255599011dff26f89f87a482375c91b5f7553e2a61fdd5f6872e9bdb70e173c0be44a45f8e0ddb3ea00e74e0b80af53c43c8db6e3e659aad54eedf7d462f182590c536644a7bb1604cd3cddf95e21db9ee61458eca0203b4710071735dfa8475e401d97818f0b146ecfb3ae7988b10153e4a03f0cd791bf3268ad9277debc09602201403c114e2d8c7b1406087aed6367ca89dfe0f75e752bab5a0ff6ea9d37232496f6d0e904cff271b69b22bf27806efa69c1e579c71ba77a84d65f7ddc5f0bca4731ec40cf7a152613c454c00fd6ce16987ba6e96c011a38c68c0e22f9ff7e75aa77fae2feca791ac4182b27f6d4f981ce6391d0cdc4187887978f5466871fd9394f693a232fa2c2401cf2418d0995de542032aa6ce306bc509f5f9cb28454476c0ec3a0dd1806bf003956b732f3178ec21805d0b9dc8966a9f9eb565e75b052cb5ca6c16d2239639cf3d4f3791ff315a0e1880e451ef52a0c4ddf3bdae9b87dcfbf6f1683ccaf426ee2d980dffebd0578e3359d8f38fe58fff19797b84ed14af18da91a9175dcee0e7cf0e9c80dd9c0a2b39b290898f985ed8bb10467239f2cd96dc14826bc36c8e428a798d1cbdde9c6c9251b31ed7b336d72980c67f676a5dfd66419a41e6165988c5a087db73df35d9a6feeab74f7e3e85cc91a4b35fc488d3dfe19aa0ad146940ea4c33c6e7e4fbfbdd83dd5edf419f690c0b8816094875a2afbc299100ade5f2604538e402381959a0a7331a6f43800c52b519b14d3e4df13d9af01bc72bf5278f53403eaa22b57c553195f4e7cd0af40458008b14ed3749f3439646ead4c365df3ef0dac8e9f8ea66eaaaf22f2764ab8cbce5ac449e5c31387ec41a52f17437b8cdf2c245d6092d399a1b1f2f99b8b950a96e1dc799e331741522a0e5c9332282caeefe073110cd38098f80d06b2ba4bae746e58326f5d110ce57df8ca626b0a5fb8b94f8423750c9feaf1ff8e4e7f6303d130c628dba9a72720cdf30ce75688928728eff50a44056422303904d14361c757e9b4b15591303c9e8a9b78a49d2961b4bf303a57f24469e923481eed9ede5552e992507fbc52b9a94440b22ca77359bbdccee87f18501d7a4bbb10f5fa2f3a6cc0edaabc73653afb7b812de1fdecc6f7020a73f22eaefb8029f0af8ceddae2fff035149e6f0e1cefa0eb6067190c5600df7161439db780854e873f14d277eba707e72297f7b3fc0054ddde1e71386363c5a23505ee0048e419ed3410406cb0dc68a2593bb5dd34c7f7d71b8aaf179b9a44fb639bb82fb1372ca14311c04fdf2aa2c52cec220073c11a759d3e1b104b0eee1b7197548c55f8f741d09bda97c2ec46ee123bb4b425762d27d7ab5dc91e5c1150e36b7bbca3a3fa2d6110e7cb08cbb57badace67eb641b06c5f54ef9871ec6f5a3d9a761726c2a5e2790380502d338efc63b25fb6c2ce34b198bd3904e24a5885e496dc526bcf9aff8d062ccd8cae23feb8de58f2c7763aa61866c2a4ebf05d628d0326c4cf4549e3117b55a9b3b624e121a39ac930c422a852c434eeeb68ee8e7b41ee04edae231baae5936b4ec5f25242847d909b529d46dc67d8499d3e9c5853e58a892374c727bdd75e889a582ca0700379ef638c0ae029b4554b4dcbe75e8b6094c82d239695deb32f984307347a5ea3283c25eaec32af5c147a89ab401fa6458548475521d4622b7f00c54d9a4e42d6011d5ef9c18ce1a19e4ddd57470a18f6e4902e63f961fc82d5588d85ce7ae13e8cf98b331b7d75376b3bb55a6cac78172b363eea7dcd126bbb16285a51aeae2f245717216a72be8003dabe1f11853808d180f5533f843848a8a01235c4480e3a8fcc9f3f2f0b421de091343fd612dd5e7026ee38af15c2ac16bcd7a296e575e307b09ff6e9b584639a05c4173ad3dc8a7f8e86054cf065f89d92e51b29f599bb24a975e32ae019e3888efa4fb046ba0f683e5933b9a286c0a5e8c71a2df6de157f2ddd8e5349672044b32333c6f9fa7fb2acd45e55ba9996b814fa39f367b7a46fa41342f32ff0ac4708fb8dff5c123df75083efa1a732ed5cbdfad51ad6caca8ea2d3cbab224aea1806df98b9fb95dc9ecfe4623dd6d736fc2a557624b26c0a54b08b62bbbeda6c30234c0e9746f9de218172508ae7fb062f0076b771992fe64a43a6b2d564239517e4bd3a17ccb2b5180bca25094912cd5dd6eaf3b1d98ad0e7d2b23668a0bb1737d1cfa5abfb64e3fac5387a3988b30f10f43ed53612116ca5e43a67e5f305453860effbc46164fd425469aabc05504dd10eceb6aed1382c1d0eabb1edd996b162189a97118d5763772fba40d16d8f0c268d37226c758371b5a882cee0d2e3de7d6f5bf1e3dd90b911bdc6c74a2fa3cc89d5e492ff9d67eff8585bf95f6d814ec2ebb0a6ebe0c5609a94fbc866ba42f1639f73a2e8b779e95d8493dbca07d364db0415206a2549fc8a3be5aeb79bf12d5c4050bcb8321e106db3c6d0a1406ec33e5f05e91f19b2df691900f4cd4312d2cc4f085adebbe8d7a16c61928595c7ec65330f8b5b3c849bafb2da35185e4c844c31f707dca35eb18125007bd7765342d846ae61af1c33b3c6afddea193be2b4548fc94e2296e430956400072770b56910004f169b3744ba5666888e506a99e56dceeb8850f51dd756a00ccef60352b194d68e14affc3c11d75d668c4e68c689f065da60d84c60083d7f633db3acbfceef5fc7e64df98e4cb21af47e73c4ed2494eb1242391b5f55b248cfdde0eb41137802a90605adbfdd8f15bedf50fd9247c3c53fb6f3c060526d929f1a1e3dab21d7459dee57874546b6d4222976814a65f59a9f3988fa1750c7f34d9ccc12427c85bf0319c424b31ad1eccae754ee79f1b2c1cd347926e90349d177b07b07ab75fbc59512dbf48dcc68b625836c93a59d73d1565234c569dc7bb399ff8b9c4ac0a20fb063ff8549cdd3d6ae983e1f51abc15fa6fd5c53fe3ec61020f4ae3ea4cf30e3e187af355bb1aba4e2a039f012bf23b34ba040513abcc18da92a337d5e03f0e8a4e88ba357fa68c74e05f0a44d4a0372c0e5915b83d8e6729efacbb6baf19a847710e55da31a93a46d63e2ba75cef9249327cfc18e15cd757ef0c799503a765dd49b7ca2e184a4d2ad34908120d06d3f2f014c219df5befcc5a6b793c2211ccb59e2823177eb24c8a9e28ab6e2d0e82910ec970a57eb537f1f873c24655806635380c687fa909bfcd00821ca1052e288d55450ca30892372c90ca5b9de41cb9c6df099f4de2762f5bc1ff6195dd8f4c4e8d2da1fac31978e6ec184f27170c4fd15ac7d2697121239ca9488430fd58763c7e2c3494f8738188d206a3ce3679b0bc72ef08ba9e3323f87f058d5cacb22ebfefe8cf58eec7da780b3b6178888a62f0ef294a2ab1d4b7d70ddd820033c5fd3faa09792eef3e0c205f60910f5668efd6991c9fa0f12b68a119796d04dab86a2475383bfe41009ee7951d397ae83adfd537710f05a861bdbe6c81554fe9b3fed6191d1cb02d341834771963a18629b85493d0a23f1c9d3f96ce9c43cba8e03fbd5e5f242dfb030371cbfd166c785d04bd73df61379508749107723e5f5f65b7410ba65b5bf394e5055a705bc305fd4a77a04953d55dcae618deac4ef3556aeecbea9cca235d104958ec1b398e773113eae2b48002bb0a1d911cf27b70d3186bc1c1e7786d809eb4d249a6b8b51423e67e00c9f1a4f6f0a06689ebcebc2196b68d592f6d22a567b0db38b8e02025f84b9bc42fada457a6f7fded404ec0870d57957a1db2281492c4db82f9bab8f1dbcaa9f48ebceb2651aac0109904644da5d643eb584e691548793aef134d63c2f2ec1059902760ab1c4115ba9cf691ba85bcfe768949ccf0b1556047aba10ade653838bbdbf5ea2d2d4566b2f42e2d17d6912de158ac38ecf4e2b5526cbf968e5d378ae2172e73f6ac3e1ac147b421acbfdb3af56c7e97523aa8a2d8fbaeed1a026f6c95eddbe24cc2b299af3e8e56c169248c7a6ec7d06aaa2e8da00376f9ca7b6a479e04031f78972b4b4480c6b39efcf38b38058fcb7c6dfcdf732a20a0e6f1b084c306ae11c152309847b6641f8b9fd19ff7dadf70d0aa9a011918b3ccb58bc789cd98e4a2711b4ae882876e84cf7a45307e95bea7ae8a91595a763764807239c08364aeb9cf1cffa3bb9ceec9b3b6d7a696dd35585d356751feecb5508fcd8e8faf12133e227ada31bb9cebd67f7b0f69075a4b6b26d2a750cc2133782ac54c60174a1c1ab36060fa4a306e937bf076e199b508c85189d6bd8dbebcc49982fd9a84b3d033caf41b672f007ee8ee3e93771396745726847e02096a551c232b28a5bff53772ae5e92de34b323bd228cee913fa49801ece8268608ce086812e856e98db959bfa9c74dc81ff165fa5d031099e3887bacede057b15292dc90ace30eceb9a73f030157d58eb9644d87e8cb80f5c8ea25416f9198ebae5dda7c3a41d8bc0966f024ff35b196cab2e24c0b0bc60fb6709fa9bb26719ce6d70814032d3c1b479f740ceb8a694a1a832d310dec6b4d75c5f0ca19c56a2cc0a9704151cdc35339f9d4a10d7d86117080341f3895f619cc8f208ed0970c04057b1ae96a49f4cca81d17cdac378f52965001fcd22eefda847738dc2ac3de8a7df40cf597ca58ee5bb2457712df0c77529c9cb224e1dff765243f9b6d716927efbd504e207875221c616787859e85e76d0c0b2776d44dda373f3db5e2cb3343247eeeda4d7ad6ceb1d283e44e9c830aaf475845102fc1eac26f3b11d1f6c647e5deec8366f9005ce3aca478b5008d48dff68bf2391bc38fce5d3f97821daa99f8855430b21c7d327a97cf2a01f32c09c7c0aa183ac0dc3122b0542f3c6665a3251c2ec97a0cd3ba3e3d0ee27c9ce7b52d4ebf9e5b45933887117fc149f981cc364b803506f08d5af74368886c2446b4da47d16ce4d2710dc528ca35efff867bf1b9545e9ef1307c6c54e6051ab2d16e9654e96a1d91fd16a49c3c7377a0fa1a200fb12b8a37468766168e3fce6f114c281d0e804ea8bfbcec16dd642903671089f4a08411e957e3ad316a1fd0828db45a494896be3f3f67643db6ee4c5154c5f51127517d2fe9f7094e828d6714cd0ff2819f94b67f0680d5bacefa2ab14aa12b0e517a1432862d4215dc72dc4d5ac6b96c1c627e8f9b6d07342e71094cd00cf59223e81f1ab5ec1f2d82b47754bb3f77b3c6e85e988698c254dc39324a6e6e1945a781e50fff9d693f7c3d805278e4f4fda60f9ec25067cec2e23cedd2ac2f60d0e42eb038eaa6e8f2d0f33f6e1a1cf7f3c2bd85348044f2254860810c13b792dbe2d8c6bd007064ef88c0fcd1284e4a3d24db5c179e96f725148f38212a6e770daa6570c7c963a5ddac8bfea22ae4b382d4526b9232c5a66b50b0583979bdd60f43bff67ecce77265423c8e0aa945fb6ad808facec539c59f03ab2a7b890a7988b5cca0099165952f54baf4312cd9ea9f3ae751f3de591c693668f610e1be26210976b690a043d4e2e9ef783e3b0847c602d6b828068f756ff0ce04200a42a68246a37f3d82ebf8260ac2625a5e3adc8a36bc7695c443965c39c79bd28afdc152743d4436bec3c9a5be1bf9ac1ed76f90e083d463a0db48d6193b044eeb563e3a9c2b4da3dc350e040de2865d0247c98307121aba22c05385991088bdb4b7e7e1c455e2ad64a891eeffff519493f2b209b45190c1d35a7f13c02f6d476e8782f0f7a34b7cdf8418099d5ba27a5741f1caee287da13a1194259780fb13a02dd80e3afdcf37d5306cfdeedcc137d89a5070bd7f2b81e04e596624eb7c4ad213b1e4974bb806cc165573fa6bf5f29e6695a0293ee08a4b77977b715936138da0d51915754c124e9d9a13caf188d32f0e89043b4de5e405f6160f86b07297573c0b56bc63d483e22d05846554c00315f8f444fa9482b696319ec869da78fdbb4f1c4395fe9781112e5c6fd37ee6aad88e9e086ffcfe288492f74e24bd906e3e41d187a72cdf336108687b1d5541effe374ef7a06ba364597fe84abf4302126a7bf0cbfbd6f2c15c24f1514ac31bfb115aceb997cab78f9c623b6440531510c66341b697e519548ae8bf9862afbaf69961e4f75c0283d4d6a2b643b1d41391da628ef1853f9c1472bd99f96e0067071cb35959f5f94f598ea7229019b042bc2fe19d23cdcec3289c0c481c75a06a5624b8f4866c9963464cd946f281ceebba4c4637f57578d6b8903b95a87f760b0c38d87f27c9c906c499a0ec12f01655b2b9fa240f87271ceed7b44546956a9251e17bc0e3127081fbfb64da976e70cacdff662c180ac2def0f8dd239dbd64464ca509816351781c12fc8dd92a04c49033a5f117b9073164e67b20f656014c71260fea884e8dc81f312483b173b8faf00b3302ac99855cf6f9e9e48518690a5906a4869d4dcf48d282faae2a1994fa327d3203b4618c2bdc50c890998cfc874615ee468a081ee07d2a06770cc5a0ac9eb3295bf8b825865d15a38efa59c2a9827b7490162682786754d0441e1ee3f97cd2a0723d475655c36dff457028c359545fbecd085003f8d926e17e29cd65c713051fb04eb529805482661dc3a1088003e95566292daa481bc8c08ef5792e00ac722f7df2aba6ef597c5f7eba6b9804d843c0c141667e517563f5da4acb478a8f415741f0d1d48a198373d01f2f7bcf1b92874818a287f92f1f09ccf06bb74f049b206411cebb3adebd287bb894bac714013362758ace29902383cbae00863553a8114e1d4b63e5ee5509e74e435cd60ab54b7621c55acae198eb3e4e32bc26c38fb267dcefd57492719b7da8e369e347d957eee5fc34c26ba5ca8f96ab62099d798b18156318d0123a68a3901dead51193df3187d762fb7373a6254f1080c52a8d25c7924e34dfb6d7f7c2cc99e696b10b6ca7cffdee5b442a0a68410c1c44aff407de1959328bc670d04325fe650d6f6b85b88717dfcc25f17bc03345406d77d5b9c3732c19bb892f7c8c63f56f2292d8b3cc75cc3e355df08395ee63f328c959c4e0686ef157483a82074e250dbd647c7d4b63c5127d3550a94f3b0f3e5deca7af9bbfc7c2464bb96a1bad3746c62b7f6b9d17aa638ef5397556e0f127f429e9025e42e19572dad5bd2f4ad223253009052a59223a4fe5d27013a5b0b9d6c8444690b76171c23db501adeb9faac3bb40d45bf3d59ea84c4421ec54f4f9e911e20298e7f25f1ebb83c1fc5945e586134f5f96ab6c978174b6114ab367f1164bebbee09a3a666e9e6482845c6ddc57825c2e444b8f2dc2a351]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 09413868aa7f952656e20ee5a430b55f1d885b69a702bd543329e1892238ca0f

tcltest::test Hash_SHAKE256-3.75 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 67b9143c8dedc0a1639b71a45cf2e617c99192b25afa421ee144014c5a11380b29c01adaa2e43ffacef48fc86c44624a3733e60867a6c01d7ab6f68d34a60cd9e5186dd1ea800daa76d84d5093961ffd63db6a0bacedb00793e7ee06a8afc33c2329d5ca6daa71d8e3b071e4d6d06359d6efe76430b55903b53fb05fbd14a65b6c5b1a6d344bb2ad9be2c42b3fda778617d925bafbe8043a6726063f7cbdfd5f471603614649195028d80eced59ca3abaeffecb6166cf9d33104b64eeb93106f3dc2594fac8eeee912f81774a0fe2ef124cb0400882b80f79b418935157c26b4d5c7e4de6c0079a2dfaca6c6a9e9627f00a3343f590be1ce2e45479cff618956978d6cb7908901a1195b856cf743857ecaf1451b92f6637f7179b82ab32b7f7c0b7db9811f10d00e476c7a0d92f6e0150b1c003e3ad34f33ed43a38838c0514ebafd92e5227c2c12f2494e5183e8bb6d498c2a4d598aed11280cd25e960a47f52b76c18ba0b75ed5a159c9e2d1035ead0fa98ef3f8028542ac3d0b53d5f0a899e6510c1aa1a8ad7edc04b265842d10fee2dbf3d61d255fed013c170ffe59be6174f43c3b2e3763352cb2d385a5501a884c8a209ed3dac33bad73be3b192fcf765cc919954d4cc72417cbf2e83b53c472d41edef41f09f8543a48c77f2c59240026366ad109cf207027b7d8364e1e56e503fff5800b9a475f3025fc8241bf05265ba5f99667a8b744e4df4d18e79918085f952de99e76f884157123ed5f49b910827d8c8d71c0d4c6d5a918350cac520472494ed7e08353ed739405678fdf8ae72326ec5d2efdbe1e827e0337c83f4b00c4811ff4daaa9fbfd1f66a99d869bed3c608e1afa648bf7573c7d4c3203a4c25dba669e593d42625b8ff1a2a42cf9efbf48b322be28a1df331ea54841e859d9a4121f45513e72e45af17dcc3d5f972883417a978e9a921bf43514b1fc90886887e5888ea63cd00473ea6790c9acf82a10f140c3fc38f13023162813f29ac4f1718b5ed4c8a6ce454ed14baac983a156f0cea242779223be38487bd8a47573f6e999fea2490ae219445c9644cd720751ab301b9d9124ce08bc327c9a82af29fb6897e491a7e79012ecd2d4293606be8c98cc193fc96f34c2176a96b42da66b7166eb9d0d55bb7ca4a0da81b2a3a01b7a4209379390e01c5ce25776c006099cfb7d2ba48fe2f4fc5128ea3b6b86dcc2ad4f6dd3438815d94ba59f89389c3752fc13ce8783c03293aacd784dce602b2888196088da0f7ef010c9994aa860be11f5b35ab2a38de2d714071b5555c009d1bd2897d491a789f53ed6eb3779e41c4e6ad446b249ac843b1f7e29ce9c16f7429f056a3334d0d55d4845fbdc47a6c08cde0f1902f09c95344f8b4a360be581ffb0385e112e2bdf9cafaf41a57c194941c1cc482132dea45706c6e3181fac285d9329fa1ad8091737e76b533f81cc1501b8846aa98af32017e7b99ad151eb5900aa52b4acdd08fab38212b6e7133fc24114dfe6e8637aa6fb64cbc81e4d13927d885b1443a79c18a4022dd3489ad4cf848927437a46c58785f085f14b6bc573289fab9f6bc242ff6dda253ee0733bab40680316ebbf74602c2d60bce5386169a662bccca1b79e0d858c91602b46c4d40943fbc79937f7cf628df461783d87f45b74171271e1fdc19f9beadda58010d843af69dc2f4ad003dd74b9b570d5a981cc46331758fbf2b9f08aaa0dcbb9902693fce5dafa629dcbd18418ff6bab36b07d4ba931d3400d654cdb47872a4dd35d5edee83aa709a186032e9ac5c528c00ef316e1f85d58be31f9005bc03dc74adb18a7e971a1ca9ba0d6f6c79f29d8c5dba21a65d163c075de798c4f4f62c0872e65fa8226770fdccac15f27e1e625c8c52ed8ad638301d49962e1aa9b55a3e8d5bb492abf8353f55246da244496ba3959ddd4311547875b1139a2f61a72ec005f7d164ba3732165e5fbfa552dc7e0a7e8538f996d0ddb69c46242aa7347236e2a4fd47d78b312bee445323303d643951f148d3ee1627891317143400c4ec472d4981638b5cf8250dbb704367d6e5d716c853faa08c1e951d6eb174f6bf659cedcda5df5d1351adc3ac5f2d7e0ec88cd3f4a296349c8983c2334413108ea6dd2a1ab1e3d616026b19ff690afd4cd702925c7dce33ad32fa0a4e1538d79774b1ec17ed997cced306169cd4026dfad8de5ae82bca2426dfa3fea76c0cd1439ac03caca127daa38e27c36ce83c557f94cb3480f6b38f715926a52791b788fadeb321c114b575fef9752655efe13d43d36f260c24b1fcf5682a08b4cb6084250a32a43e8f6cd745de994a402f18adae5c723b74feebf41ad3572d37642f4b2ae4e4cc0b5a7387e2033a3416f10a2e28f97d78a0cc8afe4864561e99a24d67733572a111bdf30d3b3001eebd7dde47197038e779d6b5a3e7e1cfe3c0cee26066c4832b360014f2ba2f957f1f1bbd81e98a4a8fe563956a5f136982962f15bc6d5bc073636afdbdc5c7a0ef2313cf63000f5c78cdbd52db19c2cd05020f0f05efc0d1808144d7f6c6bfc746b0ac3b75c6c715ab1a2a137e7bb6a373ebb4f8c254bc5d5a76d6c92524e0b48db0302a3fa47a1e2fb2f300dceeb692d53b67f77c03170c0a2c68fcd347f20fcc0ae5c34a00ef1e0c7f60427cdb8c4232d97034ba669988978942988797bd7f09a6142f1d43efbe4b68b801e6a8fe5c92ad17d804e40a760977acc4ca7c08ad4e6c049540d642a6f3544564a3bfd588fe9fa40be2e5318169ddeda8235e9d41a244ff1e3c1fb07d0c2d4d943a86d86d7c975ef4ddd1d74fbea24e6d1aa542e20e164bf2988801eb9fda19b93367d1b4177d8fbc7c11c48810b0173b37b9c03898ca3138dc78fc9ab243f1fa17c88604d4397d8a480bc0d567ee90390302deec4b48f91991576a2f50501c7f6d13c106bdb37087c82893decc44009005e966a62c78ebbc3e8c13557ee9e471bdaf4862d9d4b2db84d0044a469ab167c5d41e0d45424f4a6b81bfb246f68ff89004e3bf30828aad046cddc1ded8e9e7cc2cd0ca9d8f6ceaa09d36eeaf5f663b6c7a5cc5cba63f25d162e4ed9be7f138a15a42853c458bc566483fb2c10cb163dc797a1db1291a6d721ce27385ad1181cdc43de52b4ef40244eaa4a685e5b8976569046feaf163aa6f009efea41390ebd6d488927190efcac3eb2b7102d3c20091b2c3627fe862075178e2340101b89d46f1ed3516f5c44569b49dbb41bc19c5e7bc7f9f77f55eaa9eeb74bda360cfbfa48232762364ba9ac1abc12e488a0310eff0ffcedaffa1bbe1c11d4292161e7b79f120fc9fc41af2503961702123c90632b40d96b1f071639f61a56bd70dedf74ca57f7092ff2c74a0c64329d471b3d137716f9f03af17c96235d4df792b845ba506177904fc384938bb3002675a08998690ee92d824db17b1a47247805a2ad00c7cafc0fea38698a07ef0a2e4c81285a8775217383704721516464af581287e0a6f11ec87dc5e8a61794bb352a217be249063d52cd0dc0415f31991df88c68c264703a6a88f0747021309dabad0606c8242e975bbd7a9f539a4b3c346564c22e96c4e9668a4caf60bb3f1c1233935b54bf4ab9eee34b46d098fdc8932d5026ada47ba63cf03efbf04c3cd1095c7ddc4061072f9cccf45930e1d5c8bacec3089813e0eb6e595becb76aa636f1961a2bf3bfd062e5d90a38fcfb6fa70bb831daa66ba1436b3407e42e9d07b84b5efcacf73232fe4a960188ad4c37fe1688312f31224928c40ed794ce39ddffa735a9e1b34eab5c3b925eaaca6aab485bad2578c0ce2515f9485f50fee7956775b8866cc09ba5f7594c9621cccd55e05b959349edc5e1958b8ee3bb691cca7a374626a0977fbf69f4232c803ceaa48086d00f1510bfeb11fb312936755fe9b28c6d0f1fb081543eccc4a648835933937dfb0d5cc202ce35b8dd7444ac077faab59bb45c943700b0139f77dd488f7f83a164f2938a34f75b44f2798895c9f8cd73609ac9cb074198991235d0e4f3e4eb81ac635bc1cce30d400e9d549b1df185164a46f9cd88a342adcb54a5f13cf0359f4fe41811413dc60a80544b5459d68c4eb72d6f04218238c23958def5a14dfc6abde95af138541034f622df2a34242d6d45d28c17688af586eab6ee5af74aaa7474d796d9f8c2663feead82b50376f2f264caf36fd40a036c3df346997572ba3d13534e342905528bd848c86d5e3b778e926b1785eaabecd2c1929a59c252b63507d0f3a83f994fb9218932bbbade15925d577ae212cd0c6b04193be4547728fcc0d529aea30ac84878f33438affb779e3404901cf30a0c8573fbbdf1a23c8ce4dcd452a009b656aa3cfb5f6c840ff812b4f6e99ef1df47c2afbe92ea422f5c8dca52f134ca38655eec1616bffd7821803ea309d095b958a305d65d36aacc026807d5a7c57b0d9ef714d7ecbb62e08e775f9d536a6524b99724e76f7f52af290423d0c8ea72b24dd335c563d76ac59968864a68b4d6add51f6b465c2cb0253ad28cd8e71c67a30ca3cd42feac6b93ccc4413ebc5860b155cc6797b5b769eab263d15284c3c07c55c959f52fa2ebd7a31b2efec0bd99db95fea83fdeb7e64c2a286fd21478f39aa3b45a307943620db6ed9def086cf88920568bc369969be60ca0d6ec38c4977a91054ca95e0674b272bc2c9415def3468f34a0a6d8ec1134c46d94e5440f12b8883cbfa460748a4260f739925b9c10903d49857e9f10dcb4fbdf2871d8e10bc103bb11d60316294a0c3f634e5c2ce702a4e588af3ebd64e31d861ff669c2d9209e10e1a2c853b845cef5384c99f9dcfa709948bd3a4a303ba3e2da07792d0153b1cebd9f22c5dda233a90701879b78f40ae5342d143fc54b1975e50979982ad6e954f42fa4e5000bd4cb7df1c77a219bee59e9735f169a8e08dfdf90fd9c9c269f4423d8b119a5cf2cecfbb1bc2e8d4e8557c7246d573680dc61082287930bcf5e0ccb2eea0c5588a68e1eb5e81102788a7f5bb4d18a1fa01eaa2d327a13c03da01f6896c21595a4cc1f4572ddda37c6483115a92e17cc784a2b8d4577b77ffe000c7aa4bbddccc018210e7d0fe283a468fd9375d598b375e965c6dff2c6818ce8548fdd39bd81571523d838e0b27c8f476543af6a756b3566d958666df97b76e377f6b4ee4d49d64da8413b02d299036de8a4ca4f565a135cf6c07d5ba8d4286bf76da02bf59cca2c2ec7f7e8bb5f9d6708453b168416ac366e7d894e5d123dfc435333855ee0af2b17eaf404e536b9ad34938632a7177c8d711e1eb89ebc041efc25f38cd1bbf1e4f418b3e9d8b4e4cafe1e403637d2f0ccdef0b22ce648374e827454a506853ec453dfcc0a1e60bb2ae553ed83aeef956ee8b3c80dbc3d33f566cccb6065e2e253b7ae80d81eb089576ac2d2cd84a3f70e2ec5d4ed990176be297dec31684b891d801396e6623aebcafee9b45651c6820521a57d5ef54b9c033b262bba9625af7c5d9d52b781465f102246f6c08e9dc2fe61e105a46952006f2c43fe4e6817a20aa0aa68cde4896fa165591e9e93b026545ff722805deb405c6d65f87f66882d52d9d92d8c147a7a09589e8043199448918c5648655b4dd8558efa9eb009fd8dcf9998359489702ab24c85e05088c09650678cdbb5ea1034d4f17055a2dafe6fdb40660559cc20de36d1bda33959bbabfb8219710472c8e2654565b1aa51f120207ec1115e4503210188945d8014ebd60d5c8a9cd39dee6d80fb593748f77c6b199547de149c7d8f9cd1b853a732d7b100673eb3a5b3d732b273b96b0134069d413458e01f3b1666733d883a114c15c96f32c459ed6d39ee745f14a165b0163311cc82bbc09954622f2c827570c91c9bc43fa9f43d128cdd310dd98ee8c421b915de43c5bb4fcdff2b3f35aa3822528489fe6e16f75c269b83109687fd18cfbbb7da1aa261b6d999f1e6202cc9e06e203aef6f36bea2bdb5e4f7da31250656a7925075b656770dcf0da1c081b8abb60b51934bd7f57eb8a8d13402fef3158d091fd1f3860bf8d10ae902955d86bcc092687a828f2e488dd0d2459f65e9dea96ccacf0295f4c4d9da1e792d04b6cc2441da1591a0ebb8c3ea52cd3dfa7bca522f2db8217a93537ec91885e60bbb2247b640f4f7c19017f141fd0b3d111b510ddcb31dee887a3d463461a95ef72687a15c17892375ce1e7c641ba03b6e5b1b32f1e570b8641beaa6b87464064b6b44d7afd842b311f814ebed492cb756cd71781b5f411d71fad436d1eb465a6d0be2311e0dc2154aa093b639fff11f6eb50c33956b1f9c5689927cfd10b0f9f08af874431287c8744a2371d6caadf21ad433fc1ca36ca3766a9dcfb69f34336a5affe7aba0f44b13674c954013b3cdef9d9147fd92a8c145f06ec57ae160b53f1e5121c413a82bcc9a67970275931151639c9dd4a3648469cd7df4d67196ede327a4a908f513e8f4260cfd9a6acc4ae4d8de641e70105b465453b435ea775c0b1962e3f6cfb7e12eccc54f846ddff91e6faf4157634cb4602788aa3596626dfb65f47919fe04c2d0e0f8f33cf94eaa629aa7ac0c076a2e4ba9753d421fe8b2488001ceff2a9afc8ef5408f308788cd65dc500aa8d709376d6cb1f3e7e18ac77719f36bf2bfeb0cbd8c148a1ba32ed07cc720e3ba5c9a5e49e3b7549375c8fc1b7651b6a1386551e117ed6a3ad6a1522bcda2ddbcf2ae1165a10dd5d16713ee8a379555972eaa8aae2b43a63a9c70d107625e4f2d53b4df55271dfe2e100c1d67d036cf310d2b155938bfd4776f1dcb7427abce87da3f467ce87044061b01e718d2de69fb4e477086b2aa6b9db918a0167013c25900bdb551579d3df5e2a5fa31a1d4dc728cb02acb3babd20a24f20d52fe4ec11d51a0ca87070d528a0158c536efb28d2322d5a27b462cbe491d2a51ae048541516798e4627949081ee1aab69cff000289bb38863b34b576c71c321bac357fd9719cf6919820c8e5311e1c6cc86245c312a049346fb9ce92209c99c9c20396e01a7c5a508c8015707d211e466dbbec454a9c983bad37e096d238d1fa83f162fb988034bfa439a7103f7520e1e15e6c0fcdea960a6821940b585b6b1c66715c929843063d9390066b1484e4bdc7ec6d98e934d33f151941563f8ed5bdee25ec3b763f4f38cf35abe788faaa3885c8396738e5c0485881811dd44da24d8f61aa5cdecf905fbb9d1ffbf92111e0bf8488013987fd9496fccba8c3124149cec71f8d2e8e4a00ed38db3f01a29c54b9a3b1dd6785ebc254dd99bd8877433130c8a422e2060cdad88b56172ef9a9f318a84f825f8a0b4016c66392a0d718a239d8e0e48591393c0217292add90db4a50f4c9666deedc9c5129c1ee88cc420b5e9a4e18a5ea5fa2fe6ebcd09a02a0d9072bb8103f3ef045a88a3d17ccd14fdb236f5455bf6bf0ae21f499aee0b98b1d8fcf84062ff4b6ca616a2da4c950a2a00cda9c123e809ccc114b381c4e400a867f22c5bedcaac0a9203c1c2c2af4eae89f6e7de4bfd2a47b50d520bf3f109fb239f7e5a0a1bb8e406992a0f44e2879133f8d72239fdcb83a4514dbfe3fb5cb1f64a17c623bb1705eb1e024c3cf55ddce81da21756b093897829cd26fcc9a0d2c73a1e279f73727227db74fe11b17a968fab70450add2b6017ddfac6a7257e677db8bc03e6097134a418a5af2bde83c710eb6833be4e3a106bb5fb2a4ad59e77020c19e46045bb54481dc0e6f24423775325b369d8c969a25af8f9d74fa2a70a3d7e5c5175f1f9dafd31eb2cceaa00af3fa1786fc217601dcef01b571c5442281656aed38dd3d2ccaa9d4e0827d9c276bea6e0cee200c689aee38a301bb316da75db36f110b5ef3437aa1302659a12d5b87d130da24b43efe21a6dedb286cc2742561d33665df7198b9d5fa2f0b398d3136f38b469c2815651dded134b970b18650f8a21f793938490c15d7130ecfb78b8c2784b9e2b25c6e574322c4dac7cb4c74ea6442b216b7c2d5d32f68e0fe3cc8fbefa5bab4fda47852663c0208ec6034e5b98236bce26094ab809b970e2fad880ade76bf7f646e2193ca9552c05920de37d89461d616d33d01b08433f2fe5a374d56604eae7119e8afe2b75d8d988db6ffea136aba3e703a5ce571b64bc4f355180a0adecece484beb412a78ed14f74d824077a7b5c3d80b2191fc94551de9701f4bcee65cb679a9ea68574b6b690e00838e49af75316b3df4488d64cb83ad06a79e34fbd4d41ea121cad62b650f228e5815f1f85521ba21596b9c9e0b80ce876593d595c3a1a7c035db1fbf7671e535949a1908f1ff4573a58db2a6818fce80cdaf193ab5a9c5657b2bac7e1c3bb694bd6d2757c8348da37d315824ea1b1d71346288610756d82f863f04ddd2b7273a2721857b446bf31f54c9058f91bd4bd75e309b8f4523508ccb87a155169eb7748639ebc9f3002665b0e7334d14e0ca319fabdb3c0ba9deebdf881a7a643cd8024f18a2fa509b9815060e79e3e010290e7d26bffda754c3eb26d2c8c4582c1931e6605352e988c88be89141fa8fe5e8cc7b53c22ac4bec00925da44b94ee6eba1e083658a2a621858cd2213e770bc79fa1e958a69c04223a4711106cfd4e7dfc0c21461f69fb237fa283378413f1e5d25db7e613146798f6b8d19977e76b9562d0f75c12eb5f387fe8e47d78e577612ce3670eef7b3df63bcde567f5ba0e5ff253d2a1ba909a088c463c1ca25367e3b51b41fac4394ee3126e94a16eddfd82b67bfc3d9ec1733caea4d53b8ac6881276ee8dcf19b662088183277068ba01a7b631bc5747e4b47cedeaf503b9a7a197764292b87759410d93f4e6fb6db8e176f95e59173b63236f5200e59cb65c7b19be0199db658cb2994da9196b043f679687e81ca604a489bee4ceed2d094fde415411ea606bb77f54b98b08e7b6b759b068b94d2c2a11ad11ac3c54de3be691b7425ccd7011406ee8de80fb980988806ba5b734d03310590eb03364d9d38b5e2290c88a33e09048fac47139a5871ba47044cc18bba90b5360fa99634359a50b2b443f68d05f0fd43574470b37b8d68d6650df4315136964ad92589a47559c617968a8b06f1725dc3ef5e8b976232202f6ced7fb05fa92549e7e56510a50d728b503eaab3a8e3b26c04f3e8b895068ccc8c89e89b3e5eeebdac87dd0b7d2c028861eef9e574eb77c618b30c899c70eb383451b35485ce5f10a78b35e7461be2895c09ed4eedf03a4c9b0a5bacd117e7fd04e3646ece7df2dd594e244698739f289f1df9428c78566a1c687a74eb51ef856ead706c60f4468e426f1cbc0cb994c0bb99a252c90a78c91d6bdd8433b58e6be21e6bbff5b7c6ade35c8389eb547ffc321b7d023c1d0dc40e62f95d52c9310affb4baebe54effb6cca4fd62dcea9d358301fdd35e367205701c5262c0e363fd281ee272c8005e336ec6eec959d288f73efb894897dd61e7d2c67d26f6cab3bcfbab86d716927e9e3a30dc1feab2dfdbb646b3c4817849f5b71fde2c7cb59cc4daf8fcab497bbd71bf7149e8f7e1ee3d999211f993ad96a99d76f9e5bb5a8baf4665d841d912b7388f16bcb70a0640a7496c083a56c3d49de66a54e54b100cc6de908e4d6dfdd86d098fa90ca99683a356131b194381802d227873ad948c9cb6040793204093bd79bf5aa35c5ef913ac3045df18d23d25e1e21feaa13006b80747199b6d297ab30920e6101882c46d4c8872b8bb8b7d3256a5df0e529644eb052864fb8661297575ced083d3cd7f1cee9f082c63e7b841f5de1473444f9db26a286827fe8026615a29a88320879f9f1d0494ceb47f74b13a0b7e9df8c4978a90b7a1c5481ed80320c1bc7251599c605259a7042fab491cbdbe7c02e28db8e003569047f585d4d76417aaf618abfc0d28fe9d6138039bf0db577b268413786f4c95b224897d935a9eabf272d90744f1fb74066a6010e3ba2d671a9d7fee6c64d6f595ef663eaa092aef016d04f3edbb645a60842a4bc6f52e7dc8cc1886fb8d3ce69a0d3e716f6fa36176693eea8cc5de024a43191cac1e490c1436f065ac34d8f96d02548e89fa92a3bfebe96378add30c022b9f1c09b227827b529a1304e8559e5d635b1e503673165c6996e757dfede846a23ec2764d24816cc378177c341d5609a4b48978afcf39ca66b9fe90d87927864b7a98684bda7976fe0cdba894aab0e05af35859d2f19e8867e501ba342f3a3f9bc516563ab3eb0866dae7e086882f7fda8a137a2c94b514e18aa94a5f5aa0d0f7c0b4c6964b56bfa264b4da86202246b7fb436039330e0e682d5db7d695fbe8f3d00c4feafb3d0b153cdaed102d49c387d95092652719c3604f8789166b9bf624857548a55e0e6943c5b2aeb0ea0674ae76d3875d1b58e27e53bf44bb460176ee53985751fe5b58b291e485e4f0d8e8b08634c56d7a5bc9f6fc7d6121afdce9d5bcede27d26a457f613d90928dc418e227a0cc332be93087e8c4a64d6138edd6f43de70839169f562de18af0906d0d368b4b40739628f2c8995aed6651b87a00f6af28811b92cafad532bfde1faf76717d8d307ee00a0848caaf31c4b2268005aa4b2af83f85ce51a157b6c504325a7a458e25bcd1397cf1c3eefdcf4c2904cc583a74d66e98b445d879f70e059fc1392b75a795305a56aacb3dd6efe76a103d48a38e84707383bdc4bf0b1feb9eb396776b3c71c7189c5a2bc4468c4a90ab40c1af01680dbd43a0ab5279627dd6397970976eb85c1858eb2cadd40e3e44debd0d8654ec0d1ffcd8d659c93d85f05aca5f22c4d2b8059144141d09dd8b2eb09c724f0f773740b74c8dfd841ac9931f718c33c627a385504d2b3e6b61f9f529c53933bb7054c97ce41866316013688e563ff3fd1fe5409ceebb3884034f425121a959df412c615188bebb58772917b262c089f02345e07d0f0a33dc2957bc31960ce9035187b14020c82581c7d347907b561e28998c0afb986156f93dd70cd00da80daf082d6050947ecb35b8dba0328a4bda2beb82681f7108c965a598d9366fc7eb6ccee61789cc28d6fbb208cc9f78e5e4837fefa2f08347b5a8cb62cc6ca2afabc10b797ef4b10e6d5c1d2170df2b6d65b7bf9b6076b466424815fd8d7990a8763727af3c982978b9df61ef37fb8d2a8450124e49baedac97cfed30c3651ffc74558a50fa7e1dade10ce63ac6fa85666ad5dfcf05c31763ddc5bac4163939f1cca39d245fac76f60e6b14c9c8e4fa673ece90e73d9a18d13bb0e38230fcc5d1a7a9c6f2142c1a9b68855466e3c1d67729c48c5e9945da3eda1ad22fb6b6abe22cf06e84c006f3e416e10cd7bf9a00dc533e3bfcc0ce43f4e18aee96536fd36d84fffea00c40e8184107a6e5057660dee3c405885b3c3d3a79899f7ead3025b9d65edc0fa0e4e081108088585d5edec702de52cc1198af57ca9e4dae6c0089104b96729823f9c565acd31cf86e5962ddd7158a8e8be98094fb5160ef39e8e7b80b2e27053e887e0d3c88c88de16fd46a8bf0159770379a39352a4009bcef27fa3dae621d9898f3c1e928f6de5da81cb445f85baf698be48e9fb256c49c1d311e099e8da7da310cc9db3a0db48b0d22042eb3c59d1eec46da627008e8817aed6c98870f6cab5bb16c394675d713a5cfa16eabb92b3662a867a5ecbf3c150f432c12f15034b41fcaf32bd4950f9c7909d52c68a01f5af5f27b91afe489fde31ca59f62b8c69c843fa6db6dd724ce8fb9e69070e34231ae0c5f4e40dd97e4fe5e206564afec0c93f8cd6e98a2dd53f1c81dc34de85c6494df5b0327142e7069f3e58f7e9d6cac53ddb00fde5f03d0a71cc2ed8719359aaf51b6d8edef16492bc13c4339ea0f23ccd797e4c6745ef0b79f1d35a4dd947c084bbaf619d816184cb26da91bfe9d1a06ccc915d84ab6582b3775c42e9b43b1a6b6ad853336f885d5adbfebae41de380aa68fcb9c49d3b30ace14c2adbd08e29278d8acc4718237cd997c2e7a1c9a26df4b312e9bd97da75d4b4056a7aaacb7d27b839453f17dd73c60ea9d06f5988b8da5f7655c637bdc2b9642a8a6caf7d770a5f665681db00c2be9515dda35a1101d9a2899674d96fc7c9762e13185b0eb73e078468b5fe57fa01cfb997e457d5d96140ef1450196ac5936e729d143a19ae413525f451ee2d8a6e12f777b8bf41900faef967de54396c85b1ba70c6c908dca26cdd91dc370be4220341f5771cdec633414af97636462d4ee44846d68466c2d002fdc9cb457d97ec153ba9d5ed280c8a9c5651ce2c3b882d7abe7799f8bde168bc08f485a5fd261acd470d2bac97a36434ae093ca263edcfe98f9ba7a268b8baeca1bac1d5051f3caff6880ec7b85b6e9ea478482569fe94b52e2b75fe11c975193a84d66f1fd3d011bcb2e5eb0474f83eec277741b81b1a723c9f8b782393f5c645db59b0b7f463a72c06577306809fa9e7bf5073c8d3df851d606ebd2898db885626b26667e175e4a70ac9fc291ec34429785a3836a94282533686199b5884b3ee0f76dcaa3b653ec038b3e306a011a2241b0b0b6c0be1de705a6839f6438fed7ffe2daff962d03a0a08abc409a4f94869ffd969e39c4c1df7749b8ab3fa6ba97e6b2d3ccfe8454ae6f3282bbcade8bb5d9f4be037badfa55aed86787eed965c8bef2c2fb84c1305d990af668a1b7e5f8181d8ead2e81b290d5dbfaf918d9e8b0ae270e52cfee7ef6469b8111c8e18c9784016f63fb49d0d912dad8ca65af2c97dfdb1f9a881226c19d6b8c7ce66466da4427caef8a0c3c788d5e69c27f6218c778955d9a56360f06c7047d72a4495d088117051782d2deb570ee15a80bfa9387a2de301ce261230deceebdbbaa97586b625a8aa48ba39ed7e0134446b480871e853d00e6d39b491d32afb51f9f563e491077bf5d4f88642807545e621ffbdbd5483a35c2d2ec6980c4d1cc662b8ff9ebb2f60e0c738818ee0d39cbc5f77377f4145d3776875d6c7cc8dc6957f74970997160de77a2aca2721a4af337e2f143c3102f6eca99f5385a6756f6bcab8c8b9b753c966782fbeafc54103f7f887b278965374388b1bdb662c8c9da5bef603238e512a0a4bb7dd8d4e6121567931c0b903afd1c7676bbcedb14bc7dfc69ce4db9e96b63f6f63a5541f6d8deb5a8d9d71eb80a625e91f9690f72b84769c4ddc466abcd4725db3b478cadeb033271bc737c06e57e06a97f6d440b44a069a6967f8750c3b4f8118798fe32d2eaa696ccc7f24e16d6366753c4c306e8f0c3b8ff676403d2123941262eddae15fdd9bf11bbc7b526d4b8737f54d48c2c9f40a1236245ea84c9ae1221f371483da39293943845659cdf53740b07bec59915a8090759712d6041202d7fcd0429d1439bba5c24b286005ece12fdc3cbd8b6bac39ab53531f5eee3563948a6dc785947badd7169573fdbbbf2f65f7241ee0bf758fa34dccd6ab7151adf8465425e5e16b8a4dced7cb9b45d87c838fb692e213231d18c388db3424032c73cf27e0367185cb6a49a691c13ac552f91468bc17fd414c8c630b8f917cd67987835d88efcb570bcd156658f801023d4713befceae46ca86e8ab9863bf2281fa3e169827a555ba5d6c0bb93a84f1ba5fe0c2dc7e34ef1bb4fd93731ac1a94897987d05f8eb6004427ca0ae46a6b7e377e7c39cf99b36cefa0acf9245a5c984148d526826553e141209fd8adb6fca64c48c2675666a85adff19473d0df4e9fc1c257d09dc6c57b2761c0a9520669305f0d9d3b0ed2a437e6c31e3bc9a3573795569e63040b614a816bbaf193e137890a0d6b294b862d70ae85b8b5613f0cec3676075257abddbbd99f1d45c5dfee2cb7e8aac6bec9aab191c9e2754a0ae62a2fb13132fb30915b8a8c361a7a3b03a8032fda77bb45b2673b0029ffe6bf597deb988a69813202b62ea3b3e423bb0e67564378c0e362bb0df4b8fdb9c9950d53e48c917a6c18c8383086053754b865073bb41446a9a95b126954ec3765544848b51de4fa2e6d587e3a93a8888fcbbde41df22b6d7091e9110384640d4c55b0c8d7bcd35d4a9819e4976d2c6c275d6faa979e2c99fab50b965d97f38fd111cd50c6fa0b083331a2f7e162ff36ddf5f0b71318a6709a7b28fed2302953a620f47d0d45faaf8ab28a44b3259f9cf61de7962ae20775c25cc7c70bbd63dd3e0bdcba053100a7c3a3164767259be3024dcab4499afe0e14f27e9b54c031a10b2adc74694bdb85508bfd7c77d362cda4fe10bdf993c8ce04b4a3c857c9212380167a5883e6d9bcb3c596508fcf82a140b7300fa57d162a041bddfa8f38a0f95f474cb2ff9299d28ff8876ff96a89f25801cf25f7a754a6b5a0938e65af3f86db45ba3036ff8a5b278d27275f44d7556d56349d4ab312c87bdb5b10759d6b50968a493cb45e29cb3d0c2c133beef93ef33d06e22920cf03d9449b0d2973a2db139d8055126ef68712eddcbfe9b96e138c1ecc711d60e7fd5044e9f10bd274aad4f7e605bb828f235bbadf9a1334b4778a83ebd68203fbf97374be58972a5f344d11e0cb2a39422469eb9b1e22f15adf90f4fb9f117a899cb55c8ea055fbd10bfe741711e903be1ee00895c8b37fdfb011fa521726450f5b8854d164c2c768a66bb6ef7662726157309a66362f20a19d9ffca5eb4ae3fbca7f063d12580d94781722d06540f5ca71ee0972c30]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result d061c4838f25fe52e3246ae6480b6ef06200a022b7ab35a49d7cf013f70deb3f

tcltest::test Hash_SHAKE256-3.76 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 4d1f258f10c1be8b084dfd63fe3911e09e502abdcdb276c43d1c4f333e69b364d759f4ad1592b086a3e404e99bd1fdff9c4d4ff81dc24a3a005709bf6a72edb8d37b4a7759e45f8b5a668c2d418dbfdba076304280d84e61f541f8ecf5a2f1ee690e8eb385bfb2e5555afcf599733fbcd35433639efa6a80416185818402a74ec3992a2a402b91dabd48be0a4b8e66ec5d6ec122203386de0f3f1648c298f72006a485a43331e4b4bab83934fee31ab2654c4348ae888ac485641507546ecaab5db807e906d893b97333d53a5a7c445513771f9def035e7acb57e887e58c0638ee5c18c0602987321140fae60960cd1e9076bfe98cabea480aa0f9901bf8950fe11820f2e92aa666bb6810feb0979b5504d189f42c8817766ac8aeea9ebc5d785f7487484ae5d99f9a327f4bfa2a98429711e78678a3cb4b1256715c17e048bb90f9b5872b620923d626b0958c20aa2c6fbd40661803ef102bd2a9af2e6a3d1f9b2e137a33a81c3c96cc09a41181bb5db75dfb5db3b06c0edcc5bdab8a6423eda89b07e80bbffc2f02adf33f2f55b21b957a8233f1b3288a4eb61718d4d5e46ee1c9fa985baf8f474450d7308ea577af319b3cb07c130dcfa82d1ebeb3c667e76c3f5553ca80bfcb813d1b3dd778f261b448919bf9d8022413b23a65d03e94a371857ee1003b7202e4fd292fb2d70b784609e9be130beed0b7ced3d4d24553e91924df0aa6e89235921767cdc6c9aa3e0e67acdf70b3bb1cbb0851d462e38c008ba3de96648d06adb6133fe1bc56b7f935e942c7b8d8505048e91d2d28212731f08ae54ce134b6af767a18313b861af2e218143e948295b485f89da7cb060cc470625bf5c6e48a86fad35987ec62bb713e7a880cacba728f9bbd3a09f49b240132b2a859baa66a796ba66ca977f182bd719907f8a787cf2bb1c05c1d4ae7552f5f02334066813ecff17cb85f833c5820a2fdfacb2df294cef08a6ca976f288981edb6672717deed1b3dba573b84923e0fa2cc74de802a9c180a2d0761fc4a68298c3a8b684a262c7da4e9babc022cd46a0b0d8467dbff64c8890f24cee669536f54462d647f983f98d5a02d140cf3c9abc11937e973164b630dd39f38bdf3ffc5ce6fa98618937aef58942abe3565a2478d562bddc61d949a2100c329d378a1bf530d9c57b5a672f3a62c3024ec10d2bfa86accaf4563e4b03b1d5d2cc7660dde9aa67253c75fcc5836dee9d2c183ff96aabd86e88187c057e48fb9cc2a5a88860dc0c7f4de1dcb6f83329462361d7d4f1cd507140b079bf385ee65524cc4a65814f319c55a6f14ac33bddc3dba6bd05b7737b9bc3251fc15c7afdc89df12dbc758a3c45fdcd21cb090d73ddfeeed9d4e325c1b3ba7f55521025aabcd31e3bd564159740ed5d567ff532515c314213889d6c8a83ccc702bb7ce655f86e5a5bf77579a855cc5e77b0ac31e1081ea9536b0fce3ed1a2041045ca45644517ae756cd03dd94e43d96ca459928aa96d2b81c35ed54566e33e66351fca406b7620727a9ee991f2f9d41da322deb306c6d085d9b509080a387decd6a6fe513232bb386a07063708975a72f72f9cc6e8cfa147f53af1ed8449ca8a6f8468ff62f384b084321b3559c47053e7a9542a1733a5af5f15155d9ebd2c2847e491b3c26385c20f48b0f2ad2920a8bab88f475b98e4a65e6ffdc11e3dacaea7ecffd31b28c55755704dd6cb6d7159b983d3857ca767123b70327fcd705104d7c43cc935ea4c559cd37b497d396c4e2c33ab4c410735dd3f3f3b0173ff23131f95d0fbd85223a62d98c1b38935176f5bef9c04736056edaf05a0add8912ac1c78741d3cc07513050e8a87cb8087ca58de03015da5cd32cd6e9eaedc3cf6ff716c119b7d8b2dedd4cebb70cd25ba3d60b2eeee73ea1b380fb14a028fe60f99e556cdf11c6fbd3936bc876cc9fd592eb1e005ee267d7fed365ad4ac54feed09ccdaf1c485c89373cf3a86d22e71f53cd0c7e096f1da7bd0c5ddd702e7f1efddbc3b357c4630512bf2db2257771e0ee621dd276f427b9f7132bcc9bca569a8741829f18eda2166c04610f253406c169949b212ddb4eb4b4d017a152019b0a76b8519ce82be3654ef3d7e6f5bf6e6ace4acc96b78a5a40fc2b69851e3b1815d32777d24de6ec9abf74d6601e827182256cfa569b6b1306d80c689f86e09364a5753d68d186865cc86fa7a527e3d6b274e16b8c61e440ae4f5b5d181258d59ff48ceb87fc73795370cc93dc984c67a1c593675e925fabe06a0090174a0ca66dc853c95655158d28bf73e02efa24eaf71f6938f4b5431a4330e349c5b762cd762ab21efe64d58a83bd4cd6c2d3d3285e8b4b257752f8567fa9ecd049e0c31463219134a6b119370b7340bfc1aec1e97c0f21750ff2e6273ddd046ccc4d9841dcb6d85177c54a5d69e835e1521056f5f9b6d371e31c755425d511677687471d88f06fbe9927d1c4452414869e83fa137e854a611c580da7de98fc076e153a7010d73fc3335f14344530c6f4cc8e150db3866c8de12e16e6112eae95dd7fd7021b732ea76df67d751413327305ba0fa93fc0223c5b27f8da65a00e58ea4e889a52cd25b47073734e58d53f4d718d50b0cb3b55b7b2ca1b4b83f5039abe09b4025dec0d30645e5d89ba7fd7c8379140e9fe00eb470d9fe701123577a18038c200e3d8cc647140a5ece118e12e804e471e8116ce32942fc5c3bb6851b759641c5d8c9a4c98bd9fb24076a844c5734bce15fb85e4c071011b5a26977922711429e0023973147306ec4c2038ead639103b971556173bc99e528ffacad62aefd05153eabd2b1fb9fabbda88cebaa8f925f86c77904de9c78cd328df075219fc20fc7cef2f5b02b70587b055759c85dc136b5cc83b7014905505ed7f58d435bf8d9225b796eb0697aeb897303278b30a61fe2fb06067024f804fa87fc445c8619e7b14eafac2707e7db657c10f367baa9718acd9051afb2a961b1f8a538b1809dc20123163ca8b96fbeab8af13bf25e43d209de8357149491ed01b460e8f6ee0cde7e634daea9e07afba82a346f9f9e2dc80c888f55433d5a0d5645bfc39110efb395a9a660af0f9228f7c44b1cd3fc9fb9ff55f4fab00f6a594c27226724bbaee7f340b1012ca93dad2703b5b233ec423e5ee154a5ef9d3b474fd339220620c2c1f3d31dfeb74fd61e9242f4de43ff8dbba7a53ee55669555dddc454a2c9f2d3f833db1db7b36603f3e60c98df68a90ab8660c144798f6310372951567f4a45af11fc360cab58e4fa37eeb1254367b21bb1690653b0bb666eebaafebc00ab7b023341667b6421b01c3e958e1cb21e87b4a35dca24e333c6f65f28f5869609f8c250d5e92f8cdbed2dba1c087b2af636fdc504b7bdfb40aa31fc6addbc2baee476cf8168300cccc2b3134cc8499538e77f7d257328de283aa52a3a5f64a6e066a71a0b8b87cd3c5838b0ed768eda2dc4c0348aa66d7633a0dc525e2388eee8a6dc983bf93bb675d643fbc7ba53e11af24a53f9f992a9ab015eda9fd02fed0ecd9db1db5b54aebe655d5ba13a9f924a9ca5403b13a161d688b12cc50e628a990373cdb158db9f5e2d0c3844a17ad504e85765189ea185fe5a5fae988728add36fe4548799d7709e55dbfb7995ec928ffeea29573f9bfd69a2f0cae0e0893e023a7aae23c55009c6064f0a06befeb13407e6f3c2a096b15f86eae764c48d266f8bbd444d854e521e67f2ceb3c6b71a3b2bd12d1f699a892a2ed76cedd93d4b628b347ccf81da33eda14baf4a5220b5ec91353e3742b06d11c33ec343c7a096226267bf7060fb947ddbe216910d3f6b8e62998ed2d1de455b6da8532e37beeff937de76f7cbba5d143e4069529c1e226bc58685b8c12ef951539c8476d1a03f2d3222072d691d76fbf2ec1153aac5c3c9e3838bb0b8a8713b9ea2bee23c4d6c077dbadcdae32fc77a1e6e775ddd3a37f1e41808835e5395617542693b21cd60cf3d2e5bc6e0f538d8ea4f0237dd87642befcd64f95d374e0a0105ed49272901cd9d07eeb80979b25f7f1619ab53b434bf2c2b07da5a5c827f6a72b3d4f7683949c3ccfc7906c21b55054b267fe7c78ef4c4b959ee00cb1a09d71221a43892ef8ad705edd27ed85d03a377907c40ca5913dfffc3fdf48bffee706ba08093b00bd9023a288819c45eb18221bf6a07c47f64a486abcee1a417765f079932b0c9747e6bf41766808d08a7cad11b11e3bee72f3cd57a2a6d1f4cebc96e728036e514c13cba21335b3b412ca20f0c387dbf79bccf7599d940038593d9269533ce0cd2e99a15aeb651d7f3893264faa97ccf1d5284ec6ea30358aab8b4b968131f479640af8c26b80b670507a3574d2a89f6bb3b83c463505e26a2a085af55e7d29d480ca3a7f20131f65fec1d716d844c3d3bbdf584dfa7f8765793728ec2798e17d1969eee78596a89e980c738c27f6cab852102b54a717a4fb0dba3e0198ffcbc1726c7ea21885e2a8b0dca36b5e2924982afd1de0b768bba95bf412cc1f2c394030446225555b6e02dd94ef3ac77651e18ae8b878c7ed4beee8674fb226a8ca77d77441e7d8a1ab4b72d7af610048e32306857393451fd63a37963d4a4befffe6ec8e967ffed31ac115176c74a52b48db3235e7a6bb6adb19de0373fafb8c3a0bc405c844547a4d3238d6beec02980388728c7d599778cb1c20317c4ab1e81955125c6fdb55f1a2ed62981f3dc509a3a96bfbbcf265a436afb292cec00b9e0e613bf4e5bb9ff3cc7106cdf5f0591a99bc62f62f27b287ae4319b9e3e1651899aec581d25b8edb2a5baa0aebaa2b2556301c2e3c5fea8d8284aa2944356ae23b9c3365ae31af223d0bd0b158a1d7c489b2ebe67d018a4063d308436812697574c7fa22e1e46d63851fff53d59ddb7274b356c159c31e2ac2bc989ad82efd5cd590ae4c15ca661982f6aa84dae4a2b9d79fe1416b0b22c71fbfffb21ce1a312ceb4b443a28a15beb72e56b6e12cc9f502f70fe91940148fdb4b820b9eb0d701d072a0ac1079f8bdb235785c80ccbdde8747571afd188fef95ede429e63325d47b78f7d808308ba0e48aa3f8224afab0e51f4b798eeae180d0258a7f8bef0bf530262e69c2345b02cecc5e1c5e2e0d26accd6167373da5ce0a70e97ee82ae5de8f18b8d406fbc35de1490b3b8cfc71aa3f001d768e976941b55e85ca839d600af8af3ba92f0d611cccaf3fc8472ca4a61c25e41a1d7e9866514ce3d4f6acf704fd780b5ba2dfb0b9d15d6065053522c4e4cd59e43c59bfb67eda8810b9e017571e01bc5e1af94edf9fe211745fbc88610954f34793bf4bac9e75e71035cd4d7bdacad342ffc077d8a8bbc788bf192214fa5b24d69c25c8d320bd855602cb05dda431c48cb9ebe84f5c68f7149bd1ac5b485e82f3be13b3a4a60ff754996fdd171ad524ade1d1fc9e5b78349a7e8c639e63cd7221821f98abaeeb918e72323f929f235818fff941600657e4acef900478ed269702809fe452abdef87625a8a9dab1baf3707ce8431eed869bae6782fb55450845f9221b23341d68a0be1c49a879f30a7b26d1157e358182de216eeba4cdfbd12397ff17e1ba84070ea8ce7bc7eab37043cea5174f4e62eb00a87e20bd4d821fa441602c8c707038b6c8c4d56497a3ab01ba615452c3f21dc7a61dc8915e68424c980dbf9fd0528c1db097ed2b1b2409297c8e531530cf99879cb649cd7b2ef780fe4047a864ab5fc7d2a01967efc5292fa7949a030f4becb50ed03ace1e469de606b06b22a7fb5239c185d0c78ff77988ae0cafa8ca0795f48f04021fc23fb3e023c6808b04c2d1e7efb1d9a6664b78c9126efa82fb7323ba7fca464f017ac803e81b2e6e25827d56bfac6aa12d21a5655724110e1e2ef47b538b6db8569848c5c5f6db3864caa30ad3de2a342f2a9df1fed479b6ac9ba6bbccdfeef82c18b4aa40020d665cfbf178bedf8edbf6c6b0d36be89b191139a8f02e30408b1c6caa35e8c53b9478a6d724c3291f051e769c9e40f8fbb1f69989bd0a0518fd821487dd12a8ec3f424bc2939333413bf0ba9fc6f05e21fdd72ba776e2f6ceac07a0dc246035a5c3346b4249a1969c1d381358c20ca094790d70a0c24b6dd8331772258053f3eeccd985e4bb70bb95f53f115633f868c99033f90403a5e2dc1f3c38e295605c3db8bc1c187d732aa5608024f671460f47ffd5353fcf74ee30bcd04591b817d6f92336ae5be43b6c60eba5ded82e681c76045bb5b29a5af87cb88e38c18cdd1cd778d3ad3d944be95ef31aaf69bff1190a4a41eb0ad8aa8a168ec072e07842662f363da92c120729e6234907399a537d4b2e2245b72ee62ba4ac11947cfeca7b86f7bf12a5c1ffb69cd8db76b66211b1df4c776635e1b0459d9cfc0e05a4d7956519e28a4948b817e9902c8e6e9bbe6f2d11abcd05b58b7077ddea5ff8ff1c7c40294270750aa2b662f5c6bed0abac0dcb1a59daa50eca34b9eb56faf561fb78beb25955b78c622a8f5624786b168d062fc2ec2fa2420efada41dc7f5971e713273191ba9f3258ecc55de05bcc60b3f0c1b7ed3c8c13cc4b5f7de55db3a371e41013760f8ab0f965ab6964c9431ec3462745d771a0e8849ecffc0c06828b2e640ff480d5087ce62db8054c518da53d8ed709356faf34ba7d9248bb1a447d7f0b8d414c9b96fa91bd71ade184faa87533477e7196f58cf0505cf06cf9880ed6531e8633d3c4be7e9d4eefcec4187d2ccbff2226881255a8cf666fac34bbc3e6c31a3fd10e003d1f35c6378e9f75a7a6b17470cea3942356336532f34c5e1102e426daaebae80af62f6e119b8780cc85ac3e06d489e98a8b44dfc6dcb0fd8acd3ebae3176aca8c95d2bd0a601cc8304be4b230d2ab90dfaa4c1cb7c30308a5a82b5ce5b58e464660d8199e86bfca976c2387ab436908a755d1c26230a30de62632635f03a5e9dcf9a82a2a79f0f65668b114c29172ef85f07e5772b0118bb0b9fc84bb8c321394d2bb654aa450d9e1b445e013573983d01c9a5255dbeef0b9e5e23797a9c352226e8a417bb04ff3ede13a801a0f3d843a3cce3987fe9bdb563c7bd25006ca23ea2fad454a084ec2cf72075b3323ef4f08d382738592a8ba1a20320b910dc70770b89ce71226edc50ae945081b2fdf72e0634fa6db52760b7a339d49b7394a8b3a7bc1bd8096ad7924a97bed2ead7e6e457e8e29f598b44dfad925f35f13b52dcc0bc42ef1d1fe6da1550490fa075cbfac97d69360efc3f010a364bed517974d99cb1cb202636101055e8789e9d7ead57a21b179a9c225a05004c202d5df8189283c23fd2eb565e1c5387d3e8a99b95e52ae97333cba79cd3d8fd645cdb5d45efbf17246c3528d6e65753e3558b748a8bab10056a63300e53da70a1e1945304d897d90558cc548357a9772f4e0db094316bb855a52b68b66e4dce5e2650805c35523067fd78816a5590194039f5f7bbbfb307ec4decf49e0a7b3e2492d68c55ee3943d4c3015795c956629c7f0cf3081ecb2851cb6e7fce10aae97a8df020f7eb943bd3122e800b9c4179cd891a4a8234fb410c8579af4c6923f6e87f64e44b15ab3fed52c8a1d4b49a865bbee7a432ea8b7ba6e5d52c22fb2e8ef6d0fb7f5852c578a8eb9765f9fba8b3cc853aaa1e29c2fda652499f58b012d92de97d9a268b2b0e8f4663718158b526aa48dd0350d7eaf094349fb0f46f19fe1430b2dcbea9262827c9f47074b207077c6e9658d0dd497bf9f29d06001f8926340e62ee2792fceefadd1208daf3e77fcb5f2e51a42427c75bf60c4a83aaab7813ec54776930f5898feb84e1bc029db61e826d95d693cefb45a7b32386f7c71d3b3051208d695b216e5913a421c771d3fd411acd6e1185403c6d5c3a10ee253c344421919a2774dd209087f9122aabfef003ffa0728893becab0cd3629770cfe848e8c7198518ae62cf9a887961392618031e2b7ecdf419c76d8cfc1d97ac68bb5785a6890cfe3641afb3df7b56a6f2134318cb9e3fed703c84d2a8029df990a4f6852208989c77e73fd10f077178a69956cc54f60cd9d1a4978a61d208ecea3d8c83d3e8b66805cbd69e71be5022b5f2a4a54216a33da0a80bf0b40c770ac80daffe36d9e51552783a68b2006149a2b7b3403d6091bd8faf68b2090246b7dc6dc750c53cb2f8d074a1cc4a6e3331ef610909817456add133145aeb6426887a06792809819e971239c335955824801e872c7dc8b2709327cbb537d592650143402be06e5916749a4005314d7ed3c8928284297dbb6e01f5e1c1f5522da096aaa356168e239915db1ffe4bbd12cf5ffdfba6891aefbd7ebe1da0ffeb9657dd12b88e36c361b4ff473204e17ee455dab34b1a091adfcd7e02c7f8d3fc5cf9293df84acdb893f8a5712ebf9f0d3425bd45093546180c3c644689300e2ef2032f7edb0247c85ab28cfb5e84e0e2b2ad6c35aebebc7ce588e60bc9cd0adde6144447d94b419d06913a284a0b3389c06b8c17b3ecd8c3fc1157c512464693a9ab0c3b9b9c27812813118a89a9138cedde814db1661787c0845e04fb226deadd15ebcc7a6b862f4f96c7b495e51d46bb74e04a1fa11522d3504d3ddcf7dd3dd103676cfe3fc9f1ddbab118e7559d5189dd2dbf67345e4fa4e3c9e2301d111725e1f3bfaf9f8f7372fd624a06613027f955cdf010863f4895dd48a4ad38b6115c404516f6f1232e7fbd4faa7b9e52548aad45aeb41d44b8569b4dd7aca11896e48ca0157cdb417d7498fdbcaf739041be12292dba600b1947bc4dfda70cc5124f55a93da9c4570af20ee1131a776699e442ed0fac04fed5e9aecda934c2483e0d09c4f1f632d031689d9e30551041a7cdae05b6f162ac98cce1414cce682e549e3787d4faad399b58a38986e7d4bdf5bab217d6330f70bc61f24d6aec74c410835d76491faa1f9342ef37993b4b382e4c0d77cfe971f7cb39604686176ec5dc4ce9f4d0ed9feed3a7af3ce9d7da4c9be20eca167d20be4fc3a9c120c7bc80126b7ba80eed2523b6f781edfb361867e91d34634c769220b4914d41cd85f4af7d5f70e45586a06ac7d2f5df3fee7c16707e2cf7d45e5cbb8412a95cdeca9d8067a9685e4742b800809a79953a697bd4dc6546dc30acd70b58c86c56f71e1dcf5bd9d06a46b9c2917bee9b848d2f9e2f776310a503ea978c8d3304e488e90bd8d451378cf654569a041fca418aa96992fc0828d6a07024bbabe2e16a16c3de396bb00c5ab89afa96d3de8430b57f548bb4c4ede5a905e5152f48a07c13270b6d8c66cd48100614f4458b67f6b019e5964c19de568ff48f25a1e4c08f209b19e1a0f608d98f2e3c5ee3a6d3e7ecf1a32f2c7778adb7d459698e37a007a198903263ee3d83a86be71338c156a8eeaf03d2d08e5b5fd31dfa5d6ec1ed9a2897f4dc2fafe9dade479bddaf6b7eae17aa8e0dd29ee4e14449d87dae03f7ab2821ce4b7ebb8c43a359c10ad1f59a6bfa6cb85c9d59b3d69dd07a46c68e6cbf22be630ccba193529a1b0d172b006867296e093bab2f36a4425a664562c1ab4a9ad679acb0f29d9c24f3c6af250c37241736f727868febdec4401305fd3e31d212f27887a91f1964d68c842f5a89a5273650089cba0c41fab61a16e4e0649eea0daad63a3e978551113dcc14360920e51931c427b024e76c7a40c88ec6c550f6fd581940cbfc6ff5779014fa31fb38e23264a044f35a3ac8936cce401ae0e68d6492b817ebae47a67c1be54de8d06bb3145133810e2cba7393f69ec55737de21c5e3394c082d9b089149c38bc53927bc219fe4486b0cf511fe66906af64a8638b3b22349cc0ad87059a2263051960b71fca93917948b6908354569cd82899d4690980c8d81c69e9227ad83e81867658917f5a87b151884eacb1b7159968581effefd3ba3d3d14bd29dd462ff843de445e60dc8ef5744d72e32415d9b8cceb279516a57193ccb6eb62eaf59f31f8a065ce96a00f0f590ee470d5f750fdfb5cd973a67d55a270585a15ca6cf7f54cc2a12b492e70c5a7d38c9bede5e2329eb31be0c6e4ce31d200f48aa4339d0ce74ee2bba00f1be006a252ac9467f71d5cf6d4269e61440a99b9a009a1d3fb3e724b0fc8c4ca762820851eeaf106f788de2fee8b577c1ff36e8846d9e9d3775395c21098dde7eb649a83d89e2d494a39cc65505819bdc7b5f977cf43a3bb7b12f7bacd7312efe15e1fa468106fb958f8cda1e2d40bada518e18d218ff8146e44413b2da38b69c0dc55f1b688e0dc898f89ea8c4956d31fe3cfd225050f64b8b11a4e1b6f71ddefa7e471aa4ea83d46c4a94836fd21b79ee06a4fc3ec1136c1212bf97c1eecd3d887752d2da9ee61f561d5c3c83995e28bd55b0be48e250ff05c1c4639f923d4e243b02b25e3dad2002cb4642a45dadb4c8b490e6e317479af29943d3a483f6775a53c757c429617cdeeef324569172a4bcadd614b1e25fb66523be567536715f973c213180f47b8c66e2d35ffed7558ee59bf0b619d611e7b9dba46a861c465d676e90be391183d5176177641181bec9f0296149af5506857d3b968e6bb7edf75765a67c3122f2fd8cc55fcf434316ec58b0a85dc70196362bcdf5407aabc0b3c3bbc2fa2d8b416c2398ed0fe87e167c7bdc5651154e597041fd511f574a672948cb869672cd07877856af8495a515e0f606cbc20eadb8ba6c543a79661659be632f61ffa56aadf5f78937ebbf4a9db043caa93f17a24c7ae77cf1fd4bb210e98f61d58439e6cd2e2daae693e9f12660e1824f16c4ce7d386fb248096c80154149ed51d294c3bda687266c2b9a1b48895be85de79a74d389419e8d2c3d22ef4c0f2c87597a7427e590960901343b6c801f4736200d57e7d429bc41d451fd07606bc9c6872f8a6461d6747db36cd40afbb839686e91ca12af7475f6a03f70e634dc2f9fea38792ba1c54c1ac09877cc4293398511cc5dec71ae762c0e5a41042fccd8840129c2c63be98760a74b8908fb4cb1ecc81175edd15417428d36dff9b7da5f035a77f9cc86cfa10fd5faaa498c415d3fd015c49f34f1e3ea9b59903f73712dae54b770b718c44348db2a3e168c2d75cee82dac7923045674b737143dc92dcee59e4cea1e7883c8cc355ec6e8614da64a7eddbfe4120809816f63de8d5f6cad3985bca85b1c6abc0a631cd747a24e6912e2ba519888795791324451967cba632aa99b4e057b058783e2c8d1bcd59c38b8d23803eefcd4db149e6d0ff1c7936b29885d4d962ac0d5b942f768a061a38fbccbcb696ff5a70e9c12527c17b6843fc6906719959249011af23ceeaadd10e89f1e08e483f97c6c881c793890c0194b72506d447c47faa4398eede624ae50ddc06764f7c38ea16f793b55a7c58aaf38cd56c460c2c252399557aee1b66befd9d1265425c70bc2a1dfed8c4c4e6cc262380200d10177ec3baf0ad463d88c4a6731e97af0d7176c8e3cb171b893ed0f6232e09717a10f2524f70712def395fd00731f3debac37eb9f10159a5f2e91c2b35e711bc729ce997ffdeaded5900f7420153611689ec3ec5eea888ac286e1a8d00b41f342245cb5b734149cca465f4c5088cc9a0a2761cb383c98b76535531e32d9c1c23b092006652a12c13f8f0be21c4e513c42ee9824d576b4a4b9927c8f763a8eecf440bf080450740097c2abd1ede6528ca55cbd7591396ad75256b498f4bdf7e8107390371f4796cf8599a5983fe15eefa3ea683a05e529c3b1da91b748c49b48020a3a20006029826b6c9fb1acbfb4e9c1201eeeae1a8ffe4aa6aa66ecfee7816b8d233f724a7acdcbc3d09a9ee2130f7f86580ff439fbeb9f3345245bcd7b389f74c201cf57291629380edf90e8f7d541959a1a62d40c102219287c0fa0b4b22049bcf38226a2d00621a0dd2d44c1bfb9d65b9a94792f0075b09ada832922a290846aa12529769fe5191d3fce860f434ab1130ce389d340fca232cc50b7536e62ad617742e022ea38a6fa63ef1d3ef476be66edea969736395676cdf2ebb59a093d280245db26239323bed6198adf37b066bdba041ff974ce65dd6be426c7aa16ac24ceb88afee06747e122e84f7ea1aa429dfdea9668610e28ed029f091812fd82fe3915702bb5376bf7c6a5db9bb6a6ca6e35e88a62af7b381c3eae030559305a0adde71b2b067608693e0cdf94eb4876c4de987c8694b81be18c7b954e015189d129a7fc7b48c5b5cbf577ac18b3f1d0387474ed22d5273ce3589240209fc3aae7a8c284ab1088fc768960c185a5555f1f74084cf5d56b23884f8c844b892925c4d7d15428e242351f6662c07a33c57c0079cd1c4e19d65846bdb4e21d51d492ef335eeb733283f82d18f82944e3d4cf71e22dfbba16fb53b54fb5da249e686add47c5ab2885c0de161d9b5ca43a05c1fa39b53bb8416cae4a6219ecdfa35725f581a01397407b2f60f0c6eae6aadaebf00d0d8cd74d9cb07c913b8acd15235cee8d68c57e273594941ef544aabac6b5f9c8614f859ffe12d259a5447b684f682ea79a311b7e62863604b10a5efe4ba88df88af4419d133dd227d1aa49214dd02c8cbed71dca947cbd5e849c71c9ec4c0319d52b99d97ea9f2886b1cd4b4a13d6e894137e3904df09078ea8b91c22b092fa8ca560cd992dfb9f7bc2cacb6ec086b49cbc40b63e18a65d05d482d5b8a783a21e4f40911e257aef25f4a1f8c80b9a92ab91c03ca119294114762a31a8d11d911bf961d270f9a3804cf05cbca01d9bec883a05b1730b1a1a8536ba173955e7304b4acc76d5d2febab85e03fe3d1e1129fc5e17fffd15024f1ebb396eb45c69e575eb886796d8140630e49ca6e83582b1cfa5ff0c8760674aa8aeaf20610d2c1963839d8bfa326cca7d2d319be98a78ecc9b9c4c25914d472eab624148891b735dbbb14cc4b098f6f67dfc9c788467a42b13f6e07ba58ce2fae7ca132710f929fa63bf411cf84035eb6a36d110d91111b51e206c5f454dfe9baa82d6264b046c18caa4541d0cc52fe32202461bf92c3df6f4893e34d318e08d7e1d18ca89c5a0254b01046940803b6a3fff69fe7721bf6d4191d490e1763f4cdcf949886fa56c9c8f65c0764619ff0d0e7ebb3cd589ec848feaddf7e2de716641b7e6e46f2c380ae24316c87ffad1382810c86b96dd6bd939e498de79ca1d4646d97f730ae288ecfe2975d4709b587817560fef3d94a3e7ca3fc3b8f8b1a97946ce8198b530d5bf3d697c2eaa840b3956aef04c2c382b1ccb2cbd1bf23d8c8bdc178bda10cfa4fe1ab3883b903d5018608c281705307804b76c037bf8c65cda7144fccb8ff78d263078389fc43fcd81bf8e05b43b36011c194e255d7ed49101a0c762c19540e4c3f937ebafb8f3da01de2517c840815cef6b739134f6e0af7de51f4c70c3445253ef633fffd1021c2556d1eca7a7daf1eb285ce5a6e3932ecba8cd183d8c7a4c528d8aa414ced2fa488424e2f6f37b568bca6a8107e7349567865164ac734b394c5e3ea662e4ff0af8109e992a961af16ddc3cf1fc547d59dde83ca031fa4fafbddbdfb57ec5eea4b0769f8da7121258fdd844c6d8cdb6028b58ff596293e0260370ee5fdcd41a7e1e10a82f10f9fa03b849026e41a577161c4309fea2d2b522c9c7fb03f1b21afd7d8958fbecb05a8829990656bb9e491afd50fd1e9739272c8d4b765041c258897b4b22829ed78c3cce62b12e9afaa467aaed3937a429ceb9aa75f0c361a76bc873d08531abc227b81310a344845d01b2b1825eb85e470440cdd1fabbc5b3bd3113a401a79812b570943d4d36fc37e9528dbade3f39f3805853d9e4c7e289d539c7501852e85bbdfcce432f74671de3edabf1282aabc19b76d9085f664c8c4c68fb4f49b220df89c33dbcca9b596159da98cfdd093823de12b9e7bb25685d7b354c0c1643b640d15a4f249f0a47c4e3afe0915d6963bcc0b292f29873ca5ffa352610fe862d120d288ef52d5fb69af9e3fff039b9c2dedbdce0b377dfe71631df15e8630809b5a5c489b8e5fa2a66050d6376e278ba2c98082f94c9c84312ca99981cf437b0be23a4abea696817b8ad82976ff834de088dbadc310edb62d81cfb29092293d69e1f4f8204182812f55bfa2875eb6c82f5157b72f2d777dac8b18a45476ebacfd7e13b988082c880ce88ca73132c8e6d94c7a09064842bff8710bd8952490b20ee21ef4c0a29b7f586cc7a23b23c28d25a3cf090f0c5766575c31b41b442036e5349d138eb9d74f5c08f9fa6edbaba75a7bdb20141ebd58127410a1ad7da41fcb9d197dbbf2e9de60e5a91792ff8b1bc1ff28b6db297c7f70e03208157722570645199a0ff7d816ac2a5f616f3a6bd1a2543d342ed39dc1bbc91f4f19dba5c5de5325d25170acde8700a340cc3152b145a5a200d3c4270839565de0825132519defc58d4b046e1d3b8ffe1c728f48a3f118e08492a5223b34b076211780d3e389438233c35c25bd0efef75d2afa558fefd57e27351e9742f2fef27ca2118f63ec74e32c8220d9a54976176bba1a825d8805045082d68d05bc695758e9ab6fb90cad71e050f792bd331ee4aeea99d6f501d0fa6943760c6bd9192f1cb6f779ce3214b2b8f48959ed161fe88f841c5a3fa55de9d93ea51c5e93350132cf9db788a5d1301a387f351d38a0ab744e4e1424bbd559083c0cc6c630e65601fc4431d0af0d736fe2812f35e3cab4c612d40e8a8a5fd05e04531189f953b5f10794ee8f96f00120bb364e1d5dc58bee9659505b5b24d8436021069036a5a66ab637f6aba3a164938b479abeeeb8b852a383e07d764cf81f161eabc32f03b1d4d3d2510e1e4924321a5b1bfee0cbc35c00fac8da23feb95aeff30a0a2b965f972410089e4f0fc7642f]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 9732f8c8ba0102dc9cb6c676a43ec876e11ba02488a55f52e0f81fa028f1b257

tcltest::test Hash_SHAKE256-3.77 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 53dedd6cc78ee069ff96f7d2fa46460d13dd1bfd33f1c7834411ad45e9a898ae6c245236f85872e3081f750f1f43106dba9dc547827db509c74cb5032a6fa36b996ffba18157a5b73e5e1131d7c68609e804b7f7df2198ef6b606fea32212ee9c3050037cb5322ef8b9bf4bf899950eb865b1a95b1a6183b1a9704816986e031d02f8a803e149093d61d45419f82151b7dea15a960d5def7bb379c503865624aaa35c103426198a9072d2d40804a7d9fb3f9d1bc5474922a36895ee005885b3c375fcc484004e23b0513d44394b9328112d07655f44bdcdd73d573b839b5741061f5d3d79ec31550ba1761d24396d9c981b72bfdaa246217596303613db555cd0e3e0039c667d9f10d81fd75f5ab1d7de7f5183bdec5cfe0d27a35617850a57b288379f51eb8d825e698cfb512bea3a72ed36697f6f7c940c6633142514d0d23960c6693107db7f42da500190298164e3d993d995b82f8401b67208b327634cb4021f09b03802166caf0b72a2d011c7bfc8fc4ca752e06e7bacc2ac58291c37e0e0a3f965f87bc84a6c11d6efcc05d3553fc24b1acc3983e8bda7677a8676141e80e7a0c8b5b3055a7605a6fd59f83842a2a84d76908594b76db2d290ec0b71eb677c983f1c426e1b61495b521643370695f0dc212c6ee18641576641b646c1c608b5585f8894631bc27f6c649d81702f8e4e7fc11c502ad3bd17aae371a2943ce9346990874374c9fdfa62cb3c3d741bf01390dcccd3b10e5576092caab969ce9d6c448894ba23a4985cd6fc9ed1b36a7fd2b7bada6414b48ef51953ce05a2e979ef618e3d72e04a0609215f21d8ae79622e7d01a17bd664ee17541f67f1e02c13104937fe084b18eba1ea8951dcc5e75b692937dea5767de74f31d5e50891e50d81741c32e4b49fad999b01cb38aa32d02574d3de5b658dff2f4b1dd1d448c2adb57a918882cd5cb062ab3eea86cbca44e5c85c2d183403ba19f86dcacf6543982eb53e7b7cf5ceb89f93b73c319b3c4e2c9c374756528d9ca1d23c1c6487c6315fbc79684dbe641aa2fcf13ce3a907405c790bb9b0517a1b49510f533e20e92dbb18e8fb4f97cb5b1f4f8368f76599b007e72ff090a157ba930d6e1bb6b11ad1d332f3812d0242fe56f3c44d07618231b15f3a8881d2b4fef16fcec268c8e9c23a932fb6509e89790c926a557e1d4f39eb49b1ee0e65f05cf6e0a7d3bec8c47353c203f744bd0d5f8293bc1ec6096f3d185f1c9d90cbb85916089fec33413969b137f6b083fe3d265b80501599b650bfcad7d123b3847b77d1600d6870b2c719c58dae9e98c2974219e0bcb653949236657c75fcd110a84dbb5f76d4c1addc08230b620dfdbaaa47302d588d7e34a2358a9581958400cd2f268f62bdd08306b93c59d78b2d46f4ba20ceca1784071f31acbb7a9a46c558b0b558678017e2d5a183f1659291e7f4ff7e6d77c10f9c57cf4e66c75793eee956ea42ebc7f24db7558c6aa2b0e62e29abab51e8367b54ea42e2200e79f5ededa637e775f20a142a59d80df562747a11233a44a1d441d15540fa6fa66dd732d40320be8c9ac9e6ad02d9840423d76c3a1a9d8e2b170d82175e09be259fd25e3b122720962ebc25cdf513452581796502e667c6ea9b48f7bedea28412ac51e09147cdc6293a4b61fbb517d9ffe7f5051a0b0b6766cd6ea29a672769d40fe03a75089707cc2a121bb4a759aae9d3b4ccde1d0ae83629e903586c3ad8103707fc34f8e57de59a8ac397605b3079e1431ccd80e8e1cf3d62aa67724f472dbe23867f8d6b810be82ffa02648f23367d2a8566db17bca87445f8560dc73fa301dd69a33a8bc9b5bf7c1f842877db9623d587488039f1486b2d8d9283453a06aea0265e84b8a0696ce9a49b10a7c21f61cea2d114a228258e63daab974bcecf10f64ceff084cd9d9d1349c5d1918f48a39058af0cf2c9c65a83501fae4d5672e54a3e06127279d8bc634f82dfc78b8885a52910edae3eb16c268e5d3cbc798878367a0f4f045d91376456609fac6f85748784c51b272f6d1fa7f5e2c73b90865625a18a1aace15dba90dedd95d27395fcb20c3a2a1ff45ff1a2274ed22d43d31bb224f519fead94a263495856bc50508aaf2fdeaedb36109e8f830ff2140c15154674dea15bfaec8b76366f66dc8e3baaf95020fdfb5d1552daa9948b8241c2ff5d21b5555781bbd22426912aa585cdda0b2dafbbf2e1d4db0dfb7b12ea8d431680ac07ba73ba9913078a5c26c9bf7d946f08e94d545ce583b409322cdf673c174b844435230deada9ae22eff9bc3c1669f824c468236bdd94753484db338146e084b094a0814577558be97f9be1b3fdd171a771c2ef7c468425a3bda18a842875150b58d7536358fcb8015c9733e5f445041c8529d28afad3f8e6b7672106cefb145d7640d1c2b965dc726c38d959648f598de7e6f41c614998075875208ea23a28aed62320e90059a04599c5fb97b67517017f417cbae3aeaa0d8a12b0a50bf9fa0760c86b6097a0ac81c985c32850c0e781358192ece8c9d9013487f9d17102326ffc76d8b0e402a72ee6c157939c387014f1f0603bd863caea3e1d229d3c1b77ef92778f6051473955d7c2df6000a45bc29bd40b2e1b4428d08f19538ed50d718e0a11b9f844360bfd84cd8418e6cd4f931b76be4e193499bc11c6b62ea29fc9544c8d7e002798c52ed52d6d42b57cf590591e9f213bfbc5b4ab6b70040c9b27494033050161350ff0b228c466d577f5c03e14d631e76056c3454fac987cc73276cf4a77835ad58f4c0308ae0cae86f62cb09f8c06862df1eec8bb907358ed93e2df1cfb0c7a40f049b01355bda873a0da9808e9268128403f1af7441c09d3f29559efba26293dd8f0a192e1002b059cd4df98141b3e1aebbd244bf11bf842f598260cdc58cf96f048bfcc7a5e9f0392226b94366d27ca9a70ceffbff98c0147f22cbb882ad411df59f00b465e6c3629ca264776a2a302f461015ad53d2cda8eab5543e625a0774d2b1d957088fa660ad6f7f8fd441988a197a3a55c6f429373cc88ee1fd09b8fe4c72fb41e64b15add4dc5eef2dbf3254a1a9d297b1835f59d5cad025bb42e2349340cad797bfadc49387a727eed98a197f3d82b5bbf6dc8b563abc8c157bff9277a9ecba8543bb2f69efdccc90470c42f293bf623ec52d462ea6c887a43b8db24a2cb55d377dda58d873644faa7e356bbc4add1fc274ce04df7d78aad007f8fe8b27d92246d497db6fc0d223a5f591ee2cd18030ef9c3b61d95d41583147edd1cb59bcbc1bde60218036aadb0b23ae54d4b63d580e91f1c7bc94b7224091b8f68b00d49d2ef1bfc5ca7352e852aee73a346768f7b80c8db0f9d24eab767c06b73adbb51808c523229ed56ede04fdd908dc73979264426bb801847c365b4d43be6b38d2ef21bf26d28dfb532eaa87004b3d494daaabfa18377429d45557abfc568cb6b265224637501843b45cabd0d96bc786ffc2e79a2fd9b240cbab040e8d2a2fc3d83c52f0c125be4ce6da9161e1051b8b225dbf98fef95c57d689d8fb9293c4eeb8b75c5570cde0857f4af3c0938199e459ed9c7d2220c2ed99845ee9994ddc95d878a6dab2a33f7bf2003b638d7bd3110af4f6bd15ea9650693cfe5f0d92d767bbe2cb0703502b9ec3ace0c11b4e479fb9f656df66a1474ee9e64fc27c1d65c2e7a81150ff6f257c88937c7fe99377fefb84556a810f46277042cbca4147d835c01b424ee32acd83a57676e654c5d4ad24014ae4e16f1388b0b4eacd09acdf4ee9deb6576b4d84429ea8689b096ffe28e80fdfb5245b4fd11fdf355131a6bb6cd934e610f431da47f8cbba0463fc55009c026c71b65e5b9f120423dd65e02d1df2e079f22a623ff23822e3c8f0f569b2d48b799113e2c7513bd64ee7f2c384e0eb53ba715a6935dfd1708e4f3ce5bcbe05fd9fa9c972f385f1b80f0784db534416f1502520b15c6f5927121da437be90c4eb371243a990abd84bfc92789228b60a5ba373f9d5043f33a907aac375ffc985e6f8611ed10f3153e4903f6a7275c52a055ce4623eddbdf598e77d172af0c6cd432c1cb793cfc4f9245254c716bae01a50c50ce679397a13592a0b2bc122270fb27abbaa6c72c53c8dbb890ad978954ff07443e2feb7d2116c57eb5dd30448c1a73cb473b568c092835432c2452f533f46f3200449d9848464f98439cb27da87841a9d802942259fa784e879e45fb86ce6ca27b6e50edfc0c5776c5c240d2ac5eb7ced7c126f82c85cf6209e318a235d3251d1774ac8626af05a1a117814d8014fdc1aa41b716681260061aba72f3294cc32a3c205b6aaf7882a041631ef50ce23c0abb4aed82f7e953c222ecfbf448806d52523802a17daff6fb0b6ebed239109c3270a47046bf52d11e89425caf7bb94c1cc1854c347a9c893b69000aedede544c03316e96aaa9502a3b7813d2cab3d8810f2cfde2a8c8661e7c2e0aa4d11aa5d3c6b6900f49ff90dd815744572be5648b64bde638b9db7a9877dd745fa8ea80e2f7f655cee85c71a4509e21d899e49b4973579815f947587a404ad83fd4a248020d9d2a65f46485373fc926d793161f63a196ae0af590923c5be2a0e5d2f69da97e0788550c9c1dee9574ddc4a61e533275d772982d4bba67213158b2224be451cfc1fa2c8f67de32f80db1205141c96e76b6904e1edd238336b38a555106ae938958ea4cfb5c38bcee104b8b2344f4401a90718d38c9800912e5902fdddb6ed72138e346deedafd4de0907657a8c768fd811b0e6099532713c4414a2272ea7a53dfe7faab890b6234e746f3fe58c928645a6b8d90fc4cd44296b826ccb74eb7625f619d906e9ee20c5defd8ae2ca0acbd9bc13e6c9dcb30a40a863e049429cd27fcc3c62586dba45caa53cc700c931d90aee3c9fb641763c3897239d1f1c5e32a1ed71c71b709d1ac353a784be0e9a366fa99d5463a7a94277c45bf3cb66822f42e63487cea729085686c834790eb65c5e7ad0a53053aec5649c77a4ccb5bb20c9230f14e085c0a6daab0966c04e18c38dde5122cafa092da5ac00f0918e6bafab406c0f0f71067ee64d059c325133f44440b92d91ef4ae3b15f8297b86506247fbad5d69a1d6ce90fc927353d9c8a77384e535603c7e6affe4376eabfbe3d47aceec6fc1ecf567dadbbf8d240949ec4c053ca0cbef85ecb02e4486a060e5351b978c9e00c2b75b54691f4e3f9edf355730d77e2221535cd55ae81a629e9fb0b2bd56942f0a62d2860e795fab7ed0aa1d6b80756bb92ee3f7d2ebd2fa9b596ac8a80ff656ac3ff3f933966770936475251ffd2db09f5fa99dfd15556f415b8ee4bf826f7b8f96e7343e3f0f97c3e5bbf7b51750f8bb2ed54f432d4cc977ec428f6c76a5a89dafd6bf993aff27f899a71c9396834cf5e28f960cfd5e112455ae5017b240e4bdd1e723aa4fde2819ca5e1b234270b335c501f8c04b344e32dffcaf26ffe938d74642e7db4855a30ebe0b7ccce3bf35631d50ffc7e0758888cf5134022548aad454109393ec0b9ebfbdd4c8f54018da6733a7338a84cac70e70d86813ec04459a4479b03902a9241411e186082221ab294f2c1b6ffedb14ac09b6d2c11cc50e125ea4c53753d63af5015b3e6c5185af91b9073fdf184f764ae116fb757c350f24e9ba5af4a73bea4ad46a798995eaee88b861274398cff6d0411e6995d5fa4fb92fe2f7d8c57f3bfbd335bdc7b6f971f495625c0147029b2671f6a68befbcd6b77645254b774b36f046e5958e7b593fbf99316583ed916d35b9c73abd9224ad08070a6bb58347e11175a18646adb260cf09f7ca2f522374e361b9ab9586d9db922a5a527eb21a4647a7921a5714aedd0e30db146f3d61b919b0f383799284683f265d610ecc6d6d7825e0d82978f3bd625506caaa78f243c0ef9e49d380cd5df5453a20ce99e75c8d38b24824a12908b5bf9f7447c9801abe67e1860a165bc19ecd1a1724e1311d6f2630f3b157f9c7eeb7cf9ab0f9b047fd5de5c1861dd79c210724cf796bf2b80437846036610b01f585bec54cd02cd1631cd182af5ce8f6663b81cf3600d33336b5d3171d8806beb271937c83159cc0daebce52ed9d37d855b1589fc1687c98ece648a1cc9492060dc37748bd92a71d491104b7a8a66c49d6b0d2c8846b94ef0e140885ad4d58e2eec291b0620df6ef97d79a3b48402e52d18117d1e5d0c43e83853e4b267a00593db70a3cda4f313eae85b966353325fa2e6d4e424e61b38f3581107ca1e53274e2ea09748e20ff12756388bfd747fa49d5baa0a426e409e90b52a69f8554953ac5a3b7e1e4470874d4b830ce97445547aeb0347dd5227055ed3f293c3a90d1b3ce2a3b0a458ef56bb3ced81bdbf1ddfda2993358c3e38ed9c38fc1dc28618fe7e6c6be771abb6e00faeba92f0c173b7297bbc4ba58ef0b80758b9506b78e77dff3c168b1c9971a3a9158cb91937e17ae7660102dfc0d904fec7bce424fe130a2de61603fbceaa221615d65c9d6ee17ba28ce3e381707c5500ea793185820633890efcfa9597cadbd50419f603f2fe69d944d776411a3518ac4560d113a14b7aaf0b2dc780a14e417474ea2dd35082a5fa127e33752aadd05f7d164b45d85d5ffe5f4b033367cef362fca96c81f438c0939a2a93b42e310ca8d61bf89293b643f59fb7262447a7522eefea3aa67a6b3a24308f2f8491893e0704c461907fd0d7233114b8e9ed71ee46e32ef0974fa4832a69fe5f5d00f0d4f86da23eb5d9478a15b7c633eab5a948395aea570ae06f2c24cb0abba3d912720b9557b8894c94cd4b884e1fad3cd7c074db9eb647d945a581c826bcffa66895aef037976156231113473ee4a7ef681797d9ce96f496a27fffe5f4ebd6d56da05122e423f4727d162b68fb1b7149f49e00da0c9187a5102bcda8d7c0b0029c22a091c016a91e2d1ce272253c8fd8e7c44e40ab0e77811939998551c411aa6ebcfbc15dc805d59dc5d6d72fb06a28cc3adec25c865ac72819d21ff56e72297faff1363fb081255981871c8d2f76960c6240c3839197c3c75d05bd3548682c29abff64d878a179ead061b6b0025bbd42cb02c8a2b8c5136163b2f193ba5a1ef71194d1aa88fd6fcc43054a5ac1801ae9d5a3464c544942a0de5851836cde7e827140013859eb637859c02bcfe56a1b7c3290d0e2fcbabde01d746196a85bc7465b8f780473f1f1697540ef91f6905b743259dd092a9001a9b1758640255885ad30e1ba915fa7963a36061a437d99376c856cdf21664f9a883afa54124c5b363181d52d518582de450c6e2056d2cb5bbf8c586bbe286004f60a614f8f95ea557dcee854d78e0a16247907863eaecd24f7b79ae751f977cd6da058cd0a8a7c7fec9879d5a5c1b3ea42fc60d08d6a051fbfa7a2e66f41dd5069ad3f71259297f1f85f28042ec8f6c74b16e883a58d19c851dd1efd68aa272a748183c07366a3684b837184d52c694987592d04298061ab58b85d80f08adbd818cdd43f464f455f30b5c4bc5b3481cd92239cf68bfc73355ed9ed05897c71d5b0c29f4240e4f4235256b03f03a9b6eff606c6cf3f59d4f2bea25c1f85f76fafe730437de5a016712b06b27180c49f0d2d9328f2d610ed6012b2192388745bd336776f46970942b5151659f8354da0c1a3293205c2ca4309d579a2b6038b9ccc09088130e7990f5bcb260537938d4299e169708c97de7c6c7179874b8995c906d98417c159d7b2f197b642b44e0c1ae272b472dbc7d5efe4913245587d3b5710424aa17c603df4031547a0f2b7528057d19aa787c549141eaf245b6170d4cd84bdfc9cd68d44390cce3a8e7751f92956889c8d1532908f8715d047fae70aa2b0c6ea88445373087b2d3f89b6b0586c6b023aa2187244c89a7fb6798952456d30d7c4f25a3552d8daaca721355508c001c8e574e616fe45e547579e91450d83917afc499cb56c20a7d701d377b272cab7573d742292f58dd40723f5a721cb9c4f1af11c605617766f36f01f024b3ef2f837933e3278f3170329bc3d4f9b180db65253e96999ed509d46c2624991c5cf50e49721ba3b5f67ef3980c3def37b5e839b951f0ce36635be81295bc2389fc63de8a9cd1e4c92f6f4c10227f9dd5e152361254bbed51a9c5f70655a1082255e2bae5baed33f464aa02ab0e804bb48b8124d94ee13e1630adc8f36eb99011f1db6c02d356d85d1e99e012d72a41fc3bddcbb5484909ae7f7c247fe9ee057b58b4ba88eff61b2ee4a3aded8563c6d479cef24f49db96411f9bd352cd27ad8b10d76d2016b4438c3f3030e321152364cebc634e597f2cf696709d15224cd266a3aa4d7151789aa1b6a8329db127a1d5c10fe45b801d15f56e654a70f044ba3799972124a72a6695d1747bc34081864fdb2f3e1ec79d97672ee1a10a40f9ad247804b3e021b3f09018fad3fcd30b1af9a284393e35e7fb745f4c6b8c1952f555ca5bc94ec6f980b914a302f074ada7fca0779c64d3e48943880d709d8437d9f316032c159ee55e384cd7cf482a4f73805d6e3137a87a88fd318e78e68890a026e564a4deb15fd13648ff04acfed9c7ac60d2be60bc9242c9e3364b0f2d459315bee6f851085022db918167c3f633eba8310c0c861715fdd0246db0bf7b3ffae929f1f215aa9e9a4eaec7c1361d45279d5882e352c2e902397f9b719e7b641dc9aeed58d39f337fb82737d9ac78f8c3b35d9e0a6cc4f8992d79285455349d43ded642f332f0f51940853b79ce11320611c9c74b7b252809d49c7d228caed3b55028588bdba4ceb20f4f3a6744efdc3ae024646c27ed639c556f00a2eaf2ecbc462d98e875c3a5904c0d9c6cb51adfa547f4df361a259098d97a1a9e1807d29ee86b68d1a95661fc2048c850ca9b218f6fc39f71f9d59746874633dcbef56ba35f6c310f1f63ec3eb38628db2a798c427f180ce56f0360ee885ab42683c5a115d3b85c6b7ef52d9e2c5223d57dbc0705a07c8e5922b9d2d8033e03420f7e5a3a6bd54faa6f110c64b33121056d6d791ffa768d97bafed74b217b8af80b28805c504d749799c171d772ad8a34a092ccd9b48e7165e0db56910a98b0121fccfac1aaa832f9a50c44408e4dc72abe36e77bf74ca28c3c5638f0e51ddc56f271b0b1a06cf0973afb6de732993eaf705eb24dea3989d4757a63b1da93788e2d1f8a765a23183a0194d514841a588b5e141596b6dc8c04334cc01b1381eb8077de7057015411aaa1e1620fac577d852f5ff8a082bd14e620d63778b56f9df579b74a9bbd8843afc3eafd1fd3d916678b4843b177658a40e21fb10eebe5f6b4dbb1008bb54616110fb68f8e212689f71cd5de12bd5b54db212f1427db6c5e8744d57a6f1216f2972c4dfea2bdc840fe8710b10b7b27dc7f860f4a09ad8b3d345c2aa18ffb803f0bc3b734a4d047a1437701a5e3d95288f3b8c639fc8acbfb84ccb85b32990d65337bfc17db8129169092afa0e40063c201605ccb4a9ab3003f3c8791a11444ccd7fd259191f9f806ab80228b5418e2f16f26dae63904cbb42d53a02c2593aedcc1f13a890c5f3bd95dea624f7c48587c06b1477413f19b8015ba0a12043ed1feb8fd41e696dc7bf66e7878d2a4b94ccd8eaaab5c1e88accac119cd2d863e379883cc449275983fc7a6d16bfe1493464bcfb80e86a3f285fbf717f263f5bb6814eb044a74f1ba0fb3cd9e43ba13fdce5e918479dae956ae7c805c7f9e97dcebd8b84e5c74546b7322aa8608edea1f6d6e9bb6f3403addb0b424917fc5b6ca474eb251817ae4d2f47c0632c381e222aae3b6f585a0dcae120aaa5ef7c098ad07dca0b6c16eeb18192aa9497c5d412e0e26aae936e218f35ce8dc6af17785acb0ec4c242438af646b925b7439694f6a209d3f3b0eee36d117b5805e74d2c7efcce57c44b3c179df711de45b048d56ff68b13c9315ac7e72cad85fe189b9a59fe22ff9be75ef90b0b3330ba5e4b19c156eca6b98540538fefdbb419c371466e47b328b3973ab3e01b93d99fbe2bd6ad2bb5192f3d2dfab9c38c5ee3686cb53e51e55f95db3dec9f70ca1570404990861d6ac7a4c97242075045e2d587ec6b4cb53030dd33f6e7abc33c90a69542ebee84745eb49acbadfb1e8eec7aa28edd1bda3a18d431f459978b61b7dd1da62d4909783ad95188b30776ddd85d38b29f1e49498425459496e521e0177e59d1e91804dcd87d6e37d5bef19942d7caf605d68b050f4aff7644073f1e2bf4da54b3fe1f18d42b5167aa7437779874c9d7b5e707f316bfc007d5903ba261eb0facf24da0b2aa6d9b8695e980cf55dec5c633a2488a46ee27d7bff29fe345cb6a5948894240c7bebd131c61962717503f4fe39ad530fc70975487b0d47764108ad80b536c39b89926abc27eb0053983a6e36a53368db3c1af0cb15d81c53944e1a7df2e9713f987789f1cb396e048e39d1f2c4dd507196bdf7ec14b206331f2ff47286d5b5606f4139b8f92935ed1fa7251ae0d492379c999093c2c28c7ea8544446ba211766d7997ff9f8e3dc75132d73953f40b6971857c6a86531369df86512e3d6f61fb99827659c1190eb033172c24d294844f8d09e9e1346268cf6d7096430227b56c17a92f28a8c58ea01421f1a29e814c5c28e1722bcadca17f20de84415e5d943e645832ea9b16262d60edb8311c3cdc15c186a598ce1455ef961abb97a69376f91c0a122e2c7d7dbea5d4f06ed019bbe30363e4b692cbee9749cfacb47f4be6028b495d51e18dedba5f722aaa5eba546a5b23b013cd45d41c9867c8364cf95a015e9064f43eaa0ec6fa4fd7822c914e023530a82ee224ced62e7dae8ba42e6b7be279d993a864595b02b88764ae30f1512e053d6655eb075a587bc032f94d62b8d3602baec34f45fd0556aae0680bf6bdb22bd068bd0b462fc2ec8daac0f8f86e8dddcba403cd5d037ea4c283fe94c6ce4e1f11947c07d3bcea3a9781af9394f39e5d3a21de511724db2d5ebdb67dda096e497178075368883af05e25f9bfb0fe71790796d78d0cd7b74aeffc4409a8e59f55609203805d2831a8522653dfe4d5a39bb47173d396727fa7e6ce0bcacbe96dad6f60e51129f35acd03e12276a91fa13fc15037c75cabb0aee3a19253bb8b35cc0e63208867a032c8f4150a066642f6ff9ea197dab7e9d6da67255c16e051a43bce174a489e85464693006f11a4c61135dce4187040937eb4d1c7eda6e2c315771f0bc6f4273911a07151c63afd3f8c8cec963e4a8f5ef4b8b3e7bb663b56260881af2afdaa2201710f7793c4d815c56f4e467dabeca2f570ae2349d74291425a868fead79fd6a232ddf07c41bddf585792635b26f0e5ed56f0f91d9c90eae6f7ae0c8b1450dd70506d4ad45426f2c1d0298b5b4e24be38e65ce7ab18bef9a06a68d39036959d08742de5305eabf67e53a40d0274008284a9226d76ce2513fb2d37437ea0b6abb6f8905e14d39560fa6c6286c55b0ce94d09e1f9053f5be053ba99fabb054c60186855240655abb8d28515872845b248fea32c18daeedbd5468d2157e9b6bf70b94dccc56957376473381d6cbfd6892815ef615b7c5f1d79402f3de96f478854061367c0c25ad10a78ffeac5d0800a0d2f59122f4df2a922dd1b703dd02a5f607b43c684b5c2f10140371e212ec4bd7eb77acf02d45c079889dc38b3a0f18d4ca57959af98422fef659827ed1f370be32acee884b40da110b2ec27e9461f9a6f010ea1affe3ad63b457d88a816398de105c00f13416a0e41f4c5ae4d54171f5e1a8e3ee46c1f9c5b8c61c0d0c85eabdee4e8933d20f3b792dbe33c6e4f7a84804e72720b5682daf696df51059a18fe5324b32570b75d3589b4df62ba9cbc527c3945fb8331f72a62f160c9a50ffaede461ba364c98e8f0ad2c14b1c0c05f01a857932bcaa2df034728708b3d9e6702e90868362f3a498163be2d9a0f5ec53aab35c493601dbcee09a899363dca0fd5f7a547a5a71fd16043d7749bf4cc9135eb3064b2d207135320fe452b341737cf96a4c32532be1305d3f4a4281f9e45bbfee3fe1aaef374cb33a60efaaf0a81582ca375055089a0ea7ab216defe4855154ccceb3b455743cea81c51251d286f28401dd7f68f36fd96de8c57210f6f41da5b67d68533d722c604dda62aecd57388677066595d1a7b9345efef8ed1578e83a1212a98f8c77459b076888ccca611211947aaae38b8bd5867593a78c2a5bda9c49561d712bccae2515372bb0b2eea6acc000f75b096356ea954e29f71ee31a52c4116d0002b99086e10ff4646b441cdf6362f403337763e926f52336d759d1e4ea0b4045f9851344d1b88befdfab9d32e56648e5f10e250a9051404f3f0526db220b3f46f97a5ee94ff99759f46d512eaed59b092c71c4d53b2a254c3d2e42bdd6db120de8de9afdc29cc1aa94d15f5a26769775cae967d290487d34b81d4c156d4160a2b0faee069267b0eba61eef3eb613e233b5bc368af572ee109a1b6d684f06d10b3716838e26230c24129d2b63c472244bd3325a84d37220e7ca6ecd40e3f20e52677a811ce8987f5bc0963950ba5c06c30e95fb48930ebdc1305e932493ccbf7f266d0f393f8daf9a9850418dfe992fa54d2b405f9b0f6aa7b435e89dc75e8c985e38556b93cb44e881156ca3faf149f9783e5250553cd19f3e39f332e56e1ba7f6247c3d4d1be74e662be119142cf9c5761459a3275f9ab4b6b4dd6b56c517b3d677ac34d34340d22cdbc977b611e91331f57ce17b3e6deb04eccdd0822b26c5e6790cda8e0bf67fbc6d4c46476ac1ea902be391b8a3f04e102aecead167f0e40e74c5b6e63db25afe29910d2ffd28537bfdb73b4654cee4c2b56140ac431e1836aefe50449f1b6dda57c154d593c754dab220678d19adb503d7555a798558694670e0310efbdabf393e03a4a3f346f89593459ef5bc36cab9d6f0c1a1f645e0260293e0ae1796580127808300e74c4495e84f67e603102acefb59fc8d5e8e84beac3ee58abbf8411c5a607c54358142c0f9654bc8b8e3dd288eb993a485db5ef6b60ac90cb1a781701fca1408a68ff9ff0db0d103a159ecb1d7370f4d32d374b7671e139ac04c20e7bee6d582021b713b6d5881ff87185e4f1dfcf7f22f1ed0e709a34b9eaf8f27687edd462b11d0b35a6284e32431c83becaa30d3fa42657a70e2c0fa7f47179ddaa9d7ef6b9a53c646325c80db69128c6fc4f92ccd345078383b9ea7a5508d8a2785fb59ab674fb2e52509df8af59e58c0b48288d3cc86d4295b64da789298f6365b720b513e6a802185b3889b9e13a7c7c2f17274d4b0962a8c3b1b60d4e1eaef72648dc7e84c37e0988104742c19816c356f6f181275c422144bf3c5e0106d3a14f868732d9edf0ca89cda7f675aef9757230927507e68fb3cbbe90f7ccc88ff875623bfd408818cfb2c9222177bf8306e36c7095472899c4cb486a671bd422614a74612a7312348d958b5c70327a51fc3cf3126e6fa30ed8c5d50f2868ca39703135ad36cc2d0288c48cad5f404fd4c9e17d0e6d0be64d643dfd15c85e1b33b9cc1e66cec628d145b2559b4b2ba089f46362bb2d9652d3fbb61914a34637bf827da7244efba64f48d17eacb05f2ce010553cbf0c89893103a0c17255dbb02b7eb8586c33d725cb06b450684b55458582196360a66fe9f310907eb56c691506131ebab519d317d303dd834468987ad8ee328f6667b40588a707b9543388c6edc41336856d89fd05d4bf7fd7a4a34d5899331936ecf05c704b6909d567a5463126386463ab6655c1ddccbe886c002d93379d8938829f6f285256d8cf6569237e9df0ccc65ff2b2a59397c7dd3b39ac072dd46801e52bae3f6033bea8a92eef34bfcec82407b9840faab3144c9eba3923006a3e19713faa24099213d7cf70f9e1f034ff031f255a8e67812c6d02fc657543d163f5b325e35492f480f334d9e404d3c5c9fa12b0a6a07e8488a5149ab18c6cac721d2778da6fb0dd8e7175c42e2bcef3c16f9ef5e8c4345fb18b2fff9dd6ef5df0f64ac30fd3d7af84e90eba48a566416dd9f06f91884d552f95d1a58ac340686917997ee40f6c0d0cb06c46b4302e3137dfd388415b1e276b4b862728f0044e33079027079102589e6e1ad4012a8b35b7d794da78cb2b28fd12d9eec8dbaf81f73ccb35eaf72f24b27896fcb01311d15657d0c09846f8dc4d9239871ae4a6a61e3da725feb046e3d1767d2b31783696abe703e5305cfbd3d530216a7fb98e2d2060b091b34aee3883de19da15c87df810ebaab2c18bd8923c731e1367b8ca89a67c83e3b9258975321609a3cd925c683e0c31b3dc31e389ebd1ac1c7370f03e08b77db670dead3c74c4d8f2d95466897b9f2562e10db13d5be247d0235073dccfc82a646ae4cdf0c450e451b98d00be623b123a607dc62f151b7df8e7f5e9c88414f68817c670349940d84afebadf897a5684c4daf096d19ff3bad141dfa6939e248e8bf7f2187a7c2b0139195c377d3c87d97cc104a7b764f18b03b15c5eb0a67d3f0a9c063b24d5661bc689efccfc21259cdcb3288d530c9b7b0ac71a56c21595a46e74616ce63d88745dc0f3e4a8b0d64b6f11ea9c46ef57e750e398432a64044b3201a202113d1897797ef732e57410619e7db978e585cd6c60a734986c2a2f9fffc426bf483c8d11a3e4682c44d35a8bf5571387b1785286c4829dcb09c09e1f225c8dd8edb45c6f67c1d53549671b071e1e976d5d3f8da306f6225f85efc645440b3603944d0d0d2f67bce26597d88f5364a38e2b33e56d827270ba62d04eaecf80cdb3be6f257785768db81bfe29613fa9c65ece0de022c1a7f790134a8db83f2da35dde832c3ae45ec62aff0274495d6e7e739826048f6ee72545298709fe1d925586772197d3d68104bf613d4f9417134a511c04d8ffc4b0885e184e49ece53f62b21ae2eebed6adb7e9f50711ce1748a87bec22c3e07da4af4f61e8d401208549652c2f97685f056e3f1d087173b86f27587b185bfdf423f89d98ef2ee74a2478144d60286cfa5876336bb9d51]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result fa5ea3ade641e605b90d8a2641acb1b3de5898766c3539d17e25fb66b24f78f4

tcltest::test Hash_SHAKE256-3.78 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 2df327a6c3d0f068695a1bc7e94363246e19eea0ea1bcf8cb54acf2277c36d72474b239e142ceb4a4440024f9c4becaf608db8cebb9885df6060459c7291c13aa225de9c97351ec7920f6996528a0eae359605b5a11777bfa2f47f09d46a33ea84a7de06129490c599f2d904d2a8d10a365b5bbd6340ab15c12e06d265f8c96a36f9ad464ef0492da30fd901e64e3da9ab05454ecbba2bca0637615dede08da20044d3c213f252e8f68ef1f554245b74dcbb48d09f2effc4b937181434cd877b29b0d6e42842b2ddda98a948e5d1325310a6eeaba8432ded2255b45e0165bedbfb644013578771f399558a6261feca2f91eebe47aea2bf2c89babca21e503aacbc8998b6666998147aec1bab90522ceea5ba400d79f2bc68358eb84a513703d4b54667371e922e27c485e48c3a765f7a9532fd63d0dc2d8b6ff831bd63c2223d2ec434fd47a73b13c04a6e6b26116bb9a9807cb27c08197c7f20ae631c989ecd6e2a8770a953c8c2b66140b11dcc599528c94563461d8823ad2fb7a443627f6ebfa1e8f80b3cdb1bedf2e3c7e74f30f55c38e1dcf3c48368414dd4e8a2c7cd076751e0fd370a7f06af26dd134c41f8c08bf2d7874ea4103382a18e97ff70917faf61f6e7f366b96b4224b8ff144abae0fe22afcb1e663a6cb9546c192304d3c0dffab31e08f89332ef15fbf206137d3cfdeef20f2ab106fb2e8df7d6d62c99b13f439e0a3e671444fe212f54eb4449bccf7e27bd3b2e7ec82975b537df90ed3a17653f145c5b4487b76fdb8c8b852648befbd63c1984a9bcf23430a208d7d643ae871ea22c7e2ce462288704ae7c1dc8108d88f48c5c8fbdd0f1f08017aa5db44dd2c41e7475d3434673bc231cd435240e5bc34d5c5e39b40dd57b3ad5b088753c6eb8eefdeb428dac7900519c337744008e12af5031ae8aef075b360a92616fc382827c8f867fa8dc62def6f842e9112e4dfa82327ef625bfaf18de7ef7f0882a36ab2ef2ee947e1e55db7af6a89571dfc1052ec8ec1a6fc4f73899f8883ca9b8b3ba6eedcc88f6ba7a81465f0d834d5d12ba1bdb24214f480545ce42ed4dbbb62137a349c864f7f7fa57c0fa1bba8eee67a1b132cd13ac9101c7e722cd2ba46ca8aa34ce892f6b1ffde5519178421adbe843599790f970e814444b61d0df4e226e9c8b44b8f13978aab461eacc23db6cbf2779d015da8295664662c79f709f209e950f73fcb3494b2a4b59cfc065b8e811d67ba603becae01e54941be2e681ad5e1b2823fe7c83dfa5329f06fb11989909d6c5e103ad301164f749274049db13d6b83e1b6654cf7e42f29d57262f65c5ccb1c149bcb09c6f62b5e9b162a2949830f3b924db43156e2912ba8ce9c506b585eed5a5d7cef6433d19dc82f0f896859154020605523df8831a5d6bebdd63b15a166bbffb1026d520a88a629154c82223647f898d882f647893f0bed57e640073b0ea5dd17c146d31ec5c18edbd12b60eaa99741beed3fa2f04da4b4eb1f1ecf944ba48001da953986cb86ead3b5c8b7aafb891568a1102d1f583dbff7df2bb145b434831f8cbce7eb0072a79d68ee78ef945a6e766d2c385ee533590ea4fb6eb7cec250c1763280b41b215f89791137212a67c758afc867478b223a800f025a72f1fa638815aa766a61ff7d3854b574f8245dba9fc7993c51a086befc8bd506ffc44945e3e9694b867b898b2a9a5fa4dcf898b2bc62f32a15dbdd60f499f7e6c6cc1b725570137280de4bf3b0987469383d953a2f008ab30c8392cad8b7cf9c606ffd736d382d7df1f0a3619afda814a259ffcb780eb4599e3e43574973e07a45266bc38ba00bd042594c3f2a384f4993e424f1180bf49053627b80974cbf12ed95f2dd4146532c0a7e92f6feb6fe7a9552a1159f76eff9b4a687f172a0dff8e2250f4b2ea987c3b2e7141379181a1a1f2bf0d36eedfaf84a6105044c2ea78e9b6a2d7794381e39c4194c3f39da46caa9e680a516cfaa1e7d288f438434ca66a1bbe9fd22808b10c69ba7b4a15bf8eecdf90cf5179a71ded5737339cb51acf36db0a1464a0152cb22d4b33e503ba508e409c25df1dce6abebc84d418213c3c787ef0fdd8b3909eb715afb16b6e7dfab946f5d4a36157d18189d9a1538e9935568ad723d569614d42a94ebe855fefd4947b03a4444c2a9a5f479d60f6041b01f889274f04cb70827c729121dbddfa2648662e5d6be7300d7f7d37daa88ba9ea870247470ce0a5848cf7dea414f08537fc8fdfc6bf394f710ab311d7122c2b362b7ea1d397b1e99d9bc09e0dd8a07950d97f7ca8e94a70102771921fdcee8a2e0b849cbd4a442213d1563a25d1f6bcb907bd6fcb90227c30ff402279addaac1a509ca0cccfa33a2f554018b4a5f937baadd11ef75dca591ab9a729ae2df67a42214e15c7ced617395006a282fcb2d29bf344f3f4f749f1167e2f0f87054cdceda7236477eee3a379e9313f567f2776a3029d548908a72a6b765e3dc9dde4bb650aa2f3a4d8d4c436494856f9d562091b0264ab8035ecee63c8bf193f5cc4fdf071542b1534b164ba97d35134a76b744b1b225f9f282124449dd70cb02bf68cd704bf7494a9806a4bfc5b97cd9d48a07b735dd8af894eb4571c307fe3f2824e62ed6d37e7df4bbe32a067908c5e0374f335a07e77ff7985e46e51d8a1586e2dd851e6dad77f1948b7aa7fa43b93a4d7fa8770b9c133ac8133bac281b205c410835bb0c72c31f3f021432b3ba0e331b3da9157f153cdee8f8b290ce0dea28cdea9305564ae9ce09eba92f4bd85f7b4efd97cdc8ef674489736e3b65fedd7cc8193fb5d1b2569e83ac8c06192b0763473407088f872d0c0827a0f4864a64b8ee089e24e53583f13ac94f4fb22e909ba275794e1978f8a6136a0d54a59d2a7d9e3d20db27310c76adc665748d6fa584df3651171d4154a309cef5e45a53992b672b8a510e515a9f4b28611d214aa0af5bfb40fc015cbb7379cb1d2c1b0a3b52b7581d2f1102f8cb9173b492145c0c8ba738ab554c37a7a7d1f2c5944e2d8b743d476bbdc5c2618c2f1ce27bbd20539a5f7302bb747ea3b0a0baa1958a39f420377df895931c1f6162a87d42a214106bd33ee9a7107e3a1e74a713d845bc2fb75470463f0f7c9cebda8ae78f69c3bd60b0f0b2a086d2d541bc2c9eb5172078ca02a2c722a160747c0558b3aa5aabd529574d10206e08ffdae5dfc4b4550379d8c09a1de8ef6400a26176643c1b28d226548864bf3c7d344a9015187ea5d1ad542cda9cea5003fbff7d886bbd21e74ed8375732c558cbfd013980fc4c80277ddc95c8d6af59acb0d3c7f34c95e553a5bf5e1e0ceb6961c4af4097f2d65a5175c29a095dc082dab9cfcf4b895efbfa715c57614589d4db159543ce9e74bb0c3fb6b8008496622a8153f1f5a480cc483c3fb1a59f3931948a63c19951d0289416296e330dc95df8a200de8620a3ecc950d9db7f5c71f62a7d8b388caf5109a5938b2b353ba1fce19646f3717020b3fa699b53431fbc9909798c271d197ff49d526c8d7ba0e8c561c8a6cf4c259fe857e124a7955b8190be08e70bcf22c57007cd3de37adfe62de5d390d07ab369c06e51e656ea925983c4a61c55175dc9e2615e8ffbb73b22bd0a21a59581ac26f2ba3650dfb756bcd899dbac918a2ce5e22690c304b56536e93b4d558cf5725fe5a7f904a0800b1405ba04085fac12b1e5e40e87bcf9c09b48f5b111255a986d1fc4347247d93207a1b1c9c00dd191a67416123e72f8efb842c5e7690d05a0d717ab531a44276e0022fda7542abf3c4c03396667c53745266d287add92ab0e4653a9ef7d13ff11860019f74544a9751b19ca55943239635e2e99c5ef549f43035a6c541b45d4cf01df736413da44de8c2e557a343883bcd81d96631ed176d1c6a25f4b65382ce91c07b6683059f5db17c7474ed8568ad42ca0aadccc87a65cd8b1ef1feb897c023d1f4f6e2b5250ed566b2c4de0fad32bb46e539da8e5c226e20fb85c2eb856acdd9caaf08541daa7c09070e1feb3d13607bd0d10147a4ed25b12378aaf23214b85f64599aea6e77cdebdc1c572102985af3343fe9fc3a0e1ac7fe925dd788060ceb2cbc438002bef19697b42fb7e208d1367a493bb506cd77e9f49b84a26e87f005899fa91cc0c61092a29f4fb7c7adecca08b89f78ef7261a06d5ac659cbe18c36e3cb74c990d9506563a55e2898cdd4394853bc4fe0440273d198cc06895a0905a3094d8c5a3ddc99448d05133db1b10ba0e43b41be8c82ea881d3db08f3b8ffb2f1fdc6f063bdab6ab21eb7f9da1aac67a31c3567293098dfab1c260c5cc459ef0d5c8797d1b73420227b974a2e4e7f43d04fd97e49ebee5901c031d135454794ef5b9b2a525cec7b06816fb33c4911c5123910bfcf8c979b025a7ef611de411b245592367a114cc1dacab1a3887d0c71e5626bba3e853d1c39657de976d1cf0828f4dd3acd66cdab1bb1fdb9a76cb7c0c6764adbfb584763235baf39d8d249d289940ca5a0dff78d45c1b463fd9abc3831cf5eb39a883ef64cb79355bc525a00a2cd8115a8ef42eee59476210f89724eb3f7e7dfa0979c4c01f3badba5c4782920fbdaf95a1748467784a37f51ab828ac96aa69e9208d7eb0fba961a09cb1ca260c98acf28ea703a782cdcdd78936562eea1eb9ed34e8a49a256a5bf6cb8c0030e91111589cb432163e772d9c8b3837d9028575f08eb1bee86627a3a532ffac176fcfe5b114c4991d76f15e2e69e65116a885a3d97711550186883f9419335743667b30e43efec122f0e268736b692f4ba2c64d903530f04d4d3439aac74f881c96bcfbd9628b318f75f35455d8e956e2b9f17afc1035173483d499d1867cc80ac63b4d78c89271cacdcc29bbfa8d5041b5ae33075248521eef0f65f09ce29e75c0a02ea9b83c0a3dc014ef8c177ea3d25ea47f9841932a735a8ea7ee52a892c54a92a65479b1834e1673aeb278e4dafb7c7c6698273b269b8cf966b5f0f72c622db9be615418646796936f1465e67a26d6def0ed4a6bcfff4df7ab2cbef6f5b431be7db8919936ef0a19399a25ac0dba35702680f349ab0565307d3b04ce74241d49ec41785e804e38b0152c025f1b1f61dd0f3969fd44169b4de4ca09a63118bb0111e5508ccaebe8fe0ab242272abc22cbb300f6b0229bb8f6e8c116a7b5f9d18ff68a634e9d30e4ab20142e2bc4fb40e31bbee08acbfa85d2920873f88730289aa319f7ca7f84f3605f3a0e94704382cc4e5970b2c99dc78ae98868c3302388cb1e7b5528fb4fdcc5d00d2a89b7fdb12e54bbee51a4ea49c5f5273d2d363cb8ca7196c59196fa68817a73c9331f8f95b336caa28ee24bd22cbfce396023e2823ea4548e2ddaeb5f3d665535ba3262f601fb70d3920d2729674e66a5847e7cacd0bd9cfa234e8b89a09a9cb44578de9cc0ab94cb84ace5171dabd5c9c0d074ff27c6554f9c7a42ad53202e8ffc786b4f994f1ed08d48ef64f6dc05ed3da03143ecc669d6bfe77995fd00f50e08ba72d633eef52bd568acd89cebdc5923761b40c6c6bfd7b51c96074740d87891c659fa389003248394843ab4df445499da9abd5ecd3f9aa5a103ccd8eabe17be258a834d3d2f02c055df54e9c12428c75516845be3d166b8ff26ac5a059131b85e6b391cfe610fb33125ece098631bd66ef75b66105d8515bd696e729a380fa7f966e34dda819185b2becb446ceb76eeaea50b275dcb3de66333dccab09bf9b27ee24b88da78d15d6013b9bb46a381369c895c45d103d7507aebbc0a4fa2360176473774052c1764c28a7eed2d7383d7c009156975ee9a7d89fbd7da7f3510bd69fc70b96386abc1608ce1842943c6f9a28e003a4f72d09518caf5e0493ccd0edd6bbe00fc6ed49dc282ab2542fb90c2cb81e3616a78bfbfafc0dec7b49fb61b5cfbe8f1d9cddb2071d2a47a81842a5dc2488785cbe9b124d7455935c946130d6d14b83301890871f4e6942bedc4dcf00f4db44f7cabecec17c12fd38f192c0b991ef46f7c8ca3b9d32443e08ea4eda43bf6316684a8b93ef89c28480e01483e6681654c53bcf41f97f679406d0ca7a0cdadc874ebc65f42013e0c3c4ee4b1ce5ea6d3738d0343ccc7c3fdf391e5500d4dd93f1eb9ef2822ba10a35958acade209f3068b3248d7e8ebf298a20315311243e15f0ef70a5a03ab78b544333f85a2eed1c53d4b73f99a8bed12f5c98692d8382ff0ecadff3e105ddf09a8e787813795a9d931de6bf10a301b3393ed1ebb86b42aba5fe1b61c6e57ae682b7d6ae8c986e10b0ef61a076161e4c22576c7f3453d3a84109d163c48214b9a75fcd2047f4ae3217c986783c7a7b089526d68833d5dc718a7e809e5c44420672f6ca61b826815e325ce3aac6389e74ec3d9e9b3959b393ccbcb77600a47939701d5ce76fa68e11bae9f7bcb5e8ff1da1fc231cb767ff9b9244c46f643b20ef19240315d0ed3ae8fc2141228df4137f50f312a1307926d575b765fec970ef83e8bb4b917e62fe3080733e80b0f281f663b2cbbd3715bfedd184eaa8d2de1b946933a4deeab07ea4e2506e3bc16cb12f74abecc52db63141502de0f202eb6b9d153d9d52885e02a29c595ec821bb2796ee5ec46d96e3018c5c22d77ecc1125fa773993a0e9b440b618fe6eca74666ba94b3c00fb0514c70b60043c83a0f7f158f9a8262e816baf5bd2a04c971c06e3f315d41101fad3f86b06329ec5240844353709d36fe1dcb50073ff46d29b1526e0d8a77316eaa8fc17b93e6c97c7baa4fb99ff19e97d9fd840575bfbe16419bb1efe36b5be46fc688de39824900e877a28acc8683fd72dbf980756ea68296d06fa10f2474ca256b45a2fd065325b075a48da165cb760fea183fe6090cb3db790fe9b7aa6568f3075f8f8679ce35fb2cbd8cc695604bd8b4470c7196d7f2361ffb908306170602213e6d7de3a476f023564de31e28c4f6c0efadbe1ff187cf499a5e1a3f71ec7a414a04894cbc31b8e2d59a9f090d28919679eb74ab41bacf7f541a255d5a6282f0eb1c53bdfead7af1a439a25df6c1d0bf4b8e3b43afd35e49918e4b69bcaf42b4897c823d52345fd929f29522cad5dcc2cf5ebdee2319a330b980356a7e1ce3188cedbfd5a00c8f21ce8f206173addd276c239fb485d5c7bb34b98b6888f18da15c37b28cd07e3151fad6ea21d891fa7789a48c9dbd50f1736b01f46cc27667d96122026acad26ef114919c6ae1c85b3990aa2ab2b4cf4adec41f187c14f29a470376587776506d8a8686dd44769c29f5e8fd21fa509dfa86a8dda0a366af4d73abfa5bbcbd4057a3b77e56b87f538c33f9651a7d7a0128f3800134e6a0f3a9e6bf77b44085e953c50f40afcde436ab7c2baabd441b42fdabb2547b4faa07d627a9b50a0bb8948a77f6968f8c8d8daf57e693b15619a9a038a89e1ee56c33fbbecf7c06263c892341d4469efb63a0bf4d92e99fbc5e7e3922c8a7c4b0cebe41349b945098fb1047ab111985254cb604e597742e7cd009f2ef7c3616b9b9f2cf1073c48f69db711e3e15d7ec0f3119a6a75dfc07a05991f1292b15bc071315cedac1d56ba2c6f3cf8149487ac3fb0fcc1b4d49d12fe0605e573c0a5da2c670651bec908e4aa3df83fd1333d84890e19ecacd2235324cbc620219dea193b84bbd595cba9d695a7d6138dc62aea6dad7453b4651dbb087ee25b1295932e1d3eefd1f791e4308d21592bc0d9ba3e5c038e9f6219c6ab1783dceecd442b594fda04ef2ab83262df5ef3d110ca75f0e294eb184c4cc8b3e07f3853c8263d5b520aad85c5ab0eee3aa538bbd434e8b29ff5fc66c99a9e55d1c5774279b82384b2354c2e4ee6e442fd988a44a1857cf3c29b4503606fa21199fb0c0378768865eeee63513cf85d01b6ad7af40f58cd2518f95766b7589e677784794f4afdd68f769a8586f65bd39ae4688d42541b33d6f194960924d1cdd81906416e579a8851c7ce2548219de27f053e33d836495b79faf1a3733f67cad3ecd4e6e924e9387d80fdb50d451af44ea7a2f0fe1c6fae9e8394e23d6d871ffb6184fc583976413300adc75eb76f935a3a4b675c8cfaa7a529f2e4b045bc27bf25aad4341bae4d42e552dea51f184a523b7be95bfe76c13e5c902d844e739c8f979b10f5321db6fd9d816d88e28183a739d90974e76095caa9f12f11fe49c8fd35fa3524132118f397cdf6728857d9c9a3c74a4fde44afca80aa5bf1cbab47789f2cb3394574dda5727cfbea96f7a74a07eb1e45599f49ce7f0056ac3d14929221c70dbd3f759f83ac22f06994ed96a8e49917eddfdd2e3703b78199c91234ca6c3dc718679fb92ea3647667e8960256b875a9a1d78ab7a4ad147f4306309891ed1551e3547fc5070695f07e28ad84e3f1f55629e7346087d9cba2406adc488912d240a69c823d9d345bf114cb8088c13f9cafce7546c36128218d1a6d81df007bf915ca9643ad61bb1afab457bba88eefd01908185e5ac106dab22994dd96a886fe33d7e8307ee519476fd543bb4ead8134147f26c79117f44b9406673c39d1d2564d46f8d54ca7cd85d300160bf59d923d448c473f00e68ef8b5395b1a232cdc95a4a04eae711a464ac6cd452a37dfa1500bc7e01114ad2556982af713dd0a1430ec6c503886cd120abd8567a28ff42d10ecba97da56ec5609af53b1a5d209f7bc8713b3e01830cf4a19d0e3e1687ba3f469ccc51742149f768d5c114cac9d15ad072ed0419fd5cc8d8e2840734bc6848ef586fe4460c6702194ac9c64c743fc66df263be9783ca8496d0413e4b4756d252261b9ee3d6266af67bdc9aabc9f0a8e81926d244bc5d10248fcc4923cf8cc6b82f56e713288f15479181f7ae6fece9890ebdaae8511d54ca46ad9284fd100d679bab279daaa8ec54b341451f0f3b6f98fab0ac4be91239cf1e6d7f3679ec8da8919fc64a037bd7640aa3edc450e6245d048842342d45a57d3e937a00ea2830c239bc2ce2dc10bfc1be2f5565dbf3ef2055ccd36cc4bd811acea7eaacf9caddffbc89c22ddc6d8ab1f66de6cc576db7281404c6bc5882b6eff83237004ddc7ca5428eeef2ac9c227ddae608c06d5966be6ab985ea8e9d2b44e2bbc8c58f65f4fdf25419fbf3a56d6d93212408c5c1e32a7f7177be1015c761b4ca07c2666e2f4ff562ac0e5a8e55c849a6a06d06ac16b47ab7040286f2748d97e75bc17bfe14e373400df48961c1d823fee6b7d923e7a48410947c973d1911b39b2c88751d8b009377a675272698e34ab05caee52d3e41c4068ff5ecfd9d352f6de3e1fdd37cef7d8ede58dce3c432e6446c19d3d203d463205e362d3aea4133e6e692bb29cff95a0d1c6752a22c0d1e437dc24a1a1ea588e7670401fce77de98c9e6356266c64527dca682e6ab8bb1a34f66ff30e77fc5ce1132a104c7c3177ea731e77d33c788c654f241b445086039f41e976b5f7210798ca6e033191a40585ce89c536257f314d1363bf36dcb4010cc5f87a18845bb094f59a82b40e1fbce7156ee95a10bf68bd7eecc24b448e3b04ea63a73d07f47f5bfa7434dcdbeac397b2938a44e6815a3ef889cd88705cda0e18f4a62e69329d7743c5c2b1e14d431d0bc051fe8d0d2e57e90088f7496605b3b7711ff3905e32703654d33b069064028abfe58fefab0d91b91a9a9fb5f3e57a2fa3b99266bf65cc3deb108333fa4dcd9557f0fff3a31f73d09fac889d4da2ebe9521d15d29f5f15bf50219051d42706964f1756803c8b85965765bbeaba638e4b46f383bb4448d2244cad6a46661935f470049d80c07a4f740a6e3f828350ecbe46e2e50bf7478cd3a75c1afcf84ce317825fdcda75135ad07f6e1c4ff0928cab1c9242a90084ca3629d8a759d2e897674dcf1976a47f2d137f0e5b384851f6788eaca27da72814b49ac619473c14da4c98fd5e3c94e550a6d2f60324d5b4b38f65d80e6f345bf2b5c1d179ad7df8332e2d91b2148f6e4cef40cd1cfddde44a5668bd8c67ee44eda1679fce72debd2a75d2321ee6db42a858913bafaaa90943376104274d1f0c8ce154d82080a78b47895088a89ac188ec488ceac213814a27981654e4090dda58db502577be208913d26e3c5b188969a127fa7f6020accf7de35156cd8300d7d8f8232edc1490e015b9f6f63c487b0c4e5ca3a58eb974c1cd7fd8b2e9a4422b94a0949a566a41b7d5a4ae5d5512df9a7b514f0256c61f48a0d4730f40521afd143c6d11eea87937dcfc601aad5ffc3ab06dc63ebf2ff68b7c4aec15db76cf75e132743dabb78188b12ad2d54c151b157618cf02d1dc41b3ec490a6dc1f9aabd82ec72c3957da1d1dd94cd353b1e845254ba34f695b548e7753994bffac1f3fa7fd02e4eb4e3203be6a418e281607f1ad3bbbbc112a35250a18253b28fb8f2576148728411d148ed56c17d8526c5549579842d0b518ca915f78c0fef87c5eefaaebb040db3305f0fb452c2c633344aead17b517e585a9360ffc08f1eeacf310bf191ad92a2e6aecb89c1b04caf94aa426009f1c031f3595642849de6c1c001b3af3135bbe7dd7d475c750fc0a2cfbcc4b096d379e44143214741ffef137fa7197205642f89fb14abb5d6a7c914ccc899488bc052772a98e996607ee2e8f46b67c1740297902aba201c4c3f100e7316e8b04e80f2f498a2d5b847e267480794c225e6d69a0551b8ce1a3fa13c97aceeda7149db036272a70e3460f3253ca06c5425c3a9e1ef5856dc361793f6b85f979712e3992acaa0f0bc921279c5cba73945497443135626dc72f93cdee678745a461b8381113309c5055bc43beefe0444bd195f6cd942a592baea174ab3dfd37f0f14935d60a5976d1416e00249dc9fd5e31eedecdbbcbcc0d9910e9e06f5654e1b867af3bf2931320f4bcd967e6d6033dfdf868ac0cb53adfa768aa486c3100e92f9a00bd4c5bf5a1f83f3bf34b930a8dae4930f317853a24322f422dc50bd099cf36d6f4a832a2e6b44ba4513c9f57afcb67a44d5caa2e7dc1cb2e1afa455855ffe49e6c76b58f61c198aefc5a499f26cdca5ee55c929c4eeec2ea9a8c8becb06a19c37f38432fa5987cb86ef52025853de7ad8587dd081a11bce416fc3e223b765ce2b78d6a0814b18e5d33cdc1af4d84563c987ef80651c30fc73ab9da7d49ad0478afb698bd51953409b5149c70d2498c7888a261fb988b31f05045ff728d96c6f1c2746d93cecc044a9d9a1f3ed5e5f0ede082a96c50c2c9ec02410b96599c1afa8a17474ffece85ac47aec85daaf239f93a904ced1d124e36cb0b8d5d405556df814fb42664052e8b3dc33651d3f6ae46f16bbae25ff2355d1535f32bd42b312d226e42db81186583fa87e7bfe35bf443af7571d09bdaf5cb6b30eba687b6007ff7f361c3f860d103086d3afc4b9a727bbf3e105c4335260e578cd541cd6e5b347c8f9f641c86e7a4e1d3ce9b9f5acf5bbb3604d9f8a93c9244ba2e8237bcb7d71a935a507fe31fc6016c011230e551702dfdcdde2eafa003cd4975fc3939acf47c9f310d951df003018670f4b2f2af3581e5d9dd57a106bf5bab39f4546d8108fd13b1ffee9ffed84cc3acb797eb4f28518ec75bf635c7316a5fe91f1bb0fa7126813bac0ed192b25da402df5237a7c5076904deacc6780693f811d0e1bc6fe983785c96586b622dbe9821e064705fa82e0520d9cdeb7fbb42d432ce68d867ce9e6983436db5d3a6da10684f512dbd2e3fd389d1ec1d64ac01a4ca4bf3ad689cc1c54e37b1596dba5acd6490bab866e3b764de5b89c4cd755aca56fe24a3e8d0a81c2bf7c5be96d49affa538d3b8e3452f296cdb1979f093a8b557397e446f06bbee9ae80d6df582255788cc6e9798ef01a1d3e53dc59473960649a2530771bb77bd299d1adff04f8435adafdded1e3dc96e91ee49001fb18d3dbcad6575874b65f8369b509d1d99324a82779411d9bdf0d0257adde208ca08bc1edf0817264301306047512de40ba9e685a833be61ec12871cff6ec3d6299311eeabcd54b54ec3f635459efad9f3759a45b63f4b3d34a8e3d7007e2e0e5cb6cfba9827c6daab38aa040a8c9c75fd0fe631261930c2441e76e2027e9927dfee55f128a9e60d04d9cc7afacc7b2e94e35ae67c541797870dd0dc99f29d992f944520d1b61aa2c821edf8bab12f8a478a58c42d62583389d162052b8c9408c8530dc827ef0d5281ab8f1bbeed120f718f7058bdd68b1ca913ab2a3b7f14cd36a510659fc71692adc110427bd2db34cf4d3212a22318c9714f2c8a4e7cb87cf7050d77adb0dec9c91d220b7604e380ad6dfe907eda99b07eee66c3d8f7c78e85ed558cd63ebe8e501a24d531e5b379884c6640a86f76683e6bda556f62fa787fe878f3bde34e46df42a94e3407d3960c62e9a1c34457571c51f7cd7650a9d12160f86aa920f699c3212fc4f0edbc5c966c0942341b8513a53b6f7a82435e1f36f144503c8a5feda82018e7fd09e633b2a235908f37a8147582721b17bd9fb90d13fd22fc81d2b8fae9f515bceed9b1edcfff1b493b38dff9c1dffdbb21e745304383715daa078237c954dcc50f1f6db42fe650e688afec9e63e9b0c102bd3a3cfa67c9c46566efeb58b8ab89dd1fbd825c6bcfdbc285a0f0032fc2dde29a0e7fb32a7ae5366948821281109feb6337e4cfffe6bd5b52c38b0a22a27653f64895083c2324bf9722a8715e9a5bbc824358152343ffc58f9acbf362ee0ea96a5f09642d40f7436914ab0fa1a761c2e58668a66656179394bd2f5950f42b855ee849516e62f17467852657dad626811577730e599b89481a9141968d53416a5c4ad15a8ff797b50afa86c49a953e998a7d23b74d82e95589cd9f556889d4baeb1d3dd9f27d5ea7dbfb68d041630e5ecd2dd73bd2baac3e5ab8a4f083167a0973c5eb6a4662baaf52fe29257fce1a5346002a068991568515e8df025d8795d89eeb6685fc56304df879641e9644d7199d7a8891d2b55cac33d4ba05683bbcaab4d43bb774b66406350396463555e9143c136f783e8533164d12c26433c152e26e36e7795011aa6ab1133c16cd8fb4c59a516b242d8f7e75ca1994c930a6fd321389d6360ed687edc52eb21adf40ceb040caf8203032a33d235f8d8eff6b1ffc5d239488119380f219ccb4bcdb17ab66b7d692f6e72d25cee16b293fe06c3fb3a3babee9f8d73a2a0753a0975172bf5b780ac802a2cd8abdacb304569448d0fa7fb5a1d6350ff7f8168a0214d2f08f00f9de03ee0392568bbdcd9b6d7b8f8823498ad9d7469c6eeedfa665cfc00f9ef9c5d6d3137a2a0dbbcd214adf169ea9e0b9c0e357ce3af370cb5f2822b92e7398547bc21d86e304b02344bf45f5f4ca9518fe4af20c3a1a10520ad5b81eeb817f3e433d66aa5bf02b88ae551c8a207ec31f796d10a13867501c3ffaea71b56d10eba3b1796503446045d4a8dd43b01afd15e8e64e2db45fc272751454421a7affd533dae047576600e33e1702c31243a594b332f4f21c67ba0d309e6010995f8e9379f615b1f6f98ff9714c1788c57d4f247edfcfaeff13d934f915a86da07f6f9eccbf943530635ff0e4a4a5f5481c6c4d924918b4cae8929244f697a9ce4ef56fc273e661b23813522ecd18a928c59f68940b7a941e5a689d9adda8658162c27ef1df7697eaec2ca5a601fa14e5fd2b0dfa936fcd47eddddf61177511584f5954b13eef7859041e63e0ffc4b8ee27c1c64c8d62d0f61764a04e50684db1692c89a73e9b636af46af57612f305cfd9e5f9f035fe4fa76b9fa8a9050c6b2b44ae763a4b14e9bf418502cbf82f9bf987fa418c398c89ca6ed15107a1dc0a346661b2f0e0e68bc4701ef468fbb4ec09b681158714a82fdd75cc21e0b3519b5b42e8b8519c7ac9f9147b52b3aa3d665eea1cee6733dba25f24c2a3dab5f7af1e6ea60ed2da6c14eb833c96529023ab87a72044a3339171de00675f4c2658b5dc5e2c1efb27150d1a60d537cc3a022c12523db0d170641ec87d2caccb80df304375ed71410f1002e411d7df66f443487d8fb7ab6896be19ad1f7514cf5205beb25a5c9e3afee7a6f73aa6d5d97b81b127c430acdf0329f30a5bf34fce1656a1c7800c0e5f830659c23fe4b38a2c27d6af744b2dbb42122b5ea709864e5a6c99e16b7e4a0517e6abb395f4010f82b039833439b673c0113318a53a70d67a91f79e9125c9e23a131d69c16746c01ba54a3168becf9f29919ac6cb0897ed13715b5d8585167d76261f4366b0ed4243919938a63ce193db3dd2f78cf663f8918535bcad3ea81d387a21eeea536d0cc6ef97076126950851506c196f765d9f9148073a9c9507681d89e5bac0e16e95e239d43c1e1e42533883d6bae72aed387f344035c83aace481ffab358ecd3a6431eac1455186821add42a34a8866ab59d7c4915cb49210f8f22612edb889890e328cfe919ff1cca5cc174246c7cc108a27834b0de63ddc3c0aa79d51b2a8b2da608aeccf5dd29aba817c443e39cda52feb0b0dd7d180571427feaaf011ad408f588f0c4d1fcb649fa9dc19af32dde1e18e963a390b1c2a27d695dc4759f9ca6366e3dd995a2ec2eb81c14308579f4f15aeef50aff763bddd9307a1d60020b91d3833f142a18f3e14c5d640d82c645552b860f1ab2af99aabe9be8c1a88c4850328f9b7c76a6f2ea1c255a3ad05df9d1f37859dc91a40391947450b837827c6bbd5afc1a629311d2923f9ebe598637ee1b8d7a57859da21bc381590bf32fce6adaab08f4d6297a1f1472d7a103882732098d1b9374e19dcfb38bacc1c6da67d6f34b6715bbae525c0c85adecb8adf2272640e39948b91d36cc59f0e297ca6e376f03c282f76bc40ee141caa65f3bc055da6d7b70e76d4ad677b5ce774d480c13b699c14474a8f5bffb6ed3d7e07bb8438ede8a203b454b3a1a65ee87d29c69f430d50b6418ad10f6c2d4738723b50379a859b9b22a8849e71f32f71a0d0eac61458149eacdc13b3c9e3a50bf0f31c87f92a7b02d9e806b67ece49238e6e6fee35d6322dc7a2d9e18f76912868e3630deb29016997e73da40eb4366ea456b8601e0453f44073a6312352a62e5880d631d72db93ffb2aabdfd82161c3712e66d4336ed47295b2dafb2c043e8e3e3ff88c43952d166216d3d231b275b28359fda31c723e3946051ad81007c4b888852c85b6ebb75d6b504823c1d3cccc497def654fbb1bb8cfded82065e9f33dc5f4e4a6b7bdf2a5755b6b3d0f01e16131eebe8333b5e76191a4859c940724a]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result cbc2024a0b8b7f85f622366e88a295af9dc1d210ab7c1c5fda33e4d2b55f0fd2

tcltest::test Hash_SHAKE256-3.79 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 8002dcda2e7a29155d8d4fc6192953761c2972f8392aaae3fb9a7c468911f196cce5dbebd4f95d6c78d5ad083dfc19687a794821b9bcc32d5fa4b39c90dded874d6c2b46df889ce279aca0cd19eaccd1af82354781b3eb89ced1c3aab1985a6449c0565117d1ef5ea739af7e739c759b046bc0d25ab82adf8e4933d6b6eb40150908e476447c5dc94ca5628114b91cadc15d722a0c738917e8338b8a657da881d56d5b1c2d31ef09ae17413fc4eac7ef2e7fd1b75f8b0f1a24b7542d88f79992f51745aa9b97ac0715b8d5204ad7804992fa67e21ba9c5ce8aff1527e5001c2fb02d298a56569cabcbb0a58d70274ea337f5bc110774b11c623056df454138404fd890232617c7de172639ecfc833ae5639956adec95ddecf375a0bf6f61f5ae1a3f01ddd382368640421aa6b7924af75f0ebf1f92b3512786f4792e2d095b5f598b0420243ef08c8f2ecf2469fd88c1737b7fcec17714b363d56c9445e1733c54e32154e2f4fdd94c0fe0cdda6bfc2ce6081c2141882d7ad241fe5a8090442d5370e1e1d54b6654bf10d608d185ad1e02df2082d990a7631b60b9e6a6bfd61b9d59cb30c5ec32e42f56383f18f3a3800d25135853348755855924a17f1532ec7bc768a77a7e6973e60c8ed9755ce63b50057b0a751ed73a5955c7f3d23b5f8a35e23eafbbaa14e82a58613eb1687f3513a5e20208f69ff9e07b2b4569d865db13d1d7b15218392a446237d594c075589e2dcfa7d363e57a5ff4d7fd0a954dc95cbdbb13056fe3237c539b08e50cd08b38c6cb61a00eb3a521e753857e1a1e3b5acd703f9d5717ba1953123e6ef398b52a985d98359f10626d7d28438d0ee018532a809be27adfd7658926e0f51ed6c0bdca0db45bbd05998adddda1fe1a9c4a90fb73919b7d4262a61e5e54433592933684631dda109832c131fa059be559b85969cf87920b4944253a420320dfd216e0f0e83c7a41d3155a9e08d92a181f4af69c1ee78dcafa632a035b5553c4a0310233237703f8be2a9d4e8e84745af6e8aebbe71855625fa8fca430b3a68d03cce3789c373cdc605ad169146e4154e77acaefb382b27c80fbe5434a83dfe204cfcce5dce5ee96c18b401622ff59adf9e8925f098d6bc063452b092f2ec76aa92205a26ae7e1cee9a6307e419f830e351a4e3471a14ad5126c171d691d26cefcaed6d8cea7dd2be194eac9f8b6891fa1f9469573261564955af1a780b7c4b6055987af918baa55b03bb61ed0ac3187486bc2ab98849514f2f501d1fa6368c8cb0c5f4e3afd0ff55e85dba550e944ef2f59099d6723928e33278ec1618bdcaf56b0a7de5164d6b3f459a38800d589fe60ac6494696cd47960d7e29f3c96e611ae2ba8865f28c536799e54ec68d9ca5de24a1bb824c5227e7fed439414ec4f97dc67a76febb0a527f53e37fb115bcdb3bd1d7630229745459a50fac870f5dee8e74aefc07d663d2d702094dd82c55ba9f90cbc25eb4b0675b8ea4f62d8185dadd7bec7a29db157f1f32cb3ba437d3ce79ffe37be05472bb6e2a2898ad4c0928db4aa763dd4f9b91a854adbb9dded3814b7dd2d24faf57cb21f60f26aed52473187f545b8a9a72c512f625602d77b17d84790e77e52bcc30e770cd027aa37424058897c3ca521783ef85c6abeb991a0dd59ffadf59303c675f28f6cec94d74c632d4d63f04ed06588e82060150c969cc8f412c7b147344e8d99cf0edf319a2c42102941fd2f1cbbd80797802e56f2d44421b17cd9f5b623fe73b5fe280ce9ac840805608acd6e41d55ea71132220c0df7e7c4159626f10d71882983f0aa2a92d11dc906c0b22cc028f4395d48f54e12894e33da0f614dd48ee114e65f95c7a7d3585e7cc765c00178d136aa99591faaa35ee6136d2e323ffc855c709c5426b32fc0aa0ac66e90c96efe84414dd5e79ced20c508d7150818647ceb66d06fb17e905e96f7e55606e3b2820d6a8bf20fb10e9bb901769f37256dcfa713226ececf9c380a8d4ea38816eb65b76c7b36fdb1afd7a8457153272fc0857abebbdae76ffb59ef1226e08029c1b06c91462b1a6477dd7c1df1ba40fd04a64baec23b632756c62bcf989255e5de6a131f1459ce910fb41bd11e5aeb59e23b012c6017aabd5588a80cc9436f12e79b945f0c4782021e646fa91fbe8e09024b8680bdf824f99fa84c11e47a3678874bd799577d9c7d4df65eec1d6b93d60bdec1f2006539a5dd2e01250fc012de6483c3151c8386cb4471d2e43feb6088a6fc9aca52e75187b620ae91729c6b0d264a421a84e2a6b4aaddb2d7aec45fe77aaef94fda05d469d3883b9e3796a9ce76a93cf1b72166ff2743e60e9181f6ba30fbc6cac1472a11db6d8f91833634e7fca797e3dcc82d7665aa55d111a78fcb6fece9832e35bb4777d894b5810574205f4c3c361c5f62df091ae96856c091e0e0884bc24a58efd54fd03151568ad24347a013329e6f6f03be9b891a875464c22ad7d2cf3c372f820a5d4eac2d4db4165eac04218b7fbbaa2a361d30cde97039f6e167f12d5ae1155187d40f2cd783634977f8490a18ae9bf5f28ef24f091c0decaff372454a6f57cb57a9c27bafa8f0b309d5f444c1b0a0c8d8c2a8363bd205b3485c98ab8e3f1021d4b60d435d8985426b85686002297f4beea29aa908faeaf4b48cac88aebb07fa07e338ac6a90ec9ea4eeed87638101253e1610d1f6fa8456fc69f503334906fff6198add5d24ec70bcfacde16d20eefed00751d58f3b9b8227ddbd45a453d3d8ab3e4cffbeac4c60bc904e95a76f0e80aa5ba6de5b25f71f3dcf4a768940372c2e3bc7391692d515ab97bacc9ad42951d6fc5714e1215fd64726e6bc6b78faa385f940b4ec3d4f3891f957adccb806195cd0ac9ea9959d4f4bccd742d063e4e6ba5f0297c8158270779d6e61c7846e8142c1eca53bea773154a8652e4369bd9dd554540b32823566646b460f139e293092b661502089b62567a2daa949f24c70dcc27d38b3ec32c2604b29e03670ffd0549651c8dfd822d28ea27cda6c665a05d990c645d2bb3f2b73255dfcba60b8068e4b0534004182e1d09095ea332daf07d3a6775b18572549a6e12b8a27d81b7c4abcc5bd0b2b9ff936546b0026af131cd3ecd8a10c29abc50067dbb2033ff1da8fd1d98b89fe42c3c6d74645ce544eece04a304036979b47899fb59ed8fd02c7667288c5022131e68aff70e1b285272002a8c95f1e0abc764a7201732d7a16ecd5871b94fcfe350b8ab530fb5ba8686041eee9274debd5fb4ac6065c8b1df5f1e7f8da1f01fc15dacde2cdbb4f27d753a604d9c04aa0af7d92850d7f7950667da1ad0d8f98839bfa5b6c904a18683da238d2e1519d9312a528955e047f7b33380d8ffc0b4afb8d143c3dc1d03ed561f500404802cf2ac51b16e04114250422cc3284efbc9dccb4cf793ba87447d40df2043758fd67cf9286644cfed7f454fcde18752dc91b5fd8d418508c5fbdcf07444e9d5767ede93f8f18c3dc7473d38819c84bff5b4c1ac1ca2463b7b9272d1891e65c8e6be9e095dd3c2c24132be9902249ecad9ab766365aa25b6fa90e560882d25a452ee41b5c19d76e1fdea2ffdaa4a3427fade4ac002c9c22fd57f9b29fbe1c81c4db66045ceaf27312fb627b3045df34bcbd5b52e7e7199fa9ec70a9a5eeccb75298f5025cf994224892f3c758ad04a9aef1a5c2b33422baba90fba3e1b9e8e6388d1b7d26edc56308ccdb491a851a8b9b7249622cbabe5b7a6a23081cc87af5bfe45fdd806f8d1e99d0a46b40752ac1cc67cf9c1a22f56a2fa36f401ec289cc2cc2498b3327f53b44c7d59490243a3389f9c0d74413cfcf226268b3af501e53ca5162ed07bc04a351d9f72bd43b55c91a50a27a733655729bd094c9971a4072e0b9316cc3d7c33c082d919ad261806bc69300ef6f338e3ce1157deb9dc7f711b5223f71311f38efb0ec2b48533fc501d6eb5f9d00b183133e58ab7f8bff4b1892b31262173d6da5933d4e9d1e7d2b73927f49ecee583ae1f8c1a5ef276c456fbf9434a83ed86a44f7498001fdc2baa94278454400d1bd8c587af3a13ab4ecfe84ee2dac6e9935b525384cdcb6b67b8b2efddc0dffc414fda6a81dff8b7f49ae29e983d56e27d8e165313796120275029e3794afb4d8451d2a76ab6fe4766265f5acc08a082c5bafff5ccb97d94eb1f4d94df892e4b65ad32c0a265b0b40410c31606b35024dc4063ae28f48d341354b28688d1f5a065a06f38c162ac986ee8c262c0d3d25341dd05feb0b0fc7840bedd3b0ddbcdd6f4ea0c8250144e6f06fcb19392d0a39896ef4b69ec8557fbf3bc4224c6fd234993d88f3fc71112a25ceb355ae530406f3bd5a87244d83c199cbb65c65cbca282d2fa6bc3bedf95dce132b21b40893531b14ea1aa522ff56bac5adcb227a0a81d32de26a07fe644692441ac473d21feaa97a8cb648d03306cb3090b5ac03fc07323d24478b2abaae1a6b6a87123c109144f828a535de8598741547632aee0781f36a5499ecfc635d0e8f02b2bacbce119494a62d95d45fd65c7bb91dc5c492b9bdb95aa955f9c71b15b9ca8d9209c1324258ee97903b28862c6ad02ba50b077539341ebfecab4eb0d7f0aa5fc37d51bbf64ce82b4d9a48718beb73d4f14ecd7e0fe28923d99961e3fd3c8a7274afe77657777d30f579275f22048a61d2124c9ce6cb811c454b667d2fa5520cce28e9290ee193f0af602d1899bffe1a6fe1ec9666f8eff3584ac7471434ea76f96fc19dc39213b1a4d8c2639724b547f14215363870bcf1391dea0655f03af81c0cd59a1d93e6bcfb684e09c43a98307fbe2f42043bce5b114c398599e22bd95f888fe8c4ebf259dd9939d3c9098f1d42dca28371620f7c07601a8b8910a363eb6a564e61a221cf72f2eb864e9983556124d6c128ec669b44e0f7dfcd848bdce83a91959cc15a68e1fbccedfaf35a21051e34c4d1e1baffef54374a0c46cc8d7e81aa851c4e846a533c45cf761efec956532253134af5f131444294ee5c4cbed3c508e68a54891eef3ebcf3692255957b4a0938962efeb9323980851dd0f5b7129113808dd850ccde889a227c0849cc9d8b52390395bd9f19bb59e43eaaaebf616a331bcee4c1bc47a2482457d7c1b8e39f631f02871aeb0f50357bfcf05e1fe8dad07ef47fc43553152cc1a197a49f760da6b13a0dfde43b827c10fcacef20d1685272a8b241812a68b0c10350dcca7d5d81b9542e4ed3c6d8966ce9e54808419d21bf928420e6f3233beb240b508121185efdf7f3f500d7daeb5769a4511f62ffa52d59fd49add7cf3408add0e80c8ac5a447cc62dab39711e39924f0f2af5c184783a625a51dfdf305e045a58cb2dfecbb5d7b86e6342d04e7f9c4d113fe57706d8b20051a808d17153b959424bc49150b07ab64ffcac23c5d40ee4f9c557a8d810b70a4911cb1c3cce144a49872efc9fc0f04060ebf7e3faf364c7375fcedf9e9cc3d0af33b8f80929afbddd01cfa8ff63c3073fc59889743a38644873bd93c0f96304026234fd5cf2d6248b50291f06155d4b3afe109cb834f44cab85a66dc5931f14d141c1a4beb6320ec2d6cdd73a5239bcf119e2864d6022d0ef1a0bb6331642739a37018694e04ded221a105a02a6e2ace09da0ee9a383e9171b570159fef87a0dbd6570b761d843007aea32ff58fd2cb87edbe2e2549b21ee1cc55f4427b694d049454bbd8aa6f8801e8f8c19989a47955aebcdd850127d99de32feae16631a8a2f56d0043238a45af7d83a75500b236e8450f752ffb0a42247e8051e32cab74357e12813c254f094ec0c659bea19694ae45287d8c93c3f90412e9d1de3b21104a92d7a72a0c38438e4753414cc8cc132623ba6f21680f5ecb34bee3291e2d0d40d84efaa364c074dc959d067602cd22de6517b294e426f3d84881fe5a4239dbc6b2caf42ebb922dc8201601c0cc1454358de2f04d94b548b9e2d59be843d20c3ab6ee1c226d17cecf7b50dbc3a12c17ca028e90c1f634ddfe882c3469af800f1b592adb2515bbe8510bdffce51e8efe1a678d2c7895102404ace86044c1ce54e71e03c9bd3208fafb5605ddab90b7779531512bf7ddf1ab6ac5bc980037079e3c7a0b60514e89873cee74f68d943004d8d49d07c64d33e49f66fb54328bd61b7a01943767c7a80d8439aff011b5832633d5a3484a7f61502105372d421cb48d2e294097873a0f0e7fcc1922ce611b7c54c916761ac1048e8e34f27bb5862d43d77593392612090a7e1a43372a337347ba036919bdde97e0355aafc81334aadff45b0e74daec30720db8b085ab892548b2391d9b8a148605c4fae1aad1c4a7c2036e14d2fc251fe5ad0bd396c8eeabcffbbe968425ff795fabaa1a9c77a2ce9a931338fc205921c5eaa83ef308d0717de528866c181bcc6e67cccd058b5b69ba11df0d28ee04e0a334f25522f1db10b31cfb4fabb6e609b267f77b8e735b13b10e45e411ab94c6fe1a9eb89f0a7af40ff1ab64cba8eabbbc4a9ea89fc61e470ff6dc501eef955f4719e1cbdfb91ca60501bd685454964cfc7e46c6a1fa319e374a06f3d92093141ea180215d945ca102dba5bcde507557e38174683d962163c7a65a31b8f4fa8fd54fee3ba112977fa9cdf8f4b203044711e2ac1fdb107a42216a4a8c36b3581d0b73808d32ba798c6a872b828812cfa508104230030f88b3d5245c75eb12286641cadb989b026f71c565b1f8b8d633fc26a8fb4b3dc9e933635304814e67e7d5e8a473e04270e5aa2b0820c9dce3eda6fdfb2be3f406184b5c74e730c94b02f690aedde6b18c68a03bdcfc686cb239500eb5587cce1aa256111858f6f4222642ba387e2e60bb84fe5852b976d0c7b361d9360588149df3fe31abee664793be44c5dfe929f894b70f1117cc57a1aaf866de1bc7986ff6a9ae2ebe2be14c0637675403836bb19e7b7ce68ac99d77c254d99dc4f32048bb1fe078ad760a79f02e44e551e166544f4ea2492a15ba9ba4753488c02cb23761e33fa018714449e80f47ea3987ac391dad29d9845531b5d7c5f23fabe8b0a4617006258d8221346466fae328fa9fd880237df817ec952ec2b3bd22d69bce286062fe895b4d13d1eba1c850be9ec3cb1d2e19255360479efbeadfc2deca4d2bb528633c2026aeaaf45c5ac35908ba895b3975f1d544db6ee9c7e4903308b036f63ceece6aa35417f5030cab86ace68bb0e23eee0c0ec31722d7663b61cbb9c29a1ceba0a937a6b184126889d61fca5ab494be6a662291402d95cef4e977bc67274504635a7819002816f8eeb5c5f86eeced8ef77224b842708fa98d48b12a9d1441a376fcd91d6c379d383aa423d340b0391b35ce89cab682216034fdfc96cce79f636c0edf468e5901a0fe3fddfd68a5240d75c9c62b14d8f79dbc77be838f17baaeb31f0f06cf02d0bdb9d748d95f422ab068026e6be5eb7ebc64547b734c3b2fefdc9bcce0b6aba708fe08f8f99d0da9be6cf6e70f82403336ccf2b7d89cb87bc15913ad66cdd9e0fd3b4362c09a6e4d81f515c488a26d91b77700f845e9160aada8f524fb8d041b04d2251ad0dffa72a5a0ed9b59aeca2698c2ddb12dc9ea692f5cded8316cc0b1da831c85acf618b593f0fcb0051ffc7e6551077702a79c23a0d53f1b8af58641d8aea837b7457f82c755b1c72d6e6ae5a7a20cbe672aa1a6acb274837aafcb4779c536b582766566da5fab2515229c18da365bfbbd9ba18ecd753d848304063f4857766390e180de276f577e5ec51674677e83c3989302387d8df8b3269add95ced5b5d6551f4855491535178cde5074f9eb028a6aa94a20276d1473f7cca7e777e0939251982278a9d1c2a501c6d0b6ec1c56d4b636fff265a33f6b5921fbb0cde88e0c18e4b594e4358e9b60272da6c8830f170dd48a1bb2c0c7fddd235f6e5b5e03c81d7d684662b1076f2a77bdc109af89e5d40a7f0899365caff659398c8ac1a34ac1dab119bfc4cb94c32107924a0255a59b31454573845bf6372c20a7e6a3caf8c875366b55e129a0ccbb9196e41c00fad5e1835eec3b446502248b3cf985197673e55ed7cfb6c01799cff24b826d0a4a26a3afb17dbbb47109daffa82de5ed38669390db87861d6dcca6902c8f65d017eff030e982860aae90a7e4961e36d4b3131882d3080f9017d80801b665a700e8944fad73954ad5724913e07325085e7b0bec9b7adb93d6aa4e4cad85cfa0fb30d62a7bcc404aa36085c769bbeccaf8f4a378412f7cb34f9991ed19f717d45d850819226ffe25e30df90ae6fcd00f22b48c442a6d65fe797a3571dd96c8c17659bc7447eb496d12bef586fea279456a3f28f89db121d5c2a0cb734ef16ce8f42365f442aa9c80b1082da3f74932fe3df90bde41972ac9d9b1a65a04737ecb457696f1a94a71f15c8de3ea975da79a2c76a79d8c8bfb5b2d3168ae94b978d8e8c7c204f227543f63a4bad3255c41c9a44c8e9ef50c1dfa1b9484d9562fd5a26cab6996a3eddddb64d134f647d19bdd33cf135b01940d37434f7d72ef332fa83f76103f34fa5955eeb7d4bc653a10756992e86a38b0438332e6c4f3c68ff16adfdc38572bd9612f4fbd0c9e040249f2a41c704510fd4b7e48ef0de45282a56adc2244870ef78fd836455f33bad6930571e04d6410b7af8913cc9acd39b7b618a30ce73754f13fd101054ef5e003960e6162c25fbe9bca2411f3fe06d29bce04c2e082f07442ebba5e614e5d1a35cd7de138918080f635dfd219ca39c3ab37afca319a4b03693de49cedffe1dfc9a3e47fc61d8efe737d3cc29261ce63629d8a1794af9f78d080f05b0fb61c975bb3d2ab9fd8c38d7ffa9b6202774d685e7a24397e35764b256f6e074b1385d74867b8e31a55d6c49858ac3ece5d2f18fb27feae52ce5800b453ae20349a86263c4a17b4ea17312a48f1cfc76a95fc1bd55179f4b6cccd2019c8413430bdb5fa93d56f9f738f5b250e60768a6ba42cd75961369b1ed33e3fd257b7c1d3ff9dcaeb9431114b30bd5b552f40f6562a49d203f1b51fff5433965a6c824792c2961da0010ca8e5adf023b9a8bfa99e7adba2716d65e1dcd235ea2e81213401b947795d9642d4b7596c14a8873302b9284abf0e4ed98f3bdfdda1db30252585462a5470ee740344c5b9a4ae255b904ab52f8e57007076a0cf6333dce40e8ab1fba745865420d31275416a371d89e0a7a3e2a6d84cdb4680438f3690373dd20c4c46b30a71d9c2b4da9bcbdfda5e6274671c8efe6e7a6d6ebeba10b18433a9e8aaa12379c1ff308078314004e63994259135ad55ffce59d0a36c68ad65a060fbb91f1d60bf11cb29d0aa7d52bbbc043f94b6886b7b47aa3a942e94e055d495a9da39173bd3b1f0f5765fca25d5562116f417b6ab6b96cd2103792bf6df70b67790879787ba402097cbd9cd0add88796031e1ae924b0c311863c4a45d5ce551e96e8314b0bd4cf8756390dc8e0ed37b9fc0ace6bc844884754799748078a2e673e6a425635748e702b02d9f1c13b7b62a42c1e586b1bc25ec3170430c9d49f2ab7b633ffc32c45ae443f87b2176b5a7941ad9218d5dd793d193e1665e454af4f4af58cb07ba3fe28e919a075a924dde71cb4b213ce33b5cc9e15574f20b166be3f4fd6d02782c0c662b8aba1400f0b927d6a07b21ec57ff39cc54e564493cc5fdeeb97c78d709470f643309ea4d3ec63abf7185b8c3ade9a597583e31aa4ea1a6ef25afc7616800eeee2b8d39d198842f0826d77e23adba91e4e7f5c6889c7d8398ba4d9a91b8f8892bfcaaaf389e81892338f6fe66f7d083378c92bf7ed6b7f85dfffc5f029c6c62affee8a6dca13cbda3305a9617ecca0e01ae9b68f76dff99b16f22811e52fb1fecdacdbd585114510aa578f1a12d0576d5d6867f7cc2a2cc357066bd5f9d12f564f8d06f161eb6c7cc00e88dbd192162168cda5f998540245cac1f4040db42979ad18718a07a82a669bb1fb6a6319c64664a0d75b8266626898ae2c66c8e188b010d685671e50661566c85290716d4d22786a67e631673375e9527bc2d35f3243a04daa524fec08d247dcf415a39795fdcdb1bc624e5f5fb4e4374ae2d536117a840749114282f7e5667449c1a09e84218a003e978057cd6db2e4ff8c776f0c9ce58cc86d9e1d1d96ec18b95c118a04d5d8dc554d705565e87ae1048961110af3ea62912e0cc2612d0150acad9d64fc60dfcf694bc6640f6c65b7bfa13a24f5c5bc130a1c337babf1cca58a7ded33530bc660e25a2989b3439bed9a9babb1b45b82279dfebc4fe32b769ebb94a8fff31eb618284241ce39b3430bfb415bbe2ffd6524b19e4e47f22326c4a7ba77d0c3e1d67da3cbb73a890586994c59f3564ef38d94adc29269be21059db7b702afab9b4f19bcbc33d58c818b20f4ac1a7ef98421fefb332fbf306d3bb35152f0a393964874d9df5ca8286e7b285b02794018f949eb02b9ce51304eef8edf54eab56318ea1464fadbba46167d37e923b7a3939a2fe22a1b1725a70e4ab4c78697ec036a5c83c3d65714cfbfbad706d67daf52aff86bdb23b1457bf373af73ada0505cd4c749603b79bca9b2598f1ae4736d3d80cf0e7d9745b9964692074994ace9549d53eca1f1e9bcbe3783e78d1640e43d55da5478407a87de4ed142b30264c0d40f27f6f0bf4e1cf4956068c7328d1d387541c435e6f9b93d5556ea17be6fdcc5706cefb46e51e2351617993100011e17292de71a516a579aa14986df9177450d09495d54c699186800d103314a45f1c3b9c64390487367dc7bd39f724321049622e7ca3a8fcfc5759cb52c30d6009e236d33620095bff3ed2b1cbc389c172046036ebdcd919af24332ec9e976ddb2b1e8c9dccd0fef402b4f94b65996401a107f305bf7594a3a6bc0a9de1ccd77ea29e602b076a4cbb9d192d8823fd628690c03cd4579a5f91e9c76bf17b39dc900a8a2f069d3447bbcb040efd7ccc5f4ff45924040da4bb0dc34c9f10f64444ba6cc942551698b69d945de5cffa6e2304d5b9f4bd69fc70bf3d34ec21da57d6a3cf45e141f8fc6208000cfa29254c764c3bcaf326f408464e5e659b4cadd95bf33be554f2cdca14a518fa953184cc20cf2f736b68353105632fc8f3bbf9329c54b991e28f1c69921ce30dfe0f9f57e836b89ca2aab4df74a5b6453e9345c95e6c4f31d4406e41a414692e7cecfe569729df2de115fa7b5cbdfdc5c2ff1a086ce308ae722f4aba1435b34659f02a2ff54fab0f70d18e6b85520c2ec925ff568d62e9ee0481383ca928c83bdb42aa4cca5124289705f819b70de96a992d7c1b8891fcdad261c02f2a95b1f74b0b0613ded652619edac1ebba969e5f7a4019c02617485a24f56bfb60237460f172c7eef9873ea3cc77704b559433f7b6865fab2f9dd5574165c008137b1b6014a07444e20cefd46b048da052afae189426d5456bcaacb772da48bf0a45addefdbc957c620c6dddc1aba152779019ac5b4804f6a147d464ff7c89860f2833c1f5efb2004130c1a7179233c98ddf7b9a541672279bbb554430720dc6e8ccb4f342615437471ff219b4e1cb6c5b43ddcac7b5a93e1fcf38414ce55ce85eda385b2c3902893b81081ae2c1f1a5ab654624fb5031a5f62b84429dfcfc5239fac8e1fda0455ee7000c94e75a2edc43edbe903a0d90c2e876412e69e0776e41d36a6dfbbda41e1142056e0cd30977ec824ef6ca1450ffbc5877eff9b855a33e0e28e770b9a73182effb9099540bdf6eccfc3ef48ef8c33c7b2f6c95ad1c58f7520a37a2bbd60002b0f6e2d607ba7c9175d25000a311752e84718d85e756f735481746daecbaf1592dff4b0a12a1b61d22d814367a227f5b1e433a108d8ae7c09857fa5f73da6d4e0d1db67f9d45f6d97d1573de3cb3488befaf5b7fc7419060e9d23c7b79beddaaf859087bd130a28e2e91533f104d38859fbcd81abf025adde391f57426efa73598ba2a47d5e92404dd549ea21f77b713d77299299a55adfe2f9b0b93a1f435b79248042bd2f8e20331673a4f91b92dfb3fda87f483c2f18c75f868201355edf8910b7e6ef0e64653d2d1118e8d9b02067efb88c3a0d28e505cb1f263a39b39bf3b0c815a5639b6bb699a09a73ba69efc3dde85dd190cec0f8dcd93a37a4d80d63852f3352d7c9c059ecb0ce1c4616aa52389678b17f97394b054322abff3290331e5be489c345ff7186a01865054ccc9d9061415c21f8ca66c4fb63e9b169e0fcecec8dbcceb675a8082cfdc06082d2f065d76c341089d0c69c50928363d46c2b614fb36e5281cf57d18602c0f04f6a0539474dcbd3c108f50be1230b7f089e392bf3da00e74e692b8369bbd93d08de467b5f5aa5d414bf7c942b99d47b7cf3c09d878636f562df7d8e368d9b9f55cc3ecc7e3734aa1b80c7b5ae6b90d1b8093c46593c5315659ed8628afc6a9fac90587d32580abe4bd950f0d81ca32a304b16a71760f7cfcd23c6a0c58cd8c673e71e2e0a319a990c45c2c647219ddd8c45ea401098877d100ac2b974c368ac522d0a5f645866c2f34277b65a1ee374026611a1f347a4b5c4c0572d17149ca9bddea781df30e1b4875bfa41af7916865938473d2df2b1f251c0ee6c3b04e7571d787015e95fade64efec4e8b5a4997cf748d5823f2e41cb5d9903074f28cb2d0776febc01392df0a0a7521bfb35fec042f45701855ed6a93ec54f7ec1d4caa3e2769dc4c551e43c22e24c7beeb1b908e2e7464bcf08e3047bb1fe4341ad684454f3f7c0943e63515c3bfe590e8c5abf5d7e2db14ab0f975ab0bc9f53d272696d55b775ffc632db89310f263e94a564bf94567e2a6fb7c65332f1cf512c68813da29a6c36c4495da8e0dc2fced603e476cc9af50522d0e5baa8881c370ffff33d9eaf0cb72674e4fa38eeab4b952653a1e674e7adaea01e187c47300c6580e8f5b1c0fa89d5fb9806a20c40babb57d8c94cadfc2bf97097f415f7b0d8153387ee4493e1b4b826a054840096252fde9b75650ddd86ed8778d6db6047a30760f9afbdf26741b63c246c47905693d903c52d995b32c6712fea4636499b76234f65c086a33437b9874ed75485280da10e7e7a5061a2f46cae15cd8e7b54585148f4aa056ef19ea84d441c12a6b39a6f46ede2f2e5d616c84d20f24bbf1b527992cef4a41d467e6ad72ec3e8bda0422bf43befe7b076376c54333ed5db986b83761a26ca76dae0e96d35544090960dbd608f29988a295c400b7838959772ab573c01c9de4356cb0c57815881e93e040dd212176b3a978f2cb91468f1bd511add2caa644a4a6148bbdc3957128e402e0492ec41c98a69d718a832565213dfc1fe8d3d7f7554a45ede4585d75d47439488e7442f1b40473dec1ef88b2163c1a7a0a9e4a2c728c7155eda8e62c9deef3c821b426ac725d8c790648e8ec473a2d4acc6c556a890717521e37c7fbe19ee30db7410793701c57fecc21de7a50b28510b2d082280524a8710a877b7a4c2e578793bd3e4d19cb56de97fcd1f2af5fb25a326d68fb737fb521371a690e49f7f1a46b7b634ffbd51986de5c5bdbdf8c4585ef85724b5072cde13853194e47962202932def0282e4108613a2e49c5db2bf323edb269e38a8434f62d414b0d17369109f276a0b3b52cc5aec72f4baa67d7fdd94b10e6a787ac5ba6b1fe3cc743a476d040a4cc0a1bbbd83ad4f14cd364717e6a5b98246ac84c5b09598fef7bc353d6656490fd94279548efa99cd4aa9aa07fbd6573aa95130b3d096c1cec8f60edb9b0a664bab9a3621db48d576996d00d06bab1c8008e3191088d34cfbc6de21728994e458ce155cc5f70ca4a95ffd0601e4986c0afbfea87c47cf7cee67b117b2908a35dfa740779170da69edf4d6040cc522e833e8e05957ac0fe41f223b5c1c7e5eed48cda7f114d726a7bcfe949551abdef3835654c623140915168cc9591071877d2ca7c863d07875d08ee3952480f7212071dab8597f1e4f825d1dd7a91f389867e3dc0e3a54f34c96ec3a645c1b35ade197cc879dbc2947ae7b5c02c6c922163006c0f60f02c61f4d4d799e9670f5b9d96dd24f0d7ad3860bc9adc73c8ecc65681dfd2c3c6a7f62763b07805e32a5e95a6c527b233b9b8f3ce0a99174e0a61a6291f6fd5d1c6dbaa43d8ac62dc0d4c106fbe398696effc78458c5fdfa5f3db9c1fb3505eb693f9c59bd79ec8fbbe0b541c4fc235a855ed3a49a9969475af1a808c23db26201636c09333b5fee84785a9d3012a8812f6718000e7a6fe6847089a97f87af4b5567be2557658ce4aafa059bc5ad9447cd7719195d1f8e524c28c3169b994911d5bb1750627f1fecaff46ab01e437348d02d6b62eecf21151288d8e29ee90c6012dbebfd1cfe7570f3e5ee6c727ad1fee7e8637f4c2fd4a9882f5fa0020d85909d58c09dcf5a2a1c274d05339aaa1cc47536b5c0eda8257a1d7abbb16d6d312dc5a019a4f218aa48aaa843a7cf57c043f8a6c6da4bce701132f97199298e9bb23c407bc53dc072710e761e3bb90a78f7e2970b1e0f196109692a15e9cee821a851b85b510ac81f4fb3351951c048835ad3b6171e800f54cd409b1d05e6106f9ab6862cead1c60d1f4963c99c7d789be74c526f5e4716e7c729bafb9fd78dd1e3cb3884f52b10c87a3190838e59411f17ad1a785fdcd676a1b51835fa4bc7051e102de8029f5eddeafc39eb79ec087976866cc695a9a4adc7531150b79b3255c425f4ca8576f6b9dc19de66119e55578e58d7de825637e9b28464d04a4e7650606d1ba1107a7ef8e80adc87d7f8ae25c9a4da24b83ad6b6fdd9514944ee09916d66110015f26df7795fd2d52f738960b2eae23db9e02791f3c2850019f242755591536c18773a521a795fb29aa76d94c4ab8e8dd9ee91075ec06eb94be3d798b38f71599a816a7545f7b1c4ac0cc13e99674d99cabeb98379637cb95d4b3f57f1a0f93d0ea984fd765b976fd60c2aca8b9e9df5feb8f792ee1c4da4c080c05fba86399b0748004746057f38ab2e10c525c1fe06d895d1b2276b4fe0083d210c58afe107f6f562df1f85b7a38dfb09caf261fc50fabdde7dbfc0f21fb6c8c7ea667e5de8602a33417d6cff2510fb8c286c0f0778d7a9843201cdd2a83ecc3b666e722ed0d56ed80aea2ba451b697fe7a0d19add2f1d1598ba7e2701e12bfe22cdb3bb235c92bf797e03255adf168f74c60226de3dbcdc4f72c9f58e5d50c529a373bb6abadf9e874ea21719e43e70cfbefb9b64fe8176ce0ea54db93e84a033afce27a971651412e827986a7407a86250630156bb926a7f56bc396aceee18a8ba6d09c8c74ba8821239b035d59cc19446e3619bbc1740c914b3c08953b7b4f18cf868ae05bae33f95806862502343cc6722c21d493981130e35eafe1606fd74ed164d4572d94bb139a6c7d92dc5b4747ac92cc3aa1fb4c70de8c0b15f047a9aa56fbf]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result f9f9f801b923efb5d11392a59abd9cae4281bd1f2554a5411054875478bbff4d

tcltest::test Hash_SHAKE256-3.80 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 66d9f6ee0ec6c30f4f575ca2bcdca198d2f67fb494aaba4372b5e9076f1fc2748313971f3eee2173af967da5840d74eb7246ffe9d8370a6c9f2f795b646a69ebd9e3b8116869c73d1af57e45b83b919f307f02d439aae8313a9d6ec068c51e772fef60aed45e3dd7581b69699f8d811dd249915d012bd9f90da6d11dc5586a804fe297ddcaf60ca731b245f9822ccbcc204eb36c76e4672ddef3a959c14cd46eff6265869159bb176d5f1bdca93ff713e43370e9e2fa1933762bfe5ea5c9e5a90817d39172aed28dd3ccf2fc5cef8e5ce4a3d0bc8b9877749df7d813b9f6239932abe8e7b51dda732ca1d240e364170ee944dccebae40a581aff406044fc18a644c3ad6ea2d05a304085c49085c51a90bbbe9b05b6065948b7ea3d2d90034c39080a280f80ecda2cd721ced48c3a1f4c22ba164ac927edaa3a61d862e33246b8442563b3999ce2cfb91dfbf43eedafa9e6e05386396f4ce76c0b18e886b18e8dc1bf66403306fb81ad2050d9e403510fced75c9f4f050068159105a5c1a9ac1e477e37a09752acaa7dd2d769c5a78ee6a448397f53129194fd9aa782db4228d59e0ae0b90da97eb2efdd978d2bffed972edaf00c8dbd85d2ebcf07671ea38b198d0c6975dc33f801cce6982e5c33f68835368b30442f668ca9d72c3dd0f55d51dd2cd8ba4e17a2ffdb98e332a16c3122800311d1c28fbb29fd5c1eea3a5f24e756113772a97e0415e6987f8342d227cdd9ea8bd94d060d11b003e658a40a6a42c0648d84368fa7a9b3917407878c5ff20693002f2ebce3ab8a768b6d551db6cae3cce3d83d7312250c29cba8b8c361f7d0a578bbadd8c561525d151397c191e787f240560651cdefb7088b4c1c9eb646ffc9fc6511833b9ad25f8d31b01e8201737dace6d85261717cd7bcddfc46e5455ba69215a4e4cebfd025faafe95b118070163070fd9e5511253e6642a0e2765eabe545b3ac240536155764748aa1c6cc4665d2dcbb5c313978e49263509bf2f8b92d1a27726a6968699cd36adb172a4dbd119c125bb47e503f7248285499e07a4b271b593edf81bd939c507824e6c46c9cc396fa24cfc2be408f8e79f303c84e2a7a4f3258aad59e5d00e286ac351c8fad22c77d60d588ea44e46e3e770132db1ecfbe9807f5ed718d70927dbc2dbb20b6d7378155ee553e1219ef5f26bda789efce717494e5529fec9367439cf628858089eeef4d40b32174d519c4495caec0641e6faf47a48b91421269c194b7eb28d3e1f5b08ef629fb30c0f5562709d0e84668c02f685a20ae5794a0dfec988d6f778753aa603640350f838afb0aea94695d536dde3f2e995df2c21586ebc295c4332210c70d287e35d9c6e19c382782ac71887da314497f08dd44cf9cda5d8b8ed05a35eedcf66e6456300022fae922174aaef8652ed35a16dec1d60a0190f83417d9c80714c5952a4d6af1739858fd13af6ee70ed6f3b0efbee233b9a8846320cd44d4f9fec07df0881cbc795a9b9a096a70518554d10bfb444eed90176154b9bd465eaee20cad1ccded671a88db815f415b3eb2f096f2a13aad0c76954e5367ae85700d08d4ad18e585fc40693f3b7ffdd8b67df26aee4c66a999556c73e99267a911feb73e064a988d82d246f04fcf668ec2cea174866192e89a14e2f99da2b15b4a6938723f1cadad02b8671545b94326698d46dd424984121a9b4008f8ff54432236d499e0f5ee8c83da14d7a6a35e47b4a229ccaa6c05d01ed2cec781121808a14ed0db713c21d30d20955ef9f77d9aa9f5926a4732dccab0a1d35fc041c552cf97775f7b5b0f29a87231d1c61c69c6536fc9dfa004d3a7d7f099f83df522cbb5fa104e86b980375db83258967aea74b7f615523d48b00f9ca766b88197f8195a5fe2cf18be3ca533dade1def79c74cdf73c0eba7683cac05ae83ca138d0fe4c6af360bbbd20a1a33c07e455c81caf5d2cf10d465ca3f231ded38547b412fd502d0542af65db33e645259fb62fab91898f04e32ffd8811fe94ccc7f4219209315ac845351c700bace79b9658b4c5d5c3ac0c130fef8c94673b48972ef7fa9c7072a0eae5578b636791be4ab5edf7e6abf26b3f3e994e040c20bb5560ada9419e131396489d9a0596e2123f6631ce4e92f096aa648138fb6de3b99521b92a730aaab4f9d765085ccb474be6e2369568292532f6fa4dd9c50d02a7d8fab0fabb56a7f9680a2462c3753fafd3a252f9dddf1eb4a76835acfb59fc2a83441b8674f2995573697245e40549d2883f1d781a153b903e470f2f28e53e9646a66f7a5a7f0d5d9e6dd50e392be44867010c7ca77c1a5a2e1f00dcb82f589f759a1332b65c62766b9fa3483d399d7602a0969400642976e948d13243a8b89aa287ad5c230b47344d7783606aced3dfed86424abf7de77b026ce6cc35d20d1c500794332b0c1a1bc67dfc033c4c360a8a3aa5fd2f19d2db1bf3b807094b949900827e6438ef5991692b539d3c42227a6b362847e9d88a1b6855db7f58760d953690b26bd7258439a7f8409ae53137a3f2f14fa77a2a6bc0aa3bb7a19dd1c69554aae6c6703f3879057d3978c1a9d41bd3f492985aa0064f43fde2fa33ff6e1dfd4961e0aeacd4e3f412b4d35c0c864660d8779705a9c82bb824c405c54f429392e4da66ecfee7ef066139270ee9ccc83be5952ff5c84ffa8938f130cc52129ab825b6a5b585f01ebed13ce074c225f5b7d441cfc58c0c1039a2f127b3982ca7df546d4993027bd78ffb36ac08161063870d23f2df556b214c1b2a3705921f2f6b1984aeffd4e9cdfc47ccc643661aa60bf8a235adc50b9222ea230b4cd058a5fded8362768dd856763f55dbb122b311c93f4304db5b5bd77098620103c367b00a38fff0718db5f5905a7858cbec685b41499cfcd278ea8597be7db494ebdab2129440d58b65014fdd118ada1e13a8c70690066a1dae26111ac4cc92aaca1040a987fc8e1e9458b9bf0d23bc024903098bbb25f9277b9d0e6c33d527afeea6d0317c9986c5ac0ac7b895d99b22fcf577331352068a61cdd22e842de00eba0cd53cea8e5bfb0cc5fe5c53f2d3ea9ffeb4af41313eb0e11700b45e4d5851ccc0e43e6a617a4946e8c20cc02612e3b29d3652bd39ee258a371ebffaa9fd13976171b874b96e0aeb01b75c52d9c498c54f70cfffe2b172bd7c808411da4ace9a4d023d81eca3ea599f42cd849455645883f87981b215030b75dab31c34cded46021a202a71c852231008d2fddc61e0dcd931d1db2e8560f4a181bf727002ea3b1f2e22c6ef27ccc8125dfef7186698d2cdb18b64ce8f16f98e2a2bcce2666fea02b297ffcb5ed4c904c6c438eedfe6cacffbe8d7088e8f8aaa186a842284c8c33b4c023d8ce9e49675e7a51bb63a75356e758c7a6330553873f10e20a6ca9f67475ef3f8aa3576c0c41524180502aea307c2d8f764e0e2837a28893ae5c44e36b57fdfc9b9ee25d89df3c3c651c50d845a4870b6942cc1ec3b436e2b65ee7fc1f403481922606c3e61e7f6af32fe1c69a48ac63067707de325b61f8abdc58e99819daf7f7a28a4629e865f2b1f2a55b3951e5c0d55587108c8153fc153d6051decb3885537c378f5c2434fc27cb644029a57a4a5f45135bda0d52177ae9c7ddfa3d96542c1bd54686ba35b2de23e51c722eb3282bad756723e7a77164485534f3563c8b0de72c13b091b03a5d63f1981dd2d883c2f673dd6ff79a315ac2d2fed10071537b48039ce193edbc2cf1505c307b3082aa89d665c6257280e5bf05e59c227ed400a6238c21a73361d437ca0fb610044e6dcc65a6315979858ca7b78f5da3ab352369558978b5cc50dc9b2659b4799c0e9229ea49b77bf569d7e2b0a41c6d409f6df95f3befa6feb2cc872ee4349e40eba2072bf561732f534ed8b8cddf67853964bf094c8d6012af2d62a8553d67380d24cef25336296f6c7af197b2b079c22c92211d615bcc506e86945d57d8bccb9ba0e5050b3e85fddbe29614fa968b3e9f7f8861255fd2ff185f8515900c8543bd9fb62cc4817020c90e2df94d9a8542bbb15d9f3da35b68d4409d98a8e1aae69da8a8312608d0215e87200c55c24f16a7b2069d542f4dd4cbb244ad485f13fd604323dbdbda8f48c1d4d516b718d2028c0aed2410099289253ce21e188fa8cf31f88ff188ff93dd1b7db6de1ea4f44e923f78fb193b10d00967dfb1bf7852a63650553cd880c628930b292e306d9e41e0db11ec18cdb1f09fbaa32fe622f7c897d2db8470640e71520598cc957bb9249f661fbdb5c55b3310bd965f3496807e7d078a90fbb355ff80f36a81f6d62b3ff6660a37972df8df84f8200b52dbd6101075ca2a1f75821b445d0715fb87deda0e653922670c6f3d22f4aaf9e7f9dfc677a6041884b37d0dc6ccd7504b95b83d0fea1646cc6ba89513389af29cf985e8db229e23d3752e1d2fc842fa8f08a3b0207e086a6f518b2f7f4c5abe19e2afbd636f0213b4c17d93a7d7b0da6ee8867a69a87758f7c600528db9502505bc458e381796b0cea152b6558389b9913e48e413f0cbd60dd3ef476506e6ef08902ea381a2c4c2ca1c95cf6253355f9f11d33646de6dad597e405730bb83e3cb6554446796f3104f3a2e26f5cf1c94416a0eb829fbc3a582d1dbc716618ecbf6439eb9127d8a63060405033780a6201f50e1b1e5ce368531d4a8e23e7f716d3132f449a9def383978102ae50ed3ccae0cb346ba1df2f170d8e90efd19d9391223b3e3e54429538a9ba0e6e679f445b2de3ef2c86b71421bf077935f6435c01746564de3d30d84ae4b50f8da41c289cada1fb3dbcdd4e6cee474dfdd6fa3484cdb94f7289302480f27cef5130ee4e52090c3ee66ad946c04357f28f984983e1d63de54163cae1a378179403339c2048e82da16eb93463e4663e523366b9b1e136fb0f95f187777b218ce8ead4af0445f30a0c1fd0750ca2fe04533165d1264c95fbb6b45bee4fd092e5d1503cae6410d2ad683fd824abc0b3b2dfd0bf194bea9d44c0e7ca88cf6a762a397b9321a7722c1e9b17f8caa7072f4edd5a9c198682f4dd177666db6011736107b400913533a9638fef59ee683f17e33415235a40de42d1a1a956716b8c31942343ab85761bf2862a0f221856301676ce4a7d63e2c4302548c8c3d256a459ca7470bd85d2f1af8f56be7cd0d9a1d2119240d1bcd2fd65e3f21ad4848a21930ce4835e19b17f8784fa458f9f595cf3bb684148ee7a518a1389e8b21170cb86615ac3b5ca7b8b236ffeec820c3e27227d38930a80418747bbf47a84016f69dbd1bf7aeb1f98de2b5749fb7da0f0cb075eea7f3efa8e6943e51b1873daeec53a64f9ee27a170404645c5baaae1d7104966674d0de5cbbd2798e60aa72657a54923f16792d66b791c4059712f595bbd909d95459ec75f4c9add3d97476c11d2b3158f2f5448f2505650ed673490e59c860c5daf1a2bb2de45bb08097b3584141e42bc8d947f6b8e9c7d6ae5e20ddb73d1baa7d2a8962c3bd03a2fa66d08183233b35ec87a0240fb95d0b6336058a70b19af5cf77192352ae2629ab7426d35f6996f5e293059d75fea50ba99d7f9af2c07f462669ca63574233c328325ec4326f87ea5f8db0c9a8243065e5f6f785d9d4290a367525b94e13dcfdd543c0eaa8bfae91a7da6a3ef2c46f88bcc4f5e1828738b0642bb37ba39d5238470af5ad2ed45b7a4ffb7a740249e302729a033479342ee723efec40f4496411020a759241481f02dc836a0f433f1b61bbe897d54a756c0d1a4448afcca253067ac4c9106c7579d9c1e4c147321e89050d333c6a62c58090abcb410e7922df8735cc58ce1d06ec5d94a218d25b62ac8adb0c695a5eaefd105ce77de396554a21a783bd21ef57070cb93dc9272b96066199d6973b9a9c421aa22b47c5b0b42354647d5e923ff02a65c43a5acc2f431707ee144e74a307f00e1009473b34ca0b9de12bc5b5ab5ce7073a1a6617d2d46f0c3c58079c048c77792af3f49abf01637ca2117b029e17cd5f8f4043c0b2d46edd09145b183b9448da578dc89aabe4bb5f2bc0f6efa49b4ded485eac2d4bcda708d8dba18fb4b9f4a02a393b8177fe83e3e2bcc1f34b61d92ed9c7e7d41a1aa80e200083591c580b691788e605cfb94d796b5754a3ff15ff92c80e8f4b8a65d25b7345690abf18eda3b3ef208e0faf88ae2a4327883bf231b797b51afa2919b67f46fcdb2b39572bde63fea390b44bc5e0a3e2d3068eb1101bdd3e137682b0e4f81fa95220f7ad4677bc19b7a45a0875cf6cc8bfa563bd0b2ded1bf13703c5ce4461dd56829685ae1e30d3053f6d8018a8e95775eb5790936c6bd14cb248c2d2f2b1fb60d6727af32046bcf4c86b2d3f2bbe317e5ed6b63965bdf07e8ebe22a36194a5f98337e7962c822a1ee5ef7a59c63fc931666da87d9877ec1f12c08fa03f6e4f891f436617a167ccdc0e46f1e8e6f29147a888d1c0731e4696e51c4469eac36ab8111170e81d5bf7b4b81e1e7d2c8b2c297bc4ecb29415728e7c1dfb60d21889eeff4e9297fef34d5159d16a87054dfc4f868e33c459e2026e5e421f15a3f22f9630474597d4b2300a8a1d7086efdf84322f615166632878aef2251a08dec4be565a9804781d1d4278cf3eaafd6aa44669fccac0191e4d37d8ee3396aac124c8a7e4bd49a96698e7047fd1746b0430c56f55470a7d09c4e26498f9ff8c1986d0f355239fbc1fb9b036326287502af983aaff429ad2a423eaea88e4cf1d366f69c132777120c6f410968d5e3e3d6d8303b52169ebea8bfec3c334808feeb642f5b9f3056867eadc9aadc74123933a51c816821988050f9a0f973269ac7107a607261d69e001f9e7b0d496a7b1e22fea333797ddf9b2cd9a20cef8eccf34a90d009e1811627f8289e5b361fe73ba9cb0f790b913bb84447399e2fe9642ba18ec849a89a87a410347cbb2cfb1d38d3f4a67ca8c7747f9e2caed7bca02b161e5c90593d87b91e70ab5b56b266e7bca562b164d7865197446e49de1d19e95dc8e2706228b2743e1e73845450c80b6f29fb775921379ba93ef752dcdabe66a7a809b08cf28180ac24763fdc8e8952fa66a842820c401a5c92ad11f87cf6699dc4b797fe225ea40f8a9ad316f511840564525807220a96594a7ace5b8a28bce726d56ee140b0a90f56c98a2b0cc869372cdf0211ebfdd7476e45d02c8cbe252cd64c7d5cd4df585592eaaa435b17c839c53988c8ee81a4cf04f660940b1f6d14da020c986753778945e57c856b646bb237463253b3ffc7991674c6bb8eb35c493ce163bd8073ce5378a2481ac318184b8bf048dac2dd064caba94ac89de2b97004d0caf2a8a927593208562aec9c98acc81d1187a4852a90cc7c34e4c0144e3438b6885f665d48467b01eddc6c57b37cf6b7d680e05dfb0f80d5cb3680b1e13ae27de62d42f5fac05b755658cdb030641ea5dfedfecf406ecf9c58e764213b2d090c2c84c4da056fdb4adac79611d90b46cf74f78642c358c1b9231ef5cc24b3b64ba28b757431fd0269bf5150e1741a791dddc6011e4a735f157404b91b6374f0228f6bdc2b460fd9ba4d1d8287ca38bc776181f7ca9e67b09693c13a74c21abf793d4b82680b506625ce54b46da30e19c54a50eeb087ddbc25c77c0040074a2b38f254ed914965b393881d6ffac74397efde5c7037cc7d8cab5a5d91e8fbae3d47f7aea710c8f9c8eac4a13996fd803edd66cd04c737ee270e928d77d266eefc8e9480384b50b2ab14ca079da90e6d177829cb33c88ed99538b8343a6810b271f610f226aca93866f7e278209bc3b129a6717d83a29ae5df0f13796011c0a1a265b52efb999a34017d541c4cd5e2f57d50840b7ebe23bb0c7ded857334406399c4c9593e7ced4e828d671aa8bd33e0195fab9eac82f10224698c80fb3b56a15efc959e78bc682df30e659bbcbc801b07b92e5e9457cb6330ba39917e8dcb03f7f3612330c1d47a5bea94c6113b8f4d4f485572bea67a86375a3ce0869266306e937510eef3f8dcc3083dc42ea0291ff7f26802b2d5c7124130dd969ab2f1d1cbc3188e3bba9efc3250a7bc9b54163909a1ae38f94e77b0572464db4355328d146a93c59d7e8c81b0aa1cd7e1c01e428c3c703a1a7755077f1e18d607e3f30d53722edc9ea78b1446fee23d874b09e389abf6309dba28c0c30643b071c4faf88fc231fbc69d635dfa344215155c9ec307d688430b7eb7822bc42b9006600ff7d142e44c9cc8dc03d6348487145da68b0ea56e9aea2acbf6be41189f5020fcb220da8ff4a891beafe2e6f0bd0bb5eae2a700ef5fc5282cc384635405d66a88d08472791e725ed0082533cedc82cc2f71d8cf55b721dfa292851326e920a77afa05f2ebf08398dbb7a701650f010a40dfabfae6cc88b7f50bca3ad573b7409bd7ac422d9262a8a763703afe7c11d7e4d52869ebc68118ecd55abeaacd229bb310804b872d97f4fcb589c4e14b399be2fb5604abcd956a51993d89ed1ce9228a4c89f341e9abe6a255f98956a502be03f83db470074a15eafe7c81e68b953ce734d023a2ed25e560eac86fa5b2f3a80f75e55f809f2b8180ad1e90dc3fad50936f5cc4f3628d58001cfe60159994c1ce1957ee24bbbd17da4d2b9d1963b9c857a636bc7d6f6ca94895a443ef836d72078d9a4aa4848a3dc287ac8fe31d410bf98164f5853d483f01fac2ff7c9707218478b6594821195cfe03a8508395ce8141a7f05556f4ac82f3f65e7e01fee9380b83b40558baf2dd576827c741f5e792f9c1e1c637bb1ddae52f82a7c9df9b1d65569b351b799e26955f31dc646215a6e776402f6fba25afa04d35621b63a63a5a9873d1da84a4a1808fcf773606df25d56f1477471a4b69edf980973eb191f5b1f144c0dd038cb5dfa10880fd09cd77895465880703177092db692e7bf3e4b8340b17ec6c1fdfc97c3ce5df02936704cbcc3c49f79c122d579afb101a4e28eaa98bf33ccfff23471d096c7d8dca3635657fa0a25e0ec30606de3b2363ece4f2d91ce1984dcde3968bafa740e5d9c1701d16997b8680b364655133509df5a03a8c64e8e830aea41e8ed79e1154e6901ebd392fbcb51b68b03e99ea801291e429890b1014beccf047ed2958d9201a2ca80b8f6b4e34076c50575e689908e639279aba6105404f4e79724cdd7e929c1c74d0c154174b6b47ae7849b684c81f269c8519e4a1fd5f471ce3e935eaf295e8ecd376f200416f7f306b01db2a9a6234f013cfa0d13f22629809a76903882c1977de574ef1603d9e40f72fdf72c5d7e98c0c859d7e4cc32755ac2f7fb39b8a367cb70c6fd3eefa2c45e37bcb4393a8d0d638e2e48e6e681ebc942882e075d6c765273c5e8c34d1afa7f88ca6874afa6e375f8f7cebea3ad033883b77745c395599f68f21067ae8b1cdfe0b782533f84d1848336d7b0b60c4235210685699db6780ecafc2270867b921bd9f490596c7f4dfbc77c028180282f5b84e5c6e74e38582d14148d92577500afcf1220fbb92ebf683037cd8584a930f839e5ca4347937076cf0bc031a40fcf085a90a2be97fbbc3657ea975145e7edb7ba76fe023c706778661258d30e9483b1e6e0a416ab6ebb02a9050e69566cbbf67129d0a87f2793ae73f8b5eac9ab95490e829398460032399e27813208b03251086ee0aa92519b85730f760d97dd9a1a2c06ffb80a58b867b1c29e400f4ad743fac6bc8d1866c5a9edc6f7afeb72f8b1e9ee46fa6ac0c4098e66b417bcb5114ba2c1b2d473dfc8683edfe946273437bca29917e3d9e0eb9b8e64712db35776d49ad071f527351a5d008a9974ed79ed7700a7d0e8fa21759a3c7c43f665ca8e7b6d735873b50f1204bd77a690a0bc708d6e9b008e2e1b188202febb065686beac853af4e4bfb665dbd0278f3de384677c56c33557f8363aef9c7c34e1f8149de46c97d5ac79d38c6ed31ab1d1286a48b043e0ddbaeafb533f43654ffdecdc92bf9e0a595fa5dedc2a50b1cd0ed1c68ab5d054684b68d307fda24a6ace8777339a94131e62b640fb8ab38d2f2b8231a41966ae737e1465bfa723bc23e87a5cf701d942834a1d92612c861d56cbcc243b47814f7dc7502bf0d8620af9b008066391f809369a5e5b837c42e2e273e226a6ccbac7e5abbe8e21edc7e75ad9e2fbffa75ad796c7fb04f8f6746e40a896a17d157d9859bfb214e973efb1d5aa8da621ce8c4e225776172827952fffce4c3d24be34412867dd48bde723fad8c65abd808406dd77cd521aa78c1f988e79655244239943003882a1f5d40f3302a1ec8a825454f5e59e0177dd908e486b2e847941e1f72e4fa654b947a72bfab1c1c595adabf1382a4e16c750d16ba014522c2ab475e8638535d5e729fce4a284aa48777917560484520471a7cb32402888cedef25be7733f6b68c3f331e3dae9c017986b130dfba24e5d1f38fa7ca8f636df1ea2006eeddccb8fc859e283f46fa79590fa2b838df2a783188acb953b3be0ff524a100923fbbadd7cb47b5f9f74c564c9acbd512bf3d2090613db3687381b822240e720c60acdb449a988c13c97ade7cb0964f156346271607a85bb0d994b1a072d1250349888b6c79f87734c46c5a11d86aedead22ed3ea01577ad4ecdf42969650e12000350676f0cf3c04f10a11339baf783914db6d35d7b0d77bb44ab22c18f56d0b8f9d918b8786a42d573d4d0880ceb9a932373c1e121d3c4e3abe4b8c8127936bfda677d3c7837754feeb54bb0f2d75e333298ace39046ff4852153db594d19e8533afe75372f7d24effd7072d035778f1f989d6dd4cf39169d5d134426d1c82b9840709a60f27d42315ce6554c4e8654ff6ebf226be5625c8b58d3ed721a68dcd4a01369c8354159ccee018e0ae169dada92351587aeb26d56fcdbfec490c1a31042300bf95e8f0fc99d08429254e9cab8ec4a6faf92f1f2062f72a0a59b9a26530e0ea77bd7300c2f50429c6d11cecca16445586cf9e692a4dbe1fa9ca3bd10a5ecf766d406ecf906eff8c1227ee0879ee26df7454b5af637e771363110f0070ec431708e558a7e576173dc3905e6a4b64e0c75c2f015c6c73b6779ec4afcb3977e05ec302bd4422990f8133b0daacaf29068f96b51dfa95dbf0eee56b9a9be4702bb0243ef90ee8463d28eaffdf2a25890c9acc9d48047ff5badbaf6c6becd27389bdc4e0b872970c247761d3f87d4f33779b663e2bf49b8f78b0854d7058b3d08ed9fd9e6819cf695a1f30d3a3107c86bbf3ec1e465578d7bf1fef956449d935bf8766de846ef1dc4262c0856b7e3e115e26c6c403a1888cf27c46ca944ae3117058791799dc9ee381f4a95fbe312451e2b69eb600635b0db7583353acd641d265cfacd014fd26fd7d3743d917b39fc6ce25dc6aa91550d882363dd6fa767616e45f8a9e825b3aa8a8cd3878048030fe94f708688a321a8bc788bebb2996005d908a9ae96e414a73a908ffb311215857bb9c8b26103418860bd24e76a6cf70f4eec346374579c6dcd29cf210aa11a660c6a90d29c7a5cb55d3b555afee8d389b43ac150e845f4042d9cbb8274bcb8ba83a8ee6fa3d01a38993747cbd8d59d7af53b7afe5b75c47440347da5d82d978ac8bc0a10ddcd2518fefc21c25ffbfcebf83485f436b0b3c5f0383a129cba60ddc3ee0d3db238225d73d10cc7fb2299e3a5700abadfbe690023ef1d522a2cbbbc5c851f7e8adbbc10dffd306314111b6ae43632d9c0678f2dc3a24bece84a4f2e7bcb675ccd7c99382cc9b41d12912b889dcd24d83f73cd52b79aef6840dec53b08060e5ee3e461dd417dc17e5e6a7146b87e093fc6a9ca79e71c2f4f99aec4ebeb7f3b0d35dbbd0706617e0d5e6494ab1d910997bcd22fa93b7333285a84f5470c7e17ef292955bf63bc14527b463dc0b54e4b6789b6a3eb9be6247bed260056534aca8e2895d00c40d8aad51dda138c66fcf837941dcf46efbc2ad1b95c8c21a92d7b729be8d6f785fb691fade6bf1719e5379047cf5ac21f3e6cb026f041aef46d5321e8ea11871a6e79b79133e869b74f31f80993ed6713b413a39ca8c9071e537925796326c4e77901253389378b26830ef94333303eb466462f834ec9340d271506b41bc0b6d56329f2fab0548450c9f51b5b75ca4ee89b2ede43a8ec3bab31514a03da8566ca761ba54d6fe65c1b680ee5ba22649f989cf337447fd726deb8537bcd671ddbaff8fcc6968f951b71aa82dfc802a53aadb2bcc2ef9a35fd90064320798b311d6d32f7dd3cd90bca39d57991eddc36260d23b108aac3acc6a8614ac2710e6935ea6c3173a712ed715b321a849279be6ba237fc90dec0e48b0e1290e81cb86c2a10eed50f3e05e616be098e3f1da2e6125238c2e2f45a8753aa613c1ae250e304c6ff093a6b799cc34ca2fd4af81d5622076c2e8752593a27649576e12ba075ccf3e8f57b9635b77fec448e2e89b2b5a3a81d65066285a70e24f868c35f6ecb8981f2c35a2502e053863969723a2bac9e1d9192e78ba67610d2d0374ae6838c435762985f81a8bf4503c7b79e724fe2194e10dbb334834f3556660efe29a761025d839f1312effb604937a03b98e5001f23e468f1c7e5d886980213668ea1f2cf7b9cfdfd409f3ca941d14bd016b6adb584546229ab94bc0a80ec6e0a7e3be6b199f4dda6747f2c2ad3dce1e5538a92e559a7f1e44858a1c9f76b4872623be6b19fd46594145871eae8a28902b72856b68a263ca806f930cce3c8c927a06a99d67584bd518af2b3f166696cb0aa5aa231ff196c004d3e101a2e4c18b0a290a828044c0e653c159b48377ab17694e61e5ca0c8a87185f0e9bbbe3c5e95ce75baaf327480569489d0f6411d81dddd957141567a198516d765b87de3c25f8ee07874e8433aaef815fb036e99046ced2f44e80778e7c368bb2a1851886d95499b897e0f0265f4d283c478a43861ab2d7c3e579c0b39b3e364e0e3247286bf666c97d58dfa28b18999d25ccd40c12203440898fe7937def09a3022ddea36654f1c47824c70ac6c8520ceb7d0fa4b5ad84e49b3130a0bcbf524c2dc6438a5106b73438c32af18ad2edf5f9195ae28da1563aaaec508da025ccb3d19a1a4fa47223833fb29fe95fdeca02ef304a47f2a204bd393fbb9cf0c8b5749e17c765e93dc35bed818a44be22729e3e4052379d363ce6b6a9d670f70ec908f3dddf5f87b01308d2ae6ea61e64743256d80743e5c44b31b399258c5b6e53db734ac6af187f9f248f97d180091b4b69c955de0f54d2dc48a0ac4d41767e02869cfd11d703f2d43964dc4764f6ad64af16484adc72f85c760e41a252d0a44174c1534569e2c03ea1f2fa34b77f916c7cce2dd23db88b48547d07c92302779d3080ebd5da2d5e4b18ca602e19fc6daf4d418518c5ae322c6e5d4d2624847e72446c25579a5c2395e85bbc97ef05a8b9ab20dc62e6bc53752e2fb04de9cf1f6d1ae3ae2f4cf7c68bab175e06b923c92810ec9255337b85bf0e74afb4e55ad0ea4e77d4d14478adb8db9dc30f0acf455718e555741e543f66a9ccb9dfa9a0397639a937f223674f89f44f89f54660b3e32ddb843409eef7086a885d329947cf9d76e855f65c3c329b7fbd216e1e908b48ba1fad09a8a42310db48086246b9f9cc80c5ad42717fed59f86717edd5d731e468324e895d0c6a1c667c59c3446f4e8fe1b1ac8ae59ad631d8cddbd91ead5e6292a3d727b9903287b6a5bff9f4d04464044cd2244b2593dfab51fbd45b6b473fd3f4d55920c802ff2644a95adaa561c572f7cca2f4a89cafdab3e6441ec9b2d89695d7b2352c51cf4fe9b48a88273d30c832fa7b748c572f013429cccb20f7c975173cb75925a5949e055fed600e1d425e8eca326d5959d9998344c2f309ac8ed9e9a2dd2f5c84cb9b180a181492a866a08bda5c21882b3c2e01b5cb390c37954f9d78980a3965f0c192518ef88d550a588a996d53a131c3193ffb39df712f7940a34c7c8c34cf909c24a4b68e36b9c9c13b85ca562d141af5ae83b388f10ab7578b8d0f27d72817a51fa22368273d1184ff3e07bb9428803dddfdbcb8044fbbfec6b8a46fb916125713a85a08e7556e1e4610a9e67f05af7c3eb7b9df23750390d56de0c623000d2c8145ced2ffa95bf7b0bc35893632051b41503f70c6f13ad8480b48bddd8c64bfe8f8f668c89f57abcf7f1ef652140da5a645c21f676aae1f8f2f50c91101b57bcb30653ceaaded94e2f7dac06b4245a5ae06c63d9d47f9d12b287d7a96067bdaa89aafc1ce5b8a6dabb50d79ea432995f911c05dd0ff8ab7aca54344b5012466f1861a89fc3eca707a151b85477d45e0f80554e29b17fd2d741436ba06984bab36914a07fcbe0a57eeb679651b7717212b4fd88e6427bd9d1203bc3cf3226e12082ac2de386fd67e6a17cbbbdeb709e1135fdf93b485489116e268500345e825c6d0f95f37aabb7e8c9776dbf9c3ba8b40c3ee9514d71aa3f33ebfa5df595670f322720d931535b2c6d3ff57f513958a240a7a24fd83c04037872670bff3456e2d7da18ba335b1c5994be9b2692d27884d91f6b5e721c5e0344a31735daa1187c6612c3c1062dc21747dba6dce86ece01e0908ba6a17981ea9f6651010c467587e6b66b13342f15108d7e60c8d97524c25ce14b4ef0bc365e91a35c971f8a34a860ae56db45cbdde96e8f0f13ef4f406e55faf37fe44b4307234281209bd41f89dbe2cc3fbf68e14df2f7fce4b265eaaed3c3cb60078f708f5c2b08c4068efcd25f3a17672c6deae2229c6f64a91dec2adf241a1ae0f0879b454639aaea1f942bf59e7e7c1344c0500567afbb5ce00d8980052ad4f7d74ed6e47c5bfbceefaf3aa3f648a6fd542b40a340061053171474bf4e41b7d5aa8fe543b3b8de3b6615aa732abe0c7105f35a0510ba8b1728ca92a2e7a8eb01d210736ad4967cb8ec8d216d2228d7f7bfdf4532bd14562f7df78c34b8a79703b89a265fc83efdcde9e04798c6ce2e17eab8aa32315c96237c63097aa985e364c3f4a62c75f88802c5d6c6fcfff73a5aee46300e52da767c8fd5b27ea38cf8ab5ae89cd9c50c45e0e83743a1b3ec2347345180cd0ad61cc11d162f478c02fe60e73cb06c9fc15deebacb6990cbf6106722a141774097b07a8eef27dd4e301c0cd1b989efea60f8b4a45addd0305b294021fd1c15dc665b2f49254249cf5e7b368027d06990313dbb0cab4a69c863985c9a2fb9aec58b4469b8832992f9d443665c4e2ce3787c558a5b8756647d588243f3fdbf4ae54e95af42d084c0b2d99b24cdf546648a8968aafab6a9c83680127b9630d7f123f6738a4fd3fadce4b6abf93be6c5f4ae9f9da14f00ec9ddb256d8ee990a8ac67cd0881475534ec76b49c6c0ee7529bcc081cf9c42dc7eb538dbe0456e4db8299197c1c931edafb50199606aec19562cc0a0e39c004e1bb88002b6343f6177ca223f7e399f6930e5a2dc04d833c355096ee9beaab4ee31461c8dc351a8c05a16833a05fc2a5072f7c3a43cbf61fdb6e13fcea93ecd374ffc62cfa01426f4cf9d4919f1776f2df659e8647086d342ec3297b24bced5b3d839f73ad502367958cce841d931ea7c3b9a85af38b5141d757c1b570ee15aee6a8d4e61ca9253b88633f55425c20]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result c30261f1b6beffc2eae8fe765b15a4443095c626368be81af6241de410eed7b1

tcltest::test Hash_SHAKE256-3.81 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 7df4ad5a37a251a20684fbf263c184d77d5d32867f6824b91175f0b9214e8abce3e66872168fe3db8a6de15bdf2bb1108fec36632f8548ddf1e9573d6ee451c7a20dc6de38f64bd508a51c03df4805157e2482a8e5cf2518d19f38928362a471c34f11c7253d4f398b13f411eb80478e52ec5d7e29ae820fb87fdbe3e82e49624d968f5463ceb8af189fb3ad8b3b4122142b110d848a286dae71875626b2084348c98aae7c0f4ddeb9319f0148e1b97acbcbe47c7dcbe0d8bb5d8513c455abbcbdd048fcf86ad86f75b10232a9da783e7fb31ff49dd970f8e82b1e434a7ef874b39312675d461f095507226b378e461538cb099c6a1ca0773cc3970e4097b91432f92f17350aec555f1c48d27866eaa7fffbec9d6efd3afac00d3b9b2f07b44342ece933072005fb9dd6bb8ff6c82e9ddb2b0e1e31e2042c7af251139f36b2aaec5486e45cef32a2171ec5cb391dd89fd543b9483a34c8b27458209d168c7af137174f51bbdf3df2d4ddacaec7ceb154f42b3343115c4c37b629f1621e71d6bf2c1e8ca3ac58ec95dcf9b95f2a41816540ccc4363ec05961464b0c8a3e4d8cbcd1518501b7c20930375c3407eae01079c10cb64949cab6d82ea8b93cff8865913098819465855a6eeeec65cd8d12253980d44fa6bbe12d45762640a0e78a29e651dcca833d09a8f4079393da9d3e8a4d840dd9721c6c845024afe8df80bba0623a03a6f7c8b7ba6d8d370855a2ce055cd59d9ad8f2d584a0422afb21528491aef5f75e188cf55a7f85c20a6722295f0e7c6edbfec783f5ded77ebf8de34bc6728a9e390d132c4ed2f91be238a7b7600d8066e30c22de9fb1ec957d4cbe790555ffe281ffe5c55f0ff02ad8efb8e0cffee96ffc2b8c4e49c288567c85687717ff5eaa7c15882655de73d733b5de0c758cc0706c838c3bbdb9b3a906616aacc419afdd747886b9f8e6890a3db19fa31b5d0c507c3baa0dc13d757661084d7fd34bf865af4f67e510d03aab3c0c860d8719d5f9747b6e2c1ef6d7a5d6a1995a0e3c432976c3b11164438ea279ed18b2826923529c6d61019c8de01fad55d4a43b95971110fceea7bde88ed73c7ddffbd3f5ff433b360af202aa99ca2e4b88c423fdfd05c721a50ee3674133cde3624e446470b49b01f1681af4088fa1ac3c248e1d7bede15b5fae9e67b09c734829149b5e7f8d02f49fccaa1437574d9f792b449d1cb1a7d1a3efb690e1fb77d4bdb6a18d33b6b9379b847bb12e087b4dc6410c24e53a61acf939f28cde3921aea59a1e96941808f36dfa5574f48b73ddabceaf5ae06e5713e9f41b00af3cb9ff692ada24aa9936509e94ff0590c97d78b03af6e81436d02ffc88f9975aee87ee92cd9cdd7e228d75b5bc430b0da9e1465eeea676897b1627b95d54f7e936d3a4a7ea2d69179c538b3ad9e72f7012e66e3c508aab48236f24a9dbf4c863fbe44930eb56717dedd1b9b652b418c3eed519d3c969305817244e526ba1b3d1270304b537dd9db9ff4f28b091726e0e24f66ea9c20aacc1407ccc3e73225f3aa178fdbf368a94d2b815ffb0fde9db579c919648a136c88c85c1c7f55d4076a6518b5dd55027ffd0026a673efee005a83eeeb838cfb52cc0cd3966fd8fc39d1e1f844c80ed7a85bcc49888e3fc219408f255fdffb54f7f65022ed2e073737ea8f3aaf147754dcf9de6e589265f723180a00d8d27bacc6a840be632266f17c14fb54675b25066847b4f9a9390909c8416305f8f3845f39423d0aaaf55ed790e184da0ff49e68d4d5ee9fecda8f56734d48a932bb8c08da64d39c171f7545f0b0da300b895a08cd24f9b5b60f6f79aeac296f18b31926247072e759f930c926335a0aec81de42aba554df77302feff4de73dc0d42a233a205b970c62b27ddabc982af156691b2eae79e71c2f55735c064b654a312cdbddd8505ccfe1db0ffebf3f2a138a02ae6155c25210bc76bc7abcf6f7d5c8be221318ee650645962ac81331895a8d6f038b5838741b41ed432118f1dcaac16860a3883e9af9b56b36fe60762d0f873884745ee33687e6436f18c143fa1145b2fd56cf47e4ef5ae39b69501700799fe698e310cc809ad5ffa72960f43b517c2561f4961229325b85c1d1891be9e2fe00a6a116fa3b9e33a9551a9d0d86b48d48f44584a55308e1da10feb38acf90cc0e187717754dd92bc9e0b41f94c280a0a31f10420a48ba1469f1b7776d9ccc3099552abb46a094e2e8b0bf8f94d9fedfbf481f7749f28f1bbacac57dcb37de5228c585ab741b16838d2d039412b2767023d938cc6837d11f5504f16cac880e5b43d04f8f07a5a93441bf48d71835307b573824e97101c647c30801ec1877a47372de4f0e0828931d8bce5500ad4a7329e4cfab756b37b8bc8b3dbda718ece7c13e574ed17e8b1d68f3c2f3b6dad989a1510494195fc1eda5350aef42b3cf206e2ea3148071b68f3a0103eaa1a6cab80c2641a97c5487ae2b49d95d68f20898a1cb2a69c2e99031be3ef9026a19054992ecedb047527042765011d0bfdb7f94839b55153fef034a19310c02b93b73845a2a6f72216266f3add21910ef791d5f3c288adfa08af7247663a5b43515fab08d6831b7b38a5107f9555be5a1d1c840f3fa32918dc35205fb5a2ade87ae8316522f9a46a4d417c781633e177ded697ed197b6f1ada1fd36d0a00549570ef7ffd20512e99d48a17b6e832a6d2ad4e962fd897cc8a92ce0ff1ebd9cbd4c3e3cb13575016646edd76be73e87b1518e2e349f58eedd286ce3a70d3759020e453c75a204cf8646cba1de151abea99924223ce18a73fad36aef78c498a3df462bdd92413ce51146eae81e1fa1351eab9dacc1e9a972e5522deab86c67e11d9cf909523ba4a9cfed5392712e5b55d72e01b30ddf3d55674cbdbeb02c2d7d84b7b6a7fbb8c48488e40d89206acf869ecb582166eccc83486a2351a82d71dedc406a9fd6df25df03d220b372fa8531392aabdd1538e0645053668de896bb6cedde1dd92bd94e20096095fab10705bc71f201cf61ea006047af8e58b790948f7f3ad83c42cec7b16236734523b8d8910ecb63df942ab5dff428a49c5f4382af59fba2b262e519f8d6fbc27b12368516d85fd8f5f52285492064ae4026d60f3444ca8423d446cb5f2d578a86c4a894b5975368f9cbf7fb06930bb72c5572c386084f8575e11a654c2ef4d44d82378dd512521bd35fd49c7e15c6c448333e250d6d31ad91cf897029a277a7b8930bf9dd1202fa6bf9dff21a6e3ddf7c0a63bd323b19045fe6ba735d518b0caf414b60375f0b0ca9e040844065170fb02008135b39ae93c770d6f65003d60a1ad220484ac1165a765e20da59c4fc5dccbf56b0f2309961b2b304816a8000a9e18fb13b7e00cbeab8b9a77dce5196cfb82d751b5de8817606f86d9d138fb2f1edc027c03be3d1c6593afcf405d58a705cb28cdc06290fdbad8738d1b3fa94eb24ada960e933d1f63f2948c768178345a098c37c53bbeb978da88ea6b2874d9e6f9d60a1f0b8728054ceb27f5ee127586d254382ae65bcb290a397a378ff8613b7da730eb93a5d6e7e7063a34ef91eb0a9a334767ef02a359dbf7a506d29e650e2aa0b2caa8139c8a75982bba22811553e58bee12a25df279b466035facf165fd95650852c54af94b6cf384fc136a850128d07491cc98090747e70db85b7bd48852569a0a87d67dc931bade813eb8aa80f893a39bba7b8790fb0d3c978aa8411cd617f0584c208a72685080d000f60651c967d366f862ce95423b087397013c49850b93d2aec3bfe57547247f069d19020faf8caa02d87e82b21309e32d11168d03c40cf00c3a7e80ed2121d4bc2862f05fed57cb6656f7e7cf07b95c99526065c6b3b43700ef56d3345111779e2264db2ea39d419f68cb42fd9b8f46883fba52426d322e097cc95aef696bde2915aef0f064e5b32a888912c2410447665384d10b430f2ba24d569672dca98ef97ca1f04993c986743081d5b19aa0b5b018506085f793e657eb7f04632d42f06bb1de479ed2b14218eb761a500afd47e1f88d9f46dd78b496d1b32344cdd0a91c6fc4756484255c9523a64f02046244989eccdbc277163ceb8a93817c40db2f6810e4e83f3a9e5c5573c2f26c29885230657eb48d5704d5c290809d9e28bae9fb1fc03e836894c7f6563c82d2ecc7e745d723a80bffbd25b86e1ad60ee8086f2216d6e6e580a105d445739efac0b98a557e4c24d2c3b783398db2d963013c359980a96fba353bbc9bbc18a52847d591cbc558b956657ca4c279f9061f06dec3bdd7b83785d8dd52a9449c140fd494b42546f9e42b3784d0ffbd4deab75b589ffb9673dcecfdfe4e89596e8a06098f67fe6d7023a5cc68be2db23205b0814230ff476cde34172726b87510659f591e13c3c38bf67a8680b2e90345d59f1b241d256513aa1fb6d061a31212455045d94df1c38deafe187555ce3ae9d8d78b66bb0a7a08cef44f9295f5daf497bd52397d24f7f66fc4d4af2d2993ae8dfe5492911ae0acbb4663e61a1d1a37db3b00c737b9db65f3536da69fa7d7f47377f92045d343800daa763394956a4c8e5dc40af44cd85d142e25e423b5626c17d8fba83fc01d23348509136bdb45a33f9a2e6d394a993c50b9aff06fcebd65f995de82f57dd7f6ae6a8efe266b36ec5d84a2667d2f7894277a5e53ca70538287331458ed490e7af9cf9a6c4ac1b8887681c29f468800e51704d376ca36cf324f353f92adce1b3095289dd64f8b34f7f925f1702bd0ccbf9ded81e1e58e8b05b020a2b8bd8998b81f0a2bd4bb0446cb73f5d181739636842a78fc1db2e4117d686a003372e80161d5e8a6e003e968637555c52bd444c8c34b4ba492a8d3ecf9c685baab8485efde78489170b08714605bea5f07b4690dfd8eda1dd94dda981b5918448968cfbe7e74be9e0f5789d542b608018d9a7f70b353a8ba6a08648d42ae8620457641f7d2499f0f245f4e157b12534f360cf49b55384c2cbd6f0e47102543f0785379167a658e87583e607f89df30ba897274e873bb18c75be8344ff45bf6179a76c1a4c756e179038b5d5def9b44b5f0715ce29f4ab32cce1a83227fb101181466d82d59ac5c66cebc914b1cd4f3d42360290438658fbf7c6c574912d2f9747e9a191a91c433c31248a8b1b1fac2976ae575d7cfaa2311ff544d3e4e3033bf418700e7103d2c3066b6004c2f9b35726f77afd7c57701a6bf78b17c9237645b05c42c3d45759a11349b3454e624c0e7897d538eca5a90004530408e7f76ffca23b7f767b21bf1f8145eb1868635f989418ced674ed37291191156de766d7aaf33f8ff00d69ee8578e87043b802d43ba302cf9ebb3601debb3a281070789495caf0dbf93335cd1b1fb8aa8ee5499340cddb3f596a88ef662ad5a4b72b368f0550d5c959958f44289f3f02c3984084ef392d86cf28ebe90b85eaf12bbfa7b044ad76c2d7da7e3bf62005dea878ee908f107f0cc89e68d713f5017734d5d4e099085b2f3caa0b9acbc991a7072e5b9d6a795a380c7406a1c7a1a39d9915c3054b890d7650af3c49f0c26bc6a6618f94c69d45746251ce306fb257cd24267e08a35a1301db8e1b31ad341ba14dba935eeca4c82894ddc66a534fa66f9bb10dd2e9a0f536a5f2b038494729a2c6e06ee124b56bba68c1f838baa117e9c75d764a65863c7f758102470e221e30d87d2807b5f8b793a7a56c83eecf32a470d3c3575e316f4315e3194742ee82b24a36cab7e996331b1930293135027f085ebbfce31ecc16e94bc1fd1e2ed2db92e5b55ad906b768ba850b372bd862877e58bc27d5eb7db9dbe0c3b7b61af7b33771a2e3545582dcd9b4de9e5a1e16d16c287e4e150e6ce1809c904df54e849109b6a46a121e2019de6f5066a55147e53b94aa788acfc3154046d1cac511a2fe707b64f9faa9b9a7337c0998f3b71c4c5465e8ae1e75a7de83a82d330dad7981d48a8a97f43d740c3ea3b23c2e9abe8d1d62dff7b84a42c3b1884d92b56830a29da9bd4de82379d269aef3583d4054300055385b4094bc4c32afd8eea48bf0e933a1a522bea4f1801b6373f608f207be64049ae29f9c3d016fe57750c45de0dfff39eb1e5e06049fbb8cdb1d77f7ffbeb139ae95bbaaec6bcef1d2bffc28290b673b3749b191d9b6b3efd2d6729963b84eba1c7b7d05f111b89d90433432f2f5d46d30ac9d8f994d6a550128e11e5b34a54f8b9ccdf7757b96af5ae454c56426af997f4e0b466bed48850f1baccf11bb1dc2a30194c6a032cef0d7ab4527a7255e85cc37e4ff781cb549a5b7bbf4aad41eda0db1b8bb99bdca28b09feda0e27a4bfabe700e02e76519676b05f6d55108105e71b4231e89a4f01f8cc9357a3daedcbffd007397e14ddca8080c46b92cde5c177613bb379770aa9c142f05fbe1487b9e32effa068e5e66d425d491ea63de68cdc5d56a4deca85f69f0db466df6d08f5d05468a96151f20b36966c1ae1f909d47060217aaafd4764cc7d5de16a3cf80c51d0c0d919f18700c7dc9bc4e887d634fe0a3aa94097d590e4123b73f11ccb59e23496a3d53d2bfa908056c11c52c23abfbbf0a54222a6f7707cfb82f684f98b0be0589e35ad47650b323b741ff254324005e21322163204ec1e1c830cfe090c2974952cadba6fbca262a87245df12d829788d6752eb0d45d175fd1886e08059e551cad3cffd1b8df0822c3040817478d67461167739af36aaf53ba806e4e5f0aa187827feedc135602145327271ffb0d199fba4e15a8e53e34c46b60f73b07cf2391b9dccf4f76f9bb071fd6e392b0c9549cba733f6313a14cbbcb70305663b582423a9bcab3488edc030e5864f7cd8ac144f71e1751e35a9f3fc4f84227dc8367a2ed04098ff1de0c100af7d1d6bc18089f5a97c5fcbe33d6583d3f5536db0379baba5fb16bd9b1f437fbf952b8e43bd0b5cb2572ec0df2990e1f8e8f0cc6fb61918af3edcf68cf3b7fc7a71123adbbc18f331146a736608f6a502d1b300634c62f4309e34406ff8af1574933a27f5f843478a468b7a3456173b9641f2a0476519dcfe9bb511b0a89939327e3bac2f0c1ac842301a4ba69b732427bc4832788aae214db9e7f0fb9df6f638847f5de371f003dd938f4e59337add4b931c2d6347806fc27b4554ad2358db0b687da3cf947378d0d36318b8d8cee55678f6f7b4063126e14245b341d32f360f7ccf14201e1595b0622e2131d5cfdafcd05127d75150d51eb171935647fab5d943ec35916946f8e0d2590e70c50e0c833bc34449b33ff8ff5b418b66dc3bd8dd504d7e9ff087f106a67c26e210fa18ae1db5c387a68f10f7724df1d01a72fda0147b55b85e694c8650f0010264248db1e8b13c1d959e9b9bc8ef6d4e8d30b2b622ee61570d6b39e4646d335e190dba534f4e04782b1f2750b1be641eaee59673ee2f181887fe67a5433c1451ca264cf693d4b323b16112babf236cecfa01f78de8a5e06948a3444d8ff54a89d1fea41068fdceacd3150c3e53d6ee25e9367458a4fb60b5e9ea6e41ad114c72db076e352111cd700a9b625012117e4606c38b6895980faac64424362d2880893fd0f9d97ec92619b264b3a47c8b83e9ed69bb325cf443a47841247f82938d499adbd571b47c7f1685218e8fe5ad957dd779624a4d98b33f7a51ed92300ac94056888f9284b41ed2dd2241870fe0297e8f734f14fa1db4d836f6ce22d7c6daea0d8796b041f8abfb35178b3e3ddbc6686ff7a036e4cbff0b58c07485cc7028c32a39795f7ed2acdc2751a9fa01f8e2c7e3772404905bc8453a1f4f5f909f3948371eb5f4bdaa78122e614c6efeb01519946239127f25c7126593ccf4b69c9305aeb7bb246108b429a4d6e0e17699c3d9fd595de523b261ff659e8c09c100bc780b8517432b75d77f3522e6162c3e759588bd1101009a2f78b4c00af322641c0be81758f55f6a68af59c5ea6161e6a0b8b11de0daa84595facd88a8357d2f385daeeede9f8f6ede268d405c57ca5aebc020ec4bf68d3d2c023a59026503caa7d9ca6c36c62dfbae714a12ca5dc7d3ad5832b8c0d911f9583b65c197f688ded10ce52ffffddd89601c1acda307ed196bcd7103dde6f8f2b0e2ea52e76e6ed45a63699a789af090798369d174da9c74bdbc664df1c484c1bcb5227d6f3118339a79e24c5f4219b97143c1bebe4a787e09917cf7bae657ded20ec8b19de3378517bcc9b60277bb6cedd9bce5fdebe3add5d94fb177c0e4b2a77c278ff1f92f3158b88a4810a0581335b1b5f7a213708cb91038dbe6e8ade59379e97919f761d0e3d9cea2f8507254ef7837645965a18309c2d30756c235d02c84690d644291ec3face137280c8caa7179dbac6256e9397e6da8a465e1ff0ae92820ad6f7f21dbc2be8c852e39196c7252fd407b7bda085d7d143382cc7c1e3fd1cae9aa118428236b0b0d896aab43587026b10328d6884d7dc0453be63f52c71da232928e4b79c85ef740b815b4a79a7de28e78027131b4ec175a0fc3bb70e5686118c769ea1927e6cbbf48dec811ceb8bb39687d3c8d3a4493d26cf962d1314e622c9718e2bed8bf12e99a0a480a5bdd0b32531d8af32413c04ee1dbe7fc213c3fcea03fb7a3413447504a3cc709c8476d19a6480f1c28d6274fed0f9d6a3bbe447f6132fb9ef7e2e373d7fac7889a746b4ff0a11b60bf1833360ce905a3f7513acf688700ea733771c4a1a8cc1f59005045b0ad42594d366e91c01cb321da716d2f14c07a1e29ce7ce355eb47268a67e6bb74c1167e59cd43f384ff187c6bbb663ef463c9b2b2046f206326bb46851788f1ab810a386b595dcbea24c80c017bb04f95e562407275b33c37dfbaf7ff9ba188c3618020084716ab5e122469525ed5f157c9f630019ef367629aa8a34060daf16ae72acd973308e26f4bc00cc4b141c4e885d819d5fcaa6261dc16e0fe039fcbe0867c89ce999f218c262d7eef3f7e3a96ad9a6665fb429dc41878299f006a68e2c3d7fce4e753e93355bf382845f5a300b5bf8e48275679f7d46ef599c3c568e023cf8f9098c1aa034f17b1066142cea512aa29e30d40a77b944dcd84da2b3c573ae5ca484a62c45a86a972100deffdf2590ca1dd29bb76cddcb729c6c01663b65d9d258268b1f8c770f713cbc857c1870d399e7ce901887d121d82f5f2116f8c107839c5702997d8a282ee901d04a9c183c36868e7cd5cf7d8e371990ca6c05707e96f87fd5421fc9fdf9b0388811730713c9827826964dca5cb7e065c40f69598634f406cac47a1cd5f81ac7757ba623a07c61f65802079ed17f0e48d6a92c6369851955aac4966cfa53ae175f2e3c562a75ad6fd8c107e337b82aa0cadf57786db0eed23ced7c9fb233f4900ed23d86fbdced4b6f7c557fd489bdd5665bf07fdcdefce64ae4339f46c0759a4a10b29d59daaaf1e5dbf75cf11b4e4f73c5025ffc36c9f99a54c352fe21b89eda90a2828d976bcb0285f760d5966575b8c4920216e1df74f6e335a2217f460287f9151ddf3ab8408e235c75ca218bb1ff01aa4f7106c6bd24399076f901a53019f3135696eb19b8505c2f8216e4466a0e24512e57ce043eecffdcb5ccd05f8e5828a515fcd4179b11d9776e02082109aed490870e61235e18dd2149e313fc860b3dd242571a395299413c23d6b5a1f4a7b96e42dfe6ab846e7a681986f3027ffcdda3c5f0e80843b03d8788da125094c17cf3481285221ab87fb80dfc98fbe1f1ae1e860f640bd71e755f855648b551c4c5277fef681287bc931a0d8f296e13b3584d6efcb6ca76aa90cc02917e5894773b13d0beb40233435f950185cee47f0a843863fe07cd891e37d6e7d4ddc2c3a387be23c6947b86148b31d127b1e48cbddae64e5e7f9d764011861c678d7a4810513061502e04e8f9bef666bdf7f6a296015f186545c1a7d9c7e38a92b5088986407270a4aa25c1b8a0eda68fcba2295ba2aba75882c182b000f5179d7ef5f0cdfc8b3a0a3166791ada1d7ae4537189d564d3e5825d26718f65c5accf0fc8e3ac2e83a6caeb5078e7148fca06b7ea2bccf0deb92aff76db3c9d5a32719109cced7e639b2bff6a26e7f5497f3b20967508edd40a978f3c288051bd8fcb2b41125693320376953cece126557fccb6fbd05004bdc21236fdbf2329f4ad2506f71db016f8c5f4d74f309f4fbbb401a0a3a56ddda2c8e31c430aedcc0972c749b355c2aebdc9eaeb2a5be71781052107165a281f8a0452689570a6e303c8f81dfd2256048af7a3f956d68226b1597612da5947727e5ea7437c591515eb9602aa5eec32bf6637662a59083825529a46ea7908928085be29d47f2d030bc8c42b175d1b1f885a717aa5bd58d0bc6dafdab67bd1d3eea70c21442655386da239bc8d8317e5076d8d28930930149209807a9f661bd067ec30d7baf9377ce282dffc3356484ce3a773b81cc6f7ca502ef56dcdc44d52915d12935f813c97126f9d353260171cc5100b72677b14bb9de4f6fd671cd12114019b9d5a45cc50a6715badb129ea1c54b13e9d9db0f1af22346b7095f70e0599e1b13cd4cd5070469001aed9372a153991f283e5eef56e87253c0f81dc6cc6c8033dbaf5a22ec099d5787ed11440d01bb8106a68bb88bf73c051225053532b4871285de44bd0054847a665c2489212a32f819b4ea2126b8e0c92f12de42bfec233586eca509c0afaee74add4598aa679fd2b5ebe28fb3b8111e8c33e185c05dd4fb734ce3afc9658d3ca9c2ed18f53442af8fbe0d7acf4f4d739e2ab764e0942cf2cf9199057700afd917cf93808e0acbfcfb9dd368b618e676f949d876ad198ba9e03d2da1561b774af935c145f165bc397e1ddcd0149f8c870223cd116278819f79c22a19d3107410e2a80effbbdf63e3abb07257773da0226d4afdebbd1baf31e0a316b59a8a46b94888d50449d28399f8f84c553a8da1e77f11f36c298d550fb9526c3b08d33fa2bf7aac0a27d96baaea57c35feb0a3234dc3b35f9144823976872a2e0aaa5ff7babdffc67d26ebcc4f4416fee153db198f9094e3929d68b477266436cfc5cd692923b5ea3d61cd746ab67aa763592b0825a1e94a2c6a30cce6bcfd6268a728586071f4b44af4e5bce741d1b8eb893af9f63edb1ac6758186ab8f1c3a3b1816cd46efe3ad0da7daabae2e43bae3acb1f3ecae92ddca8404ecaee7ea47b1e03fcec5e5ab5cec445449a8c5f734b28a37ffee3b351a9f606005d80e8f1033c64d66c49a73495091fd9fbb4d16aec0eb7524e52bec5aadd13ed90f4b321e2793e59a2c5764fda2587ab4d010c7b07597126ab7c7e1245c9f46713ce5fbf7f60fb174e364a6ff485f7691d05433c33955b7d94d57390014911fd448251325090259fbd20960d7ac6f973ca162816e74ef0c7a8f231f763d70720a1953a230c7348537e18ebb0e344f85bf2d82da3a8e2bb8546572b90f3f04e61c99b7cf9e976ddc31f93ade2b4ac9e9225afb66aeefd2646fb88e2f5282152411ae98c3f9e37406f00056f1b655a36b6b12174c52ffacb7d46ebdaac86f6bd3f14240a6c81212ac7ce02a1e38bda6b2a43c1cb5ae27805a8a714852f76ccd9cc53cf59f948c0f76de7ffe8b38e99a67d4c053c84bcd18f499a7774e69e20527948400d6e4b8330b1dc71a603e434731048604aeb05b3a2e0afa91c7a63ad91b6602a97440004514419ec5c6d23274b93b75778e6537afb0e451e0e434da1221439e37a130cb0f3853ee49e57d1eeba78177f391f3cb3e212f93aace9d2c78e03440f4843d8257205a9eece4c66f72a2de73c2dfe17db12af4aa38ac6996d20140d02646ee8be6735e96f7eb368ed2525b522a9fb7b7cf723a7dd2a71e82ea2b7036160ecc4f84da68beb22453e1d360fffa74fafee05fa209f4bfe746578607cb5a0c055e36f8fd7efe64b5a8d13c74d354e7173d5f2a6169f74993687d6f3c59244f532ca90c83ab3e56c6bac7d735dd48cd1ffc9ef858636eb6d30d5c6d73227d291fbe0e8615f466d18013296a4c27bf6c39c304902efe414fd1bc5c47542f4be0919dce2f5a635e1b0a3a60be60b99f0e8e1bf9bc8c43595cb2fde5c7868778bdd35052cffbff0e7c8db7d59b1a99d2f9458be5421a389c25a1585fb3b232ea080a5f012e9fd05e3e3113efc822d13e75879c31eb7fe7f3f1c45632d47f398b0961534213efdf37a81dd5150f1f69cdcc7cd4437f6458460a437ec6f296a34108feb27f4892337f017a85b136ba6766444bbe84c670927eb6475983d59e78f64c09071f9331d420926fab2a069ad5f0271ddf5c884c9d813ef86dd24440c0911eabd78abd74cb00a325d0e84767ba55bb19c1348c9f8139ea7d4519082484fac60bac278e021f097bc47b53c1cb1f7c4968eb729b12468d01ff66c1e9f1cc198c530d60cd84d821647335d33b6c0b4d1831e5807d4df564cda55a33af509ed6b7a8839c44a1ff32a45a85d07ff286b0729d38c4faf796a89498a8d622e8041991349544b9029b2384a2f3b25306998d9dd46ba8d9b82f409fffd8110a6205ca601fcbbef54fb4dc4c7307e180504acce2fd0692e43aca143603724e2e65a9d16d91ad73c02f534544f44ac5ce77a355894091ece1226e0ca0ccfff4579af91600b1c4cbe14a7e46b44e43c60424ac10dac6951d991b24102781076b4da8fc8161a7972f224940c7e3a87b4decfe6ce61db79a8dd4cbf308114a101ad839bbfbd79cae0549d49eb01a2b78c04caeebbd993b26a45adae3dca750a46bc0f23c6aabb892b61f92a2e9a1ffc489eddb317f9778c3caf2f1fc7431bb4ac5cc7d89b82622caab6c2c535ac04be70e972e47125f99f86766b847b8f7b38b90c682aacb8d03de4bf849b9ecbf3767b9114e346039c44de37cd6cb91405fed3574a8a58d2b8257fd8a92dd85e5edcef125e5004f6d224ba6fdf490e556e7fa1a9e9884e447c8bc2becafc60e7b92a31d9998b4c942da7918b0b99f9e7f743aa80efa4fba28fc953ce4477c70c9516fa7361156b5011460a25fceffa2042e34478b750cf617476b983b0208911750b9f6c4f8f1faf3fa86aad0dab8db2d3c7060dcb1c5805cd1c4a7b98a715badb709720bf48a825db1759acc86d32f41c67659ca5781403fc12bd02584bfb5d2afe783d2ae2b348a64b5d81b7a57888af6cf9c1d0f491e083f257e489bfb86d060dc91e3cedbf8c139ccce855d4ccd4ef2028f9d802402fe753c16eb752cb8edf16f0404fba3b6495844e2d2d7bbe6d6e2979c11531ad46a89f701d4ba5a32728a2944fedd89566beaa57ec992abba6aef162a432f337c94a3dea7cc138ddca75591b9991d98c16f17750934332433514108a0f9bd78e2c4ec7a709a28ce9ed3772fcc9c63d5dd9d063eebd9652e38d5fff568fca5f0ee428b52c508a024603f1b8be3d1564a933ce0878b80ced2b23c5163e9148ea38955a9ef0cdc23980a34672e68fe9ffecc96ccd953f3161787cf60dc8b08209a99476ed7afdf5b3184f8839fc1ece6f96ef1f3bbaaf9e606a0d654e7b6a204dc075e019414d9edf7b6d398665863d24462967db5f859e6a5e599550dd2a8e271bce38baea59284f2890fce0c932b0be691cd914fa6dcbdfe3e5f89d447e361629f1d33abc8d1c62be3f34c18dc0b3ae7e2de57121a4a131994721bc77e1b2ab697562215e7605ba9aec63b129acc07503c10f885bd6b92fccd18316bdd18e5758ed47f736905ec74d0d1c2823436192889ac9c31f706e0b1d39af44acda139a86be1734eb6892195335c0af114111977b0fa6a9c31e5a5408c408bebb780ce5616c3262d36b3a113bdae3be7a125ae4599428b50d1ce8aafe2511ed6017b4d8776c2bf98514d15f658117cea433a819b2ccc27d5418a3608bc17d794155b5e43752867176f1d2447ebcbf5846217398051df65b1e7e1535301d8dcac59e7a893fa3b4533f8ed770d5d25cf3c66857ffdf0c56d6e2d9a86969bdd55a637e9d47eee4582735483b5509867329ab84cfb19f1c468937a7f79db716e6b0b1627890d378c4560eba7871883d94527be3454dc3c257ea93556d4296bd245615d6b7047be59b7802523956e06c3316ae105334eb930d637c8e83e8971530d33767b31346bf3ff5e6bbe8659096c1dec89863f78512c99c59afd60016b37e806c81f73dc27a4477f233f03e2741d32331f802161ea63eedc135de29c41c70064bb21de48d8b2b46db76fb3102f1e98c909bb80116d1bfe039bcf6b5fdc4b7dd4b7481b7f676670af8d163feb23b77636b1ff0591c39df0c29a1ca354220b87df245bd289bd08a3cd0ffc4e7b3630f4007d1458e8d231eda1780c3482fc4e440b6a23aa6fc0e0744fa3e889c951d03cb1d7c1201e841e1d299d67c3f1525edfe3f1684c385a350cbeb3a397dc5de073d026cf053cc0aea7e172f5fbaa0d817eec22f160ec725193a2a6f622bc40a8c4e6d207b1496d27b4515d7e81b413004ab063888d94f07a3081e4a6cf72e470557a432ec94d75d26b02c7c900174e236ab61df37b36bbf90be5d57e48052f804e14e00ff851bff7f57b199f1edca5310686b9fbd3ddbd164d55e145357d0b1fd83d1371e45b33de7944b9c8830aff7448a99d683d8edd181e5a70c23de35f971b7b441b3576b9ce20e6110cd8a9463256a6330260530349a57beabe093e132e3e59d9d694a7391112e88733c5c261b45805e291e53317ef0b40b70141960e2d695c3b6aa9f89bed76d28504f15b3842774f11dc7337025377313f538cf33adcc60ed29f1b70c7ab742d7248057fb323da0b2aacb365aabd12d7ea7c925e7e827af6063d9217a6923680b6c7a833baa1abc194c94dc7f87404b92143fcdec268b09c400bb8f61eece153b949838135020ff9b7fbe865d4c2745f4a72727ceed78e89e6d2321418ffa02fe2963e700c8f303cfb0a2c4527ed8a52cfcf9b3feb153c44625aab7a7d15999a9b75800827903611c8bdc371d73e70191623202f9f6ae3551a6bc92e3374f41e4cb0f1526e4d490186dd52f1cefd4b3c8935a854f320ab4578cd343a2464da435b0d3a55ca0d8f939d3284cbf27246448ecfdcb7cf7ebb9be24795a5362f73903155031a211a334f7584fe092de586b88fb7645f1ccb3cdfc2a39478531ce68d364ff3a75dba5bbd769b6bb3669d3620f3b6e754c050559a7fa7d8ba62725cc2d2c5b30664363066093f71cf85e37c0522940e9fa5552f53811c0a734b7afcb86e7deb3f20d6d9d19437b86771ff80ed84198047b121f19230c9d1acf67ceff67041425877e17e86814ce98214396b63810de554cefec4dff478d66c4bbf5c0442d7605b53a1490e3646ac2955d865ec8137e7cfe332d0c335efc1bb328d6c6b4a07ee4f9b5c60f01deda8631c269512ec602cbfd8063cc55bf739a1932c46b2f29b943d375bebb49c0886385169245c2a505c2c95c2316ece58e62756e51461a159f92c0ee613e31d61edb0ddea3a52a3cf201e01aed644f6da71546300fb01be0bc6240a44ff0407be86d4a6f1fd7dbfa5209e061254d13c458231a2c52519b377a22e12bfd99fc2e8f9ab95c69864e79903b38b35d29d0660c0c4fb7cba31e76636500f9dc63cb6a7ed3d92b03190817571667960792ebdf4d417576ce1d1c29f2a94e727f0644bc20b9386f8f187f7ff14beb6db710ecac965329cdec382acec250283a57f9ee903fab457e7ffd3af0091c32beee1c593a71c1bb41a88cb0d13cfa1cb5f9b73f83062a8efc384fb133f937dc0e1f1d98256a1dc856857354dddd179a79c6a6ae012ed7834d4a7888986c0f55efbcbd4fe9d9b7df9105847d412d392]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result bcc7bde11589f10e7ccb8b28e88e94445bc6b19ea055e46f4c918573e7d998bc

tcltest::test Hash_SHAKE256-3.82 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex 6fe896eeaf3f8489eba25858dfea53277078286c9181033667aaca60abd5a30a513ab64967b9341e3f6e98a5d0872d8f5a52d0d2499af79f5c34f29506d5713415274794911b6d57e7804adc46d531b54a5b2c5cd86ff82149175067cadb6f1002d6d036f60c381c2afef664097c698287bbc47005a70ea3757a6d3fbe8ea387626fd9975e359c55521125a5e125dddc5b99207899eb410e2986cf83ac97177f7b1cea1f913da1eaa5e05d07967894ad0c1dc9da5de29a48ad63009d5a9dd3e197038c3656ce4fc36c9429f2ef1c96dbe37146001635203a493888f39049dd96fc4c4644768dafc9ee540eceb6baeb4f28ba1f508f8bdccc452dedef18433f85f220a1b1ba24c8e275499603b1f99cf22323dd348f8dd4e7e86cb9f7b9320195c3a724e5e73ba2f7479a48f9a982afab1cd10713dde312717b1a73753abe29b0b5085749c87946f1ad70ac1865fc2f615aef255442349e544662a4d06490c1bd126cc2432487bbb6eff34bc9af1021fe26a3bf6186287e76916ad370ff50d0a320faee3cc20c0930554aac724d668f69c8155ea17168bcc1a45a88bdd3a65f4c28db629d6bb13945279e587d08a5808a886f897cca9c601bc65b4c1fa738759f7136a6cce71e52dfac16d550a875fd49add6c95a5b6c706e4195a5fe44b11a8445344333fefa5ce52ddbad55f5800d8e8174a5a3ea7ef6a15b2f1ec273b756e3eafdc03878ee603ff21467f2b76bb8414a71a5bf407df99c5d513cd3faf232a4a9b8a5451ca164d543ea8c91b5e1064a51f55117250f82478f258999a10cb5b0ca8d7bc1b3bc738f6885a399b8880091de27321161dc988a38d08c7d32aae8ed95a5c81405e69255a80c34728808adff392fcf16bb8d434da17dcde57377d144522817a5dac8cb0f4da8c883ed0a167aa936b08ffcca8b781352d53a2e187a9d483eeddefa0925a59d80e636af3641eb77645ee2ec3a79f3d4772be52938ebe1c00dd4262d52a9ffe1bd16f29533383bece06079538614a62c15574c2d7d2bf602c053e53a4b5d056086e02068aa03504ed33ebaf95665796554e2d9018f41c6567df384ea9b4ba06404cd26f042a814e564810fa6507255c65b53f36f173838046c3a6905eb7bb6335e646df5a4316efbbcb0df211f4520965332013dbd153353b7b2fd53e2f33016bd2d5d3f77a545d60253913369e6c41e63086d3428e2a18d83e3a89b29bdf75549b15e95640d83bf5ff38fa4d75b27a6b45b9e1c01a769f8fb54d3a767e1f2382977d9c113700ffefb17403c10ae33756eb6fcbdef6a73dc448de43d45650807860834892bd6d1dbfd470cc2bde7ced5b89eefde9b35a783891645266b53230987ead9b65548b19e8d0b5b00850ce20cba9ddf49ac0fed34f0785c2a80b22a8755a72e1038cc978ed5ec95bc112756639d3a34c4cb012d36a13a93102d8b04c917c79d5e7d6d6bf4fa7122bf083f122289fe5618a0114fd2c5e451a219e59b17f6d08d6acb30151827236bd1135dfe91a56fae0dd2493b5084fefda6ecc8d6b91a4c66facb1f7d428288d6b9da8802f81a17a26a0ab1d9f8051101e5503d9df6aac28fd724418cba332acc4104c8069e0f7e9bf9ef50121171a4c427eb4ad818cfbb72c97f9e28c76391b62f3a25f2ccad2a02802a2ecce5ef40ae3365fa6f65b0be7697843f3ab33a43fa4c23a8aeca1ca53dc86253f0baa86c27d367524b267653030bda2babc4dfca0260685822e08377b69940c867d9c4b097cd995c52a2480281eb2a6a61437bae3433b03e37560a26d3ba6c94178a6a9466eaa21f6d234f5458001b0546783575fa8ca460d373db3cfef58dbfea15c2a1fcf22ba385efb2d0f112560341aa36a9bb35ebc8df801b419e104b52c7c1f55ec2addbf1804f9affb2e9826c3922a5d1def42e7e44c5f5bb1ad4505495d72b541ee35b10488b2f67044c48491829ab76cd921588e88a8f34dc0941cd3e9f8b09795b5208c3eb9892500450a1c505701fefd747f0b51711334b77c9c5a9613e073cde69e2dbb7fe08fcda417c28fe1b54ac8a6dbe92b3a441cfe58e45be656cd6cd3448a57736884f7293c4e2295ed59e6c752ef866a870e5d01d385465f23bfc962596597eb15ff118fa80dcb06bc583975e33a81b3c9ca7b6e570fb8652d603fd79fb06da70aa7658d61e71a56f148d950e24d598b8500fea06de4109cb63736cf721b572bb926499ee45aaf0b0e944cf4da888c564b6a6d248292ed6a60bd24a68ad6e2eda3f45420b9e8d79776d2fabe267c88a87f3f3d772f9cad62bf5aaff944a37f614d8a0bdf5d025290bc7d692970a9dcf6a327e614ef81eefa14a82f3439e1ab2b386fe71748477e6b620c1ed32390f7c5699d0d9a2cc310a5231e38e3d511e4afd70e6c650628d99bea079227c9b2779915070a5371d0b1084d35438490c4ba63bbfe02450116e2b6c6e859b3dd9ecae6380e62fd594b5e780575d593177aaafb49a74f33e3a228208b36dbe3d9a67041651bbde43d836798ee68659bb39424bb22a2b9be084b288da96baf543879e61f1ea76194b9296acf5a858a0b0fa1c637b968c84fe9825232940f3a719489baf3b749f4ab36ade6affc45a96d7643ee058072017621d833d3fd9a03b858466d43d16bfd84407159af26315a3fa1db2a891a56dbad3bcd4bd6288491b50e305ba3ff95d2bc612432417ac0f30dfcd80a56e97fdd6181d218bdb7577ae420f8247884401ab013270efb6c8d2a34f1daebd370658d4fae7718ff2c9b15c22ade465622033c0bd10a5e517dee66612b446da3319041a41c3cdb1eeac808dba6834fb13b57cd2c154eaed8117d1dff03c4fe3abf98b12b5583cd919456ba9d0e579f0e42a6349d6a545ef3e9b1d78b15ad2c0e7cd75231d4fc6efb9bdfa182dcfbb2e1da8718dc4abc0d4949151981cb8d6592fbe48b4434f73db173bb54399cc039c06562c06530f6282cc21f6a6fbfe6396cbf48e2fed014c857be82590db845822e75d1e1c4a7933e22d75930c14d4815f0296cefbe40c58d52cecd168bda1c2a807e4cf3873903cdc01b2b0312fe0399c1ecd9180f01aa0b4746e413405c84916af14c6c094fd84598e03d67d16cd923565c05e26d8d02a089996fe5a7ca3f65427158b1e7668133f1e8e8b58904195122098bd5566d800bbe48d8f44eadad04bb70ea6b8e177f278f77b5a2a64e4491b967c367560da2ab39d7b7c581715dfe1a727a0f89dd528ea61f3c85b5b60b639119552ee8f7daeda0c884e00cafb2cff3e8aff457128bd7fa61e5f533d5ae452d70a9828bb6a961679da8ca3cd34be8ec55c4e062619ba1d0d23a67bd27ddc4f3104918cac49ea512b9cbea8e6699e7484c812a5844f26aedd2a2539e16ea51967abc38029c1b0726bf46d79de42d29bc3f3d589537309195f5d65f634d84796c126b86dfc7af261810a207d7c6664e9ca081e1a5b2c6c46dbe2ed1b9161cbb0879ef8bceb1db706b5075f1c8a7e5b48e02d76c06423561d98e1450ec1b1384e003a09d3bf5208494e13b2bece31c09f4f8a64e335ffcf86e083f6398c7196587523751c3fc0ec129655a2cb12289ad55d4970eb9769df69f9ef8703b949edb52e80c4fd35106b49d3f6b6ab1c0af1d4538f224052098fae2c4e80d312e0464f737a7ce067e98dd64e1d77c7b480ce837987034a2e86e63dc1c86a135ddfa80d8c39272c9ff45ba14ff36b85a43238ca16569a72f389ecfe0084cc2a63ed1cd7c0e44c49a3d9dc921ea01c4eb3c7379173276f1e68b9aada31ab2e80ecb3a99559a4749f3b3f1892024b128ba8e8d3c0d9200bb756bf27b79b64187dc0d9572f9da0269631ce1887451dd3a24c3c15408e69f5a685426c7f87d81389a6062e8ed501ea964c2fe35b2d3de9fd676c04f7da2bb552bdeb7f183d2fa60c67e2379848ee4807530a81f403d3dc02c11fa8ce078ed422c6626a6c05905a6ecb1679364090c9510f06fb3c0e09321b21fe0aad5cb9d980674e35612723b6179a4afc51030ef4dc48cc5819980575af50b0317d20d54cd36a57e6e1ea12426f9c25c9cfda915210c504a075e7ef2c2517de25249c09b682952687d3988286df9950e79a0d4169565055dc3744f0e0e73c30ef8c187e9ef7b1631f1e779d0bcd58735e98e445c414af671347f730185c874d969bdb5b8c9985b6b7acd08b58a2a23537b3a7c6e8b3abe34d8d48d65cecc2de223b2fc908d0dbc55664ea74f5c73f3e79d19deb5f9c0c7192f07f0a34ffb38a9c535af09b04793b042e0f7f6ba2f7372cdc0fddb0369ab8eb5be3f629fd24fa0bcba5f7cc9d28bec9f285d4419d92c859bb45c363e81d615fb3bdbfc24fdbd6778b58072403b0f6ae98959cff1fd798075687c6001c5c13f7e15590885ba0c5e97abb472a9fd98dba0987ff2e8f8f503e951d0e10392077bacdf38f028a3d6f678216e066d76b28f62ba3245557829706604ec21ba73135b05fdfe4b844787dfc8ab0f960142d7268e73134fcde7816689f640ba7cd57f4e18060b832f21b97ad7bd2bba1bfe8101a267856ab8c39756b3aa5103e155a5c5616c033f9faec64843bc44eb03e64ad14cec1b3ebc98c5b18195afa67e60116160a457c94c6b48d88b3ced915fb69ef5cc8547243fd3b707525caf0aba815ca294538bc8bbc3ab9c1cb3884595cbf7efcfd79bd3c900c5d8d443f1b90c45f1f98aee11a67464891386c497903cb2d03fc5478b95cebc8ca655fffa2a0a0a4be6a2c87bfaecba4bdf47c4add9baf7d2662b498902e74375e075f53ae63a5af4fa7a973d2ebb317e4fde483dba970758e3807226a379420c27a2a8367603b4779570cee7ca36569ae5c8d3c98b676dee486345e6e01b34c9ec6aad7f41fcb33e4833d3ee5604b62c5185ebd3f49287fcf522394c5133a8499f4c5977e28bb3c393323ab34a9cccace393e4df6ebf022f8a6bc0c96f58f8e5b0a650a2c04752a206da87f9207506874c81736e523358d0689e70d0a301c328d137179273a5fc5403bb30026013f055cccd0be36796089a2048ce1494b483ad714d12c9652e3d442a42d78191f0269314d512e0e75d7de741d93ce7ace7a6ce0176d6ba2d46821cdb1fc2d92e9ff5c995482ce98a0035423dee41dc6411c9251232d7e734956728a680968bae89fa63ce74be5f9814cb3584f6716542d9572d141f9ac3039149021d33c70b8a34a0ec41194bd5ca11bc2ba7705004d1a4dd50978b93f022a0c4339fa7d8fb5a2695ed6d7459ce786d64af25ea425d88eac82a0d0557d10a6a5527ae3b50bd96e625c1d4346cbc2bae713a70c2dcb1e131a433f51b5af833447878e98ca2d4b8e9fd13e5c7f9216c5b4e5828a893b4630ffde8e04c11c825d5aa81a21a63d348a8684e42ad8380b2da7882bdf9ebd796ec31c34f0620e36a7467ec9842f83bbeb813fb5b63a07c87c26c349135698df53cec5da1d7ecbc69c74d140cb4f460938f7c859078b4576399b60842f98169f6988a12794fe9c5bc44a692afeedd045f950e87925b53b3ced6d2586394b7de2385a77c45ccbc91da6310d2d23f16798b7f367bd199e31431f04dbf43c5916cf47aa11587dcb9a33ca9287f14442542af84a0dccea306eb257c84a793da9298f1ee1358c00e857c6b8d39d1f68cadf2247bca24fa0513cb21e2139bb4623fe494568ac08ec0947fdf95e185f98704fa929b1eded44ebe16bfa7771625eafdc2645a53e734916b3011499bf58db1ceee62891b74fdde5a6047632bb178e350d4ea402b27620f6e3f991ee5cb339b60202cbc5c81c7327d3a617badd82dd9dd7e8ede6d2b878931f0ef9c4b517ba27d4249ab3e8fd0f99b07867779f4a53cf831ca5b964e259d4af68d282942d6755ac751ec4df9ab72385a3edd2cb17f8b4581456e2319bcba1da2ea792bf9d4729d21dde60749a76ad994e31312793d532a0f587cb018cd7e2ea89fd5bfe0e628b8d4363f071a6511f35a2bcfd7d64f132a1eac1db9c5c847f25a05e451b29c164260f33da9c655261a1c7159f9332549da5188b7ac9b4db61d49c51b8dc956b9ae5aad888bd80805b25e4c47d31a60759f2aa6d10523ce26e3ea45f1c0bfa6817123cda609e9ee3f60921520121671150d0c6ef05fd9ba38fade10ed96e02c1c1f5ecbfcc0668841894a746922a1e7a6889959ac2937a26ad677ae957ce537d82d6e31133bc856aaa0f9e289713734b8b643ef5addb8071aeb59875fff295a441fc4957fd899e9d95c22e817aa50d8ba0a8e9892f9f568e7cdf633c37a4713fe6b0451a91355b26bff57dd7a2a895428f9ec0dcb1a5a385fd2d02c568aa8e55583affe15988630c12f0b6b577e4b278408ee87899b6105c1be79e98fbcd96ee81e2a034bc4a5f5775faffa061200d369abf8ce5509a451dbc545e3e56d52e1248f0509b2242f610cf5d8022c8264e83877bd2a93f19e9d0cabd6b3ee38a00ca95ab369ff339d13e0a5f63c214bc1c68ef08e24ecdfba47b2c6aec2009b4b41d505c7bc798f798e90d49cd09adab1fecb8afe55c61072028caa30a6d2f1af214624b469c7744f219c063e87dfcba0017cbb80359650602de8cb0edacbf8561b6b1c0c0a5f9e887d70bf4dca867b367f1106b63cf40c1f5a65ad8bc6520bda90b2603116a86aa002ad646d112575cfb836f102e455afd9f871c65a020ba8a731ba95b60738753051b099fee41357f65d4d1ee8b441b85a889ba9dc066f5b467ef2312d54962ab3db18c485bbf67e24dec1c4ea353eb20b9b41cc945be39022c8e7a6e9a73817a51f447894114574e59d43a789efa32957a112b3056b1ee3d6b0098b8d4794a88e8ec23a9c8c66b8a349311b4a3c158ad92a7cd1c1cc67c2dcb4e6337aee4279daba206f2175f0d6084318b4ada31c530aa7eebd3be854b9af57fc5354e3a7f80421ddaaa5767a496f2b78f816cd1e1e6699f6e9e6576c34c909ba5f8dc06bafa5465851aaf6498f5252c04a38129159678113cc539224d0a45abeac981cd3fd38983f18a48e05045c698d4f640c2c70a7edc3f9061104f9ebcb57ef0641978d38b7e04414962364e7c04e6c3d223610824095d4706c833ce9cc448b5af71ccc1ff5ea889db73b1d7f07722515fd44959129f80314fd35f638ddd3060875ea367902cc4a8269a29aac9f970ea0e5ee9c5efa68f9765b83d25390a1e381667668be4ef3fe7515f068db092b8d40748a713632772c16fff33db4552fa8684147bf6a3af038e854ab1494d4be258731aed0d182811f79631ab4f5cbeac92f9ed4b707674f7e5e9e490a6472bd6be7a5d2279b3b4548102d50c4724541da49c7b3ec105470334a6b40c6b473a7d4e4398ad20dfd023a6da73be8c451e33049545bdb0f72f0fc2e3428e62f481bd50f753f8ca428666b0479329e66824d7fa0dd32e06f43503d8c9177c51f7077f0bbd176a3e84dd05e570beb51c356df2cd2caefa8ba660c7be80ba3f01f7d5acc8be6a6b464edee88e7e7bcaf853016ac6195d8a07b2b844bc2fb3403a9df12acf21d763a8488ff7f29853d0406be8292dfd684542c345601afe8be6c39165e3680fe3ba2d19fa1b5be7cd2fbd242a154aff5892037f10041f16c998667a39bddbb018d99d69273a0f92714f3727d0186448b4db148e2019149ff5c0e90073a26f2bfd26c0e21c3d57c2c798761be219c4ff04873b997d8541c098c515cc1d796da91a0a5e2ae30d7b9f587341a966ffb34dd1fe41483032eea2390fb2863e2a1d51f8ee3ee98490c350ab46617966b4775aa1a7ee424006636d600688d6df9cc74c1e3829c805b077fe487a9f32e91f584dffec0930b5ebe74895125e6207b9b3c11452e76e7054ded0b878c17cf828a04e70345cb998c8c45b619bfed5be6829d963a24085cc6441ef82a78f019ab795877ee8ad86f08440cf4b092ed50c9170bc9292fcb222c7e8822e6ed366d7b4811db06ec53ec509a4ccdcc4b70afa1cd1912988e29f79671bb245375356b707aa3b8e2f6c8a1f3e38799a34611e8ff29480b1eebbf4d92b22a74e69d87743995907a1936912070b43ff0fc1f3b6d4f901b3b12b4f584bfb4488d16b2a718250d5a97003867d84580f86c3d4377dcf1a5f4fb1a76674d5bfcb7d56a711ed7d15684a84e589749f0de2353dd3f3188a3ef87f39cac8f0825ffdb0668455933ad1581263a23b9e5f1305340528f0320d4b1269d2fc3c7357c42346886abd0ac36aee2897a364a4cc50c0aca339f6715e2bf63503a58ca55ed4846a45c113fb20ca72b5a84fcc2deead5ac59f70cd7d87c4ec0c552d7e309e786a4224f21d0d57d72ce01c0d3ae2ce121da682343cff90003b164ffcdbb91f991bf6ad63a4e9727b63d27d47786a73684f78d4ec0c9f7fc52d7a797a6aebea1de0af687d6f36789c61b252644c6fe59539621b0205045efd08615b10f56b06ee0195dea8489d72246ca924cc7f962d83238de1ddefd7348f15f27e2442e47bf2c6cf964df5c667facddf7ae6d98952185420ade592bf0a639c5669201bfc5213778618d23f585f06cc7bdc1c21f05c3e16440882b665e761e5b4a46a465b92375be1eda1eefc6330b0a6d2d5217254dcaf21791c2270d3713735b86c8baa4348bb099c20ca597960c387e57a9fb841da68de881b9f89d77bdc012c8cb4916d2ddf25adb99a18ac7e4b479c71646a2b1f89a4bde7f558f9671a3f883487b719ce0f5ea9d328e00172910d8023382f1a955a9aa1e8ec84431d3a1755cbcec54f1393dc17d53a5a8224dd0218f8e2af172323e9bb874bb6bd8583b219b94f6215e4b2c67f29992d367d774dec592c9329b12bb8932adc956e883f385f65d3377529b64469360d022563a61884acdc835928bb30b23b65ca5e0cb4d1ac3921ec76cae5805e645e8158bfb388695abb26ae6e1b799f20affc95fa2ca38a9c032820af889fe51b5351d67ae6c722cc9125306c93bae24382d41c3bedd980f63f937cc1e6cc87c3b51ba77a87fd37692627e70a6b1b040aa6fafab53f9917b09ed691e6492dcbc44c86d4a9de51309841d5dc31eac58cdfe21537526c0bd530e8996807f7ea3987e03b64ee33ec96c3acd716c759e00229ffcddcf9bb5945dfe583070d392c597239e15f30cdf6f1512dd49db50093ef4fc6ccef9273a8ec255c3d78de571bb4ee1e21ce59f596c7aa8d757ae42707dabbfcb77b04dd23546b176fc36499ded16459a3b850f3f4a2369361b43b16644bd46c39853941ef0417dcc0ee85479e383ab00e25fd0f39095c094053a114d1ca02ddf81718e737849374d8032ba88272daec0b1d48918d8587b5bc60006b76e0ad169c388916215d45a760093d05b306aad541a919c0179d1c617be13f617c143de0cef17417d516973c0009a3a6587c143259d058e500d984d325e1463f0bef1a033649c1337c37f0fd5f0a45d39a5d7ecdfa9bed486fc127d46365fd4d4af8ad477b4859af3e48b7b026140bd4a130526ccd10c0318dde6d2bdd774cd262b75c7445f622d642d2561efc2fddf0947df7d8793abae882b7bfa23a1e1b187bb490513e5c05efb15d340f8a64a3719bcdd5d9a71ec1b475d483ff22635265bb78b2a70c81ea41b26fb94b78ba459de0a65436ffc6bedf8ebe230b3f4cd9024d8a283e576dba156e924d996d3aabbd8893dcb928399aaff7fc058e36e4983757725cdec8295bb30d4d58c211ebbd18be19d528cb7f3b6dd5169350b230774b02b9b44f06bcb763b628428f0dd564f8a8c2a74c8fa18b6053953318593a5f8875e69a58ba2eb56d91ac73c5090086a36e15baed1da671d296004fafd3093634d98175c38c883c18c760542fac750c62399a77d31c96d409c9df4edec9a5e6985512ad5623d136ae80cd4b949f3bdf7d31da44c535799e4e12bb986be31755fc1222aada28118a75e379c1bb8a5ae53c7d5c8a8c1058b6e9991a951ec8666da73738d316425020b619ee1f6d13db08e746a8b2f0543a04228787adc1219a14e3eddd92d41a97e0b849b4cb72e5c52fc5b34722b9aa2870410487481a95bc34f65c984eda58edb2c59c512f92a620421fedc044afb929e28d37a4cef3cdd2b429abf170f1a35b7e233a4fb195fff4283d1b9b7f9a2a45424f4965a71270e77cc403705ee1a3e82c1b4a36bb42974acb6766613a41a48478d062523b3f2700740f8b9e8172019ca4f5f58cb462172912e5f699df6dd0ef6c55a8f4f2449a2784526c02416c657fcef962db04bd269ae5fef2cbd5e6558d072946d235e8706394d4cd250796769a926fbaaa121b6da42cfc82808474dd672f9362756af252bd8cded78d39b9ddf4d99e24824844934fcf25d03e54df0d83cdda2563fb2be73b54b8b1c4419d429589cfc9ea0dff41a3b7c20190adee8febca47b6264e5bd8e8d4aa8552850a4b868c4ad06ac9161fa9ca1a40fbf76b0ba70c223d46cd4accc9f5fc78bd6fc8a3cec857628ae54fd468f177b3099a1c28bd7db3e449debf6ce89df5b48f659ef075273ea7d3c77309e8151f8241fec98f370441d1b9eb83604cb5de614fd156db849046c6ccd84a65321c5bd62b8b3ce81c88162c1d5b5f4ffd26ffa6861ab60b02eab8e8fe809b914df073d750aa3cda75f3781efe9618e104d6a0acbba88729f71fdc34ef2830344177afac37c1900d492cb0cfe30479bf68af099b76e390dc6c16fad32936cff7179b577e693a012aa01b0566540d49913198829a40339bcd67b75aec34144182d642b2746c7b57d983a8c10bd9194ffe677852d19f006ea3f3ea44a896284d7c865609b7caee5ac1f8bb2ae8fb9054af1339c2691db2d3071597ff2fd9dcbd8e30bea46e0af9d18b0a3c8a2241da204c3dc21a8a42b18fa1d7a6d4a88497585fdb62cbc2b50686debe1327e4345f7b7cebfba25b95656d1840ff0b3b20c0e5988f2ac6db527c3f631e284a545a872de727cca1059e373415588bec1234c12de054fedce069c3c5c231633a9a3ebbfd36f81d61afe58dab3f2830be524801f8e033c657f98343e0a2ffad41df6561b51167d62882f3d09c3fb7d7cb26e5e80d3f336a7d50276357ab91eca54b59e31b1f7adf3fa64f69cdbc0e6959b492de36a65dd2970add8ef486ee0aaf05a1a7f8093b20ee4281be065f33ccb124d74b39bdb7e7ec522d297ddb1eeda736c5171376b2827c7f123911d030ea1b9f3c97df2b4c8fc64ea09dbb512a7fd5054d99360fe6eb33848941b5b60da9de4d4a2af09921b36b26bd52769119a6809bc297277cdf44597a6e3db9b9d0f34455886d34ae403c24030cb07643f34cf21fac78af64a57637884a97e68283af93df7ec67313b010390d1620820ec15871ba91a49670416815d7a3b604b92dc51415b59e746f7919f26b6208649a8ab24694fb83a447ba013b8e0402db06d71c0f1db45e006ba43d974679d1e2905642b9d4717da191182bf0d6f2e3320f889ecc1f036cdfaf37666fc5e1e4c5982df011a37cfa54f863cd7dd7f7c1d27f483292442b32d9e23d7bc31124a7d45918a49828a3628622a4ce2ab89a0484fc1fc0abb3b316b5acbb64db51c984d97c1e46948c6e1dffb7e3183fa264140e2e16315d9523823db7bb09ffae59e29aa848be4ef665938760269204bcdb5a38bf346bf11204dd37a8445277505b29e1869df40e8f112ce6c57724c12f893ccc548257af51dd8f6c2a5f278a5e57c074be25d01c7ef951e38dddb6bd22f623909806ddde7b3600a4e313708200d6111bf7e83bbfeca5684860613041bea8784e30cae6c7b79798a77b6815a5605f83a0d9ef1b40019edbdbe8097a952a29a1ccc7d658b32e89bf3c9b66fe3ca37a7eca0e415ae7e46b1065cadf7d018f0108d303301de80893dd2deb16138ef4af6a603be6defcbe9471adb1eb1fcd15b6132a8ce21baf6c3e5a40127f3de57987b02b0be791c7b6a2647d43344940e3d22c9b0bf43c4f82119e3eb9a962875a89b6f3234b5990f51c539b28c2e4a322ddbaec286c6612739411ee879d6bbdc03ee57f2e1a209ea38aa5d0099dd63ef95d25e68a54833e674f1b1a256241cfd32ca599d25ccd3ae774c2e48ece095991dcd451dab37a1c85cb25883a00ca05badd5f07b71a48ace963129f5e5c633c12e131f5bf9233f4f68f95016f80f0a79ed97992865c793cd2dffdc9224fce2fa3f5a399e2f8960ee223d54d6ce99afca6a65d02e7284832ca6eeb2981af31796c9f9207eaed8bb170104b34d843b04dfbce711f81889dd5f89a44882485736396676605807afa26c8dd617e5b9719e2c4d91fb1fd83606e85ea70aeb2d87e3549d5885c4ca5cbb613127ef29eecbf032a4dce7f0221794598e6d763d4b13937ac725ed4f578e6a67938095a494a89f855b4e552396bd0a25a17e16f32178cb0e8c5513424fb334121d66c7c04b95f086c95cef24a684dcdf304f79973125fea2456ca4680359bce34740e207542297d9779f027dc21d90d8a367faa40aa9a2b89ae2fd0b22e0494d99a571047eccf9d00e7b3b9979c5aac4733e36b40e826bc3f54e99b61ee58dc39d1af1320c03ab1cc677f6f25e3baf0538589a11cd3e9e56dd0616f367e7dee7ba07ef0a9c450002681bc122bfedf22d6b3db177b74cced3cabfe13d9e55d12c9902c708902fad434bed26a54f3b389f7463f9406d1b71ed36c2751f12bde904828215b688221731ea52a3f45cc1c6fdfc51fdf65f493be5b9b46ef2659eaaf22f0c679f04bab260dbf2a59a991041ab6b8e2c13fe54616fbc1c2b6227568b97f708191c764823529923b80264852d3a3a8f0023caaba6edc65036e8a8a3ff48631bb6d95d88ce899a8c67b64fbeee2ce1cb16a054dd50e250f71df099d59a960baddd303acb387868931130cb1bf8f609c8dc042d6813dff4774d045b89d1f34934d8cb8eadd5917bbe510c673af2281b0ecce9a4ba5449296740be6e2f3a02b4575605d9af4a775c84b3a3948a5e258e1365ab6b6296b0583d956952443726d57bc169ac2dfb9c738ca580e388a190eb6d32d3e1ef4fa80970b7afa8575de21518978166c86d73691c934ed4b440dcab82b0fd98cf0392d58723fbc0d722c70bc464c7a9fd149ea5db2947c8abc06b56da6c82f0704703250766c83c420a4811e5a5b6d64a8560a23ec4166fcda4ef75fad1fe99718e6b70780cbf9b3688e7d022d6d98c2f348be6cdf0351a9872cb716a6ddaf4415e4e504f622c4e132318bed274aa3c19a6530bff3a1e69aa9e71d19fbca2817e1b2e3cf423a8c5667d6d469b0b9356985f685a490e5ccd629c853f012aefd176598daf0cadbfa1bedc57ffd3083f6c39d42e8a31e95ab65f0177e235551d64d89def2eff8ccb537ae46b5320f7090d6c8937f45057a2d50e51cc93a2a7b59bf36cb525533d766b291a19e8eb548a8aaef2f7211ad5cf89eef1e5abefbf3317752a823aae2c2b5957d1d619b8ad3e948fb5fea907f03b457f86759372f82047dc6bd8c746f5649e75c0327e1f7d9f8b7d26b0f48e1360a84e73def2b2ef07bd77b52b63d415bcbb0159b17e7622180ff5e9b08c33cbfa12ca4e9442460053d8f58afc98cc099e2f8902d5a35347427298537fe89f964235716b27fa92d88f3ad441cecea54d837c8b5011753d69a953c318618207eee350d27e2c843fd43443729e047de65df72276c5f77caae5b734049d17f1235248157bec0497838fcd937ee4403f05b773a1e9d8ea220267f693eb5605ae784d0af3cc39327d3467c59b47b9048a89e6837b430d7bfe0a5cd1e3c5d7bd225d5b867c51fa48dd98f8b6db7b80c3d8f967a12f10d82f68f920e3b45296a0f568fa550f9b83ba1147cf0bd478dff0b2cac7473dd1cd771b7570a675e017438011a6012e0779f8b0b7375f06ce2b3d90746200181461d55df5b894b91cde375afdeae5682441a7446dde0ae2e9f6ed0a9ce4465e4719ecd9006538fe575fdf0e7435ac4e808f2844e23faa196ac791899aaa9470e86a0fe51c02fda63e10bce31b12a0319a970e2aaab8b6fabf11cd85f44174d086e6c13aaf1e7d411f9543a1590e8bc1d11dcb7e2df5bc076569e3984025622d90f4a3223014126f9a6225a1c485a96fd267e2a7f26313dfdc449628f4e2d6c895381844559067823cebb56cd41493ac0d29d6408e7d78d4a21637b088f65d421215b30975ffe71955a6857b1e37c4f6efc838c058c1359655735ae782cc601a8601e5ea27cf0ba593371854e97bd7e108c76cbfe7cae49544c0721668f189c26fa1338ec18a5fb773f1e072fc3d26fac69bf497c1f700421ea21fc5a1f234ca4d682e3ff9ce6dbf568b706d9d184c94d7da62d06dd2033d417ca68dc44afba28dcb38a636e7902dd9583a9d6279b34f8af72a0251e887d73bd4b8d7566838dbdf4ed539ef8261937aecb19ac2fdf5ab7e76dc9604a6e8b08c3ec92aced686e68067a663aa1b7c8099ad77de64f18e0910dddd13fc99b049a11f59f0a42260533faa0ecbfd0f2b65d43effe09f10d718f0a0bdf4a03d791328faede16cb85f925b8a80db3efa18c3a905bc49f7c87b3b7c43f1c0a61e9dad7255f7558f14df34629daf0a0658af1a96962f630584e4e1324c1af06499b8691bb4f8c581c459a9f337dbe0d9a768eb0b64ebc42ec2aebab12d8c1c624b33e6839c74c9fb5369737bfdb9e83f62c0b5a5f653f5fa2e3328577cd7ad35bfaa965870fdcb422e89117b63ab989e1760fac4df0a70ee140caab39e801b45438708f8d6f651fcd233145fee337a7c31a42b066361cd8120a5c2542717ff179353aef342f0f691caf1fcb811e3f6504e14d6d9381c5439b098ff978b01b1331b8b08b62960119795302b12532f94c0c93d8ebbd17cad9e5050c31c5edfea1e38b7a6d00ed64b74bd882fdd4698ee343f88a33ca41542258c67ad5106f4f23f9743f9df77c5fcbfa0748b9750926b212d70c4ca4478ba55c1382eb417f3722da3ca7212d8b1bdeeea6fcecf05be842dffa053e317196ea5ab6cc7d3f65de25eeab5c038c62c0778e7d469f2da7fd1a13271e125b079d79b875ff92f4696bb49d88034bfb49751f4456ccd913358dc31727ffcf0850cadbe019c33347d307574f9d47ff6187625d78f739a28c4cbfc352c24f7d22954397386ac26720ead9976cb0cd29a865b0b9902933028035bba42bbfb725901e30352a2fa13667f70afb5c8a40d0b72b87bbf5b46202d539aaed0ce8decd3a33ba3d1d320ba80442c10c87f346fd76210eec0f6070a9749eb4275c036d80081c09387939a6c6e013275056b287b7cd8e6ed346f5020045ac00d982d90b43e22044aea50d1a97e1b264512f91ad06a4bccef9033ac30d30adb78be8326120b08993250b761023f0669f977b565df2e3f157e4acf858da1ee700c6f5d6161e5a9d1f27123b3073f67900a8a3ca41847276311eabf76c6ff5a30410118cd345c8a5103b2226218ed931b00e0db501c33993832f66ffa5d29f29eaf4a41d409ee3e88eeaa3fd8c7c83d7d75123df45b8218f759d47d8ab0d02c1dbf71652043091b0c0bafd891846dab29cf74c0fb46910b431f2b449272808b3ffa3d0f1c804bb43ce3599926ef3c80c288aef0ff6e0ef48dcb5171cc12998467d7f38c233204aeae1e3dde0358b342ba39276a5b425a794a16fd717201a99c47e13b78fee8e24ed214b323a161705583495489a963e1ee0a6a75c03ed02f57329e8b61ea0563394b5f50169b99e25db031dcdb543353e7413e50ea7cfea939ca7859b38f27e5d27c569b036c5287bfc39b16dc06412ee9711b255cd6fd95b861f72cfa58c108ced7b30a966e3beef03feda9081a0db1592c894993b74d7357bba38bb2d1513a72ffdd152c4ba666937791e9ec2a09a9dad5f1542ba87ed09c1a05ec6983690963573d41517f32ad1e2d308ff490b566d30febdb8125021bfa1f86c57ad968e414706c2592635120f4a331d1bde8a186d63cf13630b767d3f63eaebd835de1590addd2185ba29250cb7c2e75b4bc5e7858ef79fac6da209714fa062b0f9b52e6bae22]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 723cb1b8671304e99ea4507897a083bc27059f726732ad2d36fd199601085567

tcltest::test Hash_SHAKE256-3.83 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex d1dbac1a1d5e2fad52319cf50c96fd6930e70f5d162d8d31eeefb1c85c48f93b663c27cf904c8b25454884b17965456d8d90d5cf730159f81212962eec52b28cfed53af8e7cf6a564d61a8fb7db351655143b829577d6c2c2f8bba16356e7304614ef07e6b0e52a832240ebc5ea8aab744aac1530bc94d360d01266980c5c50b564e4e476132ce83bb38c0da656bd7cd2e6df735d70e847c741de00d157f2f09a67d5e3c1462634fb246c63fda25600ed73463b802749a682c87f2ec3cc33a6619852745cbc79b74ddf526d105fdcee107a60bc2d6221661fce663ed3db96c8b770bb14bcd89fd5a04eeea7a2d1ca7b0856bf93c994180ceaee33cf75f8a50de88ba053463cf116af1d91a219ca976e21a2c350f94f86119082584f4ec5e6bc814372aead5c1600a6b5dbcae98cdc0df8e91c5210f7040a9d35543cb2a5c47b2e22d28536b8971a33922da086ab00f0ea941b35c52d0a5e6d61a826462ad6b02bb4208596d4ccc9e24d17b195a79ead932e507a7a4411838db1d48a7db785f22671ed1e32235fa61f412a8c8af51daa7f324c7e94feb2207a8059d7cdfe6ac78ae6a8bd8d3698256718c68fdb35f66e1b2a7fd0c99f54abb077b89cbb41fd96e58ce3e22c813ece462e8c3a0accc16ed3815b0f7cb8819bcbd27157ca34a6e6a2cf1f3a84959c17291cdc19ae3bf72344d17e9922ccb167395b04877f490f3d6f37cb2529e63886ac4e46bd1a061031eb855afc506e7c94656bf2ba4ef18f119751681080e5ac933c4d5c82e2bd9501443760a789f03ba9ec7fbc4ebdc0bf09b7a686ab2e2660d355947e099cb50e17cb4230293414872e4b20d1d35029076c4ca1a743863aedad84ae2bcfbc9ee3fbfd403a0fe32de787edd9c3e68aad00dfc2cd3a782d65bbb84614f633a6ddaf1466bbfeba2baec54d610512d6e1cf23cab6a3b0c79869435a16436dd40ff3d7f7841feec65239a8f5215d4f42da01f8c394afbaa03ba82d2971c3e33f3c73e72bc1d69a930b312b05cb3cc9b8f7e7f830e95bb8a09b94d19ce51106c3d0d06517cc9a72cecb4793f5bb1e1287bfd39ab921222b274cc1c92afcb54900518bca41f0b617d7f6cfac4b7d8bca5d866768c2e8bd92c2a3b17c6a051b1a8333189f40dac3fa2d324bac8d7f0051990015dac48c68800154e683c0aadcfbbaea095c7ad74e8a5ce23e4d325c1638d8a1617954a8dd6341c4d347c56a557d160ad07a8692a058d5ab39e6b08127f08aeedcbcf9aa66bd2267fa60fea02f1f230a0081ca8983d635e1a101ae8ac0192e4cea2e0a2d9f0e11d2de37c308b442706c0bfadd384392ec1a164672e5890331400c452c8f00d6ae89f164b8e0af977ca5655e250b7a1f66d90bfda40dcd4f426cc58ad76b169746f1d65056e45b7eb64aaf14388f91cc4492f4bfc870077dc027a867713e6ad079aeff8313706278abd04bc59e311529f3dc530546b8e1ef49152783a0755802b515cf8575113f15cbbacdeabcac9ec8f319c966b554c7343b99b537db9c78be97cad8d002434bc6947e97ec2a3e7929c0dfaa4c7ab041ed1639f42c993037648032bdeb3183330ba4a05c424d734ebcfb92882f2d67cc7a678a46ba5fcd3e851ce1b14f895d7f656aa46d95bcf78a02f1e6e59743f7d15cbdef3f6995cfd890bc5c8565703e7b64551f5e5eff27b58c4221351d34dceb0477fd40c2d1c4a027ed179cd59ca2c179025590f66a704bc97ae61919967394122418ed5eaa282fbb2d875a185526ec23e10bc804a58dd74afab9e424df78470640e6b7857576d1bb0c305f96303745f57f96460226ccc2715ff138b786478e416cdb11dfda3d20b7f7b71fd7c460895e4c79ad6774b9a7dcf940895a116dd464066a9ee62ef7b7327e701d75781f00ceb64a60ad05d0f20e750c58750757b3de8c09b1010a12ef9b1eefdac7d1ef56d77b7d025b509f2b5641d918a0ee9197218c5cfae8f23b448247aaca77483df608da8604faeba0de74fe2b6c661da818cd75c8cee65dbd506887257edc61a768c371f9daf44d5265baf877a62d4b079342e6d1cf81c3358dce5bd46a9fa49829a7c04d16efec306bc8cf32687ecd3ca1223e1c5f53c9107714445c101997aca31653f42b365ec75b0ef10015c33ab3ccdc19ed00d4b5fa86eacf1101d2a1417faf8b938a7ffb83adfdfc5550a30a1960e0d8d8567d304047a26a97a26357f319d3f58fd7257901ff364fa68b86b1ba27c11962b2c5be8e33eb95548444322e0c14205d83bf2daea918697848f6d8226c0d4a20b836c730d616ddec39edb67ec0e08a9102a5aff64634e85efb7bd3feb815e976e958d0d498c4a2a305d85b51c2e992aee6916685511c3aaf157e3b8b968b85f9a8a461e60675922daa8c97539c6fd72ba1dae7c8543edefd4976857571de9e0d8891f0e1b99a1ae08a8300d0b813c67bc71aaa2bba0d53cdea0d3838f47f9046fbaa14540cb2ab7018541e65a045ff33b8b9344c1d0827a599aaca3278ef1b1a946532c97a4fd230e668568eefa6efd8193f1c95d7cfc8f8bad7c21e89cd8d1cc55bd29eacd21dc777382fb8f096f6cd4b24a99584c4c65bdffc9649a16b64b210e68a5ffed9ec884d6c20804d96c2a7d0f281c79e779e336bb1ed405a79307f09adb099fad7dd17db4cdf516136c1ec3d412ba8af68bf0400700d9f0f578ed81219ebb92b5c5dea938292c8d5f7830f02691db51208b76210bf9db25a86ce51bca3a25a0ac7ed651876013316497484b2f2ce7980e805c22f190426a6978d707bd36ad913bb1a3bdccfa14c9cbd14e1b176b462567728a8bde4e7688e0a3ab8e231abd2c09652c352d7d961f3b2e2aa906d660c0d46ae7a4fcb9df47b4f549f6246fbc3abfa25901d27301f95db7c53d23f69d33fd6e5db4735be66e8d769987e7bc128304701268e463bc20d973051e965266458989d3056bbcf1c7152f848b958926cf81d83fb38bd6315c566bd396887221bd21c032dd0b626a18f127f048555f62e6dde1c82bee53c7747ca518eb21df38646c1d60857bd7b72acc66c70750c42d90c19495153662e632f52bba668820110213a74645e4a342c54cf5ef10ad43ef94d5f78fbc8a8bf65c6605a34fe6bd165fbd66cc646e4c71b019db52ab956111bbc0159c6713575fbb7a39b9ee623fad421363db2c405caeb5dc20d62030a8f9cd2bf3a55df94d8a17d7d1e68a252d4074bca559e3835b609a3dcd65b6a59f1092bd9b93e763f6dd3825d4106d560f36be613430d25ecfee28e3e9e6b71dcebed11f144c4d79d8c1e50d4b21dd1e6ef7e6aa194641fa42c227777c4069bfbe6c54f866bad7657d9fe8363d0023a5d0ebb43e5b85787e3b435fa08f5d15b4f680e1f19ac4cd4c6ddd074ab2958712c07af2c602d3be1343d9980728240223fe6441b2b65176592ee50beeb3c8508dc30c66e9171a5de1e1ec9954527d7a355f7e3ce2c54b1bb14a1dbbcc4681c8406309d950a1419b0f9de42b2e1250c312a0389929cc99047f49efe18c76a8355127d914a3a830c1c6ff2a163d728526e149f92231d52379e9b1c243d64825e0e897e4dc8935cf162d9024222a7905ebcbe3289d9fe7d1c2170cfdab50c6e0112e3c92fcaa4e06e46dd73b169d2fb65af7f52fd31e0b8b2632e10adfa5f7c2104a9d4c3aaffebd71ad5cd7bc3d9d81bb8d07758c544839ee62b950a77be3b12465437860404adc0716a861dab3ca4e55b7a1628fe9a6c363ce1b37cd7b939696a7b48034043c4becd0423f39a6bf06719b4c5ea6862d11ca9f8f27174c0e5aae377aca7fa4dbf26802b2dba1bf828f57618fd197d3e60b6efc9d884f965ce3b43e1dc008c72fb9c5d4819cdaa61dd34f32f3232b77d89a960ecec23b03861bf0e323c899164189496f36e9ab0297b9a136ffbc2a1b0ba489fda93da43993e9aa4f164cf83918483efb592cdd7cf92894943b055c66881290f0b76251e08b3429a97db3eed7bce0ea9f73cc38bb4a0a71752f64890156cdf30f7e970ca177e6b61ae1654398363796840b31846892468000644278937dbcfa8388459b245ee699cac9cabf268d3789d2a9c3892adac4095e6108f2c506c6ed745dd5c710481c1ae0bd4a2a26c9c70db0d5ea0faa296c54b6ae1cbf3ff8d5130983ad580d3d708185454d4b43f3ce6846180edd8f8726a931d4e8a7a85bd0b56b843716c546ca15e0ea3beb231236e3bdf997bc82fcda4ff75ad272a8389e1bc2e8dac9dd6a121f1a337cd26e2ee6c63d01ed742b91708f2fc844e7e996298d3535fd3800b230e75aa978c8cd50c659edb678cd314dd0b101a7a5cf107d5853ecf50a2cd4240cb5c9d29795e77ebee4f6a2a08f3d39e2fd967d5df2c8f513b410af686d01cb8fd18f39420066c2b6ae804dce81f65b8fba16d5d418b70742f9c9ec7fc330ac9f82d363dfd3ef249600b23e686c05bdbd32a934710985bace6b3e33b7f609d12512bddad8d42dab4622b4fdd818116755ab75249e8cdb179d4f980c78cd33410ac7762593ccc55fae5caf12844dc35f406ea52cc36b612498f0feff2a11570434ea26cc7a826248b7f6cb06d6d3c3af64c35fd5466cbeeba7959995358a1c238dc2f457f3c0aa6f47372f5f3471b85fabf1cba590589a74b385915501002ba5fc99094f684c45db476804a808f14a75fc42132609f69fc5a2090dc8f63b2b9268b58d3c40efdc94a0d17166b91922fb3efc5ce0191073e85e6935747d02c5f2bb5fa7a4e37117a338ba9f23afb2e8f85b68d15a296cbee5cded32e3fc1fa1cedcdf7f11b99a9d0ff96bb566528344753ace971c9fd429c2d9dd2c9ddd58662db37d3e0a2a3217e0ca2bdcb80a56dc79c376d9aee50d5b8969804a288676bc1828810c189e002c1f92443ca03ff15b0cdea7bd9961e2fd42641fb50e61414d96233210c17dcd85d33bfcfca6591d673673ab6b647d1ab7f3b40295d7d480beaf8cda73902f61c904ac9c4552c0a2a8006ac80c97a07c30a64071110949fdba6b4bbf5c0a1c84a1bacd6b3e2ddc48c871ab47c8ba31d21162f0b4512e277ee7d34829f4b9acfeb5fe86b310be16d76c921f70c6569ae20130ac127ecdd6ccedee6c6263244896acd7bfbae28dd4163e69ac8a2ff24275a9175cd5c06fbeaf75c59db1d0d356162f4e60cadd237fcee6013bdf2a179152b11fe8433e9b47ee275ec45d634f4044e56a5129280780c70c5fb5b5e04cef43c05038a521d9d953aac3caaf461f6ce877337a1fedc13dc9578d00557919c40e7eb3354290b1dca4a7fc95ef9ecb44cc8cb1c4f651da209c6f9206071c06787c954fc564b4acb8aac50f0f6596dc2eb7cded15f47ed99007fd76ad12f19c7355aa2cd151b551d52dad061f5853d99470e1ee57639c46f5d4a941dfc021621e6168534252ba299bf506e8ac12004addc072bc7089d2aab6c91afc8357d4e1df6774cbfeafebbb73c979bea0d9c3b7716f25604aaf498c3daff9af8120319f1f31799cefb0718fc372ae8fe2f6c4a9b845a4e1cb1c2974f14ded60c163612647851dcffc9d742df4b94c635ab12ca81a0a9747dd1a99ea3a6d9f192a688cfebd2c086b0cbd1b1e6f64fc43f051233aff85a59b67efc17780d5b6e1a676d8adebeee37809598fe99b3b65358c20d0e9cf7f77e450e4caa22b4edbc11dd670bd379256ffdab9f816df08304416645c3cf2c0b52a8241dcf4a3a0b6bf75d17ab60be2080667257d2da59104757666efbbd0100675e44e1ef45193eee697ad1f1ecea4a29898e546b7549f8ad2946eafefd13712ce5e53b92a9bef2c3b6bb2867fe8a1cbba55407c3c53fa696258c3c75f5efc823cd897d51eea7b17c8d92ad860c1a12c76868047420c6a4a2dabaf5d94dd28fec83a639859a7005894ca5b3c4ac16c6dd313ebce53e6b7d53c73789a14b8832d796cff2d62384696a7248edbc450c935dae4ca3af649a8b1969a67a56955d5b85757b3bac107157a0ad10cdc56d6812c91e164b2b49d07874306c4a71a1ee6466ae1c768ff7a35acc4b71a6888bb5cfb02f3035f134b9afe4ca1d7c7b0797e80bbf3825ea3fb6dd3ddc003a7e367224a3500ed699db92abfb851e72eb2d0640e51762dc535f187975ed30dc0ee429bc030f16bf7da507e718f003e03a88a6197345010c43dc449a24ed782dc31b58f06fdafc531517860bdda95226f1b0f3dc36d6b738444db7c99b5b6a8223526c5c4a42143408a9a964ba0f8dc9a92c7c03c03ad9e2cd1a0e8279b57c8bb81fe06a12b2e2d4c0d1ce9c2e911b4ab951ab1a7fe00d8e56d7a54f209a229ce9ea61a459cc0ca7c636821cbbdc8f1caac70daaf674b6bd79fd189a2067f15841284c959febe63f913e4060d2505dd21603101fa45769d29ef0e50e09bd6d2056702db855a0f40eba5fa5f3128b0bed538c5ef30a068b704e5976f54cf8fa97824871770b79da979a111f6decfb1dd11bd946cfa800b008f0ad5aea5aa92e205d27a46c31d4fe6cb909091bd21f082fb75074000ee46c2f3e530d77b34c7c5d6f8453025950d3e0afae1f9752655f5bbea8432e9f1014357ff11b08076179a101e4f9d3f25bffb5e656bf6afe6c97d7aa4740b5d9224cde4dede035a7768a8decd0055b9d84d63ee5b9650136a3263602a409306d898a6c10c0196b13fa438668bc01f3ab3a0bfe363cace48b97af094034e9289cb43161811e0312ed7b192d0e3f7c56ac09e5664066f39f7db87693fba08d091730e670e73e59e784679fe455a0d0df20630729acaed59c7d9431988d4d514c4d9e1dfcdbc76a43894e2c4ed7a6ac07a8d3f59ad3aadf661ba944798db1c28ca04a5c87d73fd0a16cad62befca77a6a95eb154c4db15d86c86643a965747d24cfc40684521e199b9ef3c7c73d29a86288070ab07378ec691459a3babcebddbf2ca9c084e4d8a19ca0bfb00a31b3c299efb62a69fd5818a78001e92ffcae60b6375a0efc07f6052f027fdfca52cc658b4d8718db43d54eac8bfd887b9d22a2948053367c240cb0bd44929bba18d9ed9121e84a76df871af2a88b062026ff1ff48833fb67c16330e1e7c6784c0c72e745fd5823df38d3ea145658e6a0127a3530cf6ab25178c002175c59f9e2961ddf3440555976e842587c25d5ae8df85a8ee3b665ffcbb279a0d812eb95206e3121c68b7e4fd05668c2a4878fc24c30e68987edb42838f716999ebbe9ee87cd637b974f317b7e0b9dd5380bf5c66d64c4c187d5e3e02bcf1d68f5b7d34a8b5c1b3900fbfd60c28087fc8113962f63fc6ba38dff63ac0692f47b5787464d9d92cee6ae225094605d8da52a5eff71b27041bbe4dac1f06bfb425d5ebaa17c50f9f500e942c98ab9eb356b8e1e7011fb68fd8736e87d31ce607d9b55b2733b280a34146cedc6b841c205bc46f2b694813ee571feb8f3f4a05b0c91e71f4a1e954bf29d8383e6b18a6a8513cf7c318df67a9028a6bcc4bd845385fd7d5184ab2b27c708d79597eb165d1a0e920b5f52bd949407b9747e00dcd2602aa2e9b1554c2617e2d3a368d958126b093930be776925578bc1707e432c602195d2586e919aef6bb8022db810d212cea01f8cdd806ba5514139214418f57550eb961e0b0479bc3904dda5240616d6db4fdf601af2578d17b49b077dd6ca9a548868bb15127b351635e09a3b4d98e70774d35b15419f45215261a37a211e37d2f8c4a02b4011e279d7958d4c3bdacbd9cba5ee4ae2a575f4a71785c76c52e622b9247dac11d04cda7676fef5754eedd890c19a3a7a2c98182f471ef43d2b2dea462294160c28ccce7f0f5fb57e77d57a80b0df526c7713f2575aef6f07e967802c2993f793adeabc7db9301abbe81b3607fe3e214e378219bbdd77c651203b9ad7b3fddf4cb23f2aef2f0083b21217a182f4272573c05af4c9493868ad520270e55c222b9be832a04fbb518ef5885333ae4d3aed81a4172a1c18a1e4711164c8b17cb17b05b25da30bf8939afaad6662d663e9d7fc754f1000e654b840c0cb08d8b01c2c2e9328a9c06157463613c9b597d2a47358a65b4d241cc1629102bd97d770d2dd5b2d1c2af9800d0f3c3de5b26f13fb5e0aa9c44802366851e639a51c1a49660d2fc2b0bd13cf3564719e52dfc8926ee69702228707cdca34b4d82a0c3da4561a21068ec6abc960d47aa789a430e87fab9241fe80c14d57598180b4ce9e0c23a2b36afeee2de90fddcc0c029634909e2b70eba0dbbb2fa05ee0a5cdf9d80b4f357b52897a26b8a2eeca1e562c4ff55ad4a751c1ee420f35a336d9ee14680c3920dd7fc72102a2ba960960ecdcefb13635ca36da3f124677c5187f8d84ba9982135e2530495e51c7521e763f3ea04ea0dd4ded4254987ff742ea1934e16c3dba7b61f54d79a62049a16dc0d5b7ee182b2996f792b54106249b40297ca0e96342d7ad62872856a8c2126bd348df45b845a959e853d7a893803c9f42bd59be949ba684ff65dbfc55c113bd1ff12b23a980dafb220e323b82bab57bd77f62586c55668d1e721b13b1b723c619771224665d4cff571a6b767e14745a6a4b514334e0962a52345c294714c10b52432aa4694b6ddada10d9e5c02e27bf7da9ad1b98cdc3e14d151599708a8a115cddeb404ccbcc223d7a140603781e1f8402ec2e029d6e4641acde00e858dd6c9bafca746b6ed649f3ce8063a282e5ff1fff8506fca003ddd2542bebf930497181414ebd5fa51ac68f86c56b47cf0dd293e80e33019602fc91b385b72d814cc4c03aee8793ff082c832b59994dbd043e9264fe4e9be01a36e23351ff1fcc55dabae5306f92dd3cf05134938a3efd47979dfecb96361e8821666c37203a81f337e3e8aad1f6d017968c2b299a95d06672190dfcc66a91fb2070b69bc6f842b340cdadc45b1a7826a396778266ed06ef62962b184ba3ead1d893bb065fe37f0499fabd03678825f88c02c2146b9ee130cd87ce94826c99aa9e61e1ed5786a765b7dd9eee83ca79fbd45373760535ffd9277060f8273f2ee4064db3d74a5c4c650ef8bbec3c5be4af00fb042de05cc34714e2aac996960b2c94d9b95ab4ceee7123de9c930da6e690967c0c82795ddc18fa50e47f5d0bcee2ce785ace0378fe187af1c9695455f02ef958f53a3cb39abd6c4da68fe70ada8517bc20c7c2c50bd998d4cad5bcc3a208ce1446aba7189fa2df2b7971c11dcea2050793de8f4d9822f1ea097eb38a7c8c7920796d44d74b67b79cd5db77af0bb81b0d3c58b57d13830ab41dbab504d0488f2025d5929a3e8aa9f4341377492245ce1f82ecc1ce0e8867c570105ded5dbb7475a4ab1cbbd98a1ad41cc04c76a2b992c0f00150daf9918d9099260a8e6563dda3ae244fb6bcc48eaf184863b1fdb20d940c1cdf0e653ce0a7f152478297b00f3c8af7b83558e87a079f325975a39d930b5fb5b8e2d1e9056e212b8144654e9da2c38bc2a22e5461501a14aa5c24fac79933529af2a0346075a118644e4e9e0d68f0570b77bda6d93b2155b2b002482fb05f89e1a8809d8630e9bf5d2ab40ce30199f00f30773e460b3d7c2f2bbc041ff31cb2299ed392eb327376d8445639931f18dd2a66fba93c42d6fe5c29c2cd3cd3f361df20299313ecc6e5624575a2b1e405750975ab7630948662e634b6f1ead58c1f7ee6e34c74e26c719788c2b6a422d86e19071713a752b42049c6f910ce7a4f51955d90fd9295dca1c4989e040e4e1a1ec575cf00252ff8ece36b09b84c24a59e9efed34501898ffc85ef981944b8330dbb6c23ca1e6ebcff6fab8946d877276d0844faa1263ffef858182144dc03cbb15724b5e017a188fe3ad2c84b17f46d237dbaa790952bb21bc78cca3558b34cb0256a05d0855ae55fd1ab77337efebf784bda4aa1b2df41dd30c803593f492e70a296941a0c1d4aaac08ff6ae7228c6d21f2e543323bd16c340546d3ef437f9895b24d12b004b215583eac70a95f4fba7442164f35c57b95452bc58451bf22650bbaf5d91f67711e6985678e65ed5c68e775dfd30c131a207046a650a1b1a4d6d409099ed732394d47a5d8cb0315dcffe052e7d99f6dd5961c1d903fc7612c7358673067bfad312b5a66a62f6b1ff705c9a2d768d61bd47eb0792c5aac17e3c5009c123ebf20823f0b9079c28653d404092d568999644060962222a8361bf053326f582abfd25311c0eafb8d3af89c8308bb0d43d09241c435e019314eb47ca557aaaa34a70ccd2ae23dd2977058760b2e14a49e63ebfe33f57bbafedd2caf44d813af625f161811da51a6e811b98b23e3ffc2a23ab8a0353ebaac16c9c9b0b71b7310bed0385b4e0fee2089036403538f460f583d404e5078669782fcd4a8868a917550e0babf6ae8dce78130a105239aaf35c755cd310e0b4725485c94be3a8c37841f78e36beccfe2a4d87eb8b91c6c03d9f768a571f66025fc72d3531b5a882be83381fc875c2bcaff97d7f048c56d09a6f15f113590ddc8c4074857e66ee8364794e14d3d43635a9fc52292daa6068b41bc2359a565ebf82610a2ea48ff13204a4b821eb328e15b2d6a47e696489d4f55609bc5eafcf37cc994cb52699471b1985e4ab711930c94508f2d34a5329c1f88e6ae9d2cdd5b1d579baad770b56ab1dad8235f800c4ccfb13abec42fec69c18255462892918ca3752e27c386ea66e7b7bef460281c09d2f876e1dd5bff6efdecb54aaf459fefd6cd532a5cd2bccd1cd81aa500304aab66cc487ec951f2119d6e0fa17a6d8feb7d07149bec7db20718e4f31d88c01f9a53d5ba7ece3a4dbc67af6a35d130eae762cb7962b9ae557ca38452464002223f61bcd3c7353e99d62558ceedfcb9374d4bbf89680c8e2b9585603e076f1cdb0058299b4246845dc79d1043b1422efe84018e4c932c45beb8851fbf485e36d246ffc31bd7483521f69880d269edb8c8f44cdecacc63fa964e6d69ddf15679907a1f335a6f85786ecddd5082fd437e1b05f3580cfcf7d539c003e8a1eb9d0c9c02802060f04376cab336275c568da9821fc0a3190931ff31741041121c7b187e48ea333644cb56c01069ad665a126082aa7967f9dd59a006d45b1f396d3ac5bfb22514e3516541d54d3f8baaf21ccca50ee74eb55eb7df3e47ae281cc6213ae6aaf86a6f01585f93d080693007f11472b3d2fe547692e56334cf04c51077a07b972ddee33aeed78102f4eefe7fda627102021fde0c34dafc05875c3c31851e06e18a1746e66dd2274b62c31e441fdb2b613e5a5c07e3e592219ed8871393dd10efd8bea0ec1e770e149490983c08a927394f57d551e82eacf0dc1fb09ce805202bde7afa3449efbdc350fc7251ddf4edf3febd51d18bded2da09dabfb6cebdbffc66f45ba63661bcc25fafb66ae5e306f51134d86f131d8d47ecb0ba488b2d74ca36d3cb2a2cf6947789526c6e699ff9a950667313ca12639f4e4aab3a687ec7fe18c052a875d6cc4c958d9a47b1504e7685f829a5f6e6de4af74f9974add840fed163f9085728eca74d074adc051c8ec37695030de0c086b0af688ddda26268332c63c7321b157df277698315ad2e40faece30733d0c9e23a3e3d8e5f8f45c605f069c50e08c40694dc5a4edaf0acec82af8a3f000d297a4e6b75a4e1bba8e3dde41cf985685d0ff54483b21318bf1bc38733b35ae107d656ffb9d74c6fb44521d2256d7d810a207d778bb7a86b8e53253c866a2b928b7fb8c3b03086f391763b802b29df9df1c2943c1c658132421f10952a6c5969dffcde7c03b6788f66fe91b6d73394023a7ca25cdbc587b40204ec5cc8c1cdae28d52ef559720a8b5b638d3ed19583f80ed70fa072dea03bf78c2157077270a9919312f55b6a252e9a2f95dfc05793c9955a43cd89b8b50d483e174f908529a23fbdf143b1a8afc148e913604c7faebbf68da7aec75caf731ea2360b0a05dfe05ddb32a80234928c901a6e8a1e17bb185af8a10ad5d174b5a141e7551ef77cac11753fecf614b4d798490e25de26a126e8249aa85a1fee1bf8a290f37465e74e83147fd73652ffea88fe5bf934b54a2ec998fb51ff4f03ed4c4e9baeb356080edd3f5a306af6590c89c2bdcdc6cb9d7724dc2acd6c689d72c4cb6e4e83d3c733447f38c13a06ac87c31b9c6a3f70824b227991e44872a3f389a3739b8ee30c07e25b81504c8cdfa15d94609945ace1f0ebf6965e3c76fdb8c25d105d798ebfd0df5b9da64b8fdaa37fb271208088a2afa6dba302ef7a93099882af5befdcc8d76307f58bdd1885d553ff37c79a0baed07bb11f990a894d2e3399b75e96d60f6495e8efc7aa2ec87efe021b58383eeb9b93fe72eb34a8136eba2a902e16837dbf9d85f4215bd98be7ab43839905274258164d03c016e1cd1356bea19318ecf82fa4666d629821b659804bd854a6d09b4e2c233ce0573b63632edc5455441769fdd214c052080f311aa5a1834fc641dfc6fb0a8413a0bfbda76b0c103b410eb9724e1657b954aae47243cdea530b81f408ae8943209973c32634d63e0eb8d9ced441f4985f24fbb7ab825877271d97c45c6b29e2d0e9615e2ab2c34496507e926bd237ed0c1e08930c89c99195a58e360a5a70c7eb399174f90c5a8b9bb207ec812a66bd87eddb5edc81a89f634b6b3159a5e85b393009eedc6b237be5857bc35c70096f99377c0264917e0b5ab6389f937119068177d3b51bf7a77c3b72e30145cda96d0aa5f165ece2d13c428ffd67fee98a318db5f7b0fed76df76721468d8469cd1ea2de4471bb9c2c9ae37dc071e232c34223937bc6cd34fe522f39ac4f616bfdea288b7d0c1be6148d04298ba589774ca30cb969e1cf35e0f75c631e2f24fbc1396653a22052e8137d6f3a65eb3adeaeba10cec8e84d039d4cb646a2151443a27322dfbd94a9cbb0d2ea59572b3c8f70f1f67ba1c28fc5bdbb048b43e97a68270025d6d55068b774f43e2e674dd8b31aaf8867fb59dda4c6ab10d906939e95d94937e1f33cd7d3e54c33609f395672345b8c3ade947fc84284a0d9f5fbc8f03eb41fa81e403e488d40909807d7fef3475fcb9e535bbc58b8ad7d32170a40a1e0aaa7d25e44e43df4391f7da610175fda220d396096de7db1906f8d74a64dd147949508bb3012dba0a0a6b884caebdd760c19b3102d2b5eb4943d9215b839a8f9d8b2f13eec104a1bdbeef0a9eec096a285b9b56809ec244921b1e801294a4d80e0c636ee6026b1ed54bfce1e65dfb2e6f5b3e7721068f6f89f913840dfc9e96412997ed4759c389c71e0faea159058cac4d0f0352be9fd4a76a629dbc4fea32bd8f272f611b909b29c1b1b15e81bb0d75ad879b943b560c60fb864d9bf30a45f999bb95e1dc649b73c36d9a8c5c7e394209329073e1548f5d08f9042b7a81387bc5afc14820b2331b8fadeaa93dd198a7cc9a9260651dd5d22f2561f96af192cabf8e31e26d0bdaa7a2fcf233ca5793fd741a01e81b146886eaa5e77438bded5cd3d1586f35d3fa9e99d571ba7672c3d9ac4b7f8997dacfe1a804f52a684890a8af03b54d0f9d2b76d0b1c9bbc6b5a0c2b1a96bb35fc36459039d2b8a7e443544adbfc8ea4ee9e5b6e43c6aa63f82932f40be46f3c770de736a08eb22ef1333975c4013e5982ca1d540bfe518458c4395b5f491c9836586c767c2c4723f582437374f26bd6fe7e85882c6c9707d151a9cadd6fcb3081405ab79453806e3657faadb3761e03aae41c706eb784d4acf908a84efb84eca0ed3b60b1ac63f7fddbe58948355ec8cd216975988720d431e3e05d7a984db4da8696db9bdefba791358c70fdd8330db060f4ff748674eda738b85129ec30707934f48f1a924d643c8e77cb9807a5ba9cc74677c85a8708581f19ec239f3408c31edce4f6706317440e2f00e269bdb7d77ee6435dab610e8ac18a962f5a6164016dd642f61f44a9f2dc3b79a3a782eca9ae5ccdfb220be5864593b717c5c06d7a486a11e448f8008e21239ca368fd425c7f317c69668c7794d4bcb7a187580978d821b986928806600470d3a955349f3718ecb77120ecaafb968efe96483221414482a2a4a6fba1afaea9857f1631ed81a215e8d9f8346805b290f4bdb2549e1eb51635082b59bbc5475619eb52fc12834435766a956b98f8514b01e06bc866575363d879caaa3be8f6fff9b6b19bf88527d3c9eca099221d9a458ec51b96633445f3f4be2bf70961e32d8ca8dd1885ce72774927c0c6edbcb60801356bc47bfdb44ef2a0f5470d7837673a887b7aa3a84ea95ee39efbe31dcc1cc4f8025c98f9c7fa38e7d1a32f741a366b2036ca3959e3f270e7e240eb8705073dd68a65a171a781305b6612579fb3218736b30f2e2a58d9e7fc339bed448953d697a8e87ead7b6b41c35d9c6d3f2bb0f6939d516c63d6e72bea3916d29a7f87f60206ec17f56c3ed2e95d49599da96b21ff9a99da4c84a2a4799db880d20f2c04e14c795491a2844d930f22030156db6e4152ee602d8b94ba700789e03363c96afa22971dc844c4198a1a2e53b25a8746236f58e64d1245d6991e92da07a0e68f152e4f5ae47b879e96287632fadcf7126b96df54f5423c5eba8bda5794f10cdbfc1ba8f32b6e54447ede00861f04b438e2718c926d4301bc9cf6693d247cc1b6768fabd0e646b3730ce6d6396afb452250a86689fd3c1c5607054876fd6990884a325fd95c2a2c9306e8003123e932367de3751fed551696c3637ee867e1feb941aeccf7d743480c358b845892f604de30c9c23d84b875e397b6137dac0c95b123a8fa109db88e4661786c94ff484281330254cc0b8ac4a44ca7101b1311dcd9b8cbf20df7b287aa5257c0cfb10a74864c3734b2caf68843aadd7cace3185b97c7bcbbd72d59b99ecfcf86f0f1622357441068d909214b2779015f17654b9b541a265d5487d4ae8ba288c8df0778d65be234fa27103694b881bac244e1d0237977afe16e4d4ceeda912b8d843b7515faf04cf186265bec5e8ab1ac1b9ecf7b6ca7ff4e0cc6e8fff16560dec7d481689c34ff56dd95b8da815b8d2584e6712c9772bfac163bd16b3ae5cec2901cc358a978f63013a377e689bdf73567ffddbd619f970373f42eba1bdb1e41c759646c8982d8871299bd98de7897e5ac323cb631f82e5c0d392872fe0df76354d48b2da51a4e64c1bfb579e854143c3bc7b6a071432dbecb52e71d4a4502311fd56121630a00ce085c841010191742fc06720288493b32958692426749e7b210a40ed22c1995cdcfb955e5bc8e4700d8379964ded201bf531f526abde14dee1088b9c8690eb669fe1f4e81557c4d7db5a1524edba6276ded634e1cb4d7dcee05cb8b8980b20aab7ed4976b44abd0c27d8dc649e78c54444c9bafe0b4f23db9d9b3ab9fdbcd3a9a3520592bf0e379d516431ddc6a4d304d560e9c3e25f9185772894192e027ed3e0c4dbc4ac0ecf0c06a0b7e90ccb1648ff4063ebf6fb514d1ba9477e8f987cca0eba2e74f1e8ddc8b5f2d11ec758098120fc9bceafaeeda2e971e732b8db67ec7bb6603c27190e53cdff00078cd8273df8da03f482e6b1276f36d5de2037dacbb62e2372c20bbb4ddd19e70bc3d7f9efd58d3ef5f74f663b2b5ca5e96c5a2fe85ca5eac1495d7f1751c7d8b412b3ec17456aaf3ba325575e9c57d9ece3aed1b2cd921890237ab440daad6798e0088834d716d74ded151f1230bce4412ca28acb87975f77e6e0153ac62f0622b25258c8f8f639955bab27f686e0578eadd19583291a01e11a29fc95a2c156da100dd85429ad58ba65440c6c1d96964dfdb8ac8a109eb25423b4e4c1ff08bc277fb78166f790b715906c36f3531432d782d41a40dc99e359aa1d68404969b8a357dbde61d144d74f63a0221cd5fdbfe3e3906937fb80175a03dff1b10078ded64ed759e5453e3bc0657c685904b79fdb868a33dfdc05c0edc7591b64c29a9128bb568e51c1e147011c5d74386dd65526e22de4b92c8f627d6b25300bee53722323c5e647e5d2ab99debfd02b7fee626e8d0816543b918e9175d0e9e70247e44e1ea1fc381f86bbe3433006a2c9446a1afd852321a790a7c26dc8a3b6accc7a1212772a92ed720a85d04a724ec88cbea4aa41a5b1ef114078b998f7db2c65a60795b21be8be3909ea1c6bbd8ffc3be2a419aa08757097eb2cffae50c52fb7fab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8fa77969539152527ea79249ae187b1dc55096be4acc40aa0d2d64a90a8b8a]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result 8f689ea980a681c69ada6f16c130f3e0d01b9598c831e6d0b15f976b28296a6c

tcltest::test Hash_SHAKE256-3.84 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex e871ff064b1eb10070b9fc0bc88566a7a60f96ee8e63b86aaf7f232aae083915a53c8f7e6c284ff8171bda6bbf5ab167861595b9d59aed3ce8c969f28dc8e55328f890e5fb274d0da4075925e7de2eceae80a8884e7b67800c9174a8e06b270d798b4866808374e82164c262c87aa78528361783826ceddd24bf8d753059c8eb9edf002684a38c31951c5d49e894e234fc212ad4f8d649fb373afc8103f99094a1daff508ff15d8f09167203d196a982302829a0382241834dec09f3e4b546b189668f0a27d4aeab843a49b70be6c217ce325b12cbb69e1d6ebcfcf458f4b4e95f6af67cd6b4482d0e702a8e1ceef59cdd29094f38fc2770a3921cabe91fa0e52acd7dd023faf4bcafa05cb08e140cb966f47b82075aa625f356b2411e9cd34df2796c2b960c780070b22844e9c2cd15707bf9d1c13ae1e367f006dd7fd415c8c0550bb7b8539ca3588ed672b35f025903a6cb64ed03a253064960a8952f2dfe9b49a19c10372a4a701dae647653712c275d3864131daf1dd84708cae716e5988b3d78022721e89fbf45f73fb905e337e58889f9bcf0d0e8e5d3456afeef033e9819d6108377a04a4deffb2e05df1f22440f074a6fe4cf5c36d661b060235097cbc504eeaea218f322040057e148ef944ddaf780b4617322d236a2c5971b944c2b2a4ac5300b1941476a4fe2d5a8193507d1a4c213cf83e2c1dd51d12b3e9704c02eefbd8f196adcc30b30f8696866ae7add55391596c8430cb1b5fba2f3206893ba3dfd5533d56d9ecdeac126ee9ea7aee4510d411e0aeeba9c186c86a4f920abb77aae09c3209ce09ac76493a389c7accfe1651fcf108bd385c04c5eb8e8d3110beff73430141092590d0939efeeb77b874d693812a4c16053f6c2b397b629cba0e4015de27972bcf205da9e3b971f23f3dd43134d8c3867f002f60ca92bcce35ca1f30c411769644cf7fc4ced4aa5adfad91839ea9199f3432c11f1550e6160296df6cab5b59e94512b9acb6fd0f420868813304f7b8c0934bc3bea0629934bee92321da61db853e8e8daa127f1b2847e335982e612b8b3abf99b80214207ab9356ce907c1560aaf978e4587f7488e1c92215b6151ec6f8902d5a3a0f226888ff02f3a89f663e9f6d21e178dd231d40519d6d5546665de1cb9e9fa138915ceb1cddc8ef77d8f93d2a2cf987abc41aa8fdec89e6e0b326744594933b04568bdbd13176ec6d323a8919e1530f50202622b55692f14bcdc9bbe4595e93dc3b9f6006442427e73ea88d2287189734ffeab56124b0ffee7cedbe9134272e26063d82a360fb294ec2ec502e676fa8bf290d69ea9f0a9733883a84356c16964b800f4a91cb23790b87adda23ca81c959653846360cc94181b85a15b64a5552b471bdbfb6cdc39f84559434ebf676826a7c13552eb6148541d5f279fe1609eac8a1efe9fbb0032423f349656c34755b5a37459dbae414ecd9a7adb8f3185de6eed74cd148ba0c8f4f2b737590cba6dd915c7726c3ddf1fdb2f630db7f9777cf90dd7c7e863506686fc3ba6d3d05328f78b350f92fead241348a26ea89dd7f2d157928f89b671938ed84c8545d2841f97506791de853df3ec72b35ebf8309e86e574f84871996b8530364232d77dfaa4f11b999ad460427ed4a005e8b6d9fb6468959375ef1227daa0a1d30f934c861755bb5979dd592089c1b23fe8aa1fc04e06a6a287fc1c73bca58c21f479dd0dda07ae61c1ea85a4e5f8298bf4bc4c12cd276dcc8782fd77b5a7c1d4e87177b67671bc587ae22df31cdfcd9013d4a71b6833b4ba7c68fe5d4c0e0695f46363a972f9ade7adaf9938b6e065f74dda7703a79241136e96674a0a42240c1f37ea0f560948b5613811993962bb67aab605f212acdc8066f3806875abe3e071d55210ab08566b9e65dd3e2fcd95893351990f32e94fa96a6990df17b20ab9f225e3d3f85e9fb06c1e44501f88bc05ef917a828eb2613585dfe1d778bd6341ab10e781c572eb2dd44b8ff792fdf882e75ff274ae6dd9cdbc3eb9771e36b41da37ca4419bae0289ddd4075a0f9310a821a4470d1b848018196c61e79383c6f8e253633c0079ac6d90a1f1a21eb2ce21a746c2745c5d1ebfa35221505f0e6178717b6c997f3bb081f39b98f647c2f892812fabd2f9627b6962d840da083d4c4557de07819d5dd76c11a8437f132b57a6b5454a4e7bf95ebf5fe708ac187a51089c627c1ce445e9d7efb139650956b3034d72e611698c9068a165bfef172c366949f11291db5cae69979fc3cfb2a9d451509cc9424b82da0d303caeca8bbac40f657213090a0aedcb105829e5948d8139c7ad390aaa43025615521d66fe8ec3a3f8ccc5abfab870a462c6b3d1396b8462b98c7f910c37d0ea579154eaf70ffbcc0be971a032ccfd9d96d0a9b829a9a3762e21e3fefcc60e72fedf9a7fffa53433a4b05e0f3ab05d5eb25d52c5eab1a71a2f54ac79ff5882951326394d9db83580ce09d6219bca588ec157f71d06e957f8c20d242c9f55f5fc9d4d777b59b0c75a8edc1ffedc84b5d5c8a5e0eb05bb7db8f234913d6325304fa43c9d32bbf6b269ee1182cd85453eddd12f55556d8edf02c4b13cd4d330f83531dbf2994cf0be56f59147b71f74b94be3dd9e83c8c9477c426c6d1a78de18564a12c0d99307b2c9ab42b6e3317befca0797029e9dd67bd1734e6c36d998565bfac94d1918a35869190d177943c1a8004445cace751c43a75f3d80517fc47cec46e8e382642d76df46dab1a3ddaeab95a2cf3f3ad70369a70f22f293f0cc50b03857c83cfe0bd5d23b92cd8788aac232291da60b4bf3b3788ae60a23b6169b50d7fe446e6ea73debfe1bb34dcb1db37fe2174a685954ebc2d86f102a590c24732bc5a1403d6876d2995fab1e2f6f4723d4a6727a8a8ed72f02a74ccf5f14b5c23d9525dbf2b5472e1345fd223b0846c707b06569650940650f75063b529814e514541a6715f879a875b4f08077517812841e6c5c732eed0c07c08595b9ff0a83b8ecc60b2f98d4e7c696cd616bb0a5ad52d9cf7b3a63a8cdf37212061db15f44324372f0c7fd20940ed2dceca08e943f79c8d6ef44113750da72f5b60516dbd28943653e658f25565650654a9d540e7102d2c9e019a1633cc4a876ccf99646d2c5d3e91c91b6abd6a5f8b0a2ea68dbebf4e1ef753f79f439b9fcdd71819967efefda44b2d4da79bb03b2051d1034c35457dc91d74003b2f1c25671cc268707cf0e42bf29b56358ae7866abe3961e8e5434aaf72ea4a66509e69e7b066fc8ee1a2af2a2a9bdb910570dfceb1b04900395923569a1f1c9d42c2ebc4346e5c4e4794cd235597244695dc95c0dede3f1ebbc79642f58b1d6c800a09811b50ee3b1937acac0625e6c2b69b56e5982b9a90e74f11f907c6b34092d471b2d7b758e1c12bec28aec099a1d22d71b160211203463034ed535a84b5f5c282bdebf9f2bef9b20a2dc1efa34083139498e9570bd2531b6da47aaef8392354db16ea91624f0d9a752fe20b9a4b43de3e1076160eaa88713a92b04c844695fbd96236261dfe8715bba381bce50e9efdbccca91680f870d20a4cc6abbf6ad8380c0461208c69e0e44c3d237c2a26fef2bf01f4b1192886ae7b37105510126489f191ee0933fdc566b53139b1b000de4db374db7e1dc744670bf61fd11cd9c572188f5f58bb468f1d753447064d48d76f1889eff6255124bc1aee57984c2d7570ef41179788c0b8890acaddd2285b54e77ca58481c652c1fe46a45a130499ef16e47bb93e02f8dc39f44960bdf7b4e1474e7c4bd9675886ae1d9c99e9fc8bbcd4a683b6b4d05b6490b054721221e1f70f1c62a8358ebf0d5bee5b99859a9f492a93fd92a46764ec3dcd6074874d6f208f54fd2c5ea31290785755cb6e45212e894b4ddf854ea1cd81b9e20a85c0b8d87886a03a9d5adfea93e70fb21ca2ddd7912af8efcfdc9e931cf47d8686225b993b2ff0757a0c93663efc0de0193a01cea2b18365fcc7b7d7500b878b10e8c3ed47cf624f8d3ec98dca24c4d7dc51599e6e7d71b484668a04db6d947aae9a8e4f4ed37a3b4f67deebd5efc90bdeaf31a134fd485e0f5f81a61fa928f7c7ae273980eabccb292e6fead2cb8eeea89a268196af8be4f6094b258d3cb964e49a0b26ae538e61b2e8e91551368b12c2b8a4ba141290dbc0fa232db4a6ca649df4b6a127dc73b1653dd6e5d1bf41faa57138a53da50b94f8b8c6091665d0594c34c6338db4111cc883b5f6c4c44818d95a5efd63f560b325bb804232f86fb597d096583098cb16555102a2aaf411efc6da840d378214b8a0790e838add0d2bd96ec389b0e92630842c498414bd14020688446f18b9bc182187ad379e921d0ea955ca329f2396eddd8bf715628dd2d210da1c9d982abb43f15e08c8dea633f0802c170d5bd6b1c0d9e6a7d144f4e2e26e567913264386eec8629dc1eb87c653e66826546780fb3c01d2b8320c70a8b57773f65a53a2c35aff3bd8bd15c568bb548094b252b0d7c1ddb6b4d2598fb8cdd4b8f0eda0b6e52b0e5046150ddd7f89530bde919dc4dbf4d6293a1c9cb0879e0e9c05578dfe60d18e466264343e9f605a60609cb95b6c4783a0948b467189987da3b0028bf7cad0f764ba1519773cb2d334c71e25d32d2c4e9370a8f741535fba567d791b1187cbc251b9b23e05cc0365ef7ea073da9325cf983ae02fbe69564d2aba45cc0a2c048783edc61268e1d48b06f3ce23b012d66f257feb4027301e9e9712d30f102c2dbf71c2cb271f02a8ab01d2f1a6223090b5a1ac04e94a4c1b273203bb64e20ca9b2b1d53beca6a2f25e6678b58b7f70e72bb34bd77b6611ce8f81f9695dee41fb39baa182e38e47341dab61743446586c49c0dbdd872925cb3fed80676a9370b49d02944aac4463f0415739c841056b728860d8819cf1fc73a0fb25301b8ffd48650049fd97578db991e04e2c223b0eac7009ce5e1d6f0a6a6b21544dd1226c391a5a1f16453638f267dd3b1a6865d68c892229dd88ded401e7069a3b3bf922093566a02f266eda3d4bb46d1d840437654c40778a7feffdfcbcf17362ac82d33b3ecc59a2cb7ff5eca5fc709ff594c5f931fb33ef6310cc9d55985c6eb34dd431aee1c80ba4d820931f1bd23c3da5f69ac2a8eb76c2cfd4763961c1a9d0b8c9aefe4d67d43305cec30f990e5ceca63dec86d01abb2f9bba19d0d44fce956217e5b575b596f69774ff000a718c53142040e7172e170a02d1fac466632771c843886ce13dce8ffb97a988d6c845317e324a7bd4a224d273a09b8c9e885ee659d1097d166cd53fa0cb4512946f01e852e85badaf236f198cca6e81f34bdf739544db6e8bcf65b635747435b9d25ce820b71704ed0e505faca3f65cfb0a239a191390d9c7d1da641827995abdaec0c17622ef1a34ef731561b1c5761c6fb5da43c1ac174110bdc9c749370a1630b804b1b056460d3331cb3a985e55ddd920a4b3d39fdf9e088a67c17dcfbc6a14ad1261e3ef10ec6626f195bc2374c5c2de99d7cdee7b1535cacea529e5fa1fc73a7b05321c234914cd191191a76b6ad95a1a2e151a726d04e95ed0d1fc3bbdd4cacf2a3f6fc5a9bb9eb21cbd7ca213792db6255d966e0c027098e30a9509aaa9f86f3f404ca094c7165d4593f5a1762ec3fe6bebf4c668cafb2d4a4822dc8cd32ddbb309452c70c3be6afac9b4f1f966a7435064c803f9aae35c74ff284cdaccd5a533deebc1f43e116bcaa32d0c23bd5235713c52bf654ec3d6f1a437a2fb13aa4c2055a319659299e023c4e0686b9f5f355cf757410213070d5edbb3978424064106e20d9b6b6dc26894b3519f679928d3620a3841768447600b1a4e92fc9a642466287db06c3c2555abd303097e1749802f096829393eef8f84c44b1ddad35e56bc8d85f0ee6a2d47c7c8773f35a62bdc12697970a09f79ec6a8e4ba0956b5f687875c8f5788454af76e820b914d26a47caaeeeb0632270f71accb2c3b2cee1ca389589168127460d47d6920f92086f43b64e3a50e7645f4013f432efc97a700c5b5178dc9eaf5be1a9083d9b43d4b56043cbeeeab3d1bf47f4b92e8d2ffaa4af8f3e0ac037a900bd18e195f490a3d71e11ac6ed63ef6fb8f2b7018348ccbda1412bfa159d290ff0016173da40f123eed9e644cbc1f40ae7626bd827e366a9adaa45aef21f5e3814b3f0d9712258c674f48880af4ab4b42ad74e5ffb2d3535173a2a44681283d520ef23934c75a9efac3be8c2c2889834295a4ade28ada22b87f9c004a1fdffacbbbbe2e894c44b643db5ee522b0206548bf2469cd5eb1351a4f0f035c5683a868e2115227194a6eed16b8377134067daf9a82be22b70f1711726a321fbdb9c2a4028a4870a6f22540d638d7ba2cb248f1a83dff852c3a55187a3bf0e6cdf8d627ad8776088dc27609ba7f5a4ff2aa33b978b4b26716c95ba9d702d4540fb75f4e43a77f412641dd8233fa43b53e54ea617c857b4b1f42b730194d60e9eb8bca925558a8dd18d6c854c318187c5858c974343ece939e2ce465a17a1b0ae9dca49e6329971ede27c2fbf8773d27e91c4d8c303f00e32bee5f9510275759a32079cced78de98de8b69d24496462a691602f3e104d6bc311da558d5c3ca387ffdc69864e4c3dd9298099227d3b81640dc7655c73e94815611422b72ddd839f8daf7ab59fc0b5fa2c43e9612de075e08e6142c633aeed4f39fb28767e405d0a63e99504d0cf99187968568a603a86439b968d245882a19a1ef72e73564d79f009f3831beb63305a9955a8451f33feb5bdce101deb4fae1e9a70fe55bdec1e7808330ca1f763c3e91374a73971b2235d7b71915af2fc5a0234ce5ec5bb0596cae713f73ffdb79aed6f2c1b0f5ea03f645de7d9837871ee6f7579176b5980270f2efa0e9c0447fd8d36e4cb6eeee398f1eb98b03f8296b18ce3daf1ee9e451a6f6650176114fb34f1ef0680ff2a64762daeeddd361a53ed820857b3f7933cb711167cdb3535bb864222f9026a190b23402d4c2a114790e8786c59272d3e4e451ec6e822c1706f3da857251956c3c1e651f01e5d781235ec9795491339a9610ebdfefbb4acccff9f4a17f28d6b316c068880cc3f12812a3f060d8d40c2dc5e5817471d589f5253f551e9c825526af5cc0e64bc98889f5729ee5c8f7671dd2e6c5428b6d842095386e4560faab37645800b2458308171a4f47708b57ceeb6b7929b2a2efa3cf9e89c2ce52fe5355e436aa64907cea601fae6c89b691ce06fe31114d3ee87362af87d511e909b8129d6d1085a303c9f563f490a9d121cef0e9933e8ae5c46d7a56c727a899a973fdfe8ff59df3d4013785d6364941745c49dc13e3f40e101c8712dc3cfafb6a01689603ac06195a3ab703a7dff0ae25f0723427b4013e67eb09622b879174a7dae2e25cb6567a02c0e45c0de0386da3260a9063214aed186381d3299a049c0f7b0d621fa7179c6a5e4ffd5d0979167857536f4abe2990be1080d47ad6bce7ed6c4893b0e0c1f6fd4d7a76399e3b2f122f1d2f42dd35dfd57c76e483d032deee291505b515de203838d4351821071e0cf7a85ee010f810eb01d481c9190ee76e2c03269098d49ea78aede87d346569d55b858ca70bd8da5b3b4a4adf1399a80a0f8384e7fc3dd8c7ce37dedd4acea8e7c555270c006092c2a3189e2a526b873e2e269f0fb28245256d42a6bcd6bb41c0bf67cc939117e0adb3f00a3f480d0b77126cd38c4e4a8a2d028ece905aa3cafcc45dcbb250774a78e8410d8286f6ab4156b6c0e241ef1e5b087cc4fc5920bb085ea7d2fca0f716b0da8c169871a0fd295594f5b61ff8584bf9bd085554ba885ff8d640e7252ffbe1f541b3f5aaa4679bb997d05c4aeeee5c5090273fdfc9b9802d59b3e63f7a5088b302740e84698114dd3fef69553b4728a7c6a0205ce6d50566a29a9e527ecb11ae3ec557b178c0214aedb141c185d92d59a0f18b4e8a514c2f51635420a5a21941672675945aab4d8d31b49a12373ac6f0bf99e5372cb4e0f1e6accc0c779c0c170c25ccbf77a8f61eac67c6b9c7e2a2178307d2a966865058c2e55a987d1f7689ae31e195585fc769ae595c3ac0473b189bd9b817a03c16ce86ab84371e82c533bdd938b885261e18b7e7bf17b8fefe7e5a7e2a04624ca0cd924ddd7ae48c848fcb9a569b8692768669c183d30a6068d35f639ce2353e8ad0866acac65793410857e3bfa0c53b7d4d34453eef3d2206920b28755391983161c370d0cbf01d7737d343c87ad9777ec7980144eee99a5454fe4b67baffd0310bea0e83de46a18388ce49258c3bdd17a015743a34686fde76994ad89ad88d06396a72588fb3c61295b9524b5754e2c4412d2c936261e901717c854c65d4052d74b57ac352cfd190c924fdae6ebd1f01455f78c4fb4ebc79f018a937ce5aff13386b5658ca137a7aad91a9c324ece84b072d0753618740846cee152f16d5d1641eecb38d57f7175cbd6ff52e3c6cd52e010656c327b41bcd327d6796f1ed127c72ca00e57f134ea363405e43f7a57c16ed7bc5a8c05db4c0fb36ff03c1f938e8ee73ccd5b1d076eb599353a8f93f3392071df258dddc91ec21bb69fa0992bb15ec8a85f292b72690eae953d1a382a22c083d6b77a2c939cb306b36fe5b422faff77ebaa0944fd430a1a30d32a9283e514b8a7f69e19c22dac1d6d465197fed0389b0d984390316571850be505c986e8e5b55ccc40cddd387308ec0e2e6b4a9ad2dc17101e3695350b99305cf404bb94fa25fd20a76f6c27d26e38adc2578bc296e410f9e35eb21ca0fba61e3f6bab511dae90d91c28f7618ef75a0d56844baf4958003ddb320e83f75675152e27dd8814f81fe1e720074e724c5914311a11c9b6e3efc34bd733d0d950a6270960d99fa8acb11f507e235645153dac9d406678a42be6737e78a96d0e913f3e173d2800a1724f7b9f6bd4e1cef90ebce01ed124dad8ec35bb3bf6c05ec24b41a1e75111c7f100dd1b0ea157d6a1d52b43ddda3521930af14948a433918bcf18ef86dc3ce2d2cc2d0d90122025b59ae30ea509134104478f71c83b2c6e93d5ab494152e8b9bcbb53bd18afa483dc63cb899de72602d2abf77be34115be8364e2f7403a7c1558d63873cf014cb8be3acbfceefbd72ca53e12afc04055490285a540ac1c62be4e24c277dc8f7e8b0426cbaebfcd8c862709c65488bf54d7b93fdc6ead80017c45adda1068e1a3c65630b3e839e6aed9fe13fcb462477a30509a6fc76aefc117e67a69889b80242f5b5e6bf284cda6edd2649d15775f2f1b6e9e46940cf10a56d89255259cf3678fbcbadc14c70adb8a4c058fc0ef8fdb62bb54491cba0c4402c3fe883094c2d6ad214cec962b26b47813fdbcfdf15fe6cbe1c361a99dcad7e351c4e8f0aa76d853301b84bfd7a89b7ed0540a14a558b81f85f37481ddb22cc128ee5faf0796d447942f8dd8f318f7662b13634c3401b92552ed6beda14ca964f083d4b3d2aa3452f390ed29a9ff2ff6cb41aeeec6e252a7edb82f351121b794528c2e46343b5f3cf6478efa1fe4adf759e6d3428284e96b015ca7a156b8bf18f51057ae55d0bdcd445a56937d4fd8307c0bb990916ee83b34e2ba79989927b9831736335cf1b6cd86d42f3becc8186bddb64a201b28b5dd2e515204fe4d583fa1aab31f7226b20363ba003c94d8d56e24f26d39473bba1998b1568bb15bbb72f9cfb6b8bef819388416b1dc9c067702f8c40a253d2e5db91a0bad56d94bb7193390274869ee533490ef29642cdb66ef01360a2a268908835b6641ad9ca6b3fef7f5ee159a91c8bf304e521c6ede0bfde84f53912ad5224104caf9d825f319e7eb05f4687a67e1a10c3a134b8897ccf45517cea2709913b9bc3fbd1e9aba509dbac81f8831fa04a1cbbb543aa28e129bef9763a4215d42b42cce75c92484c0e80a4658bfe6d29a8915d9fd32e54c46bb5fd6fbe164aa19f9fc7e091fead7d18f84888853c1750c1f949df7797858ce1c4cdc7c9f6206ff52d3586269153eeb5ccf95958deb6dc02ced0e2857843a14865fb2d02742fc5c85596266eecc3e7615937569b58c422077cb357916317b7ec1405fddc12d11995b37a6fef83861da837a31ea13cb7a93cad418d2fda6a2769496eb8db44bcf1c9c152c13cd802e7f6e2ad002eed19f80ebb0c11c530c3763c90a5fc64ac3bd4e109afa8bb6ce2dce9e4b5a9890c63851a308383d618ac2ad2643c272c9be63977e6f1a50fb47e72dda86d8933fd1ce6dba84831f6f49ccbb74ea1c787a634a60b03c9448e415e305eb8351dd441ae83cf8cbaca8c471dcf77aa676c0a5dbf90f6ca86e5db960a9bf9ae9cd5de7ca0e262586bbc2aa297bc80220d732924df80e7b5bb276c14fc2c1ad6054fb6f09c993085cb65467993096d2ff47b688e2d0c3a5fe687a450bb575ec92ef9f26fe9feb6af6a74644ea83cab4ecce34d1c20898b13996538dbc0a422124a53152d21a9613fb95808944fcca6d8f7594b31428f369b346e8e1884a8f12c17f993cacc2fccb1489e97ece24ffc88f43be7701b93e93157f21899afcc6880f83bf2cb51e865ae98a6b6bb182d18c95419a64b042e0f8064ae6cc18a84e4bb6bb8c6915b69a8721a0ed97149fa980487511c4494b41602fae1ff42bd78f235f2fe63df312a21b65d3584b2001ed6e51e909ddf65cc99337b3b447fa0ff1d8b2e6b7ee77bb04df5c2c92cffd32071c57a56bf9ddfee058c8618d0eaedbdc3156e8e5c5cb382a98afb2846bd2ba5d5203af205e26b8ee7887c193906ec0b8f8f43d590a14117a11056e1667c71f59dafd110f54fa135bbc1edaac176348edf333eefc057dcf5e110766310a06eb617becd31f2581968fe935b4c1e9b4fae3ebbc01b5fe2bf93d5f5da4bb9db4a5dffc78fb3a17e2c9f3ca7358bb4f8a5e02a736816b3c49177ec4ae309e68fcd63a264a9347744634ed2681cd80910dfdb3f14a730808fdb18b08a210c0b30405dac10aa22d82d460e6c4061bfaf7645e5c8fa0e173aa6f50cbf3e24e0bc6f4ba27956031d68ab5d4476dab4b0fc9b80a674adfd2946ac97ba64c16f265e8f57e8969f24729d3101876e91864a94e30873aeaaf4f538f30bb84dde602b8632fd768066bec0ea70eb5dd00f46eafcff55f3f37ba5f9863ce97cd6cf888eb7dc9502c3571286d4cd732e27ae87209942e19dcf9a50a4b2ccb97e9c2f78be67feb6e3dbcac042e0b9217ef1e9b769fe5043e7bf71b5854334f4341a7891491b1bfbb0363c6873a2c67ed6bb5b685590a9f5583fac2529bc081243be3562ad45a6abee7f464ba77f77f3abe07e0a41f4a26e65cca42ff091b89c1403d07d597c317ff4f3531a3ceb402894fdcc2ddd9efc27a6d2f4468848b90a2b97e441dc235ec07a4f0d24c27aa185f88fc03376f3f9a9820f17093f559be500c6eb40b3df6115d4febf2bd6b22e746d02f4cbbc983d7c8dcd76d8a45ce3a52a3d500a6f04eaf89b6ef37fd80649ac58f3c456fcf02a0920aaae4555a302d30e47bd0f7c387ee1443c3491350b857652eec955d6a061e7f10327cfa1ec7be733928ca049fe8f5855d31d10ac26646ac1307e58d80d578165737de8378dd16a209a399d76ab8ed646bff77e7bdb59124a755dc05fab8d7df4781b1f74fb85c45bbb5e3780e40fd3ad7f6e2b42bef5d55529d23cfc1f7636348d79e5f8da1b9e5b92651ed71c84e8d08debb79f35ad5c67da961f3bcda4329c3034dc219e055096abe8a407d9708e8667fa93cfd3e1eff8e3f3f77d2a9a0ba1ecb6528dbbd57393644377918f752d059a0550731e56388ef286565edaba19cc3f88f9abb80e7fd8582ff9e2c2e54cf490b66e17796caea062c7ac4f4296f591852721ea1702fdebf3e8bb9a085376c9e8685d3b7987bac3d12279dce6b317987a0b7bf75d654634c4182d15c442330c0da5ae3d9349f56fba413f765b9108277ac05821ffa811595538def48b33fa118cf8c1bc5b25e70a7a8e6daa05b34fe503c05718724dc7a003b541a4c1ab4490c2cc483635adf83abe74a4f6798c47479195e93969c8d1cf6c37e5a50c0a9b005bba9229c734b166e29e55ca2bae96d5c0bb9f032a9bd83e0b1b4b73cee475c6c42e4005647c9b258355f0c3907ca7060d9be914495943524ce9d3af8ecb6d7a78a1c257a1c82ded1d5616415c89005ed4d147db5a639bc2ce2e2ea6c021da9205bfa9af13b9e2241cf936e1c4462b46b2d64bc6b25d5a05eb52ad08178a4583d7c2666a1ec440610ec9c3137c5690642425557505a8f67240e1ef21d95756e68b7479174779c13a6f425b54f91cc82db5490554b8c909be5b7655a29a2b57308d205245123cfd06cafd5034af1b4b19c2bbcbe4304ffc30876a8108ee78fed84960a261f3905c6c8e55522122d4919ee8e829b220b0568f7148f1a32ac296646cbfb9fc801657b235d4c1a8d8db2443a468af3cfe7ca111959c182ff39ab65b539839733c31879e6e063f4a55918bae61c7bce32e07546d60ce750dcd53e7339a7481748c74648773642b741d8a2015cd5fe3433402f9096f7a88ab0ca0a173adff226ef54156e4027906b485379a3023cba2eba4d1f75c1e0ad3a655e36d920a72acd10b4b075a77bf518a412c428421858c3af516e7fbf909e67e2daea4154c89813932d3de516f91bc73c5dac1683307ffcfa924336f9cf221a0f8650d83c0ae3006008e544f46aa780f87c59f72c4dd8df8359c721d564e15ad4a98d254134b39c608dcf1ca9964449c0b6f252a7370a7733ed21c8bc19842f198cccb0cb10b2f0790324f49d45982c7c55a0b05bb6bec9f0987ab317b4b3a1c67833024364860394b40b55383f4b30149f8a98b0929cdfa3a0fa6b4cfe15b9c3b3eaa20ff9d7dd9ae6adc6e24b065d70ddd9920e924bc0354ec877c5bf537ef8851a1899974e8771e231cf033371bc7956b426dd8074748cea0d5fe8bf14f94e38ebed4805920803f0c0f803bd3354155444dd8522be0492bcf0ac1fc50130ab1384a8830d4c68365782ca4ab2f42e2d1db03e6e40d2772d0b9ae5d19bc22df95d0ed1b47524b0f4619ecc40d95e50aafa21d201a457d5472133926507fef81e5fb0f14206c1e724543d874dfc17c47233bf1fa415f626c744e23b45d25d970461938f9588cc15ae798681dae1c7926f10b1afc05a577395bdcf69d8c4891491aade3315c3ec427918a2444d5117c087d9200abe3c21c399d423a386a42776af84ba652a7fca776f79b8581014ae58a4d533b60483fd1fbbd00672b73ce2c645354fae3c830ebc77e3f14389f23661ad4d133dfcf7928ee3fb9f5dd3525f0b3a06c495b3985f1779a0758f22b354e48a89e7270d5f8918f99b17ec42af494d783f42a3f78665925ef66bc3421eb2e823d1d8fa9e8589c5e5f995a76d1b4695e628f05e7015c9340c2efb6850fdf875606d0e40192f3b9e8f5d4217ba5dfeea6c09f750860c33056c8f4f05b616ce9329a4b080e52646aadf0e46c3923f1b54f2297e01a2354a0e66638c22db31da4b66c0e7436a3254f2be56c8335e8742db60d1aef82a56b756e3f0dd482718c7a4ff07da10101a0a7c127bf0f084fe1d889e49afbd883822e5c98068fd02923ba7dcc2b26f3fa81252c5c6e7816e6c546295d9a8d822a331c4025955ccd466de5be53896e85fa2147cbd7fd56e82998f712bc9c1d2625f8ffa74c3cd3a055d5ac803b3af04d8d1b700e4eee2402a4c75be49602431af33e28f0908f8d1fd3f54f61c79244a12fda4e8205b347ecd4fae50d8e7f68070e8d38ca76ffd1825d477ee19d31e4376ee833c5b0df6b0d268e330bea662440f4609f8383f0497e3e368b7e309c5756a6bfb027c4d4e5fa360bc64e5e58d07f3152ddba3c137d7a036d2596063406a573eb4446b636412a7fee0f633eca250841de63ed03dbc5fc5935bdd7a29b8aaa62d570910976151460cf8ed9202c7a82a26dd28a7fabbb7b8c3ab4a18a254bbbd018c5a53306da4e850ab52e97124964df7b9a110425d68e38e6ba822173d270681fa3e1c78af94f594a22c1f7fe3a2555923b1f35bc9f9adbb43ff7fd09a76e7774abd53b550a8d59e84831e752954aa14c361388e28f27d14da581915942ecaa923dfe0307769f136fa60cd9b2135b4f040b8c723a2dcbd5fd9bad72e53d916e12eadab314d5daf26acca1438f0ccdcb543be88625e3ed465e72ea162fefe33e5132e9c00fa0e783541c9db95c1a1882a737c649385a02aeeadbb5ffbbe26897d796a9ce4a504b52a62650afbba3d211879f941fd3e8a27c2d369f93fbad88073086a912777c5ccceb6a78ab003271047fc3e09e9b28533a8004058771b9c808e6935650f97db27e9e69641fcc5e7bc7fa551a29f0918b669dc4962ea08faf19544d3fee52dce2c43993a182928068c881c3cf6676acc18cd108b00e2aa7b3b51404d46f0632445a3789cf77e530bea290807eb89fd28c19c440e1ba528a6c68a06aa237a5f67d9d22ac3c7426f7e3d2c11b86b4cecb4199e1fdb997cab04fa073ef27fc9491e4f9958b76ebea3e8ec57e0595dfa5cf8899b4af964af5b1b40928f2e41264ad211beaa81d63a18d061731df1a8d9777d775a6d7062865f76fef1a16551d98a0a8609c728e5fdf5be03477089363265ca4ca42f497d49e09a9ded1d9f972a304e164458b48551633a3a9d7f28ee4c4e677141388b9b3f0511864eabe4fa6164262935042e9d7c8acd6e3bf5d6b87159dd4cf9313ea6b1f76220dcf23d65c5501b27a6749d15c791fe07ea789b7ce7aeb34794c26b85e7dd15d25f9bb1bd9f19b4795d5009d57aa1566d72b08022f77671c9d992192029e0b2069e4d49eb37ea7a85223f7bc4dde15c099b478c93e9d9a039914a505fbf28c22362b10cd7d5e9f4b4bfe9f9cc387a98412de2c8b505fec7018491182af0dccd91736f0269c13eaa6efaf78ed4d293927eef2c3a71930e6e887a107a69062559b7992e338a4212241c9d113fc5f455d329aacaecb0da301d363b6f7d04472af0ff9c96a820a28deb246ede1685e6e8e2a82667e658238d5d738e552ae3fc1419d04350681427d686f036071afdf07347652ba92e52b64cb5a73d6a87ef6c0a5d9257047b4f1a167de6bc3353155a1e8bc68138ce87db97ae3a0e579f0ee13542aea159eab8c3745970ca0bcab66b133535efbdcededa93ce95cac47729a1bc528ae6f8bc366919a0f5263786c66c77cd193fe0343efa6aa01e39581929f5c8158ff189f9b3552cdddd995e8f2ea575dbda37480a918444a93e22bc8cf42581122589b3a916d0d6958feb28eed75e32e8e0a09e58bec048735d4e98d874790ed1b5751ed547203f5275e43faaa8dfd97b92418924adf69f85e48693068f3998daa57e73852d8d8e9bf64c48cb886f901d5ae4b278466e70673990551c2fac46b65f6c5abfb261ecf97aeaee5a61587f559f4fc05b716fe4a2c63487253b1b41ec49077a8dbde280f36987d65e1ae0d0abca4b5cd6164323bdf23cd1269bceb004cd167cf6375a73112cebabdf9b50a8a741a02eef1d305440246eda29370dbc8652630703060fecdb29de13e6ccf032d26d16ddb06e7fa0b3c6944b35f7208dfb40b4c4ba134a14dac928b679950793b3b6751221f1782e9f3f74cb53c34e4aebfed25b254652129574903ea3dedff6d3858474498f62278cf7d7038a83e11cdcf685734c87710f9493e050698fbe81b8400cac302e87b20056849ae21f1f2a588f94b435bfed33608cde97d590ed5cec51d561deb72df885c44539637f519de631c9c8ead40fa580c953b8eec9b4b0f71ea73c5c139d20a2a9e088168bbe9c0f44ea5473b01f8e7cb0065ebc225aa55f114ae5b1281f53e06d1e2e022cb0505930c003d6396515ddabc12f48842962ae908503e5e0fab9c578c7d42f486de04e5e137a1d5928632a214ad399d567106b05223e01227879db32a321a6c83e757634ab6450f7b29feb7a6af3b7ff5dd61fd7e7400bd5dfbcaa0479be6e956b37581b4f6775fb49f2a91de937abe853dd516e9dae0ee378a9b95413528f953c4d7c7cc92b964c3684ea748f467c7a904c89320c330f338b69908b378612b2f9e06abddf59bad4c17c39e624c9329b5e4c508bfb7518ad6023b712ae02fed3e917ab485a99ea7a31031bdb6f67d63503052ce1331c30393e00b74f406d5be0551bc68301922d26d0401abb39c96f2fc89ea89c7dd160bf6f2816acb47032c0851343d89eed8bc0e45cbdef4a960571f54049249f3caf2739c25f90d4b28a5dc128abaef7510c31b67e8cdd6a77a1e3d21299e161042559e5f6176366dc6b9e5182846cd667b95f8ecf10ee6114496da73d1f3c8dd1ca3ebaeec88c3395dd6b7c48597c01d79933b477]} \
	-body {tls::digest -digest SHAKE256 -data $data} \
	-match exact -result ce651febf783832e9ffd932903e852e35ef9ffd40c50d6896d34ea8c471cfc6d

tcltest::test Hash_SHAKE256-3.85 {SHAKE256LongMsg} \
	-constraints SHAKE256 \
	-setup {set data [binary decode hex e71a32879f3e1b04b9790a9628061d7394f5f349477db62f4a9358dccbbb1c16c21f596ed5de7b2b78a64a8458856f12fafc33849f568b956c37523bc778d521043294584119474a8e0c20ef52ea5043eaa6ccf7929e51668928a5cc706e21b2f37d6cadac98894844d2143fdcdcc8eeab1b4508e8fd108cea8edcf58e4608b2d92568d5de03480fe221aedcbf03e0fb86822621681dd1eed7907c20e8a89207fc5511399f018d86b020772ec3089f52c303f8a9dca39b7497560fb4473ac89aa533ed3fb73a5f95f6f8f69eaf930edbaac842080a3a770674091d1973a7b1531be78650ed57c624fbd0b3924d4b337f82f68ca5ba886c8cb4d12cb63495551aa89a64d50a00ca1b08d1377363d9182495b85feab63582eea0d5c6f552adbdd892740d34d7dc7462652209aabae4c5b32934413ec5eac114803e723d9496f073229c0bd71994cbe25aedb29d1a1540158792bd09ae4f32e79c33b9f7c3f8f6d5a03be6249bcfd7812f57b8b64a149330f7fb58b43a0bdc4d3bdd2189a77dd8e4547824852436a1282b8aa55c1488c6eec0979ca531c7c82fa764345c08cb9d8a857c4f617b7130c097ae00f63e1adf362c8d10455b2afc7626ef7ad8ae8a4dae7d6eee1f69278d2fbbea52ee9171e8ef81063cfc7fdd820801a67a656163f13882778a29b600be5fdf6722abd536e8030829a933678762cf80b2bc6ce8fd900fddbfaae62aa6cd364b4df895d210e859091fde50d9d1a2b2ea3bc8530c02321dd66dd6be8cbec19e46c35c144fa8efd9cc0f63bd9e624c98896827849517df49b4aa9719a6f3a37e1af1d79016a5056b9822c1e07ee4676ba36260654be6a07bc19d735f3eea7abd0d00f071edb032f7b77f7f2340fcfc128151fb60f5177c9b436ff4f81d4e4e456818301f9d717f656f5025edae5412756b5c80dc5d527c928347a24d0bc528fd73601e03ee8ff39d09ba3ca58e94b17ca8ab7841493ea746c94e04c4d0f70fcd75014283a7b39788cce74bb5a964e10f82676bf6828305a05daba2c6338e0b9db82324089284710c02ffda84c76aab163fb8df65d0ca9e88868704bcfd2f245582ec4dfb75ab8c12f129717ab051167928c55ef5fabb7be78d0ab30cf68463de1c8744c219cfed83e38e99ff2bbf2b2085b76f0ecafda3a3ba5b3620e635cf1ece1a91c746999e451e56d97b015df1f39eb59b1806391ea655a3155e95ea70fedfcebd70c3b0a642eba8ba56fad270dbbae8687b7716f5d6a609d930cb4a4f6699ca4f275abe0d6091acc3f8dec6b0be237860a0e53d2f1df5b609fd4ffd733f4237cf53d168db895a8c7cca75e3ba861f8c0bed1855d46289d22d2ceaace56f233cc55bf15819a48c6d6d3287ce9519f74cf0cbd707ed8dab84cd2764ffabe08402baa98236cf99707a1f99db324961f3e197a3ebfb8085a3f47255859dcf78adb036a44ca903504ed819683ab5df445a7388db1dd89834b94ba31e142f5821e56fbfb4165abfb06eb2e3056cff5eac76294cdd33463a8135b1e9eadb5c4fc27567df41aaf10aa3172e06da39b9ce808d2c6a0ff5ef70545e4dcb21a0cdbb43a5bf1db3ce15ed119274094d698b37a8e8a46adb2d7841957d48d12b2c29a48bbda001734b6e6ee028ad74c8c31ca20bcfb8d5a8a18cb62cdac9837147191384053114e7e9a598f91e01d0b210151693899031dd1ad1d502bdf96a59b8450e15c59bdd786f627044bf97a373181d9c27605509e460efa8fd6e000d4c4954a0264405e58ea74c00a952987873a3dd3baf9a2fe2243b8f37063405f4b3c0efcea0cb98b292570c4f111e2bd41979fdfb1480454605735988065930a8f4e6bda269a27bceea484a65626c7941cf6124e43c5ac0bcefcff4a6e323aab0798367236a11d7c10042ad4b8684aa46fd25faff1070c7cd4a19099687db9b94a85f94598b60d4113b0ddd0863aee56c098b2953780983ff7e173f61d8c82bddeb41ed4db5d69948027083a4e33252395c5c56e85d6f1cddf3923f10c0348012a9f31906cebc4fedbf344728ed571a375e5f2bc7a5e8b9ec1251b0ab2665c5bb493bc18cbf5a1d89d921d09b686765ee775e50f73abd82b6411e3b38f1a4206135e28de871f82ca3b8ffc7053ea85ae5101f6d800236a0c2e9bf88c10b39b98bd4b02421cbdea4c3c496d36e566322a48f6c296be79a3b9873fd3e4d5b6cb9c18e6c2f3fb454ac7265ae9ddf98dfe4b35e0b2cbfd0337ac145a005e5c985488bcbe0554b16a16c36030ecc5fec66c99be3c41f84a44786c4c97087903dcb8d72f3d23f4cd80e0d9a067f09f73a3ef9e38861aac34d1f8729663569569f87b1fd6e0b954ae2e3b723d6c9fcae6ab09b13b4a87483b203a47983b6563fd702dbb5a553fe4e1c68915bdbb44c8c6404d8b3ce6326ccbb3a053b8abcf454ce813420fe71225e6ee4c4c97d08a2991082d74c405867a6500ed3f7e20feb9c6a4fe4c8e22faa85c0a177f5258ca5de5772c1657150e01a59c53635f377e41f94b31235ba533ec8fae5d3683909fe621f1bbd87c912392fbea8557e25bc87e635f4e7edeca6853104f900a92347542d52c6f439b06819ee67ff5959e0a57bf8335b8a7ae2f028c7c6252540490e5048d6bb8d038e18285d3d12694f8cfb695e7830236402f9ce9228b06bb615269aba9542b16dcbeb0f872628aee79186f81eeabbdc31b688209b13e4f992ed56d98b75a38800cfa976710b8b50a9570ed1427343db6b6567c6e96d07f85c3b67b5c460253943031a0425d581761d475b9bd1fa124899765c678420628f9d6622d86c3d11edbfcd0562aa6a5348ccc734ffd4666e4c445330ab75123de7dbd64ce78bf4afcbfa96343808b449ef3d4063a552a1a00ff363ab3cc32de027a1f3b08d2a6c47fc7ec76d2d479aaa93f81bae345392efb82e0e94bf76579278742515704f8f21a7d3c679e97003c05b86bede55e021a56f7ebcb5df977a9c02ded44238054485f57ffd20158bd9d1706e93bbafff36095e69d5d4422d7d46ec6668008e5173ba0e0cd229599e0326fa38000cebbbb962aa79c1ba904048d85f9549171a3d04091902af5e5cb36907206d6f9bb01992f97e36e92f72d9c39a82f1df4f83d0e0ba3ee7fb85c7d1f3bb0a94472ea723aa160027b3fa8ffed6d47e0493707112ed15a7451e674101898ce135f08e77e0e70058d488e591ba69cd7a56cb418e0c146179a380cc734a13c0cdd8d283c9583201afc5d1b61d1264ce9f6df08b7fc53ee8df8a897c04b479a0f50655d44594745f2d83f436de10af1f14d36b16ef4551f0ff81a13e9d47a3748246e14b929b9363f9955b2d79bb32080210a2aa849537c2011030dbe60c79849b21deae597579553c836c63991bd6d191aaff0fe6bcd6a60ebf9e1c860ae417691eb4c6412b0c7d1dd6919fe43981c1e82be90cbec218e34e1753c62649ca7714c5cb5bf3c43622c51531ab021c1c21301bc86bb4b0e3c3e89fb7a46dd215eac39e8b351648dd8e5bc8b34d9ccc9039900003f26f8d218c04df327d04acabb99e325d1b53c0eb070877814e5a52c3513164046a9861b987cc602d1892df762cce08a7d6523347d6f4ab0275e3b59fb13bce329ad63593fc66a90e3ec0745c8a7ba8d22fbaa9d94346eb9e8ce0fd0ba1d5c7f54cd2109733fa433fb73672471dcc9b47eb342a899527c0bd59f833ee6827d6b54634faad73b1b4264b9be11e2bea686dd567bf3f16beb1c7a6d45e324f5a83da51a3fbbd06b2862dc298cac9fdfd97abb4fc6fe30c344624391b86be9e9656cc35c71caf322640bbe3d4342fdb2cb16b4f9a435dc0b0073dda76b37a9d02d8f4ba49646b40356b3777f8273a0c9f3d146fea41957a5b7d78538dee4e93c790b8a8d1dcd978068e0b46ababd1da7fc30edc937374825c2f3e6b073e22ca0c0681c6068ae221c2319e1896c9dc8bf4cbc05e3ee1e01fdca5f8e98dacde88fac3b8dd91786c8490dd58b56088446825de94bd9392c29a03680c96c63f6a16b94ec3b519ae60ea9918a1e5b2f1efb93b83f1c0398e033bf8ffe43a5bffaebc702f0c164732a799056de16f340ac6c65d433f31d9dd894ae4f2e69df3f493c148eff9c8c30e27dafb61801c8dddb1d6b4a5e7d61a883e0feeca7c863727ff6f6815f492344acaf4a37ee6b46672993368314f77a59509d23f0e0dbece9fdb0cf829643e43ec7731264b7cff66cf6423a06fe0de210fd1dafe46000e626410e122b4b19297fe16d7ac50a8c436fefcef84e802d237fb807054fbbf3c987f85360c3d4257d9878e2f5c16d3cd7d0747df3d231e1a8f63fddc69b3b1101af72153de4c8154b090c9815f2466e0e4f02f3af3a89a7fd04e306664f93e5490d4ce7fc169d553c520ae15dd02c7c613c39b4acd00e0c9a3c501566e52cecea11f7303dd1da61abf3f2532fd396047b1887255f4b256c0afcf58f3ae48c947f6dff72759ef5d7347f51621e750982a66459ea49046662b9d741d864d629888371c44335d686024054b692bc4cfd639dc04067fc84577d414bc38577229a1560bde416f130e18f5a0480696bc3f843ab8cc922dc436f081bdb091ae46234d7c1a2ed623a16cedb0c1f5d6aaf62709f6a5a62af8ada13bfb405711d3f1da04c00d13eb962f07481b0f58bfb19b0fcd354998b626ab0ebf0a44ba9e0d9ad62fec8c966811e6698f00337caaf1d27f38be4cad1e00e506e47571df21a6699d34c63ebe35dced192c25d46680b3c400b25b57ea4ace8410120670d083e487b97d17cc933b3f6d9f85529b20273f9819a3d2125923d8afb5b183e995aa101cb270a6dd1d60828e8404512fb189dd775373ec24018f658f7c29b5833480714f0e773d1a658dec774f0fe93a218dd589358a7136ea77bf4cede364e7b7ec514957f9a22b72abc6518810e161781a6ef5475029ef1dc42c0d904558bd25d5f632145e9eb74ca05843b76e024ebf1af2e4112edcf8a15cf5faeeb858ac8725a931ce0df966fc56ea76659114a9fe74a77d1c8a51f87e29623c8ea52e5ce4c3b26e0c707be289b3c41219e1df193b10d6e9efcd5198bd12bafbf872a0764497591256eeecd0fba12e3e5cc62a4780d6c64f1260a48065fe475eb58977a2b089e64534ef13db5b076f22b5a8bfdbd4aec1d80ea912577ed74f8e4c507a872e81a02e2fdbb9a9b0ccd0e7acef647c40800dac6a1263c511841bb3453173cec967d1f6ce1ba6e202da99b5c903e2d2ca34f3f2ae025e7424edf3f42992281e8623bfc49a15a22f591812b3954c00867db2bbd363e1cc09c2fa1e797fdd63206f9db2c11a327538be6e820a973388405ee2ad761016752ff093e66bcf79ea7c8bbef415d6dae6a438c433e1571e40a777ac11043d0b218cb8a091f2a2ce85d9e26ccce75676bf1bd0026b615e76f264cff92ea4722798c8210968357e44fedf7d90815f236cc6478d1173b233a4641f6eaf4d7f38d2a18c33b6b35dee431c3763135ca7c426c4cd77d793fb5f0e5f7f5db8b6bc16740680f78fba917733a6899cdba5e4c10a8058963d1265681eaa2ca3fab18495758d4b747dc4faa37c657c31d2a441a382c48ef32b3a17d83b0fcf485f86ff3b3eff95b3661bbff98621b929dfa0e4f0f55617958a513936cc541055ce7c5493352308ba34050a01baa1e88ce9e3f533cbff9c8440a0f50b3b4296d12edcac22c3c34a93cdcb00447eafb063dab39df16b87c5c9376f71deefa10ac469ee2e7250a503461bb5cb493b11b9b5995903b43fb6396b5506d5375039133666fa030a4592dcd9040a93985a90ac8a0e1d5103ae54a17284ac4a9ec6d15a300d48527208527c5672147fba41f431ea2146ac672028a4e7abaaf89cb93386b94620443303ad8dc44c19b8365a05efdeba1e3e67fdfbebd1b24806b8912540daf9c901d49d6bb42c7a6266940c8b8f6dc1eb2f8bae951d3880ce9c7bb670309a0e8cb0dd3d539b95e337af5dbe4db8a01ef6a75b99bee324ff84e46c91dcfd016db179d64d2fea0771dfbe18da14137eb987cd60273ee59e16b2031388305017ff80854834c5498b0ba4b94dc7a8480f7ae5c921c0dccaadad9f24f80436d0e5aa40fcbb5add5e2799ccc985edd1fe5b4a5ac426cd613b5aad946da46eb42672573b06b52741d4e504a01546b457dd6b0f2ce6f8b496dfacfcd9069e2c73f9c6efb7c9c003b851cd3268c61b84018f46b3a4561edf405fab83b6186ea83bf2ea58fd706356097de60c6c0389c598b9f41c0a3d20b42a625f2a73cb9d48d3b9e57c55212788fd02387af3f51adfe5067e34a6c2879d1b91d1da5746b27605f5bf41060492015c85cb6547c3553aad1bebe1bf0eda01da940879abb23599974e81915a432e29eeb1a8b3ae96c23ebba3430d9f48a14830120cf0b736ae18526e3253970383697a2bd64e7196ea54d6448e9f8c9965d9e5b3e628c3fba65dfefada6f066f1727ca9e5d1cd8ea54e2c5a6d57fcf29ac1ec1209d081729a5cf639d81ccefac75cca4b046072abb885251722095b01f017e8c013977fbe731d648fd30549ae522c1d10998f6b1300f0a425075c976a3e9610dfdc35fb65dd4da77c2efee4e40a76d19525bd0b372707460e7de036bdfee2f0dbd42a791b41543b695c48255e58d374333977f79a833f672e0622bd5f8975154e9be37d4147c7ace1eb9f9f5fd5c89195355ea4bfbe1fa42e20929fd196c2daa283ff7c7a492e58704d53977b09aca615b9df9709301e79696dce52b68f62cd722cecfb18ddeeda8ef202b2325d161e4f2759432971b2537a4e247a70dbcb6a28072a7dcf6e9fafb89a3b7408588b86ac1e7a3d730b81cedb32438b8314734d4ea34678e083975467765c618f74836bb70fa0ea8855f347f6ba89ea7fc1d0c35071af710eb58c452646e3ef1a498439ea6b6bdedbf98d5b7767863bd95c8a88d802f3faac6ce51e7f6c70914b40047dc0b2499ee05eb675b799c6d3f25d06ea4fc7827a3c12183ccd5770dc94e08aa3d484b88f280e152341f1aa678d3bbc84224ff984506dbc1cbaa8634579a39d589053473435701fe0a0dfcf4afc8131d2ea0cb78d6ba8375aa1dfd6408c11a2e88e9e54327b3d3d3a5ee4a412b2b5fd53117e4b19f08a20632d5e38722eb341e029d68dee7bce03acc680a743525285813325329e816bfdc2b7b4084ee3f0d0ebec9c52ecb99af994923467515def50d9c981fcaf90c625f5db61d43b4e62f648514021a1a73c959e2c8052c137d4e5e93f1507a191314f7902f81acbc08228a1f2629891e71b4e360ff5081772bbbb2c2e7ef2391535b0c8b8e74a74dcb6ce654a841651dbcfa9e8a6f2e5c880fc572ef2002acaaf3c206177afe1cb05a97e2ec425395607b22f12ac1a7a58f52f304e34494fda91bce4dfc9b28f32edb2be4ae9b66012fd7b546069dc344d41bced166fcaafed9f50949029af9140d77ae56635c8291d2f83a04e8a98b219f93dd4140f04e9781a6fa62f01f7a679555aa9fd32caf2d900539929690062438e1a8bd38c787b0e859290190d1b1d5109ea627c6b4f6bdb2273b5ad8f83c36e62fb7ab17295e3157341f8ca859a844c4792b56049c5e298085c7c3788a363df3a29374a5c0d902165f636d015e679dfa0fc094548bf059424865353cedfb22a564c381aa31030b6d037d0a6389f4c9fa87ed498029b33540979d18eec993ce459dcf39ee27e135a448f6cd968259af0c0a3add4e1fafa6c29bf8d554c807281a74400338487d660255551d61f09e3678c030b88715ec920f7bfdd237905e176e129c49523cde87d05322618d7cc94885d05642f3b273e3706035785ec9a085879f6e7202ac0c815769e603e2cde4cc7d6334e4599f4b7f2d72262f931cd659ae423be61140103adcc0276a288cf6a9a6a0530482847c508ed85a609c30077b2b238d0c479ff19caa7f70fe276008c949b03a0c37070f3cdabb597142af3bd2466beb4e6b72b78e08cf4627a7f22113adba71623ed30b2d5b42a9cc4d3e7a484742de1347606af73dd8334d6fe9496f1ce781705f8e780a5796d4d78587cdc475cfedc4a11213c192c1bed848ee88c5dc5ff19c64e15ebb17de62fcb2323b2f1a3ba0c7422fbad34fb37030faa9e7fd364949501373c627e343d9a29be7cd6f7cad7f85f2606515bcd5cfbd4dc16d0072cd12f336edb73803edc330094d8a6de34e1366784d1e6f205065e809df23b4d815d3ed93f63ad5be03a710c40c7a119946e3d39e9decc9c54bba17f5aa0f02b04614a5f33756e65dae0ea994cda544e5bc77322af9d80bf1ef54b3dacb3bd2418b5e851d57135428157f63413814ec0ed858ece508e81ded64bd2580e9af0dd40a37f4dbff7905676182a692f4cef25dc40d6a977326e701d17dd4afad7299b1eb2a5af3d791e262b99fda50aadb3f1aa51e1308e19a52745e1a272fbe8b602057bc202e8662d361465f67430144ba8da6144efffb4b4490351e88c7c60549697677ac54b5f4c1ab2f49b633a2104afdec7685466941a69b7b115e416ae53bd36fe2672d0b5092899de62de83447d9b4a2cc1fa3d28461de5b791063543520a76b85b980317d3043b8bc352960f24ef8ee9f84dfde1d5ba1fbe008f62cfddf2e91e90b17ce838121a75537c0ce179012f8751bc236137e2c83cdadc1994360ad0a95c3b88b6b6f6a9339997325c1894ae9d94e13826eb1c61cc9678e44118b6ffd114b2c103ce168a3eec50b0df520e7e950849c6936dbb8ee5b9e23d56e48bb93e6093b04febe6100fe215030bd3d331f6426239474e64b200bba49f3637fd8f39b67ac10baf09ed1f117093320c874b49c9a71ab30b9c4da6123c846f6180f47b8cb49db775e673f4d0d00c127aaf3d080494e55703c6e46e642687731fba8b4c69fd80e3df004729c6dfb80d8c9f899999b813a3e579089217df12e1c10eb644c4a2250148ebc91659ec3183d0eca3a6ef9d403a1f271ce9a3d2a12be401f7fd234ef4a0520d8c5310820325e61b3d988c90d58a2f55a3bdaebdccc1f718e2ce0c507a3178ea0358713d97641abf99f6d74f5e0474893f868edcf04478c7e94ff65310453c05c0aef27b88bf0d2e5b3a76354449ad4642eccadcb613f7a38dfb67c3715bf9f546bf1ac831a73c0bf3dbefdf22ca37f15058f91988b0e2104348e72df7d6611d081160a03cad05bcf6738a9963e6932eda43803fd2bbc6b29bb0eaff2e54dff1773e5a90044118d5c579fd10a25f4d635344f6ac4e9523ff19ebe9b37f47e52726ae7f2422f3e3db0357adc14874c5136dc5d2eb36cd784a202269f785300f0298ea24b90345d53112a52327d0d7a8d35c5e9b6935d53248511cf217ba9dbc38406a01db3fb78b6c85eae3b0c5e85707d167b6c2b63ce06e2f3408b099f17b2cafb69d1742b96501df8165e8b2375e455f89bb74527511201d00143eaddbda4459483cd996cc00857201206c00352d00493d2ffa750e33029cf9bb3e60ad5833bfa787bea68fdc6c0002b9875a7251bd30ea7ad1a878d48a4189541c5ce6536f554d04231c455729ebde87d70b6f6af0a92a32766745642b8d477574ed377a5bbcb1189342bd0f53a82d21d7ad9cb73f1464cd653be4606ae2bca5c4abe12b8d587c5babc437735dc756fe05ab8ae4fcf532d22a90e657dce4414b8823a3f578aaf733c91b4511bccbe4a2fdafaa62beee0cb742f0bbc8d5f48e0d2bbed056a236ca4777b27668f5186e870c047bbef9416b032ae5e521fab5eb314c07f6cd9e8e5dfd34244bf7ab4f5d30dd549f6840a1d63c6efae2f1cf8af17e558997c8c2143acb8adb263c23e32926ce1a55ed0981c6c96b7a45c6a8f6393ad4ae33e6b16ad938e861a5a513466adf7ac06fcbc853b540cd1e8e0f3b8a1b0d55f04b95f0f4c1dbd9323ad0de1b8ac14fd12d6301ba4a18e0421c39dba91f4c35fa5f54e5347d1ad9d7663e08c51182d9d71f715a07cde8617f70e52df5ce9e0126dfb222bc738c66bba84b17c5879a955cc64515dee905bd314c8f96d2a17943f05d2c1dff4d871c7981967faf655f0ebcb26ce9a1f4175001df97aad220548b0148215b7f53c1477b829ec4e53366a271546729f3a783c66bda9bde76d3b622b431404faf3e91944c1bc27c096a37fd353cc27b365be18cc9ae1a96332414c793a8f78f21569e6f65cda0098e82597b52cbed41fc89a71fb5ca828689aa06c62a0fb58e58442e555308c5f1d70431a974926612c8d94afbcac07223fcddf2cad1d618c1c67ff7c28e6d92c985785703f510bb51fd9343ad532057d31f286f3245bc8fbdfe725153925ca4f51c4730175ed76ba43d7037a0e95aa2284321d288dff388f762c3e174e9666b190e0963503c56e57dfac88d8317dfef980b42d35b1b4b92f285dd2ea30e0b5389dd27575b080fb743a834bba04940aea6fa13d81582054c33ea367f6a7acbfcdbfc3982743c725fa9d82d589517fd5de9720d67449eb1034002587a27ba28d5940db88b58541f5cf50d1adaedee967bb425a7f764ebef668b60cb958736926c26641cc853e9772dc9b995b8f7378c96bb676c0ef2d410c48a87f868058aa92f27a1eec013570a509c6026896dad402d43b9d2147af1b5cbc1ea77480f20cdacfc399718f3475943f18335b2adaa61ae01bf72be69cf4eead5fab0dc1093805438bdbe299014e4964da55bcb23a961a769cab6535bc76c801b4b4d9ab65d51b35180cc78665a2cc61558f1498c34b097d08e2589ad747f4a265ea5fa7cd8c258cb452a9be2819231fce0aea433d6eefdfa5c38a7eb40f7a76ba74271b0b052932a5d80ea9125c588590edc61b70a6d583bc77854a1c776067fa7bb970e5e7320e33c481afeb13737ae2613088239cc2519425d164d726b05c6f269e0f24db4508a83f87387ae67ae80b8eb1f220f8be3177f6f436adc6723c5f9e5d5e90886c084a70aaac887b77b6549bd0c12d61d10bab12782666fcacf1130a7ec7f097aef663807173dd7d71cc05b1165d137f04c779a0e59ec9726862d39389b10daf14ba399664f54192711266f70a2f99fb5e4d29c8c1059fd0ad77e7610784b079a43d14db0c9a7c627e70be96349d897de78503b496c3b0bd8418969b80a79f9c68653e77f0cb5596a0ce57b51c10aaaca8584f89eb40c4e2f32d296a7a84a3c1681bfe9199ee96d6df14777d4bf1c331a8ac547249e3a3e7059ee8f57f828390ab489b518d6d05c9442a671648a69db3f06b5b9537161473bf531b65160909b039d25ee056ae6b18d6f86fa79b9900db867bac1a3d41e12e2b350ae1c881fbca1aa38f667c1b8f6b9e66d658cd30b35174c68f2ae3cad0c2502afd921b52228557a1760a851a3b68a25de65365d580bcc2324cedb21aaad4361b3b9f99e5468af6b65af5fb1535baecc3e5bdebef2dc576a92a8a3199360fe6f10d31caa02f8002c9854f6573460784821cc1e7e683139a127229e9af3e186792bb7035eca41080c13d3f4c9c36f87080d384e2214a4f35546df460c5889ac1e88d8362326ee27a88cbed37f8cd34baa75231640a4a20505960112041de3bfddaca93d9d8559df7057782aeefd3646adde0eef3084a2ff20896a8b18d06a3224fbcc7234821ea0020882639e90f2f860cc6e319831423234956e2990fc87b3831a948c7e89a709cc14800614e4a3e181b4d3a5de36ea5eb04e7e66231ee6b4867da3d4d2288d8d3d0fd39ad864c3827f2ba184791215d532192dd935a3e1a58d997cf3e5db2c9ad35f0f8a6f9ddc6bc7958a760f3f5f262899fefb5f18231736f28262000e1ec33d86966d20fc590de986e0f2f72b10d212256434f6080579e11d4697e75dde96ca2afabbb31cb3d953743783d771f5596d5fe02e90e0135e3a7e4c1dd236e6761790ceee9c5b975e93e200910680573cb8be1530c63cc734919a055c7725c0e1847c657e33555e2e3954dea32ae2c0ec82a455f3ec7abb8d84f504ec3ca6e879bf2261031e7682a8a2412442bb25ccf939b734e0aa264ac99313cd35a936d7af263743e5b45b9f5e7d4b73f81db5c5d36c7b347f55cc0f893a8ac0d1235228e2383f80ce9b512ec008b8302be90f662b9954d72895d8744cf9ae7237618526c3839faa064a139b6df32bfb6693bf08322ec88f84d0e813753f1363e0ba5c8bc386cc1225470f7fc8cb2b4820b43136a7bb6ad01c9d5757a2993e1865b424b252c0696bb3f8a14660df1a78f2b1027bfccda04b4861b2db5596a3022ed58a24f1beec192af57589b6cd9e304510af4291b40d53a0b496f8fe95c6a3b495096e30d0c8ad12b3f8b44b151af0a0699415172d068bbe0c504b0e353d9f8f890ef890b48389d3caa7408e24052c9d025d8dfd872045e8ef9b4c14e36c382818275e81b8a15216800dc90099015683a167f7a560ef34b9c4b466a33ed71006c8defa948ba67823aa98b842d284010c9d4ffcaf28c7bab92258452995f2b9b4218277397c077eb370d498b57f01be807c72078b6d4e5a6f9ee34228876397b898de3ef12848d82e994de4d8ed0ed197b57a92caace7963580e1f810919e2c7cc53ecc5c0eff16fd7a71173dab000caaded648dd5637e0b37ed0d1822306fa890d20a9ca9e7eadb89acaba543789a2426ef17443f793ec51ef3c68fdda428455f72041cd655c1ee880d758ad210044f6dc78bf9f0f9ffba9688118d425b55c7c09ba4ee4e22bfcf5b3034cb8e6086720adb8853f1cc0a112614b7ba583e3e553cb5b0ba193429a78a7fb30f805167b58695d6fa49d8a7f357ff81bf27352b185a28f12740754a9d9e60b9ffaec9f141685c3c9700071d88b0b13444b7296337a25c2fdecacc69da1e3d0d4322b16a3e389783d21f40b6f7b9929bf011002fdb9cba3287bf20cd85927d7882e4f21bd47fb07352ac6ab869fa0b7d6c3ca4d72cd1a8c1c9285bbfc78288c264fa724c29c30ed4c0b26f6c05fc82a15f40fba351c88fa64c0c6487c877c6b3936e1b45688f196ec336361af44660d07226efda7309d8a7b973236daff99f12b448d44db76839090442a70a5d600ed24df567c6b91de98db86580b9a58e7ba9728e84ad3ed8d66c2addaa8369d3f26f97b54aad4c8b2c1ff0eb63b2d1c0c23e724a15ae27665860de1027cf4026766ff96e82d853db07270a0cb4a15c16dc9a5f836e96979b27adc8e2063409e101991a29f68ff796e46badd15bce6d183185df4277adb8fdab1b8f5b2ffbed8dfab6a3ee8e1a60432ab5824040812d4f29c79a8e183db2164d71dc838b6b13b1cb8e3bc332c0b56a41cb31644c02c3422d273a6f398cad6e7379566300cea3d5dbe98bb2caca1f93917561426598587aa36e64edc2e3d08b87f9a602776ac781928f3ac23e80c547827dbae4748d147df564c2119b8a43f7efba7368d989a53e5848f1fb762ad00d7caae65162271ed589d1fce2adc92f3a1584669e0c71659395db58665b10676ee7c38a9115af9f09c97dba68dee8bcda5f1f27abfa6a3009b111160ad37ab3f12b9151ad776cbea21c30a3ac172e116137525d9789be2e2714b2d4f0c7afdb1eb0dce0ac6fa8a427e9b15fb541e5575704e6b06ba3b386752786391e20f8087dde6be296e4a978209ac9978c4253b5422da4ca2e2f93617b5054ee9ec49d62971e08fd73c0b963169640f33704c054ac1c5150e815a4e6c2f8e69a789de610f3d679d94cea1e8d9045de1ac06d765b1c38b8eda13d2f3ed18802e6b2921a3b1970871f284a201d160f6ab52e67bcf31be9a047628f7b903066717a568a830a9252fa7710c8093c305cae6b8ad9d9443097d00632f3d20568fcfafd6b6f67a6e5e69a880b4c1f11679470e5dbaa1675e3aa11d31a517ac500b16718fa280f369a922ffb21beacc5421f79ca29c4bbafbc8a2b562191bcf780ec7f720a9dc3e33ac080775a06f67f4a6591c37d0e101944a0e6364f9be0c3701709b4a3b6cbd54cd756a5bf0c466805cf7f78de705cdc02520a1bac572e525999ce85cd5b6e33583f792d57b9e3a8fdc30d9054d2e91f7e095eaf41adeeccc3da968e9174f525e65fb1b62bf31766baaa01b4e71cfd0b412eab971586675934422876f6e9a8d57fa1c6e841a328cac2ed248ba036e1c8d227b97e30c8e21f36394ee605a2cf68aa6c7f6da3b25ffd9ff23ebe8609dd7db95e500a9b5da7495027ce86c587b209f029a5ea59060427d92317f4a17b38527f3938e35d2bfefd0b7471fd3e8199ded83e000a69895f6ff6e776d6fa753c70ab2238b27e1c2f63ed88fff47876cb0fea145872dd21b7fe80a5250b98e02fffc5801a1f071781a580cb40127c5091c5ae1375cdbcb856fcffc7ea3c84a25a2656bba4d1ff033ee84ca6fc0051f53328ada31fc10f358290f9b48e11c4a5050ee53b9f716ecaac57d87ffa65ff4ff95f6e2d1df6dd8084e2f8d4d93162cf78dffa67d2a65d531317acbf03ea8f442a93791738162e81a41b838f9245650afac01da90719d286bd5350cfdf3708be10eb57cb38c60b202963234d83f4d63dd4d9d7680472d84bf1314d1556f372a4f1908fafe5b07a455de15e7672e7bc504f53af0d9258748af6d929fb2fc6d5de16a9a92d067c86d886bebf7228c61f2ab1562efe7973b02b15746fe8345a3a53c75f2eac65d234c1ed21cba96d3808b54209daa4816c9316962aa4442b54a8ed4cdaa594c8588ee8da330c8408e57dd84c953e6772eb2534c1225276dd5f2893ec41964cf8b99b35941c0969c376897b1522dfb013976f6bdd8500e81221c12df0bc893ebd9b639165034ac164933186e6d747e52d1978a4347a370192427ba4a07507d1dea7efe2931058f5b4e37fe207dcfd70881849c80c2a7e29246b5ede4491976d25844612676dba6b7b0f7a75c05a89b7ec3de8bdaebd5dc8924473c4243bc27a58da7007293ff88d81be2a285979742421305f6d625a5c46a274c13e88990f60405376ab21b19bc28d9998e41960441dee98b6be7029040c1da45035b7d30688a5955fe497e82a716948cb8f4a38840c1d1ef39a1f53dc80ca7b298ffa122f584f48339cd20f2d04db72cb123228b958746920e8b8006d0b73a25336997e13390515fbba1b4c2ce2acbfa15619596d69bc22449083573d16dec0d610dc3e399491a4be26bac7b073a4d9544249f227a7bcf06879c881d607d47ebb070a7b29cfb99c84c8f7aa401f8a65ecbd091c707a3e7c938dcfa6c0471d8409026d5c6c5446a55588191a654e280e72b1a0ffcf4a086dcdb3dfec813f8179c8e84b0a8989ff693a4e6a41a6684479ed0557c2cc7fe46c1ed3427ea356c80501a3edac08d8ae8d3a0230478bd5a75165a1768eef8198218fd63e82aef3b9d1bb1a9b6b72a819bc5e8cb4549cfd193ce36d458ac1b8ec3327a21c2128801e85fe359d6f4e60099cadd43e8e624961e26d510bdfc98daa4bef2024829b64bdc9d2dc3adf246a46d52fc21620641f49ed0e3512b48f669810ed389dce8e075e4340f7bbe37d2d9810ec3f83302ae89702cb01a0329cac802b2bd3d12c8ad1cb9e4f6e68a5df11c7f5ed31cee73d0d14cbae9dfe8077c82843b1d706c5162acb800829894ad57e9a2b3982406c24f488f0bef174c8a8205801852e85c0ba7a2592711166fde4dcdb