icqq
Version:
QQ protocol for NodeJS!
233 lines • 58.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.sign = exports.state = void 0;
// copy from https://github.com/takayama-lily/oicq/pull/518
const crypto = require("crypto");
//go-cqhttp的encryption_amd64.s
const keyTable = "$%&()+,-456789:?ABCDEEFGHIJabcdefghijkopqrstuvwxyz";
const table2 = "!#$%&)+.0123456789:=>?@ABCDEFGKMNabcdefghijkopqrst";
const key1 = Buffer.from('a$(eT7*@');
const key2 = Buffer.from('&O9!>6X)');
const tab = Uint32Array.from([0, 31158534, 40735498, 62317068, 81470997, 83908371, 112637215, 124634137, 141376813, 2607071920, 167816743, 198958881, 213261112, 225274430, 249268274, 251722036, 282753626, 285281116, 314042704, 325883990, 335633487, 366619977, 376229701, 397917763, 414664567, 426522225, 450548861, 453092731, 476864866, 498536548, 503444072, 534414190, 544179635, 565507253, 570562233, 601450431, 615818150, 628085408, 651767980, 654459306, 671266974, 702138776, 711928724, 733239954, 752459403, 755167117, 783551873, 795835527, 817233897, 829329135, 853044451, 855842277, 879679996, 901097722, 906185462, 936918000, 953729732, 956543938, 984961486, 997073096, 1006888145, 1037604311, 1047427035, 1068828381, 1088359270, 1090812512, 1119000684, 1131014506, 1141124467, 1172266101, 1181335161, 1202900863, 1219638859, 1231636301, 1256170817, 1258607687, 1281953886, 1303535960, 1308918612, 1340076626, 1342533948, 1373503546, 1382605366, 1404277552, 1423857449, 1426400815, 1454621731, 1466479909, 1483230225, 1504918807, 1510334235, 1541320221, 1555261956, 1567103746, 1591671054, 1594198024, 1622183637, 1634467795, 1658658271, 1661365465, 1684777152, 1706088902, 1711684554, 1742555852, 1759359992, 1762050814, 1789927666, 1802195444, 1812370925, 1843258603, 1852507879, 1873836001, 1886057615, 1907459465, 1913087877, 1943803523, 1957810842, 1969922972, 1994146192, 1996959894, 2013776290, 2044508324, 2053790376, 2075208622, 2094854071, 2097651377, 2125561021, 2137656763, 2154129355, 2176718541, 2181625025, 2211677639, 2227061214, 2238001368, 2262029012, 2265490386, 2282248934, 2312317920, 2321926636, 2344532202, 2362670323, 2366115317, 2394877945, 2405801727, 2428444049, 2439277719, 2463272603, 2466906013, 2489596804, 2512341634, 2517215374, 2547177864, 2563907772, 2567524794, 2596254646, 2607071920, 2617837225, 2647816111, 2657392035, 2680153253, 2685067896, 2714866558, 2724688242, 2747007092, 2765210733, 2768942443, 2797360999, 2808555105, 2825379669, 2847714899, 2852801631, 2882616665, 2898065728, 2909243462, 2932959818, 2936675148, 2966460450, 2970347812, 2998733608, 3009837614, 3020668471, 3050360625, 3060149565, 3082640443, 3099436303, 3110523913, 3134207493, 3138078467, 3160834842, 3183342108, 3188396048, 3218104598, 3233442989, 3244367275, 3268935591, 3272380065, 3294710456, 3317316542, 3322730930, 3352799412, 3369554304, 3373015174, 3401237130, 3412177804, 3423369109, 3453421203, 3462522015, 3485111705, 3495958263, 3518719985, 3524101629, 3554079995, 3569037538, 3579855332, 3604390888, 3608007406, 3624741850, 3654703836, 3663771856, 3686517206, 3705015759, 3708648649, 3736837829, 3747672003, 3772115230, 3775830040, 3803740692, 3814918930, 3826175755, 3855990285, 3865271297, 3887607047, 3904427059, 3915621685, 3939845945, 3943577151, 3965973030, 3988292384, 3993919788, 4023717930, 4027552580, 4057260610, 4066508878, 4089016648, 4107580753, 4111451223, 4139329115, 4150417245, 4167216745, 4189708143, 4195302755, 4224994405, 4240017532, 4251122042, 4275313526, 4279200368]);
const ts = {
encode: [[2, 5, 0, 14, 15, 3, 10, 1, 13, 12, 7, 11, 6, 8, 4, 9], [14, 13, 12, 5, 7, 15, 10, 11, 4, 6, 2, 3, 0, 8, 9, 1], [10, 5, 6, 13, 15, 3, 11, 8, 2, 9, 0, 14, 12, 4, 7, 1], [6, 14, 3, 0, 9, 10, 8, 13, 4, 11, 15, 5, 2, 1, 12, 7], [2, 6, 11, 12, 15, 7, 5, 8, 1, 13, 4, 0, 3, 14, 9, 10], [14, 0, 6, 3, 2, 12, 4, 15, 8, 1, 5, 9, 10, 7, 11, 13], [10, 7, 0, 13, 2, 4, 1, 15, 5, 12, 14, 6, 8, 9, 11, 3], [5, 1, 15, 7, 2, 10, 11, 12, 13, 0, 14, 6, 3, 4, 8, 9], [2, 7, 5, 10, 14, 3, 1, 12, 4, 11, 9, 6, 15, 0, 13, 8], [13, 2, 6, 7, 9, 1, 5, 4, 8, 10, 12, 15, 0, 14, 11, 3], [9, 10, 6, 15, 2, 12, 5, 13, 0, 3, 1, 8, 7, 11, 14, 4], [5, 3, 11, 15, 8, 14, 1, 9, 6, 0, 4, 7, 13, 2, 12, 10], [1, 11, 5, 6, 15, 8, 7, 13, 2, 4, 9, 14, 3, 12, 0, 10], [13, 3, 15, 14, 7, 0, 2, 5, 12, 8, 4, 10, 9, 6, 1, 11], [9, 12, 10, 5, 15, 2, 7, 13, 4, 11, 3, 14, 6, 1, 0, 8], [5, 4, 1, 13, 7, 2, 12, 8, 14, 0, 3, 11, 9, 15, 10, 6], [1, 12, 15, 5, 2, 0, 10, 7, 14, 8, 3, 4, 13, 9, 6, 11], [13, 5, 9, 12, 7, 4, 14, 10, 3, 0, 2, 8, 11, 6, 1, 15], [9, 13, 3, 4, 15, 1, 14, 0, 5, 11, 10, 8, 7, 12, 6, 2], [5, 0, 14, 11, 7, 10, 2, 9, 4, 6, 3, 1, 15, 8, 12, 13], [1, 14, 8, 3, 0, 6, 10, 7, 9, 15, 2, 5, 11, 13, 4, 12], [13, 6, 3, 10, 1, 15, 9, 0, 7, 12, 2, 8, 5, 14, 4, 11], [9, 14, 13, 2, 15, 5, 4, 11, 0, 6, 1, 12, 8, 10, 3, 7], [4, 9, 14, 7, 8, 12, 2, 5, 10, 13, 3, 6, 0, 1, 11, 15], [0, 1, 9, 15, 12, 11, 4, 14, 5, 10, 6, 8, 3, 7, 13, 2], [12, 9, 3, 7, 8, 1, 10, 6, 11, 0, 5, 2, 13, 4, 14, 15], [8, 2, 13, 14, 5, 15, 3, 7, 10, 4, 6, 11, 12, 1, 0, 9], [4, 10, 8, 6, 2, 5, 15, 9, 14, 0, 13, 7, 3, 12, 1, 11], [0, 2, 1, 13, 15, 11, 10, 4, 7, 9, 14, 8, 3, 6, 5, 12], [12, 11, 13, 5, 7, 0, 15, 6, 4, 3, 2, 10, 8, 1, 9, 14], [8, 3, 7, 12, 15, 9, 0, 1, 14, 5, 4, 2, 13, 11, 10, 6], [3, 14, 8, 2, 0, 1, 11, 6, 15, 12, 13, 10, 9, 4, 7, 5]],
decode: [[11, 0, 9, 6, 14, 8, 4, 1, 2, 7, 10, 3, 15, 12, 13, 5], [11, 9, 3, 2, 6, 15, 5, 13, 12, 4, 10, 14, 8, 0, 7, 1], [12, 10, 14, 7, 2, 13, 11, 5, 0, 3, 1, 15, 4, 6, 8, 9], [8, 13, 1, 15, 0, 7, 11, 6, 14, 5, 3, 10, 4, 12, 2, 9], [0, 13, 3, 12, 9, 11, 7, 6, 2, 5, 1, 15, 4, 14, 10, 8], [12, 2, 10, 1, 5, 7, 14, 9, 8, 6, 4, 11, 0, 15, 13, 3], [13, 11, 14, 10, 8, 5, 4, 3, 0, 15, 9, 1, 12, 2, 7, 6], [15, 6, 12, 1, 0, 10, 13, 14, 2, 11, 4, 7, 5, 8, 3, 9], [0, 6, 2, 8, 9, 10, 3, 7, 12, 5, 11, 15, 1, 13, 14, 4], [2, 7, 10, 5, 1, 9, 12, 15, 13, 6, 4, 8, 0, 3, 14, 11], [15, 14, 7, 12, 13, 3, 6, 2, 0, 4, 8, 10, 1, 9, 5, 11], [14, 9, 7, 11, 0, 1, 4, 13, 15, 3, 5, 12, 2, 10, 8, 6], [0, 8, 12, 11, 3, 14, 15, 13, 7, 4, 10, 9, 2, 1, 6, 5], [3, 5, 11, 9, 12, 1, 2, 8, 14, 4, 13, 15, 0, 6, 7, 10], [9, 10, 2, 14, 6, 4, 8, 13, 0, 12, 5, 3, 11, 7, 1, 15], [13, 8, 3, 11, 0, 14, 1, 12, 7, 4, 5, 2, 10, 6, 15, 9], [0, 14, 6, 4, 3, 2, 9, 10, 8, 5, 13, 11, 15, 7, 1, 12], [10, 4, 6, 9, 12, 7, 15, 1, 3, 2, 13, 5, 0, 14, 11, 8], [6, 9, 12, 10, 5, 8, 15, 11, 0, 7, 2, 14, 13, 4, 3, 1], [2, 6, 8, 4, 0, 12, 15, 1, 9, 3, 10, 14, 7, 5, 11, 13], [0, 2, 10, 6, 12, 8, 11, 7, 3, 4, 13, 9, 5, 15, 1, 14], [5, 14, 7, 11, 6, 2, 9, 10, 4, 3, 1, 0, 8, 15, 12, 13], [7, 11, 1, 12, 9, 4, 6, 0, 5, 10, 2, 8, 14, 15, 3, 13], [9, 10, 3, 0, 14, 2, 7, 6, 8, 11, 4, 1, 12, 15, 5, 13], [2, 9, 4, 1, 6, 11, 13, 8, 10, 14, 12, 15, 5, 3, 7, 0], [1, 6, 4, 8, 3, 14, 13, 9, 15, 12, 2, 0, 5, 11, 7, 10], [5, 2, 9, 8, 1, 12, 10, 0, 4, 7, 6, 11, 3, 15, 14, 13], [8, 11, 0, 9, 5, 2, 10, 6, 4, 15, 3, 7, 12, 14, 1, 13], [5, 14, 8, 11, 9, 4, 15, 1, 7, 3, 10, 12, 6, 13, 0, 2], [2, 5, 3, 4, 9, 15, 8, 11, 6, 10, 0, 14, 12, 7, 13, 1], [14, 15, 8, 6, 2, 10, 0, 1, 3, 13, 5, 11, 7, 9, 4, 12], [15, 6, 0, 8, 7, 13, 12, 9, 10, 14, 3, 4, 5, 11, 1, 2]]
};
const encrypt = {
tableA: [[[[8, 11, 1, 7, 3, 9, 6, 15, 10, 0, 5, 2, 4, 12, 13, 14], [9, 3, 15, 6, 11, 8, 7, 1, 12, 4, 14, 13, 0, 10, 2, 5], [1, 7, 8, 11, 6, 15, 3, 9, 5, 2, 10, 0, 13, 14, 4, 12], [15, 6, 9, 3, 7, 1, 11, 8, 14, 13, 12, 4, 2, 5, 0, 10], [4, 12, 13, 14, 10, 0, 5, 2, 3, 9, 6, 15, 8, 11, 1, 7], [7, 1, 11, 8, 15, 6, 9, 3, 2, 5, 0, 10, 14, 13, 12, 4], [13, 14, 4, 12, 5, 2, 10, 0, 6, 15, 3, 9, 1, 7, 8, 11], [10, 0, 5, 2, 4, 12, 13, 14, 8, 11, 1, 7, 3, 9, 6, 15], [14, 13, 12, 4, 2, 5, 0, 10, 15, 6, 9, 3, 7, 1, 11, 8], [12, 4, 14, 13, 0, 10, 2, 5, 9, 3, 15, 6, 11, 8, 7, 1], [3, 9, 6, 15, 8, 11, 1, 7, 4, 12, 13, 14, 10, 0, 5, 2], [0, 10, 2, 5, 12, 4, 14, 13, 11, 8, 7, 1, 9, 3, 15, 6], [2, 5, 0, 10, 14, 13, 12, 4, 7, 1, 11, 8, 15, 6, 9, 3], [5, 2, 10, 0, 13, 14, 4, 12, 1, 7, 8, 11, 6, 15, 3, 9], [11, 8, 7, 1, 9, 3, 15, 6, 0, 10, 2, 5, 12, 4, 14, 13], [6, 15, 3, 9, 1, 7, 8, 11, 13, 14, 4, 12, 5, 2, 10, 0]], [[8, 7, 11, 5, 12, 1, 10, 0, 9, 6, 4, 14, 13, 15, 3, 2], [5, 11, 7, 8, 0, 10, 1, 12, 14, 4, 6, 9, 2, 3, 15, 13], [10, 0, 12, 1, 11, 5, 8, 7, 3, 2, 13, 15, 4, 14, 9, 6], [0, 10, 1, 12, 5, 11, 7, 8, 2, 3, 15, 13, 14, 4, 6, 9], [12, 1, 10, 0, 8, 7, 11, 5, 13, 15, 3, 2, 9, 6, 4, 14], [2, 3, 15, 13, 14, 4, 6, 9, 0, 10, 1, 12, 5, 11, 7, 8], [1, 12, 0, 10, 7, 8, 5, 11, 15, 13, 2, 3, 6, 9, 14, 4], [9, 6, 4, 14, 13, 15, 3, 2, 8, 7, 11, 5, 12, 1, 10, 0], [7, 8, 5, 11, 1, 12, 0, 10, 6, 9, 14, 4, 15, 13, 2, 3], [11, 5, 8, 7, 10, 0, 12, 1, 4, 14, 9, 6, 3, 2, 13, 15], [4, 14, 9, 6, 3, 2, 13, 15, 11, 5, 8, 7, 10, 0, 12, 1], [14, 4, 6, 9, 2, 3, 15, 13, 5, 11, 7, 8, 0, 10, 1, 12], [3, 2, 13, 15, 4, 14, 9, 6, 10, 0, 12, 1, 11, 5, 8, 7], [15, 13, 2, 3, 6, 9, 14, 4, 1, 12, 0, 10, 7, 8, 5, 11], [13, 15, 3, 2, 9, 6, 4, 14, 12, 1, 10, 0, 8, 7, 11, 5], [6, 9, 14, 4, 15, 13, 2, 3, 7, 8, 5, 11, 1, 12, 0, 10]]], [[[1, 6, 14, 15, 2, 11, 0, 5, 4, 9, 8, 10, 13, 3, 12, 7], [11, 2, 5, 0, 6, 1, 15, 14, 3, 13, 7, 12, 9, 4, 10, 8], [14, 15, 1, 6, 0, 5, 2, 11, 8, 10, 4, 9, 12, 7, 13, 3], [7, 12, 3, 13, 10, 8, 9, 4, 5, 0, 11, 2, 15, 14, 6, 1], [5, 0, 11, 2, 15, 14, 6, 1, 7, 12, 3, 13, 10, 8, 9, 4], [10, 8, 9, 4, 7, 12, 3, 13, 15, 14, 6, 1, 5, 0, 11, 2], [4, 9, 8, 10, 13, 3, 12, 7, 1, 6, 14, 15, 2, 11, 0, 5], [2, 11, 0, 5, 1, 6, 14, 15, 13, 3, 12, 7, 4, 9, 8, 10], [3, 13, 7, 12, 9, 4, 10, 8, 11, 2, 5, 0, 6, 1, 15, 14], [15, 14, 6, 1, 5, 0, 11, 2, 10, 8, 9, 4, 7, 12, 3, 13], [8, 10, 4, 9, 12, 7, 13, 3, 14, 15, 1, 6, 0, 5, 2, 11], [13, 3, 12, 7, 4, 9, 8, 10, 2, 11, 0, 5, 1, 6, 14, 15], [0, 5, 2, 11, 14, 15, 1, 6, 12, 7, 13, 3, 8, 10, 4, 9], [9, 4, 10, 8, 3, 13, 7, 12, 6, 1, 15, 14, 11, 2, 5, 0], [6, 1, 15, 14, 11, 2, 5, 0, 9, 4, 10, 8, 3, 13, 7, 12], [12, 7, 13, 3, 8, 10, 4, 9, 0, 5, 2, 11, 14, 15, 1, 6]], [[10, 14, 2, 4, 5, 7, 9, 12, 6, 11, 15, 0, 3, 8, 1, 13], [1, 13, 3, 8, 15, 0, 6, 11, 9, 12, 5, 7, 2, 4, 10, 14], [13, 1, 8, 3, 0, 15, 11, 6, 12, 9, 7, 5, 4, 2, 14, 10], [14, 10, 4, 2, 7, 5, 12, 9, 11, 6, 0, 15, 8, 3, 13, 1], [0, 15, 11, 6, 13, 1, 8, 3, 4, 2, 14, 10, 12, 9, 7, 5], [6, 11, 15, 0, 3, 8, 1, 13, 10, 14, 2, 4, 5, 7, 9, 12], [4, 2, 14, 10, 12, 9, 7, 5, 0, 15, 11, 6, 13, 1, 8, 3], [3, 8, 1, 13, 6, 11, 15, 0, 5, 7, 9, 12, 10, 14, 2, 4], [7, 5, 12, 9, 14, 10, 4, 2, 8, 3, 13, 1, 11, 6, 0, 15], [12, 9, 7, 5, 4, 2, 14, 10, 13, 1, 8, 3, 0, 15, 11, 6], [9, 12, 5, 7, 2, 4, 10, 14, 1, 13, 3, 8, 15, 0, 6, 11], [15, 0, 6, 11, 1, 13, 3, 8, 2, 4, 10, 14, 9, 12, 5, 7], [8, 3, 13, 1, 11, 6, 0, 15, 7, 5, 12, 9, 14, 10, 4, 2], [5, 7, 9, 12, 10, 14, 2, 4, 3, 8, 1, 13, 6, 11, 15, 0], [2, 4, 10, 14, 9, 12, 5, 7, 15, 0, 6, 11, 1, 13, 3, 8], [11, 6, 0, 15, 8, 3, 13, 1, 14, 10, 4, 2, 7, 5, 12, 9]]], [[[5, 14, 4, 15, 11, 13, 1, 3, 2, 8, 10, 0, 6, 7, 9, 12], [15, 4, 14, 5, 3, 1, 13, 11, 0, 10, 8, 2, 12, 9, 7, 6], [0, 10, 8, 2, 12, 9, 7, 6, 15, 4, 14, 5, 3, 1, 13, 11], [3, 1, 13, 11, 15, 4, 14, 5, 12, 9, 7, 6, 0, 10, 8, 2], [14, 5, 15, 4, 13, 11, 3, 1, 8, 2, 0, 10, 7, 6, 12, 9], [7, 6, 12, 9, 8, 2, 0, 10, 13, 11, 3, 1, 14, 5, 15, 4], [10, 0, 2, 8, 9, 12, 6, 7, 4, 15, 5, 14, 1, 3, 11, 13], [9, 12, 6, 7, 10, 0, 2, 8, 1, 3, 11, 13, 4, 15, 5, 14], [6, 7, 9, 12, 2, 8, 10, 0, 11, 13, 1, 3, 5, 14, 4, 15], [13, 11, 3, 1, 14, 5, 15, 4, 7, 6, 12, 9, 8, 2, 0, 10], [11, 13, 1, 3, 5, 14, 4, 15, 6, 7, 9, 12, 2, 8, 10, 0], [8, 2, 0, 10, 7, 6, 12, 9, 14, 5, 15, 4, 13, 11, 3, 1], [2, 8, 10, 0, 6, 7, 9, 12, 5, 14, 4, 15, 11, 13, 1, 3], [4, 15, 5, 14, 1, 3, 11, 13, 10, 0, 2, 8, 9, 12, 6, 7], [1, 3, 11, 13, 4, 15, 5, 14, 9, 12, 6, 7, 10, 0, 2, 8], [12, 9, 7, 6, 0, 10, 8, 2, 3, 1, 13, 11, 15, 4, 14, 5]], [[3, 12, 15, 1, 4, 10, 5, 9, 7, 8, 11, 2, 14, 0, 13, 6], [7, 8, 11, 2, 14, 0, 13, 6, 3, 12, 15, 1, 4, 10, 5, 9], [10, 4, 9, 5, 12, 3, 1, 15, 0, 14, 6, 13, 8, 7, 2, 11], [15, 1, 3, 12, 5, 9, 4, 10, 11, 2, 7, 8, 13, 6, 14, 0], [9, 5, 10, 4, 1, 15, 12, 3, 6, 13, 0, 14, 2, 11, 8, 7], [2, 11, 8, 7, 6, 13, 0, 14, 1, 15, 12, 3, 9, 5, 10, 4], [1, 15, 12, 3, 9, 5, 10, 4, 2, 11, 8, 7, 6, 13, 0, 14], [14, 0, 13, 6, 7, 8, 11, 2, 4, 10, 5, 9, 3, 12, 15, 1], [8, 7, 2, 11, 0, 14, 6, 13, 12, 3, 1, 15, 10, 4, 9, 5], [11, 2, 7, 8, 13, 6, 14, 0, 15, 1, 3, 12, 5, 9, 4, 10], [0, 14, 6, 13, 8, 7, 2, 11, 10, 4, 9, 5, 12, 3, 1, 15], [6, 13, 0, 14, 2, 11, 8, 7, 9, 5, 10, 4, 1, 15, 12, 3], [4, 10, 5, 9, 3, 12, 15, 1, 14, 0, 13, 6, 7, 8, 11, 2], [13, 6, 14, 0, 11, 2, 7, 8, 5, 9, 4, 10, 15, 1, 3, 12], [12, 3, 1, 15, 10, 4, 9, 5, 8, 7, 2, 11, 0, 14, 6, 13], [5, 9, 4, 10, 15, 1, 3, 12, 13, 6, 14, 0, 11, 2, 7, 8]]], [[[13, 7, 8, 11, 15, 14, 6, 5, 3, 1, 4, 10, 2, 9, 12, 0], [15, 14, 6, 5, 13, 7, 8, 11, 2, 9, 12, 0, 3, 1, 4, 10], [6, 5, 15, 14, 8, 11, 13, 7, 12, 0, 2, 9, 4, 10, 3, 1], [9, 2, 0, 12, 1, 3, 10, 4, 14, 15, 5, 6, 7, 13, 11, 8], [5, 6, 14, 15, 11, 8, 7, 13, 0, 12, 9, 2, 10, 4, 1, 3], [4, 10, 3, 1, 12, 0, 2, 9, 8, 11, 13, 7, 6, 5, 15, 14], [1, 3, 10, 4, 9, 2, 0, 12, 7, 13, 11, 8, 14, 15, 5, 6], [11, 8, 7, 13, 5, 6, 14, 15, 10, 4, 1, 3, 0, 12, 9, 2], [12, 0, 2, 9, 4, 10, 3, 1, 6, 5, 15, 14, 8, 11, 13, 7], [0, 12, 9, 2, 10, 4, 1, 3, 5, 6, 14, 15, 11, 8, 7, 13], [8, 11, 13, 7, 6, 5, 15, 14, 4, 10, 3, 1, 12, 0, 2, 9], [2, 9, 12, 0, 3, 1, 4, 10, 15, 14, 6, 5, 13, 7, 8, 11], [10, 4, 1, 3, 0, 12, 9, 2, 11, 8, 7, 13, 5, 6, 14, 15], [7, 13, 11, 8, 14, 15, 5, 6, 1, 3, 10, 4, 9, 2, 0, 12], [3, 1, 4, 10, 2, 9, 12, 0, 13, 7, 8, 11, 15, 14, 6, 5], [14, 15, 5, 6, 7, 13, 11, 8, 9, 2, 0, 12, 1, 3, 10, 4]], [[15, 13, 9, 5, 6, 2, 0, 7, 3, 4, 14, 8, 12, 10, 11, 1], [3, 4, 14, 8, 12, 10, 11, 1, 15, 13, 9, 5, 6, 2, 0, 7], [10, 12, 1, 11, 4, 3, 8, 14, 2, 6, 7, 0, 13, 15, 5, 9], [2, 6, 7, 0, 13, 15, 5, 9, 10, 12, 1, 11, 4, 3, 8, 14], [6, 2, 0, 7, 15, 13, 9, 5, 12, 10, 11, 1, 3, 4, 14, 8], [4, 3, 8, 14, 10, 12, 1, 11, 13, 15, 5, 9, 2, 6, 7, 0], [9, 5, 15, 13, 0, 7, 6, 2, 14, 8, 3, 4, 11, 1, 12, 10], [14, 8, 3, 4, 11, 1, 12, 10, 9, 5, 15, 13, 0, 7, 6, 2], [7, 0, 2, 6, 5, 9, 13, 15, 1, 11, 10, 12, 8, 14, 4, 3], [0, 7, 6, 2, 9, 5, 15, 13, 11, 1, 12, 10, 14, 8, 3, 4], [12, 10, 11, 1, 3, 4, 14, 8, 6, 2, 0, 7, 15, 13, 9, 5], [1, 11, 10, 12, 8, 14, 4, 3, 7, 0, 2, 6, 5, 9, 13, 15], [11, 1, 12, 10, 14, 8, 3, 4, 0, 7, 6, 2, 9, 5, 15, 13], [13, 15, 5, 9, 2, 6, 7, 0, 4, 3, 8, 14, 10, 12, 1, 11], [5, 9, 13, 15, 7, 0, 2, 6, 8, 14, 4, 3, 1, 11, 10, 12], [8, 14, 4, 3, 1, 11, 10, 12, 5, 9, 13, 15, 7, 0, 2, 6]]], [[[13, 8, 11, 14, 4, 3, 10, 5, 9, 15, 7, 1, 12, 0, 6, 2], [1, 7, 15, 9, 2, 6, 0, 12, 14, 11, 8, 13, 5, 10, 3, 4], [0, 12, 2, 6, 15, 9, 1, 7, 3, 4, 5, 10, 8, 13, 14, 11], [9, 15, 7, 1, 12, 0, 6, 2, 13, 8, 11, 14, 4, 3, 10, 5], [3, 4, 5, 10, 8, 13, 14, 11, 0, 12, 2, 6, 15, 9, 1, 7], [2, 6, 0, 12, 1, 7, 15, 9, 5, 10, 3, 4, 14, 11, 8, 13], [10, 5, 4, 3, 11, 14, 13, 8, 6, 2, 12, 0, 7, 1, 9, 15], [12, 0, 6, 2, 9, 15, 7, 1, 4, 3, 10, 5, 13, 8, 11, 14], [11, 14, 13, 8, 10, 5, 4, 3, 7, 1, 9, 15, 6, 2, 12, 0], [5, 10, 3, 4, 14, 11, 8, 13, 2, 6, 0, 12, 1, 7, 15, 9], [6, 2, 12, 0, 7, 1, 9, 15, 10, 5, 4, 3, 11, 14, 13, 8], [4, 3, 10, 5, 13, 8, 11, 14, 12, 0, 6, 2, 9, 15, 7, 1], [7, 1, 9, 15, 6, 2, 12, 0, 11, 14, 13, 8, 10, 5, 4, 3], [14, 11, 8, 13, 5, 10, 3, 4, 1, 7, 15, 9, 2, 6, 0, 12], [15, 9, 1, 7, 0, 12, 2, 6, 8, 13, 14, 11, 3, 4, 5, 10], [8, 13, 14, 11, 3, 4, 5, 10, 15, 9, 1, 7, 0, 12, 2, 6]], [[6, 8, 14, 7, 11, 5, 2, 15, 10, 3, 9, 1, 12, 4, 0, 13], [3, 10, 1, 9, 4, 12, 13, 0, 8, 6, 7, 14, 5, 11, 15, 2], [4, 12, 13, 0, 3, 10, 1, 9, 5, 11, 15, 2, 8, 6, 7, 14], [7, 14, 8, 6, 15, 2, 5, 11, 1, 9, 3, 10, 13, 0, 4, 12], [1, 9, 3, 10, 13, 0, 4, 12, 7, 14, 8, 6, 15, 2, 5, 11], [9, 1, 10, 3, 0, 13, 12, 4, 14, 7, 6, 8, 2, 15, 11, 5], [0, 13, 12, 4, 9, 1, 10, 3, 2, 15, 11, 5, 14, 7, 6, 8], [13, 0, 4, 12, 1, 9, 3, 10, 15, 2, 5, 11, 7, 14, 8, 6], [11, 5, 2, 15, 6, 8, 14, 7, 12, 4, 0, 13, 10, 3, 9, 1], [10, 3, 9, 1, 12, 4, 0, 13, 6, 8, 14, 7, 11, 5, 2, 15], [5, 11, 15, 2, 8, 6, 7, 14, 4, 12, 13, 0, 3, 10, 1, 9], [14, 7, 6, 8, 2, 15, 11, 5, 9, 1, 10, 3, 0, 13, 12, 4], [2, 15, 11, 5, 14, 7, 6, 8, 0, 13, 12, 4, 9, 1, 10, 3], [12, 4, 0, 13, 10, 3, 9, 1, 11, 5, 2, 15, 6, 8, 14, 7], [8, 6, 7, 14, 5, 11, 15, 2, 3, 10, 1, 9, 4, 12, 13, 0], [15, 2, 5, 11, 7, 14, 8, 6, 13, 0, 4, 12, 1, 9, 3, 10]]], [[[10, 13, 11, 15, 3, 4, 1, 0, 8, 12, 7, 5, 9, 14, 6, 2], [11, 15, 10, 13, 1, 0, 3, 4, 7, 5, 8, 12, 6, 2, 9, 14], [9, 14, 6, 2, 8, 12, 7, 5, 3, 4, 1, 0, 10, 13, 11, 15], [13, 10, 15, 11, 4, 3, 0, 1, 12, 8, 5, 7, 14, 9, 2, 6], [0, 1, 4, 3, 15, 11, 13, 10, 2, 6, 14, 9, 5, 7, 12, 8], [6, 2, 9, 14, 7, 5, 8, 12, 1, 0, 3, 4, 11, 15, 10, 13], [7, 5, 8, 12, 6, 2, 9, 14, 11, 15, 10, 13, 1, 0, 3, 4], [3, 4, 1, 0, 10, 13, 11, 15, 9, 14, 6, 2, 8, 12, 7, 5], [15, 11, 13, 10, 0, 1, 4, 3, 5, 7, 12, 8, 2, 6, 14, 9], [8, 12, 7, 5, 9, 14, 6, 2, 10, 13, 11, 15, 3, 4, 1, 0], [12, 8, 5, 7, 14, 9, 2, 6, 13, 10, 15, 11, 4, 3, 0, 1], [4, 3, 0, 1, 13, 10, 15, 11, 14, 9, 2, 6, 12, 8, 5, 7], [14, 9, 2, 6, 12, 8, 5, 7, 4, 3, 0, 1, 13, 10, 15, 11], [2, 6, 14, 9, 5, 7, 12, 8, 0, 1, 4, 3, 15, 11, 13, 10], [1, 0, 3, 4, 11, 15, 10, 13, 6, 2, 9, 14, 7, 5, 8, 12], [5, 7, 12, 8, 2, 6, 14, 9, 15, 11, 13, 10, 0, 1, 4, 3]], [[1, 14, 3, 13, 7, 11, 8, 0, 5, 4, 9, 12, 10, 6, 2, 15], [15, 2, 6, 10, 12, 9, 4, 5, 0, 8, 11, 7, 13, 3, 14, 1], [7, 11, 8, 0, 1, 14, 3, 13, 10, 6, 2, 15, 5, 4, 9, 12], [5, 4, 9, 12, 10, 6, 2, 15, 1, 14, 3, 13, 7, 11, 8, 0], [13, 3, 14, 1, 0, 8, 11, 7, 12, 9, 4, 5, 15, 2, 6, 10], [4, 5, 12, 9, 6, 10, 15, 2, 14, 1, 13, 3, 11, 7, 0, 8], [14, 1, 13, 3, 11, 7, 0, 8, 4, 5, 12, 9, 6, 10, 15, 2], [3, 13, 1, 14, 8, 0, 7, 11, 9, 12, 5, 4, 2, 15, 10, 6], [6, 10, 15, 2, 4, 5, 12, 9, 11, 7, 0, 8, 14, 1, 13, 3], [2, 15, 10, 6, 9, 12, 5, 4, 8, 0, 7, 11, 3, 13, 1, 14], [8, 0, 7, 11, 3, 13, 1, 14, 2, 15, 10, 6, 9, 12, 5, 4], [12, 9, 4, 5, 15, 2, 6, 10, 13, 3, 14, 1, 0, 8, 11, 7], [0, 8, 11, 7, 13, 3, 14, 1, 15, 2, 6, 10, 12, 9, 4, 5], [11, 7, 0, 8, 14, 1, 13, 3, 6, 10, 15, 2, 4, 5, 12, 9], [10, 6, 2, 15, 5, 4, 9, 12, 7, 11, 8, 0, 1, 14, 3, 13], [9, 12, 5, 4, 2, 15, 10, 6, 3, 13, 1, 14, 8, 0, 7, 11]]], [[[5, 6, 2, 7, 10, 3, 1, 11, 14, 8, 9, 15, 12, 4, 0, 13], [0, 13, 12, 4, 9, 15, 14, 8, 1, 11, 10, 3, 2, 7, 5, 6], [1, 11, 10, 3, 2, 7, 5, 6, 0, 13, 12, 4, 9, 15, 14, 8], [2, 7, 5, 6, 1, 11, 10, 3, 9, 15, 14, 8, 0, 13, 12, 4], [11, 1, 3, 10, 7, 2, 6, 5, 13, 0, 4, 12, 15, 9, 8, 14], [12, 4, 0, 13, 14, 8, 9, 15, 10, 3, 1, 11, 5, 6, 2, 7], [4, 12, 13, 0, 8, 14, 15, 9, 3, 10, 11, 1, 6, 5, 7, 2], [14, 8, 9, 15, 12, 4, 0, 13, 5, 6, 2, 7, 10, 3, 1, 11], [15, 9, 8, 14, 13, 0, 4, 12, 7, 2, 6, 5, 11, 1, 3, 10], [10, 3, 1, 11, 5, 6, 2, 7, 12, 4, 0, 13, 14, 8, 9, 15], [6, 5, 7, 2, 3, 10, 11, 1, 8, 14, 15, 9, 4, 12, 13, 0], [13, 0, 4, 12, 15, 9, 8, 14, 11, 1, 3, 10, 7, 2, 6, 5], [7, 2, 6, 5, 11, 1, 3, 10, 15, 9, 8, 14, 13, 0, 4, 12], [8, 14, 15, 9, 4, 12, 13, 0, 6, 5, 7, 2, 3, 10, 11, 1], [3, 10, 11, 1, 6, 5, 7, 2, 4, 12, 13, 0, 8, 14, 15, 9], [9, 15, 14, 8, 0, 13, 12, 4, 2, 7, 5, 6, 1, 11, 10, 3]], [[1, 9, 14, 13, 5, 12, 0, 6, 10, 4, 11, 8, 3, 7, 2, 15], [8, 11, 4, 10, 15, 2, 7, 3, 13, 14, 9, 1, 6, 0, 12, 5], [13, 14, 9, 1, 6, 0, 12, 5, 8, 11, 4, 10, 15, 2, 7, 3], [5, 12, 0, 6, 1, 9, 14, 13, 3, 7, 2, 15, 10, 4, 11, 8], [15, 2, 7, 3, 8, 11, 4, 10, 6, 0, 12, 5, 13, 14, 9, 1], [14, 13, 1, 9, 0, 6, 5, 12, 11, 8, 10, 4, 2, 15, 3, 7], [10, 4, 11, 8, 3, 7, 2, 15, 1, 9, 14, 13, 5, 12, 0, 6], [9, 1, 13, 14, 12, 5, 6, 0, 4, 10, 8, 11, 7, 3, 15, 2], [3, 7, 2, 15, 10, 4, 11, 8, 5, 12, 0, 6, 1, 9, 14, 13], [4, 10, 8, 11, 7, 3, 15, 2, 9, 1, 13, 14, 12, 5, 6, 0], [2, 15, 3, 7, 11, 8, 10, 4, 0, 6, 5, 12, 14, 13, 1, 9], [11, 8, 10, 4, 2, 15, 3, 7, 14, 13, 1, 9, 0, 6, 5, 12], [7, 3, 15, 2, 4, 10, 8, 11, 12, 5, 6, 0, 9, 1, 13, 14], [12, 5, 6, 0, 9, 1, 13, 14, 7, 3, 15, 2, 4, 10, 8, 11], [0, 6, 5, 12, 14, 13, 1, 9, 2, 15, 3, 7, 11, 8, 10, 4], [6, 0, 12, 5, 13, 14, 9, 1, 15, 2, 7, 3, 8, 11, 4, 10]]], [[[3, 15, 9, 7, 1, 12, 6, 0, 4, 13, 5, 10, 2, 11, 8, 14], [7, 9, 15, 3, 0, 6, 12, 1, 10, 5, 13, 4, 14, 8, 11, 2], [10, 5, 13, 4, 14, 8, 11, 2, 7, 9, 15, 3, 0, 6, 12, 1], [1, 12, 6, 0, 3, 15, 9, 7, 2, 11, 8, 14, 4, 13, 5, 10], [6, 0, 1, 12, 9, 7, 3, 15, 8, 14, 2, 11, 5, 10, 4, 13], [11, 2, 14, 8, 13, 4, 10, 5, 12, 1, 0, 6, 15, 3, 7, 9], [9, 7, 3, 15, 6, 0, 1, 12, 5, 10, 4, 13, 8, 14, 2, 11], [4, 13, 5, 10, 2, 11, 8, 14, 3, 15, 9, 7, 1, 12, 6, 0], [15, 3, 7, 9, 12, 1, 0, 6, 13, 4, 10, 5, 11, 2, 14, 8], [8, 14, 2, 11, 5, 10, 4, 13, 6, 0, 1, 12, 9, 7, 3, 15], [2, 11, 8, 14, 4, 13, 5, 10, 1, 12, 6, 0, 3, 15, 9, 7], [0, 6, 12, 1, 7, 9, 15, 3, 14, 8, 11, 2, 10, 5, 13, 4], [14, 8, 11, 2, 10, 5, 13, 4, 0, 6, 12, 1, 7, 9, 15, 3], [13, 4, 10, 5, 11, 2, 14, 8, 15, 3, 7, 9, 12, 1, 0, 6], [12, 1, 0, 6, 15, 3, 7, 9, 11, 2, 14, 8, 13, 4, 10, 5], [5, 10, 4, 13, 8, 14, 2, 11, 9, 7, 3, 15, 6, 0, 1, 12]], [[15, 1, 3, 12, 0, 7, 14, 5, 6, 4, 2, 11, 10, 9, 8, 13], [11, 2, 4, 6, 13, 8, 9, 10, 12, 3, 1, 15, 5, 14, 7, 0], [10, 9, 8, 13, 6, 4, 2, 11, 0, 7, 14, 5, 15, 1, 3, 12], [12, 3, 1, 15, 5, 14, 7, 0, 11, 2, 4, 6, 13, 8, 9, 10], [6, 4, 2, 11, 10, 9, 8, 13, 15, 1, 3, 12, 0, 7, 14, 5], [4, 6, 11, 2, 9, 10, 13, 8, 1, 15, 12, 3, 7, 0, 5, 14], [14, 5, 0, 7, 3, 12, 15, 1, 8, 13, 10, 9, 2, 11, 6, 4], [9, 10, 13, 8, 4, 6, 11, 2, 7, 0, 5, 14, 1, 15, 12, 3], [8, 13, 10, 9, 2, 11, 6, 4, 14, 5, 0, 7, 3, 12, 15, 1], [7, 0, 5, 14, 1, 15, 12, 3, 9, 10, 13, 8, 4, 6, 11, 2], [5, 14, 7, 0, 12, 3, 1, 15, 13, 8, 9, 10, 11, 2, 4, 6], [3, 12, 15, 1, 14, 5, 0, 7, 2, 11, 6, 4, 8, 13, 10, 9], [13, 8, 9, 10, 11, 2, 4, 6, 5, 14, 7, 0, 12, 3, 1, 15], [2, 11, 6, 4, 8, 13, 10, 9, 3, 12, 15, 1, 14, 5, 0, 7], [1, 15, 12, 3, 7, 0, 5, 14, 4, 6, 11, 2, 9, 10, 13, 8], [0, 7, 14, 5, 15, 1, 3, 12, 10, 9, 8, 13, 6, 4, 2, 11]]], [[[9, 3, 13, 2, 14, 0, 4, 5, 10, 15, 12, 1, 6, 8, 11, 7], [0, 14, 5, 4, 3, 9, 2, 13, 8, 6, 7, 11, 15, 10, 1, 12], [3, 9, 2, 13, 0, 14, 5, 4, 15, 10, 1, 12, 8, 6, 7, 11], [7, 11, 8, 6, 1, 12, 15, 10, 5, 4, 0, 14, 2, 13, 3, 9], [11, 7, 6, 8, 12, 1, 10, 15, 4, 5, 14, 0, 13, 2, 9, 3], [4, 5, 14, 0, 13, 2, 9, 3, 11, 7, 6, 8, 12, 1, 10, 15], [1, 12, 15, 10, 7, 11, 8, 6, 2, 13, 3, 9, 5, 4, 0, 14], [13, 2, 9, 3, 4, 5, 14, 0, 12, 1, 10, 15, 11, 7, 6, 8], [6, 8, 11, 7, 10, 15, 12, 1, 14, 0, 4, 5, 9, 3, 13, 2], [10, 15, 12, 1, 6, 8, 11, 7, 9, 3, 13, 2, 14, 0, 4, 5], [2, 13, 3, 9, 5, 4, 0, 14, 1, 12, 15, 10, 7, 11, 8, 6], [12, 1, 10, 15, 11, 7, 6, 8, 13, 2, 9, 3, 4, 5, 14, 0], [14, 0, 4, 5, 9, 3, 13, 2, 6, 8, 11, 7, 10, 15, 12, 1], [15, 10, 1, 12, 8, 6, 7, 11, 3, 9, 2, 13, 0, 14, 5, 4], [8, 6, 7, 11, 15, 10, 1, 12, 0, 14, 5, 4, 3, 9, 2, 13], [5, 4, 0, 14, 2, 13, 3, 9, 7, 11, 8, 6, 1, 12, 15, 10]], [[3, 15, 14, 0, 10, 4, 6, 13, 7, 12, 8, 9, 11, 1, 5, 2], [13, 6, 4, 10, 0, 14, 15, 3, 2, 5, 1, 11, 9, 8, 12, 7], [0, 14, 15, 3, 13, 6, 4, 10, 9, 8, 12, 7, 2, 5, 1, 11], [15, 3, 0, 14, 4, 10, 13, 6, 12, 7, 9, 8, 1, 11, 2, 5], [11, 1, 5, 2, 7, 12, 8, 9, 10, 4, 6, 13, 3, 15, 14, 0], [7, 12, 8, 9, 11, 1, 5, 2, 3, 15, 14, 0, 10, 4, 6, 13], [10, 4, 6, 13, 3, 15, 14, 0, 11, 1, 5, 2, 7, 12, 8, 9], [1, 11, 2, 5, 12, 7, 9, 8, 4, 10, 13, 6, 15, 3, 0, 14], [14, 0, 3, 15, 6, 13, 10, 4, 8, 9, 7, 12, 5, 2, 11, 1], [9, 8, 12, 7, 2, 5, 1, 11, 0, 14, 15, 3, 13, 6, 4, 10], [5, 2, 11, 1, 8, 9, 7, 12, 6, 13, 10, 4, 14, 0, 3, 15], [4, 10, 13, 6, 15, 3, 0, 14, 1, 11, 2, 5, 12, 7, 9, 8], [8, 9, 7, 12, 5, 2, 11, 1, 14, 0, 3, 15, 6, 13, 10, 4], [12, 7, 9, 8, 1, 11, 2, 5, 15, 3, 0, 14, 4, 10, 13, 6], [2, 5, 1, 11, 9, 8, 12, 7, 13, 6, 4, 10, 0, 14, 15, 3], [6, 13, 10, 4, 14, 0, 3, 15, 5, 2, 11, 1, 8, 9, 7, 12]]], [[[9, 0, 4, 13, 14, 10, 15, 8, 6, 11, 12, 2, 7, 3, 1, 5], [4, 13, 9, 0, 15, 8, 14, 10, 12, 2, 6, 11, 1, 5, 7, 3], [6, 11, 12, 2, 7, 3, 1, 5, 9, 0, 4, 13, 14, 10, 15, 8], [10, 14, 8, 15, 0, 9, 13, 4, 3, 7, 5, 1, 11, 6, 2, 12], [14, 10, 15, 8, 9, 0, 4, 13, 7, 3, 1, 5, 6, 11, 12, 2], [5, 1, 3, 7, 2, 12, 11, 6, 8, 15, 10, 14, 13, 4, 0, 9], [11, 6, 2, 12, 3, 7, 5, 1, 0, 9, 13, 4, 10, 14, 8, 15], [2, 12, 11, 6, 5, 1, 3, 7, 13, 4, 0, 9, 8, 15, 10, 14], [7, 3, 1, 5, 6, 11, 12, 2, 14, 10, 15, 8, 9, 0, 4, 13], [8, 15, 10, 14, 13, 4, 0, 9, 5, 1, 3, 7, 2, 12, 11, 6], [3, 7, 5, 1, 11, 6, 2, 12, 10, 14, 8, 15, 0, 9, 13, 4], [1, 5, 7, 3, 12, 2, 6, 11, 15, 8, 14, 10, 4, 13, 9, 0], [12, 2, 6, 11, 1, 5, 7, 3, 4, 13, 9, 0, 15, 8, 14, 10], [15, 8, 14, 10, 4, 13, 9, 0, 1, 5, 7, 3, 12, 2, 6, 11], [0, 9, 13, 4, 10, 14, 8, 15, 11, 6, 2, 12, 3, 7, 5, 1], [13, 4, 0, 9, 8, 15, 10, 14, 2, 12, 11, 6, 5, 1, 3, 7]], [[7, 4, 9, 0, 13, 3, 12, 1, 8, 2, 14, 10, 15, 5, 6, 11], [14, 10, 8, 2, 6, 11, 15, 5, 9, 0, 7, 4, 12, 1, 13, 3], [1, 12, 3, 13, 0, 9, 4, 7, 11, 6, 5, 15, 10, 14, 2, 8], [10, 14, 2, 8, 11, 6, 5, 15, 0, 9, 4, 7, 1, 12, 3, 13], [2, 8, 10, 14, 5, 15, 11, 6, 4, 7, 0, 9, 3, 13, 1, 12], [4, 7, 0, 9, 3, 13, 1, 12, 2, 8, 10, 14, 5, 15, 11, 6], [8, 2, 14, 10, 15, 5, 6, 11, 7, 4, 9, 0, 13, 3, 12, 1], [3, 13, 1, 12, 4, 7, 0, 9, 5, 15, 11, 6, 2, 8, 10, 14], [15, 5, 6, 11, 8, 2, 14, 10, 13, 3, 12, 1, 7, 4, 9, 0], [12, 1, 13, 3, 9, 0, 7, 4, 6, 11, 15, 5, 14, 10, 8, 2], [13, 3, 12, 1, 7, 4, 9, 0, 15, 5, 6, 11, 8, 2, 14, 10], [9, 0, 7, 4, 12, 1, 13, 3, 14, 10, 8, 2, 6, 11, 15, 5], [11, 6, 5, 15, 10, 14, 2, 8, 1, 12, 3, 13, 0, 9, 4, 7], [6, 11, 15, 5, 14, 10, 8, 2, 12, 1, 13, 3, 9, 0, 7, 4], [0, 9, 4, 7, 1, 12, 3, 13, 10, 14, 2, 8, 11, 6, 5, 15], [5, 15, 11, 6, 2, 8, 10, 14, 3, 13, 1, 12, 4, 7, 0, 9]]], [[[9, 12, 3, 7, 0, 14, 1, 8, 4, 10, 15, 13, 5, 11, 2, 6], [0, 14, 1, 8, 9, 12, 3, 7, 5, 11, 2, 6, 4, 10, 15, 13], [2, 6, 5, 11, 15, 13, 4, 10, 1, 8, 0, 14, 3, 7, 9, 12], [8, 1, 14, 0, 7, 3, 12, 9, 6, 2, 11, 5, 13, 15, 10, 4], [15, 13, 4, 10, 2, 6, 5, 11, 3, 7, 9, 12, 1, 8, 0, 14], [6, 2, 11, 5, 13, 15, 10, 4, 8, 1, 14, 0, 7, 3, 12, 9], [12, 9, 7, 3, 14, 0, 8, 1, 10, 4, 13, 15, 11, 5, 6, 2], [7, 3, 12, 9, 8, 1, 14, 0, 13, 15, 10, 4, 6, 2, 11, 5], [1, 8, 0, 14, 3, 7, 9, 12, 2, 6, 5, 11, 15, 13, 4, 10], [5, 11, 2, 6, 4, 10, 15, 13, 0, 14, 1, 8, 9, 12, 3, 7], [3, 7, 9, 12, 1, 8, 0, 14, 15, 13, 4, 10, 2, 6, 5, 11], [4, 10, 15, 13, 5, 11, 2, 6, 9, 12, 3, 7, 0, 14, 1, 8], [13, 15, 10, 4, 6, 2, 11, 5, 7, 3, 12, 9, 8, 1, 14, 0], [10, 4, 13, 15, 11, 5, 6, 2, 12, 9, 7, 3, 14, 0, 8, 1], [14, 0, 8, 1, 12, 9, 7, 3, 11, 5, 6, 2, 10, 4, 13, 15], [11, 5, 6, 2, 10, 4, 13, 15, 14, 0, 8, 1, 12, 9, 7, 3]], [[2, 4, 0, 8, 9, 5, 10, 11, 13, 1, 15, 14, 3, 7, 6, 12], [8, 0, 4, 2, 11, 10, 5, 9, 14, 15, 1, 13, 12, 6, 7, 3], [7, 3, 12, 6, 1, 13, 14, 15, 5, 9, 11, 10, 4, 2, 8, 0], [5, 9, 11, 10, 4, 2, 8, 0, 7, 3, 12, 6, 1, 13, 14, 15], [1, 13, 14, 15, 7, 3, 12, 6, 4, 2, 8, 0, 5, 9, 11, 10], [14, 15, 1, 13, 12, 6, 7, 3, 8, 0, 4, 2, 11, 10, 5, 9], [10, 11, 9, 5, 0, 8, 2, 4, 6, 12, 3, 7, 15, 14, 13, 1], [12, 6, 7, 3, 14, 15, 1, 13, 11, 10, 5, 9, 8, 0, 4, 2], [3, 7, 6, 12, 13, 1, 15, 14, 9, 5, 10, 11, 2, 4, 0, 8], [4, 2, 8, 0, 5, 9, 11, 10, 1, 13, 14, 15, 7, 3, 12, 6], [9, 5, 10, 11, 2, 4, 0, 8, 3, 7, 6, 12, 13, 1, 15, 14], [13, 1, 15, 14, 3, 7, 6, 12, 2, 4, 0, 8, 9, 5, 10, 11], [6, 12, 3, 7, 15, 14, 13, 1, 10, 11, 9, 5, 0, 8, 2, 4], [11, 10, 5, 9, 8, 0, 4, 2, 12, 6, 7, 3, 14, 15, 1, 13], [15, 14, 13, 1, 6, 12, 3, 7, 0, 8, 2, 4, 10, 11, 9, 5], [0, 8, 2, 4, 10, 11, 9, 5, 15, 14, 13, 1, 6, 12, 3, 7]]], [[[11, 4, 9, 1, 3, 15, 12, 13, 7, 2, 10, 14, 5, 8, 6, 0], [9, 1, 11, 4, 12, 13, 3, 15, 10, 14, 7, 2, 6, 0, 5, 8], [14, 10, 2, 7, 0, 6, 8, 5, 1, 9, 4, 11, 13, 12, 15, 3], [12, 13, 3, 15, 9, 1, 11, 4, 6, 0, 5, 8, 10, 14, 7, 2], [6, 0, 5, 8, 10, 14, 7, 2, 12, 13, 3, 15, 9, 1, 11, 4], [8, 5, 0, 6, 2, 7, 14, 10, 15, 3, 13, 12, 4, 11, 1, 9], [4, 11, 1, 9, 15, 3, 13, 12, 2, 7, 14, 10, 8, 5, 0, 6], [13, 12, 15, 3, 1, 9, 4, 11, 0, 6, 8, 5, 14, 10, 2, 7], [3, 15, 12, 13, 11, 4, 9, 1, 5, 8, 6, 0, 7, 2, 10, 14], [7, 2, 10, 14, 5, 8, 6, 0, 11, 4, 9, 1, 3, 15, 12, 13], [15, 3, 13, 12, 4, 11, 1, 9, 8, 5, 0, 6, 2, 7, 14, 10], [0, 6, 8, 5, 14, 10, 2, 7, 13, 12, 15, 3, 1, 9, 4, 11], [1, 9, 4, 11, 13, 12, 15, 3, 14, 10, 2, 7, 0, 6, 8, 5], [10, 14, 7, 2, 6, 0, 5, 8, 9, 1, 11, 4, 12, 13, 3, 15], [2, 7, 14, 10, 8, 5, 0, 6, 4, 11, 1, 9, 15, 3, 13, 12], [5, 8, 6, 0, 7, 2, 10, 14, 3, 15, 12, 13, 11, 4, 9, 1]], [[12, 15, 4, 13, 8, 0, 1, 9, 10, 14, 7, 6, 3, 11, 5, 2], [15, 12, 13, 4, 0, 8, 9, 1, 14, 10, 6, 7, 11, 3, 2, 5], [7, 6, 10, 14, 5, 2, 3, 11, 4, 13, 12, 15, 1, 9, 8, 0], [1, 9, 8, 0, 4, 13, 12, 15, 5, 2, 3, 11, 7, 6, 10, 14], [3, 11, 5, 2, 10, 14, 7, 6, 8, 0, 1, 9, 12, 15, 4, 13], [6, 7, 14, 10, 2, 5, 11, 3, 13, 4, 15, 12, 9, 1, 0, 8], [9, 1, 0, 8, 13, 4, 15, 12, 2, 5, 11, 3, 6, 7, 14, 10], [2, 5, 11, 3, 6, 7, 14, 10, 9, 1, 0, 8, 13, 4, 15, 12], [10, 14, 7, 6, 3, 11, 5, 2, 12, 15, 4, 13, 8, 0, 1, 9], [11, 3, 2, 5, 14, 10, 6, 7, 0, 8, 9, 1, 15, 12, 13, 4], [8, 0, 1, 9, 12, 15, 4, 13, 3, 11, 5, 2, 10, 14, 7, 6], [4, 13, 12, 15, 1, 9, 8, 0, 7, 6, 10, 14, 5, 2, 3, 11], [14, 10, 6, 7, 11, 3, 2, 5, 15, 12, 13, 4, 0, 8, 9, 1], [0, 8, 9, 1, 15, 12, 13, 4, 11, 3, 2, 5, 14, 10, 6, 7], [5, 2, 3, 11, 7, 6, 10, 14, 1, 9, 8, 0, 4, 13, 12, 15], [13, 4, 15, 12, 9, 1, 0, 8, 6, 7, 14, 10, 2, 5, 11, 3]]], [[[15, 3, 0, 13, 2, 12, 4, 14, 7, 1, 8, 5, 10, 6, 9, 11], [3, 15, 13, 0, 12, 2, 14, 4, 1, 7, 5, 8, 6, 10, 11, 9], [11, 9, 6, 10, 5, 8, 1, 7, 14, 4, 12, 2, 13, 0, 3, 15], [10, 6, 9, 11, 7, 1, 8, 5, 2, 12, 4, 14, 15, 3, 0, 13], [4, 14, 2, 12, 0, 13, 15, 3, 9, 11, 10, 6, 8, 5, 7, 1], [7, 1, 8, 5, 10, 6, 9, 11, 15, 3, 0, 13, 2, 12, 4, 14], [8, 5, 7, 1, 9, 11, 10, 6, 0, 13, 15, 3, 4, 14, 2, 12], [6, 10, 11, 9, 1, 7, 5, 8, 12, 2, 14, 4, 3, 15, 13, 0], [5, 8, 1, 7, 11, 9, 6, 10, 13, 0, 3, 15, 14, 4, 12, 2], [0, 13, 15, 3, 4, 14, 2, 12, 8, 5, 7, 1, 9, 11, 10, 6], [1, 7, 5, 8, 6, 10, 11, 9, 3, 15, 13, 0, 12, 2, 14, 4], [12, 2, 14, 4, 3, 15, 13, 0, 6, 10, 11, 9, 1, 7, 5, 8], [2, 12, 4, 14, 15, 3, 0, 13, 10, 6, 9, 11, 7, 1, 8, 5], [9, 11, 10, 6, 8, 5, 7, 1, 4, 14, 2, 12, 0, 13, 15, 3], [14, 4, 12, 2, 13, 0, 3, 15, 11, 9, 6, 10, 5, 8, 1, 7], [13, 0, 3, 15, 14, 4, 12, 2, 5, 8, 1, 7, 11, 9, 6, 10]], [[7, 3, 13, 15, 6, 9, 8, 5, 0, 11, 4, 10, 12, 2, 14, 1], [12, 2, 14, 1, 0, 11, 4, 10, 6, 9, 8, 5, 7, 3, 13, 15], [13, 15, 7, 3, 8, 5, 6, 9, 4, 10, 0, 11, 14, 1, 12, 2], [10, 4, 11, 0, 1, 14, 2, 12, 15, 13, 3, 7, 5, 8, 9, 6], [6, 9, 8, 5, 7, 3, 13, 15, 12, 2, 14, 1, 0, 11, 4, 10], [15, 13, 3, 7, 5, 8, 9, 6, 10, 4, 11, 0, 1, 14, 2, 12], [14, 1, 12, 2, 4, 10, 0, 11, 8, 5, 6, 9, 13, 15, 7, 3], [4, 10, 0, 11, 14, 1, 12, 2, 13, 15, 7, 3, 8, 5, 6, 9], [2, 12, 1, 14, 11, 0, 10, 4, 9, 6, 5, 8, 3, 7, 15, 13], [0, 11, 4, 10, 12, 2, 14, 1, 7, 3, 13, 15, 6, 9, 8, 5], [1, 14, 2, 12, 10, 4, 11, 0, 5, 8, 9, 6, 15, 13, 3, 7], [3, 7, 15, 13, 9, 6, 5, 8, 11, 0, 10, 4, 2, 12, 1, 14], [11, 0, 10, 4, 2, 12, 1, 14, 3, 7, 15, 13, 9, 6, 5, 8], [9, 6, 5, 8, 3, 7, 15, 13, 2, 12, 1, 14, 11, 0, 10, 4], [5, 8, 9, 6, 15, 13, 3, 7, 1, 14, 2, 12, 10, 4, 11, 0], [8, 5, 6, 9, 13, 15, 7, 3, 14, 1, 12, 2, 4, 10, 0, 11]]], [[[14, 13, 5, 15, 6, 11, 3, 2, 10, 9, 8, 0, 1, 12, 7, 4], [15, 5, 13, 14, 2, 3, 11, 6, 0, 8, 9, 10, 4, 7, 12, 1], [4, 7, 12, 1, 0, 8, 9, 10, 2, 3, 11, 6, 15, 5, 13, 14], [10, 9, 8, 0, 1, 12, 7, 4, 14, 13, 5, 15, 6, 11, 3, 2], [2, 3, 11, 6, 15, 5, 13, 14, 4, 7, 12, 1, 0, 8, 9, 10], [8, 0, 10, 9, 7, 4, 1, 12, 5, 15, 14, 13, 3, 2, 6, 11], [6, 11, 3, 2, 14, 13, 5, 15, 1, 12, 7, 4, 10, 9, 8, 0], [9, 10, 0, 8, 12, 1, 4, 7, 13, 14, 15, 5, 11, 6, 2, 3], [7, 4, 1, 12, 8, 0, 10, 9, 3, 2, 6, 11, 5, 15, 14, 13], [13, 14, 15, 5, 11, 6, 2, 3, 9, 10, 0, 8, 12, 1, 4, 7], [3, 2, 6, 11, 5, 15, 14, 13, 7, 4, 1, 12, 8, 0, 10, 9], [11, 6, 2, 3, 13, 14, 15, 5, 12, 1, 4, 7, 9, 10, 0, 8], [5, 15, 14, 13, 3, 2, 6, 11, 8, 0, 10, 9, 7, 4, 1, 12], [1, 12, 7, 4, 10, 9, 8, 0, 6, 11, 3, 2, 14, 13, 5, 15], [12, 1, 4, 7, 9, 10, 0, 8, 11, 6, 2, 3, 13, 14, 15, 5], [0, 8, 9, 10, 4, 7, 12, 1, 15, 5, 13, 14, 2, 3, 11, 6]], [[3, 0, 1, 6, 15, 12, 9, 13, 14, 2, 10, 5, 4, 8, 11, 7], [13, 9, 12, 15, 6, 1, 0, 3, 7, 11, 8, 4, 5, 10, 2, 14], [8, 4, 7, 11, 2, 14, 5, 10, 12, 15, 13, 9, 0, 3, 6, 1], [12, 15, 13, 9, 0, 3, 6, 1, 8, 4, 7, 11, 2, 14, 5, 10], [2, 14, 5, 10, 8, 4, 7, 11, 0, 3, 6, 1, 12, 15, 13, 9], [4, 8, 11, 7, 14, 2, 10, 5, 15, 12, 9, 13, 3, 0, 1, 6], [10, 5, 14, 2, 11, 7, 4, 8, 1, 6, 3, 0, 9, 13, 15, 12], [1, 6, 3, 0, 9, 13, 15, 12, 10, 5, 14, 2, 11, 7, 4, 8], [5, 10, 2, 14, 7, 11, 8, 4, 6, 1, 0, 3, 13, 9, 12, 15], [11, 7, 4, 8, 10, 5, 14, 2, 9, 13, 15, 12, 1, 6, 3, 0], [14, 2, 10, 5, 4, 8, 11, 7, 3, 0, 1, 6, 15, 12, 9, 13], [9, 13, 15, 12, 1, 6, 3, 0, 11, 7, 4, 8, 10, 5, 14, 2], [15, 12, 9, 13, 3, 0, 1, 6, 4, 8, 11, 7, 14, 2, 10, 5], [6, 1, 0, 3, 13, 9, 12, 15, 5, 10, 2, 14, 7, 11, 8, 4], [0, 3, 6, 1, 12, 15, 13, 9, 2, 14, 5, 10, 8, 4, 7, 11], [7, 11, 8, 4, 5, 10, 2, 14, 13, 9, 12, 15, 6, 1, 0, 3]]], [[[14, 7, 15, 9, 5, 0, 12, 8, 2, 4, 10, 3, 11, 13, 1, 6], [15, 9, 14, 7, 12, 8, 5, 0, 10, 3, 2, 4, 1, 6, 11, 13], [7, 14, 9, 15, 0, 5, 8, 12, 4, 2, 3, 10, 13, 11, 6, 1], [11, 13, 1, 6, 2, 4, 10, 3, 5, 0, 12, 8, 14, 7, 15, 9], [8, 12, 0, 5, 9, 15, 7, 14, 6, 1, 13, 11, 3, 10, 4, 2], [1, 6, 11, 13, 10, 3, 2, 4, 12, 8, 5, 0, 15, 9, 14, 7], [13, 11, 6, 1, 4, 2, 3, 10, 0, 5, 8, 12, 7, 14, 9, 15], [2, 4, 10, 3, 11, 13, 1, 6, 14, 7, 15, 9, 5, 0, 12, 8], [3, 10, 4, 2, 6, 1, 13, 11, 9, 15, 7, 14, 8, 12, 0, 5], [4, 2, 3, 10, 13, 11, 6, 1, 7, 14, 9, 15, 0, 5, 8, 12], [12, 8, 5, 0, 15, 9, 14, 7, 1, 6, 11, 13, 10, 3, 2, 4], [0, 5, 8, 12, 7, 14, 9, 15, 13, 11, 6, 1, 4, 2, 3, 10], [6, 1, 13, 11, 3, 10, 4, 2, 8, 12, 0, 5, 9, 15, 7, 14], [9, 15, 7, 14, 8, 12, 0, 5, 3, 10, 4, 2, 6, 1, 13, 11], [10, 3, 2, 4, 1, 6, 11, 13, 15, 9, 14, 7, 12, 8, 5, 0], [5, 0, 12, 8, 14, 7, 15, 9, 11, 13, 1, 6, 2, 4, 10, 3]], [[1, 3, 13, 8, 15, 10, 2, 0, 14, 12, 5, 11, 4, 6, 7, 9], [14, 12, 5, 11, 4, 6, 7, 9, 1, 3, 13, 8, 15, 10, 2, 0], [9, 7, 6, 4, 11, 5, 12, 14, 0, 2, 10, 15, 8, 13, 3, 1], [4, 6, 7, 9, 14, 12, 5, 11, 15, 10, 2, 0, 1, 3, 13, 8], [6, 4, 9, 7, 12, 14, 11, 5, 10, 15, 0, 2, 3, 1, 8, 13], [2, 0, 15, 10, 13, 8, 1, 3, 7, 9, 4, 6, 5, 11, 14, 12], [13, 8, 1, 3, 2, 0, 15, 10, 5, 11, 14, 12, 7, 9, 4, 6], [3, 1, 8, 13, 10, 15, 0, 2, 12, 14, 11, 5, 6, 4, 9, 7], [12, 14, 11, 5, 6, 4, 9, 7, 3, 1, 8, 13, 10, 15, 0, 2], [11, 5, 12, 14, 9, 7, 6, 4, 8, 13, 3, 1, 0, 2, 10, 15], [7, 9, 4, 6, 5, 11, 14, 12, 2, 0, 15, 10, 13, 8, 1, 3], [15, 10, 2, 0, 1, 3, 13, 8, 4, 6, 7, 9, 14, 12, 5, 11], [10, 15, 0, 2, 3, 1, 8, 13, 6, 4, 9, 7, 12, 14, 11, 5], [0, 2, 10, 15, 8, 13, 3, 1, 9, 7, 6, 4, 11, 5, 12, 14], [5, 11, 14, 12, 7, 9, 4, 6, 13, 8, 1, 3, 2, 0, 15, 10], [8, 13, 3, 1, 0, 2, 10, 15, 11, 5, 12, 14, 9, 7, 6, 4]]], [[[3, 12, 14, 10, 4, 8, 6, 7, 0, 1, 15, 9, 5, 11, 2, 13], [12, 3, 10, 14, 8, 4, 7, 6, 1, 0, 9, 15, 11, 5, 13, 2], [11, 5, 13, 2, 1, 0, 9, 15, 8, 4, 7, 6, 12, 3, 10, 14], [7, 6, 8, 4, 10, 14, 12, 3, 13, 2, 11, 5, 9, 15, 1, 0], [5, 11, 2, 13, 0, 1, 15, 9, 4, 8, 6, 7, 3, 12, 14, 10], [13, 2, 11, 5, 9, 15, 1, 0, 7, 6, 8, 4, 10, 14, 12, 3], [1, 0, 9, 15, 11, 5, 13, 2, 12, 3, 10, 14, 8, 4, 7, 6], [4, 8, 6, 7, 3, 12, 14, 10, 5, 11, 2, 13, 0, 1, 15, 9], [6, 7, 4, 8, 14, 10, 3, 12, 2, 13, 5, 11, 15, 9, 0, 1], [10, 14, 12, 3, 7, 6, 8, 4, 9, 15, 1, 0, 13, 2, 11, 5], [0, 1, 15, 9, 5, 11, 2, 13, 3, 12, 14, 10, 4, 8, 6, 7], [9, 15, 1, 0, 13, 2, 11, 5, 10, 14, 12, 3, 7, 6, 8, 4], [8, 4, 7, 6, 12, 3, 10, 14, 11, 5, 13, 2, 1, 0, 9, 15], [15, 9, 0, 1, 2, 13, 5, 11, 14, 10, 3, 12, 6, 7, 4, 8], [2, 13, 5, 11, 15, 9, 0, 1, 6, 7, 4, 8, 14, 10, 3, 12], [14, 10, 3, 12, 6, 7, 4, 8, 15, 9, 0, 1, 2, 13, 5, 11]], [[11, 12, 1, 4, 2, 14, 15, 10, 6, 5, 9, 0, 3, 7, 8, 13], [12, 11, 4, 1, 14, 2, 10, 15, 5, 6, 0, 9, 7, 3, 13, 8], [10, 15, 14, 2, 4, 1, 12, 11, 13, 8, 7, 3, 0, 9, 5, 6], [2, 14, 15, 10, 11, 12, 1, 4, 3, 7, 8, 13, 6, 5, 9, 0], [5, 6, 0, 9, 7, 3, 13, 8, 12, 11, 4, 1, 14, 2, 10, 15], [0, 9, 5, 6, 13, 8, 7, 3, 4, 1, 12, 11, 10, 15, 14, 2], [4, 1, 12, 11, 10, 15, 14, 2, 0, 9, 5, 6, 13, 8, 7, 3], [9, 0, 6, 5, 8, 13, 3, 7, 1, 4, 11, 12, 15, 10, 2, 14], [15, 10, 2, 14, 1, 4, 11, 12, 8, 13, 3, 7, 9, 0, 6, 5], [6, 5, 9, 0, 3, 7, 8, 13, 11, 12, 1, 4, 2, 14, 15, 10], [13, 8, 7, 3, 0, 9, 5, 6, 10, 15, 14, 2, 4, 1, 12, 11], [1, 4, 11, 12, 15, 10, 2, 14, 9, 0, 6, 5, 8, 13, 3, 7], [7, 3, 13, 8, 5, 6, 0, 9, 14, 2, 10, 15, 12, 11, 4, 1], [8, 13, 3, 7, 9, 0, 6, 5, 15, 10, 2, 14, 1, 4, 11, 12], [14, 2, 10, 15, 12, 11, 4, 1, 7, 3, 13, 8, 5, 6, 0, 9], [3, 7, 8, 13, 6, 5, 9, 0, 2, 14, 15, 10, 11, 12, 1, 4]]]],
tableB: [
[99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118],
[202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192],
[183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21],
[4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117],
[9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132],
[83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207],
[208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168],
[81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210],
[205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115],
[96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219],
[224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121],
[231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8],
[186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138],
[112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158],
[225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223],
[140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22],
],
tableC: [
[0, 0, 0, 0, 0, 0], [2, 3, 9, 11, 13, 14], [4, 6, 18, 22, 26, 28], [6, 5, 27, 29, 23, 18],
[8, 12, 36, 44, 52, 56], [10, 15, 45, 39, 57, 54], [12, 10, 54, 58, 46, 36], [14, 9, 63, 49, 35, 42],
[16, 24, 72, 88, 104, 112], [18, 27, 65, 83, 101, 126], [20, 30, 90, 78, 114, 108], [22, 29, 83, 69, 127, 98],
[24, 20, 108, 116, 92, 72], [26, 23, 101, 127, 81, 70], [28, 18, 126, 98, 70, 84], [30, 17, 119, 105, 75, 90],
[32, 48, 144, 176, 208, 224], [34, 51, 153, 187, 221, 238], [36, 54, 130, 166, 202, 252], [38, 53, 139, 173, 199, 242],
[40, 60, 180, 156, 228, 216], [42, 63, 189, 151, 233, 214], [44, 58, 166, 138, 254, 196], [46, 57, 175, 129, 243, 202],
[48, 40, 216, 232, 184, 144], [50, 43, 209, 227, 181, 158], [52, 46, 202, 254, 162, 140], [54, 45, 195, 245, 175, 130],
[56, 36, 252, 196, 140, 168], [58, 39, 245, 207, 129, 166], [60, 34, 238, 210, 150, 180], [62, 33, 231, 217, 155, 186],
[64, 96, 59, 123, 187, 219], [66, 99, 50, 112, 182, 213], [68, 102, 41, 109, 161, 199], [70, 101, 32, 102, 172, 201],
[72, 108, 31, 87, 143, 227], [74, 111, 22, 92, 130, 237], [76, 106, 13, 65, 149, 255], [78, 105, 4, 74, 152, 241],
[80, 120, 115, 35, 211, 171], [82, 123, 122, 40, 222, 165], [84, 126, 97, 53, 201, 183], [86, 125, 104, 62, 196, 185],
[88, 116, 87, 15, 231, 147], [90, 119, 94, 4, 234, 157], [92, 114, 69, 25, 253, 143], [94, 113, 76, 18, 240, 129],
[96, 80, 171, 203, 107, 59], [98, 83, 162, 192, 102, 53], [100, 86, 185, 221, 113, 39], [102, 85, 176, 214, 124, 41],
[104, 92, 143, 231, 95, 3], [106, 95, 134, 236, 82, 13], [108, 90, 157, 241, 69, 31], [110, 89, 148, 250, 72, 17],
[112, 72, 227, 147, 3, 75], [114, 75, 234, 152, 14, 69], [116, 78, 241, 133, 25, 87], [118, 77, 248, 142, 20, 89],
[120, 68, 199, 191, 55, 115], [122, 71, 206, 180, 58, 125], [124, 66, 213, 169, 45, 111], [126, 65, 220, 162, 32, 97],
[128, 192, 118, 246, 109, 173], [130, 195, 127, 253, 96, 163], [132, 198, 100, 224, 119, 177], [134, 197, 109, 235, 122, 191],
[136, 204, 82, 218, 89, 149], [138, 207, 91, 209, 84, 155], [140, 202, 64, 204, 67, 137], [142, 201, 73, 199, 78, 135],
[144, 216, 62, 174, 5, 221], [146, 219, 55, 165, 8, 211], [148, 222, 44, 184, 31, 193], [150, 221, 37, 179, 18, 207],
[152, 212, 26, 130, 49, 229], [154, 215, 19, 137, 60, 235], [156, 210, 8, 148, 43, 249], [158, 209, 1, 159, 38, 247],
[160, 240, 230, 70, 189, 77], [162, 243, 239, 77, 176, 67], [164, 246, 244, 80, 167, 81], [166, 245, 253, 91, 170, 95],
[168, 252, 194, 106, 137, 117], [170, 255, 203, 97, 132, 123], [172, 250, 208, 124, 147, 105], [174, 249, 217, 119, 158, 103],
[176, 232, 174, 30, 213, 61], [178, 235, 167, 21, 216, 51], [180, 238, 188, 8, 207, 33], [182, 237, 181, 3, 194, 47],
[184, 228, 138, 50, 225, 5], [186, 231, 131, 57, 236, 11], [188, 226, 152, 36, 251, 25], [190, 225, 145, 47, 246, 23],
[192, 160, 77, 141, 214, 118], [194, 163, 68, 134, 219, 120], [196, 166, 95, 155, 204, 106], [198, 165, 86, 144, 193, 100],
[200, 172, 105, 161, 226, 78], [202, 175, 96, 170, 239, 64], [204, 170, 123, 183, 248, 82], [206, 169, 114, 188, 245, 92],
[208, 184, 5, 213, 190, 6], [210, 187, 12, 222, 179, 8], [212, 190, 23, 195, 164, 26], [214, 189, 30, 200, 169, 20],
[216, 180, 33, 249, 138, 62], [218, 183, 40, 242, 135, 48], [220, 178, 51, 239, 144, 34], [222, 177, 58, 228, 157, 44],
[224, 144, 221, 61, 6, 150], [226, 147, 212, 54, 11, 152], [228, 150, 207, 43, 28, 138], [230, 149, 198, 32, 17, 132],
[232, 156, 249, 17, 50, 174], [234, 159, 240, 26, 63, 160], [236, 154, 235, 7, 40, 178], [238, 153, 226, 12, 37, 188],
[240, 136, 149, 101, 110, 230], [242, 139, 156, 110, 99, 232], [244, 142, 135, 115, 116, 250], [246, 141, 142, 120, 121, 244],
[248, 132, 177, 73, 90, 222], [250, 135, 184, 66, 87, 208], [252, 130, 163, 95, 64, 194], [254, 129, 170, 84, 77, 204],
[27, 155, 236, 247, 218, 65], [25, 152, 229, 252, 215, 79], [31, 157, 254, 225, 192, 93], [29, 158, 247, 234, 205, 83],
[19, 151, 200, 219, 238, 121], [17, 148, 193, 208, 227, 119], [23, 145, 218, 205, 244, 101], [21, 146, 211, 198, 249, 107],
[11, 131, 164, 175, 178, 49], [9, 128, 173, 164, 191, 63], [15, 133, 182, 185, 168, 45], [13, 134, 191, 178, 165, 35],
[3, 143, 128, 131, 134, 9], [1, 140, 137, 136, 139, 7], [7, 137, 146, 149, 156, 21], [5, 138, 155, 158, 145, 27],
[59, 171, 124, 71, 10, 161], [57, 168, 117, 76, 7, 175], [63, 173, 110, 81, 16, 189], [61, 174, 103, 90, 29, 179],
[51, 167, 88, 107, 62, 153], [49, 164, 81, 96, 51, 151], [55, 161, 74, 125, 36, 133], [53, 162, 67, 118, 41, 139],
[43, 179, 52, 31, 98, 209], [41, 176, 61, 20, 111, 223], [47, 181, 38, 9, 120, 205], [45, 182, 47, 2, 117, 195],
[35, 191, 16, 51, 86, 233], [33, 188, 25, 56, 91, 231], [39, 185, 2, 37, 76, 245], [37, 186, 11, 46, 65, 251],
[91, 251, 215, 140, 97, 154], [89, 248, 222, 135, 108, 148], [95, 253, 197, 154, 123, 134], [93, 254, 204, 145, 118, 136],
[83, 247, 243, 160, 85, 162], [81, 244, 250, 171, 88, 172], [87, 241, 225, 182, 79, 190], [85, 242, 232, 189, 66, 176],
[75, 227, 159, 212, 9, 234], [73, 224, 150, 223, 4, 228], [79, 229, 141, 194, 19, 246], [77, 230, 132, 201, 30, 248],
[67, 239, 187, 248, 61, 210], [65, 236, 178, 243, 48, 220], [71, 233, 169, 238, 39, 206], [69, 234, 160, 229, 42, 192],
[123, 203, 71, 60, 177, 122], [121, 200, 78, 55, 188, 116], [127, 205, 85, 42, 171, 102], [125, 206, 92, 33, 166, 104],
[115, 199, 99, 16, 133, 66], [113, 196, 106, 27, 136, 76], [119, 193, 113, 6, 159, 94], [117, 194, 120, 13, 146, 80],
[107, 211, 15, 100, 217, 10], [105, 208, 6, 111, 212, 4], [111, 213, 29, 114, 195, 22], [109, 214, 20, 121, 206, 24],
[99, 223, 43, 72, 237, 50], [97, 220, 34, 67, 224, 60], [103, 217, 57, 94, 247, 46], [101, 218, 48, 85, 250, 32],
[155, 91, 154, 1, 183, 236], [153, 88, 147, 10, 186, 226], [159, 93, 136, 23, 173, 240], [157, 94, 129, 28, 160, 254],
[147, 87, 190, 45, 131, 212], [145, 84, 183, 38, 142, 218], [151, 81, 172, 59, 153, 200], [149, 82, 165, 48, 148, 198],
[139, 67, 210, 89, 223, 156], [137, 64, 219, 82, 210, 146], [143, 69, 192, 79, 197, 128], [141, 70, 201, 68, 200, 142],
[131, 79, 246, 117, 235, 164], [129, 76, 255, 126, 230, 170], [135, 73, 228, 99, 241, 184], [133, 74, 237, 104, 252, 182],
[187, 107, 10, 177, 103, 12], [185, 104, 3, 186, 106, 2], [191, 109, 24, 167, 125, 16], [189, 110, 17, 172, 112, 30],
[179, 103, 46, 157, 83, 52], [177, 100, 39, 150, 94, 58], [183, 97, 60, 139, 73, 40], [181, 98, 53, 128, 68, 38],
[171, 115, 66, 233, 15, 124], [169, 112, 75, 226, 2, 114], [175, 117, 80, 255, 21, 96], [173, 118, 89, 244, 24, 110],
[163, 127, 102, 197, 59, 68], [161, 124, 111, 206, 54, 74], [167, 121, 116, 211, 33, 88], [165, 122, 125, 216, 44, 86],
[219, 59, 161, 122, 12, 55], [217, 56, 168, 113, 1, 57], [223, 61, 179, 108, 22, 43], [221, 62, 186, 103, 27, 37],
[211, 55, 133, 86, 56, 15], [209, 52, 140, 93, 53, 1], [215, 49, 151, 64, 34, 19], [213, 50, 158, 75, 47, 29],
[203, 35, 233, 34, 100, 71], [201, 32, 224, 41, 105, 73], [207, 37, 251, 52, 126, 91], [205, 38, 242, 63, 115, 85],
[195, 47, 205, 14, 80, 127], [193, 44, 196, 5, 93, 113], [199, 41, 223, 24, 74, 99], [197, 42, 214, 19, 71, 109],
[251, 11, 49, 202, 220, 215], [249, 8, 56, 193, 209, 217], [255, 13, 35, 220, 198, 203], [253, 14, 42, 215, 203, 197],
[243, 7, 21, 230, 232, 239], [241, 4, 28, 237, 229, 225], [247, 1, 7, 240, 242, 243], [245, 2, 14, 251, 255, 253],
[235, 19, 121, 146, 180, 167], [233, 16, 112, 153, 185, 169], [239, 21, 107, 132, 174, 187], [237, 22, 98, 143, 163, 181],
[227, 31, 93, 190, 128, 159], [225, 28, 84, 181, 141, 145], [231, 25, 79, 168, 154, 131], [229, 26, 70, 163, 151, 141],
],
tableD: Uint8Array.from([0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11]),
tableE: Uint8Array.from([76, 194, 211, 188, 170, 232, 82, 177, 242, 178, 245, 7, 58, 71, 250, 180]),
tableF: Uint32Array.from([16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 452984832, 905969664, 1811939328, 3623878656, 2868903936, 1291845632, 2583691264])
};
class state {
constructor(a, b, c, d) {
this.state = a;
this.orgState = b;
this.nr = c;
this.p = d;
}
init(a, b, c, d) {
this.nr = d;
this.p = 0;
initState(this, a, b, c);
}
encrypt(data) {
let bp = 0;
let dataLen = data.length & 0xffffffff;
while (dataLen > 0) {
if (this.p === 0) {
refreshState(this);
}
let sb = Buffer.allocUnsafe(64);
this.state.forEach((v, i) => {
sb.writeUint32LE(v, i * 4);
});
while (this.p != 64 && dataLen != 0) {
data[bp] ^= sb[this.p];
this.p++;
bp++;
dataLen--;
}
if (this.p >= 64) {
this.p = 0;
this.orgState[12]++;
this.state = this.orgState;
}
}
}
}
exports.state = state;
function sub_a(a, b) {
let byteB = toBytes(b);
let seq = [3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12];
seq.forEach((v, i) => {
a[i] = a[i] ^ byteB[seq[i]];
});
}
function sub_b(a, b) {
let byteB = toBytes(b);
let seq = [3, 6, 9, 12, 7, 10, 13, 0, 11, 14, 1, 4, 15, 2, 5, 8];
seq.forEach((v, i) => {
a[i] = a[i] ^ byteB[seq[i]];
});
}
function sub_c(a, b) {
for (let i = 0; i < 16; i++) {
let t = b[i];
t = t & 0xffffffff;
t = (t & 15) + ((t >>> 4) << 4);
b[i] = a[Math.floor(t / 16)][t % 16];
}
}
function sub_d(a, b) {
let tb = [...b];
a.forEach((v, i) => {
b[i] = tb[v];
});
}
function sub_e(DI, p) {
for (let i = 4; i > 0; i--) {
let [a, b, c, d] = [p[4 * i - 4], p[4 * i - 3], p[4 * i - 2], p[4 * i - 1]];
p[4 * i - 4] = (c ^ d) ^ (DI[a][0] ^ DI[b][1]);
p[4 * i - 3] = (a ^ d) ^ (DI[b][0] ^ DI[c][1]);
p[4 * i - 2] = (a ^ b) ^ (DI[d][1] ^ DI[c][0]);
p[4 * i - 1] = (b ^ c) ^ (DI[a][1] ^ DI[d][0]);
}
}
function sub_ab(a, b) {
let ia = ((b >>> 28) << 4) + ((b >>> 24) & 15);
let AX = a[Math.floor(ia / 16)][ia % 16] & 0xffffffff;
let ib = b & 0xff;
let BX = a[Math.floor(ib / 16)][ib % 16] & 0xffffffff;
let ic = ((b >>> 8) & 15) + ((b >>> 8) & 240);
let CX = a[Math.floor(ic / 16)][ic % 16] & 0xffffffff;
let id = ((b >>> 16) & 15) + ((b >>> 16) & 240);
let DX = a[Math.floor(id / 16)][id % 16] & 0xffffffff;
return (AX << 24) | BX | (CX << 8) | (DX << 16);
}
function sub_f(a, b, c) {
let w = new Uint32Array(44);
w[0] = (a[0] & 0xffffffff) << 24 | (a[1] & 0xffffffff) << 16 | (a[2] & 0xffffffff) << 8 | (a[3] & 0xffffffff);
w[1] = (a[4] & 0xffffffff) << 24 | (a[5] & 0xffffffff) << 16 | (a[6] & 0xffffffff) << 8 | (a[7] & 0xffffffff);
w[2] = (a[8] & 0xffffffff) << 24 | (a[9] & 0xffffffff) << 16 | (a[10] & 0xffffffff) << 8 | (a[11] & 0xffffffff);
w[3] = (a[12] & 0xffffffff) << 24 | (a[13] & 0xffffffff) << 16 | (a[14] & 0xffffffff) << 8 | (a[15] & 0xffffffff);
let ax;
for (let bx = 4; bx < 44; bx++) {
ax = w[bx - 1] >>> 0;
if (bx % 4 == 0) {
ax = (ax << 8) | ((ax >>> 24) & 0xff);
ax = sub_ab(c, ax);
let dx = bx - 1;
dx = dx >>> 2;
ax = ax ^ b[dx];
}
ax = ax ^ w[bx - 4];
w[bx] = ax;
}
return w;
}
function sub_aa(a, b, c, d) {
let dx = ((a & 15) << 9) + ((d[a] & 15) << 4);
let di = (c[a & 15] >>> 4) & 15;
let ax = (((d[a] >>> 4) & 15) << 4) + ((a & 15) << 9) + di;
let res = b[Math.floor(ax / 512)][Math.floor(ax % 512 / 256)][Math.floor(ax % 512 % 256 / 16)][ax % 512 % 256 % 16 % 16];
res = res << 4;
dx = dx + (c[a & 15] & 15) + 256;
res = res | b[Math.floor(dx / 512)][Math.floor(dx % 512 / 256)][Math.floor(dx % 512 % 256 / 16)][dx % 512 % 256 % 16 % 16];
return res;
}
function transformInner(a, b) {
let si = 0;
for (let cnt = 1; cnt < 43;) {
let ai = (((cnt - 1) & 31) << 4) + (a[si] >>> 4);
let bi = ((cnt & 31) << 4) + (a[si] & 15);
a[si] = (b[Math.floor(ai / 16)][ai % 16] << 4) | b[Math.floor(bi / 16)][bi % 16];
si++;
cnt = cnt + 2;
}
}
function initState(