blob: 8fe9444e79e05e09df34562091bab50c610c260e [file] [log] [blame] [edit]
// See file LICENSE for more information.
library impl.digest.tiger;
import 'dart:typed_data';
import 'package:pointycastle/api.dart';
import 'package:pointycastle/src/impl/base_digest.dart';
import 'package:pointycastle/src/registry/registry.dart';
import 'package:pointycastle/src/ufixnum.dart';
/// Implementation of Tiger digest.
class TigerDigest extends BaseDigest implements Digest {
static final FactoryConfig factoryConfig =
StaticFactoryConfig(Digest, 'Tiger', () => TigerDigest());
static const _DIGEST_LENGTH = 24;
static final _keyMask0 = Register64(0xA5A5A5A5, 0xA5A5A5A5);
static final _keyMask7 = Register64(0x01234567, 0x89ABCDEF);
final _a = Register64();
final _b = Register64();
final _c = Register64();
final _byteCount = Register64();
final _wordBuffer = Uint8List(8);
int _wordBufferOffset = 0;
final _buffer = Register64List(8);
int _bufferOffset = 0;
TigerDigest() {
reset();
}
@override
final algorithmName = 'Tiger';
@override
final digestSize = _DIGEST_LENGTH;
@override
void reset() {
_a.set(0x01234567, 0x89ABCDEF);
_b.set(0xFEDCBA98, 0x76543210);
_c.set(0xF096A5B4, 0xC3B2E187);
_bufferOffset = 0;
_buffer.fillRange(0, _buffer.length, 0);
_wordBufferOffset = 0;
_wordBuffer.fillRange(0, _wordBuffer.length, 0);
_byteCount.set(0);
}
@override
int doFinal(Uint8List out, int outOff) {
_finish();
_a.pack(out, outOff, Endian.little);
_b.pack(out, outOff + 8, Endian.little);
_c.pack(out, outOff + 16, Endian.little);
reset();
return _DIGEST_LENGTH;
}
@override
void updateByte(int inp) {
_wordBuffer[_wordBufferOffset++] = inp;
if (_wordBufferOffset == _wordBuffer.length) {
_processWord(_wordBuffer, 0);
}
_byteCount.sum(1);
}
@override
void update(Uint8List? inp, int inpOff, int? len) {
// fill the current word
while ((_wordBufferOffset != 0) && (len! > 0)) {
updateByte(inp![inpOff]);
inpOff++;
len--;
}
// process whole words.
while (len! > 8) {
_processWord(inp, inpOff);
inpOff += 8;
len -= 8;
_byteCount.sum(8);
}
// load in the remainder.
while (len! > 0) {
updateByte(inp![inpOff]);
inpOff++;
len--;
}
}
void _processWord(Uint8List? b, int off) {
_buffer[_bufferOffset++].unpack(b, off, Endian.little);
if (_bufferOffset == _buffer.length) {
_processBlock();
}
_wordBufferOffset = 0;
}
void _processBlock() {
// save abc
final aa = Register64(_a);
final bb = Register64(_b);
final cc = Register64(_c);
// rounds and schedule
_roundABC(_buffer[0], 5);
_roundBCA(_buffer[1], 5);
_roundCAB(_buffer[2], 5);
_roundABC(_buffer[3], 5);
_roundBCA(_buffer[4], 5);
_roundCAB(_buffer[5], 5);
_roundABC(_buffer[6], 5);
_roundBCA(_buffer[7], 5);
_keySchedule();
_roundCAB(_buffer[0], 7);
_roundABC(_buffer[1], 7);
_roundBCA(_buffer[2], 7);
_roundCAB(_buffer[3], 7);
_roundABC(_buffer[4], 7);
_roundBCA(_buffer[5], 7);
_roundCAB(_buffer[6], 7);
_roundABC(_buffer[7], 7);
_keySchedule();
_roundBCA(_buffer[0], 9);
_roundCAB(_buffer[1], 9);
_roundABC(_buffer[2], 9);
_roundBCA(_buffer[3], 9);
_roundCAB(_buffer[4], 9);
_roundABC(_buffer[5], 9);
_roundBCA(_buffer[6], 9);
_roundCAB(_buffer[7], 9);
// feed forward
_a.xor(aa);
_b.sub(bb);
_c.sum(cc);
// clear the x buffer
_bufferOffset = 0;
_buffer.fillRange(0, _buffer.length, 0);
}
void _processLength(Register64 bitLength) {
_buffer[7].set(bitLength);
}
void _finish() {
var bitLength = Register64(_byteCount)..shiftl(3);
updateByte(0x01);
while (_wordBufferOffset != 0) {
updateByte(0);
}
_processLength(bitLength);
_processBlock();
}
void _keySchedule() {
final r = Register64();
_buffer[0].sub(r
..set(_buffer[7])
..xor(_keyMask0));
_buffer[1].xor(_buffer[0]);
_buffer[2].sum(_buffer[1]);
_buffer[3].sub(r
..set(_buffer[1])
..not()
..shiftl(19)
..xor(_buffer[2]));
_buffer[4].xor(_buffer[3]);
_buffer[5].sum(_buffer[4]);
_buffer[6].sub(r
..set(_buffer[4])
..not()
..shiftr(23)
..xor(_buffer[5]));
_buffer[7].xor(_buffer[6]);
_buffer[0].sum(_buffer[7]);
_buffer[1].sub(r
..set(_buffer[7])
..not()
..shiftl(19)
..xor(_buffer[0]));
_buffer[2].xor(_buffer[1]);
_buffer[3].sum(_buffer[2]);
_buffer[4].sub(r
..set(_buffer[2])
..not()
..shiftr(23)
..xor(_buffer[3]));
_buffer[5].xor(_buffer[4]);
_buffer[6].sum(_buffer[5]);
_buffer[7].sub(r
..set(_buffer[6])
..xor(_keyMask7));
}
void _roundABC(Register64 x, int mul) {
final r = Register64();
final c = Uint8List(8);
_c.xor(x);
_c.pack(c, 0, Endian.little);
_a.sub(r
..set(_t1[c[0]])
..xor(_t2[c[2]])
..xor(_t3[c[4]])
..xor(_t4[c[6]]));
_b.sum(r
..set(_t4[c[1]])
..xor(_t3[c[3]])
..xor(_t2[c[5]])
..xor(_t1[c[7]]));
_b.mul(mul);
}
void _roundBCA(Register64 x, int mul) {
final r = Register64();
final a = Uint8List(8);
_a.xor(x);
_a.pack(a, 0, Endian.little);
_b.sub(r
..set(_t1[a[0]])
..xor(_t2[a[2]])
..xor(_t3[a[4]])
..xor(_t4[a[6]]));
_c.sum(r
..set(_t4[a[1]])
..xor(_t3[a[3]])
..xor(_t2[a[5]])
..xor(_t1[a[7]]));
_c.mul(mul);
}
void _roundCAB(Register64 x, int mul) {
final r = Register64();
final b = Uint8List(8);
_b.xor(x);
_b.pack(b, 0, Endian.little);
_c.sub(r
..set(_t1[b[0]])
..xor(_t2[b[2]])
..xor(_t3[b[4]])
..xor(_t4[b[6]]));
_a.sum(r
..set(_t4[b[1]])
..xor(_t3[b[3]])
..xor(_t2[b[5]])
..xor(_t1[b[7]]));
_a.mul(mul);
}
@override
int get byteLength => 64;
}
// S-Boxes
final _t1 = [
Register64(0x02aab17c, 0xf7e90c5e),
Register64(0xac424b03, 0xe243a8ec),
Register64(0x72cd5be3, 0x0dd5fcd3),
Register64(0x6d019b93, 0xf6f97f3a),
Register64(0xcd9978ff, 0xd21f9193),
Register64(0x7573a1c9, 0x708029e2),
Register64(0xb164326b, 0x922a83c3),
Register64(0x46883eee, 0x04915870),
Register64(0xeaace305, 0x7103ece6),
Register64(0xc54169b8, 0x08a3535c),
Register64(0x4ce75491, 0x8ddec47c),
Register64(0x0aa2f4df, 0xdc0df40c),
Register64(0x10b76f18, 0xa74dbefa),
Register64(0xc6ccb623, 0x5ad1ab6a),
Register64(0x13726121, 0x572fe2ff),
Register64(0x1a488c6f, 0x199d921e),
Register64(0x4bc9f9f4, 0xda0007ca),
Register64(0x26f5e6f6, 0xe85241c7),
Register64(0x859079db, 0xea5947b6),
Register64(0x4f1885c5, 0xc99e8c92),
Register64(0xd78e761e, 0xa96f864b),
Register64(0x8e36428c, 0x52b5c17d),
Register64(0x69cf6827, 0x373063c1),
Register64(0xb607c93d, 0x9bb4c56e),
Register64(0x7d820e76, 0x0e76b5ea),
Register64(0x645c9cc6, 0xf07fdc42),
Register64(0xbf38a078, 0x243342e0),
Register64(0x5f6b343c, 0x9d2e7d04),
Register64(0xf2c28aeb, 0x600b0ec6),
Register64(0x6c0ed85f, 0x7254bcac),
Register64(0x71592281, 0xa4db4fe5),
Register64(0x1967fa69, 0xce0fed9f),
Register64(0xfd5293f8, 0xb96545db),
Register64(0xc879e9d7, 0xf2a7600b),
Register64(0x86024892, 0x0193194e),
Register64(0xa4f9533b, 0x2d9cc0b3),
Register64(0x9053836c, 0x15957613),
Register64(0xdb6dcf8a, 0xfc357bf1),
Register64(0x18beea7a, 0x7a370f57),
Register64(0x037117ca, 0x50b99066),
Register64(0x6ab30a97, 0x74424a35),
Register64(0xf4e92f02, 0xe325249b),
Register64(0x7739db07, 0x061ccae1),
Register64(0xd8f3b49c, 0xeca42a05),
Register64(0xbd56be3f, 0x51382f73),
Register64(0x45faed58, 0x43b0bb28),
Register64(0x1c813d5c, 0x11bf1f83),
Register64(0x8af0e4b6, 0xd75fa169),
Register64(0x33ee18a4, 0x87ad9999),
Register64(0x3c26e8ea, 0xb1c94410),
Register64(0xb510102b, 0xc0a822f9),
Register64(0x141eef31, 0x0ce6123b),
Register64(0xfc65b900, 0x59ddb154),
Register64(0xe0158640, 0xc5e0e607),
Register64(0x884e0798, 0x26c3a3cf),
Register64(0x930d0d95, 0x23c535fd),
Register64(0x35638d75, 0x4e9a2b00),
Register64(0x4085fccf, 0x40469dd5),
Register64(0xc4b17ad2, 0x8be23a4c),
Register64(0xcab2f0fc, 0x6a3e6a2e),
Register64(0x2860971a, 0x6b943fcd),
Register64(0x3dde6ee2, 0x12e30446),
Register64(0x6222f32a, 0xe01765ae),
Register64(0x5d550bb5, 0x478308fe),
Register64(0xa9efa98d, 0xa0eda22a),
Register64(0xc351a716, 0x86c40da7),
Register64(0x1105586d, 0x9c867c84),
Register64(0xdcffee85, 0xfda22853),
Register64(0xccfbd026, 0x2c5eef76),
Register64(0xbaf294cb, 0x8990d201),
Register64(0xe69464f5, 0x2afad975),
Register64(0x94b013af, 0xdf133e14),
Register64(0x06a7d1a3, 0x2823c958),
Register64(0x6f95fe51, 0x30f61119),
Register64(0xd92ab34e, 0x462c06c0),
Register64(0xed7bde33, 0x887c71d2),
Register64(0x79746d6e, 0x6518393e),
Register64(0x5ba41938, 0x5d713329),
Register64(0x7c1ba6b9, 0x48a97564),
Register64(0x31987c19, 0x7bfdac67),
Register64(0xde6c23c4, 0x4b053d02),
Register64(0x581c49fe, 0xd002d64d),
Register64(0xdd474d63, 0x38261571),
Register64(0xaa4546c3, 0xe473d062),
Register64(0x928fce34, 0x9455f860),
Register64(0x48161bba, 0xcaab94d9),
Register64(0x63912430, 0x770e6f68),
Register64(0x6ec8a5e6, 0x02c6641c),
Register64(0x87282515, 0x337ddd2b),
Register64(0x2cda6b42, 0x034b701b),
Register64(0xb03d37c1, 0x81cb096d),
Register64(0xe1084382, 0x66c71c6f),
Register64(0x2b3180c7, 0xeb51b255),
Register64(0xdf92b82f, 0x96c08bbc),
Register64(0x5c68c8c0, 0xa632f3ba),
Register64(0x5504cc86, 0x1c3d0556),
Register64(0xabbfa4e5, 0x5fb26b8f),
Register64(0x41848b0a, 0xb3baceb4),
Register64(0xb334a273, 0xaa445d32),
Register64(0xbca696f0, 0xa85ad881),
Register64(0x24f6ec65, 0xb528d56c),
Register64(0x0ce1512e, 0x90f4524a),
Register64(0x4e9dd79d, 0x5506d35a),
Register64(0x258905fa, 0xc6ce9779),
Register64(0x2019295b, 0x3e109b33),
Register64(0xf8a9478b, 0x73a054cc),
Register64(0x2924f2f9, 0x34417eb0),
Register64(0x3993357d, 0x536d1bc4),
Register64(0x38a81ac2, 0x1db6ff8b),
Register64(0x47c4fbf1, 0x7d6016bf),
Register64(0x1e0faadd, 0x7667e3f5),
Register64(0x7abcff62, 0x938beb96),
Register64(0xa78dad94, 0x8fc179c9),
Register64(0x8f1f98b7, 0x2911e50d),
Register64(0x61e48eae, 0x27121a91),
Register64(0x4d62f7ad, 0x31859808),
Register64(0xeceba345, 0xef5ceaeb),
Register64(0xf5ceb25e, 0xbc9684ce),
Register64(0xf633e20c, 0xb7f76221),
Register64(0xa32cdf06, 0xab8293e4),
Register64(0x985a202c, 0xa5ee2ca4),
Register64(0xcf0b8447, 0xcc8a8fb1),
Register64(0x9f765244, 0x979859a3),
Register64(0xa8d516b1, 0xa1240017),
Register64(0x0bd7ba3e, 0xbb5dc726),
Register64(0xe54bca55, 0xb86adb39),
Register64(0x1d7a3afd, 0x6c478063),
Register64(0x519ec608, 0xe7669edd),
Register64(0x0e5715a2, 0xd149aa23),
Register64(0x177d4571, 0x848ff194),
Register64(0xeeb55f32, 0x41014c22),
Register64(0x0f5e5ca1, 0x3a6e2ec2),
Register64(0x8029927b, 0x75f5c361),
Register64(0xad139fab, 0xc3d6e436),
Register64(0x0d5df1a9, 0x4ccf402f),
Register64(0x3e8bd948, 0xbea5dfc8),
Register64(0xa5a0d357, 0xbd3ff77e),
Register64(0xa2d12e25, 0x1f74f645),
Register64(0x66fd9e52, 0x5e81a082),
Register64(0x2e0c90ce, 0x7f687a49),
Register64(0xc2e8bcbe, 0xba973bc5),
Register64(0x000001bc, 0xe509745f),
Register64(0x423777bb, 0xe6dab3d6),
Register64(0xd1661c7e, 0xaef06eb5),
Register64(0xa1781f35, 0x4daacfd8),
Register64(0x2d11284a, 0x2b16affc),
Register64(0xf1fc4f67, 0xfa891d1f),
Register64(0x73ecc25d, 0xcb920ada),
Register64(0xae610c22, 0xc2a12651),
Register64(0x96e0a810, 0xd356b78a),
Register64(0x5a9a381f, 0x2fe7870f),
Register64(0xd5ad62ed, 0xe94e5530),
Register64(0xd225e5e8, 0x368d1427),
Register64(0x65977b70, 0xc7af4631),
Register64(0x99f889b2, 0xde39d74f),
Register64(0x233f30bf, 0x54e1d143),
Register64(0x9a9675d3, 0xd9a63c97),
Register64(0x5470554f, 0xf334f9a8),
Register64(0x166acb74, 0x4a4f5688),
Register64(0x70c74caa, 0xb2e4aead),
Register64(0xf0d09164, 0x6f294d12),
Register64(0x57b82a89, 0x684031d1),
Register64(0xefd95a5a, 0x61be0b6b),
Register64(0x2fbd12e9, 0x69f2f29a),
Register64(0x9bd37013, 0xfeff9fe8),
Register64(0x3f9b0404, 0xd6085a06),
Register64(0x4940c1f3, 0x166cfe15),
Register64(0x09542c4d, 0xcdf3defb),
Register64(0xb4c52183, 0x85cd5ce3),
Register64(0xc935b7dc, 0x4462a641),
Register64(0x3417f8a6, 0x8ed3b63f),
Register64(0xb8095929, 0x5b215b40),
Register64(0xf99cdaef, 0x3b8c8572),
Register64(0x018c0614, 0xf8fcb95d),
Register64(0x1b14accd, 0x1a3acdf3),
Register64(0x84d471f2, 0x00bb732d),
Register64(0xc1a3110e, 0x95e8da16),
Register64(0x430a7220, 0xbf1a82b8),
Register64(0xb77e090d, 0x39df210e),
Register64(0x5ef4bd9f, 0x3cd05e9d),
Register64(0x9d4ff6da, 0x7e57a444),
Register64(0xda1d60e1, 0x83d4a5f8),
Register64(0xb287c384, 0x17998e47),
Register64(0xfe3edc12, 0x1bb31886),
Register64(0xc7fe3ccc, 0x980ccbef),
Register64(0xe46fb590, 0x189bfd03),
Register64(0x3732fd46, 0x9a4c57dc),
Register64(0x7ef700a0, 0x7cf1ad65),
Register64(0x59c64468, 0xa31d8859),
Register64(0x762fb0b4, 0xd45b61f6),
Register64(0x155baed0, 0x99047718),
Register64(0x68755e4c, 0x3d50baa6),
Register64(0xe9214e7f, 0x22d8b4df),
Register64(0x2addbf53, 0x2eac95f4),
Register64(0x32ae3909, 0xb4bd0109),
Register64(0x834df537, 0xb08e3450),
Register64(0xfa209da8, 0x4220728d),
Register64(0x9e691d9b, 0x9efe23f7),
Register64(0x0446d288, 0xc4ae8d7f),
Register64(0x7b4cc524, 0xe169785b),
Register64(0x21d87f01, 0x35ca1385),
Register64(0xcebb400f, 0x137b8aa5),
Register64(0x272e2b66, 0x580796be),
Register64(0x36122641, 0x25c2b0de),
Register64(0x057702bd, 0xad1efbb2),
Register64(0xd4babb8e, 0xacf84be9),
Register64(0x91583139, 0x641bc67b),
Register64(0x8bdc2de0, 0x8036e024),
Register64(0x603c8156, 0xf49f68ed),
Register64(0xf7d236f7, 0xdbef5111),
Register64(0x9727c459, 0x8ad21e80),
Register64(0xa08a0896, 0x670a5fd7),
Register64(0xcb4a8f43, 0x09eba9cb),
Register64(0x81af564b, 0x0f7036a1),
Register64(0xc0b99aa7, 0x78199abd),
Register64(0x959f1ec8, 0x3fc8e952),
Register64(0x8c505077, 0x794a81b9),
Register64(0x3acaaf8f, 0x056338f0),
Register64(0x07b43f50, 0x627a6778),
Register64(0x4a44ab49, 0xf5eccc77),
Register64(0x3bc3d6e4, 0xb679ee98),
Register64(0x9cc0d4d1, 0xcf14108c),
Register64(0x4406c00b, 0x206bc8a0),
Register64(0x82a18854, 0xc8d72d89),
Register64(0x67e366b3, 0x5c3c432c),
Register64(0xb923dd61, 0x102b37f2),
Register64(0x56ab2779, 0xd884271d),
Register64(0xbe83e1b0, 0xff1525af),
Register64(0xfb7c65d4, 0x217e49a9),
Register64(0x6bdbe0e7, 0x6d48e7d4),
Register64(0x08df8287, 0x45d9179e),
Register64(0x22ea6a9a, 0xdd53bd34),
Register64(0xe36e141c, 0x5622200a),
Register64(0x7f805d1b, 0x8cb750ee),
Register64(0xafe5c7a5, 0x9f58e837),
Register64(0xe27f996a, 0x4fb1c23c),
Register64(0xd3867dfb, 0x0775f0d0),
Register64(0xd0e673de, 0x6e88891a),
Register64(0x123aeb9e, 0xafb86c25),
Register64(0x30f1d5d5, 0xc145b895),
Register64(0xbb434a2d, 0xee7269e7),
Register64(0x78cb67ec, 0xf931fa38),
Register64(0xf33b0372, 0x323bbf9c),
Register64(0x52d66336, 0xfb279c74),
Register64(0x505f33ac, 0x0afb4eaa),
Register64(0xe8a5cd99, 0xa2cce187),
Register64(0x53497480, 0x1e2d30bb),
Register64(0x8d2d5711, 0xd5876d90),
Register64(0x1f1a4128, 0x91bc038e),
Register64(0xd6e2e71d, 0x82e56648),
Register64(0x74036c3a, 0x497732b7),
Register64(0x89b67ed9, 0x6361f5ab),
Register64(0xffed95d8, 0xf1ea02a2),
Register64(0xe72b3bd6, 0x1464d43d),
Register64(0xa6300f17, 0x0bdc4820),
Register64(0xebc18760, 0xed78a77a),
];
final _t2 = [
Register64(0xe6a6be5a, 0x05a12138),
Register64(0xb5a122a5, 0xb4f87c98),
Register64(0x563c6089, 0x140b6990),
Register64(0x4c46cb2e, 0x391f5dd5),
Register64(0xd932addb, 0xc9b79434),
Register64(0x08ea70e4, 0x2015aff5),
Register64(0xd765a667, 0x3e478cf1),
Register64(0xc4fb757e, 0xab278d99),
Register64(0xdf11c686, 0x2d6e0692),
Register64(0xddeb84f1, 0x0d7f3b16),
Register64(0x6f2ef604, 0xa665ea04),
Register64(0x4a8e0f0f, 0xf0e0dfb3),
Register64(0xa5edeef8, 0x3dbcba51),
Register64(0xfc4f0a2a, 0x0ea4371e),
Register64(0xe83e1da8, 0x5cb38429),
Register64(0xdc8ff882, 0xba1b1ce2),
Register64(0xcd45505e, 0x8353e80d),
Register64(0x18d19a00, 0xd4db0717),
Register64(0x34a0cfed, 0xa5f38101),
Register64(0x0be77e51, 0x8887caf2),
Register64(0x1e341438, 0xb3c45136),
Register64(0xe05797f4, 0x9089ccf9),
Register64(0xffd23f9d, 0xf2591d14),
Register64(0x543dda22, 0x8595c5cd),
Register64(0x661f81fd, 0x99052a33),
Register64(0x8736e641, 0xdb0f7b76),
Register64(0x15227725, 0x418e5307),
Register64(0xe25f7f46, 0x162eb2fa),
Register64(0x48a8b212, 0x6c13d9fe),
Register64(0xafdc5417, 0x92e76eea),
Register64(0x03d912bf, 0xc6d1898f),
Register64(0x31b1aafa, 0x1b83f51b),
Register64(0xf1ac2796, 0xe42ab7d9),
Register64(0x40a3a7d7, 0xfcd2ebac),
Register64(0x1056136d, 0x0afbbcc5),
Register64(0x7889e1dd, 0x9a6d0c85),
Register64(0xd3352578, 0x2a7974aa),
Register64(0xa7e25d09, 0x078ac09b),
Register64(0xbd4138b3, 0xeac6edd0),
Register64(0x920abfbe, 0x71eb9e70),
Register64(0xa2a5d0f5, 0x4fc2625c),
Register64(0xc054e36b, 0x0b1290a3),
Register64(0xf6dd59ff, 0x62fe932b),
Register64(0x35373545, 0x11a8ac7d),
Register64(0xca845e91, 0x72fadcd4),
Register64(0x84f82b60, 0x329d20dc),
Register64(0x79c62ce1, 0xcd672f18),
Register64(0x8b09a2ad, 0xd124642c),
Register64(0xd0c1e96a, 0x19d9e726),
Register64(0x5a786a9b, 0x4ba9500c),
Register64(0x0e020336, 0x634c43f3),
Register64(0xc17b474a, 0xeb66d822),
Register64(0x6a731ae3, 0xec9baac2),
Register64(0x8226667a, 0xe0840258),
Register64(0x67d45676, 0x91caeca5),
Register64(0x1d94155c, 0x4875adb5),
Register64(0x6d00fd98, 0x5b813fdf),
Register64(0x51286efc, 0xb774cd06),
Register64(0x5e883447, 0x1fa744af),
Register64(0xf72ca0ae, 0xe761ae2e),
Register64(0xbe40e4cd, 0xaee8e09a),
Register64(0xe9970bbb, 0x5118f665),
Register64(0x726e4beb, 0x33df1964),
Register64(0x703b0007, 0x29199762),
Register64(0x4631d816, 0xf5ef30a7),
Register64(0xb880b5b5, 0x1504a6be),
Register64(0x641793c3, 0x7ed84b6c),
Register64(0x7b21ed77, 0xf6e97d96),
Register64(0x77630631, 0x2ef96b73),
Register64(0xae528948, 0xe86ff3f4),
Register64(0x53dbd7f2, 0x86a3f8f8),
Register64(0x16cadce7, 0x4cfc1063),
Register64(0x005c19bd, 0xfa52c6dd),
Register64(0x68868f5d, 0x64d46ad3),
Register64(0x3a9d512c, 0xcf1e186a),
Register64(0x367e62c2, 0x385660ae),
Register64(0xe359e7ea, 0x77dcb1d7),
Register64(0x526c0773, 0x749abe6e),
Register64(0x735ae5f9, 0xd09f734b),
Register64(0x493fc7cc, 0x8a558ba8),
Register64(0xb0b9c153, 0x3041ab45),
Register64(0x321958ba, 0x470a59bd),
Register64(0x852db00b, 0x5f46c393),
Register64(0x91209b2b, 0xd336b0e5),
Register64(0x6e604f7d, 0x659ef19f),
Register64(0xb99a8ae2, 0x782ccb24),
Register64(0xccf52ab6, 0xc814c4c7),
Register64(0x4727d9af, 0xbe11727b),
Register64(0x7e950d0c, 0x0121b34d),
Register64(0x756f4356, 0x70ad471f),
Register64(0xf5add442, 0x615a6849),
Register64(0x4e87e099, 0x80b9957a),
Register64(0x2acfa1df, 0x50aee355),
Register64(0xd898263a, 0xfd2fd556),
Register64(0xc8f4924d, 0xd80c8fd6),
Register64(0xcf99ca3d, 0x754a173a),
Register64(0xfe477bac, 0xaf91bf3c),
Register64(0xed5371f6, 0xd690c12d),
Register64(0x831a5c28, 0x5e687094),
Register64(0xc5d3c90a, 0x3708a0a4),
Register64(0x0f7f9037, 0x17d06580),
Register64(0x19f9bb13, 0xb8fdf27f),
Register64(0xb1bd6f1b, 0x4d502843),
Register64(0x1c761ba3, 0x8fff4012),
Register64(0x0d1530c4, 0xe2e21f3b),
Register64(0x8943ce69, 0xa7372c8a),
Register64(0xe5184e11, 0xfeb5ce66),
Register64(0x618bdb80, 0xbd736621),
Register64(0x7d29bad6, 0x8b574d0b),
Register64(0x81bb613e, 0x25e6fe5b),
Register64(0x071c9c10, 0xbc07913f),
Register64(0xc7beeb79, 0x09ac2d97),
Register64(0xc3e58d35, 0x3bc5d757),
Register64(0xeb017892, 0xf38f61e8),
Register64(0xd4effb9c, 0x9b1cc21a),
Register64(0x99727d26, 0xf494f7ab),
Register64(0xa3e063a2, 0x956b3e03),
Register64(0x9d4a8b9a, 0x4aa09c30),
Register64(0x3f6ab7d5, 0x00090fb4),
Register64(0x9cc0f2a0, 0x57268ac0),
Register64(0x3dee9d2d, 0xedbf42d1),
Register64(0x330f49c8, 0x7960a972),
Register64(0xc6b27202, 0x87421b41),
Register64(0x0ac59ec0, 0x7c00369c),
Register64(0xef4eac49, 0xcb353425),
Register64(0xf450244e, 0xef0129d8),
Register64(0x8acc46e5, 0xcaf4deb6),
Register64(0x2ffeab63, 0x989263f7),
Register64(0x8f7cb9fe, 0x5d7a4578),
Register64(0x5bd8f764, 0x4e634635),
Register64(0x427a7315, 0xbf2dc900),
Register64(0x17d0c4aa, 0x2125261c),
Register64(0x3992486c, 0x93518e50),
Register64(0xb4cbfee0, 0xa2d7d4c3),
Register64(0x7c75d620, 0x2c5ddd8d),
Register64(0xdbc295d8, 0xe35b6c61),
Register64(0x60b369d3, 0x02032b19),
Register64(0xce42685f, 0xdce44132),
Register64(0x06f3ddb9, 0xddf65610),
Register64(0x8ea4d21d, 0xb5e148f0),
Register64(0x20b0fce6, 0x2fcd496f),
Register64(0x2c1b9123, 0x58b0ee31),
Register64(0xb28317b8, 0x18f5a308),
Register64(0xa89c1e18, 0x9ca6d2cf),
Register64(0x0c6b1857, 0x6aaadbc8),
Register64(0xb65deaa9, 0x1299fae3),
Register64(0xfb2b794b, 0x7f1027e7),
Register64(0x04e4317f, 0x443b5beb),
Register64(0x4b852d32, 0x5939d0a6),
Register64(0xd5ae6bee, 0xfb207ffc),
Register64(0x309682b2, 0x81c7d374),
Register64(0xbae309a1, 0x94c3b475),
Register64(0x8cc3f97b, 0x13b49f05),
Register64(0x98a9422f, 0xf8293967),
Register64(0x244b16b0, 0x1076ff7c),
Register64(0xf8bf571c, 0x663d67ee),
Register64(0x1f0d6758, 0xeee30da1),
Register64(0xc9b611d9, 0x7adeb9b7),
Register64(0xb7afd588, 0x7b6c57a2),
Register64(0x6290ae84, 0x6b984fe1),
Register64(0x94df4cde, 0xacc1a5fd),
Register64(0x058a5bd1, 0xc5483aff),
Register64(0x63166cc1, 0x42ba3c37),
Register64(0x8db8526e, 0xb2f76f40),
Register64(0xe1088003, 0x6f0d6d4e),
Register64(0x9e0523c9, 0x971d311d),
Register64(0x45ec2824, 0xcc7cd691),
Register64(0x575b8359, 0xe62382c9),
Register64(0xfa9e400d, 0xc4889995),
Register64(0xd1823ecb, 0x45721568),
Register64(0xdafd983b, 0x8206082f),
Register64(0xaa7d2908, 0x2386a8cb),
Register64(0x269fcd44, 0x03b87588),
Register64(0x1b91f5f7, 0x28bdd1e0),
Register64(0xe4669f39, 0x040201f6),
Register64(0x7a1d7c21, 0x8cf04ade),
Register64(0x65623c29, 0xd79ce5ce),
Register64(0x23684490, 0x96c00bb1),
Register64(0xab9bf187, 0x9da503ba),
Register64(0xbc23ecb1, 0xa458058e),
Register64(0x9a58df01, 0xbb401ecc),
Register64(0xa070e868, 0xa85f143d),
Register64(0x4ff18830, 0x7df2239e),
Register64(0x14d565b4, 0x1a641183),
Register64(0xee133374, 0x52701602),
Register64(0x950e3dcf, 0x3f285e09),
Register64(0x59930254, 0xb9c80953),
Register64(0x3bf29940, 0x8930da6d),
Register64(0xa955943f, 0x53691387),
Register64(0xa15edeca, 0xa9cb8784),
Register64(0x29142127, 0x352be9a0),
Register64(0x76f0371f, 0xff4e7afb),
Register64(0x0239f450, 0x274f2228),
Register64(0xbb073af0, 0x1d5e868b),
Register64(0xbfc80571, 0xc10e96c1),
Register64(0xd2670885, 0x68222e23),
Register64(0x9671a3d4, 0x8e80b5b0),
Register64(0x55b5d38a, 0xe193bb81),
Register64(0x693ae2d0, 0xa18b04b8),
Register64(0x5c48b4ec, 0xadd5335f),
Register64(0xfd743b19, 0x4916a1ca),
Register64(0x25770181, 0x34be98c4),
Register64(0xe77987e8, 0x3c54a4ad),
Register64(0x28e11014, 0xda33e1b9),
Register64(0x270cc59e, 0x226aa213),
Register64(0x71495f75, 0x6d1a5f60),
Register64(0x9be853fb, 0x60afef77),
Register64(0xadc786a7, 0xf7443dbf),
Register64(0x09044561, 0x73b29a82),
Register64(0x58bc7a66, 0xc232bd5e),
Register64(0xf306558c, 0x673ac8b2),
Register64(0x41f639c6, 0xb6c9772a),
Register64(0x216defe9, 0x9fda35da),
Register64(0x11640cc7, 0x1c7be615),
Register64(0x93c43694, 0x565c5527),
Register64(0xea038e62, 0x46777839),
Register64(0xf9abf3ce, 0x5a3e2469),
Register64(0x741e768d, 0x0fd312d2),
Register64(0x0144b883, 0xced652c6),
Register64(0xc20b5a5b, 0xa33f8552),
Register64(0x1ae69633, 0xc3435a9d),
Register64(0x97a28ca4, 0x088cfdec),
Register64(0x8824a43c, 0x1e96f420),
Register64(0x37612fa6, 0x6eeea746),
Register64(0x6b4cb165, 0xf9cf0e5a),
Register64(0x43aa1c06, 0xa0abfb4a),
Register64(0x7f4dc26f, 0xf162796b),
Register64(0x6cbacc8e, 0x54ed9b0f),
Register64(0xa6b7ffef, 0xd2bb253e),
Register64(0x2e25bc95, 0xb0a29d4f),
Register64(0x86d6a58b, 0xdef1388c),
Register64(0xded74ac5, 0x76b6f054),
Register64(0x8030bdbc, 0x2b45805d),
Register64(0x3c81af70, 0xe94d9289),
Register64(0x3eff6dda, 0x9e3100db),
Register64(0xb38dc39f, 0xdfcc8847),
Register64(0x12388552, 0x8d17b87e),
Register64(0xf2da0ed2, 0x40b1b642),
Register64(0x44cefadc, 0xd54bf9a9),
Register64(0x1312200e, 0x433c7ee6),
Register64(0x9ffcc84f, 0x3a78c748),
Register64(0xf0cd1f72, 0x248576bb),
Register64(0xec697405, 0x3638cfe4),
Register64(0x2ba7b67c, 0x0cec4e4c),
Register64(0xac2f4df3, 0xe5ce32ed),
Register64(0xcb33d143, 0x26ea4c11),
Register64(0xa4e9044c, 0xc77e58bc),
Register64(0x5f513293, 0xd934fcef),
Register64(0x5dc96455, 0x06e55444),
Register64(0x50de418f, 0x317de40a),
Register64(0x388cb31a, 0x69dde259),
Register64(0x2db4a834, 0x55820a86),
Register64(0x9010a91e, 0x84711ae9),
Register64(0x4df7f0b7, 0xb1498371),
Register64(0xd62a2eab, 0xc0977179),
Register64(0x22fac097, 0xaa8d5c0e),
];
final _t3 = [
Register64(0xf49fcc2f, 0xf1daf39b),
Register64(0x487fd5c6, 0x6ff29281),
Register64(0xe8a30667, 0xfcdca83f),
Register64(0x2c9b4be3, 0xd2fcce63),
Register64(0xda3ff74b, 0x93fbbbc2),
Register64(0x2fa165d2, 0xfe70ba66),
Register64(0xa103e279, 0x970e93d4),
Register64(0xbecdec77, 0xb0e45e71),
Register64(0xcfb41e72, 0x3985e497),
Register64(0xb70aaa02, 0x5ef75017),
Register64(0xd42309f0, 0x3840b8e0),
Register64(0x8efc1ad0, 0x35898579),
Register64(0x96c6920b, 0xe2b2abc5),
Register64(0x66af4163, 0x375a9172),
Register64(0x2174abdc, 0xca7127fb),
Register64(0xb33ccea6, 0x4a72ff41),
Register64(0xf04a4933, 0x083066a5),
Register64(0x8d970acd, 0xd7289af5),
Register64(0x8f96e8e0, 0x31c8c25e),
Register64(0xf3fec022, 0x76875d47),
Register64(0xec7bf310, 0x056190dd),
Register64(0xf5adb0ae, 0xbb0f1491),
Register64(0x9b50f885, 0x0fd58892),
Register64(0x49754883, 0x58b74de8),
Register64(0xa3354ff6, 0x91531c61),
Register64(0x0702bbe4, 0x81d2c6ee),
Register64(0x89fb2405, 0x7deded98),
Register64(0xac307513, 0x8596e902),
Register64(0x1d2d3580, 0x172772ed),
Register64(0xeb738fc2, 0x8e6bc30d),
Register64(0x5854ef8f, 0x63044326),
Register64(0x9e5c5232, 0x5add3bbe),
Register64(0x90aa53cf, 0x325c4623),
Register64(0xc1d24d51, 0x349dd067),
Register64(0x2051cfee, 0xa69ea624),
Register64(0x13220f0a, 0x862e7e4f),
Register64(0xce393994, 0x04e04864),
Register64(0xd9c42ca4, 0x7086fcb7),
Register64(0x685ad223, 0x8a03e7cc),
Register64(0x066484b2, 0xab2ff1db),
Register64(0xfe9d5d70, 0xefbf79ec),
Register64(0x5b13b9dd, 0x9c481854),
Register64(0x15f0d475, 0xed1509ad),
Register64(0x0bebcd06, 0x0ec79851),
Register64(0xd58c6791, 0x183ab7f8),
Register64(0xd1187c50, 0x52f3eee4),
Register64(0xc95d1192, 0xe54e82ff),
Register64(0x86eea14c, 0xb9ac6ca2),
Register64(0x3485beb1, 0x53677d5d),
Register64(0xdd191d78, 0x1f8c492a),
Register64(0xf60866ba, 0xa784ebf9),
Register64(0x518f643b, 0xa2d08c74),
Register64(0x8852e956, 0xe1087c22),
Register64(0xa768cb8d, 0xc410ae8d),
Register64(0x38047726, 0xbfec8e1a),
Register64(0xa67738b4, 0xcd3b45aa),
Register64(0xad16691c, 0xec0dde19),
Register64(0xc6d43193, 0x80462e07),
Register64(0xc5a5876d, 0x0ba61938),
Register64(0x16b9fa1f, 0xa58fd840),
Register64(0x188ab117, 0x3ca74f18),
Register64(0xabda2f98, 0xc99c021f),
Register64(0x3e0580ab, 0x134ae816),
Register64(0x5f3b05b7, 0x73645abb),
Register64(0x2501a2be, 0x5575f2f6),
Register64(0x1b2f7400, 0x4e7e8ba9),
Register64(0x1cd75803, 0x71e8d953),
Register64(0x7f6ed895, 0x62764e30),
Register64(0xb15926ff, 0x596f003d),
Register64(0x9f65293d, 0xa8c5d6b9),
Register64(0x6ecef04d, 0xd690f84c),
Register64(0x4782275f, 0xff33af88),
Register64(0xe4143308, 0x3f820801),
Register64(0xfd0dfe40, 0x9a1af9b5),
Register64(0x4325a334, 0x2cdb396b),
Register64(0x8ae77e62, 0xb301b252),
Register64(0xc36f9e9f, 0x6655615a),
Register64(0x85455a2d, 0x92d32c09),
Register64(0xf2c7dea9, 0x49477485),
Register64(0x63cfb4c1, 0x33a39eba),
Register64(0x83b040cc, 0x6ebc5462),
Register64(0x3b9454c8, 0xfdb326b0),
Register64(0x56f56a9e, 0x87ffd78c),
Register64(0x2dc2940d, 0x99f42bc6),
Register64(0x98f7df09, 0x6b096e2d),
Register64(0x19a6e01e, 0x3ad852bf),
Register64(0x42a99ccb, 0xdbd4b40b),
Register64(0xa59998af, 0x45e9c559),
Register64(0x366295e8, 0x07d93186),
Register64(0x6b48181b, 0xfaa1f773),
Register64(0x1fec57e2, 0x157a0a1d),
Register64(0x4667446a, 0xf6201ad5),
Register64(0xe615ebca, 0xcfb0f075),
Register64(0xb8f31f4f, 0x68290778),
Register64(0x22713ed6, 0xce22d11e),
Register64(0x3057c1a7, 0x2ec3c93b),
Register64(0xcb46acc3, 0x7c3f1f2f),
Register64(0xdbb893fd, 0x02aaf50e),
Register64(0x331fd92e, 0x600b9fcf),
Register64(0xa498f961, 0x48ea3ad6),
Register64(0xa8d8426e, 0x8b6a83ea),
Register64(0xa089b274, 0xb7735cdc),
Register64(0x87f6b373, 0x1e524a11),
Register64(0x118808e5, 0xcbc96749),
Register64(0x9906e4c7, 0xb19bd394),
Register64(0xafed7f7e, 0x9b24a20c),
Register64(0x6509eade, 0xeb3644a7),
Register64(0x6c1ef1d3, 0xe8ef0ede),
Register64(0xb9c97d43, 0xe9798fb4),
Register64(0xa2f2d784, 0x740c28a3),
Register64(0x7b849647, 0x6197566f),
Register64(0x7a5be3e6, 0xb65f069d),
Register64(0xf96330ed, 0x78be6f10),
Register64(0xeee60de7, 0x7a076a15),
Register64(0x2b4bee4a, 0xa08b9bd0),
Register64(0x6a56a63e, 0xc7b8894e),
Register64(0x02121359, 0xba34fef4),
Register64(0x4cbf99f8, 0x283703fc),
Register64(0x39807135, 0x0caf30c8),
Register64(0xd0a77a89, 0xf017687a),
Register64(0xf1c1a9eb, 0x9e423569),
Register64(0x8c797628, 0x2dee8199),
Register64(0x5d1737a5, 0xdd1f7abd),
Register64(0x4f53433c, 0x09a9fa80),
Register64(0xfa8b0c53, 0xdf7ca1d9),
Register64(0x3fd9dcbc, 0x886ccb77),
Register64(0xc040917c, 0xa91b4720),
Register64(0x7dd00142, 0xf9d1dcdf),
Register64(0x8476fc1d, 0x4f387b58),
Register64(0x23f8e7c5, 0xf3316503),
Register64(0x032a2244, 0xe7e37339),
Register64(0x5c87a5d7, 0x50f5a74b),
Register64(0x082b4cc4, 0x3698992e),
Register64(0xdf917bec, 0xb858f63c),
Register64(0x3270b8fc, 0x5bf86dda),
Register64(0x10ae72bb, 0x29b5dd76),
Register64(0x576ac94e, 0x7700362b),
Register64(0x1ad112da, 0xc61efb8f),
Register64(0x691bc30e, 0xc5faa427),
Register64(0xff246311, 0xcc327143),
Register64(0x3142368e, 0x30e53206),
Register64(0x71380e31, 0xe02ca396),
Register64(0x958d5c96, 0x0aad76f1),
Register64(0xf8d6f430, 0xc16da536),
Register64(0xc8ffd13f, 0x1be7e1d2),
Register64(0x7578ae66, 0x004ddbe1),
Register64(0x05833f01, 0x067be646),
Register64(0xbb34b5ad, 0x3bfe586d),
Register64(0x095f34c9, 0xa12b97f0),
Register64(0x247ab645, 0x25d60ca8),
Register64(0xdcdbc6f3, 0x017477d1),
Register64(0x4a2e14d4, 0xdecad24d),
Register64(0xbdb5e6d9, 0xbe0a1eeb),
Register64(0x2a7e70f7, 0x794301ab),
Register64(0xdef42d8a, 0x270540fd),
Register64(0x01078ec0, 0xa34c22c1),
Register64(0xe5de511a, 0xf4c16387),
Register64(0x7ebb3a52, 0xbd9a330a),
Register64(0x77697857, 0xaa7d6435),
Register64(0x004e8316, 0x03ae4c32),
Register64(0xe7a21020, 0xad78e312),
Register64(0x9d41a70c, 0x6ab420f2),
Register64(0x28e06c18, 0xea1141e6),
Register64(0xd2b28cbd, 0x984f6b28),
Register64(0x26b75f6c, 0x446e9d83),
Register64(0xba47568c, 0x4d418d7f),
Register64(0xd80badbf, 0xe6183d8e),
Register64(0x0e206d7f, 0x5f166044),
Register64(0xe258a439, 0x11cbca3e),
Register64(0x723a1746, 0xb21dc0bc),
Register64(0xc7caa854, 0xf5d7cdd3),
Register64(0x7cac3288, 0x3d261d9c),
Register64(0x7690c264, 0x23ba942c),
Register64(0x17e55524, 0x478042b8),
Register64(0xe0be4776, 0x56a2389f),
Register64(0x4d289b5e, 0x67ab2da0),
Register64(0x44862b9c, 0x8fbbfd31),
Register64(0xb47cc804, 0x9d141365),
Register64(0x822c1b36, 0x2b91c793),
Register64(0x4eb14655, 0xfb13dfd8),
Register64(0x1ecbba07, 0x14e2a97b),
Register64(0x6143459d, 0x5cde5f14),
Register64(0x53a8fbf1, 0xd5f0ac89),
Register64(0x97ea04d8, 0x1c5e5b00),
Register64(0x622181a8, 0xd4fdb3f3),
Register64(0xe9bcd341, 0x572a1208),
Register64(0x14112586, 0x43cce58a),
Register64(0x9144c5fe, 0xa4c6e0a4),
Register64(0x0d33d065, 0x65cf620f),
Register64(0x54a48d48, 0x9f219ca1),
Register64(0xc43e5eac, 0x6d63c821),
Register64(0xa9728b3a, 0x72770daf),
Register64(0xd7934e7b, 0x20df87ef),
Register64(0xe35503b6, 0x1a3e86e5),
Register64(0xcae321fb, 0xc819d504),
Register64(0x129a50b3, 0xac60bfa6),
Register64(0xcd5e68ea, 0x7e9fb6c3),
Register64(0xb01c9019, 0x9483b1c7),
Register64(0x3de93cd5, 0xc295376c),
Register64(0xaed52edf, 0x2ab9ad13),
Register64(0x2e60f512, 0xc0a07884),
Register64(0xbc3d86a3, 0xe36210c9),
Register64(0x35269d9b, 0x163951ce),
Register64(0x0c7d6e2a, 0xd0cdb5fa),
Register64(0x59e86297, 0xd87f5733),
Register64(0x298ef221, 0x898db0e7),
Register64(0x55000029, 0xd1a5aa7e),
Register64(0x8bc08ae1, 0xb5061b45),
Register64(0xc2c31c2b, 0x6c92703a),
Register64(0x94cc596b, 0xaf25ef42),
Register64(0x0a1d73db, 0x22540456),
Register64(0x04b6a0f9, 0xd9c4179a),
Register64(0xeffdafa2, 0xae3d3c60),
Register64(0xf7c8075b, 0xb49496c4),
Register64(0x9cc5c714, 0x1d1cd4e3),
Register64(0x78bd1638, 0x218e5534),
Register64(0xb2f11568, 0xf850246a),
Register64(0xedfabcfa, 0x9502bc29),
Register64(0x796ce5f2, 0xda23051b),
Register64(0xaae128b0, 0xdc93537c),
Register64(0x3a493da0, 0xee4b29ae),
Register64(0xb5df6b2c, 0x416895d7),
Register64(0xfcabbd25, 0x122d7f37),
Register64(0x70810b58, 0x105dc4b1),
Register64(0xe10fdd37, 0xf7882a90),
Register64(0x524dcab5, 0x518a3f5c),
Register64(0x3c9e8587, 0x8451255b),
Register64(0x40298281, 0x19bd34e2),
Register64(0x74a05b6f, 0x5d3ceccb),
Register64(0xb6100215, 0x42e13eca),
Register64(0x0ff979d1, 0x2f59e2ac),
Register64(0x6037da27, 0xe4f9cc50),
Register64(0x5e92975a, 0x0df1847d),
Register64(0xd66de190, 0xd3e623fe),
Register64(0x5032d6b8, 0x7b568048),
Register64(0x9a36b7ce, 0x8235216e),
Register64(0x80272a7a, 0x24f64b4a),
Register64(0x93efed8b, 0x8c6916f7),
Register64(0x37ddbff4, 0x4cce1555),
Register64(0x4b95db5d, 0x4b99bd25),
Register64(0x92d3fda1, 0x69812fc0),
Register64(0xfb1a4a9a, 0x90660bb6),
Register64(0x730c1969, 0x46a4b9b2),
Register64(0x81e289aa, 0x7f49da68),
Register64(0x64669a0f, 0x83b1a05f),
Register64(0x27b3ff7d, 0x9644f48b),
Register64(0xcc6b615c, 0x8db675b3),
Register64(0x674f20b9, 0xbcebbe95),
Register64(0x6f312382, 0x75655982),
Register64(0x5ae48871, 0x3e45cf05),
Register64(0xbf619f99, 0x54c21157),
Register64(0xeabac460, 0x40a8eae9),
Register64(0x454c6fe9, 0xf2c0c1cd),
Register64(0x419cf649, 0x6412691c),
Register64(0xd3dc3bef, 0x265b0f70),
Register64(0x6d0e60f5, 0xc3578a9e),
];
final _t4 = [
Register64(0x5b0e6085, 0x26323c55),
Register64(0x1a46c1a9, 0xfa1b59f5),
Register64(0xa9e245a1, 0x7c4c8ffa),
Register64(0x65ca5159, 0xdb2955d7),
Register64(0x05db0a76, 0xce35afc2),
Register64(0x81eac77e, 0xa9113d45),
Register64(0x528ef88a, 0xb6ac0a0d),
Register64(0xa09ea253, 0x597be3ff),
Register64(0x430ddfb3, 0xac48cd56),
Register64(0xc4b3a67a, 0xf45ce46f),
Register64(0x4ececfd8, 0xfbe2d05e),
Register64(0x3ef56f10, 0xb39935f0),
Register64(0x0b22d682, 0x9cd619c6),
Register64(0x17fd460a, 0x74df2069),
Register64(0x6cf8cc8e, 0x8510ed40),
Register64(0xd6c824bf, 0x3a6ecaa7),
Register64(0x61243d58, 0x1a817049),
Register64(0x048bacb6, 0xbbc163a2),
Register64(0xd9a38ac2, 0x7d44cc32),
Register64(0x7fddff5b, 0xaaf410ab),
Register64(0xad6d495a, 0xa804824b),
Register64(0xe1a6a74f, 0x2d8c9f94),
Register64(0xd4f78512, 0x35dee8e3),
Register64(0xfd4b7f88, 0x6540d893),
Register64(0x247c2004, 0x2aa4bfda),
Register64(0x096ea1c5, 0x17d1327c),
Register64(0xd56966b4, 0x361a6685),
Register64(0x277da5c3, 0x1221057d),
Register64(0x94d59893, 0xa43acff7),
Register64(0x64f0c51c, 0xcdc02281),
Register64(0x3d33bcc4, 0xff6189db),
Register64(0xe005cb18, 0x4ce66af1),
Register64(0xff5ccd1d, 0x1db99bea),
Register64(0xb0b854a7, 0xfe42980f),
Register64(0x7bd46a6a, 0x718d4b9f),
Register64(0xd10fa8cc, 0x22a5fd8c),
Register64(0xd3148495, 0x2be4bd31),
Register64(0xc7fa975f, 0xcb243847),
Register64(0x4886ed1e, 0x5846c407),
Register64(0x28cddb79, 0x1eb70b04),
Register64(0xc2b00be2, 0xf573417f),
Register64(0x5c959045, 0x2180f877),
Register64(0x7a6bddff, 0xf370eb00),
Register64(0xce509e38, 0xd6d9d6a4),
Register64(0xebeb0f00, 0x647fa702),
Register64(0x1dcc06cf, 0x76606f06),
Register64(0xe4d9f28b, 0xa286ff0a),
Register64(0xd85a305d, 0xc918c262),
Register64(0x475b1d87, 0x32225f54),
Register64(0x2d4fb516, 0x68ccb5fe),
Register64(0xa679b9d9, 0xd72bba20),
Register64(0x53841c0d, 0x912d43a5),
Register64(0x3b7eaa48, 0xbf12a4e8),
Register64(0x781e0e47, 0xf22f1ddf),
Register64(0xeff20ce6, 0x0ab50973),
Register64(0x20d261d1, 0x9dffb742),
Register64(0x16a12b03, 0x062a2e39),
Register64(0x1960eb22, 0x39650495),
Register64(0x251c16fe, 0xd50eb8b8),
Register64(0x9ac0c330, 0xf826016e),
Register64(0xed152665, 0x953e7671),
Register64(0x02d63194, 0xa6369570),
Register64(0x5074f083, 0x94b1c987),
Register64(0x70ba598c, 0x90b25ce1),
Register64(0x794a1581, 0x0b9742f6),
Register64(0x0d5925e9, 0xfcaf8c6c),
Register64(0x3067716c, 0xd868744e),
Register64(0x910ab077, 0xe8d7731b),
Register64(0x6a61bbdb, 0x5ac42f61),
Register64(0x93513efb, 0xf0851567),
Register64(0xf494724b, 0x9e83e9d5),
Register64(0xe887e198, 0x5c09648d),
Register64(0x34b1d3c6, 0x75370cfd),
Register64(0xdc35e433, 0xbc0d255d),
Register64(0xd0aab842, 0x34131be0),
Register64(0x08042a50, 0xb48b7eaf),
Register64(0x9997c4ee, 0x44a3ab35),
Register64(0x829a7b49, 0x201799d0),
Register64(0x263b8307, 0xb7c54441),
Register64(0x752f95f4, 0xfd6a6ca6),
Register64(0x92721740, 0x2c08c6e5),
Register64(0x2a8ab754, 0xa795d9ee),
Register64(0xa442f755, 0x2f72943d),
Register64(0x2c31334e, 0x19781208),
Register64(0x4fa98d7c, 0xeaee6291),
Register64(0x55c3862f, 0x665db309),
Register64(0xbd061017, 0x5d53b1f3),
Register64(0x46fe6cb8, 0x40413f27),
Register64(0x3fe03792, 0xdf0cfa59),
Register64(0xcfe70037, 0x2eb85e8f),
Register64(0xa7be29e7, 0xadbce118),
Register64(0xe544ee5c, 0xde8431dd),
Register64(0x8a781b1b, 0x41f1873e),
Register64(0xa5c94c78, 0xa0d2f0e7),
Register64(0x39412e28, 0x77b60728),
Register64(0xa1265ef3, 0xafc9a62c),
Register64(0xbcc2770c, 0x6a2506c5),
Register64(0x3ab66dd5, 0xdce1ce12),
Register64(0xe65499d0, 0x4a675b37),
Register64(0x7d8f5234, 0x81bfd216),
Register64(0x0f6f64fc, 0xec15f389),
Register64(0x74efbe61, 0x8b5b13c8),
Register64(0xacdc82b7, 0x14273e1d),
Register64(0xdd40bfe0, 0x03199d17),
Register64(0x37e99257, 0xe7e061f8),
Register64(0xfa526269, 0x04775aaa),
Register64(0x8bbbf63a, 0x463d56f9),
Register64(0xf0013f15, 0x43a26e64),
Register64(0xa8307e9f, 0x879ec898),
Register64(0xcc4c27a4, 0x150177cc),
Register64(0x1b432f2c, 0xca1d3348),
Register64(0xde1d1f8f, 0x9f6fa013),
Register64(0x606602a0, 0x47a7ddd6),
Register64(0xd237ab64, 0xcc1cb2c7),
Register64(0x9b938e72, 0x25fcd1d3),
Register64(0xec4e0370, 0x8e0ff476),
Register64(0xfeb2fbda, 0x3d03c12d),
Register64(0xae0bced2, 0xee43889a),
Register64(0x22cb8923, 0xebfb4f43),
Register64(0x69360d01, 0x3cf7396d),
Register64(0x855e3602, 0xd2d4e022),
Register64(0x073805ba, 0xd01f784c),
Register64(0x33e17a13, 0x3852f546),
Register64(0xdf487405, 0x8ac7b638),
Register64(0xba92b29c, 0x678aa14a),
Register64(0x0ce89fc7, 0x6cfaadcd),
Register64(0x5f9d4e09, 0x08339e34),
Register64(0xf1afe929, 0x1f5923b9),
Register64(0x6e3480f6, 0x0f4a265f),
Register64(0xeebf3a2a, 0xb29b841c),
Register64(0xe21938a8, 0x8f91b4ad),
Register64(0x57dfeff8, 0x45c6d3c3),
Register64(0x2f006b0b, 0xf62caaf2),
Register64(0x62f479ef, 0x6f75ee78),
Register64(0x11a55ad4, 0x1c8916a9),
Register64(0xf229d290, 0x84fed453),
Register64(0x42f1c27b, 0x16b000e6),
Register64(0x2b1f7674, 0x9823c074),
Register64(0x4b76eca3, 0xc2745360),
Register64(0x8c98f463, 0xb91691bd),
Register64(0x14bcc93c, 0xf1ade66a),
Register64(0x8885213e, 0x6d458397),
Register64(0x8e177df0, 0x274d4711),
Register64(0xb49b73b5, 0x503f2951),
Register64(0x10168168, 0xc3f96b6b),
Register64(0x0e3d963b, 0x63cab0ae),
Register64(0x8dfc4b56, 0x55a1db14),
Register64(0xf789f135, 0x6e14de5c),
Register64(0x683e68af, 0x4e51dac1),
Register64(0xc9a84f9d, 0x8d4b0fd9),
Register64(0x3691e03f, 0x52a0f9d1),
Register64(0x5ed86e46, 0xe1878e80),
Register64(0x3c711a0e, 0x99d07150),
Register64(0x5a0865b2, 0x0c4e9310),
Register64(0x56fbfc1f, 0xe4f0682e),
Register64(0xea8d5de3, 0x105edf9b),
Register64(0x71abfdb1, 0x2379187a),
Register64(0x2eb99de1, 0xbee77b9c),
Register64(0x21ecc0ea, 0x33cf4523),
Register64(0x59a4d752, 0x1805c7a1),
Register64(0x3896f5eb, 0x56ae7c72),
Register64(0xaa638f3d, 0xb18f75dc),
Register64(0x9f39358d, 0xabe9808e),
Register64(0xb7defa91, 0xc00b72ac),
Register64(0x6b5541fd, 0x62492d92),
Register64(0x6dc6dee8, 0xf92e4d5b),
Register64(0x353f57ab, 0xc4beea7e),
Register64(0x735769d6, 0xda5690ce),
Register64(0x0a234aa6, 0x42391484),
Register64(0xf6f95080, 0x28f80d9d),
Register64(0xb8e319a2, 0x7ab3f215),
Register64(0x31ad9c11, 0x51341a4d),
Register64(0x773c22a5, 0x7bef5805),
Register64(0x45c7561a, 0x07968633),
Register64(0xf913da9e, 0x249dbe36),
Register64(0xda652d9b, 0x78a64c68),
Register64(0x4c27a97f, 0x3bc334ef),
Register64(0x76621220, 0xe66b17f4),
Register64(0x96774389, 0x9acd7d0b),
Register64(0xf3ee5bca, 0xe0ed6782),
Register64(0x409f7536, 0x00c879fc),
Register64(0x06d09a39, 0xb5926db6),
Register64(0x6f83aeb0, 0x317ac588),
Register64(0x01e6ca4a, 0x86381f21),
Register64(0x66ff3462, 0xd19f3025),
Register64(0x72207c24, 0xddfd3bfb),
Register64(0x4af6b6d3, 0xe2ece2eb),
Register64(0x9c994dbe, 0xc7ea08de),
Register64(0x49ace597, 0xb09a8bc4),
Register64(0xb38c4766, 0xcf0797ba),
Register64(0x131b9373, 0xc57c2a75),
Register64(0xb1822cce, 0x61931e58),
Register64(0x9d7555b9, 0x09ba1c0c),
Register64(0x127fafdd, 0x937d11d2),
Register64(0x29da3bad, 0xc66d92e4),
Register64(0xa2c1d571, 0x54c2ecbc),
Register64(0x58c5134d, 0x82f6fe24),
Register64(0x1c3ae351, 0x5b62274f),
Register64(0xe907c82e, 0x01cb8126),
Register64(0xf8ed0919, 0x13e37fcb),
Register64(0x3249d8f9, 0xc80046c9),
Register64(0x80cf9bed, 0xe388fb63),
Register64(0x1881539a, 0x116cf19e),
Register64(0x5103f3f7, 0x6bd52457),
Register64(0x15b7e6f5, 0xae47f7a8),
Register64(0xdbd7c6de, 0xd47e9ccf),
Register64(0x44e55c41, 0x0228bb1a),
Register64(0xb647d425, 0x5edb4e99),
Register64(0x5d11882b, 0xb8aafc30),
Register64(0xf5098bbb, 0x29d3212a),
Register64(0x8fb5ea14, 0xe90296b3),
Register64(0x677b9421, 0x57dd025a),
Register64(0xfb58e7c0, 0xa390acb5),
Register64(0x89d3674c, 0x83bd4a01),
Register64(0x9e2da4df, 0x4bf3b93b),
Register64(0xfcc41e32, 0x8cab4829),
Register64(0x03f38c96, 0xba582c52),
Register64(0xcad1bdbd, 0x7fd85db2),
Register64(0xbbb442c1, 0x6082ae83),
Register64(0xb95fe86b, 0xa5da9ab0),
Register64(0xb22e0467, 0x3771a93f),
Register64(0x845358c9, 0x493152d8),
Register64(0xbe2a4886, 0x97b4541e),
Register64(0x95a2dc2d, 0xd38e6966),
Register64(0xc02c11ac, 0x923c852b),
Register64(0x2388b199, 0x0df2a87b),
Register64(0x7c8008fa, 0x1b4f37be),
Register64(0x1f70d0c8, 0x4d54e503),
Register64(0x5490adec, 0x7ece57d4),
Register64(0x002b3c27, 0xd9063a3a),
Register64(0x7eaea384, 0x8030a2bf),
Register64(0xc602326d, 0xed2003c0),
Register64(0x83a7287d, 0x69a94086),
Register64(0xc57a5fcb, 0x30f57a8a),
Register64(0xb56844e4, 0x79ebe779),
Register64(0xa373b40f, 0x05dcbce9),
Register64(0xd71a786e, 0x88570ee2),
Register64(0x879cbacd, 0xbde8f6a0),
Register64(0x976ad1bc, 0xc164a32f),
Register64(0xab21e25e, 0x9666d78b),
Register64(0x901063aa, 0xe5e5c33c),
Register64(0x9818b344, 0x48698d90),
Register64(0xe36487ae, 0x3e1e8abb),
Register64(0xafbdf931, 0x893bdcb4),
Register64(0x6345a0dc, 0x5fbbd519),
Register64(0x8628fe26, 0x9b9465ca),
Register64(0x1e5d0160, 0x3f9c51ec),
Register64(0x4de44006, 0xa15049b7),
Register64(0xbf6c70e5, 0xf776cbb1),
Register64(0x411218f2, 0xef552bed),
Register64(0xcb0c0708, 0x705a36a3),
Register64(0xe74d1475, 0x4f986044),
Register64(0xcd56d943, 0x0ea8280e),
Register64(0xc12591d7, 0x535f5065),
Register64(0xc83223f1, 0x720aef96),
Register64(0xc3a0396f, 0x7363a51f),
];