NuHash/libnuhash/js/lib/nuhash.mjs

455 lines
51 KiB
JavaScript

/******************************************************************************/
/* NuHash, by LoRd_MuldeR <MuldeR2@GMX.de> */
/* This work has been released under the CC0 1.0 Universal license! */
/******************************************************************************/
export const NUHASH_WORDS = 6;
export const NUHASH_BYTES = NUHASH_WORDS * BigUint64Array.BYTES_PER_ELEMENT;
/* ------------------------------------------------------------------------ */
/* Const tables */
/* ------------------------------------------------------------------------ */
const NUHASH_INI = new BigUint64Array([
0x243F6A8885A308D3n, 0x13198A2E03707344n, 0xA4093822299F31D0n,
0x082EFA98EC4E6C89n, 0x452821E638D01377n, 0xBE5466CF34E90C6Cn
]);
const NUHASH_XOR = [
new BigUint64Array([ 0x01DCDF00414B3037n, 0xB1B3AF661B8E96F8n, 0x944D2873DB393121n, 0x73DA9A36662AE755n, 0x1F4F318C4ECB56B1n, 0xF09743D99C2AA5BCn ]), /*00*/
new BigUint64Array([ 0xA81FBBC6CBBFC954n, 0x39DE43648959EDDBn, 0x1A641A0BDA01822Fn, 0xB52E607266932658n, 0x2C5B1731AC802084n, 0xC2EF10671FC79DD4n ]), /*01*/
new BigUint64Array([ 0xCF2A8D8E08810046n, 0x8B7E9B2089E268F6n, 0x930461652C5D2DECn, 0xF096E42223BFC8B9n, 0x8DD338964CFE0970n, 0x269C342F7CEC60BDn ]), /*02*/
new BigUint64Array([ 0xB970A920D2ED0552n, 0x010F894A254DA7E1n, 0x8D5F205F9D1A40D8n, 0x50C33DCCC3FD5F58n, 0xB49F31BDE7D82C57n, 0x7CDE04F62A959033n ]), /*03*/
new BigUint64Array([ 0x49FAB2822B9C84ACn, 0x34B8648CD68CBEF1n, 0xE5121147BB4126DEn, 0xC0B31F54B2FFE00Fn, 0x2F193DA38E8CC632n, 0x058C984B429B8AFCn ]), /*04*/
new BigUint64Array([ 0xE07F9DA44D8C9942n, 0xBE2AF9B39ACA65F2n, 0x5D3D8FB1466DC295n, 0xC0051E3EC3F962C7n, 0xF8FDC3CCD4CE2BB6n, 0x9024C0EFC6199937n ]), /*05*/
new BigUint64Array([ 0xA3111377EF01F5EFn, 0x31F59B366C02A3FFn, 0x61B82949760D16DCn, 0xF6B958AF92BD3BDFn, 0x7297AAEFEC69C0B2n, 0xFE8A50AD9E8684CDn ]), /*06*/
new BigUint64Array([ 0x3D3DD0C829EA9AA0n, 0x3E77597EEC96C7A3n, 0x8FD038231E7F1684n, 0x64617B131FB7EDE0n, 0x85C99CE4C5405874n, 0xA58735D41F19C5E3n ]), /*07*/
new BigUint64Array([ 0x8028628ACAF91B9An, 0x194A640538C97064n, 0x04A15E018A4F1680n, 0xF4BE1B04C2360955n, 0xDFB24D4CEF581A20n, 0x3C59D0A0FD15879Dn ]), /*08*/
new BigUint64Array([ 0x88F8E2ECE78AF1BCn, 0xB46B6E22297364C2n, 0x9339F17F926B99F3n, 0x31293489B3B8F07Cn, 0x3909CE1649C9BCF1n, 0x0C46103BFA31BCE9n ]), /*09*/
new BigUint64Array([ 0x4D1A0B8CC7EFE2A9n, 0xAFD7878CAD55E871n, 0xC89CFBC858CF4153n, 0xC4739486C74F75D6n, 0x0BF7192C130AC9F2n, 0x0084F2BC5E81BD9An ]), /*0A*/
new BigUint64Array([ 0x4AFBE975014FCACFn, 0x41DEAF8CFACC41E4n, 0x3C1EC23B53ED16E9n, 0x78B06EB30F1C3248n, 0xDD11165D04285C72n, 0x6546D9B5609491E4n ]), /*0B*/
new BigUint64Array([ 0xFFD1E2E04DC8D260n, 0x07B186948A74ECCEn, 0xB5120E45121AC531n, 0xBD0BC86330810C85n, 0xDE93AFDDDB487730n, 0x78DEB0DE6EB99196n ]), /*0C*/
new BigUint64Array([ 0x79BAA2AC3FDEBA55n, 0xB1B7E3E1C92A567En, 0xA53F69AB4A5B0794n, 0xF0DA7499954F6DDDn, 0x58117C89E1132248n, 0xD95DF5F794C51A6En ]), /*0D*/
new BigUint64Array([ 0x89BC8A0C65091C33n, 0xB04EEAEE063135C2n, 0xF53267E04AB6E689n, 0xB4C579B7207E8BF2n, 0x3FD31E51343CD2DFn, 0x119E523E2F8197FEn ]), /*0E*/
new BigUint64Array([ 0x2E10CB1C6060F32Dn, 0xBC92E732A94E6B63n, 0xF3220D831FD04267n, 0x502C5F7414BCE87Fn, 0x89E0651DE91D2457n, 0x759E56B04482D915n ]), /*0F*/
new BigUint64Array([ 0x43AEE32C6A84E803n, 0x0C5007202C0BD7E3n, 0xB4F464474205D32An, 0x7D17FC95DE386C06n, 0xE8DFBF64567AA545n, 0x55BD889D5853046Fn ]), /*10*/
new BigUint64Array([ 0x687ABE14EAB8DA27n, 0x397B3AB50D72C344n, 0x505EAA6D1FDE618Dn, 0x61BE79865DA13F69n, 0x17BBAB29B5E90E2Dn, 0x010C921972FA8B2Fn ]), /*11*/
new BigUint64Array([ 0x8B7223A4F56FF453n, 0x291B7B5CB98B6FE1n, 0xFD421625786FBF7Dn, 0xE33D1020D0E8CDC8n, 0xCA530C708B739E87n, 0x878AF1F304B8A12Fn ]), /*12*/
new BigUint64Array([ 0x7ECE1F24E56DD711n, 0x2E0869241B2FA6DFn, 0x84B834DCC459B2FDn, 0xE022EDA6319E7D3Bn, 0x59839D8CA03C9928n, 0x644790F491BBC774n ]), /*13*/
new BigUint64Array([ 0xCBDC6F49E6B0DD0Dn, 0x44BA2F8D00346732n, 0x86BCC821586AE61Cn, 0xC7B7491285CEE55Bn, 0xED3912FFD97F3851n, 0xF4AF0186BEBEBCBFn ]), /*14*/
new BigUint64Array([ 0xCA8A48E54ECCE516n, 0xBEDF1864B7F8F506n, 0xD56A1F60A4B36AA4n, 0x49B25AB5FE0DD9D9n, 0x21377DBB5E49FCE1n, 0x708F64F5D59D99E7n ]), /*15*/
new BigUint64Array([ 0xE9F873A569AFE02Cn, 0xDA66BC05CA997390n, 0x8C88174756D35385n, 0xEAAAF16CF4FDA730n, 0xB39F7A55653A3512n, 0xF10AB727BC23E852n ]), /*16*/
new BigUint64Array([ 0x93E96FF8C5BBE2AFn, 0xA47785420253E97Cn, 0x704B25D1F77D074Cn, 0xC0B2093F1470559Cn, 0x8D5BFDD4E364AACFn, 0x550518673F5B1BF7n ]), /*17*/
new BigUint64Array([ 0x8DAC832E5BE81ACBn, 0x588BFB202B7583D8n, 0xA34D8A70DFD1D7E4n, 0xD03B0627B687033En, 0xE3D0BE7EDBDC75CFn, 0x818EE8C5B09F8BEAn ]), /*18*/
new BigUint64Array([ 0x8E3B02E1489D7D31n, 0x5336752B64E3B532n, 0xE4D4CC795C580A65n, 0x6DAB08F313ED767En, 0x8E567E88FDBA36BFn, 0x259490F1D8E933D0n ]), /*19*/
new BigUint64Array([ 0xEAB437D0D62CAA62n, 0xC090AD28B982B003n, 0xE255D768D25704ECn, 0xA048511AF6256A43n, 0xE79F078F4D498B5Fn, 0xC41735FB75B357FEn ]), /*1A*/
new BigUint64Array([ 0x70DA9FC3504FF29Dn, 0xB9AB1F388673FF25n, 0x36922F4CD17357BAn, 0xF09C3AB292E7E04An, 0x90CE0BC3D9BA13ECn, 0x647C4CA63C918DE3n ]), /*1B*/
new BigUint64Array([ 0xD834A38DD1ECD688n, 0xA97A0020DE46AB6An, 0x9CDEC7F6E62EA71Fn, 0x288A5A6FD74DC47En, 0xD44A2E2765CE50F1n, 0xBB9B50B5DB9E4F3Cn ]), /*1C*/
new BigUint64Array([ 0xC66DA90E41DDF2E6n, 0x5A3FE86F160C5C09n, 0x6F6AF0405108CCBEn, 0xF938382EB627FC7Fn, 0x163DD634617F006Cn, 0x5184B1FEDC908497n ]), /*1D*/
new BigUint64Array([ 0xC95719ED07FCB21Cn, 0x5112DF043F6EE7EBn, 0x50F9FD60012334CEn, 0x589FA85104D96579n, 0xB7129E44D71905A7n, 0x3314766E0733528Dn ]), /*1E*/
new BigUint64Array([ 0xDC6C8014C5457CB8n, 0xD635FDCD286A69B6n, 0xD66F232CE27D01BFn, 0x56AF4AC0F682EC0Fn, 0x57DF1D55B64328F5n, 0x651ED4C52A87CACAn ]), /*1F*/
new BigUint64Array([ 0x26D9D1CC79EEC502n, 0x69BF340A34B1EBFEn, 0xFAA5AAAC8E397174n, 0xD0A8F9BD426BCF6Fn, 0x5B131F464D6D2452n, 0x122DD15660D0D6DAn ]), /*20*/
new BigUint64Array([ 0x6E389AEC5F51A22Fn, 0x7EF68F1C54C127FBn, 0x986D4D46E0485C30n, 0xF0A47B39E7CF8A31n, 0x1D398DFDB7F2A78Fn, 0x2FC651D1FBB10D2En ]), /*21*/
new BigUint64Array([ 0xA44E4E8D1B49DCB0n, 0x07A4822049C2F343n, 0xC40AC04A8D6505BAn, 0xD9B91D3F0729B16Cn, 0xAAF39951B50F9015n, 0x966EF5D3AD3F9076n ]), /*22*/
new BigUint64Array([ 0xEA78CBAC0EB6D009n, 0xA0FEA6725A23DEABn, 0xCE729C7444CB94D9n, 0x40A994626627AA0Dn, 0x37F738CDE3D018D5n, 0x4C29491C01CDB3C5n ]), /*23*/
new BigUint64Array([ 0x7C9792AEA745C87An, 0xD1FF5620C5BD8FD4n, 0x9ECA84E3004B56B9n, 0x5AFD3923C228B1D6n, 0xE5DBF79EB3FD283Bn, 0x441712E354084B9Fn ]), /*24*/
new BigUint64Array([ 0xE35D288BD8E249BCn, 0x91776C1453A366E5n, 0xF5D1E1684E95EFECn, 0x9108E117D7DDF606n, 0x81B30F9DA2CE7C8Cn, 0x6497DBD786818C0Dn ]), /*25*/
new BigUint64Array([ 0xC2F891FF45044BE0n, 0x75A1A76D2B87E2EBn, 0x85CE65798AF3C2BFn, 0x213F532B4EFD09DCn, 0x0DAA1DF5A53A6C88n, 0x3028606A50D826B2n ]), /*26*/
new BigUint64Array([ 0x609A62616379F33An, 0xA339A3BC53E4516Dn, 0xD7AD92616A5ADBECn, 0xD043726D86E924AAn, 0x8555B564F4C29865n, 0x56AA12AB31C1D6B0n ]), /*27*/
new BigUint64Array([ 0xCED9ED85C1C17BFFn, 0xEB522325ACBAFFC2n, 0x04D3D8F4B2D15394n, 0xD271504C04756EEAn, 0x2DDBA4A91AF827F1n, 0x1F67D5C28F8002E4n ]), /*28*/
new BigUint64Array([ 0x8B9C08AD432DC08Fn, 0x5A7543E29796BBC7n, 0x34A6DB5B3C1967DEn, 0x016E3BC2A2804EE4n, 0x5B9BCACCE5172F75n, 0x7549598B80ADBDBAn ]), /*29*/
new BigUint64Array([ 0x6F3FB117C5CDD155n, 0x16C3B0A59CD6EEC5n, 0xD9A1A411DE538769n, 0x938C54979F4AC37Cn, 0x3737BCC1D55284DBn, 0x6CAD9F8AF9156BB7n ]), /*2A*/
new BigUint64Array([ 0xEBBF284F9C75EBDFn, 0xB383EBB406753DE8n, 0xAA86127AEE7C403Cn, 0x10BFDD10523DE027n, 0x138BF6C4EB4A8A13n, 0xB1EFF67DDB78B067n ]), /*2B*/
new BigUint64Array([ 0xF6D1138D7AA3DA5En, 0xBAA8098D8FB66371n, 0xDAE76D1B8B6CAAF2n, 0x400F1034368D1EDCn, 0x7C937F5172E8D277n, 0x7D05BBF83CADE6EFn ]), /*2C*/
new BigUint64Array([ 0x0E9C2EA6CF34B081n, 0x9036B30D58F60BA0n, 0xDB3A2C5848F08BCAn, 0xC87AD1B94250D564n, 0x7C892E09EEF96166n, 0x26DB85CF571085F3n ]), /*2D*/
new BigUint64Array([ 0x251EE3F58718C12An, 0xF9438D81178A2AE4n, 0xF0929A889039A8A8n, 0xF06B65225EBDCCFDn, 0x2E4D14EDF7BF73C6n, 0xA9369895BC1DFACFn ]), /*2E*/
new BigUint64Array([ 0xCAE302B41D6979CBn, 0xBBFA5A58B51EE623n, 0x5113B99DC81AB52Fn, 0x6093795BEC17A056n, 0x8F71FB4D2E5E355En, 0x762F92EDBA34A2F2n ]), /*2F*/
new BigUint64Array([ 0xD130015265A4D9FFn, 0x09BEA253D71F26C8n, 0x81B6EAEDC46521E6n, 0xFAE268165682B8A9n, 0xA89C3EC4774AB623n, 0x0D2E45E055219DB2n ]), /*30*/
new BigUint64Array([ 0x2B560284C3A692ABn, 0x37008AD0B379A7B8n, 0xAF11CD2C30F90BFCn, 0x7FE87A250F2762EDn, 0xC3FBD711647242C3n, 0x74ED8264F6B322BDn ]), /*31*/
new BigUint64Array([ 0x28195CC8A7AD3943n, 0x53CBE808464C4FC4n, 0xD58E3D7A765F8726n, 0xD83052F60185AA4Fn, 0xEFCB0D85223BB4E7n, 0x5A31305E787FAC28n ]), /*32*/
new BigUint64Array([ 0x725D0EE230F19543n, 0x9091D2C6BDDF34E0n, 0xE3BE49C6C2754601n, 0x61BE300BA4AD566Bn, 0x02D79D7551FA7CC1n, 0x6543910F5F1CDA58n ]), /*33*/
new BigUint64Array([ 0x4099ADC44481B43Fn, 0xFE1361922FD9EB81n, 0xA989C09E441FCEACn, 0x449B3A13D3CB9019n, 0x45A9BE396F201134n, 0xDC1AD05A046633FEn ]), /*34*/
new BigUint64Array([ 0x1A563A6D522F3E69n, 0xBE589E079F475A9En, 0x75A2A9638E4C0038n, 0xDA3B6202577A0362n, 0x211D3F1E0D727AF6n, 0x5E1FFC529AD99233n ]), /*35*/
new BigUint64Array([ 0x47B61E86C6D6D01Bn, 0x437D6F83ADADC318n, 0xD5A361028DED738Cn, 0xA00D4C630425164Bn, 0x1A69AFA5AF4C9DD2n, 0xF99E1C67F951B582n ]), /*36*/
new BigUint64Array([ 0xA66A7740B6BDEA79n, 0xFEF7FF1496AF80A3n, 0x05AFD43EEACD898Cn, 0xB00C78ED31AD7134n, 0x0ED31A1AD7846673n, 0x74B96844161499BEn ]), /*37*/
new BigUint64Array([ 0x46FA8D6CCBF6D12En, 0x31C2FC147F303956n, 0x707F4401DE5F067Fn, 0x3AE5FEC7E33594E9n, 0x28E39F8A63531714n, 0xB7B329EA1E9FCAB2n ]), /*38*/
new BigUint64Array([ 0xEFD8F755825C7804n, 0x1F5A93870BD30CD1n, 0xEFBF894671FF8716n, 0x28ED617FF22BDA58n, 0x411289CCAE5CB62En, 0x95DD42F41801F2F9n ]), /*39*/
new BigUint64Array([ 0xA8525B8645FC59E1n, 0x75E62DC00A5F7F0Cn, 0x09C56785210416ACn, 0x50EF76E9B30D7626n, 0x2B3B2CDC19F5D665n, 0xA41297CD11D8F4FFn ]), /*3A*/
new BigUint64Array([ 0xEAC99A649EEE5039n, 0xA593C92F143C0065n, 0xB314735203071206n, 0xEA2761A0C764A4ECn, 0x02AA7FD46CAC25B3n, 0xC68CC182A96D03BFn ]), /*3B*/
new BigUint64Array([ 0xB2873F024EC83CA8n, 0x97470AB8FD8853EBn, 0x18FE15C159B305BDn, 0xB0AB08F687EAEAFDn, 0x510A3FDE73602E43n, 0x03E1B84DCCF0FCF0n ]), /*3C*/
new BigUint64Array([ 0xD85BBBDC8033C0D8n, 0x9223D9C39CA9F34Fn, 0x7D3BCB6D5B63C3FDn, 0x1C30F974DA0C0FB5n, 0x8B24BC9EBEFB5143n, 0xC58954925B7B84FCn ]), /*3D*/
new BigUint64Array([ 0x6ABD7C2E0844D7A7n, 0xCCF2EA456CDF530Dn, 0xE8938CF52B3921B8n, 0xBA023CA2F281657Cn, 0xEC635DA675D1EDAEn, 0xB4AA52F22EE1BE6Cn ]), /*3E*/
new BigUint64Array([ 0x981C3AC677CB5904n, 0x6A92B54C84877B49n, 0x745BA6BB40C55815n, 0xB7AF550D22A371EDn, 0xD5E8BD87C65F5374n, 0x67874A37F0F538F5n ]), /*3F*/
new BigUint64Array([ 0xC23BBA2A9DECC021n, 0x4E610E930B0E3450n, 0x1A681AA91477577En, 0x38A3209714EDC376n, 0x0FD15563EEEB4AB6n, 0x7D57668A01D42178n ]), /*40*/
new BigUint64Array([ 0x6AF88CE145A098B5n, 0x1AEB858CD88B8B46n, 0xE8B733AFB8E2D6E8n, 0x313FAA8C10A7EBFAn, 0x127D375E77557CEAn, 0x96BDA2F70B2F2155n ]), /*41*/
new BigUint64Array([ 0xEC8903978FAFB636n, 0xC7213C425C079763n, 0x760384036AB6D17Cn, 0xE0C63A26385F1F49n, 0x299877D6811A6DF5n, 0x876F90FC5304B88Dn ]), /*42*/
new BigUint64Array([ 0xA6FABBC2D6E0BA16n, 0x9B70C9640080E6BCn, 0x29B2D5265598B27Bn, 0x4A9657C726E4397En, 0xA801CCC6766678D5n, 0x800EF7CC72619998n ]), /*43*/
new BigUint64Array([ 0x235931A8CF5490BFn, 0xE798F98E0E8F879Fn, 0xC6EEE29C38F30CA7n, 0x929A79F2D53E0024n, 0x88F2E12749587A45n, 0x0B85B28F38891965n ]), /*44*/
new BigUint64Array([ 0x165E0303E4A4D827n, 0x67994F42D1E8436An, 0xE6CC8BCF6E130D1Bn, 0x50101711709DDEFCn, 0x373BDEC40CD05328n, 0x40B274A4AA5109F6n ]), /*45*/
new BigUint64Array([ 0xA9F88BA008FDF8C8n, 0xECC897E3476EE05An, 0xBCE290AB69D57A74n, 0xFA44DB1811E3115Dn, 0x6267AEFD64480C88n, 0x2697D04A2D3AECEBn ]), /*46*/
new BigUint64Array([ 0xC0782AF2ABCD3313n, 0x02BA1290F2F96273n, 0x63C82F1A56ADC2B9n, 0x10F8E8C03EFE51C4n, 0xE3EB348625CCAFFDn, 0x93D607969CB8E7AEn ]), /*47*/
new BigUint64Array([ 0xCC6E179443E58FBCn, 0xD21C93C655A7B8EEn, 0x2B9834A31F2B8BA4n, 0xC83B69516025ECEEn, 0x9176EB7B427AAE94n, 0x8CB65B9E30B7A76En ]), /*48*/
new BigUint64Array([ 0xC1A33A0AD6EDD989n, 0x18B3C5D95813B5F7n, 0xB024BD263B359A8Bn, 0xC8C17C2216A99B50n, 0x71F9A11D58237729n, 0x3AA67C7618284290n ]), /*49*/
new BigUint64Array([ 0x99B7465E09201C7Bn, 0x9AF89FA01CA4FA81n, 0xFC2EC63E761AD123n, 0xE2A9A39585B17D14n, 0x08394DE529F94E81n, 0x479448E69794FAA4n ]), /*4A*/
new BigUint64Array([ 0x23CA3D1C4CBDCABBn, 0xE3265436CE1A37E4n, 0x1BBF10F69E8A4CC9n, 0x05A66708048F5C4Dn, 0xE259DCDD9C5BFEFEn, 0x439E65FAFD936EFDn ]), /*4B*/
new BigUint64Array([ 0xA24D73B6978F719Cn, 0x3F53F343CCB0BB8En, 0xBE3C72769EE07C6An, 0xFACB9E539CF558DDn, 0x67B91D4E30DE986An, 0x1DB913D11698913An ]), /*4C*/
new BigUint64Array([ 0x98BD4E140DC3C3C6n, 0x142B1592BF3263E8n, 0xCDBEAC59ED095B0En, 0x900763F0F625896An, 0xE213550F30324E39n, 0x8A13A4417A803195n ]), /*4D*/
new BigUint64Array([ 0x2ACD98ED8C626073n, 0x1CAAA6B4C4CF3238n, 0x04DCB41EB677EB5Dn, 0xF88B5844A8105B68n, 0x981D9E951A061A4Dn, 0xBC9471894C878EDBn ]), /*4E*/
new BigUint64Array([ 0x4959FEAD5D6C2DBDn, 0x6ABD59E28C503049n, 0x06D2C5494CAF8B34n, 0x70E4541304A4293Cn, 0x520F3416CAF2F503n, 0xB23D09D92613DB85n ]), /*4F*/
new BigUint64Array([ 0x26B5A815C32D1791n, 0x2C99E7555BB033C6n, 0x09CE9D6A0002514Fn, 0xD485282B2B8D7997n, 0x9C5B792F4A4A14C6n, 0x851D9D02DC0BB4E7n ]), /*50*/
new BigUint64Array([ 0x62FEB6CACFB060ECn, 0x9D977D69D5C661EAn, 0xBF08EFD806D81556n, 0x25F1EEA460EA5718n, 0xA25346B51F5A9665n, 0xD92F9ADC358CA274n ]), /*51*/
new BigUint64Array([ 0x27E63DFC63E8FFA6n, 0xCDB9CCE2CE99FDA3n, 0x979D5B754974830Dn, 0x3298C8407D6693BEn, 0x629D5FADA39B42B7n, 0x2654D31271CD84E1n ]), /*52*/
new BigUint64Array([ 0xAB1FA4DAF66E583Cn, 0xEEB6B7A236D24766n, 0xA90738CDFDF5C6B3n, 0x28CBA9E5648E2D4Cn, 0xFDE5BF6C0CFE0DA3n, 0x9D00B863D7D78485n ]), /*53*/
new BigUint64Array([ 0x75FBBF094EEA16AAn, 0x48931F027CD729F2n, 0x5D360679009B2E7Fn, 0xDDFCD148BD3DE21An, 0x4DBFF544B094D0E1n, 0x9C0E5C6294352C22n ]), /*54*/
new BigUint64Array([ 0x283A27FF968853D2n, 0xB0960C6CEA0D03F2n, 0x172BBA07A473DB38n, 0x688C87D296E6F4BBn, 0x5CB7E9BC5D68CF0Fn, 0x57A5D71B0E47BFB4n ]), /*55*/
new BigUint64Array([ 0xDE0108AAC1E4FF2Fn, 0xD346CFABEAC62B99n, 0xB72E203F98B5F608n, 0x81853D8CA54B29BEn, 0xA6AED7C89FAA1680n, 0xD2093B155C39D7EDn ]), /*56*/
new BigUint64Array([ 0x0BAEAC99D4974B84n, 0xC7F258A699C9B4DAn, 0x6F622C5E4ACCF5C1n, 0x58AB397D9781BEAAn, 0xBF811F67E101FFE3n, 0xAFBCC2881C3C0EF3n ]), /*57*/
new BigUint64Array([ 0x26B211FB518D6C3En, 0x64BADAD51A10784An, 0xE6BE4E06A587186Cn, 0xD471F5C61343CD5Cn, 0x8389BB0DD6AAED5Dn, 0xC88112678914A17Dn ]), /*58*/
new BigUint64Array([ 0x2B2D0BC3BB88D27Dn, 0xC5A7D1FAFF517AD2n, 0x96F39056A09F82ADn, 0xFB38A61A6CED4D4En, 0x9D308E4EA6F9B264n, 0x9097CE294AECC6B3n ]), /*59*/
new BigUint64Array([ 0x8FCA2B950690B1A2n, 0x293EFCBF03D422DFn, 0x8C9125B3E76353ABn, 0x3D402092A1A70173n, 0x9BAB974CAB9BF676n, 0x5EA8FCC55D8C586En ]), /*5A*/
new BigUint64Array([ 0x408C92E8C2E1EC8Cn, 0x4AF4C914B71B4350n, 0x5186AEE0CDFB1069n, 0x2385EAFAB9657C67n, 0xF708E4D3C898CA80n, 0x1EC8B9F89884907En ]), /*5B*/
new BigUint64Array([ 0x46E8958B6A2C1878n, 0x2172FD410F78A647n, 0x9D8E9DD83A299004n, 0x390913C3265AD025n, 0xD231F1E23077CBF1n, 0xE7EE3E574E80D7F3n ]), /*5C*/
new BigUint64Array([ 0x5A8567A3D85E40B2n, 0x16ECF161133FCF73n, 0x52DA5C6FBA3C0DD7n, 0x56E57983DEB34BFBn, 0x83254FDCB768D153n, 0x9A14F95F35C6B82Dn ]), /*5D*/
new BigUint64Array([ 0x498A29C6E19D4AE6n, 0x2EF4AAF46027BA11n, 0xBDBA7DAA84F39505n, 0x940B2A04F6DC944Dn, 0x4E7ED35610FC0D53n, 0xBADD94C2907E59E1n ]), /*5E*/
new BigUint64Array([ 0x14DF0FC43F475F80n, 0x17E2AA8D264BF82Fn, 0x92625BDFE58B934Dn, 0x8384F415A4ACEA81n, 0x8E9C5EAEC5D8642Bn, 0x4D8EF55F1C826687n ]), /*5F*/
new BigUint64Array([ 0x4A2335C4F77128D9n, 0x544E1476D29ABA94n, 0x654EC86321785044n, 0xB04AD9B02F80445An, 0xB0E01B6480C8D020n, 0x596E325E88A3CBBFn ]), /*60*/
new BigUint64Array([ 0x896955157448D062n, 0x0DB08C4C0F236D68n, 0x3BA8FC5B3CD1C4A2n, 0x04F57C53E144535Bn, 0xB7D04DCC7BE46840n, 0x4BBE993192334646n ]), /*61*/
new BigUint64Array([ 0x1D7837E6AB02CE27n, 0x3EA35BAED4493EA4n, 0xD1CAFDB5DF94FABEn, 0x98B580BB62170C4Fn, 0xC3C57A6CA9421C43n, 0x68D65FC2C1201634n ]), /*62*/
new BigUint64Array([ 0xFAEABABC48717536n, 0x454251E8F62F7315n, 0xB318E8A7FDCDC523n, 0x7C2E832013C91344n, 0x4D9E5DAFD1699052n, 0x12262E8C870537A7n ]), /*63*/
new BigUint64Array([ 0x8A3E5D0BEF8402A2n, 0xA33BC5FAFA019909n, 0x63CBE8ACD00762F5n, 0xEA26A3F181984178n, 0x6EEB78D1BB4AF6BBn, 0x7ECF9671300E845Fn ]), /*64*/
new BigUint64Array([ 0x0811B67CCCF5D0FCn, 0x9F8CAB3F3496BD6Bn, 0x57CB7D24F1355C2Dn, 0x58218594165BDE80n, 0xFAF3368A653A78F8n, 0xC04CD80176267762n ]), /*65*/
new BigUint64Array([ 0xE6417CE75AAA23B0n, 0x34A7BFE3CBA61761n, 0x8C13E396F8C9B6EDn, 0x5C9066464B09ED63n, 0x76CB6A642C5CE283n, 0x498E082A3EB449C6n ]), /*66*/
new BigUint64Array([ 0x6F2ADEA6357B5AA0n, 0x54DA382B15557B69n, 0x302BD81946237AAEn, 0x8F0CBB82111EFEDCn, 0x45DD2DADCE20F2D3n, 0x8A77A5E9E8A2D1D8n ]), /*67*/
new BigUint64Array([ 0xE1EC332735862A28n, 0x92B68B1A7E9C7C44n, 0xF45618DC99E963E3n, 0x7CAC984502DD1A73n, 0xC8650598CD70840Dn, 0x9A5DA584A26D4EFDn ]), /*68*/
new BigUint64Array([ 0x16B19B010740C15Cn, 0xB4544AC01016439An, 0x221F749C9E2F99A5n, 0xA63E8A279A65570Fn, 0xC7231669ADD072ADn, 0xC5BC35BA740BC801n ]), /*69*/
new BigUint64Array([ 0x6C44E75A4F378694n, 0xD27ACE108A577647n, 0x17C487FAFA7E15D6n, 0x6A3654D5C8E29EDFn, 0x0CE35EEDCC611FFAn, 0xD88A8C03C0095093n ]), /*6A*/
new BigUint64Array([ 0xCF106948BC4B1F2Cn, 0x91C0DC9990B99712n, 0x193B21E3E109AB32n, 0x3340DE0608DD1666n, 0x8A5BB677BF602828n, 0x402C410B1197B771n ]), /*6B*/
new BigUint64Array([ 0xEB080FF49CA5543En, 0xB4B9429542D6CA27n, 0x5999D45DC1533205n, 0xF7EA9E398A1BEF3En, 0xBE8817775476DEC6n, 0x17064D7790C84100n ]), /*6C*/
new BigUint64Array([ 0xF3328E9150A7F8D6n, 0x52E3E61B04ACFDF8n, 0x51D82010F3CEB015n, 0x59D673336676D5D8n, 0x4CB3BCEF1D91C342n, 0x0C589AB58033BE49n ]), /*6D*/
new BigUint64Array([ 0x54B8E70EDCE03855n, 0x7BB590E99687FD57n, 0x6CFF08688D2B1FDDn, 0xFD0F6D068BFE994Fn, 0xEB9BCE302489AE44n, 0x66B21F200661E3E4n ]), /*6E*/
new BigUint64Array([ 0x2F5E0060189669ADn, 0x473AF1D03C00CAE4n, 0x0278299268D1F3B4n, 0x888714BC3A7EC9D2n, 0x9FF9C7F071EBD2D9n, 0x875A5DC25DFFDB10n ]), /*6F*/
new BigUint64Array([ 0xE2A97A3E468399D8n, 0x3BF7EACA32C80DA1n, 0x13DCAC8EB6C2231Dn, 0x227EC90E1102EE97n, 0xB2344832F0381434n, 0x8613888303B190EBn ]), /*70*/
new BigUint64Array([ 0x3A3D3B6CE026BFFEn, 0x18D4953B9A68ED59n, 0x24BB7B574AB777A0n, 0xE0CB7DD64983DCB1n, 0xCF768C439869AC97n, 0x8062BC7A900E6033n ]), /*71*/
new BigUint64Array([ 0x39D4C3B78A7A33C7n, 0x43D72EF22AB0B4EBn, 0x54AE8184DDA50394n, 0x0C2A7DA083C38536n, 0x9DBC6F921D4AD822n, 0x2CBB61FE182EAA42n ]), /*72*/
new BigUint64Array([ 0xD8CE9A806C0BD24Dn, 0xF69D65A65845727Cn, 0xC3FF81CC76F2B048n, 0x76B1FDC3CA67CE58n, 0xCED0970AFBCBE78An, 0x57502941B726F5F3n ]), /*73*/
new BigUint64Array([ 0xE006AEC17FCEFCF9n, 0x05CAA1629E003591n, 0xB7050CC99F585312n, 0x669260401E159490n, 0x8442D25AA757CC5An, 0x228655CD4038770Cn ]), /*74*/
new BigUint64Array([ 0x93EE8D67D3F1F3A1n, 0xBEA46D48DBF8D7F4n, 0x3C91F02B8646453Cn, 0x6C3D7C1F04188A58n, 0xEFA97287F89CEF84n, 0xCB40364E108BFF4Bn ]), /*75*/
new BigUint64Array([ 0xC6DCE3730D4FF825n, 0x02AF54F87D972790n, 0x7D69D20F6F4F788Fn, 0x90C255C64C166E8Fn, 0xA3529FBF4BF9C9A2n, 0x3ECEC41136694F6Bn ]), /*76*/
new BigUint64Array([ 0x3DE10A5EC6CA7B3Fn, 0x7E196081D085ACAAn, 0xDF5F0DE3705D60F7n, 0x393E7C83DCC57075n, 0xA5F33BC2DCB98F97n, 0x0AEB7F050D1204C0n ]), /*77*/
new BigUint64Array([ 0x6F3B3B3D11A8BC05n, 0xB52269AB2B95B8DCn, 0x12EDE24EB1385F13n, 0x202BBA6B5836B5E1n, 0xEE3636C5925ACC49n, 0x42224CF6EEB509BFn ]), /*78*/
new BigUint64Array([ 0x5F0CC3BBC4BE9A92n, 0x584313FCCC54DD2En, 0xC11FE90F00394036n, 0x3371667C72FC9723n, 0x9611990B62AC8D9Fn, 0x4CFCB9EB3C317FADn ]), /*79*/
new BigUint64Array([ 0xCA8E520A894A3FBAn, 0xBD9ED1B80098CC40n, 0xBDF24507DFF3757Cn, 0x47AEC572E68D35ECn, 0xF3D4523D27B373E4n, 0x1AB11E16973A05ABn ]), /*7A*/
new BigUint64Array([ 0xFFC293A6C26B817Dn, 0x2C9E9D134959D828n, 0x7FA5216408199BBFn, 0xA6F002DE0DCCD861n, 0xBE8F9DC57F2CF35Dn, 0x1352E2DF86A47647n ]), /*7B*/
new BigUint64Array([ 0x84B55BE101708E74n, 0x3ADEC53721209F3En, 0xB18F9A1E68DFADBDn, 0x09A050819774CF2Dn, 0xE4AB295D380A8762n, 0xA3605B0C689C239Fn ]), /*7C*/
new BigUint64Array([ 0xDDC7031FBFDFFE8Fn, 0x0B175DE65B832F0An, 0x31162ABC65719685n, 0x51215E534BBC36B1n, 0x9F2F7D3B5D01AE44n, 0xCF43A2426E83B61Bn ]), /*7D*/
new BigUint64Array([ 0x7E32DB672B16F04An, 0xCE6F45DE0E6AB788n, 0x25718548B8E70B41n, 0xD7368BCF39A0FAC4n, 0x956863EC49880C47n, 0x720E335796341674n ]), /*7E*/
new BigUint64Array([ 0x06707A8E33D9D6C6n, 0xB684BFE26CD576C6n, 0x44F47E5ECD5FC46Cn, 0xAF1B23A856D844B7n, 0x98A627916AC5657En, 0x040C3964A1127E19n ]), /*7F*/
new BigUint64Array([ 0xA5DAEC3134C0A39Bn, 0x0CA04160BD5ADB1Fn, 0xB50EC5A9F29E1ACBn, 0xBE2FA1126AF7BFAFn, 0xBEFC0AC4C9C5A4B3n, 0x994739C71FB1EB29n ]), /*80*/
new BigUint64Array([ 0x6FEC2D343E83A763n, 0x5BDBA5715757F50Cn, 0xD6F6282EE46A11B3n, 0xA8B501F5922A5524n, 0xA782A21006B605CAn, 0xA10BD2E896975C81n ]), /*81*/
new BigUint64Array([ 0xB8AAE0532226D0EDn, 0x891831C0470E84B7n, 0x74C824D648E8FF28n, 0xB5E4E02EAD3906EBn, 0x5ABB086ADA60A713n, 0xA80C57666A9E29F1n ]), /*82*/
new BigUint64Array([ 0x529E3E52B1E7230An, 0x0C148861C9F08E26n, 0x0CFC8A131BAD803Dn, 0x8C09F324902FAA9Fn, 0x0231EE4987999848n, 0x3B0688492E2B5457n ]), /*83*/
new BigUint64Array([ 0xEFA6EAC5036814CDn, 0x02773C1F8DAA5DF5n, 0x0E4EEDBD0702DE31n, 0xBA7FD757D0D740EFn, 0xA8805F0C74005F8Bn, 0x1448467BFF3E1EF8n ]), /*84*/
new BigUint64Array([ 0x2A07B766016AC70Dn, 0x64215C35364219E9n, 0xCD6F7EFE35FCF6F1n, 0xF05CC06084C29267n, 0xAB3BF2F32579A444n, 0xAC75F42D9A25B9C9n ]), /*85*/
new BigUint64Array([ 0xEF3A14B5EDDB8464n, 0x2314E0802D2DD0E9n, 0x14DEAEA9F928762An, 0x5763EBB480E15A02n, 0x25F7CA14E8CDF5E6n, 0x8E594510DC61E6BCn ]), /*86*/
new BigUint64Array([ 0xE62C38DCFD21000Bn, 0x7BB32AE917EE3DA7n, 0xE49F15E24CC9B656n, 0x56E28259DCA361D8n, 0xB43B8008A9285F48n, 0x0DC6B4AF7E4AE61Bn ]), /*87*/
new BigUint64Array([ 0x703C64241142DCAEn, 0x732D33342C45063An, 0x37877EA1624567CBn, 0x2871D534614DD114n, 0xE748092A1D94F5D1n, 0x4524056F0C6D1CB7n ]), /*88*/
new BigUint64Array([ 0xE325B1823A595DF9n, 0x742D0DD5C96F397Cn, 0x44361C9540A9F451n, 0x02382F9BF6331FB9n, 0x8ECBAFBBE91A0467n, 0x528EBF3811F904A8n ]), /*89*/
new BigUint64Array([ 0xFD2BC6534631FB0Dn, 0x27A5F036FEEB9A6Cn, 0xD0F876D7911D0775n, 0x12EFB3A29C6E0B72n, 0xDC4BCA3D5E871DA1n, 0x028FB6E6E608F46Fn ]), /*8A*/
new BigUint64Array([ 0xEF17ECC8930A7B4An, 0x9D97B34672FB273Dn, 0xC6AE835F35A25D8Fn, 0x6C27469530C21F5Bn, 0x2FBC16A26150E795n, 0x02AD93AAE0B5C71An ]), /*8B*/
new BigUint64Array([ 0x6D24BE43CF07DD56n, 0x63681D62A38D2A2Fn, 0x9872C9B411724AA0n, 0xB882B4857C19690An, 0x87B1BA8D2804C6F4n, 0xD7B199CC36F40B49n ]), /*8C*/
new BigUint64Array([ 0xEEFB8D8573FD9E0Fn, 0x933403199B91560An, 0xFF0DB41665D5248Cn, 0x322EE105EA984196n, 0xDB8CE0F83890D89Bn, 0x3A32F8983C901F80n ]), /*8D*/
new BigUint64Array([ 0x082CDAF93F215BACn, 0x67C118A1B9274FACn, 0xAF74501CFB93198An, 0x53525CABA0E812D3n, 0xC9AF3A005EFE8A6En, 0xF242DCB60DA7B2FEn ]), /*8E*/
new BigUint64Array([ 0xD3887FBFBB7314DFn, 0xDDDCCCF0F720C342n, 0xB2C4331C33C8C415n, 0x1666010767F4785Bn, 0x8455B7C1FD5DE487n, 0xA821C5EA181875F2n ]), /*8F*/
new BigUint64Array([ 0x7E289831418562F0n, 0x2AD12E3042B185C3n, 0x7C20D0D735A6AE96n, 0xA68BEF98E22CBD41n, 0xA1411D22F8D93243n, 0xD813FB404F3D2F38n ]), /*90*/
new BigUint64Array([ 0xE13FC0A76F664294n, 0x7E21C9D9F7FDDDCBn, 0x161E68B366D6B1F8n, 0x55BF957EB5743874n, 0xB23213EF8364D766n, 0x529BB98AF96643D4n ]), /*91*/
new BigUint64Array([ 0x036D7ADDAADB5C33n, 0x0525835F802D032En, 0x7DF7D0D8D7A2BEF2n, 0x84927644B27696B7n, 0x215E21E4D1F9B5B9n, 0x77743669C40EB7FDn ]), /*92*/
new BigUint64Array([ 0xA9B3534BE8897784n, 0x5BFD4283541A5090n, 0x97AFFCCD121C9778n, 0xC146C4C9637989C7n, 0x0820E72FCBDA59C7n, 0x5526E2F4A0AE4F4Fn ]), /*93*/
new BigUint64Array([ 0xA4739E20FD72BDC2n, 0x6D6EE5A5C1A54CA6n, 0x70A97A6FCB884E5Cn, 0x2B6108339E979C48n, 0x93A63730D6BB23A7n, 0x5B1DCEAB00045EE5n ]), /*94*/
new BigUint64Array([ 0x427C14E4F88C8BDBn, 0x1D8630868E039BC2n, 0x33DB40A251502D1Bn, 0xE043C9CCB45D2B3Dn, 0x292B67B6EE077B2Dn, 0x1C3A2FBDE24C742An ]), /*95*/
new BigUint64Array([ 0x3DED69F37016D86An, 0x9A947B13AC66D7C3n, 0x822D8645DF4CB39Cn, 0x2BA20F98F19E10DAn, 0x6703138D422AC4C4n, 0x8D34D6138FA04A1Dn ]), /*96*/
new BigUint64Array([ 0x28E59C8B257D112Cn, 0x8747068CC5499FCFn, 0xD6C16EB780F9191An, 0xB416151633F7AF08n, 0xA230E00D6BA1A1C3n, 0xFD066FB9965B83D2n ]), /*97*/
new BigUint64Array([ 0x70F4BC1B7F8FFC37n, 0x38DC0331E56B0FDCn, 0xA9AB7290AD2B0BBDn, 0xB307973C3D0783C6n, 0xBDC455F6CDCA111Fn, 0x23F0E08317B8F0DCn ]), /*98*/
new BigUint64Array([ 0x0AEEC24E9285C50Fn, 0x3BCDA47833B61ACEn, 0x839986F959EE0723n, 0xC959034A8D7F5EB9n, 0xD4AD7E05B05C4FB5n, 0x6C37A3D39F7A0EC4n ]), /*99*/
new BigUint64Array([ 0x0227B7230FBF2D07n, 0x28D7D2AD632BED47n, 0x07BD8F8B5012EFD0n, 0x48A0D43AE0403442n, 0x9B8939207F1449A1n, 0x351EAD01B9FDF219n ]), /*9A*/
new BigUint64Array([ 0xA7119D2E311CEF25n, 0x1E532CD0C4ED0479n, 0x2272F878D8D30A0Bn, 0x769C412CED9C4C42n, 0x262FFBFA65CBDDF5n, 0xDB73D86721EA368En ]), /*9B*/
new BigUint64Array([ 0x4BDBE90B3FBADCB2n, 0x1324EC3A8D6FEA57n, 0x6D9EFBE530850D00n, 0x401A88AFF8A4C8F4n, 0x655CB76B8A2E271Cn, 0x35505B6DBDE16F43n ]), /*9C*/
new BigUint64Array([ 0x6E15E57E23F57037n, 0x4962737362C1FA26n, 0xC962372D1829B80Bn, 0xA1FE6832EA4D6211n, 0x6726E307F96E7763n, 0x04C761081677505Bn ]), /*9D*/
new BigUint64Array([ 0x42E2FF3A8A6FC164n, 0xFB85B2BC9D28B268n, 0xC559CFF024533A28n, 0x2EC83F3911DAB3CEn, 0xAE0FC74A9D736A27n, 0xDB9CDD048BAB4CCFn ]), /*9E*/
new BigUint64Array([ 0xD79C52221D20E765n, 0x499EDD73903CE704n, 0x9B016D987DF48349n, 0xFCFAB44AD12FC5C1n, 0x811293F3B800FDF9n, 0x511DC619CA53CEBEn ]), /*9F*/
new BigUint64Array([ 0xA059EE78B826EDDFn, 0x4673AF294D17C85An, 0x5E527D4E4DF282B5n, 0xDB5B9A2693F95CE3n, 0x6551D304FB54F296n, 0xAB3EB70D65912FCCn ]), /*A0*/
new BigUint64Array([ 0x7D0C4F67B6C78135n, 0x390CAEA7DE304D37n, 0x49E19FABC8D494FEn, 0x1A9E1B6437A04516n, 0x886CC4BDAB6AF35An, 0x0529217344F502FEn ]), /*A1*/
new BigUint64Array([ 0x3CEDF34141B52CEEn, 0x8133BA924753573Fn, 0xCB32BE22BC66025An, 0x0C480183DE403CB3n, 0xBF5B84B427DFCF31n, 0x7251428DB0232156n ]), /*A2*/
new BigUint64Array([ 0x86FCE831C58E25CBn, 0x5CC43FFE45CBFC75n, 0x33877CC042F199BEn, 0x1212FA7F0CC22E1Cn, 0x448EAB4B7D1F9823n, 0xA7B1363A9FA7599En ]), /*A3*/
new BigUint64Array([ 0x2D8C2FEDA0E5106Dn, 0x192E366838BBEB3Fn, 0x36226AA60ACEA0AFn, 0xE7E1285DC1F3926An, 0x900371FA1883D9ECn, 0xBAC33B1AF360EB66n ]), /*A4*/
new BigUint64Array([ 0xD4A2A11612BDE0E3n, 0x82AB0DA614CB4CB8n, 0x189A4D50AC01F4C6n, 0xE36A5DA1D9F6A647n, 0xE43120D6B16B11B6n, 0x7D395F4236E75378n ]), /*A5*/
new BigUint64Array([ 0xC0C155CD47F3877Fn, 0x4B03BFE5C334CA71n, 0x77710F1F4B844FF7n, 0x3443BBAB720E8DC5n, 0xF03F8868C5863406n, 0x0FD60511C872EB50n ]), /*A6*/
new BigUint64Array([ 0x8C253DAAB5286306n, 0x9AA438F54A6196ACn, 0x181D08C723A22C5En, 0x633C49C88E3910A1n, 0xC9F54A67992675B0n, 0x1FDD98ACBD38D976n ]), /*A7*/
new BigUint64Array([ 0xA10893DA7575A9F7n, 0x8F5F4A025AB2A018n, 0xD80538F0336BFFC0n, 0x0F9751D33889626Fn, 0x30383EB925BF911An, 0xE6149F68CE19CC60n ]), /*A8*/
new BigUint64Array([ 0xB9081DBAC6BE0598n, 0x785DD9BC69C71492n, 0x8B035A0CA56E172Bn, 0x8946783500724888n, 0xAF1E57C958650569n, 0xE1DE4E944FF22261n ]), /*A9*/
new BigUint64Array([ 0xEA5EDC4D2718C0D2n, 0xCB1C5D4DA15A8AE4n, 0xC6272382F8163015n, 0x94A934E5057B54CEn, 0x658E481A3D68D10Dn, 0xE8F24929E50A46A0n ]), /*AA*/
new BigUint64Array([ 0x7DF146281AF482CDn, 0x014B68E726407B06n, 0x6CE564938C70DDBCn, 0x36DAD2DE72A5DAA2n, 0x6D573BF69C0B2980n, 0x684DAB14B4AA0329n ]), /*AB*/
new BigUint64Array([ 0x9C69DC064E738B5Fn, 0x83CC16BD5A1C36F5n, 0xA99B365E6E141B12n, 0x2748FA5AD0FACCE8n, 0x26D073A047D99C49n, 0xB005B182505B0C0Cn ]), /*AC*/
new BigUint64Array([ 0x15B6A2A20ED0FD1Cn, 0x9333AF729BD65A25n, 0x22CC333293BD2C1Bn, 0xD724D949B15E8BE1n, 0x69D0DB0512B97117n, 0x85ACA8980DD7653Cn ]), /*AD*/
new BigUint64Array([ 0x230EC629D77BB3F2n, 0x43115B991D297CB2n, 0xA2F955792C53C76Fn, 0x48A76728EBE25BA7n, 0x7CE662A405384400n, 0xDDC06B7E6BF49D66n ]), /*AE*/
new BigUint64Array([ 0x20DDB9BD7644410Bn, 0x056391B1FA2E8C06n, 0xCA4EDE51CF167C00n, 0x46602B550536F870n, 0x5040672597C21FF4n, 0x0AF8EC6E8AFB844Bn ]), /*AF*/
new BigUint64Array([ 0x0023C5749251B883n, 0x335A4F86D66B7E00n, 0xAE353DED3EFACE8Fn, 0x3FC80526D67B35DEn, 0x0D9078FBDA80BC53n, 0x467900DFF3FE4C14n ]), /*B0*/
new BigUint64Array([ 0x0F9CB2BE6A448113n, 0xE38D541B6A9A5829n, 0x673953DAF354FC0En, 0x3C818A277F8569E9n, 0x8D16EA77DB122A3Bn, 0xE40A860318B6EA84n ]), /*B1*/
new BigUint64Array([ 0x78CE11F42D7D5E50n, 0x84F76DFF199C998Dn, 0x999B578E3AE935CBn, 0xD9FD092C1BE63212n, 0x31F33C63ACD316D8n, 0x5AA08030B8D65C0Cn ]), /*B2*/
new BigUint64Array([ 0x0098DBE19CA84FE9n, 0xE2426617D1142137n, 0x63C3C4166A78E21Bn, 0x74B145353E03B0E4n, 0xF43C0824EAE508C4n, 0x58C1E6622528602An ]), /*B3*/
new BigUint64Array([ 0x9E27EBE6D1426A6Fn, 0x2A6A600A6B5FA342n, 0x8FF7E2306BA90370n, 0xDF83D91A683EDDDDn, 0x29572442F0225388n, 0xE9CC0F1B6437320An ]), /*B4*/
new BigUint64Array([ 0x054DF380E896064En, 0xFAB81A4AA3AD88A4n, 0xF87426486CCA156Fn, 0xBB1B3C8237472960n, 0x7EC0B87CF73F960An, 0x5C57D7E6470F7808n ]), /*B5*/
new BigUint64Array([ 0x5758E103AC614A1An, 0x766AEE86F81358DFn, 0x203FBA51DC74396An, 0x78C93DF969C5721Fn, 0xE69E32E230196597n, 0xE287C6CECD8AB95Bn ]), /*B6*/
new BigUint64Array([ 0x2A06A7C10C0DCC97n, 0x99D5298268A6745Fn, 0xF2D818BB774858B3n, 0xD52A820D4F64D886n, 0x2F808EF87A263981n, 0xBB91206E6347C676n ]), /*B7*/
new BigUint64Array([ 0x0847C6D71CE0C746n, 0x86FD451B447C1E11n, 0xC20623B0E2856FCCn, 0x3ADDFA2D0398181En, 0x6736A0A06B336B46n, 0xD1C70AEEB2B1257Dn ]), /*B8*/
new BigUint64Array([ 0x5633260D141A9776n, 0xD530805F596CA3DBn, 0x8CE33EF69437CE46n, 0xF62D54E97E747088n, 0xDF5C9318489B45EAn, 0xA4AAD29F0BA850CAn ]), /*B9*/
new BigUint64Array([ 0xBDBD7B16767F6D9Fn, 0xF7968427F1B7B6DDn, 0x58C76599B35276EEn, 0x286F4C7F6CADD791n, 0x8188C0401742117Bn, 0xCEC4F1964266D163n ]), /*BA*/
new BigUint64Array([ 0x97E4E8A6B5135B24n, 0x8A8BD785E5297977n, 0x4545C1A0975BC5BBn, 0x13FAE3BD9F59E37Dn, 0xAFD5627C0E91DE2Bn, 0xA223AC778474E1A9n ]), /*BB*/
new BigUint64Array([ 0xDE1BF1EAF86C6B3Bn, 0xA246A3ACD50035FEn, 0x6F80179DD96A21CDn, 0x3F8DB7CB17300D03n, 0x497A798B5D94506Cn, 0xAD52DCC6F61AE841n ]), /*BC*/
new BigUint64Array([ 0xF4A4E1D08E1F440Bn, 0x5E27633CD56422E0n, 0x1465C14F1DB41420n, 0x9A939043988D37C2n, 0xCBE65CFA245DB368n, 0x6340AEDE28DDA855n ]), /*BD*/
new BigUint64Array([ 0x1F7AB65A3F892454n, 0xD70AB4167EBEB5A1n, 0x9B2631E824C2028Dn, 0xD5D97BDEE31519BCn, 0xEA2DC77449E4058Cn, 0xEB204F2D6D2FBAFFn ]), /*BE*/
new BigUint64Array([ 0x6537E69171A2665Dn, 0x3FD2F835435A3F23n, 0xADD5DD3E622D6C8An, 0xC522CDD5E5E243F8n, 0x5AEC27F3DBFDA8A2n, 0x477A65ED570E1445n ]), /*BF*/
new BigUint64Array([ 0x3BA7CB01D32E9D63n, 0x9E335734E7B5416Bn, 0x0ED96A84F94539F6n, 0x45CEE2E46DF5A70Dn, 0xDE142EE1E9AFEC1Cn, 0x78D6121C4FDC72DDn ]), /*C0*/
new BigUint64Array([ 0x7BB30AF653390B77n, 0x2D394F2B7F8F7BB6n, 0x0277A3C213AF3489n, 0x7DF6E674DD56D084n, 0x5643CD3073C42451n, 0xFAB15F8BD1A1DC18n ]), /*C1*/
new BigUint64Array([ 0x42B453ABF5150D8Bn, 0x913F109C1188E18Cn, 0xC27BB7631FB43BF9n, 0xEBDDE685EF108419n, 0x76D67C87C56D33EAn, 0x95EC73C0AF40F084n ]), /*C2*/
new BigUint64Array([ 0xBCE43D59A1F50BFBn, 0xBA7027CA04D84600n, 0xFB6FDB98A2BE644Bn, 0xD5DE777E993DED4An, 0xFCA39F1EDF710F3An, 0xA5E5893C858D8841n ]), /*C3*/
new BigUint64Array([ 0xC68AC776E6AEACFCn, 0x538067C7866106EBn, 0xD27B4A352F4EFDE3n, 0x847DA2B3BF01E378n, 0x3C79E3C136926D58n, 0xF957BC8726AA1610n ]), /*C4*/
new BigUint64Array([ 0x95492C4203C7C612n, 0x0DD60DB1EE8321FCn, 0xE1D9EBA902F62B42n, 0xEA2DBF7D0E37A4F2n, 0xE11FB9098BF5DA48n, 0xDBFE213F818EA338n ]), /*C5*/
new BigUint64Array([ 0x17CB21316D4756DDn, 0xB88952498140146An, 0x648112F580844288n, 0x4947ADC3F7D58F35n, 0x651CCE28E26A5377n, 0x0B3803DAF337F89Bn ]), /*C6*/
new BigUint64Array([ 0xBEAB16E2DCE6B6E3n, 0x8F39ECC8E39172DFn, 0x607CC9553FF29C0En, 0x4BFD15154F4F0BA7n, 0xEE6230B6BD408CE4n, 0x35B654110D164E99n ]), /*C7*/
new BigUint64Array([ 0xADDDFF1BD2C11CD4n, 0x2A1A262CBA6E1AA0n, 0x0BF2291D09475A46n, 0x4C93A0ABADF4DE32n, 0x73EE8E1327333E63n, 0xF3AE2031F5D13B28n ]), /*C8*/
new BigUint64Array([ 0x246C7CABB2D9A55Cn, 0x50E9C7282C1EE0F6n, 0x2FBDA09565A0D3D7n, 0x196552679C04A4EBn, 0x137C66DA29A6DD82n, 0x08A76B6B4BDA56BFn ]), /*C9*/
new BigUint64Array([ 0x7CA3C59BE3E28610n, 0x6ADD75CF1F7AE248n, 0x01747450737A6435n, 0xA1F2259CB2B4923Bn, 0xE0C8F55E8ECE7210n, 0xD7964398F350B69Bn ]), /*CA*/
new BigUint64Array([ 0xE045864ED1825101n, 0xAC54969193E1A1C5n, 0x23D85A934D0794C7n, 0xB4FA88CB734A4213n, 0x7C5CBFD6BDA3D5F9n, 0x66607FE938748825n ]), /*CB*/
new BigUint64Array([ 0xBAF36FD2A180D481n, 0xEAC440AC1B9598F7n, 0x9AA24D80FFB7B06Cn, 0x79601F517358F163n, 0xD1071831418BB63Bn, 0x819609A6AE7D3A03n ]), /*CC*/
new BigUint64Array([ 0x3E9152D8CDBAE551n, 0x86AD793F203DD016n, 0xBE3AEB778AD4A891n, 0x2810254DD76B6618n, 0x9B5DCDE36636C327n, 0x0A8AAD65868BC58Cn ]), /*CD*/
new BigUint64Array([ 0x6D0672780D93152An, 0xEEE705247B828091n, 0x9EBDB976F137463Fn, 0xA7DE3E73A2D0C1BFn, 0xF871A00BA0046AC7n, 0x484C96A803F23486n ]), /*CE*/
new BigUint64Array([ 0x0FC7BCDABB06BFFBn, 0xF75C3FFB3D6309B3n, 0xECA305D103109162n, 0x373F503B204FFF61n, 0xCE332C9F54963FA2n, 0x9A4420A52242CDB4n ]), /*CF*/
new BigUint64Array([ 0xC71D481179D198C1n, 0x505A2845CEE92569n, 0xF339BFF6DD6755B5n, 0x8BEAD52B8DE89245n, 0x4B686E65920DCA2Bn, 0x99593FA43EE68A37n ]), /*D0*/
new BigUint64Array([ 0xD90A68D717E61501n, 0x9BB920AEA19161A6n, 0x2F3D6F96D90EB1E4n, 0xDF15ECBA10513D7Dn, 0xE6E5D539B4F01831n, 0xC7D17A7528FECE36n ]), /*D1*/
new BigUint64Array([ 0xA04FF0BEB4EBFBAFn, 0xE5E90A5B3DDAA3CAn, 0x8453542209F4A145n, 0x80A6FFD72BB5A707n, 0x14E0C4705A1ABF6An, 0xD699EC1FC18A677Dn ]), /*D2*/
new BigUint64Array([ 0x7021A124E3181575n, 0xDC7AAE2817AD945Fn, 0x8BB5521E7F0D565An, 0x6671D3792F0805EEn, 0xD3888EA394413A1An, 0xCE4D7E47B55BF9CCn ]), /*D3*/
new BigUint64Array([ 0x22F440263CAADE68n, 0xE77BB287772EAC7Bn, 0x29493775962A40E9n, 0x1E06A27FA68CB91Bn, 0xDDEF02932ABDB9C7n, 0x79F03B88DC175233n ]), /*D4*/
new BigUint64Array([ 0x65F6D517B53E2391n, 0x97DB65A2F00B1C39n, 0x1D77AE9B85AA4855n, 0x19133B9B3E9B0771n, 0x6376D9F11A7DB3D4n, 0x949AD02F5AE16184n ]), /*D5*/
new BigUint64Array([ 0xFE4434CDE09D923Bn, 0x03B0FCFD713B7052n, 0x2D713290D4A67238n, 0x2B56946FF629EE96n, 0x60A15D01B2B3C428n, 0x0B1D5EAF793933A0n ]), /*D6*/
new BigUint64Array([ 0xBC40FCFB0E0D494Bn, 0xA31C4648C7B3D1DEn, 0xF1113C219A07EC8Dn, 0x2378BEB1A5C2BD1Cn, 0x190CC3478070A194n, 0x63DAB6E1CCF56329n ]), /*D7*/
new BigUint64Array([ 0x901B6B9E82BABF91n, 0x872A234C45D61001n, 0x6CA46A95C1CC6D6Cn, 0x22779315E0F02295n, 0x60A59396346BE6ACn, 0xFB67A503CB488846n ]), /*D8*/
new BigUint64Array([ 0x50D440F74C97660Bn, 0xE71ECABF64EDFE0Cn, 0x80201B895718CE22n, 0xA05D89804D35D306n, 0x8F700402A2B0D086n, 0x326FCB334CA4DFC0n ]), /*D9*/
new BigUint64Array([ 0xBCFBD02EA005CDD5n, 0xF0225A4675553115n, 0x08E18B3692A7AF62n, 0x05D34A820C8CED0An, 0x51A8D7CEC33E80EAn, 0x0AC007503FAE879Cn ]), /*DA*/
new BigUint64Array([ 0xF43EEFB5C83C521An, 0xE5E9B05FC48841ACn, 0x79C52C38BF85B5F9n, 0x26CD0818AE3BF7A9n, 0x4F385C32CA8F5F74n, 0xF17B22107B954752n ]), /*DB*/
new BigUint64Array([ 0x1A48FC969198A4B0n, 0xD9A78940BB0C4E1Cn, 0x42781D9BE60E7691n, 0x87D1CAF3680F8A30n, 0xD09FF193606AAF29n, 0x4518DABC60048793n ]), /*DC*/
new BigUint64Array([ 0xF05D48134A56A034n, 0x89A65EEB91DC69B9n, 0x8FC7F43960E63C62n, 0xFA1C6B9FF9415E92n, 0x7E219D4E56347935n, 0x2B6A48D6DE0AEF85n ]), /*DD*/
new BigUint64Array([ 0x1A7FF9C54B045FFDn, 0x44A0A9562E9468B2n, 0xF11425A22D1EBF92n, 0x208D33120BD28E0En, 0xF2D74197AF80E162n, 0xCEEDCA73DFE66C93n ]), /*DE*/
new BigUint64Array([ 0xD57190439D29C9A4n, 0x44C007DC2B5EAF9Dn, 0xEF6DDF48A780CEDCn, 0x61B205E4A96024B1n, 0x1885B6CE84C3FE5Dn, 0xB8B56986B6E2CE21n ]), /*DF*/
new BigUint64Array([ 0xF36DACFA34237E99n, 0xBE45EB5253BCFED0n, 0x402C6946B8B21AC0n, 0x2460A6FCE7E9CD67n, 0xF89A6D5B162629FCn, 0xF66CCEA374DB821En ]), /*E0*/
new BigUint64Array([ 0x16E06074DCC31A1Dn, 0xF172017AC3FA38C3n, 0xBBC1CE4BB784ED60n, 0xDA89A8BCE82AE671n, 0xA6DACFFB8D26C0BBn, 0x185181AE9609F6D6n ]), /*E1*/
new BigUint64Array([ 0xF110DBDD94D17661n, 0xF59FBB4CBA69F393n, 0x463B60FB3F3C5E00n, 0x1C60B896FE8E78ACn, 0x5EB3E26795DE5AB6n, 0x997328D4654D6219n ]), /*E2*/
new BigUint64Array([ 0x21069118ABE24B61n, 0x811CB8C48FCEFC6An, 0x483B032CFB56F902n, 0xFB32E848198CC057n, 0xA620815462A04F70n, 0x900038D1894959E2n ]), /*E3*/
new BigUint64Array([ 0x5AD509789BFFECD0n, 0xDDCD5E8325F69CA0n, 0x154D8F1ACD9B8C82n, 0xAC7DF75E94CE3CAFn, 0x6D6554D1B38754BEn, 0xB5DB64AF738486E7n ]), /*E4*/
new BigUint64Array([ 0x35A308A1AC9A43BFn, 0x2647805AB3E6E492n, 0x4BB74A616F61588Fn, 0xFA4602EE5BDBF54En, 0x3FDD62470A7174DBn, 0x5795433CA808FAACn ]), /*E5*/
new BigUint64Array([ 0x51A094B8774CA605n, 0x5F07974C74EEF225n, 0x022AFEF7AD81A953n, 0x0967C44BBA336FD6n, 0x8AA327918AECBA3Dn, 0xF70B8436573C3F0An ]), /*E6*/
new BigUint64Array([ 0xCF374F83420766C3n, 0x71F31901A13EF07Cn, 0x63AD56C7DEF9DC0Fn, 0x9E5BB5E859F5A231n, 0xD0BF453BB9893E4Cn, 0xA1E14B66C2719760n ]), /*E7*/
new BigUint64Array([ 0xB41861CC73FD3E48n, 0x461D79A138B04BE1n, 0x4010D37D37FBA817n, 0x7D9622AA693225A4n, 0x2204454B8126799An, 0x33A5D487DCCD6EB6n ]), /*E8*/
new BigUint64Array([ 0xD291D0317A053320n, 0xE27678F1E50D1F76n, 0x9A3D663A63159FC7n, 0xAD7B4D3F67BAB452n, 0x269CC05E2B33CE1Cn, 0x0FB8261CD734BCC3n ]), /*E9*/
new BigUint64Array([ 0xF3D0546D3D4A25EEn, 0xB42874AD28C9B7F2n, 0x73EC788B29962D28n, 0x4AE73A48132B8553n, 0x756C99D7A0910B66n, 0xECA7E2C2712D555Cn ]), /*EA*/
new BigUint64Array([ 0x559FA5BF24911FDDn, 0xA1DDF5DE3770554Bn, 0xC7C3FD139366B946n, 0x6E7ECC0C881D2BA4n, 0x14E76D6A27E54B87n, 0x7352D5FBC4FAB878n ]), /*EB*/
new BigUint64Array([ 0xF19A622BED8DAC0An, 0x35548E5D7EFC5A2En, 0xCAC84974B4F057B2n, 0xAB317ED03D0335AEn, 0x710FC138F2C51738n, 0x9C90CC495A403416n ]), /*EC*/
new BigUint64Array([ 0x9FA7DEB936F10461n, 0xA1529B0B58462F9Dn, 0x9F109111C8B9EC65n, 0x23A3EB28444E33EAn, 0x554084CA75118937n, 0x599D58A7C946EAC2n ]), /*ED*/
new BigUint64Array([ 0x6EC3AABB7856AC4En, 0x980E6907C1CBCCAFn, 0x1F8557ADC700CBF5n, 0x7DCB1CE0AF48D9F4n, 0x7FB3DADF8199AB8An, 0xE6B36DB8FADBF312n ]), /*EE*/
new BigUint64Array([ 0xC00F0D3F7A101660n, 0x605B94B12DB6C697n, 0x79944F7BA2B65F38n, 0x40858ADEDD47E2BCn, 0x1E044BDB0E9FB02Bn, 0x86C79D01A3109539n ]), /*EF*/
new BigUint64Array([ 0x9731893D5B98482An, 0xFB8DE267F9790326n, 0x8780F407143A505Dn, 0xA41CAEFCCCD3A8E3n, 0xA042F0B3D7B7A7FEn, 0x3E3151FEBB19A1ACn ]), /*F0*/
new BigUint64Array([ 0xE7EDF679003A6950n, 0xBAFC97D4A8C6AB12n, 0x13C096B49C79559An, 0xC3052501434B5019n, 0x1280FB23E7ADFB09n, 0x1959905D31BD2FC0n ]), /*F1*/
new BigUint64Array([ 0x575C0C46FCFCC65Bn, 0xFE625E873F34B419n, 0x1696FDCC7F51B8A3n, 0xC79C56F30E5AE7C0n, 0x14E3461CD27FAD15n, 0x1B7BCCB9CB472859n ]), /*F2*/
new BigUint64Array([ 0x3806FE58E5CC8F16n, 0xF8244ED76734C1BFn, 0x4E04940E0F5DDB56n, 0x5BD0AFDDC4158B7Bn, 0xA4C6BA949911C5C9n, 0xFF6E2AC155AE9726n ]), /*F3*/
new BigUint64Array([ 0x49C7C844B8114144n, 0xB450E41BCA35CB00n, 0x302450EC67BEF97Cn, 0xA8662049DB1E0D8Bn, 0xDA69C022528EB8FAn, 0x6ABBF16585C1A2F7n ]), /*F4*/
new BigUint64Array([ 0x37BB420DF67F044En, 0xDCC0E9F3E2EF07B3n, 0x4D10088618777841n, 0x0492E5379305DAAEn, 0x3DA4791C37E4128Fn, 0x80688445CBA4EA17n ]), /*F5*/
new BigUint64Array([ 0x51398A7CE4CF8D9Dn, 0x49A5FCD891A69CA5n, 0x3D72A60EC2392DA5n, 0x0E8296B879AB5539n, 0x6BCB00AF2EDC0BDEn, 0xBEB93848E54B3E90n ]), /*F6*/
new BigUint64Array([ 0x7AD7C52A18922E19n, 0x29292C57C4F5B8F5n, 0xF0CF1F98A577C10Bn, 0x072B9F293BB660CDn, 0x09B8604F5575B6FBn, 0xDECB396A81B9FCDBn ]), /*F7*/
new BigUint64Array([ 0x254AD7ADB4C220DEn, 0x6C62E20F95A0070Dn, 0xADEB89F339309BD8n, 0xA2F685CC178B289Fn, 0x9343905B5DEE95A5n, 0xE0C30F34A2977C86n ]), /*F8*/
new BigUint64Array([ 0x669CD51AF7CFBFAAn, 0xE3E0806F6880271Dn, 0x6934C259E098BF90n, 0x5DFEEAF0FBCA7249n, 0x89F74B948B4118B6n, 0x53640AEAFB6807C3n ]), /*F9*/
new BigUint64Array([ 0xDD3BACDCC04BE120n, 0x6D4949BD64198E51n, 0x31FDB39666598A74n, 0xBBBC6DE9C0C15A81n, 0xF27F201C61C06279n, 0x2738AFE3E84E5CDDn ]), /*FA*/
new BigUint64Array([ 0xCDD71FD35A6411DEn, 0x3CC012793E87523Fn, 0xB0CFF8720FCA36F3n, 0x93E85FE07300F012n, 0xE894A085263F090Bn, 0x2DF60A01DAFA90ECn ]), /*FB*/
new BigUint64Array([ 0x9DA50DB1EEB4FADDn, 0xE524E49C9974799An, 0xDE09FFF26A24CBB9n, 0xAF9D71E9F3ACE7CDn, 0xEB62B1A62566EC9Dn, 0x06D02AB1217D3553n ]), /*FC*/
new BigUint64Array([ 0xDD31E6391AE03522n, 0x93ACD1065B35E915n, 0xF4EB56CC03E79218n, 0x0717815C850C97F1n, 0xBF4F6A8AC0540A6Fn, 0xFCF8AE5DE9507FF0n ]), /*FD*/
new BigUint64Array([ 0xAB45B413DC50B207n, 0x40B417369551D8D5n, 0xCA32286A108E7210n, 0x03225E54D8D093AFn, 0x4B6CA5591EA576E9n, 0x4E12AB774DC4E062n ]), /*FE*/
new BigUint64Array([ 0xD9F4F850DF6CB96Cn, 0x8ABAD81B1667335Dn, 0xCB4079CFE79C72E5n, 0xE5542F763E316996n, 0x303E4B79B9D397C4n, 0xE46933038B945111n ]), /*FF*/
new BigUint64Array([ 0x75B15CC53B0D2502n, 0xDA1BCA6BA0524358n, 0x9EDA977556C06B7En, 0x6C57727ECF0A1325n, 0xDC613D5A78E5C3F8n, 0xCE062D94A3B4945An ]) /*ZZ*/
];
const NUHASH_RND = [
new BigUint64Array([ 0x6A09E667F3BCC908n, 0xB2FB1366EA957D3En, 0x3ADEC17512775099n, 0xDA2F590B0667322An, 0x95F9060875714587n, 0x5163FCDFB907B672n ]), /*R1*/
new BigUint64Array([ 0x1EE950BC8738F694n, 0xF0090E6C7BF44ED1n, 0xA4405D0E855E3E9Cn, 0xA60B38C0237866F7n, 0x956379222D108B14n, 0x8C1578E45EF89C67n ]), /*R2*/
new BigUint64Array([ 0x8DAB5147176FD3B9n, 0x9654C68663E7909Bn, 0xEA5E241F06DCB05Dn, 0xD549411320819495n, 0x0272956DB1FA1DFBn, 0xE9A74059D7927C18n ]), /*R3*/
new BigUint64Array([ 0x84C9B579AA516CA3n, 0x719E6836DF046D8En, 0x0209B803FC646A5En, 0x6654BD3EF7B43D7Fn, 0xED437C7F9444260Fn, 0xBD40C483EF550385n ]), /*R4*/
new BigUint64Array([ 0x83F97BBD45EFB866n, 0x3107145D5FEBE765n, 0xA49E94EC7F597105n, 0xFBFC2E1FA763EF01n, 0xF3599C82F2FE500Bn, 0x848CF0BD252AE046n ]) /*R5*/
];
const NUHASH_SBX = new Uint8Array([
0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
]);
const NUHASH_FIN = new Uint8Array([
0xB4, 0x98, 0x0C, 0x84, 0x24, 0xF3, 0x27, 0x8F, 0xA6, 0x5E, 0xF0, 0x65, 0x86, 0xBC, 0x09, 0x92,
0x75, 0x21, 0xB9, 0x95, 0x66, 0x8A, 0x2F, 0x13, 0xB5, 0xB7, 0x6B, 0x33, 0x2A, 0xBF, 0xF7, 0x0F,
0x0A, 0xE7, 0x16, 0x30, 0x77, 0x61, 0x48, 0x90, 0xDF, 0xAF, 0x72, 0x79, 0xF6, 0xA5, 0x58, 0xD1,
0xF2, 0x40, 0x9F, 0x41, 0xE8, 0x03, 0xA1, 0x05, 0xC5, 0x35, 0xC7, 0x97, 0x54, 0x7B, 0xB3, 0xF5,
0xB8, 0xA8, 0xD8, 0x68, 0x51, 0xAD, 0xE3, 0xC2, 0x5D, 0xCF, 0xEA, 0x89, 0x37, 0xF1, 0x55, 0x60,
0xA4, 0x26, 0xAC, 0x32, 0x0E, 0xD2, 0x85, 0x6F, 0xC8, 0xDC, 0x36, 0x6D, 0xA3, 0x22, 0x5A, 0xC9,
0x5C, 0x91, 0x1B, 0x5B, 0xE9, 0x78, 0xD7, 0x44, 0xEB, 0x1A, 0xC0, 0xCA, 0x94, 0x53, 0xC4, 0x11,
0x12, 0xCC, 0xFF, 0x88, 0x0D, 0x4E, 0xB2, 0xB1, 0x4A, 0x3A, 0xE1, 0x2E, 0x0B, 0x4C, 0x5F, 0x06,
0x81, 0x31, 0xD9, 0x3D, 0xFD, 0x43, 0x67, 0x62, 0x00, 0x9C, 0x50, 0xCE, 0x6E, 0x15, 0x82, 0x29,
0x96, 0xDA, 0x87, 0xEF, 0x6C, 0xC1, 0x8B, 0x07, 0x8E, 0x17, 0xEC, 0x9A, 0xBA, 0x46, 0x04, 0x73,
0x39, 0xE4, 0x63, 0xBE, 0x64, 0x47, 0xE6, 0x3F, 0x25, 0x52, 0x59, 0xA7, 0x42, 0x38, 0x99, 0x01,
0xE5, 0x1D, 0x28, 0x7A, 0xB0, 0x7C, 0x9D, 0x56, 0xE2, 0xD6, 0xA0, 0xF4, 0x1E, 0xE0, 0xD3, 0x83,
0x6A, 0xBB, 0x18, 0x20, 0xAE, 0x57, 0xAA, 0x8D, 0x71, 0x1F, 0x34, 0x4D, 0x2D, 0x3C, 0x2B, 0xF8,
0x10, 0x7E, 0xCB, 0xFB, 0x49, 0xA2, 0x45, 0x7F, 0x3E, 0xBD, 0xC3, 0xFC, 0x14, 0x74, 0x23, 0x4F,
0x7D, 0x69, 0x93, 0x19, 0xD0, 0x1C, 0x08, 0xF9, 0xDD, 0xC6, 0x2C, 0x9E, 0xA9, 0x4B, 0xFE, 0xED,
0x76, 0xDB, 0xAB, 0xD4, 0x80, 0xCD, 0xB6, 0x8C, 0xDE, 0x70, 0x9B, 0xD5, 0xFA, 0xEE, 0x02, 0x3B
]);
/* ------------------------------------------------------------------------ */
/* Update function */
/* ------------------------------------------------------------------------ */
function update(hash, index) {
const row_addr = NUHASH_XOR[index];
const data_view = new DataView(hash.buffer);
const begin = data_view.byteOffset, end = begin + data_view.byteLength;
for (let rnd_key of NUHASH_RND) {
const initial = hash[0];
hash[0] = BigInt.asUintN(64, (hash[0] << 32n) | (hash[1] >> 32n)) ^ row_addr[0] ^ rnd_key[0];
hash[0] = BigInt.asUintN(64, (hash[0] ^ (hash[0] >> 31n)) * 0x7FB5D329728EA185n);
hash[0] = BigInt.asUintN(64, (hash[0] ^ (hash[0] >> 27n)) * 0x81DADEF4BC2DD44Dn);
hash[0] = hash[0] ^ (hash[0] >> 33n)
hash[1] = BigInt.asUintN(64, (hash[1] << 32n) | (hash[2] >> 32n)) ^ row_addr[1] ^ rnd_key[1];
hash[1] = BigInt.asUintN(64, (hash[1] ^ (hash[1] >> 31n)) * 0x99BCF6822B23CA35n);
hash[1] = BigInt.asUintN(64, (hash[1] ^ (hash[1] >> 30n)) * 0x14020A57ACCED8B7n);
hash[1] = hash[1] ^ (hash[1] >> 33n)
hash[2] = BigInt.asUintN(64, (hash[2] << 32n) | (hash[3] >> 32n)) ^ row_addr[2] ^ rnd_key[2];
hash[2] = BigInt.asUintN(64, (hash[2] ^ (hash[2] >> 31n)) * 0x69B0BC90BD9A8C49n);
hash[2] = BigInt.asUintN(64, (hash[2] ^ (hash[2] >> 27n)) * 0x3D5E661A2A77868Dn);
hash[2] = hash[2] ^ (hash[2] >> 30n)
hash[3] = BigInt.asUintN(64, (hash[3] << 32n) | (hash[4] >> 32n)) ^ row_addr[3] ^ rnd_key[3];
hash[3] = BigInt.asUintN(64, (hash[3] ^ (hash[3] >> 30n)) * 0x16A6AC37883AF045n);
hash[3] = BigInt.asUintN(64, (hash[3] ^ (hash[3] >> 26n)) * 0xCC9C31A4274686A5n);
hash[3] = hash[3] ^ (hash[3] >> 32n)
hash[4] = BigInt.asUintN(64, (hash[4] << 32n) | (hash[5] >> 32n)) ^ row_addr[4] ^ rnd_key[4];
hash[4] = BigInt.asUintN(64, (hash[4] ^ (hash[4] >> 30n)) * 0xBF58476D1CE4E5B9n);
hash[4] = BigInt.asUintN(64, (hash[4] ^ (hash[4] >> 27n)) * 0x94D049BB133111EBn);
hash[4] = hash[4] ^ (hash[4] >> 31n)
hash[5] = BigInt.asUintN(64, (hash[5] << 32n) | (initial >> 32n)) ^ row_addr[5] ^ rnd_key[5];
hash[5] = BigInt.asUintN(64, (hash[5] ^ (hash[5] >> 30n)) * 0x4BE98134A5976FD3n);
hash[5] = BigInt.asUintN(64, (hash[5] ^ (hash[5] >> 29n)) * 0x3BC0993A5AD19A13n);
hash[5] = hash[5] ^ (hash[5] >> 31n)
for (let offset = begin; offset < end; ++offset) {
data_view.setUint8(offset, NUHASH_SBX[data_view.getUint8(offset)]);
}
}
}
/* ------------------------------------------------------------------------ */
/* Bit conversion */
/* ------------------------------------------------------------------------ */
function toBigEndian(hash) {
const result = new Uint8Array(NUHASH_BYTES);
for (let i = 0; i < result.length; ++i) {
result[i] = Number(BigInt.asUintN(8, hash[i >> 3] >> BigInt(56 - ((i & 0x7) << 3))));
}
return result;
}
/* ------------------------------------------------------------------------ */
/* Stream API */
/* ------------------------------------------------------------------------ */
export class NuHash {
#hash;
#finished;
constructor() {
this.#hash = NUHASH_INI.slice();
this.#finished = false;
}
update(src) {
if (!((src instanceof Uint8Array) || (src instanceof String) || (typeof(src) === 'string'))) {
throw Error('invalid argument: src must be of type Uint8Array or String!');
}
this.#checkState()
if (src) {
if ((src instanceof String) || (typeof(src) === 'string')) {
src = this.update(new TextEncoder().encode(src));
}
for (let b of src) {
update(this.#hash, b);
}
}
return this;
}
doFinal() {
this.#checkState(Boolean(1))
update(this.#hash, 256)
for (let b of NUHASH_FIN.slice()) {
update(this.#hash, b);
}
return toBigEndian(this.#hash);
}
reset() {
this.#hash.set(NUHASH_INI);
this.#finished = false;
}
#checkState(setFlag = false) {
if (this.#finished) {
throw Error('computation is already finished!');
}
if (setFlag) {
this.#finished = true;
}
}
}
/* ------------------------------------------------------------------------ */
/* Simple API */
/* ------------------------------------------------------------------------ */
export function compute(src) {
if (!((src instanceof Uint8Array) || (src instanceof String) || (typeof(src) === 'string'))) {
throw Error('invalid argument: src must be of type Uint8Array or String!');
}
return new NuHash().update(src).doFinal();
}
/* ------------------------------------------------------------------------ */
/* Utilities */
/* ------------------------------------------------------------------------ */
export function toHexStr(src) {
if (!(src instanceof Uint8Array)) {
throw Error('invalid argument: src must be an Uint8Array');
}
let stringBuilder = new String();
for (let value of src) {
stringBuilder += value.toString(16).padStart(2, '0');
}
return stringBuilder;
}