{"version":3,"file":"index.cjs","sources":["../../node_modules/tessera.js/dist/esm/index.js","../../node_modules/bmp-ts/dist/esm/header-types.js","../../node_modules/bmp-ts/dist/esm/mask-color.js","../../node_modules/bmp-ts/dist/esm/types.js","../../node_modules/bmp-ts/dist/esm/decoder.js","../../node_modules/bmp-ts/dist/esm/encoder.js","../../node_modules/bmp-ts/dist/esm/index.js","../../node_modules/tinycolor2/esm/tinycolor.js","../../node_modules/@jimp/utils/dist/esm/index.js","../../node_modules/@jimp/js-bmp/dist/esm/index.js","../../node_modules/omggif/omggif.js","../../node_modules/gifwrap/src/bitmapimage.js","../../node_modules/gifwrap/src/gif.js","../../node_modules/image-q/dist/cjs/image-q.cjs","../../node_modules/gifwrap/src/gifframe.js","../../node_modules/gifwrap/src/gifutil.js","../../node_modules/gifwrap/src/gifcodec.js","../../node_modules/gifwrap/src/index.js","../../node_modules/@jimp/js-gif/dist/esm/index.js","../../node_modules/jpeg-js/lib/encoder.js","../../node_modules/jpeg-js/lib/decoder.js","../../node_modules/jpeg-js/index.js","../../node_modules/@jimp/js-jpeg/dist/esm/index.js","../../node_modules/pngjs/lib/chunkstream.js","../../node_modules/pngjs/lib/interlace.js","../../node_modules/pngjs/lib/paeth-predictor.js","../../node_modules/pngjs/lib/filter-parse.js","../../node_modules/pngjs/lib/filter-parse-async.js","../../node_modules/pngjs/lib/constants.js","../../node_modules/pngjs/lib/crc.js","../../node_modules/pngjs/lib/parser.js","../../node_modules/pngjs/lib/bitmapper.js","../../node_modules/pngjs/lib/format-normaliser.js","../../node_modules/pngjs/lib/parser-async.js","../../node_modules/pngjs/lib/bitpacker.js","../../node_modules/pngjs/lib/filter-pack.js","../../node_modules/pngjs/lib/packer.js","../../node_modules/pngjs/lib/packer-async.js","../../node_modules/base64-js/index.js","../../node_modules/ieee754/index.js","../../node_modules/buffer/index.js","../../node_modules/pngjs/lib/sync-inflate.js","../../node_modules/pngjs/lib/sync-reader.js","../../node_modules/pngjs/lib/filter-parse-sync.js","../../node_modules/pngjs/lib/parser-sync.js","../../node_modules/pngjs/lib/packer-sync.js","../../node_modules/pngjs/lib/png-sync.js","../../node_modules/pngjs/lib/png.js","../../node_modules/@jimp/js-png/dist/esm/constants.js","../../node_modules/@jimp/js-png/dist/esm/index.js","../../node_modules/pako/lib/utils/common.js","../../node_modules/pako/lib/zlib/trees.js","../../node_modules/pako/lib/zlib/adler32.js","../../node_modules/pako/lib/zlib/crc32.js","../../node_modules/pako/lib/zlib/messages.js","../../node_modules/pako/lib/zlib/deflate.js","../../node_modules/pako/lib/utils/strings.js","../../node_modules/pako/lib/zlib/zstream.js","../../node_modules/pako/lib/deflate.js","../../node_modules/pako/lib/zlib/inffast.js","../../node_modules/pako/lib/zlib/inftrees.js","../../node_modules/pako/lib/zlib/inflate.js","../../node_modules/pako/lib/zlib/constants.js","../../node_modules/pako/lib/zlib/gzheader.js","../../node_modules/pako/lib/inflate.js","../../node_modules/pako/index.js","../../node_modules/utif2/UTIF.js","../../node_modules/@jimp/js-tiff/dist/esm/index.js","../../node_modules/zod/v3/helpers/util.js","../../node_modules/zod/v3/ZodError.js","../../node_modules/zod/v3/locales/en.js","../../node_modules/zod/v3/errors.js","../../node_modules/zod/v3/helpers/parseUtil.js","../../node_modules/zod/v3/helpers/errorUtil.js","../../node_modules/zod/v3/types.js","../../node_modules/@jimp/types/dist/esm/index.js","../../node_modules/@jimp/plugin-blit/dist/esm/index.js","../../node_modules/@jimp/plugin-blur/dist/esm/blur-tables.js","../../node_modules/@jimp/plugin-blur/dist/esm/index.js","../../node_modules/@jimp/plugin-circle/dist/esm/index.js","../../node_modules/@jimp/plugin-color/dist/esm/index.js","../../node_modules/token-types/lib/index.js","../../node_modules/peek-readable/lib/EndOfFileStream.js","../../node_modules/peek-readable/lib/Deferred.js","../../node_modules/peek-readable/lib/StreamReader.js","../../node_modules/peek-readable/lib/index.js","../../node_modules/strtok3/lib/AbstractTokenizer.js","../../node_modules/strtok3/lib/ReadStreamTokenizer.js","../../node_modules/strtok3/lib/BufferTokenizer.js","../../node_modules/strtok3/lib/core.js","../../node_modules/file-type/util.js","../../node_modules/file-type/supported.js","../../node_modules/file-type/core.js","../../node_modules/await-to-js/dist/await-to-js.es5.js","../../node_modules/@jimp/file-ops/dist/esm/index.js","../../node_modules/mime/Mime.js","../../node_modules/mime/types/standard.js","../../node_modules/mime/lite.js","../../node_modules/@jimp/core/dist/esm/utils/constants.js","../../node_modules/@jimp/core/dist/esm/utils/composite-modes.js","../../node_modules/@jimp/core/dist/esm/utils/composite.js","../../node_modules/exif-parser/lib/jpeg.js","../../node_modules/exif-parser/lib/exif.js","../../node_modules/exif-parser/lib/date.js","../../node_modules/exif-parser/lib/simplify.js","../../node_modules/exif-parser/lib/exif-tags.js","../../node_modules/exif-parser/lib/parser.js","../../node_modules/exif-parser/lib/dom-bufferstream.js","../../node_modules/exif-parser/lib/bufferstream.js","../../node_modules/exif-parser/index.js","../../node_modules/@jimp/core/dist/esm/utils/image-bitmap.js","../../node_modules/@jimp/core/dist/esm/index.js","../../node_modules/@jimp/plugin-resize/dist/esm/constants.js","../../node_modules/@jimp/plugin-resize/dist/esm/modules/resize.js","../../node_modules/@jimp/plugin-resize/dist/esm/modules/resize2.js","../../node_modules/@jimp/plugin-resize/dist/esm/index.js","../../node_modules/@jimp/plugin-contain/dist/esm/index.js","../../node_modules/@jimp/plugin-crop/dist/esm/index.js","../../node_modules/@jimp/plugin-cover/dist/esm/index.js","../../node_modules/@jimp/plugin-displace/dist/esm/index.js","../../node_modules/@jimp/plugin-dither/dist/esm/index.js","../../node_modules/@jimp/plugin-fisheye/dist/esm/index.js","../../node_modules/@jimp/plugin-flip/dist/esm/index.js","../../node_modules/any-base/src/converter.js","../../node_modules/any-base/index.js","../../node_modules/@jimp/plugin-hash/dist/esm/phash.js","../../node_modules/@jimp/plugin-hash/dist/esm/index.js","../../node_modules/@jimp/plugin-mask/dist/esm/index.js","../../node_modules/@jimp/plugin-print/dist/esm/measure-text.js","../../node_modules/@jimp/plugin-print/dist/esm/index.js","../../node_modules/@jimp/plugin-rotate/dist/esm/index.js","../../node_modules/@jimp/plugin-threshold/dist/esm/index.js","../../node_modules/image-q/dist/esm/image-q.mjs","../../node_modules/@jimp/plugin-quantize/dist/esm/index.js","../../node_modules/jimp/dist/esm/index.js","../../src/engine/lib.js","../../src/engine/core.js","../../src/engine/cam.js","../../src/engine/lerp.js","../../src/engine/controllers.js","../../src/engine/audio.js","../../node_modules/planck/dist/planck.mjs","../../src/engine/vec2pool.js","../../src/engine/physicsv2.js","../../src/engine/Charactercontrollerv2.js","../../src/engine/particles.js","../../src/engine/sprite.js","../../src/engine/tiledprofiler.js","../../src/engine/tiledcache.js","../../src/engine/tiled.js","../../src/editor/loader.js","../../src/editor/camera.js","../../src/editor/tool-manager.js","../../src/imgui/theme.js","../../src/imgui/imgui_context.js","../../src/imgui/effects.js","../../src/imgui/constants.js","../../src/imgui/widgets.js","../../src/imgui/layout.js","../../src/editor/toolbar.js","../../src/imgui/text_input.js","../../src/editor/properties-panel.js","../../src/editor/tools/base.js","../../src/editor/tools/spawn.js","../../src/editor/tools/path.js","../../src/editor/tools/area.js","../../src/editor/serializer.js","../../src/editor/index.js"],"sourcesContent":["import { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\nimport { createRequire } from 'module';\nimport os from 'node:os';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n// Use a function to safely get these values\nconst getModulePaths = () => {\n    try {\n        // Try ESM first\n        if (typeof import.meta !== 'undefined' && import.meta.url) {\n            const filename = fileURLToPath(import.meta.url);\n            return {\n                __filename: filename,\n                __dirname: dirname(filename),\n                require: createRequire(import.meta.url)\n            };\n        }\n    } catch (e) {\n        // Fall through to CJS\n    }\n\n    // CJS fallback\n    return {\n        __filename: typeof __filename !== 'undefined' ? __filename : '',\n        __dirname: typeof __dirname !== 'undefined' ? __dirname : '',\n        require: typeof require !== 'undefined' ? require : () => { throw new Error('require not available'); }\n    };\n};\n\nconst { __filename: moduleFilename, __dirname: moduleDirname } = getModulePaths();\nconst __filename = moduleFilename;\nconst __dirname = moduleDirname;\n\n\nfunction bufferFromAsset(a) {\n    if (!a) return null;\n    if (Buffer.isBuffer(a)) return a;\n    if (a instanceof ArrayBuffer) return Buffer.from(a);\n    if (ArrayBuffer.isView(a)) return Buffer.from(a.buffer, a.byteOffset, a.byteLength);\n    if (typeof a === 'string') return Buffer.from(a, 'utf8');\n    throw new TypeError('Unsupported asset type: ' + typeof a);\n}\n\nfunction writeFileAtomicSync(dest, buf) {\n    const tmp = `${dest}.${crypto.randomUUID()}.tmp`;\n    fs.writeFileSync(tmp, buf);\n    fs.renameSync(tmp, dest);\n}\n\nfunction ensureDirSync(dir) {\n    if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n}\n\nfunction prependPathForLibraries(dir) {\n    if (process.platform === 'win32') {\n        process.env.PATH = `${dir};${process.env.PATH || ''}`;\n    } else if (process.platform === 'linux') {\n        process.env.LD_LIBRARY_PATH = `${dir}:${process.env.LD_LIBRARY_PATH || ''}`;\n    } else if (process.platform === 'darwin') {\n        process.env.DYLD_LIBRARY_PATH = `${dir}:${process.env.DYLD_LIBRARY_PATH || ''}`;\n    }\n\n}\n\nfunction createRunTempDir(prefix = 'assets-extract') {\n    const root = path.join(os.tmpdir(), prefix);\n    ensureDirSync(root);\n    // reuse per-process id so repeated requires in same process reuse files:\n    const runId = process.env.ASSETS_EXTRACT_RUN_ID || (process.env.ASSETS_EXTRACT_RUN_ID = `${process.pid}-${crypto.randomUUID()}`);\n    const dir = path.join(root, runId);\n    ensureDirSync(dir);\n    return dir;\n}\n\nfunction cleanupDirBestEffort(dir) {\n    try {\n        // attempt to remove files first (ignore failures)\n        if (fs.existsSync(dir)) {\n            console.log(`trying to clean temp: ${dir}`);\n            for (const f of fs.readdirSync(dir)) {\n                const p = path.join(dir, f);\n                try { fs.unlinkSync(p); } catch (e) { /* ignore */ }\n            }\n            try { fs.rmdirSync(dir); } catch (e) { /* ignore */ }\n        }\n    } catch (e) {\n        // ignore\n        console.log(e);\n    }\n}\n\n\nfunction cleanupOldTempDirs(prefix = 'assets-extract', maxAgeMs = 24 * 60 * 60 * 1000) {\n    try {\n        const root = path.join(os.tmpdir(), prefix);\n        if (!fs.existsSync(root)) return;\n\n        const now = Date.now();\n        for (const entry of fs.readdirSync(root)) {\n            const dirPath = path.join(root, entry);\n            // Skip current process ID\n            if (entry.startsWith(`${process.pid}-`)) continue;\n\n            try {\n                const stats = fs.statSync(dirPath);\n                if (now - stats.mtimeMs > maxAgeMs) {\n                    cleanupDirBestEffort(dirPath);\n                }\n            } catch (e) { /* ignore */ }\n        }\n    } catch (e) { /* ignore */ }\n}\n\n\n/**\n * @typedef {{ x: number, y: number }} Vec2\n */\n\n/**\n * @typedef {{ r: number, g: number, b: number, a: number }} Color4\n */\n\n/**\n * @typedef {{ data: ArrayBuffer, width: number, height: number, mipmaps: number, format: number }} Image\n */\n\n/**\n * @typedef {number} TextureId\n */\n\n\n\n\n\nclass Input_ {\n    constructor() { }\n\n    /**\n     * @param {string} key\n     * @returns {boolean}\n     */\n    isKeyDown(key) { }\n\n    /**\n     * @param {string} key\n     * @returns {boolean}\n     */\n    isKeyReleased(key) { }\n\n    /**\n     * @param {string} key\n     * @param {(actionName: string, event: {type: string, keyCode: number, keyName: string, mouseButton: number, mousePosition: {x:number,y:number}, mouseDelta: {x:number,y:number}, wheelDelta: number, timestamp: number}) => void} callback\n     */\n    onKeyDown(key, callback) { }\n\n    /**\n     * @param {string} key\n     * @param {(actionName: string, event: {type: string, keyCode: number, keyName: string, mouseButton: number, mousePosition: {x:number,y:number}, mouseDelta: {x:number,y:number}, wheelDelta: number, timestamp: number}) => void} callback\n     */\n    onKeyUp(key, callback) { }\n\n    /**\n     * @param {number} button\n     * @param {(actionName: string, event: {type: string, keyCode: number, keyName: string, mouseButton: number, mousePosition: {x:number,y:number}, mouseDelta: {x:number,y:number}, wheelDelta: number, timestamp: number}) => void} callback\n     */\n    onMouseDown(button, callback) { }\n\n    /**\n     * @param {number} button\n     * @param {(actionName: string, event: {type: string, keyCode: number, keyName: string, mouseButton: number, mousePosition: {x:number,y:number}, mouseDelta: {x:number,y:number}, wheelDelta: number, timestamp: number}) => void} callback\n     */\n    onMouseUp(button, callback) { }\n\n    /**\n     * @param {(actionName: string, event: {type: string, keyCode: number, keyName: string, mouseButton: number, mousePosition: {x:number,y:number}, mouseDelta: {x:number,y:number}, wheelDelta: number, timestamp: number}) => void} callback\n     */\n    onMouseMove(callback) { }\n\n    /**\n     * @param {(actionName: string, event: {type: string, keyCode: number, keyName: string, mouseButton: number, mousePosition: {x:number,y:number}, mouseDelta: {x:number,y:number}, wheelDelta: number, timestamp: number}) => void} callback\n     */\n    onMouseWheel(callback) { }\n}\n\n\n\nclass Audio_ {\n    constructor() { }\n\n    /**\n     * Initialize audio device\n     * @returns {boolean}\n     */\n    initialize() { }\n\n    /**\n     * Shutdown audio device and free resources\n     * @returns {void}\n     */\n    shutdown() { }\n\n    /**\n     * Load sound from disk\n     * @param {string} filePath\n     * @returns {number} handle (0 on failure)\n     */\n    loadSound(filePath) { }\n\n    /**\n     * Load sound from memory buffer\n     * @param {string} fileType - e.g. '.wav' or '.ogg' (leading dot accepted/required by backend)\n     * @param {Buffer|ArrayBuffer|TypedArray|SharedArrayBuffer} buffer\n     * @returns {number} handle (0 on failure)\n     */\n    loadSoundFromMemory(fileType, buffer) { }\n\n    /**\n     * Play a loaded sound (one-shot)\n     * @param {number} handle\n     * @returns {void}\n     */\n    playSound(handle) { }\n\n    /**\n     * Stop a sound\n     * @param {number} handle\n     * @returns {void}\n     */\n    stopSound(handle) { }\n\n    /**\n     * Pause a sound\n     * @param {number} handle\n     * @returns {void}\n     */\n    pauseSound(handle) { }\n\n    /**\n     * Resume a paused sound\n     * @param {number} handle\n     * @returns {void}\n     */\n    resumeSound(handle) { }\n\n    /**\n     * Set per-sound volume (0..1) multiplied by master volume internally\n     * @param {number} handle\n     * @param {number} volume\n     * @returns {void}\n     */\n    setSoundVolume(handle, volume) { }\n\n    /**\n     * Query whether a sound is playing\n     * @param {number} handle\n     * @returns {boolean}\n     */\n    isSoundPlaying(handle) { }\n\n    /**\n     * Unload sound and free resources\n     * @param {number} handle\n     * @returns {void}\n     */\n    unloadSound(handle) { }\n\n    /**\n     * Register callback for sound end (fired once when the sound finishes)\n     * @param {number} handle\n     * @param {(handle: number) => void} callback\n     * @returns {void}\n     */\n    onSoundEnd(handle, callback) { }\n\n    /**\n     * Load music (streamed) from disk\n     * @param {string} filePath\n     * @param {boolean} loop \n     * @returns {number} handle (0 on failure)\n     */\n    loadMusic(filePath, loop) { }\n\n    /**\n     * Load music (streamed) from memory\n     * @param {string} fileType\n     * @param {Buffer|ArrayBuffer|TypedArray|SharedArrayBuffer} buffer\n     * @returns {number} handle (0 on failure)\n     */\n    loadMusicFromMemory(fileType, buffer) { }\n\n    /**\n     * Play music stream\n     * @param {number} handle\n     * @returns {void}\n     */\n    playMusic(handle) { }\n\n    /**\n     * Stop music stream\n     * @param {number} handle\n     * @returns {void}\n     */\n    stopMusic(handle) { }\n\n    /**\n     * Pause music stream\n     * @param {number} handle\n     * @returns {void}\n     */\n    pauseMusic(handle) { }\n\n    /**\n     * Resume music stream\n     * @param {number} handle\n     * @returns {void}\n     */\n    resumeMusic(handle) { }\n\n    /**\n     * Set music volume (0..1) multiplied by master volume\n     * @param {number} handle\n     * @param {number} volume\n     * @returns {void}\n     */\n    setMusicVolume(handle, volume) { }\n\n    /**\n     * Query whether music is playing\n     * @param {number} handle\n     * @returns {boolean}\n     */\n    isMusicPlaying(handle) { }\n\n    /**\n     * Unload music stream and free resources\n     * @param {number} handle\n     * @returns {void}\n     */\n    unloadMusic(handle) { }\n\n    /**\n     * Register callback fired when music stream ends\n     * @param {number} handle\n     * @param {(handle: number) => void} callback\n     * @returns {void}\n     */\n    onMusicEnd(handle, callback) { }\n\n    /**\n     * Create a low-level audio stream for procedural audio\n     * @param {number} sampleRate\n     * @param {number} sampleSizeBits\n     * @param {number} channels\n     * @returns {number} streamHandle\n     */\n    loadAudioStream(sampleRate, sampleSizeBits, channels) { }\n\n    /**\n     * Update an audio stream by pushing PCM frames (interleaved)\n     * @param {number} streamHandle\n     * @param {Buffer|Float32Array|Int16Array} data - frames * channels samples\n     * @param {number} frameCount\n     * @returns {void}\n     */\n    updateAudioStream(streamHandle, data, frameCount) { }\n\n    /**\n     * Play an audio stream\n     * @param {number} streamHandle\n     * @returns {void}\n     */\n    playAudioStream(streamHandle) { }\n\n    /**\n     * Pause an audio stream\n     * @param {number} streamHandle\n     * @returns {void}\n     */\n    pauseAudioStream(streamHandle) { }\n\n    /**\n     * Resume an audio stream\n     * @param {number} streamHandle\n     * @returns {void}\n     */\n    resumeAudioStream(streamHandle) { }\n\n    /**\n     * Stop an audio stream\n     * @param {number} streamHandle\n     * @returns {void}\n     */\n    stopAudioStream(streamHandle) { }\n\n    /**\n     * Set per-stream volume\n     * @param {number} streamHandle\n     * @param {number} volume\n     * @returns {void}\n     */\n    setAudioStreamVolume(streamHandle, volume) { }\n\n    /**\n     * Attach a processor callback to a specific stream\n     * @param {number} streamHandle\n     * @param {(bufferData: Float32Array, frames: number) => void} processor\n     * @returns {void}\n     */\n    attachAudioStreamProcessor(streamHandle, processor) { }\n\n    /**\n     * Detach a previously attached stream processor\n     * @param {number} streamHandle\n     * @param {(bufferData: Float32Array, frames: number) => void} processor\n     * @returns {void}\n     */\n    detachAudioStreamProcessor(streamHandle, processor) { }\n\n    /**\n     * Attach a global mixed audio processor (receives mixed frames)\n     * @param {(bufferData: Float32Array, frames: number) => void} processor\n     * @returns {void}\n     */\n    attachAudioMixedProcessor(processor) { }\n\n    /**\n     * Detach a global mixed audio processor\n     * @param {(bufferData: Float32Array, frames: number) => void} processor\n     * @returns {void}\n     */\n    detachAudioMixedProcessor(processor) { }\n\n    /**\n     * Set default buffer size (frames) for new audio streams\n     * @param {number} size\n     * @returns {void}\n     */\n    setAudioStreamBufferSizeDefault(size) { }\n\n    /**\n     * Set master volume (0..1)\n     * @param {number} volume\n     * @returns {void}\n     */\n    setMasterVolume(volume) { }\n\n    /**\n     * Get master volume\n     * @returns {number}\n     */\n    getMasterVolume() { }\n}\n\n\n\nclass Renderer {\n\n    constructor() {\n        /** @type {Input_} */\n        this.input = new Input_();\n\n        /** @type {Audio_} */\n        this.audio = new Audio_();\n        /** @type {number} */\n        this.targetFPS = 60;\n    }\n    /**\n     * \n     * @param {string} title - window title\n     * @param {number} width \n     * @param {number} height \n     * @param {boolean} isSea - is running in single executable context \n     * @param {()=> void} assetGetterSync - function to load assets\n     * @returns {[Renderer, {RESIZABLE: number, UNDECORATED: number, ALWAYS_RUN: number, VSYNC_HINT: number, MSAA_4X_HINT: number, hideConsole: ()=> void, showConsole: ()=> void}]}\n     */\n    static create(title, width, height, isSea = false, assetGetterSync = undefined) {\n\n\n        //          * @returns {{\n        //  *   Renderer: new(...args: any[]) => Renderer,\n        //  *   FULLSCREEN: number,\n        //  *   RESIZABLE: number,\n        //  *   UNDECORATED: number,\n        //  *   ALWAYS_RUN: number,\n        //  *   VSYNC_HINT: number,\n        //  *   MSAA_4X_HINT: number,\n        //  *   hideConsole: ()=> void,\n        //  *   showConsole: () => void,\n        //  * }}\n        const { Renderer,FULLSCREEN, RESIZABLE, UNDECORATED, ALWAYS_RUN, VSYNC_HINT, MSAA_4X_HINT, hideConsole, showConsole } = isSea ? loadRendererSea({ assetGetterSync }) : loadRenderer();\n        this.ops = {\n            FULLSCREEN,\n            RESIZABLE,\n            UNDECORATED,\n            ALWAYS_RUN,\n            VSYNC_HINT,\n            MSAA_4X_HINT,\n            hideConsole,\n            showConsole\n        };\n        const renderer = new Renderer();\n        if (!renderer.initialize(width, height, title)) {\n            console.error(\"Failed to initialize renderer\");\n            process.exit(1);\n        }\n\n        return [renderer, this.ops]\n\n    }\n\n    /**\n     * Boot up the renderer & create the window.\n     * @param {number} width\n     * @param {number} height\n     * @param {string} title\n     * @returns {boolean} success\n     */\n    initialize(width, height, title) { }\n\n    /**\n     * Tear down renderer & input\n     * @returns {void}\n     */\n    shutdown() { }\n\n    /**\n     * Call before drawing a frame\n     * @returns {void}\n     */\n    beginFrame() { }\n\n    /**\n     * Call after drawing a frame\n     * @returns {void}\n     */\n    endFrame() { }\n\n    /**\n     * Clear the screen with optional color\n     * @param {Color4=} color\n     * @returns {void}\n     */\n    clear(color) { }\n\n    /**\n     * Draw rectangle\n     * @param {Vec2} position\n     * @param {Vec2} size\n     * @param {Color4} color\n     * @returns {void}\n     */\n    drawRectangle(position, size, color) { }\n\n    /**\n     * Draw circle.\n     * @param {Vec2} center\n     * @param {number} radius\n     * @param {Color4} color\n     * @returns {void}\n     */\n    drawCircle(center, radius, color) { }\n\n    /**\n     * Draw line.\n     * @param {Vec2} start\n     * @param {Vec2} end\n     * @param {Color4} color\n     * @param {number=} thickness\n     * @returns {void}\n     */\n    drawLine(start, end, color, thickness) { }\n\n    /**\n     * Draw text.\n     * @param {string} text\n     * @param {Vec2} position\n     * @param {number} fontSize\n     * @param {Color4} color\n     * @returns {void}\n     */\n    drawText(text, position, fontSize, color) { }\n\n    // texture related\n\n    /**\n     * Load a texture from disk path.\n     * @param {string} path\n     * @returns {TextureId}\n     */\n    loadTexture(path) { return 0; }\n\n    /**\n     * Unload a previously loaded texture.\n     * @param {TextureId} textureId\n     * @returns {void}\n     */\n    unloadTexture(textureId) { }\n\n    /**\n     * Draw texture at a position. Optional size and tint.\n     * @param {TextureId} textureId\n     * @param {Vec2} position\n     * @param {Vec2=} size\n     * @param {Color4=} color\n     * @returns {void}\n     */\n    drawTexture(textureId, position, size, color) { }\n\n    /**\n     * Create an offscreen render texture, returns id.\n     * @param {number} width\n     * @param {number} height\n     * @returns {TextureId}\n     */\n    createRenderTexture(width, height) { return 0; }\n\n    /**\n     * Destroy a render texture ID.\n     * @param {TextureId} textureId\n     * @returns {void}\n     */\n    destroyRenderTexture(textureId) { }\n\n    /**\n     * Set a render target (texture id) or 0 for screen.\n     * @param {TextureId} textureId\n     * @returns {void}\n     */\n    setRenderTarget(textureId) { }\n\n    /**\n     * Create a shared buffer for CPU->GPU uploads.\n     * @param {number} size\n     * @param {number} width - for dirty region tracking and update\n     * @param {number} height - for dirty region tracking and update\n     *\n     * @returns {number} bufferId\n     */\n    createSharedBuffer(size, width, height) { return 0; }\n\n    /**\n     * Mark a shared buffer as dirty.\n     * @param {number} bufferId\n     * @returns {void}\n     */\n    markBufferDirty(bufferId) { }\n\n\n    /**\n     * \n     * @param {number} bufferId \n     *\n     * @param {number} x \n     * @param {number} y \n     * @param {number} width  \n     * @param {number} height\n     * */\n    markBufferRegionDirty(bufferId, x, y, width, height) { }\n\n    /**\n     * Is the shared buffer dirty?\n     * @param {number} bufferId\n     * @returns {boolean}\n     */\n    isBufferDirty(bufferId) { return false; }\n\n    /**\n     * Get buffer bytes as Uint8Array\n     * @param {number} bufferId\n     * @returns {Uint8Array}\n     */\n    getBufferData(bufferId) { return new Uint8Array(0); }\n\n    /**\n     * Update buffer bytes from a TypedArray (Uint8Array)\n     * @param {number} bufferId\n     * @param {Uint8Array} data\n     * @param {number} x\n     * @param {number} y\n     * @param {number} width\n     * @param {number} height\n     * @returns {void}\n     */\n    updateBufferData(bufferId, data, x = 0, y = 0, width = 0, height = 0) { }\n\n    /**\n     * Upload an existing shared buffer to a GPU texture.\n     * @param {TextureId} textureId\n     * @param {number} bufferId\n     * @returns {void}\n     */\n    updateTextureFromBuffer(textureId, bufferId) { }\n\n    /**\n     * Load a texture directly from an existing shared buffer (RGBA)\n     * @param {number} bufferId\n     * @param {number} width\n     * @param {number} height\n     * @returns {TextureId}\n     */\n    loadTextureFromBuffer(bufferId, width, height) { return 0; }\n\n    /**\n     * Draw a texture sized to a destination rectangle\n     * @param {TextureId} textureId\n     * @param {number} x\n     * @param {number} y\n     * @param {number} width\n     * @param {number} height\n     * @param {Object=} colorObj\n     * @returns {void}\n     */\n    drawTextureSized(textureId, x, y, width, height, colorObj) { }\n\n\n    /**\n      * Draw a texture sized to a destination rectangle\n      * @param {TextureId} textureId\n      * @param {{x:number, y: number}} srcPos\n      * @param {{x: number, y: number}} srcSize\n      * @param {{x: number, y: number}} destPos\n      * @param {{x: number, y: number}} destSize\n      * @param {Object=} colorObj optional\n      * @returns {void}\n      */\n    drawTexturePro(textureId, srcPos, srcSize, destPos, destSize) { }\n\n    /**\n     * Returns current width.\n     * @returns {number}\n     */\n    get width() { return 0; }\n\n    /**\n     * Returns current height.\n     * @returns {number}\n     */\n    get height() { return 0; }\n\n    /**\n     * @returns {boolean}\n     */\n    get WindowShouldClose() { return false; }\n\n    /**\n     * onRender(callback) register a JS callback to be fired each frame.\n     * @param {Function} callback\n     * @returns {void}\n     */\n    onRender(callback) { }\n\n    /**\n     * step the renderer loop once (returns whether to continue)\n     * @returns {boolean}\n     */\n    step() { return false; }\n\n    /**\n     * Get a JS Input object wrapper\n     * @returns {Input_}\n     */\n    get input() { return new Input_(); }\n\n    /**\n     * Current FPS readout\n     * @returns {number}\n     */\n    get FPS() { return 0; }\n\n\n    /**\n     * On resize callback\n     */\n    set onResize(cb) { }\n\n\n    /**\n    * Set target fps \n    */\n    set targetFPS(fps) { }\n    /**\n     * Set various window states, e.g. flags.\n     * @param {number} state\n     * @returns {void}\n     */\n    setWindowState(state) { }\n\n\n    /**\n     * \n     * @param {string} path\n     * @returns {{width: number, height: number, format: number, data: Uint8Array}} \n     */\n    loadImage(path) { }\n\n    /**\n     * poll for input\n     */\n    GetInput() { }\n}\n\n/**\n * Load the native renderer module.\n * The JSDoc return type tells Rollup/TS that the native exports include a constructor `Renderer`.\n * @deprecated - use const [renderer, ops] = Renderer.create(\"Image\", 800, 600)\n * @returns {{\n *   Renderer: new(...args: any[]) => Renderer,\n *   FULLSCREEN: number,\n *   RESIZABLE: number,\n *   UNDECORATED: number,\n *   ALWAYS_RUN: number,\n *   VSYNC_HINT: number,\n *   MSAA_4X_HINT: number\n * }}\n */\nfunction loadRenderer() {\n    const require = createRequire(import.meta.url);\n    try {\n        return require('node-gyp-build')(join(__dirname, '..'));\n    } catch (error) {\n        console.log('method 1 failed:', error.message);\n        try {\n            return require(join(__dirname, '..', 'prebuilds', process.platform + '-' + process.arch, 'renderer.node'));\n        } catch (error2) {\n            console.log('method 2 failed:', error2.message);\n            try {\n                const rendererPath = join(__dirname, '..', 'prebuilds', process.platform + '-' + process.arch, 'renderer.node');\n                return require(rendererPath);\n            } catch (error3) {\n                console.log('method 3 failed:', error3.message);\n                throw new Error('all methods to load the native module failed: please open an issue');\n            }\n        }\n    }\n}\n\n\n/**\n * Load the native renderer module.\n * The JSDoc return type tells Rollup/TS that the native exports include a constructor `Renderer`.\n * @deprecated - use const [renderer, ops] = Renderer.create(\"Image\", 800, 600)\n * @returns {{\n *   Renderer: new(...args: any[]) => Renderer,\n *   FULLSCREEN: number,\n *   RESIZABLE: number,\n *   UNDECORATED: number,\n *   ALWAYS_RUN: number,\n *   VSYNC_HINT: number,\n *   MSAA_4X_HINT: number,\n *   hideConsole: ()=> void,\n *   showConsole: () => void,\n * }}\n */\nfunction loadRendererSea({ assetGetterSync = null } = {}) {\n    const require = createRequire(__filename || import.meta.url);\n\n    cleanupOldTempDirs('assets-extract');\n\n    // 1) dev: node-gyp-build\n    try {\n        return require('node-gyp-build')(path.join(__dirname, '..'));\n    } catch (e) { /* fall through */ }\n\n    // 2) dev: on-disk prebuild path\n    try {\n        const platformTag = `${process.platform}-${process.arch}`;\n        const p = path.join(__dirname, '..', 'prebuilds', platformTag, 'renderer.node');\n        return require(p);\n    } catch (e) { /* fall through */ }\n\n    // 3) embedded assets extraction path (synchronous)\n    // if assetGetterSync not provided, try node:sea synchronously\n    let getter = assetGetterSync;\n    if (!getter) {\n        try {\n            const sea = require('node:sea');\n            if (sea && typeof sea.getAsset === 'function') {\n                // node:sea.getAsset is usually sync; wrap to unify return value\n                getter = (name) => {\n                    try {\n                        return sea.getAsset(name); // may return string or ArrayBuffer\n                    } catch (err) {\n                        return null;\n                    }\n                };\n            }\n        } catch (err) {\n            // no node:sea available - we can't extract assets\n            getter = null;\n        }\n    }\n\n    if (!getter) {\n        throw new Error('Could not locate renderer native module: tried node-gyp-build, prebuilds on disk, and no asset getter available for embedded assets.');\n    }\n\n    // platform-specific asset names\n    const platformTag = `${process.platform}-${process.arch}`;\n    const nodeAssetName = path.posix.join('prebuilds', platformTag, 'renderer.node');\n    const dllAssetName1 = process.platform === 'win32' ? path.posix.join('prebuilds', platformTag, 'glfw3.dll') : null;\n    const dllAssetName2 = process.platform === 'win32' ? path.posix.join('prebuilds', platformTag, 'raylib.dll') : null;\n\n\n    // get assets\n    const nodeAsset = getter(nodeAssetName);\n    if (!nodeAsset) {\n        throw new Error(`Embedded asset not found: ${nodeAssetName}`);\n    }\n    const nodeBuf = bufferFromAsset(nodeAsset);\n    if (!nodeBuf) throw new Error('Failed to convert node asset to Buffer');\n\n    // prepare temp\n    const tempDir = createRunTempDir('assets-extract');\n    const nodeDestName = `renderer.node`;\n    const nodeDest = path.join(tempDir, nodeDestName);\n\n    // extract node\n    writeFileAtomicSync(nodeDest, nodeBuf);\n    try { fs.chmodSync(nodeDest, 0o755); } catch (e) { /* ignore */ }\n\n    // extract dll if present and prepend to PATH/LD...\n    if (dllAssetName1) {\n        const dllAsset = getter(dllAssetName1);\n        const dllAsset2 = getter(dllAssetName2);\n        if (dllAsset) {\n            const dllBuf = bufferFromAsset(dllAsset);\n            const dllDestName = dllAssetName1.split(\"/\").pop();\n            const dllDest = path.join(tempDir, dllDestName);\n            writeFileAtomicSync(dllDest, dllBuf);\n            prependPathForLibraries(tempDir);\n            // do not chmod DLL; Windows doesn't use exec bits\n        } else {\n            // Not fatal but warn (dependent DLL missing)\n            console.warn(`Warning: embedded DLL not found: ${dllAssetName1}`);\n        }\n\n        if (dllAsset2) {\n            const dllBuf = bufferFromAsset(dllAsset2);\n            const dllDestName = dllAssetName2.split(\"/\").pop();\n            const dllDest = path.join(tempDir, dllDestName);\n            writeFileAtomicSync(dllDest, dllBuf);\n            prependPathForLibraries(tempDir);\n            // do not chmod DLL; Windows doesn't use exec bits\n        } else {\n            // Not fatal but warn (dependent DLL missing)\n            console.warn(`Warning: embedded DLL not found: ${dllAssetName2}`);\n        }\n    } else {\n        // On linux/darwin we still add tempDir to dynamic loader search paths as a best-effort\n        prependPathForLibraries(tempDir);\n    }\n\n    // schedule best-effort cleanup at process exit (ignore errors)\n    // process.on('exit', () => {\n    //     try { cleanupDirBestEffort(tempDir); } catch (e) { /* ignore */ }\n    // });\n\n    // console.log(nodeDest);\n\n    return require(nodeDest);\n}\n\nconst CTRL_JS_WRITE_IDX = 0;\r\nconst CTRL_DIRTY_FLAG = 3;\r\nconst CTRL_DIRTY_COUNT = 4;\r\nconst CTRL_DIRTY_REGIONS = 5;\r\nconst MAX_DIRTY_REGIONS = 256;\r\n\r\n// control buffer size in bytes\r\nconst CONTROL_BUFFER_SIZE = (5 + MAX_DIRTY_REGIONS * 4) * 4;  // 4116 bytes\n\nclass PixelBuffer {\r\n    /**\r\n     * Create a pixel buffer - our fundamental drawing surface\r\n     * @param {Renderer} renderer - The rendering backend (C++/NAPI)\r\n     * @param {number} width - Buffer width in pixels\r\n     * @param {number} height - Buffer height in pixels\r\n     */\r\n    constructor(renderer, width, height, debug = false) {\r\n        this.renderer = renderer;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.DEBUG = debug;\r\n\r\n\r\n        // const size = width * height * 4; // RGBA = 4 bytes per pixel\r\n\r\n        // // get's copy of buffer from C++, not shared because of ownership complexity and double buffering in c++ side\r\n        // this.bufferId = renderer.createSharedBuffer(size, width, height);\r\n\r\n        // {\r\n        //     /**\r\n        //     * @type {Uint8Array}\r\n        //      */\r\n        //     let temp = renderer.getBufferData(this.bufferId);\r\n        //     /**\r\n        //      * @type {Uint8Array}\r\n        //      */\r\n        //     this.data = new Uint8Array(new SharedArrayBuffer(size));\r\n        //     this.data.set(new Uint8Array(temp));\r\n        //     temp = null;\r\n        // }\r\n\r\n\r\n        // // Create GPU texture for this buffer\r\n        // this.textureId = renderer.loadTextureFromBuffer(this.bufferId, width, height);\r\n        // this.needsUpload = false;\r\n        // new: createa  zero copy buffer \r\n\r\n        // triple buffering\r\n        const bufferSize = width * height * 4;\r\n        this.buffers = [\r\n            new ArrayBuffer(bufferSize),\r\n            new ArrayBuffer(bufferSize),\r\n            new ArrayBuffer(bufferSize)\r\n        ];\r\n\r\n\r\n        this.controlBuffer = new Uint32Array(new ArrayBuffer(CONTROL_BUFFER_SIZE));\r\n\r\n        // iinitialize zero copy shared memory in C++\r\n        this.textureId = renderer.initSharedBuffers(\r\n            this.buffers[0],\r\n            this.buffers[1],\r\n            this.buffers[2],\r\n            this.controlBuffer.buffer,\r\n            width,\r\n            height\r\n        );\r\n\r\n        //    console.log(this.textureId)\r\n        this.views = [\r\n            new Uint8ClampedArray(this.buffers[0]),\r\n            new Uint8ClampedArray(this.buffers[1]),\r\n            new Uint8ClampedArray(this.buffers[2])\r\n        ];\r\n\r\n        this.dirtyTracker = new DirtyRegionTracker(this.controlBuffer);\r\n        this.data = this.getCurrentBuffer();\r\n\r\n        if (this.DEBUG)\r\n            console.log(`Created ${width}x${height} buffer (${width * height * 4} bytes)`);\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {number} x \r\n     * @param {number} y \r\n     * @param {number} w \r\n     * @param {number} h \r\n     */\r\n    markRegion(x, y , w  = 1, h = 1){\r\n      this.dirtyTracker.addRegion(x, y, w, h);\r\n      this.needsUpload = true;\r\n    }\r\n\r\n    getCurrentBuffer() {\r\n        const idx = Atomics.load(this.controlBuffer, CTRL_JS_WRITE_IDX);\r\n        return this.views[idx];\r\n    }\r\n\r\n    setPixel(x, y, r, g, b, a = 255) {\r\n        const buffer = this.getCurrentBuffer();\r\n        const idx = (y * this.width + x) * 4;\r\n\r\n        buffer[idx] = r;\r\n        buffer[idx + 1] = g;\r\n        buffer[idx + 2] = b;\r\n        buffer[idx + 3] = a;\r\n\r\n        this.dirtyTracker.addRegion(x, y, 1, 1);\r\n    }\r\n\r\n    getPixel(x, y) {\r\n        const buffer = this.getCurrentBuffer();\r\n        const idx = (y * this.width + x) * 4;\r\n        return {\r\n            r: buffer[idx],\r\n            g: buffer[idx + 1],\r\n            b: buffer[idx + 2],\r\n            a: buffer[idx + 3]\r\n        };\r\n    }\r\n\r\n\r\n\r\n    /**\r\n     * Convert 2D coordinate to 1D memory index\r\n     * This is THE fundamental operation - understand this and you understand pixel buffers\r\n     * @param {number} x \r\n     * @param {number} y \r\n     */\r\n    coordToIndex(x, y) {\r\n        // Bounds checking is critical - out of bounds = memory corruption or crash (nasty segfault)\r\n        if (x < 0 || x >= this.width || y < 0 || y >= this.height) {\r\n            return -1; // Invalid coordinate\r\n        }\r\n        return (y * this.width + x) * 4;\r\n    }\r\n\r\n    /**\r\n     * Fill entire buffer with a color\r\n    * \r\n     * @param {number} r \r\n     * @param {number} g \r\n     * @param {number} b \r\n     * @param {number} a \r\n     */\r\n    clear(r, g, b, a = 255) {\r\n\r\n        const startTime = performance.now();\r\n\r\n\r\n        // Pack RGBA into a single 32-bit value: (A << 24) | (B << 16) | (G << 8) | R\r\n        const color = ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((g & 0xFF) << 8) | (r & 0xFF);\r\n\r\n        // const uint32View = new Uint32Array(this.data.buffer); old way \r\n        const uint32View = new Uint32Array(this.data.buffer); // new way\r\n\r\n        // Native fill - much faster than JS loop\r\n        uint32View.fill(color);\r\n        this.dirtyTracker.addRegion(0, 0, this.width, this.height); // proc the control buffer dirty region count\r\n\r\n        // this.renderer.updateBufferData(this.bufferId, this.data);\r\n        this.needsUpload = true;\r\n\r\n        const elapsed = performance.now() - startTime;\r\n        if (this.DEBUG)\r\n            console.log(`Clear (${this.width}x${this.height}): ${elapsed.toFixed(2)}ms`);\r\n    }\r\n\r\n    /**\r\n     * Upload buffer changes to GPU texture\r\n     * Call this after all your pixel operations are done\r\n     *\r\n     */\r\n    upload() {\r\n        if (!this.needsUpload) return;\r\n\r\n        this.dirtyTracker.markDirty();\r\n        // const startTime = performance.now();\r\n        // this.renderer.updateTextureFromBuffer(this.textureId, this.bufferId);\r\n\r\n\r\n        //     const elapsed = performance.now() - startTime;\r\n        // if (this.DEBUG) \r\n        //     console.log(`GPU upload: ${elapsed.toFixed(2)}ms`);\r\n    }\r\n\r\n    /**\r\n     * Draw this buffer to the screen at specified position\r\n     * @param {number} x \r\n     * @param {number} y \r\n     */\r\n    draw(x, y) {\r\n\r\n        this.renderer.drawTexture(this.textureId, { x, y });\r\n        if (this.needsUpload) {\r\n            this.needsUpload = false;\r\n            this.data = this.getCurrentBuffer(); // rotate\r\n        }\r\n\r\n    }\r\n\r\n    /**\r\n     * Grow the buffer to a larger size, preserving existing pixels.\r\n     * If the requested size is smaller or equal, this is a no-op.\r\n     * @param {number} newWidth\r\n     * @param {number} newHeight\r\n     */\r\n    grow(newWidth, newHeight) {\r\n        // TODO: implement\r\n    }\r\n\r\n    /**\r\n     * Clean up resources\r\n     */\r\n    destroy() {\r\n        // TODO: implement\r\n    }\r\n\r\n\r\n    /**\r\n * Copy from cache buffer to canvas\r\n * @param {CacheBuffer|PixelBuffer} source - Source buffer\r\n * @param {number} sx - Source X\r\n * @param {number} sy - Source Y  \r\n * @param {number} sw - Source width (or full width)\r\n * @param {number} sh - Source height (or full height)\r\n * @param {number} dx - Dest X (default 0)\r\n * @param {number} dy - Dest Y (default 0)\r\n */\r\nblitFrom(source, sx = 0, sy = 0, sw = source.width, sh = source.height, dx = 0, dy = 0) {\r\n        const srcData = source.data;\r\n        const dstData = this.data;\r\n\r\n        // Clamp to bounds\r\n        sw = Math.min(sw, source.width - sx, this.width - dx);\r\n        sh = Math.min(sh, source.height - sy, this.height - dy);\r\n\r\n        if (sw <= 0 || sh <= 0) return;\r\n\r\n        // Fast path: full-width copy (can use set() directly)\r\n        if (sx === 0 && dx === 0 && sw === source.width && sw === this.width) {\r\n            const srcStart = sy * source.width * 4;\r\n            const dstStart = dy * this.width * 4;\r\n            const length = sh * this.width * 4;\r\n            dstData.set(srcData.subarray(srcStart, srcStart + length), dstStart);\r\n        } else {\r\n            // Row-by-row copy\r\n            for (let row = 0; row < sh; row++) {\r\n                const srcOffset = ((sy + row) * source.width + sx) * 4;\r\n                const dstOffset = ((dy + row) * this.width + dx) * 4;\r\n                const rowBytes = sw * 4;\r\n                dstData.set(srcData.subarray(srcOffset, srcOffset + rowBytes), dstOffset);\r\n            }\r\n        }\r\n\r\n        // Mark region dirty\r\n        this.dirtyTracker.addRegion(dx, dy, sw, sh);\r\n        this.needsUpload = true;\r\n    }\r\n\r\n    /**\r\n     * Shorthand: blit entire source to (0,0)\r\n     */\r\n    blit(source) {\r\n        this.blitFrom(source, 0, 0, source.width, source.height, 0, 0);\r\n    }\r\n}\r\n\r\n\r\n\r\nclass CacheBuffer {\r\n    constructor(width, height) {\r\n        this.width = width;\r\n        this.height = height;\r\n        this.data = new Uint8ClampedArray(width * height * 4);\r\n        this.needsUpload = false; // TODO: remove, use for now to trick primitives to think they are writing to a pixel buffer\r\n    }\r\n\r\n    clear(r, g, b, a = 255) {\r\n        const color = ((a & 0xFF) << 24) | ((b & 0xFF) << 16) |\r\n            ((g & 0xFF) << 8) | (r & 0xFF);\r\n        new Uint32Array(this.data.buffer).fill(color);\r\n    }\r\n}\n\n// new zero copy control bufer tracker \r\n\r\nclass DirtyRegionTracker {\r\n    constructor(controlBuffer) {\r\n        // controlBuffer is the Uint32Array pixel_buffer passed to C++\r\n        this.control = controlBuffer;\r\n        this.maxRegions = 256;\r\n    }\r\n\r\n    addRegion(x, y, w, h) {\r\n        const count = Atomics.load(this.control, CTRL_DIRTY_COUNT); // CTRL_DIRTY_COUNT offset\r\n\r\n        if (count >= this.maxRegions) {\r\n            this.control[CTRL_DIRTY_REGIONS + 0] = 0;\r\n            this.control[CTRL_DIRTY_REGIONS + 1] = 0;\r\n            this.control[CTRL_DIRTY_REGIONS + 2] = 9999;\r\n            this.control[CTRL_DIRTY_REGIONS + 3] = 9999;\r\n            Atomics.store(this.control, CTRL_DIRTY_COUNT, 1);\r\n            return\r\n        }\r\n\r\n        const offset = 5 + (count * 4);\r\n        this.control[offset + 0] = x | 0;  // Ensure u32\r\n        this.control[offset + 1] = y | 0;\r\n        this.control[offset + 2] = w | 0;\r\n        this.control[offset + 3] = h | 0;\r\n\r\n        // Increment count\r\n        Atomics.store(this.control, CTRL_DIRTY_COUNT, count + 1);\r\n    }\r\n\r\n    markDirty() {\r\n        Atomics.store(this.control, CTRL_DIRTY_FLAG, 1);  // CTRL_DIRTY_FLAG\r\n    }\r\n\r\n    clear() {\r\n        Atomics.store(this.control, CTRL_DIRTY_COUNT, 0);\r\n    }\r\n\r\n    optimize() {\r\n        const count = Atomics.load(this.control, CTRL_DIRTY_COUNT);\r\n        if (count <= 1) return;\r\n\r\n        // Simple optimization: merge regions that overlap\r\n        let writeIdx = 0;\r\n        for (let i = 0; i < count; i++) {\r\n            const offset = 5 + (i * 4);\r\n            let x = this.control[offset + 0];\r\n            let y = this.control[offset + 1];\r\n            let w = this.control[offset + 2];\r\n            let h = this.control[offset + 3];\r\n\r\n            // Check if this region overlaps with any previous\r\n            let merged = false;\r\n            for (let j = 0; j < writeIdx; j++) {\r\n                const prevOffset = 5 + (j * 4);\r\n                const px = this.control[prevOffset + 0];\r\n                const py = this.control[prevOffset + 1];\r\n                const pw = this.control[prevOffset + 2];\r\n                const ph = this.control[prevOffset + 3];\r\n\r\n                // Check overlap\r\n                if (!(x > px + pw || x + w < px || y > py + ph || y + h < py)) {\r\n                    // Merge: expand previous region to contain both\r\n                    const minX = Math.min(px, x);\r\n                    const minY = Math.min(py, y);\r\n                    const maxX = Math.max(px + pw, x + w);\r\n                    const maxY = Math.max(py + ph, y + h);\r\n\r\n                    this.control[prevOffset + 0] = minX;\r\n                    this.control[prevOffset + 1] = minY;\r\n                    this.control[prevOffset + 2] = maxX - minX;\r\n                    this.control[prevOffset + 3] = maxY - minY;\r\n\r\n                    merged = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!merged) {\r\n                // Copy region to write position\r\n                if (writeIdx !== i) {\r\n                    const writeOffset = 5 + (writeIdx * 4);\r\n                    this.control[writeOffset + 0] = x;\r\n                    this.control[writeOffset + 1] = y;\r\n                    this.control[writeOffset + 2] = w;\r\n                    this.control[writeOffset + 3] = h;\r\n                }\r\n                writeIdx++;\r\n            }\r\n        }\r\n\r\n        Atomics.store(this.control, CTRL_DIRTY_COUNT, writeIdx);\r\n    }\r\n\r\n}\r\n\r\n\r\nclass BatchedDirtyTracker extends DirtyRegionTracker {\r\n    constructor(controlBuffer) {\r\n        super(controlBuffer);\r\n        this.pendingFlush = false;\r\n    }\r\n\r\n    addRegion(x, y, w, h) {\r\n        super.addRegion(x, y, w, h);\r\n\r\n        // schedule flush if not already scheduled\r\n        if (!this.pendingFlush) {\r\n            this.pendingFlush = true;\r\n            queueMicrotask(() => this.flush());\r\n        }\r\n    }\r\n\r\n    flush() {\r\n        this.pendingFlush = false;\r\n        this.optimize();\r\n        this.markDirty();\r\n    }\r\n}\r\n\r\n\r\n\r\nclass CoordinateSystem {\r\n    constructor(canvasX, canvasY, canvasWidth, canvasHeight) {\r\n        this.canvasX = canvasX;\r\n        this.canvasY = canvasY;\r\n        this.canvasWidth = canvasWidth;\r\n        this.canvasHeight = canvasHeight;\r\n        this.scale = 1.0;\r\n    }\r\n\r\n    screenToCanvas(screenX, screenY) {\r\n        return {\r\n            x: Math.floor((screenX - this.canvasX) / this.scale),\r\n            y: Math.floor((screenY - this.canvasY) / this.scale)\r\n        };\r\n    }\r\n\r\n    canvasToScreen(canvasX, canvasY) {\r\n        return {\r\n            x: Math.floor(canvasX * this.scale + this.canvasX),\r\n            y: Math.floor(canvasY * this.scale + this.canvasY)\r\n        };\r\n    }\r\n\r\n    isPointInCanvas(screenX, screenY) {\r\n        const canvasPos = this.screenToCanvas(screenX, screenY);\r\n        return canvasPos.x >= 0 && canvasPos.x < this.canvasWidth &&\r\n            canvasPos.y >= 0 && canvasPos.y < this.canvasHeight;\r\n    }\r\n\r\n    setScale(newScale) {\r\n        this.scale = Math.max(0.1, Math.min(5.0, newScale));\r\n    }\r\n}\r\n\r\n\r\n\r\n\r\nclass ColorTheory {\r\n    static RGBtoHSV(r, g, b) {\r\n        r /= 255; g /= 255; b /= 255;\r\n        const max = Math.max(r, g, b);\r\n        const min = Math.min(r, g, b);\r\n        const delta = max - min;\r\n\r\n        let h = 0, s = 0, v = max;\r\n\r\n        if (delta !== 0) {\r\n            s = delta / max;\r\n            if (r === max) h = (g - b) / delta;\r\n            else if (g === max) h = 2 + (b - r) / delta;\r\n            else h = 4 + (r - g) / delta;\r\n\r\n            h *= 60;\r\n            if (h < 0) h += 360;\r\n        }\r\n\r\n        return { h, s: s * 100, v: v * 100 };\r\n    }\r\n\r\n    static HSVtoRGB(h, s, v) {\r\n        s /= 100; v /= 100;\r\n        const c = v * s;\r\n        const x = c * (1 - Math.abs((h / 60) % 2 - 1));\r\n        const m = v - c;\r\n\r\n        let r, g, b;\r\n        if (h >= 0 && h < 60) [r, g, b] = [c, x, 0];\r\n        else if (h < 120) [r, g, b] = [x, c, 0];\r\n        else if (h < 180) [r, g, b] = [0, c, x];\r\n        else if (h < 240) [r, g, b] = [0, x, c];\r\n        else if (h < 300) [r, g, b] = [x, 0, c];\r\n        else [r, g, b] = [c, 0, x];\r\n\r\n        return {\r\n            r: Math.floor((r + m) * 255),\r\n            g: Math.floor((g + m) * 255),\r\n            b: Math.floor((b + m) * 255)\r\n        };\r\n    }\r\n\r\n\r\n    static complementary(color) {\r\n        const hsv = this.RGBtoHSV(color.r, color.g, color.b);\r\n        hsv.h = (hsv.h + 180) % 360;\r\n        return this.HSVtoRGB(hsv.h, hsv.s, hsv.v);\r\n    }\r\n\r\n    static analogous(color, spread = 30) {\r\n        const hsv = this.RGBtoHSV(color.r, color.g, color.b);\r\n        return [\r\n            this.HSVtoRGB((hsv.h - spread + 360) % 360, hsv.s, hsv.v),\r\n            color,\r\n            this.HSVtoRGB((hsv.h + spread) % 360, hsv.s, hsv.v)\r\n        ];\r\n    }\r\n}\r\n\r\n\r\n\r\nclass PerformanceMonitor {\r\n    constructor() {\r\n        this.metrics = new Map();\r\n        this.frameTimes = [];\r\n        this.samples = 60; // Keep last 60 frames\r\n        this.enabled = false;\r\n    }\r\n\r\n    start(name) {\r\n\r\n        this.metrics.set(name, {\r\n            start: performance.now(),\r\n            calls: (this.metrics.get(name)?.calls || 0) + 1\r\n        });\r\n    }\r\n\r\n    end(name) {\r\n        const metric = this.metrics.get(name);\r\n        if (metric) {\r\n            const duration = performance.now() - metric.start;\r\n            metric.total = (metric.total || 0) + duration;\r\n            metric.max = Math.max(metric.max || 0, duration);\r\n            metric.min = Math.min(metric.min || Infinity, duration);\r\n        }\r\n    }\r\n\r\n    recordFrameTime(startTime) {\r\n        const frameTime = performance.now() - startTime;\r\n        this.frameTimes.push(frameTime);\r\n        if (this.frameTimes.length > this.samples) {\r\n            this.frameTimes.shift();\r\n        }\r\n    }\r\n\r\n    logMetrics() {\r\n        console.log('Performance Report:');\r\n        for (const [name, metric] of this.metrics) {\r\n            const avg = metric.total / metric.calls;\r\n            console.log(`  ${name}: ${avg.toFixed(2)}ms avg (${metric.min.toFixed(2)}-${metric.max.toFixed(2)}ms)`);\r\n        }\r\n\r\n        const avgFrameTime = this.frameTimes.reduce((a, b) => a + b) / this.frameTimes.length;\r\n        console.log(`  Frame Time: ${avgFrameTime.toFixed(2)}ms (${(1000 / avgFrameTime).toFixed(1)} FPS)`);\r\n    }\r\n}\r\n\r\n\r\n\r\n\r\n/**\r\n * Normalizes RGB(A) color components to the range of 0.0 to 1.0.\r\n * \r\n * @param {number} r The red component (0-255).\r\n * @param {number} g The green component (0-255).\r\n * @param {number} b The blue component (0-255).\r\n * @param {number} [a] The optional alpha component (0.0-1.0).\r\n * @returns {{r: number, g: number, b: number, a?: number}} An object with normalized values.\r\n */\r\nfunction normalizeRGBA(r, g, b, a) {\r\n    const normalized = {\r\n        r: r / 255.0,\r\n        g: g / 255.0,\r\n        b: b / 255.0\r\n    };\r\n\r\n    // If the 'a' parameter is provided, add the alpha channel (which is already 0.0-1.0 in standard usage)\r\n    if (typeof a !== 'undefined' && a !== null) {\r\n        normalized.a = a / 255;\r\n    }\r\n\r\n    return normalized;\r\n}\r\n\r\n\r\n\r\n// /**\r\n//  * \r\n//  * @param {{data: Uint8Array, width: number, height: number}} img \r\n//  * @param {} canvas \r\n//  */\r\n// export function imageToCanvasNN(img, canvas) {\r\n//     const tracker = new DirtyRegionTracker(canvas)\r\n//     const cdata = canvas.data;\r\n//     const idata = img.data;\r\n//     const srcWidth = img.width;\r\n//     const srcHeight = img.height;\r\n//     const destWidth = canvas.width\r\n//     const destHeight = canvas.height\r\n//     const scaleX = srcWidth / destWidth;\r\n//     const scaleY = srcHeight / destHeight;\r\n\r\n//     for (let y = 0; y < destHeight; y++) {\r\n//         for (let x = 0; x < destWidth; x++) {\r\n//             const srcX = Math.min(Math.floor(x * scaleX), srcWidth - 1);\r\n//             const srcY = Math.min(Math.floor(y * scaleY), srcHeight - 1);\r\n//             const idxSrc = (srcY * srcWidth + srcX) * 4;\r\n//             const idxDest = (y * destWidth + x) * 4;\r\n\r\n//             cdata[idxDest] = idata[idxSrc];\r\n//             cdata[idxDest + 1] = idata[idxSrc + 1];\r\n//             cdata[idxDest + 2] = idata[idxSrc + 2];\r\n//             cdata[idxDest + 3] = idata[idxSrc + 3];\r\n//         }\r\n//     }\r\n\r\n//     tracker.markRect(0, 0, canvas.width, canvas.height);\r\n//     tracker.flush();\r\n//     canvas.upload();\r\n// }\r\n\r\n\r\n/**\r\n * @param {PixelBuffer} canvas\r\n * @param {{data: Uint8Array, width: number, height: number}} img \r\n * @param {{data: Uint8Array, width: number, height: number}} canvas \r\n * @param {\"bilinear\" | \"nn\"} algorithm - The resizing algorithm: 'bilinear' for bilinear interpolation or 'nn' for nearest neighbor. Defaults to 'bi'.\r\n * @param {number} destWidth - The destination width. Defaults to canvas.width.\r\n * @param {number} destHeight - The destination height. Defaults to canvas.height.\r\n */\r\nfunction imageToCanvas(img, canvas, algorithm = 'bilinear', destWidth = canvas.width, destHeight = canvas.height) {\r\n    const tracker = canvas.dirtyTracker;\r\n    const cdata = canvas.data;\r\n    const idata = img.data;\r\n    const srcWidth = img.width;\r\n    const srcHeight = img.height;\r\n    const scaleX = srcWidth / destWidth;\r\n    const scaleY = srcHeight / destHeight;\r\n\r\n    for (let y = 0; y < destHeight; y++) {\r\n        for (let x = 0; x < destWidth; x++) {\r\n            const idxDest = (y * destWidth + x) * 4;\r\n\r\n            if (algorithm === 'nn') {\r\n\r\n                const srcX = Math.floor((x + 0.5) * scaleX);\r\n                const srcY = Math.floor((y + 0.5) * scaleY);\r\n                const clampedX = Math.max(0, Math.min(srcX, srcWidth - 1));\r\n                const clampedY = Math.max(0, Math.min(srcY, srcHeight - 1));\r\n                for (let c = 0; c < 4; c++) {\r\n                    cdata[idxDest + c] = idata[(clampedY * srcWidth + clampedX) * 4 + c];\r\n                }\r\n            } else {\r\n\r\n                const srcX = (x + 0.5) * scaleX - 0.5;\r\n                const srcY = (y + 0.5) * scaleY - 0.5;\r\n                const x1 = Math.floor(srcX);\r\n                const y1 = Math.floor(srcY);\r\n                const x2 = Math.min(x1 + 1, srcWidth - 1);\r\n                const y2 = Math.min(y1 + 1, srcHeight - 1);\r\n                const dx = srcX - x1;\r\n                const dy = srcY - y1;\r\n\r\n                for (let c = 0; c < 4; c++) {\r\n                    const p11 = idata[(y1 * srcWidth + x1) * 4 + c];\r\n                    const p12 = idata[(y1 * srcWidth + x2) * 4 + c];\r\n                    const p21 = idata[(y2 * srcWidth + x1) * 4 + c];\r\n                    const p22 = idata[(y2 * srcWidth + x2) * 4 + c];\r\n                    const interpX1 = p11 * (1 - dx) + p12 * dx;\r\n                    const interpX2 = p21 * (1 - dx) + p22 * dx;\r\n                    const interp = interpX1 * (1 - dy) + interpX2 * dy;\r\n                    cdata[idxDest + c] = Math.round(interp);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    // writing to real canvas not cache\r\n    if (tracker) {\r\n        tracker.addRegion(0, 0, destWidth, destHeight);\r\n        canvas.needsUpload = true;\r\n    }\r\n\r\n    // tracker.flush();\r\n    // canvas.upload();\r\n}\r\n\r\n\r\n/**\r\n * @param {PixelBuffer} canvas\r\n * @param {{data: Uint8Array, width: number, height: number}} atlas \r\n * @param {{x: number, y: number, width: number, height: number}} srcRect \r\n * @param {{data: Uint8Array, width: number, height: number}} canvas \r\n * @param {{x: number, y: number, width: number, height: number}} destRect \r\n * @param {\"bilinear\" | \"nn\"} algorithm - The resizing algorithm: 'bi' for bilinear interpolation or 'nn' for nearest neighbor. Defaults to 'bi'.\r\n */\r\nfunction drawAtlasRegionToCanvas(atlas, srcRect, canvas, destRect, algorithm = 'bilinear') {\r\n    const tracker = canvas.dirtyTracker;\r\n    const cdata = canvas.data;\r\n    const adata = atlas.data;\r\n    const atlasWidth = atlas.width;\r\n    const srcWidth = srcRect.width;\r\n    const srcHeight = srcRect.height;\r\n    const destWidth = destRect.width;\r\n    const destHeight = destRect.height;\r\n    const scaleX = srcWidth / destWidth;\r\n    const scaleY = srcHeight / destHeight;\r\n\r\n    for (let dy = 0; dy < destHeight; dy++) {\r\n        for (let dx = 0; dx < destWidth; dx++) {\r\n            const idxDest = ((dy + destRect.y) * canvas.width + (dx + destRect.x)) * 4;\r\n\r\n            if (algorithm === 'nn') {\r\n                // Nearest neighbor interpolation\r\n                const srcX = srcRect.x + Math.floor((dx + 0.5) * scaleX);\r\n                const srcY = srcRect.y + Math.floor((dy + 0.5) * scaleY);\r\n                const clampedX = Math.max(srcRect.x, Math.min(srcX, srcRect.x + srcWidth - 1));\r\n                const clampedY = Math.max(srcRect.y, Math.min(srcY, srcRect.y + srcHeight - 1));\r\n                for (let c = 0; c < 4; c++) { // RGBA channels\r\n                    cdata[idxDest + c] = adata[(clampedY * atlasWidth + clampedX) * 4 + c];\r\n                }\r\n            } else {\r\n                // Bilinear interpolation (default)\r\n                const srcX = srcRect.x + (dx + 0.5) * scaleX - 0.5;\r\n                const srcY = srcRect.y + (dy + 0.5) * scaleY - 0.5;\r\n                const x1 = Math.floor(srcX);\r\n                const y1 = Math.floor(srcY);\r\n                const x2 = Math.min(x1 + 1, atlasWidth - 1);\r\n                const y2 = Math.min(y1 + 1, atlas.height - 1);\r\n                const dxFrac = srcX - x1;\r\n                const dyFrac = srcY - y1;\r\n\r\n                for (let c = 0; c < 4; c++) { // RGBA channels\r\n                    const p11 = adata[(y1 * atlasWidth + x1) * 4 + c];\r\n                    const p12 = adata[(y1 * atlasWidth + x2) * 4 + c];\r\n                    const p21 = adata[(y2 * atlasWidth + x1) * 4 + c];\r\n                    const p22 = adata[(y2 * atlasWidth + x2) * 4 + c];\r\n                    const interpX1 = p11 * (1 - dxFrac) + p12 * dxFrac;\r\n                    const interpX2 = p21 * (1 - dxFrac) + p22 * dxFrac;\r\n                    const interp = interpX1 * (1 - dyFrac) + interpX2 * dyFrac;\r\n                    cdata[idxDest + c] = Math.round(interp);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    if (tracker) {\r\n        tracker.addRegion(destRect.x, destRect.y, destRect.width, destRect.height);\r\n        canvas.needsUpload = true;\r\n    }\r\n\r\n\r\n\r\n    // tracker.flush();\r\n    // canvas.upload();\r\n}\r\n\r\n\r\n/**\r\n * utility for spritesheet to frames\r\n * @param {number} rows \r\n * @param {number} cols \r\n * @param {number} startX \r\n * @param {number} startY \r\n * @param {number} tileSize \r\n * @returns {Array<{offset: {x: number, y: number}>}\r\n */\r\nfunction genFrames(rows, cols, startX, startY, tileSize) {\r\n    const frames = [];\r\n    for (let r = 0; r < rows; r++) {\r\n        for (let c = 0; c < cols; c++) {\r\n            frames.push({ offset: { x: startX + c * tileSize, y: startY + r * tileSize } });\r\n        }\r\n    }\r\n    return frames;\r\n}\n\nclass InputMap {\r\n    /**\r\n     * \r\n     * @param {*} input - renderer.input \r\n     */\r\n    constructor(input) {\r\n        this.input = input;\r\n        this.actions = new Map();\r\n        this.mouseActions = new Map();\r\n        this.callbackIds = [];\r\n    }\r\n\r\n\r\n    /**\r\n     * \r\n     * @param {string} actionName \r\n     * @param {Array<string>} keys \r\n     */\r\n    mapAction(actionName, keys) {\r\n        if (typeof keys === 'string') {\r\n            keys = [keys];\r\n        }\r\n        this.actions.set(actionName, keys);\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {string} actionName \r\n     * @param {Array<string>} keys \r\n     */\r\n    MapMouseAction(actionName, keys) {\r\n        if (typeof keys === 'string') {\r\n            keys = [keys];\r\n        }\r\n        this.mouseActions.set(actionName, keys);\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {string} actionName \r\n     * @returns {bool}\r\n     */\r\n    isMouseActionActive(actionName) {\r\n        const keys = this.mouseActions.get(actionName);\r\n        if (!keys) return false;\r\n\r\n        // console.log(\"checking mouse: \", keys)\r\n\r\n        return keys.some(key => this.input.isMouseButtonDown(key));\r\n    }\r\n    /**\r\n * \r\n * @param {string} actionName \r\n * @returns {bool}\r\n */\r\n    isMousePressed(actionName) {\r\n        const keys = this.mouseActions.get(actionName);\r\n        if (!keys) return false;\r\n\r\n        // console.log(\"checking mouse: \", keys)\r\n\r\n        return keys.some(key => this.input.isMouseButtonPressed(key));\r\n    }\r\n\r\n    /**\r\n * \r\n * @param {string} actionName \r\n * @returns {bool}\r\n */\r\n    IsMouseActionReleased(actionName) {\r\n        const keys = this.mouseActions.get(actionName);\r\n        if (!keys) return false;\r\n\r\n        // console.log(\"checking mouse: \", keys)\r\n\r\n        return keys.some(key => this.input.isMouseButtonReleased(key));\r\n    }\r\n\r\n    /**\r\n     * @returns {{x: number, y: number}}\r\n     */\r\n    get mousePosition() {\r\n        return this.input.getMousePosition();\r\n    }\r\n\r\n\r\n    /**\r\n    * @returns {{x: number, y: number}}\r\n    */\r\n    get mouseDelta() {\r\n        return this.input.getMouseDelta();\r\n    }\r\n\r\n    /**\r\n    * @returns {number}\r\n    */\r\n    get mouseWheelDelta() {\r\n        return this.input.getMouseWheelDelta();\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {string} actionName - isKeyDown \r\n     * @returns \r\n     */\r\n    isActionActive(actionName) {\r\n        const keys = this.actions.get(actionName);\r\n        if (!keys) return false;\r\n\r\n        return keys.some(key => this.input.isKeyDown(key));\r\n    }\r\n\r\n\r\n    /**\r\n     * \r\n     * @param {string} actionName - isKeyPressed\r\n     * @returns \r\n     */\r\n    wasActionTriggered(actionName) {\r\n        const keys = this.actions.get(actionName);\r\n        if (!keys) return false;\r\n\r\n        return keys.some(key => this.input.isKeyPressed(key));\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {string} actionName - isKeyReleased \r\n     * @returns \r\n     */\r\n    isActionReleased(actionName) {\r\n        const keys = this.actions.get(actionName);\r\n        if (!keys) return false;\r\n\r\n        return keys.some(key => this.input.isKeyReleased(key));\r\n    }\r\n\r\n\r\n    /**\r\n     * \r\n     * @param {string} actionName \r\n     * @param {(actionName: string,event: {type: string, keyCode: number, keyName: string, mouseButton: number,mousePosition: {x: number, y: number}, mouseDelta: {x:number, y: number}, wheelDelta: number, timestamp: number })=> void} callback \r\n     * @returns \r\n     */\r\n    onActionDown(actionName, callback) {\r\n        const keys = this.actions.get(actionName);\r\n        if (!keys) {\r\n            console.warn(`Action '${actionName}' not mapped`);\r\n            return;\r\n        }\r\n\r\n        keys.forEach(key => {\r\n            const id = this.input.onKeyDown(key, (event) => {\r\n                callback(actionName, event);\r\n            });\r\n            this.callbackIds.push(id);\r\n        });\r\n\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {string} actionName \r\n     * @param {(actionName: string,event: {type: string, keyCode: number, keyName: string, mouseButton: number,mousePosition: {x: number, y: number}, mouseDelta: {x:number, y: number}, wheelDelta: number, timestamp: number })=> void} callback \r\n     * @returns \r\n     */\r\n    onActionUp(actionName, callback) {\r\n        const keys = this.actions.get(actionName);\r\n        if (!keys) {\r\n            console.warn(`Action '${actionName}' not mapped`);\r\n            return;\r\n        }\r\n\r\n        keys.forEach(key => {\r\n            const id = this.input.onKeyUp(key, (event) => {\r\n                callback(actionName, event);\r\n            });\r\n            this.callbackIds.push(id);\r\n        });\r\n    }\r\n\r\n\r\n    /**\r\n     * \r\n     * @param {string} actionName \r\n     * @param {(actionName: string,event: {type: string, keyCode: number, keyName: string, mouseButton: number,mousePosition: {x: number, y: number}, mouseDelta: {x:number, y: number}, wheelDelta: number, timestamp: number })=> void} callback \r\n     * @returns \r\n     */\r\n    onMouseDown(actionName, callback) {\r\n        const keys = this.mouseActions.get(actionName);\r\n        if (!keys) {\r\n            console.warn(`Action '${actionName}' not mapped`);\r\n            return;\r\n        }\r\n\r\n        keys.forEach(key => {\r\n            const id = this.input.onMouseDown(key, (event) => {\r\n                callback(actionName, event);\r\n            });\r\n            this.callbackIds.push(id);\r\n        });\r\n    }\r\n\r\n    /**\r\n * \r\n * @param {string} actionName \r\n * @param {(actionName: string,event: {type: string, keyCode: number, keyName: string, mouseButton: number,mousePosition: {x: number, y: number}, mouseDelta: {x:number, y: number}, wheelDelta: number, timestamp: number })=> void} callback \r\n * @returns \r\n */\r\n    onMouseUp(actionName, callback) {\r\n        const keys = this.mouseActions.get(actionName);\r\n        if (!keys) {\r\n            console.warn(`Action '${actionName}' not mapped`);\r\n            return;\r\n        }\r\n\r\n        keys.forEach(key => {\r\n            const id = this.input.onMouseUp(key, (event) => {\r\n                callback(actionName, event);\r\n            });\r\n            this.callbackIds.push(id);\r\n        });\r\n    }\r\n\r\n    /**\r\n    * \r\n    *\r\n    * @param {(event: {type: string, keyCode: number, keyName: string, mouseButton: number,mousePosition: {x: number, y: number}, mouseDelta: {x:number, y: number}, wheelDelta: number, timestamp: number })=> void} callback \r\n    * @returns \r\n    */\r\n    onMouseMove(callback) {\r\n\r\n        const id = this.input.onMouseMove((event) => {\r\n            callback(event);\r\n        });\r\n        this.callbackIds.push(id);\r\n    }\r\n\r\n    /**\r\n     * \r\n     *\r\n     * @param {(event: {type: string, keyCode: number, keyName: string, mouseButton: number,mousePosition: {x: number, y: number}, mouseDelta: {x:number, y: number}, wheelDelta: number, timestamp: number })=> void} callback \r\n     * @returns \r\n     */\r\n    onMouseWheel(actionName, callback) {\r\n\r\n\r\n        const id = this.input.onMouseWheel((event) => {\r\n            callback(event);\r\n        });\r\n        this.callbackIds.push(id);\r\n\r\n    }\r\n    cleanup() {\r\n        this.callbackIds.forEach(id => {\r\n            this.input.removeCallback(id);\r\n        });\r\n        this.callbackIds = [];\r\n    }\r\n}\r\n\r\nclass InputBuffer {\r\n    constructor(maxSize = 60) { // 1 second at 60 FPS\r\n        this.maxSize = maxSize;\r\n        this.buffer = [];\r\n    }\r\n\r\n    recordInput(inputRecord) {\r\n        this.buffer.unshift(inputRecord); // Add to beginning (most recent first)\r\n\r\n        if (this.buffer.length > this.maxSize) {\r\n            this.buffer.pop(); // Remove oldest\r\n        }\r\n    }\r\n\r\n\r\n    // check for input sequences (useful for combos, cheats, etc.)\r\n    checkSequence(sequence, timeWindow = 1000) {\r\n        if (sequence.length === 0 || this.buffer.length < sequence.length) {\r\n            return false;\r\n        }\r\n\r\n        const now = Date.now();\r\n        let sequenceIndex = 0;\r\n\r\n        // Work backwards through buffer (most recent to oldest)\r\n        for (let i = 0; i < this.buffer.length && sequenceIndex < sequence.length; i++) {\r\n            const record = this.buffer[i];\r\n\r\n            // Check if this record is too old\r\n            if (now - record.timestamp > timeWindow) {\r\n                break;\r\n            }\r\n\r\n            // Check if this matches the next expected input in sequence\r\n            // Compare key names (ignore case for letters)\r\n            const recordKey = record.key.toUpperCase();\r\n            const sequenceKey = sequence[sequence.length - 1 - sequenceIndex].toUpperCase();\r\n\r\n            if (recordKey === sequenceKey && record.type === 'down') {\r\n                sequenceIndex++;\r\n            }\r\n        }\r\n\r\n        return sequenceIndex === sequence.length;\r\n    }\r\n\r\n    // Clear the entire buffer\r\n    clear() {\r\n        this.buffer = [];\r\n    }\r\n\r\n    // Clear recent N events\r\n    clearRecent(count) {\r\n        this.buffer = this.buffer.slice(count);\r\n    }\r\n\r\n    // Get buffer as string (for debugging)\r\n    toString() {\r\n        return this.buffer.map(record =>\r\n            `${record.key}(${record.type})[${record.modifiers?.join(',') || ''}]`\r\n        ).join(' → ');\r\n    }\r\n\r\n    // Find patterns in buffer\r\n    findPattern(pattern, timeWindow = 2000) {\r\n        // Pattern is an array of key names or objects with key and optional modifiers\r\n        const matches = [];\r\n\r\n        for (let i = 0; i <= this.buffer.length - pattern.length; i++) {\r\n            let match = true;\r\n            const matchedEvents = [];\r\n\r\n            for (let j = 0; j < pattern.length; j++) {\r\n                const bufferEvent = this.buffer[i + j];\r\n                const patternStep = pattern[j];\r\n\r\n                // Check time window\r\n                if (this.buffer[i].timestamp - bufferEvent.timestamp > timeWindow) {\r\n                    match = false;\r\n                    break;\r\n                }\r\n\r\n                // Check key match\r\n                if (typeof patternStep === 'string') {\r\n                    if (bufferEvent.key !== patternStep || bufferEvent.type !== 'down') {\r\n                        match = false;\r\n                        break;\r\n                    }\r\n                } else {\r\n                    // Object pattern\r\n                    if (bufferEvent.key !== patternStep.key ||\r\n                        bufferEvent.type !== (patternStep.type || 'down')) {\r\n                        match = false;\r\n                        break;\r\n                    }\r\n\r\n                    // Check modifiers if specified\r\n                    if (patternStep.modifiers) {\r\n                        const hasAllModifiers = patternStep.modifiers.every(mod =>\r\n                            bufferEvent.modifiers?.includes(mod)\r\n                        );\r\n                        if (!hasAllModifiers) {\r\n                            match = false;\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                matchedEvents.push(bufferEvent);\r\n            }\r\n\r\n            if (match) {\r\n                matches.push({\r\n                    pattern,\r\n                    events: matchedEvents,\r\n                    startIndex: i,\r\n                    timestamp: matchedEvents[0].timestamp\r\n                });\r\n            }\r\n        }\r\n\r\n        return matches;\r\n    }\r\n}\r\n\r\n\r\n\r\nclass Input {\r\n    /**\r\n     * \r\n     * @param {*} input \r\n     * @param {number} maxBufferSize - default 120 = 2 seconds at 60 fps \r\n     */\r\n    constructor(input, maxBufferSize = 120) { // 2 seconds at 60 FPS\r\n        this.input = input;\r\n        this.buffer = new InputBuffer(maxBufferSize);\r\n        this.sequences = new Map(); // Map of sequence names to config\r\n        this.comboSequences = new Map();\r\n        this.globalKeyCallbacks = {\r\n            onKeyDown: new Map(),\r\n            onKeyUp: new Map()\r\n        };\r\n        this.currentModifiers = new Set();\r\n        this.capsLockActive = false;\r\n        this.callbackIds = [];\r\n\r\n        this.startRecording();\r\n    }\r\n\r\n    static printKeyMappings() {\r\n        const mappings = Input.getAllKeyMappings();\r\n\r\n        console.group('Key Mappings:');\r\n\r\n        console.group('Letters:');\r\n        mappings.letters.forEach(key => console.log(key));\r\n        console.groupEnd();\r\n\r\n        console.group('Numbers:');\r\n        mappings.numbers.forEach(key => console.log(key));\r\n        console.groupEnd();\r\n\r\n        console.group('Special Keys:');\r\n        mappings.special.forEach(key => console.log(key));\r\n        console.groupEnd();\r\n\r\n        console.group('Function Keys:');\r\n        mappings.function.forEach(key => console.log(key));\r\n        console.groupEnd();\r\n\r\n        console.group('Punctuation Keys:');\r\n        mappings.punctuation.forEach(key => console.log(key));\r\n        console.groupEnd();\r\n\r\n        console.group('Additional Special Keys:');\r\n        mappings.additionalSpecial.forEach(key => console.log(key));\r\n        console.groupEnd();\r\n\r\n        console.group('Right Modifier Keys:');\r\n        mappings.rightModifiers.forEach(key => console.log(key));\r\n        console.groupEnd();\r\n\r\n        console.group('Keypad Keys:');\r\n        mappings.keypad.forEach(key => console.log(key));\r\n        console.groupEnd();\r\n\r\n        console.group('Menu Keys:');\r\n        mappings.menu.forEach(key => console.log(key));\r\n        console.groupEnd();\r\n\r\n        console.groupEnd();\r\n\r\n        return mappings;\r\n    }\r\n\r\n\r\n    static getAllKeyMappings() {\r\n        const mappings = {\r\n            letters: [],\r\n            numbers: [],\r\n            special: [],\r\n            function: [],\r\n            punctuation: [],\r\n            additionalSpecial: [],\r\n            rightModifiers: [],\r\n            keypad: [],\r\n            menu: []\r\n        };\r\n\r\n        // Letters\r\n        for (let c = 'A'.charCodeAt(0); c <= 'Z'.charCodeAt(0); c++) {\r\n            mappings.letters.push(String.fromCharCode(c));\r\n        }\r\n\r\n        // Numbers\r\n        for (let c = '0'.charCodeAt(0); c <= '9'.charCodeAt(0); c++) {\r\n            mappings.numbers.push(String.fromCharCode(c));\r\n        }\r\n\r\n        // Special keys\r\n        mappings.special = [\r\n            \"Space\", \"Enter\", \"Escape\", \"Backspace\", \"Tab\",\r\n            \"Shift\", \"Control\", \"Alt\",\r\n            \"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"\r\n        ];\r\n\r\n        // Function keys\r\n        mappings.function = [];\r\n        for (let i = 1; i <= 12; i++) {\r\n            mappings.function.push(`F${i}`);\r\n        }\r\n\r\n        // Punctuation keys\r\n        mappings.punctuation = [\",\", \".\", \"/\", \";\", \"'\", \"[\", \"]\", \"\\\\\", \"-\", \"=\", \"`\"];\r\n\r\n        // Additional special keys\r\n        mappings.additionalSpecial = [\r\n            \"Insert\", \"Delete\", \"Home\", \"End\", \"PageUp\", \"PageDown\",\r\n            \"CapsLock\", \"ScrollLock\", \"NumLock\", \"PrintScreen\", \"Pause\"\r\n        ];\r\n\r\n        // Right modifier keys\r\n        mappings.rightModifiers = [\"RightShift\", \"RightControl\", \"RightAlt\", \"RightSuper\"];\r\n\r\n        // Keypad keys\r\n        for (let i = 0; i <= 9; i++) {\r\n            mappings.keypad.push(`Keypad${i}`);\r\n        }\r\n        mappings.keypad.push(\"KeypadDecimal\", \"KeypadDivide\", \"KeypadMultiply\", \"KeypadSubtract\", \"KeypadAdd\", \"KeypadEnter\", \"KeypadEqual\");\r\n\r\n        // Menu\r\n        mappings.menu = [\"Menu\"];\r\n\r\n        return mappings;\r\n    }\r\n\r\n\r\n    startRecording() {\r\n        if (this.recording) return;\r\n\r\n\r\n        const allKeys = this.getAllKeyNames();\r\n\r\n\r\n        allKeys.forEach(key => {\r\n\r\n            const downId = this.input.onKeyDown(key, (event) => {\r\n                this.handleKeyEvent('down', key, event);\r\n            });\r\n            this.callbackIds.push(downId);\r\n\r\n\r\n            const upId = this.input.onKeyUp(key, (event) => {\r\n                this.handleKeyEvent('up', key, event);\r\n            });\r\n            this.callbackIds.push(upId);\r\n        });\r\n\r\n        this.recording = true;\r\n        console.log('InputHelper: Started recording all keyboard events');\r\n    }\r\n\r\n    stopRecording() {\r\n        if (!this.recording) return;\r\n\r\n        // Remove all callbacks\r\n        this.callbackIds.forEach(id => {\r\n            this.input.removeCallback(id);\r\n        });\r\n        this.callbackIds = [];\r\n\r\n        this.recording = false;\r\n    }\r\n\r\n    handleKeyEvent(type, key, event) {\r\n        const timestamp = event.timestamp || Date.now();\r\n\r\n        const modifierMap = {\r\n            'Shift': 'Shift',\r\n            'RightShift': 'Shift',\r\n            'Control': 'Control',\r\n            'RightControl': 'Control',\r\n            'Alt': 'Alt',\r\n            'RightAlt': 'Alt'\r\n        };\r\n\r\n        if (modifierMap[key]) {\r\n            const mod = modifierMap[key];\r\n            if (type === 'down') {\r\n                this.currentModifiers.add(mod);\r\n            } else {\r\n                this.currentModifiers.delete(mod);\r\n            }\r\n        }\r\n\r\n        if (key === 'CapsLock' && type === 'down' && !event.repeat) {\r\n            this.capsLockActive = !this.capsLockActive;\r\n        }\r\n\r\n        const inputRecord = {\r\n            key,\r\n            type,\r\n            modifiers: Array.from(this.currentModifiers),\r\n            timestamp\r\n        };\r\n        this.buffer.recordInput(inputRecord);\r\n\r\n        const callbacks = this.globalKeyCallbacks[`onKey${type === 'down' ? 'Down' : 'Up'}`];\r\n        if (callbacks.has(key)) {\r\n            callbacks.get(key).forEach(callback => callback(event));\r\n        }\r\n\r\n\r\n        this.checkSequences();\r\n\r\n\r\n        this.checkCombos();\r\n    }\r\n\r\n\r\n    onAnyKeyDown(callback) {\r\n        return this.onSpecificKeyDown('*any*', callback);\r\n    }\r\n\r\n    onAnyKeyUp(callback) {\r\n        return this.onSpecificKeyUp('*any*', callback);\r\n    }\r\n\r\n\r\n    onSpecificKeyDown(key, callback) {\r\n        return this.registerGlobalCallback('onKeyDown', key, callback);\r\n    }\r\n\r\n    onSpecificKeyUp(key, callback) {\r\n        return this.registerGlobalCallback('onKeyUp', key, callback);\r\n    }\r\n\r\n    registerGlobalCallback(type, key, callback) {\r\n        if (!this.globalKeyCallbacks[type].has(key)) {\r\n            this.globalKeyCallbacks[type].set(key, []);\r\n        }\r\n\r\n        this.globalKeyCallbacks[type].get(key).push(callback);\r\n\r\n\r\n        return () => {\r\n            const callbacks = this.globalKeyCallbacks[type].get(key);\r\n            if (callbacks) {\r\n                const index = callbacks.indexOf(callback);\r\n                if (index !== -1) {\r\n                    callbacks.splice(index, 1);\r\n                }\r\n            }\r\n        };\r\n    }\r\n\r\n\r\n    /**\r\n     * Register a sequence to watch for\r\n     * @param {string} name - Sequence name\r\n     * @param {Array} sequence - Array of key names to match\r\n     * @param {Function} callback - Called when sequence is matched\r\n     * @param {Object} options - Additional options\r\n     */\r\n    registerSequence(name, sequence, callback, options = {}) {\r\n        const config = {\r\n            sequence,\r\n            callback,\r\n            timeWindow: options.timeWindow || 2000, // 2 seconds default\r\n            requireExactModifiers: options.requireExactModifiers || false,\r\n            clearOnMatch: options.clearOnMatch !== false, // Clear buffer on match by default\r\n            description: options.description || ''\r\n        };\r\n\r\n        this.sequences.set(name, config);\r\n        console.log(`🎹 InputHelper: Registered sequence \"${name}\" - ${config.description}`);\r\n\r\n        // Return deregister function\r\n        return () => {\r\n            this.sequences.delete(name);\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Register a combo sequence (like Shift+6 for ^)\r\n     * @param {string} name - Combo name\r\n     * @param {Array} modifiers - Modifier keys (e.g., ['Shift'])\r\n     * @param {string} key - Main key (e.g., '6')\r\n     * @param {string} output - Output character/action (e.g., '^')\r\n     * @param {Function} callback - Called when combo is matched\r\n     */\r\n    registerCombo(name, modifiers, key, output, callback) {\r\n        const config = {\r\n            modifiers,\r\n            key,\r\n            output,\r\n            callback,\r\n            description: `${modifiers.join('+')}+${key} → ${output}`\r\n        };\r\n\r\n        this.comboSequences.set(name, config);\r\n        console.log(`🎹 InputHelper: Registered combo \"${name}\" - ${config.description}`);\r\n\r\n        // Return deregister function\r\n        return () => {\r\n            this.comboSequences.delete(name);\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Register common special character combos\r\n     */\r\n    registerCommonCombos() {\r\n        // Shift + Number combos\r\n        const shiftNumberCombos = [\r\n            { num: '1', output: '!' },\r\n            { num: '2', output: '@' },\r\n            { num: '3', output: '#' },\r\n            { num: '4', output: '$' },\r\n            { num: '5', output: '%' },\r\n            { num: '6', output: '^' },\r\n            { num: '7', output: '&' },\r\n            { num: '8', output: '*' },\r\n            { num: '9', output: '(' },\r\n            { num: '0', output: ')' }\r\n        ];\r\n\r\n        shiftNumberCombos.forEach(combo => {\r\n            this.registerCombo(\r\n                `Shift+${combo.num}`,\r\n                ['Shift'],\r\n                combo.num,\r\n                combo.output,\r\n                (event) => console.log(`Typed: ${combo.output}`)\r\n            );\r\n        });\r\n\r\n        // Other common combos\r\n        const commonCombos = [\r\n            { mods: ['Shift'], key: '`', output: '~', name: 'Tilde' },\r\n            { mods: ['Shift'], key: '-', output: '_', name: 'Underscore' },\r\n            { mods: ['Shift'], key: '=', output: '+', name: 'Plus' },\r\n            { mods: ['Shift'], key: '[', output: '{', name: 'OpenBrace' },\r\n            { mods: ['Shift'], key: ']', output: '}', name: 'CloseBrace' },\r\n            { mods: ['Shift'], key: '\\\\', output: '|', name: 'Pipe' },\r\n            { mods: ['Shift'], key: ';', output: ':', name: 'Colon' },\r\n            { mods: ['Shift'], key: \"'\", output: '\"', name: 'Quote' },\r\n            { mods: ['Shift'], key: ',', output: '<', name: 'LessThan' },\r\n            { mods: ['Shift'], key: '.', output: '>', name: 'GreaterThan' },\r\n            { mods: ['Shift'], key: '/', output: '?', name: 'Question' }\r\n        ];\r\n\r\n        commonCombos.forEach(combo => {\r\n            this.registerCombo(\r\n                combo.name,\r\n                combo.mods,\r\n                combo.key,\r\n                combo.output,\r\n                (event) => console.log(`Typed: ${combo.output}`)\r\n            );\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Check registered sequences\r\n     */\r\n    checkSequences() {\r\n        for (const [name, config] of this.sequences) {\r\n            // Extract just the key names for sequence checking\r\n            const keySequence = config.sequence.map(step =>\r\n                typeof step === 'string' ? step : step.key\r\n            );\r\n\r\n            if (this.buffer.checkSequence(keySequence, config.timeWindow)) {\r\n                // Get the actual events that matched\r\n                const matchedEvents = this.getLastEvents(keySequence.length);\r\n\r\n                // Call the callback\r\n                config.callback({\r\n                    name,\r\n                    sequence: config.sequence,\r\n                    matchedEvents,\r\n                    timestamp: Date.now()\r\n                });\r\n\r\n                // Clear buffer if configured\r\n                if (config.clearOnMatch) {\r\n                    this.buffer.clear();\r\n                }\r\n\r\n                console.log(`🎹 Sequence matched: \"${name}\"`);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check for combo sequences (simultaneous key presses)\r\n     */\r\n    checkCombos() {\r\n        const recentEvents = this.getLastEvents(10); // Check last 10 events\r\n\r\n        // Find key down events that happened very close together\r\n        const recentDowns = recentEvents.filter(e =>\r\n            e.type === 'down' &&\r\n            Date.now() - e.timestamp < 100 // Within 100ms\r\n        );\r\n\r\n        if (recentDowns.length >= 2) {\r\n            for (const [name, combo] of this.comboSequences) {\r\n                // Check if all required modifiers are pressed\r\n                const hasAllModifiers = combo.modifiers.every(mod =>\r\n                    recentDowns.some(e => e.key === mod) ||\r\n                    this.currentModifiers.has(mod)\r\n                );\r\n\r\n                // Check if the main key is pressed\r\n                const hasMainKey = recentDowns.some(e => e.key === combo.key);\r\n\r\n                if (hasAllModifiers && hasMainKey) {\r\n                    // Found a combo!\r\n                    combo.callback({\r\n                        name,\r\n                        combo: combo.output,\r\n                        modifiers: combo.modifiers,\r\n                        key: combo.key,\r\n                        timestamp: Date.now()\r\n                    });\r\n\r\n                    console.log(`🎹 Combo detected: ${name} (${combo.output})`);\r\n\r\n                    // Clear these events from recent history to prevent retrigger\r\n                    this.buffer.clearRecent(3);\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the last N events from buffer\r\n     */\r\n    getLastEvents(count) {\r\n        // Assuming buffer stores events with most recent first\r\n        return this.buffer.buffer.slice(0, count);\r\n    }\r\n\r\n    /**\r\n     * Get all key names available in the system\r\n     */\r\n    getAllKeyNames() {\r\n        const mappings = Input.getAllKeyMappings();\r\n        return [\r\n            ...mappings.letters,\r\n            ...mappings.numbers,\r\n            ...mappings.special,\r\n            ...mappings.function,\r\n            ...mappings.punctuation,\r\n            ...mappings.additionalSpecial,\r\n            ...mappings.rightModifiers,\r\n            ...mappings.keypad,\r\n            ...mappings.menu\r\n        ];\r\n    }\r\n\r\n    /**\r\n     * Check if a specific key is currently held down\r\n     */\r\n    isKeyHeld(key) {\r\n        const recent = this.getLastEvents(5);\r\n        const lastDown = recent.find(e => e.key === key && e.type === 'down');\r\n        const lastUp = recent.find(e => e.key === key && e.type === 'up');\r\n\r\n        // Key is held if:\r\n        // 1. There's a recent down event\r\n        // 2. No recent up event OR up event was before down event\r\n        if (!lastDown) return false;\r\n        if (!lastUp) return true;\r\n\r\n        return lastDown.timestamp > lastUp.timestamp;\r\n    }\r\n\r\n    /**\r\n     * Get currently held keys\r\n     */\r\n    getHeldKeys() {\r\n        const allKeys = this.getAllKeyNames();\r\n        return allKeys.filter(key => this.isKeyHeld(key));\r\n    }\r\n\r\n    /**\r\n     * Get current modifier state\r\n     */\r\n    getModifierState() {\r\n        return {\r\n            shift: this.currentModifiers.has('Shift'),\r\n            control: this.currentModifiers.has('Control'),\r\n            alt: this.currentModifiers.has('Alt'),\r\n            capsLock: this.capsLockActive,\r\n            any: this.currentModifiers.size > 0\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Register cheat code sequences\r\n     */\r\n    registerCheatCode(name, sequence, onActivate) {\r\n        return this.registerSequence(\r\n            `cheat_${name}`,\r\n            sequence,\r\n            (match) => {\r\n                console.log(`🎮 Cheat activated: ${name}`);\r\n                onActivate(match);\r\n            },\r\n            {\r\n                timeWindow: 3000, // 3 seconds for cheat codes\r\n                description: `Cheat code: ${name}`,\r\n                clearOnMatch: true\r\n            }\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Register common cheat codes\r\n     */\r\n    registerCommonCheatCodes() {\r\n        // Konami Code\r\n        this.registerCheatCode('konami', [\r\n            'ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown',\r\n            'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight',\r\n            'B', 'A', 'Enter'\r\n        ], () => {\r\n            console.log('⬆️⬆️⬇️⬇️⬅️➡️⬅️➡️🅱️🅰️ - Konami Code Activated!');\r\n        });\r\n\r\n        // God mode\r\n        this.registerCheatCode('godmode', ['G', 'O', 'D'], () => {\r\n            console.log('👑 God Mode Activated!');\r\n        });\r\n\r\n        // Infinite ammo\r\n        this.registerCheatCode('ammo', ['I', 'D', 'D', 'Q', 'D'], () => {\r\n            console.log('🔫 Infinite Ammo!');\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Create a typing buffer for text input\r\n     */\r\n    createTypingBuffer(options = {}) {\r\n        const typingBuffer = {\r\n            text: '',\r\n            cursor: 0,\r\n            maxLength: options.maxLength || 100,\r\n            onTextChange: options.onTextChange || (() => { }),\r\n            onEnter: options.onEnter || (() => { })\r\n        };\r\n\r\n        const shiftMap = {\r\n            '1': '!',\r\n            '2': '@',\r\n            '3': '#',\r\n            '4': '$',\r\n            '5': '%',\r\n            '6': '^',\r\n            '7': '&',\r\n            '8': '*',\r\n            '9': '(',\r\n            '0': ')',\r\n            '`': '~',\r\n            '-': '_',\r\n            '=': '+',\r\n            '[': '{',\r\n            ']': '}',\r\n            '\\\\': '|',\r\n            ';': ':',\r\n            \"'\": '\"',\r\n            ',': '<',\r\n            '.': '>',\r\n            '/': '?'\r\n        };\r\n\r\n        // Setup typing listeners\r\n        const unsubscribers = [];\r\n\r\n        // Letter, number, and punctuation keys\r\n        const mappings = Input.getAllKeyMappings();\r\n        const typeableKeys = [...mappings.letters, ...mappings.numbers, ...mappings.punctuation];\r\n        typeableKeys.forEach(key => {\r\n            const unsub = this.onSpecificKeyDown(key, (event) => {\r\n                if (typingBuffer.text.length < typingBuffer.maxLength) {\r\n                    const isShiftPressed = this.currentModifiers.has('Shift');\r\n                    let char = key;\r\n\r\n                    if (mappings.letters.includes(key)) {\r\n                        // Handle letters with shift and caps lock (XOR behavior)\r\n                        const shouldUpper = isShiftPressed !== this.capsLockActive;\r\n                        char = shouldUpper ? key.toUpperCase() : key.toLowerCase();\r\n                    } else if (isShiftPressed) {\r\n                        // Handle shifted numbers and punctuation\r\n                        char = shiftMap[key] || char;\r\n                    }\r\n\r\n                    typingBuffer.text = typingBuffer.text.slice(0, typingBuffer.cursor) + char + typingBuffer.text.slice(typingBuffer.cursor);\r\n                    typingBuffer.cursor += 1;\r\n                    typingBuffer.onTextChange(typingBuffer.text);\r\n                }\r\n            });\r\n            unsubscribers.push(unsub);\r\n        });\r\n\r\n        // Space\r\n        unsubscribers.push(this.onSpecificKeyDown('Space', () => {\r\n            if (typingBuffer.text.length < typingBuffer.maxLength) {\r\n                typingBuffer.text = typingBuffer.text.slice(0, typingBuffer.cursor) + ' ' + typingBuffer.text.slice(typingBuffer.cursor);\r\n                typingBuffer.cursor += 1;\r\n                typingBuffer.onTextChange(typingBuffer.text);\r\n            }\r\n        }));\r\n\r\n        // Backspace\r\n        unsubscribers.push(this.onSpecificKeyDown('Backspace', () => {\r\n            if (typingBuffer.cursor > 0) {\r\n                typingBuffer.text = typingBuffer.text.slice(0, typingBuffer.cursor - 1) + typingBuffer.text.slice(typingBuffer.cursor);\r\n                typingBuffer.cursor -= 1;\r\n                typingBuffer.onTextChange(typingBuffer.text);\r\n            }\r\n        }));\r\n\r\n        // Enter\r\n        unsubscribers.push(this.onSpecificKeyDown('Enter', () => {\r\n            typingBuffer.onEnter(typingBuffer.text);\r\n            typingBuffer.text = '';\r\n            typingBuffer.cursor = 0;\r\n            typingBuffer.onTextChange(typingBuffer.text);\r\n        }));\r\n\r\n        // Arrow keys for cursor navigation\r\n        unsubscribers.push(this.onSpecificKeyDown('ArrowLeft', () => {\r\n            typingBuffer.cursor = Math.max(0, typingBuffer.cursor - 1);\r\n        }));\r\n\r\n        unsubscribers.push(this.onSpecificKeyDown('ArrowRight', () => {\r\n            typingBuffer.cursor = Math.min(typingBuffer.text.length, typingBuffer.cursor + 1);\r\n        }));\r\n\r\n        // Return buffer with cleanup\r\n        return {\r\n            buffer: typingBuffer,\r\n            cleanup: () => unsubscribers.forEach(unsub => unsub())\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Clean up all resources\r\n     */\r\n    cleanup() {\r\n        this.stopRecording();\r\n        this.sequences.clear();\r\n        this.comboSequences.clear();\r\n        this.globalKeyCallbacks.onKeyDown.clear();\r\n        this.globalKeyCallbacks.onKeyUp.clear();\r\n        this.currentModifiers.clear();\r\n        this.buffer.clear();\r\n        console.log('🎹 InputHelper: Cleaned up all resources');\r\n    }\r\n\r\n    /**\r\n     * Get statistics about input usage\r\n     */\r\n    getStats() {\r\n        const events = this.buffer.buffer;\r\n        const keyCounts = {};\r\n        const modifierUsage = {};\r\n\r\n        events.forEach(event => {\r\n            // Count key usage\r\n            keyCounts[event.key] = (keyCounts[event.key] || 0) + 1;\r\n\r\n            // Count modifier usage\r\n            if (event.modifiers) {\r\n                event.modifiers.forEach(mod => {\r\n                    modifierUsage[mod] = (modifierUsage[mod] || 0) + 1;\r\n                });\r\n            }\r\n        });\r\n\r\n        // Find most used key\r\n        let mostUsedKey = null;\r\n        let maxCount = 0;\r\n        for (const [key, count] of Object.entries(keyCounts)) {\r\n            if (count > maxCount) {\r\n                mostUsedKey = key;\r\n                maxCount = count;\r\n            }\r\n        }\r\n\r\n        return {\r\n            totalEvents: events.length,\r\n            mostUsedKey,\r\n            mostUsedCount: maxCount,\r\n            keyCounts,\r\n            modifierUsage,\r\n            sequencesRegistered: this.sequences.size,\r\n            combosRegistered: this.comboSequences.size\r\n        };\r\n    }\r\n}\n\n/**\r\n * Clamp a rectangle to canvas bounds\r\n * Returns null if completely outside canvas\r\n */\r\nfunction clampRectToCanvas(x, y, width, height, canvasWidth, canvasHeight) {\r\n    const x1 = Math.max(0, Math.floor(x));\r\n    const y1 = Math.max(0, Math.floor(y));\r\n    const x2 = Math.min(canvasWidth, Math.ceil(x + width));\r\n    const y2 = Math.min(canvasHeight, Math.ceil(y + height));\r\n    \r\n    const clampedWidth = x2 - x1;\r\n    const clampedHeight = y2 - y1;\r\n    \r\n    if (clampedWidth <= 0 || clampedHeight <= 0) {\r\n        return null; // Completely outside canvas\r\n    }\r\n    \r\n    return { x: x1, y: y1, width: clampedWidth, height: clampedHeight };\r\n}\r\n\r\n/**\r\n * Check if a pixel should be drawn (canvas + viewport clipping)\r\n */\r\nfunction shouldDrawPixel(x, y, canvas, camera) {\r\n    // Canvas bounds check\r\n    if (x < 0 || x >= canvas.width || y < 0 || y >= canvas.height) {\r\n        return false;\r\n    }\r\n    \r\n    // Viewport clipping (if camera has viewport)\r\n    if (camera && camera.viewport && camera.viewport.shouldClip(x, y)) {\r\n        return false;\r\n    }\r\n    \r\n    return true;\r\n}\n\nclass Camera {\r\n    constructor(x = 0, y = 0, width = 800, height = 600) {\r\n        this.x = x;           // Camera position in world space\r\n        this.y = y;\r\n        this.width = width;   // Viewport size\r\n        this.height = height;\r\n        this.viewport = null;\r\n    }\r\n\r\n    // World → Screen\r\n    worldToScreen(worldX, worldY) {\r\n        // Step 1: World to camera space\r\n        const camX = worldX - this.x;\r\n        const camY = worldY - this.y;\r\n\r\n        // Step 2: Camera to screen (center of viewport)\r\n        const screenX = camX + this.width / 2;\r\n        const screenY = camY + this.height / 2;\r\n\r\n\r\n        // Step 2: Apply viewport transform if set\r\n        if (this.viewport) {\r\n            // Scale to viewport size (if different from camera size)\r\n            const scaleX = this.viewport.width / this.width;\r\n            const scaleY = this.viewport.height / this.height;\r\n\r\n            return {\r\n                x: screenX * scaleX + this.viewport.x,\r\n                y: screenY * scaleY + this.viewport.y\r\n            };\r\n        }\r\n\r\n        return { x: screenX, y: screenY };\r\n    }\r\n    /**\r\n     * \r\n     * @param {Viewport} viewport \r\n     */\r\n    setViewport(viewport) {\r\n        this.viewport = viewport;\r\n    }\r\n\r\n    // Screen → World  \r\n    screenToWorld(screenX, screenY) {\r\n        // // Inverse: remove centering, then add camera position\r\n        // const camX = screenX - this.width / 2;\r\n        // const camY = screenY - this.height / 2;\r\n\r\n        // const worldX = camX + this.x;\r\n        // const worldY = camY + this.y;\r\n\r\n        // return { x: worldX, y: worldY };\r\n\r\n        let camX, camY;\r\n\r\n        // Step 1: Remove viewport offset if set\r\n        if (this.viewport) {\r\n            const scaleX = this.width / this.viewport.width;\r\n            const scaleY = this.height / this.viewport.height;\r\n\r\n            camX = (screenX - this.viewport.x) * scaleX;\r\n            camY = (screenY - this.viewport.y) * scaleY;\r\n        } else {\r\n            camX = screenX;\r\n            camY = screenY;\r\n        }\r\n\r\n        // Step 2: Camera to world space\r\n        const worldX = camX - this.width / 2 + this.x;\r\n        const worldY = camY - this.height / 2 + this.y;\r\n\r\n        return { x: worldX, y: worldY };\r\n    }\r\n\r\n    isVisible(worldX, worldY) {\r\n        const screen = this.worldToScreen(worldX, worldY);\r\n\r\n        if (this.viewport) {\r\n            return this.viewport.contains(screen.x, screen.y);\r\n        }\r\n\r\n        return screen.x >= 0 && screen.x < this.width &&\r\n            screen.y >= 0 && screen.y < this.height;\r\n    }\r\n    // Get world-space bounds of what's visible\r\n    getVisibleBounds() {\r\n        const halfW = this.width / 2;\r\n        const halfH = this.height / 2;\r\n\r\n        return {\r\n            left: this.x - halfW,\r\n            right: this.x + halfW,\r\n            top: this.y - halfH,\r\n            bottom: this.y + halfH\r\n        };\r\n    }\r\n\r\n    // Move camera (with bounds checking optional)\r\n    move(dx, dy) {\r\n        this.x += dx;\r\n        this.y += dy;\r\n    }\r\n\r\n    setPosition(x, y) {\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n\r\n\r\n\r\nclass Viewport {\r\n    constructor(x, y, width, height) {\r\n        this.x = x;           // Position on canvas\r\n        this.y = y;\r\n        this.width = width;   // Size of viewport\r\n        this.height = height;\r\n        this.scissorEnabled = true;\r\n    }\r\n\r\n    // Check if a point is inside viewport\r\n    contains(screenX, screenY) {\r\n        return screenX >= this.x && screenX < this.x + this.width &&\r\n            screenY >= this.y && screenY < this.y + this.height;\r\n    }\r\n\r\n    // Convert viewport-local coords to canvas coords\r\n    toCanvas(localX, localY) {\r\n        return {\r\n            x: localX + this.x,\r\n            y: localY + this.y\r\n        };\r\n    }\r\n\r\n    // Convert canvas coords to viewport-local coords\r\n    toLocal(canvasX, canvasY) {\r\n        return {\r\n            x: canvasX - this.x,\r\n            y: canvasY - this.y\r\n        };\r\n    }\r\n\r\n    // Get aspect ratio\r\n    getAspectRatio() {\r\n        return this.width / this.height;\r\n    }\r\n\r\n    // Enable/disable scissor clipping\r\n    setScissor(enabled) {\r\n        this.scissorEnabled = enabled;\r\n    }\r\n\r\n    // Check if should clip a pixel (used during rendering)\r\n    shouldClip(canvasX, canvasY) {\r\n        if (!this.scissorEnabled) return false;\r\n\r\n        return canvasX < this.x || canvasX >= this.x + this.width ||\r\n            canvasY < this.y || canvasY >= this.y + this.height;\r\n    }\r\n}\r\n\r\n\r\n\r\nfunction createLetterboxedViewport(canvasWidth, canvasHeight, targetAspect) {\r\n    const canvasAspect = canvasWidth / canvasHeight;\r\n    \r\n    let vpX, vpY, vpWidth, vpHeight;\r\n    \r\n    if (canvasAspect > targetAspect) {\r\n        // Canvas is wider - add side bars\r\n        vpHeight = canvasHeight;\r\n        vpWidth = canvasHeight * targetAspect;\r\n        vpX = (canvasWidth - vpWidth) / 2;\r\n        vpY = 0;\r\n    } else {\r\n        // Canvas is taller - add top/bottom bars\r\n        vpWidth = canvasWidth;\r\n        vpHeight = canvasWidth / targetAspect;\r\n        vpX = 0;\r\n        vpY = (canvasHeight - vpHeight) / 2;\r\n    }\r\n    \r\n    return new Viewport(vpX, vpY, vpWidth, vpHeight);\r\n}\r\n\r\n\r\nfunction drawLetterboxBars(canvas, viewport) {\r\n    // Top bar\r\n    if (viewport.y > 0) {\r\n        for (let y = 0; y < viewport.y; y++) {\r\n            for (let x = 0; x < canvas.width; x++) {\r\n                canvas.setPixel(x, y, 0, 0, 0, 255);\r\n            }\r\n        }\r\n    }\r\n    \r\n    // Bottom bar\r\n    const bottomY = viewport.y + viewport.height;\r\n    if (bottomY < canvas.height) {\r\n        for (let y = bottomY; y < canvas.height; y++) {\r\n            for (let x = 0; x < canvas.width; x++) {\r\n                canvas.setPixel(x, y, 0, 0, 0, 255);\r\n            }\r\n        }\r\n    }\r\n    \r\n    // Left bar\r\n    if (viewport.x > 0) {\r\n        for (let y = 0; y < canvas.height; y++) {\r\n            for (let x = 0; x < viewport.x; x++) {\r\n                canvas.setPixel(x, y, 0, 0, 0, 255);\r\n            }\r\n        }\r\n    }\r\n    \r\n    // Right bar\r\n    const rightX = viewport.x + viewport.width;\r\n    if (rightX < canvas.width) {\r\n        for (let y = 0; y < canvas.height; y++) {\r\n            for (let x = rightX; x < canvas.width; x++) {\r\n                canvas.setPixel(x, y, 0, 0, 0, 255);\r\n            }\r\n        }\r\n    }\r\n}\n\nclass LineDrawer$1 {\n    /**\n     *   * Draw a line using Bresenham's algorithm\n     * @param {PixelBuffer} canvas \n     * @param {*} x1 \n     * @param {*} y1 \n     * @param {*} x2 \n     * @param {*} y2 \n     * @param {*} r \n     * @param {*} g \n     * @param {*} b \n     * @param {*} a \n     * @param {Camera}\n     * @returns \n     */\n    static drawLine(canvas, x1, y1, x2, y2, r, g, b, a = 255, camera = undefined) {\n        // const startTime = performance.now();\n\n        // Convert to integers\n        x1 = Math.floor(x1); y1 = Math.floor(y1);\n        x2 = Math.floor(x2); y2 = Math.floor(y2);\n\n        const dx = Math.abs(x2 - x1);\n        const dy = Math.abs(y2 - y1);\n        const sx = x1 < x2 ? 1 : -1;  // Step direction for x\n        const sy = y1 < y2 ? 1 : -1;  // Step direction for y\n\n        let err = dx - dy;  // Initial error term\n        let x = x1;\n        let y = y1;\n\n\n        // Track actual drawn region\n        let minX = Infinity, minY = Infinity;\n        let maxX = -Infinity, maxY = -Infinity;\n\n        // Direct buffer access for performance\n        const data = canvas.data;\n        const width = canvas.width;\n        canvas.height;\n\n        let pixelCount = 0;\n\n        // Bresenham's main loop - all integer operations\n        while (true) {\n            // Draw current pixel if within bounds\n            if (shouldDrawPixel(x, y, canvas, camera)) {\n                const idx = (y * width + x) * 4;\n                data[idx + 0] = r;\n                data[idx + 1] = g;\n                data[idx + 2] = b;\n                data[idx + 3] = a;\n                pixelCount++;\n\n                // Track bounds\n                minX = Math.min(minX, x);\n                minY = Math.min(minY, y);\n                maxX = Math.max(maxX, x);\n                maxY = Math.max(maxY, y);\n            }\n\n            // Reached end point?\n            if (x === x2 && y === y2) break;\n\n            // Calculate error for next step\n            const e2 = err * 2;\n\n            // Step horizontally?\n            if (e2 > -dy) {\n                err -= dy;\n                x += sx;\n            }\n\n            // Step vertically?\n            if (e2 < dx) {\n                err += dx;\n                y += sy;\n            }\n        }\n\n        if (pixelCount === 0) {\n            return { pixels: 0, time: 0, regionSize: 0 };\n        }\n\n        const tracker = canvas.dirtyTracker;\n        if (tracker) {\n            tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n        }\n        canvas.needsUpload = true;\n    }\n\n    /**\n     *   Draw thick line using circular brush - pre-calculate brush stamp, stamp along line path\n     * @param {*} canvas \n     * @param {*} x1 \n     * @param {*} y1 \n     * @param {*} x2 \n     * @param {*} y2 \n     * @param {*} thickness \n     * @param {*} r \n     * @param {*} g \n     * @param {*} b \n     * @param {*} a \n     * @param {Camera}\n     * @returns \n     */\n    static drawThickLine(canvas, x1, y1, x2, y2, thickness, r, g, b, a = 255, camera = undefined) {\n        x1 = Math.floor(x1); y1 = Math.floor(y1);\n        x2 = Math.floor(x2); y2 = Math.floor(y2);\n        thickness = Math.max(1, Math.floor(thickness));\n        // const startTime = performance.now();\n\n        // Create circular brush stamp (once per thickness)\n        const radius = Math.ceil(thickness / 2);\n        const brushStamp = LineDrawer$1._createBrushStamp(radius, r, g, b, a);\n\n        // Calculate extended bounding box (includes brush radius)\n        // const minX = Math.max(0, Math.min(x1, x2) - radius);\n        // const minY = Math.max(0, Math.min(y1, y2) - radius);\n        // const maxX = Math.min(canvas.width - 1, Math.max(x1, x2) + radius);\n        // const maxY = Math.min(canvas.height - 1, Math.max(y1, y2) + radius);\n\n\n\n        // Get all points along the line using Bresenham\n        const points = LineDrawer$1._bresenhamPoints(x1, y1, x2, y2);\n\n        let minX = Infinity, minY = Infinity;\n        let maxX = -Infinity, maxY = -Infinity;\n        // Direct buffer manipulation for performance\n        const data = canvas.data;\n        const width = canvas.width;\n        const height = canvas.height;\n\n        // Stamp brush at each point along the line\n        let pixelsDrawn = 0;\n        for (const { x, y } of points) {\n            const result = LineDrawer$1._stampBrush(\n                data, width, height,\n                x, y, radius, brushStamp,\n                camera\n            );\n\n            pixelsDrawn += result.pixels;\n\n            if (result.pixels > 0) {\n                minX = Math.min(minX, result.minX);\n                minY = Math.min(minY, result.minY);\n                maxX = Math.max(maxX, result.maxX);\n                maxY = Math.max(maxY, result.maxY);\n            }\n        }\n\n        if (pixelsDrawn === 0) {\n            return;\n        }\n\n        const tracker = canvas.dirtyTracker;\n        if (tracker) {\n            tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n        }\n        canvas.needsUpload = true;\n    }\n\n    /**\n     * Get all points along a line (Bresenham)\n     * Useful for collision detection, path following, etc.\n     */\n    static _bresenhamPoints(x1, y1, x2, y2) {\n        const points = [];\n        const dx = Math.abs(x2 - x1);\n        const dy = Math.abs(y2 - y1);\n        const sx = x1 < x2 ? 1 : -1;\n        const sy = y1 < y2 ? 1 : -1;\n\n        let err = dx - dy;\n        let x = x1;\n        let y = y1;\n\n        while (true) {\n            points.push({ x, y });\n            if (x === x2 && y === y2) break;\n\n            const e2 = err * 2;\n            if (e2 > -dy) {\n                err -= dy;\n                x += sx;\n            }\n            if (e2 < dx) {\n                err += dx;\n                y += sy;\n            }\n        }\n\n        return points;\n    }\n\n    /**\n     * Create a circular brush stamp\n     * Pre-calculated, reusable across multiple stamps\n     */\n    static _createBrushStamp(radius, r, g, b, a) {\n        const stamp = [];\n\n        for (let dy = -radius; dy <= radius; dy++) {\n            for (let dx = -radius; dx <= radius; dx++) {\n                const dist = Math.sqrt(dx * dx + dy * dy);\n                if (dist <= radius) {\n                    // Edge fading for smooth brush\n                    const edgeFade = Math.max(0, 1 - (dist / radius));\n                    const finalAlpha = Math.floor(a * edgeFade);\n\n                    stamp.push({\n                        dx, dy,\n                        r, g, b,\n                        a: finalAlpha\n                    });\n                }\n            }\n        }\n\n        return stamp;\n    }\n\n    /**\n     * Stamp brush at position with alpha blending\n     */\n    static _stampBrush(data, width, height, cx, cy, radius, stamp, camera) {\n        let pixelsDrawn = 0;\n        let minX = Infinity, minY = Infinity;\n        let maxX = -Infinity, maxY = -Infinity;\n\n        for (const { dx, dy, r, g, b, a } of stamp) {\n            const x = cx + dx;\n            const y = cy + dy;\n\n            if (!shouldDrawPixel(x, y, { width, height, data }, camera)) continue;\n\n            const idx = (y * width + x) * 4;\n\n            const alpha = a / 255;\n            const invAlpha = 1 - alpha;\n\n            data[idx + 0] = Math.floor(r * alpha + data[idx + 0] * invAlpha);\n            data[idx + 1] = Math.floor(g * alpha + data[idx + 1] * invAlpha);\n            data[idx + 2] = Math.floor(b * alpha + data[idx + 2] * invAlpha);\n            data[idx + 3] = 255;\n\n            pixelsDrawn++;\n\n            minX = Math.min(minX, x);\n            minY = Math.min(minY, y);\n            maxX = Math.max(maxX, x);\n            maxY = Math.max(maxY, y);\n        }\n\n        return { pixels: pixelsDrawn, minX, minY, maxX, maxY };\n    }\n\n    /**\n     * Extract a rectangular region from buffer\n     * Critical for region-based updates\n     */\n    // static _extractRegion(data, bufferWidth, x, y, width, height) {\n    //     const region = new Uint8Array(width * height * 4);\n\n    //     for (let row = 0; row < height; row++) {\n    //         const srcOffset = ((y + row) * bufferWidth + x) * 4;\n    //         const dstOffset = row * width * 4;\n    //         const rowBytes = width * 4;\n\n    //         // Fast copy: use TypedArray.set instead of loop\n    //         region.set(\n    //             data.subarray(srcOffset, srcOffset + rowBytes),\n    //             dstOffset\n    //         );\n    //     }\n\n    //     return region;\n    // }\n}\n\nclass ShapeDrawer {\n    /**\n     * Fill a rectangle - optimized scanline approach\n      * This is the fastest primitive \n     * @param {PixelBuffer} canvas \n     * @param {number} x \n     * @param {number} y \n     * @param {number} width \n     * @param {number} height \n     * @param {number} r \n     * @param {number} g \n     * @param {number} b \n     * @param {number} a \n     * @param {Camera}\n     * @returns \n     */\n    static fillRect(canvas, x, y, width, height, r, g, b, a = 255, camera = undefined) {\n        // const startTime = performance.now();\n        const clamped = clampRectToCanvas(x, y, width, height, canvas.width, canvas.height);\n        if (!clamped) return { pixels: 0 };\n        // Clamp to canvas bounds - CRITICAL for safety!\n        // const x1 = Math.max(0, Math.floor(x));\n        // const y1 = Math.max(0, Math.floor(y));\n        // const x2 = Math.min(canvas.width, Math.ceil(x + width));\n        // const y2 = Math.min(canvas.height, Math.ceil(y + height));\n\n        let { x: x1, y: y1, width: actualWidth, height: actualHeight } = clamped;\n\n        // const actualWidth = x2 - x1;\n        // const actualHeight = y2 - y1;\n\n        // if (actualWidth <= 0 || actualHeight <= 0) {\n        //     return { pixels: 0, time: 0 }; // Nothing to draw\n        // }\n\n\n        const data = canvas.data;\n        const bufferWidth = canvas.width;\n        let minX = Infinity, minY = Infinity;\n        let maxX = -Infinity, maxY = -Infinity;\n        // Write scanlines\n        let pixelsDrawn = 0;\n        for (let py = y1; py < y1 + actualHeight; py++) {\n            for (let px = x1; px < x1 + actualWidth; px++) {\n                if (!shouldDrawPixel(px, py, canvas, camera)) continue;\n\n                const idx = (py * bufferWidth + px) * 4;\n                data[idx + 0] = r;\n                data[idx + 1] = g;\n                data[idx + 2] = b;\n                data[idx + 3] = a;\n                pixelsDrawn++;\n\n                minX = Math.min(minX, px);\n                minY = Math.min(minY, py);\n                maxX = Math.max(maxX, px);\n                maxY = Math.max(maxY, py);\n            }\n        }\n\n        if (pixelsDrawn === 0) return { pixels: 0 };\n\n        const tracker = canvas.dirtyTracker;\n        if (tracker) {\n            tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n        }\n        canvas.needsUpload = true;\n    }\n\n    /**\n     *      * Stroke a rectangle outline\n         * Draws 4 lines - could be optimized further but this is clear\n     * @param {PixelBuffer} canvas \n     * @param {number} x \n     * @param {number} y \n     * @param {number} width \n     * @param {number} height \n     * @param {number} thickness \n     * @param {number} r \n     * @param {number} g \n     * @param {number} b \n     * @param {number} a \n     * @param {Camera}\n     * @returns \n     */\n    static strokeRect(canvas, x, y, width, height, thickness, r, g, b, a = 255, camera = undefined) {\n        // const startTime = performance.now();\n\n        x = Math.floor(x);\n        y = Math.floor(y);\n        width = Math.ceil(width);\n        height = Math.ceil(height);\n\n        thickness = Math.max(1, Math.floor(thickness));\n\n        // Top edge\n        LineDrawer$1.drawThickLine(canvas, x, y, x + width, y, thickness, r, g, b, a, camera);\n        // Right edge  \n        LineDrawer$1.drawThickLine(canvas, x + width, y, x + width, y + height, thickness, r, g, b, a, camera);\n        // Bottom edge\n        LineDrawer$1.drawThickLine(canvas, x + width, y + height, x, y + height, thickness, r, g, b, a, camera);\n        // Left edge\n        LineDrawer$1.drawThickLine(canvas, x, y + height, x, y, thickness, r, g, b, a, camera);\n\n        // const elapsed = performance.now() - startTime;\n        // return { time: elapsed };\n    }\n\n    /**\n     * Fill a circle using midpoint algorithm with scanline filling\n     * This is THE way to draw filled circles efficiently\n     * @param {PixelBuffer} canvas \n     * @param {number} cx \n     * @param {number} cy \n     * @param {number} radius \n     * @param {number} r \n     * @param {number} g \n     * @param {number} b \n     * @param {number} a \n     * @param {Camera}\n     * @returns \n     */\n    static fillCircle(canvas, cx, cy, radius, r, g, b, a = 255, camera = undefined) {\n        // const startTime = performance.now();\n\n        // Convert to integers and validate\n        const x = Math.floor(cx);\n        const y = Math.floor(cy);\n        const rad = Math.floor(radius);\n\n        if (rad <= 0) return { pixels: 0, time: 0 };\n\n\n        let minX = Infinity, minY = Infinity;\n        let maxX = -Infinity, maxY = -Infinity;\n\n\n        const data = canvas.data;\n        const width = canvas.width;\n        canvas.height;\n\n        // Midpoint circle algorithm - calculate horizontal spans\n        let px = rad;\n        let py = 0;\n        let d = 1 - rad;  // Decision parameter\n\n        let pixelsDrawn = 0;\n\n        // Helper to draw horizontal span - this is the key optimization!\n        const drawSpan = (y, x1, x2) => {\n            for (let px = x1; px <= x2; px++) {\n                if (!shouldDrawPixel(px, y, canvas, camera)) continue;\n\n                const idx = (y * width + px) * 4;\n                data[idx + 0] = r;\n                data[idx + 1] = g;\n                data[idx + 2] = b;\n                data[idx + 3] = a;\n                pixelsDrawn++;\n\n                minX = Math.min(minX, px);\n                minY = Math.min(minY, y);\n                maxX = Math.max(maxX, px);\n                maxY = Math.max(maxY, y);\n            }\n        };\n\n        // Special case: initial horizontal spans\n        drawSpan(y, x - px, x + px);  // Middle horizontal\n\n        // Main circle algorithm loop\n        while (px > py) {\n            py++;\n\n            // Update decision parameter\n            if (d < 0) {\n                d += 2 * py + 1;\n            } else {\n                px--;\n                d += 2 * (py - px) + 1;\n            }\n\n            // Draw 4 horizontal spans (using 8-way symmetry)\n            // Top half\n            drawSpan(y + py, x - px, x + px);  // Octants 1 & 4\n            drawSpan(y + px, x - py, x + py);  // Octants 2 & 3\n\n            // Bottom half  \n            drawSpan(y - py, x - px, x + px);  // Octants 5 & 8\n            drawSpan(y - px, x - py, x + py);  // Octants 6 & 7\n        }\n\n        if (pixelsDrawn === 0) return { pixels: 0 };\n\n        const tracker = canvas.dirtyTracker;\n        if (tracker) {\n            tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n        }\n        canvas.needsUpload = true;\n    }\n\n    /**\n     * Stroke a circle outline using midpoint algorithm\n     * Draws the circle perimeter without filling\n     * @param {PixelBuffer} canvas \n     * @param {number} cx \n     * @param {number} cy \n     * @param {number} radius \n     * @param {number} thickness \n     * @param {number} r \n     * @param {number} g \n     * @param {number} b \n     * @param {number} a \n     * @param {Camera}\n     * @returns \n     */\n    static strokeCircle(canvas, cx, cy, radius, thickness, r, g, b, a = 255, camera = undefined) {\n        // const startTime = performance.now();\n\n        const x = Math.floor(cx);\n        const y = Math.floor(cy);\n        const rad = Math.floor(radius);\n\n        if (rad <= 0) return { pixels: 0, time: 0 };\n\n        // For thick strokes, draw filled circles with inner cutout\n        if (thickness > 1) {\n            return ShapeDrawer._strokeCircleThick(canvas, x, y, rad, thickness, r, g, b, a);\n        }\n\n        // Thin stroke: just the perimeter points\n        const data = canvas.data;\n        const width = canvas.width;\n        canvas.height;\n        let minX = Infinity, minY = Infinity;\n        let maxX = -Infinity, maxY = -Infinity;\n        let px = rad;\n        let py = 0;\n        let d = 1 - rad;\n\n        let pixelsDrawn = 0;\n\n        const setPixelSafe = (x, y) => {\n            if (!shouldDrawPixel(x, y, canvas, camera)) return;\n\n            const idx = (y * width + x) * 4;\n            data[idx + 0] = r;\n            data[idx + 1] = g;\n            data[idx + 2] = b;\n            data[idx + 3] = a;\n            pixelsDrawn++;\n\n            minX = Math.min(minX, x);\n            minY = Math.min(minY, y);\n            maxX = Math.max(maxX, x);\n            maxY = Math.max(maxY, y);\n        };\n\n        // 8-way symmetry for perimeter - only draw outline\n        while (px >= py) {\n            setPixelSafe(x + px, y + py);\n            setPixelSafe(x + py, y + px);\n            setPixelSafe(x - px, y + py);\n            setPixelSafe(x - py, y + px);\n            setPixelSafe(x - px, y - py);\n            setPixelSafe(x - py, y - px);\n            setPixelSafe(x + px, y - py);\n            setPixelSafe(x + py, y - px);\n\n            py++;\n\n            if (d < 0) {\n                d += 2 * py + 1;\n            } else {\n                px--;\n                d += 2 * (py - px) + 1;\n            }\n        }\n\n\n        if (pixelsDrawn === 0) return { pixels: 0 };\n\n        const tracker = canvas.dirtyTracker;\n        if (tracker) {\n            tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n        }\n        canvas.needsUpload = true;\n    }\n\n    /**\n     * Thick circle stroke - draw outer circle, cut out inner circle\n     */\n    static _strokeCircleThick(canvas, cx, cy, radius, thickness, r, g, b, a, camera) {\n        const outerRad = radius;\n        const innerRad = Math.max(0, radius - thickness);\n\n        const data = canvas.data;\n        const width = canvas.width;\n        const height = canvas.height;\n\n        let minX = Infinity, minY = Infinity;\n        let maxX = -Infinity, maxY = -Infinity;\n\n        let pixelsDrawn = 0;\n\n        const outerRadSq = outerRad * outerRad;\n        const innerRadSq = innerRad * innerRad;\n\n        const checkMinX = Math.max(0, cx - outerRad);\n        const checkMinY = Math.max(0, cy - outerRad);\n        const checkMaxX = Math.min(width - 1, cx + outerRad);\n        const checkMaxY = Math.min(height - 1, cy + outerRad);\n\n        for (let py = checkMinY; py <= checkMaxY; py++) {\n            for (let px = checkMinX; px <= checkMaxX; px++) {\n                const dx = px - cx;\n                const dy = py - cy;\n                const distSq = dx * dx + dy * dy;\n\n                if (distSq <= outerRadSq && distSq >= innerRadSq) {\n                    if (!shouldDrawPixel(px, py, canvas, camera)) continue;\n\n                    const idx = (py * width + px) * 4;\n                    data[idx + 0] = r;\n                    data[idx + 1] = g;\n                    data[idx + 2] = b;\n                    data[idx + 3] = a;\n                    pixelsDrawn++;\n\n                    minX = Math.min(minX, px);\n                    minY = Math.min(minY, py);\n                    maxX = Math.max(maxX, px);\n                    maxY = Math.max(maxY, py);\n                }\n            }\n        }\n\n        if (pixelsDrawn === 0) return { pixels: 0 };\n\n        const tracker = canvas.dirtyTracker;\n        if (tracker) {\n            tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n        }\n        canvas.needsUpload = true;\n    }\n\n\n    /**\n     * Extract rectangular region from buffer\n     */\n    // static _extractRegion(data, bufferWidth, x, y, width, height) {\n    //     const region = new Uint8Array(width * height * 4);\n\n    //     for (let row = 0; row < height; row++) {\n    //         const srcOffset = ((y + row) * bufferWidth + x) * 4;\n    //         const dstOffset = row * width * 4;\n    //         const rowBytes = width * 4;\n\n    //         region.set(\n    //             data.subarray(srcOffset, srcOffset + rowBytes),\n    //             dstOffset\n    //         );\n    //     }\n\n    //     return region;\n    // }\n}\n\n// polygon.js\n\nclass PolygonDrawer {\n    /**\n     *      * Fill a polygon defined by an array of points\n         * Uses scanline algorithm with edge table\n         * Handles convex, concave, and self-intersecting polygons\n     * @param {PixelBuffer} canvas \n     * @param {Array<{x: number, y: number}>} points \n     * @param {number} r \n     * @param {number} g \n     * @param {number} b \n     * @param {number} a \n     * @param {Camera} camera \n     * @returns \n     */\n    static fillPolygon(canvas, points, r, g, b, a = 255, camera = undefined) {\n        if (points.length < 3) return { pixels: 0 };\n\n        const edges = PolygonDrawer._buildEdgeTable(points);\n        if (edges.length === 0) return { pixels: 0 };\n\n        let yMin = Infinity, yMax = -Infinity;\n        for (const edge of edges) {\n            yMin = Math.min(yMin, edge.yMin);\n            yMax = Math.max(yMax, edge.yMax);\n        }\n\n        yMin = Math.max(0, Math.floor(yMin));\n        yMax = Math.min(canvas.height - 1, Math.ceil(yMax));\n\n        const data = canvas.data;\n        const width = canvas.width;\n        canvas.height;\n\n        let minX = Infinity, minY = Infinity;\n        let maxX = -Infinity, maxY = -Infinity;\n\n        let pixelsDrawn = 0;\n\n        for (let y = yMin; y <= yMax; y++) {\n            const intersections = [];\n\n            for (const edge of edges) {\n                if (y >= edge.yMin && y < edge.yMax) {\n                    const x = edge.x + (y - edge.yMin) * edge.dx;\n                    intersections.push(x);\n                }\n            }\n\n            intersections.sort((a, b) => a - b);\n\n            for (let i = 0; i < intersections.length - 1; i += 2) {\n                const x1 = Math.floor(intersections[i]);\n                const x2 = Math.ceil(intersections[i + 1]);\n\n                for (let x = x1; x <= x2; x++) {\n                    if (!shouldDrawPixel(x, y, canvas, camera)) continue;\n\n                    const idx = (y * width + x) * 4;\n                    data[idx + 0] = r;\n                    data[idx + 1] = g;\n                    data[idx + 2] = b;\n                    data[idx + 3] = a;\n                    pixelsDrawn++;\n\n                    minX = Math.min(minX, x);\n                    minY = Math.min(minY, y);\n                    maxX = Math.max(maxX, x);\n                    maxY = Math.max(maxY, y);\n                }\n            }\n        }\n\n        if (pixelsDrawn === 0) return { pixels: 0 };\n\n        const tracker = canvas.dirtyTracker;\n        if (tracker) {\n            tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n        }\n        canvas.needsUpload = true;\n    }\n\n    /**\n     * Build edge table from vertices\n     * Each edge stores: yMin, yMax, x at yMin, and dx (inverse slope)\n     */\n    static _buildEdgeTable(points) {\n        const edges = [];\n        const n = points.length;\n\n        for (let i = 0; i < n; i++) {\n            const p1 = points[i];\n            const p2 = points[(i + 1) % n];\n\n            if (Math.abs(p1.y - p2.y) < 0.001) continue;\n\n            let x1 = p1.x, y1 = p1.y;\n            let x2 = p2.x, y2 = p2.y;\n\n            if (y1 > y2) {\n                [x1, x2] = [x2, x1];\n                [y1, y2] = [y2, y1];\n            }\n\n            const dx = (x2 - x1) / (y2 - y1);\n\n            edges.push({\n                yMin: y1,\n                yMax: y2,\n                x: x1,\n                dx: dx\n            });\n        }\n\n        return edges;\n    }\n\n    /**\n     * \n     * @param {PixelBuffer} canvas \n     * @param {Array<{x: number, y: number}>} points \n     * @param {number} thickness \n     * @param {number} r \n     * @param {number} g \n     * @param {number} b \n     * @param {number} a \n     * @param {Camera} camera \n     * @returns \n     */\n    static strokePolygon(canvas, points, thickness, r, g, b, a = 255, camera = undefined) {\n        if (points.length < 2) return;\n\n        for (let i = 0; i < points.length; i++) {\n            const p1 = points[i];\n            const p2 = points[(i + 1) % points.length];\n\n            LineDrawer$1.drawThickLine(\n                canvas,\n                p1.x, p1.y,\n                p2.x, p2.y,\n                thickness,\n                r, g, b, a,\n                camera\n            );\n        }\n    }\n\n    /**\n     * \n     * @param {number} cx \n     * @param {number} cy \n     * @param {number} radius \n     * @param {number} sides \n     * @returns \n     */\n    static createRegularPolygon(cx, cy, radius, sides) {\n        const points = [];\n        const angleStep = (Math.PI * 2) / sides;\n\n        for (let i = 0; i < sides; i++) {\n            const angle = i * angleStep - Math.PI / 2;\n            points.push({\n                x: cx + Math.cos(angle) * radius,\n                y: cy + Math.sin(angle) * radius\n            });\n        }\n\n        return points;\n    }\n\n    /**\n     * \n     * @param {number} cx \n     * @param {number} cy \n     * @param {number} outerRadius \n     * @param {number} innerRadius \n     * @param {number} points \n     * @returns \n     */\n    static createStar(cx, cy, outerRadius, innerRadius, points) {\n        const verts = [];\n        const angleStep = (Math.PI * 2) / (points * 2);\n\n        for (let i = 0; i < points * 2; i++) {\n            const angle = i * angleStep - Math.PI / 2;\n            const radius = i % 2 === 0 ? outerRadius : innerRadius;\n\n            verts.push({\n                x: cx + Math.cos(angle) * radius,\n                y: cy + Math.sin(angle) * radius\n            });\n        }\n\n        return verts;\n    }\n\n    /**\n     * \n     * @param {number} x \n     * @param {number} y \n     * @param {number} width \n     * @param {number} height \n     * @param {number} radius \n     * @returns \n     */\n    static createRoundedRect(x, y, width, height, radius) {\n        const segments = 8;\n        const points = [];\n\n        const addArc = (cx, cy, r, startAngle, endAngle) => {\n            for (let i = 0; i <= segments; i++) {\n                const t = i / segments;\n                const angle = startAngle + (endAngle - startAngle) * t;\n                points.push({\n                    x: cx + Math.cos(angle) * r,\n                    y: cy + Math.sin(angle) * r\n                });\n            }\n        };\n\n        const r = Math.min(radius, width / 2, height / 2);\n\n        addArc(x + width - r, y + r, r, -Math.PI / 2, 0);\n        addArc(x + width - r, y + height - r, r, 0, Math.PI / 2);\n        addArc(x + r, y + height - r, r, Math.PI / 2, Math.PI);\n        addArc(x + r, y + r, r, Math.PI, Math.PI * 1.5);\n\n        return points;\n    }\n\n    // static _extractRegion(data, bufferWidth, x, y, width, height) {\n    //     const region = new Uint8Array(width * height * 4);\n\n    //     for (let row = 0; row < height; row++) {\n    //         const srcOffset = ((y + row) * bufferWidth + x) * 4;\n    //         const dstOffset = row * width * 4;\n    //         const rowBytes = width * 4;\n\n    //         region.set(\n    //             data.subarray(srcOffset, srcOffset + rowBytes),\n    //             dstOffset\n    //         );\n    //     }\n\n    //     return region;\n    // }\n}\n\n// TODO: add region tracker for all primitives\nclass AADrawer {\n  /**\n   * Wu's line algorithm - anti-aliased line drawing\n   * Handles all slopes, all directions\n   * @param {PixelBuffer} canvas\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   * @param {number} r\n   * @param {number} g\n   * @param {number} b\n   * @param {number} a\n   * @param {Camera}\n   * @returns\n   */\n  static drawLineAA(canvas, x1, y1, x2, y2, r, g, b, a = 255, camera = undefined) {\n    // const startTime = performance.now(); TODO: make a optional scoped profiler\n    // Track actual drawn region\n    let minX = Infinity, minY = Infinity;\n    let maxX = -Infinity, maxY = -Infinity;\n    let pixelsDrawn = 0;\n    canvas.data;\n    canvas.width;\n    canvas.height;\n    // edge cases\n    if (x1 === x2 && y1 === y2) {\n      if (AADrawer._setPixelAA(canvas, x1, y1, r, g, b, a, camera)) {\n        const px = Math.floor(x1);\n        const py = Math.floor(y1);\n        pixelsDrawn = 1;\n        minX = Math.min(minX, px);\n        minY = Math.min(minY, py);\n        maxX = Math.max(maxX, px);\n        maxY = Math.max(maxY, py);\n      }\n    } else {\n      const steep = Math.abs(y2 - y1) > Math.abs(x2 - x1);\n      // For steep lines, swap x and y\n      if (steep) {\n        [x1, y1] = [y1, x1];\n        [x2, y2] = [y2, x2];\n      }\n      // Ensure left-to-right drawing\n      if (x1 > x2) {\n        [x1, x2] = [x2, x1];\n        [y1, y2] = [y2, y1];\n      }\n      const dx = x2 - x1;\n      const dy = y2 - y1;\n      const gradient = dx === 0 ? 1 : dy / dx;\n      // First endpoint with anti-aliasing\n      let xEnd = Math.round(x1);\n      let yEnd = y1 + gradient * (xEnd - x1);\n      let xGap = 1 - (x1 + 0.5 - Math.floor(x1 + 0.5));\n      let xPx1 = xEnd;\n      let yPx1 = Math.floor(yEnd);\n      let drew = false;\n      if (steep) {\n        drew = AADrawer._setPixelAA(\n          canvas,\n          yPx1,\n          xPx1,\n          r,\n          g,\n          b,\n          a * (1 - (yEnd - yPx1)) * xGap,\n          camera,\n        );\n        if (drew) {\n          pixelsDrawn++;\n          minX = Math.min(minX, yPx1);\n          minY = Math.min(minY, xPx1);\n          maxX = Math.max(maxX, yPx1);\n          maxY = Math.max(maxY, xPx1);\n        }\n        drew = AADrawer._setPixelAA(\n          canvas,\n          yPx1 + 1,\n          xPx1,\n          r,\n          g,\n          b,\n          a * (yEnd - yPx1) * xGap,\n          camera,\n        );\n        if (drew) {\n          pixelsDrawn++;\n          minX = Math.min(minX, yPx1 + 1);\n          minY = Math.min(minY, xPx1);\n          maxX = Math.max(maxX, yPx1 + 1);\n          maxY = Math.max(maxY, xPx1);\n        }\n      } else {\n        drew = AADrawer._setPixelAA(\n          canvas,\n          xPx1,\n          yPx1,\n          r,\n          g,\n          b,\n          a * (1 - (yEnd - yPx1)) * xGap,\n          camera,\n        );\n        if (drew) {\n          pixelsDrawn++;\n          minX = Math.min(minX, xPx1);\n          minY = Math.min(minY, yPx1);\n          maxX = Math.max(maxX, xPx1);\n          maxY = Math.max(maxY, yPx1);\n        }\n        drew = AADrawer._setPixelAA(\n          canvas,\n          xPx1,\n          yPx1 + 1,\n          r,\n          g,\n          b,\n          a * (yEnd - yPx1) * xGap,\n          camera,\n        );\n        if (drew) {\n          pixelsDrawn++;\n          minX = Math.min(minX, xPx1);\n          minY = Math.min(minY, yPx1 + 1);\n          maxX = Math.max(maxX, xPx1);\n          maxY = Math.max(maxY, yPx1 + 1);\n        }\n      }\n      let interY = yEnd + gradient;\n      // Second endpoint with anti-aliasing\n      xEnd = Math.round(x2);\n      yEnd = y2 + gradient * (xEnd - x2);\n      xGap = x2 + 0.5 - Math.floor(x2 + 0.5);\n      let xPx2 = xEnd;\n      let yPx2 = Math.floor(yEnd);\n      if (steep) {\n        drew = AADrawer._setPixelAA(\n          canvas,\n          yPx2,\n          xPx2,\n          r,\n          g,\n          b,\n          a * (1 - (yEnd - yPx2)) * xGap,\n          camera,\n        );\n        if (drew) {\n          pixelsDrawn++;\n          minX = Math.min(minX, yPx2);\n          minY = Math.min(minY, xPx2);\n          maxX = Math.max(maxX, yPx2);\n          maxY = Math.max(maxY, xPx2);\n        }\n        drew = AADrawer._setPixelAA(\n          canvas,\n          yPx2 + 1,\n          xPx2,\n          r,\n          g,\n          b,\n          a * (yEnd - yPx2) * xGap,\n          camera,\n        );\n        if (drew) {\n          pixelsDrawn++;\n          minX = Math.min(minX, yPx2 + 1);\n          minY = Math.min(minY, xPx2);\n          maxX = Math.max(maxX, yPx2 + 1);\n          maxY = Math.max(maxY, xPx2);\n        }\n      } else {\n        drew = AADrawer._setPixelAA(\n          canvas,\n          xPx2,\n          yPx2,\n          r,\n          g,\n          b,\n          a * (1 - (yEnd - yPx2)) * xGap,\n          camera,\n        );\n        if (drew) {\n          pixelsDrawn++;\n          minX = Math.min(minX, xPx2);\n          minY = Math.min(minY, yPx2);\n          maxX = Math.max(maxX, xPx2);\n          maxY = Math.max(maxY, yPx2);\n        }\n        drew = AADrawer._setPixelAA(\n          canvas,\n          xPx2,\n          yPx2 + 1,\n          r,\n          g,\n          b,\n          a * (yEnd - yPx2) * xGap,\n          camera,\n        );\n        if (drew) {\n          pixelsDrawn++;\n          minX = Math.min(minX, xPx2);\n          minY = Math.min(minY, yPx2 + 1);\n          maxX = Math.max(maxX, xPx2);\n          maxY = Math.max(maxY, yPx2 + 1);\n        }\n      }\n      // draw between endpoints\n      if (steep) {\n        for (let x = xPx1 + 1; x < xPx2; x++) {\n          const iPart = Math.floor(interY);\n          const fPart = interY - iPart;\n          drew = AADrawer._setPixelAA(canvas, iPart, x, r, g, b, a * (1 - fPart), camera);\n          if (drew) {\n            pixelsDrawn++;\n            minX = Math.min(minX, iPart);\n            minY = Math.min(minY, x);\n            maxX = Math.max(maxX, iPart);\n            maxY = Math.max(maxY, x);\n          }\n          drew = AADrawer._setPixelAA(canvas, iPart + 1, x, r, g, b, a * fPart, camera);\n          if (drew) {\n            pixelsDrawn++;\n            minX = Math.min(minX, iPart + 1);\n            minY = Math.min(minY, x);\n            maxX = Math.max(maxX, iPart + 1);\n            maxY = Math.max(maxY, x);\n          }\n          interY += gradient;\n        }\n      } else {\n        for (let x = xPx1 + 1; x < xPx2; x++) {\n          const iPart = Math.floor(interY);\n          const fPart = interY - iPart;\n          drew = AADrawer._setPixelAA(canvas, x, iPart, r, g, b, a * (1 - fPart), camera);\n          if (drew) {\n            pixelsDrawn++;\n            minX = Math.min(minX, x);\n            minY = Math.min(minY, iPart);\n            maxX = Math.max(maxX, x);\n            maxY = Math.max(maxY, iPart);\n          }\n          drew = AADrawer._setPixelAA(canvas, x, iPart + 1, r, g, b, a * fPart, camera);\n          if (drew) {\n            pixelsDrawn++;\n            minX = Math.min(minX, x);\n            minY = Math.min(minY, iPart + 1);\n            maxX = Math.max(maxX, x);\n            maxY = Math.max(maxY, iPart + 1);\n          }\n          interY += gradient;\n        }\n      }\n    }\n    if (pixelsDrawn === 0) {\n      return;\n    }\n    const tracker = canvas.dirtyTracker;\n    if (tracker) {\n      tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n    }\n    canvas.needsUpload = true;\n  }\n  /**\n   * Set pixel with alpha blending\n   * This is CRITICAL - without proper blending, AA looks terrible\n   */\n  static _setPixelAA(canvas, x, y, r, g, b, a, camera) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n    if (!shouldDrawPixel(x, y, canvas, camera)) return false;\n    const alpha = Math.max(0, Math.min(1, a / 255));\n    if (alpha <= 0) return false;\n    const idx = (y * canvas.width + x) * 4;\n    const data = canvas.data;\n    // alpha blending formula: dst = src*alpha + dst*(1-alpha)\n    const invAlpha = 1 - alpha;\n    data[idx + 0] = Math.floor(r * alpha + data[idx + 0] * invAlpha);\n    data[idx + 1] = Math.floor(g * alpha + data[idx + 1] * invAlpha);\n    data[idx + 2] = Math.floor(b * alpha + data[idx + 2] * invAlpha);\n    // keep existing alpha (or set to 255 for opaque canvas)\n    data[idx + 3] = 255;\n    return true;\n  }\n  /**\n   * Anti-aliased circle using analytical coverage\n   * For each pixel on the circle's edge, calculate exact coverage\n   * @param {PixelBuffer} canvas\n   * @param {number} cx\n   * @param {number} cy\n   * @param {number} radius\n   * @param {number} r\n   * @param {number} g\n   * @param {number} b\n   * @param {number} a\n   * @param {Camera}\n   * @returns\n   */\n  static drawCircleAA(canvas, cx, cy, radius, r, g, b, a = 255, camera = undefined) {\n    // const startTime = performance.now();\n    const x = Math.floor(cx);\n    const y = Math.floor(cy);\n    const rad = radius;\n    if (rad <= 0) return;\n    const inner2 = (rad - 0.5) * (rad - 0.5);\n    const outer2 = (rad + 0.5) * (rad + 0.5);\n    const minXLoop = Math.max(0, x - Math.ceil(rad) - 1);\n    const minYLoop = Math.max(0, y - Math.ceil(rad) - 1);\n    const maxXLoop = Math.min(canvas.width - 1, x + Math.ceil(rad) + 1);\n    const maxYLoop = Math.min(canvas.height - 1, y + Math.ceil(rad) + 1);\n    let minX = Infinity, minY = Infinity;\n    let maxX = -Infinity, maxY = -Infinity;\n    let pixelsDrawn = 0;\n    for (let py = minYLoop; py <= maxYLoop; py++) {\n      const dy = py - cy;\n      for (let px = minXLoop; px <= maxXLoop; px++) {\n        const dx = px - cx;\n        const dist2 = dx * dx + dy * dy;\n        if (dist2 < inner2 || dist2 > outer2) {\n          // outside the 1px-wide annulus: either well inside or well outside\n          continue;\n        }\n        // inside the annulus — compute exact dist once\n        const dist = Math.sqrt(dist2);\n        const delta = Math.abs(dist - rad); // 0..0.5\n        const coverage = 1.0 - delta / 0.5;\n        if (AADrawer._setPixelAA(canvas, px, py, r, g, b, a * coverage, camera)) {\n          pixelsDrawn++;\n          minX = Math.min(minX, px);\n          minY = Math.min(minY, py);\n          maxX = Math.max(maxX, px);\n          maxY = Math.max(maxY, py);\n        }\n      }\n    }\n    if (pixelsDrawn === 0) {\n      return;\n    }\n    const tracker = canvas.dirtyTracker;\n    if (tracker) {\n      tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n    }\n    canvas.needsUpload = true;\n  }\n  /**\n   * * Anti-aliased filled circle\n   * Uses distance field for smooth edges\n   * @param {PixelBuffer} canvas\n   * @param {number} cx\n   * @param {number} cy\n   * @param {number} radius\n   * @param {number} r\n   * @param {number} g\n   * @param {number} b\n   * @param {number} a\n   * @param {Camera}\n   * @returns\n   */\n  static fillCircleAA(canvas, cx, cy, radius, r, g, b, a = 255, camera = undefined) {\n    // const startTime = performance.now();\n    const x = Math.floor(cx);\n    const y = Math.floor(cy);\n    const rad = radius;\n    if (rad <= 0) return { pixels: 0, time: 0 };\n    const minXLoop = Math.max(0, x - Math.ceil(rad) - 1);\n    const minYLoop = Math.max(0, y - Math.ceil(rad) - 1);\n    const maxXLoop = Math.min(canvas.width - 1, x + Math.ceil(rad) + 1);\n    const maxYLoop = Math.min(canvas.height - 1, y + Math.ceil(rad) + 1);\n    let minX = Infinity, minY = Infinity;\n    let maxX = -Infinity, maxY = -Infinity;\n    let pixelsDrawn = 0;\n    for (let py = minYLoop; py <= maxYLoop; py++) {\n      for (let px = minXLoop; px <= maxXLoop; px++) {\n        const dx = px - cx;\n        const dy = py - cy;\n        const dist = Math.sqrt(dx * dx + dy * dy);\n        if (dist > rad + 0.5) continue;\n        const coverage = (dist <= rad - 0.5) ? 1.0 : (rad + 0.5 - dist);\n        if (AADrawer._setPixelAA(canvas, px, py, r, g, b, a * coverage, camera)) {\n          pixelsDrawn++;\n          minX = Math.min(minX, px);\n          minY = Math.min(minY, py);\n          maxX = Math.max(maxX, px);\n          maxY = Math.max(maxY, py);\n        }\n      }\n    }\n    if (pixelsDrawn === 0) {\n      return;\n    }\n    const tracker = canvas.dirtyTracker;\n    if (tracker) {\n      tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n    }\n    canvas.needsUpload = true;\n  }\n}\n\n// blending.js\r\n\r\n/** @enum {number} */\r\nconst BlendMode = {\r\n    NORMAL: 0,\r\n    MULTIPLY: 1,\r\n    SCREEN: 2,\r\n    OVERLAY: 3,\r\n    ADD: 4,\r\n    SUBTRACT: 5,\r\n    DARKEN: 6,\r\n    LIGHTEN: 7,\r\n    DIFFERENCE: 8,\r\n    COLOR_DODGE: 9,\r\n    COLOR_BURN: 10\r\n};\r\n\r\n/**\r\n * High-performance compositor with zero allocations in hot paths\r\n * All functions are inlined and branch-reduced for maximum performance\r\n */\r\nclass Compositor {\r\n    static tempCanvas = undefined;\r\n    \r\n    /**\r\n     *\r\n     * No object allocations, minimal branching, precomputed values\r\n     * @param {PixelBuffer} canvas - Target pixel buffer\r\n     * @param {Function} drawFunc - Drawing function that operates on temp canvas\r\n     * @param {number} blendMode - Blend mode from BlendMode enum\r\n     */\r\n    static drawWithBlend(canvas, drawFunc, blendMode = BlendMode.NORMAL) {\r\n        const width = canvas.width;\r\n        const height = canvas.height;\r\n        const data = canvas.data;\r\n        \r\n        \r\n        if (!this.tempCanvas) {\r\n            this.tempCanvas = new PixelBuffer(canvas.renderer, width, height);\r\n        }\r\n        \r\n        this.tempCanvas.clear(0, 0, 0, 0);\r\n        drawFunc(this.tempCanvas);\r\n        \r\n        const tempData = this.tempCanvas.data;\r\n        const length = data.length;\r\n        \r\n\r\n        const blendFunc = this._getBlendFunction(blendMode);\r\n        \r\n        // Unrolled loop - process 4 pixels at a time for better cache performance\r\n        for (let i = 0; i < length; i += 16) {\r\n            // Pixel 0\r\n            if (tempData[i + 3] !== 0) {\r\n                blendFunc(\r\n                    tempData[i], tempData[i + 1], tempData[i + 2], tempData[i + 3],\r\n                    data[i], data[i + 1], data[i + 2], data[i + 3],\r\n                    data, i\r\n                );\r\n            }\r\n            \r\n            // Pixel 1  \r\n            if (tempData[i + 7] !== 0) {\r\n                blendFunc(\r\n                    tempData[i + 4], tempData[i + 5], tempData[i + 6], tempData[i + 7],\r\n                    data[i + 4], data[i + 5], data[i + 6], data[i + 7],\r\n                    data, i + 4\r\n                );\r\n            }\r\n            \r\n            // Pixel 2\r\n            if (tempData[i + 11] !== 0) {\r\n                blendFunc(\r\n                    tempData[i + 8], tempData[i + 9], tempData[i + 10], tempData[i + 11],\r\n                    data[i + 8], data[i + 9], data[i + 10], data[i + 11],\r\n                    data, i + 8\r\n                );\r\n            }\r\n            \r\n            // Pixel 3\r\n            if (tempData[i + 15] !== 0) {\r\n                blendFunc(\r\n                    tempData[i + 12], tempData[i + 13], tempData[i + 14], tempData[i + 15],\r\n                    data[i + 12], data[i + 13], data[i + 14], data[i + 15],\r\n                    data, i + 12\r\n                );\r\n            }\r\n        }\r\n        \r\n        canvas.renderer.updateBufferData(canvas.bufferId, data);\r\n        canvas.needsUpload = true;\r\n    }\r\n    \r\n    /**\r\n     * Get pre-bound blend function to eliminate switch statement in hot loop\r\n     * @param {number} blendMode \r\n     * @returns {Function}\r\n     */\r\n    static _getBlendFunction(blendMode) {\r\n        switch (blendMode) {\r\n            case BlendMode.MULTIPLY: return this._blendMultiply;\r\n            case BlendMode.SCREEN: return this._blendScreen;\r\n            case BlendMode.OVERLAY: return this._blendOverlay;\r\n            case BlendMode.ADD: return this._blendAdd;\r\n            case BlendMode.SUBTRACT: return this._blendSubtract;\r\n            case BlendMode.DARKEN: return this._blendDarken;\r\n            case BlendMode.LIGHTEN: return this._blendLighten;\r\n            case BlendMode.DIFFERENCE: return this._blendDifference;\r\n            case BlendMode.COLOR_DODGE: return this._blendColorDodge;\r\n            case BlendMode.COLOR_BURN: return this._blendColorBurn;\r\n            default: return this._blendNormal;\r\n        }\r\n    }\r\n    \r\n    /**\r\n     * Normal blend - direct source over destination\r\n     * Inlined Porter-Duff source over composition\r\n     */\r\n    static _blendNormal(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n        if (srcA === 255) {\r\n            // Fast path: fully opaque source\r\n            data[idx] = srcR;\r\n            data[idx + 1] = srcG;\r\n            data[idx + 2] = srcB;\r\n            data[idx + 3] = 255;\r\n            return;\r\n        }\r\n        \r\n        if (srcA === 0) return;\r\n        \r\n        // Porter-Duff source over with precomputed values\r\n        const sa = srcA * 0.00392156862745098; // srcA / 255\r\n        const da = dstA * 0.00392156862745098; // dstA / 255\r\n        const outA = sa + da * (1 - sa);\r\n        \r\n        if (outA < 0.001) { // ~0.25 alpha value threshold\r\n            data[idx] = 0;\r\n            data[idx + 1] = 0;\r\n            data[idx + 2] = 0;\r\n            data[idx + 3] = 0;\r\n            return;\r\n        }\r\n        \r\n        const invOutA = 1 / outA;\r\n        data[idx] = (srcR * sa + dstR * da * (1 - sa)) * invOutA;\r\n        data[idx + 1] = (srcG * sa + dstG * da * (1 - sa)) * invOutA;\r\n        data[idx + 2] = (srcB * sa + dstB * da * (1 - sa)) * invOutA;\r\n        data[idx + 3] = outA * 255;\r\n    }\r\n    \r\n    /**\r\n     * Multiply blend - colors are multiplied\r\n     */\r\n    static _blendMultiply(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n        if (srcA === 0) return;\r\n        \r\n        const sa = srcA * 0.00392156862745098;\r\n        const da = dstA * 0.00392156862745098;\r\n        const outA = sa + da * (1 - sa);\r\n        \r\n        if (outA < 0.001) {\r\n            data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n            return;\r\n        }\r\n        \r\n        const invOutA = 1 / outA;\r\n        const r = (srcR * dstR) * 0.00392156862745098; // / 255\r\n        const g = (srcG * dstG) * 0.00392156862745098;\r\n        const b = (srcB * dstB) * 0.00392156862745098;\r\n        \r\n        data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n        data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n        data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n        data[idx + 3] = outA * 255;\r\n    }\r\n    \r\n    /**\r\n     * Screen blend - opposite of multiply\r\n     */\r\n    static _blendScreen(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n        if (srcA === 0) return;\r\n        \r\n        const sa = srcA * 0.00392156862745098;\r\n        const da = dstA * 0.00392156862745098;\r\n        const outA = sa + da * (1 - sa);\r\n        \r\n        if (outA < 0.001) {\r\n            data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n            return;\r\n        }\r\n        \r\n        const invOutA = 1 / outA;\r\n        const r = 255 - ((255 - srcR) * (255 - dstR)) * 0.00392156862745098;\r\n        const g = 255 - ((255 - srcG) * (255 - dstG)) * 0.00392156862745098;\r\n        const b = 255 - ((255 - srcB) * (255 - dstB)) * 0.00392156862745098;\r\n        \r\n        data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n        data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n        data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n        data[idx + 3] = outA * 255;\r\n    }\r\n    \r\n    /**\r\n     * Overlay blend - multiply or screen based on destination\r\n     */\r\n    static _blendOverlay(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n        if (srcA === 0) return;\r\n        \r\n        const sa = srcA * 0.00392156862745098;\r\n        const da = dstA * 0.00392156862745098;\r\n        const outA = sa + da * (1 - sa);\r\n        \r\n        if (outA < 0.001) {\r\n            data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n            return;\r\n        }\r\n        \r\n        const invOutA = 1 / outA;\r\n        \r\n        // inlined overlay per channel\r\n        const r = dstR < 128 ? \r\n            (2 * srcR * dstR) * 0.00392156862745098 : \r\n            255 - (2 * (255 - srcR) * (255 - dstR)) * 0.00392156862745098;\r\n            \r\n        const g = dstG < 128 ? \r\n            (2 * srcG * dstG) * 0.00392156862745098 : \r\n            255 - (2 * (255 - srcG) * (255 - dstG)) * 0.00392156862745098;\r\n            \r\n        const b = dstB < 128 ? \r\n            (2 * srcB * dstB) * 0.00392156862745098 : \r\n            255 - (2 * (255 - srcB) * (255 - dstB)) * 0.00392156862745098;\r\n        \r\n        data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n        data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n        data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n        data[idx + 3] = outA * 255;\r\n    }\r\n    \r\n    /**\r\n     * Add blend - add source and destination\r\n     */\r\n    static _blendAdd(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n        if (srcA === 0) return;\r\n        \r\n        const sa = srcA * 0.00392156862745098;\r\n        const da = dstA * 0.00392156862745098;\r\n        const outA = sa + da * (1 - sa);\r\n        \r\n        if (outA < 0.001) {\r\n            data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n            return;\r\n        }\r\n        \r\n        const invOutA = 1 / outA;\r\n        let r = srcR + dstR; if (r > 255) r = 255;\r\n        let g = srcG + dstG; if (g > 255) g = 255;\r\n        let b = srcB + dstB; if (b > 255) b = 255;\r\n        \r\n        data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n        data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n        data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n        data[idx + 3] = outA * 255;\r\n    }\r\n    \r\n    /**\r\n     * Subtract blend - subtract source from destination\r\n     */\r\n    static _blendSubtract(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n        if (srcA === 0) return;\r\n        \r\n        const sa = srcA * 0.00392156862745098;\r\n        const da = dstA * 0.00392156862745098;\r\n        const outA = sa + da * (1 - sa);\r\n        \r\n        if (outA < 0.001) {\r\n            data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n            return;\r\n        }\r\n        \r\n        const invOutA = 1 / outA;\r\n        let r = dstR - srcR; if (r < 0) r = 0;\r\n        let g = dstG - srcG; if (g < 0) g = 0;\r\n        let b = dstB - srcB; if (b < 0) b = 0;\r\n        \r\n        data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n        data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n        data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n        data[idx + 3] = outA * 255;\r\n    }\r\n    \r\n    /**\r\n     * Darken blend - take minimum of source and destination\r\n     */\r\n    static _blendDarken(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n        if (srcA === 0) return;\r\n        \r\n        const sa = srcA * 0.00392156862745098;\r\n        const da = dstA * 0.00392156862745098;\r\n        const outA = sa + da * (1 - sa);\r\n        \r\n        if (outA < 0.001) {\r\n            data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n            return;\r\n        }\r\n        \r\n        const invOutA = 1 / outA;\r\n        const r = srcR < dstR ? srcR : dstR;\r\n        const g = srcG < dstG ? srcG : dstG;\r\n        const b = srcB < dstB ? srcB : dstB;\r\n        \r\n        data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n        data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n        data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n        data[idx + 3] = outA * 255;\r\n    }\r\n    \r\n    /**\r\n     * Lighten blend - take maximum of source and destination\r\n     */\r\n    static _blendLighten(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n        if (srcA === 0) return;\r\n        \r\n        const sa = srcA * 0.00392156862745098;\r\n        const da = dstA * 0.00392156862745098;\r\n        const outA = sa + da * (1 - sa);\r\n        \r\n        if (outA < 0.001) {\r\n            data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n            return;\r\n        }\r\n        \r\n        const invOutA = 1 / outA;\r\n        const r = srcR > dstR ? srcR : dstR;\r\n        const g = srcG > dstG ? srcG : dstG;\r\n        const b = srcB > dstB ? srcB : dstB;\r\n        \r\n        data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n        data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n        data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n        data[idx + 3] = outA * 255;\r\n    }\r\n    \r\n    /**\r\n     * Difference blend - absolute difference between source and destination\r\n     */\r\n    static _blendDifference(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n        if (srcA === 0) return;\r\n        \r\n        const sa = srcA * 0.00392156862745098;\r\n        const da = dstA * 0.00392156862745098;\r\n        const outA = sa + da * (1 - sa);\r\n        \r\n        if (outA < 0.001) {\r\n            data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n            return;\r\n        }\r\n        \r\n        const invOutA = 1 / outA;\r\n        const r = Math.abs(srcR - dstR);\r\n        const g = Math.abs(srcG - dstG);\r\n        const b = Math.abs(srcB - dstB);\r\n        \r\n        data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n        data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n        data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n        data[idx + 3] = outA * 255;\r\n    }\r\n    \r\n    /**\r\n     * Color dodge blend - brighten destination based on source\r\n     */\r\n    static _blendColorDodge(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n        if (srcA === 0) return;\r\n        \r\n        const sa = srcA * 0.00392156862745098;\r\n        const da = dstA * 0.00392156862745098;\r\n        const outA = sa + da * (1 - sa);\r\n        \r\n        if (outA < 0.001) {\r\n            data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n            return;\r\n        }\r\n        \r\n        const invOutA = 1 / outA;\r\n        \r\n        //color dodge per channel\r\n        const r = srcR === 255 ? 255 : Math.min(255, (dstR * 255) / (255 - srcR));\r\n        const g = srcG === 255 ? 255 : Math.min(255, (dstG * 255) / (255 - srcG));\r\n        const b = srcB === 255 ? 255 : Math.min(255, (dstB * 255) / (255 - srcB));\r\n        \r\n        data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n        data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n        data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n        data[idx + 3] = outA * 255;\r\n    }\r\n    \r\n    /**\r\n     * Color burn blend - darken destination based on source\r\n     */\r\n    static _blendColorBurn(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx) {\r\n        if (srcA === 0) return;\r\n        \r\n        const sa = srcA * 0.00392156862745098;\r\n        const da = dstA * 0.00392156862745098;\r\n        const outA = sa + da * (1 - sa);\r\n        \r\n        if (outA < 0.001) {\r\n            data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n            return;\r\n        }\r\n        \r\n        const invOutA = 1 / outA;\r\n        \r\n        // inlined color burn per channel\r\n        const r = srcR === 0 ? 0 : Math.max(0, 255 - ((255 - dstR) * 255) / srcR);\r\n        const g = srcG === 0 ? 0 : Math.max(0, 255 - ((255 - dstG) * 255) / srcG);\r\n        const b = srcB === 0 ? 0 : Math.max(0, 255 - ((255 - dstB) * 255) / srcB);\r\n        \r\n        data[idx] = (r * sa + dstR * da * (1 - sa)) * invOutA;\r\n        data[idx + 1] = (g * sa + dstG * da * (1 - sa)) * invOutA;\r\n        data[idx + 2] = (b * sa + dstB * da * (1 - sa)) * invOutA;\r\n        data[idx + 3] = outA * 255;\r\n    }\r\n    \r\n    /**\r\n     *  single pixel blend\r\n     * @param {PixelBuffer} canvas\r\n     * @param {number} x\r\n     * @param {number} y\r\n     * @param {number} srcR\r\n     * @param {number} srcG\r\n     * @param {number} srcB\r\n     * @param {number} srcA\r\n     * @param {number} blendMode\r\n     */\r\n    static setPixelBlended(canvas, x, y, srcR, srcG, srcB, srcA, blendMode = BlendMode.NORMAL) {\r\n        if (x < 0 || x >= canvas.width || y < 0 || y >= canvas.height || srcA === 0) return;\r\n        \r\n        const idx = (y * canvas.width + x) * 4;\r\n        const data = canvas.data;\r\n        const dstR = data[idx];\r\n        const dstG = data[idx + 1];\r\n        const dstB = data[idx + 2];\r\n        const dstA = data[idx + 3];\r\n        \r\n        // inlined normal blend (most common case)\r\n        if (blendMode === BlendMode.NORMAL) {\r\n            if (srcA === 255) {\r\n                data[idx] = srcR;\r\n                data[idx + 1] = srcG;\r\n                data[idx + 2] = srcB;\r\n                data[idx + 3] = 255;\r\n                return;\r\n            }\r\n            \r\n            const sa = srcA * 0.00392156862745098;\r\n            const da = dstA * 0.00392156862745098;\r\n            const outA = sa + da * (1 - sa);\r\n            \r\n            if (outA < 0.001) {\r\n                data[idx] = 0; data[idx + 1] = 0; data[idx + 2] = 0; data[idx + 3] = 0;\r\n                return;\r\n            }\r\n            \r\n            const invOutA = 1 / outA;\r\n            data[idx] = (srcR * sa + dstR * da * (1 - sa)) * invOutA;\r\n            data[idx + 1] = (srcG * sa + dstG * da * (1 - sa)) * invOutA;\r\n            data[idx + 2] = (srcB * sa + dstB * da * (1 - sa)) * invOutA;\r\n            data[idx + 3] = outA * 255;\r\n            return;\r\n        }\r\n        \r\n        // for other blend modes, use the pre-bound functions\r\n        const blendFunc = this._getBlendFunction(blendMode);\r\n        blendFunc(srcR, srcG, srcB, srcA, dstR, dstG, dstB, dstA, data, idx);\r\n    }\r\n    \r\n    /**\r\n     * Create test gradient\r\n     */\r\n    static createTestGradient(canvas) {\r\n        const width = canvas.width;\r\n        const height = canvas.height;\r\n        const data = canvas.data;\r\n        \r\n        for (let y = 0; y < height; y++) {\r\n            const g = (y / height) * 255;\r\n            for (let x = 0; x < width; x++) {\r\n                const idx = (y * width + x) * 4;\r\n                data[idx] = (x / width) * 255;     \r\n                data[idx + 1] = g;                  \r\n                data[idx + 2] = 128;               \r\n                data[idx + 3] = 255;              \r\n            }\r\n        }\r\n        canvas.upload();\r\n    }\r\n}\n\nclass ClipRect {\r\n    constructor(x, y, width, height) {\r\n        this.x = x;\r\n        this.y = y;\r\n        this.width = width;\r\n        this.height = height;\r\n    }\r\n\r\n    /**\r\n     *  Check if rectangle intersects this clip rect\r\n     * @param {number} x \r\n     * @param {number} y \r\n     * @param {number} width \r\n     * @param {number} height \r\n     * @returns {boolean}\r\n     */\r\n    intersects(x, y, width, height) {\r\n        return !(x + width < this.x ||\r\n            x > this.x + this.width ||\r\n            y + height < this.y ||\r\n            y > this.y + this.height);\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {number} x \r\n     * @param {number} y \r\n     * @returns {boolean}\r\n     */\r\n    contains(x, y) {\r\n        return x >= this.x && x < this.x + this.width &&\r\n            y >= this.y && y < this.y + this.height;\r\n    }\r\n\r\n    /**\r\n     *  Get intersection with another rect\r\n     * @param {ClipRect} other \r\n     * @returns \r\n     */\r\n    intersect(other) {\r\n        const x1 = Math.max(this.x, other.x);\r\n        const y1 = Math.max(this.y, other.y);\r\n        const x2 = Math.min(this.x + this.width, other.x + other.width);\r\n        const y2 = Math.min(this.y + this.height, other.y + other.height);\r\n\r\n        if (x2 <= x1 || y2 <= y1) {\r\n            return null; // No intersection\r\n        }\r\n\r\n        return new ClipRect(x1, y1, x2 - x1, y2 - y1);\r\n    }\r\n\r\n    // Cohen-Sutherland outcode for line clipping\r\n    computeOutcode(x, y) {\r\n        let code = 0;\r\n\r\n        if (x < this.x) code |= 1;              // Left\r\n        if (x >= this.x + this.width) code |= 2; // Right\r\n        if (y < this.y) code |= 4;              // Top\r\n        if (y >= this.y + this.height) code |= 8; // Bottom\r\n\r\n        return code;\r\n    }\r\n}\r\n\r\nclass Transform {\r\n    constructor(translateX = 0, translateY = 0, scaleX = 1, scaleY = 1, rotation = 0) {\r\n        this.translateX = translateX;\r\n        this.translateY = translateY;\r\n        this.scaleX = scaleX;\r\n        this.scaleY = scaleY;\r\n        this.rotation = rotation; // radians\r\n    }\r\n\r\n    /**\r\n     * Transform a point\r\n     * @param {number} x \r\n     * @param {number} y \r\n     * @returns \r\n     */\r\n    apply(x, y) {\r\n        // handle rotation\r\n        if (this.rotation !== 0) {\r\n            const cos = Math.cos(this.rotation);\r\n            const sin = Math.sin(this.rotation);\r\n            const tx = x * cos - y * sin;\r\n            const ty = x * sin + y * cos;\r\n            x = tx;\r\n            y = ty;\r\n        }\r\n\r\n        // apply scale and translation\r\n        return {\r\n            x: x * this.scaleX + this.translateX,\r\n            y: y * this.scaleY + this.translateY\r\n        };\r\n    }\r\n\r\n    /**\r\n     * transform a rectangle (returns bounding box)\r\n     * @param {number} x \r\n     * @param {number} y \r\n     * @param {number} width \r\n     * @param {number} height \r\n     * @returns \r\n     */\r\n    applyRect(x, y, width, height) {\r\n        const points = [\r\n            this.apply(x, y),\r\n            this.apply(x + width, y),\r\n            this.apply(x, y + height),\r\n            this.apply(x + width, y + height)\r\n        ];\r\n\r\n        let minX = Infinity, minY = Infinity;\r\n        let maxX = -Infinity, maxY = -Infinity;\r\n\r\n        for (const pt of points) {\r\n            minX = Math.min(minX, pt.x);\r\n            minY = Math.min(minY, pt.y);\r\n            maxX = Math.max(maxX, pt.x);\r\n            maxY = Math.max(maxY, pt.y);\r\n        }\r\n\r\n        return {\r\n            x: minX,\r\n            y: minY,\r\n            width: maxX - minX,\r\n            height: maxY - minY\r\n        };\r\n    }\r\n\r\n    // Combine with another transform\r\n    compose(other) {\r\n        // For simplicity, we'll handle translation and scale composition\r\n        // Full matrix composition would be more complex\r\n        return new Transform(\r\n            this.translateX + other.translateX * this.scaleX,\r\n            this.translateY + other.translateY * this.scaleY,\r\n            this.scaleX * other.scaleX,\r\n            this.scaleY * other.scaleY,\r\n            this.rotation + other.rotation\r\n        );\r\n    }\r\n\r\n    /**\r\n     *  Create identity transform\r\n     * @returns \r\n     */\r\n    static identity() {\r\n        return new Transform(0, 0, 1, 1, 0);\r\n    }\r\n}\r\n\r\nclass GraphicsState {\r\n    /**\r\n     * a stack to keep draw state\r\n     */\r\n    constructor() {\r\n        this.clipStack = [];\r\n        this.transformStack = [Transform.identity()];\r\n        this.globalAlpha = 1.0;\r\n        this.fillStyle = { r: 0, g: 0, b: 0, a: 255 };\r\n        this.strokeStyle = { r: 0, g: 0, b: 0, a: 255 };\r\n        this.lineWidth = 1;\r\n    }\r\n\r\n    get currentClip() {\r\n        return this.clipStack.length > 0 ?\r\n            this.clipStack[this.clipStack.length - 1] : null;\r\n    }\r\n\r\n    get currentTransform() {\r\n        return this.transformStack[this.transformStack.length - 1];\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {ClipRect} clipRect \r\n     */\r\n    pushClip(clipRect) {\r\n        this.clipStack.push(clipRect);\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @returns {ClipRect}\r\n     */\r\n    popClip() {\r\n        return this.clipStack.pop();\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {Transform} transform \r\n     */\r\n    pushTransform(transform) {\r\n        const current = this.currentTransform;\r\n        this.transformStack.push(current.compose(transform));\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @returns {Transform}\r\n     */\r\n    popTransform() {\r\n        if (this.transformStack.length > 1) {\r\n            return this.transformStack.pop();\r\n        }\r\n        return this.currentTransform;\r\n    }\r\n\r\n/**\r\n * save state\r\n * @returns \r\n */\r\n    save() {\r\n        return {\r\n            clipStack: [...this.clipStack],\r\n            transformStack: [...this.transformStack],\r\n            globalAlpha: this.globalAlpha,\r\n            fillStyle: { ...this.fillStyle },\r\n            strokeStyle: { ...this.strokeStyle },\r\n            lineWidth: this.lineWidth\r\n        };\r\n    }\r\n\r\n    /**\r\n     * restore saved state\r\n     * @param {GraphicsState} state \r\n     */\r\n    restore(state) {\r\n        this.clipStack = state.clipStack;\r\n        this.transformStack = state.transformStack;\r\n        this.globalAlpha = state.globalAlpha;\r\n        this.fillStyle = state.fillStyle;\r\n        this.strokeStyle = state.strokeStyle;\r\n        this.lineWidth = state.lineWidth;\r\n    }\r\n}\r\n\r\nclass ClippingContext {\r\n    constructor(canvas) {\r\n        this.canvas = canvas;\r\n        this.state = new GraphicsState();\r\n\r\n        // Initial clip is entire canvas\r\n        this.state.pushClip(new ClipRect(0, 0, canvas.width, canvas.height));\r\n    }\r\n\r\n    // Save current state\r\n    save() {\r\n        return this.state.save();\r\n    }\r\n\r\n    // Restore state\r\n    restore(state) {\r\n        this.state.restore(state);\r\n    }\r\n\r\n    // Push clip rectangle (intersects with current)\r\n    pushClipRect(x, y, width, height) {\r\n        const transform = this.state.currentTransform;\r\n        const transformed = transform.applyRect(x, y, width, height);\r\n\r\n        const newClip = new ClipRect(\r\n            transformed.x, transformed.y,\r\n            transformed.width, transformed.height\r\n        );\r\n\r\n        // Intersect with current clip\r\n        const current = this.state.currentClip;\r\n        if (current) {\r\n            const intersected = current.intersect(newClip); // creates a new bounding box\r\n            if (intersected) {\r\n                this.state.pushClip(intersected);\r\n            } else {\r\n                // No intersection - push empty clip\r\n                this.state.pushClip(new ClipRect(0, 0, 0, 0));\r\n            }\r\n        } else {\r\n            this.state.pushClip(newClip);\r\n        }\r\n    }\r\n\r\n    // Pop clip rectangle\r\n    popClipRect() {\r\n        this.state.popClip();\r\n    }\r\n\r\n    // Push transform\r\n    pushTransform(translateX = 0, translateY = 0, scaleX = 1, scaleY = 1, rotation = 0) {\r\n        const transform = new Transform(translateX, translateY, scaleX, scaleY, rotation);\r\n        this.state.pushTransform(transform);\r\n    }\r\n\r\n    // Pop transform\r\n    popTransform() {\r\n        this.state.popTransform();\r\n    }\r\n\r\n    // Check if rectangle is visible (intersects clip)\r\n    isRectVisible(x, y, width, height) {\r\n        const transform = this.state.currentTransform;\r\n        const transformed = transform.applyRect(x, y, width, height);\r\n        const clip = this.state.currentClip;\r\n\r\n        if (!clip) return true; // No clipping active\r\n\r\n        return clip.intersects(\r\n            transformed.x, transformed.y,\r\n            transformed.width, transformed.height\r\n        );\r\n    }\r\n\r\n    // Transform point from local to screen coordinates\r\n    transformPoint(x, y) {\r\n        return this.state.currentTransform.apply(x, y);\r\n    }\r\n\r\n    // Clip line using Cohen-Sutherland algorithm\r\n    clipLine(x1, y1, x2, y2) {\r\n        const clip = this.state.currentClip;\r\n        if (!clip) {\r\n            return { x1, y1, x2, y2 }; // No clipping\r\n        }\r\n\r\n        // Transform endpoints\r\n        const transform = this.state.currentTransform;\r\n        let p1 = transform.apply(x1, y1);\r\n        let p2 = transform.apply(x2, y2);\r\n\r\n        let code1 = clip.computeOutcode(p1.x, p1.y);\r\n        let code2 = clip.computeOutcode(p2.x, p2.y);\r\n\r\n        let accept = false;\r\n\r\n        while (true) {\r\n            if ((code1 | code2) === 0) {\r\n                // Both points inside clip region\r\n                accept = true;\r\n                break;\r\n            } else if ((code1 & code2) !== 0) {\r\n                // Both points on same outside edge\r\n                break;\r\n            } else {\r\n                // Line crosses boundary - clip it\r\n                let x, y;\r\n                const codeOut = code1 !== 0 ? code1 : code2;\r\n\r\n                // Find intersection point\r\n                if (codeOut & 8) { // Bottom\r\n                    x = p1.x + (p2.x - p1.x) * (clip.y + clip.height - p1.y) / (p2.y - p1.y);\r\n                    y = clip.y + clip.height;\r\n                } else if (codeOut & 4) { // Top\r\n                    x = p1.x + (p2.x - p1.x) * (clip.y - p1.y) / (p2.y - p1.y);\r\n                    y = clip.y;\r\n                } else if (codeOut & 2) { // Right\r\n                    y = p1.y + (p2.y - p1.y) * (clip.x + clip.width - p1.x) / (p2.x - p1.x);\r\n                    x = clip.x + clip.width;\r\n                } else if (codeOut & 1) { // Left\r\n                    y = p1.y + (p2.y - p1.y) * (clip.x - p1.x) / (p2.x - p1.x);\r\n                    x = clip.x;\r\n                }\r\n\r\n                // Update point and outcode\r\n                if (codeOut === code1) {\r\n                    p1.x = x;\r\n                    p1.y = y;\r\n                    code1 = clip.computeOutcode(p1.x, p1.y);\r\n                } else {\r\n                    p2.x = x;\r\n                    p2.y = y;\r\n                    code2 = clip.computeOutcode(p2.x, p2.y);\r\n                }\r\n            }\r\n        }\r\n\r\n        if (accept) {\r\n            return { x1: p1.x, y1: p1.y, x2: p2.x, y2: p2.y };\r\n        }\r\n\r\n        return null; // Line completely outside clip region\r\n    }\r\n\r\n    // Clipped drawing methods\r\n\r\n    fillRect(x, y, width, height, r, g, b, a = 255) {\r\n        if (!this.isRectVisible(x, y, width, height)) return;\r\n\r\n        const transform = this.state.currentTransform;\r\n        const transformed = transform.applyRect(x, y, width, height);\r\n\r\n        // Calculate clipped bounds\r\n        const clip = this.state.currentClip;\r\n        const x1 = Math.max(clip.x, transformed.x);\r\n        const y1 = Math.max(clip.y, transformed.y);\r\n        const x2 = Math.min(clip.x + clip.width, transformed.x + transformed.width);\r\n        const y2 = Math.min(clip.y + clip.height, transformed.y + transformed.height);\r\n\r\n        if (x2 > x1 && y2 > y1) {\r\n            // Apply global alpha\r\n            const finalAlpha = a * this.state.globalAlpha;\r\n            ShapeDrawer.fillRect(\r\n                this.canvas, x1, y1, x2 - x1, y2 - y1,\r\n                r, g, b, finalAlpha\r\n            );\r\n        }\r\n    }\r\n\r\n    strokeRect(x, y, width, height, lineWidth, r, g, b, a = 255) {\r\n        if (!this.isRectVisible(x, y, width, height)) return;\r\n\r\n        const finalAlpha = a * this.state.globalAlpha;\r\n\r\n        // Use the transformed coordinates for drawing\r\n        const transform = this.state.currentTransform;\r\n        const p1 = transform.apply(x, y);\r\n        const p2 = transform.apply(x + width, y);\r\n        const p3 = transform.apply(x + width, y + height);\r\n        const p4 = transform.apply(x, y + height);\r\n\r\n        // Draw clipped lines\r\n        this._drawClippedLine(p1.x, p1.y, p2.x, p2.y, lineWidth, r, g, b, finalAlpha);\r\n        this._drawClippedLine(p2.x, p2.y, p3.x, p3.y, lineWidth, r, g, b, finalAlpha);\r\n        this._drawClippedLine(p3.x, p3.y, p4.x, p4.y, lineWidth, r, g, b, finalAlpha);\r\n        this._drawClippedLine(p4.x, p4.y, p1.x, p1.y, lineWidth, r, g, b, finalAlpha);\r\n    }\r\n\r\n    drawLine(x1, y1, x2, y2, lineWidth, r, g, b, a = 255) {\r\n        const clipped = this.clipLine(x1, y1, x2, y2);\r\n        if (!clipped) return;\r\n\r\n        const finalAlpha = a * this.state.globalAlpha;\r\n\r\n        if (lineWidth === 1) {\r\n            LineDrawer.drawLine(\r\n                this.canvas,\r\n                clipped.x1, clipped.y1, clipped.x2, clipped.y2,\r\n                r, g, b, finalAlpha\r\n            );\r\n        } else {\r\n            LineDrawer.drawThickLine(\r\n                this.canvas,\r\n                clipped.x1, clipped.y1, clipped.x2, clipped.y2,\r\n                lineWidth, r, g, b, finalAlpha\r\n            );\r\n        }\r\n    }\r\n\r\n    fillCircle(cx, cy, radius, r, g, b, a = 255) {\r\n        if (!this.isRectVisible(cx - radius, cy - radius, radius * 2, radius * 2)) return;\r\n\r\n        const transform = this.state.currentTransform;\r\n        const center = transform.apply(cx, cy);\r\n\r\n        // Scale radius by average scale (approximation)\r\n        const scaledRadius = radius * (Math.abs(transform.scaleX) + Math.abs(transform.scaleY)) / 2;\r\n\r\n        const finalAlpha = a * this.state.globalAlpha;\r\n\r\n        // Draw with per-pixel clip checking\r\n        this._fillCircleClipped(center.x, center.y, scaledRadius, r, g, b, finalAlpha);\r\n    }\r\n\r\n    // Helper methods\r\n\r\n    _drawClippedLine(x1, y1, x2, y2, lineWidth, r, g, b, a) {\r\n        const clipped = this.clipLine(\r\n            x1, y1, x2, y2\r\n        );\r\n\r\n        if (clipped) {\r\n            if (lineWidth === 1) {\r\n                LineDrawer.drawLine(\r\n                    this.canvas,\r\n                    clipped.x1, clipped.y1, clipped.x2, clipped.y2,\r\n                    r, g, b, a\r\n                );\r\n            } else {\r\n                LineDrawer.drawThickLine(\r\n                    this.canvas,\r\n                    clipped.x1, clipped.y1, clipped.x2, clipped.y2,\r\n                    lineWidth, r, g, b, a\r\n                );\r\n            }\r\n        }\r\n    }\r\n\r\n    _fillCircleClipped(cx, cy, radius, r, g, b, a) {\r\n        const clip = this.state.currentClip;\r\n        const data = this.canvas.data;\r\n        const width = this.canvas.width;\r\n        const height = this.canvas.height;\r\n\r\n        const minX = Math.max(0, Math.floor(cx - radius));\r\n        const maxX = Math.min(width - 1, Math.ceil(cx + radius));\r\n        const minY = Math.max(0, Math.floor(cy - radius));\r\n        const maxY = Math.min(height - 1, Math.ceil(cy + radius));\r\n\r\n        for (let py = minY; py <= maxY; py++) {\r\n            for (let px = minX; px <= maxX; px++) {\r\n                // Check if inside clip rect\r\n                if (clip && !clip.contains(px, py)) continue;\r\n\r\n                const dx = px - cx;\r\n                const dy = py - cy;\r\n                const dist = Math.sqrt(dx * dx + dy * dy);\r\n\r\n                if (dist <= radius) {\r\n                    const idx = (py * width + px) * 4;\r\n                    data[idx + 0] = r;\r\n                    data[idx + 1] = g;\r\n                    data[idx + 2] = b;\r\n                    data[idx + 3] = a;\r\n                }\r\n            }\r\n        }\r\n\r\n        // Update region\r\n        this.canvas.renderer.updateBufferData(\r\n            this.canvas.bufferId,\r\n            this.canvas.data.subarray(0, width * height * 4),\r\n            minX, minY,\r\n            maxX - minX + 1, maxY - minY + 1\r\n        );\r\n        this.canvas.needsUpload = true;\r\n    }\r\n\r\n    // State setters\r\n    setFillStyle(r, g, b, a = 255) {\r\n        this.state.fillStyle = { r, g, b, a };\r\n    }\r\n\r\n    setStrokeStyle(r, g, b, a = 255) {\r\n        this.state.strokeStyle = { r, g, b, a };\r\n    }\r\n\r\n    setLineWidth(width) {\r\n        this.state.lineWidth = width;\r\n    }\r\n\r\n    setGlobalAlpha(alpha) {\r\n        this.state.globalAlpha = Math.max(0, Math.min(1, alpha));\r\n    }\r\n}\n\nclass Glyph {\n    constructor(char, x, y, width, height, xOffset, yOffset, xAdvance) {\n        this.char = char;\n        this.x = x;           // Position in atlas\n        this.y = y;\n        this.width = width;   // Glyph dimensions\n        this.height = height;\n        this.xOffset = xOffset;  // Rendering offset\n        this.yOffset = yOffset;\n        this.xAdvance = xAdvance; // Cursor advance\n    }\n}\n\nclass BitmapFont {\n    /**\n     * Create bitmap font from atlas image\n     * @param {Renderer} renderer\n     * @param {string} atlasPath - Path to font atlas image\n     * @param {Object} config - Font configuration\n     */\n    constructor(renderer, atlasPath, config = {}) {\n        this.renderer = renderer;\n\n        this.atlasImage = renderer.loadImage(atlasPath);\n        if (!this.atlasImage.data)\n            console.warn(\"image data empty\");\n\n        // Store configuration\n        this.config = {\n            bitmapWidth: config.bitmapWidth || this.atlasImage.width,\n            bitmapHeight: config.bitmapHeight || this.atlasImage.height,\n            cellsPerRow: config.cellsPerRow || 16,\n            cellsPerColumn: config.cellsPerColumn || 16,\n            cellWidth: config.cellWidth || 32,\n            cellHeight: config.cellHeight || 32,\n            fontSize: config.fontSize || 16,\n            offsetX: config.offsetX || 0,\n            offsetY: config.offsetY || 0,\n            charOrder: config.charOrder || this.getDefaultCharOrder(),\n            lineHeight: config.lineHeight || config.cellHeight,\n            lineGap: config.lineGap || 0,\n            charSpacing: config.charSpacing || 0\n        };\n\n        this.glyphs = new Map();\n        this.scaledGlyphCache = new Map();\n        this.buildGlyphMap();\n\n        this.lineHeight = this.config.cellHeight;\n        this.baseline = Math.floor(this.lineHeight * 0.8);\n    }\n\n    getDefaultCharOrder() {\n        return ' ☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼' +\n            ' !\"#$%&\\'()*+,-./0123456789:;<=>?' +\n            '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_' +\n            '`abcdefghijklmnopqrstuvwxyz{¦}~⌂' +\n            'ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒ' +\n            'áíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐' +\n            '└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀' +\n            'αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■□';\n    }\n\n    buildGlyphMap() {\n        const { cellsPerRow, cellsPerColumn, cellWidth, cellHeight, offsetX, offsetY, charOrder } = this.config;\n\n        let charIndex = 0;\n\n        for (let row = 0; row < cellsPerColumn; row++) {\n            for (let col = 0; col < cellsPerRow; col++) {\n                if (charIndex >= charOrder.length) break;\n\n                const char = charOrder[charIndex];\n                const x = col * cellWidth + offsetX;\n                const y = row * cellHeight + offsetY;\n\n                const glyph = new Glyph(\n                    char,\n                    x, y,\n                    cellWidth, cellHeight,\n                    0, 0,\n                    cellWidth\n                );\n\n                this.glyphs.set(char, glyph);\n                charIndex++;\n            }\n        }\n\n        console.log(`Built ${this.glyphs.size} glyphs from atlas`);\n    }\n\n    getGlyph(char) {\n        let glyph = this.glyphs.get(char);\n\n        if (!glyph) {\n            if (char === \"\\n\") {\n                return this.glyphs.get(' ')\n            }\n            glyph = this.glyphs.get('?') || this.glyphs.get(' ') || this.glyphs.values().next().value;\n        }\n        return glyph;\n    }\n\n    measureText(text) {\n        let width = 0;\n\n        for (let i = 0; i < text.length; i++) {\n            const glyph = this.getGlyph(text[i]);\n            width += glyph.xAdvance + this.config.charSpacing;\n        }\n\n        if (text.length > 0) {\n            width -= this.config.charSpacing;\n        }\n\n        return { width, height: this.lineHeight };\n    }\n\n    /**\n     * Draw text with optimized sampling and optional rotation\n     * @param {PixelBuffer} canvas \n     * @param {string} text \n     * @param {number} x - Origin X position\n     * @param {number} y - Origin Y position\n     * @param {Object} color - {r, g, b, a}\n     * @param {number} scale - Scale factor\n     * @param {number} rotation - Rotation in degrees (0-360)\n     * @param {Camera2D} camera - Optional camera for viewport clipping\n     */\n    drawText(canvas, text, x, y, color = { r: 255, g: 255, b: 255, a: 255 }, scale = 1.0, rotation = 0, camera = undefined) {\n        const atlasData = this.atlasImage.data;\n        const atlasWidth = this.atlasImage.width;\n        const canvasData = canvas.data;\n        const canvasWidth = canvas.width;\n        const canvasHeight = canvas.height;\n\n        // Pre-calculate rotation if needed\n        const hasRotation = rotation !== 0;\n        const radians = hasRotation ? (rotation * Math.PI / 180) : 0;\n        const cosTheta = hasRotation ? Math.cos(radians) : 1;\n        const sinTheta = hasRotation ? Math.sin(radians) : 0;\n\n        // Pre-calculate color multipliers (normalized 0-1)\n        const mR = color.r / 255;\n        const mG = color.g / 255;\n        const mB = color.b / 255;\n        const mA = color.a / 255;\n        const neutralTint = (mR === 1 && mG === 1 && mB === 1 && mA === 1);\n\n        let cursorX = 0; // Relative to origin\n        let minX = Infinity, minY = Infinity;\n        let maxX = -Infinity, maxY = -Infinity;\n\n        for (let i = 0; i < text.length; i++) {\n            const char = text[i];\n            const glyph = this.getGlyph(char);\n\n            // Skip spaces\n            if (char === ' ') {\n                cursorX += (glyph.xAdvance + this.config.charSpacing) * scale;\n                continue;\n            }\n\n            const glyphX = cursorX + glyph.xOffset * scale;\n            const glyphY = glyph.yOffset * scale;\n            const scaledWidth = Math.ceil(glyph.width * scale);\n            const scaledHeight = Math.ceil(glyph.height * scale);\n\n            // Cache scaled glyph\n            const key = `${glyph.char}_${scale}`;\n            if (!this.scaledGlyphCache.has(key)) {\n                this.cacheScaledGlyph(glyph, scale, atlasData, atlasWidth, key);\n            }\n            const scaledAlphas = this.scaledGlyphCache.get(key);\n\n            // Draw glyph pixels with optimized paths\n            if (hasRotation) {\n                this.drawRotatedGlyph(\n                    canvas, canvasWidth, canvasHeight,\n                    scaledAlphas, scaledWidth, scaledHeight,\n                    x, y, glyphX, glyphY,\n                    cosTheta, sinTheta,\n                    mR, mG, mB, mA, neutralTint,\n                    camera\n                );\n            } else {\n                const result = this.drawGlyphFast(\n                    canvasData, canvasWidth, canvasHeight,\n                    scaledAlphas, scaledWidth, scaledHeight,\n                    x + glyphX, y + glyphY,\n                    mR, mG, mB, mA, neutralTint,\n                    camera\n                );\n                \n                if (result) {\n                    minX = Math.min(minX, result.minX);\n                    minY = Math.min(minY, result.minY);\n                    maxX = Math.max(maxX, result.maxX);\n                    maxY = Math.max(maxY, result.maxY);\n                }\n            }\n\n            cursorX += (glyph.xAdvance + this.config.charSpacing) * scale;\n        }\n\n        // Update canvas buffer\n        if (minX !== Infinity) {\n            this.uploadCanvasRegion(canvas, minX, minY, maxX, maxY);\n        }\n    }\n\n    /**\n     * Cache scaled glyph alpha values\n     */\n    cacheScaledGlyph(glyph, scale, atlasData, atlasWidth, key) {\n        const scaledWidth = Math.ceil(glyph.width * scale);\n        const scaledHeight = Math.ceil(glyph.height * scale);\n        const scaledAlphas = new Uint8Array(scaledWidth * scaledHeight);\n\n        for (let gy = 0; gy < scaledHeight; gy++) {\n            for (let gx = 0; gx < scaledWidth; gx++) {\n                const atlasX = glyph.x + Math.floor(gx / scale);\n                const atlasY = glyph.y + Math.floor(gy / scale);\n                \n                if (atlasX >= glyph.x + glyph.width || atlasY >= glyph.y + glyph.height) {\n                    scaledAlphas[gy * scaledWidth + gx] = 0;\n                    continue;\n                }\n\n                const atlasIdx = (atlasY * atlasWidth + atlasX) * 4;\n                const atlasR = atlasData[atlasIdx];\n                const atlasG = atlasData[atlasIdx + 1];\n                const atlasB = atlasData[atlasIdx + 2];\n                const atlasA = atlasData[atlasIdx + 3];\n\n                if (atlasA === 0) {\n                    scaledAlphas[gy * scaledWidth + gx] = 0;\n                    continue;\n                }\n\n                const intensity = (atlasR + atlasG + atlasB) / 3;\n                const alpha = (intensity / 255) * (atlasA / 255);\n                scaledAlphas[gy * scaledWidth + gx] = Math.floor(alpha * 255);\n            }\n        }\n\n        this.scaledGlyphCache.set(key, scaledAlphas);\n    }\n\n    /**\n     * Fast non-rotated glyph drawing with optimized paths\n     */\n    drawGlyphFast(canvasData, canvasWidth, canvasHeight, scaledAlphas, width, height, destX, destY, mR, mG, mB, mA, neutralTint, camera) {\n        destX = Math.floor(destX);\n        destY = Math.floor(destY);\n\n        // Clamp to canvas bounds\n        const clamped = clampRectToCanvas(destX, destY, width, height, canvasWidth, canvasHeight);\n        if (!clamped) return null;\n\n        let minX = Infinity, minY = Infinity;\n        let maxX = -Infinity, maxY = -Infinity;\n\n        const startX = clamped.x;\n        const startY = clamped.y;\n        const endX = clamped.x + clamped.width;\n        const endY = clamped.y + clamped.height;\n\n        // Optimized path: neutral tint\n        if (neutralTint) {\n            for (let py = startY; py < endY; py++) {\n                const gy = py - destY;\n                const rowBase = py * canvasWidth * 4;\n                \n                for (let px = startX; px < endX; px++) {\n                    if (camera && !shouldDrawPixel(px, py, { width: canvasWidth, height: canvasHeight }, camera)) continue;\n\n                    const gx = px - destX;\n                    const alpha = scaledAlphas[gy * width + gx];\n                    if (alpha < 1) continue;\n\n                    const idx = rowBase + px * 4;\n                    const sA = alpha;\n                    const inv = 255 - sA;\n\n                    if (sA === 255) {\n                        // Fully opaque - direct write\n                        canvasData[idx] = Math.floor(mR * 255);\n                        canvasData[idx + 1] = Math.floor(mG * 255);\n                        canvasData[idx + 2] = Math.floor(mB * 255);\n                        canvasData[idx + 3] = 255;\n                    } else {\n                        // Integer alpha composite\n                        const sR = Math.floor(mR * 255);\n                        const sG = Math.floor(mG * 255);\n                        const sB = Math.floor(mB * 255);\n                        \n                        canvasData[idx] = ((sR * sA + canvasData[idx] * inv) / 255) | 0;\n                        canvasData[idx + 1] = ((sG * sA + canvasData[idx + 1] * inv) / 255) | 0;\n                        canvasData[idx + 2] = ((sB * sA + canvasData[idx + 2] * inv) / 255) | 0;\n                        canvasData[idx + 3] = ((sA * 255 + canvasData[idx + 3] * inv) / 255) | 0;\n                    }\n\n                    minX = Math.min(minX, px);\n                    minY = Math.min(minY, py);\n                    maxX = Math.max(maxX, px);\n                    maxY = Math.max(maxY, py);\n                }\n            }\n        } else {\n            // General path with tint\n            for (let py = startY; py < endY; py++) {\n                const gy = py - destY;\n                const rowBase = py * canvasWidth * 4;\n                \n                for (let px = startX; px < endX; px++) {\n                    if (camera && !shouldDrawPixel(px, py, { width: canvasWidth, height: canvasHeight }, camera)) continue;\n\n                    const gx = px - destX;\n                    const alphaRaw = scaledAlphas[gy * width + gx];\n                    if (alphaRaw < 1) continue;\n\n                    const idx = rowBase + px * 4;\n                    const sA = (alphaRaw / 255) * mA;\n                    \n                    if (sA < 0.01) continue;\n\n                    const invA = 1 - sA;\n                    const dR = canvasData[idx] / 255;\n                    const dG = canvasData[idx + 1] / 255;\n                    const dB = canvasData[idx + 2] / 255;\n\n                    canvasData[idx] = Math.floor((mR * sA + dR * invA) * 255);\n                    canvasData[idx + 1] = Math.floor((mG * sA + dG * invA) * 255);\n                    canvasData[idx + 2] = Math.floor((mB * sA + dB * invA) * 255);\n                    canvasData[idx + 3] = 255;\n\n                    minX = Math.min(minX, px);\n                    minY = Math.min(minY, py);\n                    maxX = Math.max(maxX, px);\n                    maxY = Math.max(maxY, py);\n                }\n            }\n        }\n\n        return minX !== Infinity ? { minX, minY, maxX, maxY } : null;\n    }\n\n    drawRotatedGlyph(canvas, canvasWidth, canvasHeight, scaledAlphas, width, height, originX, originY, glyphX, glyphY, cosTheta, sinTheta, mR, mG, mB, mA, neutralTint, camera) {\n\n        const canvasData = canvas.data;\n        const corners = [\n            { x: glyphX, y: glyphY },\n            { x: glyphX + width, y: glyphY },\n            { x: glyphX, y: glyphY + height },\n            { x: glyphX + width, y: glyphY + height }\n        ];\n\n        let minX = Infinity, minY = Infinity;\n        let maxX = -Infinity, maxY = -Infinity;\n\n        for (const corner of corners) {\n            const rx = corner.x * cosTheta - corner.y * sinTheta;\n            const ry = corner.x * sinTheta + corner.y * cosTheta;\n            minX = Math.min(minX, rx);\n            minY = Math.min(minY, ry);\n            maxX = Math.max(maxX, rx);\n            maxY = Math.max(maxY, ry);\n        }\n\n        const startX = Math.max(0, Math.floor(originX + minX));\n        const startY = Math.max(0, Math.floor(originY + minY));\n        const endX = Math.min(canvasWidth, Math.ceil(originX + maxX));\n        const endY = Math.min(canvasHeight, Math.ceil(originY + maxY));\n\n\n        let dirtyMinX = canvasWidth;\n        let dirtyMinY = canvasHeight;\n        let dirtyMaxX = -1;\n        let dirtyMaxY = -1;\n\n        for (let py = startY; py < endY; py++) {\n            const rowBase = py * canvasWidth * 4;\n            \n            for (let px = startX; px < endX; px++) {\n                if (camera && !shouldDrawPixel(px, py, { width: canvasWidth, height: canvasHeight }, camera)) continue;\n\n                // Inverse rotate to find source pixel\n                const dx = px - originX;\n                const dy = py - originY;\n                const srcX = dx * cosTheta + dy * sinTheta - glyphX;\n                const srcY = -dx * sinTheta + dy * cosTheta - glyphY;\n\n                if (srcX < 0 || srcX >= width || srcY < 0 || srcY >= height) continue;\n\n                const gx = Math.floor(srcX);\n                const gy = Math.floor(srcY);\n                \n                const alphaRaw = scaledAlphas[gy * width + gx];\n                if (alphaRaw < 1) continue;\n\n                const idx = rowBase + px * 4;\n                const sA = (alphaRaw / 255) * mA;\n                \n                if (sA < 0.01) continue;\n\n                const invA = 1 - sA;\n                const dR = canvasData[idx] / 255;\n                const dG = canvasData[idx + 1] / 255;\n                const dB = canvasData[idx + 2] / 255;\n\n                canvasData[idx] = Math.floor((mR * sA + dR * invA) * 255);\n                canvasData[idx + 1] = Math.floor((mG * sA + dG * invA) * 255);\n                canvasData[idx + 2] = Math.floor((mB * sA + dB * invA) * 255);\n                canvasData[idx + 3] = 255;\n\n                // Track dirty region\n                if (px < dirtyMinX) dirtyMinX = px;\n                if (py < dirtyMinY) dirtyMinY = py;\n                if (px > dirtyMaxX) dirtyMaxX = px;\n                if (py > dirtyMaxY) dirtyMaxY = py;\n            }\n        }\n\n        // Flush dirty region if any pixels were drawn\n        if (dirtyMaxX >= 0) {\n            const tracker = canvas.dirtyTracker;\n            if (tracker) {\n                tracker.addRegion(dirtyMinX, dirtyMinY, dirtyMaxX - dirtyMinX + 1, dirtyMaxY - dirtyMinY + 1);\n            }\n            canvas.needsUpload = true;\n        }\n    }\n\n    /**\n     * Upload dirty region to GPU\n     */\n    uploadCanvasRegion(canvas, minX, minY, maxX, maxY) {\n        const tracker = canvas.dirtyTracker;\n        if (tracker) {\n            tracker.addRegion(minX, minY, maxX - minX + 1, maxY - minY + 1);\n        }\n        canvas.needsUpload = true;\n        canvas.upload();\n    }\n\n    drawTextWithTint(canvas, text, x, y, r, g, b, a = 255, scale = 1.0, rotation = 0, camera = undefined) {\n        return this.drawText(canvas, text, x, y, { r, g, b, a }, scale, rotation, camera);\n    }\n\n    wrapText(text, maxWidth) {\n        const words = text.split(' ');\n        const lines = [];\n        let currentLine = '';\n\n        words.forEach(word => {\n            const testLine = currentLine + (currentLine ? ' ' : '') + word;\n            const metrics = this.measureText(testLine);\n\n            if (metrics.width > maxWidth && currentLine) {\n                lines.push(currentLine);\n                currentLine = word;\n            } else {\n                currentLine = testLine;\n            }\n        });\n\n        if (currentLine) {\n            lines.push(currentLine);\n        }\n\n        return lines;\n    }\n\n    drawMultilineText(canvas, text, x, y, maxWidth, align = 'left', color = { r: 255, g: 255, b: 255, a: 255 }, scale = 1.0, rotation = 0, camera = undefined) {\n        const lines = this.wrapText(text, maxWidth);\n        let currentY = 0;\n\n        for (const line of lines) {\n            const metrics = this.measureText(line);\n            let lineX = 0;\n\n            if (align === 'center') {\n                lineX = (maxWidth - metrics.width) / 2;\n            } else if (align === 'right') {\n                lineX = maxWidth - metrics.width;\n            }\n\n            this.drawText(canvas, line, x + lineX, y + currentY, color, scale, rotation, camera);\n            currentY += (this.lineHeight + this.config.lineGap) * scale;\n        }\n\n        return {\n            width: maxWidth,\n            height: lines.length * this.lineHeight * scale\n        };\n    }\n}\n\n/**\r\n * Base UI Element\r\n * DO not use will re-write buggy\r\n */\r\nclass UIElement {\r\n    constructor(x, y, width, height) {\r\n        this.x = x;\r\n        this.y = y;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.visible = true;\r\n        this.enabled = true;\r\n    }\r\n    \r\n    contains(px, py) {\r\n        return px >= this.x && px < this.x + this.width &&\r\n               py >= this.y && py < this.y + this.height;\r\n    }\r\n    \r\n    update(inputMap) {}\r\n    draw(canvas, font) {}\r\n}\r\n\r\n/**\r\n * Button with rounded corners\r\n */\r\nclass Button extends UIElement {\r\n    constructor(x, y, width, height, text, onClick) {\r\n        super(x, y, width, height);\r\n        this.text = text;\r\n        this.onClick = onClick;\r\n        \r\n        // State\r\n        this.isHovered = false;\r\n        this.isPressed = false;\r\n        \r\n        // Style\r\n        this.normalColor = { r: 70, g: 80, b: 100 };\r\n        this.hoverColor = { r: 90, g: 100, b: 120 };\r\n        this.pressedColor = { r: 50, g: 60, b: 80 };\r\n        this.textColor = { r: 255, g: 255, b: 255, a: 255 };\r\n        this.borderRadius = 8;\r\n    }\r\n    \r\n    update(inputMap) {\r\n        if (!this.enabled) return;\r\n        \r\n        const mousePos = inputMap.mousePosition;\r\n        this.isHovered;\r\n        this.isHovered = this.contains(mousePos.x, mousePos.y);\r\n        \r\n        // Mouse down\r\n        if (this.isHovered && inputMap.isMousePressed('click')) {\r\n            this.isPressed = true;\r\n        }\r\n        \r\n        // Mouse up (click complete)\r\n        if (this.isPressed && inputMap.IsMouseActionReleased('click')) {\r\n            if (this.isHovered && this.onClick) {\r\n                this.onClick();\r\n            }\r\n            this.isPressed = false;\r\n        }\r\n    }\r\n    \r\n    draw(canvas, font) {\r\n        if (!this.visible) return;\r\n        \r\n        // Choose color based on state\r\n        let color = this.normalColor;\r\n        if (!this.enabled) {\r\n            color = { r: 40, g: 45, b: 50 };\r\n        } else if (this.isPressed) {\r\n            color = this.pressedColor;\r\n        } else if (this.isHovered) {\r\n            color = this.hoverColor;\r\n        }\r\n        \r\n        // Draw rounded rectangle\r\n        const points = PolygonDrawer.createRoundedRect(\r\n            this.x, this.y, \r\n            this.width, this.height, \r\n            this.borderRadius\r\n        );\r\n        \r\n        PolygonDrawer.fillPolygon(\r\n            canvas, points,\r\n            color.r, color.g, color.b, 255\r\n        );\r\n        \r\n        // Draw border\r\n        PolygonDrawer.strokePolygon(\r\n            canvas, points, 2,\r\n            this.isHovered ? 120 : 80,\r\n            this.isHovered ? 140 : 100,\r\n            this.isHovered ? 160 : 120,\r\n            255\r\n        );\r\n        \r\n        // Draw text (centered)\r\n        if (font && this.text) {\r\n            const metrics = font.measureText(this.text);\r\n            const textX = this.x + (this.width - metrics.width) / 2;\r\n            const textY = this.y + (this.height - metrics.height) / 2;\r\n            \r\n            font.drawText(canvas, this.text, textX, textY, this.textColor);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Text Input with blinking cursor\r\n */\r\nclass TextInput extends UIElement {\r\n    constructor(x, y, width, height, placeholder = \"\") {\r\n        super(x, y, width, height);\r\n        this.text = \"\";\r\n        this.placeholder = placeholder;\r\n        this.isFocused = false;\r\n        this.cursorPosition = 0;\r\n        this.cursorBlinkTime = 0;\r\n        this.cursorVisible = true;\r\n        \r\n        // Style\r\n        this.backgroundColor = { r: 40, g: 45, b: 55 };\r\n        this.focusedBackgroundColor = { r: 50, g: 55, b: 65 };\r\n        this.borderColor = { r: 80, g: 90, b: 110 };\r\n        this.focusedBorderColor = { r: 100, g: 150, b: 200 };\r\n        this.textColor = { r: 255, g: 255, b: 255, a: 255 };\r\n        this.placeholderColor = { r: 120, g: 130, b: 140, a: 255 };\r\n        this.cursorColor = { r: 255, g: 255, b: 255, a: 255 };\r\n        this.padding = 8;\r\n        this.borderRadius = 6;\r\n        \r\n        // Callbacks\r\n        this.onTextChange = null;\r\n        this.onSubmit = null;\r\n    }\r\n    \r\n    update(inputMap, deltaTime = 16) {\r\n        if (!this.enabled) return;\r\n        \r\n        const mousePos = inputMap.mousePosition;\r\n        \r\n        // Handle focus\r\n        if (inputMap.isMousePressed('click')) {\r\n            const wasClicked = this.contains(mousePos.x, mousePos.y);\r\n            if (wasClicked && !this.isFocused) {\r\n                this.focus();\r\n            } else if (!wasClicked && this.isFocused) {\r\n                this.blur();\r\n            }\r\n        }\r\n        \r\n        // Blink cursor\r\n        if (this.isFocused) {\r\n            this.cursorBlinkTime += deltaTime;\r\n            if (this.cursorBlinkTime >= 530) { // Blink every 530ms\r\n                this.cursorVisible = !this.cursorVisible;\r\n                this.cursorBlinkTime = 0;\r\n            }\r\n        }\r\n    }\r\n    \r\n    focus() {\r\n        this.isFocused = true;\r\n        this.cursorPosition = this.text.length;\r\n        this.cursorVisible = true;\r\n        this.cursorBlinkTime = 0;\r\n    }\r\n    \r\n    blur() {\r\n        this.isFocused = false;\r\n        this.cursorVisible = false;\r\n    }\r\n    \r\n    /**\r\n     * Handle character input\r\n     * Call this from your input system when keys are pressed\r\n     */\r\n    handleChar(char) {\r\n        if (!this.isFocused) return;\r\n        \r\n        // Insert character at cursor position\r\n        this.text = this.text.slice(0, this.cursorPosition) + \r\n                    char + \r\n                    this.text.slice(this.cursorPosition);\r\n        this.cursorPosition++;\r\n        \r\n        // Reset cursor blink\r\n        this.cursorVisible = true;\r\n        this.cursorBlinkTime = 0;\r\n        \r\n        if (this.onTextChange) {\r\n            this.onTextChange(this.text);\r\n        }\r\n    }\r\n    \r\n    /**\r\n     * Handle backspace\r\n     */\r\n    handleBackspace() {\r\n        if (!this.isFocused || this.cursorPosition === 0) return;\r\n        \r\n        this.text = this.text.slice(0, this.cursorPosition - 1) + \r\n                    this.text.slice(this.cursorPosition);\r\n        this.cursorPosition--;\r\n        \r\n        // Reset cursor blink\r\n        this.cursorVisible = true;\r\n        this.cursorBlinkTime = 0;\r\n        \r\n        if (this.onTextChange) {\r\n            this.onTextChange(this.text);\r\n        }\r\n    }\r\n    \r\n    /**\r\n     * Handle delete\r\n     */\r\n    handleDelete() {\r\n        if (!this.isFocused || this.cursorPosition >= this.text.length) return;\r\n        \r\n        this.text = this.text.slice(0, this.cursorPosition) + \r\n                    this.text.slice(this.cursorPosition + 1);\r\n        \r\n        // Reset cursor blink\r\n        this.cursorVisible = true;\r\n        this.cursorBlinkTime = 0;\r\n        \r\n        if (this.onTextChange) {\r\n            this.onTextChange(this.text);\r\n        }\r\n    }\r\n    \r\n    /**\r\n     * Handle enter/return\r\n     */\r\n    handleSubmit() {\r\n        if (!this.isFocused) return;\r\n        \r\n        if (this.onSubmit) {\r\n            this.onSubmit(this.text);\r\n        }\r\n    }\r\n    \r\n    /**\r\n     * Move cursor left\r\n     */\r\n    moveCursorLeft() {\r\n        if (!this.isFocused || this.cursorPosition === 0) return;\r\n        \r\n        this.cursorPosition--;\r\n        this.cursorVisible = true;\r\n        this.cursorBlinkTime = 0;\r\n    }\r\n    \r\n    /**\r\n     * Move cursor right\r\n     */\r\n    moveCursorRight() {\r\n        if (!this.isFocused || this.cursorPosition >= this.text.length) return;\r\n        \r\n        this.cursorPosition++;\r\n        this.cursorVisible = true;\r\n        this.cursorBlinkTime = 0;\r\n    }\r\n    \r\n    /**\r\n     * Set text programmatically\r\n     */\r\n    setText(text) {\r\n        this.text = text;\r\n        this.cursorPosition = text.length;\r\n        this.cursorVisible = true;\r\n        this.cursorBlinkTime = 0;\r\n    }\r\n    \r\n    /**\r\n     * Get current text\r\n     */\r\n    getText() {\r\n        return this.text;\r\n    }\r\n    \r\n    /**\r\n     * Clear text\r\n     */\r\n    clear() {\r\n        this.text = \"\";\r\n        this.cursorPosition = 0;\r\n        this.cursorVisible = true;\r\n        this.cursorBlinkTime = 0;\r\n    }\r\n    \r\n    draw(canvas, font) {\r\n        if (!this.visible) return;\r\n        \r\n        // Background\r\n        const bgColor = this.isFocused ? this.focusedBackgroundColor : this.backgroundColor;\r\n        const points = PolygonDrawer.createRoundedRect(\r\n            this.x, this.y,\r\n            this.width, this.height,\r\n            this.borderRadius\r\n        );\r\n        \r\n        PolygonDrawer.fillPolygon(\r\n            canvas, points,\r\n            bgColor.r, bgColor.g, bgColor.b, 255\r\n        );\r\n        \r\n        // Border\r\n        const borderColor = this.isFocused ? this.focusedBorderColor : this.borderColor;\r\n        PolygonDrawer.strokePolygon(\r\n            canvas, points,\r\n            this.isFocused ? 2 : 1,\r\n            borderColor.r, borderColor.g, borderColor.b, 255\r\n        );\r\n        \r\n        if (!font) return;\r\n        \r\n        // Text or placeholder\r\n        const displayText = this.text || this.placeholder;\r\n        const textColor = this.text ? this.textColor : this.placeholderColor;\r\n        \r\n        if (displayText) {\r\n            const textX = this.x + this.padding;\r\n            const textY = this.y + (this.height - font.lineHeight) / 2;\r\n            \r\n            font.drawText(canvas, displayText, textX, textY, textColor);\r\n        }\r\n        \r\n        // Cursor\r\n        if (this.isFocused && this.cursorVisible) {\r\n            // Calculate cursor X position\r\n            const textBeforeCursor = this.text.slice(0, this.cursorPosition);\r\n            const cursorOffset = font.measureText(textBeforeCursor).width;\r\n            \r\n            const cursorX = this.x + this.padding + cursorOffset;\r\n            const cursorY1 = this.y + this.padding;\r\n            const cursorY2 = this.y + this.height - this.padding;\r\n            \r\n            // Draw cursor line\r\n            ShapeDrawer.fillRect(\r\n                canvas,\r\n                cursorX, cursorY1,\r\n                2, cursorY2 - cursorY1,\r\n                this.cursorColor.r, this.cursorColor.g, this.cursorColor.b, this.cursorColor.a\r\n            );\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Label (static text)\r\n */\r\nclass Label extends UIElement {\r\n    constructor(x, y, text, color = { r: 255, g: 255, b: 255, a: 255 }) {\r\n        super(x, y, 0, 0);\r\n        this.text = text;\r\n        this.color = color;\r\n    }\r\n    \r\n    draw(canvas, font) {\r\n        if (!this.visible || !font) return;\r\n        \r\n        font.drawText(canvas, this.text, this.x, this.y, this.color);\r\n    }\r\n}\r\n\r\n/**\r\n * UI Manager\r\n */\r\nclass UIManager {\r\n    constructor(canvas, font, inputMap) {\r\n        this.canvas = canvas;\r\n        this.font = font;\r\n        this.inputMap = inputMap;\r\n        this.elements = [];\r\n        this.focusedElement = null;\r\n        \r\n        // Track last frame time for delta\r\n        this.lastFrameTime = performance.now();\r\n    }\r\n    \r\n    add(element) {\r\n        this.elements.push(element);\r\n        return element;\r\n    }\r\n    \r\n    remove(element) {\r\n        const index = this.elements.indexOf(element);\r\n        if (index > -1) {\r\n            this.elements.splice(index, 1);\r\n        }\r\n    }\r\n    \r\n    clear() {\r\n        this.elements = [];\r\n        this.focusedElement = null;\r\n    }\r\n    \r\n    update() {\r\n        const now = performance.now();\r\n        const deltaTime = now - this.lastFrameTime;\r\n        this.lastFrameTime = now;\r\n        \r\n        // Update all elements\r\n        this.elements.forEach(element => {\r\n            if (element.enabled) {\r\n                element.update(this.inputMap, deltaTime);\r\n            }\r\n        });\r\n    }\r\n    \r\n    draw() {\r\n        // Draw all elements\r\n        this.elements.forEach(element => {\r\n            if (element.visible) {\r\n                element.draw(this.canvas, this.font);\r\n            }\r\n        });\r\n    }\r\n}\n\nclass SharedArena {\r\n    constructor(capacity) {\r\n\r\n        this.m_data = new SharedArrayBuffer(capacity + 16); // +16 for metadata header\r\n\r\n        // Int32Array view for atomic operations\r\n        this.m_meta = new Int32Array(this.m_data, 0, 4);\r\n        // [0] = current offset (atomic)\r\n        // [1] = capacity\r\n        // [2] = allocation count\r\n        // [3] = lock flag (0=unlocked, 1=locked)\r\n\r\n        Atomics.store(this.m_meta, 0, 16); // start after metadata\r\n        Atomics.store(this.m_meta, 1, capacity);\r\n        Atomics.store(this.m_meta, 2, 0);\r\n        Atomics.store(this.m_meta, 3, 0);\r\n\r\n        // Uint8Array for actual pixel data\r\n        this.m_view = new Uint8Array(this.m_data, 16);\r\n    }\r\n\r\n\r\n    static fromBuffer(m_data) {\r\n        const self = new SharedArena(0);\r\n        self.m_data = m_data;\r\n        self.m_meta = new Int32Array(self.m_data, 0, 4);\r\n        self.m_view = new Uint8Array(self.m_data, 16);\r\n        return self;\r\n    }\r\n\r\n\r\n\r\n    /**\r\n  * thread-safe allocation using compare-and-swap\r\n  * @param {number} size \r\n  * @param {number} alignment  \r\n  * @param {boolean} autoGrow - if true, will attempt to grow arena on OOM\r\n  */\r\n    allocate(size, alignment = 4, autoGrow = false) {\r\n        while (true) {\r\n            /**\r\n             *  offset += size isn't atomic. Two workers could read offset=1000, both add 500, both write 1500, now we got overlapping allocations. CAS ensures only one thread wins.\r\n             */\r\n            if (Atomics.compareExchange(this.m_meta, 3, 0, 1) !== 0) {\r\n                continue; // someone else has lock\r\n            }\r\n\r\n            const offset = Atomics.load(this.m_meta, 0);\r\n            const capacity = Atomics.load(this.m_meta, 1);\r\n            const aligned = Math.ceil(offset / alignment) * alignment;\r\n\r\n            if (aligned + size > capacity) {\r\n                Atomics.store(this.m_meta, 3, 0); // release lock\r\n\r\n                if (autoGrow) {\r\n                    // calculate needed capacity with breathing room\r\n                    const currentUsed = offset - 16;\r\n                    const needed = currentUsed + size;\r\n                    const breathingRoom = Math.max(size, 1024 * 1024); // At least 1MB or size of current allocation\r\n                    this.grow(needed + breathingRoom);\r\n                    continue; // retry allocation after growth\r\n                }\r\n\r\n                throw new Error(`Arena OOM: need ${size}, have ${capacity - aligned}`);\r\n            }\r\n\r\n            // Commit allocation\r\n            Atomics.store(this.m_meta, 0, aligned + size);\r\n            Atomics.add(this.m_meta, 2, 1);\r\n            Atomics.store(this.m_meta, 3, 0); // release lock\r\n\r\n            return aligned;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Grow the arena to a new capacity\r\n     * @param {number} newCapacity - target capacity (will be rounded up if needed)\r\n     */\r\n    grow(newCapacity) {\r\n        // Acquire lock\r\n        while (Atomics.compareExchange(this.m_meta, 3, 0, 1) !== 0) {\r\n            // spin until we get lock\r\n        }\r\n\r\n        try {\r\n            const oldCapacity = Atomics.load(this.m_meta, 1);\r\n\r\n            if (newCapacity <= oldCapacity) {\r\n                return; // already big enough\r\n            }\r\n\r\n            // Create new buffer with increased capacity\r\n            const newData = new SharedArrayBuffer(newCapacity + 16);\r\n            const newMeta = new Int32Array(newData, 0, 4);\r\n            const newView = new Uint8Array(newData, 16);\r\n\r\n            // Copy old data\r\n            newView.set(this.m_view.subarray(0, Atomics.load(this.m_meta, 0) - 16));\r\n\r\n            // Copy metadata\r\n            newMeta[0] = this.m_meta[0]; // offset\r\n            newMeta[2] = this.m_meta[2]; // allocation count\r\n            newMeta[3] = 0; // reset lock\r\n\r\n            // Update capacity in new buffer\r\n            Atomics.store(newMeta, 1, newCapacity);\r\n\r\n            // Swap buffers\r\n            this.m_data = newData;\r\n            this.m_meta = newMeta;\r\n            this.m_view = newView;\r\n\r\n        } finally {\r\n            // Release lock\r\n            Atomics.store(this.m_meta, 3, 0);\r\n        }\r\n    }\r\n\r\n\r\n    // /**\r\n    //  * thread-safe allocation using compare-and-swap\r\n    //  * @param {number} size \r\n    //  * @param {number} alignment  \r\n    //  */\r\n    // allocate(size, alignment = 4) {\r\n    //     while (true) {\r\n    //         /**\r\n    //          *  offset += size isn't atomic. Two workers could read offset=1000, both add 500, both write 1500, now we got overlapping allocations. CAS ensures only one thread wins.\r\n    //          */\r\n    //         if (Atomics.compareExchange(this.m_meta, 3, 0, 1) !== 0) {\r\n    //             continue; // someone else has lock\r\n    //         }\r\n\r\n    //         const offset = Atomics.load(this.m_meta, 0);\r\n    //         const capacity = Atomics.load(this.m_meta, 1);\r\n    //         const aligned = Math.ceil(offset / alignment) * alignment;\r\n\r\n    //         if (aligned + size > capacity) {\r\n    //             Atomics.store(this.m_meta, 3, 0); // release lock\r\n    //             throw new Error(`Arena OOM: need ${size}, have ${capacity - aligned}`);\r\n    //         }\r\n\r\n    //         // Commit allocation\r\n    //         Atomics.store(this.m_meta, 0, aligned + size);\r\n    //         Atomics.add(this.m_meta, 2, 1);\r\n    //         Atomics.store(this.m_meta, 3, 0); // release lock\r\n\r\n    //         return aligned;\r\n    //     }\r\n\r\n\r\n    // }\r\n\r\n    reset() {\r\n        Atomics.store(this.m_meta, 0, 16);\r\n        Atomics.store(this.m_meta, 2, 0);\r\n        this.m_view.fill(0);\r\n    }\r\n\r\n    get stats() {\r\n        const offset = Atomics.load(this.m_meta, 0);\r\n        const capacity = Atomics.load(this.m_meta, 1);\r\n        const count = Atomics.load(this.m_meta, 2);\r\n        return {\r\n            capacity,\r\n            used: offset - 16,\r\n            available: capacity - (offset - 16),\r\n            allocationCount: count,\r\n            utilization: ((offset - 16) / capacity * 100).toFixed(2) + '%'\r\n        };\r\n    }\r\n}\n\nexport { AADrawer, BatchedDirtyTracker, BitmapFont, BlendMode, Button, CacheBuffer, Camera, ClipRect, ClippingContext, ColorTheory, Compositor, CoordinateSystem, DirtyRegionTracker, GraphicsState, Input, InputBuffer, InputMap, Label, LineDrawer$1 as LineDrawer, PerformanceMonitor, PixelBuffer, PolygonDrawer, Renderer, ShapeDrawer, SharedArena, TextInput, Transform, UIElement, UIManager, Viewport, createLetterboxedViewport, drawAtlasRegionToCanvas, drawLetterboxBars, genFrames, imageToCanvas, loadRenderer, loadRendererSea, normalizeRGBA };\n//# sourceMappingURL=index.js.map\n","var HeaderTypes;\n(function (HeaderTypes) {\n    HeaderTypes[HeaderTypes[\"BITMAP_INFO_HEADER\"] = 40] = \"BITMAP_INFO_HEADER\";\n    HeaderTypes[HeaderTypes[\"BITMAP_V2_INFO_HEADER\"] = 52] = \"BITMAP_V2_INFO_HEADER\";\n    HeaderTypes[HeaderTypes[\"BITMAP_V3_INFO_HEADER\"] = 56] = \"BITMAP_V3_INFO_HEADER\";\n    HeaderTypes[HeaderTypes[\"BITMAP_V4_HEADER\"] = 108] = \"BITMAP_V4_HEADER\";\n    HeaderTypes[HeaderTypes[\"BITMAP_V5_HEADER\"] = 124] = \"BITMAP_V5_HEADER\";\n})(HeaderTypes || (HeaderTypes = {}));\nexport default HeaderTypes;\n//# sourceMappingURL=header-types.js.map","// We have these:\n//\n// const sample = 0101 0101 0101 0101\n// const mask   = 0111 1100 0000 0000\n// 256        === 0000 0001 0000 0000\n//\n// We want to take the sample and turn it into an 8-bit value.\n//\n// 1. We extract the last bit of the mask:\n//\n// 0000 0100 0000 0000\n//       ^\n//\n// Like so:\n//\n// const a = ~mask =    1000 0011 1111 1111\n// const b = a + 1 =    1000 0100 0000 0000\n// const c = b & mask = 0000 0100 0000 0000\n//\n// 2. We shift it to the right and extract the bit before the first:\n//\n// 0000 0000 0010 0000\n//             ^\n//\n// Like so:\n//\n// const d = mask / c = 0000 0000 0001 1111\n// const e = mask + 1 = 0000 0000 0010 0000\n//\n// 3. We apply the mask and the two values above to a sample:\n//\n// const f = sample & mask = 0101 0100 0000 0000\n// const g = f / c =         0000 0000 0001 0101\n// const h = 256 / e =       0000 0000 0000 0100\n// const i = g * h =         0000 0000 1010 1000\n//                                     ^^^^ ^\n//\n// Voila, we have extracted a sample and \"stretched\" it to 8 bits. For samples\n// which are already 8-bit, h === 1 and g === i.\nexport default function maskColor(maskRed, maskGreen, maskBlue, maskAlpha) {\n    const maskRedR = (~maskRed + 1) & maskRed;\n    const maskGreenR = (~maskGreen + 1) & maskGreen;\n    const maskBlueR = (~maskBlue + 1) & maskBlue;\n    const maskAlphaR = (~maskAlpha + 1) & maskAlpha;\n    const shiftedMaskRedL = maskRed / maskRedR + 1;\n    const shiftedMaskGreenL = maskGreen / maskGreenR + 1;\n    const shiftedMaskBlueL = maskBlue / maskBlueR + 1;\n    const shiftedMaskAlphaL = maskAlpha / maskAlphaR + 1;\n    return {\n        shiftRed: (x) => (((x & maskRed) / maskRedR) * 0x100) / shiftedMaskRedL,\n        shiftGreen: (x) => (((x & maskGreen) / maskGreenR) * 0x100) / shiftedMaskGreenL,\n        shiftBlue: (x) => (((x & maskBlue) / maskBlueR) * 0x100) / shiftedMaskBlueL,\n        shiftAlpha: maskAlpha !== 0\n            ? (x) => (((x & maskAlpha) / maskAlphaR) * 0x100) / shiftedMaskAlphaL\n            : () => 255,\n    };\n}\n//# sourceMappingURL=mask-color.js.map","export var BmpCompression;\n(function (BmpCompression) {\n    BmpCompression[BmpCompression[\"NONE\"] = 0] = \"NONE\";\n    BmpCompression[BmpCompression[\"BI_RLE8\"] = 1] = \"BI_RLE8\";\n    BmpCompression[BmpCompression[\"BI_RLE4\"] = 2] = \"BI_RLE4\";\n    BmpCompression[BmpCompression[\"BI_BIT_FIELDS\"] = 3] = \"BI_BIT_FIELDS\";\n    BmpCompression[BmpCompression[\"BI_ALPHA_BIT_FIELDS\"] = 6] = \"BI_ALPHA_BIT_FIELDS\";\n})(BmpCompression || (BmpCompression = {}));\n//# sourceMappingURL=types.js.map","import HeaderTypes from './header-types.js';\nimport maskColor from './mask-color.js';\nimport { BmpCompression } from './types.js';\nexport default class BmpDecoder {\n    // Header\n    flag;\n    fileSize;\n    reserved1;\n    reserved2;\n    offset;\n    headerSize;\n    width;\n    height;\n    planes;\n    bitPP;\n    compression;\n    rawSize;\n    hr;\n    vr;\n    colors;\n    importantColors;\n    palette;\n    data;\n    maskRed;\n    maskGreen;\n    maskBlue;\n    maskAlpha;\n    toRGBA;\n    pos;\n    bottomUp;\n    buffer;\n    locRed;\n    locGreen;\n    locBlue;\n    locAlpha;\n    shiftRed;\n    shiftGreen;\n    shiftBlue;\n    shiftAlpha;\n    constructor(buffer, { toRGBA } = { toRGBA: false }) {\n        this.buffer = buffer;\n        this.toRGBA = !!toRGBA;\n        this.pos = 0;\n        this.bottomUp = true;\n        this.flag = this.buffer.toString('utf-8', 0, (this.pos += 2));\n        if (this.flag !== 'BM') {\n            throw new Error('Invalid BMP File');\n        }\n        this.locRed = this.toRGBA ? 0 : 3;\n        this.locGreen = this.toRGBA ? 1 : 2;\n        this.locBlue = this.toRGBA ? 2 : 1;\n        this.locAlpha = this.toRGBA ? 3 : 0;\n        this.parseHeader();\n        this.parseRGBA();\n    }\n    parseHeader() {\n        this.fileSize = this.readUInt32LE();\n        this.reserved1 = this.buffer.readUInt16LE(this.pos);\n        this.pos += 2;\n        this.reserved2 = this.buffer.readUInt16LE(this.pos);\n        this.pos += 2;\n        this.offset = this.readUInt32LE();\n        // End of BITMAP_FILE_HEADER\n        this.headerSize = this.readUInt32LE();\n        if (!(this.headerSize in HeaderTypes)) {\n            throw new Error(`Unsupported BMP header size ${this.headerSize}`);\n        }\n        this.width = this.readUInt32LE();\n        this.height = this.readUInt32LE();\n        // negative value are possible here => implies bottom down\n        this.height =\n            this.height > 0x7fffffff ? this.height - 0x100000000 : this.height;\n        this.planes = this.buffer.readUInt16LE(this.pos);\n        this.pos += 2;\n        this.bitPP = this.buffer.readUInt16LE(this.pos);\n        this.pos += 2;\n        this.compression = this.readUInt32LE();\n        this.rawSize = this.readUInt32LE();\n        this.hr = this.readUInt32LE();\n        this.vr = this.readUInt32LE();\n        this.colors = this.readUInt32LE();\n        this.importantColors = this.readUInt32LE();\n        // De facto defaults\n        if (this.bitPP === 32) {\n            this.maskAlpha = 0;\n            this.maskRed = 0x00ff0000;\n            this.maskGreen = 0x0000ff00;\n            this.maskBlue = 0x000000ff;\n        }\n        else if (this.bitPP === 16) {\n            this.maskAlpha = 0;\n            this.maskRed = 0x7c00;\n            this.maskGreen = 0x03e0;\n            this.maskBlue = 0x001f;\n        }\n        // End of BITMAP_INFO_HEADER\n        if (this.headerSize > HeaderTypes.BITMAP_INFO_HEADER ||\n            this.compression === BmpCompression.BI_BIT_FIELDS ||\n            this.compression === BmpCompression.BI_ALPHA_BIT_FIELDS) {\n            this.maskRed = this.readUInt32LE();\n            this.maskGreen = this.readUInt32LE();\n            this.maskBlue = this.readUInt32LE();\n        }\n        // End of BITMAP_V2_INFO_HEADER\n        if (this.headerSize > HeaderTypes.BITMAP_V2_INFO_HEADER ||\n            this.compression === BmpCompression.BI_ALPHA_BIT_FIELDS) {\n            this.maskAlpha = this.readUInt32LE();\n        }\n        // End of BITMAP_V3_INFO_HEADER\n        if (this.headerSize > HeaderTypes.BITMAP_V3_INFO_HEADER) {\n            this.pos +=\n                HeaderTypes.BITMAP_V4_HEADER - HeaderTypes.BITMAP_V3_INFO_HEADER;\n        }\n        // End of BITMAP_V4_HEADER\n        if (this.headerSize > HeaderTypes.BITMAP_V4_HEADER) {\n            this.pos += HeaderTypes.BITMAP_V5_HEADER - HeaderTypes.BITMAP_V4_HEADER;\n        }\n        // End of BITMAP_V5_HEADER\n        if (this.bitPP <= 8 || this.colors > 0) {\n            const len = this.colors === 0 ? 1 << this.bitPP : this.colors;\n            this.palette = new Array(len);\n            for (let i = 0; i < len; i++) {\n                const blue = this.buffer.readUInt8(this.pos++);\n                const green = this.buffer.readUInt8(this.pos++);\n                const red = this.buffer.readUInt8(this.pos++);\n                const quad = this.buffer.readUInt8(this.pos++);\n                this.palette[i] = {\n                    red,\n                    green,\n                    blue,\n                    quad,\n                };\n            }\n        }\n        // End of color table\n        // Can the height ever be negative?\n        if (this.height < 0) {\n            this.height *= -1;\n            this.bottomUp = false;\n        }\n        const coloShift = maskColor(this.maskRed, this.maskGreen, this.maskBlue, this.maskAlpha);\n        this.shiftRed = coloShift.shiftRed;\n        this.shiftGreen = coloShift.shiftGreen;\n        this.shiftBlue = coloShift.shiftBlue;\n        this.shiftAlpha = coloShift.shiftAlpha;\n    }\n    parseRGBA() {\n        this.data = Buffer.alloc(this.width * this.height * 4);\n        switch (this.bitPP) {\n            case 1:\n                this.bit1();\n                break;\n            case 4:\n                this.bit4();\n                break;\n            case 8:\n                this.bit8();\n                break;\n            case 16:\n                this.bit16();\n                break;\n            case 24:\n                this.bit24();\n                break;\n            default:\n                this.bit32();\n        }\n    }\n    bit1() {\n        const xLen = Math.ceil(this.width / 8);\n        const mode = xLen % 4;\n        const padding = mode !== 0 ? 4 - mode : 0;\n        let lastLine;\n        this.scanImage(padding, xLen, (x, line) => {\n            if (line !== lastLine) {\n                lastLine = line;\n            }\n            const b = this.buffer.readUInt8(this.pos++);\n            const location = line * this.width * 4 + x * 8 * 4;\n            for (let i = 0; i < 8; i++) {\n                if (x * 8 + i < this.width) {\n                    const rgb = this.palette[(b >> (7 - i)) & 0x1];\n                    this.data[location + i * this.locAlpha] = 0;\n                    this.data[location + i * 4 + this.locBlue] = rgb.blue;\n                    this.data[location + i * 4 + this.locGreen] = rgb.green;\n                    this.data[location + i * 4 + this.locRed] = rgb.red;\n                }\n                else {\n                    break;\n                }\n            }\n        });\n    }\n    bit4() {\n        if (this.compression === BmpCompression.BI_RLE4) {\n            this.data.fill(0);\n            let lowNibble = false; //for all count of pixel\n            let lines = this.bottomUp ? this.height - 1 : 0;\n            let location = 0;\n            while (location < this.data.length) {\n                const a = this.buffer.readUInt8(this.pos++);\n                const b = this.buffer.readUInt8(this.pos++);\n                //absolute mode\n                if (a === 0) {\n                    if (b === 0) {\n                        //line end\n                        lines += this.bottomUp ? -1 : 1;\n                        location = lines * this.width * 4;\n                        lowNibble = false;\n                        continue;\n                    }\n                    if (b === 1) {\n                        // image end\n                        break;\n                    }\n                    if (b === 2) {\n                        // offset x, y\n                        const x = this.buffer.readUInt8(this.pos++);\n                        const y = this.buffer.readUInt8(this.pos++);\n                        lines += this.bottomUp ? -y : y;\n                        location += y * this.width * 4 + x * 4;\n                    }\n                    else {\n                        let c = this.buffer.readUInt8(this.pos++);\n                        for (let i = 0; i < b; i++) {\n                            location = this.setPixelData(location, lowNibble ? c & 0x0f : (c & 0xf0) >> 4);\n                            if (i & 1 && i + 1 < b) {\n                                c = this.buffer.readUInt8(this.pos++);\n                            }\n                            lowNibble = !lowNibble;\n                        }\n                        if ((((b + 1) >> 1) & 1) === 1) {\n                            this.pos++;\n                        }\n                    }\n                }\n                else {\n                    //encoded mode\n                    for (let i = 0; i < a; i++) {\n                        location = this.setPixelData(location, lowNibble ? b & 0x0f : (b & 0xf0) >> 4);\n                        lowNibble = !lowNibble;\n                    }\n                }\n            }\n        }\n        else {\n            const xLen = Math.ceil(this.width / 2);\n            const mode = xLen % 4;\n            const padding = mode !== 0 ? 4 - mode : 0;\n            this.scanImage(padding, xLen, (x, line) => {\n                const b = this.buffer.readUInt8(this.pos++);\n                const location = line * this.width * 4 + x * 2 * 4;\n                const first4 = b >> 4;\n                let rgb = this.palette[first4];\n                this.data[location] = 0;\n                this.data[location + 1] = rgb.blue;\n                this.data[location + 2] = rgb.green;\n                this.data[location + 3] = rgb.red;\n                if (x * 2 + 1 >= this.width) {\n                    // throw new Error('Something');\n                    return false;\n                }\n                const last4 = b & 0x0f;\n                rgb = this.palette[last4];\n                this.data[location + 4] = 0;\n                this.data[location + 4 + 1] = rgb.blue;\n                this.data[location + 4 + 2] = rgb.green;\n                this.data[location + 4 + 3] = rgb.red;\n            });\n        }\n    }\n    bit8() {\n        if (this.compression === BmpCompression.BI_RLE8) {\n            this.data.fill(0);\n            let lines = this.bottomUp ? this.height - 1 : 0;\n            let location = 0;\n            while (location < this.data.length) {\n                const a = this.buffer.readUInt8(this.pos++);\n                const b = this.buffer.readUInt8(this.pos++);\n                //absolute mode\n                if (a === 0) {\n                    if (b === 0) {\n                        //line end\n                        lines += this.bottomUp ? -1 : 1;\n                        location = lines * this.width * 4;\n                        continue;\n                    }\n                    if (b === 1) {\n                        //image end\n                        break;\n                    }\n                    if (b === 2) {\n                        //offset x,y\n                        const x = this.buffer.readUInt8(this.pos++);\n                        const y = this.buffer.readUInt8(this.pos++);\n                        lines += this.bottomUp ? -y : y;\n                        location += y * this.width * 4 + x * 4;\n                    }\n                    else {\n                        for (let i = 0; i < b; i++) {\n                            const c = this.buffer.readUInt8(this.pos++);\n                            location = this.setPixelData(location, c);\n                        }\n                        // @ts-ignore\n                        const shouldIncrement = b & (1 === 1);\n                        if (shouldIncrement) {\n                            this.pos++;\n                        }\n                    }\n                }\n                else {\n                    //encoded mode\n                    for (let i = 0; i < a; i++) {\n                        location = this.setPixelData(location, b);\n                    }\n                }\n            }\n        }\n        else {\n            const mode = this.width % 4;\n            const padding = mode !== 0 ? 4 - mode : 0;\n            this.scanImage(padding, this.width, (x, line) => {\n                const b = this.buffer.readUInt8(this.pos++);\n                const location = line * this.width * 4 + x * 4;\n                if (b < this.palette.length) {\n                    const rgb = this.palette[b];\n                    this.data[location] = 0;\n                    this.data[location + 1] = rgb.blue;\n                    this.data[location + 2] = rgb.green;\n                    this.data[location + 3] = rgb.red;\n                }\n                else {\n                    this.data[location] = 0;\n                    this.data[location + 1] = 0xff;\n                    this.data[location + 2] = 0xff;\n                    this.data[location + 3] = 0xff;\n                }\n            });\n        }\n    }\n    bit16() {\n        const padding = (this.width % 2) * 2;\n        this.scanImage(padding, this.width, (x, line) => {\n            const loc = line * this.width * 4 + x * 4;\n            const px = this.buffer.readUInt16LE(this.pos);\n            this.pos += 2;\n            this.data[loc + this.locRed] = this.shiftRed(px);\n            this.data[loc + this.locGreen] = this.shiftGreen(px);\n            this.data[loc + this.locBlue] = this.shiftBlue(px);\n            this.data[loc + this.locAlpha] = this.shiftAlpha(px);\n        });\n    }\n    bit24() {\n        const padding = this.width % 4;\n        this.scanImage(padding, this.width, (x, line) => {\n            const loc = line * this.width * 4 + x * 4;\n            const blue = this.buffer.readUInt8(this.pos++);\n            const green = this.buffer.readUInt8(this.pos++);\n            const red = this.buffer.readUInt8(this.pos++);\n            this.data[loc + this.locRed] = red;\n            this.data[loc + this.locGreen] = green;\n            this.data[loc + this.locBlue] = blue;\n            this.data[loc + this.locAlpha] = 0;\n        });\n    }\n    bit32() {\n        this.scanImage(0, this.width, (x, line) => {\n            const loc = line * this.width * 4 + x * 4;\n            const px = this.readUInt32LE();\n            this.data[loc + this.locRed] = this.shiftRed(px);\n            this.data[loc + this.locGreen] = this.shiftGreen(px);\n            this.data[loc + this.locBlue] = this.shiftBlue(px);\n            this.data[loc + this.locAlpha] = this.shiftAlpha(px);\n        });\n    }\n    scanImage(padding = 0, width = this.width, processPixel) {\n        for (let y = this.height - 1; y >= 0; y--) {\n            const line = this.bottomUp ? y : this.height - 1 - y;\n            for (let x = 0; x < width; x++) {\n                const result = processPixel.call(this, x, line);\n                if (result === false) {\n                    return;\n                }\n            }\n            this.pos += padding;\n        }\n    }\n    readUInt32LE() {\n        const value = this.buffer.readUInt32LE(this.pos);\n        this.pos += 4;\n        return value;\n    }\n    setPixelData(location, rgbIndex) {\n        const { blue, green, red } = this.palette[rgbIndex];\n        this.data[location + this.locAlpha] = 0;\n        this.data[location + 1 + this.locBlue] = blue;\n        this.data[location + 2 + this.locGreen] = green;\n        this.data[location + 3 + this.locRed] = red;\n        return location + 4;\n    }\n}\n//# sourceMappingURL=decoder.js.map","import HeaderTypes from './header-types.js';\nfunction createInteger(numbers) {\n    return numbers.reduce((final, n) => (final << 1) | n, 0);\n}\nfunction createColor(color) {\n    return ((color.quad << 24) | (color.red << 16) | (color.green << 8) | color.blue);\n}\nexport default class BmpEncoder {\n    fileSize;\n    reserved1;\n    reserved2;\n    offset;\n    width;\n    flag;\n    height;\n    planes;\n    bitPP;\n    compress;\n    hr;\n    vr;\n    colors;\n    importantColors;\n    rawSize;\n    headerSize;\n    data;\n    palette;\n    extraBytes;\n    buffer;\n    bytesInColor;\n    pos;\n    constructor(imgData) {\n        this.buffer = imgData.data;\n        this.width = imgData.width;\n        this.height = imgData.height;\n        this.headerSize = HeaderTypes.BITMAP_INFO_HEADER;\n        // Header\n        this.flag = 'BM';\n        this.bitPP = imgData.bitPP || 24;\n        this.offset = 54;\n        this.reserved1 = imgData.reserved1 || 0;\n        this.reserved2 = imgData.reserved2 || 0;\n        this.planes = 1;\n        this.compress = 0;\n        this.hr = imgData.hr || 0;\n        this.vr = imgData.vr || 0;\n        this.importantColors = imgData.importantColors || 0;\n        this.colors = Math.min(2 ** (this.bitPP - 1 || 1), imgData.colors || Infinity);\n        this.palette = imgData.palette || [];\n        if (this.colors && this.bitPP < 16) {\n            this.offset += this.colors * 4;\n        }\n        else {\n            this.colors = 0;\n        }\n        switch (this.bitPP) {\n            case 32:\n                this.bytesInColor = 4;\n                break;\n            case 16:\n                this.bytesInColor = 2;\n                break;\n            case 8:\n                this.bytesInColor = 1;\n                break;\n            case 4:\n                this.bytesInColor = 1 / 2;\n                break;\n            case 1:\n                this.bytesInColor = 1 / 8;\n                break;\n            default:\n                this.bytesInColor = 3;\n                this.bitPP = 24;\n        }\n        const rowWidth = (this.width * this.bitPP) / 32;\n        const rowBytes = Math.ceil(rowWidth);\n        this.extraBytes = (rowBytes - rowWidth) * 4;\n        // Why 2?\n        this.rawSize = this.height * rowBytes * 4 + 2;\n        this.fileSize = this.rawSize + this.offset;\n        this.data = Buffer.alloc(this.fileSize, 0x1);\n        this.pos = 0;\n        this.encode();\n    }\n    encode() {\n        this.pos = 0;\n        this.writeHeader();\n        switch (this.bitPP) {\n            case 32:\n                this.bit32();\n                break;\n            case 16:\n                this.bit16();\n                break;\n            case 8:\n                this.bit8();\n                break;\n            case 4:\n                this.bit4();\n                break;\n            case 1:\n                this.bit1();\n                break;\n            default:\n                this.bit24();\n        }\n    }\n    writeHeader() {\n        this.data.write(this.flag, this.pos, 2);\n        this.pos += 2;\n        this.writeUInt32LE(this.fileSize);\n        // Writing 2 UInt16LE resulted in a weird bug\n        this.writeUInt32LE((this.reserved1 << 16) | this.reserved2);\n        this.writeUInt32LE(this.offset);\n        this.writeUInt32LE(this.headerSize);\n        this.writeUInt32LE(this.width);\n        this.writeUInt32LE(this.height);\n        this.data.writeUInt16LE(this.planes, this.pos);\n        this.pos += 2;\n        this.data.writeUInt16LE(this.bitPP, this.pos);\n        this.pos += 2;\n        this.writeUInt32LE(this.compress);\n        this.writeUInt32LE(this.rawSize);\n        this.writeUInt32LE(this.hr);\n        this.writeUInt32LE(this.vr);\n        this.writeUInt32LE(this.colors);\n        this.writeUInt32LE(this.importantColors);\n    }\n    bit1() {\n        if (this.palette.length && this.colors === 2) {\n            this.initColors(1);\n        }\n        else {\n            this.writeUInt32LE(0x00ffffff); // Black\n            this.writeUInt32LE(0x00000000); // White\n        }\n        this.pos += 1; // ?\n        let lineArr = [];\n        this.writeImage((p, index, x) => {\n            let i = index;\n            i++;\n            const b = this.buffer[i++];\n            const g = this.buffer[i++];\n            const r = this.buffer[i++];\n            const brightness = r * 0.2126 + g * 0.7152 + b * 0.0722;\n            lineArr.push(brightness > 127 ? 0 : 1);\n            if ((x + 1) % 8 === 0) {\n                this.data[p - 1] = createInteger(lineArr);\n                lineArr = [];\n            }\n            else if (x === this.width - 1 && lineArr.length > 0) {\n                this.data[p - 1] = createInteger(lineArr) << 4;\n                lineArr = [];\n            }\n            return i;\n        });\n    }\n    bit4() {\n        const colors = this.initColors(4);\n        let integerPair = [];\n        this.writeImage((p, index, x) => {\n            let i = index;\n            const colorInt = createColor({\n                quad: this.buffer[i++],\n                blue: this.buffer[i++],\n                green: this.buffer[i++],\n                red: this.buffer[i++],\n            });\n            const colorExists = colors.findIndex((c) => c === colorInt);\n            if (colorExists !== -1) {\n                integerPair.push(colorExists);\n            }\n            else {\n                integerPair.push(0);\n            }\n            if ((x + 1) % 2 === 0) {\n                this.data[p] = (integerPair[0] << 4) | integerPair[1];\n                integerPair = [];\n            }\n            return i;\n        });\n    }\n    bit8() {\n        const colors = this.initColors(8);\n        this.writeImage((p, index) => {\n            let i = index;\n            const colorInt = createColor({\n                quad: this.buffer[i++],\n                blue: this.buffer[i++],\n                green: this.buffer[i++],\n                red: this.buffer[i++],\n            });\n            const colorExists = colors.findIndex((c) => c === colorInt);\n            if (colorExists !== -1) {\n                this.data[p] = colorExists;\n            }\n            else {\n                this.data[p] = 0;\n            }\n            return i;\n        });\n    }\n    bit16() {\n        this.writeImage((p, index) => {\n            let i = index + 1;\n            const b = this.buffer[i++] / 8; // b\n            const g = this.buffer[i++] / 8; // g\n            const r = this.buffer[i++] / 8; // r\n            const color = (r << 10) | (g << 5) | b;\n            this.data[p] = color & 0x00ff;\n            this.data[p + 1] = (color & 0xff00) >> 8;\n            return i;\n        });\n    }\n    bit24() {\n        this.writeImage((p, index) => {\n            let i = index + 1;\n            this.data[p] = this.buffer[i++]; //b\n            this.data[p + 1] = this.buffer[i++]; //g\n            this.data[p + 2] = this.buffer[i++]; //r\n            return i;\n        });\n    }\n    bit32() {\n        this.writeImage((p, index) => {\n            let i = index;\n            this.data[p + 3] = this.buffer[i++]; // a\n            this.data[p] = this.buffer[i++]; // b\n            this.data[p + 1] = this.buffer[i++]; // g\n            this.data[p + 2] = this.buffer[i++]; // r\n            return i;\n        });\n    }\n    writeImage(writePixel) {\n        const rowBytes = this.extraBytes + this.width * this.bytesInColor;\n        let i = 0;\n        for (let y = 0; y < this.height; y++) {\n            for (let x = 0; x < this.width; x++) {\n                const p = Math.floor(this.pos + (this.height - 1 - y) * rowBytes + x * this.bytesInColor);\n                i = writePixel.call(this, p, i, x, y);\n            }\n        }\n    }\n    initColors(bit) {\n        const colors = [];\n        if (this.palette.length) {\n            for (let i = 0; i < this.colors; i++) {\n                const rootColor = createColor(this.palette[i]);\n                this.writeUInt32LE(rootColor);\n                colors.push(rootColor);\n            }\n        }\n        else {\n            throw new Error(`To encode ${bit}-bit BMPs a pallette is needed. Please choose up to ${this.colors} colors. Colors must be 32-bit integers.`);\n        }\n        return colors;\n    }\n    writeUInt32LE(value) {\n        this.data.writeUInt32LE(value, this.pos);\n        this.pos += 4;\n    }\n}\n//# sourceMappingURL=encoder.js.map","import BmpDecoder from './decoder.js';\nimport BmpEncoder from './encoder.js';\nexport function decode(bmpData, options) {\n    return new BmpDecoder(bmpData, options);\n}\nexport function encode(imgData) {\n    return new BmpEncoder(imgData);\n}\nexport * from './types.js';\n//# sourceMappingURL=index.js.map","// This file is autogenerated. It's used to publish ESM to npm.\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  }, _typeof(obj);\n}\n\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\nvar trimLeft = /^\\s+/;\nvar trimRight = /\\s+$/;\nfunction tinycolor(color, opts) {\n  color = color ? color : \"\";\n  opts = opts || {};\n\n  // If input is already a tinycolor, return itself\n  if (color instanceof tinycolor) {\n    return color;\n  }\n  // If we are called as a function, call using new instead\n  if (!(this instanceof tinycolor)) {\n    return new tinycolor(color, opts);\n  }\n  var rgb = inputToRGB(color);\n  this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;\n  this._gradientType = opts.gradientType;\n\n  // Don't let the range of [0,255] come back in [0,1].\n  // Potentially lose a little bit of precision here, but will fix issues where\n  // .5 gets interpreted as half of the total, instead of half of 1\n  // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n  if (this._r < 1) this._r = Math.round(this._r);\n  if (this._g < 1) this._g = Math.round(this._g);\n  if (this._b < 1) this._b = Math.round(this._b);\n  this._ok = rgb.ok;\n}\ntinycolor.prototype = {\n  isDark: function isDark() {\n    return this.getBrightness() < 128;\n  },\n  isLight: function isLight() {\n    return !this.isDark();\n  },\n  isValid: function isValid() {\n    return this._ok;\n  },\n  getOriginalInput: function getOriginalInput() {\n    return this._originalInput;\n  },\n  getFormat: function getFormat() {\n    return this._format;\n  },\n  getAlpha: function getAlpha() {\n    return this._a;\n  },\n  getBrightness: function getBrightness() {\n    //http://www.w3.org/TR/AERT#color-contrast\n    var rgb = this.toRgb();\n    return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n  },\n  getLuminance: function getLuminance() {\n    //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n    var rgb = this.toRgb();\n    var RsRGB, GsRGB, BsRGB, R, G, B;\n    RsRGB = rgb.r / 255;\n    GsRGB = rgb.g / 255;\n    BsRGB = rgb.b / 255;\n    if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n    if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n    if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n    return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n  },\n  setAlpha: function setAlpha(value) {\n    this._a = boundAlpha(value);\n    this._roundA = Math.round(100 * this._a) / 100;\n    return this;\n  },\n  toHsv: function toHsv() {\n    var hsv = rgbToHsv(this._r, this._g, this._b);\n    return {\n      h: hsv.h * 360,\n      s: hsv.s,\n      v: hsv.v,\n      a: this._a\n    };\n  },\n  toHsvString: function toHsvString() {\n    var hsv = rgbToHsv(this._r, this._g, this._b);\n    var h = Math.round(hsv.h * 360),\n      s = Math.round(hsv.s * 100),\n      v = Math.round(hsv.v * 100);\n    return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n  },\n  toHsl: function toHsl() {\n    var hsl = rgbToHsl(this._r, this._g, this._b);\n    return {\n      h: hsl.h * 360,\n      s: hsl.s,\n      l: hsl.l,\n      a: this._a\n    };\n  },\n  toHslString: function toHslString() {\n    var hsl = rgbToHsl(this._r, this._g, this._b);\n    var h = Math.round(hsl.h * 360),\n      s = Math.round(hsl.s * 100),\n      l = Math.round(hsl.l * 100);\n    return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n  },\n  toHex: function toHex(allow3Char) {\n    return rgbToHex(this._r, this._g, this._b, allow3Char);\n  },\n  toHexString: function toHexString(allow3Char) {\n    return \"#\" + this.toHex(allow3Char);\n  },\n  toHex8: function toHex8(allow4Char) {\n    return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n  },\n  toHex8String: function toHex8String(allow4Char) {\n    return \"#\" + this.toHex8(allow4Char);\n  },\n  toRgb: function toRgb() {\n    return {\n      r: Math.round(this._r),\n      g: Math.round(this._g),\n      b: Math.round(this._b),\n      a: this._a\n    };\n  },\n  toRgbString: function toRgbString() {\n    return this._a == 1 ? \"rgb(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \")\" : \"rgba(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \", \" + this._roundA + \")\";\n  },\n  toPercentageRgb: function toPercentageRgb() {\n    return {\n      r: Math.round(bound01(this._r, 255) * 100) + \"%\",\n      g: Math.round(bound01(this._g, 255) * 100) + \"%\",\n      b: Math.round(bound01(this._b, 255) * 100) + \"%\",\n      a: this._a\n    };\n  },\n  toPercentageRgbString: function toPercentageRgbString() {\n    return this._a == 1 ? \"rgb(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n  },\n  toName: function toName() {\n    if (this._a === 0) {\n      return \"transparent\";\n    }\n    if (this._a < 1) {\n      return false;\n    }\n    return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n  },\n  toFilter: function toFilter(secondColor) {\n    var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n    var secondHex8String = hex8String;\n    var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n    if (secondColor) {\n      var s = tinycolor(secondColor);\n      secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n    }\n    return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n  },\n  toString: function toString(format) {\n    var formatSet = !!format;\n    format = format || this._format;\n    var formattedString = false;\n    var hasAlpha = this._a < 1 && this._a >= 0;\n    var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n    if (needsAlphaFormat) {\n      // Special case for \"transparent\", all other non-alpha formats\n      // will return rgba when there is transparency.\n      if (format === \"name\" && this._a === 0) {\n        return this.toName();\n      }\n      return this.toRgbString();\n    }\n    if (format === \"rgb\") {\n      formattedString = this.toRgbString();\n    }\n    if (format === \"prgb\") {\n      formattedString = this.toPercentageRgbString();\n    }\n    if (format === \"hex\" || format === \"hex6\") {\n      formattedString = this.toHexString();\n    }\n    if (format === \"hex3\") {\n      formattedString = this.toHexString(true);\n    }\n    if (format === \"hex4\") {\n      formattedString = this.toHex8String(true);\n    }\n    if (format === \"hex8\") {\n      formattedString = this.toHex8String();\n    }\n    if (format === \"name\") {\n      formattedString = this.toName();\n    }\n    if (format === \"hsl\") {\n      formattedString = this.toHslString();\n    }\n    if (format === \"hsv\") {\n      formattedString = this.toHsvString();\n    }\n    return formattedString || this.toHexString();\n  },\n  clone: function clone() {\n    return tinycolor(this.toString());\n  },\n  _applyModification: function _applyModification(fn, args) {\n    var color = fn.apply(null, [this].concat([].slice.call(args)));\n    this._r = color._r;\n    this._g = color._g;\n    this._b = color._b;\n    this.setAlpha(color._a);\n    return this;\n  },\n  lighten: function lighten() {\n    return this._applyModification(_lighten, arguments);\n  },\n  brighten: function brighten() {\n    return this._applyModification(_brighten, arguments);\n  },\n  darken: function darken() {\n    return this._applyModification(_darken, arguments);\n  },\n  desaturate: function desaturate() {\n    return this._applyModification(_desaturate, arguments);\n  },\n  saturate: function saturate() {\n    return this._applyModification(_saturate, arguments);\n  },\n  greyscale: function greyscale() {\n    return this._applyModification(_greyscale, arguments);\n  },\n  spin: function spin() {\n    return this._applyModification(_spin, arguments);\n  },\n  _applyCombination: function _applyCombination(fn, args) {\n    return fn.apply(null, [this].concat([].slice.call(args)));\n  },\n  analogous: function analogous() {\n    return this._applyCombination(_analogous, arguments);\n  },\n  complement: function complement() {\n    return this._applyCombination(_complement, arguments);\n  },\n  monochromatic: function monochromatic() {\n    return this._applyCombination(_monochromatic, arguments);\n  },\n  splitcomplement: function splitcomplement() {\n    return this._applyCombination(_splitcomplement, arguments);\n  },\n  // Disabled until https://github.com/bgrins/TinyColor/issues/254\n  // polyad: function (number) {\n  //   return this._applyCombination(polyad, [number]);\n  // },\n  triad: function triad() {\n    return this._applyCombination(polyad, [3]);\n  },\n  tetrad: function tetrad() {\n    return this._applyCombination(polyad, [4]);\n  }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function (color, opts) {\n  if (_typeof(color) == \"object\") {\n    var newColor = {};\n    for (var i in color) {\n      if (color.hasOwnProperty(i)) {\n        if (i === \"a\") {\n          newColor[i] = color[i];\n        } else {\n          newColor[i] = convertToPercentage(color[i]);\n        }\n      }\n    }\n    color = newColor;\n  }\n  return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n//     \"red\"\n//     \"#f00\" or \"f00\"\n//     \"#ff0000\" or \"ff0000\"\n//     \"#ff000000\" or \"ff000000\"\n//     \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n//     \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n//     \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n//     \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n//     \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n//     \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n//     \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n  var rgb = {\n    r: 0,\n    g: 0,\n    b: 0\n  };\n  var a = 1;\n  var s = null;\n  var v = null;\n  var l = null;\n  var ok = false;\n  var format = false;\n  if (typeof color == \"string\") {\n    color = stringInputToObject(color);\n  }\n  if (_typeof(color) == \"object\") {\n    if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n      rgb = rgbToRgb(color.r, color.g, color.b);\n      ok = true;\n      format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n    } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n      s = convertToPercentage(color.s);\n      v = convertToPercentage(color.v);\n      rgb = hsvToRgb(color.h, s, v);\n      ok = true;\n      format = \"hsv\";\n    } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n      s = convertToPercentage(color.s);\n      l = convertToPercentage(color.l);\n      rgb = hslToRgb(color.h, s, l);\n      ok = true;\n      format = \"hsl\";\n    }\n    if (color.hasOwnProperty(\"a\")) {\n      a = color.a;\n    }\n  }\n  a = boundAlpha(a);\n  return {\n    ok: ok,\n    format: color.format || format,\n    r: Math.min(255, Math.max(rgb.r, 0)),\n    g: Math.min(255, Math.max(rgb.g, 0)),\n    b: Math.min(255, Math.max(rgb.b, 0)),\n    a: a\n  };\n}\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// <http://www.w3.org/TR/css3-color/>\n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b) {\n  return {\n    r: bound01(r, 255) * 255,\n    g: bound01(g, 255) * 255,\n    b: bound01(b, 255) * 255\n  };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n  r = bound01(r, 255);\n  g = bound01(g, 255);\n  b = bound01(b, 255);\n  var max = Math.max(r, g, b),\n    min = Math.min(r, g, b);\n  var h,\n    s,\n    l = (max + min) / 2;\n  if (max == min) {\n    h = s = 0; // achromatic\n  } else {\n    var d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    switch (max) {\n      case r:\n        h = (g - b) / d + (g < b ? 6 : 0);\n        break;\n      case g:\n        h = (b - r) / d + 2;\n        break;\n      case b:\n        h = (r - g) / d + 4;\n        break;\n    }\n    h /= 6;\n  }\n  return {\n    h: h,\n    s: s,\n    l: l\n  };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n  var r, g, b;\n  h = bound01(h, 360);\n  s = bound01(s, 100);\n  l = bound01(l, 100);\n  function hue2rgb(p, q, t) {\n    if (t < 0) t += 1;\n    if (t > 1) t -= 1;\n    if (t < 1 / 6) return p + (q - p) * 6 * t;\n    if (t < 1 / 2) return q;\n    if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n    return p;\n  }\n  if (s === 0) {\n    r = g = b = l; // achromatic\n  } else {\n    var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n    var p = 2 * l - q;\n    r = hue2rgb(p, q, h + 1 / 3);\n    g = hue2rgb(p, q, h);\n    b = hue2rgb(p, q, h - 1 / 3);\n  }\n  return {\n    r: r * 255,\n    g: g * 255,\n    b: b * 255\n  };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n  r = bound01(r, 255);\n  g = bound01(g, 255);\n  b = bound01(b, 255);\n  var max = Math.max(r, g, b),\n    min = Math.min(r, g, b);\n  var h,\n    s,\n    v = max;\n  var d = max - min;\n  s = max === 0 ? 0 : d / max;\n  if (max == min) {\n    h = 0; // achromatic\n  } else {\n    switch (max) {\n      case r:\n        h = (g - b) / d + (g < b ? 6 : 0);\n        break;\n      case g:\n        h = (b - r) / d + 2;\n        break;\n      case b:\n        h = (r - g) / d + 4;\n        break;\n    }\n    h /= 6;\n  }\n  return {\n    h: h,\n    s: s,\n    v: v\n  };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hsvToRgb(h, s, v) {\n  h = bound01(h, 360) * 6;\n  s = bound01(s, 100);\n  v = bound01(v, 100);\n  var i = Math.floor(h),\n    f = h - i,\n    p = v * (1 - s),\n    q = v * (1 - f * s),\n    t = v * (1 - (1 - f) * s),\n    mod = i % 6,\n    r = [v, q, p, p, t, v][mod],\n    g = [t, v, v, q, p, p][mod],\n    b = [p, p, t, v, v, q][mod];\n  return {\n    r: r * 255,\n    g: g * 255,\n    b: b * 255\n  };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n  var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n\n  // Return a 3 character hex if possible\n  if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n    return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n  }\n  return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n  var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];\n\n  // Return a 4 character hex if possible\n  if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n    return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n  }\n  return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n  var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n  return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n  if (!color1 || !color2) return false;\n  return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\ntinycolor.random = function () {\n  return tinycolor.fromRatio({\n    r: Math.random(),\n    g: Math.random(),\n    b: Math.random()\n  });\n};\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\nfunction _desaturate(color, amount) {\n  amount = amount === 0 ? 0 : amount || 10;\n  var hsl = tinycolor(color).toHsl();\n  hsl.s -= amount / 100;\n  hsl.s = clamp01(hsl.s);\n  return tinycolor(hsl);\n}\nfunction _saturate(color, amount) {\n  amount = amount === 0 ? 0 : amount || 10;\n  var hsl = tinycolor(color).toHsl();\n  hsl.s += amount / 100;\n  hsl.s = clamp01(hsl.s);\n  return tinycolor(hsl);\n}\nfunction _greyscale(color) {\n  return tinycolor(color).desaturate(100);\n}\nfunction _lighten(color, amount) {\n  amount = amount === 0 ? 0 : amount || 10;\n  var hsl = tinycolor(color).toHsl();\n  hsl.l += amount / 100;\n  hsl.l = clamp01(hsl.l);\n  return tinycolor(hsl);\n}\nfunction _brighten(color, amount) {\n  amount = amount === 0 ? 0 : amount || 10;\n  var rgb = tinycolor(color).toRgb();\n  rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n  rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n  rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n  return tinycolor(rgb);\n}\nfunction _darken(color, amount) {\n  amount = amount === 0 ? 0 : amount || 10;\n  var hsl = tinycolor(color).toHsl();\n  hsl.l -= amount / 100;\n  hsl.l = clamp01(hsl.l);\n  return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction _spin(color, amount) {\n  var hsl = tinycolor(color).toHsl();\n  var hue = (hsl.h + amount) % 360;\n  hsl.h = hue < 0 ? 360 + hue : hue;\n  return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\nfunction _complement(color) {\n  var hsl = tinycolor(color).toHsl();\n  hsl.h = (hsl.h + 180) % 360;\n  return tinycolor(hsl);\n}\nfunction polyad(color, number) {\n  if (isNaN(number) || number <= 0) {\n    throw new Error(\"Argument to polyad must be a positive number\");\n  }\n  var hsl = tinycolor(color).toHsl();\n  var result = [tinycolor(color)];\n  var step = 360 / number;\n  for (var i = 1; i < number; i++) {\n    result.push(tinycolor({\n      h: (hsl.h + i * step) % 360,\n      s: hsl.s,\n      l: hsl.l\n    }));\n  }\n  return result;\n}\nfunction _splitcomplement(color) {\n  var hsl = tinycolor(color).toHsl();\n  var h = hsl.h;\n  return [tinycolor(color), tinycolor({\n    h: (h + 72) % 360,\n    s: hsl.s,\n    l: hsl.l\n  }), tinycolor({\n    h: (h + 216) % 360,\n    s: hsl.s,\n    l: hsl.l\n  })];\n}\nfunction _analogous(color, results, slices) {\n  results = results || 6;\n  slices = slices || 30;\n  var hsl = tinycolor(color).toHsl();\n  var part = 360 / slices;\n  var ret = [tinycolor(color)];\n  for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n    hsl.h = (hsl.h + part) % 360;\n    ret.push(tinycolor(hsl));\n  }\n  return ret;\n}\nfunction _monochromatic(color, results) {\n  results = results || 6;\n  var hsv = tinycolor(color).toHsv();\n  var h = hsv.h,\n    s = hsv.s,\n    v = hsv.v;\n  var ret = [];\n  var modification = 1 / results;\n  while (results--) {\n    ret.push(tinycolor({\n      h: h,\n      s: s,\n      v: v\n    }));\n    v = (v + modification) % 1;\n  }\n  return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function (color1, color2, amount) {\n  amount = amount === 0 ? 0 : amount || 50;\n  var rgb1 = tinycolor(color1).toRgb();\n  var rgb2 = tinycolor(color2).toRgb();\n  var p = amount / 100;\n  var rgba = {\n    r: (rgb2.r - rgb1.r) * p + rgb1.r,\n    g: (rgb2.g - rgb1.g) * p + rgb1.g,\n    b: (rgb2.b - rgb1.b) * p + rgb1.b,\n    a: (rgb2.a - rgb1.a) * p + rgb1.a\n  };\n  return tinycolor(rgba);\n};\n\n// Readability Functions\n// ---------------------\n// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n// `contrast`\n// Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\ntinycolor.readability = function (color1, color2) {\n  var c1 = tinycolor(color1);\n  var c2 = tinycolor(color2);\n  return (Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) / (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05);\n};\n\n// `isReadable`\n// Ensure that foreground and background color combinations meet WCAG2 guidelines.\n// The third argument is an optional Object.\n//      the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n//      the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n// If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n\n// *Example*\n//    tinycolor.isReadable(\"#000\", \"#111\") => false\n//    tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function (color1, color2, wcag2) {\n  var readability = tinycolor.readability(color1, color2);\n  var wcag2Parms, out;\n  out = false;\n  wcag2Parms = validateWCAG2Parms(wcag2);\n  switch (wcag2Parms.level + wcag2Parms.size) {\n    case \"AAsmall\":\n    case \"AAAlarge\":\n      out = readability >= 4.5;\n      break;\n    case \"AAlarge\":\n      out = readability >= 3;\n      break;\n    case \"AAAsmall\":\n      out = readability >= 7;\n      break;\n  }\n  return out;\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n//    tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n//    tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString();  // \"#ffffff\"\n//    tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n//    tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function (baseColor, colorList, args) {\n  var bestColor = null;\n  var bestScore = 0;\n  var readability;\n  var includeFallbackColors, level, size;\n  args = args || {};\n  includeFallbackColors = args.includeFallbackColors;\n  level = args.level;\n  size = args.size;\n  for (var i = 0; i < colorList.length; i++) {\n    readability = tinycolor.readability(baseColor, colorList[i]);\n    if (readability > bestScore) {\n      bestScore = readability;\n      bestColor = tinycolor(colorList[i]);\n    }\n  }\n  if (tinycolor.isReadable(baseColor, bestColor, {\n    level: level,\n    size: size\n  }) || !includeFallbackColors) {\n    return bestColor;\n  } else {\n    args.includeFallbackColors = false;\n    return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n  }\n};\n\n// Big List of Colors\n// ------------------\n// <https://www.w3.org/TR/css-color-4/#named-colors>\nvar names = tinycolor.names = {\n  aliceblue: \"f0f8ff\",\n  antiquewhite: \"faebd7\",\n  aqua: \"0ff\",\n  aquamarine: \"7fffd4\",\n  azure: \"f0ffff\",\n  beige: \"f5f5dc\",\n  bisque: \"ffe4c4\",\n  black: \"000\",\n  blanchedalmond: \"ffebcd\",\n  blue: \"00f\",\n  blueviolet: \"8a2be2\",\n  brown: \"a52a2a\",\n  burlywood: \"deb887\",\n  burntsienna: \"ea7e5d\",\n  cadetblue: \"5f9ea0\",\n  chartreuse: \"7fff00\",\n  chocolate: \"d2691e\",\n  coral: \"ff7f50\",\n  cornflowerblue: \"6495ed\",\n  cornsilk: \"fff8dc\",\n  crimson: \"dc143c\",\n  cyan: \"0ff\",\n  darkblue: \"00008b\",\n  darkcyan: \"008b8b\",\n  darkgoldenrod: \"b8860b\",\n  darkgray: \"a9a9a9\",\n  darkgreen: \"006400\",\n  darkgrey: \"a9a9a9\",\n  darkkhaki: \"bdb76b\",\n  darkmagenta: \"8b008b\",\n  darkolivegreen: \"556b2f\",\n  darkorange: \"ff8c00\",\n  darkorchid: \"9932cc\",\n  darkred: \"8b0000\",\n  darksalmon: \"e9967a\",\n  darkseagreen: \"8fbc8f\",\n  darkslateblue: \"483d8b\",\n  darkslategray: \"2f4f4f\",\n  darkslategrey: \"2f4f4f\",\n  darkturquoise: \"00ced1\",\n  darkviolet: \"9400d3\",\n  deeppink: \"ff1493\",\n  deepskyblue: \"00bfff\",\n  dimgray: \"696969\",\n  dimgrey: \"696969\",\n  dodgerblue: \"1e90ff\",\n  firebrick: \"b22222\",\n  floralwhite: \"fffaf0\",\n  forestgreen: \"228b22\",\n  fuchsia: \"f0f\",\n  gainsboro: \"dcdcdc\",\n  ghostwhite: \"f8f8ff\",\n  gold: \"ffd700\",\n  goldenrod: \"daa520\",\n  gray: \"808080\",\n  green: \"008000\",\n  greenyellow: \"adff2f\",\n  grey: \"808080\",\n  honeydew: \"f0fff0\",\n  hotpink: \"ff69b4\",\n  indianred: \"cd5c5c\",\n  indigo: \"4b0082\",\n  ivory: \"fffff0\",\n  khaki: \"f0e68c\",\n  lavender: \"e6e6fa\",\n  lavenderblush: \"fff0f5\",\n  lawngreen: \"7cfc00\",\n  lemonchiffon: \"fffacd\",\n  lightblue: \"add8e6\",\n  lightcoral: \"f08080\",\n  lightcyan: \"e0ffff\",\n  lightgoldenrodyellow: \"fafad2\",\n  lightgray: \"d3d3d3\",\n  lightgreen: \"90ee90\",\n  lightgrey: \"d3d3d3\",\n  lightpink: \"ffb6c1\",\n  lightsalmon: \"ffa07a\",\n  lightseagreen: \"20b2aa\",\n  lightskyblue: \"87cefa\",\n  lightslategray: \"789\",\n  lightslategrey: \"789\",\n  lightsteelblue: \"b0c4de\",\n  lightyellow: \"ffffe0\",\n  lime: \"0f0\",\n  limegreen: \"32cd32\",\n  linen: \"faf0e6\",\n  magenta: \"f0f\",\n  maroon: \"800000\",\n  mediumaquamarine: \"66cdaa\",\n  mediumblue: \"0000cd\",\n  mediumorchid: \"ba55d3\",\n  mediumpurple: \"9370db\",\n  mediumseagreen: \"3cb371\",\n  mediumslateblue: \"7b68ee\",\n  mediumspringgreen: \"00fa9a\",\n  mediumturquoise: \"48d1cc\",\n  mediumvioletred: \"c71585\",\n  midnightblue: \"191970\",\n  mintcream: \"f5fffa\",\n  mistyrose: \"ffe4e1\",\n  moccasin: \"ffe4b5\",\n  navajowhite: \"ffdead\",\n  navy: \"000080\",\n  oldlace: \"fdf5e6\",\n  olive: \"808000\",\n  olivedrab: \"6b8e23\",\n  orange: \"ffa500\",\n  orangered: \"ff4500\",\n  orchid: \"da70d6\",\n  palegoldenrod: \"eee8aa\",\n  palegreen: \"98fb98\",\n  paleturquoise: \"afeeee\",\n  palevioletred: \"db7093\",\n  papayawhip: \"ffefd5\",\n  peachpuff: \"ffdab9\",\n  peru: \"cd853f\",\n  pink: \"ffc0cb\",\n  plum: \"dda0dd\",\n  powderblue: \"b0e0e6\",\n  purple: \"800080\",\n  rebeccapurple: \"663399\",\n  red: \"f00\",\n  rosybrown: \"bc8f8f\",\n  royalblue: \"4169e1\",\n  saddlebrown: \"8b4513\",\n  salmon: \"fa8072\",\n  sandybrown: \"f4a460\",\n  seagreen: \"2e8b57\",\n  seashell: \"fff5ee\",\n  sienna: \"a0522d\",\n  silver: \"c0c0c0\",\n  skyblue: \"87ceeb\",\n  slateblue: \"6a5acd\",\n  slategray: \"708090\",\n  slategrey: \"708090\",\n  snow: \"fffafa\",\n  springgreen: \"00ff7f\",\n  steelblue: \"4682b4\",\n  tan: \"d2b48c\",\n  teal: \"008080\",\n  thistle: \"d8bfd8\",\n  tomato: \"ff6347\",\n  turquoise: \"40e0d0\",\n  violet: \"ee82ee\",\n  wheat: \"f5deb3\",\n  white: \"fff\",\n  whitesmoke: \"f5f5f5\",\n  yellow: \"ff0\",\n  yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n  var flipped = {};\n  for (var i in o) {\n    if (o.hasOwnProperty(i)) {\n      flipped[o[i]] = i;\n    }\n  }\n  return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n  a = parseFloat(a);\n  if (isNaN(a) || a < 0 || a > 1) {\n    a = 1;\n  }\n  return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n  if (isOnePointZero(n)) n = \"100%\";\n  var processPercent = isPercentage(n);\n  n = Math.min(max, Math.max(0, parseFloat(n)));\n\n  // Automatically convert percentage into number\n  if (processPercent) {\n    n = parseInt(n * max, 10) / 100;\n  }\n\n  // Handle floating point rounding errors\n  if (Math.abs(n - max) < 0.000001) {\n    return 1;\n  }\n\n  // Convert into [0, 1] range if it isn't already\n  return n % max / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n  return Math.min(1, Math.max(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n  return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nfunction isOnePointZero(n) {\n  return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n  return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n  return c.length == 1 ? \"0\" + c : \"\" + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n  if (n <= 1) {\n    n = n * 100 + \"%\";\n  }\n  return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n  return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n  return parseIntFromHex(h) / 255;\n}\nvar matchers = function () {\n  // <http://www.w3.org/TR/css3-values/#integers>\n  var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n  // <http://www.w3.org/TR/css3-values/#number-value>\n  var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n  // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.\n  var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n  // Actual matching.\n  // Parentheses and commas are optional, but not required.\n  // Whitespace can take the place of commas or opening paren\n  var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n  var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n  return {\n    CSS_UNIT: new RegExp(CSS_UNIT),\n    rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n    rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n    hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n    hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n    hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n    hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n    hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n    hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n    hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n    hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n  };\n}();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n  return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing.  Take in a number of formats, and output an object\n// based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n  color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n  var named = false;\n  if (names[color]) {\n    color = names[color];\n    named = true;\n  } else if (color == \"transparent\") {\n    return {\n      r: 0,\n      g: 0,\n      b: 0,\n      a: 0,\n      format: \"name\"\n    };\n  }\n\n  // Try to match string input using regular expressions.\n  // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n  // Just return an object and let the conversion functions handle that.\n  // This way the result will be the same whether the tinycolor is initialized with string or object.\n  var match;\n  if (match = matchers.rgb.exec(color)) {\n    return {\n      r: match[1],\n      g: match[2],\n      b: match[3]\n    };\n  }\n  if (match = matchers.rgba.exec(color)) {\n    return {\n      r: match[1],\n      g: match[2],\n      b: match[3],\n      a: match[4]\n    };\n  }\n  if (match = matchers.hsl.exec(color)) {\n    return {\n      h: match[1],\n      s: match[2],\n      l: match[3]\n    };\n  }\n  if (match = matchers.hsla.exec(color)) {\n    return {\n      h: match[1],\n      s: match[2],\n      l: match[3],\n      a: match[4]\n    };\n  }\n  if (match = matchers.hsv.exec(color)) {\n    return {\n      h: match[1],\n      s: match[2],\n      v: match[3]\n    };\n  }\n  if (match = matchers.hsva.exec(color)) {\n    return {\n      h: match[1],\n      s: match[2],\n      v: match[3],\n      a: match[4]\n    };\n  }\n  if (match = matchers.hex8.exec(color)) {\n    return {\n      r: parseIntFromHex(match[1]),\n      g: parseIntFromHex(match[2]),\n      b: parseIntFromHex(match[3]),\n      a: convertHexToDecimal(match[4]),\n      format: named ? \"name\" : \"hex8\"\n    };\n  }\n  if (match = matchers.hex6.exec(color)) {\n    return {\n      r: parseIntFromHex(match[1]),\n      g: parseIntFromHex(match[2]),\n      b: parseIntFromHex(match[3]),\n      format: named ? \"name\" : \"hex\"\n    };\n  }\n  if (match = matchers.hex4.exec(color)) {\n    return {\n      r: parseIntFromHex(match[1] + \"\" + match[1]),\n      g: parseIntFromHex(match[2] + \"\" + match[2]),\n      b: parseIntFromHex(match[3] + \"\" + match[3]),\n      a: convertHexToDecimal(match[4] + \"\" + match[4]),\n      format: named ? \"name\" : \"hex8\"\n    };\n  }\n  if (match = matchers.hex3.exec(color)) {\n    return {\n      r: parseIntFromHex(match[1] + \"\" + match[1]),\n      g: parseIntFromHex(match[2] + \"\" + match[2]),\n      b: parseIntFromHex(match[3] + \"\" + match[3]),\n      format: named ? \"name\" : \"hex\"\n    };\n  }\n  return false;\n}\nfunction validateWCAG2Parms(parms) {\n  // return valid WCAG2 parms for isReadable.\n  // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n  var level, size;\n  parms = parms || {\n    level: \"AA\",\n    size: \"small\"\n  };\n  level = (parms.level || \"AA\").toUpperCase();\n  size = (parms.size || \"small\").toLowerCase();\n  if (level !== \"AA\" && level !== \"AAA\") {\n    level = \"AA\";\n  }\n  if (size !== \"small\" && size !== \"large\") {\n    size = \"small\";\n  }\n  return {\n    level: level,\n    size: size\n  };\n}\n\nexport { tinycolor as default };\n","import tinyColor from \"tinycolor2\";\nexport function clone(image) {\n    const newBitmap = {\n        width: image.bitmap.width,\n        height: image.bitmap.height,\n        data: Buffer.from(image.bitmap.data),\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return new image.constructor(newBitmap);\n}\nexport function scan(image, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nxArg, yArg, wArg, hArg, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ncbArg) {\n    let x;\n    let y;\n    let w;\n    let h;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let cb;\n    if (typeof xArg === \"function\") {\n        cb = xArg;\n        x = 0;\n        y = 0;\n        w = image.bitmap.width;\n        h = image.bitmap.height;\n    }\n    else {\n        x = xArg;\n        if (typeof yArg !== \"number\")\n            throw new Error(\"y must be a number\");\n        y = yArg;\n        if (typeof wArg !== \"number\")\n            throw new Error(\"w must be a number\");\n        w = wArg;\n        if (typeof hArg !== \"number\")\n            throw new Error(\"h must be a number\");\n        h = hArg;\n        if (typeof cbArg !== \"function\")\n            throw new Error(\"cb must be a function\");\n        cb = cbArg;\n    }\n    // round input\n    x = Math.round(x);\n    y = Math.round(y);\n    w = Math.round(w);\n    h = Math.round(h);\n    const bound = cb.bind(image);\n    for (let _y = y; _y < y + h; _y++) {\n        for (let _x = x; _x < x + w; _x++) {\n            const idx = (image.bitmap.width * _y + _x) << 2;\n            // Bind the images so this.bitmap works\n            bound(_x, _y, idx);\n        }\n    }\n    return image;\n}\nexport function* scanIterator(image, x, y, w, h) {\n    // round input\n    x = Math.round(x);\n    y = Math.round(y);\n    w = Math.round(w);\n    h = Math.round(h);\n    for (let _y = y; _y < y + h; _y++) {\n        for (let _x = x; _x < x + w; _x++) {\n            const idx = (image.bitmap.width * _y + _x) << 2;\n            yield { x: _x, y: _y, idx, image };\n        }\n    }\n}\n/**\n * A helper method that converts RGBA values to a single integer value\n * @param i A single integer value representing an RGBA colour (e.g. 0xFF0000FF for red)\n * @returns An object with the properties r, g, b and a representing RGBA values\n * @example\n * ```ts\n * import { intToRGBA } from \"@jimp/utils\";\n *\n * intToRGBA(0xFF0000FF); // { r: 255, g: 0, b: 0, a:255 }\n * ```\n */\nexport function intToRGBA(i) {\n    if (typeof i !== \"number\") {\n        throw new Error(\"i must be a number\");\n    }\n    const rgba = {\n        r: 0,\n        g: 0,\n        b: 0,\n        a: 0,\n    };\n    rgba.r = Math.floor(i / Math.pow(256, 3));\n    rgba.g = Math.floor((i - rgba.r * Math.pow(256, 3)) / Math.pow(256, 2));\n    rgba.b = Math.floor((i - rgba.r * Math.pow(256, 3) - rgba.g * Math.pow(256, 2)) /\n        Math.pow(256, 1));\n    rgba.a = Math.floor((i -\n        rgba.r * Math.pow(256, 3) -\n        rgba.g * Math.pow(256, 2) -\n        rgba.b * Math.pow(256, 1)) /\n        Math.pow(256, 0));\n    return rgba;\n}\n/**\n * A static helper method that converts RGBA values to a single integer value\n * @param r the red value (0-255)\n * @param g the green value (0-255)\n * @param b the blue value (0-255)\n * @param a the alpha value (0-255)\n * @example\n * ```ts\n * import { rgbaToInt } from \"@jimp/utils\";\n *\n * rgbaToInt(255, 0, 0, 255); // 0xFF0000FF\n * ```\n */\nexport function rgbaToInt(r, g, b, a) {\n    if (typeof r !== \"number\" ||\n        typeof g !== \"number\" ||\n        typeof b !== \"number\" ||\n        typeof a !== \"number\") {\n        throw new Error(\"r, g, b and a must be numbers\");\n    }\n    if (r < 0 || r > 255) {\n        throw new Error(\"r must be between 0 and 255\");\n    }\n    if (g < 0 || g > 255) {\n        throw new Error(\"g must be between 0 and 255\");\n    }\n    if (b < 0 || b > 255) {\n        throw new Error(\"b must be between 0 and 255\");\n    }\n    if (a < 0 || a > 255) {\n        throw new Error(\"a must be between 0 and 255\");\n    }\n    let i = r & 0xff;\n    i <<= 8;\n    i |= g & 0xff;\n    i <<= 8;\n    i |= b & 0xff;\n    i <<= 8;\n    i |= a & 0xff;\n    // Ensure sign is correct\n    i >>>= 0;\n    return i;\n}\n/**\n * Compute color difference\n * 0 means no difference, 1 means maximum difference.\n * Both parameters must be an color object `{ r:val, g:val, b:val, a:val }`\n * Where `a` is optional and `val` is an integer between 0 and 255.\n * @param rgba1 first color to compare.\n * @param rgba2 second color to compare.\n * @returns float between 0 and 1.\n * @example\n * ```ts\n * import { colorDiff } from \"@jimp/utils\";\n *\n * colorDiff(\n *  { r: 255, g: 0, b: 0, a: 0 },\n *  { r: 0, g: 255, b: 0, a: 0 },\n * ); // 0.5\n *\n * colorDiff(\n *  { r: 0, g: 0, b: 0, },\n *  { r: 255, g: 255, b: 255, }\n * ); // 0.7\n * ```\n */\nexport function colorDiff(rgba1, rgba2) {\n    const sq = (n) => Math.pow(n, 2);\n    const { max } = Math;\n    const maxVal = 255 * 255 * 3;\n    const rgba1A = \"a\" in rgba1 ? rgba1.a : 255;\n    const rgba2A = \"a\" in rgba2 ? rgba2.a : 255;\n    return ((max(sq(rgba1.r - rgba2.r), sq(rgba1.r - rgba2.r - rgba1A + rgba2A)) +\n        max(sq(rgba1.g - rgba2.g), sq(rgba1.g - rgba2.g - rgba1A + rgba2A)) +\n        max(sq(rgba1.b - rgba2.b), sq(rgba1.b - rgba2.b - rgba1A + rgba2A))) /\n        maxVal);\n}\n/**\n * Limits a number to between 0 or 255\n * @example\n * ```ts\n * import { limit255 } from \"@jimp/utils\";\n *\n * limit255(256); // 255\n * limit255(-1); // 0\n * ```\n */\nexport function limit255(n) {\n    n = Math.max(n, 0);\n    n = Math.min(n, 255);\n    return n;\n}\n/**\n * Converts a css color (Hex, 8-digit (RGBA) Hex, RGB, RGBA, HSL, HSLA, HSV, HSVA, Named) to a hex number\n * @returns A hex number representing a color\n * @example\n * ```ts\n * import { cssColorToHex } from \"@jimp/utils\";\n *\n * cssColorToHex(\"rgba(255, 0, 0, 0.5)\"); // \"ff000080\"\n * ```\n */\nexport function cssColorToHex(cssColor) {\n    if (typeof cssColor === \"number\") {\n        return cssColor;\n    }\n    return parseInt(tinyColor(cssColor).toHex8(), 16);\n}\n//# sourceMappingURL=index.js.map","import * as BMP from \"bmp-ts\";\nimport { scan } from \"@jimp/utils\";\nexport { BmpCompression } from \"bmp-ts\";\nfunction encode(image, options = {}) {\n    scan({ bitmap: image }, 0, 0, image.width, image.height, function (_, __, index) {\n        const red = image.data[index + 0];\n        const green = image.data[index + 1];\n        const blue = image.data[index + 2];\n        const alpha = image.data[index + 3];\n        image.data[index + 0] = alpha;\n        image.data[index + 1] = blue;\n        image.data[index + 2] = green;\n        image.data[index + 3] = red;\n    });\n    return BMP.encode({ ...image, ...options }).data;\n}\nfunction decode(data, options) {\n    const result = BMP.decode(data, options);\n    scan({ bitmap: result }, 0, 0, result.width, result.height, function (_, __, index) {\n        // const alpha = result.data[index + 0]!;\n        const blue = result.data[index + 1];\n        const green = result.data[index + 2];\n        const red = result.data[index + 3];\n        result.data[index + 0] = red;\n        result.data[index + 1] = green;\n        result.data[index + 2] = blue;\n        result.data[index + 3] = 0xff;\n    });\n    return result;\n}\nexport function msBmp() {\n    return {\n        mime: \"image/x-ms-bmp\",\n        encode,\n        decode,\n    };\n}\nexport default function bmp() {\n    return {\n        mime: \"image/bmp\",\n        encode,\n        decode,\n    };\n}\n//# sourceMappingURL=index.js.map","// (c) Dean McNamee <dean@gmail.com>, 2013.\n//\n// https://github.com/deanm/omggif\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n//\n// omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\n// including animation and compression.  It does not rely on any specific\n// underlying system, so should run in the browser, Node, or Plask.\n\n\"use strict\";\n\nfunction GifWriter(buf, width, height, gopts) {\n  var p = 0;\n\n  var gopts = gopts === undefined ? { } : gopts;\n  var loop_count = gopts.loop === undefined ? null : gopts.loop;\n  var global_palette = gopts.palette === undefined ? null : gopts.palette;\n\n  if (width <= 0 || height <= 0 || width > 65535 || height > 65535)\n    throw new Error(\"Width/Height invalid.\");\n\n  function check_palette_and_num_colors(palette) {\n    var num_colors = palette.length;\n    if (num_colors < 2 || num_colors > 256 ||  num_colors & (num_colors-1)) {\n      throw new Error(\n          \"Invalid code/color length, must be power of 2 and 2 .. 256.\");\n    }\n    return num_colors;\n  }\n\n  // - Header.\n  buf[p++] = 0x47; buf[p++] = 0x49; buf[p++] = 0x46;  // GIF\n  buf[p++] = 0x38; buf[p++] = 0x39; buf[p++] = 0x61;  // 89a\n\n  // Handling of Global Color Table (palette) and background index.\n  var gp_num_colors_pow2 = 0;\n  var background = 0;\n  if (global_palette !== null) {\n    var gp_num_colors = check_palette_and_num_colors(global_palette);\n    while (gp_num_colors >>= 1) ++gp_num_colors_pow2;\n    gp_num_colors = 1 << gp_num_colors_pow2;\n    --gp_num_colors_pow2;\n    if (gopts.background !== undefined) {\n      background = gopts.background;\n      if (background >= gp_num_colors)\n        throw new Error(\"Background index out of range.\");\n      // The GIF spec states that a background index of 0 should be ignored, so\n      // this is probably a mistake and you really want to set it to another\n      // slot in the palette.  But actually in the end most browsers, etc end\n      // up ignoring this almost completely (including for dispose background).\n      if (background === 0)\n        throw new Error(\"Background index explicitly passed as 0.\");\n    }\n  }\n\n  // - Logical Screen Descriptor.\n  // NOTE(deanm): w/h apparently ignored by implementations, but set anyway.\n  buf[p++] = width & 0xff; buf[p++] = width >> 8 & 0xff;\n  buf[p++] = height & 0xff; buf[p++] = height >> 8 & 0xff;\n  // NOTE: Indicates 0-bpp original color resolution (unused?).\n  buf[p++] = (global_palette !== null ? 0x80 : 0) |  // Global Color Table Flag.\n             gp_num_colors_pow2;  // NOTE: No sort flag (unused?).\n  buf[p++] = background;  // Background Color Index.\n  buf[p++] = 0;  // Pixel aspect ratio (unused?).\n\n  // - Global Color Table\n  if (global_palette !== null) {\n    for (var i = 0, il = global_palette.length; i < il; ++i) {\n      var rgb = global_palette[i];\n      buf[p++] = rgb >> 16 & 0xff;\n      buf[p++] = rgb >> 8 & 0xff;\n      buf[p++] = rgb & 0xff;\n    }\n  }\n\n  if (loop_count !== null) {  // Netscape block for looping.\n    if (loop_count < 0 || loop_count > 65535)\n      throw new Error(\"Loop count invalid.\")\n    // Extension code, label, and length.\n    buf[p++] = 0x21; buf[p++] = 0xff; buf[p++] = 0x0b;\n    // NETSCAPE2.0\n    buf[p++] = 0x4e; buf[p++] = 0x45; buf[p++] = 0x54; buf[p++] = 0x53;\n    buf[p++] = 0x43; buf[p++] = 0x41; buf[p++] = 0x50; buf[p++] = 0x45;\n    buf[p++] = 0x32; buf[p++] = 0x2e; buf[p++] = 0x30;\n    // Sub-block\n    buf[p++] = 0x03; buf[p++] = 0x01;\n    buf[p++] = loop_count & 0xff; buf[p++] = loop_count >> 8 & 0xff;\n    buf[p++] = 0x00;  // Terminator.\n  }\n\n\n  var ended = false;\n\n  this.addFrame = function(x, y, w, h, indexed_pixels, opts) {\n    if (ended === true) { --p; ended = false; }  // Un-end.\n\n    opts = opts === undefined ? { } : opts;\n\n    // TODO(deanm): Bounds check x, y.  Do they need to be within the virtual\n    // canvas width/height, I imagine?\n    if (x < 0 || y < 0 || x > 65535 || y > 65535)\n      throw new Error(\"x/y invalid.\")\n\n    if (w <= 0 || h <= 0 || w > 65535 || h > 65535)\n      throw new Error(\"Width/Height invalid.\")\n\n    if (indexed_pixels.length < w * h)\n      throw new Error(\"Not enough pixels for the frame size.\");\n\n    var using_local_palette = true;\n    var palette = opts.palette;\n    if (palette === undefined || palette === null) {\n      using_local_palette = false;\n      palette = global_palette;\n    }\n\n    if (palette === undefined || palette === null)\n      throw new Error(\"Must supply either a local or global palette.\");\n\n    var num_colors = check_palette_and_num_colors(palette);\n\n    // Compute the min_code_size (power of 2), destroying num_colors.\n    var min_code_size = 0;\n    while (num_colors >>= 1) ++min_code_size;\n    num_colors = 1 << min_code_size;  // Now we can easily get it back.\n\n    var delay = opts.delay === undefined ? 0 : opts.delay;\n\n    // From the spec:\n    //     0 -   No disposal specified. The decoder is\n    //           not required to take any action.\n    //     1 -   Do not dispose. The graphic is to be left\n    //           in place.\n    //     2 -   Restore to background color. The area used by the\n    //           graphic must be restored to the background color.\n    //     3 -   Restore to previous. The decoder is required to\n    //           restore the area overwritten by the graphic with\n    //           what was there prior to rendering the graphic.\n    //  4-7 -    To be defined.\n    // NOTE(deanm): Dispose background doesn't really work, apparently most\n    // browsers ignore the background palette index and clear to transparency.\n    var disposal = opts.disposal === undefined ? 0 : opts.disposal;\n    if (disposal < 0 || disposal > 3)  // 4-7 is reserved.\n      throw new Error(\"Disposal out of range.\");\n\n    var use_transparency = false;\n    var transparent_index = 0;\n    if (opts.transparent !== undefined && opts.transparent !== null) {\n      use_transparency = true;\n      transparent_index = opts.transparent;\n      if (transparent_index < 0 || transparent_index >= num_colors)\n        throw new Error(\"Transparent color index.\");\n    }\n\n    if (disposal !== 0 || use_transparency || delay !== 0) {\n      // - Graphics Control Extension\n      buf[p++] = 0x21; buf[p++] = 0xf9;  // Extension / Label.\n      buf[p++] = 4;  // Byte size.\n\n      buf[p++] = disposal << 2 | (use_transparency === true ? 1 : 0);\n      buf[p++] = delay & 0xff; buf[p++] = delay >> 8 & 0xff;\n      buf[p++] = transparent_index;  // Transparent color index.\n      buf[p++] = 0;  // Block Terminator.\n    }\n\n    // - Image Descriptor\n    buf[p++] = 0x2c;  // Image Seperator.\n    buf[p++] = x & 0xff; buf[p++] = x >> 8 & 0xff;  // Left.\n    buf[p++] = y & 0xff; buf[p++] = y >> 8 & 0xff;  // Top.\n    buf[p++] = w & 0xff; buf[p++] = w >> 8 & 0xff;\n    buf[p++] = h & 0xff; buf[p++] = h >> 8 & 0xff;\n    // NOTE: No sort flag (unused?).\n    // TODO(deanm): Support interlace.\n    buf[p++] = using_local_palette === true ? (0x80 | (min_code_size-1)) : 0;\n\n    // - Local Color Table\n    if (using_local_palette === true) {\n      for (var i = 0, il = palette.length; i < il; ++i) {\n        var rgb = palette[i];\n        buf[p++] = rgb >> 16 & 0xff;\n        buf[p++] = rgb >> 8 & 0xff;\n        buf[p++] = rgb & 0xff;\n      }\n    }\n\n    p = GifWriterOutputLZWCodeStream(\n            buf, p, min_code_size < 2 ? 2 : min_code_size, indexed_pixels);\n\n    return p;\n  };\n\n  this.end = function() {\n    if (ended === false) {\n      buf[p++] = 0x3b;  // Trailer.\n      ended = true;\n    }\n    return p;\n  };\n\n  this.getOutputBuffer = function() { return buf; };\n  this.setOutputBuffer = function(v) { buf = v; };\n  this.getOutputBufferPosition = function() { return p; };\n  this.setOutputBufferPosition = function(v) { p = v; };\n}\n\n// Main compression routine, palette indexes -> LZW code stream.\n// |index_stream| must have at least one entry.\nfunction GifWriterOutputLZWCodeStream(buf, p, min_code_size, index_stream) {\n  buf[p++] = min_code_size;\n  var cur_subblock = p++;  // Pointing at the length field.\n\n  var clear_code = 1 << min_code_size;\n  var code_mask = clear_code - 1;\n  var eoi_code = clear_code + 1;\n  var next_code = eoi_code + 1;\n\n  var cur_code_size = min_code_size + 1;  // Number of bits per code.\n  var cur_shift = 0;\n  // We have at most 12-bit codes, so we should have to hold a max of 19\n  // bits here (and then we would write out).\n  var cur = 0;\n\n  function emit_bytes_to_buffer(bit_block_size) {\n    while (cur_shift >= bit_block_size) {\n      buf[p++] = cur & 0xff;\n      cur >>= 8; cur_shift -= 8;\n      if (p === cur_subblock + 256) {  // Finished a subblock.\n        buf[cur_subblock] = 255;\n        cur_subblock = p++;\n      }\n    }\n  }\n\n  function emit_code(c) {\n    cur |= c << cur_shift;\n    cur_shift += cur_code_size;\n    emit_bytes_to_buffer(8);\n  }\n\n  // I am not an expert on the topic, and I don't want to write a thesis.\n  // However, it is good to outline here the basic algorithm and the few data\n  // structures and optimizations here that make this implementation fast.\n  // The basic idea behind LZW is to build a table of previously seen runs\n  // addressed by a short id (herein called output code).  All data is\n  // referenced by a code, which represents one or more values from the\n  // original input stream.  All input bytes can be referenced as the same\n  // value as an output code.  So if you didn't want any compression, you\n  // could more or less just output the original bytes as codes (there are\n  // some details to this, but it is the idea).  In order to achieve\n  // compression, values greater then the input range (codes can be up to\n  // 12-bit while input only 8-bit) represent a sequence of previously seen\n  // inputs.  The decompressor is able to build the same mapping while\n  // decoding, so there is always a shared common knowledge between the\n  // encoding and decoder, which is also important for \"timing\" aspects like\n  // how to handle variable bit width code encoding.\n  //\n  // One obvious but very important consequence of the table system is there\n  // is always a unique id (at most 12-bits) to map the runs.  'A' might be\n  // 4, then 'AA' might be 10, 'AAA' 11, 'AAAA' 12, etc.  This relationship\n  // can be used for an effecient lookup strategy for the code mapping.  We\n  // need to know if a run has been seen before, and be able to map that run\n  // to the output code.  Since we start with known unique ids (input bytes),\n  // and then from those build more unique ids (table entries), we can\n  // continue this chain (almost like a linked list) to always have small\n  // integer values that represent the current byte chains in the encoder.\n  // This means instead of tracking the input bytes (AAAABCD) to know our\n  // current state, we can track the table entry for AAAABC (it is guaranteed\n  // to exist by the nature of the algorithm) and the next character D.\n  // Therefor the tuple of (table_entry, byte) is guaranteed to also be\n  // unique.  This allows us to create a simple lookup key for mapping input\n  // sequences to codes (table indices) without having to store or search\n  // any of the code sequences.  So if 'AAAA' has a table entry of 12, the\n  // tuple of ('AAAA', K) for any input byte K will be unique, and can be our\n  // key.  This leads to a integer value at most 20-bits, which can always\n  // fit in an SMI value and be used as a fast sparse array / object key.\n\n  // Output code for the current contents of the index buffer.\n  var ib_code = index_stream[0] & code_mask;  // Load first input index.\n  var code_table = { };  // Key'd on our 20-bit \"tuple\".\n\n  emit_code(clear_code);  // Spec says first code should be a clear code.\n\n  // First index already loaded, process the rest of the stream.\n  for (var i = 1, il = index_stream.length; i < il; ++i) {\n    var k = index_stream[i] & code_mask;\n    var cur_key = ib_code << 8 | k;  // (prev, k) unique tuple.\n    var cur_code = code_table[cur_key];  // buffer + k.\n\n    // Check if we have to create a new code table entry.\n    if (cur_code === undefined) {  // We don't have buffer + k.\n      // Emit index buffer (without k).\n      // This is an inline version of emit_code, because this is the core\n      // writing routine of the compressor (and V8 cannot inline emit_code\n      // because it is a closure here in a different context).  Additionally\n      // we can call emit_byte_to_buffer less often, because we can have\n      // 30-bits (from our 31-bit signed SMI), and we know our codes will only\n      // be 12-bits, so can safely have 18-bits there without overflow.\n      // emit_code(ib_code);\n      cur |= ib_code << cur_shift;\n      cur_shift += cur_code_size;\n      while (cur_shift >= 8) {\n        buf[p++] = cur & 0xff;\n        cur >>= 8; cur_shift -= 8;\n        if (p === cur_subblock + 256) {  // Finished a subblock.\n          buf[cur_subblock] = 255;\n          cur_subblock = p++;\n        }\n      }\n\n      if (next_code === 4096) {  // Table full, need a clear.\n        emit_code(clear_code);\n        next_code = eoi_code + 1;\n        cur_code_size = min_code_size + 1;\n        code_table = { };\n      } else {  // Table not full, insert a new entry.\n        // Increase our variable bit code sizes if necessary.  This is a bit\n        // tricky as it is based on \"timing\" between the encoding and\n        // decoder.  From the encoders perspective this should happen after\n        // we've already emitted the index buffer and are about to create the\n        // first table entry that would overflow our current code bit size.\n        if (next_code >= (1 << cur_code_size)) ++cur_code_size;\n        code_table[cur_key] = next_code++;  // Insert into code table.\n      }\n\n      ib_code = k;  // Index buffer to single input k.\n    } else {\n      ib_code = cur_code;  // Index buffer to sequence in code table.\n    }\n  }\n\n  emit_code(ib_code);  // There will still be something in the index buffer.\n  emit_code(eoi_code);  // End Of Information.\n\n  // Flush / finalize the sub-blocks stream to the buffer.\n  emit_bytes_to_buffer(1);\n\n  // Finish the sub-blocks, writing out any unfinished lengths and\n  // terminating with a sub-block of length 0.  If we have already started\n  // but not yet used a sub-block it can just become the terminator.\n  if (cur_subblock + 1 === p) {  // Started but unused.\n    buf[cur_subblock] = 0;\n  } else {  // Started and used, write length and additional terminator block.\n    buf[cur_subblock] = p - cur_subblock - 1;\n    buf[p++] = 0;\n  }\n  return p;\n}\n\nfunction GifReader(buf) {\n  var p = 0;\n\n  // - Header (GIF87a or GIF89a).\n  if (buf[p++] !== 0x47 ||            buf[p++] !== 0x49 || buf[p++] !== 0x46 ||\n      buf[p++] !== 0x38 || (buf[p++]+1 & 0xfd) !== 0x38 || buf[p++] !== 0x61) {\n    throw new Error(\"Invalid GIF 87a/89a header.\");\n  }\n\n  // - Logical Screen Descriptor.\n  var width = buf[p++] | buf[p++] << 8;\n  var height = buf[p++] | buf[p++] << 8;\n  var pf0 = buf[p++];  // <Packed Fields>.\n  var global_palette_flag = pf0 >> 7;\n  var num_global_colors_pow2 = pf0 & 0x7;\n  var num_global_colors = 1 << (num_global_colors_pow2 + 1);\n  var background = buf[p++];\n  buf[p++];  // Pixel aspect ratio (unused?).\n\n  var global_palette_offset = null;\n  var global_palette_size   = null;\n\n  if (global_palette_flag) {\n    global_palette_offset = p;\n    global_palette_size = num_global_colors;\n    p += num_global_colors * 3;  // Seek past palette.\n  }\n\n  var no_eof = true;\n\n  var frames = [ ];\n\n  var delay = 0;\n  var transparent_index = null;\n  var disposal = 0;  // 0 - No disposal specified.\n  var loop_count = null;\n\n  this.width = width;\n  this.height = height;\n\n  while (no_eof && p < buf.length) {\n    switch (buf[p++]) {\n      case 0x21:  // Graphics Control Extension Block\n        switch (buf[p++]) {\n          case 0xff:  // Application specific block\n            // Try if it's a Netscape block (with animation loop counter).\n            if (buf[p   ] !== 0x0b ||  // 21 FF already read, check block size.\n                // NETSCAPE2.0\n                buf[p+1 ] == 0x4e && buf[p+2 ] == 0x45 && buf[p+3 ] == 0x54 &&\n                buf[p+4 ] == 0x53 && buf[p+5 ] == 0x43 && buf[p+6 ] == 0x41 &&\n                buf[p+7 ] == 0x50 && buf[p+8 ] == 0x45 && buf[p+9 ] == 0x32 &&\n                buf[p+10] == 0x2e && buf[p+11] == 0x30 &&\n                // Sub-block\n                buf[p+12] == 0x03 && buf[p+13] == 0x01 && buf[p+16] == 0) {\n              p += 14;\n              loop_count = buf[p++] | buf[p++] << 8;\n              p++;  // Skip terminator.\n            } else {  // We don't know what it is, just try to get past it.\n              p += 12;\n              while (true) {  // Seek through subblocks.\n                var block_size = buf[p++];\n                // Bad block size (ex: undefined from an out of bounds read).\n                if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n                if (block_size === 0) break;  // 0 size is terminator\n                p += block_size;\n              }\n            }\n            break;\n\n          case 0xf9:  // Graphics Control Extension\n            if (buf[p++] !== 0x4 || buf[p+4] !== 0)\n              throw new Error(\"Invalid graphics extension block.\");\n            var pf1 = buf[p++];\n            delay = buf[p++] | buf[p++] << 8;\n            transparent_index = buf[p++];\n            if ((pf1 & 1) === 0) transparent_index = null;\n            disposal = pf1 >> 2 & 0x7;\n            p++;  // Skip terminator.\n            break;\n\n          case 0xfe:  // Comment Extension.\n            while (true) {  // Seek through subblocks.\n              var block_size = buf[p++];\n              // Bad block size (ex: undefined from an out of bounds read).\n              if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n              if (block_size === 0) break;  // 0 size is terminator\n              // console.log(buf.slice(p, p+block_size).toString('ascii'));\n              p += block_size;\n            }\n            break;\n\n          default:\n            throw new Error(\n                \"Unknown graphic control label: 0x\" + buf[p-1].toString(16));\n        }\n        break;\n\n      case 0x2c:  // Image Descriptor.\n        var x = buf[p++] | buf[p++] << 8;\n        var y = buf[p++] | buf[p++] << 8;\n        var w = buf[p++] | buf[p++] << 8;\n        var h = buf[p++] | buf[p++] << 8;\n        var pf2 = buf[p++];\n        var local_palette_flag = pf2 >> 7;\n        var interlace_flag = pf2 >> 6 & 1;\n        var num_local_colors_pow2 = pf2 & 0x7;\n        var num_local_colors = 1 << (num_local_colors_pow2 + 1);\n        var palette_offset = global_palette_offset;\n        var palette_size = global_palette_size;\n        var has_local_palette = false;\n        if (local_palette_flag) {\n          var has_local_palette = true;\n          palette_offset = p;  // Override with local palette.\n          palette_size = num_local_colors;\n          p += num_local_colors * 3;  // Seek past palette.\n        }\n\n        var data_offset = p;\n\n        p++;  // codesize\n        while (true) {\n          var block_size = buf[p++];\n          // Bad block size (ex: undefined from an out of bounds read).\n          if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n          if (block_size === 0) break;  // 0 size is terminator\n          p += block_size;\n        }\n\n        frames.push({x: x, y: y, width: w, height: h,\n                     has_local_palette: has_local_palette,\n                     palette_offset: palette_offset,\n                     palette_size: palette_size,\n                     data_offset: data_offset,\n                     data_length: p - data_offset,\n                     transparent_index: transparent_index,\n                     interlaced: !!interlace_flag,\n                     delay: delay,\n                     disposal: disposal});\n        break;\n\n      case 0x3b:  // Trailer Marker (end of file).\n        no_eof = false;\n        break;\n\n      default:\n        throw new Error(\"Unknown gif block: 0x\" + buf[p-1].toString(16));\n        break;\n    }\n  }\n\n  this.numFrames = function() {\n    return frames.length;\n  };\n\n  this.loopCount = function() {\n    return loop_count;\n  };\n\n  this.frameInfo = function(frame_num) {\n    if (frame_num < 0 || frame_num >= frames.length)\n      throw new Error(\"Frame index out of range.\");\n    return frames[frame_num];\n  }\n\n  this.decodeAndBlitFrameBGRA = function(frame_num, pixels) {\n    var frame = this.frameInfo(frame_num);\n    var num_pixels = frame.width * frame.height;\n    var index_stream = new Uint8Array(num_pixels);  // At most 8-bit indices.\n    GifReaderLZWOutputIndexStream(\n        buf, frame.data_offset, index_stream, num_pixels);\n    var palette_offset = frame.palette_offset;\n\n    // NOTE(deanm): It seems to be much faster to compare index to 256 than\n    // to === null.  Not sure why, but CompareStub_EQ_STRICT shows up high in\n    // the profile, not sure if it's related to using a Uint8Array.\n    var trans = frame.transparent_index;\n    if (trans === null) trans = 256;\n\n    // We are possibly just blitting to a portion of the entire frame.\n    // That is a subrect within the framerect, so the additional pixels\n    // must be skipped over after we finished a scanline.\n    var framewidth  = frame.width;\n    var framestride = width - framewidth;\n    var xleft       = framewidth;  // Number of subrect pixels left in scanline.\n\n    // Output indicies of the top left and bottom right corners of the subrect.\n    var opbeg = ((frame.y * width) + frame.x) * 4;\n    var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n    var op    = opbeg;\n\n    var scanstride = framestride * 4;\n\n    // Use scanstride to skip past the rows when interlacing.  This is skipping\n    // 7 rows for the first two passes, then 3 then 1.\n    if (frame.interlaced === true) {\n      scanstride += width * 4 * 7;  // Pass 1.\n    }\n\n    var interlaceskip = 8;  // Tracking the row interval in the current pass.\n\n    for (var i = 0, il = index_stream.length; i < il; ++i) {\n      var index = index_stream[i];\n\n      if (xleft === 0) {  // Beginning of new scan line\n        op += scanstride;\n        xleft = framewidth;\n        if (op >= opend) { // Catch the wrap to switch passes when interlacing.\n          scanstride = framestride * 4 + width * 4 * (interlaceskip-1);\n          // interlaceskip / 2 * 4 is interlaceskip << 1.\n          op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n          interlaceskip >>= 1;\n        }\n      }\n\n      if (index === trans) {\n        op += 4;\n      } else {\n        var r = buf[palette_offset + index * 3];\n        var g = buf[palette_offset + index * 3 + 1];\n        var b = buf[palette_offset + index * 3 + 2];\n        pixels[op++] = b;\n        pixels[op++] = g;\n        pixels[op++] = r;\n        pixels[op++] = 255;\n      }\n      --xleft;\n    }\n  };\n\n  // I will go to copy and paste hell one day...\n  this.decodeAndBlitFrameRGBA = function(frame_num, pixels) {\n    var frame = this.frameInfo(frame_num);\n    var num_pixels = frame.width * frame.height;\n    var index_stream = new Uint8Array(num_pixels);  // At most 8-bit indices.\n    GifReaderLZWOutputIndexStream(\n        buf, frame.data_offset, index_stream, num_pixels);\n    var palette_offset = frame.palette_offset;\n\n    // NOTE(deanm): It seems to be much faster to compare index to 256 than\n    // to === null.  Not sure why, but CompareStub_EQ_STRICT shows up high in\n    // the profile, not sure if it's related to using a Uint8Array.\n    var trans = frame.transparent_index;\n    if (trans === null) trans = 256;\n\n    // We are possibly just blitting to a portion of the entire frame.\n    // That is a subrect within the framerect, so the additional pixels\n    // must be skipped over after we finished a scanline.\n    var framewidth  = frame.width;\n    var framestride = width - framewidth;\n    var xleft       = framewidth;  // Number of subrect pixels left in scanline.\n\n    // Output indicies of the top left and bottom right corners of the subrect.\n    var opbeg = ((frame.y * width) + frame.x) * 4;\n    var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n    var op    = opbeg;\n\n    var scanstride = framestride * 4;\n\n    // Use scanstride to skip past the rows when interlacing.  This is skipping\n    // 7 rows for the first two passes, then 3 then 1.\n    if (frame.interlaced === true) {\n      scanstride += width * 4 * 7;  // Pass 1.\n    }\n\n    var interlaceskip = 8;  // Tracking the row interval in the current pass.\n\n    for (var i = 0, il = index_stream.length; i < il; ++i) {\n      var index = index_stream[i];\n\n      if (xleft === 0) {  // Beginning of new scan line\n        op += scanstride;\n        xleft = framewidth;\n        if (op >= opend) { // Catch the wrap to switch passes when interlacing.\n          scanstride = framestride * 4 + width * 4 * (interlaceskip-1);\n          // interlaceskip / 2 * 4 is interlaceskip << 1.\n          op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n          interlaceskip >>= 1;\n        }\n      }\n\n      if (index === trans) {\n        op += 4;\n      } else {\n        var r = buf[palette_offset + index * 3];\n        var g = buf[palette_offset + index * 3 + 1];\n        var b = buf[palette_offset + index * 3 + 2];\n        pixels[op++] = r;\n        pixels[op++] = g;\n        pixels[op++] = b;\n        pixels[op++] = 255;\n      }\n      --xleft;\n    }\n  };\n}\n\nfunction GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) {\n  var min_code_size = code_stream[p++];\n\n  var clear_code = 1 << min_code_size;\n  var eoi_code = clear_code + 1;\n  var next_code = eoi_code + 1;\n\n  var cur_code_size = min_code_size + 1;  // Number of bits per code.\n  // NOTE: This shares the same name as the encoder, but has a different\n  // meaning here.  Here this masks each code coming from the code stream.\n  var code_mask = (1 << cur_code_size) - 1;\n  var cur_shift = 0;\n  var cur = 0;\n\n  var op = 0;  // Output pointer.\n\n  var subblock_size = code_stream[p++];\n\n  // TODO(deanm): Would using a TypedArray be any faster?  At least it would\n  // solve the fast mode / backing store uncertainty.\n  // var code_table = Array(4096);\n  var code_table = new Int32Array(4096);  // Can be signed, we only use 20 bits.\n\n  var prev_code = null;  // Track code-1.\n\n  while (true) {\n    // Read up to two bytes, making sure we always 12-bits for max sized code.\n    while (cur_shift < 16) {\n      if (subblock_size === 0) break;  // No more data to be read.\n\n      cur |= code_stream[p++] << cur_shift;\n      cur_shift += 8;\n\n      if (subblock_size === 1) {  // Never let it get to 0 to hold logic above.\n        subblock_size = code_stream[p++];  // Next subblock.\n      } else {\n        --subblock_size;\n      }\n    }\n\n    // TODO(deanm): We should never really get here, we should have received\n    // and EOI.\n    if (cur_shift < cur_code_size)\n      break;\n\n    var code = cur & code_mask;\n    cur >>= cur_code_size;\n    cur_shift -= cur_code_size;\n\n    // TODO(deanm): Maybe should check that the first code was a clear code,\n    // at least this is what you're supposed to do.  But actually our encoder\n    // now doesn't emit a clear code first anyway.\n    if (code === clear_code) {\n      // We don't actually have to clear the table.  This could be a good idea\n      // for greater error checking, but we don't really do any anyway.  We\n      // will just track it with next_code and overwrite old entries.\n\n      next_code = eoi_code + 1;\n      cur_code_size = min_code_size + 1;\n      code_mask = (1 << cur_code_size) - 1;\n\n      // Don't update prev_code ?\n      prev_code = null;\n      continue;\n    } else if (code === eoi_code) {\n      break;\n    }\n\n    // We have a similar situation as the decoder, where we want to store\n    // variable length entries (code table entries), but we want to do in a\n    // faster manner than an array of arrays.  The code below stores sort of a\n    // linked list within the code table, and then \"chases\" through it to\n    // construct the dictionary entries.  When a new entry is created, just the\n    // last byte is stored, and the rest (prefix) of the entry is only\n    // referenced by its table entry.  Then the code chases through the\n    // prefixes until it reaches a single byte code.  We have to chase twice,\n    // first to compute the length, and then to actually copy the data to the\n    // output (backwards, since we know the length).  The alternative would be\n    // storing something in an intermediate stack, but that doesn't make any\n    // more sense.  I implemented an approach where it also stored the length\n    // in the code table, although it's a bit tricky because you run out of\n    // bits (12 + 12 + 8), but I didn't measure much improvements (the table\n    // entries are generally not the long).  Even when I created benchmarks for\n    // very long table entries the complexity did not seem worth it.\n    // The code table stores the prefix entry in 12 bits and then the suffix\n    // byte in 8 bits, so each entry is 20 bits.\n\n    var chase_code = code < next_code ? code : prev_code;\n\n    // Chase what we will output, either {CODE} or {CODE-1}.\n    var chase_length = 0;\n    var chase = chase_code;\n    while (chase > clear_code) {\n      chase = code_table[chase] >> 8;\n      ++chase_length;\n    }\n\n    var k = chase;\n\n    var op_end = op + chase_length + (chase_code !== code ? 1 : 0);\n    if (op_end > output_length) {\n      console.log(\"Warning, gif stream longer than expected.\");\n      return;\n    }\n\n    // Already have the first byte from the chase, might as well write it fast.\n    output[op++] = k;\n\n    op += chase_length;\n    var b = op;  // Track pointer, writing backwards.\n\n    if (chase_code !== code)  // The case of emitting {CODE-1} + k.\n      output[op++] = k;\n\n    chase = chase_code;\n    while (chase_length--) {\n      chase = code_table[chase];\n      output[--b] = chase & 0xff;  // Write backwards.\n      chase >>= 8;  // Pull down to the prefix code.\n    }\n\n    if (prev_code !== null && next_code < 4096) {\n      code_table[next_code++] = prev_code << 8 | k;\n      // TODO(deanm): Figure out this clearing vs code growth logic better.  I\n      // have an feeling that it should just happen somewhere else, for now it\n      // is awkward between when we grow past the max and then hit a clear code.\n      // For now just check if we hit the max 12-bits (then a clear code should\n      // follow, also of course encoded in 12-bits).\n      if (next_code >= code_mask+1 && cur_code_size < 12) {\n        ++cur_code_size;\n        code_mask = code_mask << 1 | 1;\n      }\n    }\n\n    prev_code = code;\n  }\n\n  if (op !== output_length) {\n    console.log(\"Warning, gif stream shorter than expected.\");\n  }\n\n  return output;\n}\n\n// CommonJS.\ntry { exports.GifWriter = GifWriter; exports.GifReader = GifReader } catch(e) {}\n","'use strict';\n\n/** @class BitmapImage */\n\nclass BitmapImage {\n\n    /**\n     * BitmapImage is a class that hold an RGBA (red, green, blue, alpha) representation of an image. It's shape is borrowed from the Jimp package to make it easy to transfer GIF image frames into Jimp and Jimp images into GIF image frames. Each instance has a `bitmap` property having the following properties:\n     * \n     * Property | Description\n     * --- | ---\n     * bitmap.width | width of image in pixels\n     * bitmap.height | height of image in pixels\n     * bitmap.data | a Buffer whose every four bytes represents a pixel, each sequential byte of a pixel corresponding to the red, green, blue, and alpha values of the pixel\n     *\n     * Its constructor supports the following signatures:\n     *\n     * * new BitmapImage(bitmap: { width: number, height: number, data: Buffer })\n     * * new BitmapImage(bitmapImage: BitmapImage)\n     * * new BitmapImage(width: number, height: number, buffer: Buffer)\n     * * new BitmapImage(width: number, height: number, backgroundRGBA?: number)\n     * \n     * When a `BitmapImage` is provided, the constructed `BitmapImage` is a deep clone of the provided one, so that each image's pixel data can subsequently be modified without affecting each other.\n     *\n     * `backgroundRGBA` is an optional parameter representing a pixel as a single number. In hex, the number is as follows: 0xRRGGBBAA, where RR is the red byte, GG the green byte, BB, the blue byte, and AA the alpha value. An AA of 0x00 is considered transparent, and all non-zero AA values are treated as opaque.\n     */\n\n    constructor(...args) {\n        // don't confirm the number of args, because a subclass may have\n        // additional args and pass them all to the superclass\n        if (args.length === 0) {\n            throw new Error(\"constructor requires parameters\");\n        }\n        const firstArg = args[0];\n        if (firstArg !== null && typeof firstArg === 'object') {\n            if (firstArg instanceof BitmapImage) {\n                // copy a provided BitmapImage\n                const sourceBitmap = firstArg.bitmap;\n                this.bitmap = {\n                    width: sourceBitmap.width,\n                    height: sourceBitmap.height,\n                    data: new Buffer(sourceBitmap.width * sourceBitmap.height * 4)\n                };\n                sourceBitmap.data.copy(this.bitmap.data);\n            }\n            else if (firstArg.width && firstArg.height && firstArg.data) {\n                // share a provided bitmap\n                this.bitmap = firstArg;\n            }\n            else {\n                throw new Error(\"unrecognized constructor parameters\");\n            }\n        }\n        else if (typeof firstArg === 'number' && typeof args[1] === 'number')\n        {\n            const width = firstArg;\n            const height = args[1];\n            const thirdArg = args[2];\n            this.bitmap = { width, height };\n\n            if (Buffer.isBuffer(thirdArg)) {\n                this.bitmap.data = thirdArg;\n            }\n            else {\n                this.bitmap.data = new Buffer(width * height * 4);\n                if (typeof thirdArg === 'number') {\n                    this.fillRGBA(thirdArg);\n                }\n            }\n        }\n        else {\n            throw new Error(\"unrecognized constructor parameters\");\n        }\n    }\n\n    /**\n     * Copy a square portion of this image into another image. \n     * \n     * @param {BitmapImage} toImage Image into which to copy the square\n     * @param {number} toX x-coord in toImage of upper-left corner of receiving square\n     * @param {number} toY y-coord in toImage of upper-left corner of receiving square\n     * @param {number} fromX x-coord in this image of upper-left corner of source square\n     * @param {number} fromY y-coord in this image of upper-left corner of source square\n     * @return {BitmapImage} The present image to allow for chaining.\n     */\n\n    blit(toImage, toX, toY, fromX, fromY, fromWidth, fromHeight) {\n        if (fromX + fromWidth > this.bitmap.width) {\n            throw new Error(\"copy exceeds width of source bitmap\");\n        }\n        if (toX + fromWidth > toImage.bitmap.width) {\n            throw new Error(\"copy exceeds width of target bitmap\");\n        }\n        if (fromY + fromHeight > this.bitmap.height) {\n            throw new Error(\"copy exceeds height of source bitmap\");\n        }\n        if (toY + fromHeight > toImage.bitmap.height) {\n            throw new Erro(\"copy exceeds height of target bitmap\");\n        }\n        \n        const sourceBuf = this.bitmap.data;\n        const targetBuf = toImage.bitmap.data;\n        const sourceByteWidth = this.bitmap.width * 4;\n        const targetByteWidth = toImage.bitmap.width * 4;\n        const copyByteWidth = fromWidth * 4;\n        let si = fromY * sourceByteWidth + fromX * 4;\n        let ti = toY * targetByteWidth + toX * 4;\n\n        while (--fromHeight >= 0) {\n            sourceBuf.copy(targetBuf, ti, si, si + copyByteWidth);\n            si += sourceByteWidth;\n            ti += targetByteWidth;\n        }\n        return this;\n    }\n\n    /**\n     * Fills the image with a single color.\n     * \n     * @param {number} rgba Color with which to fill image, expressed as a singlenumber in the form 0xRRGGBBAA, where AA is 0x00 for transparent and any other value for opaque.\n     * @return {BitmapImage} The present image to allow for chaining.\n     */\n\n    fillRGBA(rgba) {\n        const buf = this.bitmap.data;\n        const bufByteWidth = this.bitmap.height * 4;\n        \n        let bi = 0;\n        while (bi < bufByteWidth) {\n            buf.writeUInt32BE(rgba, bi);\n            bi += 4;\n        }\n        while (bi < buf.length) {\n            buf.copy(buf, bi, 0, bufByteWidth);\n            bi += bufByteWidth;\n        }\n        return this;\n    }\n\n    /**\n     * Gets the RGBA number of the pixel at the given coordinate in the form 0xRRGGBBAA, where AA is the alpha value, with alpha 0x00 encoding to transparency in GIFs.\n     * \n     * @param {number} x x-coord of pixel\n     * @param {number} y y-coord of pixel\n     * @return {number} RGBA of pixel in 0xRRGGBBAA form\n     */\n\n    getRGBA(x, y) {\n        const bi = (y * this.bitmap.width + x) * 4;\n        return this.bitmap.data.readUInt32BE(bi);\n    }\n\n    /**\n     * Gets a set of all RGBA colors found within the image.\n     * \n     * @return {Set} Set of all RGBA colors that the image contains.\n     */\n\n    getRGBASet() {\n        const rgbaSet = new Set();\n        const buf = this.bitmap.data;\n        for (let bi = 0; bi < buf.length; bi += 4) {\n            rgbaSet.add(buf.readUInt32BE(bi, true));\n        }\n        return rgbaSet;\n    }\n\n    /**\n     * Converts the image to greyscale using inferred Adobe metrics.\n     * \n     * @return {BitmapImage} The present image to allow for chaining.\n     */\n\n    greyscale() {\n        const buf = this.bitmap.data;\n        this.scan(0, 0, this.bitmap.width, this.bitmap.height, (x, y, idx) => {\n            const grey = Math.round(\n                0.299 * buf[idx] +\n                0.587 * buf[idx + 1] +\n                0.114 * buf[idx + 2]\n            );\n            buf[idx] = grey;\n            buf[idx + 1] = grey;\n            buf[idx + 2] = grey;\n        });\n        return this;\n    }\n\n    /**\n     * Reframes the image as if placing a frame around the original image and replacing the original image with the newly framed image. When the new frame is strictly within the boundaries of the original image, this method crops the image. When any of the new boundaries exceed those of the original image, the `fillRGBA` must be provided to indicate the color with which to fill the extra space added to the image.\n     * \n     * @param {number} xOffset The x-coord offset of the upper-left pixel of the desired image relative to the present image.\n     * @param {number} yOffset The y-coord offset of the upper-left pixel of the desired image relative to the present image.\n     * @param {number} width The width of the new image after reframing\n     * @param {number} height The height of the new image after reframing\n     * @param {number} fillRGBA The color with which to fill space added to the image as a result of the reframing, in 0xRRGGBBAA format, where AA is 0x00 to indicate transparent and a non-zero value to indicate opaque. This parameter is only required when the reframing exceeds the original boundaries (i.e. does not simply perform a crop).\n     * @return {BitmapImage} The present image to allow for chaining.\n     */\n\n    reframe(xOffset, yOffset, width, height, fillRGBA) {\n        const cropX = (xOffset < 0 ? 0 : xOffset);\n        const cropY = (yOffset < 0 ? 0 : yOffset);\n        const cropWidth = (width + cropX > this.bitmap.width ?\n                this.bitmap.width - cropX : width);\n        const cropHeight = (height + cropY > this.bitmap.height ?\n                this.bitmap.height - cropY : height);\n        const newX = (xOffset < 0 ? -xOffset : 0);\n        const newY = (yOffset < 0 ? -yOffset : 0);\n\n        let image;\n        if (fillRGBA === undefined) {\n            if (cropX !== xOffset || cropY != yOffset ||\n                    cropWidth !== width || cropHeight !== height)\n            {\n                throw new GifError(`fillRGBA required for this reframing`);\n            }\n            image = new BitmapImage(width, height);\n        }\n        else {\n            image = new BitmapImage(width, height, fillRGBA);\n        }\n        this.blit(image, newX, newY, cropX, cropY, cropWidth, cropHeight);\n        this.bitmap = image.bitmap;\n        return this;\n    }\n\n    /**\n     * Scales the image size up by an integer factor. Each pixel of the original image becomes a square of the same color in the new image having a size of `factor` x `factor` pixels.\n     * \n     * @param {number} factor The factor by which to scale up the image. Must be an integer >= 1.\n     * @return {BitmapImage} The present image to allow for chaining.\n     */\n\n    scale(factor) {\n        if (factor === 1) {\n            return;\n        }\n        if (!Number.isInteger(factor) || factor < 1) {\n            throw new Error(\"the scale must be an integer >= 1\");\n        }\n        const sourceWidth = this.bitmap.width;\n        const sourceHeight = this.bitmap.height;\n        const destByteWidth = sourceWidth * factor * 4;\n        const sourceBuf = this.bitmap.data;\n        const destBuf = new Buffer(sourceHeight * destByteWidth * factor);\n        let sourceIndex = 0;\n        let priorDestRowIndex;\n        let destIndex = 0;\n        for (let y = 0; y < sourceHeight; ++y) {\n            priorDestRowIndex = destIndex;\n            for (let x = 0; x < sourceWidth; ++x) {\n                const color = sourceBuf.readUInt32BE(sourceIndex, true);\n                for (let cx = 0; cx < factor; ++cx) {\n                    destBuf.writeUInt32BE(color, destIndex);\n                    destIndex += 4;\n                }\n                sourceIndex += 4;\n            }\n            for (let cy = 1; cy < factor; ++cy) {\n                destBuf.copy(destBuf, destIndex, priorDestRowIndex, destIndex);\n                destIndex += destByteWidth;\n                priorDestRowIndex += destByteWidth;\n            }\n        }\n        this.bitmap = {\n            width: sourceWidth * factor,\n            height: sourceHeight * factor,\n            data: destBuf\n        };\n        return this;\n    }\n\n    /**\n     * Scans all coordinates of the image, handing each in turn to the provided handler function.\n     *\n     * @param {function} scanHandler A function(x: number, y: number, bi: number) to be called for each pixel of the image with that pixel's x-coord, y-coord, and index into the `data` buffer. The function accesses the pixel at this coordinate by accessing the `this.data` at index `bi`.\n     * @see scanAllIndexes\n     */\n\n    scanAllCoords(scanHandler) {\n        const width = this.bitmap.width;\n        const bufferLength = this.bitmap.data.length;\n        let x = 0;\n        let y = 0;\n\n        for (let bi = 0; bi < bufferLength; bi += 4) {\n            scanHandler(x, y, bi);\n            if (++x === width) {\n                x = 0;\n                ++y;\n            }\n        }\n    }\n\n    /**\n     * Scans all pixels of the image, handing the index of each in turn to the provided handler function. Runs a bit faster than `scanAllCoords()`, should the handler not need pixel coordinates.\n     *\n     * @param {function} scanHandler A function(bi: number) to be called for each pixel of the image with that pixel's index into the `data` buffer. The pixels is found at index 'bi' within `this.data`.\n     * @see scanAllCoords\n     */\n\n    scanAllIndexes(scanHandler) {\n        const bufferLength = this.bitmap.data.length;\n        for (let bi = 0; bi < bufferLength; bi += 4) {\n            scanHandler(bi);\n        }\n    }\n}\n\nmodule.exports = BitmapImage;\n","'use strict';\n\n/** @class Gif */\n\nclass Gif {\n\n    // width - width of GIF in pixels\n    // height - height of GIF in pixels\n    // loops - 0 = unending; (n > 0) = iterate n times\n    // usesTransparency - whether any frames have transparent pixels\n    // colorScope - scope of color tables in GIF\n    // frames - array of frames\n    // buffer - GIF-formatted data\n\n    /**\n     * Gif is a class representing an encoded GIF. It is intended to be a read-only representation of a byte-encoded GIF. Only encoders and decoders should be creating instances of this class.\n     * \n     * Property | Description\n     * --- | ---\n     * width | width of the GIF at its widest\n     * height | height of the GIF at its highest\n     * loops | the number of times the GIF should loop before stopping; 0 => loop indefinitely\n     * usesTransparency | boolean indicating whether at least one frame contains at least one transparent pixel\n     * colorScope | the scope of the color tables as encoded within the GIF; either Gif.GlobalColorsOnly (== 1) or Gif.LocalColorsOnly (== 2).\n     * frames | a array of GifFrame instances, one for each frame of the GIF\n     * buffer | a Buffer holding the encoding's byte data\n     * \n     * Its constructor should only ever be called by the GIF encoder or decoder.\n     *\n     * @param {Buffer} buffer A Buffer containing the encoded bytes\n     * @param {GifFrame[]} frames Array of frames found in the encoding\n     * @param {object} spec Properties of the encoding as listed above\n     */\n\n    constructor(buffer, frames, spec) {\n        this.width = spec.width;\n        this.height = spec.height;\n        this.loops = spec.loops;\n        this.usesTransparency = spec.usesTransparency;\n        this.colorScope = spec.colorScope;\n        this.frames = frames;\n        this.buffer = buffer;\n    }\n}\n\nGif.GlobalColorsPreferred = 0;\nGif.GlobalColorsOnly = 1;\nGif.LocalColorsOnly = 2;\n\n/** @class GifError */\n\nclass GifError extends Error {\n\n    /**\n     * GifError is a class representing a GIF-related error\n     * \n     * @param {string|Error} messageOrError\n     */\n\n    constructor(messageOrError) {\n        super(messageOrError);\n        if (messageOrError instanceof Error) {\n            this.stack = 'Gif' + messageOrError.stack;\n        }\n    }\n}\n\nexports.Gif = Gif;\nexports.GifError = GifError;\n","var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __markAsModule = (target) => __defProp(target, \"__esModule\", { value: true });\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __reExport = (target, module2, copyDefault, desc) => {\n  if (module2 && typeof module2 === \"object\" || typeof module2 === \"function\") {\n    for (let key of __getOwnPropNames(module2))\n      if (!__hasOwnProp.call(target, key) && (copyDefault || key !== \"default\"))\n        __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });\n  }\n  return target;\n};\nvar __toCommonJS = /* @__PURE__ */ ((cache) => {\n  return (module2, temp) => {\n    return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);\n  };\n})(typeof WeakMap !== \"undefined\" ? /* @__PURE__ */ new WeakMap() : 0);\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\n\n// src/index.ts\nvar src_exports = {};\n__export(src_exports, {\n  applyPalette: () => applyPalette,\n  applyPaletteSync: () => applyPaletteSync,\n  buildPalette: () => buildPalette,\n  buildPaletteSync: () => buildPaletteSync,\n  constants: () => constants_exports,\n  conversion: () => conversion_exports,\n  distance: () => distance_exports,\n  image: () => image_exports,\n  palette: () => palette_exports,\n  quality: () => quality_exports,\n  utils: () => utils_exports\n});\n\n// src/constants/index.ts\nvar constants_exports = {};\n__export(constants_exports, {\n  bt709: () => bt709_exports\n});\n\n// src/constants/bt709.ts\nvar bt709_exports = {};\n__export(bt709_exports, {\n  Y: () => Y,\n  x: () => x,\n  y: () => y\n});\nvar Y = /* @__PURE__ */ ((Y2) => {\n  Y2[Y2[\"RED\"] = 0.2126] = \"RED\";\n  Y2[Y2[\"GREEN\"] = 0.7152] = \"GREEN\";\n  Y2[Y2[\"BLUE\"] = 0.0722] = \"BLUE\";\n  Y2[Y2[\"WHITE\"] = 1] = \"WHITE\";\n  return Y2;\n})(Y || {});\nvar x = /* @__PURE__ */ ((x2) => {\n  x2[x2[\"RED\"] = 0.64] = \"RED\";\n  x2[x2[\"GREEN\"] = 0.3] = \"GREEN\";\n  x2[x2[\"BLUE\"] = 0.15] = \"BLUE\";\n  x2[x2[\"WHITE\"] = 0.3127] = \"WHITE\";\n  return x2;\n})(x || {});\nvar y = /* @__PURE__ */ ((y2) => {\n  y2[y2[\"RED\"] = 0.33] = \"RED\";\n  y2[y2[\"GREEN\"] = 0.6] = \"GREEN\";\n  y2[y2[\"BLUE\"] = 0.06] = \"BLUE\";\n  y2[y2[\"WHITE\"] = 0.329] = \"WHITE\";\n  return y2;\n})(y || {});\n\n// src/conversion/index.ts\nvar conversion_exports = {};\n__export(conversion_exports, {\n  lab2rgb: () => lab2rgb,\n  lab2xyz: () => lab2xyz,\n  rgb2hsl: () => rgb2hsl,\n  rgb2lab: () => rgb2lab,\n  rgb2xyz: () => rgb2xyz,\n  xyz2lab: () => xyz2lab,\n  xyz2rgb: () => xyz2rgb\n});\n\n// src/conversion/rgb2xyz.ts\nfunction correctGamma(n) {\n  return n > 0.04045 ? ((n + 0.055) / 1.055) ** 2.4 : n / 12.92;\n}\nfunction rgb2xyz(r, g, b) {\n  r = correctGamma(r / 255);\n  g = correctGamma(g / 255);\n  b = correctGamma(b / 255);\n  return {\n    x: r * 0.4124 + g * 0.3576 + b * 0.1805,\n    y: r * 0.2126 + g * 0.7152 + b * 0.0722,\n    z: r * 0.0193 + g * 0.1192 + b * 0.9505\n  };\n}\n\n// src/utils/arithmetic.ts\nvar arithmetic_exports = {};\n__export(arithmetic_exports, {\n  degrees2radians: () => degrees2radians,\n  inRange0to255: () => inRange0to255,\n  inRange0to255Rounded: () => inRange0to255Rounded,\n  intInRange: () => intInRange,\n  max3: () => max3,\n  min3: () => min3,\n  stableSort: () => stableSort\n});\nfunction degrees2radians(n) {\n  return n * (Math.PI / 180);\n}\nfunction max3(a, b, c) {\n  let m = a;\n  if (m < b)\n    m = b;\n  if (m < c)\n    m = c;\n  return m;\n}\nfunction min3(a, b, c) {\n  let m = a;\n  if (m > b)\n    m = b;\n  if (m > c)\n    m = c;\n  return m;\n}\nfunction intInRange(value, low, high) {\n  if (value > high)\n    value = high;\n  if (value < low)\n    value = low;\n  return value | 0;\n}\nfunction inRange0to255Rounded(n) {\n  n = Math.round(n);\n  if (n > 255)\n    n = 255;\n  else if (n < 0)\n    n = 0;\n  return n;\n}\nfunction inRange0to255(n) {\n  if (n > 255)\n    n = 255;\n  else if (n < 0)\n    n = 0;\n  return n;\n}\nfunction stableSort(arrayToSort, callback) {\n  const type = typeof arrayToSort[0];\n  let sorted;\n  if (type === \"number\" || type === \"string\") {\n    const ord = /* @__PURE__ */ Object.create(null);\n    for (let i = 0, l = arrayToSort.length; i < l; i++) {\n      const val = arrayToSort[i];\n      if (ord[val] || ord[val] === 0)\n        continue;\n      ord[val] = i;\n    }\n    sorted = arrayToSort.sort((a, b) => callback(a, b) || ord[a] - ord[b]);\n  } else {\n    const ord2 = arrayToSort.slice(0);\n    sorted = arrayToSort.sort((a, b) => callback(a, b) || ord2.indexOf(a) - ord2.indexOf(b));\n  }\n  return sorted;\n}\n\n// src/conversion/rgb2hsl.ts\nfunction rgb2hsl(r, g, b) {\n  const min = min3(r, g, b);\n  const max = max3(r, g, b);\n  const delta = max - min;\n  const l = (min + max) / 510;\n  let s = 0;\n  if (l > 0 && l < 1)\n    s = delta / (l < 0.5 ? max + min : 510 - max - min);\n  let h = 0;\n  if (delta > 0) {\n    if (max === r) {\n      h = (g - b) / delta;\n    } else if (max === g) {\n      h = 2 + (b - r) / delta;\n    } else {\n      h = 4 + (r - g) / delta;\n    }\n    h *= 60;\n    if (h < 0)\n      h += 360;\n  }\n  return { h, s, l };\n}\n\n// src/conversion/xyz2lab.ts\nvar refX = 0.95047;\nvar refY = 1;\nvar refZ = 1.08883;\nfunction pivot(n) {\n  return n > 8856e-6 ? n ** (1 / 3) : 7.787 * n + 16 / 116;\n}\nfunction xyz2lab(x2, y2, z) {\n  x2 = pivot(x2 / refX);\n  y2 = pivot(y2 / refY);\n  z = pivot(z / refZ);\n  if (116 * y2 - 16 < 0)\n    throw new Error(\"xxx\");\n  return {\n    L: Math.max(0, 116 * y2 - 16),\n    a: 500 * (x2 - y2),\n    b: 200 * (y2 - z)\n  };\n}\n\n// src/conversion/rgb2lab.ts\nfunction rgb2lab(r, g, b) {\n  const xyz = rgb2xyz(r, g, b);\n  return xyz2lab(xyz.x, xyz.y, xyz.z);\n}\n\n// src/conversion/lab2xyz.ts\nvar refX2 = 0.95047;\nvar refY2 = 1;\nvar refZ2 = 1.08883;\nfunction pivot2(n) {\n  return n > 0.206893034 ? n ** 3 : (n - 16 / 116) / 7.787;\n}\nfunction lab2xyz(L, a, b) {\n  const y2 = (L + 16) / 116;\n  const x2 = a / 500 + y2;\n  const z = y2 - b / 200;\n  return {\n    x: refX2 * pivot2(x2),\n    y: refY2 * pivot2(y2),\n    z: refZ2 * pivot2(z)\n  };\n}\n\n// src/conversion/xyz2rgb.ts\nfunction correctGamma2(n) {\n  return n > 31308e-7 ? 1.055 * n ** (1 / 2.4) - 0.055 : 12.92 * n;\n}\nfunction xyz2rgb(x2, y2, z) {\n  const r = correctGamma2(x2 * 3.2406 + y2 * -1.5372 + z * -0.4986);\n  const g = correctGamma2(x2 * -0.9689 + y2 * 1.8758 + z * 0.0415);\n  const b = correctGamma2(x2 * 0.0557 + y2 * -0.204 + z * 1.057);\n  return {\n    r: inRange0to255Rounded(r * 255),\n    g: inRange0to255Rounded(g * 255),\n    b: inRange0to255Rounded(b * 255)\n  };\n}\n\n// src/conversion/lab2rgb.ts\nfunction lab2rgb(L, a, b) {\n  const xyz = lab2xyz(L, a, b);\n  return xyz2rgb(xyz.x, xyz.y, xyz.z);\n}\n\n// src/distance/index.ts\nvar distance_exports = {};\n__export(distance_exports, {\n  AbstractDistanceCalculator: () => AbstractDistanceCalculator,\n  AbstractEuclidean: () => AbstractEuclidean,\n  AbstractManhattan: () => AbstractManhattan,\n  CIE94GraphicArts: () => CIE94GraphicArts,\n  CIE94Textiles: () => CIE94Textiles,\n  CIEDE2000: () => CIEDE2000,\n  CMetric: () => CMetric,\n  Euclidean: () => Euclidean,\n  EuclideanBT709: () => EuclideanBT709,\n  EuclideanBT709NoAlpha: () => EuclideanBT709NoAlpha,\n  Manhattan: () => Manhattan,\n  ManhattanBT709: () => ManhattanBT709,\n  ManhattanNommyde: () => ManhattanNommyde,\n  PNGQuant: () => PNGQuant\n});\n\n// src/distance/distanceCalculator.ts\nvar AbstractDistanceCalculator = class {\n  constructor() {\n    __publicField(this, \"_maxDistance\");\n    __publicField(this, \"_whitePoint\");\n    this._setDefaults();\n    this.setWhitePoint(255, 255, 255, 255);\n  }\n  setWhitePoint(r, g, b, a) {\n    this._whitePoint = {\n      r: r > 0 ? 255 / r : 0,\n      g: g > 0 ? 255 / g : 0,\n      b: b > 0 ? 255 / b : 0,\n      a: a > 0 ? 255 / a : 0\n    };\n    this._maxDistance = this.calculateRaw(r, g, b, a, 0, 0, 0, 0);\n  }\n  calculateNormalized(colorA, colorB) {\n    return this.calculateRaw(colorA.r, colorA.g, colorA.b, colorA.a, colorB.r, colorB.g, colorB.b, colorB.a) / this._maxDistance;\n  }\n};\n\n// src/distance/cie94.ts\nvar AbstractCIE94 = class extends AbstractDistanceCalculator {\n  calculateRaw(r1, g1, b1, a1, r2, g2, b2, a2) {\n    const lab1 = rgb2lab(inRange0to255(r1 * this._whitePoint.r), inRange0to255(g1 * this._whitePoint.g), inRange0to255(b1 * this._whitePoint.b));\n    const lab2 = rgb2lab(inRange0to255(r2 * this._whitePoint.r), inRange0to255(g2 * this._whitePoint.g), inRange0to255(b2 * this._whitePoint.b));\n    const dL = lab1.L - lab2.L;\n    const dA = lab1.a - lab2.a;\n    const dB = lab1.b - lab2.b;\n    const c1 = Math.sqrt(lab1.a * lab1.a + lab1.b * lab1.b);\n    const c2 = Math.sqrt(lab2.a * lab2.a + lab2.b * lab2.b);\n    const dC = c1 - c2;\n    let deltaH = dA * dA + dB * dB - dC * dC;\n    deltaH = deltaH < 0 ? 0 : Math.sqrt(deltaH);\n    const dAlpha = (a2 - a1) * this._whitePoint.a * this._kA;\n    return Math.sqrt((dL / this._Kl) ** 2 + (dC / (1 + this._K1 * c1)) ** 2 + (deltaH / (1 + this._K2 * c1)) ** 2 + dAlpha ** 2);\n  }\n};\nvar CIE94Textiles = class extends AbstractCIE94 {\n  _setDefaults() {\n    this._Kl = 2;\n    this._K1 = 0.048;\n    this._K2 = 0.014;\n    this._kA = 0.25 * 50 / 255;\n  }\n};\nvar CIE94GraphicArts = class extends AbstractCIE94 {\n  _setDefaults() {\n    this._Kl = 1;\n    this._K1 = 0.045;\n    this._K2 = 0.015;\n    this._kA = 0.25 * 100 / 255;\n  }\n};\n\n// src/distance/ciede2000.ts\nvar _CIEDE2000 = class extends AbstractDistanceCalculator {\n  _setDefaults() {\n  }\n  static _calculatehp(b, ap) {\n    const hp = Math.atan2(b, ap);\n    if (hp >= 0)\n      return hp;\n    return hp + _CIEDE2000._deg360InRad;\n  }\n  static _calculateRT(ahp, aCp) {\n    const aCp_to_7 = aCp ** 7;\n    const R_C = 2 * Math.sqrt(aCp_to_7 / (aCp_to_7 + _CIEDE2000._pow25to7));\n    const delta_theta = _CIEDE2000._deg30InRad * Math.exp(-(((ahp - _CIEDE2000._deg275InRad) / _CIEDE2000._deg25InRad) ** 2));\n    return -Math.sin(2 * delta_theta) * R_C;\n  }\n  static _calculateT(ahp) {\n    return 1 - 0.17 * Math.cos(ahp - _CIEDE2000._deg30InRad) + 0.24 * Math.cos(ahp * 2) + 0.32 * Math.cos(ahp * 3 + _CIEDE2000._deg6InRad) - 0.2 * Math.cos(ahp * 4 - _CIEDE2000._deg63InRad);\n  }\n  static _calculate_ahp(C1pC2p, h_bar, h1p, h2p) {\n    const hpSum = h1p + h2p;\n    if (C1pC2p === 0)\n      return hpSum;\n    if (h_bar <= _CIEDE2000._deg180InRad)\n      return hpSum / 2;\n    if (hpSum < _CIEDE2000._deg360InRad) {\n      return (hpSum + _CIEDE2000._deg360InRad) / 2;\n    }\n    return (hpSum - _CIEDE2000._deg360InRad) / 2;\n  }\n  static _calculate_dHp(C1pC2p, h_bar, h2p, h1p) {\n    let dhp;\n    if (C1pC2p === 0) {\n      dhp = 0;\n    } else if (h_bar <= _CIEDE2000._deg180InRad) {\n      dhp = h2p - h1p;\n    } else if (h2p <= h1p) {\n      dhp = h2p - h1p + _CIEDE2000._deg360InRad;\n    } else {\n      dhp = h2p - h1p - _CIEDE2000._deg360InRad;\n    }\n    return 2 * Math.sqrt(C1pC2p) * Math.sin(dhp / 2);\n  }\n  calculateRaw(r1, g1, b1, a1, r2, g2, b2, a2) {\n    const lab1 = rgb2lab(inRange0to255(r1 * this._whitePoint.r), inRange0to255(g1 * this._whitePoint.g), inRange0to255(b1 * this._whitePoint.b));\n    const lab2 = rgb2lab(inRange0to255(r2 * this._whitePoint.r), inRange0to255(g2 * this._whitePoint.g), inRange0to255(b2 * this._whitePoint.b));\n    const dA = (a2 - a1) * this._whitePoint.a * _CIEDE2000._kA;\n    const dE2 = this.calculateRawInLab(lab1, lab2);\n    return Math.sqrt(dE2 + dA * dA);\n  }\n  calculateRawInLab(Lab1, Lab2) {\n    const L1 = Lab1.L;\n    const a1 = Lab1.a;\n    const b1 = Lab1.b;\n    const L2 = Lab2.L;\n    const a2 = Lab2.a;\n    const b2 = Lab2.b;\n    const C1 = Math.sqrt(a1 * a1 + b1 * b1);\n    const C2 = Math.sqrt(a2 * a2 + b2 * b2);\n    const pow_a_C1_C2_to_7 = ((C1 + C2) / 2) ** 7;\n    const G = 0.5 * (1 - Math.sqrt(pow_a_C1_C2_to_7 / (pow_a_C1_C2_to_7 + _CIEDE2000._pow25to7)));\n    const a1p = (1 + G) * a1;\n    const a2p = (1 + G) * a2;\n    const C1p = Math.sqrt(a1p * a1p + b1 * b1);\n    const C2p = Math.sqrt(a2p * a2p + b2 * b2);\n    const C1pC2p = C1p * C2p;\n    const h1p = _CIEDE2000._calculatehp(b1, a1p);\n    const h2p = _CIEDE2000._calculatehp(b2, a2p);\n    const h_bar = Math.abs(h1p - h2p);\n    const dLp = L2 - L1;\n    const dCp = C2p - C1p;\n    const dHp = _CIEDE2000._calculate_dHp(C1pC2p, h_bar, h2p, h1p);\n    const ahp = _CIEDE2000._calculate_ahp(C1pC2p, h_bar, h1p, h2p);\n    const T = _CIEDE2000._calculateT(ahp);\n    const aCp = (C1p + C2p) / 2;\n    const aLp_minus_50_square = ((L1 + L2) / 2 - 50) ** 2;\n    const S_L = 1 + 0.015 * aLp_minus_50_square / Math.sqrt(20 + aLp_minus_50_square);\n    const S_C = 1 + 0.045 * aCp;\n    const S_H = 1 + 0.015 * T * aCp;\n    const R_T = _CIEDE2000._calculateRT(ahp, aCp);\n    const dLpSL = dLp / S_L;\n    const dCpSC = dCp / S_C;\n    const dHpSH = dHp / S_H;\n    return dLpSL ** 2 + dCpSC ** 2 + dHpSH ** 2 + R_T * dCpSC * dHpSH;\n  }\n};\nvar CIEDE2000 = _CIEDE2000;\n__publicField(CIEDE2000, \"_kA\", 0.25 * 100 / 255);\n__publicField(CIEDE2000, \"_pow25to7\", 25 ** 7);\n__publicField(CIEDE2000, \"_deg360InRad\", degrees2radians(360));\n__publicField(CIEDE2000, \"_deg180InRad\", degrees2radians(180));\n__publicField(CIEDE2000, \"_deg30InRad\", degrees2radians(30));\n__publicField(CIEDE2000, \"_deg6InRad\", degrees2radians(6));\n__publicField(CIEDE2000, \"_deg63InRad\", degrees2radians(63));\n__publicField(CIEDE2000, \"_deg275InRad\", degrees2radians(275));\n__publicField(CIEDE2000, \"_deg25InRad\", degrees2radians(25));\n\n// src/distance/cmetric.ts\nvar CMetric = class extends AbstractDistanceCalculator {\n  calculateRaw(r1, g1, b1, a1, r2, g2, b2, a2) {\n    const rmean = (r1 + r2) / 2 * this._whitePoint.r;\n    const r = (r1 - r2) * this._whitePoint.r;\n    const g = (g1 - g2) * this._whitePoint.g;\n    const b = (b1 - b2) * this._whitePoint.b;\n    const dE = ((512 + rmean) * r * r >> 8) + 4 * g * g + ((767 - rmean) * b * b >> 8);\n    const dA = (a2 - a1) * this._whitePoint.a;\n    return Math.sqrt(dE + dA * dA);\n  }\n  _setDefaults() {\n  }\n};\n\n// src/distance/euclidean.ts\nvar AbstractEuclidean = class extends AbstractDistanceCalculator {\n  calculateRaw(r1, g1, b1, a1, r2, g2, b2, a2) {\n    const dR = r2 - r1;\n    const dG = g2 - g1;\n    const dB = b2 - b1;\n    const dA = a2 - a1;\n    return Math.sqrt(this._kR * dR * dR + this._kG * dG * dG + this._kB * dB * dB + this._kA * dA * dA);\n  }\n};\nvar Euclidean = class extends AbstractEuclidean {\n  _setDefaults() {\n    this._kR = 1;\n    this._kG = 1;\n    this._kB = 1;\n    this._kA = 1;\n  }\n};\nvar EuclideanBT709 = class extends AbstractEuclidean {\n  _setDefaults() {\n    this._kR = 0.2126 /* RED */;\n    this._kG = 0.7152 /* GREEN */;\n    this._kB = 0.0722 /* BLUE */;\n    this._kA = 1;\n  }\n};\nvar EuclideanBT709NoAlpha = class extends AbstractEuclidean {\n  _setDefaults() {\n    this._kR = 0.2126 /* RED */;\n    this._kG = 0.7152 /* GREEN */;\n    this._kB = 0.0722 /* BLUE */;\n    this._kA = 0;\n  }\n};\n\n// src/distance/manhattan.ts\nvar AbstractManhattan = class extends AbstractDistanceCalculator {\n  calculateRaw(r1, g1, b1, a1, r2, g2, b2, a2) {\n    let dR = r2 - r1;\n    let dG = g2 - g1;\n    let dB = b2 - b1;\n    let dA = a2 - a1;\n    if (dR < 0)\n      dR = 0 - dR;\n    if (dG < 0)\n      dG = 0 - dG;\n    if (dB < 0)\n      dB = 0 - dB;\n    if (dA < 0)\n      dA = 0 - dA;\n    return this._kR * dR + this._kG * dG + this._kB * dB + this._kA * dA;\n  }\n};\nvar Manhattan = class extends AbstractManhattan {\n  _setDefaults() {\n    this._kR = 1;\n    this._kG = 1;\n    this._kB = 1;\n    this._kA = 1;\n  }\n};\nvar ManhattanNommyde = class extends AbstractManhattan {\n  _setDefaults() {\n    this._kR = 0.4984;\n    this._kG = 0.8625;\n    this._kB = 0.2979;\n    this._kA = 1;\n  }\n};\nvar ManhattanBT709 = class extends AbstractManhattan {\n  _setDefaults() {\n    this._kR = 0.2126 /* RED */;\n    this._kG = 0.7152 /* GREEN */;\n    this._kB = 0.0722 /* BLUE */;\n    this._kA = 1;\n  }\n};\n\n// src/distance/pngQuant.ts\nvar PNGQuant = class extends AbstractDistanceCalculator {\n  calculateRaw(r1, g1, b1, a1, r2, g2, b2, a2) {\n    const alphas = (a2 - a1) * this._whitePoint.a;\n    return this._colordifferenceCh(r1 * this._whitePoint.r, r2 * this._whitePoint.r, alphas) + this._colordifferenceCh(g1 * this._whitePoint.g, g2 * this._whitePoint.g, alphas) + this._colordifferenceCh(b1 * this._whitePoint.b, b2 * this._whitePoint.b, alphas);\n  }\n  _colordifferenceCh(x2, y2, alphas) {\n    const black = x2 - y2;\n    const white = black + alphas;\n    return black * black + white * white;\n  }\n  _setDefaults() {\n  }\n};\n\n// src/palette/index.ts\nvar palette_exports = {};\n__export(palette_exports, {\n  AbstractPaletteQuantizer: () => AbstractPaletteQuantizer,\n  ColorHistogram: () => ColorHistogram,\n  NeuQuant: () => NeuQuant,\n  NeuQuantFloat: () => NeuQuantFloat,\n  RGBQuant: () => RGBQuant,\n  WuColorCube: () => WuColorCube,\n  WuQuant: () => WuQuant\n});\n\n// src/palette/paletteQuantizer.ts\nvar AbstractPaletteQuantizer = class {\n  quantizeSync() {\n    for (const value of this.quantize()) {\n      if (value.palette) {\n        return value.palette;\n      }\n    }\n    throw new Error(\"unreachable\");\n  }\n};\n\n// src/utils/point.ts\nvar Point = class {\n  constructor() {\n    __publicField(this, \"r\");\n    __publicField(this, \"g\");\n    __publicField(this, \"b\");\n    __publicField(this, \"a\");\n    __publicField(this, \"uint32\");\n    __publicField(this, \"rgba\");\n    this.uint32 = -1 >>> 0;\n    this.r = this.g = this.b = this.a = 0;\n    this.rgba = new Array(4);\n    this.rgba[0] = 0;\n    this.rgba[1] = 0;\n    this.rgba[2] = 0;\n    this.rgba[3] = 0;\n  }\n  static createByQuadruplet(quadruplet) {\n    const point = new Point();\n    point.r = quadruplet[0] | 0;\n    point.g = quadruplet[1] | 0;\n    point.b = quadruplet[2] | 0;\n    point.a = quadruplet[3] | 0;\n    point._loadUINT32();\n    point._loadQuadruplet();\n    return point;\n  }\n  static createByRGBA(red, green, blue, alpha) {\n    const point = new Point();\n    point.r = red | 0;\n    point.g = green | 0;\n    point.b = blue | 0;\n    point.a = alpha | 0;\n    point._loadUINT32();\n    point._loadQuadruplet();\n    return point;\n  }\n  static createByUint32(uint32) {\n    const point = new Point();\n    point.uint32 = uint32 >>> 0;\n    point._loadRGBA();\n    point._loadQuadruplet();\n    return point;\n  }\n  from(point) {\n    this.r = point.r;\n    this.g = point.g;\n    this.b = point.b;\n    this.a = point.a;\n    this.uint32 = point.uint32;\n    this.rgba[0] = point.r;\n    this.rgba[1] = point.g;\n    this.rgba[2] = point.b;\n    this.rgba[3] = point.a;\n  }\n  getLuminosity(useAlphaChannel) {\n    let r = this.r;\n    let g = this.g;\n    let b = this.b;\n    if (useAlphaChannel) {\n      r = Math.min(255, 255 - this.a + this.a * r / 255);\n      g = Math.min(255, 255 - this.a + this.a * g / 255);\n      b = Math.min(255, 255 - this.a + this.a * b / 255);\n    }\n    return r * 0.2126 /* RED */ + g * 0.7152 /* GREEN */ + b * 0.0722 /* BLUE */;\n  }\n  _loadUINT32() {\n    this.uint32 = (this.a << 24 | this.b << 16 | this.g << 8 | this.r) >>> 0;\n  }\n  _loadRGBA() {\n    this.r = this.uint32 & 255;\n    this.g = this.uint32 >>> 8 & 255;\n    this.b = this.uint32 >>> 16 & 255;\n    this.a = this.uint32 >>> 24 & 255;\n  }\n  _loadQuadruplet() {\n    this.rgba[0] = this.r;\n    this.rgba[1] = this.g;\n    this.rgba[2] = this.b;\n    this.rgba[3] = this.a;\n  }\n};\n\n// src/utils/pointContainer.ts\nvar PointContainer = class {\n  constructor() {\n    __publicField(this, \"_pointArray\");\n    __publicField(this, \"_width\");\n    __publicField(this, \"_height\");\n    this._width = 0;\n    this._height = 0;\n    this._pointArray = [];\n  }\n  getWidth() {\n    return this._width;\n  }\n  getHeight() {\n    return this._height;\n  }\n  setWidth(width) {\n    this._width = width;\n  }\n  setHeight(height) {\n    this._height = height;\n  }\n  getPointArray() {\n    return this._pointArray;\n  }\n  clone() {\n    const clone = new PointContainer();\n    clone._width = this._width;\n    clone._height = this._height;\n    for (let i = 0, l = this._pointArray.length; i < l; i++) {\n      clone._pointArray[i] = Point.createByUint32(this._pointArray[i].uint32 | 0);\n    }\n    return clone;\n  }\n  toUint32Array() {\n    const l = this._pointArray.length;\n    const uint32Array = new Uint32Array(l);\n    for (let i = 0; i < l; i++) {\n      uint32Array[i] = this._pointArray[i].uint32;\n    }\n    return uint32Array;\n  }\n  toUint8Array() {\n    return new Uint8Array(this.toUint32Array().buffer);\n  }\n  static fromHTMLImageElement(img) {\n    const width = img.naturalWidth;\n    const height = img.naturalHeight;\n    const canvas = document.createElement(\"canvas\");\n    canvas.width = width;\n    canvas.height = height;\n    const ctx = canvas.getContext(\"2d\");\n    ctx.drawImage(img, 0, 0, width, height, 0, 0, width, height);\n    return PointContainer.fromHTMLCanvasElement(canvas);\n  }\n  static fromHTMLCanvasElement(canvas) {\n    const width = canvas.width;\n    const height = canvas.height;\n    const ctx = canvas.getContext(\"2d\");\n    const imgData = ctx.getImageData(0, 0, width, height);\n    return PointContainer.fromImageData(imgData);\n  }\n  static fromImageData(imageData) {\n    const width = imageData.width;\n    const height = imageData.height;\n    return PointContainer.fromUint8Array(imageData.data, width, height);\n  }\n  static fromUint8Array(uint8Array, width, height) {\n    switch (Object.prototype.toString.call(uint8Array)) {\n      case \"[object Uint8ClampedArray]\":\n      case \"[object Uint8Array]\":\n        break;\n      default:\n        uint8Array = new Uint8Array(uint8Array);\n    }\n    const uint32Array = new Uint32Array(uint8Array.buffer);\n    return PointContainer.fromUint32Array(uint32Array, width, height);\n  }\n  static fromUint32Array(uint32Array, width, height) {\n    const container = new PointContainer();\n    container._width = width;\n    container._height = height;\n    for (let i = 0, l = uint32Array.length; i < l; i++) {\n      container._pointArray[i] = Point.createByUint32(uint32Array[i] | 0);\n    }\n    return container;\n  }\n  static fromBuffer(buffer, width, height) {\n    const uint32Array = new Uint32Array(buffer.buffer, buffer.byteOffset, buffer.byteLength / Uint32Array.BYTES_PER_ELEMENT);\n    return PointContainer.fromUint32Array(uint32Array, width, height);\n  }\n};\n\n// src/utils/palette.ts\nvar hueGroups = 10;\nfunction hueGroup(hue, segmentsNumber) {\n  const maxHue = 360;\n  const seg = maxHue / segmentsNumber;\n  const half = seg / 2;\n  for (let i = 1, mid = seg - half; i < segmentsNumber; i++, mid += seg) {\n    if (hue >= mid && hue < mid + seg)\n      return i;\n  }\n  return 0;\n}\nvar Palette = class {\n  constructor() {\n    __publicField(this, \"_pointContainer\");\n    __publicField(this, \"_pointArray\", []);\n    __publicField(this, \"_i32idx\", {});\n    this._pointContainer = new PointContainer();\n    this._pointContainer.setHeight(1);\n    this._pointArray = this._pointContainer.getPointArray();\n  }\n  add(color) {\n    this._pointArray.push(color);\n    this._pointContainer.setWidth(this._pointArray.length);\n  }\n  has(color) {\n    for (let i = this._pointArray.length - 1; i >= 0; i--) {\n      if (color.uint32 === this._pointArray[i].uint32)\n        return true;\n    }\n    return false;\n  }\n  getNearestColor(colorDistanceCalculator, color) {\n    return this._pointArray[this._getNearestIndex(colorDistanceCalculator, color) | 0];\n  }\n  getPointContainer() {\n    return this._pointContainer;\n  }\n  _nearestPointFromCache(key) {\n    return typeof this._i32idx[key] === \"number\" ? this._i32idx[key] : -1;\n  }\n  _getNearestIndex(colorDistanceCalculator, point) {\n    let idx = this._nearestPointFromCache(\"\" + point.uint32);\n    if (idx >= 0)\n      return idx;\n    let minimalDistance = Number.MAX_VALUE;\n    idx = 0;\n    for (let i = 0, l = this._pointArray.length; i < l; i++) {\n      const p = this._pointArray[i];\n      const distance = colorDistanceCalculator.calculateRaw(point.r, point.g, point.b, point.a, p.r, p.g, p.b, p.a);\n      if (distance < minimalDistance) {\n        minimalDistance = distance;\n        idx = i;\n      }\n    }\n    this._i32idx[point.uint32] = idx;\n    return idx;\n  }\n  sort() {\n    this._i32idx = {};\n    this._pointArray.sort((a, b) => {\n      const hslA = rgb2hsl(a.r, a.g, a.b);\n      const hslB = rgb2hsl(b.r, b.g, b.b);\n      const hueA = a.r === a.g && a.g === a.b ? 0 : 1 + hueGroup(hslA.h, hueGroups);\n      const hueB = b.r === b.g && b.g === b.b ? 0 : 1 + hueGroup(hslB.h, hueGroups);\n      const hueDiff = hueB - hueA;\n      if (hueDiff)\n        return -hueDiff;\n      const lA = a.getLuminosity(true);\n      const lB = b.getLuminosity(true);\n      if (lB - lA !== 0)\n        return lB - lA;\n      const satDiff = (hslB.s * 100 | 0) - (hslA.s * 100 | 0);\n      if (satDiff)\n        return -satDiff;\n      return 0;\n    });\n  }\n};\n\n// src/utils/index.ts\nvar utils_exports = {};\n__export(utils_exports, {\n  HueStatistics: () => HueStatistics,\n  Palette: () => Palette,\n  Point: () => Point,\n  PointContainer: () => PointContainer,\n  ProgressTracker: () => ProgressTracker,\n  arithmetic: () => arithmetic_exports\n});\n\n// src/utils/hueStatistics.ts\nvar HueGroup = class {\n  constructor() {\n    __publicField(this, \"num\", 0);\n    __publicField(this, \"cols\", []);\n  }\n};\nvar HueStatistics = class {\n  constructor(numGroups, minCols) {\n    __publicField(this, \"_numGroups\");\n    __publicField(this, \"_minCols\");\n    __publicField(this, \"_stats\");\n    __publicField(this, \"_groupsFull\");\n    this._numGroups = numGroups;\n    this._minCols = minCols;\n    this._stats = [];\n    for (let i = 0; i <= numGroups; i++) {\n      this._stats[i] = new HueGroup();\n    }\n    this._groupsFull = 0;\n  }\n  check(i32) {\n    if (this._groupsFull === this._numGroups + 1) {\n      this.check = () => {\n      };\n    }\n    const r = i32 & 255;\n    const g = i32 >>> 8 & 255;\n    const b = i32 >>> 16 & 255;\n    const hg = r === g && g === b ? 0 : 1 + hueGroup(rgb2hsl(r, g, b).h, this._numGroups);\n    const gr = this._stats[hg];\n    const min = this._minCols;\n    gr.num++;\n    if (gr.num > min) {\n      return;\n    }\n    if (gr.num === min) {\n      this._groupsFull++;\n    }\n    if (gr.num <= min) {\n      this._stats[hg].cols.push(i32);\n    }\n  }\n  injectIntoDictionary(histG) {\n    for (let i = 0; i <= this._numGroups; i++) {\n      if (this._stats[i].num <= this._minCols) {\n        this._stats[i].cols.forEach((col) => {\n          if (!histG[col]) {\n            histG[col] = 1;\n          } else {\n            histG[col]++;\n          }\n        });\n      }\n    }\n  }\n  injectIntoArray(histG) {\n    for (let i = 0; i <= this._numGroups; i++) {\n      if (this._stats[i].num <= this._minCols) {\n        this._stats[i].cols.forEach((col) => {\n          if (histG.indexOf(col) === -1) {\n            histG.push(col);\n          }\n        });\n      }\n    }\n  }\n};\n\n// src/utils/progressTracker.ts\nvar _ProgressTracker = class {\n  constructor(valueRange, progressRange) {\n    __publicField(this, \"progress\");\n    __publicField(this, \"_step\");\n    __publicField(this, \"_range\");\n    __publicField(this, \"_last\");\n    __publicField(this, \"_progressRange\");\n    this._range = valueRange;\n    this._progressRange = progressRange;\n    this._step = Math.max(1, this._range / (_ProgressTracker.steps + 1) | 0);\n    this._last = -this._step;\n    this.progress = 0;\n  }\n  shouldNotify(current) {\n    if (current - this._last >= this._step) {\n      this._last = current;\n      this.progress = Math.min(this._progressRange * this._last / this._range, this._progressRange);\n      return true;\n    }\n    return false;\n  }\n};\nvar ProgressTracker = _ProgressTracker;\n__publicField(ProgressTracker, \"steps\", 100);\n\n// src/palette/neuquant/neuquant.ts\nvar networkBiasShift = 3;\nvar Neuron = class {\n  constructor(defaultValue) {\n    __publicField(this, \"r\");\n    __publicField(this, \"g\");\n    __publicField(this, \"b\");\n    __publicField(this, \"a\");\n    this.r = this.g = this.b = this.a = defaultValue;\n  }\n  toPoint() {\n    return Point.createByRGBA(this.r >> networkBiasShift, this.g >> networkBiasShift, this.b >> networkBiasShift, this.a >> networkBiasShift);\n  }\n  subtract(r, g, b, a) {\n    this.r -= r | 0;\n    this.g -= g | 0;\n    this.b -= b | 0;\n    this.a -= a | 0;\n  }\n};\nvar _NeuQuant = class extends AbstractPaletteQuantizer {\n  constructor(colorDistanceCalculator, colors = 256) {\n    super();\n    __publicField(this, \"_pointArray\");\n    __publicField(this, \"_networkSize\");\n    __publicField(this, \"_network\");\n    __publicField(this, \"_sampleFactor\");\n    __publicField(this, \"_radPower\");\n    __publicField(this, \"_freq\");\n    __publicField(this, \"_bias\");\n    __publicField(this, \"_distance\");\n    this._distance = colorDistanceCalculator;\n    this._pointArray = [];\n    this._sampleFactor = 1;\n    this._networkSize = colors;\n    this._distance.setWhitePoint(255 << networkBiasShift, 255 << networkBiasShift, 255 << networkBiasShift, 255 << networkBiasShift);\n  }\n  sample(pointContainer) {\n    this._pointArray = this._pointArray.concat(pointContainer.getPointArray());\n  }\n  *quantize() {\n    this._init();\n    yield* this._learn();\n    yield {\n      palette: this._buildPalette(),\n      progress: 100\n    };\n  }\n  _init() {\n    this._freq = [];\n    this._bias = [];\n    this._radPower = [];\n    this._network = [];\n    for (let i = 0; i < this._networkSize; i++) {\n      this._network[i] = new Neuron((i << networkBiasShift + 8) / this._networkSize | 0);\n      this._freq[i] = _NeuQuant._initialBias / this._networkSize | 0;\n      this._bias[i] = 0;\n    }\n  }\n  *_learn() {\n    let sampleFactor = this._sampleFactor;\n    const pointsNumber = this._pointArray.length;\n    if (pointsNumber < _NeuQuant._minpicturebytes)\n      sampleFactor = 1;\n    const alphadec = 30 + (sampleFactor - 1) / 3 | 0;\n    const pointsToSample = pointsNumber / sampleFactor | 0;\n    let delta = pointsToSample / _NeuQuant._nCycles | 0;\n    let alpha = _NeuQuant._initAlpha;\n    let radius = (this._networkSize >> 3) * _NeuQuant._radiusBias;\n    let rad = radius >> _NeuQuant._radiusBiasShift;\n    if (rad <= 1)\n      rad = 0;\n    for (let i = 0; i < rad; i++) {\n      this._radPower[i] = alpha * ((rad * rad - i * i) * _NeuQuant._radBias / (rad * rad)) >>> 0;\n    }\n    let step;\n    if (pointsNumber < _NeuQuant._minpicturebytes) {\n      step = 1;\n    } else if (pointsNumber % _NeuQuant._prime1 !== 0) {\n      step = _NeuQuant._prime1;\n    } else if (pointsNumber % _NeuQuant._prime2 !== 0) {\n      step = _NeuQuant._prime2;\n    } else if (pointsNumber % _NeuQuant._prime3 !== 0) {\n      step = _NeuQuant._prime3;\n    } else {\n      step = _NeuQuant._prime4;\n    }\n    const tracker = new ProgressTracker(pointsToSample, 99);\n    for (let i = 0, pointIndex = 0; i < pointsToSample; ) {\n      if (tracker.shouldNotify(i)) {\n        yield {\n          progress: tracker.progress\n        };\n      }\n      const point = this._pointArray[pointIndex];\n      const b = point.b << networkBiasShift;\n      const g = point.g << networkBiasShift;\n      const r = point.r << networkBiasShift;\n      const a = point.a << networkBiasShift;\n      const neuronIndex = this._contest(b, g, r, a);\n      this._alterSingle(alpha, neuronIndex, b, g, r, a);\n      if (rad !== 0)\n        this._alterNeighbour(rad, neuronIndex, b, g, r, a);\n      pointIndex += step;\n      if (pointIndex >= pointsNumber)\n        pointIndex -= pointsNumber;\n      i++;\n      if (delta === 0)\n        delta = 1;\n      if (i % delta === 0) {\n        alpha -= alpha / alphadec | 0;\n        radius -= radius / _NeuQuant._radiusDecrease | 0;\n        rad = radius >> _NeuQuant._radiusBiasShift;\n        if (rad <= 1)\n          rad = 0;\n        for (let j = 0; j < rad; j++) {\n          this._radPower[j] = alpha * ((rad * rad - j * j) * _NeuQuant._radBias / (rad * rad)) >>> 0;\n        }\n      }\n    }\n  }\n  _buildPalette() {\n    const palette = new Palette();\n    this._network.forEach((neuron) => {\n      palette.add(neuron.toPoint());\n    });\n    palette.sort();\n    return palette;\n  }\n  _alterNeighbour(rad, i, b, g, r, al) {\n    let lo = i - rad;\n    if (lo < -1)\n      lo = -1;\n    let hi = i + rad;\n    if (hi > this._networkSize)\n      hi = this._networkSize;\n    let j = i + 1;\n    let k = i - 1;\n    let m = 1;\n    while (j < hi || k > lo) {\n      const a = this._radPower[m++] / _NeuQuant._alphaRadBias;\n      if (j < hi) {\n        const p = this._network[j++];\n        p.subtract(a * (p.r - r), a * (p.g - g), a * (p.b - b), a * (p.a - al));\n      }\n      if (k > lo) {\n        const p = this._network[k--];\n        p.subtract(a * (p.r - r), a * (p.g - g), a * (p.b - b), a * (p.a - al));\n      }\n    }\n  }\n  _alterSingle(alpha, i, b, g, r, a) {\n    alpha /= _NeuQuant._initAlpha;\n    const n = this._network[i];\n    n.subtract(alpha * (n.r - r), alpha * (n.g - g), alpha * (n.b - b), alpha * (n.a - a));\n  }\n  _contest(b, g, r, a) {\n    const multiplier = 255 * 4 << networkBiasShift;\n    let bestd = ~(1 << 31);\n    let bestbiasd = bestd;\n    let bestpos = -1;\n    let bestbiaspos = bestpos;\n    for (let i = 0; i < this._networkSize; i++) {\n      const n = this._network[i];\n      const dist = this._distance.calculateNormalized(n, { r, g, b, a }) * multiplier | 0;\n      if (dist < bestd) {\n        bestd = dist;\n        bestpos = i;\n      }\n      const biasdist = dist - (this._bias[i] >> _NeuQuant._initialBiasShift - networkBiasShift);\n      if (biasdist < bestbiasd) {\n        bestbiasd = biasdist;\n        bestbiaspos = i;\n      }\n      const betafreq = this._freq[i] >> _NeuQuant._betaShift;\n      this._freq[i] -= betafreq;\n      this._bias[i] += betafreq << _NeuQuant._gammaShift;\n    }\n    this._freq[bestpos] += _NeuQuant._beta;\n    this._bias[bestpos] -= _NeuQuant._betaGamma;\n    return bestbiaspos;\n  }\n};\nvar NeuQuant = _NeuQuant;\n__publicField(NeuQuant, \"_prime1\", 499);\n__publicField(NeuQuant, \"_prime2\", 491);\n__publicField(NeuQuant, \"_prime3\", 487);\n__publicField(NeuQuant, \"_prime4\", 503);\n__publicField(NeuQuant, \"_minpicturebytes\", _NeuQuant._prime4);\n__publicField(NeuQuant, \"_nCycles\", 100);\n__publicField(NeuQuant, \"_initialBiasShift\", 16);\n__publicField(NeuQuant, \"_initialBias\", 1 << _NeuQuant._initialBiasShift);\n__publicField(NeuQuant, \"_gammaShift\", 10);\n__publicField(NeuQuant, \"_betaShift\", 10);\n__publicField(NeuQuant, \"_beta\", _NeuQuant._initialBias >> _NeuQuant._betaShift);\n__publicField(NeuQuant, \"_betaGamma\", _NeuQuant._initialBias << _NeuQuant._gammaShift - _NeuQuant._betaShift);\n__publicField(NeuQuant, \"_radiusBiasShift\", 6);\n__publicField(NeuQuant, \"_radiusBias\", 1 << _NeuQuant._radiusBiasShift);\n__publicField(NeuQuant, \"_radiusDecrease\", 30);\n__publicField(NeuQuant, \"_alphaBiasShift\", 10);\n__publicField(NeuQuant, \"_initAlpha\", 1 << _NeuQuant._alphaBiasShift);\n__publicField(NeuQuant, \"_radBiasShift\", 8);\n__publicField(NeuQuant, \"_radBias\", 1 << _NeuQuant._radBiasShift);\n__publicField(NeuQuant, \"_alphaRadBiasShift\", _NeuQuant._alphaBiasShift + _NeuQuant._radBiasShift);\n__publicField(NeuQuant, \"_alphaRadBias\", 1 << _NeuQuant._alphaRadBiasShift);\n\n// src/palette/neuquant/neuquantFloat.ts\nvar networkBiasShift2 = 3;\nvar NeuronFloat = class {\n  constructor(defaultValue) {\n    __publicField(this, \"r\");\n    __publicField(this, \"g\");\n    __publicField(this, \"b\");\n    __publicField(this, \"a\");\n    this.r = this.g = this.b = this.a = defaultValue;\n  }\n  toPoint() {\n    return Point.createByRGBA(this.r >> networkBiasShift2, this.g >> networkBiasShift2, this.b >> networkBiasShift2, this.a >> networkBiasShift2);\n  }\n  subtract(r, g, b, a) {\n    this.r -= r;\n    this.g -= g;\n    this.b -= b;\n    this.a -= a;\n  }\n};\nvar _NeuQuantFloat = class extends AbstractPaletteQuantizer {\n  constructor(colorDistanceCalculator, colors = 256) {\n    super();\n    __publicField(this, \"_pointArray\");\n    __publicField(this, \"_networkSize\");\n    __publicField(this, \"_network\");\n    __publicField(this, \"_sampleFactor\");\n    __publicField(this, \"_radPower\");\n    __publicField(this, \"_freq\");\n    __publicField(this, \"_bias\");\n    __publicField(this, \"_distance\");\n    this._distance = colorDistanceCalculator;\n    this._pointArray = [];\n    this._sampleFactor = 1;\n    this._networkSize = colors;\n    this._distance.setWhitePoint(255 << networkBiasShift2, 255 << networkBiasShift2, 255 << networkBiasShift2, 255 << networkBiasShift2);\n  }\n  sample(pointContainer) {\n    this._pointArray = this._pointArray.concat(pointContainer.getPointArray());\n  }\n  *quantize() {\n    this._init();\n    yield* this._learn();\n    yield {\n      palette: this._buildPalette(),\n      progress: 100\n    };\n  }\n  _init() {\n    this._freq = [];\n    this._bias = [];\n    this._radPower = [];\n    this._network = [];\n    for (let i = 0; i < this._networkSize; i++) {\n      this._network[i] = new NeuronFloat((i << networkBiasShift2 + 8) / this._networkSize);\n      this._freq[i] = _NeuQuantFloat._initialBias / this._networkSize;\n      this._bias[i] = 0;\n    }\n  }\n  *_learn() {\n    let sampleFactor = this._sampleFactor;\n    const pointsNumber = this._pointArray.length;\n    if (pointsNumber < _NeuQuantFloat._minpicturebytes)\n      sampleFactor = 1;\n    const alphadec = 30 + (sampleFactor - 1) / 3;\n    const pointsToSample = pointsNumber / sampleFactor;\n    let delta = pointsToSample / _NeuQuantFloat._nCycles | 0;\n    let alpha = _NeuQuantFloat._initAlpha;\n    let radius = (this._networkSize >> 3) * _NeuQuantFloat._radiusBias;\n    let rad = radius >> _NeuQuantFloat._radiusBiasShift;\n    if (rad <= 1)\n      rad = 0;\n    for (let i = 0; i < rad; i++) {\n      this._radPower[i] = alpha * ((rad * rad - i * i) * _NeuQuantFloat._radBias / (rad * rad));\n    }\n    let step;\n    if (pointsNumber < _NeuQuantFloat._minpicturebytes) {\n      step = 1;\n    } else if (pointsNumber % _NeuQuantFloat._prime1 !== 0) {\n      step = _NeuQuantFloat._prime1;\n    } else if (pointsNumber % _NeuQuantFloat._prime2 !== 0) {\n      step = _NeuQuantFloat._prime2;\n    } else if (pointsNumber % _NeuQuantFloat._prime3 !== 0) {\n      step = _NeuQuantFloat._prime3;\n    } else {\n      step = _NeuQuantFloat._prime4;\n    }\n    const tracker = new ProgressTracker(pointsToSample, 99);\n    for (let i = 0, pointIndex = 0; i < pointsToSample; ) {\n      if (tracker.shouldNotify(i)) {\n        yield {\n          progress: tracker.progress\n        };\n      }\n      const point = this._pointArray[pointIndex];\n      const b = point.b << networkBiasShift2;\n      const g = point.g << networkBiasShift2;\n      const r = point.r << networkBiasShift2;\n      const a = point.a << networkBiasShift2;\n      const neuronIndex = this._contest(b, g, r, a);\n      this._alterSingle(alpha, neuronIndex, b, g, r, a);\n      if (rad !== 0)\n        this._alterNeighbour(rad, neuronIndex, b, g, r, a);\n      pointIndex += step;\n      if (pointIndex >= pointsNumber)\n        pointIndex -= pointsNumber;\n      i++;\n      if (delta === 0)\n        delta = 1;\n      if (i % delta === 0) {\n        alpha -= alpha / alphadec;\n        radius -= radius / _NeuQuantFloat._radiusDecrease;\n        rad = radius >> _NeuQuantFloat._radiusBiasShift;\n        if (rad <= 1)\n          rad = 0;\n        for (let j = 0; j < rad; j++) {\n          this._radPower[j] = alpha * ((rad * rad - j * j) * _NeuQuantFloat._radBias / (rad * rad));\n        }\n      }\n    }\n  }\n  _buildPalette() {\n    const palette = new Palette();\n    this._network.forEach((neuron) => {\n      palette.add(neuron.toPoint());\n    });\n    palette.sort();\n    return palette;\n  }\n  _alterNeighbour(rad, i, b, g, r, al) {\n    let lo = i - rad;\n    if (lo < -1)\n      lo = -1;\n    let hi = i + rad;\n    if (hi > this._networkSize)\n      hi = this._networkSize;\n    let j = i + 1;\n    let k = i - 1;\n    let m = 1;\n    while (j < hi || k > lo) {\n      const a = this._radPower[m++] / _NeuQuantFloat._alphaRadBias;\n      if (j < hi) {\n        const p = this._network[j++];\n        p.subtract(a * (p.r - r), a * (p.g - g), a * (p.b - b), a * (p.a - al));\n      }\n      if (k > lo) {\n        const p = this._network[k--];\n        p.subtract(a * (p.r - r), a * (p.g - g), a * (p.b - b), a * (p.a - al));\n      }\n    }\n  }\n  _alterSingle(alpha, i, b, g, r, a) {\n    alpha /= _NeuQuantFloat._initAlpha;\n    const n = this._network[i];\n    n.subtract(alpha * (n.r - r), alpha * (n.g - g), alpha * (n.b - b), alpha * (n.a - a));\n  }\n  _contest(b, g, r, al) {\n    const multiplier = 255 * 4 << networkBiasShift2;\n    let bestd = ~(1 << 31);\n    let bestbiasd = bestd;\n    let bestpos = -1;\n    let bestbiaspos = bestpos;\n    for (let i = 0; i < this._networkSize; i++) {\n      const n = this._network[i];\n      const dist = this._distance.calculateNormalized(n, { r, g, b, a: al }) * multiplier;\n      if (dist < bestd) {\n        bestd = dist;\n        bestpos = i;\n      }\n      const biasdist = dist - (this._bias[i] >> _NeuQuantFloat._initialBiasShift - networkBiasShift2);\n      if (biasdist < bestbiasd) {\n        bestbiasd = biasdist;\n        bestbiaspos = i;\n      }\n      const betafreq = this._freq[i] >> _NeuQuantFloat._betaShift;\n      this._freq[i] -= betafreq;\n      this._bias[i] += betafreq << _NeuQuantFloat._gammaShift;\n    }\n    this._freq[bestpos] += _NeuQuantFloat._beta;\n    this._bias[bestpos] -= _NeuQuantFloat._betaGamma;\n    return bestbiaspos;\n  }\n};\nvar NeuQuantFloat = _NeuQuantFloat;\n__publicField(NeuQuantFloat, \"_prime1\", 499);\n__publicField(NeuQuantFloat, \"_prime2\", 491);\n__publicField(NeuQuantFloat, \"_prime3\", 487);\n__publicField(NeuQuantFloat, \"_prime4\", 503);\n__publicField(NeuQuantFloat, \"_minpicturebytes\", _NeuQuantFloat._prime4);\n__publicField(NeuQuantFloat, \"_nCycles\", 100);\n__publicField(NeuQuantFloat, \"_initialBiasShift\", 16);\n__publicField(NeuQuantFloat, \"_initialBias\", 1 << _NeuQuantFloat._initialBiasShift);\n__publicField(NeuQuantFloat, \"_gammaShift\", 10);\n__publicField(NeuQuantFloat, \"_betaShift\", 10);\n__publicField(NeuQuantFloat, \"_beta\", _NeuQuantFloat._initialBias >> _NeuQuantFloat._betaShift);\n__publicField(NeuQuantFloat, \"_betaGamma\", _NeuQuantFloat._initialBias << _NeuQuantFloat._gammaShift - _NeuQuantFloat._betaShift);\n__publicField(NeuQuantFloat, \"_radiusBiasShift\", 6);\n__publicField(NeuQuantFloat, \"_radiusBias\", 1 << _NeuQuantFloat._radiusBiasShift);\n__publicField(NeuQuantFloat, \"_radiusDecrease\", 30);\n__publicField(NeuQuantFloat, \"_alphaBiasShift\", 10);\n__publicField(NeuQuantFloat, \"_initAlpha\", 1 << _NeuQuantFloat._alphaBiasShift);\n__publicField(NeuQuantFloat, \"_radBiasShift\", 8);\n__publicField(NeuQuantFloat, \"_radBias\", 1 << _NeuQuantFloat._radBiasShift);\n__publicField(NeuQuantFloat, \"_alphaRadBiasShift\", _NeuQuantFloat._alphaBiasShift + _NeuQuantFloat._radBiasShift);\n__publicField(NeuQuantFloat, \"_alphaRadBias\", 1 << _NeuQuantFloat._alphaRadBiasShift);\n\n// src/palette/rgbquant/colorHistogram.ts\nvar _ColorHistogram = class {\n  constructor(method, colors) {\n    __publicField(this, \"_method\");\n    __publicField(this, \"_hueStats\");\n    __publicField(this, \"_histogram\");\n    __publicField(this, \"_initColors\");\n    __publicField(this, \"_minHueCols\");\n    this._method = method;\n    this._minHueCols = colors << 2;\n    this._initColors = colors << 2;\n    this._hueStats = new HueStatistics(_ColorHistogram._hueGroups, this._minHueCols);\n    this._histogram = /* @__PURE__ */ Object.create(null);\n  }\n  sample(pointContainer) {\n    switch (this._method) {\n      case 1:\n        this._colorStats1D(pointContainer);\n        break;\n      case 2:\n        this._colorStats2D(pointContainer);\n        break;\n    }\n  }\n  getImportanceSortedColorsIDXI32() {\n    const sorted = stableSort(Object.keys(this._histogram), (a, b) => this._histogram[b] - this._histogram[a]);\n    if (sorted.length === 0) {\n      return [];\n    }\n    let idxi32;\n    switch (this._method) {\n      case 1:\n        const initialColorsLimit = Math.min(sorted.length, this._initColors);\n        const last = sorted[initialColorsLimit - 1];\n        const freq = this._histogram[last];\n        idxi32 = sorted.slice(0, initialColorsLimit);\n        let pos = initialColorsLimit;\n        const len = sorted.length;\n        while (pos < len && this._histogram[sorted[pos]] === freq) {\n          idxi32.push(sorted[pos++]);\n        }\n        this._hueStats.injectIntoArray(idxi32);\n        break;\n      case 2:\n        idxi32 = sorted;\n        break;\n      default:\n        throw new Error(\"Incorrect method\");\n    }\n    return idxi32.map((v) => +v);\n  }\n  _colorStats1D(pointContainer) {\n    const histG = this._histogram;\n    const pointArray = pointContainer.getPointArray();\n    const len = pointArray.length;\n    for (let i = 0; i < len; i++) {\n      const col = pointArray[i].uint32;\n      this._hueStats.check(col);\n      if (col in histG) {\n        histG[col]++;\n      } else {\n        histG[col] = 1;\n      }\n    }\n  }\n  _colorStats2D(pointContainer) {\n    const width = pointContainer.getWidth();\n    const height = pointContainer.getHeight();\n    const pointArray = pointContainer.getPointArray();\n    const boxW = _ColorHistogram._boxSize[0];\n    const boxH = _ColorHistogram._boxSize[1];\n    const area = boxW * boxH;\n    const boxes = this._makeBoxes(width, height, boxW, boxH);\n    const histG = this._histogram;\n    boxes.forEach((box) => {\n      let effc = Math.round(box.w * box.h / area) * _ColorHistogram._boxPixels;\n      if (effc < 2)\n        effc = 2;\n      const histL = {};\n      this._iterateBox(box, width, (i) => {\n        const col = pointArray[i].uint32;\n        this._hueStats.check(col);\n        if (col in histG) {\n          histG[col]++;\n        } else if (col in histL) {\n          if (++histL[col] >= effc) {\n            histG[col] = histL[col];\n          }\n        } else {\n          histL[col] = 1;\n        }\n      });\n    });\n    this._hueStats.injectIntoDictionary(histG);\n  }\n  _iterateBox(bbox, wid, fn) {\n    const b = bbox;\n    const i0 = b.y * wid + b.x;\n    const i1 = (b.y + b.h - 1) * wid + (b.x + b.w - 1);\n    const incr = wid - b.w + 1;\n    let cnt = 0;\n    let i = i0;\n    do {\n      fn.call(this, i);\n      i += ++cnt % b.w === 0 ? incr : 1;\n    } while (i <= i1);\n  }\n  _makeBoxes(width, height, stepX, stepY) {\n    const wrem = width % stepX;\n    const hrem = height % stepY;\n    const xend = width - wrem;\n    const yend = height - hrem;\n    const boxesArray = [];\n    for (let y2 = 0; y2 < height; y2 += stepY) {\n      for (let x2 = 0; x2 < width; x2 += stepX) {\n        boxesArray.push({\n          x: x2,\n          y: y2,\n          w: x2 === xend ? wrem : stepX,\n          h: y2 === yend ? hrem : stepY\n        });\n      }\n    }\n    return boxesArray;\n  }\n};\nvar ColorHistogram = _ColorHistogram;\n__publicField(ColorHistogram, \"_boxSize\", [64, 64]);\n__publicField(ColorHistogram, \"_boxPixels\", 2);\n__publicField(ColorHistogram, \"_hueGroups\", 10);\n\n// src/palette/rgbquant/rgbquant.ts\nvar RemovedColor = class {\n  constructor(index, color, distance) {\n    __publicField(this, \"index\");\n    __publicField(this, \"color\");\n    __publicField(this, \"distance\");\n    this.index = index;\n    this.color = color;\n    this.distance = distance;\n  }\n};\nvar RGBQuant = class extends AbstractPaletteQuantizer {\n  constructor(colorDistanceCalculator, colors = 256, method = 2) {\n    super();\n    __publicField(this, \"_colors\");\n    __publicField(this, \"_initialDistance\");\n    __publicField(this, \"_distanceIncrement\");\n    __publicField(this, \"_histogram\");\n    __publicField(this, \"_distance\");\n    this._distance = colorDistanceCalculator;\n    this._colors = colors;\n    this._histogram = new ColorHistogram(method, colors);\n    this._initialDistance = 0.01;\n    this._distanceIncrement = 5e-3;\n  }\n  sample(image) {\n    this._histogram.sample(image);\n  }\n  *quantize() {\n    const idxi32 = this._histogram.getImportanceSortedColorsIDXI32();\n    if (idxi32.length === 0) {\n      throw new Error(\"No colors in image\");\n    }\n    yield* this._buildPalette(idxi32);\n  }\n  *_buildPalette(idxi32) {\n    const palette = new Palette();\n    const colorArray = palette.getPointContainer().getPointArray();\n    const usageArray = new Array(idxi32.length);\n    for (let i = 0; i < idxi32.length; i++) {\n      colorArray.push(Point.createByUint32(idxi32[i]));\n      usageArray[i] = 1;\n    }\n    const len = colorArray.length;\n    const memDist = [];\n    let palLen = len;\n    let thold = this._initialDistance;\n    const tracker = new ProgressTracker(palLen - this._colors, 99);\n    while (palLen > this._colors) {\n      memDist.length = 0;\n      for (let i = 0; i < len; i++) {\n        if (tracker.shouldNotify(len - palLen)) {\n          yield {\n            progress: tracker.progress\n          };\n        }\n        if (usageArray[i] === 0)\n          continue;\n        const pxi = colorArray[i];\n        for (let j = i + 1; j < len; j++) {\n          if (usageArray[j] === 0)\n            continue;\n          const pxj = colorArray[j];\n          const dist = this._distance.calculateNormalized(pxi, pxj);\n          if (dist < thold) {\n            memDist.push(new RemovedColor(j, pxj, dist));\n            usageArray[j] = 0;\n            palLen--;\n          }\n        }\n      }\n      thold += palLen > this._colors * 3 ? this._initialDistance : this._distanceIncrement;\n    }\n    if (palLen < this._colors) {\n      stableSort(memDist, (a, b) => b.distance - a.distance);\n      let k = 0;\n      while (palLen < this._colors && k < memDist.length) {\n        const removedColor = memDist[k];\n        usageArray[removedColor.index] = 1;\n        palLen++;\n        k++;\n      }\n    }\n    let colors = colorArray.length;\n    for (let colorIndex = colors - 1; colorIndex >= 0; colorIndex--) {\n      if (usageArray[colorIndex] === 0) {\n        if (colorIndex !== colors - 1) {\n          colorArray[colorIndex] = colorArray[colors - 1];\n        }\n        --colors;\n      }\n    }\n    colorArray.length = colors;\n    palette.sort();\n    yield {\n      palette,\n      progress: 100\n    };\n  }\n};\n\n// src/palette/wu/wuQuant.ts\nfunction createArray1D(dimension1) {\n  const a = [];\n  for (let k = 0; k < dimension1; k++) {\n    a[k] = 0;\n  }\n  return a;\n}\nfunction createArray4D(dimension1, dimension2, dimension3, dimension4) {\n  const a = new Array(dimension1);\n  for (let i = 0; i < dimension1; i++) {\n    a[i] = new Array(dimension2);\n    for (let j = 0; j < dimension2; j++) {\n      a[i][j] = new Array(dimension3);\n      for (let k = 0; k < dimension3; k++) {\n        a[i][j][k] = new Array(dimension4);\n        for (let l = 0; l < dimension4; l++) {\n          a[i][j][k][l] = 0;\n        }\n      }\n    }\n  }\n  return a;\n}\nfunction createArray3D(dimension1, dimension2, dimension3) {\n  const a = new Array(dimension1);\n  for (let i = 0; i < dimension1; i++) {\n    a[i] = new Array(dimension2);\n    for (let j = 0; j < dimension2; j++) {\n      a[i][j] = new Array(dimension3);\n      for (let k = 0; k < dimension3; k++) {\n        a[i][j][k] = 0;\n      }\n    }\n  }\n  return a;\n}\nfunction fillArray3D(a, dimension1, dimension2, dimension3, value) {\n  for (let i = 0; i < dimension1; i++) {\n    a[i] = [];\n    for (let j = 0; j < dimension2; j++) {\n      a[i][j] = [];\n      for (let k = 0; k < dimension3; k++) {\n        a[i][j][k] = value;\n      }\n    }\n  }\n}\nfunction fillArray1D(a, dimension1, value) {\n  for (let i = 0; i < dimension1; i++) {\n    a[i] = value;\n  }\n}\nvar WuColorCube = class {\n  constructor() {\n    __publicField(this, \"redMinimum\");\n    __publicField(this, \"redMaximum\");\n    __publicField(this, \"greenMinimum\");\n    __publicField(this, \"greenMaximum\");\n    __publicField(this, \"blueMinimum\");\n    __publicField(this, \"blueMaximum\");\n    __publicField(this, \"volume\");\n    __publicField(this, \"alphaMinimum\");\n    __publicField(this, \"alphaMaximum\");\n  }\n};\nvar _WuQuant = class extends AbstractPaletteQuantizer {\n  constructor(colorDistanceCalculator, colors = 256, significantBitsPerChannel = 5) {\n    super();\n    __publicField(this, \"_reds\");\n    __publicField(this, \"_greens\");\n    __publicField(this, \"_blues\");\n    __publicField(this, \"_alphas\");\n    __publicField(this, \"_sums\");\n    __publicField(this, \"_weights\");\n    __publicField(this, \"_momentsRed\");\n    __publicField(this, \"_momentsGreen\");\n    __publicField(this, \"_momentsBlue\");\n    __publicField(this, \"_momentsAlpha\");\n    __publicField(this, \"_moments\");\n    __publicField(this, \"_table\");\n    __publicField(this, \"_pixels\");\n    __publicField(this, \"_cubes\");\n    __publicField(this, \"_colors\");\n    __publicField(this, \"_significantBitsPerChannel\");\n    __publicField(this, \"_maxSideIndex\");\n    __publicField(this, \"_alphaMaxSideIndex\");\n    __publicField(this, \"_sideSize\");\n    __publicField(this, \"_alphaSideSize\");\n    __publicField(this, \"_distance\");\n    this._distance = colorDistanceCalculator;\n    this._setQuality(significantBitsPerChannel);\n    this._initialize(colors);\n  }\n  sample(image) {\n    const pointArray = image.getPointArray();\n    for (let i = 0, l = pointArray.length; i < l; i++) {\n      this._addColor(pointArray[i]);\n    }\n    this._pixels = this._pixels.concat(pointArray);\n  }\n  *quantize() {\n    yield* this._preparePalette();\n    const palette = new Palette();\n    for (let paletteIndex = 0; paletteIndex < this._colors; paletteIndex++) {\n      if (this._sums[paletteIndex] > 0) {\n        const sum = this._sums[paletteIndex];\n        const r = this._reds[paletteIndex] / sum;\n        const g = this._greens[paletteIndex] / sum;\n        const b = this._blues[paletteIndex] / sum;\n        const a = this._alphas[paletteIndex] / sum;\n        const color = Point.createByRGBA(r | 0, g | 0, b | 0, a | 0);\n        palette.add(color);\n      }\n    }\n    palette.sort();\n    yield {\n      palette,\n      progress: 100\n    };\n  }\n  *_preparePalette() {\n    yield* this._calculateMoments();\n    let next = 0;\n    const volumeVariance = createArray1D(this._colors);\n    for (let cubeIndex = 1; cubeIndex < this._colors; ++cubeIndex) {\n      if (this._cut(this._cubes[next], this._cubes[cubeIndex])) {\n        volumeVariance[next] = this._cubes[next].volume > 1 ? this._calculateVariance(this._cubes[next]) : 0;\n        volumeVariance[cubeIndex] = this._cubes[cubeIndex].volume > 1 ? this._calculateVariance(this._cubes[cubeIndex]) : 0;\n      } else {\n        volumeVariance[next] = 0;\n        cubeIndex--;\n      }\n      next = 0;\n      let temp = volumeVariance[0];\n      for (let index = 1; index <= cubeIndex; ++index) {\n        if (volumeVariance[index] > temp) {\n          temp = volumeVariance[index];\n          next = index;\n        }\n      }\n      if (temp <= 0) {\n        this._colors = cubeIndex + 1;\n        break;\n      }\n    }\n    const lookupRed = [];\n    const lookupGreen = [];\n    const lookupBlue = [];\n    const lookupAlpha = [];\n    for (let k = 0; k < this._colors; ++k) {\n      const weight = _WuQuant._volume(this._cubes[k], this._weights);\n      if (weight > 0) {\n        lookupRed[k] = _WuQuant._volume(this._cubes[k], this._momentsRed) / weight | 0;\n        lookupGreen[k] = _WuQuant._volume(this._cubes[k], this._momentsGreen) / weight | 0;\n        lookupBlue[k] = _WuQuant._volume(this._cubes[k], this._momentsBlue) / weight | 0;\n        lookupAlpha[k] = _WuQuant._volume(this._cubes[k], this._momentsAlpha) / weight | 0;\n      } else {\n        lookupRed[k] = 0;\n        lookupGreen[k] = 0;\n        lookupBlue[k] = 0;\n        lookupAlpha[k] = 0;\n      }\n    }\n    this._reds = createArray1D(this._colors + 1);\n    this._greens = createArray1D(this._colors + 1);\n    this._blues = createArray1D(this._colors + 1);\n    this._alphas = createArray1D(this._colors + 1);\n    this._sums = createArray1D(this._colors + 1);\n    for (let index = 0, l = this._pixels.length; index < l; index++) {\n      const color = this._pixels[index];\n      const match = -1;\n      let bestMatch = match;\n      let bestDistance = Number.MAX_VALUE;\n      for (let lookup = 0; lookup < this._colors; lookup++) {\n        const foundRed = lookupRed[lookup];\n        const foundGreen = lookupGreen[lookup];\n        const foundBlue = lookupBlue[lookup];\n        const foundAlpha = lookupAlpha[lookup];\n        const distance = this._distance.calculateRaw(foundRed, foundGreen, foundBlue, foundAlpha, color.r, color.g, color.b, color.a);\n        if (distance < bestDistance) {\n          bestDistance = distance;\n          bestMatch = lookup;\n        }\n      }\n      this._reds[bestMatch] += color.r;\n      this._greens[bestMatch] += color.g;\n      this._blues[bestMatch] += color.b;\n      this._alphas[bestMatch] += color.a;\n      this._sums[bestMatch]++;\n    }\n  }\n  _addColor(color) {\n    const bitsToRemove = 8 - this._significantBitsPerChannel;\n    const indexRed = (color.r >> bitsToRemove) + 1;\n    const indexGreen = (color.g >> bitsToRemove) + 1;\n    const indexBlue = (color.b >> bitsToRemove) + 1;\n    const indexAlpha = (color.a >> bitsToRemove) + 1;\n    this._weights[indexAlpha][indexRed][indexGreen][indexBlue]++;\n    this._momentsRed[indexAlpha][indexRed][indexGreen][indexBlue] += color.r;\n    this._momentsGreen[indexAlpha][indexRed][indexGreen][indexBlue] += color.g;\n    this._momentsBlue[indexAlpha][indexRed][indexGreen][indexBlue] += color.b;\n    this._momentsAlpha[indexAlpha][indexRed][indexGreen][indexBlue] += color.a;\n    this._moments[indexAlpha][indexRed][indexGreen][indexBlue] += this._table[color.r] + this._table[color.g] + this._table[color.b] + this._table[color.a];\n  }\n  *_calculateMoments() {\n    const area = [];\n    const areaRed = [];\n    const areaGreen = [];\n    const areaBlue = [];\n    const areaAlpha = [];\n    const area2 = [];\n    const xarea = createArray3D(this._sideSize, this._sideSize, this._sideSize);\n    const xareaRed = createArray3D(this._sideSize, this._sideSize, this._sideSize);\n    const xareaGreen = createArray3D(this._sideSize, this._sideSize, this._sideSize);\n    const xareaBlue = createArray3D(this._sideSize, this._sideSize, this._sideSize);\n    const xareaAlpha = createArray3D(this._sideSize, this._sideSize, this._sideSize);\n    const xarea2 = createArray3D(this._sideSize, this._sideSize, this._sideSize);\n    let trackerProgress = 0;\n    const tracker = new ProgressTracker(this._alphaMaxSideIndex * this._maxSideIndex, 99);\n    for (let alphaIndex = 1; alphaIndex <= this._alphaMaxSideIndex; ++alphaIndex) {\n      fillArray3D(xarea, this._sideSize, this._sideSize, this._sideSize, 0);\n      fillArray3D(xareaRed, this._sideSize, this._sideSize, this._sideSize, 0);\n      fillArray3D(xareaGreen, this._sideSize, this._sideSize, this._sideSize, 0);\n      fillArray3D(xareaBlue, this._sideSize, this._sideSize, this._sideSize, 0);\n      fillArray3D(xareaAlpha, this._sideSize, this._sideSize, this._sideSize, 0);\n      fillArray3D(xarea2, this._sideSize, this._sideSize, this._sideSize, 0);\n      for (let redIndex = 1; redIndex <= this._maxSideIndex; ++redIndex, ++trackerProgress) {\n        if (tracker.shouldNotify(trackerProgress)) {\n          yield {\n            progress: tracker.progress\n          };\n        }\n        fillArray1D(area, this._sideSize, 0);\n        fillArray1D(areaRed, this._sideSize, 0);\n        fillArray1D(areaGreen, this._sideSize, 0);\n        fillArray1D(areaBlue, this._sideSize, 0);\n        fillArray1D(areaAlpha, this._sideSize, 0);\n        fillArray1D(area2, this._sideSize, 0);\n        for (let greenIndex = 1; greenIndex <= this._maxSideIndex; ++greenIndex) {\n          let line = 0;\n          let lineRed = 0;\n          let lineGreen = 0;\n          let lineBlue = 0;\n          let lineAlpha = 0;\n          let line2 = 0;\n          for (let blueIndex = 1; blueIndex <= this._maxSideIndex; ++blueIndex) {\n            line += this._weights[alphaIndex][redIndex][greenIndex][blueIndex];\n            lineRed += this._momentsRed[alphaIndex][redIndex][greenIndex][blueIndex];\n            lineGreen += this._momentsGreen[alphaIndex][redIndex][greenIndex][blueIndex];\n            lineBlue += this._momentsBlue[alphaIndex][redIndex][greenIndex][blueIndex];\n            lineAlpha += this._momentsAlpha[alphaIndex][redIndex][greenIndex][blueIndex];\n            line2 += this._moments[alphaIndex][redIndex][greenIndex][blueIndex];\n            area[blueIndex] += line;\n            areaRed[blueIndex] += lineRed;\n            areaGreen[blueIndex] += lineGreen;\n            areaBlue[blueIndex] += lineBlue;\n            areaAlpha[blueIndex] += lineAlpha;\n            area2[blueIndex] += line2;\n            xarea[redIndex][greenIndex][blueIndex] = xarea[redIndex - 1][greenIndex][blueIndex] + area[blueIndex];\n            xareaRed[redIndex][greenIndex][blueIndex] = xareaRed[redIndex - 1][greenIndex][blueIndex] + areaRed[blueIndex];\n            xareaGreen[redIndex][greenIndex][blueIndex] = xareaGreen[redIndex - 1][greenIndex][blueIndex] + areaGreen[blueIndex];\n            xareaBlue[redIndex][greenIndex][blueIndex] = xareaBlue[redIndex - 1][greenIndex][blueIndex] + areaBlue[blueIndex];\n            xareaAlpha[redIndex][greenIndex][blueIndex] = xareaAlpha[redIndex - 1][greenIndex][blueIndex] + areaAlpha[blueIndex];\n            xarea2[redIndex][greenIndex][blueIndex] = xarea2[redIndex - 1][greenIndex][blueIndex] + area2[blueIndex];\n            this._weights[alphaIndex][redIndex][greenIndex][blueIndex] = this._weights[alphaIndex - 1][redIndex][greenIndex][blueIndex] + xarea[redIndex][greenIndex][blueIndex];\n            this._momentsRed[alphaIndex][redIndex][greenIndex][blueIndex] = this._momentsRed[alphaIndex - 1][redIndex][greenIndex][blueIndex] + xareaRed[redIndex][greenIndex][blueIndex];\n            this._momentsGreen[alphaIndex][redIndex][greenIndex][blueIndex] = this._momentsGreen[alphaIndex - 1][redIndex][greenIndex][blueIndex] + xareaGreen[redIndex][greenIndex][blueIndex];\n            this._momentsBlue[alphaIndex][redIndex][greenIndex][blueIndex] = this._momentsBlue[alphaIndex - 1][redIndex][greenIndex][blueIndex] + xareaBlue[redIndex][greenIndex][blueIndex];\n            this._momentsAlpha[alphaIndex][redIndex][greenIndex][blueIndex] = this._momentsAlpha[alphaIndex - 1][redIndex][greenIndex][blueIndex] + xareaAlpha[redIndex][greenIndex][blueIndex];\n            this._moments[alphaIndex][redIndex][greenIndex][blueIndex] = this._moments[alphaIndex - 1][redIndex][greenIndex][blueIndex] + xarea2[redIndex][greenIndex][blueIndex];\n          }\n        }\n      }\n    }\n  }\n  static _volumeFloat(cube, moment) {\n    return moment[cube.alphaMaximum][cube.redMaximum][cube.greenMaximum][cube.blueMaximum] - moment[cube.alphaMaximum][cube.redMaximum][cube.greenMinimum][cube.blueMaximum] - moment[cube.alphaMaximum][cube.redMinimum][cube.greenMaximum][cube.blueMaximum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] - moment[cube.alphaMinimum][cube.redMaximum][cube.greenMaximum][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMaximum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] - (moment[cube.alphaMaximum][cube.redMaximum][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMaximum][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMaximum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] - moment[cube.alphaMaximum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum]);\n  }\n  static _volume(cube, moment) {\n    return _WuQuant._volumeFloat(cube, moment) | 0;\n  }\n  static _top(cube, direction, position, moment) {\n    let result;\n    switch (direction) {\n      case _WuQuant._alpha:\n        result = moment[position][cube.redMaximum][cube.greenMaximum][cube.blueMaximum] - moment[position][cube.redMaximum][cube.greenMinimum][cube.blueMaximum] - moment[position][cube.redMinimum][cube.greenMaximum][cube.blueMaximum] + moment[position][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] - (moment[position][cube.redMaximum][cube.greenMaximum][cube.blueMinimum] - moment[position][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] - moment[position][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] + moment[position][cube.redMinimum][cube.greenMinimum][cube.blueMinimum]);\n        break;\n      case _WuQuant._red:\n        result = moment[cube.alphaMaximum][position][cube.greenMaximum][cube.blueMaximum] - moment[cube.alphaMaximum][position][cube.greenMinimum][cube.blueMaximum] - moment[cube.alphaMinimum][position][cube.greenMaximum][cube.blueMaximum] + moment[cube.alphaMinimum][position][cube.greenMinimum][cube.blueMaximum] - (moment[cube.alphaMaximum][position][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMaximum][position][cube.greenMinimum][cube.blueMinimum] - moment[cube.alphaMinimum][position][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMinimum][position][cube.greenMinimum][cube.blueMinimum]);\n        break;\n      case _WuQuant._green:\n        result = moment[cube.alphaMaximum][cube.redMaximum][position][cube.blueMaximum] - moment[cube.alphaMaximum][cube.redMinimum][position][cube.blueMaximum] - moment[cube.alphaMinimum][cube.redMaximum][position][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMinimum][position][cube.blueMaximum] - (moment[cube.alphaMaximum][cube.redMaximum][position][cube.blueMinimum] - moment[cube.alphaMaximum][cube.redMinimum][position][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMaximum][position][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMinimum][position][cube.blueMinimum]);\n        break;\n      case _WuQuant._blue:\n        result = moment[cube.alphaMaximum][cube.redMaximum][cube.greenMaximum][position] - moment[cube.alphaMaximum][cube.redMaximum][cube.greenMinimum][position] - moment[cube.alphaMaximum][cube.redMinimum][cube.greenMaximum][position] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][position] - (moment[cube.alphaMinimum][cube.redMaximum][cube.greenMaximum][position] - moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][position] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][position] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][position]);\n        break;\n      default:\n        throw new Error(\"impossible\");\n    }\n    return result | 0;\n  }\n  static _bottom(cube, direction, moment) {\n    switch (direction) {\n      case _WuQuant._alpha:\n        return -moment[cube.alphaMinimum][cube.redMaximum][cube.greenMaximum][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMaximum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] - (-moment[cube.alphaMinimum][cube.redMaximum][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum]);\n      case _WuQuant._red:\n        return -moment[cube.alphaMaximum][cube.redMinimum][cube.greenMaximum][cube.blueMaximum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMaximum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] - (-moment[cube.alphaMaximum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum]);\n      case _WuQuant._green:\n        return -moment[cube.alphaMaximum][cube.redMaximum][cube.greenMinimum][cube.blueMaximum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMaximum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] - (-moment[cube.alphaMaximum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum]);\n      case _WuQuant._blue:\n        return -moment[cube.alphaMaximum][cube.redMaximum][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMaximum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum] - (-moment[cube.alphaMinimum][cube.redMaximum][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum]);\n      default:\n        return 0;\n    }\n  }\n  _calculateVariance(cube) {\n    const volumeRed = _WuQuant._volume(cube, this._momentsRed);\n    const volumeGreen = _WuQuant._volume(cube, this._momentsGreen);\n    const volumeBlue = _WuQuant._volume(cube, this._momentsBlue);\n    const volumeAlpha = _WuQuant._volume(cube, this._momentsAlpha);\n    const volumeMoment = _WuQuant._volumeFloat(cube, this._moments);\n    const volumeWeight = _WuQuant._volume(cube, this._weights);\n    const distance = volumeRed * volumeRed + volumeGreen * volumeGreen + volumeBlue * volumeBlue + volumeAlpha * volumeAlpha;\n    return volumeMoment - distance / volumeWeight;\n  }\n  _maximize(cube, direction, first, last, wholeRed, wholeGreen, wholeBlue, wholeAlpha, wholeWeight) {\n    const bottomRed = _WuQuant._bottom(cube, direction, this._momentsRed) | 0;\n    const bottomGreen = _WuQuant._bottom(cube, direction, this._momentsGreen) | 0;\n    const bottomBlue = _WuQuant._bottom(cube, direction, this._momentsBlue) | 0;\n    const bottomAlpha = _WuQuant._bottom(cube, direction, this._momentsAlpha) | 0;\n    const bottomWeight = _WuQuant._bottom(cube, direction, this._weights) | 0;\n    let result = 0;\n    let cutPosition = -1;\n    for (let position = first; position < last; ++position) {\n      let halfRed = bottomRed + _WuQuant._top(cube, direction, position, this._momentsRed);\n      let halfGreen = bottomGreen + _WuQuant._top(cube, direction, position, this._momentsGreen);\n      let halfBlue = bottomBlue + _WuQuant._top(cube, direction, position, this._momentsBlue);\n      let halfAlpha = bottomAlpha + _WuQuant._top(cube, direction, position, this._momentsAlpha);\n      let halfWeight = bottomWeight + _WuQuant._top(cube, direction, position, this._weights);\n      if (halfWeight !== 0) {\n        let halfDistance = halfRed * halfRed + halfGreen * halfGreen + halfBlue * halfBlue + halfAlpha * halfAlpha;\n        let temp = halfDistance / halfWeight;\n        halfRed = wholeRed - halfRed;\n        halfGreen = wholeGreen - halfGreen;\n        halfBlue = wholeBlue - halfBlue;\n        halfAlpha = wholeAlpha - halfAlpha;\n        halfWeight = wholeWeight - halfWeight;\n        if (halfWeight !== 0) {\n          halfDistance = halfRed * halfRed + halfGreen * halfGreen + halfBlue * halfBlue + halfAlpha * halfAlpha;\n          temp += halfDistance / halfWeight;\n          if (temp > result) {\n            result = temp;\n            cutPosition = position;\n          }\n        }\n      }\n    }\n    return { max: result, position: cutPosition };\n  }\n  _cut(first, second) {\n    let direction;\n    const wholeRed = _WuQuant._volume(first, this._momentsRed);\n    const wholeGreen = _WuQuant._volume(first, this._momentsGreen);\n    const wholeBlue = _WuQuant._volume(first, this._momentsBlue);\n    const wholeAlpha = _WuQuant._volume(first, this._momentsAlpha);\n    const wholeWeight = _WuQuant._volume(first, this._weights);\n    const red = this._maximize(first, _WuQuant._red, first.redMinimum + 1, first.redMaximum, wholeRed, wholeGreen, wholeBlue, wholeAlpha, wholeWeight);\n    const green = this._maximize(first, _WuQuant._green, first.greenMinimum + 1, first.greenMaximum, wholeRed, wholeGreen, wholeBlue, wholeAlpha, wholeWeight);\n    const blue = this._maximize(first, _WuQuant._blue, first.blueMinimum + 1, first.blueMaximum, wholeRed, wholeGreen, wholeBlue, wholeAlpha, wholeWeight);\n    const alpha = this._maximize(first, _WuQuant._alpha, first.alphaMinimum + 1, first.alphaMaximum, wholeRed, wholeGreen, wholeBlue, wholeAlpha, wholeWeight);\n    if (alpha.max >= red.max && alpha.max >= green.max && alpha.max >= blue.max) {\n      direction = _WuQuant._alpha;\n      if (alpha.position < 0)\n        return false;\n    } else if (red.max >= alpha.max && red.max >= green.max && red.max >= blue.max) {\n      direction = _WuQuant._red;\n    } else if (green.max >= alpha.max && green.max >= red.max && green.max >= blue.max) {\n      direction = _WuQuant._green;\n    } else {\n      direction = _WuQuant._blue;\n    }\n    second.redMaximum = first.redMaximum;\n    second.greenMaximum = first.greenMaximum;\n    second.blueMaximum = first.blueMaximum;\n    second.alphaMaximum = first.alphaMaximum;\n    switch (direction) {\n      case _WuQuant._red:\n        second.redMinimum = first.redMaximum = red.position;\n        second.greenMinimum = first.greenMinimum;\n        second.blueMinimum = first.blueMinimum;\n        second.alphaMinimum = first.alphaMinimum;\n        break;\n      case _WuQuant._green:\n        second.greenMinimum = first.greenMaximum = green.position;\n        second.redMinimum = first.redMinimum;\n        second.blueMinimum = first.blueMinimum;\n        second.alphaMinimum = first.alphaMinimum;\n        break;\n      case _WuQuant._blue:\n        second.blueMinimum = first.blueMaximum = blue.position;\n        second.redMinimum = first.redMinimum;\n        second.greenMinimum = first.greenMinimum;\n        second.alphaMinimum = first.alphaMinimum;\n        break;\n      case _WuQuant._alpha:\n        second.alphaMinimum = first.alphaMaximum = alpha.position;\n        second.blueMinimum = first.blueMinimum;\n        second.redMinimum = first.redMinimum;\n        second.greenMinimum = first.greenMinimum;\n        break;\n    }\n    first.volume = (first.redMaximum - first.redMinimum) * (first.greenMaximum - first.greenMinimum) * (first.blueMaximum - first.blueMinimum) * (first.alphaMaximum - first.alphaMinimum);\n    second.volume = (second.redMaximum - second.redMinimum) * (second.greenMaximum - second.greenMinimum) * (second.blueMaximum - second.blueMinimum) * (second.alphaMaximum - second.alphaMinimum);\n    return true;\n  }\n  _initialize(colors) {\n    this._colors = colors;\n    this._cubes = [];\n    for (let cubeIndex = 0; cubeIndex < colors; cubeIndex++) {\n      this._cubes[cubeIndex] = new WuColorCube();\n    }\n    this._cubes[0].redMinimum = 0;\n    this._cubes[0].greenMinimum = 0;\n    this._cubes[0].blueMinimum = 0;\n    this._cubes[0].alphaMinimum = 0;\n    this._cubes[0].redMaximum = this._maxSideIndex;\n    this._cubes[0].greenMaximum = this._maxSideIndex;\n    this._cubes[0].blueMaximum = this._maxSideIndex;\n    this._cubes[0].alphaMaximum = this._alphaMaxSideIndex;\n    this._weights = createArray4D(this._alphaSideSize, this._sideSize, this._sideSize, this._sideSize);\n    this._momentsRed = createArray4D(this._alphaSideSize, this._sideSize, this._sideSize, this._sideSize);\n    this._momentsGreen = createArray4D(this._alphaSideSize, this._sideSize, this._sideSize, this._sideSize);\n    this._momentsBlue = createArray4D(this._alphaSideSize, this._sideSize, this._sideSize, this._sideSize);\n    this._momentsAlpha = createArray4D(this._alphaSideSize, this._sideSize, this._sideSize, this._sideSize);\n    this._moments = createArray4D(this._alphaSideSize, this._sideSize, this._sideSize, this._sideSize);\n    this._table = [];\n    for (let tableIndex = 0; tableIndex < 256; ++tableIndex) {\n      this._table[tableIndex] = tableIndex * tableIndex;\n    }\n    this._pixels = [];\n  }\n  _setQuality(significantBitsPerChannel = 5) {\n    this._significantBitsPerChannel = significantBitsPerChannel;\n    this._maxSideIndex = 1 << this._significantBitsPerChannel;\n    this._alphaMaxSideIndex = this._maxSideIndex;\n    this._sideSize = this._maxSideIndex + 1;\n    this._alphaSideSize = this._alphaMaxSideIndex + 1;\n  }\n};\nvar WuQuant = _WuQuant;\n__publicField(WuQuant, \"_alpha\", 3);\n__publicField(WuQuant, \"_red\", 2);\n__publicField(WuQuant, \"_green\", 1);\n__publicField(WuQuant, \"_blue\", 0);\n\n// src/image/index.ts\nvar image_exports = {};\n__export(image_exports, {\n  AbstractImageQuantizer: () => AbstractImageQuantizer,\n  ErrorDiffusionArray: () => ErrorDiffusionArray,\n  ErrorDiffusionArrayKernel: () => ErrorDiffusionArrayKernel,\n  ErrorDiffusionRiemersma: () => ErrorDiffusionRiemersma,\n  NearestColor: () => NearestColor\n});\n\n// src/image/imageQuantizer.ts\nvar AbstractImageQuantizer = class {\n  quantizeSync(pointContainer, palette) {\n    for (const value of this.quantize(pointContainer, palette)) {\n      if (value.pointContainer) {\n        return value.pointContainer;\n      }\n    }\n    throw new Error(\"unreachable\");\n  }\n};\n\n// src/image/nearestColor.ts\nvar NearestColor = class extends AbstractImageQuantizer {\n  constructor(colorDistanceCalculator) {\n    super();\n    __publicField(this, \"_distance\");\n    this._distance = colorDistanceCalculator;\n  }\n  *quantize(pointContainer, palette) {\n    const pointArray = pointContainer.getPointArray();\n    const width = pointContainer.getWidth();\n    const height = pointContainer.getHeight();\n    const tracker = new ProgressTracker(height, 99);\n    for (let y2 = 0; y2 < height; y2++) {\n      if (tracker.shouldNotify(y2)) {\n        yield {\n          progress: tracker.progress\n        };\n      }\n      for (let x2 = 0, idx = y2 * width; x2 < width; x2++, idx++) {\n        const point = pointArray[idx];\n        point.from(palette.getNearestColor(this._distance, point));\n      }\n    }\n    yield {\n      pointContainer,\n      progress: 100\n    };\n  }\n};\n\n// src/image/array.ts\nvar ErrorDiffusionArrayKernel = /* @__PURE__ */ ((ErrorDiffusionArrayKernel2) => {\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"FloydSteinberg\"] = 0] = \"FloydSteinberg\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"FalseFloydSteinberg\"] = 1] = \"FalseFloydSteinberg\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"Stucki\"] = 2] = \"Stucki\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"Atkinson\"] = 3] = \"Atkinson\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"Jarvis\"] = 4] = \"Jarvis\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"Burkes\"] = 5] = \"Burkes\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"Sierra\"] = 6] = \"Sierra\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"TwoSierra\"] = 7] = \"TwoSierra\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"SierraLite\"] = 8] = \"SierraLite\";\n  return ErrorDiffusionArrayKernel2;\n})(ErrorDiffusionArrayKernel || {});\nvar ErrorDiffusionArray = class extends AbstractImageQuantizer {\n  constructor(colorDistanceCalculator, kernel, serpentine = true, minimumColorDistanceToDither = 0, calculateErrorLikeGIMP = false) {\n    super();\n    __publicField(this, \"_minColorDistance\");\n    __publicField(this, \"_serpentine\");\n    __publicField(this, \"_kernel\");\n    __publicField(this, \"_calculateErrorLikeGIMP\");\n    __publicField(this, \"_distance\");\n    this._setKernel(kernel);\n    this._distance = colorDistanceCalculator;\n    this._minColorDistance = minimumColorDistanceToDither;\n    this._serpentine = serpentine;\n    this._calculateErrorLikeGIMP = calculateErrorLikeGIMP;\n  }\n  *quantize(pointContainer, palette) {\n    const pointArray = pointContainer.getPointArray();\n    const originalPoint = new Point();\n    const width = pointContainer.getWidth();\n    const height = pointContainer.getHeight();\n    const errorLines = [];\n    let dir = 1;\n    let maxErrorLines = 1;\n    for (const kernel of this._kernel) {\n      const kernelErrorLines = kernel[2] + 1;\n      if (maxErrorLines < kernelErrorLines)\n        maxErrorLines = kernelErrorLines;\n    }\n    for (let i = 0; i < maxErrorLines; i++) {\n      this._fillErrorLine(errorLines[i] = [], width);\n    }\n    const tracker = new ProgressTracker(height, 99);\n    for (let y2 = 0; y2 < height; y2++) {\n      if (tracker.shouldNotify(y2)) {\n        yield {\n          progress: tracker.progress\n        };\n      }\n      if (this._serpentine)\n        dir *= -1;\n      const lni = y2 * width;\n      const xStart = dir === 1 ? 0 : width - 1;\n      const xEnd = dir === 1 ? width : -1;\n      this._fillErrorLine(errorLines[0], width);\n      errorLines.push(errorLines.shift());\n      const errorLine = errorLines[0];\n      for (let x2 = xStart, idx = lni + xStart; x2 !== xEnd; x2 += dir, idx += dir) {\n        const point = pointArray[idx];\n        const error = errorLine[x2];\n        originalPoint.from(point);\n        const correctedPoint = Point.createByRGBA(inRange0to255Rounded(point.r + error[0]), inRange0to255Rounded(point.g + error[1]), inRange0to255Rounded(point.b + error[2]), inRange0to255Rounded(point.a + error[3]));\n        const palettePoint = palette.getNearestColor(this._distance, correctedPoint);\n        point.from(palettePoint);\n        if (this._minColorDistance) {\n          const dist = this._distance.calculateNormalized(originalPoint, palettePoint);\n          if (dist < this._minColorDistance)\n            continue;\n        }\n        let er;\n        let eg;\n        let eb;\n        let ea;\n        if (this._calculateErrorLikeGIMP) {\n          er = correctedPoint.r - palettePoint.r;\n          eg = correctedPoint.g - palettePoint.g;\n          eb = correctedPoint.b - palettePoint.b;\n          ea = correctedPoint.a - palettePoint.a;\n        } else {\n          er = originalPoint.r - palettePoint.r;\n          eg = originalPoint.g - palettePoint.g;\n          eb = originalPoint.b - palettePoint.b;\n          ea = originalPoint.a - palettePoint.a;\n        }\n        const dStart = dir === 1 ? 0 : this._kernel.length - 1;\n        const dEnd = dir === 1 ? this._kernel.length : -1;\n        for (let i = dStart; i !== dEnd; i += dir) {\n          const x1 = this._kernel[i][1] * dir;\n          const y1 = this._kernel[i][2];\n          if (x1 + x2 >= 0 && x1 + x2 < width && y1 + y2 >= 0 && y1 + y2 < height) {\n            const d = this._kernel[i][0];\n            const e = errorLines[y1][x1 + x2];\n            e[0] += er * d;\n            e[1] += eg * d;\n            e[2] += eb * d;\n            e[3] += ea * d;\n          }\n        }\n      }\n    }\n    yield {\n      pointContainer,\n      progress: 100\n    };\n  }\n  _fillErrorLine(errorLine, width) {\n    if (errorLine.length > width) {\n      errorLine.length = width;\n    }\n    const l = errorLine.length;\n    for (let i = 0; i < l; i++) {\n      const error = errorLine[i];\n      error[0] = error[1] = error[2] = error[3] = 0;\n    }\n    for (let i = l; i < width; i++) {\n      errorLine[i] = [0, 0, 0, 0];\n    }\n  }\n  _setKernel(kernel) {\n    switch (kernel) {\n      case 0 /* FloydSteinberg */:\n        this._kernel = [\n          [7 / 16, 1, 0],\n          [3 / 16, -1, 1],\n          [5 / 16, 0, 1],\n          [1 / 16, 1, 1]\n        ];\n        break;\n      case 1 /* FalseFloydSteinberg */:\n        this._kernel = [\n          [3 / 8, 1, 0],\n          [3 / 8, 0, 1],\n          [2 / 8, 1, 1]\n        ];\n        break;\n      case 2 /* Stucki */:\n        this._kernel = [\n          [8 / 42, 1, 0],\n          [4 / 42, 2, 0],\n          [2 / 42, -2, 1],\n          [4 / 42, -1, 1],\n          [8 / 42, 0, 1],\n          [4 / 42, 1, 1],\n          [2 / 42, 2, 1],\n          [1 / 42, -2, 2],\n          [2 / 42, -1, 2],\n          [4 / 42, 0, 2],\n          [2 / 42, 1, 2],\n          [1 / 42, 2, 2]\n        ];\n        break;\n      case 3 /* Atkinson */:\n        this._kernel = [\n          [1 / 8, 1, 0],\n          [1 / 8, 2, 0],\n          [1 / 8, -1, 1],\n          [1 / 8, 0, 1],\n          [1 / 8, 1, 1],\n          [1 / 8, 0, 2]\n        ];\n        break;\n      case 4 /* Jarvis */:\n        this._kernel = [\n          [7 / 48, 1, 0],\n          [5 / 48, 2, 0],\n          [3 / 48, -2, 1],\n          [5 / 48, -1, 1],\n          [7 / 48, 0, 1],\n          [5 / 48, 1, 1],\n          [3 / 48, 2, 1],\n          [1 / 48, -2, 2],\n          [3 / 48, -1, 2],\n          [5 / 48, 0, 2],\n          [3 / 48, 1, 2],\n          [1 / 48, 2, 2]\n        ];\n        break;\n      case 5 /* Burkes */:\n        this._kernel = [\n          [8 / 32, 1, 0],\n          [4 / 32, 2, 0],\n          [2 / 32, -2, 1],\n          [4 / 32, -1, 1],\n          [8 / 32, 0, 1],\n          [4 / 32, 1, 1],\n          [2 / 32, 2, 1]\n        ];\n        break;\n      case 6 /* Sierra */:\n        this._kernel = [\n          [5 / 32, 1, 0],\n          [3 / 32, 2, 0],\n          [2 / 32, -2, 1],\n          [4 / 32, -1, 1],\n          [5 / 32, 0, 1],\n          [4 / 32, 1, 1],\n          [2 / 32, 2, 1],\n          [2 / 32, -1, 2],\n          [3 / 32, 0, 2],\n          [2 / 32, 1, 2]\n        ];\n        break;\n      case 7 /* TwoSierra */:\n        this._kernel = [\n          [4 / 16, 1, 0],\n          [3 / 16, 2, 0],\n          [1 / 16, -2, 1],\n          [2 / 16, -1, 1],\n          [3 / 16, 0, 1],\n          [2 / 16, 1, 1],\n          [1 / 16, 2, 1]\n        ];\n        break;\n      case 8 /* SierraLite */:\n        this._kernel = [\n          [2 / 4, 1, 0],\n          [1 / 4, -1, 1],\n          [1 / 4, 0, 1]\n        ];\n        break;\n      default:\n        throw new Error(`ErrorDiffusionArray: unknown kernel = ${kernel}`);\n    }\n  }\n};\n\n// src/image/spaceFillingCurves/hilbertCurve.ts\nfunction* hilbertCurve(width, height, callback) {\n  const maxBound = Math.max(width, height);\n  const level = Math.floor(Math.log(maxBound) / Math.log(2) + 1);\n  const tracker = new ProgressTracker(width * height, 99);\n  const data = {\n    width,\n    height,\n    level,\n    callback,\n    tracker,\n    index: 0,\n    x: 0,\n    y: 0\n  };\n  yield* walkHilbert(data, 1 /* UP */);\n  visit(data, 0 /* NONE */);\n}\nfunction* walkHilbert(data, direction) {\n  if (data.level < 1)\n    return;\n  if (data.tracker.shouldNotify(data.index)) {\n    yield { progress: data.tracker.progress };\n  }\n  data.level--;\n  switch (direction) {\n    case 2 /* LEFT */:\n      yield* walkHilbert(data, 1 /* UP */);\n      visit(data, 3 /* RIGHT */);\n      yield* walkHilbert(data, 2 /* LEFT */);\n      visit(data, 4 /* DOWN */);\n      yield* walkHilbert(data, 2 /* LEFT */);\n      visit(data, 2 /* LEFT */);\n      yield* walkHilbert(data, 4 /* DOWN */);\n      break;\n    case 3 /* RIGHT */:\n      yield* walkHilbert(data, 4 /* DOWN */);\n      visit(data, 2 /* LEFT */);\n      yield* walkHilbert(data, 3 /* RIGHT */);\n      visit(data, 1 /* UP */);\n      yield* walkHilbert(data, 3 /* RIGHT */);\n      visit(data, 3 /* RIGHT */);\n      yield* walkHilbert(data, 1 /* UP */);\n      break;\n    case 1 /* UP */:\n      yield* walkHilbert(data, 2 /* LEFT */);\n      visit(data, 4 /* DOWN */);\n      yield* walkHilbert(data, 1 /* UP */);\n      visit(data, 3 /* RIGHT */);\n      yield* walkHilbert(data, 1 /* UP */);\n      visit(data, 1 /* UP */);\n      yield* walkHilbert(data, 3 /* RIGHT */);\n      break;\n    case 4 /* DOWN */:\n      yield* walkHilbert(data, 3 /* RIGHT */);\n      visit(data, 1 /* UP */);\n      yield* walkHilbert(data, 4 /* DOWN */);\n      visit(data, 2 /* LEFT */);\n      yield* walkHilbert(data, 4 /* DOWN */);\n      visit(data, 4 /* DOWN */);\n      yield* walkHilbert(data, 2 /* LEFT */);\n      break;\n    default:\n      break;\n  }\n  data.level++;\n}\nfunction visit(data, direction) {\n  if (data.x >= 0 && data.x < data.width && data.y >= 0 && data.y < data.height) {\n    data.callback(data.x, data.y);\n    data.index++;\n  }\n  switch (direction) {\n    case 2 /* LEFT */:\n      data.x--;\n      break;\n    case 3 /* RIGHT */:\n      data.x++;\n      break;\n    case 1 /* UP */:\n      data.y--;\n      break;\n    case 4 /* DOWN */:\n      data.y++;\n      break;\n  }\n}\n\n// src/image/riemersma.ts\nvar ErrorDiffusionRiemersma = class extends AbstractImageQuantizer {\n  constructor(colorDistanceCalculator, errorQueueSize = 16, errorPropagation = 1) {\n    super();\n    __publicField(this, \"_distance\");\n    __publicField(this, \"_weights\");\n    __publicField(this, \"_errorQueueSize\");\n    this._distance = colorDistanceCalculator;\n    this._errorQueueSize = errorQueueSize;\n    this._weights = ErrorDiffusionRiemersma._createWeights(errorPropagation, errorQueueSize);\n  }\n  *quantize(pointContainer, palette) {\n    const pointArray = pointContainer.getPointArray();\n    const width = pointContainer.getWidth();\n    const height = pointContainer.getHeight();\n    const errorQueue = [];\n    let head = 0;\n    for (let i = 0; i < this._errorQueueSize; i++) {\n      errorQueue[i] = { r: 0, g: 0, b: 0, a: 0 };\n    }\n    yield* hilbertCurve(width, height, (x2, y2) => {\n      const p = pointArray[x2 + y2 * width];\n      let { r, g, b, a } = p;\n      for (let i = 0; i < this._errorQueueSize; i++) {\n        const weight = this._weights[i];\n        const e = errorQueue[(i + head) % this._errorQueueSize];\n        r += e.r * weight;\n        g += e.g * weight;\n        b += e.b * weight;\n        a += e.a * weight;\n      }\n      const correctedPoint = Point.createByRGBA(inRange0to255Rounded(r), inRange0to255Rounded(g), inRange0to255Rounded(b), inRange0to255Rounded(a));\n      const quantizedPoint = palette.getNearestColor(this._distance, correctedPoint);\n      head = (head + 1) % this._errorQueueSize;\n      const tail = (head + this._errorQueueSize - 1) % this._errorQueueSize;\n      errorQueue[tail].r = p.r - quantizedPoint.r;\n      errorQueue[tail].g = p.g - quantizedPoint.g;\n      errorQueue[tail].b = p.b - quantizedPoint.b;\n      errorQueue[tail].a = p.a - quantizedPoint.a;\n      p.from(quantizedPoint);\n    });\n    yield {\n      pointContainer,\n      progress: 100\n    };\n  }\n  static _createWeights(errorPropagation, errorQueueSize) {\n    const weights = [];\n    const multiplier = Math.exp(Math.log(errorQueueSize) / (errorQueueSize - 1));\n    for (let i = 0, next = 1; i < errorQueueSize; i++) {\n      weights[i] = (next + 0.5 | 0) / errorQueueSize * errorPropagation;\n      next *= multiplier;\n    }\n    return weights;\n  }\n};\n\n// src/quality/index.ts\nvar quality_exports = {};\n__export(quality_exports, {\n  ssim: () => ssim\n});\n\n// src/quality/ssim.ts\nvar K1 = 0.01;\nvar K2 = 0.03;\nfunction ssim(image1, image2) {\n  if (image1.getHeight() !== image2.getHeight() || image1.getWidth() !== image2.getWidth()) {\n    throw new Error(\"Images have different sizes!\");\n  }\n  const bitsPerComponent = 8;\n  const L = (1 << bitsPerComponent) - 1;\n  const c1 = (K1 * L) ** 2;\n  const c2 = (K2 * L) ** 2;\n  let numWindows = 0;\n  let mssim = 0;\n  iterate(image1, image2, (lumaValues1, lumaValues2, averageLumaValue1, averageLumaValue2) => {\n    let sigxy = 0;\n    let sigsqx = 0;\n    let sigsqy = 0;\n    for (let i = 0; i < lumaValues1.length; i++) {\n      sigsqx += (lumaValues1[i] - averageLumaValue1) ** 2;\n      sigsqy += (lumaValues2[i] - averageLumaValue2) ** 2;\n      sigxy += (lumaValues1[i] - averageLumaValue1) * (lumaValues2[i] - averageLumaValue2);\n    }\n    const numPixelsInWin = lumaValues1.length - 1;\n    sigsqx /= numPixelsInWin;\n    sigsqy /= numPixelsInWin;\n    sigxy /= numPixelsInWin;\n    const numerator = (2 * averageLumaValue1 * averageLumaValue2 + c1) * (2 * sigxy + c2);\n    const denominator = (averageLumaValue1 ** 2 + averageLumaValue2 ** 2 + c1) * (sigsqx + sigsqy + c2);\n    const ssim2 = numerator / denominator;\n    mssim += ssim2;\n    numWindows++;\n  });\n  return mssim / numWindows;\n}\nfunction iterate(image1, image2, callback) {\n  const windowSize = 8;\n  const width = image1.getWidth();\n  const height = image1.getHeight();\n  for (let y2 = 0; y2 < height; y2 += windowSize) {\n    for (let x2 = 0; x2 < width; x2 += windowSize) {\n      const windowWidth = Math.min(windowSize, width - x2);\n      const windowHeight = Math.min(windowSize, height - y2);\n      const lumaValues1 = calculateLumaValuesForWindow(image1, x2, y2, windowWidth, windowHeight);\n      const lumaValues2 = calculateLumaValuesForWindow(image2, x2, y2, windowWidth, windowHeight);\n      const averageLuma1 = calculateAverageLuma(lumaValues1);\n      const averageLuma2 = calculateAverageLuma(lumaValues2);\n      callback(lumaValues1, lumaValues2, averageLuma1, averageLuma2);\n    }\n  }\n}\nfunction calculateLumaValuesForWindow(image, x2, y2, width, height) {\n  const pointArray = image.getPointArray();\n  const lumaValues = [];\n  let counter = 0;\n  for (let j = y2; j < y2 + height; j++) {\n    const offset = j * image.getWidth();\n    for (let i = x2; i < x2 + width; i++) {\n      const point = pointArray[offset + i];\n      lumaValues[counter] = point.r * 0.2126 /* RED */ + point.g * 0.7152 /* GREEN */ + point.b * 0.0722 /* BLUE */;\n      counter++;\n    }\n  }\n  return lumaValues;\n}\nfunction calculateAverageLuma(lumaValues) {\n  let sumLuma = 0;\n  for (const luma of lumaValues) {\n    sumLuma += luma;\n  }\n  return sumLuma / lumaValues.length;\n}\n\n// src/basicAPI.ts\nvar setImmediateImpl = typeof setImmediate === \"function\" ? setImmediate : typeof process !== \"undefined\" && typeof (process == null ? void 0 : process.nextTick) === \"function\" ? (callback) => process.nextTick(callback) : (callback) => setTimeout(callback, 0);\nfunction buildPaletteSync(images, {\n  colorDistanceFormula,\n  paletteQuantization,\n  colors\n} = {}) {\n  const distanceCalculator = colorDistanceFormulaToColorDistance(colorDistanceFormula);\n  const paletteQuantizer = paletteQuantizationToPaletteQuantizer(distanceCalculator, paletteQuantization, colors);\n  images.forEach((image) => paletteQuantizer.sample(image));\n  return paletteQuantizer.quantizeSync();\n}\nasync function buildPalette(images, {\n  colorDistanceFormula,\n  paletteQuantization,\n  colors,\n  onProgress\n} = {}) {\n  return new Promise((resolve, reject) => {\n    const distanceCalculator = colorDistanceFormulaToColorDistance(colorDistanceFormula);\n    const paletteQuantizer = paletteQuantizationToPaletteQuantizer(distanceCalculator, paletteQuantization, colors);\n    images.forEach((image) => paletteQuantizer.sample(image));\n    let palette;\n    const iterator = paletteQuantizer.quantize();\n    const next = () => {\n      try {\n        const result = iterator.next();\n        if (result.done) {\n          resolve(palette);\n        } else {\n          if (result.value.palette)\n            palette = result.value.palette;\n          if (onProgress)\n            onProgress(result.value.progress);\n          setImmediateImpl(next);\n        }\n      } catch (error) {\n        reject(error);\n      }\n    };\n    setImmediateImpl(next);\n  });\n}\nfunction applyPaletteSync(image, palette, { colorDistanceFormula, imageQuantization } = {}) {\n  const distanceCalculator = colorDistanceFormulaToColorDistance(colorDistanceFormula);\n  const imageQuantizer = imageQuantizationToImageQuantizer(distanceCalculator, imageQuantization);\n  return imageQuantizer.quantizeSync(image, palette);\n}\nasync function applyPalette(image, palette, {\n  colorDistanceFormula,\n  imageQuantization,\n  onProgress\n} = {}) {\n  return new Promise((resolve, reject) => {\n    const distanceCalculator = colorDistanceFormulaToColorDistance(colorDistanceFormula);\n    const imageQuantizer = imageQuantizationToImageQuantizer(distanceCalculator, imageQuantization);\n    let outPointContainer;\n    const iterator = imageQuantizer.quantize(image, palette);\n    const next = () => {\n      try {\n        const result = iterator.next();\n        if (result.done) {\n          resolve(outPointContainer);\n        } else {\n          if (result.value.pointContainer) {\n            outPointContainer = result.value.pointContainer;\n          }\n          if (onProgress)\n            onProgress(result.value.progress);\n          setImmediateImpl(next);\n        }\n      } catch (error) {\n        reject(error);\n      }\n    };\n    setImmediateImpl(next);\n  });\n}\nfunction colorDistanceFormulaToColorDistance(colorDistanceFormula = \"euclidean-bt709\") {\n  switch (colorDistanceFormula) {\n    case \"cie94-graphic-arts\":\n      return new CIE94GraphicArts();\n    case \"cie94-textiles\":\n      return new CIE94Textiles();\n    case \"ciede2000\":\n      return new CIEDE2000();\n    case \"color-metric\":\n      return new CMetric();\n    case \"euclidean\":\n      return new Euclidean();\n    case \"euclidean-bt709\":\n      return new EuclideanBT709();\n    case \"euclidean-bt709-noalpha\":\n      return new EuclideanBT709NoAlpha();\n    case \"manhattan\":\n      return new Manhattan();\n    case \"manhattan-bt709\":\n      return new ManhattanBT709();\n    case \"manhattan-nommyde\":\n      return new ManhattanNommyde();\n    case \"pngquant\":\n      return new PNGQuant();\n    default:\n      throw new Error(`Unknown colorDistanceFormula ${colorDistanceFormula}`);\n  }\n}\nfunction imageQuantizationToImageQuantizer(distanceCalculator, imageQuantization = \"floyd-steinberg\") {\n  switch (imageQuantization) {\n    case \"nearest\":\n      return new NearestColor(distanceCalculator);\n    case \"riemersma\":\n      return new ErrorDiffusionRiemersma(distanceCalculator);\n    case \"floyd-steinberg\":\n      return new ErrorDiffusionArray(distanceCalculator, 0 /* FloydSteinberg */);\n    case \"false-floyd-steinberg\":\n      return new ErrorDiffusionArray(distanceCalculator, 1 /* FalseFloydSteinberg */);\n    case \"stucki\":\n      return new ErrorDiffusionArray(distanceCalculator, 2 /* Stucki */);\n    case \"atkinson\":\n      return new ErrorDiffusionArray(distanceCalculator, 3 /* Atkinson */);\n    case \"jarvis\":\n      return new ErrorDiffusionArray(distanceCalculator, 4 /* Jarvis */);\n    case \"burkes\":\n      return new ErrorDiffusionArray(distanceCalculator, 5 /* Burkes */);\n    case \"sierra\":\n      return new ErrorDiffusionArray(distanceCalculator, 6 /* Sierra */);\n    case \"two-sierra\":\n      return new ErrorDiffusionArray(distanceCalculator, 7 /* TwoSierra */);\n    case \"sierra-lite\":\n      return new ErrorDiffusionArray(distanceCalculator, 8 /* SierraLite */);\n    default:\n      throw new Error(`Unknown imageQuantization ${imageQuantization}`);\n  }\n}\nfunction paletteQuantizationToPaletteQuantizer(distanceCalculator, paletteQuantization = \"wuquant\", colors = 256) {\n  switch (paletteQuantization) {\n    case \"neuquant\":\n      return new NeuQuant(distanceCalculator, colors);\n    case \"rgbquant\":\n      return new RGBQuant(distanceCalculator, colors);\n    case \"wuquant\":\n      return new WuQuant(distanceCalculator, colors);\n    case \"neuquant-float\":\n      return new NeuQuantFloat(distanceCalculator, colors);\n    default:\n      throw new Error(`Unknown paletteQuantization ${paletteQuantization}`);\n  }\n}\nmodule.exports = __toCommonJS(src_exports);\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  applyPalette,\n  applyPaletteSync,\n  buildPalette,\n  buildPaletteSync,\n  constants,\n  conversion,\n  distance,\n  image,\n  palette,\n  quality,\n  utils\n});\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * cie94.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * ciede2000.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * cmetric.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * common.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * constants.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * ditherErrorDiffusionArray.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * euclidean.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * helper.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * hueStatistics.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * iq.ts - Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * lab2rgb.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * lab2xyz.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * manhattanNeuQuant.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * nearestColor.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * palette.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * pngQuant.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * point.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * pointContainer.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * rgb2hsl.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * rgb2lab.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * rgb2xyz.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * ssim.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * wuQuant.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * xyz2lab.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * xyz2rgb.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * MIT License\n *\n * Copyright 2015-2018 Igor Bezkrovnyi\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n * riemersma.ts - part of Image Quantization Library\n */\n/**\n * @preserve TypeScript port:\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * colorHistogram.ts - part of Image Quantization Library\n */\n/**\n * @preserve TypeScript port:\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * neuquant.ts - part of Image Quantization Library\n */\n/**\n * @preserve TypeScript port:\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * rgbquant.ts - part of Image Quantization Library\n */\n//# sourceMappingURL=image-q.cjs.map\n","'use strict';\n\nconst BitmapImage = require('./bitmapimage');\nconst { GifError } = require('./gif');\n\n/** @class GifFrame */\n\nclass GifFrame extends BitmapImage {\n\n    // xOffset - x offset of bitmap on GIF (defaults to 0)\n    // yOffset - y offset of bitmap on GIF (defaults to 0)\n    // disposalMethod - pixel disposal method when handling partial images\n    // delayCentisecs - duration of frame in hundredths of a second\n    // interlaced - whether the image is interlaced (defaults to false)\n\n    /**\n     * GifFrame is a class representing an image frame of a GIF. GIFs contain one or more instances of GifFrame.\n     * \n     * Property | Description\n     * --- | ---\n     * xOffset | x-coord of position within GIF at which to render the image (defaults to 0)\n     * yOffset | y-coord of position within GIF at which to render the image (defaults to 0)\n     * disposalMethod | GIF disposal method; only relevant when the frames aren't all the same size (defaults to 2, disposing to background color)\n     * delayCentisecs | duration of the frame in hundreths of a second\n     * interlaced | boolean indicating whether the frame renders interlaced\n     * \n     * Its constructor supports the following signatures:\n     * \n     * * new GifFrame(bitmap: {width: number, height: number, data: Buffer}, options?)\n     * * new GifFrame(bitmapImage: BitmapImage, options?)\n     * * new GifFrame(width: number, height: number, buffer: Buffer, options?)\n     * * new GifFrame(width: number, height: number, backgroundRGBA?: number, options?)\n     * * new GifFrame(frame: GifFrame)\n     * \n     * See the base class BitmapImage for a discussion of all parameters but `options` and `frame`. `options` is an optional argument providing initial values for the above-listed GifFrame properties. Each property within option is itself optional.\n     * \n     * Provide a `frame` to the constructor to create a clone of the provided frame. The new frame includes a copy of the provided frame's pixel data so that each can subsequently be modified without affecting each other.\n     */\n\n    constructor(...args) {\n        super(...args);\n        if (args[0] instanceof GifFrame) {\n            // copy a provided GifFrame\n            const source = args[0];\n            this.xOffset = source.xOffset;\n            this.yOffset = source.yOffset;\n            this.disposalMethod = source.disposalMethod;\n            this.delayCentisecs = source.delayCentisecs;\n            this.interlaced = source.interlaced;\n        }\n        else {\n            const lastArg = args[args.length - 1];\n            let options = {};\n            if (typeof lastArg === 'object' && !(lastArg instanceof BitmapImage)) {\n                options = lastArg;\n            }\n            this.xOffset = options.xOffset || 0;\n            this.yOffset = options.yOffset || 0;\n            this.disposalMethod = (options.disposalMethod !== undefined ?\n                    options.disposalMethod : GifFrame.DisposeToBackgroundColor);\n            this.delayCentisecs = options.delayCentisecs || 8;\n            this.interlaced = options.interlaced || false;\n        }\n    }\n\n    /**\n     * Get a summary of the colors found within the frame. The return value is an object of the following form:\n     * \n     * Property | Description\n     * --- | ---\n     * colors | An array of all the opaque colors found within the frame. Each color is given as an RGB number of the form 0xRRGGBB. The array is sorted by increasing number. Will be an empty array when the image is completely transparent.\n     * usesTransparency | boolean indicating whether there are any transparent pixels within the frame. A pixel is considered transparent if its alpha value is 0x00.\n     * indexCount | The number of color indexes required to represent this palette of colors. It is equal to the number of opaque colors plus one if the image includes transparency.\n     * \n     * @return {object} An object representing a color palette as described above.\n     */\n\n    getPalette() {\n        // returns with colors sorted low to high\n        const colorSet = new Set();\n        const buf = this.bitmap.data;\n        let i = 0;\n        let usesTransparency = false;\n        while (i < buf.length) {\n            if (buf[i + 3] === 0) {\n                usesTransparency = true;\n            }\n            else {\n                // can eliminate the bitshift by starting one byte prior\n                const color = (buf.readUInt32BE(i, true) >> 8) & 0xFFFFFF;\n                colorSet.add(color);\n            }\n            i += 4; // skip alpha\n        }\n        const colors = new Array(colorSet.size);\n        const iter = colorSet.values();\n        for (i = 0; i < colors.length; ++i) {\n            colors[i] = iter.next().value;\n        }\n        colors.sort((a, b) => (a - b));\n        let indexCount = colors.length;\n        if (usesTransparency) {\n            ++indexCount;\n        }\n        return { colors, usesTransparency, indexCount };\n    }\n}\n\nGifFrame.DisposeToAnything = 0;\nGifFrame.DisposeNothing = 1;\nGifFrame.DisposeToBackgroundColor = 2;\nGifFrame.DisposeToPrevious = 3;\n\nexports.GifFrame = GifFrame;\n","'use strict';\n\n/** @namespace GifUtil */\n\nconst fs = require('fs');\nconst ImageQ = require('image-q');\n\nconst BitmapImage = require('./bitmapimage');\nconst { GifFrame } = require('./gifframe');\nconst { GifError } = require('./gif');\nconst { GifCodec } = require('./gifcodec');\n\nconst INVALID_SUFFIXES = ['.jpg', '.jpeg', '.png', '.bmp'];\n\nconst defaultCodec = new GifCodec();\n\n/**\n * cloneFrames() clones provided frames. It's a utility method for cloning an entire array of frames at once.\n * \n * @function cloneFrames\n * @memberof GifUtil\n * @param {GifFrame[]} frames An array of GifFrame instances to clone\n * @return {GifFrame[]} An array of GifFrame clones of the provided frames.\n */\n\nexports.cloneFrames = function (frames) {\n    let clones = [];\n    frames.forEach(frame => {\n\n        clones.push(new GifFrame(frame));\n    });\n    return clones;\n}\n\n/**\n * getColorInfo() gets information about the colors used in the provided frames. The method is able to return an array of all colors found across all frames.\n * \n * `maxGlobalIndex` controls whether the computation short-circuits to avoid doing work that the caller doesn't need. The method only returns `colors` and `indexCount` for the colors across all frames when the number of indexes required to store the colors and transparency in a GIF (which is the value of `indexCount`) is less than or equal to `maxGlobalIndex`. Such short-circuiting is useful when the caller just needs to determine whether any frame includes transparency.\n * \n * @function getColorInfo\n * @memberof GifUtil\n * @param {GifFrame[]} frames Frames to examine for color and transparency.\n * @param {number} maxGlobalIndex Maximum number of color indexes (including one for transparency) allowed among the returned compilation of colors. `colors` and `indexCount` are not returned if the number of color indexes required to accommodate  all frames exceeds this number. Returns `colors` and `indexCount` by default.\n * @returns {object} Object containing at least `palettes` and `usesTransparency`. `palettes` is an array of all the palettes returned by GifFrame#getPalette(). `usesTransparency` indicates whether at least one frame uses transparency. If `maxGlobalIndex` is not exceeded, the object also contains `colors`, an array of all colors (RGB) found across all palettes, sorted by increasing value, and `indexCount` indicating the number of indexes required to store the colors and the transparency in a GIF.\n * @throws {GifError} When any frame requires more than 256 color indexes.\n */\n\nexports.getColorInfo = function (frames, maxGlobalIndex) {\n    let usesTransparency = false;\n    const palettes = [];\n    for (let i = 0; i < frames.length; ++i) {\n        let palette = frames[i].getPalette();\n        if (palette.usesTransparency) {\n            usesTransparency = true;\n        }\n        if (palette.indexCount > 256) {\n            throw new GifError(`Frame ${i} uses more than 256 color indexes`);\n        }\n        palettes.push(palette);\n    }\n    if (maxGlobalIndex === 0) {\n        return { usesTransparency, palettes };\n    }\n\n    const globalColorSet = new Set();\n    palettes.forEach(palette => {\n\n        palette.colors.forEach(color => {\n\n            globalColorSet.add(color);\n        });\n    });\n    let indexCount = globalColorSet.size;\n    if (usesTransparency) {\n        // odd that GIF requires a color table entry at transparent index\n        ++indexCount;\n    }\n    if (maxGlobalIndex && indexCount > maxGlobalIndex) {\n        return { usesTransparency, palettes };\n    }\n    \n    const colors = new Array(globalColorSet.size);\n    const iter = globalColorSet.values();\n    for (let i = 0; i < colors.length; ++i) {\n        colors[i] = iter.next().value;\n    }\n    colors.sort((a, b) => (a - b));\n    return { colors, indexCount, usesTransparency, palettes };\n};\n\n/**\n * copyAsJimp() returns a Jimp that contains a copy of the provided bitmap image (which may be either a BitmapImage or a GifFrame). Modifying the Jimp does not affect the provided bitmap image. This method serves as a macro for simplifying working with Jimp.\n *\n * @function copyAsJimp\n * @memberof GifUtil\n * @param {object} Reference to the Jimp package, keeping this library from being dependent on Jimp.\n * @param {bitmapImageToCopy} Instance of BitmapImage (may be a GifUtil) with which to source the Jimp.\n * @return {object} An new instance of Jimp containing a copy of the image in bitmapImageToCopy.\n */\n \nexports.copyAsJimp = function (jimp, bitmapImageToCopy) {\n    return exports.shareAsJimp(jimp, new BitmapImage(bitmapImageToCopy));\n};\n\n/**\n * getMaxDimensions() returns the pixel width and height required to accommodate all of the provided frames, according to the offsets and dimensions of each frame.\n * \n * @function getMaxDimensions\n * @memberof GifUtil\n * @param {GifFrame[]} frames Frames to measure for their aggregate maximum dimensions.\n * @return {object} An object of the form {maxWidth, maxHeight} indicating the maximum width and height required to accommodate all frames.\n */\n\nexports.getMaxDimensions = function (frames) {\n    let maxWidth = 0, maxHeight = 0;\n    frames.forEach(frame => {\n        const width = frame.xOffset + frame.bitmap.width;\n        if (width > maxWidth) {\n            maxWidth = width;\n        }\n        const height = frame.yOffset + frame.bitmap.height;\n        if (height > maxHeight) {\n            maxHeight = height;\n        }\n    });\n    return { maxWidth, maxHeight };\n};\n\n/**\n * Quantizes colors so that there are at most a given number of color indexes (including transparency) across all provided images. Uses an algorithm by Anthony Dekker.\n * \n * The method treats different RGBA combinations as different colors, so if the frame has multiple alpha values or multiple RGB values for an alpha value, the caller may first want to normalize them by converting all transparent pixels to the same RGBA values.\n * \n * The method may increase the number of colors if there are fewer than the provided maximum.\n * \n * @function quantizeDekker\n * @memberof GifUtil\n * @param {BitmapImage|BitmapImage[]} imageOrImages Image or array of images (such as GifFrame instances) to be color-quantized. Quantizing across multiple images ensures color consistency from frame to frame.\n * @param {number} maxColorIndexes The maximum number of color indexes that will exist in the palette after completing quantization. Defaults to 256.\n * @param {object} dither (optional) An object configuring the dithering to apply. The properties are as followings, imported from the [`image-q` package](https://github.com/ibezkrovnyi/image-quantization) without explanation: { `ditherAlgorithm`: One of 'FloydSteinberg', 'FalseFloydSteinberg', 'Stucki', 'Atkinson', 'Jarvis', 'Burkes', 'Sierra', 'TwoSierra', 'SierraLite'; `minimumColorDistanceToDither`: (optional) A number defaulting to 0; `serpentine`: (optional) A boolean defaulting to true; `calculateErrorLikeGIMP`: (optional) A boolean defaulting to false. }\n */\n\nexports.quantizeDekker = function (imageOrImages, maxColorIndexes, dither) {\n    maxColorIndexes = maxColorIndexes || 256;\n    _quantize(imageOrImages, 'NeuQuantFloat', maxColorIndexes, 0, dither);\n}\n\n/**\n * Quantizes colors so that there are at most a given number of color indexes (including transparency) across all provided images. Uses an algorithm by Leon Sorokin. This quantization method differs from the other two by likely never increasing the number of colors, should there be fewer than the provided maximum.\n * \n * The method treats different RGBA combinations as different colors, so if the frame has multiple alpha values or multiple RGB values for an alpha value, the caller may first want to normalize them by converting all transparent pixels to the same RGBA values.\n * \n * @function quantizeSorokin\n * @memberof GifUtil\n * @param {BitmapImage|BitmapImage[]} imageOrImages Image or array of images (such as GifFrame instances) to be color-quantized. Quantizing across multiple images ensures color consistency from frame to frame.\n * @param {number} maxColorIndexes The maximum number of color indexes that will exist in the palette after completing quantization. Defaults to 256.\n * @param {string} histogram (optional) Histogram method: 'top-pop' for global top-population, 'min-pop' for minimum-population threshhold within subregions. Defaults to 'min-pop'.\n * @param {object} dither (optional) An object configuring the dithering to apply, as explained for `quantizeDekker()`.\n */\n\nexports.quantizeSorokin = function (imageOrImages, maxColorIndexes, histogram, dither) {\n    maxColorIndexes = maxColorIndexes || 256;\n    histogram = histogram || 'min-pop';\n    let histogramID;\n    switch (histogram) {\n        case 'min-pop':\n        histogramID = 2;\n        break;\n\n        case 'top-pop':\n        histogramID = 1;\n        break\n\n        default:\n        throw new Error(`Invalid quantizeSorokin histogram '${histogram}'`);\n    }\n    _quantize(imageOrImages, 'RGBQuant', maxColorIndexes, histogramID, dither);\n}\n\n/**\n * Quantizes colors so that there are at most a given number of color indexes (including transparency) across all provided images. Uses an algorithm by Xiaolin Wu.\n * \n * The method treats different RGBA combinations as different colors, so if the frame has multiple alpha values or multiple RGB values for an alpha value, the caller may first want to normalize them by converting all transparent pixels to the same RGBA values.\n * \n * The method may increase the number of colors if there are fewer than the provided maximum.\n * \n * @function quantizeWu\n * @memberof GifUtil\n * @param {BitmapImage|BitmapImage[]} imageOrImages Image or array of images (such as GifFrame instances) to be color-quantized. Quantizing across multiple images ensures color consistency from frame to frame.\n * @param {number} maxColorIndexes The maximum number of color indexes that will exist in the palette after completing quantization. Defaults to 256.\n * @param {number} significantBits (optional) This is the number of significant high bits in each RGB color channel. Takes integer values from 1 through 8. Higher values correspond to higher quality. Defaults to 5.\n * @param {object} dither (optional) An object configuring the dithering to apply, as explained for `quantizeDekker()`.\n */\n\nexports.quantizeWu = function (imageOrImages, maxColorIndexes, significantBits, dither) {\n    maxColorIndexes = maxColorIndexes || 256;\n    significantBits = significantBits || 5;\n    if (significantBits < 1 || significantBits > 8) {\n        throw new Error(\"Invalid quantization quality\");\n    }\n    _quantize(imageOrImages, 'WuQuant', maxColorIndexes, significantBits, dither);\n}\n\n/**\n * read() decodes an encoded GIF, whether provided as a filename or as a byte buffer.\n * \n * @function read\n * @memberof GifUtil\n * @param {string|Buffer} source Source to decode. When a string, it's the GIF filename to load and parse. When a Buffer, it's an encoded GIF to parse.\n * @param {object} decoder An optional GIF decoder object implementing the `decode` method of class GifCodec. When provided, the method decodes the GIF using this decoder. When not provided, the method uses GifCodec.\n * @return {Promise} A Promise that resolves to an instance of the Gif class, representing the decoded GIF.\n */\n\nexports.read = function (source, decoder) {\n    decoder = decoder || defaultCodec;\n    if (Buffer.isBuffer(source)) {\n        return decoder.decodeGif(source);\n    }\n    return _readBinary(source)\n    .then(buffer => {\n\n        return decoder.decodeGif(buffer);\n    });\n};\n\n/**\n * shareAsJimp() returns a Jimp that shares a bitmap with the provided bitmap image (which may be either a BitmapImage or a GifFrame). Modifying the image in either the Jimp or the BitmapImage affects the other objects. This method serves as a macro for simplifying working with Jimp.\n *\n * @function shareAsJimp\n * @memberof GifUtil\n * @param {object} Reference to the Jimp package, keeping this library from being dependent on Jimp.\n * @param {bitmapImageToShare} Instance of BitmapImage (may be a GifUtil) with which to source the Jimp.\n * @return {object} An new instance of Jimp that shares the image in bitmapImageToShare.\n */\n \nexports.shareAsJimp = function (jimp, bitmapImageToShare) {\n    const jimpImage = new jimp(bitmapImageToShare.bitmap.width,\n            bitmapImageToShare.bitmap.height, 0);\n    jimpImage.bitmap.data = bitmapImageToShare.bitmap.data;\n    return jimpImage;\n};\n\n/**\n * write() encodes a GIF and saves it as a file.\n * \n * @function write\n * @memberof GifUtil\n * @param {string} path Filename to write GIF out as. Will overwrite an existing file.\n * @param {GifFrame[]} frames Array of frames to be written into GIF.\n * @param {object} spec An optional object that may provide values for `loops` and `colorScope`, as defined for the Gif class. However, `colorSpace` may also take the value Gif.GlobalColorsPreferred (== 0) to indicate that the encoder should attempt to create only a global color table. `loop` defaults to 0, looping indefinitely, and `colorScope` defaults to Gif.GlobalColorsPreferred.\n * @param {object} encoder An optional GIF encoder object implementing the `encode` method of class GifCodec. When provided, the method encodes the GIF using this encoder. When not provided, the method uses GifCodec.\n * @return {Promise} A Promise that resolves to an instance of the Gif class, representing the encoded GIF.\n */\n\nexports.write = function (path, frames, spec, encoder) {\n    encoder = encoder || defaultCodec;\n    const matches = path.match(/\\.[a-zA-Z]+$/); // prevent accidents\n    if (matches !== null &&\n            INVALID_SUFFIXES.includes(matches[0].toLowerCase()))\n    {\n        throw new Error(`GIF '${path}' has an unexpected suffix`);\n    }\n\n    return encoder.encodeGif(frames, spec)\n    .then(gif => {\n\n        return _writeBinary(path, gif.buffer)\n        .then(() => {\n\n            return gif;\n        });\n    });\n};\n\nfunction _quantize(imageOrImages, method, maxColorIndexes, modifier, dither) {\n    const images = Array.isArray(imageOrImages) ? imageOrImages : [imageOrImages];\n    const ditherAlgs = [\n        'FloydSteinberg',\n        'FalseFloydSteinberg',\n        'Stucki',\n        'Atkinson',\n        'Jarvis',\n        'Burkes',\n        'Sierra',\n        'TwoSierra',\n        'SierraLite'\n    ];\n\n    if (dither) {\n        if (ditherAlgs.indexOf(dither.ditherAlgorithm) < 0) {\n            throw new Error(`Invalid ditherAlgorithm '${dither.ditherAlgorithm}'`);\n        }\n        if (dither.serpentine === undefined) {\n            dither.serpentine = true;\n        }\n        if (dither.minimumColorDistanceToDither === undefined) {\n            dither.minimumColorDistanceToDither = 0;\n        }\n        if (dither.calculateErrorLikeGIMP === undefined) {\n            dither.calculateErrorLikeGIMP = false;\n        }\n    }\n\n    const distCalculator = new ImageQ.distance.Euclidean();\n    const quantizer = new ImageQ.palette[method](distCalculator, maxColorIndexes, modifier);\n    let imageMaker;\n    if (dither) {\n        imageMaker = new ImageQ.image.ErrorDiffusionArray(\n            distCalculator,\n            ImageQ.image.ErrorDiffusionArrayKernel[dither.ditherAlgorithm],\n            dither.serpentine,\n            dither.minimumColorDistanceToDither,\n            dither.calculateErrorLikeGIMP\n        );\n    }\n    else {\n        imageMaker = new ImageQ.image.NearestColor(distCalculator);\n    }\n\n    const inputContainers = [];\n    images.forEach(image => {\n\n        const imageBuf = image.bitmap.data;\n        const inputBuf = new ArrayBuffer(imageBuf.length);\n        const inputArray = new Uint32Array(inputBuf);\n        for (let bi = 0, ai = 0; bi < imageBuf.length; bi += 4, ++ai) {\n            inputArray[ai] = imageBuf.readUInt32LE(bi, true);\n        }\n        const inputContainer = ImageQ.utils.PointContainer.fromUint32Array(\n                inputArray, image.bitmap.width, image.bitmap.height);\n        quantizer.sample(inputContainer);\n        inputContainers.push(inputContainer);\n    });\n    \n    const limitedPalette = quantizer.quantizeSync();\n\n    for (let i = 0; i < images.length; ++i) {\n        const imageBuf = images[i].bitmap.data;\n        const outputContainer = imageMaker.quantizeSync(inputContainers[i], limitedPalette);\n        const outputArray = outputContainer.toUint32Array();\n        for (let bi = 0, ai = 0; bi < imageBuf.length; bi += 4, ++ai) {\n            imageBuf.writeUInt32LE(outputArray[ai], bi);\n        }\n    }\n}\n\nfunction _readBinary(path) {\n    // TBD: add support for URLs\n    return new Promise((resolve, reject) => {\n\n        fs.readFile(path, (err, buffer) => {\n\n            if (err) {\n                return reject(err);\n            }\n            return resolve(buffer);\n        });\n    });\n}\n\nfunction _writeBinary(path, buffer) {\n    // TBD: add support for URLs\n    return new Promise((resolve, reject) => {\n\n        fs.writeFile(path, buffer, err => {\n            \n            if (err) {\n                return reject(err);\n            }\n            return resolve();\n        });\n    });\n}\n","'use strict';\n\nconst Omggif = require('omggif');\nconst { Gif, GifError } = require('./gif');\n\n// allow circular dependency with GifUtil\nfunction GifUtil() {\n    const data = require('./gifutil');\n\n    GifUtil = function () {\n      return data;\n    };\n\n  return data;\n}\n\nconst { GifFrame } = require('./gifframe');\n\nconst PER_GIF_OVERHEAD = 200; // these are guesses at upper limits\nconst PER_FRAME_OVERHEAD = 100;\n\n// Note: I experimented with accepting a global color table when encoding and returning the global color table when decoding. Doing this properly greatly increased the complexity of the code and the amount of clock cycles required. The main issue is that each frame can specify any color of the global color table to be transparent within the frame, while this GIF library strives to hide GIF formatting details from its clients. E.g. it's possible to have 256 colors in the global color table and different transparencies in each frame, requiring clients to either provide per-frame transparency indexes, or for arcane reasons that won't be apparent to client developers, encode some GIFs with local color tables that previously decoded with global tables.\n\n/** @class GifCodec */\n\nclass GifCodec\n{\n    // _transparentRGBA - RGB given to transparent pixels (alpha=0) on decode; defaults to null indicating 0x000000, which is fastest\n\n    /**\n     * GifCodec is a class that both encodes and decodes GIFs. It implements both the `encode()` method expected of an encoder and the `decode()` method expected of a decoder, and it wraps the `omggif` GIF encoder/decoder package. GifCodec serves as this library's default encoder and decoder, but it's possible to wrap other GIF encoders and decoders for use by `gifwrap` as well. GifCodec will not encode GIFs with interlacing.\n     * \n     * Instances of this class are stateless and can be shared across multiple encodings and decodings.\n     * \n     * Its constructor takes one option argument:\n     * \n     * @param {object} options Optionally takes an objection whose only possible property is `transparentRGB`. Images are internally represented in RGBA format, where A is the alpha value of a pixel. When `transparentRGB` is provided, this RGB value (excluding alpha) is assigned to transparent pixels, which are also given alpha value 0x00. (All opaque pixels are given alpha value 0xFF). The RGB color of transparent pixels shouldn't matter for most applications. Defaults to 0x000000.\n     */\n\n    constructor(options = {}) {\n        this._transparentRGB = null; // 0x000000\n        if (typeof options.transparentRGB === 'number' &&\n                options.transparentRGB !== 0)\n        {\n            this._transparentRGBA = options.transparentRGB * 256;\n        }\n        this._testInitialBufferSize = 0; // assume no buffer scaling test\n    }\n\n    /**\n     * Decodes a GIF from a Buffer to yield an instance of Gif. Transparent pixels of the GIF are given alpha values of 0x00, and opaque pixels are given alpha values of 0xFF. The RGB values of transparent pixels default to 0x000000 but can be overridden by the constructor's `transparentRGB` option.\n     * \n     * @param {Buffer} buffer Bytes of an encoded GIF to decode.\n     * @return {Promise} A Promise that resolves to an instance of the Gif class, representing the encoded GIF.\n     * @throws {GifError} Error upon encountered an encoding-related problem with a GIF, so that the caller can distinguish between software errors and problems with GIFs.\n     */\n\n    decodeGif(buffer) {\n        try {\n            let reader;\n            try {\n                reader = new Omggif.GifReader(buffer);\n            }\n            catch (err) {\n                throw new GifError(err);\n            }\n            const frameCount = reader.numFrames();\n            const frames = [];\n            const spec = {\n                width: reader.width,\n                height: reader.height,\n                loops: reader.loopCount()\n            };\n\n            spec.usesTransparency = false;\n            for (let i = 0; i < frameCount; ++i) {\n                const frameInfo =\n                        this._decodeFrame(reader, i, spec.usesTransparency);\n                frames.push(frameInfo.frame);\n                if (frameInfo.usesTransparency) {\n                    spec.usesTransparency = true;\n                }\n            }\n            return Promise.resolve(new Gif(buffer, frames, spec));\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n\n    /**\n     * Encodes a GIF from provided frames. Each pixel having an alpha value of 0x00 renders as transparent within the encoding, while all pixels of non-zero alpha value render as opaque.\n     * \n     * @param {GifFrame[]} frames Array of frames to encode\n     * @param {object} spec An optional object that may provide values for `loops` and `colorScope`, as defined for the Gif class. However, `colorSpace` may also take the value Gif.GlobalColorsPreferred (== 0) to indicate that the encoder should attempt to create only a global color table. `loop` defaults to 0, looping indefinitely. Set `loop` to null to disable looping, playing only once. `colorScope` defaults to Gif.GlobalColorsPreferred.\n     * @return {Promise} A Promise that resolves to an instance of the Gif class, representing the encoded GIF.\n     * @throws {GifError} Error upon encountered an encoding-related problem with a GIF, so that the caller can distinguish between software errors and problems with GIFs.\n     */\n\n    encodeGif(frames, spec = {}) {\n        try {\n            if (frames === null || frames.length === 0) {\n                throw new GifError(\"there are no frames\");\n            }\n            const dims = GifUtil().getMaxDimensions(frames);\n\n            spec = Object.assign({}, spec); // don't munge caller's spec\n            spec.width = dims.maxWidth;\n            spec.height = dims.maxHeight;\n            if (spec.loops === undefined) {\n                spec.loops = 0;\n            }\n            spec.colorScope = spec.colorScope || Gif.GlobalColorsPreferred;\n\n            return Promise.resolve(this._encodeGif(frames, spec));\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n\n    _decodeFrame(reader, frameIndex, alreadyUsedTransparency) {\n        let info, buffer;\n        try {\n            info = reader.frameInfo(frameIndex);\n            buffer = new Buffer(reader.width * reader.height * 4);\n            reader.decodeAndBlitFrameRGBA(frameIndex, buffer);\n            if (info.width !== reader.width || info.height !== reader.height) {\n                if (info.y) {\n                    // skip unused rows\n                    buffer = buffer.slice(info.y * reader.width * 4);\n                }\n                if (reader.width > info.width) {\n                    // skip scanstride\n                    for (let ii = 0; ii < info.height; ++ii) {\n                        buffer.copy(buffer, ii * info.width * 4,\n                            (info.x + ii * reader.width) * 4,\n                            (info.x + ii * reader.width) * 4 + info.width * 4);\n                    }\n                }\n                // trim buffer to size\n                buffer = buffer.slice(0, info.width * info.height * 4);\n            }\n        }\n        catch (err) {\n            throw new GifError(err);\n        }\n\n        let usesTransparency = false;\n        if (this._transparentRGBA === null) {\n            if (!alreadyUsedTransparency) {\n                for (let i = 3; i < buffer.length; i += 4) {\n                    if (buffer[i] === 0) {\n                        usesTransparency = true;\n                        i = buffer.length;\n                    }\n                }\n            }\n        }\n        else {\n            for (let i = 3; i < buffer.length; i += 4) {\n                if (buffer[i] === 0) {\n                    buffer.writeUInt32BE(this._transparentRGBA, i - 3);\n                    usesTransparency = true; // GIF might encode unused index\n                }\n            }\n        }\n\n        const frame = new GifFrame(info.width, info.height, buffer, {\n            xOffset: info.x,\n            yOffset: info.y,\n            disposalMethod: info.disposal,\n            interlaced: info.interlaced,\n            delayCentisecs: info.delay\n        });\n        return { frame, usesTransparency };\n    }\n\n    _encodeGif(frames, spec) {\n        let colorInfo;\n        if (spec.colorScope === Gif.LocalColorsOnly) {\n            colorInfo = GifUtil().getColorInfo(frames, 0);\n        }\n        else {\n            colorInfo = GifUtil().getColorInfo(frames, 256);\n            if (!colorInfo.colors) { // if global palette impossible\n                if (spec.colorScope === Gif.GlobalColorsOnly) {\n                    throw new GifError(\n                            \"Too many color indexes for global color table\");\n                }\n                spec.colorScope = Gif.LocalColorsOnly\n            }\n        }\n        spec.usesTransparency = colorInfo.usesTransparency;\n\n        const localPalettes = colorInfo.palettes;\n        if (spec.colorScope === Gif.LocalColorsOnly) {\n            const localSizeEst = 2000; //this._getSizeEstimateLocal(localPalettes, frames);\n            return _encodeLocal(frames, spec, localSizeEst, localPalettes);\n        }\n\n        const globalSizeEst = 2000; //this._getSizeEstimateGlobal(colorInfo, frames);\n        return _encodeGlobal(frames, spec, globalSizeEst, colorInfo);\n    }\n\n    _getSizeEstimateGlobal(globalPalette, frames) {\n        if (this._testInitialBufferSize > 0) {\n            return this._testInitialBufferSize;\n        }\n        let sizeEst = PER_GIF_OVERHEAD + 3*256 /* max palette size*/;\n        const pixelBitWidth = _getPixelBitWidth(globalPalette);\n        frames.forEach(frame => {\n            sizeEst += _getFrameSizeEst(frame, pixelBitWidth);\n        });\n        return sizeEst; // should be the upper limit\n    }\n\n    _getSizeEstimateLocal(palettes, frames) {\n        if (this._testInitialBufferSize > 0) {\n            return this._testInitialBufferSize;\n        }\n        let sizeEst = PER_GIF_OVERHEAD;\n        for (let i = 0; i < frames.length; ++i ) {\n            const palette = palettes[i];\n            const pixelBitWidth = _getPixelBitWidth(palette);\n            sizeEst += _getFrameSizeEst(frames[i], pixelBitWidth);\n        }\n        return sizeEst; // should be the upper limit\n    }\n}\nexports.GifCodec = GifCodec;\n\nfunction _colorLookupLinear(colors, color) {\n    const index = colors.indexOf(color);\n    return (index === -1 ? null : index);\n}\n\nfunction _colorLookupBinary(colors, color) {\n    // adapted from https://stackoverflow.com/a/10264318/650894\n    var lo = 0, hi = colors.length - 1, mid;\n    while (lo <= hi) {\n        mid = Math.floor((lo + hi)/2);\n        if (colors[mid] > color)\n            hi = mid - 1;\n        else if (colors[mid] < color)\n            lo = mid + 1;\n        else\n            return mid;\n    }\n    return null;\n}\n\nfunction _encodeGlobal(frames, spec, bufferSizeEst, globalPalette) {\n    // would be inefficient for frames to lookup colors in extended palette \n    const extendedGlobalPalette = {\n        colors: globalPalette.colors.slice(),\n        usesTransparency: globalPalette.usesTransparency\n    };\n    _extendPaletteToPowerOf2(extendedGlobalPalette);\n    const options = {\n        palette: extendedGlobalPalette.colors,\n        loop: spec.loops\n    };\n    let buffer = new Buffer(bufferSizeEst);\n    let gifWriter;\n    try {\n        gifWriter = new Omggif.GifWriter(buffer, spec.width, spec.height,\n                            options);\n    }\n    catch (err) {\n        throw new GifError(err);\n    }\n    for (let i = 0; i < frames.length; ++i) {\n        buffer = _writeFrame(gifWriter, i, frames[i], globalPalette, false);\n    }\n    return new Gif(buffer.slice(0, gifWriter.end()), frames, spec);\n}\n\nfunction _encodeLocal(frames, spec, bufferSizeEst, localPalettes) {\n    const options = {\n        loop: spec.loops\n    };\n    let buffer = new Buffer(bufferSizeEst);\n    let gifWriter;\n    try {\n        gifWriter = new Omggif.GifWriter(buffer, spec.width, spec.height,\n                            options);\n    }                            \n    catch (err) {\n        throw new GifError(err);\n    }\n    for (let i = 0; i < frames.length; ++i) {\n        buffer = _writeFrame(gifWriter, i, frames[i], localPalettes[i], true);\n    }\n    return new Gif(buffer.slice(0, gifWriter.end()), frames, spec);\n}\n\nfunction _extendPaletteToPowerOf2(palette) {\n    const colors = palette.colors;\n    if (palette.usesTransparency) {\n        colors.push(0);\n    }\n    const colorCount = colors.length;\n    let powerOf2 = 2;\n    while (colorCount > powerOf2) {\n        powerOf2 <<= 1;\n    }\n    colors.length = powerOf2;\n    colors.fill(0, colorCount);\n}\n\nfunction _getFrameSizeEst(frame, pixelBitWidth) {\n    let byteLength = frame.bitmap.width * frame.bitmap.height;\n    byteLength = Math.ceil(byteLength * pixelBitWidth / 8);\n    byteLength += Math.ceil(byteLength / 255); // add block size bytes\n    // assume maximum palete size because it might get extended for power of 2\n    return (PER_FRAME_OVERHEAD + byteLength + 3 * 256 /* largest palette */);\n}\n\nfunction _getIndexedImage(frameIndex, frame, palette) {\n    const colors = palette.colors;\n    const colorToIndexFunc = (colors.length <= 8 ? // guess at the break-even\n            _colorLookupLinear : _colorLookupBinary);\n    const colorBuffer = frame.bitmap.data;\n    const indexBuffer = new Buffer(colorBuffer.length/4);\n    let transparentIndex = colors.length;\n    let i = 0, j = 0;\n\n    while (i < colorBuffer.length) {\n        if (colorBuffer[i + 3] !== 0) {\n            const color = (colorBuffer.readUInt32BE(i, true) >> 8) & 0xFFFFFF;\n            // caller guarantees that the color will be in the palette\n            indexBuffer[j] = colorToIndexFunc(colors, color);\n        }\n        else {\n            indexBuffer[j] = transparentIndex;\n        }\n        i += 4; // skip alpha\n        ++j;\n    }\n\n    if (palette.usesTransparency) {\n        if (transparentIndex === 256) {\n            throw new GifError(`Frame ${frameIndex} already has 256 colors` +\n                    `and so can't use transparency`);\n        }\n    }\n    else {\n        transparentIndex = null;\n    }\n\n    return { buffer: indexBuffer, transparentIndex };\n}\n\nfunction _getPixelBitWidth(palette) {\n    let indexCount = palette.indexCount;\n    let pixelBitWidth = 0;\n    --indexCount; // start at maximum index\n    while (indexCount) {\n        ++pixelBitWidth;\n        indexCount >>= 1;\n    }\n    return (pixelBitWidth > 0 ? pixelBitWidth : 1);\n}\n\nfunction _writeFrame(gifWriter, frameIndex, frame, palette, isLocalPalette) {\n    if (frame.interlaced) {\n        throw new GifError(\"writing interlaced GIFs is not supported\");\n    }\n    const frameInfo = _getIndexedImage(frameIndex, frame, palette);\n    const options = {\n        delay: frame.delayCentisecs,\n        disposal: frame.disposalMethod,\n        transparent: frameInfo.transparentIndex\n    };\n    if (isLocalPalette) {\n        _extendPaletteToPowerOf2(palette); // ok 'cause palette never used again\n        options.palette = palette.colors;\n    }\n    try {\n        let buffer = gifWriter.getOutputBuffer();\n        let startOfFrame = gifWriter.getOutputBufferPosition();\n        let endOfFrame;\n        let tryAgain = true;\n\n        while (tryAgain) {\n            endOfFrame = gifWriter.addFrame(frame.xOffset, frame.yOffset,\n                    frame.bitmap.width, frame.bitmap.height, frameInfo.buffer, options);\n            tryAgain = false;\n            if (endOfFrame >= buffer.length - 1) {\n                const biggerBuffer = new Buffer(buffer.length * 1.5);\n                buffer.copy(biggerBuffer);\n                gifWriter.setOutputBuffer(biggerBuffer);\n                gifWriter.setOutputBufferPosition(startOfFrame);\n                buffer = biggerBuffer;\n                tryAgain = true;\n            }\n        }\n        return buffer;\n    }\n    catch (err) {\n        throw new GifError(err);\n    }\n}\n","'use strict';\n\nconst BitmapImage = require('./bitmapimage');\nconst { Gif, GifError } = require('./gif');\nconst { GifCodec } = require('./gifcodec');\nconst { GifFrame } = require('./gifframe');\nconst GifUtil = require('./gifutil');\n\nmodule.exports = {\n    BitmapImage,\n    Gif,\n    GifCodec,\n    GifFrame,\n    GifUtil,\n    GifError\n};\n","import GIF from \"omggif\";\nimport { GifUtil, GifFrame, BitmapImage, GifCodec } from \"gifwrap\";\nexport default function gif() {\n    return {\n        mime: \"image/gif\",\n        encode: async (bitmap) => {\n            const gif = new BitmapImage(bitmap);\n            GifUtil.quantizeDekker(gif, 256);\n            const newFrame = new GifFrame(bitmap);\n            const gifCodec = new GifCodec();\n            const newGif = await gifCodec.encodeGif([newFrame], {});\n            return newGif.buffer;\n        },\n        decode: (data) => {\n            const gifObj = new GIF.GifReader(data);\n            const gifData = Buffer.alloc(gifObj.width * gifObj.height * 4);\n            gifObj.decodeAndBlitFrameRGBA(0, gifData);\n            return {\n                data: gifData,\n                width: gifObj.width,\n                height: gifObj.height,\n            };\n        },\n    };\n}\n//# sourceMappingURL=index.js.map","/*\n  Copyright (c) 2008, Adobe Systems Incorporated\n  All rights reserved.\n\n  Redistribution and use in source and binary forms, with or without \n  modification, are permitted provided that the following conditions are\n  met:\n\n  * Redistributions of source code must retain the above copyright notice, \n    this list of conditions and the following disclaimer.\n  \n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the \n    documentation and/or other materials provided with the distribution.\n  \n  * Neither the name of Adobe Systems Incorporated nor the names of its \n    contributors may be used to endorse or promote products derived from \n    this software without specific prior written permission.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n  IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\nJPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n\nBasic GUI blocking jpeg encoder\n*/\n\nvar btoa = btoa || function(buf) {\n  return Buffer.from(buf).toString('base64');\n};\n\nfunction JPEGEncoder(quality) {\n  var self = this;\n\tvar fround = Math.round;\n\tvar ffloor = Math.floor;\n\tvar YTable = new Array(64);\n\tvar UVTable = new Array(64);\n\tvar fdtbl_Y = new Array(64);\n\tvar fdtbl_UV = new Array(64);\n\tvar YDC_HT;\n\tvar UVDC_HT;\n\tvar YAC_HT;\n\tvar UVAC_HT;\n\t\n\tvar bitcode = new Array(65535);\n\tvar category = new Array(65535);\n\tvar outputfDCTQuant = new Array(64);\n\tvar DU = new Array(64);\n\tvar byteout = [];\n\tvar bytenew = 0;\n\tvar bytepos = 7;\n\t\n\tvar YDU = new Array(64);\n\tvar UDU = new Array(64);\n\tvar VDU = new Array(64);\n\tvar clt = new Array(256);\n\tvar RGB_YUV_TABLE = new Array(2048);\n\tvar currentQuality;\n\t\n\tvar ZigZag = [\n\t\t\t 0, 1, 5, 6,14,15,27,28,\n\t\t\t 2, 4, 7,13,16,26,29,42,\n\t\t\t 3, 8,12,17,25,30,41,43,\n\t\t\t 9,11,18,24,31,40,44,53,\n\t\t\t10,19,23,32,39,45,52,54,\n\t\t\t20,22,33,38,46,51,55,60,\n\t\t\t21,34,37,47,50,56,59,61,\n\t\t\t35,36,48,49,57,58,62,63\n\t\t];\n\t\n\tvar std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n\tvar std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n\tvar std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n\tvar std_ac_luminance_values = [\n\t\t\t0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n\t\t\t0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n\t\t\t0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n\t\t\t0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n\t\t\t0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n\t\t\t0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n\t\t\t0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n\t\t\t0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n\t\t\t0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n\t\t\t0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n\t\t\t0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n\t\t\t0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n\t\t\t0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n\t\t\t0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n\t\t\t0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n\t\t\t0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n\t\t\t0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n\t\t\t0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n\t\t\t0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n\t\t\t0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n\t\t\t0xf9,0xfa\n\t\t];\n\t\n\tvar std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n\tvar std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n\tvar std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n\tvar std_ac_chrominance_values = [\n\t\t\t0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n\t\t\t0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n\t\t\t0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n\t\t\t0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n\t\t\t0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n\t\t\t0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n\t\t\t0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n\t\t\t0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n\t\t\t0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n\t\t\t0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n\t\t\t0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n\t\t\t0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n\t\t\t0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n\t\t\t0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n\t\t\t0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n\t\t\t0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n\t\t\t0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n\t\t\t0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n\t\t\t0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n\t\t\t0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n\t\t\t0xf9,0xfa\n\t\t];\n\t\n\tfunction initQuantTables(sf){\n\t\t\tvar YQT = [\n\t\t\t\t16, 11, 10, 16, 24, 40, 51, 61,\n\t\t\t\t12, 12, 14, 19, 26, 58, 60, 55,\n\t\t\t\t14, 13, 16, 24, 40, 57, 69, 56,\n\t\t\t\t14, 17, 22, 29, 51, 87, 80, 62,\n\t\t\t\t18, 22, 37, 56, 68,109,103, 77,\n\t\t\t\t24, 35, 55, 64, 81,104,113, 92,\n\t\t\t\t49, 64, 78, 87,103,121,120,101,\n\t\t\t\t72, 92, 95, 98,112,100,103, 99\n\t\t\t];\n\t\t\t\n\t\t\tfor (var i = 0; i < 64; i++) {\n\t\t\t\tvar t = ffloor((YQT[i]*sf+50)/100);\n\t\t\t\tif (t < 1) {\n\t\t\t\t\tt = 1;\n\t\t\t\t} else if (t > 255) {\n\t\t\t\t\tt = 255;\n\t\t\t\t}\n\t\t\t\tYTable[ZigZag[i]] = t;\n\t\t\t}\n\t\t\tvar UVQT = [\n\t\t\t\t17, 18, 24, 47, 99, 99, 99, 99,\n\t\t\t\t18, 21, 26, 66, 99, 99, 99, 99,\n\t\t\t\t24, 26, 56, 99, 99, 99, 99, 99,\n\t\t\t\t47, 66, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t\t99, 99, 99, 99, 99, 99, 99, 99\n\t\t\t];\n\t\t\tfor (var j = 0; j < 64; j++) {\n\t\t\t\tvar u = ffloor((UVQT[j]*sf+50)/100);\n\t\t\t\tif (u < 1) {\n\t\t\t\t\tu = 1;\n\t\t\t\t} else if (u > 255) {\n\t\t\t\t\tu = 255;\n\t\t\t\t}\n\t\t\t\tUVTable[ZigZag[j]] = u;\n\t\t\t}\n\t\t\tvar aasf = [\n\t\t\t\t1.0, 1.387039845, 1.306562965, 1.175875602,\n\t\t\t\t1.0, 0.785694958, 0.541196100, 0.275899379\n\t\t\t];\n\t\t\tvar k = 0;\n\t\t\tfor (var row = 0; row < 8; row++)\n\t\t\t{\n\t\t\t\tfor (var col = 0; col < 8; col++)\n\t\t\t\t{\n\t\t\t\t\tfdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n\t\t\t\t\tfdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction computeHuffmanTbl(nrcodes, std_table){\n\t\t\tvar codevalue = 0;\n\t\t\tvar pos_in_table = 0;\n\t\t\tvar HT = new Array();\n\t\t\tfor (var k = 1; k <= 16; k++) {\n\t\t\t\tfor (var j = 1; j <= nrcodes[k]; j++) {\n\t\t\t\t\tHT[std_table[pos_in_table]] = [];\n\t\t\t\t\tHT[std_table[pos_in_table]][0] = codevalue;\n\t\t\t\t\tHT[std_table[pos_in_table]][1] = k;\n\t\t\t\t\tpos_in_table++;\n\t\t\t\t\tcodevalue++;\n\t\t\t\t}\n\t\t\t\tcodevalue*=2;\n\t\t\t}\n\t\t\treturn HT;\n\t\t}\n\t\t\n\t\tfunction initHuffmanTbl()\n\t\t{\n\t\t\tYDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n\t\t\tUVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n\t\t\tYAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n\t\t\tUVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n\t\t}\n\t\n\t\tfunction initCategoryNumber()\n\t\t{\n\t\t\tvar nrlower = 1;\n\t\t\tvar nrupper = 2;\n\t\t\tfor (var cat = 1; cat <= 15; cat++) {\n\t\t\t\t//Positive numbers\n\t\t\t\tfor (var nr = nrlower; nr<nrupper; nr++) {\n\t\t\t\t\tcategory[32767+nr] = cat;\n\t\t\t\t\tbitcode[32767+nr] = [];\n\t\t\t\t\tbitcode[32767+nr][1] = cat;\n\t\t\t\t\tbitcode[32767+nr][0] = nr;\n\t\t\t\t}\n\t\t\t\t//Negative numbers\n\t\t\t\tfor (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n\t\t\t\t\tcategory[32767+nrneg] = cat;\n\t\t\t\t\tbitcode[32767+nrneg] = [];\n\t\t\t\t\tbitcode[32767+nrneg][1] = cat;\n\t\t\t\t\tbitcode[32767+nrneg][0] = nrupper-1+nrneg;\n\t\t\t\t}\n\t\t\t\tnrlower <<= 1;\n\t\t\t\tnrupper <<= 1;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction initRGBYUVTable() {\n\t\t\tfor(var i = 0; i < 256;i++) {\n\t\t\t\tRGB_YUV_TABLE[i]      \t\t=  19595 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+ 256)>>0] \t=  38470 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+ 512)>>0] \t=   7471 * i + 0x8000;\n\t\t\t\tRGB_YUV_TABLE[(i+ 768)>>0] \t= -11059 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+1024)>>0] \t= -21709 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+1280)>>0] \t=  32768 * i + 0x807FFF;\n\t\t\t\tRGB_YUV_TABLE[(i+1536)>>0] \t= -27439 * i;\n\t\t\t\tRGB_YUV_TABLE[(i+1792)>>0] \t= - 5329 * i;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// IO functions\n\t\tfunction writeBits(bs)\n\t\t{\n\t\t\tvar value = bs[0];\n\t\t\tvar posval = bs[1]-1;\n\t\t\twhile ( posval >= 0 ) {\n\t\t\t\tif (value & (1 << posval) ) {\n\t\t\t\t\tbytenew |= (1 << bytepos);\n\t\t\t\t}\n\t\t\t\tposval--;\n\t\t\t\tbytepos--;\n\t\t\t\tif (bytepos < 0) {\n\t\t\t\t\tif (bytenew == 0xFF) {\n\t\t\t\t\t\twriteByte(0xFF);\n\t\t\t\t\t\twriteByte(0);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\twriteByte(bytenew);\n\t\t\t\t\t}\n\t\t\t\t\tbytepos=7;\n\t\t\t\t\tbytenew=0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\tfunction writeByte(value)\n\t\t{\n\t\t\t//byteout.push(clt[value]); // write char directly instead of converting later\n      byteout.push(value);\n\t\t}\n\t\n\t\tfunction writeWord(value)\n\t\t{\n\t\t\twriteByte((value>>8)&0xFF);\n\t\t\twriteByte((value   )&0xFF);\n\t\t}\n\t\t\n\t\t// DCT & quantization core\n\t\tfunction fDCTQuant(data, fdtbl)\n\t\t{\n\t\t\tvar d0, d1, d2, d3, d4, d5, d6, d7;\n\t\t\t/* Pass 1: process rows. */\n\t\t\tvar dataOff=0;\n\t\t\tvar i;\n\t\t\tvar I8 = 8;\n\t\t\tvar I64 = 64;\n\t\t\tfor (i=0; i<I8; ++i)\n\t\t\t{\n\t\t\t\td0 = data[dataOff];\n\t\t\t\td1 = data[dataOff+1];\n\t\t\t\td2 = data[dataOff+2];\n\t\t\t\td3 = data[dataOff+3];\n\t\t\t\td4 = data[dataOff+4];\n\t\t\t\td5 = data[dataOff+5];\n\t\t\t\td6 = data[dataOff+6];\n\t\t\t\td7 = data[dataOff+7];\n\t\t\t\t\n\t\t\t\tvar tmp0 = d0 + d7;\n\t\t\t\tvar tmp7 = d0 - d7;\n\t\t\t\tvar tmp1 = d1 + d6;\n\t\t\t\tvar tmp6 = d1 - d6;\n\t\t\t\tvar tmp2 = d2 + d5;\n\t\t\t\tvar tmp5 = d2 - d5;\n\t\t\t\tvar tmp3 = d3 + d4;\n\t\t\t\tvar tmp4 = d3 - d4;\n\t\n\t\t\t\t/* Even part */\n\t\t\t\tvar tmp10 = tmp0 + tmp3;\t/* phase 2 */\n\t\t\t\tvar tmp13 = tmp0 - tmp3;\n\t\t\t\tvar tmp11 = tmp1 + tmp2;\n\t\t\t\tvar tmp12 = tmp1 - tmp2;\n\t\n\t\t\t\tdata[dataOff] = tmp10 + tmp11; /* phase 3 */\n\t\t\t\tdata[dataOff+4] = tmp10 - tmp11;\n\t\n\t\t\t\tvar z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n\t\t\t\tdata[dataOff+2] = tmp13 + z1; /* phase 5 */\n\t\t\t\tdata[dataOff+6] = tmp13 - z1;\n\t\n\t\t\t\t/* Odd part */\n\t\t\t\ttmp10 = tmp4 + tmp5; /* phase 2 */\n\t\t\t\ttmp11 = tmp5 + tmp6;\n\t\t\t\ttmp12 = tmp6 + tmp7;\n\t\n\t\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\t\tvar z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n\t\t\t\tvar z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n\t\t\t\tvar z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n\t\t\t\tvar z3 = tmp11 * 0.707106781; /* c4 */\n\t\n\t\t\t\tvar z11 = tmp7 + z3;\t/* phase 5 */\n\t\t\t\tvar z13 = tmp7 - z3;\n\t\n\t\t\t\tdata[dataOff+5] = z13 + z2;\t/* phase 6 */\n\t\t\t\tdata[dataOff+3] = z13 - z2;\n\t\t\t\tdata[dataOff+1] = z11 + z4;\n\t\t\t\tdata[dataOff+7] = z11 - z4;\n\t\n\t\t\t\tdataOff += 8; /* advance pointer to next row */\n\t\t\t}\n\t\n\t\t\t/* Pass 2: process columns. */\n\t\t\tdataOff = 0;\n\t\t\tfor (i=0; i<I8; ++i)\n\t\t\t{\n\t\t\t\td0 = data[dataOff];\n\t\t\t\td1 = data[dataOff + 8];\n\t\t\t\td2 = data[dataOff + 16];\n\t\t\t\td3 = data[dataOff + 24];\n\t\t\t\td4 = data[dataOff + 32];\n\t\t\t\td5 = data[dataOff + 40];\n\t\t\t\td6 = data[dataOff + 48];\n\t\t\t\td7 = data[dataOff + 56];\n\t\t\t\t\n\t\t\t\tvar tmp0p2 = d0 + d7;\n\t\t\t\tvar tmp7p2 = d0 - d7;\n\t\t\t\tvar tmp1p2 = d1 + d6;\n\t\t\t\tvar tmp6p2 = d1 - d6;\n\t\t\t\tvar tmp2p2 = d2 + d5;\n\t\t\t\tvar tmp5p2 = d2 - d5;\n\t\t\t\tvar tmp3p2 = d3 + d4;\n\t\t\t\tvar tmp4p2 = d3 - d4;\n\t\n\t\t\t\t/* Even part */\n\t\t\t\tvar tmp10p2 = tmp0p2 + tmp3p2;\t/* phase 2 */\n\t\t\t\tvar tmp13p2 = tmp0p2 - tmp3p2;\n\t\t\t\tvar tmp11p2 = tmp1p2 + tmp2p2;\n\t\t\t\tvar tmp12p2 = tmp1p2 - tmp2p2;\n\t\n\t\t\t\tdata[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n\t\t\t\tdata[dataOff+32] = tmp10p2 - tmp11p2;\n\t\n\t\t\t\tvar z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n\t\t\t\tdata[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n\t\t\t\tdata[dataOff+48] = tmp13p2 - z1p2;\n\t\n\t\t\t\t/* Odd part */\n\t\t\t\ttmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n\t\t\t\ttmp11p2 = tmp5p2 + tmp6p2;\n\t\t\t\ttmp12p2 = tmp6p2 + tmp7p2;\n\t\n\t\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\t\tvar z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n\t\t\t\tvar z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n\t\t\t\tvar z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n\t\t\t\tvar z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\t\n\t\t\t\tvar z11p2 = tmp7p2 + z3p2;\t/* phase 5 */\n\t\t\t\tvar z13p2 = tmp7p2 - z3p2;\n\t\n\t\t\t\tdata[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n\t\t\t\tdata[dataOff+24] = z13p2 - z2p2;\n\t\t\t\tdata[dataOff+ 8] = z11p2 + z4p2;\n\t\t\t\tdata[dataOff+56] = z11p2 - z4p2;\n\t\n\t\t\t\tdataOff++; /* advance pointer to next column */\n\t\t\t}\n\t\n\t\t\t// Quantize/descale the coefficients\n\t\t\tvar fDCTQuant;\n\t\t\tfor (i=0; i<I64; ++i)\n\t\t\t{\n\t\t\t\t// Apply the quantization and scaling factor & Round to nearest integer\n\t\t\t\tfDCTQuant = data[i]*fdtbl[i];\n\t\t\t\toutputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n\t\t\t\t//outputfDCTQuant[i] = fround(fDCTQuant);\n\n\t\t\t}\n\t\t\treturn outputfDCTQuant;\n\t\t}\n\t\t\n\t\tfunction writeAPP0()\n\t\t{\n\t\t\twriteWord(0xFFE0); // marker\n\t\t\twriteWord(16); // length\n\t\t\twriteByte(0x4A); // J\n\t\t\twriteByte(0x46); // F\n\t\t\twriteByte(0x49); // I\n\t\t\twriteByte(0x46); // F\n\t\t\twriteByte(0); // = \"JFIF\",'\\0'\n\t\t\twriteByte(1); // versionhi\n\t\t\twriteByte(1); // versionlo\n\t\t\twriteByte(0); // xyunits\n\t\t\twriteWord(1); // xdensity\n\t\t\twriteWord(1); // ydensity\n\t\t\twriteByte(0); // thumbnwidth\n\t\t\twriteByte(0); // thumbnheight\n\t\t}\n\n\t\tfunction writeAPP1(exifBuffer) {\n\t\t\tif (!exifBuffer) return;\n\n\t\t\twriteWord(0xFFE1); // APP1 marker\n\n\t\t\tif (exifBuffer[0] === 0x45 &&\n\t\t\t\t\texifBuffer[1] === 0x78 &&\n\t\t\t\t\texifBuffer[2] === 0x69 &&\n\t\t\t\t\texifBuffer[3] === 0x66) {\n\t\t\t\t// Buffer already starts with EXIF, just use it directly\n\t\t\t\twriteWord(exifBuffer.length + 2); // length is buffer + length itself!\n\t\t\t} else {\n\t\t\t\t// Buffer doesn't start with EXIF, write it for them\n\t\t\t\twriteWord(exifBuffer.length + 5 + 2); // length is buffer + EXIF\\0 + length itself!\n\t\t\t\twriteByte(0x45); // E\n\t\t\t\twriteByte(0x78); // X\n\t\t\t\twriteByte(0x69); // I\n\t\t\t\twriteByte(0x66); // F\n\t\t\t\twriteByte(0); // = \"EXIF\",'\\0'\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < exifBuffer.length; i++) {\n\t\t\t\twriteByte(exifBuffer[i]);\n\t\t\t}\n\t\t}\n\n\t\tfunction writeSOF0(width, height)\n\t\t{\n\t\t\twriteWord(0xFFC0); // marker\n\t\t\twriteWord(17);   // length, truecolor YUV JPG\n\t\t\twriteByte(8);    // precision\n\t\t\twriteWord(height);\n\t\t\twriteWord(width);\n\t\t\twriteByte(3);    // nrofcomponents\n\t\t\twriteByte(1);    // IdY\n\t\t\twriteByte(0x11); // HVY\n\t\t\twriteByte(0);    // QTY\n\t\t\twriteByte(2);    // IdU\n\t\t\twriteByte(0x11); // HVU\n\t\t\twriteByte(1);    // QTU\n\t\t\twriteByte(3);    // IdV\n\t\t\twriteByte(0x11); // HVV\n\t\t\twriteByte(1);    // QTV\n\t\t}\n\t\n\t\tfunction writeDQT()\n\t\t{\n\t\t\twriteWord(0xFFDB); // marker\n\t\t\twriteWord(132);\t   // length\n\t\t\twriteByte(0);\n\t\t\tfor (var i=0; i<64; i++) {\n\t\t\t\twriteByte(YTable[i]);\n\t\t\t}\n\t\t\twriteByte(1);\n\t\t\tfor (var j=0; j<64; j++) {\n\t\t\t\twriteByte(UVTable[j]);\n\t\t\t}\n\t\t}\n\t\n\t\tfunction writeDHT()\n\t\t{\n\t\t\twriteWord(0xFFC4); // marker\n\t\t\twriteWord(0x01A2); // length\n\t\n\t\t\twriteByte(0); // HTYDCinfo\n\t\t\tfor (var i=0; i<16; i++) {\n\t\t\t\twriteByte(std_dc_luminance_nrcodes[i+1]);\n\t\t\t}\n\t\t\tfor (var j=0; j<=11; j++) {\n\t\t\t\twriteByte(std_dc_luminance_values[j]);\n\t\t\t}\n\t\n\t\t\twriteByte(0x10); // HTYACinfo\n\t\t\tfor (var k=0; k<16; k++) {\n\t\t\t\twriteByte(std_ac_luminance_nrcodes[k+1]);\n\t\t\t}\n\t\t\tfor (var l=0; l<=161; l++) {\n\t\t\t\twriteByte(std_ac_luminance_values[l]);\n\t\t\t}\n\t\n\t\t\twriteByte(1); // HTUDCinfo\n\t\t\tfor (var m=0; m<16; m++) {\n\t\t\t\twriteByte(std_dc_chrominance_nrcodes[m+1]);\n\t\t\t}\n\t\t\tfor (var n=0; n<=11; n++) {\n\t\t\t\twriteByte(std_dc_chrominance_values[n]);\n\t\t\t}\n\t\n\t\t\twriteByte(0x11); // HTUACinfo\n\t\t\tfor (var o=0; o<16; o++) {\n\t\t\t\twriteByte(std_ac_chrominance_nrcodes[o+1]);\n\t\t\t}\n\t\t\tfor (var p=0; p<=161; p++) {\n\t\t\t\twriteByte(std_ac_chrominance_values[p]);\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction writeCOM(comments)\n\t\t{\n\t\t\tif (typeof comments === \"undefined\" || comments.constructor !== Array) return;\n\t\t\tcomments.forEach(e => {\n\t\t\t\tif (typeof e !== \"string\") return;\n\t\t\t\twriteWord(0xFFFE); // marker\n\t\t\t\tvar l = e.length;\n\t\t\t\twriteWord(l + 2); // length itself as well\n\t\t\t\tvar i;\n\t\t\t\tfor (i = 0; i < l; i++)\n\t\t\t\t\twriteByte(e.charCodeAt(i));\n\t\t\t});\n\t\t}\n\t\n\t\tfunction writeSOS()\n\t\t{\n\t\t\twriteWord(0xFFDA); // marker\n\t\t\twriteWord(12); // length\n\t\t\twriteByte(3); // nrofcomponents\n\t\t\twriteByte(1); // IdY\n\t\t\twriteByte(0); // HTY\n\t\t\twriteByte(2); // IdU\n\t\t\twriteByte(0x11); // HTU\n\t\t\twriteByte(3); // IdV\n\t\t\twriteByte(0x11); // HTV\n\t\t\twriteByte(0); // Ss\n\t\t\twriteByte(0x3f); // Se\n\t\t\twriteByte(0); // Bf\n\t\t}\n\t\t\n\t\tfunction processDU(CDU, fdtbl, DC, HTDC, HTAC){\n\t\t\tvar EOB = HTAC[0x00];\n\t\t\tvar M16zeroes = HTAC[0xF0];\n\t\t\tvar pos;\n\t\t\tvar I16 = 16;\n\t\t\tvar I63 = 63;\n\t\t\tvar I64 = 64;\n\t\t\tvar DU_DCT = fDCTQuant(CDU, fdtbl);\n\t\t\t//ZigZag reorder\n\t\t\tfor (var j=0;j<I64;++j) {\n\t\t\t\tDU[ZigZag[j]]=DU_DCT[j];\n\t\t\t}\n\t\t\tvar Diff = DU[0] - DC; DC = DU[0];\n\t\t\t//Encode DC\n\t\t\tif (Diff==0) {\n\t\t\t\twriteBits(HTDC[0]); // Diff might be 0\n\t\t\t} else {\n\t\t\t\tpos = 32767+Diff;\n\t\t\t\twriteBits(HTDC[category[pos]]);\n\t\t\t\twriteBits(bitcode[pos]);\n\t\t\t}\n\t\t\t//Encode ACs\n\t\t\tvar end0pos = 63; // was const... which is crazy\n\t\t\tfor (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n\t\t\t//end0pos = first element in reverse order !=0\n\t\t\tif ( end0pos == 0) {\n\t\t\t\twriteBits(EOB);\n\t\t\t\treturn DC;\n\t\t\t}\n\t\t\tvar i = 1;\n\t\t\tvar lng;\n\t\t\twhile ( i <= end0pos ) {\n\t\t\t\tvar startpos = i;\n\t\t\t\tfor (; (DU[i]==0) && (i<=end0pos); ++i) {}\n\t\t\t\tvar nrzeroes = i-startpos;\n\t\t\t\tif ( nrzeroes >= I16 ) {\n\t\t\t\t\tlng = nrzeroes>>4;\n\t\t\t\t\tfor (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n\t\t\t\t\t\twriteBits(M16zeroes);\n\t\t\t\t\tnrzeroes = nrzeroes&0xF;\n\t\t\t\t}\n\t\t\t\tpos = 32767+DU[i];\n\t\t\t\twriteBits(HTAC[(nrzeroes<<4)+category[pos]]);\n\t\t\t\twriteBits(bitcode[pos]);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif ( end0pos != I63 ) {\n\t\t\t\twriteBits(EOB);\n\t\t\t}\n\t\t\treturn DC;\n\t\t}\n\n\t\tfunction initCharLookupTable(){\n\t\t\tvar sfcc = String.fromCharCode;\n\t\t\tfor(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n\t\t\t\tclt[i] = sfcc(i);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.encode = function(image,quality) // image data object\n\t\t{\n\t\t\tvar time_start = new Date().getTime();\n\t\t\t\n\t\t\tif(quality) setQuality(quality);\n\t\t\t\n\t\t\t// Initialize bit writer\n\t\t\tbyteout = new Array();\n\t\t\tbytenew=0;\n\t\t\tbytepos=7;\n\t\n\t\t\t// Add JPEG headers\n\t\t\twriteWord(0xFFD8); // SOI\n\t\t\twriteAPP0();\n\t\t\twriteCOM(image.comments);\n\t\t\twriteAPP1(image.exifBuffer);\n\t\t\twriteDQT();\n\t\t\twriteSOF0(image.width,image.height);\n\t\t\twriteDHT();\n\t\t\twriteSOS();\n\n\t\n\t\t\t// Encode 8x8 macroblocks\n\t\t\tvar DCY=0;\n\t\t\tvar DCU=0;\n\t\t\tvar DCV=0;\n\t\t\t\n\t\t\tbytenew=0;\n\t\t\tbytepos=7;\n\t\t\t\n\t\t\t\n\t\t\tthis.encode.displayName = \"_encode_\";\n\n\t\t\tvar imageData = image.data;\n\t\t\tvar width = image.width;\n\t\t\tvar height = image.height;\n\n\t\t\tvar quadWidth = width*4;\n\t\t\tvar tripleWidth = width*3;\n\t\t\t\n\t\t\tvar x, y = 0;\n\t\t\tvar r, g, b;\n\t\t\tvar start,p, col,row,pos;\n\t\t\twhile(y < height){\n\t\t\t\tx = 0;\n\t\t\t\twhile(x < quadWidth){\n\t\t\t\tstart = quadWidth * y + x;\n\t\t\t\tp = start;\n\t\t\t\tcol = -1;\n\t\t\t\trow = 0;\n\t\t\t\t\n\t\t\t\tfor(pos=0; pos < 64; pos++){\n\t\t\t\t\trow = pos >> 3;// /8\n\t\t\t\t\tcol = ( pos & 7 ) * 4; // %8\n\t\t\t\t\tp = start + ( row * quadWidth ) + col;\t\t\n\t\t\t\t\t\n\t\t\t\t\tif(y+row >= height){ // padding bottom\n\t\t\t\t\t\tp-= (quadWidth*(y+1+row-height));\n\t\t\t\t\t}\n\n\t\t\t\t\tif(x+col >= quadWidth){ // padding right\t\n\t\t\t\t\t\tp-= ((x+col) - quadWidth +4)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tr = imageData[ p++ ];\n\t\t\t\t\tg = imageData[ p++ ];\n\t\t\t\t\tb = imageData[ p++ ];\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t/* // calculate YUV values dynamically\n\t\t\t\t\tYDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n\t\t\t\t\tUDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n\t\t\t\t\tVDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n\t\t\t\t\t*/\n\t\t\t\t\t\n\t\t\t\t\t// use lookup table (slightly faster)\n\t\t\t\t\tYDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n\t\t\t\t\tUDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n\t\t\t\t\tVDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tDCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n\t\t\t\tDCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n\t\t\t\tDCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n\t\t\t\tx+=32;\n\t\t\t\t}\n\t\t\t\ty+=8;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t////////////////////////////////////////////////////////////////\n\t\n\t\t\t// Do the bit alignment of the EOI marker\n\t\t\tif ( bytepos >= 0 ) {\n\t\t\t\tvar fillbits = [];\n\t\t\t\tfillbits[1] = bytepos+1;\n\t\t\t\tfillbits[0] = (1<<(bytepos+1))-1;\n\t\t\t\twriteBits(fillbits);\n\t\t\t}\n\t\n\t\t\twriteWord(0xFFD9); //EOI\n\n\t\t\tif (typeof module === 'undefined') return new Uint8Array(byteout);\n      return Buffer.from(byteout);\n\n\t\t\tvar jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n\t\t\t\n\t\t\tbyteout = [];\n\t\t\t\n\t\t\t// benchmarking\n\t\t\tvar duration = new Date().getTime() - time_start;\n    \t\t//console.log('Encoding time: '+ duration + 'ms');\n    \t\t//\n\t\t\t\n\t\t\treturn jpegDataUri\t\t\t\n\t}\n\t\n\tfunction setQuality(quality){\n\t\tif (quality <= 0) {\n\t\t\tquality = 1;\n\t\t}\n\t\tif (quality > 100) {\n\t\t\tquality = 100;\n\t\t}\n\t\t\n\t\tif(currentQuality == quality) return // don't recalc if unchanged\n\t\t\n\t\tvar sf = 0;\n\t\tif (quality < 50) {\n\t\t\tsf = Math.floor(5000 / quality);\n\t\t} else {\n\t\t\tsf = Math.floor(200 - quality*2);\n\t\t}\n\t\t\n\t\tinitQuantTables(sf);\n\t\tcurrentQuality = quality;\n\t\t//console.log('Quality set to: '+quality +'%');\n\t}\n\t\n\tfunction init(){\n\t\tvar time_start = new Date().getTime();\n\t\tif(!quality) quality = 50;\n\t\t// Create tables\n\t\tinitCharLookupTable()\n\t\tinitHuffmanTbl();\n\t\tinitCategoryNumber();\n\t\tinitRGBYUVTable();\n\t\t\n\t\tsetQuality(quality);\n\t\tvar duration = new Date().getTime() - time_start;\n    \t//console.log('Initialization '+ duration + 'ms');\n\t}\n\t\n\tinit();\n\t\n};\n\nif (typeof module !== 'undefined') {\n\tmodule.exports = encode;\n} else if (typeof window !== 'undefined') {\n\twindow['jpeg-js'] = window['jpeg-js'] || {};\n\twindow['jpeg-js'].encode = encode;\n}\n\nfunction encode(imgData, qu) {\n  if (typeof qu === 'undefined') qu = 50;\n  var encoder = new JPEGEncoder(qu);\n\tvar data = encoder.encode(imgData, qu);\n  return {\n    data: data,\n    width: imgData.width,\n    height: imgData.height,\n  };\n}\n\n// helper function to get the imageData of an existing image on the current page.\nfunction getImageDataFromImage(idOrElement){\n\tvar theImg = (typeof(idOrElement)=='string')? document.getElementById(idOrElement):idOrElement;\n\tvar cvs = document.createElement('canvas');\n\tcvs.width = theImg.width;\n\tcvs.height = theImg.height;\n\tvar ctx = cvs.getContext(\"2d\");\n\tctx.drawImage(theImg,0,0);\n\t\n\treturn (ctx.getImageData(0, 0, cvs.width, cvs.height));\n}\n","/* -*- tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\n/*\n   Copyright 2011 notmasteryet\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n*/\n\n// - The JPEG specification can be found in the ITU CCITT Recommendation T.81\n//   (www.w3.org/Graphics/JPEG/itu-t81.pdf)\n// - The JFIF specification can be found in the JPEG File Interchange Format\n//   (www.w3.org/Graphics/JPEG/jfif3.pdf)\n// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters\n//   in PostScript Level 2, Technical Note #5116\n//   (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\n\nvar JpegImage = (function jpegImage() {\n  \"use strict\";\n  var dctZigZag = new Int32Array([\n     0,\n     1,  8,\n    16,  9,  2,\n     3, 10, 17, 24,\n    32, 25, 18, 11, 4,\n     5, 12, 19, 26, 33, 40,\n    48, 41, 34, 27, 20, 13,  6,\n     7, 14, 21, 28, 35, 42, 49, 56,\n    57, 50, 43, 36, 29, 22, 15,\n    23, 30, 37, 44, 51, 58,\n    59, 52, 45, 38, 31,\n    39, 46, 53, 60,\n    61, 54, 47,\n    55, 62,\n    63\n  ]);\n\n  var dctCos1  =  4017   // cos(pi/16)\n  var dctSin1  =   799   // sin(pi/16)\n  var dctCos3  =  3406   // cos(3*pi/16)\n  var dctSin3  =  2276   // sin(3*pi/16)\n  var dctCos6  =  1567   // cos(6*pi/16)\n  var dctSin6  =  3784   // sin(6*pi/16)\n  var dctSqrt2 =  5793   // sqrt(2)\n  var dctSqrt1d2 = 2896  // sqrt(2) / 2\n\n  function constructor() {\n  }\n\n  function buildHuffmanTable(codeLengths, values) {\n    var k = 0, code = [], i, j, length = 16;\n    while (length > 0 && !codeLengths[length - 1])\n      length--;\n    code.push({children: [], index: 0});\n    var p = code[0], q;\n    for (i = 0; i < length; i++) {\n      for (j = 0; j < codeLengths[i]; j++) {\n        p = code.pop();\n        p.children[p.index] = values[k];\n        while (p.index > 0) {\n          if (code.length === 0)\n            throw new Error('Could not recreate Huffman Table');\n          p = code.pop();\n        }\n        p.index++;\n        code.push(p);\n        while (code.length <= i) {\n          code.push(q = {children: [], index: 0});\n          p.children[p.index] = q.children;\n          p = q;\n        }\n        k++;\n      }\n      if (i + 1 < length) {\n        // p here points to last code\n        code.push(q = {children: [], index: 0});\n        p.children[p.index] = q.children;\n        p = q;\n      }\n    }\n    return code[0].children;\n  }\n\n  function decodeScan(data, offset,\n                      frame, components, resetInterval,\n                      spectralStart, spectralEnd,\n                      successivePrev, successive, opts) {\n    var precision = frame.precision;\n    var samplesPerLine = frame.samplesPerLine;\n    var scanLines = frame.scanLines;\n    var mcusPerLine = frame.mcusPerLine;\n    var progressive = frame.progressive;\n    var maxH = frame.maxH, maxV = frame.maxV;\n\n    var startOffset = offset, bitsData = 0, bitsCount = 0;\n    function readBit() {\n      if (bitsCount > 0) {\n        bitsCount--;\n        return (bitsData >> bitsCount) & 1;\n      }\n      bitsData = data[offset++];\n      if (bitsData == 0xFF) {\n        var nextByte = data[offset++];\n        if (nextByte) {\n          throw new Error(\"unexpected marker: \" + ((bitsData << 8) | nextByte).toString(16));\n        }\n        // unstuff 0\n      }\n      bitsCount = 7;\n      return bitsData >>> 7;\n    }\n    function decodeHuffman(tree) {\n      var node = tree, bit;\n      while ((bit = readBit()) !== null) {\n        node = node[bit];\n        if (typeof node === 'number')\n          return node;\n        if (typeof node !== 'object')\n          throw new Error(\"invalid huffman sequence\");\n      }\n      return null;\n    }\n    function receive(length) {\n      var n = 0;\n      while (length > 0) {\n        var bit = readBit();\n        if (bit === null) return;\n        n = (n << 1) | bit;\n        length--;\n      }\n      return n;\n    }\n    function receiveAndExtend(length) {\n      var n = receive(length);\n      if (n >= 1 << (length - 1))\n        return n;\n      return n + (-1 << length) + 1;\n    }\n    function decodeBaseline(component, zz) {\n      var t = decodeHuffman(component.huffmanTableDC);\n      var diff = t === 0 ? 0 : receiveAndExtend(t);\n      zz[0]= (component.pred += diff);\n      var k = 1;\n      while (k < 64) {\n        var rs = decodeHuffman(component.huffmanTableAC);\n        var s = rs & 15, r = rs >> 4;\n        if (s === 0) {\n          if (r < 15)\n            break;\n          k += 16;\n          continue;\n        }\n        k += r;\n        var z = dctZigZag[k];\n        zz[z] = receiveAndExtend(s);\n        k++;\n      }\n    }\n    function decodeDCFirst(component, zz) {\n      var t = decodeHuffman(component.huffmanTableDC);\n      var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive);\n      zz[0] = (component.pred += diff);\n    }\n    function decodeDCSuccessive(component, zz) {\n      zz[0] |= readBit() << successive;\n    }\n    var eobrun = 0;\n    function decodeACFirst(component, zz) {\n      if (eobrun > 0) {\n        eobrun--;\n        return;\n      }\n      var k = spectralStart, e = spectralEnd;\n      while (k <= e) {\n        var rs = decodeHuffman(component.huffmanTableAC);\n        var s = rs & 15, r = rs >> 4;\n        if (s === 0) {\n          if (r < 15) {\n            eobrun = receive(r) + (1 << r) - 1;\n            break;\n          }\n          k += 16;\n          continue;\n        }\n        k += r;\n        var z = dctZigZag[k];\n        zz[z] = receiveAndExtend(s) * (1 << successive);\n        k++;\n      }\n    }\n    var successiveACState = 0, successiveACNextValue;\n    function decodeACSuccessive(component, zz) {\n      var k = spectralStart, e = spectralEnd, r = 0;\n      while (k <= e) {\n        var z = dctZigZag[k];\n        var direction = zz[z] < 0 ? -1 : 1;\n        switch (successiveACState) {\n        case 0: // initial state\n          var rs = decodeHuffman(component.huffmanTableAC);\n          var s = rs & 15, r = rs >> 4;\n          if (s === 0) {\n            if (r < 15) {\n              eobrun = receive(r) + (1 << r);\n              successiveACState = 4;\n            } else {\n              r = 16;\n              successiveACState = 1;\n            }\n          } else {\n            if (s !== 1)\n              throw new Error(\"invalid ACn encoding\");\n            successiveACNextValue = receiveAndExtend(s);\n            successiveACState = r ? 2 : 3;\n          }\n          continue;\n        case 1: // skipping r zero items\n        case 2:\n          if (zz[z])\n            zz[z] += (readBit() << successive) * direction;\n          else {\n            r--;\n            if (r === 0)\n              successiveACState = successiveACState == 2 ? 3 : 0;\n          }\n          break;\n        case 3: // set value for a zero item\n          if (zz[z])\n            zz[z] += (readBit() << successive) * direction;\n          else {\n            zz[z] = successiveACNextValue << successive;\n            successiveACState = 0;\n          }\n          break;\n        case 4: // eob\n          if (zz[z])\n            zz[z] += (readBit() << successive) * direction;\n          break;\n        }\n        k++;\n      }\n      if (successiveACState === 4) {\n        eobrun--;\n        if (eobrun === 0)\n          successiveACState = 0;\n      }\n    }\n    function decodeMcu(component, decode, mcu, row, col) {\n      var mcuRow = (mcu / mcusPerLine) | 0;\n      var mcuCol = mcu % mcusPerLine;\n      var blockRow = mcuRow * component.v + row;\n      var blockCol = mcuCol * component.h + col;\n      // If the block is missing and we're in tolerant mode, just skip it.\n      if (component.blocks[blockRow] === undefined && opts.tolerantDecoding)\n        return;\n      decode(component, component.blocks[blockRow][blockCol]);\n    }\n    function decodeBlock(component, decode, mcu) {\n      var blockRow = (mcu / component.blocksPerLine) | 0;\n      var blockCol = mcu % component.blocksPerLine;\n      // If the block is missing and we're in tolerant mode, just skip it.\n      if (component.blocks[blockRow] === undefined && opts.tolerantDecoding)\n        return;\n      decode(component, component.blocks[blockRow][blockCol]);\n    }\n\n    var componentsLength = components.length;\n    var component, i, j, k, n;\n    var decodeFn;\n    if (progressive) {\n      if (spectralStart === 0)\n        decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n      else\n        decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n    } else {\n      decodeFn = decodeBaseline;\n    }\n\n    var mcu = 0, marker;\n    var mcuExpected;\n    if (componentsLength == 1) {\n      mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n    } else {\n      mcuExpected = mcusPerLine * frame.mcusPerColumn;\n    }\n    if (!resetInterval) resetInterval = mcuExpected;\n\n    var h, v;\n    while (mcu < mcuExpected) {\n      // reset interval stuff\n      for (i = 0; i < componentsLength; i++)\n        components[i].pred = 0;\n      eobrun = 0;\n\n      if (componentsLength == 1) {\n        component = components[0];\n        for (n = 0; n < resetInterval; n++) {\n          decodeBlock(component, decodeFn, mcu);\n          mcu++;\n        }\n      } else {\n        for (n = 0; n < resetInterval; n++) {\n          for (i = 0; i < componentsLength; i++) {\n            component = components[i];\n            h = component.h;\n            v = component.v;\n            for (j = 0; j < v; j++) {\n              for (k = 0; k < h; k++) {\n                decodeMcu(component, decodeFn, mcu, j, k);\n              }\n            }\n          }\n          mcu++;\n\n          // If we've reached our expected MCU's, stop decoding\n          if (mcu === mcuExpected) break;\n        }\n      }\n\n      if (mcu === mcuExpected) {\n        // Skip trailing bytes at the end of the scan - until we reach the next marker\n        do {\n          if (data[offset] === 0xFF) {\n            if (data[offset + 1] !== 0x00) {\n              break;\n            }\n          }\n          offset += 1;\n        } while (offset < data.length - 2);\n      }\n\n      // find marker\n      bitsCount = 0;\n      marker = (data[offset] << 8) | data[offset + 1];\n      if (marker < 0xFF00) {\n        throw new Error(\"marker was not found\");\n      }\n\n      if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx\n        offset += 2;\n      }\n      else\n        break;\n    }\n\n    return offset - startOffset;\n  }\n\n  function buildComponentData(frame, component) {\n    var lines = [];\n    var blocksPerLine = component.blocksPerLine;\n    var blocksPerColumn = component.blocksPerColumn;\n    var samplesPerLine = blocksPerLine << 3;\n    // Only 1 used per invocation of this function and garbage collected after invocation, so no need to account for its memory footprint.\n    var R = new Int32Array(64), r = new Uint8Array(64);\n\n    // A port of poppler's IDCT method which in turn is taken from:\n    //   Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n    //   \"Practical Fast 1-D DCT Algorithms with 11 Multiplications\",\n    //   IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n    //   988-991.\n    function quantizeAndInverse(zz, dataOut, dataIn) {\n      var qt = component.quantizationTable;\n      var v0, v1, v2, v3, v4, v5, v6, v7, t;\n      var p = dataIn;\n      var i;\n\n      // dequant\n      for (i = 0; i < 64; i++)\n        p[i] = zz[i] * qt[i];\n\n      // inverse DCT on rows\n      for (i = 0; i < 8; ++i) {\n        var row = 8 * i;\n\n        // check for all-zero AC coefficients\n        if (p[1 + row] == 0 && p[2 + row] == 0 && p[3 + row] == 0 &&\n            p[4 + row] == 0 && p[5 + row] == 0 && p[6 + row] == 0 &&\n            p[7 + row] == 0) {\n          t = (dctSqrt2 * p[0 + row] + 512) >> 10;\n          p[0 + row] = t;\n          p[1 + row] = t;\n          p[2 + row] = t;\n          p[3 + row] = t;\n          p[4 + row] = t;\n          p[5 + row] = t;\n          p[6 + row] = t;\n          p[7 + row] = t;\n          continue;\n        }\n\n        // stage 4\n        v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;\n        v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;\n        v2 = p[2 + row];\n        v3 = p[6 + row];\n        v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;\n        v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;\n        v5 = p[3 + row] << 4;\n        v6 = p[5 + row] << 4;\n\n        // stage 3\n        t = (v0 - v1+ 1) >> 1;\n        v0 = (v0 + v1 + 1) >> 1;\n        v1 = t;\n        t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n        v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n        v3 = t;\n        t = (v4 - v6 + 1) >> 1;\n        v4 = (v4 + v6 + 1) >> 1;\n        v6 = t;\n        t = (v7 + v5 + 1) >> 1;\n        v5 = (v7 - v5 + 1) >> 1;\n        v7 = t;\n\n        // stage 2\n        t = (v0 - v3 + 1) >> 1;\n        v0 = (v0 + v3 + 1) >> 1;\n        v3 = t;\n        t = (v1 - v2 + 1) >> 1;\n        v1 = (v1 + v2 + 1) >> 1;\n        v2 = t;\n        t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n        v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n        v7 = t;\n        t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n        v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n        v6 = t;\n\n        // stage 1\n        p[0 + row] = v0 + v7;\n        p[7 + row] = v0 - v7;\n        p[1 + row] = v1 + v6;\n        p[6 + row] = v1 - v6;\n        p[2 + row] = v2 + v5;\n        p[5 + row] = v2 - v5;\n        p[3 + row] = v3 + v4;\n        p[4 + row] = v3 - v4;\n      }\n\n      // inverse DCT on columns\n      for (i = 0; i < 8; ++i) {\n        var col = i;\n\n        // check for all-zero AC coefficients\n        if (p[1*8 + col] == 0 && p[2*8 + col] == 0 && p[3*8 + col] == 0 &&\n            p[4*8 + col] == 0 && p[5*8 + col] == 0 && p[6*8 + col] == 0 &&\n            p[7*8 + col] == 0) {\n          t = (dctSqrt2 * dataIn[i+0] + 8192) >> 14;\n          p[0*8 + col] = t;\n          p[1*8 + col] = t;\n          p[2*8 + col] = t;\n          p[3*8 + col] = t;\n          p[4*8 + col] = t;\n          p[5*8 + col] = t;\n          p[6*8 + col] = t;\n          p[7*8 + col] = t;\n          continue;\n        }\n\n        // stage 4\n        v0 = (dctSqrt2 * p[0*8 + col] + 2048) >> 12;\n        v1 = (dctSqrt2 * p[4*8 + col] + 2048) >> 12;\n        v2 = p[2*8 + col];\n        v3 = p[6*8 + col];\n        v4 = (dctSqrt1d2 * (p[1*8 + col] - p[7*8 + col]) + 2048) >> 12;\n        v7 = (dctSqrt1d2 * (p[1*8 + col] + p[7*8 + col]) + 2048) >> 12;\n        v5 = p[3*8 + col];\n        v6 = p[5*8 + col];\n\n        // stage 3\n        t = (v0 - v1 + 1) >> 1;\n        v0 = (v0 + v1 + 1) >> 1;\n        v1 = t;\n        t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n        v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n        v3 = t;\n        t = (v4 - v6 + 1) >> 1;\n        v4 = (v4 + v6 + 1) >> 1;\n        v6 = t;\n        t = (v7 + v5 + 1) >> 1;\n        v5 = (v7 - v5 + 1) >> 1;\n        v7 = t;\n\n        // stage 2\n        t = (v0 - v3 + 1) >> 1;\n        v0 = (v0 + v3 + 1) >> 1;\n        v3 = t;\n        t = (v1 - v2 + 1) >> 1;\n        v1 = (v1 + v2 + 1) >> 1;\n        v2 = t;\n        t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n        v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n        v7 = t;\n        t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n        v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n        v6 = t;\n\n        // stage 1\n        p[0*8 + col] = v0 + v7;\n        p[7*8 + col] = v0 - v7;\n        p[1*8 + col] = v1 + v6;\n        p[6*8 + col] = v1 - v6;\n        p[2*8 + col] = v2 + v5;\n        p[5*8 + col] = v2 - v5;\n        p[3*8 + col] = v3 + v4;\n        p[4*8 + col] = v3 - v4;\n      }\n\n      // convert to 8-bit integers\n      for (i = 0; i < 64; ++i) {\n        var sample = 128 + ((p[i] + 8) >> 4);\n        dataOut[i] = sample < 0 ? 0 : sample > 0xFF ? 0xFF : sample;\n      }\n    }\n\n    requestMemoryAllocation(samplesPerLine * blocksPerColumn * 8);\n\n    var i, j;\n    for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n      var scanLine = blockRow << 3;\n      for (i = 0; i < 8; i++)\n        lines.push(new Uint8Array(samplesPerLine));\n      for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n        quantizeAndInverse(component.blocks[blockRow][blockCol], r, R);\n\n        var offset = 0, sample = blockCol << 3;\n        for (j = 0; j < 8; j++) {\n          var line = lines[scanLine + j];\n          for (i = 0; i < 8; i++)\n            line[sample + i] = r[offset++];\n        }\n      }\n    }\n    return lines;\n  }\n\n  function clampTo8bit(a) {\n    return a < 0 ? 0 : a > 255 ? 255 : a;\n  }\n\n  constructor.prototype = {\n    load: function load(path) {\n      var xhr = new XMLHttpRequest();\n      xhr.open(\"GET\", path, true);\n      xhr.responseType = \"arraybuffer\";\n      xhr.onload = (function() {\n        // TODO catch parse error\n        var data = new Uint8Array(xhr.response || xhr.mozResponseArrayBuffer);\n        this.parse(data);\n        if (this.onload)\n          this.onload();\n      }).bind(this);\n      xhr.send(null);\n    },\n    parse: function parse(data) {\n      var maxResolutionInPixels = this.opts.maxResolutionInMP * 1000 * 1000;\n      var offset = 0, length = data.length;\n      function readUint16() {\n        var value = (data[offset] << 8) | data[offset + 1];\n        offset += 2;\n        return value;\n      }\n      function readDataBlock() {\n        var length = readUint16();\n        var array = data.subarray(offset, offset + length - 2);\n        offset += array.length;\n        return array;\n      }\n      function prepareComponents(frame) {\n        // According to the JPEG standard, the sampling factor must be between 1 and 4\n        // See https://github.com/libjpeg-turbo/libjpeg-turbo/blob/9abeff46d87bd201a952e276f3e4339556a403a3/libjpeg.txt#L1138-L1146\n        var maxH = 1, maxV = 1;\n        var component, componentId;\n        for (componentId in frame.components) {\n          if (frame.components.hasOwnProperty(componentId)) {\n            component = frame.components[componentId];\n            if (maxH < component.h) maxH = component.h;\n            if (maxV < component.v) maxV = component.v;\n          }\n        }\n        var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / maxH);\n        var mcusPerColumn = Math.ceil(frame.scanLines / 8 / maxV);\n        for (componentId in frame.components) {\n          if (frame.components.hasOwnProperty(componentId)) {\n            component = frame.components[componentId];\n            var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / maxH);\n            var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines  / 8) * component.v / maxV);\n            var blocksPerLineForMcu = mcusPerLine * component.h;\n            var blocksPerColumnForMcu = mcusPerColumn * component.v;\n            var blocksToAllocate = blocksPerColumnForMcu * blocksPerLineForMcu;\n            var blocks = [];\n\n            // Each block is a Int32Array of length 64 (4 x 64 = 256 bytes)\n            requestMemoryAllocation(blocksToAllocate * 256);\n\n            for (var i = 0; i < blocksPerColumnForMcu; i++) {\n              var row = [];\n              for (var j = 0; j < blocksPerLineForMcu; j++)\n                row.push(new Int32Array(64));\n              blocks.push(row);\n            }\n            component.blocksPerLine = blocksPerLine;\n            component.blocksPerColumn = blocksPerColumn;\n            component.blocks = blocks;\n          }\n        }\n        frame.maxH = maxH;\n        frame.maxV = maxV;\n        frame.mcusPerLine = mcusPerLine;\n        frame.mcusPerColumn = mcusPerColumn;\n      }\n      var jfif = null;\n      var adobe = null;\n      var pixels = null;\n      var frame, resetInterval;\n      var quantizationTables = [], frames = [];\n      var huffmanTablesAC = [], huffmanTablesDC = [];\n      var fileMarker = readUint16();\n      var malformedDataOffset = -1;\n      this.comments = [];\n      if (fileMarker != 0xFFD8) { // SOI (Start of Image)\n        throw new Error(\"SOI not found\");\n      }\n\n      fileMarker = readUint16();\n      while (fileMarker != 0xFFD9) { // EOI (End of image)\n        var i, j, l;\n        switch(fileMarker) {\n          case 0xFF00: break;\n          case 0xFFE0: // APP0 (Application Specific)\n          case 0xFFE1: // APP1\n          case 0xFFE2: // APP2\n          case 0xFFE3: // APP3\n          case 0xFFE4: // APP4\n          case 0xFFE5: // APP5\n          case 0xFFE6: // APP6\n          case 0xFFE7: // APP7\n          case 0xFFE8: // APP8\n          case 0xFFE9: // APP9\n          case 0xFFEA: // APP10\n          case 0xFFEB: // APP11\n          case 0xFFEC: // APP12\n          case 0xFFED: // APP13\n          case 0xFFEE: // APP14\n          case 0xFFEF: // APP15\n          case 0xFFFE: // COM (Comment)\n            var appData = readDataBlock();\n\n            if (fileMarker === 0xFFFE) {\n              var comment = String.fromCharCode.apply(null, appData);\n              this.comments.push(comment);\n            }\n\n            if (fileMarker === 0xFFE0) {\n              if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 &&\n                appData[3] === 0x46 && appData[4] === 0) { // 'JFIF\\x00'\n                jfif = {\n                  version: { major: appData[5], minor: appData[6] },\n                  densityUnits: appData[7],\n                  xDensity: (appData[8] << 8) | appData[9],\n                  yDensity: (appData[10] << 8) | appData[11],\n                  thumbWidth: appData[12],\n                  thumbHeight: appData[13],\n                  thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])\n                };\n              }\n            }\n            // TODO APP1 - Exif\n            if (fileMarker === 0xFFE1) {\n              if (appData[0] === 0x45 &&\n                appData[1] === 0x78 &&\n                appData[2] === 0x69 &&\n                appData[3] === 0x66 &&\n                appData[4] === 0) { // 'EXIF\\x00'\n                this.exifBuffer = appData.subarray(5, appData.length);\n              }\n            }\n\n            if (fileMarker === 0xFFEE) {\n              if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F &&\n                appData[3] === 0x62 && appData[4] === 0x65 && appData[5] === 0) { // 'Adobe\\x00'\n                adobe = {\n                  version: appData[6],\n                  flags0: (appData[7] << 8) | appData[8],\n                  flags1: (appData[9] << 8) | appData[10],\n                  transformCode: appData[11]\n                };\n              }\n            }\n            break;\n\n          case 0xFFDB: // DQT (Define Quantization Tables)\n            var quantizationTablesLength = readUint16();\n            var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n            while (offset < quantizationTablesEnd) {\n              var quantizationTableSpec = data[offset++];\n              requestMemoryAllocation(64 * 4);\n              var tableData = new Int32Array(64);\n              if ((quantizationTableSpec >> 4) === 0) { // 8 bit values\n                for (j = 0; j < 64; j++) {\n                  var z = dctZigZag[j];\n                  tableData[z] = data[offset++];\n                }\n              } else if ((quantizationTableSpec >> 4) === 1) { //16 bit\n                for (j = 0; j < 64; j++) {\n                  var z = dctZigZag[j];\n                  tableData[z] = readUint16();\n                }\n              } else\n                throw new Error(\"DQT: invalid table spec\");\n              quantizationTables[quantizationTableSpec & 15] = tableData;\n            }\n            break;\n\n          case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT)\n          case 0xFFC1: // SOF1 (Start of Frame, Extended DCT)\n          case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT)\n            readUint16(); // skip data length\n            frame = {};\n            frame.extended = (fileMarker === 0xFFC1);\n            frame.progressive = (fileMarker === 0xFFC2);\n            frame.precision = data[offset++];\n            frame.scanLines = readUint16();\n            frame.samplesPerLine = readUint16();\n            frame.components = {};\n            frame.componentsOrder = [];\n\n            var pixelsInFrame = frame.scanLines * frame.samplesPerLine;\n            if (pixelsInFrame > maxResolutionInPixels) {\n              var exceededAmount = Math.ceil((pixelsInFrame - maxResolutionInPixels) / 1e6);\n              throw new Error(`maxResolutionInMP limit exceeded by ${exceededAmount}MP`);\n            }\n\n            var componentsCount = data[offset++], componentId;\n            var maxH = 0, maxV = 0;\n            for (i = 0; i < componentsCount; i++) {\n              componentId = data[offset];\n              var h = data[offset + 1] >> 4;\n              var v = data[offset + 1] & 15;\n              var qId = data[offset + 2];\n\n              if ( h <= 0 || v <= 0 ) {\n                throw new Error('Invalid sampling factor, expected values above 0');\n              }\n\n              frame.componentsOrder.push(componentId);\n              frame.components[componentId] = {\n                h: h,\n                v: v,\n                quantizationIdx: qId\n              };\n              offset += 3;\n            }\n            prepareComponents(frame);\n            frames.push(frame);\n            break;\n\n          case 0xFFC4: // DHT (Define Huffman Tables)\n            var huffmanLength = readUint16();\n            for (i = 2; i < huffmanLength;) {\n              var huffmanTableSpec = data[offset++];\n              var codeLengths = new Uint8Array(16);\n              var codeLengthSum = 0;\n              for (j = 0; j < 16; j++, offset++) {\n                codeLengthSum += (codeLengths[j] = data[offset]);\n              }\n              requestMemoryAllocation(16 + codeLengthSum);\n              var huffmanValues = new Uint8Array(codeLengthSum);\n              for (j = 0; j < codeLengthSum; j++, offset++)\n                huffmanValues[j] = data[offset];\n              i += 17 + codeLengthSum;\n\n              ((huffmanTableSpec >> 4) === 0 ?\n                huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] =\n                buildHuffmanTable(codeLengths, huffmanValues);\n            }\n            break;\n\n          case 0xFFDD: // DRI (Define Restart Interval)\n            readUint16(); // skip data length\n            resetInterval = readUint16();\n            break;\n\n          case 0xFFDC: // Number of Lines marker\n            readUint16() // skip data length\n            readUint16() // Ignore this data since it represents the image height\n            break;\n            \n          case 0xFFDA: // SOS (Start of Scan)\n            var scanLength = readUint16();\n            var selectorsCount = data[offset++];\n            var components = [], component;\n            for (i = 0; i < selectorsCount; i++) {\n              component = frame.components[data[offset++]];\n              var tableSpec = data[offset++];\n              component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n              component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n              components.push(component);\n            }\n            var spectralStart = data[offset++];\n            var spectralEnd = data[offset++];\n            var successiveApproximation = data[offset++];\n            var processed = decodeScan(data, offset,\n              frame, components, resetInterval,\n              spectralStart, spectralEnd,\n              successiveApproximation >> 4, successiveApproximation & 15, this.opts);\n            offset += processed;\n            break;\n\n          case 0xFFFF: // Fill bytes\n            if (data[offset] !== 0xFF) { // Avoid skipping a valid marker.\n              offset--;\n            }\n            break;\n          default:\n            if (data[offset - 3] == 0xFF &&\n                data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) {\n              // could be incorrect encoding -- last 0xFF byte of the previous\n              // block was eaten by the encoder\n              offset -= 3;\n              break;\n            }\n            else if (fileMarker === 0xE0 || fileMarker == 0xE1) {\n              // Recover from malformed APP1 markers popular in some phone models.\n              // See https://github.com/eugeneware/jpeg-js/issues/82\n              if (malformedDataOffset !== -1) {\n                throw new Error(`first unknown JPEG marker at offset ${malformedDataOffset.toString(16)}, second unknown JPEG marker ${fileMarker.toString(16)} at offset ${(offset - 1).toString(16)}`);\n              }\n              malformedDataOffset = offset - 1;\n              const nextOffset = readUint16();\n              if (data[offset + nextOffset - 2] === 0xFF) {\n                offset += nextOffset - 2;\n                break;\n              }\n            }\n            throw new Error(\"unknown JPEG marker \" + fileMarker.toString(16));\n        }\n        fileMarker = readUint16();\n      }\n      if (frames.length != 1)\n        throw new Error(\"only single frame JPEGs supported\");\n\n      // set each frame's components quantization table\n      for (var i = 0; i < frames.length; i++) {\n        var cp = frames[i].components;\n        for (var j in cp) {\n          cp[j].quantizationTable = quantizationTables[cp[j].quantizationIdx];\n          delete cp[j].quantizationIdx;\n        }\n      }\n\n      this.width = frame.samplesPerLine;\n      this.height = frame.scanLines;\n      this.jfif = jfif;\n      this.adobe = adobe;\n      this.components = [];\n      for (var i = 0; i < frame.componentsOrder.length; i++) {\n        var component = frame.components[frame.componentsOrder[i]];\n        this.components.push({\n          lines: buildComponentData(frame, component),\n          scaleX: component.h / frame.maxH,\n          scaleY: component.v / frame.maxV\n        });\n      }\n    },\n    getData: function getData(width, height) {\n      var scaleX = this.width / width, scaleY = this.height / height;\n\n      var component1, component2, component3, component4;\n      var component1Line, component2Line, component3Line, component4Line;\n      var x, y;\n      var offset = 0;\n      var Y, Cb, Cr, K, C, M, Ye, R, G, B;\n      var colorTransform;\n      var dataLength = width * height * this.components.length;\n      requestMemoryAllocation(dataLength);\n      var data = new Uint8Array(dataLength);\n      switch (this.components.length) {\n        case 1:\n          component1 = this.components[0];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n\n              data[offset++] = Y;\n            }\n          }\n          break;\n        case 2:\n          // PDF might compress two component data in custom colorspace\n          component1 = this.components[0];\n          component2 = this.components[1];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n              data[offset++] = Y;\n              Y = component2Line[0 | (x * component2.scaleX * scaleX)];\n              data[offset++] = Y;\n            }\n          }\n          break;\n        case 3:\n          // The default transform for three components is true\n          colorTransform = true;\n          // The adobe transform marker overrides any previous setting\n          if (this.adobe && this.adobe.transformCode)\n            colorTransform = true;\n          else if (typeof this.opts.colorTransform !== 'undefined')\n            colorTransform = !!this.opts.colorTransform;\n\n          component1 = this.components[0];\n          component2 = this.components[1];\n          component3 = this.components[2];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];\n            component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              if (!colorTransform) {\n                R = component1Line[0 | (x * component1.scaleX * scaleX)];\n                G = component2Line[0 | (x * component2.scaleX * scaleX)];\n                B = component3Line[0 | (x * component3.scaleX * scaleX)];\n              } else {\n                Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n                Cb = component2Line[0 | (x * component2.scaleX * scaleX)];\n                Cr = component3Line[0 | (x * component3.scaleX * scaleX)];\n\n                R = clampTo8bit(Y + 1.402 * (Cr - 128));\n                G = clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));\n                B = clampTo8bit(Y + 1.772 * (Cb - 128));\n              }\n\n              data[offset++] = R;\n              data[offset++] = G;\n              data[offset++] = B;\n            }\n          }\n          break;\n        case 4:\n          if (!this.adobe)\n            throw new Error('Unsupported color mode (4 components)');\n          // The default transform for four components is false\n          colorTransform = false;\n          // The adobe transform marker overrides any previous setting\n          if (this.adobe && this.adobe.transformCode)\n            colorTransform = true;\n          else if (typeof this.opts.colorTransform !== 'undefined')\n            colorTransform = !!this.opts.colorTransform;\n\n          component1 = this.components[0];\n          component2 = this.components[1];\n          component3 = this.components[2];\n          component4 = this.components[3];\n          for (y = 0; y < height; y++) {\n            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];\n            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];\n            component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)];\n            component4Line = component4.lines[0 | (y * component4.scaleY * scaleY)];\n            for (x = 0; x < width; x++) {\n              if (!colorTransform) {\n                C = component1Line[0 | (x * component1.scaleX * scaleX)];\n                M = component2Line[0 | (x * component2.scaleX * scaleX)];\n                Ye = component3Line[0 | (x * component3.scaleX * scaleX)];\n                K = component4Line[0 | (x * component4.scaleX * scaleX)];\n              } else {\n                Y = component1Line[0 | (x * component1.scaleX * scaleX)];\n                Cb = component2Line[0 | (x * component2.scaleX * scaleX)];\n                Cr = component3Line[0 | (x * component3.scaleX * scaleX)];\n                K = component4Line[0 | (x * component4.scaleX * scaleX)];\n\n                C = 255 - clampTo8bit(Y + 1.402 * (Cr - 128));\n                M = 255 - clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));\n                Ye = 255 - clampTo8bit(Y + 1.772 * (Cb - 128));\n              }\n              data[offset++] = 255-C;\n              data[offset++] = 255-M;\n              data[offset++] = 255-Ye;\n              data[offset++] = 255-K;\n            }\n          }\n          break;\n        default:\n          throw new Error('Unsupported color mode');\n      }\n      return data;\n    },\n    copyToImageData: function copyToImageData(imageData, formatAsRGBA) {\n      var width = imageData.width, height = imageData.height;\n      var imageDataArray = imageData.data;\n      var data = this.getData(width, height);\n      var i = 0, j = 0, x, y;\n      var Y, K, C, M, R, G, B;\n      switch (this.components.length) {\n        case 1:\n          for (y = 0; y < height; y++) {\n            for (x = 0; x < width; x++) {\n              Y = data[i++];\n\n              imageDataArray[j++] = Y;\n              imageDataArray[j++] = Y;\n              imageDataArray[j++] = Y;\n              if (formatAsRGBA) {\n                imageDataArray[j++] = 255;\n              }\n            }\n          }\n          break;\n        case 3:\n          for (y = 0; y < height; y++) {\n            for (x = 0; x < width; x++) {\n              R = data[i++];\n              G = data[i++];\n              B = data[i++];\n\n              imageDataArray[j++] = R;\n              imageDataArray[j++] = G;\n              imageDataArray[j++] = B;\n              if (formatAsRGBA) {\n                imageDataArray[j++] = 255;\n              }\n            }\n          }\n          break;\n        case 4:\n          for (y = 0; y < height; y++) {\n            for (x = 0; x < width; x++) {\n              C = data[i++];\n              M = data[i++];\n              Y = data[i++];\n              K = data[i++];\n\n              R = 255 - clampTo8bit(C * (1 - K / 255) + K);\n              G = 255 - clampTo8bit(M * (1 - K / 255) + K);\n              B = 255 - clampTo8bit(Y * (1 - K / 255) + K);\n\n              imageDataArray[j++] = R;\n              imageDataArray[j++] = G;\n              imageDataArray[j++] = B;\n              if (formatAsRGBA) {\n                imageDataArray[j++] = 255;\n              }\n            }\n          }\n          break;\n        default:\n          throw new Error('Unsupported color mode');\n      }\n    }\n  };\n\n\n  // We cap the amount of memory used by jpeg-js to avoid unexpected OOMs from untrusted content.\n  var totalBytesAllocated = 0;\n  var maxMemoryUsageBytes = 0;\n  function requestMemoryAllocation(increaseAmount = 0) {\n    var totalMemoryImpactBytes = totalBytesAllocated + increaseAmount;\n    if (totalMemoryImpactBytes > maxMemoryUsageBytes) {\n      var exceededAmount = Math.ceil((totalMemoryImpactBytes - maxMemoryUsageBytes) / 1024 / 1024);\n      throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${exceededAmount}MB`);\n    }\n\n    totalBytesAllocated = totalMemoryImpactBytes;\n  }\n\n  constructor.resetMaxMemoryUsage = function (maxMemoryUsageBytes_) {\n    totalBytesAllocated = 0;\n    maxMemoryUsageBytes = maxMemoryUsageBytes_;\n  };\n\n  constructor.getBytesAllocated = function () {\n    return totalBytesAllocated;\n  };\n\n  constructor.requestMemoryAllocation = requestMemoryAllocation;\n\n  return constructor;\n})();\n\nif (typeof module !== 'undefined') {\n\tmodule.exports = decode;\n} else if (typeof window !== 'undefined') {\n\twindow['jpeg-js'] = window['jpeg-js'] || {};\n\twindow['jpeg-js'].decode = decode;\n}\n\nfunction decode(jpegData, userOpts = {}) {\n  var defaultOpts = {\n    // \"undefined\" means \"Choose whether to transform colors based on the image’s color model.\"\n    colorTransform: undefined,\n    useTArray: false,\n    formatAsRGBA: true,\n    tolerantDecoding: true,\n    maxResolutionInMP: 100, // Don't decode more than 100 megapixels\n    maxMemoryUsageInMB: 512, // Don't decode if memory footprint is more than 512MB\n  };\n\n  var opts = {...defaultOpts, ...userOpts};\n  var arr = new Uint8Array(jpegData);\n  var decoder = new JpegImage();\n  decoder.opts = opts;\n  // If this constructor ever supports async decoding this will need to be done differently.\n  // Until then, treating as singleton limit is fine.\n  JpegImage.resetMaxMemoryUsage(opts.maxMemoryUsageInMB * 1024 * 1024);\n  decoder.parse(arr);\n\n  var channels = (opts.formatAsRGBA) ? 4 : 3;\n  var bytesNeeded = decoder.width * decoder.height * channels;\n  try {\n    JpegImage.requestMemoryAllocation(bytesNeeded);\n    var image = {\n      width: decoder.width,\n      height: decoder.height,\n      exifBuffer: decoder.exifBuffer,\n      data: opts.useTArray ?\n        new Uint8Array(bytesNeeded) :\n        Buffer.alloc(bytesNeeded)\n    };\n    if(decoder.comments.length > 0) {\n      image[\"comments\"] = decoder.comments;\n    }\n  } catch (err) {\n    if (err instanceof RangeError) {\n      throw new Error(\"Could not allocate enough memory for the image. \" +\n                      \"Required: \" + bytesNeeded);\n    } \n    \n    if (err instanceof ReferenceError) {\n      if (err.message === \"Buffer is not defined\") {\n        throw new Error(\"Buffer is not globally defined in this environment. \" +\n                        \"Consider setting useTArray to true\");\n      }\n    }\n    throw err;\n  }\n\n  decoder.copyToImageData(image, opts.formatAsRGBA);\n\n  return image;\n}\n","var encode = require('./lib/encoder'),\n    decode = require('./lib/decoder');\n\nmodule.exports = {\n  encode: encode,\n  decode: decode\n};\n","import JPEG from \"jpeg-js\";\nexport default function jpeg() {\n    return {\n        mime: \"image/jpeg\",\n        encode: (bitmap, { quality = 100 } = {}) => JPEG.encode(bitmap, quality).data,\n        decode: (data, options) => JPEG.decode(data, options),\n    };\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\n\nlet ChunkStream = (module.exports = function () {\n  Stream.call(this);\n\n  this._buffers = [];\n  this._buffered = 0;\n\n  this._reads = [];\n  this._paused = false;\n\n  this._encoding = \"utf8\";\n  this.writable = true;\n});\nutil.inherits(ChunkStream, Stream);\n\nChunkStream.prototype.read = function (length, callback) {\n  this._reads.push({\n    length: Math.abs(length), // if length < 0 then at most this length\n    allowLess: length < 0,\n    func: callback,\n  });\n\n  process.nextTick(\n    function () {\n      this._process();\n\n      // its paused and there is not enought data then ask for more\n      if (this._paused && this._reads && this._reads.length > 0) {\n        this._paused = false;\n\n        this.emit(\"drain\");\n      }\n    }.bind(this)\n  );\n};\n\nChunkStream.prototype.write = function (data, encoding) {\n  if (!this.writable) {\n    this.emit(\"error\", new Error(\"Stream not writable\"));\n    return false;\n  }\n\n  let dataBuffer;\n  if (Buffer.isBuffer(data)) {\n    dataBuffer = data;\n  } else {\n    dataBuffer = Buffer.from(data, encoding || this._encoding);\n  }\n\n  this._buffers.push(dataBuffer);\n  this._buffered += dataBuffer.length;\n\n  this._process();\n\n  // ok if there are no more read requests\n  if (this._reads && this._reads.length === 0) {\n    this._paused = true;\n  }\n\n  return this.writable && !this._paused;\n};\n\nChunkStream.prototype.end = function (data, encoding) {\n  if (data) {\n    this.write(data, encoding);\n  }\n\n  this.writable = false;\n\n  // already destroyed\n  if (!this._buffers) {\n    return;\n  }\n\n  // enqueue or handle end\n  if (this._buffers.length === 0) {\n    this._end();\n  } else {\n    this._buffers.push(null);\n    this._process();\n  }\n};\n\nChunkStream.prototype.destroySoon = ChunkStream.prototype.end;\n\nChunkStream.prototype._end = function () {\n  if (this._reads.length > 0) {\n    this.emit(\"error\", new Error(\"Unexpected end of input\"));\n  }\n\n  this.destroy();\n};\n\nChunkStream.prototype.destroy = function () {\n  if (!this._buffers) {\n    return;\n  }\n\n  this.writable = false;\n  this._reads = null;\n  this._buffers = null;\n\n  this.emit(\"close\");\n};\n\nChunkStream.prototype._processReadAllowingLess = function (read) {\n  // ok there is any data so that we can satisfy this request\n  this._reads.shift(); // == read\n\n  // first we need to peek into first buffer\n  let smallerBuf = this._buffers[0];\n\n  // ok there is more data than we need\n  if (smallerBuf.length > read.length) {\n    this._buffered -= read.length;\n    this._buffers[0] = smallerBuf.slice(read.length);\n\n    read.func.call(this, smallerBuf.slice(0, read.length));\n  } else {\n    // ok this is less than maximum length so use it all\n    this._buffered -= smallerBuf.length;\n    this._buffers.shift(); // == smallerBuf\n\n    read.func.call(this, smallerBuf);\n  }\n};\n\nChunkStream.prototype._processRead = function (read) {\n  this._reads.shift(); // == read\n\n  let pos = 0;\n  let count = 0;\n  let data = Buffer.alloc(read.length);\n\n  // create buffer for all data\n  while (pos < read.length) {\n    let buf = this._buffers[count++];\n    let len = Math.min(buf.length, read.length - pos);\n\n    buf.copy(data, pos, 0, len);\n    pos += len;\n\n    // last buffer wasn't used all so just slice it and leave\n    if (len !== buf.length) {\n      this._buffers[--count] = buf.slice(len);\n    }\n  }\n\n  // remove all used buffers\n  if (count > 0) {\n    this._buffers.splice(0, count);\n  }\n\n  this._buffered -= read.length;\n\n  read.func.call(this, data);\n};\n\nChunkStream.prototype._process = function () {\n  try {\n    // as long as there is any data and read requests\n    while (this._buffered > 0 && this._reads && this._reads.length > 0) {\n      let read = this._reads[0];\n\n      // read any data (but no more than length)\n      if (read.allowLess) {\n        this._processReadAllowingLess(read);\n      } else if (this._buffered >= read.length) {\n        // ok we can meet some expectations\n\n        this._processRead(read);\n      } else {\n        // not enought data to satisfy first request in queue\n        // so we need to wait for more\n        break;\n      }\n    }\n\n    if (this._buffers && !this.writable) {\n      this._end();\n    }\n  } catch (ex) {\n    this.emit(\"error\", ex);\n  }\n};\n","\"use strict\";\n\n// Adam 7\n//   0 1 2 3 4 5 6 7\n// 0 x 6 4 6 x 6 4 6\n// 1 7 7 7 7 7 7 7 7\n// 2 5 6 5 6 5 6 5 6\n// 3 7 7 7 7 7 7 7 7\n// 4 3 6 4 6 3 6 4 6\n// 5 7 7 7 7 7 7 7 7\n// 6 5 6 5 6 5 6 5 6\n// 7 7 7 7 7 7 7 7 7\n\nlet imagePasses = [\n  {\n    // pass 1 - 1px\n    x: [0],\n    y: [0],\n  },\n  {\n    // pass 2 - 1px\n    x: [4],\n    y: [0],\n  },\n  {\n    // pass 3 - 2px\n    x: [0, 4],\n    y: [4],\n  },\n  {\n    // pass 4 - 4px\n    x: [2, 6],\n    y: [0, 4],\n  },\n  {\n    // pass 5 - 8px\n    x: [0, 2, 4, 6],\n    y: [2, 6],\n  },\n  {\n    // pass 6 - 16px\n    x: [1, 3, 5, 7],\n    y: [0, 2, 4, 6],\n  },\n  {\n    // pass 7 - 32px\n    x: [0, 1, 2, 3, 4, 5, 6, 7],\n    y: [1, 3, 5, 7],\n  },\n];\n\nexports.getImagePasses = function (width, height) {\n  let images = [];\n  let xLeftOver = width % 8;\n  let yLeftOver = height % 8;\n  let xRepeats = (width - xLeftOver) / 8;\n  let yRepeats = (height - yLeftOver) / 8;\n  for (let i = 0; i < imagePasses.length; i++) {\n    let pass = imagePasses[i];\n    let passWidth = xRepeats * pass.x.length;\n    let passHeight = yRepeats * pass.y.length;\n    for (let j = 0; j < pass.x.length; j++) {\n      if (pass.x[j] < xLeftOver) {\n        passWidth++;\n      } else {\n        break;\n      }\n    }\n    for (let j = 0; j < pass.y.length; j++) {\n      if (pass.y[j] < yLeftOver) {\n        passHeight++;\n      } else {\n        break;\n      }\n    }\n    if (passWidth > 0 && passHeight > 0) {\n      images.push({ width: passWidth, height: passHeight, index: i });\n    }\n  }\n  return images;\n};\n\nexports.getInterlaceIterator = function (width) {\n  return function (x, y, pass) {\n    let outerXLeftOver = x % imagePasses[pass].x.length;\n    let outerX =\n      ((x - outerXLeftOver) / imagePasses[pass].x.length) * 8 +\n      imagePasses[pass].x[outerXLeftOver];\n    let outerYLeftOver = y % imagePasses[pass].y.length;\n    let outerY =\n      ((y - outerYLeftOver) / imagePasses[pass].y.length) * 8 +\n      imagePasses[pass].y[outerYLeftOver];\n    return outerX * 4 + outerY * width * 4;\n  };\n};\n","\"use strict\";\n\nmodule.exports = function paethPredictor(left, above, upLeft) {\n  let paeth = left + above - upLeft;\n  let pLeft = Math.abs(paeth - left);\n  let pAbove = Math.abs(paeth - above);\n  let pUpLeft = Math.abs(paeth - upLeft);\n\n  if (pLeft <= pAbove && pLeft <= pUpLeft) {\n    return left;\n  }\n  if (pAbove <= pUpLeft) {\n    return above;\n  }\n  return upLeft;\n};\n","\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction getByteWidth(width, bpp, depth) {\n  let byteWidth = width * bpp;\n  if (depth !== 8) {\n    byteWidth = Math.ceil(byteWidth / (8 / depth));\n  }\n  return byteWidth;\n}\n\nlet Filter = (module.exports = function (bitmapInfo, dependencies) {\n  let width = bitmapInfo.width;\n  let height = bitmapInfo.height;\n  let interlace = bitmapInfo.interlace;\n  let bpp = bitmapInfo.bpp;\n  let depth = bitmapInfo.depth;\n\n  this.read = dependencies.read;\n  this.write = dependencies.write;\n  this.complete = dependencies.complete;\n\n  this._imageIndex = 0;\n  this._images = [];\n  if (interlace) {\n    let passes = interlaceUtils.getImagePasses(width, height);\n    for (let i = 0; i < passes.length; i++) {\n      this._images.push({\n        byteWidth: getByteWidth(passes[i].width, bpp, depth),\n        height: passes[i].height,\n        lineIndex: 0,\n      });\n    }\n  } else {\n    this._images.push({\n      byteWidth: getByteWidth(width, bpp, depth),\n      height: height,\n      lineIndex: 0,\n    });\n  }\n\n  // when filtering the line we look at the pixel to the left\n  // the spec also says it is done on a byte level regardless of the number of pixels\n  // so if the depth is byte compatible (8 or 16) we subtract the bpp in order to compare back\n  // a pixel rather than just a different byte part. However if we are sub byte, we ignore.\n  if (depth === 8) {\n    this._xComparison = bpp;\n  } else if (depth === 16) {\n    this._xComparison = bpp * 2;\n  } else {\n    this._xComparison = 1;\n  }\n});\n\nFilter.prototype.start = function () {\n  this.read(\n    this._images[this._imageIndex].byteWidth + 1,\n    this._reverseFilterLine.bind(this)\n  );\n};\n\nFilter.prototype._unFilterType1 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f1Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    unfilteredLine[x] = rawByte + f1Left;\n  }\n};\n\nFilter.prototype._unFilterType2 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f2Up = lastLine ? lastLine[x] : 0;\n    unfilteredLine[x] = rawByte + f2Up;\n  }\n};\n\nFilter.prototype._unFilterType3 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f3Up = lastLine ? lastLine[x] : 0;\n    let f3Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    let f3Add = Math.floor((f3Left + f3Up) / 2);\n    unfilteredLine[x] = rawByte + f3Add;\n  }\n};\n\nFilter.prototype._unFilterType4 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f4Up = lastLine ? lastLine[x] : 0;\n    let f4Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    let f4UpLeft = x > xBiggerThan && lastLine ? lastLine[x - xComparison] : 0;\n    let f4Add = paethPredictor(f4Left, f4Up, f4UpLeft);\n    unfilteredLine[x] = rawByte + f4Add;\n  }\n};\n\nFilter.prototype._reverseFilterLine = function (rawData) {\n  let filter = rawData[0];\n  let unfilteredLine;\n  let currentImage = this._images[this._imageIndex];\n  let byteWidth = currentImage.byteWidth;\n\n  if (filter === 0) {\n    unfilteredLine = rawData.slice(1, byteWidth + 1);\n  } else {\n    unfilteredLine = Buffer.alloc(byteWidth);\n\n    switch (filter) {\n      case 1:\n        this._unFilterType1(rawData, unfilteredLine, byteWidth);\n        break;\n      case 2:\n        this._unFilterType2(rawData, unfilteredLine, byteWidth);\n        break;\n      case 3:\n        this._unFilterType3(rawData, unfilteredLine, byteWidth);\n        break;\n      case 4:\n        this._unFilterType4(rawData, unfilteredLine, byteWidth);\n        break;\n      default:\n        throw new Error(\"Unrecognised filter type - \" + filter);\n    }\n  }\n\n  this.write(unfilteredLine);\n\n  currentImage.lineIndex++;\n  if (currentImage.lineIndex >= currentImage.height) {\n    this._lastLine = null;\n    this._imageIndex++;\n    currentImage = this._images[this._imageIndex];\n  } else {\n    this._lastLine = unfilteredLine;\n  }\n\n  if (currentImage) {\n    // read, using the byte width that may be from the new current image\n    this.read(currentImage.byteWidth + 1, this._reverseFilterLine.bind(this));\n  } else {\n    this._lastLine = null;\n    this.complete();\n  }\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet ChunkStream = require(\"./chunkstream\");\nlet Filter = require(\"./filter-parse\");\n\nlet FilterAsync = (module.exports = function (bitmapInfo) {\n  ChunkStream.call(this);\n\n  let buffers = [];\n  let that = this;\n  this._filter = new Filter(bitmapInfo, {\n    read: this.read.bind(this),\n    write: function (buffer) {\n      buffers.push(buffer);\n    },\n    complete: function () {\n      that.emit(\"complete\", Buffer.concat(buffers));\n    },\n  });\n\n  this._filter.start();\n});\nutil.inherits(FilterAsync, ChunkStream);\n","\"use strict\";\n\nmodule.exports = {\n  PNG_SIGNATURE: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a],\n\n  TYPE_IHDR: 0x49484452,\n  TYPE_IEND: 0x49454e44,\n  TYPE_IDAT: 0x49444154,\n  TYPE_PLTE: 0x504c5445,\n  TYPE_tRNS: 0x74524e53, // eslint-disable-line camelcase\n  TYPE_gAMA: 0x67414d41, // eslint-disable-line camelcase\n\n  // color-type bits\n  COLORTYPE_GRAYSCALE: 0,\n  COLORTYPE_PALETTE: 1,\n  COLORTYPE_COLOR: 2,\n  COLORTYPE_ALPHA: 4, // e.g. grayscale and alpha\n\n  // color-type combinations\n  COLORTYPE_PALETTE_COLOR: 3,\n  COLORTYPE_COLOR_ALPHA: 6,\n\n  COLORTYPE_TO_BPP_MAP: {\n    0: 1,\n    2: 3,\n    3: 1,\n    4: 2,\n    6: 4,\n  },\n\n  GAMMA_DIVISION: 100000,\n};\n","\"use strict\";\n\nlet crcTable = [];\n\n(function () {\n  for (let i = 0; i < 256; i++) {\n    let currentCrc = i;\n    for (let j = 0; j < 8; j++) {\n      if (currentCrc & 1) {\n        currentCrc = 0xedb88320 ^ (currentCrc >>> 1);\n      } else {\n        currentCrc = currentCrc >>> 1;\n      }\n    }\n    crcTable[i] = currentCrc;\n  }\n})();\n\nlet CrcCalculator = (module.exports = function () {\n  this._crc = -1;\n});\n\nCrcCalculator.prototype.write = function (data) {\n  for (let i = 0; i < data.length; i++) {\n    this._crc = crcTable[(this._crc ^ data[i]) & 0xff] ^ (this._crc >>> 8);\n  }\n  return true;\n};\n\nCrcCalculator.prototype.crc32 = function () {\n  return this._crc ^ -1;\n};\n\nCrcCalculator.crc32 = function (buf) {\n  let crc = -1;\n  for (let i = 0; i < buf.length; i++) {\n    crc = crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);\n  }\n  return crc ^ -1;\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcCalculator = require(\"./crc\");\n\nlet Parser = (module.exports = function (options, dependencies) {\n  this._options = options;\n  options.checkCRC = options.checkCRC !== false;\n\n  this._hasIHDR = false;\n  this._hasIEND = false;\n  this._emittedHeadersFinished = false;\n\n  // input flags/metadata\n  this._palette = [];\n  this._colorType = 0;\n\n  this._chunks = {};\n  this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);\n  this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);\n  this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);\n  this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);\n  this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);\n  this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);\n\n  this.read = dependencies.read;\n  this.error = dependencies.error;\n  this.metadata = dependencies.metadata;\n  this.gamma = dependencies.gamma;\n  this.transColor = dependencies.transColor;\n  this.palette = dependencies.palette;\n  this.parsed = dependencies.parsed;\n  this.inflateData = dependencies.inflateData;\n  this.finished = dependencies.finished;\n  this.simpleTransparency = dependencies.simpleTransparency;\n  this.headersFinished = dependencies.headersFinished || function () {};\n});\n\nParser.prototype.start = function () {\n  this.read(constants.PNG_SIGNATURE.length, this._parseSignature.bind(this));\n};\n\nParser.prototype._parseSignature = function (data) {\n  let signature = constants.PNG_SIGNATURE;\n\n  for (let i = 0; i < signature.length; i++) {\n    if (data[i] !== signature[i]) {\n      this.error(new Error(\"Invalid file signature\"));\n      return;\n    }\n  }\n  this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._parseChunkBegin = function (data) {\n  // chunk content length\n  let length = data.readUInt32BE(0);\n\n  // chunk type\n  let type = data.readUInt32BE(4);\n  let name = \"\";\n  for (let i = 4; i < 8; i++) {\n    name += String.fromCharCode(data[i]);\n  }\n\n  //console.log('chunk ', name, length);\n\n  // chunk flags\n  let ancillary = Boolean(data[4] & 0x20); // or critical\n  //    priv = Boolean(data[5] & 0x20), // or public\n  //    safeToCopy = Boolean(data[7] & 0x20); // or unsafe\n\n  if (!this._hasIHDR && type !== constants.TYPE_IHDR) {\n    this.error(new Error(\"Expected IHDR on beggining\"));\n    return;\n  }\n\n  this._crc = new CrcCalculator();\n  this._crc.write(Buffer.from(name));\n\n  if (this._chunks[type]) {\n    return this._chunks[type](length);\n  }\n\n  if (!ancillary) {\n    this.error(new Error(\"Unsupported critical chunk type \" + name));\n    return;\n  }\n\n  this.read(length + 4, this._skipChunk.bind(this));\n};\n\nParser.prototype._skipChunk = function (/*data*/) {\n  this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._handleChunkEnd = function () {\n  this.read(4, this._parseChunkEnd.bind(this));\n};\n\nParser.prototype._parseChunkEnd = function (data) {\n  let fileCrc = data.readInt32BE(0);\n  let calcCrc = this._crc.crc32();\n\n  // check CRC\n  if (this._options.checkCRC && calcCrc !== fileCrc) {\n    this.error(new Error(\"Crc error - \" + fileCrc + \" - \" + calcCrc));\n    return;\n  }\n\n  if (!this._hasIEND) {\n    this.read(8, this._parseChunkBegin.bind(this));\n  }\n};\n\nParser.prototype._handleIHDR = function (length) {\n  this.read(length, this._parseIHDR.bind(this));\n};\nParser.prototype._parseIHDR = function (data) {\n  this._crc.write(data);\n\n  let width = data.readUInt32BE(0);\n  let height = data.readUInt32BE(4);\n  let depth = data[8];\n  let colorType = data[9]; // bits: 1 palette, 2 color, 4 alpha\n  let compr = data[10];\n  let filter = data[11];\n  let interlace = data[12];\n\n  // console.log('    width', width, 'height', height,\n  //     'depth', depth, 'colorType', colorType,\n  //     'compr', compr, 'filter', filter, 'interlace', interlace\n  // );\n\n  if (\n    depth !== 8 &&\n    depth !== 4 &&\n    depth !== 2 &&\n    depth !== 1 &&\n    depth !== 16\n  ) {\n    this.error(new Error(\"Unsupported bit depth \" + depth));\n    return;\n  }\n  if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {\n    this.error(new Error(\"Unsupported color type\"));\n    return;\n  }\n  if (compr !== 0) {\n    this.error(new Error(\"Unsupported compression method\"));\n    return;\n  }\n  if (filter !== 0) {\n    this.error(new Error(\"Unsupported filter method\"));\n    return;\n  }\n  if (interlace !== 0 && interlace !== 1) {\n    this.error(new Error(\"Unsupported interlace method\"));\n    return;\n  }\n\n  this._colorType = colorType;\n\n  let bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];\n\n  this._hasIHDR = true;\n\n  this.metadata({\n    width: width,\n    height: height,\n    depth: depth,\n    interlace: Boolean(interlace),\n    palette: Boolean(colorType & constants.COLORTYPE_PALETTE),\n    color: Boolean(colorType & constants.COLORTYPE_COLOR),\n    alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),\n    bpp: bpp,\n    colorType: colorType,\n  });\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handlePLTE = function (length) {\n  this.read(length, this._parsePLTE.bind(this));\n};\nParser.prototype._parsePLTE = function (data) {\n  this._crc.write(data);\n\n  let entries = Math.floor(data.length / 3);\n  // console.log('Palette:', entries);\n\n  for (let i = 0; i < entries; i++) {\n    this._palette.push([data[i * 3], data[i * 3 + 1], data[i * 3 + 2], 0xff]);\n  }\n\n  this.palette(this._palette);\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleTRNS = function (length) {\n  this.simpleTransparency();\n  this.read(length, this._parseTRNS.bind(this));\n};\nParser.prototype._parseTRNS = function (data) {\n  this._crc.write(data);\n\n  // palette\n  if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {\n    if (this._palette.length === 0) {\n      this.error(new Error(\"Transparency chunk must be after palette\"));\n      return;\n    }\n    if (data.length > this._palette.length) {\n      this.error(new Error(\"More transparent colors than palette size\"));\n      return;\n    }\n    for (let i = 0; i < data.length; i++) {\n      this._palette[i][3] = data[i];\n    }\n    this.palette(this._palette);\n  }\n\n  // for colorType 0 (grayscale) and 2 (rgb)\n  // there might be one gray/color defined as transparent\n  if (this._colorType === constants.COLORTYPE_GRAYSCALE) {\n    // grey, 2 bytes\n    this.transColor([data.readUInt16BE(0)]);\n  }\n  if (this._colorType === constants.COLORTYPE_COLOR) {\n    this.transColor([\n      data.readUInt16BE(0),\n      data.readUInt16BE(2),\n      data.readUInt16BE(4),\n    ]);\n  }\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleGAMA = function (length) {\n  this.read(length, this._parseGAMA.bind(this));\n};\nParser.prototype._parseGAMA = function (data) {\n  this._crc.write(data);\n  this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleIDAT = function (length) {\n  if (!this._emittedHeadersFinished) {\n    this._emittedHeadersFinished = true;\n    this.headersFinished();\n  }\n  this.read(-length, this._parseIDAT.bind(this, length));\n};\nParser.prototype._parseIDAT = function (length, data) {\n  this._crc.write(data);\n\n  if (\n    this._colorType === constants.COLORTYPE_PALETTE_COLOR &&\n    this._palette.length === 0\n  ) {\n    throw new Error(\"Expected palette not found\");\n  }\n\n  this.inflateData(data);\n  let leftOverLength = length - data.length;\n\n  if (leftOverLength > 0) {\n    this._handleIDAT(leftOverLength);\n  } else {\n    this._handleChunkEnd();\n  }\n};\n\nParser.prototype._handleIEND = function (length) {\n  this.read(length, this._parseIEND.bind(this));\n};\nParser.prototype._parseIEND = function (data) {\n  this._crc.write(data);\n\n  this._hasIEND = true;\n  this._handleChunkEnd();\n\n  if (this.finished) {\n    this.finished();\n  }\n};\n","\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\n\nlet pixelBppMapper = [\n  // 0 - dummy entry\n  function () {},\n\n  // 1 - L\n  // 0: 0, 1: 0, 2: 0, 3: 0xff\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos === data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    let pixel = data[rawPos];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = 0xff;\n  },\n\n  // 2 - LA\n  // 0: 0, 1: 0, 2: 0, 3: 1\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 1 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    let pixel = data[rawPos];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = data[rawPos + 1];\n  },\n\n  // 3 - RGB\n  // 0: 0, 1: 1, 2: 2, 3: 0xff\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 2 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    pxData[pxPos] = data[rawPos];\n    pxData[pxPos + 1] = data[rawPos + 1];\n    pxData[pxPos + 2] = data[rawPos + 2];\n    pxData[pxPos + 3] = 0xff;\n  },\n\n  // 4 - RGBA\n  // 0: 0, 1: 1, 2: 2, 3: 3\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 3 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    pxData[pxPos] = data[rawPos];\n    pxData[pxPos + 1] = data[rawPos + 1];\n    pxData[pxPos + 2] = data[rawPos + 2];\n    pxData[pxPos + 3] = data[rawPos + 3];\n  },\n];\n\nlet pixelBppCustomMapper = [\n  // 0 - dummy entry\n  function () {},\n\n  // 1 - L\n  // 0: 0, 1: 0, 2: 0, 3: 0xff\n  function (pxData, pixelData, pxPos, maxBit) {\n    let pixel = pixelData[0];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = maxBit;\n  },\n\n  // 2 - LA\n  // 0: 0, 1: 0, 2: 0, 3: 1\n  function (pxData, pixelData, pxPos) {\n    let pixel = pixelData[0];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = pixelData[1];\n  },\n\n  // 3 - RGB\n  // 0: 0, 1: 1, 2: 2, 3: 0xff\n  function (pxData, pixelData, pxPos, maxBit) {\n    pxData[pxPos] = pixelData[0];\n    pxData[pxPos + 1] = pixelData[1];\n    pxData[pxPos + 2] = pixelData[2];\n    pxData[pxPos + 3] = maxBit;\n  },\n\n  // 4 - RGBA\n  // 0: 0, 1: 1, 2: 2, 3: 3\n  function (pxData, pixelData, pxPos) {\n    pxData[pxPos] = pixelData[0];\n    pxData[pxPos + 1] = pixelData[1];\n    pxData[pxPos + 2] = pixelData[2];\n    pxData[pxPos + 3] = pixelData[3];\n  },\n];\n\nfunction bitRetriever(data, depth) {\n  let leftOver = [];\n  let i = 0;\n\n  function split() {\n    if (i === data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n    let byte = data[i];\n    i++;\n    let byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;\n    switch (depth) {\n      default:\n        throw new Error(\"unrecognised depth\");\n      case 16:\n        byte2 = data[i];\n        i++;\n        leftOver.push((byte << 8) + byte2);\n        break;\n      case 4:\n        byte2 = byte & 0x0f;\n        byte1 = byte >> 4;\n        leftOver.push(byte1, byte2);\n        break;\n      case 2:\n        byte4 = byte & 3;\n        byte3 = (byte >> 2) & 3;\n        byte2 = (byte >> 4) & 3;\n        byte1 = (byte >> 6) & 3;\n        leftOver.push(byte1, byte2, byte3, byte4);\n        break;\n      case 1:\n        byte8 = byte & 1;\n        byte7 = (byte >> 1) & 1;\n        byte6 = (byte >> 2) & 1;\n        byte5 = (byte >> 3) & 1;\n        byte4 = (byte >> 4) & 1;\n        byte3 = (byte >> 5) & 1;\n        byte2 = (byte >> 6) & 1;\n        byte1 = (byte >> 7) & 1;\n        leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);\n        break;\n    }\n  }\n\n  return {\n    get: function (count) {\n      while (leftOver.length < count) {\n        split();\n      }\n      let returner = leftOver.slice(0, count);\n      leftOver = leftOver.slice(count);\n      return returner;\n    },\n    resetAfterLine: function () {\n      leftOver.length = 0;\n    },\n    end: function () {\n      if (i !== data.length) {\n        throw new Error(\"extra data found\");\n      }\n    },\n  };\n}\n\nfunction mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) {\n  // eslint-disable-line max-params\n  let imageWidth = image.width;\n  let imageHeight = image.height;\n  let imagePass = image.index;\n  for (let y = 0; y < imageHeight; y++) {\n    for (let x = 0; x < imageWidth; x++) {\n      let pxPos = getPxPos(x, y, imagePass);\n      pixelBppMapper[bpp](pxData, data, pxPos, rawPos);\n      rawPos += bpp; //eslint-disable-line no-param-reassign\n    }\n  }\n  return rawPos;\n}\n\nfunction mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) {\n  // eslint-disable-line max-params\n  let imageWidth = image.width;\n  let imageHeight = image.height;\n  let imagePass = image.index;\n  for (let y = 0; y < imageHeight; y++) {\n    for (let x = 0; x < imageWidth; x++) {\n      let pixelData = bits.get(bpp);\n      let pxPos = getPxPos(x, y, imagePass);\n      pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);\n    }\n    bits.resetAfterLine();\n  }\n}\n\nexports.dataToBitMap = function (data, bitmapInfo) {\n  let width = bitmapInfo.width;\n  let height = bitmapInfo.height;\n  let depth = bitmapInfo.depth;\n  let bpp = bitmapInfo.bpp;\n  let interlace = bitmapInfo.interlace;\n  let bits;\n\n  if (depth !== 8) {\n    bits = bitRetriever(data, depth);\n  }\n  let pxData;\n  if (depth <= 8) {\n    pxData = Buffer.alloc(width * height * 4);\n  } else {\n    pxData = new Uint16Array(width * height * 4);\n  }\n  let maxBit = Math.pow(2, depth) - 1;\n  let rawPos = 0;\n  let images;\n  let getPxPos;\n\n  if (interlace) {\n    images = interlaceUtils.getImagePasses(width, height);\n    getPxPos = interlaceUtils.getInterlaceIterator(width, height);\n  } else {\n    let nonInterlacedPxPos = 0;\n    getPxPos = function () {\n      let returner = nonInterlacedPxPos;\n      nonInterlacedPxPos += 4;\n      return returner;\n    };\n    images = [{ width: width, height: height }];\n  }\n\n  for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {\n    if (depth === 8) {\n      rawPos = mapImage8Bit(\n        images[imageIndex],\n        pxData,\n        getPxPos,\n        bpp,\n        data,\n        rawPos\n      );\n    } else {\n      mapImageCustomBit(\n        images[imageIndex],\n        pxData,\n        getPxPos,\n        bpp,\n        bits,\n        maxBit\n      );\n    }\n  }\n  if (depth === 8) {\n    if (rawPos !== data.length) {\n      throw new Error(\"extra data found\");\n    }\n  } else {\n    bits.end();\n  }\n\n  return pxData;\n};\n","\"use strict\";\n\nfunction dePalette(indata, outdata, width, height, palette) {\n  let pxPos = 0;\n  // use values from palette\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let color = palette[indata[pxPos]];\n\n      if (!color) {\n        throw new Error(\"index \" + indata[pxPos] + \" not in palette\");\n      }\n\n      for (let i = 0; i < 4; i++) {\n        outdata[pxPos + i] = color[i];\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nfunction replaceTransparentColor(indata, outdata, width, height, transColor) {\n  let pxPos = 0;\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let makeTrans = false;\n\n      if (transColor.length === 1) {\n        if (transColor[0] === indata[pxPos]) {\n          makeTrans = true;\n        }\n      } else if (\n        transColor[0] === indata[pxPos] &&\n        transColor[1] === indata[pxPos + 1] &&\n        transColor[2] === indata[pxPos + 2]\n      ) {\n        makeTrans = true;\n      }\n      if (makeTrans) {\n        for (let i = 0; i < 4; i++) {\n          outdata[pxPos + i] = 0;\n        }\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nfunction scaleDepth(indata, outdata, width, height, depth) {\n  let maxOutSample = 255;\n  let maxInSample = Math.pow(2, depth) - 1;\n  let pxPos = 0;\n\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      for (let i = 0; i < 4; i++) {\n        outdata[pxPos + i] = Math.floor(\n          (indata[pxPos + i] * maxOutSample) / maxInSample + 0.5\n        );\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nmodule.exports = function (indata, imageData, skipRescale = false) {\n  let depth = imageData.depth;\n  let width = imageData.width;\n  let height = imageData.height;\n  let colorType = imageData.colorType;\n  let transColor = imageData.transColor;\n  let palette = imageData.palette;\n\n  let outdata = indata; // only different for 16 bits\n\n  if (colorType === 3) {\n    // paletted\n    dePalette(indata, outdata, width, height, palette);\n  } else {\n    if (transColor) {\n      replaceTransparentColor(indata, outdata, width, height, transColor);\n    }\n    // if it needs scaling\n    if (depth !== 8 && !skipRescale) {\n      // if we need to change the buffer size\n      if (depth === 16) {\n        outdata = Buffer.alloc(width * height * 4);\n      }\n      scaleDepth(indata, outdata, width, height, depth);\n    }\n  }\n  return outdata;\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet zlib = require(\"zlib\");\nlet ChunkStream = require(\"./chunkstream\");\nlet FilterAsync = require(\"./filter-parse-async\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nlet ParserAsync = (module.exports = function (options) {\n  ChunkStream.call(this);\n\n  this._parser = new Parser(options, {\n    read: this.read.bind(this),\n    error: this._handleError.bind(this),\n    metadata: this._handleMetaData.bind(this),\n    gamma: this.emit.bind(this, \"gamma\"),\n    palette: this._handlePalette.bind(this),\n    transColor: this._handleTransColor.bind(this),\n    finished: this._finished.bind(this),\n    inflateData: this._inflateData.bind(this),\n    simpleTransparency: this._simpleTransparency.bind(this),\n    headersFinished: this._headersFinished.bind(this),\n  });\n  this._options = options;\n  this.writable = true;\n\n  this._parser.start();\n});\nutil.inherits(ParserAsync, ChunkStream);\n\nParserAsync.prototype._handleError = function (err) {\n  this.emit(\"error\", err);\n\n  this.writable = false;\n\n  this.destroy();\n\n  if (this._inflate && this._inflate.destroy) {\n    this._inflate.destroy();\n  }\n\n  if (this._filter) {\n    this._filter.destroy();\n    // For backward compatibility with Node 7 and below.\n    // Suppress errors due to _inflate calling write() even after\n    // it's destroy()'ed.\n    this._filter.on(\"error\", function () {});\n  }\n\n  this.errord = true;\n};\n\nParserAsync.prototype._inflateData = function (data) {\n  if (!this._inflate) {\n    if (this._bitmapInfo.interlace) {\n      this._inflate = zlib.createInflate();\n\n      this._inflate.on(\"error\", this.emit.bind(this, \"error\"));\n      this._filter.on(\"complete\", this._complete.bind(this));\n\n      this._inflate.pipe(this._filter);\n    } else {\n      let rowSize =\n        ((this._bitmapInfo.width *\n          this._bitmapInfo.bpp *\n          this._bitmapInfo.depth +\n          7) >>\n          3) +\n        1;\n      let imageSize = rowSize * this._bitmapInfo.height;\n      let chunkSize = Math.max(imageSize, zlib.Z_MIN_CHUNK);\n\n      this._inflate = zlib.createInflate({ chunkSize: chunkSize });\n      let leftToInflate = imageSize;\n\n      let emitError = this.emit.bind(this, \"error\");\n      this._inflate.on(\"error\", function (err) {\n        if (!leftToInflate) {\n          return;\n        }\n\n        emitError(err);\n      });\n      this._filter.on(\"complete\", this._complete.bind(this));\n\n      let filterWrite = this._filter.write.bind(this._filter);\n      this._inflate.on(\"data\", function (chunk) {\n        if (!leftToInflate) {\n          return;\n        }\n\n        if (chunk.length > leftToInflate) {\n          chunk = chunk.slice(0, leftToInflate);\n        }\n\n        leftToInflate -= chunk.length;\n\n        filterWrite(chunk);\n      });\n\n      this._inflate.on(\"end\", this._filter.end.bind(this._filter));\n    }\n  }\n  this._inflate.write(data);\n};\n\nParserAsync.prototype._handleMetaData = function (metaData) {\n  this._metaData = metaData;\n  this._bitmapInfo = Object.create(metaData);\n\n  this._filter = new FilterAsync(this._bitmapInfo);\n};\n\nParserAsync.prototype._handleTransColor = function (transColor) {\n  this._bitmapInfo.transColor = transColor;\n};\n\nParserAsync.prototype._handlePalette = function (palette) {\n  this._bitmapInfo.palette = palette;\n};\n\nParserAsync.prototype._simpleTransparency = function () {\n  this._metaData.alpha = true;\n};\n\nParserAsync.prototype._headersFinished = function () {\n  // Up until this point, we don't know if we have a tRNS chunk (alpha)\n  // so we can't emit metadata any earlier\n  this.emit(\"metadata\", this._metaData);\n};\n\nParserAsync.prototype._finished = function () {\n  if (this.errord) {\n    return;\n  }\n\n  if (!this._inflate) {\n    this.emit(\"error\", \"No Inflate block\");\n  } else {\n    // no more data to inflate\n    this._inflate.end();\n  }\n};\n\nParserAsync.prototype._complete = function (filteredData) {\n  if (this.errord) {\n    return;\n  }\n\n  let normalisedBitmapData;\n\n  try {\n    let bitmapData = bitmapper.dataToBitMap(filteredData, this._bitmapInfo);\n\n    normalisedBitmapData = formatNormaliser(\n      bitmapData,\n      this._bitmapInfo,\n      this._options.skipRescale\n    );\n    bitmapData = null;\n  } catch (ex) {\n    this._handleError(ex);\n    return;\n  }\n\n  this.emit(\"parsed\", normalisedBitmapData);\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\n\nmodule.exports = function (dataIn, width, height, options) {\n  let outHasAlpha =\n    [constants.COLORTYPE_COLOR_ALPHA, constants.COLORTYPE_ALPHA].indexOf(\n      options.colorType\n    ) !== -1;\n  if (options.colorType === options.inputColorType) {\n    let bigEndian = (function () {\n      let buffer = new ArrayBuffer(2);\n      new DataView(buffer).setInt16(0, 256, true /* littleEndian */);\n      // Int16Array uses the platform's endianness.\n      return new Int16Array(buffer)[0] !== 256;\n    })();\n    // If no need to convert to grayscale and alpha is present/absent in both, take a fast route\n    if (options.bitDepth === 8 || (options.bitDepth === 16 && bigEndian)) {\n      return dataIn;\n    }\n  }\n\n  // map to a UInt16 array if data is 16bit, fix endianness below\n  let data = options.bitDepth !== 16 ? dataIn : new Uint16Array(dataIn.buffer);\n\n  let maxValue = 255;\n  let inBpp = constants.COLORTYPE_TO_BPP_MAP[options.inputColorType];\n  if (inBpp === 4 && !options.inputHasAlpha) {\n    inBpp = 3;\n  }\n  let outBpp = constants.COLORTYPE_TO_BPP_MAP[options.colorType];\n  if (options.bitDepth === 16) {\n    maxValue = 65535;\n    outBpp *= 2;\n  }\n  let outData = Buffer.alloc(width * height * outBpp);\n\n  let inIndex = 0;\n  let outIndex = 0;\n\n  let bgColor = options.bgColor || {};\n  if (bgColor.red === undefined) {\n    bgColor.red = maxValue;\n  }\n  if (bgColor.green === undefined) {\n    bgColor.green = maxValue;\n  }\n  if (bgColor.blue === undefined) {\n    bgColor.blue = maxValue;\n  }\n\n  function getRGBA() {\n    let red;\n    let green;\n    let blue;\n    let alpha = maxValue;\n    switch (options.inputColorType) {\n      case constants.COLORTYPE_COLOR_ALPHA:\n        alpha = data[inIndex + 3];\n        red = data[inIndex];\n        green = data[inIndex + 1];\n        blue = data[inIndex + 2];\n        break;\n      case constants.COLORTYPE_COLOR:\n        red = data[inIndex];\n        green = data[inIndex + 1];\n        blue = data[inIndex + 2];\n        break;\n      case constants.COLORTYPE_ALPHA:\n        alpha = data[inIndex + 1];\n        red = data[inIndex];\n        green = red;\n        blue = red;\n        break;\n      case constants.COLORTYPE_GRAYSCALE:\n        red = data[inIndex];\n        green = red;\n        blue = red;\n        break;\n      default:\n        throw new Error(\n          \"input color type:\" +\n            options.inputColorType +\n            \" is not supported at present\"\n        );\n    }\n\n    if (options.inputHasAlpha) {\n      if (!outHasAlpha) {\n        alpha /= maxValue;\n        red = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.red + alpha * red), 0),\n          maxValue\n        );\n        green = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.green + alpha * green), 0),\n          maxValue\n        );\n        blue = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.blue + alpha * blue), 0),\n          maxValue\n        );\n      }\n    }\n    return { red: red, green: green, blue: blue, alpha: alpha };\n  }\n\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let rgba = getRGBA(data, inIndex);\n\n      switch (options.colorType) {\n        case constants.COLORTYPE_COLOR_ALPHA:\n        case constants.COLORTYPE_COLOR:\n          if (options.bitDepth === 8) {\n            outData[outIndex] = rgba.red;\n            outData[outIndex + 1] = rgba.green;\n            outData[outIndex + 2] = rgba.blue;\n            if (outHasAlpha) {\n              outData[outIndex + 3] = rgba.alpha;\n            }\n          } else {\n            outData.writeUInt16BE(rgba.red, outIndex);\n            outData.writeUInt16BE(rgba.green, outIndex + 2);\n            outData.writeUInt16BE(rgba.blue, outIndex + 4);\n            if (outHasAlpha) {\n              outData.writeUInt16BE(rgba.alpha, outIndex + 6);\n            }\n          }\n          break;\n        case constants.COLORTYPE_ALPHA:\n        case constants.COLORTYPE_GRAYSCALE: {\n          // Convert to grayscale and alpha\n          let grayscale = (rgba.red + rgba.green + rgba.blue) / 3;\n          if (options.bitDepth === 8) {\n            outData[outIndex] = grayscale;\n            if (outHasAlpha) {\n              outData[outIndex + 1] = rgba.alpha;\n            }\n          } else {\n            outData.writeUInt16BE(grayscale, outIndex);\n            if (outHasAlpha) {\n              outData.writeUInt16BE(rgba.alpha, outIndex + 2);\n            }\n          }\n          break;\n        }\n        default:\n          throw new Error(\"unrecognised color Type \" + options.colorType);\n      }\n\n      inIndex += inBpp;\n      outIndex += outBpp;\n    }\n  }\n\n  return outData;\n};\n","\"use strict\";\n\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {\n  for (let x = 0; x < byteWidth; x++) {\n    rawData[rawPos + x] = pxData[pxPos + x];\n  }\n}\n\nfunction filterSumNone(pxData, pxPos, byteWidth) {\n  let sum = 0;\n  let length = pxPos + byteWidth;\n\n  for (let i = pxPos; i < length; i++) {\n    sum += Math.abs(pxData[i]);\n  }\n  return sum;\n}\n\nfunction filterSub(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let val = pxData[pxPos + x] - left;\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumSub(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let val = pxData[pxPos + x] - left;\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterUp(pxData, pxPos, byteWidth, rawData, rawPos) {\n  for (let x = 0; x < byteWidth; x++) {\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - up;\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumUp(pxData, pxPos, byteWidth) {\n  let sum = 0;\n  let length = pxPos + byteWidth;\n  for (let x = pxPos; x < length; x++) {\n    let up = pxPos > 0 ? pxData[x - byteWidth] : 0;\n    let val = pxData[x] - up;\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterAvg(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumAvg(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterPaeth(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let upleft =\n      pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n    let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumPaeth(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let upleft =\n      pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n    let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nlet filters = {\n  0: filterNone,\n  1: filterSub,\n  2: filterUp,\n  3: filterAvg,\n  4: filterPaeth,\n};\n\nlet filterSums = {\n  0: filterSumNone,\n  1: filterSumSub,\n  2: filterSumUp,\n  3: filterSumAvg,\n  4: filterSumPaeth,\n};\n\nmodule.exports = function (pxData, width, height, options, bpp) {\n  let filterTypes;\n  if (!(\"filterType\" in options) || options.filterType === -1) {\n    filterTypes = [0, 1, 2, 3, 4];\n  } else if (typeof options.filterType === \"number\") {\n    filterTypes = [options.filterType];\n  } else {\n    throw new Error(\"unrecognised filter types\");\n  }\n\n  if (options.bitDepth === 16) {\n    bpp *= 2;\n  }\n  let byteWidth = width * bpp;\n  let rawPos = 0;\n  let pxPos = 0;\n  let rawData = Buffer.alloc((byteWidth + 1) * height);\n\n  let sel = filterTypes[0];\n\n  for (let y = 0; y < height; y++) {\n    if (filterTypes.length > 1) {\n      // find best filter for this line (with lowest sum of values)\n      let min = Infinity;\n\n      for (let i = 0; i < filterTypes.length; i++) {\n        let sum = filterSums[filterTypes[i]](pxData, pxPos, byteWidth, bpp);\n        if (sum < min) {\n          sel = filterTypes[i];\n          min = sum;\n        }\n      }\n    }\n\n    rawData[rawPos] = sel;\n    rawPos++;\n    filters[sel](pxData, pxPos, byteWidth, rawData, rawPos, bpp);\n    rawPos += byteWidth;\n    pxPos += byteWidth;\n  }\n  return rawData;\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcStream = require(\"./crc\");\nlet bitPacker = require(\"./bitpacker\");\nlet filter = require(\"./filter-pack\");\nlet zlib = require(\"zlib\");\n\nlet Packer = (module.exports = function (options) {\n  this._options = options;\n\n  options.deflateChunkSize = options.deflateChunkSize || 32 * 1024;\n  options.deflateLevel =\n    options.deflateLevel != null ? options.deflateLevel : 9;\n  options.deflateStrategy =\n    options.deflateStrategy != null ? options.deflateStrategy : 3;\n  options.inputHasAlpha =\n    options.inputHasAlpha != null ? options.inputHasAlpha : true;\n  options.deflateFactory = options.deflateFactory || zlib.createDeflate;\n  options.bitDepth = options.bitDepth || 8;\n  // This is outputColorType\n  options.colorType =\n    typeof options.colorType === \"number\"\n      ? options.colorType\n      : constants.COLORTYPE_COLOR_ALPHA;\n  options.inputColorType =\n    typeof options.inputColorType === \"number\"\n      ? options.inputColorType\n      : constants.COLORTYPE_COLOR_ALPHA;\n\n  if (\n    [\n      constants.COLORTYPE_GRAYSCALE,\n      constants.COLORTYPE_COLOR,\n      constants.COLORTYPE_COLOR_ALPHA,\n      constants.COLORTYPE_ALPHA,\n    ].indexOf(options.colorType) === -1\n  ) {\n    throw new Error(\n      \"option color type:\" + options.colorType + \" is not supported at present\"\n    );\n  }\n  if (\n    [\n      constants.COLORTYPE_GRAYSCALE,\n      constants.COLORTYPE_COLOR,\n      constants.COLORTYPE_COLOR_ALPHA,\n      constants.COLORTYPE_ALPHA,\n    ].indexOf(options.inputColorType) === -1\n  ) {\n    throw new Error(\n      \"option input color type:\" +\n        options.inputColorType +\n        \" is not supported at present\"\n    );\n  }\n  if (options.bitDepth !== 8 && options.bitDepth !== 16) {\n    throw new Error(\n      \"option bit depth:\" + options.bitDepth + \" is not supported at present\"\n    );\n  }\n});\n\nPacker.prototype.getDeflateOptions = function () {\n  return {\n    chunkSize: this._options.deflateChunkSize,\n    level: this._options.deflateLevel,\n    strategy: this._options.deflateStrategy,\n  };\n};\n\nPacker.prototype.createDeflate = function () {\n  return this._options.deflateFactory(this.getDeflateOptions());\n};\n\nPacker.prototype.filterData = function (data, width, height) {\n  // convert to correct format for filtering (e.g. right bpp and bit depth)\n  let packedData = bitPacker(data, width, height, this._options);\n\n  // filter pixel data\n  let bpp = constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];\n  let filteredData = filter(packedData, width, height, this._options, bpp);\n  return filteredData;\n};\n\nPacker.prototype._packChunk = function (type, data) {\n  let len = data ? data.length : 0;\n  let buf = Buffer.alloc(len + 12);\n\n  buf.writeUInt32BE(len, 0);\n  buf.writeUInt32BE(type, 4);\n\n  if (data) {\n    data.copy(buf, 8);\n  }\n\n  buf.writeInt32BE(\n    CrcStream.crc32(buf.slice(4, buf.length - 4)),\n    buf.length - 4\n  );\n  return buf;\n};\n\nPacker.prototype.packGAMA = function (gamma) {\n  let buf = Buffer.alloc(4);\n  buf.writeUInt32BE(Math.floor(gamma * constants.GAMMA_DIVISION), 0);\n  return this._packChunk(constants.TYPE_gAMA, buf);\n};\n\nPacker.prototype.packIHDR = function (width, height) {\n  let buf = Buffer.alloc(13);\n  buf.writeUInt32BE(width, 0);\n  buf.writeUInt32BE(height, 4);\n  buf[8] = this._options.bitDepth; // Bit depth\n  buf[9] = this._options.colorType; // colorType\n  buf[10] = 0; // compression\n  buf[11] = 0; // filter\n  buf[12] = 0; // interlace\n\n  return this._packChunk(constants.TYPE_IHDR, buf);\n};\n\nPacker.prototype.packIDAT = function (data) {\n  return this._packChunk(constants.TYPE_IDAT, data);\n};\n\nPacker.prototype.packIEND = function () {\n  return this._packChunk(constants.TYPE_IEND, null);\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nlet PackerAsync = (module.exports = function (opt) {\n  Stream.call(this);\n\n  let options = opt || {};\n\n  this._packer = new Packer(options);\n  this._deflate = this._packer.createDeflate();\n\n  this.readable = true;\n});\nutil.inherits(PackerAsync, Stream);\n\nPackerAsync.prototype.pack = function (data, width, height, gamma) {\n  // Signature\n  this.emit(\"data\", Buffer.from(constants.PNG_SIGNATURE));\n  this.emit(\"data\", this._packer.packIHDR(width, height));\n\n  if (gamma) {\n    this.emit(\"data\", this._packer.packGAMA(gamma));\n  }\n\n  let filteredData = this._packer.filterData(data, width, height);\n\n  // compress it\n  this._deflate.on(\"error\", this.emit.bind(this, \"error\"));\n\n  this._deflate.on(\n    \"data\",\n    function (compressedData) {\n      this.emit(\"data\", this._packer.packIDAT(compressedData));\n    }.bind(this)\n  );\n\n  this._deflate.on(\n    \"end\",\n    function () {\n      this.emit(\"data\", this._packer.packIEND());\n      this.emit(\"end\");\n    }.bind(this)\n  );\n\n  this._deflate.end(filteredData);\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  let i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  const length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  let indexSize = 1\n  let arrLength = arr.length\n  let valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  let i\n  if (dir) {\n    let foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      let found = true\n      for (let j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  const remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  const len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let i = byteLength\n  let mul = 1\n  let val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\nfunction addNumericalSeparator (val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  let c, hi, lo\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n","\"use strict\";\n\nlet assert = require(\"assert\").ok;\nlet zlib = require(\"zlib\");\nlet util = require(\"util\");\n\nlet kMaxLength = require(\"buffer\").kMaxLength;\n\nfunction Inflate(opts) {\n  if (!(this instanceof Inflate)) {\n    return new Inflate(opts);\n  }\n\n  if (opts && opts.chunkSize < zlib.Z_MIN_CHUNK) {\n    opts.chunkSize = zlib.Z_MIN_CHUNK;\n  }\n\n  zlib.Inflate.call(this, opts);\n\n  // Node 8 --> 9 compatibility check\n  this._offset = this._offset === undefined ? this._outOffset : this._offset;\n  this._buffer = this._buffer || this._outBuffer;\n\n  if (opts && opts.maxLength != null) {\n    this._maxLength = opts.maxLength;\n  }\n}\n\nfunction createInflate(opts) {\n  return new Inflate(opts);\n}\n\nfunction _close(engine, callback) {\n  if (callback) {\n    process.nextTick(callback);\n  }\n\n  // Caller may invoke .close after a zlib error (which will null _handle).\n  if (!engine._handle) {\n    return;\n  }\n\n  engine._handle.close();\n  engine._handle = null;\n}\n\nInflate.prototype._processChunk = function (chunk, flushFlag, asyncCb) {\n  if (typeof asyncCb === \"function\") {\n    return zlib.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);\n  }\n\n  let self = this;\n\n  let availInBefore = chunk && chunk.length;\n  let availOutBefore = this._chunkSize - this._offset;\n  let leftToInflate = this._maxLength;\n  let inOff = 0;\n\n  let buffers = [];\n  let nread = 0;\n\n  let error;\n  this.on(\"error\", function (err) {\n    error = err;\n  });\n\n  function handleChunk(availInAfter, availOutAfter) {\n    if (self._hadError) {\n      return;\n    }\n\n    let have = availOutBefore - availOutAfter;\n    assert(have >= 0, \"have should not go down\");\n\n    if (have > 0) {\n      let out = self._buffer.slice(self._offset, self._offset + have);\n      self._offset += have;\n\n      if (out.length > leftToInflate) {\n        out = out.slice(0, leftToInflate);\n      }\n\n      buffers.push(out);\n      nread += out.length;\n      leftToInflate -= out.length;\n\n      if (leftToInflate === 0) {\n        return false;\n      }\n    }\n\n    if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n      availOutBefore = self._chunkSize;\n      self._offset = 0;\n      self._buffer = Buffer.allocUnsafe(self._chunkSize);\n    }\n\n    if (availOutAfter === 0) {\n      inOff += availInBefore - availInAfter;\n      availInBefore = availInAfter;\n\n      return true;\n    }\n\n    return false;\n  }\n\n  assert(this._handle, \"zlib binding closed\");\n  let res;\n  do {\n    res = this._handle.writeSync(\n      flushFlag,\n      chunk, // in\n      inOff, // in_off\n      availInBefore, // in_len\n      this._buffer, // out\n      this._offset, //out_off\n      availOutBefore\n    ); // out_len\n    // Node 8 --> 9 compatibility check\n    res = res || this._writeState;\n  } while (!this._hadError && handleChunk(res[0], res[1]));\n\n  if (this._hadError) {\n    throw error;\n  }\n\n  if (nread >= kMaxLength) {\n    _close(this);\n    throw new RangeError(\n      \"Cannot create final Buffer. It would be larger than 0x\" +\n        kMaxLength.toString(16) +\n        \" bytes\"\n    );\n  }\n\n  let buf = Buffer.concat(buffers, nread);\n  _close(this);\n\n  return buf;\n};\n\nutil.inherits(Inflate, zlib.Inflate);\n\nfunction zlibBufferSync(engine, buffer) {\n  if (typeof buffer === \"string\") {\n    buffer = Buffer.from(buffer);\n  }\n  if (!(buffer instanceof Buffer)) {\n    throw new TypeError(\"Not a string or buffer\");\n  }\n\n  let flushFlag = engine._finishFlushFlag;\n  if (flushFlag == null) {\n    flushFlag = zlib.Z_FINISH;\n  }\n\n  return engine._processChunk(buffer, flushFlag);\n}\n\nfunction inflateSync(buffer, opts) {\n  return zlibBufferSync(new Inflate(opts), buffer);\n}\n\nmodule.exports = exports = inflateSync;\nexports.Inflate = Inflate;\nexports.createInflate = createInflate;\nexports.inflateSync = inflateSync;\n","\"use strict\";\n\nlet SyncReader = (module.exports = function (buffer) {\n  this._buffer = buffer;\n  this._reads = [];\n});\n\nSyncReader.prototype.read = function (length, callback) {\n  this._reads.push({\n    length: Math.abs(length), // if length < 0 then at most this length\n    allowLess: length < 0,\n    func: callback,\n  });\n};\n\nSyncReader.prototype.process = function () {\n  // as long as there is any data and read requests\n  while (this._reads.length > 0 && this._buffer.length) {\n    let read = this._reads[0];\n\n    if (\n      this._buffer.length &&\n      (this._buffer.length >= read.length || read.allowLess)\n    ) {\n      // ok there is any data so that we can satisfy this request\n      this._reads.shift(); // == read\n\n      let buf = this._buffer;\n\n      this._buffer = buf.slice(read.length);\n\n      read.func.call(this, buf.slice(0, read.length));\n    } else {\n      break;\n    }\n  }\n\n  if (this._reads.length > 0) {\n    throw new Error(\"There are some read requests waitng on finished stream\");\n  }\n\n  if (this._buffer.length > 0) {\n    throw new Error(\"unrecognised content at end of stream\");\n  }\n};\n","\"use strict\";\n\nlet SyncReader = require(\"./sync-reader\");\nlet Filter = require(\"./filter-parse\");\n\nexports.process = function (inBuffer, bitmapInfo) {\n  let outBuffers = [];\n  let reader = new SyncReader(inBuffer);\n  let filter = new Filter(bitmapInfo, {\n    read: reader.read.bind(reader),\n    write: function (bufferPart) {\n      outBuffers.push(bufferPart);\n    },\n    complete: function () {},\n  });\n\n  filter.start();\n  reader.process();\n\n  return Buffer.concat(outBuffers);\n};\n","\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nlet inflateSync = require(\"./sync-inflate\");\nif (!zlib.deflateSync) {\n  hasSyncZlib = false;\n}\nlet SyncReader = require(\"./sync-reader\");\nlet FilterSync = require(\"./filter-parse-sync\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nmodule.exports = function (buffer, options) {\n  if (!hasSyncZlib) {\n    throw new Error(\n      \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n    );\n  }\n\n  let err;\n  function handleError(_err_) {\n    err = _err_;\n  }\n\n  let metaData;\n  function handleMetaData(_metaData_) {\n    metaData = _metaData_;\n  }\n\n  function handleTransColor(transColor) {\n    metaData.transColor = transColor;\n  }\n\n  function handlePalette(palette) {\n    metaData.palette = palette;\n  }\n\n  function handleSimpleTransparency() {\n    metaData.alpha = true;\n  }\n\n  let gamma;\n  function handleGamma(_gamma_) {\n    gamma = _gamma_;\n  }\n\n  let inflateDataList = [];\n  function handleInflateData(inflatedData) {\n    inflateDataList.push(inflatedData);\n  }\n\n  let reader = new SyncReader(buffer);\n\n  let parser = new Parser(options, {\n    read: reader.read.bind(reader),\n    error: handleError,\n    metadata: handleMetaData,\n    gamma: handleGamma,\n    palette: handlePalette,\n    transColor: handleTransColor,\n    inflateData: handleInflateData,\n    simpleTransparency: handleSimpleTransparency,\n  });\n\n  parser.start();\n  reader.process();\n\n  if (err) {\n    throw err;\n  }\n\n  //join together the inflate datas\n  let inflateData = Buffer.concat(inflateDataList);\n  inflateDataList.length = 0;\n\n  let inflatedData;\n  if (metaData.interlace) {\n    inflatedData = zlib.inflateSync(inflateData);\n  } else {\n    let rowSize =\n      ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;\n    let imageSize = rowSize * metaData.height;\n    inflatedData = inflateSync(inflateData, {\n      chunkSize: imageSize,\n      maxLength: imageSize,\n    });\n  }\n  inflateData = null;\n\n  if (!inflatedData || !inflatedData.length) {\n    throw new Error(\"bad png - invalid inflate data response\");\n  }\n\n  let unfilteredData = FilterSync.process(inflatedData, metaData);\n  inflateData = null;\n\n  let bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);\n  unfilteredData = null;\n\n  let normalisedBitmapData = formatNormaliser(\n    bitmapData,\n    metaData,\n    options.skipRescale\n  );\n\n  metaData.data = normalisedBitmapData;\n  metaData.gamma = gamma || 0;\n\n  return metaData;\n};\n","\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nif (!zlib.deflateSync) {\n  hasSyncZlib = false;\n}\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nmodule.exports = function (metaData, opt) {\n  if (!hasSyncZlib) {\n    throw new Error(\n      \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n    );\n  }\n\n  let options = opt || {};\n\n  let packer = new Packer(options);\n\n  let chunks = [];\n\n  // Signature\n  chunks.push(Buffer.from(constants.PNG_SIGNATURE));\n\n  // Header\n  chunks.push(packer.packIHDR(metaData.width, metaData.height));\n\n  if (metaData.gamma) {\n    chunks.push(packer.packGAMA(metaData.gamma));\n  }\n\n  let filteredData = packer.filterData(\n    metaData.data,\n    metaData.width,\n    metaData.height\n  );\n\n  // compress it\n  let compressedData = zlib.deflateSync(\n    filteredData,\n    packer.getDeflateOptions()\n  );\n  filteredData = null;\n\n  if (!compressedData || !compressedData.length) {\n    throw new Error(\"bad png - invalid compressed data response\");\n  }\n  chunks.push(packer.packIDAT(compressedData));\n\n  // End\n  chunks.push(packer.packIEND());\n\n  return Buffer.concat(chunks);\n};\n","\"use strict\";\n\nlet parse = require(\"./parser-sync\");\nlet pack = require(\"./packer-sync\");\n\nexports.read = function (buffer, options) {\n  return parse(buffer, options || {});\n};\n\nexports.write = function (png, options) {\n  return pack(png, options);\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet Parser = require(\"./parser-async\");\nlet Packer = require(\"./packer-async\");\nlet PNGSync = require(\"./png-sync\");\n\nlet PNG = (exports.PNG = function (options) {\n  Stream.call(this);\n\n  options = options || {}; // eslint-disable-line no-param-reassign\n\n  // coerce pixel dimensions to integers (also coerces undefined -> 0):\n  this.width = options.width | 0;\n  this.height = options.height | 0;\n\n  this.data =\n    this.width > 0 && this.height > 0\n      ? Buffer.alloc(4 * this.width * this.height)\n      : null;\n\n  if (options.fill && this.data) {\n    this.data.fill(0);\n  }\n\n  this.gamma = 0;\n  this.readable = this.writable = true;\n\n  this._parser = new Parser(options);\n\n  this._parser.on(\"error\", this.emit.bind(this, \"error\"));\n  this._parser.on(\"close\", this._handleClose.bind(this));\n  this._parser.on(\"metadata\", this._metadata.bind(this));\n  this._parser.on(\"gamma\", this._gamma.bind(this));\n  this._parser.on(\n    \"parsed\",\n    function (data) {\n      this.data = data;\n      this.emit(\"parsed\", data);\n    }.bind(this)\n  );\n\n  this._packer = new Packer(options);\n  this._packer.on(\"data\", this.emit.bind(this, \"data\"));\n  this._packer.on(\"end\", this.emit.bind(this, \"end\"));\n  this._parser.on(\"close\", this._handleClose.bind(this));\n  this._packer.on(\"error\", this.emit.bind(this, \"error\"));\n});\nutil.inherits(PNG, Stream);\n\nPNG.sync = PNGSync;\n\nPNG.prototype.pack = function () {\n  if (!this.data || !this.data.length) {\n    this.emit(\"error\", \"No data provided\");\n    return this;\n  }\n\n  process.nextTick(\n    function () {\n      this._packer.pack(this.data, this.width, this.height, this.gamma);\n    }.bind(this)\n  );\n\n  return this;\n};\n\nPNG.prototype.parse = function (data, callback) {\n  if (callback) {\n    let onParsed, onError;\n\n    onParsed = function (parsedData) {\n      this.removeListener(\"error\", onError);\n\n      this.data = parsedData;\n      callback(null, this);\n    }.bind(this);\n\n    onError = function (err) {\n      this.removeListener(\"parsed\", onParsed);\n\n      callback(err, null);\n    }.bind(this);\n\n    this.once(\"parsed\", onParsed);\n    this.once(\"error\", onError);\n  }\n\n  this.end(data);\n  return this;\n};\n\nPNG.prototype.write = function (data) {\n  this._parser.write(data);\n  return true;\n};\n\nPNG.prototype.end = function (data) {\n  this._parser.end(data);\n};\n\nPNG.prototype._metadata = function (metadata) {\n  this.width = metadata.width;\n  this.height = metadata.height;\n\n  this.emit(\"metadata\", metadata);\n};\n\nPNG.prototype._gamma = function (gamma) {\n  this.gamma = gamma;\n};\n\nPNG.prototype._handleClose = function () {\n  if (!this._parser.writable && !this._packer.readable) {\n    this.emit(\"close\");\n  }\n};\n\nPNG.bitblt = function (src, dst, srcX, srcY, width, height, deltaX, deltaY) {\n  // eslint-disable-line max-params\n  // coerce pixel dimensions to integers (also coerces undefined -> 0):\n  /* eslint-disable no-param-reassign */\n  srcX |= 0;\n  srcY |= 0;\n  width |= 0;\n  height |= 0;\n  deltaX |= 0;\n  deltaY |= 0;\n  /* eslint-enable no-param-reassign */\n\n  if (\n    srcX > src.width ||\n    srcY > src.height ||\n    srcX + width > src.width ||\n    srcY + height > src.height\n  ) {\n    throw new Error(\"bitblt reading outside image\");\n  }\n\n  if (\n    deltaX > dst.width ||\n    deltaY > dst.height ||\n    deltaX + width > dst.width ||\n    deltaY + height > dst.height\n  ) {\n    throw new Error(\"bitblt writing outside image\");\n  }\n\n  for (let y = 0; y < height; y++) {\n    src.data.copy(\n      dst.data,\n      ((deltaY + y) * dst.width + deltaX) << 2,\n      ((srcY + y) * src.width + srcX) << 2,\n      ((srcY + y) * src.width + srcX + width) << 2\n    );\n  }\n};\n\nPNG.prototype.bitblt = function (\n  dst,\n  srcX,\n  srcY,\n  width,\n  height,\n  deltaX,\n  deltaY\n) {\n  // eslint-disable-line max-params\n\n  PNG.bitblt(this, dst, srcX, srcY, width, height, deltaX, deltaY);\n  return this;\n};\n\nPNG.adjustGamma = function (src) {\n  if (src.gamma) {\n    for (let y = 0; y < src.height; y++) {\n      for (let x = 0; x < src.width; x++) {\n        let idx = (src.width * y + x) << 2;\n\n        for (let i = 0; i < 3; i++) {\n          let sample = src.data[idx + i] / 255;\n          sample = Math.pow(sample, 1 / 2.2 / src.gamma);\n          src.data[idx + i] = Math.round(sample * 255);\n        }\n      }\n    }\n    src.gamma = 0;\n  }\n};\n\nPNG.prototype.adjustGamma = function () {\n  PNG.adjustGamma(this);\n};\n","/**\n * Filter method is a single-byte integer that indicates the preprocessing method applied to the image data before compression.\n */\nexport var PNGFilterType;\n(function (PNGFilterType) {\n    PNGFilterType[PNGFilterType[\"AUTO\"] = -1] = \"AUTO\";\n    /** scanline is transmitted unmodified */\n    PNGFilterType[PNGFilterType[\"NONE\"] = 0] = \"NONE\";\n    /** filter transmits the difference between each byte and the value of the corresponding byte of the prior pixel */\n    PNGFilterType[PNGFilterType[\"SUB\"] = 1] = \"SUB\";\n    /** The Up() filter is just like the Sub() filter except that the pixel immediately above the current pixel, rather than just to its left, is used as the predictor. */\n    PNGFilterType[PNGFilterType[\"UP\"] = 2] = \"UP\";\n    /** uses the average of the two neighboring pixels (left and above) to predict the value of a pixel */\n    PNGFilterType[PNGFilterType[\"AVERAGE\"] = 3] = \"AVERAGE\";\n    /** computes a simple linear function of the three neighboring pixels (left, above, upper left), then chooses as predictor the neighboring pixel closest to the computed value. */\n    PNGFilterType[PNGFilterType[\"PATH\"] = 4] = \"PATH\";\n})(PNGFilterType || (PNGFilterType = {}));\n/**\n * Color type is a single-byte integer that describes the interpretation of the image data.\n * Color type codes represent sums of the following values:\n *\n * 1 (palette used), 2 (color used), and 4 (alpha channel used).\n */\nexport var PNGColorType;\n(function (PNGColorType) {\n    PNGColorType[PNGColorType[\"GRAYSCALE\"] = 0] = \"GRAYSCALE\";\n    PNGColorType[PNGColorType[\"COLOR\"] = 2] = \"COLOR\";\n    PNGColorType[PNGColorType[\"GRAYSCALE_ALPHA\"] = 4] = \"GRAYSCALE_ALPHA\";\n    PNGColorType[PNGColorType[\"COLOR_ALPHA\"] = 6] = \"COLOR_ALPHA\";\n})(PNGColorType || (PNGColorType = {}));\n//# sourceMappingURL=constants.js.map","import { PNG } from \"pngjs\";\nimport { PNGFilterType, PNGColorType } from \"./constants.js\";\nexport * from \"./constants.js\";\nexport default function png() {\n    return {\n        mime: \"image/png\",\n        hasAlpha: true,\n        encode: (bitmap, { deflateLevel = 9, deflateStrategy = 3, filterType = PNGFilterType.AUTO, colorType, inputHasAlpha = true, ...options } = {}) => {\n            const png = new PNG({\n                width: bitmap.width,\n                height: bitmap.height,\n            });\n            png.data = bitmap.data;\n            return PNG.sync.write(png, {\n                ...options,\n                deflateLevel,\n                deflateStrategy,\n                filterType,\n                colorType: typeof colorType !== \"undefined\"\n                    ? colorType\n                    : inputHasAlpha\n                        ? PNGColorType.COLOR_ALPHA\n                        : PNGColorType.COLOR,\n                inputHasAlpha,\n            });\n        },\n        decode: (data, options) => {\n            const result = PNG.sync.read(data, options);\n            return {\n                data: result.data,\n                width: result.width,\n                height: result.height,\n            };\n        },\n    };\n}\n//# sourceMappingURL=index.js.map","'use strict';\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = require('../utils/common');\nvar trees   = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32   = require('./crc32');\nvar msg     = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new utils.Buf8(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n  // On Chrome, the arguments in a function call that are allowed is `65534`.\n  // If the length of the buffer is smaller than that, we can use this optimization,\n  // otherwise we will take a slower path.\n  if (len < 65534) {\n    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n    }\n  }\n\n  var result = '';\n  for (var i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n  return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n  var buf = new utils.Buf8(str.length);\n  for (var i = 0, len = buf.length; i < len; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n  return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n  var i, out, c, c_len;\n  var len = max || buf.length;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  var utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n  var pos;\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means buffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH      = 0;\nvar Z_FINISH        = 4;\n\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_SYNC_FLUSH    = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY    = 0;\n\nvar Z_DEFLATED  = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n  if (!(this instanceof Deflate)) return new Deflate(options);\n\n  this.options = utils.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  if (opt.raw && (opt.windowBits > 0)) {\n    opt.windowBits = -opt.windowBits;\n  }\n\n  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n    opt.windowBits += 16;\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status = zlib_deflate.deflateInit2(\n    this.strm,\n    opt.level,\n    opt.method,\n    opt.windowBits,\n    opt.memLevel,\n    opt.strategy\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  if (opt.header) {\n    zlib_deflate.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    var dict;\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK) {\n      throw new Error(msg[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var status, _mode;\n\n  if (this.ended) { return false; }\n\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */\n\n    if (status !== Z_STREAM_END && status !== Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n    if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n      if (this.options.to === 'string') {\n        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n      } else {\n        this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n      }\n    }\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n  // Finalize on the last chunk.\n  if (_mode === Z_FINISH) {\n    status = zlib_deflate.deflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === Z_SYNC_FLUSH) {\n    this.onEnd(Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n  var deflator = new Deflate(options);\n\n  deflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n  return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = require('../utils/common');\nvar adler32       = require('./adler32');\nvar crc32         = require('./crc32');\nvar inflate_fast  = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n        state.dmax = 1 << len;\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Array(state.head.extra_len);\n              }\n              utils.arraySet(\n                state.head.extra,\n                input,\n                next,\n                // extra field is limited to 65536 bytes\n                // - no need for additional size check\n                copy,\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          utils.arraySet(output, input, next, copy, put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inflate_fast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text       = 0;\n  /* modification time */\n  this.time       = 0;\n  /* extra flags (not used when writing a gzip file) */\n  this.xflags     = 0;\n  /* operating system */\n  this.os         = 0;\n  /* pointer to extra field or Z_NULL if none */\n  this.extra      = null;\n  /* extra field length (valid if extra != Z_NULL) */\n  this.extra_len  = 0; // Actually, we don't need it in JS,\n                       // but leave for few code modifications\n\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n  /* pointer to zero-terminated file name or Z_NULL */\n  this.name       = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n  /* pointer to zero-terminated comment or Z_NULL */\n  this.comment    = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n  /* true if there was or will be a header crc */\n  this.hcrc       = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n  this.done       = false;\n}\n\nmodule.exports = GZheader;\n","'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar c            = require('./zlib/constants');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\nvar GZheader     = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n  if (!(this instanceof Inflate)) return new Inflate(options);\n\n  this.options = utils.assign({\n    chunkSize: 16384,\n    windowBits: 0,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n    opt.windowBits = -opt.windowBits;\n    if (opt.windowBits === 0) { opt.windowBits = -15; }\n  }\n\n  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n      !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  }\n\n  // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm   = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status  = zlib_inflate.inflateInit2(\n    this.strm,\n    opt.windowBits\n  );\n\n  if (status !== c.Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  this.header = new GZheader();\n\n  zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n  // Setup dictionary\n  if (opt.dictionary) {\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      opt.dictionary = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      opt.dictionary = new Uint8Array(opt.dictionary);\n    }\n    if (opt.raw) { //In raw mode we need to set the dictionary early\n      status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n      if (status !== c.Z_OK) {\n        throw new Error(msg[status]);\n      }\n    }\n  }\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var dictionary = this.options.dictionary;\n  var status, _mode;\n  var next_out_utf8, tail, utf8str;\n\n  // Flag to properly process Z_BUF_ERROR on testing inflate call\n  // when we check that all output data was flushed.\n  var allowBufError = false;\n\n  if (this.ended) { return false; }\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // Only binary strings can be decompressed on practice\n    strm.input = strings.binstring2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */\n\n    if (status === c.Z_NEED_DICT && dictionary) {\n      status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n    }\n\n    if (status === c.Z_BUF_ERROR && allowBufError === true) {\n      status = c.Z_OK;\n      allowBufError = false;\n    }\n\n    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n        if (this.options.to === 'string') {\n\n          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n          tail = strm.next_out - next_out_utf8;\n          utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n          // move tail\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n          this.onData(utf8str);\n\n        } else {\n          this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n        }\n      }\n    }\n\n    // When no more input data, we should check that internal inflate buffers\n    // are flushed. The only way to do it when avail_out = 0 - run one more\n    // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n    // Here we set flag to process this error properly.\n    //\n    // NOTE. Deflate does not return error in this case and does not needs such\n    // logic.\n    if (strm.avail_in === 0 && strm.avail_out === 0) {\n      allowBufError = true;\n    }\n\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n  if (status === c.Z_STREAM_END) {\n    _mode = c.Z_FINISH;\n  }\n\n  // Finalize on the last chunk.\n  if (_mode === c.Z_FINISH) {\n    status = zlib_inflate.inflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === c.Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === c.Z_SYNC_FLUSH) {\n    this.onEnd(c.Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === c.Z_OK) {\n    if (this.options.to === 'string') {\n      // Glue & convert here, until we teach pako to send\n      // utf8 aligned strings to onData\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n *   , output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err)\n *   console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n  var inflator = new Inflate(options);\n\n  inflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n  return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip  = inflate;\n","// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign    = require('./lib/utils/common').assign;\n\nvar deflate   = require('./lib/deflate');\nvar inflate   = require('./lib/inflate');\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n","\r\n\r\n\r\n\r\n;(function(){\r\n\tvar UTIF = {};\r\n\t\r\n\t// Make available for import by `require()`\r\n\tif (typeof module == \"object\") {module.exports = UTIF;}\r\n\telse {self.UTIF = UTIF;}\r\n\t\r\n\tvar pako = (typeof require === \"function\") ? require(\"pako\") : self.pako;\r\n\t\r\n\tfunction log() { if (typeof process==\"undefined\" || process.env.NODE_ENV==\"development\") console.log.apply(console, arguments);  }\r\n\t\r\n\t(function(UTIF, pako){\r\n\t\t\r\n\t// Following lines add a JPEG decoder  to UTIF.JpegDecoder\r\n\t(function(){\"use strict\";var W=function a1(){function W(p){this.message=\"JPEG error: \"+p}W.prototype=new Error;W.prototype.name=\"JpegError\";W.constructor=W;return W}(),ak=function ag(){var p=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),t=4017,ac=799,ah=3406,ao=2276,ar=1567,ai=3784,s=5793,ad=2896;function ak(Q){if(Q==null)Q={};if(Q.w==null)Q.w=-1;this.V=Q.n;this.N=Q.w}function a5(Q,h){var f=0,G=[],n,E,a=16,F;while(a>0&&!Q[a-1]){a--}G.push({children:[],index:0});var C=G[0];for(n=0;n<a;n++)\r\n\t{for(E=0;E<Q[n];E++){C=G.pop();C.children[C.index]=h[f];while(C.index>0){C=G.pop()}C.index++;G.push(C);while(G.length<=n){G.push(F={children:[],index:0});C.children[C.index]=F.children;C=F}f++}if(n+1<a){G.push(F={children:[],index:0});C.children[C.index]=F.children;C=F}}return G[0].children}function a2(Q,h,f){return 64*((Q.P+1)*h+f)}function a7(Q,h,f,G,n,E,a,C,F,d){if(d==null)d=!1;var T=f.m,U=f.Z,z=h,J=0,V=0,r=0,D=0,a8,q=0,X,O,_,N,e,K,x=0,k,g,R,c;function Y(){if(V>0){V--;return J>>V&1}J=Q[h++];if(J===255){var I=Q[h++];if(I){if(I===220&&d){h+=2;var l=Z(Q,h);h+=2;if(l>0&&l!==f.s){throw new DNLMarkerError(\"Found DNL marker (0xFFDC) while parsing scan data\",l)}}else if(I===217){if(d){var M=q*8;\r\n\tif(M>0&&M<f.s/10){throw new DNLMarkerError(\"Found EOI marker (0xFFD9) while parsing scan data, \"+\"possibly caused by incorrect `scanLines` parameter\",M)}}throw new EOIMarkerError(\"Found EOI marker (0xFFD9) while parsing scan data\")}throw new W(\"unexpected marker\")}}V=7;return J>>>7}function u(I){var l=I;while(!0){l=l[Y()];switch(typeof l){case\"number\":return l;case\"object\":continue}throw new W(\"invalid huffman sequence\")}}function m(I){var e=0;while(I>0){e=e<<1|Y();I--}return e}function j(I){if(I===1){return Y()===1?1:-1}var e=m(I);if(e>=1<<I-1){return e}return e+(-1<<I)+1}function v(X,I){var l=u(X.J),M=l===0?0:j(l),N=1;\r\n\tX.D[I]=X.Q+=M;while(N<64){var S=u(X.i),i=S&15,A=S>>4;if(i===0){if(A<15){break}N+=16;continue}N+=A;var o=p[N];X.D[I+o]=j(i);N++}}function $(X,I){var l=u(X.J),M=l===0?0:j(l)<<F;X.D[I]=X.Q+=M}function b(X,I){X.D[I]|=Y()<<F}function P(X,I){if(r>0){r--;return}var N=E,l=a;while(N<=l){var M=u(X.i),S=M&15,i=M>>4;if(S===0){if(i<15){r=m(i)+(1<<i)-1;break}N+=16;continue}N+=i;var A=p[N];X.D[I+A]=j(S)*(1<<F);N++}}function a4(X,I){var N=E,l=a,M=0,S,i;while(N<=l){var A=I+p[N],o=X.D[A]<0?-1:1;switch(D){case 0:i=u(X.i);S=i&15;M=i>>4;if(S===0){if(M<15){r=m(M)+(1<<M);D=4}else{M=16;D=1}}else{if(S!==1){throw new W(\"invalid ACn encoding\")}a8=j(S);D=M?2:3}continue;case 1:case 2:if(X.D[A]){X.D[A]+=o*(Y()<<F)}else{M--;if(M===0){D=D===2?3:0}}break;case 3:if(X.D[A]){X.D[A]+=o*(Y()<<F)}else{X.D[A]=a8<<F;\r\n\tD=0}break;case 4:if(X.D[A]){X.D[A]+=o*(Y()<<F)}break}N++}if(D===4){r--;if(r===0){D=0}}}function H(X,I,x,l,M){var S=x/T|0,i=x%T;q=S*X.A+l;var A=i*X.h+M,o=a2(X,q,A);I(X,o)}function w(X,I,x){q=x/X.P|0;var l=x%X.P,M=a2(X,q,l);I(X,M)}var y=G.length;if(U){if(E===0){K=C===0?$:b}else{K=C===0?P:a4}}else{K=v}if(y===1){g=G[0].P*G[0].c}else{g=T*f.R}while(x<=g){var L=n?Math.min(g-x,n):g;if(L>0){for(O=0;O<y;O++){G[O].Q=0}r=0;if(y===1){X=G[0];for(e=0;e<L;e++){w(X,K,x);x++}}else{for(e=0;e<L;\r\n\te++){for(O=0;O<y;O++){X=G[O];R=X.h;c=X.A;for(_=0;_<c;_++){for(N=0;N<R;N++){H(X,K,x,_,N)}}}x++}}}V=0;k=an(Q,h);if(!k){break}if(k.u){var a6=L>0?\"unexpected\":\"excessive\";h=k.offset}if(k.M>=65488&&k.M<=65495){h+=2}else{break}}return h-z}function al(Q,h,f){var G=Q.$,n=Q.D,E,a,C,F,d,T,U,z,J,V,Y,u,m,j,v,$,b;if(!G){throw new W(\"missing required Quantization Table.\")}for(var r=0;r<64;r+=8){J=n[h+r];V=n[h+r+1];Y=n[h+r+2];u=n[h+r+3];m=n[h+r+4];j=n[h+r+5];v=n[h+r+6];$=n[h+r+7];J*=G[r];if((V|Y|u|m|j|v|$)===0){b=s*J+512>>10;f[r]=b;f[r+1]=b;f[r+2]=b;f[r+3]=b;f[r+4]=b;f[r+5]=b;f[r+6]=b;f[r+7]=b;continue}V*=G[r+1];Y*=G[r+2];u*=G[r+3];m*=G[r+4];j*=G[r+5];v*=G[r+6];$*=G[r+7];E=s*J+128>>8;a=s*m+128>>8;C=Y;F=v;d=ad*(V-$)+128>>8;z=ad*(V+$)+128>>8;\r\n\tT=u<<4;U=j<<4;E=E+a+1>>1;a=E-a;b=C*ai+F*ar+128>>8;C=C*ar-F*ai+128>>8;F=b;d=d+U+1>>1;U=d-U;z=z+T+1>>1;T=z-T;E=E+F+1>>1;F=E-F;a=a+C+1>>1;C=a-C;b=d*ao+z*ah+2048>>12;d=d*ah-z*ao+2048>>12;z=b;b=T*ac+U*t+2048>>12;T=T*t-U*ac+2048>>12;U=b;f[r]=E+z;f[r+7]=E-z;f[r+1]=a+U;f[r+6]=a-U;f[r+2]=C+T;f[r+5]=C-T;f[r+3]=F+d;f[r+4]=F-d}for(var P=0;P<8;++P){J=f[P];V=f[P+8];Y=f[P+16];u=f[P+24];m=f[P+32];j=f[P+40];v=f[P+48];$=f[P+56];if((V|Y|u|m|j|v|$)===0){b=s*J+8192>>14;if(b<-2040){b=0}else if(b>=2024){b=255}else{b=b+2056>>4}n[h+P]=b;n[h+P+8]=b;n[h+P+16]=b;n[h+P+24]=b;n[h+P+32]=b;n[h+P+40]=b;n[h+P+48]=b;n[h+P+56]=b;continue}E=s*J+2048>>12;a=s*m+2048>>12;C=Y;F=v;d=ad*(V-$)+2048>>12;z=ad*(V+$)+2048>>12;T=u;U=j;E=(E+a+1>>1)+4112;a=E-a;b=C*ai+F*ar+2048>>12;C=C*ar-F*ai+2048>>12;F=b;d=d+U+1>>1;U=d-U;z=z+T+1>>1;T=z-T;E=E+F+1>>1;F=E-F;a=a+C+1>>1;C=a-C;b=d*ao+z*ah+2048>>12;d=d*ah-z*ao+2048>>12;z=b;\r\n\tb=T*ac+U*t+2048>>12;T=T*t-U*ac+2048>>12;U=b;J=E+z;$=E-z;V=a+U;v=a-U;Y=C+T;j=C-T;u=F+d;m=F-d;if(J<16){J=0}else if(J>=4080){J=255}else{J>>=4}if(V<16){V=0}else if(V>=4080){V=255}else{V>>=4}if(Y<16){Y=0}else if(Y>=4080){Y=255}else{Y>>=4}if(u<16){u=0}else if(u>=4080){u=255}else{u>>=4}if(m<16){m=0}else if(m>=4080){m=255}else{m>>=4}if(j<16){j=0}else if(j>=4080){j=255}else{j>>=4}if(v<16){v=0}else if(v>=4080){v=255}else{v>>=4}if($<16){$=0}else if($>=4080){$=255}else{$>>=4}n[h+P]=J;\r\n\tn[h+P+8]=V;n[h+P+16]=Y;n[h+P+24]=u;n[h+P+32]=m;n[h+P+40]=j;n[h+P+48]=v;n[h+P+56]=$}}function a0(Q,h){var f=h.P,G=h.c,n=new Int16Array(64);for(var E=0;E<G;E++){for(var a=0;a<f;a++){var C=a2(h,E,a);al(h,C,n)}}return h.D}function an(Q,h,f){if(f==null)f=h;var G=Q.length-1,n=f<h?f:h;if(h>=G){return null}var E=Z(Q,h);if(E>=65472&&E<=65534){return{u:null,M:E,offset:h}}var a=Z(Q,n);while(!(a>=65472&&a<=65534)){if(++n>=G){return null}a=Z(Q,n)}return{u:E.toString(16),M:a,offset:n}}ak.prototype={parse(Q,h){if(h==null)h={};\r\n\tvar f=h.F,E=0,a=null,C=null,F,d,T=0;function G(){var o=Z(Q,E);E+=2;var B=E+o-2,V=an(Q,B,E);if(V&&V.u){B=V.offset}var ab=Q.subarray(E,B);E+=ab.length;return ab}function n(F){var o=Math.ceil(F.o/8/F.X),B=Math.ceil(F.s/8/F.B);for(var Y=0;Y<F.W.length;Y++){R=F.W[Y];var ab=Math.ceil(Math.ceil(F.o/8)*R.h/F.X),af=Math.ceil(Math.ceil(F.s/8)*R.A/F.B),ap=o*R.h,aq=B*R.A,ae=64*aq*(ap+1);R.D=new Int16Array(ae);R.P=ab;R.c=af}F.m=o;F.R=B}var U=[],z=[],J=[],V=Z(Q,E);E+=2;if(V!==65496){throw new W(\"SOI not found\")}V=Z(Q,E);\r\n\tE+=2;markerLoop:while(V!==65497){var Y,u,m;switch(V){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var j=G();if(V===65504){if(j[0]===74&&j[1]===70&&j[2]===73&&j[3]===70&&j[4]===0){a={version:{d:j[5],T:j[6]},K:j[7],j:j[8]<<8|j[9],H:j[10]<<8|j[11],S:j[12],I:j[13],C:j.subarray(14,14+3*j[12]*j[13])}}}if(V===65518){if(j[0]===65&&j[1]===100&&j[2]===111&&j[3]===98&&j[4]===101){C={version:j[5]<<8|j[6],k:j[7]<<8|j[8],q:j[9]<<8|j[10],a:j[11]}}}break;\r\n\tcase 65499:var v=Z(Q,E),b;E+=2;var $=v+E-2;while(E<$){var r=Q[E++],P=new Uint16Array(64);if(r>>4===0){for(u=0;u<64;u++){b=p[u];P[b]=Q[E++]}}else if(r>>4===1){for(u=0;u<64;u++){b=p[u];P[b]=Z(Q,E);E+=2}}else{throw new W(\"DQT - invalid table spec\")}U[r&15]=P}break;case 65472:case 65473:case 65474:if(F){throw new W(\"Only single frame JPEGs supported\")}E+=2;F={};F.G=V===65473;F.Z=V===65474;F.precision=Q[E++];var D=Z(Q,E),a4,q=0,H=0;E+=2;F.s=f||D;F.o=Z(Q,E);E+=2;F.W=[];F._={};var a8=Q[E++];for(Y=0;Y<a8;Y++){a4=Q[E];var w=Q[E+1]>>4,y=Q[E+1]&15;if(q<w){q=w}if(H<y){H=y}var X=Q[E+2];m=F.W.push({h:w,A:y,L:X,$:null});F._[a4]=m-1;E+=3}F.X=q;F.B=H;n(F);break;case 65476:var O=Z(Q,E);E+=2;\r\n\tfor(Y=2;Y<O;){var _=Q[E++],N=new Uint8Array(16),e=0;for(u=0;u<16;u++,E++){e+=N[u]=Q[E]}var K=new Uint8Array(e);for(u=0;u<e;u++,E++){K[u]=Q[E]}Y+=17+e;(_>>4===0?J:z)[_&15]=a5(N,K)}break;case 65501:E+=2;d=Z(Q,E);E+=2;break;case 65498:var x=++T===1&&!f,R;E+=2;var k=Q[E++],g=[];for(Y=0;Y<k;Y++){var c=Q[E++],L=F._[c];R=F.W[L];R.index=c;var a6=Q[E++];R.J=J[a6>>4];R.i=z[a6&15];g.push(R)}var I=Q[E++],l=Q[E++],M=Q[E++];try{var S=a7(Q,E,F,g,d,I,l,M>>4,M&15,x);E+=S}catch(ex){if(ex instanceof DNLMarkerError){return this.parse(Q,{F:ex.s})}else if(ex instanceof EOIMarkerError){break markerLoop}throw ex}break;case 65500:E+=4;break;case 65535:if(Q[E]!==255){E--}break;default:var i=an(Q,E-2,E-3);if(i&&i.u){E=i.offset;break}if(E>=Q.length-1){break markerLoop}throw new W(\"JpegImage.parse - unknown marker: \"+V.toString(16))}V=Z(Q,E);E+=2}this.width=F.o;this.height=F.s;this.g=a;this.b=C;this.W=[];for(Y=0;Y<F.W.length;Y++){R=F.W[Y];\r\n\tvar A=U[R.L];if(A){R.$=A}this.W.push({index:R.index,e:a0(F,R),l:R.h/F.X,t:R.A/F.B,P:R.P,c:R.c})}this.p=this.W.length;return undefined},Y(Q,h,f){if(f==null)f=!1;var G=this.width/Q,n=this.height/h,E,a,C,F,d,T,U,z,J,V,Y=0,u,m=this.W.length,j=Q*h*m,v=new Uint8ClampedArray(j),$=new Uint32Array(Q),b=4294967288,r;for(U=0;U<m;U++){E=this.W[U];a=E.l*G;C=E.t*n;Y=U;u=E.e;F=E.P+1<<3;if(a!==r){for(d=0;d<Q;d++){z=0|d*a;$[d]=(z&b)<<3|z&7}r=a}for(T=0;T<h;T++){z=0|T*C;V=F*(z&b)|(z&7)<<3;for(d=0;d<Q;d++){v[Y]=u[V+$[d]];Y+=m}}}var P=this.V;if(!f&&m===4&&!P){P=new Int32Array([-256,255,-256,255,-256,255,-256,255])}if(P){for(U=0;U<j;){for(z=0,J=0;z<m;z++,U++,J+=2){v[U]=(v[U]*P[J]>>8)+P[J+1]}}}return v},get f(){if(this.b){return!!this.b.a}if(this.p===3){if(this.N===0){return!1}else if(this.W[0].index===82&&this.W[1].index===71&&this.W[2].index===66){return!1}return!0}if(this.N===1){return!0}return!1},z:function aj(Q){var h,f,G;\r\n\tfor(var n=0,E=Q.length;n<E;n+=3){h=Q[n];f=Q[n+1];G=Q[n+2];Q[n]=h-179.456+1.402*G;Q[n+1]=h+135.459-.344*f-.714*G;Q[n+2]=h-226.816+1.772*f}return Q},O:function aa(Q){var h,f,G,n,E=0;for(var a=0,C=Q.length;a<C;a+=4){h=Q[a];f=Q[a+1];G=Q[a+2];n=Q[a+3];Q[E++]=-122.67195406894+f*(-660635669420364e-19*f+.000437130475926232*G-54080610064599e-18*h+.00048449797120281*n-.154362151871126)+G*(-.000957964378445773*G+.000817076911346625*h-.00477271405408747*n+1.53380253221734)+h*(.000961250184130688*h-.00266257332283933*n+.48357088451265)+n*(-.000336197177618394*n+.484791561490776);\r\n\tQ[E++]=107.268039397724+f*(219927104525741e-19*f-.000640992018297945*G+.000659397001245577*h+.000426105652938837*n-.176491792462875)+G*(-.000778269941513683*G+.00130872261408275*h+.000770482631801132*n-.151051492775562)+h*(.00126935368114843*h-.00265090189010898*n+.25802910206845)+n*(-.000318913117588328*n-.213742400323665);Q[E++]=-20.810012546947+f*(-.000570115196973677*f-263409051004589e-19*G+.0020741088115012*h-.00288260236853442*n+.814272968359295)+G*(-153496057440975e-19*G-.000132689043961446*h+.000560833691242812*n-.195152027534049)+h*(.00174418132927582*h-.00255243321439347*n+.116935020465145)+n*(-.000343531996510555*n+.24165260232407)}return Q.subarray(0,E)},r:function a3(Q){var h,f,G;\r\n\tfor(var n=0,E=Q.length;n<E;n+=4){h=Q[n];f=Q[n+1];G=Q[n+2];Q[n]=434.456-h-1.402*G;Q[n+1]=119.541-h+.344*f+.714*G;Q[n+2]=481.816-h-1.772*f}return Q},U:function as(Q){var h,f,G,n,E=0;for(var a=0,C=Q.length;a<C;a+=4){h=Q[a];f=Q[a+1];G=Q[a+2];n=Q[a+3];Q[E++]=255+h*(-6747147073602441e-20*h+.0008379262121013727*f+.0002894718188643294*G+.003264231057537806*n-1.1185611867203937)+f*(26374107616089404e-21*f-8626949158638572e-20*G-.0002748769067499491*n-.02155688794978967)+G*(-3878099212869363e-20*G-.0003267808279485286*n+.0686742238595345)-n*(.0003361971776183937*n+.7430659151342254);\r\n\tQ[E++]=255+h*(.00013596372813588848*h+.000924537132573585*f+.00010567359618683593*G+.0004791864687436512*n-.3109689587515875)+f*(-.00023545346108370344*f+.0002702845253534714*G+.0020200308977307156*n-.7488052167015494)+G*(6834815998235662e-20*G+.00015168452363460973*n-.09751927774728933)-n*(.0003189131175883281*n+.7364883807733168);Q[E++]=255+h*(13598650411385308e-21*h+.00012423956175490851*f+.0004751985097583589*G-36729317476630424e-22*n-.05562186980264034)+f*(.00016141380598724676*f+.0009692239130725186*G+.0007782692450036253*n-.44015232367526463)+G*(5.068882914068769e-7*G+.0017778369011375071*n-.7591454649749609)-n*(.0003435319965105553*n+.7063770186160144)}return Q.subarray(0,E)},getData:function(Q){var h=Q.width,f=Q.height,G=Q.forceRGB,n=Q.isSourcePDF;\r\n\tif(this.p>4){throw new W(\"Unsupported color mode\")}var E=this.Y(h,f,n);if(this.p===1&&G){var a=E.length,C=new Uint8ClampedArray(a*3),F=0;for(var d=0;d<a;d++){var T=E[d];C[F++]=T;C[F++]=T;C[F++]=T}return C}else if(this.p===3&&this.f){return this.z(E)}else if(this.p===4){if(this.f){if(G){return this.O(E)}return this.r(E)}else if(G){return this.U(E)}}return E}};return ak}();function a9(p,t){return p[t]<<24>>24}function Z(p,t){return p[t]<<8|p[t+1]}function am(p,t){return(p[t]<<24|p[t+1]<<16|p[t+2]<<8|p[t+3])>>>0}UTIF.JpegDecoder=ak}());\r\n\t\r\n\t//UTIF.JpegDecoder = PDFJS.JpegImage;\r\n\t\r\n\t\r\n\tUTIF.encodeImage = function(rgba, w, h, metadata)\r\n\t{\r\n\t\tvar idf = { \"t256\":[w], \"t257\":[h], \"t258\":[8,8,8,8], \"t259\":[1], \"t262\":[2], \"t273\":[1000], // strips offset\r\n\t\t\t\t\t\"t277\":[4], \"t278\":[h], /* rows per strip */          \"t279\":[w*h*4], // strip byte counts\r\n\t\t\t\t\t\"t282\":[[72,1]], \"t283\":[[72,1]], \"t284\":[1], \"t286\":[[0,1]], \"t287\":[[0,1]], \"t296\":[1], \"t305\": [\"Photopea (UTIF.js)\"], \"t338\":[1]\r\n\t\t\t};\r\n\t\tif (metadata) for (var i in metadata) idf[i] = metadata[i];\r\n\t\t\r\n\t\tvar prfx = new Uint8Array(UTIF.encode([idf]));\r\n\t\tvar img = new Uint8Array(rgba);\r\n\t\tvar data = new Uint8Array(1000+w*h*4);\r\n\t\tfor(var i=0; i<prfx.length; i++) data[i] = prfx[i];\r\n\t\tfor(var i=0; i<img .length; i++) data[1000+i] = img[i];\r\n\t\treturn data.buffer;\r\n\t}\r\n\t\r\n\tUTIF.encode = function(ifds)\r\n\t{\r\n\t\tvar LE = false;\r\n\t\tvar data = new Uint8Array(20000), offset = 4, bin = LE ? UTIF._binLE : UTIF._binBE;\r\n\t\tdata[0]=data[1]=LE?73:77;  bin.writeUshort(data,2,42);\r\n\t\r\n\t\tvar ifdo = 8;\r\n\t\tbin.writeUint(data, offset, ifdo);  offset+=4;\r\n\t\tfor(var i=0; i<ifds.length; i++)\r\n\t\t{\r\n\t\t\tvar noffs = UTIF._writeIFD(bin, UTIF._types.basic, data, ifdo, ifds[i]);\r\n\t\t\tifdo = noffs[1];\r\n\t\t\tif(i<ifds.length-1) {\r\n\t\t\t\tif((ifdo&3)!=0) ifdo+=(4-(ifdo&3));  // make each IFD start at multiple of 4\r\n\t\t\t\tbin.writeUint(data, noffs[0], ifdo);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn data.slice(0, ifdo).buffer;\r\n\t}\r\n\t\r\n\tUTIF.decode = function(buff, prm)\r\n\t{\r\n\t\tif(prm==null) prm = {parseMN:true, debug:false};  // read MakerNote, debug\r\n\t\tvar data = new Uint8Array(buff), offset = 0;\r\n\t\r\n\t\tvar id = UTIF._binBE.readASCII(data, offset, 2);  offset+=2;\r\n\t\tvar bin = id==\"II\" ? UTIF._binLE : UTIF._binBE;\r\n\t\tvar num = bin.readUshort(data, offset);  offset+=2;\r\n\t\r\n\t\tvar ifdo = bin.readUint(data, offset);  offset+=4;\r\n\t\tvar ifds = [];\r\n\t\twhile(true) {\r\n\t\t\tvar cnt = bin.readUshort(data,ifdo), typ = bin.readUshort(data,ifdo+4);  if(cnt!=0) if(typ<1 || 13<typ) {  log(\"error in TIFF\");  break  };\r\n\t\t\tUTIF._readIFD(bin, data, ifdo, ifds, 0, prm);\r\n\t\t\t\r\n\t\t\tifdo = bin.readUint(data, ifdo+2+cnt*12);\r\n\t\t\tif(ifdo==0) break;\r\n\t\t}\r\n\t\treturn ifds;\r\n\t}\r\n\t\r\n\tUTIF.decodeImage = function(buff, img, ifds)\r\n\t{\r\n\t\tif(img.data) return;\r\n\t\tvar data = new Uint8Array(buff);\r\n\t\tvar id = UTIF._binBE.readASCII(data, 0, 2);\r\n\t\r\n\t\tif(img[\"t256\"]==null) return;\t// No width => probably not an image\r\n\t\timg.isLE = id==\"II\";\r\n\t\timg.width  = img[\"t256\"][0];  //delete img[\"t256\"];\r\n\t\timg.height = img[\"t257\"][0];  //delete img[\"t257\"];\r\n\t\r\n\t\tvar cmpr = img[\"t259\"] ? img[\"t259\"][0] : 1;  //delete img[\"t259\"];\r\n\t\tvar fo   = img[\"t266\"] ? img[\"t266\"][0] : 1;  //delete img[\"t266\"];\r\n\t\tif(img[\"t284\"] && img[\"t284\"][0]==2) log(\"PlanarConfiguration 2 should not be used!\");\r\n\t\tif(cmpr==7 && img[\"t258\"] && img[\"t258\"].length>3)  img[\"t258\"]=img[\"t258\"].slice(0,3);\r\n\t\r\n\t\tvar spp = img[\"t277\"]?img[\"t277\"][0]:1;\r\n\t\tvar bps = img[\"t258\"]?img[\"t258\"][0]:1;\r\n\t\tvar bipp = bps*spp;  // bits per pixel\r\n\t\t/*\r\n\t\tvar bipp;  // bits per pixel\r\n\t\tif(img[\"t258\"]) bipp = Math.min(32,img[\"t258\"][0])*img[\"t258\"].length;\r\n\t\telse            bipp = (img[\"t277\"]?img[\"t277\"][0]:1);  \r\n\t\t*/\r\n\t\t// Some .NEF files have t258==14, even though they use 16 bits per pixel\r\n\t\tif(cmpr==1 && img[\"t279\"]!=null && img[\"t278\"] && img[\"t262\"][0]==32803)  {\r\n\t\t\tbipp = Math.round((img[\"t279\"][0]*8)/(img.width*img[\"t278\"][0]));\r\n\t\t}\r\n\t\tif(img[\"t50885\"] && img[\"t50885\"][0]==4) bipp = img[\"t258\"][0]*3;  // RAW_CANON_40D_SRAW_V103.CR2\r\n\t\tvar bipl = Math.ceil(img.width*bipp/8)*8;\r\n\t\tvar soff = img[\"t273\"];  if(soff==null || img[\"t322\"]) soff = img[\"t324\"];\r\n\t\tvar bcnt = img[\"t279\"];  if(cmpr==1 && soff.length==1) bcnt = [img.height*(bipl>>>3)];  if(bcnt==null || img[\"t322\"]) bcnt = img[\"t325\"];\r\n\t\t//bcnt[0] = Math.min(bcnt[0], data.length);  // Hasselblad, \"RAW_HASSELBLAD_H3D39II.3FR\"\r\n\t\tvar bytes = new Uint8Array(img.height*(bipl>>>3)), bilen = 0;\r\n\t\r\n\t\tif(img[\"t322\"]!=null) // tiled\r\n\t\t{\r\n\t\t\tvar tw = img[\"t322\"][0], th = img[\"t323\"][0];\r\n\t\t\tvar tx = Math.floor((img.width  + tw - 1) / tw);\r\n\t\t\tvar ty = Math.floor((img.height + th - 1) / th);\r\n\t\t\tvar tbuff = new Uint8Array(Math.ceil(tw*th*bipp/8)|0);\r\n\t\t\tconsole.log(\"====\", tx,ty);\r\n\t\t\tfor(var y=0; y<ty; y++)\r\n\t\t\t\tfor(var x=0; x<tx; x++)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar i = y*tx+x;  tbuff.fill(0);\r\n\t\t\t\t\tUTIF.decode._decompress(img,ifds, data, soff[i], bcnt[i], cmpr, tbuff, 0, fo,tw,th);\r\n\t\t\t\t\t// Might be required for 7 too. Need to check\r\n\t\t\t\t\tif (cmpr==6) bytes = tbuff;\r\n\t\t\t\t\telse UTIF._copyTile(tbuff, Math.ceil(tw*bipp/8)|0, th, bytes, Math.ceil(img.width*bipp/8)|0, img.height, Math.ceil(x*tw*bipp/8)|0, y*th);\r\n\t\t\t\t}\r\n\t\t\tbilen = bytes.length*8;\r\n\t\t}\r\n\t\telse\t// stripped\r\n\t\t{\r\n\t\t\tif(soff==null) return;\r\n\t\t\tvar rps = img[\"t278\"] ? img[\"t278\"][0] : img.height;   rps = Math.min(rps, img.height);\r\n\t\t\t//console.log(\"====\", img.width, rps);\r\n\t\t\tfor(var i=0; i<soff.length; i++)\r\n\t\t\t{\r\n\t\t\t\tUTIF.decode._decompress(img,ifds, data, soff[i], bcnt[i], cmpr, bytes, Math.ceil(bilen/8)|0, fo,img.width,rps);\r\n\t\t\t\tbilen += bipl * rps;\r\n\t\t\t}\r\n\t\t\tbilen = Math.min(bilen, bytes.length*8);\r\n\t\t}\r\n\t\timg.data = new Uint8Array(bytes.buffer, 0, Math.ceil(bilen/8)|0);\r\n\t}\r\n\t\r\n\tUTIF.decode._decompress = function(img,ifds, data, off, len, cmpr, tgt, toff, fo, w, h)  // fill order\r\n\t{\r\n\t\tif(img[\"t271\"] && img[\"t271\"][0]==\"Panasonic\" && img[\"t45\"] && img[\"t45\"][0]==6) cmpr = 34316;\r\n\t\t//console.log(\"compression\", cmpr);\r\n\t\t//var time = Date.now();\r\n\t\tif(false) {}\r\n\t\telse if(cmpr==1/* || (len==tgt.length && cmpr!=32767)*/) for(var j=0; j<len; j++) tgt[toff+j] = data[off+j];\r\n\t\telse if(cmpr==2) UTIF.decode._decodeG2 (data, off, len, tgt, toff, w, fo);\r\n\t\telse if(cmpr==3) UTIF.decode._decodeG3 (data, off, len, tgt, toff, w, fo, img[\"t292\"]?((img[\"t292\"][0]&1)==1):false);\r\n\t\telse if(cmpr==4) UTIF.decode._decodeG4 (data, off, len, tgt, toff, w, fo);\r\n\t\telse if(cmpr==5) UTIF.decode._decodeLZW(data, off, len, tgt, toff,8);\r\n\t\telse if(cmpr==6) UTIF.decode._decodeOldJPEG(img, data, off, len, tgt, toff);\r\n\t\telse if(cmpr==7 || cmpr==34892) UTIF.decode._decodeNewJPEG(img, data, off, len, tgt, toff);\r\n\t\telse if(cmpr==8 || cmpr==32946) {  var src = new Uint8Array(data.buffer,off+2,len-6);  var bin = pako[\"inflateRaw\"](src);  if(toff+bin.length<=tgt.length) tgt.set(bin,toff);  }\r\n\t\telse if(cmpr==9) UTIF.decode._decodeVC5(data,off,len,tgt,toff,img[\"t33422\"]);\r\n\t\telse if(cmpr==32767) UTIF.decode._decodeARW(img, data, off, len, tgt, toff);\r\n\t\telse if(cmpr==32773) UTIF.decode._decodePackBits(data, off, len, tgt, toff);\r\n\t\telse if(cmpr==32809) UTIF.decode._decodeThunder (data, off, len, tgt, toff);\r\n\t\telse if(cmpr==34316) UTIF.decode._decodePanasonic(img,data,off, len, tgt, toff);\r\n\t\telse if(cmpr==34713) //for(var j=0; j<len; j++) tgt[toff+j] = data[off+j];\r\n\t\t\tUTIF.decode._decodeNikon   (img,ifds, data, off, len, tgt, toff);\r\n\t\telse if(cmpr==34676) UTIF.decode._decodeLogLuv32(img,data, off, len, tgt, toff);  \r\n\t\telse log(\"Unknown compression\", cmpr);\r\n\t\t\r\n\t\t//console.log(Date.now()-time);\r\n\t\t\r\n\t\tvar bps = (img[\"t258\"]?Math.min(32,img[\"t258\"][0]):1);\r\n\t\tvar noc = (img[\"t277\"]?img[\"t277\"][0]:1), bpp=(bps*noc)>>>3, bpl = Math.ceil(bps*noc*w/8);\r\n\t\t\r\n\t\t// convert to Little Endian  /*\r\n\t\tif(bps==16 && !img.isLE && img[\"t33422\"]==null)  // not DNG\r\n\t\t\tfor(var y=0; y<h; y++) {\r\n\t\t\t\t//console.log(\"fixing endianity\");\r\n\t\t\t\tvar roff = toff+y*bpl;\r\n\t\t\t\tfor(var x=1; x<bpl; x+=2) {  var t=tgt[roff+x];  tgt[roff+x]=tgt[roff+x-1];  tgt[roff+x-1]=t;  }\r\n\t\t\t}  //*/\r\n\t\r\n\t\tif(img[\"t317\"] && img[\"t317\"][0]==2)\r\n\t\t{\r\n\t\t\tfor(var y=0; y<h; y++)\r\n\t\t\t{\r\n\t\t\t\tvar ntoff = toff+y*bpl;\r\n\t\t\t\tif(bps==16) for(var j=bpp; j<bpl; j+=2) {\r\n\t\t\t\t\tvar nv = ((tgt[ntoff+j+1]<<8)|tgt[ntoff+j])  +  ((tgt[ntoff+j-bpp+1]<<8)|tgt[ntoff+j-bpp]);\r\n\t\t\t\t\ttgt[ntoff+j] = nv&255;  tgt[ntoff+j+1] = (nv>>>8)&255;  \r\n\t\t\t\t}\r\n\t\t\t\telse if(noc==3) for(var j=  3; j<bpl; j+=3)\r\n\t\t\t\t{\r\n\t\t\t\t\ttgt[ntoff+j  ] = (tgt[ntoff+j  ] + tgt[ntoff+j-3])&255;\r\n\t\t\t\t\ttgt[ntoff+j+1] = (tgt[ntoff+j+1] + tgt[ntoff+j-2])&255;\r\n\t\t\t\t\ttgt[ntoff+j+2] = (tgt[ntoff+j+2] + tgt[ntoff+j-1])&255;\r\n\t\t\t\t}\r\n\t\t\t\telse for(var j=bpp; j<bpl; j++) tgt[ntoff+j] = (tgt[ntoff+j] + tgt[ntoff+j-bpp])&255;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t\t\tUTIF.decode._decodePanasonic = function(img, data, off, len, tgt, toff) {\r\n\t\r\n\t\t\t\t\tvar img_buffer = data.buffer;\r\n\t\t\r\n\t\t\t\t\tvar rawWidth = img[\"t2\"][0];\r\n\t\t\t\t\tvar rawHeight = img[\"t3\"][0];\r\n\t\t\t\t\tvar bitsPerSample = img[\"t10\"][0];\r\n\t\t\t\t\tvar RW2_Format =  img[\"t45\"][0];\r\n\t\t\r\n\t\t\t\t\tvar bidx = 0;\r\n\t\t\t\t\tvar imageIndex = 0;\r\n\t\t\t\t\tvar vpos = 0;\r\n\t\t\t\t\tvar byte = 0;\r\n\t\t\t\t\tvar arr_a, arr_b;\r\n\t\t\t\t\tvar bytes = (RW2_Format == 6 ? new Uint32Array(18) : new Uint8Array(16));\r\n\t\t\t\t\tvar i, j, sh, pred=[0,0], nonz=[0,0], isOdd, idx = 0, pixel_base;\r\n\t\t\t\t\tvar row, col, crow;\r\n\t\t\t\t\tvar buffer = new Uint8Array(0x4000);\r\n\t\t\t\t\tvar result = new Uint16Array(tgt.buffer);\r\n\t\r\n\t\t\t\t\tfunction getDataRaw(bits){\r\n\t\t\t\t\t\tif (vpos == 0) {\r\n\t\t\t\t\t\t\tvar arr_a = new Uint8Array(img_buffer, off+imageIndex + 0x1ff8, 0x4000-0x1ff8);\r\n\t\t\t\t\t\t\tvar arr_b = new Uint8Array(img_buffer, off+imageIndex, 0x1ff8);\r\n\t\t\t\t\t\t\tbuffer.set(arr_a);  \r\n\t\t\t\t\t\t\tbuffer.set(arr_b, arr_a.length);\r\n\t\t\t\t\t\t\timageIndex += 0x4000;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(RW2_Format == 5) {\r\n\t\t\t\t\t\t\tfor (i = 0; i < 16; i++){\r\n\t\t\t\t\t\t\t\tbytes[i] = buffer[vpos++];\r\n\t\t\t\t\t\t\t\tvpos &= 0x3FFF;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvpos = (vpos - bits) & 0x1ffff;\r\n\t\t\t\t\t\t\tbyte = vpos >> 3 ^ 0x3ff0;\r\n\t\t\t\t\t\t\treturn (buffer[byte] | buffer[byte + 1] << 8) >> (vpos & 7) & ~((-1) << bits);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Raw Format 6\r\n\t\t\t\t\tfunction getBufferDataRW6(i) {\r\n\t\t\t\t\t\treturn buffer[vpos + 15 - i];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfunction readPageRW6() {\r\n\t\t\t\t\t\tbytes[0] = (getBufferDataRW6(0) << 6) | (getBufferDataRW6(1) >> 2); // 14 bit\r\n\t\t\t\t\t\tbytes[1] = (((getBufferDataRW6(1) & 0x3) << 12) | (getBufferDataRW6(2) << 4) | (getBufferDataRW6(3) >> 4)) & 0x3fff;\r\n\t\t\t\t\t\tbytes[2] = (getBufferDataRW6(3) >> 2) & 0x3;\r\n\t\t\t\t\t\tbytes[3] = ((getBufferDataRW6(3) & 0x3) << 8) | getBufferDataRW6(4);\r\n\t\t\t\t\t\tbytes[4] = (getBufferDataRW6(5) << 2) | (getBufferDataRW6(6) >> 6);\r\n\t\t\t\t\t\tbytes[5] = ((getBufferDataRW6(6) & 0x3f) << 4) | (getBufferDataRW6(7) >> 4);\r\n\t\t\t\t\t\tbytes[6] = (getBufferDataRW6(7) >> 2) & 0x3;\r\n\t\t\t\t\t\tbytes[7] = ((getBufferDataRW6(7) & 0x3) << 8) | getBufferDataRW6(8);\r\n\t\t\t\t\t\tbytes[8] = ((getBufferDataRW6(9) << 2) & 0x3fc) | (getBufferDataRW6(10) >> 6);\r\n\t\t\t\t\t\tbytes[9] = ((getBufferDataRW6(10) << 4) | (getBufferDataRW6(11) >> 4)) & 0x3ff;\r\n\t\t\t\t\t\tbytes[10] = (getBufferDataRW6(11) >> 2) & 0x3;\r\n\t\t\t\t\t\tbytes[11] = ((getBufferDataRW6(11) & 0x3) << 8) | getBufferDataRW6(12);\r\n\t\t\t\t\t\tbytes[12] = (((getBufferDataRW6(13) << 2) & 0x3fc) | getBufferDataRW6(14) >> 6) & 0x3ff;\r\n\t\t\t\t\t\tbytes[13] = ((getBufferDataRW6(14) << 4) | (getBufferDataRW6(15) >> 4)) & 0x3ff;\r\n\t\t\t\t\t\tvpos += 16;\r\n\t\t\t\t\t\tbyte = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfunction readPageRw6_bps12() {\r\n\t\t\t\t\t\tbytes[0] = (getBufferDataRW6(0) << 4) | (getBufferDataRW6(1) >> 4);\r\n\t\t\t\t\t\tbytes[1] = (((getBufferDataRW6(1) & 0xf) << 8) | (getBufferDataRW6(2))) & 0xfff;\r\n\t\t\t\t\t\tbytes[2] = (getBufferDataRW6(3) >> 6) & 0x3;\r\n\t\t\t\t\t\tbytes[3] = ((getBufferDataRW6(3) & 0x3f) << 2) | (getBufferDataRW6(4) >> 6);\r\n\t\t\t\t\t\tbytes[4] = ((getBufferDataRW6(4) & 0x3f) << 2) | (getBufferDataRW6(5) >> 6);\r\n\t\t\t\t\t\tbytes[5] = ((getBufferDataRW6(5) & 0x3f) << 2) | (getBufferDataRW6(6) >> 6);\r\n\t\t\t\t\t\tbytes[6] = (getBufferDataRW6(6) >> 4) & 0x3;\r\n\t\t\t\t\t\tbytes[7] = ((getBufferDataRW6(6) & 0xf) << 4) | (getBufferDataRW6(7) >> 4);\r\n\t\t\t\t\t\tbytes[8] = ((getBufferDataRW6(7) & 0xf) << 4) | (getBufferDataRW6(8) >> 4);\r\n\t\t\t\t\t\tbytes[9] = ((getBufferDataRW6(8) & 0xf) << 4) | (getBufferDataRW6(9) >> 4);\r\n\t\t\t\t\t\tbytes[10] = (getBufferDataRW6(9) >> 2) & 0x3;\r\n\t\t\t\t\t\tbytes[11] = ((getBufferDataRW6(9) & 0x3) << 6) | (getBufferDataRW6(10) >> 2);\r\n\t\t\t\t\t\tbytes[12] = ((getBufferDataRW6(10) & 0x3) << 6) | (getBufferDataRW6(11) >> 2);\r\n\t\t\t\t\t\tbytes[13] = ((getBufferDataRW6(11) & 0x3) << 6) | (getBufferDataRW6(12) >> 2);\r\n\t\t\t\t\t\tbytes[14] = getBufferDataRW6(12) & 0x3;\r\n\t\t\t\t\t\tbytes[15] = getBufferDataRW6(13);\r\n\t\t\t\t\t\tbytes[16] = getBufferDataRW6(14);\r\n\t\t\t\t\t\tbytes[17] = getBufferDataRW6(15);\r\n\t\r\n\t\t\t\t\t\tvpos += 16;\r\n\t\t\t\t\t\tbyte = 0;                    \r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Main loop\r\n\t\t\t\t\tfunction resetPredNonzeros(){\r\n\t\t\t\t\t\tpred[0]=0; pred[1]=0;\r\n\t\t\t\t\t\tnonz[0]=0; nonz[1]=0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (RW2_Format == 7) {\r\n\t\t\t\t\t\tthrow RW2_Format;\r\n\t\r\n\t\t\t\t\t\t// Skatch of version 7 \r\n\t\t\t\t\t\t/*\r\n\t\t\t\t\t\tvar pixels_per_block = bitsPerSample == 14 ? 9 : 10;\r\n\t\t\t\t\t\t\trowbytes = 0|(rawWidth / pixels_per_block * 16);\r\n\t\t\t\t\t\tfor (row = 0; row < rawHeight - 15; row += 16) {\r\n\t\t\t\t\t\t\tvar rowstoread = Math.min(16, rawHeight - row);\r\n\t\t\t\t\t\t\tvar readlen = rowbytes*rowstoread;\r\n\t\t\t\t\t\t\tbuffer = new Uint8Array(image.slice(bidx, bidx+readlen));\r\n\t\t\t\t\t\t\tvpos = 0;\r\n\t\t\t\t\t\t\tbidx += readlen; \r\n\t\t\t\t\t\t\ti = 0;\r\n\t\t\t\t\t\t\tfor (crow = 0; crow < rowstoread; crow++) {\r\n\t\t\t\t\t\t\t\tidx = (row + crow) * rawWidth;\r\n\t\t\t\t\t\t\t\tfor (col = 0; col <= rawWidth - pixels_per_block; col += pixels_per_block) {\r\n\t\t\t\t\t\t\t\t\tfor(j=0; j < pixels_per_block; j++) bytes[j] = buffer[i++];\r\n\t\t\t\t\t\t\t\t\tif (bitsPerSample == 12) {\r\n\t\t\t\t\t\t\t\t\t\tresult[idx ] = ((bytes[1] & 0xF) << 8) + bytes[0];\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 1] = 16 * bytes[2] + (bytes[1] >> 4);\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 2] = ((bytes[4] & 0xF) << 8) + bytes[3];\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 3] = 16 * bytes[5] + (bytes[4] >> 4);\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 4] = ((bytes[7] & 0xF) << 8) + bytes[6];\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 5] = 16 * bytes[8] + (bytes[7] >> 4);\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 6] = ((bytes[10] & 0xF) << 8) + bytes[9];\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 7] = 16 * bytes[11] + (bytes[10] >> 4);\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 8] = ((bytes[13] & 0xF) << 8) + bytes[12];\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 9] = 16 * bytes[14] + (bytes[13] >> 4);\r\n\t\t\t\t\t\t\t\t\t} else if (bitsPerSample == 14) {\r\n\t\t\t\t\t\t\t\t\t\tresult[idx] = bytes[0] + ((bytes[1] & 0x3F) << 8);\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 1] = (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 2] = (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 3] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 4] = bytes[7] + ((bytes[8] & 0x3F) << 8);\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 5] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 6] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 7] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + 8] = bytes[14] + ((bytes[15] & 0x3F) << 8);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t*/\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse if(RW2_Format == 6) {\r\n\t\t\t\t\t\tvar is12bit = bitsPerSample == 12,\r\n\t\t\t\t\t\t\treadPageRw6Fn = is12bit ? readPageRw6_bps12 : readPageRW6,\r\n\t\t\t\t\t\t\tpixelsPerBlock = is12bit ? 14 : 11,\r\n\t\t\t\t\t\t\tpixelbase0 = is12bit ? 0x80 : 0x200,\r\n\t\t\t\t\t\t\tpixelbase_compare = is12bit ? 0x800 : 0x2000,\r\n\t\t\t\t\t\t\tspix_compare = is12bit ? 0x3fff : 0xffff,\r\n\t\t\t\t\t\t\tpixel_mask = is12bit ? 0xfff : 0x3fff,\r\n\t\t\t\t\t\t\tblocksperrow = rawWidth / pixelsPerBlock, \r\n\t\t\t\t\t\t\trowbytes = blocksperrow * 16,\r\n\t\t\t\t\t\t\tbufferSize = is12bit ? 18 : 14;\r\n\t\r\n\t\t\t\t\t\tfor (row = 0; row < rawHeight - 15; row += 16) {\r\n\t\t\t\t\t\t\tvar rowstoread = Math.min(16, rawHeight - row);\r\n\t\t\t\t\t\t\tvar readlen = rowbytes*rowstoread;\r\n\t\t\t\t\t\t\tbuffer = new Uint8Array(img_buffer, off+bidx, readlen);//new Uint8Array(image.slice(bidx, bidx+readlen));\r\n\t\t\t\t\t\t\tvpos = 0;\r\n\t\t\t\t\t\t\tbidx += readlen; \r\n\t\t\t\t\t\t\tfor (crow = 0, col = 0; crow < rowstoread; crow++, col = 0) {\r\n\t\t\t\t\t\t\t\tidx = (row + crow) * rawWidth;\r\n\t\t\t\t\t\t\t\tfor (var rblock = 0; rblock < blocksperrow; rblock++) {\r\n\t\t\t\t\t\t\t\t\treadPageRw6Fn();\r\n\t\t\t\t\t\t\t\t\tresetPredNonzeros();\r\n\t\t\t\t\t\t\t\t\tsh=0; pixel_base=0;\r\n\t\t\t\t\t\t\t\t\tfor (i = 0; i < pixelsPerBlock; i++){\r\n\t\t\t\t\t\t\t\t\t\tisOdd = i & 1;\r\n\t\t\t\t\t\t\t\t\t\tif (i % 3 == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar base = byte < bufferSize ? bytes[byte++] : 0;\r\n\t\t\t\t\t\t\t\t\t\t\tif (base == 3) base = 4;\r\n\t\t\t\t\t\t\t\t\t\t\tpixel_base = pixelbase0 << base;\r\n\t\t\t\t\t\t\t\t\t\t\tsh = 1 << base;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tvar epixel = byte < bufferSize ? bytes[byte++] : 0;\r\n\t\t\t\t\t\t\t\t\t\tif (pred[isOdd]) {\r\n\t\t\t\t\t\t\t\t\t\t\tepixel *= sh;\r\n\t\t\t\t\t\t\t\t\t\t\tif (pixel_base < pixelbase_compare && nonz[isOdd] > pixel_base)\r\n\t\t\t\t\t\t\t\t\t\t\t\tepixel += nonz[isOdd] - pixel_base;\r\n\t\t\t\t\t\t\t\t\t\t\tnonz[isOdd] = epixel;\r\n\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\tpred[isOdd] = epixel;\r\n\t\t\t\t\t\t\t\t\t\t\tif (epixel)\r\n\t\t\t\t\t\t\t\t\t\t\t\tnonz[isOdd] = epixel;\r\n\t\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t\t\tepixel = nonz[isOdd];\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tresult[idx + col++] = (epixel - 0xf) <= spix_compare ? (epixel - 0xf) & spix_compare : ((epixel + 0x7ffffff1) >> 0x1f) & pixel_mask;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse if (RW2_Format == 5) { \r\n\t\t\t\t\t\tvar blockSize = bitsPerSample == 12 ? 10 : 9;\r\n\t\t\t\t\t\tfor (row = 0; row < rawHeight; row++) {\r\n\t\t\t\t\t\t\tfor (col = 0; col < rawWidth; col+=blockSize) {\r\n\t\t\t\t\t\t\t\tgetDataRaw(0);\r\n\t\t\t\t\t\t\t\t// Tuhle podminku pouziva i RW2_Format 7 \r\n\t\t\t\t\t\t\t\tif (bitsPerSample == 12) {\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = ((bytes[1] & 0xF) << 8) + bytes[0];\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = 16 * bytes[2] + (bytes[1] >> 4);\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = ((bytes[4] & 0xF) << 8) + bytes[3];\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = 16 * bytes[5] + (bytes[4] >> 4);\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = ((bytes[7] & 0xF) << 8) + bytes[6];\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = 16 * bytes[8] + (bytes[7] >> 4);\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = ((bytes[10] & 0xF) << 8) + bytes[9];\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = 16 * bytes[11] + (bytes[10] >> 4);\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = ((bytes[13] & 0xF) << 8) + bytes[12];\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = 16 * bytes[14] + (bytes[13] >> 4);\r\n\t\t\t\t\t\t\t\t} else if (bitsPerSample == 14) {\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = bytes[0] + ((bytes[1] & 0x3F) << 8);\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = bytes[7] + ((bytes[8] & 0x3F) << 8);\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);\r\n\t\t\t\t\t\t\t\t\tresult[idx++] = bytes[14] + ((bytes[15] & 0x3F) << 8);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//console.log(result[1000000 - 1])\r\n\t\t\t\t\t} else if(RW2_Format == 4) {\r\n\t\t\t\t\t\tfor (row = 0; row < rawHeight; row++){\r\n\t\t\t\t\t\t\tfor(col = 0; col < rawWidth; col++){\r\n\t\t\t\t\t\t\t\ti = col % 14;\r\n\t\t\t\t\t\t\t\tisOdd = i & 1;\r\n\t\t\t\t\t\t\t\tif (i==0) resetPredNonzeros();\r\n\t\t\t\t\t\t\t\tif (i%3 == 2) \r\n\t\t\t\t\t\t\t\t\tsh = 4 >> (3 - getDataRaw(2));\r\n\t\t\t\t\t\t\t\tif (nonz[isOdd]) {\r\n\t\t\t\t\t\t\t\t\tj = getDataRaw(8);\r\n\t\t\t\t\t\t\t\t\tif(j != 0){\r\n\t\t\t\t\t\t\t\t\t\tpred[isOdd] -= 0x80 << sh;\r\n\t\t\t\t\t\t\t\t\t\tif (pred[isOdd] < 0 || sh == 4) \r\n\t\t\t\t\t\t\t\t\t\t\tpred[isOdd] &= ~((-1) << sh);\r\n\t\t\t\t\t\t\t\t\t\tpred[isOdd] += j << sh;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tnonz[isOdd] = getDataRaw(8);\r\n\t\t\t\t\t\t\t\t\tif(nonz[isOdd] || i > 11)\r\n\t\t\t\t\t\t\t\t\t\tpred[isOdd] = nonz[isOdd] << 4 | getDataRaw(4);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tresult[idx++] = pred[col & 1];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse throw RW2_Format;\r\n\t\t\t\t}\r\n\t\r\n\t\r\n\tUTIF.decode._decodeVC5 = function(){var x=[1,0,1,0,2,2,1,1,3,7,1,2,5,25,1,3,6,48,1,4,6,54,1,5,7,111,1,8,7,99,1,6,7,105,12,0,7,107,1,7,8,209,20,0,8,212,1,9,8,220,1,10,9,393,1,11,9,394,32,0,9,416,1,12,9,427,1,13,10,887,1,18,10,784,1,14,10,790,1,15,10,835,60,0,10,852,1,16,10,885,1,17,11,1571,1,19,11,1668,1,20,11,1669,100,0,11,1707,1,21,11,1772,1,22,12,3547,1,29,12,3164,1,24,12,3166,1,25,12,3140,1,23,12,3413,1,26,12,3537,1,27,12,3539,1,28,13,7093,1,35,13,6283,1,30,13,6331,1,31,13,6335,180,0,13,6824,1,32,13,7072,1,33,13,7077,320,0,13,7076,1,34,14,12565,1,36,14,12661,1,37,14,12669,1,38,14,13651,1,39,14,14184,1,40,15,28295,1,46,15,28371,1,47,15,25320,1,42,15,25336,1,43,15,25128,1,41,15,27300,1,44,15,28293,1,45,16,50259,1,48,16,50643,1,49,16,50675,1,50,16,56740,1,53,16,56584,1,51,16,56588,1,52,17,113483,1,61,17,113482,1,60,17,101285,1,55,17,101349,1,56,17,109205,1,57,17,109207,1,58,17,100516,1,54,17,113171,1,59,18,202568,1,62,18,202696,1,63,18,218408,1,64,18,218412,1,65,18,226340,1,66,18,226356,1,67,18,226358,1,68,19,402068,1,69,19,405138,1,70,19,405394,1,71,19,436818,1,72,19,436826,1,73,19,452714,1,75,19,452718,1,76,19,452682,1,74,20,804138,1,77,20,810279,1,78,20,810790,1,79,20,873638,1,80,20,873654,1,81,20,905366,1,82,20,905430,1,83,20,905438,1,84,21,1608278,1,85,21,1620557,1,86,21,1621582,1,87,21,1621583,1,88,21,1747310,1,89,21,1810734,1,90,21,1810735,1,91,21,1810863,1,92,21,1810879,1,93,22,3621725,1,99,22,3621757,1,100,22,3241112,1,94,22,3494556,1,95,22,3494557,1,96,22,3494622,1,97,22,3494623,1,98,23,6482227,1,102,23,6433117,1,101,23,6989117,1,103,23,6989119,1,105,23,6989118,1,104,23,7243449,1,106,23,7243512,1,107,24,13978233,1,111,24,12964453,1,109,24,12866232,1,108,24,14486897,1,113,24,13978232,1,110,24,14486896,1,112,24,14487026,1,114,24,14487027,1,115,25,25732598,1,225,25,25732597,1,189,25,25732596,1,188,25,25732595,1,203,25,25732594,1,202,25,25732593,1,197,25,25732592,1,207,25,25732591,1,169,25,25732590,1,223,25,25732589,1,159,25,25732522,1,235,25,25732579,1,152,25,25732575,1,192,25,25732489,1,179,25,25732573,1,201,25,25732472,1,172,25,25732576,1,149,25,25732488,1,178,25,25732566,1,120,25,25732571,1,219,25,25732577,1,150,25,25732487,1,127,25,25732506,1,211,25,25732548,1,125,25,25732588,1,158,25,25732486,1,247,25,25732467,1,238,25,25732508,1,163,25,25732552,1,228,25,25732603,1,183,25,25732513,1,217,25,25732587,1,168,25,25732520,1,122,25,25732484,1,128,25,25732562,1,249,25,25732505,1,187,25,25732504,1,186,25,25732483,1,136,25,25928905,1,181,25,25732560,1,255,25,25732500,1,230,25,25732482,1,135,25,25732555,1,233,25,25732568,1,222,25,25732583,1,145,25,25732481,1,134,25,25732586,1,167,25,25732521,1,248,25,25732518,1,209,25,25732480,1,243,25,25732512,1,216,25,25732509,1,164,25,25732547,1,140,25,25732479,1,157,25,25732544,1,239,25,25732574,1,191,25,25732564,1,251,25,25732478,1,156,25,25732546,1,139,25,25732498,1,242,25,25732557,1,133,25,25732477,1,162,25,25732515,1,213,25,25732584,1,165,25,25732514,1,212,25,25732476,1,227,25,25732494,1,198,25,25732531,1,236,25,25732530,1,234,25,25732529,1,117,25,25732528,1,215,25,25732527,1,124,25,25732526,1,123,25,25732525,1,254,25,25732524,1,253,25,25732523,1,148,25,25732570,1,218,25,25732580,1,146,25,25732581,1,147,25,25732569,1,224,25,25732533,1,143,25,25732540,1,184,25,25732541,1,185,25,25732585,1,166,25,25732556,1,132,25,25732485,1,129,25,25732563,1,250,25,25732578,1,151,25,25732501,1,119,25,25732502,1,193,25,25732536,1,176,25,25732496,1,245,25,25732553,1,229,25,25732516,1,206,25,25732582,1,144,25,25732517,1,208,25,25732558,1,137,25,25732543,1,241,25,25732466,1,237,25,25732507,1,190,25,25732542,1,240,25,25732551,1,131,25,25732554,1,232,25,25732565,1,252,25,25732475,1,171,25,25732493,1,205,25,25732492,1,204,25,25732491,1,118,25,25732490,1,214,25,25928904,1,180,25,25732549,1,126,25,25732602,1,182,25,25732539,1,175,25,25732545,1,141,25,25732559,1,138,25,25732537,1,177,25,25732534,1,153,25,25732503,1,194,25,25732606,1,160,25,25732567,1,121,25,25732538,1,174,25,25732497,1,246,25,25732550,1,130,25,25732572,1,200,25,25732474,1,170,25,25732511,1,221,25,25732601,1,196,25,25732532,1,142,25,25732519,1,210,25,25732495,1,199,25,25732605,1,155,25,25732535,1,154,25,25732499,1,244,25,25732510,1,220,25,25732600,1,195,25,25732607,1,161,25,25732604,1,231,25,25732473,1,173,25,25732599,1,226,26,51465122,1,116,26,51465123,0,1],o,C,k,P=[3,3,3,3,2,2,2,1,1,1],V=24576,ar=16384,H=8192,az=ar|H;\r\n\tfunction d(t){var E=t[1],h=t[0][E>>>3]>>>7-(E&7)&1;t[1]++;return h}function ag(t,E){if(o==null){o={};\r\n\tfor(var h=0;h<x.length;h+=4)o[x[h+1]]=x.slice(h,h+4)}var L=d(t),g=o[L];while(g==null){L=L<<1|d(t);g=o[L]}var n=g[3];\r\n\tif(n!=0)n=d(t)==0?n:-n;E[0]=g[2];E[1]=n}function m(t,E){for(var h=0;h<E;h++){if((t&1)==1)t++;t=t>>>1}return t}function A(t,E){return t>>E}function O(t,E,h,L,g,n){E[h]=A(A(11*t[g]-4*t[g+n]+t[g+n+n]+4,3)+t[L],1);\r\n\tE[h+n]=A(A(5*t[g]+4*t[g+n]-t[g+n+n]+4,3)-t[L],1)}function J(t,E,h,L,g,n){var W=t[g-n]-t[g+n],j=t[g],$=t[L];\r\n\tE[h]=A(A(W+4,3)+j+$,1);E[h+n]=A(A(-W+4,3)+j-$,1)}function y(t,E,h,L,g,n){E[h]=A(A(5*t[g]+4*t[g-n]-t[g-n-n]+4,3)+t[L],1);\r\n\tE[h+n]=A(A(11*t[g]-4*t[g-n]+t[g-n-n]+4,3)-t[L],1)}function q(t){t=t<0?0:t>4095?4095:t;t=k[t]>>>2;return t}function av(t,E,h,L,g,n){L=new Uint16Array(L.buffer);\r\n\tvar W=Date.now(),j=UTIF._binBE,$=E+h,r,u,X,I,ax,a3,R,ai,aa,ap,ah,ae,aD,al,i,aE,T,B;E+=4;var a5=n[0]==1;\r\n\twhile(E<$){var S=j.readShort(t,E),s=j.readUshort(t,E+2);E+=4;if(S==12)r=s;else if(S==20)u=s;else if(S==21)X=s;\r\n\telse if(S==48)I=s;else if(S==53)ax=s;else if(S==35)a3=s;else if(S==62)R=s;else if(S==101)ai=s;else if(S==109)aa=s;\r\n\telse if(S==84)ap=s;else if(S==106)ah=s;else if(S==107)ae=s;else if(S==108)aD=s;else if(S==102)al=s;else if(S==104)i=s;\r\n\telse if(S==105)aE=s;else{var F=S<0?-S:S,D=F&65280,_=0;if(F&az){if(F&H){_=s&65535;_+=(F&255)<<16}else{_=s&65535}}if((F&V)==V){if(T==null){T=[];\r\n\tfor(var M=0;M<4;M++)T[M]=new Int16Array((u>>>1)*(X>>>1));B=new Int16Array((u>>>1)*(X>>>1));C=new Int16Array(1024);\r\n\tfor(var M=0;M<1024;M++){var aG=M-512,p=Math.abs(aG),r=Math.floor(768*p*p*p/(255*255*255))+p;C[M]=Math.sign(aG)*r}k=new Uint16Array(4096);\r\n\tvar aA=(1<<16)-1;for(var M=0;M<4096;M++){var at=M,a1=aA*(Math.pow(113,at/4095)-1)/112;k[M]=Math.min(a1,aA)}}var w=T[R],v=m(u,1+P[I]),N=m(X,1+P[I]);\r\n\tif(I==0){for(var b=0;b<N;b++)for(var G=0;G<v;G++){var c=E+(b*v+G)*2;w[b*(u>>>1)+G]=t[c]<<8|t[c+1]}}else{var a7=[t,E*8],a4=[],ay=0,aw=v*N,f=[0,0],Q=0,s=0;\r\n\twhile(ay<aw){ag(a7,f);Q=f[0];s=f[1];while(Q>0){a4[ay++]=s;Q--}}var l=(I-1)%3,aF=l!=1?v:0,a2=l!=0?N:0;\r\n\tfor(var b=0;b<N;b++){var af=(b+a2)*(u>>>1)+aF,au=b*v;for(var G=0;G<v;G++)w[af+G]=C[a4[au+G]+512]*ax}if(l==2){var i=u>>>1,an=v*2,a9=N*2;\r\n\tfor(var b=0;b<N;b++){for(var G=0;G<an;G++){var M=b*2*i+G,a=b*i+G,e=N*i+a;if(b==0)O(w,B,M,e,a,i);else if(b==N-1)y(w,B,M,e,a,i);\r\n\telse J(w,B,M,e,a,i)}}var Z=w;w=B;B=Z;for(var b=0;b<a9;b++){for(var G=0;G<v;G++){var M=b*i+2*G,a=b*i+G,e=v+a;\r\n\tif(G==0)O(w,B,M,e,a,1);else if(G==v-1)y(w,B,M,e,a,1);else J(w,B,M,e,a,1)}}var Z=w;w=B;B=Z;var aC=[],aB=2-~~((I-1)/3);\r\n\tfor(var K=0;K<3;K++)aC[K]=aa>>14-K*2&3;var a6=aC[aB];if(a6!=0)for(var b=0;b<a9;b++)for(var G=0;G<an;\r\n\tG++){var M=b*i+G;w[M]=w[M]<<a6}}}if(I==9&&R==3){var a8=T[0],ab=T[1],aq=T[2],as=T[3];for(var b=0;b<X;\r\n\tb+=2)for(var G=0;G<u;G+=2){var U=b*u+G,c=(b>>>1)*(u>>>1)+(G>>>1),z=a8[c],ao=ab[c]-2048,ak=aq[c]-2048,ad=as[c]-2048,aj=(ao<<1)+z,a0=(ak<<1)+z,aH=z+ad,am=z-ad;\r\n\tif(a5){L[U]=q(aH);L[U+1]=q(a0);L[U+u]=q(aj);L[U+u+1]=q(am)}else{L[U]=q(aj);L[U+1]=q(aH);L[U+u]=q(am);\r\n\tL[U+u+1]=q(a0)}}}E+=_*4}else if(F==16388){E+=_*4}else if(D==8192||D==8448||D==9216){}else throw F.toString(16)}}console.log(Date.now()-W)}return av}()\r\n\t\r\n\t\r\n\t\r\n\tUTIF.decode._decodeLogLuv32 = function(img, data, off, len, tgt, toff) {\r\n\t\tvar w = img.width, qw=w*4;\r\n\t\tvar io = 0, out = new Uint8Array(qw);\r\n\t\t\r\n\t\twhile(io<len) {\r\n\t\t\tvar oo=0;\r\n\t\t\twhile(oo<qw) {\r\n\t\t\t\tvar c = data[off+io]; io++;\r\n\t\t\t\tif(c<128) {       for(var j=0; j<c; j++) out[oo+j] = data[off+io+j];  oo+=c;  io+=c;  }\r\n\t\t\t\telse {  c=c-126;  for(var j=0; j<c; j++) out[oo+j] = data[off+io  ];  oo+=c;  io++ ;  }\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tfor(var x=0; x<w; x++) {\r\n\t\t\t\ttgt[toff+0] = out[x];\r\n\t\t\t\ttgt[toff+1] = out[x+w];\r\n\t\t\t\ttgt[toff+2] = out[x+w*2];\r\n\t\t\t\ttgt[toff+4] = out[x+w*3];\r\n\t\t\t\ttoff+=6;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tUTIF.decode._ljpeg_diff = function(data, prm, huff) {\r\n\t\tvar getbithuff   = UTIF.decode._getbithuff;\r\n\t\tvar len, diff;\r\n\t\tlen  = getbithuff(data, prm, huff[0], huff);\r\n\t\tdiff = getbithuff(data, prm, len, 0);\r\n\t\tif ((diff & (1 << (len-1))) == 0)  diff -= (1 << len) - 1;\r\n\t\treturn diff;\r\n\t}\r\n\tUTIF.decode._decodeARW = function(img, inp, off, src_length, tgt, toff) {\r\n\t\tvar raw_width = img[\"t256\"][0], height=img[\"t257\"][0], tiff_bps=img[\"t258\"][0];\r\n\t\tvar bin=(img.isLE ? UTIF._binLE : UTIF._binBE);\r\n\t\t//console.log(raw_width, height, tiff_bps, raw_width*height, src_length);\r\n\t\tvar arw2 = (raw_width*height == src_length) || (raw_width*height*1.5 == src_length);\r\n\t\t//arw2 = true;\r\n\t\t//console.log(\"ARW2: \", arw2, raw_width*height, src_length, tgt.length);\r\n\t\tif(!arw2) {  //\"sony_arw_load_raw\"; // not arw2\r\n\t\t\theight+=8;\r\n\t\t\tvar prm = [off,0,0,0];\r\n\t\t\tvar huff = new Uint16Array(32770);\r\n\t\t\tvar tab = [ 0xf11,0xf10,0xe0f,0xd0e,0xc0d,0xb0c,0xa0b,0x90a,0x809,\r\n\t\t\t\t0x708,0x607,0x506,0x405,0x304,0x303,0x300,0x202,0x201 ];\r\n\t\t\tvar i, c, n, col, row, sum=0;\r\n\t\t\tvar ljpeg_diff = UTIF.decode._ljpeg_diff;\r\n\t\r\n\t\t\thuff[0] = 15;\r\n\t\t\tfor (n=i=0; i < 18; i++) {\r\n\t\t\t\tvar lim = 32768 >>> (tab[i] >>> 8);\r\n\t\t\t\tfor(var c=0; c<lim; c++) huff[++n] = tab[i];\r\n\t\t\t}\r\n\t\t\tfor (col = raw_width; col--; )\r\n\t\t\t\tfor (row=0; row < height+1; row+=2) {\r\n\t\t\t\t\tif (row == height) row = 1;\r\n\t\t\t\t\tsum += ljpeg_diff(inp, prm, huff);\r\n\t\t\t\t\tif (row < height) {\r\n\t\t\t\t\t\tvar clr =  (sum)&4095;\r\n\t\t\t\t\t\tUTIF.decode._putsF(tgt, (row*raw_width+col)*tiff_bps, clr<<(16-tiff_bps));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(raw_width*height*1.5==src_length) {\r\n\t\t\t//console.log(\"weird compression\");\r\n\t\t\tfor(var i=0; i<src_length; i+=3) {  var b0=inp[off+i+0], b1=inp[off+i+1], b2=inp[off+i+2];  \r\n\t\t\t\ttgt[toff+i]=(b1<<4)|(b0>>>4);  tgt[toff+i+1]=(b0<<4)|(b2>>>4);  tgt[toff+i+2]=(b2<<4)|(b1>>>4);  }\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tvar pix = new Uint16Array(16);\r\n\t\tvar row, col, val, max, min, imax, imin, sh, bit, i,    dp;\r\n\t\t\r\n\t\tvar data = new Uint8Array(raw_width+1);\r\n\t\tfor (row=0; row < height; row++) {\r\n\t\t\t//fread (data, 1, raw_width, ifp);\r\n\t\t\tfor(var j=0; j<raw_width; j++) data[j]=inp[off++];\r\n\t\t\tfor (dp=0, col=0; col < raw_width-30; dp+=16) {\r\n\t\t\t\tmax  = 0x7ff & (val = bin.readUint(data,dp));\r\n\t\t\t\tmin  = 0x7ff & (val >>> 11);\r\n\t\t\t\timax = 0x0f & (val >>> 22);\r\n\t\t\t\timin = 0x0f & (val >>> 26);\r\n\t\t\t\tfor (sh=0; sh < 4 && 0x80 << sh <= max-min; sh++);\r\n\t\t\t\tfor (bit=30, i=0; i < 16; i++)\r\n\t\t\t\t\tif      (i == imax) pix[i] = max;\r\n\t\t\t\t\telse if (i == imin) pix[i] = min;\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpix[i] = ((bin.readUshort(data, dp+(bit >> 3)) >>> (bit & 7) & 0x7f) << sh) + min;\r\n\t\t\t\t\t\tif (pix[i] > 0x7ff) pix[i] = 0x7ff;\r\n\t\t\t\t\t\tbit += 7;\r\n\t\t\t\t\t}\r\n\t\t\t\tfor (i=0; i < 16; i++, col+=2) {\r\n\t\t\t\t\t//RAW(row,col) = curve[pix[i] << 1] >> 2;\r\n\t\t\t\t\tvar clr =  pix[i]<<1;   //clr = 0xffff;\r\n\t\t\t\t\tUTIF.decode._putsF(tgt, (row*raw_width+col)*tiff_bps, clr<<(16-tiff_bps));\r\n\t\t\t\t}\r\n\t\t\t\tcol -= col & 1 ? 1:31;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tUTIF.decode._decodeNikon = function(img,imgs, data, off, src_length, tgt, toff)\r\n\t{\r\n\t\tvar nikon_tree = [\r\n\t\t[ 0, 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0,\t/* 12-bit lossy */\r\n\t\t  5,4,3,6,2,7,1,0,8,9,11,10,12 ],\r\n\t\t[ 0, 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0,\t/* 12-bit lossy after split */\r\n\t\t  0x39,0x5a,0x38,0x27,0x16,5,4,3,2,1,0,11,12,12 ],\r\n\t\t[ 0, 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0,  /* 12-bit lossless */\r\n\t\t  5,4,6,3,7,2,8,1,9,0,10,11,12 ],\r\n\t\t[ 0, 0,1,4,3,1,1,1,1,1,2,0,0,0,0,0,0,\t/* 14-bit lossy */\r\n\t\t  5,6,4,7,8,3,9,2,1,0,10,11,12,13,14 ],\r\n\t\t[ 0, 0,1,5,1,1,1,1,1,1,1,2,0,0,0,0,0,\t/* 14-bit lossy after split */\r\n\t\t  8,0x5c,0x4b,0x3a,0x29,7,6,5,4,3,2,1,0,13,14 ],\r\n\t\t[ 0, 0,1,4,2,2,3,1,2,0,0,0,0,0,0,0,0,\t/* 14-bit lossless */\r\n\t\t  7,6,8,5,9,4,10,3,11,12,2,0,1,13,14 ] ];\r\n\t\t  \r\n\t\tvar raw_width = img[\"t256\"][0], height=img[\"t257\"][0], tiff_bps=img[\"t258\"][0];\r\n\t\t\r\n\t\tvar tree = 0, split = 0;\r\n\t\tvar make_decoder = UTIF.decode._make_decoder;\r\n\t\tvar getbithuff   = UTIF.decode._getbithuff;\r\n\t\t\r\n\t\tvar mn = imgs[0].exifIFD.makerNote, md = mn[\"t150\"]?mn[\"t150\"]:mn[\"t140\"], mdo=0;  //console.log(mn,md);\r\n\t\t//console.log(md[0].toString(16), md[1].toString(16), tiff_bps);\r\n\t\tvar ver0 = md[mdo++], ver1 = md[mdo++];\r\n\t\tif (ver0 == 0x49 || ver1 == 0x58)  mdo+=2110;\r\n\t\tif (ver0 == 0x46) tree = 2;\r\n\t\tif (tiff_bps == 14) tree += 3;\r\n\t\t\r\n\t\tvar vpred = [[0,0],[0,0]], bin=(img.isLE ? UTIF._binLE : UTIF._binBE);\r\n\t\tfor(var i=0; i<2; i++) for(var j=0; j<2; j++) {  vpred[i][j] = bin.readShort(md,mdo);  mdo+=2;   }  // not sure here ... [i][j] or [j][i]\r\n\t\t//console.log(vpred);\r\n\t\t\r\n\t\t\r\n\t\tvar max = 1 << tiff_bps & 0x7fff, step=0;\r\n\t\tvar csize = bin.readShort(md,mdo);  mdo+=2;\r\n\t\tif (csize > 1) step = Math.floor(max / (csize-1));\r\n\t\tif (ver0 == 0x44 && ver1 == 0x20 && step > 0)  split = bin.readShort(md,562);\r\n\t\t\r\n\t\t\r\n\t\tvar i;\r\n\t\tvar row, col;\r\n\t\tvar len, shl, diff;\r\n\t\tvar min_v = 0;\r\n\t\tvar hpred = [0,0];\r\n\t\tvar huff = make_decoder(nikon_tree[tree]);\r\n\t\t\r\n\t\t//var g_input_offset=0, bitbuf=0, vbits=0, reset=0;\r\n\t\tvar prm = [off,0,0,0];\r\n\t\t//console.log(split);  split = 170;\r\n\t\t\r\n\t\tfor (min_v=row=0; row < height; row++) {\r\n\t\t\tif (split && row == split) {\r\n\t\t\t\t//free (huff);\r\n\t\t\t\thuff = make_decoder (nikon_tree[tree+1]);\r\n\t\t\t\t//max_v += (min_v = 16) << 1;\r\n\t\t\t}\r\n\t\t\tfor (col=0; col < raw_width; col++) {\r\n\t\t\t\ti = getbithuff(data,prm,huff[0],huff);\r\n\t\t\t\tlen = i  & 15;\r\n\t\t\t\tshl = i >>> 4;\r\n\t\t\t\tdiff = (((getbithuff(data,prm,len-shl,0) << 1) + 1) << shl) >>> 1;\r\n\t\t\t\tif ((diff & (1 << (len-1))) == 0)\r\n\t\t\t\t\tdiff -= (1 << len) - (shl==0?1:0);\r\n\t\t\t\tif (col < 2) hpred[col] = vpred[row & 1][col] += diff;\r\n\t\t\t\telse         hpred[col & 1] += diff;\r\n\t\t\t\t\r\n\t\t\t\tvar clr = Math.min(Math.max(hpred[col & 1],0),(1<<tiff_bps)-1);\r\n\t\t\t\tvar bti = (row*raw_width+col)*tiff_bps;  \r\n\t\t\t\tUTIF.decode._putsF(tgt, bti, clr<<(16-tiff_bps));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t// put 16 bits\r\n\tUTIF.decode._putsF= function(dt, pos, val) {  val = val<<(8-(pos&7));  var o=(pos>>>3);  dt[o]|=val>>>16;  dt[o+1]|=val>>>8;  dt[o+2]|=val;  }\r\n\t\r\n\t\r\n\tUTIF.decode._getbithuff = function(data,prm,nbits, huff) {\r\n\t\tvar zero_after_ff = 0;\r\n\t\tvar get_byte = UTIF.decode._get_byte;\r\n\t\tvar c;\r\n\t  \r\n\t\tvar off=prm[0], bitbuf=prm[1], vbits=prm[2], reset=prm[3];\r\n\t\r\n\t\t//if (nbits > 25) return 0;\r\n\t\t//if (nbits <  0) return bitbuf = vbits = reset = 0;\r\n\t\tif (nbits == 0 || vbits < 0) return 0; \r\n\t\twhile (!reset && vbits < nbits && (c = data[off++]) != -1 &&\r\n\t\t\t!(reset = zero_after_ff && c == 0xff && data[off++])) {\r\n\t\t\t//console.log(\"byte read into c\");\r\n\t\t\tbitbuf = (bitbuf << 8) + c;\r\n\t\t\tvbits += 8;\r\n\t\t} \r\n\t\tc = (bitbuf << (32-vbits)) >>> (32-nbits);\r\n\t\tif (huff) {\r\n\t\t\tvbits -= huff[c+1] >>> 8;  //console.log(c, huff[c]>>8);\r\n\t\t\tc =  huff[c+1]&255;\r\n\t\t} else\r\n\t\t\tvbits -= nbits;\r\n\t\tif (vbits < 0) throw \"e\";\r\n\t  \r\n\t\tprm[0]=off;  prm[1]=bitbuf;  prm[2]=vbits;  prm[3]=reset;\r\n\t  \r\n\t\treturn c;\r\n\t}\r\n\t\r\n\tUTIF.decode._make_decoder = function(source) {\r\n\t\tvar max, len, h, i, j;\r\n\t\tvar huff = [];\r\n\t\r\n\t\tfor (max=16; max!=0 && !source[max]; max--);\r\n\t\tvar si=17;\r\n\t\t\r\n\t\thuff[0] = max;\r\n\t\tfor (h=len=1; len <= max; len++)\r\n\t\t\tfor (i=0; i < source[len]; i++, ++si)\r\n\t\t\t\tfor (j=0; j < 1 << (max-len); j++)\r\n\t\t\t\t\tif (h <= 1 << max)\r\n\t\t\t\t\t\thuff[h++] = (len << 8) | source[si];\r\n\t\treturn huff;\r\n\t}\r\n\t\r\n\tUTIF.decode._decodeNewJPEG = function(img, data, off, len, tgt, toff)\r\n\t{\r\n\t\tlen = Math.min(len, data.length-off);\r\n\t\tvar tables = img[\"t347\"], tlen = tables ? tables.length : 0, buff = new Uint8Array(tlen + len);\r\n\t\t\r\n\t\tif (tables) {\r\n\t\t\tvar SOI = 216, EOI = 217, boff = 0;\r\n\t\t\tfor (var i=0; i<(tlen-1); i++)\r\n\t\t\t{\r\n\t\t\t\t// Skip EOI marker from JPEGTables\r\n\t\t\t\tif (tables[i]==255 && tables[i+1]==EOI) break;\r\n\t\t\t\tbuff[boff++] = tables[i];\r\n\t\t\t}\r\n\t\r\n\t\t\t// Skip SOI marker from data\r\n\t\t\tvar byte1 = data[off], byte2 = data[off + 1];\r\n\t\t\tif (byte1!=255 || byte2!=SOI)\r\n\t\t\t{\r\n\t\t\t\tbuff[boff++] = byte1;\r\n\t\t\t\tbuff[boff++] = byte2;\r\n\t\t\t}\r\n\t\t\tfor (var i=2; i<len; i++) buff[boff++] = data[off+i];\r\n\t\t}\r\n\t\telse for (var i=0; i<len; i++) buff[i] = data[off+i];\r\n\t\r\n\t\tif(img[\"t262\"][0]==32803 || (img[\"t259\"][0]==7 && img[\"t262\"][0]==34892)) // lossless JPEG (used in DNG files)\r\n\t\t{\r\n\t\t\tvar bps = img[\"t258\"][0];//, dcdr = new LosslessJpegDecoder();\r\n\t\t\t//var time = Date.now();\r\n\t\t\tvar out = UTIF.LosslessJpegDecode(buff), olen=out.length;  //console.log(olen);\r\n\t\t\t//var out = ULLJPG(buff), olen=out.length;  //console.log(olen);\r\n\t\t\t//console.log(Date.now()-time);\r\n\t\t\t\r\n\t\t\tif(false) {}\r\n\t\t\telse if(bps==16) {\r\n\t\t\t\tif(img.isLE) for(var i=0; i<olen; i++ ) {  tgt[toff+(i<<1)] = (out[i]&255);  tgt[toff+(i<<1)+1] = (out[i]>>>8);  }\r\n\t\t\t\telse         for(var i=0; i<olen; i++ ) {  tgt[toff+(i<<1)] = (out[i]>>>8);  tgt[toff+(i<<1)+1] = (out[i]&255);  }\r\n\t\t\t}\r\n\t\t\telse if(bps==14 || bps==12 || bps==10) {  // 4 * 14 == 56 == 7 * 8\r\n\t\t\t\tvar rst = 16-bps;\r\n\t\t\t\tfor(var i=0; i<olen; i++) UTIF.decode._putsF(tgt, i*bps, out[i]<<rst);\r\n\t\t\t}\r\n\t\t\telse if(bps==8) {\r\n\t\t\t\tfor(var i=0; i<olen; i++) tgt[toff+i]=out[i];\r\n\t\t\t}\r\n\t\t\telse throw new Error(\"unsupported bit depth \"+bps);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar parser = new UTIF.JpegDecoder();  parser.parse(buff);\r\n\t\t\tvar decoded = parser.getData({\"width\":parser.width,\"height\":parser.height,\"forceRGB\":true,\"isSourcePDF\":false});\r\n\t\t\tfor (var i=0; i<decoded.length; i++) tgt[toff + i] = decoded[i];\r\n\t\t}\r\n\t\r\n\t\t// PhotometricInterpretation is 6 (YCbCr) for JPEG, but after decoding we populate data in\r\n\t\t// RGB format, so updating the tag value\r\n\t\tif(img[\"t262\"][0] == 6)  img[\"t262\"][0] = 2;\r\n\t}\r\n\t\r\n\tUTIF.decode._decodeOldJPEGInit = function(img, data, off, len)\r\n\t{\r\n\t\tvar SOI = 216, EOI = 217, DQT = 219, DHT = 196, DRI = 221, SOF0 = 192, SOS = 218;\r\n\t\tvar joff = 0, soff = 0, tables, sosMarker, isTiled = false, i, j, k;\r\n\t\tvar jpgIchgFmt    = img[\"t513\"], jifoff = jpgIchgFmt ? jpgIchgFmt[0] : 0;\r\n\t\tvar jpgIchgFmtLen = img[\"t514\"], jiflen = jpgIchgFmtLen ? jpgIchgFmtLen[0] : 0;\r\n\t\tvar soffTag       = img[\"t324\"] || img[\"t273\"] || jpgIchgFmt;\r\n\t\tvar ycbcrss       = img[\"t530\"], ssx = 0, ssy = 0;\r\n\t\tvar spp           = img[\"t277\"]?img[\"t277\"][0]:1;\r\n\t\tvar jpgresint     = img[\"t515\"];\r\n\t\r\n\t\tif(soffTag)\r\n\t\t{\r\n\t\t\tsoff = soffTag[0];\r\n\t\t\tisTiled = (soffTag.length > 1);\r\n\t\t}\r\n\t\r\n\t\tif(!isTiled)\r\n\t\t{\r\n\t\t\tif(data[off]==255 && data[off+1]==SOI) return { jpegOffset: off };\r\n\t\t\tif(jpgIchgFmt!=null)\r\n\t\t\t{\r\n\t\t\t\tif(data[off+jifoff]==255 && data[off+jifoff+1]==SOI) joff = off+jifoff;\r\n\t\t\t\telse log(\"JPEGInterchangeFormat does not point to SOI\");\r\n\t\r\n\t\t\t\tif(jpgIchgFmtLen==null) log(\"JPEGInterchangeFormatLength field is missing\");\r\n\t\t\t\telse if(jifoff >= soff || (jifoff+jiflen) <= soff) log(\"JPEGInterchangeFormatLength field value is invalid\");\r\n\t\r\n\t\t\t\tif(joff != null) return { jpegOffset: joff };\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\t\tif(ycbcrss!=null) {  ssx = ycbcrss[0];  ssy = ycbcrss[1];  }\r\n\t\r\n\t\tif(jpgIchgFmt!=null)\r\n\t\t\tif(jpgIchgFmtLen!=null)\r\n\t\t\t\tif(jiflen >= 2 && (jifoff+jiflen) <= soff)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(data[off+jifoff+jiflen-2]==255 && data[off+jifoff+jiflen-1]==SOI) tables = new Uint8Array(jiflen-2);\r\n\t\t\t\t\telse tables = new Uint8Array(jiflen);\r\n\t\r\n\t\t\t\t\tfor(i=0; i<tables.length; i++) tables[i] = data[off+jifoff+i];\r\n\t\t\t\t\tlog(\"Incorrect JPEG interchange format: using JPEGInterchangeFormat offset to derive tables\");\r\n\t\t\t\t}\r\n\t\t\t\telse log(\"JPEGInterchangeFormat+JPEGInterchangeFormatLength > offset to first strip or tile\");\r\n\t\r\n\t\tif(tables == null)\r\n\t\t{\r\n\t\t\tvar ooff = 0, out = [];\r\n\t\t\tout[ooff++] = 255; out[ooff++] = SOI;\r\n\t\r\n\t\t\tvar qtables = img[\"t519\"];\r\n\t\t\tif(qtables==null) throw new Error(\"JPEGQTables tag is missing\");\r\n\t\t\tfor(i=0; i<qtables.length; i++)\r\n\t\t\t{\r\n\t\t\t\tout[ooff++] = 255; out[ooff++] = DQT; out[ooff++] = 0; out[ooff++] = 67; out[ooff++] = i;\r\n\t\t\t\tfor(j=0; j<64; j++) out[ooff++] = data[off+qtables[i]+j];\r\n\t\t\t}\r\n\t\r\n\t\t\tfor(k=0; k<2; k++)\r\n\t\t\t{\r\n\t\t\t\tvar htables = img[(k == 0) ? \"t520\" : \"t521\"];\r\n\t\t\t\tif(htables==null) throw new Error(((k == 0) ? \"JPEGDCTables\" : \"JPEGACTables\") + \" tag is missing\");\r\n\t\t\t\tfor(i=0; i<htables.length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tout[ooff++] = 255; out[ooff++] = DHT;\r\n\t\t\t\t\t//out[ooff++] = 0; out[ooff++] = 67; out[ooff++] = i;\r\n\t\t\t\t\tvar nc = 19;\r\n\t\t\t\t\tfor(j=0; j<16; j++) nc += data[off+htables[i]+j];\r\n\t\r\n\t\t\t\t\tout[ooff++] = (nc >>> 8); out[ooff++] = nc & 255;\r\n\t\t\t\t\tout[ooff++] = (i | (k << 4));\r\n\t\t\t\t\tfor(j=0; j<16; j++) out[ooff++] = data[off+htables[i]+j];\r\n\t\t\t\t\tfor(j=0; j<nc; j++) out[ooff++] = data[off+htables[i]+16+j];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\r\n\t\t\tout[ooff++] = 255; out[ooff++] = SOF0;\r\n\t\t\tout[ooff++] = 0;  out[ooff++] = 8 + 3*spp;  out[ooff++] = 8;\r\n\t\t\tout[ooff++] = (img.height >>> 8) & 255;  out[ooff++] = img.height & 255;\r\n\t\t\tout[ooff++] = (img.width  >>> 8) & 255;  out[ooff++] = img.width  & 255;\r\n\t\t\tout[ooff++] = spp;\r\n\t\t\tif(spp==1) {  out[ooff++] = 1;  out[ooff++] = 17;  out[ooff++] = 0;  }\r\n\t\t\telse for(i=0; i<3; i++)\r\n\t\t\t{\r\n\t\t\t\tout[ooff++] = i + 1;\r\n\t\t\t\tout[ooff++] = (i != 0) ? 17 : (((ssx & 15) << 4) | (ssy & 15));\r\n\t\t\t\tout[ooff++] = i;\r\n\t\t\t}\r\n\t\r\n\t\t\tif(jpgresint!=null && jpgresint[0]!=0)\r\n\t\t\t{\r\n\t\t\t\tout[ooff++] = 255;  out[ooff++] = DRI;  out[ooff++] = 0;  out[ooff++] = 4;\r\n\t\t\t\tout[ooff++] = (jpgresint[0] >>> 8) & 255;\r\n\t\t\t\tout[ooff++] = jpgresint[0] & 255;\r\n\t\t\t}\r\n\t\r\n\t\t\ttables = new Uint8Array(out);\r\n\t\t}\r\n\t\r\n\t\tvar sofpos = -1;\r\n\t\ti = 0;\r\n\t\twhile(i < (tables.length - 1)) {\r\n\t\t\tif(tables[i]==255 && tables[i+1]==SOF0) {  sofpos = i; break;  }\r\n\t\t\ti++;\r\n\t\t}\r\n\t\r\n\t\tif(sofpos == -1)\r\n\t\t{\r\n\t\t\tvar tmptab = new Uint8Array(tables.length + 10 + 3*spp);\r\n\t\t\ttmptab.set(tables);\r\n\t\t\tvar tmpoff = tables.length;\r\n\t\t\tsofpos = tables.length;\r\n\t\t\ttables = tmptab;\r\n\t\r\n\t\t\ttables[tmpoff++] = 255; tables[tmpoff++] = SOF0;\r\n\t\t\ttables[tmpoff++] = 0;  tables[tmpoff++] = 8 + 3*spp;  tables[tmpoff++] = 8;\r\n\t\t\ttables[tmpoff++] = (img.height >>> 8) & 255;  tables[tmpoff++] = img.height & 255;\r\n\t\t\ttables[tmpoff++] = (img.width  >>> 8) & 255;  tables[tmpoff++] = img.width  & 255;\r\n\t\t\ttables[tmpoff++] = spp;\r\n\t\t\tif(spp==1) {  tables[tmpoff++] = 1;  tables[tmpoff++] = 17;  tables[tmpoff++] = 0;  }\r\n\t\t\telse for(i=0; i<3; i++)\r\n\t\t\t{\r\n\t\t\t\ttables[tmpoff++] = i + 1;\r\n\t\t\t\ttables[tmpoff++] = (i != 0) ? 17 : (((ssx & 15) << 4) | (ssy & 15));\r\n\t\t\t\ttables[tmpoff++] = i;\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\t\tif(data[soff]==255 && data[soff+1]==SOS)\r\n\t\t{\r\n\t\t\tvar soslen = (data[soff+2]<<8) | data[soff+3];\r\n\t\t\tsosMarker = new Uint8Array(soslen+2);\r\n\t\t\tsosMarker[0] = data[soff];  sosMarker[1] = data[soff+1]; sosMarker[2] = data[soff+2];  sosMarker[3] = data[soff+3];\r\n\t\t\tfor(i=0; i<(soslen-2); i++) sosMarker[i+4] = data[soff+i+4];\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tsosMarker = new Uint8Array(2 + 6 + 2*spp);\r\n\t\t\tvar sosoff = 0;\r\n\t\t\tsosMarker[sosoff++] = 255;  sosMarker[sosoff++] = SOS;\r\n\t\t\tsosMarker[sosoff++] = 0;  sosMarker[sosoff++] = 6 + 2*spp;  sosMarker[sosoff++] = spp;\r\n\t\t\tif(spp==1) {  sosMarker[sosoff++] = 1;  sosMarker[sosoff++] = 0;  }\r\n\t\t\telse for(i=0; i<3; i++)\r\n\t\t\t{\r\n\t\t\t\tsosMarker[sosoff++] = i+1;  sosMarker[sosoff++] = (i << 4) | i;\r\n\t\t\t}\r\n\t\t\tsosMarker[sosoff++] = 0;  sosMarker[sosoff++] = 63;  sosMarker[sosoff++] = 0;\r\n\t\t}\r\n\t\r\n\t\treturn { jpegOffset: off, tables: tables, sosMarker: sosMarker, sofPosition: sofpos };\r\n\t}\r\n\t\r\n\tUTIF.decode._decodeOldJPEG = function(img, data, off, len, tgt, toff)\r\n\t{\r\n\t\tvar i, dlen, tlen, buff, buffoff;\r\n\t\tvar jpegData = UTIF.decode._decodeOldJPEGInit(img, data, off, len);\r\n\t\r\n\t\tif(jpegData.jpegOffset!=null)\r\n\t\t{\r\n\t\t\tdlen = off+len-jpegData.jpegOffset;\r\n\t\t\tbuff = new Uint8Array(dlen);\r\n\t\t\tfor(i=0; i<dlen; i++) buff[i] = data[jpegData.jpegOffset+i];\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\ttlen = jpegData.tables.length;\r\n\t\t\tbuff = new Uint8Array(tlen + jpegData.sosMarker.length + len + 2);\r\n\t\t\tbuff.set(jpegData.tables);\r\n\t\t\tbuffoff = tlen;\r\n\t\r\n\t\t\tbuff[jpegData.sofPosition+5] = (img.height >>> 8) & 255;  buff[jpegData.sofPosition+6] = img.height & 255;\r\n\t\t\tbuff[jpegData.sofPosition+7] = (img.width  >>> 8) & 255;  buff[jpegData.sofPosition+8] = img.width  & 255;\r\n\t\r\n\t\t\tif(data[off]!=255 || data[off+1]!=SOS)\r\n\t\t\t{\r\n\t\t\t\tbuff.set(jpegData.sosMarker, buffoff);\r\n\t\t\t\tbuffoff += sosMarker.length;\r\n\t\t\t}\r\n\t\t\tfor(i=0; i<len; i++) buff[buffoff++] = data[off+i];\r\n\t\t\tbuff[buffoff++] = 255;  buff[buffoff++] = EOI;\r\n\t\t}\r\n\t\r\n\t\tvar parser = new UTIF.JpegDecoder();  parser.parse(buff);\r\n\t\tvar decoded = parser.getData({\"width\":parser.width,\"height\":parser.height,\"forceRGB\":true,\"isSourcePDF\":false});\r\n\t\tfor (var i=0; i<decoded.length; i++) tgt[toff + i] = decoded[i];\r\n\t\r\n\t\t// PhotometricInterpretation is 6 (YCbCr) for JPEG, but after decoding we populate data in\r\n\t\t// RGB format, so updating the tag value\r\n\t\tif(img[\"t262\"] && img[\"t262\"][0] == 6)  img[\"t262\"][0] = 2;\r\n\t}\r\n\t\r\n\tUTIF.decode._decodePackBits = function(data, off, len, tgt, toff)\r\n\t{\r\n\t\tvar sa = new Int8Array(data.buffer), ta = new Int8Array(tgt.buffer), lim = off+len;\r\n\t\twhile(off<lim)\r\n\t\t{\r\n\t\t\tvar n = sa[off];  off++;\r\n\t\t\tif(n>=0  && n<128)    for(var i=0; i< n+1; i++) {  ta[toff]=sa[off];  toff++;  off++;   }\r\n\t\t\tif(n>=-127 && n<0) {  for(var i=0; i<-n+1; i++) {  ta[toff]=sa[off];  toff++;           }  off++;  }\r\n\t\t}\r\n\t\treturn toff;\r\n\t}\r\n\t\r\n\tUTIF.decode._decodeThunder = function(data, off, len, tgt, toff)\r\n\t{\r\n\t\tvar d2 = [ 0, 1, 0, -1 ],  d3 = [ 0, 1, 2, 3, 0, -3, -2, -1 ];\r\n\t\tvar lim = off+len, qoff = toff*2, px = 0;\r\n\t\twhile(off<lim)\r\n\t\t{\r\n\t\t\tvar b = data[off], msk = (b>>>6), n = (b&63);  off++;\r\n\t\t\tif(msk==3) { px=(n&15);  tgt[qoff>>>1] |= (px<<(4*(1-qoff&1)));  qoff++;   }\r\n\t\t\tif(msk==0) for(var i=0; i<n; i++) {  tgt[qoff>>>1] |= (px<<(4*(1-qoff&1)));  qoff++;   }\r\n\t\t\tif(msk==2) for(var i=0; i<2; i++) {  var d=(n>>>(3*(1-i)))&7;  if(d!=4) { px+=d3[d];  tgt[qoff>>>1] |= (px<<(4*(1-qoff&1)));  qoff++; }  }\r\n\t\t\tif(msk==1) for(var i=0; i<3; i++) {  var d=(n>>>(2*(2-i)))&3;  if(d!=2) { px+=d2[d];  tgt[qoff>>>1] |= (px<<(4*(1-qoff&1)));  qoff++; }  }\r\n\t\t}\r\n\t}\r\n\t\r\n\tUTIF.decode._dmap = { \"1\":0,\"011\":1,\"000011\":2,\"0000011\":3, \"010\":-1,\"000010\":-2,\"0000010\":-3  };\r\n\tUTIF.decode._lens = ( function()\r\n\t{\r\n\t\tvar addKeys = function(lens, arr, i0, inc) {  for(var i=0; i<arr.length; i++) lens[arr[i]] = i0 + i*inc;  }\r\n\t\r\n\t\tvar termW = \"00110101,000111,0111,1000,1011,1100,1110,1111,10011,10100,00111,01000,001000,000011,110100,110101,\" // 15\r\n\t\t+ \"101010,101011,0100111,0001100,0001000,0010111,0000011,0000100,0101000,0101011,0010011,0100100,0011000,00000010,00000011,00011010,\" // 31\r\n\t\t+ \"00011011,00010010,00010011,00010100,00010101,00010110,00010111,00101000,00101001,00101010,00101011,00101100,00101101,00000100,00000101,00001010,\" // 47\r\n\t\t+ \"00001011,01010010,01010011,01010100,01010101,00100100,00100101,01011000,01011001,01011010,01011011,01001010,01001011,00110010,00110011,00110100\";\r\n\t\r\n\t\tvar termB = \"0000110111,010,11,10,011,0011,0010,00011,000101,000100,0000100,0000101,0000111,00000100,00000111,000011000,\" // 15\r\n\t\t+ \"0000010111,0000011000,0000001000,00001100111,00001101000,00001101100,00000110111,00000101000,00000010111,00000011000,000011001010,000011001011,000011001100,000011001101,000001101000,000001101001,\" // 31\r\n\t\t+ \"000001101010,000001101011,000011010010,000011010011,000011010100,000011010101,000011010110,000011010111,000001101100,000001101101,000011011010,000011011011,000001010100,000001010101,000001010110,000001010111,\" // 47\r\n\t\t+ \"000001100100,000001100101,000001010010,000001010011,000000100100,000000110111,000000111000,000000100111,000000101000,000001011000,000001011001,000000101011,000000101100,000001011010,000001100110,000001100111\";\r\n\t\r\n\t\tvar makeW = \"11011,10010,010111,0110111,00110110,00110111,01100100,01100101,01101000,01100111,011001100,011001101,011010010,011010011,011010100,011010101,011010110,\"\r\n\t\t+ \"011010111,011011000,011011001,011011010,011011011,010011000,010011001,010011010,011000,010011011\";\r\n\t\r\n\t\tvar makeB = \"0000001111,000011001000,000011001001,000001011011,000000110011,000000110100,000000110101,0000001101100,0000001101101,0000001001010,0000001001011,0000001001100,\"\r\n\t\t+ \"0000001001101,0000001110010,0000001110011,0000001110100,0000001110101,0000001110110,0000001110111,0000001010010,0000001010011,0000001010100,0000001010101,0000001011010,\"\r\n\t\t+ \"0000001011011,0000001100100,0000001100101\";\r\n\t\r\n\t\tvar makeA = \"00000001000,00000001100,00000001101,000000010010,000000010011,000000010100,000000010101,000000010110,000000010111,000000011100,000000011101,000000011110,000000011111\";\r\n\t\r\n\t\ttermW = termW.split(\",\");  termB = termB.split(\",\");  makeW = makeW.split(\",\");  makeB = makeB.split(\",\");  makeA = makeA.split(\",\");\r\n\t\r\n\t\tvar lensW = {}, lensB = {};\r\n\t\taddKeys(lensW, termW, 0, 1);  addKeys(lensW, makeW, 64,64);  addKeys(lensW, makeA, 1792,64);\r\n\t\taddKeys(lensB, termB, 0, 1);  addKeys(lensB, makeB, 64,64);  addKeys(lensB, makeA, 1792,64);\r\n\t\treturn [lensW, lensB];\r\n\t} )();\r\n\t\r\n\tUTIF.decode._decodeG4 = function(data, off, slen, tgt, toff, w, fo)\r\n\t{\r\n\t\tvar U = UTIF.decode, boff=off<<3, len=0, wrd=\"\";\t// previous starts with 1\r\n\t\tvar line=[], pline=[];  for(var i=0; i<w; i++) pline.push(0);  pline=U._makeDiff(pline);\r\n\t\tvar a0=0, a1=0, a2=0, b1=0, b2=0, clr=0;\r\n\t\tvar y=0, mode=\"\", toRead=0;\r\n\t\tvar bipl = Math.ceil(w/8)*8;\r\n\t\r\n\t\twhile((boff>>>3)<off+slen)\r\n\t\t{\r\n\t\t\tb1 = U._findDiff(pline, a0+(a0==0?0:1), 1-clr), b2 = U._findDiff(pline, b1, clr);\t// could be precomputed\r\n\t\t\tvar bit =0;\r\n\t\t\tif(fo==1) bit = (data[boff>>>3]>>>(7-(boff&7)))&1;\r\n\t\t\tif(fo==2) bit = (data[boff>>>3]>>>(  (boff&7)))&1;\r\n\t\t\tboff++;  wrd+=bit;\r\n\t\t\tif(mode==\"H\")\r\n\t\t\t{\r\n\t\t\t\tif(U._lens[clr][wrd]!=null)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar dl=U._lens[clr][wrd];  wrd=\"\";  len+=dl;\r\n\t\t\t\t\tif(dl<64) {  U._addNtimes(line,len,clr);  a0+=len;  clr=1-clr;  len=0;  toRead--;  if(toRead==0) mode=\"\";  }\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif(wrd==\"0001\")  {  wrd=\"\";  U._addNtimes(line,b2-a0,clr);  a0=b2;   }\r\n\t\t\t\tif(wrd==\"001\" )  {  wrd=\"\";  mode=\"H\";  toRead=2;  }\r\n\t\t\t\tif(U._dmap[wrd]!=null) {  a1 = b1+U._dmap[wrd];  U._addNtimes(line, a1-a0, clr);  a0=a1;  wrd=\"\";  clr=1-clr;  }\r\n\t\t\t}\r\n\t\t\tif(line.length==w && mode==\"\")\r\n\t\t\t{\r\n\t\t\t\tU._writeBits(line, tgt, toff*8+y*bipl);\r\n\t\t\t\tclr=0;  y++;  a0=0;\r\n\t\t\t\tpline=U._makeDiff(line);  line=[];\r\n\t\t\t}\r\n\t\t\t//if(wrd.length>150) {  log(wrd);  break;  throw \"e\";  }\r\n\t\t}\r\n\t}\r\n\t\r\n\tUTIF.decode._findDiff = function(line, x, clr) {  for(var i=0; i<line.length; i+=2) if(line[i]>=x && line[i+1]==clr)  return line[i];  }\r\n\t\r\n\tUTIF.decode._makeDiff = function(line)\r\n\t{\r\n\t\tvar out = [];  if(line[0]==1) out.push(0,1);\r\n\t\tfor(var i=1; i<line.length; i++) if(line[i-1]!=line[i]) out.push(i, line[i]);\r\n\t\tout.push(line.length,0,line.length,1);  return out;\r\n\t}\r\n\t\r\n\tUTIF.decode._decodeG2 = function(data, off, slen, tgt, toff, w, fo)\r\n\t{\r\n\t\tvar U = UTIF.decode, boff=off<<3, len=0, wrd=\"\";\r\n\t\tvar line=[];\r\n\t\tvar clr = 0;\r\n\t\tvar y=0;\r\n\t\tvar bipl = Math.ceil(w/8)*8;\r\n\t\t\r\n\t\twhile((boff>>>3)<off+slen) {\r\n\t\t\tvar bit =0;\r\n\t\t\tif(fo==1) bit = (data[boff>>>3]>>>(7-(boff&7)))&1;\r\n\t\t\tif(fo==2) bit = (data[boff>>>3]>>>(  (boff&7)))&1;\r\n\t\t\tboff++;  wrd+=bit;\r\n\t\t\t\r\n\t\t\tlen = U._lens[clr][wrd];\r\n\t\t\tif(len!=null) {\r\n\t\t\t\tU._addNtimes(line,len,clr);  wrd=\"\";\r\n\t\t\t\tif(len<64) clr = 1-clr;  \r\n\t\t\t\tif(line.length==w) {  U._writeBits(line, tgt, toff*8+y*bipl);  line=[];  y++;  clr=0;  if((boff&7)!=0) boff+=8-(boff&7);  if(len>=64) boff+=8;   }\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tUTIF.decode._decodeG3 = function(data, off, slen, tgt, toff, w, fo, twoDim)\r\n\t{\r\n\t\tvar U = UTIF.decode, boff=off<<3, len=0, wrd=\"\";\r\n\t\tvar line=[], pline=[];  for(var i=0; i<w; i++) line.push(0);\r\n\t\tvar a0=0, a1=0, a2=0, b1=0, b2=0, clr=0;\r\n\t\tvar y=-1, mode=\"\", toRead=0, is1D=true;\r\n\t\tvar bipl = Math.ceil(w/8)*8;\r\n\t\twhile((boff>>>3)<off+slen)\r\n\t\t{\r\n\t\t\tb1 = U._findDiff(pline, a0+(a0==0?0:1), 1-clr), b2 = U._findDiff(pline, b1, clr);\t// could be precomputed\r\n\t\t\tvar bit =0;\r\n\t\t\tif(fo==1) bit = (data[boff>>>3]>>>(7-(boff&7)))&1;\r\n\t\t\tif(fo==2) bit = (data[boff>>>3]>>>(  (boff&7)))&1;\r\n\t\t\tboff++;  wrd+=bit;\r\n\t\r\n\t\t\tif(is1D)\r\n\t\t\t{\r\n\t\t\t\tif(U._lens[clr][wrd]!=null)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar dl=U._lens[clr][wrd];  wrd=\"\";  len+=dl;\r\n\t\t\t\t\tif(dl<64) {  U._addNtimes(line,len,clr);  clr=1-clr;  len=0;  }\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif(mode==\"H\")\r\n\t\t\t\t{\r\n\t\t\t\t\tif(U._lens[clr][wrd]!=null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar dl=U._lens[clr][wrd];  wrd=\"\";  len+=dl;\r\n\t\t\t\t\t\tif(dl<64) {  U._addNtimes(line,len,clr);  a0+=len;  clr=1-clr;  len=0;  toRead--;  if(toRead==0) mode=\"\";  }\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif(wrd==\"0001\")  {  wrd=\"\";  U._addNtimes(line,b2-a0,clr);  a0=b2;   }\r\n\t\t\t\t\tif(wrd==\"001\" )  {  wrd=\"\";  mode=\"H\";  toRead=2;  }\r\n\t\t\t\t\tif(U._dmap[wrd]!=null) {  a1 = b1+U._dmap[wrd];  U._addNtimes(line, a1-a0, clr);  a0=a1;  wrd=\"\";  clr=1-clr;  }\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(wrd.endsWith(\"000000000001\")) // needed for some files\r\n\t\t\t{\r\n\t\t\t\tif(y>=0) U._writeBits(line, tgt, toff*8+y*bipl);\r\n\t\t\t\tif(twoDim) {\r\n\t\t\t\t\tif(fo==1) is1D = ((data[boff>>>3]>>>(7-(boff&7)))&1)==1;\r\n\t\t\t\t\tif(fo==2) is1D = ((data[boff>>>3]>>>(  (boff&7)))&1)==1;\r\n\t\t\t\t\tboff++;\r\n\t\t\t\t}\r\n\t\t\t\t//log(\"EOL\",y, \"next 1D:\", is1D);\r\n\t\t\t\twrd=\"\";  clr=0;  y++;  a0=0;\r\n\t\t\t\tpline=U._makeDiff(line);  line=[];\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(line.length==w) U._writeBits(line, tgt, toff*8+y*bipl);\r\n\t}\r\n\t\r\n\tUTIF.decode._addNtimes = function(arr, n, val) {  for(var i=0; i<n; i++) arr.push(val);  }\r\n\t\r\n\tUTIF.decode._writeBits = function(bits, tgt, boff)\r\n\t{\r\n\t\tfor(var i=0; i<bits.length; i++) tgt[(boff+i)>>>3] |= (bits[i]<<(7-((boff+i)&7)));\r\n\t}\r\n\t\r\n\tUTIF.decode._decodeLZW=UTIF.decode._decodeLZW=function(){var e,U,Z,u,K=0,V=0,g=0,N=0,O=function(){var S=e>>>3,A=U[S]<<16|U[S+1]<<8|U[S+2],j=A>>>24-(e&7)-V&(1<<V)-1;\r\n\te+=V;return j},h=new Uint32Array(4096*4),w=0,m=function(S){if(S==w)return;w=S;g=1<<S;N=g+1;for(var A=0;\r\n\tA<N+1;A++){h[4*A]=h[4*A+3]=A;h[4*A+1]=65535;h[4*A+2]=1}},i=function(S){V=S+1;K=N+1},D=function(S){var A=S<<2,j=h[A+2],a=u+j-1;\r\n\twhile(A!=65535){Z[a--]=h[A];A=h[A+1]}u+=j},L=function(S,A){var j=K<<2,a=S<<2;h[j]=h[(A<<2)+3];h[j+1]=a;\r\n\th[j+2]=h[a+2]+1;h[j+3]=h[a+3];K++;if(K+1==1<<V&&V!=12)V++},T=function(S,A,j,a,n,q){e=A<<3;U=S;Z=a;u=n;\r\n\tvar B=A+j<<3,_=0,t=0;m(q);i(q);while(e<B&&(_=O())!=N){if(_==g){i(q);_=O();if(_==N)break;D(_)}else{if(_<K){D(_);\r\n\tL(t,_)}else{L(t,t);D(K-1)}}t=_}return u};return T}();\r\n\t\r\n\tUTIF.tags = {};\r\n\t//UTIF.ttypes = {  256:3,257:3,258:3,   259:3, 262:3,  273:4,  274:3, 277:3,278:4,279:4, 282:5, 283:5, 284:3, 286:5,287:5, 296:3, 305:2, 306:2, 338:3, 513:4, 514:4, 34665:4  };\r\n\t// start at tag 250\r\n\tUTIF._types = function() {\r\n\t\tvar main = new Array(250);  main.fill(0);\r\n\t\tmain = main.concat([0,0,0,0,4,3,3,3,3,3,0,0,3,0,0,0,3,0,0,2,2,2,2,4,3,0,0,3,4,4,3,3,5,5,3,2,5,5,0,0,0,0,4,4,0,0,3,3,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,2,2,3,5,5,3,0,3,3,4,4,4,3,4,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);\r\n\t\tvar rest = {33432: 2, 33434: 5, 33437: 5, 34665: 4, 34850: 3, 34853: 4, 34855: 3, 34864: 3, 34866: 4, 36864: 7, 36867: 2, 36868: 2, 37121: 7, 37377: 10, 37378: 5, 37380: 10, 37381: 5, 37383: 3, 37384: 3, 37385: 3, 37386: 5, 37510: 7, 37520: 2, 37521: 2, 37522: 2, 40960: 7, 40961: 3, 40962: 4, 40963: 4, 40965: 4, 41486: 5, 41487: 5, 41488: 3, 41985: 3, 41986: 3, 41987: 3, 41988: 5, 41989: 3, 41990: 3, 41993: 3, 41994: 3, 41995: 7, 41996: 3, 42032: 2, 42033: 2, 42034: 5, 42036: 2, 42037: 2, 59932: 7};\r\n\t\treturn {\r\n\t\t\tbasic: {\r\n\t\t\t\tmain: main,\r\n\t\t\t\trest: rest\r\n\t\t\t},\r\n\t\t\tgps: {\r\n\t\t\t\tmain: [1,2,5,2,5,1,5,5,0,9],\r\n\t\t\t\trest: {18:2,29:2}\r\n\t\t\t}\r\n\t\t}\r\n\t}();\r\n\t\r\n\tUTIF._readIFD = function(bin, data, offset, ifds, depth, prm)\r\n\t{\r\n\t\tvar cnt = bin.readUshort(data, offset);  offset+=2;\r\n\t\tvar ifd = {};\r\n\t\r\n\t\tif(prm.debug) log(\"   \".repeat(depth),ifds.length-1,\">>>----------------\");\r\n\t\tfor(var i=0; i<cnt; i++)\r\n\t\t{\r\n\t\t\tvar tag  = bin.readUshort(data, offset);    offset+=2;\r\n\t\t\tvar type = bin.readUshort(data, offset);    offset+=2;\r\n\t\t\tvar num  = bin.readUint  (data, offset);    offset+=4;\r\n\t\t\tvar voff = bin.readUint  (data, offset);    offset+=4;\r\n\t\t\t\r\n\t\t\tvar arr = [];\r\n\t\t\t//ifd[\"t\"+tag+\"-\"+UTIF.tags[tag]] = arr;\r\n\t\t\tif(type== 1 || type==7) {  var no=(num<5 ? offset-4 : voff);  if(no+num>data.buffer.byteLength) num=data.buffer.byteLength-no;  arr = new Uint8Array(data.buffer, no, num);  }\r\n\t\t\tif(type== 2) {  var o0 = (num<5 ? offset-4 : voff), c=data[o0], len=Math.max(0, Math.min(num-1,data.length-o0));\r\n\t\t\t\t\t\t\tif(c<128 || len==0) arr.push( bin.readASCII(data, o0, len) );\r\n\t\t\t\t\t\t\telse      arr = new Uint8Array(data.buffer, o0, len);  }\r\n\t\t\tif(type== 3) {  for(var j=0; j<num; j++) arr.push(bin.readUshort(data, (num<3 ? offset-4 : voff)+2*j));  }\r\n\t\t\tif(type== 4 \r\n\t\t\t|| type==13) {  for(var j=0; j<num; j++) arr.push(bin.readUint  (data, (num<2 ? offset-4 : voff)+4*j));  }\r\n\t\t\tif(type== 5 || type==10) {  \r\n\t\t\t\tvar ri = type==5 ? bin.readUint : bin.readInt;\r\n\t\t\t\tfor(var j=0; j<num; j++) arr.push([ri(data, voff+j*8), ri(data,voff+j*8+4)]);  }\r\n\t\t\tif(type== 8) {  for(var j=0; j<num; j++) arr.push(bin.readShort (data, (num<3 ? offset-4 : voff)+2*j));  }\r\n\t\t\tif(type== 9) {  for(var j=0; j<num; j++) arr.push(bin.readInt   (data, (num<2 ? offset-4 : voff)+4*j));  }\r\n\t\t\tif(type==11) {  for(var j=0; j<num; j++) arr.push(bin.readFloat (data, voff+j*4));  }\r\n\t\t\tif(type==12) {  for(var j=0; j<num; j++) arr.push(bin.readDouble(data, voff+j*8));  }\r\n\t\t\t\r\n\t\t\tif(num!=0 && arr.length==0) {  log(tag, \"unknown TIFF tag type: \", type, \"num:\",num);  if(i==0)return;  continue;  }\r\n\t\t\tif(prm.debug) log(\"   \".repeat(depth), tag, type, UTIF.tags[tag], arr);\r\n\t\t\t\r\n\t\t\tifd[\"t\"+tag] = arr;\r\n\t\t\t\r\n\t\t\tif(tag==330 && ifd[\"t272\"] && ifd[\"t272\"][0]==\"DSLR-A100\") {  } \r\n\t\t\telse if(tag==330 || tag==34665 || tag==34853 || (tag==50740 && bin.readUshort(data,bin.readUint(arr,0))<300  ) ||tag==61440) {\r\n\t\t\t\tvar oarr = tag==50740 ? [bin.readUint(arr,0)] : arr;\r\n\t\t\t\tvar subfd = [];\r\n\t\t\t\tfor(var j=0; j<oarr.length; j++) UTIF._readIFD(bin, data, oarr[j], subfd, depth+1, prm);\r\n\t\t\t\tif(tag==  330) ifd.subIFD = subfd;\r\n\t\t\t\tif(tag==34665) ifd.exifIFD = subfd[0];\r\n\t\t\t\tif(tag==34853) ifd.gpsiIFD = subfd[0];  //console.log(\"gps\", subfd[0]);  }\r\n\t\t\t\tif(tag==50740) ifd.dngPrvt = subfd[0];\r\n\t\t\t\tif(tag==61440) ifd.fujiIFD = subfd[0];\r\n\t\t\t}\r\n\t\t\tif(tag==37500 && prm.parseMN) {\r\n\t\t\t\tvar mn = arr;\r\n\t\t\t\t//console.log(bin.readASCII(mn,0,mn.length), mn);\r\n\t\t\t\tif(bin.readASCII(mn,0,5)==\"Nikon\")  ifd.makerNote = UTIF[\"decode\"](mn.slice(10).buffer)[0];\r\n\t\t\t\telse if(bin.readASCII(mn,0,5)==\"OLYMP\" || bin.readASCII(mn,0,9)==\"OM SYSTEM\") { // ???\r\n\t\t\t\t\tvar inds = [8208,8224,8240,8256,8272];\r\n\t\t\t\t\tvar subsub = [];  UTIF._readIFD(bin, mn, mn[1]==77 ? 16 : (mn[5]==85 ? 12 : 8), subsub, depth+1, prm);\r\n\t\t\t\t\tvar obj = ifd.makerNote = subsub.pop();\r\n\t\t\t\t\tfor(var j=0; j<inds.length; j++) {\r\n\t\t\t\t\t\tvar k=\"t\"+inds[j];  if(obj[k]==null) continue;\r\n\t\t\t\t\t\tUTIF._readIFD(bin, mn, obj[k][0], subsub, depth+1, prm);\r\n\t\t\t\t\t\tobj[k] = subsub.pop();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(obj[\"t12288\"]) {\r\n\t\t\t\t\t\tUTIF._readIFD(bin, obj[\"t12288\"], 0, subsub, depth+1, prm);\r\n\t\t\t\t\t\tobj[\"t12288\"]=subsub.pop();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if(bin.readUshort(data,voff)<300 && bin.readUshort(data,voff+4)<=12){\r\n\t\t\t\t\tvar subsub=[];  UTIF._readIFD(bin, data, voff, subsub, depth+1, prm);\r\n\t\t\t\t\tifd.makerNote = subsub[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tifds.push(ifd);\r\n\t\tif(prm.debug) log(\"   \".repeat(depth),\"<<<---------------\");\r\n\t\treturn offset;\r\n\t}\r\n\t\r\n\tUTIF._writeIFD = function(bin, types, data, offset, ifd)\r\n\t{\r\n\t\tvar keys = Object.keys(ifd), knum=keys.length;  if(ifd[\"exifIFD\"]) knum--;  if(ifd[\"gpsiIFD\"]) knum--;\r\n\t\tbin.writeUshort(data, offset, knum);  offset+=2;\r\n\t\r\n\t\tvar eoff = offset + knum*12 + 4;\r\n\t\r\n\t\tfor(var ki=0; ki<keys.length; ki++)\r\n\t\t{\r\n\t\t\tvar key = keys[ki];  if(key==\"t34665\" || key==\"t34853\") continue;  \r\n\t\t\tif(key==\"exifIFD\") key=\"t34665\";  if(key==\"gpsiIFD\") key=\"t34853\";\r\n\t\t\tvar tag = parseInt(key.slice(1)), type = types.main[tag];  if(type==null) type=types.rest[tag];\t\t\r\n\t\t\tif(type==null || type==0) throw new Error(\"unknown type of tag: \"+tag);\r\n\t\t\t//console.log(offset+\":\", tag, type, eoff);\r\n\t\t\tvar val = ifd[key];  \r\n\t\t\tif(tag==34665) {\r\n\t\t\t\tvar outp = UTIF._writeIFD(bin, types, data, eoff, ifd[\"exifIFD\"]);\r\n\t\t\t\tval = [eoff];  eoff = outp[1];\r\n\t\t\t}\r\n\t\t\tif(tag==34853) {\r\n\t\t\t\tvar outp = UTIF._writeIFD(bin, UTIF._types.gps, data, eoff, ifd[\"gpsiIFD\"]);\r\n\t\t\t\tval = [eoff];  eoff = outp[1];\r\n\t\t\t}\r\n\t\t\tif(type==2) val=val[0]+\"\\u0000\";  var num = val.length;\r\n\t\t\tbin.writeUshort(data, offset, tag );  offset+=2;\r\n\t\t\tbin.writeUshort(data, offset, type);  offset+=2;\r\n\t\t\tbin.writeUint  (data, offset, num );  offset+=4;\r\n\t\r\n\t\t\tvar dlen = [-1, 1, 1, 2, 4, 8, 0, 1, 0, 4, 8, 0, 8][type] * num;  //if(dlen<1) throw \"e\";\r\n\t\t\tvar toff = offset;\r\n\t\t\tif(dlen>4) {  bin.writeUint(data, offset, eoff);  toff=eoff;  }\r\n\t\r\n\t\t\tif     (type== 1 || type==7) {  for(var i=0; i<num; i++) data[toff+i] = val[i];  }\r\n\t\t\telse if(type== 2) {  bin.writeASCII(data, toff, val);   }\r\n\t\t\telse if(type== 3) {  for(var i=0; i<num; i++) bin.writeUshort(data, toff+2*i, val[i]);    }\r\n\t\t\telse if(type== 4) {  for(var i=0; i<num; i++) bin.writeUint  (data, toff+4*i, val[i]);    }\r\n\t\t\telse if(type== 5 || type==10) {  \r\n\t\t\t\tvar wr = type==5?bin.writeUint:bin.writeInt;\r\n\t\t\t\tfor(var i=0; i<num; i++) {  \r\n\t\t\t\tvar v=val[i],nu=v[0],de=v[1];  if(nu==null) throw \"e\";  wr(data, toff+8*i, nu);  wr(data, toff+8*i+4, de);  }   }\r\n\t\t\telse if(type== 9) {  for(var i=0; i<num; i++) bin.writeInt   (data, toff+4*i, val[i]);    }\r\n\t\t\telse if(type==12) {  for(var i=0; i<num; i++) bin.writeDouble(data, toff+8*i, val[i]);    }\r\n\t\t\telse throw type;\r\n\t\r\n\t\t\tif(dlen>4) {  dlen += (dlen&1);  eoff += dlen;  }\r\n\t\t\toffset += 4;\r\n\t\t}\r\n\t\treturn [offset, eoff];\r\n\t}\r\n\t\r\n\tUTIF.toRGBA8 = function(out, scl)\r\n\t{\r\n\t\tfunction gamma(x) {  return x < 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1.0 / 2.4) - 0.055;  }\r\n\t\t\r\n\t\t\r\n\t\tvar w = out.width, h = out.height, area = w*h, qarea = area*4, data = out.data;\r\n\t\tvar img = new Uint8Array(area*4);\r\n\t\t//console.log(out);\r\n\t\t// 0: WhiteIsZero, 1: BlackIsZero, 2: RGB, 3: Palette color, 4: Transparency mask, 5: CMYK\r\n\t\tvar intp = (out[\"t262\"] ? out[\"t262\"][0]: 2), bps = (out[\"t258\"]?Math.min(32,out[\"t258\"][0]):1);\r\n\t\tif(out[\"t262\"]==null && bps==1) intp=0;\r\n\t\t\r\n\t\tvar smpls = out[\"t277\"]?out[\"t277\"][0] : (out[\"t258\"]?out[\"t258\"].length : [1,1,3,1,1,4,3][intp]);\r\n\t\tvar sfmt  = out[\"t339\"]?out[\"t339\"][0] : null;  if(intp==1 && bps==32 && sfmt!=3) throw \"e\";  // sample format\r\n\t\tvar bpl = Math.ceil(smpls*bps*w/8);\r\n\t\t\r\n\t\t//log(\"interpretation: \", intp, \"smpls\", smpls, \"bps\", bps, \"sample format\",sfmt, out);\r\n\t\t\r\n\t\tif(false) {}\r\n\t\telse if(intp==0)\r\n\t\t{\r\n\t\t\tscl = 1/256; // \"Photopeatest.tif\"\r\n\t\t\tfor(var y=0; y<h; y++) {\r\n\t\t\t\tvar off = y*bpl, io = y*w;\r\n\t\t\t\tif(bps== 1) for(var i=0; i<w; i++) {  var qi=(io+i)<<2, px=((data[off+(i>>3)])>>(7-  (i&7)))& 1;  img[qi]=img[qi+1]=img[qi+2]=( 1-px)*255;  img[qi+3]=255;    }\r\n\t\t\t\tif(bps== 4) for(var i=0; i<w; i++) {  var qi=(io+i)<<2, px=((data[off+(i>>1)])>>(4-4*(i&1)))&15;  img[qi]=img[qi+1]=img[qi+2]=(15-px)* 17;  img[qi+3]=255;    }\r\n\t\t\t\tif(bps== 8) for(var i=0; i<w; i++) {  var qi=(io+i)<<2, px=data[off+i];  img[qi]=img[qi+1]=img[qi+2]=255-px;  img[qi+3]=255;    }\r\n\t\t\t\tif(bps==16) for(var i=0; i<w; i++) {  var qi=(io+i)<<2, o=off+(2*i), px=(data[o+1]<<8)|data[o];  img[qi]=img[qi+1]=img[qi+2]= Math.min(255,255-(~~(px*scl)));  img[qi+3]=255;    } // ladoga.tif\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if(intp==1)\r\n\t\t{\r\n\t\t\tif(scl==null) scl=1/256;\r\n\t\t\tvar f32 = ((data.length&3)==0) ? new Float32Array(data.buffer) : null;\r\n\t\t\t\r\n\t\t\tfor(var y=0; y<h; y++) {\r\n\t\t\t\tvar off = y*bpl, io = y*w;\r\n\t\t\t\tif(bps== 1) for(var i=0; i<w; i++) {  var qi=(io+i)<<2, px=((data[off+(i>>3)])>>(7-  (i&7)))&1;   img[qi]=img[qi+1]=img[qi+2]=(px)*255;  img[qi+3]=255;    }\r\n\t\t\t\tif(bps== 2) for(var i=0; i<w; i++) {  var qi=(io+i)<<2, px=((data[off+(i>>2)])>>(6-2*(i&3)))&3;   img[qi]=img[qi+1]=img[qi+2]=(px)* 85;  img[qi+3]=255;    }\r\n\t\t\t\tif(bps== 8) for(var i=0; i<w; i++) {  var qi=(io+i)<<2, px=data[off+i*smpls];  img[qi]=img[qi+1]=img[qi+2]=    px;  img[qi+3]=255;    }\r\n\t\t\t\tif(bps==16) for(var i=0; i<w; i++) {  var qi=(io+i)<<2, o=off+(2*i), px=(data[o+1]<<8)|data[o];  img[qi]=img[qi+1]=img[qi+2]= Math.min(255,~~(px*scl));  img[qi+3]=255;    } // ladoga.tif\r\n\t\t\t\tif(bps==32) for(var i=0; i<w; i++) {  var qi=(io+i)<<2, o=(off>>>2)+i, px=f32[o];  img[qi]=img[qi+1]=img[qi+2]= ~~(0.5+255*px);  img[qi+3]=255;    }\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if(intp==2)\r\n\t\t{\r\n\t\t\tif(bps== 8) \r\n\t\t\t{\r\n\t\t\t\tif(smpls==1) for(var i=0; i<area; i++) {  img[4*i]=img[4*i+1]=img[4*i+2]=data[i];  img[4*i+3]=255;  }\r\n\t\t\t\tif(smpls==3) for(var i=0; i<area; i++) {  var qi=i<<2, ti=i*3    ;  img[qi]=data[ti];  img[qi+1]=data[ti+1];  img[qi+2]=data[ti+2];  img[qi+3]=255;    }\r\n\t\t\t\tif(smpls>=4) for(var i=0; i<area; i++) {  var qi=i<<2, ti=i*smpls;  img[qi]=data[ti];  img[qi+1]=data[ti+1];  img[qi+2]=data[ti+2];  img[qi+3]=data[ti+3];    }\r\n\t\t\t}\r\n\t\t\telse if(bps==16){  // 3x 16-bit channel\r\n\t\t\t\tif(smpls==4) for(var i=0; i<area; i++) {  var qi=i<<2, ti=i*8+1;  img[qi]=data[ti];  img[qi+1]=data[ti+2];  img[qi+2]=data[ti+4];  img[qi+3]=data[ti+6];    }\r\n\t\t\t\tif(smpls==3) for(var i=0; i<area; i++) {  var qi=i<<2, ti=i*6+1;  img[qi]=data[ti];  img[qi+1]=data[ti+2];  img[qi+2]=data[ti+4];  img[qi+3]=255;           }\r\n\t\t\t}\r\n\t\t\telse if(bps==32){\r\n\t\t\t\tvar ndt = new Float32Array(data.buffer);  // t339 is [3,3,3]\r\n\t\t\t\t// check the endianity\r\n\t\t\t\tvar min = 0;  for(var i=0; i<ndt.length; i++) min = Math.min(min,ndt[i]);\r\n\t\t\t\tif(min<0) for(var i=0; i<data.length; i+=4) {  var t=data[i];  data[i]=data[i+3];  data[i+3]=t;  t=data[i+1];  data[i+1]=data[i+2];  data[i+2]=t;  }\r\n\t\t\t\t// gamma correction\r\n\t\t\t\tvar pmap = [];  for(var i=0; i<65536; i++) pmap.push(gamma(i/65535));\r\n\t\t\t\tfor(var i=0; i<ndt.length; i++) {  var cv = Math.max(0, Math.min(1, ndt[i]));  ndt[i] = pmap[~~(0.5+cv*65535)];  }\r\n\t\t\t\t\r\n\t\t\t\tif(smpls==3) for(var i=0; i<area; i++) {  var qi=i<<2, ti=i*3;  \r\n\t\t\t\t\timg[qi]=~~(0.5+ndt[ti]*255);  img[qi+1]=~~(0.5+ndt[ti+1]*255);  img[qi+2]=~~(0.5+ndt[ti+2]*255);  img[qi+3]=255;           }\r\n\t\t\t\telse if(smpls==4) for(var i=0; i<area; i++) {  var qi=i<<2, ti=i*4;  \r\n\t\t\t\t\timg[qi]=~~(0.5+ndt[ti]*255);  img[qi+1]=~~(0.5+ndt[ti+1]*255);  img[qi+2]=~~(0.5+ndt[ti+2]*255);  img[qi+3]=~~(0.5+ndt[ti+3]*255);           }\r\n\t\t\t\telse throw smpls;\r\n\t\t\t}\r\n\t\t\telse throw bps;\r\n\t\t}\r\n\t\telse if(intp==3)\r\n\t\t{\r\n\t\t\tvar map = out[\"t320\"];\r\n\t\t\tvar cn = 1<<bps;\r\n\t\t\t\r\n\t\t\tvar nexta = bps==8 && smpls>1 && out[\"t338\"] && out[\"t338\"][0]!=0;\r\n\t\t\t\r\n\t\t\tfor(var y=0; y<h; y++) \r\n\t\t\t\tfor(var x=0; x<w; x++) {  \r\n\t\t\t\t\tvar i = y*w+x;\r\n\t\t\t\t\tvar qi=i<<2, mi=0;\r\n\t\t\t\t\tvar dof = y*bpl;\r\n\t\t\t\t\tif(false) {}\r\n\t\t\t\t\telse if(bps==1) mi=(data[dof+(x>>>3)]>>>(7-  (x&7)))& 1;\r\n\t\t\t\t\telse if(bps==2) mi=(data[dof+(x>>>2)]>>>(6-2*(x&3)))& 3;\r\n\t\t\t\t\telse if(bps==4) mi=(data[dof+(x>>>1)]>>>(4-4*(x&1)))&15;\r\n\t\t\t\t\telse if(bps==8) mi= data[dof+x*smpls]; \r\n\t\t\t\t\telse throw bps;\r\n\t\t\t\t\timg[qi]=(map[mi]>>8);  img[qi+1]=(map[cn+mi]>>8);  img[qi+2]=(map[cn+cn+mi]>>8);  img[qi+3]=nexta ? data[dof+x*smpls+1] : 255;   \r\n\t\t\t\t}\r\n\t\t}\r\n\t\telse if(intp==5) \r\n\t\t{\r\n\t\t\tvar gotAlpha = smpls>4 ? 1 : 0;\r\n\t\t\tfor(var i=0; i<area; i++) {\r\n\t\t\t\tvar qi=i<<2, si=i*smpls;  \r\n\t\t\t\t\r\n\t\t\t\tif(window.UDOC) {\r\n\t\t\t\t\tvar C=data[si], M=data[si+1], Y=data[si+2], K=data[si+3];\r\n\t\t\t\t\tvar c = UDOC.C.cmykToRgb([C*(1/255), M*(1/255), Y*(1/255), K*(1/255)]);\r\n\t\t\t\t\timg[qi] = ~~(0.5+255*c[0]);  img[qi+1] = ~~(0.5+255*c[1]);  img[qi+2] = ~~(0.5+255*c[2]);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tvar C=255-data[si], M=255-data[si+1], Y=255-data[si+2], K=(255-data[si+3])*(1/255);\r\n\t\t\t\t\timg[qi]=~~(C*K+0.5);  img[qi+1]=~~(M*K+0.5);  img[qi+2]=~~(Y*K+0.5);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\timg[qi+3]=255*(1-gotAlpha)+data[si+4]*gotAlpha;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if(intp==6 && out[\"t278\"]) {  // only for DSC_1538.TIF\r\n\t\t\tvar rps = out[\"t278\"][0];\r\n\t\t\tfor(var y=0; y<h; y+=rps) {\r\n\t\t\t\tvar i=(y*w), len = rps*w;\r\n\t\t\t\t\r\n\t\t\t\tfor(var j=0; j<len; j++) {\r\n\t\t\t\t\tvar qi = 4*(i+j), si = 3*i+4*(j>>>1);\r\n\t\t\t\t\tvar Y = data[si+(j&1)], Cb=data[si+2]-128, Cr=data[si+3]-128;\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar r = Y + ( (Cr >> 2) + (Cr >> 3) + (Cr >> 5) ) ;\r\n\t\t\t\t\tvar g = Y - ( (Cb >> 2) + (Cb >> 4) + (Cb >> 5)) - ( (Cr >> 1) + (Cr >> 3) + (Cr >> 4) + (Cr >> 5)) ;\r\n\t\t\t\t\tvar b = Y + ( Cb + (Cb >> 1) + (Cb >> 2) + (Cb >> 6)) ;\r\n\t\t\t\t\t\r\n\t\t\t\t\timg[qi  ]=Math.max(0,Math.min(255,r));\r\n\t\t\t\t\timg[qi+1]=Math.max(0,Math.min(255,g));\r\n\t\t\t\t\timg[qi+2]=Math.max(0,Math.min(255,b));\r\n\t\t\t\t\timg[qi+3]=255;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if(intp==32845) {\r\n\t\t\t\r\n\t\t\tfor(var y=0; y<h; y++)\r\n\t\t\t\tfor(var x=0; x<w; x++) {\r\n\t\t\t\t\tvar si = (y*w+x)*6, qi=(y*w+x)*4;\r\n\t\t\t\t\tvar L =  (data[si+1]<<8) | data[si];\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar L = Math.pow(2, (L + 0.5) / 256 - 64);\r\n\t\t\t\t\tvar u = (data[si+3] + 0.5) / 410;\r\n\t\t\t\t\tvar v = (data[si+5] + 0.5) / 410;\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Luv to xyY\r\n\t\t\t\t\tvar sX = (9 * u) / (6 * u - 16 * v + 12);\r\n\t\t\t\t\tvar sY = (4 * v) / (6 * u - 16 * v + 12);\r\n\t\t\t\t\tvar bY = L;  \r\n\t\t\t\t\t\r\n\t\t\t\t\t// xyY to XYZ\r\n\t\t\t\t\tvar X = (sX*bY)/sY, Y = bY, Z = (1-sX-sY)*bY/sY;  \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar r =  2.690*X -1.276*Y -0.414*Z\r\n\t\t\t\t\tvar g = -1.022*X +1.978*Y +0.044*Z\r\n\t\t\t\t\tvar b =  0.061*X -0.224*Y +1.163*Z\r\n\t\t\t\t\t\r\n\t\t\t\t\timg[qi  ] = gamma(Math.min(r,1))*255;\r\n\t\t\t\t\timg[qi+1] = gamma(Math.min(g,1))*255;\r\n\t\t\t\t\timg[qi+2] = gamma(Math.min(b,1))*255;\r\n\t\t\t\t\timg[qi+3] = 255;\r\n\t\t\t\t}\r\n\t\t}\r\n\t\telse log(\"Unknown Photometric interpretation: \"+intp);\r\n\t\treturn img;\r\n\t}\r\n\t\r\n\tUTIF.replaceIMG = function(imgs)\r\n\t{\r\n\t\tif(imgs==null) imgs = document.getElementsByTagName(\"img\");\r\n\t\tvar sufs = [\"tif\",\"tiff\",\"dng\",\"cr2\",\"nef\"]\r\n\t\tfor (var i=0; i<imgs.length; i++)\r\n\t\t{\r\n\t\t\tvar img=imgs[i], src=img.getAttribute(\"src\");  if(src==null) continue;\r\n\t\t\tvar suff=src.split(\".\").pop().toLowerCase();\r\n\t\t\tif(sufs.indexOf(suff)==-1) continue;\r\n\t\t\tvar xhr = new XMLHttpRequest();  UTIF._xhrs.push(xhr);  UTIF._imgs.push(img);\r\n\t\t\txhr.open(\"GET\", src);  xhr.responseType = \"arraybuffer\";\r\n\t\t\txhr.onload = UTIF._imgLoaded;   xhr.send();\r\n\t\t}\r\n\t}\r\n\t\r\n\tUTIF._xhrs = [];  UTIF._imgs = [];\r\n\tUTIF._imgLoaded = function(e) {\r\n\t\tvar ind = UTIF._xhrs.indexOf(e.target), img = UTIF._imgs[ind];\r\n\t\tUTIF._xhrs.splice(ind,1);  UTIF._imgs.splice(ind,1);\r\n\t\t\r\n\t\timg.setAttribute(\"src\",UTIF.bufferToURI(e.target.response));\r\n\t}\r\n\t\r\n\tUTIF.bufferToURI = function(buff) {\r\n\t\tvar ifds = UTIF.decode(buff);  //console.log(ifds);\r\n\t\tvar vsns = ifds, ma=0, page=vsns[0];  if(ifds[0].subIFD) vsns = vsns.concat(ifds[0].subIFD);\r\n\t\tfor(var i=0; i<vsns.length; i++) {\r\n\t\t\tvar img = vsns[i];\r\n\t\t\tif(img[\"t258\"]==null || img[\"t258\"].length<3) continue;\r\n\t\t\tvar ar = img[\"t256\"]*img[\"t257\"];\r\n\t\t\tif(ar>ma) {  ma=ar;  page=img;  }\r\n\t\t}\r\n\t\tUTIF.decodeImage(buff, page, ifds);\r\n\t\tvar rgba = UTIF.toRGBA8(page), w=page.width, h=page.height;\r\n\t\t\r\n\t\tvar cnv = document.createElement(\"canvas\");  cnv.width=w;  cnv.height=h;\r\n\t\tvar ctx = cnv.getContext(\"2d\");\r\n\t\tvar imgd = new ImageData(new Uint8ClampedArray(rgba.buffer),w,h);\r\n\t\tctx.putImageData(imgd,0,0);\r\n\t\treturn cnv.toDataURL();\r\n\t}\r\n\t\r\n\t\r\n\tUTIF._binBE =\r\n\t{\r\n\t\tnextZero   : function(data, o) {  while(data[o]!=0) o++;  return o;  },\r\n\t\treadUshort : function(buff, p) {  return (buff[p]<< 8) |  buff[p+1];  },\r\n\t\treadShort  : function(buff, p) {  var a=UTIF._binBE.ui8;  a[0]=buff[p+1];  a[1]=buff[p+0];\t\t\t\t\t\t\t        return UTIF._binBE. i16[0];  },\r\n\t\treadInt    : function(buff, p) {  var a=UTIF._binBE.ui8;  a[0]=buff[p+3];  a[1]=buff[p+2];  a[2]=buff[p+1];  a[3]=buff[p+0];  return UTIF._binBE. i32[0];  },\r\n\t\treadUint   : function(buff, p) {  var a=UTIF._binBE.ui8;  a[0]=buff[p+3];  a[1]=buff[p+2];  a[2]=buff[p+1];  a[3]=buff[p+0];  return UTIF._binBE.ui32[0];  },\r\n\t\treadASCII  : function(buff, p, l) {  var s = \"\";   for(var i=0; i<l; i++) s += String.fromCharCode(buff[p+i]);   return s; },\r\n\t\treadFloat  : function(buff, p) {  var a=UTIF._binBE.ui8;  for(var i=0;i<4;i++) a[i]=buff[p+3-i];  return UTIF._binBE.fl32[0];  },\r\n\t\treadDouble : function(buff, p) {  var a=UTIF._binBE.ui8;  for(var i=0;i<8;i++) a[i]=buff[p+7-i];  return UTIF._binBE.fl64[0];  },\r\n\t\r\n\t\twriteUshort: function(buff, p, n) {  buff[p] = (n>> 8)&255;  buff[p+1] =  n&255;  },\r\n\t\twriteInt   : function(buff, p, n) {  var a=UTIF._binBE.ui8;  UTIF._binBE.i32[0]=n;  buff[p+3]=a[0];  buff[p+2]=a[1];  buff[p+1]=a[2];  buff[p+0]=a[3];  },\r\n\t\twriteUint  : function(buff, p, n) {  buff[p] = (n>>24)&255;  buff[p+1] = (n>>16)&255;  buff[p+2] = (n>>8)&255;  buff[p+3] = (n>>0)&255;  },\r\n\t\twriteASCII : function(buff, p, s) {  for(var i = 0; i < s.length; i++)  buff[p+i] = s.charCodeAt(i);  },\r\n\t\twriteDouble: function(buff, p, n)\r\n\t\t{\r\n\t\t\tUTIF._binBE.fl64[0] = n;\r\n\t\t\tfor (var i = 0; i < 8; i++) buff[p + i] = UTIF._binBE.ui8[7 - i];\r\n\t\t}\r\n\t}\r\n\tUTIF._binBE.ui8  = new Uint8Array  (8);\r\n\tUTIF._binBE.i16  = new Int16Array  (UTIF._binBE.ui8.buffer);\r\n\tUTIF._binBE.i32  = new Int32Array  (UTIF._binBE.ui8.buffer);\r\n\tUTIF._binBE.ui32 = new Uint32Array (UTIF._binBE.ui8.buffer);\r\n\tUTIF._binBE.fl32 = new Float32Array(UTIF._binBE.ui8.buffer);\r\n\tUTIF._binBE.fl64 = new Float64Array(UTIF._binBE.ui8.buffer);\r\n\t\r\n\tUTIF._binLE =\r\n\t{\r\n\t\tnextZero   : UTIF._binBE.nextZero,\r\n\t\treadUshort : function(buff, p) {  return (buff[p+1]<< 8) |  buff[p];  },\r\n\t\treadShort  : function(buff, p) {  var a=UTIF._binBE.ui8;  a[0]=buff[p+0];  a[1]=buff[p+1];\t\t\t\t\t\t\t        return UTIF._binBE. i16[0];  },\r\n\t\treadInt    : function(buff, p) {  var a=UTIF._binBE.ui8;  a[0]=buff[p+0];  a[1]=buff[p+1];  a[2]=buff[p+2];  a[3]=buff[p+3];  return UTIF._binBE. i32[0];  },\r\n\t\treadUint   : function(buff, p) {  var a=UTIF._binBE.ui8;  a[0]=buff[p+0];  a[1]=buff[p+1];  a[2]=buff[p+2];  a[3]=buff[p+3];  return UTIF._binBE.ui32[0];  },\r\n\t\treadASCII  : UTIF._binBE.readASCII,\r\n\t\treadFloat  : function(buff, p) {  var a=UTIF._binBE.ui8;  for(var i=0;i<4;i++) a[i]=buff[p+  i];  return UTIF._binBE.fl32[0];  },\r\n\t\treadDouble : function(buff, p) {  var a=UTIF._binBE.ui8;  for(var i=0;i<8;i++) a[i]=buff[p+  i];  return UTIF._binBE.fl64[0];  },\r\n\t\t\r\n\t\twriteUshort: function(buff, p, n) {  buff[p] = (n)&255;  buff[p+1] =  (n>>8)&255;  },\r\n\t\twriteInt   : function(buff, p, n) {  var a=UTIF._binBE.ui8;  UTIF._binBE.i32[0]=n;  buff[p+0]=a[0];  buff[p+1]=a[1];  buff[p+2]=a[2];  buff[p+3]=a[3];  },\r\n\t\twriteUint  : function(buff, p, n) {  buff[p] = (n>>>0)&255;  buff[p+1] = (n>>>8)&255;  buff[p+2] = (n>>>16)&255;  buff[p+3] = (n>>>24)&255;  },\r\n\t\twriteASCII : UTIF._binBE.writeASCII\r\n\t}\r\n\tUTIF._copyTile = function(tb, tw, th, b, w, h, xoff, yoff)\r\n\t{\r\n\t\t//log(\"copyTile\", tw, th,  w, h, xoff, yoff);\r\n\t\tvar xlim = Math.min(tw, w-xoff);\r\n\t\tvar ylim = Math.min(th, h-yoff);\r\n\t\tfor(var y=0; y<ylim; y++)\r\n\t\t{\r\n\t\t\tvar tof = (yoff+y)*w+xoff;\r\n\t\t\tvar sof = y*tw;\r\n\t\t\tfor(var x=0; x<xlim; x++) b[tof+x] = tb[sof+x];\r\n\t\t}\r\n\t}\r\n\t\r\n\tUTIF.LosslessJpegDecode =function(){var b,O;function l(){return b[O++]}function m(){return b[O++]<<8|b[O++]}function a0(h){var V=l(),I=[0,0,0,255],f=[],G=8;\r\n\tfor(var w=0;w<16;w++)f[w]=l();for(var w=0;w<16;w++){for(var x=0;x<f[w];x++){var T=z(I,0,w+1,1);I[T+3]=l()}}var E=new Uint8Array(1<<G);\r\n\th[V]=[new Uint8Array(I),E];for(var w=0;w<1<<G;w++){var s=G,_=w,Y=0,F=0;while(I[Y+3]==255&&s!=0){F=_>>--s&1;\r\n\tY=I[Y+F]}E[w]=Y}}function z(h,V,I,f){if(h[V+3]!=255)return 0;if(I==0)return V;for(var w=0;w<2;w++){if(h[V+w]==0){h[V+w]=h.length;\r\n\th.push(0,0,f,255)}var x=z(h,h[V+w],I-1,f+1);if(x!=0)return x}return 0}function i(h){var V=h.b,I=h.f;\r\n\twhile(V<25&&h.a<h.d){var f=h.data[h.a++];if(f==255&&!h.c)h.a++;I=I<<8|f;V+=8}if(V<0)throw\"e\";h.b=V;h.f=I}function H(h,V){if(V.b<h)i(V);\r\n\treturn V.f>>(V.b-=h)&65535>>16-h}function g(h,V){var I=h[0],f=0,w=255,x=0;if(V.b<16)i(V);var T=V.f>>V.b-8&255;\r\n\tf=h[1][T];w=I[f+3];V.b-=I[f+2];while(w==255){x=V.f>>--V.b&1;f=I[f+x];w=I[f+3]}return w}function P(h,V){if(h<32768>>16-V)h+=-(1<<V)+1;\r\n\treturn h}function a2(h,V){var I=g(h,V);if(I==0)return 0;if(I==16)return-32768;var f=H(I,V);return P(f,I)}function X(h,V,I,f,w,x){var T=0;\r\n\tfor(var G=0;G<x;G++){var s=G*V;for(var _=0;_<V;_+=w){T++;for(var Y=0;Y<w;Y++)h[s+_+Y]=a2(f[Y],I)}if(I.e!=0&&T%I.e==0&&G!=0){var F=I.a,t=I.data;\r\n\twhile(t[F]!=255||!(208<=t[F+1]&&t[F+1]<=215))F--;I.a=F+2;I.f=0;I.b=0}}}function o(h,V){return P(H(h,V),h)}function a1(h,V,I,f,w){var x=b.length-O;\r\n\tfor(var T=0;T<x;T+=4){var G=b[O+T];b[O+T]=b[O+T+3];b[O+T+3]=G;var G=b[O+T+1];b[O+T+1]=b[O+T+2];b[O+T+2]=G}for(var E=0;\r\n\tE<w;E++){var s=32768,_=32768;for(var Y=0;Y<V;Y+=2){var F=g(f,I),t=g(f,I);if(F!=0)s+=o(F,I);if(t!=0)_+=o(t,I);\r\n\th[E*V+Y]=s&65535;h[E*V+Y+1]=_&65535}}}function C(h){b=h;O=0;if(m()!=65496)throw\"e\";var V=[],I=0,f=0,w=0,x=[],T=[],G=[],E=0,s=0,_=0;\r\n\twhile(!0){var Y=m();if(Y==65535){O--;continue}var F=m();if(Y==65475){f=l();s=m();_=m();E=l();for(var t=0;\r\n\tt<E;t++){var a=l(),J=l(),r=l();if(r!=0)throw\"e\";V[a]=[t,J>>4,J&15]}}else if(Y==65476){var a3=O+F-2;while(O<a3)a0(T)}else if(Y==65498){O++;\r\n\tfor(var t=0;t<E;t++){var a5=l(),v=V[a5];G[v[0]]=T[l()>>>4];x[v[0]]=v.slice(1)}I=l();O+=2;break}else if(Y==65501){w=m()}else{O+=F-2}}var a4=f>8?Uint16Array:Uint8Array,$=new a4(s*_*E),M={b:0,f:0,c:I==8,a:O,data:b,d:b.length,e:w};\r\n\tif(M.c)a1($,_*E,M,G[0],s);else{var c=[],p=0,D=0;for(var t=0;t<E;t++){var N=x[t],S=N[0],K=N[1];if(S>p)p=S;\r\n\tif(K>D)D=K;c.push(S*K)}if(p!=1||D!=1){if(E!=3||c[1]!=1||c[2]!=1)throw\"e\";if(p!=2||D!=1&&D!=2)throw\"e\";\r\n\tvar u=[],Z=0;for(var t=0;t<E;t++){for(var R=0;R<c[t];R++)u.push(G[t]);Z+=c[t]}var B=_/p,e=s/D,d=B*e;\r\n\tX($,B*Z,M,u,Z,e);j($,I,B,e,Z-2,Z,Z,f);var A=new Uint16Array(d*c[0]);if(p==2&&D==2){for(var t=0;t<d;t++){A[4*t]=$[6*t];\r\n\tA[4*t+1]=$[6*t+1];A[4*t+2]=$[6*t+2];A[4*t+3]=$[6*t+3]}j(A,I,B*4,e,0,1,1,f);for(var t=0;t<d;t++){$[6*t]=A[4*t];\r\n\t$[6*t+1]=A[4*t+1];$[6*t+2]=A[4*t+2];$[6*t+3]=A[4*t+3]}}if(p==2&&D==1){for(var t=0;t<d;t++){A[2*t]=$[4*t];\r\n\tA[2*t+1]=$[4*t+1]}j(A,I,B*2,e,0,1,1,f);for(var t=0;t<d;t++){$[4*t]=A[2*t];$[4*t+1]=A[2*t+1]}}var n=$.slice(0);\r\n\tfor(var K=0;K<s;K++){if(D==2)for(var S=0;S<_;S++){var q=(K*_+S)*E,k=((K>>>1)*B+(S>>>1))*Z,y=(K&1)*2+(S&1);\r\n\t$[q]=n[k+y];$[q+1]=n[k+4];$[q+2]=n[k+5]}else for(var S=0;S<_;S++){var q=(K*_+S)*E,k=(K*B+(S>>>1))*Z,y=S&1;\r\n\t$[q]=n[k+y];$[q+1]=n[k+2];$[q+2]=n[k+3]}}}else{X($,_*E,M,G,E,s);if(w==0)j($,I,_,s,0,E,E,f);else{var U=Math.floor(w/_);\r\n\tfor(var K=0;K<s;K+=U){var L=$.slice(K*_*E,(K+U)*_*E);j(L,I,_,U,0,E,E,f);$.set(L,K*_*E)}}}}return $}function j(h,V,I,f,w,x,G,E){var s=I*G;\r\n\tfor(var _=w;_<x;_++)h[_]+=1<<E-1;for(var Y=G;Y<s;Y+=G)for(var _=w;_<x;_++)h[Y+_]+=h[Y+_-G];for(var F=1;\r\n\tF<f;F++){var t=F*s;for(var _=w;_<x;_++)h[t+_]+=h[t+_-s];for(var Y=G;Y<s;Y+=G){for(var _=w;_<x;_++){var a=t+Y+_,J=a-s,r=h[a-G],Q=0;\r\n\tif(V==0)Q=0;else if(V==1)Q=r;else if(V==2)Q=h[J];else if(V==3)Q=h[J-G];else if(V==4)Q=r+(h[J]-h[J-G]);\r\n\telse if(V==5)Q=r+(h[J]-h[J-G]>>>1);else if(V==6)Q=h[J]+(r-h[J-G]>>>1);else if(V==7)Q=r+h[J]>>>1;else throw V;\r\n\th[a]+=Q}}}}return C}();\r\n\t\r\n\t\r\n\t(function(){var G=0,F=1,i=2,b=3,J=4,N=5,E=6,s=7,c=8,T=9,a3=10,f=11,q=12,M=13,m=14,x=15,L=16,$=17,p=18;\r\n\tfunction a5(t){var Z=UTIF._binBE.readUshort,u={b:Z(t,0),i:t[2],C:t[3],u:t[4],q:Z(t,5),k:Z(t,7),e:Z(t,9),l:Z(t,11),s:t[13],d:Z(t,14)};\r\n\tif(u.b!=18771||u.i>1||u.q<6||u.q%6||u.e<768||u.e%24||u.l!=768||u.k<u.l||u.k%u.l||u.k-u.e>=u.l||u.s>16||u.s!=u.k/u.l||u.s!=Math.ceil(u.e/u.l)||u.d!=u.q/6||u.u!=12&&u.u!=14&&u.u!=16||u.C!=16&&u.C!=0){throw\"Invalid data\"}if(u.i==0){throw\"Not implemented. We need this file!\"}u.h=u.C==16;\r\n\tu.m=(u.h?u.l*2/3:u.l>>>1)|0;u.A=u.m+2;u.f=64;u.g=(1<<u.u)-1;u.n=4*u.u;return u}function a7(t,Z){var u=new Array(Z.s),e=4*Z.s,Q=16+e;\r\n\tif(e&12)Q+=16-(e&12);for(var V=0,O=16;V<Z.s;O+=4){var o=UTIF._binBE.readUint(t,O);u[V]=t.slice(Q,Q+o);u[V].j=0;u[V].a=0;\r\n\tQ+=o;V++}if(Q!=t.length)throw\"Invalid data\";return u}function a6(t,Z){for(var u=-Z[4],e=0;u<=Z[4];e++,u++){t[e]=u<=-Z[3]?-4:u<=-Z[2]?-3:u<=-Z[1]?-2:u<-Z[0]?-1:u<=Z[0]?0:u<Z[1]?1:u<Z[2]?2:u<Z[3]?3:4}}function a1(t,Z,u){var e=[Z,3*Z+18,5*Z+67,7*Z+276,u];\r\n\tt.o=Z;t.w=(e[4]+2*Z)/(2*Z+1)+1|0;t.v=Math.ceil(Math.log2(t.w));t.t=9;a6(t.c,e)}function a2(t){var Z={c:new Int8Array(2<<t.u)};\r\n\ta1(Z,0,t.g);return Z}function D(t){var Z=[[],[],[]],u=Math.max(2,t.w+32>>>6);for(var e=0;e<3;e++){for(var Q=0;\r\n\tQ<41;Q++){Z[e][Q]=[u,1]}}return Z}function a4(t){for(var Z=-1,u=0;!u;Z++){u=t[t.j]>>>7-t.a&1;t.a++;t.a&=7;\r\n\tif(!t.a)t.j++}return Z}function K(t,Z){var u=0,e=8-t.a,Q=t.j,V=t.a;if(Z){if(Z>=e){do{u<<=e;Z-=e;u|=t[t.j]&(1<<e)-1;\r\n\tt.j++;e=8}while(Z>=8)}if(Z){u<<=Z;e-=Z;u|=t[t.j]>>>e&(1<<Z)-1}t.a=8-e}return u}function a0(t,Z){var u=0;\r\n\tif(Z<t){while(u<=14&&Z<<++u<t);}return u}function r(t,Z,u,e,Q,V,O,o){if(o==null)o=0;var X=V+1,k=X%2,j=0,I=0,a=0,l,R,w=e[Q],S=e[Q-1],H=e[Q-2][X],g=S[X-1],Y=S[X],P=S[X+1],A=w[X-1],v=w[X+1],y=Math.abs,d,C,n,h;\r\n\tif(k){d=y(P-Y);C=y(H-Y);n=y(g-Y)}if(k){h=d>n&&C<d?H+g:d<n&&C<n?H+P:P+g;h=h+2*Y>>>2;if(o){w[X]=h;return}l=Z.t*Z.c[t.g+Y-H]+Z.c[t.g+g-Y]}else{h=Y>g&&Y>P||Y<g&&Y<P?v+A+2*Y>>>2:A+v>>>1;\r\n\tl=Z.t*Z.c[t.g+Y-g]+Z.c[t.g+g-A]}R=y(l);var W=a4(u);if(W<t.n-Z.v-1){var z=a0(O[R][0],O[R][1]);a=K(u,z)+(W<<z)}else{a=K(u,Z.v)+1}a=a&1?-1-(a>>>1):a>>>1;\r\n\tO[R][0]+=y(a);if(O[R][1]==t.f){O[R][0]>>>=1;O[R][1]>>>=1}O[R][1]++;h=l<0?h-a:h+a;if(t.i){if(h<0)h+=Z.w;\r\n\telse if(h>t.g)h-=Z.w}w[X]=h>=0?Math.min(h,t.g):0}function U(t,Z,u){var e=t[0].length;for(var Q=Z;Q<=u;\r\n\tQ++){t[Q][0]=t[Q-1][1];t[Q][e-1]=t[Q-1][e-2]}}function B(t){U(t,s,q);U(t,i,J);U(t,x,$)}function _(t,Z,u,e,Q,V,O,o,X,k,j,I,a){var l=0,R=1,w=Q<M&&Q>J;\r\n\twhile(R<t.m){if(l<t.m){r(t,Z,u,e,Q,l,O[X],t.h&&(w&&k||!w&&(j||(l&I)==a)));r(t,Z,u,e,V,l,O[X],t.h&&(!w&&k||w&&(j||(l&I)==a)));\r\n\tl+=2}if(l>8){r(t,Z,u,e,Q,R,o[X]);r(t,Z,u,e,V,R,o[X]);R+=2}}B(e)}function a8(t,Z,u,e,Q,V){_(t,Z,u,e,i,s,Q,V,0,0,1,0,8);\r\n\t_(t,Z,u,e,c,x,Q,V,1,0,1,0,8);_(t,Z,u,e,b,T,Q,V,2,1,0,3,0);_(t,Z,u,e,a3,L,Q,V,0,0,0,3,2);_(t,Z,u,e,J,f,Q,V,1,0,0,3,2);\r\n\t_(t,Z,u,e,q,$,Q,V,2,1,0,3,0)}function a9(t,Z,u,e,Q,V){var O=V.length,o=t.l;if(Q+1==t.s)o=t.e-Q*t.l;var X=6*t.e*e+Q*t.l;\r\n\tfor(var k=0;k<6;k++){for(var j=0;j<o;j++){var I=V[k%O][j%O],a;if(I==0){a=i+(k>>>1)}else if(I==2){a=x+(k>>>1)}else{a=s+k}var l=t.h?(j*2/3&2147483646|j%3&1)+(j%3>>>1):j>>>1;\r\n\tZ[X+j]=u[a][l+1]}X+=t.e}}UTIF._decompressRAF=function(t,Z){var u=a5(t),e=a7(t,u),Q=a2(u),V=new Int16Array(u.e*u.q);\r\n\tif(Z==null){Z=u.h?[[1,1,0,1,1,2],[1,1,2,1,1,0],[2,0,1,0,2,1],[1,1,2,1,1,0],[1,1,0,1,1,2],[0,2,1,2,0,1]]:[[0,1],[3,2]]}var O=[[G,b],[F,J],[N,f],[E,q],[M,L],[m,$]],o=[];\r\n\tfor(var X=0;X<p;X++){o[X]=new Uint16Array(u.A)}for(var k=0;k<u.s;k++){var j=D(Q),I=D(Q);for(var X=0;\r\n\tX<p;X++){for(var a=0;a<u.A;a++){o[X][a]=0}}for(var l=0;l<u.d;l++){a8(u,Q,e[k],o,j,I);for(var X=0;X<6;\r\n\tX++){for(var a=0;a<u.A;a++){o[O[X][0]][a]=o[O[X][1]][a]}}a9(u,V,o,l,k,Z);for(var X=i;X<p;X++){if([N,E,M,m].indexOf(X)==-1){for(var a=0;\r\n\ta<u.A;a++){o[X][a]=0}}}B(o)}}return V}}())\r\n\t\r\n\t\r\n\t\r\n\t})(UTIF, pako);\r\n\t})();","import utif from \"utif2\";\nfunction getDimensionValue(dimension) {\n    if (typeof dimension === \"number\") {\n        return dimension;\n    }\n    if (dimension instanceof Uint8Array) {\n        return dimension[0];\n    }\n    if (typeof dimension[0] === \"string\") {\n        return parseInt(dimension[0]);\n    }\n    return dimension[0];\n}\nexport default function tiff() {\n    return {\n        mime: \"image/tiff\",\n        encode: (bitmap) => {\n            const tiff = utif.encodeImage(bitmap.data, bitmap.width, bitmap.height);\n            return Buffer.from(tiff);\n        },\n        decode: (data) => {\n            const ifds = utif.decode(data);\n            const page = ifds[0];\n            if (!page) {\n                throw new Error(\"No page found in TIFF\");\n            }\n            if (!page.t256) {\n                throw new Error(\"No image width found in TIFF\");\n            }\n            if (!page.t257) {\n                throw new Error(\"No image height found in TIFF\");\n            }\n            ifds.forEach((ifd) => {\n                utif.decodeImage(data, ifd);\n            });\n            const rgba = utif.toRGBA8(page);\n            return {\n                data: Buffer.from(rgba),\n                width: getDimensionValue(page.t256),\n                height: getDimensionValue(page.t257),\n            };\n        },\n    };\n}\n//# sourceMappingURL=index.js.map","export var util;\n(function (util) {\n    util.assertEqual = (_) => { };\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n    get errors() {\n        return this.issues;\n    }\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                const firstEl = sub.path[0];\n                fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n                fieldErrors[firstEl].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodIssueCode.invalid_type:\n            if (issue.received === ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n            break;\n        case ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n            break;\n        case ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"bigint\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util.assertNever(issue);\n    }\n    return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n    overrideErrorMap = map;\n}\nexport function getErrorMap() {\n    return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    if (issueData.message !== undefined) {\n        return {\n            ...issueData,\n            path: fullPath,\n            message: issueData.message,\n        };\n    }\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: errorMessage,\n    };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n    const overrideMap = getErrorMap();\n    const issue = makeIssue({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap, // contextual error map is first priority\n            ctx.schemaErrorMap, // then schema-bound map if available\n            overrideMap, // then global override map\n            overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            const key = await pair.key;\n            const value = await pair.value;\n            syncPairs.push({\n                key,\n                value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return INVALID;\n            if (value.status === \"aborted\")\n                return INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nexport const INVALID = Object.freeze({\n    status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    // biome-ignore lint:\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (Array.isArray(this._key)) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message ?? ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: message ?? required_error ?? ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: message ?? invalid_type_error ?? ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nexport class ZodType {\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: params?.async ?? false,\n                contextualErrorMap: params?.errorMap,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    \"~validate\"(data) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: !!this[\"~standard\"].async,\n            },\n            path: [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        if (!this[\"~standard\"].async) {\n            try {\n                const result = this._parseSync({ data, path: [], parent: ctx });\n                return isValid(result)\n                    ? {\n                        value: result.value,\n                    }\n                    : {\n                        issues: ctx.common.issues,\n                    };\n            }\n            catch (err) {\n                if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n                    this[\"~standard\"].async = true;\n                }\n                ctx.common = {\n                    issues: [],\n                    async: true,\n                };\n            }\n        }\n        return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n            ? {\n                value: result.value,\n            }\n            : {\n                issues: ctx.common.issues,\n            });\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params?.errorMap,\n                async: true,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n        this[\"~standard\"] = {\n            version: 1,\n            vendor: \"zod\",\n            validate: (data) => this[\"~validate\"](data),\n        };\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    let secondsRegexSource = `[0-5]\\\\d`;\n    if (args.precision) {\n        secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n    }\n    const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n    return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nfunction isValidJWT(jwt, alg) {\n    if (!jwtRegex.test(jwt))\n        return false;\n    try {\n        const [header] = jwt.split(\".\");\n        if (!header)\n            return false;\n        // Convert base64url to base64\n        const base64 = header\n            .replace(/-/g, \"+\")\n            .replace(/_/g, \"/\")\n            .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n        const decoded = JSON.parse(atob(base64));\n        if (typeof decoded !== \"object\" || decoded === null)\n            return false;\n        if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n            return false;\n        if (!decoded.alg)\n            return false;\n        if (alg && decoded.alg !== alg)\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isValidCidr(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nexport class ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"duration\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"jwt\") {\n                if (!isValidJWT(input.data, check.alg)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"jwt\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cidr\") {\n                if (!isValidCidr(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cidr\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64url\") {\n                if (!base64urlRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n    }\n    base64url(message) {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return this._addCheck({\n            kind: \"base64url\",\n            ...errorUtil.errToObj(message),\n        });\n    }\n    jwt(options) {\n        return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    cidr(options) {\n        return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            offset: options?.offset ?? false,\n            local: options?.local ?? false,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options?.position,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * Equivalent to `.min(1)`\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isCIDR() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get isBase64url() {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null;\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            try {\n                input.data = BigInt(input.data);\n            }\n            catch {\n                return this._getInvalidInput(input);\n            }\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            return this._getInvalidInput(input);\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _getInvalidInput(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.bigint,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (Number.isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: params?.coerce || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nexport class ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        this._cached = { shape, keys };\n        return this._cached;\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") {\n            }\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: errorUtil.errToObj(message).message ?? defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(mask)) {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nexport class ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nexport class ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nexport class ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nexport class ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(this._def.values);\n        }\n        if (!this._cache.has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(util.getValidEnumValues(this._def.values));\n        }\n        if (!this._cache.has(input.data)) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return INVALID;\n                    if (result.status === \"dirty\")\n                        return DIRTY(result.value);\n                    if (status.value === \"dirty\")\n                        return DIRTY(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return INVALID;\n                if (result.status === \"dirty\")\n                    return DIRTY(result.value);\n                if (status.value === \"dirty\")\n                    return DIRTY(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return INVALID;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n                    if (!isValid(base))\n                        return INVALID;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n                        status: status.value,\n                        value: result,\n                    }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nexport class ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nexport class ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if (isValid(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n//////////                    //////////\n//////////      z.custom      //////////\n//////////                    //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n    const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n    const p2 = typeof p === \"string\" ? { message: p } : p;\n    return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            const r = check(data);\n            if (r instanceof Promise) {\n                return r.then((r) => {\n                    if (!r) {\n                        const params = cleanParams(_params, data);\n                        const _fatal = params.fatal ?? fatal ?? true;\n                        ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n                    }\n                });\n            }\n            if (!r) {\n                const params = cleanParams(_params, data);\n                const _fatal = params.fatal ?? fatal ?? true;\n                ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n            }\n            return;\n        });\n    return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n    object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n    constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { z } from \"zod\";\nexport var Edge;\n(function (Edge) {\n    Edge[Edge[\"EXTEND\"] = 1] = \"EXTEND\";\n    Edge[Edge[\"WRAP\"] = 2] = \"WRAP\";\n    Edge[Edge[\"CROP\"] = 3] = \"CROP\";\n})(Edge || (Edge = {}));\nexport const JimpClassSchema = z.object({\n    bitmap: z.object({\n        data: z.union([z.instanceof(Buffer), z.instanceof(Uint8Array)]),\n        width: z.number(),\n        height: z.number(),\n    }),\n});\n//# sourceMappingURL=index.js.map","import { JimpClassSchema } from \"@jimp/types\";\nimport { limit255, scan } from \"@jimp/utils\";\nimport { z } from \"zod\";\nconst BlitOptionsSchemaComplex = z.object({\n    src: JimpClassSchema,\n    /** the x position to blit the image */\n    x: z.number().optional(),\n    /** the y position to blit the image */\n    y: z.number().optional(),\n    /** the x position from which to crop the source image */\n    srcX: z.number().optional(),\n    /** the y position from which to crop the source image */\n    srcY: z.number().optional(),\n    /** the width to which to crop the source image */\n    srcW: z.number().optional(),\n    /** the height to which to crop the source image */\n    srcH: z.number().optional(),\n});\nconst BlitOptionsSchema = z.union([JimpClassSchema, BlitOptionsSchemaComplex]);\nexport const methods = {\n    /**\n     * Short for \"bit-block transfer\".\n     * It involves the transfer of a block of pixel data from one area of a computer's memory to another area, typically for the purpose of rendering images on the screen or manipulating them in various ways.\n     * It's a fundamental operation in computer graphics utilized in various applications, from operating systems to video games.\n     *\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     * const parrot = await Jimp.read(\"test/party-parrot.png\");\n     *\n     * image.blit({ src: parrot, x: 10, y: 10 });\n     * ```\n     */\n    blit(image, options) {\n        const parsed = BlitOptionsSchema.parse(options);\n        let { \n        // eslint-disable-next-line prefer-const\n        src, x = 0, y = 0, srcX = 0, srcY = 0, srcW = src.bitmap.width, srcH = src.bitmap.height, } = \"bitmap\" in parsed ? { src: parsed } : parsed;\n        if (!(\"bitmap\" in src)) {\n            throw new Error(\"The source must be a Jimp image\");\n        }\n        if (typeof x !== \"number\" || typeof y !== \"number\") {\n            throw new Error(\"x and y must be numbers\");\n        }\n        // round input\n        x = Math.round(x);\n        y = Math.round(y);\n        // round input\n        srcX = Math.round(srcX);\n        srcY = Math.round(srcY);\n        srcW = Math.round(srcW);\n        srcH = Math.round(srcH);\n        const maxWidth = image.bitmap.width;\n        const maxHeight = image.bitmap.height;\n        scan(src, srcX, srcY, srcW, srcH, function (sx, sy, idx) {\n            const xOffset = x + sx - srcX;\n            const yOffset = y + sy - srcY;\n            if (xOffset >= 0 &&\n                yOffset >= 0 &&\n                maxWidth - xOffset > 0 &&\n                maxHeight - yOffset > 0) {\n                const dstIdx = image.getPixelIndex(xOffset, yOffset);\n                const srcColor = {\n                    r: src.bitmap.data[idx] || 0,\n                    g: src.bitmap.data[idx + 1] || 0,\n                    b: src.bitmap.data[idx + 2] || 0,\n                    a: src.bitmap.data[idx + 3] || 0,\n                };\n                const dst = {\n                    r: image.bitmap.data[dstIdx] || 0,\n                    g: image.bitmap.data[dstIdx + 1] || 0,\n                    b: image.bitmap.data[dstIdx + 2] || 0,\n                    a: image.bitmap.data[dstIdx + 3] || 0,\n                };\n                image.bitmap.data[dstIdx] =\n                    ((srcColor.a * (srcColor.r - dst.r) - dst.r + 255) >> 8) + dst.r;\n                image.bitmap.data[dstIdx + 1] =\n                    ((srcColor.a * (srcColor.g - dst.g) - dst.g + 255) >> 8) + dst.g;\n                image.bitmap.data[dstIdx + 2] =\n                    ((srcColor.a * (srcColor.b - dst.b) - dst.b + 255) >> 8) + dst.b;\n                image.bitmap.data[dstIdx + 3] = limit255(dst.a + srcColor.a);\n            }\n        });\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","export const mulTable = [\n    1, 57, 41, 21, 203, 34, 97, 73, 227, 91, 149, 62, 105, 45, 39, 137, 241, 107,\n    3, 173, 39, 71, 65, 238, 219, 101, 187, 87, 81, 151, 141, 133, 249, 117, 221,\n    209, 197, 187, 177, 169, 5, 153, 73, 139, 133, 127, 243, 233, 223, 107, 103,\n    99, 191, 23, 177, 171, 165, 159, 77, 149, 9, 139, 135, 131, 253, 245, 119,\n    231, 224, 109, 211, 103, 25, 195, 189, 23, 45, 175, 171, 83, 81, 79, 155, 151,\n    147, 9, 141, 137, 67, 131, 129, 251, 123, 30, 235, 115, 113, 221, 217, 53, 13,\n    51, 50, 49, 193, 189, 185, 91, 179, 175, 43, 169, 83, 163, 5, 79, 155, 19, 75,\n    147, 145, 143, 35, 69, 17, 67, 33, 65, 255, 251, 247, 243, 239, 59, 29, 229,\n    113, 111, 219, 27, 213, 105, 207, 51, 201, 199, 49, 193, 191, 47, 93, 183,\n    181, 179, 11, 87, 43, 85, 167, 165, 163, 161, 159, 157, 155, 77, 19, 75, 37,\n    73, 145, 143, 141, 35, 138, 137, 135, 67, 33, 131, 129, 255, 63, 250, 247, 61,\n    121, 239, 237, 117, 29, 229, 227, 225, 111, 55, 109, 216, 213, 211, 209, 207,\n    205, 203, 201, 199, 197, 195, 193, 48, 190, 47, 93, 185, 183, 181, 179, 178,\n    176, 175, 173, 171, 85, 21, 167, 165, 41, 163, 161, 5, 79, 157, 78, 154, 153,\n    19, 75, 149, 74, 147, 73, 144, 143, 71, 141, 140, 139, 137, 17, 135, 134, 133,\n    66, 131, 65, 129, 1,\n];\nexport const shgTable = [\n    0, 9, 10, 10, 14, 12, 14, 14, 16, 15, 16, 15, 16, 15, 15, 17, 18, 17, 12, 18,\n    16, 17, 17, 19, 19, 18, 19, 18, 18, 19, 19, 19, 20, 19, 20, 20, 20, 20, 20,\n    20, 15, 20, 19, 20, 20, 20, 21, 21, 21, 20, 20, 20, 21, 18, 21, 21, 21, 21,\n    20, 21, 17, 21, 21, 21, 22, 22, 21, 22, 22, 21, 22, 21, 19, 22, 22, 19, 20,\n    22, 22, 21, 21, 21, 22, 22, 22, 18, 22, 22, 21, 22, 22, 23, 22, 20, 23, 22,\n    22, 23, 23, 21, 19, 21, 21, 21, 23, 23, 23, 22, 23, 23, 21, 23, 22, 23, 18,\n    22, 23, 20, 22, 23, 23, 23, 21, 22, 20, 22, 21, 22, 24, 24, 24, 24, 24, 22,\n    21, 24, 23, 23, 24, 21, 24, 23, 24, 22, 24, 24, 22, 24, 24, 22, 23, 24, 24,\n    24, 20, 23, 22, 23, 24, 24, 24, 24, 24, 24, 24, 23, 21, 23, 22, 23, 24, 24,\n    24, 22, 24, 24, 24, 23, 22, 24, 24, 25, 23, 25, 25, 23, 24, 25, 25, 24, 22,\n    25, 25, 25, 24, 23, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 23,\n    25, 23, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 24, 22, 25, 25, 23, 25, 25,\n    20, 24, 25, 24, 25, 25, 22, 24, 25, 24, 25, 24, 25, 25, 24, 25, 25, 25, 25,\n    22, 25, 25, 25, 24, 25, 24, 25, 18,\n];\n//# sourceMappingURL=blur-tables.js.map","import { mulTable, shgTable } from \"./blur-tables.js\";\nimport { limit255 } from \"@jimp/utils\";\n/*\n    Superfast Blur (0.5)\n    http://www.quasimondo.com/BoxBlurForCanvas/FastBlur.js\n\n    Copyright (c) 2011 Mario Klingemann\n\n    Permission is hereby granted, free of charge, to any person\n    obtaining a copy of this software and associated documentation\n    files (the \"Software\"), to deal in the Software without\n    restriction, including without limitation the rights to use,\n    copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the\n    Software is furnished to do so, subject to the following\n    conditions:\n\n    The above copyright notice and this permission notice shall be\n    included in all copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n    OTHER DEALINGS IN THE SOFTWARE.\n*/\nexport const methods = {\n    /**\n     * A fast blur algorithm that produces similar effect to a Gaussian blur - but MUCH quicker\n     * @param r the pixel radius of the blur\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.blur(5);\n     * ```\n     */\n    blur(image, r) {\n        if (typeof r !== \"number\") {\n            throw new Error(\"r must be a number\");\n        }\n        if (r < 1) {\n            throw new Error(\"r must be greater than 0\");\n        }\n        let rsum;\n        let gsum;\n        let bsum;\n        let asum;\n        let x;\n        let y;\n        let i;\n        let p;\n        let p1;\n        let p2;\n        let yp;\n        let yi;\n        let yw;\n        const wm = image.bitmap.width - 1;\n        const hm = image.bitmap.height - 1;\n        // const wh = image.bitmap.width * image.bitmap.height;\n        const rad1 = r + 1;\n        const mulSum = mulTable[r];\n        const shgSum = shgTable[r];\n        const red = [];\n        const green = [];\n        const blue = [];\n        const alpha = [];\n        const vmin = [];\n        const vmax = [];\n        let iterations = 2;\n        while (iterations-- > 0) {\n            yi = 0;\n            yw = 0;\n            for (y = 0; y < image.bitmap.height; y++) {\n                rsum = image.bitmap.data[yw] * rad1;\n                gsum = image.bitmap.data[yw + 1] * rad1;\n                bsum = image.bitmap.data[yw + 2] * rad1;\n                asum = image.bitmap.data[yw + 3] * rad1;\n                for (i = 1; i <= r; i++) {\n                    p = yw + ((i > wm ? wm : i) << 2);\n                    rsum += image.bitmap.data[p++];\n                    gsum += image.bitmap.data[p++];\n                    bsum += image.bitmap.data[p++];\n                    asum += image.bitmap.data[p];\n                }\n                for (x = 0; x < image.bitmap.width; x++) {\n                    red[yi] = rsum;\n                    green[yi] = gsum;\n                    blue[yi] = bsum;\n                    alpha[yi] = asum;\n                    if (y === 0) {\n                        vmin[x] = ((p = x + rad1) < wm ? p : wm) << 2;\n                        vmax[x] = (p = x - r) > 0 ? p << 2 : 0;\n                    }\n                    p1 = yw + vmin[x];\n                    p2 = yw + vmax[x];\n                    rsum += image.bitmap.data[p1++] - image.bitmap.data[p2++];\n                    gsum += image.bitmap.data[p1++] - image.bitmap.data[p2++];\n                    bsum += image.bitmap.data[p1++] - image.bitmap.data[p2++];\n                    asum += image.bitmap.data[p1] - image.bitmap.data[p2++];\n                    yi++;\n                }\n                yw += image.bitmap.width << 2;\n            }\n            for (x = 0; x < image.bitmap.width; x++) {\n                yp = x;\n                rsum = red[yp] * rad1;\n                gsum = green[yp] * rad1;\n                bsum = blue[yp] * rad1;\n                asum = alpha[yp] * rad1;\n                for (i = 1; i <= r; i++) {\n                    yp += i > hm ? 0 : image.bitmap.width;\n                    rsum += red[yp];\n                    gsum += green[yp];\n                    bsum += blue[yp];\n                    asum += alpha[yp];\n                }\n                yi = x << 2;\n                for (y = 0; y < image.bitmap.height; y++) {\n                    image.bitmap.data[yi] = limit255((rsum * mulSum) >>> shgSum);\n                    image.bitmap.data[yi + 1] = limit255((gsum * mulSum) >>> shgSum);\n                    image.bitmap.data[yi + 2] = limit255((bsum * mulSum) >>> shgSum);\n                    image.bitmap.data[yi + 3] = limit255((asum * mulSum) >>> shgSum);\n                    if (x === 0) {\n                        vmin[y] = ((p = y + rad1) < hm ? p : hm) * image.bitmap.width;\n                        vmax[y] = (p = y - r) > 0 ? p * image.bitmap.width : 0;\n                    }\n                    p1 = x + vmin[y];\n                    p2 = x + vmax[y];\n                    rsum += red[p1] - red[p2];\n                    gsum += green[p1] - green[p2];\n                    bsum += blue[p1] - blue[p2];\n                    asum += alpha[p1] - alpha[p2];\n                    yi += image.bitmap.width << 2;\n                }\n            }\n        }\n        return image;\n    },\n    // http://blog.ivank.net/fastest-gaussian-blur.html\n    /**\n     * Applies a true Gaussian blur to the image (warning: this is VERY slow)\n     * @param r the pixel radius of the blur\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.gaussian(15);\n     * ```\n     */\n    gaussian(image, r) {\n        if (typeof r !== \"number\") {\n            throw new Error(\"r must be a number\");\n        }\n        if (r < 1) {\n            throw new Error(\"r must be greater than 0\");\n        }\n        const rs = Math.ceil(r * 2.57); // significant radius\n        const range = rs * 2 + 1;\n        const rr2 = r * r * 2;\n        const rr2pi = rr2 * Math.PI;\n        const weights = [];\n        for (let y = 0; y < range; y++) {\n            const weightsRow = [];\n            for (let x = 0; x < range; x++) {\n                const dsq = (x - rs) ** 2 + (y - rs) ** 2;\n                weightsRow[x] = Math.exp(-dsq / rr2) / rr2pi;\n            }\n            weights.push(weightsRow);\n        }\n        for (let y = 0; y < image.bitmap.height; y++) {\n            for (let x = 0; x < image.bitmap.width; x++) {\n                let red = 0;\n                let green = 0;\n                let blue = 0;\n                let alpha = 0;\n                let wsum = 0;\n                for (let iy = 0; iy < range; iy++) {\n                    for (let ix = 0; ix < range; ix++) {\n                        const x1 = Math.min(image.bitmap.width - 1, Math.max(0, ix + x - rs));\n                        const y1 = Math.min(image.bitmap.height - 1, Math.max(0, iy + y - rs));\n                        const weight = weights[iy][ix];\n                        const idx = (y1 * image.bitmap.width + x1) << 2;\n                        red += image.bitmap.data[idx] * weight;\n                        green += image.bitmap.data[idx + 1] * weight;\n                        blue += image.bitmap.data[idx + 2] * weight;\n                        alpha += image.bitmap.data[idx + 3] * weight;\n                        wsum += weight;\n                    }\n                    const idx = (y * image.bitmap.width + x) << 2;\n                    image.bitmap.data[idx] = Math.round(red / wsum);\n                    image.bitmap.data[idx + 1] = Math.round(green / wsum);\n                    image.bitmap.data[idx + 2] = Math.round(blue / wsum);\n                    image.bitmap.data[idx + 3] = Math.round(alpha / wsum);\n                }\n            }\n        }\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","import { z } from \"zod\";\nconst CircleOptionsSchema = z.object({\n    /** the x position to draw the circle */\n    x: z.number().optional(),\n    /** the y position to draw the circle */\n    y: z.number().optional(),\n    /** the radius of the circle */\n    radius: z.number().min(0).optional(),\n});\nexport const methods = {\n    /**\n     * Creates a circle out of an image.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.circle();\n     * // or\n     * image.circle({ radius: 50, x: 25, y: 25 });\n     * ```\n     */\n    circle(image, options = {}) {\n        const parsed = CircleOptionsSchema.parse(options);\n        const radius = parsed.radius ||\n            (image.bitmap.width > image.bitmap.height\n                ? image.bitmap.height\n                : image.bitmap.width) / 2;\n        const center = {\n            x: typeof parsed.x === \"number\" ? parsed.x : image.bitmap.width / 2,\n            y: typeof parsed.y === \"number\" ? parsed.y : image.bitmap.height / 2,\n        };\n        image.scan((x, y, idx) => {\n            const curR = Math.sqrt(Math.pow(x - center.x, 2) + Math.pow(y - center.y, 2));\n            if (radius - curR <= 0.0) {\n                image.bitmap.data[idx + 3] = 0;\n            }\n            else if (radius - curR < 1.0) {\n                image.bitmap.data[idx + 3] = 255 * (radius - curR);\n            }\n        });\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","import tinyColor from \"tinycolor2\";\nimport { clone, limit255, scan } from \"@jimp/utils\";\nimport { Edge } from \"@jimp/types\";\nimport { z } from \"zod\";\nconst ConvolutionMatrixSchema = z.array(z.number()).min(1).array();\nconst ConvolutionComplexOptionsSchema = z.object({\n    /** a matrix to weight the neighbors sum */\n    kernel: ConvolutionMatrixSchema,\n    /**define how to sum pixels from outside the border */\n    edgeHandling: z.nativeEnum(Edge).optional(),\n});\nconst ConvolutionOptionsSchema = z.union([\n    ConvolutionMatrixSchema,\n    ConvolutionComplexOptionsSchema,\n]);\nconst ConvoluteComplexOptionsSchema = z.object({\n    /** the convolution kernel */\n    kernel: ConvolutionMatrixSchema,\n    /** the x position of the region to apply convolution to */\n    x: z.number().optional(),\n    /** the y position of the region to apply convolution to */\n    y: z.number().optional(),\n    /** the width of the region to apply convolution to */\n    w: z.number().optional(),\n    /** the height of the region to apply convolution to */\n    h: z.number().optional(),\n});\nconst ConvoluteOptionsSchema = z.union([\n    ConvolutionMatrixSchema,\n    ConvoluteComplexOptionsSchema,\n]);\nconst PixelateSize = z.number().min(1).max(Infinity);\nconst PixelateComplexOptionsSchema = z.object({\n    /** the size of the pixels */\n    size: PixelateSize,\n    /** the x position of the region to pixelate */\n    x: z.number().optional(),\n    /** the y position of the region to pixelate */\n    y: z.number().optional(),\n    /** the width of the region to pixelate */\n    w: z.number().optional(),\n    /** the height of the region to pixelate */\n    h: z.number().optional(),\n});\nconst PixelateOptionsSchema = z.union([\n    PixelateSize,\n    PixelateComplexOptionsSchema,\n]);\nfunction applyKernel(image, kernel, x, y) {\n    const value = [0, 0, 0, 0];\n    const size = (kernel.length - 1) / 2;\n    for (let kx = 0; kx < kernel.length; kx += 1) {\n        for (let ky = 0; ky < kernel[kx].length; ky += 1) {\n            const idx = image.getPixelIndex(x + kx - size, y + ky - size);\n            value[0] += image.bitmap.data[idx] * kernel[kx][ky];\n            value[1] += image.bitmap.data[idx + 1] * kernel[kx][ky];\n            value[2] += image.bitmap.data[idx + 2] * kernel[kx][ky];\n            value[3] += image.bitmap.data[idx + 3] * kernel[kx][ky];\n        }\n    }\n    return value;\n}\nfunction mix(clr, clr2, p = 50) {\n    return {\n        r: (clr2.r - clr.r) * (p / 100) + clr.r,\n        g: (clr2.g - clr.g) * (p / 100) + clr.g,\n        b: (clr2.b - clr.b) * (p / 100) + clr.b,\n    };\n}\nconst HueActionSchema = z.object({\n    apply: z.literal(\"hue\"),\n    params: z.tuple([z.number().min(-360).max(360)]),\n});\nconst SpinActionSchema = z.object({\n    apply: z.literal(\"spin\"),\n    params: z.tuple([z.number().min(-360).max(360)]),\n});\nconst LightenActionSchema = z.object({\n    apply: z.literal(\"lighten\"),\n    params: z.tuple([z.number().min(0).max(100)]).optional(),\n});\nconst RGBColorSchema = z.object({\n    r: z.number().min(0).max(255),\n    g: z.number().min(0).max(255),\n    b: z.number().min(0).max(255),\n});\nconst MixActionSchema = z.object({\n    apply: z.literal(\"mix\"),\n    params: z.union([\n        z.tuple([RGBColorSchema]),\n        z.tuple([RGBColorSchema, z.number().min(0).max(100)]),\n    ]),\n});\nconst TintActionSchema = z.object({\n    apply: z.literal(\"tint\"),\n    params: z.tuple([z.number().min(0).max(100)]).optional(),\n});\nconst ShadeActionSchema = z.object({\n    apply: z.literal(\"shade\"),\n    params: z.tuple([z.number().min(0).max(100)]).optional(),\n});\nconst XorActionSchema = z.object({\n    apply: z.literal(\"xor\"),\n    params: z.tuple([RGBColorSchema]),\n});\nconst RedActionSchema = z.object({\n    apply: z.literal(\"red\"),\n    params: z.tuple([z.number().min(-255).max(255)]),\n});\nconst GreenActionSchema = z.object({\n    apply: z.literal(\"green\"),\n    params: z.tuple([z.number().min(-255).max(255)]),\n});\nconst BlueActionSchema = z.object({\n    apply: z.literal(\"blue\"),\n    params: z.tuple([z.number().min(-255).max(255)]),\n});\nconst BrightenActionSchema = z.object({\n    apply: z.literal(\"brighten\"),\n    params: z.tuple([z.number().min(0).max(100)]).optional(),\n});\nconst DarkenActionSchema = z.object({\n    apply: z.literal(\"darken\"),\n    params: z.tuple([z.number().min(0).max(100)]).optional(),\n});\nconst DesaturateActionSchema = z.object({\n    apply: z.literal(\"desaturate\"),\n    params: z.tuple([z.number().min(0).max(100)]).optional(),\n});\nconst SaturateActionSchema = z.object({\n    apply: z.literal(\"saturate\"),\n    params: z.tuple([z.number().min(0).max(100)]).optional(),\n});\nconst GrayscaleActionSchema = z.object({\n    apply: z.literal(\"greyscale\"),\n    params: z.tuple([]).optional(),\n});\nconst ColorActionNameSchema = z.union([\n    HueActionSchema,\n    SpinActionSchema,\n    LightenActionSchema,\n    MixActionSchema,\n    TintActionSchema,\n    ShadeActionSchema,\n    XorActionSchema,\n    RedActionSchema,\n    GreenActionSchema,\n    BlueActionSchema,\n    BrightenActionSchema,\n    DarkenActionSchema,\n    DesaturateActionSchema,\n    SaturateActionSchema,\n    GrayscaleActionSchema,\n]);\nexport const ColorActionName = Object.freeze({\n    LIGHTEN: \"lighten\",\n    BRIGHTEN: \"brighten\",\n    DARKEN: \"darken\",\n    DESATURATE: \"desaturate\",\n    SATURATE: \"saturate\",\n    GREYSCALE: \"greyscale\",\n    SPIN: \"spin\",\n    HUE: \"hue\",\n    MIX: \"mix\",\n    TINT: \"tint\",\n    SHADE: \"shade\",\n    XOR: \"xor\",\n    RED: \"red\",\n    GREEN: \"green\",\n    BLUE: \"blue\",\n});\n/**\n * Get an image's histogram\n * @return An object with an array of color occurrence counts for each channel (r,g,b)\n */\nfunction histogram(image) {\n    const histogram = {\n        r: new Array(256).fill(0),\n        g: new Array(256).fill(0),\n        b: new Array(256).fill(0),\n    };\n    image.scan((_, __, index) => {\n        histogram.r[image.bitmap.data[index + 0]]++;\n        histogram.g[image.bitmap.data[index + 1]]++;\n        histogram.b[image.bitmap.data[index + 2]]++;\n    });\n    return histogram;\n}\n/**\n * Normalize values\n * @param  value Pixel channel value.\n * @param  min   Minimum value for channel\n * @param  max   Maximum value for channel\n */\nconst normalizeValue = function (value, min, max) {\n    return ((value - min) * 255) / (max - min);\n};\nconst getBounds = function (histogramChannel) {\n    return [\n        histogramChannel.findIndex((value) => value > 0),\n        255 -\n            histogramChannel\n                .slice()\n                .reverse()\n                .findIndex((value) => value > 0),\n    ];\n};\nexport const methods = {\n    /**\n     * Normalizes the image.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.normalize();\n     * ```\n     */\n    normalize(image) {\n        const h = histogram(image);\n        // store bounds (minimum and maximum values)\n        const bounds = {\n            r: getBounds(h.r),\n            g: getBounds(h.g),\n            b: getBounds(h.b),\n        };\n        // apply value transformations\n        image.scan((_, __, idx) => {\n            const r = image.bitmap.data[idx + 0];\n            const g = image.bitmap.data[idx + 1];\n            const b = image.bitmap.data[idx + 2];\n            image.bitmap.data[idx + 0] = normalizeValue(r, bounds.r[0], bounds.r[1]);\n            image.bitmap.data[idx + 1] = normalizeValue(g, bounds.g[0], bounds.g[1]);\n            image.bitmap.data[idx + 2] = normalizeValue(b, bounds.b[0], bounds.b[1]);\n        });\n        return image;\n    },\n    /**\n     * Inverts the colors in the image.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.invert();\n     * ```\n     */\n    invert(image) {\n        image.scan((_, __, idx) => {\n            image.bitmap.data[idx] = 255 - image.bitmap.data[idx];\n            image.bitmap.data[idx + 1] = 255 - image.bitmap.data[idx + 1];\n            image.bitmap.data[idx + 2] = 255 - image.bitmap.data[idx + 2];\n        });\n        return image;\n    },\n    /**\n     * Adjusts the brightness of the image\n     * @param val the amount to adjust the brightness.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.brightness(0.5);\n     * ```\n     */\n    brightness(image, val) {\n        if (typeof val !== \"number\") {\n            throw new Error(\"val must be numbers\");\n        }\n        image.scan((_, __, idx) => {\n            image.bitmap.data[idx] = limit255(image.bitmap.data[idx] * val);\n            image.bitmap.data[idx + 1] = limit255(image.bitmap.data[idx + 1] * val);\n            image.bitmap.data[idx + 2] = limit255(image.bitmap.data[idx + 2] * val);\n        });\n        return image;\n    },\n    /**\n     * Adjusts the contrast of the image\n     * @param val the amount to adjust the contrast, a number between -1 and +1\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.contrast(0.75);\n     * ```\n     */\n    contrast(image, val) {\n        if (typeof val !== \"number\") {\n            throw new Error(\"val must be numbers\");\n        }\n        if (val < -1 || val > +1) {\n            throw new Error(\"val must be a number between -1 and +1\");\n        }\n        const factor = (val + 1) / (1 - val);\n        function adjust(value) {\n            value = Math.floor(factor * (value - 127) + 127);\n            return value < 0 ? 0 : value > 255 ? 255 : value;\n        }\n        image.scan((_, __, idx) => {\n            image.bitmap.data[idx] = adjust(image.bitmap.data[idx]);\n            image.bitmap.data[idx + 1] = adjust(image.bitmap.data[idx + 1]);\n            image.bitmap.data[idx + 2] = adjust(image.bitmap.data[idx + 2]);\n        });\n        return image;\n    },\n    /**\n     * Apply a posterize effect\n     * @param  n the amount to adjust the contrast, minimum threshold is two\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.posterize(5);\n     * ```\n     */\n    posterize(image, n) {\n        if (typeof n !== \"number\") {\n            throw new Error(\"n must be numbers\");\n        }\n        // minimum of 2 levels\n        if (n < 2) {\n            n = 2;\n        }\n        image.scan((_, __, idx) => {\n            const r = image.bitmap.data[idx];\n            const g = image.bitmap.data[idx + 1];\n            const b = image.bitmap.data[idx + 2];\n            image.bitmap.data[idx] =\n                (Math.floor((r / 255) * (n - 1)) / (n - 1)) * 255;\n            image.bitmap.data[idx + 1] =\n                (Math.floor((g / 255) * (n - 1)) / (n - 1)) * 255;\n            image.bitmap.data[idx + 2] =\n                (Math.floor((b / 255) * (n - 1)) / (n - 1)) * 255;\n        });\n        return image;\n    },\n    /**\n     * Removes colour from the image using ITU Rec 709 luminance values\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.greyscale();\n     * ```\n     */\n    greyscale(image) {\n        image.scan((_, __, idx) => {\n            // const grey = parseInt(\n            //   0.2126 * image.bitmap.data[idx]! +\n            //     0.7152 * image.bitmap.data[idx + 1]! +\n            //     0.0722 * image.bitmap.data[idx + 2]!,\n            //   10\n            // );\n            const grey = 0.2126 * image.bitmap.data[idx] +\n                0.7152 * image.bitmap.data[idx + 1] +\n                0.0722 * image.bitmap.data[idx + 2];\n            image.bitmap.data[idx] = grey;\n            image.bitmap.data[idx + 1] = grey;\n            image.bitmap.data[idx + 2] = grey;\n        });\n        return image;\n    },\n    /**\n     * Multiplies the opacity of each pixel by a factor between 0 and 1\n     * @param f A number, the factor by which to multiply the opacity of each pixel\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.opacity(0.5);\n     * ```\n     */\n    opacity(image, f) {\n        if (typeof f !== \"number\") {\n            throw new Error(\"f must be a number\");\n        }\n        if (f < 0 || f > 1) {\n            throw new Error(\"f must be a number from 0 to 1\");\n        }\n        image.scan((_, __, idx) => {\n            const v = image.bitmap.data[idx + 3] * f;\n            image.bitmap.data[idx + 3] = v;\n        });\n        return image;\n    },\n    /**\n     * Applies a sepia tone to the image.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.sepia();\n     * ```\n     */\n    sepia(image) {\n        image.scan((_, __, idx) => {\n            let red = image.bitmap.data[idx];\n            let green = image.bitmap.data[idx + 1];\n            let blue = image.bitmap.data[idx + 2];\n            red = red * 0.393 + green * 0.769 + blue * 0.189;\n            green = red * 0.349 + green * 0.686 + blue * 0.168;\n            blue = red * 0.272 + green * 0.534 + blue * 0.131;\n            image.bitmap.data[idx] = red < 255 ? red : 255;\n            image.bitmap.data[idx + 1] = green < 255 ? green : 255;\n            image.bitmap.data[idx + 2] = blue < 255 ? blue : 255;\n        });\n        return image;\n    },\n    /**\n     * Fades each pixel by a factor between 0 and 1\n     * @param f A number from 0 to 1. 0 will haven no effect. 1 will turn the image completely transparent.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.fade(0.7);\n     * ```\n     */\n    fade(image, f) {\n        if (typeof f !== \"number\") {\n            throw new Error(\"f must be a number\");\n        }\n        if (f < 0 || f > 1) {\n            throw new Error(\"f must be a number from 0 to 1\");\n        }\n        // this method is an alternative to opacity (which may be deprecated)\n        return this.opacity(image, 1 - f);\n    },\n    /**\n     * Adds each element of the image to its local neighbors, weighted by the kernel\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.convolute([\n     *   [-1, -1, 0],\n     *   [-1, 1, 1],\n     *   [0, 1, 1],\n     * ]);\n     * ```\n     */\n    convolution(image, options) {\n        const parsed = ConvolutionOptionsSchema.parse(options);\n        const { kernel, edgeHandling = Edge.EXTEND } = \"kernel\" in parsed ? parsed : { kernel: parsed, edgeHandling: undefined };\n        if (!kernel[0]) {\n            throw new Error(\"kernel must be a matrix\");\n        }\n        const newData = Buffer.from(image.bitmap.data);\n        const kRows = kernel.length;\n        const kCols = kernel[0].length;\n        const rowEnd = Math.floor(kRows / 2);\n        const colEnd = Math.floor(kCols / 2);\n        const rowIni = -rowEnd;\n        const colIni = -colEnd;\n        let weight;\n        let rSum;\n        let gSum;\n        let bSum;\n        let ri;\n        let gi;\n        let bi;\n        let xi;\n        let yi;\n        let idxi;\n        image.scan((x, y, idx) => {\n            bSum = 0;\n            gSum = 0;\n            rSum = 0;\n            for (let row = rowIni; row <= rowEnd; row++) {\n                for (let col = colIni; col <= colEnd; col++) {\n                    xi = x + col;\n                    yi = y + row;\n                    weight = kernel[row + rowEnd][col + colEnd];\n                    idxi = image.getPixelIndex(xi, yi, edgeHandling);\n                    if (idxi === -1) {\n                        bi = 0;\n                        gi = 0;\n                        ri = 0;\n                    }\n                    else {\n                        ri = image.bitmap.data[idxi + 0];\n                        gi = image.bitmap.data[idxi + 1];\n                        bi = image.bitmap.data[idxi + 2];\n                    }\n                    rSum += weight * ri;\n                    gSum += weight * gi;\n                    bSum += weight * bi;\n                }\n            }\n            if (rSum < 0) {\n                rSum = 0;\n            }\n            if (gSum < 0) {\n                gSum = 0;\n            }\n            if (bSum < 0) {\n                bSum = 0;\n            }\n            if (rSum > 255) {\n                rSum = 255;\n            }\n            if (gSum > 255) {\n                gSum = 255;\n            }\n            if (bSum > 255) {\n                bSum = 255;\n            }\n            newData[idx + 0] = rSum;\n            newData[idx + 1] = gSum;\n            newData[idx + 2] = bSum;\n        });\n        image.bitmap.data = newData;\n        return image;\n    },\n    /**\n     * Set the alpha channel on every pixel to fully opaque.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.opaque();\n     * ```\n     */\n    opaque(image) {\n        image.scan((_, __, idx) => {\n            image.bitmap.data[idx + 3] = 255;\n        });\n        return image;\n    },\n    /**\n     * Pixelates the image or a region\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * // pixelate the whole image\n     * image.pixelate(10);\n     *\n     * // pixelate a region\n     * image.pixelate(10, 10, 10, 20, 20);\n     * ```\n     */\n    pixelate(image, options) {\n        const parsed = PixelateOptionsSchema.parse(options);\n        const { size, x = 0, y = 0, w = image.bitmap.width - x, h = image.bitmap.height - y, } = typeof parsed === \"number\"\n            ? { size: parsed }\n            : parsed;\n        const kernel = [\n            [1 / 16, 2 / 16, 1 / 16],\n            [2 / 16, 4 / 16, 2 / 16],\n            [1 / 16, 2 / 16, 1 / 16],\n        ];\n        const source = clone(image);\n        scan(source, x, y, w, h, (xx, yx, idx) => {\n            xx = size * Math.floor(xx / size);\n            yx = size * Math.floor(yx / size);\n            const value = applyKernel(source, kernel, xx, yx);\n            image.bitmap.data[idx] = value[0];\n            image.bitmap.data[idx + 1] = value[1];\n            image.bitmap.data[idx + 2] = value[2];\n            image.bitmap.data[idx + 3] = value[3];\n        });\n        return image;\n    },\n    /**\n     * Applies a convolution kernel to the image or a region\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * // apply a convolution kernel to the whole image\n     * image.convolution([\n     *   [-1, -1, 0],\n     *   [-1, 1, 1],\n     *   [0, 1, 1],\n     * ]);\n     *\n     * // apply a convolution kernel to a region\n     * image.convolution([\n     *   [-1, -1, 0],\n     *   [-1, 1, 1],\n     *   [0, 1, 1],\n     * ], 10, 10, 10, 20);\n     * ```\n     */\n    convolute(image, options) {\n        const parsed = ConvoluteOptionsSchema.parse(options);\n        const { kernel, x = 0, y = 0, w = image.bitmap.width - x, h = image.bitmap.height - y, } = \"kernel\" in parsed\n            ? parsed\n            : { kernel: parsed };\n        const source = clone(image);\n        scan(source, x, y, w, h, (xx, yx, idx) => {\n            const value = applyKernel(source, kernel, xx, yx);\n            image.bitmap.data[idx] = limit255(value[0]);\n            image.bitmap.data[idx + 1] = limit255(value[1]);\n            image.bitmap.data[idx + 2] = limit255(value[2]);\n            image.bitmap.data[idx + 3] = limit255(value[3]);\n        });\n        return image;\n    },\n    /**\n     * Apply multiple color modification rules\n     * @param  actions list of color modification rules, in following format: { apply: '<rule-name>', params: [ <rule-parameters> ]  }\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.color([\n     *   { apply: \"hue\", params: [-90] },\n     *   { apply: \"lighten\", params: [50] },\n     *   { apply: \"xor\", params: [\"#06D\"] },\n     * ]);\n     * ```\n     */\n    color(image, actions) {\n        if (!actions || !Array.isArray(actions)) {\n            throw new Error(\"actions must be an array\");\n        }\n        actions.forEach((action) => ColorActionNameSchema.parse(action));\n        actions = actions.map((action) => {\n            if (action.apply === \"xor\" || action.apply === \"mix\") {\n                action.params[0] = tinyColor(action.params[0]).toRgb();\n            }\n            return action;\n        });\n        image.scan((_, __, idx) => {\n            let clr = {\n                r: image.bitmap.data[idx],\n                g: image.bitmap.data[idx + 1],\n                b: image.bitmap.data[idx + 2],\n            };\n            const colorModifier = (i, amount) => limit255(clr[i] + amount);\n            actions.forEach((action) => {\n                if (action.apply === \"mix\") {\n                    clr = mix(clr, action.params[0], action.params[1]);\n                }\n                else if (action.apply === \"tint\") {\n                    clr = mix(clr, { r: 255, g: 255, b: 255 }, action.params?.[0]);\n                }\n                else if (action.apply === \"shade\") {\n                    clr = mix(clr, { r: 0, g: 0, b: 0 }, action.params?.[0]);\n                }\n                else if (action.apply === \"xor\") {\n                    clr = {\n                        r: clr.r ^ action.params[0].r,\n                        g: clr.g ^ action.params[0].g,\n                        b: clr.b ^ action.params[0].b,\n                    };\n                }\n                else if (action.apply === \"red\") {\n                    clr.r = colorModifier(\"r\", action.params[0]);\n                }\n                else if (action.apply === \"green\") {\n                    clr.g = colorModifier(\"g\", action.params[0]);\n                }\n                else if (action.apply === \"blue\") {\n                    clr.b = colorModifier(\"b\", action.params[0]);\n                }\n                else {\n                    if (action.apply === \"hue\") {\n                        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                        // @ts-ignore\n                        action.apply = \"spin\";\n                    }\n                    const tnyClr = tinyColor(clr);\n                    const fn = tnyClr[action.apply].bind(tnyClr);\n                    if (!fn) {\n                        throw new Error(\"action \" + action.apply + \" not supported\");\n                    }\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    clr = fn(...(action.params || [])).toRgb();\n                }\n            });\n            image.bitmap.data[idx] = clr.r;\n            image.bitmap.data[idx + 1] = clr.g;\n            image.bitmap.data[idx + 2] = clr.b;\n        });\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AnsiStringType = exports.StringType = exports.BufferType = exports.Uint8ArrayType = exports.IgnoreType = exports.Float80_LE = exports.Float80_BE = exports.Float64_LE = exports.Float64_BE = exports.Float32_LE = exports.Float32_BE = exports.Float16_LE = exports.Float16_BE = exports.INT64_BE = exports.UINT64_BE = exports.INT64_LE = exports.UINT64_LE = exports.INT32_LE = exports.INT32_BE = exports.INT24_BE = exports.INT24_LE = exports.INT16_LE = exports.INT16_BE = exports.INT8 = exports.UINT32_BE = exports.UINT32_LE = exports.UINT24_BE = exports.UINT24_LE = exports.UINT16_BE = exports.UINT16_LE = exports.UINT8 = void 0;\nconst ieee754 = require(\"ieee754\");\n// Primitive types\nfunction dv(array) {\n    return new DataView(array.buffer, array.byteOffset);\n}\n/**\n * 8-bit unsigned integer\n */\nexports.UINT8 = {\n    len: 1,\n    get(array, offset) {\n        return dv(array).getUint8(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setUint8(offset, value);\n        return offset + 1;\n    }\n};\n/**\n * 16-bit unsigned integer, Little Endian byte order\n */\nexports.UINT16_LE = {\n    len: 2,\n    get(array, offset) {\n        return dv(array).getUint16(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setUint16(offset, value, true);\n        return offset + 2;\n    }\n};\n/**\n * 16-bit unsigned integer, Big Endian byte order\n */\nexports.UINT16_BE = {\n    len: 2,\n    get(array, offset) {\n        return dv(array).getUint16(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setUint16(offset, value);\n        return offset + 2;\n    }\n};\n/**\n * 24-bit unsigned integer, Little Endian byte order\n */\nexports.UINT24_LE = {\n    len: 3,\n    get(array, offset) {\n        const dataView = dv(array);\n        return dataView.getUint8(offset) + (dataView.getUint16(offset + 1, true) << 8);\n    },\n    put(array, offset, value) {\n        const dataView = dv(array);\n        dataView.setUint8(offset, value & 0xff);\n        dataView.setUint16(offset + 1, value >> 8, true);\n        return offset + 3;\n    }\n};\n/**\n * 24-bit unsigned integer, Big Endian byte order\n */\nexports.UINT24_BE = {\n    len: 3,\n    get(array, offset) {\n        const dataView = dv(array);\n        return (dataView.getUint16(offset) << 8) + dataView.getUint8(offset + 2);\n    },\n    put(array, offset, value) {\n        const dataView = dv(array);\n        dataView.setUint16(offset, value >> 8);\n        dataView.setUint8(offset + 2, value & 0xff);\n        return offset + 3;\n    }\n};\n/**\n * 32-bit unsigned integer, Little Endian byte order\n */\nexports.UINT32_LE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getUint32(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setUint32(offset, value, true);\n        return offset + 4;\n    }\n};\n/**\n * 32-bit unsigned integer, Big Endian byte order\n */\nexports.UINT32_BE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getUint32(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setUint32(offset, value);\n        return offset + 4;\n    }\n};\n/**\n * 8-bit signed integer\n */\nexports.INT8 = {\n    len: 1,\n    get(array, offset) {\n        return dv(array).getInt8(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setInt8(offset, value);\n        return offset + 1;\n    }\n};\n/**\n * 16-bit signed integer, Big Endian byte order\n */\nexports.INT16_BE = {\n    len: 2,\n    get(array, offset) {\n        return dv(array).getInt16(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setInt16(offset, value);\n        return offset + 2;\n    }\n};\n/**\n * 16-bit signed integer, Little Endian byte order\n */\nexports.INT16_LE = {\n    len: 2,\n    get(array, offset) {\n        return dv(array).getInt16(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setInt16(offset, value, true);\n        return offset + 2;\n    }\n};\n/**\n * 24-bit signed integer, Little Endian byte order\n */\nexports.INT24_LE = {\n    len: 3,\n    get(array, offset) {\n        const unsigned = exports.UINT24_LE.get(array, offset);\n        return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;\n    },\n    put(array, offset, value) {\n        const dataView = dv(array);\n        dataView.setUint8(offset, value & 0xff);\n        dataView.setUint16(offset + 1, value >> 8, true);\n        return offset + 3;\n    }\n};\n/**\n * 24-bit signed integer, Big Endian byte order\n */\nexports.INT24_BE = {\n    len: 3,\n    get(array, offset) {\n        const unsigned = exports.UINT24_BE.get(array, offset);\n        return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;\n    },\n    put(array, offset, value) {\n        const dataView = dv(array);\n        dataView.setUint16(offset, value >> 8);\n        dataView.setUint8(offset + 2, value & 0xff);\n        return offset + 3;\n    }\n};\n/**\n * 32-bit signed integer, Big Endian byte order\n */\nexports.INT32_BE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getInt32(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setInt32(offset, value);\n        return offset + 4;\n    }\n};\n/**\n * 32-bit signed integer, Big Endian byte order\n */\nexports.INT32_LE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getInt32(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setInt32(offset, value, true);\n        return offset + 4;\n    }\n};\n/**\n * 64-bit unsigned integer, Little Endian byte order\n */\nexports.UINT64_LE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getBigUint64(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setBigUint64(offset, value, true);\n        return offset + 8;\n    }\n};\n/**\n * 64-bit signed integer, Little Endian byte order\n */\nexports.INT64_LE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getBigInt64(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setBigInt64(offset, value, true);\n        return offset + 8;\n    }\n};\n/**\n * 64-bit unsigned integer, Big Endian byte order\n */\nexports.UINT64_BE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getBigUint64(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setBigUint64(offset, value);\n        return offset + 8;\n    }\n};\n/**\n * 64-bit signed integer, Big Endian byte order\n */\nexports.INT64_BE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getBigInt64(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setBigInt64(offset, value);\n        return offset + 8;\n    }\n};\n/**\n * IEEE 754 16-bit (half precision) float, big endian\n */\nexports.Float16_BE = {\n    len: 2,\n    get(dataView, offset) {\n        return ieee754.read(dataView, offset, false, 10, this.len);\n    },\n    put(dataView, offset, value) {\n        ieee754.write(dataView, value, offset, false, 10, this.len);\n        return offset + this.len;\n    }\n};\n/**\n * IEEE 754 16-bit (half precision) float, little endian\n */\nexports.Float16_LE = {\n    len: 2,\n    get(array, offset) {\n        return ieee754.read(array, offset, true, 10, this.len);\n    },\n    put(array, offset, value) {\n        ieee754.write(array, value, offset, true, 10, this.len);\n        return offset + this.len;\n    }\n};\n/**\n * IEEE 754 32-bit (single precision) float, big endian\n */\nexports.Float32_BE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getFloat32(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setFloat32(offset, value);\n        return offset + 4;\n    }\n};\n/**\n * IEEE 754 32-bit (single precision) float, little endian\n */\nexports.Float32_LE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getFloat32(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setFloat32(offset, value, true);\n        return offset + 4;\n    }\n};\n/**\n * IEEE 754 64-bit (double precision) float, big endian\n */\nexports.Float64_BE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getFloat64(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setFloat64(offset, value);\n        return offset + 8;\n    }\n};\n/**\n * IEEE 754 64-bit (double precision) float, little endian\n */\nexports.Float64_LE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getFloat64(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setFloat64(offset, value, true);\n        return offset + 8;\n    }\n};\n/**\n * IEEE 754 80-bit (extended precision) float, big endian\n */\nexports.Float80_BE = {\n    len: 10,\n    get(array, offset) {\n        return ieee754.read(array, offset, false, 63, this.len);\n    },\n    put(array, offset, value) {\n        ieee754.write(array, value, offset, false, 63, this.len);\n        return offset + this.len;\n    }\n};\n/**\n * IEEE 754 80-bit (extended precision) float, little endian\n */\nexports.Float80_LE = {\n    len: 10,\n    get(array, offset) {\n        return ieee754.read(array, offset, true, 63, this.len);\n    },\n    put(array, offset, value) {\n        ieee754.write(array, value, offset, true, 63, this.len);\n        return offset + this.len;\n    }\n};\n/**\n * Ignore a given number of bytes\n */\nclass IgnoreType {\n    /**\n     * @param len number of bytes to ignore\n     */\n    constructor(len) {\n        this.len = len;\n    }\n    // ToDo: don't read, but skip data\n    get(array, off) {\n    }\n}\nexports.IgnoreType = IgnoreType;\nclass Uint8ArrayType {\n    constructor(len) {\n        this.len = len;\n    }\n    get(array, offset) {\n        return array.subarray(offset, offset + this.len);\n    }\n}\nexports.Uint8ArrayType = Uint8ArrayType;\nclass BufferType {\n    constructor(len) {\n        this.len = len;\n    }\n    get(uint8Array, off) {\n        return Buffer.from(uint8Array.subarray(off, off + this.len));\n    }\n}\nexports.BufferType = BufferType;\n/**\n * Consume a fixed number of bytes from the stream and return a string with a specified encoding.\n */\nclass StringType {\n    constructor(len, encoding) {\n        this.len = len;\n        this.encoding = encoding;\n    }\n    get(uint8Array, offset) {\n        return Buffer.from(uint8Array).toString(this.encoding, offset, offset + this.len);\n    }\n}\nexports.StringType = StringType;\n/**\n * ANSI Latin 1 String\n * Using windows-1252 / ISO 8859-1 decoding\n */\nclass AnsiStringType {\n    constructor(len) {\n        this.len = len;\n    }\n    static decode(buffer, offset, until) {\n        let str = '';\n        for (let i = offset; i < until; ++i) {\n            str += AnsiStringType.codePointToString(AnsiStringType.singleByteDecoder(buffer[i]));\n        }\n        return str;\n    }\n    static inRange(a, min, max) {\n        return min <= a && a <= max;\n    }\n    static codePointToString(cp) {\n        if (cp <= 0xFFFF) {\n            return String.fromCharCode(cp);\n        }\n        else {\n            cp -= 0x10000;\n            return String.fromCharCode((cp >> 10) + 0xD800, (cp & 0x3FF) + 0xDC00);\n        }\n    }\n    static singleByteDecoder(bite) {\n        if (AnsiStringType.inRange(bite, 0x00, 0x7F)) {\n            return bite;\n        }\n        const codePoint = AnsiStringType.windows1252[bite - 0x80];\n        if (codePoint === null) {\n            throw Error('invaliding encoding');\n        }\n        return codePoint;\n    }\n    get(buffer, offset = 0) {\n        return AnsiStringType.decode(buffer, offset, offset + this.len);\n    }\n}\nexports.AnsiStringType = AnsiStringType;\nAnsiStringType.windows1252 = [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352,\n    8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732,\n    8482, 353, 8250, 339, 157, 382, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168,\n    169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,\n    185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,\n    201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,\n    217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,\n    233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,\n    248, 249, 250, 251, 252, 253, 254, 255];\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EndOfStreamError = exports.defaultMessages = void 0;\r\nexports.defaultMessages = 'End-Of-Stream';\r\n/**\r\n * Thrown on read operation of the end of file or stream has been reached\r\n */\r\nclass EndOfStreamError extends Error {\r\n    constructor() {\r\n        super(exports.defaultMessages);\r\n    }\r\n}\r\nexports.EndOfStreamError = EndOfStreamError;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Deferred = void 0;\r\nclass Deferred {\r\n    constructor() {\r\n        this.resolve = () => null;\r\n        this.reject = () => null;\r\n        this.promise = new Promise((resolve, reject) => {\r\n            this.reject = reject;\r\n            this.resolve = resolve;\r\n        });\r\n    }\r\n}\r\nexports.Deferred = Deferred;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.StreamReader = exports.EndOfStreamError = void 0;\r\nconst EndOfFileStream_1 = require(\"./EndOfFileStream\");\r\nconst Deferred_1 = require(\"./Deferred\");\r\nvar EndOfFileStream_2 = require(\"./EndOfFileStream\");\r\nObject.defineProperty(exports, \"EndOfStreamError\", { enumerable: true, get: function () { return EndOfFileStream_2.EndOfStreamError; } });\r\nconst maxStreamReadSize = 1 * 1024 * 1024; // Maximum request length on read-stream operation\r\nclass StreamReader {\r\n    constructor(s) {\r\n        this.s = s;\r\n        /**\r\n         * Deferred used for postponed read request (as not data is yet available to read)\r\n         */\r\n        this.deferred = null;\r\n        this.endOfStream = false;\r\n        /**\r\n         * Store peeked data\r\n         * @type {Array}\r\n         */\r\n        this.peekQueue = [];\r\n        if (!s.read || !s.once) {\r\n            throw new Error('Expected an instance of stream.Readable');\r\n        }\r\n        this.s.once('end', () => this.reject(new EndOfFileStream_1.EndOfStreamError()));\r\n        this.s.once('error', err => this.reject(err));\r\n        this.s.once('close', () => this.reject(new Error('Stream closed')));\r\n    }\r\n    /**\r\n     * Read ahead (peek) from stream. Subsequent read or peeks will return the same data\r\n     * @param uint8Array - Uint8Array (or Buffer) to store data read from stream in\r\n     * @param offset - Offset target\r\n     * @param length - Number of bytes to read\r\n     * @returns Number of bytes peeked\r\n     */\r\n    async peek(uint8Array, offset, length) {\r\n        const bytesRead = await this.read(uint8Array, offset, length);\r\n        this.peekQueue.push(uint8Array.subarray(offset, offset + bytesRead)); // Put read data back to peek buffer\r\n        return bytesRead;\r\n    }\r\n    /**\r\n     * Read chunk from stream\r\n     * @param buffer - Target Uint8Array (or Buffer) to store data read from stream in\r\n     * @param offset - Offset target\r\n     * @param length - Number of bytes to read\r\n     * @returns Number of bytes read\r\n     */\r\n    async read(buffer, offset, length) {\r\n        if (length === 0) {\r\n            return 0;\r\n        }\r\n        if (this.peekQueue.length === 0 && this.endOfStream) {\r\n            throw new EndOfFileStream_1.EndOfStreamError();\r\n        }\r\n        let remaining = length;\r\n        let bytesRead = 0;\r\n        // consume peeked data first\r\n        while (this.peekQueue.length > 0 && remaining > 0) {\r\n            const peekData = this.peekQueue.pop(); // Front of queue\r\n            if (!peekData)\r\n                throw new Error('peekData should be defined');\r\n            const lenCopy = Math.min(peekData.length, remaining);\r\n            buffer.set(peekData.subarray(0, lenCopy), offset + bytesRead);\r\n            bytesRead += lenCopy;\r\n            remaining -= lenCopy;\r\n            if (lenCopy < peekData.length) {\r\n                // remainder back to queue\r\n                this.peekQueue.push(peekData.subarray(lenCopy));\r\n            }\r\n        }\r\n        // continue reading from stream if required\r\n        while (remaining > 0 && !this.endOfStream) {\r\n            const reqLen = Math.min(remaining, maxStreamReadSize);\r\n            const chunkLen = await this.readFromStream(buffer, offset + bytesRead, reqLen);\r\n            bytesRead += chunkLen;\r\n            if (chunkLen < reqLen)\r\n                break;\r\n            remaining -= chunkLen;\r\n        }\r\n        return bytesRead;\r\n    }\r\n    /**\r\n     * Read chunk from stream\r\n     * @param buffer Target Uint8Array (or Buffer) to store data read from stream in\r\n     * @param offset Offset target\r\n     * @param length Number of bytes to read\r\n     * @returns Number of bytes read\r\n     */\r\n    async readFromStream(buffer, offset, length) {\r\n        const readBuffer = this.s.read(length);\r\n        if (readBuffer) {\r\n            buffer.set(readBuffer, offset);\r\n            return readBuffer.length;\r\n        }\r\n        else {\r\n            const request = {\r\n                buffer,\r\n                offset,\r\n                length,\r\n                deferred: new Deferred_1.Deferred()\r\n            };\r\n            this.deferred = request.deferred;\r\n            this.s.once('readable', () => {\r\n                this.readDeferred(request);\r\n            });\r\n            return request.deferred.promise;\r\n        }\r\n    }\r\n    /**\r\n     * Process deferred read request\r\n     * @param request Deferred read request\r\n     */\r\n    readDeferred(request) {\r\n        const readBuffer = this.s.read(request.length);\r\n        if (readBuffer) {\r\n            request.buffer.set(readBuffer, request.offset);\r\n            request.deferred.resolve(readBuffer.length);\r\n            this.deferred = null;\r\n        }\r\n        else {\r\n            this.s.once('readable', () => {\r\n                this.readDeferred(request);\r\n            });\r\n        }\r\n    }\r\n    reject(err) {\r\n        this.endOfStream = true;\r\n        if (this.deferred) {\r\n            this.deferred.reject(err);\r\n            this.deferred = null;\r\n        }\r\n    }\r\n}\r\nexports.StreamReader = StreamReader;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.StreamReader = exports.EndOfStreamError = void 0;\r\nvar EndOfFileStream_1 = require(\"./EndOfFileStream\");\r\nObject.defineProperty(exports, \"EndOfStreamError\", { enumerable: true, get: function () { return EndOfFileStream_1.EndOfStreamError; } });\r\nvar StreamReader_1 = require(\"./StreamReader\");\r\nObject.defineProperty(exports, \"StreamReader\", { enumerable: true, get: function () { return StreamReader_1.StreamReader; } });\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.AbstractTokenizer = void 0;\r\nconst peek_readable_1 = require(\"peek-readable\");\r\n/**\r\n * Core tokenizer\r\n */\r\nclass AbstractTokenizer {\r\n    constructor(fileInfo) {\r\n        /**\r\n         * Tokenizer-stream position\r\n         */\r\n        this.position = 0;\r\n        this.numBuffer = new Uint8Array(8);\r\n        this.fileInfo = fileInfo ? fileInfo : {};\r\n    }\r\n    /**\r\n     * Read a token from the tokenizer-stream\r\n     * @param token - The token to read\r\n     * @param position - If provided, the desired position in the tokenizer-stream\r\n     * @returns Promise with token data\r\n     */\r\n    async readToken(token, position = this.position) {\r\n        const uint8Array = Buffer.alloc(token.len);\r\n        const len = await this.readBuffer(uint8Array, { position });\r\n        if (len < token.len)\r\n            throw new peek_readable_1.EndOfStreamError();\r\n        return token.get(uint8Array, 0);\r\n    }\r\n    /**\r\n     * Peek a token from the tokenizer-stream.\r\n     * @param token - Token to peek from the tokenizer-stream.\r\n     * @param position - Offset where to begin reading within the file. If position is null, data will be read from the current file position.\r\n     * @returns Promise with token data\r\n     */\r\n    async peekToken(token, position = this.position) {\r\n        const uint8Array = Buffer.alloc(token.len);\r\n        const len = await this.peekBuffer(uint8Array, { position });\r\n        if (len < token.len)\r\n            throw new peek_readable_1.EndOfStreamError();\r\n        return token.get(uint8Array, 0);\r\n    }\r\n    /**\r\n     * Read a numeric token from the stream\r\n     * @param token - Numeric token\r\n     * @returns Promise with number\r\n     */\r\n    async readNumber(token) {\r\n        const len = await this.readBuffer(this.numBuffer, { length: token.len });\r\n        if (len < token.len)\r\n            throw new peek_readable_1.EndOfStreamError();\r\n        return token.get(this.numBuffer, 0);\r\n    }\r\n    /**\r\n     * Read a numeric token from the stream\r\n     * @param token - Numeric token\r\n     * @returns Promise with number\r\n     */\r\n    async peekNumber(token) {\r\n        const len = await this.peekBuffer(this.numBuffer, { length: token.len });\r\n        if (len < token.len)\r\n            throw new peek_readable_1.EndOfStreamError();\r\n        return token.get(this.numBuffer, 0);\r\n    }\r\n    /**\r\n     * Ignore number of bytes, advances the pointer in under tokenizer-stream.\r\n     * @param length - Number of bytes to ignore\r\n     * @return resolves the number of bytes ignored, equals length if this available, otherwise the number of bytes available\r\n     */\r\n    async ignore(length) {\r\n        if (this.fileInfo.size !== undefined) {\r\n            const bytesLeft = this.fileInfo.size - this.position;\r\n            if (length > bytesLeft) {\r\n                this.position += bytesLeft;\r\n                return bytesLeft;\r\n            }\r\n        }\r\n        this.position += length;\r\n        return length;\r\n    }\r\n    async close() {\r\n        // empty\r\n    }\r\n    normalizeOptions(uint8Array, options) {\r\n        if (options && options.position !== undefined && options.position < this.position) {\r\n            throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\r\n        }\r\n        if (options) {\r\n            return {\r\n                mayBeLess: options.mayBeLess === true,\r\n                offset: options.offset ? options.offset : 0,\r\n                length: options.length ? options.length : (uint8Array.length - (options.offset ? options.offset : 0)),\r\n                position: options.position ? options.position : this.position\r\n            };\r\n        }\r\n        return {\r\n            mayBeLess: false,\r\n            offset: 0,\r\n            length: uint8Array.length,\r\n            position: this.position\r\n        };\r\n    }\r\n}\r\nexports.AbstractTokenizer = AbstractTokenizer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ReadStreamTokenizer = void 0;\r\nconst AbstractTokenizer_1 = require(\"./AbstractTokenizer\");\r\nconst peek_readable_1 = require(\"peek-readable\");\r\nconst maxBufferSize = 256000;\r\nclass ReadStreamTokenizer extends AbstractTokenizer_1.AbstractTokenizer {\r\n    constructor(stream, fileInfo) {\r\n        super(fileInfo);\r\n        this.streamReader = new peek_readable_1.StreamReader(stream);\r\n    }\r\n    /**\r\n     * Get file information, an HTTP-client may implement this doing a HEAD request\r\n     * @return Promise with file information\r\n     */\r\n    async getFileInfo() {\r\n        return this.fileInfo;\r\n    }\r\n    /**\r\n     * Read buffer from tokenizer\r\n     * @param uint8Array - Target Uint8Array to fill with data read from the tokenizer-stream\r\n     * @param options - Read behaviour options\r\n     * @returns Promise with number of bytes read\r\n     */\r\n    async readBuffer(uint8Array, options) {\r\n        const normOptions = this.normalizeOptions(uint8Array, options);\r\n        const skipBytes = normOptions.position - this.position;\r\n        if (skipBytes > 0) {\r\n            await this.ignore(skipBytes);\r\n            return this.readBuffer(uint8Array, options);\r\n        }\r\n        else if (skipBytes < 0) {\r\n            throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\r\n        }\r\n        if (normOptions.length === 0) {\r\n            return 0;\r\n        }\r\n        const bytesRead = await this.streamReader.read(uint8Array, normOptions.offset, normOptions.length);\r\n        this.position += bytesRead;\r\n        if ((!options || !options.mayBeLess) && bytesRead < normOptions.length) {\r\n            throw new peek_readable_1.EndOfStreamError();\r\n        }\r\n        return bytesRead;\r\n    }\r\n    /**\r\n     * Peek (read ahead) buffer from tokenizer\r\n     * @param uint8Array - Uint8Array (or Buffer) to write data to\r\n     * @param options - Read behaviour options\r\n     * @returns Promise with number of bytes peeked\r\n     */\r\n    async peekBuffer(uint8Array, options) {\r\n        const normOptions = this.normalizeOptions(uint8Array, options);\r\n        let bytesRead = 0;\r\n        if (normOptions.position) {\r\n            const skipBytes = normOptions.position - this.position;\r\n            if (skipBytes > 0) {\r\n                const skipBuffer = new Uint8Array(normOptions.length + skipBytes);\r\n                bytesRead = await this.peekBuffer(skipBuffer, { mayBeLess: normOptions.mayBeLess });\r\n                uint8Array.set(skipBuffer.subarray(skipBytes), normOptions.offset);\r\n                return bytesRead - skipBytes;\r\n            }\r\n            else if (skipBytes < 0) {\r\n                throw new Error('Cannot peek from a negative offset in a stream');\r\n            }\r\n        }\r\n        if (normOptions.length > 0) {\r\n            try {\r\n                bytesRead = await this.streamReader.peek(uint8Array, normOptions.offset, normOptions.length);\r\n            }\r\n            catch (err) {\r\n                if (options && options.mayBeLess && err instanceof peek_readable_1.EndOfStreamError) {\r\n                    return 0;\r\n                }\r\n                throw err;\r\n            }\r\n            if ((!normOptions.mayBeLess) && bytesRead < normOptions.length) {\r\n                throw new peek_readable_1.EndOfStreamError();\r\n            }\r\n        }\r\n        return bytesRead;\r\n    }\r\n    async ignore(length) {\r\n        // debug(`ignore ${this.position}...${this.position + length - 1}`);\r\n        const bufSize = Math.min(maxBufferSize, length);\r\n        const buf = new Uint8Array(bufSize);\r\n        let totBytesRead = 0;\r\n        while (totBytesRead < length) {\r\n            const remaining = length - totBytesRead;\r\n            const bytesRead = await this.readBuffer(buf, { length: Math.min(bufSize, remaining) });\r\n            if (bytesRead < 0) {\r\n                return bytesRead;\r\n            }\r\n            totBytesRead += bytesRead;\r\n        }\r\n        return totBytesRead;\r\n    }\r\n}\r\nexports.ReadStreamTokenizer = ReadStreamTokenizer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.BufferTokenizer = void 0;\r\nconst peek_readable_1 = require(\"peek-readable\");\r\nconst AbstractTokenizer_1 = require(\"./AbstractTokenizer\");\r\nclass BufferTokenizer extends AbstractTokenizer_1.AbstractTokenizer {\r\n    /**\r\n     * Construct BufferTokenizer\r\n     * @param uint8Array - Uint8Array to tokenize\r\n     * @param fileInfo - Pass additional file information to the tokenizer\r\n     */\r\n    constructor(uint8Array, fileInfo) {\r\n        super(fileInfo);\r\n        this.uint8Array = uint8Array;\r\n        this.fileInfo.size = this.fileInfo.size ? this.fileInfo.size : uint8Array.length;\r\n    }\r\n    /**\r\n     * Read buffer from tokenizer\r\n     * @param uint8Array - Uint8Array to tokenize\r\n     * @param options - Read behaviour options\r\n     * @returns {Promise<number>}\r\n     */\r\n    async readBuffer(uint8Array, options) {\r\n        if (options && options.position) {\r\n            if (options.position < this.position) {\r\n                throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\r\n            }\r\n            this.position = options.position;\r\n        }\r\n        const bytesRead = await this.peekBuffer(uint8Array, options);\r\n        this.position += bytesRead;\r\n        return bytesRead;\r\n    }\r\n    /**\r\n     * Peek (read ahead) buffer from tokenizer\r\n     * @param uint8Array\r\n     * @param options - Read behaviour options\r\n     * @returns {Promise<number>}\r\n     */\r\n    async peekBuffer(uint8Array, options) {\r\n        const normOptions = this.normalizeOptions(uint8Array, options);\r\n        const bytes2read = Math.min(this.uint8Array.length - normOptions.position, normOptions.length);\r\n        if ((!normOptions.mayBeLess) && bytes2read < normOptions.length) {\r\n            throw new peek_readable_1.EndOfStreamError();\r\n        }\r\n        else {\r\n            uint8Array.set(this.uint8Array.subarray(normOptions.position, normOptions.position + bytes2read), normOptions.offset);\r\n            return bytes2read;\r\n        }\r\n    }\r\n    async close() {\r\n        // empty\r\n    }\r\n}\r\nexports.BufferTokenizer = BufferTokenizer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.fromBuffer = exports.fromStream = exports.EndOfStreamError = void 0;\r\nconst ReadStreamTokenizer_1 = require(\"./ReadStreamTokenizer\");\r\nconst BufferTokenizer_1 = require(\"./BufferTokenizer\");\r\nvar peek_readable_1 = require(\"peek-readable\");\r\nObject.defineProperty(exports, \"EndOfStreamError\", { enumerable: true, get: function () { return peek_readable_1.EndOfStreamError; } });\r\n/**\r\n * Construct ReadStreamTokenizer from given Stream.\r\n * Will set fileSize, if provided given Stream has set the .path property/\r\n * @param stream - Read from Node.js Stream.Readable\r\n * @param fileInfo - Pass the file information, like size and MIME-type of the corresponding stream.\r\n * @returns ReadStreamTokenizer\r\n */\r\nfunction fromStream(stream, fileInfo) {\r\n    fileInfo = fileInfo ? fileInfo : {};\r\n    return new ReadStreamTokenizer_1.ReadStreamTokenizer(stream, fileInfo);\r\n}\r\nexports.fromStream = fromStream;\r\n/**\r\n * Construct ReadStreamTokenizer from given Buffer.\r\n * @param uint8Array - Uint8Array to tokenize\r\n * @param fileInfo - Pass additional file information to the tokenizer\r\n * @returns BufferTokenizer\r\n */\r\nfunction fromBuffer(uint8Array, fileInfo) {\r\n    return new BufferTokenizer_1.BufferTokenizer(uint8Array, fileInfo);\r\n}\r\nexports.fromBuffer = fromBuffer;\r\n","'use strict';\n\nexports.stringToBytes = string => [...string].map(character => character.charCodeAt(0));\n\n/**\nChecks whether the TAR checksum is valid.\n\n@param {Buffer} buffer - The TAR header `[offset ... offset + 512]`.\n@param {number} offset - TAR header offset.\n@returns {boolean} `true` if the TAR checksum is valid, otherwise `false`.\n*/\nexports.tarHeaderChecksumMatches = (buffer, offset = 0) => {\n\tconst readSum = parseInt(buffer.toString('utf8', 148, 154).replace(/\\0.*$/, '').trim(), 8); // Read sum in header\n\tif (isNaN(readSum)) {\n\t\treturn false;\n\t}\n\n\tlet sum = 8 * 0x20; // Initialize signed bit sum\n\n\tfor (let i = offset; i < offset + 148; i++) {\n\t\tsum += buffer[i];\n\t}\n\n\tfor (let i = offset + 156; i < offset + 512; i++) {\n\t\tsum += buffer[i];\n\t}\n\n\treturn readSum === sum;\n};\n\n/**\nID3 UINT32 sync-safe tokenizer token.\n28 bits (representing up to 256MB) integer, the msb is 0 to avoid \"false syncsignals\".\n*/\nexports.uint32SyncSafeToken = {\n\tget: (buffer, offset) => {\n\t\treturn (buffer[offset + 3] & 0x7F) | ((buffer[offset + 2]) << 7) | ((buffer[offset + 1]) << 14) | ((buffer[offset]) << 21);\n\t},\n\tlen: 4\n};\n","'use strict';\n\nmodule.exports = {\n\textensions: [\n\t\t'jpg',\n\t\t'png',\n\t\t'apng',\n\t\t'gif',\n\t\t'webp',\n\t\t'flif',\n\t\t'xcf',\n\t\t'cr2',\n\t\t'cr3',\n\t\t'orf',\n\t\t'arw',\n\t\t'dng',\n\t\t'nef',\n\t\t'rw2',\n\t\t'raf',\n\t\t'tif',\n\t\t'bmp',\n\t\t'icns',\n\t\t'jxr',\n\t\t'psd',\n\t\t'indd',\n\t\t'zip',\n\t\t'tar',\n\t\t'rar',\n\t\t'gz',\n\t\t'bz2',\n\t\t'7z',\n\t\t'dmg',\n\t\t'mp4',\n\t\t'mid',\n\t\t'mkv',\n\t\t'webm',\n\t\t'mov',\n\t\t'avi',\n\t\t'mpg',\n\t\t'mp2',\n\t\t'mp3',\n\t\t'm4a',\n\t\t'oga',\n\t\t'ogg',\n\t\t'ogv',\n\t\t'opus',\n\t\t'flac',\n\t\t'wav',\n\t\t'spx',\n\t\t'amr',\n\t\t'pdf',\n\t\t'epub',\n\t\t'exe',\n\t\t'swf',\n\t\t'rtf',\n\t\t'wasm',\n\t\t'woff',\n\t\t'woff2',\n\t\t'eot',\n\t\t'ttf',\n\t\t'otf',\n\t\t'ico',\n\t\t'flv',\n\t\t'ps',\n\t\t'xz',\n\t\t'sqlite',\n\t\t'nes',\n\t\t'crx',\n\t\t'xpi',\n\t\t'cab',\n\t\t'deb',\n\t\t'ar',\n\t\t'rpm',\n\t\t'Z',\n\t\t'lz',\n\t\t'cfb',\n\t\t'mxf',\n\t\t'mts',\n\t\t'blend',\n\t\t'bpg',\n\t\t'docx',\n\t\t'pptx',\n\t\t'xlsx',\n\t\t'3gp',\n\t\t'3g2',\n\t\t'jp2',\n\t\t'jpm',\n\t\t'jpx',\n\t\t'mj2',\n\t\t'aif',\n\t\t'qcp',\n\t\t'odt',\n\t\t'ods',\n\t\t'odp',\n\t\t'xml',\n\t\t'mobi',\n\t\t'heic',\n\t\t'cur',\n\t\t'ktx',\n\t\t'ape',\n\t\t'wv',\n\t\t'dcm',\n\t\t'ics',\n\t\t'glb',\n\t\t'pcap',\n\t\t'dsf',\n\t\t'lnk',\n\t\t'alias',\n\t\t'voc',\n\t\t'ac3',\n\t\t'm4v',\n\t\t'm4p',\n\t\t'm4b',\n\t\t'f4v',\n\t\t'f4p',\n\t\t'f4b',\n\t\t'f4a',\n\t\t'mie',\n\t\t'asf',\n\t\t'ogm',\n\t\t'ogx',\n\t\t'mpc',\n\t\t'arrow',\n\t\t'shp',\n\t\t'aac',\n\t\t'mp1',\n\t\t'it',\n\t\t's3m',\n\t\t'xm',\n\t\t'ai',\n\t\t'skp',\n\t\t'avif',\n\t\t'eps',\n\t\t'lzh',\n\t\t'pgp',\n\t\t'asar',\n\t\t'stl',\n\t\t'chm',\n\t\t'3mf',\n\t\t'zst',\n\t\t'jxl',\n\t\t'vcf'\n\t],\n\tmimeTypes: [\n\t\t'image/jpeg',\n\t\t'image/png',\n\t\t'image/gif',\n\t\t'image/webp',\n\t\t'image/flif',\n\t\t'image/x-xcf',\n\t\t'image/x-canon-cr2',\n\t\t'image/x-canon-cr3',\n\t\t'image/tiff',\n\t\t'image/bmp',\n\t\t'image/vnd.ms-photo',\n\t\t'image/vnd.adobe.photoshop',\n\t\t'application/x-indesign',\n\t\t'application/epub+zip',\n\t\t'application/x-xpinstall',\n\t\t'application/vnd.oasis.opendocument.text',\n\t\t'application/vnd.oasis.opendocument.spreadsheet',\n\t\t'application/vnd.oasis.opendocument.presentation',\n\t\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t\t'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\t\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t\t'application/zip',\n\t\t'application/x-tar',\n\t\t'application/x-rar-compressed',\n\t\t'application/gzip',\n\t\t'application/x-bzip2',\n\t\t'application/x-7z-compressed',\n\t\t'application/x-apple-diskimage',\n\t\t'application/x-apache-arrow',\n\t\t'video/mp4',\n\t\t'audio/midi',\n\t\t'video/x-matroska',\n\t\t'video/webm',\n\t\t'video/quicktime',\n\t\t'video/vnd.avi',\n\t\t'audio/vnd.wave',\n\t\t'audio/qcelp',\n\t\t'audio/x-ms-asf',\n\t\t'video/x-ms-asf',\n\t\t'application/vnd.ms-asf',\n\t\t'video/mpeg',\n\t\t'video/3gpp',\n\t\t'audio/mpeg',\n\t\t'audio/mp4', // RFC 4337\n\t\t'audio/opus',\n\t\t'video/ogg',\n\t\t'audio/ogg',\n\t\t'application/ogg',\n\t\t'audio/x-flac',\n\t\t'audio/ape',\n\t\t'audio/wavpack',\n\t\t'audio/amr',\n\t\t'application/pdf',\n\t\t'application/x-msdownload',\n\t\t'application/x-shockwave-flash',\n\t\t'application/rtf',\n\t\t'application/wasm',\n\t\t'font/woff',\n\t\t'font/woff2',\n\t\t'application/vnd.ms-fontobject',\n\t\t'font/ttf',\n\t\t'font/otf',\n\t\t'image/x-icon',\n\t\t'video/x-flv',\n\t\t'application/postscript',\n\t\t'application/eps',\n\t\t'application/x-xz',\n\t\t'application/x-sqlite3',\n\t\t'application/x-nintendo-nes-rom',\n\t\t'application/x-google-chrome-extension',\n\t\t'application/vnd.ms-cab-compressed',\n\t\t'application/x-deb',\n\t\t'application/x-unix-archive',\n\t\t'application/x-rpm',\n\t\t'application/x-compress',\n\t\t'application/x-lzip',\n\t\t'application/x-cfb',\n\t\t'application/x-mie',\n\t\t'application/mxf',\n\t\t'video/mp2t',\n\t\t'application/x-blender',\n\t\t'image/bpg',\n\t\t'image/jp2',\n\t\t'image/jpx',\n\t\t'image/jpm',\n\t\t'image/mj2',\n\t\t'audio/aiff',\n\t\t'application/xml',\n\t\t'application/x-mobipocket-ebook',\n\t\t'image/heif',\n\t\t'image/heif-sequence',\n\t\t'image/heic',\n\t\t'image/heic-sequence',\n\t\t'image/icns',\n\t\t'image/ktx',\n\t\t'application/dicom',\n\t\t'audio/x-musepack',\n\t\t'text/calendar',\n\t\t'text/vcard',\n\t\t'model/gltf-binary',\n\t\t'application/vnd.tcpdump.pcap',\n\t\t'audio/x-dsf', // Non-standard\n\t\t'application/x.ms.shortcut', // Invented by us\n\t\t'application/x.apple.alias', // Invented by us\n\t\t'audio/x-voc',\n\t\t'audio/vnd.dolby.dd-raw',\n\t\t'audio/x-m4a',\n\t\t'image/apng',\n\t\t'image/x-olympus-orf',\n\t\t'image/x-sony-arw',\n\t\t'image/x-adobe-dng',\n\t\t'image/x-nikon-nef',\n\t\t'image/x-panasonic-rw2',\n\t\t'image/x-fujifilm-raf',\n\t\t'video/x-m4v',\n\t\t'video/3gpp2',\n\t\t'application/x-esri-shape',\n\t\t'audio/aac',\n\t\t'audio/x-it',\n\t\t'audio/x-s3m',\n\t\t'audio/x-xm',\n\t\t'video/MP1S',\n\t\t'video/MP2P',\n\t\t'application/vnd.sketchup.skp',\n\t\t'image/avif',\n\t\t'application/x-lzh-compressed',\n\t\t'application/pgp-encrypted',\n\t\t'application/x-asar',\n\t\t'model/stl',\n\t\t'application/vnd.ms-htmlhelp',\n\t\t'model/3mf',\n\t\t'image/jxl',\n\t\t'application/zstd'\n\t]\n};\n","'use strict';\nconst Token = require('token-types');\nconst strtok3 = require('strtok3/lib/core');\nconst {\n\tstringToBytes,\n\ttarHeaderChecksumMatches,\n\tuint32SyncSafeToken\n} = require('./util');\nconst supported = require('./supported');\n\nconst minimumBytes = 4100; // A fair amount of file-types are detectable within this range\n\nasync function fromStream(stream) {\n\tconst tokenizer = await strtok3.fromStream(stream);\n\ttry {\n\t\treturn await fromTokenizer(tokenizer);\n\t} finally {\n\t\tawait tokenizer.close();\n\t}\n}\n\nasync function fromBuffer(input) {\n\tif (!(input instanceof Uint8Array || input instanceof ArrayBuffer || Buffer.isBuffer(input))) {\n\t\tthrow new TypeError(`Expected the \\`input\\` argument to be of type \\`Uint8Array\\` or \\`Buffer\\` or \\`ArrayBuffer\\`, got \\`${typeof input}\\``);\n\t}\n\n\tconst buffer = input instanceof Buffer ? input : Buffer.from(input);\n\n\tif (!(buffer && buffer.length > 1)) {\n\t\treturn;\n\t}\n\n\tconst tokenizer = strtok3.fromBuffer(buffer);\n\treturn fromTokenizer(tokenizer);\n}\n\nfunction _check(buffer, headers, options) {\n\toptions = {\n\t\toffset: 0,\n\t\t...options\n\t};\n\n\tfor (const [index, header] of headers.entries()) {\n\t\t// If a bitmask is set\n\t\tif (options.mask) {\n\t\t\t// If header doesn't equal `buf` with bits masked off\n\t\t\tif (header !== (options.mask[index] & buffer[index + options.offset])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (header !== buffer[index + options.offset]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nasync function fromTokenizer(tokenizer) {\n\ttry {\n\t\treturn _fromTokenizer(tokenizer);\n\t} catch (error) {\n\t\tif (!(error instanceof strtok3.EndOfStreamError)) {\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nasync function _fromTokenizer(tokenizer) {\n\tlet buffer = Buffer.alloc(minimumBytes);\n\tconst bytesRead = 12;\n\tconst check = (header, options) => _check(buffer, header, options);\n\tconst checkString = (header, options) => check(stringToBytes(header), options);\n\n\t// Keep reading until EOF if the file size is unknown.\n\tif (!tokenizer.fileInfo.size) {\n\t\ttokenizer.fileInfo.size = Number.MAX_SAFE_INTEGER;\n\t}\n\n\tawait tokenizer.peekBuffer(buffer, {length: bytesRead, mayBeLess: true});\n\n\t// -- 2-byte signatures --\n\n\tif (check([0x42, 0x4D])) {\n\t\treturn {\n\t\t\text: 'bmp',\n\t\t\tmime: 'image/bmp'\n\t\t};\n\t}\n\n\tif (check([0x0B, 0x77])) {\n\t\treturn {\n\t\t\text: 'ac3',\n\t\t\tmime: 'audio/vnd.dolby.dd-raw'\n\t\t};\n\t}\n\n\tif (check([0x78, 0x01])) {\n\t\treturn {\n\t\t\text: 'dmg',\n\t\t\tmime: 'application/x-apple-diskimage'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x5A])) {\n\t\treturn {\n\t\t\text: 'exe',\n\t\t\tmime: 'application/x-msdownload'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x21])) {\n\t\tawait tokenizer.peekBuffer(buffer, {length: 24, mayBeLess: true});\n\n\t\tif (checkString('PS-Adobe-', {offset: 2}) &&\n\t\t\tcheckString(' EPSF-', {offset: 14})) {\n\t\t\treturn {\n\t\t\t\text: 'eps',\n\t\t\t\tmime: 'application/eps'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\text: 'ps',\n\t\t\tmime: 'application/postscript'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x1F, 0xA0]) ||\n\t\tcheck([0x1F, 0x9D])\n\t) {\n\t\treturn {\n\t\t\text: 'Z',\n\t\t\tmime: 'application/x-compress'\n\t\t};\n\t}\n\n\t// -- 3-byte signatures --\n\n\tif (check([0xFF, 0xD8, 0xFF])) {\n\t\treturn {\n\t\t\text: 'jpg',\n\t\t\tmime: 'image/jpeg'\n\t\t};\n\t}\n\n\tif (check([0x49, 0x49, 0xBC])) {\n\t\treturn {\n\t\t\text: 'jxr',\n\t\t\tmime: 'image/vnd.ms-photo'\n\t\t};\n\t}\n\n\tif (check([0x1F, 0x8B, 0x8])) {\n\t\treturn {\n\t\t\text: 'gz',\n\t\t\tmime: 'application/gzip'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x5A, 0x68])) {\n\t\treturn {\n\t\t\text: 'bz2',\n\t\t\tmime: 'application/x-bzip2'\n\t\t};\n\t}\n\n\tif (checkString('ID3')) {\n\t\tawait tokenizer.ignore(6); // Skip ID3 header until the header size\n\t\tconst id3HeaderLen = await tokenizer.readToken(uint32SyncSafeToken);\n\t\tif (tokenizer.position + id3HeaderLen > tokenizer.fileInfo.size) {\n\t\t\t// Guess file type based on ID3 header for backward compatibility\n\t\t\treturn {\n\t\t\t\text: 'mp3',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\tawait tokenizer.ignore(id3HeaderLen);\n\t\treturn fromTokenizer(tokenizer); // Skip ID3 header, recursion\n\t}\n\n\t// Musepack, SV7\n\tif (checkString('MP+')) {\n\t\treturn {\n\t\t\text: 'mpc',\n\t\t\tmime: 'audio/x-musepack'\n\t\t};\n\t}\n\n\tif (\n\t\t(buffer[0] === 0x43 || buffer[0] === 0x46) &&\n\t\tcheck([0x57, 0x53], {offset: 1})\n\t) {\n\t\treturn {\n\t\t\text: 'swf',\n\t\t\tmime: 'application/x-shockwave-flash'\n\t\t};\n\t}\n\n\t// -- 4-byte signatures --\n\n\tif (check([0x47, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'gif',\n\t\t\tmime: 'image/gif'\n\t\t};\n\t}\n\n\tif (checkString('FLIF')) {\n\t\treturn {\n\t\t\text: 'flif',\n\t\t\tmime: 'image/flif'\n\t\t};\n\t}\n\n\tif (checkString('8BPS')) {\n\t\treturn {\n\t\t\text: 'psd',\n\t\t\tmime: 'image/vnd.adobe.photoshop'\n\t\t};\n\t}\n\n\tif (checkString('WEBP', {offset: 8})) {\n\t\treturn {\n\t\t\text: 'webp',\n\t\t\tmime: 'image/webp'\n\t\t};\n\t}\n\n\t// Musepack, SV8\n\tif (checkString('MPCK')) {\n\t\treturn {\n\t\t\text: 'mpc',\n\t\t\tmime: 'audio/x-musepack'\n\t\t};\n\t}\n\n\tif (checkString('FORM')) {\n\t\treturn {\n\t\t\text: 'aif',\n\t\t\tmime: 'audio/aiff'\n\t\t};\n\t}\n\n\tif (checkString('icns', {offset: 0})) {\n\t\treturn {\n\t\t\text: 'icns',\n\t\t\tmime: 'image/icns'\n\t\t};\n\t}\n\n\t// Zip-based file formats\n\t// Need to be before the `zip` check\n\tif (check([0x50, 0x4B, 0x3, 0x4])) { // Local file header signature\n\t\ttry {\n\t\t\twhile (tokenizer.position + 30 < tokenizer.fileInfo.size) {\n\t\t\t\tawait tokenizer.readBuffer(buffer, {length: 30});\n\n\t\t\t\t// https://en.wikipedia.org/wiki/Zip_(file_format)#File_headers\n\t\t\t\tconst zipHeader = {\n\t\t\t\t\tcompressedSize: buffer.readUInt32LE(18),\n\t\t\t\t\tuncompressedSize: buffer.readUInt32LE(22),\n\t\t\t\t\tfilenameLength: buffer.readUInt16LE(26),\n\t\t\t\t\textraFieldLength: buffer.readUInt16LE(28)\n\t\t\t\t};\n\n\t\t\t\tzipHeader.filename = await tokenizer.readToken(new Token.StringType(zipHeader.filenameLength, 'utf-8'));\n\t\t\t\tawait tokenizer.ignore(zipHeader.extraFieldLength);\n\n\t\t\t\t// Assumes signed `.xpi` from addons.mozilla.org\n\t\t\t\tif (zipHeader.filename === 'META-INF/mozilla.rsa') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'xpi',\n\t\t\t\t\t\tmime: 'application/x-xpinstall'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (zipHeader.filename.endsWith('.rels') || zipHeader.filename.endsWith('.xml')) {\n\t\t\t\t\tconst type = zipHeader.filename.split('/')[0];\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase '_rels':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'word':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'docx',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'ppt':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'pptx',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'xl':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'xlsx',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (zipHeader.filename.startsWith('xl/')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'xlsx',\n\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (zipHeader.filename.startsWith('3D/') && zipHeader.filename.endsWith('.model')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: '3mf',\n\t\t\t\t\t\tmime: 'model/3mf'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// The docx, xlsx and pptx file types extend the Office Open XML file format:\n\t\t\t\t// https://en.wikipedia.org/wiki/Office_Open_XML_file_formats\n\t\t\t\t// We look for:\n\t\t\t\t// - one entry named '[Content_Types].xml' or '_rels/.rels',\n\t\t\t\t// - one entry indicating specific type of file.\n\t\t\t\t// MS Office, OpenOffice and LibreOffice may put the parts in different order, so the check should not rely on it.\n\t\t\t\tif (zipHeader.filename === 'mimetype' && zipHeader.compressedSize === zipHeader.uncompressedSize) {\n\t\t\t\t\tconst mimeType = await tokenizer.readToken(new Token.StringType(zipHeader.compressedSize, 'utf-8'));\n\n\t\t\t\t\tswitch (mimeType) {\n\t\t\t\t\t\tcase 'application/epub+zip':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'epub',\n\t\t\t\t\t\t\t\tmime: 'application/epub+zip'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'application/vnd.oasis.opendocument.text':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'odt',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.oasis.opendocument.text'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'application/vnd.oasis.opendocument.spreadsheet':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'ods',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.oasis.opendocument.spreadsheet'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'application/vnd.oasis.opendocument.presentation':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'odp',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.oasis.opendocument.presentation'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Try to find next header manually when current one is corrupted\n\t\t\t\tif (zipHeader.compressedSize === 0) {\n\t\t\t\t\tlet nextHeaderIndex = -1;\n\n\t\t\t\t\twhile (nextHeaderIndex < 0 && (tokenizer.position < tokenizer.fileInfo.size)) {\n\t\t\t\t\t\tawait tokenizer.peekBuffer(buffer, {mayBeLess: true});\n\n\t\t\t\t\t\tnextHeaderIndex = buffer.indexOf('504B0304', 0, 'hex');\n\t\t\t\t\t\t// Move position to the next header if found, skip the whole buffer otherwise\n\t\t\t\t\t\tawait tokenizer.ignore(nextHeaderIndex >= 0 ? nextHeaderIndex : buffer.length);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tawait tokenizer.ignore(zipHeader.compressedSize);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof strtok3.EndOfStreamError)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\text: 'zip',\n\t\t\tmime: 'application/zip'\n\t\t};\n\t}\n\n\tif (checkString('OggS')) {\n\t\t// This is an OGG container\n\t\tawait tokenizer.ignore(28);\n\t\tconst type = Buffer.alloc(8);\n\t\tawait tokenizer.readBuffer(type);\n\n\t\t// Needs to be before `ogg` check\n\t\tif (_check(type, [0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64])) {\n\t\t\treturn {\n\t\t\t\text: 'opus',\n\t\t\t\tmime: 'audio/opus'\n\t\t\t};\n\t\t}\n\n\t\t// If ' theora' in header.\n\t\tif (_check(type, [0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61])) {\n\t\t\treturn {\n\t\t\t\text: 'ogv',\n\t\t\t\tmime: 'video/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If '\\x01video' in header.\n\t\tif (_check(type, [0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'ogm',\n\t\t\t\tmime: 'video/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If ' FLAC' in header  https://xiph.org/flac/faq.html\n\t\tif (_check(type, [0x7F, 0x46, 0x4C, 0x41, 0x43])) {\n\t\t\treturn {\n\t\t\t\text: 'oga',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// 'Speex  ' in header https://en.wikipedia.org/wiki/Speex\n\t\tif (_check(type, [0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20])) {\n\t\t\treturn {\n\t\t\t\text: 'spx',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If '\\x01vorbis' in header\n\t\tif (_check(type, [0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73])) {\n\t\t\treturn {\n\t\t\t\text: 'ogg',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// Default OGG container https://www.iana.org/assignments/media-types/application/ogg\n\t\treturn {\n\t\t\text: 'ogx',\n\t\t\tmime: 'application/ogg'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x50, 0x4B]) &&\n\t\t(buffer[2] === 0x3 || buffer[2] === 0x5 || buffer[2] === 0x7) &&\n\t\t(buffer[3] === 0x4 || buffer[3] === 0x6 || buffer[3] === 0x8)\n\t) {\n\t\treturn {\n\t\t\text: 'zip',\n\t\t\tmime: 'application/zip'\n\t\t};\n\t}\n\n\t//\n\n\t// File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)\n\t// It's not required to be first, but it's recommended to be. Almost all ISO base media files start with `ftyp` box.\n\t// `ftyp` box must contain a brand major identifier, which must consist of ISO 8859-1 printable characters.\n\t// Here we check for 8859-1 printable characters (for simplicity, it's a mask which also catches one non-printable character).\n\tif (\n\t\tcheckString('ftyp', {offset: 4}) &&\n\t\t(buffer[8] & 0x60) !== 0x00 // Brand major, first character ASCII?\n\t) {\n\t\t// They all can have MIME `video/mp4` except `application/mp4` special-case which is hard to detect.\n\t\t// For some cases, we're specific, everything else falls to `video/mp4` with `mp4` extension.\n\t\tconst brandMajor = buffer.toString('binary', 8, 12).replace('\\0', ' ').trim();\n\t\tswitch (brandMajor) {\n\t\t\tcase 'avif':\n\t\t\t\treturn {ext: 'avif', mime: 'image/avif'};\n\t\t\tcase 'mif1':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heif'};\n\t\t\tcase 'msf1':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heif-sequence'};\n\t\t\tcase 'heic':\n\t\t\tcase 'heix':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heic'};\n\t\t\tcase 'hevc':\n\t\t\tcase 'hevx':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heic-sequence'};\n\t\t\tcase 'qt':\n\t\t\t\treturn {ext: 'mov', mime: 'video/quicktime'};\n\t\t\tcase 'M4V':\n\t\t\tcase 'M4VH':\n\t\t\tcase 'M4VP':\n\t\t\t\treturn {ext: 'm4v', mime: 'video/x-m4v'};\n\t\t\tcase 'M4P':\n\t\t\t\treturn {ext: 'm4p', mime: 'video/mp4'};\n\t\t\tcase 'M4B':\n\t\t\t\treturn {ext: 'm4b', mime: 'audio/mp4'};\n\t\t\tcase 'M4A':\n\t\t\t\treturn {ext: 'm4a', mime: 'audio/x-m4a'};\n\t\t\tcase 'F4V':\n\t\t\t\treturn {ext: 'f4v', mime: 'video/mp4'};\n\t\t\tcase 'F4P':\n\t\t\t\treturn {ext: 'f4p', mime: 'video/mp4'};\n\t\t\tcase 'F4A':\n\t\t\t\treturn {ext: 'f4a', mime: 'audio/mp4'};\n\t\t\tcase 'F4B':\n\t\t\t\treturn {ext: 'f4b', mime: 'audio/mp4'};\n\t\t\tcase 'crx':\n\t\t\t\treturn {ext: 'cr3', mime: 'image/x-canon-cr3'};\n\t\t\tdefault:\n\t\t\t\tif (brandMajor.startsWith('3g')) {\n\t\t\t\t\tif (brandMajor.startsWith('3g2')) {\n\t\t\t\t\t\treturn {ext: '3g2', mime: 'video/3gpp2'};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {ext: '3gp', mime: 'video/3gpp'};\n\t\t\t\t}\n\n\t\t\t\treturn {ext: 'mp4', mime: 'video/mp4'};\n\t\t}\n\t}\n\n\tif (checkString('MThd')) {\n\t\treturn {\n\t\t\text: 'mid',\n\t\t\tmime: 'audio/midi'\n\t\t};\n\t}\n\n\tif (\n\t\tcheckString('wOFF') &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheckString('OTTO', {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff',\n\t\t\tmime: 'font/woff'\n\t\t};\n\t}\n\n\tif (\n\t\tcheckString('wOF2') &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheckString('OTTO', {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff2',\n\t\t\tmime: 'font/woff2'\n\t\t};\n\t}\n\n\tif (check([0xD4, 0xC3, 0xB2, 0xA1]) || check([0xA1, 0xB2, 0xC3, 0xD4])) {\n\t\treturn {\n\t\t\text: 'pcap',\n\t\t\tmime: 'application/vnd.tcpdump.pcap'\n\t\t};\n\t}\n\n\t// Sony DSD Stream File (DSF)\n\tif (checkString('DSD ')) {\n\t\treturn {\n\t\t\text: 'dsf',\n\t\t\tmime: 'audio/x-dsf' // Non-standard\n\t\t};\n\t}\n\n\tif (checkString('LZIP')) {\n\t\treturn {\n\t\t\text: 'lz',\n\t\t\tmime: 'application/x-lzip'\n\t\t};\n\t}\n\n\tif (checkString('fLaC')) {\n\t\treturn {\n\t\t\text: 'flac',\n\t\t\tmime: 'audio/x-flac'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x50, 0x47, 0xFB])) {\n\t\treturn {\n\t\t\text: 'bpg',\n\t\t\tmime: 'image/bpg'\n\t\t};\n\t}\n\n\tif (checkString('wvpk')) {\n\t\treturn {\n\t\t\text: 'wv',\n\t\t\tmime: 'audio/wavpack'\n\t\t};\n\t}\n\n\tif (checkString('%PDF')) {\n\t\tawait tokenizer.ignore(1350);\n\t\tconst maxBufferSize = 10 * 1024 * 1024;\n\t\tconst buffer = Buffer.alloc(Math.min(maxBufferSize, tokenizer.fileInfo.size));\n\t\tawait tokenizer.readBuffer(buffer, {mayBeLess: true});\n\n\t\t// Check if this is an Adobe Illustrator file\n\t\tif (buffer.includes(Buffer.from('AIPrivateData'))) {\n\t\t\treturn {\n\t\t\t\text: 'ai',\n\t\t\t\tmime: 'application/postscript'\n\t\t\t};\n\t\t}\n\n\t\t// Assume this is just a normal PDF\n\t\treturn {\n\t\t\text: 'pdf',\n\t\t\tmime: 'application/pdf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x61, 0x73, 0x6D])) {\n\t\treturn {\n\t\t\text: 'wasm',\n\t\t\tmime: 'application/wasm'\n\t\t};\n\t}\n\n\t// TIFF, little-endian type\n\tif (check([0x49, 0x49, 0x2A, 0x0])) {\n\t\tif (checkString('CR', {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'cr2',\n\t\t\t\tmime: 'image/x-canon-cr2'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x1C, 0x00, 0xFE, 0x00], {offset: 8}) || check([0x1F, 0x00, 0x0B, 0x00], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'nef',\n\t\t\t\tmime: 'image/x-nikon-nef'\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tcheck([0x08, 0x00, 0x00, 0x00], {offset: 4}) &&\n\t\t\t(check([0x2D, 0x00, 0xFE, 0x00], {offset: 8}) ||\n\t\t\t\tcheck([0x27, 0x00, 0xFE, 0x00], {offset: 8}))\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'dng',\n\t\t\t\tmime: 'image/x-adobe-dng'\n\t\t\t};\n\t\t}\n\n\t\tbuffer = Buffer.alloc(24);\n\t\tawait tokenizer.peekBuffer(buffer);\n\t\tif (\n\t\t\t(check([0x10, 0xFB, 0x86, 0x01], {offset: 4}) || check([0x08, 0x00, 0x00, 0x00], {offset: 4})) &&\n\t\t\t// This pattern differentiates ARW from other TIFF-ish file types:\n\t\t\tcheck([0x00, 0xFE, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x01], {offset: 9})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'arw',\n\t\t\t\tmime: 'image/x-sony-arw'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff'\n\t\t};\n\t}\n\n\t// TIFF, big-endian type\n\tif (check([0x4D, 0x4D, 0x0, 0x2A])) {\n\t\treturn {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff'\n\t\t};\n\t}\n\n\tif (checkString('MAC ')) {\n\t\treturn {\n\t\t\text: 'ape',\n\t\t\tmime: 'audio/ape'\n\t\t};\n\t}\n\n\t// https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska\n\tif (check([0x1A, 0x45, 0xDF, 0xA3])) { // Root element: EBML\n\t\tasync function readField() {\n\t\t\tconst msb = await tokenizer.peekNumber(Token.UINT8);\n\t\t\tlet mask = 0x80;\n\t\t\tlet ic = 0; // 0 = A, 1 = B, 2 = C, 3 = D\n\n\t\t\twhile ((msb & mask) === 0 && mask !== 0) {\n\t\t\t\t++ic;\n\t\t\t\tmask >>= 1;\n\t\t\t}\n\n\t\t\tconst id = Buffer.alloc(ic + 1);\n\t\t\tawait tokenizer.readBuffer(id);\n\t\t\treturn id;\n\t\t}\n\n\t\tasync function readElement() {\n\t\t\tconst id = await readField();\n\t\t\tconst lenField = await readField();\n\t\t\tlenField[0] ^= 0x80 >> (lenField.length - 1);\n\t\t\tconst nrLen = Math.min(6, lenField.length); // JavaScript can max read 6 bytes integer\n\t\t\treturn {\n\t\t\t\tid: id.readUIntBE(0, id.length),\n\t\t\t\tlen: lenField.readUIntBE(lenField.length - nrLen, nrLen)\n\t\t\t};\n\t\t}\n\n\t\tasync function readChildren(level, children) {\n\t\t\twhile (children > 0) {\n\t\t\t\tconst e = await readElement();\n\t\t\t\tif (e.id === 0x4282) {\n\t\t\t\t\treturn tokenizer.readToken(new Token.StringType(e.len, 'utf-8')); // Return DocType\n\t\t\t\t}\n\n\t\t\t\tawait tokenizer.ignore(e.len); // ignore payload\n\t\t\t\t--children;\n\t\t\t}\n\t\t}\n\n\t\tconst re = await readElement();\n\t\tconst docType = await readChildren(1, re.len);\n\n\t\tswitch (docType) {\n\t\t\tcase 'webm':\n\t\t\t\treturn {\n\t\t\t\t\text: 'webm',\n\t\t\t\t\tmime: 'video/webm'\n\t\t\t\t};\n\n\t\t\tcase 'matroska':\n\t\t\t\treturn {\n\t\t\t\t\text: 'mkv',\n\t\t\t\t\tmime: 'video/x-matroska'\n\t\t\t\t};\n\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\t// RIFF file format which might be AVI, WAV, QCP, etc\n\tif (check([0x52, 0x49, 0x46, 0x46])) {\n\t\tif (check([0x41, 0x56, 0x49], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'avi',\n\t\t\t\tmime: 'video/vnd.avi'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'wav',\n\t\t\t\tmime: 'audio/vnd.wave'\n\t\t\t};\n\t\t}\n\n\t\t// QLCM, QCP file\n\t\tif (check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'qcp',\n\t\t\t\tmime: 'audio/qcelp'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (checkString('SQLi')) {\n\t\treturn {\n\t\t\text: 'sqlite',\n\t\t\tmime: 'application/x-sqlite3'\n\t\t};\n\t}\n\n\tif (check([0x4E, 0x45, 0x53, 0x1A])) {\n\t\treturn {\n\t\t\text: 'nes',\n\t\t\tmime: 'application/x-nintendo-nes-rom'\n\t\t};\n\t}\n\n\tif (checkString('Cr24')) {\n\t\treturn {\n\t\t\text: 'crx',\n\t\t\tmime: 'application/x-google-chrome-extension'\n\t\t};\n\t}\n\n\tif (\n\t\tcheckString('MSCF') ||\n\t\tcheckString('ISc(')\n\t) {\n\t\treturn {\n\t\t\text: 'cab',\n\t\t\tmime: 'application/vnd.ms-cab-compressed'\n\t\t};\n\t}\n\n\tif (check([0xED, 0xAB, 0xEE, 0xDB])) {\n\t\treturn {\n\t\t\text: 'rpm',\n\t\t\tmime: 'application/x-rpm'\n\t\t};\n\t}\n\n\tif (check([0xC5, 0xD0, 0xD3, 0xC6])) {\n\t\treturn {\n\t\t\text: 'eps',\n\t\t\tmime: 'application/eps'\n\t\t};\n\t}\n\n\tif (check([0x28, 0xB5, 0x2F, 0xFD])) {\n\t\treturn {\n\t\t\text: 'zst',\n\t\t\tmime: 'application/zstd'\n\t\t};\n\t}\n\n\t// -- 5-byte signatures --\n\n\tif (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {\n\t\treturn {\n\t\t\text: 'otf',\n\t\t\tmime: 'font/otf'\n\t\t};\n\t}\n\n\tif (checkString('#!AMR')) {\n\t\treturn {\n\t\t\text: 'amr',\n\t\t\tmime: 'audio/amr'\n\t\t};\n\t}\n\n\tif (checkString('{\\\\rtf')) {\n\t\treturn {\n\t\t\text: 'rtf',\n\t\t\tmime: 'application/rtf'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x56, 0x01])) {\n\t\treturn {\n\t\t\text: 'flv',\n\t\t\tmime: 'video/x-flv'\n\t\t};\n\t}\n\n\tif (checkString('IMPM')) {\n\t\treturn {\n\t\t\text: 'it',\n\t\t\tmime: 'audio/x-it'\n\t\t};\n\t}\n\n\tif (\n\t\tcheckString('-lh0-', {offset: 2}) ||\n\t\tcheckString('-lh1-', {offset: 2}) ||\n\t\tcheckString('-lh2-', {offset: 2}) ||\n\t\tcheckString('-lh3-', {offset: 2}) ||\n\t\tcheckString('-lh4-', {offset: 2}) ||\n\t\tcheckString('-lh5-', {offset: 2}) ||\n\t\tcheckString('-lh6-', {offset: 2}) ||\n\t\tcheckString('-lh7-', {offset: 2}) ||\n\t\tcheckString('-lzs-', {offset: 2}) ||\n\t\tcheckString('-lz4-', {offset: 2}) ||\n\t\tcheckString('-lz5-', {offset: 2}) ||\n\t\tcheckString('-lhd-', {offset: 2})\n\t) {\n\t\treturn {\n\t\t\text: 'lzh',\n\t\t\tmime: 'application/x-lzh-compressed'\n\t\t};\n\t}\n\n\t// MPEG program stream (PS or MPEG-PS)\n\tif (check([0x00, 0x00, 0x01, 0xBA])) {\n\t\t//  MPEG-PS, MPEG-1 Part 1\n\t\tif (check([0x21], {offset: 4, mask: [0xF1]})) {\n\t\t\treturn {\n\t\t\t\text: 'mpg', // May also be .ps, .mpeg\n\t\t\t\tmime: 'video/MP1S'\n\t\t\t};\n\t\t}\n\n\t\t// MPEG-PS, MPEG-2 Part 1\n\t\tif (check([0x44], {offset: 4, mask: [0xC4]})) {\n\t\t\treturn {\n\t\t\t\text: 'mpg', // May also be .mpg, .m2p, .vob or .sub\n\t\t\t\tmime: 'video/MP2P'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (checkString('ITSF')) {\n\t\treturn {\n\t\t\text: 'chm',\n\t\t\tmime: 'application/vnd.ms-htmlhelp'\n\t\t};\n\t}\n\n\t// -- 6-byte signatures --\n\n\tif (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {\n\t\treturn {\n\t\t\text: 'xz',\n\t\t\tmime: 'application/x-xz'\n\t\t};\n\t}\n\n\tif (checkString('<?xml ')) {\n\t\treturn {\n\t\t\text: 'xml',\n\t\t\tmime: 'application/xml'\n\t\t};\n\t}\n\n\tif (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {\n\t\treturn {\n\t\t\text: '7z',\n\t\t\tmime: 'application/x-7z-compressed'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) &&\n\t\t(buffer[6] === 0x0 || buffer[6] === 0x1)\n\t) {\n\t\treturn {\n\t\t\text: 'rar',\n\t\t\tmime: 'application/x-rar-compressed'\n\t\t};\n\t}\n\n\tif (checkString('solid ')) {\n\t\treturn {\n\t\t\text: 'stl',\n\t\t\tmime: 'model/stl'\n\t\t};\n\t}\n\n\t// -- 7-byte signatures --\n\n\tif (checkString('BLENDER')) {\n\t\treturn {\n\t\t\text: 'blend',\n\t\t\tmime: 'application/x-blender'\n\t\t};\n\t}\n\n\tif (checkString('!<arch>')) {\n\t\tawait tokenizer.ignore(8);\n\t\tconst str = await tokenizer.readToken(new Token.StringType(13, 'ascii'));\n\t\tif (str === 'debian-binary') {\n\t\t\treturn {\n\t\t\t\text: 'deb',\n\t\t\t\tmime: 'application/x-deb'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\text: 'ar',\n\t\t\tmime: 'application/x-unix-archive'\n\t\t};\n\t}\n\n\t// -- 8-byte signatures --\n\n\tif (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\t// APNG format (https://wiki.mozilla.org/APNG_Specification)\n\t\t// 1. Find the first IDAT (image data) chunk (49 44 41 54)\n\t\t// 2. Check if there is an \"acTL\" chunk before the IDAT one (61 63 54 4C)\n\n\t\t// Offset calculated as follows:\n\t\t// - 8 bytes: PNG signature\n\t\t// - 4 (length) + 4 (chunk type) + 13 (chunk data) + 4 (CRC): IHDR chunk\n\n\t\tawait tokenizer.ignore(8); // ignore PNG signature\n\n\t\tasync function readChunkHeader() {\n\t\t\treturn {\n\t\t\t\tlength: await tokenizer.readToken(Token.INT32_BE),\n\t\t\t\ttype: await tokenizer.readToken(new Token.StringType(4, 'binary'))\n\t\t\t};\n\t\t}\n\n\t\tdo {\n\t\t\tconst chunk = await readChunkHeader();\n\t\t\tif (chunk.length < 0) {\n\t\t\t\treturn; // Invalid chunk length\n\t\t\t}\n\n\t\t\tswitch (chunk.type) {\n\t\t\t\tcase 'IDAT':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'png',\n\t\t\t\t\t\tmime: 'image/png'\n\t\t\t\t\t};\n\t\t\t\tcase 'acTL':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'apng',\n\t\t\t\t\t\tmime: 'image/apng'\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\tawait tokenizer.ignore(chunk.length + 4); // Ignore chunk-data + CRC\n\t\t\t}\n\t\t} while (tokenizer.position + 8 < tokenizer.fileInfo.size);\n\n\t\treturn {\n\t\t\text: 'png',\n\t\t\tmime: 'image/png'\n\t\t};\n\t}\n\n\tif (check([0x41, 0x52, 0x52, 0x4F, 0x57, 0x31, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'arrow',\n\t\t\tmime: 'application/x-apache-arrow'\n\t\t};\n\t}\n\n\tif (check([0x67, 0x6C, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'glb',\n\t\t\tmime: 'model/gltf-binary'\n\t\t};\n\t}\n\n\t// `mov` format variants\n\tif (\n\t\tcheck([0x66, 0x72, 0x65, 0x65], {offset: 4}) || // `free`\n\t\tcheck([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // `mdat` MJPEG\n\t\tcheck([0x6D, 0x6F, 0x6F, 0x76], {offset: 4}) || // `moov`\n\t\tcheck([0x77, 0x69, 0x64, 0x65], {offset: 4}) // `wide`\n\t) {\n\t\treturn {\n\t\t\text: 'mov',\n\t\t\tmime: 'video/quicktime'\n\t\t};\n\t}\n\n\t// -- 9-byte signatures --\n\n\tif (check([0x49, 0x49, 0x52, 0x4F, 0x08, 0x00, 0x00, 0x00, 0x18])) {\n\t\treturn {\n\t\t\text: 'orf',\n\t\t\tmime: 'image/x-olympus-orf'\n\t\t};\n\t}\n\n\tif (checkString('gimp xcf ')) {\n\t\treturn {\n\t\t\text: 'xcf',\n\t\t\tmime: 'image/x-xcf'\n\t\t};\n\t}\n\n\t// -- 12-byte signatures --\n\n\tif (check([0x49, 0x49, 0x55, 0x00, 0x18, 0x00, 0x00, 0x00, 0x88, 0xE7, 0x74, 0xD8])) {\n\t\treturn {\n\t\t\text: 'rw2',\n\t\t\tmime: 'image/x-panasonic-rw2'\n\t\t};\n\t}\n\n\t// ASF_Header_Object first 80 bytes\n\tif (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {\n\t\tasync function readHeader() {\n\t\t\tconst guid = Buffer.alloc(16);\n\t\t\tawait tokenizer.readBuffer(guid);\n\t\t\treturn {\n\t\t\t\tid: guid,\n\t\t\t\tsize: Number(await tokenizer.readToken(Token.UINT64_LE))\n\t\t\t};\n\t\t}\n\n\t\tawait tokenizer.ignore(30);\n\t\t// Search for header should be in first 1KB of file.\n\t\twhile (tokenizer.position + 24 < tokenizer.fileInfo.size) {\n\t\t\tconst header = await readHeader();\n\t\t\tlet payload = header.size - 24;\n\t\t\tif (_check(header.id, [0x91, 0x07, 0xDC, 0xB7, 0xB7, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65])) {\n\t\t\t\t// Sync on Stream-Properties-Object (B7DC0791-A9B7-11CF-8EE6-00C00C205365)\n\t\t\t\tconst typeId = Buffer.alloc(16);\n\t\t\t\tpayload -= await tokenizer.readBuffer(typeId);\n\n\t\t\t\tif (_check(typeId, [0x40, 0x9E, 0x69, 0xF8, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t// Found audio:\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\tmime: 'audio/x-ms-asf'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (_check(typeId, [0xC0, 0xEF, 0x19, 0xBC, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t// Found video:\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\tmime: 'video/x-ms-asf'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tawait tokenizer.ignore(payload);\n\t\t}\n\n\t\t// Default to ASF generic extension\n\t\treturn {\n\t\t\text: 'asf',\n\t\t\tmime: 'application/vnd.ms-asf'\n\t\t};\n\t}\n\n\tif (check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\treturn {\n\t\t\text: 'ktx',\n\t\t\tmime: 'image/ktx'\n\t\t};\n\t}\n\n\tif ((check([0x7E, 0x10, 0x04]) || check([0x7E, 0x18, 0x04])) && check([0x30, 0x4D, 0x49, 0x45], {offset: 4})) {\n\t\treturn {\n\t\t\text: 'mie',\n\t\t\tmime: 'application/x-mie'\n\t\t};\n\t}\n\n\tif (check([0x27, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], {offset: 2})) {\n\t\treturn {\n\t\t\text: 'shp',\n\t\t\tmime: 'application/x-esri-shape'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {\n\t\t// JPEG-2000 family\n\n\t\tawait tokenizer.ignore(20);\n\t\tconst type = await tokenizer.readToken(new Token.StringType(4, 'ascii'));\n\t\tswitch (type) {\n\t\t\tcase 'jp2 ':\n\t\t\t\treturn {\n\t\t\t\t\text: 'jp2',\n\t\t\t\t\tmime: 'image/jp2'\n\t\t\t\t};\n\t\t\tcase 'jpx ':\n\t\t\t\treturn {\n\t\t\t\t\text: 'jpx',\n\t\t\t\t\tmime: 'image/jpx'\n\t\t\t\t};\n\t\t\tcase 'jpm ':\n\t\t\t\treturn {\n\t\t\t\t\text: 'jpm',\n\t\t\t\t\tmime: 'image/jpm'\n\t\t\t\t};\n\t\t\tcase 'mjp2':\n\t\t\t\treturn {\n\t\t\t\t\text: 'mj2',\n\t\t\t\t\tmime: 'image/mj2'\n\t\t\t\t};\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tif (\n\t\tcheck([0xFF, 0x0A]) ||\n\t\tcheck([0x00, 0x00, 0x00, 0x0C, 0x4A, 0x58, 0x4C, 0x20, 0x0D, 0x0A, 0x87, 0x0A])\n\t) {\n\t\treturn {\n\t\t\text: 'jxl',\n\t\t\tmime: 'image/jxl'\n\t\t};\n\t}\n\n\t// -- Unsafe signatures --\n\n\tif (\n\t\tcheck([0x0, 0x0, 0x1, 0xBA]) ||\n\t\tcheck([0x0, 0x0, 0x1, 0xB3])\n\t) {\n\t\treturn {\n\t\t\text: 'mpg',\n\t\t\tmime: 'video/mpeg'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x01, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'ttf',\n\t\t\tmime: 'font/ttf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x01, 0x00])) {\n\t\treturn {\n\t\t\text: 'ico',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x02, 0x00])) {\n\t\treturn {\n\t\t\text: 'cur',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {\n\t\t// Detected Microsoft Compound File Binary File (MS-CFB) Format.\n\t\treturn {\n\t\t\text: 'cfb',\n\t\t\tmime: 'application/x-cfb'\n\t\t};\n\t}\n\n\t// Increase sample size from 12 to 256.\n\tawait tokenizer.peekBuffer(buffer, {length: Math.min(256, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t// -- 15-byte signatures --\n\n\tif (checkString('BEGIN:')) {\n\t\tif (checkString('VCARD', {offset: 6})) {\n\t\t\treturn {\n\t\t\t\text: 'vcf',\n\t\t\t\tmime: 'text/vcard'\n\t\t\t};\n\t\t}\n\n\t\tif (checkString('VCALENDAR', {offset: 6})) {\n\t\t\treturn {\n\t\t\t\text: 'ics',\n\t\t\t\tmime: 'text/calendar'\n\t\t\t};\n\t\t}\n\t}\n\n\t// `raf` is here just to keep all the raw image detectors together.\n\tif (checkString('FUJIFILMCCD-RAW')) {\n\t\treturn {\n\t\t\text: 'raf',\n\t\t\tmime: 'image/x-fujifilm-raf'\n\t\t};\n\t}\n\n\tif (checkString('Extended Module:')) {\n\t\treturn {\n\t\t\text: 'xm',\n\t\t\tmime: 'audio/x-xm'\n\t\t};\n\t}\n\n\tif (checkString('Creative Voice File')) {\n\t\treturn {\n\t\t\text: 'voc',\n\t\t\tmime: 'audio/x-voc'\n\t\t};\n\t}\n\n\tif (check([0x04, 0x00, 0x00, 0x00]) && buffer.length >= 16) { // Rough & quick check Pickle/ASAR\n\t\tconst jsonSize = buffer.readUInt32LE(12);\n\t\tif (jsonSize > 12 && buffer.length >= jsonSize + 16) {\n\t\t\ttry {\n\t\t\t\tconst header = buffer.slice(16, jsonSize + 16).toString();\n\t\t\t\tconst json = JSON.parse(header);\n\t\t\t\t// Check if Pickle is ASAR\n\t\t\t\tif (json.files) { // Final check, assuring Pickle/ASAR format\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'asar',\n\t\t\t\t\t\tmime: 'application/x-asar'\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} catch (_) {\n\t\t\t}\n\t\t}\n\t}\n\n\tif (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {\n\t\treturn {\n\t\t\text: 'mxf',\n\t\t\tmime: 'application/mxf'\n\t\t};\n\t}\n\n\tif (checkString('SCRM', {offset: 44})) {\n\t\treturn {\n\t\t\text: 's3m',\n\t\t\tmime: 'audio/x-s3m'\n\t\t};\n\t}\n\n\tif (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) {\n\t\treturn {\n\t\t\text: 'mts',\n\t\t\tmime: 'video/mp2t'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {\n\t\treturn {\n\t\t\text: 'mobi',\n\t\t\tmime: 'application/x-mobipocket-ebook'\n\t\t};\n\t}\n\n\tif (check([0x44, 0x49, 0x43, 0x4D], {offset: 128})) {\n\t\treturn {\n\t\t\text: 'dcm',\n\t\t\tmime: 'application/dicom'\n\t\t};\n\t}\n\n\tif (check([0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46])) {\n\t\treturn {\n\t\t\text: 'lnk',\n\t\t\tmime: 'application/x.ms.shortcut' // Invented by us\n\t\t};\n\t}\n\n\tif (check([0x62, 0x6F, 0x6F, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x72, 0x6B, 0x00, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'alias',\n\t\t\tmime: 'application/x.apple.alias' // Invented by us\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4C, 0x50], {offset: 34}) &&\n\t\t(\n\t\t\tcheck([0x00, 0x00, 0x01], {offset: 8}) ||\n\t\t\tcheck([0x01, 0x00, 0x02], {offset: 8}) ||\n\t\t\tcheck([0x02, 0x00, 0x02], {offset: 8})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'eot',\n\t\t\tmime: 'application/vnd.ms-fontobject'\n\t\t};\n\t}\n\n\tif (check([0x06, 0x06, 0xED, 0xF5, 0xD8, 0x1D, 0x46, 0xE5, 0xBD, 0x31, 0xEF, 0xE7, 0xFE, 0x74, 0xB7, 0x1D])) {\n\t\treturn {\n\t\t\text: 'indd',\n\t\t\tmime: 'application/x-indesign'\n\t\t};\n\t}\n\n\t// Increase sample size from 256 to 512\n\tawait tokenizer.peekBuffer(buffer, {length: Math.min(512, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t// Requires a buffer size of 512 bytes\n\tif (tarHeaderChecksumMatches(buffer)) {\n\t\treturn {\n\t\t\text: 'tar',\n\t\t\tmime: 'application/x-tar'\n\t\t};\n\t}\n\n\tif (check([0xFF, 0xFE, 0xFF, 0x0E, 0x53, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x55, 0x00, 0x70, 0x00, 0x20, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6C, 0x00])) {\n\t\treturn {\n\t\t\text: 'skp',\n\t\t\tmime: 'application/vnd.sketchup.skp'\n\t\t};\n\t}\n\n\tif (checkString('-----BEGIN PGP MESSAGE-----')) {\n\t\treturn {\n\t\t\text: 'pgp',\n\t\t\tmime: 'application/pgp-encrypted'\n\t\t};\n\t}\n\n\t// Check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE)\n\tif (buffer.length >= 2 && check([0xFF, 0xE0], {offset: 0, mask: [0xFF, 0xE0]})) {\n\t\tif (check([0x10], {offset: 1, mask: [0x16]})) {\n\t\t\t// Check for (ADTS) MPEG-2\n\t\t\tif (check([0x08], {offset: 1, mask: [0x08]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'aac',\n\t\t\t\t\tmime: 'audio/aac'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Must be (ADTS) MPEG-4\n\t\t\treturn {\n\t\t\t\text: 'aac',\n\t\t\t\tmime: 'audio/aac'\n\t\t\t};\n\t\t}\n\n\t\t// MPEG 1 or 2 Layer 3 header\n\t\t// Check for MPEG layer 3\n\t\tif (check([0x02], {offset: 1, mask: [0x06]})) {\n\t\t\treturn {\n\t\t\t\text: 'mp3',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\t// Check for MPEG layer 2\n\t\tif (check([0x04], {offset: 1, mask: [0x06]})) {\n\t\t\treturn {\n\t\t\t\text: 'mp2',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\t// Check for MPEG layer 1\n\t\tif (check([0x06], {offset: 1, mask: [0x06]})) {\n\t\t\treturn {\n\t\t\t\text: 'mp1',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\t}\n}\n\nconst stream = readableStream => new Promise((resolve, reject) => {\n\t// Using `eval` to work around issues when bundling with Webpack\n\tconst stream = eval('require')('stream'); // eslint-disable-line no-eval\n\n\treadableStream.on('error', reject);\n\treadableStream.once('readable', async () => {\n\t\t// Set up output stream\n\t\tconst pass = new stream.PassThrough();\n\t\tlet outputStream;\n\t\tif (stream.pipeline) {\n\t\t\toutputStream = stream.pipeline(readableStream, pass, () => {\n\t\t\t});\n\t\t} else {\n\t\t\toutputStream = readableStream.pipe(pass);\n\t\t}\n\n\t\t// Read the input stream and detect the filetype\n\t\tconst chunk = readableStream.read(minimumBytes) || readableStream.read() || Buffer.alloc(0);\n\t\ttry {\n\t\t\tconst fileType = await fromBuffer(chunk);\n\t\t\tpass.fileType = fileType;\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\n\t\tresolve(outputStream);\n\t});\n});\n\nconst fileType = {\n\tfromStream,\n\tfromTokenizer,\n\tfromBuffer,\n\tstream\n};\n\nObject.defineProperty(fileType, 'extensions', {\n\tget() {\n\t\treturn new Set(supported.extensions);\n\t}\n});\n\nObject.defineProperty(fileType, 'mimeTypes', {\n\tget() {\n\t\treturn new Set(supported.mimeTypes);\n\t}\n});\n\nmodule.exports = fileType;\n","/**\n * @param { Promise } promise\n * @param { Object= } errorExt - Additional Information you can pass to the err object\n * @return { Promise }\n */\nfunction to(promise, errorExt) {\n    return promise\n        .then(function (data) { return [null, data]; })\n        .catch(function (err) {\n        if (errorExt) {\n            Object.assign(err, errorExt);\n        }\n        return [err, undefined];\n    });\n}\n\nexport { to };\nexport default to;\n//# sourceMappingURL=await-to-js.es5.js.map\n","import { promises as fs } from \"fs\";\nexport { existsSync } from \"fs\";\nexport const readFile = fs.readFile;\nexport const writeFile = fs.writeFile;\n//# sourceMappingURL=index.js.map","'use strict';\n\n/**\n * @param typeMap [Object] Map of MIME type -> Array[extensions]\n * @param ...\n */\nfunction Mime() {\n  this._types = Object.create(null);\n  this._extensions = Object.create(null);\n\n  for (let i = 0; i < arguments.length; i++) {\n    this.define(arguments[i]);\n  }\n\n  this.define = this.define.bind(this);\n  this.getType = this.getType.bind(this);\n  this.getExtension = this.getExtension.bind(this);\n}\n\n/**\n * Define mimetype -> extension mappings.  Each key is a mime-type that maps\n * to an array of extensions associated with the type.  The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * If a type declares an extension that has already been defined, an error will\n * be thrown.  To suppress this error and force the extension to be associated\n * with the new type, pass `force`=true.  Alternatively, you may prefix the\n * extension with \"*\" to map the type to extension, without mapping the\n * extension to the type.\n *\n * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']});\n *\n *\n * @param map (Object) type definitions\n * @param force (Boolean) if true, force overriding of existing definitions\n */\nMime.prototype.define = function(typeMap, force) {\n  for (let type in typeMap) {\n    let extensions = typeMap[type].map(function(t) {\n      return t.toLowerCase();\n    });\n    type = type.toLowerCase();\n\n    for (let i = 0; i < extensions.length; i++) {\n      const ext = extensions[i];\n\n      // '*' prefix = not the preferred type for this extension.  So fixup the\n      // extension, and skip it.\n      if (ext[0] === '*') {\n        continue;\n      }\n\n      if (!force && (ext in this._types)) {\n        throw new Error(\n          'Attempt to change mapping for \"' + ext +\n          '\" extension from \"' + this._types[ext] + '\" to \"' + type +\n          '\". Pass `force=true` to allow this, otherwise remove \"' + ext +\n          '\" from the list of extensions for \"' + type + '\".'\n        );\n      }\n\n      this._types[ext] = type;\n    }\n\n    // Use first extension as default\n    if (force || !this._extensions[type]) {\n      const ext = extensions[0];\n      this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1);\n    }\n  }\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.getType = function(path) {\n  path = String(path);\n  let last = path.replace(/^.*[/\\\\]/, '').toLowerCase();\n  let ext = last.replace(/^.*\\./, '').toLowerCase();\n\n  let hasPath = last.length < path.length;\n  let hasDot = ext.length < last.length - 1;\n\n  return (hasDot || !hasPath) && this._types[ext] || null;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.getExtension = function(type) {\n  type = /^\\s*([^;\\s]*)/.test(type) && RegExp.$1;\n  return type && this._extensions[type.toLowerCase()] || null;\n};\n\nmodule.exports = Mime;\n","module.exports = {\"application/andrew-inset\":[\"ez\"],\"application/applixware\":[\"aw\"],\"application/atom+xml\":[\"atom\"],\"application/atomcat+xml\":[\"atomcat\"],\"application/atomdeleted+xml\":[\"atomdeleted\"],\"application/atomsvc+xml\":[\"atomsvc\"],\"application/atsc-dwd+xml\":[\"dwd\"],\"application/atsc-held+xml\":[\"held\"],\"application/atsc-rsat+xml\":[\"rsat\"],\"application/bdoc\":[\"bdoc\"],\"application/calendar+xml\":[\"xcs\"],\"application/ccxml+xml\":[\"ccxml\"],\"application/cdfx+xml\":[\"cdfx\"],\"application/cdmi-capability\":[\"cdmia\"],\"application/cdmi-container\":[\"cdmic\"],\"application/cdmi-domain\":[\"cdmid\"],\"application/cdmi-object\":[\"cdmio\"],\"application/cdmi-queue\":[\"cdmiq\"],\"application/cu-seeme\":[\"cu\"],\"application/dash+xml\":[\"mpd\"],\"application/davmount+xml\":[\"davmount\"],\"application/docbook+xml\":[\"dbk\"],\"application/dssc+der\":[\"dssc\"],\"application/dssc+xml\":[\"xdssc\"],\"application/ecmascript\":[\"es\",\"ecma\"],\"application/emma+xml\":[\"emma\"],\"application/emotionml+xml\":[\"emotionml\"],\"application/epub+zip\":[\"epub\"],\"application/exi\":[\"exi\"],\"application/express\":[\"exp\"],\"application/fdt+xml\":[\"fdt\"],\"application/font-tdpfr\":[\"pfr\"],\"application/geo+json\":[\"geojson\"],\"application/gml+xml\":[\"gml\"],\"application/gpx+xml\":[\"gpx\"],\"application/gxf\":[\"gxf\"],\"application/gzip\":[\"gz\"],\"application/hjson\":[\"hjson\"],\"application/hyperstudio\":[\"stk\"],\"application/inkml+xml\":[\"ink\",\"inkml\"],\"application/ipfix\":[\"ipfix\"],\"application/its+xml\":[\"its\"],\"application/java-archive\":[\"jar\",\"war\",\"ear\"],\"application/java-serialized-object\":[\"ser\"],\"application/java-vm\":[\"class\"],\"application/javascript\":[\"js\",\"mjs\"],\"application/json\":[\"json\",\"map\"],\"application/json5\":[\"json5\"],\"application/jsonml+json\":[\"jsonml\"],\"application/ld+json\":[\"jsonld\"],\"application/lgr+xml\":[\"lgr\"],\"application/lost+xml\":[\"lostxml\"],\"application/mac-binhex40\":[\"hqx\"],\"application/mac-compactpro\":[\"cpt\"],\"application/mads+xml\":[\"mads\"],\"application/manifest+json\":[\"webmanifest\"],\"application/marc\":[\"mrc\"],\"application/marcxml+xml\":[\"mrcx\"],\"application/mathematica\":[\"ma\",\"nb\",\"mb\"],\"application/mathml+xml\":[\"mathml\"],\"application/mbox\":[\"mbox\"],\"application/mediaservercontrol+xml\":[\"mscml\"],\"application/metalink+xml\":[\"metalink\"],\"application/metalink4+xml\":[\"meta4\"],\"application/mets+xml\":[\"mets\"],\"application/mmt-aei+xml\":[\"maei\"],\"application/mmt-usd+xml\":[\"musd\"],\"application/mods+xml\":[\"mods\"],\"application/mp21\":[\"m21\",\"mp21\"],\"application/mp4\":[\"mp4s\",\"m4p\"],\"application/msword\":[\"doc\",\"dot\"],\"application/mxf\":[\"mxf\"],\"application/n-quads\":[\"nq\"],\"application/n-triples\":[\"nt\"],\"application/node\":[\"cjs\"],\"application/octet-stream\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"],\"application/oda\":[\"oda\"],\"application/oebps-package+xml\":[\"opf\"],\"application/ogg\":[\"ogx\"],\"application/omdoc+xml\":[\"omdoc\"],\"application/onenote\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"],\"application/oxps\":[\"oxps\"],\"application/p2p-overlay+xml\":[\"relo\"],\"application/patch-ops-error+xml\":[\"xer\"],\"application/pdf\":[\"pdf\"],\"application/pgp-encrypted\":[\"pgp\"],\"application/pgp-signature\":[\"asc\",\"sig\"],\"application/pics-rules\":[\"prf\"],\"application/pkcs10\":[\"p10\"],\"application/pkcs7-mime\":[\"p7m\",\"p7c\"],\"application/pkcs7-signature\":[\"p7s\"],\"application/pkcs8\":[\"p8\"],\"application/pkix-attr-cert\":[\"ac\"],\"application/pkix-cert\":[\"cer\"],\"application/pkix-crl\":[\"crl\"],\"application/pkix-pkipath\":[\"pkipath\"],\"application/pkixcmp\":[\"pki\"],\"application/pls+xml\":[\"pls\"],\"application/postscript\":[\"ai\",\"eps\",\"ps\"],\"application/provenance+xml\":[\"provx\"],\"application/pskc+xml\":[\"pskcxml\"],\"application/raml+yaml\":[\"raml\"],\"application/rdf+xml\":[\"rdf\",\"owl\"],\"application/reginfo+xml\":[\"rif\"],\"application/relax-ng-compact-syntax\":[\"rnc\"],\"application/resource-lists+xml\":[\"rl\"],\"application/resource-lists-diff+xml\":[\"rld\"],\"application/rls-services+xml\":[\"rs\"],\"application/route-apd+xml\":[\"rapd\"],\"application/route-s-tsid+xml\":[\"sls\"],\"application/route-usd+xml\":[\"rusd\"],\"application/rpki-ghostbusters\":[\"gbr\"],\"application/rpki-manifest\":[\"mft\"],\"application/rpki-roa\":[\"roa\"],\"application/rsd+xml\":[\"rsd\"],\"application/rss+xml\":[\"rss\"],\"application/rtf\":[\"rtf\"],\"application/sbml+xml\":[\"sbml\"],\"application/scvp-cv-request\":[\"scq\"],\"application/scvp-cv-response\":[\"scs\"],\"application/scvp-vp-request\":[\"spq\"],\"application/scvp-vp-response\":[\"spp\"],\"application/sdp\":[\"sdp\"],\"application/senml+xml\":[\"senmlx\"],\"application/sensml+xml\":[\"sensmlx\"],\"application/set-payment-initiation\":[\"setpay\"],\"application/set-registration-initiation\":[\"setreg\"],\"application/shf+xml\":[\"shf\"],\"application/sieve\":[\"siv\",\"sieve\"],\"application/smil+xml\":[\"smi\",\"smil\"],\"application/sparql-query\":[\"rq\"],\"application/sparql-results+xml\":[\"srx\"],\"application/srgs\":[\"gram\"],\"application/srgs+xml\":[\"grxml\"],\"application/sru+xml\":[\"sru\"],\"application/ssdl+xml\":[\"ssdl\"],\"application/ssml+xml\":[\"ssml\"],\"application/swid+xml\":[\"swidtag\"],\"application/tei+xml\":[\"tei\",\"teicorpus\"],\"application/thraud+xml\":[\"tfi\"],\"application/timestamped-data\":[\"tsd\"],\"application/toml\":[\"toml\"],\"application/trig\":[\"trig\"],\"application/ttml+xml\":[\"ttml\"],\"application/ubjson\":[\"ubj\"],\"application/urc-ressheet+xml\":[\"rsheet\"],\"application/urc-targetdesc+xml\":[\"td\"],\"application/voicexml+xml\":[\"vxml\"],\"application/wasm\":[\"wasm\"],\"application/widget\":[\"wgt\"],\"application/winhlp\":[\"hlp\"],\"application/wsdl+xml\":[\"wsdl\"],\"application/wspolicy+xml\":[\"wspolicy\"],\"application/xaml+xml\":[\"xaml\"],\"application/xcap-att+xml\":[\"xav\"],\"application/xcap-caps+xml\":[\"xca\"],\"application/xcap-diff+xml\":[\"xdf\"],\"application/xcap-el+xml\":[\"xel\"],\"application/xcap-ns+xml\":[\"xns\"],\"application/xenc+xml\":[\"xenc\"],\"application/xhtml+xml\":[\"xhtml\",\"xht\"],\"application/xliff+xml\":[\"xlf\"],\"application/xml\":[\"xml\",\"xsl\",\"xsd\",\"rng\"],\"application/xml-dtd\":[\"dtd\"],\"application/xop+xml\":[\"xop\"],\"application/xproc+xml\":[\"xpl\"],\"application/xslt+xml\":[\"*xsl\",\"xslt\"],\"application/xspf+xml\":[\"xspf\"],\"application/xv+xml\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"],\"application/yang\":[\"yang\"],\"application/yin+xml\":[\"yin\"],\"application/zip\":[\"zip\"],\"audio/3gpp\":[\"*3gpp\"],\"audio/adpcm\":[\"adp\"],\"audio/amr\":[\"amr\"],\"audio/basic\":[\"au\",\"snd\"],\"audio/midi\":[\"mid\",\"midi\",\"kar\",\"rmi\"],\"audio/mobile-xmf\":[\"mxmf\"],\"audio/mp3\":[\"*mp3\"],\"audio/mp4\":[\"m4a\",\"mp4a\"],\"audio/mpeg\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"],\"audio/ogg\":[\"oga\",\"ogg\",\"spx\",\"opus\"],\"audio/s3m\":[\"s3m\"],\"audio/silk\":[\"sil\"],\"audio/wav\":[\"wav\"],\"audio/wave\":[\"*wav\"],\"audio/webm\":[\"weba\"],\"audio/xm\":[\"xm\"],\"font/collection\":[\"ttc\"],\"font/otf\":[\"otf\"],\"font/ttf\":[\"ttf\"],\"font/woff\":[\"woff\"],\"font/woff2\":[\"woff2\"],\"image/aces\":[\"exr\"],\"image/apng\":[\"apng\"],\"image/avif\":[\"avif\"],\"image/bmp\":[\"bmp\"],\"image/cgm\":[\"cgm\"],\"image/dicom-rle\":[\"drle\"],\"image/emf\":[\"emf\"],\"image/fits\":[\"fits\"],\"image/g3fax\":[\"g3\"],\"image/gif\":[\"gif\"],\"image/heic\":[\"heic\"],\"image/heic-sequence\":[\"heics\"],\"image/heif\":[\"heif\"],\"image/heif-sequence\":[\"heifs\"],\"image/hej2k\":[\"hej2\"],\"image/hsj2\":[\"hsj2\"],\"image/ief\":[\"ief\"],\"image/jls\":[\"jls\"],\"image/jp2\":[\"jp2\",\"jpg2\"],\"image/jpeg\":[\"jpeg\",\"jpg\",\"jpe\"],\"image/jph\":[\"jph\"],\"image/jphc\":[\"jhc\"],\"image/jpm\":[\"jpm\"],\"image/jpx\":[\"jpx\",\"jpf\"],\"image/jxr\":[\"jxr\"],\"image/jxra\":[\"jxra\"],\"image/jxrs\":[\"jxrs\"],\"image/jxs\":[\"jxs\"],\"image/jxsc\":[\"jxsc\"],\"image/jxsi\":[\"jxsi\"],\"image/jxss\":[\"jxss\"],\"image/ktx\":[\"ktx\"],\"image/ktx2\":[\"ktx2\"],\"image/png\":[\"png\"],\"image/sgi\":[\"sgi\"],\"image/svg+xml\":[\"svg\",\"svgz\"],\"image/t38\":[\"t38\"],\"image/tiff\":[\"tif\",\"tiff\"],\"image/tiff-fx\":[\"tfx\"],\"image/webp\":[\"webp\"],\"image/wmf\":[\"wmf\"],\"message/disposition-notification\":[\"disposition-notification\"],\"message/global\":[\"u8msg\"],\"message/global-delivery-status\":[\"u8dsn\"],\"message/global-disposition-notification\":[\"u8mdn\"],\"message/global-headers\":[\"u8hdr\"],\"message/rfc822\":[\"eml\",\"mime\"],\"model/3mf\":[\"3mf\"],\"model/gltf+json\":[\"gltf\"],\"model/gltf-binary\":[\"glb\"],\"model/iges\":[\"igs\",\"iges\"],\"model/mesh\":[\"msh\",\"mesh\",\"silo\"],\"model/mtl\":[\"mtl\"],\"model/obj\":[\"obj\"],\"model/step+xml\":[\"stpx\"],\"model/step+zip\":[\"stpz\"],\"model/step-xml+zip\":[\"stpxz\"],\"model/stl\":[\"stl\"],\"model/vrml\":[\"wrl\",\"vrml\"],\"model/x3d+binary\":[\"*x3db\",\"x3dbz\"],\"model/x3d+fastinfoset\":[\"x3db\"],\"model/x3d+vrml\":[\"*x3dv\",\"x3dvz\"],\"model/x3d+xml\":[\"x3d\",\"x3dz\"],\"model/x3d-vrml\":[\"x3dv\"],\"text/cache-manifest\":[\"appcache\",\"manifest\"],\"text/calendar\":[\"ics\",\"ifb\"],\"text/coffeescript\":[\"coffee\",\"litcoffee\"],\"text/css\":[\"css\"],\"text/csv\":[\"csv\"],\"text/html\":[\"html\",\"htm\",\"shtml\"],\"text/jade\":[\"jade\"],\"text/jsx\":[\"jsx\"],\"text/less\":[\"less\"],\"text/markdown\":[\"markdown\",\"md\"],\"text/mathml\":[\"mml\"],\"text/mdx\":[\"mdx\"],\"text/n3\":[\"n3\"],\"text/plain\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"],\"text/richtext\":[\"rtx\"],\"text/rtf\":[\"*rtf\"],\"text/sgml\":[\"sgml\",\"sgm\"],\"text/shex\":[\"shex\"],\"text/slim\":[\"slim\",\"slm\"],\"text/spdx\":[\"spdx\"],\"text/stylus\":[\"stylus\",\"styl\"],\"text/tab-separated-values\":[\"tsv\"],\"text/troff\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"],\"text/turtle\":[\"ttl\"],\"text/uri-list\":[\"uri\",\"uris\",\"urls\"],\"text/vcard\":[\"vcard\"],\"text/vtt\":[\"vtt\"],\"text/xml\":[\"*xml\"],\"text/yaml\":[\"yaml\",\"yml\"],\"video/3gpp\":[\"3gp\",\"3gpp\"],\"video/3gpp2\":[\"3g2\"],\"video/h261\":[\"h261\"],\"video/h263\":[\"h263\"],\"video/h264\":[\"h264\"],\"video/iso.segment\":[\"m4s\"],\"video/jpeg\":[\"jpgv\"],\"video/jpm\":[\"*jpm\",\"jpgm\"],\"video/mj2\":[\"mj2\",\"mjp2\"],\"video/mp2t\":[\"ts\"],\"video/mp4\":[\"mp4\",\"mp4v\",\"mpg4\"],\"video/mpeg\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"],\"video/ogg\":[\"ogv\"],\"video/quicktime\":[\"qt\",\"mov\"],\"video/webm\":[\"webm\"]};","'use strict';\n\nlet Mime = require('./Mime');\nmodule.exports = new Mime(require('./types/standard'));\n","/* Horizontal align modes for cover, contain, bit masks */\nexport var HorizontalAlign;\n(function (HorizontalAlign) {\n    HorizontalAlign[HorizontalAlign[\"LEFT\"] = 1] = \"LEFT\";\n    HorizontalAlign[HorizontalAlign[\"CENTER\"] = 2] = \"CENTER\";\n    HorizontalAlign[HorizontalAlign[\"RIGHT\"] = 4] = \"RIGHT\";\n})(HorizontalAlign || (HorizontalAlign = {}));\n/* Vertical align modes for cover, contain, bit masks */\nexport var VerticalAlign;\n(function (VerticalAlign) {\n    VerticalAlign[VerticalAlign[\"TOP\"] = 8] = \"TOP\";\n    VerticalAlign[VerticalAlign[\"MIDDLE\"] = 16] = \"MIDDLE\";\n    VerticalAlign[VerticalAlign[\"BOTTOM\"] = 32] = \"BOTTOM\";\n})(VerticalAlign || (VerticalAlign = {}));\n/**\n * How to blend two images together\n */\nexport var BlendMode;\n(function (BlendMode) {\n    /**\n     * Composite the source image over the destination image.\n     * This is the default value. It represents the most intuitive case, where shapes are painted on top of what is below, with transparent areas showing the destination layer.\n     */\n    BlendMode[\"SRC_OVER\"] = \"srcOver\";\n    /** Composite the source image under the destination image. */\n    BlendMode[\"DST_OVER\"] = \"dstOver\";\n    /**\n     * Multiply the color components of the source and destination images.\n     * This can only result in the same or darker colors (multiplying by white, 1.0, results in no change; multiplying by black, 0.0, results in black).\n     * When compositing two opaque images, this has similar effect to overlapping two transparencies on a projector.\n     *\n     * This mode is useful for coloring shadows.\n     */\n    BlendMode[\"MULTIPLY\"] = \"multiply\";\n    /**\n     * The Add mode adds the color information of the base layers and the blending layer.\n     * In digital terms, adding color increases the brightness.\n     */\n    BlendMode[\"ADD\"] = \"add\";\n    /**\n     * Multiply the inverse of the components of the source and destination images, and inverse the result.\n     * Inverting the components means that a fully saturated channel (opaque white) is treated as the value 0.0, and values normally treated as 0.0 (black, transparent) are treated as 1.0.\n     * This is essentially the same as modulate blend mode, but with the values of the colors inverted before the multiplication and the result being inverted back before rendering.\n     * This can only result in the same or lighter colors (multiplying by black, 1.0, results in no change; multiplying by white, 0.0, results in white). Similarly, in the alpha channel, it can only result in more opaque colors.\n     * This has similar effect to two projectors displaying their images on the same screen simultaneously.\n     */\n    BlendMode[\"SCREEN\"] = \"screen\";\n    /**\n     * Multiply the components of the source and destination images after adjusting them to favor the destination.\n     * Specifically, if the destination value is smaller, this multiplies it with the source value, whereas is the source value is smaller, it multiplies the inverse of the source value with the inverse of the destination value, then inverts the result.\n     * Inverting the components means that a fully saturated channel (opaque white) is treated as the value 0.0, and values normally treated as 0.0 (black, transparent) are treated as 1.0.\n     *\n     * The Overlay mode behaves like Screen mode in bright areas, and like Multiply mode in darker areas.\n     * With this mode, the bright areas will look brighter and the dark areas will look darker.\n     */\n    BlendMode[\"OVERLAY\"] = \"overlay\";\n    /**\n     * Composite the source and destination image by choosing the lowest value from each color channel.\n     * The opacity of the output image is computed in the same way as for srcOver.\n     */\n    BlendMode[\"DARKEN\"] = \"darken\";\n    /**\n     * Composite the source and destination image by choosing the highest value from each color channel.\n     * The opacity of the output image is computed in the same way as for srcOver.\n     */\n    BlendMode[\"LIGHTEN\"] = \"lighten\";\n    /**\n     * Multiply the components of the source and destination images after adjusting them to favor the source.\n     * Specifically, if the source value is smaller, this multiplies it with the destination value, whereas is the destination value is smaller, it multiplies the inverse of the destination value with the inverse of the source value, then inverts the result.\n     * Inverting the components means that a fully saturated channel (opaque white) is treated as the value 0.0, and values normally treated as 0.0 (black, transparent) are treated as 1.0.\n     *\n     * The effect of the Hard light mode depends on the density of the superimposed color. Using bright colors on the blending layer will create a brighter effect like the Screen modes, while dark colors will create darker colors like the Multiply mode.\n     */\n    BlendMode[\"HARD_LIGHT\"] = \"hardLight\";\n    /**\n     * Subtract the smaller value from the bigger value for each channel.\n     * Compositing black has no effect; compositing white inverts the colors of the other image.\n     * The opacity of the output image is computed in the same way as for srcOver.\n     * The effect is similar to exclusion but harsher.\n     */\n    BlendMode[\"DIFFERENCE\"] = \"difference\";\n    /**\n     * Subtract double the product of the two images from the sum of the two images.\n     * Compositing black has no effect; compositing white inverts the colors of the other image.\n     * The opacity of the output image is computed in the same way as for srcOver.\n     * The effect is similar to difference but softer.\n     */\n    BlendMode[\"EXCLUSION\"] = \"exclusion\";\n})(BlendMode || (BlendMode = {}));\n//# sourceMappingURL=constants.js.map","export function srcOver(src, dst, ops = 1) {\n    src.a *= ops;\n    const a = dst.a + src.a - dst.a * src.a;\n    const r = (src.r * src.a + dst.r * dst.a * (1 - src.a)) / a;\n    const g = (src.g * src.a + dst.g * dst.a * (1 - src.a)) / a;\n    const b = (src.b * src.a + dst.b * dst.a * (1 - src.a)) / a;\n    return { r, g, b, a };\n}\nexport function dstOver(src, dst, ops = 1) {\n    src.a *= ops;\n    const a = dst.a + src.a - dst.a * src.a;\n    const r = (dst.r * dst.a + src.r * src.a * (1 - dst.a)) / a;\n    const g = (dst.g * dst.a + src.g * src.a * (1 - dst.a)) / a;\n    const b = (dst.b * dst.a + src.b * src.a * (1 - dst.a)) / a;\n    return { r, g, b, a };\n}\nexport function multiply(src, dst, ops = 1) {\n    src.a *= ops;\n    const a = dst.a + src.a - dst.a * src.a;\n    const sra = src.r * src.a;\n    const sga = src.g * src.a;\n    const sba = src.b * src.a;\n    const dra = dst.r * dst.a;\n    const dga = dst.g * dst.a;\n    const dba = dst.b * dst.a;\n    const r = (sra * dra + sra * (1 - dst.a) + dra * (1 - src.a)) / a;\n    const g = (sga * dga + sga * (1 - dst.a) + dga * (1 - src.a)) / a;\n    const b = (sba * dba + sba * (1 - dst.a) + dba * (1 - src.a)) / a;\n    return { r, g, b, a };\n}\nexport function add(src, dst, ops = 1) {\n    src.a *= ops;\n    const a = dst.a + src.a - dst.a * src.a;\n    const sra = src.r * src.a;\n    const sga = src.g * src.a;\n    const sba = src.b * src.a;\n    const dra = dst.r * dst.a;\n    const dga = dst.g * dst.a;\n    const dba = dst.b * dst.a;\n    const r = (sra + dra) / a;\n    const g = (sga + dga) / a;\n    const b = (sba + dba) / a;\n    return { r, g, b, a };\n}\nexport function screen(src, dst, ops = 1) {\n    src.a *= ops;\n    const a = dst.a + src.a - dst.a * src.a;\n    const sra = src.r * src.a;\n    const sga = src.g * src.a;\n    const sba = src.b * src.a;\n    const dra = dst.r * dst.a;\n    const dga = dst.g * dst.a;\n    const dba = dst.b * dst.a;\n    const r = (sra * dst.a +\n        dra * src.a -\n        sra * dra +\n        sra * (1 - dst.a) +\n        dra * (1 - src.a)) /\n        a;\n    const g = (sga * dst.a +\n        dga * src.a -\n        sga * dga +\n        sga * (1 - dst.a) +\n        dga * (1 - src.a)) /\n        a;\n    const b = (sba * dst.a +\n        dba * src.a -\n        sba * dba +\n        sba * (1 - dst.a) +\n        dba * (1 - src.a)) /\n        a;\n    return { r, g, b, a };\n}\nexport function overlay(src, dst, ops = 1) {\n    src.a *= ops;\n    const a = dst.a + src.a - dst.a * src.a;\n    const sra = src.r * src.a;\n    const sga = src.g * src.a;\n    const sba = src.b * src.a;\n    const dra = dst.r * dst.a;\n    const dga = dst.g * dst.a;\n    const dba = dst.b * dst.a;\n    const r = (2 * dra <= dst.a\n        ? 2 * sra * dra + sra * (1 - dst.a) + dra * (1 - src.a)\n        : sra * (1 + dst.a) + dra * (1 + src.a) - 2 * dra * sra - dst.a * src.a) /\n        a;\n    const g = (2 * dga <= dst.a\n        ? 2 * sga * dga + sga * (1 - dst.a) + dga * (1 - src.a)\n        : sga * (1 + dst.a) + dga * (1 + src.a) - 2 * dga * sga - dst.a * src.a) /\n        a;\n    const b = (2 * dba <= dst.a\n        ? 2 * sba * dba + sba * (1 - dst.a) + dba * (1 - src.a)\n        : sba * (1 + dst.a) + dba * (1 + src.a) - 2 * dba * sba - dst.a * src.a) /\n        a;\n    return { r, g, b, a };\n}\nexport function darken(src, dst, ops = 1) {\n    src.a *= ops;\n    const a = dst.a + src.a - dst.a * src.a;\n    const sra = src.r * src.a;\n    const sga = src.g * src.a;\n    const sba = src.b * src.a;\n    const dra = dst.r * dst.a;\n    const dga = dst.g * dst.a;\n    const dba = dst.b * dst.a;\n    const r = (Math.min(sra * dst.a, dra * src.a) +\n        sra * (1 - dst.a) +\n        dra * (1 - src.a)) /\n        a;\n    const g = (Math.min(sga * dst.a, dga * src.a) +\n        sga * (1 - dst.a) +\n        dga * (1 - src.a)) /\n        a;\n    const b = (Math.min(sba * dst.a, dba * src.a) +\n        sba * (1 - dst.a) +\n        dba * (1 - src.a)) /\n        a;\n    return { r, g, b, a };\n}\nexport function lighten(src, dst, ops = 1) {\n    src.a *= ops;\n    const a = dst.a + src.a - dst.a * src.a;\n    const sra = src.r * src.a;\n    const sga = src.g * src.a;\n    const sba = src.b * src.a;\n    const dra = dst.r * dst.a;\n    const dga = dst.g * dst.a;\n    const dba = dst.b * dst.a;\n    const r = (Math.max(sra * dst.a, dra * src.a) +\n        sra * (1 - dst.a) +\n        dra * (1 - src.a)) /\n        a;\n    const g = (Math.max(sga * dst.a, dga * src.a) +\n        sga * (1 - dst.a) +\n        dga * (1 - src.a)) /\n        a;\n    const b = (Math.max(sba * dst.a, dba * src.a) +\n        sba * (1 - dst.a) +\n        dba * (1 - src.a)) /\n        a;\n    return { r, g, b, a };\n}\nexport function hardLight(src, dst, ops = 1) {\n    src.a *= ops;\n    const a = dst.a + src.a - dst.a * src.a;\n    const sra = src.r * src.a;\n    const sga = src.g * src.a;\n    const sba = src.b * src.a;\n    const dra = dst.r * dst.a;\n    const dga = dst.g * dst.a;\n    const dba = dst.b * dst.a;\n    const r = (2 * sra <= src.a\n        ? 2 * sra * dra + sra * (1 - dst.a) + dra * (1 - src.a)\n        : sra * (1 + dst.a) + dra * (1 + src.a) - 2 * dra * sra - dst.a * src.a) /\n        a;\n    const g = (2 * sga <= src.a\n        ? 2 * sga * dga + sga * (1 - dst.a) + dga * (1 - src.a)\n        : sga * (1 + dst.a) + dga * (1 + src.a) - 2 * dga * sga - dst.a * src.a) /\n        a;\n    const b = (2 * sba <= src.a\n        ? 2 * sba * dba + sba * (1 - dst.a) + dba * (1 - src.a)\n        : sba * (1 + dst.a) + dba * (1 + src.a) - 2 * dba * sba - dst.a * src.a) /\n        a;\n    return { r, g, b, a };\n}\nexport function difference(src, dst, ops = 1) {\n    src.a *= ops;\n    const a = dst.a + src.a - dst.a * src.a;\n    const sra = src.r * src.a;\n    const sga = src.g * src.a;\n    const sba = src.b * src.a;\n    const dra = dst.r * dst.a;\n    const dga = dst.g * dst.a;\n    const dba = dst.b * dst.a;\n    const r = (sra + dra - 2 * Math.min(sra * dst.a, dra * src.a)) / a;\n    const g = (sga + dga - 2 * Math.min(sga * dst.a, dga * src.a)) / a;\n    const b = (sba + dba - 2 * Math.min(sba * dst.a, dba * src.a)) / a;\n    return { r, g, b, a };\n}\nexport function exclusion(src, dst, ops = 1) {\n    src.a *= ops;\n    const a = dst.a + src.a - dst.a * src.a;\n    const sra = src.r * src.a;\n    const sga = src.g * src.a;\n    const sba = src.b * src.a;\n    const dra = dst.r * dst.a;\n    const dga = dst.g * dst.a;\n    const dba = dst.b * dst.a;\n    const r = (sra * dst.a +\n        dra * src.a -\n        2 * sra * dra +\n        sra * (1 - dst.a) +\n        dra * (1 - src.a)) /\n        a;\n    const g = (sga * dst.a +\n        dga * src.a -\n        2 * sga * dga +\n        sga * (1 - dst.a) +\n        dga * (1 - src.a)) /\n        a;\n    const b = (sba * dst.a +\n        dba * src.a -\n        2 * sba * dba +\n        sba * (1 - dst.a) +\n        dba * (1 - src.a)) /\n        a;\n    return { r, g, b, a };\n}\nexport const names = [\n    srcOver,\n    dstOver,\n    multiply,\n    add,\n    screen,\n    overlay,\n    darken,\n    lighten,\n    hardLight,\n    difference,\n    exclusion,\n];\n//# sourceMappingURL=composite-modes.js.map","import { Edge } from \"@jimp/types\";\nimport { BlendMode } from \"./constants.js\";\nimport * as compositeModes from \"./composite-modes.js\";\nimport { limit255 } from \"@jimp/utils\";\nexport function composite(baseImage, src, x = 0, y = 0, options = {}) {\n    if (!(src instanceof baseImage.constructor)) {\n        throw new Error(\"The source must be a Jimp image\");\n    }\n    if (typeof x !== \"number\" || typeof y !== \"number\") {\n        throw new Error(\"x and y must be numbers\");\n    }\n    const { mode = BlendMode.SRC_OVER } = options;\n    let { opacitySource = 1.0, opacityDest = 1.0 } = options;\n    if (typeof opacitySource !== \"number\" ||\n        opacitySource < 0 ||\n        opacitySource > 1) {\n        opacitySource = 1.0;\n    }\n    if (typeof opacityDest !== \"number\" || opacityDest < 0 || opacityDest > 1) {\n        opacityDest = 1.0;\n    }\n    const blendmode = compositeModes[mode];\n    // round input\n    x = Math.round(x);\n    y = Math.round(y);\n    if (opacityDest !== 1.0) {\n        baseImage.scan((_, __, idx) => {\n            const v = baseImage.bitmap.data[idx + 3] * opacityDest;\n            baseImage.bitmap.data[idx + 3] = v;\n        });\n    }\n    src.scan((sx, sy, idx) => {\n        const dstIdx = baseImage.getPixelIndex(x + sx, y + sy, Edge.CROP);\n        if (dstIdx === -1) {\n            // Skip target pixels outside of dst\n            return;\n        }\n        const blended = blendmode({\n            r: src.bitmap.data[idx + 0] / 255,\n            g: src.bitmap.data[idx + 1] / 255,\n            b: src.bitmap.data[idx + 2] / 255,\n            a: src.bitmap.data[idx + 3] / 255,\n        }, {\n            r: baseImage.bitmap.data[dstIdx + 0] / 255,\n            g: baseImage.bitmap.data[dstIdx + 1] / 255,\n            b: baseImage.bitmap.data[dstIdx + 2] / 255,\n            a: baseImage.bitmap.data[dstIdx + 3] / 255,\n        }, opacitySource);\n        baseImage.bitmap.data[dstIdx + 0] = limit255(blended.r * 255);\n        baseImage.bitmap.data[dstIdx + 1] = limit255(blended.g * 255);\n        baseImage.bitmap.data[dstIdx + 2] = limit255(blended.b * 255);\n        baseImage.bitmap.data[dstIdx + 3] = limit255(blended.a * 255);\n    });\n    return baseImage;\n}\n//# sourceMappingURL=composite.js.map","/*jslint browser: true, devel: true, bitwise: false, debug: true, eqeq: false, es5: true, evil: false, forin: false, newcap: false, nomen: true, plusplus: true, regexp: false, unparam: false, sloppy: true, stupid: false, sub: false, todo: true, vars: true, white: true */\n\nmodule.exports = {\n\tparseSections: function(stream, iterator) {\n\t\tvar len, markerType;\n\t\tstream.setBigEndian(true);\n\t\t//stop reading the stream at the SOS (Start of Stream) marker,\n\t\t//because its length is not stored in the header so we can't\n\t\t//know where to jump to. The only marker after that is just EOI (End Of Image) anyway\n\t\twhile(stream.remainingLength() > 0 && markerType !== 0xDA) {\n\t\t\tif(stream.nextUInt8() !== 0xFF) {\n\t\t\t\tthrow new Error('Invalid JPEG section offset');\n\t\t\t}\n\t\t\tmarkerType = stream.nextUInt8();\n\t\t\t//don't read size from markers that have no datas\n\t\t\tif((markerType >= 0xD0 && markerType <= 0xD9) || markerType === 0xDA) {\n\t\t\t\tlen = 0;\n\t\t\t} else {\n\t\t\t\tlen = stream.nextUInt16() - 2;\n\t\t\t}\n\t\t\titerator(markerType, stream.branch(0, len));\n\t\t\tstream.skip(len);\n\t\t}\n\t},\n\t//stream should be located after SOF section size and in big endian mode, like passed to parseSections iterator\n\tgetSizeFromSOFSection: function(stream) {\n\t\tstream.skip(1);\n\t\treturn {\n\t\t\theight: stream.nextUInt16(),\n\t\t\twidth: stream.nextUInt16()\n\t\t};\n\t},\n\tgetSectionName: function(markerType) {\n\t\tvar name, index;\n\t\tswitch(markerType) {\n\t\t\tcase 0xD8: name = 'SOI'; break;\n\t\t\tcase 0xC4: name = 'DHT'; break;\n\t\t\tcase 0xDB: name = 'DQT'; break;\n\t\t\tcase 0xDD: name = 'DRI'; break;\n\t\t\tcase 0xDA: name = 'SOS'; break;\n\t\t\tcase 0xFE: name = 'COM'; break;\n\t\t\tcase 0xD9: name = 'EOI'; break;\n\t\t\tdefault:\n\t\t\t\tif(markerType >= 0xE0 && markerType <= 0xEF) {\n\t\t\t\t\tname = 'APP';\n\t\t\t\t\tindex = markerType - 0xE0;\n\t\t\t\t}\n\t\t\t\telse if(markerType >= 0xC0 && markerType <= 0xCF && markerType !== 0xC4 && markerType !== 0xC8 && markerType !== 0xCC) {\n\t\t\t\t\tname = 'SOF';\n\t\t\t\t\tindex = markerType - 0xC0;\n\t\t\t\t}\n\t\t\t\telse if(markerType >= 0xD0 && markerType <= 0xD7) {\n\t\t\t\t\tname = 'RST';\n\t\t\t\t\tindex = markerType - 0xD0;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\tvar nameStruct = {\n\t\t\tname: name\n\t\t};\n\t\tif(typeof index === 'number') {\n\t\t\tnameStruct.index = index;\n\t\t}\n\t\treturn nameStruct;\n\t}\n};","/*jslint browser: true, devel: true, bitwise: false, debug: true, eqeq: false, es5: true, evil: false, forin: false, newcap: false, nomen: true, plusplus: true, regexp: false, unparam: false, sloppy: true, stupid: false, sub: false, todo: true, vars: true, white: true */\n\nfunction readExifValue(format, stream) {\n\tswitch(format) {\n\t\tcase 1: return stream.nextUInt8();\n\t\tcase 3: return stream.nextUInt16();\n\t\tcase 4: return stream.nextUInt32();\n\t\tcase 5: return [stream.nextUInt32(), stream.nextUInt32()];\n\t\tcase 6: return stream.nextInt8();\n\t\tcase 8: return stream.nextUInt16();\n\t\tcase 9: return stream.nextUInt32();\n\t\tcase 10: return [stream.nextInt32(), stream.nextInt32()];\n\t\tcase 11: return stream.nextFloat();\n\t\tcase 12: return stream.nextDouble();\n\t\tdefault: throw new Error('Invalid format while decoding: ' + format);\n\t}\n}\n\nfunction getBytesPerComponent(format) {\n\tswitch(format) {\n\t\tcase 1:\n\t\tcase 2:\n\t\tcase 6:\n\t\tcase 7:\n\t\t\treturn 1;\n\t\tcase 3:\n\t\tcase 8:\n\t\t\treturn 2;\n\t\tcase 4:\n\t\tcase 9:\n\t\tcase 11:\n\t\t\treturn 4;\n\t\tcase 5:\n\t\tcase 10:\n\t\tcase 12:\n\t\t\treturn 8;\n\t\tdefault:\n\t\t\treturn 0;\n\t}\n}\n\nfunction readExifTag(tiffMarker, stream) {\n\tvar tagType = stream.nextUInt16(),\n\t\tformat = stream.nextUInt16(),\n\t\tbytesPerComponent = getBytesPerComponent(format),\n\t\tcomponents = stream.nextUInt32(),\n\t\tvalueBytes = bytesPerComponent * components,\n\t\tvalues,\n\t\tvalue,\n\t\tc;\n\n\t/* if the value is bigger then 4 bytes, the value is in the data section of the IFD\n\tand the value present in the tag is the offset starting from the tiff header. So we replace the stream\n\twith a stream that is located at the given offset in the data section. s*/\n\tif(valueBytes > 4) {\n\t\tstream = tiffMarker.openWithOffset(stream.nextUInt32());\n\t}\n\t//we don't want to read strings as arrays\n\tif(format === 2) {\n\t\tvalues = stream.nextString(components);\n\t\t//cut off \\0 characters\n\t\tvar lastNull = values.indexOf('\\0');\n\t\tif(lastNull !== -1) {\n\t\t\tvalues = values.substr(0, lastNull);\n\t\t}\n\t}\n\telse if(format === 7) {\n\t\tvalues = stream.nextBuffer(components);\n\t}\n\telse if(format !== 0) {\n\t\tvalues = [];\n\t\tfor(c = 0; c < components; ++c) {\n\t\t\tvalues.push(readExifValue(format, stream));\n\t\t}\n\t}\n\t//since our stream is a stateful object, we need to skip remaining bytes\n\t//so our offset stays correct\n\tif(valueBytes < 4) {\n\t\tstream.skip(4 - valueBytes);\n\t}\n\n\treturn [tagType, values, format];\n}\n\nfunction readIFDSection(tiffMarker, stream, iterator) {\n\tvar numberOfEntries = stream.nextUInt16(), tag, i;\n\tfor(i = 0; i < numberOfEntries; ++i) {\n\t\ttag = readExifTag(tiffMarker, stream);\n\t\titerator(tag[0], tag[1], tag[2]);\n\t}\n}\n\nfunction readHeader(stream) {\n\tvar exifHeader = stream.nextString(6);\n\tif(exifHeader !== 'Exif\\0\\0') {\n\t\tthrow new Error('Invalid EXIF header');\n\t}\n\n\tvar tiffMarker = stream.mark();\n\tvar tiffHeader = stream.nextUInt16();\n\tif(tiffHeader === 0x4949) {\n\t\tstream.setBigEndian(false);\n\t} else if(tiffHeader === 0x4D4D) {\n\t\tstream.setBigEndian(true);\n\t} else {\n\t\tthrow new Error('Invalid TIFF header');\n\t}\n\tif(stream.nextUInt16() !== 0x002A) {\n\t\tthrow new Error('Invalid TIFF data');\n\t}\n\treturn tiffMarker;\n}\n\nmodule.exports = {\n\tIFD0: 1,\n\tIFD1: 2,\n\tGPSIFD: 3,\n\tSubIFD: 4,\n\tInteropIFD: 5,\n\tparseTags: function(stream, iterator) {\n\t\tvar tiffMarker;\n\t\ttry {\n\t\t\ttiffMarker = readHeader(stream);\n\t\t} catch(e) {\n\t\t\treturn false;\t//ignore APP1 sections with invalid headers\n\t\t}\n\t\tvar subIfdOffset, gpsOffset, interopOffset;\n\t\tvar ifd0Stream = tiffMarker.openWithOffset(stream.nextUInt32()),\n\t\t\tIFD0 = this.IFD0;\n\t\treadIFDSection(tiffMarker, ifd0Stream, function(tagType, value, format) {\n\t\t\tswitch(tagType) {\n\t\t\t\tcase 0x8825: gpsOffset = value[0]; break;\n\t\t\t\tcase 0x8769: subIfdOffset = value[0]; break;\n\t\t\t\tdefault: iterator(IFD0, tagType, value, format); break;\n\t\t\t}\n\t\t});\n\t\tvar ifd1Offset = ifd0Stream.nextUInt32();\n\t\tif(ifd1Offset !== 0) {\n\t\t\tvar ifd1Stream = tiffMarker.openWithOffset(ifd1Offset);\n\t\t\treadIFDSection(tiffMarker, ifd1Stream, iterator.bind(null, this.IFD1));\n\t\t}\n\n\t\tif(gpsOffset) {\n\t\t\tvar gpsStream = tiffMarker.openWithOffset(gpsOffset);\n\t\t\treadIFDSection(tiffMarker, gpsStream, iterator.bind(null, this.GPSIFD));\n\t\t}\n\n\t\tif(subIfdOffset) {\n\t\t\tvar subIfdStream = tiffMarker.openWithOffset(subIfdOffset), InteropIFD = this.InteropIFD;\n\t\t\treadIFDSection(tiffMarker, subIfdStream, function(tagType, value, format) {\n\t\t\t\tif(tagType === 0xA005) {\n\t\t\t\t\tinteropOffset = value[0];\n\t\t\t\t} else {\n\t\t\t\t\titerator(InteropIFD, tagType, value, format);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif(interopOffset) {\n\t\t\tvar interopStream = tiffMarker.openWithOffset(interopOffset);\n\t\t\treadIFDSection(tiffMarker, interopStream, iterator.bind(null, this.InteropIFD));\n\t\t}\n\t\treturn true;\n\t}\n};","function parseNumber(s) {\n\treturn parseInt(s, 10);\n}\n\n//in seconds\nvar hours = 3600;\nvar minutes = 60;\n\n//take date (year, month, day) and time (hour, minutes, seconds) digits in UTC\n//and return a timestamp in seconds\nfunction parseDateTimeParts(dateParts, timeParts) {\n\tdateParts = dateParts.map(parseNumber);\n\ttimeParts = timeParts.map(parseNumber);\n\tvar year = dateParts[0];\n\tvar month = dateParts[1] - 1;\n\tvar day = dateParts[2];\n\tvar hours = timeParts[0];\n\tvar minutes = timeParts[1];\n\tvar seconds = timeParts[2];\n\tvar date = Date.UTC(year, month, day, hours, minutes, seconds, 0);\n\tvar timestamp = date / 1000;\n\treturn timestamp;\n}\n\n//parse date with \"2004-09-04T23:39:06-08:00\" format,\n//one of the formats supported by ISO 8601, and\n//convert to utc timestamp in seconds\nfunction parseDateWithTimezoneFormat(dateTimeStr) {\n\n\tvar dateParts = dateTimeStr.substr(0, 10).split('-');\n\tvar timeParts = dateTimeStr.substr(11, 8).split(':');\n\tvar timezoneStr = dateTimeStr.substr(19, 6);\n\tvar timezoneParts = timezoneStr.split(':').map(parseNumber);\n\tvar timezoneOffset = (timezoneParts[0] * hours) +\n\t\t(timezoneParts[1] * minutes);\n\n\tvar timestamp = parseDateTimeParts(dateParts, timeParts);\n\t//minus because the timezoneOffset describes\n\t//how much the described time is ahead of UTC\n\ttimestamp -= timezoneOffset;\n\n\tif(typeof timestamp === 'number' && !isNaN(timestamp)) {\n\t\treturn timestamp;\n\t}\n}\n\n//parse date with \"YYYY:MM:DD hh:mm:ss\" format, convert to utc timestamp in seconds\nfunction parseDateWithSpecFormat(dateTimeStr) {\n\tvar parts = dateTimeStr.split(' '),\n\t\tdateParts = parts[0].split(':'),\n\t\ttimeParts = parts[1].split(':');\n\n\tvar timestamp = parseDateTimeParts(dateParts, timeParts);\n\n\tif(typeof timestamp === 'number' && !isNaN(timestamp)) {\n\t\treturn timestamp;\n\t}\n}\n\nfunction parseExifDate(dateTimeStr) {\n\t//some easy checks to determine two common date formats\n\n\t//is the date in the standard \"YYYY:MM:DD hh:mm:ss\" format?\n\tvar isSpecFormat = dateTimeStr.length === 19 &&\n\t\tdateTimeStr.charAt(4) === ':';\n\t//is the date in the non-standard format,\n\t//\"2004-09-04T23:39:06-08:00\" to include a timezone?\n\tvar isTimezoneFormat = dateTimeStr.length === 25 &&\n\t\tdateTimeStr.charAt(10) === 'T';\n\tvar timestamp;\n\n\tif(isTimezoneFormat) {\n\t\treturn parseDateWithTimezoneFormat(dateTimeStr);\n\t}\n\telse if(isSpecFormat) {\n\t\treturn parseDateWithSpecFormat(dateTimeStr);\n\t}\n}\n\nmodule.exports = {\n\tparseDateWithSpecFormat: parseDateWithSpecFormat,\n\tparseDateWithTimezoneFormat: parseDateWithTimezoneFormat,\n\tparseExifDate: parseExifDate\n};\n","var exif = require('./exif');\nvar date = require('./date');\n\nvar degreeTags = [{\n\tsection: exif.GPSIFD,\n\ttype: 0x0002,\n\tname: 'GPSLatitude',\n\trefType: 0x0001,\n\trefName: 'GPSLatitudeRef',\n\tposVal: 'N'\n},\n{\n\tsection: exif.GPSIFD,\n\ttype: 0x0004,\n\tname: 'GPSLongitude',\n\trefType: 0x0003,\n\trefName: 'GPSLongitudeRef',\n\tposVal: 'E'\n}];\nvar dateTags = [{\n\tsection: exif.SubIFD,\n\ttype: 0x0132,\n\tname: 'ModifyDate'\n},\n{\n\tsection: exif.SubIFD,\n\ttype: 0x9003,\n\tname: 'DateTimeOriginal'\n},\n{\n\tsection: exif.SubIFD,\n\ttype: 0x9004,\n\tname: 'CreateDate'\n},\n{\n\tsection: exif.SubIFD,\n\ttype: 0x0132,\n\tname : 'ModifyDate',\n}];\n\nmodule.exports = {\n\tcastDegreeValues: function(getTagValue, setTagValue) {\n\t\tdegreeTags.forEach(function(t) {\n\t\t\tvar degreeVal = getTagValue(t);\n\t\t\tif(degreeVal) {\n\t\t\t\tvar degreeRef = getTagValue({section: t.section, type: t.refType, name: t.refName});\n\t\t\t\tvar degreeNumRef = degreeRef === t.posVal ? 1 : -1;\n\t\t\t\tvar degree = (degreeVal[0] + (degreeVal[1] / 60) + (degreeVal[2] / 3600)) * degreeNumRef;\n\t\t\t\tsetTagValue(t, degree);\n\t\t\t}\n\t\t});\n\t},\n\tcastDateValues: function(getTagValue, setTagValue) {\n\t\tdateTags.forEach(function(t) {\n\t\t\tvar dateStrVal = getTagValue(t);\n\t\t\tif(dateStrVal) {\n\t\t\t\t//some easy checks to determine two common date formats\n\t\t\t\tvar timestamp = date.parseExifDate(dateStrVal);\n\t\t\t\tif(typeof timestamp !== 'undefined') {\n\t\t\t\t\tsetTagValue(t, timestamp);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\tsimplifyValue: function(values, format) {\n\t\tif(Array.isArray(values)) {\n\t\t\tvalues = values.map(function(value) {\n\t\t\t\tif(format === 10 || format === 5) {\n\t\t\t\t\treturn value[0] / value[1];\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t});\n\t\t\tif(values.length === 1) {\n\t\t\t\tvalues = values[0];\n\t\t\t}\n\t\t}\n\t\treturn values;\n\t}\n};\n","module.exports = {\n\texif : {\n\t\t0x0001 : \"InteropIndex\",\n\t\t0x0002 : \"InteropVersion\",\n\t\t0x000B : \"ProcessingSoftware\",\n\t\t0x00FE : \"SubfileType\",\n\t\t0x00FF : \"OldSubfileType\",\n\t\t0x0100 : \"ImageWidth\",\n\t\t0x0101 : \"ImageHeight\",\n\t\t0x0102 : \"BitsPerSample\",\n\t\t0x0103 : \"Compression\",\n\t\t0x0106 : \"PhotometricInterpretation\",\n\t\t0x0107 : \"Thresholding\",\n\t\t0x0108 : \"CellWidth\",\n\t\t0x0109 : \"CellLength\",\n\t\t0x010A : \"FillOrder\",\n\t\t0x010D : \"DocumentName\",\n\t\t0x010E : \"ImageDescription\",\n\t\t0x010F : \"Make\",\n\t\t0x0110 : \"Model\",\n\t\t0x0111 : \"StripOffsets\",\n\t\t0x0112 : \"Orientation\",\n\t\t0x0115 : \"SamplesPerPixel\",\n\t\t0x0116 : \"RowsPerStrip\",\n\t\t0x0117 : \"StripByteCounts\",\n\t\t0x0118 : \"MinSampleValue\",\n\t\t0x0119 : \"MaxSampleValue\",\n\t\t0x011A : \"XResolution\",\n\t\t0x011B : \"YResolution\",\n\t\t0x011C : \"PlanarConfiguration\",\n\t\t0x011D : \"PageName\",\n\t\t0x011E : \"XPosition\",\n\t\t0x011F : \"YPosition\",\n\t\t0x0120 : \"FreeOffsets\",\n\t\t0x0121 : \"FreeByteCounts\",\n\t\t0x0122 : \"GrayResponseUnit\",\n\t\t0x0123 : \"GrayResponseCurve\",\n\t\t0x0124 : \"T4Options\",\n\t\t0x0125 : \"T6Options\",\n\t\t0x0128 : \"ResolutionUnit\",\n\t\t0x0129 : \"PageNumber\",\n\t\t0x012C : \"ColorResponseUnit\",\n\t\t0x012D : \"TransferFunction\",\n\t\t0x0131 : \"Software\",\n\t\t0x0132 : \"ModifyDate\",\n\t\t0x013B : \"Artist\",\n\t\t0x013C : \"HostComputer\",\n\t\t0x013D : \"Predictor\",\n\t\t0x013E : \"WhitePoint\",\n\t\t0x013F : \"PrimaryChromaticities\",\n\t\t0x0140 : \"ColorMap\",\n\t\t0x0141 : \"HalftoneHints\",\n\t\t0x0142 : \"TileWidth\",\n\t\t0x0143 : \"TileLength\",\n\t\t0x0144 : \"TileOffsets\",\n\t\t0x0145 : \"TileByteCounts\",\n\t\t0x0146 : \"BadFaxLines\",\n\t\t0x0147 : \"CleanFaxData\",\n\t\t0x0148 : \"ConsecutiveBadFaxLines\",\n\t\t0x014A : \"SubIFD\",\n\t\t0x014C : \"InkSet\",\n\t\t0x014D : \"InkNames\",\n\t\t0x014E : \"NumberofInks\",\n\t\t0x0150 : \"DotRange\",\n\t\t0x0151 : \"TargetPrinter\",\n\t\t0x0152 : \"ExtraSamples\",\n\t\t0x0153 : \"SampleFormat\",\n\t\t0x0154 : \"SMinSampleValue\",\n\t\t0x0155 : \"SMaxSampleValue\",\n\t\t0x0156 : \"TransferRange\",\n\t\t0x0157 : \"ClipPath\",\n\t\t0x0158 : \"XClipPathUnits\",\n\t\t0x0159 : \"YClipPathUnits\",\n\t\t0x015A : \"Indexed\",\n\t\t0x015B : \"JPEGTables\",\n\t\t0x015F : \"OPIProxy\",\n\t\t0x0190 : \"GlobalParametersIFD\",\n\t\t0x0191 : \"ProfileType\",\n\t\t0x0192 : \"FaxProfile\",\n\t\t0x0193 : \"CodingMethods\",\n\t\t0x0194 : \"VersionYear\",\n\t\t0x0195 : \"ModeNumber\",\n\t\t0x01B1 : \"Decode\",\n\t\t0x01B2 : \"DefaultImageColor\",\n\t\t0x01B3 : \"T82Options\",\n\t\t0x01B5 : \"JPEGTables\",\n\t\t0x0200 : \"JPEGProc\",\n\t\t0x0201 : \"ThumbnailOffset\",\n\t\t0x0202 : \"ThumbnailLength\",\n\t\t0x0203 : \"JPEGRestartInterval\",\n\t\t0x0205 : \"JPEGLosslessPredictors\",\n\t\t0x0206 : \"JPEGPointTransforms\",\n\t\t0x0207 : \"JPEGQTables\",\n\t\t0x0208 : \"JPEGDCTables\",\n\t\t0x0209 : \"JPEGACTables\",\n\t\t0x0211 : \"YCbCrCoefficients\",\n\t\t0x0212 : \"YCbCrSubSampling\",\n\t\t0x0213 : \"YCbCrPositioning\",\n\t\t0x0214 : \"ReferenceBlackWhite\",\n\t\t0x022F : \"StripRowCounts\",\n\t\t0x02BC : \"ApplicationNotes\",\n\t\t0x03E7 : \"USPTOMiscellaneous\",\n\t\t0x1000 : \"RelatedImageFileFormat\",\n\t\t0x1001 : \"RelatedImageWidth\",\n\t\t0x1002 : \"RelatedImageHeight\",\n\t\t0x4746 : \"Rating\",\n\t\t0x4747 : \"XP_DIP_XML\",\n\t\t0x4748 : \"StitchInfo\",\n\t\t0x4749 : \"RatingPercent\",\n\t\t0x800D : \"ImageID\",\n\t\t0x80A3 : \"WangTag1\",\n\t\t0x80A4 : \"WangAnnotation\",\n\t\t0x80A5 : \"WangTag3\",\n\t\t0x80A6 : \"WangTag4\",\n\t\t0x80E3 : \"Matteing\",\n\t\t0x80E4 : \"DataType\",\n\t\t0x80E5 : \"ImageDepth\",\n\t\t0x80E6 : \"TileDepth\",\n\t\t0x827D : \"Model2\",\n\t\t0x828D : \"CFARepeatPatternDim\",\n\t\t0x828E : \"CFAPattern2\",\n\t\t0x828F : \"BatteryLevel\",\n\t\t0x8290 : \"KodakIFD\",\n\t\t0x8298 : \"Copyright\",\n\t\t0x829A : \"ExposureTime\",\n\t\t0x829D : \"FNumber\",\n\t\t0x82A5 : \"MDFileTag\",\n\t\t0x82A6 : \"MDScalePixel\",\n\t\t0x82A7 : \"MDColorTable\",\n\t\t0x82A8 : \"MDLabName\",\n\t\t0x82A9 : \"MDSampleInfo\",\n\t\t0x82AA : \"MDPrepDate\",\n\t\t0x82AB : \"MDPrepTime\",\n\t\t0x82AC : \"MDFileUnits\",\n\t\t0x830E : \"PixelScale\",\n\t\t0x8335 : \"AdventScale\",\n\t\t0x8336 : \"AdventRevision\",\n\t\t0x835C : \"UIC1Tag\",\n\t\t0x835D : \"UIC2Tag\",\n\t\t0x835E : \"UIC3Tag\",\n\t\t0x835F : \"UIC4Tag\",\n\t\t0x83BB : \"IPTC-NAA\",\n\t\t0x847E : \"IntergraphPacketData\",\n\t\t0x847F : \"IntergraphFlagRegisters\",\n\t\t0x8480 : \"IntergraphMatrix\",\n\t\t0x8481 : \"INGRReserved\",\n\t\t0x8482 : \"ModelTiePoint\",\n\t\t0x84E0 : \"Site\",\n\t\t0x84E1 : \"ColorSequence\",\n\t\t0x84E2 : \"IT8Header\",\n\t\t0x84E3 : \"RasterPadding\",\n\t\t0x84E4 : \"BitsPerRunLength\",\n\t\t0x84E5 : \"BitsPerExtendedRunLength\",\n\t\t0x84E6 : \"ColorTable\",\n\t\t0x84E7 : \"ImageColorIndicator\",\n\t\t0x84E8 : \"BackgroundColorIndicator\",\n\t\t0x84E9 : \"ImageColorValue\",\n\t\t0x84EA : \"BackgroundColorValue\",\n\t\t0x84EB : \"PixelIntensityRange\",\n\t\t0x84EC : \"TransparencyIndicator\",\n\t\t0x84ED : \"ColorCharacterization\",\n\t\t0x84EE : \"HCUsage\",\n\t\t0x84EF : \"TrapIndicator\",\n\t\t0x84F0 : \"CMYKEquivalent\",\n\t\t0x8546 : \"SEMInfo\",\n\t\t0x8568 : \"AFCP_IPTC\",\n\t\t0x85B8 : \"PixelMagicJBIGOptions\",\n\t\t0x85D8 : \"ModelTransform\",\n\t\t0x8602 : \"WB_GRGBLevels\",\n\t\t0x8606 : \"LeafData\",\n\t\t0x8649 : \"PhotoshopSettings\",\n\t\t0x8769 : \"ExifOffset\",\n\t\t0x8773 : \"ICC_Profile\",\n\t\t0x877F : \"TIFF_FXExtensions\",\n\t\t0x8780 : \"MultiProfiles\",\n\t\t0x8781 : \"SharedData\",\n\t\t0x8782 : \"T88Options\",\n\t\t0x87AC : \"ImageLayer\",\n\t\t0x87AF : \"GeoTiffDirectory\",\n\t\t0x87B0 : \"GeoTiffDoubleParams\",\n\t\t0x87B1 : \"GeoTiffAsciiParams\",\n\t\t0x8822 : \"ExposureProgram\",\n\t\t0x8824 : \"SpectralSensitivity\",\n\t\t0x8825 : \"GPSInfo\",\n\t\t0x8827 : \"ISO\",\n\t\t0x8828 : \"Opto-ElectricConvFactor\",\n\t\t0x8829 : \"Interlace\",\n\t\t0x882A : \"TimeZoneOffset\",\n\t\t0x882B : \"SelfTimerMode\",\n\t\t0x8830 : \"SensitivityType\",\n\t\t0x8831 : \"StandardOutputSensitivity\",\n\t\t0x8832 : \"RecommendedExposureIndex\",\n\t\t0x8833 : \"ISOSpeed\",\n\t\t0x8834 : \"ISOSpeedLatitudeyyy\",\n\t\t0x8835 : \"ISOSpeedLatitudezzz\",\n\t\t0x885C : \"FaxRecvParams\",\n\t\t0x885D : \"FaxSubAddress\",\n\t\t0x885E : \"FaxRecvTime\",\n\t\t0x888A : \"LeafSubIFD\",\n\t\t0x9000 : \"ExifVersion\",\n\t\t0x9003 : \"DateTimeOriginal\",\n\t\t0x9004 : \"CreateDate\",\n\t\t0x9101 : \"ComponentsConfiguration\",\n\t\t0x9102 : \"CompressedBitsPerPixel\",\n\t\t0x9201 : \"ShutterSpeedValue\",\n\t\t0x9202 : \"ApertureValue\",\n\t\t0x9203 : \"BrightnessValue\",\n\t\t0x9204 : \"ExposureCompensation\",\n\t\t0x9205 : \"MaxApertureValue\",\n\t\t0x9206 : \"SubjectDistance\",\n\t\t0x9207 : \"MeteringMode\",\n\t\t0x9208 : \"LightSource\",\n\t\t0x9209 : \"Flash\",\n\t\t0x920A : \"FocalLength\",\n\t\t0x920B : \"FlashEnergy\",\n\t\t0x920C : \"SpatialFrequencyResponse\",\n\t\t0x920D : \"Noise\",\n\t\t0x920E : \"FocalPlaneXResolution\",\n\t\t0x920F : \"FocalPlaneYResolution\",\n\t\t0x9210 : \"FocalPlaneResolutionUnit\",\n\t\t0x9211 : \"ImageNumber\",\n\t\t0x9212 : \"SecurityClassification\",\n\t\t0x9213 : \"ImageHistory\",\n\t\t0x9214 : \"SubjectArea\",\n\t\t0x9215 : \"ExposureIndex\",\n\t\t0x9216 : \"TIFF-EPStandardID\",\n\t\t0x9217 : \"SensingMethod\",\n\t\t0x923A : \"CIP3DataFile\",\n\t\t0x923B : \"CIP3Sheet\",\n\t\t0x923C : \"CIP3Side\",\n\t\t0x923F : \"StoNits\",\n\t\t0x927C : \"MakerNote\",\n\t\t0x9286 : \"UserComment\",\n\t\t0x9290 : \"SubSecTime\",\n\t\t0x9291 : \"SubSecTimeOriginal\",\n\t\t0x9292 : \"SubSecTimeDigitized\",\n\t\t0x932F : \"MSDocumentText\",\n\t\t0x9330 : \"MSPropertySetStorage\",\n\t\t0x9331 : \"MSDocumentTextPosition\",\n\t\t0x935C : \"ImageSourceData\",\n\t\t0x9C9B : \"XPTitle\",\n\t\t0x9C9C : \"XPComment\",\n\t\t0x9C9D : \"XPAuthor\",\n\t\t0x9C9E : \"XPKeywords\",\n\t\t0x9C9F : \"XPSubject\",\n\t\t0xA000 : \"FlashpixVersion\",\n\t\t0xA001 : \"ColorSpace\",\n\t\t0xA002 : \"ExifImageWidth\",\n\t\t0xA003 : \"ExifImageHeight\",\n\t\t0xA004 : \"RelatedSoundFile\",\n\t\t0xA005 : \"InteropOffset\",\n\t\t0xA20B : \"FlashEnergy\",\n\t\t0xA20C : \"SpatialFrequencyResponse\",\n\t\t0xA20D : \"Noise\",\n\t\t0xA20E : \"FocalPlaneXResolution\",\n\t\t0xA20F : \"FocalPlaneYResolution\",\n\t\t0xA210 : \"FocalPlaneResolutionUnit\",\n\t\t0xA211 : \"ImageNumber\",\n\t\t0xA212 : \"SecurityClassification\",\n\t\t0xA213 : \"ImageHistory\",\n\t\t0xA214 : \"SubjectLocation\",\n\t\t0xA215 : \"ExposureIndex\",\n\t\t0xA216 : \"TIFF-EPStandardID\",\n\t\t0xA217 : \"SensingMethod\",\n\t\t0xA300 : \"FileSource\",\n\t\t0xA301 : \"SceneType\",\n\t\t0xA302 : \"CFAPattern\",\n\t\t0xA401 : \"CustomRendered\",\n\t\t0xA402 : \"ExposureMode\",\n\t\t0xA403 : \"WhiteBalance\",\n\t\t0xA404 : \"DigitalZoomRatio\",\n\t\t0xA405 : \"FocalLengthIn35mmFormat\",\n\t\t0xA406 : \"SceneCaptureType\",\n\t\t0xA407 : \"GainControl\",\n\t\t0xA408 : \"Contrast\",\n\t\t0xA409 : \"Saturation\",\n\t\t0xA40A : \"Sharpness\",\n\t\t0xA40B : \"DeviceSettingDescription\",\n\t\t0xA40C : \"SubjectDistanceRange\",\n\t\t0xA420 : \"ImageUniqueID\",\n\t\t0xA430 : \"OwnerName\",\n\t\t0xA431 : \"SerialNumber\",\n\t\t0xA432 : \"LensInfo\",\n\t\t0xA433 : \"LensMake\",\n\t\t0xA434 : \"LensModel\",\n\t\t0xA435 : \"LensSerialNumber\",\n\t\t0xA480 : \"GDALMetadata\",\n\t\t0xA481 : \"GDALNoData\",\n\t\t0xA500 : \"Gamma\",\n\t\t0xAFC0 : \"ExpandSoftware\",\n\t\t0xAFC1 : \"ExpandLens\",\n\t\t0xAFC2 : \"ExpandFilm\",\n\t\t0xAFC3 : \"ExpandFilterLens\",\n\t\t0xAFC4 : \"ExpandScanner\",\n\t\t0xAFC5 : \"ExpandFlashLamp\",\n\t\t0xBC01 : \"PixelFormat\",\n\t\t0xBC02 : \"Transformation\",\n\t\t0xBC03 : \"Uncompressed\",\n\t\t0xBC04 : \"ImageType\",\n\t\t0xBC80 : \"ImageWidth\",\n\t\t0xBC81 : \"ImageHeight\",\n\t\t0xBC82 : \"WidthResolution\",\n\t\t0xBC83 : \"HeightResolution\",\n\t\t0xBCC0 : \"ImageOffset\",\n\t\t0xBCC1 : \"ImageByteCount\",\n\t\t0xBCC2 : \"AlphaOffset\",\n\t\t0xBCC3 : \"AlphaByteCount\",\n\t\t0xBCC4 : \"ImageDataDiscard\",\n\t\t0xBCC5 : \"AlphaDataDiscard\",\n\t\t0xC427 : \"OceScanjobDesc\",\n\t\t0xC428 : \"OceApplicationSelector\",\n\t\t0xC429 : \"OceIDNumber\",\n\t\t0xC42A : \"OceImageLogic\",\n\t\t0xC44F : \"Annotations\",\n\t\t0xC4A5 : \"PrintIM\",\n\t\t0xC580 : \"USPTOOriginalContentType\",\n\t\t0xC612 : \"DNGVersion\",\n\t\t0xC613 : \"DNGBackwardVersion\",\n\t\t0xC614 : \"UniqueCameraModel\",\n\t\t0xC615 : \"LocalizedCameraModel\",\n\t\t0xC616 : \"CFAPlaneColor\",\n\t\t0xC617 : \"CFALayout\",\n\t\t0xC618 : \"LinearizationTable\",\n\t\t0xC619 : \"BlackLevelRepeatDim\",\n\t\t0xC61A : \"BlackLevel\",\n\t\t0xC61B : \"BlackLevelDeltaH\",\n\t\t0xC61C : \"BlackLevelDeltaV\",\n\t\t0xC61D : \"WhiteLevel\",\n\t\t0xC61E : \"DefaultScale\",\n\t\t0xC61F : \"DefaultCropOrigin\",\n\t\t0xC620 : \"DefaultCropSize\",\n\t\t0xC621 : \"ColorMatrix1\",\n\t\t0xC622 : \"ColorMatrix2\",\n\t\t0xC623 : \"CameraCalibration1\",\n\t\t0xC624 : \"CameraCalibration2\",\n\t\t0xC625 : \"ReductionMatrix1\",\n\t\t0xC626 : \"ReductionMatrix2\",\n\t\t0xC627 : \"AnalogBalance\",\n\t\t0xC628 : \"AsShotNeutral\",\n\t\t0xC629 : \"AsShotWhiteXY\",\n\t\t0xC62A : \"BaselineExposure\",\n\t\t0xC62B : \"BaselineNoise\",\n\t\t0xC62C : \"BaselineSharpness\",\n\t\t0xC62D : \"BayerGreenSplit\",\n\t\t0xC62E : \"LinearResponseLimit\",\n\t\t0xC62F : \"CameraSerialNumber\",\n\t\t0xC630 : \"DNGLensInfo\",\n\t\t0xC631 : \"ChromaBlurRadius\",\n\t\t0xC632 : \"AntiAliasStrength\",\n\t\t0xC633 : \"ShadowScale\",\n\t\t0xC634 : \"DNGPrivateData\",\n\t\t0xC635 : \"MakerNoteSafety\",\n\t\t0xC640 : \"RawImageSegmentation\",\n\t\t0xC65A : \"CalibrationIlluminant1\",\n\t\t0xC65B : \"CalibrationIlluminant2\",\n\t\t0xC65C : \"BestQualityScale\",\n\t\t0xC65D : \"RawDataUniqueID\",\n\t\t0xC660 : \"AliasLayerMetadata\",\n\t\t0xC68B : \"OriginalRawFileName\",\n\t\t0xC68C : \"OriginalRawFileData\",\n\t\t0xC68D : \"ActiveArea\",\n\t\t0xC68E : \"MaskedAreas\",\n\t\t0xC68F : \"AsShotICCProfile\",\n\t\t0xC690 : \"AsShotPreProfileMatrix\",\n\t\t0xC691 : \"CurrentICCProfile\",\n\t\t0xC692 : \"CurrentPreProfileMatrix\",\n\t\t0xC6BF : \"ColorimetricReference\",\n\t\t0xC6D2 : \"PanasonicTitle\",\n\t\t0xC6D3 : \"PanasonicTitle2\",\n\t\t0xC6F3 : \"CameraCalibrationSig\",\n\t\t0xC6F4 : \"ProfileCalibrationSig\",\n\t\t0xC6F5 : \"ProfileIFD\",\n\t\t0xC6F6 : \"AsShotProfileName\",\n\t\t0xC6F7 : \"NoiseReductionApplied\",\n\t\t0xC6F8 : \"ProfileName\",\n\t\t0xC6F9 : \"ProfileHueSatMapDims\",\n\t\t0xC6FA : \"ProfileHueSatMapData1\",\n\t\t0xC6FB : \"ProfileHueSatMapData2\",\n\t\t0xC6FC : \"ProfileToneCurve\",\n\t\t0xC6FD : \"ProfileEmbedPolicy\",\n\t\t0xC6FE : \"ProfileCopyright\",\n\t\t0xC714 : \"ForwardMatrix1\",\n\t\t0xC715 : \"ForwardMatrix2\",\n\t\t0xC716 : \"PreviewApplicationName\",\n\t\t0xC717 : \"PreviewApplicationVersion\",\n\t\t0xC718 : \"PreviewSettingsName\",\n\t\t0xC719 : \"PreviewSettingsDigest\",\n\t\t0xC71A : \"PreviewColorSpace\",\n\t\t0xC71B : \"PreviewDateTime\",\n\t\t0xC71C : \"RawImageDigest\",\n\t\t0xC71D : \"OriginalRawFileDigest\",\n\t\t0xC71E : \"SubTileBlockSize\",\n\t\t0xC71F : \"RowInterleaveFactor\",\n\t\t0xC725 : \"ProfileLookTableDims\",\n\t\t0xC726 : \"ProfileLookTableData\",\n\t\t0xC740 : \"OpcodeList1\",\n\t\t0xC741 : \"OpcodeList2\",\n\t\t0xC74E : \"OpcodeList3\",\n\t\t0xC761 : \"NoiseProfile\",\n\t\t0xC763 : \"TimeCodes\",\n\t\t0xC764 : \"FrameRate\",\n\t\t0xC772 : \"TStop\",\n\t\t0xC789 : \"ReelName\",\n\t\t0xC791 : \"OriginalDefaultFinalSize\",\n\t\t0xC792 : \"OriginalBestQualitySize\",\n\t\t0xC793 : \"OriginalDefaultCropSize\",\n\t\t0xC7A1 : \"CameraLabel\",\n\t\t0xC7A3 : \"ProfileHueSatMapEncoding\",\n\t\t0xC7A4 : \"ProfileLookTableEncoding\",\n\t\t0xC7A5 : \"BaselineExposureOffset\",\n\t\t0xC7A6 : \"DefaultBlackRender\",\n\t\t0xC7A7 : \"NewRawImageDigest\",\n\t\t0xC7A8 : \"RawToPreviewGain\",\n\t\t0xC7B5 : \"DefaultUserCrop\",\n\t\t0xEA1C : \"Padding\",\n\t\t0xEA1D : \"OffsetSchema\",\n\t\t0xFDE8 : \"OwnerName\",\n\t\t0xFDE9 : \"SerialNumber\",\n\t\t0xFDEA : \"Lens\",\n\t\t0xFE00 : \"KDC_IFD\",\n\t\t0xFE4C : \"RawFile\",\n\t\t0xFE4D : \"Converter\",\n\t\t0xFE4E : \"WhiteBalance\",\n\t\t0xFE51 : \"Exposure\",\n\t\t0xFE52 : \"Shadows\",\n\t\t0xFE53 : \"Brightness\",\n\t\t0xFE54 : \"Contrast\",\n\t\t0xFE55 : \"Saturation\",\n\t\t0xFE56 : \"Sharpness\",\n\t\t0xFE57 : \"Smoothness\",\n\t\t0xFE58 : \"MoireFilter\"\n\t\t\n\t},\n\tgps : {\t\n\t\t0x0000 : 'GPSVersionID',\n\t\t0x0001 : 'GPSLatitudeRef',\n\t\t0x0002 : 'GPSLatitude',\n\t\t0x0003 : 'GPSLongitudeRef',\n\t\t0x0004 : 'GPSLongitude',\n\t\t0x0005 : 'GPSAltitudeRef',\n\t\t0x0006 : 'GPSAltitude',\n\t\t0x0007 : 'GPSTimeStamp',\n\t\t0x0008 : 'GPSSatellites',\n\t\t0x0009 : 'GPSStatus',\n\t\t0x000A : 'GPSMeasureMode',\n\t\t0x000B : 'GPSDOP',\n\t\t0x000C : 'GPSSpeedRef',\n\t\t0x000D : 'GPSSpeed',\n\t\t0x000E : 'GPSTrackRef',\n\t\t0x000F : 'GPSTrack',\n\t\t0x0010 : 'GPSImgDirectionRef',\n\t\t0x0011 : 'GPSImgDirection',\n\t\t0x0012 : 'GPSMapDatum',\n\t\t0x0013 : 'GPSDestLatitudeRef',\n\t\t0x0014 : 'GPSDestLatitude',\n\t\t0x0015 : 'GPSDestLongitudeRef',\n\t\t0x0016 : 'GPSDestLongitude',\n\t\t0x0017 : 'GPSDestBearingRef',\n\t\t0x0018 : 'GPSDestBearing',\n\t\t0x0019 : 'GPSDestDistanceRef',\n\t\t0x001A : 'GPSDestDistance',\n\t\t0x001B : 'GPSProcessingMethod',\n\t\t0x001C : 'GPSAreaInformation',\n\t\t0x001D : 'GPSDateStamp',\n\t\t0x001E : 'GPSDifferential',\n\t\t0x001F : 'GPSHPositioningError'\n\t}\n};","/*jslint browser: true, devel: true, bitwise: false, debug: true, eqeq: false, es5: true, evil: false, forin: false, newcap: false, nomen: true, plusplus: true, regexp: false, unparam: false, sloppy: true, stupid: false, sub: false, todo: true, vars: true, white: true */\n\nvar jpeg = require('./jpeg'),\n\texif = require('./exif'),\n\tsimplify = require('./simplify');\n\nfunction ExifResult(startMarker, tags, imageSize, thumbnailOffset, thumbnailLength, thumbnailType, app1Offset) {\n\tthis.startMarker = startMarker;\n\tthis.tags = tags;\n\tthis.imageSize = imageSize;\n\tthis.thumbnailOffset = thumbnailOffset;\n\tthis.thumbnailLength = thumbnailLength;\n\tthis.thumbnailType = thumbnailType;\n\tthis.app1Offset = app1Offset;\n}\n\nExifResult.prototype = {\n\thasThumbnail: function(mime) {\n\t\tif(!this.thumbnailOffset || !this.thumbnailLength) {\n\t\t\treturn false;\n\t\t}\n\t\tif(typeof mime !== 'string') {\n\t\t\treturn true;\n\t\t}\n\t\tif(mime.toLowerCase().trim() === 'image/jpeg') {\n\t\t\treturn this.thumbnailType === 6;\n\t\t}\n\t\tif(mime.toLowerCase().trim() === 'image/tiff') {\n\t\t\treturn this.thumbnailType === 1;\n\t\t}\n\t\treturn false;\n\t},\n\tgetThumbnailOffset: function() {\n\t\treturn this.app1Offset + 6 + this.thumbnailOffset;\n\t},\n\tgetThumbnailLength: function() {\n\t\treturn this.thumbnailLength;\n\t},\n\tgetThumbnailBuffer: function() {\n\t\treturn this._getThumbnailStream().nextBuffer(this.thumbnailLength);\n\t},\n\t_getThumbnailStream: function() {\n\t\treturn this.startMarker.openWithOffset(this.getThumbnailOffset());\n\t},\n\tgetImageSize: function() {\n\t\treturn this.imageSize;\n\t},\n\tgetThumbnailSize: function() {\n\t\tvar stream = this._getThumbnailStream(), size;\n\t\tjpeg.parseSections(stream, function(sectionType, sectionStream) {\n\t\t\tif(jpeg.getSectionName(sectionType).name === 'SOF') {\n\t\t\t\tsize = jpeg.getSizeFromSOFSection(sectionStream);\n\t\t\t}\n\t\t});\n\t\treturn size;\n\t}\n};\n\nfunction Parser(stream) {\n\tthis.stream = stream;\n\tthis.flags = {\n\t\treadBinaryTags: false,\n\t\tresolveTagNames: true,\n\t\tsimplifyValues: true,\n\t\timageSize: true,\n\t\thidePointers: true,\n\t\treturnTags: true\n\t};\n}\n\nParser.prototype = {\n\tenableBinaryFields: function(enable) {\n\t\tthis.flags.readBinaryTags = !!enable;\n\t\treturn this;\n\t},\n\tenablePointers: function(enable) {\n\t\tthis.flags.hidePointers = !enable;\n\t\treturn this;\n\t},\n\tenableTagNames: function(enable) {\n\t\tthis.flags.resolveTagNames = !!enable;\n\t\treturn this;\n\t},\n\tenableImageSize: function(enable) {\n\t\tthis.flags.imageSize = !!enable;\n\t\treturn this;\n\t},\n\tenableReturnTags: function(enable) {\n\t\tthis.flags.returnTags = !!enable;\n\t\treturn this;\n\t},\n\tenableSimpleValues: function(enable) {\n\t\tthis.flags.simplifyValues = !!enable;\n\t\treturn this;\n\t},\n\tparse: function() {\n\t\tvar start = this.stream.mark(),\n\t\t\tstream = start.openWithOffset(0),\n\t\t\tflags = this.flags,\n\t\t\ttags,\n\t\t\timageSize,\n\t\t\tthumbnailOffset,\n\t\t\tthumbnailLength,\n\t\t\tthumbnailType,\n\t\t\tapp1Offset,\n\t\t\ttagNames,\n\t\t\tgetTagValue, setTagValue;\n\t\tif(flags.resolveTagNames) {\n\t\t\ttagNames = require('./exif-tags');\n\t\t}\n\t\tif(flags.resolveTagNames) {\n\t\t\ttags = {};\n\t\t\tgetTagValue = function(t) {\n\t\t\t\treturn tags[t.name];\n\t\t\t};\n\t\t\tsetTagValue = function(t, value) {\n\t\t\t\ttags[t.name] = value;\n\t\t\t};\n\t\t} else {\n\t\t\ttags = [];\n\t\t\tgetTagValue = function(t) {\n\t\t\t\tvar i;\n\t\t\t\tfor(i = 0; i < tags.length; ++i) {\n\t\t\t\t\tif(tags[i].type === t.type && tags[i].section === t.section) {\n\t\t\t\t\t\treturn tags.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tsetTagValue = function(t, value) {\n\t\t\t\tvar i;\n\t\t\t\tfor(i = 0; i < tags.length; ++i) {\n\t\t\t\t\tif(tags[i].type === t.type && tags[i].section === t.section) {\n\t\t\t\t\t\ttags.value = value;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tjpeg.parseSections(stream, function(sectionType, sectionStream) {\n\t\t\tvar validExifHeaders, sectionOffset = sectionStream.offsetFrom(start);\n\t\t\tif(sectionType === 0xE1) {\n\t\t\t\tvalidExifHeaders = exif.parseTags(sectionStream, function(ifdSection, tagType, value, format) {\n\t\t\t\t\t//ignore binary fields if disabled\n\t\t\t\t\tif(!flags.readBinaryTags && format === 7) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(tagType === 0x0201) {\n\t\t\t\t\t\tthumbnailOffset = value[0];\n\t\t\t\t\t\tif(flags.hidePointers) {return;}\n\t\t\t\t\t} else if(tagType === 0x0202) {\n\t\t\t\t\t\tthumbnailLength = value[0];\n\t\t\t\t\t\tif(flags.hidePointers) {return;}\n\t\t\t\t\t} else if(tagType === 0x0103) {\n\t\t\t\t\t\tthumbnailType = value[0];\n\t\t\t\t\t\tif(flags.hidePointers) {return;}\n\t\t\t\t\t}\n\t\t\t\t\t//if flag is set to not store tags, return here after storing pointers\n\t\t\t\t\tif(!flags.returnTags) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(flags.simplifyValues) {\n\t\t\t\t\t\tvalue = simplify.simplifyValue(value, format);\n\t\t\t\t\t}\n\t\t\t\t\tif(flags.resolveTagNames) {\n\t\t\t\t\t\tvar sectionTagNames = ifdSection === exif.GPSIFD ? tagNames.gps : tagNames.exif;\n\t\t\t\t\t\tvar name = sectionTagNames[tagType];\n\t\t\t\t\t\tif(!name) {\n\t\t\t\t\t\t\tname = tagNames.exif[tagType];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tags.hasOwnProperty(name)) {\n\t\t\t\t\t\t\ttags[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttags.push({\n\t\t\t\t\t\t\tsection: ifdSection,\n\t\t\t\t\t\t\ttype: tagType,\n\t\t\t\t\t\t\tvalue: value\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(validExifHeaders) {\n\t\t\t\t\tapp1Offset = sectionOffset;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(flags.imageSize && jpeg.getSectionName(sectionType).name === 'SOF') {\n\t\t\t\timageSize = jpeg.getSizeFromSOFSection(sectionStream);\n\t\t\t}\n\t\t});\n\n\t\tif(flags.simplifyValues) {\n\t\t\tsimplify.castDegreeValues(getTagValue, setTagValue);\n\t\t\tsimplify.castDateValues(getTagValue, setTagValue);\n\t\t}\n\n\t\treturn new ExifResult(start, tags, imageSize, thumbnailOffset, thumbnailLength, thumbnailType, app1Offset);\n\t}\n};\n\n\n\nmodule.exports = Parser;\n","/*jslint browser: true, devel: true, bitwise: false, debug: true, eqeq: false, es5: true, evil: false, forin: false, newcap: false, nomen: true, plusplus: true, regexp: false, unparam: false, sloppy: true, stupid: false, sub: false, todo: true, vars: true, white: true */\n\nfunction DOMBufferStream(arrayBuffer, offset, length, bigEndian, global, parentOffset) {\n\tthis.global = global;\n\toffset = offset || 0;\n\tlength = length || (arrayBuffer.byteLength - offset);\n\tthis.arrayBuffer = arrayBuffer.slice(offset, offset + length);\n\tthis.view = new global.DataView(this.arrayBuffer, 0, this.arrayBuffer.byteLength);\n\tthis.setBigEndian(bigEndian);\n\tthis.offset = 0;\n\tthis.parentOffset = (parentOffset || 0) + offset;\n}\n\nDOMBufferStream.prototype = {\n\tsetBigEndian: function(bigEndian) {\n\t\tthis.littleEndian = !bigEndian;\n\t},\n\tnextUInt8: function() {\n\t\tvar value = this.view.getUint8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn value;\n\t},\n\tnextInt8: function() {\n\t\tvar value = this.view.getInt8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn value;\n\t},\n\tnextUInt16: function() {\n\t\tvar value = this.view.getUint16(this.offset, this.littleEndian);\n\t\tthis.offset += 2;\n\t\treturn value;\n\t},\n\tnextUInt32: function() {\n\t\tvar value = this.view.getUint32(this.offset, this.littleEndian);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t},\n\tnextInt16: function() {\n\t\tvar value = this.view.getInt16(this.offset, this.littleEndian);\n\t\tthis.offset += 2;\n\t\treturn value;\n\t},\n\tnextInt32: function() {\n\t\tvar value = this.view.getInt32(this.offset, this.littleEndian);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t},\n\tnextFloat: function() {\n\t\tvar value = this.view.getFloat32(this.offset, this.littleEndian);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t},\n\tnextDouble: function() {\n\t\tvar value = this.view.getFloat64(this.offset, this.littleEndian);\n\t\tthis.offset += 8;\n\t\treturn value;\n\t},\n\tnextBuffer: function(length) {\n\t\t//this won't work in IE10\n\t\tvar value = this.arrayBuffer.slice(this.offset, this.offset + length);\n\t\tthis.offset += length;\n\t\treturn value;\n\t},\n\tremainingLength: function() {\n\t\treturn this.arrayBuffer.byteLength - this.offset;\n\t},\n\tnextString: function(length) {\n\t\tvar value = this.arrayBuffer.slice(this.offset, this.offset + length);\n\t\tvalue = String.fromCharCode.apply(null, new this.global.Uint8Array(value));\n\t\tthis.offset += length;\n\t\treturn value;\n\t},\n\tmark: function() {\n\t\tvar self = this;\n\t\treturn {\n\t\t\topenWithOffset: function(offset) {\n\t\t\t\toffset = (offset || 0) + this.offset;\n\t\t\t\treturn new DOMBufferStream(self.arrayBuffer, offset, self.arrayBuffer.byteLength - offset, !self.littleEndian, self.global, self.parentOffset);\n\t\t\t},\n\t\t\toffset: this.offset,\n\t\t\tgetParentOffset: function() {\n\t\t\t\treturn self.parentOffset;\n\t\t\t}\n\t\t};\n\t},\n\toffsetFrom: function(marker) {\n\t\treturn this.parentOffset + this.offset - (marker.offset + marker.getParentOffset());\n\t},\n\tskip: function(amount) {\n\t\tthis.offset += amount;\n\t},\n\tbranch: function(offset, length) {\n\t\tlength = typeof length === 'number' ? length : this.arrayBuffer.byteLength - (this.offset + offset);\n\t\treturn new DOMBufferStream(this.arrayBuffer, this.offset + offset, length, !this.littleEndian, this.global, this.parentOffset);\n\t}\n};\n\nmodule.exports = DOMBufferStream;\n","function BufferStream(buffer, offset, length, bigEndian) {\n\tthis.buffer = buffer;\n\tthis.offset = offset || 0;\n\tlength = typeof length === 'number' ? length : buffer.length;\n\tthis.endPosition = this.offset + length;\n\tthis.setBigEndian(bigEndian);\n}\n\nBufferStream.prototype = {\n\tsetBigEndian: function(bigEndian) {\n\t\tthis.bigEndian = !!bigEndian;\n\t},\n\tnextUInt8: function() {\n\t\tvar value = this.buffer.readUInt8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn value;\n\t},\n\tnextInt8: function() {\n\t\tvar value = this.buffer.readInt8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn value;\n\t},\n\tnextUInt16: function() {\n\t\tvar value = this.bigEndian ? this.buffer.readUInt16BE(this.offset) : this.buffer.readUInt16LE(this.offset);\n\t\tthis.offset += 2;\n\t\treturn value;\n\t},\n\tnextUInt32: function() {\n\t\tvar value = this.bigEndian ? this.buffer.readUInt32BE(this.offset) : this.buffer.readUInt32LE(this.offset);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t},\n\tnextInt16: function() {\n\t\tvar value = this.bigEndian ? this.buffer.readInt16BE(this.offset) : this.buffer.readInt16LE(this.offset);\n\t\tthis.offset += 2;\n\t\treturn value;\n\t},\n\tnextInt32: function() {\n\t\tvar value = this.bigEndian ? this.buffer.readInt32BE(this.offset) : this.buffer.readInt32LE(this.offset);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t},\n\tnextFloat: function() {\n\t\tvar value = this.bigEndian ? this.buffer.readFloatBE(this.offset) : this.buffer.readFloatLE(this.offset);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t},\n\tnextDouble: function() {\n\t\tvar value = this.bigEndian ? this.buffer.readDoubleBE(this.offset) : this.buffer.readDoubleLE(this.offset);\n\t\tthis.offset += 8;\n\t\treturn value;\n\t},\n\tnextBuffer: function(length) {\n\t\tvar value = this.buffer.slice(this.offset, this.offset + length);\n\t\tthis.offset += length;\n\t\treturn value;\n\t},\n\tremainingLength: function() {\n\t\treturn this.endPosition - this.offset;\n\t},\n\tnextString: function(length) {\n\t\tvar value = this.buffer.toString('utf8', this.offset, this.offset + length);\n\t\tthis.offset += length;\n\t\treturn value;\n\t},\n\tmark: function() {\n\t\tvar self = this;\n\t\treturn {\n\t\t\topenWithOffset: function(offset) {\n\t\t\t\toffset = (offset || 0) + this.offset;\n\t\t\t\treturn new BufferStream(self.buffer, offset, self.endPosition - offset, self.bigEndian);\n\t\t\t},\n\t\t\toffset: this.offset\n\t\t};\n\t},\n\toffsetFrom: function(marker) {\n\t\treturn this.offset - marker.offset;\n\t},\n\tskip: function(amount) {\n\t\tthis.offset += amount;\n\t},\n\tbranch: function(offset, length) {\n\t\tlength = typeof length === 'number' ? length : this.endPosition - (this.offset + offset);\n\t\treturn new BufferStream(this.buffer, this.offset + offset, length, this.bigEndian);\n\t}\n};\n\nmodule.exports = BufferStream;\n","var Parser = require('./lib/parser');\n\nfunction getGlobal() {\n\treturn (1,eval)('this');\n}\n\nmodule.exports = {\n\tcreate: function(buffer, global) {\n\t\tglobal = global || getGlobal();\n\t\tif(buffer instanceof global.ArrayBuffer) {\n\t\t\tvar DOMBufferStream = require('./lib/dom-bufferstream');\n\t\t\treturn new Parser(new DOMBufferStream(buffer, 0, buffer.byteLength, true, global));\n\t\t} else {\n\t\t\tvar NodeBufferStream = require('./lib/bufferstream');\n\t\t\treturn new Parser(new NodeBufferStream(buffer, 0, buffer.length, true));\n\t\t}\n\t}\n};\n","import EXIFParser from \"exif-parser\";\n/**\n * Obtains image orientation from EXIF metadata.\n *\n * @param img a Jimp image object\n * @returns a number 1-8 representing EXIF orientation,\n *          in particular 1 if orientation tag is missing\n */\nexport function getExifOrientation(img) {\n    const _exif = img._exif;\n    return (_exif && _exif.tags && _exif.tags.Orientation) || 1;\n}\n/**\n * Returns a function which translates EXIF-rotated coordinates into\n * non-rotated ones.\n *\n * Transformation reference: http://sylvana.net/jpegcrop/exif_orientation.html.\n *\n * @param img a Jimp image object\n * @returns transformation function for transformBitmap().\n */\nfunction getExifOrientationTransformation(img) {\n    const w = img.bitmap.width;\n    const h = img.bitmap.height;\n    switch (getExifOrientation(img)) {\n        case 1: // Horizontal (normal)\n            // does not need to be supported here\n            return null;\n        case 2: // Mirror horizontal\n            return function (x, y) {\n                return [w - x - 1, y];\n            };\n        case 3: // Rotate 180\n            return function (x, y) {\n                return [w - x - 1, h - y - 1];\n            };\n        case 4: // Mirror vertical\n            return function (x, y) {\n                return [x, h - y - 1];\n            };\n        case 5: // Mirror horizontal and rotate 270 CW\n            return function (x, y) {\n                return [y, x];\n            };\n        case 6: // Rotate 90 CW\n            return function (x, y) {\n                return [y, h - x - 1];\n            };\n        case 7: // Mirror horizontal and rotate 90 CW\n            return function (x, y) {\n                return [w - y - 1, h - x - 1];\n            };\n        case 8: // Rotate 270 CW\n            return function (x, y) {\n                return [w - y - 1, x];\n            };\n        default:\n            return null;\n    }\n}\n/**\n * Transforms bitmap in place (moves pixels around) according to given\n * transformation function.\n *\n * @param img a Jimp image object, which bitmap is supposed to\n *        be transformed\n * @param width bitmap width after the transformation\n * @param height bitmap height after the transformation\n * @param transformation transformation function which defines pixel\n *        mapping between new and source bitmap. It takes a pair of coordinates\n *        in the target, and returns a respective pair of coordinates in\n *        the source bitmap, i.e. has following form:\n *        `function(new_x, new_y) { return [src_x, src_y] }`.\n */\nfunction transformBitmap(img, width, height, transformation) {\n    // Underscore-prefixed values are related to the source bitmap\n    // Their counterparts with no prefix are related to the target bitmap\n    const _data = img.bitmap.data;\n    const _width = img.bitmap.width;\n    const data = Buffer.alloc(_data.length);\n    for (let x = 0; x < width; x++) {\n        for (let y = 0; y < height; y++) {\n            const [_x, _y] = transformation(x, y);\n            const idx = (width * y + x) << 2;\n            const _idx = (_width * _y + _x) << 2;\n            const pixel = _data.readUInt32BE(_idx);\n            data.writeUInt32BE(pixel, idx);\n        }\n    }\n    img.bitmap.data = data;\n    img.bitmap.width = width;\n    img.bitmap.height = height;\n    // @ts-expect-error Accessing private property\n    img._exif.tags.Orientation = 1;\n}\n/**\n * Automagically rotates an image based on its EXIF data (if present).\n * @param img  a Jimp image object\n */\nfunction exifRotate(img) {\n    if (getExifOrientation(img) < 2) {\n        return;\n    }\n    const transformation = getExifOrientationTransformation(img);\n    const swapDimensions = getExifOrientation(img) > 4;\n    const newWidth = swapDimensions ? img.bitmap.height : img.bitmap.width;\n    const newHeight = swapDimensions ? img.bitmap.width : img.bitmap.height;\n    if (transformation) {\n        transformBitmap(img, newWidth, newHeight, transformation);\n    }\n}\nexport async function attemptExifRotate(image, buffer) {\n    try {\n        image._exif =\n            EXIFParser.create(buffer).parse();\n        exifRotate(image); // EXIF data\n    }\n    catch {\n        // do nothing\n    }\n}\n//# sourceMappingURL=image-bitmap.js.map","import { Edge } from \"@jimp/types\";\nimport { cssColorToHex, scan, scanIterator } from \"@jimp/utils\";\nimport fileType from \"file-type/core.js\";\nimport { to } from \"await-to-js\";\nimport { existsSync, readFile, writeFile } from \"@jimp/file-ops\";\nimport mime from \"mime/lite.js\";\nimport { composite } from \"./utils/composite.js\";\nimport { attemptExifRotate } from \"./utils/image-bitmap.js\";\nconst emptyBitmap = {\n    data: Buffer.alloc(0),\n    width: 0,\n    height: 0,\n};\n/**\n * Prepare a Buffer object from the arrayBuffer.\n */\nfunction bufferFromArrayBuffer(arrayBuffer) {\n    const buffer = Buffer.alloc(arrayBuffer.byteLength);\n    const view = new Uint8Array(arrayBuffer);\n    for (let i = 0; i < buffer.length; ++i) {\n        buffer[i] = view[i];\n    }\n    return buffer;\n}\nexport { getExifOrientation } from \"./utils/image-bitmap.js\";\nexport { composite } from \"./utils/composite.js\";\nexport * from \"./utils/constants.js\";\n/**\n * Create a Jimp class that support the given image formats and methods\n */\nexport function createJimp({ plugins: pluginsArg, formats: formatsArg, } = {}) {\n    const plugins = pluginsArg || [];\n    const formats = (formatsArg || []).map((format) => format());\n    const CustomJimp = class Jimp {\n        /**\n         * The bitmap data of the image\n         */\n        bitmap = emptyBitmap;\n        /**  Default color to use for new pixels */\n        background = 0x00000000;\n        /** Formats that can be used with Jimp */\n        formats = [];\n        /** The original MIME type of the image */\n        mime;\n        constructor(options = emptyBitmap) {\n            // Add the formats\n            this.formats = formats;\n            if (\"data\" in options) {\n                this.bitmap = options;\n            }\n            else {\n                this.bitmap = {\n                    data: Buffer.alloc(options.width * options.height * 4),\n                    width: options.width,\n                    height: options.height,\n                };\n                if (options.color) {\n                    this.background =\n                        typeof options.color === \"string\"\n                            ? cssColorToHex(options.color)\n                            : options.color;\n                    for (let i = 0; i < this.bitmap.data.length; i += 4) {\n                        this.bitmap.data.writeUInt32BE(this.background, i);\n                    }\n                }\n            }\n            // Add the plugins\n            for (const methods of plugins) {\n                for (const key in methods) {\n                    this[key] = (...args) => {\n                        const result = methods[key]?.(this, ...args);\n                        if (typeof result === \"object\" && \"bitmap\" in result) {\n                            this.bitmap = result.bitmap;\n                            return this;\n                        }\n                        return result;\n                    };\n                }\n            }\n        }\n        /**\n         * Create a Jimp instance from a URL, a file path, or a Buffer\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * // Read from a file path\n         * const image = await Jimp.read(\"test/image.png\");\n         *\n         * // Read from a URL\n         * const image = await Jimp.read(\"https://upload.wikimedia.org/wikipedia/commons/0/01/Bot-Test.jpg\");\n         * ```\n         */\n        static async read(url, options) {\n            if (Buffer.isBuffer(url) || url instanceof ArrayBuffer) {\n                return this.fromBuffer(url);\n            }\n            if (existsSync(url)) {\n                return this.fromBuffer(await readFile(url));\n            }\n            const [fetchErr, response] = await to(fetch(url));\n            if (fetchErr) {\n                throw new Error(`Could not load Buffer from URL: ${url}`);\n            }\n            if (!response.ok) {\n                throw new Error(`HTTP Status ${response.status} for url ${url}`);\n            }\n            const [arrayBufferErr, data] = await to(response.arrayBuffer());\n            if (arrayBufferErr) {\n                throw new Error(`Could not load Buffer from ${url}`);\n            }\n            const buffer = bufferFromArrayBuffer(data);\n            return this.fromBuffer(buffer, options);\n        }\n        /**\n         * Create a Jimp instance from a bitmap.\n         * The difference between this and just using the constructor is that this will\n         * convert raw image data into the bitmap format that Jimp uses.\n         *\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * const image = Jimp.fromBitmap({\n         *   data: Buffer.from([\n         *     0xffffffff, 0xffffffff, 0xffffffff,\n         *     0xffffffff, 0xffffffff, 0xffffffff,\n         *     0xffffffff, 0xffffffff, 0xffffffff,\n         *   ]),\n         *   width: 3,\n         *   height: 3,\n         * });\n         * ```\n         */\n        static fromBitmap(bitmap) {\n            let data;\n            if (bitmap.data instanceof Buffer) {\n                data = Buffer.from(bitmap.data);\n            }\n            if (bitmap.data instanceof Uint8Array ||\n                bitmap.data instanceof Uint8ClampedArray) {\n                data = Buffer.from(bitmap.data.buffer);\n            }\n            if (Array.isArray(bitmap.data)) {\n                data = Buffer.concat(bitmap.data.map((hex) => Buffer.from(hex.toString(16).padStart(8, \"0\"), \"hex\")));\n            }\n            if (!data) {\n                throw new Error(\"data must be a Buffer\");\n            }\n            if (typeof bitmap.height !== \"number\" ||\n                typeof bitmap.width !== \"number\") {\n                throw new Error(\"bitmap must have width and height\");\n            }\n            return new CustomJimp({\n                height: bitmap.height,\n                width: bitmap.width,\n                data,\n            });\n        }\n        /**\n         * Parse a bitmap with the loaded image types.\n         *\n         * @param buffer Raw image data\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * const buffer = await fs.readFile(\"test/image.png\");\n         * const image = await Jimp.fromBuffer(buffer);\n         * ```\n         */\n        static async fromBuffer(buffer, options) {\n            const actualBuffer = buffer instanceof ArrayBuffer ? bufferFromArrayBuffer(buffer) : buffer;\n            const mime = await fileType.fromBuffer(actualBuffer);\n            if (!mime || !mime.mime) {\n                throw new Error(\"Could not find MIME for Buffer\");\n            }\n            const format = formats.find((format) => format.mime === mime.mime);\n            if (!format || !format.decode) {\n                throw new Error(`Mime type ${mime.mime} does not support decoding`);\n            }\n            const image = new CustomJimp(await format.decode(actualBuffer, options?.[format.mime]));\n            image.mime = mime.mime;\n            attemptExifRotate(image, actualBuffer);\n            return image;\n        }\n        /**\n         * Nicely format Jimp object when sent to the console e.g. console.log(image)\n         * @returns Pretty printed jimp object\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * const image = await Jimp.read(\"test/image.png\");\n         *\n         * console.log(image);\n         * ```\n         */\n        inspect() {\n            return (\"<Jimp \" +\n                (this.bitmap === emptyBitmap\n                    ? \"pending...\"\n                    : this.bitmap.width + \"x\" + this.bitmap.height) +\n                \">\");\n        }\n        /**\n         * Nicely format Jimp object when converted to a string\n         * @returns pretty printed\n         */\n        toString() {\n            return \"[object Jimp]\";\n        }\n        /** Get the width of the image */\n        get width() {\n            return this.bitmap.width;\n        }\n        /** Get the height of the image */\n        get height() {\n            return this.bitmap.height;\n        }\n        /**\n         * Converts the Jimp instance to an image buffer\n         * @param mime The mime type to export to\n         * @param options The options to use when exporting\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         * import { promises as fs } from \"fs\";\n         *\n         * const image = new Jimp({ width: 3, height: 3, color: 0xffffffff });\n         *\n         * await image.write(\"test/output.jpeg\", {\n         *   quality: 50,\n         * });\n         * ```\n         */\n        async getBuffer(mime, options) {\n            const format = this.formats.find((format) => format.mime === mime);\n            if (!format || !format.encode) {\n                throw new Error(`Unsupported MIME type: ${mime}`);\n            }\n            let outputImage;\n            if (format.hasAlpha) {\n                // eslint-disable-next-line @typescript-eslint/no-this-alias\n                outputImage = this;\n            }\n            else {\n                outputImage = new CustomJimp({\n                    width: this.bitmap.width,\n                    height: this.bitmap.height,\n                    color: this.background,\n                });\n                composite(outputImage, this);\n            }\n            return format.encode(outputImage.bitmap, options);\n        }\n        /**\n         * Converts the image to a base 64 string\n         *\n         * @param mime The mime type to export to\n         * @param options The options to use when exporting\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * const image = Jimp.fromBuffer(Buffer.from([\n         *   0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,\n         *   0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,\n         *   0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,\n         * ]));\n         *\n         * const base64 = image.getBase64(\"image/jpeg\", {\n         *   quality: 50,\n         * });\n         * ```\n         */\n        async getBase64(mime, options) {\n            const data = await this.getBuffer(mime, options);\n            return \"data:\" + mime + \";base64,\" + data.toString(\"base64\");\n        }\n        /**\n         * Write the image to a file\n         * @param path the path to write the image to\n         * @param options the options to use when writing the image\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * const image = Jimp.fromBuffer(Buffer.from([\n         *   0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,\n         *   0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,\n         *   0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,\n         * ]));\n         *\n         * await image.write(\"test/output.png\");\n         * ```\n         */\n        async write(path, options) {\n            const mimeType = mime.getType(path);\n            await writeFile(path, await this.getBuffer(mimeType, options));\n        }\n        /**\n         * Clone the image into a new Jimp instance.\n         * @param this\n         * @returns A new Jimp instance\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * const image = new Jimp({ width: 3, height: 3, color: 0xffffffff });\n         *\n         * const clone = image.clone();\n         * ```\n         */\n        clone() {\n            return new CustomJimp({\n                ...this.bitmap,\n                data: Buffer.from(this.bitmap.data),\n            });\n        }\n        /**\n         * Returns the offset of a pixel in the bitmap buffer\n         * @param x the x coordinate\n         * @param y the y coordinate\n         * @param edgeHandling (optional) define how to sum pixels from outside the border\n         * @returns the index of the pixel or -1 if not found\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * const image = new Jimp({ width: 3, height: 3, color: 0xffffffff });\n         *\n         * image.getPixelIndex(1, 1); // 2\n         * ```\n         */\n        getPixelIndex(x, y, edgeHandling) {\n            let xi;\n            let yi;\n            if (!edgeHandling) {\n                edgeHandling = Edge.EXTEND;\n            }\n            if (typeof x !== \"number\" || typeof y !== \"number\") {\n                throw new Error(\"x and y must be numbers\");\n            }\n            // round input\n            x = Math.round(x);\n            y = Math.round(y);\n            xi = x;\n            yi = y;\n            if (edgeHandling === Edge.EXTEND) {\n                if (x < 0)\n                    xi = 0;\n                if (x >= this.bitmap.width)\n                    xi = this.bitmap.width - 1;\n                if (y < 0)\n                    yi = 0;\n                if (y >= this.bitmap.height)\n                    yi = this.bitmap.height - 1;\n            }\n            if (edgeHandling === Edge.WRAP) {\n                if (x < 0) {\n                    xi = this.bitmap.width + x;\n                }\n                if (x >= this.bitmap.width) {\n                    xi = x % this.bitmap.width;\n                }\n                if (y < 0) {\n                    yi = this.bitmap.height + y;\n                }\n                if (y >= this.bitmap.height) {\n                    yi = y % this.bitmap.height;\n                }\n            }\n            let i = (this.bitmap.width * yi + xi) << 2;\n            // if out of bounds index is -1\n            if (xi < 0 || xi >= this.bitmap.width) {\n                i = -1;\n            }\n            if (yi < 0 || yi >= this.bitmap.height) {\n                i = -1;\n            }\n            return i;\n        }\n        /**\n         * Returns the hex color value of a pixel\n         * @param x the x coordinate\n         * @param y the y coordinate\n         * @returns the color of the pixel\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * const image = new Jimp({ width: 3, height: 3, color: 0xffffffff });\n         *\n         * image.getPixelColor(1, 1); // 0xffffffff\n         * ```\n         */\n        getPixelColor(x, y) {\n            if (typeof x !== \"number\" || typeof y !== \"number\") {\n                throw new Error(\"x and y must be numbers\");\n            }\n            const idx = this.getPixelIndex(x, y);\n            return this.bitmap.data.readUInt32BE(idx);\n        }\n        /**\n         * Sets the hex colour value of a pixel\n         *\n         * @param hex color to set\n         * @param x the x coordinate\n         * @param y the y coordinate\n         *\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * const image = new Jimp({ width: 3, height: 3, color: 0xffffffff });\n         *\n         * image.setPixelColor(0xff0000ff, 0, 0);\n         * ```\n         */\n        setPixelColor(hex, x, y) {\n            if (typeof hex !== \"number\" ||\n                typeof x !== \"number\" ||\n                typeof y !== \"number\") {\n                throw new Error(\"hex, x and y must be numbers\");\n            }\n            const idx = this.getPixelIndex(x, y);\n            this.bitmap.data.writeUInt32BE(hex, idx);\n            return this;\n        }\n        /**\n         * Determine if the image contains opaque pixels.\n         *\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * const image = new Jimp({ width: 3, height: 3, color: 0xffffffaa });\n         * const image2 = new Jimp({ width: 3, height: 3, color: 0xff0000ff });\n         *\n         * image.hasAlpha(); // false\n         * image2.hasAlpha(); // true\n         * ```\n         */\n        hasAlpha() {\n            const { width, height, data } = this.bitmap;\n            const byteLen = (width * height) << 2;\n            for (let idx = 3; idx < byteLen; idx += 4) {\n                if (data[idx] !== 0xff) {\n                    return true;\n                }\n            }\n            return false;\n        }\n        /**\n         * Composites a source image over to this image respecting alpha channels\n         * @param src the source Jimp instance\n         * @param x the x position to blit the image\n         * @param y the y position to blit the image\n         * @param options determine what mode to use\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * const image = new Jimp({ width: 10, height: 10, color: 0xffffffff });\n         * const image2 = new Jimp({ width: 3, height: 3, color: 0xff0000ff });\n         *\n         * image.composite(image2, 3, 3);\n         * ```\n         */\n        composite(src, x = 0, y = 0, options = {}) {\n            return composite(this, src, x, y, options);\n        }\n        scan(x, y, w, h, f) {\n            return scan(this, x, y, w, h, f);\n        }\n        /**\n         * Iterate scan through a region of the bitmap\n         * @param x the x coordinate to begin the scan at\n         * @param y the y coordinate to begin the scan at\n         * @param w the width of the scan region\n         * @param h the height of the scan region\n         * @example\n         * ```ts\n         * import { Jimp } from \"jimp\";\n         *\n         * const image = new Jimp({ width: 3, height: 3, color: 0xffffffff });\n         *\n         * for (const { x, y, idx, image } of j.scanIterator()) {\n         *   // do something with the pixel\n         * }\n         * ```\n         */\n        scanIterator(x = 0, y = 0, w = this.bitmap.width, h = this.bitmap.height) {\n            if (typeof x !== \"number\" || typeof y !== \"number\") {\n                throw new Error(\"x and y must be numbers\");\n            }\n            if (typeof w !== \"number\" || typeof h !== \"number\") {\n                throw new Error(\"w and h must be numbers\");\n            }\n            return scanIterator(this, x, y, w, h);\n        }\n    };\n    return CustomJimp;\n}\n//# sourceMappingURL=index.js.map","/**\n * What resizing algorithm to use.\n */\nexport var ResizeStrategy;\n(function (ResizeStrategy) {\n    /**\n     * Nearest Neighbor resizing is a method used in image processing that assigns the value of the nearest pixel to the output pixel when resizing an image.\n     * While fast, it can lead to lower quality outputs with noticeable pixelation, especially at larger scaling factors.\n     */\n    ResizeStrategy[\"NEAREST_NEIGHBOR\"] = \"nearestNeighbor\";\n    /**\n     * Bilinear resizing is an image scaling method that uses the weighted average of the four nearest pixel values, providing smoother gradients than nearest neighbor resizing.\n     * It's computationally more intense than nearest neighbor but results in images of higher quality and fewer artifacts.\n     */\n    ResizeStrategy[\"BILINEAR\"] = \"bilinearInterpolation\";\n    /**\n     * Bicubic resizing is an image interpolation method that uses the values of the nearest 16 pixels in the input image to calculate the output pixel value, providing even more smoothness and sharpness than bilinear resizing.\n     * Although it's computationally more expensive than bilinear and nearest neighbor, it produces higher quality images, making it ideal for photographic image scaling.\n     */\n    ResizeStrategy[\"BICUBIC\"] = \"bicubicInterpolation\";\n    /**\n     * Hermite resizing is an image resizing method that uses Hermite interpolation, a mathematical formula, to determine the values of output pixels based on a weighted average of the surrounding pixels.\n     * Although slower than some simpler techniques like bilinear or nearest neighbor, Hermite resizing can produce higher quality visuals and detailed renderings with less blurring.\n     */\n    ResizeStrategy[\"HERMITE\"] = \"hermiteInterpolation\";\n    ResizeStrategy[\"BEZIER\"] = \"bezierInterpolation\";\n})(ResizeStrategy || (ResizeStrategy = {}));\n//# sourceMappingURL=constants.js.map","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n// JavaScript Image Resizer (c) 2012 - Grant Galitz\n// Released to public domain 29 July 2013: https://github.com/grantgalitz/JS-Image-Resizer/issues/4\nfunction Resize(widthOriginal, heightOriginal, targetWidth, targetHeight, blendAlpha, interpolationPass, resizeCallback) {\n    this.widthOriginal = Math.abs(Math.floor(widthOriginal) || 0);\n    this.heightOriginal = Math.abs(Math.floor(heightOriginal) || 0);\n    this.targetWidth = Math.abs(Math.floor(targetWidth) || 0);\n    this.targetHeight = Math.abs(Math.floor(targetHeight) || 0);\n    this.colorChannels = blendAlpha ? 4 : 3;\n    this.interpolationPass = Boolean(interpolationPass);\n    this.resizeCallback =\n        typeof resizeCallback === \"function\" ? resizeCallback : function () { };\n    this.targetWidthMultipliedByChannels = this.targetWidth * this.colorChannels;\n    this.originalWidthMultipliedByChannels =\n        this.widthOriginal * this.colorChannels;\n    this.originalHeightMultipliedByChannels =\n        this.heightOriginal * this.colorChannels;\n    this.widthPassResultSize =\n        this.targetWidthMultipliedByChannels * this.heightOriginal;\n    this.finalResultSize =\n        this.targetWidthMultipliedByChannels * this.targetHeight;\n    this.initialize();\n}\nResize.prototype.initialize = function () {\n    // Perform some checks:\n    if (this.widthOriginal > 0 &&\n        this.heightOriginal > 0 &&\n        this.targetWidth > 0 &&\n        this.targetHeight > 0) {\n        this.configurePasses();\n    }\n    else {\n        console.log(this);\n        throw new Error(\"Invalid settings specified for the resizer.\");\n    }\n};\nResize.prototype.configurePasses = function () {\n    if (this.widthOriginal === this.targetWidth) {\n        // Bypass the width resizer pass:\n        this.resizeWidth = this.bypassResizer;\n    }\n    else {\n        // Setup the width resizer pass:\n        this.ratioWeightWidthPass = this.widthOriginal / this.targetWidth;\n        if (this.ratioWeightWidthPass < 1 && this.interpolationPass) {\n            this.initializeFirstPassBuffers(true);\n            this.resizeWidth =\n                this.colorChannels === 4\n                    ? this.resizeWidthInterpolatedRGBA\n                    : this.resizeWidthInterpolatedRGB;\n        }\n        else {\n            this.initializeFirstPassBuffers(false);\n            this.resizeWidth =\n                this.colorChannels === 4 ? this.resizeWidthRGBA : this.resizeWidthRGB;\n        }\n    }\n    if (this.heightOriginal === this.targetHeight) {\n        // Bypass the height resizer pass:\n        this.resizeHeight = this.bypassResizer;\n    }\n    else {\n        // Setup the height resizer pass:\n        this.ratioWeightHeightPass = this.heightOriginal / this.targetHeight;\n        if (this.ratioWeightHeightPass < 1 && this.interpolationPass) {\n            this.initializeSecondPassBuffers(true);\n            this.resizeHeight = this.resizeHeightInterpolated;\n        }\n        else {\n            this.initializeSecondPassBuffers(false);\n            this.resizeHeight =\n                this.colorChannels === 4 ? this.resizeHeightRGBA : this.resizeHeightRGB;\n        }\n    }\n};\nResize.prototype._resizeWidthInterpolatedRGBChannels = function (buffer, fourthChannel) {\n    const channelsNum = fourthChannel ? 4 : 3;\n    const ratioWeight = this.ratioWeightWidthPass;\n    const outputBuffer = this.widthBuffer;\n    let weight = 0;\n    let finalOffset = 0;\n    let pixelOffset = 0;\n    let firstWeight = 0;\n    let secondWeight = 0;\n    let targetPosition;\n    // Handle for only one interpolation input being valid for start calculation:\n    for (targetPosition = 0; weight < 1 / 3; targetPosition += channelsNum, weight += ratioWeight) {\n        for (finalOffset = targetPosition, pixelOffset = 0; finalOffset < this.widthPassResultSize; pixelOffset += this.originalWidthMultipliedByChannels,\n            finalOffset += this.targetWidthMultipliedByChannels) {\n            outputBuffer[finalOffset] = buffer[pixelOffset];\n            outputBuffer[finalOffset + 1] = buffer[pixelOffset + 1];\n            outputBuffer[finalOffset + 2] = buffer[pixelOffset + 2];\n            if (fourthChannel)\n                outputBuffer[finalOffset + 3] = buffer[pixelOffset + 3];\n        }\n    }\n    // Adjust for overshoot of the last pass's counter:\n    weight -= 1 / 3;\n    let interpolationWidthSourceReadStop;\n    for (interpolationWidthSourceReadStop = this.widthOriginal - 1; weight < interpolationWidthSourceReadStop; targetPosition += channelsNum, weight += ratioWeight) {\n        // Calculate weightings:\n        secondWeight = weight % 1;\n        firstWeight = 1 - secondWeight;\n        // Interpolate:\n        for (finalOffset = targetPosition,\n            pixelOffset = Math.floor(weight) * channelsNum; finalOffset < this.widthPassResultSize; pixelOffset += this.originalWidthMultipliedByChannels,\n            finalOffset += this.targetWidthMultipliedByChannels) {\n            outputBuffer[finalOffset + 0] =\n                buffer[pixelOffset + 0] * firstWeight +\n                    buffer[pixelOffset + channelsNum + 0] * secondWeight;\n            outputBuffer[finalOffset + 1] =\n                buffer[pixelOffset + 1] * firstWeight +\n                    buffer[pixelOffset + channelsNum + 1] * secondWeight;\n            outputBuffer[finalOffset + 2] =\n                buffer[pixelOffset + 2] * firstWeight +\n                    buffer[pixelOffset + channelsNum + 2] * secondWeight;\n            if (fourthChannel)\n                outputBuffer[finalOffset + 3] =\n                    buffer[pixelOffset + 3] * firstWeight +\n                        buffer[pixelOffset + channelsNum + 3] * secondWeight;\n        }\n    }\n    // Handle for only one interpolation input being valid for end calculation:\n    for (interpolationWidthSourceReadStop =\n        this.originalWidthMultipliedByChannels - channelsNum; targetPosition < this.targetWidthMultipliedByChannels; targetPosition += channelsNum) {\n        for (finalOffset = targetPosition,\n            pixelOffset = interpolationWidthSourceReadStop; finalOffset < this.widthPassResultSize; pixelOffset += this.originalWidthMultipliedByChannels,\n            finalOffset += this.targetWidthMultipliedByChannels) {\n            outputBuffer[finalOffset] = buffer[pixelOffset];\n            outputBuffer[finalOffset + 1] = buffer[pixelOffset + 1];\n            outputBuffer[finalOffset + 2] = buffer[pixelOffset + 2];\n            if (fourthChannel)\n                outputBuffer[finalOffset + 3] = buffer[pixelOffset + 3];\n        }\n    }\n    return outputBuffer;\n};\nResize.prototype._resizeWidthRGBChannels = function (buffer, fourthChannel) {\n    const channelsNum = fourthChannel ? 4 : 3;\n    const ratioWeight = this.ratioWeightWidthPass;\n    const ratioWeightDivisor = 1 / ratioWeight;\n    const nextLineOffsetOriginalWidth = this.originalWidthMultipliedByChannels - channelsNum + 1;\n    const nextLineOffsetTargetWidth = this.targetWidthMultipliedByChannels - channelsNum + 1;\n    const output = this.outputWidthWorkBench;\n    const outputBuffer = this.widthBuffer;\n    const trustworthyColorsCount = this.outputWidthWorkBenchOpaquePixelsCount;\n    let weight = 0;\n    let amountToNext = 0;\n    let actualPosition = 0;\n    let currentPosition = 0;\n    let line = 0;\n    let pixelOffset = 0;\n    let outputOffset = 0;\n    let multiplier = 1;\n    let r = 0;\n    let g = 0;\n    let b = 0;\n    let a = 0;\n    do {\n        for (line = 0; line < this.originalHeightMultipliedByChannels;) {\n            output[line++] = 0;\n            output[line++] = 0;\n            output[line++] = 0;\n            if (fourthChannel) {\n                output[line++] = 0;\n                trustworthyColorsCount[line / channelsNum - 1] = 0;\n            }\n        }\n        weight = ratioWeight;\n        do {\n            amountToNext = 1 + actualPosition - currentPosition;\n            multiplier = Math.min(weight, amountToNext);\n            for (line = 0, pixelOffset = actualPosition; line < this.originalHeightMultipliedByChannels; pixelOffset += nextLineOffsetOriginalWidth) {\n                r = buffer[pixelOffset];\n                g = buffer[++pixelOffset];\n                b = buffer[++pixelOffset];\n                a = fourthChannel ? buffer[++pixelOffset] : 255;\n                // Ignore RGB values if pixel is completely transparent\n                output[line++] += (a ? r : 0) * multiplier;\n                output[line++] += (a ? g : 0) * multiplier;\n                output[line++] += (a ? b : 0) * multiplier;\n                if (fourthChannel) {\n                    output[line++] += a * multiplier;\n                    trustworthyColorsCount[line / channelsNum - 1] += a ? multiplier : 0;\n                }\n            }\n            if (weight >= amountToNext) {\n                actualPosition += channelsNum;\n                currentPosition = actualPosition;\n                weight -= amountToNext;\n            }\n            else {\n                currentPosition += weight;\n                break;\n            }\n        } while (weight > 0 &&\n            actualPosition < this.originalWidthMultipliedByChannels);\n        for (line = 0, pixelOffset = outputOffset; line < this.originalHeightMultipliedByChannels; pixelOffset += nextLineOffsetTargetWidth) {\n            weight = fourthChannel ? trustworthyColorsCount[line / channelsNum] : 1;\n            multiplier = fourthChannel\n                ? weight\n                    ? 1 / weight\n                    : 0\n                : ratioWeightDivisor;\n            outputBuffer[pixelOffset] = output[line++] * multiplier;\n            outputBuffer[++pixelOffset] = output[line++] * multiplier;\n            outputBuffer[++pixelOffset] = output[line++] * multiplier;\n            if (fourthChannel)\n                outputBuffer[++pixelOffset] = output[line++] * ratioWeightDivisor;\n        }\n        outputOffset += channelsNum;\n    } while (outputOffset < this.targetWidthMultipliedByChannels);\n    return outputBuffer;\n};\nResize.prototype._resizeHeightRGBChannels = function (buffer, fourthChannel) {\n    const ratioWeight = this.ratioWeightHeightPass;\n    const ratioWeightDivisor = 1 / ratioWeight;\n    const output = this.outputHeightWorkBench;\n    const outputBuffer = this.heightBuffer;\n    const trustworthyColorsCount = this.outputHeightWorkBenchOpaquePixelsCount;\n    let weight = 0;\n    let amountToNext = 0;\n    let actualPosition = 0;\n    let currentPosition = 0;\n    let pixelOffset = 0;\n    let outputOffset = 0;\n    let caret = 0;\n    let multiplier = 1;\n    let r = 0;\n    let g = 0;\n    let b = 0;\n    let a = 0;\n    do {\n        for (pixelOffset = 0; pixelOffset < this.targetWidthMultipliedByChannels;) {\n            output[pixelOffset++] = 0;\n            output[pixelOffset++] = 0;\n            output[pixelOffset++] = 0;\n            if (fourthChannel) {\n                output[pixelOffset++] = 0;\n                trustworthyColorsCount[pixelOffset / 4 - 1] = 0;\n            }\n        }\n        weight = ratioWeight;\n        do {\n            amountToNext = 1 + actualPosition - currentPosition;\n            multiplier = Math.min(weight, amountToNext);\n            caret = actualPosition;\n            for (pixelOffset = 0; pixelOffset < this.targetWidthMultipliedByChannels;) {\n                r = buffer[caret++];\n                g = buffer[caret++];\n                b = buffer[caret++];\n                a = fourthChannel ? buffer[caret++] : 255;\n                // Ignore RGB values if pixel is completely transparent\n                output[pixelOffset++] += (a ? r : 0) * multiplier;\n                output[pixelOffset++] += (a ? g : 0) * multiplier;\n                output[pixelOffset++] += (a ? b : 0) * multiplier;\n                if (fourthChannel) {\n                    output[pixelOffset++] += a * multiplier;\n                    trustworthyColorsCount[pixelOffset / 4 - 1] += a ? multiplier : 0;\n                }\n            }\n            if (weight >= amountToNext) {\n                actualPosition = caret;\n                currentPosition = actualPosition;\n                weight -= amountToNext;\n            }\n            else {\n                currentPosition += weight;\n                break;\n            }\n        } while (weight > 0 && actualPosition < this.widthPassResultSize);\n        for (pixelOffset = 0; pixelOffset < this.targetWidthMultipliedByChannels;) {\n            weight = fourthChannel ? trustworthyColorsCount[pixelOffset / 4] : 1;\n            multiplier = fourthChannel\n                ? weight\n                    ? 1 / weight\n                    : 0\n                : ratioWeightDivisor;\n            outputBuffer[outputOffset++] = Math.round(output[pixelOffset++] * multiplier);\n            outputBuffer[outputOffset++] = Math.round(output[pixelOffset++] * multiplier);\n            outputBuffer[outputOffset++] = Math.round(output[pixelOffset++] * multiplier);\n            if (fourthChannel) {\n                outputBuffer[outputOffset++] = Math.round(output[pixelOffset++] * ratioWeightDivisor);\n            }\n        }\n    } while (outputOffset < this.finalResultSize);\n    return outputBuffer;\n};\nResize.prototype.resizeWidthInterpolatedRGB = function (buffer) {\n    return this._resizeWidthInterpolatedRGBChannels(buffer, false);\n};\nResize.prototype.resizeWidthInterpolatedRGBA = function (buffer) {\n    return this._resizeWidthInterpolatedRGBChannels(buffer, true);\n};\nResize.prototype.resizeWidthRGB = function (buffer) {\n    return this._resizeWidthRGBChannels(buffer, false);\n};\nResize.prototype.resizeWidthRGBA = function (buffer) {\n    return this._resizeWidthRGBChannels(buffer, true);\n};\nResize.prototype.resizeHeightInterpolated = function (buffer) {\n    const ratioWeight = this.ratioWeightHeightPass;\n    const outputBuffer = this.heightBuffer;\n    let weight = 0;\n    let finalOffset = 0;\n    let pixelOffset = 0;\n    let pixelOffsetAccumulated = 0;\n    let pixelOffsetAccumulated2 = 0;\n    let firstWeight = 0;\n    let secondWeight = 0;\n    let interpolationHeightSourceReadStop;\n    // Handle for only one interpolation input being valid for start calculation:\n    for (; weight < 1 / 3; weight += ratioWeight) {\n        for (pixelOffset = 0; pixelOffset < this.targetWidthMultipliedByChannels;) {\n            outputBuffer[finalOffset++] = Math.round(buffer[pixelOffset++]);\n        }\n    }\n    // Adjust for overshoot of the last pass's counter:\n    weight -= 1 / 3;\n    for (interpolationHeightSourceReadStop = this.heightOriginal - 1; weight < interpolationHeightSourceReadStop; weight += ratioWeight) {\n        // Calculate weightings:\n        secondWeight = weight % 1;\n        firstWeight = 1 - secondWeight;\n        // Interpolate:\n        pixelOffsetAccumulated =\n            Math.floor(weight) * this.targetWidthMultipliedByChannels;\n        pixelOffsetAccumulated2 =\n            pixelOffsetAccumulated + this.targetWidthMultipliedByChannels;\n        for (pixelOffset = 0; pixelOffset < this.targetWidthMultipliedByChannels; ++pixelOffset) {\n            outputBuffer[finalOffset++] = Math.round(buffer[pixelOffsetAccumulated++] * firstWeight +\n                buffer[pixelOffsetAccumulated2++] * secondWeight);\n        }\n    }\n    // Handle for only one interpolation input being valid for end calculation:\n    while (finalOffset < this.finalResultSize) {\n        for (pixelOffset = 0,\n            pixelOffsetAccumulated =\n                interpolationHeightSourceReadStop *\n                    this.targetWidthMultipliedByChannels; pixelOffset < this.targetWidthMultipliedByChannels; ++pixelOffset) {\n            outputBuffer[finalOffset++] = Math.round(buffer[pixelOffsetAccumulated++]);\n        }\n    }\n    return outputBuffer;\n};\nResize.prototype.resizeHeightRGB = function (buffer) {\n    return this._resizeHeightRGBChannels(buffer, false);\n};\nResize.prototype.resizeHeightRGBA = function (buffer) {\n    return this._resizeHeightRGBChannels(buffer, true);\n};\nResize.prototype.resize = function (buffer) {\n    this.resizeCallback(this.resizeHeight(this.resizeWidth(buffer)));\n};\nResize.prototype.bypassResizer = function (buffer) {\n    // Just return the buffer passed:\n    return buffer;\n};\nResize.prototype.initializeFirstPassBuffers = function (BILINEARAlgo) {\n    // Initialize the internal width pass buffers:\n    this.widthBuffer = this.generateFloatBuffer(this.widthPassResultSize);\n    if (!BILINEARAlgo) {\n        this.outputWidthWorkBench = this.generateFloatBuffer(this.originalHeightMultipliedByChannels);\n        if (this.colorChannels > 3) {\n            this.outputWidthWorkBenchOpaquePixelsCount = this.generateFloat64Buffer(this.heightOriginal);\n        }\n    }\n};\nResize.prototype.initializeSecondPassBuffers = function (BILINEARAlgo) {\n    // Initialize the internal height pass buffers:\n    this.heightBuffer = this.generateUint8Buffer(this.finalResultSize);\n    if (!BILINEARAlgo) {\n        this.outputHeightWorkBench = this.generateFloatBuffer(this.targetWidthMultipliedByChannels);\n        if (this.colorChannels > 3) {\n            this.outputHeightWorkBenchOpaquePixelsCount = this.generateFloat64Buffer(this.targetWidth);\n        }\n    }\n};\nResize.prototype.generateFloatBuffer = function (bufferLength) {\n    // Generate a float32 typed array buffer:\n    try {\n        return new Float32Array(bufferLength);\n    }\n    catch (error) {\n        console.error(error);\n        return [];\n    }\n};\nResize.prototype.generateFloat64Buffer = function (bufferLength) {\n    // Generate a float64 typed array buffer:\n    try {\n        return new Float64Array(bufferLength);\n    }\n    catch (error) {\n        console.error(error);\n        return [];\n    }\n};\nResize.prototype.generateUint8Buffer = function (bufferLength) {\n    // Generate a uint8 typed array buffer:\n    try {\n        return new Uint8Array(bufferLength);\n    }\n    catch (error) {\n        console.error(error);\n        return [];\n    }\n};\nexport default Resize;\n//# sourceMappingURL=resize.js.map","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Copyright (c) 2015 Guyon Roche\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\nexport const operations = {\n    nearestNeighbor(src, dst) {\n        const wSrc = src.width;\n        const hSrc = src.height;\n        const wDst = dst.width;\n        const hDst = dst.height;\n        const bufSrc = src.data;\n        const bufDst = dst.data;\n        for (let i = 0; i < hDst; i++) {\n            for (let j = 0; j < wDst; j++) {\n                let posDst = (i * wDst + j) * 4;\n                const iSrc = Math.floor((i * hSrc) / hDst);\n                const jSrc = Math.floor((j * wSrc) / wDst);\n                let posSrc = (iSrc * wSrc + jSrc) * 4;\n                bufDst[posDst++] = bufSrc[posSrc++];\n                bufDst[posDst++] = bufSrc[posSrc++];\n                bufDst[posDst++] = bufSrc[posSrc++];\n                bufDst[posDst++] = bufSrc[posSrc++];\n            }\n        }\n    },\n    bilinearInterpolation(src, dst) {\n        const wSrc = src.width;\n        const hSrc = src.height;\n        const wDst = dst.width;\n        const hDst = dst.height;\n        const bufSrc = src.data;\n        const bufDst = dst.data;\n        const interpolate = function (k, kMin, vMin, kMax, vMax) {\n            // special case - k is integer\n            if (kMin === kMax) {\n                return vMin;\n            }\n            return Math.round((k - kMin) * vMax + (kMax - k) * vMin);\n        };\n        const assign = function (pos, offset, x, xMin, xMax, y, yMin, yMax) {\n            let posMin = (yMin * wSrc + xMin) * 4 + offset;\n            let posMax = (yMin * wSrc + xMax) * 4 + offset;\n            const vMin = interpolate(x, xMin, bufSrc[posMin], xMax, bufSrc[posMax]);\n            // special case, y is integer\n            if (yMax === yMin) {\n                bufDst[pos + offset] = vMin;\n            }\n            else {\n                posMin = (yMax * wSrc + xMin) * 4 + offset;\n                posMax = (yMax * wSrc + xMax) * 4 + offset;\n                const vMax = interpolate(x, xMin, bufSrc[posMin], xMax, bufSrc[posMax]);\n                bufDst[pos + offset] = interpolate(y, yMin, vMin, yMax, vMax);\n            }\n        };\n        for (let i = 0; i < hDst; i++) {\n            for (let j = 0; j < wDst; j++) {\n                const posDst = (i * wDst + j) * 4;\n                // x & y in src coordinates\n                const x = (j * wSrc) / wDst;\n                const xMin = Math.floor(x);\n                const xMax = Math.min(Math.ceil(x), wSrc - 1);\n                const y = (i * hSrc) / hDst;\n                const yMin = Math.floor(y);\n                const yMax = Math.min(Math.ceil(y), hSrc - 1);\n                assign(posDst, 0, x, xMin, xMax, y, yMin, yMax);\n                assign(posDst, 1, x, xMin, xMax, y, yMin, yMax);\n                assign(posDst, 2, x, xMin, xMax, y, yMin, yMax);\n                assign(posDst, 3, x, xMin, xMax, y, yMin, yMax);\n            }\n        }\n    },\n    _interpolate2D(src, dst, options, interpolate) {\n        const bufSrc = src.data;\n        const bufDst = dst.data;\n        const wSrc = src.width;\n        const hSrc = src.height;\n        const wDst = dst.width;\n        const hDst = dst.height;\n        // when dst smaller than src/2, interpolate first to a multiple between 0.5 and 1.0 src, then sum squares\n        const wM = Math.max(1, Math.floor(wSrc / wDst));\n        const wDst2 = wDst * wM;\n        const hM = Math.max(1, Math.floor(hSrc / hDst));\n        const hDst2 = hDst * hM;\n        // ===========================================================\n        // Pass 1 - interpolate rows\n        // buf1 has width of dst2 and height of src\n        const buf1 = Buffer.alloc(wDst2 * hSrc * 4);\n        for (let i = 0; i < hSrc; i++) {\n            for (let j = 0; j < wDst2; j++) {\n                // i in src coords, j in dst coords\n                // calculate x in src coords\n                // this interpolation requires 4 sample points and the two inner ones must be real\n                // the outer points can be fudged for the edges.\n                // therefore (wSrc-1)/wDst2\n                const x = (j * (wSrc - 1)) / wDst2;\n                const xPos = Math.floor(x);\n                const t = x - xPos;\n                const srcPos = (i * wSrc + xPos) * 4;\n                const buf1Pos = (i * wDst2 + j) * 4;\n                for (let k = 0; k < 4; k++) {\n                    const kPos = srcPos + k;\n                    const x0 = xPos > 0 ? bufSrc[kPos - 4] : 2 * bufSrc[kPos] - bufSrc[kPos + 4];\n                    const x1 = bufSrc[kPos];\n                    const x2 = bufSrc[kPos + 4];\n                    const x3 = xPos < wSrc - 2\n                        ? bufSrc[kPos + 8]\n                        : 2 * bufSrc[kPos + 4] - bufSrc[kPos];\n                    buf1[buf1Pos + k] = interpolate(x0, x1, x2, x3, t);\n                }\n            }\n        }\n        // this._writeFile(wDst2, hSrc, buf1, \"out/buf1.jpg\");\n        // ===========================================================\n        // Pass 2 - interpolate columns\n        // buf2 has width and height of dst2\n        const buf2 = Buffer.alloc(wDst2 * hDst2 * 4);\n        for (let i = 0; i < hDst2; i++) {\n            for (let j = 0; j < wDst2; j++) {\n                // i&j in dst2 coords\n                // calculate y in buf1 coords\n                // this interpolation requires 4 sample points and the two inner ones must be real\n                // the outer points can be fudged for the edges.\n                // therefore (hSrc-1)/hDst2\n                const y = (i * (hSrc - 1)) / hDst2;\n                const yPos = Math.floor(y);\n                const t = y - yPos;\n                const buf1Pos = (yPos * wDst2 + j) * 4;\n                const buf2Pos = (i * wDst2 + j) * 4;\n                for (let k = 0; k < 4; k++) {\n                    const kPos = buf1Pos + k;\n                    const y0 = yPos > 0\n                        ? buf1[kPos - wDst2 * 4]\n                        : 2 * buf1[kPos] - buf1[kPos + wDst2 * 4];\n                    const y1 = buf1[kPos];\n                    const y2 = buf1[kPos + wDst2 * 4];\n                    const y3 = yPos < hSrc - 2\n                        ? buf1[kPos + wDst2 * 8]\n                        : 2 * buf1[kPos + wDst2 * 4] - buf1[kPos];\n                    buf2[buf2Pos + k] = interpolate(y0, y1, y2, y3, t);\n                }\n            }\n        }\n        // this._writeFile(wDst2, hDst2, buf2, \"out/buf2.jpg\");\n        // ===========================================================\n        // Pass 3 - scale to dst\n        const m = wM * hM;\n        if (m > 1) {\n            for (let i = 0; i < hDst; i++) {\n                for (let j = 0; j < wDst; j++) {\n                    // i&j in dst bounded coords\n                    let r = 0;\n                    let g = 0;\n                    let b = 0;\n                    let a = 0;\n                    let realColors = 0;\n                    for (let y = 0; y < hM; y++) {\n                        const yPos = i * hM + y;\n                        for (let x = 0; x < wM; x++) {\n                            const xPos = j * wM + x;\n                            const xyPos = (yPos * wDst2 + xPos) * 4;\n                            const pixelAlpha = buf2[xyPos + 3];\n                            if (pixelAlpha) {\n                                r += buf2[xyPos];\n                                g += buf2[xyPos + 1];\n                                b += buf2[xyPos + 2];\n                                realColors++;\n                            }\n                            a += pixelAlpha;\n                        }\n                    }\n                    const pos = (i * wDst + j) * 4;\n                    bufDst[pos] = realColors ? Math.round(r / realColors) : 0;\n                    bufDst[pos + 1] = realColors ? Math.round(g / realColors) : 0;\n                    bufDst[pos + 2] = realColors ? Math.round(b / realColors) : 0;\n                    bufDst[pos + 3] = Math.round(a / m);\n                }\n            }\n        }\n        else {\n            // replace dst buffer with buf2\n            dst.data = buf2;\n        }\n    },\n    bicubicInterpolation(src, dst, options) {\n        const interpolateCubic = function (x0, x1, x2, x3, t) {\n            const a0 = x3 - x2 - x0 + x1;\n            const a1 = x0 - x1 - a0;\n            const a2 = x2 - x0;\n            const a3 = x1;\n            return Math.max(0, Math.min(255, a0 * (t * t * t) + a1 * (t * t) + a2 * t + a3));\n        };\n        return this._interpolate2D(src, dst, options, interpolateCubic);\n    },\n    hermiteInterpolation(src, dst, options) {\n        const interpolateHermite = function (x0, x1, x2, x3, t) {\n            const c0 = x1;\n            const c1 = 0.5 * (x2 - x0);\n            const c2 = x0 - 2.5 * x1 + 2 * x2 - 0.5 * x3;\n            const c3 = 0.5 * (x3 - x0) + 1.5 * (x1 - x2);\n            return Math.max(0, Math.min(255, Math.round(((c3 * t + c2) * t + c1) * t + c0)));\n        };\n        return this._interpolate2D(src, dst, options, interpolateHermite);\n    },\n    bezierInterpolation(src, dst, options) {\n        // between 2 points y(n), y(n+1), use next points out, y(n-1), y(n+2)\n        // to predict control points (a & b) to be placed at n+0.5\n        //  ya(n) = y(n) + (y(n+1)-y(n-1))/4\n        //  yb(n) = y(n+1) - (y(n+2)-y(n))/4\n        // then use std bezier to interpolate [n,n+1)\n        //  y(n+t) = y(n)*(1-t)^3 + 3 * ya(n)*(1-t)^2*t + 3 * yb(n)*(1-t)*t^2 + y(n+1)*t^3\n        //  note the 3* factor for the two control points\n        // for edge cases, can choose:\n        //  y(-1) = y(0) - 2*(y(1)-y(0))\n        //  y(w) = y(w-1) + 2*(y(w-1)-y(w-2))\n        // but can go with y(-1) = y(0) and y(w) = y(w-1)\n        const interpolateBezier = function (x0, x1, x2, x3, t) {\n            // x1, x2 are the knots, use x0 and x3 to calculate control points\n            const cp1 = x1 + (x2 - x0) / 4;\n            const cp2 = x2 - (x3 - x1) / 4;\n            const nt = 1 - t;\n            const c0 = x1 * nt * nt * nt;\n            const c1 = 3 * cp1 * nt * nt * t;\n            const c2 = 3 * cp2 * nt * t * t;\n            const c3 = x2 * t * t * t;\n            return Math.max(0, Math.min(255, Math.round(c0 + c1 + c2 + c3)));\n        };\n        return this._interpolate2D(src, dst, options, interpolateBezier);\n    },\n};\n//# sourceMappingURL=resize2.js.map","import { ResizeStrategy } from \"./constants.js\";\nimport { z } from \"zod\";\nimport Resize from \"./modules/resize.js\";\nimport { operations as Resize2 } from \"./modules/resize2.js\";\nexport * from \"./constants.js\";\nconst ResizeOptionsSchema = z.union([\n    z.object({\n        /** the width to resize the image to */\n        w: z.number().min(0),\n        /** the height to resize the image to */\n        h: z.number().min(0).optional(),\n        /** a scaling method (e.g. ResizeStrategy.BEZIER) */\n        mode: z.nativeEnum(ResizeStrategy).optional(),\n    }),\n    z.object({\n        /** the width to resize the image to */\n        w: z.number().min(0).optional(),\n        /** the height to resize the image to */\n        h: z.number().min(0),\n        /** a scaling method (e.g. ResizeStrategy.BEZIER) */\n        mode: z.nativeEnum(ResizeStrategy).optional(),\n    }),\n]);\nconst ScaleToFitOptionsSchema = z.object({\n    /** the width to resize the image to */\n    w: z.number().min(0),\n    /** the height to resize the image to */\n    h: z.number().min(0),\n    /** a scaling method (e.g. Jimp.RESIZE_BEZIER) */\n    mode: z.nativeEnum(ResizeStrategy).optional(),\n});\nconst ScaleComplexOptionsSchema = z.object({\n    /** the width to resize the image to */\n    f: z.number().min(0),\n    /** a scaling method (e.g. Jimp.RESIZE_BEZIER) */\n    mode: z.nativeEnum(ResizeStrategy).optional(),\n});\nexport const methods = {\n    /**\n     * Resizes the image to a set width and height using a 2-pass bilinear algorithm\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.resize({ w: 150 });\n     * ```\n     */\n    resize(image, options) {\n        const { mode } = ResizeOptionsSchema.parse(options);\n        let w;\n        let h;\n        if (typeof options.w === \"number\") {\n            w = options.w;\n            h = options.h ?? image.bitmap.height * (w / image.bitmap.width);\n        }\n        else if (typeof options.h === \"number\") {\n            h = options.h;\n            w = options.w ?? image.bitmap.width * (h / image.bitmap.height);\n        }\n        else {\n            throw new Error(\"w must be a number\");\n        }\n        // round inputs\n        w = Math.round(w) || 1;\n        h = Math.round(h) || 1;\n        if (mode && typeof Resize2[mode] === \"function\") {\n            const dst = {\n                data: Buffer.alloc(w * h * 4),\n                width: w,\n                height: h,\n            };\n            Resize2[mode](image.bitmap, dst);\n            image.bitmap = dst;\n        }\n        else {\n            const resize = new Resize(image.bitmap.width, image.bitmap.height, w, h, true, true, (buffer) => {\n                image.bitmap.data = Buffer.from(buffer);\n                image.bitmap.width = w;\n                image.bitmap.height = h;\n            });\n            resize.resize(image.bitmap.data);\n        }\n        return image;\n    },\n    /**\n     * Uniformly scales the image by a factor.\n     * @param f the factor to scale the image by\n     * @param mode (optional) a scaling method (e.g. Jimp.RESIZE_BEZIER)\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.scale(0.5);\n     * ```\n     */\n    scale(image, options) {\n        const { f, mode } = typeof options === \"number\"\n            ? { f: options }\n            : ScaleComplexOptionsSchema.parse(options);\n        const w = image.bitmap.width * f;\n        const h = image.bitmap.height * f;\n        return this.resize(image, { w, h, mode: mode });\n    },\n    /**\n     * Scale the image to the largest size that fits inside the rectangle that has the given width and height.\n     * @param w the width to resize the image to\n     * @param h the height to resize the image to\n     * @param mode a scaling method (e.g. ResizeStrategy.BEZIER)\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.scaleToFit(100, 100);\n     * ```\n     */\n    scaleToFit(image, options) {\n        const { h, w, mode } = ScaleToFitOptionsSchema.parse(options);\n        const f = w / h > image.bitmap.width / image.bitmap.height\n            ? h / image.bitmap.height\n            : w / image.bitmap.width;\n        return this.scale(image, { f, mode: mode });\n    },\n};\n//# sourceMappingURL=index.js.map","import { HorizontalAlign, VerticalAlign } from \"@jimp/core\";\nimport { clone } from \"@jimp/utils\";\nimport { ResizeStrategy, methods as resizeMethods } from \"@jimp/plugin-resize\";\nimport { methods as blitMethods } from \"@jimp/plugin-blit\";\nimport { z } from \"zod\";\nconst ContainOptionsSchema = z.object({\n    /** the width to resize the image to */\n    w: z.number(),\n    /** the height to resize the image to */\n    h: z.number(),\n    /** A bitmask for horizontal and vertical alignment */\n    align: z.number().optional(),\n    /** a scaling method (e.g. Jimp.RESIZE_BEZIER) */\n    mode: z.nativeEnum(ResizeStrategy).optional(),\n});\nexport const methods = {\n    /**\n     * Scale the image to the given width and height keeping the aspect ratio. Some parts of the image may be letter boxed.\n     * @param w the width to resize the image to\n     * @param h the height to resize the image to\n     * @param align A bitmask for horizontal and vertical alignment\n     * @param mode a scaling method (e.g. Jimp.RESIZE_BEZIER)\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.contain({ w: 150, h: 100 });\n     * ```\n     */\n    contain(image, options) {\n        const { w, h, align = HorizontalAlign.CENTER | VerticalAlign.MIDDLE, mode, } = ContainOptionsSchema.parse(options);\n        const hbits = align & ((1 << 3) - 1);\n        const vbits = align >> 3;\n        // check if more flags than one is in the bit sets\n        if (!((hbits !== 0 && !(hbits & (hbits - 1))) ||\n            (vbits !== 0 && !(vbits & (vbits - 1))))) {\n            throw new Error(\"only use one flag per alignment direction\");\n        }\n        const alignH = hbits >> 1; // 0, 1, 2\n        const alignV = vbits >> 1; // 0, 1, 2\n        const f = w / h > image.bitmap.width / image.bitmap.height\n            ? h / image.bitmap.height\n            : w / image.bitmap.width;\n        const c = resizeMethods.scale(clone(image), { f, mode });\n        image = resizeMethods.resize(image, { w, h, mode });\n        image.scan((_, __, idx) => {\n            image.bitmap.data.writeUInt32BE(image.background, idx);\n        });\n        image = blitMethods.blit(image, {\n            src: c,\n            x: ((image.bitmap.width - c.bitmap.width) / 2) * alignH,\n            y: ((image.bitmap.height - c.bitmap.height) / 2) * alignV,\n        });\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","import { colorDiff, intToRGBA, scan } from \"@jimp/utils\";\nimport { z } from \"zod\";\nexport const CropOptionsSchema = z.object({\n    /** the x position to crop form */\n    x: z.number(),\n    /** the y position to crop form */\n    y: z.number(),\n    /** the width to crop form */\n    w: z.number(),\n    /** the height to crop form */\n    h: z.number(),\n});\nconst AutocropComplexOptionsSchema = z.object({\n    /** percent of color difference tolerance (default value) */\n    tolerance: z.number().min(0).max(1).optional(),\n    /** flag to force cropping only if the image has a real \"frame\" i.e. all 4 sides have some border (default value) */\n    cropOnlyFrames: z.boolean().optional(),\n    /** force cropping top be symmetric */\n    cropSymmetric: z.boolean().optional(),\n    /** Amount of pixels in border to leave */\n    leaveBorder: z.number().optional(),\n    ignoreSides: z\n        .object({\n        north: z.boolean().optional(),\n        south: z.boolean().optional(),\n        east: z.boolean().optional(),\n        west: z.boolean().optional(),\n    })\n        .optional(),\n});\nexport const methods = {\n    /**\n     * Crops the image at a given point to a give size.\n     *\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     * const cropped = image.crop(150, 100);\n     * ```\n     */\n    crop(image, options) {\n        let { x, y, w, h } = CropOptionsSchema.parse(options);\n        // round input\n        x = Math.round(x);\n        y = Math.round(y);\n        w = Math.round(w);\n        h = Math.round(h);\n        if (x === 0 && w === image.bitmap.width) {\n            // shortcut\n            const start = (w * y + x) << 2;\n            const end = start + ((h * w) << 2);\n            image.bitmap.data = image.bitmap.data.slice(start, end);\n        }\n        else {\n            const bitmap = Buffer.allocUnsafe(w * h * 4);\n            let offset = 0;\n            scan(image, x, y, w, h, function (_, __, idx) {\n                const data = image.bitmap.data.readUInt32BE(idx);\n                bitmap.writeUInt32BE(data, offset);\n                offset += 4;\n            });\n            image.bitmap.data = bitmap;\n        }\n        image.bitmap.width = w;\n        image.bitmap.height = h;\n        return image;\n    },\n    /**\n     * Autocrop same color borders from this image.\n     * This function will attempt to crop out transparent pixels from the image.\n     *\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     * const cropped = image.autocrop();\n     * ```\n     */\n    autocrop(image, options = {}) {\n        const { tolerance = 0.0002, cropOnlyFrames = true, cropSymmetric = false, leaveBorder = 0, ignoreSides: ignoreSidesArg, } = typeof options === \"number\"\n            ? { tolerance: options }\n            : AutocropComplexOptionsSchema.parse(options);\n        const w = image.bitmap.width;\n        const h = image.bitmap.height;\n        const minPixelsPerSide = 1; // to avoid cropping completely the image, resulting in an invalid 0 sized image\n        // i.e. north and south / east and west are cropped by the same value\n        const ignoreSides = {\n            north: false,\n            south: false,\n            east: false,\n            west: false,\n            ...ignoreSidesArg,\n        };\n        /**\n         * All borders must be of the same color as the top left pixel, to be cropped.\n         * It should be possible to crop borders each with a different color,\n         * but since there are many ways for corners to intersect, it would\n         * introduce unnecessary complexity to the algorithm.\n         */\n        // scan each side for same color borders\n        let colorTarget = image.getPixelColor(0, 0); // top left pixel color is the target color\n        const rgba1 = intToRGBA(colorTarget);\n        // for north and east sides\n        let northPixelsToCrop = 0;\n        let eastPixelsToCrop = 0;\n        let southPixelsToCrop = 0;\n        let westPixelsToCrop = 0;\n        // north side (scan rows from north to south)\n        colorTarget = image.getPixelColor(0, 0);\n        if (!ignoreSides.north) {\n            north: for (let y = 0; y < h - minPixelsPerSide; y++) {\n                for (let x = 0; x < w; x++) {\n                    const colorXY = image.getPixelColor(x, y);\n                    const rgba2 = intToRGBA(colorXY);\n                    if (colorDiff(rgba1, rgba2) > tolerance) {\n                        // this pixel is too distant from the first one: abort this side scan\n                        break north;\n                    }\n                }\n                // this row contains all pixels with the same color: increment this side pixels to crop\n                northPixelsToCrop++;\n            }\n        }\n        // west side (scan columns from west to east)\n        colorTarget = image.getPixelColor(w, 0);\n        if (!ignoreSides.west) {\n            west: for (let x = 0; x < w - minPixelsPerSide; x++) {\n                for (let y = 0 + northPixelsToCrop; y < h; y++) {\n                    const colorXY = image.getPixelColor(x, y);\n                    const rgba2 = intToRGBA(colorXY);\n                    if (colorDiff(rgba1, rgba2) > tolerance) {\n                        // this pixel is too distant from the first one: abort this side scan\n                        break west;\n                    }\n                }\n                // this column contains all pixels with the same color: increment this side pixels to crop\n                westPixelsToCrop++;\n            }\n        }\n        // south side (scan rows from south to north)\n        colorTarget = image.getPixelColor(0, h);\n        if (!ignoreSides.south) {\n            south: for (let y = h - 1; y >= northPixelsToCrop + minPixelsPerSide; y--) {\n                for (let x = w - eastPixelsToCrop - 1; x >= 0; x--) {\n                    const colorXY = image.getPixelColor(x, y);\n                    const rgba2 = intToRGBA(colorXY);\n                    if (colorDiff(rgba1, rgba2) > tolerance) {\n                        // this pixel is too distant from the first one: abort this side scan\n                        break south;\n                    }\n                }\n                // this row contains all pixels with the same color: increment this side pixels to crop\n                southPixelsToCrop++;\n            }\n        }\n        // east side (scan columns from east to west)\n        colorTarget = image.getPixelColor(w, h);\n        if (!ignoreSides.east) {\n            east: for (let x = w - 1; x >= 0 + westPixelsToCrop + minPixelsPerSide; x--) {\n                for (let y = h - 1; y >= 0 + northPixelsToCrop; y--) {\n                    const colorXY = image.getPixelColor(x, y);\n                    const rgba2 = intToRGBA(colorXY);\n                    if (colorDiff(rgba1, rgba2) > tolerance) {\n                        // this pixel is too distant from the first one: abort this side scan\n                        break east;\n                    }\n                }\n                // this column contains all pixels with the same color: increment this side pixels to crop\n                eastPixelsToCrop++;\n            }\n        }\n        // decide if a crop is needed\n        let doCrop = false;\n        // apply leaveBorder\n        westPixelsToCrop -= leaveBorder;\n        eastPixelsToCrop -= leaveBorder;\n        northPixelsToCrop -= leaveBorder;\n        southPixelsToCrop -= leaveBorder;\n        if (cropSymmetric) {\n            const horizontal = Math.min(eastPixelsToCrop, westPixelsToCrop);\n            const vertical = Math.min(northPixelsToCrop, southPixelsToCrop);\n            westPixelsToCrop = horizontal;\n            eastPixelsToCrop = horizontal;\n            northPixelsToCrop = vertical;\n            southPixelsToCrop = vertical;\n        }\n        // make sure that crops are >= 0\n        westPixelsToCrop = westPixelsToCrop >= 0 ? westPixelsToCrop : 0;\n        eastPixelsToCrop = eastPixelsToCrop >= 0 ? eastPixelsToCrop : 0;\n        northPixelsToCrop = northPixelsToCrop >= 0 ? northPixelsToCrop : 0;\n        southPixelsToCrop = southPixelsToCrop >= 0 ? southPixelsToCrop : 0;\n        // safety checks\n        const widthOfRemainingPixels = w - (westPixelsToCrop + eastPixelsToCrop);\n        const heightOfRemainingPixels = h - (southPixelsToCrop + northPixelsToCrop);\n        if (cropOnlyFrames) {\n            // crop image if all sides should be cropped\n            doCrop =\n                eastPixelsToCrop !== 0 &&\n                    northPixelsToCrop !== 0 &&\n                    westPixelsToCrop !== 0 &&\n                    southPixelsToCrop !== 0;\n        }\n        else {\n            // crop image if at least one side should be cropped\n            doCrop =\n                eastPixelsToCrop !== 0 ||\n                    northPixelsToCrop !== 0 ||\n                    westPixelsToCrop !== 0 ||\n                    southPixelsToCrop !== 0;\n        }\n        if (doCrop) {\n            // do the real crop\n            this.crop(image, {\n                x: westPixelsToCrop,\n                y: northPixelsToCrop,\n                w: widthOfRemainingPixels,\n                h: heightOfRemainingPixels,\n            });\n        }\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","import { VerticalAlign, HorizontalAlign } from \"@jimp/core\";\nimport { ResizeStrategy, methods as resizeMethods } from \"@jimp/plugin-resize\";\nimport { methods as cropMethods } from \"@jimp/plugin-crop\";\nimport { z } from \"zod\";\nconst CoverOptionsSchema = z.object({\n    /** the width to resize the image to */\n    w: z.number(),\n    /** the height to resize the image to */\n    h: z.number(),\n    /** A bitmask for horizontal and vertical alignment */\n    align: z.number().optional(),\n    /** a scaling method (e.g. ResizeStrategy.BEZIER) */\n    mode: z.nativeEnum(ResizeStrategy).optional(),\n});\nexport const methods = {\n    /**\n     * Scale the image so the given width and height keeping the aspect ratio. Some parts of the image may be clipped.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.cover(150, 100);\n     * ```\n     */\n    cover(image, options) {\n        const { w, h, align = HorizontalAlign.CENTER | VerticalAlign.MIDDLE, mode, } = CoverOptionsSchema.parse(options);\n        const hbits = align & ((1 << 3) - 1);\n        const vbits = align >> 3;\n        // check if more flags than one is in the bit sets\n        if (!((hbits !== 0 && !(hbits & (hbits - 1))) ||\n            (vbits !== 0 && !(vbits & (vbits - 1))))) {\n            throw new Error(\"only use one flag per alignment direction\");\n        }\n        const alignH = hbits >> 1; // 0, 1, 2\n        const alignV = vbits >> 1; // 0, 1, 2\n        const f = w / h > image.bitmap.width / image.bitmap.height\n            ? w / image.bitmap.width\n            : h / image.bitmap.height;\n        image = resizeMethods.scale(image, {\n            f,\n            mode,\n        });\n        image = cropMethods.crop(image, {\n            x: ((image.bitmap.width - w) / 2) * alignH,\n            y: ((image.bitmap.height - h) / 2) * alignV,\n            w,\n            h,\n        });\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","import { JimpClassSchema } from \"@jimp/types\";\nimport { clone } from \"@jimp/utils\";\nimport { z } from \"zod\";\nconst DisplaceOptionsSchema = z.object({\n    /** the source Jimp instance */\n    map: JimpClassSchema,\n    /** the maximum displacement value */\n    offset: z.number(),\n});\nexport const methods = {\n    /**\n     * Displaces the image based on the provided displacement map\n     * @param map the source Jimp instance\n     * @param offset\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     * const map = await Jimp.read(\"test/map.png\");\n     *\n     * image.displace(map, 10);\n     * ```\n     */\n    displace(image, options) {\n        const { map, offset } = DisplaceOptionsSchema.parse(options);\n        const source = clone(image);\n        image.scan((x, y, idx) => {\n            let displacement = (map.bitmap.data[idx] / 256) * offset;\n            displacement = Math.round(displacement);\n            const ids = image.getPixelIndex(x + displacement, y);\n            image.bitmap.data[ids] = source.bitmap.data[idx];\n            image.bitmap.data[ids + 1] = source.bitmap.data[idx + 1];\n            image.bitmap.data[ids + 2] = source.bitmap.data[idx + 2];\n        });\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","export const methods = {\n    /**\n     * Apply a ordered dithering effect.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.dither();\n     * ```\n     */\n    dither(image) {\n        const rgb565Matrix = [\n            1, 9, 3, 11, 13, 5, 15, 7, 4, 12, 2, 10, 16, 8, 14, 6,\n        ];\n        image.scan((x, y, idx) => {\n            const thresholdId = ((y & 3) << 2) + (x % 4);\n            const dither = rgb565Matrix[thresholdId];\n            image.bitmap.data[idx] = Math.min(image.bitmap.data[idx] + dither, 0xff);\n            image.bitmap.data[idx + 1] = Math.min(image.bitmap.data[idx + 1] + dither, 0xff);\n            image.bitmap.data[idx + 2] = Math.min(image.bitmap.data[idx + 2] + dither, 0xff);\n        });\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","import { clone } from \"@jimp/utils\";\nimport { z } from \"zod\";\nconst FisheyeOptionsSchema = z.object({\n    /** the radius of the circle */\n    radius: z.number().min(0).optional(),\n});\nexport const methods = {\n    /**\n     * Adds a fisheye effect to the image.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.fisheye();\n     * ```\n     */\n    fisheye(image, options = {}) {\n        const { radius = 2.5 } = FisheyeOptionsSchema.parse(options);\n        const source = clone(image);\n        const { width, height } = source.bitmap;\n        source.scan((x, y) => {\n            const hx = x / width;\n            const hy = y / height;\n            const rActual = Math.sqrt(Math.pow(hx - 0.5, 2) + Math.pow(hy - 0.5, 2));\n            const rn = 2 * Math.pow(rActual, radius);\n            const cosA = (hx - 0.5) / rActual;\n            const sinA = (hy - 0.5) / rActual;\n            const newX = Math.round((rn * cosA + 0.5) * width);\n            const newY = Math.round((rn * sinA + 0.5) * height);\n            const color = source.getPixelColor(newX, newY);\n            image.setPixelColor(color, x, y);\n        });\n        /* Set center pixel color, otherwise it will be transparent */\n        image.setPixelColor(source.getPixelColor(width / 2, height / 2), width / 2, height / 2);\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","import { z } from \"zod\";\nconst FlipOptionsSchema = z.object({\n    /** if true the image will be flipped horizontally */\n    horizontal: z.boolean().optional(),\n    /** if true the image will be flipped vertically */\n    vertical: z.boolean().optional(),\n});\nexport const methods = {\n    /**\n     * Flip the image.\n     * @param horizontal a Boolean, if true the image will be flipped horizontally\n     * @param vertical a Boolean, if true the image will be flipped vertically\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.flip(true, false);\n     * ```\n     */\n    flip(image, options) {\n        const { horizontal, vertical } = FlipOptionsSchema.parse(options);\n        const bitmap = Buffer.alloc(image.bitmap.data.length);\n        image.scan((x, y, idx) => {\n            const _x = horizontal ? image.bitmap.width - 1 - x : x;\n            const _y = vertical ? image.bitmap.height - 1 - y : y;\n            const _idx = (image.bitmap.width * _y + _x) << 2;\n            const data = image.bitmap.data.readUInt32BE(idx);\n            bitmap.writeUInt32BE(data, _idx);\n        });\n        image.bitmap.data = Buffer.from(bitmap);\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","'use strict';\n\n/**\n * Converter\n *\n * @param {string|Array} srcAlphabet\n * @param {string|Array} dstAlphabet\n * @constructor\n */\nfunction Converter(srcAlphabet, dstAlphabet) {\n    if (!srcAlphabet || !dstAlphabet || !srcAlphabet.length || !dstAlphabet.length) {\n        throw new Error('Bad alphabet');\n    }\n    this.srcAlphabet = srcAlphabet;\n    this.dstAlphabet = dstAlphabet;\n}\n\n/**\n * Convert number from source alphabet to destination alphabet\n *\n * @param {string|Array} number - number represented as a string or array of points\n *\n * @returns {string|Array}\n */\nConverter.prototype.convert = function(number) {\n    var i, divide, newlen,\n    numberMap = {},\n    fromBase = this.srcAlphabet.length,\n    toBase = this.dstAlphabet.length,\n    length = number.length,\n    result = typeof number === 'string' ? '' : [];\n\n    if (!this.isValid(number)) {\n        throw new Error('Number \"' + number + '\" contains of non-alphabetic digits (' + this.srcAlphabet + ')');\n    }\n\n    if (this.srcAlphabet === this.dstAlphabet) {\n        return number;\n    }\n\n    for (i = 0; i < length; i++) {\n        numberMap[i] = this.srcAlphabet.indexOf(number[i]);\n    }\n    do {\n        divide = 0;\n        newlen = 0;\n        for (i = 0; i < length; i++) {\n            divide = divide * fromBase + numberMap[i];\n            if (divide >= toBase) {\n                numberMap[newlen++] = parseInt(divide / toBase, 10);\n                divide = divide % toBase;\n            } else if (newlen > 0) {\n                numberMap[newlen++] = 0;\n            }\n        }\n        length = newlen;\n        result = this.dstAlphabet.slice(divide, divide + 1).concat(result);\n    } while (newlen !== 0);\n\n    return result;\n};\n\n/**\n * Valid number with source alphabet\n *\n * @param {number} number\n *\n * @returns {boolean}\n */\nConverter.prototype.isValid = function(number) {\n    var i = 0;\n    for (; i < number.length; ++i) {\n        if (this.srcAlphabet.indexOf(number[i]) === -1) {\n            return false;\n        }\n    }\n    return true;\n};\n\nmodule.exports = Converter;","var Converter = require('./src/converter');\n\n/**\n * Function get source and destination alphabet and return convert function\n *\n * @param {string|Array} srcAlphabet\n * @param {string|Array} dstAlphabet\n *\n * @returns {function(number|Array)}\n */\nfunction anyBase(srcAlphabet, dstAlphabet) {\n    var converter = new Converter(srcAlphabet, dstAlphabet);\n    /**\n     * Convert function\n     *\n     * @param {string|Array} number\n     *\n     * @return {string|Array} number\n     */\n    return function (number) {\n        return converter.convert(number);\n    }\n};\n\nanyBase.BIN = '01';\nanyBase.OCT = '01234567';\nanyBase.DEC = '0123456789';\nanyBase.HEX = '0123456789abcdef';\n\nmodule.exports = anyBase;","/*\nCopyright (c) 2011 Elliot Shepherd\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\nimport { methods as color } from \"@jimp/plugin-color\";\nimport { methods } from \"@jimp/plugin-resize\";\nimport { clone } from \"@jimp/utils\";\n// https://code.google.com/p/ironchef-team21/source/browse/ironchef_team21/src/ImagePHash.java\n/*\n * pHash-like image hash.\n * Author: Elliot Shepherd (elliot@jarofworms.com\n * Based On: http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html\n */\nclass ImagePHash {\n    size;\n    smallerSize;\n    constructor(size, smallerSize) {\n        this.size = size || 32;\n        this.smallerSize = smallerSize || 8;\n        initCoefficients(this.size);\n    }\n    distance(s1, s2) {\n        let counter = 0;\n        for (let k = 0; k < s1.length; k++) {\n            if (s1[k] !== s2[k]) {\n                counter++;\n            }\n        }\n        return counter / s1.length;\n    }\n    /**\n     * Returns a 'binary string' (like. 001010111011100010) which is easy to do a hamming distance on.\n     */\n    getHash(img) {\n        /* 1. Reduce size.\n         * Like Average Hash, pHash starts with a small image.\n         * However, the image is larger than 8x8; 32x32 is a good size.\n         * This is really done to simplify the DCT computation and not\n         * because it is needed to reduce the high frequencies.\n         */\n        img = methods.resize(clone(img), { w: this.size, h: this.size });\n        /* 2. Reduce color.\n         * The image is reduced to a grayscale just to further simplify\n         * the number of computations.\n         */\n        img = color.greyscale(img);\n        const vals = [];\n        for (let x = 0; x < img.bitmap.width; x++) {\n            const row = [];\n            for (let y = 0; y < img.bitmap.height; y++) {\n                row[y] = intToRGBA(img.getPixelColor(x, y)).b;\n            }\n            vals[x] = row;\n        }\n        /* 3. Compute the DCT.\n         * The DCT separates the image into a collection of frequencies\n         * and scalars. While JPEG uses an 8x8 DCT, this algorithm uses\n         * a 32x32 DCT.\n         */\n        const dctVals = applyDCT(vals, this.size);\n        /* 4. Reduce the DCT.\n         * This is the magic step. While the DCT is 32x32, just keep the\n         * top-left 8x8. Those represent the lowest frequencies in the\n         * picture.\n         */\n        /* 5. Compute the average value.\n         * Like the Average Hash, compute the mean DCT value (using only\n         * the 8x8 DCT low-frequency values and excluding the first term\n         * since the DC coefficient can be significantly different from\n         * the other values and will throw off the average).\n         */\n        let total = 0;\n        for (let x = 0; x < this.smallerSize; x++) {\n            for (let y = 0; y < this.smallerSize; y++) {\n                total += dctVals[x][y];\n            }\n        }\n        const avg = total / (this.smallerSize * this.smallerSize);\n        /* 6. Further reduce the DCT.\n         * This is the magic step. Set the 64 hash bits to 0 or 1\n         * depending on whether each of the 64 DCT values is above or\n         * below the average value. The result doesn't tell us the\n         * actual low frequencies; it just tells us the very-rough\n         * relative scale of the frequencies to the mean. The result\n         * will not vary as long as the overall structure of the image\n         * remains the same; this can survive gamma and color histogram\n         * adjustments without a problem.\n         */\n        let hash = \"\";\n        for (let x = 0; x < this.smallerSize; x++) {\n            for (let y = 0; y < this.smallerSize; y++) {\n                hash += dctVals[x][y] > avg ? \"1\" : \"0\";\n            }\n        }\n        return hash;\n    }\n}\n// DCT function stolen from http://stackoverflow.com/questions/4240490/problems-with-dct-and-idct-algorithm-in-java\n/**\n Convert a 32-bit integer color value to an RGBA object.\n */\nfunction intToRGBA(i) {\n    const a = i & 0xff;\n    i >>>= 8;\n    const b = i & 0xff;\n    i >>>= 8;\n    const g = i & 0xff;\n    i >>>= 8;\n    const r = i & 0xff;\n    return { r, g, b, a };\n}\nconst c = [];\nfunction initCoefficients(size) {\n    for (let i = 1; i < size; i++) {\n        c[i] = 1;\n    }\n    c[0] = 1 / Math.sqrt(2.0);\n}\nfunction applyDCT(f, size) {\n    const N = size;\n    const F = [];\n    for (let u = 0; u < N; u++) {\n        const row = [];\n        for (let v = 0; v < N; v++) {\n            let sum = 0;\n            for (let i = 0; i < N; i++) {\n                for (let j = 0; j < N; j++) {\n                    sum +=\n                        Math.cos(((2 * i + 1) / (2.0 * N)) * u * Math.PI) *\n                            Math.cos(((2 * j + 1) / (2.0 * N)) * v * Math.PI) *\n                            f[i][j];\n                }\n            }\n            sum *= (c[u] * c[v]) / 4;\n            row[v] = sum;\n            F[u] = row;\n        }\n    }\n    return F;\n}\nexport default ImagePHash;\n//# sourceMappingURL=phash.js.map","import anyBase from \"any-base\";\nimport ImagePHash from \"./phash.js\";\n// an array storing the maximum string length of hashes at various bases\n// 0 and 1 do not exist as possible hash lengths\n// prettier-ignore\nconst alphabet = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_\";\n// an array storing the maximum string length of hashes at various bases\n// 0 and 1 do not exist as possible hash lengths\nconst maxHashLength = [NaN, NaN];\nfor (let i = 2; i < 65; i++) {\n    const maxHash = anyBase(anyBase.BIN, alphabet.slice(0, i))(new Array(64 + 1).join(\"1\"));\n    maxHashLength.push(maxHash.length);\n}\nexport const methods = {\n    /**\n     * Calculates the perceptual hash\n     * @returns the perceptual hash\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.hash();\n     * ```\n     */\n    pHash(image) {\n        const pHash = new ImagePHash();\n        return pHash.getHash(image);\n    },\n    /**\n     * Generates a perceptual hash of the image <https://en.wikipedia.org/wiki/Perceptual_hashing>. And pads the string. Can configure base.\n     * @param base A number between 2 and 64 representing the base for the hash (e.g. 2 is binary, 10 is decimal, 16 is hex, 64 is base 64). Defaults to 64.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.hash(2); // binary\n     * image.hash(64); // base 64\n     * ```\n     */\n    hash(image, base = 64) {\n        if (base < 2 || base > 64) {\n            throw new Error(\"base must be a number between 2 and 64\");\n        }\n        const subAlphabet = alphabet.slice(0, base);\n        const pHash = this.pHash(image);\n        const maxLength = maxHashLength[base];\n        return anyBase(anyBase.BIN, subAlphabet)(pHash).padStart(maxLength, \"0\");\n    },\n    /**\n     * Calculates the hamming distance of the current image and a hash based on their perceptual hash\n     * @param compareHash hash to compare to\n     * @returns  a number ranging from 0 to 1, 0 means they are believed to be identical\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.distanceFromHash(image.pHash());\n     * ```\n     */\n    distanceFromHash(image, compareHash) {\n        const pHash = new ImagePHash();\n        const currentHash = pHash.getHash(image);\n        return pHash.distance(currentHash, compareHash);\n    },\n};\n/**\n * Calculates the hamming distance of two images based on their perceptual hash\n * @param img1 A Jimp image to compare\n * @param img2 A Jimp image to compare\n * @returns A number ranging from 0 to 1, 0 means they are believed to be identical\n * @example\n * ```ts\n * import { Jimp, distance } from \"jimp\";\n *\n * const image1 = await Jimp.read(\"test/image.png\");\n * const image2 = await Jimp.read(\"test/image.png\");\n *\n * distance(image1, image2); // 0.5\n * ```\n */\nexport function distance(img1, img2) {\n    const phash = new ImagePHash();\n    const hash1 = phash.getHash(img1);\n    const hash2 = phash.getHash(img2);\n    return phash.distance(hash1, hash2);\n}\n/**\n * Calculates the hamming distance of two images based on their perceptual hash\n * @param hash1 A pHash\n * @param hash2 A pHash\n * @returns A number ranging from 0 to 1, 0 means they are believed to be identical\n * @example\n * ```ts\n * import { Jimp, compareHashes } from \"jimp\";\n *\n * const image1 = await Jimp.read(\"test/image.png\");\n * const image2 = await Jimp.read(\"test/image.png\");\n *\n * compareHashes(image1.pHash(), image2.pHash()); // 0.5\n * ```\n */\nexport function compareHashes(hash1, hash2) {\n    const phash = new ImagePHash();\n    return phash.distance(hash1, hash2);\n}\n//# sourceMappingURL=index.js.map","import { JimpClassSchema } from \"@jimp/types\";\nimport { z } from \"zod\";\nconst MaskOptionsObjectSchema = z.object({\n    src: JimpClassSchema,\n    /** the x position to draw the image */\n    x: z.number().optional(),\n    /** the y position to draw the image */\n    y: z.number().optional(),\n});\nconst MaskOptionsSchema = z.union([JimpClassSchema, MaskOptionsObjectSchema]);\nexport const methods = {\n    /**\n     * Masks a source image on to this image using average pixel colour. A completely black pixel on the mask will turn a pixel in the image completely transparent.\n     * @param src the source Jimp instance\n     * @param x the horizontal position to blit the image\n     * @param y the vertical position to blit the image\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     * const mask = await Jimp.read(\"test/mask.png\");\n     *\n     * image.mask(mask);\n     * ```\n     */\n    mask(image, options) {\n        MaskOptionsSchema.parse(options);\n        let src;\n        let x;\n        let y;\n        if (\"bitmap\" in options) {\n            src = options;\n            x = 0;\n            y = 0;\n        }\n        else {\n            src = options.src;\n            x = options.x ?? 0;\n            y = options.y ?? 0;\n        }\n        // round input\n        x = Math.round(x);\n        y = Math.round(y);\n        const w = image.bitmap.width;\n        const h = image.bitmap.height;\n        src.scan(function (sx, sy, idx) {\n            const destX = x + sx;\n            const destY = y + sy;\n            if (destX >= 0 && destY >= 0 && destX < w && destY < h) {\n                const dstIdx = image.getPixelIndex(destX, destY);\n                const { data } = src.bitmap;\n                const avg = (data[idx + 0] + data[idx + 1] + data[idx + 2]) / 3;\n                image.bitmap.data[dstIdx + 3] *= avg / 255;\n            }\n        });\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","export function measureText(font, text) {\n    let x = 0;\n    for (let i = 0; i < text.length; i++) {\n        const char = text[i];\n        const fontChar = font.chars[char];\n        if (fontChar) {\n            const fontKerning = font.kernings[char];\n            const nextChar = text[i + 1];\n            const kerning = fontKerning && nextChar && fontKerning[nextChar]\n                ? fontKerning[nextChar] || 0\n                : 0;\n            x += (fontChar.xadvance || 0) + kerning;\n        }\n    }\n    return x;\n}\nexport function splitLines(font, text, maxWidth) {\n    const words = text.replace(/[\\r\\n]+/g, \" \\n\").split(\" \");\n    const lines = [];\n    let currentLine = [];\n    let longestLine = 0;\n    words.forEach((word) => {\n        const wordWidth = measureText(font, word + (words.length > 1 ? \" \" : \"\"));\n        // If a word is longer than the allowable width we need to split it across lines.\n        if (wordWidth > maxWidth) {\n            const characterIterator = word[Symbol.iterator]();\n            let current = \"\";\n            for (const char of characterIterator) {\n                const nextLine = [...currentLine, current + char].join(\" \");\n                const length = measureText(font, nextLine);\n                if (length < maxWidth) {\n                    current += char;\n                }\n                else if (length > maxWidth) {\n                    lines.push([...currentLine, current]);\n                    currentLine = [];\n                    current = char;\n                }\n                else {\n                    lines.push([...currentLine, current + char]);\n                    currentLine = [];\n                    current = \"\";\n                }\n            }\n            return;\n        }\n        const line = [...currentLine, word].join(\" \");\n        const length = measureText(font, line);\n        if (length <= maxWidth && !word.includes(\"\\n\")) {\n            if (length > longestLine) {\n                longestLine = length;\n            }\n            currentLine.push(word);\n        }\n        else {\n            lines.push(currentLine);\n            currentLine = [word.replace(\"\\n\", \"\")];\n        }\n    });\n    lines.push(currentLine);\n    return {\n        lines,\n        longestLine,\n    };\n}\nexport function measureTextHeight(font, text, maxWidth) {\n    const { lines } = splitLines(font, text, maxWidth);\n    return lines.length * font.common.lineHeight;\n}\n//# sourceMappingURL=measure-text.js.map","import { HorizontalAlign, VerticalAlign } from \"@jimp/core\";\nimport { methods as blitMethods } from \"@jimp/plugin-blit\";\nimport { z } from \"zod\";\nimport { measureText, measureTextHeight, splitLines } from \"./measure-text.js\";\nexport { measureText, measureTextHeight } from \"./measure-text.js\";\nexport * from \"./types.js\";\nconst PrintOptionsSchema = z.object({\n    /** the x position to draw the image */\n    x: z.number(),\n    /** the y position to draw the image */\n    y: z.number(),\n    /** the text to print */\n    text: z.union([\n        z.union([z.string(), z.number()]),\n        z.object({\n            text: z.union([z.string(), z.number()]),\n            alignmentX: z.nativeEnum(HorizontalAlign).optional(),\n            alignmentY: z.nativeEnum(VerticalAlign).optional(),\n        }),\n    ]),\n    /** the boundary width to draw in */\n    maxWidth: z.number().optional(),\n    /** the boundary height to draw in */\n    maxHeight: z.number().optional(),\n    /** a callback for when complete that ahs the end co-ordinates of the text */\n    cb: z\n        .function(z.tuple([z.object({ x: z.number(), y: z.number() })]))\n        .optional(),\n});\nfunction xOffsetBasedOnAlignment(font, line, maxWidth, alignment) {\n    if (alignment === HorizontalAlign.LEFT) {\n        return 0;\n    }\n    if (alignment === HorizontalAlign.CENTER) {\n        return (maxWidth - measureText(font, line)) / 2;\n    }\n    return maxWidth - measureText(font, line);\n}\nfunction drawCharacter(image, font, x, y, char) {\n    if (char.width > 0 && char.height > 0) {\n        const characterPage = font.pages[char.page];\n        if (characterPage) {\n            image = blitMethods.blit(image, {\n                src: characterPage,\n                x: x + char.xoffset,\n                y: y + char.yoffset,\n                srcX: char.x,\n                srcY: char.y,\n                srcW: char.width,\n                srcH: char.height,\n            });\n        }\n    }\n    return image;\n}\nfunction printText(image, font, x, y, text, defaultCharWidth) {\n    for (let i = 0; i < text.length; i++) {\n        const stringChar = text[i];\n        let char;\n        if (font.chars[stringChar]) {\n            char = stringChar;\n        }\n        else if (/\\s/.test(stringChar)) {\n            char = \"\";\n        }\n        else {\n            char = \"?\";\n        }\n        const fontChar = font.chars[char] || { xadvance: undefined };\n        const fontKerning = font.kernings[char];\n        if (fontChar) {\n            drawCharacter(image, font, x, y, fontChar);\n        }\n        const nextChar = text[i + 1];\n        const kerning = fontKerning && nextChar && fontKerning[nextChar]\n            ? fontKerning[nextChar] || 0\n            : 0;\n        x += kerning + (fontChar.xadvance || defaultCharWidth);\n    }\n}\nexport const methods = {\n    /**\n     * Draws a text on a image on a given boundary\n     * @param font a bitmap font loaded from `Jimp.loadFont` command\n     * @param x the x position to start drawing the text\n     * @param y the y position to start drawing the text\n     * @param text the text to draw (string or object with `text`, `alignmentX`, and/or `alignmentY`)\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     * const font = await Jimp.loadFont(Jimp.FONT_SANS_32_BLACK);\n     *\n     * image.print({ font, x: 10, y: 10, text: \"Hello world!\" });\n     * ```\n     */\n    print(image, { font, ...options }) {\n        let { \n        // eslint-disable-next-line prefer-const\n        x, y, text, \n        // eslint-disable-next-line prefer-const\n        maxWidth = Infinity, \n        // eslint-disable-next-line prefer-const\n        maxHeight = Infinity, \n        // eslint-disable-next-line prefer-const\n        cb = () => { }, } = PrintOptionsSchema.parse(options);\n        let alignmentX;\n        let alignmentY;\n        if (typeof text === \"object\" &&\n            text.text !== null &&\n            text.text !== undefined) {\n            alignmentX = text.alignmentX || HorizontalAlign.LEFT;\n            alignmentY = text.alignmentY || VerticalAlign.TOP;\n            ({ text } = text);\n        }\n        else {\n            alignmentX = HorizontalAlign.LEFT;\n            alignmentY = VerticalAlign.TOP;\n            text = text.toString();\n        }\n        if (typeof text === \"number\") {\n            text = text.toString();\n        }\n        if (maxHeight !== Infinity && alignmentY === VerticalAlign.BOTTOM) {\n            y += maxHeight - measureTextHeight(font, text, maxWidth);\n        }\n        else if (maxHeight !== Infinity && alignmentY === VerticalAlign.MIDDLE) {\n            y += maxHeight / 2 - measureTextHeight(font, text, maxWidth) / 2;\n        }\n        const defaultCharWidth = Object.entries(font.chars).find((c) => c[1].xadvance)?.[1].xadvance;\n        if (typeof defaultCharWidth !== \"number\") {\n            throw new Error(\"Could not find default character width\");\n        }\n        const { lines, longestLine } = splitLines(font, text, maxWidth);\n        lines.forEach((line) => {\n            const lineString = line.join(\" \");\n            const alignmentWidth = xOffsetBasedOnAlignment(font, lineString, maxWidth, alignmentX);\n            printText(image, font, x + alignmentWidth, y, lineString, defaultCharWidth);\n            y += font.common.lineHeight;\n        });\n        cb.bind(image)({ x: x + longestLine, y });\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","import { ResizeStrategy, methods as resizeMethods } from \"@jimp/plugin-resize\";\nimport { clone } from \"@jimp/utils\";\nimport { composite } from \"@jimp/core\";\nimport { methods as cropMethods } from \"@jimp/plugin-crop\";\nimport { z } from \"zod\";\nconst RotateOptionsSchema = z.union([\n    z.number(),\n    z.object({\n        /** the number of degrees to rotate the image by */\n        deg: z.number(),\n        /** resize mode or a boolean, if false then the width and height of the image will not be changed */\n        mode: z.union([z.boolean(), z.nativeEnum(ResizeStrategy)]).optional(),\n    }),\n]);\n/** function to translate the x, y coordinate to the index of the pixel in the buffer */\nfunction createIdxTranslationFunction(w) {\n    return function (x, y) {\n        return (y * w + x) << 2;\n    };\n}\n/**\n * Rotates an image counter-clockwise by multiple of 90 degrees. NB: 'this' must be a Jimp object.\n *\n * This function is based on matrix rotation. Check this to get an initial idea how it works: https://stackoverflow.com/a/8664879/10561909\n *\n * @param deg the number of degrees to rotate the image by, it should be a multiple of 90\n */\nfunction matrixRotate(image, deg) {\n    if (Math.abs(deg) % 90 !== 0) {\n        throw new Error(\"Unsupported matrix rotation degree\");\n    }\n    const w = image.bitmap.width;\n    const h = image.bitmap.height;\n    // decide which rotation angle to use\n    let angle;\n    switch (deg) {\n        // 90 degree & -270 degree are same\n        case 90:\n        case -270:\n            angle = 90;\n            break;\n        case 180:\n        case -180:\n            angle = 180;\n            break;\n        case 270:\n        case -90:\n            angle = -90;\n            break;\n        default:\n            throw new Error(\"Unsupported matrix rotation degree\");\n    }\n    // After this switch block, angle will be 90, 180 or -90\n    // calculate the new width and height\n    const nW = angle === 180 ? w : h;\n    const nH = angle === 180 ? h : w;\n    const dstBuffer = Buffer.alloc(image.bitmap.data.length);\n    const srcIdxFunction = createIdxTranslationFunction(w);\n    const dstIdxFunction = createIdxTranslationFunction(nW);\n    for (let x = 0; x < w; x++) {\n        for (let y = 0; y < h; y++) {\n            const srcIdx = srcIdxFunction(x, y);\n            const pixelRGBA = image.bitmap.data.readUInt32BE(srcIdx);\n            let dstIdx;\n            switch (angle) {\n                case 90:\n                    dstIdx = dstIdxFunction(y, w - x - 1);\n                    break;\n                case -90:\n                    dstIdx = dstIdxFunction(h - y - 1, x);\n                    break;\n                case 180:\n                    dstIdx = dstIdxFunction(w - x - 1, h - y - 1);\n                    break;\n                default:\n                    throw new Error(\"Unsupported matrix rotation angle\");\n            }\n            dstBuffer.writeUInt32BE(pixelRGBA, dstIdx);\n        }\n    }\n    image.bitmap.data = dstBuffer;\n    image.bitmap.width = nW;\n    image.bitmap.height = nH;\n}\nfunction createTranslationFunction(deltaX, deltaY) {\n    return function (x, y) {\n        return {\n            x: x + deltaX,\n            y: y + deltaY,\n        };\n    };\n}\n/**\n * Rotates an image counter-clockwise by an arbitrary number of degrees. NB: 'this' must be a Jimp object.\n * @param {number} deg the number of degrees to rotate the image by\n */\nfunction advancedRotate(image, deg, mode) {\n    const rad = (deg * Math.PI) / 180;\n    const cosine = Math.cos(rad);\n    const sine = Math.sin(rad);\n    // the final width and height will change if resize == true\n    let w = image.bitmap.width;\n    let h = image.bitmap.height;\n    if (mode === true || typeof mode === \"string\") {\n        // resize the image to it maximum dimension and blit the existing image\n        // onto the center so that when it is rotated the image is kept in bounds\n        // http://stackoverflow.com/questions/3231176/how-to-get-size-of-a-rotated-rectangle\n        // Plus 1 border pixel to ensure to show all rotated result for some cases.\n        w =\n            Math.ceil(Math.abs(image.bitmap.width * cosine) +\n                Math.abs(image.bitmap.height * sine)) + 1;\n        h =\n            Math.ceil(Math.abs(image.bitmap.width * sine) +\n                Math.abs(image.bitmap.height * cosine)) + 1;\n        // Ensure destination to have even size to a better result.\n        if (w % 2 !== 0) {\n            w++;\n        }\n        if (h % 2 !== 0) {\n            h++;\n        }\n        const c = clone(image);\n        image.scan((_, __, idx) => {\n            image.bitmap.data.writeUInt32BE(image.background, idx);\n        });\n        const max = Math.max(w, h, image.bitmap.width, image.bitmap.height);\n        image = resizeMethods.resize(image, {\n            h: max,\n            w: max,\n            mode: mode === true ? undefined : mode,\n        });\n        image = composite(image, c, image.bitmap.width / 2 - c.bitmap.width / 2, image.bitmap.height / 2 - c.bitmap.height / 2);\n    }\n    const bW = image.bitmap.width;\n    const bH = image.bitmap.height;\n    const dstBuffer = Buffer.alloc(image.bitmap.data.length);\n    const translate2Cartesian = createTranslationFunction(-(bW / 2), -(bH / 2));\n    const translate2Screen = createTranslationFunction(bW / 2 + 0.5, bH / 2 + 0.5);\n    for (let y = 1; y <= bH; y++) {\n        for (let x = 1; x <= bW; x++) {\n            const cartesian = translate2Cartesian(x, y);\n            const source = translate2Screen(cosine * cartesian.x - sine * cartesian.y, cosine * cartesian.y + sine * cartesian.x);\n            const dstIdx = (bW * (y - 1) + x - 1) << 2;\n            if (source.x >= 0 && source.x < bW && source.y >= 0 && source.y < bH) {\n                const srcIdx = ((bW * (source.y | 0) + source.x) | 0) << 2;\n                const pixelRGBA = image.bitmap.data.readUInt32BE(srcIdx);\n                dstBuffer.writeUInt32BE(pixelRGBA, dstIdx);\n            }\n            else {\n                // reset off-image pixels\n                dstBuffer.writeUInt32BE(image.background, dstIdx);\n            }\n        }\n    }\n    image.bitmap.data = dstBuffer;\n    if (mode === true || typeof mode === \"string\") {\n        // now crop the image to the final size\n        const x = Math.max(bW / 2 - w / 2, 0);\n        const y = Math.max(bH / 2 - h / 2, 0);\n        image = cropMethods.crop(image, { x, y, w, h });\n    }\n}\nexport const methods = {\n    /**\n     * Rotates the image counter-clockwise by a number of degrees. By default the width and height of the image will be resized appropriately.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.rotate(90);\n     * ```\n     */\n    rotate(image, options) {\n        const parsed = RotateOptionsSchema.parse(options);\n        const actualOptions = typeof parsed === \"number\" ? { deg: parsed } : parsed;\n        const { mode = true } = actualOptions;\n        let { deg } = actualOptions;\n        // No need to do extra rotation\n        deg %= 360;\n        // no rotation for 0, 360, -360, 720, -720, ...\n        if (deg % 360 === 0) {\n            return image;\n        }\n        // use matrixRotate if the angle is a multiple of 90 degrees (eg: 180 or -90) and resize is allowed or not needed.\n        const matrixRotateAllowed = deg % 90 === 0 &&\n            (mode || image.bitmap.width === image.bitmap.height || deg % 180 === 0);\n        if (matrixRotateAllowed) {\n            matrixRotate(image, deg);\n        }\n        else {\n            advancedRotate(image, deg, mode);\n        }\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","import { limit255 } from \"@jimp/utils\";\nimport { methods as color } from \"@jimp/plugin-color\";\nimport { z } from \"zod\";\nconst ThresholdOptionsSchema = z.object({\n    /** A number auto limited between 0 - 255 */\n    max: z.number().min(0).max(255),\n    /** A number auto limited between 0 - 255 (default 255)  */\n    replace: z.number().min(0).max(255).optional(),\n    /** A boolean whether to apply greyscale beforehand (default true)  */\n    autoGreyscale: z.boolean().optional(),\n});\nexport const methods = {\n    /**\n     * Applies a minimum color threshold to a grayscale image.\n     * Converts image to grayscale by default.\n     * @example\n     * ```ts\n     * import { Jimp } from \"jimp\";\n     *\n     * const image = await Jimp.read(\"test/image.png\");\n     *\n     * image.threshold({ max: 150 });\n     * ```\n     */\n    threshold(image, options) {\n        let { max, replace = 255, \n        // eslint-disable-next-line prefer-const\n        autoGreyscale = true, } = ThresholdOptionsSchema.parse(options);\n        max = limit255(max);\n        replace = limit255(replace);\n        if (autoGreyscale) {\n            color.greyscale(image);\n        }\n        image.scan((_, __, idx) => {\n            const grey = image.bitmap.data[idx] < max ? image.bitmap.data[idx] : replace;\n            image.bitmap.data[idx] = grey;\n            image.bitmap.data[idx + 1] = grey;\n            image.bitmap.data[idx + 2] = grey;\n        });\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\n\n// src/constants/index.ts\nvar constants_exports = {};\n__export(constants_exports, {\n  bt709: () => bt709_exports\n});\n\n// src/constants/bt709.ts\nvar bt709_exports = {};\n__export(bt709_exports, {\n  Y: () => Y,\n  x: () => x,\n  y: () => y\n});\nvar Y = /* @__PURE__ */ ((Y2) => {\n  Y2[Y2[\"RED\"] = 0.2126] = \"RED\";\n  Y2[Y2[\"GREEN\"] = 0.7152] = \"GREEN\";\n  Y2[Y2[\"BLUE\"] = 0.0722] = \"BLUE\";\n  Y2[Y2[\"WHITE\"] = 1] = \"WHITE\";\n  return Y2;\n})(Y || {});\nvar x = /* @__PURE__ */ ((x2) => {\n  x2[x2[\"RED\"] = 0.64] = \"RED\";\n  x2[x2[\"GREEN\"] = 0.3] = \"GREEN\";\n  x2[x2[\"BLUE\"] = 0.15] = \"BLUE\";\n  x2[x2[\"WHITE\"] = 0.3127] = \"WHITE\";\n  return x2;\n})(x || {});\nvar y = /* @__PURE__ */ ((y2) => {\n  y2[y2[\"RED\"] = 0.33] = \"RED\";\n  y2[y2[\"GREEN\"] = 0.6] = \"GREEN\";\n  y2[y2[\"BLUE\"] = 0.06] = \"BLUE\";\n  y2[y2[\"WHITE\"] = 0.329] = \"WHITE\";\n  return y2;\n})(y || {});\n\n// src/conversion/index.ts\nvar conversion_exports = {};\n__export(conversion_exports, {\n  lab2rgb: () => lab2rgb,\n  lab2xyz: () => lab2xyz,\n  rgb2hsl: () => rgb2hsl,\n  rgb2lab: () => rgb2lab,\n  rgb2xyz: () => rgb2xyz,\n  xyz2lab: () => xyz2lab,\n  xyz2rgb: () => xyz2rgb\n});\n\n// src/conversion/rgb2xyz.ts\nfunction correctGamma(n) {\n  return n > 0.04045 ? ((n + 0.055) / 1.055) ** 2.4 : n / 12.92;\n}\nfunction rgb2xyz(r, g, b) {\n  r = correctGamma(r / 255);\n  g = correctGamma(g / 255);\n  b = correctGamma(b / 255);\n  return {\n    x: r * 0.4124 + g * 0.3576 + b * 0.1805,\n    y: r * 0.2126 + g * 0.7152 + b * 0.0722,\n    z: r * 0.0193 + g * 0.1192 + b * 0.9505\n  };\n}\n\n// src/utils/arithmetic.ts\nvar arithmetic_exports = {};\n__export(arithmetic_exports, {\n  degrees2radians: () => degrees2radians,\n  inRange0to255: () => inRange0to255,\n  inRange0to255Rounded: () => inRange0to255Rounded,\n  intInRange: () => intInRange,\n  max3: () => max3,\n  min3: () => min3,\n  stableSort: () => stableSort\n});\nfunction degrees2radians(n) {\n  return n * (Math.PI / 180);\n}\nfunction max3(a, b, c) {\n  let m = a;\n  if (m < b)\n    m = b;\n  if (m < c)\n    m = c;\n  return m;\n}\nfunction min3(a, b, c) {\n  let m = a;\n  if (m > b)\n    m = b;\n  if (m > c)\n    m = c;\n  return m;\n}\nfunction intInRange(value, low, high) {\n  if (value > high)\n    value = high;\n  if (value < low)\n    value = low;\n  return value | 0;\n}\nfunction inRange0to255Rounded(n) {\n  n = Math.round(n);\n  if (n > 255)\n    n = 255;\n  else if (n < 0)\n    n = 0;\n  return n;\n}\nfunction inRange0to255(n) {\n  if (n > 255)\n    n = 255;\n  else if (n < 0)\n    n = 0;\n  return n;\n}\nfunction stableSort(arrayToSort, callback) {\n  const type = typeof arrayToSort[0];\n  let sorted;\n  if (type === \"number\" || type === \"string\") {\n    const ord = /* @__PURE__ */ Object.create(null);\n    for (let i = 0, l = arrayToSort.length; i < l; i++) {\n      const val = arrayToSort[i];\n      if (ord[val] || ord[val] === 0)\n        continue;\n      ord[val] = i;\n    }\n    sorted = arrayToSort.sort((a, b) => callback(a, b) || ord[a] - ord[b]);\n  } else {\n    const ord2 = arrayToSort.slice(0);\n    sorted = arrayToSort.sort((a, b) => callback(a, b) || ord2.indexOf(a) - ord2.indexOf(b));\n  }\n  return sorted;\n}\n\n// src/conversion/rgb2hsl.ts\nfunction rgb2hsl(r, g, b) {\n  const min = min3(r, g, b);\n  const max = max3(r, g, b);\n  const delta = max - min;\n  const l = (min + max) / 510;\n  let s = 0;\n  if (l > 0 && l < 1)\n    s = delta / (l < 0.5 ? max + min : 510 - max - min);\n  let h = 0;\n  if (delta > 0) {\n    if (max === r) {\n      h = (g - b) / delta;\n    } else if (max === g) {\n      h = 2 + (b - r) / delta;\n    } else {\n      h = 4 + (r - g) / delta;\n    }\n    h *= 60;\n    if (h < 0)\n      h += 360;\n  }\n  return { h, s, l };\n}\n\n// src/conversion/xyz2lab.ts\nvar refX = 0.95047;\nvar refY = 1;\nvar refZ = 1.08883;\nfunction pivot(n) {\n  return n > 8856e-6 ? n ** (1 / 3) : 7.787 * n + 16 / 116;\n}\nfunction xyz2lab(x2, y2, z) {\n  x2 = pivot(x2 / refX);\n  y2 = pivot(y2 / refY);\n  z = pivot(z / refZ);\n  if (116 * y2 - 16 < 0)\n    throw new Error(\"xxx\");\n  return {\n    L: Math.max(0, 116 * y2 - 16),\n    a: 500 * (x2 - y2),\n    b: 200 * (y2 - z)\n  };\n}\n\n// src/conversion/rgb2lab.ts\nfunction rgb2lab(r, g, b) {\n  const xyz = rgb2xyz(r, g, b);\n  return xyz2lab(xyz.x, xyz.y, xyz.z);\n}\n\n// src/conversion/lab2xyz.ts\nvar refX2 = 0.95047;\nvar refY2 = 1;\nvar refZ2 = 1.08883;\nfunction pivot2(n) {\n  return n > 0.206893034 ? n ** 3 : (n - 16 / 116) / 7.787;\n}\nfunction lab2xyz(L, a, b) {\n  const y2 = (L + 16) / 116;\n  const x2 = a / 500 + y2;\n  const z = y2 - b / 200;\n  return {\n    x: refX2 * pivot2(x2),\n    y: refY2 * pivot2(y2),\n    z: refZ2 * pivot2(z)\n  };\n}\n\n// src/conversion/xyz2rgb.ts\nfunction correctGamma2(n) {\n  return n > 31308e-7 ? 1.055 * n ** (1 / 2.4) - 0.055 : 12.92 * n;\n}\nfunction xyz2rgb(x2, y2, z) {\n  const r = correctGamma2(x2 * 3.2406 + y2 * -1.5372 + z * -0.4986);\n  const g = correctGamma2(x2 * -0.9689 + y2 * 1.8758 + z * 0.0415);\n  const b = correctGamma2(x2 * 0.0557 + y2 * -0.204 + z * 1.057);\n  return {\n    r: inRange0to255Rounded(r * 255),\n    g: inRange0to255Rounded(g * 255),\n    b: inRange0to255Rounded(b * 255)\n  };\n}\n\n// src/conversion/lab2rgb.ts\nfunction lab2rgb(L, a, b) {\n  const xyz = lab2xyz(L, a, b);\n  return xyz2rgb(xyz.x, xyz.y, xyz.z);\n}\n\n// src/distance/index.ts\nvar distance_exports = {};\n__export(distance_exports, {\n  AbstractDistanceCalculator: () => AbstractDistanceCalculator,\n  AbstractEuclidean: () => AbstractEuclidean,\n  AbstractManhattan: () => AbstractManhattan,\n  CIE94GraphicArts: () => CIE94GraphicArts,\n  CIE94Textiles: () => CIE94Textiles,\n  CIEDE2000: () => CIEDE2000,\n  CMetric: () => CMetric,\n  Euclidean: () => Euclidean,\n  EuclideanBT709: () => EuclideanBT709,\n  EuclideanBT709NoAlpha: () => EuclideanBT709NoAlpha,\n  Manhattan: () => Manhattan,\n  ManhattanBT709: () => ManhattanBT709,\n  ManhattanNommyde: () => ManhattanNommyde,\n  PNGQuant: () => PNGQuant\n});\n\n// src/distance/distanceCalculator.ts\nvar AbstractDistanceCalculator = class {\n  constructor() {\n    __publicField(this, \"_maxDistance\");\n    __publicField(this, \"_whitePoint\");\n    this._setDefaults();\n    this.setWhitePoint(255, 255, 255, 255);\n  }\n  setWhitePoint(r, g, b, a) {\n    this._whitePoint = {\n      r: r > 0 ? 255 / r : 0,\n      g: g > 0 ? 255 / g : 0,\n      b: b > 0 ? 255 / b : 0,\n      a: a > 0 ? 255 / a : 0\n    };\n    this._maxDistance = this.calculateRaw(r, g, b, a, 0, 0, 0, 0);\n  }\n  calculateNormalized(colorA, colorB) {\n    return this.calculateRaw(colorA.r, colorA.g, colorA.b, colorA.a, colorB.r, colorB.g, colorB.b, colorB.a) / this._maxDistance;\n  }\n};\n\n// src/distance/cie94.ts\nvar AbstractCIE94 = class extends AbstractDistanceCalculator {\n  calculateRaw(r1, g1, b1, a1, r2, g2, b2, a2) {\n    const lab1 = rgb2lab(inRange0to255(r1 * this._whitePoint.r), inRange0to255(g1 * this._whitePoint.g), inRange0to255(b1 * this._whitePoint.b));\n    const lab2 = rgb2lab(inRange0to255(r2 * this._whitePoint.r), inRange0to255(g2 * this._whitePoint.g), inRange0to255(b2 * this._whitePoint.b));\n    const dL = lab1.L - lab2.L;\n    const dA = lab1.a - lab2.a;\n    const dB = lab1.b - lab2.b;\n    const c1 = Math.sqrt(lab1.a * lab1.a + lab1.b * lab1.b);\n    const c2 = Math.sqrt(lab2.a * lab2.a + lab2.b * lab2.b);\n    const dC = c1 - c2;\n    let deltaH = dA * dA + dB * dB - dC * dC;\n    deltaH = deltaH < 0 ? 0 : Math.sqrt(deltaH);\n    const dAlpha = (a2 - a1) * this._whitePoint.a * this._kA;\n    return Math.sqrt((dL / this._Kl) ** 2 + (dC / (1 + this._K1 * c1)) ** 2 + (deltaH / (1 + this._K2 * c1)) ** 2 + dAlpha ** 2);\n  }\n};\nvar CIE94Textiles = class extends AbstractCIE94 {\n  _setDefaults() {\n    this._Kl = 2;\n    this._K1 = 0.048;\n    this._K2 = 0.014;\n    this._kA = 0.25 * 50 / 255;\n  }\n};\nvar CIE94GraphicArts = class extends AbstractCIE94 {\n  _setDefaults() {\n    this._Kl = 1;\n    this._K1 = 0.045;\n    this._K2 = 0.015;\n    this._kA = 0.25 * 100 / 255;\n  }\n};\n\n// src/distance/ciede2000.ts\nvar _CIEDE2000 = class extends AbstractDistanceCalculator {\n  _setDefaults() {\n  }\n  static _calculatehp(b, ap) {\n    const hp = Math.atan2(b, ap);\n    if (hp >= 0)\n      return hp;\n    return hp + _CIEDE2000._deg360InRad;\n  }\n  static _calculateRT(ahp, aCp) {\n    const aCp_to_7 = aCp ** 7;\n    const R_C = 2 * Math.sqrt(aCp_to_7 / (aCp_to_7 + _CIEDE2000._pow25to7));\n    const delta_theta = _CIEDE2000._deg30InRad * Math.exp(-(((ahp - _CIEDE2000._deg275InRad) / _CIEDE2000._deg25InRad) ** 2));\n    return -Math.sin(2 * delta_theta) * R_C;\n  }\n  static _calculateT(ahp) {\n    return 1 - 0.17 * Math.cos(ahp - _CIEDE2000._deg30InRad) + 0.24 * Math.cos(ahp * 2) + 0.32 * Math.cos(ahp * 3 + _CIEDE2000._deg6InRad) - 0.2 * Math.cos(ahp * 4 - _CIEDE2000._deg63InRad);\n  }\n  static _calculate_ahp(C1pC2p, h_bar, h1p, h2p) {\n    const hpSum = h1p + h2p;\n    if (C1pC2p === 0)\n      return hpSum;\n    if (h_bar <= _CIEDE2000._deg180InRad)\n      return hpSum / 2;\n    if (hpSum < _CIEDE2000._deg360InRad) {\n      return (hpSum + _CIEDE2000._deg360InRad) / 2;\n    }\n    return (hpSum - _CIEDE2000._deg360InRad) / 2;\n  }\n  static _calculate_dHp(C1pC2p, h_bar, h2p, h1p) {\n    let dhp;\n    if (C1pC2p === 0) {\n      dhp = 0;\n    } else if (h_bar <= _CIEDE2000._deg180InRad) {\n      dhp = h2p - h1p;\n    } else if (h2p <= h1p) {\n      dhp = h2p - h1p + _CIEDE2000._deg360InRad;\n    } else {\n      dhp = h2p - h1p - _CIEDE2000._deg360InRad;\n    }\n    return 2 * Math.sqrt(C1pC2p) * Math.sin(dhp / 2);\n  }\n  calculateRaw(r1, g1, b1, a1, r2, g2, b2, a2) {\n    const lab1 = rgb2lab(inRange0to255(r1 * this._whitePoint.r), inRange0to255(g1 * this._whitePoint.g), inRange0to255(b1 * this._whitePoint.b));\n    const lab2 = rgb2lab(inRange0to255(r2 * this._whitePoint.r), inRange0to255(g2 * this._whitePoint.g), inRange0to255(b2 * this._whitePoint.b));\n    const dA = (a2 - a1) * this._whitePoint.a * _CIEDE2000._kA;\n    const dE2 = this.calculateRawInLab(lab1, lab2);\n    return Math.sqrt(dE2 + dA * dA);\n  }\n  calculateRawInLab(Lab1, Lab2) {\n    const L1 = Lab1.L;\n    const a1 = Lab1.a;\n    const b1 = Lab1.b;\n    const L2 = Lab2.L;\n    const a2 = Lab2.a;\n    const b2 = Lab2.b;\n    const C1 = Math.sqrt(a1 * a1 + b1 * b1);\n    const C2 = Math.sqrt(a2 * a2 + b2 * b2);\n    const pow_a_C1_C2_to_7 = ((C1 + C2) / 2) ** 7;\n    const G = 0.5 * (1 - Math.sqrt(pow_a_C1_C2_to_7 / (pow_a_C1_C2_to_7 + _CIEDE2000._pow25to7)));\n    const a1p = (1 + G) * a1;\n    const a2p = (1 + G) * a2;\n    const C1p = Math.sqrt(a1p * a1p + b1 * b1);\n    const C2p = Math.sqrt(a2p * a2p + b2 * b2);\n    const C1pC2p = C1p * C2p;\n    const h1p = _CIEDE2000._calculatehp(b1, a1p);\n    const h2p = _CIEDE2000._calculatehp(b2, a2p);\n    const h_bar = Math.abs(h1p - h2p);\n    const dLp = L2 - L1;\n    const dCp = C2p - C1p;\n    const dHp = _CIEDE2000._calculate_dHp(C1pC2p, h_bar, h2p, h1p);\n    const ahp = _CIEDE2000._calculate_ahp(C1pC2p, h_bar, h1p, h2p);\n    const T = _CIEDE2000._calculateT(ahp);\n    const aCp = (C1p + C2p) / 2;\n    const aLp_minus_50_square = ((L1 + L2) / 2 - 50) ** 2;\n    const S_L = 1 + 0.015 * aLp_minus_50_square / Math.sqrt(20 + aLp_minus_50_square);\n    const S_C = 1 + 0.045 * aCp;\n    const S_H = 1 + 0.015 * T * aCp;\n    const R_T = _CIEDE2000._calculateRT(ahp, aCp);\n    const dLpSL = dLp / S_L;\n    const dCpSC = dCp / S_C;\n    const dHpSH = dHp / S_H;\n    return dLpSL ** 2 + dCpSC ** 2 + dHpSH ** 2 + R_T * dCpSC * dHpSH;\n  }\n};\nvar CIEDE2000 = _CIEDE2000;\n__publicField(CIEDE2000, \"_kA\", 0.25 * 100 / 255);\n__publicField(CIEDE2000, \"_pow25to7\", 25 ** 7);\n__publicField(CIEDE2000, \"_deg360InRad\", degrees2radians(360));\n__publicField(CIEDE2000, \"_deg180InRad\", degrees2radians(180));\n__publicField(CIEDE2000, \"_deg30InRad\", degrees2radians(30));\n__publicField(CIEDE2000, \"_deg6InRad\", degrees2radians(6));\n__publicField(CIEDE2000, \"_deg63InRad\", degrees2radians(63));\n__publicField(CIEDE2000, \"_deg275InRad\", degrees2radians(275));\n__publicField(CIEDE2000, \"_deg25InRad\", degrees2radians(25));\n\n// src/distance/cmetric.ts\nvar CMetric = class extends AbstractDistanceCalculator {\n  calculateRaw(r1, g1, b1, a1, r2, g2, b2, a2) {\n    const rmean = (r1 + r2) / 2 * this._whitePoint.r;\n    const r = (r1 - r2) * this._whitePoint.r;\n    const g = (g1 - g2) * this._whitePoint.g;\n    const b = (b1 - b2) * this._whitePoint.b;\n    const dE = ((512 + rmean) * r * r >> 8) + 4 * g * g + ((767 - rmean) * b * b >> 8);\n    const dA = (a2 - a1) * this._whitePoint.a;\n    return Math.sqrt(dE + dA * dA);\n  }\n  _setDefaults() {\n  }\n};\n\n// src/distance/euclidean.ts\nvar AbstractEuclidean = class extends AbstractDistanceCalculator {\n  calculateRaw(r1, g1, b1, a1, r2, g2, b2, a2) {\n    const dR = r2 - r1;\n    const dG = g2 - g1;\n    const dB = b2 - b1;\n    const dA = a2 - a1;\n    return Math.sqrt(this._kR * dR * dR + this._kG * dG * dG + this._kB * dB * dB + this._kA * dA * dA);\n  }\n};\nvar Euclidean = class extends AbstractEuclidean {\n  _setDefaults() {\n    this._kR = 1;\n    this._kG = 1;\n    this._kB = 1;\n    this._kA = 1;\n  }\n};\nvar EuclideanBT709 = class extends AbstractEuclidean {\n  _setDefaults() {\n    this._kR = 0.2126 /* RED */;\n    this._kG = 0.7152 /* GREEN */;\n    this._kB = 0.0722 /* BLUE */;\n    this._kA = 1;\n  }\n};\nvar EuclideanBT709NoAlpha = class extends AbstractEuclidean {\n  _setDefaults() {\n    this._kR = 0.2126 /* RED */;\n    this._kG = 0.7152 /* GREEN */;\n    this._kB = 0.0722 /* BLUE */;\n    this._kA = 0;\n  }\n};\n\n// src/distance/manhattan.ts\nvar AbstractManhattan = class extends AbstractDistanceCalculator {\n  calculateRaw(r1, g1, b1, a1, r2, g2, b2, a2) {\n    let dR = r2 - r1;\n    let dG = g2 - g1;\n    let dB = b2 - b1;\n    let dA = a2 - a1;\n    if (dR < 0)\n      dR = 0 - dR;\n    if (dG < 0)\n      dG = 0 - dG;\n    if (dB < 0)\n      dB = 0 - dB;\n    if (dA < 0)\n      dA = 0 - dA;\n    return this._kR * dR + this._kG * dG + this._kB * dB + this._kA * dA;\n  }\n};\nvar Manhattan = class extends AbstractManhattan {\n  _setDefaults() {\n    this._kR = 1;\n    this._kG = 1;\n    this._kB = 1;\n    this._kA = 1;\n  }\n};\nvar ManhattanNommyde = class extends AbstractManhattan {\n  _setDefaults() {\n    this._kR = 0.4984;\n    this._kG = 0.8625;\n    this._kB = 0.2979;\n    this._kA = 1;\n  }\n};\nvar ManhattanBT709 = class extends AbstractManhattan {\n  _setDefaults() {\n    this._kR = 0.2126 /* RED */;\n    this._kG = 0.7152 /* GREEN */;\n    this._kB = 0.0722 /* BLUE */;\n    this._kA = 1;\n  }\n};\n\n// src/distance/pngQuant.ts\nvar PNGQuant = class extends AbstractDistanceCalculator {\n  calculateRaw(r1, g1, b1, a1, r2, g2, b2, a2) {\n    const alphas = (a2 - a1) * this._whitePoint.a;\n    return this._colordifferenceCh(r1 * this._whitePoint.r, r2 * this._whitePoint.r, alphas) + this._colordifferenceCh(g1 * this._whitePoint.g, g2 * this._whitePoint.g, alphas) + this._colordifferenceCh(b1 * this._whitePoint.b, b2 * this._whitePoint.b, alphas);\n  }\n  _colordifferenceCh(x2, y2, alphas) {\n    const black = x2 - y2;\n    const white = black + alphas;\n    return black * black + white * white;\n  }\n  _setDefaults() {\n  }\n};\n\n// src/palette/index.ts\nvar palette_exports = {};\n__export(palette_exports, {\n  AbstractPaletteQuantizer: () => AbstractPaletteQuantizer,\n  ColorHistogram: () => ColorHistogram,\n  NeuQuant: () => NeuQuant,\n  NeuQuantFloat: () => NeuQuantFloat,\n  RGBQuant: () => RGBQuant,\n  WuColorCube: () => WuColorCube,\n  WuQuant: () => WuQuant\n});\n\n// src/palette/paletteQuantizer.ts\nvar AbstractPaletteQuantizer = class {\n  quantizeSync() {\n    for (const value of this.quantize()) {\n      if (value.palette) {\n        return value.palette;\n      }\n    }\n    throw new Error(\"unreachable\");\n  }\n};\n\n// src/utils/point.ts\nvar Point = class {\n  constructor() {\n    __publicField(this, \"r\");\n    __publicField(this, \"g\");\n    __publicField(this, \"b\");\n    __publicField(this, \"a\");\n    __publicField(this, \"uint32\");\n    __publicField(this, \"rgba\");\n    this.uint32 = -1 >>> 0;\n    this.r = this.g = this.b = this.a = 0;\n    this.rgba = new Array(4);\n    this.rgba[0] = 0;\n    this.rgba[1] = 0;\n    this.rgba[2] = 0;\n    this.rgba[3] = 0;\n  }\n  static createByQuadruplet(quadruplet) {\n    const point = new Point();\n    point.r = quadruplet[0] | 0;\n    point.g = quadruplet[1] | 0;\n    point.b = quadruplet[2] | 0;\n    point.a = quadruplet[3] | 0;\n    point._loadUINT32();\n    point._loadQuadruplet();\n    return point;\n  }\n  static createByRGBA(red, green, blue, alpha) {\n    const point = new Point();\n    point.r = red | 0;\n    point.g = green | 0;\n    point.b = blue | 0;\n    point.a = alpha | 0;\n    point._loadUINT32();\n    point._loadQuadruplet();\n    return point;\n  }\n  static createByUint32(uint32) {\n    const point = new Point();\n    point.uint32 = uint32 >>> 0;\n    point._loadRGBA();\n    point._loadQuadruplet();\n    return point;\n  }\n  from(point) {\n    this.r = point.r;\n    this.g = point.g;\n    this.b = point.b;\n    this.a = point.a;\n    this.uint32 = point.uint32;\n    this.rgba[0] = point.r;\n    this.rgba[1] = point.g;\n    this.rgba[2] = point.b;\n    this.rgba[3] = point.a;\n  }\n  getLuminosity(useAlphaChannel) {\n    let r = this.r;\n    let g = this.g;\n    let b = this.b;\n    if (useAlphaChannel) {\n      r = Math.min(255, 255 - this.a + this.a * r / 255);\n      g = Math.min(255, 255 - this.a + this.a * g / 255);\n      b = Math.min(255, 255 - this.a + this.a * b / 255);\n    }\n    return r * 0.2126 /* RED */ + g * 0.7152 /* GREEN */ + b * 0.0722 /* BLUE */;\n  }\n  _loadUINT32() {\n    this.uint32 = (this.a << 24 | this.b << 16 | this.g << 8 | this.r) >>> 0;\n  }\n  _loadRGBA() {\n    this.r = this.uint32 & 255;\n    this.g = this.uint32 >>> 8 & 255;\n    this.b = this.uint32 >>> 16 & 255;\n    this.a = this.uint32 >>> 24 & 255;\n  }\n  _loadQuadruplet() {\n    this.rgba[0] = this.r;\n    this.rgba[1] = this.g;\n    this.rgba[2] = this.b;\n    this.rgba[3] = this.a;\n  }\n};\n\n// src/utils/pointContainer.ts\nvar PointContainer = class {\n  constructor() {\n    __publicField(this, \"_pointArray\");\n    __publicField(this, \"_width\");\n    __publicField(this, \"_height\");\n    this._width = 0;\n    this._height = 0;\n    this._pointArray = [];\n  }\n  getWidth() {\n    return this._width;\n  }\n  getHeight() {\n    return this._height;\n  }\n  setWidth(width) {\n    this._width = width;\n  }\n  setHeight(height) {\n    this._height = height;\n  }\n  getPointArray() {\n    return this._pointArray;\n  }\n  clone() {\n    const clone = new PointContainer();\n    clone._width = this._width;\n    clone._height = this._height;\n    for (let i = 0, l = this._pointArray.length; i < l; i++) {\n      clone._pointArray[i] = Point.createByUint32(this._pointArray[i].uint32 | 0);\n    }\n    return clone;\n  }\n  toUint32Array() {\n    const l = this._pointArray.length;\n    const uint32Array = new Uint32Array(l);\n    for (let i = 0; i < l; i++) {\n      uint32Array[i] = this._pointArray[i].uint32;\n    }\n    return uint32Array;\n  }\n  toUint8Array() {\n    return new Uint8Array(this.toUint32Array().buffer);\n  }\n  static fromHTMLImageElement(img) {\n    const width = img.naturalWidth;\n    const height = img.naturalHeight;\n    const canvas = document.createElement(\"canvas\");\n    canvas.width = width;\n    canvas.height = height;\n    const ctx = canvas.getContext(\"2d\");\n    ctx.drawImage(img, 0, 0, width, height, 0, 0, width, height);\n    return PointContainer.fromHTMLCanvasElement(canvas);\n  }\n  static fromHTMLCanvasElement(canvas) {\n    const width = canvas.width;\n    const height = canvas.height;\n    const ctx = canvas.getContext(\"2d\");\n    const imgData = ctx.getImageData(0, 0, width, height);\n    return PointContainer.fromImageData(imgData);\n  }\n  static fromImageData(imageData) {\n    const width = imageData.width;\n    const height = imageData.height;\n    return PointContainer.fromUint8Array(imageData.data, width, height);\n  }\n  static fromUint8Array(uint8Array, width, height) {\n    switch (Object.prototype.toString.call(uint8Array)) {\n      case \"[object Uint8ClampedArray]\":\n      case \"[object Uint8Array]\":\n        break;\n      default:\n        uint8Array = new Uint8Array(uint8Array);\n    }\n    const uint32Array = new Uint32Array(uint8Array.buffer);\n    return PointContainer.fromUint32Array(uint32Array, width, height);\n  }\n  static fromUint32Array(uint32Array, width, height) {\n    const container = new PointContainer();\n    container._width = width;\n    container._height = height;\n    for (let i = 0, l = uint32Array.length; i < l; i++) {\n      container._pointArray[i] = Point.createByUint32(uint32Array[i] | 0);\n    }\n    return container;\n  }\n  static fromBuffer(buffer, width, height) {\n    const uint32Array = new Uint32Array(buffer.buffer, buffer.byteOffset, buffer.byteLength / Uint32Array.BYTES_PER_ELEMENT);\n    return PointContainer.fromUint32Array(uint32Array, width, height);\n  }\n};\n\n// src/utils/palette.ts\nvar hueGroups = 10;\nfunction hueGroup(hue, segmentsNumber) {\n  const maxHue = 360;\n  const seg = maxHue / segmentsNumber;\n  const half = seg / 2;\n  for (let i = 1, mid = seg - half; i < segmentsNumber; i++, mid += seg) {\n    if (hue >= mid && hue < mid + seg)\n      return i;\n  }\n  return 0;\n}\nvar Palette = class {\n  constructor() {\n    __publicField(this, \"_pointContainer\");\n    __publicField(this, \"_pointArray\", []);\n    __publicField(this, \"_i32idx\", {});\n    this._pointContainer = new PointContainer();\n    this._pointContainer.setHeight(1);\n    this._pointArray = this._pointContainer.getPointArray();\n  }\n  add(color) {\n    this._pointArray.push(color);\n    this._pointContainer.setWidth(this._pointArray.length);\n  }\n  has(color) {\n    for (let i = this._pointArray.length - 1; i >= 0; i--) {\n      if (color.uint32 === this._pointArray[i].uint32)\n        return true;\n    }\n    return false;\n  }\n  getNearestColor(colorDistanceCalculator, color) {\n    return this._pointArray[this._getNearestIndex(colorDistanceCalculator, color) | 0];\n  }\n  getPointContainer() {\n    return this._pointContainer;\n  }\n  _nearestPointFromCache(key) {\n    return typeof this._i32idx[key] === \"number\" ? this._i32idx[key] : -1;\n  }\n  _getNearestIndex(colorDistanceCalculator, point) {\n    let idx = this._nearestPointFromCache(\"\" + point.uint32);\n    if (idx >= 0)\n      return idx;\n    let minimalDistance = Number.MAX_VALUE;\n    idx = 0;\n    for (let i = 0, l = this._pointArray.length; i < l; i++) {\n      const p = this._pointArray[i];\n      const distance = colorDistanceCalculator.calculateRaw(point.r, point.g, point.b, point.a, p.r, p.g, p.b, p.a);\n      if (distance < minimalDistance) {\n        minimalDistance = distance;\n        idx = i;\n      }\n    }\n    this._i32idx[point.uint32] = idx;\n    return idx;\n  }\n  sort() {\n    this._i32idx = {};\n    this._pointArray.sort((a, b) => {\n      const hslA = rgb2hsl(a.r, a.g, a.b);\n      const hslB = rgb2hsl(b.r, b.g, b.b);\n      const hueA = a.r === a.g && a.g === a.b ? 0 : 1 + hueGroup(hslA.h, hueGroups);\n      const hueB = b.r === b.g && b.g === b.b ? 0 : 1 + hueGroup(hslB.h, hueGroups);\n      const hueDiff = hueB - hueA;\n      if (hueDiff)\n        return -hueDiff;\n      const lA = a.getLuminosity(true);\n      const lB = b.getLuminosity(true);\n      if (lB - lA !== 0)\n        return lB - lA;\n      const satDiff = (hslB.s * 100 | 0) - (hslA.s * 100 | 0);\n      if (satDiff)\n        return -satDiff;\n      return 0;\n    });\n  }\n};\n\n// src/utils/index.ts\nvar utils_exports = {};\n__export(utils_exports, {\n  HueStatistics: () => HueStatistics,\n  Palette: () => Palette,\n  Point: () => Point,\n  PointContainer: () => PointContainer,\n  ProgressTracker: () => ProgressTracker,\n  arithmetic: () => arithmetic_exports\n});\n\n// src/utils/hueStatistics.ts\nvar HueGroup = class {\n  constructor() {\n    __publicField(this, \"num\", 0);\n    __publicField(this, \"cols\", []);\n  }\n};\nvar HueStatistics = class {\n  constructor(numGroups, minCols) {\n    __publicField(this, \"_numGroups\");\n    __publicField(this, \"_minCols\");\n    __publicField(this, \"_stats\");\n    __publicField(this, \"_groupsFull\");\n    this._numGroups = numGroups;\n    this._minCols = minCols;\n    this._stats = [];\n    for (let i = 0; i <= numGroups; i++) {\n      this._stats[i] = new HueGroup();\n    }\n    this._groupsFull = 0;\n  }\n  check(i32) {\n    if (this._groupsFull === this._numGroups + 1) {\n      this.check = () => {\n      };\n    }\n    const r = i32 & 255;\n    const g = i32 >>> 8 & 255;\n    const b = i32 >>> 16 & 255;\n    const hg = r === g && g === b ? 0 : 1 + hueGroup(rgb2hsl(r, g, b).h, this._numGroups);\n    const gr = this._stats[hg];\n    const min = this._minCols;\n    gr.num++;\n    if (gr.num > min) {\n      return;\n    }\n    if (gr.num === min) {\n      this._groupsFull++;\n    }\n    if (gr.num <= min) {\n      this._stats[hg].cols.push(i32);\n    }\n  }\n  injectIntoDictionary(histG) {\n    for (let i = 0; i <= this._numGroups; i++) {\n      if (this._stats[i].num <= this._minCols) {\n        this._stats[i].cols.forEach((col) => {\n          if (!histG[col]) {\n            histG[col] = 1;\n          } else {\n            histG[col]++;\n          }\n        });\n      }\n    }\n  }\n  injectIntoArray(histG) {\n    for (let i = 0; i <= this._numGroups; i++) {\n      if (this._stats[i].num <= this._minCols) {\n        this._stats[i].cols.forEach((col) => {\n          if (histG.indexOf(col) === -1) {\n            histG.push(col);\n          }\n        });\n      }\n    }\n  }\n};\n\n// src/utils/progressTracker.ts\nvar _ProgressTracker = class {\n  constructor(valueRange, progressRange) {\n    __publicField(this, \"progress\");\n    __publicField(this, \"_step\");\n    __publicField(this, \"_range\");\n    __publicField(this, \"_last\");\n    __publicField(this, \"_progressRange\");\n    this._range = valueRange;\n    this._progressRange = progressRange;\n    this._step = Math.max(1, this._range / (_ProgressTracker.steps + 1) | 0);\n    this._last = -this._step;\n    this.progress = 0;\n  }\n  shouldNotify(current) {\n    if (current - this._last >= this._step) {\n      this._last = current;\n      this.progress = Math.min(this._progressRange * this._last / this._range, this._progressRange);\n      return true;\n    }\n    return false;\n  }\n};\nvar ProgressTracker = _ProgressTracker;\n__publicField(ProgressTracker, \"steps\", 100);\n\n// src/palette/neuquant/neuquant.ts\nvar networkBiasShift = 3;\nvar Neuron = class {\n  constructor(defaultValue) {\n    __publicField(this, \"r\");\n    __publicField(this, \"g\");\n    __publicField(this, \"b\");\n    __publicField(this, \"a\");\n    this.r = this.g = this.b = this.a = defaultValue;\n  }\n  toPoint() {\n    return Point.createByRGBA(this.r >> networkBiasShift, this.g >> networkBiasShift, this.b >> networkBiasShift, this.a >> networkBiasShift);\n  }\n  subtract(r, g, b, a) {\n    this.r -= r | 0;\n    this.g -= g | 0;\n    this.b -= b | 0;\n    this.a -= a | 0;\n  }\n};\nvar _NeuQuant = class extends AbstractPaletteQuantizer {\n  constructor(colorDistanceCalculator, colors = 256) {\n    super();\n    __publicField(this, \"_pointArray\");\n    __publicField(this, \"_networkSize\");\n    __publicField(this, \"_network\");\n    __publicField(this, \"_sampleFactor\");\n    __publicField(this, \"_radPower\");\n    __publicField(this, \"_freq\");\n    __publicField(this, \"_bias\");\n    __publicField(this, \"_distance\");\n    this._distance = colorDistanceCalculator;\n    this._pointArray = [];\n    this._sampleFactor = 1;\n    this._networkSize = colors;\n    this._distance.setWhitePoint(255 << networkBiasShift, 255 << networkBiasShift, 255 << networkBiasShift, 255 << networkBiasShift);\n  }\n  sample(pointContainer) {\n    this._pointArray = this._pointArray.concat(pointContainer.getPointArray());\n  }\n  *quantize() {\n    this._init();\n    yield* this._learn();\n    yield {\n      palette: this._buildPalette(),\n      progress: 100\n    };\n  }\n  _init() {\n    this._freq = [];\n    this._bias = [];\n    this._radPower = [];\n    this._network = [];\n    for (let i = 0; i < this._networkSize; i++) {\n      this._network[i] = new Neuron((i << networkBiasShift + 8) / this._networkSize | 0);\n      this._freq[i] = _NeuQuant._initialBias / this._networkSize | 0;\n      this._bias[i] = 0;\n    }\n  }\n  *_learn() {\n    let sampleFactor = this._sampleFactor;\n    const pointsNumber = this._pointArray.length;\n    if (pointsNumber < _NeuQuant._minpicturebytes)\n      sampleFactor = 1;\n    const alphadec = 30 + (sampleFactor - 1) / 3 | 0;\n    const pointsToSample = pointsNumber / sampleFactor | 0;\n    let delta = pointsToSample / _NeuQuant._nCycles | 0;\n    let alpha = _NeuQuant._initAlpha;\n    let radius = (this._networkSize >> 3) * _NeuQuant._radiusBias;\n    let rad = radius >> _NeuQuant._radiusBiasShift;\n    if (rad <= 1)\n      rad = 0;\n    for (let i = 0; i < rad; i++) {\n      this._radPower[i] = alpha * ((rad * rad - i * i) * _NeuQuant._radBias / (rad * rad)) >>> 0;\n    }\n    let step;\n    if (pointsNumber < _NeuQuant._minpicturebytes) {\n      step = 1;\n    } else if (pointsNumber % _NeuQuant._prime1 !== 0) {\n      step = _NeuQuant._prime1;\n    } else if (pointsNumber % _NeuQuant._prime2 !== 0) {\n      step = _NeuQuant._prime2;\n    } else if (pointsNumber % _NeuQuant._prime3 !== 0) {\n      step = _NeuQuant._prime3;\n    } else {\n      step = _NeuQuant._prime4;\n    }\n    const tracker = new ProgressTracker(pointsToSample, 99);\n    for (let i = 0, pointIndex = 0; i < pointsToSample; ) {\n      if (tracker.shouldNotify(i)) {\n        yield {\n          progress: tracker.progress\n        };\n      }\n      const point = this._pointArray[pointIndex];\n      const b = point.b << networkBiasShift;\n      const g = point.g << networkBiasShift;\n      const r = point.r << networkBiasShift;\n      const a = point.a << networkBiasShift;\n      const neuronIndex = this._contest(b, g, r, a);\n      this._alterSingle(alpha, neuronIndex, b, g, r, a);\n      if (rad !== 0)\n        this._alterNeighbour(rad, neuronIndex, b, g, r, a);\n      pointIndex += step;\n      if (pointIndex >= pointsNumber)\n        pointIndex -= pointsNumber;\n      i++;\n      if (delta === 0)\n        delta = 1;\n      if (i % delta === 0) {\n        alpha -= alpha / alphadec | 0;\n        radius -= radius / _NeuQuant._radiusDecrease | 0;\n        rad = radius >> _NeuQuant._radiusBiasShift;\n        if (rad <= 1)\n          rad = 0;\n        for (let j = 0; j < rad; j++) {\n          this._radPower[j] = alpha * ((rad * rad - j * j) * _NeuQuant._radBias / (rad * rad)) >>> 0;\n        }\n      }\n    }\n  }\n  _buildPalette() {\n    const palette = new Palette();\n    this._network.forEach((neuron) => {\n      palette.add(neuron.toPoint());\n    });\n    palette.sort();\n    return palette;\n  }\n  _alterNeighbour(rad, i, b, g, r, al) {\n    let lo = i - rad;\n    if (lo < -1)\n      lo = -1;\n    let hi = i + rad;\n    if (hi > this._networkSize)\n      hi = this._networkSize;\n    let j = i + 1;\n    let k = i - 1;\n    let m = 1;\n    while (j < hi || k > lo) {\n      const a = this._radPower[m++] / _NeuQuant._alphaRadBias;\n      if (j < hi) {\n        const p = this._network[j++];\n        p.subtract(a * (p.r - r), a * (p.g - g), a * (p.b - b), a * (p.a - al));\n      }\n      if (k > lo) {\n        const p = this._network[k--];\n        p.subtract(a * (p.r - r), a * (p.g - g), a * (p.b - b), a * (p.a - al));\n      }\n    }\n  }\n  _alterSingle(alpha, i, b, g, r, a) {\n    alpha /= _NeuQuant._initAlpha;\n    const n = this._network[i];\n    n.subtract(alpha * (n.r - r), alpha * (n.g - g), alpha * (n.b - b), alpha * (n.a - a));\n  }\n  _contest(b, g, r, a) {\n    const multiplier = 255 * 4 << networkBiasShift;\n    let bestd = ~(1 << 31);\n    let bestbiasd = bestd;\n    let bestpos = -1;\n    let bestbiaspos = bestpos;\n    for (let i = 0; i < this._networkSize; i++) {\n      const n = this._network[i];\n      const dist = this._distance.calculateNormalized(n, { r, g, b, a }) * multiplier | 0;\n      if (dist < bestd) {\n        bestd = dist;\n        bestpos = i;\n      }\n      const biasdist = dist - (this._bias[i] >> _NeuQuant._initialBiasShift - networkBiasShift);\n      if (biasdist < bestbiasd) {\n        bestbiasd = biasdist;\n        bestbiaspos = i;\n      }\n      const betafreq = this._freq[i] >> _NeuQuant._betaShift;\n      this._freq[i] -= betafreq;\n      this._bias[i] += betafreq << _NeuQuant._gammaShift;\n    }\n    this._freq[bestpos] += _NeuQuant._beta;\n    this._bias[bestpos] -= _NeuQuant._betaGamma;\n    return bestbiaspos;\n  }\n};\nvar NeuQuant = _NeuQuant;\n__publicField(NeuQuant, \"_prime1\", 499);\n__publicField(NeuQuant, \"_prime2\", 491);\n__publicField(NeuQuant, \"_prime3\", 487);\n__publicField(NeuQuant, \"_prime4\", 503);\n__publicField(NeuQuant, \"_minpicturebytes\", _NeuQuant._prime4);\n__publicField(NeuQuant, \"_nCycles\", 100);\n__publicField(NeuQuant, \"_initialBiasShift\", 16);\n__publicField(NeuQuant, \"_initialBias\", 1 << _NeuQuant._initialBiasShift);\n__publicField(NeuQuant, \"_gammaShift\", 10);\n__publicField(NeuQuant, \"_betaShift\", 10);\n__publicField(NeuQuant, \"_beta\", _NeuQuant._initialBias >> _NeuQuant._betaShift);\n__publicField(NeuQuant, \"_betaGamma\", _NeuQuant._initialBias << _NeuQuant._gammaShift - _NeuQuant._betaShift);\n__publicField(NeuQuant, \"_radiusBiasShift\", 6);\n__publicField(NeuQuant, \"_radiusBias\", 1 << _NeuQuant._radiusBiasShift);\n__publicField(NeuQuant, \"_radiusDecrease\", 30);\n__publicField(NeuQuant, \"_alphaBiasShift\", 10);\n__publicField(NeuQuant, \"_initAlpha\", 1 << _NeuQuant._alphaBiasShift);\n__publicField(NeuQuant, \"_radBiasShift\", 8);\n__publicField(NeuQuant, \"_radBias\", 1 << _NeuQuant._radBiasShift);\n__publicField(NeuQuant, \"_alphaRadBiasShift\", _NeuQuant._alphaBiasShift + _NeuQuant._radBiasShift);\n__publicField(NeuQuant, \"_alphaRadBias\", 1 << _NeuQuant._alphaRadBiasShift);\n\n// src/palette/neuquant/neuquantFloat.ts\nvar networkBiasShift2 = 3;\nvar NeuronFloat = class {\n  constructor(defaultValue) {\n    __publicField(this, \"r\");\n    __publicField(this, \"g\");\n    __publicField(this, \"b\");\n    __publicField(this, \"a\");\n    this.r = this.g = this.b = this.a = defaultValue;\n  }\n  toPoint() {\n    return Point.createByRGBA(this.r >> networkBiasShift2, this.g >> networkBiasShift2, this.b >> networkBiasShift2, this.a >> networkBiasShift2);\n  }\n  subtract(r, g, b, a) {\n    this.r -= r;\n    this.g -= g;\n    this.b -= b;\n    this.a -= a;\n  }\n};\nvar _NeuQuantFloat = class extends AbstractPaletteQuantizer {\n  constructor(colorDistanceCalculator, colors = 256) {\n    super();\n    __publicField(this, \"_pointArray\");\n    __publicField(this, \"_networkSize\");\n    __publicField(this, \"_network\");\n    __publicField(this, \"_sampleFactor\");\n    __publicField(this, \"_radPower\");\n    __publicField(this, \"_freq\");\n    __publicField(this, \"_bias\");\n    __publicField(this, \"_distance\");\n    this._distance = colorDistanceCalculator;\n    this._pointArray = [];\n    this._sampleFactor = 1;\n    this._networkSize = colors;\n    this._distance.setWhitePoint(255 << networkBiasShift2, 255 << networkBiasShift2, 255 << networkBiasShift2, 255 << networkBiasShift2);\n  }\n  sample(pointContainer) {\n    this._pointArray = this._pointArray.concat(pointContainer.getPointArray());\n  }\n  *quantize() {\n    this._init();\n    yield* this._learn();\n    yield {\n      palette: this._buildPalette(),\n      progress: 100\n    };\n  }\n  _init() {\n    this._freq = [];\n    this._bias = [];\n    this._radPower = [];\n    this._network = [];\n    for (let i = 0; i < this._networkSize; i++) {\n      this._network[i] = new NeuronFloat((i << networkBiasShift2 + 8) / this._networkSize);\n      this._freq[i] = _NeuQuantFloat._initialBias / this._networkSize;\n      this._bias[i] = 0;\n    }\n  }\n  *_learn() {\n    let sampleFactor = this._sampleFactor;\n    const pointsNumber = this._pointArray.length;\n    if (pointsNumber < _NeuQuantFloat._minpicturebytes)\n      sampleFactor = 1;\n    const alphadec = 30 + (sampleFactor - 1) / 3;\n    const pointsToSample = pointsNumber / sampleFactor;\n    let delta = pointsToSample / _NeuQuantFloat._nCycles | 0;\n    let alpha = _NeuQuantFloat._initAlpha;\n    let radius = (this._networkSize >> 3) * _NeuQuantFloat._radiusBias;\n    let rad = radius >> _NeuQuantFloat._radiusBiasShift;\n    if (rad <= 1)\n      rad = 0;\n    for (let i = 0; i < rad; i++) {\n      this._radPower[i] = alpha * ((rad * rad - i * i) * _NeuQuantFloat._radBias / (rad * rad));\n    }\n    let step;\n    if (pointsNumber < _NeuQuantFloat._minpicturebytes) {\n      step = 1;\n    } else if (pointsNumber % _NeuQuantFloat._prime1 !== 0) {\n      step = _NeuQuantFloat._prime1;\n    } else if (pointsNumber % _NeuQuantFloat._prime2 !== 0) {\n      step = _NeuQuantFloat._prime2;\n    } else if (pointsNumber % _NeuQuantFloat._prime3 !== 0) {\n      step = _NeuQuantFloat._prime3;\n    } else {\n      step = _NeuQuantFloat._prime4;\n    }\n    const tracker = new ProgressTracker(pointsToSample, 99);\n    for (let i = 0, pointIndex = 0; i < pointsToSample; ) {\n      if (tracker.shouldNotify(i)) {\n        yield {\n          progress: tracker.progress\n        };\n      }\n      const point = this._pointArray[pointIndex];\n      const b = point.b << networkBiasShift2;\n      const g = point.g << networkBiasShift2;\n      const r = point.r << networkBiasShift2;\n      const a = point.a << networkBiasShift2;\n      const neuronIndex = this._contest(b, g, r, a);\n      this._alterSingle(alpha, neuronIndex, b, g, r, a);\n      if (rad !== 0)\n        this._alterNeighbour(rad, neuronIndex, b, g, r, a);\n      pointIndex += step;\n      if (pointIndex >= pointsNumber)\n        pointIndex -= pointsNumber;\n      i++;\n      if (delta === 0)\n        delta = 1;\n      if (i % delta === 0) {\n        alpha -= alpha / alphadec;\n        radius -= radius / _NeuQuantFloat._radiusDecrease;\n        rad = radius >> _NeuQuantFloat._radiusBiasShift;\n        if (rad <= 1)\n          rad = 0;\n        for (let j = 0; j < rad; j++) {\n          this._radPower[j] = alpha * ((rad * rad - j * j) * _NeuQuantFloat._radBias / (rad * rad));\n        }\n      }\n    }\n  }\n  _buildPalette() {\n    const palette = new Palette();\n    this._network.forEach((neuron) => {\n      palette.add(neuron.toPoint());\n    });\n    palette.sort();\n    return palette;\n  }\n  _alterNeighbour(rad, i, b, g, r, al) {\n    let lo = i - rad;\n    if (lo < -1)\n      lo = -1;\n    let hi = i + rad;\n    if (hi > this._networkSize)\n      hi = this._networkSize;\n    let j = i + 1;\n    let k = i - 1;\n    let m = 1;\n    while (j < hi || k > lo) {\n      const a = this._radPower[m++] / _NeuQuantFloat._alphaRadBias;\n      if (j < hi) {\n        const p = this._network[j++];\n        p.subtract(a * (p.r - r), a * (p.g - g), a * (p.b - b), a * (p.a - al));\n      }\n      if (k > lo) {\n        const p = this._network[k--];\n        p.subtract(a * (p.r - r), a * (p.g - g), a * (p.b - b), a * (p.a - al));\n      }\n    }\n  }\n  _alterSingle(alpha, i, b, g, r, a) {\n    alpha /= _NeuQuantFloat._initAlpha;\n    const n = this._network[i];\n    n.subtract(alpha * (n.r - r), alpha * (n.g - g), alpha * (n.b - b), alpha * (n.a - a));\n  }\n  _contest(b, g, r, al) {\n    const multiplier = 255 * 4 << networkBiasShift2;\n    let bestd = ~(1 << 31);\n    let bestbiasd = bestd;\n    let bestpos = -1;\n    let bestbiaspos = bestpos;\n    for (let i = 0; i < this._networkSize; i++) {\n      const n = this._network[i];\n      const dist = this._distance.calculateNormalized(n, { r, g, b, a: al }) * multiplier;\n      if (dist < bestd) {\n        bestd = dist;\n        bestpos = i;\n      }\n      const biasdist = dist - (this._bias[i] >> _NeuQuantFloat._initialBiasShift - networkBiasShift2);\n      if (biasdist < bestbiasd) {\n        bestbiasd = biasdist;\n        bestbiaspos = i;\n      }\n      const betafreq = this._freq[i] >> _NeuQuantFloat._betaShift;\n      this._freq[i] -= betafreq;\n      this._bias[i] += betafreq << _NeuQuantFloat._gammaShift;\n    }\n    this._freq[bestpos] += _NeuQuantFloat._beta;\n    this._bias[bestpos] -= _NeuQuantFloat._betaGamma;\n    return bestbiaspos;\n  }\n};\nvar NeuQuantFloat = _NeuQuantFloat;\n__publicField(NeuQuantFloat, \"_prime1\", 499);\n__publicField(NeuQuantFloat, \"_prime2\", 491);\n__publicField(NeuQuantFloat, \"_prime3\", 487);\n__publicField(NeuQuantFloat, \"_prime4\", 503);\n__publicField(NeuQuantFloat, \"_minpicturebytes\", _NeuQuantFloat._prime4);\n__publicField(NeuQuantFloat, \"_nCycles\", 100);\n__publicField(NeuQuantFloat, \"_initialBiasShift\", 16);\n__publicField(NeuQuantFloat, \"_initialBias\", 1 << _NeuQuantFloat._initialBiasShift);\n__publicField(NeuQuantFloat, \"_gammaShift\", 10);\n__publicField(NeuQuantFloat, \"_betaShift\", 10);\n__publicField(NeuQuantFloat, \"_beta\", _NeuQuantFloat._initialBias >> _NeuQuantFloat._betaShift);\n__publicField(NeuQuantFloat, \"_betaGamma\", _NeuQuantFloat._initialBias << _NeuQuantFloat._gammaShift - _NeuQuantFloat._betaShift);\n__publicField(NeuQuantFloat, \"_radiusBiasShift\", 6);\n__publicField(NeuQuantFloat, \"_radiusBias\", 1 << _NeuQuantFloat._radiusBiasShift);\n__publicField(NeuQuantFloat, \"_radiusDecrease\", 30);\n__publicField(NeuQuantFloat, \"_alphaBiasShift\", 10);\n__publicField(NeuQuantFloat, \"_initAlpha\", 1 << _NeuQuantFloat._alphaBiasShift);\n__publicField(NeuQuantFloat, \"_radBiasShift\", 8);\n__publicField(NeuQuantFloat, \"_radBias\", 1 << _NeuQuantFloat._radBiasShift);\n__publicField(NeuQuantFloat, \"_alphaRadBiasShift\", _NeuQuantFloat._alphaBiasShift + _NeuQuantFloat._radBiasShift);\n__publicField(NeuQuantFloat, \"_alphaRadBias\", 1 << _NeuQuantFloat._alphaRadBiasShift);\n\n// src/palette/rgbquant/colorHistogram.ts\nvar _ColorHistogram = class {\n  constructor(method, colors) {\n    __publicField(this, \"_method\");\n    __publicField(this, \"_hueStats\");\n    __publicField(this, \"_histogram\");\n    __publicField(this, \"_initColors\");\n    __publicField(this, \"_minHueCols\");\n    this._method = method;\n    this._minHueCols = colors << 2;\n    this._initColors = colors << 2;\n    this._hueStats = new HueStatistics(_ColorHistogram._hueGroups, this._minHueCols);\n    this._histogram = /* @__PURE__ */ Object.create(null);\n  }\n  sample(pointContainer) {\n    switch (this._method) {\n      case 1:\n        this._colorStats1D(pointContainer);\n        break;\n      case 2:\n        this._colorStats2D(pointContainer);\n        break;\n    }\n  }\n  getImportanceSortedColorsIDXI32() {\n    const sorted = stableSort(Object.keys(this._histogram), (a, b) => this._histogram[b] - this._histogram[a]);\n    if (sorted.length === 0) {\n      return [];\n    }\n    let idxi32;\n    switch (this._method) {\n      case 1:\n        const initialColorsLimit = Math.min(sorted.length, this._initColors);\n        const last = sorted[initialColorsLimit - 1];\n        const freq = this._histogram[last];\n        idxi32 = sorted.slice(0, initialColorsLimit);\n        let pos = initialColorsLimit;\n        const len = sorted.length;\n        while (pos < len && this._histogram[sorted[pos]] === freq) {\n          idxi32.push(sorted[pos++]);\n        }\n        this._hueStats.injectIntoArray(idxi32);\n        break;\n      case 2:\n        idxi32 = sorted;\n        break;\n      default:\n        throw new Error(\"Incorrect method\");\n    }\n    return idxi32.map((v) => +v);\n  }\n  _colorStats1D(pointContainer) {\n    const histG = this._histogram;\n    const pointArray = pointContainer.getPointArray();\n    const len = pointArray.length;\n    for (let i = 0; i < len; i++) {\n      const col = pointArray[i].uint32;\n      this._hueStats.check(col);\n      if (col in histG) {\n        histG[col]++;\n      } else {\n        histG[col] = 1;\n      }\n    }\n  }\n  _colorStats2D(pointContainer) {\n    const width = pointContainer.getWidth();\n    const height = pointContainer.getHeight();\n    const pointArray = pointContainer.getPointArray();\n    const boxW = _ColorHistogram._boxSize[0];\n    const boxH = _ColorHistogram._boxSize[1];\n    const area = boxW * boxH;\n    const boxes = this._makeBoxes(width, height, boxW, boxH);\n    const histG = this._histogram;\n    boxes.forEach((box) => {\n      let effc = Math.round(box.w * box.h / area) * _ColorHistogram._boxPixels;\n      if (effc < 2)\n        effc = 2;\n      const histL = {};\n      this._iterateBox(box, width, (i) => {\n        const col = pointArray[i].uint32;\n        this._hueStats.check(col);\n        if (col in histG) {\n          histG[col]++;\n        } else if (col in histL) {\n          if (++histL[col] >= effc) {\n            histG[col] = histL[col];\n          }\n        } else {\n          histL[col] = 1;\n        }\n      });\n    });\n    this._hueStats.injectIntoDictionary(histG);\n  }\n  _iterateBox(bbox, wid, fn) {\n    const b = bbox;\n    const i0 = b.y * wid + b.x;\n    const i1 = (b.y + b.h - 1) * wid + (b.x + b.w - 1);\n    const incr = wid - b.w + 1;\n    let cnt = 0;\n    let i = i0;\n    do {\n      fn.call(this, i);\n      i += ++cnt % b.w === 0 ? incr : 1;\n    } while (i <= i1);\n  }\n  _makeBoxes(width, height, stepX, stepY) {\n    const wrem = width % stepX;\n    const hrem = height % stepY;\n    const xend = width - wrem;\n    const yend = height - hrem;\n    const boxesArray = [];\n    for (let y2 = 0; y2 < height; y2 += stepY) {\n      for (let x2 = 0; x2 < width; x2 += stepX) {\n        boxesArray.push({\n          x: x2,\n          y: y2,\n          w: x2 === xend ? wrem : stepX,\n          h: y2 === yend ? hrem : stepY\n        });\n      }\n    }\n    return boxesArray;\n  }\n};\nvar ColorHistogram = _ColorHistogram;\n__publicField(ColorHistogram, \"_boxSize\", [64, 64]);\n__publicField(ColorHistogram, \"_boxPixels\", 2);\n__publicField(ColorHistogram, \"_hueGroups\", 10);\n\n// src/palette/rgbquant/rgbquant.ts\nvar RemovedColor = class {\n  constructor(index, color, distance) {\n    __publicField(this, \"index\");\n    __publicField(this, \"color\");\n    __publicField(this, \"distance\");\n    this.index = index;\n    this.color = color;\n    this.distance = distance;\n  }\n};\nvar RGBQuant = class extends AbstractPaletteQuantizer {\n  constructor(colorDistanceCalculator, colors = 256, method = 2) {\n    super();\n    __publicField(this, \"_colors\");\n    __publicField(this, \"_initialDistance\");\n    __publicField(this, \"_distanceIncrement\");\n    __publicField(this, \"_histogram\");\n    __publicField(this, \"_distance\");\n    this._distance = colorDistanceCalculator;\n    this._colors = colors;\n    this._histogram = new ColorHistogram(method, colors);\n    this._initialDistance = 0.01;\n    this._distanceIncrement = 5e-3;\n  }\n  sample(image) {\n    this._histogram.sample(image);\n  }\n  *quantize() {\n    const idxi32 = this._histogram.getImportanceSortedColorsIDXI32();\n    if (idxi32.length === 0) {\n      throw new Error(\"No colors in image\");\n    }\n    yield* this._buildPalette(idxi32);\n  }\n  *_buildPalette(idxi32) {\n    const palette = new Palette();\n    const colorArray = palette.getPointContainer().getPointArray();\n    const usageArray = new Array(idxi32.length);\n    for (let i = 0; i < idxi32.length; i++) {\n      colorArray.push(Point.createByUint32(idxi32[i]));\n      usageArray[i] = 1;\n    }\n    const len = colorArray.length;\n    const memDist = [];\n    let palLen = len;\n    let thold = this._initialDistance;\n    const tracker = new ProgressTracker(palLen - this._colors, 99);\n    while (palLen > this._colors) {\n      memDist.length = 0;\n      for (let i = 0; i < len; i++) {\n        if (tracker.shouldNotify(len - palLen)) {\n          yield {\n            progress: tracker.progress\n          };\n        }\n        if (usageArray[i] === 0)\n          continue;\n        const pxi = colorArray[i];\n        for (let j = i + 1; j < len; j++) {\n          if (usageArray[j] === 0)\n            continue;\n          const pxj = colorArray[j];\n          const dist = this._distance.calculateNormalized(pxi, pxj);\n          if (dist < thold) {\n            memDist.push(new RemovedColor(j, pxj, dist));\n            usageArray[j] = 0;\n            palLen--;\n          }\n        }\n      }\n      thold += palLen > this._colors * 3 ? this._initialDistance : this._distanceIncrement;\n    }\n    if (palLen < this._colors) {\n      stableSort(memDist, (a, b) => b.distance - a.distance);\n      let k = 0;\n      while (palLen < this._colors && k < memDist.length) {\n        const removedColor = memDist[k];\n        usageArray[removedColor.index] = 1;\n        palLen++;\n        k++;\n      }\n    }\n    let colors = colorArray.length;\n    for (let colorIndex = colors - 1; colorIndex >= 0; colorIndex--) {\n      if (usageArray[colorIndex] === 0) {\n        if (colorIndex !== colors - 1) {\n          colorArray[colorIndex] = colorArray[colors - 1];\n        }\n        --colors;\n      }\n    }\n    colorArray.length = colors;\n    palette.sort();\n    yield {\n      palette,\n      progress: 100\n    };\n  }\n};\n\n// src/palette/wu/wuQuant.ts\nfunction createArray1D(dimension1) {\n  const a = [];\n  for (let k = 0; k < dimension1; k++) {\n    a[k] = 0;\n  }\n  return a;\n}\nfunction createArray4D(dimension1, dimension2, dimension3, dimension4) {\n  const a = new Array(dimension1);\n  for (let i = 0; i < dimension1; i++) {\n    a[i] = new Array(dimension2);\n    for (let j = 0; j < dimension2; j++) {\n      a[i][j] = new Array(dimension3);\n      for (let k = 0; k < dimension3; k++) {\n        a[i][j][k] = new Array(dimension4);\n        for (let l = 0; l < dimension4; l++) {\n          a[i][j][k][l] = 0;\n        }\n      }\n    }\n  }\n  return a;\n}\nfunction createArray3D(dimension1, dimension2, dimension3) {\n  const a = new Array(dimension1);\n  for (let i = 0; i < dimension1; i++) {\n    a[i] = new Array(dimension2);\n    for (let j = 0; j < dimension2; j++) {\n      a[i][j] = new Array(dimension3);\n      for (let k = 0; k < dimension3; k++) {\n        a[i][j][k] = 0;\n      }\n    }\n  }\n  return a;\n}\nfunction fillArray3D(a, dimension1, dimension2, dimension3, value) {\n  for (let i = 0; i < dimension1; i++) {\n    a[i] = [];\n    for (let j = 0; j < dimension2; j++) {\n      a[i][j] = [];\n      for (let k = 0; k < dimension3; k++) {\n        a[i][j][k] = value;\n      }\n    }\n  }\n}\nfunction fillArray1D(a, dimension1, value) {\n  for (let i = 0; i < dimension1; i++) {\n    a[i] = value;\n  }\n}\nvar WuColorCube = class {\n  constructor() {\n    __publicField(this, \"redMinimum\");\n    __publicField(this, \"redMaximum\");\n    __publicField(this, \"greenMinimum\");\n    __publicField(this, \"greenMaximum\");\n    __publicField(this, \"blueMinimum\");\n    __publicField(this, \"blueMaximum\");\n    __publicField(this, \"volume\");\n    __publicField(this, \"alphaMinimum\");\n    __publicField(this, \"alphaMaximum\");\n  }\n};\nvar _WuQuant = class extends AbstractPaletteQuantizer {\n  constructor(colorDistanceCalculator, colors = 256, significantBitsPerChannel = 5) {\n    super();\n    __publicField(this, \"_reds\");\n    __publicField(this, \"_greens\");\n    __publicField(this, \"_blues\");\n    __publicField(this, \"_alphas\");\n    __publicField(this, \"_sums\");\n    __publicField(this, \"_weights\");\n    __publicField(this, \"_momentsRed\");\n    __publicField(this, \"_momentsGreen\");\n    __publicField(this, \"_momentsBlue\");\n    __publicField(this, \"_momentsAlpha\");\n    __publicField(this, \"_moments\");\n    __publicField(this, \"_table\");\n    __publicField(this, \"_pixels\");\n    __publicField(this, \"_cubes\");\n    __publicField(this, \"_colors\");\n    __publicField(this, \"_significantBitsPerChannel\");\n    __publicField(this, \"_maxSideIndex\");\n    __publicField(this, \"_alphaMaxSideIndex\");\n    __publicField(this, \"_sideSize\");\n    __publicField(this, \"_alphaSideSize\");\n    __publicField(this, \"_distance\");\n    this._distance = colorDistanceCalculator;\n    this._setQuality(significantBitsPerChannel);\n    this._initialize(colors);\n  }\n  sample(image) {\n    const pointArray = image.getPointArray();\n    for (let i = 0, l = pointArray.length; i < l; i++) {\n      this._addColor(pointArray[i]);\n    }\n    this._pixels = this._pixels.concat(pointArray);\n  }\n  *quantize() {\n    yield* this._preparePalette();\n    const palette = new Palette();\n    for (let paletteIndex = 0; paletteIndex < this._colors; paletteIndex++) {\n      if (this._sums[paletteIndex] > 0) {\n        const sum = this._sums[paletteIndex];\n        const r = this._reds[paletteIndex] / sum;\n        const g = this._greens[paletteIndex] / sum;\n        const b = this._blues[paletteIndex] / sum;\n        const a = this._alphas[paletteIndex] / sum;\n        const color = Point.createByRGBA(r | 0, g | 0, b | 0, a | 0);\n        palette.add(color);\n      }\n    }\n    palette.sort();\n    yield {\n      palette,\n      progress: 100\n    };\n  }\n  *_preparePalette() {\n    yield* this._calculateMoments();\n    let next = 0;\n    const volumeVariance = createArray1D(this._colors);\n    for (let cubeIndex = 1; cubeIndex < this._colors; ++cubeIndex) {\n      if (this._cut(this._cubes[next], this._cubes[cubeIndex])) {\n        volumeVariance[next] = this._cubes[next].volume > 1 ? this._calculateVariance(this._cubes[next]) : 0;\n        volumeVariance[cubeIndex] = this._cubes[cubeIndex].volume > 1 ? this._calculateVariance(this._cubes[cubeIndex]) : 0;\n      } else {\n        volumeVariance[next] = 0;\n        cubeIndex--;\n      }\n      next = 0;\n      let temp = volumeVariance[0];\n      for (let index = 1; index <= cubeIndex; ++index) {\n        if (volumeVariance[index] > temp) {\n          temp = volumeVariance[index];\n          next = index;\n        }\n      }\n      if (temp <= 0) {\n        this._colors = cubeIndex + 1;\n        break;\n      }\n    }\n    const lookupRed = [];\n    const lookupGreen = [];\n    const lookupBlue = [];\n    const lookupAlpha = [];\n    for (let k = 0; k < this._colors; ++k) {\n      const weight = _WuQuant._volume(this._cubes[k], this._weights);\n      if (weight > 0) {\n        lookupRed[k] = _WuQuant._volume(this._cubes[k], this._momentsRed) / weight | 0;\n        lookupGreen[k] = _WuQuant._volume(this._cubes[k], this._momentsGreen) / weight | 0;\n        lookupBlue[k] = _WuQuant._volume(this._cubes[k], this._momentsBlue) / weight | 0;\n        lookupAlpha[k] = _WuQuant._volume(this._cubes[k], this._momentsAlpha) / weight | 0;\n      } else {\n        lookupRed[k] = 0;\n        lookupGreen[k] = 0;\n        lookupBlue[k] = 0;\n        lookupAlpha[k] = 0;\n      }\n    }\n    this._reds = createArray1D(this._colors + 1);\n    this._greens = createArray1D(this._colors + 1);\n    this._blues = createArray1D(this._colors + 1);\n    this._alphas = createArray1D(this._colors + 1);\n    this._sums = createArray1D(this._colors + 1);\n    for (let index = 0, l = this._pixels.length; index < l; index++) {\n      const color = this._pixels[index];\n      const match = -1;\n      let bestMatch = match;\n      let bestDistance = Number.MAX_VALUE;\n      for (let lookup = 0; lookup < this._colors; lookup++) {\n        const foundRed = lookupRed[lookup];\n        const foundGreen = lookupGreen[lookup];\n        const foundBlue = lookupBlue[lookup];\n        const foundAlpha = lookupAlpha[lookup];\n        const distance = this._distance.calculateRaw(foundRed, foundGreen, foundBlue, foundAlpha, color.r, color.g, color.b, color.a);\n        if (distance < bestDistance) {\n          bestDistance = distance;\n          bestMatch = lookup;\n        }\n      }\n      this._reds[bestMatch] += color.r;\n      this._greens[bestMatch] += color.g;\n      this._blues[bestMatch] += color.b;\n      this._alphas[bestMatch] += color.a;\n      this._sums[bestMatch]++;\n    }\n  }\n  _addColor(color) {\n    const bitsToRemove = 8 - this._significantBitsPerChannel;\n    const indexRed = (color.r >> bitsToRemove) + 1;\n    const indexGreen = (color.g >> bitsToRemove) + 1;\n    const indexBlue = (color.b >> bitsToRemove) + 1;\n    const indexAlpha = (color.a >> bitsToRemove) + 1;\n    this._weights[indexAlpha][indexRed][indexGreen][indexBlue]++;\n    this._momentsRed[indexAlpha][indexRed][indexGreen][indexBlue] += color.r;\n    this._momentsGreen[indexAlpha][indexRed][indexGreen][indexBlue] += color.g;\n    this._momentsBlue[indexAlpha][indexRed][indexGreen][indexBlue] += color.b;\n    this._momentsAlpha[indexAlpha][indexRed][indexGreen][indexBlue] += color.a;\n    this._moments[indexAlpha][indexRed][indexGreen][indexBlue] += this._table[color.r] + this._table[color.g] + this._table[color.b] + this._table[color.a];\n  }\n  *_calculateMoments() {\n    const area = [];\n    const areaRed = [];\n    const areaGreen = [];\n    const areaBlue = [];\n    const areaAlpha = [];\n    const area2 = [];\n    const xarea = createArray3D(this._sideSize, this._sideSize, this._sideSize);\n    const xareaRed = createArray3D(this._sideSize, this._sideSize, this._sideSize);\n    const xareaGreen = createArray3D(this._sideSize, this._sideSize, this._sideSize);\n    const xareaBlue = createArray3D(this._sideSize, this._sideSize, this._sideSize);\n    const xareaAlpha = createArray3D(this._sideSize, this._sideSize, this._sideSize);\n    const xarea2 = createArray3D(this._sideSize, this._sideSize, this._sideSize);\n    let trackerProgress = 0;\n    const tracker = new ProgressTracker(this._alphaMaxSideIndex * this._maxSideIndex, 99);\n    for (let alphaIndex = 1; alphaIndex <= this._alphaMaxSideIndex; ++alphaIndex) {\n      fillArray3D(xarea, this._sideSize, this._sideSize, this._sideSize, 0);\n      fillArray3D(xareaRed, this._sideSize, this._sideSize, this._sideSize, 0);\n      fillArray3D(xareaGreen, this._sideSize, this._sideSize, this._sideSize, 0);\n      fillArray3D(xareaBlue, this._sideSize, this._sideSize, this._sideSize, 0);\n      fillArray3D(xareaAlpha, this._sideSize, this._sideSize, this._sideSize, 0);\n      fillArray3D(xarea2, this._sideSize, this._sideSize, this._sideSize, 0);\n      for (let redIndex = 1; redIndex <= this._maxSideIndex; ++redIndex, ++trackerProgress) {\n        if (tracker.shouldNotify(trackerProgress)) {\n          yield {\n            progress: tracker.progress\n          };\n        }\n        fillArray1D(area, this._sideSize, 0);\n        fillArray1D(areaRed, this._sideSize, 0);\n        fillArray1D(areaGreen, this._sideSize, 0);\n        fillArray1D(areaBlue, this._sideSize, 0);\n        fillArray1D(areaAlpha, this._sideSize, 0);\n        fillArray1D(area2, this._sideSize, 0);\n        for (let greenIndex = 1; greenIndex <= this._maxSideIndex; ++greenIndex) {\n          let line = 0;\n          let lineRed = 0;\n          let lineGreen = 0;\n          let lineBlue = 0;\n          let lineAlpha = 0;\n          let line2 = 0;\n          for (let blueIndex = 1; blueIndex <= this._maxSideIndex; ++blueIndex) {\n            line += this._weights[alphaIndex][redIndex][greenIndex][blueIndex];\n            lineRed += this._momentsRed[alphaIndex][redIndex][greenIndex][blueIndex];\n            lineGreen += this._momentsGreen[alphaIndex][redIndex][greenIndex][blueIndex];\n            lineBlue += this._momentsBlue[alphaIndex][redIndex][greenIndex][blueIndex];\n            lineAlpha += this._momentsAlpha[alphaIndex][redIndex][greenIndex][blueIndex];\n            line2 += this._moments[alphaIndex][redIndex][greenIndex][blueIndex];\n            area[blueIndex] += line;\n            areaRed[blueIndex] += lineRed;\n            areaGreen[blueIndex] += lineGreen;\n            areaBlue[blueIndex] += lineBlue;\n            areaAlpha[blueIndex] += lineAlpha;\n            area2[blueIndex] += line2;\n            xarea[redIndex][greenIndex][blueIndex] = xarea[redIndex - 1][greenIndex][blueIndex] + area[blueIndex];\n            xareaRed[redIndex][greenIndex][blueIndex] = xareaRed[redIndex - 1][greenIndex][blueIndex] + areaRed[blueIndex];\n            xareaGreen[redIndex][greenIndex][blueIndex] = xareaGreen[redIndex - 1][greenIndex][blueIndex] + areaGreen[blueIndex];\n            xareaBlue[redIndex][greenIndex][blueIndex] = xareaBlue[redIndex - 1][greenIndex][blueIndex] + areaBlue[blueIndex];\n            xareaAlpha[redIndex][greenIndex][blueIndex] = xareaAlpha[redIndex - 1][greenIndex][blueIndex] + areaAlpha[blueIndex];\n            xarea2[redIndex][greenIndex][blueIndex] = xarea2[redIndex - 1][greenIndex][blueIndex] + area2[blueIndex];\n            this._weights[alphaIndex][redIndex][greenIndex][blueIndex] = this._weights[alphaIndex - 1][redIndex][greenIndex][blueIndex] + xarea[redIndex][greenIndex][blueIndex];\n            this._momentsRed[alphaIndex][redIndex][greenIndex][blueIndex] = this._momentsRed[alphaIndex - 1][redIndex][greenIndex][blueIndex] + xareaRed[redIndex][greenIndex][blueIndex];\n            this._momentsGreen[alphaIndex][redIndex][greenIndex][blueIndex] = this._momentsGreen[alphaIndex - 1][redIndex][greenIndex][blueIndex] + xareaGreen[redIndex][greenIndex][blueIndex];\n            this._momentsBlue[alphaIndex][redIndex][greenIndex][blueIndex] = this._momentsBlue[alphaIndex - 1][redIndex][greenIndex][blueIndex] + xareaBlue[redIndex][greenIndex][blueIndex];\n            this._momentsAlpha[alphaIndex][redIndex][greenIndex][blueIndex] = this._momentsAlpha[alphaIndex - 1][redIndex][greenIndex][blueIndex] + xareaAlpha[redIndex][greenIndex][blueIndex];\n            this._moments[alphaIndex][redIndex][greenIndex][blueIndex] = this._moments[alphaIndex - 1][redIndex][greenIndex][blueIndex] + xarea2[redIndex][greenIndex][blueIndex];\n          }\n        }\n      }\n    }\n  }\n  static _volumeFloat(cube, moment) {\n    return moment[cube.alphaMaximum][cube.redMaximum][cube.greenMaximum][cube.blueMaximum] - moment[cube.alphaMaximum][cube.redMaximum][cube.greenMinimum][cube.blueMaximum] - moment[cube.alphaMaximum][cube.redMinimum][cube.greenMaximum][cube.blueMaximum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] - moment[cube.alphaMinimum][cube.redMaximum][cube.greenMaximum][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMaximum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] - (moment[cube.alphaMaximum][cube.redMaximum][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMaximum][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMaximum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] - moment[cube.alphaMaximum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum]);\n  }\n  static _volume(cube, moment) {\n    return _WuQuant._volumeFloat(cube, moment) | 0;\n  }\n  static _top(cube, direction, position, moment) {\n    let result;\n    switch (direction) {\n      case _WuQuant._alpha:\n        result = moment[position][cube.redMaximum][cube.greenMaximum][cube.blueMaximum] - moment[position][cube.redMaximum][cube.greenMinimum][cube.blueMaximum] - moment[position][cube.redMinimum][cube.greenMaximum][cube.blueMaximum] + moment[position][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] - (moment[position][cube.redMaximum][cube.greenMaximum][cube.blueMinimum] - moment[position][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] - moment[position][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] + moment[position][cube.redMinimum][cube.greenMinimum][cube.blueMinimum]);\n        break;\n      case _WuQuant._red:\n        result = moment[cube.alphaMaximum][position][cube.greenMaximum][cube.blueMaximum] - moment[cube.alphaMaximum][position][cube.greenMinimum][cube.blueMaximum] - moment[cube.alphaMinimum][position][cube.greenMaximum][cube.blueMaximum] + moment[cube.alphaMinimum][position][cube.greenMinimum][cube.blueMaximum] - (moment[cube.alphaMaximum][position][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMaximum][position][cube.greenMinimum][cube.blueMinimum] - moment[cube.alphaMinimum][position][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMinimum][position][cube.greenMinimum][cube.blueMinimum]);\n        break;\n      case _WuQuant._green:\n        result = moment[cube.alphaMaximum][cube.redMaximum][position][cube.blueMaximum] - moment[cube.alphaMaximum][cube.redMinimum][position][cube.blueMaximum] - moment[cube.alphaMinimum][cube.redMaximum][position][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMinimum][position][cube.blueMaximum] - (moment[cube.alphaMaximum][cube.redMaximum][position][cube.blueMinimum] - moment[cube.alphaMaximum][cube.redMinimum][position][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMaximum][position][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMinimum][position][cube.blueMinimum]);\n        break;\n      case _WuQuant._blue:\n        result = moment[cube.alphaMaximum][cube.redMaximum][cube.greenMaximum][position] - moment[cube.alphaMaximum][cube.redMaximum][cube.greenMinimum][position] - moment[cube.alphaMaximum][cube.redMinimum][cube.greenMaximum][position] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][position] - (moment[cube.alphaMinimum][cube.redMaximum][cube.greenMaximum][position] - moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][position] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][position] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][position]);\n        break;\n      default:\n        throw new Error(\"impossible\");\n    }\n    return result | 0;\n  }\n  static _bottom(cube, direction, moment) {\n    switch (direction) {\n      case _WuQuant._alpha:\n        return -moment[cube.alphaMinimum][cube.redMaximum][cube.greenMaximum][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMaximum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] - (-moment[cube.alphaMinimum][cube.redMaximum][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum]);\n      case _WuQuant._red:\n        return -moment[cube.alphaMaximum][cube.redMinimum][cube.greenMaximum][cube.blueMaximum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMaximum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] - (-moment[cube.alphaMaximum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum]);\n      case _WuQuant._green:\n        return -moment[cube.alphaMaximum][cube.redMaximum][cube.greenMinimum][cube.blueMaximum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMaximum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMaximum] - (-moment[cube.alphaMaximum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum]);\n      case _WuQuant._blue:\n        return -moment[cube.alphaMaximum][cube.redMaximum][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMaximum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMaximum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMaximum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum] - (-moment[cube.alphaMinimum][cube.redMaximum][cube.greenMaximum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMaximum][cube.greenMinimum][cube.blueMinimum] + moment[cube.alphaMinimum][cube.redMinimum][cube.greenMaximum][cube.blueMinimum] - moment[cube.alphaMinimum][cube.redMinimum][cube.greenMinimum][cube.blueMinimum]);\n      default:\n        return 0;\n    }\n  }\n  _calculateVariance(cube) {\n    const volumeRed = _WuQuant._volume(cube, this._momentsRed);\n    const volumeGreen = _WuQuant._volume(cube, this._momentsGreen);\n    const volumeBlue = _WuQuant._volume(cube, this._momentsBlue);\n    const volumeAlpha = _WuQuant._volume(cube, this._momentsAlpha);\n    const volumeMoment = _WuQuant._volumeFloat(cube, this._moments);\n    const volumeWeight = _WuQuant._volume(cube, this._weights);\n    const distance = volumeRed * volumeRed + volumeGreen * volumeGreen + volumeBlue * volumeBlue + volumeAlpha * volumeAlpha;\n    return volumeMoment - distance / volumeWeight;\n  }\n  _maximize(cube, direction, first, last, wholeRed, wholeGreen, wholeBlue, wholeAlpha, wholeWeight) {\n    const bottomRed = _WuQuant._bottom(cube, direction, this._momentsRed) | 0;\n    const bottomGreen = _WuQuant._bottom(cube, direction, this._momentsGreen) | 0;\n    const bottomBlue = _WuQuant._bottom(cube, direction, this._momentsBlue) | 0;\n    const bottomAlpha = _WuQuant._bottom(cube, direction, this._momentsAlpha) | 0;\n    const bottomWeight = _WuQuant._bottom(cube, direction, this._weights) | 0;\n    let result = 0;\n    let cutPosition = -1;\n    for (let position = first; position < last; ++position) {\n      let halfRed = bottomRed + _WuQuant._top(cube, direction, position, this._momentsRed);\n      let halfGreen = bottomGreen + _WuQuant._top(cube, direction, position, this._momentsGreen);\n      let halfBlue = bottomBlue + _WuQuant._top(cube, direction, position, this._momentsBlue);\n      let halfAlpha = bottomAlpha + _WuQuant._top(cube, direction, position, this._momentsAlpha);\n      let halfWeight = bottomWeight + _WuQuant._top(cube, direction, position, this._weights);\n      if (halfWeight !== 0) {\n        let halfDistance = halfRed * halfRed + halfGreen * halfGreen + halfBlue * halfBlue + halfAlpha * halfAlpha;\n        let temp = halfDistance / halfWeight;\n        halfRed = wholeRed - halfRed;\n        halfGreen = wholeGreen - halfGreen;\n        halfBlue = wholeBlue - halfBlue;\n        halfAlpha = wholeAlpha - halfAlpha;\n        halfWeight = wholeWeight - halfWeight;\n        if (halfWeight !== 0) {\n          halfDistance = halfRed * halfRed + halfGreen * halfGreen + halfBlue * halfBlue + halfAlpha * halfAlpha;\n          temp += halfDistance / halfWeight;\n          if (temp > result) {\n            result = temp;\n            cutPosition = position;\n          }\n        }\n      }\n    }\n    return { max: result, position: cutPosition };\n  }\n  _cut(first, second) {\n    let direction;\n    const wholeRed = _WuQuant._volume(first, this._momentsRed);\n    const wholeGreen = _WuQuant._volume(first, this._momentsGreen);\n    const wholeBlue = _WuQuant._volume(first, this._momentsBlue);\n    const wholeAlpha = _WuQuant._volume(first, this._momentsAlpha);\n    const wholeWeight = _WuQuant._volume(first, this._weights);\n    const red = this._maximize(first, _WuQuant._red, first.redMinimum + 1, first.redMaximum, wholeRed, wholeGreen, wholeBlue, wholeAlpha, wholeWeight);\n    const green = this._maximize(first, _WuQuant._green, first.greenMinimum + 1, first.greenMaximum, wholeRed, wholeGreen, wholeBlue, wholeAlpha, wholeWeight);\n    const blue = this._maximize(first, _WuQuant._blue, first.blueMinimum + 1, first.blueMaximum, wholeRed, wholeGreen, wholeBlue, wholeAlpha, wholeWeight);\n    const alpha = this._maximize(first, _WuQuant._alpha, first.alphaMinimum + 1, first.alphaMaximum, wholeRed, wholeGreen, wholeBlue, wholeAlpha, wholeWeight);\n    if (alpha.max >= red.max && alpha.max >= green.max && alpha.max >= blue.max) {\n      direction = _WuQuant._alpha;\n      if (alpha.position < 0)\n        return false;\n    } else if (red.max >= alpha.max && red.max >= green.max && red.max >= blue.max) {\n      direction = _WuQuant._red;\n    } else if (green.max >= alpha.max && green.max >= red.max && green.max >= blue.max) {\n      direction = _WuQuant._green;\n    } else {\n      direction = _WuQuant._blue;\n    }\n    second.redMaximum = first.redMaximum;\n    second.greenMaximum = first.greenMaximum;\n    second.blueMaximum = first.blueMaximum;\n    second.alphaMaximum = first.alphaMaximum;\n    switch (direction) {\n      case _WuQuant._red:\n        second.redMinimum = first.redMaximum = red.position;\n        second.greenMinimum = first.greenMinimum;\n        second.blueMinimum = first.blueMinimum;\n        second.alphaMinimum = first.alphaMinimum;\n        break;\n      case _WuQuant._green:\n        second.greenMinimum = first.greenMaximum = green.position;\n        second.redMinimum = first.redMinimum;\n        second.blueMinimum = first.blueMinimum;\n        second.alphaMinimum = first.alphaMinimum;\n        break;\n      case _WuQuant._blue:\n        second.blueMinimum = first.blueMaximum = blue.position;\n        second.redMinimum = first.redMinimum;\n        second.greenMinimum = first.greenMinimum;\n        second.alphaMinimum = first.alphaMinimum;\n        break;\n      case _WuQuant._alpha:\n        second.alphaMinimum = first.alphaMaximum = alpha.position;\n        second.blueMinimum = first.blueMinimum;\n        second.redMinimum = first.redMinimum;\n        second.greenMinimum = first.greenMinimum;\n        break;\n    }\n    first.volume = (first.redMaximum - first.redMinimum) * (first.greenMaximum - first.greenMinimum) * (first.blueMaximum - first.blueMinimum) * (first.alphaMaximum - first.alphaMinimum);\n    second.volume = (second.redMaximum - second.redMinimum) * (second.greenMaximum - second.greenMinimum) * (second.blueMaximum - second.blueMinimum) * (second.alphaMaximum - second.alphaMinimum);\n    return true;\n  }\n  _initialize(colors) {\n    this._colors = colors;\n    this._cubes = [];\n    for (let cubeIndex = 0; cubeIndex < colors; cubeIndex++) {\n      this._cubes[cubeIndex] = new WuColorCube();\n    }\n    this._cubes[0].redMinimum = 0;\n    this._cubes[0].greenMinimum = 0;\n    this._cubes[0].blueMinimum = 0;\n    this._cubes[0].alphaMinimum = 0;\n    this._cubes[0].redMaximum = this._maxSideIndex;\n    this._cubes[0].greenMaximum = this._maxSideIndex;\n    this._cubes[0].blueMaximum = this._maxSideIndex;\n    this._cubes[0].alphaMaximum = this._alphaMaxSideIndex;\n    this._weights = createArray4D(this._alphaSideSize, this._sideSize, this._sideSize, this._sideSize);\n    this._momentsRed = createArray4D(this._alphaSideSize, this._sideSize, this._sideSize, this._sideSize);\n    this._momentsGreen = createArray4D(this._alphaSideSize, this._sideSize, this._sideSize, this._sideSize);\n    this._momentsBlue = createArray4D(this._alphaSideSize, this._sideSize, this._sideSize, this._sideSize);\n    this._momentsAlpha = createArray4D(this._alphaSideSize, this._sideSize, this._sideSize, this._sideSize);\n    this._moments = createArray4D(this._alphaSideSize, this._sideSize, this._sideSize, this._sideSize);\n    this._table = [];\n    for (let tableIndex = 0; tableIndex < 256; ++tableIndex) {\n      this._table[tableIndex] = tableIndex * tableIndex;\n    }\n    this._pixels = [];\n  }\n  _setQuality(significantBitsPerChannel = 5) {\n    this._significantBitsPerChannel = significantBitsPerChannel;\n    this._maxSideIndex = 1 << this._significantBitsPerChannel;\n    this._alphaMaxSideIndex = this._maxSideIndex;\n    this._sideSize = this._maxSideIndex + 1;\n    this._alphaSideSize = this._alphaMaxSideIndex + 1;\n  }\n};\nvar WuQuant = _WuQuant;\n__publicField(WuQuant, \"_alpha\", 3);\n__publicField(WuQuant, \"_red\", 2);\n__publicField(WuQuant, \"_green\", 1);\n__publicField(WuQuant, \"_blue\", 0);\n\n// src/image/index.ts\nvar image_exports = {};\n__export(image_exports, {\n  AbstractImageQuantizer: () => AbstractImageQuantizer,\n  ErrorDiffusionArray: () => ErrorDiffusionArray,\n  ErrorDiffusionArrayKernel: () => ErrorDiffusionArrayKernel,\n  ErrorDiffusionRiemersma: () => ErrorDiffusionRiemersma,\n  NearestColor: () => NearestColor\n});\n\n// src/image/imageQuantizer.ts\nvar AbstractImageQuantizer = class {\n  quantizeSync(pointContainer, palette) {\n    for (const value of this.quantize(pointContainer, palette)) {\n      if (value.pointContainer) {\n        return value.pointContainer;\n      }\n    }\n    throw new Error(\"unreachable\");\n  }\n};\n\n// src/image/nearestColor.ts\nvar NearestColor = class extends AbstractImageQuantizer {\n  constructor(colorDistanceCalculator) {\n    super();\n    __publicField(this, \"_distance\");\n    this._distance = colorDistanceCalculator;\n  }\n  *quantize(pointContainer, palette) {\n    const pointArray = pointContainer.getPointArray();\n    const width = pointContainer.getWidth();\n    const height = pointContainer.getHeight();\n    const tracker = new ProgressTracker(height, 99);\n    for (let y2 = 0; y2 < height; y2++) {\n      if (tracker.shouldNotify(y2)) {\n        yield {\n          progress: tracker.progress\n        };\n      }\n      for (let x2 = 0, idx = y2 * width; x2 < width; x2++, idx++) {\n        const point = pointArray[idx];\n        point.from(palette.getNearestColor(this._distance, point));\n      }\n    }\n    yield {\n      pointContainer,\n      progress: 100\n    };\n  }\n};\n\n// src/image/array.ts\nvar ErrorDiffusionArrayKernel = /* @__PURE__ */ ((ErrorDiffusionArrayKernel2) => {\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"FloydSteinberg\"] = 0] = \"FloydSteinberg\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"FalseFloydSteinberg\"] = 1] = \"FalseFloydSteinberg\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"Stucki\"] = 2] = \"Stucki\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"Atkinson\"] = 3] = \"Atkinson\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"Jarvis\"] = 4] = \"Jarvis\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"Burkes\"] = 5] = \"Burkes\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"Sierra\"] = 6] = \"Sierra\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"TwoSierra\"] = 7] = \"TwoSierra\";\n  ErrorDiffusionArrayKernel2[ErrorDiffusionArrayKernel2[\"SierraLite\"] = 8] = \"SierraLite\";\n  return ErrorDiffusionArrayKernel2;\n})(ErrorDiffusionArrayKernel || {});\nvar ErrorDiffusionArray = class extends AbstractImageQuantizer {\n  constructor(colorDistanceCalculator, kernel, serpentine = true, minimumColorDistanceToDither = 0, calculateErrorLikeGIMP = false) {\n    super();\n    __publicField(this, \"_minColorDistance\");\n    __publicField(this, \"_serpentine\");\n    __publicField(this, \"_kernel\");\n    __publicField(this, \"_calculateErrorLikeGIMP\");\n    __publicField(this, \"_distance\");\n    this._setKernel(kernel);\n    this._distance = colorDistanceCalculator;\n    this._minColorDistance = minimumColorDistanceToDither;\n    this._serpentine = serpentine;\n    this._calculateErrorLikeGIMP = calculateErrorLikeGIMP;\n  }\n  *quantize(pointContainer, palette) {\n    const pointArray = pointContainer.getPointArray();\n    const originalPoint = new Point();\n    const width = pointContainer.getWidth();\n    const height = pointContainer.getHeight();\n    const errorLines = [];\n    let dir = 1;\n    let maxErrorLines = 1;\n    for (const kernel of this._kernel) {\n      const kernelErrorLines = kernel[2] + 1;\n      if (maxErrorLines < kernelErrorLines)\n        maxErrorLines = kernelErrorLines;\n    }\n    for (let i = 0; i < maxErrorLines; i++) {\n      this._fillErrorLine(errorLines[i] = [], width);\n    }\n    const tracker = new ProgressTracker(height, 99);\n    for (let y2 = 0; y2 < height; y2++) {\n      if (tracker.shouldNotify(y2)) {\n        yield {\n          progress: tracker.progress\n        };\n      }\n      if (this._serpentine)\n        dir *= -1;\n      const lni = y2 * width;\n      const xStart = dir === 1 ? 0 : width - 1;\n      const xEnd = dir === 1 ? width : -1;\n      this._fillErrorLine(errorLines[0], width);\n      errorLines.push(errorLines.shift());\n      const errorLine = errorLines[0];\n      for (let x2 = xStart, idx = lni + xStart; x2 !== xEnd; x2 += dir, idx += dir) {\n        const point = pointArray[idx];\n        const error = errorLine[x2];\n        originalPoint.from(point);\n        const correctedPoint = Point.createByRGBA(inRange0to255Rounded(point.r + error[0]), inRange0to255Rounded(point.g + error[1]), inRange0to255Rounded(point.b + error[2]), inRange0to255Rounded(point.a + error[3]));\n        const palettePoint = palette.getNearestColor(this._distance, correctedPoint);\n        point.from(palettePoint);\n        if (this._minColorDistance) {\n          const dist = this._distance.calculateNormalized(originalPoint, palettePoint);\n          if (dist < this._minColorDistance)\n            continue;\n        }\n        let er;\n        let eg;\n        let eb;\n        let ea;\n        if (this._calculateErrorLikeGIMP) {\n          er = correctedPoint.r - palettePoint.r;\n          eg = correctedPoint.g - palettePoint.g;\n          eb = correctedPoint.b - palettePoint.b;\n          ea = correctedPoint.a - palettePoint.a;\n        } else {\n          er = originalPoint.r - palettePoint.r;\n          eg = originalPoint.g - palettePoint.g;\n          eb = originalPoint.b - palettePoint.b;\n          ea = originalPoint.a - palettePoint.a;\n        }\n        const dStart = dir === 1 ? 0 : this._kernel.length - 1;\n        const dEnd = dir === 1 ? this._kernel.length : -1;\n        for (let i = dStart; i !== dEnd; i += dir) {\n          const x1 = this._kernel[i][1] * dir;\n          const y1 = this._kernel[i][2];\n          if (x1 + x2 >= 0 && x1 + x2 < width && y1 + y2 >= 0 && y1 + y2 < height) {\n            const d = this._kernel[i][0];\n            const e = errorLines[y1][x1 + x2];\n            e[0] += er * d;\n            e[1] += eg * d;\n            e[2] += eb * d;\n            e[3] += ea * d;\n          }\n        }\n      }\n    }\n    yield {\n      pointContainer,\n      progress: 100\n    };\n  }\n  _fillErrorLine(errorLine, width) {\n    if (errorLine.length > width) {\n      errorLine.length = width;\n    }\n    const l = errorLine.length;\n    for (let i = 0; i < l; i++) {\n      const error = errorLine[i];\n      error[0] = error[1] = error[2] = error[3] = 0;\n    }\n    for (let i = l; i < width; i++) {\n      errorLine[i] = [0, 0, 0, 0];\n    }\n  }\n  _setKernel(kernel) {\n    switch (kernel) {\n      case 0 /* FloydSteinberg */:\n        this._kernel = [\n          [7 / 16, 1, 0],\n          [3 / 16, -1, 1],\n          [5 / 16, 0, 1],\n          [1 / 16, 1, 1]\n        ];\n        break;\n      case 1 /* FalseFloydSteinberg */:\n        this._kernel = [\n          [3 / 8, 1, 0],\n          [3 / 8, 0, 1],\n          [2 / 8, 1, 1]\n        ];\n        break;\n      case 2 /* Stucki */:\n        this._kernel = [\n          [8 / 42, 1, 0],\n          [4 / 42, 2, 0],\n          [2 / 42, -2, 1],\n          [4 / 42, -1, 1],\n          [8 / 42, 0, 1],\n          [4 / 42, 1, 1],\n          [2 / 42, 2, 1],\n          [1 / 42, -2, 2],\n          [2 / 42, -1, 2],\n          [4 / 42, 0, 2],\n          [2 / 42, 1, 2],\n          [1 / 42, 2, 2]\n        ];\n        break;\n      case 3 /* Atkinson */:\n        this._kernel = [\n          [1 / 8, 1, 0],\n          [1 / 8, 2, 0],\n          [1 / 8, -1, 1],\n          [1 / 8, 0, 1],\n          [1 / 8, 1, 1],\n          [1 / 8, 0, 2]\n        ];\n        break;\n      case 4 /* Jarvis */:\n        this._kernel = [\n          [7 / 48, 1, 0],\n          [5 / 48, 2, 0],\n          [3 / 48, -2, 1],\n          [5 / 48, -1, 1],\n          [7 / 48, 0, 1],\n          [5 / 48, 1, 1],\n          [3 / 48, 2, 1],\n          [1 / 48, -2, 2],\n          [3 / 48, -1, 2],\n          [5 / 48, 0, 2],\n          [3 / 48, 1, 2],\n          [1 / 48, 2, 2]\n        ];\n        break;\n      case 5 /* Burkes */:\n        this._kernel = [\n          [8 / 32, 1, 0],\n          [4 / 32, 2, 0],\n          [2 / 32, -2, 1],\n          [4 / 32, -1, 1],\n          [8 / 32, 0, 1],\n          [4 / 32, 1, 1],\n          [2 / 32, 2, 1]\n        ];\n        break;\n      case 6 /* Sierra */:\n        this._kernel = [\n          [5 / 32, 1, 0],\n          [3 / 32, 2, 0],\n          [2 / 32, -2, 1],\n          [4 / 32, -1, 1],\n          [5 / 32, 0, 1],\n          [4 / 32, 1, 1],\n          [2 / 32, 2, 1],\n          [2 / 32, -1, 2],\n          [3 / 32, 0, 2],\n          [2 / 32, 1, 2]\n        ];\n        break;\n      case 7 /* TwoSierra */:\n        this._kernel = [\n          [4 / 16, 1, 0],\n          [3 / 16, 2, 0],\n          [1 / 16, -2, 1],\n          [2 / 16, -1, 1],\n          [3 / 16, 0, 1],\n          [2 / 16, 1, 1],\n          [1 / 16, 2, 1]\n        ];\n        break;\n      case 8 /* SierraLite */:\n        this._kernel = [\n          [2 / 4, 1, 0],\n          [1 / 4, -1, 1],\n          [1 / 4, 0, 1]\n        ];\n        break;\n      default:\n        throw new Error(`ErrorDiffusionArray: unknown kernel = ${kernel}`);\n    }\n  }\n};\n\n// src/image/spaceFillingCurves/hilbertCurve.ts\nfunction* hilbertCurve(width, height, callback) {\n  const maxBound = Math.max(width, height);\n  const level = Math.floor(Math.log(maxBound) / Math.log(2) + 1);\n  const tracker = new ProgressTracker(width * height, 99);\n  const data = {\n    width,\n    height,\n    level,\n    callback,\n    tracker,\n    index: 0,\n    x: 0,\n    y: 0\n  };\n  yield* walkHilbert(data, 1 /* UP */);\n  visit(data, 0 /* NONE */);\n}\nfunction* walkHilbert(data, direction) {\n  if (data.level < 1)\n    return;\n  if (data.tracker.shouldNotify(data.index)) {\n    yield { progress: data.tracker.progress };\n  }\n  data.level--;\n  switch (direction) {\n    case 2 /* LEFT */:\n      yield* walkHilbert(data, 1 /* UP */);\n      visit(data, 3 /* RIGHT */);\n      yield* walkHilbert(data, 2 /* LEFT */);\n      visit(data, 4 /* DOWN */);\n      yield* walkHilbert(data, 2 /* LEFT */);\n      visit(data, 2 /* LEFT */);\n      yield* walkHilbert(data, 4 /* DOWN */);\n      break;\n    case 3 /* RIGHT */:\n      yield* walkHilbert(data, 4 /* DOWN */);\n      visit(data, 2 /* LEFT */);\n      yield* walkHilbert(data, 3 /* RIGHT */);\n      visit(data, 1 /* UP */);\n      yield* walkHilbert(data, 3 /* RIGHT */);\n      visit(data, 3 /* RIGHT */);\n      yield* walkHilbert(data, 1 /* UP */);\n      break;\n    case 1 /* UP */:\n      yield* walkHilbert(data, 2 /* LEFT */);\n      visit(data, 4 /* DOWN */);\n      yield* walkHilbert(data, 1 /* UP */);\n      visit(data, 3 /* RIGHT */);\n      yield* walkHilbert(data, 1 /* UP */);\n      visit(data, 1 /* UP */);\n      yield* walkHilbert(data, 3 /* RIGHT */);\n      break;\n    case 4 /* DOWN */:\n      yield* walkHilbert(data, 3 /* RIGHT */);\n      visit(data, 1 /* UP */);\n      yield* walkHilbert(data, 4 /* DOWN */);\n      visit(data, 2 /* LEFT */);\n      yield* walkHilbert(data, 4 /* DOWN */);\n      visit(data, 4 /* DOWN */);\n      yield* walkHilbert(data, 2 /* LEFT */);\n      break;\n    default:\n      break;\n  }\n  data.level++;\n}\nfunction visit(data, direction) {\n  if (data.x >= 0 && data.x < data.width && data.y >= 0 && data.y < data.height) {\n    data.callback(data.x, data.y);\n    data.index++;\n  }\n  switch (direction) {\n    case 2 /* LEFT */:\n      data.x--;\n      break;\n    case 3 /* RIGHT */:\n      data.x++;\n      break;\n    case 1 /* UP */:\n      data.y--;\n      break;\n    case 4 /* DOWN */:\n      data.y++;\n      break;\n  }\n}\n\n// src/image/riemersma.ts\nvar ErrorDiffusionRiemersma = class extends AbstractImageQuantizer {\n  constructor(colorDistanceCalculator, errorQueueSize = 16, errorPropagation = 1) {\n    super();\n    __publicField(this, \"_distance\");\n    __publicField(this, \"_weights\");\n    __publicField(this, \"_errorQueueSize\");\n    this._distance = colorDistanceCalculator;\n    this._errorQueueSize = errorQueueSize;\n    this._weights = ErrorDiffusionRiemersma._createWeights(errorPropagation, errorQueueSize);\n  }\n  *quantize(pointContainer, palette) {\n    const pointArray = pointContainer.getPointArray();\n    const width = pointContainer.getWidth();\n    const height = pointContainer.getHeight();\n    const errorQueue = [];\n    let head = 0;\n    for (let i = 0; i < this._errorQueueSize; i++) {\n      errorQueue[i] = { r: 0, g: 0, b: 0, a: 0 };\n    }\n    yield* hilbertCurve(width, height, (x2, y2) => {\n      const p = pointArray[x2 + y2 * width];\n      let { r, g, b, a } = p;\n      for (let i = 0; i < this._errorQueueSize; i++) {\n        const weight = this._weights[i];\n        const e = errorQueue[(i + head) % this._errorQueueSize];\n        r += e.r * weight;\n        g += e.g * weight;\n        b += e.b * weight;\n        a += e.a * weight;\n      }\n      const correctedPoint = Point.createByRGBA(inRange0to255Rounded(r), inRange0to255Rounded(g), inRange0to255Rounded(b), inRange0to255Rounded(a));\n      const quantizedPoint = palette.getNearestColor(this._distance, correctedPoint);\n      head = (head + 1) % this._errorQueueSize;\n      const tail = (head + this._errorQueueSize - 1) % this._errorQueueSize;\n      errorQueue[tail].r = p.r - quantizedPoint.r;\n      errorQueue[tail].g = p.g - quantizedPoint.g;\n      errorQueue[tail].b = p.b - quantizedPoint.b;\n      errorQueue[tail].a = p.a - quantizedPoint.a;\n      p.from(quantizedPoint);\n    });\n    yield {\n      pointContainer,\n      progress: 100\n    };\n  }\n  static _createWeights(errorPropagation, errorQueueSize) {\n    const weights = [];\n    const multiplier = Math.exp(Math.log(errorQueueSize) / (errorQueueSize - 1));\n    for (let i = 0, next = 1; i < errorQueueSize; i++) {\n      weights[i] = (next + 0.5 | 0) / errorQueueSize * errorPropagation;\n      next *= multiplier;\n    }\n    return weights;\n  }\n};\n\n// src/quality/index.ts\nvar quality_exports = {};\n__export(quality_exports, {\n  ssim: () => ssim\n});\n\n// src/quality/ssim.ts\nvar K1 = 0.01;\nvar K2 = 0.03;\nfunction ssim(image1, image2) {\n  if (image1.getHeight() !== image2.getHeight() || image1.getWidth() !== image2.getWidth()) {\n    throw new Error(\"Images have different sizes!\");\n  }\n  const bitsPerComponent = 8;\n  const L = (1 << bitsPerComponent) - 1;\n  const c1 = (K1 * L) ** 2;\n  const c2 = (K2 * L) ** 2;\n  let numWindows = 0;\n  let mssim = 0;\n  iterate(image1, image2, (lumaValues1, lumaValues2, averageLumaValue1, averageLumaValue2) => {\n    let sigxy = 0;\n    let sigsqx = 0;\n    let sigsqy = 0;\n    for (let i = 0; i < lumaValues1.length; i++) {\n      sigsqx += (lumaValues1[i] - averageLumaValue1) ** 2;\n      sigsqy += (lumaValues2[i] - averageLumaValue2) ** 2;\n      sigxy += (lumaValues1[i] - averageLumaValue1) * (lumaValues2[i] - averageLumaValue2);\n    }\n    const numPixelsInWin = lumaValues1.length - 1;\n    sigsqx /= numPixelsInWin;\n    sigsqy /= numPixelsInWin;\n    sigxy /= numPixelsInWin;\n    const numerator = (2 * averageLumaValue1 * averageLumaValue2 + c1) * (2 * sigxy + c2);\n    const denominator = (averageLumaValue1 ** 2 + averageLumaValue2 ** 2 + c1) * (sigsqx + sigsqy + c2);\n    const ssim2 = numerator / denominator;\n    mssim += ssim2;\n    numWindows++;\n  });\n  return mssim / numWindows;\n}\nfunction iterate(image1, image2, callback) {\n  const windowSize = 8;\n  const width = image1.getWidth();\n  const height = image1.getHeight();\n  for (let y2 = 0; y2 < height; y2 += windowSize) {\n    for (let x2 = 0; x2 < width; x2 += windowSize) {\n      const windowWidth = Math.min(windowSize, width - x2);\n      const windowHeight = Math.min(windowSize, height - y2);\n      const lumaValues1 = calculateLumaValuesForWindow(image1, x2, y2, windowWidth, windowHeight);\n      const lumaValues2 = calculateLumaValuesForWindow(image2, x2, y2, windowWidth, windowHeight);\n      const averageLuma1 = calculateAverageLuma(lumaValues1);\n      const averageLuma2 = calculateAverageLuma(lumaValues2);\n      callback(lumaValues1, lumaValues2, averageLuma1, averageLuma2);\n    }\n  }\n}\nfunction calculateLumaValuesForWindow(image, x2, y2, width, height) {\n  const pointArray = image.getPointArray();\n  const lumaValues = [];\n  let counter = 0;\n  for (let j = y2; j < y2 + height; j++) {\n    const offset = j * image.getWidth();\n    for (let i = x2; i < x2 + width; i++) {\n      const point = pointArray[offset + i];\n      lumaValues[counter] = point.r * 0.2126 /* RED */ + point.g * 0.7152 /* GREEN */ + point.b * 0.0722 /* BLUE */;\n      counter++;\n    }\n  }\n  return lumaValues;\n}\nfunction calculateAverageLuma(lumaValues) {\n  let sumLuma = 0;\n  for (const luma of lumaValues) {\n    sumLuma += luma;\n  }\n  return sumLuma / lumaValues.length;\n}\n\n// src/basicAPI.ts\nvar setImmediateImpl = typeof setImmediate === \"function\" ? setImmediate : typeof process !== \"undefined\" && typeof (process == null ? void 0 : process.nextTick) === \"function\" ? (callback) => process.nextTick(callback) : (callback) => setTimeout(callback, 0);\nfunction buildPaletteSync(images, {\n  colorDistanceFormula,\n  paletteQuantization,\n  colors\n} = {}) {\n  const distanceCalculator = colorDistanceFormulaToColorDistance(colorDistanceFormula);\n  const paletteQuantizer = paletteQuantizationToPaletteQuantizer(distanceCalculator, paletteQuantization, colors);\n  images.forEach((image) => paletteQuantizer.sample(image));\n  return paletteQuantizer.quantizeSync();\n}\nasync function buildPalette(images, {\n  colorDistanceFormula,\n  paletteQuantization,\n  colors,\n  onProgress\n} = {}) {\n  return new Promise((resolve, reject) => {\n    const distanceCalculator = colorDistanceFormulaToColorDistance(colorDistanceFormula);\n    const paletteQuantizer = paletteQuantizationToPaletteQuantizer(distanceCalculator, paletteQuantization, colors);\n    images.forEach((image) => paletteQuantizer.sample(image));\n    let palette;\n    const iterator = paletteQuantizer.quantize();\n    const next = () => {\n      try {\n        const result = iterator.next();\n        if (result.done) {\n          resolve(palette);\n        } else {\n          if (result.value.palette)\n            palette = result.value.palette;\n          if (onProgress)\n            onProgress(result.value.progress);\n          setImmediateImpl(next);\n        }\n      } catch (error) {\n        reject(error);\n      }\n    };\n    setImmediateImpl(next);\n  });\n}\nfunction applyPaletteSync(image, palette, { colorDistanceFormula, imageQuantization } = {}) {\n  const distanceCalculator = colorDistanceFormulaToColorDistance(colorDistanceFormula);\n  const imageQuantizer = imageQuantizationToImageQuantizer(distanceCalculator, imageQuantization);\n  return imageQuantizer.quantizeSync(image, palette);\n}\nasync function applyPalette(image, palette, {\n  colorDistanceFormula,\n  imageQuantization,\n  onProgress\n} = {}) {\n  return new Promise((resolve, reject) => {\n    const distanceCalculator = colorDistanceFormulaToColorDistance(colorDistanceFormula);\n    const imageQuantizer = imageQuantizationToImageQuantizer(distanceCalculator, imageQuantization);\n    let outPointContainer;\n    const iterator = imageQuantizer.quantize(image, palette);\n    const next = () => {\n      try {\n        const result = iterator.next();\n        if (result.done) {\n          resolve(outPointContainer);\n        } else {\n          if (result.value.pointContainer) {\n            outPointContainer = result.value.pointContainer;\n          }\n          if (onProgress)\n            onProgress(result.value.progress);\n          setImmediateImpl(next);\n        }\n      } catch (error) {\n        reject(error);\n      }\n    };\n    setImmediateImpl(next);\n  });\n}\nfunction colorDistanceFormulaToColorDistance(colorDistanceFormula = \"euclidean-bt709\") {\n  switch (colorDistanceFormula) {\n    case \"cie94-graphic-arts\":\n      return new CIE94GraphicArts();\n    case \"cie94-textiles\":\n      return new CIE94Textiles();\n    case \"ciede2000\":\n      return new CIEDE2000();\n    case \"color-metric\":\n      return new CMetric();\n    case \"euclidean\":\n      return new Euclidean();\n    case \"euclidean-bt709\":\n      return new EuclideanBT709();\n    case \"euclidean-bt709-noalpha\":\n      return new EuclideanBT709NoAlpha();\n    case \"manhattan\":\n      return new Manhattan();\n    case \"manhattan-bt709\":\n      return new ManhattanBT709();\n    case \"manhattan-nommyde\":\n      return new ManhattanNommyde();\n    case \"pngquant\":\n      return new PNGQuant();\n    default:\n      throw new Error(`Unknown colorDistanceFormula ${colorDistanceFormula}`);\n  }\n}\nfunction imageQuantizationToImageQuantizer(distanceCalculator, imageQuantization = \"floyd-steinberg\") {\n  switch (imageQuantization) {\n    case \"nearest\":\n      return new NearestColor(distanceCalculator);\n    case \"riemersma\":\n      return new ErrorDiffusionRiemersma(distanceCalculator);\n    case \"floyd-steinberg\":\n      return new ErrorDiffusionArray(distanceCalculator, 0 /* FloydSteinberg */);\n    case \"false-floyd-steinberg\":\n      return new ErrorDiffusionArray(distanceCalculator, 1 /* FalseFloydSteinberg */);\n    case \"stucki\":\n      return new ErrorDiffusionArray(distanceCalculator, 2 /* Stucki */);\n    case \"atkinson\":\n      return new ErrorDiffusionArray(distanceCalculator, 3 /* Atkinson */);\n    case \"jarvis\":\n      return new ErrorDiffusionArray(distanceCalculator, 4 /* Jarvis */);\n    case \"burkes\":\n      return new ErrorDiffusionArray(distanceCalculator, 5 /* Burkes */);\n    case \"sierra\":\n      return new ErrorDiffusionArray(distanceCalculator, 6 /* Sierra */);\n    case \"two-sierra\":\n      return new ErrorDiffusionArray(distanceCalculator, 7 /* TwoSierra */);\n    case \"sierra-lite\":\n      return new ErrorDiffusionArray(distanceCalculator, 8 /* SierraLite */);\n    default:\n      throw new Error(`Unknown imageQuantization ${imageQuantization}`);\n  }\n}\nfunction paletteQuantizationToPaletteQuantizer(distanceCalculator, paletteQuantization = \"wuquant\", colors = 256) {\n  switch (paletteQuantization) {\n    case \"neuquant\":\n      return new NeuQuant(distanceCalculator, colors);\n    case \"rgbquant\":\n      return new RGBQuant(distanceCalculator, colors);\n    case \"wuquant\":\n      return new WuQuant(distanceCalculator, colors);\n    case \"neuquant-float\":\n      return new NeuQuantFloat(distanceCalculator, colors);\n    default:\n      throw new Error(`Unknown paletteQuantization ${paletteQuantization}`);\n  }\n}\nexport {\n  applyPalette,\n  applyPaletteSync,\n  buildPalette,\n  buildPaletteSync,\n  constants_exports as constants,\n  conversion_exports as conversion,\n  distance_exports as distance,\n  image_exports as image,\n  palette_exports as palette,\n  quality_exports as quality,\n  utils_exports as utils\n};\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * cie94.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * ciede2000.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * cmetric.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * common.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * constants.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * ditherErrorDiffusionArray.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * euclidean.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * helper.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * hueStatistics.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * iq.ts - Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * lab2rgb.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * lab2xyz.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * manhattanNeuQuant.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * nearestColor.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * palette.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * pngQuant.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * point.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * pointContainer.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * rgb2hsl.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * rgb2lab.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * rgb2xyz.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * ssim.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * wuQuant.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * xyz2lab.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * xyz2rgb.ts - part of Image Quantization Library\n */\n/**\n * @preserve\n * MIT License\n *\n * Copyright 2015-2018 Igor Bezkrovnyi\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n * riemersma.ts - part of Image Quantization Library\n */\n/**\n * @preserve TypeScript port:\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * colorHistogram.ts - part of Image Quantization Library\n */\n/**\n * @preserve TypeScript port:\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * neuquant.ts - part of Image Quantization Library\n */\n/**\n * @preserve TypeScript port:\n * Copyright 2015-2018 Igor Bezkrovnyi\n * All rights reserved. (MIT Licensed)\n *\n * rgbquant.ts - part of Image Quantization Library\n */\n//# sourceMappingURL=image-q.mjs.map\n","import { applyPaletteSync, buildPaletteSync, utils } from \"image-q\";\nimport z from \"zod\";\nconst QuantizeOptionsSchema = z.object({\n    colors: z.number().optional(),\n    colorDistanceFormula: z\n        .union([\n        z.literal(\"cie94-textiles\"),\n        z.literal(\"cie94-graphic-arts\"),\n        z.literal(\"ciede2000\"),\n        z.literal(\"color-metric\"),\n        z.literal(\"euclidean\"),\n        z.literal(\"euclidean-bt709-noalpha\"),\n        z.literal(\"euclidean-bt709\"),\n        z.literal(\"manhattan\"),\n        z.literal(\"manhattan-bt709\"),\n        z.literal(\"manhattan-nommyde\"),\n        z.literal(\"pngquant\"),\n    ])\n        .optional(),\n    paletteQuantization: z\n        .union([\n        z.literal(\"neuquant\"),\n        z.literal(\"neuquant-float\"),\n        z.literal(\"rgbquant\"),\n        z.literal(\"wuquant\"),\n    ])\n        .optional(),\n    imageQuantization: z\n        .union([\n        z.literal(\"nearest\"),\n        z.literal(\"riemersma\"),\n        z.literal(\"floyd-steinberg\"),\n        z.literal(\"false-floyd-steinberg\"),\n        z.literal(\"stucki\"),\n        z.literal(\"atkinson\"),\n        z.literal(\"jarvis\"),\n        z.literal(\"burkes\"),\n        z.literal(\"sierra\"),\n        z.literal(\"two-sierra\"),\n        z.literal(\"sierra-lite\"),\n    ])\n        .optional(),\n});\nexport const methods = {\n    /**\n     * Image color number reduction.\n     */\n    quantize(image, options) {\n        const { colors, colorDistanceFormula, paletteQuantization, imageQuantization, } = QuantizeOptionsSchema.parse(options);\n        const inPointContainer = utils.PointContainer.fromUint8Array(image.bitmap.data, image.bitmap.width, image.bitmap.height);\n        const palette = buildPaletteSync([inPointContainer], {\n            colors,\n            colorDistanceFormula,\n            paletteQuantization,\n        });\n        const outPointContainer = applyPaletteSync(inPointContainer, palette, {\n            colorDistanceFormula,\n            imageQuantization,\n        });\n        image.bitmap.data = Buffer.from(outPointContainer.toUint8Array());\n        return image;\n    },\n};\n//# sourceMappingURL=index.js.map","/**\n * @module jimp\n */\n// import { Jimp } from \"@jimp/core\";\nimport bmp, { msBmp } from \"@jimp/js-bmp\";\nimport gif from \"@jimp/js-gif\";\nimport jpeg from \"@jimp/js-jpeg\";\nimport png from \"@jimp/js-png\";\nimport tiff from \"@jimp/js-tiff\";\nimport * as blit from \"@jimp/plugin-blit\";\nimport * as blur from \"@jimp/plugin-blur\";\nimport * as circle from \"@jimp/plugin-circle\";\nimport * as color from \"@jimp/plugin-color\";\nimport * as contain from \"@jimp/plugin-contain\";\nimport * as cover from \"@jimp/plugin-cover\";\nimport * as crop from \"@jimp/plugin-crop\";\nimport * as displace from \"@jimp/plugin-displace\";\nimport * as dither from \"@jimp/plugin-dither\";\nimport * as fisheye from \"@jimp/plugin-fisheye\";\nimport * as flip from \"@jimp/plugin-flip\";\nimport * as hash from \"@jimp/plugin-hash\";\nimport * as mask from \"@jimp/plugin-mask\";\nimport * as print from \"@jimp/plugin-print\";\nimport * as resize from \"@jimp/plugin-resize\";\nimport * as rotate from \"@jimp/plugin-rotate\";\nimport * as threshold from \"@jimp/plugin-threshold\";\nimport * as quantize from \"@jimp/plugin-quantize\";\nimport { createJimp } from \"@jimp/core\";\nexport const defaultPlugins = [\n    blit.methods,\n    blur.methods,\n    circle.methods,\n    color.methods,\n    contain.methods,\n    cover.methods,\n    crop.methods,\n    displace.methods,\n    dither.methods,\n    fisheye.methods,\n    flip.methods,\n    hash.methods,\n    mask.methods,\n    print.methods,\n    resize.methods,\n    rotate.methods,\n    threshold.methods,\n    quantize.methods,\n];\nexport const defaultFormats = [bmp, msBmp, gif, jpeg, png, tiff];\n/** Convenience object for getting the MIME types of the default formats */\nexport const JimpMime = {\n    bmp: bmp().mime,\n    gif: gif().mime,\n    jpeg: jpeg().mime,\n    png: png().mime,\n    tiff: tiff().mime,\n};\n// TODO: This doesn't document the constructor of the class\n/**\n * @class\n *\n * A `Jimp` class enables you to:class\n *\n * - Read an image into a \"bit map\" (a collection of pixels)\n * - Modify the bit map through methods that change the pixels\n * - Write the bit map back to an image buffer\n *\n * @example\n *\n * #### Basic\n *\n * You can use the Jimp class to make empty images.\n * This is useful for when you want to create an image that composed of other images on top of a background.\n *\n * ```ts\n * import { Jimp } from \"jimp\";\n *\n * const image = new Jimp({ width: 256, height: 256, color: 0xffffffff });\n * const image2 = new Jimp({ width: 100, height: 100, color: 0xff0000ff });\n *\n * image.composite(image2, 50, 50);\n * ```\n *\n * #### Node\n *\n * You can use jimp in Node.js.\n * For example you can read an image from a file and resize it and\n * then write it back to a file.\n *\n * ```ts\n * import { Jimp } from \"jimp\";\n * import { promises as fs } from \"fs\";\n *\n * const image = await Jimp.read(\"test/image.png\");\n *\n * image.resize(256, 100);\n * image.greyscale();\n *\n * await image.write('test/output.png');\n * ```\n *\n * #### Browser\n *\n * You can use jimp in the browser by reading files from URLs\n *\n * ```ts\n * import { Jimp } from \"jimp\";\n *\n * const image = await Jimp.read(\"https://upload.wikimedia.org/wikipedia/commons/0/01/Bot-Test.jpg\");\n *\n * image.resize(256, 100);\n * image.greyscale();\n *\n * const output = await image.getBuffer(\"test/image.png\");\n *\n * const canvas = document.createElement(\"canvas\");\n *\n * canvas.width = image.bitmap.width;\n * canvas.height = image.bitmap.height;\n *\n * const ctx = canvas.getContext(\"2d\");\n * ctx.putImageData(image.bitmap, 0, 0);\n *\n * document.body.appendChild(canvas);\n * ```\n */\nexport const Jimp = createJimp({\n    formats: defaultFormats,\n    plugins: defaultPlugins,\n});\nexport { ResizeStrategy } from \"@jimp/plugin-resize\";\nexport { distance, compareHashes } from \"@jimp/plugin-hash\";\nexport { PNGColorType, PNGFilterType } from \"@jimp/js-png\";\nexport { BmpCompression } from \"@jimp/js-bmp\";\nexport { HorizontalAlign, VerticalAlign, BlendMode } from \"@jimp/core\";\nexport { loadFont } from \"@jimp/plugin-print/load-font\";\nexport { measureText, measureTextHeight } from \"@jimp/plugin-print\";\nexport { diff } from \"@jimp/diff\";\nexport { intToRGBA, rgbaToInt, colorDiff, limit255, cssColorToHex, } from \"@jimp/utils\";\n//# sourceMappingURL=index.js.map","import { DirtyRegionTracker, PerformanceMonitor } from \"tessera.js\";\n// import { Camera2D } from \"./cam.js\";\n\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\nimport { createRequire } from 'module';\nimport { PixelBuffer } from \"tessera.js\";\nimport { watch } from \"node:fs\";\nimport path from \"node:path\";\nimport { pathToFileURL } from 'url';\n\n\nimport { Jimp } from \"jimp\";\n\n\n\nexport async function loadImage(path) {\n    const image = await Jimp.read(path);\n    const raw = {\n\n        width: image.bitmap.width,\n\n        height: image.bitmap.height,\n\n        // Jimp's bitmap.data is RGBA format\n        data: new Uint8Array(image.bitmap.data)\n\n    };\n\n    // console.log(path, raw)\n\n    return raw\n}\n\n// profiler.js - Zero-allocation hierarchical profiler\n// Usage:\n//   profiler.start(\"scopeName\")\n//   // ... work ...\n//   profiler.end(\"scopeName\")\n//\n//   profiler.frame()  // Call once per frame\n//   profiler.report() // Print stats\n\nconst SCOPE_POOL_SIZE = 256;\nconst FRAME_HISTORY = 240; // 4 seconds at 60fps\n\nclass ScopeData {\n    constructor() {\n        this.name = \"\";\n        this.depth = 0;\n        this.startTime = 0;\n        this.endTime = 0;\n        this.duration = 0;\n        this.parent = null;\n        this.children = [];\n        this.callCount = 0;\n\n        // Stats\n        this.totalTime = 0;\n        this.minTime = Infinity;\n        this.maxTime = 0;\n        this.samples = [];\n    }\n\n    reset() {\n        this.startTime = 0;\n        this.endTime = 0;\n        this.duration = 0;\n        this.parent = null;\n        this.children.length = 0;\n        this.callCount = 0;\n    }\n\n    resetStats() {\n        this.totalTime = 0;\n        this.minTime = Infinity;\n        this.maxTime = 0;\n        this.samples.length = 0;\n        this.callCount = 0;\n    }\n}\nclass Profiler {\n    constructor() {\n        this.scopePool = [];\n        for (let i = 0; i < SCOPE_POOL_SIZE; i++) {\n            this.scopePool.push(new ScopeData());\n        }\n        this.poolIndex = 0;\n\n        this.scopeStack = [];\n        this.currentScope = null;\n        this.rootScopes = [];\n\n        this.frameCount = 0;\n        this.frameTimes = [];\n        this.frameStart = 0;\n\n        this.scopeStats = new Map();\n\n        this.enabled = true;\n\n        // New: silent mismatch counter\n        this.mismatchCount = 0;\n    }\n\n    acquireScope(name) {\n        const scope = this.scopePool[this.poolIndex];\n        this.poolIndex = (this.poolIndex + 1) % SCOPE_POOL_SIZE;\n\n        scope.reset();\n        scope.name = name;\n        scope.depth = this.scopeStack.length;\n\n        return scope;\n    }\n\n    start(name) {\n        if (!this.enabled) return;\n\n        const scope = this.acquireScope(name);\n        scope.startTime = performance.now();\n\n        if (this.currentScope) {\n            scope.parent = this.currentScope;\n            this.currentScope.children.push(scope);\n        } else {\n            this.rootScopes.push(scope);\n        }\n\n        this.scopeStack.push(scope);\n        this.currentScope = scope;\n    }\n\n    _finalizeScope(scope) {\n        const name = scope.name;\n        const now = performance.now();\n        scope.endTime = now;\n        scope.duration = scope.endTime - scope.startTime;\n        scope.callCount = (scope.callCount || 0) + 1;\n\n        if (!this.scopeStats.has(name)) {\n            this.scopeStats.set(name, {\n                name: name,\n                totalTime: 0,\n                minTime: Infinity,\n                maxTime: 0,\n                callCount: 0,\n                samples: []\n            });\n        }\n\n        const stats = this.scopeStats.get(name);\n        stats.totalTime += scope.duration;\n        stats.minTime = Math.min(stats.minTime, scope.duration);\n        stats.maxTime = Math.max(stats.maxTime, scope.duration);\n        stats.callCount++;\n\n        if (stats.samples.length < FRAME_HISTORY) {\n            stats.samples.push(scope.duration);\n        } else {\n            stats.samples[this.frameCount % FRAME_HISTORY] = scope.duration;\n        }\n    }\n\n    end(name) {\n        if (!this.enabled) return;\n\n        if (this.scopeStack.length === 0) {\n            // no open scopes — silently ignore, but count the mismatch\n            this.mismatchCount++;\n            return;\n        }\n\n        const now = performance.now();\n        // fast path: top of stack matches\n        const top = this.scopeStack[this.scopeStack.length - 1];\n        if (top.name === name) {\n            const scope = this.scopeStack.pop();\n            this._finalizeScope(scope);\n\n            this.currentScope = this.scopeStack.length > 0\n                ? this.scopeStack[this.scopeStack.length - 1]\n                : null;\n            return;\n        }\n\n        // mismatch: look for the most recent matching scope in the stack\n        let matchIndex = -1;\n        for (let i = this.scopeStack.length - 1; i >= 0; i--) {\n            if (this.scopeStack[i].name === name) {\n                matchIndex = i;\n                break;\n            }\n        }\n\n        if (matchIndex === -1) {\n            // No matching open scope anywhere in stack — silently ignore and count mismatch\n            this.mismatchCount++;\n            return;\n        }\n\n        // We found a matching scope but there were leaked scopes above it.\n        // Count this as a single mismatch occurrence (you can change this to count the number of leaked scopes if preferred).\n        this.mismatchCount++;\n\n        // Finalize any leaked scopes above the matched scope (they were never properly ended).\n        for (let i = this.scopeStack.length - 1; i > matchIndex; i--) {\n            const leaked = this.scopeStack.pop();\n            leaked.endTime = now;\n            leaked.duration = leaked.endTime - leaked.startTime;\n            leaked.callCount = (leaked.callCount || 0) + 1;\n            this._finalizeScope(leaked);\n        }\n\n        // Now finalize the matched scope\n        const matched = this.scopeStack.pop();\n        matched.endTime = now;\n        matched.duration = matched.endTime - matched.startTime;\n        matched.callCount = (matched.callCount || 0) + 1;\n        this._finalizeScope(matched);\n\n        // update currentScope\n        this.currentScope = this.scopeStack.length > 0\n            ? this.scopeStack[this.scopeStack.length - 1]\n            : null;\n    }\n\n    frame() {\n        if (!this.enabled) return;\n\n        const frameTime = performance.now() - this.frameStart;\n        this.frameTimes.push(frameTime);\n        if (this.frameTimes.length > FRAME_HISTORY) {\n            this.frameTimes.shift();\n        }\n\n        this.frameCount++;\n        this.frameStart = performance.now();\n\n        this.rootScopes.length = 0;\n        this.scopeStack.length = 0;\n        this.currentScope = null;\n    }\n\n    getStats(name) {\n        return this.scopeStats.get(name);\n    }\n\n    getAllStats() {\n        return Array.from(this.scopeStats.values());\n    }\n\n    percentile(samples, p) {\n        if (samples.length === 0) return 0;\n        const sorted = samples.slice().sort((a, b) => a - b);\n        const index = Math.ceil((p / 100) * sorted.length) - 1;\n        return sorted[Math.max(0, index)];\n    }\n\n    report() {\n        if (this.scopeStats.size === 0) {\n            console.log(\"[Profiler] No data collected\");\n            return;\n        }\n\n        console.log(\"\\n=== PROFILER REPORT ===\");\n        console.log(`Frames: ${this.frameCount}`);\n\n        if (this.frameTimes.length > 0) {\n            const avgFrame = this.frameTimes.reduce((a, b) => a + b, 0) / this.frameTimes.length;\n            const minFrame = Math.min(...this.frameTimes);\n            const maxFrame = Math.max(...this.frameTimes);\n            const p95Frame = this.percentile(this.frameTimes, 95);\n            const p99Frame = this.percentile(this.frameTimes, 99);\n\n            console.log(`\\nFrame Time: avg=${avgFrame.toFixed(2)}ms min=${minFrame.toFixed(2)}ms max=${maxFrame.toFixed(2)}ms p95=${p95Frame.toFixed(2)}ms p99=${p99Frame.toFixed(2)}ms`);\n            console.log(`Target: 16.67ms (60fps) | Actual: ${(1000 / avgFrame).toFixed(1)}fps`);\n        }\n\n        // Print mismatch count if any\n        if (this.mismatchCount > 0) {\n            console.log(`\\n[Profiler] Mismatches encountered: ${this.mismatchCount} (silently counted)`);\n        }\n\n        const stats = this.getAllStats().sort((a, b) => b.totalTime - a.totalTime);\n\n        console.log(\"\\nScope Breakdown:\");\n        console.log(\"Name\".padEnd(30) + \"Total(ms)\".padEnd(12) + \"Avg(ms)\".padEnd(10) + \"Min(ms)\".padEnd(10) + \"Max(ms)\".padEnd(10) + \"P95(ms)\".padEnd(10) + \"Calls\".padEnd(8));\n        console.log(\"-\".repeat(100));\n\n        for (const stat of stats) {\n            const avg = stat.totalTime / stat.callCount;\n            const p95 = this.percentile(stat.samples, 95);\n\n            console.log(\n                stat.name.padEnd(30) +\n                stat.totalTime.toFixed(2).padEnd(12) +\n                avg.toFixed(2).padEnd(10) +\n                stat.minTime.toFixed(2).padEnd(10) +\n                stat.maxTime.toFixed(2).padEnd(10) +\n                p95.toFixed(2).padEnd(10) +\n                stat.callCount.toString().padEnd(8)\n            );\n        }\n\n        console.log(\"=\".repeat(100));\n    }\n\n    exportTrace() {\n        const events = [];\n        let eventId = 0;\n\n        const processScope = (scope, tid = 0) => {\n            events.push({\n                name: scope.name,\n                cat: \"function\",\n                ph: \"X\",\n                ts: scope.startTime * 1000,\n                dur: scope.duration * 1000,\n                pid: 1,\n                tid: tid,\n                args: {\n                    depth: scope.depth\n                }\n            });\n\n            for (const child of scope.children) {\n                processScope(child, tid);\n            }\n        };\n\n        for (const root of this.rootScopes) {\n            processScope(root);\n        }\n\n        return JSON.stringify(events, null, 2);\n    }\n\n    reset() {\n        this.scopeStats.clear();\n        this.frameTimes.length = 0;\n        this.frameCount = 0;\n        this.rootScopes.length = 0;\n        this.scopeStack.length = 0;\n        this.currentScope = null;\n        this.poolIndex = 0;\n        this.mismatchCount = 0; // reset mismatch counter\n    }\n\n    enable() { this.enabled = true; }\n    disable() { this.enabled = false; }\n}\n\nexport const globalPerf = new Profiler()\n\n\n// Convenience wrapper for automatic scoping\nexport function profile(name, fn) {\n    globalPerf.start(name);\n    try {\n        return fn();\n    } finally {\n        globalPerf.end(name);\n    }\n}\n\n// Async version\nexport async function profileAsync(name, fn) {\n    globalPerf.start(name);\n    try {\n        return await fn();\n    } finally {\n        globalPerf.end(name);\n    }\n}\n\n\n\n\nexport const getModulePaths = () => {\n    try {\n        // Try ESM first\n        if (typeof import.meta !== 'undefined' && import.meta.url) {\n            const filename = fileURLToPath(import.meta.url);\n            return {\n                __filename: filename,\n                __dirname: dirname(filename),\n                require: createRequire(import.meta.url)\n            };\n        }\n    } catch (e) {\n        // Fall through to CJS\n    }\n\n    // CJS fallback\n    return {\n        __filename: typeof __filename !== 'undefined' ? __filename : '',\n        __dirname: typeof __dirname !== 'undefined' ? __dirname : '',\n        require: typeof require !== 'undefined' ? require : () => { throw new Error('require not available'); }\n    };\n};\n\n\n\n\n/**\n * minimal hot-reloader - treats game module as a hot-swappable DLL\n * \n * @param {Object} options\n * @param {string} options.entry - Path to game module\n * @param {boolean} [options.watch=true] - Enable file watching\n * @param {number} [options.debounce=100] - Debounce ms for file changes\n * @param {string[]} [options.watchFiles=[]] - Additional files to watch for changes\n * @returns {Promise<Object>} Game module proxy\n */\nexport async function hotloader(state, options) {\n     const entryPath = path.resolve(options.entry);\n     const shouldWatch = options.watch !== false;\n     const debounceMs = options.debounce || 100;\n     const watchFiles = (options.watchFiles || []).map(f => path.resolve(f));\n      const isEditor = options.isEditor || false;\n      const assetPath = options.assetPath || null \n\n     let currentModule = null;\n     let watchers = [];\n     let debounceTimer = null;\n     let abortController = null;\n\n     // Load module with cache busting\n     async function load() {\n         if (currentModule) {\n             currentModule.cleanup()\n         }\n         // const cacheBusted = `${pathToFileURL(entryPath)}?t=${Date.now()}`;\n         // const module = await import(cacheBusted);\n         // currentModule = module.default || module;\n         // currentModule.init(state)\n\n         // HIJACK POINT\n         if (isEditor) {\n             // Load editor instead of game (dynamic import to avoid circular dependency)\n             const Editor = (await import('../editor/index.js')).default;\n             currentModule = Editor;\n             Editor.init(state, assetPath)\n         } else {\n             // normal game loading\n             const cacheBusted = `${pathToFileURL(entryPath)}?t=${Date.now()}`;\n             const module = await import(cacheBusted);\n             currentModule = module.default || module;\n             currentModule.init(state);\n         }\n     }\n\n    // Reload on file change\n    function handleChange() {\n        if (debounceTimer) clearTimeout(debounceTimer);\n        debounceTimer = setTimeout(async () => {\n            console.log('[hotloader] reloading...');\n            await load();\n        }, debounceMs);\n    }\n\n\n    await load();\n\n\n    if (shouldWatch) {\n        abortController = new AbortController();\n\n        // Watch main entry file\n        watchers.push(watch(entryPath, { signal: abortController.signal }, (event) => {\n            if (event === 'change') handleChange();\n        }));\n\n        // Watch additional files\n        watchFiles.forEach(filePath => {\n            watchers.push(watch(filePath, { signal: abortController.signal }, (event) => {\n                if (event === 'change') handleChange();\n            }));\n        });\n    }\n\n    // // return proxy that forwards all calls to current module\n    // return new Proxy({}, {\n    //     get(_, prop) {\n    //         if (prop === 'cleanup') {\n    //             return () => {\n    //                 if (abortController) abortController.abort();\n    //                 if (watcher) watcher.close();\n    //             };\n    //         }\n    //         return currentModule?.[prop];\n    //     }\n    // });\n}\n\n\n\n\n/**\n * Clamp a rectangle to canvas bounds\n * Returns null if completely outside canvas\n */\nexport function clampRectToCanvas(x, y, width, height, canvasWidth, canvasHeight) {\n    const x1 = Math.max(0, Math.floor(x));\n    const y1 = Math.max(0, Math.floor(y));\n    const x2 = Math.min(canvasWidth, Math.ceil(x + width));\n    const y2 = Math.min(canvasHeight, Math.ceil(y + height));\n\n    const clampedWidth = x2 - x1;\n    const clampedHeight = y2 - y1;\n\n    if (clampedWidth <= 0 || clampedHeight <= 0) {\n        return null; // Completely outside canvas\n    }\n\n    return { x: x1, y: y1, width: clampedWidth, height: clampedHeight };\n}\n\n/**\n * Check if a pixel should be drawn (canvas + viewport clipping)\n * @param {Camera2D} camera \n */\nexport function shouldDrawPixel(x, y, canvas, camera) {\n    if (x < 0 || x >= canvas.width || y < 0 || y >= canvas.height) {\n        return false;\n    }\n\n    // Viewport clipping (if camera has viewport)\n    if (camera && camera.viewport && camera.viewport.shouldClip(x, y)) {\n        return false;\n    }\n\n    return true;\n}\n\n\n/**\n * optimized drawAtlasRegionToCanvas with micro-optimized fast paths.\n *\n * @param {{data: Uint8Array, width: number, height: number}} atlas\n * @param {{x: number, y: number, width: number, height: number}} srcRect\n * @param {PixelBuffer} canvas\n * @param {{x: number, y: number, width: number, height: number}} destRect\n * @param {{algorithm?: \"bilinear\" | \"nn\", flipH?: boolean, flipV?: boolean, modulate?: {r:number,g:number,b:number,a:number}, assumeOpaque?: boolean, camera?: Camera2D}} options\n */\nexport function drawAtlasRegionToCanvas(atlas, srcRect, canvas, destRect, options = {}) {\n    globalPerf.start(\"drawAtlas\");\n    const tracker = canvas.dirtyTracker;\n    const cdata = canvas.data;\n    const adata = atlas.data;\n    const atlasWidth = atlas.width | 0;\n    const atlasHeight = atlas.height | 0;\n    const canvasWidth = canvas.width | 0;\n    const canvasHeight = canvas.height | 0;\n\n    const {\n        algorithm = 'bilinear',\n        flipH = false,\n        flipV = false,\n        modulate = { r: 255, g: 255, b: 255, a: 255 },\n        assumeOpaque = false,\n        camera = null,\n        rotation = 0,              // radians\n        pivot = { x: 0.5, y: 0.5 } // normalized within destRect\n    } = options;\n\n    const srcWidth = srcRect.width | 0;\n    const srcHeight = srcRect.height | 0;\n    let dWidth = destRect.width | 0;\n    let dHeight = destRect.height | 0;\n\n    if (dWidth <= 0 || dHeight <= 0 || srcWidth <= 0 || srcHeight <= 0) return;\n\n    const scaleX = srcWidth / dWidth;\n    const scaleY = srcHeight / dHeight;\n\n    const clampX = (x) => (x < srcRect.x ? srcRect.x : (x > srcRect.x + srcWidth - 1 ? srcRect.x + srcWidth - 1 : x));\n    const clampY = (y) => (y < srcRect.y ? srcRect.y : (y > srcRect.y + srcHeight - 1 ? srcRect.y + srcHeight - 1 : y));\n\n    const mR = (modulate.r ?? 255) / 255;\n    const mG = (modulate.g ?? 255) / 255;\n    const mB = (modulate.b ?? 255) / 255;\n    const mA = (modulate.a ?? 255) / 255;\n    const neutralTint = (mR === 1 && mG === 1 && mB === 1 && mA === 1);\n\n    const angle = rotation || 0;\n    const useRotation = angle !== 0;\n    const cosA = Math.cos(angle);\n    const sinA = Math.sin(angle);\n\n    let pivotOffsetX = pivot.x * dWidth;\n    let pivotOffsetY = pivot.y * dHeight;\n\n    // NEW: Preserve originals for mapping (this is key to the fix)\n    const orig_pivotOffsetX = pivotOffsetX;\n    const orig_pivotOffsetY = pivotOffsetY;\n\n    let dX = destRect.x;\n    let dY = destRect.y;\n\n    if (useRotation) {\n        // Screen position of pivot point (before rotation)\n        const screenPivotX = destRect.x + pivotOffsetX;\n        const screenPivotY = destRect.y + pivotOffsetY;\n\n        // Unrotated corners relative to pivot (pivot is at origin)\n        const halfW = dWidth / 2;\n        const halfH = dHeight / 2;\n\n        const corners = [\n            { x: -pivotOffsetX, y: -pivotOffsetY },\n            { x: dWidth - pivotOffsetX, y: -pivotOffsetY },\n            { x: dWidth - pivotOffsetX, y: dHeight - pivotOffsetY },\n            { x: -pivotOffsetX, y: dHeight - pivotOffsetY }\n        ];\n\n        let minRX = Infinity, maxRX = -Infinity, minRY = Infinity, maxRY = -Infinity;\n\n        // Apply forward transform (CW rotation matrix) relative to pivot\n        for (let c of corners) {\n            const rx = cosA * c.x - sinA * c.y;\n            const ry = sinA * c.x + cosA * c.y;\n            minRX = Math.min(minRX, rx);\n            maxRX = Math.max(maxRX, rx);\n            minRY = Math.min(minRY, ry);\n            maxRY = Math.max(maxRY, ry);\n        }\n\n        const aabbWidth = maxRX - minRX;\n        const aabbHeight = maxRY - minRY;\n\n        // New destRect top-left\n        dX = Math.floor(screenPivotX + minRX);\n        dY = Math.floor(screenPivotY + minRY);\n        dWidth = Math.ceil(aabbWidth);\n        dHeight = Math.ceil(aabbHeight);\n\n        // Update pivotOffset relative to new destRect\n        pivotOffsetX = screenPivotX - dX;\n        pivotOffsetY = screenPivotY - dY;\n\n        // console.log('Rotation Debug:', {\n        //     angle: angle,\n        //     originalDest: { x: destRect.x, y: destRect.y, w: destRect.width, h: destRect.height },\n        //     pivot: pivot,\n        //     pivotOffsetX: pivotOffsetX,\n        //     pivotOffsetY: pivotOffsetY,\n        //     newDest: { x: dX, y: dY, w: dWidth, h: dHeight },\n        // });\n    }\n\n    // Now clamp the (possibly adjusted) destRect\n    const clamped = clampRectToCanvas(dX, dY, dWidth, dHeight, canvas.width, canvas.height);\n    if (!clamped) return;\n\n    const destStartX = clamped.x;\n    const destStartY = clamped.y;\n    const destEndX = clamped.x + clamped.width;\n    const destEndY = clamped.y + clamped.height;\n\n    if (!useRotation) {\n        // Non-rotated paths (unchanged, but I added the out-of-bounds skip for consistency where clamping was used)\n        if (algorithm === 'nn') {\n            if (assumeOpaque && neutralTint) {\n                for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n                    const dy = rowDestY - dY;\n                    let dstRowBase = rowDestY * canvasWidth * 4;\n                    for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n                        if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n                        const dx = colDestX - dX;\n                        const idxDest = dstRowBase + colDestX * 4;\n\n                        const srcXoffset = Math.floor((dx + 0.5) * scaleX);\n                        const srcYoffset = Math.floor((dy + 0.5) * scaleY);\n\n                        let srcX = flipH ? (srcRect.x + (srcWidth - 1) - srcXoffset) : (srcRect.x + srcXoffset);\n                        let srcY = flipV ? (srcRect.y + (srcHeight - 1) - srcYoffset) : (srcRect.y + srcYoffset);\n\n                        // Skip if out of source bounds (instead of clamp)\n                        const relX = srcX - srcRect.x;\n                        const relY = srcY - srcRect.y;\n                        if (relX < 0 || relX >= srcWidth || relY < 0 || relY >= srcHeight) continue;\n\n                        const srcIdxBase = (srcY * atlasWidth + srcX) * 4;\n                        cdata[idxDest] = adata[srcIdxBase];\n                        cdata[idxDest + 1] = adata[srcIdxBase + 1];\n                        cdata[idxDest + 2] = adata[srcIdxBase + 2];\n                        cdata[idxDest + 3] = 255;\n                    }\n                }\n                if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n                globalPerf.end(\"drawAtlas\");\n                return;\n            }\n\n            if (neutralTint) {\n                for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n                    const dy = rowDestY - dY;\n                    let dstRowBase = rowDestY * canvasWidth * 4;\n                    for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n                        if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n                        const dx = colDestX - dX;\n                        const idxDest = dstRowBase + colDestX * 4;\n\n                        const srcXoffset = Math.floor((dx + 0.5) * scaleX);\n                        const srcYoffset = Math.floor((dy + 0.5) * scaleY);\n\n                        let srcX = flipH ? (srcRect.x + (srcWidth - 1) - srcXoffset) : (srcRect.x + srcXoffset);\n                        let srcY = flipV ? (srcRect.y + (srcHeight - 1) - srcYoffset) : (srcRect.y + srcYoffset);\n\n                        const relX = srcX - srcRect.x;\n                        const relY = srcY - srcRect.y;\n                        if (relX < 0 || relX >= srcWidth || relY < 0 || relY >= srcHeight) continue;\n\n                        const srcIdxBase = (srcY * atlasWidth + srcX) * 4;\n                        const sR = adata[srcIdxBase];\n                        const sG = adata[srcIdxBase + 1];\n                        const sB = adata[srcIdxBase + 2];\n                        const sA = adata[srcIdxBase + 3];\n\n                        if (sA === 255) {\n                            cdata[idxDest] = sR;\n                            cdata[idxDest + 1] = sG;\n                            cdata[idxDest + 2] = sB;\n                            cdata[idxDest + 3] = 255;\n                            continue;\n                        }\n\n                        const dR = cdata[idxDest];\n                        const dG = cdata[idxDest + 1];\n                        const dB = cdata[idxDest + 2];\n                        const dA = cdata[idxDest + 3];\n\n                        const inv = 255 - sA;\n\n                        const outR = ((sR * sA + dR * inv) + 127) / 255 | 0;\n                        const outG = ((sG * sA + dG * inv) + 127) / 255 | 0;\n                        const outB = ((sB * sA + dB * inv) + 127) / 255 | 0;\n                        const outA = ((sA * 255 + dA * inv) + 127) / 255 | 0;\n\n                        cdata[idxDest] = outR;\n                        cdata[idxDest + 1] = outG;\n                        cdata[idxDest + 2] = outB;\n                        cdata[idxDest + 3] = outA;\n                    }\n                }\n                if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n                globalPerf.end(\"drawAtlas\");\n                return;\n            }\n\n            for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n                const dy = rowDestY - dY;\n                let dstRowBase = rowDestY * canvasWidth * 4;\n                for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n                    if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n                    const dx = colDestX - dX;\n                    const idxDest = dstRowBase + colDestX * 4;\n\n                    const srcXoffset = Math.floor((dx + 0.5) * scaleX);\n                    const srcYoffset = Math.floor((dy + 0.5) * scaleY);\n\n                    let srcX = flipH ? (srcRect.x + (srcWidth - 1) - srcXoffset) : (srcRect.x + srcXoffset);\n                    let srcY = flipV ? (srcRect.y + (srcHeight - 1) - srcYoffset) : (srcRect.y + srcYoffset);\n\n                    const relX = srcX - srcRect.x;\n                    const relY = srcY - srcRect.y;\n                    if (relX < 0 || relX >= srcWidth || relY < 0 || relY >= srcHeight) continue;\n\n                    const srcIdxBase = (srcY * atlasWidth + srcX) * 4;\n\n                    const sR255 = adata[srcIdxBase];\n                    const sG255 = adata[srcIdxBase + 1];\n                    const sB255 = adata[srcIdxBase + 2];\n                    const sA255 = adata[srcIdxBase + 3];\n\n                    const sA = (sA255 / 255) * mA;\n                    const sR = (sR255 / 255) * mR;\n                    const sG = (sG255 / 255) * mG;\n                    const sB = (sB255 / 255) * mB;\n\n                    const dR = cdata[idxDest] / 255;\n                    const dG = cdata[idxDest + 1] / 255;\n                    const dB = cdata[idxDest + 2] / 255;\n                    const dA = cdata[idxDest + 3] / 255;\n\n                    const outA = sA + dA * (1 - sA);\n                    const outR = sR * sA + dR * (1 - sA);\n                    const outG = sG * sA + dG * (1 - sA);\n                    const outB = sB * sA + dB * (1 - sA);\n\n                    cdata[idxDest] = Math.round(outR * 255);\n                    cdata[idxDest + 1] = Math.round(outG * 255);\n                    cdata[idxDest + 2] = Math.round(outB * 255);\n                    cdata[idxDest + 3] = Math.round(outA * 255);\n                }\n            }\n            if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n            globalPerf.end(\"drawAtlas\");\n            return;\n        }\n\n        if (algorithm !== 'nn') {\n            if (assumeOpaque && neutralTint) {\n                for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n                    const dy = rowDestY - dY;\n                    let dstRowBase = rowDestY * canvasWidth * 4;\n                    for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n                        if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n                        const dx = colDestX - dX;\n                        const idxDest = dstRowBase + colDestX * 4;\n\n                        const unflippedSrcX = (dx + 0.5) * scaleX - 0.5;\n                        const unflippedSrcY = (dy + 0.5) * scaleY - 0.5;\n\n                        let srcX = flipH ? (srcRect.x + (srcWidth - 1) - unflippedSrcX) : (srcRect.x + unflippedSrcX);\n                        let srcY = flipV ? (srcRect.y + (srcHeight - 1) - unflippedSrcY) : (srcRect.y + unflippedSrcY);\n\n                        const relX = srcX - srcRect.x;\n                        const relY = srcY - srcRect.y;\n                        if (relX < 0 || relX >= srcWidth - 1 || relY < 0 || relY >= srcHeight - 1) continue; // For bilinear, ensure room for +1\n\n                        let x1 = Math.floor(srcX);\n                        let y1 = Math.floor(srcY);\n                        let x2 = Math.min(x1 + 1, srcRect.x + srcWidth - 1, atlasWidth - 1);\n                        let y2 = Math.min(y1 + 1, srcRect.y + srcHeight - 1, atlasHeight - 1);\n\n                        const dxFrac = srcX - x1;\n                        const dyFrac = srcY - y1;\n\n                        const p11Idx = (y1 * atlasWidth + x1) * 4;\n                        const p12Idx = (y1 * atlasWidth + x2) * 4;\n                        const p21Idx = (y2 * atlasWidth + x1) * 4;\n                        const p22Idx = (y2 * atlasWidth + x2) * 4;\n\n                        const interp = (c) => {\n                            const p11 = adata[p11Idx + c];\n                            const p12 = adata[p12Idx + c];\n                            const p21 = adata[p21Idx + c];\n                            const p22 = adata[p22Idx + c];\n                            const ix1 = p11 * (1 - dxFrac) + p12 * dxFrac;\n                            const ix2 = p21 * (1 - dxFrac) + p22 * dxFrac;\n                            return Math.round(ix1 * (1 - dyFrac) + ix2 * dyFrac);\n                        };\n\n                        cdata[idxDest] = interp(0);\n                        cdata[idxDest + 1] = interp(1);\n                        cdata[idxDest + 2] = interp(2);\n                        cdata[idxDest + 3] = 255;\n                    }\n                }\n                if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n                globalPerf.end(\"drawAtlas\");\n                return;\n            }\n\n            for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n                const dy = rowDestY - dY;\n                let dstRowBase = rowDestY * canvasWidth * 4;\n                for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n                    if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n                    const dx = colDestX - dX;\n                    const idxDest = dstRowBase + colDestX * 4;\n\n                    const unflippedSrcX = (dx + 0.5) * scaleX - 0.5;\n                    const unflippedSrcY = (dy + 0.5) * scaleY - 0.5;\n\n                    let srcX = flipH ? (srcRect.x + (srcWidth - 1) - unflippedSrcX) : (srcRect.x + unflippedSrcX);\n                    let srcY = flipV ? (srcRect.y + (srcHeight - 1) - unflippedSrcY) : (srcRect.y + unflippedSrcY);\n\n                    const relX = srcX - srcRect.x;\n                    const relY = srcY - srcRect.y;\n                    if (relX < 0 || relX >= srcWidth - 1 || relY < 0 || relY >= srcHeight - 1) continue;\n\n                    let x1 = Math.floor(srcX);\n                    let y1 = Math.floor(srcY);\n                    let x2 = Math.min(x1 + 1, srcRect.x + srcWidth - 1, atlasWidth - 1);\n                    let y2 = Math.min(y1 + 1, srcRect.y + srcHeight - 1, atlasHeight - 1);\n\n                    const dxFrac = srcX - x1;\n                    const dyFrac = srcY - y1;\n\n                    const p11Idx = (y1 * atlasWidth + x1) * 4;\n                    const p12Idx = (y1 * atlasWidth + x2) * 4;\n                    const p21Idx = (y2 * atlasWidth + x1) * 4;\n                    const p22Idx = (y2 * atlasWidth + x2) * 4;\n\n                    const interpChannel = (c) => {\n                        const p11 = adata[p11Idx + c];\n                        const p12 = adata[p12Idx + c];\n                        const p21 = adata[p21Idx + c];\n                        const p22 = adata[p22Idx + c];\n                        const interpX1 = p11 * (1 - dxFrac) + p12 * dxFrac;\n                        const interpX2 = p21 * (1 - dxFrac) + p22 * dxFrac;\n                        return interpX1 * (1 - dyFrac) + interpX2 * dyFrac;\n                    };\n\n                    const sR255 = interpChannel(0);\n                    const sG255 = interpChannel(1);\n                    const sB255 = interpChannel(2);\n                    const sA255 = interpChannel(3);\n\n                    const sA = (sA255 / 255) * mA;\n                    const sR = (sR255 / 255) * mR;\n                    const sG = (sG255 / 255) * mG;\n                    const sB = (sB255 / 255) * mB;\n\n                    const dR = cdata[idxDest] / 255;\n                    const dG = cdata[idxDest + 1] / 255;\n                    const dB = cdata[idxDest + 2] / 255;\n                    const dA = cdata[idxDest + 3] / 255;\n\n                    const outA = sA + dA * (1 - sA);\n                    const outR = sR * sA + dR * (1 - sA);\n                    const outG = sG * sA + dG * (1 - sA);\n                    const outB = sB * sA + dB * (1 - sA);\n\n                    cdata[idxDest] = Math.round(outR * 255);\n                    cdata[idxDest + 1] = Math.round(outG * 255);\n                    cdata[idxDest + 2] = Math.round(outB * 255);\n                    cdata[idxDest + 3] = Math.round(outA * 255);\n                }\n            }\n            if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n            globalPerf.end(\"drawAtlas\");\n            return;\n        }\n    }\n\n    // Rotated paths\n    const srcRectX = srcRect.x;\n    const srcRectY = srcRect.y;\n    const srcMaxX = srcRect.x + srcWidth - 1;\n    const srcMaxY = srcRect.y + srcHeight - 1;\n    const atlasW = atlasWidth;\n    const atlasH = atlasHeight;\n\n    if (algorithm === 'nn') {\n        if (assumeOpaque && neutralTint) {\n            for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n                const py = (rowDestY - dY) + 0.5;\n                let dstRowBase = rowDestY * canvasWidth * 4;\n                for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n                    if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n                    const px = (colDestX - dX) + 0.5;\n                    const idxDest = dstRowBase + colDestX * 4;\n\n                    const localX = px - pivotOffsetX;\n                    const localY = py - pivotOffsetY;\n                    const ux = cosA * localX + sinA * localY;\n                    const uy = -sinA * localX + cosA * localY;\n\n                    let mappedRelX = (ux + pivotOffsetX) * scaleX;\n                    let mappedRelY = (uy + pivotOffsetY) * scaleY;\n\n                    if (flipH) mappedRelX = (srcWidth - 1) - mappedRelX;\n                    if (flipV) mappedRelY = (srcHeight - 1) - mappedRelY;\n\n                    if (mappedRelX < 0 || mappedRelX >= srcWidth || mappedRelY < 0 || mappedRelY >= srcHeight) continue;\n\n                    let srcX = Math.round(srcRectX + mappedRelX);\n                    let srcY = Math.round(srcRectY + mappedRelY);\n\n                    const srcIdxBase = (srcY * atlasW + srcX) * 4;\n                    cdata[idxDest] = adata[srcIdxBase];\n                    cdata[idxDest + 1] = adata[srcIdxBase + 1];\n                    cdata[idxDest + 2] = adata[srcIdxBase + 2];\n                    cdata[idxDest + 3] = 255;\n                }\n            }\n            if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n            globalPerf.end(\"drawAtlas\");\n            return;\n        }\n\n        if (neutralTint) {\n            for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n                const py = (rowDestY - dY) + 0.5;\n                let dstRowBase = rowDestY * canvasWidth * 4;\n                for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n                    if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n                    const px = (colDestX - dX) + 0.5;\n                    const idxDest = dstRowBase + colDestX * 4;\n\n                    const localX = px - pivotOffsetX;\n                    const localY = py - pivotOffsetY;\n                    const ux = cosA * localX + sinA * localY;\n                    const uy = -sinA * localX + cosA * localY;\n\n                    // FIXED: Use orig_pivotOffsetX/Y for mapping\n                    let mappedRelX = (ux + orig_pivotOffsetX) * scaleX;\n                    let mappedRelY = (uy + orig_pivotOffsetY) * scaleY;\n\n                    if (flipH) mappedRelX = (srcWidth - 1) - mappedRelX;\n                    if (flipV) mappedRelY = (srcHeight - 1) - mappedRelY;\n\n                    if (mappedRelX < 0 || mappedRelX >= srcWidth || mappedRelY < 0 || mappedRelY >= srcHeight) continue;\n\n                    let srcX = Math.round(srcRectX + mappedRelX);\n                    let srcY = Math.round(srcRectY + mappedRelY);\n\n                    const srcIdxBase = (srcY * atlasW + srcX) * 4;\n                    const sR = adata[srcIdxBase];\n                    const sG = adata[srcIdxBase + 1];\n                    const sB = adata[srcIdxBase + 2];\n                    const sA = adata[srcIdxBase + 3];\n\n                    if (sA === 255) {\n                        cdata[idxDest] = sR;\n                        cdata[idxDest + 1] = sG;\n                        cdata[idxDest + 2] = sB;\n                        cdata[idxDest + 3] = 255;\n                        continue;\n                    }\n\n                    const dR = cdata[idxDest];\n                    const dG = cdata[idxDest + 1];\n                    const dB = cdata[idxDest + 2];\n                    const dA = cdata[idxDest + 3];\n\n                    const inv = 255 - sA;\n\n                    const outR = ((sR * sA + dR * inv) + 127) / 255 | 0;\n                    const outG = ((sG * sA + dG * inv) + 127) / 255 | 0;\n                    const outB = ((sB * sA + dB * inv) + 127) / 255 | 0;\n                    const outA = ((sA * 255 + dA * inv) + 127) / 255 | 0;\n\n                    cdata[idxDest] = outR;\n                    cdata[idxDest + 1] = outG;\n                    cdata[idxDest + 2] = outB;\n                    cdata[idxDest + 3] = outA;\n                }\n            }\n            if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n            globalPerf.end(\"drawAtlas\");\n            return;\n        }\n\n        for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n            const py = (rowDestY - dY) + 0.5;\n            let dstRowBase = rowDestY * canvasWidth * 4;\n            for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n                if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n                const px = (colDestX - dX) + 0.5;\n                const idxDest = dstRowBase + colDestX * 4;\n\n                const localX = px - pivotOffsetX;\n                const localY = py - pivotOffsetY;\n                const ux = cosA * localX + sinA * localY;\n                const uy = -sinA * localX + cosA * localY;\n\n                // FIXED: Use orig_pivotOffsetX/Y for mapping\n                let mappedRelX = (ux + orig_pivotOffsetX) * scaleX;\n                let mappedRelY = (uy + orig_pivotOffsetY) * scaleY;\n\n                if (flipH) mappedRelX = (srcWidth - 1) - mappedRelX;\n                if (flipV) mappedRelY = (srcHeight - 1) - mappedRelY;\n\n                if (mappedRelX < 0 || mappedRelX >= srcWidth || mappedRelY < 0 || mappedRelY >= srcHeight) continue;\n\n                const srcFloatX = srcRectX + mappedRelX;\n                const srcFloatY = srcRectY + mappedRelY;\n\n                const sIdxBase = ((Math.max(srcRectY, Math.min(srcMaxY, Math.round(srcFloatY))) * atlasW) + Math.max(srcRectX, Math.min(srcMaxX, Math.round(srcFloatX)))) * 4;\n\n                const sR255 = adata[sIdxBase];\n                const sG255 = adata[sIdxBase + 1];\n                const sB255 = adata[sIdxBase + 2];\n                const sA255 = adata[sIdxBase + 3];\n\n                const sA = (sA255 / 255) * mA;\n                const sR = (sR255 / 255) * mR;\n                const sG = (sG255 / 255) * mG;\n                const sB = (sB255 / 255) * mB;\n\n                const dR = cdata[idxDest] / 255;\n                const dG = cdata[idxDest + 1] / 255;\n                const dB = cdata[idxDest + 2] / 255;\n                const dA = cdata[idxDest + 3] / 255;\n\n                const outA = sA + dA * (1 - sA);\n                const outR = sR * sA + dR * (1 - sA);\n                const outG = sG * sA + dG * (1 - sA);\n                const outB = sB * sA + dB * (1 - sA);\n\n                cdata[idxDest] = Math.round(outR * 255);\n                cdata[idxDest + 1] = Math.round(outG * 255);\n                cdata[idxDest + 2] = Math.round(outB * 255);\n                cdata[idxDest + 3] = Math.round(outA * 255);\n            }\n        }\n        if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n        globalPerf.end(\"drawAtlas\");\n        return;\n    }\n\n    // rotated bilinear\n    if (assumeOpaque && neutralTint) {\n        for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n            const py = (rowDestY - dY) + 0.5;\n            let dstRowBase = rowDestY * canvasWidth * 4;\n            for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n                if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n                const px = (colDestX - dX) + 0.5;\n                const idxDest = dstRowBase + colDestX * 4;\n\n                const localX = px - pivotOffsetX;\n                const localY = py - pivotOffsetY;\n                const ux = cosA * localX + sinA * localY;\n                const uy = -sinA * localX + cosA * localY;\n\n                // FIXED: Use orig_pivotOffsetX/Y for mapping\n                let srcXf = srcRectX + (ux + orig_pivotOffsetX) * scaleX - 0.5;\n                let srcYf = srcRectY + (uy + orig_pivotOffsetY) * scaleY - 0.5;\n\n                if (flipH) srcXf = srcRectX + (srcWidth - 1) - (srcXf - srcRectX);\n                if (flipV) srcYf = srcRectY + (srcHeight - 1) - (srcYf - srcRectY);\n\n                const relX = srcXf - srcRect.x;\n                const relY = srcYf - srcRect.y;\n                if (relX < 0 || relX >= srcWidth - 1 || relY < 0 || relY >= srcHeight - 1) continue;\n\n                let x1 = Math.floor(srcXf);\n                let y1 = Math.floor(srcYf);\n                let x2 = Math.min(x1 + 1, srcMaxX, atlasW - 1);\n                let y2 = Math.min(y1 + 1, srcMaxY, atlasH - 1);\n\n                const dxFrac = srcXf - x1;\n                const dyFrac = srcYf - y1;\n\n                const p11Idx = (y1 * atlasW + x1) * 4;\n                const p12Idx = (y1 * atlasW + x2) * 4;\n                const p21Idx = (y2 * atlasW + x1) * 4;\n                const p22Idx = (y2 * atlasW + x2) * 4;\n\n                const interp = (c) => {\n                    const p11 = adata[p11Idx + c];\n                    const p12 = adata[p12Idx + c];\n                    const p21 = adata[p21Idx + c];\n                    const p22 = adata[p22Idx + c];\n                    const ix1 = p11 * (1 - dxFrac) + p12 * dxFrac;\n                    const ix2 = p21 * (1 - dxFrac) + p22 * dxFrac;\n                    return Math.round(ix1 * (1 - dyFrac) + ix2 * dyFrac);\n                };\n\n                cdata[idxDest] = interp(0);\n                cdata[idxDest + 1] = interp(1);\n                cdata[idxDest + 2] = interp(2);\n                cdata[idxDest + 3] = 255;\n            }\n        }\n        if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n        globalPerf.end(\"drawAtlas\");\n        return;\n    }\n\n    for (let rowDestY = destStartY; rowDestY < destEndY; rowDestY++) {\n        const py = (rowDestY - dY) + 0.5;\n        let dstRowBase = rowDestY * canvasWidth * 4;\n        for (let colDestX = destStartX; colDestX < destEndX; colDestX++) {\n            if (!shouldDrawPixel(colDestX, rowDestY, canvas, camera)) continue;\n            const px = (colDestX - dX) + 0.5;\n            const idxDest = dstRowBase + colDestX * 4;\n\n            const localX = px - pivotOffsetX;\n            const localY = py - pivotOffsetY;\n            const ux = cosA * localX + sinA * localY;\n            const uy = -sinA * localX + cosA * localY;\n\n            // FIXED: Use orig_pivotOffsetX/Y for mapping\n            let srcXf = srcRectX + (ux + orig_pivotOffsetX) * scaleX - 0.5;\n            let srcYf = srcRectY + (uy + orig_pivotOffsetY) * scaleY - 0.5;\n\n            if (flipH) srcXf = srcRectX + (srcWidth - 1) - (srcXf - srcRectX);\n            if (flipV) srcYf = srcRectY + (srcHeight - 1) - (srcYf - srcRectY);\n\n            const relX = srcXf - srcRect.x;\n            const relY = srcYf - srcRect.y;\n            if (relX < 0 || relX >= srcWidth - 1 || relY < 0 || relY >= srcHeight - 1) continue;\n\n            let x1 = Math.floor(srcXf);\n            let y1 = Math.floor(srcYf);\n            let x2 = Math.min(x1 + 1, srcMaxX, atlasW - 1);\n            let y2 = Math.min(y1 + 1, srcMaxY, atlasH - 1);\n\n            const dxFrac = srcXf - x1;\n            const dyFrac = srcYf - y1;\n\n            const p11Idx = (y1 * atlasW + x1) * 4;\n            const p12Idx = (y1 * atlasW + x2) * 4;\n            const p21Idx = (y2 * atlasW + x1) * 4;\n            const p22Idx = (y2 * atlasW + x2) * 4;\n\n            const interpChannel = (c) => {\n                const p11 = adata[p11Idx + c];\n                const p12 = adata[p12Idx + c];\n                const p21 = adata[p21Idx + c];\n                const p22 = adata[p22Idx + c];\n                const interpX1 = p11 * (1 - dxFrac) + p12 * dxFrac;\n                const interpX2 = p21 * (1 - dxFrac) + p22 * dxFrac;\n                return interpX1 * (1 - dyFrac) + interpX2 * dyFrac;\n            };\n\n            const sR255 = interpChannel(0);\n            const sG255 = interpChannel(1);\n            const sB255 = interpChannel(2);\n            const sA255 = interpChannel(3);\n\n            const sA = (sA255 / 255) * mA;\n            const sR = (sR255 / 255) * mR;\n            const sG = (sG255 / 255) * mG;\n            const sB = (sB255 / 255) * mB;\n\n            const dR = cdata[idxDest] / 255;\n            const dG = cdata[idxDest + 1] / 255;\n            const dB = cdata[idxDest + 2] / 255;\n            const dA = cdata[idxDest + 3] / 255;\n\n            const outA = sA + dA * (1 - sA);\n            const outR = sR * sA + dR * (1 - sA);\n            const outG = sG * sA + dG * (1 - sA);\n            const outB = sB * sA + dB * (1 - sA);\n\n            cdata[idxDest] = Math.round(outR * 255);\n            cdata[idxDest + 1] = Math.round(outG * 255);\n            cdata[idxDest + 2] = Math.round(outB * 255);\n            cdata[idxDest + 3] = Math.round(outA * 255);\n        }\n    }\n\n    if (tracker) canvas.markRegion(clamped.x, clamped.y, clamped.width, clamped.height);\n    globalPerf.end(\"drawAtlas\");\n}","import { PixelBuffer, PerformanceMonitor } from \"tessera.js\";\nimport { globalPerf } from \"./lib.js\";\n// Global profiler for transform calculations\nconst transformMonitor = globalPerf;\n\n\nexport function vec2(x = 0, y = 0) {\n    return { x, y };\n}\n\n/**\n * local transforms are relative to an object's parent or its own origin (like moving along its own \"front\"), while global transforms are relative to the fixed world origin (0,0,0)\n */\nexport class Transform2D {\n    constructor() {\n        this.position = vec2();\n        this.rotation = 0; // radians\n        this.scale = vec2(1, 1);\n    }\n\n    copy(other) {\n        this.position.x = other.position.x;\n        this.position.y = other.position.y;\n        this.rotation = other.rotation;\n        this.scale.x = other.scale.x;\n        this.scale.y = other.scale.y;\n    }\n}\n\n\n/**\n * \n * Node - base class for all scene objects\n * \n * Why this design:\n * - Children array for hierarchy\n * - Dirty flags prevent redundant transform calculations\n * - Lifecycle hooks (_ready, _process, _draw) give clear entry points\n * - World transform cached for performance\n */\n\nexport class Node {\n    constructor(name = \"node\") {\n        this.name = name;\n        this.parent = null;\n        this.children = [];\n\n        // relative to parent\n        this.position = vec2();\n        this.rotation = 0;\n        this.scale = vec2(1, 1);\n\n        // world transform absolute, cached\n        this.worldPosition = vec2();\n        this.worldRotation = 0;\n        this.worldScale = vec2(1, 1);\n\n        this.worldCos = 1; // Default to rotation 0\n        this.worldSin = 0;\n\n\n        this.transformDirty = true; // needs recalculation?\n        this.visible = true;\n        this.active = true; // if false, skip _process\n\n        // lifecycle state\n        this.ready = false;\n\n        this.physicsWorld = null\n\n    }\n    /**\n     * \n     * @param {Node} node \n     * @returns \n     */\n    addChild(node) {\n        if (node.parent) {\n            node.parent.removeChild(node);\n        }\n        node.parent = this;\n        node.transformDirty = true;\n        this.children.push(node);\n        return node;\n    }\n    /**\n   * \n   * @param {Node} node \n   * @returns \n   */\n    removeChild(node) {\n\n        const idx = this.children.indexOf(node);\n        if (idx !== -1) {\n            this.children.splice(idx, 1);\n            node.parent = null;\n        }\n    }\n\n\n    markDirty() {\n        // this.transformDirty = true;\n        // for (let i = 0; i < this.children.length; i++) {\n        //     this.children[i].markDirty();\n        // }\n\n        const stack = [this];\n        while (stack.length > 0) {\n            const node = stack.pop();\n            node.transformDirty = true;\n            for (let i = node.children.length - 1; i >= 0; i--) { // Reverse for depth-first\n                stack.push(node.children[i]);\n            }\n        }\n    }\n\n\n    /**\n  * Calculate world transform from local + parent\n  * \n  * Why this order:\n  * 1. Scale the local position\n  * 2. Rotate it\n  * 3. Add parent's world position\n  * \n  * This gives proper transform inheritance (child orbits parent)\n  */\n    updateWorldTransform() {\n        transformMonitor.start(\"updateWorldTransform\")\n\n        if (!this.transformDirty) {\n            transformMonitor.end(\"updateWorldTransform\")\n            return;\n        }\n\n        if (this.parent) {\n            // transform relative to parent \n            // ensure parent is up to date\n            this.parent.updateWorldTransform();\n\n            // apply parent's transform to our local transform\n            const cos = this.parent.worldCos;\n            const sin = this.parent.worldSin;\n\n            // scale local position by parent scale\n            const scaledX = this.position.x * this.parent.worldScale.x;\n            const scaledY = this.position.y * this.parent.worldScale.y;\n\n            // rotate scaled position\n            const rotatedX = scaledX * cos - scaledY * sin;\n            const rotatedY = scaledX * sin + scaledY * cos;\n\n            // translate by parent world position\n            this.worldPosition.x = this.parent.worldPosition.x + rotatedX;\n            this.worldPosition.y = this.parent.worldPosition.y + rotatedY;\n\n            // inherit rotation and scale\n            this.worldRotation = this.parent.worldRotation + this.rotation;\n            this.worldScale.x = this.parent.worldScale.x * this.scale.x;\n            this.worldScale.y = this.parent.worldScale.y * this.scale.y;\n        } else {\n            // root node - world = local\n            this.worldPosition.x = this.position.x;\n            this.worldPosition.y = this.position.y;\n            this.worldRotation = this.rotation;\n            this.worldScale.x = this.scale.x;\n            this.worldScale.y = this.scale.y;\n        }\n\n        this.worldCos = Math.cos(this.worldRotation);\n        this.worldSin = Math.sin(this.worldRotation);\n        this.transformDirty = false\n        transformMonitor.end(\"updateWorldTransform\")\n\n    }\n\n\n    // assumes parent.world* are up-to-date\n    getWorldPosition() {\n        this.updateWorldTransform();\n        return { x: this.worldPosition.x, y: this.worldPosition.y };\n    }\n\n    worldToLocal(wx, wy) {\n        if (!this.parent) return { x: wx, y: wy };\n        // Make sure parent's world transform is current\n        this.parent.updateWorldTransform();\n\n        // Translate into parent's local space\n        let px = wx - this.parent.worldPosition.x;\n        let py = wy - this.parent.worldPosition.y;\n\n        // Inverse rotate by parent's rotation\n        const cos = this.parent.worldCos; // cos(-theta) = cos(theta)\n        const sin = -this.parent.worldSin; // sin(-theta) = -sin(theta)\n        let lx = px * cos - py * sin;\n        let ly = px * sin + py * cos;\n\n        // Inverse scale by parent's scale\n        lx = lx / this.parent.worldScale.x;\n        ly = ly / this.parent.worldScale.y;\n\n        return { x: lx, y: ly };\n    }\n\n    localToWorld(lx, ly) {\n        this.updateWorldTransform(); // ensure parent chain is up-to-date\n        const cos = this.worldCos;\n        const sin = this.worldSin;\n\n        // scale then rotate then translate\n        const sx = lx * this.worldScale.x;\n        const sy = ly * this.worldScale.y;\n\n        const rx = sx * cos - sy * sin;\n        const ry = sx * sin + sy * cos;\n\n        return { x: this.worldPosition.x + rx, y: this.worldPosition.y + ry };\n    }\n\n\n\n    _ready() {\n        // Called once when node enters scene tree\n    }\n\n    _process(delta) {\n        // Called every frame with time delta\n    }\n\n    _draw(canvas, camera) {\n        // Called every frame for rendering\n    }\n\n\n    /**\n  * internal tree traversal - don't override these\n  */\n    propagateReady() {\n        if (!this.ready) {\n            this._ready();\n            this.ready = true;\n        }\n        for (let i = 0; i < this.children.length; i++) {\n            this.children[i].propagateReady();\n        }\n    }\n\n    propagateProcess(delta) {\n        transformMonitor.start(\"propagateProcess\")\n\n        if (this.active) {\n            this._process(delta);\n        }\n        // TODO: should childs inherit parents inactive state? \n        for (let i = 0; i < this.children.length; i++) {\n            this.children[i].propagateProcess(delta);\n        }\n\n        transformMonitor.end(\"propagateProcess\")\n    }\n\n    propagateDraw(canvas, camera) {\n        transformMonitor.start(\"propagateDraw\")\n\n        if (!this.visible) {\n            transformMonitor.end(\"propagateDraw\")\n            return;\n        }\n\n        this.updateWorldTransform();\n        this._draw(canvas, camera);\n\n        for (let i = 0; i < this.children.length; i++) {\n            this.children[i].propagateDraw(canvas, camera);\n        }\n        // const stack = [{ node: this, index: 0 }];\n        // while (stack.length > 0) {\n        //     const entry = stack[stack.length - 1];\n        //     const node = entry.node;\n\n        //     if (entry.index === 0) { // Pre-child phase\n        //         if (!node.visible) {\n        //             stack.pop();\n        //             continue;\n        //         }\n        //         node.updateWorldTransform();\n        //         node._draw(canvas, camera);\n        //     }\n\n        //     if (entry.index < node.children.length) { // Push next child\n        //         const child = node.children[entry.index];\n        //         entry.index++;\n        //         stack.push({ node: child, index: 0 });\n        //     } else { // All children done\n        //         stack.pop();\n        //     }\n        // }\n\n        transformMonitor.end(\"propagateDraw\")\n    }\n\n\n    /**\n * utility: find child by name (recursive)\n */\n    findChild(name, recursive = true) {\n        for (let i = 0; i < this.children.length; i++) {\n            if (this.children[i].name === name) {\n                return this.children[i];\n            }\n            if (recursive) {\n                const found = this.children[i].findChild(name, true);\n                if (found) return found;\n            }\n        }\n        return null;\n    }\n\n    /**\n     * utility: get full path (e.g., \"Root/Player/Sprite\")\n     */\n    getPath() {\n        if (!this.parent) return this.name;\n        return this.parent.getPath() + \"/\" + this.name;\n    }\n}\n\n\n\n\n/**\n * Scene - root container + game loop coordinator\n * \n * why Scene:\n * - single entry point for update/draw\n * - manages lifecycle (ready propagation)\n * - can pause/unpause entire tree\n * - scene loading/unloading\n */\n\nexport class Scene {\n    /**\n     * \n     * @param {PixelBuffer} canvas \n     */\n    constructor(canvas) {\n        this.canvas = canvas;\n        this.root = new Node(\"Root\");\n        this.paused = false;\n        this.timeScale = 1.0; // slow-mo or fast-forward\n        this.camera = null;\n\n        // // trigger _ready on root\n        // this.root.propagateReady();\n    }\n\n    set physicsWorld(world) {\n        // TODO: guard\n        this.root.physicsWorld = world\n    }\n    addChild(node) {\n        return this.root.addChild(node);\n    }\n\n    start() {\n        this.root.propagateReady()\n    }\n    process(delta) {\n        if (this.paused) return;\n        const scaledDelta = delta * this.timeScale;\n        this.root.propagateProcess(scaledDelta);\n    }\n\n    draw() {\n        this.root.propagateDraw(this.canvas, this.camera);\n    }\n\n    /**\n   * find node by path (e.g., \"Player/Weapon\")\n   */\n    getNode(path) {\n        const parts = path.split('/');\n        let current = this.root;\n\n        for (let i = 0; i < parts.length; i++) {\n            if (parts[i] === 'Root' || parts[i] === '') continue;\n            current = current.findChild(parts[i], false);\n            if (!current) return null;\n        }\n\n        return current;\n    }\n\n    /**\n  * debug: print tree structure\n  */\n    printTree(node = this.root, indent = 0) {\n        const prefix = '  '.repeat(indent);\n        const pos = `(${node.worldPosition.x.toFixed(1)}, ${node.worldPosition.y.toFixed(1)})`;\n        console.log(`${prefix}${node.name} ${pos}`);\n        for (let i = 0; i < node.children.length; i++) {\n            this.printTree(node.children[i], indent + 1);\n        }\n    }\n}","import { Node, vec2 } from \"./core.js\"\n\nexport class Camera2D extends Node {\n    constructor(name = \"camera\") {\n        super(name)\n        this.name = name;\n        this.parent = null;\n        this.children = [];\n\n        // local transform (relative to parent camera/world)\n        this.position = vec2();\n        this.rotation = 0; // radians\n        this.scale = vec2(1, 1);\n\n        // camera-specific properties\n        this.zoom = 1.0; // Multiplicative zoom factor\n        /**\n         * @type {Viewport}\n         */\n        this.viewport = null; // Viewport for screen rendering\n        this.near = -1000; // Near clipping plane\n        this.far = 1000; // Far clipping plane\n\n        // cached transforms\n        this.worldPosition = vec2();\n        this.worldRotation = 0;\n        this.worldScale = vec2(1, 1);\n        this.worldZoom = 1.0;\n\n\n        this.transformDirty = true;\n        this.projectionDirty = true;\n\n        // view frustum for culling (updated each frame)\n        this.frustum = {\n            left: 0, right: 0,\n            top: 0, bottom: 0,\n            near: 0, far: 0\n        };\n\n        this.bounds = {\n            left: 0, right: 0,\n            top: 0, bottom: 0,\n        }\n\n        // camera viewport size (in world units at zoom=1)\n        this.viewWidth = 800;\n        this.viewHeight = 600;\n\n\n        this.active = true;\n        this.cullingEnabled = true;\n\n        // cached matrices (avoid recalculating every frame)\n        this._viewMatrix = null;\n        this._projectionMatrix = null;\n        this._viewProjectionMatrix = null;\n    }\n\n\n    setBounds(bounds) {\n        this.bounds = bounds\n    }\n    /**\n     * viewport\n     * @param {*} width \n     * @param {*} height \n     */\n    setViewSize(width, height) {\n        this.viewWidth = width;\n        this.viewHeight = height;\n        this.projectionDirty = true;\n    }\n\n    updateWorldTransform() {\n        if (!this.transformDirty && !this.projectionDirty) return;\n\n        if (this.parent && this.parent.updateWorldTransform) {\n            this.parent.updateWorldTransform();\n\n            // Inherit parent's world transform\n            const cos = Math.cos(this.parent.worldRotation);\n            const sin = Math.sin(this.parent.worldRotation);\n\n            const scaledX = this.position.x * this.parent.worldScale.x;\n            const scaledY = this.position.y * this.parent.worldScale.y;\n\n            const rotatedX = scaledX * cos - scaledY * sin;\n            const rotatedY = scaledX * sin + scaledY * cos;\n\n            this.worldPosition.x = this.parent.worldPosition.x + rotatedX;\n            this.worldPosition.y = this.parent.worldPosition.y + rotatedY;\n\n            this.worldRotation = this.parent.worldRotation + this.rotation;\n            this.worldScale.x = this.parent.worldScale.x * this.scale.x;\n            this.worldScale.y = this.parent.worldScale.y * this.scale.y;\n            this.worldZoom = this.parent.worldZoom * this.zoom;\n        } else {\n            // Root camera\n            this.worldPosition.x = this.position.x;\n            this.worldPosition.y = this.position.y;\n            this.worldRotation = this.rotation;\n            this.worldScale.x = this.scale.x;\n            this.worldScale.y = this.scale.y;\n            this.worldZoom = this.zoom;\n        }\n\n        this._updateFrustum();\n\n    }\n\n    _process(delta) {\n        super._process(delta);\n        this.updateWorldTransform()\n    }\n\n    /**\n     * visible space in world \n     */\n    _updateFrustum() {\n        const hw = (this.viewWidth / 2) / this.worldZoom;\n        const hh = (this.viewHeight / 2) / this.worldZoom;\n        const c = Math.cos(this.worldRotation);\n        const s = Math.sin(this.worldRotation);\n        const cx = this.worldPosition.x;\n        const cy = this.worldPosition.y;\n\n        const absC = Math.abs(c);\n        const absS = Math.abs(s);\n\n        const halfExtentX = absC * hw + absS * hh;\n        const halfExtentY = absS * hw + absC * hh;\n\n        this.frustum.left = cx - halfExtentX;\n        this.frustum.right = cx + halfExtentX;\n        this.frustum.top = cy - halfExtentY;\n        this.frustum.bottom = cy + halfExtentY;\n        this.frustum.near = this.near;\n        this.frustum.far = this.far;\n    }\n\n\n    worldToScreen(worldX, worldY, applyViewport = true) {\n        this.updateWorldTransform()\n\n        // inverse of camera's world transform\n        const dx = worldX - this.worldPosition.x;\n        const dy = worldY - this.worldPosition.y;\n\n        // rotate by negative camera rotation (bring to camera space)\n        const cos = Math.cos(-this.worldRotation);\n        const sin = Math.sin(-this.worldRotation);\n\n        let camX = dx * cos - dy * sin;\n        let camY = dx * sin + dy * cos;\n\n        camX *= this.worldZoom;\n        camY *= this.worldZoom;\n\n        let screenX = camX + this.viewWidth / 2;\n        let screenY = camY + this.viewHeight / 2;\n\n        if (applyViewport && this.viewport) {\n            const scaleX = this.viewport.width / this.viewWidth;\n            const scaleY = this.viewport.height / this.viewHeight;\n\n            return {\n                x: screenX * scaleX + this.viewport.x,\n                y: screenY * scaleY + this.viewport.y\n            };\n        }\n\n        return { x: screenX, y: screenY };\n\n    }\n\n    screenToWorld(screenX, screenY) {\n        this.updateWorldTransform();\n\n        let localX, localY;\n\n        // 1. Remove viewport transform if present\n        if (this.viewport) {\n            const scaleX = this.viewWidth / this.viewport.width;\n            const scaleY = this.viewHeight / this.viewport.height;\n\n            localX = (screenX - this.viewport.x) * scaleX;\n            localY = (screenY - this.viewport.y) * scaleY;\n        } else {\n            localX = screenX;\n            localY = screenY;\n        }\n\n        // 2. Convert from screen to camera space\n        let camX = localX - this.viewWidth / 2;\n        let camY = localY - this.viewHeight / 2;\n\n        // Apply inverse zoom\n        camX /= this.worldZoom;\n        camY /= this.worldZoom;\n\n        // 3. Rotate by camera rotation (inverse of negative rotation)\n        const cos = Math.cos(this.worldRotation);\n        const sin = Math.sin(this.worldRotation);\n\n        const worldX = camX * cos - camY * sin + this.worldPosition.x;\n        const worldY = camX * sin + camY * cos + this.worldPosition.y;\n\n        return { x: worldX, y: worldY };\n    }\n\n\n    getVisibility(x, y, width = 0, height = 0) {\n        if (!this.cullingEnabled) return 2;\n\n        this.updateWorldTransform();\n\n        const left = x - width / 2;\n        const right = x + width / 2;\n        const top = y - height / 2;\n        const bottom = y + height / 2;\n\n        // Complete outside check\n        if (right < this.frustum.left || left > this.frustum.right ||\n            bottom < this.frustum.top || top > this.frustum.bottom) {\n            return 0; // Outside\n        }\n\n        // Complete inside check\n        if (left >= this.frustum.left && right <= this.frustum.right &&\n            top >= this.frustum.top && bottom <= this.frustum.bottom) {\n            return 2; // Fully inside\n        }\n\n        return 1; // Intersecting\n    }\n\n    isVisible(x, y, margin = 0) {\n        if (!this.cullingEnabled) return true;\n\n        this.updateWorldTransform();\n\n        return x >= this.frustum.left - margin && x <= this.frustum.right + margin &&\n            y >= this.frustum.top - margin && y <= this.frustum.bottom + margin;\n    }\n\n\n    /**\n     * Check if an axis-aligned bounding box (AABB) is visible in the camera view\n     * @param {number} worldX - Center X of the AABB in world space\n     * @param {number} worldY - Center Y of the AABB in world space\n     * @param {number} width - Width of the AABB\n     * @param {number} height - Height of the AABB\n     * @returns {boolean} True if the AABB is at least partially visible\n     */\n    isAABBVisible(worldX, worldY, width, height) {\n        return this.getVisibility(worldX, worldY, width, height) > 0;\n    }\n\n    getVisibleBounds() {\n        this.updateWorldTransform();\n\n        return {\n            left: this.frustum.left,\n            right: this.frustum.right,\n            top: this.frustum.top,\n            bottom: this.frustum.bottom,\n            width: this.frustum.right - this.frustum.left,\n            height: this.frustum.bottom - this.frustum.top\n        };\n    }\n\n\n    moveLocal(dx, dy) {\n        const cos = Math.cos(this.rotation);\n        const sin = Math.sin(this.rotation);\n\n        this.position.x += dx * cos - dy * sin;\n        this.position.y += dx * sin + dy * cos;\n        this.transformDirty = true;\n    }\n\n    moveWorld(dx, dy) {\n        this.position.x += dx;\n        this.position.y += dy;\n        this.transformDirty = true;\n    }\n\n    setPosition(x, y) {\n        this.position.x = x;\n        this.position.y = y;\n        this.transformDirty = true;\n    }\n\n\n    /**\n * Zoom with optional pivot point (world space)\n * Pivot allows zooming toward a specific point (like mouse position)\n */\n    zoomTo(factor, pivotX = null, pivotY = null) {\n        if (pivotX !== null && pivotY !== null) {\n            // Get current world position of pivot\n            const pivotWorld = this.screenToWorld(pivotX, pivotY);\n\n            // Apply zoom\n            const oldZoom = this.zoom;\n            this.zoom = factor;\n            this.transformDirty = true;\n\n            // Adjust position to keep pivot at same screen position\n            const newPivotWorld = this.screenToWorld(pivotX, pivotY);\n\n            this.position.x += pivotWorld.x - newPivotWorld.x;\n            this.position.y += pivotWorld.y - newPivotWorld.y;\n        } else {\n            this.zoom = factor;\n            this.transformDirty = true;\n        }\n    }\n\n    applyShake(intensity, decay = 0.9) {\n        if (intensity > 0.1) {\n            this.position.x += (Math.random() - 0.5) * intensity * 2;\n            this.position.y += (Math.random() - 0.5) * intensity * 2;\n            this.transformDirty = true;\n            return intensity * decay;\n        }\n        return 0;\n    }\n\n}\n\n\nexport class Viewport {\n    constructor(x, y, width, height) {\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n        this.scissorEnabled = true;\n    }\n\n    contains(screenX, screenY) {\n        return screenX >= this.x && screenX < this.x + this.width &&\n            screenY >= this.y && screenY < this.y + this.height;\n    }\n\n    setScissor(enabled) {\n        this.scissorEnabled = enabled;\n    }\n\n    shouldClip(canvasX, canvasY, margin = 0) {\n        if (!this.scissorEnabled) return false;\n\n        return canvasX < this.x - margin || canvasX >= this.x + this.width + margin ||\n            canvasY < this.y - margin || canvasY >= this.y + this.height + margin;\n    }\n}","/**\r\n * - `t = 0` → returns `a`\r\n- `t = 0.5` → returns midpoint\r\n- `t = 1` → returns `b`\r\n- Single multiplication, single addition\r\n- No branching (fast)\r\n- Works for ANY numeric type (positions, colors, angles, scales)\r\n\r\n * @param {*} a \r\n * @param {*} b \r\n * @param {*} t \r\n * @returns \r\n */\r\nexport function lerp(a, b, t) {\r\n    return a + (b - a) * t;\r\n}\r\n\r\n\r\nexport function lerp2D(p0, p1, t) {\r\n    return {\r\n        x: lerp(p0.x, p1.x, t),\r\n        y: lerp(p0.y, p1.y, t)\r\n    };\r\n}\r\n\r\nexport function inverseLerp(a, b, value) {\r\n    return (value - a) / (b - a);\r\n}\r\n\r\nexport function remap(inMin, inMax, outMin, outMax, value) {\r\n    const t = inverseLerp(inMin, inMax, value);\r\n    return lerp(outMin, outMax, t);\r\n}\r\n\r\n\r\n/**\r\n * in quadratic interpolation (or \"quadratic lerp\" in programming contexts), the resulting line is a parabolic curve that is determined by the three points. It is not a direct, piecewise linear connection of the points. \r\nQuadratic interpolation fits a second-degree polynomial (a parabola) through the three given points (e.g., A, B, and C).\r\nWhen used as a Bézier curve, the three points define the start point, an end point, and a control point that shapes the curve.\r\nThe curve is generated by a continuous process of linear interpolations (lerps) between intermediate points, resulting in a smooth arc. \r\n * @param {*} p0 \r\n * @param {*} p1 \r\n * @param {*} p2 \r\n * @param {*} t \r\n * @returns \r\n */\r\nexport function quadraticBezier(p0, p1, p2, t) {\r\n    // Level 1: lerp the edges\r\n    const a = lerp2D(p0, p1, t);\r\n    const b = lerp2D(p1, p2, t);\r\n    \r\n    // Level 2: lerp between those to get curve\r\n    return lerp2D(a, b, t);\r\n}\r\n\r\n// Get tangent (velocity) at point t\r\n/**\r\n * the tangent vector of a quadratic Bézier curve is directly related to a linear interpolation (LERP). Specifically, the first derivative of a quadratic Bézier curve equation is a LERP function that defines the curve's velocity and direction (tangent) at any given parameter \\(t\\). A quadratic Bézier curve is defined as \\(B(t)=(1-t)^{2}P_{0}+2(1-t)tP_{1}+t^{2}P_{2}\\).The first derivative (rate of change with respect to \\(t\\)) is \\(B^{\\prime }(t)=2(1-t)(P_{1}-P_{0})+2t(P_{2}-P_{1})\\).This derivative can be expressed as a LERP between the vectors \\((P_{1}-P_{0})\\) and \\((P_{2}-P_{1})\\), scaled by 2. \r\n * @param {*} p0 \r\n * @param {*} p1 \r\n * @param {*} p2 \r\n * @param {*} t \r\n * @returns \r\n */\r\nexport function quadraticBezierTangent(p0, p1, p2, t) {\r\n    // Derivative of quadratic bezier\r\n    const dx = 2 * (1 - t) * (p1.x - p0.x) + 2 * t * (p2.x - p1.x);\r\n    const dy = 2 * (1 - t) * (p1.y - p0.y) + 2 * t * (p2.y - p1.y);\r\n    \r\n    // Normalize\r\n    const len = Math.sqrt(dx * dx + dy * dy);\r\n    return { x: dx / len, y: dy / len };\r\n}\r\n\r\n\r\nexport function cubicBezier(p0, p1, p2, p3, t) {\r\n    // Level 1: lerp the four edges\r\n    const a = lerp2D(p0, p1, t);\r\n    const b = lerp2D(p1, p2, t);\r\n    const c = lerp2D(p2, p3, t);\r\n    \r\n    // Level 2: lerp between those\r\n    const d = lerp2D(a, b, t);\r\n    const e = lerp2D(b, c, t);\r\n    \r\n    // Level 3: final lerp\r\n    return lerp2D(d, e, t);\r\n}\r\n\r\nexport function cubicBezierTangent(p0, p1, p2, p3, t) {\r\n    // Derivative of cubic bezier\r\n    const dx = 3 * (1 - t) * (1 - t) * (p1.x - p0.x) +\r\n               6 * (1 - t) * t * (p2.x - p1.x) +\r\n               3 * t * t * (p3.x - p2.x);\r\n    const dy = 3 * (1 - t) * (1 - t) * (p1.y - p0.y) +\r\n               6 * (1 - t) * t * (p2.y - p1.y) +\r\n               3 * t * t * (p3.y - p2.y);\r\n    \r\n    const len = Math.sqrt(dx * dx + dy * dy);\r\n    return { x: dx / len, y: dy / len, magnitude: len };\r\n}\r\n\r\nexport function distance2D(p1, p2) {\r\n    const dx = p2.x - p1.x, dy = p2.y - p1.y;\r\n    return Math.sqrt(dx * dx + dy * dy);\r\n}\r\n\r\n\r\nexport class BezierChain {\r\n    constructor() { this.segments = []; }\r\n    \r\n    addSegment(p0, p1, p2, p3) {\r\n        this.segments.push({ p0, p1, p2, p3 });\r\n    }\r\n    \r\n    addSmoothSegment(p2, p3) {\r\n        if (this.segments.length === 0) return;\r\n        const lastSeg = this.segments[this.segments.length - 1];\r\n        const p0 = lastSeg.p3;\r\n        const p1 = { x: p0.x + (p0.x - lastSeg.p2.x), y: p0.y + (p0.y - lastSeg.p2.y) };\r\n        this.addSegment(p0, p1, p2, p3);\r\n    }\r\n    \r\n    getPoint(globalT) {\r\n        if (this.segments.length === 0) return null;\r\n        const segIndex = Math.floor(globalT);\r\n        const localT = globalT - segIndex;\r\n        if (segIndex >= this.segments.length) return this.segments[this.segments.length - 1].p3;\r\n        const seg = this.segments[segIndex];\r\n        return cubicBezier(seg.p0, seg.p1, seg.p2, seg.p3, localT);\r\n    }\r\n    \r\n    getTangent(globalT) {\r\n        if (this.segments.length === 0) return null;\r\n        let segIndex = Math.floor(globalT);\r\n        const localT = globalT - segIndex;\r\n        if (segIndex >= this.segments.length) segIndex = this.segments.length - 1;\r\n        const seg = this.segments[segIndex];\r\n        return cubicBezierTangent(seg.p0, seg.p1, seg.p2, seg.p3, localT);\r\n    }\r\n    \r\n    removeFirstSegment() {\r\n        if (this.segments.length > 0) this.segments.shift();\r\n    }\r\n}\r\n\r\n\r\n// console.log(lerp(10, 9, 0.5))\r\n// console.log(lerp(10, 19, 0.5))\r\n\r\n// bringing life to lerp, the change of t\r\n/**\r\n * **The insight:** We don't change lerp. We change **t**.\r\n\r\n```javascript\r\n// Linear (boring)\r\nconst x = lerp(a, b, t);\r\n\r\n// Beautiful\r\nconst easedT = easeOutCubic(t);\r\nconst x = lerp(a, b, easedT);\r\n```\r\n\r\nEasing functions transform `t` from a straight line into a curve. Same lerp, different feel.\r\n */\r\n// All easing functions take `t ∈ [0, 1]` and return `eased ∈ [0, 1]`. They're just curve equations.\r\n\r\n// **Quadratic (power of 2):**\r\n\r\nexport function easeInQuad(t) { return t * t; }\r\nexport function easeOutQuad(t) { return t * (2 - t); }\r\nexport function easeInOutQuad(t) {\r\n    return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n}\r\n\r\n\r\n// Cubic (power of 3):\r\n\r\nexport function easeInCubic(t) { return t * t * t; }\r\nexport function easeOutCubic(t) { return (--t) * t * t + 1; }\r\nexport function easeInOutCubic(t) {\r\n    return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\r\n}\r\n\r\n/**\r\n * \r\n- **EaseIn**: Slow start, fast end (accelerate)\r\n- **EaseOut**: Fast start, slow end (decelerate)\r\n- **EaseInOut**: Slow both ends, fast middle (S-curve)\r\n\r\n */\r\n\r\n\r\n// Quartic\r\nexport function easeInQuart(t) { return t * t * t * t; }\r\nexport function easeOutQuart(t) { return 1 - (--t) * t * t * t; }\r\nexport function easeInOutQuart(t) {\r\n    return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t;\r\n}\r\n\r\n// Elastic (spring-like overshoot)\r\nexport function easeOutElastic(t) {\r\n    const c4 = (2 * Math.PI) / 3;\r\n    return t === 0 ? 0 : t === 1 ? 1 : \r\n           Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;\r\n}\r\n\r\nexport function easeInElastic(t) {\r\n    const c4 = (2 * Math.PI) / 3;\r\n    return t === 0 ? 0 : t === 1 ? 1 :\r\n           -Math.pow(2, 10 * t - 10) * Math.sin((t * 10 - 10.75) * c4);\r\n}\r\n\r\n// Bounce\r\nexport function easeOutBounce(t) {\r\n    const n1 = 7.5625;\r\n    const d1 = 2.75;\r\n    if (t < 1 / d1) {\r\n        return n1 * t * t;\r\n    } else if (t < 2 / d1) {\r\n        return n1 * (t -= 1.5 / d1) * t + 0.75;\r\n    } else if (t < 2.5 / d1) {\r\n        return n1 * (t -= 2.25 / d1) * t + 0.9375;\r\n    } else {\r\n        return n1 * (t -= 2.625 / d1) * t + 0.984375;\r\n    }\r\n}\r\n\r\nexport function easeInBounce(t) {\r\n    return 1 - easeOutBounce(1 - t);\r\n}\r\n\r\n// Back (overshoot)\r\nexport function easeOutBack(t) {\r\n    const c1 = 1.70158;\r\n    const c3 = c1 + 1;\r\n    return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\r\n}\r\n\r\n\r\n/**\r\n * Every animation framework uses this same pattern:\r\n\r\n```javascript\r\nconst t = getCurrentTime() / duration;  // 0 to 1\r\nconst easedT = easingFunction(t);\r\nconst value = lerp(start, end, easedT);\r\n```\r\n\r\nSeparate **timing** (t) from **interpolation** (lerp) from **feel** (easing). This is why CSS animations, Unity animations, and game engines all have \"easing\" dropdowns.\r\n */","import { Camera2D } from \"./cam.js\";\r\nimport { Node } from \"./core.js\";\r\n\r\nimport { lerp, cubicBezier, easeInOutQuad, easeOutElastic } from \"./lerp.js\"\r\n\r\n/**\r\n * Base Controller - all camera behaviors inherit from this\r\n * Why a base class: provides common lifecycle methods and state management\r\n */\r\nexport class CameraController {\r\n    constructor(name = \"controller\") {\r\n        this.name = name;\r\n        this.enabled = true;\r\n        this.priority = 0; // Higher priority controllers override lower ones\r\n        this.camera = null;\r\n        this.weight = 1.0; // Blend weight for multiple controllers\r\n    }\r\n\r\n    attach(camera) {\r\n        this.camera = camera;\r\n        this.onAttach();\r\n    }\r\n\r\n    detach() {\r\n        this.onDetach();\r\n        this.camera = null;\r\n    }\r\n\r\n    // Lifecycle hooks\r\n    onAttach() { }\r\n    onDetach() { }\r\n    onUpdate(delta) { return false; } // Return true if camera modified\r\n\r\n    // Called before camera update\r\n    preUpdate(delta) { }\r\n\r\n    // Called after camera update  \r\n    postUpdate(delta) { }\r\n}\r\n\r\n/**\r\n * FollowController - smoothly follows a target\r\n * Key features:\r\n * - Lag/smoothing with lerp\r\n * - Deadzone (camera only moves when target leaves center area)\r\n * - Look-ahead (predictive movement)\r\n * - Boundaries (clamp to level limits)\r\n */\r\n/**\r\n * Optimized FollowController with smooth lerping\r\n * \r\n * Key improvements:\r\n * - Smooth lerp towards target center (no harsh deadzone snapping)\r\n * - Optional soft deadzone for reduced movement near center\r\n * - Simplified calculations, fewer conversions\r\n * - Better performance with early exits\r\n */\r\nexport class FollowController extends CameraController {\r\n    constructor(target, options = {}) {\r\n        super(\"follow\");\r\n        this.target = target;\r\n        this.enabled = true;\r\n\r\n        // Smoothing factor (0 = instant, 1 = no movement, 0.1 = nice default)\r\n        this.smoothing = options.smoothing ?? 0.1;\r\n        \r\n        // Soft deadzone: reduces movement when target is near center\r\n        // null = always follow, > 0 = proportional dampening inside radius\r\n        this.softDeadzoneRadius = options.softDeadzoneRadius ?? null;\r\n        this.softDeadzoneFalloff = options.softDeadzoneFalloff ?? 2; // power curve for falloff\r\n        \r\n        // Offset from target (useful for look-ahead or offset framing)\r\n        this.offset = options.offset || { x: 0, y: 0 };\r\n        \r\n        // Boundaries\r\n        this.bounds = options.bounds || null;\r\n\r\n        // Separate axis smoothing\r\n        this.smoothingX = options.smoothingX ?? this.smoothing;\r\n        this.smoothingY = options.smoothingY ?? this.smoothing;\r\n        \r\n        // Minimum movement threshold (optimization)\r\n        this.minMovement = options.minMovement ?? 0.0005;\r\n    }\r\n\r\n    onAttach() {\r\n        // Snap camera to target on attach to avoid initial jump\r\n        if (this.target?.worldPosition && this.camera) {\r\n            this.camera.position.x = this.target.worldPosition.x + this.offset.x;\r\n            this.camera.position.y = this.target.worldPosition.y + this.offset.y;\r\n            this.camera.transformDirty = true;\r\n        }\r\n    }\r\n\r\n    onUpdate(delta) {\r\n        if (!this.target || !this.camera || !this.enabled) return false;\r\n\r\n        // Ensure camera transform is current\r\n        this.camera.updateWorldTransform?.();\r\n\r\n        const cam = this.camera;\r\n        \r\n        // Get target world position\r\n        const targetPos = this.target.worldPosition?.x != null \r\n            ? this.target.worldPosition \r\n            : this.target.position;\r\n        \r\n        if (!targetPos) return false;\r\n\r\n        // Desired camera position (target + offset)\r\n        let desiredX = targetPos.x + this.offset.x;\r\n        let desiredY = targetPos.y + this.offset.y;\r\n\r\n        // Apply soft deadzone if enabled\r\n        if (this.softDeadzoneRadius != null && this.softDeadzoneRadius > 0) {\r\n            const worldZoom = cam.worldZoom ?? cam.zoom ?? 1;\r\n            const deadzoneWorld = this.softDeadzoneRadius / worldZoom;\r\n            \r\n            // Distance from camera to desired position\r\n            const dx = desiredX - cam.worldPosition.x;\r\n            const dy = desiredY - cam.worldPosition.y;\r\n            const dist = Math.sqrt(dx * dx + dy * dy);\r\n            \r\n            // If inside deadzone, scale movement based on distance\r\n            if (dist < deadzoneWorld) {\r\n                const influence = Math.pow(dist / deadzoneWorld, this.softDeadzoneFalloff);\r\n                desiredX = cam.worldPosition.x + dx * influence;\r\n                desiredY = cam.worldPosition.y + dy * influence;\r\n            }\r\n        }\r\n\r\n        // Lerp towards desired position\r\n        const sx = Math.max(0, Math.min(1, this.smoothingX));\r\n        const sy = Math.max(0, Math.min(1, this.smoothingY));\r\n        \r\n        let newWorldX = lerp(cam.worldPosition.x, desiredX, sx);\r\n        let newWorldY = lerp(cam.worldPosition.y, desiredY, sy);\r\n\r\n        // Apply bounds\r\n        if (this.bounds) {\r\n            const worldZoom = cam.worldZoom ?? cam.zoom ?? 1;\r\n            const halfW = (cam.viewWidth / 2) / worldZoom;\r\n            const halfH = (cam.viewHeight / 2) / worldZoom;\r\n            \r\n            newWorldX = Math.max(\r\n                this.bounds.left + halfW, \r\n                Math.min(this.bounds.right - halfW, newWorldX)\r\n            );\r\n            newWorldY = Math.max(\r\n                this.bounds.top + halfH, \r\n                Math.min(this.bounds.bottom - halfH, newWorldY)\r\n            );\r\n        }\r\n\r\n        // Calculate movement delta\r\n        const deltaX = newWorldX - cam.worldPosition.x;\r\n        const deltaY = newWorldY - cam.worldPosition.y;\r\n\r\n        // Early exit if movement is negligible (optimization)\r\n        if (Math.abs(deltaX) < this.minMovement && Math.abs(deltaY) < this.minMovement) {\r\n            return false;\r\n        }\r\n\r\n        // Apply movement\r\n        cam.position.x += deltaX;\r\n        cam.position.y += deltaY;\r\n        cam.transformDirty = true;\r\n\r\n        return true;\r\n    }\r\n}\r\n\r\n/**\r\n * ShakeController - screen shake for impacts, explosions, etc.\r\n * Key features:\r\n * - Perlin-like noise for natural shaking\r\n * - Decay over time\r\n * - Configurable intensity and frequency\r\n * - Can shake position, rotation, or both\r\n */\r\nexport class ShakeController extends CameraController {\r\n    constructor(options = {}) {\r\n        super(\"shake\");\r\n\r\n        // Configuration\r\n        this.intensity = options.intensity || 10;\r\n        this.decay = options.decay || 0.9;\r\n        this.frequency = options.frequency || 60; // Shakes per second\r\n        this.shakePosition = options.shakePosition !== false;\r\n        this.shakeRotation = options.shakeRotation || false;\r\n        this.maxRotation = options.maxRotation || 0.1; // Max radians\r\n\r\n        // Internal state\r\n        this.time = 0;\r\n        this.seed = Math.random() * 1000;\r\n        this.currentIntensity = 0;\r\n        this.offset = { x: 0, y: 0 };\r\n        this.rotationOffset = 0;\r\n\r\n        // Perlin-like noise parameters\r\n        this.octaves = options.octaves || 2;\r\n        this.persistence = options.persistence || 0.5;\r\n    }\r\n\r\n    // Trigger a shake\r\n    shake(intensity = this.intensity) {\r\n        this.currentIntensity = Math.max(this.currentIntensity, intensity);\r\n        this.time = 0;\r\n    }\r\n\r\n    onUpdate(delta) {\r\n        if (!this.camera || !this.enabled || this.currentIntensity < 0.01) return false;\r\n\r\n        this.time += delta;\r\n        let modified = false;\r\n\r\n        // Apply decay\r\n        this.currentIntensity *= this.decay;\r\n\r\n        if (this.currentIntensity < 0.01) {\r\n            // Reset offsets when shake ends\r\n            if (this.offset.x !== 0 || this.offset.y !== 0 || this.rotationOffset !== 0) {\r\n                this.offset = { x: 0, y: 0 };\r\n                this.rotationOffset = 0;\r\n                this.camera.transformDirty = true;\r\n                return true;\r\n            }\r\n            return false;\r\n        }\r\n\r\n        // Calculate noise-based offsets\r\n        if (this.shakePosition) {\r\n            const newX = this._perlinNoise(this.seed, this.time * this.frequency) * this.currentIntensity;\r\n            const newY = this._perlinNoise(this.seed + 100, this.time * this.frequency) * this.currentIntensity;\r\n\r\n            if (Math.abs(newX - this.offset.x) > 0.001 || Math.abs(newY - this.offset.y) > 0.001) {\r\n                this.offset.x = newX;\r\n                this.offset.y = newY;\r\n                modified = true;\r\n            }\r\n        }\r\n\r\n        if (this.shakeRotation) {\r\n            const newRot = this._perlinNoise(this.seed + 200, this.time * this.frequency) *\r\n                this.currentIntensity * this.maxRotation / this.intensity;\r\n\r\n            if (Math.abs(newRot - this.rotationOffset) > 0.001) {\r\n                this.rotationOffset = newRot;\r\n                modified = true;\r\n            }\r\n        }\r\n\r\n        if (modified) {\r\n            this.camera.transformDirty = true;\r\n        }\r\n\r\n        return modified;\r\n    }\r\n\r\n    // Simple Perlin-like noise (fractal Brownian motion)\r\n    _perlinNoise(seed, t) {\r\n        let total = 0;\r\n        let frequency = 1;\r\n        let amplitude = 1;\r\n        let maxValue = 0;\r\n\r\n        for (let i = 0; i < this.octaves; i++) {\r\n            // Simple pseudo-random function\r\n            const value = Math.sin((seed + t) * frequency) * amplitude;\r\n            total += value;\r\n            maxValue += amplitude;\r\n            amplitude *= this.persistence;\r\n            frequency *= 2;\r\n        }\r\n\r\n        return total / maxValue;\r\n    }\r\n\r\n    preUpdate(delta) {\r\n        if (!this.camera || !this.enabled) return;\r\n\r\n        // Apply offsets before camera updates\r\n        if (this.shakePosition) {\r\n            this.camera.position.x += this.offset.x;\r\n            this.camera.position.y += this.offset.y;\r\n        }\r\n\r\n        if (this.shakeRotation) {\r\n            this.camera.rotation += this.rotationOffset;\r\n        }\r\n    }\r\n\r\n    postUpdate(delta) {\r\n        if (!this.camera || !this.enabled) return;\r\n\r\n        // Remove offsets after camera updates (so they're fresh next frame)\r\n        if (this.shakePosition) {\r\n            this.camera.position.x -= this.offset.x;\r\n            this.camera.position.y -= this.offset.y;\r\n        }\r\n\r\n        if (this.shakeRotation) {\r\n            this.camera.rotation -= this.rotationOffset;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * ZoomController - smooth zoom interpolation\r\n * Key features:\r\n * - Animated zoom to target level\r\n * - Zoom to fit specific bounds\r\n * - Zoom with pivot point (mouse position)\r\n */\r\nexport class ZoomController extends CameraController {\r\n    constructor(options = {}) {\r\n        super(\"zoom\");\r\n\r\n        // Configuration\r\n        this.targetZoom = options.initialZoom || 1.0;\r\n        this.smoothing = options.smoothing || 0.1;\r\n        this.minZoom = options.minZoom || 0.1;\r\n        this.maxZoom = options.maxZoom || 10.0;\r\n        this.zoomToFitPadding = options.zoomToFitPadding || 50;\r\n\r\n        // Internal state\r\n        this.isZooming = false;\r\n        this.zoomStart = 1.0;\r\n        this.zoomTime = 0;\r\n        this.zoomDuration = 0;\r\n        this.easingFunc = null;\r\n        this.pivot = null; // { x, y } in world space\r\n    }\r\n\r\n    // Zoom to specific level with animation\r\n    zoomTo(zoomLevel, duration = 0, easing = \"linear\", pivot = null) {\r\n        this.targetZoom = Math.max(this.minZoom, Math.min(this.maxZoom, zoomLevel));\r\n        this.pivot = pivot;\r\n\r\n        if (duration > 0) {\r\n            this.isZooming = true;\r\n            this.zoomStart = this.camera.zoom;\r\n            this.zoomTime = 0;\r\n            this.zoomDuration = duration;\r\n            this.easingFunc = this._getEasingFunction(easing);\r\n        } else {\r\n            this.camera.zoom = this.targetZoom;\r\n            this.camera.transformDirty = true;\r\n        }\r\n    }\r\n\r\n    // Zoom to fit a bounding box in view\r\n    zoomToFit(bounds, duration = 0, easing = \"linear\") {\r\n        // Calculate required zoom to fit bounds in view\r\n        const { left, right, top, bottom } = bounds;\r\n        const width = right - left + this.zoomToFitPadding * 2;\r\n        const height = bottom - top + this.zoomToFitPadding * 2;\r\n\r\n        const zoomX = this.camera.viewWidth / width;\r\n        const zoomY = this.camera.viewHeight / height;\r\n\r\n        // Use the smaller zoom to ensure everything fits\r\n        const targetZoom = Math.min(zoomX, zoomY);\r\n\r\n        // Center on bounds\r\n        const centerX = (left + right) / 2;\r\n        const centerY = (top + bottom) / 2;\r\n\r\n        // Set camera position and zoom\r\n        this.camera.setPosition(centerX, centerY);\r\n        this.zoomTo(targetZoom, duration, easing);\r\n    }\r\n\r\n    // Zoom in/out by factor\r\n    zoomBy(factor, duration = 0, easing = \"linear\", pivot = null) {\r\n        this.zoomTo(this.targetZoom * factor, duration, easing, pivot);\r\n    }\r\n\r\n    onUpdate(delta) {\r\n        if (!this.camera || !this.enabled) return false;\r\n\r\n        let modified = false;\r\n\r\n        // Handle animated zoom\r\n        if (this.isZooming) {\r\n            this.zoomTime += delta;\r\n\r\n            if (this.zoomTime >= this.zoomDuration) {\r\n                // Animation complete\r\n                this.camera.zoom = this.targetZoom;\r\n                this.isZooming = false;\r\n                modified = true;\r\n            } else {\r\n                // Interpolate zoom\r\n                const t = this.zoomTime / this.zoomDuration;\r\n                const easedT = this.easingFunc ? this.easingFunc(t) : t;\r\n                const newZoom = lerp(this.zoomStart, this.targetZoom, easedT);\r\n\r\n                if (Math.abs(newZoom - this.camera.zoom) > 0.001) {\r\n                    // Handle pivot-based zoom (keep point stable)\r\n                    if (this.pivot) {\r\n                        const oldWorld = this.camera.screenToWorld(this.pivot.x, this.pivot.y);\r\n                        this.camera.zoom = newZoom;\r\n                        const newWorld = this.camera.screenToWorld(this.pivot.x, this.pivot.y);\r\n\r\n                        // Adjust position to keep pivot point stable\r\n                        this.camera.position.x += oldWorld.x - newWorld.x;\r\n                        this.camera.position.y += oldWorld.y - newWorld.y;\r\n                    } else {\r\n                        this.camera.zoom = newZoom;\r\n                    }\r\n\r\n                    modified = true;\r\n                }\r\n            }\r\n        } else {\r\n            // Smooth zoom to target\r\n            const newZoom = lerp(this.camera.zoom, this.targetZoom, this.smoothing);\r\n            if (Math.abs(newZoom - this.camera.zoom) > 0.001) {\r\n                this.camera.zoom = newZoom;\r\n                modified = true;\r\n            }\r\n        }\r\n\r\n        // Clamp zoom to limits\r\n        if (this.camera.zoom < this.minZoom) {\r\n            this.camera.zoom = this.minZoom;\r\n            modified = true;\r\n        } else if (this.camera.zoom > this.maxZoom) {\r\n            this.camera.zoom = this.maxZoom;\r\n            modified = true;\r\n        }\r\n\r\n        if (modified) {\r\n            this.camera.transformDirty = true;\r\n        }\r\n\r\n        return modified;\r\n    }\r\n\r\n    _getEasingFunction(name) {\r\n        switch (name) {\r\n            case 'linear': return t => t;\r\n            case 'easeIn': return t => t * t;\r\n            case 'easeOut': return t => t * (2 - t);\r\n            case 'easeInOut': return easeInOutQuad;\r\n            case 'elastic': return easeOutElastic;\r\n            default: return t => t;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * PathController - follow a Bézier path for cinematic sequences\r\n * Key features:\r\n * - Follow sequence of control points\r\n * - Configurable speed and easing\r\n * - Loop or one-shot playback\r\n * - Callbacks at waypoints\r\n */\r\nexport class PathController extends CameraController {\r\n    constructor(path = [], options = {}) {\r\n        super(\"path\");\r\n\r\n        // Path data\r\n        this.path = path; // Array of control point arrays\r\n        this.speed = options.speed || 100; // Units per second\r\n        this.easing = options.easing || 'linear';\r\n        this.loop = options.loop || false;\r\n        this.autoStart = options.autoStart || false;\r\n\r\n        // Internal state\r\n        this.isPlaying = false;\r\n        this.currentTime = 0;\r\n        this.totalDistance = 0;\r\n        this.segmentDistances = [];\r\n        this.currentSegment = 0;\r\n        this.t = 0;\r\n\r\n        // Callbacks\r\n        this.onComplete = options.onComplete;\r\n        this.onWaypoint = options.onWaypoint;\r\n\r\n        // Calculate path distances if provided\r\n        if (path.length >= 4) {\r\n            this._calculatePathDistances();\r\n        }\r\n    }\r\n\r\n    play() {\r\n        this.isPlaying = true;\r\n        this.currentTime = 0;\r\n        this.currentSegment = 0;\r\n        this.t = 0;\r\n    }\r\n\r\n    pause() {\r\n        this.isPlaying = false;\r\n    }\r\n\r\n    stop() {\r\n        this.isPlaying = false;\r\n        this.currentTime = 0;\r\n        this.currentSegment = 0;\r\n        this.t = 0;\r\n    }\r\n\r\n    _calculatePathDistances() {\r\n        // Estimate path length by sampling\r\n        this.segmentDistances = [];\r\n        this.totalDistance = 0;\r\n\r\n        const samples = 100;\r\n        for (let i = 0; i < this.path.length - 3; i += 3) {\r\n            let segmentDist = 0;\r\n            let lastPoint = cubicBezier(\r\n                this.path[i], this.path[i + 1], this.path[i + 2], this.path[i + 3], 0\r\n            );\r\n\r\n            for (let j = 1; j <= samples; j++) {\r\n                const t = j / samples;\r\n                const point = cubicBezier(\r\n                    this.path[i], this.path[i + 1], this.path[i + 2], this.path[i + 3], t\r\n                );\r\n\r\n                const dx = point.x - lastPoint.x;\r\n                const dy = point.y - lastPoint.y;\r\n                segmentDist += Math.sqrt(dx * dx + dy * dy);\r\n                lastPoint = point;\r\n            }\r\n\r\n            this.segmentDistances.push(segmentDist);\r\n            this.totalDistance += segmentDist;\r\n        }\r\n    }\r\n\r\n    onUpdate(delta) {\r\n        if (!this.camera || !this.enabled || !this.isPlaying || this.path.length < 4) {\r\n            return false;\r\n        }\r\n\r\n        this.currentTime += delta;\r\n        const distanceTraveled = this.currentTime * this.speed;\r\n\r\n        // Find current segment based on distance\r\n        let accumulatedDist = 0;\r\n        let segmentIndex = 0;\r\n\r\n        for (let i = 0; i < this.segmentDistances.length; i++) {\r\n            if (distanceTraveled <= accumulatedDist + this.segmentDistances[i]) {\r\n                segmentIndex = i;\r\n                break;\r\n            }\r\n            accumulatedDist += this.segmentDistances[i];\r\n        }\r\n\r\n        // Check if path complete\r\n        if (distanceTraveled >= this.totalDistance) {\r\n            if (this.loop) {\r\n                this.currentTime = 0;\r\n                this.currentSegment = 0;\r\n                this.t = 0;\r\n                return this.onUpdate(delta);\r\n            } else {\r\n                this.isPlaying = false;\r\n                if (this.onComplete) this.onComplete();\r\n                return false;\r\n            }\r\n        }\r\n\r\n        // Calculate t within current segment\r\n        const segmentDist = distanceTraveled - accumulatedDist;\r\n        this.t = segmentDist / this.segmentDistances[segmentIndex];\r\n\r\n        // Apply easing\r\n        const easedT = this._applyEasing(this.t, this.easing);\r\n\r\n        // Get position from Bézier curve\r\n        const startIdx = segmentIndex * 3;\r\n        const point = cubicBezier(\r\n            this.path[startIdx], this.path[startIdx + 1],\r\n            this.path[startIdx + 2], this.path[startIdx + 3], easedT\r\n        );\r\n\r\n        // Update camera position\r\n        const oldX = this.camera.position.x;\r\n        const oldY = this.camera.position.y;\r\n\r\n        this.camera.position.x = point.x;\r\n        this.camera.position.y = point.y;\r\n\r\n        // Check if waypoint reached\r\n        if (segmentIndex !== this.currentSegment) {\r\n            this.currentSegment = segmentIndex;\r\n            if (this.onWaypoint) this.onWaypoint(segmentIndex);\r\n        }\r\n\r\n        // Check if position changed\r\n        if (Math.abs(oldX - point.x) > 0.001 || Math.abs(oldY - point.y) > 0.001) {\r\n            this.camera.transformDirty = true;\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    _applyEasing(t, easing) {\r\n        switch (easing) {\r\n            case 'linear': return t;\r\n            case 'easeIn': return t * t;\r\n            case 'easeOut': return t * (2 - t);\r\n            case 'easeInOut': return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n            default: return t;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * ControllerManager - manages multiple controllers on a camera\r\n * Why needed: handles controller priority, blending, and update order\r\n */\r\nexport class ControllerManager {\r\n    constructor(camera) {\r\n        this.camera = camera;\r\n        this.controllers = new Map(); // name -> controller\r\n        this.updateOrder = []; // Array of controller names in update order\r\n\r\n        // Automatic update integration\r\n        this._originalUpdate = camera._process;\r\n        camera._process = this._update.bind(this);\r\n    }\r\n\r\n    add(controller) {\r\n        controller.attach(this.camera);\r\n        this.controllers.set(controller.name, controller);\r\n\r\n        // Insert in priority order (higher priority first)\r\n        this.updateOrder = Array.from(this.controllers.values())\r\n            .sort((a, b) => b.priority - a.priority)\r\n            .map(c => c.name);\r\n\r\n        return controller;\r\n    }\r\n\r\n    remove(name) {\r\n        const controller = this.controllers.get(name);\r\n        if (controller) {\r\n            controller.detach();\r\n            this.controllers.delete(name);\r\n            this.updateOrder = this.updateOrder.filter(n => n !== name);\r\n        }\r\n    }\r\n\r\n    get(name) {\r\n        return this.controllers.get(name);\r\n    }\r\n\r\n    _update(delta) {\r\n        // Call pre-update on all controllers\r\n        for (const name of this.updateOrder) {\r\n            const controller = this.controllers.get(name);\r\n            if (controller && controller.enabled) {\r\n                controller.preUpdate(delta);\r\n            }\r\n        }\r\n\r\n        // Call original camera update\r\n        if (this._originalUpdate) {\r\n            // console.log(\"calling original update\")\r\n            this._originalUpdate.call(this.camera, delta);\r\n        }\r\n\r\n        // Call onUpdate on all controllers\r\n        for (const name of this.updateOrder) {\r\n            const controller = this.controllers.get(name);\r\n            if (controller && controller.enabled) {\r\n                controller.onUpdate(delta);\r\n            }\r\n        }\r\n\r\n        // Call post-update on all controllers\r\n        for (const name of this.updateOrder) {\r\n            const controller = this.controllers.get(name);\r\n            if (controller && controller.enabled) {\r\n                controller.postUpdate(delta);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Integrated Camera2D with controller support\r\n * Extends the base Camera2D to include controller management\r\n */\r\nexport class ControlledCamera extends Camera2D {\r\n    constructor(name = \"camera\") {\r\n        super(name);\r\n        this.controllerManager = new ControllerManager(this);\r\n        this._controllers = this.controllerManager; // Alias for convenience\r\n    }\r\n\r\n    addController(controller) {\r\n        return this.controllerManager.add(controller);\r\n    }\r\n\r\n    removeController(name) {\r\n        this.controllerManager.remove(name);\r\n    }\r\n\r\n    getController(name) {\r\n        return this.controllerManager.get(name);\r\n    }\r\n\r\n    // Convenience methods\r\n    follow(target, options) {\r\n        const controller = new FollowController(target, options);\r\n        this.addController(controller);\r\n        return controller;\r\n    }\r\n\r\n    shake(options) {\r\n        const controller = new ShakeController(options);\r\n        this.addController(controller);\r\n        return controller;\r\n    }\r\n\r\n    zoom(options) {\r\n        const controller = new ZoomController(options);\r\n        this.addController(controller);\r\n        return controller;\r\n    }\r\n\r\n    path(path, options) {\r\n        const controller = new PathController(path, options);\r\n        this.addController(controller);\r\n        return controller;\r\n    }\r\n}\r\n\r\n/**\r\n * CameraRig - parent node for camera with additional control points\r\n * Useful for: camera shake that doesn't affect child objects, complex camera setups\r\n */\r\nexport class CameraRig extends Node {\r\n    constructor(name = \"camera_rig\") {\r\n        super(name);\r\n        this.camera = new ControlledCamera(\"attached_camera\");\r\n        this.addChild(this.camera);\r\n\r\n        // Additional control nodes\r\n        this.pivot = new Node(\"pivot\");\r\n        this.camera.addChild(this.pivot);\r\n\r\n        // Offset from rig to camera\r\n        this.cameraOffset = { x: 0, y: 0 };\r\n    }\r\n\r\n    // Shake just the camera, not the rig\r\n    shakeCamera(intensity = 10) {\r\n        const shakeCtrl = this.camera.shake({ intensity });\r\n        return shakeCtrl;\r\n    }\r\n\r\n    // Move rig (affects camera and all children)\r\n    moveRig(x, y) {\r\n        this.position.x += x;\r\n        this.position.y += y;\r\n        this.transformDirty = true;\r\n    }\r\n\r\n    // Set camera offset relative to rig\r\n    setCameraOffset(x, y) {\r\n        this.cameraOffset.x = x;\r\n        this.cameraOffset.y = y;\r\n        this.camera.position.x = x;\r\n        this.camera.position.y = y;\r\n        this.camera.transformDirty = true;\r\n    }\r\n}\r\n\r\n\r\n","// engine/audio.js - Audio management system with fade effects and spatial audio\r\n\r\nimport { globalPerf } from \"./lib.js\";\r\n\r\n// import { EventBus } from './signals.js';\r\nconst audioperf = globalPerf\r\n/**\r\n * AudioManager - high-level audio management\r\n * \r\n * Features:\r\n * - Named audio assets (play by name, not handle)\r\n * - Volume groups (SFX, music, master)\r\n * - Fade in/out effects\r\n * - Spatial audio (2D positional sound)\r\n * - Audio groups (random variation)\r\n * - Preloading\r\n * \r\n * Why this wrapper:\r\n * - tessera.js is low-level (handles, no names)\r\n * - Need organized asset management\r\n * - Need fade effects for polish\r\n * - Need volume groups for settings\r\n */\r\nexport class AudioManagerClass {\r\n    constructor() {\r\n        // tessera.js audio interface\r\n        this.audio = null;\r\n\r\n        // Asset registry\r\n        this.sounds = new Map();  // name -> { handle, type: \"sound\" }\r\n        this.music = new Map();   // name -> { handle, type: \"music\" }\r\n\r\n        // Volume settings\r\n        this.masterVolume = 1.0;\r\n        this.sfxVolume = 1.0;\r\n        this.musicVolume = 1.0;\r\n\r\n        // Currently playing instances (for fade effects)\r\n        this.activeSounds = new Map(); // name -> { handle, volume, fadeTarget, fadeSpeed }\r\n        this.activeMusic = null; // { name, handle, volume, fadeTarget, fadeSpeed }\r\n\r\n        // Audio groups (for random variation)\r\n        this.groups = new Map(); // groupName -> [soundNames]\r\n\r\n        // Spatial audio settings\r\n        this.listenerPosition = { x: 0, y: 0 };\r\n        this.maxHearingDistance = 1000; // pixels\r\n    }\r\n\r\n    /**\r\n     * Initialize with tessera.js audio interface\r\n     * \r\n     * @param {Object} audioInterface - renderer.audio from tessera.js\r\n     */\r\n    init(audioInterface) {\r\n        this.audio = audioInterface;\r\n\r\n        // Set initial master volume\r\n        this.audio.setMasterVolume(this.masterVolume);\r\n\r\n        console.log(\"AudioManager initialized\");\r\n    }\r\n\r\n    /**\r\n     * Load sound effect (fully loaded into memory)\r\n     * \r\n     * @param {string} name - Unique name for this sound\r\n     * @param {string} filePath - Path to audio file\r\n     * @returns {Promise<boolean>} - Success\r\n     */\r\n    async loadSound(name, filePath) {\r\n        if (this.sounds.has(name)) {\r\n            console.warn(`Sound \"${name}\" already loaded`);\r\n            return true;\r\n        }\r\n\r\n        try {\r\n            const handle = this.audio.loadSound(filePath);\r\n\r\n            if (handle === 0) {\r\n                console.error(`Failed to load sound: ${filePath}`);\r\n                return false;\r\n            }\r\n\r\n            this.sounds.set(name, {\r\n                handle,\r\n                type: \"sound\",\r\n                filePath,\r\n                baseVolume: 1.0\r\n            });\r\n\r\n            console.log(`Loaded sound: ${name} (${filePath})`);\r\n            return true;\r\n        } catch (error) {\r\n            console.error(`Error loading sound \"${name}\":`, error);\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Load music (streamed from disk)\r\n     * \r\n     * @param {string} name - Unique name for this music\r\n     * @param {string} filePath - Path to audio file\r\n     * @returns {Promise<boolean>} - Success\r\n     */\r\n    async loadMusic(name, filePath) {\r\n        if (this.music.has(name)) {\r\n            console.warn(`Music \"${name}\" already loaded`);\r\n            return true;\r\n        }\r\n\r\n        try {\r\n            const handle = this.audio.loadMusic(filePath);\r\n\r\n            if (handle === 0) {\r\n                console.error(`Failed to load music: ${filePath}`);\r\n                return false;\r\n            }\r\n\r\n            this.music.set(name, {\r\n                handle,\r\n                type: \"music\",\r\n                filePath,\r\n                baseVolume: 1.0\r\n            });\r\n\r\n            console.log(`Loaded music: ${name} (${filePath})`);\r\n            return true;\r\n        } catch (error) {\r\n            console.error(`Error loading music \"${name}\":`, error);\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Play sound effect\r\n     * \r\n     * @param {string} name - Sound name\r\n     * @param {Object} options - { volume, pitch, loop }\r\n     * @returns {boolean} - Success\r\n     */\r\n    playSound(name, options = {}) {\r\n        const sound = this.sounds.get(name);\r\n        if (!sound) {\r\n            console.warn(`Sound not loaded: ${name}`);\r\n            return false;\r\n        }\r\n\r\n        // Calculate final volume (master * sfx * base * options)\r\n        const volume = (options.volume || 1.0) * sound.baseVolume * this.sfxVolume * this.masterVolume;\r\n\r\n\r\n        // Play\r\n        this.audio.playSound(sound.handle);\r\n\r\n        // Set volume before playing\r\n        this.audio.setSoundVolume(sound.handle, volume);\r\n        // Track active sound (for potential fade effects)\r\n        this.activeSounds.set(name, {\r\n            handle: sound.handle,\r\n            volume,\r\n            fadeTarget: null,\r\n            fadeSpeed: 0\r\n        });\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * Play music with fade options\r\n     * \r\n     * @param {string} name - Music name\r\n     * @param {Object} options - { fadeIn, loop, volume }\r\n     * @returns {boolean} - Success\r\n     */\r\n    playMusic(name, options = {}) {\r\n        const music = this.music.get(name);\r\n        if (!music) {\r\n            console.warn(`Music not loaded: ${name}`);\r\n            return false;\r\n        }\r\n\r\n        // Stop current music if playing\r\n        if (this.activeMusic && this.activeMusic.name !== name) {\r\n            this.stopMusic(this.activeMusic.name, { fadeOut: options.fadeIn || 0 });\r\n        }\r\n\r\n        // Calculate volume\r\n        const targetVolume = (options.volume || 1.0) * music.baseVolume * this.musicVolume * this.masterVolume;\r\n\r\n        // Fade in effect\r\n        let startVolume = targetVolume;\r\n        let fadeSpeed = 0;\r\n\r\n        if (options.fadeIn) {\r\n            startVolume = 0;\r\n            fadeSpeed = targetVolume / options.fadeIn; // Volume units per second\r\n        }\r\n\r\n\r\n\r\n        // Play\r\n        this.audio.playMusic(music.handle, options.loop);\r\n        // Set initial volume\r\n        this.audio.setMusicVolume(music.handle, startVolume);\r\n        // Track active music\r\n        this.activeMusic = {\r\n            name,\r\n            handle: music.handle,\r\n            volume: startVolume,\r\n            fadeTarget: options.fadeIn ? targetVolume : null,\r\n            fadeSpeed\r\n        };\r\n\r\n        console.log(`Playing music: ${name}${options.fadeIn ? ` (fade in ${options.fadeIn}s)` : ''}`);\r\n\r\n        // EventBus.emit(\"music_started\", { name });\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * Stop music with fade out\r\n     * \r\n     * @param {string} name - Music name\r\n     * @param {Object} options - { fadeOut }\r\n     */\r\n    stopMusic(name, options = {}) {\r\n        const music = this.music.get(name);\r\n        if (!music) {\r\n            console.warn(`Music not loaded: ${name}`);\r\n            return;\r\n        }\r\n\r\n        if (!this.activeMusic || this.activeMusic.name !== name) {\r\n            return; // Not playing\r\n        }\r\n\r\n        if (options.fadeOut) {\r\n            // Fade out to 0\r\n            this.activeMusic.fadeTarget = 0;\r\n            this.activeMusic.fadeSpeed = -this.activeMusic.volume / options.fadeOut;\r\n            this.activeMusic.stopping = true;\r\n        } else {\r\n            // Immediate stop\r\n            this.audio.stopMusic(music.handle);\r\n            this.activeMusic = null;\r\n\r\n            // EventBus.emit(\"music_stopped\", { name });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Pause music\r\n     */\r\n    pauseMusic(name) {\r\n        const music = this.music.get(name);\r\n        if (!music) return;\r\n\r\n        this.audio.pauseMusic(music.handle);\r\n    }\r\n\r\n    /**\r\n     * Resume music\r\n     */\r\n    resumeMusic(name) {\r\n        const music = this.music.get(name);\r\n        if (!music) return;\r\n\r\n        this.audio.resumeMusic(music.handle);\r\n    }\r\n\r\n    /**\r\n     * Play sound with 2D spatial positioning\r\n     * \r\n     * Volume falls off with distance from listener\r\n     * \r\n     * @param {string} name - Sound name\r\n     * @param {number} x - Sound world X\r\n     * @param {number} y - Sound world Y\r\n     * @param {number} listenerX - Listener world X (camera/player)\r\n     * @param {number} listenerY - Listener world Y\r\n     */\r\n    playSoundAt(name, x, y, listenerX, listenerY) {\r\n        // Calculate distance\r\n        const dx = x - listenerX;\r\n        const dy = y - listenerY;\r\n        const distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n        // Distance attenuation (linear falloff)\r\n        const attenuation = Math.max(0, 1 - distance / this.maxHearingDistance);\r\n\r\n        if (attenuation <= 0) {\r\n            return; // Too far, don't play\r\n        }\r\n\r\n        // Play with attenuated volume\r\n        this.playSound(name, { volume: attenuation });\r\n    }\r\n\r\n    /**\r\n     * Set master volume (affects all audio)\r\n     */\r\n    setMasterVolume(volume) {\r\n        this.masterVolume = Math.max(0, Math.min(1, volume));\r\n        this.audio.setMasterVolume(this.masterVolume);\r\n\r\n        // Update active sounds/music\r\n        this.updateAllVolumes();\r\n\r\n        // EventBus.emit(\"volume_changed\", { type: \"master\", volume: this.masterVolume });\r\n    }\r\n\r\n    /**\r\n     * Set SFX volume group\r\n     */\r\n    setSFXVolume(volume) {\r\n        this.sfxVolume = Math.max(0, Math.min(1, volume));\r\n        this.updateAllVolumes();\r\n\r\n        // EventBus.emit(\"volume_changed\", { type: \"sfx\", volume: this.sfxVolume });\r\n    }\r\n\r\n    /**\r\n     * Set music volume group\r\n     */\r\n    setMusicVolume(volume) {\r\n        this.musicVolume = Math.max(0, Math.min(1, volume));\r\n        this.updateAllVolumes();\r\n\r\n        // EventBus.emit(\"volume_changed\", { type: \"music\", volume: this.musicVolume });\r\n    }\r\n\r\n    /**\r\n     * Update volumes for all active audio\r\n     */\r\n    updateAllVolumes() {\r\n        // Update active sounds\r\n        for (const [name, data] of this.activeSounds) {\r\n            const sound = this.sounds.get(name);\r\n            if (sound) {\r\n                const volume = sound.baseVolume * this.sfxVolume * this.masterVolume;\r\n                this.audio.setSoundVolume(sound.handle, volume);\r\n            }\r\n        }\r\n\r\n        // Update active music\r\n        if (this.activeMusic) {\r\n            const music = this.music.get(this.activeMusic.name);\r\n            if (music) {\r\n                const volume = music.baseVolume * this.musicVolume * this.masterVolume;\r\n                this.audio.setMusicVolume(music.handle, volume);\r\n                this.activeMusic.volume = volume;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Create audio group for random variation\r\n     * \r\n     * Example: footsteps group contains step1, step2, step3\r\n     * \r\n     * @param {string} groupName - Group name\r\n     * @param {Array<string>} soundNames - Sound names in group\r\n     */\r\n    createGroup(groupName, soundNames) {\r\n        this.groups.set(groupName, soundNames);\r\n        console.log(`Created audio group: ${groupName} (${soundNames.length} sounds)`);\r\n    }\r\n\r\n    /**\r\n     * Play random sound from group\r\n     */\r\n    playRandomFromGroup(groupName, options = {}) {\r\n        const group = this.groups.get(groupName);\r\n        if (!group || group.length === 0) {\r\n            console.warn(`Audio group not found or empty: ${groupName}`);\r\n            return false;\r\n        }\r\n\r\n        // Pick random\r\n        const randomName = group[Math.floor(Math.random() * group.length)];\r\n        return this.playSound(randomName, options);\r\n    }\r\n\r\n    /**\r\n     * Update fade effects (call every frame)\r\n     * \r\n     * @param {number} delta - Time delta in seconds\r\n     */\r\n    update(delta) {\r\n        // Update music fade\r\n        audioperf.start(\"audioupdate\")\r\n        if (this.activeMusic && this.activeMusic.fadeTarget !== null) {\r\n            const music = this.music.get(this.activeMusic.name);\r\n            if (!music) {\r\n                this.activeMusic = null;\r\n                return;\r\n            }\r\n\r\n            // Update volume\r\n            this.activeMusic.volume += this.activeMusic.fadeSpeed * delta;\r\n\r\n            // Clamp to target\r\n            if (this.activeMusic.fadeSpeed > 0) {\r\n                // Fading in\r\n                if (this.activeMusic.volume >= this.activeMusic.fadeTarget) {\r\n                    this.activeMusic.volume = this.activeMusic.fadeTarget;\r\n                    this.activeMusic.fadeTarget = null;\r\n                    this.activeMusic.fadeSpeed = 0;\r\n                }\r\n            } else {\r\n                // Fading out\r\n                if (this.activeMusic.volume <= this.activeMusic.fadeTarget) {\r\n                    this.activeMusic.volume = this.activeMusic.fadeTarget;\r\n\r\n                    // If fading out to stop\r\n                    if (this.activeMusic.stopping && this.activeMusic.volume === 0) {\r\n                        this.audio.stopMusic(music.handle);\r\n                        // EventBus.emit(\"music_stopped\", { name: this.activeMusic.name });\r\n                        this.activeMusic = null;\r\n                        return;\r\n                    }\r\n\r\n                    this.activeMusic.fadeTarget = null;\r\n                    this.activeMusic.fadeSpeed = 0;\r\n                }\r\n            }\r\n\r\n            // Apply volume\r\n            this.audio.setMusicVolume(music.handle, this.activeMusic.volume);\r\n        }\r\n        audioperf.end(\"audioupdate\")\r\n    }\r\n\r\n    /**\r\n     * Check if sound is playing\r\n     */\r\n    isSoundPlaying(name) {\r\n        const sound = this.sounds.get(name);\r\n        if (!sound) return false;\r\n\r\n        return this.audio.isSoundPlaying(sound.handle);\r\n    }\r\n\r\n    /**\r\n     * Check if music is playing\r\n     */\r\n    isMusicPlaying(name) {\r\n        const music = this.music.get(name);\r\n        if (!music) return false;\r\n\r\n        return this.audio.isMusicPlaying(music.handle);\r\n    }\r\n\r\n    /**\r\n     * Unload sound\r\n     */\r\n    unloadSound(name) {\r\n        const sound = this.sounds.get(name);\r\n        if (!sound) return;\r\n\r\n        this.audio.unloadSound(sound.handle);\r\n        this.sounds.delete(name);\r\n        this.activeSounds.delete(name);\r\n\r\n        console.log(`Unloaded sound: ${name}`);\r\n    }\r\n\r\n    /**\r\n     * Unload music\r\n     */\r\n    unloadMusic(name) {\r\n        const music = this.music.get(name);\r\n        if (!music) return;\r\n\r\n        this.audio.unloadMusic(music.handle);\r\n        this.music.delete(name);\r\n\r\n        if (this.activeMusic && this.activeMusic.name === name) {\r\n            this.activeMusic = null;\r\n        }\r\n\r\n        console.log(`Unloaded music: ${name}`);\r\n    }\r\n\r\n    /**\r\n     * Unload all audio\r\n     */\r\n    unloadAll() {\r\n        // Unload all sounds\r\n        for (const name of this.sounds.keys()) {\r\n            this.unloadSound(name);\r\n        }\r\n\r\n        // Unload all music\r\n        for (const name of this.music.keys()) {\r\n            this.unloadMusic(name);\r\n        }\r\n\r\n        console.log(\"Unloaded all audio\");\r\n    }\r\n\r\n    /**\r\n     * Get audio statistics\r\n     */\r\n    getStats() {\r\n        return {\r\n            soundsLoaded: this.sounds.size,\r\n            musicLoaded: this.music.size,\r\n            activeSounds: this.activeSounds.size,\r\n            musicPlaying: this.activeMusic !== null,\r\n            masterVolume: this.masterVolume,\r\n            sfxVolume: this.sfxVolume,\r\n            musicVolume: this.musicVolume\r\n        };\r\n    }\r\n}\r\n\r\n\r\nexport const AudioManager = new AudioManagerClass();\r\n\r\n/**\r\n * AudioPresets - common audio patterns\r\n */\r\nexport class AudioPresets {\r\n    /**\r\n     * UI sound pack\r\n     */\r\n    static async loadUIAudio() {\r\n        await AudioManager.loadSound(\"ui_click\", \"assets/audio/ui/click.wav\");\r\n        await AudioManager.loadSound(\"ui_hover\", \"assets/audio/ui/hover.wav\");\r\n        await AudioManager.loadSound(\"ui_open\", \"assets/audio/ui/open.wav\");\r\n        await AudioManager.loadSound(\"ui_close\", \"assets/audio/ui/close.wav\");\r\n    }\r\n\r\n    /**\r\n     * Player action sounds\r\n     */\r\n    static async loadPlayerAudio() {\r\n        await AudioManager.loadSound(\"jump\", \"assets/audio/player/jump.wav\");\r\n        await AudioManager.loadSound(\"land\", \"assets/audio/player/land.wav\");\r\n        await AudioManager.loadSound(\"damage\", \"assets/audio/player/damage.wav\");\r\n        await AudioManager.loadSound(\"death\", \"assets/audio/player/death.wav\");\r\n    }\r\n\r\n    /**\r\n     * Background music\r\n     */\r\n    static async loadMusicTracks() {\r\n        await AudioManager.loadMusic(\"menu_theme\", \"assets/audio/music/menu.ogg\");\r\n        await AudioManager.loadMusic(\"level1_theme\", \"assets/audio/music/level1.ogg\");\r\n        await AudioManager.loadMusic(\"boss_theme\", \"assets/audio/music/boss.ogg\");\r\n    }\r\n}","/**\n * Planck.js v1.4.2\n * @license The MIT license\n * @copyright Copyright (c) 2025 Erin Catto, Ali Shakiba\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nvar extendStatics = function(d2, b2) {\n  extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b3) {\n    d3.__proto__ = b3;\n  } || function(d3, b3) {\n    for (var p in b3) if (Object.prototype.hasOwnProperty.call(b3, p)) d3[p] = b3[p];\n  };\n  return extendStatics(d2, b2);\n};\nfunction __extends(d2, b2) {\n  if (typeof b2 !== \"function\" && b2 !== null)\n    throw new TypeError(\"Class extends value \" + String(b2) + \" is not a constructor or null\");\n  extendStatics(d2, b2);\n  function __() {\n    this.constructor = d2;\n  }\n  d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __());\n}\nvar __assign = function() {\n  __assign = Object.assign || function __assign2(t) {\n    for (var s2, i = 1, n2 = arguments.length; i < n2; i++) {\n      s2 = arguments[i];\n      for (var p in s2) if (Object.prototype.hasOwnProperty.call(s2, p)) t[p] = s2[p];\n    }\n    return t;\n  };\n  return __assign.apply(this, arguments);\n};\nvar options = function(input2, defaults) {\n  if (input2 === null || typeof input2 === \"undefined\") {\n    input2 = {};\n  }\n  var output2 = __assign({}, input2);\n  for (var key in defaults) {\n    if (defaults.hasOwnProperty(key) && typeof input2[key] === \"undefined\") {\n      output2[key] = defaults[key];\n    }\n  }\n  if (typeof Object.getOwnPropertySymbols === \"function\") {\n    var symbols = Object.getOwnPropertySymbols(defaults);\n    for (var i = 0; i < symbols.length; i++) {\n      var symbol = symbols[i];\n      if (defaults.propertyIsEnumerable(symbol) && typeof input2[symbol] === \"undefined\") {\n        output2[symbol] = defaults[symbol];\n      }\n    }\n  }\n  return output2;\n};\nvar math_random = Math.random;\nvar EPSILON = 1e-9;\nvar isFinite = Number.isFinite;\nfunction nextPowerOfTwo(x2) {\n  x2 |= x2 >> 1;\n  x2 |= x2 >> 2;\n  x2 |= x2 >> 4;\n  x2 |= x2 >> 8;\n  x2 |= x2 >> 16;\n  return x2 + 1;\n}\nfunction isPowerOfTwo(x2) {\n  return x2 > 0 && (x2 & x2 - 1) === 0;\n}\nfunction mod(num, min, max) {\n  if (typeof min === \"undefined\") {\n    max = 1;\n    min = 0;\n  } else if (typeof max === \"undefined\") {\n    max = min;\n    min = 0;\n  }\n  if (max > min) {\n    num = (num - min) % (max - min);\n    return num + (num < 0 ? max : min);\n  } else {\n    num = (num - max) % (min - max);\n    return num + (num <= 0 ? min : max);\n  }\n}\nfunction clamp(num, min, max) {\n  if (num < min) {\n    return min;\n  } else if (num > max) {\n    return max;\n  } else {\n    return num;\n  }\n}\nfunction random(min, max) {\n  if (typeof min === \"undefined\") {\n    max = 1;\n    min = 0;\n  } else if (typeof max === \"undefined\") {\n    max = min;\n    min = 0;\n  }\n  return min === max ? min : math_random() * (max - min) + min;\n}\nvar math = Object.create(Math);\nmath.EPSILON = EPSILON;\nmath.isFinite = isFinite;\nmath.nextPowerOfTwo = nextPowerOfTwo;\nmath.isPowerOfTwo = isPowerOfTwo;\nmath.mod = mod;\nmath.clamp = clamp;\nmath.random = random;\nvar math_abs$9 = Math.abs;\nvar math_sqrt$5 = Math.sqrt;\nvar math_max$8 = Math.max;\nvar math_min$8 = Math.min;\nvar Vec2 = (\n  /** @class */\n  function() {\n    function Vec22(x2, y) {\n      if (!(this instanceof Vec22)) {\n        return new Vec22(x2, y);\n      }\n      if (typeof x2 === \"undefined\") {\n        this.x = 0;\n        this.y = 0;\n      } else if (typeof x2 === \"object\") {\n        this.x = x2.x;\n        this.y = x2.y;\n      } else {\n        this.x = x2;\n        this.y = y;\n      }\n    }\n    Vec22.prototype._serialize = function() {\n      return {\n        x: this.x,\n        y: this.y\n      };\n    };\n    Vec22._deserialize = function(data) {\n      var obj = Object.create(Vec22.prototype);\n      obj.x = data.x;\n      obj.y = data.y;\n      return obj;\n    };\n    Vec22.zero = function() {\n      var obj = Object.create(Vec22.prototype);\n      obj.x = 0;\n      obj.y = 0;\n      return obj;\n    };\n    Vec22.neo = function(x2, y) {\n      var obj = Object.create(Vec22.prototype);\n      obj.x = x2;\n      obj.y = y;\n      return obj;\n    };\n    Vec22.clone = function(v3) {\n      return Vec22.neo(v3.x, v3.y);\n    };\n    Vec22.prototype.toString = function() {\n      return JSON.stringify(this);\n    };\n    Vec22.isValid = function(obj) {\n      if (obj === null || typeof obj === \"undefined\") {\n        return false;\n      }\n      return Number.isFinite(obj.x) && Number.isFinite(obj.y);\n    };\n    Vec22.assert = function(o) {\n    };\n    Vec22.prototype.clone = function() {\n      return Vec22.clone(this);\n    };\n    Vec22.prototype.setZero = function() {\n      this.x = 0;\n      this.y = 0;\n      return this;\n    };\n    Vec22.prototype.set = function(x2, y) {\n      if (typeof x2 === \"object\") {\n        this.x = x2.x;\n        this.y = x2.y;\n      } else {\n        this.x = x2;\n        this.y = y;\n      }\n      return this;\n    };\n    Vec22.prototype.setNum = function(x2, y) {\n      this.x = x2;\n      this.y = y;\n      return this;\n    };\n    Vec22.prototype.setVec2 = function(value) {\n      this.x = value.x;\n      this.y = value.y;\n      return this;\n    };\n    Vec22.prototype.wSet = function(a2, v3, b2, w) {\n      if (typeof b2 !== \"undefined\" || typeof w !== \"undefined\") {\n        return this.setCombine(a2, v3, b2, w);\n      } else {\n        return this.setMul(a2, v3);\n      }\n    };\n    Vec22.prototype.setCombine = function(a2, v3, b2, w) {\n      var x2 = a2 * v3.x + b2 * w.x;\n      var y = a2 * v3.y + b2 * w.y;\n      this.x = x2;\n      this.y = y;\n      return this;\n    };\n    Vec22.prototype.setMul = function(a2, v3) {\n      var x2 = a2 * v3.x;\n      var y = a2 * v3.y;\n      this.x = x2;\n      this.y = y;\n      return this;\n    };\n    Vec22.prototype.add = function(w) {\n      this.x += w.x;\n      this.y += w.y;\n      return this;\n    };\n    Vec22.prototype.wAdd = function(a2, v3, b2, w) {\n      if (typeof b2 !== \"undefined\" || typeof w !== \"undefined\") {\n        return this.addCombine(a2, v3, b2, w);\n      } else {\n        return this.addMul(a2, v3);\n      }\n    };\n    Vec22.prototype.addCombine = function(a2, v3, b2, w) {\n      var x2 = a2 * v3.x + b2 * w.x;\n      var y = a2 * v3.y + b2 * w.y;\n      this.x += x2;\n      this.y += y;\n      return this;\n    };\n    Vec22.prototype.addMul = function(a2, v3) {\n      var x2 = a2 * v3.x;\n      var y = a2 * v3.y;\n      this.x += x2;\n      this.y += y;\n      return this;\n    };\n    Vec22.prototype.wSub = function(a2, v3, b2, w) {\n      if (typeof b2 !== \"undefined\" || typeof w !== \"undefined\") {\n        return this.subCombine(a2, v3, b2, w);\n      } else {\n        return this.subMul(a2, v3);\n      }\n    };\n    Vec22.prototype.subCombine = function(a2, v3, b2, w) {\n      var x2 = a2 * v3.x + b2 * w.x;\n      var y = a2 * v3.y + b2 * w.y;\n      this.x -= x2;\n      this.y -= y;\n      return this;\n    };\n    Vec22.prototype.subMul = function(a2, v3) {\n      var x2 = a2 * v3.x;\n      var y = a2 * v3.y;\n      this.x -= x2;\n      this.y -= y;\n      return this;\n    };\n    Vec22.prototype.sub = function(w) {\n      this.x -= w.x;\n      this.y -= w.y;\n      return this;\n    };\n    Vec22.prototype.mul = function(m) {\n      this.x *= m;\n      this.y *= m;\n      return this;\n    };\n    Vec22.prototype.length = function() {\n      return Vec22.lengthOf(this);\n    };\n    Vec22.prototype.lengthSquared = function() {\n      return Vec22.lengthSquared(this);\n    };\n    Vec22.prototype.normalize = function() {\n      var length = this.length();\n      if (length < EPSILON) {\n        return 0;\n      }\n      var invLength = 1 / length;\n      this.x *= invLength;\n      this.y *= invLength;\n      return length;\n    };\n    Vec22.normalize = function(v3) {\n      var length = Vec22.lengthOf(v3);\n      if (length < EPSILON) {\n        return Vec22.zero();\n      }\n      var invLength = 1 / length;\n      return Vec22.neo(v3.x * invLength, v3.y * invLength);\n    };\n    Vec22.lengthOf = function(v3) {\n      return math_sqrt$5(v3.x * v3.x + v3.y * v3.y);\n    };\n    Vec22.lengthSquared = function(v3) {\n      return v3.x * v3.x + v3.y * v3.y;\n    };\n    Vec22.distance = function(v3, w) {\n      var dx = v3.x - w.x;\n      var dy = v3.y - w.y;\n      return math_sqrt$5(dx * dx + dy * dy);\n    };\n    Vec22.distanceSquared = function(v3, w) {\n      var dx = v3.x - w.x;\n      var dy = v3.y - w.y;\n      return dx * dx + dy * dy;\n    };\n    Vec22.areEqual = function(v3, w) {\n      return v3 === w || typeof w === \"object\" && w !== null && v3.x === w.x && v3.y === w.y;\n    };\n    Vec22.skew = function(v3) {\n      return Vec22.neo(-v3.y, v3.x);\n    };\n    Vec22.dot = function(v3, w) {\n      return v3.x * w.x + v3.y * w.y;\n    };\n    Vec22.cross = function(v3, w) {\n      if (typeof w === \"number\") {\n        return Vec22.neo(w * v3.y, -w * v3.x);\n      } else if (typeof v3 === \"number\") {\n        return Vec22.neo(-v3 * w.y, v3 * w.x);\n      } else {\n        return v3.x * w.y - v3.y * w.x;\n      }\n    };\n    Vec22.crossVec2Vec2 = function(v3, w) {\n      return v3.x * w.y - v3.y * w.x;\n    };\n    Vec22.crossVec2Num = function(v3, w) {\n      return Vec22.neo(w * v3.y, -w * v3.x);\n    };\n    Vec22.crossNumVec2 = function(v3, w) {\n      return Vec22.neo(-v3 * w.y, v3 * w.x);\n    };\n    Vec22.addCross = function(a2, v3, w) {\n      if (typeof w === \"number\") {\n        return Vec22.neo(w * v3.y + a2.x, -w * v3.x + a2.y);\n      } else if (typeof v3 === \"number\") {\n        return Vec22.neo(-v3 * w.y + a2.x, v3 * w.x + a2.y);\n      }\n    };\n    Vec22.addCrossVec2Num = function(a2, v3, w) {\n      return Vec22.neo(w * v3.y + a2.x, -w * v3.x + a2.y);\n    };\n    Vec22.addCrossNumVec2 = function(a2, v3, w) {\n      return Vec22.neo(-v3 * w.y + a2.x, v3 * w.x + a2.y);\n    };\n    Vec22.add = function(v3, w) {\n      return Vec22.neo(v3.x + w.x, v3.y + w.y);\n    };\n    Vec22.wAdd = function(a2, v3, b2, w) {\n      if (typeof b2 !== \"undefined\" || typeof w !== \"undefined\") {\n        return Vec22.combine(a2, v3, b2, w);\n      } else {\n        return Vec22.mulNumVec2(a2, v3);\n      }\n    };\n    Vec22.combine = function(a2, v3, b2, w) {\n      return Vec22.zero().setCombine(a2, v3, b2, w);\n    };\n    Vec22.sub = function(v3, w) {\n      return Vec22.neo(v3.x - w.x, v3.y - w.y);\n    };\n    Vec22.mul = function(a2, b2) {\n      if (typeof a2 === \"object\") {\n        return Vec22.neo(a2.x * b2, a2.y * b2);\n      } else if (typeof b2 === \"object\") {\n        return Vec22.neo(a2 * b2.x, a2 * b2.y);\n      }\n    };\n    Vec22.mulVec2Num = function(a2, b2) {\n      return Vec22.neo(a2.x * b2, a2.y * b2);\n    };\n    Vec22.mulNumVec2 = function(a2, b2) {\n      return Vec22.neo(a2 * b2.x, a2 * b2.y);\n    };\n    Vec22.prototype.neg = function() {\n      this.x = -this.x;\n      this.y = -this.y;\n      return this;\n    };\n    Vec22.neg = function(v3) {\n      return Vec22.neo(-v3.x, -v3.y);\n    };\n    Vec22.abs = function(v3) {\n      return Vec22.neo(math_abs$9(v3.x), math_abs$9(v3.y));\n    };\n    Vec22.mid = function(v3, w) {\n      return Vec22.neo((v3.x + w.x) * 0.5, (v3.y + w.y) * 0.5);\n    };\n    Vec22.upper = function(v3, w) {\n      return Vec22.neo(math_max$8(v3.x, w.x), math_max$8(v3.y, w.y));\n    };\n    Vec22.lower = function(v3, w) {\n      return Vec22.neo(math_min$8(v3.x, w.x), math_min$8(v3.y, w.y));\n    };\n    Vec22.prototype.clamp = function(max) {\n      var lengthSqr = this.x * this.x + this.y * this.y;\n      if (lengthSqr > max * max) {\n        var scale = max / math_sqrt$5(lengthSqr);\n        this.x *= scale;\n        this.y *= scale;\n      }\n      return this;\n    };\n    Vec22.clamp = function(v3, max) {\n      var r = Vec22.neo(v3.x, v3.y);\n      r.clamp(max);\n      return r;\n    };\n    Vec22.clampVec2 = function(v3, min, max) {\n      return {\n        x: clamp(v3.x, min === null || min === void 0 ? void 0 : min.x, max === null || max === void 0 ? void 0 : max.x),\n        y: clamp(v3.y, min === null || min === void 0 ? void 0 : min.y, max === null || max === void 0 ? void 0 : max.y)\n      };\n    };\n    Vec22.scaleFn = function(x2, y) {\n      return function(v3) {\n        return Vec22.neo(v3.x * x2, v3.y * y);\n      };\n    };\n    Vec22.translateFn = function(x2, y) {\n      return function(v3) {\n        return Vec22.neo(v3.x + x2, v3.y + y);\n      };\n    };\n    return Vec22;\n  }()\n);\nvar math_max$7 = Math.max;\nvar math_min$7 = Math.min;\nvar AABB = (\n  /** @class */\n  function() {\n    function AABB2(lower, upper) {\n      if (!(this instanceof AABB2)) {\n        return new AABB2(lower, upper);\n      }\n      this.lowerBound = Vec2.zero();\n      this.upperBound = Vec2.zero();\n      if (typeof lower === \"object\") {\n        this.lowerBound.setVec2(lower);\n      }\n      if (typeof upper === \"object\") {\n        this.upperBound.setVec2(upper);\n      } else if (typeof lower === \"object\") {\n        this.upperBound.setVec2(lower);\n      }\n    }\n    AABB2.prototype.isValid = function() {\n      return AABB2.isValid(this);\n    };\n    AABB2.isValid = function(obj) {\n      if (obj === null || typeof obj === \"undefined\") {\n        return false;\n      }\n      return Vec2.isValid(obj.lowerBound) && Vec2.isValid(obj.upperBound) && Vec2.sub(obj.upperBound, obj.lowerBound).lengthSquared() >= 0;\n    };\n    AABB2.assert = function(o) {\n    };\n    AABB2.prototype.getCenter = function() {\n      return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5);\n    };\n    AABB2.prototype.getExtents = function() {\n      return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5);\n    };\n    AABB2.prototype.getPerimeter = function() {\n      return 2 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y);\n    };\n    AABB2.prototype.combine = function(a2, b2) {\n      b2 = b2 || this;\n      var lowerA = a2.lowerBound;\n      var upperA = a2.upperBound;\n      var lowerB = b2.lowerBound;\n      var upperB = b2.upperBound;\n      var lowerX = math_min$7(lowerA.x, lowerB.x);\n      var lowerY = math_min$7(lowerA.y, lowerB.y);\n      var upperX = math_max$7(upperB.x, upperA.x);\n      var upperY = math_max$7(upperB.y, upperA.y);\n      this.lowerBound.setNum(lowerX, lowerY);\n      this.upperBound.setNum(upperX, upperY);\n    };\n    AABB2.prototype.combinePoints = function(a2, b2) {\n      this.lowerBound.setNum(math_min$7(a2.x, b2.x), math_min$7(a2.y, b2.y));\n      this.upperBound.setNum(math_max$7(a2.x, b2.x), math_max$7(a2.y, b2.y));\n    };\n    AABB2.prototype.set = function(aabb) {\n      this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y);\n      this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y);\n    };\n    AABB2.prototype.contains = function(aabb) {\n      var result = true;\n      result = result && this.lowerBound.x <= aabb.lowerBound.x;\n      result = result && this.lowerBound.y <= aabb.lowerBound.y;\n      result = result && aabb.upperBound.x <= this.upperBound.x;\n      result = result && aabb.upperBound.y <= this.upperBound.y;\n      return result;\n    };\n    AABB2.prototype.extend = function(value) {\n      AABB2.extend(this, value);\n      return this;\n    };\n    AABB2.extend = function(out, value) {\n      out.lowerBound.x -= value;\n      out.lowerBound.y -= value;\n      out.upperBound.x += value;\n      out.upperBound.y += value;\n      return out;\n    };\n    AABB2.testOverlap = function(a2, b2) {\n      var d1x = b2.lowerBound.x - a2.upperBound.x;\n      var d2x = a2.lowerBound.x - b2.upperBound.x;\n      var d1y = b2.lowerBound.y - a2.upperBound.y;\n      var d2y = a2.lowerBound.y - b2.upperBound.y;\n      if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) {\n        return false;\n      }\n      return true;\n    };\n    AABB2.areEqual = function(a2, b2) {\n      return Vec2.areEqual(a2.lowerBound, b2.lowerBound) && Vec2.areEqual(a2.upperBound, b2.upperBound);\n    };\n    AABB2.diff = function(a2, b2) {\n      var wD = math_max$7(0, math_min$7(a2.upperBound.x, b2.upperBound.x) - math_max$7(b2.lowerBound.x, a2.lowerBound.x));\n      var hD = math_max$7(0, math_min$7(a2.upperBound.y, b2.upperBound.y) - math_max$7(b2.lowerBound.y, a2.lowerBound.y));\n      var wA = a2.upperBound.x - a2.lowerBound.x;\n      var hA = a2.upperBound.y - a2.lowerBound.y;\n      var wB = b2.upperBound.x - b2.lowerBound.x;\n      var hB = b2.upperBound.y - b2.lowerBound.y;\n      return wA * hA + wB * hB - wD * hD;\n    };\n    AABB2.prototype.rayCast = function(output2, input2) {\n      var tmin = -Infinity;\n      var tmax = Infinity;\n      var p = input2.p1;\n      var d2 = Vec2.sub(input2.p2, input2.p1);\n      var absD = Vec2.abs(d2);\n      var normal3 = Vec2.zero();\n      {\n        if (absD.x < EPSILON) {\n          if (p.x < this.lowerBound.x || this.upperBound.x < p.x) {\n            return false;\n          }\n        } else {\n          var inv_d = 1 / d2.x;\n          var t1 = (this.lowerBound.x - p.x) * inv_d;\n          var t2 = (this.upperBound.x - p.x) * inv_d;\n          var s2 = -1;\n          if (t1 > t2) {\n            var temp3 = t1;\n            t1 = t2;\n            t2 = temp3;\n            s2 = 1;\n          }\n          if (t1 > tmin) {\n            normal3.setZero();\n            normal3.x = s2;\n            tmin = t1;\n          }\n          tmax = math_min$7(tmax, t2);\n          if (tmin > tmax) {\n            return false;\n          }\n        }\n      }\n      {\n        if (absD.y < EPSILON) {\n          if (p.y < this.lowerBound.y || this.upperBound.y < p.y) {\n            return false;\n          }\n        } else {\n          var inv_d = 1 / d2.y;\n          var t1 = (this.lowerBound.y - p.y) * inv_d;\n          var t2 = (this.upperBound.y - p.y) * inv_d;\n          var s2 = -1;\n          if (t1 > t2) {\n            var temp3 = t1;\n            t1 = t2;\n            t2 = temp3;\n            s2 = 1;\n          }\n          if (t1 > tmin) {\n            normal3.setZero();\n            normal3.y = s2;\n            tmin = t1;\n          }\n          tmax = math_min$7(tmax, t2);\n          if (tmin > tmax) {\n            return false;\n          }\n        }\n      }\n      if (tmin < 0 || input2.maxFraction < tmin) {\n        return false;\n      }\n      output2.fraction = tmin;\n      output2.normal = normal3;\n      return true;\n    };\n    AABB2.prototype.toString = function() {\n      return JSON.stringify(this);\n    };\n    AABB2.combinePoints = function(out, a2, b2) {\n      out.lowerBound.x = math_min$7(a2.x, b2.x);\n      out.lowerBound.y = math_min$7(a2.y, b2.y);\n      out.upperBound.x = math_max$7(a2.x, b2.x);\n      out.upperBound.y = math_max$7(a2.y, b2.y);\n      return out;\n    };\n    AABB2.combinedPerimeter = function(a2, b2) {\n      var lx = math_min$7(a2.lowerBound.x, b2.lowerBound.x);\n      var ly = math_min$7(a2.lowerBound.y, b2.lowerBound.y);\n      var ux = math_max$7(a2.upperBound.x, b2.upperBound.x);\n      var uy = math_max$7(a2.upperBound.y, b2.upperBound.y);\n      return 2 * (ux - lx + uy - ly);\n    };\n    return AABB2;\n  }()\n);\nvar math_PI$6 = Math.PI;\nvar Settings = (\n  /** @class */\n  function() {\n    function Settings2() {\n    }\n    Object.defineProperty(Settings2, \"polygonRadius\", {\n      /**\n       * The radius of the polygon/edge shape skin. This should not be modified.\n       * Making this smaller means polygons will have an insufficient buffer for\n       * continuous collision. Making it larger may create artifacts for vertex\n       * collision.\n       */\n      get: function() {\n        return 2 * Settings2.linearSlop;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Settings2.lengthUnitsPerMeter = 1;\n    Settings2.maxManifoldPoints = 2;\n    Settings2.maxPolygonVertices = 12;\n    Settings2.aabbExtension = 0.1;\n    Settings2.aabbMultiplier = 2;\n    Settings2.linearSlop = 5e-3;\n    Settings2.angularSlop = 2 / 180 * math_PI$6;\n    Settings2.maxSubSteps = 8;\n    Settings2.maxTOIContacts = 32;\n    Settings2.maxTOIIterations = 20;\n    Settings2.maxDistanceIterations = 20;\n    Settings2.velocityThreshold = 1;\n    Settings2.maxLinearCorrection = 0.2;\n    Settings2.maxAngularCorrection = 8 / 180 * math_PI$6;\n    Settings2.maxTranslation = 2;\n    Settings2.maxRotation = 0.5 * math_PI$6;\n    Settings2.baumgarte = 0.2;\n    Settings2.toiBaugarte = 0.75;\n    Settings2.timeToSleep = 0.5;\n    Settings2.linearSleepTolerance = 0.01;\n    Settings2.angularSleepTolerance = 2 / 180 * math_PI$6;\n    return Settings2;\n  }()\n);\nvar SettingsInternal = (\n  /** @class */\n  function() {\n    function SettingsInternal2() {\n    }\n    Object.defineProperty(SettingsInternal2, \"maxManifoldPoints\", {\n      get: function() {\n        return Settings.maxManifoldPoints;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"maxPolygonVertices\", {\n      get: function() {\n        return Settings.maxPolygonVertices;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"aabbExtension\", {\n      get: function() {\n        return Settings.aabbExtension * Settings.lengthUnitsPerMeter;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"aabbMultiplier\", {\n      get: function() {\n        return Settings.aabbMultiplier;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"linearSlop\", {\n      get: function() {\n        return Settings.linearSlop * Settings.lengthUnitsPerMeter;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"linearSlopSquared\", {\n      get: function() {\n        return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"angularSlop\", {\n      get: function() {\n        return Settings.angularSlop;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"polygonRadius\", {\n      get: function() {\n        return 2 * Settings.linearSlop;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"maxSubSteps\", {\n      get: function() {\n        return Settings.maxSubSteps;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"maxTOIContacts\", {\n      get: function() {\n        return Settings.maxTOIContacts;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"maxTOIIterations\", {\n      get: function() {\n        return Settings.maxTOIIterations;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"maxDistanceIterations\", {\n      get: function() {\n        return Settings.maxDistanceIterations;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"velocityThreshold\", {\n      get: function() {\n        return Settings.velocityThreshold * Settings.lengthUnitsPerMeter;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"maxLinearCorrection\", {\n      get: function() {\n        return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"maxAngularCorrection\", {\n      get: function() {\n        return Settings.maxAngularCorrection;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"maxTranslation\", {\n      get: function() {\n        return Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"maxTranslationSquared\", {\n      get: function() {\n        return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"maxRotation\", {\n      get: function() {\n        return Settings.maxRotation;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"maxRotationSquared\", {\n      get: function() {\n        return Settings.maxRotation * Settings.maxRotation;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"baumgarte\", {\n      get: function() {\n        return Settings.baumgarte;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"toiBaugarte\", {\n      get: function() {\n        return Settings.toiBaugarte;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"timeToSleep\", {\n      get: function() {\n        return Settings.timeToSleep;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"linearSleepTolerance\", {\n      get: function() {\n        return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"linearSleepToleranceSqr\", {\n      get: function() {\n        return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"angularSleepTolerance\", {\n      get: function() {\n        return Settings.angularSleepTolerance;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(SettingsInternal2, \"angularSleepToleranceSqr\", {\n      get: function() {\n        return Settings.angularSleepTolerance * Settings.angularSleepTolerance;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    return SettingsInternal2;\n  }()\n);\nvar Pool = (\n  /** @class */\n  function() {\n    function Pool2(opts) {\n      this._list = [];\n      this._max = Infinity;\n      this._hasCreateFn = false;\n      this._createCount = 0;\n      this._hasAllocateFn = false;\n      this._allocateCount = 0;\n      this._hasReleaseFn = false;\n      this._releaseCount = 0;\n      this._hasDisposeFn = false;\n      this._disposeCount = 0;\n      this._list = [];\n      this._max = opts.max || this._max;\n      this._createFn = opts.create;\n      this._hasCreateFn = typeof this._createFn === \"function\";\n      this._allocateFn = opts.allocate;\n      this._hasAllocateFn = typeof this._allocateFn === \"function\";\n      this._releaseFn = opts.release;\n      this._hasReleaseFn = typeof this._releaseFn === \"function\";\n      this._disposeFn = opts.dispose;\n      this._hasDisposeFn = typeof this._disposeFn === \"function\";\n    }\n    Pool2.prototype.max = function(n2) {\n      if (typeof n2 === \"number\") {\n        this._max = n2;\n        return this;\n      }\n      return this._max;\n    };\n    Pool2.prototype.size = function() {\n      return this._list.length;\n    };\n    Pool2.prototype.allocate = function() {\n      var item;\n      if (this._list.length > 0) {\n        item = this._list.shift();\n      } else {\n        this._createCount++;\n        if (this._hasCreateFn) {\n          item = this._createFn();\n        } else {\n          item = {};\n        }\n      }\n      this._allocateCount++;\n      if (this._hasAllocateFn) {\n        this._allocateFn(item);\n      }\n      return item;\n    };\n    Pool2.prototype.release = function(item) {\n      if (this._list.length < this._max) {\n        this._releaseCount++;\n        if (this._hasReleaseFn) {\n          this._releaseFn(item);\n        }\n        this._list.push(item);\n      } else {\n        this._disposeCount++;\n        if (this._hasDisposeFn) {\n          item = this._disposeFn(item);\n        }\n      }\n    };\n    Pool2.prototype.toString = function() {\n      return \" +\" + this._createCount + \" >\" + this._allocateCount + \" <\" + this._releaseCount + \" -\" + this._disposeCount + \" =\" + this._list.length + \"/\" + this._max;\n    };\n    return Pool2;\n  }()\n);\nvar math_abs$8 = Math.abs;\nvar math_max$6 = Math.max;\nvar TreeNode = (\n  /** @class */\n  function() {\n    function TreeNode2(id) {\n      this.aabb = new AABB();\n      this.userData = null;\n      this.parent = null;\n      this.child1 = null;\n      this.child2 = null;\n      this.height = -1;\n      this.id = id;\n    }\n    TreeNode2.prototype.toString = function() {\n      return this.id + \": \" + this.userData;\n    };\n    TreeNode2.prototype.isLeaf = function() {\n      return this.child1 == null;\n    };\n    return TreeNode2;\n  }()\n);\nvar poolTreeNode = new Pool({\n  create: function() {\n    return new TreeNode();\n  },\n  release: function(node) {\n    node.userData = null;\n    node.parent = null;\n    node.child1 = null;\n    node.child2 = null;\n    node.height = -1;\n    node.id = void 0;\n  }\n});\nvar DynamicTree = (\n  /** @class */\n  function() {\n    function DynamicTree2() {\n      this.inputPool = new Pool({\n        create: function() {\n          return {};\n        },\n        release: function(stack) {\n        }\n      });\n      this.stackPool = new Pool({\n        create: function() {\n          return [];\n        },\n        release: function(stack) {\n          stack.length = 0;\n        }\n      });\n      this.iteratorPool = new Pool({\n        create: function() {\n          return new Iterator();\n        },\n        release: function(iterator) {\n          iterator.close();\n        }\n      });\n      this.m_root = null;\n      this.m_nodes = {};\n      this.m_lastProxyId = 0;\n    }\n    DynamicTree2.prototype.getUserData = function(id) {\n      var node = this.m_nodes[id];\n      return node.userData;\n    };\n    DynamicTree2.prototype.getFatAABB = function(id) {\n      var node = this.m_nodes[id];\n      return node.aabb;\n    };\n    DynamicTree2.prototype.allocateNode = function() {\n      var node = poolTreeNode.allocate();\n      node.id = ++this.m_lastProxyId;\n      this.m_nodes[node.id] = node;\n      return node;\n    };\n    DynamicTree2.prototype.freeNode = function(node) {\n      delete this.m_nodes[node.id];\n      poolTreeNode.release(node);\n    };\n    DynamicTree2.prototype.createProxy = function(aabb, userData) {\n      var node = this.allocateNode();\n      node.aabb.set(aabb);\n      AABB.extend(node.aabb, SettingsInternal.aabbExtension);\n      node.userData = userData;\n      node.height = 0;\n      this.insertLeaf(node);\n      return node.id;\n    };\n    DynamicTree2.prototype.destroyProxy = function(id) {\n      var node = this.m_nodes[id];\n      this.removeLeaf(node);\n      this.freeNode(node);\n    };\n    DynamicTree2.prototype.moveProxy = function(id, aabb, d2) {\n      var node = this.m_nodes[id];\n      if (node.aabb.contains(aabb)) {\n        return false;\n      }\n      this.removeLeaf(node);\n      node.aabb.set(aabb);\n      aabb = node.aabb;\n      AABB.extend(aabb, SettingsInternal.aabbExtension);\n      if (d2.x < 0) {\n        aabb.lowerBound.x += d2.x * SettingsInternal.aabbMultiplier;\n      } else {\n        aabb.upperBound.x += d2.x * SettingsInternal.aabbMultiplier;\n      }\n      if (d2.y < 0) {\n        aabb.lowerBound.y += d2.y * SettingsInternal.aabbMultiplier;\n      } else {\n        aabb.upperBound.y += d2.y * SettingsInternal.aabbMultiplier;\n      }\n      this.insertLeaf(node);\n      return true;\n    };\n    DynamicTree2.prototype.insertLeaf = function(leaf) {\n      if (this.m_root == null) {\n        this.m_root = leaf;\n        this.m_root.parent = null;\n        return;\n      }\n      var leafAABB = leaf.aabb;\n      var index = this.m_root;\n      while (!index.isLeaf()) {\n        var child1 = index.child1;\n        var child2 = index.child2;\n        var area = index.aabb.getPerimeter();\n        var combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB);\n        var cost = 2 * combinedArea;\n        var inheritanceCost = 2 * (combinedArea - area);\n        var newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb);\n        var cost1 = newArea1 + inheritanceCost;\n        if (!child1.isLeaf()) {\n          var oldArea = child1.aabb.getPerimeter();\n          cost1 -= oldArea;\n        }\n        var newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb);\n        var cost2 = newArea2 + inheritanceCost;\n        if (!child2.isLeaf()) {\n          var oldArea = child2.aabb.getPerimeter();\n          cost2 -= oldArea;\n        }\n        if (cost < cost1 && cost < cost2) {\n          break;\n        }\n        if (cost1 < cost2) {\n          index = child1;\n        } else {\n          index = child2;\n        }\n      }\n      var sibling = index;\n      var oldParent = sibling.parent;\n      var newParent = this.allocateNode();\n      newParent.parent = oldParent;\n      newParent.userData = null;\n      newParent.aabb.combine(leafAABB, sibling.aabb);\n      newParent.height = sibling.height + 1;\n      if (oldParent != null) {\n        if (oldParent.child1 === sibling) {\n          oldParent.child1 = newParent;\n        } else {\n          oldParent.child2 = newParent;\n        }\n        newParent.child1 = sibling;\n        newParent.child2 = leaf;\n        sibling.parent = newParent;\n        leaf.parent = newParent;\n      } else {\n        newParent.child1 = sibling;\n        newParent.child2 = leaf;\n        sibling.parent = newParent;\n        leaf.parent = newParent;\n        this.m_root = newParent;\n      }\n      index = leaf.parent;\n      while (index != null) {\n        index = this.balance(index);\n        var child1 = index.child1;\n        var child2 = index.child2;\n        index.height = 1 + math_max$6(child1.height, child2.height);\n        index.aabb.combine(child1.aabb, child2.aabb);\n        index = index.parent;\n      }\n    };\n    DynamicTree2.prototype.removeLeaf = function(leaf) {\n      if (leaf === this.m_root) {\n        this.m_root = null;\n        return;\n      }\n      var parent = leaf.parent;\n      var grandParent = parent.parent;\n      var sibling;\n      if (parent.child1 === leaf) {\n        sibling = parent.child2;\n      } else {\n        sibling = parent.child1;\n      }\n      if (grandParent != null) {\n        if (grandParent.child1 === parent) {\n          grandParent.child1 = sibling;\n        } else {\n          grandParent.child2 = sibling;\n        }\n        sibling.parent = grandParent;\n        this.freeNode(parent);\n        var index = grandParent;\n        while (index != null) {\n          index = this.balance(index);\n          var child1 = index.child1;\n          var child2 = index.child2;\n          index.aabb.combine(child1.aabb, child2.aabb);\n          index.height = 1 + math_max$6(child1.height, child2.height);\n          index = index.parent;\n        }\n      } else {\n        this.m_root = sibling;\n        sibling.parent = null;\n        this.freeNode(parent);\n      }\n    };\n    DynamicTree2.prototype.balance = function(iA) {\n      var A = iA;\n      if (A.isLeaf() || A.height < 2) {\n        return iA;\n      }\n      var B = A.child1;\n      var C = A.child2;\n      var balance = C.height - B.height;\n      if (balance > 1) {\n        var F = C.child1;\n        var G = C.child2;\n        C.child1 = A;\n        C.parent = A.parent;\n        A.parent = C;\n        if (C.parent != null) {\n          if (C.parent.child1 === iA) {\n            C.parent.child1 = C;\n          } else {\n            C.parent.child2 = C;\n          }\n        } else {\n          this.m_root = C;\n        }\n        if (F.height > G.height) {\n          C.child2 = F;\n          A.child2 = G;\n          G.parent = A;\n          A.aabb.combine(B.aabb, G.aabb);\n          C.aabb.combine(A.aabb, F.aabb);\n          A.height = 1 + math_max$6(B.height, G.height);\n          C.height = 1 + math_max$6(A.height, F.height);\n        } else {\n          C.child2 = G;\n          A.child2 = F;\n          F.parent = A;\n          A.aabb.combine(B.aabb, F.aabb);\n          C.aabb.combine(A.aabb, G.aabb);\n          A.height = 1 + math_max$6(B.height, F.height);\n          C.height = 1 + math_max$6(A.height, G.height);\n        }\n        return C;\n      }\n      if (balance < -1) {\n        var D = B.child1;\n        var E = B.child2;\n        B.child1 = A;\n        B.parent = A.parent;\n        A.parent = B;\n        if (B.parent != null) {\n          if (B.parent.child1 === A) {\n            B.parent.child1 = B;\n          } else {\n            B.parent.child2 = B;\n          }\n        } else {\n          this.m_root = B;\n        }\n        if (D.height > E.height) {\n          B.child2 = D;\n          A.child1 = E;\n          E.parent = A;\n          A.aabb.combine(C.aabb, E.aabb);\n          B.aabb.combine(A.aabb, D.aabb);\n          A.height = 1 + math_max$6(C.height, E.height);\n          B.height = 1 + math_max$6(A.height, D.height);\n        } else {\n          B.child2 = E;\n          A.child1 = D;\n          D.parent = A;\n          A.aabb.combine(C.aabb, D.aabb);\n          B.aabb.combine(A.aabb, E.aabb);\n          A.height = 1 + math_max$6(C.height, D.height);\n          B.height = 1 + math_max$6(A.height, E.height);\n        }\n        return B;\n      }\n      return A;\n    };\n    DynamicTree2.prototype.getHeight = function() {\n      if (this.m_root == null) {\n        return 0;\n      }\n      return this.m_root.height;\n    };\n    DynamicTree2.prototype.getAreaRatio = function() {\n      if (this.m_root == null) {\n        return 0;\n      }\n      var root = this.m_root;\n      var rootArea = root.aabb.getPerimeter();\n      var totalArea = 0;\n      var node;\n      var it = this.iteratorPool.allocate().preorder(this.m_root);\n      while (node = it.next()) {\n        if (node.height < 0) {\n          continue;\n        }\n        totalArea += node.aabb.getPerimeter();\n      }\n      this.iteratorPool.release(it);\n      return totalArea / rootArea;\n    };\n    DynamicTree2.prototype.computeHeight = function(id) {\n      var node;\n      if (typeof id !== \"undefined\") {\n        node = this.m_nodes[id];\n      } else {\n        node = this.m_root;\n      }\n      if (node.isLeaf()) {\n        return 0;\n      }\n      var height1 = this.computeHeight(node.child1.id);\n      var height2 = this.computeHeight(node.child2.id);\n      return 1 + math_max$6(height1, height2);\n    };\n    DynamicTree2.prototype.validateStructure = function(node) {\n      if (node == null) {\n        return;\n      }\n      if (node === this.m_root) ;\n      var child1 = node.child1;\n      var child2 = node.child2;\n      if (node.isLeaf()) {\n        return;\n      }\n      this.validateStructure(child1);\n      this.validateStructure(child2);\n    };\n    DynamicTree2.prototype.validateMetrics = function(node) {\n      if (node == null) {\n        return;\n      }\n      var child1 = node.child1;\n      var child2 = node.child2;\n      if (node.isLeaf()) {\n        return;\n      }\n      this.validateMetrics(child1);\n      this.validateMetrics(child2);\n    };\n    DynamicTree2.prototype.validate = function() {\n      return;\n    };\n    DynamicTree2.prototype.getMaxBalance = function() {\n      var maxBalance = 0;\n      var node;\n      var it = this.iteratorPool.allocate().preorder(this.m_root);\n      while (node = it.next()) {\n        if (node.height <= 1) {\n          continue;\n        }\n        var balance = math_abs$8(node.child2.height - node.child1.height);\n        maxBalance = math_max$6(maxBalance, balance);\n      }\n      this.iteratorPool.release(it);\n      return maxBalance;\n    };\n    DynamicTree2.prototype.rebuildBottomUp = function() {\n      var nodes = [];\n      var count = 0;\n      var node;\n      var it = this.iteratorPool.allocate().preorder(this.m_root);\n      while (node = it.next()) {\n        if (node.height < 0) {\n          continue;\n        }\n        if (node.isLeaf()) {\n          node.parent = null;\n          nodes[count] = node;\n          ++count;\n        } else {\n          this.freeNode(node);\n        }\n      }\n      this.iteratorPool.release(it);\n      while (count > 1) {\n        var minCost = Infinity;\n        var iMin = -1;\n        var jMin = -1;\n        for (var i = 0; i < count; ++i) {\n          var aabbi = nodes[i].aabb;\n          for (var j = i + 1; j < count; ++j) {\n            var aabbj = nodes[j].aabb;\n            var cost = AABB.combinedPerimeter(aabbi, aabbj);\n            if (cost < minCost) {\n              iMin = i;\n              jMin = j;\n              minCost = cost;\n            }\n          }\n        }\n        var child1 = nodes[iMin];\n        var child2 = nodes[jMin];\n        var parent_1 = this.allocateNode();\n        parent_1.child1 = child1;\n        parent_1.child2 = child2;\n        parent_1.height = 1 + math_max$6(child1.height, child2.height);\n        parent_1.aabb.combine(child1.aabb, child2.aabb);\n        parent_1.parent = null;\n        child1.parent = parent_1;\n        child2.parent = parent_1;\n        nodes[jMin] = nodes[count - 1];\n        nodes[iMin] = parent_1;\n        --count;\n      }\n      this.m_root = nodes[0];\n    };\n    DynamicTree2.prototype.shiftOrigin = function(newOrigin) {\n      var node;\n      var it = this.iteratorPool.allocate().preorder(this.m_root);\n      while (node = it.next()) {\n        var aabb = node.aabb;\n        aabb.lowerBound.x -= newOrigin.x;\n        aabb.lowerBound.y -= newOrigin.y;\n        aabb.upperBound.x -= newOrigin.x;\n        aabb.upperBound.y -= newOrigin.y;\n      }\n      this.iteratorPool.release(it);\n    };\n    DynamicTree2.prototype.query = function(aabb, queryCallback) {\n      var stack = this.stackPool.allocate();\n      stack.push(this.m_root);\n      while (stack.length > 0) {\n        var node = stack.pop();\n        if (node == null) {\n          continue;\n        }\n        if (AABB.testOverlap(node.aabb, aabb)) {\n          if (node.isLeaf()) {\n            var proceed = queryCallback(node.id);\n            if (proceed === false) {\n              return;\n            }\n          } else {\n            stack.push(node.child1);\n            stack.push(node.child2);\n          }\n        }\n      }\n      this.stackPool.release(stack);\n    };\n    DynamicTree2.prototype.rayCast = function(input2, rayCastCallback) {\n      var p1 = input2.p1;\n      var p2 = input2.p2;\n      var r = Vec2.sub(p2, p1);\n      r.normalize();\n      var v3 = Vec2.crossNumVec2(1, r);\n      var abs_v = Vec2.abs(v3);\n      var maxFraction = input2.maxFraction;\n      var segmentAABB = new AABB();\n      var t = Vec2.combine(1 - maxFraction, p1, maxFraction, p2);\n      segmentAABB.combinePoints(p1, t);\n      var stack = this.stackPool.allocate();\n      var subInput = this.inputPool.allocate();\n      stack.push(this.m_root);\n      while (stack.length > 0) {\n        var node = stack.pop();\n        if (node == null) {\n          continue;\n        }\n        if (AABB.testOverlap(node.aabb, segmentAABB) === false) {\n          continue;\n        }\n        var c2 = node.aabb.getCenter();\n        var h = node.aabb.getExtents();\n        var separation = math_abs$8(Vec2.dot(v3, Vec2.sub(p1, c2))) - Vec2.dot(abs_v, h);\n        if (separation > 0) {\n          continue;\n        }\n        if (node.isLeaf()) {\n          subInput.p1 = Vec2.clone(input2.p1);\n          subInput.p2 = Vec2.clone(input2.p2);\n          subInput.maxFraction = maxFraction;\n          var value = rayCastCallback(subInput, node.id);\n          if (value === 0) {\n            break;\n          } else if (value > 0) {\n            maxFraction = value;\n            t = Vec2.combine(1 - maxFraction, p1, maxFraction, p2);\n            segmentAABB.combinePoints(p1, t);\n          }\n        } else {\n          stack.push(node.child1);\n          stack.push(node.child2);\n        }\n      }\n      this.stackPool.release(stack);\n      this.inputPool.release(subInput);\n    };\n    return DynamicTree2;\n  }()\n);\nvar Iterator = (\n  /** @class */\n  function() {\n    function Iterator2() {\n      this.parents = [];\n      this.states = [];\n    }\n    Iterator2.prototype.preorder = function(root) {\n      this.parents.length = 0;\n      this.parents.push(root);\n      this.states.length = 0;\n      this.states.push(0);\n      return this;\n    };\n    Iterator2.prototype.next = function() {\n      while (this.parents.length > 0) {\n        var i = this.parents.length - 1;\n        var node = this.parents[i];\n        if (this.states[i] === 0) {\n          this.states[i] = 1;\n          return node;\n        }\n        if (this.states[i] === 1) {\n          this.states[i] = 2;\n          if (node.child1) {\n            this.parents.push(node.child1);\n            this.states.push(1);\n            return node.child1;\n          }\n        }\n        if (this.states[i] === 2) {\n          this.states[i] = 3;\n          if (node.child2) {\n            this.parents.push(node.child2);\n            this.states.push(1);\n            return node.child2;\n          }\n        }\n        this.parents.pop();\n        this.states.pop();\n      }\n    };\n    Iterator2.prototype.close = function() {\n      this.parents.length = 0;\n    };\n    return Iterator2;\n  }()\n);\nvar math_max$5 = Math.max;\nvar math_min$6 = Math.min;\nvar BroadPhase = (\n  /** @class */\n  function() {\n    function BroadPhase2() {\n      var _this = this;\n      this.m_tree = new DynamicTree();\n      this.m_moveBuffer = [];\n      this.query = function(aabb, queryCallback) {\n        _this.m_tree.query(aabb, queryCallback);\n      };\n      this.queryCallback = function(proxyId) {\n        if (proxyId === _this.m_queryProxyId) {\n          return true;\n        }\n        var proxyIdA = math_min$6(proxyId, _this.m_queryProxyId);\n        var proxyIdB = math_max$5(proxyId, _this.m_queryProxyId);\n        var userDataA = _this.m_tree.getUserData(proxyIdA);\n        var userDataB = _this.m_tree.getUserData(proxyIdB);\n        _this.m_callback(userDataA, userDataB);\n        return true;\n      };\n    }\n    BroadPhase2.prototype.getUserData = function(proxyId) {\n      return this.m_tree.getUserData(proxyId);\n    };\n    BroadPhase2.prototype.testOverlap = function(proxyIdA, proxyIdB) {\n      var aabbA = this.m_tree.getFatAABB(proxyIdA);\n      var aabbB = this.m_tree.getFatAABB(proxyIdB);\n      return AABB.testOverlap(aabbA, aabbB);\n    };\n    BroadPhase2.prototype.getFatAABB = function(proxyId) {\n      return this.m_tree.getFatAABB(proxyId);\n    };\n    BroadPhase2.prototype.getProxyCount = function() {\n      return this.m_moveBuffer.length;\n    };\n    BroadPhase2.prototype.getTreeHeight = function() {\n      return this.m_tree.getHeight();\n    };\n    BroadPhase2.prototype.getTreeBalance = function() {\n      return this.m_tree.getMaxBalance();\n    };\n    BroadPhase2.prototype.getTreeQuality = function() {\n      return this.m_tree.getAreaRatio();\n    };\n    BroadPhase2.prototype.rayCast = function(input2, rayCastCallback) {\n      this.m_tree.rayCast(input2, rayCastCallback);\n    };\n    BroadPhase2.prototype.shiftOrigin = function(newOrigin) {\n      this.m_tree.shiftOrigin(newOrigin);\n    };\n    BroadPhase2.prototype.createProxy = function(aabb, userData) {\n      var proxyId = this.m_tree.createProxy(aabb, userData);\n      this.bufferMove(proxyId);\n      return proxyId;\n    };\n    BroadPhase2.prototype.destroyProxy = function(proxyId) {\n      this.unbufferMove(proxyId);\n      this.m_tree.destroyProxy(proxyId);\n    };\n    BroadPhase2.prototype.moveProxy = function(proxyId, aabb, displacement2) {\n      var changed = this.m_tree.moveProxy(proxyId, aabb, displacement2);\n      if (changed) {\n        this.bufferMove(proxyId);\n      }\n    };\n    BroadPhase2.prototype.touchProxy = function(proxyId) {\n      this.bufferMove(proxyId);\n    };\n    BroadPhase2.prototype.bufferMove = function(proxyId) {\n      this.m_moveBuffer.push(proxyId);\n    };\n    BroadPhase2.prototype.unbufferMove = function(proxyId) {\n      for (var i = 0; i < this.m_moveBuffer.length; ++i) {\n        if (this.m_moveBuffer[i] === proxyId) {\n          this.m_moveBuffer[i] = null;\n        }\n      }\n    };\n    BroadPhase2.prototype.updatePairs = function(addPairCallback) {\n      this.m_callback = addPairCallback;\n      while (this.m_moveBuffer.length > 0) {\n        this.m_queryProxyId = this.m_moveBuffer.pop();\n        if (this.m_queryProxyId === null) {\n          continue;\n        }\n        var fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId);\n        this.m_tree.query(fatAABB, this.queryCallback);\n      }\n    };\n    return BroadPhase2;\n  }()\n);\nvar math_sin$2 = Math.sin;\nvar math_cos$2 = Math.cos;\nvar math_sqrt$4 = Math.sqrt;\nfunction vec2(x2, y) {\n  return { x: x2, y };\n}\nfunction rotation(angle) {\n  return { s: math_sin$2(angle), c: math_cos$2(angle) };\n}\nfunction setVec2(out, x2, y) {\n  out.x = x2;\n  out.y = y;\n  return out;\n}\nfunction copyVec2(out, w) {\n  out.x = w.x;\n  out.y = w.y;\n  return out;\n}\nfunction zeroVec2(out) {\n  out.x = 0;\n  out.y = 0;\n  return out;\n}\nfunction negVec2(out) {\n  out.x = -out.x;\n  out.y = -out.y;\n  return out;\n}\nfunction plusVec2(out, w) {\n  out.x += w.x;\n  out.y += w.y;\n  return out;\n}\nfunction addVec2(out, v3, w) {\n  out.x = v3.x + w.x;\n  out.y = v3.x + w.y;\n  return out;\n}\nfunction minusVec2(out, w) {\n  out.x -= w.x;\n  out.y -= w.y;\n  return out;\n}\nfunction subVec2(out, v3, w) {\n  out.x = v3.x - w.x;\n  out.y = v3.y - w.y;\n  return out;\n}\nfunction mulVec2(out, m) {\n  out.x *= m;\n  out.y *= m;\n  return out;\n}\nfunction scaleVec2(out, m, w) {\n  out.x = m * w.x;\n  out.y = m * w.y;\n  return out;\n}\nfunction plusScaleVec2(out, m, w) {\n  out.x += m * w.x;\n  out.y += m * w.y;\n  return out;\n}\nfunction minusScaleVec2(out, m, w) {\n  out.x -= m * w.x;\n  out.y -= m * w.y;\n  return out;\n}\nfunction combine2Vec2(out, am, a2, bm, b2) {\n  out.x = am * a2.x + bm * b2.x;\n  out.y = am * a2.y + bm * b2.y;\n  return out;\n}\nfunction combine3Vec2(out, am, a2, bm, b2, cm, c2) {\n  out.x = am * a2.x + bm * b2.x + cm * c2.x;\n  out.y = am * a2.y + bm * b2.y + cm * c2.y;\n  return out;\n}\nfunction normalizeVec2Length(out) {\n  var length = math_sqrt$4(out.x * out.x + out.y * out.y);\n  if (length !== 0) {\n    var invLength = 1 / length;\n    out.x *= invLength;\n    out.y *= invLength;\n  }\n  return length;\n}\nfunction normalizeVec2(out) {\n  var length = math_sqrt$4(out.x * out.x + out.y * out.y);\n  if (length > 0) {\n    var invLength = 1 / length;\n    out.x *= invLength;\n    out.y *= invLength;\n  }\n  return out;\n}\nfunction crossVec2Num(out, v3, w) {\n  var x2 = w * v3.y;\n  var y = -w * v3.x;\n  out.x = x2;\n  out.y = y;\n  return out;\n}\nfunction crossNumVec2(out, w, v3) {\n  var x2 = -w * v3.y;\n  var y = w * v3.x;\n  out.x = x2;\n  out.y = y;\n  return out;\n}\nfunction crossVec2Vec2(a2, b2) {\n  return a2.x * b2.y - a2.y * b2.x;\n}\nfunction dotVec2(a2, b2) {\n  return a2.x * b2.x + a2.y * b2.y;\n}\nfunction lengthSqrVec2(a2) {\n  return a2.x * a2.x + a2.y * a2.y;\n}\nfunction distVec2(a2, b2) {\n  var dx = a2.x - b2.x;\n  var dy = a2.y - b2.y;\n  return math_sqrt$4(dx * dx + dy * dy);\n}\nfunction distSqrVec2(a2, b2) {\n  var dx = a2.x - b2.x;\n  var dy = a2.y - b2.y;\n  return dx * dx + dy * dy;\n}\nfunction setRotAngle(out, a2) {\n  out.c = math_cos$2(a2);\n  out.s = math_sin$2(a2);\n  return out;\n}\nfunction rotVec2(out, q, v3) {\n  out.x = q.c * v3.x - q.s * v3.y;\n  out.y = q.s * v3.x + q.c * v3.y;\n  return out;\n}\nfunction derotVec2(out, q, v3) {\n  var x2 = q.c * v3.x + q.s * v3.y;\n  var y = -q.s * v3.x + q.c * v3.y;\n  out.x = x2;\n  out.y = y;\n  return out;\n}\nfunction rerotVec2(out, before, after, v3) {\n  var x0 = before.c * v3.x + before.s * v3.y;\n  var y0 = -before.s * v3.x + before.c * v3.y;\n  var x2 = after.c * x0 - after.s * y0;\n  var y = after.s * x0 + after.c * y0;\n  out.x = x2;\n  out.y = y;\n  return out;\n}\nfunction transform(x2, y, a2) {\n  return { p: vec2(x2, y), q: rotation(a2) };\n}\nfunction copyTransform(out, transform2) {\n  out.p.x = transform2.p.x;\n  out.p.y = transform2.p.y;\n  out.q.s = transform2.q.s;\n  out.q.c = transform2.q.c;\n  return out;\n}\nfunction transformVec2(out, xf2, v3) {\n  var x2 = xf2.q.c * v3.x - xf2.q.s * v3.y + xf2.p.x;\n  var y = xf2.q.s * v3.x + xf2.q.c * v3.y + xf2.p.y;\n  out.x = x2;\n  out.y = y;\n  return out;\n}\nfunction detransformVec2(out, xf2, v3) {\n  var px = v3.x - xf2.p.x;\n  var py = v3.y - xf2.p.y;\n  var x2 = xf2.q.c * px + xf2.q.s * py;\n  var y = -xf2.q.s * px + xf2.q.c * py;\n  out.x = x2;\n  out.y = y;\n  return out;\n}\nfunction retransformVec2(out, from, to, v3) {\n  var x0 = from.q.c * v3.x - from.q.s * v3.y + from.p.x;\n  var y0 = from.q.s * v3.x + from.q.c * v3.y + from.p.y;\n  var px = x0 - to.p.x;\n  var py = y0 - to.p.y;\n  var x2 = to.q.c * px + to.q.s * py;\n  var y = -to.q.s * px + to.q.c * py;\n  out.x = x2;\n  out.y = y;\n  return out;\n}\nfunction detransformTransform(out, a2, b2) {\n  var c2 = a2.q.c * b2.q.c + a2.q.s * b2.q.s;\n  var s2 = a2.q.c * b2.q.s - a2.q.s * b2.q.c;\n  var x2 = a2.q.c * (b2.p.x - a2.p.x) + a2.q.s * (b2.p.y - a2.p.y);\n  var y = -a2.q.s * (b2.p.x - a2.p.x) + a2.q.c * (b2.p.y - a2.p.y);\n  out.q.c = c2;\n  out.q.s = s2;\n  out.p.x = x2;\n  out.p.y = y;\n  return out;\n}\nvar math_sin$1 = Math.sin;\nvar math_cos$1 = Math.cos;\nvar math_atan2$1 = Math.atan2;\nvar Rot = (\n  /** @class */\n  function() {\n    function Rot2(angle) {\n      if (!(this instanceof Rot2)) {\n        return new Rot2(angle);\n      }\n      if (typeof angle === \"number\") {\n        this.setAngle(angle);\n      } else if (typeof angle === \"object\") {\n        this.setRot(angle);\n      } else {\n        this.setIdentity();\n      }\n    }\n    Rot2.neo = function(angle) {\n      var obj = Object.create(Rot2.prototype);\n      obj.setAngle(angle);\n      return obj;\n    };\n    Rot2.clone = function(rot) {\n      var obj = Object.create(Rot2.prototype);\n      obj.s = rot.s;\n      obj.c = rot.c;\n      return obj;\n    };\n    Rot2.identity = function() {\n      var obj = Object.create(Rot2.prototype);\n      obj.s = 0;\n      obj.c = 1;\n      return obj;\n    };\n    Rot2.isValid = function(obj) {\n      if (obj === null || typeof obj === \"undefined\") {\n        return false;\n      }\n      return Number.isFinite(obj.s) && Number.isFinite(obj.c);\n    };\n    Rot2.assert = function(o) {\n    };\n    Rot2.prototype.setIdentity = function() {\n      this.s = 0;\n      this.c = 1;\n    };\n    Rot2.prototype.set = function(angle) {\n      if (typeof angle === \"object\") {\n        this.s = angle.s;\n        this.c = angle.c;\n      } else {\n        this.s = math_sin$1(angle);\n        this.c = math_cos$1(angle);\n      }\n    };\n    Rot2.prototype.setRot = function(angle) {\n      this.s = angle.s;\n      this.c = angle.c;\n    };\n    Rot2.prototype.setAngle = function(angle) {\n      this.s = math_sin$1(angle);\n      this.c = math_cos$1(angle);\n    };\n    Rot2.prototype.getAngle = function() {\n      return math_atan2$1(this.s, this.c);\n    };\n    Rot2.prototype.getXAxis = function() {\n      return Vec2.neo(this.c, this.s);\n    };\n    Rot2.prototype.getYAxis = function() {\n      return Vec2.neo(-this.s, this.c);\n    };\n    Rot2.mul = function(rot, m) {\n      if (\"c\" in m && \"s\" in m) {\n        var qr = Rot2.identity();\n        qr.s = rot.s * m.c + rot.c * m.s;\n        qr.c = rot.c * m.c - rot.s * m.s;\n        return qr;\n      } else if (\"x\" in m && \"y\" in m) {\n        return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n      }\n    };\n    Rot2.mulRot = function(rot, m) {\n      var qr = Rot2.identity();\n      qr.s = rot.s * m.c + rot.c * m.s;\n      qr.c = rot.c * m.c - rot.s * m.s;\n      return qr;\n    };\n    Rot2.mulVec2 = function(rot, m) {\n      return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n    };\n    Rot2.mulSub = function(rot, v3, w) {\n      var x2 = rot.c * (v3.x - w.x) - rot.s * (v3.y - w.y);\n      var y = rot.s * (v3.x - w.x) + rot.c * (v3.y - w.y);\n      return Vec2.neo(x2, y);\n    };\n    Rot2.mulT = function(rot, m) {\n      if (\"c\" in m && \"s\" in m) {\n        var qr = Rot2.identity();\n        qr.s = rot.c * m.s - rot.s * m.c;\n        qr.c = rot.c * m.c + rot.s * m.s;\n        return qr;\n      } else if (\"x\" in m && \"y\" in m) {\n        return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n      }\n    };\n    Rot2.mulTRot = function(rot, m) {\n      var qr = Rot2.identity();\n      qr.s = rot.c * m.s - rot.s * m.c;\n      qr.c = rot.c * m.c + rot.s * m.s;\n      return qr;\n    };\n    Rot2.mulTVec2 = function(rot, m) {\n      return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n    };\n    return Rot2;\n  }()\n);\nvar math_atan2 = Math.atan2;\nvar math_PI$5 = Math.PI;\nvar temp$7 = vec2(0, 0);\nvar Sweep = (\n  /** @class */\n  function() {\n    function Sweep2() {\n      this.localCenter = Vec2.zero();\n      this.c = Vec2.zero();\n      this.a = 0;\n      this.alpha0 = 0;\n      this.c0 = Vec2.zero();\n      this.a0 = 0;\n    }\n    Sweep2.prototype.recycle = function() {\n      zeroVec2(this.localCenter);\n      zeroVec2(this.c);\n      this.a = 0;\n      this.alpha0 = 0;\n      zeroVec2(this.c0);\n      this.a0 = 0;\n    };\n    Sweep2.prototype.setTransform = function(xf2) {\n      transformVec2(temp$7, xf2, this.localCenter);\n      copyVec2(this.c, temp$7);\n      copyVec2(this.c0, temp$7);\n      this.a = this.a0 = math_atan2(xf2.q.s, xf2.q.c);\n    };\n    Sweep2.prototype.setLocalCenter = function(localCenter2, xf2) {\n      copyVec2(this.localCenter, localCenter2);\n      transformVec2(temp$7, xf2, this.localCenter);\n      copyVec2(this.c, temp$7);\n      copyVec2(this.c0, temp$7);\n    };\n    Sweep2.prototype.getTransform = function(xf2, beta) {\n      if (beta === void 0) {\n        beta = 0;\n      }\n      setRotAngle(xf2.q, (1 - beta) * this.a0 + beta * this.a);\n      combine2Vec2(xf2.p, 1 - beta, this.c0, beta, this.c);\n      minusVec2(xf2.p, rotVec2(temp$7, xf2.q, this.localCenter));\n    };\n    Sweep2.prototype.advance = function(alpha) {\n      var beta = (alpha - this.alpha0) / (1 - this.alpha0);\n      combine2Vec2(this.c0, beta, this.c, 1 - beta, this.c0);\n      this.a0 = beta * this.a + (1 - beta) * this.a0;\n      this.alpha0 = alpha;\n    };\n    Sweep2.prototype.forward = function() {\n      this.a0 = this.a;\n      copyVec2(this.c0, this.c);\n    };\n    Sweep2.prototype.normalize = function() {\n      var a0 = mod(this.a0, -math_PI$5, +math_PI$5);\n      this.a -= this.a0 - a0;\n      this.a0 = a0;\n    };\n    Sweep2.prototype.set = function(that) {\n      copyVec2(this.localCenter, that.localCenter);\n      copyVec2(this.c, that.c);\n      this.a = that.a;\n      this.alpha0 = that.alpha0;\n      copyVec2(this.c0, that.c0);\n      this.a0 = that.a0;\n    };\n    return Sweep2;\n  }()\n);\nvar Transform = (\n  /** @class */\n  function() {\n    function Transform2(position, rotation2) {\n      if (!(this instanceof Transform2)) {\n        return new Transform2(position, rotation2);\n      }\n      this.p = Vec2.zero();\n      this.q = Rot.identity();\n      if (typeof position !== \"undefined\") {\n        this.p.setVec2(position);\n      }\n      if (typeof rotation2 !== \"undefined\") {\n        this.q.setAngle(rotation2);\n      }\n    }\n    Transform2.clone = function(xf2) {\n      var obj = Object.create(Transform2.prototype);\n      obj.p = Vec2.clone(xf2.p);\n      obj.q = Rot.clone(xf2.q);\n      return obj;\n    };\n    Transform2.neo = function(position, rotation2) {\n      var obj = Object.create(Transform2.prototype);\n      obj.p = Vec2.clone(position);\n      obj.q = Rot.clone(rotation2);\n      return obj;\n    };\n    Transform2.identity = function() {\n      var obj = Object.create(Transform2.prototype);\n      obj.p = Vec2.zero();\n      obj.q = Rot.identity();\n      return obj;\n    };\n    Transform2.prototype.setIdentity = function() {\n      this.p.setZero();\n      this.q.setIdentity();\n    };\n    Transform2.prototype.set = function(a2, b2) {\n      if (typeof b2 === \"undefined\") {\n        this.p.set(a2.p);\n        this.q.set(a2.q);\n      } else {\n        this.p.set(a2);\n        this.q.set(b2);\n      }\n    };\n    Transform2.prototype.setNum = function(position, rotation2) {\n      this.p.setVec2(position);\n      this.q.setAngle(rotation2);\n    };\n    Transform2.prototype.setTransform = function(xf2) {\n      this.p.setVec2(xf2.p);\n      this.q.setRot(xf2.q);\n    };\n    Transform2.isValid = function(obj) {\n      if (obj === null || typeof obj === \"undefined\") {\n        return false;\n      }\n      return Vec2.isValid(obj.p) && Rot.isValid(obj.q);\n    };\n    Transform2.assert = function(o) {\n    };\n    Transform2.mul = function(a2, b2) {\n      if (Array.isArray(b2)) {\n        var arr = [];\n        for (var i = 0; i < b2.length; i++) {\n          arr[i] = Transform2.mul(a2, b2[i]);\n        }\n        return arr;\n      } else if (\"x\" in b2 && \"y\" in b2) {\n        return Transform2.mulVec2(a2, b2);\n      } else if (\"p\" in b2 && \"q\" in b2) {\n        return Transform2.mulXf(a2, b2);\n      }\n    };\n    Transform2.mulAll = function(a2, b2) {\n      var arr = [];\n      for (var i = 0; i < b2.length; i++) {\n        arr[i] = Transform2.mul(a2, b2[i]);\n      }\n      return arr;\n    };\n    Transform2.mulFn = function(a2) {\n      return function(b2) {\n        return Transform2.mul(a2, b2);\n      };\n    };\n    Transform2.mulVec2 = function(a2, b2) {\n      var x2 = a2.q.c * b2.x - a2.q.s * b2.y + a2.p.x;\n      var y = a2.q.s * b2.x + a2.q.c * b2.y + a2.p.y;\n      return Vec2.neo(x2, y);\n    };\n    Transform2.mulXf = function(a2, b2) {\n      var xf2 = Transform2.identity();\n      xf2.q = Rot.mulRot(a2.q, b2.q);\n      xf2.p = Vec2.add(Rot.mulVec2(a2.q, b2.p), a2.p);\n      return xf2;\n    };\n    Transform2.mulT = function(a2, b2) {\n      if (\"x\" in b2 && \"y\" in b2) {\n        return Transform2.mulTVec2(a2, b2);\n      } else if (\"p\" in b2 && \"q\" in b2) {\n        return Transform2.mulTXf(a2, b2);\n      }\n    };\n    Transform2.mulTVec2 = function(a2, b2) {\n      var px = b2.x - a2.p.x;\n      var py = b2.y - a2.p.y;\n      var x2 = a2.q.c * px + a2.q.s * py;\n      var y = -a2.q.s * px + a2.q.c * py;\n      return Vec2.neo(x2, y);\n    };\n    Transform2.mulTXf = function(a2, b2) {\n      var xf2 = Transform2.identity();\n      xf2.q.setRot(Rot.mulTRot(a2.q, b2.q));\n      xf2.p.setVec2(Rot.mulTVec2(a2.q, Vec2.sub(b2.p, a2.p)));\n      return xf2;\n    };\n    return Transform2;\n  }()\n);\nvar Velocity = (\n  /** @class */\n  /* @__PURE__ */ function() {\n    function Velocity2() {\n      this.v = Vec2.zero();\n      this.w = 0;\n    }\n    return Velocity2;\n  }()\n);\nvar math_sin = Math.sin;\nvar math_cos = Math.cos;\nvar Position = (\n  /** @class */\n  function() {\n    function Position2() {\n      this.c = Vec2.zero();\n      this.a = 0;\n    }\n    Position2.prototype.getTransform = function(xf2, p) {\n      xf2.q.c = math_cos(this.a);\n      xf2.q.s = math_sin(this.a);\n      xf2.p.x = this.c.x - (xf2.q.c * p.x - xf2.q.s * p.y);\n      xf2.p.y = this.c.y - (xf2.q.s * p.x + xf2.q.c * p.y);\n      return xf2;\n    };\n    return Position2;\n  }()\n);\nfunction getTransform(xf2, p, c2, a2) {\n  xf2.q.c = math_cos(a2);\n  xf2.q.s = math_sin(a2);\n  xf2.p.x = c2.x - (xf2.q.c * p.x - xf2.q.s * p.y);\n  xf2.p.y = c2.y - (xf2.q.s * p.x + xf2.q.c * p.y);\n  return xf2;\n}\nvar Shape = (\n  /** @class */\n  function() {\n    function Shape2() {\n      this.style = {};\n      this.appData = {};\n    }\n    Shape2.isValid = function(obj) {\n      if (obj === null || typeof obj === \"undefined\") {\n        return false;\n      }\n      return typeof obj.m_type === \"string\" && typeof obj.m_radius === \"number\";\n    };\n    return Shape2;\n  }()\n);\nvar synchronize_aabb1 = new AABB();\nvar synchronize_aabb2 = new AABB();\nvar displacement = vec2(0, 0);\nvar FixtureDefDefault = {\n  userData: null,\n  friction: 0.2,\n  restitution: 0,\n  density: 0,\n  isSensor: false,\n  filterGroupIndex: 0,\n  filterCategoryBits: 1,\n  filterMaskBits: 65535\n};\nvar FixtureProxy = (\n  /** @class */\n  /* @__PURE__ */ function() {\n    function FixtureProxy2(fixture, childIndex) {\n      this.aabb = new AABB();\n      this.fixture = fixture;\n      this.childIndex = childIndex;\n    }\n    return FixtureProxy2;\n  }()\n);\nvar Fixture = (\n  /** @class */\n  function() {\n    function Fixture2(body, shape, def) {\n      this.style = {};\n      this.appData = {};\n      if (shape.shape) {\n        def = shape;\n        shape = shape.shape;\n      } else if (typeof def === \"number\") {\n        def = { density: def };\n      }\n      def = options(def, FixtureDefDefault);\n      this.m_body = body;\n      this.m_friction = def.friction;\n      this.m_restitution = def.restitution;\n      this.m_density = def.density;\n      this.m_isSensor = def.isSensor;\n      this.m_filterGroupIndex = def.filterGroupIndex;\n      this.m_filterCategoryBits = def.filterCategoryBits;\n      this.m_filterMaskBits = def.filterMaskBits;\n      this.m_shape = shape;\n      this.m_next = null;\n      this.m_proxies = [];\n      this.m_proxyCount = 0;\n      var childCount = this.m_shape.getChildCount();\n      for (var i = 0; i < childCount; ++i) {\n        this.m_proxies[i] = new FixtureProxy(this, i);\n      }\n      this.m_userData = def.userData;\n      if (typeof def.style === \"object\" && def.style !== null) {\n        this.style = def.style;\n      }\n    }\n    Fixture2.prototype._reset = function() {\n      var body = this.getBody();\n      var broadPhase = body.m_world.m_broadPhase;\n      this.destroyProxies(broadPhase);\n      if (this.m_shape._reset) {\n        this.m_shape._reset();\n      }\n      var childCount = this.m_shape.getChildCount();\n      for (var i = 0; i < childCount; ++i) {\n        this.m_proxies[i] = new FixtureProxy(this, i);\n      }\n      this.createProxies(broadPhase, body.m_xf);\n      body.resetMassData();\n    };\n    Fixture2.prototype._serialize = function() {\n      return {\n        friction: this.m_friction,\n        restitution: this.m_restitution,\n        density: this.m_density,\n        isSensor: this.m_isSensor,\n        filterGroupIndex: this.m_filterGroupIndex,\n        filterCategoryBits: this.m_filterCategoryBits,\n        filterMaskBits: this.m_filterMaskBits,\n        shape: this.m_shape\n      };\n    };\n    Fixture2._deserialize = function(data, body, restore) {\n      var shape = restore(Shape, data.shape);\n      var fixture = shape && new Fixture2(body, shape, data);\n      return fixture;\n    };\n    Fixture2.prototype.getType = function() {\n      return this.m_shape.m_type;\n    };\n    Fixture2.prototype.getShape = function() {\n      return this.m_shape;\n    };\n    Fixture2.prototype.isSensor = function() {\n      return this.m_isSensor;\n    };\n    Fixture2.prototype.setSensor = function(sensor) {\n      if (sensor != this.m_isSensor) {\n        this.m_body.setAwake(true);\n        this.m_isSensor = sensor;\n      }\n    };\n    Fixture2.prototype.getUserData = function() {\n      return this.m_userData;\n    };\n    Fixture2.prototype.setUserData = function(data) {\n      this.m_userData = data;\n    };\n    Fixture2.prototype.getBody = function() {\n      return this.m_body;\n    };\n    Fixture2.prototype.getNext = function() {\n      return this.m_next;\n    };\n    Fixture2.prototype.getDensity = function() {\n      return this.m_density;\n    };\n    Fixture2.prototype.setDensity = function(density) {\n      this.m_density = density;\n    };\n    Fixture2.prototype.getFriction = function() {\n      return this.m_friction;\n    };\n    Fixture2.prototype.setFriction = function(friction) {\n      this.m_friction = friction;\n    };\n    Fixture2.prototype.getRestitution = function() {\n      return this.m_restitution;\n    };\n    Fixture2.prototype.setRestitution = function(restitution) {\n      this.m_restitution = restitution;\n    };\n    Fixture2.prototype.testPoint = function(p) {\n      return this.m_shape.testPoint(this.m_body.getTransform(), p);\n    };\n    Fixture2.prototype.rayCast = function(output2, input2, childIndex) {\n      return this.m_shape.rayCast(output2, input2, this.m_body.getTransform(), childIndex);\n    };\n    Fixture2.prototype.getMassData = function(massData) {\n      this.m_shape.computeMass(massData, this.m_density);\n    };\n    Fixture2.prototype.getAABB = function(childIndex) {\n      return this.m_proxies[childIndex].aabb;\n    };\n    Fixture2.prototype.createProxies = function(broadPhase, xf2) {\n      this.m_proxyCount = this.m_shape.getChildCount();\n      for (var i = 0; i < this.m_proxyCount; ++i) {\n        var proxy = this.m_proxies[i];\n        this.m_shape.computeAABB(proxy.aabb, xf2, i);\n        proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy);\n      }\n    };\n    Fixture2.prototype.destroyProxies = function(broadPhase) {\n      for (var i = 0; i < this.m_proxyCount; ++i) {\n        var proxy = this.m_proxies[i];\n        broadPhase.destroyProxy(proxy.proxyId);\n        proxy.proxyId = null;\n      }\n      this.m_proxyCount = 0;\n    };\n    Fixture2.prototype.synchronize = function(broadPhase, xf1, xf2) {\n      for (var i = 0; i < this.m_proxyCount; ++i) {\n        var proxy = this.m_proxies[i];\n        this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex);\n        this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex);\n        proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2);\n        subVec2(displacement, xf2.p, xf1.p);\n        broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement);\n      }\n    };\n    Fixture2.prototype.setFilterData = function(filter) {\n      this.m_filterGroupIndex = filter.groupIndex;\n      this.m_filterCategoryBits = filter.categoryBits;\n      this.m_filterMaskBits = filter.maskBits;\n      this.refilter();\n    };\n    Fixture2.prototype.getFilterGroupIndex = function() {\n      return this.m_filterGroupIndex;\n    };\n    Fixture2.prototype.setFilterGroupIndex = function(groupIndex) {\n      this.m_filterGroupIndex = groupIndex;\n      this.refilter();\n    };\n    Fixture2.prototype.getFilterCategoryBits = function() {\n      return this.m_filterCategoryBits;\n    };\n    Fixture2.prototype.setFilterCategoryBits = function(categoryBits) {\n      this.m_filterCategoryBits = categoryBits;\n      this.refilter();\n    };\n    Fixture2.prototype.getFilterMaskBits = function() {\n      return this.m_filterMaskBits;\n    };\n    Fixture2.prototype.setFilterMaskBits = function(maskBits) {\n      this.m_filterMaskBits = maskBits;\n      this.refilter();\n    };\n    Fixture2.prototype.refilter = function() {\n      if (this.m_body == null) {\n        return;\n      }\n      var edge = this.m_body.getContactList();\n      while (edge) {\n        var contact = edge.contact;\n        var fixtureA = contact.getFixtureA();\n        var fixtureB = contact.getFixtureB();\n        if (fixtureA == this || fixtureB == this) {\n          contact.flagForFiltering();\n        }\n        edge = edge.next;\n      }\n      var world = this.m_body.getWorld();\n      if (world == null) {\n        return;\n      }\n      var broadPhase = world.m_broadPhase;\n      for (var i = 0; i < this.m_proxyCount; ++i) {\n        broadPhase.touchProxy(this.m_proxies[i].proxyId);\n      }\n    };\n    Fixture2.prototype.shouldCollide = function(that) {\n      if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) {\n        return that.m_filterGroupIndex > 0;\n      }\n      var collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0;\n      var collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0;\n      var collide = collideA && collideB;\n      return collide;\n    };\n    return Fixture2;\n  }()\n);\nvar STATIC = \"static\";\nvar KINEMATIC = \"kinematic\";\nvar DYNAMIC = \"dynamic\";\nvar oldCenter = vec2(0, 0);\nvar localCenter = vec2(0, 0);\nvar shift = vec2(0, 0);\nvar temp$6 = vec2(0, 0);\nvar xf$2 = transform(0, 0, 0);\nvar BodyDefDefault = {\n  type: STATIC,\n  position: Vec2.zero(),\n  angle: 0,\n  linearVelocity: Vec2.zero(),\n  angularVelocity: 0,\n  linearDamping: 0,\n  angularDamping: 0,\n  fixedRotation: false,\n  bullet: false,\n  gravityScale: 1,\n  allowSleep: true,\n  awake: true,\n  active: true,\n  userData: null\n};\nvar Body = (\n  /** @class */\n  function() {\n    function Body2(world, def) {\n      this.style = {};\n      this.appData = {};\n      def = options(def, BodyDefDefault);\n      this.m_world = world;\n      this.m_awakeFlag = def.awake;\n      this.m_autoSleepFlag = def.allowSleep;\n      this.m_bulletFlag = def.bullet;\n      this.m_fixedRotationFlag = def.fixedRotation;\n      this.m_activeFlag = def.active;\n      this.m_islandFlag = false;\n      this.m_toiFlag = false;\n      this.m_userData = def.userData;\n      this.m_type = def.type;\n      if (this.m_type == DYNAMIC) {\n        this.m_mass = 1;\n        this.m_invMass = 1;\n      } else {\n        this.m_mass = 0;\n        this.m_invMass = 0;\n      }\n      this.m_I = 0;\n      this.m_invI = 0;\n      this.m_xf = Transform.identity();\n      this.m_xf.p.setVec2(def.position);\n      this.m_xf.q.setAngle(def.angle);\n      this.m_sweep = new Sweep();\n      this.m_sweep.setTransform(this.m_xf);\n      this.c_velocity = new Velocity();\n      this.c_position = new Position();\n      this.m_force = Vec2.zero();\n      this.m_torque = 0;\n      this.m_linearVelocity = Vec2.clone(def.linearVelocity);\n      this.m_angularVelocity = def.angularVelocity;\n      this.m_linearDamping = def.linearDamping;\n      this.m_angularDamping = def.angularDamping;\n      this.m_gravityScale = def.gravityScale;\n      this.m_sleepTime = 0;\n      this.m_jointList = null;\n      this.m_contactList = null;\n      this.m_fixtureList = null;\n      this.m_prev = null;\n      this.m_next = null;\n      this.m_destroyed = false;\n      if (typeof def.style === \"object\" && def.style !== null) {\n        this.style = def.style;\n      }\n    }\n    Body2.prototype._serialize = function() {\n      var fixtures = [];\n      for (var f = this.m_fixtureList; f; f = f.m_next) {\n        fixtures.push(f);\n      }\n      return {\n        type: this.m_type,\n        bullet: this.m_bulletFlag,\n        position: this.m_xf.p,\n        angle: this.m_xf.q.getAngle(),\n        linearVelocity: this.m_linearVelocity,\n        angularVelocity: this.m_angularVelocity,\n        fixtures\n      };\n    };\n    Body2._deserialize = function(data, world, restore) {\n      var body = new Body2(world, data);\n      if (data.fixtures) {\n        for (var i = data.fixtures.length - 1; i >= 0; i--) {\n          var fixture = restore(Fixture, data.fixtures[i], body);\n          body._addFixture(fixture);\n        }\n      }\n      return body;\n    };\n    Body2.prototype.isWorldLocked = function() {\n      return this.m_world && this.m_world.isLocked() ? true : false;\n    };\n    Body2.prototype.getWorld = function() {\n      return this.m_world;\n    };\n    Body2.prototype.getNext = function() {\n      return this.m_next;\n    };\n    Body2.prototype.setUserData = function(data) {\n      this.m_userData = data;\n    };\n    Body2.prototype.getUserData = function() {\n      return this.m_userData;\n    };\n    Body2.prototype.getFixtureList = function() {\n      return this.m_fixtureList;\n    };\n    Body2.prototype.getJointList = function() {\n      return this.m_jointList;\n    };\n    Body2.prototype.getContactList = function() {\n      return this.m_contactList;\n    };\n    Body2.prototype.isStatic = function() {\n      return this.m_type == STATIC;\n    };\n    Body2.prototype.isDynamic = function() {\n      return this.m_type == DYNAMIC;\n    };\n    Body2.prototype.isKinematic = function() {\n      return this.m_type == KINEMATIC;\n    };\n    Body2.prototype.setStatic = function() {\n      this.setType(STATIC);\n      return this;\n    };\n    Body2.prototype.setDynamic = function() {\n      this.setType(DYNAMIC);\n      return this;\n    };\n    Body2.prototype.setKinematic = function() {\n      this.setType(KINEMATIC);\n      return this;\n    };\n    Body2.prototype.getType = function() {\n      return this.m_type;\n    };\n    Body2.prototype.setType = function(type) {\n      if (this.isWorldLocked() == true) {\n        return;\n      }\n      if (this.m_type == type) {\n        return;\n      }\n      this.m_type = type;\n      this.resetMassData();\n      if (this.m_type == STATIC) {\n        this.m_linearVelocity.setZero();\n        this.m_angularVelocity = 0;\n        this.m_sweep.forward();\n        this.synchronizeFixtures();\n      }\n      this.setAwake(true);\n      this.m_force.setZero();\n      this.m_torque = 0;\n      var ce = this.m_contactList;\n      while (ce) {\n        var ce0 = ce;\n        ce = ce.next;\n        this.m_world.destroyContact(ce0.contact);\n      }\n      this.m_contactList = null;\n      var broadPhase = this.m_world.m_broadPhase;\n      for (var f = this.m_fixtureList; f; f = f.m_next) {\n        for (var i = 0; i < f.m_proxyCount; ++i) {\n          broadPhase.touchProxy(f.m_proxies[i].proxyId);\n        }\n      }\n    };\n    Body2.prototype.isBullet = function() {\n      return this.m_bulletFlag;\n    };\n    Body2.prototype.setBullet = function(flag) {\n      this.m_bulletFlag = !!flag;\n    };\n    Body2.prototype.isSleepingAllowed = function() {\n      return this.m_autoSleepFlag;\n    };\n    Body2.prototype.setSleepingAllowed = function(flag) {\n      this.m_autoSleepFlag = !!flag;\n      if (this.m_autoSleepFlag == false) {\n        this.setAwake(true);\n      }\n    };\n    Body2.prototype.isAwake = function() {\n      return this.m_awakeFlag;\n    };\n    Body2.prototype.setAwake = function(flag) {\n      if (flag) {\n        this.m_awakeFlag = true;\n        this.m_sleepTime = 0;\n      } else {\n        this.m_awakeFlag = false;\n        this.m_sleepTime = 0;\n        this.m_linearVelocity.setZero();\n        this.m_angularVelocity = 0;\n        this.m_force.setZero();\n        this.m_torque = 0;\n      }\n    };\n    Body2.prototype.isActive = function() {\n      return this.m_activeFlag;\n    };\n    Body2.prototype.setActive = function(flag) {\n      if (flag == this.m_activeFlag) {\n        return;\n      }\n      this.m_activeFlag = !!flag;\n      if (this.m_activeFlag) {\n        var broadPhase = this.m_world.m_broadPhase;\n        for (var f = this.m_fixtureList; f; f = f.m_next) {\n          f.createProxies(broadPhase, this.m_xf);\n        }\n        this.m_world.m_newFixture = true;\n      } else {\n        var broadPhase = this.m_world.m_broadPhase;\n        for (var f = this.m_fixtureList; f; f = f.m_next) {\n          f.destroyProxies(broadPhase);\n        }\n        var ce = this.m_contactList;\n        while (ce) {\n          var ce0 = ce;\n          ce = ce.next;\n          this.m_world.destroyContact(ce0.contact);\n        }\n        this.m_contactList = null;\n      }\n    };\n    Body2.prototype.isFixedRotation = function() {\n      return this.m_fixedRotationFlag;\n    };\n    Body2.prototype.setFixedRotation = function(flag) {\n      if (this.m_fixedRotationFlag == flag) {\n        return;\n      }\n      this.m_fixedRotationFlag = !!flag;\n      this.m_angularVelocity = 0;\n      this.resetMassData();\n    };\n    Body2.prototype.getTransform = function() {\n      return this.m_xf;\n    };\n    Body2.prototype.setTransform = function(a2, b2) {\n      if (this.isWorldLocked() == true) {\n        return;\n      }\n      if (typeof b2 === \"number\") {\n        this.m_xf.setNum(a2, b2);\n      } else {\n        this.m_xf.setTransform(a2);\n      }\n      this.m_sweep.setTransform(this.m_xf);\n      var broadPhase = this.m_world.m_broadPhase;\n      for (var f = this.m_fixtureList; f; f = f.m_next) {\n        f.synchronize(broadPhase, this.m_xf, this.m_xf);\n      }\n      this.setAwake(true);\n    };\n    Body2.prototype.synchronizeTransform = function() {\n      this.m_sweep.getTransform(this.m_xf, 1);\n    };\n    Body2.prototype.synchronizeFixtures = function() {\n      this.m_sweep.getTransform(xf$2, 0);\n      var broadPhase = this.m_world.m_broadPhase;\n      for (var f = this.m_fixtureList; f; f = f.m_next) {\n        f.synchronize(broadPhase, xf$2, this.m_xf);\n      }\n    };\n    Body2.prototype.advance = function(alpha) {\n      this.m_sweep.advance(alpha);\n      copyVec2(this.m_sweep.c, this.m_sweep.c0);\n      this.m_sweep.a = this.m_sweep.a0;\n      this.m_sweep.getTransform(this.m_xf, 1);\n    };\n    Body2.prototype.getPosition = function() {\n      return this.m_xf.p;\n    };\n    Body2.prototype.setPosition = function(p) {\n      this.setTransform(p, this.m_sweep.a);\n    };\n    Body2.prototype.getAngle = function() {\n      return this.m_sweep.a;\n    };\n    Body2.prototype.setAngle = function(angle) {\n      this.setTransform(this.m_xf.p, angle);\n    };\n    Body2.prototype.getWorldCenter = function() {\n      return this.m_sweep.c;\n    };\n    Body2.prototype.getLocalCenter = function() {\n      return this.m_sweep.localCenter;\n    };\n    Body2.prototype.getLinearVelocity = function() {\n      return this.m_linearVelocity;\n    };\n    Body2.prototype.getLinearVelocityFromWorldPoint = function(worldPoint) {\n      var localCenter2 = Vec2.sub(worldPoint, this.m_sweep.c);\n      return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity, localCenter2));\n    };\n    Body2.prototype.getLinearVelocityFromLocalPoint = function(localPoint) {\n      return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint));\n    };\n    Body2.prototype.setLinearVelocity = function(v3) {\n      if (this.m_type == STATIC) {\n        return;\n      }\n      if (Vec2.dot(v3, v3) > 0) {\n        this.setAwake(true);\n      }\n      this.m_linearVelocity.setVec2(v3);\n    };\n    Body2.prototype.getAngularVelocity = function() {\n      return this.m_angularVelocity;\n    };\n    Body2.prototype.setAngularVelocity = function(w) {\n      if (this.m_type == STATIC) {\n        return;\n      }\n      if (w * w > 0) {\n        this.setAwake(true);\n      }\n      this.m_angularVelocity = w;\n    };\n    Body2.prototype.getLinearDamping = function() {\n      return this.m_linearDamping;\n    };\n    Body2.prototype.setLinearDamping = function(linearDamping) {\n      this.m_linearDamping = linearDamping;\n    };\n    Body2.prototype.getAngularDamping = function() {\n      return this.m_angularDamping;\n    };\n    Body2.prototype.setAngularDamping = function(angularDamping) {\n      this.m_angularDamping = angularDamping;\n    };\n    Body2.prototype.getGravityScale = function() {\n      return this.m_gravityScale;\n    };\n    Body2.prototype.setGravityScale = function(scale) {\n      this.m_gravityScale = scale;\n    };\n    Body2.prototype.getMass = function() {\n      return this.m_mass;\n    };\n    Body2.prototype.getInertia = function() {\n      return this.m_I + this.m_mass * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter);\n    };\n    Body2.prototype.getMassData = function(data) {\n      data.mass = this.m_mass;\n      data.I = this.getInertia();\n      copyVec2(data.center, this.m_sweep.localCenter);\n    };\n    Body2.prototype.resetMassData = function() {\n      this.m_mass = 0;\n      this.m_invMass = 0;\n      this.m_I = 0;\n      this.m_invI = 0;\n      zeroVec2(this.m_sweep.localCenter);\n      if (this.isStatic() || this.isKinematic()) {\n        copyVec2(this.m_sweep.c0, this.m_xf.p);\n        copyVec2(this.m_sweep.c, this.m_xf.p);\n        this.m_sweep.a0 = this.m_sweep.a;\n        return;\n      }\n      zeroVec2(localCenter);\n      for (var f = this.m_fixtureList; f; f = f.m_next) {\n        if (f.m_density == 0) {\n          continue;\n        }\n        var massData = {\n          mass: 0,\n          center: vec2(0, 0),\n          I: 0\n        };\n        f.getMassData(massData);\n        this.m_mass += massData.mass;\n        plusScaleVec2(localCenter, massData.mass, massData.center);\n        this.m_I += massData.I;\n      }\n      if (this.m_mass > 0) {\n        this.m_invMass = 1 / this.m_mass;\n        scaleVec2(localCenter, this.m_invMass, localCenter);\n      } else {\n        this.m_mass = 1;\n        this.m_invMass = 1;\n      }\n      if (this.m_I > 0 && this.m_fixedRotationFlag == false) {\n        this.m_I -= this.m_mass * dotVec2(localCenter, localCenter);\n        this.m_invI = 1 / this.m_I;\n      } else {\n        this.m_I = 0;\n        this.m_invI = 0;\n      }\n      copyVec2(oldCenter, this.m_sweep.c);\n      this.m_sweep.setLocalCenter(localCenter, this.m_xf);\n      subVec2(shift, this.m_sweep.c, oldCenter);\n      crossNumVec2(temp$6, this.m_angularVelocity, shift);\n      plusVec2(this.m_linearVelocity, temp$6);\n    };\n    Body2.prototype.setMassData = function(massData) {\n      if (this.isWorldLocked() == true) {\n        return;\n      }\n      if (this.m_type != DYNAMIC) {\n        return;\n      }\n      this.m_invMass = 0;\n      this.m_I = 0;\n      this.m_invI = 0;\n      this.m_mass = massData.mass;\n      if (this.m_mass <= 0) {\n        this.m_mass = 1;\n      }\n      this.m_invMass = 1 / this.m_mass;\n      if (massData.I > 0 && this.m_fixedRotationFlag == false) {\n        this.m_I = massData.I - this.m_mass * dotVec2(massData.center, massData.center);\n        this.m_invI = 1 / this.m_I;\n      }\n      copyVec2(oldCenter, this.m_sweep.c);\n      this.m_sweep.setLocalCenter(massData.center, this.m_xf);\n      subVec2(shift, this.m_sweep.c, oldCenter);\n      crossNumVec2(temp$6, this.m_angularVelocity, shift);\n      plusVec2(this.m_linearVelocity, temp$6);\n    };\n    Body2.prototype.applyForce = function(force, point2, wake) {\n      if (wake === void 0) {\n        wake = true;\n      }\n      if (this.m_type != DYNAMIC) {\n        return;\n      }\n      if (wake && this.m_awakeFlag == false) {\n        this.setAwake(true);\n      }\n      if (this.m_awakeFlag) {\n        this.m_force.add(force);\n        this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point2, this.m_sweep.c), force);\n      }\n    };\n    Body2.prototype.applyForceToCenter = function(force, wake) {\n      if (wake === void 0) {\n        wake = true;\n      }\n      if (this.m_type != DYNAMIC) {\n        return;\n      }\n      if (wake && this.m_awakeFlag == false) {\n        this.setAwake(true);\n      }\n      if (this.m_awakeFlag) {\n        this.m_force.add(force);\n      }\n    };\n    Body2.prototype.applyTorque = function(torque, wake) {\n      if (wake === void 0) {\n        wake = true;\n      }\n      if (this.m_type != DYNAMIC) {\n        return;\n      }\n      if (wake && this.m_awakeFlag == false) {\n        this.setAwake(true);\n      }\n      if (this.m_awakeFlag) {\n        this.m_torque += torque;\n      }\n    };\n    Body2.prototype.applyLinearImpulse = function(impulse, point2, wake) {\n      if (wake === void 0) {\n        wake = true;\n      }\n      if (this.m_type != DYNAMIC) {\n        return;\n      }\n      if (wake && this.m_awakeFlag == false) {\n        this.setAwake(true);\n      }\n      if (this.m_awakeFlag) {\n        this.m_linearVelocity.addMul(this.m_invMass, impulse);\n        this.m_angularVelocity += this.m_invI * Vec2.crossVec2Vec2(Vec2.sub(point2, this.m_sweep.c), impulse);\n      }\n    };\n    Body2.prototype.applyAngularImpulse = function(impulse, wake) {\n      if (wake === void 0) {\n        wake = true;\n      }\n      if (this.m_type != DYNAMIC) {\n        return;\n      }\n      if (wake && this.m_awakeFlag == false) {\n        this.setAwake(true);\n      }\n      if (this.m_awakeFlag) {\n        this.m_angularVelocity += this.m_invI * impulse;\n      }\n    };\n    Body2.prototype.shouldCollide = function(that) {\n      if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) {\n        return false;\n      }\n      for (var jn = this.m_jointList; jn; jn = jn.next) {\n        if (jn.other == that) {\n          if (jn.joint.m_collideConnected == false) {\n            return false;\n          }\n        }\n      }\n      return true;\n    };\n    Body2.prototype._addFixture = function(fixture) {\n      if (this.isWorldLocked() == true) {\n        return null;\n      }\n      if (this.m_activeFlag) {\n        var broadPhase = this.m_world.m_broadPhase;\n        fixture.createProxies(broadPhase, this.m_xf);\n      }\n      fixture.m_next = this.m_fixtureList;\n      this.m_fixtureList = fixture;\n      if (fixture.m_density > 0) {\n        this.resetMassData();\n      }\n      this.m_world.m_newFixture = true;\n      return fixture;\n    };\n    Body2.prototype.createFixture = function(shape, fixdef) {\n      if (this.isWorldLocked() == true) {\n        return null;\n      }\n      var fixture = new Fixture(this, shape, fixdef);\n      this._addFixture(fixture);\n      return fixture;\n    };\n    Body2.prototype.destroyFixture = function(fixture) {\n      if (this.isWorldLocked() == true) {\n        return;\n      }\n      if (this.m_fixtureList === fixture) {\n        this.m_fixtureList = fixture.m_next;\n      } else {\n        var node = this.m_fixtureList;\n        while (node != null) {\n          if (node.m_next === fixture) {\n            node.m_next = fixture.m_next;\n            break;\n          }\n          node = node.m_next;\n        }\n      }\n      var edge = this.m_contactList;\n      while (edge) {\n        var c2 = edge.contact;\n        edge = edge.next;\n        var fixtureA = c2.getFixtureA();\n        var fixtureB = c2.getFixtureB();\n        if (fixture == fixtureA || fixture == fixtureB) {\n          this.m_world.destroyContact(c2);\n        }\n      }\n      if (this.m_activeFlag) {\n        var broadPhase = this.m_world.m_broadPhase;\n        fixture.destroyProxies(broadPhase);\n      }\n      fixture.m_body = null;\n      fixture.m_next = null;\n      this.m_world.publish(\"remove-fixture\", fixture);\n      this.resetMassData();\n    };\n    Body2.prototype.getWorldPoint = function(localPoint) {\n      return Transform.mulVec2(this.m_xf, localPoint);\n    };\n    Body2.prototype.getWorldVector = function(localVector) {\n      return Rot.mulVec2(this.m_xf.q, localVector);\n    };\n    Body2.prototype.getLocalPoint = function(worldPoint) {\n      return Transform.mulTVec2(this.m_xf, worldPoint);\n    };\n    Body2.prototype.getLocalVector = function(worldVector) {\n      return Rot.mulTVec2(this.m_xf.q, worldVector);\n    };\n    Body2.STATIC = \"static\";\n    Body2.KINEMATIC = \"kinematic\";\n    Body2.DYNAMIC = \"dynamic\";\n    return Body2;\n  }()\n);\nvar JointEdge = (\n  /** @class */\n  /* @__PURE__ */ function() {\n    function JointEdge2() {\n      this.other = null;\n      this.joint = null;\n      this.prev = null;\n      this.next = null;\n    }\n    return JointEdge2;\n  }()\n);\nvar Joint = (\n  /** @class */\n  function() {\n    function Joint2(def, bodyA, bodyB) {\n      this.m_type = \"unknown-joint\";\n      this.m_prev = null;\n      this.m_next = null;\n      this.m_edgeA = new JointEdge();\n      this.m_edgeB = new JointEdge();\n      this.m_islandFlag = false;\n      this.style = {};\n      this.appData = {};\n      bodyA = \"bodyA\" in def ? def.bodyA : bodyA;\n      bodyB = \"bodyB\" in def ? def.bodyB : bodyB;\n      this.m_bodyA = bodyA;\n      this.m_bodyB = bodyB;\n      this.m_collideConnected = !!def.collideConnected;\n      this.m_userData = def.userData;\n      if (typeof def.style === \"object\" && def.style !== null) {\n        this.style = def.style;\n      }\n    }\n    Joint2.prototype.isActive = function() {\n      return this.m_bodyA.isActive() && this.m_bodyB.isActive();\n    };\n    Joint2.prototype.getType = function() {\n      return this.m_type;\n    };\n    Joint2.prototype.getBodyA = function() {\n      return this.m_bodyA;\n    };\n    Joint2.prototype.getBodyB = function() {\n      return this.m_bodyB;\n    };\n    Joint2.prototype.getNext = function() {\n      return this.m_next;\n    };\n    Joint2.prototype.getUserData = function() {\n      return this.m_userData;\n    };\n    Joint2.prototype.setUserData = function(data) {\n      this.m_userData = data;\n    };\n    Joint2.prototype.getCollideConnected = function() {\n      return this.m_collideConnected;\n    };\n    Joint2.prototype.shiftOrigin = function(newOrigin) {\n    };\n    Joint2.prototype._resetAnchors = function(def) {\n      return this._reset(def);\n    };\n    return Joint2;\n  }()\n);\nvar stats = {\n  gjkCalls: 0,\n  gjkIters: 0,\n  gjkMaxIters: 0,\n  toiTime: 0,\n  toiMaxTime: 0,\n  toiCalls: 0,\n  toiIters: 0,\n  toiMaxIters: 0,\n  toiRootIters: 0,\n  toiMaxRootIters: 0,\n  toString: function(newline) {\n    newline = typeof newline === \"string\" ? newline : \"\\n\";\n    var string = \"\";\n    for (var name_1 in this) {\n      if (typeof this[name_1] !== \"function\" && typeof this[name_1] !== \"object\") {\n        string += name_1 + \": \" + this[name_1] + newline;\n      }\n    }\n    return string;\n  }\n};\nvar now = function() {\n  return Date.now();\n};\nvar diff = function(time) {\n  return Date.now() - time;\n};\nconst Timer = {\n  now,\n  diff\n};\nvar math_max$4 = Math.max;\nvar temp$5 = vec2(0, 0);\nvar normal$4 = vec2(0, 0);\nvar e12 = vec2(0, 0);\nvar e13 = vec2(0, 0);\nvar e23 = vec2(0, 0);\nvar temp1 = vec2(0, 0);\nvar temp2 = vec2(0, 0);\nstats.gjkCalls = 0;\nstats.gjkIters = 0;\nstats.gjkMaxIters = 0;\nvar DistanceInput = (\n  /** @class */\n  function() {\n    function DistanceInput2() {\n      this.proxyA = new DistanceProxy();\n      this.proxyB = new DistanceProxy();\n      this.transformA = Transform.identity();\n      this.transformB = Transform.identity();\n      this.useRadii = false;\n    }\n    DistanceInput2.prototype.recycle = function() {\n      this.proxyA.recycle();\n      this.proxyB.recycle();\n      this.transformA.setIdentity();\n      this.transformB.setIdentity();\n      this.useRadii = false;\n    };\n    return DistanceInput2;\n  }()\n);\nvar DistanceOutput = (\n  /** @class */\n  function() {\n    function DistanceOutput2() {\n      this.pointA = vec2(0, 0);\n      this.pointB = vec2(0, 0);\n      this.distance = 0;\n      this.iterations = 0;\n    }\n    DistanceOutput2.prototype.recycle = function() {\n      zeroVec2(this.pointA);\n      zeroVec2(this.pointB);\n      this.distance = 0;\n      this.iterations = 0;\n    };\n    return DistanceOutput2;\n  }()\n);\nvar SimplexCache = (\n  /** @class */\n  function() {\n    function SimplexCache2() {\n      this.metric = 0;\n      this.indexA = [];\n      this.indexB = [];\n      this.count = 0;\n    }\n    SimplexCache2.prototype.recycle = function() {\n      this.metric = 0;\n      this.indexA.length = 0;\n      this.indexB.length = 0;\n      this.count = 0;\n    };\n    return SimplexCache2;\n  }()\n);\nvar Distance = function(output2, cache2, input2) {\n  ++stats.gjkCalls;\n  var proxyA = input2.proxyA;\n  var proxyB = input2.proxyB;\n  var xfA2 = input2.transformA;\n  var xfB2 = input2.transformB;\n  simplex.recycle();\n  simplex.readCache(cache2, proxyA, xfA2, proxyB, xfB2);\n  var vertices = simplex.m_v;\n  var k_maxIters = SettingsInternal.maxDistanceIterations;\n  var saveA = [];\n  var saveB = [];\n  var saveCount = 0;\n  var iter = 0;\n  while (iter < k_maxIters) {\n    saveCount = simplex.m_count;\n    for (var i = 0; i < saveCount; ++i) {\n      saveA[i] = vertices[i].indexA;\n      saveB[i] = vertices[i].indexB;\n    }\n    simplex.solve();\n    if (simplex.m_count === 3) {\n      break;\n    }\n    var d2 = simplex.getSearchDirection();\n    if (lengthSqrVec2(d2) < EPSILON * EPSILON) {\n      break;\n    }\n    var vertex = vertices[simplex.m_count];\n    vertex.indexA = proxyA.getSupport(derotVec2(temp$5, xfA2.q, scaleVec2(temp$5, -1, d2)));\n    transformVec2(vertex.wA, xfA2, proxyA.getVertex(vertex.indexA));\n    vertex.indexB = proxyB.getSupport(derotVec2(temp$5, xfB2.q, d2));\n    transformVec2(vertex.wB, xfB2, proxyB.getVertex(vertex.indexB));\n    subVec2(vertex.w, vertex.wB, vertex.wA);\n    ++iter;\n    ++stats.gjkIters;\n    var duplicate = false;\n    for (var i = 0; i < saveCount; ++i) {\n      if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) {\n        duplicate = true;\n        break;\n      }\n    }\n    if (duplicate) {\n      break;\n    }\n    ++simplex.m_count;\n  }\n  stats.gjkMaxIters = math_max$4(stats.gjkMaxIters, iter);\n  simplex.getWitnessPoints(output2.pointA, output2.pointB);\n  output2.distance = distVec2(output2.pointA, output2.pointB);\n  output2.iterations = iter;\n  simplex.writeCache(cache2);\n  if (input2.useRadii) {\n    var rA2 = proxyA.m_radius;\n    var rB2 = proxyB.m_radius;\n    if (output2.distance > rA2 + rB2 && output2.distance > EPSILON) {\n      output2.distance -= rA2 + rB2;\n      subVec2(normal$4, output2.pointB, output2.pointA);\n      normalizeVec2(normal$4);\n      plusScaleVec2(output2.pointA, rA2, normal$4);\n      minusScaleVec2(output2.pointB, rB2, normal$4);\n    } else {\n      var p = subVec2(temp$5, output2.pointA, output2.pointB);\n      copyVec2(output2.pointA, p);\n      copyVec2(output2.pointB, p);\n      output2.distance = 0;\n    }\n  }\n};\nvar DistanceProxy = (\n  /** @class */\n  function() {\n    function DistanceProxy2() {\n      this.m_vertices = [];\n      this.m_count = 0;\n      this.m_radius = 0;\n    }\n    DistanceProxy2.prototype.recycle = function() {\n      this.m_vertices.length = 0;\n      this.m_count = 0;\n      this.m_radius = 0;\n    };\n    DistanceProxy2.prototype.getVertexCount = function() {\n      return this.m_count;\n    };\n    DistanceProxy2.prototype.getVertex = function(index) {\n      return this.m_vertices[index];\n    };\n    DistanceProxy2.prototype.getSupport = function(d2) {\n      var bestIndex = -1;\n      var bestValue = -Infinity;\n      for (var i = 0; i < this.m_count; ++i) {\n        var value = dotVec2(this.m_vertices[i], d2);\n        if (value > bestValue) {\n          bestIndex = i;\n          bestValue = value;\n        }\n      }\n      return bestIndex;\n    };\n    DistanceProxy2.prototype.getSupportVertex = function(d2) {\n      return this.m_vertices[this.getSupport(d2)];\n    };\n    DistanceProxy2.prototype.set = function(shape, index) {\n      shape.computeDistanceProxy(this, index);\n    };\n    DistanceProxy2.prototype.setVertices = function(vertices, count, radius) {\n      this.m_vertices = vertices;\n      this.m_count = count;\n      this.m_radius = radius;\n    };\n    return DistanceProxy2;\n  }()\n);\nvar SimplexVertex = (\n  /** @class */\n  function() {\n    function SimplexVertex2() {\n      this.wA = vec2(0, 0);\n      this.indexA = 0;\n      this.wB = vec2(0, 0);\n      this.indexB = 0;\n      this.w = vec2(0, 0);\n      this.a = 0;\n    }\n    SimplexVertex2.prototype.recycle = function() {\n      this.indexA = 0;\n      this.indexB = 0;\n      zeroVec2(this.wA);\n      zeroVec2(this.wB);\n      zeroVec2(this.w);\n      this.a = 0;\n    };\n    SimplexVertex2.prototype.set = function(v3) {\n      this.indexA = v3.indexA;\n      this.indexB = v3.indexB;\n      copyVec2(this.wA, v3.wA);\n      copyVec2(this.wB, v3.wB);\n      copyVec2(this.w, v3.w);\n      this.a = v3.a;\n    };\n    return SimplexVertex2;\n  }()\n);\nvar searchDirection_reuse = vec2(0, 0);\nvar closestPoint_reuse = vec2(0, 0);\nvar Simplex = (\n  /** @class */\n  function() {\n    function Simplex2() {\n      this.m_v1 = new SimplexVertex();\n      this.m_v2 = new SimplexVertex();\n      this.m_v3 = new SimplexVertex();\n      this.m_v = [this.m_v1, this.m_v2, this.m_v3];\n    }\n    Simplex2.prototype.recycle = function() {\n      this.m_v1.recycle();\n      this.m_v2.recycle();\n      this.m_v3.recycle();\n      this.m_count = 0;\n    };\n    Simplex2.prototype.toString = function() {\n      if (this.m_count === 3) {\n        return [\n          \"+\" + this.m_count,\n          this.m_v1.a,\n          this.m_v1.wA.x,\n          this.m_v1.wA.y,\n          this.m_v1.wB.x,\n          this.m_v1.wB.y,\n          this.m_v2.a,\n          this.m_v2.wA.x,\n          this.m_v2.wA.y,\n          this.m_v2.wB.x,\n          this.m_v2.wB.y,\n          this.m_v3.a,\n          this.m_v3.wA.x,\n          this.m_v3.wA.y,\n          this.m_v3.wB.x,\n          this.m_v3.wB.y\n        ].toString();\n      } else if (this.m_count === 2) {\n        return [\n          \"+\" + this.m_count,\n          this.m_v1.a,\n          this.m_v1.wA.x,\n          this.m_v1.wA.y,\n          this.m_v1.wB.x,\n          this.m_v1.wB.y,\n          this.m_v2.a,\n          this.m_v2.wA.x,\n          this.m_v2.wA.y,\n          this.m_v2.wB.x,\n          this.m_v2.wB.y\n        ].toString();\n      } else if (this.m_count === 1) {\n        return [\n          \"+\" + this.m_count,\n          this.m_v1.a,\n          this.m_v1.wA.x,\n          this.m_v1.wA.y,\n          this.m_v1.wB.x,\n          this.m_v1.wB.y\n        ].toString();\n      } else {\n        return \"+\" + this.m_count;\n      }\n    };\n    Simplex2.prototype.readCache = function(cache2, proxyA, transformA, proxyB, transformB) {\n      this.m_count = cache2.count;\n      for (var i = 0; i < this.m_count; ++i) {\n        var v3 = this.m_v[i];\n        v3.indexA = cache2.indexA[i];\n        v3.indexB = cache2.indexB[i];\n        var wALocal = proxyA.getVertex(v3.indexA);\n        var wBLocal = proxyB.getVertex(v3.indexB);\n        transformVec2(v3.wA, transformA, wALocal);\n        transformVec2(v3.wB, transformB, wBLocal);\n        subVec2(v3.w, v3.wB, v3.wA);\n        v3.a = 0;\n      }\n      if (this.m_count > 1) {\n        var metric1 = cache2.metric;\n        var metric2 = this.getMetric();\n        if (metric2 < 0.5 * metric1 || 2 * metric1 < metric2 || metric2 < EPSILON) {\n          this.m_count = 0;\n        }\n      }\n      if (this.m_count === 0) {\n        var v3 = this.m_v[0];\n        v3.indexA = 0;\n        v3.indexB = 0;\n        var wALocal = proxyA.getVertex(0);\n        var wBLocal = proxyB.getVertex(0);\n        transformVec2(v3.wA, transformA, wALocal);\n        transformVec2(v3.wB, transformB, wBLocal);\n        subVec2(v3.w, v3.wB, v3.wA);\n        v3.a = 1;\n        this.m_count = 1;\n      }\n    };\n    Simplex2.prototype.writeCache = function(cache2) {\n      cache2.metric = this.getMetric();\n      cache2.count = this.m_count;\n      for (var i = 0; i < this.m_count; ++i) {\n        cache2.indexA[i] = this.m_v[i].indexA;\n        cache2.indexB[i] = this.m_v[i].indexB;\n      }\n    };\n    Simplex2.prototype.getSearchDirection = function() {\n      var v13 = this.m_v1;\n      var v22 = this.m_v2;\n      switch (this.m_count) {\n        case 1:\n          return setVec2(searchDirection_reuse, -v13.w.x, -v13.w.y);\n        case 2: {\n          subVec2(e12, v22.w, v13.w);\n          var sgn = -crossVec2Vec2(e12, v13.w);\n          if (sgn > 0) {\n            return setVec2(searchDirection_reuse, -e12.y, e12.x);\n          } else {\n            return setVec2(searchDirection_reuse, e12.y, -e12.x);\n          }\n        }\n        default:\n          return zeroVec2(searchDirection_reuse);\n      }\n    };\n    Simplex2.prototype.getClosestPoint = function() {\n      var v13 = this.m_v1;\n      var v22 = this.m_v2;\n      switch (this.m_count) {\n        case 0:\n          return zeroVec2(closestPoint_reuse);\n        case 1:\n          return copyVec2(closestPoint_reuse, v13.w);\n        case 2:\n          return combine2Vec2(closestPoint_reuse, v13.a, v13.w, v22.a, v22.w);\n        case 3:\n          return zeroVec2(closestPoint_reuse);\n        default:\n          return zeroVec2(closestPoint_reuse);\n      }\n    };\n    Simplex2.prototype.getWitnessPoints = function(pA2, pB2) {\n      var v13 = this.m_v1;\n      var v22 = this.m_v2;\n      var v3 = this.m_v3;\n      switch (this.m_count) {\n        case 0:\n          break;\n        case 1:\n          copyVec2(pA2, v13.wA);\n          copyVec2(pB2, v13.wB);\n          break;\n        case 2:\n          combine2Vec2(pA2, v13.a, v13.wA, v22.a, v22.wA);\n          combine2Vec2(pB2, v13.a, v13.wB, v22.a, v22.wB);\n          break;\n        case 3:\n          combine3Vec2(pA2, v13.a, v13.wA, v22.a, v22.wA, v3.a, v3.wA);\n          copyVec2(pB2, pA2);\n          break;\n      }\n    };\n    Simplex2.prototype.getMetric = function() {\n      switch (this.m_count) {\n        case 0:\n          return 0;\n        case 1:\n          return 0;\n        case 2:\n          return distVec2(this.m_v1.w, this.m_v2.w);\n        case 3:\n          return crossVec2Vec2(subVec2(temp1, this.m_v2.w, this.m_v1.w), subVec2(temp2, this.m_v3.w, this.m_v1.w));\n        default:\n          return 0;\n      }\n    };\n    Simplex2.prototype.solve = function() {\n      switch (this.m_count) {\n        case 1:\n          break;\n        case 2:\n          this.solve2();\n          break;\n        case 3:\n          this.solve3();\n          break;\n      }\n    };\n    Simplex2.prototype.solve2 = function() {\n      var w1 = this.m_v1.w;\n      var w2 = this.m_v2.w;\n      subVec2(e12, w2, w1);\n      var d12_2 = -dotVec2(w1, e12);\n      if (d12_2 <= 0) {\n        this.m_v1.a = 1;\n        this.m_count = 1;\n        return;\n      }\n      var d12_1 = dotVec2(w2, e12);\n      if (d12_1 <= 0) {\n        this.m_v2.a = 1;\n        this.m_count = 1;\n        this.m_v1.set(this.m_v2);\n        return;\n      }\n      var inv_d12 = 1 / (d12_1 + d12_2);\n      this.m_v1.a = d12_1 * inv_d12;\n      this.m_v2.a = d12_2 * inv_d12;\n      this.m_count = 2;\n    };\n    Simplex2.prototype.solve3 = function() {\n      var w1 = this.m_v1.w;\n      var w2 = this.m_v2.w;\n      var w3 = this.m_v3.w;\n      subVec2(e12, w2, w1);\n      var w1e12 = dotVec2(w1, e12);\n      var w2e12 = dotVec2(w2, e12);\n      var d12_1 = w2e12;\n      var d12_2 = -w1e12;\n      subVec2(e13, w3, w1);\n      var w1e13 = dotVec2(w1, e13);\n      var w3e13 = dotVec2(w3, e13);\n      var d13_1 = w3e13;\n      var d13_2 = -w1e13;\n      subVec2(e23, w3, w2);\n      var w2e23 = dotVec2(w2, e23);\n      var w3e23 = dotVec2(w3, e23);\n      var d23_1 = w3e23;\n      var d23_2 = -w2e23;\n      var n123 = crossVec2Vec2(e12, e13);\n      var d123_1 = n123 * crossVec2Vec2(w2, w3);\n      var d123_2 = n123 * crossVec2Vec2(w3, w1);\n      var d123_3 = n123 * crossVec2Vec2(w1, w2);\n      if (d12_2 <= 0 && d13_2 <= 0) {\n        this.m_v1.a = 1;\n        this.m_count = 1;\n        return;\n      }\n      if (d12_1 > 0 && d12_2 > 0 && d123_3 <= 0) {\n        var inv_d12 = 1 / (d12_1 + d12_2);\n        this.m_v1.a = d12_1 * inv_d12;\n        this.m_v2.a = d12_2 * inv_d12;\n        this.m_count = 2;\n        return;\n      }\n      if (d13_1 > 0 && d13_2 > 0 && d123_2 <= 0) {\n        var inv_d13 = 1 / (d13_1 + d13_2);\n        this.m_v1.a = d13_1 * inv_d13;\n        this.m_v3.a = d13_2 * inv_d13;\n        this.m_count = 2;\n        this.m_v2.set(this.m_v3);\n        return;\n      }\n      if (d12_1 <= 0 && d23_2 <= 0) {\n        this.m_v2.a = 1;\n        this.m_count = 1;\n        this.m_v1.set(this.m_v2);\n        return;\n      }\n      if (d13_1 <= 0 && d23_1 <= 0) {\n        this.m_v3.a = 1;\n        this.m_count = 1;\n        this.m_v1.set(this.m_v3);\n        return;\n      }\n      if (d23_1 > 0 && d23_2 > 0 && d123_1 <= 0) {\n        var inv_d23 = 1 / (d23_1 + d23_2);\n        this.m_v2.a = d23_1 * inv_d23;\n        this.m_v3.a = d23_2 * inv_d23;\n        this.m_count = 2;\n        this.m_v1.set(this.m_v3);\n        return;\n      }\n      var inv_d123 = 1 / (d123_1 + d123_2 + d123_3);\n      this.m_v1.a = d123_1 * inv_d123;\n      this.m_v2.a = d123_2 * inv_d123;\n      this.m_v3.a = d123_3 * inv_d123;\n      this.m_count = 3;\n    };\n    return Simplex2;\n  }()\n);\nvar simplex = new Simplex();\nvar input$1 = new DistanceInput();\nvar cache$1 = new SimplexCache();\nvar output$1 = new DistanceOutput();\nvar testOverlap = function(shapeA, indexA, shapeB, indexB, xfA2, xfB2) {\n  input$1.recycle();\n  input$1.proxyA.set(shapeA, indexA);\n  input$1.proxyB.set(shapeB, indexB);\n  copyTransform(input$1.transformA, xfA2);\n  copyTransform(input$1.transformB, xfB2);\n  input$1.useRadii = true;\n  output$1.recycle();\n  cache$1.recycle();\n  Distance(output$1, cache$1, input$1);\n  return output$1.distance < 10 * EPSILON;\n};\nDistance.testOverlap = testOverlap;\nDistance.Input = DistanceInput;\nDistance.Output = DistanceOutput;\nDistance.Proxy = DistanceProxy;\nDistance.Cache = SimplexCache;\nvar ShapeCastInput = (\n  /** @class */\n  function() {\n    function ShapeCastInput2() {\n      this.proxyA = new DistanceProxy();\n      this.proxyB = new DistanceProxy();\n      this.transformA = Transform.identity();\n      this.transformB = Transform.identity();\n      this.translationB = Vec2.zero();\n    }\n    ShapeCastInput2.prototype.recycle = function() {\n      this.proxyA.recycle();\n      this.proxyB.recycle();\n      this.transformA.setIdentity();\n      this.transformB.setIdentity();\n      zeroVec2(this.translationB);\n    };\n    return ShapeCastInput2;\n  }()\n);\nvar ShapeCastOutput = (\n  /** @class */\n  /* @__PURE__ */ function() {\n    function ShapeCastOutput2() {\n      this.point = Vec2.zero();\n      this.normal = Vec2.zero();\n      this.lambda = 1;\n      this.iterations = 0;\n    }\n    return ShapeCastOutput2;\n  }()\n);\nvar ShapeCast = function(output2, input2) {\n  output2.iterations = 0;\n  output2.lambda = 1;\n  output2.normal.setZero();\n  output2.point.setZero();\n  var proxyA = input2.proxyA;\n  var proxyB = input2.proxyB;\n  var radiusA = math_max$4(proxyA.m_radius, SettingsInternal.polygonRadius);\n  var radiusB = math_max$4(proxyB.m_radius, SettingsInternal.polygonRadius);\n  var radius = radiusA + radiusB;\n  var xfA2 = input2.transformA;\n  var xfB2 = input2.transformB;\n  var r = input2.translationB;\n  var n2 = Vec2.zero();\n  var lambda = 0;\n  var simplex2 = new Simplex();\n  simplex2.m_count = 0;\n  var vertices = simplex2.m_v;\n  var indexA = proxyA.getSupport(Rot.mulTVec2(xfA2.q, Vec2.neg(r)));\n  var wA = Transform.mulVec2(xfA2, proxyA.getVertex(indexA));\n  var indexB = proxyB.getSupport(Rot.mulTVec2(xfB2.q, r));\n  var wB = Transform.mulVec2(xfB2, proxyB.getVertex(indexB));\n  var v3 = Vec2.sub(wA, wB);\n  var sigma = math_max$4(SettingsInternal.polygonRadius, radius - SettingsInternal.polygonRadius);\n  var tolerance = 0.5 * SettingsInternal.linearSlop;\n  var k_maxIters = 20;\n  var iter = 0;\n  while (iter < k_maxIters && v3.length() - sigma > tolerance) {\n    output2.iterations += 1;\n    indexA = proxyA.getSupport(Rot.mulTVec2(xfA2.q, Vec2.neg(v3)));\n    wA = Transform.mulVec2(xfA2, proxyA.getVertex(indexA));\n    indexB = proxyB.getSupport(Rot.mulTVec2(xfB2.q, v3));\n    wB = Transform.mulVec2(xfB2, proxyB.getVertex(indexB));\n    var p = Vec2.sub(wA, wB);\n    v3.normalize();\n    var vp = Vec2.dot(v3, p);\n    var vr = Vec2.dot(v3, r);\n    if (vp - sigma > lambda * vr) {\n      if (vr <= 0) {\n        return false;\n      }\n      lambda = (vp - sigma) / vr;\n      if (lambda > 1) {\n        return false;\n      }\n      n2.setMul(-1, v3);\n      simplex2.m_count = 0;\n    }\n    var vertex = vertices[simplex2.m_count];\n    vertex.indexA = indexB;\n    vertex.wA = Vec2.combine(1, wB, lambda, r);\n    vertex.indexB = indexA;\n    vertex.wB = wA;\n    vertex.w = Vec2.sub(vertex.wB, vertex.wA);\n    vertex.a = 1;\n    simplex2.m_count += 1;\n    switch (simplex2.m_count) {\n      case 1:\n        break;\n      case 2:\n        simplex2.solve2();\n        break;\n      case 3:\n        simplex2.solve3();\n        break;\n    }\n    if (simplex2.m_count == 3) {\n      return false;\n    }\n    v3.setVec2(simplex2.getClosestPoint());\n    ++iter;\n  }\n  if (iter == 0) {\n    return false;\n  }\n  var pointA2 = Vec2.zero();\n  var pointB2 = Vec2.zero();\n  simplex2.getWitnessPoints(pointB2, pointA2);\n  if (v3.lengthSquared() > 0) {\n    n2.setMul(-1, v3);\n    n2.normalize();\n  }\n  output2.point = Vec2.combine(1, pointA2, radiusA, n2);\n  output2.normal = n2;\n  output2.lambda = lambda;\n  output2.iterations = iter;\n  return true;\n};\nvar math_abs$7 = Math.abs;\nvar math_max$3 = Math.max;\nvar TOIInput = (\n  /** @class */\n  function() {\n    function TOIInput2() {\n      this.proxyA = new DistanceProxy();\n      this.proxyB = new DistanceProxy();\n      this.sweepA = new Sweep();\n      this.sweepB = new Sweep();\n    }\n    TOIInput2.prototype.recycle = function() {\n      this.proxyA.recycle();\n      this.proxyB.recycle();\n      this.sweepA.recycle();\n      this.sweepB.recycle();\n      this.tMax = -1;\n    };\n    return TOIInput2;\n  }()\n);\nvar TOIOutputState;\n(function(TOIOutputState2) {\n  TOIOutputState2[TOIOutputState2[\"e_unset\"] = -1] = \"e_unset\";\n  TOIOutputState2[TOIOutputState2[\"e_unknown\"] = 0] = \"e_unknown\";\n  TOIOutputState2[TOIOutputState2[\"e_failed\"] = 1] = \"e_failed\";\n  TOIOutputState2[TOIOutputState2[\"e_overlapped\"] = 2] = \"e_overlapped\";\n  TOIOutputState2[TOIOutputState2[\"e_touching\"] = 3] = \"e_touching\";\n  TOIOutputState2[TOIOutputState2[\"e_separated\"] = 4] = \"e_separated\";\n})(TOIOutputState || (TOIOutputState = {}));\nvar TOIOutput = (\n  /** @class */\n  function() {\n    function TOIOutput2() {\n      this.state = TOIOutputState.e_unset;\n      this.t = -1;\n    }\n    TOIOutput2.prototype.recycle = function() {\n      this.state = TOIOutputState.e_unset;\n      this.t = -1;\n    };\n    return TOIOutput2;\n  }()\n);\nstats.toiTime = 0;\nstats.toiMaxTime = 0;\nstats.toiCalls = 0;\nstats.toiIters = 0;\nstats.toiMaxIters = 0;\nstats.toiRootIters = 0;\nstats.toiMaxRootIters = 0;\nvar distanceInput = new DistanceInput();\nvar distanceOutput = new DistanceOutput();\nvar cache = new SimplexCache();\nvar xfA$1 = transform(0, 0, 0);\nvar xfB$1 = transform(0, 0, 0);\nvar temp$4 = vec2(0, 0);\nvar pointA$2 = vec2(0, 0);\nvar pointB$2 = vec2(0, 0);\nvar normal$3 = vec2(0, 0);\nvar axisA = vec2(0, 0);\nvar axisB = vec2(0, 0);\nvar localPointA = vec2(0, 0);\nvar localPointB = vec2(0, 0);\nvar TimeOfImpact = function(output2, input2) {\n  var timer = Timer.now();\n  ++stats.toiCalls;\n  output2.state = TOIOutputState.e_unknown;\n  output2.t = input2.tMax;\n  var proxyA = input2.proxyA;\n  var proxyB = input2.proxyB;\n  var sweepA = input2.sweepA;\n  var sweepB = input2.sweepB;\n  sweepA.normalize();\n  sweepB.normalize();\n  var tMax = input2.tMax;\n  var totalRadius = proxyA.m_radius + proxyB.m_radius;\n  var target = math_max$3(SettingsInternal.linearSlop, totalRadius - 3 * SettingsInternal.linearSlop);\n  var tolerance = 0.25 * SettingsInternal.linearSlop;\n  var t1 = 0;\n  var k_maxIterations = SettingsInternal.maxTOIIterations;\n  var iter = 0;\n  cache.recycle();\n  distanceInput.proxyA.setVertices(proxyA.m_vertices, proxyA.m_count, proxyA.m_radius);\n  distanceInput.proxyB.setVertices(proxyB.m_vertices, proxyB.m_count, proxyB.m_radius);\n  distanceInput.useRadii = false;\n  while (true) {\n    sweepA.getTransform(xfA$1, t1);\n    sweepB.getTransform(xfB$1, t1);\n    copyTransform(distanceInput.transformA, xfA$1);\n    copyTransform(distanceInput.transformB, xfB$1);\n    Distance(distanceOutput, cache, distanceInput);\n    if (distanceOutput.distance <= 0) {\n      output2.state = TOIOutputState.e_overlapped;\n      output2.t = 0;\n      break;\n    }\n    if (distanceOutput.distance < target + tolerance) {\n      output2.state = TOIOutputState.e_touching;\n      output2.t = t1;\n      break;\n    }\n    separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1);\n    var done = false;\n    var t2 = tMax;\n    var pushBackIter = 0;\n    while (true) {\n      var s2 = separationFunction.findMinSeparation(t2);\n      if (s2 > target + tolerance) {\n        output2.state = TOIOutputState.e_separated;\n        output2.t = tMax;\n        done = true;\n        break;\n      }\n      if (s2 > target - tolerance) {\n        t1 = t2;\n        break;\n      }\n      var s1 = separationFunction.evaluate(t1);\n      if (s1 < target - tolerance) {\n        output2.state = TOIOutputState.e_failed;\n        output2.t = t1;\n        done = true;\n        break;\n      }\n      if (s1 <= target + tolerance) {\n        output2.state = TOIOutputState.e_touching;\n        output2.t = t1;\n        done = true;\n        break;\n      }\n      var rootIterCount = 0;\n      var a1 = t1;\n      var a2 = t2;\n      while (true) {\n        var t = void 0;\n        if (rootIterCount & 1) {\n          t = a1 + (target - s1) * (a2 - a1) / (s2 - s1);\n        } else {\n          t = 0.5 * (a1 + a2);\n        }\n        ++rootIterCount;\n        ++stats.toiRootIters;\n        var s3 = separationFunction.evaluate(t);\n        if (math_abs$7(s3 - target) < tolerance) {\n          t2 = t;\n          break;\n        }\n        if (s3 > target) {\n          a1 = t;\n          s1 = s3;\n        } else {\n          a2 = t;\n          s2 = s3;\n        }\n        if (rootIterCount === 50) {\n          break;\n        }\n      }\n      stats.toiMaxRootIters = math_max$3(stats.toiMaxRootIters, rootIterCount);\n      ++pushBackIter;\n      if (pushBackIter === SettingsInternal.maxPolygonVertices) {\n        break;\n      }\n    }\n    ++iter;\n    ++stats.toiIters;\n    if (done) {\n      break;\n    }\n    if (iter === k_maxIterations) {\n      output2.state = TOIOutputState.e_failed;\n      output2.t = t1;\n      break;\n    }\n  }\n  stats.toiMaxIters = math_max$3(stats.toiMaxIters, iter);\n  var time = Timer.diff(timer);\n  stats.toiMaxTime = math_max$3(stats.toiMaxTime, time);\n  stats.toiTime += time;\n  separationFunction.recycle();\n};\nvar SeparationFunctionType;\n(function(SeparationFunctionType2) {\n  SeparationFunctionType2[SeparationFunctionType2[\"e_unset\"] = -1] = \"e_unset\";\n  SeparationFunctionType2[SeparationFunctionType2[\"e_points\"] = 1] = \"e_points\";\n  SeparationFunctionType2[SeparationFunctionType2[\"e_faceA\"] = 2] = \"e_faceA\";\n  SeparationFunctionType2[SeparationFunctionType2[\"e_faceB\"] = 3] = \"e_faceB\";\n})(SeparationFunctionType || (SeparationFunctionType = {}));\nvar SeparationFunction = (\n  /** @class */\n  function() {\n    function SeparationFunction2() {\n      this.m_proxyA = null;\n      this.m_proxyB = null;\n      this.m_sweepA = null;\n      this.m_sweepB = null;\n      this.m_type = SeparationFunctionType.e_unset;\n      this.m_localPoint = vec2(0, 0);\n      this.m_axis = vec2(0, 0);\n      this.indexA = -1;\n      this.indexB = -1;\n    }\n    SeparationFunction2.prototype.recycle = function() {\n      this.m_proxyA = null;\n      this.m_proxyB = null;\n      this.m_sweepA = null;\n      this.m_sweepB = null;\n      this.m_type = SeparationFunctionType.e_unset;\n      zeroVec2(this.m_localPoint);\n      zeroVec2(this.m_axis);\n      this.indexA = -1;\n      this.indexB = -1;\n    };\n    SeparationFunction2.prototype.initialize = function(cache2, proxyA, sweepA, proxyB, sweepB, t1) {\n      var count = cache2.count;\n      this.m_proxyA = proxyA;\n      this.m_proxyB = proxyB;\n      this.m_sweepA = sweepA;\n      this.m_sweepB = sweepB;\n      this.m_sweepA.getTransform(xfA$1, t1);\n      this.m_sweepB.getTransform(xfB$1, t1);\n      if (count === 1) {\n        this.m_type = SeparationFunctionType.e_points;\n        var localPointA_1 = this.m_proxyA.getVertex(cache2.indexA[0]);\n        var localPointB_1 = this.m_proxyB.getVertex(cache2.indexB[0]);\n        transformVec2(pointA$2, xfA$1, localPointA_1);\n        transformVec2(pointB$2, xfB$1, localPointB_1);\n        subVec2(this.m_axis, pointB$2, pointA$2);\n        var s2 = normalizeVec2Length(this.m_axis);\n        return s2;\n      } else if (cache2.indexA[0] === cache2.indexA[1]) {\n        this.m_type = SeparationFunctionType.e_faceB;\n        var localPointB1 = proxyB.getVertex(cache2.indexB[0]);\n        var localPointB2 = proxyB.getVertex(cache2.indexB[1]);\n        crossVec2Num(this.m_axis, subVec2(temp$4, localPointB2, localPointB1), 1);\n        normalizeVec2(this.m_axis);\n        rotVec2(normal$3, xfB$1.q, this.m_axis);\n        combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2);\n        transformVec2(pointB$2, xfB$1, this.m_localPoint);\n        var localPointA_2 = proxyA.getVertex(cache2.indexA[0]);\n        var pointA_1 = Transform.mulVec2(xfA$1, localPointA_2);\n        var s2 = dotVec2(pointA_1, normal$3) - dotVec2(pointB$2, normal$3);\n        if (s2 < 0) {\n          negVec2(this.m_axis);\n          s2 = -s2;\n        }\n        return s2;\n      } else {\n        this.m_type = SeparationFunctionType.e_faceA;\n        var localPointA1 = this.m_proxyA.getVertex(cache2.indexA[0]);\n        var localPointA2 = this.m_proxyA.getVertex(cache2.indexA[1]);\n        crossVec2Num(this.m_axis, subVec2(temp$4, localPointA2, localPointA1), 1);\n        normalizeVec2(this.m_axis);\n        rotVec2(normal$3, xfA$1.q, this.m_axis);\n        combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2);\n        transformVec2(pointA$2, xfA$1, this.m_localPoint);\n        var localPointB_2 = this.m_proxyB.getVertex(cache2.indexB[0]);\n        transformVec2(pointB$2, xfB$1, localPointB_2);\n        var s2 = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3);\n        if (s2 < 0) {\n          negVec2(this.m_axis);\n          s2 = -s2;\n        }\n        return s2;\n      }\n    };\n    SeparationFunction2.prototype.compute = function(find, t) {\n      this.m_sweepA.getTransform(xfA$1, t);\n      this.m_sweepB.getTransform(xfB$1, t);\n      switch (this.m_type) {\n        case SeparationFunctionType.e_points: {\n          if (find) {\n            derotVec2(axisA, xfA$1.q, this.m_axis);\n            derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, this.m_axis));\n            this.indexA = this.m_proxyA.getSupport(axisA);\n            this.indexB = this.m_proxyB.getSupport(axisB);\n          }\n          copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n          copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n          transformVec2(pointA$2, xfA$1, localPointA);\n          transformVec2(pointB$2, xfB$1, localPointB);\n          var sep = dotVec2(pointB$2, this.m_axis) - dotVec2(pointA$2, this.m_axis);\n          return sep;\n        }\n        case SeparationFunctionType.e_faceA: {\n          rotVec2(normal$3, xfA$1.q, this.m_axis);\n          transformVec2(pointA$2, xfA$1, this.m_localPoint);\n          if (find) {\n            derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, normal$3));\n            this.indexA = -1;\n            this.indexB = this.m_proxyB.getSupport(axisB);\n          }\n          copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n          transformVec2(pointB$2, xfB$1, localPointB);\n          var sep = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3);\n          return sep;\n        }\n        case SeparationFunctionType.e_faceB: {\n          rotVec2(normal$3, xfB$1.q, this.m_axis);\n          transformVec2(pointB$2, xfB$1, this.m_localPoint);\n          if (find) {\n            derotVec2(axisA, xfA$1.q, scaleVec2(temp$4, -1, normal$3));\n            this.indexB = -1;\n            this.indexA = this.m_proxyA.getSupport(axisA);\n          }\n          copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n          transformVec2(pointA$2, xfA$1, localPointA);\n          var sep = dotVec2(pointA$2, normal$3) - dotVec2(pointB$2, normal$3);\n          return sep;\n        }\n        default:\n          if (find) {\n            this.indexA = -1;\n            this.indexB = -1;\n          }\n          return 0;\n      }\n    };\n    SeparationFunction2.prototype.findMinSeparation = function(t) {\n      return this.compute(true, t);\n    };\n    SeparationFunction2.prototype.evaluate = function(t) {\n      return this.compute(false, t);\n    };\n    return SeparationFunction2;\n  }()\n);\nvar separationFunction = new SeparationFunction();\nTimeOfImpact.Input = TOIInput;\nTimeOfImpact.Output = TOIOutput;\nvar math_abs$6 = Math.abs;\nvar math_sqrt$3 = Math.sqrt;\nvar math_min$5 = Math.min;\nvar TimeStep = (\n  /** @class */\n  function() {\n    function TimeStep2() {\n      this.dt = 0;\n      this.inv_dt = 0;\n      this.velocityIterations = 0;\n      this.positionIterations = 0;\n      this.warmStarting = false;\n      this.blockSolve = true;\n      this.inv_dt0 = 0;\n      this.dtRatio = 1;\n    }\n    TimeStep2.prototype.reset = function(dt) {\n      if (this.dt > 0) {\n        this.inv_dt0 = this.inv_dt;\n      }\n      this.dt = dt;\n      this.inv_dt = dt == 0 ? 0 : 1 / dt;\n      this.dtRatio = dt * this.inv_dt0;\n    };\n    return TimeStep2;\n  }()\n);\nvar s_subStep = new TimeStep();\nvar c = vec2(0, 0);\nvar v = vec2(0, 0);\nvar translation = vec2(0, 0);\nvar input = new TOIInput();\nvar output = new TOIOutput();\nvar backup = new Sweep();\nvar backup1 = new Sweep();\nvar backup2 = new Sweep();\nvar ContactImpulse = (\n  /** @class */\n  function() {\n    function ContactImpulse2(contact) {\n      this.contact = contact;\n      this.normals = [];\n      this.tangents = [];\n    }\n    ContactImpulse2.prototype.recycle = function() {\n      this.normals.length = 0;\n      this.tangents.length = 0;\n    };\n    Object.defineProperty(ContactImpulse2.prototype, \"normalImpulses\", {\n      get: function() {\n        var contact = this.contact;\n        var normals = this.normals;\n        normals.length = 0;\n        for (var p = 0; p < contact.v_points.length; ++p) {\n          normals.push(contact.v_points[p].normalImpulse);\n        }\n        return normals;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(ContactImpulse2.prototype, \"tangentImpulses\", {\n      get: function() {\n        var contact = this.contact;\n        var tangents = this.tangents;\n        tangents.length = 0;\n        for (var p = 0; p < contact.v_points.length; ++p) {\n          tangents.push(contact.v_points[p].tangentImpulse);\n        }\n        return tangents;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    return ContactImpulse2;\n  }()\n);\nvar Solver = (\n  /** @class */\n  function() {\n    function Solver2(world) {\n      this.m_world = world;\n      this.m_stack = [];\n      this.m_bodies = [];\n      this.m_contacts = [];\n      this.m_joints = [];\n    }\n    Solver2.prototype.clear = function() {\n      this.m_stack.length = 0;\n      this.m_bodies.length = 0;\n      this.m_contacts.length = 0;\n      this.m_joints.length = 0;\n    };\n    Solver2.prototype.addBody = function(body) {\n      this.m_bodies.push(body);\n    };\n    Solver2.prototype.addContact = function(contact) {\n      this.m_contacts.push(contact);\n    };\n    Solver2.prototype.addJoint = function(joint) {\n      this.m_joints.push(joint);\n    };\n    Solver2.prototype.solveWorld = function(step) {\n      var world = this.m_world;\n      for (var b2 = world.m_bodyList; b2; b2 = b2.m_next) {\n        b2.m_islandFlag = false;\n      }\n      for (var c_1 = world.m_contactList; c_1; c_1 = c_1.m_next) {\n        c_1.m_islandFlag = false;\n      }\n      for (var j = world.m_jointList; j; j = j.m_next) {\n        j.m_islandFlag = false;\n      }\n      var stack = this.m_stack;\n      for (var seed = world.m_bodyList; seed; seed = seed.m_next) {\n        if (seed.m_islandFlag) {\n          continue;\n        }\n        if (seed.isAwake() == false || seed.isActive() == false) {\n          continue;\n        }\n        if (seed.isStatic()) {\n          continue;\n        }\n        this.clear();\n        stack.push(seed);\n        seed.m_islandFlag = true;\n        while (stack.length > 0) {\n          var b2 = stack.pop();\n          this.addBody(b2);\n          b2.m_awakeFlag = true;\n          if (b2.isStatic()) {\n            continue;\n          }\n          for (var ce = b2.m_contactList; ce; ce = ce.next) {\n            var contact = ce.contact;\n            if (contact.m_islandFlag) {\n              continue;\n            }\n            if (contact.isEnabled() == false || contact.isTouching() == false) {\n              continue;\n            }\n            var sensorA = contact.m_fixtureA.m_isSensor;\n            var sensorB = contact.m_fixtureB.m_isSensor;\n            if (sensorA || sensorB) {\n              continue;\n            }\n            this.addContact(contact);\n            contact.m_islandFlag = true;\n            var other = ce.other;\n            if (other.m_islandFlag) {\n              continue;\n            }\n            stack.push(other);\n            other.m_islandFlag = true;\n          }\n          for (var je = b2.m_jointList; je; je = je.next) {\n            if (je.joint.m_islandFlag == true) {\n              continue;\n            }\n            var other = je.other;\n            if (other.isActive() == false) {\n              continue;\n            }\n            this.addJoint(je.joint);\n            je.joint.m_islandFlag = true;\n            if (other.m_islandFlag) {\n              continue;\n            }\n            stack.push(other);\n            other.m_islandFlag = true;\n          }\n        }\n        this.solveIsland(step);\n        for (var i = 0; i < this.m_bodies.length; ++i) {\n          var b2 = this.m_bodies[i];\n          if (b2.isStatic()) {\n            b2.m_islandFlag = false;\n          }\n        }\n      }\n    };\n    Solver2.prototype.solveIsland = function(step) {\n      var world = this.m_world;\n      var gravity = world.m_gravity;\n      var allowSleep = world.m_allowSleep;\n      var h = step.dt;\n      for (var i = 0; i < this.m_bodies.length; ++i) {\n        var body = this.m_bodies[i];\n        copyVec2(c, body.m_sweep.c);\n        var a2 = body.m_sweep.a;\n        copyVec2(v, body.m_linearVelocity);\n        var w = body.m_angularVelocity;\n        copyVec2(body.m_sweep.c0, body.m_sweep.c);\n        body.m_sweep.a0 = body.m_sweep.a;\n        if (body.isDynamic()) {\n          plusScaleVec2(v, h * body.m_gravityScale, gravity);\n          plusScaleVec2(v, h * body.m_invMass, body.m_force);\n          w += h * body.m_invI * body.m_torque;\n          scaleVec2(v, 1 / (1 + h * body.m_linearDamping), v);\n          w *= 1 / (1 + h * body.m_angularDamping);\n        }\n        copyVec2(body.c_position.c, c);\n        body.c_position.a = a2;\n        copyVec2(body.c_velocity.v, v);\n        body.c_velocity.w = w;\n      }\n      for (var i = 0; i < this.m_contacts.length; ++i) {\n        var contact = this.m_contacts[i];\n        contact.initConstraint(step);\n      }\n      for (var i = 0; i < this.m_contacts.length; ++i) {\n        var contact = this.m_contacts[i];\n        contact.initVelocityConstraint(step);\n      }\n      if (step.warmStarting) {\n        for (var i = 0; i < this.m_contacts.length; ++i) {\n          var contact = this.m_contacts[i];\n          contact.warmStartConstraint(step);\n        }\n      }\n      for (var i = 0; i < this.m_joints.length; ++i) {\n        var joint = this.m_joints[i];\n        joint.initVelocityConstraints(step);\n      }\n      for (var i = 0; i < step.velocityIterations; ++i) {\n        for (var j = 0; j < this.m_joints.length; ++j) {\n          var joint = this.m_joints[j];\n          joint.solveVelocityConstraints(step);\n        }\n        for (var j = 0; j < this.m_contacts.length; ++j) {\n          var contact = this.m_contacts[j];\n          contact.solveVelocityConstraint(step);\n        }\n      }\n      for (var i = 0; i < this.m_contacts.length; ++i) {\n        var contact = this.m_contacts[i];\n        contact.storeConstraintImpulses(step);\n      }\n      for (var i = 0; i < this.m_bodies.length; ++i) {\n        var body = this.m_bodies[i];\n        copyVec2(c, body.c_position.c);\n        var a2 = body.c_position.a;\n        copyVec2(v, body.c_velocity.v);\n        var w = body.c_velocity.w;\n        scaleVec2(translation, h, v);\n        var translationLengthSqr = lengthSqrVec2(translation);\n        if (translationLengthSqr > SettingsInternal.maxTranslationSquared) {\n          var ratio = SettingsInternal.maxTranslation / math_sqrt$3(translationLengthSqr);\n          mulVec2(v, ratio);\n        }\n        var rotation2 = h * w;\n        if (rotation2 * rotation2 > SettingsInternal.maxRotationSquared) {\n          var ratio = SettingsInternal.maxRotation / math_abs$6(rotation2);\n          w *= ratio;\n        }\n        plusScaleVec2(c, h, v);\n        a2 += h * w;\n        copyVec2(body.c_position.c, c);\n        body.c_position.a = a2;\n        copyVec2(body.c_velocity.v, v);\n        body.c_velocity.w = w;\n      }\n      var positionSolved = false;\n      for (var i = 0; i < step.positionIterations; ++i) {\n        var minSeparation = 0;\n        for (var j = 0; j < this.m_contacts.length; ++j) {\n          var contact = this.m_contacts[j];\n          var separation = contact.solvePositionConstraint(step);\n          minSeparation = math_min$5(minSeparation, separation);\n        }\n        var contactsOkay = minSeparation >= -3 * SettingsInternal.linearSlop;\n        var jointsOkay = true;\n        for (var j = 0; j < this.m_joints.length; ++j) {\n          var joint = this.m_joints[j];\n          var jointOkay = joint.solvePositionConstraints(step);\n          jointsOkay = jointsOkay && jointOkay;\n        }\n        if (contactsOkay && jointsOkay) {\n          positionSolved = true;\n          break;\n        }\n      }\n      for (var i = 0; i < this.m_bodies.length; ++i) {\n        var body = this.m_bodies[i];\n        copyVec2(body.m_sweep.c, body.c_position.c);\n        body.m_sweep.a = body.c_position.a;\n        copyVec2(body.m_linearVelocity, body.c_velocity.v);\n        body.m_angularVelocity = body.c_velocity.w;\n        body.synchronizeTransform();\n      }\n      this.postSolveIsland();\n      if (allowSleep) {\n        var minSleepTime = Infinity;\n        var linTolSqr = SettingsInternal.linearSleepToleranceSqr;\n        var angTolSqr = SettingsInternal.angularSleepToleranceSqr;\n        for (var i = 0; i < this.m_bodies.length; ++i) {\n          var body = this.m_bodies[i];\n          if (body.isStatic()) {\n            continue;\n          }\n          if (body.m_autoSleepFlag == false || body.m_angularVelocity * body.m_angularVelocity > angTolSqr || lengthSqrVec2(body.m_linearVelocity) > linTolSqr) {\n            body.m_sleepTime = 0;\n            minSleepTime = 0;\n          } else {\n            body.m_sleepTime += h;\n            minSleepTime = math_min$5(minSleepTime, body.m_sleepTime);\n          }\n        }\n        if (minSleepTime >= SettingsInternal.timeToSleep && positionSolved) {\n          for (var i = 0; i < this.m_bodies.length; ++i) {\n            var body = this.m_bodies[i];\n            body.setAwake(false);\n          }\n        }\n      }\n    };\n    Solver2.prototype.solveWorldTOI = function(step) {\n      var world = this.m_world;\n      if (world.m_stepComplete) {\n        for (var b2 = world.m_bodyList; b2; b2 = b2.m_next) {\n          b2.m_islandFlag = false;\n          b2.m_sweep.alpha0 = 0;\n        }\n        for (var c_2 = world.m_contactList; c_2; c_2 = c_2.m_next) {\n          c_2.m_toiFlag = false;\n          c_2.m_islandFlag = false;\n          c_2.m_toiCount = 0;\n          c_2.m_toi = 1;\n        }\n      }\n      while (true) {\n        var minContact = null;\n        var minAlpha = 1;\n        for (var c_3 = world.m_contactList; c_3; c_3 = c_3.m_next) {\n          if (c_3.isEnabled() == false) {\n            continue;\n          }\n          if (c_3.m_toiCount > SettingsInternal.maxSubSteps) {\n            continue;\n          }\n          var alpha = 1;\n          if (c_3.m_toiFlag) {\n            alpha = c_3.m_toi;\n          } else {\n            var fA_1 = c_3.getFixtureA();\n            var fB_1 = c_3.getFixtureB();\n            if (fA_1.isSensor() || fB_1.isSensor()) {\n              continue;\n            }\n            var bA_1 = fA_1.getBody();\n            var bB_1 = fB_1.getBody();\n            var activeA = bA_1.isAwake() && !bA_1.isStatic();\n            var activeB = bB_1.isAwake() && !bB_1.isStatic();\n            if (activeA == false && activeB == false) {\n              continue;\n            }\n            var collideA = bA_1.isBullet() || !bA_1.isDynamic();\n            var collideB = bB_1.isBullet() || !bB_1.isDynamic();\n            if (collideA == false && collideB == false) {\n              continue;\n            }\n            var alpha0 = bA_1.m_sweep.alpha0;\n            if (bA_1.m_sweep.alpha0 < bB_1.m_sweep.alpha0) {\n              alpha0 = bB_1.m_sweep.alpha0;\n              bA_1.m_sweep.advance(alpha0);\n            } else if (bB_1.m_sweep.alpha0 < bA_1.m_sweep.alpha0) {\n              alpha0 = bA_1.m_sweep.alpha0;\n              bB_1.m_sweep.advance(alpha0);\n            }\n            var indexA = c_3.getChildIndexA();\n            var indexB = c_3.getChildIndexB();\n            input.proxyA.set(fA_1.getShape(), indexA);\n            input.proxyB.set(fB_1.getShape(), indexB);\n            input.sweepA.set(bA_1.m_sweep);\n            input.sweepB.set(bB_1.m_sweep);\n            input.tMax = 1;\n            TimeOfImpact(output, input);\n            var beta = output.t;\n            if (output.state == TOIOutputState.e_touching) {\n              alpha = math_min$5(alpha0 + (1 - alpha0) * beta, 1);\n            } else {\n              alpha = 1;\n            }\n            c_3.m_toi = alpha;\n            c_3.m_toiFlag = true;\n          }\n          if (alpha < minAlpha) {\n            minContact = c_3;\n            minAlpha = alpha;\n          }\n        }\n        if (minContact == null || 1 - 10 * EPSILON < minAlpha) {\n          world.m_stepComplete = true;\n          break;\n        }\n        var fA = minContact.getFixtureA();\n        var fB = minContact.getFixtureB();\n        var bA = fA.getBody();\n        var bB = fB.getBody();\n        backup1.set(bA.m_sweep);\n        backup2.set(bB.m_sweep);\n        bA.advance(minAlpha);\n        bB.advance(minAlpha);\n        minContact.update(world);\n        minContact.m_toiFlag = false;\n        ++minContact.m_toiCount;\n        if (minContact.isEnabled() == false || minContact.isTouching() == false) {\n          minContact.setEnabled(false);\n          bA.m_sweep.set(backup1);\n          bB.m_sweep.set(backup2);\n          bA.synchronizeTransform();\n          bB.synchronizeTransform();\n          continue;\n        }\n        bA.setAwake(true);\n        bB.setAwake(true);\n        this.clear();\n        this.addBody(bA);\n        this.addBody(bB);\n        this.addContact(minContact);\n        bA.m_islandFlag = true;\n        bB.m_islandFlag = true;\n        minContact.m_islandFlag = true;\n        var bodies = [bA, bB];\n        for (var i = 0; i < bodies.length; ++i) {\n          var body = bodies[i];\n          if (body.isDynamic()) {\n            for (var ce = body.m_contactList; ce; ce = ce.next) {\n              var contact = ce.contact;\n              if (contact.m_islandFlag) {\n                continue;\n              }\n              var other = ce.other;\n              if (other.isDynamic() && !body.isBullet() && !other.isBullet()) {\n                continue;\n              }\n              var sensorA = contact.m_fixtureA.m_isSensor;\n              var sensorB = contact.m_fixtureB.m_isSensor;\n              if (sensorA || sensorB) {\n                continue;\n              }\n              backup.set(other.m_sweep);\n              if (other.m_islandFlag == false) {\n                other.advance(minAlpha);\n              }\n              contact.update(world);\n              if (contact.isEnabled() == false || contact.isTouching() == false) {\n                other.m_sweep.set(backup);\n                other.synchronizeTransform();\n                continue;\n              }\n              contact.m_islandFlag = true;\n              this.addContact(contact);\n              if (other.m_islandFlag) {\n                continue;\n              }\n              other.m_islandFlag = true;\n              if (!other.isStatic()) {\n                other.setAwake(true);\n              }\n              this.addBody(other);\n            }\n          }\n        }\n        s_subStep.reset((1 - minAlpha) * step.dt);\n        s_subStep.dtRatio = 1;\n        s_subStep.positionIterations = 20;\n        s_subStep.velocityIterations = step.velocityIterations;\n        s_subStep.warmStarting = false;\n        this.solveIslandTOI(s_subStep, bA, bB);\n        for (var i = 0; i < this.m_bodies.length; ++i) {\n          var body = this.m_bodies[i];\n          body.m_islandFlag = false;\n          if (!body.isDynamic()) {\n            continue;\n          }\n          body.synchronizeFixtures();\n          for (var ce = body.m_contactList; ce; ce = ce.next) {\n            ce.contact.m_toiFlag = false;\n            ce.contact.m_islandFlag = false;\n          }\n        }\n        world.findNewContacts();\n        if (world.m_subStepping) {\n          world.m_stepComplete = false;\n          break;\n        }\n      }\n    };\n    Solver2.prototype.solveIslandTOI = function(subStep, toiA, toiB) {\n      for (var i = 0; i < this.m_bodies.length; ++i) {\n        var body = this.m_bodies[i];\n        copyVec2(body.c_position.c, body.m_sweep.c);\n        body.c_position.a = body.m_sweep.a;\n        copyVec2(body.c_velocity.v, body.m_linearVelocity);\n        body.c_velocity.w = body.m_angularVelocity;\n      }\n      for (var i = 0; i < this.m_contacts.length; ++i) {\n        var contact = this.m_contacts[i];\n        contact.initConstraint(subStep);\n      }\n      for (var i = 0; i < subStep.positionIterations; ++i) {\n        var minSeparation = 0;\n        for (var j = 0; j < this.m_contacts.length; ++j) {\n          var contact = this.m_contacts[j];\n          var separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB);\n          minSeparation = math_min$5(minSeparation, separation);\n        }\n        var contactsOkay = minSeparation >= -1.5 * SettingsInternal.linearSlop;\n        if (contactsOkay) {\n          break;\n        }\n      }\n      var i;\n      copyVec2(toiA.m_sweep.c0, toiA.c_position.c);\n      toiA.m_sweep.a0 = toiA.c_position.a;\n      copyVec2(toiB.m_sweep.c0, toiB.c_position.c);\n      toiB.m_sweep.a0 = toiB.c_position.a;\n      for (var i = 0; i < this.m_contacts.length; ++i) {\n        var contact = this.m_contacts[i];\n        contact.initVelocityConstraint(subStep);\n      }\n      for (var i = 0; i < subStep.velocityIterations; ++i) {\n        for (var j = 0; j < this.m_contacts.length; ++j) {\n          var contact = this.m_contacts[j];\n          contact.solveVelocityConstraint(subStep);\n        }\n      }\n      var h = subStep.dt;\n      for (var i = 0; i < this.m_bodies.length; ++i) {\n        var body = this.m_bodies[i];\n        copyVec2(c, body.c_position.c);\n        var a2 = body.c_position.a;\n        copyVec2(v, body.c_velocity.v);\n        var w = body.c_velocity.w;\n        scaleVec2(translation, h, v);\n        var translationLengthSqr = lengthSqrVec2(translation);\n        if (translationLengthSqr > SettingsInternal.maxTranslationSquared) {\n          var ratio = SettingsInternal.maxTranslation / math_sqrt$3(translationLengthSqr);\n          mulVec2(v, ratio);\n        }\n        var rotation2 = h * w;\n        if (rotation2 * rotation2 > SettingsInternal.maxRotationSquared) {\n          var ratio = SettingsInternal.maxRotation / math_abs$6(rotation2);\n          w *= ratio;\n        }\n        plusScaleVec2(c, h, v);\n        a2 += h * w;\n        copyVec2(body.c_position.c, c);\n        body.c_position.a = a2;\n        copyVec2(body.c_velocity.v, v);\n        body.c_velocity.w = w;\n        copyVec2(body.m_sweep.c, c);\n        body.m_sweep.a = a2;\n        copyVec2(body.m_linearVelocity, v);\n        body.m_angularVelocity = w;\n        body.synchronizeTransform();\n      }\n      this.postSolveIsland();\n    };\n    Solver2.prototype.postSolveIsland = function() {\n      for (var c_5 = 0; c_5 < this.m_contacts.length; ++c_5) {\n        var contact = this.m_contacts[c_5];\n        this.m_world.postSolve(contact, contact.m_impulse);\n      }\n    };\n    return Solver2;\n  }()\n);\nSolver.TimeStep = TimeStep;\nvar Mat22 = (\n  /** @class */\n  function() {\n    function Mat222(a2, b2, c2, d2) {\n      if (typeof a2 === \"object\" && a2 !== null) {\n        this.ex = Vec2.clone(a2);\n        this.ey = Vec2.clone(b2);\n      } else if (typeof a2 === \"number\") {\n        this.ex = Vec2.neo(a2, c2);\n        this.ey = Vec2.neo(b2, d2);\n      } else {\n        this.ex = Vec2.zero();\n        this.ey = Vec2.zero();\n      }\n    }\n    Mat222.prototype.toString = function() {\n      return JSON.stringify(this);\n    };\n    Mat222.isValid = function(obj) {\n      if (obj === null || typeof obj === \"undefined\") {\n        return false;\n      }\n      return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey);\n    };\n    Mat222.assert = function(o) {\n    };\n    Mat222.prototype.set = function(a2, b2, c2, d2) {\n      if (typeof a2 === \"number\" && typeof b2 === \"number\" && typeof c2 === \"number\" && typeof d2 === \"number\") {\n        this.ex.setNum(a2, c2);\n        this.ey.setNum(b2, d2);\n      } else if (typeof a2 === \"object\" && typeof b2 === \"object\") {\n        this.ex.setVec2(a2);\n        this.ey.setVec2(b2);\n      } else if (typeof a2 === \"object\") {\n        this.ex.setVec2(a2.ex);\n        this.ey.setVec2(a2.ey);\n      } else ;\n    };\n    Mat222.prototype.setIdentity = function() {\n      this.ex.x = 1;\n      this.ey.x = 0;\n      this.ex.y = 0;\n      this.ey.y = 1;\n    };\n    Mat222.prototype.setZero = function() {\n      this.ex.x = 0;\n      this.ey.x = 0;\n      this.ex.y = 0;\n      this.ey.y = 0;\n    };\n    Mat222.prototype.getInverse = function() {\n      var a2 = this.ex.x;\n      var b2 = this.ey.x;\n      var c2 = this.ex.y;\n      var d2 = this.ey.y;\n      var det = a2 * d2 - b2 * c2;\n      if (det !== 0) {\n        det = 1 / det;\n      }\n      var imx = new Mat222();\n      imx.ex.x = det * d2;\n      imx.ey.x = -det * b2;\n      imx.ex.y = -det * c2;\n      imx.ey.y = det * a2;\n      return imx;\n    };\n    Mat222.prototype.solve = function(v3) {\n      var a2 = this.ex.x;\n      var b2 = this.ey.x;\n      var c2 = this.ex.y;\n      var d2 = this.ey.y;\n      var det = a2 * d2 - b2 * c2;\n      if (det !== 0) {\n        det = 1 / det;\n      }\n      var w = Vec2.zero();\n      w.x = det * (d2 * v3.x - b2 * v3.y);\n      w.y = det * (a2 * v3.y - c2 * v3.x);\n      return w;\n    };\n    Mat222.mul = function(mx, v3) {\n      if (v3 && \"x\" in v3 && \"y\" in v3) {\n        var x2 = mx.ex.x * v3.x + mx.ey.x * v3.y;\n        var y = mx.ex.y * v3.x + mx.ey.y * v3.y;\n        return Vec2.neo(x2, y);\n      } else if (v3 && \"ex\" in v3 && \"ey\" in v3) {\n        var a2 = mx.ex.x * v3.ex.x + mx.ey.x * v3.ex.y;\n        var b2 = mx.ex.x * v3.ey.x + mx.ey.x * v3.ey.y;\n        var c2 = mx.ex.y * v3.ex.x + mx.ey.y * v3.ex.y;\n        var d2 = mx.ex.y * v3.ey.x + mx.ey.y * v3.ey.y;\n        return new Mat222(a2, b2, c2, d2);\n      }\n    };\n    Mat222.mulVec2 = function(mx, v3) {\n      var x2 = mx.ex.x * v3.x + mx.ey.x * v3.y;\n      var y = mx.ex.y * v3.x + mx.ey.y * v3.y;\n      return Vec2.neo(x2, y);\n    };\n    Mat222.mulMat22 = function(mx, v3) {\n      var a2 = mx.ex.x * v3.ex.x + mx.ey.x * v3.ex.y;\n      var b2 = mx.ex.x * v3.ey.x + mx.ey.x * v3.ey.y;\n      var c2 = mx.ex.y * v3.ex.x + mx.ey.y * v3.ex.y;\n      var d2 = mx.ex.y * v3.ey.x + mx.ey.y * v3.ey.y;\n      return new Mat222(a2, b2, c2, d2);\n    };\n    Mat222.mulT = function(mx, v3) {\n      if (v3 && \"x\" in v3 && \"y\" in v3) {\n        return Vec2.neo(Vec2.dot(v3, mx.ex), Vec2.dot(v3, mx.ey));\n      } else if (v3 && \"ex\" in v3 && \"ey\" in v3) {\n        var c1 = Vec2.neo(Vec2.dot(mx.ex, v3.ex), Vec2.dot(mx.ey, v3.ex));\n        var c2 = Vec2.neo(Vec2.dot(mx.ex, v3.ey), Vec2.dot(mx.ey, v3.ey));\n        return new Mat222(c1, c2);\n      }\n    };\n    Mat222.mulTVec2 = function(mx, v3) {\n      return Vec2.neo(Vec2.dot(v3, mx.ex), Vec2.dot(v3, mx.ey));\n    };\n    Mat222.mulTMat22 = function(mx, v3) {\n      var c1 = Vec2.neo(Vec2.dot(mx.ex, v3.ex), Vec2.dot(mx.ey, v3.ex));\n      var c2 = Vec2.neo(Vec2.dot(mx.ex, v3.ey), Vec2.dot(mx.ey, v3.ey));\n      return new Mat222(c1, c2);\n    };\n    Mat222.abs = function(mx) {\n      return new Mat222(Vec2.abs(mx.ex), Vec2.abs(mx.ey));\n    };\n    Mat222.add = function(mx1, mx2) {\n      return new Mat222(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey));\n    };\n    return Mat222;\n  }()\n);\nvar math_sqrt$2 = Math.sqrt;\nvar pointA$1 = vec2(0, 0);\nvar pointB$1 = vec2(0, 0);\nvar temp$3 = vec2(0, 0);\nvar cA$1 = vec2(0, 0);\nvar cB$1 = vec2(0, 0);\nvar dist = vec2(0, 0);\nvar planePoint$2 = vec2(0, 0);\nvar clipPoint$1 = vec2(0, 0);\nvar ManifoldType;\n(function(ManifoldType2) {\n  ManifoldType2[ManifoldType2[\"e_unset\"] = -1] = \"e_unset\";\n  ManifoldType2[ManifoldType2[\"e_circles\"] = 0] = \"e_circles\";\n  ManifoldType2[ManifoldType2[\"e_faceA\"] = 1] = \"e_faceA\";\n  ManifoldType2[ManifoldType2[\"e_faceB\"] = 2] = \"e_faceB\";\n})(ManifoldType || (ManifoldType = {}));\nvar ContactFeatureType;\n(function(ContactFeatureType2) {\n  ContactFeatureType2[ContactFeatureType2[\"e_unset\"] = -1] = \"e_unset\";\n  ContactFeatureType2[ContactFeatureType2[\"e_vertex\"] = 0] = \"e_vertex\";\n  ContactFeatureType2[ContactFeatureType2[\"e_face\"] = 1] = \"e_face\";\n})(ContactFeatureType || (ContactFeatureType = {}));\nvar PointState;\n(function(PointState2) {\n  PointState2[PointState2[\"nullState\"] = 0] = \"nullState\";\n  PointState2[PointState2[\"addState\"] = 1] = \"addState\";\n  PointState2[PointState2[\"persistState\"] = 2] = \"persistState\";\n  PointState2[PointState2[\"removeState\"] = 3] = \"removeState\";\n})(PointState || (PointState = {}));\nvar ClipVertex = (\n  /** @class */\n  function() {\n    function ClipVertex2() {\n      this.v = vec2(0, 0);\n      this.id = new ContactID();\n    }\n    ClipVertex2.prototype.set = function(o) {\n      copyVec2(this.v, o.v);\n      this.id.set(o.id);\n    };\n    ClipVertex2.prototype.recycle = function() {\n      zeroVec2(this.v);\n      this.id.recycle();\n    };\n    return ClipVertex2;\n  }()\n);\nvar Manifold = (\n  /** @class */\n  function() {\n    function Manifold2() {\n      this.localNormal = vec2(0, 0);\n      this.localPoint = vec2(0, 0);\n      this.points = [new ManifoldPoint(), new ManifoldPoint()];\n      this.pointCount = 0;\n    }\n    Manifold2.prototype.set = function(that) {\n      this.type = that.type;\n      copyVec2(this.localNormal, that.localNormal);\n      copyVec2(this.localPoint, that.localPoint);\n      this.pointCount = that.pointCount;\n      this.points[0].set(that.points[0]);\n      this.points[1].set(that.points[1]);\n    };\n    Manifold2.prototype.recycle = function() {\n      this.type = ManifoldType.e_unset;\n      zeroVec2(this.localNormal);\n      zeroVec2(this.localPoint);\n      this.pointCount = 0;\n      this.points[0].recycle();\n      this.points[1].recycle();\n    };\n    Manifold2.prototype.getWorldManifold = function(wm, xfA2, radiusA, xfB2, radiusB) {\n      if (this.pointCount == 0) {\n        return wm;\n      }\n      wm = wm || new WorldManifold();\n      wm.pointCount = this.pointCount;\n      var normal3 = wm.normal;\n      var points = wm.points;\n      var separations = wm.separations;\n      switch (this.type) {\n        case ManifoldType.e_circles: {\n          setVec2(normal3, 1, 0);\n          var manifoldPoint = this.points[0];\n          transformVec2(pointA$1, xfA2, this.localPoint);\n          transformVec2(pointB$1, xfB2, manifoldPoint.localPoint);\n          subVec2(dist, pointB$1, pointA$1);\n          var lengthSqr = lengthSqrVec2(dist);\n          if (lengthSqr > EPSILON * EPSILON) {\n            var length_1 = math_sqrt$2(lengthSqr);\n            scaleVec2(normal3, 1 / length_1, dist);\n          }\n          combine2Vec2(cA$1, 1, pointA$1, radiusA, normal3);\n          combine2Vec2(cB$1, 1, pointB$1, -radiusB, normal3);\n          combine2Vec2(points[0], 0.5, cA$1, 0.5, cB$1);\n          separations[0] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal3);\n          break;\n        }\n        case ManifoldType.e_faceA: {\n          rotVec2(normal3, xfA2.q, this.localNormal);\n          transformVec2(planePoint$2, xfA2, this.localPoint);\n          for (var i = 0; i < this.pointCount; ++i) {\n            var manifoldPoint = this.points[i];\n            transformVec2(clipPoint$1, xfB2, manifoldPoint.localPoint);\n            combine2Vec2(cA$1, 1, clipPoint$1, radiusA - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal3), normal3);\n            combine2Vec2(cB$1, 1, clipPoint$1, -radiusB, normal3);\n            combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1);\n            separations[i] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal3);\n          }\n          break;\n        }\n        case ManifoldType.e_faceB: {\n          rotVec2(normal3, xfB2.q, this.localNormal);\n          transformVec2(planePoint$2, xfB2, this.localPoint);\n          for (var i = 0; i < this.pointCount; ++i) {\n            var manifoldPoint = this.points[i];\n            transformVec2(clipPoint$1, xfA2, manifoldPoint.localPoint);\n            combine2Vec2(cB$1, 1, clipPoint$1, radiusB - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal3), normal3);\n            combine2Vec2(cA$1, 1, clipPoint$1, -radiusA, normal3);\n            combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1);\n            separations[i] = dotVec2(subVec2(temp$3, cA$1, cB$1), normal3);\n          }\n          negVec2(normal3);\n          break;\n        }\n      }\n      return wm;\n    };\n    Manifold2.clipSegmentToLine = clipSegmentToLine;\n    Manifold2.ClipVertex = ClipVertex;\n    Manifold2.getPointStates = getPointStates;\n    Manifold2.PointState = PointState;\n    return Manifold2;\n  }()\n);\nvar ManifoldPoint = (\n  /** @class */\n  function() {\n    function ManifoldPoint2() {\n      this.localPoint = vec2(0, 0);\n      this.normalImpulse = 0;\n      this.tangentImpulse = 0;\n      this.id = new ContactID();\n    }\n    ManifoldPoint2.prototype.set = function(that) {\n      copyVec2(this.localPoint, that.localPoint);\n      this.normalImpulse = that.normalImpulse;\n      this.tangentImpulse = that.tangentImpulse;\n      this.id.set(that.id);\n    };\n    ManifoldPoint2.prototype.recycle = function() {\n      zeroVec2(this.localPoint);\n      this.normalImpulse = 0;\n      this.tangentImpulse = 0;\n      this.id.recycle();\n    };\n    return ManifoldPoint2;\n  }()\n);\nvar ContactID = (\n  /** @class */\n  function() {\n    function ContactID2() {\n      this.key = -1;\n      this.indexA = -1;\n      this.indexB = -1;\n      this.typeA = ContactFeatureType.e_unset;\n      this.typeB = ContactFeatureType.e_unset;\n    }\n    ContactID2.prototype.setFeatures = function(indexA, typeA, indexB, typeB) {\n      this.indexA = indexA;\n      this.indexB = indexB;\n      this.typeA = typeA;\n      this.typeB = typeB;\n      this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64;\n    };\n    ContactID2.prototype.set = function(that) {\n      this.indexA = that.indexA;\n      this.indexB = that.indexB;\n      this.typeA = that.typeA;\n      this.typeB = that.typeB;\n      this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64;\n    };\n    ContactID2.prototype.swapFeatures = function() {\n      var indexA = this.indexA;\n      var indexB = this.indexB;\n      var typeA = this.typeA;\n      var typeB = this.typeB;\n      this.indexA = indexB;\n      this.indexB = indexA;\n      this.typeA = typeB;\n      this.typeB = typeA;\n      this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64;\n    };\n    ContactID2.prototype.recycle = function() {\n      this.indexA = 0;\n      this.indexB = 0;\n      this.typeA = ContactFeatureType.e_unset;\n      this.typeB = ContactFeatureType.e_unset;\n      this.key = -1;\n    };\n    return ContactID2;\n  }()\n);\nvar WorldManifold = (\n  /** @class */\n  function() {\n    function WorldManifold2() {\n      this.normal = vec2(0, 0);\n      this.points = [vec2(0, 0), vec2(0, 0)];\n      this.separations = [0, 0];\n      this.pointCount = 0;\n    }\n    WorldManifold2.prototype.recycle = function() {\n      zeroVec2(this.normal);\n      zeroVec2(this.points[0]);\n      zeroVec2(this.points[1]);\n      this.separations[0] = 0;\n      this.separations[1] = 0;\n      this.pointCount = 0;\n    };\n    return WorldManifold2;\n  }()\n);\nfunction getPointStates(state1, state2, manifold1, manifold2) {\n  for (var i = 0; i < manifold1.pointCount; ++i) {\n    var id = manifold1.points[i].id;\n    state1[i] = PointState.removeState;\n    for (var j = 0; j < manifold2.pointCount; ++j) {\n      if (manifold2.points[j].id.key === id.key) {\n        state1[i] = PointState.persistState;\n        break;\n      }\n    }\n  }\n  for (var i = 0; i < manifold2.pointCount; ++i) {\n    var id = manifold2.points[i].id;\n    state2[i] = PointState.addState;\n    for (var j = 0; j < manifold1.pointCount; ++j) {\n      if (manifold1.points[j].id.key === id.key) {\n        state2[i] = PointState.persistState;\n        break;\n      }\n    }\n  }\n}\nfunction clipSegmentToLine(vOut, vIn, normal3, offset, vertexIndexA) {\n  var numOut = 0;\n  var distance0 = dotVec2(normal3, vIn[0].v) - offset;\n  var distance1 = dotVec2(normal3, vIn[1].v) - offset;\n  if (distance0 <= 0)\n    vOut[numOut++].set(vIn[0]);\n  if (distance1 <= 0)\n    vOut[numOut++].set(vIn[1]);\n  if (distance0 * distance1 < 0) {\n    var interp = distance0 / (distance0 - distance1);\n    combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v);\n    vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face);\n    ++numOut;\n  }\n  return numOut;\n}\nvar math_sqrt$1 = Math.sqrt;\nvar math_max$2 = Math.max;\nvar math_min$4 = Math.min;\nvar contactPool = new Pool({\n  create: function() {\n    return new Contact();\n  },\n  release: function(contact) {\n    contact.recycle();\n  }\n});\nvar oldManifold = new Manifold();\nvar worldManifold = new WorldManifold();\nvar ContactEdge = (\n  /** @class */\n  function() {\n    function ContactEdge2(contact) {\n      this.prev = null;\n      this.next = null;\n      this.other = null;\n      this.contact = contact;\n    }\n    ContactEdge2.prototype.recycle = function() {\n      this.prev = null;\n      this.next = null;\n      this.other = null;\n    };\n    return ContactEdge2;\n  }()\n);\nfunction mixFriction(friction1, friction2) {\n  return math_sqrt$1(friction1 * friction2);\n}\nfunction mixRestitution(restitution1, restitution2) {\n  return restitution1 > restitution2 ? restitution1 : restitution2;\n}\nvar s_registers = [];\nvar VelocityConstraintPoint = (\n  /** @class */\n  function() {\n    function VelocityConstraintPoint2() {\n      this.rA = vec2(0, 0);\n      this.rB = vec2(0, 0);\n      this.normalImpulse = 0;\n      this.tangentImpulse = 0;\n      this.normalMass = 0;\n      this.tangentMass = 0;\n      this.velocityBias = 0;\n    }\n    VelocityConstraintPoint2.prototype.recycle = function() {\n      zeroVec2(this.rA);\n      zeroVec2(this.rB);\n      this.normalImpulse = 0;\n      this.tangentImpulse = 0;\n      this.normalMass = 0;\n      this.tangentMass = 0;\n      this.velocityBias = 0;\n    };\n    return VelocityConstraintPoint2;\n  }()\n);\nvar cA = vec2(0, 0);\nvar vA = vec2(0, 0);\nvar cB = vec2(0, 0);\nvar vB = vec2(0, 0);\nvar tangent$1 = vec2(0, 0);\nvar xfA = transform(0, 0, 0);\nvar xfB = transform(0, 0, 0);\nvar pointA = vec2(0, 0);\nvar pointB = vec2(0, 0);\nvar clipPoint = vec2(0, 0);\nvar planePoint$1 = vec2(0, 0);\nvar rA = vec2(0, 0);\nvar rB = vec2(0, 0);\nvar P$1 = vec2(0, 0);\nvar normal$2 = vec2(0, 0);\nvar point = vec2(0, 0);\nvar dv = vec2(0, 0);\nvar dv1 = vec2(0, 0);\nvar dv2 = vec2(0, 0);\nvar b = vec2(0, 0);\nvar a = vec2(0, 0);\nvar x = vec2(0, 0);\nvar d = vec2(0, 0);\nvar P1 = vec2(0, 0);\nvar P2 = vec2(0, 0);\nvar temp$2 = vec2(0, 0);\nvar Contact = (\n  /** @class */\n  function() {\n    function Contact2() {\n      this.m_nodeA = new ContactEdge(this);\n      this.m_nodeB = new ContactEdge(this);\n      this.m_fixtureA = null;\n      this.m_fixtureB = null;\n      this.m_indexA = -1;\n      this.m_indexB = -1;\n      this.m_evaluateFcn = null;\n      this.m_manifold = new Manifold();\n      this.m_prev = null;\n      this.m_next = null;\n      this.m_toi = 1;\n      this.m_toiCount = 0;\n      this.m_toiFlag = false;\n      this.m_friction = 0;\n      this.m_restitution = 0;\n      this.m_tangentSpeed = 0;\n      this.m_enabledFlag = true;\n      this.m_islandFlag = false;\n      this.m_touchingFlag = false;\n      this.m_filterFlag = false;\n      this.m_bulletHitFlag = false;\n      this.m_impulse = new ContactImpulse(this);\n      this.v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()];\n      this.v_normal = vec2(0, 0);\n      this.v_normalMass = new Mat22();\n      this.v_K = new Mat22();\n      this.v_pointCount = 0;\n      this.v_tangentSpeed = 0;\n      this.v_friction = 0;\n      this.v_restitution = 0;\n      this.v_invMassA = 0;\n      this.v_invMassB = 0;\n      this.v_invIA = 0;\n      this.v_invIB = 0;\n      this.p_localPoints = [vec2(0, 0), vec2(0, 0)];\n      this.p_localNormal = vec2(0, 0);\n      this.p_localPoint = vec2(0, 0);\n      this.p_localCenterA = vec2(0, 0);\n      this.p_localCenterB = vec2(0, 0);\n      this.p_type = ManifoldType.e_unset;\n      this.p_radiusA = 0;\n      this.p_radiusB = 0;\n      this.p_pointCount = 0;\n      this.p_invMassA = 0;\n      this.p_invMassB = 0;\n      this.p_invIA = 0;\n      this.p_invIB = 0;\n    }\n    Contact2.prototype.initialize = function(fA, indexA, fB, indexB, evaluateFcn) {\n      this.m_fixtureA = fA;\n      this.m_fixtureB = fB;\n      this.m_indexA = indexA;\n      this.m_indexB = indexB;\n      this.m_evaluateFcn = evaluateFcn;\n      this.m_friction = mixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction);\n      this.m_restitution = mixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution);\n    };\n    Contact2.prototype.recycle = function() {\n      this.m_nodeA.recycle();\n      this.m_nodeB.recycle();\n      this.m_fixtureA = null;\n      this.m_fixtureB = null;\n      this.m_indexA = -1;\n      this.m_indexB = -1;\n      this.m_evaluateFcn = null;\n      this.m_manifold.recycle();\n      this.m_prev = null;\n      this.m_next = null;\n      this.m_toi = 1;\n      this.m_toiCount = 0;\n      this.m_toiFlag = false;\n      this.m_friction = 0;\n      this.m_restitution = 0;\n      this.m_tangentSpeed = 0;\n      this.m_enabledFlag = true;\n      this.m_islandFlag = false;\n      this.m_touchingFlag = false;\n      this.m_filterFlag = false;\n      this.m_bulletHitFlag = false;\n      this.m_impulse.recycle();\n      for (var _i = 0, _a2 = this.v_points; _i < _a2.length; _i++) {\n        var point_1 = _a2[_i];\n        point_1.recycle();\n      }\n      zeroVec2(this.v_normal);\n      this.v_normalMass.setZero();\n      this.v_K.setZero();\n      this.v_pointCount = 0;\n      this.v_tangentSpeed = 0;\n      this.v_friction = 0;\n      this.v_restitution = 0;\n      this.v_invMassA = 0;\n      this.v_invMassB = 0;\n      this.v_invIA = 0;\n      this.v_invIB = 0;\n      for (var _b = 0, _c = this.p_localPoints; _b < _c.length; _b++) {\n        var point_2 = _c[_b];\n        zeroVec2(point_2);\n      }\n      zeroVec2(this.p_localNormal);\n      zeroVec2(this.p_localPoint);\n      zeroVec2(this.p_localCenterA);\n      zeroVec2(this.p_localCenterB);\n      this.p_type = ManifoldType.e_unset;\n      this.p_radiusA = 0;\n      this.p_radiusB = 0;\n      this.p_pointCount = 0;\n      this.p_invMassA = 0;\n      this.p_invMassB = 0;\n      this.p_invIA = 0;\n      this.p_invIB = 0;\n    };\n    Contact2.prototype.initConstraint = function(step) {\n      var fixtureA = this.m_fixtureA;\n      var fixtureB = this.m_fixtureB;\n      if (fixtureA === null || fixtureB === null)\n        return;\n      var bodyA = fixtureA.m_body;\n      var bodyB = fixtureB.m_body;\n      if (bodyA === null || bodyB === null)\n        return;\n      var shapeA = fixtureA.m_shape;\n      var shapeB = fixtureB.m_shape;\n      if (shapeA === null || shapeB === null)\n        return;\n      var manifold = this.m_manifold;\n      var pointCount = manifold.pointCount;\n      this.v_invMassA = bodyA.m_invMass;\n      this.v_invMassB = bodyB.m_invMass;\n      this.v_invIA = bodyA.m_invI;\n      this.v_invIB = bodyB.m_invI;\n      this.v_friction = this.m_friction;\n      this.v_restitution = this.m_restitution;\n      this.v_tangentSpeed = this.m_tangentSpeed;\n      this.v_pointCount = pointCount;\n      this.v_K.setZero();\n      this.v_normalMass.setZero();\n      this.p_invMassA = bodyA.m_invMass;\n      this.p_invMassB = bodyB.m_invMass;\n      this.p_invIA = bodyA.m_invI;\n      this.p_invIB = bodyB.m_invI;\n      copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter);\n      copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter);\n      this.p_radiusA = shapeA.m_radius;\n      this.p_radiusB = shapeB.m_radius;\n      this.p_type = manifold.type;\n      copyVec2(this.p_localNormal, manifold.localNormal);\n      copyVec2(this.p_localPoint, manifold.localPoint);\n      this.p_pointCount = pointCount;\n      for (var j = 0; j < SettingsInternal.maxManifoldPoints; ++j) {\n        this.v_points[j].recycle();\n        zeroVec2(this.p_localPoints[j]);\n      }\n      for (var j = 0; j < pointCount; ++j) {\n        var cp = manifold.points[j];\n        var vcp = this.v_points[j];\n        if (step.warmStarting) {\n          vcp.normalImpulse = step.dtRatio * cp.normalImpulse;\n          vcp.tangentImpulse = step.dtRatio * cp.tangentImpulse;\n        }\n        copyVec2(this.p_localPoints[j], cp.localPoint);\n      }\n    };\n    Contact2.prototype.getManifold = function() {\n      return this.m_manifold;\n    };\n    Contact2.prototype.getWorldManifold = function(worldManifold2) {\n      var fixtureA = this.m_fixtureA;\n      var fixtureB = this.m_fixtureB;\n      if (fixtureA === null || fixtureB === null)\n        return;\n      var bodyA = fixtureA.m_body;\n      var bodyB = fixtureB.m_body;\n      if (bodyA === null || bodyB === null)\n        return;\n      var shapeA = fixtureA.m_shape;\n      var shapeB = fixtureB.m_shape;\n      if (shapeA === null || shapeB === null)\n        return;\n      return this.m_manifold.getWorldManifold(worldManifold2, bodyA.getTransform(), shapeA.m_radius, bodyB.getTransform(), shapeB.m_radius);\n    };\n    Contact2.prototype.setEnabled = function(flag) {\n      this.m_enabledFlag = !!flag;\n    };\n    Contact2.prototype.isEnabled = function() {\n      return this.m_enabledFlag;\n    };\n    Contact2.prototype.isTouching = function() {\n      return this.m_touchingFlag;\n    };\n    Contact2.prototype.getNext = function() {\n      return this.m_next;\n    };\n    Contact2.prototype.getFixtureA = function() {\n      return this.m_fixtureA;\n    };\n    Contact2.prototype.getFixtureB = function() {\n      return this.m_fixtureB;\n    };\n    Contact2.prototype.getChildIndexA = function() {\n      return this.m_indexA;\n    };\n    Contact2.prototype.getChildIndexB = function() {\n      return this.m_indexB;\n    };\n    Contact2.prototype.flagForFiltering = function() {\n      this.m_filterFlag = true;\n    };\n    Contact2.prototype.setFriction = function(friction) {\n      this.m_friction = friction;\n    };\n    Contact2.prototype.getFriction = function() {\n      return this.m_friction;\n    };\n    Contact2.prototype.resetFriction = function() {\n      var fixtureA = this.m_fixtureA;\n      var fixtureB = this.m_fixtureB;\n      if (fixtureA === null || fixtureB === null)\n        return;\n      this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction);\n    };\n    Contact2.prototype.setRestitution = function(restitution) {\n      this.m_restitution = restitution;\n    };\n    Contact2.prototype.getRestitution = function() {\n      return this.m_restitution;\n    };\n    Contact2.prototype.resetRestitution = function() {\n      var fixtureA = this.m_fixtureA;\n      var fixtureB = this.m_fixtureB;\n      if (fixtureA === null || fixtureB === null)\n        return;\n      this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution);\n    };\n    Contact2.prototype.setTangentSpeed = function(speed) {\n      this.m_tangentSpeed = speed;\n    };\n    Contact2.prototype.getTangentSpeed = function() {\n      return this.m_tangentSpeed;\n    };\n    Contact2.prototype.evaluate = function(manifold, xfA2, xfB2) {\n      var fixtureA = this.m_fixtureA;\n      var fixtureB = this.m_fixtureB;\n      if (fixtureA === null || fixtureB === null)\n        return;\n      this.m_evaluateFcn(manifold, xfA2, fixtureA, this.m_indexA, xfB2, fixtureB, this.m_indexB);\n    };\n    Contact2.prototype.update = function(listener) {\n      var fixtureA = this.m_fixtureA;\n      var fixtureB = this.m_fixtureB;\n      if (fixtureA === null || fixtureB === null)\n        return;\n      var bodyA = fixtureA.m_body;\n      var bodyB = fixtureB.m_body;\n      if (bodyA === null || bodyB === null)\n        return;\n      var shapeA = fixtureA.m_shape;\n      var shapeB = fixtureB.m_shape;\n      if (shapeA === null || shapeB === null)\n        return;\n      this.m_enabledFlag = true;\n      var touching = false;\n      var wasTouching = this.m_touchingFlag;\n      var sensorA = fixtureA.m_isSensor;\n      var sensorB = fixtureB.m_isSensor;\n      var sensor = sensorA || sensorB;\n      var xfA2 = bodyA.m_xf;\n      var xfB2 = bodyB.m_xf;\n      if (sensor) {\n        touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA2, xfB2);\n        this.m_manifold.pointCount = 0;\n      } else {\n        oldManifold.recycle();\n        oldManifold.set(this.m_manifold);\n        this.m_manifold.recycle();\n        this.evaluate(this.m_manifold, xfA2, xfB2);\n        touching = this.m_manifold.pointCount > 0;\n        for (var i = 0; i < this.m_manifold.pointCount; ++i) {\n          var nmp = this.m_manifold.points[i];\n          nmp.normalImpulse = 0;\n          nmp.tangentImpulse = 0;\n          for (var j = 0; j < oldManifold.pointCount; ++j) {\n            var omp = oldManifold.points[j];\n            if (omp.id.key === nmp.id.key) {\n              nmp.normalImpulse = omp.normalImpulse;\n              nmp.tangentImpulse = omp.tangentImpulse;\n              break;\n            }\n          }\n        }\n        if (touching !== wasTouching) {\n          bodyA.setAwake(true);\n          bodyB.setAwake(true);\n        }\n      }\n      this.m_touchingFlag = touching;\n      var hasListener = typeof listener === \"object\" && listener !== null;\n      if (!wasTouching && touching && hasListener) {\n        listener.beginContact(this);\n      }\n      if (wasTouching && !touching && hasListener) {\n        listener.endContact(this);\n      }\n      if (!sensor && touching && hasListener && oldManifold) {\n        listener.preSolve(this, oldManifold);\n      }\n    };\n    Contact2.prototype.solvePositionConstraint = function(step) {\n      return this._solvePositionConstraint(step, null, null);\n    };\n    Contact2.prototype.solvePositionConstraintTOI = function(step, toiA, toiB) {\n      return this._solvePositionConstraint(step, toiA, toiB);\n    };\n    Contact2.prototype._solvePositionConstraint = function(step, toiA, toiB) {\n      var toi = toiA !== null && toiB !== null ? true : false;\n      var minSeparation = 0;\n      var fixtureA = this.m_fixtureA;\n      var fixtureB = this.m_fixtureB;\n      if (fixtureA === null || fixtureB === null)\n        return minSeparation;\n      var bodyA = fixtureA.m_body;\n      var bodyB = fixtureB.m_body;\n      if (bodyA === null || bodyB === null)\n        return minSeparation;\n      var positionA = bodyA.c_position;\n      var positionB = bodyB.c_position;\n      var localCenterA = this.p_localCenterA;\n      var localCenterB = this.p_localCenterB;\n      var mA = 0;\n      var iA = 0;\n      if (!toi || bodyA === toiA || bodyA === toiB) {\n        mA = this.p_invMassA;\n        iA = this.p_invIA;\n      }\n      var mB = 0;\n      var iB = 0;\n      if (!toi || bodyB === toiA || bodyB === toiB) {\n        mB = this.p_invMassB;\n        iB = this.p_invIB;\n      }\n      copyVec2(cA, positionA.c);\n      var aA = positionA.a;\n      copyVec2(cB, positionB.c);\n      var aB = positionB.a;\n      for (var j = 0; j < this.p_pointCount; ++j) {\n        getTransform(xfA, localCenterA, cA, aA);\n        getTransform(xfB, localCenterB, cB, aB);\n        var separation = void 0;\n        switch (this.p_type) {\n          case ManifoldType.e_circles: {\n            transformVec2(pointA, xfA, this.p_localPoint);\n            transformVec2(pointB, xfB, this.p_localPoints[0]);\n            subVec2(normal$2, pointB, pointA);\n            normalizeVec2(normal$2);\n            combine2Vec2(point, 0.5, pointA, 0.5, pointB);\n            separation = dotVec2(pointB, normal$2) - dotVec2(pointA, normal$2) - this.p_radiusA - this.p_radiusB;\n            break;\n          }\n          case ManifoldType.e_faceA: {\n            rotVec2(normal$2, xfA.q, this.p_localNormal);\n            transformVec2(planePoint$1, xfA, this.p_localPoint);\n            transformVec2(clipPoint, xfB, this.p_localPoints[j]);\n            separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB;\n            copyVec2(point, clipPoint);\n            break;\n          }\n          case ManifoldType.e_faceB: {\n            rotVec2(normal$2, xfB.q, this.p_localNormal);\n            transformVec2(planePoint$1, xfB, this.p_localPoint);\n            transformVec2(clipPoint, xfA, this.p_localPoints[j]);\n            separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB;\n            copyVec2(point, clipPoint);\n            negVec2(normal$2);\n            break;\n          }\n          default: {\n            return minSeparation;\n          }\n        }\n        subVec2(rA, point, cA);\n        subVec2(rB, point, cB);\n        minSeparation = math_min$4(minSeparation, separation);\n        var baumgarte = toi ? SettingsInternal.toiBaugarte : SettingsInternal.baumgarte;\n        var linearSlop = SettingsInternal.linearSlop;\n        var maxLinearCorrection = SettingsInternal.maxLinearCorrection;\n        var C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0);\n        var rnA = crossVec2Vec2(rA, normal$2);\n        var rnB = crossVec2Vec2(rB, normal$2);\n        var K = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n        var impulse = K > 0 ? -C / K : 0;\n        scaleVec2(P$1, impulse, normal$2);\n        minusScaleVec2(cA, mA, P$1);\n        aA -= iA * crossVec2Vec2(rA, P$1);\n        plusScaleVec2(cB, mB, P$1);\n        aB += iB * crossVec2Vec2(rB, P$1);\n      }\n      copyVec2(positionA.c, cA);\n      positionA.a = aA;\n      copyVec2(positionB.c, cB);\n      positionB.a = aB;\n      return minSeparation;\n    };\n    Contact2.prototype.initVelocityConstraint = function(step) {\n      var fixtureA = this.m_fixtureA;\n      var fixtureB = this.m_fixtureB;\n      if (fixtureA === null || fixtureB === null)\n        return;\n      var bodyA = fixtureA.m_body;\n      var bodyB = fixtureB.m_body;\n      if (bodyA === null || bodyB === null)\n        return;\n      var velocityA = bodyA.c_velocity;\n      var velocityB = bodyB.c_velocity;\n      var positionA = bodyA.c_position;\n      var positionB = bodyB.c_position;\n      var radiusA = this.p_radiusA;\n      var radiusB = this.p_radiusB;\n      var manifold = this.m_manifold;\n      var mA = this.v_invMassA;\n      var mB = this.v_invMassB;\n      var iA = this.v_invIA;\n      var iB = this.v_invIB;\n      var localCenterA = this.p_localCenterA;\n      var localCenterB = this.p_localCenterB;\n      copyVec2(cA, positionA.c);\n      var aA = positionA.a;\n      copyVec2(vA, velocityA.v);\n      var wA = velocityA.w;\n      copyVec2(cB, positionB.c);\n      var aB = positionB.a;\n      copyVec2(vB, velocityB.v);\n      var wB = velocityB.w;\n      getTransform(xfA, localCenterA, cA, aA);\n      getTransform(xfB, localCenterB, cB, aB);\n      worldManifold.recycle();\n      manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB);\n      copyVec2(this.v_normal, worldManifold.normal);\n      for (var j = 0; j < this.v_pointCount; ++j) {\n        var vcp = this.v_points[j];\n        var wmp = worldManifold.points[j];\n        subVec2(vcp.rA, wmp, cA);\n        subVec2(vcp.rB, wmp, cB);\n        var rnA = crossVec2Vec2(vcp.rA, this.v_normal);\n        var rnB = crossVec2Vec2(vcp.rB, this.v_normal);\n        var kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n        vcp.normalMass = kNormal > 0 ? 1 / kNormal : 0;\n        crossVec2Num(tangent$1, this.v_normal, 1);\n        var rtA = crossVec2Vec2(vcp.rA, tangent$1);\n        var rtB = crossVec2Vec2(vcp.rB, tangent$1);\n        var kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB;\n        vcp.tangentMass = kTangent > 0 ? 1 / kTangent : 0;\n        vcp.velocityBias = 0;\n        var vRel = 0;\n        vRel += dotVec2(this.v_normal, vB);\n        vRel += dotVec2(this.v_normal, crossNumVec2(temp$2, wB, vcp.rB));\n        vRel -= dotVec2(this.v_normal, vA);\n        vRel -= dotVec2(this.v_normal, crossNumVec2(temp$2, wA, vcp.rA));\n        if (vRel < -SettingsInternal.velocityThreshold) {\n          vcp.velocityBias = -this.v_restitution * vRel;\n        }\n      }\n      if (this.v_pointCount == 2 && step.blockSolve) {\n        var vcp1 = this.v_points[0];\n        var vcp2 = this.v_points[1];\n        var rn1A = crossVec2Vec2(vcp1.rA, this.v_normal);\n        var rn1B = crossVec2Vec2(vcp1.rB, this.v_normal);\n        var rn2A = crossVec2Vec2(vcp2.rA, this.v_normal);\n        var rn2B = crossVec2Vec2(vcp2.rB, this.v_normal);\n        var k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B;\n        var k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B;\n        var k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B;\n        var k_maxConditionNumber = 1e3;\n        if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n          this.v_K.ex.setNum(k11, k12);\n          this.v_K.ey.setNum(k12, k22);\n          var a_1 = this.v_K.ex.x;\n          var b_1 = this.v_K.ey.x;\n          var c2 = this.v_K.ex.y;\n          var d_1 = this.v_K.ey.y;\n          var det = a_1 * d_1 - b_1 * c2;\n          if (det !== 0) {\n            det = 1 / det;\n          }\n          this.v_normalMass.ex.x = det * d_1;\n          this.v_normalMass.ey.x = -det * b_1;\n          this.v_normalMass.ex.y = -det * c2;\n          this.v_normalMass.ey.y = det * a_1;\n        } else {\n          this.v_pointCount = 1;\n        }\n      }\n      copyVec2(positionA.c, cA);\n      positionA.a = aA;\n      copyVec2(velocityA.v, vA);\n      velocityA.w = wA;\n      copyVec2(positionB.c, cB);\n      positionB.a = aB;\n      copyVec2(velocityB.v, vB);\n      velocityB.w = wB;\n    };\n    Contact2.prototype.warmStartConstraint = function(step) {\n      var fixtureA = this.m_fixtureA;\n      var fixtureB = this.m_fixtureB;\n      if (fixtureA === null || fixtureB === null)\n        return;\n      var bodyA = fixtureA.m_body;\n      var bodyB = fixtureB.m_body;\n      if (bodyA === null || bodyB === null)\n        return;\n      var velocityA = bodyA.c_velocity;\n      var velocityB = bodyB.c_velocity;\n      var mA = this.v_invMassA;\n      var iA = this.v_invIA;\n      var mB = this.v_invMassB;\n      var iB = this.v_invIB;\n      copyVec2(vA, velocityA.v);\n      var wA = velocityA.w;\n      copyVec2(vB, velocityB.v);\n      var wB = velocityB.w;\n      copyVec2(normal$2, this.v_normal);\n      crossVec2Num(tangent$1, normal$2, 1);\n      for (var j = 0; j < this.v_pointCount; ++j) {\n        var vcp = this.v_points[j];\n        combine2Vec2(P$1, vcp.normalImpulse, normal$2, vcp.tangentImpulse, tangent$1);\n        wA -= iA * crossVec2Vec2(vcp.rA, P$1);\n        minusScaleVec2(vA, mA, P$1);\n        wB += iB * crossVec2Vec2(vcp.rB, P$1);\n        plusScaleVec2(vB, mB, P$1);\n      }\n      copyVec2(velocityA.v, vA);\n      velocityA.w = wA;\n      copyVec2(velocityB.v, vB);\n      velocityB.w = wB;\n    };\n    Contact2.prototype.storeConstraintImpulses = function(step) {\n      var manifold = this.m_manifold;\n      for (var j = 0; j < this.v_pointCount; ++j) {\n        manifold.points[j].normalImpulse = this.v_points[j].normalImpulse;\n        manifold.points[j].tangentImpulse = this.v_points[j].tangentImpulse;\n      }\n    };\n    Contact2.prototype.solveVelocityConstraint = function(step) {\n      var fixtureA = this.m_fixtureA;\n      var fixtureB = this.m_fixtureB;\n      if (fixtureA === null || fixtureB === null)\n        return;\n      var bodyA = fixtureA.m_body;\n      var bodyB = fixtureB.m_body;\n      if (bodyA === null || bodyB === null)\n        return;\n      var velocityA = bodyA.c_velocity;\n      var velocityB = bodyB.c_velocity;\n      var mA = this.v_invMassA;\n      var iA = this.v_invIA;\n      var mB = this.v_invMassB;\n      var iB = this.v_invIB;\n      copyVec2(vA, velocityA.v);\n      var wA = velocityA.w;\n      copyVec2(vB, velocityB.v);\n      var wB = velocityB.w;\n      copyVec2(normal$2, this.v_normal);\n      crossVec2Num(tangent$1, normal$2, 1);\n      var friction = this.v_friction;\n      for (var j = 0; j < this.v_pointCount; ++j) {\n        var vcp = this.v_points[j];\n        zeroVec2(dv);\n        plusVec2(dv, vB);\n        plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB));\n        minusVec2(dv, vA);\n        minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA));\n        var vt = dotVec2(dv, tangent$1) - this.v_tangentSpeed;\n        var lambda = vcp.tangentMass * -vt;\n        var maxFriction = friction * vcp.normalImpulse;\n        var newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction);\n        lambda = newImpulse - vcp.tangentImpulse;\n        vcp.tangentImpulse = newImpulse;\n        scaleVec2(P$1, lambda, tangent$1);\n        minusScaleVec2(vA, mA, P$1);\n        wA -= iA * crossVec2Vec2(vcp.rA, P$1);\n        plusScaleVec2(vB, mB, P$1);\n        wB += iB * crossVec2Vec2(vcp.rB, P$1);\n      }\n      if (this.v_pointCount == 1 || step.blockSolve == false) {\n        for (var i = 0; i < this.v_pointCount; ++i) {\n          var vcp = this.v_points[i];\n          zeroVec2(dv);\n          plusVec2(dv, vB);\n          plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB));\n          minusVec2(dv, vA);\n          minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA));\n          var vn = dotVec2(dv, normal$2);\n          var lambda = -vcp.normalMass * (vn - vcp.velocityBias);\n          var newImpulse = math_max$2(vcp.normalImpulse + lambda, 0);\n          lambda = newImpulse - vcp.normalImpulse;\n          vcp.normalImpulse = newImpulse;\n          scaleVec2(P$1, lambda, normal$2);\n          minusScaleVec2(vA, mA, P$1);\n          wA -= iA * crossVec2Vec2(vcp.rA, P$1);\n          plusScaleVec2(vB, mB, P$1);\n          wB += iB * crossVec2Vec2(vcp.rB, P$1);\n        }\n      } else {\n        var vcp1 = this.v_points[0];\n        var vcp2 = this.v_points[1];\n        setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse);\n        zeroVec2(dv1);\n        plusVec2(dv1, vB);\n        plusVec2(dv1, crossNumVec2(temp$2, wB, vcp1.rB));\n        minusVec2(dv1, vA);\n        minusVec2(dv1, crossNumVec2(temp$2, wA, vcp1.rA));\n        zeroVec2(dv2);\n        plusVec2(dv2, vB);\n        plusVec2(dv2, crossNumVec2(temp$2, wB, vcp2.rB));\n        minusVec2(dv2, vA);\n        minusVec2(dv2, crossNumVec2(temp$2, wA, vcp2.rA));\n        var vn1 = dotVec2(dv1, normal$2);\n        var vn2 = dotVec2(dv2, normal$2);\n        setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias);\n        b.x -= this.v_K.ex.x * a.x + this.v_K.ey.x * a.y;\n        b.y -= this.v_K.ex.y * a.x + this.v_K.ey.y * a.y;\n        while (true) {\n          zeroVec2(x);\n          x.x = -(this.v_normalMass.ex.x * b.x + this.v_normalMass.ey.x * b.y);\n          x.y = -(this.v_normalMass.ex.y * b.x + this.v_normalMass.ey.y * b.y);\n          if (x.x >= 0 && x.y >= 0) {\n            subVec2(d, x, a);\n            scaleVec2(P1, d.x, normal$2);\n            scaleVec2(P2, d.y, normal$2);\n            combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n            wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2));\n            combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n            wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2));\n            vcp1.normalImpulse = x.x;\n            vcp2.normalImpulse = x.y;\n            break;\n          }\n          x.x = -vcp1.normalMass * b.x;\n          x.y = 0;\n          vn1 = 0;\n          vn2 = this.v_K.ex.y * x.x + b.y;\n          if (x.x >= 0 && vn2 >= 0) {\n            subVec2(d, x, a);\n            scaleVec2(P1, d.x, normal$2);\n            scaleVec2(P2, d.y, normal$2);\n            combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n            wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2));\n            combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n            wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2));\n            vcp1.normalImpulse = x.x;\n            vcp2.normalImpulse = x.y;\n            break;\n          }\n          x.x = 0;\n          x.y = -vcp2.normalMass * b.y;\n          vn1 = this.v_K.ey.x * x.y + b.x;\n          vn2 = 0;\n          if (x.y >= 0 && vn1 >= 0) {\n            subVec2(d, x, a);\n            scaleVec2(P1, d.x, normal$2);\n            scaleVec2(P2, d.y, normal$2);\n            combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n            wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2));\n            combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n            wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2));\n            vcp1.normalImpulse = x.x;\n            vcp2.normalImpulse = x.y;\n            break;\n          }\n          x.x = 0;\n          x.y = 0;\n          vn1 = b.x;\n          vn2 = b.y;\n          if (vn1 >= 0 && vn2 >= 0) {\n            subVec2(d, x, a);\n            scaleVec2(P1, d.x, normal$2);\n            scaleVec2(P2, d.y, normal$2);\n            combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n            wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2));\n            combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n            wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2));\n            vcp1.normalImpulse = x.x;\n            vcp2.normalImpulse = x.y;\n            break;\n          }\n          break;\n        }\n      }\n      copyVec2(velocityA.v, vA);\n      velocityA.w = wA;\n      copyVec2(velocityB.v, vB);\n      velocityB.w = wB;\n    };\n    Contact2.addType = function(type1, type2, callback) {\n      s_registers[type1] = s_registers[type1] || {};\n      s_registers[type1][type2] = callback;\n    };\n    Contact2.create = function(fixtureA, indexA, fixtureB, indexB) {\n      var typeA = fixtureA.m_shape.m_type;\n      var typeB = fixtureB.m_shape.m_type;\n      var contact = contactPool.allocate();\n      var evaluateFcn;\n      if (evaluateFcn = s_registers[typeA] && s_registers[typeA][typeB]) {\n        contact.initialize(fixtureA, indexA, fixtureB, indexB, evaluateFcn);\n      } else if (evaluateFcn = s_registers[typeB] && s_registers[typeB][typeA]) {\n        contact.initialize(fixtureB, indexB, fixtureA, indexA, evaluateFcn);\n      } else {\n        return null;\n      }\n      fixtureA = contact.m_fixtureA;\n      fixtureB = contact.m_fixtureB;\n      indexA = contact.getChildIndexA();\n      indexB = contact.getChildIndexB();\n      var bodyA = fixtureA.m_body;\n      var bodyB = fixtureB.m_body;\n      contact.m_nodeA.contact = contact;\n      contact.m_nodeA.other = bodyB;\n      contact.m_nodeA.prev = null;\n      contact.m_nodeA.next = bodyA.m_contactList;\n      if (bodyA.m_contactList != null) {\n        bodyA.m_contactList.prev = contact.m_nodeA;\n      }\n      bodyA.m_contactList = contact.m_nodeA;\n      contact.m_nodeB.contact = contact;\n      contact.m_nodeB.other = bodyA;\n      contact.m_nodeB.prev = null;\n      contact.m_nodeB.next = bodyB.m_contactList;\n      if (bodyB.m_contactList != null) {\n        bodyB.m_contactList.prev = contact.m_nodeB;\n      }\n      bodyB.m_contactList = contact.m_nodeB;\n      if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) {\n        bodyA.setAwake(true);\n        bodyB.setAwake(true);\n      }\n      return contact;\n    };\n    Contact2.destroy = function(contact, listener) {\n      var fixtureA = contact.m_fixtureA;\n      var fixtureB = contact.m_fixtureB;\n      if (fixtureA === null || fixtureB === null)\n        return;\n      var bodyA = fixtureA.m_body;\n      var bodyB = fixtureB.m_body;\n      if (bodyA === null || bodyB === null)\n        return;\n      if (contact.isTouching()) {\n        listener.endContact(contact);\n      }\n      if (contact.m_nodeA.prev) {\n        contact.m_nodeA.prev.next = contact.m_nodeA.next;\n      }\n      if (contact.m_nodeA.next) {\n        contact.m_nodeA.next.prev = contact.m_nodeA.prev;\n      }\n      if (contact.m_nodeA == bodyA.m_contactList) {\n        bodyA.m_contactList = contact.m_nodeA.next;\n      }\n      if (contact.m_nodeB.prev) {\n        contact.m_nodeB.prev.next = contact.m_nodeB.next;\n      }\n      if (contact.m_nodeB.next) {\n        contact.m_nodeB.next.prev = contact.m_nodeB.prev;\n      }\n      if (contact.m_nodeB == bodyB.m_contactList) {\n        bodyB.m_contactList = contact.m_nodeB.next;\n      }\n      if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) {\n        bodyA.setAwake(true);\n        bodyB.setAwake(true);\n      }\n      contactPool.release(contact);\n    };\n    return Contact2;\n  }()\n);\nvar DEFAULTS$b = {\n  gravity: Vec2.zero(),\n  allowSleep: true,\n  warmStarting: true,\n  continuousPhysics: true,\n  subStepping: false,\n  blockSolve: true,\n  velocityIterations: 8,\n  positionIterations: 3\n};\nvar World = (\n  /** @class */\n  function() {\n    function World2(def) {\n      if (!(this instanceof World2)) {\n        return new World2(def);\n      }\n      this.s_step = new TimeStep();\n      if (!def) {\n        def = {};\n      } else if (Vec2.isValid(def)) {\n        def = { gravity: def };\n      }\n      def = options(def, DEFAULTS$b);\n      this.m_solver = new Solver(this);\n      this.m_broadPhase = new BroadPhase();\n      this.m_contactList = null;\n      this.m_contactCount = 0;\n      this.m_bodyList = null;\n      this.m_bodyCount = 0;\n      this.m_jointList = null;\n      this.m_jointCount = 0;\n      this.m_stepComplete = true;\n      this.m_allowSleep = def.allowSleep;\n      this.m_gravity = Vec2.clone(def.gravity);\n      this.m_clearForces = true;\n      this.m_newFixture = false;\n      this.m_locked = false;\n      this.m_warmStarting = def.warmStarting;\n      this.m_continuousPhysics = def.continuousPhysics;\n      this.m_subStepping = def.subStepping;\n      this.m_blockSolve = def.blockSolve;\n      this.m_velocityIterations = def.velocityIterations;\n      this.m_positionIterations = def.positionIterations;\n      this.m_t = 0;\n      this.m_step_callback = [];\n    }\n    World2.prototype._serialize = function() {\n      var bodies = [];\n      var joints = [];\n      for (var b2 = this.getBodyList(); b2; b2 = b2.getNext()) {\n        bodies.push(b2);\n      }\n      for (var j = this.getJointList(); j; j = j.getNext()) {\n        if (typeof j._serialize === \"function\") {\n          joints.push(j);\n        }\n      }\n      return {\n        gravity: this.m_gravity,\n        bodies,\n        joints\n      };\n    };\n    World2._deserialize = function(data, context, restore) {\n      if (!data) {\n        return new World2();\n      }\n      var world = new World2(data.gravity);\n      if (data.bodies) {\n        for (var i = data.bodies.length - 1; i >= 0; i -= 1) {\n          world._addBody(restore(Body, data.bodies[i], world));\n        }\n      }\n      if (data.joints) {\n        for (var i = data.joints.length - 1; i >= 0; i--) {\n          world.createJoint(restore(Joint, data.joints[i], world));\n        }\n      }\n      return world;\n    };\n    World2.prototype.getBodyList = function() {\n      return this.m_bodyList;\n    };\n    World2.prototype.getJointList = function() {\n      return this.m_jointList;\n    };\n    World2.prototype.getContactList = function() {\n      return this.m_contactList;\n    };\n    World2.prototype.getBodyCount = function() {\n      return this.m_bodyCount;\n    };\n    World2.prototype.getJointCount = function() {\n      return this.m_jointCount;\n    };\n    World2.prototype.getContactCount = function() {\n      return this.m_contactCount;\n    };\n    World2.prototype.setGravity = function(gravity) {\n      this.m_gravity.set(gravity);\n    };\n    World2.prototype.getGravity = function() {\n      return this.m_gravity;\n    };\n    World2.prototype.isLocked = function() {\n      return this.m_locked;\n    };\n    World2.prototype.setAllowSleeping = function(flag) {\n      if (flag == this.m_allowSleep) {\n        return;\n      }\n      this.m_allowSleep = flag;\n      if (this.m_allowSleep == false) {\n        for (var b2 = this.m_bodyList; b2; b2 = b2.m_next) {\n          b2.setAwake(true);\n        }\n      }\n    };\n    World2.prototype.getAllowSleeping = function() {\n      return this.m_allowSleep;\n    };\n    World2.prototype.setWarmStarting = function(flag) {\n      this.m_warmStarting = flag;\n    };\n    World2.prototype.getWarmStarting = function() {\n      return this.m_warmStarting;\n    };\n    World2.prototype.setContinuousPhysics = function(flag) {\n      this.m_continuousPhysics = flag;\n    };\n    World2.prototype.getContinuousPhysics = function() {\n      return this.m_continuousPhysics;\n    };\n    World2.prototype.setSubStepping = function(flag) {\n      this.m_subStepping = flag;\n    };\n    World2.prototype.getSubStepping = function() {\n      return this.m_subStepping;\n    };\n    World2.prototype.setAutoClearForces = function(flag) {\n      this.m_clearForces = flag;\n    };\n    World2.prototype.getAutoClearForces = function() {\n      return this.m_clearForces;\n    };\n    World2.prototype.clearForces = function() {\n      for (var body = this.m_bodyList; body; body = body.getNext()) {\n        body.m_force.setZero();\n        body.m_torque = 0;\n      }\n    };\n    World2.prototype.queryAABB = function(aabb, callback) {\n      var broadPhase = this.m_broadPhase;\n      this.m_broadPhase.query(aabb, function(proxyId) {\n        var proxy = broadPhase.getUserData(proxyId);\n        return callback(proxy.fixture);\n      });\n    };\n    World2.prototype.rayCast = function(point1, point2, callback) {\n      var broadPhase = this.m_broadPhase;\n      this.m_broadPhase.rayCast({\n        maxFraction: 1,\n        p1: point1,\n        p2: point2\n      }, function(input2, proxyId) {\n        var proxy = broadPhase.getUserData(proxyId);\n        var fixture = proxy.fixture;\n        var index = proxy.childIndex;\n        var output2 = {};\n        var hit = fixture.rayCast(output2, input2, index);\n        if (hit) {\n          var fraction = output2.fraction;\n          var point3 = Vec2.add(Vec2.mulNumVec2(1 - fraction, input2.p1), Vec2.mulNumVec2(fraction, input2.p2));\n          return callback(fixture, point3, output2.normal, fraction);\n        }\n        return input2.maxFraction;\n      });\n    };\n    World2.prototype.getProxyCount = function() {\n      return this.m_broadPhase.getProxyCount();\n    };\n    World2.prototype.getTreeHeight = function() {\n      return this.m_broadPhase.getTreeHeight();\n    };\n    World2.prototype.getTreeBalance = function() {\n      return this.m_broadPhase.getTreeBalance();\n    };\n    World2.prototype.getTreeQuality = function() {\n      return this.m_broadPhase.getTreeQuality();\n    };\n    World2.prototype.shiftOrigin = function(newOrigin) {\n      if (this.isLocked()) {\n        return;\n      }\n      for (var b2 = this.m_bodyList; b2; b2 = b2.m_next) {\n        b2.m_xf.p.sub(newOrigin);\n        b2.m_sweep.c0.sub(newOrigin);\n        b2.m_sweep.c.sub(newOrigin);\n      }\n      for (var j = this.m_jointList; j; j = j.m_next) {\n        j.shiftOrigin(newOrigin);\n      }\n      this.m_broadPhase.shiftOrigin(newOrigin);\n    };\n    World2.prototype._addBody = function(body) {\n      if (this.isLocked()) {\n        return;\n      }\n      body.m_prev = null;\n      body.m_next = this.m_bodyList;\n      if (this.m_bodyList) {\n        this.m_bodyList.m_prev = body;\n      }\n      this.m_bodyList = body;\n      ++this.m_bodyCount;\n    };\n    World2.prototype.createBody = function(arg1, arg2) {\n      if (this.isLocked()) {\n        return null;\n      }\n      var def = {};\n      if (!arg1) ;\n      else if (Vec2.isValid(arg1)) {\n        def = { position: arg1, angle: arg2 };\n      } else if (typeof arg1 === \"object\") {\n        def = arg1;\n      }\n      var body = new Body(this, def);\n      this._addBody(body);\n      return body;\n    };\n    World2.prototype.createDynamicBody = function(arg1, arg2) {\n      var def = {};\n      if (!arg1) ;\n      else if (Vec2.isValid(arg1)) {\n        def = { position: arg1, angle: arg2 };\n      } else if (typeof arg1 === \"object\") {\n        def = arg1;\n      }\n      def.type = \"dynamic\";\n      return this.createBody(def);\n    };\n    World2.prototype.createKinematicBody = function(arg1, arg2) {\n      var def = {};\n      if (!arg1) ;\n      else if (Vec2.isValid(arg1)) {\n        def = { position: arg1, angle: arg2 };\n      } else if (typeof arg1 === \"object\") {\n        def = arg1;\n      }\n      def.type = \"kinematic\";\n      return this.createBody(def);\n    };\n    World2.prototype.destroyBody = function(b2) {\n      if (this.isLocked()) {\n        return;\n      }\n      if (b2.m_destroyed) {\n        return false;\n      }\n      var je = b2.m_jointList;\n      while (je) {\n        var je0 = je;\n        je = je.next;\n        this.publish(\"remove-joint\", je0.joint);\n        this.destroyJoint(je0.joint);\n        b2.m_jointList = je;\n      }\n      b2.m_jointList = null;\n      var ce = b2.m_contactList;\n      while (ce) {\n        var ce0 = ce;\n        ce = ce.next;\n        this.destroyContact(ce0.contact);\n        b2.m_contactList = ce;\n      }\n      b2.m_contactList = null;\n      var f = b2.m_fixtureList;\n      while (f) {\n        var f0 = f;\n        f = f.m_next;\n        this.publish(\"remove-fixture\", f0);\n        f0.destroyProxies(this.m_broadPhase);\n        b2.m_fixtureList = f;\n      }\n      b2.m_fixtureList = null;\n      if (b2.m_prev) {\n        b2.m_prev.m_next = b2.m_next;\n      }\n      if (b2.m_next) {\n        b2.m_next.m_prev = b2.m_prev;\n      }\n      if (b2 == this.m_bodyList) {\n        this.m_bodyList = b2.m_next;\n      }\n      b2.m_destroyed = true;\n      --this.m_bodyCount;\n      this.publish(\"remove-body\", b2);\n      return true;\n    };\n    World2.prototype.createJoint = function(joint) {\n      if (this.isLocked()) {\n        return null;\n      }\n      joint.m_prev = null;\n      joint.m_next = this.m_jointList;\n      if (this.m_jointList) {\n        this.m_jointList.m_prev = joint;\n      }\n      this.m_jointList = joint;\n      ++this.m_jointCount;\n      joint.m_edgeA.joint = joint;\n      joint.m_edgeA.other = joint.m_bodyB;\n      joint.m_edgeA.prev = null;\n      joint.m_edgeA.next = joint.m_bodyA.m_jointList;\n      if (joint.m_bodyA.m_jointList)\n        joint.m_bodyA.m_jointList.prev = joint.m_edgeA;\n      joint.m_bodyA.m_jointList = joint.m_edgeA;\n      joint.m_edgeB.joint = joint;\n      joint.m_edgeB.other = joint.m_bodyA;\n      joint.m_edgeB.prev = null;\n      joint.m_edgeB.next = joint.m_bodyB.m_jointList;\n      if (joint.m_bodyB.m_jointList)\n        joint.m_bodyB.m_jointList.prev = joint.m_edgeB;\n      joint.m_bodyB.m_jointList = joint.m_edgeB;\n      if (joint.m_collideConnected == false) {\n        for (var edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) {\n          if (edge.other == joint.m_bodyA) {\n            edge.contact.flagForFiltering();\n          }\n        }\n      }\n      return joint;\n    };\n    World2.prototype.destroyJoint = function(joint) {\n      if (this.isLocked()) {\n        return;\n      }\n      if (joint.m_prev) {\n        joint.m_prev.m_next = joint.m_next;\n      }\n      if (joint.m_next) {\n        joint.m_next.m_prev = joint.m_prev;\n      }\n      if (joint == this.m_jointList) {\n        this.m_jointList = joint.m_next;\n      }\n      var bodyA = joint.m_bodyA;\n      var bodyB = joint.m_bodyB;\n      bodyA.setAwake(true);\n      bodyB.setAwake(true);\n      if (joint.m_edgeA.prev) {\n        joint.m_edgeA.prev.next = joint.m_edgeA.next;\n      }\n      if (joint.m_edgeA.next) {\n        joint.m_edgeA.next.prev = joint.m_edgeA.prev;\n      }\n      if (joint.m_edgeA == bodyA.m_jointList) {\n        bodyA.m_jointList = joint.m_edgeA.next;\n      }\n      joint.m_edgeA.prev = null;\n      joint.m_edgeA.next = null;\n      if (joint.m_edgeB.prev) {\n        joint.m_edgeB.prev.next = joint.m_edgeB.next;\n      }\n      if (joint.m_edgeB.next) {\n        joint.m_edgeB.next.prev = joint.m_edgeB.prev;\n      }\n      if (joint.m_edgeB == bodyB.m_jointList) {\n        bodyB.m_jointList = joint.m_edgeB.next;\n      }\n      joint.m_edgeB.prev = null;\n      joint.m_edgeB.next = null;\n      --this.m_jointCount;\n      if (joint.m_collideConnected == false) {\n        var edge = bodyB.getContactList();\n        while (edge) {\n          if (edge.other == bodyA) {\n            edge.contact.flagForFiltering();\n          }\n          edge = edge.next;\n        }\n      }\n      this.publish(\"remove-joint\", joint);\n    };\n    World2.prototype.step = function(timeStep, velocityIterations, positionIterations) {\n      this.publish(\"pre-step\", timeStep);\n      if ((velocityIterations | 0) !== velocityIterations) {\n        velocityIterations = 0;\n      }\n      velocityIterations = velocityIterations || this.m_velocityIterations;\n      positionIterations = positionIterations || this.m_positionIterations;\n      if (this.m_newFixture) {\n        this.findNewContacts();\n        this.m_newFixture = false;\n      }\n      this.m_locked = true;\n      this.s_step.reset(timeStep);\n      this.s_step.velocityIterations = velocityIterations;\n      this.s_step.positionIterations = positionIterations;\n      this.s_step.warmStarting = this.m_warmStarting;\n      this.s_step.blockSolve = this.m_blockSolve;\n      this.updateContacts();\n      if (this.m_stepComplete && timeStep > 0) {\n        this.m_solver.solveWorld(this.s_step);\n        for (var b2 = this.m_bodyList; b2; b2 = b2.getNext()) {\n          if (b2.m_islandFlag == false) {\n            continue;\n          }\n          if (b2.isStatic()) {\n            continue;\n          }\n          b2.synchronizeFixtures();\n        }\n        this.findNewContacts();\n      }\n      if (this.m_continuousPhysics && timeStep > 0) {\n        this.m_solver.solveWorldTOI(this.s_step);\n      }\n      if (this.m_clearForces) {\n        this.clearForces();\n      }\n      this.m_locked = false;\n      var callback;\n      while (callback = this.m_step_callback.shift()) {\n        callback(this);\n      }\n      this.publish(\"post-step\", timeStep);\n    };\n    World2.prototype.queueUpdate = function(callback) {\n      if (!this.isLocked()) {\n        callback(this);\n      } else {\n        this.m_step_callback.push(callback);\n      }\n    };\n    World2.prototype.findNewContacts = function() {\n      var _this = this;\n      this.m_broadPhase.updatePairs(function(proxyA, proxyB) {\n        return _this.createContact(proxyA, proxyB);\n      });\n    };\n    World2.prototype.createContact = function(proxyA, proxyB) {\n      var fixtureA = proxyA.fixture;\n      var fixtureB = proxyB.fixture;\n      var indexA = proxyA.childIndex;\n      var indexB = proxyB.childIndex;\n      var bodyA = fixtureA.getBody();\n      var bodyB = fixtureB.getBody();\n      if (bodyA == bodyB) {\n        return;\n      }\n      var edge = bodyB.getContactList();\n      while (edge) {\n        if (edge.other == bodyA) {\n          var fA = edge.contact.getFixtureA();\n          var fB = edge.contact.getFixtureB();\n          var iA = edge.contact.getChildIndexA();\n          var iB = edge.contact.getChildIndexB();\n          if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) {\n            return;\n          }\n          if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) {\n            return;\n          }\n        }\n        edge = edge.next;\n      }\n      if (bodyB.shouldCollide(bodyA) == false) {\n        return;\n      }\n      if (fixtureB.shouldCollide(fixtureA) == false) {\n        return;\n      }\n      var contact = Contact.create(fixtureA, indexA, fixtureB, indexB);\n      if (contact == null) {\n        return;\n      }\n      contact.m_prev = null;\n      if (this.m_contactList != null) {\n        contact.m_next = this.m_contactList;\n        this.m_contactList.m_prev = contact;\n      }\n      this.m_contactList = contact;\n      ++this.m_contactCount;\n    };\n    World2.prototype.updateContacts = function() {\n      var c2;\n      var next_c = this.m_contactList;\n      while (c2 = next_c) {\n        next_c = c2.getNext();\n        var fixtureA = c2.getFixtureA();\n        var fixtureB = c2.getFixtureB();\n        var indexA = c2.getChildIndexA();\n        var indexB = c2.getChildIndexB();\n        var bodyA = fixtureA.getBody();\n        var bodyB = fixtureB.getBody();\n        if (c2.m_filterFlag) {\n          if (bodyB.shouldCollide(bodyA) == false) {\n            this.destroyContact(c2);\n            continue;\n          }\n          if (fixtureB.shouldCollide(fixtureA) == false) {\n            this.destroyContact(c2);\n            continue;\n          }\n          c2.m_filterFlag = false;\n        }\n        var activeA = bodyA.isAwake() && !bodyA.isStatic();\n        var activeB = bodyB.isAwake() && !bodyB.isStatic();\n        if (activeA == false && activeB == false) {\n          continue;\n        }\n        var proxyIdA = fixtureA.m_proxies[indexA].proxyId;\n        var proxyIdB = fixtureB.m_proxies[indexB].proxyId;\n        var overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB);\n        if (overlap == false) {\n          this.destroyContact(c2);\n          continue;\n        }\n        c2.update(this);\n      }\n    };\n    World2.prototype.destroyContact = function(contact) {\n      if (contact.m_prev) {\n        contact.m_prev.m_next = contact.m_next;\n      }\n      if (contact.m_next) {\n        contact.m_next.m_prev = contact.m_prev;\n      }\n      if (contact == this.m_contactList) {\n        this.m_contactList = contact.m_next;\n      }\n      Contact.destroy(contact, this);\n      --this.m_contactCount;\n    };\n    World2.prototype.on = function(name, listener) {\n      if (typeof name !== \"string\" || typeof listener !== \"function\") {\n        return this;\n      }\n      if (!this._listeners) {\n        this._listeners = {};\n      }\n      if (!this._listeners[name]) {\n        this._listeners[name] = [];\n      }\n      this._listeners[name].push(listener);\n      return this;\n    };\n    World2.prototype.off = function(name, listener) {\n      if (typeof name !== \"string\" || typeof listener !== \"function\") {\n        return this;\n      }\n      var listeners = this._listeners && this._listeners[name];\n      if (!listeners || !listeners.length) {\n        return this;\n      }\n      var index = listeners.indexOf(listener);\n      if (index >= 0) {\n        listeners.splice(index, 1);\n      }\n      return this;\n    };\n    World2.prototype.publish = function(name, arg1, arg2, arg3) {\n      var listeners = this._listeners && this._listeners[name];\n      if (!listeners || !listeners.length) {\n        return 0;\n      }\n      for (var l = 0; l < listeners.length; l++) {\n        listeners[l].call(this, arg1, arg2, arg3);\n      }\n      return listeners.length;\n    };\n    World2.prototype.beginContact = function(contact) {\n      this.publish(\"begin-contact\", contact);\n    };\n    World2.prototype.endContact = function(contact) {\n      this.publish(\"end-contact\", contact);\n    };\n    World2.prototype.preSolve = function(contact, oldManifold2) {\n      this.publish(\"pre-solve\", contact, oldManifold2);\n    };\n    World2.prototype.postSolve = function(contact, impulse) {\n      this.publish(\"post-solve\", contact, impulse);\n    };\n    return World2;\n  }()\n);\nvar Vec3 = (\n  /** @class */\n  function() {\n    function Vec32(x2, y, z) {\n      if (!(this instanceof Vec32)) {\n        return new Vec32(x2, y, z);\n      }\n      if (typeof x2 === \"undefined\") {\n        this.x = 0;\n        this.y = 0;\n        this.z = 0;\n      } else if (typeof x2 === \"object\") {\n        this.x = x2.x;\n        this.y = x2.y;\n        this.z = x2.z;\n      } else {\n        this.x = x2;\n        this.y = y;\n        this.z = z;\n      }\n    }\n    Vec32.prototype._serialize = function() {\n      return {\n        x: this.x,\n        y: this.y,\n        z: this.z\n      };\n    };\n    Vec32._deserialize = function(data) {\n      var obj = Object.create(Vec32.prototype);\n      obj.x = data.x;\n      obj.y = data.y;\n      obj.z = data.z;\n      return obj;\n    };\n    Vec32.neo = function(x2, y, z) {\n      var obj = Object.create(Vec32.prototype);\n      obj.x = x2;\n      obj.y = y;\n      obj.z = z;\n      return obj;\n    };\n    Vec32.zero = function() {\n      var obj = Object.create(Vec32.prototype);\n      obj.x = 0;\n      obj.y = 0;\n      obj.z = 0;\n      return obj;\n    };\n    Vec32.clone = function(v3) {\n      return Vec32.neo(v3.x, v3.y, v3.z);\n    };\n    Vec32.prototype.toString = function() {\n      return JSON.stringify(this);\n    };\n    Vec32.isValid = function(obj) {\n      if (obj === null || typeof obj === \"undefined\") {\n        return false;\n      }\n      return Number.isFinite(obj.x) && Number.isFinite(obj.y) && Number.isFinite(obj.z);\n    };\n    Vec32.assert = function(o) {\n    };\n    Vec32.prototype.setZero = function() {\n      this.x = 0;\n      this.y = 0;\n      this.z = 0;\n      return this;\n    };\n    Vec32.prototype.set = function(x2, y, z) {\n      this.x = x2;\n      this.y = y;\n      this.z = z;\n      return this;\n    };\n    Vec32.prototype.add = function(w) {\n      this.x += w.x;\n      this.y += w.y;\n      this.z += w.z;\n      return this;\n    };\n    Vec32.prototype.sub = function(w) {\n      this.x -= w.x;\n      this.y -= w.y;\n      this.z -= w.z;\n      return this;\n    };\n    Vec32.prototype.mul = function(m) {\n      this.x *= m;\n      this.y *= m;\n      this.z *= m;\n      return this;\n    };\n    Vec32.areEqual = function(v3, w) {\n      return v3 === w || typeof v3 === \"object\" && v3 !== null && typeof w === \"object\" && w !== null && v3.x === w.x && v3.y === w.y && v3.z === w.z;\n    };\n    Vec32.dot = function(v3, w) {\n      return v3.x * w.x + v3.y * w.y + v3.z * w.z;\n    };\n    Vec32.cross = function(v3, w) {\n      return new Vec32(v3.y * w.z - v3.z * w.y, v3.z * w.x - v3.x * w.z, v3.x * w.y - v3.y * w.x);\n    };\n    Vec32.add = function(v3, w) {\n      return new Vec32(v3.x + w.x, v3.y + w.y, v3.z + w.z);\n    };\n    Vec32.sub = function(v3, w) {\n      return new Vec32(v3.x - w.x, v3.y - w.y, v3.z - w.z);\n    };\n    Vec32.mul = function(v3, m) {\n      return new Vec32(m * v3.x, m * v3.y, m * v3.z);\n    };\n    Vec32.prototype.neg = function() {\n      this.x = -this.x;\n      this.y = -this.y;\n      this.z = -this.z;\n      return this;\n    };\n    Vec32.neg = function(v3) {\n      return new Vec32(-v3.x, -v3.y, -v3.z);\n    };\n    return Vec32;\n  }()\n);\nvar v1$2 = vec2(0, 0);\nvar v2$1 = vec2(0, 0);\nvar EdgeShape = (\n  /** @class */\n  function(_super) {\n    __extends(EdgeShape2, _super);\n    function EdgeShape2(v122, v22) {\n      var _this = this;\n      if (!(_this instanceof EdgeShape2)) {\n        return new EdgeShape2(v122, v22);\n      }\n      _this = _super.call(this) || this;\n      _this.m_type = EdgeShape2.TYPE;\n      _this.m_radius = SettingsInternal.polygonRadius;\n      _this.m_vertex1 = v122 ? Vec2.clone(v122) : Vec2.zero();\n      _this.m_vertex2 = v22 ? Vec2.clone(v22) : Vec2.zero();\n      _this.m_vertex0 = Vec2.zero();\n      _this.m_vertex3 = Vec2.zero();\n      _this.m_hasVertex0 = false;\n      _this.m_hasVertex3 = false;\n      return _this;\n    }\n    EdgeShape2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        vertex1: this.m_vertex1,\n        vertex2: this.m_vertex2,\n        vertex0: this.m_vertex0,\n        vertex3: this.m_vertex3,\n        hasVertex0: this.m_hasVertex0,\n        hasVertex3: this.m_hasVertex3\n      };\n    };\n    EdgeShape2._deserialize = function(data) {\n      var shape = new EdgeShape2(data.vertex1, data.vertex2);\n      if (shape.m_hasVertex0) {\n        shape.setPrevVertex(data.vertex0);\n      }\n      if (shape.m_hasVertex3) {\n        shape.setNextVertex(data.vertex3);\n      }\n      return shape;\n    };\n    EdgeShape2.prototype._reset = function() {\n    };\n    EdgeShape2.prototype.getRadius = function() {\n      return this.m_radius;\n    };\n    EdgeShape2.prototype.getType = function() {\n      return this.m_type;\n    };\n    EdgeShape2.prototype.setNext = function(v3) {\n      return this.setNextVertex(v3);\n    };\n    EdgeShape2.prototype.setNextVertex = function(v3) {\n      if (v3) {\n        this.m_vertex3.setVec2(v3);\n        this.m_hasVertex3 = true;\n      } else {\n        this.m_vertex3.setZero();\n        this.m_hasVertex3 = false;\n      }\n      return this;\n    };\n    EdgeShape2.prototype.getNextVertex = function() {\n      return this.m_vertex3;\n    };\n    EdgeShape2.prototype.setPrev = function(v3) {\n      return this.setPrevVertex(v3);\n    };\n    EdgeShape2.prototype.setPrevVertex = function(v3) {\n      if (v3) {\n        this.m_vertex0.setVec2(v3);\n        this.m_hasVertex0 = true;\n      } else {\n        this.m_vertex0.setZero();\n        this.m_hasVertex0 = false;\n      }\n      return this;\n    };\n    EdgeShape2.prototype.getPrevVertex = function() {\n      return this.m_vertex0;\n    };\n    EdgeShape2.prototype._set = function(v122, v22) {\n      this.m_vertex1.setVec2(v122);\n      this.m_vertex2.setVec2(v22);\n      this.m_hasVertex0 = false;\n      this.m_hasVertex3 = false;\n      return this;\n    };\n    EdgeShape2.prototype._clone = function() {\n      var clone = new EdgeShape2();\n      clone.m_type = this.m_type;\n      clone.m_radius = this.m_radius;\n      clone.m_vertex1.setVec2(this.m_vertex1);\n      clone.m_vertex2.setVec2(this.m_vertex2);\n      clone.m_vertex0.setVec2(this.m_vertex0);\n      clone.m_vertex3.setVec2(this.m_vertex3);\n      clone.m_hasVertex0 = this.m_hasVertex0;\n      clone.m_hasVertex3 = this.m_hasVertex3;\n      return clone;\n    };\n    EdgeShape2.prototype.getChildCount = function() {\n      return 1;\n    };\n    EdgeShape2.prototype.testPoint = function(xf2, p) {\n      return false;\n    };\n    EdgeShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) {\n      var p1 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p1, xf2.p));\n      var p2 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p2, xf2.p));\n      var d2 = Vec2.sub(p2, p1);\n      var v122 = this.m_vertex1;\n      var v22 = this.m_vertex2;\n      var e3 = Vec2.sub(v22, v122);\n      var normal3 = Vec2.neo(e3.y, -e3.x);\n      normal3.normalize();\n      var numerator = Vec2.dot(normal3, Vec2.sub(v122, p1));\n      var denominator = Vec2.dot(normal3, d2);\n      if (denominator == 0) {\n        return false;\n      }\n      var t = numerator / denominator;\n      if (t < 0 || input2.maxFraction < t) {\n        return false;\n      }\n      var q = Vec2.add(p1, Vec2.mulNumVec2(t, d2));\n      var r = Vec2.sub(v22, v122);\n      var rr = Vec2.dot(r, r);\n      if (rr == 0) {\n        return false;\n      }\n      var s2 = Vec2.dot(Vec2.sub(q, v122), r) / rr;\n      if (s2 < 0 || 1 < s2) {\n        return false;\n      }\n      output2.fraction = t;\n      if (numerator > 0) {\n        output2.normal = Rot.mulVec2(xf2.q, normal3).neg();\n      } else {\n        output2.normal = Rot.mulVec2(xf2.q, normal3);\n      }\n      return true;\n    };\n    EdgeShape2.prototype.computeAABB = function(aabb, xf2, childIndex) {\n      transformVec2(v1$2, xf2, this.m_vertex1);\n      transformVec2(v2$1, xf2, this.m_vertex2);\n      AABB.combinePoints(aabb, v1$2, v2$1);\n      AABB.extend(aabb, this.m_radius);\n    };\n    EdgeShape2.prototype.computeMass = function(massData, density) {\n      massData.mass = 0;\n      combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2);\n      massData.I = 0;\n    };\n    EdgeShape2.prototype.computeDistanceProxy = function(proxy) {\n      proxy.m_vertices[0] = this.m_vertex1;\n      proxy.m_vertices[1] = this.m_vertex2;\n      proxy.m_vertices.length = 2;\n      proxy.m_count = 2;\n      proxy.m_radius = this.m_radius;\n    };\n    EdgeShape2.TYPE = \"edge\";\n    return EdgeShape2;\n  }(Shape)\n);\nvar v1$1 = vec2(0, 0);\nvar v2 = vec2(0, 0);\nvar ChainShape = (\n  /** @class */\n  function(_super) {\n    __extends(ChainShape2, _super);\n    function ChainShape2(vertices, loop) {\n      var _this = this;\n      if (!(_this instanceof ChainShape2)) {\n        return new ChainShape2(vertices, loop);\n      }\n      _this = _super.call(this) || this;\n      _this.m_type = ChainShape2.TYPE;\n      _this.m_radius = SettingsInternal.polygonRadius;\n      _this.m_vertices = [];\n      _this.m_count = 0;\n      _this.m_prevVertex = null;\n      _this.m_nextVertex = null;\n      _this.m_hasPrevVertex = false;\n      _this.m_hasNextVertex = false;\n      _this.m_isLoop = !!loop;\n      if (vertices && vertices.length) {\n        if (loop) {\n          _this._createLoop(vertices);\n        } else {\n          _this._createChain(vertices);\n        }\n      }\n      return _this;\n    }\n    ChainShape2.prototype._serialize = function() {\n      var data = {\n        type: this.m_type,\n        vertices: this.m_isLoop ? this.m_vertices.slice(0, this.m_vertices.length - 1) : this.m_vertices,\n        isLoop: this.m_isLoop,\n        hasPrevVertex: this.m_hasPrevVertex,\n        hasNextVertex: this.m_hasNextVertex,\n        prevVertex: null,\n        nextVertex: null\n      };\n      if (this.m_prevVertex) {\n        data.prevVertex = this.m_prevVertex;\n      }\n      if (this.m_nextVertex) {\n        data.nextVertex = this.m_nextVertex;\n      }\n      return data;\n    };\n    ChainShape2._deserialize = function(data, fixture, restore) {\n      var vertices = [];\n      if (data.vertices) {\n        for (var i = 0; i < data.vertices.length; i++) {\n          vertices.push(restore(Vec2, data.vertices[i]));\n        }\n      }\n      var shape = new ChainShape2(vertices, data.isLoop);\n      if (data.prevVertex) {\n        shape.setPrevVertex(data.prevVertex);\n      }\n      if (data.nextVertex) {\n        shape.setNextVertex(data.nextVertex);\n      }\n      return shape;\n    };\n    ChainShape2.prototype.getType = function() {\n      return this.m_type;\n    };\n    ChainShape2.prototype.getRadius = function() {\n      return this.m_radius;\n    };\n    ChainShape2.prototype._createLoop = function(vertices) {\n      if (vertices.length < 3) {\n        return;\n      }\n      var i;\n      this.m_vertices = [];\n      this.m_count = vertices.length + 1;\n      for (var i = 0; i < vertices.length; ++i) {\n        this.m_vertices[i] = Vec2.clone(vertices[i]);\n      }\n      this.m_vertices[vertices.length] = Vec2.clone(vertices[0]);\n      this.m_prevVertex = this.m_vertices[this.m_count - 2];\n      this.m_nextVertex = this.m_vertices[1];\n      this.m_hasPrevVertex = true;\n      this.m_hasNextVertex = true;\n      return this;\n    };\n    ChainShape2.prototype._createChain = function(vertices) {\n      var i;\n      this.m_vertices = [];\n      this.m_count = vertices.length;\n      for (var i = 0; i < vertices.length; ++i) {\n        this.m_vertices[i] = Vec2.clone(vertices[i]);\n      }\n      this.m_prevVertex = null;\n      this.m_nextVertex = null;\n      this.m_hasPrevVertex = false;\n      this.m_hasNextVertex = false;\n      return this;\n    };\n    ChainShape2.prototype._reset = function() {\n      if (this.m_isLoop) {\n        this._createLoop(this.m_vertices.slice(0, this.m_vertices.length - 1));\n      } else {\n        this._createChain(this.m_vertices);\n      }\n    };\n    ChainShape2.prototype.setPrevVertex = function(prevVertex) {\n      this.m_prevVertex = prevVertex;\n      this.m_hasPrevVertex = true;\n    };\n    ChainShape2.prototype.getPrevVertex = function() {\n      return this.m_prevVertex;\n    };\n    ChainShape2.prototype.setNextVertex = function(nextVertex) {\n      this.m_nextVertex = nextVertex;\n      this.m_hasNextVertex = true;\n    };\n    ChainShape2.prototype.getNextVertex = function() {\n      return this.m_nextVertex;\n    };\n    ChainShape2.prototype._clone = function() {\n      var clone = new ChainShape2();\n      clone._createChain(this.m_vertices);\n      clone.m_type = this.m_type;\n      clone.m_radius = this.m_radius;\n      clone.m_prevVertex = this.m_prevVertex;\n      clone.m_nextVertex = this.m_nextVertex;\n      clone.m_hasPrevVertex = this.m_hasPrevVertex;\n      clone.m_hasNextVertex = this.m_hasNextVertex;\n      return clone;\n    };\n    ChainShape2.prototype.getChildCount = function() {\n      return this.m_count - 1;\n    };\n    ChainShape2.prototype.getChildEdge = function(edge, childIndex) {\n      edge.m_type = EdgeShape.TYPE;\n      edge.m_radius = this.m_radius;\n      edge.m_vertex1 = this.m_vertices[childIndex];\n      edge.m_vertex2 = this.m_vertices[childIndex + 1];\n      if (childIndex > 0) {\n        edge.m_vertex0 = this.m_vertices[childIndex - 1];\n        edge.m_hasVertex0 = true;\n      } else {\n        edge.m_vertex0 = this.m_prevVertex;\n        edge.m_hasVertex0 = this.m_hasPrevVertex;\n      }\n      if (childIndex < this.m_count - 2) {\n        edge.m_vertex3 = this.m_vertices[childIndex + 2];\n        edge.m_hasVertex3 = true;\n      } else {\n        edge.m_vertex3 = this.m_nextVertex;\n        edge.m_hasVertex3 = this.m_hasNextVertex;\n      }\n    };\n    ChainShape2.prototype.getVertex = function(index) {\n      if (index < this.m_count) {\n        return this.m_vertices[index];\n      } else {\n        return this.m_vertices[0];\n      }\n    };\n    ChainShape2.prototype.isLoop = function() {\n      return this.m_isLoop;\n    };\n    ChainShape2.prototype.testPoint = function(xf2, p) {\n      return false;\n    };\n    ChainShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) {\n      var edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1));\n      return edgeShape.rayCast(output2, input2, xf2, 0);\n    };\n    ChainShape2.prototype.computeAABB = function(aabb, xf2, childIndex) {\n      transformVec2(v1$1, xf2, this.getVertex(childIndex));\n      transformVec2(v2, xf2, this.getVertex(childIndex + 1));\n      AABB.combinePoints(aabb, v1$1, v2);\n    };\n    ChainShape2.prototype.computeMass = function(massData, density) {\n      massData.mass = 0;\n      zeroVec2(massData.center);\n      massData.I = 0;\n    };\n    ChainShape2.prototype.computeDistanceProxy = function(proxy, childIndex) {\n      proxy.m_vertices[0] = this.getVertex(childIndex);\n      proxy.m_vertices[1] = this.getVertex(childIndex + 1);\n      proxy.m_count = 2;\n      proxy.m_radius = this.m_radius;\n    };\n    ChainShape2.TYPE = \"chain\";\n    return ChainShape2;\n  }(Shape)\n);\nvar math_max$1 = Math.max;\nvar math_min$3 = Math.min;\nvar temp$1 = vec2(0, 0);\nvar e$1 = vec2(0, 0);\nvar e1$1 = vec2(0, 0);\nvar e2$1 = vec2(0, 0);\nvar center = vec2(0, 0);\nvar s = vec2(0, 0);\nvar PolygonShape = (\n  /** @class */\n  function(_super) {\n    __extends(PolygonShape2, _super);\n    function PolygonShape2(vertices) {\n      var _this = this;\n      if (!(_this instanceof PolygonShape2)) {\n        return new PolygonShape2(vertices);\n      }\n      _this = _super.call(this) || this;\n      _this.m_type = PolygonShape2.TYPE;\n      _this.m_radius = SettingsInternal.polygonRadius;\n      _this.m_centroid = Vec2.zero();\n      _this.m_vertices = [];\n      _this.m_normals = [];\n      _this.m_count = 0;\n      if (vertices && vertices.length) {\n        _this._set(vertices);\n      }\n      return _this;\n    }\n    PolygonShape2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        vertices: this.m_vertices\n      };\n    };\n    PolygonShape2._deserialize = function(data, fixture, restore) {\n      var vertices = [];\n      if (data.vertices) {\n        for (var i = 0; i < data.vertices.length; i++) {\n          vertices.push(restore(Vec2, data.vertices[i]));\n        }\n      }\n      var shape = new PolygonShape2(vertices);\n      return shape;\n    };\n    PolygonShape2.prototype.getType = function() {\n      return this.m_type;\n    };\n    PolygonShape2.prototype.getRadius = function() {\n      return this.m_radius;\n    };\n    PolygonShape2.prototype._clone = function() {\n      var clone = new PolygonShape2();\n      clone.m_type = this.m_type;\n      clone.m_radius = this.m_radius;\n      clone.m_count = this.m_count;\n      clone.m_centroid.setVec2(this.m_centroid);\n      for (var i = 0; i < this.m_count; i++) {\n        clone.m_vertices.push(this.m_vertices[i].clone());\n      }\n      for (var i = 0; i < this.m_normals.length; i++) {\n        clone.m_normals.push(this.m_normals[i].clone());\n      }\n      return clone;\n    };\n    PolygonShape2.prototype.getChildCount = function() {\n      return 1;\n    };\n    PolygonShape2.prototype._reset = function() {\n      this._set(this.m_vertices);\n    };\n    PolygonShape2.prototype._set = function(vertices) {\n      if (vertices.length < 3) {\n        this._setAsBox(1, 1);\n        return;\n      }\n      var n2 = math_min$3(vertices.length, SettingsInternal.maxPolygonVertices);\n      var ps = [];\n      for (var i = 0; i < n2; ++i) {\n        var v3 = vertices[i];\n        var unique = true;\n        for (var j = 0; j < ps.length; ++j) {\n          if (Vec2.distanceSquared(v3, ps[j]) < 0.25 * SettingsInternal.linearSlopSquared) {\n            unique = false;\n            break;\n          }\n        }\n        if (unique) {\n          ps.push(Vec2.clone(v3));\n        }\n      }\n      n2 = ps.length;\n      if (n2 < 3) {\n        this._setAsBox(1, 1);\n        return;\n      }\n      var i0 = 0;\n      var x0 = ps[0].x;\n      for (var i = 1; i < n2; ++i) {\n        var x2 = ps[i].x;\n        if (x2 > x0 || x2 === x0 && ps[i].y < ps[i0].y) {\n          i0 = i;\n          x0 = x2;\n        }\n      }\n      var hull = [];\n      var m = 0;\n      var ih = i0;\n      while (true) {\n        hull[m] = ih;\n        var ie2 = 0;\n        for (var j = 1; j < n2; ++j) {\n          if (ie2 === ih) {\n            ie2 = j;\n            continue;\n          }\n          var r = Vec2.sub(ps[ie2], ps[hull[m]]);\n          var v3 = Vec2.sub(ps[j], ps[hull[m]]);\n          var c2 = Vec2.crossVec2Vec2(r, v3);\n          if (c2 < 0) {\n            ie2 = j;\n          }\n          if (c2 === 0 && v3.lengthSquared() > r.lengthSquared()) {\n            ie2 = j;\n          }\n        }\n        ++m;\n        ih = ie2;\n        if (ie2 === i0) {\n          break;\n        }\n      }\n      if (m < 3) {\n        this._setAsBox(1, 1);\n        return;\n      }\n      this.m_count = m;\n      this.m_vertices = [];\n      for (var i = 0; i < m; ++i) {\n        this.m_vertices[i] = ps[hull[i]];\n      }\n      for (var i = 0; i < m; ++i) {\n        var i1 = i;\n        var i2 = i + 1 < m ? i + 1 : 0;\n        var edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]);\n        this.m_normals[i] = Vec2.crossVec2Num(edge, 1);\n        this.m_normals[i].normalize();\n      }\n      this.m_centroid = computeCentroid(this.m_vertices, m);\n    };\n    PolygonShape2.prototype._setAsBox = function(hx, hy, center2, angle) {\n      this.m_vertices[0] = Vec2.neo(hx, -hy);\n      this.m_vertices[1] = Vec2.neo(hx, hy);\n      this.m_vertices[2] = Vec2.neo(-hx, hy);\n      this.m_vertices[3] = Vec2.neo(-hx, -hy);\n      this.m_normals[0] = Vec2.neo(1, 0);\n      this.m_normals[1] = Vec2.neo(0, 1);\n      this.m_normals[2] = Vec2.neo(-1, 0);\n      this.m_normals[3] = Vec2.neo(0, -1);\n      this.m_count = 4;\n      if (center2 && Vec2.isValid(center2)) {\n        angle = angle || 0;\n        copyVec2(this.m_centroid, center2);\n        var xf2 = Transform.identity();\n        xf2.p.setVec2(center2);\n        xf2.q.setAngle(angle);\n        for (var i = 0; i < this.m_count; ++i) {\n          this.m_vertices[i] = Transform.mulVec2(xf2, this.m_vertices[i]);\n          this.m_normals[i] = Rot.mulVec2(xf2.q, this.m_normals[i]);\n        }\n      }\n    };\n    PolygonShape2.prototype.testPoint = function(xf2, p) {\n      var pLocal = detransformVec2(temp$1, xf2, p);\n      for (var i = 0; i < this.m_count; ++i) {\n        var dot = dotVec2(this.m_normals[i], pLocal) - dotVec2(this.m_normals[i], this.m_vertices[i]);\n        if (dot > 0) {\n          return false;\n        }\n      }\n      return true;\n    };\n    PolygonShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) {\n      var p1 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p1, xf2.p));\n      var p2 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p2, xf2.p));\n      var d2 = Vec2.sub(p2, p1);\n      var lower = 0;\n      var upper = input2.maxFraction;\n      var index = -1;\n      for (var i = 0; i < this.m_count; ++i) {\n        var numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1));\n        var denominator = Vec2.dot(this.m_normals[i], d2);\n        if (denominator == 0) {\n          if (numerator < 0) {\n            return false;\n          }\n        } else {\n          if (denominator < 0 && numerator < lower * denominator) {\n            lower = numerator / denominator;\n            index = i;\n          } else if (denominator > 0 && numerator < upper * denominator) {\n            upper = numerator / denominator;\n          }\n        }\n        if (upper < lower) {\n          return false;\n        }\n      }\n      if (index >= 0) {\n        output2.fraction = lower;\n        output2.normal = Rot.mulVec2(xf2.q, this.m_normals[index]);\n        return true;\n      }\n      return false;\n    };\n    PolygonShape2.prototype.computeAABB = function(aabb, xf2, childIndex) {\n      var minX = Infinity;\n      var minY = Infinity;\n      var maxX = -Infinity;\n      var maxY = -Infinity;\n      for (var i = 0; i < this.m_count; ++i) {\n        var v3 = transformVec2(temp$1, xf2, this.m_vertices[i]);\n        minX = math_min$3(minX, v3.x);\n        maxX = math_max$1(maxX, v3.x);\n        minY = math_min$3(minY, v3.y);\n        maxY = math_max$1(maxY, v3.y);\n      }\n      setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius);\n      setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius);\n    };\n    PolygonShape2.prototype.computeMass = function(massData, density) {\n      zeroVec2(center);\n      var area = 0;\n      var I = 0;\n      zeroVec2(s);\n      for (var i = 0; i < this.m_count; ++i) {\n        plusVec2(s, this.m_vertices[i]);\n      }\n      scaleVec2(s, 1 / this.m_count, s);\n      var k_inv3 = 1 / 3;\n      for (var i = 0; i < this.m_count; ++i) {\n        subVec2(e1$1, this.m_vertices[i], s);\n        if (i + 1 < this.m_count) {\n          subVec2(e2$1, this.m_vertices[i + 1], s);\n        } else {\n          subVec2(e2$1, this.m_vertices[0], s);\n        }\n        var D = crossVec2Vec2(e1$1, e2$1);\n        var triangleArea = 0.5 * D;\n        area += triangleArea;\n        combine2Vec2(temp$1, triangleArea * k_inv3, e1$1, triangleArea * k_inv3, e2$1);\n        plusVec2(center, temp$1);\n        var ex1 = e1$1.x;\n        var ey1 = e1$1.y;\n        var ex2 = e2$1.x;\n        var ey2 = e2$1.y;\n        var intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2;\n        var inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2;\n        I += 0.25 * k_inv3 * D * (intx2 + inty2);\n      }\n      massData.mass = density * area;\n      scaleVec2(center, 1 / area, center);\n      addVec2(massData.center, center, s);\n      massData.I = density * I;\n      massData.I += massData.mass * (dotVec2(massData.center, massData.center) - dotVec2(center, center));\n    };\n    PolygonShape2.prototype.validate = function() {\n      for (var i = 0; i < this.m_count; ++i) {\n        var i1 = i;\n        var i2 = i < this.m_count - 1 ? i1 + 1 : 0;\n        var p = this.m_vertices[i1];\n        subVec2(e$1, this.m_vertices[i2], p);\n        for (var j = 0; j < this.m_count; ++j) {\n          if (j == i1 || j == i2) {\n            continue;\n          }\n          var c2 = crossVec2Vec2(e$1, subVec2(temp$1, this.m_vertices[j], p));\n          if (c2 < 0) {\n            return false;\n          }\n        }\n      }\n      return true;\n    };\n    PolygonShape2.prototype.computeDistanceProxy = function(proxy) {\n      for (var i = 0; i < this.m_count; ++i) {\n        proxy.m_vertices[i] = this.m_vertices[i];\n      }\n      proxy.m_vertices.length = this.m_count;\n      proxy.m_count = this.m_count;\n      proxy.m_radius = this.m_radius;\n    };\n    PolygonShape2.TYPE = \"polygon\";\n    return PolygonShape2;\n  }(Shape)\n);\nfunction computeCentroid(vs, count) {\n  var c2 = Vec2.zero();\n  var area = 0;\n  var pRef = Vec2.zero();\n  var i;\n  var inv3 = 1 / 3;\n  for (var i = 0; i < count; ++i) {\n    var p1 = pRef;\n    var p2 = vs[i];\n    var p3 = i + 1 < count ? vs[i + 1] : vs[0];\n    var e1_1 = Vec2.sub(p2, p1);\n    var e2_1 = Vec2.sub(p3, p1);\n    var D = Vec2.crossVec2Vec2(e1_1, e2_1);\n    var triangleArea = 0.5 * D;\n    area += triangleArea;\n    combine3Vec2(temp$1, 1, p1, 1, p2, 1, p3);\n    plusScaleVec2(c2, triangleArea * inv3, temp$1);\n  }\n  c2.mul(1 / area);\n  return c2;\n}\nvar math_sqrt = Math.sqrt;\nvar math_PI$4 = Math.PI;\nvar temp = vec2(0, 0);\nvar CircleShape = (\n  /** @class */\n  function(_super) {\n    __extends(CircleShape2, _super);\n    function CircleShape2(a2, b2) {\n      var _this = this;\n      if (!(_this instanceof CircleShape2)) {\n        return new CircleShape2(a2, b2);\n      }\n      _this = _super.call(this) || this;\n      _this.m_type = CircleShape2.TYPE;\n      _this.m_p = Vec2.zero();\n      _this.m_radius = 1;\n      if (typeof a2 === \"object\" && Vec2.isValid(a2)) {\n        _this.m_p.setVec2(a2);\n        if (typeof b2 === \"number\") {\n          _this.m_radius = b2;\n        }\n      } else if (typeof a2 === \"number\") {\n        _this.m_radius = a2;\n      }\n      return _this;\n    }\n    CircleShape2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        p: this.m_p,\n        radius: this.m_radius\n      };\n    };\n    CircleShape2._deserialize = function(data) {\n      return new CircleShape2(data.p, data.radius);\n    };\n    CircleShape2.prototype._reset = function() {\n    };\n    CircleShape2.prototype.getType = function() {\n      return this.m_type;\n    };\n    CircleShape2.prototype.getRadius = function() {\n      return this.m_radius;\n    };\n    CircleShape2.prototype.getCenter = function() {\n      return this.m_p;\n    };\n    CircleShape2.prototype._clone = function() {\n      var clone = new CircleShape2();\n      clone.m_type = this.m_type;\n      clone.m_radius = this.m_radius;\n      clone.m_p = this.m_p.clone();\n      return clone;\n    };\n    CircleShape2.prototype.getChildCount = function() {\n      return 1;\n    };\n    CircleShape2.prototype.testPoint = function(xf2, p) {\n      var center2 = transformVec2(temp, xf2, this.m_p);\n      return distSqrVec2(p, center2) <= this.m_radius * this.m_radius;\n    };\n    CircleShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) {\n      var position = Vec2.add(xf2.p, Rot.mulVec2(xf2.q, this.m_p));\n      var s2 = Vec2.sub(input2.p1, position);\n      var b2 = Vec2.dot(s2, s2) - this.m_radius * this.m_radius;\n      var r = Vec2.sub(input2.p2, input2.p1);\n      var c2 = Vec2.dot(s2, r);\n      var rr = Vec2.dot(r, r);\n      var sigma = c2 * c2 - rr * b2;\n      if (sigma < 0 || rr < EPSILON) {\n        return false;\n      }\n      var a2 = -(c2 + math_sqrt(sigma));\n      if (0 <= a2 && a2 <= input2.maxFraction * rr) {\n        a2 /= rr;\n        output2.fraction = a2;\n        output2.normal = Vec2.add(s2, Vec2.mulNumVec2(a2, r));\n        output2.normal.normalize();\n        return true;\n      }\n      return false;\n    };\n    CircleShape2.prototype.computeAABB = function(aabb, xf2, childIndex) {\n      var p = transformVec2(temp, xf2, this.m_p);\n      setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius);\n      setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius);\n    };\n    CircleShape2.prototype.computeMass = function(massData, density) {\n      massData.mass = density * math_PI$4 * this.m_radius * this.m_radius;\n      copyVec2(massData.center, this.m_p);\n      massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + lengthSqrVec2(this.m_p));\n    };\n    CircleShape2.prototype.computeDistanceProxy = function(proxy) {\n      proxy.m_vertices[0] = this.m_p;\n      proxy.m_vertices.length = 1;\n      proxy.m_count = 1;\n      proxy.m_radius = this.m_radius;\n    };\n    CircleShape2.TYPE = \"circle\";\n    return CircleShape2;\n  }(Shape)\n);\nvar math_abs$5 = Math.abs;\nvar math_PI$3 = Math.PI;\nvar DEFAULTS$a = {\n  frequencyHz: 0,\n  dampingRatio: 0\n};\nvar DistanceJoint = (\n  /** @class */\n  function(_super) {\n    __extends(DistanceJoint2, _super);\n    function DistanceJoint2(def, bodyA, bodyB, anchorA, anchorB) {\n      var _this = this;\n      if (!(_this instanceof DistanceJoint2)) {\n        return new DistanceJoint2(def, bodyA, bodyB, anchorA, anchorB);\n      }\n      if (bodyB && anchorA && \"m_type\" in anchorA && \"x\" in bodyB && \"y\" in bodyB) {\n        var temp3 = bodyB;\n        bodyB = anchorA;\n        anchorA = temp3;\n      }\n      def = options(def, DEFAULTS$a);\n      _this = _super.call(this, def, bodyA, bodyB) || this;\n      bodyA = _this.m_bodyA;\n      bodyB = _this.m_bodyB;\n      _this.m_type = DistanceJoint2.TYPE;\n      _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.zero());\n      _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.zero());\n      _this.m_length = Number.isFinite(def.length) ? def.length : Vec2.distance(bodyA.getWorldPoint(_this.m_localAnchorA), bodyB.getWorldPoint(_this.m_localAnchorB));\n      _this.m_frequencyHz = def.frequencyHz;\n      _this.m_dampingRatio = def.dampingRatio;\n      _this.m_impulse = 0;\n      _this.m_gamma = 0;\n      _this.m_bias = 0;\n      return _this;\n    }\n    DistanceJoint2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        bodyA: this.m_bodyA,\n        bodyB: this.m_bodyB,\n        collideConnected: this.m_collideConnected,\n        frequencyHz: this.m_frequencyHz,\n        dampingRatio: this.m_dampingRatio,\n        localAnchorA: this.m_localAnchorA,\n        localAnchorB: this.m_localAnchorB,\n        length: this.m_length,\n        impulse: this.m_impulse,\n        gamma: this.m_gamma,\n        bias: this.m_bias\n      };\n    };\n    DistanceJoint2._deserialize = function(data, world, restore) {\n      data = __assign({}, data);\n      data.bodyA = restore(Body, data.bodyA, world);\n      data.bodyB = restore(Body, data.bodyB, world);\n      var joint = new DistanceJoint2(data);\n      return joint;\n    };\n    DistanceJoint2.prototype._reset = function(def) {\n      if (def.anchorA) {\n        this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA));\n      } else if (def.localAnchorA) {\n        this.m_localAnchorA.setVec2(def.localAnchorA);\n      }\n      if (def.anchorB) {\n        this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB));\n      } else if (def.localAnchorB) {\n        this.m_localAnchorB.setVec2(def.localAnchorB);\n      }\n      if (def.length > 0) {\n        this.m_length = +def.length;\n      } else if (def.length < 0) ;\n      else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) {\n        this.m_length = Vec2.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA), this.m_bodyB.getWorldPoint(this.m_localAnchorB));\n      }\n      if (Number.isFinite(def.frequencyHz)) {\n        this.m_frequencyHz = def.frequencyHz;\n      }\n      if (Number.isFinite(def.dampingRatio)) {\n        this.m_dampingRatio = def.dampingRatio;\n      }\n    };\n    DistanceJoint2.prototype.getLocalAnchorA = function() {\n      return this.m_localAnchorA;\n    };\n    DistanceJoint2.prototype.getLocalAnchorB = function() {\n      return this.m_localAnchorB;\n    };\n    DistanceJoint2.prototype.setLength = function(length) {\n      this.m_length = length;\n    };\n    DistanceJoint2.prototype.getLength = function() {\n      return this.m_length;\n    };\n    DistanceJoint2.prototype.setFrequency = function(hz) {\n      this.m_frequencyHz = hz;\n    };\n    DistanceJoint2.prototype.getFrequency = function() {\n      return this.m_frequencyHz;\n    };\n    DistanceJoint2.prototype.setDampingRatio = function(ratio) {\n      this.m_dampingRatio = ratio;\n    };\n    DistanceJoint2.prototype.getDampingRatio = function() {\n      return this.m_dampingRatio;\n    };\n    DistanceJoint2.prototype.getAnchorA = function() {\n      return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n    };\n    DistanceJoint2.prototype.getAnchorB = function() {\n      return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n    };\n    DistanceJoint2.prototype.getReactionForce = function(inv_dt) {\n      return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n    };\n    DistanceJoint2.prototype.getReactionTorque = function(inv_dt) {\n      return 0;\n    };\n    DistanceJoint2.prototype.initVelocityConstraints = function(step) {\n      this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n      this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n      this.m_invMassA = this.m_bodyA.m_invMass;\n      this.m_invMassB = this.m_bodyB.m_invMass;\n      this.m_invIA = this.m_bodyA.m_invI;\n      this.m_invIB = this.m_bodyB.m_invI;\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n      this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n      this.m_u = Vec2.sub(Vec2.add(cB2, this.m_rB), Vec2.add(cA2, this.m_rA));\n      var length = this.m_u.length();\n      if (length > SettingsInternal.linearSlop) {\n        this.m_u.mul(1 / length);\n      } else {\n        this.m_u.setNum(0, 0);\n      }\n      var crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n      var crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n      var invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu;\n      this.m_mass = invMass != 0 ? 1 / invMass : 0;\n      if (this.m_frequencyHz > 0) {\n        var C = length - this.m_length;\n        var omega = 2 * math_PI$3 * this.m_frequencyHz;\n        var d2 = 2 * this.m_mass * this.m_dampingRatio * omega;\n        var k = this.m_mass * omega * omega;\n        var h = step.dt;\n        this.m_gamma = h * (d2 + h * k);\n        this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0;\n        this.m_bias = C * h * k * this.m_gamma;\n        invMass += this.m_gamma;\n        this.m_mass = invMass != 0 ? 1 / invMass : 0;\n      } else {\n        this.m_gamma = 0;\n        this.m_bias = 0;\n      }\n      if (step.warmStarting) {\n        this.m_impulse *= step.dtRatio;\n        var P3 = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n        vA2.subMul(this.m_invMassA, P3);\n        wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3);\n        vB2.addMul(this.m_invMassB, P3);\n        wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3);\n      } else {\n        this.m_impulse = 0;\n      }\n      this.m_bodyA.c_velocity.v.setVec2(vA2);\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v.setVec2(vB2);\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    DistanceJoint2.prototype.solveVelocityConstraints = function(step) {\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var vpA = Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA));\n      var vpB = Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB));\n      var Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA);\n      var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse);\n      this.m_impulse += impulse;\n      var P3 = Vec2.mulNumVec2(impulse, this.m_u);\n      vA2.subMul(this.m_invMassA, P3);\n      wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3);\n      vB2.addMul(this.m_invMassB, P3);\n      wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3);\n      this.m_bodyA.c_velocity.v.setVec2(vA2);\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v.setVec2(vB2);\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    DistanceJoint2.prototype.solvePositionConstraints = function(step) {\n      if (this.m_frequencyHz > 0) {\n        return true;\n      }\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n      var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n      var u = Vec2.sub(Vec2.add(cB2, rB2), Vec2.add(cA2, rA2));\n      var length = u.normalize();\n      var C = clamp(length - this.m_length, -SettingsInternal.maxLinearCorrection, SettingsInternal.maxLinearCorrection);\n      var impulse = -this.m_mass * C;\n      var P3 = Vec2.mulNumVec2(impulse, u);\n      cA2.subMul(this.m_invMassA, P3);\n      aA -= this.m_invIA * Vec2.crossVec2Vec2(rA2, P3);\n      cB2.addMul(this.m_invMassB, P3);\n      aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, P3);\n      this.m_bodyA.c_position.c.setVec2(cA2);\n      this.m_bodyA.c_position.a = aA;\n      this.m_bodyB.c_position.c.setVec2(cB2);\n      this.m_bodyB.c_position.a = aB;\n      return math_abs$5(C) < SettingsInternal.linearSlop;\n    };\n    DistanceJoint2.TYPE = \"distance-joint\";\n    return DistanceJoint2;\n  }(Joint)\n);\nvar DEFAULTS$9 = {\n  maxForce: 0,\n  maxTorque: 0\n};\nvar FrictionJoint = (\n  /** @class */\n  function(_super) {\n    __extends(FrictionJoint2, _super);\n    function FrictionJoint2(def, bodyA, bodyB, anchor) {\n      var _this = this;\n      if (!(_this instanceof FrictionJoint2)) {\n        return new FrictionJoint2(def, bodyA, bodyB, anchor);\n      }\n      def = options(def, DEFAULTS$9);\n      _this = _super.call(this, def, bodyA, bodyB) || this;\n      bodyA = _this.m_bodyA;\n      bodyB = _this.m_bodyB;\n      _this.m_type = FrictionJoint2.TYPE;\n      _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero());\n      _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero());\n      _this.m_linearImpulse = Vec2.zero();\n      _this.m_angularImpulse = 0;\n      _this.m_maxForce = def.maxForce;\n      _this.m_maxTorque = def.maxTorque;\n      return _this;\n    }\n    FrictionJoint2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        bodyA: this.m_bodyA,\n        bodyB: this.m_bodyB,\n        collideConnected: this.m_collideConnected,\n        maxForce: this.m_maxForce,\n        maxTorque: this.m_maxTorque,\n        localAnchorA: this.m_localAnchorA,\n        localAnchorB: this.m_localAnchorB\n      };\n    };\n    FrictionJoint2._deserialize = function(data, world, restore) {\n      data = __assign({}, data);\n      data.bodyA = restore(Body, data.bodyA, world);\n      data.bodyB = restore(Body, data.bodyB, world);\n      var joint = new FrictionJoint2(data);\n      return joint;\n    };\n    FrictionJoint2.prototype._reset = function(def) {\n      if (def.anchorA) {\n        this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA));\n      } else if (def.localAnchorA) {\n        this.m_localAnchorA.setVec2(def.localAnchorA);\n      }\n      if (def.anchorB) {\n        this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB));\n      } else if (def.localAnchorB) {\n        this.m_localAnchorB.setVec2(def.localAnchorB);\n      }\n      if (Number.isFinite(def.maxForce)) {\n        this.m_maxForce = def.maxForce;\n      }\n      if (Number.isFinite(def.maxTorque)) {\n        this.m_maxTorque = def.maxTorque;\n      }\n    };\n    FrictionJoint2.prototype.getLocalAnchorA = function() {\n      return this.m_localAnchorA;\n    };\n    FrictionJoint2.prototype.getLocalAnchorB = function() {\n      return this.m_localAnchorB;\n    };\n    FrictionJoint2.prototype.setMaxForce = function(force) {\n      this.m_maxForce = force;\n    };\n    FrictionJoint2.prototype.getMaxForce = function() {\n      return this.m_maxForce;\n    };\n    FrictionJoint2.prototype.setMaxTorque = function(torque) {\n      this.m_maxTorque = torque;\n    };\n    FrictionJoint2.prototype.getMaxTorque = function() {\n      return this.m_maxTorque;\n    };\n    FrictionJoint2.prototype.getAnchorA = function() {\n      return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n    };\n    FrictionJoint2.prototype.getAnchorB = function() {\n      return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n    };\n    FrictionJoint2.prototype.getReactionForce = function(inv_dt) {\n      return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n    };\n    FrictionJoint2.prototype.getReactionTorque = function(inv_dt) {\n      return inv_dt * this.m_angularImpulse;\n    };\n    FrictionJoint2.prototype.initVelocityConstraints = function(step) {\n      this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n      this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n      this.m_invMassA = this.m_bodyA.m_invMass;\n      this.m_invMassB = this.m_bodyB.m_invMass;\n      this.m_invIA = this.m_bodyA.m_invI;\n      this.m_invIB = this.m_bodyB.m_invI;\n      var aA = this.m_bodyA.c_position.a;\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var aB = this.m_bodyB.c_position.a;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n      this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      var K = new Mat22();\n      K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y;\n      K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y;\n      K.ey.x = K.ex.y;\n      K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x;\n      this.m_linearMass = K.getInverse();\n      this.m_angularMass = iA + iB;\n      if (this.m_angularMass > 0) {\n        this.m_angularMass = 1 / this.m_angularMass;\n      }\n      if (step.warmStarting) {\n        this.m_linearImpulse.mul(step.dtRatio);\n        this.m_angularImpulse *= step.dtRatio;\n        var P3 = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n        vA2.subMul(mA, P3);\n        wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_angularImpulse);\n        vB2.addMul(mB, P3);\n        wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_angularImpulse);\n      } else {\n        this.m_linearImpulse.setZero();\n        this.m_angularImpulse = 0;\n      }\n      this.m_bodyA.c_velocity.v = vA2;\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v = vB2;\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    FrictionJoint2.prototype.solveVelocityConstraints = function(step) {\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      var h = step.dt;\n      {\n        var Cdot = wB - wA;\n        var impulse = -this.m_angularMass * Cdot;\n        var oldImpulse = this.m_angularImpulse;\n        var maxImpulse = h * this.m_maxTorque;\n        this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n        impulse = this.m_angularImpulse - oldImpulse;\n        wA -= iA * impulse;\n        wB += iB * impulse;\n      }\n      {\n        var Cdot = Vec2.sub(Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)), Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA)));\n        var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n        var oldImpulse = this.m_linearImpulse;\n        this.m_linearImpulse.add(impulse);\n        var maxImpulse = h * this.m_maxForce;\n        if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {\n          this.m_linearImpulse.normalize();\n          this.m_linearImpulse.mul(maxImpulse);\n        }\n        impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n        vA2.subMul(mA, impulse);\n        wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n        vB2.addMul(mB, impulse);\n        wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n      }\n      this.m_bodyA.c_velocity.v = vA2;\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v = vB2;\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    FrictionJoint2.prototype.solvePositionConstraints = function(step) {\n      return true;\n    };\n    FrictionJoint2.TYPE = \"friction-joint\";\n    return FrictionJoint2;\n  }(Joint)\n);\nvar Mat33 = (\n  /** @class */\n  function() {\n    function Mat332(a2, b2, c2) {\n      if (typeof a2 === \"object\" && a2 !== null) {\n        this.ex = Vec3.clone(a2);\n        this.ey = Vec3.clone(b2);\n        this.ez = Vec3.clone(c2);\n      } else {\n        this.ex = Vec3.zero();\n        this.ey = Vec3.zero();\n        this.ez = Vec3.zero();\n      }\n    }\n    Mat332.prototype.toString = function() {\n      return JSON.stringify(this);\n    };\n    Mat332.isValid = function(obj) {\n      if (obj === null || typeof obj === \"undefined\") {\n        return false;\n      }\n      return Vec3.isValid(obj.ex) && Vec3.isValid(obj.ey) && Vec3.isValid(obj.ez);\n    };\n    Mat332.assert = function(o) {\n    };\n    Mat332.prototype.setZero = function() {\n      this.ex.setZero();\n      this.ey.setZero();\n      this.ez.setZero();\n      return this;\n    };\n    Mat332.prototype.solve33 = function(v3) {\n      var cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n      var cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n      var cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n      var det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z;\n      if (det !== 0) {\n        det = 1 / det;\n      }\n      var r = new Vec3();\n      cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n      cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n      cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n      r.x = det * (v3.x * cross_x + v3.y * cross_y + v3.z * cross_z);\n      cross_x = v3.y * this.ez.z - v3.z * this.ez.y;\n      cross_y = v3.z * this.ez.x - v3.x * this.ez.z;\n      cross_z = v3.x * this.ez.y - v3.y * this.ez.x;\n      r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n      cross_x = this.ey.y * v3.z - this.ey.z * v3.y;\n      cross_y = this.ey.z * v3.x - this.ey.x * v3.z;\n      cross_z = this.ey.x * v3.y - this.ey.y * v3.x;\n      r.z = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n      return r;\n    };\n    Mat332.prototype.solve22 = function(v3) {\n      var a11 = this.ex.x;\n      var a12 = this.ey.x;\n      var a21 = this.ex.y;\n      var a22 = this.ey.y;\n      var det = a11 * a22 - a12 * a21;\n      if (det !== 0) {\n        det = 1 / det;\n      }\n      var r = Vec2.zero();\n      r.x = det * (a22 * v3.x - a12 * v3.y);\n      r.y = det * (a11 * v3.y - a21 * v3.x);\n      return r;\n    };\n    Mat332.prototype.getInverse22 = function(M) {\n      var a2 = this.ex.x;\n      var b2 = this.ey.x;\n      var c2 = this.ex.y;\n      var d2 = this.ey.y;\n      var det = a2 * d2 - b2 * c2;\n      if (det !== 0) {\n        det = 1 / det;\n      }\n      M.ex.x = det * d2;\n      M.ey.x = -det * b2;\n      M.ex.z = 0;\n      M.ex.y = -det * c2;\n      M.ey.y = det * a2;\n      M.ey.z = 0;\n      M.ez.x = 0;\n      M.ez.y = 0;\n      M.ez.z = 0;\n    };\n    Mat332.prototype.getSymInverse33 = function(M) {\n      var det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez));\n      if (det !== 0) {\n        det = 1 / det;\n      }\n      var a11 = this.ex.x;\n      var a12 = this.ey.x;\n      var a13 = this.ez.x;\n      var a22 = this.ey.y;\n      var a23 = this.ez.y;\n      var a33 = this.ez.z;\n      M.ex.x = det * (a22 * a33 - a23 * a23);\n      M.ex.y = det * (a13 * a23 - a12 * a33);\n      M.ex.z = det * (a12 * a23 - a13 * a22);\n      M.ey.x = M.ex.y;\n      M.ey.y = det * (a11 * a33 - a13 * a13);\n      M.ey.z = det * (a13 * a12 - a11 * a23);\n      M.ez.x = M.ex.z;\n      M.ez.y = M.ey.z;\n      M.ez.z = det * (a11 * a22 - a12 * a12);\n    };\n    Mat332.mul = function(a2, b2) {\n      if (b2 && \"z\" in b2 && \"y\" in b2 && \"x\" in b2) {\n        var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y + a2.ez.x * b2.z;\n        var y = a2.ex.y * b2.x + a2.ey.y * b2.y + a2.ez.y * b2.z;\n        var z = a2.ex.z * b2.x + a2.ey.z * b2.y + a2.ez.z * b2.z;\n        return new Vec3(x2, y, z);\n      } else if (b2 && \"y\" in b2 && \"x\" in b2) {\n        var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y;\n        var y = a2.ex.y * b2.x + a2.ey.y * b2.y;\n        return Vec2.neo(x2, y);\n      }\n    };\n    Mat332.mulVec3 = function(a2, b2) {\n      var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y + a2.ez.x * b2.z;\n      var y = a2.ex.y * b2.x + a2.ey.y * b2.y + a2.ez.y * b2.z;\n      var z = a2.ex.z * b2.x + a2.ey.z * b2.y + a2.ez.z * b2.z;\n      return new Vec3(x2, y, z);\n    };\n    Mat332.mulVec2 = function(a2, b2) {\n      var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y;\n      var y = a2.ex.y * b2.x + a2.ey.y * b2.y;\n      return Vec2.neo(x2, y);\n    };\n    Mat332.add = function(a2, b2) {\n      return new Mat332(Vec3.add(a2.ex, b2.ex), Vec3.add(a2.ey, b2.ey), Vec3.add(a2.ez, b2.ez));\n    };\n    return Mat332;\n  }()\n);\nvar math_abs$4 = Math.abs;\nvar LimitState$2;\n(function(LimitState2) {\n  LimitState2[LimitState2[\"inactiveLimit\"] = 0] = \"inactiveLimit\";\n  LimitState2[LimitState2[\"atLowerLimit\"] = 1] = \"atLowerLimit\";\n  LimitState2[LimitState2[\"atUpperLimit\"] = 2] = \"atUpperLimit\";\n  LimitState2[LimitState2[\"equalLimits\"] = 3] = \"equalLimits\";\n})(LimitState$2 || (LimitState$2 = {}));\nvar DEFAULTS$8 = {\n  lowerAngle: 0,\n  upperAngle: 0,\n  maxMotorTorque: 0,\n  motorSpeed: 0,\n  enableLimit: false,\n  enableMotor: false\n};\nvar RevoluteJoint = (\n  /** @class */\n  function(_super) {\n    __extends(RevoluteJoint2, _super);\n    function RevoluteJoint2(def, bodyA, bodyB, anchor) {\n      var _this = this;\n      var _a2, _b, _c, _d, _e, _f;\n      if (!(_this instanceof RevoluteJoint2)) {\n        return new RevoluteJoint2(def, bodyA, bodyB, anchor);\n      }\n      def = def !== null && def !== void 0 ? def : {};\n      _this = _super.call(this, def, bodyA, bodyB) || this;\n      bodyA = _this.m_bodyA;\n      bodyB = _this.m_bodyB;\n      _this.m_mass = new Mat33();\n      _this.m_limitState = LimitState$2.inactiveLimit;\n      _this.m_type = RevoluteJoint2.TYPE;\n      if (Vec2.isValid(anchor)) {\n        _this.m_localAnchorA = bodyA.getLocalPoint(anchor);\n      } else if (Vec2.isValid(def.localAnchorA)) {\n        _this.m_localAnchorA = Vec2.clone(def.localAnchorA);\n      } else {\n        _this.m_localAnchorA = Vec2.zero();\n      }\n      if (Vec2.isValid(anchor)) {\n        _this.m_localAnchorB = bodyB.getLocalPoint(anchor);\n      } else if (Vec2.isValid(def.localAnchorB)) {\n        _this.m_localAnchorB = Vec2.clone(def.localAnchorB);\n      } else {\n        _this.m_localAnchorB = Vec2.zero();\n      }\n      if (Number.isFinite(def.referenceAngle)) {\n        _this.m_referenceAngle = def.referenceAngle;\n      } else {\n        _this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle();\n      }\n      _this.m_impulse = new Vec3();\n      _this.m_motorImpulse = 0;\n      _this.m_lowerAngle = (_a2 = def.lowerAngle) !== null && _a2 !== void 0 ? _a2 : DEFAULTS$8.lowerAngle;\n      _this.m_upperAngle = (_b = def.upperAngle) !== null && _b !== void 0 ? _b : DEFAULTS$8.upperAngle;\n      _this.m_maxMotorTorque = (_c = def.maxMotorTorque) !== null && _c !== void 0 ? _c : DEFAULTS$8.maxMotorTorque;\n      _this.m_motorSpeed = (_d = def.motorSpeed) !== null && _d !== void 0 ? _d : DEFAULTS$8.motorSpeed;\n      _this.m_enableLimit = (_e = def.enableLimit) !== null && _e !== void 0 ? _e : DEFAULTS$8.enableLimit;\n      _this.m_enableMotor = (_f = def.enableMotor) !== null && _f !== void 0 ? _f : DEFAULTS$8.enableMotor;\n      return _this;\n    }\n    RevoluteJoint2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        bodyA: this.m_bodyA,\n        bodyB: this.m_bodyB,\n        collideConnected: this.m_collideConnected,\n        lowerAngle: this.m_lowerAngle,\n        upperAngle: this.m_upperAngle,\n        maxMotorTorque: this.m_maxMotorTorque,\n        motorSpeed: this.m_motorSpeed,\n        enableLimit: this.m_enableLimit,\n        enableMotor: this.m_enableMotor,\n        localAnchorA: this.m_localAnchorA,\n        localAnchorB: this.m_localAnchorB,\n        referenceAngle: this.m_referenceAngle\n      };\n    };\n    RevoluteJoint2._deserialize = function(data, world, restore) {\n      data = __assign({}, data);\n      data.bodyA = restore(Body, data.bodyA, world);\n      data.bodyB = restore(Body, data.bodyB, world);\n      var joint = new RevoluteJoint2(data);\n      return joint;\n    };\n    RevoluteJoint2.prototype._reset = function(def) {\n      if (def.anchorA) {\n        this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA));\n      } else if (def.localAnchorA) {\n        this.m_localAnchorA.setVec2(def.localAnchorA);\n      }\n      if (def.anchorB) {\n        this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB));\n      } else if (def.localAnchorB) {\n        this.m_localAnchorB.setVec2(def.localAnchorB);\n      }\n      if (Number.isFinite(def.referenceAngle)) {\n        this.m_referenceAngle = def.referenceAngle;\n      }\n      if (def.enableLimit !== void 0) {\n        this.m_enableLimit = def.enableLimit;\n      }\n      if (Number.isFinite(def.lowerAngle)) {\n        this.m_lowerAngle = def.lowerAngle;\n      }\n      if (Number.isFinite(def.upperAngle)) {\n        this.m_upperAngle = def.upperAngle;\n      }\n      if (Number.isFinite(def.maxMotorTorque)) {\n        this.m_maxMotorTorque = def.maxMotorTorque;\n      }\n      if (Number.isFinite(def.motorSpeed)) {\n        this.m_motorSpeed = def.motorSpeed;\n      }\n      if (def.enableMotor !== void 0) {\n        this.m_enableMotor = def.enableMotor;\n      }\n    };\n    RevoluteJoint2.prototype.getLocalAnchorA = function() {\n      return this.m_localAnchorA;\n    };\n    RevoluteJoint2.prototype.getLocalAnchorB = function() {\n      return this.m_localAnchorB;\n    };\n    RevoluteJoint2.prototype.getReferenceAngle = function() {\n      return this.m_referenceAngle;\n    };\n    RevoluteJoint2.prototype.getJointAngle = function() {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n    };\n    RevoluteJoint2.prototype.getJointSpeed = function() {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      return bB.m_angularVelocity - bA.m_angularVelocity;\n    };\n    RevoluteJoint2.prototype.isMotorEnabled = function() {\n      return this.m_enableMotor;\n    };\n    RevoluteJoint2.prototype.enableMotor = function(flag) {\n      if (flag == this.m_enableMotor)\n        return;\n      this.m_bodyA.setAwake(true);\n      this.m_bodyB.setAwake(true);\n      this.m_enableMotor = flag;\n    };\n    RevoluteJoint2.prototype.getMotorTorque = function(inv_dt) {\n      return inv_dt * this.m_motorImpulse;\n    };\n    RevoluteJoint2.prototype.setMotorSpeed = function(speed) {\n      if (speed == this.m_motorSpeed)\n        return;\n      this.m_bodyA.setAwake(true);\n      this.m_bodyB.setAwake(true);\n      this.m_motorSpeed = speed;\n    };\n    RevoluteJoint2.prototype.getMotorSpeed = function() {\n      return this.m_motorSpeed;\n    };\n    RevoluteJoint2.prototype.setMaxMotorTorque = function(torque) {\n      if (torque == this.m_maxMotorTorque)\n        return;\n      this.m_bodyA.setAwake(true);\n      this.m_bodyB.setAwake(true);\n      this.m_maxMotorTorque = torque;\n    };\n    RevoluteJoint2.prototype.getMaxMotorTorque = function() {\n      return this.m_maxMotorTorque;\n    };\n    RevoluteJoint2.prototype.isLimitEnabled = function() {\n      return this.m_enableLimit;\n    };\n    RevoluteJoint2.prototype.enableLimit = function(flag) {\n      if (flag != this.m_enableLimit) {\n        this.m_bodyA.setAwake(true);\n        this.m_bodyB.setAwake(true);\n        this.m_enableLimit = flag;\n        this.m_impulse.z = 0;\n      }\n    };\n    RevoluteJoint2.prototype.getLowerLimit = function() {\n      return this.m_lowerAngle;\n    };\n    RevoluteJoint2.prototype.getUpperLimit = function() {\n      return this.m_upperAngle;\n    };\n    RevoluteJoint2.prototype.setLimits = function(lower, upper) {\n      if (lower != this.m_lowerAngle || upper != this.m_upperAngle) {\n        this.m_bodyA.setAwake(true);\n        this.m_bodyB.setAwake(true);\n        this.m_impulse.z = 0;\n        this.m_lowerAngle = lower;\n        this.m_upperAngle = upper;\n      }\n    };\n    RevoluteJoint2.prototype.getAnchorA = function() {\n      return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n    };\n    RevoluteJoint2.prototype.getAnchorB = function() {\n      return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n    };\n    RevoluteJoint2.prototype.getReactionForce = function(inv_dt) {\n      return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n    };\n    RevoluteJoint2.prototype.getReactionTorque = function(inv_dt) {\n      return inv_dt * this.m_impulse.z;\n    };\n    RevoluteJoint2.prototype.initVelocityConstraints = function(step) {\n      this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n      this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n      this.m_invMassA = this.m_bodyA.m_invMass;\n      this.m_invMassB = this.m_bodyB.m_invMass;\n      this.m_invIA = this.m_bodyA.m_invI;\n      this.m_invIB = this.m_bodyB.m_invI;\n      var aA = this.m_bodyA.c_position.a;\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var aB = this.m_bodyB.c_position.a;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n      this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      var fixedRotation = iA + iB === 0;\n      this.m_mass.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y * iB;\n      this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB;\n      this.m_mass.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB;\n      this.m_mass.ex.y = this.m_mass.ey.x;\n      this.m_mass.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x * iB;\n      this.m_mass.ez.y = this.m_rA.x * iA + this.m_rB.x * iB;\n      this.m_mass.ex.z = this.m_mass.ez.x;\n      this.m_mass.ey.z = this.m_mass.ez.y;\n      this.m_mass.ez.z = iA + iB;\n      this.m_motorMass = iA + iB;\n      if (this.m_motorMass > 0) {\n        this.m_motorMass = 1 / this.m_motorMass;\n      }\n      if (this.m_enableMotor == false || fixedRotation) {\n        this.m_motorImpulse = 0;\n      }\n      if (this.m_enableLimit && fixedRotation == false) {\n        var jointAngle = aB - aA - this.m_referenceAngle;\n        if (math_abs$4(this.m_upperAngle - this.m_lowerAngle) < 2 * SettingsInternal.angularSlop) {\n          this.m_limitState = LimitState$2.equalLimits;\n        } else if (jointAngle <= this.m_lowerAngle) {\n          if (this.m_limitState != LimitState$2.atLowerLimit) {\n            this.m_impulse.z = 0;\n          }\n          this.m_limitState = LimitState$2.atLowerLimit;\n        } else if (jointAngle >= this.m_upperAngle) {\n          if (this.m_limitState != LimitState$2.atUpperLimit) {\n            this.m_impulse.z = 0;\n          }\n          this.m_limitState = LimitState$2.atUpperLimit;\n        } else {\n          this.m_limitState = LimitState$2.inactiveLimit;\n          this.m_impulse.z = 0;\n        }\n      } else {\n        this.m_limitState = LimitState$2.inactiveLimit;\n      }\n      if (step.warmStarting) {\n        this.m_impulse.mul(step.dtRatio);\n        this.m_motorImpulse *= step.dtRatio;\n        var P3 = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n        vA2.subMul(mA, P3);\n        wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_motorImpulse + this.m_impulse.z);\n        vB2.addMul(mB, P3);\n        wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_motorImpulse + this.m_impulse.z);\n      } else {\n        this.m_impulse.setZero();\n        this.m_motorImpulse = 0;\n      }\n      this.m_bodyA.c_velocity.v = vA2;\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v = vB2;\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    RevoluteJoint2.prototype.solveVelocityConstraints = function(step) {\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      var fixedRotation = iA + iB === 0;\n      if (this.m_enableMotor && this.m_limitState != LimitState$2.equalLimits && fixedRotation == false) {\n        var Cdot = wB - wA - this.m_motorSpeed;\n        var impulse = -this.m_motorMass * Cdot;\n        var oldImpulse = this.m_motorImpulse;\n        var maxImpulse = step.dt * this.m_maxMotorTorque;\n        this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n        impulse = this.m_motorImpulse - oldImpulse;\n        wA -= iA * impulse;\n        wB += iB * impulse;\n      }\n      if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) {\n        var Cdot1 = Vec2.zero();\n        Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB));\n        Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA));\n        var Cdot2 = wB - wA;\n        var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n        var impulse = Vec3.neg(this.m_mass.solve33(Cdot));\n        if (this.m_limitState == LimitState$2.equalLimits) {\n          this.m_impulse.add(impulse);\n        } else if (this.m_limitState == LimitState$2.atLowerLimit) {\n          var newImpulse = this.m_impulse.z + impulse.z;\n          if (newImpulse < 0) {\n            var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n            var reduced = this.m_mass.solve22(rhs);\n            impulse.x = reduced.x;\n            impulse.y = reduced.y;\n            impulse.z = -this.m_impulse.z;\n            this.m_impulse.x += reduced.x;\n            this.m_impulse.y += reduced.y;\n            this.m_impulse.z = 0;\n          } else {\n            this.m_impulse.add(impulse);\n          }\n        } else if (this.m_limitState == LimitState$2.atUpperLimit) {\n          var newImpulse = this.m_impulse.z + impulse.z;\n          if (newImpulse > 0) {\n            var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n            var reduced = this.m_mass.solve22(rhs);\n            impulse.x = reduced.x;\n            impulse.y = reduced.y;\n            impulse.z = -this.m_impulse.z;\n            this.m_impulse.x += reduced.x;\n            this.m_impulse.y += reduced.y;\n            this.m_impulse.z = 0;\n          } else {\n            this.m_impulse.add(impulse);\n          }\n        }\n        var P3 = Vec2.neo(impulse.x, impulse.y);\n        vA2.subMul(mA, P3);\n        wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + impulse.z);\n        vB2.addMul(mB, P3);\n        wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + impulse.z);\n      } else {\n        var Cdot = Vec2.zero();\n        Cdot.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB));\n        Cdot.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA));\n        var impulse = this.m_mass.solve22(Vec2.neg(Cdot));\n        this.m_impulse.x += impulse.x;\n        this.m_impulse.y += impulse.y;\n        vA2.subMul(mA, impulse);\n        wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n        vB2.addMul(mB, impulse);\n        wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n      }\n      this.m_bodyA.c_velocity.v = vA2;\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v = vB2;\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    RevoluteJoint2.prototype.solvePositionConstraints = function(step) {\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      var angularError = 0;\n      var positionError = 0;\n      var fixedRotation = this.m_invIA + this.m_invIB == 0;\n      if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) {\n        var angle = aB - aA - this.m_referenceAngle;\n        var limitImpulse = 0;\n        if (this.m_limitState == LimitState$2.equalLimits) {\n          var C = clamp(angle - this.m_lowerAngle, -SettingsInternal.maxAngularCorrection, SettingsInternal.maxAngularCorrection);\n          limitImpulse = -this.m_motorMass * C;\n          angularError = math_abs$4(C);\n        } else if (this.m_limitState == LimitState$2.atLowerLimit) {\n          var C = angle - this.m_lowerAngle;\n          angularError = -C;\n          C = clamp(C + SettingsInternal.angularSlop, -SettingsInternal.maxAngularCorrection, 0);\n          limitImpulse = -this.m_motorMass * C;\n        } else if (this.m_limitState == LimitState$2.atUpperLimit) {\n          var C = angle - this.m_upperAngle;\n          angularError = C;\n          C = clamp(C - SettingsInternal.angularSlop, 0, SettingsInternal.maxAngularCorrection);\n          limitImpulse = -this.m_motorMass * C;\n        }\n        aA -= this.m_invIA * limitImpulse;\n        aB += this.m_invIB * limitImpulse;\n      }\n      {\n        qA.setAngle(aA);\n        qB.setAngle(aB);\n        var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n        var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n        var C = Vec2.zero();\n        C.addCombine(1, cB2, 1, rB2);\n        C.subCombine(1, cA2, 1, rA2);\n        positionError = C.length();\n        var mA = this.m_invMassA;\n        var mB = this.m_invMassB;\n        var iA = this.m_invIA;\n        var iB = this.m_invIB;\n        var K = new Mat22();\n        K.ex.x = mA + mB + iA * rA2.y * rA2.y + iB * rB2.y * rB2.y;\n        K.ex.y = -iA * rA2.x * rA2.y - iB * rB2.x * rB2.y;\n        K.ey.x = K.ex.y;\n        K.ey.y = mA + mB + iA * rA2.x * rA2.x + iB * rB2.x * rB2.x;\n        var impulse = Vec2.neg(K.solve(C));\n        cA2.subMul(mA, impulse);\n        aA -= iA * Vec2.crossVec2Vec2(rA2, impulse);\n        cB2.addMul(mB, impulse);\n        aB += iB * Vec2.crossVec2Vec2(rB2, impulse);\n      }\n      this.m_bodyA.c_position.c.setVec2(cA2);\n      this.m_bodyA.c_position.a = aA;\n      this.m_bodyB.c_position.c.setVec2(cB2);\n      this.m_bodyB.c_position.a = aB;\n      return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop;\n    };\n    RevoluteJoint2.TYPE = \"revolute-joint\";\n    return RevoluteJoint2;\n  }(Joint)\n);\nvar math_abs$3 = Math.abs;\nvar math_max = Math.max;\nvar math_min$2 = Math.min;\nvar LimitState$1;\n(function(LimitState2) {\n  LimitState2[LimitState2[\"inactiveLimit\"] = 0] = \"inactiveLimit\";\n  LimitState2[LimitState2[\"atLowerLimit\"] = 1] = \"atLowerLimit\";\n  LimitState2[LimitState2[\"atUpperLimit\"] = 2] = \"atUpperLimit\";\n  LimitState2[LimitState2[\"equalLimits\"] = 3] = \"equalLimits\";\n})(LimitState$1 || (LimitState$1 = {}));\nvar DEFAULTS$7 = {\n  enableLimit: false,\n  lowerTranslation: 0,\n  upperTranslation: 0,\n  enableMotor: false,\n  maxMotorForce: 0,\n  motorSpeed: 0\n};\nvar PrismaticJoint = (\n  /** @class */\n  function(_super) {\n    __extends(PrismaticJoint2, _super);\n    function PrismaticJoint2(def, bodyA, bodyB, anchor, axis) {\n      var _this = this;\n      if (!(_this instanceof PrismaticJoint2)) {\n        return new PrismaticJoint2(def, bodyA, bodyB, anchor, axis);\n      }\n      def = options(def, DEFAULTS$7);\n      _this = _super.call(this, def, bodyA, bodyB) || this;\n      bodyA = _this.m_bodyA;\n      bodyB = _this.m_bodyB;\n      _this.m_type = PrismaticJoint2.TYPE;\n      _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero());\n      _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero());\n      _this.m_localXAxisA = Vec2.clone(axis ? bodyA.getLocalVector(axis) : def.localAxisA || Vec2.neo(1, 0));\n      _this.m_localXAxisA.normalize();\n      _this.m_localYAxisA = Vec2.crossNumVec2(1, _this.m_localXAxisA);\n      _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n      _this.m_impulse = new Vec3();\n      _this.m_motorMass = 0;\n      _this.m_motorImpulse = 0;\n      _this.m_lowerTranslation = def.lowerTranslation;\n      _this.m_upperTranslation = def.upperTranslation;\n      _this.m_maxMotorForce = def.maxMotorForce;\n      _this.m_motorSpeed = def.motorSpeed;\n      _this.m_enableLimit = def.enableLimit;\n      _this.m_enableMotor = def.enableMotor;\n      _this.m_limitState = LimitState$1.inactiveLimit;\n      _this.m_axis = Vec2.zero();\n      _this.m_perp = Vec2.zero();\n      _this.m_K = new Mat33();\n      return _this;\n    }\n    PrismaticJoint2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        bodyA: this.m_bodyA,\n        bodyB: this.m_bodyB,\n        collideConnected: this.m_collideConnected,\n        lowerTranslation: this.m_lowerTranslation,\n        upperTranslation: this.m_upperTranslation,\n        maxMotorForce: this.m_maxMotorForce,\n        motorSpeed: this.m_motorSpeed,\n        enableLimit: this.m_enableLimit,\n        enableMotor: this.m_enableMotor,\n        localAnchorA: this.m_localAnchorA,\n        localAnchorB: this.m_localAnchorB,\n        localAxisA: this.m_localXAxisA,\n        referenceAngle: this.m_referenceAngle\n      };\n    };\n    PrismaticJoint2._deserialize = function(data, world, restore) {\n      data = __assign({}, data);\n      data.bodyA = restore(Body, data.bodyA, world);\n      data.bodyB = restore(Body, data.bodyB, world);\n      data.localAxisA = Vec2.clone(data.localAxisA);\n      var joint = new PrismaticJoint2(data);\n      return joint;\n    };\n    PrismaticJoint2.prototype._reset = function(def) {\n      if (def.anchorA) {\n        this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA));\n      } else if (def.localAnchorA) {\n        this.m_localAnchorA.setVec2(def.localAnchorA);\n      }\n      if (def.anchorB) {\n        this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB));\n      } else if (def.localAnchorB) {\n        this.m_localAnchorB.setVec2(def.localAnchorB);\n      }\n      if (def.localAxisA) {\n        this.m_localXAxisA.setVec2(def.localAxisA);\n        this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1, def.localAxisA));\n      }\n      if (Number.isFinite(def.referenceAngle)) {\n        this.m_referenceAngle = def.referenceAngle;\n      }\n      if (typeof def.enableLimit !== \"undefined\") {\n        this.m_enableLimit = !!def.enableLimit;\n      }\n      if (Number.isFinite(def.lowerTranslation)) {\n        this.m_lowerTranslation = def.lowerTranslation;\n      }\n      if (Number.isFinite(def.upperTranslation)) {\n        this.m_upperTranslation = def.upperTranslation;\n      }\n      if (typeof def.enableMotor !== \"undefined\") {\n        this.m_enableMotor = !!def.enableMotor;\n      }\n      if (Number.isFinite(def.maxMotorForce)) {\n        this.m_maxMotorForce = def.maxMotorForce;\n      }\n      if (Number.isFinite(def.motorSpeed)) {\n        this.m_motorSpeed = def.motorSpeed;\n      }\n    };\n    PrismaticJoint2.prototype.getLocalAnchorA = function() {\n      return this.m_localAnchorA;\n    };\n    PrismaticJoint2.prototype.getLocalAnchorB = function() {\n      return this.m_localAnchorB;\n    };\n    PrismaticJoint2.prototype.getLocalAxisA = function() {\n      return this.m_localXAxisA;\n    };\n    PrismaticJoint2.prototype.getReferenceAngle = function() {\n      return this.m_referenceAngle;\n    };\n    PrismaticJoint2.prototype.getJointTranslation = function() {\n      var pA2 = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n      var pB2 = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n      var d2 = Vec2.sub(pB2, pA2);\n      var axis = this.m_bodyA.getWorldVector(this.m_localXAxisA);\n      var translation2 = Vec2.dot(d2, axis);\n      return translation2;\n    };\n    PrismaticJoint2.prototype.getJointSpeed = function() {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var rA2 = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter));\n      var rB2 = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter));\n      var p1 = Vec2.add(bA.m_sweep.c, rA2);\n      var p2 = Vec2.add(bB.m_sweep.c, rB2);\n      var d2 = Vec2.sub(p2, p1);\n      var axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA);\n      var vA2 = bA.m_linearVelocity;\n      var vB2 = bB.m_linearVelocity;\n      var wA = bA.m_angularVelocity;\n      var wB = bB.m_angularVelocity;\n      var speed = Vec2.dot(d2, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB2, wB, rB2), Vec2.addCrossNumVec2(vA2, wA, rA2)));\n      return speed;\n    };\n    PrismaticJoint2.prototype.isLimitEnabled = function() {\n      return this.m_enableLimit;\n    };\n    PrismaticJoint2.prototype.enableLimit = function(flag) {\n      if (flag != this.m_enableLimit) {\n        this.m_bodyA.setAwake(true);\n        this.m_bodyB.setAwake(true);\n        this.m_enableLimit = flag;\n        this.m_impulse.z = 0;\n      }\n    };\n    PrismaticJoint2.prototype.getLowerLimit = function() {\n      return this.m_lowerTranslation;\n    };\n    PrismaticJoint2.prototype.getUpperLimit = function() {\n      return this.m_upperTranslation;\n    };\n    PrismaticJoint2.prototype.setLimits = function(lower, upper) {\n      if (lower != this.m_lowerTranslation || upper != this.m_upperTranslation) {\n        this.m_bodyA.setAwake(true);\n        this.m_bodyB.setAwake(true);\n        this.m_lowerTranslation = lower;\n        this.m_upperTranslation = upper;\n        this.m_impulse.z = 0;\n      }\n    };\n    PrismaticJoint2.prototype.isMotorEnabled = function() {\n      return this.m_enableMotor;\n    };\n    PrismaticJoint2.prototype.enableMotor = function(flag) {\n      if (flag == this.m_enableMotor)\n        return;\n      this.m_bodyA.setAwake(true);\n      this.m_bodyB.setAwake(true);\n      this.m_enableMotor = flag;\n    };\n    PrismaticJoint2.prototype.setMotorSpeed = function(speed) {\n      if (speed == this.m_motorSpeed)\n        return;\n      this.m_bodyA.setAwake(true);\n      this.m_bodyB.setAwake(true);\n      this.m_motorSpeed = speed;\n    };\n    PrismaticJoint2.prototype.setMaxMotorForce = function(force) {\n      if (force == this.m_maxMotorForce)\n        return;\n      this.m_bodyA.setAwake(true);\n      this.m_bodyB.setAwake(true);\n      this.m_maxMotorForce = force;\n    };\n    PrismaticJoint2.prototype.getMaxMotorForce = function() {\n      return this.m_maxMotorForce;\n    };\n    PrismaticJoint2.prototype.getMotorSpeed = function() {\n      return this.m_motorSpeed;\n    };\n    PrismaticJoint2.prototype.getMotorForce = function(inv_dt) {\n      return inv_dt * this.m_motorImpulse;\n    };\n    PrismaticJoint2.prototype.getAnchorA = function() {\n      return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n    };\n    PrismaticJoint2.prototype.getAnchorB = function() {\n      return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n    };\n    PrismaticJoint2.prototype.getReactionForce = function(inv_dt) {\n      return Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis).mul(inv_dt);\n    };\n    PrismaticJoint2.prototype.getReactionTorque = function(inv_dt) {\n      return inv_dt * this.m_impulse.y;\n    };\n    PrismaticJoint2.prototype.initVelocityConstraints = function(step) {\n      this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n      this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n      this.m_invMassA = this.m_bodyA.m_invMass;\n      this.m_invMassB = this.m_bodyB.m_invMass;\n      this.m_invIA = this.m_bodyA.m_invI;\n      this.m_invIB = this.m_bodyB.m_invI;\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n      var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n      var d2 = Vec2.zero();\n      d2.addCombine(1, cB2, 1, rB2);\n      d2.subCombine(1, cA2, 1, rA2);\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      {\n        this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA);\n        this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_axis);\n        this.m_a2 = Vec2.crossVec2Vec2(rB2, this.m_axis);\n        this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n        if (this.m_motorMass > 0) {\n          this.m_motorMass = 1 / this.m_motorMass;\n        }\n      }\n      {\n        this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA);\n        this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_perp);\n        this.m_s2 = Vec2.crossVec2Vec2(rB2, this.m_perp);\n        Vec2.crossVec2Vec2(rA2, this.m_perp);\n        var k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2;\n        var k12 = iA * this.m_s1 + iB * this.m_s2;\n        var k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2;\n        var k22 = iA + iB;\n        if (k22 == 0) {\n          k22 = 1;\n        }\n        var k23 = iA * this.m_a1 + iB * this.m_a2;\n        var k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n        this.m_K.ex.set(k11, k12, k13);\n        this.m_K.ey.set(k12, k22, k23);\n        this.m_K.ez.set(k13, k23, k33);\n      }\n      if (this.m_enableLimit) {\n        var jointTranslation = Vec2.dot(this.m_axis, d2);\n        if (math_abs$3(this.m_upperTranslation - this.m_lowerTranslation) < 2 * SettingsInternal.linearSlop) {\n          this.m_limitState = LimitState$1.equalLimits;\n        } else if (jointTranslation <= this.m_lowerTranslation) {\n          if (this.m_limitState != LimitState$1.atLowerLimit) {\n            this.m_limitState = LimitState$1.atLowerLimit;\n            this.m_impulse.z = 0;\n          }\n        } else if (jointTranslation >= this.m_upperTranslation) {\n          if (this.m_limitState != LimitState$1.atUpperLimit) {\n            this.m_limitState = LimitState$1.atUpperLimit;\n            this.m_impulse.z = 0;\n          }\n        } else {\n          this.m_limitState = LimitState$1.inactiveLimit;\n          this.m_impulse.z = 0;\n        }\n      } else {\n        this.m_limitState = LimitState$1.inactiveLimit;\n        this.m_impulse.z = 0;\n      }\n      if (this.m_enableMotor == false) {\n        this.m_motorImpulse = 0;\n      }\n      if (step.warmStarting) {\n        this.m_impulse.mul(step.dtRatio);\n        this.m_motorImpulse *= step.dtRatio;\n        var P3 = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis);\n        var LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n        var LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n        vA2.subMul(mA, P3);\n        wA -= iA * LA;\n        vB2.addMul(mB, P3);\n        wB += iB * LB;\n      } else {\n        this.m_impulse.setZero();\n        this.m_motorImpulse = 0;\n      }\n      this.m_bodyA.c_velocity.v.setVec2(vA2);\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v.setVec2(vB2);\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    PrismaticJoint2.prototype.solveVelocityConstraints = function(step) {\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      if (this.m_enableMotor && this.m_limitState != LimitState$1.equalLimits) {\n        var Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB2, vA2)) + this.m_a2 * wB - this.m_a1 * wA;\n        var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n        var oldImpulse = this.m_motorImpulse;\n        var maxImpulse = step.dt * this.m_maxMotorForce;\n        this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n        impulse = this.m_motorImpulse - oldImpulse;\n        var P3 = Vec2.mulNumVec2(impulse, this.m_axis);\n        var LA = impulse * this.m_a1;\n        var LB = impulse * this.m_a2;\n        vA2.subMul(mA, P3);\n        wA -= iA * LA;\n        vB2.addMul(mB, P3);\n        wB += iB * LB;\n      }\n      var Cdot1 = Vec2.zero();\n      Cdot1.x += Vec2.dot(this.m_perp, vB2) + this.m_s2 * wB;\n      Cdot1.x -= Vec2.dot(this.m_perp, vA2) + this.m_s1 * wA;\n      Cdot1.y = wB - wA;\n      if (this.m_enableLimit && this.m_limitState != LimitState$1.inactiveLimit) {\n        var Cdot2 = 0;\n        Cdot2 += Vec2.dot(this.m_axis, vB2) + this.m_a2 * wB;\n        Cdot2 -= Vec2.dot(this.m_axis, vA2) + this.m_a1 * wA;\n        var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n        var f1 = Vec3.clone(this.m_impulse);\n        var df = this.m_K.solve33(Vec3.neg(Cdot));\n        this.m_impulse.add(df);\n        if (this.m_limitState == LimitState$1.atLowerLimit) {\n          this.m_impulse.z = math_max(this.m_impulse.z, 0);\n        } else if (this.m_limitState == LimitState$1.atUpperLimit) {\n          this.m_impulse.z = math_min$2(this.m_impulse.z, 0);\n        }\n        var b2 = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y));\n        var f2r = Vec2.add(this.m_K.solve22(b2), Vec2.neo(f1.x, f1.y));\n        this.m_impulse.x = f2r.x;\n        this.m_impulse.y = f2r.y;\n        df = Vec3.sub(this.m_impulse, f1);\n        var P3 = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis);\n        var LA = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n        var LB = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n        vA2.subMul(mA, P3);\n        wA -= iA * LA;\n        vB2.addMul(mB, P3);\n        wB += iB * LB;\n      } else {\n        var df = this.m_K.solve22(Vec2.neg(Cdot1));\n        this.m_impulse.x += df.x;\n        this.m_impulse.y += df.y;\n        var P3 = Vec2.mulNumVec2(df.x, this.m_perp);\n        var LA = df.x * this.m_s1 + df.y;\n        var LB = df.x * this.m_s2 + df.y;\n        vA2.subMul(mA, P3);\n        wA -= iA * LA;\n        vB2.addMul(mB, P3);\n        wB += iB * LB;\n      }\n      this.m_bodyA.c_velocity.v = vA2;\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v = vB2;\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    PrismaticJoint2.prototype.solvePositionConstraints = function(step) {\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n      var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n      var d2 = Vec2.sub(Vec2.add(cB2, rB2), Vec2.add(cA2, rA2));\n      var axis = Rot.mulVec2(qA, this.m_localXAxisA);\n      var a1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), axis);\n      var a2 = Vec2.crossVec2Vec2(rB2, axis);\n      var perp2 = Rot.mulVec2(qA, this.m_localYAxisA);\n      var s1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), perp2);\n      var s2 = Vec2.crossVec2Vec2(rB2, perp2);\n      var impulse = new Vec3();\n      var C1 = Vec2.zero();\n      C1.x = Vec2.dot(perp2, d2);\n      C1.y = aB - aA - this.m_referenceAngle;\n      var linearError = math_abs$3(C1.x);\n      var angularError = math_abs$3(C1.y);\n      var linearSlop = SettingsInternal.linearSlop;\n      var maxLinearCorrection = SettingsInternal.maxLinearCorrection;\n      var active = false;\n      var C2 = 0;\n      if (this.m_enableLimit) {\n        var translation2 = Vec2.dot(axis, d2);\n        if (math_abs$3(this.m_upperTranslation - this.m_lowerTranslation) < 2 * linearSlop) {\n          C2 = clamp(translation2, -maxLinearCorrection, maxLinearCorrection);\n          linearError = math_max(linearError, math_abs$3(translation2));\n          active = true;\n        } else if (translation2 <= this.m_lowerTranslation) {\n          C2 = clamp(translation2 - this.m_lowerTranslation + linearSlop, -maxLinearCorrection, 0);\n          linearError = Math.max(linearError, this.m_lowerTranslation - translation2);\n          active = true;\n        } else if (translation2 >= this.m_upperTranslation) {\n          C2 = clamp(translation2 - this.m_upperTranslation - linearSlop, 0, maxLinearCorrection);\n          linearError = Math.max(linearError, translation2 - this.m_upperTranslation);\n          active = true;\n        }\n      }\n      if (active) {\n        var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n        var k12 = iA * s1 + iB * s2;\n        var k13 = iA * s1 * a1 + iB * s2 * a2;\n        var k22 = iA + iB;\n        if (k22 == 0) {\n          k22 = 1;\n        }\n        var k23 = iA * a1 + iB * a2;\n        var k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2;\n        var K = new Mat33();\n        K.ex.set(k11, k12, k13);\n        K.ey.set(k12, k22, k23);\n        K.ez.set(k13, k23, k33);\n        var C = new Vec3();\n        C.x = C1.x;\n        C.y = C1.y;\n        C.z = C2;\n        impulse = K.solve33(Vec3.neg(C));\n      } else {\n        var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n        var k12 = iA * s1 + iB * s2;\n        var k22 = iA + iB;\n        if (k22 == 0) {\n          k22 = 1;\n        }\n        var K = new Mat22();\n        K.ex.setNum(k11, k12);\n        K.ey.setNum(k12, k22);\n        var impulse1 = K.solve(Vec2.neg(C1));\n        impulse.x = impulse1.x;\n        impulse.y = impulse1.y;\n        impulse.z = 0;\n      }\n      var P3 = Vec2.combine(impulse.x, perp2, impulse.z, axis);\n      var LA = impulse.x * s1 + impulse.y + impulse.z * a1;\n      var LB = impulse.x * s2 + impulse.y + impulse.z * a2;\n      cA2.subMul(mA, P3);\n      aA -= iA * LA;\n      cB2.addMul(mB, P3);\n      aB += iB * LB;\n      this.m_bodyA.c_position.c = cA2;\n      this.m_bodyA.c_position.a = aA;\n      this.m_bodyB.c_position.c = cB2;\n      this.m_bodyB.c_position.a = aB;\n      return linearError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop;\n    };\n    PrismaticJoint2.TYPE = \"prismatic-joint\";\n    return PrismaticJoint2;\n  }(Joint)\n);\nvar DEFAULTS$6 = {\n  ratio: 1\n};\nvar GearJoint = (\n  /** @class */\n  function(_super) {\n    __extends(GearJoint2, _super);\n    function GearJoint2(def, bodyA, bodyB, joint1, joint2, ratio) {\n      var _this = this;\n      if (!(_this instanceof GearJoint2)) {\n        return new GearJoint2(def, bodyA, bodyB, joint1, joint2, ratio);\n      }\n      def = options(def, DEFAULTS$6);\n      _this = _super.call(this, def, bodyA, bodyB) || this;\n      bodyA = _this.m_bodyA;\n      bodyB = _this.m_bodyB;\n      _this.m_type = GearJoint2.TYPE;\n      _this.m_joint1 = joint1 ? joint1 : def.joint1;\n      _this.m_joint2 = joint2 ? joint2 : def.joint2;\n      _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio;\n      _this.m_type1 = _this.m_joint1.getType();\n      _this.m_type2 = _this.m_joint2.getType();\n      var coordinateA;\n      var coordinateB;\n      _this.m_bodyC = _this.m_joint1.getBodyA();\n      _this.m_bodyA = _this.m_joint1.getBodyB();\n      var xfA2 = _this.m_bodyA.m_xf;\n      var aA = _this.m_bodyA.m_sweep.a;\n      var xfC = _this.m_bodyC.m_xf;\n      var aC = _this.m_bodyC.m_sweep.a;\n      if (_this.m_type1 === RevoluteJoint.TYPE) {\n        var revolute = _this.m_joint1;\n        _this.m_localAnchorC = revolute.m_localAnchorA;\n        _this.m_localAnchorA = revolute.m_localAnchorB;\n        _this.m_referenceAngleA = revolute.m_referenceAngle;\n        _this.m_localAxisC = Vec2.zero();\n        coordinateA = aA - aC - _this.m_referenceAngleA;\n      } else {\n        var prismatic = _this.m_joint1;\n        _this.m_localAnchorC = prismatic.m_localAnchorA;\n        _this.m_localAnchorA = prismatic.m_localAnchorB;\n        _this.m_referenceAngleA = prismatic.m_referenceAngle;\n        _this.m_localAxisC = prismatic.m_localXAxisA;\n        var pC = _this.m_localAnchorC;\n        var pA2 = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA2.q, _this.m_localAnchorA), Vec2.sub(xfA2.p, xfC.p)));\n        coordinateA = Vec2.dot(pA2, _this.m_localAxisC) - Vec2.dot(pC, _this.m_localAxisC);\n      }\n      _this.m_bodyD = _this.m_joint2.getBodyA();\n      _this.m_bodyB = _this.m_joint2.getBodyB();\n      var xfB2 = _this.m_bodyB.m_xf;\n      var aB = _this.m_bodyB.m_sweep.a;\n      var xfD = _this.m_bodyD.m_xf;\n      var aD = _this.m_bodyD.m_sweep.a;\n      if (_this.m_type2 === RevoluteJoint.TYPE) {\n        var revolute = _this.m_joint2;\n        _this.m_localAnchorD = revolute.m_localAnchorA;\n        _this.m_localAnchorB = revolute.m_localAnchorB;\n        _this.m_referenceAngleB = revolute.m_referenceAngle;\n        _this.m_localAxisD = Vec2.zero();\n        coordinateB = aB - aD - _this.m_referenceAngleB;\n      } else {\n        var prismatic = _this.m_joint2;\n        _this.m_localAnchorD = prismatic.m_localAnchorA;\n        _this.m_localAnchorB = prismatic.m_localAnchorB;\n        _this.m_referenceAngleB = prismatic.m_referenceAngle;\n        _this.m_localAxisD = prismatic.m_localXAxisA;\n        var pD = _this.m_localAnchorD;\n        var pB2 = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB2.q, _this.m_localAnchorB), Vec2.sub(xfB2.p, xfD.p)));\n        coordinateB = Vec2.dot(pB2, _this.m_localAxisD) - Vec2.dot(pD, _this.m_localAxisD);\n      }\n      _this.m_constant = coordinateA + _this.m_ratio * coordinateB;\n      _this.m_impulse = 0;\n      return _this;\n    }\n    GearJoint2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        bodyA: this.m_bodyA,\n        bodyB: this.m_bodyB,\n        collideConnected: this.m_collideConnected,\n        joint1: this.m_joint1,\n        joint2: this.m_joint2,\n        ratio: this.m_ratio\n        // _constant: this.m_constant,\n      };\n    };\n    GearJoint2._deserialize = function(data, world, restore) {\n      data = __assign({}, data);\n      data.bodyA = restore(Body, data.bodyA, world);\n      data.bodyB = restore(Body, data.bodyB, world);\n      data.joint1 = restore(Joint, data.joint1, world);\n      data.joint2 = restore(Joint, data.joint2, world);\n      var joint = new GearJoint2(data);\n      return joint;\n    };\n    GearJoint2.prototype._reset = function(def) {\n      if (Number.isFinite(def.ratio)) {\n        this.m_ratio = def.ratio;\n      }\n    };\n    GearJoint2.prototype.getJoint1 = function() {\n      return this.m_joint1;\n    };\n    GearJoint2.prototype.getJoint2 = function() {\n      return this.m_joint2;\n    };\n    GearJoint2.prototype.setRatio = function(ratio) {\n      this.m_ratio = ratio;\n    };\n    GearJoint2.prototype.getRatio = function() {\n      return this.m_ratio;\n    };\n    GearJoint2.prototype.getAnchorA = function() {\n      return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n    };\n    GearJoint2.prototype.getAnchorB = function() {\n      return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n    };\n    GearJoint2.prototype.getReactionForce = function(inv_dt) {\n      return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt);\n    };\n    GearJoint2.prototype.getReactionTorque = function(inv_dt) {\n      var L = this.m_impulse * this.m_JwA;\n      return inv_dt * L;\n    };\n    GearJoint2.prototype.initVelocityConstraints = function(step) {\n      this.m_lcA = this.m_bodyA.m_sweep.localCenter;\n      this.m_lcB = this.m_bodyB.m_sweep.localCenter;\n      this.m_lcC = this.m_bodyC.m_sweep.localCenter;\n      this.m_lcD = this.m_bodyD.m_sweep.localCenter;\n      this.m_mA = this.m_bodyA.m_invMass;\n      this.m_mB = this.m_bodyB.m_invMass;\n      this.m_mC = this.m_bodyC.m_invMass;\n      this.m_mD = this.m_bodyD.m_invMass;\n      this.m_iA = this.m_bodyA.m_invI;\n      this.m_iB = this.m_bodyB.m_invI;\n      this.m_iC = this.m_bodyC.m_invI;\n      this.m_iD = this.m_bodyD.m_invI;\n      var aA = this.m_bodyA.c_position.a;\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var aB = this.m_bodyB.c_position.a;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var aC = this.m_bodyC.c_position.a;\n      var vC = this.m_bodyC.c_velocity.v;\n      var wC = this.m_bodyC.c_velocity.w;\n      var aD = this.m_bodyD.c_position.a;\n      var vD = this.m_bodyD.c_velocity.v;\n      var wD = this.m_bodyD.c_velocity.w;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      var qC = Rot.neo(aC);\n      var qD = Rot.neo(aD);\n      this.m_mass = 0;\n      if (this.m_type1 == RevoluteJoint.TYPE) {\n        this.m_JvAC = Vec2.zero();\n        this.m_JwA = 1;\n        this.m_JwC = 1;\n        this.m_mass += this.m_iA + this.m_iC;\n      } else {\n        var u = Rot.mulVec2(qC, this.m_localAxisC);\n        var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n        var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n        this.m_JvAC = u;\n        this.m_JwC = Vec2.crossVec2Vec2(rC, u);\n        this.m_JwA = Vec2.crossVec2Vec2(rA2, u);\n        this.m_mass += this.m_mC + this.m_mA + this.m_iC * this.m_JwC * this.m_JwC + this.m_iA * this.m_JwA * this.m_JwA;\n      }\n      if (this.m_type2 == RevoluteJoint.TYPE) {\n        this.m_JvBD = Vec2.zero();\n        this.m_JwB = this.m_ratio;\n        this.m_JwD = this.m_ratio;\n        this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD);\n      } else {\n        var u = Rot.mulVec2(qD, this.m_localAxisD);\n        var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n        var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB);\n        this.m_JvBD = Vec2.mulNumVec2(this.m_ratio, u);\n        this.m_JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u);\n        this.m_JwB = this.m_ratio * Vec2.crossVec2Vec2(rB2, u);\n        this.m_mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * this.m_JwD * this.m_JwD + this.m_iB * this.m_JwB * this.m_JwB;\n      }\n      this.m_mass = this.m_mass > 0 ? 1 / this.m_mass : 0;\n      if (step.warmStarting) {\n        vA2.addMul(this.m_mA * this.m_impulse, this.m_JvAC);\n        wA += this.m_iA * this.m_impulse * this.m_JwA;\n        vB2.addMul(this.m_mB * this.m_impulse, this.m_JvBD);\n        wB += this.m_iB * this.m_impulse * this.m_JwB;\n        vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC);\n        wC -= this.m_iC * this.m_impulse * this.m_JwC;\n        vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD);\n        wD -= this.m_iD * this.m_impulse * this.m_JwD;\n      } else {\n        this.m_impulse = 0;\n      }\n      this.m_bodyA.c_velocity.v.setVec2(vA2);\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v.setVec2(vB2);\n      this.m_bodyB.c_velocity.w = wB;\n      this.m_bodyC.c_velocity.v.setVec2(vC);\n      this.m_bodyC.c_velocity.w = wC;\n      this.m_bodyD.c_velocity.v.setVec2(vD);\n      this.m_bodyD.c_velocity.w = wD;\n    };\n    GearJoint2.prototype.solveVelocityConstraints = function(step) {\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var vC = this.m_bodyC.c_velocity.v;\n      var wC = this.m_bodyC.c_velocity.w;\n      var vD = this.m_bodyD.c_velocity.v;\n      var wD = this.m_bodyD.c_velocity.w;\n      var Cdot = Vec2.dot(this.m_JvAC, vA2) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB2) - Vec2.dot(this.m_JvBD, vD);\n      Cdot += this.m_JwA * wA - this.m_JwC * wC + (this.m_JwB * wB - this.m_JwD * wD);\n      var impulse = -this.m_mass * Cdot;\n      this.m_impulse += impulse;\n      vA2.addMul(this.m_mA * impulse, this.m_JvAC);\n      wA += this.m_iA * impulse * this.m_JwA;\n      vB2.addMul(this.m_mB * impulse, this.m_JvBD);\n      wB += this.m_iB * impulse * this.m_JwB;\n      vC.subMul(this.m_mC * impulse, this.m_JvAC);\n      wC -= this.m_iC * impulse * this.m_JwC;\n      vD.subMul(this.m_mD * impulse, this.m_JvBD);\n      wD -= this.m_iD * impulse * this.m_JwD;\n      this.m_bodyA.c_velocity.v.setVec2(vA2);\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v.setVec2(vB2);\n      this.m_bodyB.c_velocity.w = wB;\n      this.m_bodyC.c_velocity.v.setVec2(vC);\n      this.m_bodyC.c_velocity.w = wC;\n      this.m_bodyD.c_velocity.v.setVec2(vD);\n      this.m_bodyD.c_velocity.w = wD;\n    };\n    GearJoint2.prototype.solvePositionConstraints = function(step) {\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var cC = this.m_bodyC.c_position.c;\n      var aC = this.m_bodyC.c_position.a;\n      var cD = this.m_bodyD.c_position.c;\n      var aD = this.m_bodyD.c_position.a;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      var qC = Rot.neo(aC);\n      var qD = Rot.neo(aD);\n      var linearError = 0;\n      var coordinateA;\n      var coordinateB;\n      var JvAC;\n      var JvBD;\n      var JwA;\n      var JwB;\n      var JwC;\n      var JwD;\n      var mass = 0;\n      if (this.m_type1 == RevoluteJoint.TYPE) {\n        JvAC = Vec2.zero();\n        JwA = 1;\n        JwC = 1;\n        mass += this.m_iA + this.m_iC;\n        coordinateA = aA - aC - this.m_referenceAngleA;\n      } else {\n        var u = Rot.mulVec2(qC, this.m_localAxisC);\n        var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n        var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n        JvAC = u;\n        JwC = Vec2.crossVec2Vec2(rC, u);\n        JwA = Vec2.crossVec2Vec2(rA2, u);\n        mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA;\n        var pC = Vec2.sub(this.m_localAnchorC, this.m_lcC);\n        var pA2 = Rot.mulTVec2(qC, Vec2.add(rA2, Vec2.sub(cA2, cC)));\n        coordinateA = Vec2.dot(Vec2.sub(pA2, pC), this.m_localAxisC);\n      }\n      if (this.m_type2 == RevoluteJoint.TYPE) {\n        JvBD = Vec2.zero();\n        JwB = this.m_ratio;\n        JwD = this.m_ratio;\n        mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD);\n        coordinateB = aB - aD - this.m_referenceAngleB;\n      } else {\n        var u = Rot.mulVec2(qD, this.m_localAxisD);\n        var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n        var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB);\n        JvBD = Vec2.mulNumVec2(this.m_ratio, u);\n        JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u);\n        JwB = this.m_ratio * Vec2.crossVec2Vec2(rB2, u);\n        mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * JwD * JwD + this.m_iB * JwB * JwB;\n        var pD = Vec2.sub(this.m_localAnchorD, this.m_lcD);\n        var pB2 = Rot.mulTVec2(qD, Vec2.add(rB2, Vec2.sub(cB2, cD)));\n        coordinateB = Vec2.dot(pB2, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n      }\n      var C = coordinateA + this.m_ratio * coordinateB - this.m_constant;\n      var impulse = 0;\n      if (mass > 0) {\n        impulse = -C / mass;\n      }\n      cA2.addMul(this.m_mA * impulse, JvAC);\n      aA += this.m_iA * impulse * JwA;\n      cB2.addMul(this.m_mB * impulse, JvBD);\n      aB += this.m_iB * impulse * JwB;\n      cC.subMul(this.m_mC * impulse, JvAC);\n      aC -= this.m_iC * impulse * JwC;\n      cD.subMul(this.m_mD * impulse, JvBD);\n      aD -= this.m_iD * impulse * JwD;\n      this.m_bodyA.c_position.c.setVec2(cA2);\n      this.m_bodyA.c_position.a = aA;\n      this.m_bodyB.c_position.c.setVec2(cB2);\n      this.m_bodyB.c_position.a = aB;\n      this.m_bodyC.c_position.c.setVec2(cC);\n      this.m_bodyC.c_position.a = aC;\n      this.m_bodyD.c_position.c.setVec2(cD);\n      this.m_bodyD.c_position.a = aD;\n      return linearError < SettingsInternal.linearSlop;\n    };\n    GearJoint2.TYPE = \"gear-joint\";\n    return GearJoint2;\n  }(Joint)\n);\nvar DEFAULTS$5 = {\n  maxForce: 1,\n  maxTorque: 1,\n  correctionFactor: 0.3\n};\nvar MotorJoint = (\n  /** @class */\n  function(_super) {\n    __extends(MotorJoint2, _super);\n    function MotorJoint2(def, bodyA, bodyB) {\n      var _this = this;\n      if (!(_this instanceof MotorJoint2)) {\n        return new MotorJoint2(def, bodyA, bodyB);\n      }\n      def = options(def, DEFAULTS$5);\n      _this = _super.call(this, def, bodyA, bodyB) || this;\n      bodyA = _this.m_bodyA;\n      bodyB = _this.m_bodyB;\n      _this.m_type = MotorJoint2.TYPE;\n      _this.m_linearOffset = Vec2.isValid(def.linearOffset) ? Vec2.clone(def.linearOffset) : bodyA.getLocalPoint(bodyB.getPosition());\n      _this.m_angularOffset = Number.isFinite(def.angularOffset) ? def.angularOffset : bodyB.getAngle() - bodyA.getAngle();\n      _this.m_linearImpulse = Vec2.zero();\n      _this.m_angularImpulse = 0;\n      _this.m_maxForce = def.maxForce;\n      _this.m_maxTorque = def.maxTorque;\n      _this.m_correctionFactor = def.correctionFactor;\n      return _this;\n    }\n    MotorJoint2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        bodyA: this.m_bodyA,\n        bodyB: this.m_bodyB,\n        collideConnected: this.m_collideConnected,\n        maxForce: this.m_maxForce,\n        maxTorque: this.m_maxTorque,\n        correctionFactor: this.m_correctionFactor,\n        linearOffset: this.m_linearOffset,\n        angularOffset: this.m_angularOffset\n      };\n    };\n    MotorJoint2._deserialize = function(data, world, restore) {\n      data = __assign({}, data);\n      data.bodyA = restore(Body, data.bodyA, world);\n      data.bodyB = restore(Body, data.bodyB, world);\n      var joint = new MotorJoint2(data);\n      return joint;\n    };\n    MotorJoint2.prototype._reset = function(def) {\n      if (Number.isFinite(def.angularOffset)) {\n        this.m_angularOffset = def.angularOffset;\n      }\n      if (Number.isFinite(def.maxForce)) {\n        this.m_maxForce = def.maxForce;\n      }\n      if (Number.isFinite(def.maxTorque)) {\n        this.m_maxTorque = def.maxTorque;\n      }\n      if (Number.isFinite(def.correctionFactor)) {\n        this.m_correctionFactor = def.correctionFactor;\n      }\n      if (Vec2.isValid(def.linearOffset)) {\n        this.m_linearOffset.set(def.linearOffset);\n      }\n    };\n    MotorJoint2.prototype.setMaxForce = function(force) {\n      this.m_maxForce = force;\n    };\n    MotorJoint2.prototype.getMaxForce = function() {\n      return this.m_maxForce;\n    };\n    MotorJoint2.prototype.setMaxTorque = function(torque) {\n      this.m_maxTorque = torque;\n    };\n    MotorJoint2.prototype.getMaxTorque = function() {\n      return this.m_maxTorque;\n    };\n    MotorJoint2.prototype.setCorrectionFactor = function(factor) {\n      this.m_correctionFactor = factor;\n    };\n    MotorJoint2.prototype.getCorrectionFactor = function() {\n      return this.m_correctionFactor;\n    };\n    MotorJoint2.prototype.setLinearOffset = function(linearOffset) {\n      if (linearOffset.x != this.m_linearOffset.x || linearOffset.y != this.m_linearOffset.y) {\n        this.m_bodyA.setAwake(true);\n        this.m_bodyB.setAwake(true);\n        this.m_linearOffset.set(linearOffset);\n      }\n    };\n    MotorJoint2.prototype.getLinearOffset = function() {\n      return this.m_linearOffset;\n    };\n    MotorJoint2.prototype.setAngularOffset = function(angularOffset) {\n      if (angularOffset != this.m_angularOffset) {\n        this.m_bodyA.setAwake(true);\n        this.m_bodyB.setAwake(true);\n        this.m_angularOffset = angularOffset;\n      }\n    };\n    MotorJoint2.prototype.getAngularOffset = function() {\n      return this.m_angularOffset;\n    };\n    MotorJoint2.prototype.getAnchorA = function() {\n      return this.m_bodyA.getPosition();\n    };\n    MotorJoint2.prototype.getAnchorB = function() {\n      return this.m_bodyB.getPosition();\n    };\n    MotorJoint2.prototype.getReactionForce = function(inv_dt) {\n      return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n    };\n    MotorJoint2.prototype.getReactionTorque = function(inv_dt) {\n      return inv_dt * this.m_angularImpulse;\n    };\n    MotorJoint2.prototype.initVelocityConstraints = function(step) {\n      this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n      this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n      this.m_invMassA = this.m_bodyA.m_invMass;\n      this.m_invMassB = this.m_bodyB.m_invMass;\n      this.m_invIA = this.m_bodyA.m_invI;\n      this.m_invIB = this.m_bodyB.m_invI;\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_linearOffset, this.m_localCenterA));\n      this.m_rB = Rot.mulVec2(qB, Vec2.neg(this.m_localCenterB));\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      var K = new Mat22();\n      K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y;\n      K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y;\n      K.ey.x = K.ex.y;\n      K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x;\n      this.m_linearMass = K.getInverse();\n      this.m_angularMass = iA + iB;\n      if (this.m_angularMass > 0) {\n        this.m_angularMass = 1 / this.m_angularMass;\n      }\n      this.m_linearError = Vec2.zero();\n      this.m_linearError.addCombine(1, cB2, 1, this.m_rB);\n      this.m_linearError.subCombine(1, cA2, 1, this.m_rA);\n      this.m_angularError = aB - aA - this.m_angularOffset;\n      if (step.warmStarting) {\n        this.m_linearImpulse.mul(step.dtRatio);\n        this.m_angularImpulse *= step.dtRatio;\n        var P3 = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n        vA2.subMul(mA, P3);\n        wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_angularImpulse);\n        vB2.addMul(mB, P3);\n        wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_angularImpulse);\n      } else {\n        this.m_linearImpulse.setZero();\n        this.m_angularImpulse = 0;\n      }\n      this.m_bodyA.c_velocity.v = vA2;\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v = vB2;\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    MotorJoint2.prototype.solveVelocityConstraints = function(step) {\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      var h = step.dt;\n      var inv_h = step.inv_dt;\n      {\n        var Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError;\n        var impulse = -this.m_angularMass * Cdot;\n        var oldImpulse = this.m_angularImpulse;\n        var maxImpulse = h * this.m_maxTorque;\n        this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n        impulse = this.m_angularImpulse - oldImpulse;\n        wA -= iA * impulse;\n        wB += iB * impulse;\n      }\n      {\n        var Cdot = Vec2.zero();\n        Cdot.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB));\n        Cdot.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA));\n        Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError);\n        var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n        var oldImpulse = Vec2.clone(this.m_linearImpulse);\n        this.m_linearImpulse.add(impulse);\n        var maxImpulse = h * this.m_maxForce;\n        this.m_linearImpulse.clamp(maxImpulse);\n        impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n        vA2.subMul(mA, impulse);\n        wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n        vB2.addMul(mB, impulse);\n        wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n      }\n      this.m_bodyA.c_velocity.v = vA2;\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v = vB2;\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    MotorJoint2.prototype.solvePositionConstraints = function(step) {\n      return true;\n    };\n    MotorJoint2.TYPE = \"motor-joint\";\n    return MotorJoint2;\n  }(Joint)\n);\nvar math_PI$2 = Math.PI;\nvar DEFAULTS$4 = {\n  maxForce: 0,\n  frequencyHz: 5,\n  dampingRatio: 0.7\n};\nvar MouseJoint = (\n  /** @class */\n  function(_super) {\n    __extends(MouseJoint2, _super);\n    function MouseJoint2(def, bodyA, bodyB, target) {\n      var _this = this;\n      if (!(_this instanceof MouseJoint2)) {\n        return new MouseJoint2(def, bodyA, bodyB, target);\n      }\n      def = options(def, DEFAULTS$4);\n      _this = _super.call(this, def, bodyA, bodyB) || this;\n      bodyA = _this.m_bodyA;\n      bodyB = _this.m_bodyB;\n      _this.m_type = MouseJoint2.TYPE;\n      if (Vec2.isValid(target)) {\n        _this.m_targetA = Vec2.clone(target);\n      } else if (Vec2.isValid(def.target)) {\n        _this.m_targetA = Vec2.clone(def.target);\n      } else {\n        _this.m_targetA = Vec2.zero();\n      }\n      _this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), _this.m_targetA);\n      _this.m_maxForce = def.maxForce;\n      _this.m_impulse = Vec2.zero();\n      _this.m_frequencyHz = def.frequencyHz;\n      _this.m_dampingRatio = def.dampingRatio;\n      _this.m_beta = 0;\n      _this.m_gamma = 0;\n      _this.m_rB = Vec2.zero();\n      _this.m_localCenterB = Vec2.zero();\n      _this.m_invMassB = 0;\n      _this.m_invIB = 0;\n      _this.m_mass = new Mat22();\n      _this.m_C = Vec2.zero();\n      return _this;\n    }\n    MouseJoint2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        bodyA: this.m_bodyA,\n        bodyB: this.m_bodyB,\n        collideConnected: this.m_collideConnected,\n        target: this.m_targetA,\n        maxForce: this.m_maxForce,\n        frequencyHz: this.m_frequencyHz,\n        dampingRatio: this.m_dampingRatio,\n        _localAnchorB: this.m_localAnchorB\n      };\n    };\n    MouseJoint2._deserialize = function(data, world, restore) {\n      data = __assign({}, data);\n      data.bodyA = restore(Body, data.bodyA, world);\n      data.bodyB = restore(Body, data.bodyB, world);\n      data.target = Vec2.clone(data.target);\n      var joint = new MouseJoint2(data);\n      if (data._localAnchorB) {\n        joint.m_localAnchorB = data._localAnchorB;\n      }\n      return joint;\n    };\n    MouseJoint2.prototype._reset = function(def) {\n      if (Number.isFinite(def.maxForce)) {\n        this.m_maxForce = def.maxForce;\n      }\n      if (Number.isFinite(def.frequencyHz)) {\n        this.m_frequencyHz = def.frequencyHz;\n      }\n      if (Number.isFinite(def.dampingRatio)) {\n        this.m_dampingRatio = def.dampingRatio;\n      }\n    };\n    MouseJoint2.prototype.setTarget = function(target) {\n      if (Vec2.areEqual(target, this.m_targetA))\n        return;\n      this.m_bodyB.setAwake(true);\n      this.m_targetA.set(target);\n    };\n    MouseJoint2.prototype.getTarget = function() {\n      return this.m_targetA;\n    };\n    MouseJoint2.prototype.setMaxForce = function(force) {\n      this.m_maxForce = force;\n    };\n    MouseJoint2.prototype.getMaxForce = function() {\n      return this.m_maxForce;\n    };\n    MouseJoint2.prototype.setFrequency = function(hz) {\n      this.m_frequencyHz = hz;\n    };\n    MouseJoint2.prototype.getFrequency = function() {\n      return this.m_frequencyHz;\n    };\n    MouseJoint2.prototype.setDampingRatio = function(ratio) {\n      this.m_dampingRatio = ratio;\n    };\n    MouseJoint2.prototype.getDampingRatio = function() {\n      return this.m_dampingRatio;\n    };\n    MouseJoint2.prototype.getAnchorA = function() {\n      return Vec2.clone(this.m_targetA);\n    };\n    MouseJoint2.prototype.getAnchorB = function() {\n      return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n    };\n    MouseJoint2.prototype.getReactionForce = function(inv_dt) {\n      return Vec2.mulNumVec2(inv_dt, this.m_impulse);\n    };\n    MouseJoint2.prototype.getReactionTorque = function(inv_dt) {\n      return inv_dt * 0;\n    };\n    MouseJoint2.prototype.shiftOrigin = function(newOrigin) {\n      this.m_targetA.sub(newOrigin);\n    };\n    MouseJoint2.prototype.initVelocityConstraints = function(step) {\n      this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n      this.m_invMassB = this.m_bodyB.m_invMass;\n      this.m_invIB = this.m_bodyB.m_invI;\n      var position = this.m_bodyB.c_position;\n      var velocity = this.m_bodyB.c_velocity;\n      var cB2 = position.c;\n      var aB = position.a;\n      var vB2 = velocity.v;\n      var wB = velocity.w;\n      var qB = Rot.neo(aB);\n      var mass = this.m_bodyB.getMass();\n      var omega = 2 * math_PI$2 * this.m_frequencyHz;\n      var d2 = 2 * mass * this.m_dampingRatio * omega;\n      var k = mass * (omega * omega);\n      var h = step.dt;\n      this.m_gamma = h * (d2 + h * k);\n      if (this.m_gamma != 0) {\n        this.m_gamma = 1 / this.m_gamma;\n      }\n      this.m_beta = h * k * this.m_gamma;\n      this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n      var K = new Mat22();\n      K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y + this.m_gamma;\n      K.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y;\n      K.ey.x = K.ex.y;\n      K.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x + this.m_gamma;\n      this.m_mass = K.getInverse();\n      this.m_C.setVec2(cB2);\n      this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA);\n      this.m_C.mul(this.m_beta);\n      wB *= 0.98;\n      if (step.warmStarting) {\n        this.m_impulse.mul(step.dtRatio);\n        vB2.addMul(this.m_invMassB, this.m_impulse);\n        wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse);\n      } else {\n        this.m_impulse.setZero();\n      }\n      velocity.v.setVec2(vB2);\n      velocity.w = wB;\n    };\n    MouseJoint2.prototype.solveVelocityConstraints = function(step) {\n      var velocity = this.m_bodyB.c_velocity;\n      var vB2 = Vec2.clone(velocity.v);\n      var wB = velocity.w;\n      var Cdot = Vec2.crossNumVec2(wB, this.m_rB);\n      Cdot.add(vB2);\n      Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse);\n      Cdot.neg();\n      var impulse = Mat22.mulVec2(this.m_mass, Cdot);\n      var oldImpulse = Vec2.clone(this.m_impulse);\n      this.m_impulse.add(impulse);\n      var maxImpulse = step.dt * this.m_maxForce;\n      this.m_impulse.clamp(maxImpulse);\n      impulse = Vec2.sub(this.m_impulse, oldImpulse);\n      vB2.addMul(this.m_invMassB, impulse);\n      wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n      velocity.v.setVec2(vB2);\n      velocity.w = wB;\n    };\n    MouseJoint2.prototype.solvePositionConstraints = function(step) {\n      return true;\n    };\n    MouseJoint2.TYPE = \"mouse-joint\";\n    return MouseJoint2;\n  }(Joint)\n);\nvar math_abs$2 = Math.abs;\nvar DEFAULTS$3 = {\n  collideConnected: true\n};\nvar PulleyJoint = (\n  /** @class */\n  function(_super) {\n    __extends(PulleyJoint2, _super);\n    function PulleyJoint2(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio) {\n      var _this = this;\n      if (!(_this instanceof PulleyJoint2)) {\n        return new PulleyJoint2(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio);\n      }\n      def = options(def, DEFAULTS$3);\n      _this = _super.call(this, def, bodyA, bodyB) || this;\n      bodyA = _this.m_bodyA;\n      bodyB = _this.m_bodyB;\n      _this.m_type = PulleyJoint2.TYPE;\n      _this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1, 1));\n      _this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1, 1));\n      _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1, 0));\n      _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1, 0));\n      _this.m_lengthA = Number.isFinite(def.lengthA) ? def.lengthA : Vec2.distance(anchorA, groundA);\n      _this.m_lengthB = Number.isFinite(def.lengthB) ? def.lengthB : Vec2.distance(anchorB, groundB);\n      _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio;\n      _this.m_constant = _this.m_lengthA + _this.m_ratio * _this.m_lengthB;\n      _this.m_impulse = 0;\n      return _this;\n    }\n    PulleyJoint2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        bodyA: this.m_bodyA,\n        bodyB: this.m_bodyB,\n        collideConnected: this.m_collideConnected,\n        groundAnchorA: this.m_groundAnchorA,\n        groundAnchorB: this.m_groundAnchorB,\n        localAnchorA: this.m_localAnchorA,\n        localAnchorB: this.m_localAnchorB,\n        lengthA: this.m_lengthA,\n        lengthB: this.m_lengthB,\n        ratio: this.m_ratio\n      };\n    };\n    PulleyJoint2._deserialize = function(data, world, restore) {\n      data = __assign({}, data);\n      data.bodyA = restore(Body, data.bodyA, world);\n      data.bodyB = restore(Body, data.bodyB, world);\n      var joint = new PulleyJoint2(data);\n      return joint;\n    };\n    PulleyJoint2.prototype._reset = function(def) {\n      if (Vec2.isValid(def.groundAnchorA)) {\n        this.m_groundAnchorA.set(def.groundAnchorA);\n      }\n      if (Vec2.isValid(def.groundAnchorB)) {\n        this.m_groundAnchorB.set(def.groundAnchorB);\n      }\n      if (Vec2.isValid(def.localAnchorA)) {\n        this.m_localAnchorA.set(def.localAnchorA);\n      } else if (Vec2.isValid(def.anchorA)) {\n        this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(def.anchorA));\n      }\n      if (Vec2.isValid(def.localAnchorB)) {\n        this.m_localAnchorB.set(def.localAnchorB);\n      } else if (Vec2.isValid(def.anchorB)) {\n        this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(def.anchorB));\n      }\n      if (Number.isFinite(def.lengthA)) {\n        this.m_lengthA = def.lengthA;\n      }\n      if (Number.isFinite(def.lengthB)) {\n        this.m_lengthB = def.lengthB;\n      }\n      if (Number.isFinite(def.ratio)) {\n        this.m_ratio = def.ratio;\n      }\n    };\n    PulleyJoint2.prototype.getGroundAnchorA = function() {\n      return this.m_groundAnchorA;\n    };\n    PulleyJoint2.prototype.getGroundAnchorB = function() {\n      return this.m_groundAnchorB;\n    };\n    PulleyJoint2.prototype.getLengthA = function() {\n      return this.m_lengthA;\n    };\n    PulleyJoint2.prototype.getLengthB = function() {\n      return this.m_lengthB;\n    };\n    PulleyJoint2.prototype.getRatio = function() {\n      return this.m_ratio;\n    };\n    PulleyJoint2.prototype.getCurrentLengthA = function() {\n      var p = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n      var s2 = this.m_groundAnchorA;\n      return Vec2.distance(p, s2);\n    };\n    PulleyJoint2.prototype.getCurrentLengthB = function() {\n      var p = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n      var s2 = this.m_groundAnchorB;\n      return Vec2.distance(p, s2);\n    };\n    PulleyJoint2.prototype.shiftOrigin = function(newOrigin) {\n      this.m_groundAnchorA.sub(newOrigin);\n      this.m_groundAnchorB.sub(newOrigin);\n    };\n    PulleyJoint2.prototype.getAnchorA = function() {\n      return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n    };\n    PulleyJoint2.prototype.getAnchorB = function() {\n      return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n    };\n    PulleyJoint2.prototype.getReactionForce = function(inv_dt) {\n      return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt);\n    };\n    PulleyJoint2.prototype.getReactionTorque = function(inv_dt) {\n      return 0;\n    };\n    PulleyJoint2.prototype.initVelocityConstraints = function(step) {\n      this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n      this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n      this.m_invMassA = this.m_bodyA.m_invMass;\n      this.m_invMassB = this.m_bodyB.m_invMass;\n      this.m_invIA = this.m_bodyA.m_invI;\n      this.m_invIB = this.m_bodyB.m_invI;\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n      this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n      this.m_uA = Vec2.sub(Vec2.add(cA2, this.m_rA), this.m_groundAnchorA);\n      this.m_uB = Vec2.sub(Vec2.add(cB2, this.m_rB), this.m_groundAnchorB);\n      var lengthA = this.m_uA.length();\n      var lengthB = this.m_uB.length();\n      if (lengthA > 10 * SettingsInternal.linearSlop) {\n        this.m_uA.mul(1 / lengthA);\n      } else {\n        this.m_uA.setZero();\n      }\n      if (lengthB > 10 * SettingsInternal.linearSlop) {\n        this.m_uB.mul(1 / lengthB);\n      } else {\n        this.m_uB.setZero();\n      }\n      var ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA);\n      var ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB);\n      var mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n      var mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n      this.m_mass = mA + this.m_ratio * this.m_ratio * mB;\n      if (this.m_mass > 0) {\n        this.m_mass = 1 / this.m_mass;\n      }\n      if (step.warmStarting) {\n        this.m_impulse *= step.dtRatio;\n        var PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA);\n        var PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB);\n        vA2.addMul(this.m_invMassA, PA);\n        wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n        vB2.addMul(this.m_invMassB, PB);\n        wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n      } else {\n        this.m_impulse = 0;\n      }\n      this.m_bodyA.c_velocity.v = vA2;\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v = vB2;\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    PulleyJoint2.prototype.solveVelocityConstraints = function(step) {\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var vpA = Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA));\n      var vpB = Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB));\n      var Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB);\n      var impulse = -this.m_mass * Cdot;\n      this.m_impulse += impulse;\n      var PA = Vec2.mulNumVec2(-impulse, this.m_uA);\n      var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB);\n      vA2.addMul(this.m_invMassA, PA);\n      wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n      vB2.addMul(this.m_invMassB, PB);\n      wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n      this.m_bodyA.c_velocity.v = vA2;\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v = vB2;\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    PulleyJoint2.prototype.solvePositionConstraints = function(step) {\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n      var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n      var uA = Vec2.sub(Vec2.add(cA2, this.m_rA), this.m_groundAnchorA);\n      var uB = Vec2.sub(Vec2.add(cB2, this.m_rB), this.m_groundAnchorB);\n      var lengthA = uA.length();\n      var lengthB = uB.length();\n      if (lengthA > 10 * SettingsInternal.linearSlop) {\n        uA.mul(1 / lengthA);\n      } else {\n        uA.setZero();\n      }\n      if (lengthB > 10 * SettingsInternal.linearSlop) {\n        uB.mul(1 / lengthB);\n      } else {\n        uB.setZero();\n      }\n      var ruA = Vec2.crossVec2Vec2(rA2, uA);\n      var ruB = Vec2.crossVec2Vec2(rB2, uB);\n      var mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n      var mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n      var mass = mA + this.m_ratio * this.m_ratio * mB;\n      if (mass > 0) {\n        mass = 1 / mass;\n      }\n      var C = this.m_constant - lengthA - this.m_ratio * lengthB;\n      var linearError = math_abs$2(C);\n      var impulse = -mass * C;\n      var PA = Vec2.mulNumVec2(-impulse, uA);\n      var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB);\n      cA2.addMul(this.m_invMassA, PA);\n      aA += this.m_invIA * Vec2.crossVec2Vec2(rA2, PA);\n      cB2.addMul(this.m_invMassB, PB);\n      aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, PB);\n      this.m_bodyA.c_position.c = cA2;\n      this.m_bodyA.c_position.a = aA;\n      this.m_bodyB.c_position.c = cB2;\n      this.m_bodyB.c_position.a = aB;\n      return linearError < SettingsInternal.linearSlop;\n    };\n    PulleyJoint2.TYPE = \"pulley-joint\";\n    return PulleyJoint2;\n  }(Joint)\n);\nvar math_min$1 = Math.min;\nvar LimitState;\n(function(LimitState2) {\n  LimitState2[LimitState2[\"inactiveLimit\"] = 0] = \"inactiveLimit\";\n  LimitState2[LimitState2[\"atLowerLimit\"] = 1] = \"atLowerLimit\";\n  LimitState2[LimitState2[\"atUpperLimit\"] = 2] = \"atUpperLimit\";\n  LimitState2[LimitState2[\"equalLimits\"] = 3] = \"equalLimits\";\n})(LimitState || (LimitState = {}));\nvar DEFAULTS$2 = {\n  maxLength: 0\n};\nvar RopeJoint = (\n  /** @class */\n  function(_super) {\n    __extends(RopeJoint2, _super);\n    function RopeJoint2(def, bodyA, bodyB, anchor) {\n      var _this = this;\n      if (!(_this instanceof RopeJoint2)) {\n        return new RopeJoint2(def, bodyA, bodyB, anchor);\n      }\n      def = options(def, DEFAULTS$2);\n      _this = _super.call(this, def, bodyA, bodyB) || this;\n      bodyA = _this.m_bodyA;\n      bodyB = _this.m_bodyB;\n      _this.m_type = RopeJoint2.TYPE;\n      _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1, 0));\n      _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1, 0));\n      _this.m_maxLength = def.maxLength;\n      _this.m_mass = 0;\n      _this.m_impulse = 0;\n      _this.m_length = 0;\n      _this.m_state = LimitState.inactiveLimit;\n      return _this;\n    }\n    RopeJoint2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        bodyA: this.m_bodyA,\n        bodyB: this.m_bodyB,\n        collideConnected: this.m_collideConnected,\n        localAnchorA: this.m_localAnchorA,\n        localAnchorB: this.m_localAnchorB,\n        maxLength: this.m_maxLength\n      };\n    };\n    RopeJoint2._deserialize = function(data, world, restore) {\n      data = __assign({}, data);\n      data.bodyA = restore(Body, data.bodyA, world);\n      data.bodyB = restore(Body, data.bodyB, world);\n      var joint = new RopeJoint2(data);\n      return joint;\n    };\n    RopeJoint2.prototype._reset = function(def) {\n      if (Number.isFinite(def.maxLength)) {\n        this.m_maxLength = def.maxLength;\n      }\n    };\n    RopeJoint2.prototype.getLocalAnchorA = function() {\n      return this.m_localAnchorA;\n    };\n    RopeJoint2.prototype.getLocalAnchorB = function() {\n      return this.m_localAnchorB;\n    };\n    RopeJoint2.prototype.setMaxLength = function(length) {\n      this.m_maxLength = length;\n    };\n    RopeJoint2.prototype.getMaxLength = function() {\n      return this.m_maxLength;\n    };\n    RopeJoint2.prototype.getLimitState = function() {\n      return this.m_state;\n    };\n    RopeJoint2.prototype.getAnchorA = function() {\n      return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n    };\n    RopeJoint2.prototype.getAnchorB = function() {\n      return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n    };\n    RopeJoint2.prototype.getReactionForce = function(inv_dt) {\n      return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n    };\n    RopeJoint2.prototype.getReactionTorque = function(inv_dt) {\n      return 0;\n    };\n    RopeJoint2.prototype.initVelocityConstraints = function(step) {\n      this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n      this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n      this.m_invMassA = this.m_bodyA.m_invMass;\n      this.m_invMassB = this.m_bodyB.m_invMass;\n      this.m_invIA = this.m_bodyA.m_invI;\n      this.m_invIB = this.m_bodyB.m_invI;\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      this.m_rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n      this.m_rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n      this.m_u = Vec2.zero();\n      this.m_u.addCombine(1, cB2, 1, this.m_rB);\n      this.m_u.subCombine(1, cA2, 1, this.m_rA);\n      this.m_length = this.m_u.length();\n      var C = this.m_length - this.m_maxLength;\n      if (C > 0) {\n        this.m_state = LimitState.atUpperLimit;\n      } else {\n        this.m_state = LimitState.inactiveLimit;\n      }\n      if (this.m_length > SettingsInternal.linearSlop) {\n        this.m_u.mul(1 / this.m_length);\n      } else {\n        this.m_u.setZero();\n        this.m_mass = 0;\n        this.m_impulse = 0;\n        return;\n      }\n      var crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n      var crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n      var invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB;\n      this.m_mass = invMass != 0 ? 1 / invMass : 0;\n      if (step.warmStarting) {\n        this.m_impulse *= step.dtRatio;\n        var P3 = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n        vA2.subMul(this.m_invMassA, P3);\n        wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3);\n        vB2.addMul(this.m_invMassB, P3);\n        wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3);\n      } else {\n        this.m_impulse = 0;\n      }\n      this.m_bodyA.c_velocity.v.setVec2(vA2);\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v.setVec2(vB2);\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    RopeJoint2.prototype.solveVelocityConstraints = function(step) {\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var vpA = Vec2.addCrossNumVec2(vA2, wA, this.m_rA);\n      var vpB = Vec2.addCrossNumVec2(vB2, wB, this.m_rB);\n      var C = this.m_length - this.m_maxLength;\n      var Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA));\n      if (C < 0) {\n        Cdot += step.inv_dt * C;\n      }\n      var impulse = -this.m_mass * Cdot;\n      var oldImpulse = this.m_impulse;\n      this.m_impulse = math_min$1(0, this.m_impulse + impulse);\n      impulse = this.m_impulse - oldImpulse;\n      var P3 = Vec2.mulNumVec2(impulse, this.m_u);\n      vA2.subMul(this.m_invMassA, P3);\n      wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3);\n      vB2.addMul(this.m_invMassB, P3);\n      wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3);\n      this.m_bodyA.c_velocity.v = vA2;\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v = vB2;\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    RopeJoint2.prototype.solvePositionConstraints = function(step) {\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n      var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n      var u = Vec2.zero();\n      u.addCombine(1, cB2, 1, rB2);\n      u.subCombine(1, cA2, 1, rA2);\n      var length = u.normalize();\n      var C = length - this.m_maxLength;\n      C = clamp(C, 0, SettingsInternal.maxLinearCorrection);\n      var impulse = -this.m_mass * C;\n      var P3 = Vec2.mulNumVec2(impulse, u);\n      cA2.subMul(this.m_invMassA, P3);\n      aA -= this.m_invIA * Vec2.crossVec2Vec2(rA2, P3);\n      cB2.addMul(this.m_invMassB, P3);\n      aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, P3);\n      this.m_bodyA.c_position.c.setVec2(cA2);\n      this.m_bodyA.c_position.a = aA;\n      this.m_bodyB.c_position.c.setVec2(cB2);\n      this.m_bodyB.c_position.a = aB;\n      return length - this.m_maxLength < SettingsInternal.linearSlop;\n    };\n    RopeJoint2.TYPE = \"rope-joint\";\n    return RopeJoint2;\n  }(Joint)\n);\nvar math_abs$1 = Math.abs;\nvar math_PI$1 = Math.PI;\nvar DEFAULTS$1 = {\n  frequencyHz: 0,\n  dampingRatio: 0\n};\nvar WeldJoint = (\n  /** @class */\n  function(_super) {\n    __extends(WeldJoint2, _super);\n    function WeldJoint2(def, bodyA, bodyB, anchor) {\n      var _this = this;\n      if (!(_this instanceof WeldJoint2)) {\n        return new WeldJoint2(def, bodyA, bodyB, anchor);\n      }\n      def = options(def, DEFAULTS$1);\n      _this = _super.call(this, def, bodyA, bodyB) || this;\n      bodyA = _this.m_bodyA;\n      bodyB = _this.m_bodyB;\n      _this.m_type = WeldJoint2.TYPE;\n      _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero());\n      _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero());\n      _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n      _this.m_frequencyHz = def.frequencyHz;\n      _this.m_dampingRatio = def.dampingRatio;\n      _this.m_impulse = new Vec3();\n      _this.m_bias = 0;\n      _this.m_gamma = 0;\n      _this.m_mass = new Mat33();\n      return _this;\n    }\n    WeldJoint2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        bodyA: this.m_bodyA,\n        bodyB: this.m_bodyB,\n        collideConnected: this.m_collideConnected,\n        frequencyHz: this.m_frequencyHz,\n        dampingRatio: this.m_dampingRatio,\n        localAnchorA: this.m_localAnchorA,\n        localAnchorB: this.m_localAnchorB,\n        referenceAngle: this.m_referenceAngle\n      };\n    };\n    WeldJoint2._deserialize = function(data, world, restore) {\n      data = __assign({}, data);\n      data.bodyA = restore(Body, data.bodyA, world);\n      data.bodyB = restore(Body, data.bodyB, world);\n      var joint = new WeldJoint2(data);\n      return joint;\n    };\n    WeldJoint2.prototype._reset = function(def) {\n      if (def.anchorA) {\n        this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA));\n      } else if (def.localAnchorA) {\n        this.m_localAnchorA.setVec2(def.localAnchorA);\n      }\n      if (def.anchorB) {\n        this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB));\n      } else if (def.localAnchorB) {\n        this.m_localAnchorB.setVec2(def.localAnchorB);\n      }\n      if (Number.isFinite(def.frequencyHz)) {\n        this.m_frequencyHz = def.frequencyHz;\n      }\n      if (Number.isFinite(def.dampingRatio)) {\n        this.m_dampingRatio = def.dampingRatio;\n      }\n    };\n    WeldJoint2.prototype.getLocalAnchorA = function() {\n      return this.m_localAnchorA;\n    };\n    WeldJoint2.prototype.getLocalAnchorB = function() {\n      return this.m_localAnchorB;\n    };\n    WeldJoint2.prototype.getReferenceAngle = function() {\n      return this.m_referenceAngle;\n    };\n    WeldJoint2.prototype.setFrequency = function(hz) {\n      this.m_frequencyHz = hz;\n    };\n    WeldJoint2.prototype.getFrequency = function() {\n      return this.m_frequencyHz;\n    };\n    WeldJoint2.prototype.setDampingRatio = function(ratio) {\n      this.m_dampingRatio = ratio;\n    };\n    WeldJoint2.prototype.getDampingRatio = function() {\n      return this.m_dampingRatio;\n    };\n    WeldJoint2.prototype.getAnchorA = function() {\n      return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n    };\n    WeldJoint2.prototype.getAnchorB = function() {\n      return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n    };\n    WeldJoint2.prototype.getReactionForce = function(inv_dt) {\n      return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n    };\n    WeldJoint2.prototype.getReactionTorque = function(inv_dt) {\n      return inv_dt * this.m_impulse.z;\n    };\n    WeldJoint2.prototype.initVelocityConstraints = function(step) {\n      this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n      this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n      this.m_invMassA = this.m_bodyA.m_invMass;\n      this.m_invMassB = this.m_bodyB.m_invMass;\n      this.m_invIA = this.m_bodyA.m_invI;\n      this.m_invIB = this.m_bodyB.m_invI;\n      var aA = this.m_bodyA.c_position.a;\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var aB = this.m_bodyB.c_position.a;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n      this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      var K = new Mat33();\n      K.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y * iB;\n      K.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB;\n      K.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB;\n      K.ex.y = K.ey.x;\n      K.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x * iB;\n      K.ez.y = this.m_rA.x * iA + this.m_rB.x * iB;\n      K.ex.z = K.ez.x;\n      K.ey.z = K.ez.y;\n      K.ez.z = iA + iB;\n      if (this.m_frequencyHz > 0) {\n        K.getInverse22(this.m_mass);\n        var invM = iA + iB;\n        var m = invM > 0 ? 1 / invM : 0;\n        var C = aB - aA - this.m_referenceAngle;\n        var omega = 2 * math_PI$1 * this.m_frequencyHz;\n        var d2 = 2 * m * this.m_dampingRatio * omega;\n        var k = m * omega * omega;\n        var h = step.dt;\n        this.m_gamma = h * (d2 + h * k);\n        this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0;\n        this.m_bias = C * h * k * this.m_gamma;\n        invM += this.m_gamma;\n        this.m_mass.ez.z = invM != 0 ? 1 / invM : 0;\n      } else if (K.ez.z == 0) {\n        K.getInverse22(this.m_mass);\n        this.m_gamma = 0;\n        this.m_bias = 0;\n      } else {\n        K.getSymInverse33(this.m_mass);\n        this.m_gamma = 0;\n        this.m_bias = 0;\n      }\n      if (step.warmStarting) {\n        this.m_impulse.mul(step.dtRatio);\n        var P3 = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n        vA2.subMul(mA, P3);\n        wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_impulse.z);\n        vB2.addMul(mB, P3);\n        wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_impulse.z);\n      } else {\n        this.m_impulse.setZero();\n      }\n      this.m_bodyA.c_velocity.v = vA2;\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v = vB2;\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    WeldJoint2.prototype.solveVelocityConstraints = function(step) {\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      if (this.m_frequencyHz > 0) {\n        var Cdot2 = wB - wA;\n        var impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z);\n        this.m_impulse.z += impulse2;\n        wA -= iA * impulse2;\n        wB += iB * impulse2;\n        var Cdot1 = Vec2.zero();\n        Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB));\n        Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA));\n        var impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1));\n        this.m_impulse.x += impulse1.x;\n        this.m_impulse.y += impulse1.y;\n        var P3 = Vec2.clone(impulse1);\n        vA2.subMul(mA, P3);\n        wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P3);\n        vB2.addMul(mB, P3);\n        wB += iB * Vec2.crossVec2Vec2(this.m_rB, P3);\n      } else {\n        var Cdot1 = Vec2.zero();\n        Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB));\n        Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA));\n        var Cdot2 = wB - wA;\n        var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n        var impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot));\n        this.m_impulse.add(impulse);\n        var P3 = Vec2.neo(impulse.x, impulse.y);\n        vA2.subMul(mA, P3);\n        wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + impulse.z);\n        vB2.addMul(mB, P3);\n        wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + impulse.z);\n      }\n      this.m_bodyA.c_velocity.v = vA2;\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v = vB2;\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    WeldJoint2.prototype.solvePositionConstraints = function(step) {\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n      var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n      var positionError;\n      var angularError;\n      var K = new Mat33();\n      K.ex.x = mA + mB + rA2.y * rA2.y * iA + rB2.y * rB2.y * iB;\n      K.ey.x = -rA2.y * rA2.x * iA - rB2.y * rB2.x * iB;\n      K.ez.x = -rA2.y * iA - rB2.y * iB;\n      K.ex.y = K.ey.x;\n      K.ey.y = mA + mB + rA2.x * rA2.x * iA + rB2.x * rB2.x * iB;\n      K.ez.y = rA2.x * iA + rB2.x * iB;\n      K.ex.z = K.ez.x;\n      K.ey.z = K.ez.y;\n      K.ez.z = iA + iB;\n      if (this.m_frequencyHz > 0) {\n        var C1 = Vec2.zero();\n        C1.addCombine(1, cB2, 1, rB2);\n        C1.subCombine(1, cA2, 1, rA2);\n        positionError = C1.length();\n        angularError = 0;\n        var P3 = Vec2.neg(K.solve22(C1));\n        cA2.subMul(mA, P3);\n        aA -= iA * Vec2.crossVec2Vec2(rA2, P3);\n        cB2.addMul(mB, P3);\n        aB += iB * Vec2.crossVec2Vec2(rB2, P3);\n      } else {\n        var C1 = Vec2.zero();\n        C1.addCombine(1, cB2, 1, rB2);\n        C1.subCombine(1, cA2, 1, rA2);\n        var C2 = aB - aA - this.m_referenceAngle;\n        positionError = C1.length();\n        angularError = math_abs$1(C2);\n        var C = new Vec3(C1.x, C1.y, C2);\n        var impulse = new Vec3();\n        if (K.ez.z > 0) {\n          impulse = Vec3.neg(K.solve33(C));\n        } else {\n          var impulse2 = Vec2.neg(K.solve22(C1));\n          impulse.set(impulse2.x, impulse2.y, 0);\n        }\n        var P3 = Vec2.neo(impulse.x, impulse.y);\n        cA2.subMul(mA, P3);\n        aA -= iA * (Vec2.crossVec2Vec2(rA2, P3) + impulse.z);\n        cB2.addMul(mB, P3);\n        aB += iB * (Vec2.crossVec2Vec2(rB2, P3) + impulse.z);\n      }\n      this.m_bodyA.c_position.c = cA2;\n      this.m_bodyA.c_position.a = aA;\n      this.m_bodyB.c_position.c = cB2;\n      this.m_bodyB.c_position.a = aB;\n      return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop;\n    };\n    WeldJoint2.TYPE = \"weld-joint\";\n    return WeldJoint2;\n  }(Joint)\n);\nvar math_abs = Math.abs;\nvar math_PI = Math.PI;\nvar DEFAULTS = {\n  enableMotor: false,\n  maxMotorTorque: 0,\n  motorSpeed: 0,\n  frequencyHz: 2,\n  dampingRatio: 0.7\n};\nvar WheelJoint = (\n  /** @class */\n  function(_super) {\n    __extends(WheelJoint2, _super);\n    function WheelJoint2(def, bodyA, bodyB, anchor, axis) {\n      var _this = this;\n      if (!(_this instanceof WheelJoint2)) {\n        return new WheelJoint2(def, bodyA, bodyB, anchor, axis);\n      }\n      def = options(def, DEFAULTS);\n      _this = _super.call(this, def, bodyA, bodyB) || this;\n      bodyA = _this.m_bodyA;\n      bodyB = _this.m_bodyB;\n      _this.m_ax = Vec2.zero();\n      _this.m_ay = Vec2.zero();\n      _this.m_type = WheelJoint2.TYPE;\n      _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero());\n      _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero());\n      if (Vec2.isValid(axis)) {\n        _this.m_localXAxisA = bodyA.getLocalVector(axis);\n      } else if (Vec2.isValid(def.localAxisA)) {\n        _this.m_localXAxisA = Vec2.clone(def.localAxisA);\n      } else if (Vec2.isValid(def.localAxis)) {\n        _this.m_localXAxisA = Vec2.clone(def.localAxis);\n      } else {\n        _this.m_localXAxisA = Vec2.neo(1, 0);\n      }\n      _this.m_localYAxisA = Vec2.crossNumVec2(1, _this.m_localXAxisA);\n      _this.m_mass = 0;\n      _this.m_impulse = 0;\n      _this.m_motorMass = 0;\n      _this.m_motorImpulse = 0;\n      _this.m_springMass = 0;\n      _this.m_springImpulse = 0;\n      _this.m_maxMotorTorque = def.maxMotorTorque;\n      _this.m_motorSpeed = def.motorSpeed;\n      _this.m_enableMotor = def.enableMotor;\n      _this.m_frequencyHz = def.frequencyHz;\n      _this.m_dampingRatio = def.dampingRatio;\n      _this.m_bias = 0;\n      _this.m_gamma = 0;\n      return _this;\n    }\n    WheelJoint2.prototype._serialize = function() {\n      return {\n        type: this.m_type,\n        bodyA: this.m_bodyA,\n        bodyB: this.m_bodyB,\n        collideConnected: this.m_collideConnected,\n        enableMotor: this.m_enableMotor,\n        maxMotorTorque: this.m_maxMotorTorque,\n        motorSpeed: this.m_motorSpeed,\n        frequencyHz: this.m_frequencyHz,\n        dampingRatio: this.m_dampingRatio,\n        localAnchorA: this.m_localAnchorA,\n        localAnchorB: this.m_localAnchorB,\n        localAxisA: this.m_localXAxisA\n      };\n    };\n    WheelJoint2._deserialize = function(data, world, restore) {\n      data = __assign({}, data);\n      data.bodyA = restore(Body, data.bodyA, world);\n      data.bodyB = restore(Body, data.bodyB, world);\n      var joint = new WheelJoint2(data);\n      return joint;\n    };\n    WheelJoint2.prototype._reset = function(def) {\n      if (def.anchorA) {\n        this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA));\n      } else if (def.localAnchorA) {\n        this.m_localAnchorA.setVec2(def.localAnchorA);\n      }\n      if (def.anchorB) {\n        this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB));\n      } else if (def.localAnchorB) {\n        this.m_localAnchorB.setVec2(def.localAnchorB);\n      }\n      if (def.localAxisA) {\n        this.m_localXAxisA.setVec2(def.localAxisA);\n        this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1, def.localAxisA));\n      }\n      if (def.enableMotor !== void 0) {\n        this.m_enableMotor = def.enableMotor;\n      }\n      if (Number.isFinite(def.maxMotorTorque)) {\n        this.m_maxMotorTorque = def.maxMotorTorque;\n      }\n      if (Number.isFinite(def.motorSpeed)) {\n        this.m_motorSpeed = def.motorSpeed;\n      }\n      if (Number.isFinite(def.frequencyHz)) {\n        this.m_frequencyHz = def.frequencyHz;\n      }\n      if (Number.isFinite(def.dampingRatio)) {\n        this.m_dampingRatio = def.dampingRatio;\n      }\n    };\n    WheelJoint2.prototype.getLocalAnchorA = function() {\n      return this.m_localAnchorA;\n    };\n    WheelJoint2.prototype.getLocalAnchorB = function() {\n      return this.m_localAnchorB;\n    };\n    WheelJoint2.prototype.getLocalAxisA = function() {\n      return this.m_localXAxisA;\n    };\n    WheelJoint2.prototype.getJointTranslation = function() {\n      var bA = this.m_bodyA;\n      var bB = this.m_bodyB;\n      var pA2 = bA.getWorldPoint(this.m_localAnchorA);\n      var pB2 = bB.getWorldPoint(this.m_localAnchorB);\n      var d2 = Vec2.sub(pB2, pA2);\n      var axis = bA.getWorldVector(this.m_localXAxisA);\n      var translation2 = Vec2.dot(d2, axis);\n      return translation2;\n    };\n    WheelJoint2.prototype.getJointSpeed = function() {\n      var wA = this.m_bodyA.m_angularVelocity;\n      var wB = this.m_bodyB.m_angularVelocity;\n      return wB - wA;\n    };\n    WheelJoint2.prototype.isMotorEnabled = function() {\n      return this.m_enableMotor;\n    };\n    WheelJoint2.prototype.enableMotor = function(flag) {\n      if (flag == this.m_enableMotor)\n        return;\n      this.m_bodyA.setAwake(true);\n      this.m_bodyB.setAwake(true);\n      this.m_enableMotor = flag;\n    };\n    WheelJoint2.prototype.setMotorSpeed = function(speed) {\n      if (speed == this.m_motorSpeed)\n        return;\n      this.m_bodyA.setAwake(true);\n      this.m_bodyB.setAwake(true);\n      this.m_motorSpeed = speed;\n    };\n    WheelJoint2.prototype.getMotorSpeed = function() {\n      return this.m_motorSpeed;\n    };\n    WheelJoint2.prototype.setMaxMotorTorque = function(torque) {\n      if (torque == this.m_maxMotorTorque)\n        return;\n      this.m_bodyA.setAwake(true);\n      this.m_bodyB.setAwake(true);\n      this.m_maxMotorTorque = torque;\n    };\n    WheelJoint2.prototype.getMaxMotorTorque = function() {\n      return this.m_maxMotorTorque;\n    };\n    WheelJoint2.prototype.getMotorTorque = function(inv_dt) {\n      return inv_dt * this.m_motorImpulse;\n    };\n    WheelJoint2.prototype.setSpringFrequencyHz = function(hz) {\n      this.m_frequencyHz = hz;\n    };\n    WheelJoint2.prototype.getSpringFrequencyHz = function() {\n      return this.m_frequencyHz;\n    };\n    WheelJoint2.prototype.setSpringDampingRatio = function(ratio) {\n      this.m_dampingRatio = ratio;\n    };\n    WheelJoint2.prototype.getSpringDampingRatio = function() {\n      return this.m_dampingRatio;\n    };\n    WheelJoint2.prototype.getAnchorA = function() {\n      return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n    };\n    WheelJoint2.prototype.getAnchorB = function() {\n      return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n    };\n    WheelJoint2.prototype.getReactionForce = function(inv_dt) {\n      return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt);\n    };\n    WheelJoint2.prototype.getReactionTorque = function(inv_dt) {\n      return inv_dt * this.m_motorImpulse;\n    };\n    WheelJoint2.prototype.initVelocityConstraints = function(step) {\n      this.m_localCenterA = this.m_bodyA.m_sweep.localCenter;\n      this.m_localCenterB = this.m_bodyB.m_sweep.localCenter;\n      this.m_invMassA = this.m_bodyA.m_invMass;\n      this.m_invMassB = this.m_bodyB.m_invMass;\n      this.m_invIA = this.m_bodyA.m_invI;\n      this.m_invIB = this.m_bodyB.m_invI;\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n      var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n      var d2 = Vec2.zero();\n      d2.addCombine(1, cB2, 1, rB2);\n      d2.subCombine(1, cA2, 1, rA2);\n      {\n        this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA);\n        this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_ay);\n        this.m_sBy = Vec2.crossVec2Vec2(rB2, this.m_ay);\n        this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy * this.m_sBy;\n        if (this.m_mass > 0) {\n          this.m_mass = 1 / this.m_mass;\n        }\n      }\n      this.m_springMass = 0;\n      this.m_bias = 0;\n      this.m_gamma = 0;\n      if (this.m_frequencyHz > 0) {\n        this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA);\n        this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_ax);\n        this.m_sBx = Vec2.crossVec2Vec2(rB2, this.m_ax);\n        var invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx * this.m_sBx;\n        if (invMass > 0) {\n          this.m_springMass = 1 / invMass;\n          var C = Vec2.dot(d2, this.m_ax);\n          var omega = 2 * math_PI * this.m_frequencyHz;\n          var damp = 2 * this.m_springMass * this.m_dampingRatio * omega;\n          var k = this.m_springMass * omega * omega;\n          var h = step.dt;\n          this.m_gamma = h * (damp + h * k);\n          if (this.m_gamma > 0) {\n            this.m_gamma = 1 / this.m_gamma;\n          }\n          this.m_bias = C * h * k * this.m_gamma;\n          this.m_springMass = invMass + this.m_gamma;\n          if (this.m_springMass > 0) {\n            this.m_springMass = 1 / this.m_springMass;\n          }\n        }\n      } else {\n        this.m_springImpulse = 0;\n      }\n      if (this.m_enableMotor) {\n        this.m_motorMass = iA + iB;\n        if (this.m_motorMass > 0) {\n          this.m_motorMass = 1 / this.m_motorMass;\n        }\n      } else {\n        this.m_motorMass = 0;\n        this.m_motorImpulse = 0;\n      }\n      if (step.warmStarting) {\n        this.m_impulse *= step.dtRatio;\n        this.m_springImpulse *= step.dtRatio;\n        this.m_motorImpulse *= step.dtRatio;\n        var P3 = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax);\n        var LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse;\n        var LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;\n        vA2.subMul(this.m_invMassA, P3);\n        wA -= this.m_invIA * LA;\n        vB2.addMul(this.m_invMassB, P3);\n        wB += this.m_invIB * LB;\n      } else {\n        this.m_impulse = 0;\n        this.m_springImpulse = 0;\n        this.m_motorImpulse = 0;\n      }\n      this.m_bodyA.c_velocity.v.setVec2(vA2);\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v.setVec2(vB2);\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    WheelJoint2.prototype.solveVelocityConstraints = function(step) {\n      var mA = this.m_invMassA;\n      var mB = this.m_invMassB;\n      var iA = this.m_invIA;\n      var iB = this.m_invIB;\n      var vA2 = this.m_bodyA.c_velocity.v;\n      var wA = this.m_bodyA.c_velocity.w;\n      var vB2 = this.m_bodyB.c_velocity.v;\n      var wB = this.m_bodyB.c_velocity.w;\n      {\n        var Cdot = Vec2.dot(this.m_ax, vB2) - Vec2.dot(this.m_ax, vA2) + this.m_sBx * wB - this.m_sAx * wA;\n        var impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse);\n        this.m_springImpulse += impulse;\n        var P3 = Vec2.mulNumVec2(impulse, this.m_ax);\n        var LA = impulse * this.m_sAx;\n        var LB = impulse * this.m_sBx;\n        vA2.subMul(mA, P3);\n        wA -= iA * LA;\n        vB2.addMul(mB, P3);\n        wB += iB * LB;\n      }\n      {\n        var Cdot = wB - wA - this.m_motorSpeed;\n        var impulse = -this.m_motorMass * Cdot;\n        var oldImpulse = this.m_motorImpulse;\n        var maxImpulse = step.dt * this.m_maxMotorTorque;\n        this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n        impulse = this.m_motorImpulse - oldImpulse;\n        wA -= iA * impulse;\n        wB += iB * impulse;\n      }\n      {\n        var Cdot = Vec2.dot(this.m_ay, vB2) - Vec2.dot(this.m_ay, vA2) + this.m_sBy * wB - this.m_sAy * wA;\n        var impulse = -this.m_mass * Cdot;\n        this.m_impulse += impulse;\n        var P3 = Vec2.mulNumVec2(impulse, this.m_ay);\n        var LA = impulse * this.m_sAy;\n        var LB = impulse * this.m_sBy;\n        vA2.subMul(mA, P3);\n        wA -= iA * LA;\n        vB2.addMul(mB, P3);\n        wB += iB * LB;\n      }\n      this.m_bodyA.c_velocity.v.setVec2(vA2);\n      this.m_bodyA.c_velocity.w = wA;\n      this.m_bodyB.c_velocity.v.setVec2(vB2);\n      this.m_bodyB.c_velocity.w = wB;\n    };\n    WheelJoint2.prototype.solvePositionConstraints = function(step) {\n      var cA2 = this.m_bodyA.c_position.c;\n      var aA = this.m_bodyA.c_position.a;\n      var cB2 = this.m_bodyB.c_position.c;\n      var aB = this.m_bodyB.c_position.a;\n      var qA = Rot.neo(aA);\n      var qB = Rot.neo(aB);\n      var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n      var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n      var d2 = Vec2.zero();\n      d2.addCombine(1, cB2, 1, rB2);\n      d2.subCombine(1, cA2, 1, rA2);\n      var ay = Rot.mulVec2(qA, this.m_localYAxisA);\n      var sAy = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), ay);\n      var sBy = Vec2.crossVec2Vec2(rB2, ay);\n      var C = Vec2.dot(d2, ay);\n      var k = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_sAy * this.m_sAy + this.m_invIB * this.m_sBy * this.m_sBy;\n      var impulse = k != 0 ? -C / k : 0;\n      var P3 = Vec2.mulNumVec2(impulse, ay);\n      var LA = impulse * sAy;\n      var LB = impulse * sBy;\n      cA2.subMul(this.m_invMassA, P3);\n      aA -= this.m_invIA * LA;\n      cB2.addMul(this.m_invMassB, P3);\n      aB += this.m_invIB * LB;\n      this.m_bodyA.c_position.c.setVec2(cA2);\n      this.m_bodyA.c_position.a = aA;\n      this.m_bodyB.c_position.c.setVec2(cB2);\n      this.m_bodyB.c_position.a = aB;\n      return math_abs(C) <= SettingsInternal.linearSlop;\n    };\n    WheelJoint2.TYPE = \"wheel-joint\";\n    return WheelJoint2;\n  }(Joint)\n);\nvar _a;\nvar SID = 0;\nvar SERIALIZE_REF_TYPES = {\n  \"World\": World,\n  \"Body\": Body,\n  \"Joint\": Joint,\n  \"Fixture\": Fixture,\n  \"Shape\": Shape\n};\nvar DESERIALIZE_BY_REF_TYPE = {\n  \"Vec2\": Vec2,\n  \"Vec3\": Vec3,\n  \"World\": World,\n  \"Body\": Body,\n  \"Joint\": Joint,\n  \"Fixture\": Fixture,\n  \"Shape\": Shape\n};\nvar DESERIALIZE_BY_TYPE_FIELD = (_a = {}, _a[Body.STATIC] = Body, _a[Body.DYNAMIC] = Body, _a[Body.KINEMATIC] = Body, _a[ChainShape.TYPE] = ChainShape, // [BoxShape.TYPE]: BoxShape,\n_a[PolygonShape.TYPE] = PolygonShape, _a[EdgeShape.TYPE] = EdgeShape, _a[CircleShape.TYPE] = CircleShape, _a[DistanceJoint.TYPE] = DistanceJoint, _a[FrictionJoint.TYPE] = FrictionJoint, _a[GearJoint.TYPE] = GearJoint, _a[MotorJoint.TYPE] = MotorJoint, _a[MouseJoint.TYPE] = MouseJoint, _a[PrismaticJoint.TYPE] = PrismaticJoint, _a[PulleyJoint.TYPE] = PulleyJoint, _a[RevoluteJoint.TYPE] = RevoluteJoint, _a[RopeJoint.TYPE] = RopeJoint, _a[WeldJoint.TYPE] = WeldJoint, _a[WheelJoint.TYPE] = WheelJoint, _a);\nvar DEFAULT_OPTIONS = {\n  rootClass: World,\n  preSerialize: function(obj) {\n    return obj;\n  },\n  postSerialize: function(data, obj) {\n    return data;\n  },\n  preDeserialize: function(data) {\n    return data;\n  },\n  postDeserialize: function(obj, data) {\n    return obj;\n  }\n};\nvar Serializer = (\n  /** @class */\n  /* @__PURE__ */ function() {\n    function Serializer2(options2) {\n      var _this = this;\n      this.toJson = function(root) {\n        var preSerialize = _this.options.preSerialize;\n        var postSerialize = _this.options.postSerialize;\n        var json = [];\n        var refQueue = [root];\n        var refMemoById = {};\n        function addToRefQueue(value, typeName) {\n          value.__sid = value.__sid || ++SID;\n          if (!refMemoById[value.__sid]) {\n            refQueue.push(value);\n            var index = json.length + refQueue.length;\n            var ref = {\n              refIndex: index,\n              refType: typeName\n            };\n            refMemoById[value.__sid] = ref;\n          }\n          return refMemoById[value.__sid];\n        }\n        function serializeWithHooks(obj2) {\n          obj2 = preSerialize(obj2);\n          var data = obj2._serialize();\n          data = postSerialize(data, obj2);\n          return data;\n        }\n        function traverse(value, noRefType) {\n          if (noRefType === void 0) {\n            noRefType = false;\n          }\n          if (typeof value !== \"object\" || value === null) {\n            return value;\n          }\n          if (typeof value._serialize === \"function\") {\n            if (!noRefType) {\n              for (var typeName in SERIALIZE_REF_TYPES) {\n                if (value instanceof SERIALIZE_REF_TYPES[typeName]) {\n                  return addToRefQueue(value, typeName);\n                }\n              }\n            }\n            value = serializeWithHooks(value);\n          }\n          if (Array.isArray(value)) {\n            var newValue = [];\n            for (var key = 0; key < value.length; key++) {\n              newValue[key] = traverse(value[key]);\n            }\n            value = newValue;\n          } else {\n            var newValue = {};\n            for (var key in value) {\n              if (value.hasOwnProperty(key)) {\n                newValue[key] = traverse(value[key]);\n              }\n            }\n            value = newValue;\n          }\n          return value;\n        }\n        while (refQueue.length) {\n          var obj = refQueue.shift();\n          var str = traverse(obj, true);\n          json.push(str);\n        }\n        return json;\n      };\n      this.fromJson = function(json) {\n        var preDeserialize = _this.options.preDeserialize;\n        var postDeserialize = _this.options.postDeserialize;\n        var rootClass = _this.options.rootClass;\n        var deserializedRefMemoByIndex = {};\n        function deserializeWithHooks(classHint, data, context) {\n          if (!classHint || !classHint._deserialize) {\n            classHint = DESERIALIZE_BY_TYPE_FIELD[data.type];\n          }\n          var deserializer = classHint && classHint._deserialize;\n          if (!deserializer) {\n            return;\n          }\n          data = preDeserialize(data);\n          var classDeserializeFn = classHint._deserialize;\n          var obj = classDeserializeFn(data, context, deserializeChild);\n          obj = postDeserialize(obj, data);\n          return obj;\n        }\n        function deserializeChild(classHint, dataOrRef, context) {\n          var isRefObject = dataOrRef.refIndex && dataOrRef.refType;\n          if (!isRefObject) {\n            return deserializeWithHooks(classHint, dataOrRef, context);\n          }\n          var ref = dataOrRef;\n          if (DESERIALIZE_BY_REF_TYPE[ref.refType]) {\n            classHint = DESERIALIZE_BY_REF_TYPE[ref.refType];\n          }\n          var refIndex = ref.refIndex;\n          if (!deserializedRefMemoByIndex[refIndex]) {\n            var data = json[refIndex];\n            var obj = deserializeWithHooks(classHint, data, context);\n            deserializedRefMemoByIndex[refIndex] = obj;\n          }\n          return deserializedRefMemoByIndex[refIndex];\n        }\n        var root = deserializeWithHooks(rootClass, json[0], null);\n        return root;\n      };\n      this.options = __assign(__assign({}, DEFAULT_OPTIONS), options2);\n    }\n    return Serializer2;\n  }()\n);\nvar worldSerializer = new Serializer({\n  rootClass: World\n});\nSerializer.fromJson = worldSerializer.fromJson;\nSerializer.toJson = worldSerializer.toJson;\nvar Testbed = (\n  /** @class */\n  function() {\n    function Testbed2() {\n    }\n    Testbed2.mount = function(options2) {\n      throw new Error(\"Not implemented\");\n    };\n    Testbed2.start = function(world) {\n      var testbed2 = Testbed2.mount();\n      testbed2.start(world);\n      return testbed2;\n    };\n    return Testbed2;\n  }()\n);\nfunction testbed(a2, b2) {\n  var callback;\n  var options2;\n  if (typeof a2 === \"function\") {\n    callback = a2;\n    options2 = b2;\n  } else if (typeof b2 === \"function\") {\n    callback = b2;\n    options2 = a2;\n  } else {\n    options2 = a2 !== null && a2 !== void 0 ? a2 : b2;\n  }\n  var testbed2 = Testbed.mount(options2);\n  if (callback) {\n    var world = callback(testbed2) || testbed2.world;\n    testbed2.start(world);\n  } else {\n    return testbed2;\n  }\n}\nvar BoxShape = (\n  /** @class */\n  function(_super) {\n    __extends(BoxShape2, _super);\n    function BoxShape2(halfWidth, halfHeight, center2, angle) {\n      var _this = this;\n      if (!(_this instanceof BoxShape2)) {\n        return new BoxShape2(halfWidth, halfHeight, center2, angle);\n      }\n      _this = _super.call(this) || this;\n      _this._setAsBox(halfWidth, halfHeight, center2, angle);\n      return _this;\n    }\n    BoxShape2.TYPE = \"polygon\";\n    return BoxShape2;\n  }(PolygonShape)\n);\nContact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact);\nfunction CircleCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) {\n  CollideCircles(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2);\n}\nvar pA = vec2(0, 0);\nvar pB = vec2(0, 0);\nvar CollideCircles = function(manifold, circleA, xfA2, circleB, xfB2) {\n  manifold.pointCount = 0;\n  transformVec2(pA, xfA2, circleA.m_p);\n  transformVec2(pB, xfB2, circleB.m_p);\n  var distSqr = distSqrVec2(pB, pA);\n  var rA2 = circleA.m_radius;\n  var rB2 = circleB.m_radius;\n  var radius = rA2 + rB2;\n  if (distSqr > radius * radius) {\n    return;\n  }\n  manifold.type = ManifoldType.e_circles;\n  copyVec2(manifold.localPoint, circleA.m_p);\n  zeroVec2(manifold.localNormal);\n  manifold.pointCount = 1;\n  copyVec2(manifold.points[0].localPoint, circleB.m_p);\n  manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n};\nContact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact);\nContact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact);\nfunction EdgeCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) {\n  var shapeA = fixtureA.getShape();\n  var shapeB = fixtureB.getShape();\n  CollideEdgeCircle(manifold, shapeA, xfA2, shapeB, xfB2);\n}\nfunction ChainCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) {\n  var chain = fixtureA.getShape();\n  var edge = new EdgeShape();\n  chain.getChildEdge(edge, indexA);\n  var shapeA = edge;\n  var shapeB = fixtureB.getShape();\n  CollideEdgeCircle(manifold, shapeA, xfA2, shapeB, xfB2);\n}\nvar e = vec2(0, 0);\nvar e1 = vec2(0, 0);\nvar e2 = vec2(0, 0);\nvar Q = vec2(0, 0);\nvar P = vec2(0, 0);\nvar n$2 = vec2(0, 0);\nvar CollideEdgeCircle = function(manifold, edgeA, xfA2, circleB, xfB2) {\n  manifold.pointCount = 0;\n  retransformVec2(Q, xfB2, xfA2, circleB.m_p);\n  var A = edgeA.m_vertex1;\n  var B = edgeA.m_vertex2;\n  subVec2(e, B, A);\n  var u = dotVec2(e, B) - dotVec2(e, Q);\n  var v3 = dotVec2(e, Q) - dotVec2(e, A);\n  var radius = edgeA.m_radius + circleB.m_radius;\n  if (v3 <= 0) {\n    copyVec2(P, A);\n    var dd_1 = distSqrVec2(Q, A);\n    if (dd_1 > radius * radius) {\n      return;\n    }\n    if (edgeA.m_hasVertex0) {\n      var A1 = edgeA.m_vertex0;\n      var B1 = A;\n      subVec2(e1, B1, A1);\n      var u1 = dotVec2(e1, B1) - dotVec2(e1, Q);\n      if (u1 > 0) {\n        return;\n      }\n    }\n    manifold.type = ManifoldType.e_circles;\n    zeroVec2(manifold.localNormal);\n    copyVec2(manifold.localPoint, P);\n    manifold.pointCount = 1;\n    copyVec2(manifold.points[0].localPoint, circleB.m_p);\n    manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n    return;\n  }\n  if (u <= 0) {\n    copyVec2(P, B);\n    var dd_2 = distSqrVec2(Q, P);\n    if (dd_2 > radius * radius) {\n      return;\n    }\n    if (edgeA.m_hasVertex3) {\n      var B2 = edgeA.m_vertex3;\n      var A2 = B;\n      subVec2(e2, B2, A2);\n      var v22 = dotVec2(e2, Q) - dotVec2(e2, A2);\n      if (v22 > 0) {\n        return;\n      }\n    }\n    manifold.type = ManifoldType.e_circles;\n    zeroVec2(manifold.localNormal);\n    copyVec2(manifold.localPoint, P);\n    manifold.pointCount = 1;\n    copyVec2(manifold.points[0].localPoint, circleB.m_p);\n    manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n    return;\n  }\n  var den = lengthSqrVec2(e);\n  combine2Vec2(P, u / den, A, v3 / den, B);\n  var dd = distSqrVec2(Q, P);\n  if (dd > radius * radius) {\n    return;\n  }\n  crossNumVec2(n$2, 1, e);\n  if (dotVec2(n$2, Q) - dotVec2(n$2, A) < 0) {\n    negVec2(n$2);\n  }\n  normalizeVec2(n$2);\n  manifold.type = ManifoldType.e_faceA;\n  copyVec2(manifold.localNormal, n$2);\n  copyVec2(manifold.localPoint, A);\n  manifold.pointCount = 1;\n  copyVec2(manifold.points[0].localPoint, circleB.m_p);\n  manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex);\n};\nvar incidentEdge = [new ClipVertex(), new ClipVertex()];\nvar clipPoints1$1 = [new ClipVertex(), new ClipVertex()];\nvar clipPoints2$1 = [new ClipVertex(), new ClipVertex()];\nvar clipSegmentToLineNormal = vec2(0, 0);\nvar v1 = vec2(0, 0);\nvar n$1 = vec2(0, 0);\nvar xf$1 = transform(0, 0, 0);\nvar v11 = vec2(0, 0);\nvar v12 = vec2(0, 0);\nvar localTangent = vec2(0, 0);\nvar localNormal = vec2(0, 0);\nvar planePoint = vec2(0, 0);\nvar tangent = vec2(0, 0);\nvar normal$1 = vec2(0, 0);\nvar normal1$1 = vec2(0, 0);\nContact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact);\nfunction PolygonContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) {\n  CollidePolygons(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2);\n}\nfunction findMaxSeparation(poly1, xf1, poly2, xf2, output2) {\n  var count1 = poly1.m_count;\n  var count2 = poly2.m_count;\n  var n1s = poly1.m_normals;\n  var v1s = poly1.m_vertices;\n  var v2s = poly2.m_vertices;\n  detransformTransform(xf$1, xf2, xf1);\n  var bestIndex = 0;\n  var maxSeparation2 = -Infinity;\n  for (var i = 0; i < count1; ++i) {\n    rotVec2(n$1, xf$1.q, n1s[i]);\n    transformVec2(v1, xf$1, v1s[i]);\n    var si = Infinity;\n    for (var j = 0; j < count2; ++j) {\n      var sij = dotVec2(n$1, v2s[j]) - dotVec2(n$1, v1);\n      if (sij < si) {\n        si = sij;\n      }\n    }\n    if (si > maxSeparation2) {\n      maxSeparation2 = si;\n      bestIndex = i;\n    }\n  }\n  output2.maxSeparation = maxSeparation2;\n  output2.bestIndex = bestIndex;\n}\nfunction findIncidentEdge(clipVertex, poly1, xf1, edge12, poly2, xf2) {\n  var normals1 = poly1.m_normals;\n  var count2 = poly2.m_count;\n  var vertices2 = poly2.m_vertices;\n  var normals2 = poly2.m_normals;\n  rerotVec2(normal1$1, xf2.q, xf1.q, normals1[edge12]);\n  var index = 0;\n  var minDot = Infinity;\n  for (var i = 0; i < count2; ++i) {\n    var dot = dotVec2(normal1$1, normals2[i]);\n    if (dot < minDot) {\n      minDot = dot;\n      index = i;\n    }\n  }\n  var i1 = index;\n  var i2 = i1 + 1 < count2 ? i1 + 1 : 0;\n  transformVec2(clipVertex[0].v, xf2, vertices2[i1]);\n  clipVertex[0].id.setFeatures(edge12, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n  transformVec2(clipVertex[1].v, xf2, vertices2[i2]);\n  clipVertex[1].id.setFeatures(edge12, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n}\nvar maxSeparation = {\n  maxSeparation: 0,\n  bestIndex: 0\n};\nvar CollidePolygons = function(manifold, polyA, xfA2, polyB, xfB2) {\n  manifold.pointCount = 0;\n  var totalRadius = polyA.m_radius + polyB.m_radius;\n  findMaxSeparation(polyA, xfA2, polyB, xfB2, maxSeparation);\n  var edgeA = maxSeparation.bestIndex;\n  var separationA = maxSeparation.maxSeparation;\n  if (separationA > totalRadius)\n    return;\n  findMaxSeparation(polyB, xfB2, polyA, xfA2, maxSeparation);\n  var edgeB = maxSeparation.bestIndex;\n  var separationB = maxSeparation.maxSeparation;\n  if (separationB > totalRadius)\n    return;\n  var poly1;\n  var poly2;\n  var xf1;\n  var xf2;\n  var edge12;\n  var flip;\n  var k_tol = 0.1 * SettingsInternal.linearSlop;\n  if (separationB > separationA + k_tol) {\n    poly1 = polyB;\n    poly2 = polyA;\n    xf1 = xfB2;\n    xf2 = xfA2;\n    edge12 = edgeB;\n    manifold.type = ManifoldType.e_faceB;\n    flip = true;\n  } else {\n    poly1 = polyA;\n    poly2 = polyB;\n    xf1 = xfA2;\n    xf2 = xfB2;\n    edge12 = edgeA;\n    manifold.type = ManifoldType.e_faceA;\n    flip = false;\n  }\n  incidentEdge[0].recycle();\n  incidentEdge[1].recycle();\n  findIncidentEdge(incidentEdge, poly1, xf1, edge12, poly2, xf2);\n  var count1 = poly1.m_count;\n  var vertices1 = poly1.m_vertices;\n  var iv1 = edge12;\n  var iv2 = edge12 + 1 < count1 ? edge12 + 1 : 0;\n  copyVec2(v11, vertices1[iv1]);\n  copyVec2(v12, vertices1[iv2]);\n  subVec2(localTangent, v12, v11);\n  normalizeVec2(localTangent);\n  crossVec2Num(localNormal, localTangent, 1);\n  combine2Vec2(planePoint, 0.5, v11, 0.5, v12);\n  rotVec2(tangent, xf1.q, localTangent);\n  crossVec2Num(normal$1, tangent, 1);\n  transformVec2(v11, xf1, v11);\n  transformVec2(v12, xf1, v12);\n  var frontOffset = dotVec2(normal$1, v11);\n  var sideOffset1 = -dotVec2(tangent, v11) + totalRadius;\n  var sideOffset2 = dotVec2(tangent, v12) + totalRadius;\n  clipPoints1$1[0].recycle();\n  clipPoints1$1[1].recycle();\n  clipPoints2$1[0].recycle();\n  clipPoints2$1[1].recycle();\n  setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y);\n  var np1 = clipSegmentToLine(clipPoints1$1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1);\n  if (np1 < 2) {\n    return;\n  }\n  setVec2(clipSegmentToLineNormal, tangent.x, tangent.y);\n  var np2 = clipSegmentToLine(clipPoints2$1, clipPoints1$1, clipSegmentToLineNormal, sideOffset2, iv2);\n  if (np2 < 2) {\n    return;\n  }\n  copyVec2(manifold.localNormal, localNormal);\n  copyVec2(manifold.localPoint, planePoint);\n  var pointCount = 0;\n  for (var i = 0; i < clipPoints2$1.length; ++i) {\n    var separation = dotVec2(normal$1, clipPoints2$1[i].v) - frontOffset;\n    if (separation <= totalRadius) {\n      var cp = manifold.points[pointCount];\n      detransformVec2(cp.localPoint, xf2, clipPoints2$1[i].v);\n      cp.id.set(clipPoints2$1[i].id);\n      if (flip) {\n        cp.id.swapFeatures();\n      }\n      ++pointCount;\n    }\n  }\n  manifold.pointCount = pointCount;\n};\nContact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact);\nfunction PolygonCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) {\n  CollidePolygonCircle(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2);\n}\nvar cLocal = vec2(0, 0);\nvar faceCenter = vec2(0, 0);\nvar CollidePolygonCircle = function(manifold, polygonA, xfA2, circleB, xfB2) {\n  manifold.pointCount = 0;\n  retransformVec2(cLocal, xfB2, xfA2, circleB.m_p);\n  var normalIndex = 0;\n  var separation = -Infinity;\n  var radius = polygonA.m_radius + circleB.m_radius;\n  var vertexCount = polygonA.m_count;\n  var vertices = polygonA.m_vertices;\n  var normals = polygonA.m_normals;\n  for (var i = 0; i < vertexCount; ++i) {\n    var s2 = dotVec2(normals[i], cLocal) - dotVec2(normals[i], vertices[i]);\n    if (s2 > radius) {\n      return;\n    }\n    if (s2 > separation) {\n      separation = s2;\n      normalIndex = i;\n    }\n  }\n  var vertIndex1 = normalIndex;\n  var vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;\n  var v13 = vertices[vertIndex1];\n  var v22 = vertices[vertIndex2];\n  if (separation < EPSILON) {\n    manifold.pointCount = 1;\n    manifold.type = ManifoldType.e_faceA;\n    copyVec2(manifold.localNormal, normals[normalIndex]);\n    combine2Vec2(manifold.localPoint, 0.5, v13, 0.5, v22);\n    copyVec2(manifold.points[0].localPoint, circleB.m_p);\n    manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n    return;\n  }\n  var u1 = dotVec2(cLocal, v22) - dotVec2(cLocal, v13) - dotVec2(v13, v22) + dotVec2(v13, v13);\n  var u2 = dotVec2(cLocal, v13) - dotVec2(cLocal, v22) - dotVec2(v22, v13) + dotVec2(v22, v22);\n  if (u1 <= 0) {\n    if (distSqrVec2(cLocal, v13) > radius * radius) {\n      return;\n    }\n    manifold.pointCount = 1;\n    manifold.type = ManifoldType.e_faceA;\n    subVec2(manifold.localNormal, cLocal, v13);\n    normalizeVec2(manifold.localNormal);\n    copyVec2(manifold.localPoint, v13);\n    copyVec2(manifold.points[0].localPoint, circleB.m_p);\n    manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n  } else if (u2 <= 0) {\n    if (distSqrVec2(cLocal, v22) > radius * radius) {\n      return;\n    }\n    manifold.pointCount = 1;\n    manifold.type = ManifoldType.e_faceA;\n    subVec2(manifold.localNormal, cLocal, v22);\n    normalizeVec2(manifold.localNormal);\n    copyVec2(manifold.localPoint, v22);\n    copyVec2(manifold.points[0].localPoint, circleB.m_p);\n    manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n  } else {\n    combine2Vec2(faceCenter, 0.5, v13, 0.5, v22);\n    var separation_1 = dotVec2(cLocal, normals[vertIndex1]) - dotVec2(faceCenter, normals[vertIndex1]);\n    if (separation_1 > radius) {\n      return;\n    }\n    manifold.pointCount = 1;\n    manifold.type = ManifoldType.e_faceA;\n    copyVec2(manifold.localNormal, normals[vertIndex1]);\n    copyVec2(manifold.localPoint, faceCenter);\n    copyVec2(manifold.points[0].localPoint, circleB.m_p);\n    manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n  }\n};\nvar math_min = Math.min;\nContact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact);\nContact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact);\nfunction EdgePolygonContact(manifold, xfA2, fA, indexA, xfB2, fB, indexB) {\n  CollideEdgePolygon(manifold, fA.getShape(), xfA2, fB.getShape(), xfB2);\n}\nvar edge_reuse = new EdgeShape();\nfunction ChainPolygonContact(manifold, xfA2, fA, indexA, xfB2, fB, indexB) {\n  var chain = fA.getShape();\n  chain.getChildEdge(edge_reuse, indexA);\n  CollideEdgePolygon(manifold, edge_reuse, xfA2, fB.getShape(), xfB2);\n}\nvar EPAxisType;\n(function(EPAxisType2) {\n  EPAxisType2[EPAxisType2[\"e_unknown\"] = -1] = \"e_unknown\";\n  EPAxisType2[EPAxisType2[\"e_edgeA\"] = 1] = \"e_edgeA\";\n  EPAxisType2[EPAxisType2[\"e_edgeB\"] = 2] = \"e_edgeB\";\n})(EPAxisType || (EPAxisType = {}));\nvar VertexType;\n(function(VertexType2) {\n  VertexType2[VertexType2[\"e_isolated\"] = 0] = \"e_isolated\";\n  VertexType2[VertexType2[\"e_concave\"] = 1] = \"e_concave\";\n  VertexType2[VertexType2[\"e_convex\"] = 2] = \"e_convex\";\n})(VertexType || (VertexType = {}));\nvar EPAxis = (\n  /** @class */\n  /* @__PURE__ */ function() {\n    function EPAxis2() {\n    }\n    return EPAxis2;\n  }()\n);\nvar TempPolygon = (\n  /** @class */\n  /* @__PURE__ */ function() {\n    function TempPolygon2() {\n      this.vertices = [];\n      this.normals = [];\n      this.count = 0;\n      for (var i = 0; i < SettingsInternal.maxPolygonVertices; i++) {\n        this.vertices.push(vec2(0, 0));\n        this.normals.push(vec2(0, 0));\n      }\n    }\n    return TempPolygon2;\n  }()\n);\nvar ReferenceFace = (\n  /** @class */\n  function() {\n    function ReferenceFace2() {\n      this.v1 = vec2(0, 0);\n      this.v2 = vec2(0, 0);\n      this.normal = vec2(0, 0);\n      this.sideNormal1 = vec2(0, 0);\n      this.sideNormal2 = vec2(0, 0);\n    }\n    ReferenceFace2.prototype.recycle = function() {\n      zeroVec2(this.v1);\n      zeroVec2(this.v2);\n      zeroVec2(this.normal);\n      zeroVec2(this.sideNormal1);\n      zeroVec2(this.sideNormal2);\n    };\n    return ReferenceFace2;\n  }()\n);\nvar clipPoints1 = [new ClipVertex(), new ClipVertex()];\nvar clipPoints2 = [new ClipVertex(), new ClipVertex()];\nvar ie = [new ClipVertex(), new ClipVertex()];\nvar edgeAxis = new EPAxis();\nvar polygonAxis = new EPAxis();\nvar polygonBA = new TempPolygon();\nvar rf = new ReferenceFace();\nvar centroidB = vec2(0, 0);\nvar edge0 = vec2(0, 0);\nvar edge1 = vec2(0, 0);\nvar edge2 = vec2(0, 0);\nvar xf = transform(0, 0, 0);\nvar normal = vec2(0, 0);\nvar normal0 = vec2(0, 0);\nvar normal1 = vec2(0, 0);\nvar normal2 = vec2(0, 0);\nvar lowerLimit = vec2(0, 0);\nvar upperLimit = vec2(0, 0);\nvar perp = vec2(0, 0);\nvar n = vec2(0, 0);\nvar CollideEdgePolygon = function(manifold, edgeA, xfA2, polygonB, xfB2) {\n  detransformTransform(xf, xfA2, xfB2);\n  transformVec2(centroidB, xf, polygonB.m_centroid);\n  var v0 = edgeA.m_vertex0;\n  var v13 = edgeA.m_vertex1;\n  var v22 = edgeA.m_vertex2;\n  var v3 = edgeA.m_vertex3;\n  var hasVertex0 = edgeA.m_hasVertex0;\n  var hasVertex3 = edgeA.m_hasVertex3;\n  subVec2(edge1, v22, v13);\n  normalizeVec2(edge1);\n  setVec2(normal1, edge1.y, -edge1.x);\n  var offset1 = dotVec2(normal1, centroidB) - dotVec2(normal1, v13);\n  var offset0 = 0;\n  var offset2 = 0;\n  var convex1 = false;\n  var convex2 = false;\n  zeroVec2(normal0);\n  zeroVec2(normal2);\n  if (hasVertex0) {\n    subVec2(edge0, v13, v0);\n    normalizeVec2(edge0);\n    setVec2(normal0, edge0.y, -edge0.x);\n    convex1 = crossVec2Vec2(edge0, edge1) >= 0;\n    offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0);\n  }\n  if (hasVertex3) {\n    subVec2(edge2, v3, v22);\n    normalizeVec2(edge2);\n    setVec2(normal2, edge2.y, -edge2.x);\n    convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0;\n    offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v22);\n  }\n  var front;\n  zeroVec2(normal);\n  zeroVec2(lowerLimit);\n  zeroVec2(upperLimit);\n  if (hasVertex0 && hasVertex3) {\n    if (convex1 && convex2) {\n      front = offset0 >= 0 || offset1 >= 0 || offset2 >= 0;\n      if (front) {\n        copyVec2(normal, normal1);\n        copyVec2(lowerLimit, normal0);\n        copyVec2(upperLimit, normal2);\n      } else {\n        scaleVec2(normal, -1, normal1);\n        scaleVec2(lowerLimit, -1, normal1);\n        scaleVec2(upperLimit, -1, normal1);\n      }\n    } else if (convex1) {\n      front = offset0 >= 0 || offset1 >= 0 && offset2 >= 0;\n      if (front) {\n        copyVec2(normal, normal1);\n        copyVec2(lowerLimit, normal0);\n        copyVec2(upperLimit, normal1);\n      } else {\n        scaleVec2(normal, -1, normal1);\n        scaleVec2(lowerLimit, -1, normal2);\n        scaleVec2(upperLimit, -1, normal1);\n      }\n    } else if (convex2) {\n      front = offset2 >= 0 || offset0 >= 0 && offset1 >= 0;\n      if (front) {\n        copyVec2(normal, normal1);\n        copyVec2(lowerLimit, normal1);\n        copyVec2(upperLimit, normal2);\n      } else {\n        scaleVec2(normal, -1, normal1);\n        scaleVec2(lowerLimit, -1, normal1);\n        scaleVec2(upperLimit, -1, normal0);\n      }\n    } else {\n      front = offset0 >= 0 && offset1 >= 0 && offset2 >= 0;\n      if (front) {\n        copyVec2(normal, normal1);\n        copyVec2(lowerLimit, normal1);\n        copyVec2(upperLimit, normal1);\n      } else {\n        scaleVec2(normal, -1, normal1);\n        scaleVec2(lowerLimit, -1, normal2);\n        scaleVec2(upperLimit, -1, normal0);\n      }\n    }\n  } else if (hasVertex0) {\n    if (convex1) {\n      front = offset0 >= 0 || offset1 >= 0;\n      if (front) {\n        copyVec2(normal, normal1);\n        copyVec2(lowerLimit, normal0);\n        scaleVec2(upperLimit, -1, normal1);\n      } else {\n        scaleVec2(normal, -1, normal1);\n        copyVec2(lowerLimit, normal1);\n        scaleVec2(upperLimit, -1, normal1);\n      }\n    } else {\n      front = offset0 >= 0 && offset1 >= 0;\n      if (front) {\n        copyVec2(normal, normal1);\n        copyVec2(lowerLimit, normal1);\n        scaleVec2(upperLimit, -1, normal1);\n      } else {\n        scaleVec2(normal, -1, normal1);\n        copyVec2(lowerLimit, normal1);\n        scaleVec2(upperLimit, -1, normal0);\n      }\n    }\n  } else if (hasVertex3) {\n    if (convex2) {\n      front = offset1 >= 0 || offset2 >= 0;\n      if (front) {\n        copyVec2(normal, normal1);\n        scaleVec2(lowerLimit, -1, normal1);\n        copyVec2(upperLimit, normal2);\n      } else {\n        scaleVec2(normal, -1, normal1);\n        scaleVec2(lowerLimit, -1, normal1);\n        copyVec2(upperLimit, normal1);\n      }\n    } else {\n      front = offset1 >= 0 && offset2 >= 0;\n      if (front) {\n        copyVec2(normal, normal1);\n        scaleVec2(lowerLimit, -1, normal1);\n        copyVec2(upperLimit, normal1);\n      } else {\n        scaleVec2(normal, -1, normal1);\n        scaleVec2(lowerLimit, -1, normal2);\n        copyVec2(upperLimit, normal1);\n      }\n    }\n  } else {\n    front = offset1 >= 0;\n    if (front) {\n      copyVec2(normal, normal1);\n      scaleVec2(lowerLimit, -1, normal1);\n      scaleVec2(upperLimit, -1, normal1);\n    } else {\n      scaleVec2(normal, -1, normal1);\n      copyVec2(lowerLimit, normal1);\n      copyVec2(upperLimit, normal1);\n    }\n  }\n  polygonBA.count = polygonB.m_count;\n  for (var i = 0; i < polygonB.m_count; ++i) {\n    transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]);\n    rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]);\n  }\n  var radius = polygonB.m_radius + edgeA.m_radius;\n  manifold.pointCount = 0;\n  {\n    edgeAxis.type = EPAxisType.e_edgeA;\n    edgeAxis.index = front ? 0 : 1;\n    edgeAxis.separation = Infinity;\n    for (var i = 0; i < polygonBA.count; ++i) {\n      var v4 = polygonBA.vertices[i];\n      var s2 = dotVec2(normal, v4) - dotVec2(normal, v13);\n      if (s2 < edgeAxis.separation) {\n        edgeAxis.separation = s2;\n      }\n    }\n  }\n  if (edgeAxis.type == EPAxisType.e_unknown) {\n    return;\n  }\n  if (edgeAxis.separation > radius) {\n    return;\n  }\n  {\n    polygonAxis.type = EPAxisType.e_unknown;\n    polygonAxis.index = -1;\n    polygonAxis.separation = -Infinity;\n    setVec2(perp, -normal.y, normal.x);\n    for (var i = 0; i < polygonBA.count; ++i) {\n      scaleVec2(n, -1, polygonBA.normals[i]);\n      var s1 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v13);\n      var s22 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v22);\n      var s2 = math_min(s1, s22);\n      if (s2 > radius) {\n        polygonAxis.type = EPAxisType.e_edgeB;\n        polygonAxis.index = i;\n        polygonAxis.separation = s2;\n        break;\n      }\n      if (dotVec2(n, perp) >= 0) {\n        if (dotVec2(n, normal) - dotVec2(upperLimit, normal) < -SettingsInternal.angularSlop) {\n          continue;\n        }\n      } else {\n        if (dotVec2(n, normal) - dotVec2(lowerLimit, normal) < -SettingsInternal.angularSlop) {\n          continue;\n        }\n      }\n      if (s2 > polygonAxis.separation) {\n        polygonAxis.type = EPAxisType.e_edgeB;\n        polygonAxis.index = i;\n        polygonAxis.separation = s2;\n      }\n    }\n  }\n  if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) {\n    return;\n  }\n  var k_relativeTol = 0.98;\n  var k_absoluteTol = 1e-3;\n  var primaryAxis;\n  if (polygonAxis.type == EPAxisType.e_unknown) {\n    primaryAxis = edgeAxis;\n  } else if (polygonAxis.separation > k_relativeTol * edgeAxis.separation + k_absoluteTol) {\n    primaryAxis = polygonAxis;\n  } else {\n    primaryAxis = edgeAxis;\n  }\n  ie[0].recycle();\n  ie[1].recycle();\n  if (primaryAxis.type == EPAxisType.e_edgeA) {\n    manifold.type = ManifoldType.e_faceA;\n    var bestIndex = 0;\n    var bestValue = dotVec2(normal, polygonBA.normals[0]);\n    for (var i = 1; i < polygonBA.count; ++i) {\n      var value = dotVec2(normal, polygonBA.normals[i]);\n      if (value < bestValue) {\n        bestValue = value;\n        bestIndex = i;\n      }\n    }\n    var i1 = bestIndex;\n    var i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0;\n    copyVec2(ie[0].v, polygonBA.vertices[i1]);\n    ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n    copyVec2(ie[1].v, polygonBA.vertices[i2]);\n    ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n    if (front) {\n      rf.i1 = 0;\n      rf.i2 = 1;\n      copyVec2(rf.v1, v13);\n      copyVec2(rf.v2, v22);\n      copyVec2(rf.normal, normal1);\n    } else {\n      rf.i1 = 1;\n      rf.i2 = 0;\n      copyVec2(rf.v1, v22);\n      copyVec2(rf.v2, v13);\n      scaleVec2(rf.normal, -1, normal1);\n    }\n  } else {\n    manifold.type = ManifoldType.e_faceB;\n    copyVec2(ie[0].v, v13);\n    ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n    copyVec2(ie[1].v, v22);\n    ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n    rf.i1 = primaryAxis.index;\n    rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0;\n    copyVec2(rf.v1, polygonBA.vertices[rf.i1]);\n    copyVec2(rf.v2, polygonBA.vertices[rf.i2]);\n    copyVec2(rf.normal, polygonBA.normals[rf.i1]);\n  }\n  setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x);\n  setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y);\n  rf.sideOffset1 = dotVec2(rf.sideNormal1, rf.v1);\n  rf.sideOffset2 = dotVec2(rf.sideNormal2, rf.v2);\n  clipPoints1[0].recycle();\n  clipPoints1[1].recycle();\n  clipPoints2[0].recycle();\n  clipPoints2[1].recycle();\n  var np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);\n  if (np1 < SettingsInternal.maxManifoldPoints) {\n    return;\n  }\n  var np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);\n  if (np2 < SettingsInternal.maxManifoldPoints) {\n    return;\n  }\n  if (primaryAxis.type == EPAxisType.e_edgeA) {\n    copyVec2(manifold.localNormal, rf.normal);\n    copyVec2(manifold.localPoint, rf.v1);\n  } else {\n    copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]);\n    copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]);\n  }\n  var pointCount = 0;\n  for (var i = 0; i < SettingsInternal.maxManifoldPoints; ++i) {\n    var separation = dotVec2(rf.normal, clipPoints2[i].v) - dotVec2(rf.normal, rf.v1);\n    if (separation <= radius) {\n      var cp = manifold.points[pointCount];\n      if (primaryAxis.type == EPAxisType.e_edgeA) {\n        detransformVec2(cp.localPoint, xf, clipPoints2[i].v);\n        cp.id.set(clipPoints2[i].id);\n      } else {\n        copyVec2(cp.localPoint, clipPoints2[i].v);\n        cp.id.set(clipPoints2[i].id);\n        cp.id.swapFeatures();\n      }\n      ++pointCount;\n    }\n  }\n  manifold.pointCount = pointCount;\n};\nvar internal = {\n  CollidePolygons,\n  Settings,\n  Sweep,\n  Manifold,\n  Distance,\n  TimeOfImpact,\n  DynamicTree,\n  stats\n};\nvar DataDriver = (\n  /** @class */\n  function() {\n    function DataDriver2(key, listener) {\n      this._refMap = {};\n      this._map = {};\n      this._xmap = {};\n      this._data = [];\n      this._entered = [];\n      this._exited = [];\n      this._key = key;\n      this._listener = listener;\n    }\n    DataDriver2.prototype.update = function(data) {\n      if (!Array.isArray(data))\n        throw \"Invalid data: \" + data;\n      this._entered.length = 0;\n      this._exited.length = 0;\n      this._data.length = data.length;\n      for (var i = 0; i < data.length; i++) {\n        if (typeof data[i] !== \"object\" || data[i] === null)\n          continue;\n        var d2 = data[i];\n        var id = this._key(d2);\n        if (!this._map[id]) {\n          this._entered.push(d2);\n        } else {\n          delete this._map[id];\n        }\n        this._data[i] = d2;\n        this._xmap[id] = d2;\n      }\n      for (var id in this._map) {\n        this._exited.push(this._map[id]);\n        delete this._map[id];\n      }\n      var temp3 = this._map;\n      this._map = this._xmap;\n      this._xmap = temp3;\n      for (var i = 0; i < this._exited.length; i++) {\n        var d2 = this._exited[i];\n        var key = this._key(d2);\n        var ref = this._refMap[key];\n        this._listener.exit(d2, ref);\n        delete this._refMap[key];\n      }\n      for (var i = 0; i < this._entered.length; i++) {\n        var d2 = this._entered[i];\n        var key = this._key(d2);\n        var ref = this._listener.enter(d2);\n        if (ref) {\n          this._refMap[key] = ref;\n        }\n      }\n      for (var i = 0; i < this._data.length; i++) {\n        if (typeof data[i] !== \"object\" || data[i] === null)\n          continue;\n        var d2 = this._data[i];\n        var key = this._key(d2);\n        var ref = this._refMap[key];\n        this._listener.update(d2, ref);\n      }\n      this._entered.length = 0;\n      this._exited.length = 0;\n      this._data.length = 0;\n    };\n    DataDriver2.prototype.ref = function(d2) {\n      return this._refMap[this._key(d2)];\n    };\n    return DataDriver2;\n  }()\n);\nconst planck = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  AABB,\n  Body,\n  Box: BoxShape,\n  BoxShape,\n  BroadPhase,\n  Chain: ChainShape,\n  ChainShape,\n  Circle: CircleShape,\n  CircleShape,\n  ClipVertex,\n  CollideCircles,\n  CollideEdgeCircle,\n  CollideEdgePolygon,\n  CollidePolygonCircle,\n  CollidePolygons,\n  Contact,\n  ContactEdge,\n  get ContactFeatureType() {\n    return ContactFeatureType;\n  },\n  ContactID,\n  ContactImpulse,\n  DataDriver,\n  Distance,\n  DistanceInput,\n  DistanceJoint,\n  DistanceOutput,\n  DistanceProxy,\n  DynamicTree,\n  Edge: EdgeShape,\n  EdgeShape,\n  Fixture,\n  FixtureProxy,\n  FrictionJoint,\n  GearJoint,\n  Joint,\n  JointEdge,\n  Manifold,\n  ManifoldPoint,\n  get ManifoldType() {\n    return ManifoldType;\n  },\n  Mat22,\n  Mat33,\n  Math: math,\n  MotorJoint,\n  MouseJoint,\n  get PointState() {\n    return PointState;\n  },\n  Polygon: PolygonShape,\n  PolygonShape,\n  PrismaticJoint,\n  PulleyJoint,\n  RevoluteJoint,\n  RopeJoint,\n  Rot,\n  Serializer,\n  Settings,\n  SettingsInternal,\n  Shape,\n  ShapeCast,\n  ShapeCastInput,\n  ShapeCastOutput,\n  SimplexCache,\n  Solver,\n  Sweep,\n  TOIInput,\n  TOIOutput,\n  get TOIOutputState() {\n    return TOIOutputState;\n  },\n  Testbed,\n  TimeOfImpact,\n  TimeStep,\n  Transform,\n  TreeNode,\n  Vec2,\n  Vec3,\n  VelocityConstraintPoint,\n  WeldJoint,\n  WheelJoint,\n  World,\n  WorldManifold,\n  clipSegmentToLine,\n  getPointStates,\n  internal,\n  mixFriction,\n  mixRestitution,\n  stats,\n  testOverlap,\n  testbed\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n  AABB,\n  Body,\n  BoxShape as Box,\n  BoxShape,\n  BroadPhase,\n  ChainShape as Chain,\n  ChainShape,\n  CircleShape as Circle,\n  CircleShape,\n  ClipVertex,\n  CollideCircles,\n  CollideEdgeCircle,\n  CollideEdgePolygon,\n  CollidePolygonCircle,\n  CollidePolygons,\n  Contact,\n  ContactEdge,\n  ContactFeatureType,\n  ContactID,\n  ContactImpulse,\n  DataDriver,\n  Distance,\n  DistanceInput,\n  DistanceJoint,\n  DistanceOutput,\n  DistanceProxy,\n  DynamicTree,\n  EdgeShape as Edge,\n  EdgeShape,\n  Fixture,\n  FixtureProxy,\n  FrictionJoint,\n  GearJoint,\n  Joint,\n  JointEdge,\n  Manifold,\n  ManifoldPoint,\n  ManifoldType,\n  Mat22,\n  Mat33,\n  math as Math,\n  MotorJoint,\n  MouseJoint,\n  PointState,\n  PolygonShape as Polygon,\n  PolygonShape,\n  PrismaticJoint,\n  PulleyJoint,\n  RevoluteJoint,\n  RopeJoint,\n  Rot,\n  Serializer,\n  Settings,\n  SettingsInternal,\n  Shape,\n  ShapeCast,\n  ShapeCastInput,\n  ShapeCastOutput,\n  SimplexCache,\n  Solver,\n  Sweep,\n  TOIInput,\n  TOIOutput,\n  TOIOutputState,\n  Testbed,\n  TimeOfImpact,\n  TimeStep,\n  Transform,\n  TreeNode,\n  Vec2,\n  Vec3,\n  VelocityConstraintPoint,\n  WeldJoint,\n  WheelJoint,\n  World,\n  WorldManifold,\n  clipSegmentToLine,\n  planck as default,\n  getPointStates,\n  internal,\n  mixFriction,\n  mixRestitution,\n  stats,\n  testOverlap,\n  testbed\n};\n//# sourceMappingURL=planck.mjs.map\n","import { Vec2 } from \"planck\";\n\nclass Vec2Pool {\n    constructor(initialSize = 128) {\n        this.available = [];\n        this.inUse = new Set();\n        this.totalCreated = 0;\n\n        // Pre-allocate pool\n        for (let i = 0; i < initialSize; i++) {\n            this.available.push(new Vec2(0, 0));\n            this.totalCreated++;\n        }\n    }\n\n    acquire(x = 0, y = 0) {\n        let vec;\n        if (this.available.length > 0) {\n            vec = this.available.pop();\n        } else {\n            // Expand pool if needed\n            vec = new Vec2(0, 0);\n            this.totalCreated++;\n        }\n\n        vec.x = x;\n        vec.y = y;\n        this.inUse.add(vec);\n        return vec;\n    }\n\n    release(vec) {\n        if (this.inUse.has(vec)) {\n            this.inUse.delete(vec);\n            vec.x = 0;\n            vec.y = 0;\n            this.available.push(vec);\n        }\n    }\n\n    reset() {\n        this.available.push(...this.inUse);\n        this.inUse.clear();\n        // Reset all vectors\n        for (let vec of this.available) {\n            vec.x = 0;\n            vec.y = 0;\n        }\n    }\n\n    stats() {\n        return {\n            available: this.available.length,\n            inUse: this.inUse.size,\n            total: this.totalCreated\n        };\n    }\n}\n\nexport const vec2Pool = new Vec2Pool();\n","import { World, Vec2, AABB, Box, Circle, Polygon, Edge } from \"planck\"\nimport { Node } from \"./core.js\"\nimport { vec2Pool } from \"./vec2pool.js\"\nimport { globalPerf } from \"./lib.js\";\n//  migrating from matter-js has no kinetic body\n\n\nconst profileMonitor = globalPerf\n\nclass PhysicsWorld {\n    constructor(options = {}) {\n        this.worldWidthPixels = options.worldWidthPixels || 800;\n        this.worldHeightPixels = options.worldHeightPixels || 600;\n\n        // 50 PPM means: 16px character = 0.32m (roughly 1 foot tall)\n        this.ppm = options.ppm || 50;\n\n        this.worldWidthMeters = this.worldWidthPixels / this.ppm;\n        this.worldHeightMeters = this.worldHeightPixels / this.ppm;\n\n        console.log(`Physics world: ${this.worldWidthMeters.toFixed(2)}m × ${this.worldHeightMeters.toFixed(2)}m`);\n        console.log(`PPM: ${this.ppm} (1 meter = ${this.ppm} pixels)`);\n\n        // Gravity in m/s² (Earth = 9.8, but 9.8 feels slow in games)\n        // For platformers, 15-25 m/s² feels better\n        const gravityY = options.gravity !== undefined ? options.gravity : -20;\n        const gravityVec = vec2Pool.acquire(0, gravityY);\n        this.world = new World({\n            gravity: gravityVec\n        });\n\n        vec2Pool.release(gravityVec);\n\n        console.log(`Gravity: ${Math.abs(gravityY)} m/s² downward`);\n\n\n        this.fixedDelta = options.fixedDelta || 1 / 60; // 60Hz\n        this.accumulator = 0;\n        this.maxSubSteps = options.maxSubSteps || 5; // spiral of death protection\n\n        this.bodies = new Map();\n\n        this.setupCollisionEvents();\n    }\n\n\n    pixelsToMeters(pixels) {\n        return pixels / this.ppm;\n    }\n\n    metersToPixels(meters) {\n        return Math.floor(meters * this.ppm);\n    }\n\n    screenToWorld(screenX, screenY) {\n        return {\n            x: this.pixelsToMeters(screenX),\n            y: this.worldHeightMeters - this.pixelsToMeters(screenY)\n        };\n    }\n\n    worldToScreen(worldX, worldY) {\n        return {\n            x: this.metersToPixels(worldX),\n            y: this.metersToPixels(this.worldHeightMeters - worldY)\n        };\n    }\n\n    screenVelToWorld(vxPixels, vyPixels) {\n        return {\n            x: this.pixelsToMeters(vxPixels),\n            y: -this.pixelsToMeters(vyPixels) // negative because screen Y down = physics Y up\n        };\n    }\n\n\n    worldVelToScreen(vxMeters, vyMeters) {\n        return {\n            x: this.metersToPixels(vxMeters),\n            y: -this.metersToPixels(vyMeters) // negative for Y-flip \n        };\n    }\n\n    step(delta) {\n        profileMonitor.start(\"physicsStep\")\n\n        this.accumulator += delta;\n        let steps = 0;\n\n        while (this.accumulator >= this.fixedDelta && steps < this.maxSubSteps) {\n            profileMonitor.start(\"worldStep\")\n            this.world.step(this.fixedDelta);\n            profileMonitor.end(\"worldStep\")\n\n            this.accumulator -= this.fixedDelta;\n            steps++;\n        }\n\n        profileMonitor.end(\"physicsStep\")\n\n        if (steps >= this.maxSubSteps) {\n            console.warn(`Physics capped at ${this.maxSubSteps} substeps (frame too slow)`);\n            this.accumulator = 0;\n        }\n\n        return steps;\n    }\n\n\n    addBody(planckBody, rigidBodyNode) {\n        this.bodies.set(planckBody, rigidBodyNode);\n    }\n\n    removeBody(planckBody) {\n        this.bodies.delete(planckBody);\n        this.world.destroyBody(planckBody);\n    }\n\n\n    setupCollisionEvents() {\n        this.world.on(\"begin-contact\", (contact) => {\n            profileMonitor.start(\"collisionEnter\")\n\n            const bodyA = contact.getFixtureA().getBody();\n            const bodyB = contact.getFixtureB().getBody();\n\n            const nodeA = this.bodies.get(bodyA);\n            const nodeB = this.bodies.get(bodyB);\n\n            if (nodeA && nodeA.onCollisionEnter) {\n                nodeA.onCollisionEnter(nodeB, contact);\n            }\n            if (nodeB && nodeB.onCollisionEnter) {\n                nodeB.onCollisionEnter(nodeA, contact);\n            }\n\n            profileMonitor.end(\"collisionEnter\")\n        })\n\n        this.world.on('end-contact', (contact) => {\n            const bodyA = contact.getFixtureA().getBody();\n            const bodyB = contact.getFixtureB().getBody();\n\n            const nodeA = this.bodies.get(bodyA);\n            const nodeB = this.bodies.get(bodyB);\n\n            if (nodeA && nodeA.onCollisionExit) {\n                nodeA.onCollisionExit(nodeB, contact);\n            }\n            if (nodeB && nodeB.onCollisionExit) {\n                nodeB.onCollisionExit(nodeA, contact);\n            }\n        });\n\n        // pre-solve for continuous collision response\n        this.world.on('pre-solve', (contact, oldManifold) => {\n            profileMonitor.start(\"collisionStay\")\n\n            const bodyA = contact.getFixtureA().getBody();\n            const bodyB = contact.getFixtureB().getBody();\n\n            const nodeA = this.bodies.get(bodyA);\n            const nodeB = this.bodies.get(bodyB);\n\n            if (nodeA && nodeA.onCollisionStay) {\n                nodeA.onCollisionStay(nodeB, contact);\n            }\n            if (nodeB && nodeB.onCollisionStay) {\n                nodeB.onCollisionStay(nodeA, contact);\n            }\n\n            profileMonitor.end(\"collisionStay\")\n        });\n    }\n\n\n    queryPoint(screenX, screenY) {\n        profileMonitor.start(\"queryPoint\")\n\n        const worldPos = this.screenToWorld(screenX, screenY)\n        const point = vec2Pool.acquire(worldPos.x, worldPos.y);\n\n        const hits = []\n        this.world.queryAABB(\n            AABB(point, point), (fixture) => {\n                if (fixture.testPoint(point)) {\n                    const body = fixture.getBody();\n                    const node = this.bodies.get(body);\n                    if (node) hits.push(node);\n                }\n                return true; // Continue query\n            }\n        )\n        vec2Pool.release(point);\n\n        profileMonitor.end(\"queryPoint\")\n        return hits;\n    }\n\n\n    raycastScreen(x1, y1, x2, y2) {\n        profileMonitor.start(\"rayCast\")\n\n        const p1 = this.screenToWorld(x1, y1);\n        const p2 = this.screenToWorld(x2, y2);\n\n        let closestHit = null;\n        let closestFraction = 1;\n\n        const rayStart = vec2Pool.acquire(p1.x, p1.y);\n        const rayEnd = vec2Pool.acquire(p2.x, p2.y);\n\n        this.world.rayCast(\n            rayStart,\n            rayEnd,\n            (fixture, point, normal, fraction) => {\n                if (fraction < closestFraction) {\n                    closestFraction = fraction;\n                    const body = fixture.getBody();\n                    const node = this.bodies.get(body);\n                    const screenPoint = this.worldToScreen(point.x, point.y);\n\n                    closestHit = {\n                        node,\n                        point: screenPoint,\n                        normal: { x: normal.x, y: -normal.y }, // Flip Y for screen space\n                        fraction\n                    };\n                }\n                return fraction; // continue searching for closer hits\n            }\n        );\n\n        vec2Pool.release(rayStart);\n        vec2Pool.release(rayEnd);\n\n        profileMonitor.end(\"rayCast\")\n        return closestHit;\n    }\n}\n\n\n\nexport function createPhysicsWorld(canvas, options = {}) {\n    return new PhysicsWorld({\n        worldWidthPixels: canvas.width,\n        worldHeightPixels: canvas.height,\n        ...options\n    });\n}\n\n\n\nexport class RigidBody2D extends Node {\n    constructor(name, options = {}) {\n        super(name);\n\n        // console.log(options)\n        this.type = options.type || 'dynamic'; // dynamic, kinematic, static\n        this.mass = options.mass || 1.0;\n        this.friction = options.friction || 0.3;\n        this.restitution = options.restitution || 0.0; // bounciness\n        this.linearDamping = options.linearDamping || 0.0; // air resistance\n        this.angularDamping = options.angularDamping || 0.01;\n\n        // describes the motion of a rigid body rotating around a stationary axis, where every point on the body moves in a circle, maintaining a constant distance from the axis\n        this.fixedRotation = options.fixedRotation !== undefined ? options.fixedRotation : false;\n\n        this.pivot = options.pivot || 'center';\n        this.gravityScale = options.gravityScale != undefined ? options.gravityScale : 1;\n        // console.log(options.gravityScale, this.gravityScale)\n\n        this.body = null;\n\n        this.physicsWorld = undefined;\n\n\n\n\n        this.onCollisionEnter = null; // (other, contact) => {}\n        this.onCollisionStay = null;\n        this.onCollisionExit = null;\n\n        this.collisionCategory = options.collisionCategory || 0x0001;\n        this.collisionMask = options.collisionMask || 0xFFFF;\n\n        this.anchorOffset = null; // in meters, relative to body center\n\n        this.sprite = null\n    }\n\n    /**\n * Add collision box with automatic anchor matching\n * \n * @param {number} widthPixels - Box width in pixels\n * @param {number} heightPixels - Box height in pixels\n */\n    addCollisionBox(widthPixels, heightPixels, options = {}) {\n        const shape = new CollisionShape2D('box', {\n            width: widthPixels,\n            height: heightPixels,\n            anchor: options.anchor || this.pivot,\n            ...options\n        });\n\n        this.anchorOffset = shape.anchorOffset;\n        this.addChild(shape);\n        return shape;\n    }\n\n    /**\n   * Add collision circle\n   */\n    addCollisionCircle(radiusPixels, options = {}) {\n        const shape = new CollisionShape2D('circle', {\n            radius: radiusPixels,\n            anchor: options.anchor || this.pivot,\n            ...options\n        });\n\n        this.anchorOffset = shape.anchorOffset;\n        this.addChild(shape);\n        return shape;\n    }\n\n    addCollisionShape(shape /* CollisionShape2D */) {\n        if (!shape) return null;\n        // Use shape's anchor/pivot to update body anchorOffset\n        this.anchorOffset = shape.anchorOffset;\n        this.addChild(shape);\n        return shape;\n    }\n\n    addCollisionPolygon(points = [], options = {}) {\n        const opts = Object.assign({\n            points: points,\n            x: options.x || 0,\n            y: options.y || 0,\n            anchor: options.anchor || this.pivot,\n            closed: options.closed === undefined ? true : !!options.closed\n        }, options);\n\n        const shapeType = opts.closed ? 'polygon' : 'poly';\n        const shape = new CollisionShape2D(shapeType, opts);\n\n        this.anchorOffset = shape.anchorOffset;\n        this.addChild(shape);\n        return shape;\n    }\n\n    addCollisionPolyline(points = [], options = {}) {\n        const opts = Object.assign({}, options, { points, closed: false, anchor: options.anchor || this.pivot });\n        const shape = new CollisionShape2D('line', opts);\n\n        this.anchorOffset = shape.anchorOffset;\n        this.addChild(shape);\n        return shape;\n    }\n\n    addCollisionPoint(options = {}) {\n        const x = options.x || 0;\n        const y = options.y || 0;\n        // If you later support a 'point' shape in CollisionShape2D, switch to that.\n        // For now make a tiny sensor box so physics queries can hit it.\n        const shape = new CollisionShape2D('box', {\n            width: options.size || 2,\n            height: options.size || 2,\n            x, y,\n            anchor: options.anchor || this.pivot,\n            sensor: options.sensor !== undefined ? options.sensor : true,\n            ...options\n        });\n\n        this.anchorOffset = shape.anchorOffset;\n        this.addChild(shape);\n        return shape;\n    }\n\n\n    addCollisionFromParsed(parsed, options = {}) {\n        if (!parsed || !parsed.type || !parsed.data) {\n            console.warn('[RigidBody2D] addCollisionFromParsed: invalid parsed object');\n            return null;\n        }\n        const d = parsed.data;\n        switch (parsed.type) {\n            case 'point':\n                // d.x/d.y are local offsets from tile top-left; treat them as body-local positions\n                return this.addCollisionPoint(Object.assign({ x: d.x, y: d.y }, options));\n            case 'box': {\n                // Tiled uses top-left; convert to center coords for addCollisionBox-like behaviour\n                const cx = (d.x || 0) + (d.width || 0) / 2;\n                const cy = (d.y || 0) + (d.height || 0) / 2;\n                return this.addCollisionBox(d.width || 0, d.height || 0, Object.assign({ anchor: options.anchor || this.pivot, x: cx, y: cy }, options));\n            }\n            case 'circle':\n                // parseShape returns center\n                return this.addCollisionCircle(d.radius || 0, Object.assign({ anchor: options.anchor || this.pivot, x: d.x, y: d.y }, options));\n            case 'poly':\n            case 'polygon':\n                // d.x/d.y is base; d.points[] are relative\n                return this.addCollisionPolygon(d.points || [], Object.assign({ x: d.x || 0, y: d.y || 0, closed: true, anchor: options.anchor || this.pivot }, options));\n            case 'line':\n            case 'polyline':\n                return this.addCollisionPolyline(d.points || [], Object.assign({ x: d.x || 0, y: d.y || 0, anchor: options.anchor || this.pivot }, options));\n            default:\n                console.warn('[RigidBody2D] addCollisionFromParsed: unknown type', parsed.type);\n                return null;\n        }\n    }\n\n\n    /**\n * Set sprite and auto-configure offset\n */\n    setSprite(sprite) {\n        if (this.sprite) {\n            this.removeChild(this.sprite);\n        }\n        this.sprite = sprite;\n        this.addChild(sprite);\n        this.updateSpriteOffset();\n    }\n\n    updateSpriteOffset() {\n        if (!this.sprite) return;\n\n        const w = this.sprite.frameWidth;\n        const h = this.sprite.frameHeight;\n        const offset = this.getPivotToTopLeftOffset(w, h);\n\n        this.sprite.offset.x = offset.x;\n        this.sprite.offset.y = offset.y;\n    }\n\n    getPivotToTopLeftOffset(width, height) {\n        const hw = width / 2;\n        const hh = height / 2;\n\n        switch (this.pivot) {\n            case 'top-left': return { x: 0, y: 0 };\n            case 'top-center': return { x: -hw, y: 0 };\n            case 'top-right': return { x: -width, y: 0 };\n            case 'center-left': return { x: 0, y: -hh };\n            case 'center': return { x: -hw, y: -hh };\n            case 'center-right': return { x: -width, y: -hh };\n            case 'bottom-left': return { x: 0, y: -height };\n            case 'bottom-center': return { x: -hw, y: -height };\n            case 'bottom-right': return { x: -width, y: -height };\n            default: return { x: -hw, y: -hh };\n        }\n    }\n\n    createBody() {\n\n        if (this.body) return;\n\n        const shapes = this.children.filter(c => c instanceof CollisionShape2D);\n        if (shapes.length === 0) {\n            console.warn(`RigidBody2D \"${this.name}\" has no collision shapes`);\n            return;\n        }\n        const screenPos = this.getWorldPosition();\n        const worldPos = this.physicsWorld.screenToWorld(screenPos.x, screenPos.y);\n\n        let planckType = 'dynamic';\n        if (this.type === 'static') planckType = 'static';\n        if (this.type === 'kinematic') planckType = 'kinematic';\n\n        this.body = this.physicsWorld.world.createBody({\n            type: planckType,\n            position: new Vec2(worldPos.x, worldPos.y),\n            angle: -this.worldRotation, // negative because screen rotation is opposite\n            linearDamping: this.linearDamping,\n            angularDamping: this.angularDamping,\n            fixedRotation: this.fixedRotation,\n            gravityScale: this.gravityScale,\n        });\n\n\n\n\n        for (const shape of shapes) {\n            shape.createPlanckFixture(this.body, this.physicsWorld);\n        }\n\n        if (this.type === 'dynamic' && this.mass !== 1.0) {\n            const massData = this.body.getMassData();\n            massData.mass = this.mass;\n            this.body.setMassData(massData);\n        }\n\n        this.physicsWorld.addBody(this.body, this);\n    }\n\n    _ready() {\n        super._ready();\n\n        // find physics world by walking up scene tree\n        let current = this.parent;\n        while (current) {\n            if (current.physicsWorld) {\n                this.physicsWorld = current.physicsWorld;\n                break;\n            }\n            current = current.parent;\n        }\n\n        if (!this.physicsWorld) {\n            console.warn(`RigidBody2D \"${this.name}\" not added to physics world`);\n            return;\n        }\n\n        this.createBody();\n    }\n\n\n    /**\n   * Sync transform with physics body\n   * \n   * Authority:\n   * - Dynamic: Physics → Node (read from Planck)\n   * - Kinematic: Node → Physics (write velocity to Planck)\n   * - Static: No sync\n   */\n    _process(delta) {\n        super._process(delta);\n\n        if (!this.body) return;\n        // console.log(this.type)\n        if (this.type === 'dynamic') {\n            // physics controls us - read from Planck\n            const physPos = this.body.getPosition();\n            const screenPos = this.physicsWorld.worldToScreen(physPos.x, physPos.y);\n\n            // convert back to local coords\n            const local = this.worldToLocal(screenPos.x, screenPos.y);\n            this.position.x = local.x;\n            this.position.y = local.y;\n\n            // rotation (negate because screen rotation opposite)\n            const physAngle = this.body.getAngle();\n            this.rotation = -physAngle - (this.parent ? this.parent.worldRotation : 0);\n\n            this.markDirty();\n        } else if (this.type === 'kinematic') {\n            // we control physics - write velocity to Planck\n\n            if (this.transformDirty) {\n                const targetScreenPos = this.getWorldPosition();\n                const targetWorldPos = this.physicsWorld.screenToWorld(targetScreenPos.x, targetScreenPos.y);\n\n                // Calculate velocity to reach target in one physics step\n                const currentPos = this.body.getPosition();\n                const dt = this.physicsWorld.fixedDelta;\n                const velX = (targetWorldPos.x - currentPos.x) / dt;\n                const velY = (targetWorldPos.y - currentPos.y) / dt;\n                const velVec = vec2Pool.acquire(velX, velY);\n                this.body.setLinearVelocity(velVec);\n                vec2Pool.release(velVec);\n\n                // Handle rotation\n                const targetAngle = -this.worldRotation;\n                const currentAngle = this.body.getAngle();\n                const angularVel = (targetAngle - currentAngle) / dt;\n                this.body.setAngularVelocity(angularVel);\n            }\n        }\n    }\n\n    /**\n  * Apply force (for dynamic bodies)\n  * Forces are in SCREEN space (pixels/s²), converted internally\n  */\n    applyForce(forceXPixels, forceYPixels, worldXPixels = null, worldYPixels = null) {\n        if (!this.body || this.type !== 'dynamic') return;\n\n        const forceWorld = this.physicsWorld.screenVelToWorld(forceXPixels, forceYPixels);\n\n        let point = this.body.getWorldCenter();\n        if (worldXPixels !== null) {\n            const pointWorld = this.physicsWorld.screenToWorld(worldXPixels, worldYPixels);\n            point = vec2Pool.acquire(pointWorld.x, pointWorld.y);\n        }\n\n        const forceVec = vec2Pool.acquire(forceWorld.x, forceWorld.y);\n        this.body.applyForce(forceVec, point);\n\n        vec2Pool.release(forceVec);\n        if (worldXPixels !== null) {\n            vec2Pool.release(point);\n        }\n    }\n\n    /**\n     * Apply impulse (instant velocity change)\n     * Impulses are in SCREEN space (pixels/s), converted internally\n     */\n    applyImpulse(impulseXPixels, impulseYPixels, worldXPixels = null, worldYPixels = null) {\n        if (!this.body || this.type !== 'dynamic') return;\n\n        const impulseWorld = this.physicsWorld.screenVelToWorld(impulseXPixels, impulseYPixels);\n\n        let point = this.body.getWorldCenter();\n        if (worldXPixels !== null) {\n            const pointWorld = this.physicsWorld.screenToWorld(worldXPixels, worldYPixels);\n            point = vec2Pool.acquire(pointWorld.x, pointWorld.y);\n        }\n\n        const impulseVec = vec2Pool.acquire(impulseWorld.x, impulseWorld.y);\n        this.body.applyLinearImpulse(impulseVec, point);\n\n        vec2Pool.release(impulseVec);\n        if (worldXPixels !== null) {\n            vec2Pool.release(point);\n        }\n    }\n\n    /**\n      * Set velocity directly (in screen space: pixels/s)\n      */\n    setVelocity(vxPixels, vyPixels) {\n        if (!this.body || this.type === 'static') return;\n\n        const velWorld = this.physicsWorld.screenVelToWorld(vxPixels, vyPixels);\n        const velVec = vec2Pool.acquire(velWorld.x, velWorld.y);\n        this.body.setLinearVelocity(velVec);\n        vec2Pool.release(velVec);\n    }\n\n    /**\n     * Get velocity (in screen space: pixels/s)\n     */\n    getVelocity() {\n        if (!this.body) return { x: 0, y: 0 };\n\n        const velWorld = this.body.getLinearVelocity();\n        return this.physicsWorld.worldVelToScreen(velWorld.x, velWorld.y);\n    }\n\n    /**\n     * Cleanup\n     */\n    destroy() {\n        if (this.body && this.physicsWorld) {\n            this.physicsWorld.removeBody(this.body);\n        }\n    }\n\n}\n\n\nexport class CollisionShape2D extends Node {\n    constructor(shapeType, options = {}) {\n        super(`CollisionShape_${shapeType}`);\n\n        this.shapeType = shapeType; // 'box', 'circle', 'polygon', 'poly', 'line'\n        this.options = options;\n\n        this.anchor = options.anchor || 'center';\n\n        this.anchorOffset = this.calculateAnchorOffset();\n    }\n\n    calculateAnchorOffset() {\n        switch (this.shapeType) {\n            case 'box': {\n                const w = this.options.width || 50;\n                const h = this.options.height || 50;\n                return this.getBoxAnchorOffset(w, h);\n            }\n            case 'circle': {\n                const r = this.options.radius || 25;\n                return this.getCircleAnchorOffset(r);\n            }\n            case 'polygon':\n            case 'poly':\n            case 'line': {\n                // For polygons/lines, compute bounding box of points and use box-like anchor rules\n                const pts = this.options.points || [];\n                if (!pts.length) return { x: 0, y: 0 };\n\n                let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n                for (const p of pts) {\n                    minX = Math.min(minX, p.x);\n                    minY = Math.min(minY, p.y);\n                    maxX = Math.max(maxX, p.x);\n                    maxY = Math.max(maxY, p.y);\n                }\n                const width = maxX - minX;\n                const height = maxY - minY;\n\n                // We'll treat anchor relative to bounding-box center like a box\n                return this.getBoxAnchorOffset(width, height);\n            }\n            default:\n                return { x: 0, y: 0 };\n        }\n    }\n\n    getBoxAnchorOffset(width, height) {\n        const hw = width / 2;\n        const hh = height / 2;\n\n        switch (this.anchor) {\n            case 'top-left': return { x: hw, y: hh };\n            case 'top-center': return { x: 0, y: hh };\n            case 'top-right': return { x: -hw, y: hh };\n            case 'center-left': return { x: hw, y: 0 };\n            case 'center': return { x: 0, y: 0 };\n            case 'center-right': return { x: -hw, y: 0 };\n            case 'bottom-left': return { x: hw, y: -hh };\n            case 'bottom-center': return { x: 0, y: -hh };\n            case 'bottom-right': return { x: -hw, y: -hh };\n            default: return { x: 0, y: 0 };\n        }\n    }\n\n    getCircleAnchorOffset(radius) {\n        switch (this.anchor) {\n            case 'center': return { x: 0, y: 0 };\n            case 'top': return { x: 0, y: radius };\n            case 'bottom': return { x: 0, y: -radius };\n            case 'left': return { x: radius, y: 0 };\n            case 'right': return { x: -radius, y: 0 };\n            case 'top-center': return { x: 0, y: radius };\n            case 'bottom-center': return { x: 0, y: -radius };\n            default: return { x: 0, y: 0 };\n        }\n    }\n\n    // Helper: check whether polygon is strictly convex (no reflex vertices)\n    isConvex(points) {\n        const n = points.length;\n        if (n < 3) return false;\n\n        let sign = 0;\n        for (let i = 0; i < n; i++) {\n            const a = points[i];\n            const b = points[(i + 1) % n];\n            const c = points[(i + 2) % n];\n\n            // cross product (b - a) x (c - b)\n            const ux = b.x - a.x;\n            const uy = b.y - a.y;\n            const vx = c.x - b.x;\n            const vy = c.y - b.y;\n            const cross = ux * vy - uy * vx;\n\n            if (Math.abs(cross) < 1e-8) continue; // collinear\n            const currentSign = Math.sign(cross);\n            if (sign === 0) sign = currentSign;\n            else if (currentSign !== sign) return false;\n        }\n        return true;\n    }\n\n    // Convert a Tiled-style point list into Planck Vec2s (in meters), applying options.x/y base and anchor offset.\n    toPlanckVertices(points, physicsWorld) {\n        const baseX = this.options.x || 0;\n        const baseY = this.options.y || 0;\n        const anchorOffset = this.anchorOffset || { x: 0, y: 0 };\n\n        const verts = [];\n        for (let i = 0; i < points.length; i++) {\n            const p = points[i];\n            // position in pixel-space relative to the anchor\n            const px = baseX + p.x - anchorOffset.x;\n            const py = baseY + p.y - anchorOffset.y;\n\n            // convert to meters and flip Y for physics coordinates\n            const vx = physicsWorld.pixelsToMeters(px);\n            const vy = -physicsWorld.pixelsToMeters(py);\n\n            const v = vec2Pool.acquire(vx, vy);\n            verts.push(v);\n        }\n        return verts;\n    }\n\n    // Release a list of vec2s back to pool\n    releaseVecs(vecs) {\n        for (const v of vecs) vec2Pool.release(v);\n    }\n\n    createPlanckFixture(body, physicsWorld) {\n        const offsetMeters = {\n            x: physicsWorld.pixelsToMeters(this.anchorOffset.x),\n            y: -physicsWorld.pixelsToMeters(this.anchorOffset.y) // negate Y for physics space\n        };\n\n        let shape;\n        const fixtures = []; // might push multiple fixtures (edges) when polygon is complex\n\n        switch (this.shapeType) {\n            case 'box': {\n                const hw = physicsWorld.pixelsToMeters(this.options.width || 50) / 2;\n                const hh = physicsWorld.pixelsToMeters(this.options.height || 50) / 2;\n\n                const offsetVec = vec2Pool.acquire(offsetMeters.x, offsetMeters.y);\n                shape = new Box(hw, hh, offsetVec);\n                vec2Pool.release(offsetVec);\n                break;\n            }\n            case 'circle': {\n                const r = physicsWorld.pixelsToMeters(this.options.radius || 25);\n                const offsetVec = vec2Pool.acquire(offsetMeters.x, offsetMeters.y);\n                shape = new Circle(offsetVec, r);\n                vec2Pool.release(offsetVec);\n                break;\n            }\n            case 'polygon':\n            case 'poly': {\n                const rawPoints = (this.options.points || []).slice();\n                if (!rawPoints.length) {\n                    console.warn('Polygon shape has no points');\n                    return null;\n                }\n\n                // Convert to planck vertices (meters), accounting for anchor and base offset\n                const verts = this.toPlanckVertices(rawPoints, physicsWorld);\n\n                // Planck/Box2D polygon limitations: convex, limited vertex count (commonly <= 8).\n                const vertexLimit = 8;\n                const numericVerts = verts.map(v => ({ x: v.x, y: v.y })); // for convex check\n\n                // Determine if convex & under vertex limit\n                if (numericVerts.length <= vertexLimit && this.isConvex(numericVerts)) {\n                    // create single polygon shape\n                    // Planck Polygon constructor accepts an array of Vec2s\n                    shape = new Polygon(verts);\n                    // release verts — constructor copies them internally (same assumption as Box/Circle above)\n                    this.releaseVecs(verts);\n\n                    const fixture = body.createFixture(shape, {\n                        density: this.options.density || 1.0,\n                        friction: this.options.friction || 0.3,\n                        restitution: this.options.restitution || 0.0,\n                        filterCategoryBits: this.options.collisionCategory || 0x0001,\n                        filterMaskBits: this.options.collisionMask || 0xFFFF\n                    });\n                    return fixture;\n                } else {\n                    // fallback: create sequential edge fixtures between consecutive points,\n                    // closing the loop (polygon) or leaving it open (polyline/line).\n                    const isClosed = (this.shapeType === 'polygon' || this.options.closed === true);\n                    for (let i = 0; i < verts.length - 1; i++) {\n                        const v1 = verts[i];\n                        const v2 = verts[i + 1];\n                        const edgeShape = new Edge(v1, v2);\n                        const fixture = body.createFixture(edgeShape, {\n                            density: this.options.density || 1.0,\n                            friction: this.options.friction || 0.3,\n                            restitution: this.options.restitution || 0.0,\n                            filterCategoryBits: this.options.collisionCategory || 0x0001,\n                            filterMaskBits: this.options.collisionMask || 0xFFFF\n                        });\n                        fixtures.push(fixture);\n                    }\n                    if (isClosed && verts.length > 1) {\n                        const last = verts[verts.length - 1];\n                        const first = verts[0];\n                        const edgeShape = new Edge(last, first);\n                        const fixture = body.createFixture(edgeShape, {\n                            density: this.options.density || 1.0,\n                            friction: this.options.friction || 0.3,\n                            restitution: this.options.restitution || 0.0,\n                            filterCategoryBits: this.options.collisionCategory || 0x0001,\n                            filterMaskBits: this.options.collisionMask || 0xFFFF\n                        });\n                        fixtures.push(fixture);\n\n                    }\n\n                    // release vecs after creating edge fixtures\n                    this.releaseVecs(verts);\n\n                    if (!fixtures.length) {\n                        console.warn('Polygon fallback produced no fixtures');\n                        return null;\n                    }\n                    // return array of fixtures (caller should accept this), but keep compatibility:\n                    return fixtures.length === 1 ? fixtures[0] : fixtures;\n                }\n            }\n            case 'line': {\n                // Treat as polyline: create edges between sequential points (do NOT close)\n                const rawPoints = (this.options.points || []).slice();\n                if (rawPoints.length < 2) {\n                    console.warn('Line shape needs at least 2 points');\n                    return null;\n                }\n\n                const verts = this.toPlanckVertices(rawPoints, physicsWorld);\n                for (let i = 0; i < verts.length - 1; i++) {\n                    const v1 = verts[i];\n                    const v2 = verts[i + 1];\n                    const edgeShape = new Edge(v1, v2);\n                    const fixture = body.createFixture(edgeShape, {\n                        density: this.options.density || 1.0,\n                        friction: this.options.friction || 0.3,\n                        restitution: this.options.restitution || 0.0,\n                        filterCategoryBits: this.options.collisionCategory || 0x0001,\n                        filterMaskBits: this.options.collisionMask || 0xFFFF\n                    });\n                    fixtures.push(fixture);\n                }\n\n                this.releaseVecs(verts);\n\n                if (!fixtures.length) return null;\n                return fixtures.length === 1 ? fixtures[0] : fixtures;\n            }\n            default:\n                return null;\n        }\n\n        // If we got a single shape (box/circle), create a single fixture\n        if (shape) {\n            const fixture = body.createFixture(shape, {\n                density: this.options.density || 1.0,\n                friction: this.options.friction || 0.3,\n                restitution: this.options.restitution || 0.0,\n                filterCategoryBits: this.options.collisionCategory || 0x0001,\n                filterMaskBits: this.options.collisionMask || 0xFFFF\n            });\n\n            return fixture;\n        }\n\n        return null;\n    }\n}\n\n\n\n// export class CollisionShape2D extends Node {\n//     constructor(shapeType, options = {}) {\n//         super(`CollisionShape_${shapeType}`);\n\n//         this.shapeType = shapeType; // 'box', 'circle', 'polygon'\n//         this.options = options;\n\n//         this.anchor = options.anchor || 'center';\n\n//         this.anchorOffset = this.calculateAnchorOffset();\n//     }\n\n//     calculateAnchorOffset() {\n//         switch (this.shapeType) {\n//             case 'box': {\n//                 const w = this.options.width || 50;\n//                 const h = this.options.height || 50;\n//                 return this.getBoxAnchorOffset(w, h);\n//             }\n//             case 'circle': {\n//                 const r = this.options.radius || 25;\n//                 return this.getCircleAnchorOffset(r);\n//             }\n//             default:\n//                 return { x: 0, y: 0 };\n//         }\n//     }\n\n//     getBoxAnchorOffset(width, height) {\n//         const hw = width / 2;\n//         const hh = height / 2;\n\n//         switch (this.anchor) {\n//             case 'top-left': return { x: hw, y: hh };\n//             case 'top-center': return { x: 0, y: hh };\n//             case 'top-right': return { x: -hw, y: hh };\n//             case 'center-left': return { x: hw, y: 0 };\n//             case 'center': return { x: 0, y: 0 };\n//             case 'center-right': return { x: -hw, y: 0 };\n//             case 'bottom-left': return { x: hw, y: -hh };\n//             case 'bottom-center': return { x: 0, y: -hh };\n//             case 'bottom-right': return { x: -hw, y: -hh };\n//             default: return { x: 0, y: 0 };\n//         }\n//     }\n\n//     getCircleAnchorOffset(radius) {\n//         switch (this.anchor) {\n//             case 'center': return { x: 0, y: 0 };\n//             case 'top': return { x: 0, y: radius };\n//             case 'bottom': return { x: 0, y: -radius };\n//             case 'left': return { x: radius, y: 0 };\n//             case 'right': return { x: -radius, y: 0 };\n//             case 'top-center': return { x: 0, y: radius };\n//             case 'bottom-center': return { x: 0, y: -radius };\n//             default: return { x: 0, y: 0 };\n//         }\n//     }\n\n\n//     createPlanckFixture(body, physicsWorld) {\n//         const offsetMeters = {\n//             x: physicsWorld.pixelsToMeters(this.anchorOffset.x),\n//             y: -physicsWorld.pixelsToMeters(this.anchorOffset.y) // negate Y for physics space\n//         };\n\n//         let shape;\n\n//         switch (this.shapeType) {\n//              case 'box': {\n//                  const hw = physicsWorld.pixelsToMeters(this.options.width || 50) / 2;\n//                  const hh = physicsWorld.pixelsToMeters(this.options.height || 50) / 2;\n\n//                  const offsetVec = vec2Pool.acquire(offsetMeters.x, offsetMeters.y);\n//                  shape = new Box(hw, hh, offsetVec);\n//                  vec2Pool.release(offsetVec);\n//                  break;\n//              }\n//              case 'circle': {\n\n//                  const r = physicsWorld.pixelsToMeters(this.options.radius || 25);\n//                  const offsetVec = vec2Pool.acquire(offsetMeters.x, offsetMeters.y);\n//                  shape = new Circle(offsetVec, r);\n//                  vec2Pool.release(offsetVec);\n//                  break;\n//              }\n//             case 'polygon': {\n//                 // TODO: Polygon support (vertices need conversion)\n//                 const points = this.options.points.map(point => ({x: physicsWorld.pixelsToMeters(point.x), y: physicsWorld.pixelsToMeters(point.y)}))\n//                 console.log(points)\n//                 console.warn('Polygon shapes not yet implemented');\n//                 return null;\n//             }\n//             default:\n//                 return null;\n//         }\n\n//         // Create fixture with material properties\n//         const fixture = body.createFixture(shape, {\n//             density: this.options.density || 1.0,\n//             friction: this.options.friction || 0.3,\n//             restitution: this.options.restitution || 0.0,\n//             filterCategoryBits: this.options.collisionCategory || 0x0001,\n//             filterMaskBits: this.options.collisionMask || 0xFFFF\n//         });\n\n//         return fixture;\n//     }\n// }\n\n\n\nexport class PhysicsFactory {\n    static createBox(name, xPixels, yPixels, widthPixels, heightPixels, type = 'dynamic', anchor = 'center') {\n        const body = new RigidBody2D(name, { type, pivot: anchor });\n        body.position.x = xPixels;\n        body.position.y = yPixels;\n        body.addCollisionBox(widthPixels, heightPixels);\n        return body;\n    }\n\n    static createCircle(name, xPixels, yPixels, radiusPixels, type = 'dynamic', anchor = 'center') {\n        const body = new RigidBody2D(name, { type, pivot: anchor });\n        body.position.x = xPixels;\n        body.position.y = yPixels;\n        body.addCollisionCircle(radiusPixels);\n        return body;\n    }\n\n    static createGround(name, xPixels, yPixels, widthPixels, heightPixels) {\n        return PhysicsFactory.createBox(name, xPixels, yPixels, widthPixels, heightPixels, 'static', 'center');\n    }\n\n    static createPlatformerCharacter(name, xPixels, yPixels, widthPixels, heightPixels) {\n        const body = new RigidBody2D(name, {\n            type: 'kinematic',\n            pivot: 'bottom-center',\n            fixedRotation: true\n        });\n        body.position.x = xPixels;\n        body.position.y = yPixels;\n        body.addCollisionBox(widthPixels, heightPixels);\n        return body;\n    }\n\n    // --- New: Polygon (closed) ---\n    // points: [{x,y}, ...] relative to baseX/baseY (typically Tiled's polygon points)\n    // anchor: pivot behavior (same string values you use elsewhere)\n    // closed: if false it will be treated as an open polyline (edges only)\n    static createPolygon(name, baseX, baseY, points = [], type = 'dynamic', anchor = 'center', closed = true, shapeOptions = {}) {\n        const body = new RigidBody2D(name, { type, pivot: anchor });\n        body.position.x = baseX;\n        body.position.y = baseY;\n\n        // Try common convenience API first\n        if (typeof body.addCollisionPolygon === 'function') {\n            body.addCollisionPolygon(points, Object.assign({ anchor, closed }, shapeOptions));\n            return body;\n        }\n        // alternative method name\n        if (typeof body.addCollisionPoly === 'function') {\n            body.addCollisionPoly(points, Object.assign({ anchor, closed }, shapeOptions));\n            return body;\n        }\n\n        // Fallback: create CollisionShape2D and attach via addCollisionShape (if exists)\n        if (typeof body.addCollisionShape === 'function') {\n            const shapeType = closed ? 'polygon' : 'poly';\n            const shape = new CollisionShape2D(shapeType, Object.assign({\n                points: points,\n                x: 0,      // points are relative to body.position (we already set baseX/baseY)\n                y: 0,\n                anchor\n            }, shapeOptions));\n            body.addCollisionShape(shape);\n            return body;\n        }\n\n        console.warn(`[PhysicsFactory] createPolygon: RigidBody2D does not expose addCollisionPolygon/addCollisionPoly/addCollisionShape. No collision added for \"${name}\".`);\n        return body;\n    }\n\n    // --- New: Polyline / Line (open) ---\n    static createPolyline(name, baseX, baseY, points = [], type = 'dynamic', anchor = 'center', shapeOptions = {}) {\n        // polyline is an open sequence of edges; reuse createPolygon with closed=false\n        return PhysicsFactory.createPolygon(name, baseX, baseY, points, type, anchor, false, shapeOptions);\n    }\n\n    // --- New: Helper to create body from parsed Tiled object (your parseShape output) ---\n    // parsed: { type: 'box'|'point'|'circle'|'poly'|'line', data: {...} }\n    // name: entity name (string)\n    // bodyType: 'static'|'dynamic'|'kinematic'\n    // options: extra shapeOptions forwarded to collision creaters (density/friction/etc)\n    static createFromParsedShape(parsed, name, bodyType = 'static', options = {}) {\n        if (!parsed || !parsed.type || !parsed.data) {\n            console.warn('[PhysicsFactory] createFromParsedShape: invalid parsed shape');\n            return null;\n        }\n\n        const d = parsed.data;\n        switch (parsed.type) {\n            case 'point': {\n                // Represent a point as a tiny sensor box so it can collide/hit tests.\n                const px = d.x || 0;\n                const py = d.y || 0;\n                const body = new RigidBody2D(name, { type: bodyType, pivot: 'center' });\n                body.position.x = px;\n                body.position.y = py;\n                // If RigidBody2D supports addCollisionPoint, use it; otherwise add tiny box\n                if (typeof body.addCollisionPoint === 'function') {\n                    body.addCollisionPoint();\n                } else {\n                    body.addCollisionBox(2, 2); // 2x2 pixel sensor\n                }\n                return body;\n            }\n\n            case 'box': {\n                // Tiled boxes are given top-left in parseShape; convert to center position\n                const px = (d.x || 0) + (d.width || 0) / 2;\n                const py = (d.y || 0) + (d.height || 0) / 2;\n                return PhysicsFactory.createBox(name, px, py, d.width || 0, d.height || 0, bodyType, options.anchor || 'center');\n            }\n\n            case 'circle': {\n                // parseShape provided center coords already (x and y are center)\n                const px = d.x || 0;\n                const py = d.y || 0;\n                return PhysicsFactory.createCircle(name, px, py, d.radius || 0, bodyType, options.anchor || 'center');\n            }\n\n            case 'poly':\n            case 'polygon': {\n                // d.x/d.y is base position; d.points is array of relative points\n                const baseX = d.x || 0;\n                const baseY = d.y || 0;\n                // pass the points array directly\n                return PhysicsFactory.createPolygon(name, baseX, baseY, d.points || [], bodyType, options.anchor || 'center', true, options);\n            }\n\n            case 'line':\n            case 'polyline': {\n                // open line: d.x/d.y base + d.points\n                const baseX = d.x || 0;\n                const baseY = d.y || 0;\n                return PhysicsFactory.createPolyline(name, baseX, baseY, d.points || [], bodyType, options.anchor || 'center', options);\n            }\n\n            default:\n                console.warn(`[PhysicsFactory] createFromParsedShape: unknown type \"${parsed.type}\"`);\n                return null;\n        }\n    }\n}\n","import { LineDrawer, PolygonDrawer, ShapeDrawer } from \"tessera.js\";\nimport { RigidBody2D } from \"./physicsv2.js\";\n\nexport class CharacterController2D extends RigidBody2D {\n    constructor(name, options = {}) {\n        super(name, {\n            type: 'dynamic',\n            pivot: 'bottom-center',\n            fixedRotation: true,\n            linearDamping: 6.0,  // High damping = tight control\n            friction: 0.0,        // Prevent wall sticking\n            restitution: 0.0,     // No bounce\n            ...options\n        });\n\n\n        // movement parameters (all in pixels/s) <- important to convert to plank scale\n        this.speed = options.speed || 200;\n        this.acceleration = options.acceleration || 2000;\n        this.friction = options.friction || 1500;\n        this.airAcceleration = options.airAcceleration || 1000;\n        this.airFriction = options.airFriction || 500;\n\n        // jump parameters (pixels/s and seconds)\n        this.jumpForce = options.jumpForce || 400;\n        this.maxFallSpeed = options.maxFallSpeed || 500;\n        this.jumpCutMultiplier = options.jumpCutMultiplier || 0.5;\n\n\n        this.coyoteTime = options.coyoteTime || 0.15;\n        this.jumpBufferTime = options.jumpBufferTime || 0.1;\n        this.coyoteTimer = 0;\n        this.jumpBufferTimer = 0;\n\n        this.grounded = false;\n        this.wasGrounded = false;\n        this.jumping = false;\n        this.state = \"idle\"; // idle, walk, jump, fall\n\n\n        this.moveInput = 0;\n        this.jumpPressed = false;\n        this.jumpHeld = false;\n        this.jumpReleased = false;\n\n        this.groundContacts = new Set();\n\n\n        this.onJump = null;\n        this.onLand = null;\n\n\n        this.spriteNode = null;\n        this.animatedSprite = null;\n\n        // collision dimensions (pixels)\n        this.collisionWidth = options.collisionWidth || 24;\n        this.collisionHeight = options.collisionHeight || 40;\n        this.collisionPaddingX = options.collisionPaddingX || 0;\n        this.collisionPaddingY = options.collisionPaddingY || 0;\n\n        this.debugDraw = options.debugDraw !== undefined ? options.debugDraw : false;\n        this.debugColor = options.debugColor || { r: 255, g: 100, b: 100 };\n\n        if (options.sprite) {\n            this.setupSprite(options.sprite);\n        } else {\n            this.setupCollision();\n        }\n    }\n\n    setupSprite(sprite) {\n        this.collisionWidth = sprite.frameWidth - this.collisionPaddingX;\n        this.collisionHeight = sprite.frameHeight - this.collisionPaddingY;\n\n        this.setSprite(sprite);\n        this.spriteNode = sprite;\n        this.setupCollision();\n\n        if (sprite.constructor.name === 'AnimatedSprite') {\n            this.setupAnimations(sprite);\n        }\n    }\n\n    setupCollision() {\n        this.addCollisionBox(this.collisionWidth, this.collisionHeight, {\n            friction: 0.0,\n            restitution: 0.0\n        });\n    }\n\n    setupAnimations(animatedSprite) {\n        this.animatedSprite = animatedSprite;\n        this.prevState = this.state;\n    }\n\n    updateAnimations() {\n        if (!this.animatedSprite) return;\n\n        if (this.state !== this.prevState) {\n            const animName = this.getAnimationForState(this.state);\n            if (animName && this.animatedSprite.animations[animName]) {\n                this.animatedSprite.play(animName);\n            }\n            this.prevState = this.state;\n        }\n\n\n        if (this.moveInput < 0) {\n            this.animatedSprite.flipH = true;\n        } else if (this.moveInput > 0) {\n            this.animatedSprite.flipH = false;\n        }\n    }\n\n\n    getAnimationForState(state) {\n        return {\n            'idle': 'idle',\n            'walk': 'walk',\n            'jump': 'jump',\n            'fall': 'fall'\n        }[state];\n    }\n\n\n    _ready() {\n        super._ready();\n\n        this.onCollisionEnter = (other, contact) => this.handleCollisionEnter(other, contact);\n        this.onCollisionExit = (other, contact) => this.handleCollisionExit(other, contact);\n        this.onCollisionStay = (other, contact) => this.handleCollisionStay(other, contact);\n    }\n\n\n    handleCollisionEnter(other, contact) {\n        if (!contact.isTouching()) return;\n\n        const manifold = contact.getWorldManifold();\n        const normal = manifold.normal;\n\n        const fixtureA = contact.getFixtureA();\n        const isA = fixtureA.getBody() === this.body;\n        const normalY = isA ? -normal.y : normal.y;\n\n        // Ground contact: normal points up (positive Y in physics = up)\n        // Threshold 0.7 = ~45 degree slopes are walkable\n        if (normalY > 0.7) {\n            this.groundContacts.add(other);\n            this.grounded = true;\n        }\n    }\n\n    handleCollisionStay(other, contact) {\n        if (!contact.isTouching()) return;\n\n        const manifold = contact.getWorldManifold();\n        const normal = manifold.normal;\n\n        const fixtureA = contact.getFixtureA();\n        const isA = fixtureA.getBody() === this.body;\n        const normalY = isA ? normal.y : -normal.y;\n\n        if (normalY > 0.7) {\n            this.groundContacts.add(other);\n        }\n    }\n\n    handleCollisionExit(other, contact) {\n        this.groundContacts.delete(other);\n\n        if (this.groundContacts.size === 0) {\n            this.grounded = false;\n        }\n    }\n\n\n    _process(delta) {\n        this.wasGrounded = this.grounded;\n\n\n        this.updateTimers(delta);\n\n\n        this.handleMovement(delta);\n        this.handleJump(delta);\n\n        const vel = this.getVelocity();\n        if (vel.y > this.maxFallSpeed) {\n            this.setVelocity(vel.x, this.maxFallSpeed);\n        }\n\n        // let RigidBody2D sync with Planck\n        super._process(delta); // sync phyics with our transform \n\n\n        this.updateState();\n\n\n        this.updateAnimations();\n\n\n        if (this.grounded && !this.wasGrounded) {\n            if (this.onLand) this.onLand();\n        }\n    }\n\n    updateTimers(delta) {\n        if (!this.grounded) {\n            this.coyoteTimer += delta;\n        } else {\n            this.coyoteTimer = 0;\n        }\n\n        if (this.jumpPressed) {\n            this.jumpBufferTimer = this.jumpBufferTime;\n        } else {\n            this.jumpBufferTimer = Math.max(0, this.jumpBufferTimer - delta);\n        }\n    }\n\n    handleMovement(delta) {\n        const vel = this.getVelocity();\n        const accel = this.grounded ? this.acceleration : this.airAcceleration;\n        const fric = this.grounded ? this.friction : this.airFriction;\n\n        let newVelX = vel.x;\n\n        if (this.moveInput !== 0) {\n            const targetSpeed = this.moveInput * this.speed;\n            const speedDiff = targetSpeed - newVelX;\n            const accelAmount = accel * delta;\n\n            if (Math.abs(speedDiff) < accelAmount) {\n                newVelX = targetSpeed;\n            } else {\n                newVelX += Math.sign(speedDiff) * accelAmount;\n            }\n        } else {\n            const fricAmount = fric * delta;\n            if (Math.abs(newVelX) < fricAmount) {\n                newVelX = 0;\n            } else {\n                newVelX -= Math.sign(newVelX) * fricAmount;\n            }\n        }\n\n        this.setVelocity(newVelX, vel.y);\n    }\n\n    handleJump(delta) {\n        const canJump = this.grounded || this.coyoteTimer < this.coyoteTime;\n        const wantsToJump = this.jumpPressed || this.jumpBufferTimer > 0;\n\n        if (wantsToJump && canJump && !this.jumping) {\n            const vel = this.getVelocity();\n            this.setVelocity(vel.x, -this.jumpForce);\n            this.jumping = true;\n            this.grounded = false;\n            this.groundContacts.clear();\n            this.coyoteTimer = this.coyoteTime + 0.1;\n            this.jumpBufferTimer = 0;\n\n            if (this.onJump) this.onJump();\n        }\n\n        // variable jump height\n        const vel = this.getVelocity();\n        if (this.jumpReleased && this.jumping && vel.y < 0) {\n            this.setVelocity(vel.x, vel.y * this.jumpCutMultiplier);\n            this.jumping = false;\n        }\n\n        if (vel.y > 0) {\n            this.jumping = false;\n        }\n    }\n\n\n    updateState() {\n        const vel = this.getVelocity();\n\n        if (this.grounded) {\n            if (Math.abs(vel.x) > 10) {\n                this.state = \"walk\";\n            } else {\n                this.state = \"idle\";\n            }\n        } else {\n            if (vel.y < -10) {\n                this.state = \"jump\";\n            } else {\n                this.state = \"fall\";\n            }\n        }\n    }\n\n    setMoveInput(direction) {\n        this.moveInput = Math.sign(direction);\n    }\n\n    setJumpInput(pressed, held, released) {\n        this.jumpPressed = pressed;\n        this.jumpHeld = held;\n        this.jumpReleased = released;\n    }\n\n    _draw(canvas, camera) {\n        super._draw(canvas, camera);\n\n        if (!this.debugDraw || !this.body) return;\n\n        const color = this.debugColor;\n\n        for (let fixture = this.body.getFixtureList(); fixture; fixture = fixture.getNext()) {\n            const shape = fixture.getShape();\n\n            if (shape.m_vertices) {\n                const vertices = [];\n                for (let i = 0; i < shape.m_vertices.length; i++) {\n                    const v = this.body.getWorldPoint(shape.m_vertices[i]);\n                    let screenV = this.physicsWorld.worldToScreen(v.x, v.y);\n\n                    if (camera) {\n                        screenV = camera.worldToScreen(screenV.x, screenV.y);\n                    }\n\n                    vertices.push(screenV);\n                }\n\n\n\n\n                PolygonDrawer.strokePolygon(canvas, vertices, 2, color.r, color.g, color.b, 255);\n\n            }\n        }\n\n        let anchorScreen = { x: this.position.x, y: this.position.y };\n        if (camera) {\n            anchorScreen = camera.worldToScreen(anchorScreen.x, anchorScreen.y);\n        }\n\n\n\n        ShapeDrawer.fillCircle(canvas, anchorScreen.x, anchorScreen.y, 4, 255, 255, 0, 255);\n\n        if (this.grounded) {\n            ShapeDrawer.strokeCircle(canvas, anchorScreen.x, anchorScreen.y, 8, 2, 0, 255, 0, 255);\n        }\n\n    }\n\n}\n\n\n\nexport class CharacterInputController {\n    constructor(character, inputMap) {\n        this.character = character;\n        this.inputMap = inputMap;\n        this.prevJumpHeld = false;\n    }\n\n    update() {\n        let moveInput = 0;\n        if (this.inputMap.isActionActive(\"move_left\")) moveInput -= 1;\n        if (this.inputMap.isActionActive(\"move_right\")) moveInput += 1;\n        // if(moveInput != 0){\n        //     console.log(\"should move: \", moveInput)\n        // }\n        this.character.setMoveInput(moveInput);\n\n        const jumpHeld = this.inputMap.isActionActive(\"jump\");\n        // if(jumpHeld)\n        //     console.log(\"should jump\")\n        const jumpPressed = jumpHeld && !this.prevJumpHeld;\n        const jumpReleased = !jumpHeld && this.prevJumpHeld;\n\n        this.character.setJumpInput(jumpPressed, jumpHeld, jumpReleased);\n        this.prevJumpHeld = jumpHeld;\n    }\n}\n\n\n\n/**\n * TopDownController - 8-directional movement for dynamic bodies\n * \n * Uses high damping for tight, responsive controls\n * Dynamic body type allows collision with static geometry\n */\nexport class TopDownController extends RigidBody2D {\n    constructor(name, options = {}) {\n        super(name, {\n            type: 'dynamic',\n            pivot: options.pivot || 'center',\n            fixedRotation: true,\n            linearDamping: options.linearDamping || 8.0,  // High damping = tight control\n            friction: 0.0,        // Prevent wall sticking\n            restitution: 0.0,     // No bounce\n            gravityScale: 0.0,\n            ...options\n        });\n\n        // Movement parameters (pixels/s)\n        this.speed = options.speed || 200;\n        this.acceleration = options.acceleration || 2000;\n        this.friction = options.friction || 1500;\n\n        // Dash ability\n        this.canDash = options.canDash || false;\n        this.dashSpeed = options.dashSpeed || 500;\n        this.dashDuration = options.dashDuration || 0.2;\n        this.dashCooldown = options.dashCooldown || 1.0;\n\n        this.isDashing = false;\n        this.dashTimer = 0;\n        this.dashCooldownTimer = 0;\n        this.dashDirection = { x: 0, y: 0 };\n\n        // Input (set by external controller)\n        this.moveInput = { x: 0, y: 0 };\n        this.dashInput = false;\n\n        // State\n        this.state = \"idle\"; // idle, walk, dash\n\n        // Collision dimensions\n        this.collisionWidth = options.collisionWidth || 24;\n        this.collisionHeight = options.collisionHeight || 24;\n        this.collisionPaddingX = options.collisionPaddingX || 0;\n        this.collisionPaddingY = options.collisionPaddingY || 0;\n\n        this.debugDraw = options.debugDraw !== undefined ? options.debugDraw : false;\n        this.debugColor = options.debugColor || { r: 100, g: 100, b: 255 };\n\n        // Callbacks\n        this.onDashStart = null;\n        this.onDashEnd = null;\n\n        // Sprite setup\n        this.spriteNode = null;\n        this.animatedSprite = null;\n\n        if (options.sprite) {\n            this.setupSprite(options.sprite);\n        } else {\n            this.setupCollision();\n        }\n    }\n\n    setupSprite(sprite) {\n        this.collisionWidth = sprite.frameWidth - this.collisionPaddingX;\n        this.collisionHeight = sprite.frameHeight - this.collisionPaddingY;\n\n        this.setSprite(sprite);\n        this.spriteNode = sprite;\n        this.setupCollision();\n\n        if (sprite.constructor.name === 'AnimatedSprite') {\n            this.setupAnimations(sprite);\n        }\n    }\n\n    setupCollision() {\n        this.addCollisionBox(this.collisionWidth, this.collisionHeight, {\n            friction: 0.0,\n            restitution: 0.0\n        });\n    }\n\n    setupAnimations(animatedSprite) {\n        this.animatedSprite = animatedSprite;\n        this.prevState = this.state;\n    }\n\n    updateAnimations() {\n        if (!this.animatedSprite) return;\n\n        if (this.state !== this.prevState) {\n            const animName = this.getAnimationForState(this.state);\n            if (animName && this.animatedSprite.animations[animName]) {\n                this.animatedSprite.play(animName);\n            }\n            this.prevState = this.state;\n        }\n\n        // Handle sprite direction (8-way)\n        if (this.moveInput.x < 0) {\n            this.animatedSprite.flipH = true;\n        } else if (this.moveInput.x > 0) {\n            this.animatedSprite.flipH = false;\n        }\n    }\n\n    getAnimationForState(state) {\n        return {\n            'idle': 'idle',\n            'walk': 'walk',\n            'dash': 'dash'\n        }[state];\n    }\n\n    _process(delta) {\n        // Update dash timers\n        if (this.isDashing) {\n            this.dashTimer -= delta;\n            if (this.dashTimer <= 0) {\n                this.endDash();\n            }\n        } else {\n            this.dashCooldownTimer = Math.max(0, this.dashCooldownTimer - delta);\n        }\n\n        // Handle dash input\n        if (this.dashInput && this.canDash && !this.isDashing && this.dashCooldownTimer <= 0) {\n            this.startDash();\n        }\n\n        // Handle movement\n        if (this.isDashing) {\n            this.handleDashMovement(delta);\n        } else {\n            this.handleNormalMovement(delta);\n        }\n\n        // Update state\n        this.updateState();\n\n        // Update animations\n        this.updateAnimations();\n\n        // Let RigidBody2D sync with Planck\n        super._process(delta);\n    }\n\n    handleNormalMovement(delta) {\n        const vel = this.getVelocity();\n\n        // Calculate target velocity\n        let targetX = this.moveInput.x * this.speed;\n        let targetY = this.moveInput.y * this.speed;\n\n        // Normalize diagonal movement (prevent faster diagonal speed)\n        if (this.moveInput.x !== 0 && this.moveInput.y !== 0) {\n            const len = Math.sqrt(2);\n            targetX /= len;\n            targetY /= len;\n        }\n\n        let newVelX = vel.x;\n        let newVelY = vel.y;\n\n        // X-axis movement\n        if (this.moveInput.x !== 0) {\n            const speedDiff = targetX - newVelX;\n            const accelAmount = this.acceleration * delta;\n\n            if (Math.abs(speedDiff) < accelAmount) {\n                newVelX = targetX;\n            } else {\n                newVelX += Math.sign(speedDiff) * accelAmount;\n            }\n        } else {\n            // Apply friction on X\n            const fricAmount = this.friction * delta;\n            if (Math.abs(newVelX) < fricAmount) {\n                newVelX = 0;\n            } else {\n                newVelX -= Math.sign(newVelX) * fricAmount;\n            }\n        }\n\n        // Y-axis movement\n        if (this.moveInput.y !== 0) {\n            const speedDiff = targetY - newVelY;\n            const accelAmount = this.acceleration * delta;\n\n            if (Math.abs(speedDiff) < accelAmount) {\n                newVelY = targetY;\n            } else {\n                newVelY += Math.sign(speedDiff) * accelAmount;\n            }\n        } else {\n            // Apply friction on Y\n            const fricAmount = this.friction * delta;\n            if (Math.abs(newVelY) < fricAmount) {\n                newVelY = 0;\n            } else {\n                newVelY -= Math.sign(newVelY) * fricAmount;\n            }\n        }\n\n        this.setVelocity(newVelX, newVelY);\n    }\n\n    handleDashMovement(delta) {\n        // During dash: move at constant dash speed in dash direction\n        const dashVelX = this.dashDirection.x * this.dashSpeed;\n        const dashVelY = this.dashDirection.y * this.dashSpeed;\n        this.setVelocity(dashVelX, dashVelY);\n    }\n\n    startDash() {\n        // Dash in current movement direction\n        let dashDirX = this.moveInput.x;\n        let dashDirY = this.moveInput.y;\n\n        // If not moving, dash in facing direction (right by default)\n        if (dashDirX === 0 && dashDirY === 0) {\n            dashDirX = this.spriteNode && this.spriteNode.flipH ? -1 : 1;\n        }\n\n        // Normalize direction\n        const len = Math.sqrt(dashDirX * dashDirX + dashDirY * dashDirY);\n        if (len > 0) {\n            this.dashDirection.x = dashDirX / len;\n            this.dashDirection.y = dashDirY / len;\n        } else {\n            this.dashDirection.x = 1;\n            this.dashDirection.y = 0;\n        }\n\n        this.isDashing = true;\n        this.dashTimer = this.dashDuration;\n\n        if (this.onDashStart) this.onDashStart();\n    }\n\n    endDash() {\n        this.isDashing = false;\n        this.dashCooldownTimer = this.dashCooldown;\n\n        if (this.onDashEnd) this.onDashEnd();\n    }\n\n    updateState() {\n        const vel = this.getVelocity();\n        const speed = Math.sqrt(vel.x * vel.x + vel.y * vel.y);\n\n        if (this.isDashing) {\n            this.state = \"dash\";\n        } else if (speed > 10) {\n            this.state = \"walk\";\n        } else {\n            this.state = \"idle\";\n        }\n    }\n\n    setMoveInput(x, y) {\n        this.moveInput.x = Math.sign(x);\n        this.moveInput.y = Math.sign(y);\n    }\n\n    setDashInput(pressed) {\n        this.dashInput = pressed;\n    }\n\n    _draw(canvas, camera) {\n        super._draw(canvas, camera);\n\n        if (!this.debugDraw || !this.body) return;\n\n        const color = this.debugColor;\n\n        // Draw collision shape\n        for (let fixture = this.body.getFixtureList(); fixture; fixture = fixture.getNext()) {\n            const shape = fixture.getShape();\n\n            if (shape.m_vertices) {\n                const vertices = [];\n                for (let i = 0; i < shape.m_vertices.length; i++) {\n                    const v = this.body.getWorldPoint(shape.m_vertices[i]);\n                    let screenV = this.physicsWorld.worldToScreen(v.x, v.y);\n\n                    if (camera) {\n                        screenV = camera.worldToScreen(screenV.x, screenV.y);\n                    }\n\n                    vertices.push(screenV);\n                }\n\n                PolygonDrawer.strokePolygon(canvas, vertices, 2, color.r, color.g, color.b, 255);\n            }\n        }\n\n        // Draw center point\n        let anchorScreen = { x: this.position.x, y: this.position.y };\n        if (camera) {\n            anchorScreen = camera.worldToScreen(anchorScreen.x, anchorScreen.y);\n        }\n\n        ShapeDrawer.fillCircle(canvas, anchorScreen.x, anchorScreen.y, 4, 255, 255, 0, 255);\n\n        // Draw dash cooldown indicator\n        if (this.canDash && this.dashCooldownTimer > 0) {\n            const progress = 1 - (this.dashCooldownTimer / this.dashCooldown);\n            const radius = 12;\n            const angle = progress * Math.PI * 2;\n\n            // Simple arc indicator (you can make this fancier)\n            ShapeDrawer.strokeCircle(canvas, anchorScreen.x, anchorScreen.y, radius, 2, 100, 200, 255, 128);\n        }\n\n        // Draw dash direction during dash\n        if (this.isDashing) {\n            const dirEndX = anchorScreen.x + this.dashDirection.x * 20;\n            const dirEndY = anchorScreen.y + this.dashDirection.y * 20;\n            LineDrawer.drawThickLine(canvas, anchorScreen.x, anchorScreen.y, dirEndX, dirEndY, 2, 255, 200, 100, 255, camera);\n        }\n    }\n}\n\n\nexport class TopDownInputController {\n    constructor(character, inputMap) {\n        this.character = character;\n        this.inputMap = inputMap;\n        this.prevDashHeld = false;\n    }\n\n    update() {\n        // 8-directional movement\n        let moveX = 0;\n        let moveY = 0;\n        if (this.inputMap.isActionActive(\"move_left\")) moveX -= 1;\n        if (this.inputMap.isActionActive(\"move_right\")) moveX += 1;\n        if (this.inputMap.isActionActive(\"move_up\")) moveY -= 1;\n        if (this.inputMap.isActionActive(\"move_down\")) moveY += 1;\n\n        this.character.setMoveInput(moveX, moveY);\n\n        // Dash input (if enabled)\n        if (this.character.canDash) {\n            const dashHeld = this.inputMap.isActionActive(\"dash\");\n            const dashPressed = dashHeld && !this.prevDashHeld;\n\n            this.character.setDashInput(dashPressed);\n            this.prevDashHeld = dashHeld;\n        }\n    }\n}","import { ShapeDrawer } from \"tessera.js\";\r\nimport { Node } from \"./core.js\"\r\nimport { globalPerf } from \"./lib.js\";\r\nconst particlePerf = globalPerf\r\n// cache friendly(array of structs) no prototype \r\nfunction createParticle() {\r\n    return {\r\n        active: false,\r\n\r\n        x: 0,\r\n        y: 0,\r\n\r\n        // physics\r\n        vx: 0,\r\n        vy: 0,\r\n\r\n        life: 1.0,\r\n        maxLife: 1.0,\r\n\r\n        // Visual\r\n        size: 4,\r\n        startSize: 4,\r\n        endSize: 2,\r\n\r\n        r: 255,\r\n        g: 255,\r\n        b: 255,\r\n        a: 255,\r\n\r\n        startR: 255,\r\n        startG: 255,\r\n        startB: 255,\r\n        startA: 255,\r\n\r\n        endR: 255,\r\n        endG: 255,\r\n        endB: 255,\r\n        endA: 0\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * ParticleEmitter - manages pool of particles\r\n * \r\n * Common use cases:\r\n * - Explosion (burst of particles)\r\n * - Smoke trail (continuous emission)\r\n * - Coin sparkle (short burst)\r\n * - Dust cloud (ground impact)\r\n * - Magic effect (custom colors/behavior)\r\n */\r\nexport class ParticleEmitter extends Node {\r\n\r\n    constructor(name, options = {}) {\r\n        super(name)\r\n        // pool\r\n        this.maxParticles = options.maxParticles || 100;\r\n        this.particles = [];\r\n        for (let i = 0; i < this.maxParticles; i++) {\r\n            this.particles.push(createParticle());\r\n        }\r\n        this.activeCount = 0;\r\n\r\n\r\n        this.emitting = false;\r\n        this.emissionRate = options.emissionRate || 10; // particles per second\r\n        this.emissionTimer = 0;\r\n\r\n        // \\props\r\n        this.lifetime = options.lifetime || 1.0;\r\n        this.speed = options.speed || [50, 100];\r\n        this.angle = options.angle || [0, 360];       // degrees\r\n        this.spread = options.spread || 0;             // additional angle randomness\r\n\r\n        // physics \r\n        this.gravity = options.gravity || 0;           // pixels per second²\r\n        this.drag = options.drag || 0;                 // velocity multiplier (0.95 = 5% slowdown)\r\n\r\n        // visuals\r\n        this.startSize = options.startSize || 4;\r\n        this.endSize = options.endSize !== undefined ? options.endSize : 2;\r\n\r\n        this.startColor = options.startColor || { r: 255, g: 255, b: 255, a: 255 };\r\n        this.endColor = options.endColor || { r: 255, g: 255, b: 255, a: 0 };\r\n\r\n        this.emitterShape = options.emitterShape || 'point'; // point, circle, box\r\n        this.emitterSize = options.emitterSize || 0;          // Radius for circle, half-width for box\r\n\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {Array<number, number>} value \r\n     * @returns {number}\r\n     */\r\n    randomValue(value) {\r\n        if (Array.isArray(value)) {\r\n            return value[0] + Math.random() * (value[1] - value[0]);\r\n        }\r\n        return value;\r\n    }\r\n\r\n    spawnParticle(x, y, vx, vy) {\r\n        // find inactive particle from pool\r\n        let particle = null;\r\n        for (let i = 0; i < this.maxParticles; i++) {\r\n            if (!this.particles[i].active) {\r\n                particle = this.particles[i];\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (!particle) return null; // pool exhausted\r\n        let offsetX = 0;\r\n        let offsetY = 0;\r\n        if (this.emitterShape === 'circle') {\r\n            const angle = Math.random() * Math.PI * 2;\r\n            const radius = Math.random() * this.emitterSize;\r\n            offsetX = Math.cos(angle) * radius;\r\n            offsetY = Math.sin(angle) * radius;\r\n        } else if (this.emitterShape === 'box') {\r\n            offsetX = (Math.random() - 0.5) * this.emitterSize * 2;\r\n            offsetY = (Math.random() - 0.5) * this.emitterSize * 2;\r\n        }\r\n\r\n\r\n        particle.active = true;\r\n        particle.x = x + offsetX;\r\n        particle.y = y + offsetY;\r\n\r\n\r\n        if (vx !== undefined && vy !== undefined) {\r\n            particle.vx = vx;\r\n            particle.vy = vy;\r\n        } else {\r\n            const speed = this.randomValue(this.speed);\r\n            const angleDeg = this.randomValue(this.angle) + (Math.random() - 0.5) * this.spread;\r\n            const angleRad = (angleDeg * Math.PI) / 180;\r\n            particle.vx = Math.cos(angleRad) * speed;\r\n            particle.vy = Math.sin(angleRad) * speed;\r\n        }\r\n\r\n\r\n        // Lifetime\r\n        particle.life = this.randomValue(this.lifetime);\r\n        particle.maxLife = particle.life;\r\n\r\n        // Size\r\n        particle.startSize = this.randomValue(this.startSize);\r\n        particle.endSize = this.randomValue(this.endSize);\r\n        particle.size = particle.startSize;\r\n\r\n        // Color\r\n        particle.startR = this.startColor.r;\r\n        particle.startG = this.startColor.g;\r\n        particle.startB = this.startColor.b;\r\n        particle.startA = this.startColor.a;\r\n\r\n        particle.endR = this.endColor.r;\r\n        particle.endG = this.endColor.g;\r\n        particle.endB = this.endColor.b;\r\n        particle.endA = this.endColor.a;\r\n\r\n        particle.r = particle.startR;\r\n        particle.g = particle.startG;\r\n        particle.b = particle.startB;\r\n        particle.a = particle.startA;\r\n\r\n        this.activeCount++;\r\n        return particle;\r\n    }\r\n\r\n    burst(count) {\r\n        const worldX = this.position.x;\r\n        const worldY = this.position.y;\r\n\r\n        for (let i = 0; i < count; i++) {\r\n            this.spawnParticle(worldX, worldY);\r\n        }\r\n    }\r\n    startEmitting() {\r\n        this.emitting = true;\r\n    }\r\n\r\n    stopEmitting() {\r\n        this.emitting = false;\r\n    }\r\n\r\n    clear() {\r\n        for (const particle of this.particles) {\r\n            particle.active = false;\r\n        }\r\n        this.activeCount = 0;\r\n    }\r\n\r\n\r\n    _process(delta) {\r\n        particlePerf.start(\"particlesProcess\")\r\n        super._process(delta); // update node transform\r\n\r\n        // continuous emission\r\n        if (this.emitting) {\r\n            this.emissionTimer += delta;\r\n            const particlesPerFrame = this.emissionRate * delta;\r\n\r\n            while (this.emissionTimer >= 1 / this.emissionRate) {\r\n                this.emissionTimer -= 1 / this.emissionRate;\r\n                this.spawnParticle(this.worldPosition.x, this.worldPosition.y);\r\n            }\r\n        }\r\n\r\n\r\n        this.activeCount = 0;\r\n        for (const particle of this.particles) {\r\n            if (!particle.active) continue;\r\n\r\n            this.activeCount++;\r\n\r\n            particle.vy += this.gravity * delta;\r\n\r\n            if (this.drag > 0) {\r\n                particle.vx *= Math.pow(this.drag, delta);\r\n                particle.vy *= Math.pow(this.drag, delta);\r\n            }\r\n\r\n            particle.x += particle.vx * delta;\r\n            particle.y += particle.vy * delta;\r\n\r\n\r\n            particle.life -= delta;\r\n            if (particle.life <= 0) {\r\n                particle.active = false;\r\n                continue;\r\n            }\r\n\r\n            // interpolate properties based on life (0.0 = just born, 1.0 = dead)\r\n            const t = 1.0 - (particle.life / particle.maxLife);\r\n\r\n            // size\r\n            particle.size = particle.startSize + (particle.endSize - particle.startSize) * t;\r\n\r\n            // color\r\n            particle.r = Math.floor(particle.startR + (particle.endR - particle.startR) * t);\r\n            particle.g = Math.floor(particle.startG + (particle.endG - particle.startG) * t);\r\n            particle.b = Math.floor(particle.startB + (particle.endB - particle.startB) * t);\r\n            particle.a = Math.floor(particle.startA + (particle.endA - particle.startA) * t);\r\n\r\n\r\n        }\r\n        particlePerf.end(\"particlesProcess\")\r\n\r\n    }\r\n\r\n    _draw(canvas, camera) {\r\n        particlePerf.start(\"particlesDraw\")\r\n\r\n        if (!this.visible) return;\r\n\r\n\r\n        for (const particle of this.particles) {\r\n            if (!particle.active) continue;\r\n\r\n            let screenX = particle.x;\r\n            let screenY = particle.y;\r\n            let size = particle.size;\r\n\r\n            if (camera) {\r\n                const screenPos = camera.worldToScreen(particle.x, particle.y);\r\n                screenX = screenPos.x;\r\n                screenY = screenPos.y;\r\n                size *= camera.zoom;\r\n\r\n                // Cull off-screen particles\r\n                if (screenX < -size || screenX > canvas.width + size ||\r\n                    screenY < -size || screenY > canvas.height + size) {\r\n                    continue;\r\n                }\r\n            }\r\n            ShapeDrawer.fillRect(\r\n                canvas,\r\n                Math.floor(screenX - size / 2),\r\n                Math.floor(screenY - size / 2),\r\n                Math.ceil(size),\r\n                Math.ceil(size),\r\n                particle.r,\r\n                particle.g,\r\n                particle.b,\r\n                particle.a\r\n            );\r\n\r\n        }\r\n        particlePerf.end(\"particlesDraw\")\r\n\r\n    }\r\n\r\n    getActiveCount() {\r\n        return this.activeCount;\r\n    }\r\n\r\n    hasActiveParticles() {\r\n        return this.activeCount > 0;\r\n    }\r\n}\r\n\r\n\r\n\r\nexport class ParticlePresets {\r\n\r\n    /**\r\n     * burst of orange/red particles\r\n     * @param {*} x \r\n     * @param {*} y \r\n     * @param {*} options \r\n     * @returns \r\n     */\r\n    static explosion(x, y, options = {}) {\r\n        const emitter = new ParticleEmitter(\"Explosion\", {\r\n            maxParticles: options.count || 50,\r\n            lifetime: [0.5, 1.2],\r\n            speed: [80, 200],\r\n            angle: [0, 360],\r\n            gravity: 200,\r\n            drag: 0.95,\r\n            startSize: [6, 12],\r\n            endSize: [2, 4],\r\n            startColor: { r: 255, g: 150, b: 50, a: 255 },\r\n            endColor: { r: 100, g: 50, b: 50, a: 0 },\r\n            emitterShape: 'point'\r\n        });\r\n\r\n        emitter.position.x = x;\r\n        emitter.position.y = y;\r\n        emitter.markDirty()\r\n        emitter.burst(options.count || 50);\r\n\r\n        return emitter;\r\n    }\r\n\r\n\r\n\r\n    /**\r\n     * continuous upward-floating particles\r\n     * @param {*} x \r\n     * @param {*} y \r\n     * @param {*} options \r\n     * @returns \r\n     */\r\n    static smoke(x, y, options = {}) {\r\n        const emitter = new ParticleEmitter(\"Smoke\", {\r\n            maxParticles: 100,\r\n            emissionRate: options.rate || 15,\r\n            lifetime: [1.5, 2.5],\r\n            speed: [10, 30],\r\n            angle: [260, 280],\r\n            spread: 20,\r\n            gravity: -30,        // Float upward\r\n            drag: 0.98,\r\n            startSize: [4, 8],\r\n            endSize: [10, 16],   // Grow as they rise\r\n            startColor: { r: 150, g: 150, b: 150, a: 180 },\r\n            endColor: { r: 80, g: 80, b: 80, a: 0 },\r\n            emitterShape: 'box',\r\n            emitterSize: 10\r\n        });\r\n\r\n        emitter.position.x = x;\r\n        emitter.position.y = y;\r\n        emitter.startEmitting();\r\n\r\n        return emitter;\r\n    }\r\n\r\n\r\n    /**\r\n     * \r\n     * @param {*} x \r\n     * @param {*} y \r\n     * @param {*} options \r\n     * @returns \r\n     */\r\n    static sparkles(x, y, options = {}) {\r\n        const emitter = new ParticleEmitter(\"Sparkles\", {\r\n            maxParticles: 30,\r\n            lifetime: [0.3, 0.8],\r\n            speed: [20, 60],\r\n            angle: [0, 360],\r\n            gravity: -50,\r\n            drag: 0.92,\r\n            startSize: [3, 6],\r\n            endSize: [1, 2],\r\n            startColor: { r: 255, g: 255, b: 100, a: 255 },\r\n            endColor: { r: 255, g: 200, b: 100, a: 0 },\r\n            emitterShape: 'circle',\r\n            emitterSize: 15\r\n        });\r\n\r\n        emitter.position.x = x;\r\n        emitter.position.y = y;\r\n        emitter.markDirty()\r\n        emitter.burst(options.count || 20);\r\n\r\n        return emitter;\r\n    }\r\n\r\n    /**\r\n     * impact clouds\r\n     * @param {*} x \r\n     * @param {*} y \r\n     * @param {*} options \r\n     * @returns \r\n     */\r\n    static dustCloud(x, y, options = {}) {\r\n        const emitter = new ParticleEmitter(\"Dust\", {\r\n            maxParticles: 30,\r\n            lifetime: [0.3, 0.6],\r\n            speed: [40, 100],\r\n            angle: [250, 290],   // Spread left and right\r\n            spread: 40,\r\n            gravity: 100,\r\n            drag: 0.9,\r\n            startSize: [4, 8],\r\n            endSize: [2, 4],\r\n            startColor: { r: 180, g: 160, b: 140, a: 200 },\r\n            endColor: { r: 140, g: 120, b: 100, a: 0 },\r\n            emitterShape: 'box',\r\n            emitterSize: 20\r\n        });\r\n\r\n        emitter.position.x = x;\r\n        emitter.position.y = y;\r\n        emitter.markDirty()\r\n        emitter.burst(options.count || 15);\r\n\r\n        return emitter;\r\n    }\r\n\r\n    static blood(x, y, directionX = 0, directionY = 0, options = {}) {\r\n        const emitter = new ParticleEmitter(\"Blood\", {\r\n            maxParticles: 25,\r\n            lifetime: [0.4, 0.8],\r\n            speed: [60, 150],\r\n            angle: [0, 360],\r\n            gravity: 300,\r\n            drag: 0.94,\r\n            startSize: [3, 7],\r\n            endSize: [1, 3],\r\n            startColor: { r: 200, g: 20, b: 20, a: 255 },\r\n            endColor: { r: 120, g: 10, b: 10, a: 0 },\r\n            emitterShape: 'point'\r\n        });\r\n\r\n        emitter.position.x = x;\r\n        emitter.position.y = y;\r\n\r\n        // Bias particles in direction of damage\r\n        if (directionX !== 0 || directionY !== 0) {\r\n            const angle = Math.atan2(directionY, directionX) * (180 / Math.PI);\r\n            emitter.angle = [angle - 45, angle + 45];\r\n        }\r\n\r\n        emitter.markDirty()\r\n        emitter.burst(options.count || 20);\r\n\r\n        return emitter;\r\n    }\r\n\r\n    static trail(color = { r: 100, g: 150, b: 255 }, options = {}) {\r\n        const emitter = new ParticleEmitter(\"Trail\", {\r\n            maxParticles: 50,\r\n            emissionRate: options.rate || 30,\r\n            lifetime: [0.3, 0.6],\r\n            speed: [5, 20],\r\n            angle: [0, 360],\r\n            gravity: 0,\r\n            drag: 0.96,\r\n            startSize: [4, 6],\r\n            endSize: [1, 2],\r\n            startColor: { ...color, a: 200 },\r\n            endColor: { ...color, a: 0 },\r\n            emitterShape: 'circle',\r\n            emitterSize: 5\r\n        });\r\n\r\n        emitter.startEmitting(); // called in _process so used synched world position\r\n        return emitter;\r\n    }\r\n}","import { Node } from './core.js';\nimport { drawAtlasRegionToCanvas, loadImage } from './lib.js';\nimport { Camera2D } from './camera.js';\nimport { globalPerf } from \"./lib.js\"\nconst spriteMonitor = globalPerf\n\n\nexport class Sprite extends Node {\n    /**\n     * \n     * @param {string} name \n     * @param {SpriteAtlas} atlas \n     * @param {*} options \n     */\n    constructor(name, atlas, options = {}) {\n        super(name);\n\n\n        // console.dir(options)\n        // atlas data: { data: Uint8Array, width, height }\n        this.atlas = atlas;\n\n        this.frameWidth = options.frameWidth || atlas.width;\n        this.frameHeight = options.frameHeight || atlas.height;\n\n        // show\n        this.frame = options.frame || 0;\n\n        //pivot default: top-left corner\n        this.offset = {\n            x: options.offsetX || 0,\n            y: options.offsetY || 0\n        };\n\n        this.flipH = false;\n        this.flipV = false;\n        this.modulate = options.modulate || { r: 255, g: 255, b: 255, a: 255 }; // tint color\n        this.opaque = options.opaque\n\n        this.framesPerRow = Math.floor(this.atlas.width / this.frameWidth);\n    }\n\n    /**\n * convert frame index to atlas coordinates\n * \n * Example: 32x32 sprites in 256x256 atlas = 8 frames per row\n * Frame 0 = (0, 0)\n * Frame 5 = (160, 0)  // 5 * 32 = 160 \n * Frame 8 = (0, 32)   // wraps to next row\n */\n    getFrameRect(frameIndex) {\n        const col = frameIndex % this.framesPerRow;\n        const row = Math.floor(frameIndex / this.framesPerRow);\n\n        return {\n            x: col * this.frameWidth,\n            y: row * this.frameHeight,\n            width: this.frameWidth,\n            height: this.frameHeight\n        };\n    }\n\n\n    /**\n * Convert frame index to atlas coordinates\n * \n * Example: 32x32 sprites in 256x256 atlas = 8 frames per row\n * Frame 0 = (0, 0)\n * Frame 5 = (160, 0)  // 5 * 32 = 160 \n * Frame 8 = (0, 32)   // wraps to next row\n */\n    getFrameRect(frameIndex) {\n        const col = frameIndex % this.framesPerRow;\n        const row = Math.floor(frameIndex / this.framesPerRow);\n\n        return {\n            x: col * this.frameWidth,\n            y: row * this.frameHeight,\n            width: this.frameWidth,\n            height: this.frameHeight\n        };\n    }\n\n    /**\n     * draw sprite to canvas\n     * \n     * \n     * 1. Calculate world position (Node system handles this)\n     * 2. Apply offset (pivot point)\n     * 3. Get source rect from frame index\n     * 4. Blit pixels using tessera's drawAtlasRegionToCanvas\n     * \n     * Note: We're NOT handling rotation/scale YET. That requires\n     * per-pixel transforms which is slow in pure JS. For now,\n     * rotation/scale affects position but not the sprite pixels.\n     * \n     * Future optimization: pre-render rotated sprites to cache,\n     * \n     * \n     * If your atlas has no transparency (RGBA alpha always 255) and you don't need tint, call:\n     * @param {Camera2D} camera \n     */\n    // Changes to sprite.js in Sprite._draw (add scaling to offset)\n    _draw(canvas, camera) {\n        spriteMonitor.start(\"spriteDraw\")\n        if (!this.atlas) {\n            spriteMonitor.end(\"spriteDraw\")\n            return;\n        }\n\n        // world position (center) + scaled offset\n        let worldX = this.worldPosition.x + this.offset.x * this.worldScale.x;\n        let worldY = this.worldPosition.y + this.offset.y * this.worldScale.y;\n\n        // world-scaled dimensions of the frame\n        const worldW = this.frameWidth * this.worldScale.x;\n        const worldH = this.frameHeight * this.worldScale.y;\n\n        // Improved culling with rotated AABB if necessary\n        let cullCenterX, cullCenterY, cullW, cullH;\n        if (this.worldRotation !== 0) {\n            // Unrotated corners in world space\n            const tlX = worldX;\n            const tlY = worldY;\n            const trX = worldX + worldW;\n            const trY = worldY;\n            const blX = worldX;\n            const blY = worldY + worldH;\n            const brX = worldX + worldW;\n            const brY = worldY + worldH;\n\n            // Rotation center is worldPosition (origin)\n            const px = this.worldPosition.x;\n            const py = this.worldPosition.y;\n            const cos = this.worldCos;\n            const sin = this.worldSin;\n\n            const rotate = (wx, wy) => {\n                const lx = wx - px;\n                const ly = wy - py;\n                const rx = cos * lx - sin * ly;\n                const ry = sin * lx + cos * ly;\n                return { x: px + rx, y: py + ry };\n            };\n\n            const rtl = rotate(tlX, tlY);\n            const rtr = rotate(trX, trY);\n            const rbl = rotate(blX, blY);\n            const rbr = rotate(brX, brY);\n\n            const minX = Math.min(rtl.x, rtr.x, rbl.x, rbr.x);\n            const maxX = Math.max(rtl.x, rtr.x, rbl.x, rbr.x);\n            const minY = Math.min(rtl.y, rtr.y, rbl.y, rbr.y);\n            const maxY = Math.max(rtl.y, rtr.y, rbl.y, rbr.y);\n\n            cullCenterX = (minX + maxX) / 2;\n            cullCenterY = (minY + maxY) / 2;\n            cullW = maxX - minX;\n            cullH = maxY - minY;\n        } else {\n            cullCenterX = worldX + worldW / 2;\n            cullCenterY = worldY + worldH / 2;\n            cullW = worldW;\n            cullH = worldH;\n        }\n\n        if (camera && !camera.isAABBVisible(cullCenterX, cullCenterY, cullW, cullH)) {\n            spriteMonitor.end(\"spriteDraw\")\n            return; // Off-screen, don't draw\n        }\n\n        // convert top-left world -> screen\n        let screenPos = { x: worldX, y: worldY };\n        if (camera) {\n            screenPos = camera.worldToScreen(worldX, worldY);\n        }\n\n        const destX = Math.floor(screenPos.x);\n        const destY = Math.floor(screenPos.y);\n        const destRect = {\n            x: destX,\n            y: destY,\n            width: Math.floor(worldW * (camera ? camera.zoom : 1)),\n            height: Math.floor(worldH * (camera ? camera.zoom : 1))\n        };\n\n        if (destRect.x + destRect.width < 0 || destRect.x >= canvas.width ||\n            destRect.y + destRect.height < 0 || destRect.y >= canvas.height) {\n            spriteMonitor.end(\"spriteDraw\")\n            return;\n        }\n\n        const srcRect = this.getFrameRect(this.frame);\n\n        // Compute pivot from offset (normalized, unscaled)\n        const pivot = {\n            x: -this.offset.x / this.frameWidth,\n            y: -this.offset.y / this.frameHeight\n        };\n\n        drawAtlasRegionToCanvas(\n            this.atlas,\n            srcRect,\n            canvas,\n            destRect,\n            {\n                algorithm: \"nn\",\n                flipH: this.flipH,\n                flipV: this.flipV,\n                modulate: this.modulate,\n                assumeOpaque: this.opaque,\n                camera: camera,\n                rotation: this.worldRotation,\n                pivot: pivot\n            }\n        );\n\n        canvas.needsUpload = true;\n        spriteMonitor.end(\"spriteDraw\")\n    }\n\n    /**\n     * Utility: set pivot to center of sprite\n     */\n    centerOrigin() {\n        this.offset.x = -this.frameWidth / 2;\n        this.offset.y = -this.frameHeight / 2;\n    }\n\n}\n\n\n\n/**\n * \n * \n * why separate from Sprite:\n * - Not all sprites need animation (static decorations)\n * - Animation state (current frame, time accumulator) is extra memory\n * - Keeps Sprite class lean for performance\n * \n * Common use case: character walk cycles, enemy attack patterns\n */\nexport class AnimatedSprite extends Sprite {\n    /**\n     * \n     * @param {string} name \n     * @param {SpriteAtlas} atlas \n     * @param {*} options \n     */\n    constructor(name, atlas, options = {}) {\n        super(name, atlas, options);\n\n\n        this.animations = options.animations || {};\n\n\n        this.currentAnimation = null;\n        this.currentFrameIndex = 0;  // index into animation's frame array\n        this.frameTimer = 0;         // accumulates delta time\n        this.playing = false;\n        this.loop = true;\n\n        this.onAnimationFinished = null; // called when non-looping anim ends\n    }\n\n    /**\n     * start playing an animation\n     * @param {string} animName \n     * @param {boolean} restart \n     * @returns \n     */\n    play(animName, restart = false) {\n        const anim = this.animations[animName];\n        if (!anim) {\n            console.warn(`Animation \"${animName}\" not found on ${this.name}`);\n            return;\n        }\n\n        // don't restart if already playing\n        if (this.currentAnimation === animName && this.playing && !restart) {\n            return;\n        }\n\n        this.currentAnimation = animName;\n        this.currentFrameIndex = 0;\n        this.frameTimer = 0;\n        this.playing = true;\n        this.loop = anim.loop !== undefined ? anim.loop : true;\n\n        // Set initial frame\n        this.frame = anim.frames[0];\n    }\n\n    /**\n     * stop animation (freeze on current frame)\n     */\n    stop() {\n        this.playing = false;\n    }\n\n    /**\n     * pause (can resume with play())\n     */\n    pause() {\n        this.playing = false;\n    }\n\n    /**\n     * update animation state\n     * \n     * how frame timing works:\n     * - animation has target FPS (e.g., 12 fps = 0.083s per frame)\n     * - accumulate delta time until we hit frame duration\n     * - advance to next frame\n     * - loop or stop at end\n     * \n     * @param {number} delta \n     * @returns \n     */\n    _process(delta) {\n        super._process(delta); // call parent hook if overridden\n\n        if (!this.playing || !this.currentAnimation) return;\n\n        const anim = this.animations[this.currentAnimation];\n        if (!anim) return;\n\n\n        const frameDuration = 1.0 / anim.fps;\n\n\n        this.frameTimer += delta;\n\n\n        while (this.frameTimer >= frameDuration) {\n            this.frameTimer -= frameDuration;\n            this.currentFrameIndex++;\n\n            // check if animation finished\n            if (this.currentFrameIndex >= anim.frames.length) {\n                if (this.loop) {\n                    this.currentFrameIndex = 0; // wrap around\n                } else {\n                    // animation finished\n                    this.currentFrameIndex = anim.frames.length - 1; // freeze on last frame\n                    this.playing = false;\n\n                    if (this.onAnimationFinished) {\n                        this.onAnimationFinished(this.currentAnimation);\n                    }\n                    break;\n                }\n            }\n\n            // update visible frame\n            this.frame = anim.frames[this.currentFrameIndex];\n        }\n    }\n\n    /**\n     * check if specific animation is playing\n     * @param {string} animName \n     * @returns \n     */\n    isPlaying(animName = null) {\n        if (animName) {\n            return this.playing && this.currentAnimation === animName;\n        }\n        return this.playing;\n    }\n\n    /**\n     * get current animation progress (0.0 to 1.0)\n     */\n    getProgress() {\n        if (!this.currentAnimation) return 0;\n        const anim = this.animations[this.currentAnimation];\n        return this.currentFrameIndex / anim.frames.length;\n    }\n}\n\n\n\n\n\n/**\n *  for frame-by-frame animation using separate image files\n * \n * \n * Example:\n * ```js\n *   const explosion = new Animator(\"explosion\", renderer, {\n *     animations: {\n *       explode: {\n *         frames: [\n *           \"assets/explosion/frame_0.png\",\n *           \"assets/explosion/frame_1.png\",\n *           \"assets/explosion/frame_2.png\",\n *           \"assets/explosion/frame_3.png\"\n *         ],\n *         fps: 12,\n *         loop: false\n *       }\n *     }\n *   });\n *   explosion.play(\"explode\");\n * ```\n */\nexport class Animator extends Node {\n    /**\n     * @param {string} name \n     * @param {object} renderer - The renderer to load images\n     * @param {object} options \n     */\n    constructor(name, renderer, options = {}) {\n        super(name);\n\n        this.renderer = renderer;\n\n        // animations: { animName: { frames: [imagePaths...], fps: 12, loop: true } }\n        this.animations = {};\n        this.frameImages = {}; // cache loaded images by path\n        this.animations = options.animations || null\n        // Load animations if provided\n\n\n        this.currentAnimation = null;\n        this.currentFrameIndex = 0;\n        this.frameTimer = 0;\n        this.playing = false;\n        this.loop = true;\n\n        // Default dimensions (will be set from first frame)\n        this.width = 0;\n        this.height = 0;\n\n        // Pivot offset\n        this.offset = {\n            x: options.offsetX || 0,\n            y: options.offsetY || 0\n        };\n\n        this.flipH = options.flipH || false;\n        this.flipV = options.flipV || false;\n        this.modulate = options.modulate || { r: 255, g: 255, b: 255, a: 255 };\n        this.opaque = options.opaque;\n\n        this.onAnimationFinished = null;\n    }\n\n    async load() {\n        if (this.animations) {\n            for (const [animName, animData] of Object.entries(this.animations)) {\n                this.addAnimation(animName, animData.frames, animData.fps || 12, animData.loop);\n            }\n        }\n    }\n    /**\n     * Add an animation sequence\n     * @param {string} name - Animation name\n     * @param {string[]} imagePaths - Array of image file paths\n     * @param {number} fps - Frames per second\n     * @param {boolean} loop - Whether to loop\n     */\n    async addAnimation(name, imagePaths, fps = 12, loop = true) {\n        // returns an array of promises\n        const framePromises = imagePaths.map(async (path) => {\n            if (!this.frameImages[path]) {\n                // load and cache the resolved image\n                this.frameImages[path] = await loadImage(path);\n            }\n            return this.frameImages[path];\n        });\n\n\n        const frames = await Promise.all(framePromises);\n\n        this.animations[name] = {\n            frames,     // array of resolved Image objects\n            fps,\n            loop\n        };\n\n        // now safe to read width/height\n        if (frames.length > 0 && this.width === 0) {\n            this.width = frames[0].width;\n            this.height = frames[0].height;\n        }\n    }\n\n    /**\n     * Start playing an animation\n     * @param {string} animName \n     * @param {boolean} restart - Force restart if already playing\n     */\n    play(animName, restart = false) {\n        const anim = this.animations[animName];\n        if (!anim) {\n            console.warn(`Animation \"${animName}\" not found on ${this.name}`);\n            return;\n        }\n\n        // Don't restart if already playing\n        if (this.currentAnimation === animName && this.playing && !restart) {\n            return;\n        }\n\n        this.currentAnimation = animName;\n        this.currentFrameIndex = 0;\n        this.frameTimer = 0;\n        this.playing = true;\n        this.loop = anim.loop !== undefined ? anim.loop : true;\n\n        // Update dimensions from first frame\n        if (anim.frames.length > 0) {\n            this.width = anim.frames[0].width;\n            this.height = anim.frames[0].height;\n        }\n    }\n\n    /**\n     * Stop animation (freeze on current frame)\n     */\n    stop() {\n        this.playing = false;\n    }\n\n    /**\n     * Pause animation\n     */\n    pause() {\n        this.playing = false;\n    }\n\n    /**\n     * Resume paused animation\n     */\n    resume() {\n        if (this.currentAnimation) {\n            this.playing = true;\n        }\n    }\n\n    /**\n     * Get the current frame image\n     */\n    getCurrentFrame() {\n        if (!this.currentAnimation) return null;\n        const anim = this.animations[this.currentAnimation];\n        if (!anim || this.currentFrameIndex >= anim.frames.length) return null;\n        return anim.frames[this.currentFrameIndex];\n    }\n\n    /**\n     * Update animation state\n     * @param {number} delta - Time since last frame in seconds\n     */\n    _process(delta) {\n        super._process(delta);\n\n        if (!this.playing || !this.currentAnimation) return;\n\n        const anim = this.animations[this.currentAnimation];\n        if (!anim || anim.frames.length === 0) return;\n\n        const frameDuration = 1.0 / anim.fps;\n        this.frameTimer += delta;\n\n        while (this.frameTimer >= frameDuration) {\n            this.frameTimer -= frameDuration;\n            this.currentFrameIndex++;\n\n            // Check if animation finished\n            if (this.currentFrameIndex >= anim.frames.length) {\n                if (this.loop) {\n                    this.currentFrameIndex = 0; // Wrap around\n                } else {\n                    // Animation finished\n                    this.currentFrameIndex = anim.frames.length - 1;\n                    this.playing = false;\n\n                    if (this.onAnimationFinished) {\n                        this.onAnimationFinished(this.currentAnimation);\n                    }\n                    break;\n                }\n            }\n\n            // Update dimensions if frame size changed\n            const currentFrame = anim.frames[this.currentFrameIndex];\n            if (currentFrame) {\n                this.width = currentFrame.width;\n                this.height = currentFrame.height;\n            }\n        }\n    }\n\n    /**\n     * Draw current animation frame\n     * @param {object} canvas \n     * @param {Camera2D} camera \n     */\n    _draw(canvas, camera) {\n        spriteMonitor.start(\"animatedLooseSpriteDraw\");\n\n        const currentFrame = this.getCurrentFrame();\n        // console.log(\"current frame\", currentFrame)\n        if (!currentFrame) {\n            spriteMonitor.end(\"animatedLooseSpriteDraw\");\n            return;\n        }\n\n        // World position + scaled offset\n        let worldX = this.worldPosition.x + this.offset.x * this.worldScale.x;\n        let worldY = this.worldPosition.y + this.offset.y * this.worldScale.y;\n\n        // World-scaled dimensions\n        const worldW = this.width * this.worldScale.x;\n        const worldH = this.height * this.worldScale.y;\n\n        // Culling with rotation support\n        let cullCenterX, cullCenterY, cullW, cullH;\n        if (this.worldRotation !== 0) {\n            const tlX = worldX;\n            const tlY = worldY;\n            const trX = worldX + worldW;\n            const trY = worldY;\n            const blX = worldX;\n            const blY = worldY + worldH;\n            const brX = worldX + worldW;\n            const brY = worldY + worldH;\n\n            const px = this.worldPosition.x;\n            const py = this.worldPosition.y;\n            const cos = this.worldCos;\n            const sin = this.worldSin;\n\n            const rotate = (wx, wy) => {\n                const lx = wx - px;\n                const ly = wy - py;\n                const rx = cos * lx - sin * ly;\n                const ry = sin * lx + cos * ly;\n                return { x: px + rx, y: py + ry };\n            };\n\n            const rtl = rotate(tlX, tlY);\n            const rtr = rotate(trX, trY);\n            const rbl = rotate(blX, blY);\n            const rbr = rotate(brX, brY);\n\n            const minX = Math.min(rtl.x, rtr.x, rbl.x, rbr.x);\n            const maxX = Math.max(rtl.x, rtr.x, rbl.x, rbr.x);\n            const minY = Math.min(rtl.y, rtr.y, rbl.y, rbr.y);\n            const maxY = Math.max(rtl.y, rtr.y, rbl.y, rbr.y);\n\n            cullCenterX = (minX + maxX) / 2;\n            cullCenterY = (minY + maxY) / 2;\n            cullW = maxX - minX;\n            cullH = maxY - minY;\n        } else {\n            cullCenterX = worldX + worldW / 2;\n            cullCenterY = worldY + worldH / 2;\n            cullW = worldW;\n            cullH = worldH;\n        }\n\n        if (camera && !camera.isAABBVisible(cullCenterX, cullCenterY, cullW, cullH)) {\n            spriteMonitor.end(\"animatedLooseSpriteDraw\");\n            return;\n        }\n\n        // World to screen\n        let screenPos = { x: worldX, y: worldY };\n        if (camera) {\n            screenPos = camera.worldToScreen(worldX, worldY);\n        }\n\n        const destX = Math.floor(screenPos.x);\n        const destY = Math.floor(screenPos.y);\n        const destRect = {\n            x: destX,\n            y: destY,\n            width: Math.floor(worldW * (camera ? camera.zoom : 1)),\n            height: Math.floor(worldH * (camera ? camera.zoom : 1))\n        };\n\n        if (destRect.x + destRect.width < 0 || destRect.x >= canvas.width ||\n            destRect.y + destRect.height < 0 || destRect.y >= canvas.height) {\n            spriteMonitor.end(\"animatedLooseSpriteDraw\");\n            return;\n        }\n\n        // Source rect is entire frame\n        const srcRect = {\n            x: 0,\n            y: 0,\n            width: this.width,\n            height: this.height\n        };\n\n        // Compute pivot\n        const pivot = {\n            x: -this.offset.x / this.width,\n            y: -this.offset.y / this.height\n        };\n\n        drawAtlasRegionToCanvas(\n            currentFrame,\n            srcRect,\n            canvas,\n            destRect,\n            {\n                algorithm: \"nn\",\n                flipH: this.flipH,\n                flipV: this.flipV,\n                modulate: this.modulate,\n                assumeOpaque: this.opaque,\n                camera: camera,\n                rotation: this.worldRotation,\n                pivot: pivot\n            }\n        );\n\n        canvas.needsUpload = true;\n        spriteMonitor.end(\"animatedLooseSpriteDraw\");\n    }\n\n    /**\n     * Center the sprite's pivot point\n     */\n    centerOrigin() {\n        this.offset.x = -this.width / 2;\n        this.offset.y = -this.height / 2;\n    }\n\n    /**\n     * Check if specific animation is playing\n     * @param {string} animName \n     */\n    isPlaying(animName = null) {\n        if (animName) {\n            return this.playing && this.currentAnimation === animName;\n        }\n        return this.playing;\n    }\n\n    /**\n     * Get current animation progress (0.0 to 1.0)\n     */\n    getProgress() {\n        if (!this.currentAnimation) return 0;\n        const anim = this.animations[this.currentAnimation];\n        return this.currentFrameIndex / anim.frames.length;\n    }\n\n    /**\n     * Clone this animator with all relevant data\n     * @returns {Animator} A new Animator instance with cloned properties\n     */\n    clone() {\n        const cloned = new Animator(this.name + \"_clone_\" + Math.random(), this.renderer, {});\n\n        cloned.animations = this.animations;\n        cloned.frameImages = this.frameImages;\n        cloned.position.x = this.position.x;\n        cloned.position.y = this.position.y;\n        cloned.rotation = this.rotation;\n        cloned.scale.x = this.scale.x;\n        cloned.scale.y = this.scale.y;\n\n        cloned.offset.x = this.offset.x;\n        cloned.offset.y = this.offset.y;\n        cloned.flipH = this.flipH;\n        cloned.flipV = this.flipV;\n        cloned.modulate = { ...this.modulate };\n\n        return cloned;\n    }\n}\n\n\n/**\n * spriteAtlas - helper for managing shared atlases\n * \n * \n * - Multiple sprites often share the same atlas (all enemies, all UI icons)\n * - Loading atlas once and reusing saves memory\n * - Provides utilities for common atlas patterns (grid, packed)\n */\nexport class SpriteAtlas {\n    constructor(renderer, path, options = {}) {\n        this.path = path;\n        this.image = renderer.loadImage(path);\n\n        // Grid-based atlas settings\n        this.frameWidth = options.frameWidth || this.image.width;\n        this.frameHeight = options.frameHeight || this.image.height;\n        this.framesPerRow = Math.floor(this.image.width / this.frameWidth);\n        this.framesPerCol = Math.floor(this.image.height / this.frameHeight);\n        this.totalFrames = this.framesPerRow * this.framesPerCol;\n    }\n\n\n    /**\n     * create a sprite from this atlas\n     * @param {*} name \n     * @param {*} frame \n     * @param {*} options \n     * @returns \n     */\n    createSprite(name, frame = 0, options = {}) {\n        return new Sprite(name, this.image, {\n            frameWidth: this.frameWidth,\n            frameHeight: this.frameHeight,\n            frame: frame,\n            ...options\n        });\n    }\n\n    /**\n     * Create animated sprite from this atlas\n     * @param {*} name \n     * @param {*} animations \n     * @param {*} options \n     * @returns \n     */\n    createAnimatedSprite(name, animations, options = {}) {\n        return new AnimatedSprite(name, this.image, {\n            frameWidth: this.frameWidth,\n            frameHeight: this.frameHeight,\n            animations: animations,\n            ...options\n        });\n    }\n\n    /**\n     * Utility: generate sequential frame array\n     * Example: getFrameRange(0, 7) -> [0,1,2,3,4,5,6,7]\n     */\n    static getFrameRange(start, end) {\n        const frames = [];\n        for (let i = start; i <= end; i++) {\n            frames.push(i);\n        }\n        return frames;\n    }\n}","// tilemap-profiler.js\r\n// Instruments tilemap rendering to expose the waste\r\n\r\nexport class TilemapProfiler {\r\n    constructor() {\r\n        this.reset();\r\n    }\r\n\r\n    reset() {\r\n        this.frameCount = 0;\r\n        this.totalPixelsTouched = 0;\r\n        this.totalBlitCalls = 0;\r\n        this.totalChunksDrawn = 0;\r\n        this.cameraMovedFrames = 0;\r\n        this.cameraStaticFrames = 0;\r\n        this.lastCameraPos = { x: 0, y: 0 };\r\n    }\r\n\r\n    startFrame(camera) {\r\n        this.frameCount++;\r\n        \r\n        // Track if camera moved\r\n        const moved = camera.worldPosition.x !== this.lastCameraPos.x || \r\n                     camera.worldPosition.y !== this.lastCameraPos.y;\r\n        \r\n        if (moved) {\r\n            this.cameraMovedFrames++;\r\n        } else {\r\n            this.cameraStaticFrames++;\r\n        }\r\n\r\n        this.lastCameraPos.x = camera.worldPosition.x;\r\n        this.lastCameraPos.y = camera.worldPosition.y;\r\n    }\r\n\r\n    recordBlit(width, height) {\r\n        this.totalBlitCalls++;\r\n        this.totalPixelsTouched += width * height;\r\n    }\r\n\r\n    recordChunk() {\r\n        this.totalChunksDrawn++;\r\n    }\r\n\r\n    getReport() {\r\n        if (this.frameCount === 0) return \"No frames recorded\";\r\n\r\n        const avgPixelsPerFrame = this.totalPixelsTouched / this.frameCount;\r\n        const avgBlitsPerFrame = this.totalBlitCalls / this.frameCount;\r\n        const avgChunksPerFrame = this.totalChunksDrawn / this.frameCount;\r\n        const wasteRatio = this.cameraStaticFrames / this.frameCount;\r\n\r\n        return {\r\n            totalFrames: this.frameCount,\r\n            cameraMovedFrames: this.cameraMovedFrames,\r\n            cameraStaticFrames: this.cameraStaticFrames,\r\n            wasteRatio: (wasteRatio * 100).toFixed(1) + '%',\r\n            avgPixelsPerFrame: avgPixelsPerFrame.toFixed(0),\r\n            avgBlitsPerFrame: avgBlitsPerFrame.toFixed(1),\r\n            avgChunksPerFrame: avgChunksPerFrame.toFixed(1),\r\n            totalPixelsTouched: this.totalPixelsTouched,\r\n            wastedPixels: (avgPixelsPerFrame * this.cameraStaticFrames).toFixed(0),\r\n            \r\n            // The smoking gun\r\n            redundantWork: `${this.cameraStaticFrames} frames redrew ${avgPixelsPerFrame.toFixed(0)} pixels each for ZERO camera movement`\r\n        };\r\n    }\r\n\r\n    printReport() {\r\n        const r = this.getReport();\r\n        console.log('\\n=== TILEMAP RENDER WASTE REPORT ===');\r\n        console.log(`Total frames analyzed: ${r.totalFrames}`);\r\n        console.log(`Camera moved: ${r.cameraMovedFrames} frames`);\r\n        console.log(`Camera static: ${r.cameraStaticFrames} frames`);\r\n        console.log(`Waste ratio: ${r.wasteRatio} of frames were redundant`);\r\n        console.log(`\\nPer-frame averages:`);\r\n        console.log(`  Pixels touched: ${r.avgPixelsPerFrame}`);\r\n        console.log(`  Blit calls: ${r.avgBlitsPerFrame}`);\r\n        console.log(`  Chunks drawn: ${r.avgChunksPerFrame}`);\r\n        console.log(`\\nTotal waste:`);\r\n        console.log(`  Pixels touched: ${r.totalPixelsTouched.toLocaleString()}`);\r\n        console.log(`  Wasted pixels (static frames): ${r.wastedPixels.toLocaleString()}`);\r\n        console.log(`\\n⚠️  ${r.redundantWork}`);\r\n        console.log('=====================================\\n');\r\n    }\r\n}\r\n\r\n// Singleton instance\r\nexport const tilemapProfiler = new TilemapProfiler();","import { CacheBuffer } from \"tessera.js\";\nCacheBuffer.prototype.markRegion = (...args) => { } // trickc\n\n\n\nexport class CameraTracker {\n    constructor() {\n        this.lastPosition = { x: 0, y: 0 };\n        this.lastZoom = 1.0;\n        this.currentPosition = { x: 0, y: 0 };\n        this.currentZoom = 1.0;\n\n        // Movement stats\n        this.totalFrames = 0;\n        this.staticFrames = 0;\n        this.smallMoveFrames = 0;  // < threshold\n        this.largeMoveFrames = 0;  // >= threshold\n        this.teleportFrames = 0;   // way outside cache\n\n        // Thresholds (pixels)\n        this.smallMoveThreshold = 32;  // moves smaller than this are \"small\"\n        this.teleportThreshold = 256;  // moves larger than this are \"teleports\"\n    }\n\n    //  this at start of each frame\n    update(camera) {\n        this.totalFrames++;\n\n        this.currentPosition.x = camera.worldPosition.x;\n        this.currentPosition.y = camera.worldPosition.y;\n        this.currentZoom = camera.zoom || camera.worldZoom || 1.0;\n\n        const delta = this.getDelta();\n        const distance = Math.sqrt(delta.x * delta.x + delta.y * delta.y);\n\n        // Classify movement\n        if (delta.x === 0 && delta.y === 0 && delta.zoom === 0) {\n            this.staticFrames++;\n        } else if (distance < this.smallMoveThreshold) {\n            this.smallMoveFrames++;\n        } else if (distance < this.teleportThreshold) {\n            this.largeMoveFrames++;\n        } else {\n            this.teleportFrames++;\n        }\n    }\n\n    // Get movement delta since last frame\n    getDelta() {\n        return {\n            x: this.currentPosition.x - this.lastPosition.x,\n            y: this.currentPosition.y - this.lastPosition.y,\n            zoom: this.currentZoom - this.lastZoom,\n            magnitude: Math.sqrt(\n                Math.pow(this.currentPosition.x - this.lastPosition.x, 2) +\n                Math.pow(this.currentPosition.y - this.lastPosition.y, 2)\n            )\n        };\n    }\n\n    // Check if camera moved at all\n    hasMoved() {\n        const d = this.getDelta();\n        return d.x !== 0 || d.y !== 0 || d.zoom !== 0;\n    }\n\n    // Check if movement is small enough for incremental update\n    isSmallMove() {\n        return this.getDelta().magnitude < this.smallMoveThreshold;\n    }\n\n    // Check if this is a teleport (need full redraw)\n    isTeleport() {\n        return this.getDelta().magnitude >= this.teleportThreshold;\n    }\n\n    // Check if zoom changed\n    zoomChanged() {\n        return this.currentZoom !== this.lastZoom;\n    }\n\n    // Call at end of frame to commit current position as \"last\"\n    commit() {\n        this.lastPosition.x = this.currentPosition.x;\n        this.lastPosition.y = this.currentPosition.y;\n        this.lastZoom = this.currentZoom;\n    }\n\n    // Get movement direction (for determining which edge to update)\n    getDirection() {\n        const delta = this.getDelta();\n        const absX = Math.abs(delta.x);\n        const absY = Math.abs(delta.y);\n\n        // Primary direction is the larger component\n        if (absX > absY) {\n            return delta.x > 0 ? 'right' : 'left';\n        } else if (absY > absX) {\n            return delta.y > 0 ? 'down' : 'up';\n        } else if (absX === absY && absX > 0) {\n            // Diagonal - return both directions\n            const h = delta.x > 0 ? 'right' : 'left';\n            const v = delta.y > 0 ? 'down' : 'up';\n            return `${v}-${h}`; // e.g., \"down-right\"\n        }\n\n        return 'none';\n    }\n\n    // Get stats about camera movement patterns\n    getStats() {\n        if (this.totalFrames === 0) return null;\n\n        return {\n            totalFrames: this.totalFrames,\n            staticFrames: this.staticFrames,\n            smallMoveFrames: this.smallMoveFrames,\n            largeMoveFrames: this.largeMoveFrames,\n            teleportFrames: this.teleportFrames,\n            staticRatio: (this.staticFrames / this.totalFrames * 100).toFixed(1) + '%',\n            smallMoveRatio: (this.smallMoveFrames / this.totalFrames * 100).toFixed(1) + '%',\n            largeMoveRatio: (this.largeMoveFrames / this.totalFrames * 100).toFixed(1) + '%',\n            teleportRatio: (this.teleportFrames / this.totalFrames * 100).toFixed(1) + '%'\n        };\n    }\n\n    printStats() {\n        const s = this.getStats();\n        if (!s) {\n            console.log('No camera movement data yet');\n            return;\n        }\n\n        console.log('\\n=== CAMERA MOVEMENT STATS ===');\n        console.log(`Total frames: ${s.totalFrames}`);\n        console.log(`Static (no movement): ${s.staticFrames} (${s.staticRatio})`);\n        console.log(`Small moves (<32px): ${s.smallMoveFrames} (${s.smallMoveRatio})`);\n        console.log(`Large moves (32-256px): ${s.largeMoveFrames} (${s.largeMoveRatio})`);\n        console.log(`Teleports (>256px): ${s.teleportFrames} (${s.teleportRatio})`);\n        console.log('============================\\n');\n    }\n}\n\n\nexport class CacheUpdateStrategy {\n    static determine(delta, cacheMargin) {\n        const dist = delta.magnitude;\n\n        // Zoom change always requires full redraw\n        if (delta.zoom !== 0) {\n            return { type: 'FULL_REDRAW', reason: 'zoom changed' };\n        }\n\n        // No movement - no update needed\n        if (dist === 0) {\n            return { type: 'NONE', reason: 'camera static' };\n        }\n\n        // Teleport - full redraw\n        if (dist > cacheMargin * 0.8) {\n            return { type: 'FULL_REDRAW', reason: 'teleport (outside cache margin)' };\n        }\n\n        // Small move - incremental update\n        if (dist < cacheMargin * 0.5) {\n            return {\n                type: 'INCREMENTAL',\n                reason: 'small move (within cache margin)',\n                delta: delta\n            };\n        }\n\n        // Medium move - still incremental but closer to limit\n        return {\n            type: 'INCREMENTAL',\n            reason: 'medium move',\n            delta: delta\n        };\n    }\n}\n\n// shifting \n\nexport class CacheShifter {\n\n    // Shift buffer content left by dx pixels\n    // This is called when camera moves RIGHT\n    static shiftLeft(buffer, dx) {\n        if (dx <= 0 || dx >= buffer.width) return;\n\n        const data = buffer.data;\n        const width = buffer.width;\n        const height = buffer.height;\n        const shiftPixels = Math.floor(dx);\n\n        // Process row by row\n        // Each row: copy pixels from [shiftPixels...width] to [0...width-shiftPixels]\n        for (let y = 0; y < height; y++) {\n            const rowStart = y * width * 4;\n            const srcStart = rowStart + shiftPixels * 4;\n            const copyWidth = (width - shiftPixels) * 4;\n\n            // Copy row content leftward\n            data.copyWithin(rowStart, srcStart, srcStart + copyWidth);\n        }\n    }\n\n    // Shift buffer content right by dx pixels\n    // Called when camera moves LEFT\n    static shiftRight(buffer, dx) {\n        if (dx <= 0 || dx >= buffer.width) return;\n\n        const data = buffer.data;\n        const width = buffer.width;\n        const height = buffer.height;\n        const shiftPixels = Math.floor(dx);\n\n        // Process row by row, BACKWARDS to avoid overwriting\n        for (let y = height - 1; y >= 0; y--) {\n            const rowStart = y * width * 4;\n            const dstStart = rowStart + shiftPixels * 4;\n            const copyWidth = (width - shiftPixels) * 4;\n\n            // Copy row content rightward\n            data.copyWithin(dstStart, rowStart, rowStart + copyWidth);\n        }\n    }\n\n    // Shift buffer content up by dy pixels\n    // Called when camera moves DOWN\n    static shiftUp(buffer, dy) {\n        if (dy <= 0 || dy >= buffer.height) return;\n\n        const data = buffer.data;\n        const width = buffer.width;\n        const height = buffer.height;\n        const shiftRows = Math.floor(dy);\n        const rowBytes = width * 4;\n\n        // Copy rows upward\n        // Move rows [shiftRows...height] to [0...height-shiftRows]\n        const srcStart = shiftRows * rowBytes;\n        const copyBytes = (height - shiftRows) * rowBytes;\n\n        data.copyWithin(0, srcStart, srcStart + copyBytes);\n    }\n\n    // Shift buffer content down by dy pixels\n    // Called when camera moves UP\n    static shiftDown(buffer, dy) {\n        if (dy <= 0 || dy >= buffer.height) return;\n\n        const data = buffer.data;\n        const width = buffer.width;\n        const height = buffer.height;\n        const shiftRows = Math.floor(dy);\n        const rowBytes = width * 4;\n\n        // Copy rows downward, process backwards to avoid overwrite\n        const srcBytes = (height - shiftRows) * rowBytes;\n        const dstStart = shiftRows * rowBytes;\n\n        data.copyWithin(dstStart, 0, srcBytes);\n    }\n\n    // Combined shift for diagonal movement\n    // Does horizontal first, then vertical\n    static shift(buffer, dx, dy) {\n        // Horizontal shift\n        if (dx > 0) {\n            this.shiftLeft(buffer, dx);\n        } else if (dx < 0) {\n            this.shiftRight(buffer, -dx);\n        }\n\n        // Vertical shift\n        if (dy > 0) {\n            this.shiftUp(buffer, dy);\n        } else if (dy < 0) {\n            this.shiftDown(buffer, -dy);\n        }\n    }\n}\n\n// ============= THE FIX =============\n// The key insight: we need to calculate world regions BEFORE updating worldX/worldY\n// because the regions represent what NEW content to draw, relative to the OLD cache position\n\nexport class ShiftRegionCalculator {\n    static calculateNewRegions(oldWorldX, oldWorldY, cacheWidth, cacheHeight, deltaX, deltaY) {\n        const regions = [];\n\n        // deltaX/Y represent camera movement in world space\n        // We calculate which regions of the NEW cache bounds need fresh rendering\n\n        if (deltaX > 0) {\n            // Camera moved right → old cache was at oldWorldX, now at oldWorldX + deltaX\n            // The NEW right edge shows world content that wasn't in the old cache\n            // World coordinates: from (oldWorldX + cacheWidth) to (oldWorldX + cacheWidth + deltaX)\n            regions.push({\n                cache: {\n                    x: cacheWidth - Math.floor(deltaX),\n                    y: 0,\n                    width: Math.floor(deltaX),\n                    height: cacheHeight\n                },\n                world: {\n                    x: oldWorldX + cacheWidth,  // Right edge of OLD cache\n                    y: oldWorldY,\n                    width: Math.floor(deltaX),\n                    height: cacheHeight\n                },\n                edge: 'right'\n            });\n        } else if (deltaX < 0) {\n            // Camera moved left → new left edge needs rendering\n            const absDx = Math.floor(-deltaX);\n            regions.push({\n                cache: {\n                    x: 0,\n                    y: 0,\n                    width: absDx,\n                    height: cacheHeight\n                },\n                world: {\n                    x: oldWorldX + deltaX,  // New left edge in world space\n                    y: oldWorldY,\n                    width: absDx,\n                    height: cacheHeight\n                },\n                edge: 'left'\n            });\n        }\n\n        if (deltaY > 0) {\n            // Camera moved down → new bottom edge\n            const absDy = Math.floor(deltaY);\n            regions.push({\n                cache: {\n                    x: 0,\n                    y: cacheHeight - absDy,\n                    width: cacheWidth,\n                    height: absDy\n                },\n                world: {\n                    x: oldWorldX,\n                    y: oldWorldY + cacheHeight,  // Bottom edge of OLD cache\n                    width: cacheWidth,\n                    height: absDy\n                },\n                edge: 'bottom'\n            });\n        } else if (deltaY < 0) {\n            // Camera moved up → new top edge\n            const absDy = Math.floor(-deltaY);\n            regions.push({\n                cache: {\n                    x: 0,\n                    y: 0,\n                    width: cacheWidth,\n                    height: absDy\n                },\n                world: {\n                    x: oldWorldX,\n                    y: oldWorldY + deltaY,  // New top edge in world space\n                    width: cacheWidth,\n                    height: absDy\n                },\n                edge: 'top'\n            });\n        }\n\n        return regions;\n    }\n}\n\n\nexport class FullMapPreRender {\n    constructor(mapWidth, mapHeight) {\n        this.mapWidth = mapWidth;\n        this.mapHeight = mapHeight;\n        this.buffer = new CacheBuffer(mapWidth, mapHeight);\n        this.rendered = false;\n        this.pixelsDrawn = 0;\n\n        console.log(`[FullMapPreRender] Created ${mapWidth}x${mapHeight} full-map buffer`);\n    }\n\n    render(renderCallback) {\n        if (this.rendered) return;\n\n        console.log(`[FullMapPreRender] Rendering full map...`);\n        this.buffer.clear(0, 0, 0, 0);\n        \n        renderCallback(this.buffer);\n        this.pixelsDrawn = this.mapWidth * this.mapHeight;\n        this.rendered = true;\n    }\n\n    copyToDisplay(displayCanvas, camera) {\n        const cameraWorldX = camera.worldPosition.x;\n        const cameraWorldY = camera.worldPosition.y;\n\n        // offset within full map buffer where camera is looking\n        const bufferOffsetX = cameraWorldX;\n        const bufferOffsetY = cameraWorldY;\n\n        this._blitRegion(\n            this.buffer,\n            bufferOffsetX,\n            bufferOffsetY,\n            displayCanvas.width,\n            displayCanvas.height,\n            displayCanvas,\n            0,\n            0\n        );\n    }\n\n    _blitRegion(srcBuffer, srcX, srcY, width, height, dstCanvas, dstX, dstY) {\n        const srcData = srcBuffer.data;\n        const dstData = dstCanvas.data;\n        const srcW = srcBuffer.width;\n        const srcH = srcBuffer.height;\n        const dstW = dstCanvas.width;\n        const dstH = dstCanvas.height;\n\n        // Clamp source bounds\n        const srcStartX = Math.max(0, Math.floor(srcX));\n        const srcStartY = Math.max(0, Math.floor(srcY));\n        const srcEndX = Math.min(srcW, Math.ceil(srcX + width));\n        const srcEndY = Math.min(srcH, Math.ceil(srcY + height));\n\n        // Clamp destination bounds\n        const dstStartX = Math.max(0, Math.floor(dstX));\n        const dstStartY = Math.max(0, Math.floor(dstY));\n        const dstEndX = Math.min(dstW, Math.floor(dstX + (srcEndX - srcStartX)));\n        const dstEndY = Math.min(dstH, Math.floor(dstY + (srcEndY - srcStartY)));\n\n        const copyWidth = dstEndX - dstStartX;\n        const copyHeight = dstEndY - dstStartY;\n\n        if (copyWidth <= 0 || copyHeight <= 0) return;\n\n        // Adjust source start if destination was clamped\n        const srcOffsetX = dstStartX - Math.floor(dstX);\n        const srcOffsetY = dstStartY - Math.floor(dstY);\n\n        // Fast row-by-row copy\n        for (let y = 0; y < copyHeight; y++) {\n            const srcRowStart = ((srcStartY + srcOffsetY + y) * srcW + srcStartX + srcOffsetX) * 4;\n            const dstRowStart = ((dstStartY + y) * dstW + dstStartX) * 4;\n\n            dstData.set(\n                srcData.subarray(srcRowStart, srcRowStart + copyWidth * 4),\n                dstRowStart\n            );\n        }\n\n        dstCanvas.markRegion(dstStartX, dstStartY, copyWidth, copyHeight);\n    }\n\n    getStats() {\n        return {\n            mapSize: `${this.mapWidth}x${this.mapHeight}`,\n            rendered: this.rendered,\n            pixelsDrawn: this.pixelsDrawn\n        };\n    }\n\n    printStats() {\n        const s = this.getStats();\n        console.log('FULL MAP PRE-RENDER STATS');\n        console.log(`Map size: ${s.mapSize}`);\n        console.log(`Rendered: ${s.rendered}`);\n        console.log(`Pixels drawn: ${s.pixelsDrawn}`);\n        console.log('=============================\\n');\n    }\n}\n\n\nexport default class OffscreenTilemapCache {\n    constructor(viewportWidth, viewportHeight, marginRatio = 0.25) {\n        this.viewportWidth = viewportWidth;\n        this.viewportHeight = viewportHeight;\n        this.marginRatio = marginRatio;\n        const marginX = Math.ceil(viewportWidth * marginRatio);\n        const marginY = Math.ceil(viewportHeight * marginRatio);\n\n        this.cacheWidth = viewportWidth + marginX * 2;\n        this.cacheHeight = viewportHeight + marginY * 2;\n        this.marginPixels = { x: marginX, y: marginY };\n\n        this.buffer = new CacheBuffer(this.cacheWidth, this.cacheHeight);\n\n        this.worldX = 0;\n        this.worldY = 0;\n\n\n        this.dirty = true;\n\n        this.tracker = new CameraTracker()\n\n        this.fullRedraws = 0;\n        this.incrementalUpdates = 0;\n        this.copies = 0;\n        this.skippedUpdates = 0;\n        this.pixelsShifted = 0;\n        this.pixelsDrawn = 0;\n\n        console.log(`[OffscreenCache] Created ${this.cacheWidth}x${this.cacheHeight} cache for ${viewportWidth}x${viewportHeight} viewport`);\n    }\n\n    needsUpdate(camera) {\n        this.tracker.update(camera);\n        const delta = this.tracker.getDelta();\n\n        // Use margin size as threshold for determining update type\n        const marginSize = Math.min(this.marginPixels.x, this.marginPixels.y);\n        return CacheUpdateStrategy.determine(delta, marginSize);\n\n    }\n\n    incrementalUpdate(delta, renderCallback) {\n        const dx = delta.x;\n        const dy = delta.y;\n\n        // STEP 1: Calculate regions BEFORE updating worldX/worldY\n        // This is the fix - we need the OLD cache position to know what's NEW\n        const oldWorldX = this.worldX;\n        const oldWorldY = this.worldY;\n\n        const newRegions = ShiftRegionCalculator.calculateNewRegions(\n            oldWorldX,\n            oldWorldY,\n            this.cacheWidth,\n            this.cacheHeight,\n            dx,\n            dy\n        );\n\n        // STEP 2: Shift buffer content\n        CacheShifter.shift(this.buffer, dx, dy);\n        this.pixelsShifted += this.cacheWidth * this.cacheHeight;\n\n        // STEP 3: Render new regions (BEFORE updating world bounds)\n        // Each region now has BOTH cache coords and world coords pre-calculated\n        for (const region of newRegions) {\n            this.pixelsDrawn += region.cache.width * region.cache.height;\n            renderCallback(region.cache, region.world);\n        }\n\n        // STEP 4: Update world bounds (NOW, after rendering)\n        this.worldX += dx;\n        this.worldY += dy;\n\n        this.incrementalUpdates++;\n    }\n\n    commitFrame() {\n        this.tracker.commit();\n    }\n\n    invalidate() {\n        this.dirty = true;\n    }\n\n    setWorldRegion(worldX, worldY) {\n        this.worldX = worldX;\n        this.worldY = worldY;\n    }\n\n    getWorldBounds() {\n        return {\n            left: this.worldX,\n            top: this.worldY,\n            right: this.worldX + this.cacheWidth,\n            bottom: this.worldY + this.cacheHeight,\n            width: this.cacheWidth,\n            height: this.cacheHeight\n        };\n    }\n\n    isCameraInBounds(camera) {\n        const bounds = this.getWorldBounds();\n        const camX = camera.worldPosition.x;\n        const camY = camera.worldPosition.y;\n\n        // Camera should stay within the inner viewport area, not near edges\n        const safeLeft = bounds.left + this.marginPixels.x;\n        const safeRight = bounds.right - this.marginPixels.x;\n        const safeTop = bounds.top + this.marginPixels.y;\n        const safeBottom = bounds.bottom - this.marginPixels.y;\n\n        return camX >= safeLeft && camX <= safeRight &&\n            camY >= safeTop && camY <= safeBottom;\n    }\n\n    clear() {\n        this.buffer.clear(0, 0, 0, 0);\n    }\n\n    copyToDisplay(displayCanvas, camera) {\n        this.copies++;\n\n\n        const cameraWorldX = camera.worldPosition.x;\n        const cameraWorldY = camera.worldPosition.y;\n\n        // offset within cache where camera is looking\n        const cacheOffsetX = cameraWorldX - this.worldX;\n        const cacheOffsetY = cameraWorldY - this.worldY;\n\n\n        this._blitRegion(\n            this.buffer,\n            cacheOffsetX,\n            cacheOffsetY,\n            this.viewportWidth,\n            this.viewportHeight,\n            displayCanvas,\n            0,\n            0\n        );\n    }\n\n    // Fast blit from cache to display - assumes opaque\n    _blitRegion(srcBuffer, srcX, srcY, width, height, dstCanvas, dstX, dstY) {\n        const srcData = srcBuffer.data;\n        const dstData = dstCanvas.data;\n        const srcW = srcBuffer.width;\n        const srcH = srcBuffer.height;\n        const dstW = dstCanvas.width;\n        const dstH = dstCanvas.height;\n\n        // Clamp source bounds\n        const srcStartX = Math.max(0, Math.floor(srcX));\n        const srcStartY = Math.max(0, Math.floor(srcY));\n        const srcEndX = Math.min(srcW, Math.ceil(srcX + width));\n        const srcEndY = Math.min(srcH, Math.ceil(srcY + height));\n\n        // Clamp destination bounds\n        const dstStartX = Math.max(0, Math.floor(dstX));\n        const dstStartY = Math.max(0, Math.floor(dstY));\n        const dstEndX = Math.min(dstW, Math.floor(dstX + (srcEndX - srcStartX)));\n        const dstEndY = Math.min(dstH, Math.floor(dstY + (srcEndY - srcStartY)));\n\n        const copyWidth = dstEndX - dstStartX;\n        const copyHeight = dstEndY - dstStartY;\n\n        if (copyWidth <= 0 || copyHeight <= 0) return;\n\n        // Adjust source start if destination was clamped\n        const srcOffsetX = dstStartX - Math.floor(dstX);\n        const srcOffsetY = dstStartY - Math.floor(dstY);\n\n        // Fast row-by-row copy\n        for (let y = 0; y < copyHeight; y++) {\n            const srcRowStart = ((srcStartY + srcOffsetY + y) * srcW + srcStartX + srcOffsetX) * 4;\n            const dstRowStart = ((dstStartY + y) * dstW + dstStartX) * 4;\n\n            dstData.set(\n                srcData.subarray(srcRowStart, srcRowStart + copyWidth * 4),\n                dstRowStart\n            );\n        }\n\n        dstCanvas.markRegion(dstStartX, dstStartY, copyWidth, copyHeight);\n    }\n\n    getStats() {\n        return {\n            cacheSize: `${this.cacheWidth}x${this.cacheHeight}`,\n            viewportSize: `${this.viewportWidth}x${this.viewportHeight}`,\n            marginRatio: this.marginRatio,\n            fullRedraws: this.fullRedraws,\n            copies: this.copies,\n            worldRegion: `(${this.worldX}, ${this.worldY}) to (${this.worldX + this.cacheWidth}, ${this.worldY + this.cacheHeight})`\n        };\n    }\n\n    printStats() {\n        const s = this.getStats();\n        console.log('OFFSCREEN CACHE STATS');\n        console.log(`Cache size: ${s.cacheSize}`);\n        console.log(`Viewport size: ${s.viewportSize}`);\n        console.log(`Margin: ${(this.marginRatio * 100).toFixed(0)}%`);\n        console.log(`Full redraws: ${s.fullRedraws}`);\n        console.log(`Cache copies: ${s.copies}`);\n        console.log(`World region: ${s.worldRegion}`);\n        console.log('=============================\\n');\n    }\n}\n\n\n// ============= STRATEGY 3: CHUNKED PRE-RENDER =============\n// Divide world into fixed-size chunks, pre-render all layers into each chunk,\n// then just copy visible chunks to display. No shifting, no artifacts.\n\nexport class ChunkedPreRender {\n    constructor(mapWidth, mapHeight, chunkSize = 256) {\n        this.mapWidth = mapWidth;\n        this.mapHeight = mapHeight;\n        this.chunkSize = chunkSize;\n        \n        // Calculate grid dimensions\n        this.chunksX = Math.ceil(mapWidth / chunkSize);\n        this.chunksY = Math.ceil(mapHeight / chunkSize);\n        \n        // Store rendered chunk buffers in a 2D grid\n        this.chunks = new Array(this.chunksY);\n        for (let y = 0; y < this.chunksY; y++) {\n            this.chunks[y] = new Array(this.chunksX);\n        }\n        \n        this.renderCallbacks = [];\n        this.rendered = false;\n        this.pixelsDrawn = 0;\n        \n        console.log(`[ChunkedPreRender] Created ${this.chunksX}x${this.chunksY} chunk grid (${chunkSize}x${chunkSize}px chunks) for ${mapWidth}x${mapHeight} map`);\n    }\n    \n    // Register a callback that will render layers to a buffer\n    // Called during initialization and when chunks need updating\n    onRenderChunk(callback) {\n        this.renderCallbacks.push(callback);\n    }\n    \n    // Pre-render all chunks (call once during init)\n    renderAllChunks() {\n        if (this.rendered) return;\n        \n        console.log(`[ChunkedPreRender] Pre-rendering ${this.chunksX * this.chunksY} chunks...`);\n        \n        for (let cy = 0; cy < this.chunksY; cy++) {\n            for (let cx = 0; cx < this.chunksX; cx++) {\n                const chunk = this._renderChunk(cx, cy);\n                this.chunks[cy][cx] = chunk;\n                this.pixelsDrawn += chunk.buffer.width * chunk.buffer.height;\n            }\n        }\n        \n        this.rendered = true;\n        console.log(`[ChunkedPreRender] Pre-render complete. Total pixels: ${this.pixelsDrawn}`);\n    }\n    \n    // Render a single chunk\n    _renderChunk(chunkX, chunkY) {\n        // Calculate world bounds for this chunk\n        const worldX = chunkX * this.chunkSize;\n        const worldY = chunkY * this.chunkSize;\n        \n        // Calculate actual chunk size (may be smaller at map edges)\n        const chunkWidth = Math.min(this.chunkSize, this.mapWidth - worldX);\n        const chunkHeight = Math.min(this.chunkSize, this.mapHeight - worldY);\n        \n        // Create buffer for this chunk\n        const buffer = new CacheBuffer(chunkWidth, chunkHeight);\n        buffer.clear(0, 0, 0, 0);\n        \n        // Call all registered render callbacks with this chunk's world region\n        for (const callback of this.renderCallbacks) {\n            callback(buffer, {\n                x: worldX,\n                y: worldY,\n                width: chunkWidth,\n                height: chunkHeight\n            });\n        }\n        \n        return {\n            buffer,\n            worldX,\n            worldY,\n            width: chunkWidth,\n            height: chunkHeight\n        };\n    }\n    \n    // Copy visible chunks to display canvas based on camera position\n    copyToDisplay(displayCanvas, camera) {\n        const cameraX = camera.worldPosition.x;\n        const cameraY = camera.worldPosition.y;\n        const viewWidth = displayCanvas.width;\n        const viewHeight = displayCanvas.height;\n        \n        // Calculate which chunks are visible\n        // Camera position is top-left of viewport\n        const minChunkX = Math.max(0, Math.floor(cameraX / this.chunkSize));\n        const maxChunkX = Math.min(this.chunksX - 1, Math.floor((cameraX + viewWidth) / this.chunkSize));\n        const minChunkY = Math.max(0, Math.floor(cameraY / this.chunkSize));\n        const maxChunkY = Math.min(this.chunksY - 1, Math.floor((cameraY + viewHeight) / this.chunkSize));\n        \n        // Blit each visible chunk to canvas\n        for (let cy = minChunkY; cy <= maxChunkY; cy++) {\n            for (let cx = minChunkX; cx <= maxChunkX; cx++) {\n                const chunk = this.chunks[cy][cx];\n                if (!chunk) continue;\n                \n                // Calculate destination position on canvas\n                // chunk.worldX is in world space, convert to screen space (relative to camera)\n                const screenX = chunk.worldX - cameraX;\n                const screenY = chunk.worldY - cameraY;\n                \n                this._blitChunk(chunk.buffer, screenX, screenY, displayCanvas);\n            }\n        }\n    }\n    \n    // Blit a single chunk buffer to the display canvas\n    _blitChunk(srcBuffer, dstX, dstY, dstCanvas) {\n        const srcData = srcBuffer.data;\n        const dstData = dstCanvas.data;\n        const srcW = srcBuffer.width;\n        const srcH = srcBuffer.height;\n        const dstW = dstCanvas.width;\n        const dstH = dstCanvas.height;\n        \n        // Clamp destination bounds\n        const dstStartX = Math.max(0, Math.floor(dstX));\n        const dstStartY = Math.max(0, Math.floor(dstY));\n        const dstEndX = Math.min(dstW, Math.floor(dstX + srcW));\n        const dstEndY = Math.min(dstH, Math.floor(dstY + srcH));\n        \n        if (dstStartX >= dstEndX || dstStartY >= dstEndY) return;\n        \n        // Calculate corresponding source region (clipping)\n        const srcStartX = Math.max(0, Math.floor(-dstX));\n        const srcStartY = Math.max(0, Math.floor(-dstY));\n        const copyWidth = dstEndX - dstStartX;\n        const copyHeight = dstEndY - dstStartY;\n        \n        // Fast row-by-row copy\n        for (let y = 0; y < copyHeight; y++) {\n            const srcRowStart = ((srcStartY + y) * srcW + srcStartX) * 4;\n            const dstRowStart = ((dstStartY + y) * dstW + dstStartX) * 4;\n            \n            dstData.set(\n                srcData.subarray(srcRowStart, srcRowStart + copyWidth * 4),\n                dstRowStart\n            );\n        }\n        \n        dstCanvas.markRegion(dstStartX, dstStartY, copyWidth, copyHeight);\n    }\n    \n    getStats() {\n        return {\n            mapSize: `${this.mapWidth}x${this.mapHeight}`,\n            chunkSize: this.chunkSize,\n            chunkGrid: `${this.chunksX}x${this.chunksY}`,\n            rendered: this.rendered,\n            pixelsDrawn: this.pixelsDrawn\n        };\n    }\n    \n    printStats() {\n        const s = this.getStats();\n        console.log('=== CHUNKED PRE-RENDER STATS ===');\n        console.log(`Map size: ${s.mapSize}`);\n        console.log(`Chunk size: ${s.chunkSize}`);\n        console.log(`Chunk grid: ${s.chunkGrid}`);\n        console.log(`Rendered: ${s.rendered}`);\n        console.log(`Pixels drawn: ${s.pixelsDrawn}`);\n        console.log('==================================\\n');\n    }\n}","import { Node } from './core.js';\nimport { PixelBuffer, CacheBuffer, ShapeDrawer, PolygonDrawer, LineDrawer } from 'tessera.js';\nimport { PhysicsFactory } from './physicsv2.js';\nimport { dirname, resolve, extname } from 'node:path';\nimport { readFileSync } from \"node:fs\"\n\nimport { globalPerf, drawAtlasRegionToCanvas } from \"./lib.js\"\nimport { tilemapProfiler } from './tiledprofiler.js';\nimport OffscreenTilemapCache, { FullMapPreRender, ChunkedPreRender } from './tiledcache.js';\n\n\n\nconst tiledperf = globalPerf;\n\nfunction reshapeArray(arr, width, height) {\n    const result = [];\n    for (let i = 0; i < height; i++) {\n        const start = i * width;\n        const end = start + width;\n        result.push(arr.slice(start, end));\n    }\n    return result;\n}\n\nfunction findMinMaxLoop(arr) {\n    if (arr.length === 0) {\n        throw new Error(\"Array is empty\");\n    }\n    let min = arr[0];\n    let max = arr[0];\n    for (let i = 1; i < arr.length; i++) {\n        if (arr[i] < min) min = arr[i];\n        if (arr[i] > max) max = arr[i];\n    }\n    return { min, max };\n}\n\n\n\nclass BaseLayer {\n    constructor(layer, options = {}) {\n        this.layer = layer;\n        this.type = layer.type;\n        this.worldPosition = {\n            x: options.offsetX || 0,\n            y: options.offsetY || 0\n        };\n    }\n\n\n    draw(canvas, camera) {\n        throw new Error(\"draw() must be implemented by subclass\");\n    }\n\n    printDebug() {\n        console.log(`Layer: ${this.layer.name}, Type: ${this.type}`);\n    }\n}\n\n\n\nclass TileLayer extends BaseLayer {\n    constructor(layer, lastgid, tiles, options = {}) {\n        super(layer, options);\n\n        this.tileCache = new Map();\n        this.chunkBuffers = [];\n        this.assumeOpaque = options.assumeOpaque || false;\n        this.tiles2d = [];\n        this.layerwidth = layer.width;\n        this.layerheight = layer.height;\n        this.tileWidth = -16;\n        this.tileHeight = -16;\n        this.chunkSize = options.chunkSize || 16;\n        this.mapWidth = this.layerwidth;\n        this.mapHeight = this.layerheight;\n        this.chunkspertiles = [];\n        this.lastTile = 0;\n\n        this._initializeTileCache(layer, lastgid, tiles);\n        this.tiles2d = reshapeArray(layer.data, layer.width, layer.height);\n        this.createChunks();\n        this.preRenderChunks();\n    }\n\n    _initializeTileCache(layer, lastgid, tiles) {\n        const { min, max } = findMinMaxLoop(layer.data);\n        this.lastTile = max;\n\n        for (let tileId = min; tileId <= max; tileId++) {\n            if (tileId === 0) continue;\n\n            for (let i = 0; i <= lastgid.length; i++) {\n                if (tileId <= lastgid[i]) {\n                    if (this.tileWidth < 0) {\n                        this.tileWidth = tiles[i].tilewidth;\n                        this.tileHeight = tiles[i].tileheight;\n                    }\n                    this.tileCache.set(tileId, tiles[i]);\n                    break;\n                }\n            }\n        }\n    }\n\n    createChunks() {\n        const chunksX = Math.ceil(this.mapWidth / this.chunkSize);\n        const chunksY = Math.ceil(this.mapHeight / this.chunkSize);\n        const chunks = [];\n\n        for (let cy = 0; cy < chunksY; cy++) {\n            chunks[cy] = [];\n            for (let cx = 0; cx < chunksX; cx++) {\n                chunks[cy][cx] = {\n                    x: cx,\n                    y: cy,\n                    worldX: cx * this.chunkSize * this.tileWidth,\n                    worldY: cy * this.chunkSize * this.tileHeight,\n                    worldWidth: this.chunkSize * this.tileWidth,\n                    worldHeight: this.chunkSize * this.tileHeight,\n                    dirty: true\n                };\n            }\n        }\n\n        this.chunkspertiles.push(chunks);\n    }\n\n    preRenderChunks() {\n        const chunksX = Math.ceil(this.mapWidth / this.chunkSize);\n        const chunksY = Math.ceil(this.mapHeight / this.chunkSize);\n\n        for (let cy = 0; cy < chunksY; cy++) {\n            this.chunkBuffers[cy] = [];\n            for (let cx = 0; cx < chunksX; cx++) {\n                const bufferW = Math.min(this.chunkSize, this.layerwidth - cx * this.chunkSize) * this.tileWidth;\n                const bufferH = Math.min(this.chunkSize, this.layerheight - cy * this.chunkSize) * this.tileHeight;\n                const buffer = new CacheBuffer(bufferW, bufferH);\n                this.renderChunkToBuffer(cx, cy, buffer);\n                this.chunkBuffers[cy][cx] = buffer;\n            }\n        }\n    }\n\n    renderChunkToBuffer(chunkX, chunkY, buffer) {\n        tiledperf.start(\"renderChunkToBuffer\");\n        const startX = chunkX * this.chunkSize;\n        const startY = chunkY * this.chunkSize;\n        const endX = Math.min(startX + this.chunkSize, this.layerwidth);\n        const endY = Math.min(startY + this.chunkSize, this.layerheight);\n\n        buffer.clear(0, 0, 0, 0);\n\n        for (let y = startY; y < endY; y++) {\n            for (let x = startX; x < endX; x++) {\n                const tileId = this.tiles2d[y][x];\n                if (tileId === 0) continue;\n\n                const frameIndex = tileId - 1;\n                const tile = this.tileCache.get(tileId);\n\n                const col = frameIndex % tile.atlasFramesPerRow;\n                const row = Math.floor(frameIndex / tile.atlasFramesPerRow);\n                const srcRect = {\n                    x: col * tile.tilewidth,\n                    y: row * tile.tileheight,\n                    width: tile.tilewidth,\n                    height: tile.tileheight\n                };\n\n                const destRect = {\n                    x: (x - startX) * tile.tilewidth,\n                    y: (y - startY) * tile.tileheight,\n                    width: tile.tilewidth,\n                    height: tile.tileheight\n                };\n\n                drawAtlasRegionToCanvas(tile.image, srcRect, buffer, destRect, {\n                    algorithm: \"nn\",\n                    assumeOpaque: this.assumeOpaque\n                });\n            }\n        }\n        tiledperf.end(\"renderChunkToBuffer\");\n    }\n\n    blitBuffer(srcBuffer, dstCanvas, destX, destY) {\n        tiledperf.start(\"blitBufferPixels\");\n        const srcData = srcBuffer.data;\n        const dstData = dstCanvas.data;\n        const srcW = srcBuffer.width;\n        const srcH = srcBuffer.height;\n        const dstW = dstCanvas.width;\n        const dstH = dstCanvas.height;\n\n        const startX = Math.max(0, destX);\n        const startY = Math.max(0, destY);\n        const endX = Math.min(dstW, destX + srcW);\n        const endY = Math.min(dstH, destY + srcH);\n\n        if (startX >= endX || startY >= endY) {\n            tiledperf.end(\"blitBufferPixels\");\n            return;\n        }\n\n        if (this.assumeOpaque) {\n            for (let y = startY; y < endY; y++) {\n                const srcY = y - destY;\n                const srcRowStart = srcY * srcW * 4;\n                const dstRowStart = y * dstW * 4;\n                const srcStartX = Math.max(0, -destX);\n                const rowPixelCount = endX - startX;\n\n                dstData.set(\n                    srcData.subarray(\n                        srcRowStart + srcStartX * 4,\n                        srcRowStart + srcStartX * 4 + rowPixelCount * 4\n                    ),\n                    dstRowStart + startX * 4\n                );\n            }\n        } else {\n            for (let y = startY; y < endY; y++) {\n                const srcY = y - destY;\n                const srcRowStart = srcY * srcW * 4;\n                const dstRowStart = y * dstW * 4;\n\n                for (let x = startX; x < endX; x++) {\n                    const srcX = x - destX;\n                    const srcIdx = srcRowStart + srcX * 4;\n                    const dstIdx = dstRowStart + x * 4;\n                    const srcA = srcData[srcIdx + 3];\n\n                    if (srcA === 255) {\n                        dstData[dstIdx] = srcData[srcIdx];\n                        dstData[dstIdx + 1] = srcData[srcIdx + 1];\n                        dstData[dstIdx + 2] = srcData[srcIdx + 2];\n                        dstData[dstIdx + 3] = 255;\n                    } else if (srcA > 0) {\n                        const inv = 255 - srcA;\n                        dstData[dstIdx] = ((srcData[srcIdx] * srcA + dstData[dstIdx] * inv) / 255) | 0;\n                        dstData[dstIdx + 1] = ((srcData[srcIdx + 1] * srcA + dstData[dstIdx + 1] * inv) / 255) | 0;\n                        dstData[dstIdx + 2] = ((srcData[srcIdx + 2] * srcA + dstData[dstIdx + 2] * inv) / 255) | 0;\n                        dstData[dstIdx + 3] = ((srcA * 255 + dstData[dstIdx + 3] * inv) / 255) | 0;\n                    }\n                }\n            }\n        }\n\n        dstCanvas.markRegion(startX, startY, endX - startX, endY - startY);\n        tiledperf.end(\"blitBufferPixels\");\n    }\n\n\n\n\n    /**\n * Draw only a specific region of the tilemap\n * Used for incremental cache updates\n * \n * @param {CacheBuffer} canvas - buffer to draw to\n * @param {Object} camera - fake camera for coordinate conversion\n * @param {Object} region - {x, y, width, height} in cache coordinates\n * @param {Object} worldRegion - {x, y, width, height} in world coordinates\n */\n\n    drawRegion(canvas, camera, region, worldRegion) {\n          tiledperf.start(\"tilelayer_drawRegion\");\n    // Cache locals for faster access\n    const chunks = this.chunkspertiles[0];\n    const chunkSize = this.chunkSize;\n    const tileW = this.tileWidth;\n    const tileH = this.tileHeight;\n    const layerWorldX = this.worldPosition.x;\n    const layerWorldY = this.worldPosition.y;\n    const regionX = worldRegion.x;\n    const regionY = worldRegion.y;\n    const regionW = worldRegion.width;\n    const regionH = worldRegion.height;\n    \n    // Calculate chunk bounds - inline to avoid function call\n    const chunkPixelW = chunkSize * tileW;\n    const chunkPixelH = chunkSize * tileH;\n    \n    let startChunkX = Math.floor((regionX - layerWorldX) / chunkPixelW);\n    let endChunkX = Math.ceil((regionX + regionW - layerWorldX) / chunkPixelW);\n    let startChunkY = Math.floor((regionY - layerWorldY) / chunkPixelH);\n    let endChunkY = Math.ceil((regionY + regionH - layerWorldY) / chunkPixelH);\n    \n    // Clamp to valid chunk range\n    if (startChunkX < 0) startChunkX = 0;\n    if (startChunkY < 0) startChunkY = 0;\n    const maxChunkX = chunks[0].length - 1;\n    const maxChunkY = chunks.length - 1;\n    if (endChunkX > maxChunkX) endChunkX = maxChunkX;\n    if (endChunkY > maxChunkY) endChunkY = maxChunkY;\n    \n    // Blit chunks - tight loop, no allocations\n    for (let cy = startChunkY; cy <= endChunkY; cy++) {\n        const chunkRow = this.chunkBuffers[cy];\n        \n        for (let cx = startChunkX; cx <= endChunkX; cx++) {\n            const chunkBuffer = chunkRow[cx];\n            \n            // Calculate world position - inline\n            const chunkWorldX = layerWorldX + cx * chunkPixelW;\n            const chunkWorldY = layerWorldY + cy * chunkPixelH;\n            \n            // Convert to cache coords using the proper worldToScreen method\n            const screenPos = camera.worldToScreen(chunkWorldX, chunkWorldY);\n            const destX = Math.floor(screenPos.x);\n            const destY = Math.floor(screenPos.y);\n            \n            // Quick bounds check - inline\n            const chunkW = chunkBuffer.width;\n            const chunkH = chunkBuffer.height;\n            const regionLeft = region.x;\n            const regionRight = region.x + region.width;\n            const regionTop = region.y;\n            const regionBottom = region.y + region.height;\n            \n            if (destX + chunkW < regionLeft || destX > regionRight ||\n                destY + chunkH < regionTop || destY > regionBottom) {\n                continue;\n            }\n            \n            // Blit chunk\n            this.blitBuffer(chunkBuffer, canvas, destX, destY);\n        }\n    }\n          tiledperf.end(\"tilelayer_drawRegion\");\n}\n    // drawRegion(canvas, camera, region, worldRegion) {\n    //     tiledperf.start(\"drawRegion\");\n    //     // Calculate which chunks intersect this region\n    //     const startChunkX = Math.floor((worldRegion.x - this.worldPosition.x) / (this.chunkSize * this.tileWidth));\n    //     const endChunkX = Math.ceil((worldRegion.x + worldRegion.width - this.worldPosition.x) / (this.chunkSize * this.tileWidth));\n    //     const startChunkY = Math.floor((worldRegion.y - this.worldPosition.y) / (this.chunkSize * this.tileHeight));\n    //     const endChunkY = Math.ceil((worldRegion.y + worldRegion.height - this.worldPosition.y) / (this.chunkSize * this.tileHeight));\n\n    //     const chunks = this.chunkspertiles[0];\n    //     const clampStartX = Math.max(0, startChunkX);\n    //     const clampEndX = Math.min(chunks[0].length - 1, endChunkX);\n    //     const clampStartY = Math.max(0, startChunkY);\n    //     const clampEndY = Math.min(chunks.length - 1, endChunkY);\n\n    //     // Blit only the chunks that intersect the region\n    //     for (let cy = clampStartY; cy <= clampEndY; cy++) {\n    //         for (let cx = clampStartX; cx <= clampEndX; cx++) {\n    //             const chunkBuffer = this.chunkBuffers[cy][cx];\n    //             const chunkWorldX = this.worldPosition.x + cx * this.chunkSize * this.tileWidth;\n    //             const chunkWorldY = this.worldPosition.y + cy * this.chunkSize * this.tileHeight;\n\n    //             // Convert world position to cache coordinates\n    //             const screenPos = camera.worldToScreen(chunkWorldX, chunkWorldY);\n    //             const destX = Math.floor(screenPos.x);\n    //             const destY = Math.floor(screenPos.y);\n\n    //             // Only blit if chunk intersects region\n    //             if (destX + chunkBuffer.width >= region.x &&\n    //                 destX < region.x + region.width &&\n    //                 destY + chunkBuffer.height >= region.y &&\n    //                 destY < region.y + region.height) {\n\n    //                 this.blitBuffer(chunkBuffer, canvas, destX, destY);\n    //             }\n    //         }\n    //     }\n    //     tiledperf.end(\"drawRegion\");\n    // }\n\n    draw(canvas, camera, region = null, worldRegion = null) {\n        if (region && worldRegion) {\n            this.drawRegion(canvas, camera, region, worldRegion);\n            return;\n        }\n        tiledperf.start(\"drawVisibleChunks\");\n        tilemapProfiler.startFrame(camera);\n        const visibleBounds = camera.getVisibleBounds();\n        const chunks = this.chunkspertiles[0];\n\n        const startChunkX = Math.max(0, Math.floor((visibleBounds.left - this.worldPosition.x) / (this.chunkSize * this.tileWidth)));\n        const endChunkX = Math.min(chunks[0].length - 1, Math.ceil((visibleBounds.right - this.worldPosition.x) / (this.chunkSize * this.tileWidth)));\n        const startChunkY = Math.max(0, Math.floor((visibleBounds.top - this.worldPosition.y) / (this.chunkSize * this.tileHeight)));\n        const endChunkY = Math.min(chunks.length - 1, Math.ceil((visibleBounds.bottom - this.worldPosition.y) / (this.chunkSize * this.tileHeight)));\n\n        tiledperf.start(\"blitBuffer\");\n        for (let cy = startChunkY; cy <= endChunkY; cy++) {\n            for (let cx = startChunkX; cx <= endChunkX; cx++) {\n                const chunkBuffer = this.chunkBuffers[cy][cx];\n                const worldX = this.worldPosition.x + cx * this.chunkSize * this.tileWidth;\n                const worldY = this.worldPosition.y + cy * this.chunkSize * this.tileHeight;\n                const screenPos = camera.worldToScreen(worldX, worldY);\n                const destX = Math.floor(screenPos.x);\n                const destY = Math.floor(screenPos.y);\n                tilemapProfiler.recordBlit(chunkBuffer.width, chunkBuffer.height);\n                tilemapProfiler.recordChunk();\n                this.blitBuffer(chunkBuffer, canvas, destX, destY);\n            }\n        }\n        tiledperf.end(\"blitBuffer\");\n        tiledperf.end(\"drawVisibleChunks\");\n    }\n\n    printDebug() {\n        super.printDebug();\n        console.log(`Tile cache size: ${this.tileCache.size}`);\n        console.log(`Chunks: ${this.chunkBuffers.length}x${this.chunkBuffers[0]?.length || 0}`);\n    }\n}\n\n\nclass ObjectLayer extends BaseLayer {\n    constructor(layer, lastgid, tiles, options = {}) {\n        super(layer, options);\n\n        this.objectRenderCache = [];\n        this._precomputeObjectRenderData(layer, lastgid, tiles);\n    }\n\n    _precomputeObjectRenderData(layer, lastgid, tiles) {\n        for (const obj of layer.objects) {\n            let tileset = null;\n            for (let i = 0; i < lastgid.length; i++) {\n                if (obj.gid <= lastgid[i]) {\n                    tileset = tiles[i];\n                    break;\n                }\n            }\n\n            if (!tileset) continue;\n\n            const frameIndex = obj.gid - 1;\n            const col = frameIndex % tileset.atlasFramesPerRow;\n            const row = Math.floor(frameIndex / tileset.atlasFramesPerRow);\n\n            const srcRect = {\n                x: col * tileset.tilewidth,\n                y: row * tileset.tileheight,\n                width: tileset.tilewidth,\n                height: tileset.tileheight\n            };\n\n            const image = tileset.type === \"grid\" ? tileset.image : tileset.tiles[0];\n\n            this.objectRenderCache.push({\n                worldX: this.worldPosition.x + obj.x,\n                worldY: this.worldPosition.y + obj.y,\n                width: obj.width,\n                height: obj.height,\n                srcRect: srcRect,\n                image: image\n            });\n        }\n    }\n\n    /**\n * Draw only objects that intersect the specified region\n * For incremental cache updates\n */\n    drawRegion(canvas, camera, cacheRegion, worldRegion) {\n        // Iterate through precomputed render cache\n        // Only draw objects that intersect worldRegion\n          tiledperf.start(\"objectlayer_drawregion\");\n\n\n        const regionLeft = worldRegion.x;\n        const regionRight = worldRegion.x + worldRegion.width;\n        const regionTop = worldRegion.y;\n        const regionBottom = worldRegion.y + worldRegion.height;\n\n        for (let i = 0; i < this.objectRenderCache.length; i++) {\n            const cached = this.objectRenderCache[i];\n\n            // Quick AABB intersection test\n            const objLeft = cached.worldX;\n            const objRight = cached.worldX + cached.width;\n            const objTop = cached.worldY;\n            const objBottom = cached.worldY + cached.height;\n\n            // Skip if no intersection\n            if (objRight < regionLeft || objLeft > regionRight ||\n                objBottom < regionTop || objTop > regionBottom) {\n                continue;\n            }\n\n            // Object intersects region - draw it\n            const screenPos = camera.worldToScreen(cached.worldX, cached.worldY);\n\n            const destRect = {\n                x: Math.floor(screenPos.x),\n                y: Math.floor(screenPos.y),\n                width: Math.floor(cached.width * camera.zoom),\n                height: Math.floor(cached.height * camera.zoom)\n            };\n\n            // Draw to canvas\n            drawAtlasRegionToCanvas(cached.image, cached.srcRect, canvas, destRect, {\n                algorithm: \"nn\",\n                camera: camera\n            });\n        }\n\n          tiledperf.end(\"objectlayer_drawregion\");\n\n    }\n\n\n    draw(canvas, camera, cacheRegion = null, worldRegion = null) {\n          tiledperf.start(\"objectlayer_draw\");\n\n        if (cacheRegion && worldRegion) {\n            this.drawRegion(canvas, camera, cacheRegion, worldRegion);\n            return;\n        }\n\n        for (const cached of this.objectRenderCache) {\n            const screenPos = camera.worldToScreen(cached.worldX, cached.worldY);\n\n            const destRect = {\n                x: Math.floor(screenPos.x),\n                y: Math.floor(screenPos.y),\n                width: Math.floor(cached.width * camera.zoom),\n                height: Math.floor(cached.height * camera.zoom)\n            };\n\n            if (destRect.x + destRect.width < 0 || destRect.x >= canvas.width ||\n                destRect.y + destRect.height < 0 || destRect.y >= canvas.height) {\n                continue;\n            }\n\n            drawAtlasRegionToCanvas(cached.image, cached.srcRect, canvas, destRect, {\n                algorithm: \"nn\",\n                camera: camera\n            });\n        }\n          tiledperf.end(\"objectlayer_draw\");\n\n    }\n\n    printDebug() {\n        super.printDebug();\n        console.log(`Object count: ${this.objectRenderCache.length}`);\n    }\n}\n\n\n\n\nclass CollisionLayer extends BaseLayer {\n    constructor(layer, lastgid, tiles, options = {}, cb = (b) => { }) {\n        super(layer, options);\n\n        this.collisionShapes = [];\n        this.bodies = new Map();\n        this._mergedBoxCounter = 0;\n        this.debugCollisions = options.debugCollisions || false;\n\n        this._parseCollisionShapes(layer);\n        const created = this.createPlanckCollisionShapes(this.collisionShapes);\n        cb(created)\n    }\n\n    _parseCollisionShapes(layer) {\n        for (const obj of layer.objects) {\n            const shape = this.parseShape(obj);\n            if (shape) {\n                this.collisionShapes.push(shape);\n            } else {\n                console.warn(`Couldn't parse shape:`, obj);\n            }\n        }\n    }\n\n    parseShape(obj) {\n        if (!obj.polygon && !obj.ellipse) {\n            if (obj.width == 0 && obj.height == 0) {\n                return {\n                    type: 'point',\n                    name: obj.name,\n                    data: { x: this.worldPosition.x + obj.x, y: this.worldPosition.y + obj.y }\n                };\n            } else {\n                return {\n                    type: 'box',\n                    name: obj.name,\n                    data: {\n                        x: this.worldPosition.x + obj.x,\n                        y: this.worldPosition.y + obj.y,\n                        width: obj.width,\n                        height: obj.height\n                    }\n                };\n            }\n        }\n\n        if (obj.ellipse) {\n            const radius = obj.width / 2;\n            return {\n                type: 'circle',\n                name: obj.name,\n                data: {\n                    x: this.worldPosition.x + obj.x + radius,\n                    y: this.worldPosition.y + obj.y + radius,\n                    radius: radius\n                }\n            };\n        }\n\n        if (obj.polygon) {\n            return {\n                type: 'poly',\n                name: obj.name,\n                data: {\n                    x: this.worldPosition.x + obj.x,\n                    y: this.worldPosition.y + obj.y,\n                    points: obj.polygon\n                }\n            };\n        }\n    }\n\n    mergeBoxShapes(allBoxes) {\n        if (!Array.isArray(allBoxes) || allBoxes.length === 0) return [];\n\n        const rects = allBoxes.map(b => ({\n            name: b.name,\n            x: b.data.x,\n            y: b.data.y,\n            width: b.data.width,\n            height: b.data.height\n        }));\n\n        const tryMerge = (a, b) => {\n            if (a.y === b.y && a.height === b.height) {\n                if (a.x + a.width === b.x) {\n                    return { x: a.x, y: a.y, width: a.width + b.width, height: a.height, name: `${a.name || 'm'}_${b.name || 'm'}` };\n                }\n                if (b.x + b.width === a.x) {\n                    return { x: b.x, y: b.y, width: a.width + b.width, height: a.height, name: `${b.name || 'm'}_${a.name || 'm'}` };\n                }\n            }\n\n            if (a.x === b.x && a.width === b.width) {\n                if (a.y + a.height === b.y) {\n                    return { x: a.x, y: a.y, width: a.width, height: a.height + b.height, name: `${a.name || 'm'}_${b.name || 'm'}` };\n                }\n                if (b.y + b.height === a.y) {\n                    return { x: b.x, y: b.y, width: a.width, height: a.height + b.height, name: `${b.name || 'm'}_${a.name || 'm'}` };\n                }\n            }\n\n            return null;\n        };\n\n        let merged = true;\n        while (merged) {\n            merged = false;\n            outer:\n            for (let i = 0; i < rects.length; i++) {\n                for (let j = i + 1; j < rects.length; j++) {\n                    const a = rects[i];\n                    const b = rects[j];\n                    const m = tryMerge(a, b);\n                    if (m) {\n                        rects[i] = m;\n                        rects.splice(j, 1);\n                        merged = true;\n                        break outer;\n                    }\n                }\n            }\n        }\n\n        return rects.map((r, idx) => ({\n            type: 'box',\n            name: r.name || `merged_box_${this._mergedBoxCounter++}_${idx}`,\n            data: { x: r.x, y: r.y, width: r.width, height: r.height }\n        }));\n    }\n\n    createPlanckCollisionShapes(shapes, options = {}) {\n        const created = [];\n        const defaultBodyType = options.defaultBodyType || 'static';\n\n        if (!Array.isArray(shapes) || shapes.length === 0) return created;\n\n        const boxes = [];\n        const others = [];\n        for (const s of shapes) {\n            if (!s || !s.type) continue;\n            const t = s.type.toLowerCase();\n            if (t === 'box') boxes.push(s);\n            else others.push(s);\n        }\n\n        const mergedBoxes = this.mergeBoxShapes(boxes);\n\n        for (let i = 0; i < mergedBoxes.length; i++) {\n            const mb = mergedBoxes[i];\n            const d = mb.data;\n            const cx = d.x + d.width / 2;\n            const cy = d.y + d.height / 2;\n            let name = mb.name || `merged_box_${i}`;\n            if (this.bodies.has(name)) {\n                name = `${name}_${i}`;\n            }\n\n            const body = PhysicsFactory.createBox(name, cx, cy, d.width, d.height, options.bodyType || defaultBodyType, options.anchor || 'center');\n            this.bodies.set(name, body);\n            created.push(body);\n        }\n\n        for (let i = 0; i < others.length; i++) {\n            const shp = others[i];\n            if (!shp.data) continue;\n\n            let nameBase = shp.name || `${shp.type}_${i}`;\n            let name = nameBase;\n            let k = 1;\n            while (this.bodies.has(name)) {\n                name = `${nameBase}_${k++}`;\n            }\n\n            const body = PhysicsFactory.createFromParsedShape(shp, name, options.bodyType || defaultBodyType, options.shapeOptions || {});\n\n            if (body) {\n                this.bodies.set(name, body);\n                created.push(body);\n            } else {\n                console.warn(`Failed to create shape for:`, shp);\n            }\n        }\n\n        return created;\n    }\n\n    drawRegion(canvas, camera, cacheRegion, worldRegion) {\n        if (!this.debugCollisions) return;\n\n        const regionLeft = worldRegion.x;\n        const regionRight = worldRegion.x + worldRegion.width;\n        const regionTop = worldRegion.y;\n        const regionBottom = worldRegion.y + worldRegion.height;\n\n        const getColorForBody = (body) => {\n            switch ((body.type || '').toLowerCase()) {\n                case 'static': return { r: 120, g: 120, b: 120, a: 220 };\n                case 'kinematic': return { r: 0, g: 140, b: 255, a: 220 };\n                case 'dynamic':\n                default: return { r: 255, g: 60, b: 60, a: 220 };\n            }\n        };\n\n        // Inline AABB test - no function call overhead\n        const intersectsRegion = (left, top, right, bottom) => {\n            return !(right < regionLeft || left > regionRight ||\n                bottom < regionTop || top > regionBottom);\n        };\n\n        const strokeThickness = 1;\n\n        for (const [name, body] of this.bodies.entries()) {\n            if (!body) continue;\n\n            const color = getColorForBody(body);\n            const children = body.children || [];\n\n            if (!children.length) continue;\n\n            for (let s = 0; s < children.length; s++) {\n                const shape = children[s];\n                if (!shape || !shape.shapeType) continue;\n\n                const opts = shape.options || {};\n                const anchor = shape.anchorOffset || { x: 0, y: 0 };\n                const baseX = (opts.x || 0);\n                const baseY = (opts.y || 0);\n                const lx = baseX - anchor.x;\n                const ly = baseY - anchor.y;\n                const worldBaseX = (body.position && body.position.x !== undefined) ? body.position.x + lx : lx;\n                const worldBaseY = (body.position && body.position.y !== undefined) ? body.position.y + ly : ly;\n\n                // Quick reject based on shape type\n                let shouldDraw = false;\n\n                if (shape.shapeType === 'box') {\n                    const w = opts.width || 0;\n                    const h = opts.height || 0;\n                    const left = worldBaseX - w / 2;\n                    const top = worldBaseY - h / 2;\n                    shouldDraw = intersectsRegion(left, top, left + w, top + h);\n\n                    if (shouldDraw) {\n                        const screenPos = camera.worldToScreen(left, top);\n                        ShapeDrawer.strokeRect(canvas, screenPos.x, screenPos.y, w, h, strokeThickness, color.r, color.g, color.b, color.a);\n                    }\n                } else if (shape.shapeType === 'circle') {\n                    const rpx = opts.radius || 0;\n                    const left = worldBaseX - rpx;\n                    const top = worldBaseY - rpx;\n                    shouldDraw = intersectsRegion(left, top, worldBaseX + rpx, worldBaseY + rpx);\n\n                    if (shouldDraw) {\n                        const screenPos = camera.worldToScreen(worldBaseX, worldBaseY);\n                        ShapeDrawer.strokeCircle(canvas, screenPos.x, screenPos.y, rpx, strokeThickness, color.r, color.g, color.b, color.a);\n                    }\n                } else if (shape.shapeType === 'polygon' || shape.shapeType === 'poly') {\n                    const pts = opts.points || [];\n                    if (!pts.length) continue;\n\n                    // Calculate AABB for polygon\n                    let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n                    for (let p = 0; p < pts.length; p++) {\n                        const wx = worldBaseX + pts[p].x;\n                        const wy = worldBaseY + pts[p].y;\n                        if (wx < minX) minX = wx;\n                        if (wy < minY) minY = wy;\n                        if (wx > maxX) maxX = wx;\n                        if (wy > maxY) maxY = wy;\n                    }\n\n                    shouldDraw = intersectsRegion(minX, minY, maxX, maxY);\n\n                    if (shouldDraw) {\n                        const worldPts = pts.map(p => ({ x: worldBaseX + p.x, y: worldBaseY + p.y }));\n                        const screenPts = worldPts.map(p => camera.worldToScreen(p.x, p.y));\n\n                        if (shape.shapeType === 'polygon' || opts.closed === true) {\n                            PolygonDrawer.fillPolygon(canvas, screenPts, color.r, color.g, color.b, Math.floor(color.a * 0.2));\n                            PolygonDrawer.strokePolygon(canvas, screenPts, strokeThickness, color.r, color.g, color.b, color.a);\n                        } else {\n                            PolygonDrawer.strokePolygon(canvas, screenPts, strokeThickness, color.r, color.g, color.b, color.a);\n                        }\n                    }\n                } else if (shape.shapeType === 'point') {\n                    shouldDraw = intersectsRegion(worldBaseX - 3, worldBaseY - 3, worldBaseX + 3, worldBaseY + 3);\n\n                    if (shouldDraw) {\n                        const screenPos = camera.worldToScreen(worldBaseX, worldBaseY);\n                        ShapeDrawer.fillCircle(canvas, screenPos.x, screenPos.y, 3, color.r, color.g, color.b, color.a);\n                    }\n                }\n            }\n        }\n    }\n\n    draw(canvas, camera, cacheRegion = null, worldRegion = null) {\n        if (!this.debugCollisions) return;\n\n        if (cacheRegion && worldRegion) {\n            this.drawRegion(canvas, camera, cacheRegion, worldRegion);\n            return;\n        }\n\n        const getColorForBody = (body) => {\n            switch ((body.type || '').toLowerCase()) {\n                case 'static': return { r: 120, g: 120, b: 120, a: 220 };\n                case 'kinematic': return { r: 0, g: 140, b: 255, a: 220 };\n                case 'dynamic':\n                default: return { r: 255, g: 60, b: 60, a: 220 };\n            }\n        };\n\n        const isAABBOnScreen = (left, top, right, bottom) => {\n            const p1 = camera.worldToScreen(left, top);\n            const p2 = camera.worldToScreen(right, bottom);\n            const sxMin = Math.min(p1.x, p2.x), syMin = Math.min(p1.y, p2.y);\n            const sxMax = Math.max(p1.x, p2.x), syMax = Math.max(p1.y, p2.y);\n            if (sxMax < 0 || sxMin >= canvas.width || syMax < 0 || syMin >= canvas.height) return false;\n            return true;\n        };\n\n        for (const [name, body] of this.bodies.entries()) {\n            if (!body) continue;\n\n            const color = getColorForBody(body);\n            const strokeThickness = 1;\n            const children = body.children || [];\n\n            if (!children.length) continue;\n\n            for (const shape of children) {\n                if (!shape || !shape.shapeType) continue;\n\n                const opts = shape.options || {};\n                const anchor = shape.anchorOffset || { x: 0, y: 0 };\n                const baseX = (opts.x || 0);\n                const baseY = (opts.y || 0);\n                const lx = baseX - anchor.x;\n                const ly = baseY - anchor.y;\n                const worldBaseX = (body.position && body.position.x !== undefined) ? body.position.x + lx : lx;\n                const worldBaseY = (body.position && body.position.y !== undefined) ? body.position.y + ly : ly;\n\n                switch (shape.shapeType) {\n                    case 'box': {\n                        const w = opts.width || 0;\n                        const h = opts.height || 0;\n                        const left = worldBaseX - w / 2;\n                        const top = worldBaseY - h / 2;\n                        const right = left + w;\n                        const bottom = top + h;\n\n                        if (!isAABBOnScreen(left, top, right, bottom)) break;\n                        const screenPos = camera.worldToScreen(left, top);\n                        ShapeDrawer.strokeRect(canvas, screenPos.x, screenPos.y, w, h, strokeThickness, color.r, color.g, color.b, color.a);\n                        break;\n                    }\n\n                    case 'circle': {\n                        const rpx = opts.radius || 0;\n                        const left = worldBaseX - rpx;\n                        const top = worldBaseY - rpx;\n                        const right = worldBaseX + rpx;\n                        const bottom = worldBaseY + rpx;\n\n                        if (!isAABBOnScreen(left, top, right, bottom)) break;\n                        const screenPos = camera.worldToScreen(worldBaseX, worldBaseY);\n                        ShapeDrawer.strokeCircle(canvas, screenPos.x, screenPos.y, rpx, strokeThickness, color.r, color.g, color.b, color.a);\n                        break;\n                    }\n\n                    case 'polygon':\n                    case 'poly': {\n                        const pts = opts.points || [];\n                        if (!pts.length) break;\n\n                        const worldPts = pts.map(p => ({ x: worldBaseX + p.x, y: worldBaseY + p.y }));\n                        let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n                        for (const p of worldPts) {\n                            if (p.x < minX) minX = p.x;\n                            if (p.y < minY) minY = p.y;\n                            if (p.x > maxX) maxX = p.x;\n                            if (p.y > maxY) maxY = p.y;\n                        }\n                        if (!isAABBOnScreen(minX, minY, maxX, maxY)) break;\n\n                        const screenPts = worldPts.map(p => camera.worldToScreen(p.x, p.y));\n                        if (shape.shapeType === 'polygon' || opts.closed === true) {\n                            PolygonDrawer.fillPolygon(canvas, screenPts, color.r, color.g, color.b, Math.floor(color.a * 0.2));\n                            PolygonDrawer.strokePolygon(canvas, screenPts, strokeThickness, color.r, color.g, color.b, color.a);\n                        } else {\n                            PolygonDrawer.strokePolygon(canvas, screenPts, strokeThickness, color.r, color.g, color.b, color.a);\n                        }\n                        break;\n                    }\n\n                    case 'line': {\n                        const pts = opts.points || [];\n                        if (pts.length < 2) break;\n                        for (let i = 0; i < pts.length - 1; i++) {\n                            const p1 = { x: worldBaseX + pts[i].x, y: worldBaseY + pts[i].y };\n                            const p2 = { x: worldBaseX + pts[i + 1].x, y: worldBaseY + pts[i + 1].y };\n                            const l = Math.min(p1.x, p2.x), t = Math.min(p1.y, p2.y);\n                            const r = Math.max(p1.x, p2.x), b = Math.max(p1.y, p2.y);\n                            if (!isAABBOnScreen(l, t, r, b)) continue;\n                            const s1 = camera.worldToScreen(p1.x, p1.y);\n                            const s2 = camera.worldToScreen(p2.x, p2.y);\n                            LineDrawer.drawLine(canvas, s1.x, s1.y, s2.x, s2.y, color.r, color.g, color.b, color.a);\n                        }\n                        break;\n                    }\n\n                    case 'point': {\n                        const px = worldBaseX;\n                        const py = worldBaseY;\n                        const size = 3;\n                        const left = px - size, top = py - size, right = px + size, bottom = py + size;\n                        if (!isAABBOnScreen(left, top, right, bottom)) break;\n                        const screenPos = camera.worldToScreen(px, py);\n                        ShapeDrawer.fillCircle(canvas, screenPos.x, screenPos.y, size, color.r, color.g, color.b, color.a);\n                        break;\n                    }\n\n                    default: {\n                        const w = opts.width || 0, h = opts.height || 0;\n                        const left = worldBaseX - w / 2, top = worldBaseY - h / 2, right = left + w, bottom = top + h;\n                        if (isAABBOnScreen(left, top, right, bottom)) {\n                            const screenPos = camera.worldToScreen(left, top);\n                            ShapeDrawer.strokeRect(canvas, screenPos.x, screenPos.y, w, h, strokeThickness, color.r, color.g, color.b, color.a);\n                        }\n                        break;\n                    }\n                }\n            }\n        }\n    }\n\n    printDebug() {\n        super.printDebug();\n        console.log(`Collision bodies: ${this.bodies.size}`);\n        console.log(`Collision shapes: ${this.collisionShapes.length}`);\n    }\n}\n\n\nclass LayerFactory {\n    static create(layer, lastgid, tiles, options = {}, cb = () => { }) {\n        if (layer.type === \"tilelayer\") {\n            return new TileLayer(layer, lastgid, tiles, options);\n        }\n\n        if (layer.type === \"objectgroup\") {\n            // Check if it has gid (image objects) or is collision layer\n            if (layer.objects && layer.objects.length > 0 && layer.objects[0].gid) {\n                return new ObjectLayer(layer, lastgid, tiles, options);\n            } else {\n                return new CollisionLayer(layer, lastgid, tiles, options, cb);\n            }\n        }\n\n        throw new Error(`Unknown layer type: ${layer.type}`);\n    }\n}\n\n\nclass Tile {\n    constructor(tileset, basePath, renderer, canvas) {\n        this.type = \"grid\";\n        this.basePath = basePath;\n        this.renderer = renderer;\n        this.canvas = canvas;\n        this.parseGeneric(tileset);\n\n        if (tileset.columns <= 0) {\n            this.type = \"image\";\n            this.tiles = [];\n            this.parseNonGrid(tileset);\n        } else {\n            this.parseGrid(tileset);\n        }\n    }\n\n    parseGeneric(tileset) {\n        this.firstgid = tileset.firstgid;\n        this.name = tileset.name;\n        this.tileheight = tileset.tileheight;\n        this.tilewidth = tileset.tilewidth;\n        this.tilecount = tileset.tilecount;\n        this.spacing = tileset.spacing;\n        this.margin = tileset.margin;\n    }\n\n    parseGrid(tileset) {\n        this.image = this.renderer.loadImage(resolve(this.basePath, tileset.image));\n        this.imagewidth = tileset.imagewidth;\n        this.imageheight = tileset.imageheight;\n        this.atlasFramesPerRow = Math.floor(this.imagewidth / this.tilewidth);\n    }\n\n    parseNonGrid(tileset) {\n        for (const img of tileset.tiles) {\n            this.tiles.push(this.renderer.loadImage(resolve(this.basePath, img.image)));\n            this.imagewidth = img.imagewidth;\n            this.imageheight = img.imageheight;\n            this.atlasFramesPerRow = Math.floor(this.imagewidth / this.tilewidth);\n        }\n    }\n}\n\n\nexport class Tiled extends Node {\n    constructor(renderer, path, opts = {}, opaque = []) {\n        super(\"tiled\");\n        this.basePath = dirname(path);\n        this.opts = opts;\n        this.opaque = opaque;\n        this.renderer = renderer;\n\n        this.useCache = opts.useCache !== false; // default true\n        this.cache = null;\n        this.cacheInitialized = false;\n\n        // Full map pre-render strategy (Strategy 2)\n        this.preRenderEntireMap = opts.preRenderEntireMap || false;\n        this.fullMapBuffer = null;\n\n        // Chunked pre-render strategy (Strategy 3)\n        this.useChunkedRender = opts.useChunkedRender || false;\n        this.chunkedBuffer = null;\n        this.chunkSize = opts.chunkSize || 256;\n\n        if (extname(path) != \".json\") {\n            throw new Error(\"expected a json map\");\n        }\n\n        this.json = JSON.parse(readFileSync(path, { encoding: \"utf8\" }));\n        this.lastgid = [];\n        this.tiles = [];\n        this.layers = [];\n        this.collisionObjects = []\n        if (!this.json.tilesets) {\n            throw new Error(`expected the property tilesets from parsed json`);\n        }\n\n        tiledperf.start(\"processTiles\");\n        this.processTilesets(this.json.tilesets);\n        tiledperf.end(\"processTiles\");\n\n        tiledperf.start(\"processLayers\");\n        this.processLayers(this.json.layers);\n        tiledperf.end(\"processLayers\");\n\n        this._drawMethods = [\n            function fallback(c, cam) {\n                for (let i = 0; i < this.layers.length; i++) {\n                    this.layers[i].draw(c, cam);\n                }\n            }.bind(this),\n            function fast(c, cam) {\n                const strategy = this.cache.needsUpdate(cam);\n                console.log(\"STRAT\", strategy)\n                this.cache.copyToDisplay(c, cam);\n            }.bind(this)\n        ];\n\n    }\n\n    processTilesets(tilesets) {\n        for (let i = 0; i < tilesets.length; i++) {\n            let tileset = tilesets[i];\n            if (tileset.tilecount < 1) continue;\n\n            this.lastgid.push((tileset.firstgid + tileset.tilecount) - 1);\n            this.tiles.push(new Tile(tileset, this.basePath, this.renderer));\n        }\n    }\n\n    /**\n     * \n     * @param {Array<any>} c \n     */\n    collisionLayerChildren(c) {\n\n\n        this.collisionObjects = c\n\n    }\n\n\n    initializeFullMapBuffer(camera) {\n        if (!this.preRenderEntireMap) return;\n\n        console.log('[Tiled] Initializing full-map pre-render...');\n\n        // Calculate full map bounds in world space\n        let mapWidth = this.json.width * this.json.tilewidth;\n        let mapHeight = this.json.height * this.json.tileheight;\n\n        // Account for layer offsets\n        for (const layer of this.layers) {\n            if (layer.worldPosition) {\n                const layerRightEdge = layer.worldPosition.x + (layer.layer?.width || 0) * this.json.tilewidth;\n                const layerBottomEdge = layer.worldPosition.y + (layer.layer?.height || 0) * this.json.tileheight;\n                mapWidth = Math.max(mapWidth, layerRightEdge);\n                mapHeight = Math.max(mapHeight, layerBottomEdge);\n            }\n        }\n\n        this.fullMapBuffer = new FullMapPreRender(Math.ceil(mapWidth), Math.ceil(mapHeight));\n\n        // Render all layers to the full-map buffer\n        this.fullMapBuffer.render((buffer) => {\n            const fakeCamera = {\n                worldPosition: { x: 0, y: 0 },\n                zoom: 1,\n                worldToScreen: (wx, wy) => ({ x: wx, y: wy }),\n                getVisibleBounds: () => ({\n                    left: 0,\n                    top: 0,\n                    right: mapWidth,\n                    bottom: mapHeight,\n                    width: mapWidth,\n                    height: mapHeight\n                }),\n                cullingEnabled: true,\n                frustum: { left: 0, right: mapWidth, top: 0, bottom: mapHeight }\n            };\n\n            for (let i = 0; i < this.layers.length; i++) {\n                this.layers[i].draw(buffer, fakeCamera);\n            }\n        });\n\n        console.log(`[Tiled] Full-map buffer rendered: ${mapWidth}x${mapHeight}`);\n    }\n\n    initializeChunkedRender(camera) {\n        if (!this.useChunkedRender) return;\n\n        console.log('[Tiled] Initializing chunked pre-render...');\n\n        // Calculate full map bounds in world space\n        let mapWidth = this.json.width * this.json.tilewidth;\n        let mapHeight = this.json.height * this.json.tileheight;\n\n        // Account for layer offsets\n        for (const layer of this.layers) {\n            if (layer.worldPosition) {\n                const layerRightEdge = layer.worldPosition.x + (layer.layer?.width || 0) * this.json.tilewidth;\n                const layerBottomEdge = layer.worldPosition.y + (layer.layer?.height || 0) * this.json.tileheight;\n                mapWidth = Math.max(mapWidth, layerRightEdge);\n                mapHeight = Math.max(mapHeight, layerBottomEdge);\n            }\n        }\n\n        this.chunkedBuffer = new ChunkedPreRender(Math.ceil(mapWidth), Math.ceil(mapHeight), this.chunkSize);\n\n        // Register render callback for all layers\n        this.chunkedBuffer.onRenderChunk((buffer, region) => {\n            const fakeCamera = {\n                worldPosition: {\n                    x: region.x + region.width / 2,\n                    y: region.y + region.height / 2\n                },\n                zoom: 1,\n                worldToScreen: (wx, wy) => ({ \n                    x: wx - region.x, \n                    y: wy - region.y \n                }),\n                getVisibleBounds: () => ({\n                    left: region.x,\n                    top: region.y,\n                    right: region.x + region.width,\n                    bottom: region.y + region.height,\n                    width: region.width,\n                    height: region.height\n                }),\n                cullingEnabled: true,\n                frustum: {\n                    left: region.x,\n                    right: region.x + region.width,\n                    top: region.y,\n                    bottom: region.y + region.height\n                }\n            };\n\n            for (let i = 0; i < this.layers.length; i++) {\n                this.layers[i].draw(buffer, fakeCamera);\n            }\n        });\n\n        // Pre-render all chunks\n        this.chunkedBuffer.renderAllChunks();\n        console.log(`[Tiled] Chunked render initialized: ${mapWidth}x${mapHeight} into ${this.chunkSize}x${this.chunkSize} chunks`);\n    }\n\n    initializeCache(viewportWidth, viewportHeight, camera) {\n        if (!this.useCache) return;\n\n        console.log('[Tiled] Initializing offscreen cache...');\n\n        // Create cache\n        this.cache = new OffscreenTilemapCache(viewportWidth, viewportHeight);\n\n        // Set cache to cover camera view with margin\n        const bounds = camera.getVisibleBounds();\n        const halfViewW = viewportWidth / 2;\n        const halfViewH = viewportHeight / 2;\n\n        // Center cache on camera\n        // this.cache.setWorldRegion(\n        //     camera.worldPosition.x - halfViewW - this.cache.marginPixels.x,\n        //     camera.worldPosition.y - halfViewH - this.cache.marginPixels.y\n        // );\n        this.cache.setWorldRegion(bounds.left, bounds.top);\n\n\n        // Render all layers to cache\n        this._renderToCache();\n\n        this.cacheInitialized = true;\n        this.cache.fullRedraws++;\n\n        console.log('[Tiled] Cache initialized and rendered');\n    }\n\n\n    _renderToCache() {\n        tiledperf.start(\"_renderToCache\");\n        if (!this.cache) {\n            tiledperf.end(\"_renderToCache\");\n            return;\n        }\n\n\n        this.cache.clear();\n\n        const fakeCamera = {\n            worldPosition: {\n                x: this.cache.worldX + this.cache.cacheWidth / 2,\n                y: this.cache.worldY + this.cache.cacheHeight / 2\n            },\n            zoom: 1,\n            worldToScreen: (wx, wy) => {\n                return {\n                    x: wx - this.cache.worldX,\n                    y: wy - this.cache.worldY\n                };\n            },\n            getVisibleBounds: () => this.cache.getWorldBounds(),\n            cullingEnabled: true,\n            frustum: {\n                left: this.cache.worldX,\n                right: this.cache.worldX + this.cache.cacheWidth,\n                top: this.cache.worldY,\n                bottom: this.cache.worldY + this.cache.cacheHeight\n            }\n        };\n\n        // draw all layers to cache buffer\n        for (let i = 0; i < this.layers.length; i++) {\n            this.layers[i].draw(this.cache.buffer, fakeCamera);\n        }\n        tiledperf.end(\"_renderToCache\");\n    }\n\n\n\n    _ready() {\n        for (let i = 0; i < this.collisionObjects.length; i++)\n            this.parent.addChild(this.collisionObjects[i])\n        console.log(\"added \", this.collisionObjects.length, \" bodies\")\n    }\n    processLayers(layers) {\n        for (let i = 0; i < layers.length; i++) {\n            const layer = layers[i];\n            if (!layer.visible) continue;\n\n            // determine if layer should be opaque\n            const options = this.opaque.includes(layer.name)\n                ? { ...this.opts, assumeOpaque: true }\n                : { ...this.opts };\n\n\n            const layerInstance = LayerFactory.create(layer, this.lastgid, this.tiles, options, this.collisionLayerChildren.bind(this));\n            this.layers.push(layerInstance);\n        }\n    }\n\n    printDebug() {\n        console.log(\"=== TILED MAP DEBUG ===\");\n        console.log(`Tilesets: ${this.lastgid.length}`);\n        for (let i = 0; i < this.lastgid.length; i++) {\n            console.log(`  Tileset ${i}: lastgid=${this.lastgid[i]}, name=${this.tiles[i].name}`);\n        }\n\n        console.log(`\\nLayers: ${this.layers.length}`);\n        for (const layer of this.layers) {\n            layer.printDebug();\n        }\n    }\n\n\n\n    _renderRegionToCache(cacheRegion, worldRegion) {\n        tiledperf.start(\"_renderRegionToCache\");\n        if (!this.cache) {\n            tiledperf.end(\"_renderRegionToCache\");\n            return;\n        }\n\n        // Create fake camera for this region\n        const fakeCamera = {\n            worldPosition: {\n                x: this.cache.worldX + this.cache.cacheWidth / 2,\n                y: this.cache.worldY + this.cache.cacheHeight / 2\n            },\n            zoom: 1,\n            worldToScreen: (wx, wy) => {\n                return {\n                    x: wx - this.cache.worldX,\n                    y: wy - this.cache.worldY\n                };\n            },\n            getVisibleBounds: () => ({\n                left: worldRegion.x,\n                top: worldRegion.y,\n                right: worldRegion.x + worldRegion.width,\n                bottom: worldRegion.y + worldRegion.height,\n                width: worldRegion.width,\n                height: worldRegion.height\n            }),\n            cullingEnabled: true,\n            frustum: {\n                left: worldRegion.x,\n                right: worldRegion.x + worldRegion.width,\n                top: worldRegion.y,\n                bottom: worldRegion.y + worldRegion.height\n            }\n        };\n\n        // Draw each layer's region\n        for (let i = 0; i < this.layers.length; i++) {\n            this.layers[i].draw(this.cache.buffer, fakeCamera, cacheRegion, worldRegion);\n        }\n        tiledperf.end(\"_renderRegionToCache\");\n    }\n\n    _draw(canvas, camera) {\n        tiledperf.start(\"_draw\");\n        \n        // Strategy 3: Chunked pre-render\n        if (this.useChunkedRender && !this.chunkedBuffer) {\n            this.initializeChunkedRender(camera);\n        }\n\n        if (this.useChunkedRender && this.chunkedBuffer) {\n            tiledperf.start(\"chunkedBuffer_copy\");\n            this.chunkedBuffer.copyToDisplay(canvas, camera);\n            tiledperf.end(\"chunkedBuffer_copy\");\n            tiledperf.end(\"_draw\");\n            return;\n        }\n\n        // Strategy 2: Full-map pre-render\n        if (this.preRenderEntireMap && !this.fullMapBuffer) {\n            this.initializeFullMapBuffer(camera);\n        }\n\n        if (this.preRenderEntireMap && this.fullMapBuffer) {\n            tiledperf.start(\"fullMapBuffer_copy\");\n            this.fullMapBuffer.copyToDisplay(canvas, camera);\n            tiledperf.end(\"fullMapBuffer_copy\");\n            tiledperf.end(\"_draw\");\n            return;\n        }\n\n        // Strategy 1: Incremental offscreen cache\n        // First frame: initialize\n        if (this.useCache && !this.cacheInitialized) {\n            this.initializeCache(canvas.width, canvas.height, camera);\n        }\n\n        if (this.useCache && this.cache) {\n            // Determine what kind of update we need\n            const strategy = this.cache.needsUpdate(camera);\n\n            switch (strategy.type) {\n                case 'NONE':\n                    tiledperf.start(\"cacheUpdate_NONE\");\n                    // Camera didn't move - just copy from cache\n                    this.cache.skippedUpdates++;\n                    tiledperf.end(\"cacheUpdate_NONE\");\n                    break;\n\n                case 'INCREMENTAL':\n                    tiledperf.start(\"cacheUpdate_INCREMENTAL\");\n                    // Small move - incremental update (Chapter 4 will implement this)\n                    // For now, treat as full redraw\n                    // console.log(`[Tiled] Incremental update needed (${strategy.reason}), delta: ${strategy.delta.x.toFixed(1)}, ${strategy.delta.y.toFixed(1)}`);\n                    // this._fullCacheRedraw(camera);\n                    this.cache.incrementalUpdates++;\n                               this.cache.incrementalUpdate(\n                        strategy.delta,\n                        (cacheRegion, worldRegion) => {\n                            this._renderRegionToCache(cacheRegion, worldRegion);\n                        }\n                    );\n                    tiledperf.end(\"cacheUpdate_INCREMENTAL\");\n                    break;\n\n                case 'FULL_REDRAW':\n                    tiledperf.start(\"cacheUpdate_FULL_REDRAW\");\n                    // Teleport or zoom - need full redraw\n                    console.log(`[Tiled] Full redraw needed (${strategy.reason})`);\n                    this._fullCacheRedraw(camera);\n                    this.cache.fullRedraws++;\n                    tiledperf.end(\"cacheUpdate_FULL_REDRAW\");\n                    break;\n            }\n\n            // Always copy cache to display\n            tiledperf.start(\"copyToDisplay\");\n            this.cache.copyToDisplay(canvas, camera);\n            tiledperf.end(\"copyToDisplay\");\n\n            // Commit frame\n            this.cache.commitFrame();\n\n        } else {\n            // Fallback: no cache\n            tiledperf.start(\"directLayerDraw\");\n            for (let i = 0; i < this.layers.length; i++) {\n                this.layers[i].draw(canvas, camera);\n            }\n            tiledperf.end(\"directLayerDraw\");\n        }\n        tiledperf.end(\"_draw\");\n    }\n\n    // Full cache redraw - recenter and render\n    _fullCacheRedraw(camera) {\n        tiledperf.start(\"_fullCacheRedraw\");\n        const halfViewW = this.cache.viewportWidth / 2;\n        const halfViewH = this.cache.viewportHeight / 2;\n\n        const bounds = camera.getVisibleBounds()\n        // Recenter cache on camera\n        // this.cache.setWorldRegion(\n        //     camera.worldPosition.x - halfViewW - this.cache.marginPixels.x,\n        //     camera.worldPosition.y - halfViewH - this.cache.marginPixels.y\n        // );\n\n        this.cache.setWorldRegion(bounds.left, bounds.top);\n\n        this._renderToCache();\n        tiledperf.end(\"_fullCacheRedraw\");\n    }\n\n\n    // _draw(canvas, camera) {\n    //     (this.useCache && !this.cacheInitialized) && (\n    //         this.initializeCache(canvas.width, canvas.height, camera),\n    //         this.cache.printStats(),\n    //         this._drawMethods[1] = function fast(c, cam) { this.cache.copyToDisplay(c, cam); }.bind(this) // update after init\n    //     );\n\n    //     const useFast = +(this.useCache && !!this.cache);\n    //     this._drawMethods[useFast](canvas, camera);\n    // }\n    // _draw(canvas, camera) {\n    //     if (this.useCache && !this.cacheInitialized) {\n    //         this.initializeCache(canvas.width, canvas.height, camera);\n    //         this.cache.printStats()\n    //     }\n\n    //     if (this.useCache && this.cache) {\n    //         // Fast path: copy from cache\n    //         this.cache.copyToDisplay(canvas, camera);\n    //     } else {\n    //         // Fallback: direct render (old way)\n    //         // polymorphic draw - each layer handles its own rendering\n    //         for (let i = 0; i < this.layers.length; i++) {\n    //             this.layers[i].draw(canvas, camera);\n    //         }\n    //     }\n\n    // }\n\n    needsCacheUpdate(camera) {\n        if (!this.cache) return false;\n\n        const bounds = this.cache.getWorldBounds();\n        const camX = camera.worldPosition.x;\n        const camY = camera.worldPosition.y;\n\n        // Simple check: is camera center still inside cache bounds?\n        return camX < bounds.left || camX > bounds.right ||\n            camY < bounds.top || camY > bounds.bottom;\n    }\n\n}","import { readFileSync } from 'node:fs';\r\nimport { Node } from '../engine/core.js';\r\n\r\n/**\r\n * EditorDataLoader - loads editor JSON and creates game objects\r\n * \r\n * Usage pattern (similar to your Tiled loader):\r\n * \r\n * const loader = new EditorDataLoader('./editor-data/level.json');\r\n * loader.loadSpawns((spawnData) => {\r\n *   // Create enemy at spawnData.x, spawnData.y\r\n * });\r\n * loader.loadPaths((pathData) => {\r\n *   // Create patrol route from pathData.nodes\r\n * });\r\n */\r\n\r\nexport class EditorDataLoader extends Node {\r\n    constructor(filePath) {\r\n        super('EditorDataLoader');\r\n        try {\r\n              const json = readFileSync(filePath, 'utf8');\r\n        this.data = JSON.parse(json);\r\n            console.log(`[EditorDataLoader] Loaded ${filePath} (version ${this.data.version})`);\r\n        } catch (error) {\r\n                console.log(`[EditorDataLoader] Failed to load ${filePath} error: ${error.message}`);\r\n        }\r\n      \r\n\r\n    \r\n    }\r\n\r\n    getMetadata() {\r\n        return this.data.metadata;\r\n    }\r\n\r\n    getToolData(toolName) {\r\n        return this.data.tools[toolName]?.data || [];\r\n    }\r\n\r\n    /**\r\n     * Load spawn points\r\n     * @param {Function} callback - (spawnData) => void\r\n     */\r\n    loadSpawns(callback) {\r\n        const spawns = this.getToolData('SpawnPointTool');\r\n        console.log(`[EditorDataLoader] Loading ${spawns.length} spawn points`);\r\n\r\n        for (const spawn of spawns) {\r\n            callback(spawn);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Load paths\r\n     * @param {Function} callback - (pathData) => void\r\n     */\r\n    loadPaths(callback) {\r\n        const paths = this.getToolData('PathTool');\r\n        console.log(`[EditorDataLoader] Loading ${paths.length} paths`);\r\n\r\n        for (const path of paths) {\r\n            callback(path);\r\n        }\r\n    }\r\n\r\n\r\n    loadAreas(callback) {\r\n        const areas = this.getToolData('Area2DTool');\r\n        console.log(`[EditorDataLoader] Loading ${areas.length} areas`);\r\n\r\n        for (const area of areas) {\r\n            callback(area);\r\n        }\r\n    }\r\n\r\n\r\n    getAreasByType(type) {\r\n        const areas = this.getToolData('Area2DTool');\r\n        return areas.filter(a => a.type === type);\r\n    }\r\n\r\n\r\n    pointInArea(x, y, type = null) {\r\n        const areas = this.getToolData('Area2DTool');\r\n\r\n        for (const area of areas) {\r\n            if (type && area.type !== type) continue;\r\n\r\n            if (x >= area.x && x <= area.x + area.width &&\r\n                y >= area.y && y <= area.y + area.height) {\r\n                return area;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Helper: get all spawn positions as array\r\n     */\r\n    getSpawnPositions() {\r\n        const spawns = this.getToolData('SpawnPointTool');\r\n        return spawns.map(s => ({ x: s.x, y: s.y }));\r\n    }\r\n\r\n    /**\r\n     * Helper: get path as array of positions\r\n     */\r\n    getPathPositions(pathIndex = 0) {\r\n        const paths = this.getToolData('PathTool');\r\n        if (pathIndex >= paths.length) return [];\r\n\r\n        return paths[pathIndex].nodes.map(n => ({ x: n.x, y: n.y }));\r\n    }\r\n}","/**\n * Editor camera input handler - attached to existing camera via prototype extension\n * `this` refers to the camera instance\n * @param {import('tessera.js').InputMap} inputMap \n * @param {number} delta \n */\nexport function editorCameraHandleInput(inputMap, delta) {\n    if (!inputMap) return;\n\n    const mousePos = inputMap.mousePosition;\n    const mouseDown = inputMap.input.isMouseButtonDown(1);\n    const mouseReleased = !mouseDown && this._editorDragging;\n\n    const wheelDelta = inputMap.mouseWheelDelta;\n    if (wheelDelta !== 0) {\n        const zoomFactor = 1.0 + (wheelDelta > 0 ? this._editorZoomSpeed : -this._editorZoomSpeed);\n        const newZoom = this.zoom * zoomFactor;\n        \n        if (newZoom >= this._editorMinZoom && newZoom <= this._editorMaxZoom) {\n            this.zoomTo(newZoom, mousePos.x, mousePos.y);\n        }\n    }\n    // console.log(this._editorDragging)\n\n    if (mouseDown && inputMap.input.isKeyDown('Control') && !this._editorDragging) {\n        this._editorDragging = true;\n        this._editorDragStartMouse.x = mousePos.x;\n        this._editorDragStartMouse.y = mousePos.y;\n        this._editorDragStartCameraPos.x = this.position.x;\n        this._editorDragStartCameraPos.y = this.position.y;\n    } else if (mouseReleased) {\n        this._editorDragging = false;\n    } else if (this._editorDragging) {\n        const dx = (mousePos.x - this._editorDragStartMouse.x) / this.zoom;\n        const dy = (mousePos.y - this._editorDragStartMouse.y) / this.zoom;\n        \n        this.position.x = this._editorDragStartCameraPos.x - dx;\n        this.position.y = this._editorDragStartCameraPos.y - dy;\n        console.log(\"dragging: \", this.position)\n        this.markDirty();\n    }\n\n    const keyPanSpeed = 300 * delta / this.zoom;\n    let moved = false;\n    \n    if (inputMap.isActionActive('move_left')) {\n        this.position.x -= keyPanSpeed;\n        moved = true;\n    }\n    if (inputMap.isActionActive('move_right')) {\n        this.position.x += keyPanSpeed;\n        moved = true;\n    }\n    if (inputMap.isActionActive('move_up')) {\n        this.position.y -= keyPanSpeed;\n        moved = true;\n    }\n    if (inputMap.isActionActive('move_down')) {\n        this.position.y += keyPanSpeed;\n        moved = true;\n    }\n    \n    if (moved) {\n        this.markDirty();\n    }\n}","export class ToolManager {\n    constructor(scene) {\n        this.scene = scene;\n        this.tools = new Map();\n        this.activeTool = null;\n        this.uiBounds = null; // Bounding box of UI elements to ignore\n    }\n\n    updateToolData(data){\n        this.activeTool.updateData(data)\n    }\n\n    /**\n     * Set the UI bounding box - clicks within this area will be ignored by tools\n     * @param {Object} bounds - { x, y, w, h }\n     */\n    setUIBounds(bounds) {\n        this.uiBounds = bounds;\n        // Also update all registered tools with the UI bounds\n        for (const [name, tool] of this.tools) {\n            tool.setUIBounds(bounds);\n        }\n    }\n\n    registerTool(name, tool) {\n        this.tools.set(name, tool);\n        // Add tool to scene so it renders\n        this.scene.addChild(tool);\n        console.log(`[ToolManager] Registered tool: ${name}`);\n    }\n\n    setActiveTool(name) {\n        // Deactivate current tool\n        if (this.activeTool) {\n            this.activeTool.deactivate();\n        }\n\n        // Activate new tool\n        const tool = this.tools.get(name);\n        if (!tool) {\n            console.warn(`[ToolManager] Tool not found: ${name}`);\n            this.activeTool = null;\n            return;\n        }\n\n        this.activeTool = tool;\n        this.activeTool.activate();\n    }\n\n    handleInput(inputMap, delta) {\n        if (!this.activeTool) return;\n        \n        // Check if click is within UI bounds - if so, ignore\n        if (this.uiBounds && inputMap.mousePosition) {\n            const mouseX = inputMap.mousePosition.x;\n            const mouseY = inputMap.mousePosition.y;\n            \n            const inUI = mouseX >= this.uiBounds.x && \n                         mouseX < this.uiBounds.x + this.uiBounds.w &&\n                         mouseY >= this.uiBounds.y && \n                         mouseY < this.uiBounds.y + this.uiBounds.h;\n            \n            if (inUI) {\n                return; // Ignore input in UI area\n            }\n        }\n        \n        this.activeTool.handleInput(inputMap, delta);\n    }\n\n    exportAllData() {\n        const allData = {};\n        for (const [name, tool] of this.tools) {\n            allData[name] = tool.exportData();\n        }\n        return allData;\n    }\n\n    importAllData(data) {\n        for (const [name, toolData] of Object.entries(data)) {\n            const tool = this.tools.get(toolData.tool);\n            if (tool) {\n                tool.importData(toolData.data);\n            }\n        }\n    }\n}","// Base theme structure\nexport class Theme {\n    constructor(name, colors, sizes, spacing) {\n        this.name = name;\n        this.colors = colors;\n        this.sizes = sizes;\n        this.spacing = spacing;\n    }\n    \n    // Get color with fallback chain\n    getColor(path, fallback = null) {\n        const parts = path.split('.');\n        let current = this.colors;\n        \n        for (const part of parts) {\n            if (!current[part]) return fallback;\n            current = current[part];\n        }\n        \n        return current;\n    }\n}\n\n// Dark theme (your current default)\nexport const THEME_DARK = new Theme(\n    'dark',\n    {\n        background: {\n            primary: { r: 45, g: 45, b: 55, a: 255 },\n            secondary: { r: 50, g: 50, b: 60, a: 255 },\n            tertiary: { r: 60, g: 60, b: 70, a: 255 }\n        },\n        \n        button: {\n            normal: { r: 60, g: 60, b: 70, a: 255 },\n            hover: { r: 70, g: 70, b: 85, a: 255 },\n            active: { r: 50, g: 50, b: 60, a: 255 },\n            disabled: { r: 50, g: 50, b: 55, a: 255 }\n        },\n        \n        input: {\n            normal: { r: 55, g: 55, b: 65, a: 255 },\n            hover: { r: 60, g: 60, b: 70, a: 255 },\n            focus: { r: 50, g: 50, b: 60, a: 255 },\n            selection: { r: 80, g: 120, b: 200, a: 120 }\n        },\n        \n        border: {\n            normal: { r: 100, g: 100, b: 120, a: 255 },\n            hover: { r: 140, g: 140, b: 160, a: 255 },\n            focus: { r: 100, g: 150, b: 220, a: 255 },\n            active: { r: 120, g: 170, b: 240, a: 255 }\n        },\n        \n        text: {\n            primary: { r: 220, g: 220, b: 230, a: 255 },\n            secondary: { r: 180, g: 180, b: 190, a: 255 },\n            disabled: { r: 120, g: 120, b: 130, a: 255 },\n            placeholder: { r: 140, g: 140, b: 150, a: 255 }\n        },\n        \n        scrollbar: {\n            track: { r: 40, g: 40, b: 50, a: 100 },\n            thumb: { r: 100, g: 100, b: 120, a: 200 }\n        },\n        \n        // Semantic colors\n        accent: { r: 100, g: 150, b: 220, a: 255 },\n        success: { r: 80, g: 180, b: 100, a: 255 },\n        warning: { r: 220, g: 160, b: 60, a: 255 },\n        danger: { r: 200, g: 70, b: 70, a: 255 }\n    },\n    \n    {\n        button: {\n            height: 32,\n            minWidth: 80,\n            borderRadius: 4\n        },\n        input: {\n            height: 28,\n            borderRadius: 3\n        },\n        checkbox: {\n            size: 20\n        }\n    },\n    \n    {\n        padding: {\n            xs: 2,\n            sm: 4,\n            md: 8,\n            lg: 12,\n            xl: 16\n        },\n        gap: {\n            xs: 2,\n            sm: 4,\n            md: 8,\n            lg: 16,\n            xl: 24\n        },\n        hitExpand: {\n            none: 0,\n            sm: 2,\n            md: 4,\n            lg: 8\n        }\n    }\n);\n\n// Light theme\nexport const THEME_LIGHT = new Theme(\n    'light',\n    {\n        background: {\n            primary: { r: 250, g: 250, b: 252, a: 255 },\n            secondary: { r: 245, g: 245, b: 248, a: 255 },\n            tertiary: { r: 235, g: 235, b: 240, a: 255 }\n        },\n        \n        button: {\n            normal: { r: 240, g: 240, b: 245, a: 255 },\n            hover: { r: 230, g: 230, b: 240, a: 255 },\n            active: { r: 220, g: 220, b: 235, a: 255 },\n            disabled: { r: 245, g: 245, b: 248, a: 255 }\n        },\n        \n        input: {\n            normal: { r: 255, g: 255, b: 255, a: 255 },\n            hover: { r: 250, g: 250, b: 252, a: 255 },\n            focus: { r: 255, g: 255, b: 255, a: 255 },\n            selection: { r: 100, g: 150, b: 220, a: 100 }\n        },\n        \n        border: {\n            normal: { r: 200, g: 200, b: 210, a: 255 },\n            hover: { r: 160, g: 160, b: 180, a: 255 },\n            focus: { r: 100, g: 150, b: 220, a: 255 },\n            active: { r: 80, g: 130, b: 200, a: 255 }\n        },\n        \n        text: {\n            primary: { r: 30, g: 30, b: 40, a: 255 },\n            secondary: { r: 80, g: 80, b: 90, a: 255 },\n            disabled: { r: 160, g: 160, b: 170, a: 255 },\n            placeholder: { r: 140, g: 140, b: 150, a: 255 }\n        },\n        \n        scrollbar: {\n            track: { r: 230, g: 230, b: 235, a: 150 },\n            thumb: { r: 180, g: 180, b: 190, a: 200 }\n        },\n        \n        accent: { r: 100, g: 150, b: 220, a: 255 },\n        success: { r: 60, g: 160, b: 80, a: 255 },\n        warning: { r: 200, g: 140, b: 40, a: 255 },\n        danger: { r: 220, g: 60, b: 60, a: 255 }\n    },\n    \n    THEME_DARK.sizes,  // Same sizes\n    THEME_DARK.spacing  // Same spacing\n);\n","import { InputMap, PixelBuffer } from \"tessera.js\";\nimport { THEME_DARK } from \"./theme.js\";\n\nexport class IMGUIContext {\n    /**\n     * \n     * @param {PixelBuffer} canvas \n     * @param {InputMap} inputMap \n     * @param {Theme} theme\n     */\n    constructor(canvas, inputMap, theme = THEME_DARK) {\n        this.canvas = canvas;\n        this.input = inputMap;\n        this.input_ = null;\n        \n        this.theme = theme;  // Active theme\n\n        this.mouseX = 0;\n        this.mouseY = 0;\n        this.mouseDown = false;\n        this.mousePressed = false;  // true only on the down frame\n        this.mouseReleased = false; // true only on the up frame\n        \n\n        this.hotItem = 0;      // widget under mouse\n        this.activeItem = 0;   // widget being dragged/interacted with\n        this.nextHotItem = 0;  // hot candidate for next frame\n        \n        this.focusedItem = 0;\n        this.keyboardString = \"\";\n        \n        // Animation state pool\n        this.animStates = new Map();  // id -> { hoverT, activeT, focusT }\n        this.lastFrameTime = Date.now();\n        this.deltaTime = 0;\n        \n        this.mouseWheelDelta = 0;  // wheel scroll this frame\n        \n        this.effects = [];  // Active visual effects\n        this.soundQueue = [];  // Sounds to play this frame\n        this.hapticQueue = [];  // Haptic events to trigger\n    }\n    \n    // Switch theme at runtime\n    setTheme(theme) {\n        this.theme = theme;\n    }\n    \n    // Add an effect to the pool\n    spawnEffect(effect) {\n        this.effects.push(effect);\n    }\n    \n    // Queue a sound event (consumer reads this)\n    playSound(soundId, volume = 1.0) {\n        this.soundQueue.push({ soundId, volume });\n    }\n    \n    // Queue a haptic event\n    triggerHaptic(intensity = 0.5, duration = 50) {\n        this.hapticQueue.push({ intensity, duration });\n    }\n    \n    updateEffects() {\n        const dt = this.deltaTime;\n        \n        // Update all effects, remove dead ones\n        for (let i = this.effects.length - 1; i >= 0; i--) {\n            const effect = this.effects[i];\n            effect.update(dt);\n            \n            if (effect.isDead()) {\n                this.effects.splice(i, 1);\n            }\n        }\n    }\n    \n    renderEffects() {\n        for (const effect of this.effects) {\n            effect.render(this.canvas);\n        }\n    }\n    \n    beginFrame() {\n        const now = Date.now();\n        this.deltaTime = (now - this.lastFrameTime) / 1000; // seconds\n        this.lastFrameTime = now;\n        \n        const mousePos = this.input.mousePosition;\n        this.mouseX = mousePos.x;\n        this.mouseY = mousePos.y;\n        \n        this.mousePressed = this.input.isMousePressed(\"primary\");\n        this.mouseReleased = this.input.IsMouseActionReleased(\"primary\");\n        this.mouseDown = this.input.isMouseActionActive(\"primary\");\n        \n        // Update hot item for this frame\n        this.hotItem = this.nextHotItem;\n        this.nextHotItem = 0;\n        \n        // Extract wheel delta from event buffer\n        this.mouseWheelDelta = this._extractWheelDelta();\n        \n        // Clear frame queues\n        this.soundQueue = [];\n        this.hapticQueue = [];\n    }\n    \n    _extractWheelDelta() {\n        if (!this.input_?.buffer) return 0;\n        \n        // Look for wheel events in recent buffer\n        const recentEvents = this.input_.buffer.buffer.slice(0, 10);\n        let totalDelta = 0;\n        \n        for (const event of recentEvents) {\n            if (event.type === 'wheel') {\n                // Normalize wheel delta (different browsers/OS report different scales)\n                totalDelta += Math.sign(event.deltaY) * 3;  // 3 lines per notch\n            }\n        }\n        \n        // Clear processed wheel events\n        if (totalDelta !== 0) {\n            this.input_.buffer.clearRecent(1);\n        }\n        \n        return totalDelta;\n    }\n    \n\n    endFrame() {\n        // Clear active item after widgets have processed the release\n        if (!this.mouseDown) {\n            this.activeItem = 0;\n        }\n        \n        // Decay unused animation states to save memory\n        const activeIds = new Set([this.hotItem, this.activeItem, this.focusedItem]);\n        for (const [id, state] of this.animStates) {\n            if (!activeIds.has(id) && state.hoverT === 0 && state.activeT === 0 && state.focusT === 0) {\n                this.animStates.delete(id);\n            }\n        }\n        \n        // Update and render effects\n        this.updateEffects();\n        this.renderEffects();\n    }\n    \n    // generate unique ID from string\n    // uses FNV-1a hash - fast and good enough for UI IDs\n    hash(str) {\n        let hash = 2166136261;\n        for (let i = 0; i < str.length; i++) {\n            hash ^= str.charCodeAt(i);\n            hash = Math.imul(hash, 16777619);\n        }\n        return hash >>> 0; // unsigned 32-bit\n    }\n    \n\n    checkHot(id, x, y, w, h) {\n        if (this.activeItem !== 0 && this.activeItem !== id) {\n            return false; // Another widget is active\n        }\n        \n        if (this.mouseX >= x && this.mouseX < x + w &&\n            this.mouseY >= y && this.mouseY < y + h) {\n            this.nextHotItem = id;\n            // console.log(\"hot \", id)\n            return true;\n        }\n        return false;\n    }\n    \n\n    isHot(id) {\n        return this.hotItem === id;\n    }\n    \n\n    isActive(id) {\n        return this.activeItem === id;\n    }\n    \n\n    setActive(id) {\n        this.activeItem = id;\n        console.log(\"item became active: \", id)\n    }\n    \n\n    hasFocus(id) {\n        return this.focusedItem === id;\n    }\n    \n\n    setFocus(id) {\n        this.focusedItem = id;\n    }\n    \n    // Get or create animation state for a widget\n    getAnimState(id) {\n        if (!this.animStates.has(id)) {\n            this.animStates.set(id, {\n                hoverT: 0,   // 0-1, hover transition\n                activeT: 0,  // 0-1, pressed transition\n                focusT: 0    // 0-1, focus transition\n            });\n        }\n        return this.animStates.get(id);\n    }\n    \n    // Update animation state based on current widget state\n    updateAnimState(id, isHot, isActive, isFocused) {\n        const state = this.getAnimState(id);\n        const speed = 8; // transitions per second (higher = faster)\n        const dt = this.deltaTime * speed;\n        \n        // Lerp toward target state\n        state.hoverT = lerp(state.hoverT, isHot ? 1 : 0, dt);\n        state.activeT = lerp(state.activeT, isActive ? 1 : 0, dt);\n        state.focusT = lerp(state.focusT, isFocused ? 1 : 0, dt);\n        \n        return state;\n    }\n}\n\n// Smooth lerp (clamped to prevent overshoot)\nexport function lerp(a, b, t) {\n    const result = a + (b - a) * t;\n    return t >= 1 ? b : (t <= 0 ? a : result);\n}\n\nexport function inBounds(px, py, x, y, w, h) {\n    return px >= x && px < x + w && py >= y && py < y + h;\n}","import { ShapeDrawer, PolygonDrawer } from 'tessera.js';\n\n// Base effect class\nexport class Effect {\n    constructor(lifetime) {\n        this.age = 0;\n        this.lifetime = lifetime;\n    }\n    \n    update(dt) {\n        this.age += dt;\n    }\n    \n    isDead() {\n        return this.age >= this.lifetime;\n    }\n    \n    // Progress from 0 to 1\n    get progress() {\n        return Math.min(1, this.age / this.lifetime);\n    }\n    \n    render(canvas) {\n        // Override in subclasses\n    }\n}\n\n// Ripple that expands and fades\nexport class RippleEffect extends Effect {\n    constructor(x, y, maxRadius, color) {\n        super(0.4);  // 400ms lifetime\n        this.x = x;\n        this.y = y;\n        this.maxRadius = maxRadius;\n        this.color = color;\n    }\n    \n    render(canvas) {\n        const t = this.progress;\n        \n        // Ease out cubic for smooth deceleration\n        const eased = 1 - Math.pow(1 - t, 3);\n        \n        const radius = this.maxRadius * eased;\n        const alpha = Math.round(this.color.a * (1 - t));  // Fade out\n        \n        // Draw circle using polygon approximation\n        const segments = 32;\n        const points = [];\n        \n        for (let i = 0; i < segments; i++) {\n            const angle = (i / segments) * Math.PI * 2;\n            points.push({\n                x: this.x + Math.cos(angle) * radius,\n                y: this.y + Math.sin(angle) * radius\n            });\n        }\n        \n        PolygonDrawer.fillPolygon(\n            canvas, points,\n            this.color.r, this.color.g, this.color.b, alpha\n        );\n    }\n}\n\n// Scale bounce effect (modifies widget scale)\nexport class ScaleBounce {\n    constructor() {\n        this.scale = 1.0;\n        this.targetScale = 1.0;\n        this.velocity = 0;\n    }\n    \n    // Call this when button is pressed\n    press() {\n        this.targetScale = 0.95;  // Squish to 95%\n    }\n    \n    // Call this when button is released\n    release() {\n        this.targetScale = 1.0;\n    }\n    \n    update(dt) {\n        // Spring physics\n        const stiffness = 400;\n        const damping = 20;\n        \n        const force = (this.targetScale - this.scale) * stiffness;\n        const dampingForce = -this.velocity * damping;\n        \n        this.velocity += (force + dampingForce) * dt;\n        this.scale += this.velocity * dt;\n        \n        // Clamp to prevent overshoot madness\n        this.scale = Math.max(0.8, Math.min(1.15, this.scale));\n    }\n    \n    getValue() {\n        return this.scale;\n    }\n}\n\n// Particle burst (for checkboxes, toggles)\nexport class ParticleBurst extends Effect {\n    constructor(x, y, count, color) {\n        super(0.6);  // 600ms\n        this.x = x;\n        this.y = y;\n        this.particles = [];\n        \n        // Generate particles with random velocities\n        for (let i = 0; i < count; i++) {\n            const angle = Math.random() * Math.PI * 2;\n            const speed = 50 + Math.random() * 100;  // pixels per second\n            \n            this.particles.push({\n                x: x,\n                y: y,\n                vx: Math.cos(angle) * speed,\n                vy: Math.sin(angle) * speed,\n                size: 2 + Math.random() * 3,\n                rotation: Math.random() * Math.PI * 2,\n                rotationSpeed: (Math.random() - 0.5) * 10\n            });\n        }\n        \n        this.color = color;\n    }\n    \n    update(dt) {\n        super.update(dt);\n        \n        const gravity = 200;  // pixels per second squared\n        \n        for (const p of this.particles) {\n            p.vx *= 0.95;  // Air resistance\n            p.vy += gravity * dt;\n            \n            p.x += p.vx * dt;\n            p.y += p.vy * dt;\n            p.rotation += p.rotationSpeed * dt;\n        }\n    }\n    \n    render(canvas) {\n        const t = this.progress;\n        const alpha = Math.round(this.color.a * (1 - t));\n        \n        for (const p of this.particles) {\n            // Draw rotated square\n            const halfSize = p.size / 2;\n            const cos = Math.cos(p.rotation);\n            const sin = Math.sin(p.rotation);\n            \n            const points = [\n                { x: p.x + cos * halfSize - sin * halfSize, y: p.y + sin * halfSize + cos * halfSize },\n                { x: p.x - cos * halfSize - sin * halfSize, y: p.y - sin * halfSize + cos * halfSize },\n                { x: p.x - cos * halfSize + sin * halfSize, y: p.y - sin * halfSize - cos * halfSize },\n                { x: p.x + cos * halfSize + sin * halfSize, y: p.y + sin * halfSize - cos * halfSize }\n            ];\n            \n            PolygonDrawer.fillPolygon(\n                canvas, points,\n                this.color.r, this.color.g, this.color.b, alpha\n            );\n        }\n    }\n}\n\n// Pulse ring (success/error feedback)\nexport class PulseRing extends Effect {\n    constructor(x, y, radius, color, thickness = 3) {\n        super(0.5);\n        this.x = x;\n        this.y = y;\n        this.radius = radius;\n        this.color = color;\n        this.thickness = thickness;\n    }\n    \n    render(canvas) {\n        const t = this.progress;\n        const eased = 1 - Math.pow(1 - t, 2);\n        \n        const currentRadius = this.radius + eased * 20;  // Expand 20px\n        const alpha = Math.round(this.color.a * (1 - t));\n        \n        // Draw ring using stroke polygon\n        const segments = 32;\n        const points = [];\n        \n        for (let i = 0; i < segments; i++) {\n            const angle = (i / segments) * Math.PI * 2;\n            points.push({\n                x: this.x + Math.cos(angle) * currentRadius,\n                y: this.y + Math.sin(angle) * currentRadius\n            });\n        }\n        \n        PolygonDrawer.strokePolygon(\n            canvas, points, this.thickness,\n            this.color.r, this.color.g, this.color.b, alpha\n        );\n    }\n}\n","// 8px is the magic number in UI design, it's divisible, scalable, and feels natural\nexport const UI = {\n    //  padding (inner spacing)\n    PADDING: {\n        SMALL: 4,\n        MEDIUM: 8,\n        LARGE: 12\n    },\n    \n    // Hit box expansion (makes clickable area bigger than visual)\n    HIT_EXPANSION: {\n        NONE: 0,\n        SMALL: 2,\n        MEDIUM: 4,\n        LARGE: 8\n    },\n    \n    // Common sizes\n    SIZE: {\n        CHECKBOX: 20,\n        BUTTON_HEIGHT: 32,\n        INPUT_HEIGHT: 28\n    },\n  \n    GAP: {\n        TIGHT: 4,\n        NORMAL: 8,\n        LOOSE: 16\n    },\n    \n    // Animation speeds (higher = faster)\n    ANIM_SPEED: {\n        FAST: 12,\n        NORMAL: 8,\n        SLOW: 4\n    }\n};\n\n// Interpolate between two colors\nexport function lerpColor(c1, c2, t) {\n    return {\n        r: Math.round(c1.r + (c2.r - c1.r) * t),\n        g: Math.round(c1.g + (c2.g - c1.g) * t),\n        b: Math.round(c1.b + (c2.b - c1.b) * t),\n        a: Math.round(c1.a + (c2.a - c1.a) * t)\n    };\n}\n\n// Interpolate between three colors based on two values\nexport function lerpColor3(normal, hover, active, hoverT, activeT) {\n    // First interpolate normal->hover\n    const hoverColor = lerpColor(normal, hover, hoverT);\n    // Then interpolate result->active\n    return lerpColor(hoverColor, active, activeT);\n}\n\n// Easing functions for animations\nexport const Easing = {\n    // No easing\n    linear: t => t,\n    \n    // Quadratic\n    easeInQuad: t => t * t,\n    easeOutQuad: t => t * (2 - t),\n    easeInOutQuad: t => t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t,\n    \n    // Cubic (smoother)\n    easeInCubic: t => t * t * t,\n    easeOutCubic: t => (--t) * t * t + 1,\n    easeInOutCubic: t => t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\n    \n    // Elastic (bouncy)\n    easeOutElastic: t => {\n        const p = 0.3;\n        return Math.pow(2, -10 * t) * Math.sin((t - p / 4) * (2 * Math.PI) / p) + 1;\n    },\n    \n    // Back (overshoot)\n    easeOutBack: t => {\n        const c1 = 1.70158;\n        const c3 = c1 + 1;\n        return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n    }\n};","\nimport { ShapeDrawer, AADrawer, BitmapFont, PolygonDrawer } from \"tessera.js\";\nimport { IMGUIContext } from \"./imgui_context.js\";\nimport { THEME_DARK, THEME_LIGHT } from \"./theme.js\";\nimport { RippleEffect, ScaleBounce, ParticleBurst, PulseRing } from \"./effects.js\";\n\nimport { UI, lerpColor, lerpColor3 } from \"./constants.js\";\n\n\nconst COLORS = {\n    buttonNormal: { r: 60, g: 60, b: 70, a: 255 },\n    buttonHover: { r: 70, g: 70, b: 85, a: 255 },\n    buttonActive: { r: 50, g: 50, b: 60, a: 255 },\n    buttonBorder: { r: 100, g: 100, b: 120, a: 255 },\n    text: { r: 220, g: 220, b: 230, a: 255 },\n    textDisabled: { r: 120, g: 120, b: 130, a: 255 }\n};\n\n/**\n * Button widget - returns true when clicked\n * @param {IMGUIContext} ctx - UI context\n * @param {string} idStr - unique identifier\n * @param {number} x - x position\n * @param {number} y - y position\n * @param {number} w - width\n * @param {number} h - height\n * @param {string} text - button label\n * @param {BitmapFont} font - font for text rendering\n * @returns {boolean} - true if button was clicked this frame\n */\nexport function button(ctx, idStr, x, y, w, h, text, font, config = {}) {\n    const id = ctx.hash(idStr);\n    const theme = ctx.theme;\n\n    const padding = config.padding ?? theme.spacing.padding.md;\n    const hitExpand = config.hitExpand ?? theme.spacing.hitExpand.sm;\n    const enableEffects = config.effects ?? true;  // Can disable effects\n\n    const hitX = x - hitExpand;\n    const hitY = y - hitExpand;\n    const hitW = w + hitExpand * 2;\n    const hitH = h + hitExpand * 2;\n\n    const hovered = ctx.checkHot(id, hitX, hitY, hitW, hitH);\n\n    // Track scale bounce per button\n    const anim = ctx.getAnimState(id);\n    if (!anim.scaleBounce) {\n        anim.scaleBounce = new ScaleBounce();\n    }\n\n    // Press event\n    if (hovered && ctx.mousePressed) {\n        ctx.setActive(id);\n\n        if (enableEffects) {\n            // Spawn ripple at click position\n            const rippleColor = lerpColor(\n                theme.colors.button.hover,\n                { r: 255, g: 255, b: 255, a: 255 },\n                0.3\n            );\n            ctx.spawnEffect(new RippleEffect(ctx.mouseX, ctx.mouseY, w / 2, rippleColor));\n\n            // Trigger haptic\n            ctx.triggerHaptic(0.3, 30);\n\n            // Scale down\n            anim.scaleBounce.press();\n        }\n    }\n\n    const active = ctx.isActive(id);\n    const clicked = active && ctx.mouseReleased && hovered;\n\n    // Release event\n    if (clicked && enableEffects) {\n        // Play sound\n        ctx.playSound('ui_click', 0.5);\n\n        // Scale bounce back\n        anim.scaleBounce.release();\n\n        // Success ring\n        const centerX = x + w / 2;\n        const centerY = y + h / 2;\n        ctx.spawnEffect(new PulseRing(centerX, centerY, Math.min(w, h) / 6, theme.colors.accent));\n    }\n\n    // Update scale animation\n    anim.scaleBounce.update(ctx.deltaTime);\n    const scale = anim.scaleBounce.getValue();\n\n    // Animation state\n    const animState = ctx.updateAnimState(id, hovered, active, false);\n\n    // Colors\n    const normalColor = config.colorNormal ?? theme.colors.button.normal;\n    const hoverColor = config.colorHover ?? theme.colors.button.hover;\n    const activeColor = config.colorActive ?? theme.colors.button.active;\n\n    const bgColor = lerpColor3(normalColor, hoverColor, activeColor, animState.hoverT, animState.activeT);\n\n    // Apply scale transform\n    const scaledW = w * scale;\n    const scaledH = h * scale;\n    const scaledX = x + (w - scaledW) / 2;\n    const scaledY = y + (h - scaledH) / 2;\n\n    // Draw button with scale\n    ShapeDrawer.fillRect(\n        ctx.canvas, scaledX, scaledY, scaledW, scaledH,\n        bgColor.r, bgColor.g, bgColor.b, bgColor.a\n    );\n\n    // Border\n    const borderNormal = config.borderNormal ?? theme.colors.border.normal;\n    const borderHover = config.borderHover ?? theme.colors.border.hover;\n    const borderColor = lerpColor(borderNormal, borderHover, animState.hoverT);\n\n    ShapeDrawer.strokeRect(\n        ctx.canvas, scaledX, scaledY, scaledW, scaledH, 1,\n        borderColor.r, borderColor.g, borderColor.b, borderColor.a\n    );\n\n    // Text\n    if (text && font) {\n        const textMetrics = font.measureText(text);\n        const contentW = scaledW - padding * 2;\n        const contentH = scaledH - padding * 2;\n        const pressOffset = Math.round(animState.activeT);\n\n        const textX = scaledX + padding + (contentW - textMetrics.width) / 2;\n        const textY = scaledY + padding + (contentH - textMetrics.height) / 2 + pressOffset;\n\n        const textColor = config.colorText ?? theme.colors.text.primary;\n\n        font.drawText(ctx.canvas, text, textX, textY, textColor, 0.7);\n    }\n\n    return clicked;\n}\n\n/**\n * Label widget - just displays text\n * @param {IMGUIContext} ctx - UI context\n * @param {number} x - x position\n * @param {number} y - y position\n * @param {string} text - label text\n * @param {BitmapFont} font - font for rendering\n * @param {object} color - optional text color {r, g, b, a}\n * @param {number} scale - optional text scale (default 0.8)\n */\nexport function label(ctx, x, y, text, font, color = COLORS.text, scale = 0.8) {\n    if (text && font) {\n        font.drawText(ctx.canvas, text, x, y, color, scale);\n    }\n}\n\n/**\n * Rounded button variant - softer aesthetic\n */\nexport function buttonRounded(ctx, idStr, x, y, w, h, text, font, radius = 4) {\n    const id = ctx.hash(idStr);\n    const hovered = ctx.checkHot(id, x, y, w, h);\n\n    if (hovered && ctx.mousePressed) {\n        ctx.setActive(id);\n    }\n\n    const active = ctx.isActive(id);\n    const clicked = active && ctx.mouseReleased && hovered;\n\n    let bgColor = COLORS.buttonNormal;\n    if (active) {\n        bgColor = COLORS.buttonActive;\n    } else if (hovered) {\n        bgColor = COLORS.buttonHover;\n    }\n\n\n    const points = PolygonDrawer.createRoundedRect(x, y, w, h, radius);\n    PolygonDrawer.fillPolygon(\n        ctx.canvas, points,\n        bgColor.r, bgColor.g, bgColor.b, bgColor.a\n    );\n    PolygonDrawer.strokePolygon(\n        ctx.canvas, points, 1,\n        COLORS.buttonBorder.r, COLORS.buttonBorder.g,\n        COLORS.buttonBorder.b, COLORS.buttonBorder.a\n    );\n\n\n    // Draw text\n    if (text && font) {\n        const textMetrics = font.measureText(text);\n        const textX = x + (w - textMetrics.width) / 2;\n        const textY = y + (h - textMetrics.height) / 2;\n        font.drawText(ctx.canvas, text, textX, textY, COLORS.text, 0.7);\n    }\n\n    return clicked;\n}\n\n/**\n * Icon button - just a clickable rectangle (for custom icons)\n * Returns true if clicked, and provides hover/active state\n */\nexport function iconButton(ctx, idStr, x, y, w, h) {\n    const id = ctx.hash(idStr);\n    const hovered = ctx.checkHot(id, x, y, w, h);\n\n    if (hovered && ctx.mousePressed) {\n        ctx.setActive(id);\n    }\n\n    const active = ctx.isActive(id);\n    const clicked = active && ctx.mouseReleased && hovered;\n\n    return {\n        clicked,\n        hovered,\n        active\n    };\n}\n\n/**\n * Checkbox widget - toggles boolean state\n * @returns {boolean} - new checked state\n */\nexport function checkbox(ctx, idStr, x, y, size, checked, label, font, config = {}) {\n    const id = ctx.hash(idStr);\n    const theme = ctx.theme;\n\n    const padding = config.padding ?? theme.spacing.padding.sm;\n    const hitExpand = config.hitExpand ?? theme.spacing.hitExpand.md;\n    const enableEffects = config.effects ?? true;\n\n    const hitX = x - hitExpand;\n    const hitY = y - hitExpand;\n    const hitSize = size + hitExpand * 2;\n\n    const hovered = ctx.checkHot(id, hitX, hitY, hitSize, hitSize);\n\n    if (hovered && ctx.mousePressed) {\n        ctx.setActive(id);\n    }\n\n    const active = ctx.isActive(id);\n    const clicked = active && ctx.mouseReleased && hovered;\n\n    const wasChecked = checked;\n    if (clicked) {\n        checked = !checked;\n\n        if (enableEffects) {\n            // Particle burst on toggle\n            const centerX = x + size / 2;\n            const centerY = y + size / 2;\n\n            if (checked) {\n                // Success burst\n                ctx.spawnEffect(new ParticleBurst(centerX, centerY, 8, theme.colors.accent));\n                ctx.playSound('ui_toggle_on', 0.4);\n                ctx.triggerHaptic(0.4, 40);\n            } else {\n                // Subtle burst\n                ctx.spawnEffect(new ParticleBurst(centerX, centerY, 5, theme.colors.text.secondary));\n                ctx.playSound('ui_toggle_off', 0.3);\n                ctx.triggerHaptic(0.2, 20);\n            }\n        }\n    }\n\n    // Animation state\n    const anim = ctx.updateAnimState(id, hovered, active, false);\n\n    // Animate check state\n    if (anim.checkedT === undefined) {\n        anim.checkedT = checked ? 1 : 0;\n    }\n    const targetChecked = checked ? 1 : 0;\n    const lerpCheckbox = (a, b, t) => a + (b - a) * t;\n    anim.checkedT = lerpCheckbox(anim.checkedT, targetChecked, ctx.deltaTime * 12);\n\n    // Colors\n    const normalColor = theme.colors.button.normal;\n    const hoverColor = theme.colors.button.hover;\n    const activeColor = theme.colors.button.active;\n\n    const bgColor = lerpColor3(normalColor, hoverColor, activeColor, anim.hoverT, anim.activeT);\n\n    // Draw checkbox square\n    ShapeDrawer.fillRect(ctx.canvas, x, y, size, size,\n        bgColor.r, bgColor.g, bgColor.b, bgColor.a);\n\n    // Border brightens on hover\n    const borderNormal = theme.colors.border.normal;\n    const borderBright = theme.colors.border.hover;\n    const borderColor = lerpColor(borderNormal, borderBright, anim.hoverT);\n\n    ShapeDrawer.strokeRect(ctx.canvas, x, y, size, size, 1,\n        borderColor.r, borderColor.g, borderColor.b, borderColor.a);\n\n    // Animated checkmark\n    if (anim.checkedT > 0.01) {\n        const checkAlpha = Math.round(255 * anim.checkedT);\n        const checkPadding = size * 0.25;\n\n        // Scale from center\n        const scale = 0.3 + 0.7 * anim.checkedT;  // 0.3 -> 1.0\n        const centerX = x + size / 2;\n        const centerY = y + size / 2;\n\n        const x1 = centerX + (x + checkPadding - centerX) * scale;\n        const y1 = centerY + (y + size / 2 - centerY) * scale;\n        const x2 = centerX + (x + size / 2 - centerX) * scale;\n        const y2 = centerY + (y + size - checkPadding - centerY) * scale;\n        const x3 = centerX + (x + size - checkPadding - centerX) * scale;\n        const y3 = centerY + (y + checkPadding - centerY) * scale;\n\n        AADrawer.drawLineAA(ctx.canvas, x1, y1, x2, y2,\n            theme.colors.text.primary.r,\n            theme.colors.text.primary.g,\n            theme.colors.text.primary.b,\n            checkAlpha\n        );\n        AADrawer.drawLineAA(ctx.canvas, x2, y2, x3, y3,\n            theme.colors.text.primary.r,\n            theme.colors.text.primary.g,\n            theme.colors.text.primary.b,\n            checkAlpha\n        );\n    }\n\n    // Label\n    if (label && font) {\n        const labelGap = config.labelGap ?? theme.spacing.gap.md;\n        const labelX = x + size + labelGap;\n        const labelY = y + (size - font.measureText(label).height) / 2;\n\n        const textColor = lerpColor(\n            theme.colors.text.primary,\n            theme.colors.text.secondary,\n            anim.hoverT * 0.3\n        );\n\n        font.drawText(ctx.canvas, label, labelX, labelY, textColor, 0.7);\n    }\n\n    return checked;\n}\n\n/**\n * Primary button - uses accent color\n */\nexport function buttonPrimary(ctx, idStr, x, y, w, h, text, font, config = {}) {\n    const theme = ctx.theme;\n    return button(ctx, idStr, x, y, w, h, text, font, {\n        colorNormal: theme.colors.accent,\n        colorHover: lerpColor(theme.colors.accent, { r: 255, g: 255, b: 255, a: 255 }, 0.15),\n        colorActive: lerpColor(theme.colors.accent, { r: 0, g: 0, b: 0, a: 255 }, 0.15),\n        colorText: { r: 255, g: 255, b: 255, a: 255 },\n        ...config\n    });\n}\n\n/**\n * Danger button - uses danger color for destructive actions\n */\nexport function buttonDanger(ctx, idStr, x, y, w, h, text, font, config = {}) {\n    const theme = ctx.theme;\n    return button(ctx, idStr, x, y, w, h, text, font, {\n        colorNormal: theme.colors.danger,\n        colorHover: lerpColor(theme.colors.danger, { r: 255, g: 255, b: 255, a: 255 }, 0.15),\n        colorActive: lerpColor(theme.colors.danger, { r: 0, g: 0, b: 0, a: 255 }, 0.15),\n        colorText: { r: 255, g: 255, b: 255, a: 255 },\n        ...config\n    });\n}\n\n/**\n * Success button - uses success color\n */\nexport function buttonSuccess(ctx, idStr, x, y, w, h, text, font, config = {}) {\n    const theme = ctx.theme;\n    return button(ctx, idStr, x, y, w, h, text, font, {\n        colorNormal: theme.colors.success,\n        colorHover: lerpColor(theme.colors.success, { r: 255, g: 255, b: 255, a: 255 }, 0.15),\n        colorActive: lerpColor(theme.colors.success, { r: 0, g: 0, b: 0, a: 255 }, 0.15),\n        colorText: { r: 255, g: 255, b: 255, a: 255 },\n        ...config\n    });\n}\n\n// Export colors for customization\nexport { COLORS };","/**\r\n * Flex Layout - items flow in a direction (row or column)\r\n * \r\n * Use case: Button rows, vertical lists, toolbars\r\n * Features: auto-spacing, grow/shrink, alignment\r\n */\r\nexport function beginFlex(x, y, w, h, direction = \"row\", options = {}) {\r\n    return new FlexLayout(x, y, w, h, direction, options);\r\n}\r\n\r\nclass FlexLayout {\r\n    constructor(x, y, w, h, direction, options) {\r\n        this.x = x;\r\n        this.y = y;\r\n        this.w = w;\r\n        this.h = h;\r\n        this.direction = direction; // \"row\" or \"column\"\r\n        \r\n        // Options\r\n        this.gap = options.gap || 0;\r\n        this.padding = options.padding || 0;\r\n        this.align = options.align || \"start\"; // start, center, end, stretch\r\n        this.justify = options.justify || \"start\"; // start, center, end, space-between, space-around\r\n        \r\n        // Current position in layout\r\n        this.currentX = x + this.padding;\r\n        this.currentY = y + this.padding;\r\n        \r\n        // Track items for two-pass layout\r\n        this.items = [];\r\n        this.availableSpace = direction === \"row\" ? \r\n            w - this.padding * 2 : \r\n            h - this.padding * 2;\r\n    }\r\n    \r\n    /**\r\n     * Add item to layout\r\n     * @param {Object} options - { w, h, grow, shrink, basis }\r\n     * @returns {Object} - { x, y, w, h } bounds for this item\r\n     */\r\n    addItem(options = {}) {\r\n        const item = {\r\n            w: options.w,\r\n            h: options.h,\r\n            grow: options.grow || 0,\r\n            shrink: options.shrink || 1,\r\n            basis: options.basis || (this.direction === \"row\" ? options.w : options.h),\r\n            minW: options.minW || 0,\r\n            minH: options.minH || 0,\r\n            maxW: options.maxW || Infinity,\r\n            maxH: options.maxH || Infinity\r\n        };\r\n        \r\n        this.items.push(item);\r\n        return item; // Return item object, will be filled with bounds later\r\n    }\r\n    \r\n    /**\r\n     * Calculate final layout and assign bounds to all items\r\n     * Must be called after all addItem() calls\r\n     */\r\n    layout() {\r\n        if (this.items.length === 0) return;\r\n        \r\n        const isRow = this.direction === \"row\";\r\n        const mainAxis = isRow ? \"w\" : \"h\";\r\n        const crossAxis = isRow ? \"h\" : \"w\";\r\n        \r\n        // Calculate space taken by gaps\r\n        const totalGap = (this.items.length - 1) * this.gap;\r\n        let availableMain = this.availableSpace - totalGap;\r\n        \r\n        // First pass: assign basis sizes and calculate space used\r\n        let usedSpace = 0;\r\n        let totalGrow = 0;\r\n        let totalShrink = 0;\r\n        \r\n        for (const item of this.items) {\r\n            if (item.basis === undefined) {\r\n                item.basis = item[mainAxis] || 0;\r\n            }\r\n            usedSpace += item.basis;\r\n            totalGrow += item.grow;\r\n            totalShrink += item.shrink;\r\n        }\r\n        \r\n        // Second pass: distribute remaining space or shrink\r\n        const remaining = availableMain - usedSpace;\r\n        \r\n        if (remaining > 0 && totalGrow > 0) {\r\n            // Distribute extra space to growing items\r\n            const growUnit = remaining / totalGrow;\r\n            for (const item of this.items) {\r\n                item[mainAxis] = item.basis + growUnit * item.grow;\r\n            }\r\n        } else if (remaining < 0 && totalShrink > 0) {\r\n            // Shrink items\r\n            const shrinkUnit = -remaining / totalShrink;\r\n            for (const item of this.items) {\r\n                item[mainAxis] = Math.max(\r\n                    item.basis - shrinkUnit * item.shrink,\r\n                    item[`min${mainAxis.toUpperCase()}`]\r\n                );\r\n            }\r\n        } else {\r\n            // No grow/shrink, just use basis\r\n            for (const item of this.items) {\r\n                item[mainAxis] = item.basis;\r\n            }\r\n        }\r\n        \r\n        // Apply min/max constraints\r\n        for (const item of this.items) {\r\n            if (item[mainAxis] !== undefined) {\r\n                item[mainAxis] = Math.max(item[`min${mainAxis.toUpperCase()}`], \r\n                    Math.min(item[mainAxis], item[`max${mainAxis.toUpperCase()}`]));\r\n            }\r\n        }\r\n        \r\n        // Third pass: assign cross-axis sizes\r\n        const containerCross = isRow ? \r\n            this.h - this.padding * 2 : \r\n            this.w - this.padding * 2;\r\n        \r\n        for (const item of this.items) {\r\n            if (item[crossAxis] === undefined) {\r\n                if (this.align === \"stretch\") {\r\n                    item[crossAxis] = containerCross;\r\n                } else {\r\n                    item[crossAxis] = containerCross; // Default to full height/width\r\n                }\r\n            }\r\n        }\r\n        \r\n        // Fourth pass: position items\r\n        this._positionItems();\r\n    }\r\n    \r\n    _positionItems() {\r\n        const isRow = this.direction === \"row\";\r\n        let mainPos = isRow ? this.currentX : this.currentY;\r\n        \r\n        // Calculate justify offsets\r\n        const totalGap = (this.items.length - 1) * this.gap;\r\n        const totalItemSize = this.items.reduce((sum, item) => \r\n            sum + (isRow ? item.w : item.h), 0);\r\n        const available = this.availableSpace - totalGap - totalItemSize;\r\n        \r\n        let justifyOffset = 0;\r\n        let justifyGap = this.gap;\r\n        \r\n        if (this.justify === \"center\") {\r\n            justifyOffset = available / 2;\r\n        } else if (this.justify === \"end\") {\r\n            justifyOffset = available;\r\n        } else if (this.justify === \"space-between\") {\r\n            justifyGap = this.items.length > 1 ? \r\n                (this.availableSpace - totalItemSize) / (this.items.length - 1) : \r\n                this.gap;\r\n        } else if (this.justify === \"space-around\") {\r\n            const space = available / this.items.length;\r\n            justifyOffset = space / 2;\r\n            justifyGap = space;\r\n        }\r\n        \r\n        mainPos += justifyOffset;\r\n        \r\n        for (const item of this.items) {\r\n            const mainSize = isRow ? item.w : item.h;\r\n            const crossSize = isRow ? item.h : item.w;\r\n            \r\n            // Calculate cross-axis position based on alignment\r\n            const containerCross = isRow ? \r\n                this.h - this.padding * 2 : \r\n                this.w - this.padding * 2;\r\n            \r\n            let crossPos = isRow ? this.currentY : this.currentX;\r\n            \r\n            if (this.align === \"center\") {\r\n                crossPos += (containerCross - crossSize) / 2;\r\n            } else if (this.align === \"end\") {\r\n                crossPos += containerCross - crossSize;\r\n            }\r\n            // \"start\" and \"stretch\" keep crossPos as is\r\n            \r\n            // Assign final bounds\r\n            if (isRow) {\r\n                item.x = mainPos;\r\n                item.y = crossPos;\r\n            } else {\r\n                item.x = crossPos;\r\n                item.y = mainPos;\r\n            }\r\n            \r\n            mainPos += mainSize + justifyGap;\r\n        }\r\n    }\r\n    \r\n    /**\r\n     * Get bounds array for all items (call after layout())\r\n     */\r\n    getBounds() {\r\n        return this.items.map(item => ({ x: item.x, y: item.y, w: item.w, h: item.h }));\r\n    }\r\n}\r\n\r\n/**\r\n * Grid Layout - cells in rows and columns\r\n * \r\n * Use case: Forms, settings panels, game boards\r\n * Features: fixed/proportional sizing, row/column spanning\r\n */\r\nexport function beginGrid(x, y, w, h, rows, cols, options = {}) {\r\n    return new GridLayout(x, y, w, h, rows, cols, options);\r\n}\r\n\r\nclass GridLayout {\r\n    constructor(x, y, w, h, rows, cols, options) {\r\n        this.x = x;\r\n        this.y = y;\r\n        this.w = w;\r\n        this.h = h;\r\n        this.rows = rows;\r\n        this.cols = cols;\r\n        \r\n        // Options\r\n        this.gap = options.gap || 0;\r\n        this.padding = options.padding || 0;\r\n        this.rowHeights = options.rowHeights || []; // array of heights or \"auto\"\r\n        this.colWidths = options.colWidths || [];   // array of widths or \"auto\"\r\n        \r\n        // Calculate cell sizes\r\n        this._calculateCellSizes();\r\n        \r\n        // Track which cells are occupied (for spanning)\r\n        this.occupied = new Array(rows * cols).fill(false);\r\n    }\r\n    \r\n    _calculateCellSizes() {\r\n        const availableW = this.w - this.padding * 2 - (this.cols - 1) * this.gap;\r\n        const availableH = this.h - this.padding * 2 - (this.rows - 1) * this.gap;\r\n        \r\n        // Calculate column widths\r\n        let fixedWidth = 0;\r\n        let autoCols = 0;\r\n        \r\n        for (let i = 0; i < this.cols; i++) {\r\n            const width = this.colWidths[i];\r\n            if (width === undefined || width === \"auto\") {\r\n                autoCols++;\r\n            } else {\r\n                fixedWidth += width;\r\n            }\r\n        }\r\n        \r\n        const autoColWidth = autoCols > 0 ? (availableW - fixedWidth) / autoCols : 0;\r\n        \r\n        this.calculatedColWidths = [];\r\n        for (let i = 0; i < this.cols; i++) {\r\n            const width = this.colWidths[i];\r\n            this.calculatedColWidths[i] = \r\n                (width === undefined || width === \"auto\") ? autoColWidth : width;\r\n        }\r\n        \r\n        // Calculate row heights\r\n        let fixedHeight = 0;\r\n        let autoRows = 0;\r\n        \r\n        for (let i = 0; i < this.rows; i++) {\r\n            const height = this.rowHeights[i];\r\n            if (height === undefined || height === \"auto\") {\r\n                autoRows++;\r\n            } else {\r\n                fixedHeight += height;\r\n            }\r\n        }\r\n        \r\n        const autoRowHeight = autoRows > 0 ? (availableH - fixedHeight) / autoRows : 0;\r\n        \r\n        this.calculatedRowHeights = [];\r\n        for (let i = 0; i < this.rows; i++) {\r\n            const height = this.rowHeights[i];\r\n            this.calculatedRowHeights[i] = \r\n                (height === undefined || height === \"auto\") ? autoRowHeight : height;\r\n        }\r\n    }\r\n    \r\n    /**\r\n     * Get cell bounds\r\n     * @param {number} row - row index (0-based)\r\n     * @param {number} col - column index (0-based)\r\n     * @param {number} rowSpan - number of rows to span (default 1)\r\n     * @param {number} colSpan - number of columns to span (default 1)\r\n     * @returns {Object} - { x, y, w, h }\r\n     */\r\n    cell(row, col, rowSpan = 1, colSpan = 1) {\r\n        // Calculate position\r\n        let x = this.x + this.padding;\r\n        for (let i = 0; i < col; i++) {\r\n            x += this.calculatedColWidths[i] + this.gap;\r\n        }\r\n        \r\n        let y = this.y + this.padding;\r\n        for (let i = 0; i < row; i++) {\r\n            y += this.calculatedRowHeights[i] + this.gap;\r\n        }\r\n        \r\n        // Calculate size (including spanning)\r\n        let w = 0;\r\n        for (let i = 0; i < colSpan; i++) {\r\n            w += this.calculatedColWidths[col + i];\r\n            if (i < colSpan - 1) w += this.gap;\r\n        }\r\n        \r\n        let h = 0;\r\n        for (let i = 0; i < rowSpan; i++) {\r\n            h += this.calculatedRowHeights[row + i];\r\n            if (i < rowSpan - 1) h += this.gap;\r\n        }\r\n        \r\n        // Mark cells as occupied\r\n        for (let r = row; r < row + rowSpan; r++) {\r\n            for (let c = col; c < col + colSpan; c++) {\r\n                this.occupied[r * this.cols + c] = true;\r\n            }\r\n        }\r\n        \r\n        return { x, y, w, h };\r\n    }\r\n    \r\n    /**\r\n     * Get next available cell (auto-flow)\r\n     */\r\n    nextCell() {\r\n        for (let i = 0; i < this.occupied.length; i++) {\r\n            if (!this.occupied[i]) {\r\n                const row = Math.floor(i / this.cols);\r\n                const col = i % this.cols;\r\n                return this.cell(row, col);\r\n            }\r\n        }\r\n        return null; // Grid full\r\n    }\r\n}\r\n\r\n/**\r\n * Helper: Calculate optimal grid dimensions for N items\r\n */\r\nexport function calcGridDimensions(itemCount, preferredCols = null) {\r\n    if (preferredCols) {\r\n        const rows = Math.ceil(itemCount / preferredCols);\r\n        return { rows, cols: preferredCols };\r\n    }\r\n    \r\n    // Try to make it square-ish\r\n    const cols = Math.ceil(Math.sqrt(itemCount));\r\n    const rows = Math.ceil(itemCount / cols);\r\n    return { rows, cols };\r\n}","import { IMGUIContext } from '../imgui/imgui_context.js';\nimport { button, label } from '../imgui/widgets.js';\nimport { beginFlex } from '../imgui/layout.js';\nimport { ShapeDrawer } from 'tessera.js';\n\nexport class Toolbar {\n    constructor(canvas, toolManager, font, scale = 0.7) {\n        this.canvas = canvas;\n        this.toolManager = toolManager;\n        this.font = font;\n        this.scale = scale;\n\n        // IMGUI context - InputMap needs to be provided by caller\n        // For now we'll initialize it as null, caller should set it\n        this.imguiCtx = null;\n\n        this.buttons = new Map();\n        this.activeTool = null;\n\n        // Panel settings\n        this.panelX = 10;\n        this.panelY = 100;\n        this.panelW = 120 + 10;\n        this.panelH = 0;\n        this.panelBg = { r: 25, g: 28, b: 32, a: 230 };\n        this.panelBorder = { r: 60, g: 65, b: 70, a: 255 };\n        this.paddingx = 10\n\n        this.buildUI();\n    }\n\n    /**\n     * Set the IMGUI context (must be called before update/draw)\n     */\n    setIMGUIContext(imguiCtx) {\n        this.imguiCtx = imguiCtx;\n    }\n\n    buildUI() {\n        // Tool button configs\n        const toolConfigs = [\n            { name: 'spawn', label: 'Spawn (1)', hotkey: '1' },\n            { name: 'path', label: 'Path (2)', hotkey: '2' },\n            { name: 'area', label: 'Area (3)', hotkey: '3' }\n        ];\n\n        // Store configs for rendering\n        this.toolConfigs = toolConfigs;\n\n        // Calculate panel height based on buttons\n        const buttonHeight = 30;\n        const gap = 8;\n        const padding = 10;\n        this.panelH = toolConfigs.length * buttonHeight + (toolConfigs.length - 1) * gap + padding * 2;\n    }\n\n    /**\n     * Get the bounding box of the toolbar panel\n     * @returns {Object} { x, y, w, h }\n     */\n    getBounds() {\n        return {\n            x: this.panelX,\n            y: this.panelY,\n            w: this.panelW,\n            h: this.panelH\n        };\n    }\n\n    updateActiveButton() {\n        const activeTool = this.toolManager.activeTool;\n        if (activeTool) {\n            this.activeTool = activeTool.name.toLowerCase().replace('tool', '');\n        }\n    }\n\n\n    draw() {\n        if (!this.imguiCtx) return;\n        // console.log(this.imguiCtx)\n\n        // Draw panel background\n        ShapeDrawer.fillRect(\n            this.canvas,\n            this.panelX, this.panelY, this.panelW, this.panelH,\n            this.panelBg.r, this.panelBg.g, this.panelBg.b, this.panelBg.a\n        );\n\n        // Draw panel border\n        ShapeDrawer.strokeRect(\n            this.canvas,\n            this.panelX, this.panelY, this.panelW, this.panelH, 2,\n            this.panelBorder.r, this.panelBorder.g, this.panelBorder.b, this.panelBorder.a\n        );\n\n        // Layout buttons vertically\n        const layout = beginFlex(\n            this.panelX, this.panelY, this.panelW, this.panelH,\n            'column',\n            { gap: 8, padding: 10, align: 'stretch' }\n        );\n\n        for (const config of this.toolConfigs) {\n            layout.addItem({ h: 30, grow: 0 });\n        }\n\n        layout.layout();\n        const bounds = layout.getBounds();\n        // const b = bounds[0]\n        // if (button(this.imguiCtx, \"theme\", b.x, b.y, b.w, b.h, \"Toggle Theme\", this.font)) {\n        //     ctx.setTheme(ctx.theme === THEME_DARK ? THEME_LIGHT : THEME_DARK);\n        // }\n        // Draw and handle button clicks\n        for (let i = 0; i < this.toolConfigs.length; i++) {\n            const config = this.toolConfigs[i];\n            const bounds_i = bounds[i];\n\n            if (button(this.imguiCtx, config.name, bounds_i.x, bounds_i.y, bounds_i.w + this.paddingx, bounds_i.h, config.label, this.font)) {\n                this.toolManager.setActiveTool(config.name);\n                this.updateActiveButton();\n            }\n\n            // // Draw button background\n            // ShapeDrawer.fillRect(\n            //     this.imguiCtx.canvas, bounds_i.x, bounds_i.y, bounds_i.w, bounds_i.h,\n            //     bgColor.r, bgColor.g, bgColor.b, bgColor.a\n            // );\n\n            // // Draw border\n            // ShapeDrawer.strokeRect(\n            //     this.imguiCtx.canvas, bounds_i.x, bounds_i.y, bounds_i.w, bounds_i.h, 1,\n            //     100, 100, 120, 255\n            // );\n\n            // Draw text with scale\n            // if (config.label && this.font) {\n            //     const textMetrics = this.font.measureText(config.label);\n            //     const textX = bounds_i.x + (bounds_i.w - textMetrics.width) / 2;\n            //     const textY = bounds_i.y + (bounds_i.h - textMetrics.height) / 2;\n\n            //     this.font.drawText(\n            //         this.imguiCtx.canvas, config.label, textX, textY,\n            //         { r: 220, g: 220, b: 230, a: 255 }, 1.0, this.scale\n            //     );\n            // }\n\n\n        }\n\n    }\n\n    // Call this when tool changes via hotkey\n    onToolChanged() {\n        this.updateActiveButton();\n    }\n}","import { ShapeDrawer, LineDrawer, InputMap } from \"tessera.js\";\nimport { COLORS } from \"./widgets.js\";\nimport { lerpColor } from \"./constants.js\";\n\n/**\n * Create a new text input state object\n */\nexport function createTextInputState(initialText = \"\") {\n    return {\n        text: initialText,\n        cursor: initialText.length,      // cursor position (index into text)\n        selection: initialText.length,   // selection start (cursor = end)\n        scrollX: 0,                      // horizontal scroll offset (for long text)\n        scrollY: 0,                      // vertical scroll offset (for textarea)\n        lastBlinkReset: Date.now()\n    };\n}\n\n/**\n * Get selected text range (normalized)\n */\nfunction getSelection(state) {\n    const start = Math.min(state.cursor, state.selection);\n    const end = Math.max(state.cursor, state.selection);\n    return { start, end };\n}\n\n/**\n * Check if there's an active selection\n */\nfunction hasSelection(state) {\n    return state.cursor !== state.selection;\n}\n\n/**\n * Delete selected text\n */\nfunction deleteSelection(state) {\n    const sel = getSelection(state);\n    state.text = state.text.slice(0, sel.start) + state.text.slice(sel.end);\n    state.cursor = sel.start;\n    state.selection = sel.start;\n}\n\n/**\n * Insert text at cursor (replacing selection if any)\n */\nfunction insertText(state, text) {\n    if (hasSelection(state)) {\n        deleteSelection(state);\n    }\n\n    state.text = state.text.slice(0, state.cursor) + text + state.text.slice(state.cursor);\n    state.cursor += text.length;\n    state.selection = state.cursor;\n}\n\n/**\n * Single-line text input widget\n * Mutates state object in-place, returns true if text changed\n */\nexport function textInput(ctx, idStr, x, y, w, h, state, font, placeholder = \"\", config = {}) {\n    const id = ctx.hash(idStr);\n    const theme = ctx.theme;\n\n    const padding = config.padding ?? theme.spacing.padding.md;\n    const hitExpand = config.hitExpand ?? theme.spacing.hitExpand.sm;\n\n    const hitX = x - hitExpand;\n    const hitY = y - hitExpand;\n    const hitW = w + hitExpand * 2;\n    const hitH = h + hitExpand * 2;\n\n    const hovered = ctx.checkHot(id, hitX, hitY, hitW, hitH);\n    const focused = ctx.hasFocus(id);\n\n    if (hovered && ctx.mousePressed) {\n        ctx.setFocus(id);\n        const clickX = ctx.mouseX - x + state.scrollX;\n        state.cursor = getCharAtX(state.text, clickX, font);\n        state.selection = state.cursor;\n        state.lastBlinkReset = Date.now();\n    }\n\n    // Drag to select\n    if (focused && ctx.mouseDown && hovered) {\n        const dragX = ctx.mouseX - x + state.scrollX;\n        state.cursor = getCharAtX(state.text, dragX, font);\n        state.lastBlinkReset = Date.now();\n    }\n\n    let textChanged = false;\n    if (focused) {\n        textChanged = handleTextInput(ctx, state, font);\n    }\n\n    // Animation state\n    const anim = ctx.updateAnimState(id, hovered, false, focused);\n\n    // Background color\n    const bgNormal = config.bgNormal ?? theme.colors.input.normal;\n    const bgHover = config.bgHover ?? theme.colors.input.hover;\n    const bgFocus = config.bgFocus ?? theme.colors.input.focus;\n\n    let bgColor = lerpColor(bgNormal, bgHover, anim.hoverT);\n    bgColor = lerpColor(bgColor, bgFocus, anim.focusT);\n\n    ShapeDrawer.fillRect(ctx.canvas, x, y, w, h,\n        bgColor.r, bgColor.g, bgColor.b, bgColor.a);\n\n    // Focus ring (glows when focused)\n    const borderNormal = config.borderNormal ?? theme.colors.border.normal;\n    const borderFocus = config.borderFocus ?? theme.colors.border.focus;\n    const borderColor = lerpColor(borderNormal, borderFocus, anim.focusT);\n    const borderWidth = 1 + Math.round(anim.focusT); // 1px -> 2px when focused\n\n    ShapeDrawer.strokeRect(ctx.canvas, x, y, w, h, borderWidth,\n        borderColor.r, borderColor.g, borderColor.b, borderColor.a);\n\n    // Render text content\n    renderTextContent(ctx, x + padding, y, w - padding * 2, h, state, font, placeholder, false, 0.8, focused);\n\n    return textChanged;\n}\n\n/**\n * Multi-line textarea widget\n */\nexport function textarea(ctx, idStr, x, y, w, h, state, font, placeholder = \"\", config = {}) {\n    const id = ctx.hash(idStr);\n    const theme = ctx.theme;\n    \n    const padding = config.padding ?? theme.spacing.padding.md;\n    const hitExpand = config.hitExpand ?? theme.spacing.hitExpand.sm;\n    const showScrollbar = config.showScrollbar ?? true;\n    \n    const hitX = x - hitExpand;\n    const hitY = y - hitExpand;\n    const hitW = w + hitExpand * 2;\n    const hitH = h + hitExpand * 2;\n    \n    const hovered = ctx.checkHot(id, hitX, hitY, hitW, hitH);\n    const focused = ctx.hasFocus(id);\n    \n    if (hovered && ctx.mousePressed) {\n        ctx.setFocus(id);\n        const clickX = ctx.mouseX - x + state.scrollX;\n        const clickY = ctx.mouseY - y + state.scrollY;\n        state.cursor = getCharAtXY(state.text, clickX, clickY, font, w - padding * 2);\n        state.selection = state.cursor;\n        state.lastBlinkReset = Date.now();\n    }\n    \n    // Drag to select (multiline)\n    if (focused && ctx.mouseDown && hovered) {\n        const dragX = ctx.mouseX - x + state.scrollX;\n        const dragY = ctx.mouseY - y + state.scrollY;\n        state.cursor = getCharAtXY(state.text, dragX, dragY, font, w - padding * 2);\n        state.lastBlinkReset = Date.now();\n    }\n    \n    let textChanged = false;\n    if (focused) {\n        textChanged = handleTextInput(ctx, state, font, true);  // multiline = true\n        \n        // After input, ensure cursor is visible\n        const viewHeight = h - padding * 2;\n        ensureCursorVisible(state, viewHeight, font, w - padding * 2);\n    }\n    \n    // Mouse wheel scrolling when hovered OR focused\n    if ((hovered || focused) && ctx.mouseWheelDelta !== 0) {\n        state.scrollY += ctx.mouseWheelDelta * font.lineHeight;\n        \n        // Clamp scroll\n        const viewHeight = h - padding * 2;\n        clampScroll(state, 0, viewHeight, font);\n    }\n    \n    // Animation state\n    const anim = ctx.updateAnimState(id, hovered, false, focused);\n    \n    // Background color\n    const bgNormal = config.bgNormal ?? theme.colors.input.normal;\n    const bgHover = config.bgHover ?? theme.colors.input.hover;\n    const bgFocus = config.bgFocus ?? theme.colors.input.focus;\n    \n    let bgColor = lerpColor(bgNormal, bgHover, anim.hoverT);\n    bgColor = lerpColor(bgColor, bgFocus, anim.focusT);\n    \n    ShapeDrawer.fillRect(ctx.canvas, x, y, w, h,\n        bgColor.r, bgColor.g, bgColor.b, bgColor.a);\n    \n    // Focus ring\n    const borderNormal = config.borderNormal ?? theme.colors.border.normal;\n    const borderFocus = config.borderFocus ?? theme.colors.border.focus;\n    const borderColor = lerpColor(borderNormal, borderFocus, anim.focusT);\n    const borderWidth = 1 + Math.round(anim.focusT);\n    \n    ShapeDrawer.strokeRect(ctx.canvas, x, y, w, h, borderWidth,\n        borderColor.r, borderColor.g, borderColor.b, borderColor.a);\n    \n    // Render multiline text\n    const contentX = x + padding;\n    const contentY = y + padding;\n    const contentW = w - padding * 2;\n    const contentH = h - padding * 2;\n    \n    renderTextContent(ctx, contentX, contentY, contentW, contentH, state, font, placeholder, true, 0.8, focused);\n    \n    // Optional scrollbar\n    if (showScrollbar) {\n        drawScrollbar(ctx, x, y, w, h, state, font, contentW, contentH);\n    }\n    \n    return textChanged;\n}\n\n/**\n * Handle keyboard input for text editing\n * Returns true if text was modified\n */\nfunction handleTextInput(ctx, state, font, multiline = false) {\n    const input = ctx.input_;\n    let changed = false;\n\n    const recentEvents = input.buffer.buffer.slice(0, 5);\n    const keyDownEvent = recentEvents.find(e => e.type === 'down');\n\n    if (!keyDownEvent) return false;\n\n    const key = keyDownEvent.key;\n    const modifiers = keyDownEvent.modifiers || [];\n    const shift = modifiers.includes('Shift');\n    const ctrl = modifiers.includes('Control');\n\n    input.buffer.clearRecent(1);\n\n    // Handle special keys\n    if (key === 'Backspace') {\n        if (hasSelection(state)) {\n            deleteSelection(state);\n        } else if (state.cursor > 0) {\n            state.text = state.text.slice(0, state.cursor - 1) + state.text.slice(state.cursor);\n            state.cursor--;\n            state.selection = state.cursor;\n        }\n        changed = true;\n        state.lastBlinkReset = Date.now();  // Reset blink on change\n    }\n    else if (key === 'Delete') {\n        if (hasSelection(state)) {\n            deleteSelection(state);\n        } else if (state.cursor < state.text.length) {\n            state.text = state.text.slice(0, state.cursor) + state.text.slice(state.cursor + 1);\n        }\n        changed = true;\n        state.lastBlinkReset = Date.now();\n    }\n    else if (key === 'ArrowLeft') {\n        if (shift) {\n            state.cursor = Math.max(0, state.cursor - 1);\n        } else {\n            if (hasSelection(state)) {\n                state.cursor = Math.min(state.cursor, state.selection);\n            } else {\n                state.cursor = Math.max(0, state.cursor - 1);\n            }\n            state.selection = state.cursor;\n        }\n        state.lastBlinkReset = Date.now();  // Reset on navigation too\n    }\n    else if (key === 'ArrowRight') {\n        if (shift) {\n            state.cursor = Math.min(state.text.length, state.cursor + 1);\n        } else {\n            if (hasSelection(state)) {\n                state.cursor = Math.max(state.cursor, state.selection);\n            } else {\n                state.cursor = Math.min(state.text.length, state.cursor + 1);\n            }\n            state.selection = state.cursor;\n        }\n        state.lastBlinkReset = Date.now();\n    }\n    else if (key === 'Home') {\n        if (shift) {\n            state.cursor = 0;\n        } else {\n            state.cursor = 0;\n            state.selection = 0;\n        }\n        state.lastBlinkReset = Date.now();\n    }\n    else if (key === 'End') {\n        if (shift) {\n            state.cursor = state.text.length;\n        } else {\n            state.cursor = state.text.length;\n            state.selection = state.text.length;\n        }\n        state.lastBlinkReset = Date.now();\n    }\n    else if (key === 'Enter' && multiline) {\n        insertText(state, '\\n');\n        changed = true;\n        state.lastBlinkReset = Date.now();\n    }\n    else if (key === 'Space') {\n        insertText(state, ' ');\n        changed = true;\n        state.lastBlinkReset = Date.now();\n    }\n    else if (ctrl && key === 'A') {\n        state.cursor = state.text.length;\n        state.selection = 0;\n        state.lastBlinkReset = Date.now();\n    }\n    else if (key.length === 1 && !ctrl) {\n        let char = key;\n        if (key >= 'A' && key <= 'Z') {\n            char = shift ? key : key.toLowerCase();\n        }\n        else if (shift) {\n            const shiftMap = {\n                '1': '!', '2': '@', '3': '#', '4': '$', '5': '%',\n                '6': '^', '7': '&', '8': '*', '9': '(', '0': ')',\n                '-': '_', '=': '+', '[': '{', ']': '}', '\\\\': '|',\n                ';': ':', \"'\": '\"', ',': '<', '.': '>', '/': '?',\n                '`': '~'\n            };\n            char = shiftMap[key] || key;\n        }\n        insertText(state, char);\n        changed = true;\n        state.lastBlinkReset = Date.now();\n    }\n\n    return changed;\n}\n\n/**\n * Draw scrollbar for textarea\n */\nfunction drawScrollbar(ctx, x, y, w, h, state, font, contentW, contentH) {\n    const lines = wrapText(state.text, contentW, font);\n    const totalHeight = lines.length * font.lineHeight;\n    \n    // Only show scrollbar if content overflows\n    if (totalHeight <= contentH) return;\n    \n    const scrollbarWidth = 8;\n    const scrollbarX = x + w - scrollbarWidth - 2;\n    const scrollbarY = y + 4;\n    const scrollbarH = h - 8;\n    \n    // Track background (subtle)\n    ShapeDrawer.fillRect(\n        ctx.canvas,\n        scrollbarX, scrollbarY,\n        scrollbarWidth, scrollbarH,\n        40, 40, 50, 100  // Semi-transparent\n    );\n    \n    // Calculate thumb size and position\n    const visibleRatio = contentH / totalHeight;\n    const thumbHeight = Math.max(20, scrollbarH * visibleRatio);\n    \n    const scrollRatio = state.scrollY / (totalHeight - contentH);\n    const thumbY = scrollbarY + (scrollbarH - thumbHeight) * scrollRatio;\n    \n    // Thumb (brighter)\n    ShapeDrawer.fillRect(\n        ctx.canvas,\n        scrollbarX, thumbY,\n        scrollbarWidth, thumbHeight,\n        100, 100, 120, 200\n    );\n}\n\n/**\n * Render text content with cursor and selection\n */\nfunction renderTextContent(ctx, x, y, w, h, state, font, placeholder, multiline, scale = 0.8, focused = false) {\n    const theme = ctx.theme;\n    const text = state.text || placeholder;\n    const isPlaceholder = !state.text && placeholder;\n    const color = isPlaceholder ? theme.colors.text.placeholder : theme.colors.text.primary;\n\n    if (!multiline) {\n        // Single line - from Chapter 2\n        if (!isPlaceholder && hasSelection(state)) {\n            const sel = getSelection(state);\n            const startX = font.measureText(text.slice(0, sel.start)).width;\n            const endX = font.measureText(text.slice(0, sel.end)).width;\n\n            const selColor = theme.colors.input.selection;\n            ShapeDrawer.fillRect(\n                ctx.canvas,\n                x + startX - state.scrollX,\n                y + (h - font.lineHeight) / 2,\n                endX - startX,\n                font.lineHeight,\n                selColor.r, selColor.g, selColor.b, selColor.a\n            );\n        }\n\n        if (text) {\n            font.drawText(ctx.canvas, text, x - state.scrollX, y + (h - font.lineHeight) / 2, color, scale);\n        }\n\n        // Cursor (from Chapter 2)\n        if (focused && !isPlaceholder) {\n            const cursorX = x + font.measureText(text.slice(0, state.cursor)).width - state.scrollX;\n            const cursorY = y + (h - font.lineHeight) / 2;\n\n            const blinkTime = Date.now() - state.lastBlinkReset;\n            const blinkCycle = 530;\n            if ((blinkTime % (blinkCycle * 2)) < blinkCycle) {\n                LineDrawer.drawLine(\n                    ctx.canvas, \n                    cursorX, cursorY, \n                    cursorX, cursorY + font.lineHeight,\n                    255, 255, 255, 255\n                );\n            }\n        }\n    } else {\n        // Multiline rendering\n        const lines = wrapText(text, w, font);\n\n        // Draw selection highlights first\n        if (!isPlaceholder && hasSelection(state)) {\n            const sel = getSelection(state);\n            renderMultilineSelection(ctx, x, y, w, h, lines, font, sel.start, sel.end, state.scrollY);\n        }\n\n        // Draw text lines\n        let lineY = y - state.scrollY;\n        for (let i = 0; i < lines.length; i++) {\n            const line = lines[i];\n\n            // Only render visible lines (culling)\n            if (lineY + font.lineHeight > y && lineY < y + h) {\n                font.drawText(ctx.canvas, line, x, lineY, color, scale);\n            }\n\n            lineY += font.lineHeight;\n\n            // Stop if we've gone past visible area\n            if (lineY > y + h) break;\n        }\n\n        // Cursor rendering for multiline\n        if (focused && !isPlaceholder) {\n            renderMultilineCursor(ctx, x, y, lines, font, state);\n        }\n    }\n}\n\n/**\n * Get cursor X position for given cursor index\n */\nfunction getCursorX(text, cursorPos, font) {\n    const beforeCursor = text.slice(0, cursorPos);\n    return font.measureText(beforeCursor).width;\n}\n\n/**\n * Get character index at X position\n */\nfunction getCharAtX(text, x, font) {\n    // Binary search would be faster for long text, but this is fine for typical input\n    let bestIndex = 0;\n    let bestDistance = Math.abs(x);\n\n    for (let i = 0; i <= text.length; i++) {\n        const substring = text.slice(0, i);\n        const width = font.measureText(substring).width;\n        const distance = Math.abs(x - width);\n\n        if (distance < bestDistance) {\n            bestDistance = distance;\n            bestIndex = i;\n        }\n\n        // Early exit if we've passed the click point\n        if (width > x) break;\n    }\n\n    return bestIndex;\n}\n\n/**\n * Get character index at X,Y position (multiline)\n */\nfunction getCharAtXY(text, x, y, font, maxWidth) {\n    const lines = wrapText(text, maxWidth, font);\n    const lineIndex = Math.floor(y / font.lineHeight);\n\n    if (lineIndex >= lines.length) {\n        return text.length;\n    }\n\n    // Find character in line\n    let charCount = 0;\n    for (let i = 0; i < lineIndex; i++) {\n        charCount += lines[i].length;\n    }\n\n    const line = lines[lineIndex];\n    charCount += getCharAtX(line, x, font);\n\n    return Math.min(charCount, text.length);\n}\n\n/**\n * Render selection highlights for multiline text\n */\nfunction renderMultilineSelection(ctx, x, y, w, h, lines, font, selStart, selEnd, scrollY) {\n    const theme = ctx.theme;\n    const selColor = theme.colors.input.selection;\n    let charCount = 0;\n    let lineY = y - scrollY;\n\n    for (let i = 0; i < lines.length; i++) {\n        const line = lines[i];\n        const lineStart = charCount;\n        const lineEnd = charCount + line.length;\n\n        // Check if selection overlaps this line\n        if (selEnd > lineStart && selStart < lineEnd) {\n            const selectStart = Math.max(0, selStart - lineStart);\n            const selectEnd = Math.min(line.length, selEnd - lineStart);\n\n            const startX = font.measureText(line.slice(0, selectStart)).width;\n            const endX = font.measureText(line.slice(0, selectEnd)).width;\n\n            // Only draw if line is visible\n            if (lineY + font.lineHeight > y && lineY < y + h) {\n                ShapeDrawer.fillRect(\n                    ctx.canvas,\n                    x + startX, lineY,\n                    endX - startX, font.lineHeight,\n                    selColor.r, selColor.g, selColor.b, selColor.a\n                );\n            }\n        }\n\n        charCount += line.length;\n        if (i < lines.length - 1) charCount++;  // Newline\n        lineY += font.lineHeight;\n\n        if (lineY > y + h) break;  // Culling\n    }\n}\n\n/**\n * Render cursor for multiline text\n */\nfunction renderMultilineCursor(ctx, x, y, lines, font, state) {\n    // Find cursor line and column\n    let charCount = 0;\n    let cursorLine = 0;\n    let cursorCol = 0;\n\n    for (let i = 0; i < lines.length; i++) {\n        const lineLength = lines[i].length;\n        if (state.cursor <= charCount + lineLength) {\n            cursorLine = i;\n            cursorCol = state.cursor - charCount;\n            break;\n        }\n        charCount += lineLength;\n        if (i < lines.length - 1) charCount++;  // Newline\n    }\n\n    const cursorX = x + font.measureText(lines[cursorLine].slice(0, cursorCol)).width;\n    const cursorY = y + cursorLine * font.lineHeight - state.scrollY;\n\n    // Only draw if cursor is in visible area\n    if (cursorY >= y && cursorY < y + font.lineHeight * 100) {  // Rough bounds\n        const blinkTime = Date.now() - state.lastBlinkReset;\n        const blinkCycle = 530;\n\n        if ((blinkTime % (blinkCycle * 2)) < blinkCycle) {\n            LineDrawer.drawLine(\n                ctx.canvas,\n                cursorX, cursorY,\n                cursorX, cursorY + font.lineHeight,\n                255, 255, 255, 255\n            );\n        }\n    }\n}\n\n/**\n * Wrap text to fit width\n */\nfunction wrapText(text, maxWidth, font) {\n    const lines = [];\n    const words = text.split(' ');\n    let currentLine = \"\";\n\n    for (const word of words) {\n        const testLine = currentLine + (currentLine ? \" \" : \"\") + word;\n        const metrics = font.measureText(testLine);\n\n        if (metrics.width > maxWidth && currentLine) {\n            lines.push(currentLine);\n            currentLine = word;\n        } else {\n            currentLine = testLine;\n        }\n    }\n\n    if (currentLine) {\n        lines.push(currentLine);\n    }\n\n    return lines.length ? lines : [\"\"];\n}\n\n/**\n * Clamp scroll position to valid range\n */\nfunction clampScroll(state, contentHeight, viewHeight, font) {\n    const lines = wrapText(state.text, 9999, font);  // Get actual line count\n    const totalHeight = lines.length * font.lineHeight;\n    \n    // Can't scroll past bottom\n    const maxScroll = Math.max(0, totalHeight - viewHeight);\n    state.scrollY = Math.max(0, Math.min(state.scrollY, maxScroll));\n}\n\n/**\n * Ensure cursor is visible (auto-scroll to cursor)\n */\nfunction ensureCursorVisible(state, viewHeight, font, maxWidth) {\n    const lines = wrapText(state.text, maxWidth, font);\n    \n    // Find which line the cursor is on\n    let charCount = 0;\n    let cursorLine = 0;\n    \n    for (let i = 0; i < lines.length; i++) {\n        const lineLength = lines[i].length;\n        if (state.cursor <= charCount + lineLength) {\n            cursorLine = i;\n            break;\n        }\n        charCount += lineLength;\n        if (i < lines.length - 1) charCount++; // Account for implicit newline\n    }\n    \n    const cursorY = cursorLine * font.lineHeight;\n    \n    // Scroll to show cursor\n    if (cursorY < state.scrollY) {\n        // Cursor above view, scroll up\n        state.scrollY = cursorY;\n    } else if (cursorY + font.lineHeight > state.scrollY + viewHeight) {\n        // Cursor below view, scroll down\n        state.scrollY = cursorY + font.lineHeight - viewHeight;\n    }\n}","import { ShapeDrawer } from 'tessera.js';\nimport { button, label } from '../imgui/widgets.js';\nimport { textInput, createTextInputState } from '../imgui/text_input.js';\nimport { checkbox } from '../imgui/widgets.js';\n\nexport class PropertiesPanel {\n    constructor(canvas, font, toolmanager, scale = 0.7) {\n        this.canvas = canvas;\n        this.font = font;\n        this.scale = scale;\n        this.toolmanager = toolmanager\n        this.dataChange = false\n        // Panel position (right side)\n        this.panelX = 0;\n        this.panelY = 0;\n        this.panelW = 280;\n        this.panelH = 0;\n\n        this.visible = false;\n        this.data = null;\n        this.toolName = '';\n\n        // Input states\n        this.nameInput = createTextInputState('');\n        this.xInput = createTextInputState('');\n        this.yInput = createTextInputState('');\n        this.isVisibleCheckbox = false;\n\n        // Colors\n        this.panelBg = { r: 35, g: 38, b: 45, a: 240 };\n        this.panelBorder = { r: 80, g: 85, b: 95, a: 255 };\n        this.titleColor = { r: 150, g: 200, b: 255, a: 255 };\n    }\n\n    /**\n     * Show the properties panel with data\n     * @param {Object} data - The data object to edit\n     * @param {string} toolName - Name of the tool\n     * @param {number} dataIndex - Index in tool's data array\n     */\n    show(data, toolName, dataIndex) {\n        this.visible = true;\n        this.data = data;\n        this.toolName = toolName;\n        this.dataIndex = dataIndex;\n\n        // Initialize input fields from data\n        this.nameInput = createTextInputState(data.name || `${toolName}_${dataIndex}`);\n        this.xInput = createTextInputState(data.x?.toFixed(2) || '0');\n        this.yInput = createTextInputState(data.y?.toFixed(2) || '0');\n        this.isVisibleCheckbox = data.isVisible !== false;\n\n        // Calculate position on right side\n        this.panelX = this.canvas.width - this.panelW - 10;\n        this.panelY = 100;\n        this.panelH = 350;\n    }\n\n    /**\n     * Hide the properties panel\n     */\n    hide() {\n        this.visible = false;\n        this.data = null;\n    }\n\n    /**\n     * Get the bounding box of this panel\n     */\n    getBounds() {\n        if (!this.visible) return null;\n        return {\n            x: this.panelX,\n            y: this.panelY,\n            w: this.panelW,\n            h: this.panelH\n        };\n    }\n\n    /**\n     * Draw the properties panel\n     */\n    draw(imguiCtx) {\n        if (!this.visible || !this.data) return;\n\n        // Draw panel background\n        ShapeDrawer.fillRect(\n            this.canvas,\n            this.panelX, this.panelY, this.panelW, this.panelH,\n            this.panelBg.r, this.panelBg.g, this.panelBg.b, this.panelBg.a\n        );\n\n        // Draw panel border\n        ShapeDrawer.strokeRect(\n            this.canvas,\n            this.panelX, this.panelY, this.panelW, this.panelH, 2,\n            this.panelBorder.r, this.panelBorder.g, this.panelBorder.b, this.panelBorder.a\n        );\n\n        const padding = 10;\n        const inputHeight = 25;\n        const labelHeight = 18;\n        const gap = 5;\n        let currentY = this.panelY + padding;\n\n        // Title\n        label(imguiCtx, this.panelX + padding, currentY, 'Properties', this.font, this.titleColor, this.scale);\n        currentY += labelHeight + gap;\n\n        // Tool name label\n        label(imguiCtx, this.panelX + padding, currentY, `Tool: ${this.toolName}`, this.font, undefined, this.scale);\n        currentY += labelHeight + gap;\n\n        // Name input\n        label(imguiCtx, this.panelX + padding, currentY, 'Name:', this.font, undefined, this.scale);\n        currentY += labelHeight;\n\n        if (textInput(imguiCtx, 'prop_name', this.panelX + padding, currentY, this.panelW - padding * 2, inputHeight, this.nameInput, this.font)) {\n            this.data.name = this.nameInput.text;\n            this.dataChange = true\n        }\n        currentY += inputHeight + gap;\n\n        // X input\n        label(imguiCtx, this.panelX + padding, currentY, 'X:', this.font, undefined, this.scale);\n        currentY += labelHeight;\n\n        if (textInput(imguiCtx, 'prop_x', this.panelX + padding, currentY, this.panelW - padding * 2, inputHeight, this.xInput, this.font)) {\n            const val = parseFloat(this.xInput.text);\n            if (!isNaN(val)) {\n                this.data.x = val;\n                this.dataChange = true\n\n            }\n\n        }\n        currentY += inputHeight + gap;\n\n        // Y input\n        label(imguiCtx, this.panelX + padding, currentY, 'Y:', this.font, undefined, this.scale);\n        currentY += labelHeight;\n\n        if (textInput(imguiCtx, 'prop_y', this.panelX + padding, currentY, this.panelW - padding * 2, inputHeight, this.yInput, this.font)) {\n            const val = parseFloat(this.yInput.text);\n            if (!isNaN(val)) {\n                this.data.y = val;\n                this.dataChange = true\n\n            }\n\n        }\n        currentY += inputHeight + gap;\n\n        // Visibility checkbox - note: checkbox doesn't have scale param yet, keeping as is\n        this.isVisibleCheckbox = checkbox(imguiCtx, 'prop_visible', this.panelX + padding, currentY, 16, this.isVisibleCheckbox, 'Visible', this.font);\n        if(this.data.isVisible != this.isVisibleCheckbox)\n             this.dataChange = true\n        this.data.isVisible = this.isVisibleCheckbox;\n        currentY += 25 + gap;\n\n        if(this.dataChange){\n            this.dataChange = false \n            this.toolmanager.updateToolData(this.data)\n        }\n        // Close button\n        if (button(imguiCtx, 'prop_close', this.panelX + padding, currentY + 20, this.panelW - padding * 2, 30, 'Close', this.font)) {\n            this.hide();\n        }\n    }\n}\n","import { Node } from \"../../engine/core.js\";\n\nexport class BaseTool extends Node {\n    constructor(name, editorCamera) {\n        super(name);\n\n        this.camera = editorCamera;\n        this.active = false;\n        this.mouseWorldPos = { x: 0, y: 0 };\n        this.mouseScreenPos = { x: 0, y: 0 };\n        this.uiBounds = []; // Bounding box of UI elements to ignore\n\n        this.cursorSize = 10;\n        this.cursorColor = { r: 255, g: 255, b: 0, a: 200 };\n\n\n        this.data = [];\n    }\n\n    updateData(data){\n        // console.log(data, this.name)\n        this.data.pop()\n        this.data.push(data)\n    }\n    /**\n     * Set the UI bounding box - clicks within this area will be ignored\n     * @param {Object} bounds - { x, y, w, h }\n     */\n    setUIBounds(bounds) {\n        this.uiBounds.push(bounds);\n    }\n\n    /**\n     * Check if a screen position is within UI bounds\n     * @param {number} screenX \n     * @param {number} screenY \n     * @returns {boolean}\n     */\n    isPointInUIBounds(screenX, screenY) {\n        if (!this.uiBounds) return false;\n        let isbelowUi;\n        for (const bounds of this.uiBounds) {\n            // console.log(bounds)\n            if(!bounds)\n                 continue\n            isbelowUi = screenX >= bounds.x &&\n                screenX < bounds.x + bounds.w &&\n                screenY >= bounds.y &&\n                screenY < bounds.y + bounds.h;\n            if (isbelowUi) return isbelowUi;\n        }\n\n        return isbelowUi;\n\n    }\n\n    activate() {\n        this.active = true;\n        this.onActivate();\n    }\n\n    deactivate() {\n        this.active = false;\n        this.onDeactivate();\n    }\n\n    updateMouse(inputMap) {\n        if (!inputMap) return;\n\n        this.mouseScreenPos = { ...inputMap.mousePosition };\n        const worldPos = this.camera.screenToWorld(\n            this.mouseScreenPos.x,\n            this.mouseScreenPos.y\n        );\n        this.mouseWorldPos = worldPos;\n    }\n\n    handleInput(inputMap, delta) {\n        if (!this.active) return;\n\n        this.updateMouse(inputMap);\n        this.onInput(inputMap, delta);\n    }\n\n    // override  in subclasses\n    onActivate() { }\n    onDeactivate() { }\n    onInput(inputMap, delta) { }\n\n    // data export for serialization\n    exportData() {\n        return {\n            tool: this.name,\n            data: this.data\n        };\n    }\n\n    // import data (for loading saved editor files)\n    importData(data) {\n        this.data = data;\n        this.onImport();\n    }\n\n    onImport() { }\n}","import { LineDrawer, ShapeDrawer } from \"tessera.js\";\nimport { BaseTool } from \"./base.js\";\n\nexport class SpawnPointTool extends BaseTool {\n    constructor(editorCamera) {\n        super('SpawnPointTool', editorCamera);\n\n        this.spawnRadius = 8;\n        this.spawnColor = { r: 255, g: 100, b: 100 };\n        this.hoveredIndex = -1;\n        this.deleteRadius = 15; // Click near spawn to delete\n        this.propertiesPanel = null; // Will be set by editor\n        this.lastEditedIndex = -1;\n    }\n\n    /**\n     * Set the properties panel for this tool\n     */\n    setPropertiesPanel(panel) {\n        this.propertiesPanel = panel;\n    }\n\n    onActivate() {\n        console.log('[SpawnPointTool] Activated - Click to place spawn points');\n    }\n\n    onDeactivate() {\n        console.log('[SpawnPointTool] Deactivated');\n        this.hoveredIndex = -1;\n    }\n\n    onInput(inputMap, delta) {\n        // Ignore input if click is within UI bounds\n        if (this.isPointInUIBounds(this.mouseScreenPos.x, this.mouseScreenPos.y)) {\n            this.hoveredIndex = -1;\n            return;\n        }\n\n        // Check if hovering over existing spawn\n        this.hoveredIndex = -1;\n        for (let i = 0; i < this.data.length; i++) {\n            const spawn = this.data[i];\n            const dx = this.mouseWorldPos.x - spawn.x;\n            const dy = this.mouseWorldPos.y - spawn.y;\n            const dist = Math.sqrt(dx * dx + dy * dy);\n\n            if (dist < this.deleteRadius) {\n                this.hoveredIndex = i;\n                break;\n            }\n        }\n\n        // Left click to place or delete\n        if (inputMap.input.isMouseButtonPressed(0)) {\n            if (this.hoveredIndex !== -1) {\n                // Show properties panel for editing\n                const spawn = this.data[this.hoveredIndex];\n                if (this.propertiesPanel) {\n                    this.propertiesPanel.show(spawn, 'Spawn', this.hoveredIndex);\n                    this.lastEditedIndex = this.hoveredIndex;\n                }\n            } else {\n                // Place new spawn\n                const spawnData = {\n                    name: `spawn_${this.data.length}`,\n                    x: this.mouseWorldPos.x,\n                    y: this.mouseWorldPos.y,\n                    type: 'spawn', // Can be extended later (enemy type, etc.)\n                    isVisible: true\n                };\n\n                this.data.push(spawnData);\n                console.log(`[SpawnPointTool] Placed spawn at (${spawnData.x.toFixed(1)}, ${spawnData.y.toFixed(1)})`);\n                \n                // Show properties panel for the new spawn\n                if (this.propertiesPanel) {\n                    this.propertiesPanel.show(spawnData, 'Spawn', this.data.length - 1);\n                    this.lastEditedIndex = this.data.length - 1;\n                }\n            }\n        }\n    }\n\n    \n    _draw(canvas, camera) {\n        // if (!this.active) return;\n\n        // Draw all placed spawns\n        for (let i = 0; i < this.data.length; i++) {\n            const spawn = this.data[i];\n            const screenPos = camera.worldToScreen(spawn.x, spawn.y);\n\n            // Highlight if hovered\n            const isHovered = i === this.hoveredIndex;\n            const color = isHovered\n                ? { r: 255, g: 50, b: 50 }\n                : this.spawnColor;\n\n            // Draw cross marker\n            const size = this.spawnRadius * (isHovered ? 1.5 : 1.0);\n\n            // Horizontal line\n            LineDrawer.drawLine(\n                canvas,\n                screenPos.x - size, screenPos.y,\n                screenPos.x + size, screenPos.y,\n                2,\n                color.r, color.g, color.b, 255\n            );\n\n            // Vertical line\n            LineDrawer.drawLine(\n                canvas,\n                screenPos.x, screenPos.y - size,\n                screenPos.x, screenPos.y + size,\n                2,\n                color.r, color.g, color.b, 255\n            );\n\n            // Circle around it\n            ShapeDrawer.strokeCircle(\n                canvas,\n                screenPos.x, screenPos.y,\n                size,\n                1,\n                color.r, color.g, color.b, 255\n            );\n        }\n\n        // Draw cursor at mouse position\n        const cursorScreen = camera.worldToScreen(this.mouseWorldPos.x, this.mouseWorldPos.y);\n        ShapeDrawer.fillCircle(\n            canvas,\n            cursorScreen.x, cursorScreen.y,\n            this.cursorSize,\n            this.cursorColor.r,\n            this.cursorColor.g,\n            this.cursorColor.b,\n            this.cursorColor.a\n        );\n    }\n\n    onImport() {\n        console.log(`[SpawnPointTool] Loaded ${this.data.length} spawn points`);\n    }\n}","import { BaseTool } from './base.js';\nimport { LineDrawer, ShapeDrawer } from 'tessera.js';\n\nexport class PathTool extends BaseTool {\n    constructor(editorCamera) {\n        super('PathTool', editorCamera);\n        \n        this.nodeRadius = 6;\n        this.nodeColor = { r: 100, g: 200, b: 255 };\n        this.lineColor = { r: 80, g: 160, b: 200 };\n        this.closedColor = { r: 255, g: 100, b: 255 };\n        \n        this.hoveredIndex = -1;\n        this.hoverRadius = 12;\n        \n        // Paths are arrays of paths (support multiple separate paths)\n        // Each path: { nodes: [{x, y}], closed: bool, name: string }\n        this.currentPath = null;\n        this.propertiesPanel = null;\n    }\n\n    /**\n     * Set the properties panel for this tool\n     */\n    setPropertiesPanel(panel) {\n        this.propertiesPanel = panel;\n    }\n\n    onActivate() {\n        console.log('[PathTool] Activated - Left click: add node | Right click: close path | Middle click: new path');\n        // Start first path automatically\n        if (this.data.length === 0) {\n            this.startNewPath();\n        } else {\n            // Continue last path\n            this.currentPath = this.data[this.data.length - 1];\n        }\n    }\n\n    onDeactivate() {\n        console.log('[PathTool] Deactivated');\n        this.hoveredIndex = -1;\n        this.currentPath = null;\n    }\n\n    startNewPath() {\n        this.currentPath = {\n            name: `path_${this.data.length}`,\n            nodes: [],\n            closed: false,\n            isVisible: true\n        };\n        this.data.push(this.currentPath);\n        console.log(`[PathTool] Started new path (${this.data.length} total paths)`);\n        \n        // Show properties panel for the new path\n        if (this.propertiesPanel) {\n            this.propertiesPanel.show(this.currentPath, 'Path', this.data.length - 1);\n        }\n    }\n\n    onInput(inputMap, delta) {\n        if (!this.currentPath) return;\n\n        // Ignore input if click is within UI bounds\n        if (this.isPointInUIBounds(this.mouseScreenPos.x, this.mouseScreenPos.y)) {\n            this.hoveredIndex = -1;\n            return;\n        }\n\n        // Find hovered node in current path\n        this.hoveredIndex = -1;\n        for (let i = 0; i < this.currentPath.nodes.length; i++) {\n            const node = this.currentPath.nodes[i];\n            const dx = this.mouseWorldPos.x - node.x;\n            const dy = this.mouseWorldPos.y - node.y;\n            const dist = Math.sqrt(dx * dx + dy * dy);\n            \n            if (dist < this.hoverRadius) {\n                this.hoveredIndex = i;\n                break;\n            }\n        }\n\n        // Left click: add node or delete hovered\n        if (inputMap.input.isMouseButtonPressed(0)) {\n            if (this.hoveredIndex !== -1) {\n                // Delete node\n                const deleted = this.currentPath.nodes.splice(this.hoveredIndex, 1)[0];\n                console.log(`[PathTool] Deleted node ${this.hoveredIndex} at (${deleted.x.toFixed(1)}, ${deleted.y.toFixed(1)})`);\n                this.hoveredIndex = -1;\n            } else if (!this.currentPath.closed) {\n                // Add new node\n                const node = {\n                    x: this.mouseWorldPos.x,\n                    y: this.mouseWorldPos.y\n                };\n                this.currentPath.nodes.push(node);\n                console.log(`[PathTool] Added node ${this.currentPath.nodes.length - 1} at (${node.x.toFixed(1)}, ${node.y.toFixed(1)})`);\n            }\n        }\n\n        // Right click: close path (only if we have 2+ nodes)\n        if (inputMap.input.isMouseButtonPressed(1)) {\n            if (this.currentPath.nodes.length >= 2 && !this.currentPath.closed) {\n                this.currentPath.closed = true;\n                console.log(`[PathTool] Closed path with ${this.currentPath.nodes.length} nodes`);\n            }\n        }\n\n            const ctrlHeld = inputMap.input.isKeyDown('Control')\n        // Middle click: start new path\n        if (ctrlHeld && inputMap.input.isKeyPressed(\"N\")) {\n            this.startNewPath();\n        }\n    }\n\n    _draw(canvas, camera) {\n        // if (!this.active) return;\n\n        // Draw all paths\n        for (let pathIdx = 0; pathIdx < this.data.length; pathIdx++) {\n            const path = this.data[pathIdx];\n            const isCurrent = path === this.currentPath;\n            \n            // Draw connections\n            if (path.nodes.length > 1) {\n                for (let i = 0; i < path.nodes.length - 1; i++) {\n                    const n1 = path.nodes[i];\n                    const n2 = path.nodes[i + 1];\n                    \n                    const p1 = camera.worldToScreen(n1.x, n1.y);\n                    const p2 = camera.worldToScreen(n2.x, n2.y);\n                    \n                    const color = path.closed ? this.closedColor : this.lineColor;\n                    \n                    LineDrawer.drawThickLine(\n                        canvas,\n                        p1.x, p1.y,\n                        p2.x, p2.y,\n                        2,\n                        color.r, color.g, color.b, 200\n                    );\n                }\n                \n                // If closed, connect last to first\n                if (path.closed) {\n                    const n1 = path.nodes[path.nodes.length - 1];\n                    const n2 = path.nodes[0];\n                    \n                    const p1 = camera.worldToScreen(n1.x, n1.y);\n                    const p2 = camera.worldToScreen(n2.x, n2.y);\n                    \n                    LineDrawer.drawThickLine(\n                        canvas,\n                        p1.x, p1.y,\n                        p2.x, p2.y,\n                        2,\n                        this.closedColor.r, this.closedColor.g, this.closedColor.b, 200\n                    );\n                }\n            }\n            \n            // Draw nodes\n            for (let i = 0; i < path.nodes.length; i++) {\n                const node = path.nodes[i];\n                const screenPos = camera.worldToScreen(node.x, node.y);\n                \n                const isHovered = isCurrent && i === this.hoveredIndex;\n                const radius = this.nodeRadius * (isHovered ? 1.8 : 1.0);\n                const color = isHovered \n                    ? { r: 255, g: 50, b: 50 }\n                    : (path.closed ? this.closedColor : this.nodeColor);\n                \n                // Filled circle\n                ShapeDrawer.fillCircle(\n                    canvas,\n                    screenPos.x, screenPos.y,\n                    radius,\n                    color.r, color.g, color.b, 255\n                );\n                \n                // Draw node number\n                // (tessera's renderer.drawText only works in onRender, so we skip text here)\n                // In production you'd use a BitmapFont\n            }\n        }\n\n        // Draw preview line from last node to cursor (if path not closed)\n        if (this.currentPath && !this.currentPath.closed && this.currentPath.nodes.length > 0) {\n            const lastNode = this.currentPath.nodes[this.currentPath.nodes.length - 1];\n            const p1 = camera.worldToScreen(lastNode.x, lastNode.y);\n            const p2 = camera.worldToScreen(this.mouseWorldPos.x, this.mouseWorldPos.y);\n            \n            LineDrawer.drawThickLine(\n                canvas,\n                p1.x, p1.y,\n                p2.x, p2.y,\n                1,\n                this.lineColor.r, this.lineColor.g, this.lineColor.b, 100\n            );\n        }\n\n        // Cursor\n        const cursorScreen = camera.worldToScreen(this.mouseWorldPos.x, this.mouseWorldPos.y);\n        ShapeDrawer.fillCircle(\n            canvas,\n            cursorScreen.x, cursorScreen.y,\n            this.cursorSize,\n            this.cursorColor.r,\n            this.cursorColor.g,\n            this.cursorColor.b,\n            this.cursorColor.a\n        );\n    }\n\n    onImport() {\n        console.log(`[PathTool] Loaded ${this.data.length} paths`);\n        if (this.data.length > 0) {\n            this.currentPath = this.data[this.data.length - 1];\n        }\n    }\n\n    exportData() {\n        // Custom export to make data cleaner\n        return {\n            tool: this.name,\n            data: this.data.map(path => ({\n                nodes: path.nodes,\n                closed: path.closed,\n                nodeCount: path.nodes.length\n            }))\n        };\n    }\n}","import { BaseTool } from './base.js';\nimport { ShapeDrawer } from 'tessera.js';\n\nexport class Area2DTool extends BaseTool {\n    constructor(editorCamera) {\n        super('Area2DTool', editorCamera);\n        \n        this.isDragging = false;\n        this.dragStart = { x: 0, y: 0 };\n        this.currentArea = null;\n        \n        this.hoveredIndex = -1;\n        this.selectedIndex = -1;\n        \n        this.resizeMode = null; // 'tl', 'tr', 'bl', 'br', 'edge-t', 'edge-b', 'edge-l', 'edge-r'\n        this.resizeStart = null;\n        this.handleSize = 8;\n        \n        // Area types (extensible)\n        this.areaTypes = ['trigger', 'spawn', 'camera', 'hazard'];\n        this.currentType = 'trigger';\n        \n        this.colors = {\n            trigger: { r: 100, g: 255, b: 100, a: 60 },\n            spawn: { r: 255, g: 200, b: 100, a: 60 },\n            camera: { r: 100, g: 150, b: 255, a: 60 },\n            hazard: { r: 255, g: 100, b: 100, a: 60 }\n        };\n        \n        this.propertiesPanel = null; // Will be set by editor\n    }\n\n    /**\n     * Set the properties panel for this tool\n     */\n    setPropertiesPanel(panel) {\n        this.propertiesPanel = panel;\n    }\n\n    onActivate() {\n        console.log('[Area2DTool] Activated - Drag to create area | Click to select | R: resize | T: cycle type | Delete: remove');\n    }\n\n    onDeactivate() {\n        this.isDragging = false;\n        this.currentArea = null;\n        this.hoveredIndex = -1;\n        this.selectedIndex = -1;\n        this.resizeMode = null;\n    }\n\n    cycleType() {\n        const idx = this.areaTypes.indexOf(this.currentType);\n        this.currentType = this.areaTypes[(idx + 1) % this.areaTypes.length];\n        console.log(`[Area2DTool] Type: ${this.currentType}`);\n        \n        // Update selected area type if one is selected\n        if (this.selectedIndex !== -1) {\n            this.data[this.selectedIndex].type = this.currentType;\n        }\n    }\n\n    pointInArea(px, py, area) {\n        return px >= area.x && px <= area.x + area.width &&\n               py >= area.y && py <= area.y + area.height;\n    }\n\n    getResizeHandle(area) {\n        const mx = this.mouseWorldPos.x;\n        const my = this.mouseWorldPos.y;\n        const h = this.handleSize / this.camera.zoom;\n        \n        // Corner handles\n        if (Math.abs(mx - area.x) < h && Math.abs(my - area.y) < h) return 'tl';\n        if (Math.abs(mx - (area.x + area.width)) < h && Math.abs(my - area.y) < h) return 'tr';\n        if (Math.abs(mx - area.x) < h && Math.abs(my - (area.y + area.height)) < h) return 'bl';\n        if (Math.abs(mx - (area.x + area.width)) < h && Math.abs(my - (area.y + area.height)) < h) return 'br';\n        \n        // Edge handles\n        if (Math.abs(my - area.y) < h && mx > area.x && mx < area.x + area.width) return 'edge-t';\n        if (Math.abs(my - (area.y + area.height)) < h && mx > area.x && mx < area.x + area.width) return 'edge-b';\n        if (Math.abs(mx - area.x) < h && my > area.y && my < area.y + area.height) return 'edge-l';\n        if (Math.abs(mx - (area.x + area.width)) < h && my > area.y && my < area.y + area.height) return 'edge-r';\n        \n        return null;\n    }\n\n    onInput(inputMap, delta) {\n        const leftPressed = inputMap.input.isMouseButtonPressed(0);\n        const leftDown = inputMap.input.isMouseButtonDown(0);\n        const leftReleased = !leftDown && this.isDragging;\n        \n        // Hotkeys\n        if (inputMap.input.isKeyPressed('KeyT')) {\n            this.cycleType();\n        }\n        \n        if (inputMap.input.isKeyPressed('Delete') && this.selectedIndex !== -1) {\n            console.log(`[Area2DTool] Deleted area ${this.selectedIndex}`);\n            this.data.splice(this.selectedIndex, 1);\n            this.selectedIndex = -1;\n            return;\n        }\n\n        // Find hovered area\n        this.hoveredIndex = -1;\n        for (let i = this.data.length - 1; i >= 0; i--) {\n            if (this.pointInArea(this.mouseWorldPos.x, this.mouseWorldPos.y, this.data[i])) {\n                this.hoveredIndex = i;\n                break;\n            }\n        }\n\n        // Handle resize mode\n        if (this.selectedIndex !== -1 && !this.isDragging) {\n            const area = this.data[this.selectedIndex];\n            const handle = this.getResizeHandle(area);\n            \n            if (handle && leftPressed) {\n                // Start resize\n                this.resizeMode = handle;\n                this.resizeStart = {\n                    x: area.x,\n                    y: area.y,\n                    width: area.width,\n                    height: area.height,\n                    mouseX: this.mouseWorldPos.x,\n                    mouseY: this.mouseWorldPos.y\n                };\n                this.isDragging = true;\n                return;\n            }\n        }\n\n        // Resize active\n        if (this.isDragging && this.resizeMode) {\n            const area = this.data[this.selectedIndex];\n            const dx = this.mouseWorldPos.x - this.resizeStart.mouseX;\n            const dy = this.mouseWorldPos.y - this.resizeStart.mouseY;\n            \n            switch (this.resizeMode) {\n                case 'tl':\n                    area.x = this.resizeStart.x + dx;\n                    area.y = this.resizeStart.y + dy;\n                    area.width = this.resizeStart.width - dx;\n                    area.height = this.resizeStart.height - dy;\n                    break;\n                case 'tr':\n                    area.y = this.resizeStart.y + dy;\n                    area.width = this.resizeStart.width + dx;\n                    area.height = this.resizeStart.height - dy;\n                    break;\n                case 'bl':\n                    area.x = this.resizeStart.x + dx;\n                    area.width = this.resizeStart.width - dx;\n                    area.height = this.resizeStart.height + dy;\n                    break;\n                case 'br':\n                    area.width = this.resizeStart.width + dx;\n                    area.height = this.resizeStart.height + dy;\n                    break;\n                case 'edge-t':\n                    area.y = this.resizeStart.y + dy;\n                    area.height = this.resizeStart.height - dy;\n                    break;\n                case 'edge-b':\n                    area.height = this.resizeStart.height + dy;\n                    break;\n                case 'edge-l':\n                    area.x = this.resizeStart.x + dx;\n                    area.width = this.resizeStart.width - dx;\n                    break;\n                case 'edge-r':\n                    area.width = this.resizeStart.width + dx;\n                    break;\n            }\n            \n            // Prevent negative dimensions\n            if (area.width < 10) area.width = 10;\n            if (area.height < 10) area.height = 10;\n            \n            if (leftReleased) {\n                this.isDragging = false;\n                this.resizeMode = null;\n                console.log(`[Area2DTool] Resized area to ${area.width.toFixed(1)}x${area.height.toFixed(1)}`);\n            }\n            return;\n        }\n\n        // Start drag to create new area\n        if (leftPressed && this.hoveredIndex === -1 && !this.isDragging) {\n            this.isDragging = true;\n            this.dragStart.x = this.mouseWorldPos.x;\n            this.dragStart.y = this.mouseWorldPos.y;\n            \n            this.currentArea = {\n                name: `area_${this.data.length}`,\n                x: this.dragStart.x,\n                y: this.dragStart.y,\n                width: 0,\n                height: 0,\n                type: this.currentType,\n                isVisible: true\n            };\n            \n            this.selectedIndex = -1;\n            return;\n        }\n\n        // Update drag dimensions\n        if (this.isDragging && this.currentArea) {\n            const x = Math.min(this.dragStart.x, this.mouseWorldPos.x);\n            const y = Math.min(this.dragStart.y, this.mouseWorldPos.y);\n            const width = Math.abs(this.mouseWorldPos.x - this.dragStart.x);\n            const height = Math.abs(this.mouseWorldPos.y - this.dragStart.y);\n            \n            this.currentArea.x = x;\n            this.currentArea.y = y;\n            this.currentArea.width = width;\n            this.currentArea.height = height;\n            \n            if (leftReleased) {\n                // Finish creating area\n                if (width > 5 && height > 5) {\n                    this.data.push(this.currentArea);\n                    this.selectedIndex = this.data.length - 1;\n                    console.log(`[Area2DTool] Created ${this.currentType} area: ${width.toFixed(1)}x${height.toFixed(1)}`);\n                    \n                    // Show properties panel for the new area\n                    if (this.propertiesPanel) {\n                        this.propertiesPanel.show(this.currentArea, 'Area', this.selectedIndex);\n                    }\n                }\n                this.isDragging = false;\n                this.currentArea = null;\n            }\n            return;\n        }\n\n        // Select area on click\n        if (leftPressed && this.hoveredIndex !== -1) {\n            this.selectedIndex = this.hoveredIndex;\n            this.currentType = this.data[this.selectedIndex].type;\n            console.log(`[Area2DTool] Selected ${this.currentType} area ${this.selectedIndex}`);\n            \n            // Show properties panel for the selected area\n            const area = this.data[this.selectedIndex];\n            if (this.propertiesPanel) {\n                this.propertiesPanel.show(area, 'Area', this.selectedIndex);\n            }\n        }\n    }\n\n    _draw(canvas, camera) {\n        // if (!this.active) return;\n\n        // Draw all areas\n        for (let i = 0; i < this.data.length; i++) {\n            const area = this.data[i];\n            const isSelected = i === this.selectedIndex;\n            const isHovered = i === this.hoveredIndex;\n            \n            const tl = camera.worldToScreen(area.x, area.y);\n            const br = camera.worldToScreen(area.x + area.width, area.y + area.height);\n            const w = br.x - tl.x;\n            const h = br.y - tl.y;\n            \n            const color = this.colors[area.type] || this.colors.trigger;\n            \n            // Fill\n            ShapeDrawer.fillRect(\n                canvas,\n                tl.x, tl.y, w, h,\n                color.r, color.g, color.b, color.a\n            );\n            \n            // Border\n            const borderWidth = isSelected ? 3 : (isHovered ? 2 : 1);\n            const borderAlpha = isSelected ? 255 : (isHovered ? 200 : 150);\n            ShapeDrawer.strokeRect(\n                canvas,\n                tl.x, tl.y, w, h,\n                borderWidth,\n                color.r, color.g, color.b, borderAlpha\n            );\n            \n            // Draw resize handles if selected\n            if (isSelected) {\n                const h = this.handleSize;\n                const corners = [\n                    { x: area.x, y: area.y }, // tl\n                    { x: area.x + area.width, y: area.y }, // tr\n                    { x: area.x, y: area.y + area.height }, // bl\n                    { x: area.x + area.width, y: area.y + area.height } // br\n                ];\n                \n                for (const corner of corners) {\n                    const sp = camera.worldToScreen(corner.x, corner.y);\n                    ShapeDrawer.fillRect(\n                        canvas,\n                        sp.x - h/2, sp.y - h/2, h, h,\n                        255, 255, 255, 200\n                    );\n                    ShapeDrawer.strokeRect(\n                        canvas,\n                        sp.x - h/2, sp.y - h/2, h, h,\n                        1,\n                        0, 0, 0, 255\n                    );\n                }\n            }\n        }\n\n        // Draw current area being created\n        if (this.isDragging && this.currentArea) {\n            const area = this.currentArea;\n            const tl = camera.worldToScreen(area.x, area.y);\n            const br = camera.worldToScreen(area.x + area.width, area.y + area.height);\n            const w = br.x - tl.x;\n            const h = br.y - tl.y;\n            \n            const color = this.colors[area.type];\n            \n            ShapeDrawer.fillRect(\n                canvas,\n                tl.x, tl.y, w, h,\n                color.r, color.g, color.b, color.a\n            );\n            \n            ShapeDrawer.strokeRect(\n                canvas,\n                tl.x, tl.y, w, h,\n                2,\n                color.r, color.g, color.b, 200\n            );\n        }\n\n        // Cursor\n        const cursorScreen = camera.worldToScreen(this.mouseWorldPos.x, this.mouseWorldPos.y);\n        ShapeDrawer.fillCircle(\n            canvas,\n            cursorScreen.x, cursorScreen.y,\n            4,\n            this.cursorColor.r,\n            this.cursorColor.g,\n            this.cursorColor.b,\n            this.cursorColor.a\n        );\n    }\n\n    exportData() {\n        return {\n            tool: this.name,\n            data: this.data.map(area => ({\n                x: area.x,\n                y: area.y,\n                width: area.width,\n                height: area.height,\n                type: area.type\n            }))\n        };\n    }\n\n    onImport() {\n        console.log(`[Area2DTool] Loaded ${this.data.length} areas`);\n    }\n}","import { writeFileSync, readFileSync, existsSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { mkdirSync } from 'node:fs';\n\nclass Serializer {\n    constructor() {\n        this.version = 1;\n        this.editorVersion = '0.1.0';\n        this.currentFilePath = null;\n    }\n\n    generateMetadata(toolManager) {\n        // Calculate world bounds from all placed objects\n        let minX = Infinity, maxX = -Infinity;\n        let minY = Infinity, maxY = -Infinity;\n\n        for (const [name, tool] of toolManager.tools) {\n            // SpawnPointTool\n            if (name === 'spawn' && tool.data.length > 0) {\n                for (const spawn of tool.data) {\n                    minX = Math.min(minX, spawn.x);\n                    maxX = Math.max(maxX, spawn.x);\n                    minY = Math.min(minY, spawn.y);\n                    maxY = Math.max(maxY, spawn.y);\n                }\n            }\n            \n            // PathTool\n            if (name === 'path' && tool.data.length > 0) {\n                for (const path of tool.data) {\n                    for (const node of path.nodes) {\n                        minX = Math.min(minX, node.x);\n                        maxX = Math.max(maxX, node.x);\n                        minY = Math.min(minY, node.y);\n                        maxY = Math.max(maxY, node.y);\n                    }\n                }\n            }\n        }\n\n        // Fallback if no objects placed\n        if (minX === Infinity) {\n            minX = maxX = minY = maxY = 0;\n        }\n\n        return {\n            created: new Date().toISOString(),\n            lastModified: new Date().toISOString(),\n            worldBounds: {\n                minX: Math.floor(minX),\n                maxX: Math.ceil(maxX),\n                minY: Math.floor(minY),\n                maxY: Math.ceil(maxY)\n            }\n        };\n    }\n\n    save(toolManager, filePath) {\n        const data = {\n            version: this.version,\n            editorVersion: this.editorVersion,\n            metadata: this.generateMetadata(toolManager),\n            tools: {}\n        };\n\n        // Collect data from all tools\n        for (const [name, tool] of toolManager.tools) {\n            const exported = tool.exportData();\n            data.tools[exported.tool] = {\n                data: exported.data\n            };\n        }\n\n        // Ensure directory exists\n        const dir = dirname(filePath);\n        if (!existsSync(dir)) {\n            mkdirSync(dir, { recursive: true });\n        }\n\n        // Write to file\n        const json = JSON.stringify(data, null, 2);\n        writeFileSync(filePath, json, 'utf8');\n        \n        this.currentFilePath = filePath;\n        \n        console.log(`[Serializer] Saved to ${filePath}`);\n        console.log(`[Serializer] Tools: ${Object.keys(data.tools).join(', ')}`);\n        \n        return data;\n    }\n\n    load(toolManager, filePath) {\n        if (!existsSync(filePath)) {\n            throw new Error(`[Serializer] File not found: ${filePath}`);\n        }\n\n        const json = readFileSync(filePath, 'utf8');\n        const data = JSON.parse(json);\n\n        // Version check\n        if (data.version !== this.version) {\n            console.warn(`[Serializer] Version mismatch: file is v${data.version}, expected v${this.version}`);\n            // In production: run migration here\n        }\n\n        // Clear existing tool data\n        for (const [name, tool] of toolManager.tools) {\n            tool.data = [];\n        }\n\n        // Map class names to registration keys\n        const toolNameMap = {\n            'SpawnPointTool': 'spawn',\n            'PathTool': 'path',\n            'Area2DTool': 'area'\n        };\n\n        // Import data into tools\n        for (const [toolName, toolData] of Object.entries(data.tools)) {\n            // Try direct lookup first, then use name map\n            let tool = toolManager.tools.get(toolName);\n            if (!tool) {\n                const mappedName = toolNameMap[toolName];\n                if (mappedName) {\n                    tool = toolManager.tools.get(mappedName);\n                }\n            }\n            \n            if (tool) {\n                tool.importData(toolData.data);\n                console.log(`[Serializer] Loaded ${toolData.data.length} items for ${toolName}`);\n            } else {\n                console.warn(`[Serializer] Tool not registered: ${toolName}`);\n            }\n        }\n\n        this.currentFilePath = filePath;\n        \n        console.log(`[Serializer] Loaded from ${filePath}`);\n        \n        return data;\n    }\n\n    quickSave(toolManager) {\n        if (!this.currentFilePath) {\n            console.error('[Serializer] No file path set - use saveAs first');\n            return null;\n        }\n        return this.save(toolManager, this.currentFilePath);\n    }\n}\n\n// Singleton instance\nexport const serializer = new Serializer();","import { editorCameraHandleInput } from \"./camera.js\";\nimport { ToolManager } from \"./tool-manager.js\";\nimport { Toolbar } from './toolbar.js';\nimport { PropertiesPanel } from './properties-panel.js';\nimport { SpawnPointTool } from \"./tools/spawn.js\";\nimport { PathTool } from \"./tools/path.js\";\nimport { Area2DTool } from './tools/area.js';\nimport { serializer } from './serializer.js';\nimport { join } from 'node:path';\nimport { BitmapFont, ShapeDrawer, Input } from \"tessera.js\";\nimport { IMGUIContext } from \"../imgui/imgui_context.js\";\n\n\nlet running = false;\nlet renderer = null;\nlet canvas = null;\nlet scene = null;\nlet camera = null;\nlet inputMap = null;\nlet imguiContext = null;\nlet toolManager = null;\nlet editorFont;\nlet toolbar;\nlet propertiesPanel;\nlet assetPath = null;\n\n\nfunction initFont(renderer) {\n    editorFont = new BitmapFont(\n        renderer,\n        \"C:/Users/baned/Downloads/DejaVu Sans Mono (11).png\",\n        {\n            bitmapWidth: 512,\n            bitmapHeight: 512,\n            fontSize: 14,\n            cellWidth: 32,\n            cellHeight: 32,\n            cellsPerRow: 16,\n            cellsPerColumn: 16,\n            charSpacing: -20\n        }\n    );\n\n}\n\nfunction validateState(state) {\n    if (!state.renderer) {\n        throw new Error('[Editor] Missing renderer in state');\n    }\n    if (!state.scene) {\n        throw new Error('[Editor] Missing scene in state');\n    }\n    if (!state.canvas) {\n        throw new Error('[Editor] Missing canvas in state');\n    }\n\n    if (!state.inputMap) {\n        console.warn('[Editor] No inputMap provided - mouse controls may not work');\n    }\n}\n\nfunction initTools(scene, camera, assetPath_) {\n    const tm = new ToolManager(scene);\n\n    // Register tools\n    const spawnTool = new SpawnPointTool(camera);\n    const pathTool = new PathTool(camera);\n    const areaTool = new Area2DTool(camera);\n    tm.registerTool('spawn', spawnTool);\n    tm.registerTool(\"path\", pathTool)\n    tm.registerTool(\"area\", areaTool)\n\n    // Load existing asset file if it exists\n    if (assetPath_) {\n        try {\n            serializer.load(tm, assetPath_);\n        } catch (err) {\n            console.warn(`[Editor] Could not load asset file: ${err.message}`);\n        }\n    }\n\n    // Activate spawn tool by default\n    tm.setActiveTool('spawn');\n\n    return tm;\n}\n\n\n\nfunction handleEditorInput(inputMap, delta) {\n    // Tool hotkeys (1-9 keys)\n    let toolChanged = false\n    if (inputMap.input.isKeyPressed('1')) {\n        toolManager.setActiveTool('spawn');\n        toolChanged = true;\n    }\n    if (inputMap.input.isKeyPressed('2')) {\n        toolManager.setActiveTool('path');\n        toolChanged = true\n    }\n\n\n    if (inputMap.input.isKeyPressed('3')) {\n        toolManager.setActiveTool('area');\n        toolChanged = true\n\n    }\n\n\n    if (toolChanged && toolbar) {\n        toolbar.onToolChanged();\n    }\n    // // Save/Load hotkeys (we'll implement serialization next chapter)\n    // if (inputMap.input.isKeyPressed('S') && inputMap.input.isKeyDown('Control')) {\n    //     console.log('[Editor] Save requested (not implemented yet)');\n    //     // Prevent default browser save\n    // }\n    // if (inputMap.input.isKeyPressed('L') && inputMap.input.isKeyDown('Control')) {\n    //     console.log('[Editor] Load requested (not implemented yet)');\n    // }\n\n    const ctrlHeld = inputMap.input.isKeyDown('Control')\n\n\n    if (inputMap.input.isKeyPressed('S') && ctrlHeld) {\n        if (serializer.currentFilePath) {\n            serializer.quickSave(toolManager);\n        } else {\n            const defaultPath = assetPath || join(process.cwd(), 'editor-data', 'level.json');\n            serializer.save(toolManager, defaultPath);\n        }\n    }\n\n    if (inputMap.input.isKeyPressed('KeyL') && ctrlHeld) {\n        // Load from default location\n        const defaultPath = assetPath || join(process.cwd(), 'editor-data', 'level.json');\n        try {\n            serializer.load(toolManager, defaultPath);\n        } catch (err) {\n            console.error('[Editor] Load failed:', err.message);\n        }\n    }\n\n    if (inputMap.input.isKeyPressed('E') && ctrlHeld) {\n        const exportPath = join(process.cwd(), 'editor-data', `level-${Date.now()}.json`);\n        serializer.save(toolManager, exportPath);\n    }\n}\n\nfunction extendCamera(cam) {\n    // Add editor properties to the existing camera\n    cam._editorDragging = false;\n    cam._editorDragStartMouse = { x: 0, y: 0 };\n    cam._editorDragStartCameraPos = { x: 0, y: 0 };\n    cam._editorMinZoom = 0.1;\n    cam._editorMaxZoom = 10.0;\n    cam._editorZoomSpeed = 0.1;\n    cam._editorPanSpeed = 1.0;\n\n    // Attach handleInput method to the camera instance\n    cam.handleInput = editorCameraHandleInput;\n\n    return cam;\n}\n\nfunction cleanupCamera(cam) {\n    if (!cam) return;\n\n    // Remove editor properties\n    delete cam._editorDragging;\n    delete cam._editorDragStartMouse;\n    delete cam._editorDragStartCameraPos;\n    delete cam._editorMinZoom;\n    delete cam._editorMaxZoom;\n    delete cam._editorZoomSpeed;\n    delete cam._editorPanSpeed;\n\n    // Remove the handleInput method\n    delete cam.handleInput;\n}\n\nfunction startRenderer(renderer, canvas) {\n    renderer.onRender(() => {\n        canvas.draw(0, 0);\n\n        // Debug draw original game camera bounds\n        if (originalCamViewWidth > 0 && originalCamViewHeight > 0) {\n            const halfWidth = originalCamViewWidth / 2;\n            const halfHeight = originalCamViewHeight / 2;\n            ShapeDrawer.strokeRect(\n                renderer,\n                camera.position.x - halfWidth,\n                camera.position.y - halfHeight,\n                originalCamViewWidth,\n                originalCamViewHeight,\n                { r: 1, g: 0.2, b: 0.2, a: 0.8 },\n                2\n            );\n        }\n\n        // Editor HUD\n        renderer.drawText(\n            `[EDITOR MODE]`,\n            { x: 10, y: 10 },\n            14,\n            { r: 1, g: 0.5, b: 0, a: 1 }\n        );\n\n        renderer.drawText(\n            `Camera: (${camera.position.x.toFixed(1)}, ${camera.position.y.toFixed(1)}) Zoom: ${camera.zoom.toFixed(2)}`,\n            { x: 10, y: 30 },\n            12,\n            { r: 0.8, g: 0.8, b: 0.8, a: 1 }\n        );\n\n\n        if (toolManager && toolManager.activeTool) {\n            renderer.drawText(\n                `Tool: ${toolManager.activeTool.name}`,\n                { x: 10, y: 50 },\n                12,\n                { r: 0.5, g: 1, b: 0.5, a: 1 }\n            );\n\n            // Show spawn count\n            const tool = toolManager.activeTool;\n            if (tool.name === 'SpawnPointTool') {\n                renderer.drawText(\n                    `Spawns: ${tool.data.length}`,\n                    { x: 10, y: 70 },\n                    12,\n                    { r: 0.8, g: 0.8, b: 0.8, a: 1 }\n                );\n            } else if (tool.name === 'PathTool') {\n                const totalNodes = tool.data.reduce((sum, path) => sum + path.nodes.length, 0);\n                renderer.drawText(\n                    `Paths: ${tool.data.length} | Nodes: ${totalNodes}`,\n                    { x: 10, y: 70 },\n                    12,\n                    { r: 0.8, g: 0.8, b: 0.8, a: 1 }\n                );\n            }\n\n        }\n\n        renderer.drawText(\n            `Ctrl+S: Save | Ctrl+L: Load | Ctrl+E: Export`,\n            { x: 10, y: canvas.height - 25 },\n            11,\n            { r: 0.6, g: 0.6, b: 0.6, a: 1 }\n        );\n    });\n}\n\nlet lastTime = Date.now();\nlet processOnce = false\nlet originalCamViewWidth = 0;\nlet originalCamViewHeight = 0;\n\nfunction loop() {\n    if (!running) return;\n\n    const now = Date.now();\n    const delta = (now - lastTime) / 1000;\n    lastTime = now;\n\n    renderer.input.GetInput();\n\n    // Update IMGUI context first\n    if (imguiContext) {\n        imguiContext.beginFrame();\n    }\n\n    // Update UI bounding boxes dynamically (properties panel visibility changes)\n    if (toolManager && toolbar && propertiesPanel) {\n        const uiBounds = toolbar.getBounds();\n        const propBounds = propertiesPanel.getBounds();\n\n\n\n        // Update tool manager with current bounds\n        for (const [name, tool] of toolManager.tools) {\n            tool.setUIBounds(uiBounds);\n            tool.setUIBounds(propBounds);\n        }\n    }\n\n    camera.setViewSize(canvas.width, canvas.height);\n\n    // update camera (handles pan/zoom)\n    handleEditorInput(inputMap, delta);\n    //  if (toolbar) {\n    //      toolbar.handleInput(inputMap);\n    //      toolbar.update(delta);\n    //  }\n    camera.handleInput(inputMap, delta);\n    if (toolManager) {\n        toolManager.handleInput(inputMap, delta);\n    }\n    canvas.clear(30, 30, 35, 255);\n    // if (!processOnce) {\n    // scene.process(delta);\n    // processOnce = true;\n    // }\n\n    scene.draw();\n    if (toolbar) {\n        toolbar.draw();\n    }\n    if (propertiesPanel) {\n        propertiesPanel.draw(imguiContext);\n    }\n\n    if (imguiContext) {\n        imguiContext.endFrame();\n    }\n\n    canvas.upload();\n\n    if (renderer.step()) {\n        setImmediate(loop);\n    } else {\n        running = false;\n        renderer.shutdown();\n        process.exit(0);\n    }\n}\n\nexport default {\n    cleanup() {\n        running = false;\n        cleanupCamera(camera);\n    },\n\n    init(state, assetPath_) {\n        validateState(state);\n\n        if (!running) {\n            renderer = state.renderer;\n            canvas = state.canvas;\n            scene = state.scene;\n            inputMap = state.inputMap;\n            inputMap.MapMouseAction(\"primary\", [0]);\n            assetPath = assetPath_\n            // console.log(assetPath)\n\n            // Cache original camera bounds before extending it\n            originalCamViewWidth = state.scene.camera.viewWidth;\n            originalCamViewHeight = state.scene.camera.viewHeight;\n\n            camera = extendCamera(state.scene.camera);\n            toolManager = initTools(scene, camera, assetPath);\n            initFont(renderer)\n            // Create IMGUI context for UI\n            imguiContext = new IMGUIContext(canvas, inputMap);\n            imguiContext.input_ = new Input(renderer.input)\n\n            toolbar = new Toolbar(canvas, toolManager, editorFont);\n            toolbar.setIMGUIContext(imguiContext);\n\n            // Create properties panel\n            propertiesPanel = new PropertiesPanel(canvas,editorFont, toolManager);\n\n            // Set properties panel for tools\n            const spawnTool = toolManager.tools.get('spawn');\n            if (spawnTool) {\n                spawnTool.setPropertiesPanel(propertiesPanel);\n            }\n\n            const pathTool = toolManager.tools.get('path');\n            if (pathTool) {\n                pathTool.setPropertiesPanel(propertiesPanel);\n            }\n\n            const areaTool = toolManager.tools.get('area');\n            if (areaTool) {\n                areaTool.setPropertiesPanel(propertiesPanel);\n            }\n\n            // Combine UI bounds: toolbar + properties panel\n            const uiBounds = toolbar.getBounds();\n            const propBounds = propertiesPanel.getBounds();\n\n            // Create a combined bounds that covers both UI areas\n\n\n            // Pass combined bounds to tool manager\n            toolManager.setUIBounds(uiBounds);\n            toolManager.setUIBounds(propBounds);\n\n            running = true;\n            lastTime = Date.now();\n\n            console.log('[Editor] Initialized - use mouse to pan/zoom');\n            scene.start()\n            startRenderer(renderer, canvas);\n            loop();\n        }\n    }\n};"],"names":["getModulePaths","fileURLToPath","dirname","createRequire","__filename","__dirname","clampRectToCanvas","shouldDrawPixel","decode","encode","names","intToRGBA","tinyColor","BMP.encode","BMP.decode","gif","require$$0","require$$1","require$$2","require$$3","require$$4","require$$5","exports","BitmapImage","GifUtil","GifFrame","GifCodec","jpeg","chunkstreamModule","filterParseModule","filterParseAsyncModule","constants","crcModule","parserModule","require$$6","parserAsyncModule","packerModule","packerAsyncModule","syncReaderModule","png","PNG","deflate","deflate_1","inflate","inflate_1","require","util","defaultErrorMap","z.object","z.union","z.instanceof","z.number","methods","z.array","z.nativeEnum","z.literal","z.tuple","Deferred_1","Deferred","AbstractTokenizer_1","AbstractTokenizer","ReadStreamTokenizer_1","ReadStreamTokenizer","BufferTokenizer_1","BufferTokenizer","fs","existsSync","Resize2","resizeMethods","blitMethods","z.boolean","z\n        .object","cropMethods","color","c","z.string","z\n        .function","x","utils","blit.methods","blur.methods","circle.methods","color.methods","contain.methods","cover.methods","crop.methods","displace.methods","dither.methods","fisheye.methods","flip.methods","hash.methods","mask.methods","print.methods","resize.methods","rotate.methods","threshold.methods","quantize.methods","path","pathToFileURL","watch","vec2","lerp","isFinite","Serializer","Box","Circle","Polygon","Edge","LineDrawer","resolve","extname","readFileSync","mkdirSync","writeFileSync","join"],"mappings":"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,CAAA,MAAc,GAAG,YAAY,CAAC,WAAW,CAAC;AAe1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;CCt2FA,MAAM,WAAW,GAAGC,kBAAA,EAAwB;AA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,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC;KACL;AACH;AACA,GAAC,IAAI,0BAA0B,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;GACpE,IAAI,yBAAyB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5D,GAAC,IAAI,0BAA0B,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;GACvE,IAAI,yBAAyB,GAAG;AACjC,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,KAAG,IAAI,CAAC;KACL;AACH;AACA,GAAC,SAAS,eAAe,CAAC,EAAE,CAAC;KAC1B,IAAI,GAAG,GAAG;AACb,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;MAC5B;AACJ;AACA,KAAG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAChC,MAAI,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC;AACtC,MAAI,IAAI,CAAC,GAAG,CAAC,EAAE;OACV,CAAC,GAAG,CAAC;AACV,MAAA,CAAK,MAAM,IAAI,CAAC,GAAG,GAAG,EAAE;OACnB,CAAC,GAAG,GAAG;AACZ,MAAA;MACI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACzB,KAAA;KACG,IAAI,IAAI,GAAG;AACd,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;MAC5B;AACJ,KAAG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAChC,MAAI,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC;AACvC,MAAI,IAAI,CAAC,GAAG,CAAC,EAAE;OACV,CAAC,GAAG,CAAC;AACV,MAAA,CAAK,MAAM,IAAI,CAAC,GAAG,GAAG,EAAE;OACnB,CAAC,GAAG,GAAG;AACZ,MAAA;MACI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1B,KAAA;KACG,IAAI,IAAI,GAAG;AACd,MAAI,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW;AAC9C,MAAI,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE;MAC/B;KACD,IAAI,CAAC,GAAG,CAAC;KACT,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;KAChC;MACC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;MAChC;OACC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;OACxE,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC7E,OAAK,CAAC,EAAE;AACR,MAAA;AACA,KAAA;AACA,IAAA;AACA;AACA,IAAE,SAAS,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC;KAC7C,IAAI,SAAS,GAAG,CAAC;KACjB,IAAI,YAAY,GAAG,CAAC;AACvB,KAAG,IAAI,EAAE,GAAG,IAAI,KAAK,EAAE;AACvB,KAAG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;AACjC,MAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;OACrC,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE;OAChC,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;OAC1C,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACvC,OAAK,YAAY,EAAE;AACnB,OAAK,SAAS,EAAE;AAChB,MAAA;MACI,SAAS,EAAE,CAAC;AAChB,KAAA;AACA,KAAG,OAAO,EAAE;AACZ,IAAA;AACA;AACA,IAAE,SAAS,cAAc;IACvB;AACF,KAAG,MAAM,GAAG,iBAAiB,CAAC,wBAAwB,CAAC,uBAAuB,CAAC;AAC/E,KAAG,OAAO,GAAG,iBAAiB,CAAC,0BAA0B,CAAC,yBAAyB,CAAC;AACpF,KAAG,MAAM,GAAG,iBAAiB,CAAC,wBAAwB,CAAC,uBAAuB,CAAC;AAC/E,KAAG,OAAO,GAAG,iBAAiB,CAAC,0BAA0B,CAAC,yBAAyB,CAAC;AACpF,IAAA;AACA;AACA,IAAE,SAAS,kBAAkB;IAC3B;KACC,IAAI,OAAO,GAAG,CAAC;KACf,IAAI,OAAO,GAAG,CAAC;AAClB,KAAG,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;AACvC;AACA,MAAI,KAAK,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE;AAC7C,OAAK,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG;AAC7B,OAAK,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE;OACtB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;OAC1B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC9B,MAAA;AACA;AACA,MAAI,KAAK,IAAI,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;AAC5D,OAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG;AAChC,OAAK,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;OACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;AAClC,OAAK,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK;AAC9C,MAAA;MACI,OAAO,KAAK,CAAC;MACb,OAAO,KAAK,CAAC;AACjB,KAAA;AACA,IAAA;AACA;IACE,SAAS,eAAe,GAAG;AAC7B,KAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE;AAC/B,MAAI,aAAa,CAAC,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC;AACxC,MAAI,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC;AAC5C,MAAI,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM;AACrD,MAAI,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC;AAC5C,MAAI,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC;AAC5C,MAAI,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,GAAG,QAAQ;AACvD,MAAI,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC;AAC5C,MAAI,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,KAAM,GAAG,CAAC;AAC5C,KAAA;AACA,IAAA;AACA;AACA;IACE,SAAS,SAAS,CAAC,EAAE;IACrB;AACF,KAAG,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;KACjB,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,KAAG,QAAQ,MAAM,IAAI,CAAC,GAAG;AACzB,MAAI,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG;AAChC,OAAK,OAAO,KAAK,CAAC,IAAI,OAAO,CAAC;AAC9B,MAAA;AACA,MAAI,MAAM,EAAE;AACZ,MAAI,OAAO,EAAE;AACb,MAAI,IAAI,OAAO,GAAG,CAAC,EAAE;AACrB,OAAK,IAAI,OAAO,IAAI,IAAI,EAAE;QACpB,SAAS,CAAC,IAAI,CAAC;QACf,SAAS,CAAC,CAAC,CAAC;AAClB,OAAA;YACU;QACJ,SAAS,CAAC,OAAO,CAAC;AACxB,OAAA;OACK,OAAO,CAAC,CAAC;OACT,OAAO,CAAC,CAAC;AACd,MAAA;AACA,KAAA;AACA,IAAA;AACA;IACE,SAAS,SAAS,CAAC,KAAK;IACxB;AACF;AACA,QAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,IAAA;AACA;IACE,SAAS,SAAS,CAAC,KAAK;IACxB;KACC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;AAC7B,KAAG,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;AAC7B,IAAA;AACA;AACA;AACA,IAAE,SAAS,SAAS,CAAC,IAAI,EAAE,KAAK;IAC9B;AACF,KAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACrC;KACG,IAAI,OAAO,CAAC,CAAC;AAChB,KAAG,IAAI,CAAC;KACL,IAAI,EAAE,GAAG,CAAC;KACV,IAAI,GAAG,GAAG,EAAE;KACZ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;KACnB;AACH,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AACtB,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACxB,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACxB,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACxB,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACxB,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACxB,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACxB,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACxB;AACA,MAAI,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;AACtB,MAAI,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;AACtB,MAAI,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;AACtB,MAAI,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;AACtB,MAAI,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;AACtB,MAAI,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;AACtB,MAAI,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;AACtB,MAAI,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;AACtB;AACA;AACA,MAAI,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5B,MAAI,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;AAC3B,MAAI,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;AAC3B,MAAI,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;AAC3B;MACI,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;MAC9B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK;AACnC;MACI,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,WAAW,CAAC;MACvC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;MAC7B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;AAChC;AACA;AACA,MAAI,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;AACxB,MAAI,KAAK,GAAG,IAAI,GAAG,IAAI;AACvB,MAAI,KAAK,GAAG,IAAI,GAAG,IAAI;AACvB;AACA;MACI,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,WAAW,CAAC;MACvC,IAAI,EAAE,GAAG,WAAW,GAAG,KAAK,GAAG,EAAE,CAAC;MAClC,IAAI,EAAE,GAAG,WAAW,GAAG,KAAK,GAAG,EAAE,CAAC;AACtC,MAAI,IAAI,EAAE,GAAG,KAAK,GAAG,WAAW,CAAC;AACjC;AACA,MAAI,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;AACxB,MAAI,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE;AACvB;MACI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;MAC3B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE;MAC1B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE;MAC1B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE;AAC9B;MACI,OAAO,IAAI,CAAC,CAAC;AACjB,KAAA;AACA;AACA;KACG,OAAO,GAAG,CAAC;KACX,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;KACnB;AACH,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AACtB,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AAC1B,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAC3B,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAC3B,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAC3B,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAC3B,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAC3B,MAAI,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAC3B;AACA,MAAI,IAAI,MAAM,GAAG,EAAE,GAAG,EAAE;AACxB,MAAI,IAAI,MAAM,GAAG,EAAE,GAAG,EAAE;AACxB,MAAI,IAAI,MAAM,GAAG,EAAE,GAAG,EAAE;AACxB,MAAI,IAAI,MAAM,GAAG,EAAE,GAAG,EAAE;AACxB,MAAI,IAAI,MAAM,GAAG,EAAE,GAAG,EAAE;AACxB,MAAI,IAAI,MAAM,GAAG,EAAE,GAAG,EAAE;AACxB,MAAI,IAAI,MAAM,GAAG,EAAE,GAAG,EAAE;AACxB,MAAI,IAAI,MAAM,GAAG,EAAE,GAAG,EAAE;AACxB;AACA;AACA,MAAI,IAAI,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAClC,MAAI,IAAI,OAAO,GAAG,MAAM,GAAG,MAAM;AACjC,MAAI,IAAI,OAAO,GAAG,MAAM,GAAG,MAAM;AACjC,MAAI,IAAI,OAAO,GAAG,MAAM,GAAG,MAAM;AACjC;MACI,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC;MAClC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,OAAO;AACxC;MACI,IAAI,IAAI,GAAG,CAAC,OAAO,GAAG,OAAO,IAAI,WAAW,CAAC;MAC7C,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;MAClC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,IAAI;AACrC;AACA;AACA,MAAI,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAC9B,MAAI,OAAO,GAAG,MAAM,GAAG,MAAM;AAC7B,MAAI,OAAO,GAAG,MAAM,GAAG,MAAM;AAC7B;AACA;MACI,IAAI,IAAI,GAAG,CAAC,OAAO,GAAG,OAAO,IAAI,WAAW,CAAC;MAC7C,IAAI,IAAI,GAAG,WAAW,GAAG,OAAO,GAAG,IAAI,CAAC;MACxC,IAAI,IAAI,GAAG,WAAW,GAAG,OAAO,GAAG,IAAI,CAAC;AAC5C,MAAI,IAAI,IAAI,GAAG,OAAO,GAAG,WAAW,CAAC;AACrC;AACA,MAAI,IAAI,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;AAC9B,MAAI,IAAI,KAAK,GAAG,MAAM,GAAG,IAAI;AAC7B;MACI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;MAChC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI;MAC/B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI;MAC/B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI;AACnC;MACI,OAAO,EAAE,CAAC;AACd,KAAA;AACA;AACA;AACA,KAAG,IAAI,SAAS;KACb,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;KACpB;AACH;MACI,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;MAC5B,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;AAC1F;;AAEA,KAAA;AACA,KAAG,OAAO,eAAe;AACzB,IAAA;AACA;AACA,IAAE,SAAS,SAAS;IAClB;AACF,KAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACrB,KAAG,SAAS,CAAC,EAAE,CAAC,CAAC;AACjB,KAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,KAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,KAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,KAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,IAAA;;AAEA,IAAE,SAAS,SAAS,CAAC,UAAU,EAAE;KAC9B,IAAI,CAAC,UAAU,EAAE;;AAEpB,KAAG,SAAS,CAAC,MAAM,CAAC,CAAC;;AAErB,KAAG,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AAC7B,OAAK,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AAC3B,OAAK,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AAC3B,OAAK,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AAC7B;MACI,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrC,KAAA,CAAI,MAAM;AACV;MACI,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,MAAI,SAAS,CAAC,IAAI,CAAC,CAAC;AACpB,MAAI,SAAS,CAAC,IAAI,CAAC,CAAC;AACpB,MAAI,SAAS,CAAC,IAAI,CAAC,CAAC;AACpB,MAAI,SAAS,CAAC,IAAI,CAAC,CAAC;AACpB,MAAI,SAAS,CAAC,CAAC,CAAC,CAAC;AACjB,KAAA;;AAEA,KAAG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,MAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5B,KAAA;AACA,IAAA;;AAEA,IAAE,SAAS,SAAS,CAAC,KAAK,EAAE,MAAM;IAChC;AACF,KAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACrB,KAAG,SAAS,CAAC,EAAE,CAAC,CAAC;AACjB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;KACb,SAAS,CAAC,MAAM,CAAC;KACjB,SAAS,CAAC,KAAK,CAAC;AACnB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,IAAA;AACA;AACA,IAAE,SAAS,QAAQ;IACjB;AACF,KAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACrB,KAAG,SAAS,CAAC,GAAG,CAAC,CAAC;KACf,SAAS,CAAC,CAAC,CAAC;AACf,KAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;AAC5B,MAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,KAAA;KACG,SAAS,CAAC,CAAC,CAAC;AACf,KAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;AAC5B,MAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,KAAA;AACA,IAAA;AACA;AACA,IAAE,SAAS,QAAQ;IACjB;AACF,KAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACrB,KAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACrB;AACA,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;MACxB,SAAS,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,KAAA;AACA,KAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;AAC7B,MAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;AACzC,KAAA;AACA;AACA,KAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,KAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;MACxB,SAAS,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,KAAA;AACA,KAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;AAC9B,MAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;AACzC,KAAA;AACA;AACA,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;MACxB,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,KAAA;AACA,KAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;AAC7B,MAAI,SAAS,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAC3C,KAAA;AACA;AACA,KAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,KAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;MACxB,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,KAAA;AACA,KAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;AAC9B,MAAI,SAAS,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAC3C,KAAA;AACA,IAAA;AACA;IACE,SAAS,QAAQ,CAAC,QAAQ;IAC1B;KACC,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,WAAW,KAAK,KAAK,EAAE;AAC1E,KAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI;AACzB,MAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AAC/B,MAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AACtB,MAAI,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM;AACpB,MAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,MAAI,IAAI,CAAC;MACL,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;OACrB,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC/B,KAAA,CAAI,CAAC;AACL,IAAA;AACA;AACA,IAAE,SAAS,QAAQ;IACjB;AACF,KAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACrB,KAAG,SAAS,CAAC,EAAE,CAAC,CAAC;AACjB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,KAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,KAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,IAAA;AACA;AACA,IAAE,SAAS,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC;AAChD,KAAG,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;AACvB,KAAG,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7B,KAAG,IAAI,GAAG;KACP,IAAI,GAAG,GAAG,EAAE;KACZ,IAAI,GAAG,GAAG,EAAE;KACZ,IAAI,GAAG,GAAG,EAAE;KACZ,IAAI,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC;AACrC;AACA,KAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;MACvB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3B,KAAA;AACA,KAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACpC;AACA,KAAG,IAAI,IAAI,EAAE,CAAC,EAAE;AAChB,MAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,KAAA,CAAI,MAAM;AACV,MAAI,GAAG,GAAG,KAAK,CAAC,IAAI;MAChB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,MAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC3B,KAAA;AACA;AACA,KAAG,IAAI,OAAO,GAAG,EAAE,CAAC;AACpB,KAAG,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAA,CACpD;AACA,KAAG,KAAK,OAAO,IAAI,CAAC,EAAE;MAClB,SAAS,CAAC,GAAG,CAAC;AAClB,MAAI,OAAO,EAAE;AACb,KAAA;KACG,IAAI,CAAC,GAAG,CAAC;AACZ,KAAG,IAAI,GAAG;AACV,KAAG,QAAQ,CAAC,IAAI,OAAO,GAAG;MACtB,IAAI,QAAQ,GAAG,CAAC;AACpB,MAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;AAC5C,MAAI,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ;AAC7B,MAAI,KAAK,QAAQ,IAAI,GAAG,GAAG;AAC3B,OAAK,GAAG,GAAG,QAAQ,EAAE,CAAC;OACjB,KAAK,IAAI,QAAQ,CAAC,CAAC,EAAE,QAAQ,IAAI,GAAG,EAAE,EAAE,QAAQ;QAC/C,SAAS,CAAC,SAAS,CAAC;AAC1B,OAAK,QAAQ,GAAG,QAAQ,CAAC,GAAG;AAC5B,MAAA;AACA,MAAI,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACrB,MAAI,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD,MAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC3B,MAAI,CAAC,EAAE;AACP,KAAA;AACA,KAAG,KAAK,OAAO,IAAI,GAAG,GAAG;MACrB,SAAS,CAAC,GAAG,CAAC;AAClB,KAAA;AACA,KAAG,OAAO,EAAE;AACZ,IAAA;;IAEE,SAAS,mBAAmB,EAAE;AAChC,KAAG,IAAI,IAAI,GAAG,MAAM,CAAC,YAAY;AACjC,KAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;MACzB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACpB,KAAA;AACA,IAAA;AACA;AACA,IAAE,IAAI,CAAC,MAAM,GAAG,SAAS,KAAK,CAAC,OAAO;IACpC;KACkB,IAAI,IAAI,EAAE,CAAC,OAAO;AACtC;AACA,KAAG,GAAG,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;AAClC;AACA;AACA,KAAG,OAAO,GAAG,IAAI,KAAK,EAAE;KACrB,OAAO,CAAC,CAAC;KACT,OAAO,CAAC,CAAC;AACZ;AACA;AACA,KAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACrB,KAAG,SAAS,EAAE;AACd,KAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC3B,KAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;AAC9B,KAAG,QAAQ,EAAE;KACV,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AACtC,KAAG,QAAQ,EAAE;AACb,KAAG,QAAQ,EAAE;;AAEb;AACA;KACG,IAAI,GAAG,CAAC,CAAC;KACT,IAAI,GAAG,CAAC,CAAC;KACT,IAAI,GAAG,CAAC,CAAC;AACZ;KACG,OAAO,CAAC,CAAC;KACT,OAAO,CAAC,CAAC;AACZ;AACA;AACA,KAAG,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU;;AAEvC,KAAG,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI;AAC7B,KAAG,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;AAC1B,KAAG,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;;AAE5B,KAAG,IAAI,SAAS,GAAG,KAAK,CAAC,CAAC;AAE1B;AACA,KAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;AACf,KAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;KACX,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG;AAC3B,KAAG,MAAM,CAAC,GAAG,MAAM,CAAC;MAChB,CAAC,GAAG,CAAC;AACT,MAAI,MAAM,CAAC,GAAG,SAAS,CAAC;AACxB,MAAI,KAAK,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC;MACzB,CAAC,GAAG,KAAK;MACT,GAAG,GAAG,EAAE;MACR,GAAG,GAAG,CAAC;AACX;MACI,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC;AAC/B,OAAK,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;OACf,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;OACtB,CAAC,GAAG,KAAK,KAAK,GAAG,GAAG,SAAS,EAAE,GAAG,GAAG,CAAC;AAC3C;AACA,OAAK,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC;AACxB,QAAM,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtC,OAAA;;AAEA,OAAK,GAAG,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC;QACrB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC;AACjC,OAAA;AACA;AACA,OAAK,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACzB,OAAK,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACzB,OAAK,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,aAAa,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG;AACxH,OAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG;AACxH,OAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG;;AAExH,MAAA;AACA;AACA,MAAI,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;AACtD,MAAI,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;AACzD,MAAI,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;MACrD,CAAC,EAAE,EAAE;AACT,MAAA;MACI,CAAC,EAAE,CAAC;AACR,KAAA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG,KAAK,OAAO,IAAI,CAAC,GAAG;MACnB,IAAI,QAAQ,GAAG,EAAE;AACrB,MAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AAC3B,MAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;MAChC,SAAS,CAAC,QAAQ,CAAC;AACvB,KAAA;AACA;AACA,KAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAGrB,QAAM,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAYjC,GAAA;AACA;AACA,GAAC,SAAS,UAAU,CAAC,OAAO,CAAC;AAC7B,IAAE,IAAI,OAAO,IAAI,CAAC,EAAE;KACjB,OAAO,GAAG,CAAC;AACd,IAAA;AACA,IAAE,IAAI,OAAO,GAAG,GAAG,EAAE;KAClB,OAAO,GAAG,GAAG;AAChB,IAAA;AACA;AACA,IAAE,GAAG,cAAc,IAAI,OAAO,EAAE,MAAM;AACtC;IACE,IAAI,EAAE,GAAG,CAAC;AACZ,IAAE,IAAI,OAAO,GAAG,EAAE,EAAE;KACjB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;AAClC,IAAA,CAAG,MAAM;KACN,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;AACnC,IAAA;AACA;IACE,eAAe,CAAC,EAAE,CAAC;IACnB,cAAc,GAAG,OAAO;AAC1B;AACA,GAAA;AACA;GACC,SAAS,IAAI,EAAE;IACd,IAAI,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AACvC,IAAE,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE;AAC3B;AACA,IAAE,mBAAmB;AACrB,IAAE,cAAc,EAAE;AAClB,IAAE,kBAAkB,EAAE;AACtB,IAAE,eAAe,EAAE;AACnB;IACE,UAAU,CAAC,OAAO,CAAC;IACJ,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG;AACxC;AACA,GAAA;AACA;AACA,GAAC,IAAI,EAAE;AACP;EACA;EAEmC;AACnC,GAAC,iBAAiB,MAAM;AACxB,EAAA;;AAKA,EAAA,SAAS,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE;IAC3B,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE,EAAE,GAAG,EAAE;AACxC,IAAE,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;GAClC,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;AACvC,IAAE,OAAO;MACL,IAAI,EAAE,IAAI;AACd,MAAI,KAAK,EAAE,OAAO,CAAC,KAAK;AACxB,MAAI,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB;AACH,EAAA;;;;;;;;;;;;;;;;AC/xBA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAA,IAAI,SAAS,GAAG,CAAC,SAAS,SAAS,GAAG;AAEtC,IAAE,IAAI,SAAS,GAAG,IAAI,UAAU,CAAC;AACjC,OAAK,CAAC;OACD,CAAC,GAAG,CAAC;AACV,MAAI,EAAE,GAAG,CAAC,GAAG,CAAC;AACd,OAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;MACd,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;OAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC1B,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAC9B,OAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;MAC1B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;MACtB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACtB,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClB,MAAI,EAAE,EAAE,EAAE,EAAE,EAAE;MACV,EAAE,EAAE,EAAE;MACN;AACJ,KAAG,CAAC;;IAEF,IAAI,OAAO,KAAK,KAAI;IACpB,IAAI,OAAO,MAAM,IAAG;IACpB,IAAI,OAAO,KAAK,KAAI;IACpB,IAAI,OAAO,KAAK,KAAI;IACpB,IAAI,OAAO,KAAK,KAAI;IACpB,IAAI,OAAO,KAAK,KAAI;IACpB,IAAI,QAAQ,IAAI,KAAI;IACpB,IAAI,UAAU,GAAG,KAAI;;IAErB,SAAS,WAAW,GAAG;AACzB,IAAA;;AAEA,IAAE,SAAS,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE;AAClD,MAAI,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE;MACvC,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,QAAM,MAAM,EAAE;AACd,MAAI,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;MACnC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;MAClB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACjC,QAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,UAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,UAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACvC,UAAQ,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;AAC5B,YAAU,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAC/B,cAAY,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;AAC/D,YAAU,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AACxB,UAAA;UACQ,CAAC,CAAC,KAAK,EAAE;AACjB,UAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpB,UAAQ,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AACjC,YAAU,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ;YAChC,CAAC,GAAG,CAAC;AACf,UAAA;AACA,UAAQ,CAAC,EAAE;AACX,QAAA;AACA,QAAM,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;AAC1B;AACA,UAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;UACvC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ;UAChC,CAAC,GAAG,CAAC;AACb,QAAA;AACA,MAAA;AACA,MAAI,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AAC3B,IAAA;;AAEA,IAAE,SAAS,UAAU,CAAC,IAAI,EAAE,MAAM;AAClC,wBAAsB,KAAK,EAAE,UAAU,EAAE,aAAa;wBAChC,aAAa,EAAE,WAAW;AAChD,wBAAsB,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE;AACxD,MAAoB,KAAK,CAAC;AAC1B,MAAyB,KAAK,CAAC;AAC/B,MAAoB,KAAK,CAAC;AAC1B,MAAI,IAAI,WAAW,GAAG,KAAK,CAAC,WAAW;AACvC,MAAI,IAAI,WAAW,GAAG,KAAK,CAAC,WAAW;MACxB,KAAK,CAAC,IAAI,CAAA,CAAS,KAAK,CAAC;;MAEpC,IAAI,WAAW,GAAG,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC;MACrD,SAAS,OAAO,GAAG;AACvB,QAAM,IAAI,SAAS,GAAG,CAAC,EAAE;AACzB,UAAQ,SAAS,EAAE;AACnB,UAAQ,OAAO,CAAC,QAAQ,IAAI,SAAS,IAAI,CAAC;AAC1C,QAAA;AACA,QAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC/B,QAAM,IAAI,QAAQ,IAAI,IAAI,EAAE;AAC5B,UAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;UAC7B,IAAI,QAAQ,EAAE;AACtB,YAAU,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5F,UAAA;AACA;AACA,QAAA;QACM,SAAS,GAAG,CAAC;QACb,OAAO,QAAQ,KAAK,CAAC;AAC3B,MAAA;AACA,MAAI,SAAS,aAAa,CAAC,IAAI,EAAE;AACjC,QAAM,IAAI,IAAI,GAAG,IAAI,EAAE,GAAG;QACpB,OAAO,CAAC,GAAG,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE;AACzC,UAAQ,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;AACxB,UAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ;AACpC,YAAU,OAAO,IAAI;AACrB,UAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ;AACpC,YAAU,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;AACrD,QAAA;AACA,QAAM,OAAO,IAAI;AACjB,MAAA;AACA,MAAI,SAAS,OAAO,CAAC,MAAM,EAAE;QACvB,IAAI,CAAC,GAAG,CAAC;AACf,QAAM,OAAO,MAAM,GAAG,CAAC,EAAE;AACzB,UAAQ,IAAI,GAAG,GAAG,OAAO,EAAE;AAC3B,UAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;AAC1B,UAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG;AAC1B,UAAQ,MAAM,EAAE;AAChB,QAAA;AACA,QAAM,OAAO,CAAC;AACd,MAAA;AACA,MAAI,SAAS,gBAAgB,CAAC,MAAM,EAAE;AACtC,QAAM,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC;AAChC,UAAQ,OAAO,CAAC;QACV,OAAO,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC;AACnC,MAAA;AACA,MAAI,SAAS,cAAc,CAAC,SAAS,EAAE,EAAE,EAAE;QACrC,IAAI,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC;AACrD,QAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;QAC5C,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC;AACf,QAAM,OAAO,CAAC,GAAG,EAAE,EAAE;UACb,IAAI,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC;UAChD,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;AACpC,UAAQ,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,IAAI,CAAC,GAAG,EAAE;cACR;YACF,CAAC,IAAI,EAAE;YACP;AACV,UAAA;UACQ,CAAC,IAAI,CAAC;AACd,UAAQ,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;UACpB,EAAE,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;AACnC,UAAQ,CAAC,EAAE;AACX,QAAA;AACA,MAAA;AACA,MAAI,SAAS,aAAa,CAAC,SAAS,EAAE,EAAE,EAAE;QACpC,IAAI,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC;AACrD,QAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;QAC5D,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC;AACtC,MAAA;AACA,MAAI,SAAS,kBAAkB,CAAC,SAAS,EAAE,EAAE,EAAE;QACzC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,IAAI,UAAU;AACtC,MAAA;MACI,IAAI,MAAM,GAAG,CAAC;AAClB,MAAI,SAAS,aAAa,CAAC,SAAS,EAAE,EAAE,EAAE;AAC1C,QAAM,IAAI,MAAM,GAAG,CAAC,EAAE;AACtB,UAAQ,MAAM,EAAE;UACR;AACR,QAAA;AACA,QAAM,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,WAAW;AAC5C,QAAM,OAAO,CAAC,IAAI,CAAC,EAAE;UACb,IAAI,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC;UAChD,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;AACpC,UAAQ,IAAI,CAAC,KAAK,CAAC,EAAE;AACrB,YAAU,IAAI,CAAC,GAAG,EAAE,EAAE;AACtB,cAAY,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;cAClC;AACZ,YAAA;YACU,CAAC,IAAI,EAAE;YACP;AACV,UAAA;UACQ,CAAC,IAAI,CAAC;AACd,UAAQ,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAC5B,UAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC;AACvD,UAAQ,CAAC,EAAE;AACX,QAAA;AACA,MAAA;AACA,MAAI,IAAI,iBAAiB,GAAG,CAAC,EAAE,qBAAqB;AACpD,MAAI,SAAS,kBAAkB,CAAC,SAAS,EAAE,EAAE,EAAE;QACzC,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,CAAC;AACnD,QAAM,OAAO,CAAC,IAAI,CAAC,EAAE;AACrB,UAAQ,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAC5B,UAAQ,IAAI,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AAC1C,UAAQ,QAAQ,iBAAiB;AACjC,UAAQ,KAAK,CAAC;YACJ,IAAI,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC;YAChD,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;AACtC,YAAU,IAAI,CAAC,KAAK,CAAC,EAAE;AACvB,cAAY,IAAI,CAAC,GAAG,EAAE,EAAE;gBACV,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9B,iBAAiB,GAAG,CAAC;AACnC,cAAA,CAAa,MAAM;gBACL,CAAC,GAAG,EAAE;gBACN,iBAAiB,GAAG,CAAC;AACnC,cAAA;AACA,YAAA,CAAW,MAAM;cACL,IAAI,CAAC,KAAK,CAAC;AACvB,gBAAc,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;AACrD,cAAY,qBAAqB,GAAG,gBAAgB,CAAC,CAAC,CAAC;AACvD,cAAY,iBAAiB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACzC,YAAA;YACU;UACF,KAAK,CAAC,CAAC;AACf,UAAQ,KAAK,CAAC;AACd,YAAU,IAAI,EAAE,CAAC,CAAC,CAAC;cACP,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,UAAU,IAAI,SAAS;iBAC3C;AACf,cAAY,CAAC,EAAE;cACH,IAAI,CAAC,KAAK,CAAC;gBACT,iBAAiB,GAAG,iBAAiB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAChE,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;AACd,YAAU,IAAI,EAAE,CAAC,CAAC,CAAC;cACP,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,UAAU,IAAI,SAAS;iBAC3C;AACf,cAAY,EAAE,CAAC,CAAC,CAAC,GAAG,qBAAqB,IAAI,UAAU;cAC3C,iBAAiB,GAAG,CAAC;AACjC,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;AACd,YAAU,IAAI,EAAE,CAAC,CAAC,CAAC;cACP,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,UAAU,IAAI,SAAS;YAChD;AACV;AACA,UAAQ,CAAC,EAAE;AACX,QAAA;AACA,QAAM,IAAI,iBAAiB,KAAK,CAAC,EAAE;AACnC,UAAQ,MAAM,EAAE;UACR,IAAI,MAAM,KAAK,CAAC;YACd,iBAAiB,GAAG,CAAC;AAC/B,QAAA;AACA,MAAA;AACA,MAAI,SAAS,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QACnD,IAAI,MAAM,GAAG,CAAC,GAAG,GAAG,WAAW,IAAI,CAAC;AAC1C,QAAM,IAAI,MAAM,GAAG,GAAG,GAAG,WAAW;QAC9B,IAAI,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,GAAG;QACzC,IAAI,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,GAAG;AAC/C;AACA,QAAM,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB;UACnE;AACR,QAAM,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC7D,MAAA;MACI,SAAS,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE;QAC3C,IAAI,QAAQ,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,aAAa,IAAI,CAAC;AACxD,QAAM,IAAI,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC,aAAa;AAClD;AACA,QAAM,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB;UACnE;AACR,QAAM,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC7D,MAAA;;AAEA,MAAI,IAAI,gBAAgB,GAAG,UAAU,CAAC,MAAM;MACxC,IAAI,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7B,MAAI,IAAI,QAAQ;MACZ,IAAI,WAAW,EAAE;QACf,IAAI,aAAa,KAAK,CAAC;UACrB,QAAQ,GAAG,cAAc,KAAK,CAAC,GAAG,aAAa,GAAG,kBAAkB;AAC5E;UACQ,QAAQ,GAAG,cAAc,KAAK,CAAC,GAAG,aAAa,GAAG,kBAAkB;AAC5E,MAAA,CAAK,MAAM;QACL,QAAQ,GAAG,cAAc;AAC/B,MAAA;;AAEA,MAAI,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM;AACvB,MAAI,IAAI,WAAW;AACnB,MAAI,IAAI,gBAAgB,IAAI,CAAC,EAAE;AAC/B,QAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe;AAC/E,MAAA,CAAK,MAAM;AACX,QAAM,WAAW,GAAG,WAAW,GAAG,KAAK,CAAC,aAAa;AACrD,MAAA;AACA,MAAI,IAAI,CAAC,aAAa,EAAE,aAAa,GAAG,WAAW;;MAE/C,IAAI,CAAC,EAAE,CAAC;AACZ,MAAI,OAAO,GAAG,GAAG,WAAW,EAAE;AAC9B;QACM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE;AAC3C,UAAQ,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACxB,MAAM,GAAG,CAAC;;AAEhB,QAAM,IAAI,gBAAgB,IAAI,CAAC,EAAE;AACjC,UAAQ,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;UACzB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;AAC5C,YAAU,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC;AAC/C,YAAU,GAAG,EAAE;AACf,UAAA;AACA,QAAA,CAAO,MAAM;UACL,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;YAClC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE;AACjD,cAAY,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;AACrC,cAAY,CAAC,GAAG,SAAS,CAAC,CAAC;AAC3B,cAAY,CAAC,GAAG,SAAS,CAAC,CAAC;cACf,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBACtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;kBACtB,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,gBAAA;AACA,cAAA;AACA,YAAA;AACA,YAAU,GAAG,EAAE;;AAEf;AACA,YAAU,IAAI,GAAG,KAAK,WAAW,EAAE;AACnC,UAAA;AACA,QAAA;;AAEA,QAAM,IAAI,GAAG,KAAK,WAAW,EAAE;AAC/B;AACA,UAAQ,GAAG;AACX,YAAU,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;cACzB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;gBAC7B;AACd,cAAA;AACA,YAAA;YACU,MAAM,IAAI,CAAC;AACrB,UAAA,CAAS,QAAQ,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AACzC,QAAA;;AAEA;QACM,SAAS,GAAG,CAAC;AACnB,QAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACrD,QAAM,IAAI,MAAM,GAAG,MAAM,EAAE;AAC3B,UAAQ,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;AAC/C,QAAA;;QAEM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE;UACxC,MAAM,IAAI,CAAC;AACnB,QAAA;AACA;UACQ;AACR,MAAA;;MAEI,OAAO,MAAM,GAAG,WAAW;AAC/B,IAAA;;AAEA,IAAE,SAAS,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE;MAC5C,IAAI,KAAK,GAAG,EAAE;AAClB,MAAI,IAAI,aAAa,GAAG,SAAS,CAAC,aAAa;AAC/C,MAAI,IAAI,eAAe,GAAG,SAAS,CAAC,eAAe;AACnD,MAAI,IAAI,cAAc,GAAG,aAAa,IAAI,CAAC;AAC3C;AACA,MAAI,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;;AAEtD;AACA;AACA;AACA;AACA;MACI,SAAS,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;AACrD,QAAM,IAAI,EAAE,GAAG,SAAS,CAAC,iBAAiB;AAC1C,QAAM,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,MAAM;AACpB,QAAM,IAAI,CAAC;;AAEX;QACM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;AAC7B,UAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;AAE5B;QACM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;AAC9B,UAAQ,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;;AAEvB;UACQ,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;cACrD,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;cACrD,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAU,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,KAAK,EAAE;AACjD,YAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACxB,YAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACxB,YAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACxB,YAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACxB,YAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACxB,YAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACxB,YAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACxB,YAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;YACd;AACV,UAAA;;AAEA;AACA,UAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC;AAC/C,UAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC;AAC/C,UAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACvB,UAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;UACf,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;UACxD,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;UACxD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;UACpB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;;AAE5B;UACQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC;UACrB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACvB,EAAE,GAAG,CAAC;AACd,UAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,GAAG,KAAK,CAAC;AACpD,UAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,GAAG,KAAK,CAAC;UAC7C,EAAE,GAAG,CAAC;UACN,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACtB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACvB,EAAE,GAAG,CAAC;UACN,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACtB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACvB,EAAE,GAAG,CAAC;;AAEd;UACQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACtB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACvB,EAAE,GAAG,CAAC;UACN,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACtB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACvB,EAAE,GAAG,CAAC;AACd,UAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,EAAE;AACtD,UAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,EAAE;UAC/C,EAAE,GAAG,CAAC;AACd,UAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,EAAE;AACtD,UAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,EAAE;UAC/C,EAAE,GAAG,CAAC;;AAEd;UACQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACpB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACpB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACpB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACpB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACpB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACpB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACpB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;AAC5B,QAAA;;AAEA;QACM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;UACtB,IAAI,GAAG,GAAG,CAAC;;AAEnB;AACA,UAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;AACvE,cAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;cAC3D,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE;AAC/B,YAAU,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE;YACzC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;YAChB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;YAChB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;YAChB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;YAChB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;YAChB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;YAChB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;YAChB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;YAChB;AACV,UAAA;;AAEA;AACA,UAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK,EAAE;AACnD,UAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK,EAAE;UAC3C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;UACjB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;UACjB,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE;UAC9D,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE;UAC9D,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;UACjB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;;AAEzB;UACQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACtB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACvB,EAAE,GAAG,CAAC;AACd,UAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,EAAE;AACtD,UAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,EAAE;UAC/C,EAAE,GAAG,CAAC;UACN,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACtB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACvB,EAAE,GAAG,CAAC;UACN,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACtB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACvB,EAAE,GAAG,CAAC;;AAEd;UACQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACtB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACvB,EAAE,GAAG,CAAC;UACN,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACtB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;UACvB,EAAE,GAAG,CAAC;AACd,UAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,EAAE;AACtD,UAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,EAAE;UAC/C,EAAE,GAAG,CAAC;AACd,UAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,EAAE;AACtD,UAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,EAAE;UAC/C,EAAE,GAAG,CAAC;;AAEd;UACQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACtB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACtB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACtB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACtB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACtB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACtB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;UACtB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;AAC9B,QAAA;;AAEA;QACM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;AAC/B,UAAQ,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5C,UAAQ,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM;AACnE,QAAA;AACA,MAAA;;AAEA,MAAI,uBAAuB,CAAC,cAAc,GAAG,eAAe,GAAG,CAAC,CAAC;;MAE7D,IAAI,CAAC,EAAE,CAAC;AACZ,MAAI,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,eAAe,EAAE,QAAQ,EAAE,EAAE;AACnE,QAAM,IAAI,QAAQ,GAAG,QAAQ,IAAI,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;UACpB,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;AAClD,QAAM,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,aAAa,EAAE,QAAQ,EAAE,EAAE;AACnE,UAAQ,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;UAE9D,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,IAAI,CAAC;UACtC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACtB,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC9B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;cACpB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AAC1C,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAI,OAAO,KAAK;AAChB,IAAA;;AAEA,IAAE,SAAS,WAAW,CAAC,CAAC,EAAE;AAC1B,MAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxC,IAAA;;IAEE,WAAW,CAAC,SAAS,GAAG;AAC1B,MAAI,IAAI,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE;AAC9B,QAAM,IAAI,GAAG,GAAG,IAAI,cAAc,EAAE;QAC9B,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;AACjC,QAAM,GAAG,CAAC,YAAY,GAAG,aAAa;AACtC,QAAM,GAAG,CAAC,MAAM,GAAG,CAAC,WAAW;AAC/B;AACA,UAAQ,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,sBAAsB,CAAC;AAC7E,UAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;UAChB,IAAI,IAAI,CAAC,MAAM;YACb,IAAI,CAAC,MAAM,EAAE;AACvB,QAAA,CAAO,EAAE,IAAI,CAAC,IAAI,CAAC;AACnB,QAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;MACpB,CAAK;AACL,MAAI,KAAK,EAAE,SAAS,KAAK,CAAC,IAAI,EAAE;QAC1B,IAAI,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,IAAI;QACrE,IAAI,MAAM,GAAG,CAAC,EAAW,IAAI,CAAC;QAC9B,SAAS,UAAU,GAAG;AAC5B,UAAQ,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;UAClD,MAAM,IAAI,CAAC;AACnB,UAAQ,OAAO,KAAK;AACpB,QAAA;QACM,SAAS,aAAa,GAAG;AAC/B,UAAQ,IAAI,MAAM,GAAG,UAAU,EAAE;AACjC,UAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;AAC9D,UAAQ,MAAM,IAAI,KAAK,CAAC,MAAM;AAC9B,UAAQ,OAAO,KAAK;AACpB,QAAA;AACA,QAAM,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACxC;AACA;AACA,UAAQ,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC;UACtB,IAAI,SAAS,EAAE,WAAW;AAClC,UAAQ,KAAK,WAAW,IAAI,KAAK,CAAC,UAAU,EAAE;YACpC,IAAI,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;AAC5D,cAAY,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;cACzC,IAAI,IAAI,GAAG,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,CAAC;cAC1C,IAAI,IAAI,GAAG,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,CAAC;AACtD,YAAA;AACA,UAAA;AACA,UAAQ,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC;AACpE,UAAQ,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC;AACjE,UAAQ,KAAK,WAAW,IAAI,KAAK,CAAC,UAAU,EAAE;YACpC,IAAI,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;AAC5D,cAAY,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;cACzC,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC;cACvF,IAAI,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC;AACjG,cAAY,IAAI,mBAAmB,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC;AAC/D,cAAY,IAAI,qBAAqB,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;AACnE,cAAY,IAAI,gBAAgB,GAAG,qBAAqB,GAAG,mBAAmB;cAClE,IAAI,MAAM,GAAG,EAAE;;AAE3B;AACA,cAAY,uBAAuB,CAAC,gBAAgB,GAAG,GAAG,CAAC;;AAE3D,cAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,EAAE,CAAC,EAAE,EAAE;gBAC9C,IAAI,GAAG,GAAG,EAAE;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE;kBAC1C,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;AAC5C,gBAAc,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9B,cAAA;AACA,cAAY,SAAS,CAAC,aAAa,GAAG,aAAa;AACnD,cAAY,SAAS,CAAC,eAAe,GAAG,eAAe;AACvD,cAAY,SAAS,CAAC,MAAM,GAAG,MAAM;AACrC,YAAA;AACA,UAAA;AACA,UAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;AACzB,UAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;AACzB,UAAQ,KAAK,CAAC,WAAW,GAAG,WAAW;AACvC,UAAQ,KAAK,CAAC,aAAa,GAAG,aAAa;AAC3C,QAAA;QACM,IAAI,IAAI,GAAG,IAAI;QACf,IAAI,KAAK,GAAG,IAAI;QAEhB,IAAI,KAAK,EAAE,aAAa;AAC9B,QAAM,IAAI,kBAAkB,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE;AAC9C,QAAM,IAAI,eAAe,GAAG,EAAE,EAAE,eAAe,GAAG,EAAE;AACpD,QAAM,IAAI,UAAU,GAAG,UAAU,EAAE;AACnC,QAAM,IAAI,mBAAmB,GAAG,EAAE;AAClC,QAAM,IAAI,CAAC,QAAQ,GAAG,EAAE;AACxB,QAAM,IAAI,UAAU,IAAI,MAAM,EAAE;AAChC,UAAQ,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;AACxC,QAAA;;QAEM,UAAU,GAAG,UAAU,EAAE;AAC/B,QAAM,OAAO,UAAU,IAAI,MAAM,EAAE;AACnC,UAAQ,IAAI,CAAC,CAAA,CAAE,CAAC;AAChB,UAAQ,OAAO,UAAU;YACf,KAAK,MAAM,EAAE;YACb,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;AACtB,YAAU,KAAK,MAAM;AACrB,cAAY,IAAI,OAAO,GAAG,aAAa,EAAE;;AAEzC,cAAY,IAAI,UAAU,KAAK,MAAM,EAAE;AACvC,gBAAc,IAAI,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;AACpE,gBAAc,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACzC,cAAA;;AAEA,cAAY,IAAI,UAAU,KAAK,MAAM,EAAE;gBACzB,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;AACnF,kBAAgB,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;AACzD,kBAAgB,IAAI,GAAG;AACvB,oBAAkB,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE;AACnE,oBAAkB,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1C,oBAAkB,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;AAC1D,oBAAkB,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;AAC5D,oBAAkB,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;AACzC,oBAAkB,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;oBACxB,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;mBACnE;AACjB,gBAAA;AACA,cAAA;AACA;AACA,cAAY,IAAI,UAAU,KAAK,MAAM,EAAE;AACvC,gBAAc,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;AACrC,kBAAgB,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;AACnC,kBAAgB,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;AACnC,kBAAgB,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;AACnC,kBAAgB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;AAClC,kBAAgB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;AACrE,gBAAA;AACA,cAAA;;AAEA,cAAY,IAAI,UAAU,KAAK,MAAM,EAAE;gBACzB,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;kBACnE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;AAChF,kBAAgB,KAAK,GAAG;AACxB,oBAAkB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AACrC,oBAAkB,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;AACxD,oBAAkB,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;AACzD,oBAAkB,aAAa,EAAE,OAAO,CAAC,EAAE;mBAC1B;AACjB,gBAAA;AACA,cAAA;cACY;;AAEZ,YAAU,KAAK,MAAM;AACrB,cAAY,IAAI,wBAAwB,GAAG,UAAU,EAAE;AACvD,cAAY,IAAI,qBAAqB,GAAG,wBAAwB,GAAG,MAAM,GAAG,CAAC;AAC7E,cAAY,OAAO,MAAM,GAAG,qBAAqB,EAAE;AACnD,gBAAc,IAAI,qBAAqB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACxD,gBAAc,uBAAuB,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,gBAAc,IAAI,SAAS,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;AAChD,gBAAc,IAAI,CAAC,qBAAqB,IAAI,CAAC,MAAM,CAAC,EAAE;kBACtC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AACzC,oBAAkB,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oBACpB,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC/C,kBAAA;gBACA,CAAe,MAAM,IAAI,CAAC,qBAAqB,IAAI,CAAC,MAAM,CAAC,EAAE;kBAC7C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AACzC,oBAAkB,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AACtC,oBAAkB,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE;AAC7C,kBAAA;gBACA,CAAe;AACf,kBAAgB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAC1D,gBAAc,kBAAkB,CAAC,qBAAqB,GAAG,EAAE,CAAC,GAAG,SAAS;AACxE,cAAA;cACY;;YAEF,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;AACtB,YAAU,KAAK,MAAM;cACT,UAAU,EAAE,CAAC;cACb,KAAK,GAAG,EAAE;AACtB,cAAY,KAAK,CAAC,QAAQ,IAAI,UAAU,KAAK,MAAM,CAAC;AACpD,cAAY,KAAK,CAAC,WAAW,IAAI,UAAU,KAAK,MAAM,CAAC;cAC3C,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC5C,cAAY,KAAK,CAAC,SAAS,GAAG,UAAU,EAAE;AAC1C,cAAY,KAAK,CAAC,cAAc,GAAG,UAAU,EAAE;AAC/C,cAAY,KAAK,CAAC,UAAU,GAAG,EAAE;AACjC,cAAY,KAAK,CAAC,eAAe,GAAG,EAAE;;cAE1B,IAAI,aAAa,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,cAAc;AACtE,cAAY,IAAI,aAAa,GAAG,qBAAqB,EAAE;AACvD,gBAAc,IAAI,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,qBAAqB,IAAI,GAAG,CAAC;gBAC7E,MAAM,IAAI,KAAK,CAAC,CAAC,oCAAoC,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;AACxF,cAAA;;cAEY,IAAI,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW;cAEjD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE;AAClD,gBAAc,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC7B,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE;gBAC7B,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;;gBAE1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;AACtC,kBAAgB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC;AACnF,gBAAA;;AAEA,gBAAc,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;AACrD,gBAAc,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG;kBAC9B,CAAC,EAAE,CAAC;kBACJ,CAAC,EAAE,CAAC;AACpB,kBAAgB,eAAe,EAAE;iBAClB;gBACD,MAAM,IAAI,CAAC;AACzB,cAAA;cACY,iBAAiB,CAAC,KAAK,CAAC;AACpC,cAAY,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;cAClB;;AAEZ,YAAU,KAAK,MAAM;AACrB,cAAY,IAAI,aAAa,GAAG,UAAU,EAAE;cAChC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,GAAG;AAC5C,gBAAc,IAAI,gBAAgB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACnD,gBAAc,IAAI,WAAW,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;gBACpC,IAAI,aAAa,GAAG,CAAC;AACnC,gBAAc,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;kBACjC,aAAa,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAChE,gBAAA;AACA,gBAAc,uBAAuB,CAAC,EAAE,GAAG,aAAa,CAAC;AACzD,gBAAc,IAAI,aAAa,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC;AAC/D,gBAAc,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE;kBAC1C,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAC/C,gBAAc,CAAC,IAAI,EAAE,GAAG,aAAa;;AAErC,gBAAc,CAAC,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC;AAC5C,kBAAgB,eAAe,GAAG,eAAe,EAAE,gBAAgB,GAAG,EAAE,CAAC;AACzE,kBAAgB,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC;AAC7D,cAAA;cACY;;AAEZ,YAAU,KAAK,MAAM;cACT,UAAU,EAAE,CAAC;cACb,aAAa,GAAG,UAAU,EAAE;cAC5B;;AAEZ,YAAU,KAAK,MAAM;AACrB,cAAY,UAAU,GAAE;AACxB,cAAY,UAAU,GAAE;cACZ;AACZ;AACA,YAAU,KAAK,MAAM;AACrB,cAA6B,UAAU;AACvC,cAAY,IAAI,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC/C,cAAY,IAAI,UAAU,GAAG,EAAE,EAAE,SAAS;cAC9B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;gBACnC,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1D,gBAAc,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC9B,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC,SAAS,IAAI,CAAC,CAAC;gBAC1D,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC,SAAS,GAAG,EAAE,CAAC;AACxE,gBAAc,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AACxC,cAAA;AACA,cAAY,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC9C,cAAY,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC5C,cAAY,IAAI,uBAAuB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACxD,cAAY,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM;AACnD,gBAAc,KAAK,EAAE,UAAU,EAAE,aAAa;gBAChC,aAAa,EAAE,WAAW;gBAC1B,uBAAuB,IAAI,CAAC,EAAE,uBAAuB,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;cACxE,MAAM,IAAI,SAAS;cACnB;;AAEZ,YAAU,KAAK,MAAM;AACrB,cAAY,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;AACvC,gBAAc,MAAM,EAAE;AACtB,cAAA;cACY;YACF;cACE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI;AACxC,kBAAgB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE;AACtE;AACA;gBACc,MAAM,IAAI,CAAC;gBACX;AACd,cAAA;mBACiB,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,IAAI,IAAI,EAAE;AAChE;AACA;AACA,gBAAc,IAAI,mBAAmB,KAAK,EAAE,EAAE;AAC9C,kBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,oCAAoC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,6BAA6B,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxM,gBAAA;AACA,gBAAc,mBAAmB,GAAG,MAAM,GAAG,CAAC;AAC9C,gBAAc,MAAM,UAAU,GAAG,UAAU,EAAE;gBAC/B,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;AAC1D,kBAAgB,MAAM,IAAI,UAAU,GAAG,CAAC;kBACxB;AAChB,gBAAA;AACA,cAAA;AACA,cAAY,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7E;UACQ,UAAU,GAAG,UAAU,EAAE;AACjC,QAAA;AACA,QAAM,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;AAC5B,UAAQ,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;AAE5D;AACA,QAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;UACtC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU;AACrC,UAAQ,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE;AAC1B,YAAU,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;AAC7E,YAAU,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;AACtC,UAAA;AACA,QAAA;;AAEA,QAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc;AACvC,QAAM,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS;AACnC,QAAM,IAAI,CAAC,IAAI,GAAG,IAAI;AACtB,QAAM,IAAI,CAAC,KAAK,GAAG,KAAK;AACxB,QAAM,IAAI,CAAC,UAAU,GAAG,EAAE;AAC1B,QAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7D,UAAQ,IAAI,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAClE,UAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAC7B,YAAU,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC;YAC3C,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI;AAC1C,YAAU,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC;AACtC,WAAS,CAAC;AACV,QAAA;MACA,CAAK;MACD,OAAO,EAAE,SAAS,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;AAC7C,QAAM,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM;;AAEpE,QAAM,IAAI,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;AACxD,QAAM,IAAI,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;QAClE,IAAI,CAAC,EAAE,CAAC;QACR,IAAI,MAAM,GAAG,CAAC;AACpB,QAAM,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACzC,QAAM,IAAI,cAAc;QAClB,IAAI,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;QACxD,uBAAuB,CAAC,UAAU,CAAC;AACzC,QAAM,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC;AAC3C,QAAM,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM;AACpC,UAAQ,KAAK,CAAC;AACd,YAAU,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC/B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,cAAY,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;cACvE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAc,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;;AAEtE,gBAAc,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC;AAChC,cAAA;AACA,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;AACd;AACA,YAAU,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACzC,YAAU,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC/B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,cAAY,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACnF,cAAY,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;cACvE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAc,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACtE,gBAAc,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC;AAChC,gBAAc,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACtE,gBAAc,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC;AAChC,cAAA;AACA,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;AACd;YACU,cAAc,GAAG,IAAI;AAC/B;YACU,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa;cACxC,cAAc,GAAG,IAAI;iBAClB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,WAAW;cACtD,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc;;AAEvD,YAAU,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACzC,YAAU,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACzC,YAAU,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC/B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,cAAY,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACnF,cAAY,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACnF,cAAY,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;cACvE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC1B,IAAI,CAAC,cAAc,EAAE;AACnC,kBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACxE,kBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACxE,kBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACxE,gBAAA,CAAe,MAAM;AACrB,kBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACxE,kBAAgB,EAAE,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACzE,kBAAgB,EAAE,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;;AAEzE,kBAAgB,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;AACvD,kBAAgB,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,SAAS,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,UAAU,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;AACrF,kBAAgB,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;AACvD,gBAAA;;AAEA,gBAAc,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC;AAChC,gBAAc,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC;AAChC,gBAAc,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC;AAChC,cAAA;AACA,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;AACd,YAAU,IAAI,CAAC,IAAI,CAAC,KAAK;AACzB,cAAY,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;AACpE;YACU,cAAc,GAAG,KAAK;AAChC;YACU,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa;cACxC,cAAc,GAAG,IAAI;iBAClB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,WAAW;cACtD,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc;;AAEvD,YAAU,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACzC,YAAU,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACzC,YAAU,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACzC,YAAU,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC/B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,cAAY,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACnF,cAAY,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACnF,cAAY,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACnF,cAAY,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;cACvE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC1B,IAAI,CAAC,cAAc,EAAE;AACnC,kBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACxE,kBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACxE,kBAAgB,EAAE,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACzE,kBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACxE,gBAAA,CAAe,MAAM;AACrB,kBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACxE,kBAAgB,EAAE,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACzE,kBAAgB,EAAE,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACzE,kBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;;AAExE,kBAAgB,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;kBAC7C,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC,CAAC,GAAG,SAAS,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,UAAU,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;AAC3F,kBAAgB,EAAE,GAAG,GAAG,GAAG,WAAW,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;AAC9D,gBAAA;gBACc,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE;gBACvB,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACpC,cAAA;AACA,YAAA;YACU;UACF;AACR,YAAU,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AACnD;AACA,QAAM,OAAO,IAAI;MACjB,CAAK;MACD,eAAe,EAAE,SAAS,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE;QACjE,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM;AAC5D,QAAM,IAAI,cAAc,GAAG,SAAS,CAAC,IAAI;QACnC,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5B,QAAM,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7B,QAAM,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM;AACpC,UAAQ,KAAK,CAAC;YACJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;cAC3B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAc,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;;AAE3B,gBAAc,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AACrC,gBAAc,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AACrC,gBAAc,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;gBACvB,IAAI,YAAY,EAAE;AAChC,kBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;AACzC,gBAAA;AACA,cAAA;AACA,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;YACJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;cAC3B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAc,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;AAC3B,gBAAc,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;AAC3B,gBAAc,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;;AAE3B,gBAAc,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AACrC,gBAAc,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AACrC,gBAAc,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;gBACvB,IAAI,YAAY,EAAE;AAChC,kBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;AACzC,gBAAA;AACA,cAAA;AACA,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;YACJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;cAC3B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAc,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;AAC3B,gBAAc,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;AAC3B,gBAAc,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;AAC3B,gBAAc,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;;AAE3B,gBAAc,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1D,gBAAc,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1D,gBAAc,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;;AAE1D,gBAAc,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AACrC,gBAAc,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AACrC,gBAAc,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;gBACvB,IAAI,YAAY,EAAE;AAChC,kBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;AACzC,gBAAA;AACA,cAAA;AACA,YAAA;YACU;UACF;AACR,YAAU,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AACnD;AACA,MAAA;KACG;;;AAGH;IACE,IAAI,mBAAmB,GAAG,CAAC;IAC3B,IAAI,mBAAmB,GAAG,CAAC;AAC7B,IAAE,SAAS,uBAAuB,CAAC,cAAc,GAAG,CAAC,EAAE;AACvD,MAAI,IAAI,sBAAsB,GAAG,mBAAmB,GAAG,cAAc;AACrE,MAAI,IAAI,sBAAsB,GAAG,mBAAmB,EAAE;AACtD,QAAM,IAAI,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,sBAAsB,GAAG,mBAAmB,IAAI,IAAI,GAAG,IAAI,CAAC;QAC5F,MAAM,IAAI,KAAK,CAAC,CAAC,8CAA8C,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;AAC1F,MAAA;;MAEI,mBAAmB,GAAG,sBAAsB;AAChD,IAAA;;AAEA,IAAE,WAAW,CAAC,mBAAmB,GAAG,UAAU,oBAAoB,EAAE;MAChE,mBAAmB,GAAG,CAAC;MACvB,mBAAmB,GAAG,oBAAoB;IAC9C,CAAG;;AAEH,IAAE,WAAW,CAAC,iBAAiB,GAAG,YAAY;AAC9C,MAAI,OAAO,mBAAmB;IAC9B,CAAG;;AAEH,IAAE,WAAW,CAAC,uBAAuB,GAAG,uBAAuB;;AAE/D,IAAE,OAAO,WAAW;AACpB,EAAA,CAAC,GAAG;;EAE+B;AACnC,GAAC,iBAAiB,MAAM;AACxB,EAAA;;AAKA,EAAA,SAAS,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,EAAE,EAAE;IACvC,IAAI,WAAW,GAAG;AACpB;MACI,cAAc,EAAE,SAAS;MACzB,SAAS,EAAE,KAAK;MAChB,YAAY,EAAE,IAAI;MAClB,gBAAgB,EAAE,IAAI;MACtB,iBAAiB,EAAE,GAAG;MACtB,kBAAkB,EAAE,GAAG;KACxB;;IAED,IAAI,IAAI,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,QAAQ,CAAC;AAC1C,IAAE,IAAI,GAAG,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC;AACpC,IAAE,IAAI,OAAO,GAAG,IAAI,SAAS,EAAE;AAC/B,IAAE,OAAO,CAAC,IAAI,GAAG,IAAI;AACrB;AACA;IACE,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAC;AACtE,IAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;;IAElB,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC;IAC1C,IAAI,WAAW,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ;AAC7D,IAAE,IAAI;AACN,MAAI,SAAS,CAAC,uBAAuB,CAAC,WAAW,CAAC;MAC9C,IAAI,KAAK,GAAG;AAChB,QAAM,KAAK,EAAE,OAAO,CAAC,KAAK;AAC1B,QAAM,MAAM,EAAE,OAAO,CAAC,MAAM;AAC5B,QAAM,UAAU,EAAE,OAAO,CAAC,UAAU;AACpC,QAAM,IAAI,EAAE,IAAI,CAAC,SAAS;AAC1B,UAAQ,IAAI,UAAU,CAAC,WAAW,CAAC;AACnC,UAAQ,MAAM,CAAC,KAAK,CAAC,WAAW;OAC3B;MACD,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,QAAM,KAAK,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,QAAQ;AAC1C,MAAA;IACA,CAAG,CAAC,OAAO,GAAG,EAAE;AAChB,MAAI,IAAI,GAAG,YAAY,UAAU,EAAE;AACnC,QAAM,MAAM,IAAI,KAAK,CAAC,kDAAkD;wBAClD,YAAY,GAAG,WAAW,CAAC;MACjD,CAAK;AACL;AACA,MAAI,IAAI,GAAG,YAAY,cAAc,EAAE;AACvC,QAAM,IAAI,GAAG,CAAC,OAAO,KAAK,uBAAuB,EAAE;AACnD,UAAQ,MAAM,IAAI,KAAK,CAAC,sDAAsD;AAC9E,0BAAwB,oCAAoC,CAAC;AAC7D,QAAA;AACA,MAAA;AACA,MAAI,MAAM,GAAG;AACb,IAAA;;IAEE,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;;AAEnD,IAAE,OAAO,KAAK;AACd,EAAA,CAAA;;;;;;;;;;;CC9nCA,IAAI,MAAM,GAAGV,cAAA,EAAwB;KACjC,MAAM,GAAGC,cAAA,EAAwB;;AAErC,CAAA,MAAc,GAAG;GACf,MAAM,EAAE,MAAM;AAChB,GAAE,MAAM,EAAE;EACT;;;;;;;ACLc,SAASU,MAAI,GAAG;AAC/B,IAAI,OAAO;AACX,QAAQ,IAAI,EAAE,YAAY;AAC1B,QAAQ,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,OAAO,GAAG,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI;AACrF,QAAQ,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;AAC7D,KAAK;AACL;;;;;;;;;;;;;;CCLA,IAAI,IAAI,GAAGX,YAAe;CAC1B,IAAI,MAAM,GAAG,UAAiB;;AAE9B,CAAA,IAAI,WAAW,IAAIY,WAAA,CAAA,OAAc,GAAG,YAAY;AAChD,GAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEnB,GAAE,IAAI,CAAC,QAAQ,GAAG,EAAE;AACpB,GAAE,IAAI,CAAC,SAAS,GAAG,CAAC;;AAEpB,GAAE,IAAI,CAAC,MAAM,GAAG,EAAE;AAClB,GAAE,IAAI,CAAC,OAAO,GAAG,KAAK;;AAEtB,GAAE,IAAI,CAAC,SAAS,GAAG,MAAM;AACzB,GAAE,IAAI,CAAC,QAAQ,GAAG,IAAI;AACtB,CAAA,CAAC,CAAC;AACF,CAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;;CAElC,WAAW,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,MAAM,EAAE,QAAQ,EAAE;AACzD,GAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACnB,KAAI,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAC5B,KAAI,SAAS,EAAE,MAAM,GAAG,CAAC;KACrB,IAAI,EAAE,QAAQ;AAClB,IAAG,CAAC;;GAEF,OAAO,CAAC,QAAQ;AAClB,KAAI,YAAY;OACV,IAAI,CAAC,QAAQ,EAAE;;AAErB;AACA,OAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACjE,SAAQ,IAAI,CAAC,OAAO,GAAG,KAAK;;AAE5B,SAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1B,OAAA;KACA,CAAK,CAAC,IAAI,CAAC,IAAI;IACZ;CACH,CAAC;;CAED,WAAW,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,QAAQ,EAAE;AACxD,GAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;KAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACxD,KAAI,OAAO,KAAK;AAChB,GAAA;;AAEA,GAAE,IAAI,UAAU;AAChB,GAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;KACzB,UAAU,GAAG,IAAI;AACrB,GAAA,CAAG,MAAM;AACT,KAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;AAC9D,GAAA;;AAEA,GAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AAChC,GAAE,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,MAAM;;GAEnC,IAAI,CAAC,QAAQ,EAAE;;AAEjB;AACA,GAAE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,KAAI,IAAI,CAAC,OAAO,GAAG,IAAI;AACvB,GAAA;;GAEE,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO;CACvC,CAAC;;CAED,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE,QAAQ,EAAE;GACpD,IAAI,IAAI,EAAE;AACZ,KAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC9B,GAAA;;AAEA,GAAE,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAEvB;AACA,GAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;KAClB;AACJ,GAAA;;AAEA;GACE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;KAC9B,IAAI,CAAC,IAAI,EAAE;AACf,GAAA,CAAG,MAAM;AACT,KAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;KACxB,IAAI,CAAC,QAAQ,EAAE;AACnB,GAAA;CACA,CAAC;;CAED,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG;;AAE7D,CAAA,WAAW,CAAC,SAAS,CAAC,IAAI,GAAG,YAAY;GACvC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;KAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC5D,GAAA;;GAEE,IAAI,CAAC,OAAO,EAAE;CAChB,CAAC;;AAED,CAAA,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG,YAAY;AAC5C,GAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;KAClB;AACJ,GAAA;;AAEA,GAAE,IAAI,CAAC,QAAQ,GAAG,KAAK;AACvB,GAAE,IAAI,CAAC,MAAM,GAAG,IAAI;AACpB,GAAE,IAAI,CAAC,QAAQ,GAAG,IAAI;;AAEtB,GAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;CACpB,CAAC;;AAED,CAAA,WAAW,CAAC,SAAS,CAAC,wBAAwB,GAAG,UAAU,IAAI,EAAE;AACjE;AACA,GAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;;AAEtB;GACE,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAEnC;GACE,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AACvC,KAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM;AACjC,KAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEpD,KAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1D,GAAA,CAAG,MAAM;AACT;AACA,KAAI,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,MAAM;AACvC,KAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;;KAEtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;AACpC,GAAA;CACA,CAAC;;AAED,CAAA,WAAW,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,IAAI,EAAE;AACrD,GAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;;GAEpB,IAAI,GAAG,GAAG,CAAC;GACX,IAAI,KAAK,GAAG,CAAC;GACb,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEtC;AACA,GAAE,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;KACxB,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACpC,KAAI,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;;KAEjD,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;KAC3B,GAAG,IAAI,GAAG;;AAEd;AACA,KAAI,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,EAAE;AAC5B,OAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7C,KAAA;AACA,GAAA;;AAEA;AACA,GAAE,IAAI,KAAK,GAAG,CAAC,EAAE;KACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;AAClC,GAAA;;AAEA,GAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM;;GAE7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;CAC5B,CAAC;;AAED,CAAA,WAAW,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAY;AAC7C,GAAE,IAAI;AACN;AACA,KAAI,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;OAClE,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;AAE/B;AACA,OAAM,IAAI,IAAI,CAAC,SAAS,EAAE;AAC1B,SAAQ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;OAC3C,CAAO,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;AAChD;;AAEA,SAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AAC/B,OAAA,CAAO,MAAM;AACb;AACA;SACQ;AACR,OAAA;AACA,KAAA;;KAEI,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;OACnC,IAAI,CAAC,IAAI,EAAE;AACjB,KAAA;GACA,CAAG,CAAC,OAAO,EAAE,EAAE;AACf,KAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;AAC1B,GAAA;CACA,CAAC;;;;;;;;;;;;;;;;AC1LD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAA,IAAI,WAAW,GAAG;GAChB;AACF;AACA,KAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,KAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACP;GACD;AACF;AACA,KAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,KAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACP;GACD;AACF;AACA,KAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACb,KAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACP;GACD;AACF;AACA,KAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACb,KAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACV;GACD;AACF;KACI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnB,KAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACV;GACD;AACF;KACI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KACf,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChB;GACD;AACF;AACA,KAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KAC3B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChB;EACF;;AAED,CAAA,SAAA,CAAA,cAAsB,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE;GAChD,IAAI,MAAM,GAAG,EAAE;AACjB,GAAE,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC;AAC3B,GAAE,IAAI,SAAS,GAAG,MAAM,GAAG,CAAC;GAC1B,IAAI,QAAQ,GAAG,CAAC,KAAK,GAAG,SAAS,IAAI,CAAC;GACtC,IAAI,QAAQ,GAAG,CAAC,MAAM,GAAG,SAAS,IAAI,CAAC;AACzC,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,KAAI,IAAI,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;KACzB,IAAI,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM;KACxC,IAAI,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM;AAC7C,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;OACtC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE;AACjC,SAAQ,SAAS,EAAE;AACnB,OAAA,CAAO,MAAM;SACL;AACR,OAAA;AACA,KAAA;AACA,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;OACtC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE;AACjC,SAAQ,UAAU,EAAE;AACpB,OAAA,CAAO,MAAM;SACL;AACR,OAAA;AACA,KAAA;KACI,IAAI,SAAS,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE;AACzC,OAAM,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACrE,KAAA;AACA,GAAA;AACA,GAAE,OAAO,MAAM;CACf,CAAC;;AAED,CAAA,SAAA,CAAA,oBAA4B,GAAG,UAAU,KAAK,EAAE;AAChD,GAAE,OAAO,UAAU,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE;AAC/B,KAAI,IAAI,cAAc,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;AACvD,KAAI,IAAI,MAAM;AACd,OAAM,CAAC,CAAC,CAAC,GAAG,cAAc,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC;OACvD,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;AACzC,KAAI,IAAI,cAAc,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;AACvD,KAAI,IAAI,MAAM;AACd,OAAM,CAAC,CAAC,CAAC,GAAG,cAAc,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC;OACvD,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;KACrC,OAAO,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC;GAC1C,CAAG;CACH,CAAC;;;;;;;;;;;AC5FD,CAAA,cAAc,GAAG,SAAS,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;AAC9D,GAAE,IAAI,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM;GACjC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;GAClC,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;GACpC,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;;GAEtC,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,EAAE;AAC3C,KAAI,OAAO,IAAI;AACf,GAAA;AACA,GAAE,IAAI,MAAM,IAAI,OAAO,EAAE;AACzB,KAAI,OAAO,KAAK;AAChB,GAAA;AACA,GAAE,OAAO,MAAM;CACf,CAAC;;;;;;;;;;CCbD,IAAI,cAAc,GAAGZ,gBAAA,EAAsB;CAC3C,IAAI,cAAc,GAAGC,qBAAA,EAA4B;;AAEjD,CAAA,SAAS,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;AACzC,GAAE,IAAI,SAAS,GAAG,KAAK,GAAG,GAAG;AAC7B,GAAE,IAAI,KAAK,KAAK,CAAC,EAAE;AACnB,KAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;AAClD,GAAA;AACA,GAAE,OAAO,SAAS;AAClB,CAAA;;CAEA,IAAI,MAAM,IAAIY,WAAA,CAAA,OAAc,GAAG,UAAU,UAAU,EAAE,YAAY,EAAE;AACnE,GAAE,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK;AAC9B,GAAE,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM;AAChC,GAAE,IAAI,SAAS,GAAG,UAAU,CAAC,SAAS;AACtC,GAAE,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG;AAC1B,GAAE,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK;;AAE9B,GAAE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI;AAC/B,GAAE,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK;AACjC,GAAE,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ;;AAEvC,GAAE,IAAI,CAAC,WAAW,GAAG,CAAC;AACtB,GAAE,IAAI,CAAC,OAAO,GAAG,EAAE;GACjB,IAAI,SAAS,EAAE;KACb,IAAI,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC;AAC7D,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,OAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACxB,SAAQ,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC;AAC5D,SAAQ,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;SACxB,SAAS,EAAE,CAAC;AACpB,QAAO,CAAC;AACR,KAAA;AACA,GAAA,CAAG,MAAM;AACT,KAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;OAChB,SAAS,EAAE,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC;OAC1C,MAAM,EAAE,MAAM;OACd,SAAS,EAAE,CAAC;AAClB,MAAK,CAAC;AACN,GAAA;;AAEA;AACA;AACA;AACA;AACA,GAAE,IAAI,KAAK,KAAK,CAAC,EAAE;AACnB,KAAI,IAAI,CAAC,YAAY,GAAG,GAAG;AAC3B,GAAA,CAAG,MAAM,IAAI,KAAK,KAAK,EAAE,EAAE;AAC3B,KAAI,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,CAAC;AAC/B,GAAA,CAAG,MAAM;AACT,KAAI,IAAI,CAAC,YAAY,GAAG,CAAC;AACzB,GAAA;AACA,CAAA,CAAC,CAAC;;AAEF,CAAA,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY;GACnC,IAAI,CAAC,IAAI;KACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,GAAG,CAAC;AAChD,KAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI;IAClC;CACH,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG;AAClC,GAAE,OAAO;AACT,GAAE,cAAc;GACd;GACA;AACF,GAAE,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY;AACrC,GAAE,IAAI,WAAW,GAAG,WAAW,GAAG,CAAC;;AAEnC,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;KAClC,IAAI,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AAChC,KAAI,IAAI,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG,cAAc,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC;AACtE,KAAI,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM;AACxC,GAAA;CACA,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG;AAClC,GAAE,OAAO;AACT,GAAE,cAAc;GACd;GACA;AACF,GAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS;;AAE/B,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;KAClC,IAAI,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;KAC5B,IAAI,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;AACzC,KAAI,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,IAAI;AACtC,GAAA;CACA,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG;AAClC,GAAE,OAAO;AACT,GAAE,cAAc;GACd;GACA;AACF,GAAE,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY;AACrC,GAAE,IAAI,WAAW,GAAG,WAAW,GAAG,CAAC;AACnC,GAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS;;AAE/B,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;KAClC,IAAI,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;KAC5B,IAAI,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;AACzC,KAAI,IAAI,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG,cAAc,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC;AACtE,KAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC;AAC/C,KAAI,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,KAAK;AACvC,GAAA;CACA,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG;AAClC,GAAE,OAAO;AACT,GAAE,cAAc;GACd;GACA;AACF,GAAE,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY;AACrC,GAAE,IAAI,WAAW,GAAG,WAAW,GAAG,CAAC;AACnC,GAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS;;AAE/B,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;KAClC,IAAI,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;KAC5B,IAAI,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;AACzC,KAAI,IAAI,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG,cAAc,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC;AACtE,KAAI,IAAI,QAAQ,GAAG,CAAC,GAAG,WAAW,IAAI,QAAQ,GAAG,QAAQ,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC;KAC1E,IAAI,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;AACtD,KAAI,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,KAAK;AACvC,GAAA;CACA,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,kBAAkB,GAAG,UAAU,OAAO,EAAE;AACzD,GAAE,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;AACzB,GAAE,IAAI,cAAc;GAClB,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;AACnD,GAAE,IAAI,SAAS,GAAG,YAAY,CAAC,SAAS;;AAExC,GAAE,IAAI,MAAM,KAAK,CAAC,EAAE;KAChB,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;AACpD,GAAA,CAAG,MAAM;AACT,KAAI,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;;AAE5C,KAAI,QAAQ,MAAM;AAClB,OAAM,KAAK,CAAC;SACJ,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC;SACvD;AACR,OAAM,KAAK,CAAC;SACJ,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC;SACvD;AACR,OAAM,KAAK,CAAC;SACJ,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC;SACvD;AACR,OAAM,KAAK,CAAC;SACJ,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC;SACvD;OACF;AACN,SAAQ,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,MAAM,CAAC;AAC/D;AACA,GAAA;;AAEA,GAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;;GAE1B,YAAY,CAAC,SAAS,EAAE;GACxB,IAAI,YAAY,CAAC,SAAS,IAAI,YAAY,CAAC,MAAM,EAAE;AACrD,KAAI,IAAI,CAAC,SAAS,GAAG,IAAI;KACrB,IAAI,CAAC,WAAW,EAAE;KAClB,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;AACjD,GAAA,CAAG,MAAM;AACT,KAAI,IAAI,CAAC,SAAS,GAAG,cAAc;AACnC,GAAA;;GAEE,IAAI,YAAY,EAAE;AACpB;AACA,KAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7E,GAAA,CAAG,MAAM;AACT,KAAI,IAAI,CAAC,SAAS,GAAG,IAAI;KACrB,IAAI,CAAC,QAAQ,EAAE;AACnB,GAAA;CACA,CAAC;;;;;;;;;;CC9KD,IAAI,IAAI,GAAGb,YAAe;CAC1B,IAAI,WAAW,GAAGC,kBAAA,EAAwB;CAC1C,IAAI,MAAM,GAAGC,kBAAA,EAAyB;;AAEtC,CAAA,IAAI,WAAW,IAAIY,gBAAA,CAAA,OAAc,GAAG,UAAU,UAAU,EAAE;AAC1D,GAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;GAEtB,IAAI,OAAO,GAAG,EAAE;GAChB,IAAI,IAAI,GAAG,IAAI;GACf,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;KACpC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,KAAI,KAAK,EAAE,UAAU,MAAM,EAAE;AAC7B,OAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;KAC1B,CAAK;KACD,QAAQ,EAAE,YAAY;AAC1B,OAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACnD,CAAK;AACL,IAAG,CAAC;;AAEJ,GAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACtB,CAAA,CAAC,CAAC;AACF,CAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;;;;;;;;;;;;;ACrBvC,CAAAC,WAAc,GAAG;AACjB,GAAE,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;;GAE/D,SAAS,EAAE,UAAU;GACrB,SAAS,EAAE,UAAU;GACrB,SAAS,EAAE,UAAU;GACrB,SAAS,EAAE,UAAU;GACrB,SAAS,EAAE,UAAU;GACrB,SAAS,EAAE,UAAU;;AAEvB;GACE,mBAAmB,EAAE,CAAC;GACtB,iBAAiB,EAAE,CAAC;GACpB,eAAe,EAAE,CAAC;GAClB,eAAe,EAAE,CAAC;;AAEpB;GACE,uBAAuB,EAAE,CAAC;GAC1B,qBAAqB,EAAE,CAAC;;AAE1B,GAAE,oBAAoB,EAAE;KACpB,CAAC,EAAE,CAAC;KACJ,CAAC,EAAE,CAAC;KACJ,CAAC,EAAE,CAAC;KACJ,CAAC,EAAE,CAAC;KACJ,CAAC,EAAE,CAAC;IACL;;GAED,cAAc,EAAE,MAAM;EACvB;;;;;;;;;;;;CC7BD,IAAI,QAAQ,GAAG,EAAE;;AAEjB,CAAA,CAAC,YAAY;AACb,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;KAC5B,IAAI,UAAU,GAAG,CAAC;AACtB,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAChC,OAAM,IAAI,UAAU,GAAG,CAAC,EAAE;AAC1B,SAAQ,UAAU,GAAG,UAAU,IAAI,UAAU,KAAK,CAAC,CAAC;AACpD,OAAA,CAAO,MAAM;AACb,SAAQ,UAAU,GAAG,UAAU,KAAK,CAAC;AACrC,OAAA;AACA,KAAA;AACA,KAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU;AAC5B,GAAA;AACA,CAAA,CAAC,GAAG;;AAEJ,CAAA,IAAI,aAAa,IAAIC,GAAA,CAAA,OAAc,GAAG,YAAY;AAClD,GAAE,IAAI,CAAC,IAAI,GAAG,EAAE;AAChB,CAAA,CAAC,CAAC;;AAEF,CAAA,aAAa,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE;AAChD,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;KACpC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;AAC1E,GAAA;AACA,GAAE,OAAO,IAAI;CACb,CAAC;;AAED,CAAA,aAAa,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY;AAC5C,GAAE,OAAO,IAAI,CAAC,IAAI,GAAG,EAAE;CACvB,CAAC;;AAED,CAAA,aAAa,CAAC,KAAK,GAAG,UAAU,GAAG,EAAE;AACrC,GAAE,IAAI,GAAG,GAAG,EAAE;AACd,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,KAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AACvD,GAAA;AACA,GAAE,OAAO,GAAG,GAAG,EAAE;CACjB,CAAC;;;;;;;;;;CCrCD,IAAI,SAAS,GAAGhB,kBAAA,EAAsB;CACtC,IAAI,aAAa,GAAGC,UAAA,EAAgB;;CAEpC,IAAI,MAAM,IAAIgB,QAAA,CAAA,OAAc,GAAG,UAAU,OAAO,EAAE,YAAY,EAAE;AAChE,GAAE,IAAI,CAAC,QAAQ,GAAG,OAAO;GACvB,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,KAAK;;AAE/C,GAAE,IAAI,CAAC,QAAQ,GAAG,KAAK;AACvB,GAAE,IAAI,CAAC,QAAQ,GAAG,KAAK;AACvB,GAAE,IAAI,CAAC,uBAAuB,GAAG,KAAK;;AAEtC;AACA,GAAE,IAAI,CAAC,QAAQ,GAAG,EAAE;AACpB,GAAE,IAAI,CAAC,UAAU,GAAG,CAAC;;AAErB,GAAE,IAAI,CAAC,OAAO,GAAG,EAAE;AACnB,GAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AACjE,GAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AACjE,GAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AACjE,GAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AACjE,GAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AACjE,GAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEjE,GAAE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI;AAC/B,GAAE,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK;AACjC,GAAE,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ;AACvC,GAAE,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK;AACjC,GAAE,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,UAAU;AAC3C,GAAE,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO;AACrC,GAAE,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM;AACnC,GAAE,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW;AAC7C,GAAE,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ;AACvC,GAAE,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,kBAAkB;GACzD,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,eAAe,IAAI,YAAY,CAAA,CAAE;AACvE,CAAA,CAAC,CAAC;;AAEF,CAAA,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY;AACrC,GAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAC5E,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,UAAU,IAAI,EAAE;AACnD,GAAE,IAAI,SAAS,GAAG,SAAS,CAAC,aAAa;;AAEzC,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;KACzC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE;OAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;OAC/C;AACN,KAAA;AACA,GAAA;AACA,GAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAChD,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,gBAAgB,GAAG,UAAU,IAAI,EAAE;AACpD;GACE,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;;AAEnC;GACE,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;GAC/B,IAAI,IAAI,GAAG,EAAE;AACf,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;KAC1B,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxC,GAAA;;AAEA;;AAEA;AACA,GAAE,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1C;AACA;;GAEE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC,SAAS,EAAE;KAClD,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;KACnD;AACJ,GAAA;;AAEA,GAAE,IAAI,CAAC,IAAI,GAAG,IAAI,aAAa,EAAE;AACjC,GAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAEpC,GAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;KACtB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AACrC,GAAA;;GAEE,IAAI,CAAC,SAAS,EAAE;KACd,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,kCAAkC,GAAG,IAAI,CAAC,CAAC;KAChE;AACJ,GAAA;;AAEA,GAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CACnD,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,oBAAoB;AAClD,GAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAChD,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,YAAY;AAC/C,GAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAC9C,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,UAAU,IAAI,EAAE;GAChD,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;GACjC,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;;AAEjC;GACE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,EAAE;AACrD,KAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,cAAc,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC;KACjE;AACJ,GAAA;;AAEA,GAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACtB,KAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,GAAA;CACA,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,MAAM,EAAE;AACjD,GAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AACD,CAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE;AAC9C,GAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;GAErB,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;GAChC,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACnC,GAAE,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AACrB,GAAE,IAAI,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1B,GAAE,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;AACtB,GAAE,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;AACvB,GAAE,IAAI,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC;;AAE1B;AACA;AACA;AACA;;GAEE;KACE,KAAK,KAAK,CAAC;KACX,KAAK,KAAK,CAAC;KACX,KAAK,KAAK,CAAC;KACX,KAAK,KAAK,CAAC;AACf,KAAI,KAAK,KAAK;KACV;KACA,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,wBAAwB,GAAG,KAAK,CAAC,CAAC;KACvD;AACJ,GAAA;GACE,IAAI,EAAE,SAAS,IAAI,SAAS,CAAC,oBAAoB,CAAC,EAAE;KAClD,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;KAC/C;AACJ,GAAA;AACA,GAAE,IAAI,KAAK,KAAK,CAAC,EAAE;KACf,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;KACvD;AACJ,GAAA;AACA,GAAE,IAAI,MAAM,KAAK,CAAC,EAAE;KAChB,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAClD;AACJ,GAAA;GACE,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE;KACtC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;KACrD;AACJ,GAAA;;AAEA,GAAE,IAAI,CAAC,UAAU,GAAG,SAAS;;GAE3B,IAAI,GAAG,GAAG,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;;AAE3D,GAAE,IAAI,CAAC,QAAQ,GAAG,IAAI;;GAEpB,IAAI,CAAC,QAAQ,CAAC;KACZ,KAAK,EAAE,KAAK;KACZ,MAAM,EAAE,MAAM;KACd,KAAK,EAAE,KAAK;AAChB,KAAI,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;KAC7B,OAAO,EAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,iBAAiB,CAAC;KACzD,KAAK,EAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,eAAe,CAAC;KACrD,KAAK,EAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,eAAe,CAAC;KACrD,GAAG,EAAE,GAAG;KACR,SAAS,EAAE,SAAS;AACxB,IAAG,CAAC;;GAEF,IAAI,CAAC,eAAe,EAAE;CACxB,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,MAAM,EAAE;AACjD,GAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AACD,CAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE;AAC9C,GAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;AAEvB,GAAE,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3C;;AAEA,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AACpC,KAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7E,GAAA;;AAEA,GAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;;GAE3B,IAAI,CAAC,eAAe,EAAE;CACxB,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,MAAM,EAAE;GAC/C,IAAI,CAAC,kBAAkB,EAAE;AAC3B,GAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AACD,CAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE;AAC9C,GAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;AAEvB;GACE,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,uBAAuB,EAAE;KACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;OAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;OACjE;AACN,KAAA;KACI,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;OACtC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;OAClE;AACN,KAAA;AACA,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,OAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACnC,KAAA;AACA,KAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/B,GAAA;;AAEA;AACA;GACE,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,mBAAmB,EAAE;AACzD;AACA,KAAI,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,GAAA;GACE,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,eAAe,EAAE;KACjD,IAAI,CAAC,UAAU,CAAC;AACpB,OAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1B,OAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1B,OAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1B,MAAK,CAAC;AACN,GAAA;;GAEE,IAAI,CAAC,eAAe,EAAE;CACxB,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,MAAM,EAAE;AACjD,GAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AACD,CAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE;AAC9C,GAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACvB,GAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,cAAc,CAAC;;GAE3D,IAAI,CAAC,eAAe,EAAE;CACxB,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,MAAM,EAAE;AACjD,GAAE,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AACrC,KAAI,IAAI,CAAC,uBAAuB,GAAG,IAAI;KACnC,IAAI,CAAC,eAAe,EAAE;AAC1B,GAAA;AACA,GAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;CACxD,CAAC;CACD,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,MAAM,EAAE,IAAI,EAAE;AACtD,GAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;GAErB;AACF,KAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,uBAAuB;AACzD,KAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK;KACzB;AACJ,KAAI,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;AACjD,GAAA;;AAEA,GAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACxB,GAAE,IAAI,cAAc,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM;;AAE3C,GAAE,IAAI,cAAc,GAAG,CAAC,EAAE;AAC1B,KAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACpC,GAAA,CAAG,MAAM;KACL,IAAI,CAAC,eAAe,EAAE;AAC1B,GAAA;CACA,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,MAAM,EAAE;AACjD,GAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AACD,CAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE;AAC9C,GAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;AAEvB,GAAE,IAAI,CAAC,QAAQ,GAAG,IAAI;GACpB,IAAI,CAAC,eAAe,EAAE;;AAExB,GAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;KACjB,IAAI,CAAC,QAAQ,EAAE;AACnB,GAAA;CACA,CAAC;;;;;;;;;;;;CC/RD,IAAI,cAAc,GAAGjB,gBAAA,EAAsB;;AAE3C,CAAA,IAAI,cAAc,GAAG;AACrB;AACA,GAAE,YAAY,CAAA,CAAE;;AAEhB;AACA;GACE,UAAU,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;AACzC,KAAI,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AAChC,OAAM,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;AACxC,KAAA;;AAEA,KAAI,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;AAC5B,KAAI,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK;AACzB,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK;AAC7B,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK;AAC7B,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI;GAC5B,CAAG;;AAEH;AACA;GACE,UAAU,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;KACrC,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AACnC,OAAM,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;AACxC,KAAA;;AAEA,KAAI,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;AAC5B,KAAI,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK;AACzB,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK;AAC7B,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK;AAC7B,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;GACxC,CAAG;;AAEH;AACA;GACE,UAAU,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;KACrC,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AACnC,OAAM,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;AACxC,KAAA;;KAEI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAChC,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI;GAC5B,CAAG;;AAEH;AACA;GACE,UAAU,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;KACrC,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AACnC,OAAM,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;AACxC,KAAA;;KAEI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAChC,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;GACxC,CAAG;EACF;;AAED,CAAA,IAAI,oBAAoB,GAAG;AAC3B;AACA,GAAE,YAAY,CAAA,CAAE;;AAEhB;AACA;GACE,UAAU,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;AAC9C,KAAI,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC;AAC5B,KAAI,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK;AACzB,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK;AAC7B,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK;AAC7B,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM;GAC9B,CAAG;;AAEH;AACA;AACA,GAAE,UAAU,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE;AACtC,KAAI,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC;AAC5B,KAAI,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK;AACzB,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK;AAC7B,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK;KACzB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;GACpC,CAAG;;AAEH;AACA;GACE,UAAU,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;KAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;KAC5B,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;KAChC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AACpC,KAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM;GAC9B,CAAG;;AAEH;AACA;AACA,GAAE,UAAU,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE;KAClC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;KAC5B,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;KAChC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;KAChC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;GACpC,CAAG;EACF;;AAED,CAAA,SAAS,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;GACjC,IAAI,QAAQ,GAAG,EAAE;GACjB,IAAI,CAAC,GAAG,CAAC;;GAET,SAAS,KAAK,GAAG;AACnB,KAAI,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;AAC3B,OAAM,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;AACxC,KAAA;AACA,KAAI,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AACtB,KAAI,CAAC,EAAE;AACP,KAAI,IAAI,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAC9D,KAAI,QAAQ,KAAK;OACX;AACN,SAAQ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;AAC7C,OAAM,KAAK,EAAE;AACb,SAAQ,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AACvB,SAAQ,CAAC,EAAE;SACH,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;SAClC;AACR,OAAM,KAAK,CAAC;AACZ,SAAQ,KAAK,GAAG,IAAI,GAAG,IAAI;AAC3B,SAAQ,KAAK,GAAG,IAAI,IAAI,CAAC;AACzB,SAAQ,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;SAC3B;AACR,OAAM,KAAK,CAAC;AACZ,SAAQ,KAAK,GAAG,IAAI,GAAG,CAAC;AACxB,SAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAC/B,SAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAC/B,SAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;SACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;SACzC;AACR,OAAM,KAAK,CAAC;AACZ,SAAQ,KAAK,GAAG,IAAI,GAAG,CAAC;AACxB,SAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAC/B,SAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAC/B,SAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAC/B,SAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAC/B,SAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAC/B,SAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAC/B,SAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAC/B,SAAQ,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;SACrE;AACR;AACA,GAAA;;AAEA,GAAE,OAAO;AACT,KAAI,GAAG,EAAE,UAAU,KAAK,EAAE;AAC1B,OAAM,OAAO,QAAQ,CAAC,MAAM,GAAG,KAAK,EAAE;AACtC,SAAQ,KAAK,EAAE;AACf,OAAA;OACM,IAAI,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;AAC7C,OAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;AACtC,OAAM,OAAO,QAAQ;KACrB,CAAK;KACD,cAAc,EAAE,YAAY;AAChC,OAAM,QAAQ,CAAC,MAAM,GAAG,CAAC;KACzB,CAAK;KACD,GAAG,EAAE,YAAY;AACrB,OAAM,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;AAC7B,SAAQ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC;AAC3C,OAAA;KACA,CAAK;IACF;AACH,CAAA;;AAEA,CAAA,SAAS,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;AAClE;AACA,GAAE,IAAI,UAAU,GAAG,KAAK,CAAC,KAAK;AAC9B,GAAE,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM;AAChC,GAAE,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK;AAC7B,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AACxC,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;OACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;AAC3C,OAAM,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;OAChD,MAAM,IAAI,GAAG,CAAC;AACpB,KAAA;AACA,GAAA;AACA,GAAE,OAAO,MAAM;AACf,CAAA;;AAEA,CAAA,SAAS,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;AACvE;AACA,GAAE,IAAI,UAAU,GAAG,KAAK,CAAC,KAAK;AAC9B,GAAE,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM;AAChC,GAAE,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK;AAC7B,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AACxC,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;OACnC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;OAC7B,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;AAC3C,OAAM,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC;AACjE,KAAA;KACI,IAAI,CAAC,cAAc,EAAE;AACzB,GAAA;AACA,CAAA;;AAEA,CAAA,SAAA,CAAA,YAAoB,GAAG,UAAU,IAAI,EAAE,UAAU,EAAE;AACnD,GAAE,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK;AAC9B,GAAE,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM;AAChC,GAAE,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK;AAC9B,GAAE,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG;AAC1B,GAAE,IAAI,SAAS,GAAG,UAAU,CAAC,SAAS;AACtC,GAAE,IAAI,IAAI;;AAEV,GAAE,IAAI,KAAK,KAAK,CAAC,EAAE;AACnB,KAAI,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;AACpC,GAAA;AACA,GAAE,IAAI,MAAM;AACZ,GAAE,IAAI,KAAK,IAAI,CAAC,EAAE;KACd,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;AAC7C,GAAA,CAAG,MAAM;KACL,MAAM,GAAG,IAAI,WAAW,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;AAChD,GAAA;AACA,GAAE,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;GACnC,IAAI,MAAM,GAAG,CAAC;AAChB,GAAE,IAAI,MAAM;AACZ,GAAE,IAAI,QAAQ;;GAEZ,IAAI,SAAS,EAAE;KACb,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC;KACrD,QAAQ,GAAG,cAAc,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC;AACjE,GAAA,CAAG,MAAM;KACL,IAAI,kBAAkB,GAAG,CAAC;KAC1B,QAAQ,GAAG,YAAY;OACrB,IAAI,QAAQ,GAAG,kBAAkB;OACjC,kBAAkB,IAAI,CAAC;AAC7B,OAAM,OAAO,QAAQ;KACrB,CAAK;AACL,KAAI,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC/C,GAAA;;AAEA,GAAE,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;AACrE,KAAI,IAAI,KAAK,KAAK,CAAC,EAAE;OACf,MAAM,GAAG,YAAY;SACnB,MAAM,CAAC,UAAU,CAAC;AAC1B,SAAQ,MAAM;AACd,SAAQ,QAAQ;AAChB,SAAQ,GAAG;AACX,SAAQ,IAAI;SACJ;QACD;AACP,KAAA,CAAK,MAAM;AACX,OAAM,iBAAiB;SACf,MAAM,CAAC,UAAU,CAAC;AAC1B,SAAQ,MAAM;AACd,SAAQ,QAAQ;AAChB,SAAQ,GAAG;AACX,SAAQ,IAAI;SACJ;QACD;AACP,KAAA;AACA,GAAA;AACA,GAAE,IAAI,KAAK,KAAK,CAAC,EAAE;AACnB,KAAI,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AAChC,OAAM,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC;AACzC,KAAA;AACA,GAAA,CAAG,MAAM;KACL,IAAI,CAAC,GAAG,EAAE;AACd,GAAA;;AAEA,GAAE,OAAO,MAAM;CACf,CAAC;;;;;;;;;;;CCxQD,SAAS,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;GAC1D,IAAI,KAAK,GAAG,CAAC;AACf;AACA,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;OAC9B,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;OAElC,IAAI,CAAC,KAAK,EAAE;AAClB,SAAQ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC;AACrE,OAAA;;AAEA,OAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;SAC1B,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACrC,OAAA;OACM,KAAK,IAAI,CAAC;AAChB,KAAA;AACA,GAAA;AACA,CAAA;;CAEA,SAAS,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE;GAC3E,IAAI,KAAK,GAAG,CAAC;AACf,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;OAC9B,IAAI,SAAS,GAAG,KAAK;;AAE3B,OAAM,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;SAC3B,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE;WACnC,SAAS,GAAG,IAAI;AAC1B,SAAA;AACA,OAAA,CAAO,MAAM;SACL,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC;SAC/B,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;SACnC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC;SAClC;SACA,SAAS,GAAG,IAAI;AACxB,OAAA;OACM,IAAI,SAAS,EAAE;AACrB,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACpC,WAAU,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;AAChC,SAAA;AACA,OAAA;OACM,KAAK,IAAI,CAAC;AAChB,KAAA;AACA,GAAA;AACA,CAAA;;CAEA,SAAS,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;GACzD,IAAI,YAAY,GAAG,GAAG;AACxB,GAAE,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;GACxC,IAAI,KAAK,GAAG,CAAC;;AAEf,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AACpC,OAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;SAC1B,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK;WAC7B,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,YAAY,IAAI,WAAW,GAAG;UACpD;AACT,OAAA;OACM,KAAK,IAAI,CAAC;AAChB,KAAA;AACA,GAAA;AACA,CAAA;;AAEA,CAAA,gBAAc,GAAG,UAAU,MAAM,EAAE,SAAS,EAAE,WAAW,GAAG,KAAK,EAAE;AACnE,GAAE,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK;AAC7B,GAAE,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK;AAC7B,GAAE,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM;AAC/B,GAAE,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS;AACrC,GAAE,IAAI,UAAU,GAAG,SAAS,CAAC,UAAU;AACvC,GAAE,IAAI,OAAO,GAAG,SAAS,CAAC,OAAO;;AAEjC,GAAE,IAAI,OAAO,GAAG,MAAM,CAAC;;AAEvB,GAAE,IAAI,SAAS,KAAK,CAAC,EAAE;AACvB;KACI,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;AACtD,GAAA,CAAG,MAAM;KACL,IAAI,UAAU,EAAE;OACd,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC;AACzE,KAAA;AACA;AACA,KAAI,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;AACrC;AACA,OAAM,IAAI,KAAK,KAAK,EAAE,EAAE;SAChB,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;AAClD,OAAA;OACM,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;AACvD,KAAA;AACA,GAAA;AACA,GAAE,OAAO,OAAO;CAChB,CAAC;;;;;;;;;;CC1FD,IAAI,IAAI,GAAGA,YAAe;CAC1B,IAAI,IAAI,GAAGC,YAAe;CAC1B,IAAI,WAAW,GAAGC,kBAAA,EAAwB;CAC1C,IAAI,WAAW,GAAGC,uBAAA,EAA+B;CACjD,IAAI,MAAM,GAAGC,eAAA,EAAmB;CAChC,IAAI,SAAS,GAAGC,gBAAA,EAAsB;CACtC,IAAI,gBAAgB,GAAGa,uBAAA,EAA8B;;AAErD,CAAA,IAAI,WAAW,IAAIC,WAAA,CAAA,OAAc,GAAG,UAAU,OAAO,EAAE;AACvD,GAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;GAEtB,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE;KACjC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;KAC1B,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;KACnC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;KACzC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;KACpC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;KACvC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;KAC7C,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;KACnC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;KACzC,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;KACvD,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AACrD,IAAG,CAAC;AACJ,GAAE,IAAI,CAAC,QAAQ,GAAG,OAAO;AACzB,GAAE,IAAI,CAAC,QAAQ,GAAG,IAAI;;AAEtB,GAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACtB,CAAA,CAAC,CAAC;AACF,CAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;;AAEvC,CAAA,WAAW,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,GAAG,EAAE;AACpD,GAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;;AAEzB,GAAE,IAAI,CAAC,QAAQ,GAAG,KAAK;;GAErB,IAAI,CAAC,OAAO,EAAE;;GAEd,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC9C,KAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC3B,GAAA;;AAEA,GAAE,IAAI,IAAI,CAAC,OAAO,EAAE;AACpB,KAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAC1B;AACA;AACA;KACI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAA,CAAE,CAAC;AAC5C,GAAA;;AAEA,GAAE,IAAI,CAAC,MAAM,GAAG,IAAI;CACpB,CAAC;;AAED,CAAA,WAAW,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,IAAI,EAAE;AACrD,GAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACtB,KAAI,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;AACpC,OAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;;AAE1C,OAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9D,OAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;OAEtD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACtC,KAAA,CAAK,MAAM;AACX,OAAM,IAAI,OAAO;AACjB,SAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK;AAChC,WAAU,IAAI,CAAC,WAAW,CAAC,GAAG;AAC9B,WAAU,IAAI,CAAC,WAAW,CAAC,KAAK;AAChC,WAAU,CAAC;AACX,WAAU,CAAC;AACX,SAAQ,CAAC;OACH,IAAI,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;AACvD,OAAM,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;;AAE3D,OAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;OAC5D,IAAI,aAAa,GAAG,SAAS;;AAEnC,OAAM,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;OAC7C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,GAAG,EAAE;SACvC,IAAI,CAAC,aAAa,EAAE;WAClB;AACV,SAAA;;SAEQ,SAAS,CAAC,GAAG,CAAC;AACtB,OAAA,CAAO,CAAC;AACR,OAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAE5D,OAAM,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;OACvD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE;SACxC,IAAI,CAAC,aAAa,EAAE;WAClB;AACV,SAAA;;AAEA,SAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,aAAa,EAAE;WAChC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC;AAC/C,SAAA;;AAEA,SAAQ,aAAa,IAAI,KAAK,CAAC,MAAM;;SAE7B,WAAW,CAAC,KAAK,CAAC;AAC1B,OAAA,CAAO,CAAC;;OAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClE,KAAA;AACA,GAAA;AACA,GAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;CAC3B,CAAC;;AAED,CAAA,WAAW,CAAC,SAAS,CAAC,eAAe,GAAG,UAAU,QAAQ,EAAE;AAC5D,GAAE,IAAI,CAAC,SAAS,GAAG,QAAQ;GACzB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;;GAE1C,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;CAClD,CAAC;;AAED,CAAA,WAAW,CAAC,SAAS,CAAC,iBAAiB,GAAG,UAAU,UAAU,EAAE;AAChE,GAAE,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,UAAU;CAC1C,CAAC;;AAED,CAAA,WAAW,CAAC,SAAS,CAAC,cAAc,GAAG,UAAU,OAAO,EAAE;AAC1D,GAAE,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,OAAO;CACpC,CAAC;;AAED,CAAA,WAAW,CAAC,SAAS,CAAC,mBAAmB,GAAG,YAAY;AACxD,GAAE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI;CAC7B,CAAC;;AAED,CAAA,WAAW,CAAC,SAAS,CAAC,gBAAgB,GAAG,YAAY;AACrD;AACA;GACE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;CACvC,CAAC;;AAED,CAAA,WAAW,CAAC,SAAS,CAAC,SAAS,GAAG,YAAY;AAC9C,GAAE,IAAI,IAAI,CAAC,MAAM,EAAE;KACf;AACJ,GAAA;;AAEA,GAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACtB,KAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;AAC1C,GAAA,CAAG,MAAM;AACT;AACA,KAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;AACvB,GAAA;CACA,CAAC;;AAED,CAAA,WAAW,CAAC,SAAS,CAAC,SAAS,GAAG,UAAU,YAAY,EAAE;AAC1D,GAAE,IAAI,IAAI,CAAC,MAAM,EAAE;KACf;AACJ,GAAA;;AAEA,GAAE,IAAI,oBAAoB;;AAE1B,GAAE,IAAI;AACN,KAAI,IAAI,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC;;KAEvE,oBAAoB,GAAG,gBAAgB;AAC3C,OAAM,UAAU;OACV,IAAI,CAAC,WAAW;OAChB,IAAI,CAAC,QAAQ,CAAC;MACf;KACD,UAAU,GAAG,IAAI;GACrB,CAAG,CAAC,OAAO,EAAE,EAAE;AACf,KAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;KACrB;AACJ,GAAA;;AAEA,GAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC;CAC3C,CAAC;;;;;;;;;;;;;;;CCtKD,IAAI,SAAS,GAAGnB,kBAAA,EAAsB;;AAEtC,CAAA,SAAc,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;AAC3D,GAAE,IAAI,WAAW;KACb,CAAC,SAAS,CAAC,qBAAqB,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO;AACxE,OAAM,OAAO,CAAC;MACT,KAAK,EAAE;GACV,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,cAAc,EAAE;AACpD,KAAI,IAAI,SAAS,GAAG,CAAC,YAAY;AACjC,OAAM,IAAI,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;AACrC,OAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,oBAAoB;AACpE;OACM,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;AAC9C,KAAA,CAAK,GAAG;AACR;AACA,KAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,KAAK,OAAO,CAAC,QAAQ,KAAK,EAAE,IAAI,SAAS,CAAC,EAAE;AAC1E,OAAM,OAAO,MAAM;AACnB,KAAA;AACA,GAAA;;AAEA;AACA,GAAE,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,EAAE,GAAG,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;;GAE5E,IAAI,QAAQ,GAAG,GAAG;GAClB,IAAI,KAAK,GAAG,SAAS,CAAC,oBAAoB,CAAC,OAAO,CAAC,cAAc,CAAC;GAClE,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;KACzC,KAAK,GAAG,CAAC;AACb,GAAA;GACE,IAAI,MAAM,GAAG,SAAS,CAAC,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC;AAChE,GAAE,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE,EAAE;KAC3B,QAAQ,GAAG,KAAK;KAChB,MAAM,IAAI,CAAC;AACf,GAAA;AACA,GAAE,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;;GAEnD,IAAI,OAAO,GAAG,CAAC;GACf,IAAI,QAAQ,GAAG,CAAC;;AAElB,GAAE,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE;AACrC,GAAE,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE;AACjC,KAAI,OAAO,CAAC,GAAG,GAAG,QAAQ;AAC1B,GAAA;AACA,GAAE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;AACnC,KAAI,OAAO,CAAC,KAAK,GAAG,QAAQ;AAC5B,GAAA;AACA,GAAE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;AAClC,KAAI,OAAO,CAAC,IAAI,GAAG,QAAQ;AAC3B,GAAA;;GAEE,SAAS,OAAO,GAAG;AACrB,KAAI,IAAI,GAAG;AACX,KAAI,IAAI,KAAK;AACb,KAAI,IAAI,IAAI;KACR,IAAI,KAAK,GAAG,QAAQ;KACpB,QAAQ,OAAO,CAAC,cAAc;OAC5B,KAAK,SAAS,CAAC,qBAAqB;AAC1C,SAAQ,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACjC,SAAQ,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;AAC3B,SAAQ,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACjC,SAAQ,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;SACxB;OACF,KAAK,SAAS,CAAC,eAAe;AACpC,SAAQ,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;AAC3B,SAAQ,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACjC,SAAQ,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;SACxB;OACF,KAAK,SAAS,CAAC,eAAe;AACpC,SAAQ,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACjC,SAAQ,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;SACnB,KAAK,GAAG,GAAG;SACX,IAAI,GAAG,GAAG;SACV;OACF,KAAK,SAAS,CAAC,mBAAmB;AACxC,SAAQ,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;SACnB,KAAK,GAAG,GAAG;SACX,IAAI,GAAG,GAAG;SACV;OACF;SACE,MAAM,IAAI,KAAK;AACvB,WAAU,mBAAmB;aACjB,OAAO,CAAC,cAAc;aACtB;UACH;AACT;;AAEA,KAAI,IAAI,OAAO,CAAC,aAAa,EAAE;OACzB,IAAI,CAAC,WAAW,EAAE;SAChB,KAAK,IAAI,QAAQ;AACzB,SAAQ,GAAG,GAAG,IAAI,CAAC,GAAG;WACZ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;WAChE;UACD;AACT,SAAQ,KAAK,GAAG,IAAI,CAAC,GAAG;WACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;WACpE;UACD;AACT,SAAQ,IAAI,GAAG,IAAI,CAAC,GAAG;WACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;WAClE;UACD;AACT,OAAA;AACA,KAAA;AACA,KAAI,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;AAC/D,GAAA;;AAEA,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;OAC9B,IAAI,IAAI,GAAG,OAAO,CAAc,CAAC;;OAEjC,QAAQ,OAAO,CAAC,SAAS;SACvB,KAAK,SAAS,CAAC,qBAAqB;SACpC,KAAK,SAAS,CAAC,eAAe;AACtC,WAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE;AACtC,aAAY,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG;aAC5B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK;aAClC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI;aACjC,IAAI,WAAW,EAAE;eACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK;AAChD,aAAA;AACA,WAAA,CAAW,MAAM;aACL,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;aACzC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC;aAC/C,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,CAAC;aAC9C,IAAI,WAAW,EAAE;eACf,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC;AAC7D,aAAA;AACA,WAAA;WACU;SACF,KAAK,SAAS,CAAC,eAAe;AACtC,SAAQ,KAAK,SAAS,CAAC,mBAAmB,EAAE;AAC5C;AACA,WAAU,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;AACjE,WAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE;AACtC,aAAY,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS;aAC7B,IAAI,WAAW,EAAE;eACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK;AAChD,aAAA;AACA,WAAA,CAAW,MAAM;AACjB,aAAY,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC;aAC1C,IAAI,WAAW,EAAE;eACf,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC;AAC7D,aAAA;AACA,WAAA;WACU;AACV,SAAA;SACQ;WACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,OAAO,CAAC,SAAS,CAAC;AACzE;;OAEM,OAAO,IAAI,KAAK;OAChB,QAAQ,IAAI,MAAM;AACxB,KAAA;AACA,GAAA;;AAEA,GAAE,OAAO,OAAO;CAChB,CAAC;;;;;;;;;;;CC3JD,IAAI,cAAc,GAAGA,qBAAA,EAA4B;;CAEjD,SAAS,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE;AAC/D,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACtC,KAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AAC3C,GAAA;AACA,CAAA;;AAEA,CAAA,SAAS,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;GAC/C,IAAI,GAAG,GAAG,CAAC;AACb,GAAE,IAAI,MAAM,GAAG,KAAK,GAAG,SAAS;;AAEhC,GAAE,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;KACnC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9B,GAAA;AACA,GAAE,OAAO,GAAG;AACZ,CAAA;;AAEA,CAAA,SAAS,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;AACnE,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACtC,KAAI,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;KACjD,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI;;AAEtC,KAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;AAC7B,GAAA;AACA,CAAA;;CAEA,SAAS,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE;GACnD,IAAI,GAAG,GAAG,CAAC;AACb,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACtC,KAAI,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;KACjD,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI;;AAEtC,KAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACxB,GAAA;;AAEA,GAAE,OAAO,GAAG;AACZ,CAAA;;CAEA,SAAS,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE;AAC7D,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACtC,KAAI,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;KACtD,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE;;AAEpC,KAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;AAC7B,GAAA;AACA,CAAA;;AAEA,CAAA,SAAS,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;GAC7C,IAAI,GAAG,GAAG,CAAC;AACb,GAAE,IAAI,MAAM,GAAG,KAAK,GAAG,SAAS;AAChC,GAAE,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,KAAI,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;KAC9C,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;;AAE5B,KAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACxB,GAAA;;AAEA,GAAE,OAAO,GAAG;AACZ,CAAA;;AAEA,CAAA,SAAS,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;AACnE,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACtC,KAAI,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACrD,KAAI,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;AAC1D,KAAI,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;;AAEpD,KAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;AAC7B,GAAA;AACA,CAAA;;CAEA,SAAS,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE;GACnD,IAAI,GAAG,GAAG,CAAC;AACb,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACtC,KAAI,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACrD,KAAI,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;AAC1D,KAAI,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;;AAEpD,KAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACxB,GAAA;;AAEA,GAAE,OAAO,GAAG;AACZ,CAAA;;AAEA,CAAA,SAAS,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;AACrE,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACtC,KAAI,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACrD,KAAI,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;AAC1D,KAAI,IAAI,MAAM;OACR,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AACvE,KAAI,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC;;AAElE,KAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;AAC7B,GAAA;AACA,CAAA;;CAEA,SAAS,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE;GACrD,IAAI,GAAG,GAAG,CAAC;AACb,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACtC,KAAI,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACrD,KAAI,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;AAC1D,KAAI,IAAI,MAAM;OACR,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AACvE,KAAI,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC;;AAElE,KAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACxB,GAAA;;AAEA,GAAE,OAAO,GAAG;AACZ,CAAA;;AAEA,CAAA,IAAI,OAAO,GAAG;GACZ,CAAC,EAAE,UAAU;GACb,CAAC,EAAE,SAAS;GACZ,CAAC,EAAE,QAAQ;GACX,CAAC,EAAE,SAAS;GACZ,CAAC,EAAE,WAAW;EACf;;AAED,CAAA,IAAI,UAAU,GAAG;GACf,CAAC,EAAE,aAAa;GAChB,CAAC,EAAE,YAAY;GACf,CAAC,EAAE,WAAW;GACd,CAAC,EAAE,YAAY;GACf,CAAC,EAAE,cAAc;EAClB;;AAED,CAAA,UAAc,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;AAChE,GAAE,IAAI,WAAW;AACjB,GAAE,IAAI,EAAE,YAAY,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,KAAK,EAAE,EAAE;AAC/D,KAAI,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;GACjC,CAAG,MAAM,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE;AACrD,KAAI,WAAW,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;AACtC,GAAA,CAAG,MAAM;AACT,KAAI,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;AAChD,GAAA;;AAEA,GAAE,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE,EAAE;KAC3B,GAAG,IAAI,CAAC;AACZ,GAAA;AACA,GAAE,IAAI,SAAS,GAAG,KAAK,GAAG,GAAG;GAC3B,IAAI,MAAM,GAAG,CAAC;GACd,IAAI,KAAK,GAAG,CAAC;AACf,GAAE,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,MAAM,CAAC;;AAEtD,GAAE,IAAI,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC;;AAE1B,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,KAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC;OACM,IAAI,GAAG,GAAG,QAAQ;;AAExB,OAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnD,SAAQ,IAAI,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC;AAC3E,SAAQ,IAAI,GAAG,GAAG,GAAG,EAAE;AACvB,WAAU,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC;WACpB,GAAG,GAAG,GAAG;AACnB,SAAA;AACA,OAAA;AACA,KAAA;;AAEA,KAAI,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG;AACzB,KAAI,MAAM,EAAE;AACZ,KAAI,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC;KAC5D,MAAM,IAAI,SAAS;KACnB,KAAK,IAAI,SAAS;AACtB,GAAA;AACA,GAAE,OAAO,OAAO;CAChB,CAAC;;;;;;;;;;CCxKD,IAAI,SAAS,GAAGA,kBAAA,EAAsB;CACtC,IAAI,SAAS,GAAGC,UAAA,EAAgB;CAChC,IAAI,SAAS,GAAGC,gBAAA,EAAsB;CACtC,IAAI,MAAM,GAAGC,iBAAA,EAAwB;CACrC,IAAI,IAAI,GAAGC,YAAe;;AAE1B,CAAA,IAAI,MAAM,IAAIgB,MAAA,CAAA,OAAc,GAAG,UAAU,OAAO,EAAE;AAClD,GAAE,IAAI,CAAC,QAAQ,GAAG,OAAO;;GAEvB,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,EAAE,GAAG,IAAI;GAChE,OAAO,CAAC,YAAY;KAClB,OAAO,CAAC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC;GACzD,OAAO,CAAC,eAAe;KACrB,OAAO,CAAC,eAAe,IAAI,IAAI,GAAG,OAAO,CAAC,eAAe,GAAG,CAAC;GAC/D,OAAO,CAAC,aAAa;KACnB,OAAO,CAAC,aAAa,IAAI,IAAI,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI;GAC9D,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,aAAa;GACrE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC;AAC1C;GACE,OAAO,CAAC,SAAS;AACnB,KAAI,OAAO,OAAO,CAAC,SAAS,KAAK;AACjC,SAAQ,OAAO,CAAC;SACR,SAAS,CAAC,qBAAqB;GACrC,OAAO,CAAC,cAAc;AACxB,KAAI,OAAO,OAAO,CAAC,cAAc,KAAK;AACtC,SAAQ,OAAO,CAAC;SACR,SAAS,CAAC,qBAAqB;;GAErC;KACE;OACE,SAAS,CAAC,mBAAmB;OAC7B,SAAS,CAAC,eAAe;OACzB,SAAS,CAAC,qBAAqB;OAC/B,SAAS,CAAC,eAAe;MAC1B,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK;KACjC;KACA,MAAM,IAAI,KAAK;AACnB,OAAM,oBAAoB,GAAG,OAAO,CAAC,SAAS,GAAG;MAC5C;AACL,GAAA;GACE;KACE;OACE,SAAS,CAAC,mBAAmB;OAC7B,SAAS,CAAC,eAAe;OACzB,SAAS,CAAC,qBAAqB;OAC/B,SAAS,CAAC,eAAe;MAC1B,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK;KACtC;KACA,MAAM,IAAI,KAAK;AACnB,OAAM,0BAA0B;SACxB,OAAO,CAAC,cAAc;SACtB;MACH;AACL,GAAA;AACA,GAAE,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE,EAAE;KACrD,MAAM,IAAI,KAAK;AACnB,OAAM,mBAAmB,GAAG,OAAO,CAAC,QAAQ,GAAG;MAC1C;AACL,GAAA;AACA,CAAA,CAAC,CAAC;;AAEF,CAAA,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAAG,YAAY;AACjD,GAAE,OAAO;AACT,KAAI,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB;AAC7C,KAAI,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;AACrC,KAAI,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe;IACxC;CACH,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,YAAY;GAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;CAC/D,CAAC;;CAED,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;AAC7D;AACA,GAAE,IAAI,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;;AAEhE;AACA,GAAE,IAAI,GAAG,GAAG,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACnE,GAAE,IAAI,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1E,GAAE,OAAO,YAAY;CACrB,CAAC;;CAED,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE;GAClD,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;GAChC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;;AAElC,GAAE,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3B,GAAE,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;;GAE1B,IAAI,IAAI,EAAE;AACZ,KAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACrB,GAAA;;GAEE,GAAG,CAAC,YAAY;AAClB,KAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KAC7C,GAAG,CAAC,MAAM,GAAG;IACd;AACH,GAAE,OAAO,GAAG;CACZ,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,KAAK,EAAE;GAC3C,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3B,GAAE,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;GAClE,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC;CAClD,CAAC;;CAED,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE;GACnD,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5B,GAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,GAAE,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;GAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;GAChC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACnC,GAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACd,GAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACd,GAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;;GAEZ,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC;CAClD,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,IAAI,EAAE;GAC1C,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC;CACnD,CAAC;;AAED,CAAA,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAY;GACtC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC;CACnD,CAAC;;;;;;;;;;CC9HD,IAAI,IAAI,GAAGpB,YAAe;CAC1B,IAAI,MAAM,GAAG,UAAiB;CAC9B,IAAI,SAAS,GAAGE,kBAAA,EAAsB;CACtC,IAAI,MAAM,GAAGC,aAAA,EAAmB;;AAEhC,CAAA,IAAI,WAAW,IAAIkB,WAAA,CAAA,OAAc,GAAG,UAAU,GAAG,EAAE;AACnD,GAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEnB,GAAE,IAAI,OAAO,GAAG,GAAG,IAAI,EAAE;;GAEvB,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;GAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;;AAE9C,GAAE,IAAI,CAAC,QAAQ,GAAG,IAAI;AACtB,CAAA,CAAC,CAAC;AACF,CAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;;AAElC,CAAA,WAAW,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACnE;AACA,GAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;AACzD,GAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;;GAEvD,IAAI,KAAK,EAAE;AACb,KAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnD,GAAA;;AAEA,GAAE,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;;AAEjE;AACA,GAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;;AAE1D,GAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;AAClB,KAAI,MAAM;KACN,UAAU,cAAc,EAAE;AAC9B,OAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;KAC9D,CAAK,CAAC,IAAI,CAAC,IAAI;IACZ;;AAEH,GAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;AAClB,KAAI,KAAK;AACT,KAAI,YAAY;AAChB,OAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AAChD,OAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;KACtB,CAAK,CAAC,IAAI,CAAC,IAAI;IACZ;;AAEH,GAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;CACjC,CAAC;;;;;;;;;;;;;;;;;;AC/CD,CAAA,QAAA,CAAA,UAAkB,GAAG;AACrB,CAAA,QAAA,CAAA,WAAmB,GAAG;AACtB,CAAA,QAAA,CAAA,aAAqB,GAAG;;AAExB,CAAA,IAAI,MAAM,GAAG;AACb,CAAA,IAAI,SAAS,GAAG;CAChB,IAAI,GAAG,GAAG,OAAO,UAAU,KAAK,WAAW,GAAG,UAAU,GAAG;;AAE3D,CAAA,IAAI,IAAI,GAAG;AACX,CAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;AACjD,GAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;GAClB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG;AAClC,CAAA;;AAEA;AACA;CACA,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG;CAC/B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG;;CAE/B,SAAS,OAAO,EAAE,GAAG,EAAE;AACvB,GAAE,IAAI,GAAG,GAAG,GAAG,CAAC;;AAEhB,GAAE,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE;AACnB,KAAI,MAAM,IAAI,KAAK,CAAC,gDAAgD;AACpE,GAAA;;AAEA;AACA;AACA,GAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG;AAChC,GAAE,IAAI,QAAQ,KAAK,EAAE,EAAE,QAAQ,GAAG;;AAElC,GAAE,IAAI,eAAe,GAAG,QAAQ,KAAK;OAC/B;AACN,OAAM,CAAC,IAAI,QAAQ,GAAG,CAAC;;AAEvB,GAAE,OAAO,CAAC,QAAQ,EAAE,eAAe;AACnC,CAAA;;AAEA;CACA,SAAS,UAAU,EAAE,GAAG,EAAE;AAC1B,GAAE,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG;AACxB,GAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC;AACvB,GAAE,IAAI,eAAe,GAAG,IAAI,CAAC,CAAC;GAC5B,OAAO,CAAC,CAAC,QAAQ,GAAG,eAAe,IAAI,CAAC,GAAG,CAAC,IAAI;AAClD,CAAA;;AAEA,CAAA,SAAS,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE;GACpD,OAAO,CAAC,CAAC,QAAQ,GAAG,eAAe,IAAI,CAAC,GAAG,CAAC,IAAI;AAClD,CAAA;;CAEA,SAAS,WAAW,EAAE,GAAG,EAAE;AAC3B,GAAE,IAAI;AACN,GAAE,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG;AACxB,GAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC;AACvB,GAAE,IAAI,eAAe,GAAG,IAAI,CAAC,CAAC;;AAE9B,GAAE,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,CAAC;;GAE7D,IAAI,OAAO,GAAG;;AAEhB;AACA,GAAE,IAAI,GAAG,GAAG,eAAe,GAAG;AAC9B,OAAM,QAAQ,GAAG;OACX;;AAEN,GAAE,IAAI;AACN,GAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AAC/B,KAAI,GAAG;OACD,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACzC,QAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9C,QAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;OACvC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;KACjC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI;KAC/B,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI;AAClC,KAAI,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,GAAG,GAAG;AAC3B,GAAA;;AAEA,GAAE,IAAI,eAAe,KAAK,CAAC,EAAE;AAC7B,KAAI,GAAG;OACD,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,QAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,KAAI,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,GAAG,GAAG;AAC3B,GAAA;;AAEA,GAAE,IAAI,eAAe,KAAK,CAAC,EAAE;AAC7B,KAAI,GAAG;OACD,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACzC,QAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7C,QAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;KACxC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI;AAClC,KAAI,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,GAAG,GAAG;AAC3B,GAAA;;AAEA,GAAE,OAAO;AACT,CAAA;;CAEA,SAAS,eAAe,EAAE,GAAG,EAAE;GAC7B,OAAO,MAAM,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;AACjC,KAAI,MAAM,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;AAC5B,KAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAC3B,KAAI,MAAM,CAAC,GAAG,GAAG,IAAI;AACrB,CAAA;;AAEA,CAAA,SAAS,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;AACzC,GAAE,IAAI;GACJ,IAAI,MAAM,GAAG;AACf,GAAE,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AACvC,KAAI,GAAG;OACD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,QAAQ;QAC3B,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;AACpC,QAAO,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AAC1B,KAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACpC,GAAA;AACA,GAAE,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE;AACvB,CAAA;;CAEA,SAAS,aAAa,EAAE,KAAK,EAAE;AAC/B,GAAE,IAAI;AACN,GAAE,IAAI,GAAG,GAAG,KAAK,CAAC;AAClB,GAAE,IAAI,UAAU,GAAG,GAAG,GAAG,EAAC;GACxB,IAAI,KAAK,GAAG;GACZ,IAAI,cAAc,GAAG,MAAK;;AAE5B;AACA,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,cAAc,EAAE;KACtE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,cAAc,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;AAC/F,GAAA;;AAEA;AACA,GAAE,IAAI,UAAU,KAAK,CAAC,EAAE;AACxB,KAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;KACnB,KAAK,CAAC,IAAI;AACd,OAAM,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;OAChB,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;OACzB;AACN;AACA,GAAA,CAAG,MAAM,IAAI,UAAU,KAAK,CAAC,EAAE;AAC/B,KAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC;KAC3C,KAAK,CAAC,IAAI;AACd,OAAM,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;OACjB,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;OACzB,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;OACzB;AACN;AACA,GAAA;;AAEA,GAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE;AACtB,CAAA;;;;;;;;;;;;;ACpJA,CAAA,OAAA,CAAA,IAAY,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;GAC3D,IAAI,CAAC,EAAE;GACP,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG;AACnC,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI;AAC3B,GAAE,IAAI,KAAK,GAAG,IAAI,IAAI;GACpB,IAAI,KAAK,GAAG;GACZ,IAAI,CAAC,GAAG,IAAI,IAAI,MAAM,GAAG,CAAC,IAAI;AAChC,GAAE,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG;AACtB,GAAE,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;;AAE3B,GAAE,CAAC,IAAI;;GAEL,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;GAC5B,CAAC,MAAM,CAAC,KAAK;AACf,GAAE,KAAK,IAAI;GACT,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAA;;GAE1E,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;GAC5B,CAAC,MAAM,CAAC,KAAK;AACf,GAAE,KAAK,IAAI;GACT,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAA;;AAE5E,GAAE,IAAI,CAAC,KAAK,CAAC,EAAE;KACX,CAAC,GAAG,CAAC,GAAG;AACZ,GAAA,CAAG,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;AACzB,KAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,QAAQ;AAC7C,GAAA,CAAG,MAAM;KACL,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI;KACxB,CAAC,GAAG,CAAC,GAAG;AACZ,GAAA;AACA,GAAE,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI;AAChD,CAAA;;AAEA,CAAA,OAAA,CAAA,KAAa,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;AACrE,GAAE,IAAI,CAAC,EAAE,CAAC,EAAE;GACV,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG;AACnC,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI;AAC3B,GAAE,IAAI,KAAK,GAAG,IAAI,IAAI;GACpB,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;GAC/D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC;AAChC,GAAE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG;AACrB,GAAE,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG;;AAE5D,GAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK;;GAEtB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;KACtC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;AAC3B,KAAI,CAAC,GAAG;AACR,GAAA,CAAG,MAAM;AACT,KAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG;AAC7C,KAAI,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAC3C,OAAM,CAAC;AACP,OAAM,CAAC,IAAI;AACX,KAAA;AACA,KAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;OAClB,KAAK,IAAI,EAAE,GAAG;AACpB,KAAA,CAAK,MAAM;AACX,OAAM,KAAK,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK;AACzC,KAAA;AACA,KAAI,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;AACxB,OAAM,CAAC;AACP,OAAM,CAAC,IAAI;AACX,KAAA;;AAEA,KAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE;AAC3B,OAAM,CAAC,GAAG;AACV,OAAM,CAAC,GAAG;AACV,KAAA,CAAK,MAAM,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;AAC/B,OAAM,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI;OACxC,CAAC,GAAG,CAAC,GAAG;AACd,KAAA,CAAK,MAAM;OACL,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI;AAC3D,OAAM,CAAC,GAAG;AACV,KAAA;AACA,GAAA;;GAEE,OAAO,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,CAAA;;AAEhF,GAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI;AACpB,GAAE,IAAI,IAAI;GACR,OAAO,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,CAAA;;GAE7E,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG;AAChC,CAAA;;;;;;;;;;;;;;;;;;AC1EA,EAAA,MAAM,MAAM,GAAGrB,eAAA;AACf,EAAA,MAAM,OAAO,GAAGC,cAAA;AAChB,EAAA,MAAM,mBAAmB;AACzB,IAAE,CAAC,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,UAAU;AACtE,QAAM,MAAM,CAAC,KAAK,CAAC,CAAC,4BAA4B,CAAC;QAC3C;;EAENK,SAAA,CAAA,MAAA,GAAiB;EACjBA,SAAA,CAAA,UAAA,GAAqB;EACrBA,SAAA,CAAA,iBAAA,GAA4B;;AAE5B,EAAA,MAAM,YAAY,GAAG;EACrBA,SAAA,CAAA,UAAA,GAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACA,MAAM,CAAC,mBAAmB,GAAG,iBAAiB;;EAE9C,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,OAAO,OAAO,KAAK,WAAW;AACjE,MAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;IACvC,OAAO,CAAC,KAAK;AACf,MAAI,2EAA2E;MAC3E;AACJ;AACA,EAAA;;AAEA,EAAA,SAAS,iBAAiB,IAAI;AAC9B;AACA,IAAE,IAAI;AACN,MAAI,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC;MAC5B,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,CAAA,CAAE;MAC9C,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS;AACrD,MAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK;AACpC,MAAI,OAAO,GAAG,CAAC,GAAG,EAAE,KAAK;IACzB,CAAG,CAAC,OAAO,CAAC,EAAE;AACd,MAAI,OAAO;AACX,IAAA;AACA,EAAA;;EAEA,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE;IAChD,UAAU,EAAE,IAAI;IAChB,GAAG,EAAE,YAAY;MACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO;MACnC,OAAO,IAAI,CAAC;AAChB,IAAA;GACC;;EAED,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE;IAChD,UAAU,EAAE,IAAI;IAChB,GAAG,EAAE,YAAY;MACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO;MACnC,OAAO,IAAI,CAAC;AAChB,IAAA;GACC;;EAED,SAAS,YAAY,EAAE,MAAM,EAAE;AAC/B,IAAE,IAAI,MAAM,GAAG,YAAY,EAAE;MACzB,MAAM,IAAI,UAAU,CAAC,aAAa,GAAG,MAAM,GAAG,gCAAgC;AAClF,IAAA;AACA;AACA,IAAE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM;IACjC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS;AAC7C,IAAE,OAAO;AACT,EAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAA,SAAS,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE;AAChD;AACA,IAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC/B,MAAI,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE;QACxC,MAAM,IAAI,SAAS;UACjB;AACR;AACA,MAAA;MACI,OAAO,WAAW,CAAC,GAAG;AAC1B,IAAA;AACA,IAAE,OAAO,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM;AAC3C,EAAA;;EAEA,MAAM,CAAC,QAAQ,GAAG,KAAI;;AAEtB,EAAA,SAAS,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE;AAChD,IAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACjC,MAAI,OAAO,UAAU,CAAC,KAAK,EAAE,gBAAgB;AAC7C,IAAA;;AAEA,IAAE,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;MAC7B,OAAO,aAAa,CAAC,KAAK;AAC9B,IAAA;;AAEA,IAAE,IAAI,KAAK,IAAI,IAAI,EAAE;MACjB,MAAM,IAAI,SAAS;AACvB,QAAM,6EAA6E;QAC7E,sCAAsC,IAAI,OAAO,KAAK;AAC5D;AACA,IAAA;;AAEA,IAAE,IAAI,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;SAC7B,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE;AACxD,MAAI,OAAO,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM;AAC1D,IAAA;;AAEA,IAAE,IAAI,OAAO,iBAAiB,KAAK,WAAW;AAC9C,SAAO,UAAU,CAAC,KAAK,EAAE,iBAAiB,CAAC;AAC3C,SAAO,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE;AAC/D,MAAI,OAAO,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM;AAC1D,IAAA;;AAEA,IAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;MAC7B,MAAM,IAAI,SAAS;QACjB;AACN;AACA,IAAA;;IAEE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;IAC9C,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,EAAE;MACxC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM;AACxD,IAAA;;AAEA,IAAE,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK;IAC1B,IAAI,CAAC,EAAE,OAAO;;IAEd,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI;QAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,UAAU,EAAE;AACvD,MAAI,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,MAAM;AACpF,IAAA;;IAEE,MAAM,IAAI,SAAS;AACrB,MAAI,6EAA6E;MAC7E,sCAAsC,IAAI,OAAO,KAAK;AAC1D;AACA,EAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACA,MAAM,CAAC,IAAI,GAAG,UAAU,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE;AACzD,IAAE,OAAO,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM;AAC7C,EAAA;;AAEA;AACA;EACA,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS;AAC5D,EAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU;;EAExC,SAAS,UAAU,EAAE,IAAI,EAAE;AAC3B,IAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC,MAAI,MAAM,IAAI,SAAS,CAAC,wCAAwC;AAChE,IAAA,CAAG,MAAM,IAAI,IAAI,GAAG,CAAC,EAAE;MACnB,MAAM,IAAI,UAAU,CAAC,aAAa,GAAG,IAAI,GAAG,gCAAgC;AAChF,IAAA;AACA,EAAA;;AAEA,EAAA,SAAS,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;IACpC,UAAU,CAAC,IAAI;AACjB,IAAE,IAAI,IAAI,IAAI,CAAC,EAAE;MACb,OAAO,YAAY,CAAC,IAAI;AAC5B,IAAA;AACA,IAAE,IAAI,IAAI,KAAK,SAAS,EAAE;AAC1B;AACA;AACA;MACI,OAAO,OAAO,QAAQ,KAAK;UACvB,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ;AAC9C,UAAQ,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI;AACpC,IAAA;IACE,OAAO,YAAY,CAAC,IAAI;AAC1B,EAAA;;AAEA;AACA;AACA;AACA;EACA,MAAM,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC/C,IAAE,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ;AACnC,EAAA;;EAEA,SAAS,WAAW,EAAE,IAAI,EAAE;IAC1B,UAAU,CAAC,IAAI;AACjB,IAAE,OAAO,YAAY,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACtD,EAAA;;AAEA;AACA;AACA;AACA,EAAA,MAAM,CAAC,WAAW,GAAG,UAAU,IAAI,EAAE;IACnC,OAAO,WAAW,CAAC,IAAI;AACzB,EAAA;AACA;AACA;AACA;AACA,EAAA,MAAM,CAAC,eAAe,GAAG,UAAU,IAAI,EAAE;IACvC,OAAO,WAAW,CAAC,IAAI;AACzB,EAAA;;AAEA,EAAA,SAAS,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,EAAE,EAAE;AACvD,MAAI,QAAQ,GAAG;AACf,IAAA;;IAEE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AACpC,MAAI,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,QAAQ;AACvD,IAAA;;IAEE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG;AAChD,IAAE,IAAI,GAAG,GAAG,YAAY,CAAC,MAAM;;IAE7B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ;;AAE3C,IAAE,IAAI,MAAM,KAAK,MAAM,EAAE;AACzB;AACA;AACA;MACI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM;AAC7B,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,aAAa,EAAE,KAAK,EAAE;AAC/B,IAAE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AAChE,IAAE,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM;AACjC,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;MAClC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG;AACxB,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,aAAa,EAAE,SAAS,EAAE;AACnC,IAAE,IAAI,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE;AACzC,MAAI,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,SAAS;AACzC,MAAI,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU;AACxE,IAAA;IACE,OAAO,aAAa,CAAC,SAAS;AAChC,EAAA;;AAEA,EAAA,SAAS,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE;IACnD,IAAI,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE;AACvD,MAAI,MAAM,IAAI,UAAU,CAAC,sCAAsC;AAC/D,IAAA;;IAEE,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE;AACrD,MAAI,MAAM,IAAI,UAAU,CAAC,sCAAsC;AAC/D,IAAA;;AAEA,IAAE,IAAI;IACJ,IAAI,UAAU,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;AACxD,MAAI,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK;AAC9B,IAAA,CAAG,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE;AACnC,MAAI,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU;AAC1C,IAAA,CAAG,MAAM;MACL,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM;AAClD,IAAA;;AAEA;IACE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS;;AAE7C,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,UAAU,EAAE,GAAG,EAAE;AAC1B,IAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;MACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG;AACtC,MAAI,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG;;AAEhC,MAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAM,OAAO;AACb,MAAA;;MAEI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG;AAC3B,MAAI,OAAO;AACX,IAAA;;AAEA,IAAE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE;AAChC,MAAI,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC7D,OAAO,YAAY,CAAC,CAAC;AAC3B,MAAA;MACI,OAAO,aAAa,CAAC,GAAG;AAC5B,IAAA;;AAEA,IAAE,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACxD,MAAI,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI;AACjC,IAAA;AACA,EAAA;;EAEA,SAAS,OAAO,EAAE,MAAM,EAAE;AAC1B;AACA;AACA,IAAE,IAAI,MAAM,IAAI,YAAY,EAAE;AAC9B,MAAI,MAAM,IAAI,UAAU,CAAC,iDAAiD;2BACjD,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ;AAC1E,IAAA;IACE,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,SAAS,UAAU,EAAE,MAAM,EAAE;AAC7B,IAAE,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE;AACzB,MAAI,MAAM,GAAG;AACb,IAAA;AACA,IAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM;AAC7B,EAAA;;AAEA,EAAA,MAAM,CAAC,QAAQ,GAAG,SAAS,QAAQ,EAAE,CAAC,EAAE;IACtC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI;AAC1C,MAAI,CAAC,KAAK,MAAM,CAAC,SAAS;AAC1B,EAAA;;EAEA,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;IACvC,IAAI,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU;IACxE,IAAI,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU;AAC1E,IAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;MAC9C,MAAM,IAAI,SAAS;QACjB;AACN;AACA,IAAA;;AAEA,IAAE,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO;;AAEtB,IAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,IAAE,IAAI,CAAC,GAAG,CAAC,CAAC;;IAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;MAClD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AACvB,QAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACb,QAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACP;AACN,MAAA;AACA,IAAA;;AAEA,IAAE,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO;AACpB,IAAE,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO;AACpB,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE,QAAQ,EAAE;AACnD,IAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;AACxC,MAAI,KAAK,KAAK;AACd,MAAI,KAAK,MAAM;AACf,MAAI,KAAK,OAAO;AAChB,MAAI,KAAK,OAAO;AAChB,MAAI,KAAK,QAAQ;AACjB,MAAI,KAAK,QAAQ;AACjB,MAAI,KAAK,QAAQ;AACjB,MAAI,KAAK,MAAM;AACf,MAAI,KAAK,OAAO;AAChB,MAAI,KAAK,SAAS;AAClB,MAAI,KAAK,UAAU;AACnB,QAAM,OAAO;MACT;AACJ,QAAM,OAAO;AACb;AACA,EAAA;;EAEA,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC5B,MAAI,MAAM,IAAI,SAAS,CAAC,6CAA6C;AACrE,IAAA;;AAEA,IAAE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,MAAI,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,IAAA;;AAEA,IAAE,IAAI;AACN,IAAE,IAAI,MAAM,KAAK,SAAS,EAAE;AAC5B,MAAI,MAAM,GAAG;AACb,MAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACtC,QAAM,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,MAAA;AACA,IAAA;;AAEA,IAAE,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM;IACxC,IAAI,GAAG,GAAG;AACZ,IAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACpC,MAAI,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC;AACpB,MAAI,IAAI,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE;QAC/B,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE;AAC5C,UAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG;AACxD,UAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG;AAC5B,QAAA,CAAO,MAAM;AACb,UAAQ,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI;AACrC,YAAU,MAAM;AAChB,YAAU,GAAG;YACH;AACV;AACA,QAAA;MACA,CAAK,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtC,QAAM,MAAM,IAAI,SAAS,CAAC,6CAA6C;AACvE,MAAA,CAAK,MAAM;AACX,QAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG;AAC1B,MAAA;MACI,GAAG,IAAI,GAAG,CAAC;AACf,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE;AACvC,IAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;MAC3B,OAAO,MAAM,CAAC;AAClB,IAAA;AACA,IAAE,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;MACjE,OAAO,MAAM,CAAC;AAClB,IAAA;AACA,IAAE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;MAC9B,MAAM,IAAI,SAAS;AACvB,QAAM,4EAA4E;QAC5E,gBAAgB,GAAG,OAAO;AAChC;AACA,IAAA;;AAEA,IAAE,MAAM,GAAG,GAAG,MAAM,CAAC;AACrB,IAAE,MAAM,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI;IAChE,IAAI,CAAC,SAAS,IAAI,GAAG,KAAK,CAAC,EAAE,OAAO;;AAEtC;IACE,IAAI,WAAW,GAAG;AACpB,IAAE,SAAS;AACX,MAAI,QAAQ,QAAQ;AACpB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,QAAQ;AACnB,QAAM,KAAK,QAAQ;AACnB,UAAQ,OAAO;AACf,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,OAAO;AAClB,UAAQ,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AACnC,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,SAAS;AACpB,QAAM,KAAK,UAAU;UACb,OAAO,GAAG,GAAG;AACrB,QAAM,KAAK,KAAK;UACR,OAAO,GAAG,KAAK;AACvB,QAAM,KAAK,QAAQ;AACnB,UAAQ,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/B;UACE,IAAI,WAAW,EAAE;YACf,OAAO,SAAS,GAAG,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM;AAC5D,UAAA;AACA,UAAQ,QAAQ,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,WAAW;AAC9C,UAAQ,WAAW,GAAG;AACtB;AACA,IAAA;AACA,EAAA;EACA,MAAM,CAAC,UAAU,GAAG;;AAEpB,EAAA,SAAS,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;IAC3C,IAAI,WAAW,GAAG;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;IACE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE;AACxC,MAAI,KAAK,GAAG;AACZ,IAAA;AACA;AACA;AACA,IAAE,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,MAAI,OAAO;AACX,IAAA;;IAEE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;MAC1C,GAAG,GAAG,IAAI,CAAC;AACf,IAAA;;AAEA,IAAE,IAAI,GAAG,IAAI,CAAC,EAAE;AAChB,MAAI,OAAO;AACX,IAAA;;AAEA;AACA,IAAE,GAAG,MAAM;AACX,IAAE,KAAK,MAAM;;AAEb,IAAE,IAAI,GAAG,IAAI,KAAK,EAAE;AACpB,MAAI,OAAO;AACX,IAAA;;AAEA,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG;;IAE1B,OAAO,IAAI,EAAE;AACf,MAAI,QAAQ,QAAQ;AACpB,QAAM,KAAK,KAAK;AAChB,UAAQ,OAAO,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;;AAExC,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,OAAO;AAClB,UAAQ,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;;AAEzC,QAAM,KAAK,OAAO;AAClB,UAAQ,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;;AAE1C,QAAM,KAAK,QAAQ;AACnB,QAAM,KAAK,QAAQ;AACnB,UAAQ,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;;AAE3C,QAAM,KAAK,QAAQ;AACnB,UAAQ,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;;AAE3C,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,SAAS;AACpB,QAAM,KAAK,UAAU;AACrB,UAAQ,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;;QAEtC;UACE,IAAI,WAAW,EAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,QAAQ;AAC5E,UAAQ,QAAQ,GAAG,CAAC,QAAQ,GAAG,EAAE,EAAE,WAAW;AAC9C,UAAQ,WAAW,GAAG;AACtB;AACA,IAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;;AAE7B,EAAA,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACxB,IAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACf,IAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACZ,IAAE,CAAC,CAAC,CAAC,CAAC,GAAG;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,IAAI;AAC7C,IAAE,MAAM,GAAG,GAAG,IAAI,CAAC;AACnB,IAAE,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;AACrB,MAAI,MAAM,IAAI,UAAU,CAAC,2CAA2C;AACpE,IAAA;AACA,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;AACvB,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,IAAI;AAC7C,IAAE,MAAM,GAAG,GAAG,IAAI,CAAC;AACnB,IAAE,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;AACrB,MAAI,MAAM,IAAI,UAAU,CAAC,2CAA2C;AACpE,IAAA;AACA,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;MACnB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;AAC3B,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,IAAI;AAC7C,IAAE,MAAM,GAAG,GAAG,IAAI,CAAC;AACnB,IAAE,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;AACrB,MAAI,MAAM,IAAI,UAAU,CAAC,2CAA2C;AACpE,IAAA;AACA,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;MACnB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;AAC3B,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,IAAI;AACjD,IAAE,MAAM,MAAM,GAAG,IAAI,CAAC;AACtB,IAAE,IAAI,MAAM,KAAK,CAAC,EAAE,OAAO;AAC3B,IAAE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM;AAC9D,IAAE,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS;AAC3C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC;;EAEnD,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,EAAE;AAC9C,IAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,2BAA2B;AAC1E,IAAE,IAAI,IAAI,KAAK,CAAC,EAAE,OAAO;IACvB,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK;AACrC,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,IAAI;IAC7C,IAAI,GAAG,GAAG;AACZ,IAAE,MAAM,GAAG,GAAGA,SAAO,CAAC;IACpB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI;IACjE,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI;AAChC,IAAE,OAAO,UAAU,GAAG,GAAG,GAAG;AAC5B,EAAA;AACA,EAAA,IAAI,mBAAmB,EAAE;IACvB,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;AAC3D,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE;AACrF,IAAE,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;AACtC,MAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU;AACjE,IAAA;IACE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;MAC5B,MAAM,IAAI,SAAS;AACvB,QAAM,kEAAkE;QAClE,gBAAgB,IAAI,OAAO,MAAM;AACvC;AACA,IAAA;;AAEA,IAAE,IAAI,KAAK,KAAK,SAAS,EAAE;AAC3B,MAAI,KAAK,GAAG;AACZ,IAAA;AACA,IAAE,IAAI,GAAG,KAAK,SAAS,EAAE;AACzB,MAAI,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG;AACnC,IAAA;AACA,IAAE,IAAI,SAAS,KAAK,SAAS,EAAE;AAC/B,MAAI,SAAS,GAAG;AAChB,IAAA;AACA,IAAE,IAAI,OAAO,KAAK,SAAS,EAAE;MACzB,OAAO,GAAG,IAAI,CAAC;AACnB,IAAA;;IAEE,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE;AAClF,MAAI,MAAM,IAAI,UAAU,CAAC,oBAAoB;AAC7C,IAAA;;IAEE,IAAI,SAAS,IAAI,OAAO,IAAI,KAAK,IAAI,GAAG,EAAE;AAC5C,MAAI,OAAO;AACX,IAAA;AACA,IAAE,IAAI,SAAS,IAAI,OAAO,EAAE;AAC5B,MAAI,OAAO;AACX,IAAA;AACA,IAAE,IAAI,KAAK,IAAI,GAAG,EAAE;AACpB,MAAI,OAAO;AACX,IAAA;;AAEA,IAAE,KAAK,MAAM;AACb,IAAE,GAAG,MAAM;AACX,IAAE,SAAS,MAAM;AACjB,IAAE,OAAO,MAAM;;AAEf,IAAE,IAAI,IAAI,KAAK,MAAM,EAAE,OAAO;;AAE9B,IAAE,IAAI,CAAC,GAAG,OAAO,GAAG;AACpB,IAAE,IAAI,CAAC,GAAG,GAAG,GAAG;IACd,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;;IAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG;;AAE5C,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;MAC5B,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE;AACvC,QAAM,CAAC,GAAG,QAAQ,CAAC,CAAC;AACpB,QAAM,CAAC,GAAG,UAAU,CAAC,CAAC;QAChB;AACN,MAAA;AACA,IAAA;;AAEA,IAAE,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO;AACpB,IAAE,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO;AACpB,IAAE,OAAO;AACT,EAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACA,SAAS,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE;AACvE;IACE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO;;AAElC;AACA,IAAE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACtC,MAAI,QAAQ,GAAG;AACf,MAAI,UAAU,GAAG;AACjB,IAAA,CAAG,MAAM,IAAI,UAAU,GAAG,UAAU,EAAE;AACtC,MAAI,UAAU,GAAG;AACjB,IAAA,CAAG,MAAM,IAAI,UAAU,GAAG,WAAW,EAAE;MACnC,UAAU,GAAG;AACjB,IAAA;IACE,UAAU,GAAG,CAAC,WAAU;AAC1B,IAAE,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE;AAC/B;MACI,UAAU,GAAG,GAAG,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AAC7C,IAAA;;AAEA;IACE,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG;AACnD,IAAE,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE;AACnC,MAAI,IAAI,GAAG,EAAE,OAAO;AACpB,WAAS,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG;AACtC,IAAA,CAAG,MAAM,IAAI,UAAU,GAAG,CAAC,EAAE;AAC7B,MAAI,IAAI,GAAG,EAAE,UAAU,GAAG;AAC1B,WAAS,OAAO;AAChB,IAAA;;AAEA;AACA,IAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;MAC3B,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ;AACnC,IAAA;;AAEA;AACA,IAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5B;AACA,MAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAM,OAAO;AACb,MAAA;MACI,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG;AAC9D,IAAA,CAAG,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AACtC,MAAI,GAAG,GAAG,GAAG,GAAG,KAAI;MAChB,IAAI,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,KAAK,UAAU,EAAE;QACtD,IAAI,GAAG,EAAE;AACf,UAAQ,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU;AACxE,QAAA,CAAO,MAAM;AACb,UAAQ,OAAO,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU;AAC5E,QAAA;AACA,MAAA;AACA,MAAI,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG;AAChE,IAAA;;AAEA,IAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC;AAC5D,EAAA;;EAEA,SAAS,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE;IAC1D,IAAI,SAAS,GAAG;AAClB,IAAE,IAAI,SAAS,GAAG,GAAG,CAAC;AACtB,IAAE,IAAI,SAAS,GAAG,GAAG,CAAC;;AAEtB,IAAE,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC9B,MAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW;AAC3C,MAAI,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO;AACnD,UAAQ,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,UAAU,EAAE;AAC3D,QAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,UAAQ,OAAO;AACf,QAAA;AACA,QAAM,SAAS,GAAG;AAClB,QAAM,SAAS,IAAI;AACnB,QAAM,SAAS,IAAI;AACnB,QAAM,UAAU,IAAI;AACpB,MAAA;AACA,IAAA;;AAEA,IAAE,SAAS,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;AACzB,MAAI,IAAI,SAAS,KAAK,CAAC,EAAE;QACnB,OAAO,GAAG,CAAC,CAAC;AAClB,MAAA,CAAK,MAAM;AACX,QAAM,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS;AAC3C,MAAA;AACA,IAAA;;AAEA,IAAE,IAAI;IACJ,IAAI,GAAG,EAAE;MACP,IAAI,UAAU,GAAG;MACjB,KAAK,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,UAAU,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE;AAC9E,UAAQ,IAAI,UAAU,KAAK,EAAE,EAAE,UAAU,GAAG;UACpC,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,KAAK,SAAS,EAAE,OAAO,UAAU,GAAG;AAClE,QAAA,CAAO,MAAM;UACL,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG;UAChC,UAAU,GAAG;AACrB,QAAA;AACA,MAAA;AACA,IAAA,CAAG,MAAM;MACL,IAAI,UAAU,GAAG,SAAS,GAAG,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG;MACjE,KAAK,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,IAAI,KAAK,GAAG;AAClB,QAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AAC1C,UAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;AAC/C,YAAU,KAAK,GAAG;YACR;AACV,UAAA;AACA,QAAA;QACM,IAAI,KAAK,EAAE,OAAO;AACxB,MAAA;AACA,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE;AAC1E,IAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK;AACrD,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE;IACtE,OAAO,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI;AACnE,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC9E,OAAO,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK;AACpE,EAAA;;EAEA,SAAS,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AAChD,IAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI;AAC7B,IAAE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,GAAG;IAC/B,IAAI,CAAC,MAAM,EAAE;AACf,MAAI,MAAM,GAAG;AACb,IAAA,CAAG,MAAM;AACT,MAAI,MAAM,GAAG,MAAM,CAAC,MAAM;AAC1B,MAAI,IAAI,MAAM,GAAG,SAAS,EAAE;AAC5B,QAAM,MAAM,GAAG;AACf,MAAA;AACA,IAAA;;AAEA,IAAE,MAAM,MAAM,GAAG,MAAM,CAAC;;AAExB,IAAE,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE;MACvB,MAAM,GAAG,MAAM,GAAG;AACtB,IAAA;AACA,IAAE,IAAI;IACJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;AAC/B,MAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;AACvD,MAAI,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO;AACpC,MAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;AACtB,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACjD,IAAE,OAAO,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;AACjF,EAAA;;EAEA,SAAS,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AAClD,IAAE,OAAO,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;AAC7D,EAAA;;EAEA,SAAS,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACnD,IAAE,OAAO,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;AAC9D,EAAA;;EAEA,SAAS,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACjD,IAAE,OAAO,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;AACpF,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC3E;AACA,IAAE,IAAI,MAAM,KAAK,SAAS,EAAE;AAC5B,MAAI,QAAQ,GAAG;MACX,MAAM,GAAG,IAAI,CAAC;AAClB,MAAI,MAAM,GAAG;AACb;IACA,CAAG,MAAM,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACjE,MAAI,QAAQ,GAAG;MACX,MAAM,GAAG,IAAI,CAAC;AAClB,MAAI,MAAM,GAAG;AACb;AACA,IAAA,CAAG,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;MAC3B,MAAM,GAAG,MAAM,KAAK;AACxB,MAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;QACpB,MAAM,GAAG,MAAM,KAAK;AAC1B,QAAM,IAAI,QAAQ,KAAK,SAAS,EAAE,QAAQ,GAAG;AAC7C,MAAA,CAAK,MAAM;AACX,QAAM,QAAQ,GAAG;AACjB,QAAM,MAAM,GAAG;AACf,MAAA;AACA,IAAA,CAAG,MAAM;MACL,MAAM,IAAI,KAAK;QACb;AACN;AACA,IAAA;;AAEA,IAAE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG;IAChC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,SAAS,EAAE,MAAM,GAAG;;IAEzD,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AACjF,MAAI,MAAM,IAAI,UAAU,CAAC,wCAAwC;AACjE,IAAA;;AAEA,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG;;IAE1B,IAAI,WAAW,GAAG;AACpB,IAAE,SAAS;AACX,MAAI,QAAQ,QAAQ;AACpB,QAAM,KAAK,KAAK;UACR,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;AAEpD,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,OAAO;UACV,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;AAErD,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,QAAQ;AACnB,QAAM,KAAK,QAAQ;UACX,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;AAEtD,QAAM,KAAK,QAAQ;AACnB;UACQ,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;AAEvD,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,SAAS;AACpB,QAAM,KAAK,UAAU;UACb,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;QAE/C;UACE,IAAI,WAAW,EAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,QAAQ;AAC5E,UAAQ,QAAQ,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,WAAW;AAC9C,UAAQ,WAAW,GAAG;AACtB;AACA,IAAA;AACA,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,IAAI;AAC7C,IAAE,OAAO;MACL,IAAI,EAAE,QAAQ;AAClB,MAAI,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;AACzD;AACA,EAAA;;AAEA,EAAA,SAAS,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACrC,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,EAAE;AACzC,MAAI,OAAO,MAAM,CAAC,aAAa,CAAC,GAAG;AACnC,IAAA,CAAG,MAAM;AACT,MAAI,OAAO,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;AACrD,IAAA;AACA,EAAA;;AAEA,EAAA,SAAS,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACnC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG;IAC9B,MAAM,GAAG,GAAG;;IAEZ,IAAI,CAAC,GAAG;AACV,IAAE,OAAO,CAAC,GAAG,GAAG,EAAE;AAClB,MAAI,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC;MACvB,IAAI,SAAS,GAAG;AACpB,MAAI,IAAI,gBAAgB,GAAG,CAAC,SAAS,GAAG,IAAI;UACpC;UACA,CAAC,SAAS,GAAG,IAAI;cACb;cACA,CAAC,SAAS,GAAG,IAAI;kBACb;kBACA;;AAEhB,MAAI,IAAI,CAAC,GAAG,gBAAgB,IAAI,GAAG,EAAE;AACrC,QAAM,IAAI,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE;;AAE7C,QAAM,QAAQ,gBAAgB;AAC9B,UAAQ,KAAK,CAAC;AACd,YAAU,IAAI,SAAS,GAAG,IAAI,EAAE;AAChC,cAAY,SAAS,GAAG;AACxB,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;AACd,YAAU,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAChC,YAAU,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,EAAE;cAChC,aAAa,GAAG,CAAC,SAAS,GAAG,IAAI,KAAK,GAAG,IAAI,UAAU,GAAG,IAAI;AAC1E,cAAY,IAAI,aAAa,GAAG,IAAI,EAAE;AACtC,gBAAc,SAAS,GAAG;AAC1B,cAAA;AACA,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;AACd,YAAU,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAChC,YAAU,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/B,YAAU,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,IAAI,EAAE;AAC3E,cAAY,aAAa,GAAG,CAAC,SAAS,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,UAAU,GAAG,IAAI,KAAK,GAAG,IAAI,SAAS,GAAG,IAAI;AACrG,cAAY,IAAI,aAAa,GAAG,KAAK,KAAK,aAAa,GAAG,MAAM,IAAI,aAAa,GAAG,MAAM,CAAC,EAAE;AAC7F,gBAAc,SAAS,GAAG;AAC1B,cAAA;AACA,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;AACd,YAAU,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAChC,YAAU,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/B,YAAU,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,EAAE;cAC/F,aAAa,GAAG,CAAC,SAAS,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,SAAS,GAAG,IAAI,KAAK,GAAG,IAAI,UAAU,GAAG,IAAI;cACvH,IAAI,aAAa,GAAG,MAAM,IAAI,aAAa,GAAG,QAAQ,EAAE;AACpE,gBAAc,SAAS,GAAG;AAC1B,cAAA;AACA,YAAA;AACA;AACA,MAAA;;AAEA,MAAI,IAAI,SAAS,KAAK,IAAI,EAAE;AAC5B;AACA;AACA,QAAM,SAAS,GAAG;AAClB,QAAM,gBAAgB,GAAG;AACzB,MAAA,CAAK,MAAM,IAAI,SAAS,GAAG,MAAM,EAAE;AACnC;AACA,QAAM,SAAS,IAAI;QACb,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,GAAG,KAAK,GAAG,MAAM;AAChD,QAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG;AACvC,MAAA;;AAEA,MAAI,GAAG,CAAC,IAAI,CAAC,SAAS;AACtB,MAAI,CAAC,IAAI;AACT,IAAA;;IAEE,OAAO,qBAAqB,CAAC,GAAG;AAClC,EAAA;;AAEA;AACA;AACA;AACA,EAAA,MAAM,oBAAoB,GAAG;;EAE7B,SAAS,qBAAqB,EAAE,UAAU,EAAE;AAC5C,IAAE,MAAM,GAAG,GAAG,UAAU,CAAC;AACzB,IAAE,IAAI,GAAG,IAAI,oBAAoB,EAAE;MAC/B,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC;AACxD,IAAA;;AAEA;IACE,IAAI,GAAG,GAAG;IACV,IAAI,CAAC,GAAG;AACV,IAAE,OAAO,CAAC,GAAG,GAAG,EAAE;AAClB,MAAI,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK;AACpC,QAAM,MAAM;QACN,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,oBAAoB;AACnD;AACA,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACpC,IAAI,GAAG,GAAG;IACV,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG;;AAEhC,IAAE,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;MAChC,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;AAC5C,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACrC,IAAI,GAAG,GAAG;IACV,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG;;AAEhC,IAAE,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;MAChC,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AACpC,IAAE,MAAM,GAAG,GAAG,GAAG,CAAC;;IAEhB,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG;AACnC,IAAE,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG;;IAExC,IAAI,GAAG,GAAG;AACZ,IAAE,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;AACpC,MAAI,GAAG,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG;IAClC,IAAI,GAAG,GAAG;AACZ;AACA,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAChD,MAAI,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAC9D,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;AACrD,IAAE,MAAM,GAAG,GAAG,IAAI,CAAC;IACjB,KAAK,GAAG,CAAC,CAAC;IACV,GAAG,GAAG,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;;AAEpC,IAAE,IAAI,KAAK,GAAG,CAAC,EAAE;AACjB,MAAI,KAAK,IAAI;AACb,MAAI,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG;AAC3B,IAAA,CAAG,MAAM,IAAI,KAAK,GAAG,GAAG,EAAE;AAC1B,MAAI,KAAK,GAAG;AACZ,IAAA;;AAEA,IAAE,IAAI,GAAG,GAAG,CAAC,EAAE;AACf,MAAI,GAAG,IAAI;AACX,MAAI,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG;AACvB,IAAA,CAAG,MAAM,IAAI,GAAG,GAAG,GAAG,EAAE;AACxB,MAAI,GAAG,GAAG;AACV,IAAA;;AAEA,IAAE,IAAI,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG;;IAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG;AACzC;IACE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS;;AAEhD,IAAE,OAAO;AACT,EAAA;;AAEA;AACA;AACA;AACA,EAAA,SAAS,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;AAC3C,IAAE,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB;IAC/E,IAAI,MAAM,GAAG,GAAG,GAAG,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,uCAAuC;AACzF,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,UAAU;AAC3B,EAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC/E,MAAM,GAAG,MAAM,KAAK;IACpB,UAAU,GAAG,UAAU,KAAK;AAC9B,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM;;AAE5D,IAAE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;IACrB,IAAI,GAAG,GAAG;IACV,IAAI,CAAC,GAAG;IACR,OAAO,EAAE,CAAC,GAAG,UAAU,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;MACzC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;AAC9B,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,UAAU;AAC3B,EAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC/E,MAAM,GAAG,MAAM,KAAK;IACpB,UAAU,GAAG,UAAU,KAAK;IAC5B,IAAI,CAAC,QAAQ,EAAE;MACb,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM;AAC/C,IAAA;;IAEE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,UAAU;IACpC,IAAI,GAAG,GAAG;IACV,OAAO,UAAU,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;MACvC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,UAAU,CAAC,GAAG;AACzC,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,SAAS;EAC1B,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;IACjE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;IACjD,OAAO,IAAI,CAAC,MAAM;AACpB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,YAAY;EAC7B,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;AAC9C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,YAAY;EAC7B,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AAC9C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,YAAY;EAC7B,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;;AAEnD,IAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;SAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;SACtB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9B,SAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS;AACnC,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,YAAY;EAC7B,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;;AAEnD,IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,SAAS;OAC7B,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE;OACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3B,MAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,kBAAkB,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE;IACtF,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,cAAc,CAAC,MAAM,EAAE,QAAQ;AACjC,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;AAC3B,IAAE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE;MAC7C,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACvC,IAAA;;IAEE,MAAM,EAAE,GAAG,KAAK;MACd,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;AAC5B,MAAI,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;;AAE1B,IAAE,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC;MACvB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,GAAG,CAAC,IAAI;;AAEhB,IAAE,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;EAC/C,CAAC;;EAED,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,kBAAkB,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE;IACtF,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,cAAc,CAAC,MAAM,EAAE,QAAQ;AACjC,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;AAC3B,IAAE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE;MAC7C,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACvC,IAAA;;AAEA,IAAE,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB,IAAI,CAAC,EAAE,MAAM;;IAEf,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACjC,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB;;AAEJ,IAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE;EAC/C,CAAC;;AAED,EAAA,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC7E,MAAM,GAAG,MAAM,KAAK;IACpB,UAAU,GAAG,UAAU,KAAK;AAC9B,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM;;AAE5D,IAAE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;IACrB,IAAI,GAAG,GAAG;IACV,IAAI,CAAC,GAAG;IACR,OAAO,EAAE,CAAC,GAAG,UAAU,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;MACzC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;AAC9B,IAAA;AACA,IAAE,GAAG,IAAI;;AAET,IAAE,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU;;AAEnD,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC7E,MAAM,GAAG,MAAM,KAAK;IACpB,UAAU,GAAG,UAAU,KAAK;AAC9B,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM;;IAE1D,IAAI,CAAC,GAAG;IACR,IAAI,GAAG,GAAG;IACV,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;MAC9B,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG;AAChC,IAAA;AACA,IAAE,GAAG,IAAI;;AAET,IAAE,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU;;AAEnD,IAAE,OAAO;AACT,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC/D,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,QAAQ,IAAI,CAAC,MAAM,CAAC;AAClD,IAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;AACxC,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;IACjD,OAAO,CAAC,GAAG,GAAG,MAAM,IAAI,GAAG,GAAG,UAAU,GAAG;AAC7C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACjD,OAAO,CAAC,GAAG,GAAG,MAAM,IAAI,GAAG,GAAG,UAAU,GAAG;AAC7C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;;AAEnD,IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;OACjB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;OACtB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5B,OAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE;AAC3B,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;;AAEnD,IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;OACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;OACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3B,OAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,kBAAkB,CAAC,SAAS,cAAc,EAAE,MAAM,EAAE;IACpF,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,cAAc,CAAC,MAAM,EAAE,QAAQ;AACjC,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;AAC3B,IAAE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE;MAC7C,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACvC,IAAA;;IAEE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;MAC1B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;MACzB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;OACzB,IAAI,IAAI,EAAE,EAAC;;IAEd,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;MAC/B,MAAM,CAAC,KAAK;MACZ,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;EAC5B,CAAC;;EAED,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,kBAAkB,CAAC,SAAS,cAAc,EAAE,MAAM,EAAE;IACpF,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,cAAc,CAAC,MAAM,EAAE,QAAQ;AACjC,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;AAC3B,IAAE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE;MAC7C,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACvC,IAAA;;AAEA,IAAE,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE;MACtB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB,IAAI,CAAC,EAAE,MAAM;;IAEf,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;MAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MAC/B,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,MAAI,IAAI;EACR,CAAC;;EAED,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC/C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAChD,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC/C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAChD,EAAA;;AAEA,EAAA,SAAS,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACtD,IAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,6CAA6C;AAC9F,IAAE,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,MAAM,IAAI,UAAU,CAAC,mCAAmC;AAC1F,IAAE,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB;AAC1E,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW;AAC5B,EAAA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IACxF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;IACpB,UAAU,GAAG,UAAU,KAAK;IAC5B,IAAI,CAAC,QAAQ,EAAE;AACjB,MAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG;AACnD,MAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACzD,IAAA;;IAEE,IAAI,GAAG,GAAG;IACV,IAAI,CAAC,GAAG;AACV,IAAE,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG;IACvB,OAAO,EAAE,CAAC,GAAG,UAAU,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;MACzC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,IAAI;AACvC,IAAA;;IAEE,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW;AAC5B,EAAA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IACxF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;IACpB,UAAU,GAAG,UAAU,KAAK;IAC5B,IAAI,CAAC,QAAQ,EAAE;AACjB,MAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG;AACnD,MAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACzD,IAAA;;AAEA,IAAE,IAAI,CAAC,GAAG,UAAU,GAAG;IACrB,IAAI,GAAG,GAAG;IACV,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG;IAC3B,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;MACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,IAAI;AACvC,IAAA;;IAEE,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,UAAU;AAC3B,EAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC1E,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;AACzD,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI;IAC5B,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,aAAa;AAC9B,EAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAC3D,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI;IAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IAC/B,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,aAAa;AAC9B,EAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAC3D,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;IAC3B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI;IAChC,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,aAAa;AAC9B,EAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;IAC7D,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;IAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;IAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;AACjC,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI;IAC5B,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,aAAa;AAC9B,EAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;AAC/D,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;IAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;IAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IAC/B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI;IAChC,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,SAAS,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AACvD,IAAE,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;;IAE1C,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5C,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;IAChB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;IAChB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;IAChB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;AAClB,IAAE,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1D,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;IAChB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;IAChB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;IAChB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;AAClB,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AACvD,IAAE,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;;IAE1C,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5C,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;IAClB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;IAClB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;IAClB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;AACpB,IAAE,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1D,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;IAClB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;IAClB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;IAClB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,CAAC,GAAG;IACd,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,SAAS,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;AACrG,IAAE,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC;EACpF,CAAC;;AAED,EAAA,MAAM,CAAC,SAAS,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,SAAS,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;AACrG,IAAE,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC;EACpF,CAAC;;AAED,EAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IACtF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;IACpB,IAAI,CAAC,QAAQ,EAAE;AACjB,MAAI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC;;AAElD,MAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK;AAC/D,IAAA;;IAEE,IAAI,CAAC,GAAG;IACR,IAAI,GAAG,GAAG;IACV,IAAI,GAAG,GAAG;AACZ,IAAE,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG;IACvB,OAAO,EAAE,CAAC,GAAG,UAAU,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;AAC7C,MAAI,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AAC9D,QAAM,GAAG,GAAG;AACZ,MAAA;AACA,MAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG;AACpD,IAAA;;IAEE,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IACtF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;IACpB,IAAI,CAAC,QAAQ,EAAE;AACjB,MAAI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC;;AAElD,MAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK;AAC/D,IAAA;;AAEA,IAAE,IAAI,CAAC,GAAG,UAAU,GAAG;IACrB,IAAI,GAAG,GAAG;IACV,IAAI,GAAG,GAAG;IACV,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG;IAC3B,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;AACrC,MAAI,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AAC9D,QAAM,GAAG,GAAG;AACZ,MAAA;AACA,MAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG;AACpD,IAAA;;IAEE,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IACxE,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAK;IAC3D,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG;AACxC,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI;IAC5B,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9E,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAO;AACjE,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI;IAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IAC/B,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9E,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAO;AACjE,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;IAC3B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI;IAChC,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9E,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW;AACzE,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI;IAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IAC/B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;IAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;IAChC,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9E,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW;IACvE,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG;AAC9C,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;IAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;IAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IAC/B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI;IAChC,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,kBAAkB,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;AACnG,IAAE,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC;EACxG,CAAC;;AAED,EAAA,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,kBAAkB,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;AACnG,IAAE,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC;EACxG,CAAC;;AAED,EAAA,SAAS,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC1D,IAAE,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB;IACxE,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB;AAC3D,EAAA;;EAEA,SAAS,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE;IAC/D,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;IACpB,IAAI,CAAC,QAAQ,EAAE;AACjB,MAAI,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAkD;AACvF,IAAA;AACA,IAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACrD,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9E,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ;AACvD,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9E,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ;AACxD,EAAA;;EAEA,SAAS,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE;IAChE,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;IACpB,IAAI,CAAC,QAAQ,EAAE;AACjB,MAAI,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAoD;AACzF,IAAA;AACA,IAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACrD,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChF,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ;AACxD,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChF,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ;AACzD,EAAA;;AAEA;AACA,EAAA,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE;AACxE,IAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,6BAA6B;AACjF,IAAE,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG;IACpB,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAClC,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC;AACzD,IAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG;IAChC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG;;AAEpC;AACA,IAAE,IAAI,GAAG,KAAK,KAAK,EAAE,OAAO;AAC5B,IAAE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO;;AAEvD;AACA,IAAE,IAAI,WAAW,GAAG,CAAC,EAAE;AACvB,MAAI,MAAM,IAAI,UAAU,CAAC,2BAA2B;AACpD,IAAA;AACA,IAAE,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB;IAChF,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB;;AAE7D;IACE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAClC,IAAI,MAAM,CAAC,MAAM,GAAG,WAAW,GAAG,GAAG,GAAG,KAAK,EAAE;AACjD,MAAI,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,WAAW,GAAG;AACxC,IAAA;;AAEA,IAAE,MAAM,GAAG,GAAG,GAAG,GAAG;;AAEpB,IAAE,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,UAAU,CAAC,SAAS,CAAC,UAAU,KAAK,UAAU,EAAE;AAChF;MACI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG;AAC3C,IAAA,CAAG,MAAM;AACT,MAAI,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI;AACjC,QAAM,MAAM;AACZ,QAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;QACzB;AACN;AACA,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;AAEA;AACA;AACA;AACA;AACA,EAAA,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE;AAClE;AACA,IAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC/B,MAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACnC,QAAM,QAAQ,GAAG;AACjB,QAAM,KAAK,GAAG;QACR,GAAG,GAAG,IAAI,CAAC;AACjB,MAAA,CAAK,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AACxC,QAAM,QAAQ,GAAG;QACX,GAAG,GAAG,IAAI,CAAC;AACjB,MAAA;MACI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChE,QAAM,MAAM,IAAI,SAAS,CAAC,2BAA2B;AACrD,MAAA;AACA,MAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AACtE,QAAM,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,QAAQ;AACzD,MAAA;AACA,MAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAM,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,GAAG,GAAG;YAClC,QAAQ,KAAK,QAAQ,EAAE;AACjC;AACA,UAAQ,GAAG,GAAG;AACd,QAAA;AACA,MAAA;AACA,IAAA,CAAG,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;MAClC,GAAG,GAAG,GAAG,GAAG;AAChB,IAAA,CAAG,MAAM,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE;AACvC,MAAI,GAAG,GAAG,MAAM,CAAC,GAAG;AACpB,IAAA;;AAEA;AACA,IAAE,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;AAC7D,MAAI,MAAM,IAAI,UAAU,CAAC,oBAAoB;AAC7C,IAAA;;AAEA,IAAE,IAAI,GAAG,IAAI,KAAK,EAAE;AACpB,MAAI,OAAO;AACX,IAAA;;IAEE,KAAK,GAAG,KAAK,KAAK;IAClB,GAAG,GAAG,GAAG,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,KAAK;;AAElD,IAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG;;AAElB,IAAE,IAAI;AACN,IAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;MAC3B,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;AAClC,QAAM,IAAI,CAAC,CAAC,CAAC,GAAG;AAChB,MAAA;AACA,IAAA,CAAG,MAAM;AACT,MAAI,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG;UAC7B;AACR,UAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ;AACjC,MAAI,MAAM,GAAG,GAAG,KAAK,CAAC;AACtB,MAAI,IAAI,GAAG,KAAK,CAAC,EAAE;AACnB,QAAM,MAAM,IAAI,SAAS,CAAC,aAAa,GAAG,GAAG;AAC7C,UAAQ,mCAAmC;AAC3C,MAAA;AACA,MAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,EAAE,EAAE,CAAC,EAAE;QAChC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG;AACrC,MAAA;AACA,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;AAEA;AACA;;AAEA;AACA,EAAA,MAAM,MAAM,GAAG;AACf,EAAA,SAAS,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,SAAS,SAAS,IAAI,CAAC;MACzC,WAAW,CAAC,GAAG;AACnB,QAAM,KAAK;;AAEX,QAAM,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE;UACrC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;UACxC,QAAQ,EAAE,IAAI;AACtB,UAAQ,YAAY,EAAE;SACf;;AAEP;AACA,QAAM,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACxC;AACA;QACM,IAAI,CAAC,MAAK;AAChB;QACM,OAAO,IAAI,CAAC;AAClB,MAAA;;MAEI,IAAI,IAAI,CAAC,GAAG;AAChB,QAAM,OAAO;AACb,MAAA;;AAEA,MAAI,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE;AACrB,QAAM,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE;UAClC,YAAY,EAAE,IAAI;UAClB,UAAU,EAAE,IAAI;AACxB,UAAQ,KAAK;AACb,UAAQ,QAAQ,EAAE;SACX;AACP,MAAA;;MAEI,QAAQ,CAAC,GAAG;AAChB,QAAM,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC;AACpD,MAAA;AACA;AACA,EAAA;;AAEA,EAAA,CAAC,CAAC,0BAA0B;IAC1B,UAAU,IAAI,EAAE;MACd,IAAI,IAAI,EAAE;AACd,QAAM,OAAO,CAAC,EAAE,IAAI,CAAC,4BAA4B;AACjD,MAAA;;AAEA,MAAI,OAAO;AACX,IAAA,CAAG,EAAE,UAAU;AACf,EAAA,CAAC,CAAC,sBAAsB;AACxB,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;MACtB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,iDAAiD,EAAE,OAAO,MAAM,CAAC;AACzF,IAAA,CAAG,EAAE,SAAS;AACd,EAAA,CAAC,CAAC,kBAAkB;AACpB,IAAE,UAAU,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;MAC3B,IAAI,GAAG,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,kBAAkB;MACjD,IAAI,QAAQ,GAAG;AACnB,MAAI,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE;AAC9D,QAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC;AACpD,MAAA,CAAK,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC1C,QAAM,QAAQ,GAAG,MAAM,CAAC,KAAK;QACvB,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;AACjF,UAAQ,QAAQ,GAAG,qBAAqB,CAAC,QAAQ;AACjD,QAAA;AACA,QAAM,QAAQ,IAAI;AAClB,MAAA;MACI,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC;AACtD,MAAI,OAAO;AACX,IAAA,CAAG,EAAE,UAAU;;EAEf,SAAS,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,GAAG,GAAG;AACZ,IAAE,IAAI,CAAC,GAAG,GAAG,CAAC;IACZ,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG;IACnC,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACjC,MAAI,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AACxC,IAAA;AACA,IAAE,OAAO,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AAClC,EAAA;;AAEA;AACA;;AAEA,EAAA,SAAS,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE;AAC/C,IAAE,cAAc,CAAC,MAAM,EAAE,QAAQ;AACjC,IAAE,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,SAAS,EAAE;MACvE,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,UAAU,GAAG,CAAC,CAAC;AACrD,IAAA;AACA,EAAA;;AAEA,EAAA,SAAS,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE;IAC7D,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE;MAC9B,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG;AAC9C,MAAI,IAAI;AACR,MAAwB;QAClB,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;UAClC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACpE,QAAA,CAAO,MAAM;UACL,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC;AAC5E,kBAAgB,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAChD,QAAA;AACA,MAAA;MAGI,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK;AAC3D,IAAA;AACA,IAAE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU;AACrC,EAAA;;AAEA,EAAA,SAAS,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE;AACtC,IAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;MAC7B,MAAM,IAAI,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK;AAC/D,IAAA;AACA,EAAA;;AAEA,EAAA,SAAS,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IACzC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;AACnC,MAAI,cAAc,CAAC,KAAK,EAAE,IAAI;AAC9B,MAAI,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAS,QAAQ,EAAE,YAAY,EAAE,KAAK;AAC3E,IAAA;;AAEA,IAAE,IAAI,MAAM,GAAG,CAAC,EAAE;AAClB,MAAI,MAAM,IAAI,MAAM,CAAC,wBAAwB;AAC7C,IAAA;;IAEE,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAS,QAAQ;AACpD,sCAAoC,CAAC,GAAG,EAAa,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACzE,sCAAoC,KAAK;AACzC,EAAA;;AAEA;AACA;;AAEA,EAAA,MAAM,iBAAiB,GAAG;;EAE1B,SAAS,WAAW,EAAE,GAAG,EAAE;AAC3B;IACE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB;IACE,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE;AAChD;AACA,IAAE,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO;AAC7B;IACE,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;MAC3B,GAAG,GAAG,GAAG,GAAG;AAChB,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;IACnC,KAAK,GAAG,KAAK,IAAI;AACnB,IAAE,IAAI;AACN,IAAE,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,aAAa,GAAG;IACpB,MAAM,KAAK,GAAG;;AAEhB,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;AACnC,MAAI,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;;AAEnC;MACI,IAAI,SAAS,GAAG,MAAM,IAAI,SAAS,GAAG,MAAM,EAAE;AAClD;QACM,IAAI,CAAC,aAAa,EAAE;AAC1B;AACA,UAAQ,IAAI,SAAS,GAAG,MAAM,EAAE;AAChC;AACA,YAAU,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI;YAClD;AACV,UAAA,CAAS,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE;AACrC;AACA,YAAU,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI;YAClD;AACV,UAAA;;AAEA;AACA,UAAQ,aAAa,GAAG;;UAEhB;AACR,QAAA;;AAEA;AACA,QAAM,IAAI,SAAS,GAAG,MAAM,EAAE;AAC9B,UAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI;AAC1D,UAAQ,aAAa,GAAG;UAChB;AACR,QAAA;;AAEA;AACA,QAAM,SAAS,GAAG,CAAC,aAAa,GAAG,MAAM,IAAI,EAAE,GAAG,SAAS,GAAG,MAAM,IAAI;MACxE,CAAK,MAAM,IAAI,aAAa,EAAE;AAC9B;AACA,QAAM,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI;AACxD,MAAA;;AAEA,MAAI,aAAa,GAAG;;AAEpB;AACA,MAAI,IAAI,SAAS,GAAG,IAAI,EAAE;AAC1B,QAAM,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;AAC5B,QAAM,KAAK,CAAC,IAAI,CAAC,SAAS;AAC1B,MAAA,CAAK,MAAM,IAAI,SAAS,GAAG,KAAK,EAAE;AAClC,QAAM,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;QACtB,KAAK,CAAC,IAAI;AAChB,UAAQ,SAAS,IAAI,GAAG,GAAG,IAAI;UACvB,SAAS,GAAG,IAAI,GAAG;AAC3B;AACA,MAAA,CAAK,MAAM,IAAI,SAAS,GAAG,OAAO,EAAE;AACpC,QAAM,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;QACtB,KAAK,CAAC,IAAI;AAChB,UAAQ,SAAS,IAAI,GAAG,GAAG,IAAI;AAC/B,UAAQ,SAAS,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI;UAC9B,SAAS,GAAG,IAAI,GAAG;AAC3B;AACA,MAAA,CAAK,MAAM,IAAI,SAAS,GAAG,QAAQ,EAAE;AACrC,QAAM,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;QACtB,KAAK,CAAC,IAAI;AAChB,UAAQ,SAAS,IAAI,IAAI,GAAG,IAAI;AAChC,UAAQ,SAAS,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI;AACtC,UAAQ,SAAS,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI;UAC9B,SAAS,GAAG,IAAI,GAAG;AAC3B;AACA,MAAA,CAAK,MAAM;AACX,QAAM,MAAM,IAAI,KAAK,CAAC,oBAAoB;AAC1C,MAAA;AACA,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,SAAS,GAAG;AACpB,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACvC;MACI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;AAC3C,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE;AACrC,IAAE,IAAI,CAAC,EAAE,EAAE,EAAE;IACX,MAAM,SAAS,GAAG;AACpB,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACvC,MAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;;AAE1B,MAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;MACpB,EAAE,GAAG,CAAC,IAAI;MACV,EAAE,GAAG,CAAC,GAAG;AACb,MAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACrB,MAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACrB,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,aAAa,EAAE,GAAG,EAAE;IAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC;AAC5C,EAAA;;EAEA,SAAS,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;AAC/C,IAAE,IAAI;IACJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;AAC/B,MAAI,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE;MACrD,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;AAC3B,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA;AACA;AACA;AACA,EAAA,SAAS,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE;IAC9B,OAAO,GAAG,YAAY,IAAI;AAC5B,OAAK,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI;QACrE,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AACxC,EAAA;EACA,SAAS,WAAW,EAAE,GAAG,EAAE;AAC3B;IACE,OAAO,GAAG,KAAK,GAAG;AACpB,EAAA;;AAEA;AACA;EACA,MAAM,mBAAmB,GAAG,CAAC,YAAY;IACvC,MAAM,QAAQ,GAAG;AACnB,IAAE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG;AAC7B,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;AAC/B,MAAI,MAAM,GAAG,GAAG,CAAC,GAAG;AACpB,MAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;AACjC,QAAM,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC/C,MAAA;AACA,IAAA;AACA,IAAE,OAAO;EACT,CAAC;;AAED;EACA,SAAS,kBAAkB,EAAE,EAAE,EAAE;AACjC,IAAE,OAAO,OAAO,MAAM,KAAK,WAAW,GAAG,sBAAsB,GAAG;AAClE,EAAA;;AAEA,EAAA,SAAS,sBAAsB,IAAI;AACnC,IAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB;AACxC,EAAA,CAAA;;;;;;;;;;;;ACvjEA,EAAA,IAAI,MAAM,GAAGN,YAAiB,CAAC,EAAE;EACjC,IAAI,IAAI,GAAGC,YAAe;EAC1B,IAAI,IAAI,GAAGC,YAAe;;AAE1B,EAAA,IAAI,UAAU,GAAGC,aAAA,EAAiB,CAAC,UAAU;;EAE7C,SAAS,OAAO,CAAC,IAAI,EAAE;AACvB,IAAE,IAAI,EAAE,IAAI,YAAY,OAAO,CAAC,EAAE;AAClC,MAAI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;AAC5B,IAAA;;IAEE,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE;AACjD,MAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW;AACrC,IAAA;;IAEE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;;AAE/B;AACA,IAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO;IAC1E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU;;IAE9C,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AACtC,MAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS;AACpC,IAAA;AACA,EAAA;;EAEA,SAAS,aAAa,CAAC,IAAI,EAAE;AAC7B,IAAE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;AAC1B,EAAA;;AAEA,EAAA,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE;;AAKlC;AACA,IAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;MACnB;AACJ,IAAA;;AAEA,IAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;AACxB,IAAE,MAAM,CAAC,OAAO,GAAG,IAAI;AACvB,EAAA;;EAEA,OAAO,CAAC,SAAS,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE;AACvE,IAAE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACrC,MAAI,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC;AAC3E,IAAA;;IAEE,IAAI,IAAI,GAAG,IAAI;;AAEjB,IAAE,IAAI,aAAa,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM;IACzC,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO;AACrD,IAAE,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU;IACnC,IAAI,KAAK,GAAG,CAAC;;IAEb,IAAI,OAAO,GAAG,EAAE;IAChB,IAAI,KAAK,GAAG,CAAC;;AAEf,IAAE,IAAI,KAAK;IACT,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,GAAG,EAAE;MAC9B,KAAK,GAAG,GAAG;AACf,IAAA,CAAG,CAAC;;AAEJ,IAAE,SAAS,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE;AACpD,MAAI,IAAI,IAAI,CAAC,SAAS,EAAE;QAClB;AACN,MAAA;;AAEA,MAAI,IAAI,IAAI,GAAG,cAAc,GAAG,aAAa;AAC7C,MAAI,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,yBAAyB,CAAC;;AAEhD,MAAI,IAAI,IAAI,GAAG,CAAC,EAAE;AAClB,QAAM,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACrE,QAAM,IAAI,CAAC,OAAO,IAAI,IAAI;;AAE1B,QAAM,IAAI,GAAG,CAAC,MAAM,GAAG,aAAa,EAAE;UAC9B,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC;AACzC,QAAA;;AAEA,QAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACvB,QAAM,KAAK,IAAI,GAAG,CAAC,MAAM;AACzB,QAAM,aAAa,IAAI,GAAG,CAAC,MAAM;;AAEjC,QAAM,IAAI,aAAa,KAAK,CAAC,EAAE;AAC/B,UAAQ,OAAO,KAAK;AACpB,QAAA;AACA,MAAA;;AAEA,MAAI,IAAI,aAAa,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;AAChE,QAAM,cAAc,GAAG,IAAI,CAAC,UAAU;AACtC,QAAM,IAAI,CAAC,OAAO,GAAG,CAAC;QAChB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AACxD,MAAA;;AAEA,MAAI,IAAI,aAAa,KAAK,CAAC,EAAE;AAC7B,QAAM,KAAK,IAAI,aAAa,GAAG,YAAY;QACrC,aAAa,GAAG,YAAY;;AAElC,QAAM,OAAO,IAAI;AACjB,MAAA;;AAEA,MAAI,OAAO,KAAK;AAChB,IAAA;;AAEA,IAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;AAC7C,IAAE,IAAI,GAAG;AACT,IAAE,GAAG;AACL,MAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;AAChC,QAAM,SAAS;AACf,QAAM,KAAK;AACX,QAAM,KAAK;AACX,QAAM,aAAa;QACb,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,OAAO;QACZ;AACN,OAAK,CAAC;AACN;AACA,MAAI,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,WAAW;AACjC,IAAA,CAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;;AAEzD,IAAE,IAAI,IAAI,CAAC,SAAS,EAAE;AACtB,MAAI,MAAM,KAAK;AACf,IAAA;;AAEA,IAAE,IAAI,KAAK,IAAI,UAAU,EAAE;MACvB,MAAM,CAAC,IAAI,CAAC;MACZ,MAAM,IAAI,UAAU;AACxB,QAAM,wDAAwD;AAC9D,UAAQ,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;UACvB;OACH;AACL,IAAA;;IAEE,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;IACvC,MAAM,CAAC,IAAI,CAAC;;AAEd,IAAE,OAAO,GAAG;EACZ,CAAC;;EAED,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;;AAEpC,EAAA,SAAS,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;AACxC,IAAE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAClC,MAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,IAAA;AACA,IAAE,IAAI,EAAE,MAAM,YAAY,MAAM,CAAC,EAAE;AACnC,MAAI,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC;AACjD,IAAA;;AAEA,IAAE,IAAI,SAAS,GAAG,MAAM,CAAC,gBAAgB;AACzC,IAAE,IAAI,SAAS,IAAI,IAAI,EAAE;AACzB,MAAI,SAAS,GAAG,IAAI,CAAC,QAAQ;AAC7B,IAAA;;IAEE,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC;AAChD,EAAA;;AAEA,EAAA,SAAS,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE;IACjC,OAAO,cAAc,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;AAClD,EAAA;;EAEA,MAAA,CAAA,OAAA,GAAiBG,SAAO,GAAG,WAAW;AACtC,EAAAA,SAAA,CAAA,OAAA,GAAkB,OAAO;AACzB,EAAAA,SAAA,CAAA,aAAA,GAAwB,aAAa;AACrC,EAAAA,SAAA,CAAA,WAAA,GAAsB,WAAW,CAAA;;;;;;;;;;;;;ACrKjC,CAAA,IAAI,UAAU,IAAIgB,UAAA,CAAA,OAAc,GAAG,UAAU,MAAM,EAAE;AACrD,GAAE,IAAI,CAAC,OAAO,GAAG,MAAM;AACvB,GAAE,IAAI,CAAC,MAAM,GAAG,EAAE;AAClB,CAAA,CAAC,CAAC;;CAEF,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,MAAM,EAAE,QAAQ,EAAE;AACxD,GAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACnB,KAAI,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAC5B,KAAI,SAAS,EAAE,MAAM,GAAG,CAAC;KACrB,IAAI,EAAE,QAAQ;AAClB,IAAG,CAAC;CACJ,CAAC;;AAED,CAAA,UAAU,CAAC,SAAS,CAAC,OAAO,GAAG,YAAY;AAC3C;AACA,GAAE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;KACpD,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;KAEzB;AACJ,OAAM,IAAI,CAAC,OAAO,CAAC,MAAM;AACzB,QAAO,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS;OACrD;AACN;AACA,OAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;;AAE1B,OAAM,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO;;OAEtB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;;AAE3C,OAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACrD,KAAA,CAAK,MAAM;OACL;AACN,KAAA;AACA,GAAA;;GAEE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,KAAI,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;AAC7E,GAAA;;GAEE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,KAAI,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;AAC5D,GAAA;CACA,CAAC;;;;;;;;;;;;CC1CD,IAAI,UAAU,GAAGtB,iBAAA,EAAwB;CACzC,IAAI,MAAM,GAAGC,kBAAA,EAAyB;;AAEtC,CAAA,eAAA,CAAA,OAAe,GAAG,UAAU,QAAQ,EAAE,UAAU,EAAE;GAChD,IAAI,UAAU,GAAG,EAAE;AACrB,GAAE,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC;AACvC,GAAE,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;KAClC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC,KAAI,KAAK,EAAE,UAAU,UAAU,EAAE;AACjC,OAAM,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;KACjC,CAAK;KACD,QAAQ,EAAE,YAAY,CAAA,CAAE;AAC5B,IAAG,CAAC;;GAEF,MAAM,CAAC,KAAK,EAAE;GACd,MAAM,CAAC,OAAO,EAAE;;AAElB,GAAE,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;CAClC,CAAC;;;;;;;;;;;CClBD,IAAI,WAAW,GAAG,IAAI;CACtB,IAAI,IAAI,GAAGD,YAAe;CAC1B,IAAI,WAAW,GAAGC,kBAAA,EAAyB;AAC3C,CAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;GACrB,WAAW,GAAG,KAAK;AACrB,CAAA;CACA,IAAI,UAAU,GAAGC,iBAAA,EAAwB;CACzC,IAAI,UAAU,GAAGC,sBAAA,EAA8B;CAC/C,IAAI,MAAM,GAAGC,eAAA,EAAmB;CAChC,IAAI,SAAS,GAAGC,gBAAA,EAAsB;CACtC,IAAI,gBAAgB,GAAGa,uBAAA,EAA8B;;AAErD,CAAA,UAAc,GAAG,UAAU,MAAM,EAAE,OAAO,EAAE;GAC1C,IAAI,CAAC,WAAW,EAAE;KAChB,MAAM,IAAI,KAAK;OACb;MACD;AACL,GAAA;;AAEA,GAAE,IAAI,GAAG;AACT,GAAE,SAAS,WAAW,CAAC,KAAK,EAAE;KAC1B,GAAG,GAAG,KAAK;AACf,GAAA;;AAEA,GAAE,IAAI,QAAQ;AACd,GAAE,SAAS,cAAc,CAAC,UAAU,EAAE;KAClC,QAAQ,GAAG,UAAU;AACzB,GAAA;;AAEA,GAAE,SAAS,gBAAgB,CAAC,UAAU,EAAE;AACxC,KAAI,QAAQ,CAAC,UAAU,GAAG,UAAU;AACpC,GAAA;;AAEA,GAAE,SAAS,aAAa,CAAC,OAAO,EAAE;AAClC,KAAI,QAAQ,CAAC,OAAO,GAAG,OAAO;AAC9B,GAAA;;GAEE,SAAS,wBAAwB,GAAG;AACtC,KAAI,QAAQ,CAAC,KAAK,GAAG,IAAI;AACzB,GAAA;;AAEA,GAAE,IAAI,KAAK;AACX,GAAE,SAAS,WAAW,CAAC,OAAO,EAAE;KAC5B,KAAK,GAAG,OAAO;AACnB,GAAA;;GAEE,IAAI,eAAe,GAAG,EAAE;AAC1B,GAAE,SAAS,iBAAiB,CAAC,YAAY,EAAE;AAC3C,KAAI,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC,GAAA;;AAEA,GAAE,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC;;AAErC,GAAE,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE;KAC/B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;KAC9B,KAAK,EAAE,WAAW;KAClB,QAAQ,EAAE,cAAc;KACxB,KAAK,EAAE,WAAW;KAClB,OAAO,EAAE,aAAa;KACtB,UAAU,EAAE,gBAAgB;KAC5B,WAAW,EAAE,iBAAiB;KAC9B,kBAAkB,EAAE,wBAAwB;AAChD,IAAG,CAAC;;GAEF,MAAM,CAAC,KAAK,EAAE;GACd,MAAM,CAAC,OAAO,EAAE;;GAEhB,IAAI,GAAG,EAAE;AACX,KAAI,MAAM,GAAG;AACb,GAAA;;AAEA;GACE,IAAI,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;AAClD,GAAE,eAAe,CAAC,MAAM,GAAG,CAAC;;AAE5B,GAAE,IAAI,YAAY;AAClB,GAAE,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC1B,KAAI,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;AAChD,GAAA,CAAG,MAAM;AACT,KAAI,IAAI,OAAO;AACf,OAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACrE,KAAI,IAAI,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,MAAM;AAC7C,KAAI,YAAY,GAAG,WAAW,CAAC,WAAW,EAAE;OACtC,SAAS,EAAE,SAAS;OACpB,SAAS,EAAE,SAAS;AAC1B,MAAK,CAAC;AACN,GAAA;GACE,WAAW,GAAG,IAAI;;GAElB,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC7C,KAAI,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;AAC9D,GAAA;;GAEE,IAAI,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC;GAC/D,WAAW,GAAG,IAAI;;GAElB,IAAI,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,QAAQ,CAAC;GACjE,cAAc,GAAG,IAAI;;GAErB,IAAI,oBAAoB,GAAG,gBAAgB;AAC7C,KAAI,UAAU;AACd,KAAI,QAAQ;AACZ,KAAI,OAAO,CAAC;IACT;;AAEH,GAAE,QAAQ,CAAC,IAAI,GAAG,oBAAoB;AACtC,GAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC;;AAE7B,GAAE,OAAO,QAAQ;CACjB,CAAC;;;;;;;;;;;CC7GD,IAAI,WAAW,GAAG,IAAI;CACtB,IAAI,IAAI,GAAGlB,YAAe;AAC1B,CAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;GACrB,WAAW,GAAG,KAAK;AACrB,CAAA;CACA,IAAI,SAAS,GAAGC,kBAAA,EAAsB;CACtC,IAAI,MAAM,GAAGC,aAAA,EAAmB;;AAEhC,CAAA,UAAc,GAAG,UAAU,QAAQ,EAAE,GAAG,EAAE;GACxC,IAAI,CAAC,WAAW,EAAE;KAChB,MAAM,IAAI,KAAK;OACb;MACD;AACL,GAAA;;AAEA,GAAE,IAAI,OAAO,GAAG,GAAG,IAAI,EAAE;;AAEzB,GAAE,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;;GAEhC,IAAI,MAAM,GAAG,EAAE;;AAEjB;AACA,GAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;;AAEnD;AACA,GAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;;AAE/D,GAAE,IAAI,QAAQ,CAAC,KAAK,EAAE;AACtB,KAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,GAAA;;AAEA,GAAE,IAAI,YAAY,GAAG,MAAM,CAAC,UAAU;KAClC,QAAQ,CAAC,IAAI;KACb,QAAQ,CAAC,KAAK;AAClB,KAAI,QAAQ,CAAC;IACV;;AAEH;AACA,GAAE,IAAI,cAAc,GAAG,IAAI,CAAC,WAAW;AACvC,KAAI,YAAY;KACZ,MAAM,CAAC,iBAAiB;IACzB;GACD,YAAY,GAAG,IAAI;;GAEnB,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACjD,KAAI,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;AACjE,GAAA;GACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;;AAE9C;GACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;;AAEhC,GAAE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;CAC9B,CAAC;;;;;;;;;;CCrDD,IAAI,KAAK,GAAGF,iBAAA,EAAwB;CACpC,IAAI,IAAI,GAAGC,iBAAA,EAAwB;;AAEnC,CAAA,OAAA,CAAA,IAAY,GAAG,UAAU,MAAM,EAAE,OAAO,EAAE;GACxC,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;CACrC,CAAC;;AAED,CAAA,OAAA,CAAA,KAAa,GAAG,UAAU,GAAG,EAAE,OAAO,EAAE;AACxC,GAAE,OAAO,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;CAC3B,CAAC;;;;;;;;;;CCTD,IAAI,IAAI,GAAGD,YAAe;CAC1B,IAAI,MAAM,GAAG,UAAiB;CAC9B,IAAI,MAAM,GAAGE,kBAAA,EAAyB;CACtC,IAAI,MAAM,GAAGC,kBAAA,EAAyB;CACtC,IAAI,OAAO,GAAGC,cAAA,EAAqB;;AAEnC,CAAA,IAAI,GAAG,IAAImB,KAAA,CAAA,GAAW,GAAG,UAAU,OAAO,EAAE;AAC5C,GAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEnB,GAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;;AAE1B;GACE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC;GAC9B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;;GAEhC,IAAI,CAAC,IAAI;KACP,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG;AACpC,SAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AACjD,SAAQ,IAAI;;GAEV,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACjC,KAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrB,GAAA;;AAEA,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC;GACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI;;GAEpC,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;;AAEpC,GAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzD,GAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxD,GAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxD,GAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,GAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACjB,KAAI,QAAQ;KACR,UAAU,IAAI,EAAE;AACpB,OAAM,IAAI,CAAC,IAAI,GAAG,IAAI;AACtB,OAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;KAC/B,CAAK,CAAC,IAAI,CAAC,IAAI;IACZ;;GAED,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;AACpC,GAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvD,GAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACrD,GAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxD,GAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzD,CAAA,CAAC,CAAC;AACF,CAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;;CAE1B,GAAG,CAAC,IAAI,GAAG,OAAO;;AAElB,CAAA,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,YAAY;AACjC,GAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACvC,KAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;AAC1C,KAAI,OAAO,IAAI;AACf,GAAA;;GAEE,OAAO,CAAC,QAAQ;AAClB,KAAI,YAAY;OACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;KACvE,CAAK,CAAC,IAAI,CAAC,IAAI;IACZ;;AAEH,GAAE,OAAO,IAAI;CACb,CAAC;;CAED,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,QAAQ,EAAE;GAC9C,IAAI,QAAQ,EAAE;KACZ,IAAI,QAAQ,EAAE,OAAO;;AAEzB,KAAI,QAAQ,GAAG,UAAU,UAAU,EAAE;AACrC,OAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC;;AAE3C,OAAM,IAAI,CAAC,IAAI,GAAG,UAAU;AAC5B,OAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;AAC1B,KAAA,CAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEhB,KAAI,OAAO,GAAG,UAAU,GAAG,EAAE;AAC7B,OAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC;;AAE7C,OAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;AACzB,KAAA,CAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEhB,KAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjC,KAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;AAC/B,GAAA;;AAEA,GAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAChB,GAAE,OAAO,IAAI;CACb,CAAC;;AAED,CAAA,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE;AACtC,GAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;AAC1B,GAAE,OAAO,IAAI;CACb,CAAC;;AAED,CAAA,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;AACpC,GAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;CACxB,CAAC;;AAED,CAAA,GAAG,CAAC,SAAS,CAAC,SAAS,GAAG,UAAU,QAAQ,EAAE;AAC9C,GAAE,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK;AAC7B,GAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM;;AAE/B,GAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;CACjC,CAAC;;AAED,CAAA,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE;AACxC,GAAE,IAAI,CAAC,KAAK,GAAG,KAAK;CACpB,CAAC;;AAED,CAAA,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,YAAY;AACzC,GAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACxD,KAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACtB,GAAA;CACA,CAAC;;AAED,CAAA,GAAG,CAAC,MAAM,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AAC5E;AACA;AACA;GACE,IAAI,IAAI,CAAC;GACT,IAAI,IAAI,CAAC;GACT,KAAK,IAAI,CAAC;GACV,MAAM,IAAI,CAAC;GACX,MAAM,IAAI,CAAC;GACX,MAAM,IAAI,CAAC;AACb;;GAEE;AACF,KAAI,IAAI,GAAG,GAAG,CAAC,KAAK;AACpB,KAAI,IAAI,GAAG,GAAG,CAAC,MAAM;AACrB,KAAI,IAAI,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK;AAC5B,KAAI,IAAI,GAAG,MAAM,GAAG,GAAG,CAAC;KACpB;AACJ,KAAI,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;AACnD,GAAA;;GAEE;AACF,KAAI,MAAM,GAAG,GAAG,CAAC,KAAK;AACtB,KAAI,MAAM,GAAG,GAAG,CAAC,MAAM;AACvB,KAAI,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK;AAC9B,KAAI,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;KACtB;AACJ,KAAI,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;AACnD,GAAA;;AAEA,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,KAAI,GAAG,CAAC,IAAI,CAAC,IAAI;OACX,GAAG,CAAC,IAAI;AACd,OAAM,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,MAAM,KAAK,CAAC;AAC9C,OAAM,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC;AAC1C,OAAM,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK;MAC5C;AACL,GAAA;CACA,CAAC;;AAED,CAAA,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG;AACvB,GAAE,GAAG;AACL,GAAE,IAAI;AACN,GAAE,IAAI;AACN,GAAE,KAAK;AACP,GAAE,MAAM;AACR,GAAE,MAAM;GACN;GACA;AACF;;AAEA,GAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAClE,GAAE,OAAO,IAAI;CACb,CAAC;;AAED,CAAA,GAAG,CAAC,WAAW,GAAG,UAAU,GAAG,EAAE;AACjC,GAAE,IAAI,GAAG,CAAC,KAAK,EAAE;AACjB,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,OAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAC1C,SAAQ,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1C,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACpC,WAAU,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG;AAC9C,WAAU,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;AACxD,WAAU,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;AACtD,SAAA;AACA,OAAA;AACA,KAAA;AACA,KAAI,GAAG,CAAC,KAAK,GAAG,CAAC;AACjB,GAAA;CACA,CAAC;;AAED,CAAA,GAAG,CAAC,SAAS,CAAC,WAAW,GAAG,YAAY;AACxC,GAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;CACvB,CAAC;;;;;;ACjMD;AACA;AACA;AACO,IAAI,aAAa;AACxB,CAAC,UAAU,aAAa,EAAE;AAC1B,IAAI,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM;AACtD;AACA,IAAI,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AACrD;AACA,IAAI,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AACnD;AACA,IAAI,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AACjD;AACA,IAAI,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;AAC3D;AACA,IAAI,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AACrD,CAAC,EAAE,aAAa,KAAK,aAAa,GAAG,EAAE,CAAC,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;AACO,IAAI,YAAY;AACvB,CAAC,UAAU,YAAY,EAAE;AACzB,IAAI,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW;AAC7D,IAAI,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;AACrD,IAAI,YAAY,CAAC,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAiB;AACzE,IAAI,YAAY,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa;AACjE,CAAC,EAAE,YAAY,KAAK,YAAY,GAAG,EAAE,CAAC,CAAC;;AC1BxB,SAAS,GAAG,GAAG;AAC9B,IAAI,OAAO;AACX,QAAQ,IAAI,EAAE,WAAW;AACzB,QAAQ,QAAQ,EAAE,IAAI;AACtB,QAAQ,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK;AAC1J,YAAY,MAAM,GAAG,GAAG,IAAIC,cAAG,CAAC;AAChC,gBAAgB,KAAK,EAAE,MAAM,CAAC,KAAK;AACnC,gBAAgB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrC,aAAa,CAAC;AACd,YAAY,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AAClC,YAAY,OAAOA,cAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AACvC,gBAAgB,GAAG,OAAO;AAC1B,gBAAgB,YAAY;AAC5B,gBAAgB,eAAe;AAC/B,gBAAgB,UAAU;AAC1B,gBAAgB,SAAS,EAAE,OAAO,SAAS,KAAK;AAChD,sBAAsB;AACtB,sBAAsB;AACtB,0BAA0B,YAAY,CAAC;AACvC,0BAA0B,YAAY,CAAC,KAAK;AAC5C,gBAAgB,aAAa;AAC7B,aAAa,CAAC;AACd,QAAQ,CAAC;AACT,QAAQ,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK;AACnC,YAAY,MAAM,MAAM,GAAGA,cAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACvD,YAAY,OAAO;AACnB,gBAAgB,IAAI,EAAE,MAAM,CAAC,IAAI;AACjC,gBAAgB,KAAK,EAAE,MAAM,CAAC,KAAK;AACnC,gBAAgB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrC,aAAa;AACb,QAAQ,CAAC;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;AChCA,EAAA,IAAI,QAAQ,IAAI,CAAC,OAAO,UAAU,KAAK,WAAW;AAClD,mBAAiB,OAAO,WAAW,KAAK,WAAW,CAAC;AACpD,mBAAiB,OAAO,UAAU,KAAK,WAAW,CAAC;;AAEnD,EAAA,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;AACxB,IAAE,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;AACvD,EAAA;;EAEAlB,SAAA,CAAA,MAAA,GAAiB,UAAU,GAAG,+BAA+B;AAC7D,IAAE,IAAI,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AACxD,IAAE,OAAO,OAAO,CAAC,MAAM,EAAE;AACzB,MAAI,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE;AAChC,MAAI,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,CAAA;;AAE5B,MAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACpC,QAAM,MAAM,IAAI,SAAS,CAAC,MAAM,GAAG,oBAAoB,CAAC;AACxD,MAAA;;AAEA,MAAI,KAAK,IAAI,CAAC,IAAI,MAAM,EAAE;AAC1B,QAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;UACnB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAC1B,QAAA;AACA,MAAA;AACA,IAAA;;AAEA,IAAE,OAAO,GAAG;EACZ,CAAC;;;AAGD;AACA,EAAAA,SAAA,CAAA,SAAA,GAAoB,UAAU,GAAG,EAAE,IAAI,EAAE;IACvC,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,EAAE,OAAO,GAAG,CAAC,CAAA;AACxC,IAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AACnD,IAAE,GAAG,CAAC,MAAM,GAAG,IAAI;AACnB,IAAE,OAAO,GAAG;EACZ,CAAC;;;AAGD,EAAA,IAAI,OAAO,GAAG;AACd,IAAE,QAAQ,EAAE,UAAU,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE;MACvD,IAAI,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvC,QAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG,CAAC,EAAE,SAAS,CAAC;QAC3D;AACN,MAAA;AACA;AACA,MAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAClC,QAAM,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC7C,MAAA;IACA,CAAG;AACH;AACA,IAAE,aAAa,EAAE,UAAU,MAAM,EAAE;MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM;;AAErC;MACI,GAAG,GAAG,CAAC;AACX,MAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,QAAM,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;AAC7B,MAAA;;AAEA;AACA,MAAI,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC;MAC5B,GAAG,GAAG,CAAC;AACX,MAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,QAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,QAAM,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;AAC5B,QAAM,GAAG,IAAI,KAAK,CAAC,MAAM;AACzB,MAAA;;AAEA,MAAI,OAAO,MAAM;AACjB,IAAA;GACC;;AAED,EAAA,IAAI,SAAS,GAAG;AAChB,IAAE,QAAQ,EAAE,UAAU,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE;AAC3D,MAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAClC,QAAM,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC7C,MAAA;IACA,CAAG;AACH;AACA,IAAE,aAAa,EAAE,UAAU,MAAM,EAAE;MAC/B,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC;AACtC,IAAA;GACC;;;AAGD;AACA;EACAA,SAAA,CAAA,QAAA,GAAmB,UAAU,EAAE,EAAE;IAC/B,IAAI,EAAE,EAAE;AACV,MAAIA,kBAAgB,UAAU;AAC9B,MAAIA,kBAAgB,WAAW;AAC/B,MAAIA,kBAAgB,UAAU;AAC9B,MAAIA,SAAO,CAAC,MAAM,CAACA,SAAO,EAAE,OAAO,CAAC;AACpC,IAAA,CAAG,MAAM;AACT,MAAIA,kBAAgB,KAAK;AACzB,MAAIA,kBAAgB,KAAK;AACzB,MAAIA,kBAAgB,KAAK;AACzB,MAAIA,SAAO,CAAC,MAAM,CAACA,SAAO,EAAE,SAAS,CAAC;AACtC,IAAA;EACA,CAAC;;AAED,EAAAA,SAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;;;;;;;;;;;;;;;;;ACtG1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;CAEA,IAAI,KAAK,GAAGN,aAAA,EAA0B;;AAEtC;AACA;;;AAGA;AACA;AACA;CACA,IAAI,OAAO,iBAAiB,CAAC;AAC7B;;AAEA;CACA,IAAI,QAAQ,gBAAgB,CAAC;CAC7B,IAAI,MAAM,kBAAkB,CAAC;AAC7B;CACA,IAAI,SAAS,eAAe,CAAC;;AAE7B;;;CAGA,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA,CAAE,CAAA;;AAE/E;;CAEA,IAAI,YAAY,GAAG,CAAC;CACpB,IAAI,YAAY,GAAG,CAAC;CACpB,IAAI,SAAS,MAAM,CAAC;AACpB;;CAEA,IAAI,SAAS,MAAM,CAAC;CACpB,IAAI,SAAS,MAAM,GAAG;AACtB;;AAEA;AACA;AACA;AACA;;CAEA,IAAI,YAAY,IAAI,EAAE;AACtB;;CAEA,IAAI,QAAQ,QAAQ,GAAG;AACvB;;AAEA,CAAA,IAAI,OAAO,SAAS,QAAQ,GAAG,CAAC,GAAG,YAAY;AAC/C;;CAEA,IAAI,OAAO,SAAS,EAAE;AACtB;;CAEA,IAAI,QAAQ,QAAQ,EAAE;AACtB;;AAEA,CAAA,IAAI,SAAS,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC;AACnC;;CAEA,IAAI,QAAQ,QAAQ,EAAE;AACtB;;CAEA,IAAI,QAAQ,QAAQ,EAAE;AACtB;;;AAGA;AACA;AACA;;CAEA,IAAI,WAAW,GAAG,CAAC;AACnB;;CAEA,IAAI,SAAS,KAAK,GAAG;AACrB;;CAEA,IAAI,OAAO,OAAO,EAAE;AACpB;;CAEA,IAAI,SAAS,KAAK,EAAE;AACpB;;CAEA,IAAI,WAAW,GAAG,EAAE;AACpB;;AAEA;AACA,CAAA,IAAI,WAAW;GACb,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE7D,CAAA,IAAI,WAAW;AACf,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;;AAEvE,CAAA,IAAI,YAAY;AAChB,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAEzC,CAAA,IAAI,QAAQ;AACZ,GAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;CAEA,IAAI,aAAa,GAAG,GAAG,CAAC;;AAExB;CACA,IAAI,YAAY,IAAI,IAAI,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;CAChD,IAAI,CAAC,YAAY,CAAC;AAClB;AACA;AACA;AACA;AACA;;CAEA,IAAI,YAAY,IAAI,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;CAC1C,IAAI,CAAC,YAAY,CAAC;AAClB;AACA;AACA;;AAEA,CAAA,IAAI,UAAU,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC;CAC5C,IAAI,CAAC,UAAU,CAAC;AAChB;AACA;AACA;AACA;;CAEA,IAAI,YAAY,IAAI,IAAI,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;CACxD,IAAI,CAAC,YAAY,CAAC;AAClB;;AAEA,CAAA,IAAI,WAAW,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC;CAC3C,IAAI,CAAC,WAAW,CAAC;AACjB;;AAEA,CAAA,IAAI,SAAS,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;CACtC,IAAI,CAAC,SAAS,CAAC;AACf;;;CAGA,SAAS,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;;AAEhF,GAAE,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC;AAClC,GAAE,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC;AACjC,GAAE,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC;AACjC,GAAE,IAAI,CAAC,KAAK,UAAU,KAAK,CAAC;AAC5B,GAAE,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC;;AAEjC;GACE,IAAI,CAAC,SAAS,MAAM,WAAW,IAAI,WAAW,CAAC,MAAM;AACvD,CAAA;;;AAGA,CAAA,IAAI,aAAa;AACjB,CAAA,IAAI,aAAa;AACjB,CAAA,IAAI,cAAc;;;AAGlB,CAAA,SAAS,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE;AACvC,GAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC3B,GAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACpB,GAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B,CAAA;;;;CAIA,SAAS,MAAM,CAAC,IAAI,EAAE;AACtB,GAAE,OAAO,IAAI,GAAG,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;AACvE,CAAA;;;AAGA;AACA;AACA;AACA;AACA,CAAA,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE;AACzB;AACA;AACA,GAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI;AACzC,GAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI;AAC/C,CAAA;;;AAGA;AACA;AACA;AACA;AACA,CAAA,SAAS,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;GACnC,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,GAAG,MAAM,CAAC,EAAE;KACpC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM;AAC9C,KAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;KACtB,CAAC,CAAC,MAAM,GAAG,KAAK,KAAK,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;AAC/C,KAAI,CAAC,CAAC,QAAQ,IAAI,MAAM,GAAG,QAAQ;AACnC,GAAA,CAAG,MAAM;KACL,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM;AAC9C,KAAI,CAAC,CAAC,QAAQ,IAAI,MAAM;AACxB,GAAA;AACA,CAAA;;;AAGA,CAAA,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE;AAC/B,GAAE,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS;AAC7D,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE;GAC7B,IAAI,GAAG,GAAG,CAAC;AACb,GAAE,GAAG;AACL,KAAI,GAAG,IAAI,IAAI,GAAG,CAAC;KACf,IAAI,MAAM,CAAC;KACX,GAAG,KAAK,CAAC;AACb,GAAA,CAAG,QAAQ,EAAE,GAAG,GAAG,CAAC;GAClB,OAAO,GAAG,KAAK,CAAC;AAClB,CAAA;;;AAGA;AACA;AACA;CACA,SAAS,QAAQ,CAAC,CAAC,EAAE;AACrB,GAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE,EAAE;AACzB,KAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;AAC1B,KAAI,CAAC,CAAC,MAAM,GAAG,CAAC;AAChB,KAAI,CAAC,CAAC,QAAQ,GAAG,CAAC;;AAElB,GAAA,CAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,EAAE;AAC9B,KAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI;AAChD,KAAI,CAAC,CAAC,MAAM,KAAK,CAAC;AAClB,KAAI,CAAC,CAAC,QAAQ,IAAI,CAAC;AACnB,GAAA;AACA,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,UAAU,CAAC,CAAC,EAAE,IAAI;AAC3B;AACA;AACA,CAAA;AACA,GAAE,IAAI,IAAI,cAAc,IAAI,CAAC,QAAQ;AACrC,GAAE,IAAI,QAAQ,UAAU,IAAI,CAAC,QAAQ;AACrC,GAAE,IAAI,KAAK,aAAa,IAAI,CAAC,SAAS,CAAC,WAAW;AAClD,GAAE,IAAI,SAAS,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS;AAChD,GAAE,IAAI,KAAK,aAAa,IAAI,CAAC,SAAS,CAAC,UAAU;AACjD,GAAE,IAAI,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,UAAU;AACjD,GAAE,IAAI,UAAU,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU;GAC/C,IAAI,CAAC,CAAC;AACR,GAAE,IAAI,CAAC,EAAE,CAAC,CAAC;GACT,IAAI,IAAI,CAAC;GACT,IAAI,KAAK,CAAC;GACV,IAAI,CAAC,CAAC;AACR,GAAE,IAAI,QAAQ,GAAG,CAAC,CAAC;;GAEjB,KAAK,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,EAAE;AAC3C,KAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,GAAA;;AAEA;AACA;AACA;AACA,GAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;;AAE/C,GAAE,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AAC/C,KAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACjB,KAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;AAC5D,KAAI,IAAI,IAAI,GAAG,UAAU,EAAE;OACrB,IAAI,GAAG,UAAU;AACvB,OAAM,QAAQ,EAAE;AAChB,KAAA;KACI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI;AAClC;;AAEA,KAAI,IAAI,CAAC,GAAG,QAAQ,EAAE,EAAE,SAAS,CAAA,CAAE;;AAEnC,KAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;KAClB,KAAK,GAAG,CAAC;AACb,KAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACnB,OAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;AAC7B,KAAA;AACA,KAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;KACf,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC;KAC/B,IAAI,SAAS,EAAE;AACnB,OAAM,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,CAAC;AAC5D,KAAA;AACA,GAAA;AACA,GAAE,IAAI,QAAQ,KAAK,CAAC,EAAE,EAAE,OAAO,CAAA;;AAE/B;AACA;;AAEA;AACA,GAAE,GAAG;AACL,KAAI,IAAI,GAAG,UAAU,GAAG,CAAC;AACzB,KAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;AAC5C,KAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;KACnB,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9B,KAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC5B;AACA;AACA;KACI,QAAQ,IAAI,CAAC;GACjB,CAAG,QAAQ,QAAQ,GAAG,CAAC;;AAEvB;AACA;AACA;AACA;AACA;GACE,KAAK,IAAI,GAAG,UAAU,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE;AAC9C,KAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AACxB,KAAI,OAAO,CAAC,KAAK,CAAC,EAAE;OACd,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrB,OAAM,IAAI,CAAC,GAAG,QAAQ,EAAE,EAAE,SAAS,CAAA;OAC7B,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,aAAa,IAAI,EAAE;AAC5C;SACQ,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SAC3D,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI;AACtC,OAAA;AACA,OAAM,CAAC,EAAE;AACT,KAAA;AACA,GAAA;AACA,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ;AAC3C;AACA;AACA;AACA,CAAA;GACE,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AAC1C,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC;GACb,IAAI,IAAI,CAAC;GACT,IAAI,CAAC,CAAC;;AAER;AACA;AACA;GACE,KAAK,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,EAAE;AAC3C,KAAI,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;AAC7D,GAAA;AACA;AACA;AACA;AACA;AACA;AACA;;GAEE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE;KAC/B,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,KAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,SAAS,CAAA;AAC9B;AACA,KAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;;AAE5D;AACA;AACA,GAAA;AACA,CAAA;;;AAGA;AACA;AACA;AACA,CAAA,SAAS,cAAc,GAAG;GACxB,IAAI,CAAC,CAAC;GACN,IAAI,IAAI,CAAC;GACT,IAAI,MAAM,CAAC;GACX,IAAI,IAAI,CAAC;GACT,IAAI,IAAI,CAAC;GACT,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;AACxC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;GACE,MAAM,GAAG,CAAC;AACZ,GAAE,KAAK,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE;AAClD,KAAI,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM;AAC9B,KAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,OAAM,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACnC,KAAA;AACA,GAAA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;;AAEjC;GACE,IAAI,GAAG,CAAC;GACR,KAAK,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE;AACpC,KAAI,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI;AAC1B,KAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,OAAM,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;AAC/B,KAAA;AACA,GAAA;AACA;GACE,IAAI,KAAK,CAAC,CAAC;AACb,GAAE,OAAO,IAAI,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE;AACjC,KAAI,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;KAC3B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;OACnD,UAAU,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI;AACrC,KAAA;AACA,GAAA;AACA;;AAEA;GACE,KAAK,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,EAAE;AAC3C,KAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB,GAAA;;GAEE,CAAC,GAAG,CAAC;AACP,GAAE,OAAO,CAAC,IAAI,GAAG,EAAE;KACf,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;AACvC,KAAI,CAAC,EAAE;AACP,KAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AACjB,GAAA;AACA,GAAE,OAAO,CAAC,IAAI,GAAG,EAAE;KACf,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;AACvC,KAAI,CAAC,EAAE;AACP,KAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AACjB,GAAA;AACA,GAAE,OAAO,CAAC,IAAI,GAAG,EAAE;KACf,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;AACvC,KAAI,CAAC,EAAE;AACP,KAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AACjB,GAAA;AACA,GAAE,OAAO,CAAC,IAAI,GAAG,EAAE;KACf,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;AACvC,KAAI,CAAC,EAAE;AACP,KAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AACjB,GAAA;AACA;AACA;AACA;AACA;GACE,SAAS,CAAC,YAAY,EAAE,OAAO,GAAG,CAAC,EAAE,QAAQ,CAAC;;AAEhD;GACE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;KAC5B,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;AACvC,KAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,GAAA;;AAEA;AACA,GAAE,aAAa,GAAG,IAAI,cAAc,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC;AAChG,GAAE,aAAa,GAAG,IAAI,cAAc,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,WAAW,OAAO,EAAE,QAAQ,CAAC;AAC9F,GAAE,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,UAAU,QAAQ,EAAE,WAAW,CAAC;;AAEnG;AACA,CAAA;;;AAGA;AACA;AACA;CACA,SAAS,UAAU,CAAC,CAAC,EAAE;GACrB,IAAI,CAAC,CAAC;;AAER;GACE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;GACjE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;GACjE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;;GAE/D,CAAC,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC;GACvC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC;GAC5B,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC;AAC5B,CAAA;;;AAGA;AACA;AACA;CACA,SAAS,SAAS,CAAC,CAAC;AACpB,CAAA;AACA,GAAE,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE;AACtB,KAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;AAC1B,GAAA,CAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE;AAC7B;AACA,KAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM;AACzC,GAAA;AACA,GAAE,CAAC,CAAC,MAAM,GAAG,CAAC;AACd,GAAE,CAAC,CAAC,QAAQ,GAAG,CAAC;AAChB,CAAA;;AAEA;AACA;AACA;AACA;CACA,SAAS,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;AACvC;AACA;AACA;AACA;AACA,CAAA;AACA,GAAE,SAAS,CAAC,CAAC,CAAC,CAAC;;GAED;AACd,KAAI,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;AACrB,KAAI,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AACtB,GAAA;AACA;AACA;AACA;AACA,GAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC;AAC9D,GAAE,CAAC,CAAC,OAAO,IAAI,GAAG;AAClB,CAAA;;AAEA;AACA;AACA;AACA;CACA,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE;AACpC,GAAE,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;AACjB,GAAE,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;GACf,QAAQ,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC;AACxC,WAAU,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AAC9B;AACA;AACA;AACA,CAAA;GACE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnB,GAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjB,GAAE,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;AAC1B;AACA,KAAI,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ;OAChB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;AACxD,OAAM,CAAC,EAAE;AACT,KAAA;AACA;KACI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAA;;AAEtD;AACA,KAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KACrB,CAAC,GAAG,CAAC;;AAET;KACI,CAAC,KAAK,CAAC;AACX,GAAA;AACA,GAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AACf,CAAA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,CAAA,SAAS,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK;AACvC;AACA;AACA;AACA,CAAA;GACE,IAAI,IAAI,CAAC;GACT,IAAI,EAAE,CAAC;AACT,GAAE,IAAI,EAAE,GAAG,CAAC,CAAC;GACX,IAAI,IAAI,CAAC;GACT,IAAI,KAAK,CAAC;;AAEZ,GAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE;AACxB,KAAI,GAAG;AACP,OAAM,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;OACrF,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;AACtC,OAAM,EAAE,EAAE;;AAEV,OAAM,IAAI,IAAI,KAAK,CAAC,EAAE;SACd,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAChC;AACA,OAAA,CAAO,MAAM;AACb;AACA,SAAQ,IAAI,GAAG,YAAY,CAAC,EAAE,CAAC;AAC/B,SAAQ,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,QAAQ,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AACjD,SAAQ,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC;AACjC,SAAQ,IAAI,KAAK,KAAK,CAAC,EAAE;AACzB,WAAU,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC;WACvB,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAClC,SAAA;SACQ,IAAI,EAAE,CAAC;AACf,SAAQ,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AAC3B;;SAEQ,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAClC,SAAQ,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC;AACjC,SAAQ,IAAI,KAAK,KAAK,CAAC,EAAE;AACzB,WAAU,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC;WACvB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACpC,SAAA;OACA,CAAO;;AAEP;AACA;AACA;;AAEA,KAAA,CAAK,QAAQ,EAAE,GAAG,CAAC,CAAC,QAAQ;AAC5B,GAAA;;AAEA,GAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC;AAChC,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,UAAU,CAAC,CAAC,EAAE,IAAI;AAC3B;AACA;AACA,CAAA;AACA,GAAE,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ;AAC9B,GAAE,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW;AAC3C,GAAE,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS;AAC1C,GAAE,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK;AACrC,GAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AACX,GAAE,IAAI,QAAQ,GAAG,EAAE,CAAC;GAClB,IAAI,IAAI,CAAC;;AAEX;AACA;AACA;AACA;AACA,GAAE,CAAC,CAAC,QAAQ,GAAG,CAAC;AAChB,GAAE,CAAC,CAAC,QAAQ,GAAG,SAAS;;GAEtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;KAC1B,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,EAAE;AACpC,OAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC;AACzC,OAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;;AAEpB,KAAA,CAAK,MAAM;OACL,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;AACjC,KAAA;AACA,GAAA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE;KACrB,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC;AACjE,KAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC;AAC/B,KAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;KACjB,CAAC,CAAC,OAAO,EAAE;;KAEX,IAAI,SAAS,EAAE;OACb,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AACzC,KAAA;AACA;AACA,GAAA;AACA,GAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ;;AAE1B;AACA;AACA;GACE,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;;AAE9E;AACA;AACA;GACE,IAAI,GAAG,KAAK,CAAC;AACf,GAAE,GAAG;AACL;AACA;AACA,KAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa;AAC7B,KAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAChD,KAAI,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,aAAa;AACtC;;KAEI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;;KAE1B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KACzB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;;AAE5B;AACA,KAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAChE,KAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,KAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI;;AAE5D;KACI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,IAAI,EAAE;AAClC,KAAI,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,aAAa;;AAEtC,GAAA,CAAG,QAAQ,CAAC,CAAC,QAAQ,IAAI,CAAC;;AAE1B,GAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa;;AAE9C;AACA;AACA;AACA,GAAE,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC;;AAErB;GACE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;AACvC,CAAA;;;AAGA;AACA;AACA;AACA;AACA,CAAA,SAAS,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ;AACpC;AACA;AACA;AACA,CAAA;GACE,IAAI,CAAC,CAAC;AACR,GAAE,IAAI,OAAO,GAAG,EAAE,CAAC;GACjB,IAAI,MAAM,CAAC;;GAEX,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS;;AAExC,GAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB,GAAE,IAAI,SAAS,GAAG,CAAC,CAAC;AACpB,GAAE,IAAI,SAAS,GAAG,CAAC,CAAC;;AAEpB,GAAE,IAAI,OAAO,KAAK,CAAC,EAAE;KACjB,SAAS,GAAG,GAAG;KACf,SAAS,GAAG,CAAC;AACjB,GAAA;AACA,GAAE,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,MAAM,CAAC;;GAE9C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE;KAC9B,MAAM,GAAG,OAAO;AACpB,KAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;KAE/B,IAAI,EAAE,KAAK,GAAG,SAAS,IAAI,MAAM,KAAK,OAAO,EAAE;OAC7C;;AAEN,KAAA,CAAK,MAAM,IAAI,KAAK,GAAG,SAAS,EAAE;OAC5B,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,aAAa,KAAK;;AAE7C,KAAA,CAAK,MAAM,IAAI,MAAM,KAAK,CAAC,EAAE;;AAE7B,OAAM,IAAI,MAAM,KAAK,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,CAAA;OAC3D,CAAC,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,WAAW;;AAEvC,KAAA,CAAK,MAAM,IAAI,KAAK,IAAI,EAAE,EAAE;OACtB,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW;;AAEzC,KAAA,CAAK,MAAM;OACL,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;AAC3C,KAAA;;KAEI,KAAK,GAAG,CAAC;KACT,OAAO,GAAG,MAAM;;AAEpB,KAAI,IAAI,OAAO,KAAK,CAAC,EAAE;OACjB,SAAS,GAAG,GAAG;OACf,SAAS,GAAG,CAAC;;AAEnB,KAAA,CAAK,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE;OAC7B,SAAS,GAAG,CAAC;OACb,SAAS,GAAG,CAAC;;AAEnB,KAAA,CAAK,MAAM;OACL,SAAS,GAAG,CAAC;OACb,SAAS,GAAG,CAAC;AACnB,KAAA;AACA,GAAA;AACA,CAAA;;;AAGA;AACA;AACA;AACA;AACA,CAAA,SAAS,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ;AACpC;AACA;AACA;AACA,CAAA;GACE,IAAI,CAAC,CAAC;AACR,GAAE,IAAI,OAAO,GAAG,EAAE,CAAC;GACjB,IAAI,MAAM,CAAC;;GAEX,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS;;AAExC,GAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB,GAAE,IAAI,SAAS,GAAG,CAAC,CAAC;AACpB,GAAE,IAAI,SAAS,GAAG,CAAC,CAAC;;AAEpB;AACA,GAAE,IAAI,OAAO,KAAK,CAAC,EAAE;KACjB,SAAS,GAAG,GAAG;KACf,SAAS,GAAG,CAAC;AACjB,GAAA;;GAEE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE;KAC9B,MAAM,GAAG,OAAO;AACpB,KAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;KAE/B,IAAI,EAAE,KAAK,GAAG,SAAS,IAAI,MAAM,KAAK,OAAO,EAAE;OAC7C;;AAEN,KAAA,CAAK,MAAM,IAAI,KAAK,GAAG,SAAS,EAAE;AAClC,OAAM,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA,CAAE,QAAQ,EAAE,KAAK,KAAK,CAAC;;AAElE,KAAA,CAAK,MAAM,IAAI,MAAM,KAAK,CAAC,EAAE;AAC7B,OAAM,IAAI,MAAM,KAAK,OAAO,EAAE;SACtB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;AACvC,SAAQ,KAAK,EAAE;AACf,OAAA;AACA;OACM,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;OAChC,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;;AAEhC,KAAA,CAAK,MAAM,IAAI,KAAK,IAAI,EAAE,EAAE;OACtB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC;OAClC,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;;AAEhC,KAAA,CAAK,MAAM;OACL,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC;OACpC,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC;AACjC,KAAA;;KAEI,KAAK,GAAG,CAAC;KACT,OAAO,GAAG,MAAM;AACpB,KAAI,IAAI,OAAO,KAAK,CAAC,EAAE;OACjB,SAAS,GAAG,GAAG;OACf,SAAS,GAAG,CAAC;;AAEnB,KAAA,CAAK,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE;OAC7B,SAAS,GAAG,CAAC;OACb,SAAS,GAAG,CAAC;;AAEnB,KAAA,CAAK,MAAM;OACL,SAAS,GAAG,CAAC;OACb,SAAS,GAAG,CAAC;AACnB,KAAA;AACA,GAAA;AACA,CAAA;;;AAGA;AACA;AACA;AACA;CACA,SAAS,aAAa,CAAC,CAAC,EAAE;GACxB,IAAI,WAAW,CAAC;;AAElB;AACA,GAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9C,GAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;;AAE9C;AACA,GAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE,KAAK,WAAW,GAAG,QAAQ,GAAG,CAAC,EAAE,WAAW,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE;AACpE,KAAI,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,EAAE;OAC1D;AACN,KAAA;AACA,GAAA;AACA;AACA,GAAE,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAChD;AACA;;AAEA,GAAE,OAAO,WAAW;AACpB,CAAA;;;AAGA;AACA;AACA;AACA;AACA;CACA,SAAS,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;AAClD;AACA;AACA,CAAA;GACE,IAAI,IAAI,CAAC;;AAEX;AACA;AACA;AACA;GACE,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;GAC9B,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;GAC7B,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;GAC9B,KAAK,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE;AACzC;AACA,KAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;AAC9D,GAAA;AACA;;AAEA,GAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AACxC;;AAEA,GAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AACxC;AACA,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,gBAAgB,CAAC,CAAC,EAAE;AAC7B;AACA;AACA;AACA;GACE,IAAI,UAAU,GAAG,UAAU;AAC7B,GAAE,IAAI,CAAC;;AAEP;AACA,GAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,UAAU,MAAM,CAAC,EAAE;AAC/C,KAAI,IAAI,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE;AACjE,OAAM,OAAO,QAAQ;AACrB,KAAA;AACA,GAAA;;AAEA;GACE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC;OACvE,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC,EAAE;AAC1C,KAAI,OAAO,MAAM;AACjB,GAAA;GACE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;KAC9B,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,EAAE;AAC3C,OAAM,OAAO,MAAM;AACnB,KAAA;AACA,GAAA;;AAEA;AACA;AACA;AACA,GAAE,OAAO,QAAQ;AACjB,CAAA;;;CAGA,IAAI,gBAAgB,GAAG,KAAK;;AAE5B;AACA;AACA;CACA,SAAS,QAAQ,CAAC,CAAC;AACnB,CAAA;;GAEE,IAAI,CAAC,gBAAgB,EAAE;AACzB,KAAI,cAAc,EAAE;KAChB,gBAAgB,GAAG,IAAI;AAC3B,GAAA;;AAEA,GAAE,CAAC,CAAC,MAAM,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC;AACtD,GAAE,CAAC,CAAC,MAAM,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC;AACtD,GAAE,CAAC,CAAC,OAAO,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC;;AAErD,GAAE,CAAC,CAAC,MAAM,GAAG,CAAC;AACd,GAAE,CAAC,CAAC,QAAQ,GAAG,CAAC;;AAEhB;GACE,UAAU,CAAC,CAAC,CAAC;AACf,CAAA;;;AAGA;AACA;AACA;CACA,SAAS,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI;AAClD;AACA;AACA;AACA;AACA,CAAA;AACA,GAAE,SAAS,CAAC,CAAC,EAAE,CAAC,YAAY,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;GACtD,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,UAAgB,CAAC,CAAC;AACvC,CAAA;;;AAGA;AACA;AACA;AACA;CACA,SAAS,SAAS,CAAC,CAAC,EAAE;GACpB,SAAS,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,EAAE,CAAC,CAAC;AACpC,GAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC;GACrC,QAAQ,CAAC,CAAC,CAAC;AACb,CAAA;;;AAGA;AACA;AACA;AACA;CACA,SAAS,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI;AACjD;AACA;AACA;AACA;AACA,CAAA;AACA,GAAE,IAAI,QAAQ,EAAE,WAAW,CAAC;AAC5B,GAAE,IAAI,WAAW,GAAG,CAAC,CAAC;;AAEtB;AACA,GAAE,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;;AAEnB;KACI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;OAClC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC;AAC5C,KAAA;;AAEA;AACA,KAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;AAC3B;AACA;;AAEA,KAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC;;AAElC;KACI,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;KACpC,WAAW,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;;AAE9C;AACA;AACA;;KAEI,IAAI,WAAW,IAAI,QAAQ,EAAE,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAA;;AAE1D,GAAA,CAAG,MAAM;AACT;AACA,KAAI,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC;AAC5C,GAAA;;AAEA,GAAE,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,QAAQ,MAAM,GAAG,KAAK,EAAE,CAAC,EAAE;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;KACI,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC;;GAE9C,CAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,WAAW,KAAK,QAAQ,EAAE;;AAEjE,KAAI,SAAS,CAAC,CAAC,EAAE,CAAC,YAAY,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACzD,KAAI,cAAc,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC;;AAEjD,GAAA,CAAG,MAAM;AACT,KAAI,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;KAClD,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC;KAChF,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC;AAC/C,GAAA;AACA;AACA;AACA;AACA;GACE,UAAU,CAAC,CAAC,CAAC;;GAEb,IAAI,IAAI,EAAE;KACR,SAAS,CAAC,CAAC,CAAC;AAChB,GAAA;AACA;AACA;AACA,CAAA;;AAEA;AACA;AACA;AACA;AACA,CAAA,SAAS,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;AAC9B;AACA;AACA;AACA,CAAA;AACA;;GAEE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI;AACnE,GAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;;AAE3D,GAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,IAAI;GAC/C,CAAC,CAAC,QAAQ,EAAE;;AAEd,GAAE,IAAI,IAAI,KAAK,CAAC,EAAE;AAClB;KACI,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW;AAClC,GAAA,CAAG,MAAM;KACL,CAAC,CAAC,OAAO,EAAE;AACf;KACI,IAAI,EAAE,CAAC;AACX;AACA;AACA;;AAEA,KAAI,CAAC,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW;KAC7D,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW;AAC5C,GAAA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;GAEE,QAAQ,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC;AAC1C;AACA;AACA;AACA;AACA,CAAA;;AAEA,CAAA,KAAA,CAAA,QAAgB,IAAI,QAAQ;AAC5B,CAAA,KAAA,CAAA,gBAAwB,GAAG,gBAAgB;AAC3C,CAAA,KAAA,CAAA,eAAuB,IAAI,eAAe;AAC1C,CAAA,KAAA,CAAA,SAAiB,GAAG,SAAS;AAC7B,CAAA,KAAA,CAAA,SAAiB,GAAG,SAAS;;;;;;;;;;;ACnsC7B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;CAEA,SAAS,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;GACrC,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC;OACxB,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,MAAM,GAAG,CAAC;OACjC,CAAC,GAAG,CAAC;;AAEX,GAAE,OAAO,GAAG,KAAK,CAAC,EAAE;AACpB;AACA;AACA;KACI,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG;KAC3B,GAAG,IAAI,CAAC;;AAEZ,KAAI,GAAG;OACD,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;AAC/B,OAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;KACvB,CAAK,QAAQ,EAAE,CAAC;;KAEZ,EAAE,IAAI,KAAK;KACX,EAAE,IAAI,KAAK;AACf,GAAA;;GAEE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;AAC7B,CAAA;;;AAGA,CAAA,SAAc,GAAG,OAAO;;;;;;;;;;;AChDxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAA,SAAS,SAAS,GAAG;AACrB,GAAE,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE;;AAEnB,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;KAC5B,CAAC,GAAG,CAAC;AACT,KAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAChC,OAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,KAAA;AACA,KAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;AAChB,GAAA;;AAEA,GAAE,OAAO,KAAK;AACd,CAAA;;AAEA;CACA,IAAI,QAAQ,GAAG,SAAS,EAAE;;;CAG1B,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;GACjC,IAAI,CAAC,GAAG,QAAQ;AAClB,OAAM,GAAG,GAAG,GAAG,GAAG,GAAG;;GAEnB,GAAG,IAAI,EAAE;;AAEX,GAAE,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAClC,KAAI,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAChD,GAAA;;AAEA,GAAE,QAAQ,GAAG,IAAI,EAAE,CAAC,EAAE;AACtB,CAAA;;;AAGA,CAAA,OAAc,GAAG,KAAK;;;;;;;;;;;ACxDtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAA,QAAc,GAAG;GACf,CAAC,OAAO,iBAAiB;GACzB,CAAC,OAAO,YAAY;GACpB,CAAC,OAAO,EAAE;GACV,IAAI,IAAI,YAAY;GACpB,IAAI,IAAI,cAAc;GACtB,IAAI,IAAI,YAAY;GACpB,IAAI,IAAI,qBAAqB;GAC7B,IAAI,IAAI,cAAc;GACtB,IAAI,IAAI,sBAAsB;EAC/B;;;;;;;;;;AC7BD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;CAEA,IAAI,KAAK,KAAKA,aAAA,EAA0B;CACxC,IAAI,KAAK,KAAKC,YAAA,EAAkB;CAChC,IAAI,OAAO,GAAGC,cAAA,EAAoB;CAClC,IAAI,KAAK,KAAKC,YAAA,EAAkB;CAChC,IAAI,GAAG,OAAOC,eAAA,EAAqB;;AAEnC;AACA;;;AAGA;CACA,IAAI,UAAU,QAAQ,CAAC;CACvB,IAAI,eAAe,GAAG,CAAC;AACvB;CACA,IAAI,YAAY,MAAM,CAAC;CACvB,IAAI,QAAQ,UAAU,CAAC;CACvB,IAAI,OAAO,WAAW,CAAC;AACvB;;;AAGA;AACA;AACA;CACA,IAAI,IAAI,cAAc,CAAC;CACvB,IAAI,YAAY,MAAM,CAAC;AACvB;AACA;CACA,IAAI,cAAc,IAAI,EAAE;CACxB,IAAI,YAAY,MAAM,EAAE;AACxB;CACA,IAAI,WAAW,OAAO,EAAE;AACxB;;;AAGA;AACA;AACA;AACA;CACA,IAAI,qBAAqB,GAAG,EAAE;;;CAG9B,IAAI,UAAU,cAAc,CAAC;CAC7B,IAAI,cAAc,UAAU,CAAC;CAC7B,IAAI,KAAK,mBAAmB,CAAC;CAC7B,IAAI,OAAO,iBAAiB,CAAC;CAC7B,IAAI,kBAAkB,MAAM,CAAC;;AAE7B;AACA;AACA;AACA;CACA,IAAI,SAAS,eAAe,CAAC;;;AAG7B;CACA,IAAI,UAAU,IAAI,CAAC;;AAEnB;;;CAGA,IAAI,aAAa,GAAG,CAAC;AACrB;CACA,IAAI,SAAS,GAAG,EAAE;AAClB;CACA,IAAI,aAAa,GAAG,CAAC;;;CAGrB,IAAI,YAAY,IAAI,EAAE;AACtB;CACA,IAAI,QAAQ,QAAQ,GAAG;AACvB;AACA,CAAA,IAAI,OAAO,SAAS,QAAQ,GAAG,CAAC,GAAG,YAAY;AAC/C;CACA,IAAI,OAAO,SAAS,EAAE;AACtB;CACA,IAAI,QAAQ,QAAQ,EAAE;AACtB;AACA,CAAA,IAAI,SAAS,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC;AACnC;CACA,IAAI,QAAQ,IAAI,EAAE;AAClB;;CAEA,IAAI,SAAS,GAAG,CAAC;CACjB,IAAI,SAAS,GAAG,GAAG;AACnB,CAAA,IAAI,aAAa,IAAI,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;;CAE/C,IAAI,WAAW,GAAG,IAAI;;CAEtB,IAAI,UAAU,GAAG,EAAE;CACnB,IAAI,WAAW,GAAG,EAAE;CACpB,IAAI,UAAU,GAAG,EAAE;CACnB,IAAI,aAAa,GAAG,EAAE;CACtB,IAAI,UAAU,GAAG,GAAG;CACpB,IAAI,UAAU,GAAG,GAAG;CACpB,IAAI,YAAY,GAAG,GAAG;;CAEtB,IAAI,YAAY,QAAQ,CAAC,CAAC;CAC1B,IAAI,aAAa,OAAO,CAAC,CAAC;CAC1B,IAAI,iBAAiB,GAAG,CAAC,CAAC;CAC1B,IAAI,cAAc,MAAM,CAAC,CAAC;;CAE1B,IAAI,OAAO,GAAG,IAAI,CAAC;;AAEnB,CAAA,SAAS,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE;AAC9B,GAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC;AAC3B,GAAE,OAAO,SAAS;AAClB,CAAA;;CAEA,SAAS,IAAI,CAAC,CAAC,EAAE;AACjB,GAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvC,CAAA;;CAEA,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA,CAAE,CAAA;;;AAG/E;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,aAAa,CAAC,IAAI,EAAE;AAC7B,GAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;;AAEpB;AACA,GAAE,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO;AACrB,GAAE,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,KAAI,GAAG,GAAG,IAAI,CAAC,SAAS;AACxB,GAAA;AACA,GAAE,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,OAAO,CAAA;;GAExB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC/E,GAAE,IAAI,CAAC,QAAQ,IAAI,GAAG;AACtB,GAAE,CAAC,CAAC,WAAW,IAAI,GAAG;AACtB,GAAE,IAAI,CAAC,SAAS,IAAI,GAAG;AACvB,GAAE,IAAI,CAAC,SAAS,IAAI,GAAG;AACvB,GAAE,CAAC,CAAC,OAAO,IAAI,GAAG;AAClB,GAAE,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE;AACvB,KAAI,CAAC,CAAC,WAAW,GAAG,CAAC;AACrB,GAAA;AACA,CAAA;;;AAGA,CAAA,SAAS,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE;AACnC,GAAE,KAAK,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC;AACvG,GAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ;AAC5B,GAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACvB,CAAA;;;AAGA,CAAA,SAAS,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE;GACtB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC;AAChC,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE;AAC3B;AACA;AACA,GAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI;AAC/C,GAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI;AACvC,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;AAC1C,GAAE,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ;;GAEvB,IAAI,GAAG,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,CAAA;GAC7B,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;;AAE5B,GAAE,IAAI,CAAC,QAAQ,IAAI,GAAG;;AAEtB;AACA,GAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC;GACzD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;AAC7B,KAAI,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACrD,GAAA;;QAEO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;AAClC,KAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACnD,GAAA;;AAEA,GAAE,IAAI,CAAC,OAAO,IAAI,GAAG;AACrB,GAAE,IAAI,CAAC,QAAQ,IAAI,GAAG;;AAEtB,GAAE,OAAO,GAAG;AACZ,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE;AACrC,GAAE,IAAI,YAAY,GAAG,CAAC,CAAC,gBAAgB,CAAC;AACxC,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC;GACtB,IAAI,KAAK,CAAC;GACV,IAAI,GAAG,CAAC;AACV,GAAE,IAAI,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC;AAC/B,GAAE,IAAI,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;AAChC,GAAE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC;OAChD,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC;;AAEjD,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;;AAEtB,GAAE,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM;AACtB,GAAE,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI;;AAEpB;AACA;AACA;;AAEA,GAAE,IAAI,MAAM,GAAG,CAAC,CAAC,QAAQ,GAAG,SAAS;GACnC,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC;GAC1C,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;;AAExC;AACA;AACA;AACA;;AAEA;GACE,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,UAAU,EAAE;KACjC,YAAY,KAAK,CAAC;AACtB,GAAA;AACA;AACA;AACA;AACA,GAAE,IAAI,UAAU,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,CAAA;;AAE3D;;AAEA,GAAE,GAAG;AACL;KACI,KAAK,GAAG,SAAS;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;KAEI,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,SAAS,QAAQ;SACvC,IAAI,CAAC,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,KAAK,SAAS;SACxC,IAAI,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC;AACjD,SAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,kBAAkB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;OACjD;AACN,KAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;KACI,IAAI,IAAI,CAAC;AACb,KAAI,KAAK,EAAE;AACX;;AAEA;AACA;AACA;AACA,KAAI,GAAG;AACP;KACA,CAAK,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC;cAChE,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC;cAChE,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC;cAChE,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC;cAChE,IAAI,GAAG,MAAM;;AAE1B;;AAEA,KAAI,GAAG,GAAG,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC;AACrC,KAAI,IAAI,GAAG,MAAM,GAAG,SAAS;;AAE7B,KAAI,IAAI,GAAG,GAAG,QAAQ,EAAE;AACxB,OAAM,CAAC,CAAC,WAAW,GAAG,SAAS;OACzB,QAAQ,GAAG,GAAG;AACpB,OAAM,IAAI,GAAG,IAAI,UAAU,EAAE;SACrB;AACR,OAAA;OACM,SAAS,IAAI,IAAI,CAAC,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC;AAC5C,OAAM,QAAQ,KAAK,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACxC,KAAA;AACA,GAAA,CAAG,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,YAAY,KAAK,CAAC;;AAEhF,GAAE,IAAI,QAAQ,IAAI,CAAC,CAAC,SAAS,EAAE;AAC/B,KAAI,OAAO,QAAQ;AACnB,GAAA;GACE,OAAO,CAAC,CAAC,SAAS;AACpB,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,WAAW,CAAC,CAAC,EAAE;AACxB,GAAE,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM;GACtB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG;;AAExB;;AAEA,GAAE,GAAG;AACL,KAAI,IAAI,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;KACI,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,IAAI,OAAO,GAAG,aAAa,CAAC,EAAE;;AAE3D,OAAM,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAC7D,OAAM,CAAC,CAAC,WAAW,IAAI,OAAO;AAC9B,OAAM,CAAC,CAAC,QAAQ,IAAI,OAAO;AAC3B;AACA,OAAM,CAAC,CAAC,WAAW,IAAI,OAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAM,CAAC,GAAG,CAAC,CAAC,SAAS;OACf,CAAC,GAAG,CAAC;AACX,OAAM,GAAG;SACD,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,SAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;OACpD,CAAO,QAAQ,EAAE,CAAC;;OAEZ,CAAC,GAAG,OAAO;OACX,CAAC,GAAG,CAAC;AACX,OAAM,GAAG;SACD,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,SAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;AACpD;AACA;AACA;OACA,CAAO,QAAQ,EAAE,CAAC;;OAEZ,IAAI,IAAI,OAAO;AACrB,KAAA;KACI,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;OACzB;AACN,KAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC;AAClE,KAAI,CAAC,CAAC,SAAS,IAAI,CAAC;;AAEpB;KACI,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,EAAE;OACvC,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM;OAC3B,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;;AAE7B;OACM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;AAC7E;AACA;AACA;AACA,OAAM,OAAO,CAAC,CAAC,MAAM,EAAE;AACvB;SACQ,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;;AAE3F,SAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;SACxC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG;AAC7B,SAAQ,GAAG,EAAE;SACL,CAAC,CAAC,MAAM,EAAE;SACV,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,EAAE;WACtC;AACV,SAAA;AACA,OAAA;AACA,KAAA;AACA;AACA;AACA;;AAEA,GAAA,CAAG,QAAQ,CAAC,CAAC,SAAS,GAAG,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE;AAClC;AACA;AACA;GACE,IAAI,cAAc,GAAG,MAAM;;GAE3B,IAAI,cAAc,GAAG,CAAC,CAAC,gBAAgB,GAAG,CAAC,EAAE;AAC/C,KAAI,cAAc,GAAG,CAAC,CAAC,gBAAgB,GAAG,CAAC;AAC3C,GAAA;;AAEA;AACA,GAAE,SAAS;AACX;AACA,KAAI,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,EAAE;;AAE1B;AACA;AACA;AACA;AACA;AACA;;OAEM,WAAW,CAAC,CAAC,CAAC;OACd,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,IAAI,KAAK,KAAK,UAAU,EAAE;AACrD,SAAQ,OAAO,YAAY;AAC3B,OAAA;;AAEA,OAAM,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,EAAE;SACrB;AACR,OAAA;AACA;AACA,KAAA;AACA;AACA;;AAEA,KAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS;AAC7B,KAAI,CAAC,CAAC,SAAS,GAAG,CAAC;;AAEnB;AACA,KAAI,IAAI,SAAS,GAAG,CAAC,CAAC,WAAW,GAAG,cAAc;;AAElD,KAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,SAAS,EAAE;AACrD;OACM,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,GAAG,SAAS;AAC1C,OAAM,CAAC,CAAC,QAAQ,GAAG,SAAS;AAC5B;AACA,OAAM,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;OAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAClC,SAAQ,OAAO,YAAY;AAC3B,OAAA;AACA;;;AAGA,KAAA;AACA;AACA;AACA;AACA,KAAI,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,EAAE;AAClE;AACA,OAAM,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;OAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAClC,SAAQ,OAAO,YAAY;AAC3B,OAAA;AACA;AACA,KAAA;AACA,GAAA;;AAEA,GAAE,CAAC,CAAC,MAAM,GAAG,CAAC;;AAEd,GAAE,IAAI,KAAK,KAAK,QAAQ,EAAE;AAC1B;AACA,KAAI,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC;KACzB,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChC,OAAM,OAAO,iBAAiB;AAC9B,KAAA;AACA;AACA,KAAI,OAAO,cAAc;AACzB,GAAA;;GAEE,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,WAAW,EAAE;AAClC;AACA,KAAI,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;KAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChC,OAAM,OAAO,YAAY;AACzB,KAAA;AACA;AACA,GAAA;;AAEA,GAAE,OAAO,YAAY;AACrB,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE;GAC9B,IAAI,SAAS,CAAC;GACd,IAAI,MAAM,CAAC;;AAEb,GAAE,SAAS;AACX;AACA;AACA;AACA;AACA;AACA,KAAI,IAAI,CAAC,CAAC,SAAS,GAAG,aAAa,EAAE;OAC/B,WAAW,CAAC,CAAC,CAAC;OACd,IAAI,CAAC,CAAC,SAAS,GAAG,aAAa,IAAI,KAAK,KAAK,UAAU,EAAE;AAC/D,SAAQ,OAAO,YAAY;AAC3B,OAAA;AACA,OAAM,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,EAAE;AAC7B,SAAQ,MAAM;AACd,OAAA;AACA,KAAA;;AAEA;AACA;AACA;KACI,SAAS,GAAG,CAAC;AACjB,KAAI,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,EAAE;AAClC;AACA,OAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;OAC1F,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;OAC3D,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ;AAClC;AACA,KAAA;;AAEA;AACA;AACA;AACA,KAAI,IAAI,SAAS,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,MAAM,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE;AAC5F;AACA;AACA;AACA;OACM,CAAC,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,CAAC;AAClD;AACA,KAAA;AACA,KAAI,IAAI,CAAC,CAAC,YAAY,IAAI,SAAS,EAAE;AACrC;;AAEA;AACA;OACM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,GAAG,SAAS,CAAC;;AAEzF,OAAM,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,YAAY;;AAEnC;AACA;AACA;AACA,OAAM,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,cAAc,yBAAyB,CAAC,CAAC,SAAS,IAAI,SAAS,EAAE;AAC/F,SAAQ,CAAC,CAAC,YAAY,EAAE,CAAC;AACzB,SAAQ,GAAG;WACD,CAAC,CAAC,QAAQ,EAAE;AACtB;AACA,WAAU,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;WAC1F,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;WAC3D,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ;AACtC;AACA;AACA;AACA;AACA,SAAA,CAAS,QAAQ,EAAE,CAAC,CAAC,YAAY,KAAK,CAAC;SAC/B,CAAC,CAAC,QAAQ,EAAE;OACpB,CAAO;OACD;AACN,SAAQ,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY;AACpC,SAAQ,CAAC,CAAC,YAAY,GAAG,CAAC;SAClB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtC;SACQ,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;;AAEtF;AACA;AACA;AACA;AACA;AACA;AACA,OAAA;AACA,KAAA,CAAK,MAAM;AACX;AACA;AACA;AACA,OAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;;OAEpD,CAAC,CAAC,SAAS,EAAE;OACb,CAAC,CAAC,QAAQ,EAAE;AAClB,KAAA;KACI,IAAI,MAAM,EAAE;AAChB;AACA,OAAM,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;OAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAClC,SAAQ,OAAO,YAAY;AAC3B,OAAA;AACA;AACA,KAAA;AACA,GAAA;GACE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC;AAC1E,GAAE,IAAI,KAAK,KAAK,QAAQ,EAAE;AAC1B;AACA,KAAI,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC;KACzB,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChC,OAAM,OAAO,iBAAiB;AAC9B,KAAA;AACA;AACA,KAAI,OAAO,cAAc;AACzB,GAAA;AACA,GAAE,IAAI,CAAC,CAAC,QAAQ,EAAE;AAClB;AACA,KAAI,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;KAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChC,OAAM,OAAO,YAAY;AACzB,KAAA;AACA;AACA,GAAA;AACA,GAAE,OAAO,aAAa;AACtB,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE;GAC9B,IAAI,SAAS,CAAC;GACd,IAAI,MAAM,CAAC;;AAEb,GAAE,IAAI,UAAU;;AAEhB;AACA,GAAE,SAAS;AACX;AACA;AACA;AACA;AACA;AACA,KAAI,IAAI,CAAC,CAAC,SAAS,GAAG,aAAa,EAAE;OAC/B,WAAW,CAAC,CAAC,CAAC;OACd,IAAI,CAAC,CAAC,SAAS,GAAG,aAAa,IAAI,KAAK,KAAK,UAAU,EAAE;AAC/D,SAAQ,OAAO,YAAY;AAC3B,OAAA;OACM,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,EAAE,EAAE,MAAM,CAAA,CAAE;AACvC,KAAA;;AAEA;AACA;AACA;KACI,SAAS,GAAG,CAAC;AACjB,KAAI,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,EAAE;AAClC;AACA,OAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;OAC1F,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;OAC3D,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ;AAClC;AACA,KAAA;;AAEA;AACA;AACA,KAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,YAAY;AAClC,KAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,WAAW;AAChC,KAAI,CAAC,CAAC,YAAY,GAAG,SAAS,GAAG,CAAC;;KAE9B,IAAI,SAAS,KAAK,CAAC,WAAW,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,cAAc;AAClE,SAAQ,CAAC,CAAC,QAAQ,GAAG,SAAS,KAAK,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,iBAAiB;AAC7E;AACA;AACA;AACA;OACM,CAAC,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,CAAC;AAClD;;AAEA,OAAM,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC;WACnB,CAAC,CAAC,QAAQ,KAAK,UAAU,KAAK,CAAC,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,WAAW,GAAG,IAAI,YAAY,CAAC,EAAE;;AAExH;AACA;AACA;AACA,SAAQ,CAAC,CAAC,YAAY,GAAG,SAAS,GAAG,CAAC;AACtC,OAAA;AACA,KAAA;AACA;AACA;AACA;AACA,KAAI,IAAI,CAAC,CAAC,WAAW,IAAI,SAAS,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW,EAAE;OACjE,UAAU,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS,GAAG,SAAS;AACvD;;AAEA;;AAEA;AACA;OACM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG,SAAS,CAAC;AAC3F;AACA;AACA;AACA;AACA;OACM,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC;AACtC,OAAM,CAAC,CAAC,WAAW,IAAI,CAAC;AACxB,OAAM,GAAG;AACT,SAAQ,IAAI,EAAE,CAAC,CAAC,QAAQ,IAAI,UAAU,EAAE;AACxC;AACA,WAAU,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;WAC1F,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;WAC3D,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ;AACtC;AACA,SAAA;AACA,OAAA,CAAO,QAAQ,EAAE,CAAC,CAAC,WAAW,KAAK,CAAC;AACpC,OAAM,CAAC,CAAC,eAAe,GAAG,CAAC;AAC3B,OAAM,CAAC,CAAC,YAAY,GAAG,SAAS,GAAG,CAAC;OAC9B,CAAC,CAAC,QAAQ,EAAE;;OAEZ,IAAI,MAAM,EAAE;AAClB;AACA,SAAQ,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;SAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AACpC,WAAU,OAAO,YAAY;AAC7B,SAAA;AACA;AACA,OAAA;;AAEA,KAAA,CAAK,MAAM,IAAI,CAAC,CAAC,eAAe,EAAE;AAClC;AACA;AACA;AACA;AACA;AACA;OACM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;;OAExD,IAAI,MAAM,EAAE;AAClB;AACA,SAAQ,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;AAClC;AACA,OAAA;OACM,CAAC,CAAC,QAAQ,EAAE;OACZ,CAAC,CAAC,SAAS,EAAE;OACb,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAClC,SAAQ,OAAO,YAAY;AAC3B,OAAA;AACA,KAAA,CAAK,MAAM;AACX;AACA;AACA;AACA,OAAM,CAAC,CAAC,eAAe,GAAG,CAAC;OACrB,CAAC,CAAC,QAAQ,EAAE;OACZ,CAAC,CAAC,SAAS,EAAE;AACnB,KAAA;AACA,GAAA;AACA;AACA,GAAE,IAAI,CAAC,CAAC,eAAe,EAAE;AACzB;AACA;KACI,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;;AAE5D,KAAI,CAAC,CAAC,eAAe,GAAG,CAAC;AACzB,GAAA;AACA,GAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC;AACpE,GAAE,IAAI,KAAK,KAAK,QAAQ,EAAE;AAC1B;AACA,KAAI,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC;KACzB,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChC,OAAM,OAAO,iBAAiB;AAC9B,KAAA;AACA;AACA,KAAI,OAAO,cAAc;AACzB,GAAA;AACA,GAAE,IAAI,CAAC,CAAC,QAAQ,EAAE;AAClB;AACA,KAAI,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;KAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChC,OAAM,OAAO,YAAY;AACzB,KAAA;AACA;AACA,GAAA;;AAEA,GAAE,OAAO,aAAa;AACtB,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE;GAC7B,IAAI,MAAM,CAAC;GACX,IAAI,IAAI,CAAC;AACX,GAAE,IAAI,IAAI,EAAE,MAAM,CAAC;;AAEnB,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM;;AAErB,GAAE,SAAS;AACX;AACA;AACA;AACA;AACA,KAAI,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,EAAE;OAC5B,WAAW,CAAC,CAAC,CAAC;OACd,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,IAAI,KAAK,KAAK,UAAU,EAAE;AAC5D,SAAQ,OAAO,YAAY;AAC3B,OAAA;OACM,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,EAAE,EAAE,MAAM,CAAA,CAAE;AACvC,KAAA;;AAEA;AACA,KAAI,CAAC,CAAC,YAAY,GAAG,CAAC;AACtB,KAAI,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE;AACpD,OAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC;AAC3B,OAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;OACjB,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;AACnF,SAAQ,MAAM,GAAG,CAAC,CAAC,QAAQ,GAAG,SAAS;AACvC,SAAQ,GAAG;AACX;AACA,SAAA,CAAS,QAAQ,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC;AAC/D,kBAAiB,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC;AAC/D,kBAAiB,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC;AAC/D,kBAAiB,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC;kBAC9C,IAAI,GAAG,MAAM;SACtB,CAAC,CAAC,YAAY,GAAG,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC;SAC5C,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,SAAS,EAAE;AAC1C,WAAU,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,SAAS;AACtC,SAAA;AACA,OAAA;AACA;AACA,KAAA;;AAEA;AACA,KAAI,IAAI,CAAC,CAAC,YAAY,IAAI,SAAS,EAAE;AACrC;;AAEA;AACA,OAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,YAAY,GAAG,SAAS,CAAC;;AAEhE,OAAM,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,YAAY;AACnC,OAAM,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY;AAClC,OAAM,CAAC,CAAC,YAAY,GAAG,CAAC;AACxB,KAAA,CAAK,MAAM;AACX;AACA;AACA;AACA,OAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;;OAEpD,CAAC,CAAC,SAAS,EAAE;OACb,CAAC,CAAC,QAAQ,EAAE;AAClB,KAAA;KACI,IAAI,MAAM,EAAE;AAChB;AACA,OAAM,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;OAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAClC,SAAQ,OAAO,YAAY;AAC3B,OAAA;AACA;AACA,KAAA;AACA,GAAA;AACA,GAAE,CAAC,CAAC,MAAM,GAAG,CAAC;AACd,GAAE,IAAI,KAAK,KAAK,QAAQ,EAAE;AAC1B;AACA,KAAI,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC;KACzB,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChC,OAAM,OAAO,iBAAiB;AAC9B,KAAA;AACA;AACA,KAAI,OAAO,cAAc;AACzB,GAAA;AACA,GAAE,IAAI,CAAC,CAAC,QAAQ,EAAE;AAClB;AACA,KAAI,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;KAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChC,OAAM,OAAO,YAAY;AACzB,KAAA;AACA;AACA,GAAA;AACA,GAAE,OAAO,aAAa;AACtB,CAAA;;AAEA;AACA;AACA;AACA;AACA,CAAA,SAAS,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE;GAC9B,IAAI,MAAM,CAAC;;AAEb,GAAE,SAAS;AACX;AACA,KAAI,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,EAAE;OACrB,WAAW,CAAC,CAAC,CAAC;AACpB,OAAM,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,EAAE;AAC7B,SAAQ,IAAI,KAAK,KAAK,UAAU,EAAE;AAClC,WAAU,OAAO,YAAY;AAC7B,SAAA;AACA,SAAQ,MAAM;AACd,OAAA;AACA,KAAA;;AAEA;AACA,KAAI,CAAC,CAAC,YAAY,GAAG,CAAC;AACtB;AACA;AACA,KAAI,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;KACpD,CAAC,CAAC,SAAS,EAAE;KACb,CAAC,CAAC,QAAQ,EAAE;KACZ,IAAI,MAAM,EAAE;AAChB;AACA,OAAM,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;OAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAClC,SAAQ,OAAO,YAAY;AAC3B,OAAA;AACA;AACA,KAAA;AACA,GAAA;AACA,GAAE,CAAC,CAAC,MAAM,GAAG,CAAC;AACd,GAAE,IAAI,KAAK,KAAK,QAAQ,EAAE;AAC1B;AACA,KAAI,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC;KACzB,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChC,OAAM,OAAO,iBAAiB;AAC9B,KAAA;AACA;AACA,KAAI,OAAO,cAAc;AACzB,GAAA;AACA,GAAE,IAAI,CAAC,CAAC,QAAQ,EAAE;AAClB;AACA,KAAI,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;KAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChC,OAAM,OAAO,YAAY;AACzB,KAAA;AACA;AACA,GAAA;AACA,GAAE,OAAO,aAAa;AACtB,CAAA;;AAEA;AACA;AACA;AACA;AACA;CACA,SAAS,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE;AACrE,GAAE,IAAI,CAAC,WAAW,GAAG,WAAW;AAChC,GAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ;AAC1B,GAAE,IAAI,CAAC,WAAW,GAAG,WAAW;AAChC,GAAE,IAAI,CAAC,SAAS,GAAG,SAAS;AAC5B,GAAE,IAAI,CAAC,IAAI,GAAG,IAAI;AAClB,CAAA;;AAEA,CAAA,IAAI,mBAAmB;;AAEvB,CAAA,mBAAmB,GAAG;AACtB;AACA,GAAE,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC;AACxC,GAAE,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC;AACtC,GAAE,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,YAAY,CAAC;AACvC,GAAE,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC;;AAExC,GAAE,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC;AACxC,GAAE,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC;AACzC,GAAE,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC;AAC3C,GAAE,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC;AAC3C,GAAE,IAAI,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC;AAC9C,GAAE,IAAI,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC;EAC7C;;;AAGD;AACA;AACA;CACA,SAAS,OAAO,CAAC,CAAC,EAAE;GAClB,CAAC,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM;;AAE9B;AACA,GAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;;AAEf;AACA;GACE,CAAC,CAAC,cAAc,GAAG,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ;GACxD,CAAC,CAAC,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW;GACvD,CAAC,CAAC,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW;GACvD,CAAC,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS;;AAE7D,GAAE,CAAC,CAAC,QAAQ,GAAG,CAAC;AAChB,GAAE,CAAC,CAAC,WAAW,GAAG,CAAC;AACnB,GAAE,CAAC,CAAC,SAAS,GAAG,CAAC;AACjB,GAAE,CAAC,CAAC,MAAM,GAAG,CAAC;GACZ,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,WAAW,GAAG,SAAS,GAAG,CAAC;AAChD,GAAE,CAAC,CAAC,eAAe,GAAG,CAAC;AACvB,GAAE,CAAC,CAAC,KAAK,GAAG,CAAC;AACb,CAAA;;;AAGA,CAAA,SAAS,YAAY,GAAG;AACxB,GAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACnB,GAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAClB,GAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC1B,GAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAC5B,GAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACvB,GAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACnB,GAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AAChB,GAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACrB,GAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACnB,GAAE,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;AAC3B,GAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;;AAEvB,GAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAClB,GAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAClB,GAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;;AAElB,GAAE,IAAI,CAAC,MAAM,GAAG,IAAI;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAE,IAAI,CAAC,WAAW,GAAG,CAAC;AACtB;AACA;AACA;;AAEA,GAAE,IAAI,CAAC,IAAI,GAAG,IAAI;AAClB;AACA;AACA;AACA;;AAEA,GAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEnB,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,GAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACrB,GAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACrB,GAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;;AAErB,GAAE,IAAI,CAAC,UAAU,GAAG,CAAC;AACrB;AACA;AACA;AACA;AACA;;AAEA,GAAE,IAAI,CAAC,WAAW,GAAG,CAAC;AACtB;AACA;AACA;;AAEA,GAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACxB,GAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACtB,GAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AAC3B,GAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACpB,GAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACvB,GAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;;AAErB,GAAE,IAAI,CAAC,WAAW,GAAG,CAAC;AACtB;AACA;AACA;;AAEA,GAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC;AAC3B;AACA;AACA;AACA;;AAEA,GAAE,IAAI,CAAC,cAAc,GAAG,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,GAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;;AAEpB,GAAE,IAAI,CAAC,UAAU,GAAG,CAAC;AACrB;;AAEA,GAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;;AAEtB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;AAClD,GAAE,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1D,GAAE,IAAI,CAAC,OAAO,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3D,GAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AACtB,GAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AACtB,GAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;AAEpB,GAAE,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;AACvB,GAAE,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;AACvB,GAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;;AAEvB;AACA,GAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC/C;;AAEA;AACA,GAAE,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;AAC/C,GAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEjB,GAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACpB,GAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACpB;AACA;AACA;;AAEA,GAAE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;AAChD,GAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAClB;AACA;;AAEA,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;;AAEjB,GAAE,IAAI,CAAC,WAAW,GAAG,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;;AAEpB,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC;AAChB;AACA;AACA;AACA;;AAEA,GAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACnB,GAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACtB,GAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACnB,GAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;;;AAGlB,GAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACjB;AACA;AACA;AACA,GAAE,IAAI,CAAC,QAAQ,GAAG,CAAC;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA;;;CAGA,SAAS,gBAAgB,CAAC,IAAI,EAAE;AAChC,GAAE,IAAI,CAAC;;GAEL,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AAC5B,KAAI,OAAO,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC;AACpC,GAAA;;GAEE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;AACpC,GAAE,IAAI,CAAC,SAAS,GAAG,SAAS;;AAE5B,GAAE,CAAC,GAAG,IAAI,CAAC,KAAK;AAChB,GAAE,CAAC,CAAC,OAAO,GAAG,CAAC;AACf,GAAE,CAAC,CAAC,WAAW,GAAG,CAAC;;AAEnB,GAAE,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE;AAClB,KAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI;AACpB;AACA,GAAA;GACE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC;GAC7C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;AAC5B,KAAI,CAAC;AACL;AACA,KAAI,CAAC,CAAC;AACN,GAAE,CAAC,CAAC,UAAU,GAAG,UAAU;AAC3B,GAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnB,GAAE,OAAO,IAAI;AACb,CAAA;;;CAGA,SAAS,YAAY,CAAC,IAAI,EAAE;AAC5B,GAAE,IAAI,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAClC,GAAE,IAAI,GAAG,KAAK,IAAI,EAAE;AACpB,KAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,GAAA;AACA,GAAE,OAAO,GAAG;AACZ,CAAA;;;AAGA,CAAA,SAAS,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE;AACtC,GAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,cAAc,CAAC,CAAA;AACpD,GAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,cAAc,CAAC,CAAA;AACrD,GAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI;AAC1B,GAAE,OAAO,IAAI;AACb,CAAA;;;AAGA,CAAA,SAAS,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE;GACzE,IAAI,CAAC,IAAI,EAAE;AACb,KAAI,OAAO,cAAc;AACzB,GAAA;GACE,IAAI,IAAI,GAAG,CAAC;;AAEd,GAAE,IAAI,KAAK,KAAK,qBAAqB,EAAE;KACnC,KAAK,GAAG,CAAC;AACb,GAAA;;AAEA,GAAE,IAAI,UAAU,GAAG,CAAC,EAAE;KAClB,IAAI,GAAG,CAAC;KACR,UAAU,GAAG,CAAC,UAAU;AAC5B,GAAA;;AAEA,QAAO,IAAI,UAAU,GAAG,EAAE,EAAE;KACxB,IAAI,GAAG,CAAC,CAAC;KACT,UAAU,IAAI,EAAE;AACpB,GAAA;;;GAGE,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,aAAa,IAAI,MAAM,KAAK,UAAU;AACvE,KAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,EAAE,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;AAC/D,KAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,OAAO,EAAE;AACxC,KAAI,OAAO,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC;AACpC,GAAA;;;AAGA,GAAE,IAAI,UAAU,KAAK,CAAC,EAAE;KACpB,UAAU,GAAG,CAAC;AAClB,GAAA;AACA;;AAEA,GAAE,IAAI,CAAC,GAAG,IAAI,YAAY,EAAE;;AAE5B,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC;AAChB,GAAE,CAAC,CAAC,IAAI,GAAG,IAAI;;AAEf,GAAE,CAAC,CAAC,IAAI,GAAG,IAAI;AACf,GAAE,CAAC,CAAC,MAAM,GAAG,IAAI;AACjB,GAAE,CAAC,CAAC,MAAM,GAAG,UAAU;GACrB,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM;GACxB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;;AAEzB,GAAE,CAAC,CAAC,SAAS,GAAG,QAAQ,GAAG,CAAC;GAC1B,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS;GAC9B,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC;AAC/B,GAAE,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,SAAS,GAAG,CAAC,IAAI,SAAS,CAAC;;AAE9D,GAAE,CAAC,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACzC,GAAE,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvC,GAAE,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;;AAEpC;AACA;;GAEE,CAAC,CAAC,WAAW,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC;;GAEpC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC;;AAExC;AACA;AACA,GAAE,CAAC,CAAC,WAAW,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;;AAEpD;AACA;GACE,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW;;AAE7B;GACE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW;;AAEnC,GAAE,CAAC,CAAC,KAAK,GAAG,KAAK;AACjB,GAAE,CAAC,CAAC,QAAQ,GAAG,QAAQ;AACvB,GAAE,CAAC,CAAC,MAAM,GAAG,MAAM;;AAEnB,GAAE,OAAO,YAAY,CAAC,IAAI,CAAC;AAC3B,CAAA;;AAEA,CAAA,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;AAClC,GAAE,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,CAAC;AAC5F,CAAA;;;AAGA,CAAA,SAASqB,SAAO,CAAC,IAAI,EAAE,KAAK,EAAE;GAC5B,IAAI,SAAS,EAAE,CAAC;AAClB,GAAE,IAAI,GAAG,EAAE,GAAG,CAAC;;AAEf,GAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;AAC1B,KAAI,KAAK,GAAG,OAAO,IAAI,KAAK,GAAG,CAAC,EAAE;KAC9B,OAAO,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,cAAc;AAC5D,GAAA;;AAEA,GAAE,CAAC,GAAG,IAAI,CAAC,KAAK;;AAEhB,GAAE,IAAI,CAAC,IAAI,CAAC,MAAM;QACX,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,MAAM,KAAK,YAAY,IAAI,KAAK,KAAK,QAAQ,CAAC,EAAE;AACzD,KAAI,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,WAAW,GAAG,cAAc,CAAC;AAC3E,GAAA;;AAEA,GAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;AAChB,GAAE,SAAS,GAAG,CAAC,CAAC,UAAU;AAC1B,GAAE,CAAC,CAAC,UAAU,GAAG,KAAK;;AAEtB;AACA,GAAE,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE;;AAE/B,KAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE;AACtB,OAAM,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACrB,OAAM,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;AACrB,OAAM,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACtB,OAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACpB,OAAM,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;AACrB,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;SACd,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC;sBAChB,CAAC,CAAC,QAAQ,IAAI,cAAc,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC;AAChE,sBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5B,SAAQ,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;AAC5B,SAAQ,CAAC,CAAC,MAAM,GAAG,UAAU;AAC7B,OAAA;YACW;AACX,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;sBACrB,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;sBACtB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;sBACxB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;sBACvB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE;UACtC;SACD,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;AACzC,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;AAChD,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC;AACjD,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC;SACzC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC;sBAChB,CAAC,CAAC,QAAQ,IAAI,cAAc,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC;AAChE,sBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;SACpB,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;AACvC,SAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;AACrD,WAAU,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACnD,WAAU,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC;AAC1D,SAAA;AACA,SAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;AAC3B,WAAU,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACrE,SAAA;AACA,SAAQ,CAAC,CAAC,OAAO,GAAG,CAAC;AACrB,SAAQ,CAAC,CAAC,MAAM,GAAG,WAAW;AAC9B,OAAA;AACA,KAAA;AACA;KACI;AACJ,OAAM,IAAI,MAAM,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAC5D,OAAM,IAAI,WAAW,GAAG,EAAE;;AAE1B,OAAM,IAAI,CAAC,CAAC,QAAQ,IAAI,cAAc,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;SAC/C,WAAW,GAAG,CAAC;AACvB,OAAA,CAAO,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;SACtB,WAAW,GAAG,CAAC;AACvB,OAAA,CAAO,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;SACxB,WAAW,GAAG,CAAC;AACvB,OAAA,CAAO,MAAM;SACL,WAAW,GAAG,CAAC;AACvB,OAAA;AACA,OAAM,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC;OAC5B,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,WAAW,CAAC,CAAA;AACpD,OAAM,MAAM,IAAI,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;;AAElC,OAAM,CAAC,CAAC,MAAM,GAAG,UAAU;AAC3B,OAAM,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC;;AAE5B;AACA,OAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE;SACpB,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;SACjC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;AAC3C,OAAA;AACA,OAAM,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACrB,KAAA;AACA,GAAA;;AAEA;AACA,GAAE,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,EAAE;AAChC,KAAI,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,gBAAgB;AACtC,OAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;;AAEtB,OAAM,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE;SACnD,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,gBAAgB,EAAE;AAC9C,WAAU,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE;aACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC;AAC/E,WAAA;WACU,aAAa,CAAC,IAAI,CAAC;AAC7B,WAAU,GAAG,GAAG,CAAC,CAAC,OAAO;WACf,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,gBAAgB,EAAE;aACpC;AACZ,WAAA;AACA,SAAA;AACA,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;SAC7C,CAAC,CAAC,OAAO,EAAE;AACnB,OAAA;AACA,OAAM,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE;SACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC;AAC3E,OAAA;AACA,OAAM,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;AAC/C,SAAQ,CAAC,CAAC,OAAO,GAAG,CAAC;AACrB,SAAQ,CAAC,CAAC,MAAM,GAAG,UAAU;AAC7B,OAAA;AACA,KAAA;UACS;AACT,OAAM,CAAC,CAAC,MAAM,GAAG,UAAU;AAC3B,KAAA;AACA,GAAA;AACA,GAAE,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE;AAC/B,KAAI,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,gBAAgB;AACrC,OAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;AACtB;;AAEA,OAAM,GAAG;SACD,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,gBAAgB,EAAE;AAC9C,WAAU,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE;aACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC;AAC/E,WAAA;WACU,aAAa,CAAC,IAAI,CAAC;AAC7B,WAAU,GAAG,GAAG,CAAC,CAAC,OAAO;WACf,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,gBAAgB,EAAE;aACpC,GAAG,GAAG,CAAC;aACP;AACZ,WAAA;AACA,SAAA;AACA;AACA,SAAQ,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;AAC9C,WAAU,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI;AAC5D,SAAA,CAAS,MAAM;WACL,GAAG,GAAG,CAAC;AACjB,SAAA;AACA,SAAQ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;OACxB,CAAO,QAAQ,GAAG,KAAK,CAAC;;AAExB,OAAM,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE;SACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC;AAC3E,OAAA;AACA,OAAM,IAAI,GAAG,KAAK,CAAC,EAAE;AACrB,SAAQ,CAAC,CAAC,OAAO,GAAG,CAAC;AACrB,SAAQ,CAAC,CAAC,MAAM,GAAG,aAAa;AAChC,OAAA;AACA,KAAA;UACS;AACT,OAAM,CAAC,CAAC,MAAM,GAAG,aAAa;AAC9B,KAAA;AACA,GAAA;AACA,GAAE,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa,EAAE;AAClC,KAAI,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB;AACxC,OAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;AACtB;;AAEA,OAAM,GAAG;SACD,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,gBAAgB,EAAE;AAC9C,WAAU,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE;aACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC;AAC/E,WAAA;WACU,aAAa,CAAC,IAAI,CAAC;AAC7B,WAAU,GAAG,GAAG,CAAC,CAAC,OAAO;WACf,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,gBAAgB,EAAE;aACpC,GAAG,GAAG,CAAC;aACP;AACZ,WAAA;AACA,SAAA;AACA;AACA,SAAQ,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AACjD,WAAU,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI;AAC/D,SAAA,CAAS,MAAM;WACL,GAAG,GAAG,CAAC;AACjB,SAAA;AACA,SAAQ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;OACxB,CAAO,QAAQ,GAAG,KAAK,CAAC;;AAExB,OAAM,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE;SACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC;AAC3E,OAAA;AACA,OAAM,IAAI,GAAG,KAAK,CAAC,EAAE;AACrB,SAAQ,CAAC,CAAC,MAAM,GAAG,UAAU;AAC7B,OAAA;AACA,KAAA;UACS;AACT,OAAM,CAAC,CAAC,MAAM,GAAG,UAAU;AAC3B,KAAA;AACA,GAAA;AACA,GAAE,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE;AAC/B,KAAI,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;OACjB,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE;SACtC,aAAa,CAAC,IAAI,CAAC;AAC3B,OAAA;OACM,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE;SACvC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACtC,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;AAC7C,SAAQ,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACvB,SAAQ,CAAC,CAAC,MAAM,GAAG,UAAU;AAC7B,OAAA;AACA,KAAA;UACS;AACT,OAAM,CAAC,CAAC,MAAM,GAAG,UAAU;AAC3B,KAAA;AACA,GAAA;AACA;;AAEA;AACA,GAAE,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE;KACnB,aAAa,CAAC,IAAI,CAAC;AACvB,KAAI,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,OAAM,CAAC,CAAC,UAAU,GAAG,EAAE;AACvB,OAAM,OAAO,IAAI;AACjB,KAAA;;AAEA;AACA;AACA;AACA;AACA,GAAA,CAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;KAC9D,KAAK,KAAK,QAAQ,EAAE;AACxB,KAAI,OAAO,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;AACjC,GAAA;;AAEA;AACA,GAAE,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;AACxD,KAAI,OAAO,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;AACjC,GAAA;;AAEA;AACA;GACE,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC;MACzC,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,EAAE;AACzD,KAAI,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,IAAI,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;QAClE,CAAC,CAAC,QAAQ,KAAK,KAAK,GAAG,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC;AACnD,SAAQ,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;;KAEhD,IAAI,MAAM,KAAK,iBAAiB,IAAI,MAAM,KAAK,cAAc,EAAE;AACnE,OAAM,CAAC,CAAC,MAAM,GAAG,YAAY;AAC7B,KAAA;KACI,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,iBAAiB,EAAE;AACjE,OAAM,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChC,SAAQ,CAAC,CAAC,UAAU,GAAG,EAAE;AACzB;AACA,OAAA;AACA,OAAM,OAAO,IAAI;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAA;AACA,KAAI,IAAI,MAAM,KAAK,aAAa,EAAE;AAClC,OAAM,IAAI,KAAK,KAAK,eAAe,EAAE;AACrC,SAAQ,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1B,OAAA;AACA,YAAW,IAAI,KAAK,KAAK,OAAO,EAAE;;SAE1B,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC9C;AACA;AACA;AACA,SAAQ,IAAI,KAAK,KAAK,YAAY,EAAE;AACpC;AACA,WAAU,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;;AAEvB,WAAU,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,EAAE;AACjC,aAAY,CAAC,CAAC,QAAQ,GAAG,CAAC;AAC1B,aAAY,CAAC,CAAC,WAAW,GAAG,CAAC;AAC7B,aAAY,CAAC,CAAC,MAAM,GAAG,CAAC;AACxB,WAAA;AACA,SAAA;AACA,OAAA;OACM,aAAa,CAAC,IAAI,CAAC;AACzB,OAAM,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AAChC,SAAQ,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC;AAC1B,SAAQ,OAAO,IAAI;AACnB,OAAA;AACA,KAAA;AACA,GAAA;AACA;AACA;;GAEE,IAAI,KAAK,KAAK,QAAQ,EAAE,EAAE,OAAO,IAAI,CAAC,CAAA;GACtC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,OAAO,YAAY,CAAC,CAAA;;AAEzC;AACA,GAAE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE;KAChB,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClC,KAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;AACzC,KAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC;AAC1C,KAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC;KACtC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrC,KAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC;AAC5C,KAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,IAAI,IAAI,CAAC;AAC7C,KAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,IAAI,IAAI,CAAC;AAC7C,GAAA;AACA;GACE;KACE,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;KACjC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;AACvC,GAAA;;GAEE,aAAa,CAAC,IAAI,CAAC;AACrB;AACA;AACA;AACA,GAAE,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AACrC;GACE,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,IAAI,GAAG,YAAY;AAC9C,CAAA;;CAEA,SAAS,UAAU,CAAC,IAAI,EAAE;AAC1B,GAAE,IAAI,MAAM;;GAEV,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,eAAe;AACtD,KAAI,OAAO,cAAc;AACzB,GAAA;;AAEA,GAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;GAC1B,IAAI,MAAM,KAAK,UAAU;KACvB,MAAM,KAAK,WAAW;KACtB,MAAM,KAAK,UAAU;KACrB,MAAM,KAAK,aAAa;KACxB,MAAM,KAAK,UAAU;KACrB,MAAM,KAAK,UAAU;AACzB,KAAI,MAAM,KAAK;KACX;AACJ,KAAI,OAAO,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC;AACpC,GAAA;;AAEA,GAAE,IAAI,CAAC,KAAK,GAAG,IAAI;;AAEnB,GAAE,OAAO,MAAM,KAAK,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,IAAI;AAC/D,CAAA;;;AAGA;AACA;AACA;AACA;AACA,CAAA,SAAS,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE;AAChD,GAAE,IAAI,UAAU,GAAG,UAAU,CAAC,MAAM;;AAEpC,GAAE,IAAI,CAAC;GACL,IAAI,GAAG,EAAE,CAAC;AACZ,GAAE,IAAI,IAAI;AACV,GAAE,IAAI,KAAK;AACX,GAAE,IAAI,IAAI;AACV,GAAE,IAAI,KAAK;AACX,GAAE,IAAI,OAAO;;GAEX,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,eAAe;AACtD,KAAI,OAAO,cAAc;AACzB,GAAA;;AAEA,GAAE,CAAC,GAAG,IAAI,CAAC,KAAK;AAChB,GAAE,IAAI,GAAG,CAAC,CAAC,IAAI;;AAEf,GAAE,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;AAC5E,KAAI,OAAO,cAAc;AACzB,GAAA;;AAEA;AACA,GAAE,IAAI,IAAI,KAAK,CAAC,EAAE;AAClB;AACA,KAAI,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;AAC/D,GAAA;;AAEA,GAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;;AAEb;AACA,GAAE,IAAI,UAAU,IAAI,CAAC,CAAC,MAAM,EAAE;AAC9B,KAAI,IAAI,IAAI,KAAK,CAAC,EAAE;AACpB;AACA,OAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACnB,OAAM,CAAC,CAAC,QAAQ,GAAG,CAAC;AACpB,OAAM,CAAC,CAAC,WAAW,GAAG,CAAC;AACvB,OAAM,CAAC,CAAC,MAAM,GAAG,CAAC;AAClB,KAAA;AACA;AACA;KACI,OAAO,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AACtC,KAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KACvE,UAAU,GAAG,OAAO;AACxB,KAAI,UAAU,GAAG,CAAC,CAAC,MAAM;AACzB,GAAA;AACA;AACA,GAAE,KAAK,GAAG,IAAI,CAAC,QAAQ;AACvB,GAAE,IAAI,GAAG,IAAI,CAAC,OAAO;AACrB,GAAE,KAAK,GAAG,IAAI,CAAC,KAAK;AACpB,GAAE,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC5B,GAAE,IAAI,CAAC,OAAO,GAAG,CAAC;AAClB,GAAE,IAAI,CAAC,KAAK,GAAG,UAAU;GACvB,WAAW,CAAC,CAAC,CAAC;AAChB,GAAE,OAAO,CAAC,CAAC,SAAS,IAAI,SAAS,EAAE;AACnC,KAAI,GAAG,GAAG,CAAC,CAAC,QAAQ;KAChB,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,SAAS,GAAG,CAAC,CAAC;AACrC,KAAI,GAAG;AACP;OACM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;;AAEzF,OAAM,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;;OAExC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG;AAC3B,OAAM,GAAG,EAAE;KACX,CAAK,QAAQ,EAAE,CAAC;AAChB,KAAI,CAAC,CAAC,QAAQ,GAAG,GAAG;AACpB,KAAI,CAAC,CAAC,SAAS,GAAG,SAAS,GAAG,CAAC;KAC3B,WAAW,CAAC,CAAC,CAAC;AAClB,GAAA;AACA,GAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS;AAC3B,GAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ;AAC5B,GAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS;AACxB,GAAE,CAAC,CAAC,SAAS,GAAG,CAAC;GACf,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,WAAW,GAAG,SAAS,GAAG,CAAC;AAChD,GAAE,CAAC,CAAC,eAAe,GAAG,CAAC;AACvB,GAAE,IAAI,CAAC,OAAO,GAAG,IAAI;AACrB,GAAE,IAAI,CAAC,KAAK,GAAG,KAAK;AACpB,GAAE,IAAI,CAAC,QAAQ,GAAG,KAAK;AACvB,GAAE,CAAC,CAAC,IAAI,GAAG,IAAI;AACf,GAAE,OAAO,IAAI;AACb,CAAA;;;AAGA,CAAAC,OAAA,CAAA,WAAmB,GAAG,WAAW;AACjC,CAAAA,OAAA,CAAA,YAAoB,GAAG,YAAY;AACnC,CAAAA,OAAA,CAAA,YAAoB,GAAG,YAAY;AACnC,CAAAA,OAAA,CAAA,gBAAwB,GAAG,gBAAgB;AAC3C,CAAAA,OAAA,CAAA,gBAAwB,GAAG,gBAAgB;AAC3C,CAAAA,OAAA,CAAA,OAAe,GAAGD,SAAO;AACzB,CAAAC,OAAA,CAAA,UAAkB,GAAG,UAAU;AAC/B,CAAAA,OAAA,CAAA,oBAA4B,GAAG,oBAAoB;AACnD,CAAAA,OAAA,CAAA,WAAmB,GAAG,oCAAoC;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;CC70DA,IAAI,KAAK,GAAG1B,aAAA,EAAmB;;;AAG/B;AACA;AACA;AACA;AACA;CACA,IAAI,YAAY,GAAG,IAAI;CACvB,IAAI,gBAAgB,GAAG,IAAI;;CAE3B,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE,CAAC,OAAO,EAAE,EAAE,EAAE,YAAY,GAAG,KAAK,CAAC,CAAA;CAClF,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC,OAAO,EAAE,EAAE,EAAE,gBAAgB,GAAG,KAAK,CAAC,CAAA;;;AAGlG;AACA;AACA;CACA,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;CAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC9B,GAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9F,CAAA;CACA,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;;AAGlC;AACA,CAAA,OAAA,CAAA,UAAkB,GAAG,UAAU,GAAG,EAAE;AACpC,GAAE,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC;;AAE7D;GACE,KAAK,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,EAAE,EAAE;AAC5C,KAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;AAC7B,KAAI,IAAI,CAAC,CAAC,GAAG,MAAM,MAAM,MAAM,KAAK,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,EAAE;OACpD,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;AACpC,OAAM,IAAI,CAAC,EAAE,GAAG,MAAM,MAAM,MAAM,EAAE;AACpC,SAAQ,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,GAAG,MAAM,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC;AAC1D,SAAQ,KAAK,EAAE;AACf,OAAA;AACA,KAAA;KACI,OAAO,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC;AACjE,GAAA;;AAEA;GACE,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;AAE/B;AACA,GAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,EAAE;AAC/C,KAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;AAC7B,KAAI,IAAI,CAAC,CAAC,GAAG,MAAM,MAAM,MAAM,KAAK,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,EAAE;OACpD,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;AACpC,OAAM,IAAI,CAAC,EAAE,GAAG,MAAM,MAAM,MAAM,EAAE;AACpC,SAAQ,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,GAAG,MAAM,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC;AAC1D,SAAQ,KAAK,EAAE;AACf,OAAA;AACA,KAAA;AACA,KAAI,IAAI,CAAC,GAAG,IAAI,EAAE;AAClB;AACA,OAAM,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AAClB,KAAA,CAAK,MAAM,IAAI,CAAC,GAAG,KAAK,EAAE;AAC1B;OACM,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;OAC3B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AAClC,KAAA,CAAK,MAAM,IAAI,CAAC,GAAG,OAAO,EAAE;AAC5B;OACM,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;AAClC,OAAM,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;OAClC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AAClC,KAAA,CAAK,MAAM;AACX;OACM,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;AAClC,OAAM,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;AACzC,OAAM,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;OAClC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AAClC,KAAA;AACA,GAAA;;AAEA,GAAE,OAAO,GAAG;CACZ,CAAC;;AAED;AACA,CAAA,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE;AACjC;AACA;AACA;AACA,GAAE,IAAI,GAAG,GAAG,KAAK,EAAE;AACnB,KAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,gBAAgB,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC,EAAE;AAC/E,OAAM,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACvE,KAAA;AACA,GAAA;;GAEE,IAAI,MAAM,GAAG,EAAE;AACjB,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;KAC5B,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzC,GAAA;AACA,GAAE,OAAO,MAAM;AACf,CAAA;;;AAGA;AACA,CAAA,OAAA,CAAA,aAAqB,GAAG,UAAU,GAAG,EAAE;GACrC,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;CACvC,CAAC;;;AAGD;AACA,CAAA,OAAA,CAAA,aAAqB,GAAG,UAAU,GAAG,EAAE;GACrC,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACtC,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;KAC9C,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9B,GAAA;AACA,GAAE,OAAO,GAAG;CACZ,CAAC;;;AAGD;AACA,CAAA,OAAA,CAAA,UAAkB,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE;AACzC,GAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK;AACtB,GAAE,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM;;AAE7B;AACA;AACA;GACE,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;;AAEnC,GAAE,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG;AACjC,KAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AAChB;AACA,KAAI,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;;AAElD,KAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;AACvB;KACI,IAAI,KAAK,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;;AAExE;AACA,KAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI;AACvD;KACI,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;AACjC,OAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;AACtC,OAAM,KAAK,EAAE;AACb,KAAA;;AAEA;AACA,KAAI,IAAI,KAAK,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,SAAS,CAAA;;AAExD,KAAI,IAAI,CAAC,GAAG,OAAO,EAAE;AACrB,OAAM,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;AACzB,KAAA,CAAK,MAAM;OACL,CAAC,IAAI,OAAO;AAClB,OAAM,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC;OAC9C,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC;AAC5C,KAAA;AACA,GAAA;;AAEA,GAAE,OAAO,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC;CACrC,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,OAAA,CAAA,UAAkB,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE;AACzC,GAAE,IAAI,GAAG;;AAET,GAAE,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM;AACzB,GAAE,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;;AAE3C;AACA,GAAE,GAAG,GAAG,GAAG,GAAG,CAAC;AACf,GAAE,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;;AAEzD;AACA;GACE,IAAI,GAAG,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,CAAA;;AAE5B;AACA;GACE,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,CAAA;;AAE9B,GAAE,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG;CACrD,CAAC;;;;;;;;;;;ACxLD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAA,SAAS,OAAO,GAAG;AACnB;AACA,GAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACpB,GAAE,IAAI,CAAC,OAAO,GAAG,CAAC;AAClB;AACA,GAAE,IAAI,CAAC,QAAQ,GAAG,CAAC;AACnB;AACA,GAAE,IAAI,CAAC,QAAQ,GAAG,CAAC;AACnB;AACA,GAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACrB,GAAE,IAAI,CAAC,QAAQ,GAAG,CAAC;AACnB;AACA,GAAE,IAAI,CAAC,SAAS,GAAG,CAAC;AACpB;AACA,GAAE,IAAI,CAAC,SAAS,GAAG,CAAC;AACpB;AACA,GAAE,IAAI,CAAC,GAAG,GAAG,EAAE;AACf;AACA,GAAE,IAAI,CAAC,KAAK,GAAG,IAAI;AACnB;AACA,GAAE,IAAI,CAAC,SAAS,GAAG,CAAC;AACpB;AACA,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC;AAChB,CAAA;;AAEA,CAAA,OAAc,GAAG,OAAO;;;;;;;;;;;CC3CxB,IAAI,YAAY,GAAGA,gBAAA,EAAyB;CAC5C,IAAI,KAAK,UAAUC,aAAA,EAAyB;CAC5C,IAAI,OAAO,QAAQC,cAAA,EAA0B;CAC7C,IAAI,GAAG,YAAYC,eAAA,EAA0B;CAC7C,IAAI,OAAO,QAAQC,cAAA,EAAyB;;AAE5C,CAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ;;AAExC;AACA;;CAEA,IAAI,UAAU,QAAQ,CAAC;CACvB,IAAI,QAAQ,UAAU,CAAC;;CAEvB,IAAI,IAAI,cAAc,CAAC;CACvB,IAAI,YAAY,MAAM,CAAC;CACvB,IAAI,YAAY,MAAM,CAAC;;CAEvB,IAAI,qBAAqB,GAAG,EAAE;;CAE9B,IAAI,kBAAkB,MAAM,CAAC;;CAE7B,IAAI,UAAU,IAAI,CAAC;;AAEnB;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,OAAO,CAAC,OAAO,EAAE;AAC1B,GAAE,IAAI,EAAE,IAAI,YAAY,OAAO,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;;AAE7D,GAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;KAC1B,KAAK,EAAE,qBAAqB;KAC5B,MAAM,EAAE,UAAU;KAClB,SAAS,EAAE,KAAK;KAChB,UAAU,EAAE,EAAE;KACd,QAAQ,EAAE,CAAC;KACX,QAAQ,EAAE,kBAAkB;AAChC,KAAI,EAAE,EAAE;AACR,IAAG,EAAE,OAAO,IAAI,EAAE,CAAC;;AAEnB,GAAE,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO;;GAEtB,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE;AACvC,KAAI,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,UAAU;AACpC,GAAA;;AAEA,QAAO,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;AACtE,KAAI,GAAG,CAAC,UAAU,IAAI,EAAE;AACxB,GAAA;;AAEA,GAAE,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAClB,GAAE,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;AACnB,GAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;AACtB,GAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;;AAEnB,GAAE,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,EAAE;AAC3B,GAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC;;AAEzB,GAAE,IAAI,MAAM,GAAG,YAAY,CAAC,YAAY;KACpC,IAAI,CAAC,IAAI;KACT,GAAG,CAAC,KAAK;KACT,GAAG,CAAC,MAAM;KACV,GAAG,CAAC,UAAU;KACd,GAAG,CAAC,QAAQ;AAChB,KAAI,GAAG,CAAC;IACL;;AAEH,GAAE,IAAI,MAAM,KAAK,IAAI,EAAE;KACnB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAChC,GAAA;;AAEA,GAAE,IAAI,GAAG,CAAC,MAAM,EAAE;KACd,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;AACxD,GAAA;;AAEA,GAAE,IAAI,GAAG,CAAC,UAAU,EAAE;AACtB,KAAI,IAAI,IAAI;AACZ;AACA,KAAI,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE;AAC5C;OACM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/C,KAAA,CAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,sBAAsB,EAAE;OACnE,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC3C,KAAA,CAAK,MAAM;AACX,OAAM,IAAI,GAAG,GAAG,CAAC,UAAU;AAC3B,KAAA;;KAEI,MAAM,GAAG,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;;AAE/D,KAAI,IAAI,MAAM,KAAK,IAAI,EAAE;OACnB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClC,KAAA;;AAEA,KAAI,IAAI,CAAC,SAAS,GAAG,IAAI;AACzB,GAAA;AACA,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE;AAC/C,GAAE,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,GAAE,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;GACtC,IAAI,MAAM,EAAE,KAAK;;GAEjB,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,CAAC,CAAA;;AAEjC,GAAE,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,QAAQ,GAAG,UAAU,CAAC;;AAE9E;AACA,GAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC;KACI,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;GACzC,CAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,sBAAsB,EAAE;KACzD,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;AACrC,GAAA,CAAG,MAAM;AACT,KAAI,IAAI,CAAC,KAAK,GAAG,IAAI;AACrB,GAAA;;AAEA,GAAE,IAAI,CAAC,OAAO,GAAG,CAAC;GAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;;AAEnC,GAAE,GAAG;AACL,KAAI,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;OACxB,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7C,OAAM,IAAI,CAAC,QAAQ,GAAG,CAAC;AACvB,OAAM,IAAI,CAAC,SAAS,GAAG,SAAS;AAChC,KAAA;KACI,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;KAE3C,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,IAAI,EAAE;AACpD,OAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACxB,OAAM,IAAI,CAAC,KAAK,GAAG,IAAI;AACvB,OAAM,OAAO,KAAK;AAClB,KAAA;KACI,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,YAAY,CAAC,CAAC,EAAE;OACnG,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE;SAChC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvF,OAAA,CAAO,MAAM;AACb,SAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChE,OAAA;AACA,KAAA;AACA,GAAA,CAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,MAAM,KAAK,YAAY;;AAEjF;AACA,GAAE,IAAI,KAAK,KAAK,QAAQ,EAAE;KACtB,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/C,KAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACtB,KAAI,IAAI,CAAC,KAAK,GAAG,IAAI;KACjB,OAAO,MAAM,KAAK,IAAI;AAC1B,GAAA;;AAEA;AACA,GAAE,IAAI,KAAK,KAAK,YAAY,EAAE;AAC9B,KAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACpB,KAAI,IAAI,CAAC,SAAS,GAAG,CAAC;AACtB,KAAI,OAAO,IAAI;AACf,GAAA;;AAEA,GAAE,OAAO,IAAI;CACb,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE;AAC5C,GAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;CACzB,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,MAAM,EAAE;AAC5C;AACA,GAAE,IAAI,MAAM,KAAK,IAAI,EAAE;KACnB,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE;OAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACxC,KAAA,CAAK,MAAM;OACL,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;AACpD,KAAA;AACA,GAAA;AACA,GAAE,IAAI,CAAC,MAAM,GAAG,EAAE;AAClB,GAAE,IAAI,CAAC,GAAG,GAAG,MAAM;GACjB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG;CAC1B,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;AACjC,GAAE,IAAI,QAAQ,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;;AAErC,GAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;;AAE5B;AACA,GAAE,IAAI,QAAQ,CAAC,GAAG,EAAE,EAAE,MAAM,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;;GAE5D,OAAO,QAAQ,CAAC,MAAM;AACxB,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE;AACpC,GAAE,OAAO,GAAG,OAAO,IAAI,EAAE;AACzB,GAAE,OAAO,CAAC,GAAG,GAAG,IAAI;AACpB,GAAE,OAAO,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AAChC,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;AAC9B,GAAE,OAAO,GAAG,OAAO,IAAI,EAAE;AACzB,GAAE,OAAO,CAAC,IAAI,GAAG,IAAI;AACrB,GAAE,OAAO,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AAChC,CAAA;;;AAGA,CAAAsB,SAAA,CAAA,OAAe,GAAG,OAAO;AACzB,CAAAA,SAAA,CAAA,OAAe,GAAG,OAAO;AACzB,CAAAA,SAAA,CAAA,UAAkB,GAAG,UAAU;AAC/B,CAAAA,SAAA,CAAA,IAAY,GAAG,IAAI;;;;;;;;;;;;;;;AC7YnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;CACA,IAAI,GAAG,GAAG,EAAE,CAAC;CACb,IAAI,IAAI,GAAG,EAAE,CAAC;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAA,OAAc,GAAG,SAAS,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;AACpD,GAAE,IAAI,KAAK;GACT,IAAI,GAAG,CAAC;GACR,IAAI,IAAI,CAAC;GACT,IAAI,IAAI,CAAC;GACT,IAAI,GAAG,CAAC;GACR,IAAI,GAAG,CAAC;AACV;GACE,IAAI,IAAI,CAAC;AACX;GACE,IAAI,KAAK,CAAC;GACV,IAAI,KAAK,CAAC;GACV,IAAI,KAAK,CAAC;AACZ;GACE,IAAI,QAAQ,CAAC;GACb,IAAI,IAAI,CAAC;GACT,IAAI,IAAI,CAAC;GACT,IAAI,KAAK,CAAC;GACV,IAAI,KAAK,CAAC;GACV,IAAI,KAAK,CAAC;GACV,IAAI,KAAK,CAAC;GACV,IAAI,IAAI,CAAC;GACT,IAAI,EAAE,CAAC;AACT;GACE,IAAI,GAAG,CAAC;GACR,IAAI,IAAI,CAAC;GACT,IAAI,IAAI,CAAC;AACX,GAAE,IAAI,WAAW;;;AAGjB,GAAE,IAAI,KAAK,EAAE,MAAM,CAAC;;AAEpB;AACA,GAAE,KAAK,GAAG,IAAI,CAAC,KAAK;AACpB;AACA,GAAE,GAAG,GAAG,IAAI,CAAC,OAAO;AACpB,GAAE,KAAK,GAAG,IAAI,CAAC,KAAK;GAClB,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAClC,GAAE,IAAI,GAAG,IAAI,CAAC,QAAQ;AACtB,GAAE,MAAM,GAAG,IAAI,CAAC,MAAM;GACpB,GAAG,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;GACrC,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;AACrC;AACA,GAAE,IAAI,GAAG,KAAK,CAAC,IAAI;AACnB;AACA,GAAE,KAAK,GAAG,KAAK,CAAC,KAAK;AACrB,GAAE,KAAK,GAAG,KAAK,CAAC,KAAK;AACrB,GAAE,KAAK,GAAG,KAAK,CAAC,KAAK;AACrB,GAAE,QAAQ,GAAG,KAAK,CAAC,MAAM;AACzB,GAAE,IAAI,GAAG,KAAK,CAAC,IAAI;AACnB,GAAE,IAAI,GAAG,KAAK,CAAC,IAAI;AACnB,GAAE,KAAK,GAAG,KAAK,CAAC,OAAO;AACvB,GAAE,KAAK,GAAG,KAAK,CAAC,QAAQ;GACtB,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC;GAChC,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC;;;AAGnC;AACA;;AAEA,GAAE,GAAG;AACL,GAAE,GAAG;AACL,KAAI,IAAI,IAAI,GAAG,EAAE,EAAE;OACb,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI;OAC5B,IAAI,IAAI,CAAC;OACT,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI;OAC5B,IAAI,IAAI,CAAC;AACf,KAAA;;AAEA,KAAI,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;;AAE9B,KAAI,KAAK;AACT,KAAI,SAAS;AACb,OAAM,EAAE,GAAG,IAAI,KAAK,EAAE;OAChB,IAAI,MAAM,EAAE;OACZ,IAAI,IAAI,EAAE;AAChB,OAAM,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI;AAC/B,OAAM,IAAI,EAAE,KAAK,CAAC,EAAE;AACpB;AACA;AACA;SACQ,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,MAAM;AACtC,OAAA;AACA,YAAW,IAAI,EAAE,GAAG,EAAE,EAAE;AACxB,SAAQ,GAAG,GAAG,IAAI,GAAG,MAAM;SACnB,EAAE,IAAI,EAAE,CAAC;SACT,IAAI,EAAE,EAAE;AAChB,WAAU,IAAI,IAAI,GAAG,EAAE,EAAE;aACb,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI;aAC5B,IAAI,IAAI,CAAC;AACrB,WAAA;WACU,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;WAC7B,IAAI,MAAM,EAAE;WACZ,IAAI,IAAI,EAAE;AACpB,SAAA;AACA;AACA,SAAQ,IAAI,IAAI,GAAG,EAAE,EAAE;WACb,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI;WAC5B,IAAI,IAAI,CAAC;WACT,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI;WAC5B,IAAI,IAAI,CAAC;AACnB,SAAA;AACA,SAAQ,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;;AAElC,SAAQ,MAAM;AACd,SAAQ,SAAS;AACjB,WAAU,EAAE,GAAG,IAAI,KAAK,EAAE;WAChB,IAAI,MAAM,EAAE;WACZ,IAAI,IAAI,EAAE;AACpB,WAAU,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI;;AAEnC,WAAU,IAAI,EAAE,GAAG,EAAE,EAAE;AACvB,aAAY,IAAI,GAAG,IAAI,GAAG,MAAM;aACpB,EAAE,IAAI,EAAE,CAAC;AACrB,aAAY,IAAI,IAAI,GAAG,EAAE,EAAE;eACb,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI;eAC5B,IAAI,IAAI,CAAC;AACvB,eAAc,IAAI,IAAI,GAAG,EAAE,EAAE;iBACb,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI;iBAC5B,IAAI,IAAI,CAAC;AACzB,eAAA;AACA,aAAA;aACY,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1C;AACA,aAAY,IAAI,IAAI,GAAG,IAAI,EAAE;AAC7B,eAAc,IAAI,CAAC,GAAG,GAAG,+BAA+B;AACxD,eAAc,KAAK,CAAC,IAAI,GAAG,GAAG;AAC9B,eAAc,MAAM,GAAG;AACvB,aAAA;AACA;aACY,IAAI,MAAM,EAAE;aACZ,IAAI,IAAI,EAAE;AACtB;AACA,aAAY,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;AAC5B,aAAY,IAAI,IAAI,GAAG,EAAE,EAAE;AAC3B,eAAc,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7B,eAAc,IAAI,EAAE,GAAG,KAAK,EAAE;AAC9B,iBAAgB,IAAI,KAAK,CAAC,IAAI,EAAE;AAChC,mBAAkB,IAAI,CAAC,GAAG,GAAG,+BAA+B;AAC5D,mBAAkB,KAAK,CAAC,IAAI,GAAG,GAAG;AAClC,mBAAkB,MAAM,GAAG;AAC3B,iBAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAA;eACc,IAAI,GAAG,CAAC,CAAC;eACT,WAAW,GAAG,QAAQ;AACpC,eAAc,IAAI,KAAK,KAAK,CAAC,EAAE;AAC/B,iBAAgB,IAAI,IAAI,KAAK,GAAG,EAAE;AAClC,iBAAgB,IAAI,EAAE,GAAG,GAAG,EAAE;mBACZ,GAAG,IAAI,EAAE;AAC3B,mBAAkB,GAAG;qBACD,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;mBACrD,CAAmB,QAAQ,EAAE,EAAE;AAC/B,mBAAkB,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;mBACnB,WAAW,GAAG,MAAM;AACtC,iBAAA;AACA,eAAA;AACA,oBAAmB,IAAI,KAAK,GAAG,EAAE,EAAE;AACnC,iBAAgB,IAAI,IAAI,KAAK,GAAG,KAAK,GAAG,EAAE;iBAC1B,EAAE,IAAI,KAAK;AAC3B,iBAAgB,IAAI,EAAE,GAAG,GAAG,EAAE;mBACZ,GAAG,IAAI,EAAE;AAC3B,mBAAkB,GAAG;qBACD,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;mBACrD,CAAmB,QAAQ,EAAE,EAAE;mBACb,IAAI,GAAG,CAAC;AAC1B,mBAAkB,IAAI,KAAK,GAAG,GAAG,EAAE;qBACf,EAAE,GAAG,KAAK;qBACV,GAAG,IAAI,EAAE;AAC7B,qBAAoB,GAAG;uBACD,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;qBACvD,CAAqB,QAAQ,EAAE,EAAE;AACjC,qBAAoB,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;qBACnB,WAAW,GAAG,MAAM;AACxC,mBAAA;AACA,iBAAA;AACA,eAAA;oBACmB;AACnB,iBAAgB,IAAI,IAAI,KAAK,GAAG,EAAE;AAClC,iBAAgB,IAAI,EAAE,GAAG,GAAG,EAAE;mBACZ,GAAG,IAAI,EAAE;AAC3B,mBAAkB,GAAG;qBACD,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;mBACrD,CAAmB,QAAQ,EAAE,EAAE;AAC/B,mBAAkB,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;mBACnB,WAAW,GAAG,MAAM;AACtC,iBAAA;AACA,eAAA;AACA,eAAc,OAAO,GAAG,GAAG,CAAC,EAAE;iBACd,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;iBACpC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;iBACpC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;iBACpC,GAAG,IAAI,CAAC;AACxB,eAAA;eACc,IAAI,GAAG,EAAE;iBACP,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;AACpD,iBAAgB,IAAI,GAAG,GAAG,CAAC,EAAE;mBACX,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;AACtD,iBAAA;AACA,eAAA;AACA,aAAA;kBACiB;AACjB,eAAc,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACjC,eAAc,GAAG;iBACD,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;iBAC/B,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;iBAC/B,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;iBAC/B,GAAG,IAAI,CAAC;eACxB,CAAe,QAAQ,GAAG,GAAG,CAAC;eAChB,IAAI,GAAG,EAAE;iBACP,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;AAC/C,iBAAgB,IAAI,GAAG,GAAG,CAAC,EAAE;mBACX,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;AACjD,iBAAA;AACA,eAAA;AACA,aAAA;AACA,WAAA;AACA,gBAAe,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE;AACpC,aAAY,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,MAAM,iBAAiB,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAChF,aAAY,SAAS,MAAM;AAC3B,WAAA;gBACe;AACf,aAAY,IAAI,CAAC,GAAG,GAAG,uBAAuB;AAC9C,aAAY,KAAK,CAAC,IAAI,GAAG,GAAG;AAC5B,aAAY,MAAM,GAAG;AACrB,WAAA;;AAEA,WAAU,MAAM;AAChB,SAAA;AACA,OAAA;AACA,YAAW,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE;AAChC,SAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,MAAM,iBAAiB,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5E,SAAQ,SAAS,KAAK;AACtB,OAAA;AACA,YAAW,IAAI,EAAE,GAAG,EAAE,EAAE;AACxB;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;AACzB,SAAQ,MAAM,GAAG;AACjB,OAAA;YACW;AACX,SAAQ,IAAI,CAAC,GAAG,GAAG,6BAA6B;AAChD,SAAQ,KAAK,CAAC,IAAI,GAAG,GAAG;AACxB,SAAQ,MAAM,GAAG;AACjB,OAAA;;AAEA,OAAM,MAAM;AACZ,KAAA;AACA,GAAA,CAAG,QAAQ,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG;;AAEnC;AACA,GAAE,GAAG,GAAG,IAAI,IAAI,CAAC;GACf,GAAG,IAAI,GAAG;AACZ,GAAE,IAAI,IAAI,GAAG,IAAI,CAAC;AAClB,GAAE,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;;AAEzB;AACA,GAAE,IAAI,CAAC,OAAO,GAAG,GAAG;AACpB,GAAE,IAAI,CAAC,QAAQ,GAAG,IAAI;GACpB,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC;GAClE,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC;AACzE,GAAE,KAAK,CAAC,IAAI,GAAG,IAAI;AACnB,GAAE,KAAK,CAAC,IAAI,GAAG,IAAI;GACjB;CACF,CAAC;;;;;;;;;;;ACtVD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;CAEA,IAAI,KAAK,GAAG1B,aAAA,EAA0B;;CAEtC,IAAI,OAAO,GAAG,EAAE;CAChB,IAAI,WAAW,GAAG,GAAG;CACrB,IAAI,YAAY,GAAG,GAAG;AACtB;;CAEA,IAAI,KAAK,GAAG,CAAC;CACb,IAAI,IAAI,GAAG,CAAC;CACZ,IAAI,KAAK,GAAG,CAAC;;AAEb,CAAA,IAAI,KAAK,GAAG;AACZ,GAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;GACvD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;EAC9D;;AAED,CAAA,IAAI,IAAI,GAAG;AACX,GAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;GAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EACzD;;AAED,CAAA,IAAI,KAAK,GAAG;AACZ,GAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG;AAC3D,GAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;GACtD,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;EAC/B;;AAED,CAAA,IAAI,IAAI,GAAG;AACX,GAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAChE,GAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;GACtC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EACrB;;AAED,CAAA,QAAc,GAAG,SAAS,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI;AACrG,CAAA;AACA,GAAE,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB;;AAEA,GAAE,IAAI,GAAG,GAAG,CAAC,CAAC;AACd,GAAE,IAAI,GAAG,GAAG,CAAC,CAAC;GACZ,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AACvB,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC;AACf,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC;AACf,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC;AACf,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC;AACf,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC;AACf,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC;GACb,IAAI,IAAI,CAAC;GACT,IAAI,IAAI,CAAC;GACT,IAAI,GAAG,CAAC;GACR,IAAI,IAAI,CAAC;GACT,IAAI,IAAI,CAAC;AACX,GAAE,IAAI,IAAI,GAAG,IAAI,CAAC;GAChB,IAAI,UAAU,GAAG,CAAC;AACpB;GACE,IAAI,GAAG,CAAC;AACV,GAAE,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC3C,GAAE,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;GACxC,IAAI,KAAK,GAAG,IAAI;GAChB,IAAI,WAAW,GAAG,CAAC;;AAErB,GAAE,IAAI,SAAS,EAAE,OAAO,EAAE,QAAQ;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;GACE,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,OAAO,EAAE,GAAG,EAAE,EAAE;AACvC,KAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAClB,GAAA;GACE,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;KAChC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,EAAE;AACnC,GAAA;;AAEA;GACE,IAAI,GAAG,IAAI;GACX,KAAK,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE;KACnC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAA;AAClC,GAAA;AACA,GAAE,IAAI,IAAI,GAAG,GAAG,EAAE;KACd,IAAI,GAAG,GAAG;AACd,GAAA;AACA,GAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB;AACA;AACA;AACA,KAAI,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;;;AAGrD;AACA;AACA;AACA,KAAI,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;;AAErD,KAAI,IAAI,CAAC,IAAI,GAAG,CAAC;KACb,OAAO,CAAC,CAAC;AACb,GAAA;GACE,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE;KAC9B,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAA;AAClC,GAAA;AACA,GAAE,IAAI,IAAI,GAAG,GAAG,EAAE;KACd,IAAI,GAAG,GAAG;AACd,GAAA;;AAEA;GACE,IAAI,GAAG,CAAC;GACR,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,OAAO,EAAE,GAAG,EAAE,EAAE;KACnC,IAAI,KAAK,CAAC;AACd,KAAI,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC;AACtB,KAAI,IAAI,IAAI,GAAG,CAAC,EAAE;OACZ,OAAO,EAAE;KACf,CAAK;AACL,GAAA;AACA,GAAE,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;KAC7C,OAAO,EAAE,CAAC;AACd,GAAA;;AAEA;AACA,GAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;GACX,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE;AACtC,KAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1C,GAAA;;AAEA;GACE,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;KAChC,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;AACtC,OAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;AAChD,KAAA;AACA,GAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE,IAAI,IAAI,KAAK,KAAK,EAAE;AACtB,KAAI,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;KACpB,GAAG,GAAG,EAAE;;AAEZ,GAAA,CAAG,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE;KACxB,IAAI,GAAG,KAAK;KACZ,UAAU,IAAI,GAAG;KACjB,KAAK,GAAG,IAAI;KACZ,WAAW,IAAI,GAAG;KAClB,GAAG,GAAG,GAAG;;AAEb,GAAA,CAAG,MAAM;KACL,IAAI,GAAG,KAAK;KACZ,KAAK,GAAG,IAAI;KACZ,GAAG,GAAG,EAAE;AACZ,GAAA;;AAEA;GACE,IAAI,GAAG,CAAC,CAAC;GACT,GAAG,GAAG,CAAC,CAAC;GACR,GAAG,GAAG,GAAG,CAAC;GACV,IAAI,GAAG,WAAW,CAAC;GACnB,IAAI,GAAG,IAAI,CAAC;GACZ,IAAI,GAAG,CAAC,CAAC;AACX,GAAE,GAAG,GAAG,EAAE,CAAC;AACX,GAAE,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC;AACnB,GAAE,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;;AAElB;GACE,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,WAAW;MACrC,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,YAAY,CAAC,EAAE;AAC7C,KAAI,OAAO,CAAC;AACZ,GAAA;;AAEA;AACA,GAAE,SAAS;AACX;AACA,KAAI,SAAS,GAAG,GAAG,GAAG,IAAI;AAC1B,KAAI,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE;OACnB,OAAO,GAAG,CAAC;AACjB,OAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;AAC1B,KAAA;AACA,UAAS,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE;OACxB,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;OACxC,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,KAAA;UACS;AACT,OAAM,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC;OAClB,QAAQ,GAAG,CAAC;AAClB,KAAA;;AAEA;AACA,KAAI,IAAI,GAAG,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC;AAC5B,KAAI,IAAI,GAAG,CAAC,IAAI,IAAI;KAChB,GAAG,GAAG,IAAI,CAAC;AACf,KAAI,GAAG;OACD,IAAI,IAAI,IAAI;OACZ,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC;KAC7F,CAAK,QAAQ,IAAI,KAAK,CAAC;;AAEvB;AACA,KAAI,IAAI,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;AACzB,KAAI,OAAO,IAAI,GAAG,IAAI,EAAE;OAClB,IAAI,KAAK,CAAC;AAChB,KAAA;AACA,KAAI,IAAI,IAAI,KAAK,CAAC,EAAE;AACpB,OAAM,IAAI,IAAI,IAAI,GAAG,CAAC;OAChB,IAAI,IAAI,IAAI;AAClB,KAAA,CAAK,MAAM;OACL,IAAI,GAAG,CAAC;AACd,KAAA;;AAEA;AACA,KAAI,GAAG,EAAE;KACL,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC5B,OAAM,IAAI,GAAG,KAAK,GAAG,EAAE,EAAE,MAAM,CAAA;OACzB,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,KAAA;;AAEA;KACI,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,GAAG,EAAE;AAC7C;AACA,OAAM,IAAI,IAAI,KAAK,CAAC,EAAE;SACd,IAAI,GAAG,IAAI;AACnB,OAAA;;AAEA;OACM,IAAI,IAAI,GAAG,CAAC;;AAElB;AACA,OAAM,IAAI,GAAG,GAAG,GAAG,IAAI;AACvB,OAAM,IAAI,GAAG,CAAC,IAAI,IAAI;AACtB,OAAM,OAAO,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE;AAChC,SAAQ,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AAClC,SAAQ,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,MAAM,CAAA;AAC/B,SAAQ,IAAI,EAAE;SACN,IAAI,KAAK,CAAC;AAClB,OAAA;;AAEA;AACA,OAAM,IAAI,IAAI,CAAC,IAAI,IAAI;OACjB,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,WAAW;UACrC,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,YAAY,CAAC,EAAE;AACjD,SAAQ,OAAO,CAAC;AAChB,OAAA;;AAEA;AACA,OAAM,GAAG,GAAG,IAAI,GAAG,IAAI;AACvB;AACA;AACA;OACM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC;AACxE,KAAA;AACA,GAAA;;AAEA;AACA;AACA;AACA,GAAE,IAAI,IAAI,KAAK,CAAC,EAAE;AAClB;AACA;AACA;KACI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC7D,GAAA;;AAEA;AACA;AACA,GAAE,IAAI,CAAC,IAAI,GAAG,IAAI;AAClB,GAAE,OAAO,CAAC;CACV,CAAC;;;;;;;;;;ACpVD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;CAEA,IAAI,KAAK,WAAWA,aAAA,EAA0B;CAC9C,IAAI,OAAO,SAASC,cAAA,EAAoB;CACxC,IAAI,KAAK,WAAWC,YAAA,EAAkB;CACtC,IAAI,YAAY,IAAIC,cAAA,EAAoB;CACxC,IAAI,aAAa,GAAGC,eAAA,EAAqB;;CAEzC,IAAI,KAAK,GAAG,CAAC;CACb,IAAI,IAAI,GAAG,CAAC;CACZ,IAAI,KAAK,GAAG,CAAC;;AAEb;AACA;;;AAGA;AACA;AACA;AACA;AACA;CACA,IAAI,QAAQ,UAAU,CAAC;CACvB,IAAI,OAAO,WAAW,CAAC;CACvB,IAAI,OAAO,WAAW,CAAC;;;AAGvB;AACA;AACA;CACA,IAAI,IAAI,cAAc,CAAC;CACvB,IAAI,YAAY,MAAM,CAAC;CACvB,IAAI,WAAW,OAAO,CAAC;AACvB;CACA,IAAI,cAAc,IAAI,EAAE;CACxB,IAAI,YAAY,MAAM,EAAE;CACxB,IAAI,WAAW,OAAO,EAAE;CACxB,IAAI,WAAW,OAAO,EAAE;AACxB;;AAEA;CACA,IAAI,UAAU,IAAI,CAAC;;;AAGnB;AACA;;;CAGA,OAAO,IAAI,GAAG,CAAC,CAAC;CAChB,OAAO,KAAK,GAAG,CAAC,CAAC;CACjB,OAAO,IAAI,GAAG,CAAC,CAAC;CAChB,OAAO,EAAE,GAAG,CAAC,CAAC;CACd,OAAO,KAAK,GAAG,CAAC,CAAC;CACjB,OAAO,KAAK,GAAG,CAAC,CAAC;CACjB,OAAO,IAAI,GAAG,CAAC,CAAC;CAChB,OAAO,OAAO,GAAG,CAAC,CAAC;CACnB,OAAO,IAAI,GAAG,CAAC,CAAC;CAChB,OAAO,MAAM,GAAG,EAAE,CAAC;CACnB,OAAO,IAAI,GAAG,EAAE,CAAC;CACjB,WAAW,IAAI,GAAG,EAAE,CAAC;CACrB,WAAW,MAAM,GAAG,EAAE,CAAC;CACvB,WAAW,MAAM,GAAG,EAAE,CAAC;CACvB,WAAW,KAAK,GAAG,EAAE,CAAC;CACtB,WAAW,IAAI,GAAG,EAAE,CAAC;CACrB,WAAW,KAAK,GAAG,EAAE,CAAC;CACtB,WAAW,OAAO,GAAG,EAAE,CAAC;CACxB,WAAW,QAAQ,GAAG,EAAE,CAAC;CACzB,eAAe,IAAI,GAAG,EAAE,CAAC;CACzB,eAAe,GAAG,GAAG,EAAE,CAAC;CACxB,eAAe,MAAM,GAAG,EAAE,CAAC;CAC3B,eAAe,IAAI,GAAG,EAAE,CAAC;CACzB,eAAe,OAAO,GAAG,EAAE,CAAC;CAC5B,eAAe,KAAK,GAAG,EAAE,CAAC;CAC1B,eAAe,GAAG,GAAG,EAAE,CAAC;CACxB,OAAO,KAAK,GAAG,EAAE,CAAC;CAClB,OAAO,MAAM,GAAG,EAAE,CAAC;CACnB,OAAO,IAAI,GAAG,EAAE,CAAC;CACjB,OAAO,GAAG,GAAG,EAAE,CAAC;CAChB,OAAO,GAAG,GAAG,EAAE,CAAC;CAChB,OAAO,IAAI,GAAG,EAAE,CAAC;;AAEjB;;;;CAIA,IAAI,WAAW,GAAG,GAAG;CACrB,IAAI,YAAY,GAAG,GAAG;AACtB;;CAEA,IAAI,SAAS,GAAG,EAAE;AAClB;CACA,IAAI,SAAS,GAAG,SAAS;;;CAGzB,SAAS,OAAO,CAAC,CAAC,EAAE;AACpB,GAAE,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI;AAC7B,YAAW,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;AAC9B,YAAW,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;AAC7B,YAAW,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;AAC5B,CAAA;;;AAGA,CAAA,SAAS,YAAY,GAAG;AACxB,GAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AAChB,GAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AACpB,GAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AAChB,GAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,GAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AAChB,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB;AACA,GAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEnB;AACA,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,GAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;;AAErB;AACA,GAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AAChB,GAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;;AAEhB;AACA,GAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAClB,GAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;;AAElB;AACA,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;;AAEjB;AACA,GAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB,GAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,GAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACnB,GAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;;AAEpB;AACA,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,GAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AAChB,GAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,GAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AAChB,GAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;GAEjB,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;GACjC,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;AAEnC;AACA;AACA;AACA;AACA;AACA,GAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACrB,GAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB,GAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AAChB,GAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AAChB,GAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACf,CAAA;;CAEA,SAAS,gBAAgB,CAAC,IAAI,EAAE;AAChC,GAAE,IAAI,KAAK;;AAEX,GAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,cAAc,CAAC,CAAA;AACpD,GAAE,KAAK,GAAG,IAAI,CAAC,KAAK;AACpB,GAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;AAClD,GAAE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AAChB,GAAE,IAAI,KAAK,CAAC,IAAI,EAAE;KACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC;AAC/B,GAAA;AACA,GAAE,KAAK,CAAC,IAAI,GAAG,IAAI;AACnB,GAAE,KAAK,CAAC,IAAI,GAAG,CAAC;AAChB,GAAE,KAAK,CAAC,QAAQ,GAAG,CAAC;AACpB,GAAE,KAAK,CAAC,IAAI,GAAG,KAAK;AACpB,GAAE,KAAK,CAAC,IAAI,GAAG,IAAI;AACnB,GAAE,KAAK,CAAC,IAAI,GAAG,CAAC;AAChB,GAAE,KAAK,CAAC,IAAI,GAAG,CAAC;AAChB;AACA,GAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;AAC7D,GAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;;AAEhE,GAAE,KAAK,CAAC,IAAI,GAAG,CAAC;AAChB,GAAE,KAAK,CAAC,IAAI,GAAG,EAAE;AACjB;AACA,GAAE,OAAO,IAAI;AACb,CAAA;;CAEA,SAAS,YAAY,CAAC,IAAI,EAAE;AAC5B,GAAE,IAAI,KAAK;;AAEX,GAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,cAAc,CAAC,CAAA;AACpD,GAAE,KAAK,GAAG,IAAI,CAAC,KAAK;AACpB,GAAE,KAAK,CAAC,KAAK,GAAG,CAAC;AACjB,GAAE,KAAK,CAAC,KAAK,GAAG,CAAC;AACjB,GAAE,KAAK,CAAC,KAAK,GAAG,CAAC;AACjB,GAAE,OAAO,gBAAgB,CAAC,IAAI,CAAC;;AAE/B,CAAA;;AAEA,CAAA,SAAS,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE;AACzC,GAAE,IAAI,IAAI;AACV,GAAE,IAAI,KAAK;;AAEX;AACA,GAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,cAAc,CAAC,CAAA;AACpD,GAAE,KAAK,GAAG,IAAI,CAAC,KAAK;;AAEpB;AACA,GAAE,IAAI,UAAU,GAAG,CAAC,EAAE;KAClB,IAAI,GAAG,CAAC;KACR,UAAU,GAAG,CAAC,UAAU;AAC5B,GAAA;QACO;AACP,KAAI,IAAI,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC;AAChC,KAAI,IAAI,UAAU,GAAG,EAAE,EAAE;OACnB,UAAU,IAAI,EAAE;AACtB,KAAA;AACA,GAAA;;AAEA;GACE,IAAI,UAAU,KAAK,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,EAAE,CAAC,EAAE;AACzD,KAAI,OAAO,cAAc;AACzB,GAAA;AACA,GAAE,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE;AAC3D,KAAI,KAAK,CAAC,MAAM,GAAG,IAAI;AACvB,GAAA;;AAEA;AACA,GAAE,KAAK,CAAC,IAAI,GAAG,IAAI;AACnB,GAAE,KAAK,CAAC,KAAK,GAAG,UAAU;AAC1B,GAAE,OAAO,YAAY,CAAC,IAAI,CAAC;AAC3B,CAAA;;AAEA,CAAA,SAAS,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE;AACxC,GAAE,IAAI,GAAG;AACT,GAAE,IAAI,KAAK;;AAEX,GAAE,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,cAAc,CAAC,CAAA;AACrC;;AAEA,GAAE,KAAK,GAAG,IAAI,YAAY,EAAE;;AAE5B;AACA;AACA,GAAE,IAAI,CAAC,KAAK,GAAG,KAAK;AACpB,GAAE,KAAK,CAAC,MAAM,GAAG,IAAI;AACrB,GAAE,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC;AACvC,GAAE,IAAI,GAAG,KAAK,IAAI,EAAE;AACpB,KAAI,IAAI,CAAC,KAAK,GAAG,IAAI;AACrB,GAAA;AACA,GAAE,OAAO,GAAG;AACZ,CAAA;;CAEA,SAAS,WAAW,CAAC,IAAI,EAAE;AAC3B,GAAE,OAAO,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC;AACtC,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,IAAI,MAAM,GAAG,IAAI;;CAEjB,IAAI,MAAM,EAAE,OAAO,CAAC;;CAEpB,SAAS,WAAW,CAAC,KAAK,EAAE;AAC5B;GACE,IAAI,MAAM,EAAE;AACd,KAAI,IAAI,GAAG;;KAEP,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;KAC7B,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;;AAEjC;KACI,GAAG,GAAG,CAAC;AACX,KAAI,OAAO,GAAG,GAAG,GAAG,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;AAC9C,KAAI,OAAO,GAAG,GAAG,GAAG,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;AAC9C,KAAI,OAAO,GAAG,GAAG,GAAG,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;AAC9C,KAAI,OAAO,GAAG,GAAG,GAAG,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;;KAE1C,aAAa,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;AAElF;KACI,GAAG,GAAG,CAAC;AACX,KAAI,OAAO,GAAG,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;;KAEzC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;AAElF;KACI,MAAM,GAAG,KAAK;AAClB,GAAA;;AAEA,GAAE,KAAK,CAAC,OAAO,GAAG,MAAM;AACxB,GAAE,KAAK,CAAC,OAAO,GAAG,CAAC;AACnB,GAAE,KAAK,CAAC,QAAQ,GAAG,OAAO;AAC1B,GAAE,KAAK,CAAC,QAAQ,GAAG,CAAC;AACpB,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AAC5C,GAAE,IAAI,IAAI;AACV,GAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;;AAExB;AACA,GAAE,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE;KACzB,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK;AAClC,KAAI,KAAK,CAAC,KAAK,GAAG,CAAC;AACnB,KAAI,KAAK,CAAC,KAAK,GAAG,CAAC;;AAEnB,KAAI,KAAK,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC9C,GAAA;;AAEA;AACA,GAAE,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;KACvB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACxE,KAAI,KAAK,CAAC,KAAK,GAAG,CAAC;AACnB,KAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;AAC7B,GAAA;QACO;KACH,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;AACpC,KAAI,IAAI,IAAI,GAAG,IAAI,EAAE;OACf,IAAI,GAAG,IAAI;AACjB,KAAA;AACA;AACA,KAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;KAChE,IAAI,IAAI,IAAI;KACZ,IAAI,IAAI,EAAE;AACd;AACA,OAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,OAAM,KAAK,CAAC,KAAK,GAAG,IAAI;AACxB,OAAM,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;AAC/B,KAAA;UACS;AACT,OAAM,KAAK,CAAC,KAAK,IAAI,IAAI;AACzB,OAAM,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;AACzD,OAAM,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAA;AAC3D,KAAA;AACA,GAAA;AACA,GAAE,OAAO,CAAC;AACV,CAAA;;AAEA,CAAA,SAASuB,SAAO,CAAC,IAAI,EAAE,KAAK,EAAE;AAC9B,GAAE,IAAI,KAAK;AACX,GAAE,IAAI,KAAK,EAAE,MAAM,CAAC;GAClB,IAAI,IAAI,CAAC;GACT,IAAI,GAAG,CAAC;AACV,GAAE,IAAI,IAAI,EAAE,IAAI,CAAC;GACf,IAAI,IAAI,CAAC;GACT,IAAI,IAAI,CAAC;AACX,GAAE,IAAI,GAAG,EAAE,IAAI,CAAC;GACd,IAAI,IAAI,CAAC;GACT,IAAI,IAAI,CAAC;AACX,GAAE,IAAI,WAAW;AACjB,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC;AACf,GAAE,IAAI,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC;AACnC;AACA,GAAE,IAAI,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC;GACjC,IAAI,GAAG,CAAC;GACR,IAAI,GAAG,CAAC;GACR,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,GAAE,IAAI,IAAI;;GAER,IAAI,CAAC,CAAC;;AAER,GAAE,IAAI,KAAK;AACX,KAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;;;AAGxE,GAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM;QACnC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,EAAE;AAC5C,KAAI,OAAO,cAAc;AACzB,GAAA;;AAEA,GAAE,KAAK,GAAG,IAAI,CAAC,KAAK;AACpB,GAAE,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA,CAAE;;;AAGnD;AACA,GAAE,GAAG,GAAG,IAAI,CAAC,QAAQ;AACrB,GAAE,MAAM,GAAG,IAAI,CAAC,MAAM;AACtB,GAAE,IAAI,GAAG,IAAI,CAAC,SAAS;AACvB,GAAE,IAAI,GAAG,IAAI,CAAC,OAAO;AACrB,GAAE,KAAK,GAAG,IAAI,CAAC,KAAK;AACpB,GAAE,IAAI,GAAG,IAAI,CAAC,QAAQ;AACtB,GAAE,IAAI,GAAG,KAAK,CAAC,IAAI;AACnB,GAAE,IAAI,GAAG,KAAK,CAAC,IAAI;AACnB;;GAEE,GAAG,GAAG,IAAI;GACV,IAAI,GAAG,IAAI;GACX,GAAG,GAAG,IAAI;;AAEZ,GAAE,SAAS;AACX,GAAE,SAAS;KACP,QAAQ,KAAK,CAAC,IAAI;AACtB,OAAM,KAAK,IAAI;AACf,SAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;AAC9B,WAAU,KAAK,CAAC,IAAI,GAAG,MAAM;WACnB;AACV,SAAA;AACA;AACA,SAAQ,OAAO,IAAI,GAAG,EAAE,EAAE;WAChB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC5C,WAAU,IAAI,EAAE;WACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;WAC7B,IAAI,IAAI,CAAC;AACnB,SAAA;AACA;SACQ,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,KAAK,MAAM,EAAE;AACjD,WAAU,KAAK,CAAC,KAAK,GAAG,CAAC;AACzB;AACA,WAAU,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;WACrB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI;AACvC,WAAU,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD;;AAEA;WACU,IAAI,GAAG,CAAC;WACR,IAAI,GAAG,CAAC;AAClB;AACA,WAAU,KAAK,CAAC,IAAI,GAAG,KAAK;WAClB;AACV,SAAA;AACA,SAAQ,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AACxB,SAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;AACxB,WAAU,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK;AACjC,SAAA;AACA,SAAQ,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;AAC7B,WAAU,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,gBAAgB,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;AAChE,WAAU,IAAI,CAAC,GAAG,GAAG,wBAAwB;AAC7C,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA,SAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,iBAAiB,UAAU,EAAE;AACrD,WAAU,IAAI,CAAC,GAAG,GAAG,4BAA4B;AACjD,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA;SACQ,IAAI,MAAM,CAAC;SACX,IAAI,IAAI,CAAC;AACjB;AACA,SAAQ,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,eAAe,CAAC;AAC1C,SAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE;AAC/B,WAAU,KAAK,CAAC,KAAK,GAAG,GAAG;AAC3B,SAAA;AACA,cAAa,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE;AACpC,WAAU,IAAI,CAAC,GAAG,GAAG,qBAAqB;AAC1C,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG;AAC7B;SACQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;SAC5B,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI;AACjD;SACQ,IAAI,GAAG,CAAC;SACR,IAAI,GAAG,CAAC;AAChB;SACQ;AACR,OAAM,KAAK,KAAK;AAChB;AACA,SAAQ,OAAO,IAAI,GAAG,EAAE,EAAE;WAChB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC5C,WAAU,IAAI,EAAE;WACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;WAC7B,IAAI,IAAI,CAAC;AACnB,SAAA;AACA;AACA,SAAQ,KAAK,CAAC,KAAK,GAAG,IAAI;SAClB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,MAAM,UAAU,EAAE;AACjD,WAAU,IAAI,CAAC,GAAG,GAAG,4BAA4B;AACjD,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA,SAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;AAClC,WAAU,IAAI,CAAC,GAAG,GAAG,0BAA0B;AAC/C,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA,SAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;AACxB,WAAU,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,SAAA;AACA,SAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;AAClC;AACA,WAAU,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;WACrB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI;AACvC,WAAU,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD;AACA,SAAA;AACA;SACQ,IAAI,GAAG,CAAC;SACR,IAAI,GAAG,CAAC;AAChB;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;AACzB;AACA,OAAM,KAAK,IAAI;AACf;AACA,SAAQ,OAAO,IAAI,GAAG,EAAE,EAAE;WAChB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC5C,WAAU,IAAI,EAAE;WACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;WAC7B,IAAI,IAAI,CAAC;AACnB,SAAA;AACA;AACA,SAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;AACxB,WAAU,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI;AAChC,SAAA;AACA,SAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;AAClC;AACA,WAAU,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;WACrB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI;WAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI;WAC9B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI;AACxC,WAAU,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD;AACA,SAAA;AACA;SACQ,IAAI,GAAG,CAAC;SACR,IAAI,GAAG,CAAC;AAChB;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,EAAE;AACvB;AACA,OAAM,KAAK,EAAE;AACb;AACA,SAAQ,OAAO,IAAI,GAAG,EAAE,EAAE;WAChB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC5C,WAAU,IAAI,EAAE;WACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;WAC7B,IAAI,IAAI,CAAC;AACnB,SAAA;AACA;AACA,SAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;WACd,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC;WACjC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;AACrC,SAAA;AACA,SAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;AAClC;AACA,WAAU,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;WACrB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI;AACvC,WAAU,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD;AACA,SAAA;AACA;SACQ,IAAI,GAAG,CAAC;SACR,IAAI,GAAG,CAAC;AAChB;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,KAAK;AAC1B;AACA,OAAM,KAAK,KAAK;AAChB,SAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;AAClC;AACA,WAAU,OAAO,IAAI,GAAG,EAAE,EAAE;aAChB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC9C,aAAY,IAAI,EAAE;aACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;aAC7B,IAAI,IAAI,CAAC;AACrB,WAAA;AACA;AACA,WAAU,KAAK,CAAC,MAAM,GAAG,IAAI;AAC7B,WAAU,IAAI,KAAK,CAAC,IAAI,EAAE;AAC1B,aAAY,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI;AACvC,WAAA;AACA,WAAU,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;AACpC;AACA,aAAY,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;aACrB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI;AACzC,aAAY,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AACxD;AACA,WAAA;AACA;WACU,IAAI,GAAG,CAAC;WACR,IAAI,GAAG,CAAC;AAClB;AACA,SAAA;AACA,cAAa,IAAI,KAAK,CAAC,IAAI,EAAE;AAC7B,WAAU,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI;AACjC,SAAA;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,KAAK;AAC1B;AACA,OAAM,KAAK,KAAK;AAChB,SAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;AAClC,WAAU,IAAI,GAAG,KAAK,CAAC,MAAM;WACnB,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,CAAA;WAC/B,IAAI,IAAI,EAAE;AACpB,aAAY,IAAI,KAAK,CAAC,IAAI,EAAE;eACd,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM;AACvD,eAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;AACrC;AACA,iBAAgB,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AAClE,eAAA;eACc,KAAK,CAAC,QAAQ;AAC5B,iBAAgB,KAAK,CAAC,IAAI,CAAC,KAAK;AAChC,iBAAgB,KAAK;AACrB,iBAAgB,IAAI;AACpB;AACA;AACA,iBAAgB,IAAI;AACpB;iBACgB;gBACD;AACf;AACA;AACA;AACA,aAAA;AACA,aAAY,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;AACtC,eAAc,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;AACjE,aAAA;aACY,IAAI,IAAI,IAAI;aACZ,IAAI,IAAI,IAAI;AACxB,aAAY,KAAK,CAAC,MAAM,IAAI,IAAI;AAChC,WAAA;WACU,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC9C,SAAA;AACA,SAAQ,KAAK,CAAC,MAAM,GAAG,CAAC;AACxB,SAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;AACzB;AACA,OAAM,KAAK,IAAI;AACf,SAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;WACxB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;WAClC,IAAI,GAAG,CAAC;AAClB,WAAU,GAAG;AACb;aACY,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;AACtC;AACA,aAAY,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG;AACjC,kBAAiB,KAAK,CAAC,MAAM,GAAG,KAAK,yBAAyB,EAAE;eAClD,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;AACzD,aAAA;AACA,WAAA,CAAW,QAAQ,GAAG,IAAI,IAAI,GAAG,IAAI;;AAErC,WAAU,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;AACpC,aAAY,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;AAC/D,WAAA;WACU,IAAI,IAAI,IAAI;WACZ,IAAI,IAAI,IAAI;AACtB,WAAU,IAAI,GAAG,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AACrC,SAAA;AACA,cAAa,IAAI,KAAK,CAAC,IAAI,EAAE;AAC7B,WAAU,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI;AAChC,SAAA;AACA,SAAQ,KAAK,CAAC,MAAM,GAAG,CAAC;AACxB,SAAQ,KAAK,CAAC,IAAI,GAAG,OAAO;AAC5B;AACA,OAAM,KAAK,OAAO;AAClB,SAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;WACxB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;WAClC,IAAI,GAAG,CAAC;AAClB,WAAU,GAAG;aACD,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;AACtC;AACA,aAAY,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG;AACjC,kBAAiB,KAAK,CAAC,MAAM,GAAG,KAAK,yBAAyB,EAAE;eAClD,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;AAC5D,aAAA;AACA,WAAA,CAAW,QAAQ,GAAG,IAAI,IAAI,GAAG,IAAI;AACrC,WAAU,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;AACpC,aAAY,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;AAC/D,WAAA;WACU,IAAI,IAAI,IAAI;WACZ,IAAI,IAAI,IAAI;AACtB,WAAU,IAAI,GAAG,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AACrC,SAAA;AACA,cAAa,IAAI,KAAK,CAAC,IAAI,EAAE;AAC7B,WAAU,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI;AACnC,SAAA;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;AACzB;AACA,OAAM,KAAK,IAAI;AACf,SAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;AAClC;AACA,WAAU,OAAO,IAAI,GAAG,EAAE,EAAE;aAChB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC9C,aAAY,IAAI,EAAE;aACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;aAC7B,IAAI,IAAI,CAAC;AACrB,WAAA;AACA;WACU,IAAI,IAAI,MAAM,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE;AAC/C,aAAY,IAAI,CAAC,GAAG,GAAG,qBAAqB;AAC5C,aAAY,KAAK,CAAC,IAAI,GAAG,GAAG;aAChB;AACZ,WAAA;AACA;WACU,IAAI,GAAG,CAAC;WACR,IAAI,GAAG,CAAC;AAClB;AACA,SAAA;AACA,SAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;AACxB,WAAU,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,WAAU,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI;AAChC,SAAA;SACQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;AACpC,SAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;SACjB;AACR,OAAM,KAAK,MAAM;AACjB;AACA,SAAQ,OAAO,IAAI,GAAG,EAAE,EAAE;WAChB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC5C,WAAU,IAAI,EAAE;WACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;WAC7B,IAAI,IAAI,CAAC;AACnB,SAAA;AACA;SACQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;AAChD;SACQ,IAAI,GAAG,CAAC;SACR,IAAI,GAAG,CAAC;AAChB;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;AACzB;AACA,OAAM,KAAK,IAAI;AACf,SAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE;AAClC;AACA,WAAU,IAAI,CAAC,QAAQ,GAAG,GAAG;AAC7B,WAAU,IAAI,CAAC,SAAS,GAAG,IAAI;AAC/B,WAAU,IAAI,CAAC,OAAO,GAAG,IAAI;AAC7B,WAAU,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC9B,WAAU,KAAK,CAAC,IAAI,GAAG,IAAI;AAC3B,WAAU,KAAK,CAAC,IAAI,GAAG,IAAI;AAC3B;AACA,WAAU,OAAO,WAAW;AAC5B,SAAA;SACQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;AACpC,SAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;AACzB;AACA,OAAM,KAAK,IAAI;AACf,SAAQ,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AACtE;AACA,OAAM,KAAK,MAAM;AACjB,SAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;AACxB;AACA,WAAU,IAAI,MAAM,IAAI,GAAG,CAAC;AAC5B,WAAU,IAAI,IAAI,IAAI,GAAG,CAAC;AAC1B;AACA,WAAU,KAAK,CAAC,IAAI,GAAG,KAAK;WAClB;AACV,SAAA;AACA;AACA,SAAQ,OAAO,IAAI,GAAG,CAAC,EAAE;WACf,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC5C,WAAU,IAAI,EAAE;WACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;WAC7B,IAAI,IAAI,CAAC;AACnB,SAAA;AACA;AACA,SAAQ,KAAK,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AAClC;SACQ,IAAI,MAAM,CAAC;SACX,IAAI,IAAI,CAAC;AACjB;;SAEQ,SAAS,IAAI,GAAG,IAAI;AAC5B,WAAU,KAAK,CAAC;AAChB;AACA;AACA,aAAY,KAAK,CAAC,IAAI,GAAG,MAAM;aACnB;AACZ,WAAU,KAAK,CAAC;aACJ,WAAW,CAAC,KAAK,CAAC;AAC9B;AACA;AACA,aAAY,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AAC9B,aAAY,IAAI,KAAK,KAAK,OAAO,EAAE;AACnC;eACc,IAAI,MAAM,CAAC;eACX,IAAI,IAAI,CAAC;AACvB;AACA,eAAc,MAAM,SAAS;AAC7B,aAAA;aACY;AACZ,WAAU,KAAK,CAAC;AAChB;AACA;AACA,aAAY,KAAK,CAAC,IAAI,GAAG,KAAK;aAClB;AACZ,WAAU,KAAK,CAAC;AAChB,aAAY,IAAI,CAAC,GAAG,GAAG,oBAAoB;AAC3C,aAAY,KAAK,CAAC,IAAI,GAAG,GAAG;AAC5B;AACA;SACQ,IAAI,MAAM,CAAC;SACX,IAAI,IAAI,CAAC;AACjB;SACQ;AACR,OAAM,KAAK,MAAM;AACjB;AACA,SAAQ,IAAI,MAAM,IAAI,GAAG,CAAC;AAC1B,SAAQ,IAAI,IAAI,IAAI,GAAG,CAAC;AACxB;AACA;AACA,SAAQ,OAAO,IAAI,GAAG,EAAE,EAAE;WAChB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC5C,WAAU,IAAI,EAAE;WACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;WAC7B,IAAI,IAAI,CAAC;AACnB,SAAA;AACA;AACA,SAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,KAAK,EAAE,IAAI,MAAM,CAAC,EAAE;AAC1D,WAAU,IAAI,CAAC,GAAG,GAAG,8BAA8B;AACnD,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA,SAAQ,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM;AACpC;AACA;AACA;SACQ,IAAI,GAAG,CAAC;SACR,IAAI,GAAG,CAAC;AAChB;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,KAAK;SAClB,IAAI,KAAK,KAAK,OAAO,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AACjD;AACA,OAAM,KAAK,KAAK;AAChB,SAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;AACzB;AACA,OAAM,KAAK,IAAI;AACf,SAAQ,IAAI,GAAG,KAAK,CAAC,MAAM;SACnB,IAAI,IAAI,EAAE;WACR,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,CAAA;WAC/B,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,CAAA;WAC/B,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC5C;AACA,WAAU,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;AACxD;WACU,IAAI,IAAI,IAAI;WACZ,IAAI,IAAI,IAAI;WACZ,IAAI,IAAI,IAAI;WACZ,GAAG,IAAI,IAAI;AACrB,WAAU,KAAK,CAAC,MAAM,IAAI,IAAI;WACpB;AACV,SAAA;AACA;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;SACjB;AACR,OAAM,KAAK,KAAK;AAChB;AACA,SAAQ,OAAO,IAAI,GAAG,EAAE,EAAE;WAChB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC5C,WAAU,IAAI,EAAE;WACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;WAC7B,IAAI,IAAI,CAAC;AACnB,SAAA;AACA;SACQ,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,eAAe,GAAG;AACnD;SACQ,IAAI,MAAM,CAAC;SACX,IAAI,IAAI,CAAC;AACjB;SACQ,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,eAAe,CAAC;AAClD;SACQ,IAAI,MAAM,CAAC;SACX,IAAI,IAAI,CAAC;AACjB;SACQ,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,eAAe,CAAC;AAClD;SACQ,IAAI,MAAM,CAAC;SACX,IAAI,IAAI,CAAC;AACjB;AACA;AACA,SAAQ,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,EAAE;AAClD,WAAU,IAAI,CAAC,GAAG,GAAG,qCAAqC;AAC1D,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA;AACA;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,CAAC;AACtB,SAAQ,KAAK,CAAC,IAAI,GAAG,OAAO;AAC5B;AACA,OAAM,KAAK,OAAO;SACV,OAAO,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE;AACzC;AACA,WAAU,OAAO,IAAI,GAAG,CAAC,EAAE;aACf,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC9C,aAAY,IAAI,EAAE;aACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;aAC7B,IAAI,IAAI,CAAC;AACrB,WAAA;AACA;AACA,WAAU,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC;AAC1D;WACU,IAAI,MAAM,CAAC;WACX,IAAI,IAAI,CAAC;AACnB;AACA,SAAA;AACA,SAAQ,OAAO,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE;AAChC,WAAU,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;AAC7C,SAAA;AACA;AACA;AACA;AACA;AACA,SAAQ,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM;AACpC,SAAQ,KAAK,CAAC,OAAO,GAAG,CAAC;;SAEjB,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE;SAC9B,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;AACzF,SAAQ,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;;SAEzB,IAAI,GAAG,EAAE;AACjB,WAAU,IAAI,CAAC,GAAG,GAAG,0BAA0B;AAC/C,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,CAAC;AACtB,SAAQ,KAAK,CAAC,IAAI,GAAG,QAAQ;AAC7B;AACA,OAAM,KAAK,QAAQ;AACnB,SAAQ,OAAO,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE;AACtD,WAAU,SAAS;AACnB,aAAY,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACpE,aAAY,SAAS,GAAG,IAAI,KAAK,EAAE;AACnC,aAAY,OAAO,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI;AAC1C,aAAY,QAAQ,GAAG,IAAI,GAAG,MAAM;;AAEpC,aAAY,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,EAAE,MAAM,CAAA;AAC7C;aACY,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC9C,aAAY,IAAI,EAAE;aACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;aAC7B,IAAI,IAAI,CAAC;AACrB;AACA,WAAA;AACA,WAAU,IAAI,QAAQ,GAAG,EAAE,EAAE;AAC7B;aACY,IAAI,MAAM,SAAS;aACnB,IAAI,IAAI,SAAS;AAC7B;aACY,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,QAAQ;AAC/C,WAAA;gBACe;AACf,aAAY,IAAI,QAAQ,KAAK,EAAE,EAAE;AACjC;AACA,eAAc,CAAC,GAAG,SAAS,GAAG,CAAC;AAC/B,eAAc,OAAO,IAAI,GAAG,CAAC,EAAE;iBACf,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAClD,iBAAgB,IAAI,EAAE;iBACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;iBAC7B,IAAI,IAAI,CAAC;AACzB,eAAA;AACA;AACA;eACc,IAAI,MAAM,SAAS;eACnB,IAAI,IAAI,SAAS;AAC/B;AACA,eAAc,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;AACpC,iBAAgB,IAAI,CAAC,GAAG,GAAG,2BAA2B;AACtD,iBAAgB,KAAK,CAAC,IAAI,GAAG,GAAG;iBAChB;AAChB,eAAA;eACc,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;eAChC,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC;AACvC;eACc,IAAI,MAAM,CAAC;eACX,IAAI,IAAI,CAAC;AACvB;AACA,aAAA;AACA,kBAAiB,IAAI,QAAQ,KAAK,EAAE,EAAE;AACtC;AACA,eAAc,CAAC,GAAG,SAAS,GAAG,CAAC;AAC/B,eAAc,OAAO,IAAI,GAAG,CAAC,EAAE;iBACf,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAClD,iBAAgB,IAAI,EAAE;iBACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;iBAC7B,IAAI,IAAI,CAAC;AACzB,eAAA;AACA;AACA;eACc,IAAI,MAAM,SAAS;eACnB,IAAI,IAAI,SAAS;AAC/B;eACc,GAAG,GAAG,CAAC;eACP,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC;AACvC;eACc,IAAI,MAAM,CAAC;eACX,IAAI,IAAI,CAAC;AACvB;AACA,aAAA;kBACiB;AACjB;AACA,eAAc,CAAC,GAAG,SAAS,GAAG,CAAC;AAC/B,eAAc,OAAO,IAAI,GAAG,CAAC,EAAE;iBACf,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAClD,iBAAgB,IAAI,EAAE;iBACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;iBAC7B,IAAI,IAAI,CAAC;AACzB,eAAA;AACA;AACA;eACc,IAAI,MAAM,SAAS;eACnB,IAAI,IAAI,SAAS;AAC/B;eACc,GAAG,GAAG,CAAC;eACP,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC;AACxC;eACc,IAAI,MAAM,CAAC;eACX,IAAI,IAAI,CAAC;AACvB;AACA,aAAA;AACA,aAAY,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE;AAC9D,eAAc,IAAI,CAAC,GAAG,GAAG,2BAA2B;AACpD,eAAc,KAAK,CAAC,IAAI,GAAG,GAAG;eAChB;AACd,aAAA;aACY,OAAO,IAAI,EAAE,EAAE;eACb,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG;AAC5C,aAAA;AACA,WAAA;AACA,SAAA;;AAEA;SACQ,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE,MAAM,CAAA;;AAExC;SACQ,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACnC,WAAU,IAAI,CAAC,GAAG,GAAG,sCAAsC;AAC3D,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;;AAEA;AACA;AACA;AACA,SAAQ,KAAK,CAAC,OAAO,GAAG,CAAC;;SAEjB,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE;SAC9B,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;AAChG;AACA;AACA,SAAQ,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;AACjC;;SAEQ,IAAI,GAAG,EAAE;AACjB,WAAU,IAAI,CAAC,GAAG,GAAG,6BAA6B;AAClD,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;;AAEA,SAAQ,KAAK,CAAC,QAAQ,GAAG,CAAC;AAC1B;AACA;AACA,SAAQ,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO;SAC9B,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE;AACvC,SAAQ,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;AAC5G;AACA;AACA,SAAQ,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI;AAClC;;SAEQ,IAAI,GAAG,EAAE;AACjB,WAAU,IAAI,CAAC,GAAG,GAAG,uBAAuB;AAC5C,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;SACjB,IAAI,KAAK,KAAK,OAAO,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AACjD;AACA,OAAM,KAAK,IAAI;AACf,SAAQ,KAAK,CAAC,IAAI,GAAG,GAAG;AACxB;AACA,OAAM,KAAK,GAAG;SACN,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,EAAE;AACtC;AACA,WAAU,IAAI,CAAC,QAAQ,GAAG,GAAG;AAC7B,WAAU,IAAI,CAAC,SAAS,GAAG,IAAI;AAC/B,WAAU,IAAI,CAAC,OAAO,GAAG,IAAI;AAC7B,WAAU,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC9B,WAAU,KAAK,CAAC,IAAI,GAAG,IAAI;AAC3B,WAAU,KAAK,CAAC,IAAI,GAAG,IAAI;AAC3B;AACA,WAAU,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;AAClC;AACA,WAAU,GAAG,GAAG,IAAI,CAAC,QAAQ;AAC7B,WAAU,MAAM,GAAG,IAAI,CAAC,MAAM;AAC9B,WAAU,IAAI,GAAG,IAAI,CAAC,SAAS;AAC/B,WAAU,IAAI,GAAG,IAAI,CAAC,OAAO;AAC7B,WAAU,KAAK,GAAG,IAAI,CAAC,KAAK;AAC5B,WAAU,IAAI,GAAG,IAAI,CAAC,QAAQ;AAC9B,WAAU,IAAI,GAAG,KAAK,CAAC,IAAI;AAC3B,WAAU,IAAI,GAAG,KAAK,CAAC,IAAI;AAC3B;;AAEA,WAAU,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;AACnC,aAAY,KAAK,CAAC,IAAI,GAAG,EAAE;AAC3B,WAAA;WACU;AACV,SAAA;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,CAAC;AACtB,SAAQ,SAAS;AACjB,WAAU,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AAClE,WAAU,SAAS,GAAG,IAAI,KAAK,EAAE;AACjC,WAAU,OAAO,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI;AACxC,WAAU,QAAQ,GAAG,IAAI,GAAG,MAAM;;AAElC,WAAU,IAAI,SAAS,IAAI,IAAI,EAAE,EAAE,MAAM,CAAA;AACzC;WACU,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC5C,WAAU,IAAI,EAAE;WACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;WAC7B,IAAI,IAAI,CAAC;AACnB;AACA,SAAA;SACQ,IAAI,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,EAAE;WACrC,SAAS,GAAG,SAAS;WACrB,OAAO,GAAG,OAAO;WACjB,QAAQ,GAAG,QAAQ;AAC7B,WAAU,SAAS;AACnB,aAAY,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ;AACzC,sBAAqB,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,kCAAkC,SAAS,CAAC,CAAC;AAC5G,aAAY,SAAS,GAAG,IAAI,KAAK,EAAE;AACnC,aAAY,OAAO,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI;AAC1C,aAAY,QAAQ,GAAG,IAAI,GAAG,MAAM;;aAExB,IAAI,CAAC,SAAS,GAAG,SAAS,KAAK,IAAI,EAAE,EAAE,MAAM,CAAA;AACzD;aACY,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC9C,aAAY,IAAI,EAAE;aACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;aAC7B,IAAI,IAAI,CAAC;AACrB;AACA,WAAA;AACA;WACU,IAAI,MAAM,SAAS;WACnB,IAAI,IAAI,SAAS;AAC3B;AACA,WAAU,KAAK,CAAC,IAAI,IAAI,SAAS;AACjC,SAAA;AACA;SACQ,IAAI,MAAM,SAAS;SACnB,IAAI,IAAI,SAAS;AACzB;AACA,SAAQ,KAAK,CAAC,IAAI,IAAI,SAAS;AAC/B,SAAQ,KAAK,CAAC,MAAM,GAAG,QAAQ;AAC/B,SAAQ,IAAI,OAAO,KAAK,CAAC,EAAE;AAC3B;AACA;AACA;AACA,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA,SAAQ,IAAI,OAAO,GAAG,EAAE,EAAE;AAC1B;AACA,WAAU,KAAK,CAAC,IAAI,GAAG,EAAE;AACzB,WAAU,KAAK,CAAC,IAAI,GAAG,IAAI;WACjB;AACV,SAAA;AACA,SAAQ,IAAI,OAAO,GAAG,EAAE,EAAE;AAC1B,WAAU,IAAI,CAAC,GAAG,GAAG,6BAA6B;AAClD,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA,SAAQ,KAAK,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE;AAClC,SAAQ,KAAK,CAAC,IAAI,GAAG,MAAM;AAC3B;AACA,OAAM,KAAK,MAAM;AACjB,SAAQ,IAAI,KAAK,CAAC,KAAK,EAAE;AACzB;AACA,WAAU,CAAC,GAAG,KAAK,CAAC,KAAK;AACzB,WAAU,OAAO,IAAI,GAAG,CAAC,EAAE;aACf,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC9C,aAAY,IAAI,EAAE;aACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;aAC7B,IAAI,IAAI,CAAC;AACrB,WAAA;AACA;AACA,WAAU,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AACzD;AACA,WAAU,IAAI,MAAM,KAAK,CAAC,KAAK;AAC/B,WAAU,IAAI,IAAI,KAAK,CAAC,KAAK;AAC7B;AACA,WAAU,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK;AACnC,SAAA;AACA;AACA,SAAQ,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM;AAChC,SAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;AACzB;AACA,OAAM,KAAK,IAAI;AACf,SAAQ,SAAS;AACjB,WAAU,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;AACpE,WAAU,SAAS,GAAG,IAAI,KAAK,EAAE;AACjC,WAAU,OAAO,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI;AACxC,WAAU,QAAQ,GAAG,IAAI,GAAG,MAAM;;AAElC,WAAU,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,EAAE,MAAM,CAAA;AAC3C;WACU,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC5C,WAAU,IAAI,EAAE;WACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;WAC7B,IAAI,IAAI,CAAC;AACnB;AACA,SAAA;AACA,SAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,EAAE;WAC1B,SAAS,GAAG,SAAS;WACrB,OAAO,GAAG,OAAO;WACjB,QAAQ,GAAG,QAAQ;AAC7B,WAAU,SAAS;AACnB,aAAY,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ;AAC1C,sBAAqB,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,kCAAkC,SAAS,CAAC,CAAC;AAC5G,aAAY,SAAS,GAAG,IAAI,KAAK,EAAE;AACnC,aAAY,OAAO,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI;AAC1C,aAAY,QAAQ,GAAG,IAAI,GAAG,MAAM;;aAExB,IAAI,CAAC,SAAS,GAAG,SAAS,KAAK,IAAI,EAAE,EAAE,MAAM,CAAA;AACzD;aACY,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC9C,aAAY,IAAI,EAAE;aACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;aAC7B,IAAI,IAAI,CAAC;AACrB;AACA,WAAA;AACA;WACU,IAAI,MAAM,SAAS;WACnB,IAAI,IAAI,SAAS;AAC3B;AACA,WAAU,KAAK,CAAC,IAAI,IAAI,SAAS;AACjC,SAAA;AACA;SACQ,IAAI,MAAM,SAAS;SACnB,IAAI,IAAI,SAAS;AACzB;AACA,SAAQ,KAAK,CAAC,IAAI,IAAI,SAAS;AAC/B,SAAQ,IAAI,OAAO,GAAG,EAAE,EAAE;AAC1B,WAAU,IAAI,CAAC,GAAG,GAAG,uBAAuB;AAC5C,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA,SAAQ,KAAK,CAAC,MAAM,GAAG,QAAQ;AAC/B,SAAQ,KAAK,CAAC,KAAK,GAAG,CAAC,OAAO,IAAI,EAAE;AACpC,SAAQ,KAAK,CAAC,IAAI,GAAG,OAAO;AAC5B;AACA,OAAM,KAAK,OAAO;AAClB,SAAQ,IAAI,KAAK,CAAC,KAAK,EAAE;AACzB;AACA,WAAU,CAAC,GAAG,KAAK,CAAC,KAAK;AACzB,WAAU,OAAO,IAAI,GAAG,CAAC,EAAE;aACf,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC9C,aAAY,IAAI,EAAE;aACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;aAC7B,IAAI,IAAI,CAAC;AACrB,WAAA;AACA;AACA,WAAU,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AACzD;AACA,WAAU,IAAI,MAAM,KAAK,CAAC,KAAK;AAC/B,WAAU,IAAI,IAAI,KAAK,CAAC,KAAK;AAC7B;AACA,WAAU,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK;AACnC,SAAA;AACA;SACQ,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE;AACvC,WAAU,IAAI,CAAC,GAAG,GAAG,+BAA+B;AACpD,WAAU,KAAK,CAAC,IAAI,GAAG,GAAG;WAChB;AACV,SAAA;AACA;AACA;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,KAAK;AAC1B;AACA,OAAM,KAAK,KAAK;SACR,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC1C,SAAQ,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1B,SAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,EAAE;AACjC,WAAU,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI;AACpC,WAAU,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE;AAClC,aAAY,IAAI,KAAK,CAAC,IAAI,EAAE;AAC5B,eAAc,IAAI,CAAC,GAAG,GAAG,+BAA+B;AACxD,eAAc,KAAK,CAAC,IAAI,GAAG,GAAG;eAChB;AACd,aAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAA;AACA,WAAU,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE;AAClC,aAAY,IAAI,IAAI,KAAK,CAAC,KAAK;AAC/B,aAAY,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI;AACrC,WAAA;gBACe;AACf,aAAY,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI;AACrC,WAAA;AACA,WAAU,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;AACzD,WAAU,WAAW,GAAG,KAAK,CAAC,MAAM;AACpC,SAAA;cACa;WACH,WAAW,GAAG,MAAM;AAC9B,WAAU,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM;AACnC,WAAU,IAAI,GAAG,KAAK,CAAC,MAAM;AAC7B,SAAA;SACQ,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,CAAA;SAC/B,IAAI,IAAI,IAAI;AACpB,SAAQ,KAAK,CAAC,MAAM,IAAI,IAAI;AAC5B,SAAQ,GAAG;WACD,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;SAC7C,CAAS,QAAQ,EAAE,IAAI;AACvB,SAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAA;SAC3C;AACR,OAAM,KAAK,GAAG;SACN,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;SAClC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM;AACpC,SAAQ,IAAI,EAAE;AACd,SAAQ,KAAK,CAAC,IAAI,GAAG,GAAG;SAChB;AACR,OAAM,KAAK,KAAK;AAChB,SAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;AACxB;AACA,WAAU,OAAO,IAAI,GAAG,EAAE,EAAE;aAChB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC9C,aAAY,IAAI,EAAE;AAClB;aACY,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;aAC7B,IAAI,IAAI,CAAC;AACrB,WAAA;AACA;WACU,IAAI,IAAI,IAAI;AACtB,WAAU,IAAI,CAAC,SAAS,IAAI,IAAI;AAChC,WAAU,KAAK,CAAC,KAAK,IAAI,IAAI;WACnB,IAAI,IAAI,EAAE;AACpB,aAAY,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;AACpC;AACA,kBAAiB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;;AAE7H,WAAA;WACU,IAAI,GAAG,IAAI;AACrB;AACA,WAAU,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE;AACpE,aAAY,IAAI,CAAC,GAAG,GAAG,sBAAsB;AAC7C,aAAY,KAAK,CAAC,IAAI,GAAG,GAAG;aAChB;AACZ,WAAA;AACA;WACU,IAAI,GAAG,CAAC;WACR,IAAI,GAAG,CAAC;AAClB;AACA;AACA,SAAA;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,MAAM;AAC3B;AACA,OAAM,KAAK,MAAM;SACT,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;AACvC;AACA,WAAU,OAAO,IAAI,GAAG,EAAE,EAAE;aAChB,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,SAAS,CAAC,CAAA;AAC9C,aAAY,IAAI,EAAE;aACN,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;aAC7B,IAAI,IAAI,CAAC;AACrB,WAAA;AACA;WACU,IAAI,IAAI,MAAM,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE;AACnD,aAAY,IAAI,CAAC,GAAG,GAAG,wBAAwB;AAC/C,aAAY,KAAK,CAAC,IAAI,GAAG,GAAG;aAChB;AACZ,WAAA;AACA;WACU,IAAI,GAAG,CAAC;WACR,IAAI,GAAG,CAAC;AAClB;AACA;AACA,SAAA;AACA,SAAQ,KAAK,CAAC,IAAI,GAAG,IAAI;AACzB;AACA,OAAM,KAAK,IAAI;SACP,GAAG,GAAG,YAAY;AAC1B,SAAQ,MAAM,SAAS;AACvB,OAAM,KAAK,GAAG;SACN,GAAG,GAAG,YAAY;AAC1B,SAAQ,MAAM,SAAS;AACvB,OAAM,KAAK,GAAG;AACd,SAAQ,OAAO,WAAW;AAC1B,OAAM,KAAK,IAAI;AACf;OACM;AACN,SAAQ,OAAO,cAAc;AAC7B;AACA,GAAA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE,IAAI,CAAC,QAAQ,GAAG,GAAG;AACrB,GAAE,IAAI,CAAC,SAAS,GAAG,IAAI;AACvB,GAAE,IAAI,CAAC,OAAO,GAAG,IAAI;AACrB,GAAE,IAAI,CAAC,QAAQ,GAAG,IAAI;AACtB,GAAE,KAAK,CAAC,IAAI,GAAG,IAAI;AACnB,GAAE,KAAK,CAAC,IAAI,GAAG,IAAI;AACnB;;AAEA,GAAE,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG;wBAC1C,KAAK,CAAC,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC,CAAC,EAAE;AACnE,KAAI,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE;AAI/E,GAAA;AACA,GAAE,GAAG,IAAI,IAAI,CAAC,QAAQ;AACtB,GAAE,IAAI,IAAI,IAAI,CAAC,SAAS;AACxB,GAAE,IAAI,CAAC,QAAQ,IAAI,GAAG;AACtB,GAAE,IAAI,CAAC,SAAS,IAAI,IAAI;AACxB,GAAE,KAAK,CAAC,KAAK,IAAI,IAAI;AACrB,GAAE,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE;AAC1B,KAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;AAC5B,QAAO,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AACvI,GAAA;AACA,GAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;sBAChC,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;AACnD,sBAAqB,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;AAC3E,GAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,QAAQ,KAAK,GAAG,KAAK,IAAI,EAAE;KACrE,GAAG,GAAG,WAAW;AACrB,GAAA;AACA,GAAE,OAAO,GAAG;AACZ,CAAA;;CAEA,SAAS,UAAU,CAAC,IAAI,EAAE;;GAExB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,qCAAqC;AAC/D,KAAI,OAAO,cAAc;AACzB,GAAA;;AAEA,GAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,GAAE,IAAI,KAAK,CAAC,MAAM,EAAE;AACpB,KAAI,KAAK,CAAC,MAAM,GAAG,IAAI;AACvB,GAAA;AACA,GAAE,IAAI,CAAC,KAAK,GAAG,IAAI;AACnB,GAAE,OAAO,IAAI;AACb,CAAA;;AAEA,CAAA,SAAS,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE;AACtC,GAAE,IAAI,KAAK;;AAEX;AACA,GAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,cAAc,CAAC,CAAA;AACpD,GAAE,KAAK,GAAG,IAAI,CAAC,KAAK;AACpB,GAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,cAAc,CAAC,CAAA;;AAEtD;AACA,GAAE,KAAK,CAAC,IAAI,GAAG,IAAI;AACnB,GAAE,IAAI,CAAC,IAAI,GAAG,KAAK;AACnB,GAAE,OAAO,IAAI;AACb,CAAA;;AAEA,CAAA,SAAS,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE;AAChD,GAAE,IAAI,UAAU,GAAG,UAAU,CAAC,MAAM;;AAEpC,GAAE,IAAI,KAAK;AACX,GAAE,IAAI,MAAM;AACZ,GAAE,IAAI,GAAG;;AAET;AACA,GAAE,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,kBAAkB,EAAE,OAAO,cAAc,CAAC,CAAA;AACpF,GAAE,KAAK,GAAG,IAAI,CAAC,KAAK;;AAEpB,GAAE,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;AAC/C,KAAI,OAAO,cAAc;AACzB,GAAA;;AAEA;AACA,GAAE,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;KACvB,MAAM,GAAG,CAAC,CAAC;AACf;KACI,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;AACvD,KAAI,IAAI,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE;AAChC,OAAM,OAAO,YAAY;AACzB,KAAA;AACA,GAAA;AACA;AACA;GACE,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;GAC5D,IAAI,GAAG,EAAE;AACX,KAAI,KAAK,CAAC,IAAI,GAAG,GAAG;AACpB,KAAI,OAAO,WAAW;AACtB,GAAA;AACA,GAAE,KAAK,CAAC,QAAQ,GAAG,CAAC;AACpB;AACA,GAAE,OAAO,IAAI;AACb,CAAA;;AAEA,CAAAC,OAAA,CAAA,YAAoB,GAAG,YAAY;AACnC,CAAAA,OAAA,CAAA,aAAqB,GAAG,aAAa;AACrC,CAAAA,OAAA,CAAA,gBAAwB,GAAG,gBAAgB;AAC3C,CAAAA,OAAA,CAAA,WAAmB,GAAG,WAAW;AACjC,CAAAA,OAAA,CAAA,YAAoB,GAAG,YAAY;AACnC,CAAAA,OAAA,CAAA,OAAe,GAAGD,SAAO;AACzB,CAAAC,OAAA,CAAA,UAAkB,GAAG,UAAU;AAC/B,CAAAA,OAAA,CAAA,gBAAwB,GAAG,gBAAgB;AAC3C,CAAAA,OAAA,CAAA,oBAA4B,GAAG,oBAAoB;AACnD,CAAAA,OAAA,CAAA,WAAmB,GAAG,oCAAoC;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjhDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAA,SAAc,GAAG;;AAEjB;GACE,UAAU,UAAU,CAAC;GACrB,eAAe,KAAK,CAAC;GACrB,YAAY,QAAQ,CAAC;GACrB,YAAY,QAAQ,CAAC;GACrB,QAAQ,YAAY,CAAC;GACrB,OAAO,aAAa,CAAC;GACrB,OAAO,aAAa,CAAC;;AAEvB;AACA;AACA;GACE,IAAI,gBAAgB,CAAC;GACrB,YAAY,QAAQ,CAAC;GACrB,WAAW,SAAS,CAAC;GACrB,OAAO,YAAY,EAAE;GACrB,cAAc,KAAK,EAAE;GACrB,YAAY,OAAO,EAAE;AACvB;GACE,WAAW,QAAQ,EAAE;AACvB;;AAEA;GACE,gBAAgB,UAAU,CAAC;GAC3B,YAAY,cAAc,CAAC;GAC3B,kBAAkB,QAAQ,CAAC;GAC3B,qBAAqB,IAAI,EAAE;;;GAG3B,UAAU,gBAAgB,CAAC;GAC3B,cAAc,YAAY,CAAC;GAC3B,KAAK,qBAAqB,CAAC;GAC3B,OAAO,mBAAmB,CAAC;GAC3B,kBAAkB,QAAQ,CAAC;;AAE7B;GACE,QAAQ,kBAAkB,CAAC;GAC3B,MAAM,oBAAoB,CAAC;AAC7B;GACE,SAAS,iBAAiB,CAAC;;AAE7B;AACA,GAAE,UAAU,gBAAgB;AAC5B;EACC;;;;;;;;;;;ACjED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAA,SAAS,QAAQ,GAAG;AACpB;AACA,GAAE,IAAI,CAAC,IAAI,SAAS,CAAC;AACrB;AACA,GAAE,IAAI,CAAC,IAAI,SAAS,CAAC;AACrB;AACA,GAAE,IAAI,CAAC,MAAM,OAAO,CAAC;AACrB;AACA,GAAE,IAAI,CAAC,EAAE,WAAW,CAAC;AACrB;AACA,GAAE,IAAI,CAAC,KAAK,QAAQ,IAAI;AACxB;AACA,GAAE,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE,IAAI,CAAC,IAAI,SAAS,EAAE;AACtB;AACA;AACA;AACA,GAAE,IAAI,CAAC,OAAO,MAAM,EAAE;AACtB;AACA;AACA;AACA,GAAE,IAAI,CAAC,IAAI,SAAS,CAAC;AACrB;AACA,GAAE,IAAI,CAAC,IAAI,SAAS,KAAK;AACzB,CAAA;;AAEA,CAAA,QAAc,GAAG,QAAQ;;;;;;;;;;;CCtDzB,IAAI,YAAY,GAAG5B,gBAAA,EAAyB;CAC5C,IAAI,KAAK,UAAUC,aAAA,EAAyB;CAC5C,IAAI,OAAO,QAAQC,cAAA,EAA0B;CAC7C,IAAI,CAAC,cAAcC,gBAAA,EAA2B;CAC9C,IAAI,GAAG,YAAYC,eAAA,EAA0B;CAC7C,IAAI,OAAO,QAAQC,cAAA,EAAyB;CAC5C,IAAI,QAAQ,OAAOa,eAAA,EAA0B;;AAE7C,CAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,OAAO,CAAC,OAAO,EAAE;AAC1B,GAAE,IAAI,EAAE,IAAI,YAAY,OAAO,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;;AAE7D,GAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;KAC1B,SAAS,EAAE,KAAK;KAChB,UAAU,EAAE,CAAC;AACjB,KAAI,EAAE,EAAE;AACR,IAAG,EAAE,OAAO,IAAI,EAAE,CAAC;;AAEnB,GAAE,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO;;AAExB;AACA;AACA,GAAE,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;AACjE,KAAI,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,UAAU;AACpC,KAAI,IAAI,GAAG,CAAC,UAAU,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,CAAA;AACrD,GAAA;;AAEA;AACA,GAAE,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,MAAM,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;AACpD,OAAM,EAAE,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;AACxC,KAAI,GAAG,CAAC,UAAU,IAAI,EAAE;AACxB,GAAA;;AAEA;AACA;AACA,GAAE,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,MAAM,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;AACtD;AACA;KACI,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,MAAM,CAAC,EAAE;AACrC,OAAM,GAAG,CAAC,UAAU,IAAI,EAAE;AAC1B,KAAA;AACA,GAAA;;AAEA,GAAE,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAClB,GAAE,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;AACnB,GAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;AACtB,GAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;;AAEnB,GAAE,IAAI,CAAC,IAAI,KAAK,IAAI,OAAO,EAAE;AAC7B,GAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC;;AAEzB,GAAE,IAAI,MAAM,IAAI,YAAY,CAAC,YAAY;KACrC,IAAI,CAAC,IAAI;AACb,KAAI,GAAG,CAAC;IACL;;AAEH,GAAE,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE;KACrB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAChC,GAAA;;AAEA,GAAE,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,EAAE;;GAE5B,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;;AAEvD;AACA,GAAE,IAAI,GAAG,CAAC,UAAU,EAAE;AACtB;AACA,KAAI,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE;OACtC,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AACzD,KAAA,CAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,sBAAsB,EAAE;OACnE,GAAG,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AACrD,KAAA;AACA,KAAI,IAAI,GAAG,CAAC,GAAG,EAAE;AACjB,OAAM,MAAM,GAAG,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC;AAC3E,OAAM,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE;SACrB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpC,OAAA;AACA,KAAA;AACA,GAAA;AACA,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE;AAC/C,GAAE,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,GAAE,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;AACxC,GAAE,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;GACxC,IAAI,MAAM,EAAE,KAAK;AACnB,GAAE,IAAI,aAAa,EAAE,IAAI,EAAE,OAAO;;AAElC;AACA;GACE,IAAI,aAAa,GAAG,KAAK;;GAEzB,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,CAAC,CAAA;GAC/B,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC;;AAElF;AACA,GAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC;KACI,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;GAC5C,CAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,sBAAsB,EAAE;KACzD,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;AACrC,GAAA,CAAG,MAAM;AACT,KAAI,IAAI,CAAC,KAAK,GAAG,IAAI;AACrB,GAAA;;AAEA,GAAE,IAAI,CAAC,OAAO,GAAG,CAAC;GAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;;AAEnC,GAAE,GAAG;AACL,KAAI,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;OACxB,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7C,OAAM,IAAI,CAAC,QAAQ,GAAG,CAAC;AACvB,OAAM,IAAI,CAAC,SAAS,GAAG,SAAS;AAChC,KAAA;;AAEA,KAAI,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;;KAElD,IAAI,MAAM,KAAK,CAAC,CAAC,WAAW,IAAI,UAAU,EAAE;OAC1C,MAAM,GAAG,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;AACvE,KAAA;;KAEI,IAAI,MAAM,KAAK,CAAC,CAAC,WAAW,IAAI,aAAa,KAAK,IAAI,EAAE;AAC5D,OAAM,MAAM,GAAG,CAAC,CAAC,IAAI;OACf,aAAa,GAAG,KAAK;AAC3B,KAAA;;AAEA,KAAI,IAAI,MAAM,KAAK,CAAC,CAAC,YAAY,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE;AACxD,OAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACxB,OAAM,IAAI,CAAC,KAAK,GAAG,IAAI;AACvB,OAAM,OAAO,KAAK;AAClB,KAAA;;AAEA,KAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,OAAM,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,QAAQ,IAAI,KAAK,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE;;SAEpI,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE;;AAE1C,WAAU,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;;AAExE,WAAU,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,aAAa;WACpC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;;AAElE;AACA,WAAU,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC9B,WAAU,IAAI,CAAC,SAAS,GAAG,SAAS,GAAG,IAAI;WACjC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;;AAEvF,WAAU,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;;AAE9B,SAAA,CAAS,MAAM;AACf,WAAU,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClE,SAAA;AACA,OAAA;AACA,KAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;OAC/C,aAAa,GAAG,IAAI;AAC1B,KAAA;;AAEA,GAAA,CAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,CAAC,YAAY;;AAEnF,GAAE,IAAI,MAAM,KAAK,CAAC,CAAC,YAAY,EAAE;AACjC,KAAI,KAAK,GAAG,CAAC,CAAC,QAAQ;AACtB,GAAA;;AAEA;AACA,GAAE,IAAI,KAAK,KAAK,CAAC,CAAC,QAAQ,EAAE;KACxB,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/C,KAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACtB,KAAI,IAAI,CAAC,KAAK,GAAG,IAAI;AACrB,KAAI,OAAO,MAAM,KAAK,CAAC,CAAC,IAAI;AAC5B,GAAA;;AAEA;AACA,GAAE,IAAI,KAAK,KAAK,CAAC,CAAC,YAAY,EAAE;AAChC,KAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACtB,KAAI,IAAI,CAAC,SAAS,GAAG,CAAC;AACtB,KAAI,OAAO,IAAI;AACf,GAAA;;AAEA,GAAE,OAAO,IAAI;CACb,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE;AAC5C,GAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;CACzB,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,MAAM,EAAE;AAC5C;AACA,GAAE,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE;KACrB,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE;AACtC;AACA;OACM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACxC,KAAA,CAAK,MAAM;OACL,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;AACpD,KAAA;AACA,GAAA;AACA,GAAE,IAAI,CAAC,MAAM,GAAG,EAAE;AAClB,GAAE,IAAI,CAAC,GAAG,GAAG,MAAM;GACjB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG;CAC1B,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;AACjC,GAAE,IAAI,QAAQ,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;;AAErC,GAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;;AAE5B;AACA,GAAE,IAAI,QAAQ,CAAC,GAAG,EAAE,EAAE,MAAM,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;;GAE5D,OAAO,QAAQ,CAAC,MAAM;AACxB,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE;AACpC,GAAE,OAAO,GAAG,OAAO,IAAI,EAAE;AACzB,GAAE,OAAO,CAAC,GAAG,GAAG,IAAI;AACpB,GAAE,OAAO,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AAChC,CAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,CAAAU,SAAA,CAAA,OAAe,GAAG,OAAO;AACzB,CAAAA,SAAA,CAAA,OAAe,GAAG,OAAO;AACzB,CAAAA,SAAA,CAAA,UAAkB,GAAG,UAAU;AAC/B,CAAAA,SAAA,CAAA,MAAc,IAAI,OAAO;;;;;;;;;;;ACnazB,CAAA,IAAI,MAAM,MAAM5B,aAAA,EAA6B,CAAC,MAAM;;CAEpD,IAAI,OAAO,KAAKC,cAAA,EAAwB;CACxC,IAAI,OAAO,KAAKC,cAAA,EAAwB;CACxC,IAAI,SAAS,GAAGC,gBAAA,EAA+B;;CAE/C,IAAI,IAAI,GAAG,EAAE;;CAEb,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;;AAEzC,CAAA,MAAc,GAAG,IAAI;;;;;;;;;;ACTpB,CAAC,UAAU;AACZ,GAAC,IAAI,IAAI,GAAG,EAAE,CAAC;AACf;AACA;GACgC,CAAC,MAAA,CAAA,OAAA,GAAiB,IAAI,CAAC,CAC9B;AACzB;AACA,GAAC,IAAI,IAAI,GAAG,CAAC,OAAO0B,eAAO,KAAK,UAAU,IAAI7B,WAAA,EAAe,GAAG,IAAI,CAAC,IAAI,CAAC;AAC1E;AACA,GAAC,SAAS,GAAG,GAAG,EAAE,IAAI,OAAO,OAAO,EAAE,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAA,CAAG;AACnI;AACA,GAAC,CAAC,SAAS,IAAI,EAAE,IAAI,CAAC;AACtB;AACA;AACA,GAAC,CAAC,UAAU,CAAc,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;GACtoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,cAAc,CAAC,mDAAmD,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;GAC3rB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,cAAc,CAAC,qDAAqD,CAAC,oDAAoD,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,cAAc,CAAC,mDAAmD,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,OAAO,CAAC,EAAE,KAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrnB,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,SAAS,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAC,CAAC,KAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAC,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpxB,GAAC,CAAC,CAAC,EAAC,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAC,CAAC,KAAK,CAAC,CAAC,GAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,CAAC,KAAI,CAAC,CAAC,CAAC,EAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,CAAC,KAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChe,GAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAqC,CAAC,CAAC,CAAC,CAAC,OAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,sCAAsC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAChuB,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAG,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,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AC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CA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AC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACliD,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,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AAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;GAC9G,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;GACzG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/G,GAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3G,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;GAC1G,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;GACtH,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1I,GAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;GACtG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnI,GAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvG,QAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;AAC9G,GAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;AACxB;AACA;AACA,GAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;GACtG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtI,GAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAK,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAK,qCAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;GAC5R,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrI,GAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzH,GAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAK,cAAc,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7P,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/H,GAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAC9G,GAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3G,GAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAG,CAAC,CAAC,CAAC,CAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACpH,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzG,GAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC/M,GAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;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CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;GAC7H,CAAC,EAAE,EAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;GACtH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAA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AAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;AAC/E,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;AAC7E,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG;AACjF,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;AACjF,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;AACjF,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;AAC/E,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;AAC7E,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC/E,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;AACjF,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;AAChF,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;AAC/E,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG;AAChF,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;AACjF,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;AACvB,CAAC;AACM,MAAM,QAAQ,GAAG;AACxB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAChF,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9E,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9E,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9E,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9E,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9E,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9E,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9E,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9E,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9E,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9E,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9E,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9E,IAAI,EAA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AAI,mBAAmB,CAAC,kBAAkB,EAAE,CAAC,kBAAkB;AAC5E,IAAI;AACJ,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACvE;AACA;AACA,SAAS,qCAAqC,CAAC,kBAAkB,EAAE,mBAAmB,GAAG,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE;AAClH,EAAE,QAAQ,mBAAmB;AAC7B,IAAI,KAAK,UAAU;AACnB,MAAM,OAAO,IAAI,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;AACrD,IAAI,KAAK,UAAU;AACnB,MAAM,OAAO,IAAI,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;AACrD,IAAI,KAAK,SAAS;AAClB,MAAM,OAAO,IAAI,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC;AACpD,IAAI,KAAK,gBAAgB;AACzB,MAAM,OAAO,IAAI,aAAa,CAAC,kBAAkB,EAAE,MAAM,CAAC;AAC1D,IAAI;AACJ,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,4BAA4B,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAC3E;AACA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,141]}