UNPKG

highwayhasher

Version:

HighwayHash implementation for both node and browsers

467 lines (403 loc) 35 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.highwayhasher = {})); })(this, (function (exports) { 'use strict'; function validKey(key) { if (key && key.length != 32) { throw new Error("expected the key buffer to be 32 bytes long"); } return key || new Uint8Array(); } let wasm$2; /** * @param {number} key_data_ptr * @param {number} key_len * @param {number} idx * @returns {number} */ function new_hasher$1(key_data_ptr, key_len, idx) { const ret = wasm$2.new_hasher(key_data_ptr, key_len, idx); return ret; } /** * @param {number} data_ptr * @param {number} data_len * @param {number} idx */ function append$1(data_ptr, data_len, idx) { wasm$2.append(data_ptr, data_len, idx); } /** * @param {number} data_ptr * @param {number} idx */ function finalize64$1(data_ptr, idx) { wasm$2.finalize64(data_ptr, idx); } /** * @param {number} data_ptr * @param {number} idx */ function finalize128$1(data_ptr, idx) { wasm$2.finalize128(data_ptr, idx); } /** * @param {number} data_ptr * @param {number} idx */ function finalize256$1(data_ptr, idx) { wasm$2.finalize256(data_ptr, idx); } async function __wbg_load$1(module, imports) { if (typeof Response === 'function' && module instanceof Response) { if (typeof WebAssembly.instantiateStreaming === 'function') { try { return await WebAssembly.instantiateStreaming(module, imports); } catch (e) { if (module.headers.get('Content-Type') != 'application/wasm') { console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); } else { throw e; } } } const bytes = await module.arrayBuffer(); return await WebAssembly.instantiate(bytes, imports); } else { const instance = await WebAssembly.instantiate(module, imports); if (instance instanceof WebAssembly.Instance) { return { instance, module }; } else { return instance; } } } function __wbg_get_imports$1() { const imports = {}; imports.wbg = {}; return imports; } function __wbg_finalize_init$1(instance, module) { wasm$2 = instance.exports; __wbg_init$1.__wbindgen_wasm_module = module; return wasm$2; } async function __wbg_init$1(input) { if (wasm$2 !== undefined) return wasm$2; if (typeof input === 'undefined') { input = new URL('highwayhasher_wasm_bg.wasm', ""); } const imports = __wbg_get_imports$1(); if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { input = fetch(input); } const { instance, module } = await __wbg_load$1(await input, imports); return __wbg_finalize_init$1(instance, module); } let wasm$1; /** * @param {number} key_data_ptr * @param {number} key_len * @param {number} idx * @returns {number} */ function new_hasher(key_data_ptr, key_len, idx) { const ret = wasm$1.new_hasher(key_data_ptr, key_len, idx); return ret; } /** * @param {number} data_ptr * @param {number} data_len * @param {number} idx */ function append(data_ptr, data_len, idx) { wasm$1.append(data_ptr, data_len, idx); } /** * @param {number} data_ptr * @param {number} idx */ function finalize64(data_ptr, idx) { wasm$1.finalize64(data_ptr, idx); } /** * @param {number} data_ptr * @param {number} idx */ function finalize128(data_ptr, idx) { wasm$1.finalize128(data_ptr, idx); } /** * @param {number} data_ptr * @param {number} idx */ function finalize256(data_ptr, idx) { wasm$1.finalize256(data_ptr, idx); } async function __wbg_load(module, imports) { if (typeof Response === 'function' && module instanceof Response) { if (typeof WebAssembly.instantiateStreaming === 'function') { try { return await WebAssembly.instantiateStreaming(module, imports); } catch (e) { if (module.headers.get('Content-Type') != 'application/wasm') { console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); } else { throw e; } } } const bytes = await module.arrayBuffer(); return await WebAssembly.instantiate(bytes, imports); } else { const instance = await WebAssembly.instantiate(module, imports); if (instance instanceof WebAssembly.Instance) { return { instance, module }; } else { return instance; } } } function __wbg_get_imports() { const imports = {}; imports.wbg = {}; return imports; } function __wbg_finalize_init(instance, module) { wasm$1 = instance.exports; __wbg_init.__wbindgen_wasm_module = module; return wasm$1; } async function __wbg_init(input) { if (wasm$1 !== undefined) return wasm$1; if (typeof input === 'undefined') { input = new URL('highwayhasher_wasm_simd_bg.wasm', ""); } const imports = __wbg_get_imports(); if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { input = fetch(input); } const { instance, module } = await __wbg_load(await input, imports); return __wbg_finalize_init(instance, module); } let wasmInit = undefined; const setWasmInit = (arg) => { wasmInit = arg; }; let wasmSimdInit = undefined; const setWasmSimdInit = (arg) => { wasmSimdInit = arg; }; const isWasmInput = (x) => x === undefined || (typeof x === "object" && "simd" in x); /** * A Highway hasher implemented in Web assembly. */ class WasmHighwayHash { static async loadModule(options) { var _a, _b, _c; if (isWasmInput(options === null || options === void 0 ? void 0 : options.wasm)) { const useSimd = (_a = options === null || options === void 0 ? void 0 : options.simd) !== null && _a !== void 0 ? _a : hasSimd(); if (!useSimd) { return await loadWasm((_b = options === null || options === void 0 ? void 0 : options.wasm) === null || _b === void 0 ? void 0 : _b.sisd); } else { return await loadWasmSimd((_c = options === null || options === void 0 ? void 0 : options.wasm) === null || _c === void 0 ? void 0 : _c.simd); } } else { return await loadWasm(options === null || options === void 0 ? void 0 : options.wasm); } } static async load(key, options) { const module = await WasmHighwayHash.loadModule(options); return module.create(key); } static resetModule() { sisdMemory = undefined; simdMemory = undefined; } } const PAGE_SIZE = 65536; class Allocator { constructor(memory, offset) { this.memory = memory; this.offset = offset; this.slots = []; this.resultBufferOffset = this.appendBufferOffset; this.keyBufferOffset = this.resultBufferOffset; } newAllocation() { for (let i = 0; i < this.slots.length; i++) { if (this.slots[i] === false) { this.slots[i] = true; return i; } } const result = this.slots.length; this.slots.push(true); return result; } returnSlot(slot) { this.slots[slot] = false; } appendBufferOffset() { return this.offset; } } function wasmHighway(alloc, hasher) { const WasmHash = class { constructor(key) { var _a; key = validKey(key); this.idx = alloc.newAllocation(); const offset = alloc.keyBufferOffset(); const keyDest = new Uint8Array(alloc.memory.buffer, offset); keyDest.set(key !== null && key !== void 0 ? key : new Uint8Array()); const hasherSlot = hasher.new_hasher(offset, (_a = key === null || key === void 0 ? void 0 : key.byteLength) !== null && _a !== void 0 ? _a : 0, this.idx); if (hasherSlot !== this.idx) { throw new Error("unable to allocate hasher in slot"); } } append(data) { while (data.length != 0) { const toWrite = Math.min(data.length, PAGE_SIZE); const source = data.subarray(0, toWrite); const dataOffset = alloc.appendBufferOffset(); new Uint8Array(alloc.memory.buffer, dataOffset, toWrite).set(source); hasher.append(dataOffset, toWrite, this.idx); data = data.subarray(toWrite); } } finalize64() { const resultOffset = alloc.resultBufferOffset(); hasher.finalize64(resultOffset, this.idx); const out = new Uint8Array(alloc.memory.buffer, resultOffset, 8); const result = new Uint8Array(8); result.set(out); alloc.returnSlot(this.idx); return result; } finalize128() { const resultOffset = alloc.resultBufferOffset(); hasher.finalize128(resultOffset, this.idx); const out = new Uint8Array(alloc.memory.buffer, resultOffset, 16); const result = new Uint8Array(16); result.set(out); alloc.returnSlot(this.idx); return result; } finalize256() { const resultOffset = alloc.resultBufferOffset(); hasher.finalize256(resultOffset, this.idx); const out = new Uint8Array(alloc.memory.buffer, resultOffset, 32); const result = new Uint8Array(32); result.set(out); alloc.returnSlot(this.idx); return result; } }; return { create: (key) => new WasmHash(key), hash64(key, data) { const hasher = new WasmHash(key); hasher.append(data); return hasher.finalize64(); }, hash128(key, data) { const hasher = new WasmHash(key); hasher.append(data); return hasher.finalize128(); }, hash256(key, data) { const hasher = new WasmHash(key); hasher.append(data); return hasher.finalize256(); }, }; } let sisdMemory; let simdMemory; const loadWasmSimd = async (module) => { if (simdMemory === undefined) { simdMemory = __wbg_init(module !== null && module !== void 0 ? module : wasmSimdInit === null || wasmSimdInit === void 0 ? void 0 : wasmSimdInit()).then((x) => { const prevLength = x.memory.grow(1); const alloc = new Allocator(x.memory, prevLength); return wasmHighway(alloc, { new_hasher: new_hasher, append: append, finalize64: finalize64, finalize128: finalize128, finalize256: finalize256, }); }); } return await simdMemory; }; const loadWasm = async (module) => { if (sisdMemory === undefined) { sisdMemory = __wbg_init$1(module !== null && module !== void 0 ? module : wasmInit === null || wasmInit === void 0 ? void 0 : wasmInit()).then((x) => { // grow by 1 page to hold key, results, and data hashing const prevLength = x.memory.grow(1); const alloc = new Allocator(x.memory, prevLength); return wasmHighway(alloc, { new_hasher: new_hasher$1, append: append$1, finalize64: finalize64$1, finalize128: finalize128$1, finalize256: finalize256$1, }); }); } return await sisdMemory; }; // Extracted from the compiled file of: // https://github.com/GoogleChromeLabs/wasm-feature-detect/blob/40269813c83f7e9ff370afc92cde3cc0456c557e/src/detectors/simd/module.wat // // Changes: // - Validation is cached so it needs to only run once // - There's no need to mark as async let simdEnabled; const hasSimd = () => simdEnabled !== null && simdEnabled !== void 0 ? simdEnabled : (simdEnabled = WebAssembly.validate(new Uint8Array([ 0, 97, 115, 109, 1, 0, 0, 0, 1, 5, 1, 96, 0, 1, 123, 3, 2, 1, 0, 10, 10, 1, 8, 0, 65, 0, 253, 15, 253, 98, 11, ]))); function _loadWasmModule (sync, filepath, src, imports) { function _instantiateOrCompile(source, imports, stream) { var instantiateFunc = stream ? WebAssembly.instantiateStreaming : WebAssembly.instantiate; var compileFunc = stream ? WebAssembly.compileStreaming : WebAssembly.compile; if (imports) { return instantiateFunc(source, imports) } else { return compileFunc(source) } } var buf = null; var isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null; if (isNode) { buf = Buffer.from(src, 'base64'); } else { var raw = globalThis.atob(src); var rawLength = raw.length; buf = new Uint8Array(new ArrayBuffer(rawLength)); for(var i = 0; i < rawLength; i++) { buf[i] = raw.charCodeAt(i); } } if(sync) { var mod = new WebAssembly.Module(buf); return imports ? new WebAssembly.Instance(mod, imports) : mod } else { return _instantiateOrCompile(buf, imports, false) } } function wasm(imports){return _loadWasmModule(0, null, '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8AFrIgQkACAEQUBrIgIgAUGwAWxBgIBAa0GwARAIGiAEQRhqIgVCADcDACAEQRBqIgZCADcDACAEQQhqIgdCADcDACAEQgA3AwAgBEEgaiEBIwBBIGsiAyQAIAJBoAFqKAIABEAgAhABCyADIAIpAwhCIIk3AxggAyACKQMAQiCJNwMQIAMgAikDGEIgiTcDCCADIAIpAxBCIIk3AwAgAiADEAAgAyACKQMIQiCJNwMYIAMgAikDAEIgiTcDECADIAIpAxhCIIk3AwggAyACKQMQQiCJNwMAIAIgAxAAIAMgAikDCEIgiTcDGCADIAIpAwBCIIk3AxAgAyACKQMYQiCJNwMIIAMgAikDEEIgiTcDACACIAMQACADIAIpAwhCIIk3AxggAyACKQMAQiCJNwMQIAMgAikDGEIgiTcDCCADIAIpAxBCIIk3AwAgAiADEAAgAyACKQMIQiCJNwMYIAMgAikDAEIgiTcDECADIAIpAxhCIIk3AwggAyACKQMQQiCJNwMAIAIgAxAAIAMgAikDCEIgiTcDGCADIAIpAwBCIIk3AxAgAyACKQMYQiCJNwMIIAMgAikDEEIgiTcDACACIAMQACADIAIpAwhCIIk3AxggAyACKQMAQiCJNwMQIAMgAikDGEIgiTcDCCADIAIpAxBCIIk3AwAgAiADEAAgAyACKQMIQiCJNwMYIAMgAikDAEIgiTcDECADIAIpAxhCIIk3AwggAyACKQMQQiCJNwMAIAIgAxAAIAMgAikDCEIgiTcDGCADIAIpAwBCIIk3AxAgAyACKQMYQiCJNwMIIAMgAikDEEIgiTcDACACIAMQACADIAIpAwhCIIk3AxggAyACKQMAQiCJNwMQIAMgAikDGEIgiTcDCCADIAIpAxBCIIk3AwAgAiADEAAgASACQdAAaikDACACKQMQfCACQfAAaikDACACQTBqKQMAfCIIQgKGIAhCAYaFhTcDECABIAIpA0AgAikDAHwgAikDYCACKQMgfCIJQgKGIAlCAYaFhTcDACABIAJB2ABqKQMAIAIpAxh8IAJB+ABqKQMAIAJBOGopAwB8IgpCAoYgCEI+iIQgCkL//////////z+DQgGGIAhCP4iEhYU3AxggASACQcgAaikDACACKQMIfCACQegAaikDACACQShqKQMAfCIKQgKGIAlCPoiEIApC//////////8/g0IBhiAJQj+IhIWFNwMIIANBIGokACAEQSAgAUEEEAYgAEEYaiAFKQMANwAAIABBEGogBikDADcAACAAQQhqIAcpAwA3AAAgACAEKQMANwAAIARB8AFqJAALrwQBBH8jAEHQAWsiBCQAIARBIGoiAiABQbABbEGAgEBrQbABEAgaIARBCGoiBUIANwMAIARCADcDACAEQRBqIQEjAEEgayIDJAAgAkGgAWooAgAEQCACEAELIAMgAikDCEIgiTcDGCADIAIpAwBCIIk3AxAgAyACKQMYQiCJNwMIIAMgAikDEEIgiTcDACACIAMQACADIAIpAwhCIIk3AxggAyACKQMAQiCJNwMQIAMgAikDGEIgiTcDCCADIAIpAxBCIIk3AwAgAiADEAAgAyACKQMIQiCJNwMYIAMgAikDAEIgiTcDECADIAIpAxhCIIk3AwggAyACKQMQQiCJNwMAIAIgAxAAIAMgAikDCEIgiTcDGCADIAIpAwBCIIk3AxAgAyACKQMYQiCJNwMIIAMgAikDEEIgiTcDACACIAMQACADIAIpAwhCIIk3AxggAyACKQMAQiCJNwMQIAMgAikDGEIgiTcDCCADIAIpAxBCIIk3AwAgAiADEAAgAyACKQMIQiCJNwMYIAMgAikDAEIgiTcDECADIAIpAxhCIIk3AwggAyACKQMQQiCJNwMAIAIgAxAAIAEgAkH4AGopAwAgAkE4aikDACACQcgAaikDACACKQMIfHx8NwMIIAEgAkHwAGopAwAgAkEwaikDACACKQNAIAIpAwB8fHw3AwAgA0EgaiQAIARBECABQQIQBiAAQQhqIAUpAwA3AAAgACAEKQMANwAAIARB0AFqJAAL3AICAX8EfiMAQbABayICJAAgACACIAFBsAFsQYCAQGtBsAEQCCEAIwBBIGsiASQAIABBoAFqKAIABEAgABABCyABIAApAwhCIIk3AxggASAAKQMAQiCJNwMQIAEgACkDGEIgiTcDCCABIAApAxBCIIk3AwAgACABEAAgASAAKQMIQiCJNwMYIAEgACkDAEIgiTcDECABIAApAxhCIIk3AwggASAAKQMQQiCJNwMAIAAgARAAIAEgACkDCEIgiTcDGCABIAApAwBCIIk3AxAgASAAKQMYQiCJNwMIIAEgACkDEEIgiTcDACAAIAEQACABIAApAwhCIIk3AxggASAAKQMAQiCJNwMQIAEgACkDGEIgiTcDCCABIAApAxBCIIk3AwAgACABEAAgACkDACEDIAApAyAhBCAAKQNAIQUgACkDYCABQSBqJAAgBSADIAR8fHw3AAAgAEGwAWokAAsiACADIAFBA3YiASABIANLGyIBBEAgACACIAFBA3QQCBoLC+oDAQh/IAAhBSMAQSBrIgMkACACQbABbEGAgEBrIgRBgAFqIQYCQCAEQaABaigCACIARQRAIAFBYHEiAgRAQQAgAmshByAFIQADQCADQRhqIABBGGopAAA3AwAgA0EQaiAAQRBqKQAANwMAIANBCGogAEEIaikAADcDACADIAApAAA3AwAgBCADEAAgAEEgaiEAIAdBIGoiBw0ACwsgBCABQR9xIgA2AqABIABFDQEgBiACIAVqIAAQCBoMAQtBgIDAACAAIAZqIABBIEsbIQJBAEEgIABrIgAgAEEgSxsiACABSwRAIAIgBSABEAgaIAQgBCgCoAEgAWo2AqABDAELIAIgBSAAEAgaIARBIDYCoAEgA0EYaiIIIAZBGGopAwA3AwAgA0EQaiIJIAZBEGopAwA3AwAgA0EIaiIKIAZBCGopAwA3AwAgAyAGKQMANwMAIAQgAxAAIAAgBWohAiABIABrIgBBH3EhASAAQWBxIgUEQEEAIAVrIQcgAiEAA0AgCCAAQRhqKQAANwMAIAkgAEEQaikAADcDACAKIABBCGopAAA3AwAgAyAAKQAANwMAIAQgAxAAIABBIGohACAHQSBqIgcNAAsLIAQgATYCoAEgAUUNACAGIAIgBWogARAIGgsgA0EgaiQAC7gCAQd/AkAgAiIEQRBJBEAgACECDAELIABBACAAa0EDcSIDaiEFIAMEQCAAIQIgASEGA0AgAiAGLQAAOgAAIAZBAWohBiACQQFqIgIgBUkNAAsLIAUgBCADayIIQXxxIgdqIQICQCABIANqIgNBA3EEQCAHQQBMDQEgA0EDdCIEQRhxIQkgA0F8cSIGQQRqIQFBACAEa0EYcSEEIAYoAgAhBgNAIAUgBiAJdiABKAIAIgYgBHRyNgIAIAFBBGohASAFQQRqIgUgAkkNAAsMAQsgB0EATA0AIAMhAQNAIAUgASgCADYCACABQQRqIQEgBUEEaiIFIAJJDQALCyAIQQNxIQQgAyAHaiEBCyAEBEAgAiAEaiEDA0AgAiABLQAAOgAAIAFBAWohASACQQFqIgIgA0kNAAsLIAALBQBB9AILAEcJcHJvZHVjZXJzAQxwcm9jZXNzZWQtYnkCBndhbHJ1cwYwLjIwLjMMd2FzbS1iaW5kZ2VuEjAuMi45MiAoMmE0YTQ5MzYyKQ==', imports)} function wasmSimd(imports){return _loadWasmModule(0, null, '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Tv3VASAR/VEhDyAK/Qz/////AAAAAP////8AAAAA/U4gF/0M/////wAAAAD/////AAAAAP0NBAUGBwABAgMMDQ4PAAECA/0M/////wAAAAD/////AAAAAP1O/dUBIBL9UQshDUEKIQEDQCALIBP9zgEiFf0M/////wAAAAD/////AAAAAP1OIBAgFP0M/////wAAAAD/////AAAAAP0NBAUGBwABAgMMDQ4PCAkKCyIK/c4BIA79zgEiEUEg/c0B/dUBIAv9USELIBH9DP////8AAAAA/////wAAAAD9TiATQSD9zQH91QEgDv1RIQ4gDCAT/Qz/////AAAAAP////8AAAAA/Q0EBQYHAAECAwwNDg8ICQoL/c4BIA/9zgEiEv0M/////wAAAAD/////AAAAAP1OIAr9DP////8AAAAA/////wAAAAD9Tv3VASAP/VEhDyARIBUgEf0M/////wAAAAD/////AAAAAP0NAwwCBQEOAA8LBAoNBgkHCP3OASIT/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIRAgEiANIBT9zgEiCiAS/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIhT9DP////8AAAAA/////wAAAAD9DQMMAgUBDgAPCwQKDQYJBwj9zgEhDCAK/Qz/////AAAAAP////8AAAAA/U4gEv0M/////wAAAAD/////AAAAAP0NBAUGBwABAgMMDQ4PAAECA/0M/////wAAAAD/////AAAAAP1O/dUBIA39USENIAFBAWsiAQ0ACyACIAv9CwRwIAIgDf0LBGAgAiAO/QsEUCACIA/9CwRAIAIgEP0LBDAgAiAM/QsEICACIBP9CwQQIAIgFP0LBAAgByALIBD9zgEiCkEC/csBIA4gE/3OAf1RIApBPv3NAf0MAAAAAAAAAAAAAAAAAAAAAP0NCAkKCwwNDg8QERITFBUWF/1RIApBAf3LAf0M/////////3////////////1O/VEgCv0NCAkKCwwNDg8AAQIDBAUGB/0MAAAAAAAAAAAAAAAAAAAAACAKQT/9zQH9DQABAgMEBQYHGBkaGxwdHh/9Uf0LAxAgByANIAz9zgEiCkEC/csBIA8gFP3OAf1RIApBPv3NAf0MAAAAAAAAAAAAAAAAAAAAAP0NCAkKCwwNDg8QERITFBUWF/1RIApBAf3LAf0M/////////3////////////1O/VEgCv0NCAkKCwwNDg8AAQIDBAUGB/0MAAAAAAAAAAAAAAAAAAAAACAKQT/9zQH9DQABAgMEBQYHGBkaGxwdHh/9Uf0LAwAgA0EgIAdBBBAEIABBEGogCf0AAwD9CwAAIAAgA/0AAwD9CwAAIANBgAJqJAAL8A0DB38PewF+IwBB4AFrIgQkACAEQSBqIgIgAUHAAWxBgIBAa0HAARAGGiAE/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAEQRBqIQcCeyACQaABaigCACIFRQRAIAL9AAQQIRIgAv0ABAAhEyAC/QAEcCEJIAL9AARQIRAgAv0ABEAhDCAC/QAEMCENIAL9AAQgIQogAv0ABGAMAQsgAkGAAWohBiAC/QAEMCELIAL9AAQgIQ4gAv0ABBAhFCAC/QAEACERAnsgBUEgIAVBIEkbIgNBEHFFBED9DAAAAAAAAAAAAAAAAAAAAAAgBikDACIY/R4B/QwAAAAAAAAAAAAAAAAAAAAAIANBB0siARshCSADQQRxBEAgAkGIAWooAgAgGKcgARv9Ef0M/////wAAAAAAAAAAAAAAAP0MAAAAAAAAAAD/////AAAAACABG/1OIAn9UCEJC/0MAAAAAAAAAAAAAAAAAAAAACADQQNxIghFDQEa/QwAAAAAAAAAAAAAAAAAAAAAIAYgA0E8cWoiASAIQQF2ajEAAEIIhiABMQAAhCABIAhqQQFrMQAAQhCGhP0eAQwBC/0MAAAAAAAAAAAAAAAAAAAAACACQYgBav0AAwAiD/0MAAAAAAAAAAAAAAAAAAAAAP0NEBESExQVFhcICQoLDA0ODyADQThxIgFBEEYbIQ0gBiAP/VcDAAEhCSADIAZqQQRrIANBBHEEeyAP/R0BpyACQZgBaigCACABQRBGIgEb/RH9DAAAAAAAAAAA/////wAAAAD9DP////8AAAAAAAAAAAAAAAAgARv9TiAN/VAFIA0L/VYAAAELIAtBICAFayIB/a0BIAsgBf2rAf1Q/c4BIAL9AARQIhf9zgEiFSAC/QAEcCIMIBQgBf0RIgr9zgEiEP3OASILIBUgCv0NAwwCBQEOAA8LBAoNBgkHCP3OASISIAr9DQMMAgUBDgAPCwQKDQYJBwj9zgEhDSAJIA4gAf2tASAOIAX9qwH9UP3OASAC/QAEQCIO/c4BIhYgAv0ABGAiDyARIAr9zgEiFP3OASIRIBYgCv0NAwwCBQEOAA8LBAoNBgkHCP3OASITIAr9DQMMAgUBDgAPCwQKDQYJBwj9zgEhCiAL/Qz/////AAAAAP////8AAAAA/U4gFUEg/c0B/dUBIAz9USEJIBX9DP////8AAAAA/////wAAAAD9TiAQQSD9zQH91QEgF/1RIRAgFv0M/////wAAAAD/////AAAAAP1OIBT9DP////8AAAAA/////wAAAAD9DQQFBgcAAQIDDA0ODwABAgP9DP////8AAAAA/////wAAAAD9Tv3VASAO/VEhDCAR/Qz/////AAAAAP////8AAAAA/U4gFv0M/////wAAAAD/////AAAAAP0NBAUGBwABAgMMDQ4PAAECA/0M/////wAAAAD/////AAAAAP1O/dUBIA/9UQshC0EGIQEDQCAJIBL9zgEiFP0M/////wAAAAD/////AAAAAP1OIA0gE/0M/////wAAAAD/////AAAAAP0NBAUGBwABAgMMDQ4PCAkKCyIR/c4BIBD9zgEiDkEg/c0B/dUBIAn9USEJIA79DP////8AAAAA/////wAAAAD9TiASQSD9zQH91QEgEP1RIRAgCiAS/Qz/////AAAAAP////8AAAAA/Q0EBQYHAAECAwwNDg8ICQoL/c4BIAz9zgEiD/0M/////wAAAAD/////AAAAAP1OIBH9DP////8AAAAA/////wAAAAD9Tv3VASAM/VEhDCAOIBQgDv0M/////wAAAAD/////AAAAAP0NAwwCBQEOAA8LBAoNBgkHCP3OASIS/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIQ0gDyALIBP9zgEiESAP/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIhP9DP////8AAAAA/////wAAAAD9DQMMAgUBDgAPCwQKDQYJBwj9zgEhCiAR/Qz/////AAAAAP////8AAAAA/U4gD/0M/////wAAAAD/////AAAAAP0NBAUGBwABAgMMDQ4PAAECA/0M/////wAAAAD/////AAAAAP1O/dUBIAv9USELIAFBAWsiAQ0ACyACIAn9CwRwIAIgC/0LBGAgAiAQ/QsEUCACIAz9CwRAIAIgDf0LBDAgAiAK/QsEICACIBL9CwQQIAIgE/0LBAAgByAMIBP9zgEgDf3OASAJ/c4B/Qz/////AAAAAP////8AAAAA/Q0ICQoLDA0ODwABAgMEBQYH/QsDACAEQRAgB0ECEAQgACAE/QADAP0LAAAgBEHgAWokAAuTDQMOewR/AX4jAEHAAWsiEiQAIAACeyASIAFBwAFsQYCAQGtBwAEQBiIBQaABaigCACIRRQRAIAH9AAQQIQsgAf0ABAAhDCAB/QAEcCEIIAH9AARQIQQgAf0ABEAhBSAB/QAEMCEJIAH9AAQgIQMgAf0ABGAMAQsgAUGAAWohEyAB/QAEMCEEIAH9AAQgIQYgAf0ABBAhDSAB/QAEACEKAnsgEUEgIBFBIEkbIhBBEHFFBED9DAAAAAAAAAAAAAAAAAAAAAAgEykDACIU/R4B/QwAAAAAAAAAAAAAAAAAAAAAIBBBB0siABshAiAQQQRxBEAgAUGIAWooAgAgFKcgABv9Ef0M/////wAAAAAAAAAAAAAAAP0MAAAAAAAAAAD/////AAAAACAAG/1OIAL9UCECC/0MAAAAAAAAAAAAAAAAAAAAACAQQQNxIhJFDQEa/QwAAAAAAAAAAAAAAAAAAAAAIBMgEEE8cWoiACASQQF2ajEAAEIIhiAAMQAAhCAAIBJqQQFrMQAAQhCGhP0eAQwBC/0MAAAAAAAAAAAAAAAAAAAAACABQYgBav0AAwAiB/0MAAAAAAAAAAAAAAAAAAAAAP0NEBESExQVFhcICQoLDA0ODyAQQThxIgBBEEYbIQkgEyAH/VcDAAEhAiAQIBNqQQRrIBBBBHEEeyAH/R0BpyABQZgBaigCACAAQRBGIgAb/RH9DAAAAAAAAAAA/////wAAAAD9DP////8AAAAAAAAAAAAAAAAgABv9TiAJ/VAFIAkL/VYAAAELIARBICARayIA/a0BIAQgEf2rAf1Q/c4BIAH9AARQIg/9zgEiDiAB/QAEcCIIIA0gEf0RIgP9zgEiBf3OASIEIA4gA/0NAwwCBQEOAA8LBAoNBgkHCP3OASILIAP9DQMMAgUBDgAPCwQKDQYJBwj9zgEhCSACIAYgAP2tASAGIBH9qwH9UP3OASAB/QAEQCIG/c4BIgIgAf0ABGAiByAKIAP9zgEiDf3OASIKIAIgA/0NAwwCBQEOAA8LBAoNBgkHCP3OASIMIAP9DQMMAgUBDgAPCwQKDQYJBwj9zgEhAyAE/Qz/////AAAAAP////8AAAAA/U4gDkEg/c0B/dUBIAj9USEIIA79DP////8AAAAA/////wAAAAD9TiAFQSD9zQH91QEgD/1RIQQgAv0M/////wAAAAD/////AAAAAP1OIA39DP////8AAAAA/////wAAAAD9DQQFBgcAAQIDDA0ODwABAgP9DP////8AAAAA/////wAAAAD9Tv3VASAG/VEhBSAK/Qz/////AAAAAP////8AAAAA/U4gAv0M/////wAAAAD/////AAAAAP0NBAUGBwABAgMMDQ4PAAECA/0M/////wAAAAD/////AAAAAP1O/dUBIAf9UQshAkEEIQADQCAIIAv9zgEiDf0M/////wAAAAD/////AAAAAP1OIAkgDP0M/////wAAAAD/////AAAAAP0NBAUGBwABAgMMDQ4PCAkKCyIK/c4BIAT9zgEiBkEg/c0B/dUBIAj9USEIIAb9DP////8AAAAA/////wAAAAD9TiALQSD9zQH91QEgBP1RIQQgAyAL/Qz/////AAAAAP////8AAAAA/Q0EBQYHAAECAwwNDg8ICQoL/c4BIAX9zgEiB/0M/////wAAAAD/////AAAAAP1OIAr9DP////8AAAAA/////wAAAAD9Tv3VASAF/VEhBSAGIA0gBv0M/////wAAAAD/////AAAAAP0NAwwCBQEOAA8LBAoNBgkHCP3OASIL/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIQkgByACIAz9zgEiCiAH/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIgz9DP////8AAAAA/////wAAAAD9DQMMAgUBDgAPCwQKDQYJBwj9zgEhAyAK/Qz/////AAAAAP////8AAAAA/U4gB/0M/////wAAAAD/////AAAAAP0NBAUGBwABAgMMDQ4PAAECA/0M/////wAAAAD/////AAAAAP1O/dUBIAL9USECIABBAWsiAA0ACyABIAj9CwRwIAEgAv0LBGAgASAE/QsEUCABIAX9CwRAIAEgCf0LBDAgASAD/QsEICABIAv9CwQQIAEgDP0LBAAgBSAM/c4BIAP9zgEgAv3OAf0dATcAACABQcABaiQACyIAIAMgAUEDdiIBIAEgA0sbIgEEQCAAIAIgAUEDdBAGGgsLgRACBH8MewJAIAAhBCACQcABbEGAgEBrIgNBgAFqIQYCQCADQaABaigCACIARQRAIAFBYHEiAgRAQQAgAmshBSAD/QAEACENIAP9AARwIQggA/0ABGAhCyAD/QAEECEJIAP9AARQIQogA/0ABEAhDCAD/QAEMCEHIAP9AAQgIRAgBCEAA0AgCCAJ/c4BIg79DP////8AAAAA/////wAAAAD9TiAHIABBEGogAP0KABj9VwAAAf3OASAK/c4BIgdBIP3NAf3VASAI/VEhCCAJQSD9zQEgB/0M/////wAAAAD/////AAAAAP1O/dUBIAr9USEKIA39DP////8AAAAA/////wAAAAD9DQQFBgcAAQIDDA0ODwABAgP9DP////8AAAAA/////wAAAAD9TiAQIAAgAP0KAAj9VwAAAf3OASAM/c4BIg/9DP////8AAAAA/////wAAAAD9Tv3VASAM/VEhDCAHIA4gB/0M/////wAAAAD/////AAAAAP0NAwwCBQEOAA8LBAoNBgkHCP3OASIJ/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIQcgDyALIA39zgEiDiAP/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIg39DP////8AAAAA/////wAAAAD9DQMMAgUBDgAPCwQKDQYJBwj9zgEhECAO/Qz/////AAAAAP////8AAAAA/U4gD/0M/////wAAAAD/////AAAAAP0NBAUGBwABAgMMDQ4PAAECA/0M/////wAAAAD/////AAAAAP1O/dUBIAv9USELIABBIGohACAFQSBqIgUNAAsgAyAK/QsEUCADIAz9CwRAIAMgB/0LBDAgAyAQ/QsEICADIA39CwQAIAMgCP0LBHAgAyAL/QsEYCADIAn9CwQQCyADIAFBH3EiADYCoAEgAEUNASAGIAIgBGogABAGGgwCC0GAgMAAIAAgBmogAEEgSxshAkEAQSAgAGsiACAAQSBLGyIAIAFLBEAgAiAEIAEQBhogAyADKAKgASABajYCoAEMAQsgAiAEIAAQBhogA0EgNgKgASADIAP9AARgIgwgA/0ABAAiCP3OASIPIAP9AAQgIANBgAFqIANBiAFq/QADACIJ/VcDAAH9zgEgA/0ABEAiC/3OASIKIAj9DQMMAgUBDgAPCwQKDQYJBwj9zgEiDf0LBAAgAyALIAggCP0NBAUGBwABAgMMDQ4PAAECA/0M/////wAAAAD/////AAAAAP1OIAr9DP////8AAAAA/////wAAAAD9Tv3VAf1RIgv9CwRAIAMgA/0ABHAiDiAD/QAEECIR/c4BIhIgA/0ABDAgA0GYAWr9AAMAIAn9DQABAgMEBQYHGBkaGxwdHh/9zgEgA/0ABFAiCf3OASIH/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIgj9CwQQIAMgCiAN/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIhD9CwQgIAMgCSARQSD9zQEgB/0M/////wAAAAD/////AAAAAP1O/dUB/VEiCf0LBFAgAyAMIA/9DP////8AAAAA/////wAAAAD9TiAK/Qz/////AAAAAP////8AAAAA/Q0EBQYHAAECAwwNDg8AAQID/Qz/////AAAAAP////8AAAAA/U791QH9USIK/QsEYCADIA4gEv0M/////wAAAAD/////AAAAAP1OIAdBIP3NAf3VAf1RIgz9CwRwIAMgByAI/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIgf9CwQwIAAgBGohAiABIABrIgBBH3EhASAAQWBxIgQEQEEAIARrIQUgAiEAA0AgDCAI/c4BIg79DP////8AAAAA/////wAAAAD9TiAHIABBEGogAP0KABj9VwAAAf3OASAJ/c4BIgdBIP3NAf3VASAM/VEhDCAIQSD9zQEgB/0M/////wAAAAD/////AAAAAP1O/dUBIAn9USEJIA39DP////8AAAAA/////wAAAAD9DQQFBgcAAQIDDA0ODwABAgP9DP////8AAAAA/////wAAAAD9TiAQIAAgAP0KAAj9VwAAAf3OASAL/c4BIg/9DP////8AAAAA/////wAAAAD9Tv3VASAL/VEhCyAHIA4gB/0M/////wAAAAD/////AAAAAP0NAwwCBQEOAA8LBAoNBgkHCP3OASII/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIQcgDyAKIA39zgEiDiAP/Qz/////AAAAAP////8AAAAA/Q0DDAIFAQ4ADwsECg0GCQcI/c4BIg39DP////8AAAAA/////wAAAAD9DQMMAgUBDgAPCwQKDQYJBwj9zgEhECAO/Qz/////AAAAAP////8AAAAA/U4gD/0M/////wAAAAD/////AAAAAP0NBAUGBwABAgMMDQ4PAAECA/0M/////wAAAAD/////AAAAAP1O/dUBIAr9USEKIABBIGohACAFQSBqIgUNAAsgAyAM/QsEcCADIAr9CwRgIAMgCf0LBFAgAyAL/QsEQCADIA39CwQAIAMgB/0LBDAgAyAQ/QsEICADIAj9CwQQCyADIAE2AqABIAFFDQAgBiACIARqIAEQBhoLCwu4AgEHfwJAIAIiBEEQSQRAIAAhAgwBCyAAQQAgAGtBA3EiA2ohBSADBEAgACECIAEhBgNAIAIgBi0AADoAACAGQQFqIQYgAkEBaiICIAVJDQALCyAFIAQgA2siCEF8cSIHaiECAkAgASADaiIDQQNxBEAgB0EATA0BIANBA3QiBEEYcSEJIANBfHEiBkEEaiEBQQAgBGtBGHEhBCAGKAIAIQYDQCAFIAYgCXYgASgCACIGIAR0cjYCACABQQRqIQEgBUEEaiIFIAJJDQALDAELIAdBAEwNACADIQEDQCAFIAEoAgA2AgAgAUEEaiEBIAVBBGoiBSACSQ0ACwsgCEEDcSEEIAMgB2ohAQsgBARAIAIgBGohAwNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICIANJDQALCyAACwUAQdUCCwBHCXByb2R1Y2VycwEMcHJvY2Vzc2VkLWJ5AgZ3YWxydXMGMC4yMC4zDHdhc20tYmluZGdlbhIwLjIuOTIgKDJhNGE0OTM2Mik=', imports)} // @ts-ignore setWasmInit(() => wasm()); // @ts-ignore setWasmSimdInit(() => wasmSimd()); exports.HighwayHash = WasmHighwayHash; exports.WasmHighwayHash = WasmHighwayHash; exports.hasWasmSimd = hasSimd; }));