import * as fs from "fs"; import * as child from "child_process"; import * as path from "path"; import {Terminal} from "../../src/utils/terminal"; //Windows spawn work around let spawnSync: any = child.spawnSync; if (process.platform === 'win32') { spawnSync = (cmd: string, args: string[]) => { return child.spawnSync('node.exe', [cmd].concat(args)); } } /** * Compile TurboScript to WebAssembly synchronously * @param sourcePath * @param imports * @param outputFile * @returns {Buffer} */ export function compileWasmSync(sourcePath: string, imports: any = {}, outputFile?: string): Buffer { outputFile = outputFile || getDefaultOutputFile(sourcePath); clean(outputFile); const compileInfo = spawnSync(path.resolve(process.cwd(), './bin/tc'), [sourcePath, '--out', outputFile]); if (compileInfo.error) { let error = `Compiler Error! \n${compileInfo.error}`; Terminal.error(error); throw new Error(error); } else if (compileInfo.status > 0) { let error = `Compile Error! \n${compileInfo.stderr}\n${compileInfo.stdout}`; Terminal.error(error); throw new Error(error); } const data = fs.readFileSync(outputFile); return data; } /** * Compile TurboScript to WebAssembly and instantiate synchronously * @param sourcePath * @param imports * @param outputFile * @returns {WebAssembly.Instance} */ export function getWasmInstanceSync(sourcePath: string, imports: any = {}, outputFile?: string): WebAssembly.Instance { outputFile = outputFile || getDefaultOutputFile(sourcePath); clean(outputFile); const compileInfo = spawnSync(path.resolve(process.cwd(), './bin/tc'), [sourcePath, '--out', outputFile]); if (compileInfo.error) { let error = `Compiler Error! \n${compileInfo.error}`; Terminal.error(error); throw new Error(error); } else if (compileInfo.status > 0) { let error = `Compile Error! \n${compileInfo.stderr}\n${compileInfo.stdout}`; Terminal.error(error); throw new Error(error); } const data = fs.readFileSync(outputFile); const mod = new WebAssembly.Module(data); return new WebAssembly.Instance(mod, appendMalloc(imports)); } /** * Compile TurboScript to WebAssembly and asynchronous instantiate * @param sourcePath * @param imports * @param outputFile * @returns {Promise} */ export async function getWasmInstance(sourcePath: string, imports: any = {}, outputFile?: string): Promise { outputFile = outputFile || getDefaultOutputFile(sourcePath); clean(outputFile); const compileInfo = spawnSync(path.resolve(process.cwd(), './bin/tc'), [sourcePath, '--out', outputFile]); if (compileInfo.error) { let error = `Compiler Error! \n${compileInfo.error}`; Terminal.error(error); throw new Error(error); } else if (compileInfo.status > 0) { let error = `Compile Error! \n${compileInfo.stderr}\n${compileInfo.stdout}`; Terminal.error(error); throw new Error(error); } const data = fs.readFileSync(outputFile); const result: WebAssembly.ResultObject = await WebAssembly.instantiate(data, appendMalloc(imports)); return result.instance; } /** * Compile TurboScript to WebAssembly and asynchronous instantiate * @param sourceString * @param imports * @param outputFile * @returns {Promise} */ export async function getWasmInstanceFromString(sourceString: string, imports: any = {}, outputFile?: string): Promise { if (exports.turbo === undefined) { exports.turbo = require(path.resolve(process.cwd(), "./lib/turboscript.js")); } let compileResult = exports.turbo.compileString(sourceString); if (compileResult.success) { if (compileResult.wasm === null) { let error = "Internal Compile Error!"; Terminal.error(error); throw new Error(error); } const result: WebAssembly.ResultObject = await WebAssembly.instantiate(compileResult.wasm, appendMalloc(imports)); return result.instance; } else { Terminal.error("Compile Error!"); return null; } } /** * Compile TurboScript to asm.js and asynchronous instantiate * @param sourcePath * @param imports * @param outputFile * @returns {Promise} */ export async function getAsmjsInstance(sourcePath: string, imports: any = {}, outputFile?: string): Promise<{ exports: any }> { outputFile = outputFile || getDefaultOutputFile(sourcePath, "asm.js"); clean(outputFile); const compileInfo = spawnSync(path.resolve(process.cwd(), './bin/tc'), [sourcePath, '--out', outputFile]); if (compileInfo.error) { let error = `Compiler Error! \n${compileInfo.error}`; Terminal.error(error); throw new Error(error); } else if (compileInfo.status > 0) { let error = `Compile Error! \n${compileInfo.stderr}\n${compileInfo.stdout}`; Terminal.error(error); throw new Error(error); } const TurboASM = require(outputFile).TurboASM; return TurboASM.Instance(0x10000); } const dlmallocBin = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 175, 128, 128, 128, 0, 7, 96, 3, 127, 127, 127, 1, 127, 96, 2, 127, 127, 1, 127, 96, 1, 127, 1, 127, 96, 2, 127, 127, 0, 96, 4, 127, 127, 127, 127, 1, 127, 96, 5, 127, 127, 127, 127, 127, 1, 127, 96, 3, 127, 127, 127, 0, 3, 135, 128, 128, 128, 0, 6, 0, 0, 0, 1, 3, 2, 4, 132, 128, 128, 128, 0, 1, 112, 0, 0, 5, 131, 128, 128, 128, 0, 1, 0, 1, 7, 209, 128, 128, 128, 0, 7, 6, 109, 101, 109, 111, 114, 121, 2, 0, 6, 109, 101, 109, 99, 109, 112, 0, 0, 6, 109, 101, 109, 99, 112, 121, 0, 1, 6, 109, 101, 109, 115, 101, 116, 0, 2, 13, 109, 115, 112, 97, 99, 101, 95, 109, 97, 108, 108, 111, 99, 0, 3, 11, 109, 115, 112, 97, 99, 101, 95, 102, 114, 101, 101, 0, 4, 11, 109, 115, 112, 97, 99, 101, 95, 105, 110, 105, 116, 0, 5, 9, 129, 128, 128, 128, 0, 0, 10, 151, 219, 128, 128, 0, 6, 183, 130, 128, 128, 0, 1, 5, 127, 2, 127, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 32, 0, 65, 7, 113, 34, 3, 32, 1, 65, 7, 113, 71, 13, 0, 65, 8, 32, 3, 107, 34, 6, 4, 64, 65, 0, 33, 3, 3, 64, 32, 0, 32, 3, 106, 34, 7, 45, 0, 0, 32, 1, 32, 3, 106, 34, 4, 45, 0, 0, 71, 13, 3, 32, 3, 65, 1, 106, 34, 3, 32, 6, 73, 13, 0, 11, 32, 1, 32, 3, 106, 33, 1, 32, 0, 32, 3, 106, 33, 0, 32, 2, 32, 3, 107, 33, 2, 11, 32, 2, 65, 4, 73, 13, 0, 65, 0, 33, 3, 3, 64, 32, 0, 32, 3, 106, 40, 2, 0, 32, 1, 32, 3, 106, 40, 2, 0, 71, 13, 4, 32, 3, 65, 4, 106, 33, 3, 32, 2, 65, 124, 106, 34, 2, 65, 3, 75, 13, 0, 11, 32, 0, 32, 3, 106, 33, 0, 32, 1, 32, 3, 106, 33, 1, 11, 65, 1, 32, 2, 107, 33, 3, 2, 64, 2, 64, 3, 64, 32, 3, 34, 2, 65, 1, 70, 13, 1, 32, 2, 65, 1, 106, 33, 3, 32, 1, 45, 0, 0, 33, 6, 32, 0, 45, 0, 0, 33, 7, 32, 1, 65, 1, 106, 34, 4, 33, 1, 32, 0, 65, 1, 106, 34, 5, 33, 0, 32, 7, 32, 6, 70, 13, 0, 12, 2, 11, 0, 11, 32, 1, 33, 4, 32, 0, 33, 5, 11, 65, 0, 32, 2, 107, 69, 13, 1, 12, 3, 11, 32, 4, 65, 1, 106, 33, 4, 32, 7, 65, 1, 106, 33, 5, 32, 2, 32, 3, 107, 13, 2, 11, 65, 0, 15, 11, 32, 0, 33, 5, 32, 1, 33, 4, 11, 32, 5, 45, 0, 0, 32, 4, 45, 0, 0, 107, 11, 11, 151, 140, 128, 128, 0, 1, 8, 127, 2, 127, 2, 64, 2, 64, 2, 64, 32, 2, 69, 32, 1, 65, 3, 113, 69, 114, 69, 4, 64, 32, 0, 33, 5, 2, 64, 3, 64, 32, 5, 32, 1, 45, 0, 0, 58, 0, 0, 32, 2, 65, 127, 106, 33, 3, 32, 5, 65, 1, 106, 33, 5, 32, 1, 65, 1, 106, 33, 1, 32, 2, 65, 1, 70, 13, 1, 32, 3, 33, 2, 32, 1, 65, 3, 113, 13, 0, 11, 11, 32, 5, 65, 3, 113, 69, 13, 1, 12, 2, 11, 32, 2, 33, 3, 32, 0, 34, 5, 65, 3, 113, 13, 1, 11, 2, 64, 32, 3, 65, 16, 79, 4, 64, 32, 5, 32, 3, 65, 112, 106, 34, 6, 65, 112, 113, 34, 7, 65, 16, 106, 34, 8, 106, 33, 4, 32, 1, 33, 2, 3, 64, 32, 5, 32, 2, 40, 2, 0, 54, 2, 0, 32, 5, 65, 4, 106, 32, 2, 65, 4, 106, 40, 2, 0, 54, 2, 0, 32, 5, 65, 8, 106, 32, 2, 65, 8, 106, 40, 2, 0, 54, 2, 0, 32, 5, 65, 12, 106, 32, 2, 65, 12, 106, 40, 2, 0, 54, 2, 0, 32, 5, 65, 16, 106, 33, 5, 32, 2, 65, 16, 106, 33, 2, 32, 3, 65, 112, 106, 34, 3, 65, 15, 75, 13, 0, 11, 32, 6, 32, 7, 107, 33, 3, 32, 1, 32, 8, 106, 33, 1, 12, 1, 11, 32, 5, 33, 4, 11, 32, 3, 65, 8, 113, 4, 64, 32, 4, 32, 1, 40, 2, 0, 54, 2, 0, 32, 4, 32, 1, 40, 2, 4, 54, 2, 4, 32, 1, 65, 8, 106, 33, 1, 32, 4, 65, 8, 106, 33, 4, 11, 32, 3, 65, 4, 113, 4, 64, 32, 4, 32, 1, 40, 2, 0, 54, 2, 0, 32, 1, 65, 4, 106, 33, 1, 32, 4, 65, 4, 106, 33, 4, 11, 32, 3, 65, 2, 113, 4, 64, 32, 4, 32, 1, 45, 0, 0, 58, 0, 0, 32, 4, 32, 1, 45, 0, 1, 58, 0, 1, 32, 4, 65, 2, 106, 33, 4, 32, 1, 65, 2, 106, 33, 1, 11, 32, 3, 65, 1, 113, 69, 13, 1, 32, 4, 32, 1, 45, 0, 0, 58, 0, 0, 32, 0, 15, 11, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 32, 3, 65, 32, 73, 13, 0, 32, 5, 65, 3, 113, 34, 2, 65, 3, 70, 13, 1, 32, 2, 65, 2, 70, 13, 2, 32, 2, 65, 1, 71, 13, 0, 32, 5, 32, 1, 45, 0, 1, 58, 0, 1, 32, 5, 32, 1, 40, 2, 0, 34, 7, 58, 0, 0, 32, 5, 32, 1, 45, 0, 2, 58, 0, 2, 32, 5, 65, 3, 106, 33, 2, 32, 3, 65, 125, 106, 34, 4, 65, 17, 73, 13, 3, 32, 1, 65, 16, 106, 33, 6, 32, 3, 65, 109, 106, 33, 8, 32, 1, 32, 3, 65, 108, 106, 65, 112, 113, 34, 9, 65, 19, 106, 34, 10, 106, 33, 1, 3, 64, 32, 2, 32, 6, 65, 116, 106, 40, 2, 0, 34, 3, 65, 8, 116, 32, 7, 65, 24, 118, 114, 54, 2, 0, 32, 2, 65, 4, 106, 32, 6, 65, 120, 106, 40, 2, 0, 34, 7, 65, 8, 116, 32, 3, 65, 24, 118, 114, 54, 2, 0, 32, 2, 65, 8, 106, 32, 6, 65, 124, 106, 40, 2, 0, 34, 3, 65, 8, 116, 32, 7, 65, 24, 118, 114, 54, 2, 0, 32, 2, 65, 12, 106, 32, 6, 40, 2, 0, 34, 7, 65, 8, 116, 32, 3, 65, 24, 118, 114, 54, 2, 0, 32, 2, 65, 16, 106, 33, 2, 32, 6, 65, 16, 106, 33, 6, 32, 4, 65, 112, 106, 34, 4, 65, 16, 75, 13, 0, 11, 32, 8, 32, 9, 107, 33, 4, 32, 5, 32, 10, 106, 33, 2, 12, 6, 11, 32, 3, 33, 4, 32, 5, 33, 2, 12, 5, 11, 32, 5, 32, 1, 40, 2, 0, 34, 7, 58, 0, 0, 32, 5, 65, 1, 106, 33, 2, 32, 3, 65, 127, 106, 34, 4, 65, 19, 73, 13, 2, 32, 1, 65, 16, 106, 33, 6, 32, 3, 65, 111, 106, 33, 8, 32, 1, 32, 3, 65, 108, 106, 65, 112, 113, 34, 9, 65, 17, 106, 34, 10, 106, 33, 1, 3, 64, 32, 2, 32, 6, 65, 116, 106, 40, 2, 0, 34, 3, 65, 24, 116, 32, 7, 65, 8, 118, 114, 54, 2, 0, 32, 2, 65, 4, 106, 32, 6, 65, 120, 106, 40, 2, 0, 34, 7, 65, 24, 116, 32, 3, 65, 8, 118, 114, 54, 2, 0, 32, 2, 65, 8, 106, 32, 6, 65, 124, 106, 40, 2, 0, 34, 3, 65, 24, 116, 32, 7, 65, 8, 118, 114, 54, 2, 0, 32, 2, 65, 12, 106, 32, 6, 40, 2, 0, 34, 7, 65, 24, 116, 32, 3, 65, 8, 118, 114, 54, 2, 0, 32, 2, 65, 16, 106, 33, 2, 32, 6, 65, 16, 106, 33, 6, 32, 4, 65, 112, 106, 34, 4, 65, 18, 75, 13, 0, 11, 32, 8, 32, 9, 107, 33, 4, 32, 5, 32, 10, 106, 33, 2, 12, 4, 11, 32, 5, 32, 1, 40, 2, 0, 34, 7, 58, 0, 0, 32, 5, 32, 1, 45, 0, 1, 58, 0, 1, 32, 5, 65, 2, 106, 33, 2, 32, 3, 65, 126, 106, 34, 4, 65, 18, 73, 13, 2, 32, 1, 65, 16, 106, 33, 6, 32, 3, 65, 110, 106, 33, 8, 32, 1, 32, 3, 65, 108, 106, 65, 112, 113, 34, 9, 65, 18, 106, 34, 10, 106, 33, 1, 3, 64, 32, 2, 32, 6, 65, 116, 106, 40, 2, 0, 34, 3, 65, 16, 116, 32, 7, 65, 16, 118, 114, 54, 2, 0, 32, 2, 65, 4, 106, 32, 6, 65, 120, 106, 40, 2, 0, 34, 7, 65, 16, 116, 32, 3, 65, 16, 118, 114, 54, 2, 0, 32, 2, 65, 8, 106, 32, 6, 65, 124, 106, 40, 2, 0, 34, 3, 65, 16, 116, 32, 7, 65, 16, 118, 114, 54, 2, 0, 32, 2, 65, 12, 106, 32, 6, 40, 2, 0, 34, 7, 65, 16, 116, 32, 3, 65, 16, 118, 114, 54, 2, 0, 32, 2, 65, 16, 106, 33, 2, 32, 6, 65, 16, 106, 33, 6, 32, 4, 65, 112, 106, 34, 4, 65, 17, 75, 13, 0, 11, 32, 8, 32, 9, 107, 33, 4, 32, 5, 32, 10, 106, 33, 2, 12, 3, 11, 32, 1, 65, 3, 106, 33, 1, 12, 2, 11, 32, 1, 65, 1, 106, 33, 1, 12, 1, 11, 32, 1, 65, 2, 106, 33, 1, 11, 32, 4, 65, 16, 113, 4, 64, 32, 2, 32, 1, 45, 0, 1, 58, 0, 1, 32, 2, 32, 1, 45, 0, 2, 58, 0, 2, 32, 2, 32, 1, 45, 0, 3, 58, 0, 3, 32, 2, 32, 1, 45, 0, 4, 58, 0, 4, 32, 2, 32, 1, 45, 0, 5, 58, 0, 5, 32, 2, 32, 1, 45, 0, 6, 58, 0, 6, 32, 2, 32, 1, 45, 0, 7, 58, 0, 7, 32, 2, 32, 1, 45, 0, 8, 58, 0, 8, 32, 2, 32, 1, 45, 0, 9, 58, 0, 9, 32, 2, 32, 1, 45, 0, 10, 58, 0, 10, 32, 2, 32, 1, 45, 0, 11, 58, 0, 11, 32, 2, 32, 1, 45, 0, 12, 58, 0, 12, 32, 2, 32, 1, 45, 0, 13, 58, 0, 13, 32, 2, 32, 1, 45, 0, 14, 58, 0, 14, 32, 2, 32, 1, 45, 0, 0, 58, 0, 0, 32, 2, 32, 1, 45, 0, 15, 58, 0, 15, 32, 2, 65, 16, 106, 33, 2, 32, 1, 65, 16, 106, 33, 1, 11, 32, 4, 65, 8, 113, 4, 64, 32, 2, 32, 1, 45, 0, 0, 58, 0, 0, 32, 2, 32, 1, 45, 0, 1, 58, 0, 1, 32, 2, 32, 1, 45, 0, 2, 58, 0, 2, 32, 2, 32, 1, 45, 0, 3, 58, 0, 3, 32, 2, 32, 1, 45, 0, 4, 58, 0, 4, 32, 2, 32, 1, 45, 0, 5, 58, 0, 5, 32, 2, 32, 1, 45, 0, 6, 58, 0, 6, 32, 2, 32, 1, 45, 0, 7, 58, 0, 7, 32, 2, 65, 8, 106, 33, 2, 32, 1, 65, 8, 106, 33, 1, 11, 32, 4, 65, 4, 113, 4, 64, 32, 2, 32, 1, 45, 0, 0, 58, 0, 0, 32, 2, 32, 1, 45, 0, 1, 58, 0, 1, 32, 2, 32, 1, 45, 0, 2, 58, 0, 2, 32, 2, 32, 1, 45, 0, 3, 58, 0, 3, 32, 2, 65, 4, 106, 33, 2, 32, 1, 65, 4, 106, 33, 1, 11, 32, 4, 65, 2, 113, 4, 64, 32, 2, 32, 1, 45, 0, 0, 58, 0, 0, 32, 2, 32, 1, 45, 0, 1, 58, 0, 1, 32, 2, 65, 2, 106, 33, 2, 32, 1, 65, 2, 106, 33, 1, 11, 32, 4, 65, 1, 113, 69, 13, 0, 32, 2, 32, 1, 45, 0, 0, 58, 0, 0, 32, 0, 15, 11, 32, 0, 11, 11, 255, 130, 128, 128, 0, 2, 2, 127, 1, 126, 2, 127, 2, 64, 32, 2, 69, 13, 0, 32, 0, 32, 2, 106, 34, 3, 65, 127, 106, 32, 1, 58, 0, 0, 32, 0, 32, 1, 58, 0, 0, 32, 2, 65, 3, 73, 13, 0, 32, 3, 65, 126, 106, 32, 1, 58, 0, 0, 32, 0, 32, 1, 58, 0, 1, 32, 3, 65, 125, 106, 32, 1, 58, 0, 0, 32, 0, 32, 1, 58, 0, 2, 32, 2, 65, 7, 73, 13, 0, 32, 3, 65, 124, 106, 32, 1, 58, 0, 0, 32, 0, 32, 1, 58, 0, 3, 32, 2, 65, 9, 73, 13, 0, 32, 0, 65, 0, 32, 0, 107, 65, 3, 113, 34, 4, 106, 34, 3, 32, 1, 65, 255, 1, 113, 65, 129, 130, 132, 8, 108, 34, 1, 54, 2, 0, 32, 3, 32, 2, 32, 4, 107, 65, 124, 113, 34, 4, 106, 34, 2, 65, 124, 106, 32, 1, 54, 2, 0, 32, 4, 65, 9, 73, 13, 0, 32, 3, 32, 1, 54, 2, 8, 32, 3, 32, 1, 54, 2, 4, 32, 2, 65, 120, 106, 32, 1, 54, 2, 0, 32, 2, 65, 116, 106, 32, 1, 54, 2, 0, 32, 4, 65, 25, 73, 13, 0, 32, 3, 32, 1, 54, 2, 16, 32, 3, 32, 1, 54, 2, 12, 32, 3, 32, 1, 54, 2, 20, 32, 3, 32, 1, 54, 2, 24, 32, 2, 65, 104, 106, 32, 1, 54, 2, 0, 32, 2, 65, 100, 106, 32, 1, 54, 2, 0, 32, 2, 65, 108, 106, 32, 1, 54, 2, 0, 32, 2, 65, 112, 106, 32, 1, 54, 2, 0, 32, 4, 32, 3, 65, 4, 113, 65, 24, 114, 34, 4, 107, 34, 2, 65, 32, 73, 13, 0, 32, 1, 173, 34, 5, 66, 32, 134, 32, 5, 132, 33, 5, 32, 3, 32, 4, 106, 33, 1, 3, 64, 32, 1, 32, 5, 55, 3, 0, 32, 1, 65, 8, 106, 32, 5, 55, 3, 0, 32, 1, 65, 16, 106, 32, 5, 55, 3, 0, 32, 1, 65, 24, 106, 32, 5, 55, 3, 0, 32, 1, 65, 32, 106, 33, 1, 32, 2, 65, 96, 106, 34, 2, 65, 31, 75, 13, 0, 11, 11, 32, 0, 11, 11, 162, 181, 128, 128, 0, 1, 10, 127, 2, 127, 65, 192, 0, 40, 2, 0, 65, 16, 107, 33, 7, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 32, 1, 65, 244, 1, 77, 4, 64, 32, 0, 40, 2, 0, 34, 4, 65, 16, 32, 1, 65, 11, 106, 65, 120, 113, 32, 1, 65, 11, 73, 27, 34, 5, 65, 3, 118, 34, 2, 118, 34, 1, 65, 3, 113, 69, 13, 1, 32, 0, 32, 1, 65, 127, 115, 65, 1, 113, 32, 2, 106, 34, 3, 65, 3, 116, 106, 34, 5, 65, 48, 106, 40, 2, 0, 34, 1, 65, 8, 106, 33, 6, 32, 1, 40, 2, 8, 34, 2, 32, 5, 65, 40, 106, 34, 5, 70, 13, 2, 32, 0, 40, 2, 16, 32, 2, 75, 32, 2, 40, 2, 12, 32, 1, 71, 114, 13, 3, 32, 5, 65, 8, 106, 32, 2, 54, 2, 0, 32, 2, 65, 12, 106, 32, 5, 54, 2, 0, 12, 3, 11, 65, 127, 33, 5, 32, 1, 65, 191, 127, 75, 13, 17, 32, 1, 65, 11, 106, 34, 2, 65, 120, 113, 33, 5, 32, 0, 40, 2, 4, 34, 10, 69, 13, 17, 2, 127, 65, 0, 32, 2, 65, 8, 118, 34, 2, 69, 13, 0, 26, 65, 31, 32, 5, 65, 255, 255, 255, 7, 75, 13, 0, 26, 32, 5, 65, 14, 32, 2, 32, 2, 65, 128, 254, 63, 106, 65, 16, 118, 65, 8, 113, 34, 3, 116, 34, 2, 65, 128, 224, 31, 106, 65, 16, 118, 65, 4, 113, 34, 4, 32, 3, 114, 32, 2, 32, 4, 116, 34, 2, 65, 128, 128, 15, 106, 65, 16, 118, 65, 2, 113, 34, 3, 114, 107, 32, 2, 32, 3, 116, 65, 15, 118, 106, 34, 2, 65, 7, 106, 118, 65, 1, 113, 32, 2, 65, 1, 116, 114, 11, 33, 9, 65, 0, 32, 5, 107, 33, 3, 32, 0, 32, 9, 65, 2, 116, 106, 65, 176, 2, 106, 40, 2, 0, 34, 2, 69, 13, 4, 32, 5, 65, 0, 65, 25, 32, 9, 65, 1, 118, 107, 32, 9, 65, 31, 70, 27, 116, 33, 6, 65, 0, 33, 1, 65, 0, 33, 4, 3, 64, 32, 2, 40, 2, 4, 65, 120, 113, 32, 5, 107, 34, 8, 32, 3, 73, 4, 64, 32, 8, 33, 3, 32, 2, 33, 4, 32, 8, 69, 13, 8, 11, 32, 1, 32, 2, 65, 20, 106, 40, 2, 0, 34, 8, 32, 8, 32, 2, 32, 6, 65, 29, 118, 65, 4, 113, 106, 65, 16, 106, 40, 2, 0, 34, 2, 70, 27, 32, 1, 32, 8, 27, 33, 1, 32, 6, 32, 2, 65, 0, 71, 116, 33, 6, 32, 2, 13, 0, 11, 32, 1, 32, 4, 114, 69, 13, 4, 12, 14, 11, 32, 5, 32, 0, 40, 2, 8, 34, 3, 77, 13, 16, 32, 1, 69, 13, 4, 32, 0, 65, 40, 106, 34, 7, 32, 1, 32, 2, 116, 65, 2, 32, 2, 116, 34, 1, 65, 0, 32, 1, 107, 114, 113, 34, 1, 65, 0, 32, 1, 107, 113, 65, 127, 106, 34, 1, 32, 1, 65, 12, 118, 65, 16, 113, 34, 1, 118, 34, 2, 65, 5, 118, 65, 8, 113, 34, 6, 32, 1, 114, 32, 2, 32, 6, 118, 34, 1, 65, 2, 118, 65, 4, 113, 34, 2, 114, 32, 1, 32, 2, 118, 34, 1, 65, 1, 118, 65, 2, 113, 34, 2, 114, 32, 1, 32, 2, 118, 34, 1, 65, 1, 118, 65, 1, 113, 34, 2, 114, 32, 1, 32, 2, 118, 106, 34, 8, 65, 3, 116, 106, 34, 2, 40, 2, 8, 34, 1, 40, 2, 8, 34, 6, 32, 2, 70, 13, 6, 32, 0, 40, 2, 16, 32, 6, 75, 32, 6, 40, 2, 12, 32, 1, 71, 114, 13, 7, 32, 2, 65, 8, 106, 32, 6, 54, 2, 0, 32, 6, 65, 12, 106, 32, 2, 54, 2, 0, 32, 0, 65, 8, 106, 40, 2, 0, 33, 3, 12, 7, 11, 32, 0, 32, 4, 65, 126, 32, 3, 119, 113, 54, 2, 0, 11, 32, 1, 32, 3, 65, 3, 116, 34, 2, 65, 3, 114, 54, 2, 4, 32, 1, 32, 2, 106, 34, 1, 32, 1, 40, 2, 4, 65, 1, 114, 54, 2, 4, 32, 6, 15, 11, 11, 65, 0, 33, 4, 32, 10, 65, 2, 32, 9, 116, 34, 1, 65, 0, 32, 1, 107, 114, 113, 34, 1, 69, 13, 12, 32, 0, 32, 1, 65, 0, 32, 1, 107, 113, 65, 127, 106, 34, 1, 32, 1, 65, 12, 118, 65, 16, 113, 34, 1, 118, 34, 2, 65, 5, 118, 65, 8, 113, 34, 6, 32, 1, 114, 32, 2, 32, 6, 118, 34, 1, 65, 2, 118, 65, 4, 113, 34, 2, 114, 32, 1, 32, 2, 118, 34, 1, 65, 1, 118, 65, 2, 113, 34, 2, 114, 32, 1, 32, 2, 118, 34, 1, 65, 1, 118, 65, 1, 113, 34, 2, 114, 32, 1, 32, 2, 118, 106, 65, 2, 116, 106, 65, 176, 2, 106, 40, 2, 0, 34, 1, 13, 10, 12, 11, 11, 32, 0, 40, 2, 4, 34, 1, 69, 13, 11, 32, 0, 32, 1, 65, 0, 32, 1, 107, 113, 65, 127, 106, 34, 1, 32, 1, 65, 12, 118, 65, 16, 113, 34, 1, 118, 34, 2, 65, 5, 118, 65, 8, 113, 34, 3, 32, 1, 114, 32, 2, 32, 3, 118, 34, 1, 65, 2, 118, 65, 4, 113, 34, 2, 114, 32, 1, 32, 2, 118, 34, 1, 65, 1, 118, 65, 2, 113, 34, 2, 114, 32, 1, 32, 2, 118, 34, 1, 65, 1, 118, 65, 1, 113, 34, 2, 114, 32, 1, 32, 2, 118, 106, 65, 2, 116, 106, 65, 176, 2, 106, 40, 2, 0, 34, 3, 40, 2, 4, 65, 120, 113, 32, 5, 107, 33, 2, 32, 3, 65, 16, 106, 32, 3, 40, 2, 16, 69, 65, 2, 116, 106, 40, 2, 0, 34, 1, 4, 64, 3, 64, 32, 1, 40, 2, 4, 65, 120, 113, 32, 5, 107, 34, 4, 32, 2, 32, 4, 32, 2, 73, 34, 4, 27, 33, 2, 32, 1, 32, 3, 32, 4, 27, 33, 3, 32, 1, 65, 16, 106, 32, 1, 40, 2, 16, 69, 65, 2, 116, 106, 40, 2, 0, 34, 4, 33, 1, 32, 4, 13, 0, 11, 11, 32, 0, 40, 2, 16, 34, 10, 32, 3, 75, 13, 11, 32, 3, 32, 5, 106, 34, 9, 32, 3, 77, 13, 11, 32, 3, 40, 2, 24, 33, 7, 32, 3, 40, 2, 12, 34, 6, 32, 3, 70, 13, 3, 32, 10, 32, 3, 40, 2, 8, 34, 1, 75, 32, 1, 40, 2, 12, 32, 3, 71, 114, 32, 6, 40, 2, 8, 32, 3, 71, 114, 13, 4, 32, 6, 65, 8, 106, 32, 1, 54, 2, 0, 32, 1, 65, 12, 106, 32, 6, 54, 2, 0, 32, 7, 13, 6, 12, 7, 11, 65, 0, 33, 3, 32, 2, 33, 4, 32, 2, 33, 1, 12, 8, 11, 32, 0, 32, 4, 65, 126, 32, 8, 119, 113, 54, 2, 0, 11, 32, 1, 65, 8, 106, 33, 4, 32, 1, 32, 5, 65, 3, 114, 54, 2, 4, 32, 1, 32, 5, 106, 34, 6, 32, 8, 65, 3, 116, 34, 8, 32, 5, 107, 34, 2, 65, 1, 114, 54, 2, 4, 32, 1, 32, 8, 106, 32, 2, 54, 2, 0, 32, 3, 4, 64, 32, 7, 32, 3, 65, 3, 118, 34, 5, 65, 3, 116, 106, 33, 3, 32, 0, 65, 20, 106, 40, 2, 0, 33, 1, 2, 127, 32, 0, 40, 2, 0, 34, 8, 65, 1, 32, 5, 116, 34, 5, 113, 4, 64, 32, 3, 32, 3, 40, 2, 8, 34, 5, 32, 0, 40, 2, 16, 32, 5, 75, 27, 12, 1, 11, 32, 0, 32, 8, 32, 5, 114, 54, 2, 0, 32, 3, 11, 34, 5, 32, 1, 54, 2, 12, 32, 3, 65, 8, 106, 32, 1, 54, 2, 0, 32, 1, 32, 3, 54, 2, 12, 32, 1, 32, 5, 54, 2, 8, 11, 32, 0, 65, 20, 106, 32, 6, 54, 2, 0, 32, 0, 65, 8, 106, 32, 2, 54, 2, 0, 32, 4, 15, 11, 32, 3, 65, 20, 106, 34, 4, 40, 2, 0, 34, 1, 69, 4, 64, 32, 3, 40, 2, 16, 34, 1, 69, 13, 2, 32, 3, 65, 16, 106, 33, 4, 11, 3, 64, 32, 4, 33, 8, 32, 1, 34, 6, 65, 20, 106, 34, 4, 40, 2, 0, 34, 1, 13, 0, 32, 6, 65, 16, 106, 33, 4, 32, 6, 40, 2, 16, 34, 1, 13, 0, 11, 32, 10, 32, 8, 75, 13, 0, 32, 8, 65, 0, 54, 2, 0, 11, 32, 7, 69, 13, 2, 12, 1, 11, 65, 0, 33, 6, 32, 7, 69, 13, 1, 11, 2, 64, 2, 64, 32, 3, 32, 0, 32, 3, 40, 2, 28, 34, 4, 65, 2, 116, 106, 65, 176, 2, 106, 34, 1, 40, 2, 0, 71, 4, 64, 32, 0, 65, 16, 106, 40, 2, 0, 32, 7, 77, 4, 64, 32, 7, 65, 16, 106, 32, 7, 40, 2, 16, 32, 3, 71, 65, 2, 116, 106, 32, 6, 54, 2, 0, 11, 32, 6, 13, 1, 12, 3, 11, 32, 1, 32, 6, 54, 2, 0, 32, 6, 69, 13, 1, 11, 32, 0, 65, 16, 106, 40, 2, 0, 34, 4, 32, 6, 75, 13, 1, 32, 6, 32, 7, 54, 2, 24, 32, 3, 40, 2, 16, 34, 1, 69, 32, 4, 32, 1, 75, 114, 69, 4, 64, 32, 6, 32, 1, 54, 2, 16, 32, 1, 32, 6, 54, 2, 24, 11, 32, 3, 65, 20, 106, 40, 2, 0, 34, 1, 69, 32, 0, 65, 16, 106, 40, 2, 0, 32, 1, 75, 114, 13, 1, 32, 6, 65, 20, 106, 32, 1, 54, 2, 0, 32, 1, 32, 6, 54, 2, 24, 12, 1, 11, 32, 0, 65, 4, 106, 34, 1, 32, 1, 40, 2, 0, 65, 126, 32, 4, 119, 113, 54, 2, 0, 11, 2, 64, 32, 2, 65, 15, 77, 4, 64, 32, 3, 32, 2, 32, 5, 106, 34, 1, 65, 3, 114, 54, 2, 4, 32, 3, 32, 1, 106, 34, 1, 32, 1, 40, 2, 4, 65, 1, 114, 54, 2, 4, 12, 1, 11, 32, 3, 32, 5, 65, 3, 114, 54, 2, 4, 32, 9, 32, 2, 65, 1, 114, 54, 2, 4, 32, 9, 32, 2, 106, 32, 2, 54, 2, 0, 32, 0, 65, 8, 106, 34, 4, 40, 2, 0, 34, 1, 4, 64, 32, 0, 32, 1, 65, 3, 118, 34, 6, 65, 3, 116, 106, 65, 40, 106, 33, 5, 32, 0, 65, 20, 106, 40, 2, 0, 33, 1, 2, 127, 32, 0, 40, 2, 0, 34, 8, 65, 1, 32, 6, 116, 34, 6, 113, 4, 64, 32, 5, 32, 5, 40, 2, 8, 34, 6, 32, 0, 65, 16, 106, 40, 2, 0, 32, 6, 75, 27, 12, 1, 11, 32, 0, 32, 8, 32, 6, 114, 54, 2, 0, 32, 5, 11, 34, 6, 32, 1, 54, 2, 12, 32, 5, 65, 8, 106, 32, 1, 54, 2, 0, 32, 1, 32, 5, 54, 2, 12, 32, 1, 32, 6, 54, 2, 8, 11, 32, 0, 65, 20, 106, 32, 9, 54, 2, 0, 32, 4, 32, 2, 54, 2, 0, 11, 32, 3, 65, 8, 106, 15, 11, 32, 1, 69, 13, 1, 11, 3, 64, 32, 1, 40, 2, 4, 65, 120, 113, 32, 5, 107, 34, 2, 32, 3, 32, 2, 32, 3, 73, 34, 2, 27, 33, 3, 32, 1, 32, 4, 32, 2, 27, 33, 4, 32, 1, 65, 16, 106, 32, 1, 40, 2, 16, 69, 65, 2, 116, 106, 40, 2, 0, 34, 2, 33, 1, 32, 2, 13, 0, 11, 11, 32, 4, 69, 32, 3, 32, 0, 40, 2, 8, 32, 5, 107, 79, 114, 13, 0, 32, 0, 40, 2, 16, 34, 10, 32, 4, 75, 13, 0, 32, 4, 32, 5, 106, 34, 9, 32, 4, 77, 13, 0, 32, 4, 40, 2, 24, 33, 7, 32, 4, 40, 2, 12, 34, 6, 32, 4, 70, 13, 1, 32, 10, 32, 4, 40, 2, 8, 34, 1, 75, 32, 1, 40, 2, 12, 32, 4, 71, 114, 32, 6, 40, 2, 8, 32, 4, 71, 114, 13, 2, 32, 6, 65, 8, 106, 32, 1, 54, 2, 0, 32, 1, 65, 12, 106, 32, 6, 54, 2, 0, 32, 7, 13, 20, 12, 21, 11, 2, 127, 2, 64, 2, 64, 2, 64, 2, 64, 32, 0, 40, 2, 8, 34, 1, 32, 5, 73, 4, 64, 32, 0, 40, 2, 12, 34, 4, 32, 5, 77, 13, 1, 32, 0, 40, 2, 24, 34, 1, 32, 5, 106, 34, 2, 32, 4, 32, 5, 107, 34, 3, 65, 1, 114, 54, 2, 4, 32, 0, 65, 12, 106, 32, 3, 54, 2, 0, 32, 0, 32, 2, 54, 2, 24, 32, 1, 32, 5, 65, 3, 114, 54, 2, 4, 32, 1, 65, 8, 106, 15, 11, 32, 0, 40, 2, 20, 33, 2, 32, 1, 32, 5, 107, 34, 3, 65, 16, 73, 13, 1, 32, 2, 32, 5, 106, 34, 4, 32, 3, 65, 1, 114, 54, 2, 4, 32, 2, 32, 1, 106, 32, 3, 54, 2, 0, 32, 0, 65, 8, 106, 32, 3, 54, 2, 0, 32, 0, 65, 20, 106, 32, 4, 54, 2, 0, 32, 2, 32, 5, 65, 3, 114, 54, 2, 4, 12, 2, 11, 65, 200, 0, 40, 2, 0, 69, 13, 2, 65, 208, 0, 40, 2, 0, 12, 3, 11, 32, 2, 32, 1, 65, 3, 114, 54, 2, 4, 32, 0, 65, 20, 106, 65, 0, 54, 2, 0, 32, 0, 65, 8, 106, 65, 0, 54, 2, 0, 32, 2, 32, 1, 106, 34, 1, 32, 1, 40, 2, 4, 65, 1, 114, 54, 2, 4, 11, 32, 2, 65, 8, 106, 15, 11, 65, 204, 0, 66, 128, 128, 132, 128, 128, 128, 192, 0, 55, 2, 0, 65, 212, 0, 66, 127, 55, 2, 0, 65, 200, 0, 32, 7, 65, 12, 106, 65, 112, 113, 65, 216, 170, 213, 170, 5, 115, 54, 2, 0, 65, 220, 0, 65, 0, 54, 2, 0, 65, 128, 128, 4, 11, 33, 1, 65, 0, 33, 8, 32, 1, 32, 5, 65, 47, 106, 34, 10, 106, 34, 7, 65, 0, 32, 1, 107, 34, 9, 113, 34, 6, 32, 5, 77, 13, 10, 32, 0, 40, 2, 184, 3, 34, 11, 4, 64, 32, 0, 40, 2, 176, 3, 34, 1, 32, 6, 106, 34, 2, 32, 1, 77, 32, 2, 32, 11, 75, 114, 13, 11, 11, 32, 0, 65, 188, 3, 106, 45, 0, 0, 65, 4, 113, 13, 8, 32, 0, 40, 2, 24, 34, 2, 4, 64, 32, 0, 65, 192, 3, 106, 33, 1, 3, 64, 32, 1, 40, 2, 0, 34, 3, 32, 2, 77, 4, 64, 32, 3, 32, 1, 40, 2, 4, 106, 32, 2, 75, 13, 5, 11, 32, 1, 40, 2, 8, 34, 1, 13, 0, 11, 11, 63, 0, 33, 1, 32, 6, 33, 7, 65, 204, 0, 40, 2, 0, 34, 2, 65, 127, 106, 34, 3, 32, 1, 65, 16, 116, 34, 4, 113, 4, 64, 32, 6, 32, 4, 107, 32, 3, 32, 4, 106, 65, 0, 32, 2, 107, 113, 106, 33, 7, 11, 32, 7, 32, 5, 77, 32, 7, 65, 254, 255, 255, 255, 7, 75, 114, 13, 7, 32, 11, 4, 64, 32, 0, 40, 2, 176, 3, 34, 1, 32, 7, 106, 34, 2, 32, 1, 77, 32, 2, 32, 11, 75, 114, 13, 8, 11, 63, 0, 65, 16, 116, 65, 127, 32, 7, 65, 127, 106, 65, 16, 117, 65, 1, 106, 64, 0, 27, 34, 1, 32, 4, 70, 13, 9, 32, 1, 33, 4, 12, 3, 11, 32, 4, 65, 20, 106, 34, 2, 40, 2, 0, 34, 1, 69, 4, 64, 32, 4, 40, 2, 16, 34, 1, 69, 13, 4, 32, 4, 65, 16, 106, 33, 2, 11, 3, 64, 32, 2, 33, 8, 32, 1, 34, 6, 65, 20, 106, 34, 2, 40, 2, 0, 34, 1, 13, 0, 32, 6, 65, 16, 106, 33, 2, 32, 6, 40, 2, 16, 34, 1, 13, 0, 11, 32, 10, 32, 8, 75, 13, 0, 32, 8, 65, 0, 54, 2, 0, 11, 32, 7, 69, 13, 18, 12, 17, 11, 32, 7, 32, 4, 107, 32, 9, 113, 34, 7, 65, 254, 255, 255, 255, 7, 75, 13, 4, 63, 0, 33, 2, 2, 127, 32, 7, 4, 64, 65, 127, 32, 7, 65, 127, 106, 65, 16, 117, 65, 1, 106, 64, 0, 69, 13, 1, 26, 11, 32, 2, 65, 16, 116, 11, 34, 4, 32, 1, 40, 2, 0, 32, 1, 65, 4, 106, 40, 2, 0, 106, 70, 13, 2, 11, 32, 5, 65, 48, 106, 32, 7, 77, 32, 7, 65, 254, 255, 255, 255, 7, 75, 114, 32, 4, 65, 127, 70, 114, 69, 4, 64, 32, 10, 32, 7, 107, 65, 208, 0, 40, 2, 0, 34, 1, 106, 65, 0, 32, 1, 107, 113, 34, 1, 65, 254, 255, 255, 255, 7, 75, 13, 6, 32, 1, 4, 64, 32, 1, 65, 127, 106, 65, 16, 117, 65, 1, 106, 64, 0, 69, 13, 4, 11, 32, 1, 32, 7, 106, 33, 7, 12, 6, 11, 32, 4, 65, 127, 71, 13, 5, 12, 3, 11, 65, 0, 33, 6, 32, 7, 13, 14, 12, 15, 11, 32, 4, 65, 127, 71, 13, 3, 12, 1, 11, 65, 0, 32, 7, 107, 65, 1, 72, 13, 0, 32, 7, 65, 127, 115, 65, 16, 117, 65, 1, 106, 64, 0, 26, 11, 32, 0, 65, 188, 3, 106, 34, 1, 32, 1, 40, 2, 0, 65, 4, 114, 54, 2, 0, 11, 32, 6, 65, 254, 255, 255, 255, 7, 75, 13, 1, 63, 0, 33, 1, 2, 127, 32, 6, 4, 64, 65, 127, 32, 6, 65, 127, 106, 65, 16, 117, 65, 1, 106, 64, 0, 69, 13, 1, 26, 11, 32, 1, 65, 16, 116, 11, 33, 4, 63, 0, 33, 1, 32, 4, 65, 127, 70, 13, 1, 32, 4, 32, 1, 65, 16, 116, 34, 1, 79, 13, 1, 32, 1, 32, 4, 107, 34, 7, 32, 5, 65, 40, 106, 77, 13, 1, 11, 32, 0, 32, 0, 40, 2, 176, 3, 32, 7, 106, 34, 1, 54, 2, 176, 3, 32, 1, 32, 0, 40, 2, 180, 3, 75, 4, 64, 32, 0, 65, 180, 3, 106, 32, 1, 54, 2, 0, 11, 2, 64, 2, 64, 2, 64, 32, 0, 40, 2, 24, 34, 2, 4, 64, 32, 0, 65, 192, 3, 106, 34, 9, 33, 1, 3, 64, 32, 4, 32, 1, 40, 2, 0, 34, 3, 32, 1, 40, 2, 4, 34, 6, 106, 70, 13, 2, 32, 1, 40, 2, 8, 34, 1, 13, 0, 12, 3, 11, 0, 11, 2, 64, 32, 0, 40, 2, 16, 34, 1, 4, 64, 32, 4, 32, 1, 79, 13, 1, 11, 32, 0, 65, 16, 106, 32, 4, 54, 2, 0, 11, 32, 0, 32, 7, 54, 2, 196, 3, 32, 0, 32, 4, 54, 2, 192, 3, 65, 0, 33, 1, 32, 0, 65, 0, 54, 2, 204, 3, 32, 0, 65, 127, 54, 2, 32, 32, 0, 65, 200, 0, 40, 2, 0, 54, 2, 36, 3, 64, 32, 0, 32, 1, 106, 34, 2, 65, 48, 106, 32, 2, 65, 40, 106, 34, 3, 54, 2, 0, 32, 2, 65, 52, 106, 32, 3, 54, 2, 0, 32, 1, 65, 8, 106, 34, 1, 65, 128, 2, 71, 13, 0, 11, 32, 0, 65, 24, 106, 32, 0, 32, 0, 65, 124, 106, 40, 2, 0, 65, 120, 113, 106, 34, 1, 65, 120, 106, 34, 2, 65, 0, 32, 1, 107, 65, 7, 113, 65, 0, 32, 1, 65, 7, 113, 27, 34, 1, 106, 34, 3, 54, 2, 0, 32, 0, 65, 12, 106, 32, 4, 32, 7, 106, 34, 4, 32, 2, 107, 65, 88, 106, 32, 1, 107, 34, 1, 54, 2, 0, 32, 3, 32, 1, 65, 1, 114, 54, 2, 4, 32, 4, 65, 92, 106, 65, 40, 54, 2, 0, 32, 0, 65, 216, 0, 40, 2, 0, 54, 2, 28, 12, 2, 11, 32, 1, 45, 0, 12, 65, 8, 113, 32, 4, 32, 2, 77, 114, 32, 3, 32, 2, 75, 114, 13, 0, 32, 2, 65, 120, 32, 2, 107, 65, 7, 113, 65, 0, 32, 2, 65, 8, 106, 65, 7, 113, 27, 34, 3, 106, 34, 4, 32, 0, 65, 12, 106, 34, 9, 40, 2, 0, 32, 7, 106, 34, 10, 32, 3, 107, 34, 3, 65, 1, 114, 54, 2, 4, 32, 1, 65, 4, 106, 32, 6, 32, 7, 106, 54, 2, 0, 32, 0, 65, 216, 0, 40, 2, 0, 54, 2, 28, 32, 9, 32, 3, 54, 2, 0, 32, 0, 65, 24, 106, 32, 4, 54, 2, 0, 32, 2, 32, 10, 106, 65, 40, 54, 2, 4, 12, 1, 11, 32, 4, 32, 0, 40, 2, 16, 34, 6, 73, 4, 64, 32, 0, 65, 16, 106, 32, 4, 54, 2, 0, 32, 4, 33, 6, 11, 32, 4, 32, 7, 106, 33, 3, 32, 9, 33, 1, 2, 127, 2, 64, 2, 127, 2, 64, 2, 64, 2, 64, 2, 64, 3, 64, 32, 1, 40, 2, 0, 32, 3, 70, 13, 1, 32, 1, 40, 2, 8, 34, 1, 13, 0, 12, 2, 11, 0, 11, 32, 1, 45, 0, 12, 65, 8, 113, 13, 0, 32, 1, 32, 4, 54, 2, 0, 32, 1, 32, 1, 40, 2, 4, 32, 7, 106, 54, 2, 4, 32, 4, 65, 120, 32, 4, 107, 65, 7, 113, 65, 0, 32, 4, 65, 8, 106, 65, 7, 113, 27, 106, 34, 7, 32, 5, 65, 3, 114, 54, 2, 4, 32, 3, 65, 120, 32, 3, 107, 65, 7, 113, 65, 0, 32, 3, 65, 8, 106, 65, 7, 113, 27, 106, 34, 4, 32, 7, 107, 32, 5, 107, 33, 1, 32, 7, 32, 5, 106, 33, 3, 32, 2, 32, 4, 70, 13, 1, 32, 0, 40, 2, 20, 32, 4, 70, 13, 8, 32, 4, 40, 2, 4, 34, 2, 65, 3, 113, 65, 1, 71, 13, 14, 32, 2, 65, 120, 113, 33, 10, 32, 2, 65, 255, 1, 75, 13, 9, 32, 4, 40, 2, 12, 33, 8, 32, 4, 40, 2, 8, 34, 5, 32, 0, 32, 2, 65, 3, 118, 34, 9, 65, 3, 116, 106, 65, 40, 106, 34, 2, 71, 4, 64, 32, 6, 32, 5, 75, 32, 5, 40, 2, 12, 32, 4, 71, 114, 13, 14, 11, 32, 8, 32, 5, 70, 13, 10, 32, 8, 32, 2, 71, 4, 64, 32, 6, 32, 8, 75, 32, 8, 40, 2, 8, 32, 4, 71, 114, 13, 14, 11, 32, 5, 32, 8, 54, 2, 12, 32, 8, 65, 8, 106, 32, 5, 54, 2, 0, 12, 13, 11, 32, 9, 33, 1, 2, 64, 3, 64, 32, 1, 40, 2, 0, 34, 3, 32, 2, 77, 4, 64, 32, 3, 32, 1, 40, 2, 4, 106, 34, 3, 32, 2, 75, 13, 2, 11, 32, 1, 40, 2, 8, 33, 1, 12, 0, 11, 0, 11, 32, 4, 65, 120, 32, 4, 107, 65, 7, 113, 65, 0, 32, 4, 65, 8, 106, 65, 7, 113, 27, 34, 1, 106, 34, 10, 32, 7, 65, 88, 106, 34, 6, 32, 1, 107, 34, 1, 65, 1, 114, 54, 2, 4, 32, 4, 32, 6, 106, 65, 40, 54, 2, 4, 32, 2, 32, 3, 65, 39, 32, 3, 107, 65, 7, 113, 65, 0, 32, 3, 65, 89, 106, 65, 7, 113, 27, 106, 65, 81, 106, 34, 6, 32, 6, 32, 2, 65, 16, 106, 73, 27, 34, 6, 65, 27, 54, 2, 4, 32, 0, 65, 216, 0, 40, 2, 0, 54, 2, 28, 32, 0, 65, 12, 106, 32, 1, 54, 2, 0, 32, 0, 65, 24, 106, 32, 10, 54, 2, 0, 32, 6, 32, 9, 40, 2, 0, 54, 2, 8, 32, 6, 65, 20, 106, 32, 9, 65, 12, 106, 40, 2, 0, 54, 2, 0, 32, 6, 65, 16, 106, 32, 9, 65, 8, 106, 40, 2, 0, 54, 2, 0, 32, 6, 65, 12, 106, 32, 9, 65, 4, 106, 40, 2, 0, 54, 2, 0, 32, 0, 32, 7, 54, 2, 196, 3, 32, 0, 65, 192, 3, 106, 32, 4, 54, 2, 0, 32, 0, 65, 0, 54, 2, 204, 3, 32, 0, 32, 6, 65, 8, 106, 54, 2, 200, 3, 32, 6, 65, 28, 106, 33, 1, 3, 64, 32, 1, 65, 7, 54, 2, 0, 32, 1, 65, 4, 106, 34, 1, 32, 3, 73, 13, 0, 11, 32, 6, 32, 2, 70, 13, 5, 32, 6, 65, 4, 106, 34, 1, 32, 1, 40, 2, 0, 65, 126, 113, 54, 2, 0, 32, 6, 32, 6, 32, 2, 107, 34, 7, 54, 2, 0, 32, 2, 32, 7, 65, 1, 114, 54, 2, 4, 32, 7, 65, 255, 1, 77, 4, 64, 32, 0, 32, 7, 65, 3, 118, 34, 3, 65, 3, 116, 106, 65, 40, 106, 33, 1, 32, 0, 40, 2, 0, 34, 4, 65, 1, 32, 3, 116, 34, 3, 113, 69, 13, 2, 32, 1, 32, 1, 40, 2, 8, 34, 3, 32, 0, 65, 16, 106, 40, 2, 0, 32, 3, 75, 27, 12, 3, 11, 32, 7, 65, 8, 118, 34, 3, 69, 13, 3, 65, 31, 32, 7, 65, 255, 255, 255, 7, 75, 13, 4, 26, 32, 7, 65, 14, 32, 3, 32, 3, 65, 128, 254, 63, 106, 65, 16, 118, 65, 8, 113, 34, 1, 116, 34, 3, 65, 128, 224, 31, 106, 65, 16, 118, 65, 4, 113, 34, 4, 32, 1, 114, 32, 3, 32, 4, 116, 34, 1, 65, 128, 128, 15, 106, 65, 16, 118, 65, 2, 113, 34, 3, 114, 107, 32, 1, 32, 3, 116, 65, 15, 118, 106, 34, 1, 65, 7, 106, 118, 65, 1, 113, 32, 1, 65, 1, 116, 114, 12, 4, 11, 32, 0, 65, 24, 106, 32, 3, 54, 2, 0, 32, 0, 65, 12, 106, 34, 2, 32, 2, 40, 2, 0, 32, 1, 106, 34, 1, 54, 2, 0, 32, 3, 32, 1, 65, 1, 114, 54, 2, 4, 12, 13, 11, 32, 0, 32, 4, 32, 3, 114, 54, 2, 0, 32, 1, 11, 34, 3, 32, 2, 54, 2, 12, 32, 1, 65, 8, 106, 32, 2, 54, 2, 0, 32, 2, 32, 1, 54, 2, 12, 32, 2, 32, 3, 54, 2, 8, 12, 2, 11, 65, 0, 11, 33, 1, 32, 2, 66, 0, 55, 2, 16, 32, 2, 65, 28, 106, 32, 1, 54, 2, 0, 32, 0, 32, 1, 65, 2, 116, 106, 65, 176, 2, 106, 33, 3, 2, 64, 2, 64, 32, 0, 40, 2, 4, 34, 4, 65, 1, 32, 1, 116, 34, 6, 113, 4, 64, 32, 7, 65, 0, 65, 25, 32, 1, 65, 1, 118, 107, 32, 1, 65, 31, 70, 27, 116, 33, 1, 32, 3, 40, 2, 0, 33, 4, 3, 64, 32, 4, 34, 3, 40, 2, 4, 65, 120, 113, 32, 7, 70, 13, 3, 32, 1, 65, 29, 118, 33, 4, 32, 1, 65, 1, 116, 33, 1, 32, 3, 32, 4, 65, 4, 113, 106, 65, 16, 106, 34, 6, 40, 2, 0, 34, 4, 13, 0, 11, 32, 0, 65, 16, 106, 40, 2, 0, 32, 6, 75, 13, 3, 32, 6, 32, 2, 54, 2, 0, 32, 2, 65, 24, 106, 32, 3, 54, 2, 0, 12, 1, 11, 32, 0, 65, 4, 106, 32, 4, 32, 6, 114, 54, 2, 0, 32, 3, 32, 2, 54, 2, 0, 32, 2, 65, 24, 106, 32, 3, 54, 2, 0, 11, 32, 2, 32, 2, 54, 2, 12, 32, 2, 32, 2, 54, 2, 8, 12, 1, 11, 32, 0, 65, 16, 106, 40, 2, 0, 34, 4, 32, 3, 40, 2, 8, 34, 1, 75, 32, 4, 32, 3, 75, 114, 13, 0, 32, 1, 32, 2, 54, 2, 12, 32, 3, 65, 8, 106, 32, 2, 54, 2, 0, 32, 2, 32, 3, 54, 2, 12, 32, 2, 65, 24, 106, 65, 0, 54, 2, 0, 32, 2, 32, 1, 54, 2, 8, 11, 32, 0, 65, 12, 106, 34, 1, 40, 2, 0, 34, 2, 32, 5, 77, 13, 0, 32, 0, 65, 24, 106, 34, 4, 40, 2, 0, 34, 3, 32, 5, 106, 34, 6, 32, 2, 32, 5, 107, 34, 2, 65, 1, 114, 54, 2, 4, 32, 1, 32, 2, 54, 2, 0, 32, 4, 32, 6, 54, 2, 0, 32, 3, 32, 5, 65, 3, 114, 54, 2, 4, 32, 3, 65, 8, 106, 33, 8, 11, 32, 8, 15, 11, 32, 3, 32, 0, 65, 8, 106, 34, 2, 40, 2, 0, 32, 1, 106, 34, 1, 65, 1, 114, 54, 2, 4, 32, 0, 65, 20, 106, 32, 3, 54, 2, 0, 32, 2, 32, 1, 54, 2, 0, 32, 3, 32, 1, 106, 32, 1, 54, 2, 0, 12, 6, 11, 32, 4, 40, 2, 24, 33, 11, 2, 64, 32, 4, 40, 2, 12, 34, 8, 32, 4, 71, 4, 64, 32, 6, 32, 4, 40, 2, 8, 34, 2, 75, 32, 2, 40, 2, 12, 32, 4, 71, 114, 32, 8, 40, 2, 8, 32, 4, 71, 114, 13, 1, 32, 8, 65, 8, 106, 32, 2, 54, 2, 0, 32, 2, 65, 12, 106, 32, 8, 54, 2, 0, 32, 11, 13, 4, 12, 5, 11, 32, 4, 65, 20, 106, 34, 2, 40, 2, 0, 34, 5, 69, 4, 64, 32, 4, 65, 16, 106, 34, 2, 40, 2, 0, 34, 5, 69, 13, 3, 11, 3, 64, 32, 2, 33, 9, 32, 5, 34, 8, 65, 20, 106, 34, 2, 40, 2, 0, 34, 5, 13, 0, 32, 8, 65, 16, 106, 33, 2, 32, 8, 40, 2, 16, 34, 5, 13, 0, 11, 32, 6, 32, 9, 75, 13, 0, 32, 9, 65, 0, 54, 2, 0, 11, 32, 11, 69, 13, 3, 12, 2, 11, 32, 0, 32, 0, 40, 2, 0, 65, 126, 32, 9, 119, 113, 54, 2, 0, 12, 2, 11, 65, 0, 33, 8, 32, 11, 69, 13, 1, 11, 2, 64, 2, 64, 32, 0, 32, 4, 40, 2, 28, 34, 5, 65, 2, 116, 106, 65, 176, 2, 106, 34, 2, 40, 2, 0, 32, 4, 71, 4, 64, 32, 0, 65, 16, 106, 40, 2, 0, 32, 11, 77, 4, 64, 32, 11, 65, 16, 106, 32, 11, 40, 2, 16, 32, 4, 71, 65, 2, 116, 106, 32, 8, 54, 2, 0, 11, 32, 8, 13, 1, 12, 3, 11, 32, 2, 32, 8, 54, 2, 0, 32, 8, 69, 13, 1, 11, 32, 0, 65, 16, 106, 40, 2, 0, 34, 5, 32, 8, 75, 13, 1, 32, 8, 32, 11, 54, 2, 24, 32, 4, 40, 2, 16, 34, 2, 69, 32, 5, 32, 2, 75, 114, 69, 4, 64, 32, 8, 32, 2, 54, 2, 16, 32, 2, 32, 8, 54, 2, 24, 11, 32, 4, 65, 20, 106, 40, 2, 0, 34, 2, 69, 32, 0, 65, 16, 106, 40, 2, 0, 32, 2, 75, 114, 13, 1, 32, 8, 65, 20, 106, 32, 2, 54, 2, 0, 32, 2, 32, 8, 54, 2, 24, 12, 1, 11, 32, 0, 32, 0, 40, 2, 4, 65, 126, 32, 5, 119, 113, 54, 2, 4, 11, 32, 10, 32, 1, 106, 33, 1, 32, 4, 32, 10, 106, 33, 4, 11, 32, 4, 32, 4, 40, 2, 4, 65, 126, 113, 54, 2, 4, 32, 3, 32, 1, 65, 1, 114, 54, 2, 4, 32, 3, 32, 1, 106, 32, 1, 54, 2, 0, 2, 127, 2, 64, 2, 127, 2, 64, 32, 1, 65, 255, 1, 77, 4, 64, 32, 0, 32, 1, 65, 3, 118, 34, 2, 65, 3, 116, 106, 65, 40, 106, 33, 1, 32, 0, 40, 2, 0, 34, 5, 65, 1, 32, 2, 116, 34, 2, 113, 69, 13, 1, 32, 1, 65, 8, 106, 33, 5, 32, 1, 32, 1, 40, 2, 8, 34, 2, 32, 0, 65, 16, 106, 40, 2, 0, 32, 2, 75, 27, 12, 2, 11, 32, 1, 65, 8, 118, 34, 5, 69, 13, 2, 65, 31, 32, 1, 65, 255, 255, 255, 7, 75, 13, 3, 26, 32, 1, 65, 14, 32, 5, 32, 5, 65, 128, 254, 63, 106, 65, 16, 118, 65, 8, 113, 34, 2, 116, 34, 5, 65, 128, 224, 31, 106, 65, 16, 118, 65, 4, 113, 34, 4, 32, 2, 114, 32, 5, 32, 4, 116, 34, 2, 65, 128, 128, 15, 106, 65, 16, 118, 65, 2, 113, 34, 5, 114, 107, 32, 2, 32, 5, 116, 65, 15, 118, 106, 34, 2, 65, 7, 106, 118, 65, 1, 113, 32, 2, 65, 1, 116, 114, 12, 3, 11, 32, 0, 32, 5, 32, 2, 114, 54, 2, 0, 32, 1, 65, 8, 106, 33, 5, 32, 1, 11, 34, 2, 32, 3, 54, 2, 12, 32, 5, 32, 3, 54, 2, 0, 32, 3, 32, 1, 54, 2, 12, 32, 3, 32, 2, 54, 2, 8, 12, 2, 11, 65, 0, 11, 33, 2, 32, 3, 32, 2, 54, 2, 28, 32, 3, 66, 0, 55, 2, 16, 32, 0, 32, 2, 65, 2, 116, 106, 65, 176, 2, 106, 33, 5, 2, 64, 2, 64, 32, 0, 40, 2, 4, 34, 4, 65, 1, 32, 2, 116, 34, 6, 113, 4, 64, 32, 1, 65, 0, 65, 25, 32, 2, 65, 1, 118, 107, 32, 2, 65, 31, 70, 27, 116, 33, 2, 32, 5, 40, 2, 0, 33, 4, 3, 64, 32, 4, 34, 5, 40, 2, 4, 65, 120, 113, 32, 1, 70, 13, 3, 32, 2, 65, 29, 118, 33, 4, 32, 2, 65, 1, 116, 33, 2, 32, 5, 32, 4, 65, 4, 113, 106, 65, 16, 106, 34, 6, 40, 2, 0, 34, 4, 13, 0, 11, 32, 0, 65, 16, 106, 40, 2, 0, 32, 6, 75, 13, 3, 32, 6, 32, 3, 54, 2, 0, 32, 3, 32, 5, 54, 2, 24, 12, 1, 11, 32, 0, 65, 4, 106, 32, 4, 32, 6, 114, 54, 2, 0, 32, 5, 32, 3, 54, 2, 0, 32, 3, 32, 5, 54, 2, 24, 11, 32, 3, 32, 3, 54, 2, 12, 32, 3, 32, 3, 54, 2, 8, 12, 1, 11, 32, 0, 65, 16, 106, 40, 2, 0, 34, 2, 32, 5, 40, 2, 8, 34, 1, 75, 32, 2, 32, 5, 75, 114, 13, 0, 32, 1, 32, 3, 54, 2, 12, 32, 5, 65, 8, 106, 32, 3, 54, 2, 0, 32, 3, 65, 0, 54, 2, 24, 32, 3, 32, 5, 54, 2, 12, 32, 3, 32, 1, 54, 2, 8, 11, 32, 7, 65, 8, 106, 15, 11, 2, 64, 2, 64, 32, 4, 32, 0, 32, 4, 40, 2, 28, 34, 2, 65, 2, 116, 106, 65, 176, 2, 106, 34, 1, 40, 2, 0, 71, 4, 64, 32, 0, 65, 16, 106, 40, 2, 0, 32, 7, 77, 4, 64, 32, 7, 65, 16, 106, 32, 7, 40, 2, 16, 32, 4, 71, 65, 2, 116, 106, 32, 6, 54, 2, 0, 11, 32, 6, 13, 1, 12, 3, 11, 32, 1, 32, 6, 54, 2, 0, 32, 6, 69, 13, 1, 11, 32, 0, 65, 16, 106, 40, 2, 0, 34, 2, 32, 6, 75, 13, 1, 32, 6, 32, 7, 54, 2, 24, 32, 4, 40, 2, 16, 34, 1, 69, 32, 2, 32, 1, 75, 114, 69, 4, 64, 32, 6, 32, 1, 54, 2, 16, 32, 1, 32, 6, 54, 2, 24, 11, 32, 4, 65, 20, 106, 40, 2, 0, 34, 1, 69, 32, 0, 65, 16, 106, 40, 2, 0, 32, 1, 75, 114, 13, 1, 32, 6, 65, 20, 106, 32, 1, 54, 2, 0, 32, 1, 32, 6, 54, 2, 24, 12, 1, 11, 32, 0, 65, 4, 106, 34, 1, 32, 1, 40, 2, 0, 65, 126, 32, 2, 119, 113, 54, 2, 0, 11, 2, 64, 32, 3, 65, 15, 77, 4, 64, 32, 4, 32, 3, 32, 5, 106, 34, 1, 65, 3, 114, 54, 2, 4, 32, 4, 32, 1, 106, 34, 1, 32, 1, 40, 2, 4, 65, 1, 114, 54, 2, 4, 12, 1, 11, 32, 4, 32, 5, 65, 3, 114, 54, 2, 4, 32, 9, 32, 3, 65, 1, 114, 54, 2, 4, 32, 9, 32, 3, 106, 32, 3, 54, 2, 0, 2, 127, 2, 64, 2, 127, 2, 64, 32, 3, 65, 255, 1, 77, 4, 64, 32, 0, 32, 3, 65, 3, 118, 34, 2, 65, 3, 116, 106, 65, 40, 106, 33, 1, 32, 0, 40, 2, 0, 34, 3, 65, 1, 32, 2, 116, 34, 2, 113, 69, 13, 1, 32, 1, 65, 8, 106, 33, 3, 32, 1, 32, 1, 40, 2, 8, 34, 2, 32, 0, 65, 16, 106, 40, 2, 0, 32, 2, 75, 27, 12, 2, 11, 32, 3, 65, 8, 118, 34, 2, 69, 13, 2, 65, 31, 32, 3, 65, 255, 255, 255, 7, 75, 13, 3, 26, 32, 3, 65, 14, 32, 2, 32, 2, 65, 128, 254, 63, 106, 65, 16, 118, 65, 8, 113, 34, 1, 116, 34, 2, 65, 128, 224, 31, 106, 65, 16, 118, 65, 4, 113, 34, 5, 32, 1, 114, 32, 2, 32, 5, 116, 34, 1, 65, 128, 128, 15, 106, 65, 16, 118, 65, 2, 113, 34, 2, 114, 107, 32, 1, 32, 2, 116, 65, 15, 118, 106, 34, 1, 65, 7, 106, 118, 65, 1, 113, 32, 1, 65, 1, 116, 114, 12, 3, 11, 32, 0, 32, 3, 32, 2, 114, 54, 2, 0, 32, 1, 65, 8, 106, 33, 3, 32, 1, 11, 34, 2, 32, 9, 54, 2, 12, 32, 3, 32, 9, 54, 2, 0, 32, 9, 32, 1, 54, 2, 12, 32, 9, 32, 2, 54, 2, 8, 12, 2, 11, 65, 0, 11, 33, 1, 32, 9, 32, 1, 54, 2, 28, 32, 9, 66, 0, 55, 2, 16, 32, 0, 32, 1, 65, 2, 116, 106, 65, 176, 2, 106, 33, 2, 2, 64, 2, 64, 32, 0, 65, 4, 106, 34, 5, 40, 2, 0, 34, 6, 65, 1, 32, 1, 116, 34, 8, 113, 4, 64, 32, 3, 65, 0, 65, 25, 32, 1, 65, 1, 118, 107, 32, 1, 65, 31, 70, 27, 116, 33, 1, 32, 2, 40, 2, 0, 33, 5, 3, 64, 32, 5, 34, 2, 40, 2, 4, 65, 120, 113, 32, 3, 70, 13, 3, 32, 1, 65, 29, 118, 33, 5, 32, 1, 65, 1, 116, 33, 1, 32, 2, 32, 5, 65, 4, 113, 106, 65, 16, 106, 34, 6, 40, 2, 0, 34, 5, 13, 0, 11, 32, 0, 65, 16, 106, 40, 2, 0, 32, 6, 75, 13, 3, 32, 6, 32, 9, 54, 2, 0, 32, 9, 32, 2, 54, 2, 24, 12, 1, 11, 32, 5, 32, 6, 32, 8, 114, 54, 2, 0, 32, 2, 32, 9, 54, 2, 0, 32, 9, 32, 2, 54, 2, 24, 11, 32, 9, 32, 9, 54, 2, 12, 32, 9, 32, 9, 54, 2, 8, 12, 1, 11, 32, 0, 65, 16, 106, 40, 2, 0, 34, 3, 32, 2, 40, 2, 8, 34, 1, 75, 32, 3, 32, 2, 75, 114, 13, 0, 32, 1, 32, 9, 54, 2, 12, 32, 2, 65, 8, 106, 32, 9, 54, 2, 0, 32, 9, 65, 0, 54, 2, 24, 32, 9, 32, 2, 54, 2, 12, 32, 9, 32, 1, 54, 2, 8, 11, 32, 4, 65, 8, 106, 11, 11, 171, 144, 128, 128, 0, 1, 8, 127, 2, 64, 32, 1, 69, 13, 0, 32, 1, 65, 120, 106, 34, 2, 32, 0, 40, 2, 16, 34, 8, 73, 13, 0, 32, 1, 65, 124, 106, 40, 2, 0, 34, 1, 65, 3, 113, 34, 4, 65, 1, 70, 13, 0, 32, 2, 32, 1, 65, 120, 113, 34, 6, 106, 33, 5, 2, 64, 2, 64, 32, 1, 65, 1, 113, 13, 0, 32, 4, 69, 13, 2, 32, 2, 32, 2, 40, 2, 0, 34, 1, 107, 34, 2, 32, 8, 73, 13, 2, 32, 1, 32, 6, 106, 33, 6, 2, 64, 2, 64, 2, 64, 2, 64, 32, 0, 40, 2, 20, 32, 2, 71, 4, 64, 32, 1, 65, 255, 1, 75, 13, 1, 32, 2, 40, 2, 12, 33, 3, 32, 2, 40, 2, 8, 34, 4, 32, 0, 32, 1, 65, 3, 118, 34, 7, 65, 3, 116, 106, 65, 40, 106, 34, 1, 71, 4, 64, 32, 8, 32, 4, 75, 32, 4, 40, 2, 12, 32, 2, 71, 114, 13, 6, 11, 32, 3, 32, 4, 70, 13, 2, 32, 3, 32, 1, 71, 4, 64, 32, 8, 32, 3, 75, 32, 3, 40, 2, 8, 32, 2, 71, 114, 13, 6, 11, 32, 4, 32, 3, 54, 2, 12, 32, 3, 65, 8, 106, 32, 4, 54, 2, 0, 32, 2, 32, 5, 73, 13, 6, 12, 7, 11, 32, 5, 40, 2, 4, 34, 1, 65, 3, 113, 65, 3, 71, 13, 4, 32, 5, 65, 4, 106, 32, 1, 65, 126, 113, 54, 2, 0, 32, 2, 32, 6, 65, 1, 114, 54, 2, 4, 32, 0, 32, 6, 54, 2, 8, 32, 2, 32, 6, 106, 32, 6, 54, 2, 0, 15, 11, 32, 2, 40, 2, 24, 33, 9, 2, 64, 32, 2, 40, 2, 12, 34, 3, 32, 2, 71, 4, 64, 32, 8, 32, 2, 40, 2, 8, 34, 1, 75, 32, 1, 40, 2, 12, 32, 2, 71, 114, 32, 3, 40, 2, 8, 32, 2, 71, 114, 13, 1, 32, 3, 65, 8, 106, 32, 1, 54, 2, 0, 32, 1, 65, 12, 106, 32, 3, 54, 2, 0, 32, 9, 13, 4, 12, 5, 11, 32, 2, 65, 20, 106, 34, 1, 40, 2, 0, 34, 4, 69, 4, 64, 32, 2, 65, 16, 106, 34, 1, 40, 2, 0, 34, 4, 69, 13, 3, 11, 3, 64, 32, 1, 33, 7, 32, 4, 34, 3, 65, 20, 106, 34, 1, 40, 2, 0, 34, 4, 13, 0, 32, 3, 65, 16, 106, 33, 1, 32, 3, 40, 2, 16, 34, 4, 13, 0, 11, 32, 8, 32, 7, 75, 13, 0, 32, 7, 65, 0, 54, 2, 0, 11, 32, 9, 69, 13, 3, 12, 2, 11, 32, 0, 32, 0, 40, 2, 0, 65, 126, 32, 7, 119, 113, 54, 2, 0, 32, 2, 32, 5, 73, 13, 3, 12, 4, 11, 65, 0, 33, 3, 32, 9, 69, 13, 1, 11, 2, 64, 2, 64, 32, 0, 32, 2, 40, 2, 28, 34, 4, 65, 2, 116, 106, 65, 176, 2, 106, 34, 1, 40, 2, 0, 32, 2, 71, 4, 64, 32, 0, 65, 16, 106, 40, 2, 0, 32, 9, 77, 4, 64, 32, 9, 65, 16, 106, 32, 9, 40, 2, 16, 32, 2, 71, 65, 2, 116, 106, 32, 3, 54, 2, 0, 11, 32, 3, 13, 1, 12, 3, 11, 32, 1, 32, 3, 54, 2, 0, 32, 3, 69, 13, 1, 11, 32, 0, 65, 16, 106, 40, 2, 0, 34, 4, 32, 3, 75, 13, 1, 32, 3, 32, 9, 54, 2, 24, 32, 2, 40, 2, 16, 34, 1, 69, 32, 4, 32, 1, 75, 114, 69, 4, 64, 32, 3, 32, 1, 54, 2, 16, 32, 1, 32, 3, 54, 2, 24, 11, 32, 2, 65, 20, 106, 40, 2, 0, 34, 1, 69, 32, 0, 65, 16, 106, 40, 2, 0, 32, 1, 75, 114, 13, 1, 32, 3, 65, 20, 106, 32, 1, 54, 2, 0, 32, 1, 32, 3, 54, 2, 24, 32, 2, 32, 5, 73, 13, 2, 12, 3, 11, 32, 0, 32, 0, 40, 2, 4, 65, 126, 32, 4, 119, 113, 54, 2, 4, 11, 32, 2, 32, 5, 79, 13, 1, 11, 32, 5, 40, 2, 4, 34, 1, 65, 1, 113, 69, 13, 0, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 32, 1, 65, 2, 113, 69, 4, 64, 32, 0, 40, 2, 24, 32, 5, 70, 13, 1, 32, 0, 40, 2, 20, 32, 5, 70, 13, 2, 32, 1, 65, 120, 113, 32, 6, 106, 33, 6, 32, 1, 65, 255, 1, 75, 13, 3, 32, 5, 40, 2, 12, 33, 3, 32, 5, 40, 2, 8, 34, 4, 32, 0, 32, 1, 65, 3, 118, 34, 8, 65, 3, 116, 106, 65, 40, 106, 34, 1, 71, 4, 64, 32, 0, 65, 16, 106, 40, 2, 0, 32, 4, 75, 32, 4, 40, 2, 12, 32, 5, 71, 114, 13, 8, 11, 32, 3, 32, 4, 70, 13, 4, 32, 3, 32, 1, 71, 4, 64, 32, 0, 65, 16, 106, 40, 2, 0, 32, 3, 75, 32, 3, 40, 2, 8, 32, 5, 71, 114, 13, 8, 11, 32, 4, 32, 3, 54, 2, 12, 32, 3, 65, 8, 106, 32, 4, 54, 2, 0, 12, 7, 11, 32, 5, 65, 4, 106, 32, 1, 65, 126, 113, 54, 2, 0, 32, 2, 32, 6, 106, 32, 6, 54, 2, 0, 32, 2, 32, 6, 65, 1, 114, 54, 2, 4, 12, 7, 11, 32, 0, 65, 24, 106, 32, 2, 54, 2, 0, 32, 0, 32, 0, 40, 2, 12, 32, 6, 106, 34, 1, 54, 2, 12, 32, 2, 32, 1, 65, 1, 114, 54, 2, 4, 32, 2, 32, 0, 40, 2, 20, 71, 13, 7, 32, 0, 65, 0, 54, 2, 8, 32, 0, 65, 20, 106, 65, 0, 54, 2, 0, 15, 11, 32, 0, 65, 20, 106, 32, 2, 54, 2, 0, 32, 0, 32, 0, 40, 2, 8, 32, 6, 106, 34, 1, 54, 2, 8, 32, 2, 32, 1, 65, 1, 114, 54, 2, 4, 32, 2, 32, 1, 106, 32, 1, 54, 2, 0, 15, 11, 32, 5, 40, 2, 24, 33, 7, 2, 64, 32, 5, 40, 2, 12, 34, 3, 32, 5, 71, 4, 64, 32, 0, 65, 16, 106, 40, 2, 0, 32, 5, 40, 2, 8, 34, 1, 75, 32, 1, 40, 2, 12, 32, 5, 71, 114, 32, 3, 40, 2, 8, 32, 5, 71, 114, 13, 1, 32, 3, 65, 8, 106, 32, 1, 54, 2, 0, 32, 1, 65, 12, 106, 32, 3, 54, 2, 0, 32, 7, 13, 4, 12, 5, 11, 32, 5, 65, 20, 106, 34, 1, 40, 2, 0, 34, 4, 69, 4, 64, 32, 5, 65, 16, 106, 34, 1, 40, 2, 0, 34, 4, 69, 13, 3, 11, 3, 64, 32, 1, 33, 8, 32, 4, 34, 3, 65, 20, 106, 34, 1, 40, 2, 0, 34, 4, 13, 0, 32, 3, 65, 16, 106, 33, 1, 32, 3, 40, 2, 16, 34, 4, 13, 0, 11, 32, 0, 65, 16, 106, 40, 2, 0, 32, 8, 75, 13, 0, 32, 8, 65, 0, 54, 2, 0, 11, 32, 7, 69, 13, 3, 12, 2, 11, 32, 0, 32, 0, 40, 2, 0, 65, 126, 32, 8, 119, 113, 54, 2, 0, 12, 2, 11, 65, 0, 33, 3, 32, 7, 69, 13, 1, 11, 2, 64, 2, 64, 32, 0, 32, 5, 40, 2, 28, 34, 4, 65, 2, 116, 106, 65, 176, 2, 106, 34, 1, 40, 2, 0, 32, 5, 71, 4, 64, 32, 0, 65, 16, 106, 40, 2, 0, 32, 7, 77, 4, 64, 32, 7, 65, 16, 106, 32, 7, 40, 2, 16, 32, 5, 71, 65, 2, 116, 106, 32, 3, 54, 2, 0, 11, 32, 3, 13, 1, 12, 3, 11, 32, 1, 32, 3, 54, 2, 0, 32, 3, 69, 13, 1, 11, 32, 0, 65, 16, 106, 40, 2, 0, 34, 4, 32, 3, 75, 13, 1, 32, 3, 32, 7, 54, 2, 24, 32, 5, 40, 2, 16, 34, 1, 69, 32, 4, 32, 1, 75, 114, 69, 4, 64, 32, 3, 32, 1, 54, 2, 16, 32, 1, 32, 3, 54, 2, 24, 11, 32, 5, 65, 20, 106, 40, 2, 0, 34, 1, 69, 32, 0, 65, 16, 106, 40, 2, 0, 32, 1, 75, 114, 13, 1, 32, 3, 65, 20, 106, 32, 1, 54, 2, 0, 32, 1, 32, 3, 54, 2, 24, 12, 1, 11, 32, 0, 32, 0, 40, 2, 4, 65, 126, 32, 4, 119, 113, 54, 2, 4, 11, 32, 2, 32, 6, 106, 32, 6, 54, 2, 0, 32, 2, 32, 6, 65, 1, 114, 54, 2, 4, 32, 2, 32, 0, 65, 20, 106, 40, 2, 0, 71, 13, 0, 32, 0, 32, 6, 54, 2, 8, 15, 11, 2, 127, 2, 64, 2, 127, 2, 64, 32, 6, 65, 255, 1, 77, 4, 64, 32, 0, 32, 6, 65, 3, 118, 34, 4, 65, 3, 116, 106, 65, 40, 106, 33, 1, 32, 0, 40, 2, 0, 34, 6, 65, 1, 32, 4, 116, 34, 4, 113, 69, 13, 1, 32, 1, 32, 1, 40, 2, 8, 34, 4, 32, 0, 65, 16, 106, 40, 2, 0, 32, 4, 75, 27, 12, 2, 11, 32, 6, 65, 8, 118, 34, 4, 69, 13, 2, 65, 31, 32, 6, 65, 255, 255, 255, 7, 75, 13, 3, 26, 32, 6, 65, 14, 32, 4, 32, 4, 65, 128, 254, 63, 106, 65, 16, 118, 65, 8, 113, 34, 1, 116, 34, 4, 65, 128, 224, 31, 106, 65, 16, 118, 65, 4, 113, 34, 3, 32, 1, 114, 32, 4, 32, 3, 116, 34, 1, 65, 128, 128, 15, 106, 65, 16, 118, 65, 2, 113, 34, 4, 114, 107, 32, 1, 32, 4, 116, 65, 15, 118, 106, 34, 1, 65, 7, 106, 118, 65, 1, 113, 32, 1, 65, 1, 116, 114, 12, 3, 11, 32, 0, 32, 6, 32, 4, 114, 54, 2, 0, 32, 1, 11, 34, 0, 32, 2, 54, 2, 12, 32, 1, 65, 8, 106, 32, 2, 54, 2, 0, 32, 2, 32, 1, 54, 2, 12, 32, 2, 32, 0, 54, 2, 8, 15, 11, 65, 0, 11, 33, 1, 32, 2, 66, 0, 55, 2, 16, 32, 2, 65, 28, 106, 32, 1, 54, 2, 0, 32, 0, 32, 1, 65, 2, 116, 106, 65, 176, 2, 106, 33, 4, 2, 64, 2, 64, 2, 64, 32, 0, 40, 2, 4, 34, 3, 65, 1, 32, 1, 116, 34, 5, 113, 4, 64, 32, 6, 65, 0, 65, 25, 32, 1, 65, 1, 118, 107, 32, 1, 65, 31, 70, 27, 116, 33, 1, 32, 4, 40, 2, 0, 33, 3, 3, 64, 32, 3, 34, 4, 40, 2, 4, 65, 120, 113, 32, 6, 70, 13, 3, 32, 1, 65, 29, 118, 33, 3, 32, 1, 65, 1, 116, 33, 1, 32, 4, 32, 3, 65, 4, 113, 106, 65, 16, 106, 34, 5, 40, 2, 0, 34, 3, 13, 0, 11, 32, 0, 65, 16, 106, 40, 2, 0, 32, 5, 75, 13, 3, 32, 5, 32, 2, 54, 2, 0, 32, 2, 65, 24, 106, 32, 4, 54, 2, 0, 12, 1, 11, 32, 0, 65, 4, 106, 32, 3, 32, 5, 114, 54, 2, 0, 32, 4, 32, 2, 54, 2, 0, 32, 2, 65, 24, 106, 32, 4, 54, 2, 0, 11, 32, 2, 32, 2, 54, 2, 12, 32, 2, 32, 2, 54, 2, 8, 12, 1, 11, 32, 0, 65, 16, 106, 40, 2, 0, 34, 6, 32, 4, 40, 2, 8, 34, 1, 75, 32, 6, 32, 4, 75, 114, 13, 0, 32, 1, 32, 2, 54, 2, 12, 32, 4, 65, 8, 106, 32, 2, 54, 2, 0, 32, 2, 32, 4, 54, 2, 12, 32, 2, 65, 24, 106, 65, 0, 54, 2, 0, 32, 2, 32, 1, 54, 2, 8, 11, 32, 0, 32, 0, 40, 2, 32, 65, 127, 106, 34, 1, 54, 2, 32, 32, 1, 13, 0, 32, 0, 65, 200, 3, 106, 33, 1, 3, 64, 32, 1, 40, 2, 0, 34, 2, 65, 8, 106, 33, 1, 32, 2, 13, 0, 11, 32, 0, 65, 32, 106, 65, 127, 54, 2, 0, 11, 11, 222, 131, 128, 128, 0, 1, 9, 127, 2, 127, 32, 0, 33, 4, 63, 0, 65, 16, 116, 32, 0, 107, 33, 5, 32, 0, 33, 1, 65, 192, 0, 65, 192, 0, 40, 2, 0, 65, 16, 107, 34, 9, 54, 2, 0, 65, 0, 33, 7, 65, 200, 0, 40, 2, 0, 34, 3, 69, 4, 64, 65, 204, 0, 66, 128, 128, 132, 128, 128, 128, 192, 0, 55, 2, 0, 65, 212, 0, 66, 127, 55, 2, 0, 65, 200, 0, 32, 9, 65, 12, 106, 65, 112, 113, 65, 216, 170, 213, 170, 5, 115, 34, 3, 54, 2, 0, 65, 220, 0, 65, 0, 54, 2, 0, 11, 2, 64, 32, 5, 65, 137, 4, 73, 13, 0, 65, 0, 33, 7, 65, 248, 123, 65, 204, 0, 40, 2, 0, 107, 32, 5, 77, 13, 0, 65, 0, 33, 2, 32, 4, 65, 120, 32, 4, 107, 65, 7, 113, 65, 0, 32, 4, 65, 8, 106, 65, 7, 113, 27, 106, 34, 1, 65, 8, 106, 34, 7, 65, 0, 65, 224, 3, 16, 2, 33, 6, 32, 1, 65, 227, 3, 54, 2, 4, 32, 1, 65, 188, 3, 106, 32, 5, 54, 2, 0, 32, 1, 65, 184, 3, 106, 32, 5, 54, 2, 0, 32, 1, 65, 204, 3, 106, 32, 5, 54, 2, 0, 32, 1, 65, 44, 106, 32, 3, 54, 2, 0, 32, 1, 65, 40, 106, 65, 127, 54, 2, 0, 32, 1, 65, 24, 106, 32, 4, 54, 2, 0, 32, 1, 65, 200, 3, 106, 32, 4, 54, 2, 0, 32, 1, 65, 216, 3, 106, 65, 0, 54, 2, 0, 65, 220, 0, 40, 2, 0, 33, 3, 32, 1, 65, 220, 3, 106, 65, 0, 54, 2, 0, 32, 1, 65, 196, 3, 106, 32, 3, 65, 4, 114, 54, 2, 0, 3, 64, 32, 1, 32, 2, 106, 34, 3, 65, 56, 106, 32, 3, 65, 48, 106, 34, 8, 54, 2, 0, 32, 3, 65, 60, 106, 32, 8, 54, 2, 0, 32, 2, 65, 8, 106, 34, 2, 65, 128, 2, 71, 13, 0, 11, 32, 6, 32, 6, 65, 124, 106, 40, 2, 0, 65, 120, 113, 106, 34, 2, 65, 120, 106, 34, 3, 65, 0, 32, 2, 107, 65, 7, 113, 65, 0, 32, 2, 65, 7, 113, 27, 34, 2, 106, 34, 8, 32, 4, 32, 5, 106, 34, 1, 32, 3, 107, 65, 88, 106, 32, 2, 107, 34, 2, 65, 1, 114, 54, 2, 4, 32, 6, 65, 8, 54, 2, 204, 3, 32, 6, 65, 216, 0, 40, 2, 0, 54, 2, 28, 32, 6, 32, 8, 54, 2, 24, 32, 6, 32, 2, 54, 2, 12, 32, 1, 65, 92, 106, 65, 40, 54, 2, 0, 11, 65, 192, 0, 32, 9, 65, 16, 106, 54, 2, 0, 32, 7, 11, 11, 0, 205, 128, 128, 128, 0, 4, 110, 97, 109, 101, 1, 194, 128, 128, 128, 0, 6, 0, 6, 109, 101, 109, 99, 109, 112, 1, 6, 109, 101, 109, 99, 112, 121, 2, 6, 109, 101, 109, 115, 101, 116, 3, 13, 109, 115, 112, 97, 99, 101, 95, 109, 97, 108, 108, 111, 99, 4, 11, 109, 115, 112, 97, 99, 101, 95, 102, 114, 101, 101, 5, 11, 109, 115, 112, 97, 99, 101, 95, 105, 110, 105, 116]); function getMallocInstance() { const mod = new WebAssembly.Module(dlmallocBin); return new WebAssembly.Instance(mod); } function appendMalloc(imports) { const mallocInstance = getMallocInstance(); if (imports.internal === undefined) { imports.internal = mallocInstance.exports; } else { let internal = imports.internal; let malloc = mallocInstance.exports; imports.internal = {...internal, ...malloc}; } return imports; } /** * Clean old output file if exists * @param file */ function clean(file: string) { if (fs.existsSync(file)) { fs.unlinkSync(file); } } function getDefaultOutputFile(inputFile: string, target: string = "wasm"): string { const sep = path.sep; let fileName = inputFile.substring(inputFile.lastIndexOf(sep), inputFile.length); let folderName = inputFile.substring(0, inputFile.lastIndexOf(sep)); return `${folderName}${sep}bin${sep}${fileName.replace(".tbs", "." + target)}`; }