@zh-keyboard/pinyin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/data/default.yaml +129 -0
- package/data/luna_pinyin.prism.bin +0 -0
- package/data/luna_pinyin.reverse.bin +0 -0
- package/data/luna_pinyin.schema.yaml +179 -0
- package/data/luna_pinyin.table.bin +0 -0
- package/data/rime-api.data +0 -0
- package/data/rime-api.js +1957 -0
- package/data/rime-api.wasm +0 -0
- package/dist/index.d.mts +72 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.js +3582 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3580 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["Module","result","err","db","e","xhr","ret","wasmExports","module: EmscriptenModule","populate: boolean","err: unknown","options: RimeWasmOptions","Module: EmscriptenModule","file: string","fn: string","argTypes: string[]","args: unknown[]","engine: RimeEngine","keys: string","index: number","forward: boolean","name: string","value: boolean","options: RimePinyinEngineOptions","fullPinyin: string","state: RimeState","index: number","simplified: boolean"],"sources":["../data/rime-api.js","../src/rime.ts","../src/index.ts"],"sourcesContent":["async function createRimeModule(moduleArg = {}) {\n let moduleRtn; const Module = moduleArg; const ENVIRONMENT_IS_WEB = !!globalThis.window; const ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope; const ENVIRONMENT_IS_NODE = globalThis.process?.versions?.node && globalThis.process?.type != 'renderer'; if (ENVIRONMENT_IS_NODE) {\n const { createRequire } = await import('node:module'); var require = createRequire(import.meta.url)\n } if (!Module.expectedDataFileDownloads)\n Module.expectedDataFileDownloads = 0; Module.expectedDataFileDownloads++; (() => {\n const isPthread = typeof ENVIRONMENT_IS_PTHREAD != 'undefined' && ENVIRONMENT_IS_PTHREAD; const isWasmWorker = typeof ENVIRONMENT_IS_WASM_WORKER != 'undefined' && ENVIRONMENT_IS_WASM_WORKER; if (isPthread || isWasmWorker)\n return; const isNode = globalThis.process && globalThis.process.versions && globalThis.process.versions.node && globalThis.process.type != 'renderer'; async function loadPackage(metadata) {\n let PACKAGE_PATH = ''; if (typeof window === 'object') {\n PACKAGE_PATH = window.encodeURIComponent(`${window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/'))}/`)\n } else if (typeof process === 'undefined' && typeof location !== 'undefined') {\n PACKAGE_PATH = encodeURIComponent(`${location.pathname.substring(0, location.pathname.lastIndexOf('/'))}/`)\n } const PACKAGE_NAME = '/home/zzx/work/librime/wasm/dist/rime-api.data'; const REMOTE_PACKAGE_BASE = 'rime-api.data'; const REMOTE_PACKAGE_NAME = Module.locateFile ? Module.locateFile(REMOTE_PACKAGE_BASE, '') : REMOTE_PACKAGE_BASE; const REMOTE_PACKAGE_SIZE = metadata.remote_package_size; async function fetchRemotePackage(packageName, packageSize) {\n if (isNode) {\n const contents = require('node:fs').readFileSync(packageName); return new Uint8Array(contents).buffer\n } if (!Module.dataFileDownloads)\n Module.dataFileDownloads = {}; try {\n var response = await fetch(packageName)\n } catch (e) {\n throw new Error(`Network Error: ${packageName}`, { e })\n } if (!response.ok) {\n throw new Error(`${response.status}: ${response.url}`)\n } const chunks = []; const headers = response.headers; const total = Number(headers.get('Content-Length') || packageSize); let loaded = 0; Module.setStatus && Module.setStatus('Downloading data...'); const reader = response.body.getReader(); while (1) {\n const { done, value } = await reader.read(); if (done)\n break; chunks.push(value); loaded += value.length; Module.dataFileDownloads[packageName] = { loaded, total }; let totalLoaded = 0; let totalSize = 0; for (const download of Object.values(Module.dataFileDownloads)) {\n totalLoaded += download.loaded; totalSize += download.total\n }Module.setStatus && Module.setStatus(`Downloading data... (${totalLoaded}/${totalSize})`)\n } const packageData = new Uint8Array(chunks.map(c => c.length).reduce((a, b) => a + b, 0)); let offset = 0; for (const chunk of chunks) {\n packageData.set(chunk, offset); offset += chunk.length\n } return packageData.buffer\n } let fetchPromise; let fetched = Module.getPreloadedPackage && Module.getPreloadedPackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE); if (!fetched) {\n fetchPromise = fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE)\n } async function runWithFS(Module) {\n function assert(check, msg) {\n if (!check)\n throw new Error(msg)\n }Module.FS_createPath('/', 'rime', true, true); Module.FS_createPath('/rime', 'opencc', true, true); for (const file of metadata.files) {\n const name = file.filename; Module.addRunDependency(`fp ${name}`)\n } async function processPackageData(arrayBuffer) {\n assert(arrayBuffer, 'Loading data file failed.'); assert(arrayBuffer.constructor.name === ArrayBuffer.name, `bad input to processPackageData ${arrayBuffer.constructor.name}`); const byteArray = new Uint8Array(arrayBuffer); for (const file of metadata.files) {\n const name = file.filename; const data = byteArray.subarray(file.start, file.end); Module.FS_createDataFile(name, null, data, true, true, true); Module.removeRunDependency(`fp ${name}`)\n }Module.removeRunDependency('datafile_/home/zzx/work/librime/wasm/dist/rime-api.data')\n }Module.addRunDependency('datafile_/home/zzx/work/librime/wasm/dist/rime-api.data'); if (!Module.preloadResults)\n Module.preloadResults = {}; Module.preloadResults[PACKAGE_NAME] = { fromCache: false }; if (!fetched) {\n fetched = await fetchPromise\n }processPackageData(fetched)\n } if (Module.calledRun) {\n runWithFS(Module)\n } else {\n if (!Module.preRun)\n Module.preRun = []; Module.preRun.push(runWithFS)\n }\n }loadPackage({ files: [{ filename: '/rime/opencc/STCharacters.ocd2', start: 0, end: 45310 }, { filename: '/rime/opencc/STPhrases.ocd2', start: 45310, end: 971027 }, { filename: '/rime/opencc/TSCharacters.ocd2', start: 971027, end: 1017153 }, { filename: '/rime/opencc/TSPhrases.ocd2', start: 1017153, end: 1026935 }, { filename: '/rime/opencc/s2t.json', start: 1026935, end: 1027341 }, { filename: '/rime/opencc/t2s.json', start: 1027341, end: 1027747 }], remote_package_size: 1027747 })\n })(); let arguments_ = []; let thisProgram = './this.program'; let quit_ = (status, toThrow) => {\n throw toThrow\n }; const _scriptName = import.meta.url; let scriptDirectory = ''; function locateFile(path) {\n if (Module.locateFile) {\n return Module.locateFile(path, scriptDirectory)\n } return scriptDirectory + path\n } let readAsync, readBinary; if (ENVIRONMENT_IS_NODE) {\n var fs = require('node:fs'); if (_scriptName.startsWith('file:')) {\n scriptDirectory = `${require('node:path').dirname(require('node:url').fileURLToPath(_scriptName))}/`\n }readBinary = (filename) => {\n filename = isFileURI(filename) ? new URL(filename) : filename; const ret = fs.readFileSync(filename); return ret\n }; readAsync = async (filename, binary = true) => {\n filename = isFileURI(filename) ? new URL(filename) : filename; const ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); return ret\n }; if (process.argv.length > 1) {\n thisProgram = process.argv[1].replace(/\\\\/g, '/')\n }arguments_ = process.argv.slice(2); quit_ = (status, toThrow) => {\n process.exitCode = status; throw toThrow\n }\n } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n try {\n scriptDirectory = new URL('.', _scriptName).href\n } catch {} { if (ENVIRONMENT_IS_WORKER) {\n readBinary = (url) => {\n const xhr = new XMLHttpRequest(); xhr.open('GET', url, false); xhr.responseType = 'arraybuffer'; xhr.send(null); return new Uint8Array(xhr.response)\n }\n }readAsync = async (url) => {\n if (isFileURI(url)) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'arraybuffer'; xhr.onload = () => {\n if (xhr.status == 200 || xhr.status == 0 && xhr.response) {\n resolve(xhr.response); return\n }reject(xhr.status)\n }; xhr.onerror = reject; xhr.send(null)\n })\n } const response = await fetch(url, { credentials: 'same-origin' }); if (response.ok) {\n return response.arrayBuffer()\n } throw new Error(`${response.status} : ${response.url}`)\n } }\n } else {} let out = console.log.bind(console); let err = console.error.bind(console); let wasmBinary; let ABORT = false; let EXITSTATUS; var isFileURI = filename => filename.startsWith('file://'); let readyPromiseResolve, readyPromiseReject; let HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; let HEAP64, HEAPU64; let runtimeInitialized = false; function updateMemoryViews() {\n const b = wasmMemory.buffer; HEAP8 = new Int8Array(b); HEAP16 = new Int16Array(b); HEAPU8 = new Uint8Array(b); HEAPU16 = new Uint16Array(b); HEAP32 = new Int32Array(b); HEAPU32 = new Uint32Array(b); HEAPF32 = new Float32Array(b); HEAPF64 = new Float64Array(b); HEAP64 = new BigInt64Array(b); HEAPU64 = new BigUint64Array(b)\n } function preRun() {\n if (Module.preRun) {\n if (typeof Module.preRun == 'function')\n Module.preRun = [Module.preRun]; while (Module.preRun.length) {\n addOnPreRun(Module.preRun.shift())\n }\n }callRuntimeCallbacks(onPreRuns)\n } function initRuntime() {\n runtimeInitialized = true; if (!Module.noFSInit && !FS.initialized)\n FS.init(); TTY.init(); wasmExports.Q(); FS.ignorePermissions = false\n } function postRun() {\n if (Module.postRun) {\n if (typeof Module.postRun == 'function')\n Module.postRun = [Module.postRun]; while (Module.postRun.length) {\n addOnPostRun(Module.postRun.shift())\n }\n }callRuntimeCallbacks(onPostRuns)\n } function abort(what) {\n Module.onAbort?.(what); what = `Aborted(${what})`; err(what); ABORT = true; what += '. Build with -sASSERTIONS for more info.'; if (runtimeInitialized) {\n ___trap()\n } const e = new WebAssembly.RuntimeError(what); readyPromiseReject?.(e); throw e\n } let wasmBinaryFile; function findWasmBinary() {\n if (Module.locateFile) {\n return locateFile('rime-api.wasm')\n } return new URL('rime-api.wasm', import.meta.url).href\n } function getBinarySync(file) {\n if (file == wasmBinaryFile && wasmBinary) {\n return new Uint8Array(wasmBinary)\n } if (readBinary) {\n return readBinary(file)\n } throw 'both async and sync fetching of the wasm failed'\n } async function getWasmBinary(binaryFile) {\n if (!wasmBinary) {\n try {\n const response = await readAsync(binaryFile); return new Uint8Array(response)\n } catch {}\n } return getBinarySync(binaryFile)\n } async function instantiateArrayBuffer(binaryFile, imports) {\n try {\n const binary = await getWasmBinary(binaryFile); const instance = await WebAssembly.instantiate(binary, imports); return instance\n } catch (reason) {\n err(`failed to asynchronously prepare wasm: ${reason}`); abort(reason)\n }\n } async function instantiateAsync(binary, binaryFile, imports) {\n if (!binary && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE) {\n try {\n const response = fetch(binaryFile, { credentials: 'same-origin' }); const instantiationResult = await WebAssembly.instantiateStreaming(response, imports); return instantiationResult\n } catch (reason) {\n err(`wasm streaming compile failed: ${reason}`); err('falling back to ArrayBuffer instantiation')\n }\n } return instantiateArrayBuffer(binaryFile, imports)\n } function getWasmImports() {\n const imports = { a: wasmImports }; return imports\n } async function createWasm() {\n function receiveInstance(instance, module) {\n wasmExports = instance.exports; wasmExports = applySignatureConversions(wasmExports); assignWasmExports(wasmExports); updateMemoryViews(); return wasmExports\n } function receiveInstantiationResult(result) {\n return receiveInstance(result.instance)\n } const info = getWasmImports(); if (Module.instantiateWasm) {\n return new Promise((resolve, reject) => {\n Module.instantiateWasm(info, (inst, mod) => {\n resolve(receiveInstance(inst, mod))\n })\n })\n }wasmBinaryFile ??= findWasmBinary(); const result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); const exports = receiveInstantiationResult(result); return exports\n } class ExitStatus {\n name = 'ExitStatus'; constructor(status) {\n this.message = `Program terminated with exit(${status})`; this.status = status\n }\n } var callRuntimeCallbacks = (callbacks) => {\n while (callbacks.length > 0) {\n callbacks.shift()(Module)\n }\n }; var onPostRuns = []; var addOnPostRun = cb => onPostRuns.push(cb); var onPreRuns = []; var addOnPreRun = cb => onPreRuns.push(cb); let noExitRuntime = true; var PATH = { isAbs: path => path.charAt(0) === '/', splitPath: (filename) => {\n const splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^/]+?)?(\\.[^./]*|))\\/*$/; return splitPathRe.exec(filename).slice(1)\n }, normalizeArray: (parts, allowAboveRoot) => {\n let up = 0; for (let i = parts.length - 1; i >= 0; i--) {\n const last = parts[i]; if (last === '.') {\n parts.splice(i, 1)\n } else if (last === '..') {\n parts.splice(i, 1); up++\n } else if (up) {\n parts.splice(i, 1); up--\n }\n } if (allowAboveRoot) {\n for (;up; up--) {\n parts.unshift('..')\n }\n } return parts\n }, normalize: (path) => {\n const isAbsolute = PATH.isAbs(path); const trailingSlash = path.slice(-1) === '/'; path = PATH.normalizeArray(path.split('/').filter(p => !!p), !isAbsolute).join('/'); if (!path && !isAbsolute) {\n path = '.'\n } if (path && trailingSlash) {\n path += '/'\n } return (isAbsolute ? '/' : '') + path\n }, dirname: (path) => {\n const result = PATH.splitPath(path); const root = result[0]; let dir = result[1]; if (!root && !dir) {\n return '.'\n } if (dir) {\n dir = dir.slice(0, -1)\n } return root + dir\n }, basename: path => path && path.match(/([^/]+|\\/)\\/*$/)[1], join: (...paths) => PATH.normalize(paths.join('/')), join2: (l, r) => PATH.normalize(`${l}/${r}`) }; const initRandomFill = () => {\n if (ENVIRONMENT_IS_NODE) {\n const nodeCrypto = require('node:crypto'); return view => nodeCrypto.randomFillSync(view)\n } return view => crypto.getRandomValues(view)\n }; let randomFill = (view) => {\n (randomFill = initRandomFill())(view)\n }; var PATH_FS = { resolve: (...args) => {\n let resolvedPath = ''; let resolvedAbsolute = false; for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n const path = i >= 0 ? args[i] : FS.cwd(); if (typeof path != 'string') {\n throw new TypeError('Arguments to path.resolve must be strings')\n } else if (!path) {\n return ''\n }resolvedPath = `${path}/${resolvedPath}`; resolvedAbsolute = PATH.isAbs(path)\n }resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(p => !!p), !resolvedAbsolute).join('/'); return (resolvedAbsolute ? '/' : '') + resolvedPath || '.'\n }, relative: (from, to) => {\n from = PATH_FS.resolve(from).slice(1); to = PATH_FS.resolve(to).slice(1); function trim(arr) {\n let start = 0; for (;start < arr.length; start++) {\n if (arr[start] !== '')\n break\n } let end = arr.length - 1; for (;end >= 0; end--) {\n if (arr[end] !== '')\n break\n } if (start > end)\n return []; return arr.slice(start, end - start + 1)\n } const fromParts = trim(from.split('/')); const toParts = trim(to.split('/')); const length = Math.min(fromParts.length, toParts.length); let samePartsLength = length; for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i; break\n }\n } let outputParts = []; for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..')\n }outputParts = outputParts.concat(toParts.slice(samePartsLength)); return outputParts.join('/')\n } }; const UTF8Decoder = new TextDecoder(); const findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {\n const maxIdx = idx + maxBytesToRead; if (ignoreNul)\n return maxIdx; while (heapOrArray[idx] && !(idx >= maxIdx))++idx; return idx\n }; const UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => {\n idx >>>= 0; const endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul); return UTF8Decoder.decode(heapOrArray.buffer ? heapOrArray.subarray(idx, endPtr) : new Uint8Array(heapOrArray.slice(idx, endPtr)))\n }; let FS_stdin_getChar_buffer = []; const lengthBytesUTF8 = (str) => {\n let len = 0; for (let i = 0; i < str.length; ++i) {\n const c = str.charCodeAt(i); if (c <= 127) {\n len++\n } else if (c <= 2047) {\n len += 2\n } else if (c >= 55296 && c <= 57343) {\n len += 4; ++i\n } else {\n len += 3\n }\n } return len\n }; const stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n outIdx >>>= 0; if (!(maxBytesToWrite > 0))\n return 0; const startIdx = outIdx; const endIdx = outIdx + maxBytesToWrite - 1; for (let i = 0; i < str.length; ++i) {\n const u = str.codePointAt(i); if (u <= 127) {\n if (outIdx >= endIdx)\n break; heap[outIdx++ >>> 0] = u\n } else if (u <= 2047) {\n if (outIdx + 1 >= endIdx)\n break; heap[outIdx++ >>> 0] = 192 | u >> 6; heap[outIdx++ >>> 0] = 128 | u & 63\n } else if (u <= 65535) {\n if (outIdx + 2 >= endIdx)\n break; heap[outIdx++ >>> 0] = 224 | u >> 12; heap[outIdx++ >>> 0] = 128 | u >> 6 & 63; heap[outIdx++ >>> 0] = 128 | u & 63\n } else {\n if (outIdx + 3 >= endIdx)\n break; heap[outIdx++ >>> 0] = 240 | u >> 18; heap[outIdx++ >>> 0] = 128 | u >> 12 & 63; heap[outIdx++ >>> 0] = 128 | u >> 6 & 63; heap[outIdx++ >>> 0] = 128 | u & 63; i++\n }\n }heap[outIdx >>> 0] = 0; return outIdx - startIdx\n }; const intArrayFromString = (stringy, dontAddNull, length) => {\n const len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; const u8array = new Array(len); const numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); if (dontAddNull)\n u8array.length = numBytesWritten; return u8array\n }; const FS_stdin_getChar = () => {\n if (!FS_stdin_getChar_buffer.length) {\n let result = null; if (ENVIRONMENT_IS_NODE) {\n const BUFSIZE = 256; const buf = Buffer.alloc(BUFSIZE); let bytesRead = 0; const fd = process.stdin.fd; try {\n bytesRead = fs.readSync(fd, buf, 0, BUFSIZE)\n } catch (e) {\n if (e.toString().includes('EOF'))\n bytesRead = 0; else throw e\n } if (bytesRead > 0) {\n result = buf.slice(0, bytesRead).toString('utf-8')\n }\n } else if (globalThis.window?.prompt) {\n result = window.prompt('Input: '); if (result !== null) {\n result += '\\n'\n }\n } else {} if (!result) {\n return null\n }FS_stdin_getChar_buffer = intArrayFromString(result, true)\n } return FS_stdin_getChar_buffer.shift()\n }; var TTY = { ttys: [], init() {}, shutdown() {}, register(dev, ops) {\n TTY.ttys[dev] = { input: [], output: [], ops }; FS.registerDevice(dev, TTY.stream_ops)\n }, stream_ops: { open(stream) {\n const tty = TTY.ttys[stream.node.rdev]; if (!tty) {\n throw new FS.ErrnoError(43)\n }stream.tty = tty; stream.seekable = false\n }, close(stream) {\n stream.tty.ops.fsync(stream.tty)\n }, fsync(stream) {\n stream.tty.ops.fsync(stream.tty)\n }, read(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.get_char) {\n throw new FS.ErrnoError(60)\n } let bytesRead = 0; for (let i = 0; i < length; i++) {\n var result; try {\n result = stream.tty.ops.get_char(stream.tty)\n } catch (e) {\n throw new FS.ErrnoError(29)\n } if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6)\n } if (result === null || result === undefined)\n break; bytesRead++; buffer[offset + i] = result\n } if (bytesRead) {\n stream.node.atime = Date.now()\n } return bytesRead\n }, write(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.put_char) {\n throw new FS.ErrnoError(60)\n } try {\n for (var i = 0; i < length; i++) {\n stream.tty.ops.put_char(stream.tty, buffer[offset + i])\n }\n } catch (e) {\n throw new FS.ErrnoError(29)\n } if (length) {\n stream.node.mtime = stream.node.ctime = Date.now()\n } return i\n } }, default_tty_ops: { get_char(tty) {\n return FS_stdin_getChar()\n }, put_char(tty, val) {\n if (val === null || val === 10) {\n out(UTF8ArrayToString(tty.output)); tty.output = []\n } else {\n if (val != 0)\n tty.output.push(val)\n }\n }, fsync(tty) {\n if (tty.output?.length > 0) {\n out(UTF8ArrayToString(tty.output)); tty.output = []\n }\n }, ioctl_tcgets(tty) {\n return { c_iflag: 25856, c_oflag: 5, c_cflag: 191, c_lflag: 35387, c_cc: [3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }\n }, ioctl_tcsets(tty, optional_actions, data) {\n return 0\n }, ioctl_tiocgwinsz(tty) {\n return [24, 80]\n } }, default_tty1_ops: { put_char(tty, val) {\n if (val === null || val === 10) {\n err(UTF8ArrayToString(tty.output)); tty.output = []\n } else {\n if (val != 0)\n tty.output.push(val)\n }\n }, fsync(tty) {\n if (tty.output?.length > 0) {\n err(UTF8ArrayToString(tty.output)); tty.output = []\n }\n } } }; const zeroMemory = (ptr, size) => HEAPU8.fill(0, ptr, ptr + size); const alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment; const mmapAlloc = (size) => {\n size = alignMemory(size, 65536); const ptr = _emscripten_builtin_memalign(65536, size); if (ptr)\n zeroMemory(ptr, size); return ptr\n }; var MEMFS = { ops_table: null, mount(mount) {\n return MEMFS.createNode(null, '/', 16895, 0)\n }, createNode(parent, name, mode, dev) {\n if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\n throw new FS.ErrnoError(63)\n }MEMFS.ops_table ||= { dir: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr, lookup: MEMFS.node_ops.lookup, mknod: MEMFS.node_ops.mknod, rename: MEMFS.node_ops.rename, unlink: MEMFS.node_ops.unlink, rmdir: MEMFS.node_ops.rmdir, readdir: MEMFS.node_ops.readdir, symlink: MEMFS.node_ops.symlink }, stream: { llseek: MEMFS.stream_ops.llseek } }, file: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr }, stream: { llseek: MEMFS.stream_ops.llseek, read: MEMFS.stream_ops.read, write: MEMFS.stream_ops.write, mmap: MEMFS.stream_ops.mmap, msync: MEMFS.stream_ops.msync } }, link: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr, readlink: MEMFS.node_ops.readlink }, stream: {} }, chrdev: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr }, stream: FS.chrdev_stream_ops } }; const node = FS.createNode(parent, name, mode, dev); if (FS.isDir(node.mode)) {\n node.node_ops = MEMFS.ops_table.dir.node; node.stream_ops = MEMFS.ops_table.dir.stream; node.contents = {}\n } else if (FS.isFile(node.mode)) {\n node.node_ops = MEMFS.ops_table.file.node; node.stream_ops = MEMFS.ops_table.file.stream; node.usedBytes = 0; node.contents = null\n } else if (FS.isLink(node.mode)) {\n node.node_ops = MEMFS.ops_table.link.node; node.stream_ops = MEMFS.ops_table.link.stream\n } else if (FS.isChrdev(node.mode)) {\n node.node_ops = MEMFS.ops_table.chrdev.node; node.stream_ops = MEMFS.ops_table.chrdev.stream\n }node.atime = node.mtime = node.ctime = Date.now(); if (parent) {\n parent.contents[name] = node; parent.atime = parent.mtime = parent.ctime = node.atime\n } return node\n }, getFileDataAsTypedArray(node) {\n if (!node.contents)\n return new Uint8Array(0); if (node.contents.subarray)\n return node.contents.subarray(0, node.usedBytes); return new Uint8Array(node.contents)\n }, expandFileStorage(node, newCapacity) {\n const prevCapacity = node.contents ? node.contents.length : 0; if (prevCapacity >= newCapacity)\n return; const CAPACITY_DOUBLING_MAX = 1024 * 1024; newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0); if (prevCapacity != 0)\n newCapacity = Math.max(newCapacity, 256); const oldContents = node.contents; node.contents = new Uint8Array(newCapacity); if (node.usedBytes > 0)\n node.contents.set(oldContents.subarray(0, node.usedBytes), 0)\n }, resizeFileStorage(node, newSize) {\n if (node.usedBytes == newSize)\n return; if (newSize == 0) {\n node.contents = null; node.usedBytes = 0\n } else {\n const oldContents = node.contents; node.contents = new Uint8Array(newSize); if (oldContents) {\n node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes)))\n }node.usedBytes = newSize\n }\n }, node_ops: { getattr(node) {\n const attr = {}; attr.dev = FS.isChrdev(node.mode) ? node.id : 1; attr.ino = node.id; attr.mode = node.mode; attr.nlink = 1; attr.uid = 0; attr.gid = 0; attr.rdev = node.rdev; if (FS.isDir(node.mode)) {\n attr.size = 4096\n } else if (FS.isFile(node.mode)) {\n attr.size = node.usedBytes\n } else if (FS.isLink(node.mode)) {\n attr.size = node.link.length\n } else {\n attr.size = 0\n }attr.atime = new Date(node.atime); attr.mtime = new Date(node.mtime); attr.ctime = new Date(node.ctime); attr.blksize = 4096; attr.blocks = Math.ceil(attr.size / attr.blksize); return attr\n }, setattr(node, attr) {\n for (const key of ['mode', 'atime', 'mtime', 'ctime']) {\n if (attr[key] != null) {\n node[key] = attr[key]\n }\n } if (attr.size !== undefined) {\n MEMFS.resizeFileStorage(node, attr.size)\n }\n }, lookup(parent, name) {\n if (!MEMFS.doesNotExistError) {\n MEMFS.doesNotExistError = new FS.ErrnoError(44); MEMFS.doesNotExistError.stack = '<generic error, no stack>'\n } throw MEMFS.doesNotExistError\n }, mknod(parent, name, mode, dev) {\n return MEMFS.createNode(parent, name, mode, dev)\n }, rename(old_node, new_dir, new_name) {\n let new_node; try {\n new_node = FS.lookupNode(new_dir, new_name)\n } catch (e) {} if (new_node) {\n if (FS.isDir(old_node.mode)) {\n for (const i in new_node.contents) {\n throw new FS.ErrnoError(55)\n }\n }FS.hashRemoveNode(new_node)\n } delete old_node.parent.contents[old_node.name]; new_dir.contents[new_name] = old_node; old_node.name = new_name; new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now()\n }, unlink(parent, name) {\n delete parent.contents[name]; parent.ctime = parent.mtime = Date.now()\n }, rmdir(parent, name) {\n const node = FS.lookupNode(parent, name); for (const i in node.contents) {\n throw new FS.ErrnoError(55)\n } delete parent.contents[name]; parent.ctime = parent.mtime = Date.now()\n }, readdir(node) {\n return ['.', '..', ...Object.keys(node.contents)]\n }, symlink(parent, newname, oldpath) {\n const node = MEMFS.createNode(parent, newname, 511 | 40960, 0); node.link = oldpath; return node\n }, readlink(node) {\n if (!FS.isLink(node.mode)) {\n throw new FS.ErrnoError(28)\n } return node.link\n } }, stream_ops: { read(stream, buffer, offset, length, position) {\n const contents = stream.node.contents; if (position >= stream.node.usedBytes)\n return 0; const size = Math.min(stream.node.usedBytes - position, length); if (size > 8 && contents.subarray) {\n buffer.set(contents.subarray(position, position + size), offset)\n } else {\n for (let i = 0; i < size; i++)buffer[offset + i] = contents[position + i]\n } return size\n }, write(stream, buffer, offset, length, position, canOwn) {\n if (buffer.buffer === HEAP8.buffer) {\n canOwn = false\n } if (!length)\n return 0; const node = stream.node; node.mtime = node.ctime = Date.now(); if (buffer.subarray && (!node.contents || node.contents.subarray)) {\n if (canOwn) {\n node.contents = buffer.subarray(offset, offset + length); node.usedBytes = length; return length\n } else if (node.usedBytes === 0 && position === 0) {\n node.contents = buffer.slice(offset, offset + length); node.usedBytes = length; return length\n } else if (position + length <= node.usedBytes) {\n node.contents.set(buffer.subarray(offset, offset + length), position); return length\n }\n }MEMFS.expandFileStorage(node, position + length); if (node.contents.subarray && buffer.subarray) {\n node.contents.set(buffer.subarray(offset, offset + length), position)\n } else {\n for (let i = 0; i < length; i++) {\n node.contents[position + i] = buffer[offset + i]\n }\n }node.usedBytes = Math.max(node.usedBytes, position + length); return length\n }, llseek(stream, offset, whence) {\n let position = offset; if (whence === 1) {\n position += stream.position\n } else if (whence === 2) {\n if (FS.isFile(stream.node.mode)) {\n position += stream.node.usedBytes\n }\n } if (position < 0) {\n throw new FS.ErrnoError(28)\n } return position\n }, mmap(stream, length, position, prot, flags) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43)\n } let ptr; let allocated; let contents = stream.node.contents; if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {\n allocated = false; ptr = contents.byteOffset\n } else {\n allocated = true; ptr = mmapAlloc(length); if (!ptr) {\n throw new FS.ErrnoError(48)\n } if (contents) {\n if (position > 0 || position + length < contents.length) {\n if (contents.subarray) {\n contents = contents.subarray(position, position + length)\n } else {\n contents = Array.prototype.slice.call(contents, position, position + length)\n }\n }HEAP8.set(contents, ptr >>> 0)\n }\n } return { ptr, allocated }\n }, msync(stream, buffer, offset, length, mmapFlags) {\n MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); return 0\n } } }; const FS_modeStringToFlags = (str) => {\n const flagModes = { 'r': 0, 'r+': 2, 'w': 512 | 64 | 1, 'w+': 512 | 64 | 2, 'a': 1024 | 64 | 1, 'a+': 1024 | 64 | 2 }; const flags = flagModes[str]; if (typeof flags == 'undefined') {\n throw new TypeError(`Unknown file open mode: ${str}`)\n } return flags\n }; const FS_getMode = (canRead, canWrite) => {\n let mode = 0; if (canRead)\n mode |= 292 | 73; if (canWrite)\n mode |= 146; return mode\n }; var IDBFS = { dbs: {}, indexedDB: () => indexedDB, DB_VERSION: 21, DB_STORE_NAME: 'FILE_DATA', queuePersist: (mount) => {\n function onPersistComplete() {\n if (mount.idbPersistState === 'again')\n startPersist(); else mount.idbPersistState = 0\n } function startPersist() {\n mount.idbPersistState = 'idb'; IDBFS.syncfs(mount, false, onPersistComplete)\n } if (!mount.idbPersistState) {\n mount.idbPersistState = setTimeout(startPersist, 0)\n } else if (mount.idbPersistState === 'idb') {\n mount.idbPersistState = 'again'\n }\n }, mount: (mount) => {\n const mnt = MEMFS.mount(mount); if (mount?.opts?.autoPersist) {\n mount.idbPersistState = 0; const memfs_node_ops = mnt.node_ops; mnt.node_ops = { ...mnt.node_ops }; mnt.node_ops.mknod = (parent, name, mode, dev) => {\n const node = memfs_node_ops.mknod(parent, name, mode, dev); node.node_ops = mnt.node_ops; node.idbfs_mount = mnt.mount; node.memfs_stream_ops = node.stream_ops; node.stream_ops = { ...node.stream_ops }; node.stream_ops.write = (stream, buffer, offset, length, position, canOwn) => {\n stream.node.isModified = true; return node.memfs_stream_ops.write(stream, buffer, offset, length, position, canOwn)\n }; node.stream_ops.close = (stream) => {\n const n = stream.node; if (n.isModified) {\n IDBFS.queuePersist(n.idbfs_mount); n.isModified = false\n } if (n.memfs_stream_ops.close)\n return n.memfs_stream_ops.close(stream)\n }; IDBFS.queuePersist(mnt.mount); return node\n }; mnt.node_ops.rmdir = (...args) => (IDBFS.queuePersist(mnt.mount), memfs_node_ops.rmdir(...args)); mnt.node_ops.symlink = (...args) => (IDBFS.queuePersist(mnt.mount), memfs_node_ops.symlink(...args)); mnt.node_ops.unlink = (...args) => (IDBFS.queuePersist(mnt.mount), memfs_node_ops.unlink(...args)); mnt.node_ops.rename = (...args) => (IDBFS.queuePersist(mnt.mount), memfs_node_ops.rename(...args))\n } return mnt\n }, syncfs: (mount, populate, callback) => {\n IDBFS.getLocalSet(mount, (err, local) => {\n if (err)\n return callback(err); IDBFS.getRemoteSet(mount, (err, remote) => {\n if (err)\n return callback(err); const src = populate ? remote : local; const dst = populate ? local : remote; IDBFS.reconcile(src, dst, callback)\n })\n })\n }, quit: () => {\n for (const value of Object.values(IDBFS.dbs)) {\n value.close()\n }IDBFS.dbs = {}\n }, getDB: (name, callback) => {\n let db = IDBFS.dbs[name]; if (db) {\n return callback(null, db)\n } let req; try {\n req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION)\n } catch (e) {\n return callback(e)\n } if (!req) {\n return callback('Unable to connect to IndexedDB')\n }req.onupgradeneeded = (e) => {\n const db = e.target.result; const transaction = e.target.transaction; let fileStore; if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {\n fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME)\n } else {\n fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME)\n } if (!fileStore.indexNames.contains('timestamp')) {\n fileStore.createIndex('timestamp', 'timestamp', { unique: false })\n }\n }; req.onsuccess = () => {\n db = req.result; IDBFS.dbs[name] = db; callback(null, db)\n }; req.onerror = (e) => {\n callback(e.target.error); e.preventDefault()\n }\n }, getLocalSet: (mount, callback) => {\n const entries = {}; function isRealDir(p) {\n return p !== '.' && p !== '..'\n } function toAbsolute(root) {\n return p => PATH.join2(root, p)\n } const check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint)); while (check.length) {\n const path = check.pop(); var stat; try {\n stat = FS.stat(path)\n } catch (e) {\n return callback(e)\n } if (FS.isDir(stat.mode)) {\n check.push(...FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))\n }entries[path] = { timestamp: stat.mtime }\n } return callback(null, { type: 'local', entries })\n }, getRemoteSet: (mount, callback) => {\n const entries = {}; IDBFS.getDB(mount.mountpoint, (err, db) => {\n if (err)\n return callback(err); try {\n const transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly'); transaction.onerror = (e) => {\n callback(e.target.error); e.preventDefault()\n }; const store = transaction.objectStore(IDBFS.DB_STORE_NAME); const index = store.index('timestamp'); index.openKeyCursor().onsuccess = (event) => {\n const cursor = event.target.result; if (!cursor) {\n return callback(null, { type: 'remote', db, entries })\n }entries[cursor.primaryKey] = { timestamp: cursor.key }; cursor.continue()\n }\n } catch (e) {\n return callback(e)\n }\n })\n }, loadLocalEntry: (path, callback) => {\n let stat, node; try {\n const lookup = FS.lookupPath(path); node = lookup.node; stat = FS.stat(path)\n } catch (e) {\n return callback(e)\n } if (FS.isDir(stat.mode)) {\n return callback(null, { timestamp: stat.mtime, mode: stat.mode })\n } else if (FS.isFile(stat.mode)) {\n node.contents = MEMFS.getFileDataAsTypedArray(node); return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents })\n } else {\n return callback(new Error('node type not supported'))\n }\n }, storeLocalEntry: (path, entry, callback) => {\n try {\n if (FS.isDir(entry.mode)) {\n FS.mkdirTree(path, entry.mode)\n } else if (FS.isFile(entry.mode)) {\n FS.writeFile(path, entry.contents, { canOwn: true })\n } else {\n return callback(new Error('node type not supported'))\n }FS.chmod(path, entry.mode); FS.utime(path, entry.timestamp, entry.timestamp)\n } catch (e) {\n return callback(e)\n }callback(null)\n }, removeLocalEntry: (path, callback) => {\n try {\n const stat = FS.stat(path); if (FS.isDir(stat.mode)) {\n FS.rmdir(path)\n } else if (FS.isFile(stat.mode)) {\n FS.unlink(path)\n }\n } catch (e) {\n return callback(e)\n }callback(null)\n }, loadRemoteEntry: (store, path, callback) => {\n const req = store.get(path); req.onsuccess = event => callback(null, event.target.result); req.onerror = (e) => {\n callback(e.target.error); e.preventDefault()\n }\n }, storeRemoteEntry: (store, path, entry, callback) => {\n try {\n var req = store.put(entry, path)\n } catch (e) {\n callback(e); return\n }req.onsuccess = event => callback(); req.onerror = (e) => {\n callback(e.target.error); e.preventDefault()\n }\n }, removeRemoteEntry: (store, path, callback) => {\n const req = store.delete(path); req.onsuccess = event => callback(); req.onerror = (e) => {\n callback(e.target.error); e.preventDefault()\n }\n }, reconcile: (src, dst, callback) => {\n let total = 0; const create = []; for (var [key, e] of Object.entries(src.entries)) {\n const e2 = dst.entries[key]; if (!e2 || e.timestamp.getTime() != e2.timestamp.getTime()) {\n create.push(key); total++\n }\n } const remove = []; for (var key of Object.keys(dst.entries)) {\n if (!src.entries[key]) {\n remove.push(key); total++\n }\n } if (!total) {\n return callback(null)\n } let errored = false; const db = src.type === 'remote' ? src.db : dst.db; const transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite'); const store = transaction.objectStore(IDBFS.DB_STORE_NAME); function done(err) {\n if (err && !errored) {\n errored = true; return callback(err)\n }\n }transaction.onerror = transaction.onabort = (e) => {\n done(e.target.error); e.preventDefault()\n }; transaction.oncomplete = (e) => {\n if (!errored) {\n callback(null)\n }\n }; for (const path of create.sort()) {\n if (dst.type === 'local') {\n IDBFS.loadRemoteEntry(store, path, (err, entry) => {\n if (err)\n return done(err); IDBFS.storeLocalEntry(path, entry, done)\n })\n } else {\n IDBFS.loadLocalEntry(path, (err, entry) => {\n if (err)\n return done(err); IDBFS.storeRemoteEntry(store, path, entry, done)\n })\n }\n } for (const path of remove.sort().reverse()) {\n if (dst.type === 'local') {\n IDBFS.removeLocalEntry(path, done)\n } else {\n IDBFS.removeRemoteEntry(store, path, done)\n }\n }\n } }; const asyncLoad = async (url) => {\n const arrayBuffer = await readAsync(url); return new Uint8Array(arrayBuffer)\n }; const FS_createDataFile = (...args) => FS.createDataFile(...args); const getUniqueRunDependency = id => id; let runDependencies = 0; let dependenciesFulfilled = null; const removeRunDependency = (id) => {\n runDependencies--; Module.monitorRunDependencies?.(runDependencies); if (runDependencies == 0) {\n if (dependenciesFulfilled) {\n const callback = dependenciesFulfilled; dependenciesFulfilled = null; callback()\n }\n }\n }; const addRunDependency = (id) => {\n runDependencies++; Module.monitorRunDependencies?.(runDependencies)\n }; let preloadPlugins = []; const FS_handledByPreloadPlugin = async (byteArray, fullname) => {\n if (typeof Browser != 'undefined')\n Browser.init(); for (const plugin of preloadPlugins) {\n if (plugin.canHandle(fullname)) {\n return plugin.handle(byteArray, fullname)\n }\n } return byteArray\n }; const FS_preloadFile = async (parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish) => {\n const fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; const dep = getUniqueRunDependency(`cp ${fullname}`); addRunDependency(dep); try {\n let byteArray = url; if (typeof url == 'string') {\n byteArray = await asyncLoad(url)\n }byteArray = await FS_handledByPreloadPlugin(byteArray, fullname); preFinish?.(); if (!dontCreateFile) {\n FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn)\n }\n } finally {\n removeRunDependency(dep)\n }\n }; const FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => {\n FS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror)\n }; var FS = { root: null, mounts: [], devices: {}, streams: [], nextInode: 1, nameTable: null, currentPath: '/', initialized: false, ignorePermissions: true, filesystems: null, syncFSRequests: 0, ErrnoError: class {\n name = 'ErrnoError'; constructor(errno) {\n this.errno = errno\n }\n }, FSStream: class {\n shared = {}; get object() {\n return this.node\n }\n\n set object(val) {\n this.node = val\n }\n\n get isRead() {\n return (this.flags & 2097155) !== 1\n }\n\n get isWrite() {\n return (this.flags & 2097155) !== 0\n }\n\n get isAppend() {\n return this.flags & 1024\n }\n\n get flags() {\n return this.shared.flags\n }\n\n set flags(val) {\n this.shared.flags = val\n }\n\n get position() {\n return this.shared.position\n }\n\n set position(val) {\n this.shared.position = val\n }\n }, FSNode: class {\n node_ops = {}; stream_ops = {}; readMode = 292 | 73; writeMode = 146; mounted = null; constructor(parent, name, mode, rdev) {\n if (!parent) {\n parent = this\n } this.parent = parent; this.mount = parent.mount; this.id = FS.nextInode++; this.name = name; this.mode = mode; this.rdev = rdev; this.atime = this.mtime = this.ctime = Date.now()\n }\n\n get read() {\n return (this.mode & this.readMode) === this.readMode\n }\n\n set read(val) {\n val ? this.mode |= this.readMode : this.mode &= ~this.readMode\n }\n\n get write() {\n return (this.mode & this.writeMode) === this.writeMode\n }\n\n set write(val) {\n val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode\n }\n\n get isFolder() {\n return FS.isDir(this.mode)\n }\n\n get isDevice() {\n return FS.isChrdev(this.mode)\n }\n }, lookupPath(path, opts = {}) {\n if (!path) {\n throw new FS.ErrnoError(44)\n }opts.follow_mount ??= true; if (!PATH.isAbs(path)) {\n path = `${FS.cwd()}/${path}`\n }linkloop:for (let nlinks = 0; nlinks < 40; nlinks++) {\n const parts = path.split('/').filter(p => !!p); let current = FS.root; let current_path = '/'; for (let i = 0; i < parts.length; i++) {\n const islast = i === parts.length - 1; if (islast && opts.parent) {\n break\n } if (parts[i] === '.') {\n continue\n } if (parts[i] === '..') {\n current_path = PATH.dirname(current_path); if (FS.isRoot(current)) {\n path = `${current_path}/${parts.slice(i + 1).join('/')}`; nlinks--; continue linkloop\n } else {\n current = current.parent\n } continue\n }current_path = PATH.join2(current_path, parts[i]); try {\n current = FS.lookupNode(current, parts[i])\n } catch (e) {\n if (e?.errno === 44 && islast && opts.noent_okay) {\n return { path: current_path }\n } throw e\n } if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) {\n current = current.mounted.root\n } if (FS.isLink(current.mode) && (!islast || opts.follow)) {\n if (!current.node_ops.readlink) {\n throw new FS.ErrnoError(52)\n } let link = current.node_ops.readlink(current); if (!PATH.isAbs(link)) {\n link = `${PATH.dirname(current_path)}/${link}`\n }path = `${link}/${parts.slice(i + 1).join('/')}`; continue linkloop\n }\n } return { path: current_path, node: current }\n } throw new FS.ErrnoError(32)\n }, getPath(node) {\n let path; while (true) {\n if (FS.isRoot(node)) {\n const mount = node.mount.mountpoint; if (!path)\n return mount; return mount[mount.length - 1] !== '/' ? `${mount}/${path}` : mount + path\n }path = path ? `${node.name}/${path}` : node.name; node = node.parent\n }\n }, hashName(parentid, name) {\n let hash = 0; for (let i = 0; i < name.length; i++) {\n hash = (hash << 5) - hash + name.charCodeAt(i) | 0\n } return (parentid + hash >>> 0) % FS.nameTable.length\n }, hashAddNode(node) {\n const hash = FS.hashName(node.parent.id, node.name); node.name_next = FS.nameTable[hash]; FS.nameTable[hash] = node\n }, hashRemoveNode(node) {\n const hash = FS.hashName(node.parent.id, node.name); if (FS.nameTable[hash] === node) {\n FS.nameTable[hash] = node.name_next\n } else {\n let current = FS.nameTable[hash]; while (current) {\n if (current.name_next === node) {\n current.name_next = node.name_next; break\n }current = current.name_next\n }\n }\n }, lookupNode(parent, name) {\n const errCode = FS.mayLookup(parent); if (errCode) {\n throw new FS.ErrnoError(errCode)\n } const hash = FS.hashName(parent.id, name); for (let node = FS.nameTable[hash]; node; node = node.name_next) {\n const nodeName = node.name; if (node.parent.id === parent.id && nodeName === name) {\n return node\n }\n } return FS.lookup(parent, name)\n }, createNode(parent, name, mode, rdev) {\n const node = new FS.FSNode(parent, name, mode, rdev); FS.hashAddNode(node); return node\n }, destroyNode(node) {\n FS.hashRemoveNode(node)\n }, isRoot(node) {\n return node === node.parent\n }, isMountpoint(node) {\n return !!node.mounted\n }, isFile(mode) {\n return (mode & 61440) === 32768\n }, isDir(mode) {\n return (mode & 61440) === 16384\n }, isLink(mode) {\n return (mode & 61440) === 40960\n }, isChrdev(mode) {\n return (mode & 61440) === 8192\n }, isBlkdev(mode) {\n return (mode & 61440) === 24576\n }, isFIFO(mode) {\n return (mode & 61440) === 4096\n }, isSocket(mode) {\n return (mode & 49152) === 49152\n }, flagsToPermissionString(flag) {\n let perms = ['r', 'w', 'rw'][flag & 3]; if (flag & 512) {\n perms += 'w'\n } return perms\n }, nodePermissions(node, perms) {\n if (FS.ignorePermissions) {\n return 0\n } if (perms.includes('r') && !(node.mode & 292)) {\n return 2\n } if (perms.includes('w') && !(node.mode & 146)) {\n return 2\n } if (perms.includes('x') && !(node.mode & 73)) {\n return 2\n } return 0\n }, mayLookup(dir) {\n if (!FS.isDir(dir.mode))\n return 54; const errCode = FS.nodePermissions(dir, 'x'); if (errCode)\n return errCode; if (!dir.node_ops.lookup)\n return 2; return 0\n }, mayCreate(dir, name) {\n if (!FS.isDir(dir.mode)) {\n return 54\n } try {\n const node = FS.lookupNode(dir, name); return 20\n } catch (e) {} return FS.nodePermissions(dir, 'wx')\n }, mayDelete(dir, name, isdir) {\n let node; try {\n node = FS.lookupNode(dir, name)\n } catch (e) {\n return e.errno\n } const errCode = FS.nodePermissions(dir, 'wx'); if (errCode) {\n return errCode\n } if (isdir) {\n if (!FS.isDir(node.mode)) {\n return 54\n } if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {\n return 10\n }\n } else if (FS.isDir(node.mode)) {\n return 31\n } return 0\n }, mayOpen(node, flags) {\n if (!node) {\n return 44\n } if (FS.isLink(node.mode)) {\n return 32\n } const mode = FS.flagsToPermissionString(flags); if (FS.isDir(node.mode)) {\n if (mode !== 'r' || flags & (512 | 64)) {\n return 31\n }\n } return FS.nodePermissions(node, mode)\n }, checkOpExists(op, err) {\n if (!op) {\n throw new FS.ErrnoError(err)\n } return op\n }, MAX_OPEN_FDS: 4096, nextfd() {\n for (let fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {\n if (!FS.streams[fd]) {\n return fd\n }\n } throw new FS.ErrnoError(33)\n }, getStreamChecked(fd) {\n const stream = FS.getStream(fd); if (!stream) {\n throw new FS.ErrnoError(8)\n } return stream\n }, getStream: fd => FS.streams[fd], createStream(stream, fd = -1) {\n stream = Object.assign(new FS.FSStream(), stream); if (fd == -1) {\n fd = FS.nextfd()\n }stream.fd = fd; FS.streams[fd] = stream; return stream\n }, closeStream(fd) {\n FS.streams[fd] = null\n }, dupStream(origStream, fd = -1) {\n const stream = FS.createStream(origStream, fd); stream.stream_ops?.dup?.(stream); return stream\n }, doSetAttr(stream, node, attr) {\n let setattr = stream?.stream_ops.setattr; const arg = setattr ? stream : node; setattr ??= node.node_ops.setattr; FS.checkOpExists(setattr, 63); setattr(arg, attr)\n }, chrdev_stream_ops: { open(stream) {\n const device = FS.getDevice(stream.node.rdev); stream.stream_ops = device.stream_ops; stream.stream_ops.open?.(stream)\n }, llseek() {\n throw new FS.ErrnoError(70)\n } }, major: dev => dev >> 8, minor: dev => dev & 255, makedev: (ma, mi) => ma << 8 | mi, registerDevice(dev, ops) {\n FS.devices[dev] = { stream_ops: ops }\n }, getDevice: dev => FS.devices[dev], getMounts(mount) {\n const mounts = []; const check = [mount]; while (check.length) {\n const m = check.pop(); mounts.push(m); check.push(...m.mounts)\n } return mounts\n }, syncfs(populate, callback) {\n if (typeof populate == 'function') {\n callback = populate; populate = false\n }FS.syncFSRequests++; if (FS.syncFSRequests > 1) {\n err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)\n } const mounts = FS.getMounts(FS.root.mount); let completed = 0; function doCallback(errCode) {\n FS.syncFSRequests--; return callback(errCode)\n } function done(errCode) {\n if (errCode) {\n if (!done.errored) {\n done.errored = true; return doCallback(errCode)\n } return\n } if (++completed >= mounts.length) {\n doCallback(null)\n }\n } for (const mount of mounts) {\n if (mount.type.syncfs) {\n mount.type.syncfs(mount, populate, done)\n } else {\n done(null)\n }\n }\n }, mount(type, opts, mountpoint) {\n const root = mountpoint === '/'; const pseudo = !mountpoint; let node; if (root && FS.root) {\n throw new FS.ErrnoError(10)\n } else if (!root && !pseudo) {\n const lookup = FS.lookupPath(mountpoint, { follow_mount: false }); mountpoint = lookup.path; node = lookup.node; if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10)\n } if (!FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54)\n }\n } const mount = { type, opts, mountpoint, mounts: [] }; const mountRoot = type.mount(mount); mountRoot.mount = mount; mount.root = mountRoot; if (root) {\n FS.root = mountRoot\n } else if (node) {\n node.mounted = mount; if (node.mount) {\n node.mount.mounts.push(mount)\n }\n } return mountRoot\n }, unmount(mountpoint) {\n const lookup = FS.lookupPath(mountpoint, { follow_mount: false }); if (!FS.isMountpoint(lookup.node)) {\n throw new FS.ErrnoError(28)\n } const node = lookup.node; const mount = node.mounted; const mounts = FS.getMounts(mount); for (let [hash, current] of Object.entries(FS.nameTable)) {\n while (current) {\n const next = current.name_next; if (mounts.includes(current.mount)) {\n FS.destroyNode(current)\n }current = next\n }\n }node.mounted = null; const idx = node.mount.mounts.indexOf(mount); node.mount.mounts.splice(idx, 1)\n }, lookup(parent, name) {\n return parent.node_ops.lookup(parent, name)\n }, mknod(path, mode, dev) {\n const lookup = FS.lookupPath(path, { parent: true }); const parent = lookup.node; const name = PATH.basename(path); if (!name) {\n throw new FS.ErrnoError(28)\n } if (name === '.' || name === '..') {\n throw new FS.ErrnoError(20)\n } const errCode = FS.mayCreate(parent, name); if (errCode) {\n throw new FS.ErrnoError(errCode)\n } if (!parent.node_ops.mknod) {\n throw new FS.ErrnoError(63)\n } return parent.node_ops.mknod(parent, name, mode, dev)\n }, statfs(path) {\n return FS.statfsNode(FS.lookupPath(path, { follow: true }).node)\n }, statfsStream(stream) {\n return FS.statfsNode(stream.node)\n }, statfsNode(node) {\n const rtn = { bsize: 4096, frsize: 4096, blocks: 1e6, bfree: 5e5, bavail: 5e5, files: FS.nextInode, ffree: FS.nextInode - 1, fsid: 42, flags: 2, namelen: 255 }; if (node.node_ops.statfs) {\n Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root))\n } return rtn\n }, create(path, mode = 438) {\n mode &= 4095; mode |= 32768; return FS.mknod(path, mode, 0)\n }, mkdir(path, mode = 511) {\n mode &= 511 | 512; mode |= 16384; return FS.mknod(path, mode, 0)\n }, mkdirTree(path, mode) {\n const dirs = path.split('/'); let d = ''; for (const dir of dirs) {\n if (!dir)\n continue; if (d || PATH.isAbs(path))\n d += '/'; d += dir; try {\n FS.mkdir(d, mode)\n } catch (e) {\n if (e.errno != 20)\n throw e\n }\n }\n }, mkdev(path, mode, dev) {\n if (typeof dev == 'undefined') {\n dev = mode; mode = 438\n }mode |= 8192; return FS.mknod(path, mode, dev)\n }, symlink(oldpath, newpath) {\n if (!PATH_FS.resolve(oldpath)) {\n throw new FS.ErrnoError(44)\n } const lookup = FS.lookupPath(newpath, { parent: true }); const parent = lookup.node; if (!parent) {\n throw new FS.ErrnoError(44)\n } const newname = PATH.basename(newpath); const errCode = FS.mayCreate(parent, newname); if (errCode) {\n throw new FS.ErrnoError(errCode)\n } if (!parent.node_ops.symlink) {\n throw new FS.ErrnoError(63)\n } return parent.node_ops.symlink(parent, newname, oldpath)\n }, rename(old_path, new_path) {\n const old_dirname = PATH.dirname(old_path); const new_dirname = PATH.dirname(new_path); const old_name = PATH.basename(old_path); const new_name = PATH.basename(new_path); let lookup, old_dir, new_dir; lookup = FS.lookupPath(old_path, { parent: true }); old_dir = lookup.node; lookup = FS.lookupPath(new_path, { parent: true }); new_dir = lookup.node; if (!old_dir || !new_dir)\n throw new FS.ErrnoError(44); if (old_dir.mount !== new_dir.mount) {\n throw new FS.ErrnoError(75)\n } const old_node = FS.lookupNode(old_dir, old_name); let relative = PATH_FS.relative(old_path, new_dirname); if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(28)\n }relative = PATH_FS.relative(new_path, old_dirname); if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(55)\n } let new_node; try {\n new_node = FS.lookupNode(new_dir, new_name)\n } catch (e) {} if (old_node === new_node) {\n return\n } const isdir = FS.isDir(old_node.mode); let errCode = FS.mayDelete(old_dir, old_name, isdir); if (errCode) {\n throw new FS.ErrnoError(errCode)\n }errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); if (errCode) {\n throw new FS.ErrnoError(errCode)\n } if (!old_dir.node_ops.rename) {\n throw new FS.ErrnoError(63)\n } if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) {\n throw new FS.ErrnoError(10)\n } if (new_dir !== old_dir) {\n errCode = FS.nodePermissions(old_dir, 'w'); if (errCode) {\n throw new FS.ErrnoError(errCode)\n }\n }FS.hashRemoveNode(old_node); try {\n old_dir.node_ops.rename(old_node, new_dir, new_name); old_node.parent = new_dir\n } catch (e) {\n throw e\n } finally {\n FS.hashAddNode(old_node)\n }\n }, rmdir(path) {\n const lookup = FS.lookupPath(path, { parent: true }); const parent = lookup.node; const name = PATH.basename(path); const node = FS.lookupNode(parent, name); const errCode = FS.mayDelete(parent, name, true); if (errCode) {\n throw new FS.ErrnoError(errCode)\n } if (!parent.node_ops.rmdir) {\n throw new FS.ErrnoError(63)\n } if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10)\n }parent.node_ops.rmdir(parent, name); FS.destroyNode(node)\n }, readdir(path) {\n const lookup = FS.lookupPath(path, { follow: true }); const node = lookup.node; const readdir = FS.checkOpExists(node.node_ops.readdir, 54); return readdir(node)\n }, unlink(path) {\n const lookup = FS.lookupPath(path, { parent: true }); const parent = lookup.node; if (!parent) {\n throw new FS.ErrnoError(44)\n } const name = PATH.basename(path); const node = FS.lookupNode(parent, name); const errCode = FS.mayDelete(parent, name, false); if (errCode) {\n throw new FS.ErrnoError(errCode)\n } if (!parent.node_ops.unlink) {\n throw new FS.ErrnoError(63)\n } if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10)\n }parent.node_ops.unlink(parent, name); FS.destroyNode(node)\n }, readlink(path) {\n const lookup = FS.lookupPath(path); const link = lookup.node; if (!link) {\n throw new FS.ErrnoError(44)\n } if (!link.node_ops.readlink) {\n throw new FS.ErrnoError(28)\n } return link.node_ops.readlink(link)\n }, stat(path, dontFollow) {\n const lookup = FS.lookupPath(path, { follow: !dontFollow }); const node = lookup.node; const getattr = FS.checkOpExists(node.node_ops.getattr, 63); return getattr(node)\n }, fstat(fd) {\n const stream = FS.getStreamChecked(fd); const node = stream.node; let getattr = stream.stream_ops.getattr; const arg = getattr ? stream : node; getattr ??= node.node_ops.getattr; FS.checkOpExists(getattr, 63); return getattr(arg)\n }, lstat(path) {\n return FS.stat(path, true)\n }, doChmod(stream, node, mode, dontFollow) {\n FS.doSetAttr(stream, node, { mode: mode & 4095 | node.mode & ~4095, ctime: Date.now(), dontFollow })\n }, chmod(path, mode, dontFollow) {\n let node; if (typeof path == 'string') {\n const lookup = FS.lookupPath(path, { follow: !dontFollow }); node = lookup.node\n } else {\n node = path\n }FS.doChmod(null, node, mode, dontFollow)\n }, lchmod(path, mode) {\n FS.chmod(path, mode, true)\n }, fchmod(fd, mode) {\n const stream = FS.getStreamChecked(fd); FS.doChmod(stream, stream.node, mode, false)\n }, doChown(stream, node, dontFollow) {\n FS.doSetAttr(stream, node, { timestamp: Date.now(), dontFollow })\n }, chown(path, uid, gid, dontFollow) {\n let node; if (typeof path == 'string') {\n const lookup = FS.lookupPath(path, { follow: !dontFollow }); node = lookup.node\n } else {\n node = path\n }FS.doChown(null, node, dontFollow)\n }, lchown(path, uid, gid) {\n FS.chown(path, uid, gid, true)\n }, fchown(fd, uid, gid) {\n const stream = FS.getStreamChecked(fd); FS.doChown(stream, stream.node, false)\n }, doTruncate(stream, node, len) {\n if (FS.isDir(node.mode)) {\n throw new FS.ErrnoError(31)\n } if (!FS.isFile(node.mode)) {\n throw new FS.ErrnoError(28)\n } const errCode = FS.nodePermissions(node, 'w'); if (errCode) {\n throw new FS.ErrnoError(errCode)\n }FS.doSetAttr(stream, node, { size: len, timestamp: Date.now() })\n }, truncate(path, len) {\n if (len < 0) {\n throw new FS.ErrnoError(28)\n } let node; if (typeof path == 'string') {\n const lookup = FS.lookupPath(path, { follow: true }); node = lookup.node\n } else {\n node = path\n }FS.doTruncate(null, node, len)\n }, ftruncate(fd, len) {\n const stream = FS.getStreamChecked(fd); if (len < 0 || (stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(28)\n }FS.doTruncate(stream, stream.node, len)\n }, utime(path, atime, mtime) {\n const lookup = FS.lookupPath(path, { follow: true }); const node = lookup.node; const setattr = FS.checkOpExists(node.node_ops.setattr, 63); setattr(node, { atime, mtime })\n }, open(path, flags, mode = 438) {\n if (path === '') {\n throw new FS.ErrnoError(44)\n }flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; if (flags & 64) {\n mode = mode & 4095 | 32768\n } else {\n mode = 0\n } let node; let isDirPath; if (typeof path == 'object') {\n node = path\n } else {\n isDirPath = path.endsWith('/'); const lookup = FS.lookupPath(path, { follow: !(flags & 131072), noent_okay: true }); node = lookup.node; path = lookup.path\n } let created = false; if (flags & 64) {\n if (node) {\n if (flags & 128) {\n throw new FS.ErrnoError(20)\n }\n } else if (isDirPath) {\n throw new FS.ErrnoError(31)\n } else {\n node = FS.mknod(path, mode | 511, 0); created = true\n }\n } if (!node) {\n throw new FS.ErrnoError(44)\n } if (FS.isChrdev(node.mode)) {\n flags &= ~512\n } if (flags & 65536 && !FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54)\n } if (!created) {\n const errCode = FS.mayOpen(node, flags); if (errCode) {\n throw new FS.ErrnoError(errCode)\n }\n } if (flags & 512 && !created) {\n FS.truncate(node, 0)\n }flags &= ~(128 | 512 | 131072); const stream = FS.createStream({ node, path: FS.getPath(node), flags, seekable: true, position: 0, stream_ops: node.stream_ops, ungotten: [], error: false }); if (stream.stream_ops.open) {\n stream.stream_ops.open(stream)\n } if (created) {\n FS.chmod(node, mode & 511)\n } return stream\n }, close(stream) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8)\n } if (stream.getdents)\n stream.getdents = null; try {\n if (stream.stream_ops.close) {\n stream.stream_ops.close(stream)\n }\n } catch (e) {\n throw e\n } finally {\n FS.closeStream(stream.fd)\n }stream.fd = null\n }, isClosed(stream) {\n return stream.fd === null\n }, llseek(stream, offset, whence) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8)\n } if (!stream.seekable || !stream.stream_ops.llseek) {\n throw new FS.ErrnoError(70)\n } if (whence != 0 && whence != 1 && whence != 2) {\n throw new FS.ErrnoError(28)\n }stream.position = stream.stream_ops.llseek(stream, offset, whence); stream.ungotten = []; return stream.position\n }, read(stream, buffer, offset, length, position) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28)\n } if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8)\n } if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(8)\n } if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31)\n } if (!stream.stream_ops.read) {\n throw new FS.ErrnoError(28)\n } const seeking = typeof position != 'undefined'; if (!seeking) {\n position = stream.position\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70)\n } const bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); if (!seeking)\n stream.position += bytesRead; return bytesRead\n }, write(stream, buffer, offset, length, position, canOwn) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28)\n } if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8)\n } if ((stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(8)\n } if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31)\n } if (!stream.stream_ops.write) {\n throw new FS.ErrnoError(28)\n } if (stream.seekable && stream.flags & 1024) {\n FS.llseek(stream, 0, 2)\n } const seeking = typeof position != 'undefined'; if (!seeking) {\n position = stream.position\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70)\n } const bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); if (!seeking)\n stream.position += bytesWritten; return bytesWritten\n }, mmap(stream, length, position, prot, flags) {\n if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) {\n throw new FS.ErrnoError(2)\n } if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(2)\n } if (!stream.stream_ops.mmap) {\n throw new FS.ErrnoError(43)\n } if (!length) {\n throw new FS.ErrnoError(28)\n } return stream.stream_ops.mmap(stream, length, position, prot, flags)\n }, msync(stream, buffer, offset, length, mmapFlags) {\n if (!stream.stream_ops.msync) {\n return 0\n } return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags)\n }, ioctl(stream, cmd, arg) {\n if (!stream.stream_ops.ioctl) {\n throw new FS.ErrnoError(59)\n } return stream.stream_ops.ioctl(stream, cmd, arg)\n }, readFile(path, opts = {}) {\n opts.flags = opts.flags || 0; opts.encoding = opts.encoding || 'binary'; if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {\n abort(`Invalid encoding type \"${opts.encoding}\"`)\n } const stream = FS.open(path, opts.flags); const stat = FS.stat(path); const length = stat.size; let buf = new Uint8Array(length); FS.read(stream, buf, 0, length, 0); if (opts.encoding === 'utf8') {\n buf = UTF8ArrayToString(buf)\n }FS.close(stream); return buf\n }, writeFile(path, data, opts = {}) {\n opts.flags = opts.flags || 577; const stream = FS.open(path, opts.flags, opts.mode); if (typeof data == 'string') {\n data = new Uint8Array(intArrayFromString(data, true))\n } if (ArrayBuffer.isView(data)) {\n FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn)\n } else {\n abort('Unsupported data type')\n }FS.close(stream)\n }, cwd: () => FS.currentPath, chdir(path) {\n const lookup = FS.lookupPath(path, { follow: true }); if (lookup.node === null) {\n throw new FS.ErrnoError(44)\n } if (!FS.isDir(lookup.node.mode)) {\n throw new FS.ErrnoError(54)\n } const errCode = FS.nodePermissions(lookup.node, 'x'); if (errCode) {\n throw new FS.ErrnoError(errCode)\n }FS.currentPath = lookup.path\n }, createDefaultDirectories() {\n FS.mkdir('/tmp'); FS.mkdir('/home'); FS.mkdir('/home/web_user')\n }, createDefaultDevices() {\n FS.mkdir('/dev'); FS.registerDevice(FS.makedev(1, 3), { read: () => 0, write: (stream, buffer, offset, length, pos) => length, llseek: () => 0 }); FS.mkdev('/dev/null', FS.makedev(1, 3)); TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); FS.mkdev('/dev/tty', FS.makedev(5, 0)); FS.mkdev('/dev/tty1', FS.makedev(6, 0)); const randomBuffer = new Uint8Array(1024); let randomLeft = 0; const randomByte = () => {\n if (randomLeft === 0) {\n randomFill(randomBuffer); randomLeft = randomBuffer.byteLength\n } return randomBuffer[--randomLeft]\n }; FS.createDevice('/dev', 'random', randomByte); FS.createDevice('/dev', 'urandom', randomByte); FS.mkdir('/dev/shm'); FS.mkdir('/dev/shm/tmp')\n }, createSpecialDirectories() {\n FS.mkdir('/proc'); const proc_self = FS.mkdir('/proc/self'); FS.mkdir('/proc/self/fd'); FS.mount({ mount() {\n const node = FS.createNode(proc_self, 'fd', 16895, 73); node.stream_ops = { llseek: MEMFS.stream_ops.llseek }; node.node_ops = { lookup(parent, name) {\n const fd = +name; const stream = FS.getStreamChecked(fd); const ret = { parent: null, mount: { mountpoint: 'fake' }, node_ops: { readlink: () => stream.path }, id: fd + 1 }; ret.parent = ret; return ret\n }, readdir() {\n return Array.from(FS.streams.entries()).filter(([k, v]) => v).map(([k, v]) => k.toString())\n } }; return node\n } }, {}, '/proc/self/fd')\n }, createStandardStreams(input, output, error) {\n if (input) {\n FS.createDevice('/dev', 'stdin', input)\n } else {\n FS.symlink('/dev/tty', '/dev/stdin')\n } if (output) {\n FS.createDevice('/dev', 'stdout', null, output)\n } else {\n FS.symlink('/dev/tty', '/dev/stdout')\n } if (error) {\n FS.createDevice('/dev', 'stderr', null, error)\n } else {\n FS.symlink('/dev/tty1', '/dev/stderr')\n } const stdin = FS.open('/dev/stdin', 0); const stdout = FS.open('/dev/stdout', 1); const stderr = FS.open('/dev/stderr', 1)\n }, staticInit() {\n FS.nameTable = Array.from({ length: 4096 }); FS.mount(MEMFS, {}, '/'); FS.createDefaultDirectories(); FS.createDefaultDevices(); FS.createSpecialDirectories(); FS.filesystems = { MEMFS, IDBFS }\n }, init(input, output, error) {\n FS.initialized = true; input ??= Module.stdin; output ??= Module.stdout; error ??= Module.stderr; FS.createStandardStreams(input, output, error)\n }, quit() {\n FS.initialized = false; for (const stream of FS.streams) {\n if (stream) {\n FS.close(stream)\n }\n }\n }, findObject(path, dontResolveLastLink) {\n const ret = FS.analyzePath(path, dontResolveLastLink); if (!ret.exists) {\n return null\n } return ret.object\n }, analyzePath(path, dontResolveLastLink) {\n try {\n var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); path = lookup.path\n } catch (e) {} const ret = { isRoot: false, exists: false, error: 0, name: null, path: null, object: null, parentExists: false, parentPath: null, parentObject: null }; try {\n var lookup = FS.lookupPath(path, { parent: true }); ret.parentExists = true; ret.parentPath = lookup.path; ret.parentObject = lookup.node; ret.name = PATH.basename(path); lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); ret.exists = true; ret.path = lookup.path; ret.object = lookup.node; ret.name = lookup.node.name; ret.isRoot = lookup.path === '/'\n } catch (e) {\n ret.error = e.errno\n } return ret\n }, createPath(parent, path, canRead, canWrite) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent); const parts = path.split('/').reverse(); while (parts.length) {\n const part = parts.pop(); if (!part)\n continue; var current = PATH.join2(parent, part); try {\n FS.mkdir(current)\n } catch (e) {\n if (e.errno != 20)\n throw e\n }parent = current\n } return current\n }, createFile(parent, name, properties, canRead, canWrite) {\n const path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); const mode = FS_getMode(canRead, canWrite); return FS.create(path, mode)\n }, createDataFile(parent, name, data, canRead, canWrite, canOwn) {\n let path = name; if (parent) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent); path = name ? PATH.join2(parent, name) : parent\n } const mode = FS_getMode(canRead, canWrite); const node = FS.create(path, mode); if (data) {\n if (typeof data == 'string') {\n const arr = Array.from({ length: data.length }); for (let i = 0, len = data.length; i < len; ++i)arr[i] = data.charCodeAt(i); data = arr\n }FS.chmod(node, mode | 146); const stream = FS.open(node, 577); FS.write(stream, data, 0, data.length, 0, canOwn); FS.close(stream); FS.chmod(node, mode)\n }\n }, createDevice(parent, name, input, output) {\n const path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); const mode = FS_getMode(!!input, !!output); FS.createDevice.major ??= 64; const dev = FS.makedev(FS.createDevice.major++, 0); FS.registerDevice(dev, { open(stream) {\n stream.seekable = false\n }, close(stream) {\n if (output?.buffer?.length) {\n output(10)\n }\n }, read(stream, buffer, offset, length, pos) {\n let bytesRead = 0; for (let i = 0; i < length; i++) {\n var result; try {\n result = input()\n } catch (e) {\n throw new FS.ErrnoError(29)\n } if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6)\n } if (result === null || result === undefined)\n break; bytesRead++; buffer[offset + i] = result\n } if (bytesRead) {\n stream.node.atime = Date.now()\n } return bytesRead\n }, write(stream, buffer, offset, length, pos) {\n for (var i = 0; i < length; i++) {\n try {\n output(buffer[offset + i])\n } catch (e) {\n throw new FS.ErrnoError(29)\n }\n } if (length) {\n stream.node.mtime = stream.node.ctime = Date.now()\n } return i\n } }); return FS.mkdev(path, mode, dev)\n }, forceLoadFile(obj) {\n if (obj.isDevice || obj.isFolder || obj.link || obj.contents)\n return true; if (globalThis.XMLHttpRequest) {\n abort('Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.')\n } else {\n try {\n obj.contents = readBinary(obj.url)\n } catch (e) {\n throw new FS.ErrnoError(29)\n }\n }\n }, createLazyFile(parent, name, url, canRead, canWrite) {\n class LazyUint8Array {\n lengthKnown = false; chunks = []; get(idx) {\n if (idx > this.length - 1 || idx < 0) {\n return undefined\n } const chunkOffset = idx % this.chunkSize; const chunkNum = idx / this.chunkSize | 0; return this.getter(chunkNum)[chunkOffset]\n }\n\n setDataGetter(getter) {\n this.getter = getter\n }\n\n cacheLength() {\n const xhr = new XMLHttpRequest(); xhr.open('HEAD', url, false); xhr.send(null); if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))\n abort(`Couldn't load ${url}. Status: ${xhr.status}`); let datalength = Number(xhr.getResponseHeader('Content-length')); let header; const hasByteServing = (header = xhr.getResponseHeader('Accept-Ranges')) && header === 'bytes'; const usesGzip = (header = xhr.getResponseHeader('Content-Encoding')) && header === 'gzip'; let chunkSize = 1024 * 1024; if (!hasByteServing)\n chunkSize = datalength; const doXHR = (from, to) => {\n if (from > to)\n abort(`invalid range (${from}, ${to}) or no bytes requested!`); if (to > datalength - 1)\n abort(`only ${datalength} bytes available! programmer error!`); const xhr = new XMLHttpRequest(); xhr.open('GET', url, false); if (datalength !== chunkSize)\n xhr.setRequestHeader('Range', `bytes=${from}-${to}`); xhr.responseType = 'arraybuffer'; if (xhr.overrideMimeType) {\n xhr.overrideMimeType('text/plain; charset=x-user-defined')\n }xhr.send(null); if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))\n abort(`Couldn't load ${url}. Status: ${xhr.status}`); if (xhr.response !== undefined) {\n return new Uint8Array(xhr.response || [])\n } return intArrayFromString(xhr.responseText || '', true)\n }; const lazyArray = this; lazyArray.setDataGetter((chunkNum) => {\n const start = chunkNum * chunkSize; let end = (chunkNum + 1) * chunkSize - 1; end = Math.min(end, datalength - 1); if (typeof lazyArray.chunks[chunkNum] == 'undefined') {\n lazyArray.chunks[chunkNum] = doXHR(start, end)\n } if (typeof lazyArray.chunks[chunkNum] == 'undefined')\n abort('doXHR failed!'); return lazyArray.chunks[chunkNum]\n }); if (usesGzip || !datalength) {\n chunkSize = datalength = 1; datalength = this.getter(0).length; chunkSize = datalength; out('LazyFiles on gzip forces download of the whole file when length is accessed')\n } this._length = datalength; this._chunkSize = chunkSize; this.lengthKnown = true\n }\n\n get length() {\n if (!this.lengthKnown) {\n this.cacheLength()\n } return this._length\n }\n\n get chunkSize() {\n if (!this.lengthKnown) {\n this.cacheLength()\n } return this._chunkSize\n }\n } if (globalThis.XMLHttpRequest) {\n if (!ENVIRONMENT_IS_WORKER)\n abort('Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'); const lazyArray = new LazyUint8Array(); var properties = { isDevice: false, contents: lazyArray }\n } else {\n var properties = { isDevice: false, url }\n } const node = FS.createFile(parent, name, properties, canRead, canWrite); if (properties.contents) {\n node.contents = properties.contents\n } else if (properties.url) {\n node.contents = null; node.url = properties.url\n }Object.defineProperties(node, { usedBytes: { get() {\n return this.contents.length\n } } }); const stream_ops = {}; for (const [key, fn] of Object.entries(node.stream_ops)) {\n stream_ops[key] = (...args) => {\n FS.forceLoadFile(node); return fn(...args)\n }\n } function writeChunks(stream, buffer, offset, length, position) {\n const contents = stream.node.contents; if (position >= contents.length)\n return 0; const size = Math.min(contents.length - position, length); if (contents.slice) {\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents[position + i]\n }\n } else {\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents.get(position + i)\n }\n } return size\n }stream_ops.read = (stream, buffer, offset, length, position) => {\n FS.forceLoadFile(node); return writeChunks(stream, buffer, offset, length, position)\n }; stream_ops.mmap = (stream, length, position, prot, flags) => {\n FS.forceLoadFile(node); const ptr = mmapAlloc(length); if (!ptr) {\n throw new FS.ErrnoError(48)\n }writeChunks(stream, HEAP8, ptr, length, position); return { ptr, allocated: true }\n }; node.stream_ops = stream_ops; return node\n } }; const UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => {\n ptr >>>= 0; if (!ptr)\n return ''; const end = findStringEnd(HEAPU8, ptr, maxBytesToRead, ignoreNul); return UTF8Decoder.decode(HEAPU8.subarray(ptr >>> 0, end >>> 0))\n }; var SYSCALLS = { calculateAt(dirfd, path, allowEmpty) {\n if (PATH.isAbs(path)) {\n return path\n } let dir; if (dirfd === -100) {\n dir = FS.cwd()\n } else {\n const dirstream = SYSCALLS.getStreamFromFD(dirfd); dir = dirstream.path\n } if (path.length == 0) {\n if (!allowEmpty) {\n throw new FS.ErrnoError(44)\n } return dir\n } return `${dir}/${path}`\n }, writeStat(buf, stat) {\n HEAPU32[buf >>> 2 >>> 0] = stat.dev; HEAPU32[buf + 4 >>> 2 >>> 0] = stat.mode; HEAPU32[buf + 8 >>> 2 >>> 0] = stat.nlink; HEAPU32[buf + 12 >>> 2 >>> 0] = stat.uid; HEAPU32[buf + 16 >>> 2 >>> 0] = stat.gid; HEAPU32[buf + 20 >>> 2 >>> 0] = stat.rdev; HEAP64[buf + 24 >>> 3 >>> 0] = BigInt(stat.size); HEAP32[buf + 32 >>> 2 >>> 0] = 4096; HEAP32[buf + 36 >>> 2 >>> 0] = stat.blocks; const atime = stat.atime.getTime(); const mtime = stat.mtime.getTime(); const ctime = stat.ctime.getTime(); HEAP64[buf + 40 >>> 3 >>> 0] = BigInt(Math.floor(atime / 1e3)); HEAPU32[buf + 48 >>> 2 >>> 0] = atime % 1e3 * 1e3 * 1e3; HEAP64[buf + 56 >>> 3 >>> 0] = BigInt(Math.floor(mtime / 1e3)); HEAPU32[buf + 64 >>> 2 >>> 0] = mtime % 1e3 * 1e3 * 1e3; HEAP64[buf + 72 >>> 3 >>> 0] = BigInt(Math.floor(ctime / 1e3)); HEAPU32[buf + 80 >>> 2 >>> 0] = ctime % 1e3 * 1e3 * 1e3; HEAP64[buf + 88 >>> 3 >>> 0] = BigInt(stat.ino); return 0\n }, writeStatFs(buf, stats) {\n HEAPU32[buf + 4 >>> 2 >>> 0] = stats.bsize; HEAPU32[buf + 60 >>> 2 >>> 0] = stats.bsize; HEAP64[buf + 8 >>> 3 >>> 0] = BigInt(stats.blocks); HEAP64[buf + 16 >>> 3 >>> 0] = BigInt(stats.bfree); HEAP64[buf + 24 >>> 3 >>> 0] = BigInt(stats.bavail); HEAP64[buf + 32 >>> 3 >>> 0] = BigInt(stats.files); HEAP64[buf + 40 >>> 3 >>> 0] = BigInt(stats.ffree); HEAPU32[buf + 48 >>> 2 >>> 0] = stats.fsid; HEAPU32[buf + 64 >>> 2 >>> 0] = stats.flags; HEAPU32[buf + 56 >>> 2 >>> 0] = stats.namelen\n }, doMsync(addr, stream, len, flags, offset) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43)\n } if (flags & 2) {\n return 0\n } const buffer = HEAPU8.slice(addr, addr + len); FS.msync(stream, buffer, offset, len, flags)\n }, getStreamFromFD(fd) {\n const stream = FS.getStreamChecked(fd); return stream\n }, varargs: undefined, getStr(ptr) {\n const ret = UTF8ToString(ptr); return ret\n } }; const INT53_MAX = 9007199254740992; const INT53_MIN = -9007199254740992; const bigintToI53Checked = num => num < INT53_MIN || num > INT53_MAX ? Number.NaN : Number(num); function ___syscall_chmod(path, mode) {\n path >>>= 0; try {\n path = SYSCALLS.getStr(path); FS.chmod(path, mode); return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_faccessat(dirfd, path, amode, flags) {\n path >>>= 0; try {\n path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); if (amode & ~7) {\n return -28\n } const lookup = FS.lookupPath(path, { follow: true }); const node = lookup.node; if (!node) {\n return -44\n } let perms = ''; if (amode & 4)\n perms += 'r'; if (amode & 2)\n perms += 'w'; if (amode & 1)\n perms += 'x'; if (perms && FS.nodePermissions(node, perms)) {\n return -2\n } return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_fchmod(fd, mode) {\n try {\n FS.fchmod(fd, mode); return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } const syscallGetVarargI = () => {\n const ret = HEAP32[+SYSCALLS.varargs >>> 2 >>> 0]; SYSCALLS.varargs += 4; return ret\n }; const syscallGetVarargP = syscallGetVarargI; function ___syscall_fcntl64(fd, cmd, varargs) {\n varargs >>>= 0; SYSCALLS.varargs = varargs; try {\n const stream = SYSCALLS.getStreamFromFD(fd); switch (cmd) {\n case 0:{ var arg = syscallGetVarargI(); if (arg < 0) {\n return -28\n } while (FS.streams[arg]) {\n arg++\n } let newStream; newStream = FS.dupStream(stream, arg); return newStream.fd } case 1:case 2:return 0; case 3:return stream.flags; case 4:{ var arg = syscallGetVarargI(); stream.flags |= arg; return 0 } case 12:{ var arg = syscallGetVarargP(); const offset = 0; HEAP16[arg + offset >>> 1 >>> 0] = 2; return 0 } case 13:case 14:return 0\n } return -28\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_fdatasync(fd) {\n try {\n const stream = SYSCALLS.getStreamFromFD(fd); return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_fstat64(fd, buf) {\n buf >>>= 0; try {\n return SYSCALLS.writeStat(buf, FS.fstat(fd))\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_ftruncate64(fd, length) {\n length = bigintToI53Checked(length); try {\n if (isNaN(length))\n return -61; FS.ftruncate(fd, length); return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } const stringToUTF8 = (str, outPtr, maxBytesToWrite) => stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); function ___syscall_getcwd(buf, size) {\n buf >>>= 0; size >>>= 0; try {\n if (size === 0)\n return -28; const cwd = FS.cwd(); const cwdLengthInBytes = lengthBytesUTF8(cwd) + 1; if (size < cwdLengthInBytes)\n return -68; stringToUTF8(cwd, buf, size); return cwdLengthInBytes\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_getdents64(fd, dirp, count) {\n dirp >>>= 0; count >>>= 0; try {\n const stream = SYSCALLS.getStreamFromFD(fd); stream.getdents ||= FS.readdir(stream.path); const struct_size = 280; let pos = 0; const off = FS.llseek(stream, 0, 1); const startIdx = Math.floor(off / struct_size); const endIdx = Math.min(stream.getdents.length, startIdx + Math.floor(count / struct_size)); for (var idx = startIdx; idx < endIdx; idx++) {\n var id; var type; const name = stream.getdents[idx]; if (name === '.') {\n id = stream.node.id; type = 4\n } else if (name === '..') {\n const lookup = FS.lookupPath(stream.path, { parent: true }); id = lookup.node.id; type = 4\n } else {\n var child; try {\n child = FS.lookupNode(stream.node, name)\n } catch (e) {\n if (e?.errno === 28) {\n continue\n } throw e\n }id = child.id; type = FS.isChrdev(child.mode) ? 2 : FS.isDir(child.mode) ? 4 : FS.isLink(child.mode) ? 10 : 8\n }HEAP64[dirp + pos >>> 3 >>> 0] = BigInt(id); HEAP64[dirp + pos + 8 >>> 3 >>> 0] = BigInt((idx + 1) * struct_size); HEAP16[dirp + pos + 16 >>> 1 >>> 0] = 280; HEAP8[dirp + pos + 18 >>> 0] = type; stringToUTF8(name, dirp + pos + 19, 256); pos += struct_size\n }FS.llseek(stream, idx * struct_size, 0); return pos\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_ioctl(fd, op, varargs) {\n varargs >>>= 0; SYSCALLS.varargs = varargs; try {\n const stream = SYSCALLS.getStreamFromFD(fd); switch (op) {\n case 21509:{ if (!stream.tty)\n return -59; return 0 } case 21505:{ if (!stream.tty)\n return -59; if (stream.tty.ops.ioctl_tcgets) {\n const termios = stream.tty.ops.ioctl_tcgets(stream); var argp = syscallGetVarargP(); HEAP32[argp >>> 2 >>> 0] = termios.c_iflag || 0; HEAP32[argp + 4 >>> 2 >>> 0] = termios.c_oflag || 0; HEAP32[argp + 8 >>> 2 >>> 0] = termios.c_cflag || 0; HEAP32[argp + 12 >>> 2 >>> 0] = termios.c_lflag || 0; for (var i = 0; i < 32; i++) {\n HEAP8[argp + i + 17 >>> 0] = termios.c_cc[i] || 0\n } return 0\n } return 0 } case 21510:case 21511:case 21512:{ if (!stream.tty)\n return -59; return 0 } case 21506:case 21507:case 21508:{ if (!stream.tty)\n return -59; if (stream.tty.ops.ioctl_tcsets) {\n var argp = syscallGetVarargP(); const c_iflag = HEAP32[argp >>> 2 >>> 0]; const c_oflag = HEAP32[argp + 4 >>> 2 >>> 0]; const c_cflag = HEAP32[argp + 8 >>> 2 >>> 0]; const c_lflag = HEAP32[argp + 12 >>> 2 >>> 0]; const c_cc = []; for (var i = 0; i < 32; i++) {\n c_cc.push(HEAP8[argp + i + 17 >>> 0])\n } return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc })\n } return 0 } case 21519:{ if (!stream.tty)\n return -59; var argp = syscallGetVarargP(); HEAP32[argp >>> 2 >>> 0] = 0; return 0 } case 21520:{ if (!stream.tty)\n return -59; return -28 } case 21537:case 21531:{ var argp = syscallGetVarargP(); return FS.ioctl(stream, op, argp) } case 21523:{ if (!stream.tty)\n return -59; if (stream.tty.ops.ioctl_tiocgwinsz) {\n const winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); var argp = syscallGetVarargP(); HEAP16[argp >>> 1 >>> 0] = winsize[0]; HEAP16[argp + 2 >>> 1 >>> 0] = winsize[1]\n } return 0 } case 21524:{ if (!stream.tty)\n return -59; return 0 } case 21515:{ if (!stream.tty)\n return -59; return 0 } default:return -28\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_lstat64(path, buf) {\n path >>>= 0; buf >>>= 0; try {\n path = SYSCALLS.getStr(path); return SYSCALLS.writeStat(buf, FS.lstat(path))\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_mkdirat(dirfd, path, mode) {\n path >>>= 0; try {\n path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); FS.mkdir(path, mode, 0); return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_newfstatat(dirfd, path, buf, flags) {\n path >>>= 0; buf >>>= 0; try {\n path = SYSCALLS.getStr(path); const nofollow = flags & 256; const allowEmpty = flags & 4096; flags = flags & ~6400; path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path))\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_openat(dirfd, path, flags, varargs) {\n path >>>= 0; varargs >>>= 0; SYSCALLS.varargs = varargs; try {\n path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); const mode = varargs ? syscallGetVarargI() : 0; return FS.open(path, flags, mode).fd\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_readlinkat(dirfd, path, buf, bufsize) {\n path >>>= 0; buf >>>= 0; bufsize >>>= 0; try {\n path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); if (bufsize <= 0)\n return -28; const ret = FS.readlink(path); const len = Math.min(bufsize, lengthBytesUTF8(ret)); const endChar = HEAP8[buf + len >>> 0]; stringToUTF8(ret, buf, bufsize + 1); HEAP8[buf + len >>> 0] = endChar; return len\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) {\n oldpath >>>= 0; newpath >>>= 0; try {\n oldpath = SYSCALLS.getStr(oldpath); newpath = SYSCALLS.getStr(newpath); oldpath = SYSCALLS.calculateAt(olddirfd, oldpath); newpath = SYSCALLS.calculateAt(newdirfd, newpath); FS.rename(oldpath, newpath); return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_rmdir(path) {\n path >>>= 0; try {\n path = SYSCALLS.getStr(path); FS.rmdir(path); return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_stat64(path, buf) {\n path >>>= 0; buf >>>= 0; try {\n path = SYSCALLS.getStr(path); return SYSCALLS.writeStat(buf, FS.stat(path))\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_truncate64(path, length) {\n path >>>= 0; length = bigintToI53Checked(length); try {\n if (isNaN(length))\n return -61; path = SYSCALLS.getStr(path); FS.truncate(path, length); return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function ___syscall_unlinkat(dirfd, path, flags) {\n path >>>= 0; try {\n path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); if (!flags) {\n FS.unlink(path)\n } else if (flags === 512) {\n FS.rmdir(path)\n } else {\n return -28\n } return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } const __abort_js = () => abort(''); let runtimeKeepaliveCounter = 0; const __emscripten_runtime_keepalive_clear = () => {\n noExitRuntime = false; runtimeKeepaliveCounter = 0\n }; const isLeapYear = year => year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); const MONTH_DAYS_LEAP_CUMULATIVE = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; const MONTH_DAYS_REGULAR_CUMULATIVE = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; const ydayFromDate = (date) => {\n const leap = isLeapYear(date.getFullYear()); const monthDaysCumulative = leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE; const yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; return yday\n }; function __localtime_js(time, tmPtr) {\n time = bigintToI53Checked(time); tmPtr >>>= 0; const date = new Date(time * 1e3); HEAP32[tmPtr >>> 2 >>> 0] = date.getSeconds(); HEAP32[tmPtr + 4 >>> 2 >>> 0] = date.getMinutes(); HEAP32[tmPtr + 8 >>> 2 >>> 0] = date.getHours(); HEAP32[tmPtr + 12 >>> 2 >>> 0] = date.getDate(); HEAP32[tmPtr + 16 >>> 2 >>> 0] = date.getMonth(); HEAP32[tmPtr + 20 >>> 2 >>> 0] = date.getFullYear() - 1900; HEAP32[tmPtr + 24 >>> 2 >>> 0] = date.getDay(); const yday = ydayFromDate(date) | 0; HEAP32[tmPtr + 28 >>> 2 >>> 0] = yday; HEAP32[tmPtr + 36 >>> 2 >>> 0] = -(date.getTimezoneOffset() * 60); const start = new Date(date.getFullYear(), 0, 1); const summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); const winterOffset = start.getTimezoneOffset(); const dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0; HEAP32[tmPtr + 32 >>> 2 >>> 0] = dst\n } function __mmap_js(len, prot, flags, fd, offset, allocated, addr) {\n len >>>= 0; offset = bigintToI53Checked(offset); allocated >>>= 0; addr >>>= 0; try {\n const stream = SYSCALLS.getStreamFromFD(fd); const res = FS.mmap(stream, len, offset, prot, flags); const ptr = res.ptr; HEAP32[allocated >>> 2 >>> 0] = res.allocated; HEAPU32[addr >>> 2 >>> 0] = ptr; return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } function __munmap_js(addr, len, prot, flags, fd, offset) {\n addr >>>= 0; len >>>= 0; offset = bigintToI53Checked(offset); try {\n const stream = SYSCALLS.getStreamFromFD(fd); if (prot & 2) {\n SYSCALLS.doMsync(addr, stream, len, flags, offset)\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return -e.errno\n }\n } const timers = {}; const handleException = (e) => {\n if (e instanceof ExitStatus || e == 'unwind') {\n return EXITSTATUS\n }quit_(1, e)\n }; const keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; const _proc_exit = (code) => {\n EXITSTATUS = code; if (!keepRuntimeAlive()) {\n Module.onExit?.(code); ABORT = true\n }quit_(code, new ExitStatus(code))\n }; const exitJS = (status, implicit) => {\n EXITSTATUS = status; _proc_exit(status)\n }; const _exit = exitJS; const maybeExit = () => {\n if (!keepRuntimeAlive()) {\n try {\n _exit(EXITSTATUS)\n } catch (e) {\n handleException(e)\n }\n }\n }; const callUserCallback = (func) => {\n if (ABORT) {\n return\n } try {\n return func()\n } catch (e) {\n handleException(e)\n } finally {\n maybeExit()\n }\n }; const _emscripten_get_now = () => performance.now(); const __setitimer_js = (which, timeout_ms) => {\n if (timers[which]) {\n clearTimeout(timers[which].id); delete timers[which]\n } if (!timeout_ms)\n return 0; const id = setTimeout(() => {\n delete timers[which]; callUserCallback(() => __emscripten_timeout(which, _emscripten_get_now()))\n }, timeout_ms); timers[which] = { id, timeout_ms }; return 0\n }; const __tzset_js = function (timezone, daylight, std_name, dst_name) {\n timezone >>>= 0; daylight >>>= 0; std_name >>>= 0; dst_name >>>= 0; const currentYear = (new Date()).getFullYear(); const winter = new Date(currentYear, 0, 1); const summer = new Date(currentYear, 6, 1); const winterOffset = winter.getTimezoneOffset(); const summerOffset = summer.getTimezoneOffset(); const stdTimezoneOffset = Math.max(winterOffset, summerOffset); HEAPU32[timezone >>> 2 >>> 0] = stdTimezoneOffset * 60; HEAP32[daylight >>> 2 >>> 0] = Number(winterOffset != summerOffset); const extractZone = (timezoneOffset) => {\n const sign = timezoneOffset >= 0 ? '-' : '+'; const absOffset = Math.abs(timezoneOffset); const hours = String(Math.floor(absOffset / 60)).padStart(2, '0'); const minutes = String(absOffset % 60).padStart(2, '0'); return `UTC${sign}${hours}${minutes}`\n }; const winterName = extractZone(winterOffset); const summerName = extractZone(summerOffset); if (summerOffset < winterOffset) {\n stringToUTF8(winterName, std_name, 17); stringToUTF8(summerName, dst_name, 17)\n } else {\n stringToUTF8(winterName, dst_name, 17); stringToUTF8(summerName, std_name, 17)\n }\n }; const _emscripten_date_now = () => Date.now(); const nowIsMonotonic = 1; const checkWasiClock = clock_id => clock_id >= 0 && clock_id <= 3; function _clock_time_get(clk_id, ignored_precision, ptime) {\n ignored_precision = bigintToI53Checked(ignored_precision); ptime >>>= 0; if (!checkWasiClock(clk_id)) {\n return 28\n } let now; if (clk_id === 0) {\n now = _emscripten_date_now()\n } else if (nowIsMonotonic) {\n now = _emscripten_get_now()\n } else {\n return 52\n } const nsec = Math.round(now * 1e3 * 1e3); HEAP64[ptime >>> 3 >>> 0] = BigInt(nsec); return 0\n } const getHeapMax = () => 4294901760; const growMemory = (size) => {\n const oldHeapSize = wasmMemory.buffer.byteLength; const pages = (size - oldHeapSize + 65535) / 65536 | 0; try {\n wasmMemory.grow(pages); updateMemoryViews(); return 1\n } catch (e) {}\n }; function _emscripten_resize_heap(requestedSize) {\n requestedSize >>>= 0; const oldSize = HEAPU8.length; const maxHeapSize = getHeapMax(); if (requestedSize > maxHeapSize) {\n return false\n } for (let cutDown = 1; cutDown <= 4; cutDown *= 2) {\n let overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); const newSize = Math.min(maxHeapSize, alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536)); const replacement = growMemory(newSize); if (replacement) {\n return true\n }\n } return false\n } const ENV = {}; const getExecutableName = () => thisProgram || './this.program'; const getEnvStrings = () => {\n if (!getEnvStrings.strings) {\n const lang = `${(globalThis.navigator?.language ?? 'C').replace('-', '_')}.UTF-8`; const env = { USER: 'web_user', LOGNAME: 'web_user', PATH: '/', PWD: '/', HOME: '/home/web_user', LANG: lang, _: getExecutableName() }; for (var x in ENV) {\n if (ENV[x] === undefined)\n delete env[x]; else env[x] = ENV[x]\n } const strings = []; for (var x in env) {\n strings.push(`${x}=${env[x]}`)\n }getEnvStrings.strings = strings\n } return getEnvStrings.strings\n }; function _environ_get(__environ, environ_buf) {\n __environ >>>= 0; environ_buf >>>= 0; let bufSize = 0; let envp = 0; for (const string of getEnvStrings()) {\n const ptr = environ_buf + bufSize; HEAPU32[__environ + envp >>> 2 >>> 0] = ptr; bufSize += stringToUTF8(string, ptr, Infinity) + 1; envp += 4\n } return 0\n } function _environ_sizes_get(penviron_count, penviron_buf_size) {\n penviron_count >>>= 0; penviron_buf_size >>>= 0; const strings = getEnvStrings(); HEAPU32[penviron_count >>> 2 >>> 0] = strings.length; let bufSize = 0; for (const string of strings) {\n bufSize += lengthBytesUTF8(string) + 1\n }HEAPU32[penviron_buf_size >>> 2 >>> 0] = bufSize; return 0\n } function _fd_close(fd) {\n try {\n const stream = SYSCALLS.getStreamFromFD(fd); FS.close(stream); return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return e.errno\n }\n } function _fd_fdstat_get(fd, pbuf) {\n pbuf >>>= 0; try {\n const rightsBase = 0; const rightsInheriting = 0; const flags = 0; { const stream = SYSCALLS.getStreamFromFD(fd); var type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4 }HEAP8[pbuf >>> 0] = type; HEAP16[pbuf + 2 >>> 1 >>> 0] = flags; HEAP64[pbuf + 8 >>> 3 >>> 0] = BigInt(rightsBase); HEAP64[pbuf + 16 >>> 3 >>> 0] = BigInt(rightsInheriting); return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return e.errno\n }\n } const doReadv = (stream, iov, iovcnt, offset) => {\n let ret = 0; for (let i = 0; i < iovcnt; i++) {\n const ptr = HEAPU32[iov >>> 2 >>> 0]; const len = HEAPU32[iov + 4 >>> 2 >>> 0]; iov += 8; const curr = FS.read(stream, HEAP8, ptr, len, offset); if (curr < 0)\n return -1; ret += curr; if (curr < len)\n break; if (typeof offset != 'undefined') {\n offset += curr\n }\n } return ret\n }; function _fd_pread(fd, iov, iovcnt, offset, pnum) {\n iov >>>= 0; iovcnt >>>= 0; offset = bigintToI53Checked(offset); pnum >>>= 0; try {\n if (isNaN(offset))\n return 61; const stream = SYSCALLS.getStreamFromFD(fd); const num = doReadv(stream, iov, iovcnt, offset); HEAPU32[pnum >>> 2 >>> 0] = num; return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return e.errno\n }\n } function _fd_read(fd, iov, iovcnt, pnum) {\n iov >>>= 0; iovcnt >>>= 0; pnum >>>= 0; try {\n const stream = SYSCALLS.getStreamFromFD(fd); const num = doReadv(stream, iov, iovcnt); HEAPU32[pnum >>> 2 >>> 0] = num; return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return e.errno\n }\n } function _fd_seek(fd, offset, whence, newOffset) {\n offset = bigintToI53Checked(offset); newOffset >>>= 0; try {\n if (isNaN(offset))\n return 61; const stream = SYSCALLS.getStreamFromFD(fd); FS.llseek(stream, offset, whence); HEAP64[newOffset >>> 3 >>> 0] = BigInt(stream.position); if (stream.getdents && offset === 0 && whence === 0)\n stream.getdents = null; return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return e.errno\n }\n } const doWritev = (stream, iov, iovcnt, offset) => {\n let ret = 0; for (let i = 0; i < iovcnt; i++) {\n const ptr = HEAPU32[iov >>> 2 >>> 0]; const len = HEAPU32[iov + 4 >>> 2 >>> 0]; iov += 8; const curr = FS.write(stream, HEAP8, ptr, len, offset); if (curr < 0)\n return -1; ret += curr; if (curr < len) {\n break\n } if (typeof offset != 'undefined') {\n offset += curr\n }\n } return ret\n }; function _fd_write(fd, iov, iovcnt, pnum) {\n iov >>>= 0; iovcnt >>>= 0; pnum >>>= 0; try {\n const stream = SYSCALLS.getStreamFromFD(fd); const num = doWritev(stream, iov, iovcnt); HEAPU32[pnum >>> 2 >>> 0] = num; return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return e.errno\n }\n } function _random_get(buffer, size) {\n buffer >>>= 0; size >>>= 0; try {\n randomFill(HEAPU8.subarray(buffer >>> 0, buffer + size >>> 0)); return 0\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError'))\n throw e; return e.errno\n }\n } const getCFunc = (ident) => {\n const func = Module[`_${ident}`]; return func\n }; const writeArrayToMemory = (array, buffer) => {\n HEAP8.set(array, buffer >>> 0)\n }; const stackAlloc = sz => __emscripten_stack_alloc(sz); const stringToUTF8OnStack = (str) => {\n const size = lengthBytesUTF8(str) + 1; const ret = stackAlloc(size); stringToUTF8(str, ret, size); return ret\n }; const stackSave = () => _emscripten_stack_get_current(); const stackRestore = val => __emscripten_stack_restore(val); const ccall = (ident, returnType, argTypes, args, opts) => {\n const toC = { string: (str) => {\n let ret = 0; if (str !== null && str !== undefined && str !== 0) {\n ret = stringToUTF8OnStack(str)\n } return ret\n }, array: (arr) => {\n const ret = stackAlloc(arr.length); writeArrayToMemory(arr, ret); return ret\n } }; function convertReturnValue(ret) {\n if (returnType === 'string') {\n return UTF8ToString(ret)\n } if (returnType === 'pointer')\n return ret >>> 0; if (returnType === 'boolean')\n return Boolean(ret); return ret\n } const func = getCFunc(ident); const cArgs = []; let stack = 0; if (args) {\n for (let i = 0; i < args.length; i++) {\n const converter = toC[argTypes[i]]; if (converter) {\n if (stack === 0)\n stack = stackSave(); cArgs[i] = converter(args[i])\n } else {\n cArgs[i] = args[i]\n }\n }\n } let ret = func(...cArgs); function onDone(ret) {\n if (stack !== 0)\n stackRestore(stack); return convertReturnValue(ret)\n }ret = onDone(ret); return ret\n }; const FS_createPath = (...args) => FS.createPath(...args); const FS_unlink = (...args) => FS.unlink(...args); const FS_createLazyFile = (...args) => FS.createLazyFile(...args); const FS_createDevice = (...args) => FS.createDevice(...args); FS.createPreloadedFile = FS_createPreloadedFile; FS.preloadFile = FS_preloadFile; FS.staticInit(); { if (Module.noExitRuntime)\n noExitRuntime = Module.noExitRuntime; if (Module.preloadPlugins)\n preloadPlugins = Module.preloadPlugins; if (Module.print)\n out = Module.print; if (Module.printErr)\n err = Module.printErr; if (Module.wasmBinary)\n wasmBinary = Module.wasmBinary; if (Module.arguments)\n arguments_ = Module.arguments; if (Module.thisProgram)\n thisProgram = Module.thisProgram; if (Module.preInit) {\n if (typeof Module.preInit == 'function')\n Module.preInit = [Module.preInit]; while (Module.preInit.length > 0) {\n Module.preInit.shift()()\n }\n } }Module.addRunDependency = addRunDependency; Module.removeRunDependency = removeRunDependency; Module.ccall = ccall; Module.FS_preloadFile = FS_preloadFile; Module.FS_unlink = FS_unlink; Module.FS_createPath = FS_createPath; Module.FS_createDevice = FS_createDevice; Module.FS = FS; Module.FS_createDataFile = FS_createDataFile; Module.FS_createLazyFile = FS_createLazyFile; let _free, _malloc, _rime_wasm_init, _rime_wasm_process_input, _rime_wasm_pick_candidate, _rime_wasm_flip_page, _rime_wasm_clear_input, _rime_wasm_set_option, _rime_wasm_get_version, _rime_wasm_destroy, _emscripten_builtin_memalign, __emscripten_timeout, ___trap, __emscripten_stack_restore, __emscripten_stack_alloc, _emscripten_stack_get_current, memory, __indirect_function_table, wasmMemory; function assignWasmExports(wasmExports) {\n _free = Module._free = wasmExports.R; _malloc = Module._malloc = wasmExports.S; _rime_wasm_init = Module._rime_wasm_init = wasmExports.T; _rime_wasm_process_input = Module._rime_wasm_process_input = wasmExports.U; _rime_wasm_pick_candidate = Module._rime_wasm_pick_candidate = wasmExports.V; _rime_wasm_flip_page = Module._rime_wasm_flip_page = wasmExports.W; _rime_wasm_clear_input = Module._rime_wasm_clear_input = wasmExports.X; _rime_wasm_set_option = Module._rime_wasm_set_option = wasmExports.Y; _rime_wasm_get_version = Module._rime_wasm_get_version = wasmExports.Z; _rime_wasm_destroy = Module._rime_wasm_destroy = wasmExports._; _emscripten_builtin_memalign = wasmExports.$; __emscripten_timeout = wasmExports.aa; ___trap = wasmExports.ba; __emscripten_stack_restore = wasmExports.ca; __emscripten_stack_alloc = wasmExports.da; _emscripten_stack_get_current = wasmExports.ea; memory = wasmMemory = wasmExports.P; __indirect_function_table = wasmExports.__indirect_function_table\n } var wasmImports = { r: ___syscall_chmod, k: ___syscall_faccessat, s: ___syscall_fchmod, c: ___syscall_fcntl64, j: ___syscall_fdatasync, N: ___syscall_fstat64, q: ___syscall_ftruncate64, u: ___syscall_getcwd, A: ___syscall_getdents64, O: ___syscall_ioctl, L: ___syscall_lstat64, G: ___syscall_mkdirat, K: ___syscall_newfstatat, d: ___syscall_openat, v: ___syscall_readlinkat, z: ___syscall_renameat, i: ___syscall_rmdir, M: ___syscall_stat64, t: ___syscall_truncate64, h: ___syscall_unlinkat, l: __abort_js, n: __emscripten_runtime_keepalive_clear, E: __localtime_js, C: __mmap_js, D: __munmap_js, o: __setitimer_js, F: __tzset_js, w: _clock_time_get, e: _emscripten_date_now, b: _emscripten_get_now, x: _emscripten_resize_heap, I: _environ_get, J: _environ_sizes_get, a: _fd_close, y: _fd_fdstat_get, B: _fd_pread, g: _fd_read, H: _fd_seek, f: _fd_write, m: _proc_exit, p: _random_get }; function applySignatureConversions(wasmExports) {\n wasmExports = Object.assign({}, wasmExports); const makeWrapper_pp = f => a0 => f(a0) >>> 0; const makeWrapper_ppp = f => (a0, a1) => f(a0, a1) >>> 0; const makeWrapper_p = f => () => f() >>> 0; wasmExports.S = makeWrapper_pp(wasmExports.S); wasmExports.$ = makeWrapper_ppp(wasmExports.$); wasmExports.da = makeWrapper_pp(wasmExports.da); wasmExports.ea = makeWrapper_p(wasmExports.ea); return wasmExports\n } function run() {\n if (runDependencies > 0) {\n dependenciesFulfilled = run; return\n }preRun(); if (runDependencies > 0) {\n dependenciesFulfilled = run; return\n } function doRun() {\n Module.calledRun = true; if (ABORT)\n return; initRuntime(); readyPromiseResolve?.(Module); Module.onRuntimeInitialized?.(); postRun()\n } if (Module.setStatus) {\n Module.setStatus('Running...'); setTimeout(() => {\n setTimeout(() => Module.setStatus(''), 1); doRun()\n }, 1)\n } else {\n doRun()\n }\n } let wasmExports; wasmExports = await (createWasm()); run(); if (runtimeInitialized) {\n moduleRtn = Module\n } else {\n moduleRtn = new Promise((resolve, reject) => {\n readyPromiseResolve = resolve; readyPromiseReject = reject\n })\n }\n ;return moduleRtn\n} export default createRimeModule\n","import type { RimeEngine, RimeState, RimeWasmOptions } from './types'\nimport createRimeModule from '../data/rime-api.js'\n\ninterface EmscriptenModule {\n ccall(\n ident: string,\n returnType: string | null,\n argTypes: string[],\n args: unknown[],\n ): unknown\n FS: {\n mkdir(path: string): void\n mount(type: unknown, opts: Record<string, unknown>, mountpoint: string): void\n syncfs(populate: boolean, callback: (err: unknown) => void): void\n writeFile(path: string, data: Uint8Array): void\n filesystems: { IDBFS: unknown }\n }\n}\n\nfunction syncfs(module: EmscriptenModule, populate: boolean): Promise<void> {\n return new Promise((resolve, reject) => {\n module.FS.syncfs(populate, (err: unknown) => {\n if (err)\n reject(err)\n else resolve()\n })\n })\n}\n\nexport async function createRimeEngine(\n options: RimeWasmOptions = {},\n): Promise<RimeEngine> {\n const wasmDir = options.wasmDir ?? '.'\n\n const Module: EmscriptenModule = await createRimeModule({\n locateFile(file: string) {\n return `${wasmDir}/${file}`\n },\n }) as EmscriptenModule\n\n // Set up persistent filesystem\n try {\n Module.FS.mkdir('/rime_user')\n } catch {\n // 目录可能已存在\n }\n Module.FS.mount(Module.FS.filesystems.IDBFS, {}, '/rime_user')\n await syncfs(Module, true)\n\n // Create /rime/build directory\n try {\n Module.FS.mkdir('/rime')\n } catch {\n // 可能已存在\n }\n try {\n Module.FS.mkdir('/rime/build')\n } catch {\n // 可能已存在\n }\n\n // 获取所有数据文件(YAML 配置 + 二进制词典)并写入虚拟文件系统\n const allDataFiles = options.dataFiles ?? [\n 'default.yaml',\n 'luna_pinyin.schema.yaml',\n 'luna_pinyin.table.bin',\n 'luna_pinyin.prism.bin',\n 'luna_pinyin.reverse.bin',\n ]\n await Promise.all(\n allDataFiles.map(async (file) => {\n const url = `${wasmDir}/${file}`\n const resp = await fetch(url)\n if (!resp.ok)\n throw new Error(`Failed to fetch ${url}: ${resp.status}`)\n const data = new Uint8Array(await resp.arrayBuffer())\n Module.FS.writeFile(`/rime/build/${file}`, data)\n }),\n )\n\n // Initialize the engine\n const rc = Module.ccall('rime_wasm_init', 'number', [], []) as number\n if (rc !== 0) {\n throw new Error(`rime_wasm_init failed with code ${rc}`)\n }\n\n // 初始部署后持久化\n await syncfs(Module, false)\n\n let destroyed = false\n\n function callJson(fn: string, argTypes: string[], args: unknown[]): RimeState {\n if (destroyed)\n throw new Error('Engine is destroyed')\n const json = Module.ccall(fn, 'string', argTypes, args) as string\n return JSON.parse(json) as RimeState\n }\n\n const engine: RimeEngine = {\n processInput(keys: string): RimeState {\n return callJson('rime_wasm_process_input', ['string'], [keys])\n },\n\n pickCandidate(index: number): RimeState {\n const state = callJson('rime_wasm_pick_candidate', ['number'], [index])\n // 在选词后持久化用户词典\n syncfs(Module, false).catch(() => {})\n return state\n },\n\n flipPage(forward: boolean): RimeState {\n return callJson('rime_wasm_flip_page', ['number'], [forward ? 0 : 1])\n },\n\n clearInput(): void {\n if (destroyed)\n return\n Module.ccall('rime_wasm_clear_input', null, [], [])\n },\n\n setOption(name: string, value: boolean): void {\n if (destroyed)\n return\n Module.ccall('rime_wasm_set_option', null, ['string', 'number'], [name, value ? 1 : 0])\n },\n\n getVersion(): string {\n if (destroyed)\n return 'unknown'\n return Module.ccall('rime_wasm_get_version', 'string', [], []) as string\n },\n\n destroy(): void {\n if (destroyed)\n return\n destroyed = true\n Module.ccall('rime_wasm_destroy', null, [], [])\n syncfs(Module, false).catch(() => {})\n },\n }\n\n return engine\n}\n","import type { PinyinEngine } from '@zh-keyboard/core'\nimport type { RimeEngine, RimeState, RimeWasmOptions } from './types'\nimport { createRimeEngine } from './rime'\n\nexport type PinyinState = RimeState\n\n// 通用拼音引擎接口(从 core 中 re-export 以便直接从本包引用)\nexport type { PinyinEngine } from '@zh-keyboard/core'\n\nexport interface RimePinyinEngineOptions extends RimeWasmOptions {\n /**\n * 是否默认使用简体中文\n * @default true\n */\n simplified?: boolean\n}\n\n/**\n * 创建基于 RIME WASM 的拼音引擎,实现 PinyinEngine 通用接口。\n * 内部处理分页逻辑,processInput 返回所有页的候选词集合。\n */\nexport class RimePinyinEngine implements PinyinEngine {\n private engine: RimeEngine | null = null\n private prevRimeInput = ''\n\n private initPromise: Promise<void> | null = null\n\n constructor(private options: RimePinyinEngineOptions = {}) {\n this.initialize()\n }\n\n private async getEngine() {\n await this.initialize()\n return this.engine!\n }\n\n async initialize(): Promise<void> {\n if (this.initPromise) {\n return this.initPromise\n }\n this.initPromise = (async () => {\n this.engine = await createRimeEngine(this.options)\n this.engine.setOption('zh_simp', this.options.simplified ?? true)\n })()\n return this.initPromise\n }\n\n async processInput(fullPinyin: string) {\n const engine = await this.getEngine()\n if (!fullPinyin) {\n engine.clearInput()\n this.prevRimeInput = ''\n return null\n }\n\n let state: RimeState\n\n if (fullPinyin.startsWith(this.prevRimeInput)) {\n // 增量输入:只发送新增部分\n const delta = fullPinyin.slice(this.prevRimeInput.length)\n state = engine.processInput(delta)\n } else {\n // 删除或修改:清空后重新输入完整拼音\n engine.clearInput()\n state = engine.processInput(fullPinyin)\n }\n\n this.prevRimeInput = fullPinyin\n\n return state\n }\n\n async pickCandidate(index: number) {\n const engine = await this.getEngine()\n return engine.pickCandidate(index)\n }\n\n async clearInput() {\n const engine = await this.getEngine()\n return engine.clearInput()\n }\n\n async setSimplified(simplified: boolean) {\n const engine = await this.getEngine()\n return engine.setOption('zh_simp', simplified)\n }\n\n async destroy() {\n const engine = await this.getEngine()\n return engine.destroy()\n }\n}\n"],"mappings":";AAAA,eAAe,iBAAiB,YAAY,CAAE,GAAE;CAC9C,IAAI;CAAW,MAAM,SAAS;CAAW,MAAM,uBAAuB,WAAW;CAAQ,MAAM,0BAA0B,WAAW;CAAmB,MAAM,sBAAsB,WAAW,SAAS,UAAU,QAAQ,WAAW,SAAS,QAAQ;AAAY,KAAI,qBAAqB;EACxR,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;EAAgB,IAAI,UAAU,cAAc,OAAO,KAAK,IAAI;CACpG;AAAC,MAAK,OAAO,0BACZ,QAAO,4BAA4B;AAAG,QAAO;AAA6B,EAAC,MAAM;EACjF,MAAM,mBAAmB,0BAA0B,eAAe;EAAwB,MAAM,sBAAsB,8BAA8B,eAAe;AAA4B,MAAI,aAAa,aAC9M;EAAQ,MAAM,SAAS,WAAW,WAAW,WAAW,QAAQ,YAAY,WAAW,QAAQ,SAAS,QAAQ,WAAW,QAAQ,QAAQ;EAAY,eAAe,YAAY,UAAU;GAC5L,IAAI,eAAe;AAAI,cAAW,WAAW,SAC3C,gBAAe,OAAO,oBAAoB,EAAE,OAAO,SAAS,SAAS,UAAU,GAAG,OAAO,SAAS,SAAS,YAAY,IAAI,CAAC,CAAC,GAAG;mBAChH,YAAY,sBAAsB,aAAa,YAC/D,gBAAe,oBAAoB,EAAE,SAAS,SAAS,UAAU,GAAG,SAAS,SAAS,YAAY,IAAI,CAAC,CAAC,GAAG;GAC3G,MAAM,eAAe;GAAkD,MAAM,sBAAsB;GAAiB,MAAM,sBAAsB,OAAO,aAAa,OAAO,WAAW,qBAAqB,GAAG,GAAG;GAAqB,MAAM,sBAAsB,SAAS;GAAqB,eAAe,mBAAmB,aAAa,aAAa;AAC5V,QAAI,QAAQ;KACV,MAAM,WAAW,QAAQ,UAAU,CAAC,aAAa,YAAY;AAAE,YAAO,IAAI,WAAW,UAAU;IAChG;AAAC,SAAK,OAAO,kBACZ,QAAO,oBAAoB,CAAE;AAAE,QAAI;KACnC,IAAI,WAAW,MAAM,MAAM,YAAY;IACxC,SAAQ,GAAG;AACV,WAAM,IAAI,OAAO,iBAAiB,YAAY,GAAG,EAAE,EAAG;IACvD;AAAC,SAAK,SAAS,GACd,OAAM,IAAI,OAAO,EAAE,SAAS,OAAO,IAAI,SAAS,IAAI;IACpD,MAAM,SAAS,CAAE;IAAE,MAAM,UAAU,SAAS;IAAS,MAAM,QAAQ,OAAO,QAAQ,IAAI,iBAAiB,IAAI,YAAY;IAAE,IAAI,SAAS;AAAG,WAAO,aAAa,OAAO,UAAU,sBAAsB;IAAE,MAAM,SAAS,SAAS,KAAK,WAAW;AAAE,WAAO,GAAG;KAC1P,MAAM,EAAE,MAAM,OAAO,GAAG,MAAM,OAAO,MAAM;AAAE,SAAI,KAC/C;AAAO,YAAO,KAAK,MAAM;AAAE,eAAU,MAAM;AAAQ,YAAO,kBAAkB,eAAe;MAAE;MAAQ;KAAO;KAAE,IAAI,cAAc;KAAG,IAAI,YAAY;AAAG,UAAK,MAAM,YAAY,OAAO,OAAO,OAAO,kBAAkB,EAAE;AACtN,qBAAe,SAAS;AAAQ,mBAAa,SAAS;KACvD;YAAO,aAAa,OAAO,WAAW,uBAAuB,YAAY,GAAG,UAAU,GAAG;IAC3F;IAAC,MAAM,cAAc,IAAI,WAAW,OAAO,IAAI,OAAK,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE;IAAG,IAAI,SAAS;AAAG,SAAK,MAAM,SAAS,QAAQ;AACtI,iBAAY,IAAI,OAAO,OAAO;AAAE,eAAU,MAAM;IACjD;AAAC,WAAO,YAAY;GACtB;GAAC,IAAI;GAAc,IAAI,UAAU,OAAO,uBAAuB,OAAO,oBAAoB,qBAAqB,oBAAoB;AAAE,QAAK,QACzI,gBAAe,mBAAmB,qBAAqB,oBAAoB;GAC3E,eAAe,UAAUA,UAAQ;IACjC,SAAS,OAAO,OAAO,KAAK;AAC1B,UAAK,MACH,OAAM,IAAI,MAAM;IACnB;aAAO,cAAc,KAAK,QAAQ,MAAM,KAAK;AAAE,aAAO,cAAc,SAAS,UAAU,MAAM,KAAK;AAAE,SAAK,MAAM,QAAQ,SAAS,OAAO;KACtI,MAAM,OAAO,KAAK;AAAU,cAAO,kBAAkB,KAAK,KAAK,EAAE;IAClE;IAAC,eAAe,mBAAmB,aAAa;AAC/C,YAAO,aAAa,4BAA4B;AAAE,YAAO,YAAY,YAAY,SAAS,YAAY,OAAO,kCAAkC,YAAY,YAAY,KAAK,EAAE;KAAE,MAAM,YAAY,IAAI,WAAW;AAAc,UAAK,MAAM,QAAQ,SAAS,OAAO;MAChQ,MAAM,OAAO,KAAK;MAAU,MAAM,OAAO,UAAU,SAAS,KAAK,OAAO,KAAK,IAAI;AAAE,eAAO,kBAAkB,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK;AAAE,eAAO,qBAAqB,KAAK,KAAK,EAAE;KAC1L;cAAO,oBAAoB,0DAA0D;IACvF;aAAO,iBAAiB,0DAA0D;AAAE,SAAKA,SAAO,eAC/F,UAAO,iBAAiB,CAAE;AAAE,aAAO,eAAe,gBAAgB,EAAE,WAAW,MAAO;AAAE,SAAK,QAC7F,WAAU,MAAM;AACjB,uBAAmB,QAAQ;GAC7B;AAAC,OAAI,OAAO,UACX,WAAU,OAAO;QACZ;AACL,SAAK,OAAO,OACV,QAAO,SAAS,CAAE;AAAE,WAAO,OAAO,KAAK,UAAU;GACpD;EACF;cAAY;GAAE,OAAO;IAAC;KAAE,UAAU;KAAkC,OAAO;KAAG,KAAK;IAAO;IAAE;KAAE,UAAU;KAA+B,OAAO;KAAO,KAAK;IAAQ;IAAE;KAAE,UAAU;KAAkC,OAAO;KAAQ,KAAK;IAAS;IAAE;KAAE,UAAU;KAA+B,OAAO;KAAS,KAAK;IAAS;IAAE;KAAE,UAAU;KAAyB,OAAO;KAAS,KAAK;IAAS;IAAE;KAAE,UAAU;KAAyB,OAAO;KAAS,KAAK;IAAS;GAAC;GAAE,qBAAqB;EAAS,EAAC;CACxe,IAAG;CAAE,IAAI,aAAa,CAAE;CAAE,IAAI,cAAc;CAAkB,IAAI,QAAQ,CAAC,QAAQ,YAAY;AAC9F,QAAM;CACP;CAAE,MAAM,cAAc,OAAO,KAAK;CAAK,IAAI,kBAAkB;CAAI,SAAS,WAAW,MAAM;AAC1F,MAAI,OAAO,WACT,QAAO,OAAO,WAAW,MAAM,gBAAgB;AAC/C,SAAO,kBAAkB;CAC5B;CAAC,IAAI,WAAW;AAAY,KAAI,qBAAqB;EACpD,IAAI,KAAK,QAAQ,UAAU;AAAE,MAAI,YAAY,WAAW,QAAQ,CAC9D,oBAAmB,EAAE,QAAQ,YAAY,CAAC,QAAQ,QAAQ,WAAW,CAAC,cAAc,YAAY,CAAC,CAAC;AACnG,eAAa,CAAC,aAAa;AAC1B,cAAW,UAAU,SAAS,GAAG,IAAI,IAAI,YAAY;GAAU,MAAM,MAAM,GAAG,aAAa,SAAS;AAAE,UAAO;EAC9G;AAAE,cAAY,OAAO,UAAU,SAAS,SAAS;AAChD,cAAW,UAAU,SAAS,GAAG,IAAI,IAAI,YAAY;GAAU,MAAM,MAAM,GAAG,aAAa,UAAU,kBAAqB,OAAO;AAAE,UAAO;EAC3I;AAAE,MAAI,QAAQ,KAAK,SAAS,EAC3B,eAAc,QAAQ,KAAK,GAAG,QAAQ,OAAO,IAAI;AAClD,eAAa,QAAQ,KAAK,MAAM,EAAE;AAAE,UAAQ,CAAC,QAAQ,YAAY;AAChE,WAAQ,WAAW;AAAQ,SAAM;EAClC;CACF,WAAU,sBAAsB,uBAAuB;AACtD,MAAI;AACF,qBAAkB,IAAI,IAAI,KAAK,aAAa;EAC7C,QAAO,CAAE;EAAC;AAAE,OAAI,sBACf,cAAa,CAAC,QAAQ;IACpB,MAAM,MAAM,IAAI;AAAkB,QAAI,KAAK,OAAO,KAAK,MAAM;AAAE,QAAI,eAAe;AAAe,QAAI,KAAK,KAAK;AAAE,WAAO,IAAI,WAAW,IAAI;GAC5I;AACF,eAAY,OAAO,QAAQ;AAC1B,QAAI,UAAU,IAAI,CAChB,QAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;KACtC,MAAM,MAAM,IAAI;AAAkB,SAAI,KAAK,OAAO,KAAK,KAAK;AAAE,SAAI,eAAe;AAAe,SAAI,SAAS,MAAM;AACjH,UAAI,IAAI,UAAU,OAAO,IAAI,UAAU,KAAK,IAAI,UAAU;AACxD,eAAQ,IAAI,SAAS;AAAE;MACxB;aAAO,IAAI,OAAO;KACpB;AAAE,SAAI,UAAU;AAAQ,SAAI,KAAK,KAAK;IACxC;IACD,MAAM,WAAW,MAAM,MAAM,KAAK,EAAE,aAAa,cAAe,EAAC;AAAE,QAAI,SAAS,GAChF,QAAO,SAAS,aAAa;AAC7B,UAAM,IAAI,OAAO,EAAE,SAAS,OAAO,KAAK,SAAS,IAAI;GACxD;EAAE;CACJ;CAAS,IAAI,MAAM,QAAQ,IAAI,KAAK,QAAQ;CAAE,IAAI,MAAM,QAAQ,MAAM,KAAK,QAAQ;CAAE,IAAI;CAAY,IAAI,QAAQ;CAAO,IAAI;CAAY,IAAI,YAAY,cAAY,SAAS,WAAW,UAAU;CAAE,IAAI,qBAAqB;CAAoB,IAAI,OAAO,QAAQ,QAAQ,SAAS,QAAQ,SAAS,SAAS;CAAS,IAAI,QAAQ;CAAS,IAAI,qBAAqB;CAAO,SAAS,oBAAoB;EACzY,MAAM,IAAI,WAAW;AAAQ,UAAQ,IAAI,UAAU;AAAI,WAAS,IAAI,WAAW;AAAI,WAAS,IAAI,WAAW;AAAI,YAAU,IAAI,YAAY;AAAI,WAAS,IAAI,WAAW;AAAI,YAAU,IAAI,YAAY;AAAI,YAAU,IAAI,aAAa;AAAI,YAAU,IAAI,aAAa;AAAI,WAAS,IAAI,cAAc;AAAI,YAAU,IAAI,eAAe;CAClU;CAAC,SAAS,SAAS;AAClB,MAAI,OAAO,QAAQ;AACjB,cAAW,OAAO,UAAU,WAC1B,QAAO,SAAS,CAAC,OAAO,MAAO;AAAE,UAAO,OAAO,OAAO,OACtD,aAAY,OAAO,OAAO,OAAO,CAAC;EAErC;uBAAqB,UAAU;CACjC;CAAC,SAAS,cAAc;AACvB,uBAAqB;AAAM,OAAK,OAAO,aAAa,GAAG,YACrD,IAAG,MAAM;AAAE,MAAI,MAAM;AAAE,cAAY,GAAG;AAAE,KAAG,oBAAoB;CAClE;CAAC,SAAS,UAAU;AACnB,MAAI,OAAO,SAAS;AAClB,cAAW,OAAO,WAAW,WAC3B,QAAO,UAAU,CAAC,OAAO,OAAQ;AAAE,UAAO,OAAO,QAAQ,OACzD,cAAa,OAAO,QAAQ,OAAO,CAAC;EAEvC;uBAAqB,WAAW;CAClC;CAAC,SAAS,MAAM,MAAM;AACrB,SAAO,UAAU,KAAK;AAAE,UAAQ,UAAU,KAAK;AAAI,MAAI,KAAK;AAAE,UAAQ;AAAM,UAAQ;AAA4C,MAAI,mBAClI,UAAS;EACT,MAAM,IAAI,IAAI,YAAY,aAAa;AAAO,uBAAqB,EAAE;AAAE,QAAM;CAChF;CAAC,IAAI;CAAgB,SAAS,iBAAiB;AAC9C,MAAI,OAAO,WACT,QAAO,WAAW,gBAAgB;AAClC,SAAO,IAAI,IAAI,iBAAiB,OAAO,KAAK,KAAK;CACpD;CAAC,SAAS,cAAc,MAAM;AAC7B,MAAI,QAAQ,kBAAkB,WAC5B,QAAO,IAAI,WAAW;AACtB,MAAI,WACJ,QAAO,WAAW,KAAK;AACvB,QAAM;CACT;CAAC,eAAe,cAAc,YAAY;AACzC,OAAK,WACH,KAAI;GACF,MAAM,WAAW,MAAM,UAAU,WAAW;AAAE,UAAO,IAAI,WAAW;EACrE,QAAO,CAAE;AACV,SAAO,cAAc,WAAW;CACnC;CAAC,eAAe,uBAAuB,YAAY,SAAS;AAC3D,MAAI;GACF,MAAM,SAAS,MAAM,cAAc,WAAW;GAAE,MAAM,WAAW,MAAM,YAAY,YAAY,QAAQ,QAAQ;AAAE,UAAO;EACzH,SAAQ,QAAQ;AACf,QAAK,yCAAyC,OAAO,EAAE;AAAE,SAAM,OAAO;EACvE;CACF;CAAC,eAAe,iBAAiB,QAAQ,YAAY,SAAS;AAC7D,OAAK,WAAW,UAAU,WAAW,KAAK,oBACxC,KAAI;GACF,MAAM,WAAW,MAAM,YAAY,EAAE,aAAa,cAAe,EAAC;GAAE,MAAM,sBAAsB,MAAM,YAAY,qBAAqB,UAAU,QAAQ;AAAE,UAAO;EACnK,SAAQ,QAAQ;AACf,QAAK,iCAAiC,OAAO,EAAE;AAAE,OAAI,4CAA4C;EAClG;AACD,SAAO,uBAAuB,YAAY,QAAQ;CACrD;CAAC,SAAS,iBAAiB;EAC1B,MAAM,UAAU,EAAE,GAAG,YAAa;AAAE,SAAO;CAC5C;CAAC,eAAe,aAAa;EAC5B,SAAS,gBAAgB,UAAU,QAAQ;AACzC,iBAAc,SAAS;AAAS,iBAAc,0BAA0B,YAAY;AAAE,qBAAkB,YAAY;AAAE,sBAAmB;AAAE,UAAO;EACnJ;EAAC,SAAS,2BAA2BC,UAAQ;AAC5C,UAAO,gBAAgBA,SAAO,SAAS;EACxC;EAAC,MAAM,OAAO,gBAAgB;AAAE,MAAI,OAAO,gBAC1C,QAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAO,gBAAgB,MAAM,CAAC,MAAM,QAAQ;AAC1C,YAAQ,gBAAgB,MAAM,IAAI,CAAC;GACpC,EAAC;EACH;AACF,qBAAmB,gBAAgB;EAAE,MAAM,SAAS,MAAM,iBAAiB,YAAY,gBAAgB,KAAK;EAAE,MAAM,UAAU,2BAA2B,OAAO;AAAE,SAAO;CAC3K;CAAC,MAAM,WAAW;EACjB,OAAO;EAAc,YAAY,QAAQ;AACvC,QAAK,WAAW,+BAA+B,OAAO;AAAI,QAAK,SAAS;EACzE;CACF;CAAC,IAAI,uBAAuB,CAAC,cAAc;AAC1C,SAAO,UAAU,SAAS,EACxB,WAAU,OAAO,CAAC,OAAO;CAE5B;CAAE,IAAI,aAAa,CAAE;CAAE,IAAI,eAAe,QAAM,WAAW,KAAK,GAAG;CAAE,IAAI,YAAY,CAAE;CAAE,IAAI,cAAc,QAAM,UAAU,KAAK,GAAG;CAAE,IAAI,gBAAgB;CAAM,IAAI,OAAO;EAAE,OAAO,UAAQ,KAAK,OAAO,EAAE,KAAK;EAAK,WAAW,CAAC,aAAa;GAC3O,MAAM,cAAc;AAAyD,UAAO,YAAY,KAAK,SAAS,CAAC,MAAM,EAAE;EACxH;EAAE,gBAAgB,CAAC,OAAO,mBAAmB;GAC5C,IAAI,KAAK;AAAG,QAAK,IAAI,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;IACtD,MAAM,OAAO,MAAM;AAAI,QAAI,SAAS,IAClC,OAAM,OAAO,GAAG,EAAE;aACT,SAAS,MAAM;AACxB,WAAM,OAAO,GAAG,EAAE;AAAE;IACrB,WAAU,IAAI;AACb,WAAM,OAAO,GAAG,EAAE;AAAE;IACrB;GACF;AAAC,OAAI,eACJ,QAAM,IAAI,KACR,OAAM,QAAQ,KAAK;AAErB,UAAO;EACV;EAAE,WAAW,CAAC,SAAS;GACtB,MAAM,aAAa,KAAK,MAAM,KAAK;GAAE,MAAM,gBAAgB,KAAK,MAAM,GAAG,KAAK;AAAK,UAAO,KAAK,eAAe,KAAK,MAAM,IAAI,CAAC,OAAO,SAAO,EAAE,GAAG,WAAW,CAAC,KAAK,IAAI;AAAE,QAAK,SAAS,WACpL,QAAO;AACP,OAAI,QAAQ,cACZ,SAAQ;AACR,WAAQ,aAAa,MAAM,MAAM;EACpC;EAAE,SAAS,CAAC,SAAS;GACpB,MAAM,SAAS,KAAK,UAAU,KAAK;GAAE,MAAM,OAAO,OAAO;GAAI,IAAI,MAAM,OAAO;AAAI,QAAK,SAAS,IAC9F,QAAO;AACP,OAAI,IACJ,OAAM,IAAI,MAAM,GAAG,GAAG;AACtB,UAAO,OAAO;EACjB;EAAE,UAAU,UAAQ,QAAQ,KAAK,MAAM,iBAAiB,CAAC;EAAI,MAAM,CAAC,GAAG,UAAU,KAAK,UAAU,MAAM,KAAK,IAAI,CAAC;EAAE,OAAO,CAAC,GAAG,MAAM,KAAK,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE;CAAE;CAAE,MAAM,iBAAiB,MAAM;AAC9L,MAAI,qBAAqB;GACvB,MAAM,aAAa,QAAQ,cAAc;AAAE,UAAO,UAAQ,WAAW,eAAe,KAAK;EAC1F;AAAC,SAAO,UAAQ,OAAO,gBAAgB,KAAK;CAC9C;CAAE,IAAI,aAAa,CAAC,SAAS;AAC5B,GAAC,aAAa,gBAAgB,EAAE,KAAK;CACtC;CAAE,IAAI,UAAU;EAAE,SAAS,CAAC,GAAG,SAAS;GACvC,IAAI,eAAe;GAAI,IAAI,mBAAmB;AAAO,QAAK,IAAI,IAAI,KAAK,SAAS,GAAG,KAAK,OAAO,kBAAkB,KAAK;IACpH,MAAM,OAAO,KAAK,IAAI,KAAK,KAAK,GAAG,KAAK;AAAE,eAAW,QAAQ,SAC3D,OAAM,IAAI,UAAU;cACV,KACV,QAAO;AACR,oBAAgB,EAAE,KAAK,GAAG,aAAa;AAAG,uBAAmB,KAAK,MAAM,KAAK;GAC/E;kBAAe,KAAK,eAAe,aAAa,MAAM,IAAI,CAAC,OAAO,SAAO,EAAE,GAAG,iBAAiB,CAAC,KAAK,IAAI;AAAE,WAAQ,mBAAmB,MAAM,MAAM,gBAAgB;EACpK;EAAE,UAAU,CAAC,MAAM,OAAO;AACzB,UAAO,QAAQ,QAAQ,KAAK,CAAC,MAAM,EAAE;AAAE,QAAK,QAAQ,QAAQ,GAAG,CAAC,MAAM,EAAE;GAAE,SAAS,KAAK,KAAK;IAC3F,IAAI,QAAQ;AAAG,WAAM,QAAQ,IAAI,QAAQ,QACvC,KAAI,IAAI,WAAW,GACjB;IACF,IAAI,MAAM,IAAI,SAAS;AAAG,WAAM,OAAO,GAAG,MAC1C,KAAI,IAAI,SAAS,GACf;AACF,QAAI,QAAQ,IACZ,QAAO,CAAE;AAAE,WAAO,IAAI,MAAM,OAAO,MAAM,QAAQ,EAAE;GACtD;GAAC,MAAM,YAAY,KAAK,KAAK,MAAM,IAAI,CAAC;GAAE,MAAM,UAAU,KAAK,GAAG,MAAM,IAAI,CAAC;GAAE,MAAM,SAAS,KAAK,IAAI,UAAU,QAAQ,QAAQ,OAAO;GAAE,IAAI,kBAAkB;AAAQ,QAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,IACnM,KAAI,UAAU,OAAO,QAAQ,IAAI;AAC/B,sBAAkB;AAAG;GACtB;GACD,IAAI,cAAc,CAAE;AAAE,QAAK,IAAI,IAAI,iBAAiB,IAAI,UAAU,QAAQ,IAC1E,aAAY,KAAK,KAAK;AACvB,iBAAc,YAAY,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAAE,UAAO,YAAY,KAAK,IAAI;EAChG;CAAE;CAAE,MAAM,cAAc,IAAI;CAAe,MAAM,gBAAgB,CAAC,aAAa,KAAK,gBAAgB,cAAc;EACjH,MAAM,SAAS,MAAM;AAAgB,MAAI,UACvC,QAAO;AAAQ,SAAO,YAAY,UAAU,OAAO,QAAQ,GAAE;AAAK,SAAO;CAC5E;CAAE,MAAM,oBAAoB,CAAC,aAAa,MAAM,GAAG,gBAAgB,cAAc;AAChF,WAAS;EAAG,MAAM,SAAS,cAAc,aAAa,KAAK,gBAAgB,UAAU;AAAE,SAAO,YAAY,OAAO,YAAY,SAAS,YAAY,SAAS,KAAK,OAAO,GAAG,IAAI,WAAW,YAAY,MAAM,KAAK,OAAO,EAAE;CAC1N;CAAE,IAAI,0BAA0B,CAAE;CAAE,MAAM,kBAAkB,CAAC,QAAQ;EACpE,IAAI,MAAM;AAAG,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;GAChD,MAAM,IAAI,IAAI,WAAW,EAAE;AAAE,OAAI,KAAK,IACpC;YACS,KAAK,KACd,QAAO;YACE,KAAK,SAAS,KAAK,OAAO;AACnC,WAAO;AAAG,MAAE;GACb,MACC,QAAO;EAEV;AAAC,SAAO;CACV;CAAE,MAAM,oBAAoB,CAAC,KAAK,MAAM,QAAQ,oBAAoB;AACnE,cAAY;AAAG,QAAM,kBAAkB,GACrC,QAAO;EAAG,MAAM,WAAW;EAAQ,MAAM,SAAS,SAAS,kBAAkB;AAAG,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;GACrH,MAAM,IAAI,IAAI,YAAY,EAAE;AAAE,OAAI,KAAK,KAAK;AAC1C,QAAI,UAAU,OACZ;AAAO,SAAK,aAAa,KAAK;GACjC,WAAU,KAAK,MAAM;AACpB,QAAI,SAAS,KAAK,OAChB;AAAO,SAAK,aAAa,KAAK,MAAM,KAAK;AAAG,SAAK,aAAa,KAAK,MAAM,IAAI;GAChF,WAAU,KAAK,OAAO;AACrB,QAAI,SAAS,KAAK,OAChB;AAAO,SAAK,aAAa,KAAK,MAAM,KAAK;AAAI,SAAK,aAAa,KAAK,MAAM,KAAK,IAAI;AAAI,SAAK,aAAa,KAAK,MAAM,IAAI;GAC3H,OAAM;AACL,QAAI,SAAS,KAAK,OAChB;AAAO,SAAK,aAAa,KAAK,MAAM,KAAK;AAAI,SAAK,aAAa,KAAK,MAAM,KAAK,KAAK;AAAI,SAAK,aAAa,KAAK,MAAM,KAAK,IAAI;AAAI,SAAK,aAAa,KAAK,MAAM,IAAI;AAAI;GAC1K;EACF;OAAK,WAAW,KAAK;AAAG,SAAO,SAAS;CAC1C;CAAE,MAAM,qBAAqB,CAAC,SAAS,aAAa,WAAW;EAC9D,MAAM,MAAM,SAAS,IAAI,SAAS,gBAAgB,QAAQ,GAAG;EAAG,MAAM,UAAU,IAAI,MAAM;EAAM,MAAM,kBAAkB,kBAAkB,SAAS,SAAS,GAAG,QAAQ,OAAO;AAAE,MAAI,YAClL,SAAQ,SAAS;AAAiB,SAAO;CAC5C;CAAE,MAAM,mBAAmB,MAAM;AAChC,OAAK,wBAAwB,QAAQ;GACnC,IAAI,SAAS;AAAM,OAAI,qBAAqB;IAC1C,MAAM,UAAU;IAAK,MAAM,MAAM,OAAO,MAAM,QAAQ;IAAE,IAAI,YAAY;IAAG,MAAM,KAAK,QAAQ,MAAM;AAAI,QAAI;AAC1G,iBAAY,GAAG,SAAS,IAAI,KAAK,GAAG,QAAQ;IAC7C,SAAQ,GAAG;AACV,SAAI,EAAE,UAAU,CAAC,SAAS,MAAM,CAC9B,aAAY;SAAQ,OAAM;IAC7B;AAAC,QAAI,YAAY,EAChB,UAAS,IAAI,MAAM,GAAG,UAAU,CAAC,SAAS,QAAQ;GAErD,WAAU,WAAW,QAAQ,QAAQ;AACpC,aAAS,OAAO,OAAO,UAAU;AAAE,QAAI,WAAW,KAChD,WAAU;GAEb;AAAS,QAAK,OACb,QAAO;AACR,6BAA0B,mBAAmB,QAAQ,KAAK;EAC5D;AAAC,SAAO,wBAAwB,OAAO;CACzC;CAAE,IAAI,MAAM;EAAE,MAAM,CAAE;EAAE,OAAO,CAAE;EAAE,WAAW,CAAE;EAAE,SAAS,KAAK,KAAK;AACpE,OAAI,KAAK,OAAO;IAAE,OAAO,CAAE;IAAE,QAAQ,CAAE;IAAE;GAAK;AAAE,MAAG,eAAe,KAAK,IAAI,WAAW;EACvF;EAAE,YAAY;GAAE,KAAK,QAAQ;IAC5B,MAAM,MAAM,IAAI,KAAK,OAAO,KAAK;AAAO,SAAK,IAC3C,OAAM,IAAI,GAAG,WAAW;AACzB,WAAO,MAAM;AAAK,WAAO,WAAW;GACtC;GAAE,MAAM,QAAQ;AACf,WAAO,IAAI,IAAI,MAAM,OAAO,IAAI;GACjC;GAAE,MAAM,QAAQ;AACf,WAAO,IAAI,IAAI,MAAM,OAAO,IAAI;GACjC;GAAE,KAAK,QAAQ,QAAQ,QAAQ,QAAQ,KAAK;AAC3C,SAAK,OAAO,QAAQ,OAAO,IAAI,IAAI,SACjC,OAAM,IAAI,GAAG,WAAW;IACxB,IAAI,YAAY;AAAG,SAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;KACpD,IAAI;AAAQ,SAAI;AACd,eAAS,OAAO,IAAI,IAAI,SAAS,OAAO,IAAI;KAC7C,SAAQ,GAAG;AACV,YAAM,IAAI,GAAG,WAAW;KACzB;AAAC,SAAI,qBAAwB,cAAc,EAC1C,OAAM,IAAI,GAAG,WAAW;AACxB,SAAI,WAAW,QAAQ,kBACvB;AAAO;AAAa,YAAO,SAAS,KAAK;IAC5C;AAAC,QAAI,UACJ,QAAO,KAAK,QAAQ,KAAK,KAAK;AAC9B,WAAO;GACV;GAAE,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,KAAK;AAC5C,SAAK,OAAO,QAAQ,OAAO,IAAI,IAAI,SACjC,OAAM,IAAI,GAAG,WAAW;AACxB,QAAI;AACJ,UAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,IAC1B,QAAO,IAAI,IAAI,SAAS,OAAO,KAAK,OAAO,SAAS,GAAG;IAE1D,SAAQ,GAAG;AACV,WAAM,IAAI,GAAG,WAAW;IACzB;AAAC,QAAI,OACJ,QAAO,KAAK,QAAQ,OAAO,KAAK,QAAQ,KAAK,KAAK;AAClD,WAAO;GACV;EAAE;EAAE,iBAAiB;GAAE,SAAS,KAAK;AACpC,WAAO,kBAAkB;GAC1B;GAAE,SAAS,KAAK,KAAK;AACpB,QAAI,QAAQ,QAAQ,QAAQ,IAAI;AAC9B,SAAI,kBAAkB,IAAI,OAAO,CAAC;AAAE,SAAI,SAAS,CAAE;IACpD,WACK,OAAO,EACT,KAAI,OAAO,KAAK,IAAI;GAEzB;GAAE,MAAM,KAAK;AACZ,QAAI,IAAI,QAAQ,SAAS,GAAG;AAC1B,SAAI,kBAAkB,IAAI,OAAO,CAAC;AAAE,SAAI,SAAS,CAAE;IACpD;GACF;GAAE,aAAa,KAAK;AACnB,WAAO;KAAE,SAAS;KAAO,SAAS;KAAG,SAAS;KAAK,SAAS;KAAO,MAAM;MAAC;MAAG;MAAI;MAAK;MAAI;MAAG;MAAG;MAAG;MAAG;MAAI;MAAI;MAAI;MAAG;MAAI;MAAI;MAAI;MAAI;MAAG;MAAG;MAAG;MAAG;MAAG;MAAG;MAAG;MAAG;MAAG;MAAG;MAAG;MAAG;MAAG;MAAG;MAAG;KAAE;IAAE;GACvL;GAAE,aAAa,KAAK,kBAAkB,MAAM;AAC3C,WAAO;GACR;GAAE,iBAAiB,KAAK;AACvB,WAAO,CAAC,IAAI,EAAG;GAChB;EAAE;EAAE,kBAAkB;GAAE,SAAS,KAAK,KAAK;AAC1C,QAAI,QAAQ,QAAQ,QAAQ,IAAI;AAC9B,SAAI,kBAAkB,IAAI,OAAO,CAAC;AAAE,SAAI,SAAS,CAAE;IACpD,WACK,OAAO,EACT,KAAI,OAAO,KAAK,IAAI;GAEzB;GAAE,MAAM,KAAK;AACZ,QAAI,IAAI,QAAQ,SAAS,GAAG;AAC1B,SAAI,kBAAkB,IAAI,OAAO,CAAC;AAAE,SAAI,SAAS,CAAE;IACpD;GACF;EAAE;CAAE;CAAE,MAAM,aAAa,CAAC,KAAK,SAAS,OAAO,KAAK,GAAG,KAAK,MAAM,KAAK;CAAE,MAAM,cAAc,CAAC,MAAM,cAAc,KAAK,KAAK,OAAO,UAAU,GAAG;CAAW,MAAM,YAAY,CAAC,SAAS;AACtL,SAAO,YAAY,MAAM,MAAM;EAAE,MAAM,MAAM,6BAA6B,OAAO,KAAK;AAAE,MAAI,IAC1F,YAAW,KAAK,KAAK;AAAE,SAAO;CACjC;CAAE,IAAI,QAAQ;EAAE,WAAW;EAAM,MAAM,OAAO;AAC7C,UAAO,MAAM,WAAW,MAAM,KAAK,OAAO,EAAE;EAC7C;EAAE,WAAW,QAAQ,MAAM,MAAM,KAAK;AACrC,OAAI,GAAG,SAAS,KAAK,IAAI,GAAG,OAAO,KAAK,CACtC,OAAM,IAAI,GAAG,WAAW;AACzB,SAAM,cAAc;IAAE,KAAK;KAAE,MAAM;MAAE,SAAS,MAAM,SAAS;MAAS,SAAS,MAAM,SAAS;MAAS,QAAQ,MAAM,SAAS;MAAQ,OAAO,MAAM,SAAS;MAAO,QAAQ,MAAM,SAAS;MAAQ,QAAQ,MAAM,SAAS;MAAQ,OAAO,MAAM,SAAS;MAAO,SAAS,MAAM,SAAS;MAAS,SAAS,MAAM,SAAS;KAAS;KAAE,QAAQ,EAAE,QAAQ,MAAM,WAAW,OAAQ;IAAE;IAAE,MAAM;KAAE,MAAM;MAAE,SAAS,MAAM,SAAS;MAAS,SAAS,MAAM,SAAS;KAAS;KAAE,QAAQ;MAAE,QAAQ,MAAM,WAAW;MAAQ,MAAM,MAAM,WAAW;MAAM,OAAO,MAAM,WAAW;MAAO,MAAM,MAAM,WAAW;MAAM,OAAO,MAAM,WAAW;KAAO;IAAE;IAAE,MAAM;KAAE,MAAM;MAAE,SAAS,MAAM,SAAS;MAAS,SAAS,MAAM,SAAS;MAAS,UAAU,MAAM,SAAS;KAAU;KAAE,QAAQ,CAAE;IAAE;IAAE,QAAQ;KAAE,MAAM;MAAE,SAAS,MAAM,SAAS;MAAS,SAAS,MAAM,SAAS;KAAS;KAAE,QAAQ,GAAG;IAAmB;GAAE;GAAE,MAAM,OAAO,GAAG,WAAW,QAAQ,MAAM,MAAM,IAAI;AAAE,OAAI,GAAG,MAAM,KAAK,KAAK,EAAE;AACt7B,SAAK,WAAW,MAAM,UAAU,IAAI;AAAM,SAAK,aAAa,MAAM,UAAU,IAAI;AAAQ,SAAK,WAAW,CAAE;GAC3G,WAAU,GAAG,OAAO,KAAK,KAAK,EAAE;AAC/B,SAAK,WAAW,MAAM,UAAU,KAAK;AAAM,SAAK,aAAa,MAAM,UAAU,KAAK;AAAQ,SAAK,YAAY;AAAG,SAAK,WAAW;GAC/H,WAAU,GAAG,OAAO,KAAK,KAAK,EAAE;AAC/B,SAAK,WAAW,MAAM,UAAU,KAAK;AAAM,SAAK,aAAa,MAAM,UAAU,KAAK;GACnF,WAAU,GAAG,SAAS,KAAK,KAAK,EAAE;AACjC,SAAK,WAAW,MAAM,UAAU,OAAO;AAAM,SAAK,aAAa,MAAM,UAAU,OAAO;GACvF;QAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK;AAAE,OAAI,QAAQ;AAC9D,WAAO,SAAS,QAAQ;AAAM,WAAO,QAAQ,OAAO,QAAQ,OAAO,QAAQ,KAAK;GACjF;AAAC,UAAO;EACV;EAAE,wBAAwB,MAAM;AAC/B,QAAK,KAAK,SACR,QAAO,IAAI,WAAW;AAAI,OAAI,KAAK,SAAS,SAC5C,QAAO,KAAK,SAAS,SAAS,GAAG,KAAK,UAAU;AAAE,UAAO,IAAI,WAAW,KAAK;EAChF;EAAE,kBAAkB,MAAM,aAAa;GACtC,MAAM,eAAe,KAAK,WAAW,KAAK,SAAS,SAAS;AAAG,OAAI,gBAAgB,YACjF;GAAQ,MAAM,wBAAwB,OAAO;AAAM,iBAAc,KAAK,IAAI,aAAa,gBAAgB,eAAe,wBAAwB,IAAI,WAAW,EAAE;AAAE,OAAI,gBAAgB,EACrL,eAAc,KAAK,IAAI,aAAa,IAAI;GAAE,MAAM,cAAc,KAAK;AAAU,QAAK,WAAW,IAAI,WAAW;AAAc,OAAI,KAAK,YAAY,EAC/I,MAAK,SAAS,IAAI,YAAY,SAAS,GAAG,KAAK,UAAU,EAAE,EAAE;EAChE;EAAE,kBAAkB,MAAM,SAAS;AAClC,OAAI,KAAK,aAAa,QACpB;AAAQ,OAAI,WAAW,GAAG;AAC1B,SAAK,WAAW;AAAM,SAAK,YAAY;GACxC,OAAM;IACL,MAAM,cAAc,KAAK;AAAU,SAAK,WAAW,IAAI,WAAW;AAAU,QAAI,YAC9E,MAAK,SAAS,IAAI,YAAY,SAAS,GAAG,KAAK,IAAI,SAAS,KAAK,UAAU,CAAC,CAAC;AAC9E,SAAK,YAAY;GACnB;EACF;EAAE,UAAU;GAAE,QAAQ,MAAM;IAC3B,MAAM,OAAO,CAAE;AAAE,SAAK,MAAM,GAAG,SAAS,KAAK,KAAK,GAAG,KAAK,KAAK;AAAG,SAAK,MAAM,KAAK;AAAI,SAAK,OAAO,KAAK;AAAM,SAAK,QAAQ;AAAG,SAAK,MAAM;AAAG,SAAK,MAAM;AAAG,SAAK,OAAO,KAAK;AAAM,QAAI,GAAG,MAAM,KAAK,KAAK,CACrM,MAAK,OAAO;aACH,GAAG,OAAO,KAAK,KAAK,CAC7B,MAAK,OAAO,KAAK;aACR,GAAG,OAAO,KAAK,KAAK,CAC7B,MAAK,OAAO,KAAK,KAAK;QAEtB,MAAK,OAAO;AACb,SAAK,QAAQ,IAAI,KAAK,KAAK;AAAQ,SAAK,QAAQ,IAAI,KAAK,KAAK;AAAQ,SAAK,QAAQ,IAAI,KAAK,KAAK;AAAQ,SAAK,UAAU;AAAM,SAAK,SAAS,KAAK,KAAK,KAAK,OAAO,KAAK,QAAQ;AAAE,WAAO;GAC1L;GAAE,QAAQ,MAAM,MAAM;AACrB,SAAK,MAAM,OAAO;KAAC;KAAQ;KAAS;KAAS;IAAQ,EACnD,KAAI,KAAK,QAAQ,KACf,MAAK,OAAO,KAAK;AAEnB,QAAI,KAAK,gBACT,OAAM,kBAAkB,MAAM,KAAK,KAAK;GAE3C;GAAE,OAAO,QAAQ,MAAM;AACtB,SAAK,MAAM,mBAAmB;AAC5B,WAAM,oBAAoB,IAAI,GAAG,WAAW;AAAK,WAAM,kBAAkB,QAAQ;IAClF;AAAC,UAAM,MAAM;GACf;GAAE,MAAM,QAAQ,MAAM,MAAM,KAAK;AAChC,WAAO,MAAM,WAAW,QAAQ,MAAM,MAAM,IAAI;GACjD;GAAE,OAAO,UAAU,SAAS,UAAU;IACrC,IAAI;AAAU,QAAI;AAChB,gBAAW,GAAG,WAAW,SAAS,SAAS;IAC5C,SAAQ,GAAG,CAAE;AAAC,QAAI,UAAU;AAC3B,SAAI,GAAG,MAAM,SAAS,KAAK,CACzB,MAAK,MAAM,KAAK,SAAS,SACvB,OAAM,IAAI,GAAG,WAAW;AAE3B,QAAG,eAAe,SAAS;IAC7B;AAAC,WAAO,SAAS,OAAO,SAAS,SAAS;AAAO,YAAQ,SAAS,YAAY;AAAU,aAAS,OAAO;AAAU,YAAQ,QAAQ,QAAQ,QAAQ,SAAS,OAAO,QAAQ,SAAS,OAAO,QAAQ,KAAK,KAAK;GAC9M;GAAE,OAAO,QAAQ,MAAM;AACtB,WAAO,OAAO,SAAS;AAAO,WAAO,QAAQ,OAAO,QAAQ,KAAK,KAAK;GACvE;GAAE,MAAM,QAAQ,MAAM;IACrB,MAAM,OAAO,GAAG,WAAW,QAAQ,KAAK;AAAE,SAAK,MAAM,KAAK,KAAK,SAC7D,OAAM,IAAI,GAAG,WAAW;AACxB,WAAO,OAAO,SAAS;AAAO,WAAO,QAAQ,OAAO,QAAQ,KAAK,KAAK;GACzE;GAAE,QAAQ,MAAM;AACf,WAAO;KAAC;KAAK;KAAM,GAAG,OAAO,KAAK,KAAK,SAAS;IAAC;GAClD;GAAE,QAAQ,QAAQ,SAAS,SAAS;IACnC,MAAM,OAAO,MAAM,WAAW,QAAQ,SAAS,OAAa,EAAE;AAAE,SAAK,OAAO;AAAS,WAAO;GAC7F;GAAE,SAAS,MAAM;AAChB,SAAK,GAAG,OAAO,KAAK,KAAK,CACvB,OAAM,IAAI,GAAG,WAAW;AACxB,WAAO,KAAK;GACf;EAAE;EAAE,YAAY;GAAE,KAAK,QAAQ,QAAQ,QAAQ,QAAQ,UAAU;IAChE,MAAM,WAAW,OAAO,KAAK;AAAU,QAAI,YAAY,OAAO,KAAK,UACjE,QAAO;IAAG,MAAM,OAAO,KAAK,IAAI,OAAO,KAAK,YAAY,UAAU,OAAO;AAAE,QAAI,OAAO,KAAK,SAAS,SACpG,QAAO,IAAI,SAAS,SAAS,UAAU,WAAW,KAAK,EAAE,OAAO;QAEhE,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IAAI,QAAO,SAAS,KAAK,SAAS,WAAW;AACvE,WAAO;GACV;GAAE,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,QAAQ;AACzD,QAAI,OAAO,WAAW,MAAM,OAC1B,UAAS;AACT,SAAK,OACL,QAAO;IAAG,MAAM,OAAO,OAAO;AAAM,SAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK;AAAE,QAAI,OAAO,cAAc,KAAK,YAAY,KAAK,SAAS,WAClI;SAAI,QAAQ;AACV,WAAK,WAAW,OAAO,SAAS,QAAQ,SAAS,OAAO;AAAE,WAAK,YAAY;AAAQ,aAAO;KAC3F,WAAU,KAAK,cAAc,KAAK,aAAa,GAAG;AACjD,WAAK,WAAW,OAAO,MAAM,QAAQ,SAAS,OAAO;AAAE,WAAK,YAAY;AAAQ,aAAO;KACxF,WAAU,WAAW,UAAU,KAAK,WAAW;AAC9C,WAAK,SAAS,IAAI,OAAO,SAAS,QAAQ,SAAS,OAAO,EAAE,SAAS;AAAE,aAAO;KAC/E;;AACF,UAAM,kBAAkB,MAAM,WAAW,OAAO;AAAE,QAAI,KAAK,SAAS,YAAY,OAAO,SACtF,MAAK,SAAS,IAAI,OAAO,SAAS,QAAQ,SAAS,OAAO,EAAE,SAAS;QAErE,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,IAC1B,MAAK,SAAS,WAAW,KAAK,OAAO,SAAS;AAEjD,SAAK,YAAY,KAAK,IAAI,KAAK,WAAW,WAAW,OAAO;AAAE,WAAO;GACvE;GAAE,OAAO,QAAQ,QAAQ,QAAQ;IAChC,IAAI,WAAW;AAAQ,QAAI,WAAW,EACpC,aAAY,OAAO;aACV,WAAW,GACpB;SAAI,GAAG,OAAO,OAAO,KAAK,KAAK,CAC7B,aAAY,OAAO,KAAK;IACzB;AACD,QAAI,WAAW,EACf,OAAM,IAAI,GAAG,WAAW;AACxB,WAAO;GACV;GAAE,KAAK,QAAQ,QAAQ,UAAU,MAAM,OAAO;AAC7C,SAAK,GAAG,OAAO,OAAO,KAAK,KAAK,CAC9B,OAAM,IAAI,GAAG,WAAW;IACxB,IAAI;IAAK,IAAI;IAAW,IAAI,WAAW,OAAO,KAAK;AAAU,UAAM,QAAQ,MAAM,YAAY,SAAS,WAAW,MAAM,QAAQ;AAC/H,iBAAY;AAAO,WAAM,SAAS;IACnC,OAAM;AACL,iBAAY;AAAM,WAAM,UAAU,OAAO;AAAE,UAAK,IAC9C,OAAM,IAAI,GAAG,WAAW;AACxB,SAAI,UAAU;AACd,UAAI,WAAW,KAAK,WAAW,SAAS,SAAS,OAC/C,KAAI,SAAS,SACX,YAAW,SAAS,SAAS,UAAU,WAAW,OAAO;UAEzD,YAAW,MAAM,UAAU,MAAM,KAAK,UAAU,UAAU,WAAW,OAAO;AAE/E,YAAM,IAAI,UAAU,QAAQ,EAAE;KAChC;IACF;AAAC,WAAO;KAAE;KAAK;IAAW;GAC5B;GAAE,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,WAAW;AAClD,UAAM,WAAW,MAAM,QAAQ,QAAQ,GAAG,QAAQ,QAAQ,MAAM;AAAE,WAAO;GAC1E;EAAE;CAAE;CAAE,MAAM,uBAAuB,CAAC,QAAQ;EAC3C,MAAM,YAAY;GAAE,KAAK;GAAG,MAAM;GAAG,KAAK;GAAc,MAAM;GAAc,KAAK;GAAe,MAAM;EAAe;EAAE,MAAM,QAAQ,UAAU;AAAM,aAAW,SAAS,YACvK,OAAM,IAAI,WAAW,0BAA0B,IAAI;AACnD,SAAO;CACV;CAAE,MAAM,aAAa,CAAC,SAAS,aAAa;EAC3C,IAAI,OAAO;AAAG,MAAI,QAChB,SAAQ;AAAU,MAAI,SACtB,SAAQ;AAAK,SAAO;CACvB;CAAE,IAAI,QAAQ;EAAE,KAAK,CAAE;EAAE,WAAW,MAAM;EAAW,YAAY;EAAI,eAAe;EAAa,cAAc,CAAC,UAAU;GACzH,SAAS,oBAAoB;AAC3B,QAAI,MAAM,oBAAoB,QAC5B,eAAc;QAAO,OAAM,kBAAkB;GAChD;GAAC,SAAS,eAAe;AACxB,UAAM,kBAAkB;AAAO,UAAM,OAAO,OAAO,OAAO,kBAAkB;GAC7E;AAAC,QAAK,MAAM,gBACX,OAAM,kBAAkB,WAAW,cAAc,EAAE;YAC1C,MAAM,oBAAoB,MACnC,OAAM,kBAAkB;EAE3B;EAAE,OAAO,CAAC,UAAU;GACnB,MAAM,MAAM,MAAM,MAAM,MAAM;AAAE,OAAI,OAAO,MAAM,aAAa;AAC5D,UAAM,kBAAkB;IAAG,MAAM,iBAAiB,IAAI;AAAU,QAAI,WAAW,EAAE,GAAG,IAAI,SAAU;AAAE,QAAI,SAAS,QAAQ,CAAC,QAAQ,MAAM,MAAM,QAAQ;KACpJ,MAAM,OAAO,eAAe,MAAM,QAAQ,MAAM,MAAM,IAAI;AAAE,UAAK,WAAW,IAAI;AAAU,UAAK,cAAc,IAAI;AAAO,UAAK,mBAAmB,KAAK;AAAY,UAAK,aAAa,EAAE,GAAG,KAAK,WAAY;AAAE,UAAK,WAAW,QAAQ,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,WAAW;AACvR,aAAO,KAAK,aAAa;AAAM,aAAO,KAAK,iBAAiB,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,OAAO;KACpH;AAAE,UAAK,WAAW,QAAQ,CAAC,WAAW;MACrC,MAAM,IAAI,OAAO;AAAM,UAAI,EAAE,YAAY;AACvC,aAAM,aAAa,EAAE,YAAY;AAAE,SAAE,aAAa;MACnD;AAAC,UAAI,EAAE,iBAAiB,MACvB,QAAO,EAAE,iBAAiB,MAAM,OAAO;KAC1C;AAAE,WAAM,aAAa,IAAI,MAAM;AAAE,YAAO;IAC1C;AAAE,QAAI,SAAS,QAAQ,CAAC,GAAG,UAAU,MAAM,aAAa,IAAI,MAAM,EAAE,eAAe,MAAM,GAAG,KAAK;AAAG,QAAI,SAAS,UAAU,CAAC,GAAG,UAAU,MAAM,aAAa,IAAI,MAAM,EAAE,eAAe,QAAQ,GAAG,KAAK;AAAG,QAAI,SAAS,SAAS,CAAC,GAAG,UAAU,MAAM,aAAa,IAAI,MAAM,EAAE,eAAe,OAAO,GAAG,KAAK;AAAG,QAAI,SAAS,SAAS,CAAC,GAAG,UAAU,MAAM,aAAa,IAAI,MAAM,EAAE,eAAe,OAAO,GAAG,KAAK;GACjZ;AAAC,UAAO;EACV;EAAE,QAAQ,CAAC,OAAO,UAAU,aAAa;AACxC,SAAM,YAAY,OAAO,CAACC,OAAK,UAAU;AACvC,QAAIA,MACF,QAAO,SAASA,MAAI;AAAE,UAAM,aAAa,OAAO,CAACA,OAAK,WAAW;AACjE,SAAIA,MACF,QAAO,SAASA,MAAI;KAAE,MAAM,MAAM,WAAW,SAAS;KAAO,MAAM,MAAM,WAAW,QAAQ;AAAQ,WAAM,UAAU,KAAK,KAAK,SAAS;IAC1I,EAAC;GACH,EAAC;EACH;EAAE,MAAM,MAAM;AACb,QAAK,MAAM,SAAS,OAAO,OAAO,MAAM,IAAI,CAC1C,OAAM,OAAO;AACd,SAAM,MAAM,CAAE;EAChB;EAAE,OAAO,CAAC,MAAM,aAAa;GAC5B,IAAI,KAAK,MAAM,IAAI;AAAO,OAAI,GAC5B,QAAO,SAAS,MAAM,GAAG;GACzB,IAAI;AAAK,OAAI;AACb,UAAM,MAAM,WAAW,CAAC,KAAK,MAAM,MAAM,WAAW;GACrD,SAAQ,GAAG;AACV,WAAO,SAAS,EAAE;GACnB;AAAC,QAAK,IACL,QAAO,SAAS,iCAAiC;AAClD,OAAI,kBAAkB,CAAC,MAAM;IAC5B,MAAMC,OAAK,EAAE,OAAO;IAAQ,MAAM,cAAc,EAAE,OAAO;IAAa,IAAI;AAAW,QAAI,KAAG,iBAAiB,SAAS,MAAM,cAAc,CACxI,aAAY,YAAY,YAAY,MAAM,cAAc;QAExD,aAAY,KAAG,kBAAkB,MAAM,cAAc;AACrD,SAAK,UAAU,WAAW,SAAS,YAAY,CAC/C,WAAU,YAAY,aAAa,aAAa,EAAE,QAAQ,MAAO,EAAC;GAErE;AAAE,OAAI,YAAY,MAAM;AACvB,SAAK,IAAI;AAAQ,UAAM,IAAI,QAAQ;AAAI,aAAS,MAAM,GAAG;GAC1D;AAAE,OAAI,UAAU,CAAC,MAAM;AACtB,aAAS,EAAE,OAAO,MAAM;AAAE,MAAE,gBAAgB;GAC7C;EACF;EAAE,aAAa,CAAC,OAAO,aAAa;GACnC,MAAM,UAAU,CAAE;GAAE,SAAS,UAAU,GAAG;AACxC,WAAO,MAAM,OAAO,MAAM;GAC3B;GAAC,SAAS,WAAW,MAAM;AAC1B,WAAO,OAAK,KAAK,MAAM,MAAM,EAAE;GAChC;GAAC,MAAM,QAAQ,GAAG,QAAQ,MAAM,WAAW,CAAC,OAAO,UAAU,CAAC,IAAI,WAAW,MAAM,WAAW,CAAC;AAAE,UAAO,MAAM,QAAQ;IACrH,MAAM,OAAO,MAAM,KAAK;IAAE,IAAI;AAAM,QAAI;AACtC,YAAO,GAAG,KAAK,KAAK;IACrB,SAAQ,GAAG;AACV,YAAO,SAAS,EAAE;IACnB;AAAC,QAAI,GAAG,MAAM,KAAK,KAAK,CACvB,OAAM,KAAK,GAAG,GAAG,QAAQ,KAAK,CAAC,OAAO,UAAU,CAAC,IAAI,WAAW,KAAK,CAAC,CAAC;AACxE,YAAQ,QAAQ,EAAE,WAAW,KAAK,MAAO;GAC3C;AAAC,UAAO,SAAS,MAAM;IAAE,MAAM;IAAS;GAAS,EAAC;EACpD;EAAE,cAAc,CAAC,OAAO,aAAa;GACpC,MAAM,UAAU,CAAE;AAAE,SAAM,MAAM,MAAM,YAAY,CAACD,OAAK,OAAO;AAC7D,QAAIA,MACF,QAAO,SAASA,MAAI;AAAE,QAAI;KAC1B,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,aAAc,GAAE,WAAW;AAAE,iBAAY,UAAU,CAAC,MAAM;AAClG,eAAS,EAAE,OAAO,MAAM;AAAE,QAAE,gBAAgB;KAC7C;KAAE,MAAM,QAAQ,YAAY,YAAY,MAAM,cAAc;KAAE,MAAM,QAAQ,MAAM,MAAM,YAAY;AAAE,WAAM,eAAe,CAAC,YAAY,CAAC,UAAU;MAClJ,MAAM,SAAS,MAAM,OAAO;AAAQ,WAAK,OACvC,QAAO,SAAS,MAAM;OAAE,MAAM;OAAU;OAAI;MAAS,EAAC;AACvD,cAAQ,OAAO,cAAc,EAAE,WAAW,OAAO,IAAK;AAAE,aAAO,UAAU;KAC3E;IACF,SAAQ,GAAG;AACV,YAAO,SAAS,EAAE;IACnB;GACF,EAAC;EACH;EAAE,gBAAgB,CAAC,MAAM,aAAa;GACrC,IAAI,MAAM;AAAM,OAAI;IAClB,MAAM,SAAS,GAAG,WAAW,KAAK;AAAE,WAAO,OAAO;AAAM,WAAO,GAAG,KAAK,KAAK;GAC7E,SAAQ,GAAG;AACV,WAAO,SAAS,EAAE;GACnB;AAAC,OAAI,GAAG,MAAM,KAAK,KAAK,CACvB,QAAO,SAAS,MAAM;IAAE,WAAW,KAAK;IAAO,MAAM,KAAK;GAAM,EAAC;YACxD,GAAG,OAAO,KAAK,KAAK,EAAE;AAC/B,SAAK,WAAW,MAAM,wBAAwB,KAAK;AAAE,WAAO,SAAS,MAAM;KAAE,WAAW,KAAK;KAAO,MAAM,KAAK;KAAM,UAAU,KAAK;IAAU,EAAC;GAChJ,MACC,QAAO,SAAS,IAAI,MAAM,2BAA2B;EAExD;EAAE,iBAAiB,CAAC,MAAM,OAAO,aAAa;AAC7C,OAAI;AACF,QAAI,GAAG,MAAM,MAAM,KAAK,CACtB,IAAG,UAAU,MAAM,MAAM,KAAK;aACrB,GAAG,OAAO,MAAM,KAAK,CAC9B,IAAG,UAAU,MAAM,MAAM,UAAU,EAAE,QAAQ,KAAM,EAAC;QAEpD,QAAO,SAAS,IAAI,MAAM,2BAA2B;AACtD,OAAG,MAAM,MAAM,MAAM,KAAK;AAAE,OAAG,MAAM,MAAM,MAAM,WAAW,MAAM,UAAU;GAC9E,SAAQ,GAAG;AACV,WAAO,SAAS,EAAE;GACnB;YAAS,KAAK;EAChB;EAAE,kBAAkB,CAAC,MAAM,aAAa;AACvC,OAAI;IACF,MAAM,OAAO,GAAG,KAAK,KAAK;AAAE,QAAI,GAAG,MAAM,KAAK,KAAK,CACjD,IAAG,MAAM,KAAK;aACL,GAAG,OAAO,KAAK,KAAK,CAC7B,IAAG,OAAO,KAAK;GAElB,SAAQ,GAAG;AACV,WAAO,SAAS,EAAE;GACnB;YAAS,KAAK;EAChB;EAAE,iBAAiB,CAAC,OAAO,MAAM,aAAa;GAC7C,MAAM,MAAM,MAAM,IAAI,KAAK;AAAE,OAAI,YAAY,WAAS,SAAS,MAAM,MAAM,OAAO,OAAO;AAAE,OAAI,UAAU,CAAC,MAAM;AAC9G,aAAS,EAAE,OAAO,MAAM;AAAE,MAAE,gBAAgB;GAC7C;EACF;EAAE,kBAAkB,CAAC,OAAO,MAAM,OAAO,aAAa;AACrD,OAAI;IACF,IAAI,MAAM,MAAM,IAAI,OAAO,KAAK;GACjC,SAAQ,GAAG;AACV,aAAS,EAAE;AAAE;GACd;OAAI,YAAY,WAAS,UAAU;AAAE,OAAI,UAAU,CAAC,MAAM;AACzD,aAAS,EAAE,OAAO,MAAM;AAAE,MAAE,gBAAgB;GAC7C;EACF;EAAE,mBAAmB,CAAC,OAAO,MAAM,aAAa;GAC/C,MAAM,MAAM,MAAM,OAAO,KAAK;AAAE,OAAI,YAAY,WAAS,UAAU;AAAE,OAAI,UAAU,CAAC,MAAM;AACxF,aAAS,EAAE,OAAO,MAAM;AAAE,MAAE,gBAAgB;GAC7C;EACF;EAAE,WAAW,CAAC,KAAK,KAAK,aAAa;GACpC,IAAI,QAAQ;GAAG,MAAM,SAAS,CAAE;AAAE,QAAK,IAAI,CAAC,KAAK,EAAE,IAAI,OAAO,QAAQ,IAAI,QAAQ,EAAE;IAClF,MAAM,KAAK,IAAI,QAAQ;AAAM,SAAK,MAAM,EAAE,UAAU,SAAS,IAAI,GAAG,UAAU,SAAS,EAAE;AACvF,YAAO,KAAK,IAAI;AAAE;IACnB;GACF;GAAC,MAAM,SAAS,CAAE;AAAE,QAAK,IAAI,OAAO,OAAO,KAAK,IAAI,QAAQ,CAC3D,MAAK,IAAI,QAAQ,MAAM;AACrB,WAAO,KAAK,IAAI;AAAE;GACnB;AACD,QAAK,MACL,QAAO,SAAS,KAAK;GACrB,IAAI,UAAU;GAAO,MAAM,KAAK,IAAI,SAAS,WAAW,IAAI,KAAK,IAAI;GAAI,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,aAAc,GAAE,YAAY;GAAE,MAAM,QAAQ,YAAY,YAAY,MAAM,cAAc;GAAE,SAAS,KAAKA,OAAK;AAChO,QAAIA,UAAQ,SAAS;AACnB,eAAU;AAAM,YAAO,SAASA,MAAI;IACrC;GACF;eAAY,UAAU,YAAY,UAAU,CAACE,QAAM;AAClD,SAAKA,IAAE,OAAO,MAAM;AAAE,QAAE,gBAAgB;GACzC;AAAE,eAAY,aAAa,CAACA,QAAM;AACjC,SAAK,QACH,UAAS,KAAK;GAEjB;AAAE,QAAK,MAAM,QAAQ,OAAO,MAAM,CACjC,KAAI,IAAI,SAAS,QACf,OAAM,gBAAgB,OAAO,MAAM,CAACF,OAAK,UAAU;AACjD,QAAIA,MACF,QAAO,KAAKA,MAAI;AAAE,UAAM,gBAAgB,MAAM,OAAO,KAAK;GAC7D,EAAC;OAEF,OAAM,eAAe,MAAM,CAACA,OAAK,UAAU;AACzC,QAAIA,MACF,QAAO,KAAKA,MAAI;AAAE,UAAM,iBAAiB,OAAO,MAAM,OAAO,KAAK;GACrE,EAAC;AAEJ,QAAK,MAAM,QAAQ,OAAO,MAAM,CAAC,SAAS,CAC1C,KAAI,IAAI,SAAS,QACf,OAAM,iBAAiB,MAAM,KAAK;OAElC,OAAM,kBAAkB,OAAO,MAAM,KAAK;EAG/C;CAAE;CAAE,MAAM,YAAY,OAAO,QAAQ;EACpC,MAAM,cAAc,MAAM,UAAU,IAAI;AAAE,SAAO,IAAI,WAAW;CACjE;CAAE,MAAM,oBAAoB,CAAC,GAAG,SAAS,GAAG,eAAe,GAAG,KAAK;CAAE,MAAM,yBAAyB,QAAM;CAAI,IAAI,kBAAkB;CAAG,IAAI,wBAAwB;CAAM,MAAM,sBAAsB,CAAC,OAAO;AAC5M;AAAmB,SAAO,yBAAyB,gBAAgB;AAAE,MAAI,mBAAmB,GAC1F;OAAI,uBAAuB;IACzB,MAAM,WAAW;AAAuB,4BAAwB;AAAM,cAAU;GACjF;;CAEJ;CAAE,MAAM,mBAAmB,CAAC,OAAO;AAClC;AAAmB,SAAO,yBAAyB,gBAAgB;CACpE;CAAE,IAAI,iBAAiB,CAAE;CAAE,MAAM,4BAA4B,OAAO,WAAW,aAAa;AAC3F,aAAW,WAAW,YACpB,SAAQ,MAAM;AAAE,OAAK,MAAM,UAAU,eACrC,KAAI,OAAO,UAAU,SAAS,CAC5B,QAAO,OAAO,OAAO,WAAW,SAAS;AAE3C,SAAO;CACV;CAAE,MAAM,iBAAiB,OAAO,QAAQ,MAAM,KAAK,SAAS,UAAU,gBAAgB,QAAQ,cAAc;EAC3G,MAAM,WAAW,OAAO,QAAQ,QAAQ,KAAK,MAAM,QAAQ,KAAK,CAAC,GAAG;EAAQ,MAAM,MAAM,wBAAwB,KAAK,SAAS,EAAE;AAAE,mBAAiB,IAAI;AAAE,MAAI;GAC3J,IAAI,YAAY;AAAK,cAAW,OAAO,SACrC,aAAY,MAAM,UAAU,IAAI;AACjC,eAAY,MAAM,0BAA0B,WAAW,SAAS;AAAE,gBAAa;AAAE,QAAK,eACrF,mBAAkB,QAAQ,MAAM,WAAW,SAAS,UAAU,OAAO;EAExE,UAAS;AACR,uBAAoB,IAAI;EACzB;CACF;CAAE,MAAM,yBAAyB,CAAC,QAAQ,MAAM,KAAK,SAAS,UAAU,QAAQ,SAAS,gBAAgB,QAAQ,cAAc;AAC9H,iBAAe,QAAQ,MAAM,KAAK,SAAS,UAAU,gBAAgB,QAAQ,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM,QAAQ;CACpH;CAAE,IAAI,KAAK;EAAE,MAAM;EAAM,QAAQ,CAAE;EAAE,SAAS,CAAE;EAAE,SAAS,CAAE;EAAE,WAAW;EAAG,WAAW;EAAM,aAAa;EAAK,aAAa;EAAO,mBAAmB;EAAM,aAAa;EAAM,gBAAgB;EAAG,YAAY,MAAM;GACpN,OAAO;GAAc,YAAY,OAAO;AACtC,SAAK,QAAQ;GACd;EACF;EAAE,UAAU,MAAM;GACjB,SAAS,CAAE;GAAE,IAAI,SAAS;AACxB,WAAO,KAAK;GACb;GAED,IAAI,OAAO,KAAK;AACd,SAAK,OAAO;GACb;GAED,IAAI,SAAS;AACX,YAAQ,KAAK,QAAQ,aAAa;GACnC;GAED,IAAI,UAAU;AACZ,YAAQ,KAAK,QAAQ,aAAa;GACnC;GAED,IAAI,WAAW;AACb,WAAO,KAAK,QAAQ;GACrB;GAED,IAAI,QAAQ;AACV,WAAO,KAAK,OAAO;GACpB;GAED,IAAI,MAAM,KAAK;AACb,SAAK,OAAO,QAAQ;GACrB;GAED,IAAI,WAAW;AACb,WAAO,KAAK,OAAO;GACpB;GAED,IAAI,SAAS,KAAK;AAChB,SAAK,OAAO,WAAW;GACxB;EACF;EAAE,QAAQ,MAAM;GACf,WAAW,CAAE;GAAE,aAAa,CAAE;GAAE,WAAW;GAAU,YAAY;GAAK,UAAU;GAAM,YAAY,QAAQ,MAAM,MAAM,MAAM;AAC1H,SAAK,OACH,UAAS;AACT,SAAK,SAAS;AAAQ,SAAK,QAAQ,OAAO;AAAO,SAAK,KAAK,GAAG;AAAa,SAAK,OAAO;AAAM,SAAK,OAAO;AAAM,SAAK,OAAO;AAAM,SAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK;GACrL;GAED,IAAI,OAAO;AACT,YAAQ,KAAK,OAAO,KAAK,cAAc,KAAK;GAC7C;GAED,IAAI,KAAK,KAAK;AACZ,UAAM,KAAK,QAAQ,KAAK,WAAW,KAAK,SAAS,KAAK;GACvD;GAED,IAAI,QAAQ;AACV,YAAQ,KAAK,OAAO,KAAK,eAAe,KAAK;GAC9C;GAED,IAAI,MAAM,KAAK;AACb,UAAM,KAAK,QAAQ,KAAK,YAAY,KAAK,SAAS,KAAK;GACxD;GAED,IAAI,WAAW;AACb,WAAO,GAAG,MAAM,KAAK,KAAK;GAC3B;GAED,IAAI,WAAW;AACb,WAAO,GAAG,SAAS,KAAK,KAAK;GAC9B;EACF;EAAE,WAAW,MAAM,OAAO,CAAE,GAAE;AAC7B,QAAK,KACH,OAAM,IAAI,GAAG,WAAW;AACzB,QAAK,iBAAiB;AAAM,QAAK,KAAK,MAAM,KAAK,CAChD,SAAQ,EAAE,GAAG,KAAK,CAAC,GAAG,KAAK;AAC5B,YAAS,MAAK,IAAI,SAAS,GAAG,SAAS,IAAI,UAAU;IACpD,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC,OAAO,SAAO,EAAE;IAAE,IAAI,UAAU,GAAG;IAAM,IAAI,eAAe;AAAK,SAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;KACpI,MAAM,SAAS,MAAM,MAAM,SAAS;AAAG,SAAI,UAAU,KAAK,OACxD;AACA,SAAI,MAAM,OAAO,IACjB;AACA,SAAI,MAAM,OAAO,MAAM;AACvB,qBAAe,KAAK,QAAQ,aAAa;AAAE,UAAI,GAAG,OAAO,QAAQ,EAAE;AACjE,eAAQ,EAAE,aAAa,GAAG,MAAM,MAAM,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAAG;AAAU,gBAAS;MAC9E,MACC,WAAU,QAAQ;AAClB;KACH;oBAAe,KAAK,MAAM,cAAc,MAAM,GAAG;AAAE,SAAI;AACtD,gBAAU,GAAG,WAAW,SAAS,MAAM,GAAG;KAC3C,SAAQ,GAAG;AACV,UAAI,GAAG,UAAU,MAAM,UAAU,KAAK,WACpC,QAAO,EAAE,MAAM,aAAc;AAC7B,YAAM;KACT;AAAC,SAAI,GAAG,aAAa,QAAQ,MAAM,UAAU,KAAK,cACjD,WAAU,QAAQ,QAAQ;AAC1B,SAAI,GAAG,OAAO,QAAQ,KAAK,MAAM,UAAU,KAAK,SAAS;AACzD,WAAK,QAAQ,SAAS,SACpB,OAAM,IAAI,GAAG,WAAW;MACxB,IAAI,OAAO,QAAQ,SAAS,SAAS,QAAQ;AAAE,WAAK,KAAK,MAAM,KAAK,CACpE,SAAQ,EAAE,KAAK,QAAQ,aAAa,CAAC,GAAG,KAAK;AAC9C,cAAQ,EAAE,KAAK,GAAG,MAAM,MAAM,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAAG,eAAS;KAC7D;IACF;AAAC,WAAO;KAAE,MAAM;KAAc,MAAM;IAAS;GAC/C;AAAC,SAAM,IAAI,GAAG,WAAW;EAC3B;EAAE,QAAQ,MAAM;GACf,IAAI;AAAM,UAAO,MAAM;AACrB,QAAI,GAAG,OAAO,KAAK,EAAE;KACnB,MAAM,QAAQ,KAAK,MAAM;AAAY,UAAK,KACxC,QAAO;AAAO,YAAO,MAAM,MAAM,SAAS,OAAO,OAAO,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ;IACvF;WAAO,QAAQ,EAAE,KAAK,KAAK,GAAG,KAAK,IAAI,KAAK;AAAM,WAAO,KAAK;GAChE;EACF;EAAE,SAAS,UAAU,MAAM;GAC1B,IAAI,OAAO;AAAG,QAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC7C,SAAQ,QAAQ,KAAK,OAAO,KAAK,WAAW,EAAE,GAAG;AACjD,WAAQ,WAAW,SAAS,KAAK,GAAG,UAAU;EACjD;EAAE,YAAY,MAAM;GACnB,MAAM,OAAO,GAAG,SAAS,KAAK,OAAO,IAAI,KAAK,KAAK;AAAE,QAAK,YAAY,GAAG,UAAU;AAAO,MAAG,UAAU,QAAQ;EAChH;EAAE,eAAe,MAAM;GACtB,MAAM,OAAO,GAAG,SAAS,KAAK,OAAO,IAAI,KAAK,KAAK;AAAE,OAAI,GAAG,UAAU,UAAU,KAC9E,IAAG,UAAU,QAAQ,KAAK;QACrB;IACL,IAAI,UAAU,GAAG,UAAU;AAAO,WAAO,SAAS;AAChD,SAAI,QAAQ,cAAc,MAAM;AAC9B,cAAQ,YAAY,KAAK;AAAW;KACrC;eAAU,QAAQ;IACpB;GACF;EACF;EAAE,WAAW,QAAQ,MAAM;GAC1B,MAAM,UAAU,GAAG,UAAU,OAAO;AAAE,OAAI,QACxC,OAAM,IAAI,GAAG,WAAW;GACxB,MAAM,OAAO,GAAG,SAAS,OAAO,IAAI,KAAK;AAAE,QAAK,IAAI,OAAO,GAAG,UAAU,OAAO,MAAM,OAAO,KAAK,WAAW;IAC5G,MAAM,WAAW,KAAK;AAAM,QAAI,KAAK,OAAO,OAAO,OAAO,MAAM,aAAa,KAC3E,QAAO;GAEV;AAAC,UAAO,GAAG,OAAO,QAAQ,KAAK;EACjC;EAAE,WAAW,QAAQ,MAAM,MAAM,MAAM;GACtC,MAAM,OAAO,IAAI,GAAG,OAAO,QAAQ,MAAM,MAAM;AAAO,MAAG,YAAY,KAAK;AAAE,UAAO;EACpF;EAAE,YAAY,MAAM;AACnB,MAAG,eAAe,KAAK;EACxB;EAAE,OAAO,MAAM;AACd,UAAO,SAAS,KAAK;EACtB;EAAE,aAAa,MAAM;AACpB,YAAS,KAAK;EACf;EAAE,OAAO,MAAM;AACd,WAAQ,OAAO,WAAW;EAC3B;EAAE,MAAM,MAAM;AACb,WAAQ,OAAO,WAAW;EAC3B;EAAE,OAAO,MAAM;AACd,WAAQ,OAAO,WAAW;EAC3B;EAAE,SAAS,MAAM;AAChB,WAAQ,OAAO,WAAW;EAC3B;EAAE,SAAS,MAAM;AAChB,WAAQ,OAAO,WAAW;EAC3B;EAAE,OAAO,MAAM;AACd,WAAQ,OAAO,WAAW;EAC3B;EAAE,SAAS,MAAM;AAChB,WAAQ,OAAO,WAAW;EAC3B;EAAE,wBAAwB,MAAM;GAC/B,IAAI,QAAQ;IAAC;IAAK;IAAK;GAAK,EAAC,OAAO;AAAI,OAAI,OAAO,IACjD,UAAS;AACT,UAAO;EACV;EAAE,gBAAgB,MAAM,OAAO;AAC9B,OAAI,GAAG,kBACL,QAAO;AACP,OAAI,MAAM,SAAS,IAAI,MAAM,KAAK,OAAO,KACzC,QAAO;AACP,OAAI,MAAM,SAAS,IAAI,MAAM,KAAK,OAAO,KACzC,QAAO;AACP,OAAI,MAAM,SAAS,IAAI,MAAM,KAAK,OAAO,IACzC,QAAO;AACP,UAAO;EACV;EAAE,UAAU,KAAK;AAChB,QAAK,GAAG,MAAM,IAAI,KAAK,CACrB,QAAO;GAAI,MAAM,UAAU,GAAG,gBAAgB,KAAK,IAAI;AAAE,OAAI,QAC7D,QAAO;AAAS,QAAK,IAAI,SAAS,OAClC,QAAO;AAAG,UAAO;EACpB;EAAE,UAAU,KAAK,MAAM;AACtB,QAAK,GAAG,MAAM,IAAI,KAAK,CACrB,QAAO;AACP,OAAI;IACJ,MAAM,OAAO,GAAG,WAAW,KAAK,KAAK;AAAE,WAAO;GAC/C,SAAQ,GAAG,CAAE;AAAC,UAAO,GAAG,gBAAgB,KAAK,KAAK;EACpD;EAAE,UAAU,KAAK,MAAM,OAAO;GAC7B,IAAI;AAAM,OAAI;AACZ,WAAO,GAAG,WAAW,KAAK,KAAK;GAChC,SAAQ,GAAG;AACV,WAAO,EAAE;GACV;GAAC,MAAM,UAAU,GAAG,gBAAgB,KAAK,KAAK;AAAE,OAAI,QACnD,QAAO;AACP,OAAI,OAAO;AACX,SAAK,GAAG,MAAM,KAAK,KAAK,CACtB,QAAO;AACP,QAAI,GAAG,OAAO,KAAK,IAAI,GAAG,QAAQ,KAAK,KAAK,GAAG,KAAK,CACpD,QAAO;GAEV,WAAU,GAAG,MAAM,KAAK,KAAK,CAC5B,QAAO;AACP,UAAO;EACV;EAAE,QAAQ,MAAM,OAAO;AACtB,QAAK,KACH,QAAO;AACP,OAAI,GAAG,OAAO,KAAK,KAAK,CACxB,QAAO;GACP,MAAM,OAAO,GAAG,wBAAwB,MAAM;AAAE,OAAI,GAAG,MAAM,KAAK,KAAK,EACvE;QAAI,SAAS,OAAO,QAAS,IAC3B,QAAO;GACR;AACD,UAAO,GAAG,gBAAgB,MAAM,KAAK;EACxC;EAAE,cAAc,IAAIA,OAAK;AACxB,QAAK,GACH,OAAM,IAAI,GAAG,WAAWA;AACxB,UAAO;EACV;EAAE,cAAc;EAAM,SAAS;AAC9B,QAAK,IAAI,KAAK,GAAG,MAAM,GAAG,cAAc,KACtC,MAAK,GAAG,QAAQ,IACd,QAAO;AAET,SAAM,IAAI,GAAG,WAAW;EAC3B;EAAE,iBAAiB,IAAI;GACtB,MAAM,SAAS,GAAG,UAAU,GAAG;AAAE,QAAK,OACpC,OAAM,IAAI,GAAG,WAAW;AACxB,UAAO;EACV;EAAE,WAAW,QAAM,GAAG,QAAQ;EAAK,aAAa,QAAQ,KAAK,IAAI;AAChE,YAAS,OAAO,OAAO,IAAI,GAAG,YAAY,OAAO;AAAE,OAAI,MAAM,GAC3D,MAAK,GAAG,QAAQ;AACjB,UAAO,KAAK;AAAI,MAAG,QAAQ,MAAM;AAAQ,UAAO;EAClD;EAAE,YAAY,IAAI;AACjB,MAAG,QAAQ,MAAM;EAClB;EAAE,UAAU,YAAY,KAAK,IAAI;GAChC,MAAM,SAAS,GAAG,aAAa,YAAY,GAAG;AAAE,UAAO,YAAY,MAAM,OAAO;AAAE,UAAO;EAC1F;EAAE,UAAU,QAAQ,MAAM,MAAM;GAC/B,IAAI,UAAU,QAAQ,WAAW;GAAS,MAAM,MAAM,UAAU,SAAS;AAAM,eAAY,KAAK,SAAS;AAAS,MAAG,cAAc,SAAS,GAAG;AAAE,WAAQ,KAAK,KAAK;EACpK;EAAE,mBAAmB;GAAE,KAAK,QAAQ;IACnC,MAAM,SAAS,GAAG,UAAU,OAAO,KAAK,KAAK;AAAE,WAAO,aAAa,OAAO;AAAY,WAAO,WAAW,OAAO,OAAO;GACvH;GAAE,SAAS;AACV,UAAM,IAAI,GAAG,WAAW;GACzB;EAAE;EAAE,OAAO,SAAO,OAAO;EAAG,OAAO,SAAO,MAAM;EAAK,SAAS,CAAC,IAAI,OAAO,MAAM,IAAI;EAAI,eAAe,KAAK,KAAK;AAChH,MAAG,QAAQ,OAAO,EAAE,YAAY,IAAK;EACtC;EAAE,WAAW,SAAO,GAAG,QAAQ;EAAM,UAAU,OAAO;GACrD,MAAM,SAAS,CAAE;GAAE,MAAM,QAAQ,CAAC,KAAM;AAAE,UAAO,MAAM,QAAQ;IAC7D,MAAM,IAAI,MAAM,KAAK;AAAE,WAAO,KAAK,EAAE;AAAE,UAAM,KAAK,GAAG,EAAE,OAAO;GAC/D;AAAC,UAAO;EACV;EAAE,OAAO,UAAU,UAAU;AAC5B,cAAW,YAAY,YAAY;AACjC,eAAW;AAAU,eAAW;GACjC;MAAG;AAAkB,OAAI,GAAG,iBAAiB,EAC5C,MAAK,WAAW,GAAG,eAAe,yEAAyE;GAC3G,MAAM,SAAS,GAAG,UAAU,GAAG,KAAK,MAAM;GAAE,IAAI,YAAY;GAAG,SAAS,WAAW,SAAS;AAC5F,OAAG;AAAkB,WAAO,SAAS,QAAQ;GAC9C;GAAC,SAAS,KAAK,SAAS;AACvB,QAAI,SAAS;AACX,UAAK,KAAK,SAAS;AACjB,WAAK,UAAU;AAAM,aAAO,WAAW,QAAQ;KAChD;AAAC;IACH;AAAC,QAAI,EAAE,aAAa,OAAO,OAC1B,YAAW,KAAK;GAEnB;AAAC,QAAK,MAAM,SAAS,OACpB,KAAI,MAAM,KAAK,OACb,OAAM,KAAK,OAAO,OAAO,UAAU,KAAK;OAExC,MAAK,KAAK;EAGf;EAAE,MAAM,MAAM,MAAM,YAAY;GAC/B,MAAM,OAAO,eAAe;GAAK,MAAM,UAAU;GAAY,IAAI;AAAM,OAAI,QAAQ,GAAG,KACpF,OAAM,IAAI,GAAG,WAAW;aACd,SAAS,QAAQ;IAC3B,MAAM,SAAS,GAAG,WAAW,YAAY,EAAE,cAAc,MAAO,EAAC;AAAE,iBAAa,OAAO;AAAM,WAAO,OAAO;AAAM,QAAI,GAAG,aAAa,KAAK,CACxI,OAAM,IAAI,GAAG,WAAW;AACxB,SAAK,GAAG,MAAM,KAAK,KAAK,CACxB,OAAM,IAAI,GAAG,WAAW;GAE3B;GAAC,MAAM,QAAQ;IAAE;IAAM;IAAM;IAAY,QAAQ,CAAE;GAAE;GAAE,MAAM,YAAY,KAAK,MAAM,MAAM;AAAE,aAAU,QAAQ;AAAO,SAAM,OAAO;AAAW,OAAI,KAChJ,IAAG,OAAO;YACD,MAAM;AACf,SAAK,UAAU;AAAO,QAAI,KAAK,MAC7B,MAAK,MAAM,OAAO,KAAK,MAAM;GAEhC;AAAC,UAAO;EACV;EAAE,QAAQ,YAAY;GACrB,MAAM,SAAS,GAAG,WAAW,YAAY,EAAE,cAAc,MAAO,EAAC;AAAE,QAAK,GAAG,aAAa,OAAO,KAAK,CAClG,OAAM,IAAI,GAAG,WAAW;GACxB,MAAM,OAAO,OAAO;GAAM,MAAM,QAAQ,KAAK;GAAS,MAAM,SAAS,GAAG,UAAU,MAAM;AAAE,QAAK,IAAI,CAAC,MAAM,QAAQ,IAAI,OAAO,QAAQ,GAAG,UAAU,CAClJ,QAAO,SAAS;IACd,MAAM,OAAO,QAAQ;AAAW,QAAI,OAAO,SAAS,QAAQ,MAAM,CAChE,IAAG,YAAY,QAAQ;AACxB,cAAU;GACZ;AACF,QAAK,UAAU;GAAM,MAAM,MAAM,KAAK,MAAM,OAAO,QAAQ,MAAM;AAAE,QAAK,MAAM,OAAO,OAAO,KAAK,EAAE;EACrG;EAAE,OAAO,QAAQ,MAAM;AACtB,UAAO,OAAO,SAAS,OAAO,QAAQ,KAAK;EAC5C;EAAE,MAAM,MAAM,MAAM,KAAK;GACxB,MAAM,SAAS,GAAG,WAAW,MAAM,EAAE,QAAQ,KAAM,EAAC;GAAE,MAAM,SAAS,OAAO;GAAM,MAAM,OAAO,KAAK,SAAS,KAAK;AAAE,QAAK,KACvH,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,SAAS,OAAO,SAAS,KAC7B,OAAM,IAAI,GAAG,WAAW;GACxB,MAAM,UAAU,GAAG,UAAU,QAAQ,KAAK;AAAE,OAAI,QAChD,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,OAAO,SAAS,MACrB,OAAM,IAAI,GAAG,WAAW;AACxB,UAAO,OAAO,SAAS,MAAM,QAAQ,MAAM,MAAM,IAAI;EACxD;EAAE,OAAO,MAAM;AACd,UAAO,GAAG,WAAW,GAAG,WAAW,MAAM,EAAE,QAAQ,KAAM,EAAC,CAAC,KAAK;EACjE;EAAE,aAAa,QAAQ;AACtB,UAAO,GAAG,WAAW,OAAO,KAAK;EAClC;EAAE,WAAW,MAAM;GAClB,MAAM,MAAM;IAAE,OAAO;IAAM,QAAQ;IAAM,QAAQ;IAAK,OAAO;IAAK,QAAQ;IAAK,OAAO,GAAG;IAAW,OAAO,GAAG,YAAY;IAAG,MAAM;IAAI,OAAO;IAAG,SAAS;GAAK;AAAE,OAAI,KAAK,SAAS,OACjL,QAAO,OAAO,KAAK,KAAK,SAAS,OAAO,KAAK,MAAM,KAAK,KAAK,CAAC;AAC9D,UAAO;EACV;EAAE,OAAO,MAAM,OAAO,KAAK;AAC1B,WAAQ;AAAM,WAAQ;AAAO,UAAO,GAAG,MAAM,MAAM,MAAM,EAAE;EAC5D;EAAE,MAAM,MAAM,OAAO,KAAK;AACzB,WAAQ;AAAW,WAAQ;AAAO,UAAO,GAAG,MAAM,MAAM,MAAM,EAAE;EACjE;EAAE,UAAU,MAAM,MAAM;GACvB,MAAM,OAAO,KAAK,MAAM,IAAI;GAAE,IAAI,IAAI;AAAI,QAAK,MAAM,OAAO,MAAM;AAChE,SAAK,IACH;AAAU,QAAI,KAAK,KAAK,MAAM,KAAK,CACnC,MAAK;AAAK,SAAK;AAAK,QAAI;AACxB,QAAG,MAAM,GAAG,KAAK;IAClB,SAAQ,GAAG;AACV,SAAI,EAAE,SAAS,GACb,OAAM;IACT;GACF;EACF;EAAE,MAAM,MAAM,MAAM,KAAK;AACxB,cAAW,OAAO,aAAa;AAC7B,UAAM;AAAM,WAAO;GACpB;WAAQ;AAAM,UAAO,GAAG,MAAM,MAAM,MAAM,IAAI;EAChD;EAAE,QAAQ,SAAS,SAAS;AAC3B,QAAK,QAAQ,QAAQ,QAAQ,CAC3B,OAAM,IAAI,GAAG,WAAW;GACxB,MAAM,SAAS,GAAG,WAAW,SAAS,EAAE,QAAQ,KAAM,EAAC;GAAE,MAAM,SAAS,OAAO;AAAM,QAAK,OAC1F,OAAM,IAAI,GAAG,WAAW;GACxB,MAAM,UAAU,KAAK,SAAS,QAAQ;GAAE,MAAM,UAAU,GAAG,UAAU,QAAQ,QAAQ;AAAE,OAAI,QAC3F,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,OAAO,SAAS,QACrB,OAAM,IAAI,GAAG,WAAW;AACxB,UAAO,OAAO,SAAS,QAAQ,QAAQ,SAAS,QAAQ;EAC3D;EAAE,OAAO,UAAU,UAAU;GAC5B,MAAM,cAAc,KAAK,QAAQ,SAAS;GAAE,MAAM,cAAc,KAAK,QAAQ,SAAS;GAAE,MAAM,WAAW,KAAK,SAAS,SAAS;GAAE,MAAM,WAAW,KAAK,SAAS,SAAS;GAAE,IAAI,QAAQ,SAAS;AAAS,YAAS,GAAG,WAAW,UAAU,EAAE,QAAQ,KAAM,EAAC;AAAE,aAAU,OAAO;AAAM,YAAS,GAAG,WAAW,UAAU,EAAE,QAAQ,KAAM,EAAC;AAAE,aAAU,OAAO;AAAM,QAAK,YAAY,QAC/W,OAAM,IAAI,GAAG,WAAW;AAAK,OAAI,QAAQ,UAAU,QAAQ,MAC3D,OAAM,IAAI,GAAG,WAAW;GACxB,MAAM,WAAW,GAAG,WAAW,SAAS,SAAS;GAAE,IAAI,WAAW,QAAQ,SAAS,UAAU,YAAY;AAAE,OAAI,SAAS,OAAO,EAAE,KAAK,IACtI,OAAM,IAAI,GAAG,WAAW;AACzB,cAAW,QAAQ,SAAS,UAAU,YAAY;AAAE,OAAI,SAAS,OAAO,EAAE,KAAK,IAC9E,OAAM,IAAI,GAAG,WAAW;GACxB,IAAI;AAAU,OAAI;AAClB,eAAW,GAAG,WAAW,SAAS,SAAS;GAC5C,SAAQ,GAAG,CAAE;AAAC,OAAI,aAAa,SAC9B;GACA,MAAM,QAAQ,GAAG,MAAM,SAAS,KAAK;GAAE,IAAI,UAAU,GAAG,UAAU,SAAS,UAAU,MAAM;AAAE,OAAI,QACjG,OAAM,IAAI,GAAG,WAAW;AACzB,aAAU,WAAW,GAAG,UAAU,SAAS,UAAU,MAAM,GAAG,GAAG,UAAU,SAAS,SAAS;AAAE,OAAI,QAClG,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,QAAQ,SAAS,OACtB,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,GAAG,aAAa,SAAS,IAAI,YAAY,GAAG,aAAa,SAAS,CACtE,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,YAAY,SAAS;AACzB,cAAU,GAAG,gBAAgB,SAAS,IAAI;AAAE,QAAI,QAC9C,OAAM,IAAI,GAAG,WAAW;GAE3B;MAAG,eAAe,SAAS;AAAE,OAAI;AAChC,YAAQ,SAAS,OAAO,UAAU,SAAS,SAAS;AAAE,aAAS,SAAS;GACzE,SAAQ,GAAG;AACV,UAAM;GACP,UAAS;AACR,OAAG,YAAY,SAAS;GACzB;EACF;EAAE,MAAM,MAAM;GACb,MAAM,SAAS,GAAG,WAAW,MAAM,EAAE,QAAQ,KAAM,EAAC;GAAE,MAAM,SAAS,OAAO;GAAM,MAAM,OAAO,KAAK,SAAS,KAAK;GAAE,MAAM,OAAO,GAAG,WAAW,QAAQ,KAAK;GAAE,MAAM,UAAU,GAAG,UAAU,QAAQ,MAAM,KAAK;AAAE,OAAI,QAClN,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,OAAO,SAAS,MACrB,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,GAAG,aAAa,KAAK,CACzB,OAAM,IAAI,GAAG,WAAW;AACzB,UAAO,SAAS,MAAM,QAAQ,KAAK;AAAE,MAAG,YAAY,KAAK;EAC3D;EAAE,QAAQ,MAAM;GACf,MAAM,SAAS,GAAG,WAAW,MAAM,EAAE,QAAQ,KAAM,EAAC;GAAE,MAAM,OAAO,OAAO;GAAM,MAAM,UAAU,GAAG,cAAc,KAAK,SAAS,SAAS,GAAG;AAAE,UAAO,QAAQ,KAAK;EAClK;EAAE,OAAO,MAAM;GACd,MAAM,SAAS,GAAG,WAAW,MAAM,EAAE,QAAQ,KAAM,EAAC;GAAE,MAAM,SAAS,OAAO;AAAM,QAAK,OACrF,OAAM,IAAI,GAAG,WAAW;GACxB,MAAM,OAAO,KAAK,SAAS,KAAK;GAAE,MAAM,OAAO,GAAG,WAAW,QAAQ,KAAK;GAAE,MAAM,UAAU,GAAG,UAAU,QAAQ,MAAM,MAAM;AAAE,OAAI,QACnI,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,OAAO,SAAS,OACrB,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,GAAG,aAAa,KAAK,CACzB,OAAM,IAAI,GAAG,WAAW;AACzB,UAAO,SAAS,OAAO,QAAQ,KAAK;AAAE,MAAG,YAAY,KAAK;EAC5D;EAAE,SAAS,MAAM;GAChB,MAAM,SAAS,GAAG,WAAW,KAAK;GAAE,MAAM,OAAO,OAAO;AAAM,QAAK,KACjE,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,KAAK,SAAS,SACnB,OAAM,IAAI,GAAG,WAAW;AACxB,UAAO,KAAK,SAAS,SAAS,KAAK;EACtC;EAAE,KAAK,MAAM,YAAY;GACxB,MAAM,SAAS,GAAG,WAAW,MAAM,EAAE,SAAS,WAAY,EAAC;GAAE,MAAM,OAAO,OAAO;GAAM,MAAM,UAAU,GAAG,cAAc,KAAK,SAAS,SAAS,GAAG;AAAE,UAAO,QAAQ,KAAK;EACzK;EAAE,MAAM,IAAI;GACX,MAAM,SAAS,GAAG,iBAAiB,GAAG;GAAE,MAAM,OAAO,OAAO;GAAM,IAAI,UAAU,OAAO,WAAW;GAAS,MAAM,MAAM,UAAU,SAAS;AAAM,eAAY,KAAK,SAAS;AAAS,MAAG,cAAc,SAAS,GAAG;AAAE,UAAO,QAAQ,IAAI;EACtO;EAAE,MAAM,MAAM;AACb,UAAO,GAAG,KAAK,MAAM,KAAK;EAC3B;EAAE,QAAQ,QAAQ,MAAM,MAAM,YAAY;AACzC,MAAG,UAAU,QAAQ,MAAM;IAAE,MAAM,OAAO,OAAO,KAAK,OAAO;IAAO,OAAO,KAAK,KAAK;IAAE;GAAY,EAAC;EACrG;EAAE,MAAM,MAAM,MAAM,YAAY;GAC/B,IAAI;AAAM,cAAW,QAAQ,UAAU;IACrC,MAAM,SAAS,GAAG,WAAW,MAAM,EAAE,SAAS,WAAY,EAAC;AAAE,WAAO,OAAO;GAC5E,MACC,QAAO;AACR,MAAG,QAAQ,MAAM,MAAM,MAAM,WAAW;EAC1C;EAAE,OAAO,MAAM,MAAM;AACpB,MAAG,MAAM,MAAM,MAAM,KAAK;EAC3B;EAAE,OAAO,IAAI,MAAM;GAClB,MAAM,SAAS,GAAG,iBAAiB,GAAG;AAAE,MAAG,QAAQ,QAAQ,OAAO,MAAM,MAAM,MAAM;EACrF;EAAE,QAAQ,QAAQ,MAAM,YAAY;AACnC,MAAG,UAAU,QAAQ,MAAM;IAAE,WAAW,KAAK,KAAK;IAAE;GAAY,EAAC;EAClE;EAAE,MAAM,MAAM,KAAK,KAAK,YAAY;GACnC,IAAI;AAAM,cAAW,QAAQ,UAAU;IACrC,MAAM,SAAS,GAAG,WAAW,MAAM,EAAE,SAAS,WAAY,EAAC;AAAE,WAAO,OAAO;GAC5E,MACC,QAAO;AACR,MAAG,QAAQ,MAAM,MAAM,WAAW;EACpC;EAAE,OAAO,MAAM,KAAK,KAAK;AACxB,MAAG,MAAM,MAAM,KAAK,KAAK,KAAK;EAC/B;EAAE,OAAO,IAAI,KAAK,KAAK;GACtB,MAAM,SAAS,GAAG,iBAAiB,GAAG;AAAE,MAAG,QAAQ,QAAQ,OAAO,MAAM,MAAM;EAC/E;EAAE,WAAW,QAAQ,MAAM,KAAK;AAC/B,OAAI,GAAG,MAAM,KAAK,KAAK,CACrB,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,GAAG,OAAO,KAAK,KAAK,CACzB,OAAM,IAAI,GAAG,WAAW;GACxB,MAAM,UAAU,GAAG,gBAAgB,MAAM,IAAI;AAAE,OAAI,QACnD,OAAM,IAAI,GAAG,WAAW;AACzB,MAAG,UAAU,QAAQ,MAAM;IAAE,MAAM;IAAK,WAAW,KAAK,KAAK;GAAE,EAAC;EAClE;EAAE,SAAS,MAAM,KAAK;AACrB,OAAI,MAAM,EACR,OAAM,IAAI,GAAG,WAAW;GACxB,IAAI;AAAM,cAAW,QAAQ,UAAU;IACvC,MAAM,SAAS,GAAG,WAAW,MAAM,EAAE,QAAQ,KAAM,EAAC;AAAE,WAAO,OAAO;GACrE,MACC,QAAO;AACR,MAAG,WAAW,MAAM,MAAM,IAAI;EAChC;EAAE,UAAU,IAAI,KAAK;GACpB,MAAM,SAAS,GAAG,iBAAiB,GAAG;AAAE,OAAI,MAAM,MAAM,OAAO,QAAQ,aAAa,EAClF,OAAM,IAAI,GAAG,WAAW;AACzB,MAAG,WAAW,QAAQ,OAAO,MAAM,IAAI;EACzC;EAAE,MAAM,MAAM,OAAO,OAAO;GAC3B,MAAM,SAAS,GAAG,WAAW,MAAM,EAAE,QAAQ,KAAM,EAAC;GAAE,MAAM,OAAO,OAAO;GAAM,MAAM,UAAU,GAAG,cAAc,KAAK,SAAS,SAAS,GAAG;AAAE,WAAQ,MAAM;IAAE;IAAO;GAAO,EAAC;EAC7K;EAAE,KAAK,MAAM,OAAO,OAAO,KAAK;AAC/B,OAAI,SAAS,GACX,OAAM,IAAI,GAAG,WAAW;AACzB,kBAAe,SAAS,WAAW,qBAAqB,MAAM,GAAG;AAAO,OAAI,QAAQ,GACnF,QAAO,OAAO,OAAO;OAErB,QAAO;GACP,IAAI;GAAM,IAAI;AAAW,cAAW,QAAQ,SAC5C,QAAO;QACF;AACL,gBAAY,KAAK,SAAS,IAAI;IAAE,MAAM,SAAS,GAAG,WAAW,MAAM;KAAE,UAAU,QAAQ;KAAS,YAAY;IAAM,EAAC;AAAE,WAAO,OAAO;AAAM,WAAO,OAAO;GACxJ;GAAC,IAAI,UAAU;AAAO,OAAI,QAAQ,GACjC,KAAI,MACF;QAAI,QAAQ,IACV,OAAM,IAAI,GAAG,WAAW;GACzB,WACQ,UACT,OAAM,IAAI,GAAG,WAAW;QACnB;AACL,WAAO,GAAG,MAAM,MAAM,OAAO,KAAK,EAAE;AAAE,cAAU;GACjD;AACD,QAAK,KACL,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,GAAG,SAAS,KAAK,KAAK,CAC1B,UAAS;AACT,OAAI,QAAQ,UAAU,GAAG,MAAM,KAAK,KAAK,CACzC,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,SAAS;IACd,MAAM,UAAU,GAAG,QAAQ,MAAM,MAAM;AAAE,QAAI,QAC3C,OAAM,IAAI,GAAG,WAAW;GAE3B;AAAC,OAAI,QAAQ,QAAQ,QACpB,IAAG,SAAS,MAAM,EAAE;AACrB,YAAS;GAAuB,MAAM,SAAS,GAAG,aAAa;IAAE;IAAM,MAAM,GAAG,QAAQ,KAAK;IAAE;IAAO,UAAU;IAAM,UAAU;IAAG,YAAY,KAAK;IAAY,UAAU,CAAE;IAAE,OAAO;GAAO,EAAC;AAAE,OAAI,OAAO,WAAW,KACpN,QAAO,WAAW,KAAK,OAAO;AAC9B,OAAI,QACJ,IAAG,MAAM,MAAM,OAAO,IAAI;AAC1B,UAAO;EACV;EAAE,MAAM,QAAQ;AACf,OAAI,GAAG,SAAS,OAAO,CACrB,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,OAAO,SACX,QAAO,WAAW;AAAM,OAAI;AAC5B,QAAI,OAAO,WAAW,MACpB,QAAO,WAAW,MAAM,OAAO;GAElC,SAAQ,GAAG;AACV,UAAM;GACP,UAAS;AACR,OAAG,YAAY,OAAO,GAAG;GAC1B;UAAO,KAAK;EACd;EAAE,SAAS,QAAQ;AAClB,UAAO,OAAO,OAAO;EACtB;EAAE,OAAO,QAAQ,QAAQ,QAAQ;AAChC,OAAI,GAAG,SAAS,OAAO,CACrB,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,OAAO,aAAa,OAAO,WAAW,OAC3C,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,UAAU,KAAK,UAAU,KAAK,UAAU,EAC5C,OAAM,IAAI,GAAG,WAAW;AACzB,UAAO,WAAW,OAAO,WAAW,OAAO,QAAQ,QAAQ,OAAO;AAAE,UAAO,WAAW,CAAE;AAAE,UAAO,OAAO;EAC1G;EAAE,KAAK,QAAQ,QAAQ,QAAQ,QAAQ,UAAU;AAChD,OAAI,SAAS,KAAK,WAAW,EAC3B,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,GAAG,SAAS,OAAO,CACvB,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,OAAO,QAAQ,aAAa,EACjC,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,GAAG,MAAM,OAAO,KAAK,KAAK,CAC9B,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,OAAO,WAAW,KACvB,OAAM,IAAI,GAAG,WAAW;GACxB,MAAM,iBAAiB,YAAY;AAAa,QAAK,QACrD,YAAW,OAAO;aACR,OAAO,SACjB,OAAM,IAAI,GAAG,WAAW;GACxB,MAAM,YAAY,OAAO,WAAW,KAAK,QAAQ,QAAQ,QAAQ,QAAQ,SAAS;AAAE,QAAK,QACzF,QAAO,YAAY;AAAW,UAAO;EACxC;EAAE,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,QAAQ;AACzD,OAAI,SAAS,KAAK,WAAW,EAC3B,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,GAAG,SAAS,OAAO,CACvB,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,OAAO,QAAQ,aAAa,EACjC,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,GAAG,MAAM,OAAO,KAAK,KAAK,CAC9B,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,OAAO,WAAW,MACvB,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,OAAO,YAAY,OAAO,QAAQ,KACtC,IAAG,OAAO,QAAQ,GAAG,EAAE;GACvB,MAAM,iBAAiB,YAAY;AAAa,QAAK,QACrD,YAAW,OAAO;aACR,OAAO,SACjB,OAAM,IAAI,GAAG,WAAW;GACxB,MAAM,eAAe,OAAO,WAAW,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,OAAO;AAAE,QAAK,QACrG,QAAO,YAAY;AAAc,UAAO;EAC3C;EAAE,KAAK,QAAQ,QAAQ,UAAU,MAAM,OAAO;AAC7C,QAAK,OAAO,OAAO,MAAM,QAAQ,OAAO,MAAM,OAAO,QAAQ,aAAa,EACxE,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,OAAO,QAAQ,aAAa,EACjC,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,OAAO,WAAW,KACvB,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,OACL,OAAM,IAAI,GAAG,WAAW;AACxB,UAAO,OAAO,WAAW,KAAK,QAAQ,QAAQ,UAAU,MAAM,MAAM;EACvE;EAAE,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,WAAW;AAClD,QAAK,OAAO,WAAW,MACrB,QAAO;AACP,UAAO,OAAO,WAAW,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,UAAU;EAC5E;EAAE,MAAM,QAAQ,KAAK,KAAK;AACzB,QAAK,OAAO,WAAW,MACrB,OAAM,IAAI,GAAG,WAAW;AACxB,UAAO,OAAO,WAAW,MAAM,QAAQ,KAAK,IAAI;EACnD;EAAE,SAAS,MAAM,OAAO,CAAE,GAAE;AAC3B,QAAK,QAAQ,KAAK,SAAS;AAAG,QAAK,WAAW,KAAK,YAAY;AAAU,OAAI,KAAK,aAAa,UAAU,KAAK,aAAa,SACzH,QAAO,yBAAyB,KAAK,SAAS,GAAG;GACjD,MAAM,SAAS,GAAG,KAAK,MAAM,KAAK,MAAM;GAAE,MAAM,OAAO,GAAG,KAAK,KAAK;GAAE,MAAM,SAAS,KAAK;GAAM,IAAI,MAAM,IAAI,WAAW;AAAS,MAAG,KAAK,QAAQ,KAAK,GAAG,QAAQ,EAAE;AAAE,OAAI,KAAK,aAAa,OAC5L,OAAM,kBAAkB,IAAI;AAC7B,MAAG,MAAM,OAAO;AAAE,UAAO;EAC3B;EAAE,UAAU,MAAM,MAAM,OAAO,CAAE,GAAE;AAClC,QAAK,QAAQ,KAAK,SAAS;GAAK,MAAM,SAAS,GAAG,KAAK,MAAM,KAAK,OAAO,KAAK,KAAK;AAAE,cAAW,QAAQ,SACtG,QAAO,IAAI,WAAW,mBAAmB,MAAM,KAAK;AACpD,OAAI,YAAY,OAAO,KAAK,CAC5B,IAAG,MAAM,QAAQ,MAAM,GAAG,KAAK,oBAAuB,KAAK,OAAO;OAElE,OAAM,wBAAwB;AAC/B,MAAG,MAAM,OAAO;EAClB;EAAE,KAAK,MAAM,GAAG;EAAa,MAAM,MAAM;GACxC,MAAM,SAAS,GAAG,WAAW,MAAM,EAAE,QAAQ,KAAM,EAAC;AAAE,OAAI,OAAO,SAAS,KACxE,OAAM,IAAI,GAAG,WAAW;AACxB,QAAK,GAAG,MAAM,OAAO,KAAK,KAAK,CAC/B,OAAM,IAAI,GAAG,WAAW;GACxB,MAAM,UAAU,GAAG,gBAAgB,OAAO,MAAM,IAAI;AAAE,OAAI,QAC1D,OAAM,IAAI,GAAG,WAAW;AACzB,MAAG,cAAc,OAAO;EAC1B;EAAE,2BAA2B;AAC5B,MAAG,MAAM,OAAO;AAAE,MAAG,MAAM,QAAQ;AAAE,MAAG,MAAM,iBAAiB;EAChE;EAAE,uBAAuB;AACxB,MAAG,MAAM,OAAO;AAAE,MAAG,eAAe,GAAG,QAAQ,GAAG,EAAE,EAAE;IAAE,MAAM,MAAM;IAAG,OAAO,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ;IAAQ,QAAQ,MAAM;GAAG,EAAC;AAAE,MAAG,MAAM,aAAa,GAAG,QAAQ,GAAG,EAAE,CAAC;AAAE,OAAI,SAAS,GAAG,QAAQ,GAAG,EAAE,EAAE,IAAI,gBAAgB;AAAE,OAAI,SAAS,GAAG,QAAQ,GAAG,EAAE,EAAE,IAAI,iBAAiB;AAAE,MAAG,MAAM,YAAY,GAAG,QAAQ,GAAG,EAAE,CAAC;AAAE,MAAG,MAAM,aAAa,GAAG,QAAQ,GAAG,EAAE,CAAC;GAAE,MAAM,eAAe,IAAI,WAAW;GAAO,IAAI,aAAa;GAAG,MAAM,aAAa,MAAM;AAC9c,QAAI,eAAe,GAAG;AACpB,gBAAW,aAAa;AAAE,kBAAa,aAAa;IACrD;AAAC,WAAO,aAAa,EAAE;GACzB;AAAE,MAAG,aAAa,QAAQ,UAAU,WAAW;AAAE,MAAG,aAAa,QAAQ,WAAW,WAAW;AAAE,MAAG,MAAM,WAAW;AAAE,MAAG,MAAM,eAAe;EACjJ;EAAE,2BAA2B;AAC5B,MAAG,MAAM,QAAQ;GAAE,MAAM,YAAY,GAAG,MAAM,aAAa;AAAE,MAAG,MAAM,gBAAgB;AAAE,MAAG,MAAM,EAAE,QAAQ;IACzG,MAAM,OAAO,GAAG,WAAW,WAAW,MAAM,OAAO,GAAG;AAAE,SAAK,aAAa,EAAE,QAAQ,MAAM,WAAW,OAAQ;AAAE,SAAK,WAAW;KAAE,OAAO,QAAQ,MAAM;MACpJ,MAAM,MAAM;MAAM,MAAM,SAAS,GAAG,iBAAiB,GAAG;MAAE,MAAM,MAAM;OAAE,QAAQ;OAAM,OAAO,EAAE,YAAY,OAAQ;OAAE,UAAU,EAAE,UAAU,MAAM,OAAO,KAAM;OAAE,IAAI,KAAK;MAAG;AAAE,UAAI,SAAS;AAAK,aAAO;KACxM;KAAE,UAAU;AACX,aAAO,MAAM,KAAK,GAAG,QAAQ,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC;KAC5F;IAAE;AAAE,WAAO;GACb,EAAE,GAAE,CAAE,GAAE,gBAAgB;EAC1B;EAAE,sBAAsB,OAAO,QAAQ,OAAO;AAC7C,OAAI,MACF,IAAG,aAAa,QAAQ,SAAS,MAAM;OAEvC,IAAG,QAAQ,YAAY,aAAa;AACpC,OAAI,OACJ,IAAG,aAAa,QAAQ,UAAU,MAAM,OAAO;OAE/C,IAAG,QAAQ,YAAY,cAAc;AACrC,OAAI,MACJ,IAAG,aAAa,QAAQ,UAAU,MAAM,MAAM;OAE9C,IAAG,QAAQ,aAAa,cAAc;GACtC,MAAM,QAAQ,GAAG,KAAK,cAAc,EAAE;GAAE,MAAM,SAAS,GAAG,KAAK,eAAe,EAAE;GAAE,MAAM,SAAS,GAAG,KAAK,eAAe,EAAE;EAC7H;EAAE,aAAa;AACd,MAAG,YAAY,MAAM,KAAK,EAAE,QAAQ,KAAM,EAAC;AAAE,MAAG,MAAM,OAAO,CAAE,GAAE,IAAI;AAAE,MAAG,0BAA0B;AAAE,MAAG,sBAAsB;AAAE,MAAG,0BAA0B;AAAE,MAAG,cAAc;IAAE;IAAO;GAAO;EAClM;EAAE,KAAK,OAAO,QAAQ,OAAO;AAC5B,MAAG,cAAc;AAAM,aAAU,OAAO;AAAO,cAAW,OAAO;AAAQ,aAAU,OAAO;AAAQ,MAAG,sBAAsB,OAAO,QAAQ,MAAM;EACjJ;EAAE,OAAO;AACR,MAAG,cAAc;AAAO,QAAK,MAAM,UAAU,GAAG,QAC9C,KAAI,OACF,IAAG,MAAM,OAAO;EAGrB;EAAE,WAAW,MAAM,qBAAqB;GACvC,MAAM,MAAM,GAAG,YAAY,MAAM,oBAAoB;AAAE,QAAK,IAAI,OAC9D,QAAO;AACP,UAAO,IAAI;EACd;EAAE,YAAY,MAAM,qBAAqB;AACxC,OAAI;IACF,IAAI,SAAS,GAAG,WAAW,MAAM,EAAE,SAAS,oBAAqB,EAAC;AAAE,WAAO,OAAO;GACnF,SAAQ,GAAG,CAAE;GAAC,MAAM,MAAM;IAAE,QAAQ;IAAO,QAAQ;IAAO,OAAO;IAAG,MAAM;IAAM,MAAM;IAAM,QAAQ;IAAM,cAAc;IAAO,YAAY;IAAM,cAAc;GAAM;AAAE,OAAI;IAC1K,IAAI,SAAS,GAAG,WAAW,MAAM,EAAE,QAAQ,KAAM,EAAC;AAAE,QAAI,eAAe;AAAM,QAAI,aAAa,OAAO;AAAM,QAAI,eAAe,OAAO;AAAM,QAAI,OAAO,KAAK,SAAS,KAAK;AAAE,aAAS,GAAG,WAAW,MAAM,EAAE,SAAS,oBAAqB,EAAC;AAAE,QAAI,SAAS;AAAM,QAAI,OAAO,OAAO;AAAM,QAAI,SAAS,OAAO;AAAM,QAAI,OAAO,OAAO,KAAK;AAAM,QAAI,SAAS,OAAO,SAAS;GAC3W,SAAQ,GAAG;AACV,QAAI,QAAQ,EAAE;GACf;AAAC,UAAO;EACV;EAAE,WAAW,QAAQ,MAAM,SAAS,UAAU;AAC7C,mBAAgB,UAAU,WAAW,SAAS,GAAG,QAAQ,OAAO;GAAE,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC,SAAS;AAAE,UAAO,MAAM,QAAQ;IAC9H,MAAM,OAAO,MAAM,KAAK;AAAE,SAAK,KAC7B;IAAU,IAAI,UAAU,KAAK,MAAM,QAAQ,KAAK;AAAE,QAAI;AACtD,QAAG,MAAM,QAAQ;IAClB,SAAQ,GAAG;AACV,SAAI,EAAE,SAAS,GACb,OAAM;IACT;aAAS;GACX;AAAC,UAAO;EACV;EAAE,WAAW,QAAQ,MAAM,YAAY,SAAS,UAAU;GACzD,MAAM,OAAO,KAAK,aAAa,UAAU,WAAW,SAAS,GAAG,QAAQ,OAAO,EAAE,KAAK;GAAE,MAAM,OAAO,WAAW,SAAS,SAAS;AAAE,UAAO,GAAG,OAAO,MAAM,KAAK;EACjK;EAAE,eAAe,QAAQ,MAAM,MAAM,SAAS,UAAU,QAAQ;GAC/D,IAAI,OAAO;AAAM,OAAI,QAAQ;AAC3B,oBAAgB,UAAU,WAAW,SAAS,GAAG,QAAQ,OAAO;AAAE,WAAO,OAAO,KAAK,MAAM,QAAQ,KAAK,GAAG;GAC5G;GAAC,MAAM,OAAO,WAAW,SAAS,SAAS;GAAE,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK;AAAE,OAAI,MAAM;AAC1F,eAAW,QAAQ,UAAU;KAC3B,MAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,KAAK,OAAQ,EAAC;AAAE,UAAK,IAAI,IAAI,GAAG,MAAM,KAAK,QAAQ,IAAI,KAAK,EAAE,EAAE,KAAI,KAAK,KAAK,WAAW,EAAE;AAAE,YAAO;IACtI;OAAG,MAAM,MAAM,OAAO,IAAI;IAAE,MAAM,SAAS,GAAG,KAAK,MAAM,IAAI;AAAE,OAAG,MAAM,QAAQ,MAAM,GAAG,KAAK,QAAQ,GAAG,OAAO;AAAE,OAAG,MAAM,OAAO;AAAE,OAAG,MAAM,MAAM,KAAK;GAC1J;EACF;EAAE,aAAa,QAAQ,MAAM,OAAO,QAAQ;GAC3C,MAAM,OAAO,KAAK,aAAa,UAAU,WAAW,SAAS,GAAG,QAAQ,OAAO,EAAE,KAAK;GAAE,MAAM,OAAO,aAAa,SAAS,OAAO;AAAE,MAAG,aAAa,UAAU;GAAI,MAAM,MAAM,GAAG,QAAQ,GAAG,aAAa,SAAS,EAAE;AAAE,MAAG,eAAe,KAAK;IAAE,KAAK,QAAQ;AAC1P,YAAO,WAAW;IACnB;IAAE,MAAM,QAAQ;AACf,SAAI,QAAQ,QAAQ,OAClB,QAAO,GAAG;IAEb;IAAE,KAAK,QAAQ,QAAQ,QAAQ,QAAQ,KAAK;KAC3C,IAAI,YAAY;AAAG,UAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;MAClD,IAAI;AAAQ,UAAI;AACd,gBAAS,OAAO;MACjB,SAAQ,GAAG;AACV,aAAM,IAAI,GAAG,WAAW;MACzB;AAAC,UAAI,qBAAwB,cAAc,EAC1C,OAAM,IAAI,GAAG,WAAW;AACxB,UAAI,WAAW,QAAQ,kBACvB;AAAO;AAAa,aAAO,SAAS,KAAK;KAC5C;AAAC,SAAI,UACJ,QAAO,KAAK,QAAQ,KAAK,KAAK;AAC9B,YAAO;IACV;IAAE,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,KAAK;AAC5C,UAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,IAC1B,KAAI;AACF,aAAO,OAAO,SAAS,GAAG;KAC3B,SAAQ,GAAG;AACV,YAAM,IAAI,GAAG,WAAW;KACzB;AACD,SAAI,OACJ,QAAO,KAAK,QAAQ,OAAO,KAAK,QAAQ,KAAK,KAAK;AAClD,YAAO;IACV;GAAE,EAAC;AAAE,UAAO,GAAG,MAAM,MAAM,MAAM,IAAI;EACvC;EAAE,cAAc,KAAK;AACpB,OAAI,IAAI,YAAY,IAAI,YAAY,IAAI,QAAQ,IAAI,SAClD,QAAO;AAAM,OAAI,WAAW,eAC5B,OAAM,mMAAmM;OAEzM,KAAI;AACF,QAAI,WAAW,WAAW,IAAI,IAAI;GACnC,SAAQ,GAAG;AACV,UAAM,IAAI,GAAG,WAAW;GACzB;EAEJ;EAAE,eAAe,QAAQ,MAAM,KAAK,SAAS,UAAU;GACtD,MAAM,eAAe;IACnB,cAAc;IAAO,SAAS,CAAE;IAAE,IAAI,KAAK;AACzC,SAAI,MAAM,KAAK,SAAS,KAAK,MAAM,EACjC;KACA,MAAM,cAAc,MAAM,KAAK;KAAW,MAAM,WAAW,MAAM,KAAK,YAAY;AAAG,YAAO,KAAK,OAAO,SAAS,CAAC;IACrH;IAED,cAAc,QAAQ;AACpB,UAAK,SAAS;IACf;IAED,cAAc;KACZ,MAAM,MAAM,IAAI;AAAkB,SAAI,KAAK,QAAQ,KAAK,MAAM;AAAE,SAAI,KAAK,KAAK;AAAE,WAAM,IAAI,UAAU,OAAO,IAAI,SAAS,OAAO,IAAI,WAAW,KAC5I,QAAO,gBAAgB,IAAI,YAAY,IAAI,OAAO,EAAE;KAAE,IAAI,aAAa,OAAO,IAAI,kBAAkB,iBAAiB,CAAC;KAAE,IAAI;KAAQ,MAAM,kBAAkB,SAAS,IAAI,kBAAkB,gBAAgB,KAAK,WAAW;KAAS,MAAM,YAAY,SAAS,IAAI,kBAAkB,mBAAmB,KAAK,WAAW;KAAQ,IAAI,YAAY,OAAO;AAAM,UAAK,eAClW,aAAY;KAAY,MAAM,QAAQ,CAAC,MAAM,OAAO;AACpD,UAAI,OAAO,GACT,QAAO,iBAAiB,KAAK,IAAI,GAAG,0BAA0B;AAAE,UAAI,KAAK,aAAa,EACtF,QAAO,OAAO,WAAW,qCAAqC;MAAE,MAAMG,QAAM,IAAI;AAAkB,YAAI,KAAK,OAAO,KAAK,MAAM;AAAE,UAAI,eAAe,UAClJ,OAAI,iBAAiB,UAAU,QAAQ,KAAK,GAAG,GAAG,EAAE;AAAE,YAAI,eAAe;AAAe,UAAIA,MAAI,iBAChG,OAAI,iBAAiB,qCAAqC;AAC3D,YAAI,KAAK,KAAK;AAAE,YAAMA,MAAI,UAAU,OAAOA,MAAI,SAAS,OAAOA,MAAI,WAAW,KAC7E,QAAO,gBAAgB,IAAI,YAAYA,MAAI,OAAO,EAAE;AAAE,UAAIA,MAAI,oBAC9D,QAAO,IAAI,WAAWA,MAAI,YAAY,CAAE;AACxC,aAAO,mBAAmBA,MAAI,gBAAgB,IAAI,KAAK;KAC1D;KAAE,MAAM,YAAY;AAAM,eAAU,cAAc,CAAC,aAAa;MAC/D,MAAM,QAAQ,WAAW;MAAW,IAAI,OAAO,WAAW,KAAK,YAAY;AAAG,YAAM,KAAK,IAAI,KAAK,aAAa,EAAE;AAAE,iBAAW,UAAU,OAAO,aAAa,YAC1J,WAAU,OAAO,YAAY,MAAM,OAAO,IAAI;AAC9C,iBAAW,UAAU,OAAO,aAAa,YACzC,OAAM,gBAAgB;AAAE,aAAO,UAAU,OAAO;KACnD,EAAC;AAAE,SAAI,aAAa,YAAY;AAC/B,kBAAY,aAAa;AAAG,mBAAa,KAAK,OAAO,EAAE,CAAC;AAAQ,kBAAY;AAAY,UAAI,8EAA8E;KAC3K;AAAC,UAAK,UAAU;AAAY,UAAK,aAAa;AAAW,UAAK,cAAc;IAC9E;IAED,IAAI,SAAS;AACX,UAAK,KAAK,YACR,MAAK,aAAa;AAClB,YAAO,KAAK;IACf;IAED,IAAI,YAAY;AACd,UAAK,KAAK,YACR,MAAK,aAAa;AAClB,YAAO,KAAK;IACf;GACF;AAAC,OAAI,WAAW,gBAAgB;AAC/B,SAAK,sBACH,OAAM,sHAAsH;IAAE,MAAM,YAAY,IAAI;IAAkB,IAAI,aAAa;KAAE,UAAU;KAAO,UAAU;IAAW;GAClO,OACC,IAAI,aAAa;IAAE,UAAU;IAAO;GAAK;GACzC,MAAM,OAAO,GAAG,WAAW,QAAQ,MAAM,YAAY,SAAS,SAAS;AAAE,OAAI,WAAW,SACxF,MAAK,WAAW,WAAW;YAClB,WAAW,KAAK;AACzB,SAAK,WAAW;AAAM,SAAK,MAAM,WAAW;GAC7C;UAAO,iBAAiB,MAAM,EAAE,WAAW,EAAE,MAAM;AAClD,WAAO,KAAK,SAAS;GACtB,EAAE,EAAE,EAAC;GAAE,MAAM,aAAa,CAAE;AAAE,QAAK,MAAM,CAAC,KAAK,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,CACpF,YAAW,OAAO,CAAC,GAAG,SAAS;AAC7B,OAAG,cAAc,KAAK;AAAE,WAAO,GAAG,GAAG,KAAK;GAC3C;GACD,SAAS,YAAY,QAAQ,QAAQ,QAAQ,QAAQ,UAAU;IAC/D,MAAM,WAAW,OAAO,KAAK;AAAU,QAAI,YAAY,SAAS,OAC9D,QAAO;IAAG,MAAM,OAAO,KAAK,IAAI,SAAS,SAAS,UAAU,OAAO;AAAE,QAAI,SAAS,MAClF,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IACxB,QAAO,SAAS,KAAK,SAAS,WAAW;QAG3C,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IACxB,QAAO,SAAS,KAAK,SAAS,IAAI,WAAW,EAAE;AAEjD,WAAO;GACV;cAAW,OAAO,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,aAAa;AAC/D,OAAG,cAAc,KAAK;AAAE,WAAO,YAAY,QAAQ,QAAQ,QAAQ,QAAQ,SAAS;GACrF;AAAE,cAAW,OAAO,CAAC,QAAQ,QAAQ,UAAU,MAAM,UAAU;AAC9D,OAAG,cAAc,KAAK;IAAE,MAAM,MAAM,UAAU,OAAO;AAAE,SAAK,IAC1D,OAAM,IAAI,GAAG,WAAW;AACzB,gBAAY,QAAQ,OAAO,KAAK,QAAQ,SAAS;AAAE,WAAO;KAAE;KAAK,WAAW;IAAM;GACpF;AAAE,QAAK,aAAa;AAAY,UAAO;EACzC;CAAE;CAAE,MAAM,eAAe,CAAC,KAAK,gBAAgB,cAAc;AAC5D,WAAS;AAAG,OAAK,IACf,QAAO;EAAI,MAAM,MAAM,cAAc,QAAQ,KAAK,gBAAgB,UAAU;AAAE,SAAO,YAAY,OAAO,OAAO,SAAS,QAAQ,GAAG,QAAQ,EAAE,CAAC;CACjJ;CAAE,IAAI,WAAW;EAAE,YAAY,OAAO,MAAM,YAAY;AACvD,OAAI,KAAK,MAAM,KAAK,CAClB,QAAO;GACP,IAAI;AAAK,OAAI,UAAU,KACvB,OAAM,GAAG,KAAK;QACT;IACL,MAAM,YAAY,SAAS,gBAAgB,MAAM;AAAE,UAAM,UAAU;GACpE;AAAC,OAAI,KAAK,UAAU,GAAG;AACtB,SAAK,WACH,OAAM,IAAI,GAAG,WAAW;AACxB,WAAO;GACV;AAAC,WAAQ,EAAE,IAAI,GAAG,KAAK;EACzB;EAAE,UAAU,KAAK,MAAM;AACtB,WAAQ,QAAQ,MAAM,KAAK,KAAK;AAAK,WAAQ,MAAM,MAAM,MAAM,KAAK,KAAK;AAAM,WAAQ,MAAM,MAAM,MAAM,KAAK,KAAK;AAAO,WAAQ,MAAM,OAAO,MAAM,KAAK,KAAK;AAAK,WAAQ,MAAM,OAAO,MAAM,KAAK,KAAK;AAAK,WAAQ,MAAM,OAAO,MAAM,KAAK,KAAK;AAAM,UAAO,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,KAAK;AAAE,UAAO,MAAM,OAAO,MAAM,KAAK;AAAM,UAAO,MAAM,OAAO,MAAM,KAAK,KAAK;GAAQ,MAAM,QAAQ,KAAK,MAAM,SAAS;GAAE,MAAM,QAAQ,KAAK,MAAM,SAAS;GAAE,MAAM,QAAQ,KAAK,MAAM,SAAS;AAAE,UAAO,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,MAAM,QAAQ,IAAI,CAAC;AAAE,WAAQ,MAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,MAAM;AAAK,UAAO,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,MAAM,QAAQ,IAAI,CAAC;AAAE,WAAQ,MAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,MAAM;AAAK,UAAO,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,MAAM,QAAQ,IAAI,CAAC;AAAE,WAAQ,MAAM,OAAO,MAAM,KAAK,QAAQ,MAAM,MAAM;AAAK,UAAO,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,IAAI;AAAE,UAAO;EAC54B;EAAE,YAAY,KAAK,OAAO;AACzB,WAAQ,MAAM,MAAM,MAAM,KAAK,MAAM;AAAO,WAAQ,MAAM,OAAO,MAAM,KAAK,MAAM;AAAO,UAAO,MAAM,MAAM,MAAM,KAAK,OAAO,MAAM,OAAO;AAAE,UAAO,MAAM,OAAO,MAAM,KAAK,OAAO,MAAM,MAAM;AAAE,UAAO,MAAM,OAAO,MAAM,KAAK,OAAO,MAAM,OAAO;AAAE,UAAO,MAAM,OAAO,MAAM,KAAK,OAAO,MAAM,MAAM;AAAE,UAAO,MAAM,OAAO,MAAM,KAAK,OAAO,MAAM,MAAM;AAAE,WAAQ,MAAM,OAAO,MAAM,KAAK,MAAM;AAAM,WAAQ,MAAM,OAAO,MAAM,KAAK,MAAM;AAAO,WAAQ,MAAM,OAAO,MAAM,KAAK,MAAM;EAC9d;EAAE,QAAQ,MAAM,QAAQ,KAAK,OAAO,QAAQ;AAC3C,QAAK,GAAG,OAAO,OAAO,KAAK,KAAK,CAC9B,OAAM,IAAI,GAAG,WAAW;AACxB,OAAI,QAAQ,EACZ,QAAO;GACP,MAAM,SAAS,OAAO,MAAM,MAAM,OAAO,IAAI;AAAE,MAAG,MAAM,QAAQ,QAAQ,QAAQ,KAAK,MAAM;EAC9F;EAAE,gBAAgB,IAAI;GACrB,MAAM,SAAS,GAAG,iBAAiB,GAAG;AAAE,UAAO;EAChD;EAAE;EAAoB,OAAO,KAAK;GACjC,MAAM,MAAM,aAAa,IAAI;AAAE,UAAO;EACvC;CAAE;CAAE,MAAM,YAAY;CAAkB,MAAM,YAAY;CAAmB,MAAM,qBAAqB,SAAO,MAAM,aAAa,MAAM,YAAY,OAAO,MAAM,OAAO,IAAI;CAAE,SAAS,iBAAiB,MAAM,MAAM;AACnN,YAAU;AAAG,MAAI;AACf,UAAO,SAAS,OAAO,KAAK;AAAE,MAAG,MAAM,MAAM,KAAK;AAAE,UAAO;EAC5D,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,qBAAqB,OAAO,MAAM,OAAO,OAAO;AACzD,YAAU;AAAG,MAAI;AACf,UAAO,SAAS,OAAO,KAAK;AAAE,UAAO,SAAS,YAAY,OAAO,KAAK;AAAE,OAAI,QAAQ,GAClF,QAAO;GACP,MAAM,SAAS,GAAG,WAAW,MAAM,EAAE,QAAQ,KAAM,EAAC;GAAE,MAAM,OAAO,OAAO;AAAM,QAAK,KACrF,QAAO;GACP,IAAI,QAAQ;AAAI,OAAI,QAAQ,EAC5B,UAAS;AAAK,OAAI,QAAQ,EAC1B,UAAS;AAAK,OAAI,QAAQ,EAC1B,UAAS;AAAK,OAAI,SAAS,GAAG,gBAAgB,MAAM,MAAM,CAC1D,QAAO;AACP,UAAO;EACV,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,kBAAkB,IAAI,MAAM;AACrC,MAAI;AACF,MAAG,OAAO,IAAI,KAAK;AAAE,UAAO;EAC7B,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,MAAM,oBAAoB,MAAM;EAChC,MAAM,MAAM,QAAQ,SAAS,YAAY,MAAM;AAAI,WAAS,WAAW;AAAG,SAAO;CAClF;CAAE,MAAM,oBAAoB;CAAmB,SAAS,mBAAmB,IAAI,KAAK,SAAS;AAC5F,eAAa;AAAG,WAAS,UAAU;AAAS,MAAI;GAC9C,MAAM,SAAS,SAAS,gBAAgB,GAAG;AAAE,WAAQ,KAAR;IAC3C,KAAK,GAAE;KAAE,IAAI,MAAM,mBAAmB;AAAE,SAAI,MAAM,EAChD,QAAO;AACP,YAAO,GAAG,QAAQ,KAClB;KACA,IAAI;AAAW,iBAAY,GAAG,UAAU,QAAQ,IAAI;AAAE,YAAO,UAAU;IAAI;IAAC,KAAK;IAAE,KAAK,EAAE,QAAO;IAAG,KAAK,EAAE,QAAO,OAAO;IAAO,KAAK,GAAE;KAAE,IAAI,MAAM,mBAAmB;AAAE,YAAO,SAAS;AAAK,YAAO;IAAG;IAAC,KAAK,IAAG;KAAE,IAAI,MAAM,mBAAmB;KAAE,MAAM,SAAS;AAAG,YAAO,MAAM,WAAW,MAAM,KAAK;AAAG,YAAO;IAAG;IAAC,KAAK;IAAG,KAAK,GAAG,QAAO;GAC9U;AAAC,UAAO;EACV,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,qBAAqB,IAAI;AAClC,MAAI;GACF,MAAM,SAAS,SAAS,gBAAgB,GAAG;AAAE,UAAO;EACrD,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,mBAAmB,IAAI,KAAK;AACrC,WAAS;AAAG,MAAI;AACd,UAAO,SAAS,UAAU,KAAK,GAAG,MAAM,GAAG,CAAC;EAC7C,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,uBAAuB,IAAI,QAAQ;AAC5C,WAAS,mBAAmB,OAAO;AAAE,MAAI;AACvC,OAAI,MAAM,OAAO,CACf,QAAO;AAAK,MAAG,UAAU,IAAI,OAAO;AAAE,UAAO;EAChD,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,MAAM,eAAe,CAAC,KAAK,QAAQ,oBAAoB,kBAAkB,KAAK,QAAQ,QAAQ,gBAAgB;CAAE,SAAS,kBAAkB,KAAK,MAAM;AACtJ,WAAS;AAAG,YAAU;AAAG,MAAI;AAC3B,OAAI,SAAS,EACX,QAAO;GAAK,MAAM,MAAM,GAAG,KAAK;GAAE,MAAM,mBAAmB,gBAAgB,IAAI,GAAG;AAAG,OAAI,OAAO,iBAChG,QAAO;AAAK,gBAAa,KAAK,KAAK,KAAK;AAAE,UAAO;EACpD,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,sBAAsB,IAAI,MAAM,OAAO;AAChD,YAAU;AAAG,aAAW;AAAG,MAAI;GAC7B,MAAM,SAAS,SAAS,gBAAgB,GAAG;AAAE,UAAO,aAAa,GAAG,QAAQ,OAAO,KAAK;GAAE,MAAM,cAAc;GAAK,IAAI,MAAM;GAAG,MAAM,MAAM,GAAG,OAAO,QAAQ,GAAG,EAAE;GAAE,MAAM,WAAW,KAAK,MAAM,MAAM,YAAY;GAAE,MAAM,SAAS,KAAK,IAAI,OAAO,SAAS,QAAQ,WAAW,KAAK,MAAM,QAAQ,YAAY,CAAC;AAAE,QAAK,IAAI,MAAM,UAAU,MAAM,QAAQ,OAAO;IAC9V,IAAI;IAAI,IAAI;IAAM,MAAM,OAAO,OAAO,SAAS;AAAM,QAAI,SAAS,KAAK;AACrE,UAAK,OAAO,KAAK;AAAI,YAAO;IAC7B,WAAU,SAAS,MAAM;KACxB,MAAM,SAAS,GAAG,WAAW,OAAO,MAAM,EAAE,QAAQ,KAAM,EAAC;AAAE,UAAK,OAAO,KAAK;AAAI,YAAO;IAC1F,OAAM;KACL,IAAI;AAAO,SAAI;AACb,cAAQ,GAAG,WAAW,OAAO,MAAM,KAAK;KACzC,SAAQ,GAAG;AACV,UAAI,GAAG,UAAU,GACf;AACA,YAAM;KACT;UAAK,MAAM;AAAI,YAAO,GAAG,SAAS,MAAM,KAAK,GAAG,IAAI,GAAG,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG,OAAO,MAAM,KAAK,GAAG,KAAK;IAC9G;WAAO,OAAO,QAAQ,MAAM,KAAK,OAAO,GAAG;AAAE,WAAO,OAAO,MAAM,MAAM,MAAM,KAAK,QAAQ,MAAM,KAAK,YAAY;AAAE,WAAO,OAAO,MAAM,OAAO,MAAM,KAAK;AAAK,UAAM,OAAO,MAAM,OAAO,KAAK;AAAM,iBAAa,MAAM,OAAO,MAAM,IAAI,IAAI;AAAE,WAAO;GACtP;MAAG,OAAO,QAAQ,MAAM,aAAa,EAAE;AAAE,UAAO;EAClD,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,iBAAiB,IAAI,IAAI,SAAS;AAC3C,eAAa;AAAG,WAAS,UAAU;AAAS,MAAI;GAC9C,MAAM,SAAS,SAAS,gBAAgB,GAAG;AAAE,WAAQ,IAAR;IAC3C,KAAK,OAAM;AAAE,UAAK,OAAO,IACvB,QAAO;AAAK,YAAO;IAAG;IAAC,KAAK,OAAM;AAAE,UAAK,OAAO,IAChD,QAAO;AAAK,SAAI,OAAO,IAAI,IAAI,cAAc;MAC7C,MAAM,UAAU,OAAO,IAAI,IAAI,aAAa,OAAO;MAAE,IAAI,OAAO,mBAAmB;AAAE,aAAO,SAAS,MAAM,KAAK,QAAQ,WAAW;AAAG,aAAO,OAAO,MAAM,MAAM,KAAK,QAAQ,WAAW;AAAG,aAAO,OAAO,MAAM,MAAM,KAAK,QAAQ,WAAW;AAAG,aAAO,OAAO,OAAO,MAAM,KAAK,QAAQ,WAAW;AAAG,WAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAC5T,OAAM,OAAO,IAAI,OAAO,KAAK,QAAQ,KAAK,MAAM;AAChD,aAAO;KACV;AAAC,YAAO;IAAG;IAAC,KAAK;IAAM,KAAK;IAAM,KAAK,OAAM;AAAE,UAAK,OAAO,IAC1D,QAAO;AAAK,YAAO;IAAG;IAAC,KAAK;IAAM,KAAK;IAAM,KAAK,OAAM;AAAE,UAAK,OAAO,IACtE,QAAO;AAAK,SAAI,OAAO,IAAI,IAAI,cAAc;MAC7C,IAAI,OAAO,mBAAmB;MAAE,MAAM,UAAU,OAAO,SAAS,MAAM;MAAI,MAAM,UAAU,OAAO,OAAO,MAAM,MAAM;MAAI,MAAM,UAAU,OAAO,OAAO,MAAM,MAAM;MAAI,MAAM,UAAU,OAAO,OAAO,OAAO,MAAM;MAAI,MAAM,OAAO,CAAE;AAAE,WAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAC5P,MAAK,KAAK,MAAM,OAAO,IAAI,OAAO,GAAG;AACrC,aAAO,OAAO,IAAI,IAAI,aAAa,OAAO,KAAK,IAAI;OAAE;OAAS;OAAS;OAAS;OAAS;MAAM,EAAC;KACnG;AAAC,YAAO;IAAG;IAAC,KAAK,OAAM;AAAE,UAAK,OAAO,IACpC,QAAO;KAAK,IAAI,OAAO,mBAAmB;AAAE,YAAO,SAAS,MAAM,KAAK;AAAG,YAAO;IAAG;IAAC,KAAK,OAAM;AAAE,UAAK,OAAO,IAC9G,QAAO;AAAK,YAAO;IAAK;IAAC,KAAK;IAAM,KAAK,OAAM;KAAE,IAAI,OAAO,mBAAmB;AAAE,YAAO,GAAG,MAAM,QAAQ,IAAI,KAAK;IAAE;IAAC,KAAK,OAAM;AAAE,UAAK,OAAO,IAC9I,QAAO;AAAK,SAAI,OAAO,IAAI,IAAI,kBAAkB;MACjD,MAAM,UAAU,OAAO,IAAI,IAAI,iBAAiB,OAAO,IAAI;MAAE,IAAI,OAAO,mBAAmB;AAAE,aAAO,SAAS,MAAM,KAAK,QAAQ;AAAI,aAAO,OAAO,MAAM,MAAM,KAAK,QAAQ;KAC5K;AAAC,YAAO;IAAG;IAAC,KAAK,OAAM;AAAE,UAAK,OAAO,IACpC,QAAO;AAAK,YAAO;IAAG;IAAC,KAAK,OAAM;AAAE,UAAK,OAAO,IAChD,QAAO;AAAK,YAAO;IAAG;IAAC,QAAQ,QAAO;GACzC;EACF,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,mBAAmB,MAAM,KAAK;AACvC,YAAU;AAAG,WAAS;AAAG,MAAI;AAC3B,UAAO,SAAS,OAAO,KAAK;AAAE,UAAO,SAAS,UAAU,KAAK,GAAG,MAAM,KAAK,CAAC;EAC7E,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,mBAAmB,OAAO,MAAM,MAAM;AAC/C,YAAU;AAAG,MAAI;AACf,UAAO,SAAS,OAAO,KAAK;AAAE,UAAO,SAAS,YAAY,OAAO,KAAK;AAAE,MAAG,MAAM,MAAM,MAAM,EAAE;AAAE,UAAO;EACzG,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,sBAAsB,OAAO,MAAM,KAAK,OAAO;AACxD,YAAU;AAAG,WAAS;AAAG,MAAI;AAC3B,UAAO,SAAS,OAAO,KAAK;GAAE,MAAM,WAAW,QAAQ;GAAK,MAAM,aAAa,QAAQ;AAAM,WAAQ,QAAQ;AAAO,UAAO,SAAS,YAAY,OAAO,MAAM,WAAW;AAAE,UAAO,SAAS,UAAU,KAAK,WAAW,GAAG,MAAM,KAAK,GAAG,GAAG,KAAK,KAAK,CAAC;EACpP,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,kBAAkB,OAAO,MAAM,OAAO,SAAS;AACxD,YAAU;AAAG,eAAa;AAAG,WAAS,UAAU;AAAS,MAAI;AAC3D,UAAO,SAAS,OAAO,KAAK;AAAE,UAAO,SAAS,YAAY,OAAO,KAAK;GAAE,MAAM,OAAO,UAAU,mBAAmB,GAAG;AAAG,UAAO,GAAG,KAAK,MAAM,OAAO,KAAK,CAAC;EAC3J,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,sBAAsB,OAAO,MAAM,KAAK,SAAS;AAC1D,YAAU;AAAG,WAAS;AAAG,eAAa;AAAG,MAAI;AAC3C,UAAO,SAAS,OAAO,KAAK;AAAE,UAAO,SAAS,YAAY,OAAO,KAAK;AAAE,OAAI,WAAW,EACrF,QAAO;GAAK,MAAM,MAAM,GAAG,SAAS,KAAK;GAAE,MAAM,MAAM,KAAK,IAAI,SAAS,gBAAgB,IAAI,CAAC;GAAE,MAAM,UAAU,MAAM,MAAM,QAAQ;AAAI,gBAAa,KAAK,KAAK,UAAU,EAAE;AAAE,SAAM,MAAM,QAAQ,KAAK;AAAS,UAAO;EACzN,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,oBAAoB,UAAU,SAAS,UAAU,SAAS;AACnE,eAAa;AAAG,eAAa;AAAG,MAAI;AAClC,aAAU,SAAS,OAAO,QAAQ;AAAE,aAAU,SAAS,OAAO,QAAQ;AAAE,aAAU,SAAS,YAAY,UAAU,QAAQ;AAAE,aAAU,SAAS,YAAY,UAAU,QAAQ;AAAE,MAAG,OAAO,SAAS,QAAQ;AAAE,UAAO;EACnN,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,iBAAiB,MAAM;AAChC,YAAU;AAAG,MAAI;AACf,UAAO,SAAS,OAAO,KAAK;AAAE,MAAG,MAAM,KAAK;AAAE,UAAO;EACtD,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,kBAAkB,MAAM,KAAK;AACtC,YAAU;AAAG,WAAS;AAAG,MAAI;AAC3B,UAAO,SAAS,OAAO,KAAK;AAAE,UAAO,SAAS,UAAU,KAAK,GAAG,KAAK,KAAK,CAAC;EAC5E,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,sBAAsB,MAAM,QAAQ;AAC7C,YAAU;AAAG,WAAS,mBAAmB,OAAO;AAAE,MAAI;AACpD,OAAI,MAAM,OAAO,CACf,QAAO;AAAK,UAAO,SAAS,OAAO,KAAK;AAAE,MAAG,SAAS,MAAM,OAAO;AAAE,UAAO;EAC/E,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,oBAAoB,OAAO,MAAM,OAAO;AACjD,YAAU;AAAG,MAAI;AACf,UAAO,SAAS,OAAO,KAAK;AAAE,UAAO,SAAS,YAAY,OAAO,KAAK;AAAE,QAAK,MAC3E,IAAG,OAAO,KAAK;YACN,UAAU,IACnB,IAAG,MAAM,KAAK;OAEd,QAAO;AACP,UAAO;EACV,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,MAAM,aAAa,MAAM,MAAM,GAAG;CAAE,IAAI,0BAA0B;CAAG,MAAM,uCAAuC,MAAM;AACxH,kBAAgB;AAAO,4BAA0B;CAClD;CAAE,MAAM,aAAa,UAAQ,OAAO,MAAM,MAAM,OAAO,QAAQ,KAAK,OAAO,QAAQ;CAAI,MAAM,6BAA6B;EAAC;EAAG;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;CAAI;CAAE,MAAM,gCAAgC;EAAC;EAAG;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;CAAI;CAAE,MAAM,eAAe,CAAC,SAAS;EAChT,MAAM,OAAO,WAAW,KAAK,aAAa,CAAC;EAAE,MAAM,sBAAsB,OAAO,6BAA6B;EAA+B,MAAM,OAAO,oBAAoB,KAAK,UAAU,IAAI,KAAK,SAAS,GAAG;AAAG,SAAO;CAC5N;CAAE,SAAS,eAAe,MAAM,OAAO;AACtC,SAAO,mBAAmB,KAAK;AAAE,aAAW;EAAG,MAAM,OAAO,IAAI,KAAK,OAAO;AAAM,SAAO,UAAU,MAAM,KAAK,KAAK,YAAY;AAAE,SAAO,QAAQ,MAAM,MAAM,KAAK,KAAK,YAAY;AAAE,SAAO,QAAQ,MAAM,MAAM,KAAK,KAAK,UAAU;AAAE,SAAO,QAAQ,OAAO,MAAM,KAAK,KAAK,SAAS;AAAE,SAAO,QAAQ,OAAO,MAAM,KAAK,KAAK,UAAU;AAAE,SAAO,QAAQ,OAAO,MAAM,KAAK,KAAK,aAAa,GAAG;AAAM,SAAO,QAAQ,OAAO,MAAM,KAAK,KAAK,QAAQ;EAAE,MAAM,OAAO,aAAa,KAAK,GAAG;AAAG,SAAO,QAAQ,OAAO,MAAM,KAAK;AAAM,SAAO,QAAQ,OAAO,MAAM,OAAO,KAAK,mBAAmB,GAAG;EAAK,MAAM,QAAQ,IAAI,KAAK,KAAK,aAAa,EAAE,GAAG;EAAI,MAAM,eAAe,IAAI,KAAK,KAAK,aAAa,EAAE,GAAG,GAAG,mBAAmB;EAAE,MAAM,eAAe,MAAM,mBAAmB;EAAE,MAAM,OAAO,gBAAgB,gBAAgB,KAAK,mBAAmB,IAAI,KAAK,IAAI,cAAc,aAAa,IAAI;AAAG,SAAO,QAAQ,OAAO,MAAM,KAAK;CACx4B;CAAC,SAAS,UAAU,KAAK,MAAM,OAAO,IAAI,QAAQ,WAAW,MAAM;AAClE,WAAS;AAAG,WAAS,mBAAmB,OAAO;AAAE,iBAAe;AAAG,YAAU;AAAG,MAAI;GAClF,MAAM,SAAS,SAAS,gBAAgB,GAAG;GAAE,MAAM,MAAM,GAAG,KAAK,QAAQ,KAAK,QAAQ,MAAM,MAAM;GAAE,MAAM,MAAM,IAAI;AAAK,UAAO,cAAc,MAAM,KAAK,IAAI;AAAW,WAAQ,SAAS,MAAM,KAAK;AAAK,UAAO;EACjN,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,SAAS,YAAY,MAAM,KAAK,MAAM,OAAO,IAAI,QAAQ;AACzD,YAAU;AAAG,WAAS;AAAG,WAAS,mBAAmB,OAAO;AAAE,MAAI;GAChE,MAAM,SAAS,SAAS,gBAAgB,GAAG;AAAE,OAAI,OAAO,EACtD,UAAS,QAAQ,MAAM,QAAQ,KAAK,OAAO,OAAO;EAErD,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,WAAQ,EAAE;EACtB;CACF;CAAC,MAAM,SAAS,CAAE;CAAE,MAAM,kBAAkB,CAAC,MAAM;AAClD,MAAI,aAAa,cAAc,KAAK,SAClC,QAAO;AACR,QAAM,GAAG,EAAE;CACb;CAAE,MAAM,mBAAmB,MAAM,iBAAiB,0BAA0B;CAAG,MAAM,aAAa,CAAC,SAAS;AAC3G,eAAa;AAAM,OAAK,kBAAkB,EAAE;AAC1C,UAAO,SAAS,KAAK;AAAE,WAAQ;EAChC;QAAM,MAAM,IAAI,WAAW,MAAM;CACnC;CAAE,MAAM,SAAS,CAAC,QAAQ,aAAa;AACtC,eAAa;AAAQ,aAAW,OAAO;CACxC;CAAE,MAAM,QAAQ;CAAQ,MAAM,YAAY,MAAM;AAC/C,OAAK,kBAAkB,CACrB,KAAI;AACF,SAAM,WAAW;EAClB,SAAQ,GAAG;AACV,mBAAgB,EAAE;EACnB;CAEJ;CAAE,MAAM,mBAAmB,CAAC,SAAS;AACpC,MAAI,MACF;AACA,MAAI;AACJ,UAAO,MAAM;EACd,SAAQ,GAAG;AACV,mBAAgB,EAAE;EACnB,UAAS;AACR,cAAW;EACZ;CACF;CAAE,MAAM,sBAAsB,MAAM,YAAY,KAAK;CAAE,MAAM,iBAAiB,CAAC,OAAO,eAAe;AACpG,MAAI,OAAO,QAAQ;AACjB,gBAAa,OAAO,OAAO,GAAG;AAAE,UAAO,OAAO;EAC/C;AAAC,OAAK,WACL,QAAO;EAAG,MAAM,KAAK,WAAW,MAAM;AACtC,UAAO,OAAO;AAAQ,oBAAiB,MAAM,qBAAqB,OAAO,qBAAqB,CAAC,CAAC;EACjG,GAAE,WAAW;AAAE,SAAO,SAAS;GAAE;GAAI;EAAY;AAAE,SAAO;CAC5D;CAAE,MAAM,aAAa,SAAU,UAAU,UAAU,UAAU,UAAU;AACtE,gBAAc;AAAG,gBAAc;AAAG,gBAAc;AAAG,gBAAc;EAAG,MAAM,cAAc,AAAC,IAAI,OAAQ,aAAa;EAAE,MAAM,SAAS,IAAI,KAAK,aAAa,GAAG;EAAI,MAAM,SAAS,IAAI,KAAK,aAAa,GAAG;EAAI,MAAM,eAAe,OAAO,mBAAmB;EAAE,MAAM,eAAe,OAAO,mBAAmB;EAAE,MAAM,oBAAoB,KAAK,IAAI,cAAc,aAAa;AAAE,UAAQ,aAAa,MAAM,KAAK,oBAAoB;AAAI,SAAO,aAAa,MAAM,KAAK,OAAO,gBAAgB,aAAa;EAAE,MAAM,cAAc,CAAC,mBAAmB;GACjhB,MAAM,OAAO,kBAAkB,IAAI,MAAM;GAAK,MAAM,YAAY,KAAK,IAAI,eAAe;GAAE,MAAM,QAAQ,OAAO,KAAK,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI;GAAE,MAAM,UAAU,OAAO,YAAY,GAAG,CAAC,SAAS,GAAG,IAAI;AAAE,WAAQ,KAAK,KAAK,EAAE,MAAM,EAAE,QAAQ;EAC3P;EAAE,MAAM,aAAa,YAAY,aAAa;EAAE,MAAM,aAAa,YAAY,aAAa;AAAE,MAAI,eAAe,cAAc;AAC9H,gBAAa,YAAY,UAAU,GAAG;AAAE,gBAAa,YAAY,UAAU,GAAG;EAC/E,OAAM;AACL,gBAAa,YAAY,UAAU,GAAG;AAAE,gBAAa,YAAY,UAAU,GAAG;EAC/E;CACF;CAAE,MAAM,uBAAuB,MAAM,KAAK,KAAK;CAAE,MAAM,iBAAiB;CAAG,MAAM,iBAAiB,cAAY,YAAY,KAAK,YAAY;CAAG,SAAS,gBAAgB,QAAQ,mBAAmB,OAAO;AACxM,sBAAoB,mBAAmB,kBAAkB;AAAE,aAAW;AAAG,OAAK,eAAe,OAAO,CAClG,QAAO;EACP,IAAI;AAAK,MAAI,WAAW,EACxB,OAAM,sBAAsB;WACnB,eACT,OAAM,qBAAqB;MAE3B,QAAO;EACP,MAAM,OAAO,KAAK,MAAM,MAAM,MAAM,IAAI;AAAE,SAAO,UAAU,MAAM,KAAK,OAAO,KAAK;AAAE,SAAO;CAC9F;CAAC,MAAM,aAAa,MAAM;CAAY,MAAM,aAAa,CAAC,SAAS;EAClE,MAAM,cAAc,WAAW,OAAO;EAAY,MAAM,SAAS,OAAO,cAAc,SAAS,QAAQ;AAAG,MAAI;AAC5G,cAAW,KAAK,MAAM;AAAE,sBAAmB;AAAE,UAAO;EACrD,SAAQ,GAAG,CAAE;CACf;CAAE,SAAS,wBAAwB,eAAe;AACjD,qBAAmB;EAAG,MAAM,UAAU,OAAO;EAAQ,MAAM,cAAc,YAAY;AAAE,MAAI,gBAAgB,YACzG,QAAO;AACP,OAAK,IAAI,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG;GAClD,IAAI,oBAAoB,WAAW,IAAI,KAAM;AAAU,uBAAoB,KAAK,IAAI,mBAAmB,gBAAgB,UAAU;GAAE,MAAM,UAAU,KAAK,IAAI,aAAa,YAAY,KAAK,IAAI,eAAe,kBAAkB,EAAE,MAAM,CAAC;GAAE,MAAM,cAAc,WAAW,QAAQ;AAAE,OAAI,YACrR,QAAO;EAEV;AAAC,SAAO;CACV;CAAC,MAAM,MAAM,CAAE;CAAE,MAAM,oBAAoB,MAAM,eAAe;CAAkB,MAAM,gBAAgB,MAAM;AAC7G,OAAK,cAAc,SAAS;GAC1B,MAAM,QAAQ,EAAE,CAAC,WAAW,WAAW,YAAY,KAAK,QAAQ,KAAK,IAAI,CAAC;GAAS,MAAM,MAAM;IAAE,MAAM;IAAY,SAAS;IAAY,MAAM;IAAK,KAAK;IAAK,MAAM;IAAkB,MAAM;IAAM,GAAG,mBAAmB;GAAE;AAAE,QAAK,IAAI,KAAK,IACvO,KAAI,IAAI,cACN,QAAO,IAAI;OAAS,KAAI,KAAK,IAAI;GACnC,MAAM,UAAU,CAAE;AAAE,QAAK,IAAI,KAAK,IAClC,SAAQ,MAAM,EAAE,EAAE,GAAG,IAAI,GAAG,EAAE;AAC/B,iBAAc,UAAU;EAC1B;AAAC,SAAO,cAAc;CACxB;CAAE,SAAS,aAAa,WAAW,aAAa;AAC/C,iBAAe;AAAG,mBAAiB;EAAG,IAAI,UAAU;EAAG,IAAI,OAAO;AAAG,OAAK,MAAM,UAAU,eAAe,EAAE;GACzG,MAAM,MAAM,cAAc;AAAS,WAAQ,YAAY,SAAS,MAAM,KAAK;AAAK,cAAW,aAAa,QAAQ,KAAK,SAAS,GAAG;AAAG,WAAQ;EAC7I;AAAC,SAAO;CACV;CAAC,SAAS,mBAAmB,gBAAgB,mBAAmB;AAC/D,sBAAoB;AAAG,yBAAuB;EAAG,MAAM,UAAU,eAAe;AAAE,UAAQ,mBAAmB,MAAM,KAAK,QAAQ;EAAQ,IAAI,UAAU;AAAG,OAAK,MAAM,UAAU,QAC5K,YAAW,gBAAgB,OAAO,GAAG;AACtC,UAAQ,sBAAsB,MAAM,KAAK;AAAS,SAAO;CAC3D;CAAC,SAAS,UAAU,IAAI;AACvB,MAAI;GACF,MAAM,SAAS,SAAS,gBAAgB,GAAG;AAAE,MAAG,MAAM,OAAO;AAAE,UAAO;EACvE,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,UAAO,EAAE;EACrB;CACF;CAAC,SAAS,eAAe,IAAI,MAAM;AAClC,YAAU;AAAG,MAAI;GACf,MAAM,aAAa;GAAG,MAAM,mBAAmB;GAAG,MAAM,QAAQ;GAAG;IAAE,MAAM,SAAS,SAAS,gBAAgB,GAAG;IAAE,IAAI,OAAO,OAAO,MAAM,IAAI,GAAG,MAAM,OAAO,KAAK,GAAG,IAAI,GAAG,OAAO,OAAO,KAAK,GAAG,IAAI;GAAG;SAAM,SAAS,KAAK;AAAM,UAAO,OAAO,MAAM,MAAM,KAAK;AAAO,UAAO,OAAO,MAAM,MAAM,KAAK,OAAO,WAAW;AAAE,UAAO,OAAO,OAAO,MAAM,KAAK,OAAO,iBAAiB;AAAE,UAAO;EAC/X,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,UAAO,EAAE;EACrB;CACF;CAAC,MAAM,UAAU,CAAC,QAAQ,KAAK,QAAQ,WAAW;EACjD,IAAI,MAAM;AAAG,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;GAC5C,MAAM,MAAM,QAAQ,QAAQ,MAAM;GAAI,MAAM,MAAM,QAAQ,MAAM,MAAM,MAAM;AAAI,UAAO;GAAG,MAAM,OAAO,GAAG,KAAK,QAAQ,OAAO,KAAK,KAAK,OAAO;AAAE,OAAI,OAAO,EAC1J,QAAO;AAAI,UAAO;AAAM,OAAI,OAAO,IACnC;AAAO,cAAW,UAAU,YAC5B,WAAU;EAEb;AAAC,SAAO;CACV;CAAE,SAAS,UAAU,IAAI,KAAK,QAAQ,QAAQ,MAAM;AACnD,WAAS;AAAG,cAAY;AAAG,WAAS,mBAAmB,OAAO;AAAE,YAAU;AAAG,MAAI;AAC/E,OAAI,MAAM,OAAO,CACf,QAAO;GAAI,MAAM,SAAS,SAAS,gBAAgB,GAAG;GAAE,MAAM,MAAM,QAAQ,QAAQ,KAAK,QAAQ,OAAO;AAAE,WAAQ,SAAS,MAAM,KAAK;AAAK,UAAO;EACrJ,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,UAAO,EAAE;EACrB;CACF;CAAC,SAAS,SAAS,IAAI,KAAK,QAAQ,MAAM;AACzC,WAAS;AAAG,cAAY;AAAG,YAAU;AAAG,MAAI;GAC1C,MAAM,SAAS,SAAS,gBAAgB,GAAG;GAAE,MAAM,MAAM,QAAQ,QAAQ,KAAK,OAAO;AAAE,WAAQ,SAAS,MAAM,KAAK;AAAK,UAAO;EAChI,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,UAAO,EAAE;EACrB;CACF;CAAC,SAAS,SAAS,IAAI,QAAQ,QAAQ,WAAW;AACjD,WAAS,mBAAmB,OAAO;AAAE,iBAAe;AAAG,MAAI;AACzD,OAAI,MAAM,OAAO,CACf,QAAO;GAAI,MAAM,SAAS,SAAS,gBAAgB,GAAG;AAAE,MAAG,OAAO,QAAQ,QAAQ,OAAO;AAAE,UAAO,cAAc,MAAM,KAAK,OAAO,OAAO,SAAS;AAAE,OAAI,OAAO,YAAY,WAAW,KAAK,WAAW,EACtM,QAAO,WAAW;AAAM,UAAO;EAClC,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,UAAO,EAAE;EACrB;CACF;CAAC,MAAM,WAAW,CAAC,QAAQ,KAAK,QAAQ,WAAW;EAClD,IAAI,MAAM;AAAG,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;GAC5C,MAAM,MAAM,QAAQ,QAAQ,MAAM;GAAI,MAAM,MAAM,QAAQ,MAAM,MAAM,MAAM;AAAI,UAAO;GAAG,MAAM,OAAO,GAAG,MAAM,QAAQ,OAAO,KAAK,KAAK,OAAO;AAAE,OAAI,OAAO,EAC3J,QAAO;AAAI,UAAO;AAAM,OAAI,OAAO,IACnC;AACA,cAAW,UAAU,YACrB,WAAU;EAEb;AAAC,SAAO;CACV;CAAE,SAAS,UAAU,IAAI,KAAK,QAAQ,MAAM;AAC3C,WAAS;AAAG,cAAY;AAAG,YAAU;AAAG,MAAI;GAC1C,MAAM,SAAS,SAAS,gBAAgB,GAAG;GAAE,MAAM,MAAM,SAAS,QAAQ,KAAK,OAAO;AAAE,WAAQ,SAAS,MAAM,KAAK;AAAK,UAAO;EACjI,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,UAAO,EAAE;EACrB;CACF;CAAC,SAAS,YAAY,QAAQ,MAAM;AACnC,cAAY;AAAG,YAAU;AAAG,MAAI;AAC9B,cAAW,OAAO,SAAS,WAAW,GAAG,SAAS,SAAS,EAAE,CAAC;AAAE,UAAO;EACxE,SAAQ,GAAG;AACV,cAAW,MAAM,iBAAiB,EAAE,SAAS,cAC3C,OAAM;AAAG,UAAO,EAAE;EACrB;CACF;CAAC,MAAM,WAAW,CAAC,UAAU;EAC5B,MAAM,OAAO,QAAQ,GAAG,MAAM;AAAI,SAAO;CAC1C;CAAE,MAAM,qBAAqB,CAAC,OAAO,WAAW;AAC/C,QAAM,IAAI,OAAO,WAAW,EAAE;CAC/B;CAAE,MAAM,aAAa,QAAM,yBAAyB,GAAG;CAAE,MAAM,sBAAsB,CAAC,QAAQ;EAC7F,MAAM,OAAO,gBAAgB,IAAI,GAAG;EAAG,MAAM,MAAM,WAAW,KAAK;AAAE,eAAa,KAAK,KAAK,KAAK;AAAE,SAAO;CAC3G;CAAE,MAAM,YAAY,MAAM,+BAA+B;CAAE,MAAM,eAAe,SAAO,2BAA2B,IAAI;CAAE,MAAM,QAAQ,CAAC,OAAO,YAAY,UAAU,MAAM,SAAS;EAClL,MAAM,MAAM;GAAE,QAAQ,CAAC,QAAQ;IAC7B,IAAIC,QAAM;AAAG,QAAI,QAAQ,QAAQ,kBAAqB,QAAQ,EAC5D,SAAM,oBAAoB,IAAI;AAC9B,WAAOA;GACV;GAAE,OAAO,CAAC,QAAQ;IACjB,MAAMA,QAAM,WAAW,IAAI,OAAO;AAAE,uBAAmB,KAAKA,MAAI;AAAE,WAAOA;GAC1E;EAAE;EAAE,SAAS,mBAAmBA,OAAK;AACpC,OAAI,eAAe,SACjB,QAAO,aAAaA,MAAI;AACxB,OAAI,eAAe,UACnB,QAAOA,UAAQ;AAAG,OAAI,eAAe,UACrC,QAAO,QAAQA,MAAI;AAAE,UAAOA;EAC/B;EAAC,MAAM,OAAO,SAAS,MAAM;EAAE,MAAM,QAAQ,CAAE;EAAE,IAAI,QAAQ;AAAG,MAAI,KACnE,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;GACpC,MAAM,YAAY,IAAI,SAAS;AAAK,OAAI,WAAW;AACjD,QAAI,UAAU,EACZ,SAAQ,WAAW;AAAE,UAAM,KAAK,UAAU,KAAK,GAAG;GACrD,MACC,OAAM,KAAK,KAAK;EAEnB;EACD,IAAI,MAAM,KAAK,GAAG,MAAM;EAAE,SAAS,OAAOA,OAAK;AAC/C,OAAI,UAAU,EACZ,cAAa,MAAM;AAAE,UAAO,mBAAmBA,MAAI;EACtD;QAAM,OAAO,IAAI;AAAE,SAAO;CAC5B;CAAE,MAAM,gBAAgB,CAAC,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK;CAAE,MAAM,YAAY,CAAC,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK;CAAE,MAAM,oBAAoB,CAAC,GAAG,SAAS,GAAG,eAAe,GAAG,KAAK;CAAE,MAAM,kBAAkB,CAAC,GAAG,SAAS,GAAG,aAAa,GAAG,KAAK;AAAE,IAAG,sBAAsB;AAAwB,IAAG,cAAc;AAAgB,IAAG,YAAY;CAAE;AAAE,MAAI,OAAO,cACjW,iBAAgB,OAAO;AAAe,MAAI,OAAO,eACjD,kBAAiB,OAAO;AAAgB,MAAI,OAAO,MACnD,OAAM,OAAO;AAAO,MAAI,OAAO,SAC/B,OAAM,OAAO;AAAU,MAAI,OAAO,WAClC,cAAa,OAAO;AAAY,MAAI,OAAO,UAC3C,cAAa,OAAO;AAAW,MAAI,OAAO,YAC1C,eAAc,OAAO;AAAa,MAAI,OAAO,SAAS;AACtD,cAAW,OAAO,WAAW,WAC3B,QAAO,UAAU,CAAC,OAAO,OAAQ;AAAE,UAAO,OAAO,QAAQ,SAAS,EAClE,QAAO,QAAQ,OAAO,EAAE;EAE3B;CAAE;QAAO,mBAAmB;AAAkB,QAAO,sBAAsB;AAAqB,QAAO,QAAQ;AAAO,QAAO,iBAAiB;AAAgB,QAAO,YAAY;AAAW,QAAO,gBAAgB;AAAe,QAAO,kBAAkB;AAAiB,QAAO,KAAK;AAAI,QAAO,oBAAoB;AAAmB,QAAO,oBAAoB;CAAmB,IAAI,OAAO,SAAS,iBAAiB,0BAA0B,2BAA2B,sBAAsB,wBAAwB,uBAAuB,wBAAwB,oBAAoB,8BAA8B,sBAAsB,SAAS,4BAA4B,0BAA0B,+BAA+B,QAAQ,2BAA2B;CAAY,SAAS,kBAAkBC,eAAa;AAC3yB,UAAQ,OAAO,QAAQA,cAAY;AAAG,YAAU,OAAO,UAAUA,cAAY;AAAG,oBAAkB,OAAO,kBAAkBA,cAAY;AAAG,6BAA2B,OAAO,2BAA2BA,cAAY;AAAG,8BAA4B,OAAO,4BAA4BA,cAAY;AAAG,yBAAuB,OAAO,uBAAuBA,cAAY;AAAG,2BAAyB,OAAO,yBAAyBA,cAAY;AAAG,0BAAwB,OAAO,wBAAwBA,cAAY;AAAG,2BAAyB,OAAO,yBAAyBA,cAAY;AAAG,uBAAqB,OAAO,qBAAqBA,cAAY;AAAG,iCAA+BA,cAAY;AAAG,yBAAuBA,cAAY;AAAI,YAAUA,cAAY;AAAI,+BAA6BA,cAAY;AAAI,6BAA2BA,cAAY;AAAI,kCAAgCA,cAAY;AAAI,WAAS,aAAaA,cAAY;AAAG,8BAA4BA,cAAY;CACn8B;CAAC,IAAI,cAAc;EAAE,GAAG;EAAkB,GAAG;EAAsB,GAAG;EAAmB,GAAG;EAAoB,GAAG;EAAsB,GAAG;EAAoB,GAAG;EAAwB,GAAG;EAAmB,GAAG;EAAuB,GAAG;EAAkB,GAAG;EAAoB,GAAG;EAAoB,GAAG;EAAuB,GAAG;EAAmB,GAAG;EAAuB,GAAG;EAAqB,GAAG;EAAkB,GAAG;EAAmB,GAAG;EAAuB,GAAG;EAAqB,GAAG;EAAY,GAAG;EAAsC,GAAG;EAAgB,GAAG;EAAW,GAAG;EAAa,GAAG;EAAgB,GAAG;EAAY,GAAG;EAAiB,GAAG;EAAsB,GAAG;EAAqB,GAAG;EAAyB,GAAG;EAAc,GAAG;EAAoB,GAAG;EAAW,GAAG;EAAgB,GAAG;EAAW,GAAG;EAAU,GAAG;EAAU,GAAG;EAAW,GAAG;EAAY,GAAG;CAAa;CAAE,SAAS,0BAA0BA,eAAa;AACx6B,kBAAc,OAAO,OAAO,CAAE,GAAEA,cAAY;EAAE,MAAM,iBAAiB,OAAK,QAAM,EAAE,GAAG,KAAK;EAAG,MAAM,kBAAkB,OAAK,CAAC,IAAI,OAAO,EAAE,IAAI,GAAG,KAAK;EAAG,MAAM,gBAAgB,OAAK,MAAM,GAAG,KAAK;AAAG,gBAAY,IAAI,eAAeA,cAAY,EAAE;AAAE,gBAAY,IAAI,gBAAgBA,cAAY,EAAE;AAAE,gBAAY,KAAK,eAAeA,cAAY,GAAG;AAAE,gBAAY,KAAK,cAAcA,cAAY,GAAG;AAAE,SAAOA;CAC3Y;CAAC,SAAS,MAAM;AACf,MAAI,kBAAkB,GAAG;AACvB,2BAAwB;AAAK;EAC9B;UAAQ;AAAE,MAAI,kBAAkB,GAAG;AAClC,2BAAwB;AAAK;EAC9B;EAAC,SAAS,QAAQ;AACjB,UAAO,YAAY;AAAM,OAAI,MAC3B;AAAQ,gBAAa;AAAE,yBAAsB,OAAO;AAAE,UAAO,wBAAwB;AAAE,YAAS;EACnG;AAAC,MAAI,OAAO,WAAW;AACtB,UAAO,UAAU,aAAa;AAAE,cAAW,MAAM;AAC/C,eAAW,MAAM,OAAO,UAAU,GAAG,EAAE,EAAE;AAAE,WAAO;GACnD,GAAE,EAAE;EACN,MACC,QAAO;CAEV;CAAC,IAAI;AAAa,eAAc,MAAO,YAAY;AAAG,MAAK;AAAE,KAAI,mBAChE,aAAY;KAEZ,aAAY,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC3C,wBAAsB;AAAS,uBAAqB;CACrD;AAEF,QAAO;AACT;AAAC,uBAAe;;;;ACj5DjB,SAAS,OAAOC,QAA0BC,UAAkC;AAC1E,QAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,SAAO,GAAG,OAAO,UAAU,CAACC,QAAiB;AAC3C,OAAI,IACF,QAAO,IAAI;OACR,UAAS;EACf,EAAC;CACH;AACF;AAED,eAAsB,iBACpBC,UAA2B,CAAE,GACR;CACrB,MAAM,UAAU,QAAQ,WAAW;CAEnC,MAAMC,SAA2B,MAAM,iBAAiB,EACtD,WAAWC,MAAc;AACvB,UAAQ,EAAE,QAAQ,GAAG,KAAK;CAC3B,EACF,EAAC;AAGF,KAAI;AACF,SAAO,GAAG,MAAM,aAAa;CAC9B,QAAO,CAEP;AACD,QAAO,GAAG,MAAM,OAAO,GAAG,YAAY,OAAO,CAAE,GAAE,aAAa;AAC9D,OAAM,OAAO,QAAQ,KAAK;AAG1B,KAAI;AACF,SAAO,GAAG,MAAM,QAAQ;CACzB,QAAO,CAEP;AACD,KAAI;AACF,SAAO,GAAG,MAAM,cAAc;CAC/B,QAAO,CAEP;CAGD,MAAM,eAAe,QAAQ,aAAa;EACxC;EACA;EACA;EACA;EACA;CACD;AACD,OAAM,QAAQ,IACZ,aAAa,IAAI,OAAO,SAAS;EAC/B,MAAM,OAAO,EAAE,QAAQ,GAAG,KAAK;EAC/B,MAAM,OAAO,MAAM,MAAM,IAAI;AAC7B,OAAK,KAAK,GACR,OAAM,IAAI,OAAO,kBAAkB,IAAI,IAAI,KAAK,OAAO;EACzD,MAAM,OAAO,IAAI,WAAW,MAAM,KAAK,aAAa;AACpD,SAAO,GAAG,WAAW,cAAc,KAAK,GAAG,KAAK;CACjD,EAAC,CACH;CAGD,MAAM,KAAK,OAAO,MAAM,kBAAkB,UAAU,CAAE,GAAE,CAAE,EAAC;AAC3D,KAAI,OAAO,EACT,OAAM,IAAI,OAAO,kCAAkC,GAAG;AAIxD,OAAM,OAAO,QAAQ,MAAM;CAE3B,IAAI,YAAY;CAEhB,SAAS,SAASC,IAAYC,UAAoBC,MAA4B;AAC5E,MAAI,UACF,OAAM,IAAI,MAAM;EAClB,MAAM,OAAO,OAAO,MAAM,IAAI,UAAU,UAAU,KAAK;AACvD,SAAO,KAAK,MAAM,KAAK;CACxB;CAED,MAAMC,SAAqB;EACzB,aAAaC,MAAyB;AACpC,UAAO,SAAS,2BAA2B,CAAC,QAAS,GAAE,CAAC,IAAK,EAAC;EAC/D;EAED,cAAcC,OAA0B;GACtC,MAAM,QAAQ,SAAS,4BAA4B,CAAC,QAAS,GAAE,CAAC,KAAM,EAAC;AAEvE,UAAO,QAAQ,MAAM,CAAC,MAAM,MAAM,CAAE,EAAC;AACrC,UAAO;EACR;EAED,SAASC,SAA6B;AACpC,UAAO,SAAS,uBAAuB,CAAC,QAAS,GAAE,CAAC,UAAU,IAAI,CAAE,EAAC;EACtE;EAED,aAAmB;AACjB,OAAI,UACF;AACF,UAAO,MAAM,yBAAyB,MAAM,CAAE,GAAE,CAAE,EAAC;EACpD;EAED,UAAUC,MAAcC,OAAsB;AAC5C,OAAI,UACF;AACF,UAAO,MAAM,wBAAwB,MAAM,CAAC,UAAU,QAAS,GAAE,CAAC,MAAM,QAAQ,IAAI,CAAE,EAAC;EACxF;EAED,aAAqB;AACnB,OAAI,UACF,QAAO;AACT,UAAO,OAAO,MAAM,yBAAyB,UAAU,CAAE,GAAE,CAAE,EAAC;EAC/D;EAED,UAAgB;AACd,OAAI,UACF;AACF,eAAY;AACZ,UAAO,MAAM,qBAAqB,MAAM,CAAE,GAAE,CAAE,EAAC;AAC/C,UAAO,QAAQ,MAAM,CAAC,MAAM,MAAM,CAAE,EAAC;EACtC;CACF;AAED,QAAO;AACR;;;;;;;;ACzHD,IAAa,mBAAb,MAAsD;CACpD,AAAQ,SAA4B;CACpC,AAAQ,gBAAgB;CAExB,AAAQ,cAAoC;CAE5C,YAAoBC,UAAmC,CAAE,GAAE;EAiE5D,KAjEqB;AAClB,OAAK,YAAY;CAClB;CAED,MAAc,YAAY;AACxB,QAAM,KAAK,YAAY;AACvB,SAAO,KAAK;CACb;CAED,MAAM,aAA4B;AAChC,MAAI,KAAK,YACP,QAAO,KAAK;AAEd,OAAK,cAAc,CAAC,YAAY;AAC9B,QAAK,SAAS,MAAM,iBAAiB,KAAK,QAAQ;AAClD,QAAK,OAAO,UAAU,WAAW,KAAK,QAAQ,cAAc,KAAK;EAClE,IAAG;AACJ,SAAO,KAAK;CACb;CAED,MAAM,aAAaC,YAAoB;EACrC,MAAM,SAAS,MAAM,KAAK,WAAW;AACrC,OAAK,YAAY;AACf,UAAO,YAAY;AACnB,QAAK,gBAAgB;AACrB,UAAO;EACR;EAED,IAAIC;AAEJ,MAAI,WAAW,WAAW,KAAK,cAAc,EAAE;GAE7C,MAAM,QAAQ,WAAW,MAAM,KAAK,cAAc,OAAO;AACzD,WAAQ,OAAO,aAAa,MAAM;EACnC,OAAM;AAEL,UAAO,YAAY;AACnB,WAAQ,OAAO,aAAa,WAAW;EACxC;AAED,OAAK,gBAAgB;AAErB,SAAO;CACR;CAED,MAAM,cAAcC,OAAe;EACjC,MAAM,SAAS,MAAM,KAAK,WAAW;AACrC,SAAO,OAAO,cAAc,MAAM;CACnC;CAED,MAAM,aAAa;EACjB,MAAM,SAAS,MAAM,KAAK,WAAW;AACrC,SAAO,OAAO,YAAY;CAC3B;CAED,MAAM,cAAcC,YAAqB;EACvC,MAAM,SAAS,MAAM,KAAK,WAAW;AACrC,SAAO,OAAO,UAAU,WAAW,WAAW;CAC/C;CAED,MAAM,UAAU;EACd,MAAM,SAAS,MAAM,KAAK,WAAW;AACrC,SAAO,OAAO,SAAS;CACxB;AACF"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zh-keyboard/pinyin",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "中文虚拟键盘组件库拼音输入引擎",
|
|
5
|
+
"author": "dusionlike",
|
|
6
|
+
"license": "Apache 2.0",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/dusionlike/zh-keyboard",
|
|
10
|
+
"directory": "packages/pinyin"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/dusionlike/zh-keyboard/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"keyboard",
|
|
17
|
+
"chinese",
|
|
18
|
+
"virtual-keyboard",
|
|
19
|
+
"pinyin",
|
|
20
|
+
"engine"
|
|
21
|
+
],
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"import": "./dist/index.mjs",
|
|
26
|
+
"require": "./dist/index.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"main": "dist/index.js",
|
|
30
|
+
"module": "dist/index.mjs",
|
|
31
|
+
"types": "dist/index.d.ts",
|
|
32
|
+
"files": [
|
|
33
|
+
"data",
|
|
34
|
+
"dist"
|
|
35
|
+
],
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@zh-keyboard/core": "1.0.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"tsdown": "^0.11.1",
|
|
41
|
+
"typescript": "^5.0.0",
|
|
42
|
+
"vitest": "^1.0.0"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"dev": "tsdown --watch",
|
|
46
|
+
"build": "tsdown",
|
|
47
|
+
"test": "vitest run"
|
|
48
|
+
}
|
|
49
|
+
}
|