webwallgl 1.0.0-beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.en.md +173 -0
- package/README.md +173 -0
- package/imgs/alipay.png +0 -0
- package/imgs/wechat.png +0 -0
- package/package.json +42 -0
- package/types.d.ts +170 -0
- package/webwallgl.d.ts +42 -0
- package/webwallgl.global.js +13704 -0
- package/webwallgl.global.js.map +1 -0
- package/webwallgl.global.min.js +500 -0
- package/webwallgl.global.min.js.map +1 -0
- package/webwallgl.min.mjs +500 -0
- package/webwallgl.min.mjs.map +1 -0
- package/webwallgl.mjs +13700 -0
- package/webwallgl.mjs.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["webwallgl.mjs"],"sourcesContent":["function effectiveDpr(rt, cfg) {\n const cap = cfg?.renderDpr ?? rt.cfg?.renderDpr ?? 1;\n return Math.min(window.devicePixelRatio || 1, cap);\n}\nfunction normalizeFit(fit) {\n if (fit === \"fit\") return \"contain\";\n if (fit === \"fill\") return \"cover\";\n return fit === \"contain\" || fit === \"stretch\" ? fit : \"cover\";\n}\nfunction fitObjectFit(fit) {\n const f = normalizeFit(fit);\n if (f === \"contain\") return { objectFit: \"contain\", background: \"rgba(10,12,16,0.85)\" };\n if (f === \"stretch\") return { objectFit: \"fill\", background: \"transparent\" };\n return { objectFit: \"cover\", background: \"transparent\" };\n}\nfunction createRuntime(opts) {\n const rt = {\n cfg: { type: \"canvas\" },\n coverAlign: { x: 0.5, y: 0.5, tx: 0.5, ty: 0.5 },\n frameMeter: { stamps: [], last: 0, fps: 0 },\n disposers: []\n };\n return rt;\n}\n(() => {\n const block = (e) => e.preventDefault();\n window.addEventListener(\"contextmenu\", block, true);\n document.addEventListener(\"contextmenu\", block, true);\n window.__blockContextMenu = (doc) => doc.addEventListener(\"contextmenu\", block, true);\n})();\nfunction clear(rt) {\n if (rt.wrap) rt.wrap.innerHTML = \"\";\n if (rt.raf !== void 0) cancelAnimationFrame(rt.raf);\n rt.raf = void 0;\n for (const p of rt.videoPairs ?? []) p.destroy();\n rt.videoPairs = void 0;\n if (rt.sceneCleanup) rt.sceneCleanup();\n rt.sceneCleanup = void 0;\n rt.sceneCtl = void 0;\n if (rt.renderer) {\n rt.renderer.dispose?.();\n rt.renderer = void 0;\n }\n for (const v of rt.videoTextures ?? []) {\n v.pause();\n v.removeAttribute(\"src\");\n v.load();\n v.remove();\n }\n rt.videoTextures = void 0;\n for (const u of rt.objectUrls ?? []) {\n try {\n URL.revokeObjectURL(u);\n } catch {\n }\n }\n rt.objectUrls = void 0;\n if (rt.sceneAudio) {\n for (const au of rt.sceneAudio.audios) {\n au.pause();\n au.removeAttribute(\"src\");\n au.load();\n }\n rt.sceneAudio = void 0;\n }\n if (rt.video) {\n rt.video.pause();\n rt.video.removeAttribute(\"src\");\n try {\n rt.video.load();\n } catch {\n }\n rt.video.remove();\n }\n rt.video = void 0;\n rt.img = void 0;\n rt.iframe = void 0;\n rt.canvas = void 0;\n rt.ctx = void 0;\n rt.info = void 0;\n resetFrameMeter(rt);\n}\nfunction destroyRuntime(rt) {\n clear(rt);\n for (const off of rt.disposers.splice(0)) {\n try {\n off();\n } catch {\n }\n }\n rt.wrap?.remove();\n rt.wrap = void 0;\n}\nconst utf8 = new TextDecoder();\nconst readText = (bytes) => utf8.decode(bytes).replace(/^\\uFEFF/, \"\");\nconst FPS_WINDOW_MS = 500;\nfunction markFrame(rt, now) {\n const s = rt.frameMeter.stamps;\n s.push(now);\n rt.frameMeter.last = now;\n const cut = now - FPS_WINDOW_MS;\n while (s.length && s[0] < cut) s.shift();\n const span = s.length >= 2 ? s[s.length - 1] - s[0] : 0;\n rt.frameMeter.fps = span > 0 ? (s.length - 1) * 1e3 / span : 0;\n}\nfunction resetFrameMeter(rt) {\n rt.frameMeter.stamps.length = 0;\n rt.frameMeter.last = 0;\n rt.frameMeter.fps = 0;\n}\nfunction frameStats(rt) {\n if (!rt.frameMeter.last || rt.paused) return { fps: 0, running: false };\n const idle = performance.now() - rt.frameMeter.last;\n if (idle > Math.max(FPS_WINDOW_MS, 400)) return { fps: 0, running: false };\n return { fps: rt.frameMeter.fps, running: true };\n}\nfunction reportDiag(rt, cfg, msg) {\n try {\n rt.onDiagnostic?.(msg, /fail|error|失败|ERROR/.test(msg) ? \"error\" : \"info\");\n } catch {\n }\n try {\n const origin = cfg.mediaBase ? new URL(cfg.mediaBase).origin : \"\";\n if (origin) {\n const img = new Image();\n img.src = `${origin}/diag?msg=${encodeURIComponent(`scene ${cfg.src ?? \"?\"}: ${msg.slice(0, 500)}`)}`;\n }\n } catch {\n }\n}\nfunction resetCoverAlign(rt) {\n rt.coverAlign.x = rt.coverAlign.y = rt.coverAlign.tx = rt.coverAlign.ty = 0.5;\n applyCoverAlignToDom(rt);\n}\nfunction applyCoverAlignToDom(rt) {\n const pos = `${(rt.coverAlign.x * 100).toFixed(2)}% ${(rt.coverAlign.y * 100).toFixed(2)}%`;\n const obj = rt.video ?? rt.img;\n if (obj && obj.isConnected) obj.style.objectPosition = pos;\n}\nfunction syncCanvasSize(rt, canvas, cfg) {\n const dpr = effectiveDpr(rt, cfg);\n const w = Math.max(1, Math.round((canvas.clientWidth || window.innerWidth || 1) * dpr));\n const h = Math.max(1, Math.round((canvas.clientHeight || window.innerHeight || 1) * dpr));\n if (canvas.width === w && canvas.height === h) return false;\n canvas.width = w;\n canvas.height = h;\n return true;\n}\nfunction parsePkg(buf) {\n const dv = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n if (buf.length < 16) throw new Error(\"文件太小,不是 scene.pkg\");\n const magicLen = dv.getUint32(0, true);\n if (magicLen < 4 || magicLen > 16) throw new Error(\"魔数长度异常: \" + magicLen);\n const magic = ascii(buf, 4, magicLen);\n if (!magic.startsWith(\"PKGV\")) throw new Error(\"不是 scene.pkg,魔数: \" + magic);\n const count = dv.getUint32(4 + magicLen, true);\n let p = 4 + magicLen + 4;\n const entries = [];\n for (let i = 0; i < count; i++) {\n if (p + 8 > buf.length) throw new Error(\"入口表越界 @\" + i);\n const nameLen = dv.getUint32(p, true);\n p += 4;\n if (p + nameLen + 8 > buf.length) throw new Error(\"入口 \" + i + \" 越界\");\n const name = decodeName(buf, p, nameLen);\n p += nameLen;\n const offset = dv.getUint32(p, true);\n p += 4;\n const size = dv.getUint32(p, true);\n p += 4;\n entries.push({ name, offset, size });\n }\n const dataStart = p;\n return {\n magic,\n version: magic.slice(4),\n count,\n entries,\n dataStart,\n fileSize: buf.length,\n buf\n };\n}\nfunction getEntry(pkg2, name) {\n const e = pkg2.entries.find((x) => x.name === name);\n if (e === void 0) return null;\n const start = pkg2.dataStart + e.offset;\n const end = start + e.size;\n if (start < 0 || end > pkg2.fileSize) throw new Error(\"入口 \" + name + \" 越界\");\n return pkg2.buf.subarray(start, end);\n}\nfunction verifyLayout(pkg2) {\n let end = 0;\n for (const e of pkg2.entries) end = Math.max(end, e.offset + e.size);\n return { dataEnd: pkg2.dataStart + end, fileSize: pkg2.fileSize, ok: pkg2.dataStart + end <= pkg2.fileSize };\n}\nfunction ascii(buf, start, len) {\n let s = \"\";\n for (let i = start; i < start + len; i++) s += String.fromCharCode(buf[i]);\n return s;\n}\nfunction decodeName(buf, start, len) {\n try {\n return new TextDecoder(\"utf-8\", { fatal: true }).decode(buf.subarray(start, start + len));\n } catch (e) {\n return ascii(buf, start, len);\n }\n}\nconst pkgMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n getEntry,\n parsePkg,\n verifyLayout\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst TEXTURE_FORMATS = {\n 0: \"ARGB8888\",\n 1: \"RGB888\",\n 2: \"RGB565\",\n 4: \"DXT5\",\n 6: \"DXT3\",\n 7: \"DXT1\",\n 8: \"RG88\",\n 9: \"R8\",\n 10: \"RG1616f\",\n 11: \"R16f\",\n 12: \"BC7\",\n 13: \"RGBa1010102\",\n 14: \"RGBA16161616f\",\n 15: \"RGB161616f\"\n};\nconst FIF = { UNKNOWN: -1, JPEG: 2, PNG: 13, GIF: 25, WEBP: 35, MP4: 35 };\nfunction decodeMip0(tex2) {\n const image = tex2.images[0];\n if (!image || image.length === 0) throw new Error(\"无图像数据\");\n const m = image[0];\n if (tex2.isVideo) return { width: m.width, height: m.height, video: m.data };\n if (tex2.freeImageFormat === FIF.PNG) return { width: m.width, height: m.height, png: m.data };\n if (tex2.freeImageFormat !== FIF.UNKNOWN) {\n return { width: m.width, height: m.height, image: m.data, fif: tex2.freeImageFormat };\n }\n const rgba = decodePixels(tex2.format, m.data, m.width, m.height);\n if (!tex2.frames?.list?.length && (m.width !== tex2.width || m.height !== tex2.height)) {\n return { width: tex2.width, height: tex2.height, rgba: cropRgba(rgba, m.width, m.height, tex2.width, tex2.height) };\n }\n return { width: m.width, height: m.height, rgba };\n}\nfunction decodeMips(tex2) {\n const image = tex2.images[0];\n if (!image || image.length === 0) throw new Error(\"无图像数据\");\n const out = [];\n for (const m of image) {\n if (tex2.freeImageFormat !== FIF.UNKNOWN) {\n out.push({ width: m.width, height: m.height, image: m.data, fif: tex2.freeImageFormat });\n continue;\n }\n const rgba = decodePixels(tex2.format, m.data, m.width, m.height);\n out.push({ width: m.width, height: m.height, rgba });\n }\n if (!tex2.frames?.list?.length && out.length > 0 && (out[0].width !== tex2.width || out[0].height !== tex2.height) && out[0].rgba) {\n out[0] = { width: tex2.width, height: tex2.height, rgba: cropRgba(out[0].rgba, out[0].width, out[0].height, tex2.width, tex2.height) };\n }\n return out;\n}\nfunction cropRgba(rgba, sw, sh, w, h) {\n const out = new Uint8Array(w * h * 4);\n for (let y = 0; y < h; y++) {\n out.set(rgba.subarray(y * sw * 4, y * sw * 4 + w * 4), y * w * 4);\n }\n return out;\n}\nfunction decodePixels(format, data, w, h) {\n switch (format) {\n case 0:\n return fromARGB8888(data, w, h);\n case 1:\n return fromRGB888(data, w, h);\n case 2:\n return fromRGB565(data, w, h);\n case 4:\n return decodeDXT5(data, w, h);\n case 6:\n return decodeDXT3(data, w, h);\n case 7:\n return decodeDXT1(data, w, h);\n case 8:\n return fromRG88(data, w, h);\n case 9:\n return fromR8(data, w, h);\n case 12:\n throw new Error(\"BC7 解码暂未实现(format=12)\");\n default:\n throw new Error(\"未支持的纹理格式: \" + (TEXTURE_FORMATS[format] || format));\n }\n}\nfunction fromARGB8888(d, w, h) {\n return new Uint8Array(d.buffer, d.byteOffset, w * h * 4).slice();\n}\nfunction fromRGB888(d, w, h) {\n const out = new Uint8Array(w * h * 4);\n for (let i = 0; i < w * h; i++) {\n out[i * 4] = d[i * 3];\n out[i * 4 + 1] = d[i * 3 + 1];\n out[i * 4 + 2] = d[i * 3 + 2];\n out[i * 4 + 3] = 255;\n }\n return out;\n}\nfunction fromRGB565(d, w, h) {\n const out = new Uint8Array(w * h * 4);\n for (let i = 0; i < w * h; i++) {\n const c = d[i * 2] | d[i * 2 + 1] << 8;\n const r = c >> 11 & 31;\n const g = c >> 5 & 63;\n const b = c & 31;\n out[i * 4] = r << 3 | r >> 2;\n out[i * 4 + 1] = g << 2 | g >> 4;\n out[i * 4 + 2] = b << 3 | b >> 2;\n out[i * 4 + 3] = 255;\n }\n return out;\n}\nfunction fromRG88(d, w, h) {\n const out = new Uint8Array(w * h * 4);\n for (let i = 0; i < w * h; i++) {\n out[i * 4] = d[i * 2 + 1];\n out[i * 4 + 1] = d[i * 2 + 1];\n out[i * 4 + 2] = d[i * 2 + 1];\n out[i * 4 + 3] = d[i * 2];\n }\n return out;\n}\nfunction fromR8(d, w, h) {\n const out = new Uint8Array(w * h * 4);\n for (let i = 0; i < w * h; i++) {\n out[i * 4] = d[i];\n out[i * 4 + 1] = d[i];\n out[i * 4 + 2] = d[i];\n out[i * 4 + 3] = 255;\n }\n return out;\n}\nfunction decodeDXT1(d, w, h) {\n return decodeDxtCommon(d, w, h, true, 0);\n}\nfunction decodeDXT3(d, w, h) {\n return decodeDxtCommon(d, w, h, false, 3);\n}\nfunction decodeDXT5(d, w, h) {\n return decodeDxtCommon(d, w, h, false, 5);\n}\nfunction decodeDxtCommon(d, w, h, isDxt1, alphaMode) {\n const rgba = new Uint8Array(w * h * 4);\n const bytesPerBlock = isDxt1 ? 8 : 16;\n const block = new Uint8Array(16);\n let src = 0;\n for (let y = 0; y < h; y += 4) {\n for (let x = 0; x < w; x += 4) {\n if (src + bytesPerBlock > d.length) return rgba;\n block.set(d.subarray(src, src + bytesPerBlock));\n src += bytesPerBlock;\n const colors = colorCodes(block, isDxt1);\n const indices = colorIndices(block, isDxt1);\n const alphas = alphaMode === 3 ? dxt3Alphas(block) : alphaMode === 5 ? dxt5Alphas(block) : null;\n for (let py = 0; py < 4; py++) {\n for (let px = 0; px < 4; px++) {\n const sx = x + px;\n const sy = y + py;\n if (sx >= w || sy >= h) continue;\n const i = py * 4 + px;\n const o = (sy * w + sx) * 4;\n rgba[o] = colors[indices[i] * 4];\n rgba[o + 1] = colors[indices[i] * 4 + 1];\n rgba[o + 2] = colors[indices[i] * 4 + 2];\n rgba[o + 3] = alphas !== null ? alphas[i] : colors[indices[i] * 4 + 3];\n }\n }\n }\n }\n return rgba;\n}\nfunction unpack565(block, off) {\n const value = block[off] | block[off + 1] << 8;\n const red = value >> 11 & 31;\n const green = value >> 5 & 63;\n const blue = value & 31;\n return [\n value,\n red << 3 | red >> 2,\n green << 2 | green >> 4,\n blue << 3 | blue >> 2\n ];\n}\nfunction colorCodes(block, isDxt1) {\n const colorOff = isDxt1 ? 0 : 8;\n const a = unpack565(block, colorOff);\n const b = unpack565(block, colorOff + 2);\n const codes = new Uint8Array(16);\n codes[0] = a[1];\n codes[1] = a[2];\n codes[2] = a[3];\n codes[3] = 255;\n codes[4] = b[1];\n codes[5] = b[2];\n codes[6] = b[3];\n codes[7] = 255;\n if (isDxt1 && a[0] <= b[0]) {\n codes[8] = a[1] + b[1] >> 1;\n codes[9] = a[2] + b[2] >> 1;\n codes[10] = a[3] + b[3] >> 1;\n codes[11] = 255;\n codes[12] = 0;\n codes[13] = 0;\n codes[14] = 0;\n codes[15] = 0;\n } else {\n codes[8] = Math.floor((2 * a[1] + b[1]) / 3);\n codes[9] = Math.floor((2 * a[2] + b[2]) / 3);\n codes[10] = Math.floor((2 * a[3] + b[3]) / 3);\n codes[11] = 255;\n codes[12] = Math.floor((a[1] + 2 * b[1]) / 3);\n codes[13] = Math.floor((a[2] + 2 * b[2]) / 3);\n codes[14] = Math.floor((a[3] + 2 * b[3]) / 3);\n codes[15] = 255;\n }\n return codes;\n}\nfunction colorIndices(block, isDxt1) {\n const base = isDxt1 ? 4 : 12;\n const indices = new Uint8Array(16);\n for (let i = 0; i < 4; i++) {\n const packed = block[base + i];\n indices[i * 4] = packed & 3;\n indices[i * 4 + 1] = packed >> 2 & 3;\n indices[i * 4 + 2] = packed >> 4 & 3;\n indices[i * 4 + 3] = packed >> 6 & 3;\n }\n return indices;\n}\nfunction dxt3Alphas(block) {\n const alphas = new Uint8Array(16);\n for (let i = 0; i < 8; i++) {\n const quant = block[i];\n const lo = quant & 15;\n const hi = quant & 240;\n alphas[2 * i] = lo | lo << 4;\n alphas[2 * i + 1] = hi | hi >> 4;\n }\n return alphas;\n}\nfunction dxt5Alphas(block) {\n const a0 = block[0];\n const a1 = block[1];\n const codes = new Uint8Array(8);\n codes[0] = a0;\n codes[1] = a1;\n if (a0 <= a1) {\n for (let i = 1; i < 5; i++) codes[1 + i] = Math.floor(((5 - i) * a0 + i * a1) / 5);\n codes[6] = 0;\n codes[7] = 255;\n } else {\n for (let i = 1; i < 7; i++) codes[i + 1] = Math.floor(((7 - i) * a0 + i * a1) / 7);\n }\n const indices = new Uint8Array(16);\n let p = 0;\n for (let g = 0; g < 2; g++) {\n let value = 0;\n for (let j = 0; j < 3; j++) value |= block[2 + g * 3 + j] << 8 * j;\n for (let j = 0; j < 8; j++) indices[p++] = value >> 3 * j & 7;\n }\n const alphas = new Uint8Array(16);\n for (let i = 0; i < 16; i++) alphas[i] = codes[indices[i]];\n return alphas;\n}\nfunction lz4Decompress(src, outSize) {\n const out = new Uint8Array(outSize);\n let ip = 0;\n let op = 0;\n while (ip < src.length) {\n const token = src[ip++];\n let litLen = token >> 4;\n if (litLen === 15) {\n let b;\n do {\n b = src[ip++];\n litLen += b;\n } while (b === 255);\n }\n for (let i = 0; i < litLen; i++) out[op++] = src[ip++];\n if (ip >= src.length) break;\n const offset = src[ip] | src[ip + 1] << 8;\n ip += 2;\n let matchLen = 4 + (token & 15);\n if ((token & 15) === 15) {\n let b;\n do {\n b = src[ip++];\n matchLen += b;\n } while (b === 255);\n }\n const start = op - offset;\n for (let i = 0; i < matchLen; i++) out[op++] = out[start + i];\n }\n return out;\n}\nfunction u32(buf, p) {\n return (buf[p] | buf[p + 1] << 8 | buf[p + 2] << 16 | buf[p + 3] << 24) >>> 0;\n}\nfunction i32(buf, p) {\n return u32(buf, p) | 0;\n}\nconst f32View = new DataView(new ArrayBuffer(4));\nfunction f32(buf, p) {\n f32View.setUint8(0, buf[p]);\n f32View.setUint8(1, buf[p + 1]);\n f32View.setUint8(2, buf[p + 2]);\n f32View.setUint8(3, buf[p + 3]);\n return f32View.getFloat32(0, true);\n}\nfunction parseTex(buf) {\n let p = 0;\n const magic1 = asciiTex(buf, p, 9);\n p += 9;\n if (magic1 !== \"TEXV0005\\0\") throw new Error(\"不是 .tex 文件: \" + magic1);\n const magic2 = asciiTex(buf, p, 9);\n p += 9;\n if (magic2 !== \"TEXI0001\\0\") throw new Error(\"未知 TEXI 子容器: \" + magic2);\n const format = u32(buf, p);\n p += 4;\n const flags = u32(buf, p);\n p += 4;\n const textureWidth = u32(buf, p);\n p += 4;\n const textureHeight = u32(buf, p);\n p += 4;\n const width = u32(buf, p);\n p += 4;\n const height = u32(buf, p);\n p += 4;\n p += 4;\n const containerMagic = asciiTex(buf, p, 9);\n p += 9;\n const imageCount = u32(buf, p);\n p += 4;\n let freeImageFormat = FIF.UNKNOWN;\n let containerVersion = 0;\n if (containerMagic === \"TEXB0004\\0\") {\n freeImageFormat = u32(buf, p) | 0;\n p += 4;\n const hasMipExtension = u32(buf, p);\n p += 4;\n if (freeImageFormat === FIF.UNKNOWN && hasMipExtension === 1) freeImageFormat = FIF.MP4;\n containerVersion = hasMipExtension === 1 ? 4 : 3;\n } else if (containerMagic === \"TEXB0003\\0\") {\n freeImageFormat = u32(buf, p) | 0;\n p += 4;\n containerVersion = 3;\n } else if (containerMagic === \"TEXB0002\\0\") {\n containerVersion = 2;\n } else if (containerMagic === \"TEXB0001\\0\") {\n containerVersion = 1;\n } else {\n throw new Error(\"未知 TEXB 容器: \" + containerMagic);\n }\n const isVideo = (flags & 32) !== 0 || freeImageFormat === FIF.MP4;\n const images = [];\n for (let i = 0; i < imageCount; i++) {\n const mipCount = u32(buf, p);\n p += 4;\n const mips = [];\n for (let m = 0; m < mipCount; m++) {\n if (containerVersion === 4) {\n p += 8;\n while (p < buf.length && buf[p] !== 0) p++;\n p += 1;\n p += 4;\n }\n const mw = u32(buf, p);\n p += 4;\n const mh = u32(buf, p);\n p += 4;\n let compression = 0;\n let uncompressedSize = 0;\n if (containerVersion >= 2) {\n compression = u32(buf, p);\n p += 4;\n uncompressedSize = i32(buf, p);\n p += 4;\n }\n const compressedSize = i32(buf, p);\n p += 4;\n if (isVideo) {\n mips.push({ width: mw, height: mh, compression: 0, data: buf.subarray(p) });\n p = buf.length;\n continue;\n }\n if (compression === 0) uncompressedSize = compressedSize;\n const raw = buf.subarray(p, p + compressedSize);\n p += compressedSize;\n let data = raw;\n if (compression === 1) data = lz4Decompress(raw, uncompressedSize);\n mips.push({ width: mw, height: mh, compression, data });\n }\n images.push(mips);\n }\n const mip0 = images[0] && images[0][0];\n const atlasW = mip0 ? mip0.width : textureWidth;\n const atlasH = mip0 ? mip0.height : textureHeight;\n let frames = null;\n if (p + 13 <= buf.length) {\n const texsMagic = asciiTex(buf, p, 9);\n if (texsMagic.indexOf(\"TEXS\") === 0) {\n let q = p + 9;\n const frameCount = u32(buf, q);\n q += 4;\n let frameW = 0;\n let frameH = 0;\n if (texsMagic === \"TEXS0003\\0\") {\n frameW = u32(buf, q);\n q += 4;\n frameH = u32(buf, q);\n q += 4;\n }\n const rem = buf.length - q;\n const stride = frameCount > 0 && rem > 0 && rem % frameCount === 0 ? rem / frameCount : 0;\n if (frameCount > 0 && frameCount <= 4096 && stride >= 32) {\n const list = [];\n for (let i = 0; i < frameCount; i++) {\n const off = q + i * stride;\n if (off + 32 > buf.length) break;\n const ox = f32(buf, off + 8);\n const oy = f32(buf, off + 12);\n const uX = f32(buf, off + 16);\n const uY = f32(buf, off + 20);\n const vX = f32(buf, off + 24);\n const vY = f32(buf, off + 28);\n list.push({\n imageId: f32(buf, off) | 0,\n duration: f32(buf, off + 4),\n x: ox,\n y: oy,\n width: Math.hypot(uX, uY) || frameW,\n height: Math.hypot(vX, vY) || frameH,\n // 仿射基(像素单位)。rotated=true 时 u 不再沿 +x,渲染端必须走\n // 「origin + s·uDir + t·vDir」而不能退化成矩形。\n uDir: [uX, uY],\n vDir: [vX, vY],\n rotated: Math.abs(uY) > 0.5 || Math.abs(vX) > 0.5\n });\n }\n const sane = list.length === frameCount && list.every((f) => {\n if (!(f.width > 0 && f.height > 0)) return false;\n const xs = [f.x, f.x + f.uDir[0], f.x + f.vDir[0], f.x + f.uDir[0] + f.vDir[0]];\n const ys = [f.y, f.y + f.uDir[1], f.y + f.vDir[1], f.y + f.uDir[1] + f.vDir[1]];\n return Math.min(...xs) >= -1 && Math.max(...xs) <= atlasW + 1 && Math.min(...ys) >= -1 && Math.max(...ys) <= atlasH + 1;\n });\n if (sane) {\n frames = {\n magic: texsMagic,\n frameWidth: frameW,\n frameHeight: frameH,\n // 帧矩形的归一化分母(渲染/粒子端都得用这个,别再用 textureWidth)\n atlasWidth: atlasW,\n atlasHeight: atlasH,\n list\n };\n }\n }\n }\n }\n return {\n format,\n formatName: TEXTURE_FORMATS[format] || String(format),\n flags,\n textureWidth,\n textureHeight,\n width,\n height,\n freeImageFormat,\n containerMagic,\n containerVersion,\n isVideo,\n images,\n // 序列帧表;无 TEXS 段时为 null\n frames\n };\n}\nfunction asciiTex(buf, start, len) {\n let s = \"\";\n for (let i = start; i < start + len; i++) s += String.fromCharCode(buf[i]);\n return s;\n}\nconst texMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n FIF,\n TEXTURE_FORMATS,\n decodeMip0,\n decodeMips,\n decodePixels,\n lz4Decompress,\n parseTex\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction propEntry(properties, name) {\n if (!properties || typeof name !== \"string\") return null;\n const p = properties[name];\n return p && typeof p === \"object\" ? p : null;\n}\nfunction userBindName(user) {\n if (typeof user === \"string\") return user;\n if (user && typeof user === \"object\" && typeof user.name === \"string\") return user.name;\n return null;\n}\nfunction valuesEqual(a, b) {\n if (isIntLike(a) && isIntLike(b)) return Number(a) === Number(b);\n return String(a) === String(b);\n}\nfunction valueShape(v) {\n if (typeof v === \"boolean\") return \"bool\";\n if (typeof v === \"number\") return Number.isFinite(v) ? \"num\" : \"other\";\n if (typeof v === \"string\") {\n const parts = v.trim().split(/\\s+/);\n if (parts.length > 0 && parts[0] !== \"\" && parts.every((x) => Number.isFinite(Number(x)))) return \"num\";\n return \"text\";\n }\n return \"other\";\n}\nfunction propShape(p) {\n switch (p.type) {\n case \"bool\":\n return \"bool\";\n case \"slider\":\n return \"num\";\n case \"color\":\n return \"num\";\n case \"textinput\":\n return \"text\";\n default:\n return valueShape(p.value);\n }\n}\nfunction resolveUserValue(v, properties) {\n if (v === null || typeof v !== \"object\") return v;\n if (v.user && typeof v.user === \"object\" && typeof v.user.name === \"string\") {\n const p2 = propEntry(properties, v.user.name);\n if (!p2 || p2.value === void 0 || p2.value === null) return v.value;\n const cur = p2.type === \"combo\" ? coerceComboValue(p2.value, p2.options) : p2.value;\n return valuesEqual(cur, v.user.condition);\n }\n if (typeof v.user !== \"string\") return v;\n const p = propEntry(properties, v.user);\n if (!p || p.value === void 0 || p.value === null) return v.value;\n if (p.userOverridden) return p.value;\n if (v.value !== null && typeof v.value === \"object\") return v.value;\n if (v.value === void 0) return p.value;\n if (valueShape(v.value) === \"bool\" && p.type === \"slider\") {\n const n = Number(p.value);\n return Number.isFinite(n) ? n !== 0 : v.value;\n }\n return valueShape(v.value) === propShape(p) ? p.value : v.value;\n}\nfunction resolveUserProps(node, properties, depth) {\n if (depth > 32 || node === null || typeof node !== \"object\") return node;\n if (Array.isArray(node)) {\n for (let i = 0; i < node.length; i++) node[i] = resolveUserProps(node[i], properties, depth + 1);\n return node;\n }\n if (userBindName(node.user)) {\n let v = resolveUserValue(node, properties);\n for (let guard = 0; guard < 8 && v !== null && typeof v === \"object\" && userBindName(v.user); guard++) {\n v = resolveUserValue(v, properties);\n }\n node.value = resolveUserProps(v, properties, depth + 1);\n return node;\n }\n for (const k of Object.keys(node)) node[k] = resolveUserProps(node[k], properties, depth + 1);\n return node;\n}\nfunction comboOptionValues(options) {\n if (!options) return [];\n if (Array.isArray(options)) {\n return options.map((o) => o && typeof o === \"object\" && \"value\" in o ? o.value : o);\n }\n if (typeof options === \"object\") return Object.values(options);\n return [];\n}\nfunction isIntLike(v) {\n if (typeof v === \"number\") return Number.isInteger(v);\n return typeof v === \"string\" && /^-?\\d+$/.test(v.trim());\n}\nfunction coerceComboValue(value, options) {\n const opts = comboOptionValues(options);\n const numeric = opts.length > 0 ? opts.every(isIntLike) : isIntLike(value);\n if (!numeric) return value;\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && /^-?\\d+$/.test(value.trim())) return Number(value);\n return value;\n}\nfunction flattenUserProperties(properties) {\n const out = {};\n if (!properties || typeof properties !== \"object\") return out;\n for (const [k, v] of Object.entries(properties)) {\n if (!v || typeof v !== \"object\" || !(\"value\" in v)) continue;\n out[k] = v.type === \"combo\" ? coerceComboValue(v.value, v.options) : v.value;\n }\n return out;\n}\nfunction boundUserName(v) {\n return v && typeof v === \"object\" ? userBindName(v.user) : null;\n}\nfunction mergeUserPropertyValues(properties, live, wire) {\n const changed = {};\n if (!wire || typeof wire !== \"object\") return changed;\n const props = properties && typeof properties === \"object\" ? properties : {};\n const dst = live && typeof live === \"object\" ? live : {};\n for (const [k, entry] of Object.entries(wire)) {\n const raw = entry && typeof entry === \"object\" && \"value\" in entry ? entry.value : entry;\n const p = props[k];\n if (p && typeof p === \"object\") {\n p.value = raw;\n p.userOverridden = true;\n const v = p.type === \"combo\" ? coerceComboValue(p.value, p.options) : p.value;\n dst[k] = v;\n changed[k] = v;\n } else {\n dst[k] = raw;\n changed[k] = raw;\n }\n }\n return changed;\n}\nfunction parseVec3(s) {\n if (typeof s === \"object\" && s !== null) s = s.value;\n const p = String(s ?? \"\").trim().split(/\\s+/).map(Number);\n if (p.length === 1) return [p[0] || 0, p[0] || 0, p[0] || 0];\n return [p[0] || 0, p[1] || 0, p[2] || 0];\n}\nfunction parseVec2(s) {\n if (typeof s === \"object\" && s !== null) s = s.value;\n const p = String(s ?? \"\").trim().split(/\\s+/).map(Number);\n if (p.length === 1) return [p[0] || 0, p[0] || 0];\n return [p[0] || 0, p[1] || 0];\n}\nfunction parseColor(c) {\n if (c === void 0 || c === null) return [1, 1, 1];\n if (typeof c === \"string\") return parseVec3(c);\n if (typeof c === \"object\" && c !== null) return parseVec3(c.value);\n return [1, 1, 1];\n}\nfunction parseBool(v, dflt = false) {\n if (v === void 0 || v === null) return dflt;\n if (typeof v === \"boolean\") return v;\n if (typeof v === \"number\") return v !== 0;\n if (typeof v === \"object\" && v !== null) {\n const inner = v.value;\n if (typeof inner === \"number\") return inner !== 0;\n return !!inner;\n }\n return dflt;\n}\nfunction parseNum(v, dflt) {\n if (typeof v === \"number\") return v;\n if (v !== null && typeof v === \"object\") {\n const n = Number(v.value);\n return Number.isFinite(n) ? n : dflt;\n }\n return dflt;\n}\nfunction parseScene(sceneJson, project) {\n const properties = project && project.general && project.general.properties || {};\n const objects = sceneJson.objects || [];\n resolveUserProps(objects, properties, 0);\n resolveUserProps(sceneJson.general || {}, properties, 0);\n const byId = /* @__PURE__ */ new Map();\n for (const o of objects) {\n if (o.id !== void 0) byId.set(o.id, o);\n }\n const local = objects.map((o) => ({\n id: o.id,\n parent: o.parent,\n origin: parseVec3(o.origin || \"0 0 0\"),\n scale: parseVec3(o.scale || \"1 1 1\"),\n angles: parseVec3(o.angles || \"0 0 0\")\n }));\n for (let pass = 0; pass < 8; pass++) {\n let changed = false;\n for (const c of local) {\n if (c.parent === void 0 || c.parent === null) continue;\n const p = byId.get(c.parent);\n if (!p) continue;\n const pIdx = local.findIndex((x) => x.id === c.parent);\n if (pIdx < 0) continue;\n const pc = local[pIdx];\n if (pc.parent !== void 0 && pc.parent !== null) continue;\n const pr = objects[pIdx];\n const prs = pr.scale;\n const runtimeBound = prs !== null && typeof prs === \"object\" && (typeof prs.script === \"string\" || prs.user !== void 0);\n const renderInert = !pr.image && !pr.model && !pr.particle && pr.text == null && !pr.size;\n const pscale = runtimeBound && renderInert ? [1, 1, 1] : pc.scale;\n const ca = pc.angles[2] * Math.PI / 180;\n const cos = Math.cos(ca);\n const sin = Math.sin(ca);\n const ox = c.origin[0] * pscale[0];\n const oy = c.origin[1] * pscale[1];\n c.origin[0] = pc.origin[0] + ox * cos - oy * sin;\n c.origin[1] = pc.origin[1] + ox * sin + oy * cos;\n c.origin[2] = pc.origin[2] + c.origin[2];\n c.angles[2] = pc.angles[2] + c.angles[2];\n c.scale[0] = pscale[0] * c.scale[0];\n c.scale[1] = pscale[1] * c.scale[1];\n c.scale[2] = pscale[2] * c.scale[2];\n c.parent = null;\n changed = true;\n }\n if (!changed) break;\n }\n const visibleSelf = objects.map((o) => parseBool(o.visible, true));\n const idxById = /* @__PURE__ */ new Map();\n objects.forEach((o, i) => {\n if (o.id !== void 0) idxById.set(o.id, i);\n });\n const childCounts = /* @__PURE__ */ new Map();\n const childIdsById = /* @__PURE__ */ new Map();\n for (const o of objects) {\n if (o.parent !== void 0 && o.parent !== null) {\n childCounts.set(o.parent, (childCounts.get(o.parent) || 0) + 1);\n const id = o.id !== void 0 ? o.id : null;\n if (id !== null) {\n const list = childIdsById.get(o.parent);\n if (list) list.push(id);\n else childIdsById.set(o.parent, [id]);\n }\n }\n }\n const effVisible = objects.map(() => true);\n for (let i = 0; i < objects.length; i++) {\n let vis = visibleSelf[i];\n let p = objects[i].parent;\n for (let guard = 0; vis && p !== void 0 && p !== null && guard < 64; guard++) {\n const pi = idxById.get(p);\n if (pi === void 0) break;\n if (!visibleSelf[pi]) vis = false;\n p = objects[pi].parent;\n }\n effVisible[i] = vis;\n }\n const layers = objects.map((o, i) => {\n const world = local[i];\n const isPost = typeof o.image === \"string\" && (o.image.indexOf(\"models/util/projectlayer\") === 0 || o.image.indexOf(\"models/util/fullscreenlayer\") === 0);\n let layerSize = parseVec2(o.size || \"0 0\");\n let layerOrigin = world.origin;\n if (isPost) {\n const ortho = (sceneJson.general || {}).orthogonalprojection;\n const gw = ortho && Number(ortho.width);\n const gh = ortho && Number(ortho.height);\n if (gw > 0 && gh > 0) {\n layerSize = [gw, gh];\n layerOrigin = [gw / 2, gh / 2, world.origin[2] || 0];\n }\n }\n return {\n id: o.id !== void 0 ? o.id : i,\n name: o.name || \"\",\n visible: effVisible[i],\n // 自身可见性(未沿父链折叠)。热更用户属性时据此重算继承,避免把脚本改过的\n // 子层 visible 和「父组开关」揉成一份后无法局部刷新。\n visibleSelf: visibleSelf[i],\n // 指向 scene.json 原对象(resolveUserProps 就地解 {user,value})。\n // 自定义配置热更时只重解这棵树并回写绑定字段,不必整包重挂。\n srcObject: o,\n image: typeof o.image === \"string\" ? o.image : null,\n // [we-scene patch] 真 3D 对象直接挂 `.mdl`(不经 models/*.json 的 puppet 字段)。\n // 全库目前只有 3509243656 的恒星/天空盒/地球。丢掉的话装配循环看不到模型。\n model: typeof o.model === \"string\" ? o.model : null,\n isSkybox: typeof o.name === \"string\" && o.name.indexOf(\"天空盒\") >= 0,\n particle: typeof o.particle === \"string\" ? o.particle : null,\n // [we-scene patch] 粒子参数覆盖 + 声音 + 文字 + 组件\n instanceoverride: o.instanceoverride || null,\n sound: Array.isArray(o.sound) ? o.sound.filter((s) => typeof s === \"string\") : [],\n soundprops: {\n volume: parseNum(o.volume, 1),\n playbackmode: o.playbackmode || \"single\",\n startsilent: parseBool(o.startsilent, false),\n maxtime: parseNum(o.maxtime, 0),\n mintime: parseNum(o.mintime, 0),\n spatialization: parseBool(o.spatialization, false),\n muteineditor: parseBool(o.muteineditor, false)\n },\n text: typeof o.text === \"string\" ? o.text : o.text && typeof o.text === \"object\" ? o.text.value : null,\n textScript: o.text && typeof o.text === \"object\" ? o.text.script || null : null,\n textScriptProps: o.text && typeof o.text === \"object\" ? o.text.scriptproperties || null : null,\n component: typeof o.component === \"string\" ? o.component : null,\n isText: !!(o.text !== void 0 && o.text !== null),\n // 文字布局属性(WE 文字对象 = size 尺寸的盒子,文字在盒内按对齐/内边距排版)\n textFont: typeof o.font === \"string\" ? o.font : null,\n textPointsize: parseNum(o.pointsize, 24) || 24,\n textColor: parseColor(o.color),\n // anchor 是盒子相对 origin 的锚点(同 image alignment 枚举,外加 \"none\")。\n // 本机 563 个文字层:none 237 / 缺省 301 / center 20 —— none 与缺省都按 center 处理\n // (WE 对象缺省对齐就是 center;显式 center 的挂件与时钟层行为一致)。\n textAnchor: typeof o.anchor === \"string\" && o.anchor !== \"none\" ? o.anchor : \"center\",\n textMaxwidth: parseNum(o.maxwidth, 0),\n textMaxrows: parseNum(o.maxrows, 0),\n textLimitwidth: parseBool(o.limitwidth, false),\n textLimitrows: parseBool(o.limitrows, false),\n textLimituseellipsis: parseBool(o.limituseellipsis, false),\n textHAlign: o.horizontalalign || \"center\",\n textVAlign: o.verticalalign || \"center\",\n textSpacing: o.spacing ? parseVec2(o.spacing) : [0, 0],\n // padding 两种实测形态:标量 32(256 处)与 \"32 32\" 两分量字符串(307 处,\n // 分量在全部样本中相等,按 uniform 处理)。parseNum 对字符串会落 0,需先取分量。\n // 32 是编辑器默认,常写在比 64px 还小的盒子上;装不下时 layout 侧夹成 0,\n // 这里仍保留原值(2134765860 的 82 是作者按时钟盒算的真 inset)。\n textPadding: (() => {\n const p = o.padding;\n if (typeof p === \"number\") return p;\n const n = String(p ?? \"\").trim().split(/\\s+/).map(Number).filter((x) => Number.isFinite(x));\n return n.length ? n.reduce((a, b) => a + b, 0) / n.length : 0;\n })(),\n textOpaquebackground: parseBool(o.opaquebackground, false),\n textBackgroundcolor: parseColor(o.backgroundcolor),\n textBackgroundbrightness: parseNum(o.backgroundbrightness, 1),\n textCastshadow: parseBool(o.castshadow, false),\n isSound: !!(o.sound && o.sound.length),\n isComponent: !!o.component,\n // [we-scene patch] 对象脚本:scale/origin/color/alpha/brightness/angles/visible 字段可绑\n // WE 脚本(音频条 scale 读 registerAudioBuffers 逐帧改写是经典用法,本场景 31 处)。\n // 解析保留脚本原文与静态快照,宿主逐帧求值后写回图层字段(见 main.ts)。\n //\n // **visible 必须在列**:全库 180 个 visible 脚本(跨 40 个壁纸)承载了绝大多数\n // 指针交互 —— 266 个 cursor* 回调里有 115 个(43%)挂在这个字段上,包括全部\n // 3 个骨骼拖拽壁纸(2998757800 / 3790261114 / 3790389413)。\n // 白名单漏掉它时这些脚本**根本不会被 evalObjectScript 加载**,\n // 于是回调实现得再全也一处都不会派发。\n // 语义:value 快照全库 180/180 为 boolean;109 个含 update(逐帧决定显隐)、\n // 71 个纯 cursor 交互(无 update,靠回调改写别的图层)。\n objectScripts: (() => {\n const out = {};\n for (const f of [\"scale\", \"origin\", \"color\", \"alpha\", \"brightness\", \"angles\", \"visible\"]) {\n const v = o[f];\n if (v && typeof v === \"object\" && typeof v.script === \"string\" && v.script) {\n out[f] = { script: v.script, scriptproperties: v.scriptproperties || null, value: v.value };\n }\n }\n return Object.keys(out).length ? out : null;\n })(),\n // [we-scene patch] 字段关键帧动画(`animation: {c0:[...], options:{...}}`)。\n // 与 objectScripts 同理:不在这里留下来,渲染侧就只能读那份静态 `value` 快照。\n // 全库 126 处 / 25 张壁纸,三大挂载点是 effect 常量 `multiply`(32)、\n // 对象 `alpha`(32)、对象 `origin`(27)。求值见 render/animation.js。\n // 这里连 `value` 一起存:`relative:true`(34 处,仅 origin/angles/scale)\n // 的动画值是**相对基准的增量**,求值时要叠加回去。\n objectAnimations: (() => {\n const out = {};\n for (const f of [\"scale\", \"origin\", \"color\", \"alpha\", \"brightness\", \"angles\", \"visible\", \"volume\", \"maxwidth\", \"zoom\"]) {\n const v = o[f];\n if (v && typeof v === \"object\" && v.animation && typeof v.animation === \"object\" && v.animation.options) {\n out[f] = { animation: v.animation, value: v.value };\n }\n }\n return Object.keys(out).length ? out : null;\n })(),\n animationLayers: (o.animationlayers || []).filter((a) => a && typeof a.animation === \"number\").map((a) => ({\n animation: a.animation,\n visible: parseBool(a.visible, true),\n additive: parseBool(a.additive, false),\n blend: parseNum(a.blend, 1),\n rate: parseNum(a.rate, 1)\n })),\n // WE 的 solid 层:无 image/particle,或 image 指向内置 models/util/*(纯色层,无纹理)\n //\n // [we-scene patch] **composelayer 必须排除在外。** 它不是纯色层而是一块\n // 「效果画布」—— 层内容本该是**空白(全 0)**,让效果链自己往上画。\n // 而 solid 在渲染器里意味着「层内容 = whiteTex」(不透明纯白)。\n // 编辑器给 17 个 composelayer 也写了 `solid: true`(作者从 solidlayer 改过来\n // 时留下的残留),其中 12 个是「空容器 + 效果」,全部会被喂进一张纯白底:\n // 2872267921「音频」的 test_shader 写 ApplyBlending(31, albedo.rgb, color, 1.0)\n // = albedo + color,albedo 是纯白 ⇒ 输出恒为 1,整块 2000×2000 quad 全白,\n // 且 alpha 直通 albedo.a = 1 ⇒ 不透明地盖住整个画面。\n //\n // [we-scene patch] **solidlayer 不看 `solid` 旗标。** 编辑器给 image=\n // `models/util/solidlayer.json` 时经常不写 `solid: true`(全库约 300 层 /\n // 仅约 40 层带旗标)。渲染器无贴图且 solid=false 会喂 transparentTex,\n // 2983846453 的「底部」白天蓝底 alpha=1 也变成全黑。旗标缺失 ≠ 不是纯色层。\n solid: (() => {\n if (typeof o.particle === \"string\") return false;\n const img = typeof o.image === \"string\" ? o.image : \"\";\n if (img.indexOf(\"models/util/composelayer\") === 0) return false;\n if (img.indexOf(\"models/util/solidlayer\") === 0) return true;\n if (!o.solid) return false;\n return !img || img.indexOf(\"models/util/\") === 0;\n })(),\n // composelayer 是分组容器(子层已合并为世界坐标),容器自身不渲染。\n // hasChildren 供渲染器区分「真分组」与「空容器 + 效果画布」(后者要渲染,\n // 见 renderScene)。带子层的容器若挂了效果,渲染器会把子层先画进组 FBO\n // 再对整组跑效果链(组渲染目标,见 renderContainerGroup)。\n isContainer: typeof o.image === \"string\" && o.image.indexOf(\"models/util/composelayer\") === 0,\n hasChildren: (childCounts.get(o.id !== void 0 ? o.id : i) || 0) > 0,\n // [we-scene patch] 直接子层 id 列表。组渲染目标需要按容器把子层聚起来:\n // 3264246690 的三条 DANGER 胶带是「容器挂 scroll + 子层出图」的结构,\n // 只看 hasChildren 跳过容器,scroll/tint 就整组失效(胶带静止不动)。\n childIds: childIdsById.get(o.id !== void 0 ? o.id : i) || null,\n parentId: o.parent !== void 0 && o.parent !== null ? o.parent : null,\n // [we-scene patch] puppet 附着点名。WE 语义:`attachment: \"头\"` + `parent: <puppet id>`\n // = 该层 origin 相对 MDAT 附着点,并跟随那根骨(见 mdl-skin.js applyAttachmentBindOrigins)。\n // 名字必须原样留下:全库有 \"左头发1\"/\"左头发2\" 这种只差末位数字的,前缀匹配会挂错骨。\n // 解析阶段还没有 MDL,这里只保留字段;绑定姿势偏移在 puppet 装好之后再加。\n attachment: typeof o.attachment === \"string\" && o.attachment !== \"\" ? o.attachment : null,\n // [we-scene patch] `config.passthrough` —— WE 声明「本层的效果链输入 = 它**背后\n // 已渲染的画面**」,而不是一块空白画布。全库 120 处,**全部**是容器,\n // 其中 119 个是「空容器 + 效果」。\n //\n // 不实现时空容器基底是 scene=(0,0,0,0),而工坊音频可视化普遍写\n // finalColor = ApplyBlending(MODE, lerp(barColor, scene.rgb, scene.a), barColor, bar*op)\n // scene.a=0 让那个 lerp 原样返回 barColor,两个混合参数相同 ⇒ **rgb 与 bar 无关**,\n // 形状只能落在 alpha 上。TRANSPARENCY=REPLACE 的还有 alpha 兜底,\n // 而 PRESERVE(alpha = scene.a = 0)连 alpha 都没有 —— 整块 quad 变成恒定纯色。\n // 3789131791 的「Green」就是这样糊出一块 1920×1080 的青色矩形(Bar Color\n // 恰是 0.31/0.94/0.94)。给它真实背景后 scene.a=1,bar=0 处输出精确等于原背景。\n passthrough: !!(o.config && o.config.passthrough === true),\n // [we-scene patch] projectlayer / fullscreenlayer 是 WE 的**全屏后期处理层**:\n // 层内容 = 当前已渲染的画面(copybackground),套效果后再合成回画布。\n // 回读已由 drawBackdropToFBO 实现;再整层跳过会让 973101892 的\n // waterripple/pulse/godrays 完全不跑,星云是静图。空画布 + compositecolor\n // 铺白(3113287126)是「当普通空层画」的后果,不是该继续跳过的理由。\n isPostProcess: isPost,\n origin: layerOrigin,\n scale: world.scale,\n angles: world.angles,\n size: layerSize,\n alignment: o.alignment || \"center\",\n color: parseColor(o.color),\n alpha: parseNum(o.alpha, 1),\n brightness: parseNum(o.brightness, 1),\n copybackground: !!o.copybackground,\n colorBlendMode: o.colorBlendMode || 0,\n // 视差深度(vec2:x/y 方向分量;近景正值位移大、远景负值反向)\n parallaxDepth: o.parallaxDepth !== void 0 ? parseVec2(o.parallaxDepth) : null,\n effects: (o.effects || []).map((e) => ({\n file: e.file || \"\",\n // [we-scene patch] 效果名要留着:对象脚本按名字取效果开关外观\n // (thisScene.getLayer('腿1').getEffect('白丝').visible = false,\n // 见 text.js 的 makeEffectHandle)。丢掉 name 就只能按索引取,\n // 而语料里 9 处调用有 8 处按名字。\n name: typeof e.name === \"string\" ? e.name : \"\",\n visible: parseBool(e.visible, true),\n // [we-scene patch] 效果开关上的脚本要留原文。`parseBool` 只取 `.value`\n // 快照,`script` 字段被丢掉 —— 全库 46 处 `effect.visible` 脚本(媒体回调\n // 的第二大挂载点)因此**根本不会被加载**,回调实现得再全也一处不派发。\n // 这与 objectScripts 白名单曾漏掉 `visible` 是同一类错误(见上方注释)。\n visibleScript: e.visible && typeof e.visible === \"object\" && typeof e.visible.script === \"string\" && e.visible.script ? { script: e.visible.script, scriptproperties: e.visible.scriptproperties || null, value: !!e.visible.value } : null,\n passes: (e.passes || []).map((p) => ({\n combos: p.combos || {},\n constantshadervalues: p.constantshadervalues || {},\n textures: p.textures || []\n }))\n }))\n };\n });\n const general = sceneJson.general || {};\n const generalScripts = (() => {\n const out = {};\n for (const [k, v] of Object.entries(general)) {\n if (v && typeof v === \"object\" && typeof v.script === \"string\" && v.script) {\n out[k] = { script: v.script, scriptproperties: v.scriptproperties || null, value: v.value };\n }\n }\n return Object.keys(out).length ? out : null;\n })();\n const generalAnimations = (() => {\n const out = {};\n for (const [k, v] of Object.entries(general)) {\n if (v && typeof v === \"object\" && v.animation && typeof v.animation === \"object\" && v.animation.options) {\n out[k] = { animation: v.animation, value: v.value };\n }\n }\n return Object.keys(out).length ? out : null;\n })();\n {\n const byId2 = /* @__PURE__ */ new Map();\n for (const L of layers) if (L.id !== void 0) byId2.set(L.id, L);\n for (let pass = 0; pass < 8; pass++) {\n let changed = false;\n for (const L of layers) {\n if (L.parallaxDepth || L.parentId == null) continue;\n const p = byId2.get(L.parentId);\n if (!p || !p.parallaxDepth) continue;\n if (p.image || p.particle || p.model) continue;\n L.parallaxDepth = p.parallaxDepth.slice();\n changed = true;\n }\n if (!changed) break;\n }\n }\n return {\n camera: sceneJson.camera || null,\n general,\n generalScripts,\n generalAnimations,\n layers,\n properties\n };\n}\nfunction recomputeLayerVisibility(layers) {\n if (!Array.isArray(layers)) return;\n const byId = /* @__PURE__ */ new Map();\n for (const l of layers) {\n if (l && l.id !== void 0 && l.id !== null) byId.set(l.id, l);\n }\n for (const l of layers) {\n if (!l) continue;\n if (l.destroyed) {\n l.visible = false;\n continue;\n }\n let vis = l.visibleSelf !== false;\n let p = l.parentId;\n for (let g = 0; vis && p != null && g < 64; g++) {\n const parent = byId.get(p);\n if (!parent) break;\n if (parent.visibleSelf === false || parent.destroyed) vis = false;\n p = parent.parentId;\n }\n l.visible = vis;\n }\n}\nfunction applySolidFromModel(layer, modelJson) {\n if (!layer || !modelJson || typeof modelJson !== \"object\") return;\n if (layer.isContainer) return;\n if (modelJson.solidlayer === true) layer.solid = true;\n}\nfunction resolveMaterial(modelJson) {\n if (!modelJson || typeof modelJson.material !== \"string\") return null;\n return {\n materialPath: modelJson.material,\n autosize: !!modelJson.autosize,\n cropoffset: modelJson.cropoffset ? parseVec2(modelJson.cropoffset) : null\n };\n}\nconst sceneMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n applySolidFromModel,\n parseBool,\n parseColor,\n parseNum,\n parseScene,\n parseVec2,\n parseVec3,\n recomputeLayerVisibility,\n resolveMaterial\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction resolveEffectChain(pkg2, effect, readText2) {\n const entry = getEntry(pkg2, effect.file);\n if (entry === null) return;\n let ej;\n try {\n ej = JSON.parse(readText2(entry));\n } catch (e) {\n return;\n }\n effect.fbos = ej.fbos || [];\n effect.materialPasses = (ej.passes || []).map((p) => {\n if (!p.material) {\n return {\n shader: null,\n copyCommand: true,\n target: p.target || null,\n source: p.source || null,\n binds: p.bind || [],\n blending: \"normal\",\n textures: [],\n combos: {},\n constants: {}\n };\n }\n const me = getEntry(pkg2, p.material);\n if (me === null) {\n return { shader: null, copyCommand: false, target: p.target || null, binds: p.bind || [], blending: \"normal\", textures: [], combos: {}, constants: {} };\n }\n const mj = JSON.parse(readText2(me));\n const mp = mj.passes && mj.passes[0] || {};\n return {\n shader: mp.shader || null,\n copyCommand: false,\n target: p.target || null,\n binds: p.bind || [],\n blending: mp.blending || \"normal\",\n textures: mp.textures || [],\n combos: mp.combos || {},\n constants: mp.constantshadervalues || {}\n };\n });\n}\nconst BUILTIN_MODELS = {\n \"models/util/solidlayer.json\": { material: \"materials/util/solidlayer.json\" },\n // composelayer 本身无内容,但作者会给它挂图层效果(音频可视化 = 空容器 +\n // 示波器/音频条效果是工坊标准做法,全库 186 处)。注册后 main.ts 的图层循环\n // 才会走到效果链解析,渲染器按「透明画布」跑该容器自己的效果。\n \"models/util/composelayer.json\": { material: \"materials/util/solidlayer.json\" },\n // pkg 里没有 models/util/fullscreenlayer.json。不注册则装配循环\n // `if (!modelEntry) continue`,挂在上面的 waterripple/pulse 永远不解析\n // (973101892「dark blue galexy」整张不会动)。\n \"models/util/fullscreenlayer.json\": { material: \"materials/util/solidlayer.json\" },\n \"models/util/projectlayer.json\": { material: \"materials/util/solidlayer.json\" }\n};\nfunction isBuiltinAlbedoShader(name) {\n if (!name || typeof name !== \"string\") return true;\n const n = name.toLowerCase();\n return n === \"generic\" || n === \"sprite\" || n === \"flat\" || n.startsWith(\"genericimage\");\n}\nfunction attachLayerMaterialEffect(layer, pass) {\n if (!layer || !pass || !pass.shader || isBuiltinAlbedoShader(pass.shader)) return false;\n layer.effects = layer.effects || [];\n if (layer.effects.some((e) => e.layerMaterial)) return false;\n layer.effects.unshift({\n file: \"\",\n name: \"_layerMaterial\",\n visible: true,\n layerMaterial: true,\n passes: [{\n combos: pass.combos || {},\n constantshadervalues: pass.constantshadervalues || {},\n textures: pass.textures || []\n }],\n materialPasses: [{\n shader: pass.shader,\n copyCommand: false,\n target: null,\n binds: [],\n blending: pass.blending || \"normal\",\n textures: pass.textures || [],\n combos: pass.combos || {},\n constants: pass.constantshadervalues || {}\n }],\n fbos: []\n });\n return true;\n}\nconst BUILTIN_MATERIALS = {\n \"materials/util/solidlayer.json\": {\n passes: [{ shader: \"flat\", blending: \"translucent\", cullmode: \"nocull\", depthtest: \"disabled\", depthwrite: \"disabled\", textures: [], combos: {} }]\n }\n};\nconst effMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n BUILTIN_MATERIALS,\n BUILTIN_MODELS,\n attachLayerMaterialEffect,\n isBuiltinAlbedoShader,\n resolveEffectChain\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction mat4Identity() {\n return new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n}\nfunction mat4Multiply(a, b) {\n const out = new Float32Array(16);\n for (let c = 0; c < 4; c++) {\n for (let r = 0; r < 4; r++) {\n let s = 0;\n for (let k = 0; k < 4; k++) s += a[k * 4 + r] * b[c * 4 + k];\n out[c * 4 + r] = s;\n }\n }\n return out;\n}\nfunction mat4Ortho(left, right, top, bottom, near, far) {\n const out = mat4Identity();\n out[0] = 2 / (right - left);\n out[5] = 2 / (bottom - top);\n out[10] = -2 / (far - near);\n out[12] = -(right + left) / (right - left);\n out[13] = -(bottom + top) / (bottom - top);\n out[14] = -0 / (far - near);\n return out;\n}\nfunction mat4Translate(m, x, y, z) {\n return mat4Multiply(m, new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, x, y, z, 1]));\n}\nfunction mat4Transpose(m) {\n const o = new Float32Array(16);\n for (let r = 0; r < 4; r++) for (let c = 0; c < 4; c++) o[c * 4 + r] = m[r * 4 + c];\n return o;\n}\nfunction mat4Scale(m, sx, sy, sz) {\n return mat4Multiply(m, new Float32Array([sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1]));\n}\nfunction mat4RotateZ(m, rad) {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n return mat4Multiply(m, new Float32Array([c, s, 0, 0, -s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]));\n}\nfunction mat4RotateX(m, rad) {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n return mat4Multiply(m, new Float32Array([1, 0, 0, 0, 0, c, s, 0, 0, -s, c, 0, 0, 0, 0, 1]));\n}\nfunction mat4RotateY(m, rad) {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n return mat4Multiply(m, new Float32Array([c, 0, -s, 0, 0, 1, 0, 0, s, 0, c, 0, 0, 0, 0, 1]));\n}\nfunction mat4Perspective(fovyDeg, aspect, near, far) {\n const f = 1 / Math.tan(fovyDeg * Math.PI / 180 / 2);\n const out = new Float32Array(16);\n out[0] = f / (aspect || 1);\n out[5] = f;\n out[10] = (far + near) / (near - far);\n out[11] = -1;\n out[14] = 2 * far * near / (near - far);\n return out;\n}\nfunction numField(v, dflt) {\n const r = v && typeof v === \"object\" ? v.value : v;\n return typeof r === \"number\" && Number.isFinite(r) ? r : dflt;\n}\nfunction isPerspectiveScene(scene) {\n const g = scene && scene.general;\n if (!g || g.orthogonalprojection) return false;\n return numField(g.fov, 0) > 0;\n}\nfunction layerWorldOrigin(layer, cam) {\n if (cam && cam.perspective && layer && layer.isSkybox && cam.eye) return cam.eye;\n return layer.origin;\n}\nfunction mat4LookAt(eye, center, up) {\n const z = normalize([eye[0] - center[0], eye[1] - center[1], eye[2] - center[2]]);\n const x = normalize(cross(up, z));\n const y = cross(z, x);\n const out = new Float32Array([x[0], y[0], z[0], 0, x[1], y[1], z[1], 0, x[2], y[2], z[2], 0, 0, 0, 0, 1]);\n out[12] = -(x[0] * eye[0] + x[1] * eye[1] + x[2] * eye[2]);\n out[13] = -(y[0] * eye[0] + y[1] * eye[1] + y[2] * eye[2]);\n out[14] = -(z[0] * eye[0] + z[1] * eye[1] + z[2] * eye[2]);\n return out;\n}\nfunction mat4TransformPoint(m, x, y, z) {\n const w = m[3] * x + m[7] * y + m[11] * z + m[15];\n return [\n (m[0] * x + m[4] * y + m[8] * z + m[12]) / w,\n (m[1] * x + m[5] * y + m[9] * z + m[13]) / w,\n (m[2] * x + m[6] * y + m[10] * z + m[14]) / w\n ];\n}\nconst DESIGN_ASPECTS = [\n [16, 9],\n [16, 10],\n [21, 9],\n [32, 9]\n];\nfunction matchDesignAspect(width, height, projW, projH, relTol) {\n const a = width / height;\n if (!Number.isFinite(a) || a <= 0 || !(projW > 0) || !(projH > 0)) return null;\n const tol = 0.02;\n const design = projW / projH;\n if (Math.abs(a - design) <= tol * design) {\n return { viewW: projW, viewH: projH };\n }\n for (const [rw, rh] of DESIGN_ASPECTS) {\n const r = rw / rh;\n if (Math.abs(a - r) > tol * r) continue;\n const viewH = projH;\n const viewW = projH * r;\n if (viewW > projW + 1e-6) {\n return { viewW: projW, viewH: projW / r };\n }\n return { viewW, viewH };\n }\n return null;\n}\nfunction fitWindow(fit, projW, projH, width, height, alignX, alignY) {\n const ax = clamp01(alignX);\n const ay = clamp01(alignY);\n if (fit === \"cover\") {\n const matched = matchDesignAspect(width, height, projW, projH);\n if (matched) {\n return {\n offX: (projW - matched.viewW) * ax,\n offY: (projH - matched.viewH) * ay,\n viewW: matched.viewW,\n viewH: matched.viewH\n };\n }\n const scale = Math.max(width / projW, height / projH);\n const viewW = width / scale;\n const viewH = height / scale;\n return { offX: (projW - viewW) * ax, offY: (projH - viewH) * ay, viewW, viewH };\n }\n if (fit === \"contain\") {\n const screenAspect = width / height;\n const contentAspect = projW / projH;\n if (contentAspect > screenAspect) {\n const viewW2 = projW;\n const viewH2 = projW / screenAspect;\n return { offX: 0, offY: (projH - viewH2) / 2, viewW: viewW2, viewH: viewH2 };\n }\n const viewH = projH;\n const viewW = projH * screenAspect;\n return { offY: 0, offX: (projW - viewW) / 2, viewW, viewH };\n }\n return { offX: 0, offY: 0, viewW: projW, viewH: projH };\n}\nfunction buildCamera(scene, width, height, fit, alignX, alignY) {\n const general = scene.general;\n const cam = scene.camera;\n const eyeV = cam && cam.eye ? parseVec$1(cam.eye) : [0, 0, 0];\n const centerV = cam && cam.center ? parseVec$1(cam.center) : [0, 0, -1];\n const upV = cam && cam.up ? parseVec$1(cam.up) : [0, 1, 0];\n if (isPerspectiveScene(scene)) {\n const aspect = height > 0 ? width / height : 16 / 9;\n const fov = numField(general.fov, 50);\n const near = Math.max(numField(general.nearz, 0.01), 1e-4);\n const far = Math.max(numField(general.farz, 1e4), near + 1);\n const view2 = mat4LookAt(eyeV, centerV, upV);\n const projection2 = mat4Perspective(fov, aspect, near, far);\n return {\n view: view2,\n projection: projection2,\n eye: eyeV,\n center: centerV,\n projW: aspect,\n projH: 1,\n offX: 0,\n offY: 0,\n viewW: aspect,\n viewH: 1,\n perspective: true\n };\n }\n const view = mat4Identity();\n const projW = general && general.orthogonalprojection ? general.orthogonalprojection.width || width : width;\n const projH = general && general.orthogonalprojection ? general.orthogonalprojection.height || height : height;\n const win = fitWindow(fit, projW, projH, width, height, alignX, alignY);\n const zRaw = scene && scene.cameraTransforms ? scene.cameraTransforms.zoom : general && general.zoom;\n const zVal = zRaw && typeof zRaw === \"object\" ? zRaw.value : zRaw;\n const zoom = Number(zVal);\n if (Number.isFinite(zoom) && zoom > 0 && Math.abs(zoom - 1) > 1e-6) {\n const cx = win.offX + win.viewW / 2;\n const cy = win.offY + win.viewH / 2;\n const vw = win.viewW / zoom;\n const vh = win.viewH / zoom;\n win.offX = cx - vw / 2;\n win.offY = cy - vh / 2;\n win.viewW = vw;\n win.viewH = vh;\n }\n const projection = mat4Ortho(win.offX, win.offX + win.viewW, win.offY + win.viewH, win.offY, -1e4, 1e4);\n return { view, projection, eye: eyeV, projW, projH, offX: win.offX, offY: win.offY, viewW: win.viewW, viewH: win.viewH, perspective: false };\n}\nfunction clamp01(v) {\n const n = Number(v);\n if (!Number.isFinite(n)) return 0.5;\n return n < 0 ? 0 : n > 1 ? 1 : n;\n}\nfunction parseVec$1(s) {\n return String(s).trim().split(/\\s+/).map(Number);\n}\nfunction normalize(v) {\n const l = Math.hypot(v[0], v[1], v[2]) || 1;\n return [v[0] / l, v[1] / l, v[2] / l];\n}\nfunction cross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\nfunction parallaxDepthFactor(d) {\n const n = Number(d);\n return Number.isFinite(n) ? n * 0.5 : 0;\n}\nfunction collectMacros(src) {\n const defs = /* @__PURE__ */ new Map();\n const fns = /* @__PURE__ */ new Map();\n const re = /^[ \\t]*#define[ \\t]+([A-Za-z_][A-Za-z0-9_]*)(?:\\(([^)]*)\\))?[ \\t]*(.*)$/gm;\n let m;\n while ((m = re.exec(src)) !== null) {\n const strip = (s) => s.replace(/\\/\\/.*$/, \"\").replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\").trim();\n if (m[2] !== void 0) {\n fns.set(m[1], { args: m[2].split(\",\").map((s) => s.trim()).filter(Boolean), body: strip(m[3]) });\n } else {\n defs.set(m[1], strip(m[3]));\n }\n }\n return { defs, fns };\n}\nfunction expandFunctionMacro(text, name, info, depth) {\n const out = [];\n let i = 0;\n while (i < text.length) {\n const idx = text.indexOf(name, i);\n if (idx === -1) {\n out.push(text.slice(i));\n break;\n }\n out.push(text.slice(i, idx));\n const p = idx + name.length;\n let q = p;\n while (q < text.length && /\\s/.test(text[q])) q++;\n if (text[q] !== \"(\") {\n out.push(text.slice(idx, q));\n i = q;\n continue;\n }\n let depthCount = 0;\n let end = q;\n for (; end < text.length; end++) {\n if (text[end] === \"(\") depthCount++;\n else if (text[end] === \")\") {\n depthCount--;\n if (depthCount === 0) break;\n }\n }\n if (end >= text.length) {\n out.push(text.slice(idx));\n break;\n }\n const argsStr = text.slice(q + 1, end);\n const args = splitArgs(argsStr);\n let body = info.body;\n info.args.forEach((name2, k) => {\n const val = args[k] !== void 0 ? args[k].trim() : \"\";\n body = replaceWord(body, name2, val);\n });\n if (depth > 0) body = expandMacrosIn(body, depth - 1);\n out.push(\"(\" + body + \")\");\n i = end + 1;\n }\n return out.join(\"\");\n}\nfunction replaceWord(text, word, replacement) {\n return text.replace(new RegExp(\"\\\\b\" + word.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\") + \"\\\\b\", \"g\"), replacement);\n}\nfunction splitArgs(s) {\n const out = [];\n let depth = 0;\n let cur = \"\";\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n if (c === \"(\") depth++;\n else if (c === \")\") depth--;\n if (c === \",\" && depth === 0) {\n out.push(cur);\n cur = \"\";\n } else {\n cur += c;\n }\n }\n if (cur.trim() !== \"\") out.push(cur);\n return out;\n}\nfunction expandMacrosIn(text, depth) {\n for (let round = 0; round < 12; round++) {\n const { defs, fns } = collectMacros(text);\n if (defs.size === 0 && fns.size === 0) break;\n const lines = text.split(\"\\n\");\n let changed = false;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (/^[ \\t]*#/.test(line)) continue;\n let l = line;\n for (const [name, val] of defs) {\n const re = new RegExp(\"\\\\b\" + name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\") + \"\\\\b\");\n if (re.test(l)) {\n l = replaceWord(l, name, val);\n changed = true;\n }\n }\n for (const [name, info] of fns) {\n if (l.includes(name)) {\n l = expandFunctionMacro(l, name, info, depth);\n changed = true;\n }\n }\n lines[i] = l;\n }\n text = lines.join(\"\\n\");\n if (!changed) break;\n }\n return text;\n}\nfunction evalIfExpr(expr, combos, defs) {\n const resolve = (name) => {\n if (combos[name] !== void 0) return String(combos[name]);\n if (defs.has(name)) return \"(\" + defs.get(name) + \")\";\n return \"0\";\n };\n let s = expr.replace(/\\b[A-Za-z_][A-Za-z0-9_]*\\b/g, (n) => resolve(n));\n let i = 0;\n function skipWs() {\n while (i < s.length && /\\s/.test(s[i])) i++;\n }\n function parseOr() {\n let v = parseAnd();\n skipWs();\n while (s.startsWith(\"||\", i)) {\n i += 2;\n const r = parseAnd();\n v = v || r;\n skipWs();\n }\n return v;\n }\n function parseAnd() {\n let v = parseEq();\n skipWs();\n while (s.startsWith(\"&&\", i)) {\n i += 2;\n const r = parseEq();\n v = v && r;\n skipWs();\n }\n return v;\n }\n function parseEq() {\n let v = parseRel();\n skipWs();\n while (s.startsWith(\"==\", i) || s.startsWith(\"!=\", i)) {\n const op = s[i] === \"=\" ? \"==\" : \"!=\";\n i += 2;\n const r = parseRel();\n v = op === \"==\" ? v === r : v !== r;\n skipWs();\n }\n return v;\n }\n function parseRel() {\n let v = parseUnary();\n skipWs();\n while (/^[<>]/.test(s[i] || \"\")) {\n let op = s[i];\n if (s[i + 1] === \"=\") {\n op += \"=\";\n i++;\n }\n i++;\n const r = parseUnary();\n if (op === \"<\") v = v < r;\n else if (op === \">\") v = v > r;\n else if (op === \"<=\") v = v <= r;\n else v = v >= r;\n skipWs();\n }\n return v;\n }\n function parseUnary() {\n skipWs();\n if (s[i] === \"!\") {\n i++;\n return !parseUnary();\n }\n return parseAtom();\n }\n function parseAtom() {\n skipWs();\n if (s[i] === \"(\") {\n i++;\n const v = parseOr();\n skipWs();\n i++;\n return v;\n }\n const m = /^-?\\d+(\\.\\d+)?/.exec(s.slice(i));\n if (m) {\n i += m[0].length;\n return Number(m[0]);\n }\n return false;\n }\n return parseOr();\n}\nfunction stripComments(src) {\n let out = \"\";\n let i = 0;\n const n = src.length;\n while (i < n) {\n const c = src[i];\n const d = src[i + 1];\n if (c === \"/\" && d === \"*\") {\n i += 2;\n while (i < n && !(src[i] === \"*\" && src[i + 1] === \"/\")) {\n if (src[i] === \"\\n\") out += \"\\n\";\n i++;\n }\n i += 2;\n continue;\n }\n if (c === \"/\" && d === \"/\") {\n while (i < n && src[i] !== \"\\n\") i++;\n continue;\n }\n out += c;\n i++;\n }\n return out;\n}\nfunction preprocess(src, combos, includeResolver, depth) {\n const lines = src.split(\"\\n\");\n const out = [];\n const stack = [];\n const defs = /* @__PURE__ */ new Map();\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const t = line.trim();\n if (t.startsWith(\"#include\")) {\n if (allActive(stack)) {\n const m = /^#include[ \\t]+\"([^\"]+)\"|^#include[ \\t]+<([^>]+)>/.exec(t);\n const file = m && (m[1] || m[2]);\n const inc = file && includeResolver ? includeResolver(file) : null;\n if (inc !== null && inc !== void 0) {\n out.push(preprocess(stripComments(inc), combos, includeResolver));\n } else {\n out.push(\"// [include 缺失: \" + file + \"]\");\n }\n }\n continue;\n }\n if (t.startsWith(\"#define\")) {\n if (allActive(stack)) {\n out.push(line);\n const m = /^#define[ \\t]+([A-Za-z_][A-Za-z0-9_]*)(?:\\([^)]*\\))?[ \\t]*(.*)$/.exec(t);\n if (m) defs.set(m[1], m[2].trim());\n }\n continue;\n }\n if (t.startsWith(\"#undef\")) {\n if (allActive(stack)) out.push(line);\n continue;\n }\n if (t.startsWith(\"#ifdef\") || t.startsWith(\"#ifndef\") || t.startsWith(\"#if\")) {\n const parent = allActive(stack);\n let cond = false;\n if (t.startsWith(\"#ifdef\")) {\n const name = t.slice(6).trim().split(/\\s+/)[0];\n cond = combos[name] !== void 0 || defs.has(name);\n } else if (t.startsWith(\"#ifndef\")) {\n const name = t.slice(7).trim().split(/\\s+/)[0];\n cond = !(combos[name] !== void 0 || defs.has(name));\n } else {\n try {\n cond = !!evalIfExpr(t.slice(3).trim(), combos, defs);\n } catch (e) {\n cond = false;\n }\n }\n stack.push({ parent, hit: cond, done: cond });\n continue;\n }\n if (t.startsWith(\"#else\")) {\n if (stack.length > 0) {\n const top = stack[stack.length - 1];\n top.hit = !top.done;\n top.done = true;\n }\n continue;\n }\n if (t.startsWith(\"#elif\")) {\n if (stack.length > 0) {\n const top = stack[stack.length - 1];\n if (top.done) {\n top.hit = false;\n } else {\n let cond = false;\n try {\n cond = !!evalIfExpr(t.slice(5).trim(), combos, defs);\n } catch (e) {\n cond = false;\n }\n top.hit = cond;\n top.done = cond;\n }\n }\n continue;\n }\n if (t.startsWith(\"#endif\")) {\n if (stack.length > 0) stack.pop();\n continue;\n }\n if (t.startsWith(\"#\")) {\n continue;\n }\n if (allActive(stack)) out.push(line);\n }\n return out.join(\"\\n\");\n}\nfunction allActive(stack) {\n return stack.every((s) => s.parent && s.hit);\n}\nfunction matchGroup(text, openIdx, openCh, closeCh) {\n let depth = 0;\n for (let i = openIdx; i < text.length; i++) {\n if (text[i] === openCh) depth++;\n else if (text[i] === closeCh) {\n depth--;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\nfunction matchParen(text, openIdx) {\n return matchGroup(text, openIdx, \"(\", \")\");\n}\nconst GLSL_TYPES = /* @__PURE__ */ new Set([\n \"void\",\n \"bool\",\n \"int\",\n \"uint\",\n \"float\",\n \"double\",\n \"vec2\",\n \"vec3\",\n \"vec4\",\n \"bvec2\",\n \"bvec3\",\n \"bvec4\",\n \"ivec2\",\n \"ivec3\",\n \"ivec4\",\n \"uvec2\",\n \"uvec3\",\n \"uvec4\",\n \"mat2\",\n \"mat3\",\n \"mat4\",\n \"mat2x2\",\n \"mat2x3\",\n \"mat2x4\",\n \"mat3x2\",\n \"mat3x3\",\n \"mat3x4\",\n \"mat4x2\",\n \"mat4x3\",\n \"mat4x4\"\n]);\nfunction isDeclaration(text, idx) {\n let p = idx - 1;\n while (p >= 0 && /[ \\t]/.test(text[p])) p--;\n if (p < 0 || p === idx - 1) return false;\n let e = p + 1;\n while (p >= 0 && /[A-Za-z0-9_]/.test(text[p])) p--;\n const word = text.slice(p + 1, e);\n return GLSL_TYPES.has(word);\n}\nfunction rewriteCall(text, callName, fn) {\n let out = \"\";\n let i = 0;\n while (i < text.length) {\n const idx = text.indexOf(callName, i);\n if (idx === -1) {\n out += text.slice(i);\n break;\n }\n if (idx > 0 && /[A-Za-z0-9_]/.test(text[idx - 1])) {\n out += text.slice(i, idx + 1);\n i = idx + 1;\n continue;\n }\n const after = idx + callName.length;\n if (after < text.length && /[A-Za-z0-9_]/.test(text[after])) {\n out += text.slice(i, after);\n i = after;\n continue;\n }\n if (isDeclaration(text, idx)) {\n out += text.slice(i, after);\n i = after;\n continue;\n }\n out += text.slice(i, idx);\n let q = idx + callName.length;\n while (q < text.length && /\\s/.test(text[q])) q++;\n if (text[q] !== \"(\") {\n out += text.slice(idx, q);\n i = q;\n continue;\n }\n const end = matchParen(text, q);\n if (end === -1) {\n out += text.slice(idx);\n break;\n }\n const inner = text.slice(q + 1, end);\n out += fn(inner, idx);\n i = end + 1;\n }\n return out;\n}\nfunction hlsl2glsl(src, stage, combos, includeResolver, siblingSrc) {\n const rawSrc = src;\n src = stripComments(src);\n const defaults = {};\n const comboRe = /\\[COMBO\\][^\\n]*?\"combo\"\\s*:\\s*\"([^\"]+)\"[^\\n]*?\"default\"\\s*:\\s*(-?\\d+)/g;\n let cm;\n if (typeof siblingSrc === \"string\" && siblingSrc) {\n const sibRe = new RegExp(comboRe.source, \"g\");\n let sm;\n while ((sm = sibRe.exec(siblingSrc)) !== null) defaults[sm[1]] = Number(sm[2]);\n }\n while ((cm = comboRe.exec(rawSrc)) !== null) defaults[cm[1]] = Number(cm[2]);\n const effective = { GLSL: 1, ...defaults, ...combos || {} };\n let code = preprocess(src, effective, includeResolver);\n code = expandMacrosIn(code, 20);\n code = code.replace(/^[ \\t]*#define[^\\n]*\\n?/gm, \"\");\n {\n const comboNames = /* @__PURE__ */ new Set();\n const comboRe2 = /\\[COMBO\\][^\\n]*\"combo\"\\s*:\\s*\"([^\"]+)\"/g;\n let c2;\n while ((c2 = comboRe2.exec(rawSrc)) !== null) comboNames.add(c2[1]);\n for (const k of Object.keys(effective)) comboNames.add(k);\n comboNames.delete(\"GLSL\");\n for (const name of comboNames) {\n const v = effective[name] !== void 0 ? effective[name] : 0;\n code = replaceWord(code, name, String(v));\n }\n }\n code = replaceWord(code, \"sample\", \"smp\");\n code = code.replace(/(\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)[fh]\\b/g, \"$1\");\n code = code.replace(/\\bfloat4x4\\b/g, \"mat4\").replace(/\\bfloat3x3\\b/g, \"mat3\").replace(/\\bfloat2x2\\b/g, \"mat2\").replace(/\\bfloat4\\b/g, \"vec4\").replace(/\\bfloat3\\b/g, \"vec3\").replace(/\\bfloat2\\b/g, \"vec2\").replace(/\\bhalf4\\b/g, \"vec4\").replace(/\\bhalf3\\b/g, \"vec3\").replace(/\\bhalf2\\b/g, \"vec2\").replace(/\\bhalf\\b/g, \"float\");\n code = code.replace(/\\btexSample2DLod\\b/g, \"textureLod\").replace(/\\btexSample2D\\b/g, \"texture\");\n code = rewriteCall(code, \"saturate\", (inner) => \"clamp(\" + inner + \", 0.0, 1.0)\");\n code = rewriteCall(code, \"CAST4\", (inner) => \"vec4(\" + inner + \")\");\n code = rewriteCall(code, \"CAST3\", (inner) => \"vec3(\" + inner + \")\");\n code = rewriteCall(code, \"CAST2\", (inner) => \"vec2(\" + inner + \")\");\n code = code.replace(/\\b(max|min)\\(\\s*(-?\\d+(?:\\.\\d+)?)\\s*,\\s*([A-Za-z_]\\w*\\.(rgb|xyz|rg|xy|r|x))\\s*\\)/g, (all, fn, num2, expr, sw) => {\n const dim = sw.length;\n return fn + \"(vec\" + dim + \"(\" + num2 + \"), \" + expr + \")\";\n });\n code = code.replace(/(^|[^\\w.])(\\d+)\\s*([*/])\\s*([A-Za-z_][A-Za-z0-9_]*)/g, \"$1$2.0 $3 $4\");\n code = code.replace(/\\b([A-Za-z_][A-Za-z0-9_]*)\\s*([*/])\\s*(\\d+)(?![\\d.])/g, \"$1 $2 $3.0\");\n code = code.replace(/(\\d+\\.\\d+)\\s*([*/])\\s*(\\d+)(?![\\d.])/g, \"$1 $2 $3.0\");\n code = code.replace(/(^|[^\\w.])(\\d+)\\s*([*/])\\s*(\\d+\\.\\d+)/g, \"$1$2.0 $3 $4\");\n code = code.replace(/(\\.\\d+)\\s*([+-])\\s*(\\d+)(?![\\d.])/g, \"$1 $2 $3.0\");\n code = code.replace(/([A-Za-z_]\\w*\\.(?:xyzw|xyz|xy|zw|rgba|rgb|rg|x|y|z|w|r|g|b|a))\\s*([+-])\\s*(\\d+)(?![\\d.])/g, \"$1 $2 $3.0\");\n code = code.replace(/(^|[^\\w.])(\\d+)\\s*([+-])\\s*(\\d+\\.\\d+)/g, \"$1$2.0 $3 $4\");\n code = code.replace(/(^|[^\\w.])(\\d+)\\s*([+-])\\s*([A-Za-z_]\\w*\\.(?:xyzw|xyz|xy|zw|rgba|rgb|rg|x|y|z|w|r|g|b|a))/g, \"$1$2.0 $3 $4\");\n {\n const floatNames = /* @__PURE__ */ new Set();\n const declRe = /\\b(?:uniform\\s+)?(?:highp|mediump|lowp\\s+)?(?:float|vec2|vec3|vec4|mat2|mat3|mat4)\\s+([A-Za-z_][A-Za-z0-9_]*)/g;\n let dm;\n while ((dm = declRe.exec(code)) !== null) floatNames.add(dm[1]);\n if (floatNames.size > 0) {\n const alt = Array.from(floatNames).sort((a, b) => b.length - a.length).join(\"|\");\n code = code.replace(new RegExp(\"(^|[^\\\\w.])(\\\\d+)\\\\s*([+-])\\\\s*(\" + alt + \")(?![A-Za-z0-9_])\", \"g\"), \"$1$2.0 $3 $4\");\n }\n }\n {\n const FLOAT_BUILTINS = [\n \"smoothstep\",\n \"step\",\n \"mix\",\n \"clamp\",\n \"max\",\n \"min\",\n \"pow\",\n \"mod\",\n \"atan\",\n \"sqrt\",\n \"inversesqrt\",\n \"exp\",\n \"log\",\n \"exp2\",\n \"log2\",\n \"abs\",\n \"sign\",\n \"floor\",\n \"ceil\",\n \"fract\",\n \"length\",\n \"distance\",\n \"dot\",\n \"reflect\",\n \"refract\",\n \"faceforward\",\n \"normalize\",\n \"cross\"\n ];\n const INT_FIRST_ARG = /\\b(ApplyBlending|ApplyComposite|BlendTransparency)\\s*\\(/;\n for (const fn of FLOAT_BUILTINS) {\n code = rewriteCall(code, fn, (inner) => {\n const parts = splitArgs(inner);\n const fixed = parts.map((p) => {\n if (INT_FIRST_ARG.test(p)) return p;\n const holes = [];\n let masked = p.replace(/\\[[^\\]]*\\]/g, (m) => {\n holes.push(m);\n return \"\\0\" + (holes.length - 1) + \"\\0\";\n }).replace(/\\b(?:ivec[234]|uvec[234]|int|uint)\\s*\\([^()]*\\)/g, (m) => {\n holes.push(m);\n return \"\\0\" + (holes.length - 1) + \"\\0\";\n });\n masked = masked.replace(/(?<![A-Za-z0-9_.\\u0000])(\\d+)(?![.\\d])(?![A-Za-z_])/g, \"$1.0\");\n return masked.replace(/\\u0000(\\d+)\\u0000/g, (m, i) => holes[Number(i)]);\n });\n return fn + \"(\" + fixed.join(\",\") + \")\";\n });\n }\n code = rewriteCall(code, \"pow\", (inner) => {\n const args = splitArgs(inner);\n if (args.length !== 2) return \"pow(\" + inner + \")\";\n const base = args[0].trim();\n const exp = args[1].trim();\n const sw = /\\.(xyzw|rgba|xyz|rgb|xy|rg|zw)\\s*$/.exec(base);\n const W = { xyzw: 4, rgba: 4, xyz: 3, rgb: 3, xy: 2, rg: 2, zw: 2 };\n const w = sw ? W[sw[1]] : 0;\n const expIsVec = /\\bvec[234]\\s*\\(/.test(exp) || /\\.(xyzw|rgba|xyz|rgb|xy|rg|zw)\\b/.test(exp);\n if (w >= 2 && !expIsVec) return \"pow(\" + base + \", vec\" + w + \"(\" + exp + \"))\";\n return \"pow(\" + base + \", \" + exp + \")\";\n });\n }\n code = code.replace(/([)\\]])\\s*([*/])\\s*(\\d+)(?![\\d.])/g, \"$1 $2 $3.0\");\n code = code.replace(/\\)\\s*([+-])\\s*(\\d+)(?![\\d.])/g, \") $1 $2.0\");\n code = code.replace(\n /(^|[^\\w.])(\\d+)(?![.\\d])\\s*([+-])\\s*((?:step|smoothstep|mix|mod|fract|abs|sin|cos|tan|atan|sqrt|pow|inversesqrt|floor|ceil|sign|length|normalize|distance|dot|cross|exp|log|exp2|log2|clamp|min|max)\\s*\\()/g,\n \"$1$2.0 $3 $4\"\n );\n {\n const vecNames = /* @__PURE__ */ new Set();\n const vecRe = /\\b(?:vec[234])\\s+([A-Za-z_][A-Za-z0-9_]*)/g;\n let vm;\n while ((vm = vecRe.exec(code)) !== null) vecNames.add(vm[1]);\n if (vecNames.size > 0) {\n const valt = Array.from(vecNames).sort((a, b) => b.length - a.length).join(\"|\");\n code = code.replace(new RegExp(\"\\\\b(\" + valt + \")\\\\s*([+-])\\\\s*(\\\\d+)(?![\\\\d.])\", \"g\"), \"$1 $2 $3.0\");\n }\n }\n {\n const intNames = /* @__PURE__ */ new Set();\n const intRe = /\\b(?:int|uint)\\s+([A-Za-z_][A-Za-z0-9_]*)/g;\n let im;\n while ((im = intRe.exec(code)) !== null) intNames.add(im[1]);\n code = code.replace(/\\buint\\b/g, \"int\");\n code = code.replace(\n /\\b([A-Za-z_][A-Za-z0-9_]*)\\s*%\\s*(\\d+)(?![\\d.])/g,\n (all, lhs, n) => intNames.has(lhs) ? all : \"mod(\" + lhs + \", \" + n + \".0)\"\n );\n code = code.replace(/\\bint\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*mod\\(([^;]*)\\);/g, \"int $1 = int(mod($2));\");\n }\n code = code.replace(/\\b(vec[234])\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*([^;()\\n,]+);/g, (all, ty, name, rhs) => {\n const r = rhs.trim();\n if (/^(vec[234]|mat[234]|int\\b|float\\b)/.test(r)) return all;\n return ty + \" \" + name + \" = \" + ty + \"(\" + r + \");\";\n });\n for (const fn of [\"mix\", \"clamp\", \"step\", \"smoothstep\", \"min\", \"max\", \"mod\", \"pow\"]) {\n code = rewriteCall(code, fn, (inner) => fn + \"(\" + inner.replace(/(?<![A-Za-z0-9_.])(\\d+)(?![.\\d])/g, \"$1.0\") + \")\");\n }\n code = rewriteCall(code, \"clamp\", (inner) => {\n const args = splitArgs(inner);\n if (args.length !== 3) return \"clamp(\" + inner + \")\";\n const a0 = args[0].trim();\n const a1 = args[1].trim();\n const numLit = (s) => /^-?\\d+\\.?\\d*$/.test(s);\n if (numLit(a0) && numLit(a1) && Number(a0) === 0 && Number(a1) === 1) {\n return \"clamp(\" + args[2].trim() + \", \" + a0 + \", \" + a1 + \")\";\n }\n return \"clamp(\" + inner + \")\";\n });\n code = code.replace(/(\\.\\d+)\\s*([+-])\\s*(\\d+)(?![\\d.])/g, \"$1 $2 $3.0\");\n code = code.replace(/([)\\]])\\s*([+-])\\s*(\\d+)(?![\\d.])/g, \"$1 $2 $3.0\");\n code = rewriteCall(code, \"smoothstep\", (inner) => {\n const args = splitArgs(inner);\n if (args.length === 3 && args[1].trim() === \"0.0\" && args[0].trim() !== \"0.0\") {\n return \"(1.0 - smoothstep(0.0, \" + args[0].trim() + \", \" + args[2].trim() + \"))\";\n }\n return \"smoothstep(\" + inner + \")\";\n });\n {\n const width = /* @__PURE__ */ new Map();\n const wre = /\\b(?:uniform|varying|attribute|in|out)?\\s*\\b(vec([234]))\\s+([A-Za-z_]\\w*)/g;\n let wm;\n while ((wm = wre.exec(code)) !== null) width.set(wm[3], Number(wm[2]));\n if (width.size > 0) {\n const SW = { 2: \"xy\", 3: \"xyz\", 4: \"xyzw\" };\n code = code.replace(/(^|[;{}\\n]\\s*)([A-Za-z_]\\w*)\\s*=\\s*([A-Za-z_]\\w*)\\s*;/g, (all, pre, lhs, rhs) => {\n const lw = width.get(lhs);\n const rw = width.get(rhs);\n if (!lw || !rw || lw >= rw) return all;\n return pre + lhs + \" = \" + rhs + \".\" + SW[lw] + \";\";\n });\n }\n if (width.size > 0) {\n const floatNames = /* @__PURE__ */ new Set();\n const fre = /\\b(?:uniform|varying|attribute|in|out)?\\s*\\bfloat\\s+([A-Za-z_]\\w*)/g;\n let fm;\n while ((fm = fre.exec(code)) !== null) floatNames.add(fm[1]);\n const SCALAR_CALL = \"pow|saturate|clamp|smoothstep|step|abs|floor|ceil|fract|frac|sin|cos|tan|asin|acos|atan|sqrt|length|distance|dot|exp|log|sign|fmod|mod|min|max|mix|lerp\";\n const ALWAYS_FLOAT = /^(?:length|distance|dot)$/;\n const isScalarCall = (r) => {\n const m = r.match(new RegExp(\"^(?:\" + SCALAR_CALL + \")\\\\s*\\\\(\"));\n if (!m) return false;\n let depth = 0;\n const open = m[0].length - 1;\n let close = -1;\n for (let i = open; i < r.length; i++) {\n if (r[i] === \"(\") depth++;\n else if (r[i] === \")\") {\n depth--;\n if (depth === 0) {\n close = i;\n break;\n }\n }\n }\n if (close !== r.length - 1) return false;\n const fn = m[0].replace(/\\s*\\($/, \"\");\n if (ALWAYS_FLOAT.test(fn)) return true;\n const args = r.slice(open + 1, close);\n if (/\\bvec[234]\\s*\\(/.test(args)) return false;\n if (/\\.[xyzwrgba]{2,4}\\b/.test(args)) return false;\n for (const name of width.keys()) {\n const esc = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n if (new RegExp(\"(?<!\\\\.)\\\\b\" + esc + \"\\\\b(?!\\\\s*\\\\.[xyzwrgba]\\\\b)\").test(args)) {\n return false;\n }\n }\n return true;\n };\n const scalarFilled = /* @__PURE__ */ new Set();\n code = code.replace(/(^|[;{}\\n]\\s*)([A-Za-z_]\\w*)\\s*=\\s*([^;]+);/g, (all, pre, lhs, rhs) => {\n const lw = width.get(lhs);\n if (!lw) return all;\n const r = rhs.trim();\n if (new RegExp(\"^vec\" + lw + \"\\\\s*\\\\(\").test(r)) return all;\n if (width.has(r)) return all;\n const isLit = /^-?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?$/i.test(r);\n const isFloatId = floatNames.has(r);\n if (!isLit && !isFloatId && !isScalarCall(r)) return all;\n scalarFilled.add(lhs);\n return pre + lhs + \" = vec\" + lw + \"(\" + r + \");\";\n });\n if (scalarFilled.size > 0) {\n const alt = [...scalarFilled].sort((a, b) => b.length - a.length).join(\"|\");\n code = code.replace(\n new RegExp(`\\\\b([A-Za-z_]\\\\w*)\\\\s*([*/])\\\\s*(${alt})\\\\b`, \"g\"),\n (all, lhs, op, rhs) => width.has(lhs) ? all : `${lhs} ${op} ${rhs}.x`\n );\n code = code.replace(\n new RegExp(`\\\\b(${alt})\\\\s*([*/])\\\\s*([A-Za-z_]\\\\w*)\\\\b`, \"g\"),\n (all, lhs, op, rhs) => width.has(rhs) ? all : `${lhs}.x ${op} ${rhs}`\n );\n }\n }\n }\n code = code.replace(/(\\.[xyzwrgba]{1,4}\\s*=\\s*)(-?\\d+)\\s*;/g, \"$1$2.0;\");\n code = code.replace(/\\b(float|vec2|vec3|vec4)\\s+([A-Za-z_]\\w*)\\s*=\\s*(-?\\d+)\\s*;/g, (all, ty, name, n) => {\n return ty === \"float\" ? `${ty} ${name} = ${n}.0;` : `${ty} ${name} = ${ty}(${n}.0);`;\n });\n {\n const floatNames = /* @__PURE__ */ new Set();\n const fre = /\\b(?:uniform|varying|attribute|in|out)?\\s*\\bfloat\\s+([A-Za-z_]\\w*)/g;\n let fm;\n while ((fm = fre.exec(code)) !== null) floatNames.add(fm[1]);\n if (floatNames.size > 0) {\n const alt = [...floatNames].sort((a, b) => b.length - a.length).join(\"|\");\n code = code.replace(new RegExp(`\\\\b(${alt})\\\\s*=\\\\s*(-?\\\\d+)\\\\s*;`, \"g\"), \"$1 = $2.0;\");\n code = code.replace(new RegExp(`\\\\b(${alt})\\\\s*([-+*/]=)\\\\s*(-?\\\\d+)\\\\s*;`, \"g\"), \"$1 $2 $3.0;\");\n }\n }\n code = code.replace(/(\\.[xyzwrgba]{1,4}\\s*[-+*/]=\\s*)(-?\\d+)\\s*;/g, \"$1$2.0;\");\n const FLOAT_FNS = \"step|smoothstep|saturate|clamp|mix|lerp|frac|fract|abs|floor|ceil|min|max|pow|sqrt|length|dot|distance\";\n code = code.replace(\n new RegExp(`\\\\bint\\\\s+([A-Za-z_]\\\\w*)\\\\s*=\\\\s*((?:${FLOAT_FNS})\\\\s*\\\\()`, \"g\"),\n \"float $1 = $2\"\n );\n {\n const boolNames = /* @__PURE__ */ new Set();\n const boolRe = /\\bbool\\s+([A-Za-z_]\\w*)\\s*=/g;\n let bm;\n while ((bm = boolRe.exec(code)) !== null) boolNames.add(bm[1]);\n if (boolNames.size > 0) {\n const alt = [...boolNames].join(\"|\");\n code = code.replace(\n new RegExp(`([-+*/]=\\\\s*)(${alt})\\\\b`, \"g\"),\n (all, op, name) => `${op}float(${name})`\n );\n }\n }\n {\n const names = /* @__PURE__ */ new Set();\n for (const fm of code.matchAll(/\\b(?:uniform\\s+)?(?:highp|mediump|lowp\\s+)?float\\s+([A-Za-z_]\\w*)\\s*\\[/g)) {\n names.add(fm[1]);\n }\n if (names.size) {\n const alt = [...names].sort((a, b) => b.length - a.length).join(\"|\");\n const re = new RegExp(\"\\\\b(\" + alt + \")\\\\s*\\\\[\", \"g\");\n let out = \"\";\n let last = 0;\n let fm;\n while (fm = re.exec(code)) {\n const open1 = fm.index + fm[0].length - 1;\n const close1 = matchGroup(code, open1, \"[\", \"]\");\n if (close1 < 0) break;\n let p = close1 + 1;\n while (p < code.length && /[ \\t]/.test(code[p])) p++;\n if (code[p] !== \"[\") {\n re.lastIndex = close1 + 1;\n continue;\n }\n const close2 = matchGroup(code, p, \"[\", \"]\");\n if (close2 < 0) break;\n const e1 = code.slice(open1 + 1, close1);\n const e2 = code.slice(p + 1, close2);\n out += code.slice(last, fm.index);\n out += fm[1] + \"[int((\" + e1 + \")) * 4 + int((\" + e2 + \"))]\";\n last = close2 + 1;\n re.lastIndex = last;\n }\n code = out + code.slice(last);\n }\n }\n code = rewriteCall(code, \"mix\", (inner, idx) => {\n const args = splitArgs(inner);\n if (args.length !== 3) return \"mix(\" + inner + \")\";\n const widthBefore = (expr) => {\n const t = expr.trim();\n const sw = /\\.([xyzwrgba]{1,4})\\s*$/.exec(t);\n if (sw) return sw[1].length;\n const ctor = /^vec([234])\\s*\\(/.exec(t);\n if (ctor) return Number(ctor[1]);\n if (!/^[A-Za-z_]\\w*$/.test(t)) return 0;\n const dre = new RegExp(\"\\\\b(vec([234])|float)\\\\s+\" + t + \"\\\\b\", \"g\");\n let lastW = 0;\n let dm;\n while ((dm = dre.exec(code)) !== null && dm.index < idx) {\n lastW = dm[1].startsWith(\"vec\") ? Number(dm[2]) : 1;\n }\n return lastW;\n };\n const a = args[0].trim();\n const b = args[1].trim();\n const wa = widthBefore(a);\n const wb = widthBefore(b);\n if (wa >= 2 && wb >= 2 && wa !== wb) {\n const w = Math.min(wa, wb);\n const sw = w === 2 ? \".xy\" : w === 3 ? \".xyz\" : \"\";\n if (!sw) return \"mix(\" + inner + \")\";\n return \"mix(\" + (wa > w ? a + sw : a) + \", \" + (wb > w ? b + sw : b) + \", \" + args[2].trim() + \")\";\n }\n return \"mix(\" + inner + \")\";\n });\n {\n const re = /\\b(vec([234]))\\s+([A-Za-z_]\\w*)\\s*\\(/g;\n let out = \"\";\n let last = 0;\n let fm;\n while (fm = re.exec(code)) {\n const closeParen = matchParen(code, fm.index + fm[0].length - 1);\n if (closeParen < 0) break;\n let p = closeParen + 1;\n while (p < code.length && /\\s/.test(code[p])) p++;\n if (code[p] !== \"{\") continue;\n const closeBrace = matchGroup(code, p, \"{\", \"}\");\n if (closeBrace < 0) break;\n const lw = Number(fm[2]);\n if (lw >= 4) {\n re.lastIndex = closeBrace;\n continue;\n }\n let body = code.slice(p + 1, closeBrace);\n const localW = /* @__PURE__ */ new Map();\n for (const um of code.slice(0, fm.index).matchAll(/\\buniform\\s+(?:highp|mediump|lowp\\s+)?(vec([234]))\\s+([A-Za-z_]\\w*)/g)) {\n localW.set(um[3], Number(um[2]));\n }\n for (const dm of body.matchAll(/\\b(vec([234]))\\s+([A-Za-z_]\\w*)/g)) {\n localW.set(dm[3], Number(dm[2]));\n }\n const sw = lw === 2 ? \"xy\" : \"xyz\";\n body = body.replace(/\\breturn\\s+([A-Za-z_]\\w*)\\s*;/g, (all, name) => {\n const rw = localW.get(name);\n if (rw && rw > lw) return \"return \" + name + \".\" + sw + \";\";\n return all;\n });\n out += code.slice(last, p + 1) + body;\n last = closeBrace;\n re.lastIndex = closeBrace;\n }\n code = out + code.slice(last);\n }\n const matNames = /* @__PURE__ */ new Set();\n const matRe = /\\b(?:uniform\\s+)?(?:mat4|mat3|mat2|float4x4)\\s+([A-Za-z_][A-Za-z0-9_]*)/g;\n let mm;\n while ((mm = matRe.exec(code)) !== null) matNames.add(mm[1]);\n code = rewriteCall(code, \"mul\", (inner) => {\n const args = splitArgs(inner);\n if (args.length !== 2) return \"mul(\" + inner + \")\";\n const a = args[0].trim();\n const b = args[1].trim();\n const isMat = (s) => matNames.has(s.split(/[\\[.\\s]/)[0]) || /^mat[234]\\(/.test(s);\n if (isMat(a) && isMat(b)) return \"(transpose(\" + b + \") * transpose(\" + a + \"))\";\n if (isMat(b)) return \"(transpose(\" + b + \") * \" + a + \")\";\n return \"(\" + a + \" * \" + b + \")\";\n });\n code = code.replace(/\\blerp\\b/g, \"mix\").replace(/\\bfrac\\b/g, \"fract\");\n code = rewriteCall(code, \"atan2\", (inner) => \"atan(\" + inner + \")\");\n code = rewriteCall(code, \"fmod\", (inner) => {\n const args = splitArgs(inner);\n if (args.length !== 2) return \"mod(\" + inner + \")\";\n const a = args[0].trim();\n const b = args[1].trim();\n return \"((\" + a + \") - (\" + b + \") * trunc((\" + a + \") / (\" + b + \")))\";\n });\n code = rewriteCall(code, \"ddx\", (inner) => \"dFdx(\" + inner + \")\");\n code = rewriteCall(code, \"ddy\", (inner) => \"dFdy(\" + inner + \")\");\n code = rewriteCall(code, \"CAST3X3\", (inner) => \"mat3(\" + inner + \")\");\n if (stage === \"vert\") {\n code = code.replace(/\\battribute\\b/g, \"in\").replace(/\\bvarying\\b/g, \"out\");\n } else {\n code = code.replace(/\\bvarying\\b/g, \"in\").replace(/\\battribute\\b/g, \"in\");\n if (typeof siblingSrc === \"string\" && siblingSrc) {\n const vertTypes = /* @__PURE__ */ new Map();\n const vre = /^\\s*(?:varying|out)\\s+(?:highp|mediump|lowp\\s+)?(vec[234]|float)\\s+([A-Za-z_]\\w*)\\s*;/gm;\n let vm;\n while ((vm = vre.exec(siblingSrc)) !== null) vertTypes.set(vm[2], vm[1]);\n const RANK = { float: 1, vec2: 2, vec3: 3, vec4: 4 };\n const widened = /* @__PURE__ */ new Map();\n code = code.replace(\n /^(\\s*in\\s+(?:highp|mediump|lowp\\s+)?)(vec[234]|float)(\\s+)([A-Za-z_]\\w*)(\\s*;)/gm,\n (all, pre, ty, sp, name, tail) => {\n const vt = vertTypes.get(name);\n if (!vt || RANK[vt] <= RANK[ty]) return all;\n widened.set(name, RANK[ty]);\n return pre + vt + sp + name + tail;\n }\n );\n if (widened.size > 0) {\n const SW = { 1: \"x\", 2: \"xy\", 3: \"xyz\" };\n for (const [name, origRank] of widened) {\n const sw = SW[origRank];\n if (!sw) continue;\n code = code.split(\"\\n\").map((line) => {\n if (/^\\s*in\\s/.test(line)) return line;\n return line.replace(new RegExp(\"\\\\b\" + name + \"\\\\b(?!\\\\s*[.\\\\w])\", \"g\"), name + \".\" + sw);\n }).join(\"\\n\");\n }\n }\n }\n const written = /* @__PURE__ */ new Set();\n const inNames = /* @__PURE__ */ new Set();\n {\n const dre = /^\\s*in\\s+(?:highp|mediump|lowp\\s+)?(vec[234]|float)\\s+([A-Za-z_]\\w*)\\s*;/gm;\n let dm;\n while ((dm = dre.exec(code)) !== null) inNames.add(dm[2]);\n }\n for (const name of inNames) {\n const wre = new RegExp(\"\\\\b\" + name + \"\\\\b\\\\s*(?:\\\\.[xyzwrgba]{1,4})?\\\\s*(?:[-+*/]?=(?!=)|\\\\+\\\\+|--)\");\n if (wre.test(code)) written.add(name);\n }\n if (written.size > 0) {\n const bodyStart = code.search(/\\bvoid\\s+main\\s*\\([^)]*\\)\\s*\\{/);\n if (bodyStart !== -1) {\n const braceIdx = code.indexOf(\"{\", bodyStart);\n const head = code.slice(0, braceIdx + 1);\n let body = code.slice(braceIdx + 1);\n const decls = [];\n for (const name of written) {\n const tm = new RegExp(\"^\\\\s*in\\\\s+(?:highp|mediump|lowp\\\\s+)?(vec[234]|float)\\\\s+\" + name + \"\\\\s*;\", \"m\").exec(code);\n const ty = tm ? tm[1] : \"vec4\";\n decls.push(\" \" + ty + \" \" + name + \"_rw = \" + name + \";\");\n body = replaceWord(body, name, name + \"_rw\");\n }\n body = \"\\n\" + decls.map((d) => d.replace(/= (\\w+)_rw;/, \"= $1;\")).join(\"\\n\") + \"\\n\" + body;\n code = head + body;\n }\n }\n }\n code = code.replace(/\\[(?:unroll|loop|branch|flatten)\\]\\s*/g, \"\");\n code = code.replace(/\\bstatic\\s+/g, \"\");\n {\n const floatNames = /* @__PURE__ */ new Set();\n for (const m of code.matchAll(/\\b(?:uniform[ \\t]+)?(?:highp|mediump|lowp)?[ \\t]*float[ \\t]+([A-Za-z_]\\w*)[ \\t]*[;=]/g)) {\n floatNames.add(m[1]);\n }\n if (floatNames.size) {\n const wrap = (e) => {\n const neg = e.trim().startsWith(\"-\");\n const name = e.replace(/^-\\s*/, \"\").trim();\n if (!floatNames.has(name)) return e;\n return (neg ? \"-\" : \"\") + \"int(\" + name + \")\";\n };\n code = code.replace(\n /(for\\s*\\(\\s*(?:int|uint)\\s+(\\w+)\\s*=\\s*)(-?\\s*[A-Za-z_]\\w*|-?\\s*\\d+)(\\s*;\\s*\\2\\s*[<>]=?\\s*)(-?\\s*[A-Za-z_]\\w*|-?\\s*\\d+)(\\s*;)/g,\n (all, head, v, init, mid, bound, tail) => head + wrap(init) + mid + wrap(bound) + tail\n );\n }\n }\n {\n const seen = /* @__PURE__ */ new Set();\n code = code.split(\"\\n\").map((line) => {\n const m = /^[ \\t]*uniform[ \\t]+(?:highp|mediump|lowp[ \\t]+)?[A-Za-z0-9_]+[ \\t]+([A-Za-z_][A-Za-z0-9_]*)/.exec(line);\n if (!m) return line;\n const name = m[1];\n if (seen.has(name)) return \"\";\n seen.add(name);\n return line;\n }).join(\"\\n\");\n }\n let prologue = \"#version 300 es\\n\";\n if (stage === \"vert\") {\n prologue += \"precision highp float;\\n\";\n }\n if (stage === \"frag\") {\n prologue += \"precision highp float;\\n\";\n if (/\\bgl_FragColor\\b/.test(code)) {\n prologue += \"out vec4 fragColor;\\n\";\n code = code.replace(/\\bgl_FragColor\\b/g, \"fragColor\");\n }\n }\n return prologue + code;\n}\nconst ALIGN = {\n center: [0.5, 0.5],\n // SceneScript 音频条模板常用英式拼写 centre(2652493753 Simple Visualizer)\n centre: [0.5, 0.5],\n left: [0, 0.5],\n right: [1, 0.5],\n top: [0.5, 0],\n bottom: [0.5, 1],\n topleft: [0, 0],\n topright: [1, 0],\n bottomleft: [0, 1],\n bottomright: [1, 1]\n};\nconst COLOR_BLEND_GL = {\n 2: \"multiply\",\n // Multiply\n 6: \"additive\",\n // Lighten(近似)\n 7: \"screen\",\n // Screen\n 9: \"additive\",\n // Add\n 31: \"additive\"\n // Add(带 opacity 权重)\n};\nconst BLEND_PREP = { screen: 1, multiply: 2 };\nconst COPY_VERT = `#version 300 es\nin vec3 a_Position;\nin vec2 a_TexCoord;\nuniform mat4 u_MVP;\nout vec2 v_UV;\nvoid main() {\n gl_Position = u_MVP * vec4(a_Position, 1.0);\n v_UV = a_TexCoord;\n}`;\nconst COPY_FRAG = `#version 300 es\nprecision mediump float;\nin vec2 v_UV;\nuniform sampler2D u_Tex;\nuniform vec4 u_Color4;\nuniform vec2 u_FrameOrigin;\nuniform vec2 u_FrameU;\nuniform vec2 u_FrameV;\nuniform int u_BlendPrep;\nout vec4 fragColor;\nvoid main() {\n vec2 uv = u_FrameOrigin + v_UV.x * u_FrameU + v_UV.y * u_FrameV;\n vec4 c = texture(u_Tex, uv) * u_Color4;\n if (u_BlendPrep == 1) c.rgb *= c.a;\n else if (u_BlendPrep == 2) c.rgb = mix(vec3(1.0), c.rgb, c.a);\n fragColor = c;\n}`;\nconst COMPOSITE_FRAG = `#version 300 es\nprecision mediump float;\nin vec2 v_UV;\nuniform sampler2D u_Tex;\nuniform int u_BlendPrep;\nout vec4 fragColor;\nvoid main() {\n vec4 c = texture(u_Tex, v_UV);\n if (u_BlendPrep == 1) c.rgb *= c.a;\n else if (u_BlendPrep == 2) c.rgb = mix(vec3(1.0), c.rgb, c.a);\n fragColor = c;\n}`;\nconst BACKDROP_FRAG = `#version 300 es\nprecision mediump float;\nin vec2 v_UV;\nuniform sampler2D u_Tex;\nout vec4 fragColor;\nvoid main() {\n fragColor = vec4(texture(u_Tex, v_UV).rgb, 1.0);\n}`;\nfunction layerQuadVerts(w, h) {\n return new Float32Array([\n 0,\n h,\n 0,\n 0,\n 1,\n // 层空间顶(y=h)采样 v=1(纹理底行)→ FBO 顶=纹理底(倒置,与 WE 一致)\n 0,\n 0,\n 0,\n 0,\n 0,\n w,\n h,\n 0,\n 1,\n 1,\n w,\n h,\n 0,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n w,\n 0,\n 0,\n 1,\n 0\n ]);\n}\nfunction passQuadVerts() {\n return new Float32Array([\n -1,\n 1,\n 0,\n 0,\n 1,\n // NDC 顶 v=1(FBO 纹理 v=1=顶行,顶采顶直通)\n -1,\n -1,\n 0,\n 0,\n 0,\n 1,\n 1,\n 0,\n 1,\n 1,\n 1,\n 1,\n 0,\n 1,\n 1,\n -1,\n -1,\n 0,\n 0,\n 0,\n 1,\n -1,\n 0,\n 1,\n 0\n ]);\n}\nfunction localQuadVerts() {\n return new Float32Array([\n -0.5,\n 0.5,\n 0,\n 0,\n 1,\n // local +y = 屏幕下方(y-down 世界):屏幕底采样 v=1(FBO 顶=纹理底)→ 屏幕底=纹理底\n -0.5,\n -0.5,\n 0,\n 0,\n 0,\n // local -y = 屏幕上方:屏幕顶采样 v=0(FBO 底=纹理顶)→ 屏幕顶=纹理顶(正立)\n 0.5,\n 0.5,\n 0,\n 1,\n 1,\n 0.5,\n 0.5,\n 0,\n 1,\n 1,\n -0.5,\n -0.5,\n 0,\n 0,\n 0,\n 0.5,\n -0.5,\n 0,\n 1,\n 0\n ]);\n}\nconst GL_TYPES = {\n 5126: \"float\",\n // FLOAT\n 35664: \"vec2\",\n // FLOAT_VEC2\n 35665: \"vec3\",\n // FLOAT_VEC3\n 35666: \"vec4\",\n // FLOAT_VEC4\n 5124: \"int\",\n // INT\n 35667: \"ivec2\",\n 35668: \"ivec3\",\n 35669: \"ivec4\",\n 35670: \"bool\",\n 35676: \"mat4\",\n // FLOAT_MAT4\n 35675: \"mat3\"\n // FLOAT_MAT3\n};\nfunction linkProgram(gl, vsSrc, fsSrc) {\n const vs = compile(gl, gl.VERTEX_SHADER, vsSrc);\n const fs = compile(gl, gl.FRAGMENT_SHADER, fsSrc);\n const p = gl.createProgram();\n gl.attachShader(p, vs);\n gl.attachShader(p, fs);\n gl.bindAttribLocation(p, 0, \"a_Position\");\n gl.bindAttribLocation(p, 1, \"a_TexCoord\");\n gl.linkProgram(p);\n if (!gl.getProgramParameter(p, gl.LINK_STATUS)) {\n throw new Error(\"着色器链接失败: \" + gl.getProgramInfoLog(p));\n }\n return p;\n}\nfunction compile(gl, type, src) {\n const s = gl.createShader(type);\n gl.shaderSource(s, src);\n gl.compileShader(s);\n if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) {\n throw new Error(\"着色器编译失败: \" + gl.getShaderInfoLog(s));\n }\n return s;\n}\nfunction parseVec3Local(s) {\n const p = String(s).trim().split(/\\s+/).map(Number);\n return [p[0] || 0, p[1] || 0, p[2] || 0];\n}\nfunction makeTexture(gl, rgba, width, height, bitmap = null) {\n const tex2 = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, tex2);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n if (bitmap) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, bitmap);\n } else {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, rgba);\n }\n return tex2;\n}\nfunction makeTextureMip(gl, levels, rg88 = false) {\n const tex2 = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, tex2);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n const lv = levels[0];\n if (lv.bitmap) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, lv.bitmap);\n } else if (rg88 && lv.rgba) {\n const n = lv.width * lv.height;\n const rg = new Uint8Array(n * 2);\n for (let p = 0; p < n; p++) {\n rg[p * 2] = lv.rgba[p * 4 + 3];\n rg[p * 2 + 1] = lv.rgba[p * 4];\n }\n const prevAlign = gl.getParameter(gl.UNPACK_ALIGNMENT);\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RG8, lv.width, lv.height, 0, gl.RG, gl.UNSIGNED_BYTE, rg);\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, prevAlign);\n } else {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, lv.width, lv.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, lv.rgba);\n }\n gl.generateMipmap(gl.TEXTURE_2D);\n return tex2;\n}\nfunction bez1(p0, p1, p2, p3, t) {\n const u = 1 - t;\n return u * u * u * p0 + 3 * u * u * t * p1 + 3 * u * t * t * p2 + t * t * t * p3;\n}\nfunction solveT(x0, x1, x2, x3, x) {\n if (x <= x0) return 0;\n if (x >= x3) return 1;\n let t = x3 - x0 > 1e-9 ? (x - x0) / (x3 - x0) : 0.5;\n for (let i = 0; i < 8; i++) {\n const cur = bez1(x0, x1, x2, x3, t) - x;\n if (Math.abs(cur) < 1e-6) return t;\n const u = 1 - t;\n const d = 3 * u * u * (x1 - x0) + 6 * u * t * (x2 - x1) + 3 * t * t * (x3 - x2);\n if (Math.abs(d) < 1e-9) break;\n const nt = t - cur / d;\n if (nt < 0 || nt > 1 || !Number.isFinite(nt)) break;\n t = nt;\n }\n let lo = 0;\n let hi = 1;\n for (let i = 0; i < 40; i++) {\n t = (lo + hi) / 2;\n if (bez1(x0, x1, x2, x3, t) < x) lo = t;\n else hi = t;\n }\n return t;\n}\nfunction sampleChannel(keys, frame, wrap) {\n if (!keys || keys.length === 0) return 0;\n if (keys.length === 1) return Number(keys[0].value) || 0;\n if (wrap && wrap.length > 0) {\n const first = keys[0];\n const last2 = keys[keys.length - 1];\n const wrapSpan = wrap.length - last2.frame;\n if (wrapSpan > 1e-9 && frame > last2.frame && frame <= wrap.length) {\n return sampleChannel([\n { frame: 0, value: last2.value, front: last2.front, back: last2.back },\n { frame: wrapSpan, value: first.value, front: first.front, back: first.back }\n ], frame - last2.frame);\n }\n }\n if (frame <= keys[0].frame) return Number(keys[0].value) || 0;\n const last = keys[keys.length - 1];\n if (frame >= last.frame) return Number(last.value) || 0;\n let lo = 0;\n let hi = keys.length - 1;\n while (hi - lo > 1) {\n const mid = lo + hi >> 1;\n if (keys[mid].frame <= frame) lo = mid;\n else hi = mid;\n }\n const k0 = keys[lo];\n const k1 = keys[hi];\n const f0 = k0.frame;\n const f1 = k1.frame;\n const v0 = Number(k0.value) || 0;\n const v1 = Number(k1.value) || 0;\n const span = f1 - f0;\n if (span <= 0) return v1;\n const fr = k0.front;\n const bk = k1.back;\n const third = span / 3;\n const frOn = !!(fr && fr.enabled);\n const bkOn = !!(bk && bk.enabled);\n const fx = frOn ? Math.abs(Number(fr.x) || 0) : 1;\n const bx = bkOn ? Math.abs(Number(bk.x) || 0) : 1;\n const x1 = f0 + Math.min(fx, 1.5) * third;\n const x2 = f1 - Math.min(bx, 1.5) * third;\n const y1 = frOn ? v0 + (Number(fr.y) || 0) : v0 + (v1 - v0) / 3;\n const y2 = bkOn ? v1 + (Number(bk.y) || 0) : v1 - (v1 - v0) / 3;\n const t = solveT(f0, x1, x2, f1, frame);\n return bez1(v0, y1, y2, v1, t);\n}\nfunction wrapFrame(frame, length, mode) {\n const len = length > 0 ? length : 1;\n if (mode === \"loop\") {\n let f = frame % len;\n if (f < 0) f += len;\n return f;\n }\n if (mode === \"mirror\") {\n const period = len * 2;\n let f = frame % period;\n if (f < 0) f += period;\n return f <= len ? f : period - f;\n }\n return Math.max(0, Math.min(len, frame));\n}\nfunction coerceBase(base) {\n if (Array.isArray(base)) return base;\n if (typeof base === \"string\") return base.trim().split(/\\s+/).map(Number);\n if (Number.isFinite(base)) return [base];\n return [];\n}\nfunction createAnimation(def) {\n const opts = def && def.options || {};\n const fps = Number(opts.fps) > 0 ? Number(opts.fps) : 30;\n const length = Number(opts.length) > 0 ? Number(opts.length) : 0;\n const mode = opts.mode === \"loop\" || opts.mode === \"mirror\" ? opts.mode : \"single\";\n const name = typeof opts.name === \"string\" ? opts.name : \"\";\n const relative = !!(def && def.relative);\n const wraploop = opts.wraploop === true && mode === \"loop\";\n const channels = [];\n for (let i = 0; ; i++) {\n const c = def && def[\"c\" + i];\n if (!Array.isArray(c)) break;\n channels.push(c);\n }\n const autoPlay = opts.startpaused !== true;\n const endedCallbacks = [];\n const anim2 = {\n name,\n mode,\n fps,\n relative,\n channelCount: channels.length,\n frame: 0,\n rate: 1,\n playing: autoPlay,\n ended: false,\n get frameCount() {\n return length;\n },\n play() {\n anim2.playing = true;\n anim2.ended = false;\n return anim2;\n },\n pause() {\n anim2.playing = false;\n return anim2;\n },\n stop() {\n anim2.playing = false;\n anim2.frame = 0;\n anim2.ended = false;\n return anim2;\n },\n setFrame(f) {\n const n = Number(f);\n if (Number.isFinite(n)) anim2.frame = n;\n return anim2;\n },\n getFrame() {\n return anim2.frame;\n },\n setRate(r) {\n const n = Number(r);\n if (Number.isFinite(n)) anim2.rate = n;\n return anim2;\n },\n addEndedCallback(fn) {\n if (typeof fn === \"function\") endedCallbacks.push(fn);\n return anim2;\n },\n setBlend() {\n return anim2;\n },\n setVisible() {\n return anim2;\n },\n /** 推进播放头。dt 单位秒。 */\n advance(dt) {\n if (!anim2.playing) return;\n anim2.frame += (Number(dt) || 0) * fps * anim2.rate;\n if (mode === \"single\") {\n if (anim2.frame >= length) {\n anim2.frame = length;\n anim2.playing = false;\n if (!anim2.ended) {\n anim2.ended = true;\n for (const cb of endedCallbacks) {\n try {\n cb();\n } catch (e) {\n }\n }\n }\n } else if (anim2.frame < 0) {\n anim2.frame = 0;\n anim2.playing = false;\n }\n }\n },\n /**\n * 当前值。返回标量(1 通道)或数组(2/3 通道)。\n * relative 时调用方需自行叠加基准值 —— 见 applyTo。\n */\n value() {\n const f = wrapFrame(anim2.frame, length, mode);\n const wrap = wraploop ? { length } : void 0;\n if (channels.length === 1) return sampleChannel(channels[0], f, wrap);\n const out = [];\n for (const c of channels) out.push(sampleChannel(c, f, wrap));\n return out;\n },\n /**\n * 叠加到基准值:relative 为真时是「基准 + 动画值」,否则直接取动画值。\n * base 为标量、数组,或 scene.json 的 `\"x y z\"` 字符串。\n * 调用方必须传**冻结的初始快照**,不能传已经写回的 layer.origin。\n */\n applyTo(base) {\n const v = anim2.value();\n if (!relative) return v;\n const b = coerceBase(base);\n if (Array.isArray(v)) return v.map((x, i) => x + (Number(b[i]) || 0));\n return v + (Number(b[0]) || 0);\n }\n };\n return anim2;\n}\nfunction createNeutralAnimation() {\n const a = {\n name: \"\",\n mode: \"single\",\n fps: 30,\n relative: false,\n channelCount: 0,\n frame: 0,\n rate: 1,\n playing: false,\n ended: false,\n get frameCount() {\n return 0;\n },\n play() {\n return a;\n },\n pause() {\n return a;\n },\n stop() {\n return a;\n },\n setFrame() {\n return a;\n },\n getFrame() {\n return 0;\n },\n setRate() {\n return a;\n },\n addEndedCallback() {\n return a;\n },\n setBlend() {\n return a;\n },\n setVisible() {\n return a;\n },\n advance() {\n },\n value() {\n return 0;\n },\n applyTo(base) {\n return base;\n }\n };\n return a;\n}\nconst animMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n createAnimation,\n createNeutralAnimation,\n sampleChannel,\n wrapFrame\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction puppetAnimMargin(layer) {\n const b = layer && layer.puppet && layer.puppet.animBound;\n if (!b) return [0, 0];\n return [b.x * Math.abs(layer.scale[0]), b.y * Math.abs(layer.scale[1])];\n}\nfunction layerWantsPreserveBackdrop(layer) {\n for (const e of layer && layer.effects || []) {\n if (e.visible === false) continue;\n const n = Math.max((e.passes || []).length, (e.materialPasses || []).length);\n for (let i = 0; i < n; i++) {\n const pc = e.passes && e.passes[i] && e.passes[i].combos || {};\n const mc = e.materialPasses && e.materialPasses[i] && e.materialPasses[i].combos || {};\n const t = pc.TRANSPARENCY !== void 0 ? pc.TRANSPARENCY : mc.TRANSPARENCY;\n if (Number(t) === 0) return true;\n }\n }\n return false;\n}\nfunction collectGroupDescendantIds(layer, layerById, out) {\n if (!out) out = /* @__PURE__ */ new Set();\n if (!layerById) return out;\n for (const id of layer.childIds || []) {\n const child = layerById.get(id);\n if (!child || child.particle || child.isPostProcess) continue;\n out.add(id);\n collectGroupDescendantIds(child, layerById, out);\n }\n return out;\n}\nfunction colorBlendPlan(colorBlendMode) {\n const mode = COLOR_BLEND_GL[colorBlendMode] || \"translucent\";\n return { mode, prep: BLEND_PREP[mode] || 0 };\n}\nfunction applyColorBlendCPU(colorBlendMode, dst, src, op) {\n const { mode, prep } = colorBlendPlan(colorBlendMode);\n let s = src;\n if (prep === 1) s = src * op;\n else if (prep === 2) s = 1 - op + src * op;\n if (mode === \"screen\") return s + dst * (1 - s);\n if (mode === \"multiply\") return dst * s;\n if (mode === \"additive\") return dst + src * op;\n return dst * (1 - op) + src * op;\n}\nfunction effectFboSize(fboDef, baseW, baseH) {\n const scale = fboDef && Number(fboDef.scale) || 1;\n let w = Math.max(1, Math.round(baseW / scale));\n let h = Math.max(1, Math.round(baseH / scale));\n const fit = fboDef && Number(fboDef.fit);\n if (Number.isFinite(fit) && fit > 0) {\n const long = Math.max(w, h);\n if (long > fit) {\n const s = fit / long;\n w = Math.max(1, Math.round(w * s));\n h = Math.max(1, Math.round(h * s));\n }\n }\n return [w, h];\n}\nfunction xrayUvScale(gPointerScale) {\n const g = Number(gPointerScale);\n if (!Number.isFinite(g) || g < 1e-3) return 999;\n return 1 / g;\n}\nconst XRAY_IDLE_SCREEN_UV = -1;\nfunction xrayShouldParkPointer(pointerHas, hasPointerScaleUni) {\n return !!hasPointerScaleUni && !pointerHas;\n}\nconst XRAY_FRAG_UV_SCALE = \"mix(999.0, 1.0 / max(g_PointerScale, 0.001), step(0.001, g_PointerScale))\";\nfunction rewriteXrayFragScale(fragGlsl) {\n if (typeof fragGlsl !== \"string\") return fragGlsl;\n if (/unprojectedUVs\\s*\\*=\\s*mix\\(999\\.0,\\s*1\\.0\\s*\\/\\s*max\\(\\s*g_PointerScale/.test(fragGlsl)) {\n return fragGlsl;\n }\n const usesVarying = /unprojectedUVs\\s*\\*=\\s*v_PointerScale\\s*\\*/.test(fragGlsl);\n const usesUniform = /unprojectedUVs\\s*\\*=\\s*g_PointerScale\\s*\\*/.test(fragGlsl);\n if (!usesVarying && !usesUniform) return fragGlsl;\n let out = fragGlsl;\n if (!/uniform\\s+float\\s+g_PointerScale\\b/.test(out)) {\n out = out.replace(/void\\s+main\\s*\\(/, \"uniform float g_PointerScale;\\nvoid main(\");\n }\n const from = usesVarying ? /unprojectedUVs\\s*\\*=\\s*v_PointerScale\\s*\\*/ : /unprojectedUVs\\s*\\*=\\s*g_PointerScale\\s*\\*/;\n return out.replace(from, \"unprojectedUVs *= \" + XRAY_FRAG_UV_SCALE + \" *\");\n}\nfunction createRenderer(canvas, opts = {}) {\n const gl = canvas.getContext(\"webgl2\", { premultipliedAlpha: false, antialias: false, alpha: false, preserveDrawingBuffer: true });\n if (!gl) throw new Error(\"当前浏览器不支持 WebGL2\");\n const shaderResolver = opts.shaderResolver || (async () => null);\n const diag = opts.diag || (() => {\n });\n const videoCanvas = typeof document !== \"undefined\" ? document.createElement(\"canvas\") : null;\n if (videoCanvas) {\n videoCanvas.style.cssText = \"position:fixed;left:-9999px;top:-9999px;width:2px;height:2px;opacity:0\";\n }\n let videoCanvasReported = false;\n let fboCapFactor = opts.fboCapFactor === void 0 ? 0 : opts.fboCapFactor;\n let particleAdvanceFn = null;\n let particleRenderByLayer = null;\n let audioSnapshot = null;\n const AUDIO_SPECTRUM_UNIFORMS = [\n [\"g_AudioSpectrum16Left\", \"left16\"],\n [\"g_AudioSpectrum16Right\", \"right16\"],\n [\"g_AudioSpectrum32Left\", \"left32\"],\n [\"g_AudioSpectrum32Right\", \"right32\"],\n [\"g_AudioSpectrum64Left\", \"left64\"],\n [\"g_AudioSpectrum64Right\", \"right64\"]\n ];\n function setAudioProvider(snapshotProvider) {\n audioSnapshot = snapshotProvider || null;\n }\n let evalObjectScriptFn = null;\n let userProps = null;\n let scriptAudioViews = null;\n let scriptShared = null;\n let scriptInputView = null;\n let scriptTimers = null;\n let constScriptSink = null;\n const constScriptCache = /* @__PURE__ */ new Map();\n const constAnimCache = /* @__PURE__ */ new Map();\n const constScriptDiag = { total: 0, ok: 0, failed: 0 };\n function setConstantScriptRuntime(evalFn, opts2) {\n evalObjectScriptFn = typeof evalFn === \"function\" ? evalFn : null;\n userProps = opts2 && opts2.userProperties || null;\n scriptAudioViews = opts2 && opts2.audioViews || null;\n scriptShared = opts2 && opts2.shared || null;\n scriptInputView = opts2 && opts2.inputView || null;\n scriptTimers = opts2 && opts2.timers || null;\n constScriptSink = opts2 && typeof opts2.onSandbox === \"function\" ? opts2.onSandbox : null;\n constScriptCache.clear();\n constAnimCache.clear();\n }\n let containerDiagDone = false;\n const copyProg = linkProgram(gl, COPY_VERT, COPY_FRAG);\n const compProg = linkProgram(gl, COPY_VERT, COMPOSITE_FRAG);\n const backdropProg = linkProgram(gl, COPY_VERT, BACKDROP_FRAG);\n const vao = gl.createVertexArray();\n gl.bindVertexArray(vao);\n const vbuf = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, vbuf);\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 20, 0);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 2, gl.FLOAT, false, 20, 12);\n gl.bindVertexArray(null);\n const fboCache = /* @__PURE__ */ new Map();\n let fboStamp = 1;\n function getFBO(w, h, tag) {\n const key = (tag || \"\") + \"|\" + w + \"x\" + h;\n if (fboCache.has(key)) {\n const hit = fboCache.get(key);\n hit.stamp = fboStamp;\n return hit;\n }\n const fbo = gl.createFramebuffer();\n const tex2 = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, tex2);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex2, 0);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n const entry = { fbo, tex: tex2, width: w, height: h, stamp: fboStamp };\n fboCache.set(key, entry);\n return entry;\n }\n function pruneUnusedFbos() {\n for (const [key, entry] of fboCache) {\n if (entry.stamp === fboStamp) continue;\n if (entry.fbo) gl.deleteFramebuffer(entry.fbo);\n if (entry.tex) gl.deleteTexture(entry.tex);\n fboCache.delete(key);\n }\n }\n const progCache = /* @__PURE__ */ new Map();\n const includeCache = /* @__PURE__ */ new Map();\n const shaderSrcCache = /* @__PURE__ */ new Map();\n function parseMaterialMeta(src) {\n const meta = {};\n const re = /uniform\\s+[A-Za-z0-9_]+\\s+([A-Za-z_][A-Za-z0-9_]*)[^;]*;\\s*\\/\\/([^\\n]*)/g;\n let m;\n while ((m = re.exec(src)) !== null) {\n const uniformName = m[1];\n const comment = m[2];\n const mat = /\"material\"\\s*:\\s*\"([^\"]+)\"/.exec(comment);\n if (!mat) continue;\n const def = /\"default\"\\s*:\\s*(\"(?:[^\"]*)\"|-?\\d+(?:\\.\\d+)?)/.exec(comment);\n meta[mat[1]] = { uniform: uniformName, default: def ? parseDefaultValue(def[1]) : void 0 };\n }\n return meta;\n }\n function parseSamplerDefaults(src) {\n const out = /* @__PURE__ */ new Map();\n const re = /uniform\\s+sampler2D\\s+g_Texture(\\d+)\\s*;\\s*\\/\\/([^\\n]*)/g;\n let m;\n while ((m = re.exec(src)) !== null) {\n const slot = Number(m[1]);\n const def = /\"default\"\\s*:\\s*\"([^\"]+)\"/.exec(m[2]);\n if (def && def[1]) out.set(slot, def[1]);\n }\n return out;\n }\n function parseTextureCombos(src) {\n const out = [];\n const re = /uniform\\s+sampler2D\\s+(g_Texture(\\d+))[^;]*;\\s*\\/\\/([^\\n]*)/g;\n let m;\n while ((m = re.exec(src)) !== null) {\n const combo = /\"combo\"\\s*:\\s*\"([^\"]+)\"/.exec(m[3]);\n if (combo) out.push({ slot: Number(m[2]), name: m[1], combo: combo[1] });\n }\n return out;\n }\n function parseDefaultValue(s) {\n if (s.startsWith('\"')) return s.slice(1, -1);\n const n = Number(s);\n return Number.isFinite(n) ? n : void 0;\n }\n async function getEffectProgram(shaderName, combos, providedTextures) {\n let src = shaderSrcCache.get(shaderName);\n if (src === void 0) {\n const fragSrc = await shaderResolver(\"shaders/\" + shaderName + \".frag\") || \"\";\n const vertSrc = await shaderResolver(\"shaders/\" + shaderName + \".vert\") || \"\";\n src = { frag: fragSrc, vert: vertSrc, texCombos: parseTextureCombos(fragSrc) };\n shaderSrcCache.set(shaderName, src);\n }\n const effectiveCombos = { ...combos };\n for (const tc of src.texCombos) {\n if (providedTextures && providedTextures[tc.slot] && effectiveCombos[tc.combo] === void 0) {\n effectiveCombos[tc.combo] = 1;\n }\n }\n const key = shaderName + \"|\" + JSON.stringify(effectiveCombos);\n if (progCache.has(key)) return progCache.get(key);\n for (let attempt = 0; attempt < 4; attempt++) {\n const missing = /* @__PURE__ */ new Set();\n const resolver = (file) => {\n if (includeCache.has(file)) return includeCache.get(file);\n missing.add(file);\n return null;\n };\n const fragGlsl = rewriteXrayFragScale(hlsl2glsl(src.frag, \"frag\", effectiveCombos, resolver, src.vert));\n const vertGlsl = hlsl2glsl(src.vert, \"vert\", effectiveCombos, resolver, src.frag);\n if (missing.size === 0) {\n let prog;\n try {\n prog = linkProgram(gl, vertGlsl, fragGlsl);\n } catch (e) {\n throw new Error(\"shader=\" + shaderName + \" \" + (e && e.message));\n }\n const uni = /* @__PURE__ */ new Map();\n const n = gl.getProgramParameter(prog, gl.ACTIVE_UNIFORMS);\n for (let i = 0; i < n; i++) {\n const info = gl.getActiveUniform(prog, i);\n const base = info.name.replace(/\\[0\\]$/, \"\");\n uni.set(base, { loc: gl.getUniformLocation(prog, info.name), type: GL_TYPES[info.type] || \"unknown\", size: info.size });\n }\n const matMeta = { ...parseMaterialMeta(src.vert), ...parseMaterialMeta(src.frag) };\n const samplerDefaults = new Map([...parseSamplerDefaults(src.vert), ...parseSamplerDefaults(src.frag)]);\n const entry = { prog, uni, matMeta, samplerDefaults, fragGlsl, vertGlsl };\n progCache.set(key, entry);\n return entry;\n }\n await Promise.all(Array.from(missing).map(async (f) => {\n includeCache.set(f, await shaderResolver(\"shaders/\" + f) || \"\");\n }));\n }\n throw new Error(\"include 解析失败: \" + shaderName);\n }\n const whiteTex = makeTexture(gl, new Uint8Array([255, 255, 255, 255]), 1, 1);\n const transparentTex = makeTexture(gl, new Uint8Array([0, 0, 0, 0]), 1, 1);\n let pointerProvider = null;\n function setPointerProvider(fn) {\n pointerProvider = fn || null;\n }\n function readPointer() {\n if (!pointerProvider) return null;\n const p = typeof pointerProvider === \"function\" ? pointerProvider() : pointerProvider;\n return p && p.state ? p.state : p;\n }\n const parallaxState = { x: 0, y: 0, sx: 0, sy: 0 };\n let lastParallaxTime = 0;\n let layerParallaxScaleX = 0;\n let layerParallaxScaleY = 0;\n let lastFrametime = 1 / 60;\n let lastFrameTimeStamp = -1;\n const fadeDuration = typeof opts.fadeDuration === \"number\" && opts.fadeDuration >= 0 ? opts.fadeDuration : 1;\n const boolProp = (v, dflt) => {\n const raw = v !== null && typeof v === \"object\" ? v.value : v;\n if (raw === true || raw === 1) return true;\n if (raw === false || raw === 0) return false;\n return dflt;\n };\n const numProp2 = (v, dflt) => {\n const raw = v !== null && typeof v === \"object\" ? v.value : v;\n return typeof raw === \"number\" && Number.isFinite(raw) ? raw : dflt;\n };\n const fadeEnabled = (general) => opts.fade !== false && boolProp(general.camerafade, false);\n function cameraShakeOffset(general, time) {\n if (!boolProp(general.camerashake, false)) return null;\n const amp = numProp2(general.camerashakeamplitude, 0);\n if (amp === 0) return null;\n const rough = Math.max(0, Math.min(1, numProp2(general.camerashakeroughness, 0)));\n const speed = numProp2(general.camerashakespeed, 1);\n const t = time * speed;\n const lowX = Math.sin(t * 2.1) * Math.cos(t * 0.7);\n const lowY = Math.cos(t * 1.7) * Math.sin(t * 0.9);\n const hiX = Math.sin(t * 11.3) * Math.cos(t * 7.1);\n const hiY = Math.cos(t * 9.7) * Math.sin(t * 13.1);\n return {\n x: (lowX * (1 - rough) + hiX * rough) * amp,\n y: (lowY * (1 - rough) + hiY * rough) * amp\n };\n }\n function daytimeFraction() {\n const d = /* @__PURE__ */ new Date();\n return (d.getHours() * 3600 + d.getMinutes() * 60 + d.getSeconds()) / 86400;\n }\n function setVal(uni, name, setter) {\n const u = uni.get(name);\n if (u && u.loc !== null) setter(u.loc, u.type, u.size);\n }\n function parseVecValue(v) {\n if (typeof v === \"number\") return [v, v, v, v];\n const p = String(v).trim().split(/[\\s,]+/).map(Number);\n return [p[0] || 0, p[1] || 0, p[2] || 0, p[3] || 0];\n }\n function setConstant(uni, name, value) {\n const u = uni.get(name);\n if (!u || u.loc === null) return;\n const raw = value && value.value !== void 0 ? value.value : value;\n const arr = parseVecValue(raw);\n switch (u.type) {\n case \"float\":\n gl.uniform1f(u.loc, arr[0]);\n break;\n case \"int\":\n case \"bool\":\n gl.uniform1i(u.loc, raw === true || raw === 1 ? 1 : Math.round(arr[0]));\n break;\n case \"vec2\":\n gl.uniform2f(u.loc, arr[0], arr[1]);\n break;\n case \"vec3\":\n gl.uniform3f(u.loc, arr[0], arr[1], arr[2]);\n break;\n case \"vec4\":\n gl.uniform4f(u.loc, arr[0], arr[1], arr[2], arr[3]);\n break;\n case \"mat4\":\n gl.uniformMatrix4fv(u.loc, false, IDENT_M4);\n break;\n case \"mat3\":\n gl.uniformMatrix3fv(u.loc, false, IDENT_M3);\n break;\n }\n }\n const mat3Identity = () => new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);\n function bindSystemUniforms(uni, layer, time, projW, projH, mvp, modelM, viewProjM, resolutions, passProj, cam) {\n setVal(uni, \"g_Time\", (l) => gl.uniform1f(l, time));\n setVal(uni, \"g_Daytime\", (l) => gl.uniform1f(l, daytimeFraction()));\n setVal(uni, \"g_ModelViewProjectionMatrix\", (l) => gl.uniformMatrix4fv(l, false, mvp));\n setVal(uni, \"g_ModelMatrix\", (l) => gl.uniformMatrix4fv(l, false, modelM));\n setVal(uni, \"g_ViewProjectionMatrix\", (l) => gl.uniformMatrix4fv(l, false, viewProjM));\n if (uni.get(\"g_ModelViewProjectionMatrixInverse\")) {\n let t0 = null;\n for (const [i, res] of resolutions) if (i === 0) t0 = res;\n const mvpInv = t0 && t0[0] > 0 && t0[1] > 0 ? mat4Transpose(mat4Scale(mat4Identity(), t0[0] / 2, t0[1] / 2, 1)) : IDENT_M4;\n setVal(uni, \"g_ModelViewProjectionMatrixInverse\", (l) => gl.uniformMatrix4fv(l, false, mvpInv));\n }\n setVal(uni, \"g_Brightness\", (l) => gl.uniform1f(l, layer.brightness));\n setVal(uni, \"g_UserAlpha\", (l) => gl.uniform1f(l, layer.alpha));\n setVal(uni, \"g_Alpha\", (l) => gl.uniform1f(l, layer.alpha));\n setVal(uni, \"g_Color\", (l) => gl.uniform3f(l, layer.color[0], layer.color[1], layer.color[2]));\n setVal(uni, \"g_Color4\", (l) => gl.uniform4f(l, layer.color[0], layer.color[1], layer.color[2], 1));\n setVal(uni, \"g_CompositeColor\", (l) => gl.uniform3f(l, layer.color[0], layer.color[1], layer.color[2]));\n setVal(uni, \"g_TexelSize\", (l) => gl.uniform2f(l, 1 / projW, 1 / projH));\n setVal(uni, \"g_TexelSizeHalf\", (l) => gl.uniform2f(l, 0.5 / projW, 0.5 / projH));\n setVal(uni, \"g_TextureReductionScale\", (l) => gl.uniform1f(l, 1));\n const p = readPointer();\n const parkXray = xrayShouldParkPointer(!!(p && p.has), !!uni.get(\"g_PointerScale\"));\n let pu = parkXray ? XRAY_IDLE_SCREEN_UV : p ? p.u : 0.5;\n let pv = parkXray ? XRAY_IDLE_SCREEN_UV : p ? p.v : 0.5;\n let plu = parkXray ? XRAY_IDLE_SCREEN_UV : p ? p.lastU : 0.5;\n let plv = parkXray ? XRAY_IDLE_SCREEN_UV : p ? p.lastV : 0.5;\n if (cam && layer && layer.size && layer.size[0] > 0 && layer.size[1] > 0) {\n const lw = Math.abs(layer.size[0] * layer.scale[0]);\n const lh = Math.abs(layer.size[1] * layer.scale[1]);\n if (lw > 0 && lh > 0) {\n const lx = layer.origin[0] - lw / 2;\n const ly = cam.projH - layer.origin[1] - lh / 2;\n const toLayerU = (u) => (cam.offX + u * cam.viewW - lx) / lw;\n const toLayerV = (v) => (cam.offY + v * cam.viewH - ly) / lh;\n pu = toLayerU(pu);\n pv = toLayerV(pv);\n plu = toLayerU(plu);\n plv = toLayerV(plv);\n }\n }\n setVal(uni, \"g_PointerPosition\", (l) => gl.uniform2f(l, pu, pv));\n setVal(uni, \"g_PointerPositionLast\", (l) => gl.uniform2f(l, plu, plv));\n setVal(uni, \"g_PointerState\", (l) => gl.uniform4f(l, pu, pv, p && p.leftDown ? 1 : 0, 0));\n setVal(uni, \"g_ParallaxPosition\", (l) => gl.uniform2f(l, parallaxState.sx * 0.5 + 0.5, parallaxState.sy * 0.5 + 0.5));\n setVal(uni, \"g_Frametime\", (l) => gl.uniform1f(l, lastFrametime));\n if (uni.get(\"g_EffectTextureProjectionMatrixInverse\")) {\n setVal(uni, \"g_EffectTextureProjectionMatrixInverse\", (l) => gl.uniformMatrix4fv(l, false, IDENT_M4));\n }\n for (let i = 0; i < 8; i++) {\n setVal(uni, \"g_Texture\" + i, (l) => gl.uniform1i(l, i));\n }\n for (const [i, res] of resolutions) {\n setVal(uni, \"g_Texture\" + i + \"Resolution\", (l) => gl.uniform4f(l, res[0], res[1], res[2], res[3]));\n }\n if (audioSnapshot) {\n const snap = typeof audioSnapshot === \"function\" ? audioSnapshot() : audioSnapshot;\n if (snap) {\n for (const [name, key] of AUDIO_SPECTRUM_UNIFORMS) {\n const arr = snap[key];\n if (arr) setVal(uni, name, (l) => gl.uniform1fv(l, arr));\n }\n }\n }\n }\n function bindConstants(uni, constants, matMeta) {\n for (const [matKey, value] of Object.entries(constants || {})) {\n const entry = matMeta && matMeta[matKey];\n if (!entry) continue;\n setConstant(uni, entry.uniform, value);\n }\n for (const [matKey, entry] of Object.entries(matMeta || {})) {\n if (!constants || !(matKey in constants)) {\n if (entry.default !== void 0) setConstant(uni, entry.uniform, entry.default);\n }\n }\n }\n function parkXrayUntilPointer(uni) {\n const p = readPointer();\n if (!xrayShouldParkPointer(!!(p && p.has), !!uni.get(\"g_PointerScale\"))) return;\n setVal(uni, \"g_PointerScale\", (l) => gl.uniform1f(l, 0));\n }\n function scriptedConstants(constants, cacheKey, time, layer) {\n if (!constants) return constants;\n let hasScript = false;\n for (const v of Object.values(constants)) {\n if (v !== null && typeof v === \"object\" && typeof v.script === \"string\") {\n hasScript = true;\n break;\n }\n }\n if (!hasScript) return constants;\n if (!evalObjectScriptFn) return constants;\n const out = { ...constants };\n for (const [key, v] of Object.entries(constants)) {\n if (v === null || typeof v !== \"object\" || typeof v.script !== \"string\") continue;\n const sk = cacheKey + \"|\" + key;\n let sb = constScriptCache.get(sk);\n if (sb === void 0) {\n constScriptDiag.total++;\n try {\n sb = evalObjectScriptFn(v.script, v.scriptproperties || v.scriptProperties || null, {\n userProperties: userProps || {},\n audioViews: scriptAudioViews || void 0,\n // [we-scene patch] 必须传 layer:媒体回调里 `thisObject.visible = e.hasThumbnail`\n // 与 `thisObject.getAnimation().play()` 都要写回真图层。此前没传,\n // thisObject 是个哑层代理,这 101 处脚本的写入全进了空气。\n layer: layer || null,\n // [we-scene patch] 与文字/对象脚本共用同一份 shared。3396722575 的\n // geometric_transform.Strength 写 `value = shared.textz1`,由隐藏层\n // object 86 每帧写入;不注入则读到 undefined,退回快照 0.5,圆环不呼吸。\n shared: scriptShared || {},\n // 3791967416 聚光灯 delayedPointer 读 input.cursorScreenPosition。\n // 常量沙箱此前不传 inputView,光标恒为 0,灯钉在左上角。\n inputView: scriptInputView || void 0,\n // [we-scene patch] 延时逻辑(全库常量挂点 8 处)。此前拿 no-op stub,\n // 定时回调从不触发。\n setTimeout: scriptTimers ? scriptTimers.setTimeout : void 0,\n clearTimeout: scriptTimers ? scriptTimers.clearTimeout : void 0,\n setInterval: scriptTimers ? scriptTimers.setInterval : void 0,\n clearInterval: scriptTimers ? scriptTimers.clearInterval : void 0\n });\n } catch {\n sb = null;\n }\n if (sb) constScriptDiag.ok++;\n else constScriptDiag.failed++;\n constScriptCache.set(sk, sb);\n if (sb) {\n const rawVal = v.value !== void 0 ? v.value : v;\n const base0 = parseVecValue(rawVal);\n const scalar = typeof rawVal === \"number\";\n const initArg = scalar ? base0[0] : { x: base0[0], y: base0[1], z: base0[2] };\n if (sb.init) sb.init(initArg);\n }\n if (sb && typeof sb.applyUserProperties === \"function\") {\n try {\n sb.applyUserProperties(userProps || {});\n } catch {\n }\n }\n if (sb && sb.hasMediaHook && constScriptSink) {\n try {\n constScriptSink(sb);\n } catch {\n }\n }\n }\n if (!sb || sb.disabled || !sb.hasUpdate) continue;\n if (sb.engine) {\n sb.engine.runtime = time;\n sb.engine.frametime = lastFrametime;\n sb.engine.timeOfDay = daytimeFraction();\n const ptr = readPointer();\n if (ptr && ptr.screenW && ptr.screenH) {\n sb.engine.screenResolution = { x: ptr.screenW, y: ptr.screenH };\n }\n }\n const base = parseVecValue(v.value !== void 0 ? v.value : v);\n const isScalar = typeof (v.value !== void 0 ? v.value : v) === \"number\";\n const arg = isScalar ? base[0] : { x: base[0], y: base[1], z: base[2] };\n let ret;\n try {\n ret = sb.callUpdate(arg);\n } catch {\n ret = void 0;\n }\n const src = ret !== void 0 && ret !== null ? ret : arg;\n if (typeof src === \"number\" && Number.isFinite(src)) out[key] = src;\n else if (src && typeof src === \"object\") {\n const x = Number(src.x), y = Number(src.y);\n const z = Number(src.z);\n if (Number.isFinite(x) && Number.isFinite(y)) {\n out[key] = Number.isFinite(z) ? `${x} ${y} ${z}` : `${x} ${y} 0`;\n }\n }\n }\n return out;\n }\n function animatedConstants(constants, cacheKey, time) {\n if (!constants) return constants;\n let hasAnim = false;\n for (const v of Object.values(constants)) {\n if (v && typeof v === \"object\" && v.animation && v.animation.options) {\n hasAnim = true;\n break;\n }\n }\n if (!hasAnim) return constants;\n const out = { ...constants };\n for (const [key, v] of Object.entries(constants)) {\n if (!v || typeof v !== \"object\" || !v.animation || !v.animation.options) continue;\n const sk = cacheKey + \"|anim|\" + key;\n let rec = constAnimCache.get(sk);\n if (!rec) {\n const ctrl = createAnimation(v.animation);\n const raw = v.value !== void 0 ? v.value : 0;\n ctrl.baseNumeric = Array.isArray(raw) ? raw.slice() : raw;\n rec = { ctrl };\n constAnimCache.set(sk, rec);\n }\n if (rec.ctrl.playing) rec.ctrl.setFrame(time * rec.ctrl.fps * rec.ctrl.rate);\n out[key] = rec.ctrl.applyTo(rec.ctrl.baseNumeric);\n }\n return out;\n }\n function resolveTextureName(name, inputFBO, effectFBOs, textures) {\n if (name === null || name === void 0 || name === \"\") return null;\n if (name.startsWith(\"_rt_\")) {\n if (name.startsWith(\"_rt_imageLayerComposite\")) {\n if (!compositeEnabled) return inputFBO;\n if (compositeFBOs.has(name)) return compositeFBOs.get(name);\n return inputFBO;\n }\n if (effectFBOs.has(name)) return effectFBOs.get(name);\n return null;\n }\n if (effectFBOs.has(name)) return effectFBOs.get(name);\n return textures.get(name) || null;\n }\n const PASS_QUAD = passQuadVerts();\n const LOCAL_QUAD = localQuadVerts();\n const layerQuadCache = /* @__PURE__ */ new Map();\n function layerQuad(w, h) {\n const key = w + \"x\" + h;\n let q = layerQuadCache.get(key);\n if (q === void 0) {\n q = layerQuadVerts(w, h);\n layerQuadCache.set(key, q);\n }\n return q;\n }\n let currentQuadKey = null;\n function uploadQuad(key, verts) {\n if (currentQuadKey === key) return;\n gl.bindBuffer(gl.ARRAY_BUFFER, vbuf);\n gl.bufferData(gl.ARRAY_BUFFER, verts, gl.DYNAMIC_DRAW);\n currentQuadKey = key;\n }\n const copyUni = {\n mvp: gl.getUniformLocation(copyProg, \"u_MVP\"),\n tex: gl.getUniformLocation(copyProg, \"u_Tex\"),\n color: gl.getUniformLocation(copyProg, \"u_Color4\"),\n frameOrigin: gl.getUniformLocation(copyProg, \"u_FrameOrigin\"),\n frameU: gl.getUniformLocation(copyProg, \"u_FrameU\"),\n frameV: gl.getUniformLocation(copyProg, \"u_FrameV\"),\n blendPrep: gl.getUniformLocation(copyProg, \"u_BlendPrep\")\n };\n const compUni = {\n mvp: gl.getUniformLocation(compProg, \"u_MVP\"),\n tex: gl.getUniformLocation(compProg, \"u_Tex\"),\n blendPrep: gl.getUniformLocation(compProg, \"u_BlendPrep\")\n };\n const backdropUni = {\n mvp: gl.getUniformLocation(backdropProg, \"u_MVP\"),\n tex: gl.getUniformLocation(backdropProg, \"u_Tex\")\n };\n const IDENT_M4 = mat4Identity();\n const IDENT_M3 = mat3Identity();\n function setBlend(mode) {\n if (mode === \"translucent\") {\n gl.enable(gl.BLEND);\n gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n } else if (mode === \"additive\") {\n gl.enable(gl.BLEND);\n gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE);\n } else {\n gl.disable(gl.BLEND);\n }\n }\n let blendPrep = 0;\n function setColorBlend(colorBlendMode) {\n const { mode, prep } = colorBlendPlan(colorBlendMode);\n blendPrep = prep;\n if (mode === \"additive\") {\n gl.enable(gl.BLEND);\n gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE);\n } else if (mode === \"multiply\") {\n gl.enable(gl.BLEND);\n gl.blendFuncSeparate(gl.DST_COLOR, gl.ZERO, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n } else if (mode === \"screen\") {\n gl.enable(gl.BLEND);\n gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_COLOR, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n } else {\n setBlend(\"translucent\");\n }\n }\n function isLayerOffscreen(layer, cam) {\n if (cam && cam.perspective) return false;\n const sw = layer.size[0] * layer.scale[0];\n const sh = layer.size[1] * layer.scale[1];\n if (sw === 0 || sh === 0) return false;\n let halfW = Math.abs(sw) / 2;\n let halfH = Math.abs(sh) / 2;\n const ang = layer.angles[2];\n if (ang !== 0) {\n const c = Math.abs(Math.cos(ang));\n const s = Math.abs(Math.sin(ang));\n const rw = halfW * c + halfH * s;\n const rh = halfW * s + halfH * c;\n halfW = rw;\n halfH = rh;\n }\n const cx = layer.origin[0];\n const cy = cam.projH - layer.origin[1];\n let margin = 64;\n if (layer.parallaxDepth) {\n margin += Math.abs(parallaxDepthFactor(layer.parallaxDepth[0]) * layerParallaxScaleX);\n margin += Math.abs(parallaxDepthFactor(layer.parallaxDepth[1]) * layerParallaxScaleY);\n }\n const ext = puppetAnimMargin(layer);\n const marginX = margin + ext[0];\n const marginY = margin + ext[1];\n return cx + halfW + marginX < cam.offX || cx - halfW - marginX > cam.offX + cam.viewW || cy + halfH + marginY < cam.offY || cy - halfH - marginY > cam.offY + cam.viewH;\n }\n function spriteFrameBasis(layer, texObj, time) {\n if (!layer.spriteSheet) return null;\n const frames = texObj && texObj.frames;\n const list = Array.isArray(frames) ? frames : frames && frames.list;\n if (!list || list.length === 0) return null;\n const texW = frames && frames.atlasWidth || texObj.width || 0;\n const texH = frames && frames.atlasHeight || texObj.height || 0;\n if (texW <= 0 || texH <= 0) return null;\n layer.spriteFrameCount = list.length;\n let idx = 0;\n const anim2 = layer.textureAnimation;\n if (anim2 && anim2.frame !== null && anim2.frame !== void 0) {\n idx = Math.floor(Number(anim2.frame)) || 0;\n if (!(idx >= 0)) idx = 0;\n if (idx >= list.length) idx = list.length - 1;\n } else if (list.length > 1) {\n const paused = anim2 && anim2.playing === false;\n let total = 0;\n for (const f2 of list) total += f2.duration > 0 ? f2.duration : 1 / 30;\n if (!paused && total > 0) {\n let t = time % total;\n if (t < 0) t += total;\n for (let i = 0; i < list.length; i++) {\n const d = list[i].duration > 0 ? list[i].duration : 1 / 30;\n if (t < d) {\n idx = i;\n break;\n }\n t -= d;\n idx = i;\n }\n }\n }\n const f = list[idx];\n const uX = f.uDir ? f.uDir[0] : f.width;\n const uY = f.uDir ? f.uDir[1] : 0;\n const vX = f.vDir ? f.vDir[0] : 0;\n const vY = f.vDir ? f.vDir[1] : f.height;\n return [f.x / texW, f.y / texH, uX / texW, uY / texH, vX / texW, vY / texH];\n }\n function layerModelMatrix(layer, cam) {\n const w = layer.size[0] * layer.scale[0];\n const h = layer.size[1] * layer.scale[1];\n let m = mat4Identity();\n if (cam && cam.perspective) {\n const o = layerWorldOrigin(layer, cam);\n m = mat4Translate(m, o[0], o[1], o[2]);\n const ax = layer.angles[0] || 0;\n const ay = layer.angles[1] || 0;\n if (ay) m = mat4RotateY(m, ay);\n if (ax) m = mat4RotateX(m, ax);\n m = mat4RotateZ(m, -layer.angles[2]);\n } else {\n m = mat4Translate(m, layer.origin[0], cam.projH - layer.origin[1], layer.origin[2]);\n if (layer.parallaxDepth && (layerParallaxScaleX !== 0 || layerParallaxScaleY !== 0)) {\n const fx = parallaxDepthFactor(layer.parallaxDepth[0]);\n const fy = parallaxDepthFactor(layer.parallaxDepth[1]);\n m = mat4Translate(m, fx * layerParallaxScaleX, fy * layerParallaxScaleY, 0);\n }\n m = mat4RotateZ(m, -layer.angles[2]);\n }\n const a = ALIGN[layer.alignment] || [0.5, 0.5];\n if (a[0] !== 0.5 || a[1] !== 0.5) {\n m = mat4Translate(m, (0.5 - a[0]) * w, (0.5 - a[1]) * h, 0);\n }\n return { m, w, h };\n }\n function compositeLayer(prog, inputTex, color4, layer, cam, viewProj, width, height, premultiplied = false, frameBasis = null, contentRect = null) {\n const base = layerModelMatrix(layer, cam);\n let m = base.m;\n if (contentRect) {\n const cx = (contentRect[0] + contentRect[2] / 2) * layer.scale[0];\n const cy = (contentRect[1] + contentRect[3] / 2) * layer.scale[1];\n m = mat4Translate(m, cx, -cy, 0);\n m = mat4Scale(m, contentRect[2] * layer.scale[0], contentRect[3] * layer.scale[1], 1);\n } else {\n m = mat4Scale(m, base.w, base.h, 1);\n }\n const mvp = mat4Multiply(viewProj, m);\n const uni = prog === compProg ? compUni : copyUni;\n gl.useProgram(prog);\n if (premultiplied) {\n blendPrep = 0;\n gl.enable(gl.BLEND);\n if (layer.containerAlphaMeaningful) {\n gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n } else {\n gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n }\n } else {\n setColorBlend(layer.colorBlendMode);\n }\n if (uni.blendPrep !== null && uni.blendPrep !== void 0) {\n gl.uniform1i(uni.blendPrep, blendPrep);\n }\n if (groupTarget) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, groupTarget.fbo.fbo);\n gl.viewport(0, 0, groupTarget.w, groupTarget.h);\n } else {\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.viewport(0, 0, width, height);\n }\n gl.bindVertexArray(vao);\n uploadQuad(\"local\", LOCAL_QUAD);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, inputTex);\n gl.uniform1i(uni.tex, 0);\n gl.uniformMatrix4fv(uni.mvp, false, mvp);\n if (uni.color !== null && uni.color !== void 0) gl.uniform4f(uni.color, color4[0], color4[1], color4[2], color4[3]);\n setFrameBasis(uni, frameBasis);\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n function setFrameBasis(uni, basis) {\n if (!uni || uni.frameOrigin === null || uni.frameOrigin === void 0) return;\n if (basis) {\n gl.uniform2f(uni.frameOrigin, basis[0], basis[1]);\n gl.uniform2f(uni.frameU, basis[2], basis[3]);\n gl.uniform2f(uni.frameV, basis[4], basis[5]);\n } else {\n gl.uniform2f(uni.frameOrigin, 0, 0);\n gl.uniform2f(uni.frameU, 1, 0);\n gl.uniform2f(uni.frameV, 0, 1);\n }\n }\n let puppetDrawFn = null;\n let groupTarget = null;\n const compositeFBOs = /* @__PURE__ */ new Map();\n const pendingEmptyCompose = /* @__PURE__ */ new Map();\n let compositeEnabled = true;\n function puppetModelMatrix(layer, cam) {\n const base = layerModelMatrix(layer, cam);\n const sy = cam && cam.perspective ? layer.scale[1] : -layer.scale[1];\n const sz = cam && cam.perspective ? layer.scale[2] || 1 : 1;\n return mat4Scale(base.m, layer.scale[0], sy, sz);\n }\n function drawPuppetDirect(layer, cam, viewProj, width, height, time, overrideTex) {\n if (groupTarget) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, groupTarget.fbo.fbo);\n gl.viewport(0, 0, groupTarget.w, groupTarget.h);\n } else {\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.viewport(0, 0, width, height);\n }\n const mvp = mat4Multiply(viewProj, puppetModelMatrix(layer, cam));\n puppetDrawFn(layer, mvp, { time, overrideTex: overrideTex || null });\n currentQuadKey = null;\n }\n let backdropTex = null;\n function captureBackdrop(width, height) {\n if (backdropTex === null) {\n backdropTex = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, backdropTex);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n }\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.bindTexture(gl.TEXTURE_2D, backdropTex);\n gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.RGB8, 0, 0, width, height, 0);\n return backdropTex;\n }\n function drawBackdropToFBO(layer, fbo, fboW, fboH, cam, viewProj, width, height) {\n const src = captureBackdrop(width, height);\n const base = layerModelMatrix(layer, cam);\n let m = base.m;\n m = mat4Scale(m, base.w, base.h, 1);\n const mvp = mat4Multiply(viewProj, m);\n const corners = [\n [-0.5, 0.5],\n [0.5, 0.5],\n // 屏幕**下方**两角\n [-0.5, -0.5],\n [0.5, -0.5]\n // 屏幕**上方**两角\n ].map(([lx, ly]) => {\n const p = mat4TransformPoint(mvp, lx, ly, 0);\n return [p[0] * 0.5 + 0.5, p[1] * 0.5 + 0.5];\n });\n const [sbl, sbr, stl, str] = corners;\n const verts = new Float32Array([\n 0,\n fboH,\n 0,\n sbl[0],\n sbl[1],\n 0,\n 0,\n 0,\n stl[0],\n stl[1],\n fboW,\n fboH,\n 0,\n sbr[0],\n sbr[1],\n fboW,\n fboH,\n 0,\n sbr[0],\n sbr[1],\n 0,\n 0,\n 0,\n stl[0],\n stl[1],\n fboW,\n 0,\n 0,\n str[0],\n str[1]\n ]);\n gl.useProgram(backdropProg);\n setBlend(\"normal\");\n gl.disable(gl.BLEND);\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo.fbo);\n gl.viewport(0, 0, fboW, fboH);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.bindVertexArray(vao);\n gl.bindBuffer(gl.ARRAY_BUFFER, vbuf);\n gl.bufferData(gl.ARRAY_BUFFER, verts, gl.DYNAMIC_DRAW);\n currentQuadKey = null;\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, src);\n gl.uniform1i(backdropUni.tex, 0);\n gl.uniformMatrix4fv(backdropUni.mvp, false, mat4Ortho(0, fboW, 0, fboH, -1e4, 1e4));\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n gl.enable(gl.BLEND);\n }\n function captureEmptyComposeAtZOrder(layer, cam, viewProj, width, height) {\n if (!compositeEnabled || groupTarget) return;\n const names = pendingEmptyCompose.get(layer.id);\n if (!names || names.size === 0) return;\n const sw = Math.max(1, Math.round(Math.abs(layer.size[0] * (layer.scale[0] || 1))));\n const sh = Math.max(1, Math.round(Math.abs(layer.size[1] * (layer.scale[1] || 1))));\n if (sw <= 1 && sh <= 1) return;\n const fbo = getFBO(sw, sh, \"lc:\" + layer.id);\n drawBackdropToFBO(layer, fbo, sw, sh, cam, viewProj, width, height);\n for (const n of names) compositeFBOs.set(n, fbo);\n pendingEmptyCompose.delete(layer.id);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.viewport(0, 0, width, height);\n }\n async function renderScene(scene, textures, width, height, time, fit, alignX, alignY) {\n fboStamp++;\n gl.viewport(0, 0, width, height);\n const general = scene.general || {};\n if (general.clearenabled !== false) {\n const cc = parseVec3Local(general.clearcolor || \"0 0 0\");\n gl.clearColor(cc[0], cc[1], cc[2], 1);\n } else {\n gl.clearColor(0, 0, 0, 1);\n }\n gl.clear(gl.COLOR_BUFFER_BIT);\n if (lastFrameTimeStamp >= 0) {\n const dt = time - lastFrameTimeStamp;\n lastFrametime = dt > 0 && dt < 1 ? dt : Math.min(0.1, Math.max(1e-3, dt || 1 / 60));\n }\n lastFrameTimeStamp = time;\n const cam = buildCamera(scene, width, height, fit, alignX, alignY);\n let viewProj = mat4Multiply(cam.projection, cam.view);\n const parRaw = general.cameraparallax;\n const parEnabled = parRaw === true || parRaw !== null && typeof parRaw === \"object\" && parRaw.value === true;\n layerParallaxScaleX = 0;\n layerParallaxScaleY = 0;\n const ptr = readPointer();\n if (ptr) {\n parallaxState.x = ptr.u * 2 - 1;\n parallaxState.y = ptr.v * 2 - 1;\n }\n if (!cam.perspective && opts.parallax !== false && parEnabled) {\n const numProp = (v, dflt) => {\n const raw = v !== null && typeof v === \"object\" ? v.value : v;\n return typeof raw === \"number\" && Number.isFinite(raw) ? raw : dflt;\n };\n const amount = numProp(general.cameraparallaxamount, 0);\n const influence = numProp(general.cameraparallaxmouseinfluence, 1);\n const delay = numProp(general.cameraparallaxdelay, 1);\n const parDt = time - lastParallaxTime;\n lastParallaxTime = time;\n const parAlpha = parDt > 0 ? 1 - Math.exp(-parDt / Math.max(0.05, delay)) : 1;\n parallaxState.sx += (parallaxState.x - parallaxState.sx) * parAlpha;\n parallaxState.sy += (parallaxState.y - parallaxState.sy) * parAlpha;\n const strength = amount * influence;\n const PARALLAX_MAX_PX = 60;\n const rawOffX = parallaxState.sx * strength * cam.viewW;\n const rawOffY = parallaxState.sy * strength * cam.viewH;\n const over = Math.max(Math.abs(rawOffX), Math.abs(rawOffY)) / PARALLAX_MAX_PX;\n const damp = over > 1 ? 1 / over : 1;\n layerParallaxScaleX = -(rawOffX * damp);\n layerParallaxScaleY = -(rawOffY * damp);\n }\n if (!cam.perspective && opts.shake !== false) {\n const sh = cameraShakeOffset(general, time);\n if (sh) {\n const px = sh.x * cam.viewW * 0.02;\n const py = sh.y * cam.viewH * 0.02;\n if (px !== 0 || py !== 0) {\n viewProj = mat4Multiply(viewProj, mat4Translate(mat4Identity(), px, py, 0));\n }\n }\n }\n if (pointerProvider) {\n const src = typeof pointerProvider === \"function\" ? pointerProvider() : pointerProvider;\n if (src && typeof src.syncWorld === \"function\") {\n src.syncWorld(cam, 0, 0);\n }\n }\n if (!containerDiagDone) {\n containerDiagDone = true;\n const cs = (scene.layers || []).filter((l) => l.isContainer);\n const candidates = cs.filter((l) => (l.effects || []).some((e) => e.visible) && !l.hasChildren);\n const resolved = candidates.filter((l) => (l.effects || []).some((e) => (e.materialPasses || []).length > 0));\n diag(\n `containers total=${cs.length} canvasCandidates=${candidates.length} passesResolved=${resolved.length} names=${candidates.slice(0, 4).map((l) => l.name || \"?\").join(\"/\")}`\n );\n }\n await renderCompositeSources(scene, textures, cam, width, height, time);\n const layerById = /* @__PURE__ */ new Map();\n for (const l of scene.layers) if (l.id !== void 0) layerById.set(l.id, l);\n const groupChildIds = /* @__PURE__ */ new Set();\n for (const layer of scene.layers) {\n if (!layer.visible || layer.destroyed || !layer.isContainer || !layer.hasChildren) continue;\n if (!(layer.effects || []).some((e) => e.visible)) continue;\n const kids = layer.childIds || [];\n if (kids.length === 0) continue;\n collectGroupDescendantIds(layer, layerById, groupChildIds);\n }\n if (particleAdvanceFn) {\n try {\n particleAdvanceFn();\n } catch (e) {\n diag(\"particle advance error: \" + (e && e.message));\n }\n }\n const drawLayers = cam.perspective ? scene.layers.slice().sort((a, b) => Number(!!b.isSkybox) - Number(!!a.isSkybox)) : scene.layers;\n for (const layer of drawLayers) {\n if (!layer.visible || layer.destroyed) continue;\n if (layer.isPostProcess && !(layer.effects || []).some((e) => e.visible)) continue;\n if (groupChildIds.has(layer.id)) continue;\n if (layer.isContainer) {\n const hasVisibleEffects = (layer.effects || []).some((e) => e.visible);\n if (!hasVisibleEffects) {\n captureEmptyComposeAtZOrder(layer, cam, viewProj, width, height);\n continue;\n }\n if (layer.hasChildren) {\n if ((layer.childIds || []).length > 0) {\n await renderContainerGroup(layer, scene, textures, cam, viewProj, width, height, time);\n }\n continue;\n }\n }\n if (layer.particle) {\n if (particleRenderByLayer) {\n try {\n await particleRenderByLayer(layer.id, cam, viewProj, width, height);\n } catch (e) {\n diag(\"particle render error: \" + (e && e.message));\n }\n }\n continue;\n }\n if (isLayerOffscreen(layer, cam)) continue;\n await renderLayer(layer, textures, cam, viewProj, width, height, time);\n }\n if (fadeEnabled(general) && time < fadeDuration) {\n const k = Math.max(0, Math.min(1, time / fadeDuration));\n const cover = 1 - k * k * (3 - 2 * k);\n if (cover > 2e-3) {\n const cc = parseVec3Local(general.clearcolor || \"0 0 0\");\n gl.useProgram(copyProg);\n gl.enable(gl.BLEND);\n gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.viewport(0, 0, width, height);\n gl.bindVertexArray(vao);\n uploadQuad(\"pass\", PASS_QUAD);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, whiteTex);\n gl.uniform1i(copyUni.tex, 0);\n gl.uniform4f(copyUni.color, cc[0], cc[1], cc[2], cover);\n setFrameBasis(copyUni, null);\n if (copyUni.blendPrep !== null && copyUni.blendPrep !== void 0) {\n gl.uniform1i(copyUni.blendPrep, 0);\n }\n gl.uniformMatrix4fv(copyUni.mvp, false, IDENT_M4);\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n }\n gl.bindVertexArray(null);\n pruneUnusedFbos();\n }\n async function renderCompositeSources(scene, textures, cam, width, height, time) {\n compositeFBOs.clear();\n pendingEmptyCompose.clear();\n const wanted = /* @__PURE__ */ new Map();\n const selfRefIds = /* @__PURE__ */ new Set();\n let noteOwner = null;\n const noteName = (n) => {\n if (typeof n !== \"string\") return;\n const m = /^_rt_imageLayerComposite_(\\d+)_[a-z]$/.exec(n);\n if (!m) return;\n const oid = Number(m[1]);\n if (noteOwner !== null && oid === noteOwner) selfRefIds.add(oid);\n let set = wanted.get(oid);\n if (!set) {\n set = /* @__PURE__ */ new Set();\n wanted.set(oid, set);\n }\n set.add(n);\n };\n for (const layer of scene.layers || []) {\n noteOwner = layer.id;\n for (const eff2 of layer.effects || []) {\n if (!eff2.visible) continue;\n for (const p of eff2.passes || []) {\n for (const t of p.textures || []) noteName(t);\n }\n for (const mp of eff2.materialPasses || []) {\n for (const b of mp.binds || []) noteName(b && b.name);\n for (const t of mp.textures || []) noteName(t);\n }\n }\n }\n if (wanted.size === 0) return;\n for (const [oid, names] of wanted) {\n const src = (scene.layers || []).find((l) => l.id === oid);\n if (!src || src.particle || src.isPostProcess) continue;\n if (selfRefIds.has(oid)) continue;\n const srcImage = typeof src.image === \"string\" ? src.image : \"\";\n const isEmptyCompose = src.isContainer && !src.hasChildren && srcImage.indexOf(\"models/util/composelayer\") === 0 && !(src.effects || []).some((e) => e.visible);\n if (isEmptyCompose) {\n pendingEmptyCompose.set(oid, names);\n continue;\n }\n const sw = Math.max(1, Math.round(Math.abs(src.size[0] * (src.scale[0] || 1))));\n const sh = Math.max(1, Math.round(Math.abs(src.size[1] * (src.scale[1] || 1))));\n if (sw <= 1 && sh <= 1) continue;\n const fbo = getFBO(sw, sh, \"lc:\" + oid);\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo.fbo);\n gl.viewport(0, 0, sw, sh);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n const srcCam = {\n view: cam.view,\n projection: mat4Ortho(0, sw, 0, sh, -1e4, 1e4),\n eye: cam.eye,\n projW: sw,\n projH: sh,\n offX: 0,\n offY: 0,\n viewW: sw,\n viewH: sh\n };\n const savedTarget = groupTarget;\n const savedOrigin = src.origin;\n const savedScale = src.scale;\n const savedAngles = src.angles;\n const savedVisible = src.visible;\n groupTarget = { fbo, w: sw, h: sh };\n src.origin = [sw / 2, srcCam.projH - sh / 2, savedOrigin[2]];\n src.scale = [Math.sign(savedScale[0]) || 1, Math.sign(savedScale[1]) || 1, savedScale[2]];\n src.angles = [0, 0, 0];\n src.visible = true;\n try {\n await renderLayer(src, textures, srcCam, srcCam.projection, sw, sh, time);\n for (const n of names) compositeFBOs.set(n, fbo);\n } catch (e) {\n diag(`composite 源层 ${oid} 渲染失败: ${e && e.message}`);\n } finally {\n groupTarget = savedTarget;\n src.origin = savedOrigin;\n src.scale = savedScale;\n src.angles = savedAngles;\n src.visible = savedVisible;\n }\n }\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.viewport(0, 0, width, height);\n }\n async function renderContainerGroup(container, scene, textures, cam, viewProj, width, height, time) {\n const gw = Math.max(1, Math.round(Math.abs(container.size[0])));\n const gh = Math.max(1, Math.round(Math.abs(container.size[1])));\n const kids = container.childIds || [];\n if (kids.length === 0) return;\n const byId = /* @__PURE__ */ new Map();\n for (const l of scene.layers) if (l.id !== void 0) byId.set(l.id, l);\n const idSet = collectGroupDescendantIds(container, byId);\n const children = scene.layers.filter((l) => idSet.has(l.id) && l.visible);\n if (children.length === 0) return;\n const groupFBO = getFBO(gw, gh, \"group\");\n gl.bindFramebuffer(gl.FRAMEBUFFER, groupFBO.fbo);\n gl.viewport(0, 0, gw, gh);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n const groupCam = {\n view: cam.view,\n projection: mat4Ortho(0, gw, 0, gh, -1e4, 1e4),\n eye: cam.eye,\n projW: gw,\n projH: gh,\n offX: 0,\n offY: 0,\n viewW: gw,\n viewH: gh\n };\n const groupViewProj = groupCam.projection;\n const csx = container.scale[0] || 1;\n const csy = container.scale[1] || 1;\n const cang = container.angles[2] || 0;\n const cos = Math.cos(-cang);\n const sin = Math.sin(-cang);\n groupTarget = { fbo: groupFBO, w: gw, h: gh };\n try {\n for (const child of children) {\n if (child.isPostProcess || child.particle) continue;\n if (child.isContainer && (child.childIds || []).length > 0) continue;\n const savedOrigin = child.origin;\n const savedScale = child.scale;\n const savedAngles = child.angles;\n const dx = savedOrigin[0] - container.origin[0];\n const dy = savedOrigin[1] - container.origin[1];\n const rx = (dx * cos - dy * sin) / csx;\n const ry = (dx * sin + dy * cos) / csy;\n child.origin = [gw / 2 + rx, gh / 2 + ry, savedOrigin[2]];\n child.scale = [savedScale[0] / csx, savedScale[1] / csy, savedScale[2]];\n child.angles = [savedAngles[0], savedAngles[1], savedAngles[2] - cang];\n try {\n await renderLayer(child, textures, groupCam, groupViewProj, gw, gh, time);\n } finally {\n child.origin = savedOrigin;\n child.scale = savedScale;\n child.angles = savedAngles;\n }\n }\n } finally {\n groupTarget = null;\n }\n container.groupTex = groupFBO.tex;\n container.groupW = gw;\n container.groupH = gh;\n try {\n await renderLayer(container, textures, cam, viewProj, width, height, time);\n } finally {\n container.groupTex = null;\n }\n }\n async function renderLayer(layer, textures, cam, viewProj, width, height, time) {\n const isPuppet = !!(layer.puppet && puppetDrawFn);\n const texObj = !layer.solid && layer.textureName ? textures.get(layer.textureName) : null;\n if (texObj && texObj.video) {\n const v = texObj.video;\n if (v.readyState >= 2 && v.currentTime !== texObj.lastUploaded) {\n gl.bindTexture(gl.TEXTURE_2D, texObj.glTex);\n try {\n let vw = v.videoWidth || texObj.width;\n let vh = v.videoHeight || texObj.height;\n const MAX_DIM = 2048;\n const maxTex = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n const limit = maxTex > 0 && maxTex < 4096 ? Math.min(MAX_DIM, maxTex) : MAX_DIM;\n let scale = 1;\n if (Math.max(vw, vh) > limit) scale = limit / Math.max(vw, vh);\n const uw = Math.max(1, Math.round(vw * scale));\n const uh = Math.max(1, Math.round(vh * scale));\n let src = v;\n if (videoCanvas && uw > 0 && uh > 0) {\n if (videoCanvas.width !== uw || videoCanvas.height !== uh) {\n videoCanvas.width = uw;\n videoCanvas.height = uh;\n }\n const vctx = videoCanvas.getContext(\"2d\");\n if (vctx) {\n vctx.clearRect(0, 0, uw, uh);\n vctx.drawImage(v, 0, 0, uw, uh);\n src = videoCanvas;\n }\n }\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, src);\n if (gl.getError() !== gl.NO_ERROR && videoCanvas) {\n try {\n const vctx2 = videoCanvas.getContext(\"2d\");\n const id = vctx2.getImageData(0, 0, videoCanvas.width, videoCanvas.height);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, videoCanvas.width, videoCanvas.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(id.data.buffer));\n while (gl.getError() !== gl.NO_ERROR) {\n }\n } catch (e) {\n }\n }\n texObj.width = uw;\n texObj.height = uh;\n texObj.lastUploaded = v.currentTime;\n if (!videoCanvasReported) {\n videoCanvasReported = true;\n diag(\"video tex ready \" + uw + \"x\" + uh + \" (src \" + vw + \"x\" + vh + \")\");\n }\n } catch (e) {\n if (!videoCanvasReported) {\n videoCanvasReported = true;\n diag(\"video upload FAIL: \" + (e && e.message || e));\n }\n console.warn(\"[we-scene] 视频帧上传失败:\", e && e.message, \"readyState=\", v.readyState, \"cur=\", v.currentTime);\n }\n }\n }\n const srcTex = layer.groupTex ? layer.groupTex : texObj && texObj.glTex ? texObj.glTex : layer.solid ? whiteTex : transparentTex;\n const usePassthrough = (!!layer.passthrough || !!layer.isPostProcess || layerWantsPreserveBackdrop(layer)) && !layer.groupTex && !texObj && !isPuppet;\n let contentW;\n let contentH;\n if (layer.groupTex) {\n contentW = layer.groupW || layer.size[0];\n contentH = layer.groupH || layer.size[1];\n } else if (isPuppet || !texObj) {\n contentW = layer.size[0];\n contentH = layer.size[1];\n } else {\n contentW = texObj.width;\n contentH = texObj.height;\n }\n if (!isPuppet && texObj && layer.spriteSheet) {\n const fl = texObj.frames;\n const flist = Array.isArray(fl) ? fl : fl && fl.list;\n if (flist && flist.length) {\n contentW = flist[0].width || contentW;\n contentH = flist[0].height || contentH;\n }\n }\n const w = Math.max(1, Math.round(contentW));\n const h = Math.max(1, Math.round(contentH));\n const color4 = [layer.color[0] * layer.brightness, layer.color[1] * layer.brightness, layer.color[2] * layer.brightness, layer.alpha];\n const effects = (layer.effects || []).filter((e) => e.visible);\n let fboW = w;\n let fboH = h;\n if (fboCapFactor > 0 && cam.projW > 0 && cam.projH > 0) {\n const visW = Math.min(Math.abs(layer.size[0] * layer.scale[0]), cam.viewW);\n const visH = Math.min(Math.abs(layer.size[1] * layer.scale[1]), cam.viewH);\n const screenW = visW * (width / cam.projW);\n const screenH = visH * (height / cam.projH);\n if (screenW > 0 && screenH > 0) {\n const capW = Math.max(64, Math.round(screenW * fboCapFactor));\n const capH = Math.max(64, Math.round(screenH * fboCapFactor));\n if (capW < w) fboW = capW;\n if (capH < h) fboH = capH;\n }\n }\n if (effects.length === 0) {\n if (isPuppet) drawPuppetDirect(layer, cam, viewProj, width, height, time);\n else {\n compositeLayer(\n copyProg,\n srcTex,\n color4,\n layer,\n cam,\n viewProj,\n width,\n height,\n false,\n spriteFrameBasis(layer, texObj, time)\n );\n }\n return;\n }\n const fboA = getFBO(fboW, fboH, \"ping\");\n const fboB = getFBO(fboW, fboH, \"pong\");\n const layerOrtho = mat4Ortho(0, fboW, 0, fboH, -1e4, 1e4);\n if (isPuppet) {\n gl.useProgram(copyProg);\n setBlend(\"normal\");\n gl.bindFramebuffer(gl.FRAMEBUFFER, fboA.fbo);\n gl.viewport(0, 0, fboW, fboH);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.bindVertexArray(vao);\n currentQuadKey = null;\n uploadQuad(\"layer\" + fboW + \"x\" + fboH, layerQuad(fboW, fboH));\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, srcTex);\n gl.uniform1i(copyUni.tex, 0);\n gl.uniform4f(copyUni.color, 1, 1, 1, 1);\n setFrameBasis(copyUni, null);\n if (copyUni.blendPrep !== null && copyUni.blendPrep !== void 0) {\n gl.uniform1i(copyUni.blendPrep, 0);\n }\n gl.uniformMatrix4fv(copyUni.mvp, false, layerOrtho);\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n } else if (usePassthrough) {\n drawBackdropToFBO(layer, fboA, fboW, fboH, cam, viewProj, width, height);\n } else {\n gl.useProgram(copyProg);\n setBlend(\"normal\");\n gl.bindFramebuffer(gl.FRAMEBUFFER, fboA.fbo);\n gl.viewport(0, 0, fboW, fboH);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.bindVertexArray(vao);\n uploadQuad(\"layer\" + fboW + \"x\" + fboH, layerQuad(fboW, fboH));\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, srcTex);\n gl.uniform1i(copyUni.tex, 0);\n const copyColor = effects.some((e) => e && e.layerMaterial) ? [1, 1, 1, color4[3]] : color4;\n gl.uniform4f(copyUni.color, copyColor[0], copyColor[1], copyColor[2], copyColor[3]);\n setFrameBasis(copyUni, spriteFrameBasis(layer, texObj, time));\n if (copyUni.blendPrep !== null && copyUni.blendPrep !== void 0) {\n gl.uniform1i(copyUni.blendPrep, 0);\n }\n gl.uniformMatrix4fv(copyUni.mvp, false, layerOrtho);\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n let curInput = fboA;\n let curDraw = fboB;\n const effectFBOs = /* @__PURE__ */ new Map();\n let inTargetSeq = false;\n let seqInput = fboA;\n const flatPasses = [];\n const failedEffects = /* @__PURE__ */ new Set();\n for (const eff2 of effects) {\n for (const f of eff2.fbos || []) {\n if (!effectFBOs.has(f.name)) {\n const [ew, eh] = effectFboSize(f, fboW, fboH);\n const tag = f.unique ? layer.id + \":\" + f.name : f.name;\n effectFBOs.set(f.name, getFBO(ew, eh, tag));\n }\n }\n const passes = eff2.materialPasses || [];\n for (let pi = 0; pi < passes.length; pi++) {\n flatPasses.push({ eff: eff2, mp: passes[pi], ov: eff2.passes && eff2.passes[pi] });\n }\n }\n const chainFragGlsl = [];\n for (let fi = 0; fi < flatPasses.length; fi++) {\n const { eff: eff2, mp, ov } = flatPasses[fi];\n if (failedEffects.has(eff2)) continue;\n const combos = { ...mp.combos || {}, ...ov && ov.combos || {} };\n const mpT = mp.textures || [];\n const ovT = ov && ov.textures || [];\n const mergedTex = [];\n for (let i = 0; i < Math.max(mpT.length, ovT.length); i++) {\n if (ovT[i] !== void 0 && ovT[i] !== null) mergedTex[i] = ovT[i];\n else mergedTex[i] = mpT[i] !== void 0 ? mpT[i] : null;\n }\n if (mp.copyCommand) {\n const srcEntry = mp.source ? effectFBOs.get(mp.source) : null;\n const dstEntry = mp.target ? effectFBOs.get(mp.target) : null;\n if (srcEntry && dstEntry) {\n gl.useProgram(compProg);\n setBlend(\"normal\");\n gl.bindFramebuffer(gl.FRAMEBUFFER, dstEntry.fbo);\n gl.viewport(0, 0, dstEntry.width, dstEntry.height);\n gl.bindVertexArray(vao);\n uploadQuad(\"pass\", PASS_QUAD);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, srcEntry.tex);\n gl.uniform1i(compUni.tex, 0);\n if (compUni.blendPrep !== null && compUni.blendPrep !== void 0) {\n gl.uniform1i(compUni.blendPrep, 0);\n }\n gl.uniformMatrix4fv(compUni.mvp, false, IDENT_M4);\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n continue;\n }\n let progEntry;\n try {\n progEntry = await getEffectProgram(mp.shader, combos, mergedTex);\n } catch (e) {\n console.warn(\"[we-scene] 跳过效果(pass 编译失败):\", mp.shader, e && e.message || e);\n failedEffects.add(eff2);\n continue;\n }\n const prog = progEntry.prog;\n const uni = progEntry.uni;\n if (progEntry.fragGlsl) chainFragGlsl.push(progEntry.fragGlsl);\n let outFBO;\n let passInput;\n if (mp.target) {\n if (!inTargetSeq) {\n seqInput = curInput;\n inTargetSeq = true;\n }\n outFBO = effectFBOs.get(mp.target) || curInput;\n passInput = seqInput;\n } else {\n inTargetSeq = false;\n outFBO = curDraw;\n passInput = curInput;\n }\n gl.useProgram(prog);\n setBlend(mp.blending || \"normal\");\n gl.bindFramebuffer(gl.FRAMEBUFFER, outFBO.fbo);\n gl.viewport(0, 0, outFBO.width, outFBO.height);\n gl.bindVertexArray(vao);\n uploadQuad(\"pass\", PASS_QUAD);\n const texNames = mp.textures || [];\n const maxTex = Math.max(texNames.length, 8);\n const resolutions = /* @__PURE__ */ new Map();\n const usedUnits = /* @__PURE__ */ new Set();\n for (let ti = 0; ti < maxTex; ti++) {\n let name = ti < texNames.length ? texNames[ti] : null;\n if (ov && ov.textures && ov.textures[ti] !== void 0 && ov.textures[ti] !== null) name = ov.textures[ti];\n for (const b of mp.binds || []) {\n if (b.index === ti) name = b.name;\n }\n let entry;\n if (ti === 0 && (name === null || name === void 0 || name === \"\")) {\n entry = passInput;\n } else {\n if ((name === null || name === void 0 || name === \"\") && progEntry.samplerDefaults) {\n const dflt = progEntry.samplerDefaults.get(ti);\n if (dflt) name = dflt;\n }\n entry = resolveTextureName(name, passInput, effectFBOs, textures);\n }\n if (name === \"previous\") entry = passInput;\n if (entry === null) entry = { glTex: whiteTex, width: 1, height: 1, tex: whiteTex };\n const t = entry.fbo ? entry : { tex: entry.glTex || whiteTex, width: entry.width || 1, height: entry.height || 1 };\n gl.activeTexture(gl.TEXTURE0 + ti);\n gl.bindTexture(gl.TEXTURE_2D, t.tex);\n usedUnits.add(ti);\n resolutions.set(ti, [t.width, t.height, t.width, t.height]);\n }\n bindSystemUniforms(uni, layer, time, cam.projW, cam.projH, IDENT_M4, layerOrtho, IDENT_M4, resolutions, layerOrtho, cam);\n bindConstants(\n uni,\n animatedConstants(\n scriptedConstants(\n { ...mp.constants || {}, ...ov && ov.constantshadervalues || {} },\n (layer.id || layer.name || \"?\") + \"|\" + (mp.shader || \"?\") + \"|\" + fi,\n time,\n layer\n ),\n (layer.id || layer.name || \"?\") + \"|\" + (mp.shader || \"?\") + \"|\" + fi,\n time\n ),\n progEntry.matMeta\n );\n parkXrayUntilPointer(uni);\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n if (!mp.target) {\n curDraw = curInput;\n curInput = outFBO;\n }\n }\n if (layer.isContainer && !layer.groupTex && !usePassthrough && layer.containerAlphaMeaningful === void 0) {\n let meaningful = false;\n for (const src of chainFragGlsl) {\n if (typeof src !== \"string\") continue;\n const m = src.match(/\\bfloat\\s+alpha\\s*=\\s*([^;]+);/);\n if (m && !/^\\s*scene\\s*\\.\\s*a\\s*$/.test(m[1])) {\n meaningful = true;\n break;\n }\n }\n layer.containerAlphaMeaningful = meaningful;\n diag(`container \"${layer.name || \"?\"}\" alpha ${meaningful ? \"携带形状 → SRC_ALPHA\" : \"无信息 → 加法\"}`);\n }\n if (isPuppet) {\n drawPuppetDirect(layer, cam, viewProj, width, height, time, curInput.tex);\n return;\n }\n compositeLayer(compProg, curInput.tex, [1, 1, 1, 1], layer, cam, viewProj, width, height, !!layer.isContainer && !layer.groupTex && !usePassthrough, null, null);\n }\n return {\n gl,\n render: renderScene,\n getFBO,\n getEffectProgram,\n progCache,\n shaderResolver,\n whiteTex,\n // 场景切换时清空 shader 相关缓存(避免复用上一个场景的 shader 源/程序)\n resetShaderCaches: function() {\n progCache.clear();\n includeCache.clear();\n if (shaderSrcCache) shaderSrcCache.clear();\n },\n // 运行时切换效果降采样系数(性能档位:0=全质量,1=效果链 ≤ 屏幕尺寸)\n setFboCapFactor: function(v) {\n fboCapFactor = v;\n },\n // [we-scene patch] 注入粒子推进+按层渲染回调:\n // advanceFn() — 每帧推进所有粒子系统(由宿主管理 dt 和 audio)\n // renderByLayerFn(layerId, cam, viewProj, w, h) — 按图层渲染对应粒子系统\n setParticleRenderer: function(advanceFn, renderByLayerFn) {\n particleAdvanceFn = typeof advanceFn === \"function\" ? advanceFn : null;\n particleRenderByLayer = typeof renderByLayerFn === \"function\" ? renderByLayerFn : null;\n },\n // [we-scene patch] 注入效果常量脚本运行时:\n // setConstantScriptRuntime(evalObjectScript, { userProperties, audioViews, shared })\n // 不注入时带 {script} 的效果常量退化为初始快照(即改动前的行为)。\n setConstantScriptRuntime,\n /** 已创建的效果常量沙箱收到 applyUserProperties(惰性缓存,挂载时可能还是空的) */\n applyConstUserProperties: function(changed) {\n if (!changed) return;\n for (const sb of constScriptCache.values()) {\n if (sb && typeof sb.applyUserProperties === \"function\") {\n try {\n sb.applyUserProperties(changed);\n } catch {\n }\n }\n }\n },\n /** [we-scene patch] 效果常量脚本的加载统计(调试出口) */\n constantScriptStats: function() {\n return { ...constScriptDiag, cached: constScriptCache.size };\n },\n /** [we-scene patch] 跨层合成的 A/B 开关(调试出口) */\n setCompositeEnabled: function(on) {\n compositeEnabled = !!on;\n },\n /** [we-scene patch] 跨层合成表的调试出口:本帧解析出的 `_rt_imageLayerComposite_*` */\n compositeStats: function() {\n const out = [];\n const px = new Uint8Array(4);\n for (const [name, fbo] of compositeFBOs) {\n let center = null;\n try {\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo.fbo);\n gl.readPixels(fbo.w >> 1, fbo.h >> 1, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, px);\n center = [px[0], px[1], px[2], px[3]];\n } catch {\n }\n out.push({ name, w: fbo.w, h: fbo.h, center });\n }\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n return out;\n },\n // [we-scene patch] 注入 puppet 网格绘制回调:fn(layer, mvp, { time })\n // 由宿主用 MDL 渲染器实现;puppet 图层按自身 z 序参与图层循环与效果链。\n setPuppetRenderer: function(fn) {\n puppetDrawFn = fn;\n },\n // [we-scene patch] 注入音频频谱快照源:fn() → { left16, right16, …, left64, right64 }。\n // 宿主每帧先推进模拟器/采集器再进入 render;这里是纯读取(见 render/audio.js)。\n setAudioProvider,\n // [we-scene patch] 注入统一指针源:fn() → createPointerSource() 的返回值\n // (见 render/pointer.js)。渲染器从中读归一化指针喂 g_Pointer* uniform 与\n // 相机/对象视差,并在帧内回调其 syncWorld(cam, parOffX, parOffY) 把世界坐标\n // 算回去供脚本/粒子/hit-test 使用。宿主负责挂载与 dispose。\n setPointerProvider,\n // [we-scene patch] 当前帧的对象视差世界位移。hit-test 需要它把「肉眼看到的\n // 位置」换回图层世界坐标(视差场景下画面相对 cam 窗口整体平移了这么多)。\n getParallaxOffset: function() {\n return { x: layerParallaxScaleX, y: layerParallaxScaleY };\n },\n // 释放 WebGL 上下文(loseContext → 浏览器回收全部纹理/FBO/program/buffer)\n dispose: function() {\n try {\n const ext = gl.getExtension(\"WEBGL_lose_context\");\n if (ext) ext.loseContext();\n } catch (e) {\n }\n }\n };\n}\nconst rndMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n ALIGN,\n XRAY_IDLE_SCREEN_UV,\n applyColorBlendCPU,\n collectGroupDescendantIds,\n colorBlendPlan,\n createRenderer,\n effectFboSize,\n layerWantsPreserveBackdrop,\n makeTexture,\n makeTextureMip,\n puppetAnimMargin,\n rewriteXrayFragScale,\n xrayShouldParkPointer,\n xrayUvScale\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction generateNoiseTexture(size = 256, cellSize = 8) {\n const cells = size / cellSize;\n const randA = mulberry32$2(1337);\n const randB = mulberry32$2(4242);\n const gridA = new Float32Array(cells * cells);\n const gridB = new Float32Array(cells * cells);\n for (let i = 0; i < cells * cells; i++) {\n gridA[i] = randA();\n gridB[i] = randB();\n }\n const rgba = new Uint8Array(size * size * 4);\n const cell = cellSize;\n for (let y = 0; y < size; y++) {\n const cy = Math.floor(y / cell);\n const fy = y % cell / cell;\n const sy = fy * fy * (3 - 2 * fy);\n for (let x = 0; x < size; x++) {\n const cx = Math.floor(x / cell);\n const fx = x % cell / cell;\n const sx = fx * fx * (3 - 2 * fx);\n const x0 = cx % cells;\n const x1 = (cx + 1) % cells;\n const y0 = cy % cells;\n const y1 = (cy + 1) % cells;\n const a00 = gridA[y0 * cells + x0];\n const a10 = gridA[y0 * cells + x1];\n const a01 = gridA[y1 * cells + x0];\n const a11 = gridA[y1 * cells + x1];\n const b00 = gridB[y0 * cells + x0];\n const b10 = gridB[y0 * cells + x1];\n const b01 = gridB[y1 * cells + x0];\n const b11 = gridB[y1 * cells + x1];\n const va = a00 + (a10 - a00) * sx + (a01 - a00) * sy + (a00 - a10 - a01 + a11) * sx * sy;\n const vb = b00 + (b10 - b00) * sx + (b01 - b00) * sy + (b00 - b10 - b01 + b11) * sx * sy;\n const o = (y * size + x) * 4;\n rgba[o] = Math.round(va * 255);\n rgba[o + 1] = Math.round(vb * 255);\n rgba[o + 2] = 0;\n rgba[o + 3] = 255;\n }\n }\n return rgba;\n}\nfunction mulberry32$2(seed) {\n let a = seed >>> 0;\n return () => {\n a |= 0;\n a = a + 1831565813 | 0;\n let t = Math.imul(a ^ a >>> 15, 1 | a);\n t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n };\n}\nconst noiseMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n generateNoiseTexture\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst TAU = Math.PI * 2;\nfunction rand(a, b) {\n if (a === void 0 || a === null) return Math.random();\n if (b === void 0 || b === null) return a;\n return a + Math.random() * (b - a);\n}\nfunction randExp(a, b, exponent) {\n if (a === void 0 || a === null) return Math.random();\n if (b === void 0 || b === null) return a;\n const t = exponent && exponent !== 1 ? Math.pow(Math.random(), exponent) : Math.random();\n return a + t * (b - a);\n}\nfunction parseVec(s, dflt) {\n if (Array.isArray(s)) return [s[0] || 0, s[1] || 0, s[2] || 0];\n if (s === void 0 || s === null) return dflt ? dflt.slice() : [0, 0, 0];\n if (typeof s === \"object\") return parseVec(s.value, dflt);\n if (typeof s === \"number\") return [s, s, s];\n const p = String(s).trim().split(/\\s+/).map(Number);\n return [p[0] || 0, p[1] || 0, p[2] || 0];\n}\nfunction parseDist(s) {\n if (s === void 0 || s === null) return null;\n if (typeof s === \"number\") return [s, s, s];\n return parseVec(s);\n}\nfunction num(v, dflt) {\n if (v === void 0 || v === null) return dflt;\n if (typeof v === \"object\") return num(v.value, dflt);\n const n = Number(v);\n return Number.isFinite(n) ? n : dflt;\n}\nfunction audioGate(bounds, level) {\n const lo = bounds[0];\n const hi = bounds[1] > lo ? bounds[1] : lo + 1e-6;\n const k = Math.min(1, Math.max(0, (level - lo) / (hi - lo)));\n return k * k * (3 - 2 * k);\n}\nfunction hash3(x, y, z) {\n const n = Math.sin(x * 127.1 + y * 311.7 + z * 74.7) * 43758.5453;\n return n - Math.floor(n);\n}\nfunction vnoise3(x, y, z) {\n const ix = Math.floor(x);\n const iy = Math.floor(y);\n const iz = Math.floor(z);\n const fx = x - ix;\n const fy = y - iy;\n const fz = z - iz;\n const sx = fx * fx * (3 - 2 * fx);\n const sy = fy * fy * (3 - 2 * fy);\n const sz = fz * fz * (3 - 2 * fz);\n const l = (a, b, t) => a + (b - a) * t;\n const c00 = l(hash3(ix, iy, iz), hash3(ix + 1, iy, iz), sx);\n const c10 = l(hash3(ix, iy + 1, iz), hash3(ix + 1, iy + 1, iz), sx);\n const c01 = l(hash3(ix, iy, iz + 1), hash3(ix + 1, iy, iz + 1), sx);\n const c11 = l(hash3(ix, iy + 1, iz + 1), hash3(ix + 1, iy + 1, iz + 1), sx);\n return l(l(c00, c10, sy), l(c01, c11, sy), sz);\n}\nfunction fbm3(x, y, z, oct) {\n let v = 0;\n let amp = 0.5;\n let f = 1;\n let norm = 0;\n for (let i = 0; i < oct; i++) {\n v += amp * vnoise3(x * f, y * f, z * f);\n norm += amp;\n amp *= 0.5;\n f *= 2;\n }\n return v / (norm || 1);\n}\nfunction noiseVec3(x, y, z, oct) {\n return [\n fbm3(x, y, z, oct) * 2 - 1,\n fbm3(x + 31.7, y + 11.3, z + 57.1, oct) * 2 - 1,\n fbm3(x + 73.9, y + 92.1, z + 13.7, oct) * 2 - 1\n ];\n}\nfunction buildParticleProgram(gl) {\n const vs = `#version 300 es\n// 单位 quad(TRIANGLE_STRIP 4 顶点),按实例的 size/rot 展开为朝屏幕的精灵\nlayout(location=0) in vec2 a_corner; // -0.5..0.5\nlayout(location=1) in vec3 a_pos; // 实例中心(投影空间世界坐标)\nlayout(location=2) in vec2 a_sizeRot; // x=size(像素) y=rot(弧度)\nlayout(location=3) in vec4 a_color; // rgb + alpha\nlayout(location=4) in vec3 a_stretchFrame; // xy=非等比拉伸 z=帧序号\nuniform mat4 u_mvp;\n// 序列帧 uv 变换表(TEXS 帧矩形归一化后的 offset/scale),最多 128 帧\n// (matrix spritesheet 72 有 71 帧,旧上限 64 会丢末尾字符)\nuniform int u_frameCount;\nuniform vec4 u_frames[128]; // xy=offset zw=scale\nout vec2 v_uv;\nout vec4 v_color;\nvoid main(){\n float size = a_sizeRot.x;\n float rot = a_sizeRot.y;\n float c = cos(rot), s = sin(rot);\n // 先按 size 与非等比拉伸展开,再旋转(顺序反了会把拉伸方向也转走)\n vec2 corner = a_corner * size * a_stretchFrame.xy;\n vec2 rotated = vec2(corner.x * c - corner.y * s, corner.x * s + corner.y * c);\n gl_Position = u_mvp * vec4(a_pos.xy + rotated, a_pos.z, 1.0);\n // quad 角 → 贴图 uv。世界 y 已翻转到投影空间(y 向下),故 quad 的 +y 角\n // 对应屏幕上方,应采样纹理顶行 v=1(与 renderer.js 的 layerQuadVerts 同约定)。\n vec2 uv = a_corner + 0.5;\n if (u_frameCount > 0) {\n // 帧矩形以左上为原点(TEXS 是 top-down 像素坐标),故先把 v 翻成 top-down\n int fi = int(a_stretchFrame.z);\n fi = clamp(fi, 0, u_frameCount - 1);\n vec4 fr = u_frames[fi];\n vec2 cell = vec2(uv.x, 1.0 - uv.y) * fr.zw + fr.xy;\n uv = vec2(cell.x, 1.0 - cell.y);\n }\n v_uv = uv;\n v_color = a_color;\n}`;\n const fs = `#version 300 es\nprecision mediump float;\nuniform sampler2D u_tex;\nuniform sampler2D u_normal;\nuniform sampler2D u_scene;\nuniform int u_refract;\nuniform int u_sampleScene;\nuniform vec2 u_resolution;\nuniform float u_refractScale;\nin vec2 v_uv;\nin vec4 v_color;\nout vec4 fragColor;\nvoid main(){\n vec4 t = texture(u_tex, v_uv);\n vec4 col = vec4(t.rgb * v_color.rgb, t.a * v_color.a);\n if (u_refract == 1) {\n // genericparticle REFRACT:槽 0 经常是空白白图(Rain2 的\n // \"particles 256x1280 blank\"、firework 的 util/white),水珠形状在法线里。\n // 按普通精灵画会把整块 quad 涂成白方块。这里用法线 AG(DXT5nm 打包)\n // 扭曲已绘制的画面,空白 albedo 改用法线偏离当 alpha。\n vec4 ntex = texture(u_normal, v_uv);\n // 工坊 DXT5nm:R=255 B=0,XY 在 AG(2464842912 Rain2)。\n // 官方 DecompressNormal(common_fragment.h)与程序化法线:XY 在 RG。\n vec2 nxy = (ntex.r > 0.85 && ntex.b < 0.15) ? (ntex.ag * 2.0 - 1.0) : (ntex.rg * 2.0 - 1.0);\n // 平坦处 AG≈128,量化噪声会让 length*2.2 仍有 ~0.04,整块 quad 剩淡方块。\n float drop = smoothstep(0.06, 0.28, length(nxy));\n float blank = step(0.95, min(min(t.r, t.g), min(t.b, t.a)));\n float alpha = mix(t.a, drop, blank) * v_color.a;\n vec3 rgb = t.rgb * v_color.rgb;\n if (u_sampleScene == 1) {\n vec2 screenUV = gl_FragCoord.xy / max(u_resolution, vec2(1.0));\n vec3 scene = texture(u_scene, clamp(screenUV + nxy * u_refractScale, 0.0, 1.0)).rgb;\n rgb = scene * v_color.rgb;\n }\n col = vec4(rgb, alpha);\n if (col.a < 0.004) discard;\n }\n fragColor = col;\n}`;\n const compile2 = (type, src) => {\n const s = gl.createShader(type);\n gl.shaderSource(s, src);\n gl.compileShader(s);\n if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) throw new Error(\"粒子 shader: \" + gl.getShaderInfoLog(s));\n return s;\n };\n const prog = gl.createProgram();\n gl.attachShader(prog, compile2(gl.VERTEX_SHADER, vs));\n gl.attachShader(prog, compile2(gl.FRAGMENT_SHADER, fs));\n gl.linkProgram(prog);\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) throw new Error(\"粒子 shader 链接失败: \" + gl.getProgramInfoLog(prog));\n const quadBuf = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, quadBuf);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5]), gl.STATIC_DRAW);\n const vbuf = gl.createBuffer();\n const vao = gl.createVertexArray();\n gl.bindVertexArray(vao);\n gl.bindBuffer(gl.ARRAY_BUFFER, quadBuf);\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 8, 0);\n gl.vertexAttribDivisor(0, 0);\n gl.bindBuffer(gl.ARRAY_BUFFER, vbuf);\n const S = 48;\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 3, gl.FLOAT, false, S, 0);\n gl.vertexAttribDivisor(1, 1);\n gl.enableVertexAttribArray(2);\n gl.vertexAttribPointer(2, 2, gl.FLOAT, false, S, 12);\n gl.vertexAttribDivisor(2, 1);\n gl.enableVertexAttribArray(3);\n gl.vertexAttribPointer(3, 4, gl.FLOAT, false, S, 20);\n gl.vertexAttribDivisor(3, 1);\n gl.enableVertexAttribArray(4);\n gl.vertexAttribPointer(4, 3, gl.FLOAT, false, S, 36);\n gl.vertexAttribDivisor(4, 1);\n gl.bindVertexArray(null);\n return {\n prog: {\n prog,\n uniTex: gl.getUniformLocation(prog, \"u_tex\"),\n uniNormal: gl.getUniformLocation(prog, \"u_normal\"),\n uniScene: gl.getUniformLocation(prog, \"u_scene\"),\n uniRefract: gl.getUniformLocation(prog, \"u_refract\"),\n uniSampleScene: gl.getUniformLocation(prog, \"u_sampleScene\"),\n uniResolution: gl.getUniformLocation(prog, \"u_resolution\"),\n uniRefractScale: gl.getUniformLocation(prog, \"u_refractScale\"),\n uniMvp: gl.getUniformLocation(prog, \"u_mvp\"),\n uniFrameCount: gl.getUniformLocation(prog, \"u_frameCount\"),\n uniFrames: gl.getUniformLocation(prog, \"u_frames\")\n },\n quadBuf,\n vbuf,\n vao\n };\n}\nfunction particlePassRefract(mat) {\n const c = mat && mat.passes && mat.passes[0] && mat.passes[0].combos;\n return !!(c && Number(c.REFRACT) === 1);\n}\nfunction rgbaIsBlankWhite(rgba) {\n if (!rgba || rgba.length < 16) return false;\n const n = rgba.length / 4;\n const step = Math.max(1, n / 64 | 0);\n let seen = 0;\n for (let i = 0; i < n; i += step) {\n const o = i * 4;\n if (rgba[o] < 250 || rgba[o + 1] < 250 || rgba[o + 2] < 250 || rgba[o + 3] < 250) return false;\n seen++;\n }\n return seen > 0;\n}\nfunction spriteTrailLengthFactor(speed, length, minLength, maxLength) {\n let f = Math.abs(Number(speed) || 0) * (Number(length) || 0);\n const mn = Number(minLength) || 0;\n const mx = Number(maxLength) || 0;\n if (mn > 0) f = Math.max(mn, f);\n if (mx > 0) f = Math.min(mx, f);\n return f;\n}\nfunction spriteTrailRotation(dx, dy) {\n if (!(dx || dy)) return 0;\n return Math.atan2(dy, dx) - Math.PI / 2;\n}\nfunction particleInstanceSegs(trailCfg, trailSegments) {\n return trailCfg && trailCfg.kind === \"ropetrail\" ? Math.max(1, trailSegments || 1) : 1;\n}\nclass Particle {\n constructor() {\n this.alive = false;\n this.x = this.y = this.z = 0;\n this.vx = this.vy = this.vz = 0;\n this.bx = this.by = this.bz = 0;\n this.age = 0;\n this.life = 1;\n this.size = 1;\n this.baseSize = 1;\n this.rot = 0;\n this.rotVel = 0;\n this.r = this.g = this.b = 1;\n this.baseR = this.baseG = this.baseB = 1;\n this.alpha = 1;\n this.baseAlpha = 1;\n this.seed = 0;\n this.frame = 0;\n this.oscPhase = 0;\n this.oscFreq = 0;\n this.oscAmp = 0;\n this.oscAPhase = 0;\n this.oscAFreq = 0;\n this.oscSPhase = 0;\n this.oscSFreq = 0;\n this.turbSpeed = 0;\n this.turbPhase = 0;\n this.trail = null;\n }\n}\nclass ParticleSystem {\n constructor(gl, model, override, layer) {\n this.gl = gl;\n this.model = model || {};\n this.override = override || {};\n this.layer = layer || null;\n const lo = layer && layer.origin ? layer.origin : [0, 0, 0];\n const ls = layer && layer.scale ? layer.scale : [1, 1, 1];\n const la = layer && layer.angles ? layer.angles : [0, 0, 0];\n this.originX = lo[0] || 0;\n this.originY = lo[1] || 0;\n this.originZ = lo[2] || 0;\n this.scaleX = ls[0] === 0 ? 1 : ls[0];\n this.scaleY = ls[1] === 0 ? 1 : ls[1];\n this.angleZ = (la[2] || 0) * Math.PI / 180;\n const asx = Math.abs(this.scaleX);\n const asy = Math.abs(this.scaleY);\n this.sysScale = Math.min(asx, asy) || 1;\n this.spriteStretchX = asx / this.sysScale;\n this.spriteStretchY = asy / this.sysScale;\n this.maxCount = Math.max(1, Math.min(2e4, num(this.model.maxcount, 100)));\n this.simTime = 0;\n this.paused = false;\n this.texture = null;\n this.normalTex = null;\n this.material = null;\n this.blend = \"translucent\";\n this.refract = false;\n this.refractAmount = 0.04;\n this.opacityMul = 1;\n this.lifetimeMul = 1;\n this.visible = true;\n this._ready = false;\n this._prog = null;\n this._vbuf = null;\n this._quadBuf = null;\n this._vao = null;\n this._data = null;\n this._sceneTex = null;\n this.sequenceMul = Math.max(1, Math.round(num(this.model.sequencemultiplier, 1)));\n this.animationMode = this.model.animationmode || null;\n this.texFrames = null;\n this.frameCount = this.sequenceMul * this.sequenceMul;\n this.texAspectX = 1;\n this.texAspectY = 1;\n this.controlPoints = (this.model.controlpoint || []).filter(Boolean).map((cp) => ({\n id: num(cp.id, 0),\n lockToPointer: !!cp.locktopointer || (num(cp.flags, 0) & 1) !== 0,\n offset: parseVec(cp.offset),\n // 世界空间的当前位置(局部空间)\n x: 0,\n y: 0,\n z: 0\n }));\n this.pointer = null;\n this._followParent = null;\n this._followMode = null;\n this._followOffset = [0, 0, 0];\n this._ov = {};\n this._applyOverride();\n this.startTime = Math.max(0, Math.min(30, num(this.model.starttime, 0)));\n this._warmed = false;\n this._compile();\n }\n /**\n * 热更:`instanceoverride` 与图层共享同一引用,resolveUserProps 会就地改 `.value`。\n * 挂载时算进 `_ov` 的颜色/倍率不会自动跟上 —— 自定义滑条改完必须再跑一遍。\n */\n reapplyOverride() {\n this._applyOverride();\n }\n _applyOverride() {\n this._ov = {};\n this.opacityMul = 1;\n this.lifetimeMul = 1;\n this.maxCount = Math.max(1, Math.min(2e4, num(this.model.maxcount, 100)));\n const ov = this.override || {};\n for (const k of Object.keys(ov)) {\n if (k === \"id\") continue;\n const raw = ov[k];\n const val = raw && typeof raw === \"object\" && \"value\" in raw ? raw.value : raw;\n if (k === \"count\") {\n const base = num(this.model.maxcount, 100);\n const mul = Number(val);\n const m = Number.isFinite(mul) ? mul : 1;\n this.maxCount = Math.max(1, Math.min(2e4, Math.round(base * m)));\n this._ov.countMul = m;\n } else if (k === \"alpha\") {\n this.opacityMul = Number(val);\n if (!Number.isFinite(this.opacityMul)) this.opacityMul = 1;\n } else if (k === \"color\" || k === \"colorn\") {\n const v = parseVec(val);\n this._ov.color = k === \"colorn\" ? v : [v[0] / 255, v[1] / 255, v[2] / 255];\n } else if (k === \"size\") {\n this._ov.size = Number(val) || 1;\n } else if (k === \"rate\") {\n this._ov.rateMul = Number(val);\n if (!Number.isFinite(this._ov.rateMul)) this._ov.rateMul = 1;\n } else if (k === \"speed\") {\n this._ov.speed = Number(val) || 1;\n } else if (k === \"lifetime\") {\n this.lifetimeMul = Number(val) || 1;\n } else if (k === \"brightness\") {\n this._ov.brightness = Number(val) || 1;\n } else {\n this._ov[k] = val;\n }\n }\n this.pool = [];\n for (let i = 0; i < this.maxCount; i++) this.pool.push(new Particle());\n }\n // 把 model 的 JSON 描述编译成扁平参数,避免每帧字符串比较\n _compile() {\n const m = this.model;\n this.emitters = (m.emitter || []).map((e) => ({\n kind: e.name === \"boxrandom\" ? \"box\" : \"sphere\",\n origin: parseVec(e.origin),\n directions: parseVec(e.directions, [1, 1, 1]),\n distanceMin: parseDist(e.distancemin),\n distanceMax: parseDist(e.distancemax),\n sign: e.sign ? parseVec(e.sign) : null,\n rate: num(e.rate, 0),\n // rate 与 instantaneous 都缺省 = 「维持池满」的常驻场(尘埃/灰烬/星空)。\n // 全库有 21 个这样的发射器(dust_motes_0 / ember_small / Shooting_Star_01)。\n // 若按 rate=0 处理,这些系统一颗粒子都不会出现(dust motes 整层消失)。\n //\n // 但带 audioprocessingmode 的发射器例外:它的发射量由系统音频驱动,\n // 静音时 WE 的发射量趋近 0(_step 里按 audio.level 门控;无音频输入时恒 0)。\n // 若按「维持池满」处理,会把音频响应的星星填满并叠成一片过曝\n // (2419444134 的 reactive Stars 实测 15% 像素过曝)。故静音时按不发射处理。\n audioDriven: e.audioprocessingmode !== void 0,\n // audioprocessingbounds:发射量随响度平滑门控的区间(实测 \"0.8 1\" 等)\n audioBounds: parseVec(e.audioprocessingbounds, [0, 1]),\n fill: e.rate === void 0 && e.instantaneous === void 0 && e.audioprocessingmode === void 0,\n instantaneous: num(e.instantaneous, 0),\n speedMin: num(e.speedmin, 0),\n speedMax: num(e.speedmax, 0),\n // 发射器可贴到控制点。缺省 = 0,而 CP0 就是系统原点;\n // CP0 flags=1 锁鼠标时,粒子从光标处生出(鼠标轨迹),不是钉在图层 origin。\n controlPoint: e.controlpoint !== void 0 && e.controlpoint !== null ? num(e.controlpoint, 0) : 0,\n _burst: false\n }));\n const init = m.initializer || [];\n this.init = {\n life: null,\n size: null,\n color: null,\n alpha: null,\n velocity: null,\n rotation: null,\n angularVelocity: null,\n turbulentVelocity: null,\n mapAround: null\n };\n for (const z of init) {\n switch (z.name) {\n case \"lifetimerandom\":\n this.init.life = { min: num(z.min, 1), max: num(z.max, 1), exp: num(z.exponent, 1) };\n break;\n case \"sizerandom\":\n this.init.size = { min: num(z.min, 1), max: num(z.max, 1), exp: num(z.exponent, 1) };\n break;\n case \"colorrandom\":\n this.init.color = { min: parseVec(z.min, [255, 255, 255]), max: parseVec(z.max, [255, 255, 255]) };\n break;\n case \"alpharandom\":\n this.init.alpha = { min: num(z.min, 1), max: num(z.max, 1) };\n break;\n case \"velocityrandom\":\n this.init.velocity = { min: parseVec(z.min), max: parseVec(z.max) };\n break;\n case \"rotationrandom\":\n this.init.rotation = { min: parseVec(z.min), max: parseVec(z.max, [0, 0, 0]), exp: num(z.exponent, 1) };\n break;\n case \"angularvelocityrandom\":\n this.init.angularVelocity = { min: parseVec(z.min), max: parseVec(z.max), exp: num(z.exponent, 1) };\n break;\n case \"mapsequencearoundcontrolpoint\":\n this.init.mapAround = {\n count: Math.max(1, num(z.count, 1)),\n bounds: parseVec(z.bounds, [0, 1]),\n speedMin: parseVec(z.speedmin),\n speedMax: parseVec(z.speedmax, [0, 0, 0]),\n cp: num(z.controlpoint, 0)\n };\n this._mapAroundSeq = 0;\n break;\n case \"turbulentvelocityrandom\":\n this.init.turbulentVelocity = {\n scale: num(z.scale, 0.1),\n offset: num(z.offset, 0),\n speedMin: num(z.speedmin, 0),\n speedMax: num(z.speedmax, 0),\n phaseMax: num(z.phasemax, 0),\n timeScale: num(z.timescale, 0),\n // 音频处理(实测 Stars_copy1 \"0.8 1\"):响度过门槛才施加湍流初速\n audioMode: num(z.audioprocessingmode, 0),\n audioBounds: parseVec(z.audioprocessingbounds, [0, 1])\n };\n break;\n }\n }\n const ops = m.operator || [];\n this.ops = {\n movement: null,\n angularMovement: null,\n alphaFade: null,\n alphaChange: null,\n sizeChange: null,\n colorChange: null,\n turbulence: [],\n oscAlpha: null,\n oscSize: null,\n oscPos: null,\n attract: [],\n vortex: [],\n remap: []\n };\n for (const o of ops) {\n switch (o.name) {\n case \"movement\":\n this.ops.movement = { gravity: parseVec(o.gravity), drag: num(o.drag, 0) };\n break;\n case \"angularmovement\":\n this.ops.angularMovement = { force: parseVec(o.force), drag: num(o.drag, 0) };\n break;\n case \"alphafade\":\n this.ops.alphaFade = { fadeIn: num(o.fadeintime, 0.1), fadeOut: num(o.fadeouttime, 0.9) };\n break;\n case \"alphachange\":\n this.ops.alphaChange = {\n startTime: num(o.starttime, 0),\n endTime: num(o.endtime, 1),\n startValue: num(o.startvalue, 1),\n endValue: num(o.endvalue, 0)\n };\n break;\n case \"sizechange\":\n this.ops.sizeChange = {\n startTime: num(o.starttime, 0),\n endTime: num(o.endtime, 1),\n startValue: num(o.startvalue, 1),\n endValue: num(o.endvalue, 1)\n };\n break;\n case \"colorchange\":\n this.ops.colorChange = {\n startTime: num(o.starttime, 0),\n endTime: num(o.endtime, 1),\n startValue: o.startvalue !== void 0 ? parseVec(o.startvalue) : null,\n endValue: parseVec(o.endvalue, [1, 1, 1])\n };\n break;\n case \"turbulence\":\n this.ops.turbulence.push({\n scale: num(o.scale, 0.01),\n speedMin: num(o.speedmin, 0),\n speedMax: num(o.speedmax, 0),\n timeScale: num(o.timescale, 1),\n phaseMin: num(o.phasemin, 0),\n phaseMax: num(o.phasemax, 0),\n mask: o.mask !== void 0 ? parseVec(o.mask, [1, 1, 1]) : [1, 1, 1]\n });\n break;\n case \"oscillatealpha\":\n this.ops.oscAlpha = {\n freqMin: num(o.frequencymin, num(o.frequencymax, 1)),\n freqMax: num(o.frequencymax, 1),\n scaleMin: num(o.scalemin, 0),\n scaleMax: num(o.scalemax, 1),\n phaseMax: num(o.phasemax, TAU)\n };\n break;\n case \"oscillatesize\":\n this.ops.oscSize = {\n freqMin: num(o.frequencymin, num(o.frequencymax, 1)),\n freqMax: num(o.frequencymax, num(o.frequencymin, 1)),\n scaleMin: num(o.scalemin, 1),\n scaleMax: num(o.scalemax, 1),\n phaseMax: num(o.phasemax, TAU)\n };\n break;\n case \"oscillateposition\":\n this.ops.oscPos = {\n freqMin: num(o.frequencymin, num(o.frequencymax, 0.5)),\n freqMax: num(o.frequencymax, 0.5),\n scaleMin: num(o.scalemin, 0),\n scaleMax: num(o.scalemax, 1),\n phaseMin: num(o.phasemin, 0),\n phaseMax: num(o.phasemax, TAU),\n mask: o.mask !== void 0 ? parseVec(o.mask, [1, 1, 0]) : [1, 1, 0]\n };\n break;\n case \"controlpointattract\":\n this.ops.attract.push({\n cp: num(o.controlpoint, 0),\n origin: parseVec(o.origin),\n scale: num(o.scale, 0),\n threshold: num(o.threshold, 0)\n });\n break;\n case \"vortex\":\n this.ops.vortex.push({\n axis: parseVec(o.axis, [0, 0, 1]),\n offset: parseVec(o.offset),\n distanceInner: num(o.distanceinner, 0),\n distanceOuter: num(o.distanceouter, 0),\n speedInner: num(o.speedinner, 0),\n speedOuter: num(o.speedouter, 0),\n // 缺省贴在 CP0(系统原点)。CP0 锁鼠标时涡流跟着光标转,否则钉在图层中心。\n cp: o.controlpoint !== void 0 && o.controlpoint !== null ? num(o.controlpoint, 0) : 0,\n // 音频处理(实测 \"0.5 1\"):响度门控涡流强度(随节拍卷起/停转)\n audioMode: num(o.audioprocessingmode, 0),\n audioBounds: parseVec(o.audioprocessingbounds, [0, 1])\n });\n break;\n case \"remapvalue\":\n this.ops.remap.push({\n output: o.output || \"velocity\",\n rangeMin: parseVec(o.outputrangemin),\n rangeMax: parseVec(o.outputrangemax),\n fn: o.transformfunction || \"simplexnoise\",\n inputScale: num(o.transforminputscale, 1)\n });\n break;\n }\n }\n const rawR = this.model.renderer;\n const omitted = rawR === void 0 || rawR === null;\n const rlist = Array.isArray(rawR) ? rawR : rawR ? [rawR] : [];\n this.renderers = rlist.map((r) => {\n const kind = r && r.name || \"sprite\";\n return {\n kind,\n length: num(r && r.length, kind === \"spritetrail\" ? 0.1 : 0),\n maxLength: num(r && r.maxlength, 0),\n minLength: num(r && r.minlength, 0),\n subdivision: num(r && r.subdivision, 1),\n orientation: r && r.orientation || null\n };\n });\n if (omitted && !this.renderers.length) {\n this.renderers = [{ kind: \"sprite\", length: 0, maxLength: 0, minLength: 0, subdivision: 1, orientation: null }];\n }\n const tr = this.renderers.find((r) => r.kind === \"spritetrail\" || r.kind === \"ropetrail\");\n this.trailCfg = tr || null;\n this.trailSegments = 1;\n if (tr && tr.kind === \"ropetrail\") {\n const segs = Math.max(2, Math.min(16, Math.round(tr.maxLength || tr.subdivision || 6)));\n this.trailSegments = segs;\n for (const p of this.pool) p.trail = new Float32Array(segs * 3);\n }\n }\n setModel(model) {\n this.model = model;\n this._compile();\n }\n setMaterial(mat) {\n this.material = mat;\n const pass = mat && mat.passes && mat.passes[0];\n this.blend = pass && pass.blending || \"translucent\";\n this.refract = particlePassRefract(mat);\n const cv = pass && pass.constantshadervalues;\n const rawAmt = cv && cv.ui_editor_properties_refract_amount;\n const amt = Number(rawAmt);\n this.refractAmount = Number.isFinite(amt) ? Math.min(0.35, Math.max(0, amt)) : 0.04;\n }\n setNormalTexture(tex2) {\n this.normalTex = tex2 || null;\n }\n // 注入贴图 {glTex, width, height, frames?}\n // frames 为 TEXS 序列帧表(像素坐标;每帧带仿射基 uDir/vDir),有则据此切图。\n // 同时认数组(list 上挂 atlasWidth)和 {list, atlasWidth, atlasHeight}:\n // 只认 `.length` 时整对象会被当成「无帧表」,退回 sequencemultiplier 的 N×N\n // 方格,72 帧字符图集会变成 2×2 大块 —— Matrix 雨看起来字都挤成一团。\n setTexture(tex2) {\n this.texture = tex2;\n this._ready = !!tex2;\n const raw = tex2 && tex2.frames;\n const list = Array.isArray(raw) ? raw : raw && raw.list && raw.list.length ? raw.list : null;\n const denW = tex2 && tex2.width || list && (raw && raw.atlasWidth || list.atlasWidth) || 0;\n const denH = tex2 && tex2.height || list && (raw && raw.atlasHeight || list.atlasHeight) || 0;\n if (list && denW > 0 && denH > 0) {\n this.texFrames = list.map((f) => ({\n ou: f.x / denW,\n ov: f.y / denH,\n su: f.width / denW,\n sv: f.height / denH\n }));\n this.frameCount = this.texFrames.length;\n } else {\n this.texFrames = null;\n this.frameCount = this.sequenceMul * this.sequenceMul;\n }\n let aw = 1;\n let ah = 1;\n if (this.texFrames && list) {\n aw = list[0].width || 1;\n ah = list[0].height || 1;\n } else if (tex2 && tex2.width > 0 && tex2.height > 0) {\n aw = tex2.width;\n ah = tex2.height;\n }\n const longSide = Math.max(aw, ah) || 1;\n this.texAspectX = aw / longSide;\n this.texAspectY = ah / longSide;\n this._frameData = void 0;\n }\n setVisible(v) {\n this.visible = v;\n }\n // 宿主每帧提供鼠标位置(世界像素);转到局部空间供控制点使用\n setPointer(worldX, worldY) {\n const dx = worldX - this.originX;\n const dy = worldY - this.originY;\n const c = Math.cos(-this.angleZ);\n const s = Math.sin(-this.angleZ);\n this.pointer = {\n x: (dx * c - dy * s) / (this.scaleX || 1),\n y: (dx * s + dy * c) / (this.scaleY || 1)\n };\n }\n // 子级挂到父系统:eventfollow 跟父粒子走,static 跟父系统 origin 走。\n attachFollow(parent, mode, offset) {\n this._followParent = parent || null;\n this._followMode = mode === \"particle\" || mode === \"origin\" ? mode : null;\n const o = offset || [0, 0, 0];\n this._followOffset = [o[0] || 0, o[1] || 0, o[2] || 0];\n this._syncFollow();\n }\n leaderParticle() {\n const pool = this.pool;\n for (let i = 0; i < pool.length; i++) if (pool[i].alive) return pool[i];\n return null;\n }\n // 粒子局部坐标 → 世界像素(y 向下,与 originX/originY 同一空间;投影翻转在 render)\n localToWorld(lx, ly) {\n const px = lx * this.scaleX;\n const py = ly * this.scaleY;\n const c = Math.cos(this.angleZ);\n const s = Math.sin(this.angleZ);\n return [this.originX + px * c - py * s, this.originY + px * s + py * c];\n }\n _syncFollow() {\n const parent = this._followParent;\n const mode = this._followMode;\n if (!parent || !mode) return;\n const off = this._followOffset;\n if (mode === \"particle\") {\n const host = parent.leaderParticle();\n if (!host) return;\n const w = parent.localToWorld(host.x + off[0], host.y + off[1]);\n this.originX = w[0];\n this.originY = w[1];\n } else {\n const w = parent.localToWorld(off[0], off[1]);\n this.originX = w[0];\n this.originY = w[1];\n }\n }\n // ---------- 生成 ----------\n spawn(em) {\n const pool = this.pool;\n const n = pool.length;\n let p = null;\n let cur = this._cursor || 0;\n for (let i = 0; i < n; i++) {\n const q = pool[(cur + i) % n];\n if (!q.alive) {\n p = q;\n this._cursor = (cur + i + 1) % n;\n break;\n }\n }\n if (!p) return;\n p.alive = true;\n p.age = 0;\n p.seed = Math.random();\n p.rot = 0;\n p.rotVel = 0;\n p.vx = p.vy = p.vz = 0;\n p.frame = 0;\n const o = em.origin;\n if (em.kind === \"box\") {\n const d = em.distanceMax || [0, 0, 0];\n const dmin = em.distanceMin;\n p.x = o[0] + rand(-d[0], d[0]) + (dmin ? dmin[0] : 0);\n p.y = o[1] + rand(-d[1], d[1]) + (dmin ? dmin[1] : 0);\n p.z = o[2] + rand(-d[2], d[2]) + (dmin ? dmin[2] : 0);\n } else {\n const dir = em.directions;\n const rmin = em.distanceMin ? em.distanceMin[0] : 0;\n const rmax = em.distanceMax ? em.distanceMax[0] : 0;\n const u = Math.random() * 2 - 1;\n const th = Math.random() * TAU;\n const sq = Math.sqrt(Math.max(0, 1 - u * u));\n let nx = sq * Math.cos(th);\n let ny = sq * Math.sin(th);\n let nz = u;\n if (em.sign) {\n if (em.sign[0]) nx = Math.abs(nx) * Math.sign(em.sign[0]);\n if (em.sign[1]) ny = Math.abs(ny) * Math.sign(em.sign[1]);\n if (em.sign[2]) nz = Math.abs(nz) * Math.sign(em.sign[2]);\n }\n const r = rand(rmin, rmax);\n p.x = o[0] + nx * r * dir[0];\n p.y = o[1] + ny * r * dir[1];\n p.z = o[2] + nz * r * dir[2];\n if (em.speedMax || em.speedMin) {\n const sp = rand(em.speedMin, em.speedMax);\n p.vx += nx * sp;\n p.vy += ny * sp;\n p.vz += nz * sp;\n }\n }\n {\n const emitAt = this._cpPos(em.controlPoint);\n if (emitAt) {\n p.x += emitAt[0];\n p.y += emitAt[1];\n p.z += emitAt[2];\n } else {\n const spec = this.controlPoints.find((c) => c.id === em.controlPoint);\n if (spec && spec.lockToPointer) {\n p.alive = false;\n return;\n }\n }\n }\n if (this.init.mapAround) {\n const ma = this.init.mapAround;\n const around = this._cpPos(ma.cp);\n if (around) {\n const n2 = ma.count;\n const i = this._mapAroundSeq++;\n const u = n2 > 0 ? i % n2 / n2 : 0;\n const t = ma.bounds[0] + (ma.bounds[1] - ma.bounds[0]) * u;\n const ang = t * TAU;\n const rmin = em.distanceMin ? em.distanceMin[0] : 0;\n const rmax = em.distanceMax ? em.distanceMax[0] : 0;\n const rad = rmax > 0 ? rmax : rmin;\n p.x = around[0] + Math.cos(ang) * rad;\n p.y = around[1] + Math.sin(ang) * rad;\n p.z = around[2];\n const k = Math.random();\n p.vx += ma.speedMin[0] + (ma.speedMax[0] - ma.speedMin[0]) * k;\n p.vy += ma.speedMin[1] + (ma.speedMax[1] - ma.speedMin[1]) * k;\n p.vz += ma.speedMin[2] + (ma.speedMax[2] - ma.speedMin[2]) * k;\n }\n }\n const I = this.init;\n const speedMul = this._ov.speed || 1;\n const sizeMul = this._ov.size || 1;\n p.life = I.life ? Math.max(1e-3, randExp(I.life.min, I.life.max, I.life.exp) * this.lifetimeMul) : 1;\n p.baseSize = I.size ? randExp(I.size.min, I.size.max, I.size.exp) * sizeMul : sizeMul;\n p.size = p.baseSize;\n if (I.color) {\n const mn = I.color.min;\n const mx = I.color.max;\n const t = Math.random();\n p.baseR = (mn[0] + (mx[0] - mn[0]) * t) / 255;\n p.baseG = (mn[1] + (mx[1] - mn[1]) * t) / 255;\n p.baseB = (mn[2] + (mx[2] - mn[2]) * t) / 255;\n } else {\n p.baseR = p.baseG = p.baseB = 1;\n }\n if (this._ov.color) {\n p.baseR = this._ov.color[0];\n p.baseG = this._ov.color[1];\n p.baseB = this._ov.color[2];\n }\n p.r = p.baseR;\n p.g = p.baseG;\n p.b = p.baseB;\n p.baseAlpha = (I.alpha ? rand(I.alpha.min, I.alpha.max) : 1) * this.opacityMul;\n p.alpha = p.baseAlpha;\n if (I.velocity) {\n p.vx += rand(I.velocity.min[0], I.velocity.max[0]) * speedMul;\n p.vy += rand(I.velocity.min[1], I.velocity.max[1]) * speedMul;\n p.vz += rand(I.velocity.min[2], I.velocity.max[2]) * speedMul;\n }\n if (I.turbulentVelocity) {\n const tv = I.turbulentVelocity;\n const tvK = tv.audioMode ? audioGate(tv.audioBounds, this._audioLevel || 0) : 1;\n const sp = rand(tv.speedMin, tv.speedMax) * speedMul * tvK;\n const t = this.simTime * (tv.timeScale || 0);\n const nv = noiseVec3(p.x * tv.scale + tv.offset, p.y * tv.scale + tv.offset, t + p.seed * (tv.phaseMax || 0), 3);\n p.vx += nv[0] * sp;\n p.vy += nv[1] * sp;\n p.vz += nv[2] * sp;\n }\n if (I.rotation) {\n p.rot = rand(I.rotation.min[2], I.rotation.max[2]);\n }\n if (I.angularVelocity) {\n p.rotVel = rand(I.angularVelocity.min[2], I.angularVelocity.max[2]);\n }\n const O = this.ops;\n if (O.oscPos) {\n p.oscFreq = rand(O.oscPos.freqMin, O.oscPos.freqMax);\n p.oscAmp = rand(O.oscPos.scaleMin, O.oscPos.scaleMax);\n p.oscPhase = rand(O.oscPos.phaseMin, O.oscPos.phaseMax) + p.seed * TAU;\n }\n if (O.oscAlpha) {\n p.oscAFreq = rand(O.oscAlpha.freqMin, O.oscAlpha.freqMax);\n p.oscAPhase = Math.random() * (O.oscAlpha.phaseMax || TAU);\n }\n if (O.oscSize) {\n p.oscSFreq = rand(O.oscSize.freqMin, O.oscSize.freqMax);\n p.oscSPhase = Math.random() * (O.oscSize.phaseMax || TAU);\n }\n if (O.turbulence.length) {\n const t0 = O.turbulence[0];\n p.turbSpeed = rand(t0.speedMin, t0.speedMax);\n p.turbPhase = rand(t0.phaseMin, t0.phaseMax);\n }\n if (this.frameCount > 1) {\n p.frame = this.animationMode === \"randomframe\" ? Math.floor(Math.random() * this.frameCount) : 0;\n }\n p.bx = p.x;\n p.by = p.y;\n p.bz = p.z;\n if (p.trail) {\n for (let i = 0; i < p.trail.length; i += 3) {\n p.trail[i] = p.x;\n p.trail[i + 1] = p.y;\n p.trail[i + 2] = p.z;\n }\n }\n }\n // ---------- 每粒子更新 ----------\n updateParticle(p, dt) {\n p.age += dt;\n if (p.age >= p.life) {\n p.alive = false;\n return;\n }\n const lt = p.age / p.life;\n const O = this.ops;\n if (O.movement) {\n p.vx += O.movement.gravity[0] * dt;\n p.vy += O.movement.gravity[1] * dt;\n p.vz += O.movement.gravity[2] * dt;\n if (O.movement.drag > 0) {\n const d = Math.exp(-O.movement.drag * dt);\n p.vx *= d;\n p.vy *= d;\n p.vz *= d;\n }\n }\n if (O.angularMovement) {\n p.rotVel += (O.angularMovement.force[2] || 0) * dt;\n if (O.angularMovement.drag > 0) p.rotVel *= Math.exp(-O.angularMovement.drag * dt);\n }\n for (const t of O.turbulence) {\n const ts = t.timeScale || 1;\n const nv = noiseVec3(\n p.bx * t.scale,\n p.by * t.scale,\n this.simTime * t.scale * ts + p.turbPhase,\n 3\n );\n p.vx += nv[0] * p.turbSpeed * t.mask[0] * dt;\n p.vy += nv[1] * p.turbSpeed * t.mask[1] * dt;\n p.vz += nv[2] * p.turbSpeed * t.mask[2] * dt;\n }\n for (const a2 of O.attract) {\n const cp = this._cpPos(a2.cp);\n if (!cp) continue;\n const dx = cp[0] + a2.origin[0] - p.x;\n const dy = cp[1] + a2.origin[1] - p.y;\n const dist = Math.hypot(dx, dy);\n if (dist < 1e-3) continue;\n if (a2.threshold > 0 && dist > a2.threshold) continue;\n const falloff = a2.threshold > 0 ? 1 - dist / a2.threshold : 1;\n const f = a2.scale * falloff * dt / Math.max(1, dist);\n p.vx += dx * f;\n p.vy += dy * f;\n }\n for (const v of O.vortex) {\n const base = this._cpPos(v.cp) || [0, 0, 0];\n const dx = p.x - (base[0] + v.offset[0]);\n const dy = p.y - (base[1] + v.offset[1]);\n const dist = Math.hypot(dx, dy);\n if (dist < 1e-3) continue;\n const span = v.distanceOuter - v.distanceInner;\n const k = span > 0 ? Math.min(1, Math.max(0, (dist - v.distanceInner) / span)) : 0;\n const vK = v.audioMode ? audioGate(v.audioBounds, this._audioLevel || 0) : 1;\n const speed = v.speedInner + (v.speedOuter - v.speedInner) * k;\n p.vx += -dy / dist * speed * dt * vK;\n p.vy += dx / dist * speed * dt * vK;\n }\n for (const rm of O.remap) {\n const s = rm.inputScale || 1;\n const nv = noiseVec3(p.bx * 0.01 * s, p.by * 0.01 * s, this.simTime * 0.1, rm.fn === \"fbmnoise\" ? 4 : 2);\n if (rm.output === \"velocity\") {\n for (let i = 0; i < 3; i++) {\n const t = (nv[i] + 1) / 2;\n const val = rm.rangeMin[i] + (rm.rangeMax[i] - rm.rangeMin[i]) * t;\n if (i === 0) p.vx = val;\n else if (i === 1) p.vy = val;\n else p.vz = val;\n }\n } else if (rm.output === \"speed\") {\n const t = (nv[0] + 1) / 2;\n const mul = rm.rangeMin[0] + (rm.rangeMax[0] - rm.rangeMin[0]) * t;\n const len = Math.hypot(p.vx, p.vy) || 1;\n p.vx = p.vx / len * mul;\n p.vy = p.vy / len * mul;\n }\n }\n p.bx += p.vx * dt;\n p.by += p.vy * dt;\n p.bz += p.vz * dt;\n p.rot += p.rotVel * dt;\n p.x = p.bx;\n p.y = p.by;\n p.z = p.bz;\n if (O.oscPos) {\n const ph = this.simTime * p.oscFreq * TAU + p.oscPhase;\n const m = O.oscPos.mask;\n p.x += Math.sin(ph) * p.oscAmp * m[0];\n p.y += Math.cos(ph) * p.oscAmp * m[1];\n p.z += Math.sin(ph * 0.7) * p.oscAmp * m[2];\n }\n let size = p.baseSize;\n if (O.sizeChange) {\n const sc = O.sizeChange;\n const span = sc.endTime - sc.startTime;\n const k = span > 0 ? Math.min(1, Math.max(0, (lt - sc.startTime) / span)) : lt >= sc.startTime ? 1 : 0;\n size *= sc.startValue + (sc.endValue - sc.startValue) * k;\n }\n if (O.oscSize) {\n const ph = this.simTime * p.oscSFreq * TAU + p.oscSPhase;\n const os = O.oscSize;\n const mid = (os.scaleMin + os.scaleMax) / 2;\n const amp = (os.scaleMax - os.scaleMin) / 2;\n size *= mid + Math.sin(ph) * amp;\n }\n p.size = size;\n if (O.colorChange) {\n const cc = O.colorChange;\n const span = cc.endTime - cc.startTime;\n const k = span > 0 ? Math.min(1, Math.max(0, (lt - cc.startTime) / span)) : lt >= cc.startTime ? 1 : 0;\n const s0 = cc.startValue || [p.baseR, p.baseG, p.baseB];\n p.r = s0[0] + (cc.endValue[0] - s0[0]) * k;\n p.g = s0[1] + (cc.endValue[1] - s0[1]) * k;\n p.b = s0[2] + (cc.endValue[2] - s0[2]) * k;\n }\n let a = p.baseAlpha;\n if (O.alphaFade) {\n const fi = O.alphaFade.fadeIn;\n const fo = O.alphaFade.fadeOut;\n if (fi > 0 && lt < fi) a *= lt / fi;\n if (fo < 1 && lt > fo) a *= Math.max(0, (1 - lt) / (1 - fo));\n } else if (!O.alphaChange) {\n if (lt < 0.1) a *= lt / 0.1;\n else if (lt > 0.85) a *= (1 - lt) / 0.15;\n }\n if (O.alphaChange) {\n const ac = O.alphaChange;\n const span = ac.endTime - ac.startTime;\n const k = span > 0 ? Math.min(1, Math.max(0, (lt - ac.startTime) / span)) : lt >= ac.startTime ? 1 : 0;\n a *= ac.startValue + (ac.endValue - ac.startValue) * k;\n }\n if (O.oscAlpha) {\n const ph = this.simTime * p.oscAFreq * TAU + p.oscAPhase;\n const oa = O.oscAlpha;\n const mid = (oa.scaleMin + oa.scaleMax) / 2;\n const amp = (oa.scaleMax - oa.scaleMin) / 2;\n a *= mid + Math.sin(ph) * amp;\n }\n p.alpha = Math.max(0, a);\n if (this.frameCount > 1 && this.animationMode !== \"randomframe\") {\n p.frame = Math.min(this.frameCount - 1, Math.floor(lt * this.frameCount));\n }\n if (p.trail) {\n const tr = p.trail;\n for (let i = tr.length - 3; i >= 3; i -= 3) {\n tr[i] = tr[i - 3];\n tr[i + 1] = tr[i - 2];\n tr[i + 2] = tr[i - 1];\n }\n tr[0] = p.x;\n tr[1] = p.y;\n tr[2] = p.z;\n }\n }\n // 控制点当前位置(局部空间)\n _cpPos(id) {\n const cp = this.controlPoints.find((c) => c.id === id);\n if (!cp) return null;\n if (cp.lockToPointer) {\n if (!this.pointer) return null;\n return [this.pointer.x + cp.offset[0], this.pointer.y + cp.offset[1], cp.offset[2]];\n }\n return cp.offset;\n }\n // ---------- 帧推进 ----------\n advance(dt, audio) {\n if (this.paused || !this.visible) return;\n this._syncFollow();\n if (!this._warmed) {\n this._warmed = true;\n if (this.startTime > 0) {\n const step = 1 / 30;\n const steps = Math.min(900, Math.round(this.startTime / step));\n for (let i = 0; i < steps; i++) this._step(step);\n }\n }\n this._step(dt, audio);\n }\n _step(dt, audio) {\n this.simTime += dt;\n const level = audio && Number.isFinite(audio.level) ? Math.max(0, Math.min(1, audio.level)) : 0;\n this._audioLevel = level;\n for (const em of this.emitters) {\n if (em.instantaneous > 0 && !em._burst) {\n em._burst = true;\n for (let i = 0; i < Math.min(em.instantaneous, this.maxCount); i++) this.spawn(em);\n }\n if (em.fill) {\n const FILL_CAP = 2048;\n const cap = Math.min(this.maxCount, FILL_CAP);\n let live = 0;\n for (let i = 0; i < this.pool.length; i++) if (this.pool[i].alive) live++;\n let refill = Math.min(cap - live, 512);\n while (refill-- > 0) this.spawn(em);\n continue;\n }\n if (em.audioDriven) {\n const k = audioGate(em.audioBounds, level);\n if (em.rate > 0) {\n const rate2 = em.rate * k * (this._ov.rateMul !== void 0 ? this._ov.rateMul : 1) * (this._ov.countMul !== void 0 ? this._ov.countMul : 1);\n if (!(rate2 > 0)) continue;\n em._accum = (em._accum || 0) + rate2 * dt;\n let n2 = Math.floor(em._accum);\n if (n2 > 0) {\n em._accum -= n2;\n if (n2 > this.maxCount) n2 = this.maxCount;\n for (let i = 0; i < n2; i++) this.spawn(em);\n }\n } else {\n const FILL_CAP = 2048;\n const target = Math.round(Math.min(this.maxCount, FILL_CAP) * k);\n let live = 0;\n for (let i = 0; i < this.pool.length; i++) if (this.pool[i].alive) live++;\n let refill = Math.min(target - live, 256);\n while (refill-- > 0) this.spawn(em);\n }\n continue;\n }\n const rate = em.rate * (this._ov.rateMul !== void 0 ? this._ov.rateMul : 1) * (this._ov.countMul !== void 0 ? this._ov.countMul : 1);\n if (!(rate > 0)) continue;\n em._accum = (em._accum || 0) + rate * dt;\n let n = Math.floor(em._accum);\n if (n > 0) {\n em._accum -= n;\n if (n > this.maxCount) n = this.maxCount;\n for (let i = 0; i < n; i++) this.spawn(em);\n }\n }\n const pool = this.pool;\n for (let i = 0; i < pool.length; i++) {\n if (pool[i].alive) this.updateParticle(pool[i], dt);\n }\n }\n // ---------- 渲染 ----------\n // viewProj:场景投影矩阵;projH 用于 y 翻转(世界 y 向下 → 投影空间)\n render(viewProj, width, height, projW, projH) {\n if (!this._ready || !this.visible) return;\n if (!this.renderers.length) return;\n const gl = this.gl;\n if (!this._prog) this._buildProgram(gl);\n const trail = this.trailCfg && this.trailCfg.kind === \"ropetrail\" ? this.trailCfg : null;\n const spriteTrail = this.trailCfg && this.trailCfg.kind === \"spritetrail\" ? this.trailCfg : null;\n const segs = particleInstanceSegs(this.trailCfg, this.trailSegments);\n const STRIDE = 12;\n const pool = this.pool;\n let live = 0;\n for (let i = 0; i < pool.length; i++) if (pool[i].alive) live++;\n if (live === 0) return;\n const instCount = live * segs;\n const need = instCount * STRIDE;\n if (!this._data || this._data.length < need) this._data = new Float32Array(Math.max(need, 1024));\n const data = this._data;\n let k = 0;\n const bright = this._ov.brightness || 1;\n const sysScale = this.sysScale;\n const stretchX = this.spriteStretchX * (this.texAspectX || 1);\n const stretchY = this.spriteStretchY * (this.texAspectY || 1);\n const cos = Math.cos(this.angleZ);\n const sin = Math.sin(this.angleZ);\n const ox = this.originX;\n const oy = this.originY;\n const sx = this.scaleX;\n const sy = this.scaleY;\n const toWorld = (lx, ly) => {\n const px = lx * sx;\n const py = ly * sy;\n return [ox + px * cos - py * sin, projH - (oy + px * sin + py * cos)];\n };\n for (let i = 0; i < pool.length; i++) {\n const p = pool[i];\n if (!p.alive) continue;\n for (let s = 0; s < segs; s++) {\n let lx = p.x;\n let ly = p.y;\n let segAlpha = 1;\n let segSize = 1;\n if (trail && p.trail) {\n lx = p.trail[s * 3];\n ly = p.trail[s * 3 + 1];\n const t = segs > 1 ? s / (segs - 1) : 0;\n segAlpha = 1 - t;\n segSize = 1 - t * 0.55;\n }\n const w = toWorld(lx, ly);\n let rot = p.rot;\n let instStretchX = stretchX;\n let instStretchY = stretchY;\n if (spriteTrail) {\n const w1 = toWorld(p.x + p.vx, p.y + p.vy);\n rot = spriteTrailRotation(w1[0] - w[0], w1[1] - w[1]);\n const factor = spriteTrailLengthFactor(\n Math.hypot(p.vx, p.vy),\n spriteTrail.length,\n spriteTrail.minLength,\n spriteTrail.maxLength\n );\n instStretchY = stretchY * factor;\n }\n data[k++] = w[0];\n data[k++] = w[1];\n data[k++] = 0;\n data[k++] = Math.abs(p.size) * sysScale * segSize;\n data[k++] = rot;\n data[k++] = p.r * bright;\n data[k++] = p.g * bright;\n data[k++] = p.b * bright;\n data[k++] = p.alpha * segAlpha;\n data[k++] = instStretchX;\n data[k++] = instStretchY;\n data[k++] = p.frame;\n }\n }\n const prog = this._prog;\n gl.useProgram(prog.prog);\n gl.bindVertexArray(this._vao);\n gl.bindBuffer(gl.ARRAY_BUFFER, this._vbuf);\n gl.bufferData(gl.ARRAY_BUFFER, data.subarray(0, k), gl.DYNAMIC_DRAW);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.texture.glTex);\n gl.uniform1i(prog.uniTex, 0);\n gl.uniformMatrix4fv(prog.uniMvp, false, viewProj);\n const useRefract = this.refract && this.normalTex && this.normalTex.glTex;\n if (prog.uniRefract) gl.uniform1i(prog.uniRefract, useRefract ? 1 : 0);\n if (useRefract) {\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, this.normalTex.glTex);\n if (prog.uniNormal) gl.uniform1i(prog.uniNormal, 1);\n const sampleScene = this.blend !== \"additive\";\n if (prog.uniSampleScene) gl.uniform1i(prog.uniSampleScene, sampleScene ? 1 : 0);\n if (sampleScene) {\n const dw = gl.drawingBufferWidth || width;\n const dh = gl.drawingBufferHeight || height;\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.activeTexture(gl.TEXTURE2);\n if (!this._sceneTex) {\n this._sceneTex = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, this._sceneTex);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n } else {\n gl.bindTexture(gl.TEXTURE_2D, this._sceneTex);\n }\n gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.RGB8, 0, 0, dw, dh, 0);\n if (prog.uniScene) gl.uniform1i(prog.uniScene, 2);\n if (prog.uniResolution) gl.uniform2f(prog.uniResolution, dw, dh);\n if (prog.uniRefractScale) gl.uniform1f(prog.uniRefractScale, this.refractAmount || 0.04);\n } else {\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, this.texture.glTex);\n if (prog.uniScene) gl.uniform1i(prog.uniScene, 2);\n }\n } else if (prog.uniNormal) {\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, this.texture.glTex);\n gl.uniform1i(prog.uniNormal, 1);\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, this.texture.glTex);\n if (prog.uniScene) gl.uniform1i(prog.uniScene, 2);\n if (prog.uniSampleScene) gl.uniform1i(prog.uniSampleScene, 0);\n }\n const fd = this._frameUniformData();\n if (fd) {\n gl.uniform1i(prog.uniFrameCount, fd.count);\n gl.uniform4fv(prog.uniFrames, fd.arr);\n } else {\n gl.uniform1i(prog.uniFrameCount, 0);\n }\n gl.enable(gl.BLEND);\n if (this.blend === \"additive\") gl.blendFunc(gl.SRC_ALPHA, gl.ONE);\n else gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n gl.depthMask(false);\n gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, instCount);\n gl.depthMask(true);\n gl.disable(gl.BLEND);\n gl.bindVertexArray(null);\n }\n _buildProgram(gl) {\n const built = buildParticleProgram(gl);\n this._quadBuf = built.quadBuf;\n this._vbuf = built.vbuf;\n this._vao = built.vao;\n this._prog = built.prog;\n }\n // 序列帧 uv 表(vec4[]:xy=offset zw=scale)。\n // 有 TEXS 用真实帧矩形;否则按 sequencemultiplier 退回 N×N 方格。\n _frameUniformData() {\n if (this._frameData !== void 0) return this._frameData;\n let list = this.texFrames;\n if (!list && this.sequenceMul > 1) {\n const n = this.sequenceMul;\n list = [];\n for (let r = 0; r < n; r++)\n for (let c = 0; c < n; c++) list.push({ ou: c / n, ov: r / n, su: 1 / n, sv: 1 / n });\n }\n if (!list || list.length === 0) {\n this._frameData = null;\n return null;\n }\n const cap = Math.min(list.length, 128);\n const arr = new Float32Array(cap * 4);\n for (let i = 0; i < cap; i++) {\n arr[i * 4] = list[i].ou;\n arr[i * 4 + 1] = list[i].ov;\n arr[i * 4 + 2] = list[i].su;\n arr[i * 4 + 3] = list[i].sv;\n }\n this._frameData = { count: cap, arr };\n return this._frameData;\n }\n // 诊断用:当前存活粒子数\n liveCount() {\n let n = 0;\n for (const p of this.pool) if (p.alive) n++;\n return n;\n }\n dispose() {\n this.paused = true;\n const gl = this.gl;\n if (!gl) return;\n try {\n if (this._vbuf) gl.deleteBuffer(this._vbuf);\n if (this._quadBuf) gl.deleteBuffer(this._quadBuf);\n if (this._vao) gl.deleteVertexArray(this._vao);\n if (this._prog && this._prog.prog) gl.deleteProgram(this._prog.prog);\n if (this._sceneTex) gl.deleteTexture(this._sceneTex);\n } catch (e) {\n }\n this._prog = null;\n this._vbuf = null;\n this._quadBuf = null;\n this._vao = null;\n this._data = null;\n this._sceneTex = null;\n }\n}\nconst particlesMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n ParticleSystem,\n particleInstanceSegs,\n particlePassRefract,\n rgbaIsBlankWhite,\n spriteTrailLengthFactor,\n spriteTrailRotation\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst cache = /* @__PURE__ */ new Map();\nconst overrides = /* @__PURE__ */ new Map();\nlet overrideProvider = null;\nfunction setParticleTextureFactory(name, factory) {\n const key = String(name);\n overrides.set(key, factory);\n cache.delete(key);\n}\nfunction setParticleTextureProvider(provider) {\n overrideProvider = typeof provider === \"function\" ? provider : null;\n}\nfunction resetParticleTextureFactories() {\n overrides.clear();\n overrideProvider = null;\n cache.clear();\n}\nfunction listBuiltinParticleTextureNames() {\n return Object.keys(BUILDERS);\n}\nfunction writeWhite(rgba, o, a) {\n rgba[o] = 255;\n rgba[o + 1] = 255;\n rgba[o + 2] = 255;\n rgba[o + 3] = Math.round(Math.min(1, Math.max(0, a)) * 255);\n}\nfunction conditionTexture(tex2, targetAvg) {\n const { width: W, height: H, rgba } = tex2;\n const feather = Math.max(2, Math.round(Math.min(W, H) * 0.04));\n for (let y = 0; y < H; y++) {\n for (let x = 0; x < W; x++) {\n const dEdge = Math.min(x, y, W - 1 - x, H - 1 - y);\n if (dEdge >= feather) continue;\n const k = dEdge / feather;\n const o = (y * W + x) * 4 + 3;\n rgba[o] = Math.round(rgba[o] * k);\n }\n }\n if (targetAvg > 0) {\n let sum = 0;\n const N = W * H;\n for (let i = 0; i < N; i++) sum += rgba[i * 4 + 3];\n const avg = sum / N / 255;\n if (avg > targetAvg && avg > 0) {\n const k = targetAvg / avg;\n for (let i = 0; i < N; i++) rgba[i * 4 + 3] = Math.round(rgba[i * 4 + 3] * k);\n }\n }\n return tex2;\n}\nfunction mulberry32$1(seed) {\n let a = seed >>> 0;\n return function() {\n a |= 0;\n a = a + 1831565813 | 0;\n let t = Math.imul(a ^ a >>> 15, 1 | a);\n t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n };\n}\nconst smooth01 = (t) => t * t * (3 - 2 * t);\nconst smooth5 = (t) => t * t * t * (t * (t * 6 - 15) + 10);\nconst lerp = (a, b, t) => a + (b - a) * t;\nconst gauss = (d, s) => Math.exp(-(d * d) / (s * s));\nfunction edgeFade(x, y, size, feather) {\n const dEdge = Math.min(x, y, size - 1 - x, size - 1 - y);\n return dEdge >= feather ? 1 : dEdge / feather;\n}\nfunction glowN(size, lobes) {\n const rgba = new Uint8Array(size * size * 4);\n const half = size / 2;\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const d = Math.hypot((x + 0.5 - half) / half, (y + 0.5 - half) / half);\n let a = 0;\n for (let i = 0; i < lobes.length; i++) a += lobes[i].w * gauss(d, lobes[i].r);\n writeWhite(rgba, (y * size + x) * 4, a);\n }\n }\n return { width: size, height: size, rgba };\n}\nfunction glow2(size, core, halo) {\n return glowN(size, [core, halo]);\n}\nfunction spikyStar(size, points, len, sharp, coreR) {\n const rgba = new Uint8Array(size * size * 4);\n const half = size / 2;\n const feather = Math.max(2, Math.round(size * 0.03));\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const px = (x + 0.5 - half) / half;\n const py = (y + 0.5 - half) / half;\n const d = Math.hypot(px, py);\n const th = Math.atan2(py, px);\n const m = Math.pow(0.5 + 0.5 * Math.cos(points * th), sharp);\n let a = gauss(d, coreR) + m * gauss(d, len);\n a *= edgeFade(x, y, size, feather);\n writeWhite(rgba, (y * size + x) * 4, a);\n }\n }\n return { width: size, height: size, rgba };\n}\nfunction beam(w, h, coreWidth, fadeBoth, peak) {\n const pk = peak === void 0 ? 0.55 : peak;\n const rgba = new Uint8Array(w * h * 4);\n for (let y = 0; y < h; y++) {\n const ty = y / (h - 1);\n const vy = fadeBoth ? gauss(ty - 0.5, 0.27) : smooth01(Math.min(1, ty / 0.06)) * Math.pow(1 - ty, 1.35);\n for (let x = 0; x < w; x++) {\n const tx = x / (w - 1) * 2 - 1;\n const g = gauss(tx, coreWidth);\n writeWhite(rgba, (y * w + x) * 4, g * g * g * vy * pk);\n }\n }\n return { width: w, height: h, rgba };\n}\nfunction ring(size, radius, thickness) {\n const rgba = new Uint8Array(size * size * 4);\n const half = size / 2;\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const d = Math.hypot((x - half) / half, (y - half) / half);\n writeWhite(rgba, (y * size + x) * 4, gauss(d - radius, thickness * 0.6) * Math.max(0, 1 - d));\n }\n }\n return { width: size, height: size, rgba };\n}\nfunction bubble(size, variant) {\n const specs = {\n 1: { r: 0.78, t: 0.048, inner: 0.06, hi: [[-0.28, -0.32, 0.22, 0.9], [0.32, 0.36, 0.12, 0.28]] },\n 2: { r: 0.7, t: 0.07, inner: 0.14, hi: [[-0.2, -0.28, 0.3, 0.72], [0.38, 0.2, 0.14, 0.4]] },\n 3: { r: 0.84, t: 0.036, inner: 0.04, hi: [[-0.34, -0.18, 0.16, 0.95], [0.2, 0.42, 0.1, 0.22], [0.04, -0.08, 0.07, 0.18]] }\n };\n const spec = specs[variant] || specs[1];\n const rgba = new Uint8Array(size * size * 4);\n const half = size / 2;\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const px = (x + 0.5 - half) / half;\n const py = (y + 0.5 - half) / half;\n const d = Math.hypot(px, py);\n let a = gauss(d - spec.r, spec.t * 0.85) * Math.max(0, 1.05 - d);\n if (d < spec.r) a += spec.inner * gauss(d, 0.5);\n for (let i = 0; i < spec.hi.length; i++) {\n const h = spec.hi[i];\n a += h[3] * gauss(Math.hypot(px - h[0], py - h[1]), h[2]);\n }\n writeWhite(rgba, (y * size + x) * 4, a);\n }\n }\n return conditionTexture({ width: size, height: size, rgba }, 0.05);\n}\nfunction bubbleSheet(size, baseVariant) {\n const cell = size >> 1;\n const rgba = new Uint8Array(size * size * 4);\n const vars = baseVariant === 1 ? [1, 2, 1, 3] : baseVariant === 2 ? [2, 1, 2, 3] : [3, 1, 2, 3];\n for (let row = 0; row < 2; row++) {\n for (let col = 0; col < 2; col++) {\n const src = bubble(cell, vars[row * 2 + col]);\n for (let y = 0; y < cell; y++) {\n const dy = (row * cell + y) * size;\n const sy = y * cell;\n for (let x = 0; x < cell; x++) {\n const di = (dy + col * cell + x) * 4;\n const si = (sy + x) * 4;\n rgba[di] = src.rgba[si];\n rgba[di + 1] = src.rgba[si + 1];\n rgba[di + 2] = src.rgba[si + 2];\n rgba[di + 3] = src.rgba[si + 3];\n }\n }\n }\n }\n return { width: size, height: size, rgba };\n}\nfunction petals(size) {\n const rgba = new Uint8Array(size * size * 4);\n const cell = size / 2;\n const cfg = [\n [0.32, 0],\n [1.1, 0.35],\n [2.2, -0.3],\n [-0.7, 0.2]\n ];\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const col = x >= cell ? 1 : 0;\n const row = y >= cell ? 1 : 0;\n const i = row * 2 + col;\n const cx = col * cell + cell / 2;\n const cy = row * cell + cell / 2;\n const rot = cfg[i][0];\n const curl = cfg[i][1];\n const px = (x + 0.5 - cx) / (cell * 0.4);\n const py = (y + 0.5 - cy) / (cell * 0.4);\n const ca = Math.cos(rot);\n const sa = Math.sin(rot);\n let ux = px * ca + py * sa;\n const uy = -px * sa + py * ca;\n ux += curl * uy * 0.18;\n const taper = 1 - Math.max(0, uy) * 0.42;\n const d = Math.hypot(ux / (0.52 * taper), uy / 0.92);\n let a = d >= 1.12 ? 0 : gauss(d, 0.48);\n a = Math.min(1, a + gauss(ux, 0.07) * gauss(uy, 0.65) * a * 0.4);\n writeWhite(rgba, (y * size + x) * 4, a);\n }\n }\n return conditionTexture({ width: size, height: size, rgba }, 0.11);\n}\nfunction leaf(size, kind) {\n const specs = {\n 0: { rx: 0.36, ry: 0.92, wave: 0, folds: 0 },\n 1: { rx: 0.48, ry: 0.86, wave: 0.05, folds: 7 },\n 2: { rx: 0.4, ry: 0.88, wave: 0.08, folds: 5 },\n 3: { rx: 0.58, ry: 0.72, wave: 0, folds: 0 },\n 5: { rx: 0.44, ry: 0.8, wave: 0.12, folds: 9 },\n 6: { rx: 0.52, ry: 0.78, wave: 0.07, folds: 4 },\n 7: { rx: 0.5, ry: 0.9, wave: 0.16, folds: 3 },\n 8: { rx: 0.38, ry: 0.94, wave: 0.2, folds: 2 }\n };\n const s = specs[kind] || specs[0];\n const rgba = new Uint8Array(size * size * 4);\n const half = size / 2;\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const px = (x + 0.5 - half) / half;\n const py = (y + 0.5 - half) / half;\n const th = Math.atan2(px, py);\n const serr = s.wave ? 1 + s.wave * Math.sin(th * s.folds) : 1;\n const d = Math.hypot(px / (s.rx * serr), py / s.ry);\n let a = d >= 1.12 ? 0 : gauss(d, 0.5);\n if (a > 0) a = Math.min(1, a + gauss(px, 0.028) * gauss(py, 0.72) * 0.28);\n writeWhite(rgba, (y * size + x) * 4, a);\n }\n }\n return conditionTexture({ width: size, height: size, rgba }, 0.11);\n}\nfunction heightToNormal(src, strength) {\n const W = src.width;\n const H = src.height;\n const srcRgba = src.rgba;\n const k = strength == null ? 2.8 : strength;\n const rgba = new Uint8Array(W * H * 4);\n const hAt = (x, y) => {\n const cx = x < 0 ? 0 : x >= W ? W - 1 : x;\n const cy = y < 0 ? 0 : y >= H ? H - 1 : y;\n return srcRgba[(cy * W + cx) * 4 + 3] / 255;\n };\n for (let y = 0; y < H; y++) {\n for (let x = 0; x < W; x++) {\n const dx = (hAt(x - 1, y) - hAt(x + 1, y)) * k;\n const dy = (hAt(x, y - 1) - hAt(x, y + 1)) * k;\n const inv = 1 / Math.hypot(dx, dy, 1);\n const o = (y * W + x) * 4;\n rgba[o] = Math.round((dx * inv * 0.5 + 0.5) * 255);\n rgba[o + 1] = Math.round((dy * inv * 0.5 + 0.5) * 255);\n rgba[o + 2] = Math.round((inv * 0.5 + 0.5) * 255);\n rgba[o + 3] = 255;\n }\n }\n return { width: W, height: H, rgba };\n}\nfunction splashHeight(size) {\n const rgba = new Uint8Array(size * size * 4);\n const half = size / 2;\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const px = (x + 0.5 - half) / half;\n const py = (y + 0.5 - half) / half;\n const r = Math.hypot(px, py);\n const cap = r >= 1 ? 0 : Math.sqrt(Math.max(0, 1 - r * r));\n const ring2 = gauss(r - 0.62, 0.11) * 0.55;\n writeWhite(rgba, (y * size + x) * 4, Math.min(1, cap * 0.85 + ring2));\n }\n }\n return { width: size, height: size, rgba };\n}\nfunction pinchHeight(size) {\n const rgba = new Uint8Array(size * size * 4);\n const half = size / 2;\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const px = (x + 0.5 - half) / half;\n const py = (y + 0.5 - half) / half;\n const r = Math.hypot(px, py);\n const th = Math.atan2(py, px);\n const pinch = gauss(r, 0.38) * (0.55 + 0.45 * Math.cos(th * 3 + r * 6));\n writeWhite(rgba, (y * size + x) * 4, pinch);\n }\n }\n return { width: size, height: size, rgba };\n}\nfunction windCircle(size) {\n const rgba = new Uint8Array(size * size * 4);\n const half = size / 2;\n const feather = Math.max(2, Math.round(size * 0.04));\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const px = (x + 0.5 - half) / half;\n const py = (y + 0.5 - half) / half;\n const r = Math.hypot(px, py);\n const th = Math.atan2(py, px);\n const gap = smooth01(Math.max(0, Math.cos(th) * 0.55 + 0.45));\n const a = gauss(r - 0.68, 0.07) * gap + 0.35 * gauss(r - 0.78, 0.12) * gauss(th - 0.9, 0.55);\n writeWhite(rgba, (y * size + x) * 4, Math.min(1, a) * edgeFade(x, y, size, feather));\n }\n }\n return { width: size, height: size, rgba };\n}\nfunction rgbaLooksLikeAlbedo(rgba) {\n if (!rgba || rgba.length < 16) return false;\n const n = rgba.length / 4;\n const step = Math.max(1, n / 48 | 0);\n let seen = 0;\n for (let i = 0; i < n; i += step) {\n const o = i * 4;\n if (rgba[o] < 240 || rgba[o + 1] < 240 || rgba[o + 2] < 240) return false;\n seen++;\n }\n return seen > 0;\n}\nfunction prepareParticleNormalTexture(tex2) {\n if (!tex2 || !tex2.rgba) return tex2;\n return rgbaLooksLikeAlbedo(tex2.rgba) ? heightToNormal(tex2, 2.8) : tex2;\n}\nconst ALBEDO_NORMAL_ALIAS = {\n \"particle/drop\": \"particle/drop_normal\",\n \"particle/water/rain_drops_sheet\": \"particle/water/rain_drops_sheet_normal\",\n \"particle/bubbles/bubble1\": \"particle/bubbles/bubble1normal\",\n \"particle/bubbles/bubble2\": \"particle/bubbles/bubble2_normal\",\n \"particle/sharp_halo\": \"particle/sharp_halo_normal\",\n \"particle/misc/wave\": \"particle/normal_splash\",\n \"particle/halo\": \"particle/sharp_halo_normal\"\n};\nfunction particleNormalNameForAlbedo(albedo) {\n if (!albedo) return null;\n const n = String(albedo);\n if (/normal/i.test(n)) return n;\n return ALBEDO_NORMAL_ALIAS[n] || n + \"_normal\";\n}\nfunction pairedAlbedoName(name) {\n const n = String(name);\n if (/(^|\\/)normal_/.test(n)) return null;\n if (/_normal$/i.test(n)) return n.replace(/_normal$/i, \"\");\n if (/normal$/i.test(n)) return n.replace(/normal$/i, \"\");\n return null;\n}\nfunction albedoPixels(name) {\n if (BUILDERS[name]) return BUILDERS[name]();\n const n = String(name).toLowerCase();\n if (/normal/.test(n)) return glow2(64, { r: 0.18, w: 1 }, { r: 0.4, w: 0.2 });\n return fallbackFor(name)();\n}\nfunction makeFbm(freq, oct, seed) {\n const rnd2 = mulberry32$1(seed * 7919 + 17);\n let f = freq;\n const lattices = [];\n for (let o = 0; o < oct; o++) {\n const n = f * f;\n const g = new Float32Array(n * 2);\n for (let i = 0; i < n; i++) {\n const ang = rnd2() * Math.PI * 2;\n g[i * 2] = Math.cos(ang);\n g[i * 2 + 1] = Math.sin(ang);\n }\n lattices.push({ f, g, ox: o * 7.31, oy: o * 3.17 });\n f *= 2;\n }\n const dotAt = (lat, ix, iy, dx, dy) => {\n const lf = lat.f;\n const xa = (ix % lf + lf) % lf;\n const ya = (iy % lf + lf) % lf;\n const i = (ya * lf + xa) * 2;\n return lat.g[i] * dx + lat.g[i + 1] * dy;\n };\n const perlin = (lat, u, v) => {\n const fx = (u + lat.ox) * lat.f;\n const fy = (v + lat.oy) * lat.f;\n const x0 = Math.floor(fx);\n const y0 = Math.floor(fy);\n const dx = fx - x0;\n const dy = fy - y0;\n const tx = smooth5(dx);\n const ty = smooth5(dy);\n return lerp(\n lerp(dotAt(lat, x0, y0, dx, dy), dotAt(lat, x0 + 1, y0, dx - 1, dy), tx),\n lerp(dotAt(lat, x0, y0 + 1, dx, dy - 1), dotAt(lat, x0 + 1, y0 + 1, dx - 1, dy - 1), tx),\n ty\n );\n };\n return function fbm(u, v, octLimit) {\n const n = octLimit == null ? lattices.length : Math.min(octLimit, lattices.length);\n let amp = 1;\n let sum = 0;\n let norm = 0;\n for (let i = 0; i < n; i++) {\n sum += (perlin(lattices[i], u, v) * 0.5 + 0.5) * amp;\n norm += amp;\n amp *= 0.55;\n }\n return sum / norm;\n };\n}\nfunction bilinearResize(tex2, w2, h2) {\n const { width: w, height: h, rgba } = tex2;\n if (w === w2 && h === h2) return tex2;\n const out = new Uint8Array(w2 * h2 * 4);\n for (let y = 0; y < h2; y++) {\n const fy = (y + 0.5) / h2 * h - 0.5;\n const y0 = Math.max(0, Math.min(h - 1, Math.floor(fy)));\n const y1 = Math.max(0, Math.min(h - 1, y0 + 1));\n const ty = fy - Math.floor(fy);\n for (let x = 0; x < w2; x++) {\n const fx = (x + 0.5) / w2 * w - 0.5;\n const x0 = Math.max(0, Math.min(w - 1, Math.floor(fx)));\n const x1 = Math.max(0, Math.min(w - 1, x0 + 1));\n const tx = fx - Math.floor(fx);\n const a0 = rgba[(y0 * w + x0) * 4 + 3];\n const a1 = rgba[(y0 * w + x1) * 4 + 3];\n const a2 = rgba[(y1 * w + x0) * 4 + 3];\n const a3 = rgba[(y1 * w + x1) * 4 + 3];\n const a = (a0 * (1 - tx) + a1 * tx) * (1 - ty) + (a2 * (1 - tx) + a3 * tx) * ty;\n writeWhite(out, (y * w2 + x) * 4, a / 255);\n }\n }\n return { width: w2, height: h2, rgba: out };\n}\nfunction fogNoise(size, freq, oct, seed, density, maskExp, peakTarget) {\n const mExp = maskExp === void 0 ? 1 : maskExp;\n const pk = peakTarget === void 0 ? 200 : peakTarget;\n const inner = 256;\n const fbm = makeFbm(freq, oct, seed);\n const rgba = new Uint8Array(inner * inner * 4);\n const half = inner / 2;\n const N = inner * inner;\n const noise2 = new Float32Array(N);\n let lo = 1;\n let hi = 0;\n for (let i = 0; i < N; i++) {\n const x = i % inner;\n const y = i / inner | 0;\n const u = (x + 0.5) / inner;\n const v = (y + 0.5) / inner;\n const qx = fbm(u + 5.2, v + 1.3, 2) - 0.5;\n const qy = fbm(u + 9.7, v + 8.1, 2) - 0.5;\n const val = noise2[i] = fbm(u + qx * 0.45, v + qy * 0.45);\n if (val < lo) lo = val;\n if (val > hi) hi = val;\n }\n const span = hi - lo || 1;\n for (let y = 0; y < inner; y++) {\n for (let x = 0; x < inner; x++) {\n const n = (noise2[y * inner + x] - lo) / span;\n const d = Math.hypot((x + 0.5 - half) / half, (y + 0.5 - half) / half);\n const mask = Math.pow(Math.max(0, 1 - d), mExp);\n let a = Math.max(0, (n - (1 - density)) / (density || 1));\n a = smooth01(Math.min(1, a)) * mask;\n writeWhite(rgba, (y * inner + x) * 4, a);\n }\n }\n let maxA = 0;\n for (let i = 0; i < N; i++) maxA = Math.max(maxA, rgba[i * 4 + 3]);\n if (maxA > 0 && maxA < pk) {\n const k = pk / maxA;\n for (let i = 0; i < N; i++) rgba[i * 4 + 3] = Math.round(Math.min(255, rgba[i * 4 + 3] * k));\n }\n const tex2 = { width: inner, height: inner, rgba };\n return inner === size ? tex2 : bilinearResize(tex2, size, size);\n}\nfunction fireWisp(size, seed) {\n const inner = size;\n const fbm = makeFbm(3, 5, seed == null ? 23 : seed);\n const rgba = new Uint8Array(inner * inner * 4);\n const N = inner * inner;\n const noise2 = new Float32Array(N);\n let lo = 1;\n let hi = 0;\n for (let i = 0; i < N; i++) {\n const x = i % inner;\n const y = i / inner | 0;\n const u = (x + 0.5) / inner;\n const v = (y + 0.5) / inner;\n const qx = fbm(u + 2.1, v + 4.7, 2) - 0.5;\n const qy = fbm(u + 6.3, v + 1.9, 2) - 0.5;\n const val = noise2[i] = fbm(u + qx * 0.28, v + qy * 0.55);\n if (val < lo) lo = val;\n if (val > hi) hi = val;\n }\n const span = hi - lo || 1;\n for (let y = 0; y < inner; y++) {\n for (let x = 0; x < inner; x++) {\n const ty = (y + 0.5) / inner;\n const tx = (x + 0.5) / inner * 2 - 1;\n const halfW = 0.1 + 0.52 * Math.pow(ty, 1.25);\n const n = (noise2[y * inner + x] - lo) / span;\n const mask = gauss(tx / (halfW || 0.01), 0.55) * gauss(ty - 0.58, 0.42);\n let a = smooth01(Math.min(1, Math.max(0, (n - 0.18) / 0.72))) * mask;\n a *= ty < 0.06 ? ty / 0.06 : 1;\n writeWhite(rgba, (y * inner + x) * 4, a);\n }\n }\n let maxA = 0;\n for (let i = 0; i < N; i++) maxA = Math.max(maxA, rgba[i * 4 + 3]);\n if (maxA > 0 && maxA < 220) {\n const k = 220 / maxA;\n for (let i = 0; i < N; i++) rgba[i * 4 + 3] = Math.round(Math.min(255, rgba[i * 4 + 3] * k));\n }\n const tex2 = conditionTexture({ width: inner, height: inner, rgba }, 0.08);\n return inner === size ? tex2 : bilinearResize(tex2, size, size);\n}\nfunction dropSheet(w, h, cols, rows) {\n const rgba = new Uint8Array(w * h * 4);\n const cw = w / cols;\n const ch = h / rows;\n for (let y = 0; y < h; y++) {\n for (let x = 0; x < w; x++) {\n const cx = Math.floor(x / cw);\n const cy = Math.floor(y / ch);\n const lx = (x + 0.5 - cx * cw) / cw * 2 - 1;\n const ly = (y + 0.5 - cy * ch) / ch * 2 - 1;\n const taper = 1 - Math.max(0, ly) * 0.45;\n const d = Math.hypot(lx / (0.52 * taper), ly / 0.8);\n const a = d >= 1.12 ? 0 : gauss(d, 0.48);\n writeWhite(rgba, (y * w + x) * 4, a);\n }\n }\n return { width: w, height: h, rgba };\n}\nfunction debrisScatter(size) {\n const rgba = new Uint8Array(size * size * 4);\n const rnd2 = mulberry32$1(7);\n const specks = [];\n for (let i = 0; i < 11; i++) {\n specks.push({\n x: 0.14 + rnd2() * 0.72,\n y: 0.14 + rnd2() * 0.72,\n rx: 0.025 + rnd2() * 0.03,\n ry: 0.018 + rnd2() * 0.024,\n rot: rnd2() * Math.PI\n });\n }\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const px = (x + 0.5) / size;\n const py = (y + 0.5) / size;\n let best = 0;\n for (const s of specks) {\n const dx = px - s.x;\n const dy = py - s.y;\n const ca = Math.cos(s.rot);\n const sa = Math.sin(s.rot);\n const ux = (dx * ca + dy * sa) / s.rx;\n const uy = (-dx * sa + dy * ca) / s.ry;\n const a = gauss(Math.hypot(ux, uy), 0.55);\n if (a > best) best = a;\n }\n writeWhite(rgba, (y * size + x) * 4, best);\n }\n }\n return { width: size, height: size, rgba };\n}\nfunction lightningBolt(size, seed) {\n const s = seed == null ? 19 : seed;\n const rnd2 = mulberry32$1(s);\n const clampX = (v) => Math.min(0.86, Math.max(0.14, v));\n const nMain = 5 + s % 4;\n const pts = [];\n let x = clampX(0.5 + (rnd2() - 0.5) * 0.16);\n for (let i = 0; i <= nMain; i++) {\n const y = 0.06 + i / nMain * 0.86;\n if (i > 0) x = clampX(x + (rnd2() - 0.5) * 0.32);\n pts.push([x, y]);\n }\n const segs = [];\n for (let i = 0; i < pts.length - 1; i++) segs.push([pts[i], pts[i + 1], 1]);\n const nBranch = 1 + s % 2;\n for (let b = 0; b < nBranch; b++) {\n const at = 1 + (s + b * 3) % Math.max(1, pts.length - 2);\n const origin = pts[at];\n const br = [origin];\n let bx = origin[0];\n let by = origin[1];\n const len = 2 + s % 2;\n for (let k = 0; k < len; k++) {\n bx = clampX(bx + (rnd2() - 0.5) * 0.36);\n by = Math.min(0.92, by + 0.1 + rnd2() * 0.08);\n br.push([bx, by]);\n }\n for (let i = 0; i < br.length - 1; i++) segs.push([br[i], br[i + 1], 0.45 + b * 0.1]);\n }\n const rgba = new Uint8Array(size * size * 4);\n const feather = Math.max(2, Math.round(size * 0.04));\n for (let y = 0; y < size; y++) {\n for (let x2 = 0; x2 < size; x2++) {\n const px = (x2 + 0.5) / size;\n const py = (y + 0.5) / size;\n let dMin = 9;\n let wMax = 0;\n for (const [a2, b, w] of segs) {\n const abx = b[0] - a2[0];\n const aby = b[1] - a2[1];\n const den = abx * abx + aby * aby || 1e-8;\n const t = Math.max(0, Math.min(1, ((px - a2[0]) * abx + (py - a2[1]) * aby) / den));\n const d = Math.hypot(px - (a2[0] + abx * t), py - (a2[1] + aby * t));\n if (d / w < dMin) {\n dMin = d / w;\n wMax = w;\n }\n }\n const a = 0.95 * gauss(dMin, 0.012) + 0.3 * gauss(dMin, 0.05) * wMax;\n writeWhite(rgba, (y * size + x2) * 4, Math.min(1, a) * edgeFade(x2, y, size, feather));\n }\n }\n return { width: size, height: size, rgba };\n}\nfunction trailBlob(w, h) {\n const rgba = new Uint8Array(w * h * 4);\n for (let y = 0; y < h; y++) {\n for (let x = 0; x < w; x++) {\n const px = (x + 0.5 - w / 2) / (w / 2);\n const py = (y + 0.5 - h / 2) / (h / 2);\n const tail = gauss(px, 0.34) * Math.exp(-Math.max(0, -py - 0.05) * 4.2) * (py < 0.1 ? 1 : Math.max(0, 1 - py * 4));\n const hd = Math.hypot(px / 0.34, (py - 0.42) / 0.3);\n const head = hd >= 1 ? 0 : gauss(hd, 0.5);\n writeWhite(rgba, (y * w + x) * 4, Math.max(tail, head));\n }\n }\n return { width: w, height: h, rgba };\n}\nfunction chromaticDot(size) {\n return glow2(size, { r: 0.1, w: 1 }, { r: 0.3, w: 0.16 });\n}\nfunction teardrop(w, h) {\n const rgba = new Uint8Array(w * h * 4);\n for (let y = 0; y < h; y++) {\n const ty = (y + 0.5) / h;\n const cap = smooth01(Math.min(1, Math.min(ty / 0.08, (1 - ty) / 0.08)));\n const vy = gauss(ty - 0.46, 0.24) * cap;\n const r = 0.5 * (1 - smooth01(Math.min(1, Math.max(0, (ty - 0.42) / 0.5))) * 0.6);\n for (let x = 0; x < w; x++) {\n const dx = (x + 0.5 - w / 2) / (w / 2);\n writeWhite(rgba, (y * w + x) * 4, gauss(Math.abs(dx) / (r || 0.01), 0.5) * vy);\n }\n }\n return { width: w, height: h, rgba };\n}\nfunction crescent(size) {\n const rgba = new Uint8Array(size * size * 4);\n const half = size / 2;\n const feather = Math.max(2, Math.round(size * 0.04));\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const px = (x + 0.5 - half) / half;\n const py = (y + 0.5 - half) / half;\n const outer = gauss(Math.hypot(px, py), 0.42);\n const inner = gauss(Math.hypot(px - 0.34, py), 0.36);\n const a = Math.max(0, outer - inner * 1.08) * edgeFade(x, y, size, feather);\n writeWhite(rgba, (y * size + x) * 4, a);\n }\n }\n return { width: size, height: size, rgba };\n}\nfunction snowflake(size) {\n const rgba = new Uint8Array(size * size * 4);\n const half = size / 2;\n const feather = Math.max(2, Math.round(size * 0.04));\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const px = (x + 0.5 - half) / half;\n const py = (y + 0.5 - half) / half;\n let a = gauss(Math.hypot(px, py), 0.08);\n for (let k = 0; k < 6; k++) {\n const ang = k * Math.PI / 3;\n const ca = Math.cos(ang);\n const sa = Math.sin(ang);\n const along = px * ca + py * sa;\n const perp = -px * sa + py * ca;\n if (along < 0) continue;\n const taper = Math.max(0, 1.02 - along / 0.72);\n a += gauss(perp, 0.028) * gauss(along, 0.5) * taper;\n a += 0.55 * gauss(perp - (along - 0.28) * 0.65, 0.02) * gauss(along - 0.28, 0.12) * taper;\n a += 0.55 * gauss(perp + (along - 0.28) * 0.65, 0.02) * gauss(along - 0.28, 0.12) * taper;\n a += 0.4 * gauss(perp - (along - 0.48) * 0.7, 0.016) * gauss(along - 0.48, 0.08) * taper;\n a += 0.4 * gauss(perp + (along - 0.48) * 0.7, 0.016) * gauss(along - 0.48, 0.08) * taper;\n }\n writeWhite(rgba, (y * size + x) * 4, Math.min(1, a) * edgeFade(x, y, size, feather));\n }\n }\n return { width: size, height: size, rgba };\n}\nfunction glyph(size, variant) {\n const rgba = new Uint8Array(size * size * 4);\n const half = size / 2;\n const feather = Math.max(2, Math.round(size * 0.04));\n const style = Math.abs(variant | 0) % 3;\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const px = (x + 0.5 - half) / half * 1.55;\n const py = (y + 0.5 - half) / half * 1.55;\n const diamond = Math.abs(Math.abs(px) + Math.abs(py) - 0.55);\n let a = gauss(diamond, 0.016);\n if (style === 0) {\n a += gauss(px, 0.012) * gauss(py, 0.38);\n a += gauss(py, 0.012) * gauss(px, 0.38);\n } else if (style === 1) {\n a += gauss(px - py, 0.012) * gauss(px + py, 0.36);\n a += gauss(px + py, 0.012) * gauss(px - py, 0.36);\n } else {\n a += gauss(Math.hypot(px, py) - 0.26, 0.014);\n a += gauss(px, 0.012) * gauss(py, 0.22);\n }\n writeWhite(rgba, (y * size + x) * 4, Math.min(1, a) * edgeFade(x, y, size, feather));\n }\n }\n return conditionTexture({ width: size, height: size, rgba }, 0.03);\n}\nfunction hashName(n) {\n let h = 0;\n const s = String(n);\n for (let i = 0; i < s.length; i++) h = h * 31 + s.charCodeAt(i) | 0;\n return h;\n}\nfunction flareAnamorphic(size) {\n const rgba = new Uint8Array(size * size * 4);\n const half = size / 2;\n const feather = Math.max(2, Math.round(size * 0.03));\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const px = (x + 0.5 - half) / half;\n const py = (y + 0.5 - half) / half;\n const d = Math.hypot(px, py);\n const a = gauss(d, 0.07) + 0.85 * gauss(px, 0.62) * gauss(py, 0.045) + 0.22 * gauss(px, 0.92) * gauss(py, 0.018);\n writeWhite(rgba, (y * size + x) * 4, Math.min(1, a) * edgeFade(x, y, size, feather));\n }\n }\n return { width: size, height: size, rgba };\n}\nconst BUILDERS = {\n // --- A. 定向覆盖 ---\n // [we-scene patch] halo_6 必须程序化,**不能用素材表那张**。\n // 它在全库只被 2 个壁纸引用,且两个都是 xray 的「开窗精灵」(g_Texture2),\n // 不是普通粒子 —— frag 用 `blend *= sample.r * sample.a` 把它当**窗口的形状**,\n // 所以中心必须最亮、往外单调衰减,否则窗口正中心反而是暗的。\n // glow2 双叶都中心对称且单调递减,满足「中心最亮」;core 0.14 保证峰值贴满 1.0。\n \"particle/halo_6\": () => glow2(256, { r: 0.14, w: 1 }, { r: 0.4, w: 0.17 }),\n // 法线贴图:官方 Refract / Lighting 开了才出现(Particle Component - General)。\n // 形状从配对反照率的 alpha 做高度图;DecompressNormal 吃 tex.xy,故写成标准 RGB 法线。\n // 中性 (0.5,0.5,1) 等于没折射——Raindrops Splatter 一类会只剩空白白图。\n \"particle/normal_splash\": () => heightToNormal(splashHeight(256), 3.2),\n \"particle/drop_normal\": () => heightToNormal(teardrop(128, 512), 3.4),\n \"particle/normal_ring_smooth\": () => heightToNormal(ring(256, 0.55, 0.12), 3.1),\n \"particle/normal_pinch_rotate\": () => heightToNormal(pinchHeight(256), 2.8),\n \"particle/water/rain_drops_sheet_normal\": () => heightToNormal(dropSheet(256, 512, 2, 4), 3.6),\n \"particle/bubbles/bubble1normal\": () => heightToNormal(bubbleSheet(256, 1), 3.2),\n \"particle/bubbles/bubble2_normal\": () => heightToNormal(bubbleSheet(256, 2), 3.2),\n \"particle/sharp_halo_normal\": () => heightToNormal(glowN(256, [{ r: 0.035, w: 1 }, { r: 0.09, w: 0.45 }, { r: 0.22, w: 0.08 }]), 3.4),\n // 光束 / 光轴:纵向长条渐变。解析式梯度本就是这类贴图的真实形态\n // (WE 原素材也是纯梯度),程序化反而更干净。原生尺寸 64×256 → 生成 128×512。\n \"particle/beam/beam_0\": () => beam(128, 512, 0.46, true),\n \"particle/beam/beam_1\": () => beam(128, 512, 0.34, true),\n \"particle/beam/beam_2\": () => beam(128, 512, 0.22, true),\n \"particle/beam/beam_2_fade\": () => beam(128, 512, 0.24, false),\n \"particle/light/light_shafts_0\": () => beam(128, 512, 0.42, true),\n \"particle/light/light_shafts_1\": () => beam(128, 512, 0.3, true),\n \"particle/light/light_shafts_3\": () => beam(128, 512, 0.26, true),\n \"particle/light/light_shafts_5\": () => beam(128, 512, 0.23, true),\n \"particle/light/light_shafts_6\": () => beam(128, 512, 0.2, true),\n // 自然物\n \"particle/nature/rosepetals\": () => petals(256),\n \"particle/nature/leaves\": () => leaf(256, 0),\n \"particle/nature/leaves1\": () => leaf(256, 1),\n \"particle/nature/leaves2\": () => leaf(256, 2),\n \"particle/nature/leaves3\": () => leaf(256, 3),\n \"particle/nature/leaves5\": () => leaf(256, 5),\n \"particle/nature/leaves6\": () => leaf(256, 6),\n \"particle/nature/leaves7\": () => leaf(256, 7),\n \"particle/nature/leaves8\": () => leaf(256, 8),\n \"particle/nature/snow\": () => snowflake(256),\n // --- B. 原 CC0 素材键的程序化替身(生成尺寸 = 原生 ×2) ---\n // halo 家族(原生 128 → 256):双叶高斯,由紧到松;halo_3/halo_5 加实心芯\n \"particle/halo\": () => glow2(256, { r: 0.12, w: 1 }, { r: 0.3, w: 0.15 }),\n \"particle/halo_1\": () => glow2(256, { r: 0.1, w: 1 }, { r: 0.3, w: 0.13 }),\n \"particle/halo_2\": () => glow2(256, { r: 0.2, w: 0.9 }, { r: 0.44, w: 0.2 }),\n \"particle/halo_3\": () => glowN(256, [{ r: 0.045, w: 1 }, { r: 0.13, w: 0.85 }, { r: 0.36, w: 0.15 }]),\n \"particle/halo_4\": () => glow2(256, { r: 0.085, w: 1 }, { r: 0.28, w: 0.12 }),\n \"particle/halo_5\": () => glowN(256, [{ r: 0.04, w: 1 }, { r: 0.11, w: 0.8 }, { r: 0.34, w: 0.17 }]),\n \"particle/sharp_halo\": () => glowN(256, [{ r: 0.035, w: 1 }, { r: 0.09, w: 0.45 }, { r: 0.22, w: 0.08 }]),\n // 色差小圆点(原生 64 → 128):亮芯小点\n \"particle/chromaticdot\": () => chromaticDot(128),\n // 四芒 flare(原生 256 → 512):解析十字星芒\n \"particle/light/flare_0\": () => spikyStar(256, 6, 0.58, 10, 0.08),\n \"particle/light/flare_1\": () => spikyStar(512, 4, 0.62, 14, 0.07),\n \"particle/light/flare_2\": () => flareAnamorphic(256),\n // 水滴(原生 64×256 → 128×512):竖长泪滴\n \"particle/drop\": () => teardrop(128, 512),\n // 雨丝(原生 64×256 → 128×512):细长条,两端渐隐\n \"particle/nature/rain1\": () => beam(128, 512, 0.16, true, 0.6),\n \"particle/nature/rain2\": () => beam(128, 512, 0.24, true, 0.55),\n // 雨滴 sheet(原生 128×256 → 256×512,2×4 格):每格一颗上圆下尖小水滴\n \"particle/water/rain_drops_sheet\": () => dropSheet(256, 512, 2, 4),\n // 雾(原生 256 → 512):絮状 fBm,弱遮罩铺满;三张不同尺度/种子\n \"particle/fog/fog1\": () => fogNoise(512, 4, 5, 1, 0.4, 0.9, 150),\n \"particle/fog/fog2\": () => fogNoise(512, 3, 5, 2, 0.45, 0.8, 140),\n \"particle/fog/fog3\": () => fogNoise(512, 6, 4, 3, 0.36, 1, 150),\n // 烟(原生 256 → 512):同源 fBm 但遮罩更收(团絮感),smoke2light 降密度与峰值\n \"particle/smoke/smoke1\": () => fogNoise(512, 3, 5, 7, 0.55, 1.5, 130),\n \"particle/smoke/smoke2\": () => fogNoise(512, 2, 5, 11, 0.6, 1.7, 120),\n \"particle/smoke/smoke2light\": () => fogNoise(512, 2, 5, 13, 0.4, 1.7, 110),\n // 环形波(原生 256 → 512)\n \"particle/misc/wave\": () => ring(512, 0.72, 0.085),\n \"particle/misc/star_0\": () => spikyStar(256, 5, 0.62, 8, 0.1),\n // 气泡(原生 128 → 256):三档环厚 / 高光\n \"particle/bubbles/bubble1\": () => bubbleSheet(256, 1),\n \"particle/bubbles/bubble2\": () => bubbleSheet(256, 2),\n \"particle/bubbles/bubble3\": () => bubbleSheet(256, 3),\n // 碎屑(原生 64 → 128):固定种子高斯散点\n \"particle/debris/debris1\": () => debrisScatter(128),\n // 闪电(原生 128 → 256):三种折线,种子不同\n \"particle/lightning/lightning1\": () => lightningBolt(256, 3),\n \"particle/lightning/lightning2\": () => lightningBolt(256, 11),\n \"particle/lightning/lightning3\": () => lightningBolt(256, 19),\n // 火 / 月牙 / 符文(本机库引用过、原先落到通用光晕)\n \"particle/fire/fire1\": () => fireWisp(256, 23),\n \"particle/fire/fire2\": () => fireWisp(256, 41),\n \"particle/star\": () => spikyStar(256, 4, 0.58, 12, 0.09),\n \"particle/shape/circle_wind\": () => windCircle(256),\n \"particle/sickle\": () => crescent(256),\n \"particle/magic/glyph_4\": () => glyph(256, 4),\n // 原素材表的三个语义别名(@sparkle/@star 原生 128 → 256;@trail 64×128 → 128×256)\n \"@sparkle\": () => spikyStar(256, 4, 0.6, 16, 0.08),\n \"@star\": () => spikyStar(256, 5, 0.62, 8, 0.1),\n \"@trail\": () => trailBlob(128, 256)\n};\nfunction fallbackFor(name) {\n const n = String(name).toLowerCase();\n if (/normal/.test(n)) {\n const pair = pairedAlbedoName(name);\n if (pair) return () => heightToNormal(albedoPixels(pair), 2.8);\n return () => heightToNormal(splashHeight(128), 2.6);\n }\n if (/rosepetal|petal|sakura|blossom/.test(n)) return () => petals(256);\n if (/leaf|leaves|foliage/.test(n)) {\n if (/leaves8/.test(n)) return () => leaf(256, 8);\n if (/leaves7/.test(n)) return () => leaf(256, 7);\n if (/leaves6/.test(n)) return () => leaf(256, 6);\n if (/leaves5/.test(n)) return () => leaf(256, 5);\n if (/leaves3/.test(n)) return () => leaf(256, 3);\n if (/leaves2/.test(n)) return () => leaf(256, 2);\n if (/leaves1/.test(n)) return () => leaf(256, 1);\n return () => leaf(256, 0);\n }\n if (/circle_wind|windcircle/.test(n)) return () => windCircle(256);\n if (/fog|cloud|mist|vapor/.test(n)) return () => fogNoise(512, 4, 5, 5, 0.4, 0.9, 150);\n if (/smoke/.test(n)) return () => fogNoise(512, 3, 5, 8, 0.55, 1.5, 130);\n if (/beam|shaft|ray|godray/.test(n)) return () => beam(128, 512, 0.3, true);\n if (/flare/.test(n)) return () => flareAnamorphic(256);\n if (/bubble/.test(n)) return () => bubble(256, 1);\n if (/ring|wave/.test(n)) return () => ring(512, 0.72, 0.085);\n if (/fire|flame|ember|ash/.test(n)) return () => fireWisp(256, hashName(n));\n if (/sickle|crescent|moon/.test(n)) return () => crescent(256);\n if (/glyph|magic|rune/.test(n)) return () => glyph(256, hashName(n));\n if (/snowflake|雪花|snow/.test(n)) return () => snowflake(256);\n if (/流星|meteor|shooting/.test(n)) return () => trailBlob(128, 256);\n if (/star|星/.test(n)) return () => spikyStar(256, 5, 0.62, 8, 0.1);\n if (/sparkle|glint|twinkle/.test(n)) return () => spikyStar(256, 4, 0.6, 16, 0.08);\n if (/rain_drops_sheet|drops_sheet/.test(n)) return () => dropSheet(256, 512, 2, 4);\n if (/drop|rain/.test(n)) return () => teardrop(128, 512);\n if (/debris|dirt|rock/.test(n)) return () => debrisScatter(128);\n if (/lightning|bolt|arc/.test(n)) return () => lightningBolt(256, hashName(n));\n if (/note|music/.test(n)) return () => spikyStar(256, 4, 0.55, 8, 0.12);\n if (/trail|streak/.test(n)) return () => trailBlob(128, 256);\n return () => glow2(256, { r: 0.12, w: 1 }, { r: 0.3, w: 0.15 });\n}\nfunction buildBuiltinParticleTexture(name) {\n if (cache.has(name)) return cache.get(name);\n let out = null;\n const ov = overrides.get(name);\n if (ov) {\n try {\n out = ov();\n } catch {\n out = null;\n }\n }\n if (!out && overrideProvider) {\n try {\n out = overrideProvider(name);\n } catch {\n out = null;\n }\n }\n if (!out && BUILDERS[name]) {\n try {\n out = BUILDERS[name]();\n } catch {\n out = null;\n }\n }\n if (!out) {\n try {\n out = fallbackFor(name)();\n } catch {\n out = null;\n }\n }\n if (!out) out = glow2(256, { r: 0.12, w: 1 }, { r: 0.3, w: 0.15 });\n cache.set(name, out);\n return out;\n}\nfunction isBuiltinParticleTextureName(name) {\n return typeof name === \"string\" && name.indexOf(\"particle/\") === 0;\n}\nconst particleTexMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n buildBuiltinParticleTexture,\n isBuiltinParticleTextureName,\n listBuiltinParticleTextureNames,\n particleNormalNameForAlbedo,\n prepareParticleNormalTexture,\n resetParticleTextureFactories,\n setParticleTextureFactory,\n setParticleTextureProvider\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst IDENTITY = Object.freeze([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\nfunction mat4Mul(a, b, out) {\n const o = out || new Float32Array(16);\n for (let c = 0; c < 4; c++) {\n for (let r = 0; r < 4; r++) {\n o[c * 4 + r] = a[r] * b[c * 4] + a[4 + r] * b[c * 4 + 1] + a[8 + r] * b[c * 4 + 2] + a[12 + r] * b[c * 4 + 3];\n }\n }\n return o;\n}\nfunction mat4Invert(m) {\n const a = [];\n for (let r = 0; r < 4; r++) {\n a.push([m[r], m[4 + r], m[8 + r], m[12 + r], 0, 0, 0, 0]);\n a[r][4 + r] = 1;\n }\n for (let col = 0; col < 4; col++) {\n let piv = col;\n for (let r = col + 1; r < 4; r++) {\n if (Math.abs(a[r][col]) > Math.abs(a[piv][col])) piv = r;\n }\n const t = a[col];\n a[col] = a[piv];\n a[piv] = t;\n const pv = a[col][col];\n if (Math.abs(pv) < 1e-12) return Float32Array.from(IDENTITY);\n for (let j = 0; j < 8; j++) a[col][j] /= pv;\n for (let r = 0; r < 4; r++) {\n if (r === col) continue;\n const f = a[r][col];\n if (f === 0) continue;\n for (let j = 0; j < 8; j++) a[r][j] -= f * a[col][j];\n }\n }\n const out = new Float32Array(16);\n for (let c = 0; c < 4; c++) for (let r = 0; r < 4; r++) out[c * 4 + r] = a[r][4 + c];\n return out;\n}\nfunction composeTRS(tx, ty, tz, rx, ry, rz, scx, scy, scz, out) {\n const o = out || new Float32Array(16);\n const cx = Math.cos(rx);\n const sx = Math.sin(rx);\n const cy = Math.cos(ry);\n const sy = Math.sin(ry);\n const cz = Math.cos(rz);\n const sz = Math.sin(rz);\n o[0] = cz * cy * scx;\n o[1] = sz * cy * scx;\n o[2] = -sy * scx;\n o[3] = 0;\n o[4] = (cz * sy * sx - sz * cx) * scy;\n o[5] = (sz * sy * sx + cz * cx) * scy;\n o[6] = cy * sx * scy;\n o[7] = 0;\n o[8] = (cz * sy * cx + sz * sx) * scz;\n o[9] = (sz * sy * cx - cz * sx) * scz;\n o[10] = cy * cx * scz;\n o[11] = 0;\n o[12] = tx;\n o[13] = ty;\n o[14] = tz;\n o[15] = 1;\n return o;\n}\nfunction readCStr(dv, off) {\n const bytes = [];\n while (off < dv.byteLength) {\n const c = dv.getUint8(off++);\n if (c === 0) break;\n bytes.push(c);\n }\n let s = \"\";\n try {\n s = new TextDecoder(\"utf-8\").decode(new Uint8Array(bytes));\n } catch (e) {\n s = String.fromCharCode.apply(null, bytes);\n }\n return { value: s, next: off };\n}\nfunction findAscii(buf, str, from = 0) {\n const pat = [];\n for (let i = 0; i < str.length; i++) pat.push(str.charCodeAt(i));\n outer: for (let p = from; p <= buf.length - pat.length; p++) {\n for (let k = 0; k < pat.length; k++) {\n if (buf[p + k] !== pat[k]) continue outer;\n }\n return p;\n }\n return -1;\n}\nfunction parseMDL(buf) {\n const dv = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n const magic = String.fromCharCode.apply(null, Array.from(buf.subarray(0, 8)));\n if (!magic.startsWith(\"MDLV\")) throw new Error(\"不是 MDL: \" + magic);\n const mat = readCStr(dv, 21);\n const ver = parseInt(magic.slice(4), 10);\n const LAYOUTS = ver >= 23 ? [\n { lenOff: 32, stride: 80, uv: 72, bone: 40, weight: 56 },\n // [we-scene patch] 真 3D 网格(3509243656 恒星/天空盒):MDLV0023 但顶点\n // 48B(pos@0 + nrm/tan + uv@40),没有骨骼权重。必须排在 80B puppet\n // 后面:puppet 的 80 能整除时优先走蒙皮布局。\n { lenOff: 32, stride: 48, uv: 40, bone: -1, weight: -1 }\n ] : [\n { lenOff: 8, stride: 52, uv: 44, bone: 12, weight: 28 },\n { lenOff: 4, stride: 52, uv: 44, bone: 12, weight: 28 },\n // 兜底:未见过的中间版本按已知布局各试一次,取自洽的那个\n { lenOff: 32, stride: 80, uv: 72, bone: 40, weight: 56 }\n ];\n let L = null;\n let vertexBytes = 0;\n let vbOff = 0;\n for (const cand of LAYOUTS) {\n const off = mat.next + cand.lenOff;\n if (off + 4 > buf.byteLength) continue;\n const n = dv.getUint32(off, true);\n if (n > 0 && n % cand.stride === 0 && off + 4 + n <= buf.byteLength) {\n L = cand;\n vertexBytes = n;\n vbOff = off;\n break;\n }\n }\n if (!L) {\n throw new Error(\"顶点区长度异常(\" + magic + \",已试 stride \" + LAYOUTS.map((c) => c.stride).join(\"/\") + \")\");\n }\n const vertStart = vbOff + 4;\n const vertexCount = vertexBytes / L.stride;\n const positions = new Float32Array(vertexCount * 3);\n const uvs = new Float32Array(vertexCount * 2);\n const boneIdx = new Float32Array(vertexCount * 4);\n const weights = new Float32Array(vertexCount * 4);\n for (let i = 0; i < vertexCount; i++) {\n const b = vertStart + i * L.stride;\n positions[i * 3] = dv.getFloat32(b, true);\n positions[i * 3 + 1] = dv.getFloat32(b + 4, true);\n positions[i * 3 + 2] = dv.getFloat32(b + 8, true);\n uvs[i * 2] = dv.getFloat32(b + L.uv, true);\n uvs[i * 2 + 1] = dv.getFloat32(b + L.uv + 4, true);\n if (L.bone >= 0 && L.weight >= 0) {\n for (let k = 0; k < 4; k++) {\n boneIdx[i * 4 + k] = dv.getUint32(b + L.bone + k * 4, true);\n weights[i * 4 + k] = dv.getFloat32(b + L.weight + k * 4, true);\n }\n } else {\n boneIdx[i * 4] = 0;\n weights[i * 4] = 1;\n }\n }\n const idxByteLen = dv.getUint32(vertStart + vertexBytes, true);\n const idxStart = vertStart + vertexBytes + 4;\n const useU32 = vertexCount > 65535 && idxByteLen % 4 === 0;\n const indexCount = useU32 ? idxByteLen / 4 : idxByteLen / 2;\n const indices = useU32 ? new Uint32Array(indexCount) : new Uint16Array(indexCount);\n if (useU32) {\n for (let i = 0; i < indexCount; i++) indices[i] = dv.getUint32(idxStart + i * 4, true);\n } else {\n for (let i = 0; i < indexCount; i++) indices[i] = dv.getUint16(idxStart + i * 2, true);\n }\n const bones = parseSkeleton(buf, dv);\n const animations = parseAnimations(buf, dv, bones.length);\n const restLocal = parseBindPose(buf, dv, bones);\n const attachments = parseAttachments(buf, dv, bones.length);\n const invBindWorld = [];\n const restCorrection = [];\n const bindTRS9 = [];\n if (bones.length > 0) {\n const baseLocal = bones.map((b, i) => {\n const m = b.matrix;\n const sx = Math.hypot(m[0], m[1]);\n const sy = Math.hypot(m[4], m[5]);\n bindTRS9[i] = Float32Array.from([\n m[12],\n m[13],\n m[14],\n 0,\n 0,\n Math.atan2(m[1], m[0]),\n sx || 1,\n sy || 1,\n m[10] || 1\n ]);\n return Float32Array.from(m);\n });\n for (let i = 0; i < bones.length; i++) {\n const b = bindTRS9[i];\n const m = bones[i].matrix;\n if (Math.hypot(b[0] - m[12], b[1] - m[13]) > 1e-3) {\n baseLocal[i] = composeTRS(b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], new Float32Array(16));\n }\n }\n const bindWorld = [];\n for (let i = 0; i < bones.length; i++) {\n const p = bones[i].parent;\n bindWorld[i] = p >= 0 && p < i ? mat4Mul(bindWorld[p], baseLocal[i]) : Float32Array.from(baseLocal[i]);\n }\n for (let i = 0; i < bones.length; i++) invBindWorld[i] = mat4Invert(bindWorld[i]);\n if (restLocal) {\n const restWorld = [];\n for (let i = 0; i < bones.length; i++) {\n const p = bones[i].parent;\n restWorld[i] = p >= 0 && p < i ? mat4Mul(restWorld[p], restLocal[i]) : Float32Array.from(restLocal[i]);\n }\n for (let i = 0; i < bones.length; i++) {\n restCorrection[i] = mat4Mul(restWorld[i], invBindWorld[i]);\n }\n }\n }\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < vertexCount; i++) {\n const x = positions[i * 3];\n const y = positions[i * 3 + 1];\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n }\n return {\n magic,\n materialPath: mat.value,\n vertexCount,\n positions,\n uvs,\n boneIdx,\n weights,\n indexCount,\n indexType: useU32 ? \"u32\" : \"u16\",\n indices,\n bones,\n animations,\n // 动画平移极值(见 animDisplacementBound):供渲染器放宽视锥裁剪余量\n animBound: animDisplacementBound(animations, bones),\n invBindWorld,\n bindTRS: bindTRS9.length > 0 ? bindTRS9 : null,\n attachments: attachments.length > 0 ? attachments : null,\n restCorrection: restCorrection.length > 0 ? restCorrection : null,\n bounds: { minX, maxX, minY, maxY }\n };\n}\nfunction parseAttachments(buf, dv, boneCount) {\n const a = findAscii(buf, \"MDAT\");\n if (a < 0) return [];\n const count = dv.getUint16(a + 13, true);\n if (count <= 0 || count > 256) return [];\n const out = [];\n let j = a + 15;\n for (let k = 0; k < count; k++) {\n if (j + 2 > buf.length) break;\n const bone = dv.getUint16(j, true);\n const nm = readCStr(dv, j + 2);\n if (nm.next + 64 > buf.length) break;\n const matrix = new Float32Array(16);\n for (let t = 0; t < 16; t++) matrix[t] = dv.getFloat32(nm.next + t * 4, true);\n if (bone < boneCount) out.push({ bone, name: nm.value, matrix });\n j = nm.next + 64;\n }\n return out;\n}\nfunction parseSkeleton(buf, dv) {\n const s = findAscii(buf, \"MDLS\");\n if (s < 0) return [];\n const boneCount = dv.getUint32(s + 13, true);\n if (boneCount <= 0 || boneCount > 1024) return [];\n const bones = [];\n let j = s + 17;\n for (let b = 0; b < boneCount; b++) {\n if (j + 77 > dv.byteLength) return bones;\n const id = dv.getUint32(j + 1, true);\n const parent = dv.getInt32(j + 5, true);\n const matrix = new Float32Array(16);\n for (let k = 0; k < 16; k++) matrix[k] = dv.getFloat32(j + 13 + k * 4, true);\n const meta = readCStr(dv, j + 13 + 64);\n bones.push({ id, parent: parent >= 0 && parent < boneCount ? parent : -1, matrix });\n j = meta.next;\n }\n return bones;\n}\nfunction parseAnimations(buf, dv, boneCount) {\n const a = findAscii(buf, \"MDLA\");\n if (a < 0) return [];\n let o = a + 9;\n const endPos = dv.getUint32(o, true);\n o += 4;\n const animCount = dv.getUint32(o, true);\n o += 4;\n if (animCount <= 0 || animCount > 256) return [];\n const anims = [];\n for (let ai = 0; ai < animCount; ai++) {\n if (o + 16 > dv.byteLength) break;\n const id = dv.getUint32(o, true);\n o += 8;\n const nameR = readCStr(dv, o);\n o = nameR.next;\n const modeR = readCStr(dv, o);\n o = modeR.next;\n if (o + 16 > dv.byteLength) break;\n const fps = dv.getFloat32(o, true);\n o += 4;\n const frameCount = dv.getUint32(o, true);\n o += 8;\n const trackCount = dv.getUint32(o, true);\n o += 4;\n if (trackCount > 1024) break;\n const tracks = [];\n for (let t = 0; t < trackCount; t++) {\n if (o + 8 > dv.byteLength) break;\n o += 4;\n const trackBytes = dv.getUint32(o, true);\n o += 4;\n const n = Math.floor(trackBytes / 36);\n if (o + trackBytes > dv.byteLength) break;\n const kf = new Float32Array(n * 9);\n for (let f = 0; f < n; f++) {\n const p = o + f * 36;\n for (let k = 0; k < 9; k++) kf[f * 9 + k] = dv.getFloat32(p + k * 4, true);\n }\n o += trackBytes;\n tracks.push({ frameCount: n, keyframes: kf });\n }\n o += 35;\n if (tracks.length > 0 && frameCount > 0 && fps > 0) {\n anims.push({\n id,\n name: nameR.value,\n mode: modeR.value,\n fps,\n frameCount,\n duration: frameCount / fps,\n tracks\n });\n }\n if (o >= endPos) break;\n }\n return anims;\n}\nfunction animDisplacementBound(anims, bones) {\n let x = 0;\n let y = 0;\n for (const a of anims) {\n for (let bi = 0; bi < a.tracks.length; bi++) {\n const tr = a.tracks[bi];\n if (!tr) continue;\n const bone = bones[bi];\n const bx = bone ? bone.matrix[12] : 0;\n const by = bone ? bone.matrix[13] : 0;\n const k = tr.keyframes;\n for (let f = 0; f < tr.frameCount; f++) {\n const dx = Math.abs(k[f * 9] - bx);\n const dy = Math.abs(k[f * 9 + 1] - by);\n if (dx > x) x = dx;\n if (dy > y) y = dy;\n }\n }\n }\n return { x, y };\n}\nfunction parseBindPose(buf, dv, bones) {\n if (bones.length === 0) return null;\n const e = findAscii(buf, \"MDLE\");\n if (e < 0) return null;\n const bj = e + 8 + 1 + 4 + 4;\n if (bj + bones.length * 64 > dv.byteLength) return null;\n const out = [];\n for (let b = 0; b < bones.length; b++) {\n const m = new Float32Array(16);\n for (let k = 0; k < 16; k++) m[k] = dv.getFloat32(bj + b * 64 + k * 4, true);\n out.push(m);\n }\n return out;\n}\nfunction sampleTrackTRS(track, anim2, time, out9) {\n const n = track.frameCount;\n if (n === 0) {\n out9[0] = 0;\n out9[1] = 0;\n out9[2] = 0;\n out9[3] = 0;\n out9[4] = 0;\n out9[5] = 0;\n out9[6] = 1;\n out9[7] = 1;\n out9[8] = 1;\n return out9;\n }\n const frame = time * anim2.fps;\n let f0;\n let f1;\n let t;\n if (anim2.mode === \"loop\") {\n const span = Math.max(1, n - 1);\n const w = (frame % span + span) % span;\n f0 = Math.floor(w);\n f1 = (f0 + 1) % n;\n t = w - f0;\n } else if (anim2.mode === \"mirror\") {\n const span = Math.max(1, n - 1);\n const period = span * 2;\n let w = (frame % period + period) % period;\n if (w > span) w = period - w;\n f0 = Math.floor(w);\n f1 = Math.min(f0 + 1, n - 1);\n t = w - f0;\n } else {\n const c = Math.min(Math.max(frame, 0), n - 1);\n f0 = Math.floor(c);\n f1 = Math.min(f0 + 1, n - 1);\n t = c - f0;\n }\n const k = track.keyframes;\n const a = f0 * 9;\n const b = f1 * 9;\n const it = 1 - t;\n for (let i = 0; i < 9; i++) {\n if (i >= 3 && i <= 5) {\n let d = k[b + i] - k[a + i];\n if (d > Math.PI) d -= 2 * Math.PI;\n else if (d < -Math.PI) d += 2 * Math.PI;\n out9[i] = k[a + i] + d * t;\n } else {\n out9[i] = k[a + i] * it + k[b + i] * t;\n }\n }\n return out9;\n}\nfunction bindTRS(mdl2, i, out9) {\n const b = mdl2.bindTRS && mdl2.bindTRS[i];\n if (b) {\n out9.set(b);\n return out9;\n }\n const m = mdl2.bones[i].matrix;\n out9[0] = m[12];\n out9[1] = m[13];\n out9[2] = m[14];\n out9[3] = 0;\n out9[4] = 0;\n out9[5] = Math.atan2(m[1], m[0]);\n out9[6] = Math.hypot(m[0], m[1]) || 1;\n out9[7] = Math.hypot(m[4], m[5]) || 1;\n out9[8] = m[10] || 1;\n return out9;\n}\nfunction computeSkinMatrices(mdl2, time, animLayers, boneOverrides) {\n const bones = mdl2.bones;\n const count = bones.length;\n if (count === 0) return null;\n const hasOverride = !!(boneOverrides && boneOverrides.size > 0);\n if (!mdl2._skin || mdl2._skin.length !== count * 16) {\n mdl2._skin = new Float32Array(count * 16);\n mdl2._local = [];\n mdl2._world = [];\n mdl2._tmp = new Float32Array(16);\n mdl2._tmp2 = new Float32Array(16);\n for (let i = 0; i < count; i++) {\n mdl2._local.push(new Float32Array(16));\n mdl2._world.push(new Float32Array(16));\n }\n }\n const hadExplicitLayers = Array.isArray(animLayers) && animLayers.length > 0;\n const layers = [];\n if (hadExplicitLayers) {\n for (const l of animLayers) {\n if (l.visible === false || l.visible === 0) continue;\n const a = mdl2.animations.find((x) => x.id === l.animation);\n if (a) layers.push({ anim: a, additive: !!l.additive, blend: typeof l.blend === \"number\" ? l.blend : 1, rate: typeof l.rate === \"number\" ? l.rate : 1 });\n }\n }\n if (layers.length === 0 && !hadExplicitLayers) {\n const a = mdl2.animations[0];\n if (!a) {\n if (!hasOverride) return null;\n } else {\n layers.push({ anim: a, additive: false, blend: 1, rate: 1 });\n }\n }\n const base = mdl2._trsBase || (mdl2._trsBase = new Float32Array(9));\n const acc = mdl2._trsAcc || (mdl2._trsAcc = new Float32Array(9));\n const smp = mdl2._trsSmp || (mdl2._trsSmp = new Float32Array(9));\n for (let i = 0; i < count; i++) {\n bindTRS(mdl2, i, base);\n acc.set(base);\n let touched = false;\n let addW = 0;\n for (const L of layers) {\n const track = L.anim.tracks[i];\n if (!track) continue;\n sampleTrackTRS(track, L.anim, time * L.rate, smp);\n const w = L.blend;\n if (L.additive) {\n for (let k = 0; k < 9; k++) {\n let d = smp[k] - base[k];\n if (k >= 3 && k <= 5) {\n if (d > Math.PI) d -= 2 * Math.PI;\n else if (d < -Math.PI) d += 2 * Math.PI;\n }\n acc[k] += d * w;\n }\n addW += w;\n } else {\n for (let k = 0; k < 9; k++) acc[k] = acc[k] * (1 - w) + smp[k] * w;\n }\n touched = true;\n }\n if (addW > 1) {\n for (let k = 0; k < 9; k++) acc[k] = base[k] + (acc[k] - base[k]) / addW;\n }\n const ov = hasOverride ? boneOverrides.get(i) : void 0;\n if (ov) {\n acc[0] = ov[0];\n acc[1] = ov[1];\n acc[2] = ov[2];\n touched = true;\n }\n if (touched) {\n composeTRS(acc[0], acc[1], acc[2], acc[3], acc[4], acc[5], acc[6], acc[7], acc[8], mdl2._local[i]);\n } else {\n composeTRS(base[0], base[1], base[2], base[3], base[4], base[5], base[6], base[7], base[8], mdl2._local[i]);\n }\n }\n for (let i = 0; i < count; i++) {\n const p = bones[i].parent;\n if (p >= 0 && p < i) mat4Mul(mdl2._world[p], mdl2._local[i], mdl2._world[i]);\n else mdl2._world[i].set(mdl2._local[i]);\n }\n for (let i = 0; i < count; i++) {\n mat4Mul(mdl2._world[i], mdl2.invBindWorld[i], mdl2._tmp);\n mdl2._skin.set(mdl2._tmp, i * 16);\n }\n return mdl2._skin;\n}\nfunction bindWorldOf(mdl2, boneIndex) {\n if (!mdl2 || !mdl2.invBindWorld) return null;\n if (!(boneIndex >= 0 && boneIndex < mdl2.invBindWorld.length)) return null;\n return mat4Invert(mdl2.invBindWorld[boneIndex]);\n}\nfunction mat4MulOut(a, b) {\n return mat4Mul(a, b);\n}\nfunction attachmentWorld(mdl2, name) {\n if (!mdl2 || !mdl2.attachments || typeof name !== \"string\" || name === \"\") return null;\n if (!mdl2._world) return null;\n for (const at of mdl2.attachments) {\n if (at.name !== name) continue;\n if (at.bone < 0 || at.bone >= mdl2._world.length) return null;\n return mat4Mul(mdl2._world[at.bone], at.matrix);\n }\n return null;\n}\nfunction attachmentBind(mdl2, name) {\n if (!mdl2 || !mdl2.attachments || typeof name !== \"string\" || name === \"\") return null;\n for (const at of mdl2.attachments) {\n if (at.name !== name) continue;\n const bw = bindWorldOf(mdl2, at.bone);\n if (!bw) return null;\n return mat4Mul(bw, at.matrix);\n }\n return null;\n}\nfunction parentMeshToWorldDelta(parent, dx, dy) {\n const ang = parent && parent.angles ? parent.angles[2] || 0 : 0;\n const sx = parent && parent.scale ? parent.scale[0] : 1;\n const sy = parent && parent.scale ? parent.scale[1] : 1;\n const ca = ang * Math.PI / 180;\n const cos = Math.cos(ca);\n const sin = Math.sin(ca);\n const ox = dx * sx;\n const oy = dy * sy;\n return [ox * cos - oy * sin, ox * sin + oy * cos];\n}\nfunction applyAttachmentBindOrigins(layers) {\n const byId = /* @__PURE__ */ new Map();\n const childrenOf = /* @__PURE__ */ new Map();\n for (const layer of layers) {\n if (!layer || layer.id === void 0 || layer.id === null) continue;\n byId.set(layer.id, layer);\n if (layer.parentId === void 0 || layer.parentId === null) continue;\n const list = childrenOf.get(layer.parentId);\n if (list) list.push(layer);\n else childrenOf.set(layer.parentId, [layer]);\n }\n const collectDesc = (layer, out) => {\n const kids = childrenOf.get(layer.id);\n if (!kids) return;\n for (const c of kids) {\n out.push(c);\n collectDesc(c, out);\n }\n };\n const follows = [];\n for (const layer of layers) {\n const name = layer && layer.attachment;\n if (typeof name !== \"string\" || name === \"\") continue;\n const parent = byId.get(layer.parentId);\n if (!parent || !parent.puppet) continue;\n const bindM = attachmentBind(parent.puppet, name);\n if (!bindM) continue;\n const bx = bindM[12];\n const by = bindM[13];\n const d = parentMeshToWorldDelta(parent, bx, by);\n const desc = [];\n collectDesc(layer, desc);\n layer.origin[0] += d[0];\n layer.origin[1] += d[1];\n for (const c of desc) {\n c.origin[0] += d[0];\n c.origin[1] += d[1];\n }\n follows.push({\n layer,\n parent,\n name,\n bindX: bx,\n bindY: by,\n desc\n });\n }\n for (const f of follows) {\n f.baseX = f.layer.origin[0];\n f.baseY = f.layer.origin[1];\n f.subtree = [{ layer: f.layer, x: f.layer.origin[0], y: f.layer.origin[1] }];\n for (const c of f.desc) f.subtree.push({ layer: c, x: c.origin[0], y: c.origin[1] });\n }\n return follows;\n}\nfunction followAttachments(follows, time, getBoneOverrides) {\n if (!follows || follows.length === 0) return;\n const computed = /* @__PURE__ */ new Set();\n const deltas = [];\n for (const f of follows) {\n const puppet = f.parent && f.parent.puppet;\n if (!puppet) {\n deltas.push(null);\n continue;\n }\n if (!computed.has(puppet)) {\n computed.add(puppet);\n const overrides2 = typeof getBoneOverrides === \"function\" ? getBoneOverrides(f.parent) : null;\n computeSkinMatrices(puppet, time, f.parent.animationLayers, overrides2);\n }\n const cur = attachmentWorld(puppet, f.name);\n if (!cur) {\n deltas.push(null);\n continue;\n }\n deltas.push(parentMeshToWorldDelta(f.parent, cur[12] - f.bindX, cur[13] - f.bindY));\n }\n const seen = /* @__PURE__ */ new Set();\n for (const f of follows) {\n const tree = f.subtree || [{ layer: f.layer, x: f.baseX, y: f.baseY }];\n for (const s of tree) {\n if (seen.has(s.layer)) continue;\n seen.add(s.layer);\n s.layer.origin[0] = s.x;\n s.layer.origin[1] = s.y;\n }\n }\n for (let i = 0; i < follows.length; i++) {\n const f = follows[i];\n const d = deltas[i];\n const tree = f.subtree || [{ layer: f.layer, x: f.baseX, y: f.baseY }];\n if (!d) continue;\n for (const s of tree) {\n s.layer.origin[0] += d[0];\n s.layer.origin[1] += d[1];\n }\n }\n}\nconst MAX_BONES_HARD_CAP = 128;\nconst MAX_BONES_FLOOR = 24;\nfunction boneBudget(gl) {\n const vecs = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS) || 256;\n const usable = Math.floor((vecs - 32) / 4);\n return Math.max(MAX_BONES_FLOOR, Math.min(MAX_BONES_HARD_CAP, usable));\n}\nconst mdlVertSrc = (maxBones) => `#version 300 es\nin vec3 a_pos;\nin vec2 a_uv;\nin vec4 a_bone;\nin vec4 a_weight;\nuniform mat4 u_mvp;\nuniform mat4 u_skin[${maxBones}];\nuniform int u_boneCount;\nout vec2 v_uv;\nvoid main() {\n vec4 p = vec4(a_pos, 1.0);\n vec4 skinned = vec4(0.0);\n float total = 0.0;\n if (u_boneCount > 0) {\n for (int i = 0; i < 4; i++) {\n float w = a_weight[i];\n if (w <= 0.0) continue;\n int bi = int(a_bone[i]);\n if (bi < 0 || bi >= u_boneCount) continue;\n skinned += (u_skin[bi] * p) * w;\n total += w;\n }\n }\n vec4 local = total > 0.0 ? skinned / total : p;\n gl_Position = u_mvp * vec4(local.xy, 0.0, 1.0);\n v_uv = a_uv;\n}`;\nconst MDL_FRAG = `#version 300 es\nprecision mediump float;\nin vec2 v_uv;\nuniform sampler2D u_tex;\nuniform vec4 u_color;\nout vec4 fragColor;\nvoid main() {\n vec4 t = texture(u_tex, v_uv);\n fragColor = t * u_color;\n}`;\nfunction createMDLRenderer(gl) {\n const compile2 = (type, src) => {\n const s = gl.createShader(type);\n gl.shaderSource(s, src);\n gl.compileShader(s);\n if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) {\n throw new Error(\"MDL 着色器编译失败: \" + gl.getShaderInfoLog(s));\n }\n return s;\n };\n let maxBones = boneBudget(gl);\n let prog = null;\n for (; ; ) {\n const p = gl.createProgram();\n let linked = false;\n try {\n gl.attachShader(p, compile2(gl.VERTEX_SHADER, mdlVertSrc(maxBones)));\n gl.attachShader(p, compile2(gl.FRAGMENT_SHADER, MDL_FRAG));\n gl.bindAttribLocation(p, 0, \"a_pos\");\n gl.bindAttribLocation(p, 1, \"a_uv\");\n gl.bindAttribLocation(p, 2, \"a_bone\");\n gl.bindAttribLocation(p, 3, \"a_weight\");\n gl.linkProgram(p);\n linked = !!gl.getProgramParameter(p, gl.LINK_STATUS);\n } catch (e) {\n linked = false;\n }\n if (linked) {\n prog = p;\n break;\n }\n gl.deleteProgram(p);\n if (maxBones <= MAX_BONES_FLOOR) {\n throw new Error(\"MDL 着色器链接失败(骨数已降到 \" + MAX_BONES_FLOOR + \")\");\n }\n maxBones = Math.max(MAX_BONES_FLOOR, maxBones >> 1);\n }\n const MAX_BONES = maxBones;\n const uni = {\n mvp: gl.getUniformLocation(prog, \"u_mvp\"),\n tex: gl.getUniformLocation(prog, \"u_tex\"),\n skin: gl.getUniformLocation(prog, \"u_skin\"),\n boneCount: gl.getUniformLocation(prog, \"u_boneCount\"),\n color: gl.getUniformLocation(prog, \"u_color\")\n };\n const identitySkin = new Float32Array(MAX_BONES * 16);\n for (let i = 0; i < MAX_BONES; i++) identitySkin.set(IDENTITY, i * 16);\n const meshes = /* @__PURE__ */ new WeakMap();\n function ensureMesh(mdl2) {\n let m = meshes.get(mdl2);\n if (m) return m;\n const vao = gl.createVertexArray();\n gl.bindVertexArray(vao);\n const n = mdl2.vertexCount;\n const data = new Float32Array(n * 13);\n for (let i = 0; i < n; i++) {\n const o = i * 13;\n data[o] = mdl2.positions[i * 3];\n data[o + 1] = mdl2.positions[i * 3 + 1];\n data[o + 2] = mdl2.positions[i * 3 + 2];\n data[o + 3] = mdl2.uvs[i * 2];\n data[o + 4] = mdl2.uvs[i * 2 + 1];\n for (let k = 0; k < 4; k++) {\n data[o + 5 + k] = mdl2.boneIdx[i * 4 + k];\n data[o + 9 + k] = mdl2.weights[i * 4 + k];\n }\n }\n const vbuf = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, vbuf);\n gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);\n const S = 52;\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, gl.FLOAT, false, S, 0);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 2, gl.FLOAT, false, S, 12);\n gl.enableVertexAttribArray(2);\n gl.vertexAttribPointer(2, 4, gl.FLOAT, false, S, 20);\n gl.enableVertexAttribArray(3);\n gl.vertexAttribPointer(3, 4, gl.FLOAT, false, S, 36);\n const ibuf = gl.createBuffer();\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, mdl2.indices, gl.STATIC_DRAW);\n gl.bindVertexArray(null);\n m = { vao, vbuf, ibuf };\n meshes.set(mdl2, m);\n return m;\n }\n return {\n gl,\n prog,\n maxBones: MAX_BONES,\n upload(mdl2) {\n ensureMesh(mdl2);\n },\n // opts: { color:[r,g,b,a], time, animLayers, blending, overrideTex }\n // overrideTex:puppet 层跑过效果链时采样源是链尾 FBO 的纹理,而不是原始贴图\n // (效果在贴图空间合成,见 renderer.js 中部那段长注释)。传裸 WebGLTexture。\n draw(mvp, mdl2, opts, texture) {\n const m = ensureMesh(mdl2);\n gl.useProgram(prog);\n gl.bindVertexArray(m.vao);\n gl.activeTexture(gl.TEXTURE0);\n const src = opts.overrideTex || (texture && texture.glTex ? texture.glTex : texture);\n gl.bindTexture(gl.TEXTURE_2D, src);\n gl.uniform1i(uni.tex, 0);\n gl.uniformMatrix4fv(uni.mvp, false, mvp);\n const col = opts.color || [1, 1, 1, 1];\n gl.uniform4f(uni.color, col[0], col[1], col[2], col[3]);\n const skin = computeSkinMatrices(mdl2, opts.time || 0, opts.animLayers, opts.boneOverrides);\n const count = Math.min(mdl2.bones.length, MAX_BONES);\n if (skin && count > 0) {\n gl.uniformMatrix4fv(uni.skin, false, skin.subarray(0, count * 16));\n gl.uniform1i(uni.boneCount, count);\n } else {\n gl.uniformMatrix4fv(uni.skin, false, identitySkin);\n gl.uniform1i(uni.boneCount, 0);\n }\n if (opts.blending === \"additive\") {\n gl.enable(gl.BLEND);\n gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE);\n } else if (opts.blending === \"normal\") {\n gl.disable(gl.BLEND);\n } else {\n gl.enable(gl.BLEND);\n gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n }\n const idxType = mdl2.indexType === \"u32\" ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT;\n gl.drawElements(gl.TRIANGLES, mdl2.indexCount, idxType, 0);\n gl.bindVertexArray(null);\n }\n };\n}\nconst mdlMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n applyAttachmentBindOrigins,\n attachmentBind,\n attachmentWorld,\n bindWorldOf,\n computeSkinMatrices,\n createMDLRenderer,\n followAttachments,\n mat4MulOut,\n parentMeshToWorldDelta,\n parseMDL\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction effectiveTextPadding(boxW, boxH, padding) {\n const pad = Math.max(0, Number(padding) || 0);\n const w = Math.max(1, Number(boxW) || 1);\n const h = Math.max(1, Number(boxH) || 1);\n if (pad * 2 >= Math.min(w, h)) return 0;\n return pad;\n}\nfunction layoutText(content, opts, measure) {\n const boxW = Math.max(1, opts.boxW);\n const boxH = Math.max(1, opts.boxH);\n const pad = effectiveTextPadding(boxW, boxH, opts.padding || 0);\n const spacing = opts.spacing || [0, 0];\n const lineHeight = Math.max(1, opts.lineHeight || (opts.pointsize || 24) * 1.25 + spacing[1]);\n const innerW = Math.max(1, boxW - pad * 2);\n const wrapW = opts.limitwidth && opts.maxwidth > 0 ? Math.min(opts.maxwidth, innerW) : Infinity;\n function wrapOne(text) {\n if (measure(text) <= wrapW) return [text];\n const lines2 = [];\n let cur = \"\";\n let lastBreak = -1;\n for (const ch of text) {\n cur += ch;\n if (ch === \" \" || ch === \"\t\") lastBreak = cur.length;\n if (measure(cur) > wrapW && cur.length > 1) {\n if (lastBreak > 0) {\n lines2.push(cur.slice(0, lastBreak - 1));\n cur = cur.slice(lastBreak);\n } else {\n lines2.push(cur.slice(0, -1));\n cur = ch;\n }\n lastBreak = -1;\n while (measure(cur) > wrapW && cur.length > 1) {\n lines2.push(cur.slice(0, -1));\n cur = cur.slice(-1);\n }\n }\n }\n if (cur !== \"\") lines2.push(cur);\n return lines2.length ? lines2 : [\"\"];\n }\n let lines = [];\n const raw = String(content ?? \"\").split(\"\\n\");\n for (const r of raw) lines.push(...wrapOne(r));\n let truncated = false;\n if (opts.limitrows && opts.maxrows > 0 && lines.length > opts.maxrows) {\n lines = lines.slice(0, opts.maxrows);\n truncated = true;\n if (opts.limituseellipsis) {\n let last = lines[opts.maxrows - 1];\n while (last.length > 0 && measure(last + \"…\") > wrapW) last = last.slice(0, -1);\n lines[opts.maxrows - 1] = last + \"…\";\n }\n }\n const widths = lines.map((t) => measure(t));\n const totalH = lines.length * lineHeight;\n const halign = opts.halign || \"center\";\n const valign = opts.valign || \"center\";\n const y0 = valign === \"top\" ? pad : valign === \"bottom\" ? Math.max(pad, boxH - pad - totalH) : (boxH - totalH) / 2;\n const out = lines.map((text, i) => {\n const w = widths[i];\n const x = halign === \"left\" ? pad : halign === \"right\" ? Math.max(pad, boxW - pad - w) : (boxW - w) / 2;\n return { text, width: w, x, y: y0 + i * lineHeight };\n });\n return { lines: out, lineHeight, totalH, truncated, boxW, boxH };\n}\nfunction drawTextLayer(ctx, layout, opts) {\n const boxW = layout.boxW;\n const boxH = layout.boxH;\n const color = opts.color || [1, 1, 1];\n const alpha = opts.alpha !== void 0 ? opts.alpha : 1;\n const br = opts.brightness !== void 0 ? opts.brightness : 1;\n ctx.font = opts.font;\n try {\n ctx.letterSpacing = (opts.spacing && opts.spacing[0] ? opts.spacing[0] : 0) + \"px\";\n } catch {\n }\n ctx.textBaseline = \"middle\";\n if (opts.opaquebackground) {\n const bg = opts.backgroundcolor || [0, 0, 0];\n const bgb = opts.backgroundbrightness !== void 0 ? opts.backgroundbrightness : 1;\n ctx.fillStyle = `rgba(${Math.round(bg[0] * 255 * bgb)},${Math.round(bg[1] * 255 * bgb)},${Math.round(bg[2] * 255 * bgb)},${alpha})`;\n ctx.fillRect(0, 0, boxW, boxH);\n }\n const fill = (dx, dy, style) => {\n ctx.fillStyle = style;\n for (const line of layout.lines) ctx.fillText(line.text, line.x + dx, line.y + layout.lineHeight / 2 + dy);\n };\n if (opts.castshadow) {\n const off = Math.max(1, (opts.pointsize || 24) / 10);\n fill(off, off, `rgba(0,0,0,${alpha * 0.75})`);\n }\n fill(0, 0, `rgba(${Math.round(color[0] * 255 * br)},${Math.round(color[1] * 255 * br)},${Math.round(color[2] * 255 * br)},${alpha})`);\n}\nconst ADD_METHOD_RE = /^add[A-Z]/;\nfunction makeSandboxConsole() {\n return { log: () => {\n }, warn: () => {\n }, error: () => {\n }, info: () => {\n }, debug: () => {\n } };\n}\nfunction wrapEngine(engine) {\n return new Proxy(engine, {\n get(t, name, recv) {\n const v = Reflect.get(t, name, recv);\n if (v == null && typeof name === \"string\" && name !== \"then\") {\n const stub = () => void 0;\n t[name] = stub;\n return stub;\n }\n return v;\n }\n });\n}\nfunction defaultEngineTimer(fn, ms) {\n const cancel = () => {\n };\n return cancel;\n}\nfunction applyEngineHost(engine, opts) {\n engine.isScreensaver = !!opts.isScreensaver;\n if (typeof opts.isRunningInEditor === \"boolean\") engine.isRunningInEditor = opts.isRunningInEditor;\n if (!engine.setInterval) engine.setInterval = opts.setInterval || defaultEngineTimer;\n if (!engine.setTimeout) engine.setTimeout = opts.setTimeout || defaultEngineTimer;\n if (!engine.clearTimeout) engine.clearTimeout = opts.clearTimeout || (() => {\n });\n if (!engine.clearInterval) engine.clearInterval = opts.clearInterval || (() => {\n });\n if (typeof opts.openUserShortcut === \"function\") engine.openUserShortcut = opts.openUserShortcut;\n const mediaCtl = opts.mediaControl || null;\n engine.media = {\n skipNext: () => {\n if (mediaCtl && mediaCtl.skipNext) return mediaCtl.skipNext();\n },\n skipPrevious: () => {\n if (mediaCtl && mediaCtl.skipPrevious) return mediaCtl.skipPrevious();\n },\n play: () => {\n if (mediaCtl && mediaCtl.play) return mediaCtl.play();\n },\n pause: () => {\n if (mediaCtl && mediaCtl.pause) return mediaCtl.pause();\n },\n playPause: () => {\n if (mediaCtl && mediaCtl.playPause) return mediaCtl.playPause();\n },\n get snapshot() {\n return mediaCtl && mediaCtl.snapshot ? mediaCtl.snapshot : null;\n }\n };\n const win = opts.windowTitle;\n Object.defineProperty(engine, \"windowTitle\", {\n configurable: true,\n enumerable: true,\n get() {\n return win && win.title ? String(win.title) : \"\";\n }\n });\n Object.defineProperty(engine, \"windowApp\", {\n configurable: true,\n enumerable: true,\n get() {\n return win && win.app ? String(win.app) : \"\";\n }\n });\n}\nclass Vec3 {\n constructor(x, y, z) {\n if (x !== null && typeof x === \"object\") {\n this.x = x.x !== void 0 ? x.x : x.width || 0;\n this.y = y !== void 0 ? y : x.y !== void 0 ? x.y : x.height || 0;\n this.z = z !== void 0 ? z : x.z || 0;\n } else if (y === void 0 && z === void 0) {\n const n = Number(x) || 0;\n this.x = n;\n this.y = n;\n this.z = n;\n } else {\n this.x = Number(x) || 0;\n this.y = Number(y) || 0;\n this.z = Number(z) || 0;\n }\n }\n add(v) {\n const o = new Vec3(v);\n return new Vec3(this.x + o.x, this.y + o.y, this.z + o.z);\n }\n subtract(v) {\n const o = new Vec3(v);\n return new Vec3(this.x - o.x, this.y - o.y, this.z - o.z);\n }\n multiply(v) {\n if (v && typeof v === \"object\") return new Vec3(this.x * v.x, this.y * v.y, this.z * v.z);\n return new Vec3(this.x * v, this.y * v, this.z * v);\n }\n divide(v) {\n const safe = (a, b) => b === 0 ? 0 : a / b;\n if (v && typeof v === \"object\") return new Vec3(safe(this.x, v.x), safe(this.y, v.y), safe(this.z, v.z));\n return new Vec3(safe(this.x, v), safe(this.y, v), safe(this.z, v));\n }\n copy() {\n return new Vec3(this.x, this.y, this.z);\n }\n // 3790527023 按钮:`currentScale = currentScale.mix(targetScale, frametime)`。\n // t 不夹取:模板传的是 `frametime * SPEED`,经常 > 1。\n mix(v, t) {\n const o = new Vec3(v);\n const k = Number(t);\n const a = Number.isFinite(k) ? k : 0;\n return new Vec3(\n this.x + (o.x - this.x) * a,\n this.y + (o.y - this.y) * a,\n this.z + (o.z - this.z) * a\n );\n }\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n normalize() {\n const l = this.length();\n return l === 0 ? new Vec3(0, 0, 0) : new Vec3(this.x / l, this.y / l, this.z / l);\n }\n dot(v) {\n const o = new Vec3(v);\n return this.x * o.x + this.y * o.y + this.z * o.z;\n }\n toString() {\n return this.x + \" \" + this.y + \" \" + this.z;\n }\n}\nconst Vec2 = Vec3;\nfunction asScriptVec3(value) {\n if (value instanceof Vec3) return value;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return value;\n if (!(\"x\" in value) && !(\"y\" in value) && !(\"z\" in value)) return value;\n if (Object.getPrototypeOf(value) === Vec3.prototype) return value;\n try {\n Object.setPrototypeOf(value, Vec3.prototype);\n } catch {\n }\n return value;\n}\nfunction makeInput(pointerView) {\n if (pointerView && pointerView.cursorWorldPosition) return pointerView;\n return {\n cursorWorldPosition: new Vec3(0, 0, 0),\n cursorScreenPosition: new Vec3(0, 0, 0),\n cursorPosition: new Vec3(0, 0, 0),\n cursorPositionLast: new Vec3(0, 0, 0),\n cursorLeftDown: false\n };\n}\nfunction makeCursorEventVec(x, y, z) {\n return new Vec3(x || 0, y || 0, z || 0);\n}\nfunction createInputView() {\n const view = {\n cursorWorldPosition: new Vec3(0, 0, 0),\n cursorScreenPosition: new Vec3(0, 0, 0),\n cursorPosition: new Vec3(0, 0, 0),\n cursorPositionLast: new Vec3(0, 0, 0),\n cursorLeftDown: false\n };\n view.update = function(p) {\n if (!p) return view;\n view.cursorWorldPosition.x = p.wx;\n view.cursorWorldPosition.y = p.originY != null ? p.originY : p.wy;\n view.cursorWorldPosition.z = 0;\n view.cursorScreenPosition.x = p.screenX;\n view.cursorScreenPosition.y = p.screenY;\n view.cursorScreenPosition.z = 0;\n view.cursorPosition.x = p.u;\n view.cursorPosition.y = p.v;\n view.cursorPosition.z = 0;\n view.cursorPositionLast.x = p.lastU;\n view.cursorPositionLast.y = p.lastV;\n view.cursorPositionLast.z = 0;\n view.cursorLeftDown = !!p.leftDown;\n return view;\n };\n return view;\n}\nconst WEMATH = {\n mix: (a, b, t) => a + (b - a) * t,\n lerp: (a, b, t) => a + (b - a) * t,\n clamp: (v, lo, hi) => Math.min(hi, Math.max(lo, v)),\n saturate: (v) => Math.min(1, Math.max(0, v)),\n smoothstep: (a, b, x) => {\n const t = Math.min(1, Math.max(0, (x - a) / (b - a || 1)));\n return t * t * (3 - 2 * t);\n },\n // [we-scene patch] WE 的实际拼写是 **smoothStep**(大写 S),全库调用 10 次。\n // 只提供小写别名等于没提供:`WEMath.smoothStep(...)` 是 undefined,\n // 一调用就 TypeError 熔断,整个脚本(连同它驱动的颜色/位移)静默失效。\n smoothStep: (a, b, x) => {\n const t = Math.min(1, Math.max(0, (x - a) / (b - a || 1)));\n return t * t * (3 - 2 * t);\n },\n random: (lo, hi) => lo === void 0 ? Math.random() : lo + Math.random() * ((hi === void 0 ? 1 : hi) - lo),\n randomInt: (lo, hi) => Math.floor((lo || 0) + Math.random() * ((hi === void 0 ? 1 : hi) + 1 - (lo || 0))),\n degrees: (rad) => rad * 180 / Math.PI,\n radians: (deg) => deg * Math.PI / 180\n};\nconst WECOLOR = {\n hsv2rgb: (c) => {\n const o = c && typeof c === \"object\" ? c : { x: 0, y: 0, z: 0 };\n const h = ((Number(o.x) || 0) % 1 + 1) % 1;\n const s = Math.min(1, Math.max(0, Number(o.y) || 0));\n const v = Math.min(1, Math.max(0, Number(o.z) || 0));\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n const tbl = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]];\n const rgb = tbl[i % 6];\n return { x: rgb[0], y: rgb[1], z: rgb[2] };\n },\n rgb2hsv: (c) => {\n const o = c && typeof c === \"object\" ? c : { x: 0, y: 0, z: 0 };\n const r = Number(o.x) || 0;\n const g = Number(o.y) || 0;\n const b = Number(o.z) || 0;\n const mx = Math.max(r, g, b);\n const mn = Math.min(r, g, b);\n const d = mx - mn;\n let h = 0;\n if (d > 0) {\n if (mx === r) h = (g - b) / d / 6;\n else if (mx === g) h = (2 + (b - r) / d) / 6;\n else h = (4 + (r - g) / d) / 6;\n if (h < 0) h += 1;\n }\n return { x: h, y: mx === 0 ? 0 : d / mx, z: mx };\n }\n};\nconst WEVECTOR = {\n add: (a, b) => ({ x: (a.x || 0) + (b.x || 0), y: (a.y || 0) + (b.y || 0), z: (a.z || 0) + (b.z || 0) }),\n subtract: (a, b) => ({ x: (a.x || 0) - (b.x || 0), y: (a.y || 0) - (b.y || 0), z: (a.z || 0) - (b.z || 0) }),\n scale: (a, s) => ({ x: (a.x || 0) * s, y: (a.y || 0) * s, z: (a.z || 0) * s }),\n length: (a) => Math.hypot(a.x || 0, a.y || 0, a.z || 0),\n dot: (a, b) => (a.x || 0) * (b.x || 0) + (a.y || 0) * (b.y || 0) + (a.z || 0) * (b.z || 0),\n normalize: (a) => {\n const l = Math.hypot(a.x || 0, a.y || 0, a.z || 0) || 1;\n return { x: (a.x || 0) / l, y: (a.y || 0) / l, z: (a.z || 0) / l };\n },\n mix: (a, b, t) => ({\n x: (a.x || 0) + ((b.x || 0) - (a.x || 0)) * t,\n y: (a.y || 0) + ((b.y || 0) - (a.y || 0)) * t,\n z: (a.z || 0) + ((b.z || 0) - (a.z || 0)) * t\n })\n};\nconst MEDIA_PLAYBACK_EVENT = Object.freeze({\n PLAYBACK_STOPPED: 0,\n PLAYBACK_PLAYING: 1,\n PLAYBACK_PAUSED: 2\n});\nconst MEDIA_CALLBACKS = [\n \"mediaPropertiesChanged\",\n \"mediaThumbnailChanged\",\n \"mediaPlaybackChanged\",\n \"mediaTimelineChanged\",\n \"mediaStatusChanged\",\n \"mediaLyricsChanged\"\n];\nconst SANDBOX_PARAM_NAMES = [\n \"scriptProperties\",\n \"engine\",\n \"WEMath\",\n \"WEColor\",\n \"WEVector\",\n \"createScriptProperties\",\n \"shared\",\n \"console\",\n \"process\",\n \"globalThis\",\n \"self\",\n \"window\",\n \"document\",\n \"require\",\n \"module\",\n \"exports\",\n \"fetch\",\n \"XMLHttpRequest\",\n \"Worker\",\n \"importScripts\",\n \"location\",\n \"navigator\",\n \"alert\",\n \"confirm\",\n \"prompt\",\n \"setTimeout\",\n \"setInterval\",\n \"clearTimeout\",\n \"clearInterval\",\n \"requestAnimationFrame\",\n \"cancelAnimationFrame\",\n \"performance\",\n \"Function\",\n \"Vec3\",\n \"Vec2\",\n \"input\",\n \"thisLayer\",\n \"thisScene\",\n \"thisObject\",\n \"localStorage\",\n // [we-scene patch] 媒体播放状态枚举。全库 111 处脚本裸用\n // `MediaPlaybackEvent.PLAYBACK_PLAYING` 之类做状态比较,不注入会 ReferenceError\n // 熔断(三振后整个 update 停摆)。既然进了形参表,就必须同时列在这里,\n // 否则脚本顶层若声明同名变量会 SyntaxError 报废整个脚本。\n \"MediaPlaybackEvent\"\n];\nconst SANDBOX_PARAM_DECL_RE = new RegExp(\n `(^[ \\\\t]*|;|\\\\})[ \\\\t]*(?:var|let|const)[ \\\\t]+(?=(?:${SANDBOX_PARAM_NAMES.join(\"|\")})\\\\b)`,\n \"gm\"\n);\nconst WE_IMPORT_MODULES = { WEMath: true, WEColor: true, WEVector: true };\nfunction rewriteComboStringEq(src) {\n if (typeof src !== \"string\") return src;\n return src.replace(/([!=])==(\\s*)(['\"])(-?\\d+)\\3/g, \"$1=$2$3$4$3\");\n}\nfunction scriptToFunctionBody(script) {\n return rewriteComboStringEq(script).replace(/\\bimport\\s*\\*\\s*as\\s+(\\w+)\\s+from\\s*['\"]([^'\"]+)['\"]\\s*;?/g, (_, alias, spec) => {\n const mod = String(spec);\n if (WE_IMPORT_MODULES[mod]) {\n return alias === mod ? \"\" : `var ${alias} = ${mod};`;\n }\n return `var ${alias} = {};`;\n }).replace(/(^[ \\t]*|;|\\})[ \\t]*import\\s+(?:[^;'\"]+\\s+from\\s+)?['\"][^'\"]*['\"];?[ \\t]*/gm, \"$1\").replace(/(^[ \\t]*|;|\\})[ \\t]*export[ \\t]+(?=(?:async[ \\t]+)?function\\b|(?:var|let|const)\\b)/gm, \"$1\").replace(SANDBOX_PARAM_DECL_RE, \"$1\");\n}\nfunction propValue(v) {\n if (v !== null && typeof v === \"object\" && \"value\" in v) return v.value;\n return v;\n}\nfunction evalTextScript(script, scriptprops, opts = {}) {\n if (typeof script !== \"string\" || script.length === 0) return null;\n const body = scriptToFunctionBody(script);\n if (body === script && script.indexOf(\"update\") < 0) return null;\n const spValues = {};\n if (scriptprops && typeof scriptprops === \"object\") {\n for (const [k, v] of Object.entries(scriptprops)) spValues[k] = propValue(v);\n }\n const builder = new Proxy(() => builder, {\n apply() {\n return builder;\n },\n get(_t, name) {\n if (name === \"finish\") return () => spValues;\n if (typeof name === \"string\" && ADD_METHOD_RE.test(name)) {\n return (def) => {\n if (def && typeof def === \"object\" && typeof def.name === \"string\" && !(def.name in spValues)) {\n spValues[def.name] = propValue(def.value);\n }\n return builder;\n };\n }\n return void 0;\n }\n });\n const thisLayer = {\n text: opts.text !== void 0 && opts.text !== null ? String(opts.text) : \"\",\n font: opts.font || \"\",\n pointsize: opts.pointsize || 24,\n color: (opts.color || [1, 1, 1]).slice(),\n angles: (opts.angles || [0, 0, 0]).slice(),\n scale: (opts.scale || [1, 1, 1]).slice(),\n visible: opts.visible !== false,\n // origin 需支持 add/subtract 链式向量运算(歌曲标题脚本等 2 处用到)\n origin: makeVec3(opts.origin || [0, 0, 0])\n };\n const engine = {\n registerAsset: () => {\n },\n frametime: 1 / 60,\n runtime: 0,\n canvasSize: opts.canvasSize || { width: 1920, height: 1080 },\n // [we-scene patch] engine.screenResolution(全库 10 处 / 2 壁纸):\n // 屏幕**像素**尺寸,脚本用它把 input.cursorScreenPosition 归一化\n // (3791967416 除它得 [0,1];3509243656 减半屏得 [-1,1])。\n // 缺它则那两个壁纸的指针换算全部除以 undefined → NaN。\n screenResolution: opts.screenResolution || { x: 1920, y: 1080 },\n // [we-scene patch] engine.timeOfDay(全库 14 处):一天中的时刻 [0,1),\n // 与 shader 侧的 g_Daytime 同源。\n timeOfDay: typeof opts.timeOfDay === \"number\" ? opts.timeOfDay : 0,\n userProperties: opts.userProperties || {},\n // [we-scene patch] WE 音频分辨率常量(对象脚本 audio 条用\n // engine.AUDIO_RESOLUTION_16 作 registerAudioBuffers 的实参)\n AUDIO_RESOLUTION_16: 16,\n AUDIO_RESOLUTION_32: 32,\n AUDIO_RESOLUTION_64: 64,\n // [we-scene patch] engine.setTimeout / clearTimeout(全库 38 / 2 处):\n // 3791967416 的点击缩放动画靠它做延时回弹。宿主可注入自己的实现(把回调挂到\n // 帧循环上,避免标签页节流时定时器与渲染脱节);未注入时用宿主环境的原生实现。\n // 注意**不能**把宿主全局 setTimeout 直接暴露给脚本作用域(沙箱把它遮成\n // undefined),只能经 engine 这个受控出口给。\n setTimeout: opts.setTimeout || defaultEngineTimer,\n clearTimeout: opts.clearTimeout || (() => {\n }),\n setInterval: opts.setInterval || defaultEngineTimer,\n clearInterval: opts.clearInterval || (() => {\n }),\n openUserShortcut: opts.openUserShortcut || (() => {\n }),\n isRunningInEditor: !!opts.isRunningInEditor,\n isScreensaver: !!opts.isScreensaver\n };\n applyEngineHost(engine, opts);\n const audioViews = opts.audioViews;\n engine.registerAudioBuffers = (n) => {\n const k = Math.max(1, Math.min(64, Math.floor(Number(n) || 0)));\n let v = audioViews ? audioViews.get(k) : void 0;\n if (!v) {\n v = {\n left: new Float32Array(k),\n right: new Float32Array(k),\n average: new Float32Array(k)\n };\n if (audioViews) audioViews.set(k, v);\n }\n return v;\n };\n const thisScene = {\n getLayer(name) {\n const t = opts.getLayerText ? opts.getLayerText(String(name)) : void 0;\n return { text: t !== void 0 && t !== null ? String(t) : \"\" };\n },\n // WE 支持脚本运行时建层(官方 3D 时钟阴影脚本用它造影子层)。渲染器不支持\n // 动态建层:返回一个可写属性的哑层,脚本逻辑照常走完,影子层内容被忽略 ——\n // 主文本正确,动态影子降级为无。\n createLayer(def) {\n return {\n text: \"\",\n visible: false,\n color: [0, 0, 0],\n alpha: 1,\n pointsize: opts.pointsize || 24,\n font: opts.font || \"\",\n origin: makeVec3(opts.origin || [0, 0, 0]),\n angles: [0, 0, 0],\n scale: [1, 1, 1]\n };\n },\n sortLayer: () => {\n },\n getLayerIndex: () => 0\n };\n const shared = opts.shared || {};\n const sandboxGlobal = { console: makeSandboxConsole() };\n const input = makeInput(opts.inputView);\n let fns;\n try {\n const factory = new Function(\n \"scriptProperties\",\n \"engine\",\n \"thisLayer\",\n \"thisScene\",\n \"WEMath\",\n \"WEColor\",\n \"WEVector\",\n \"createScriptProperties\",\n \"shared\",\n \"console\",\n \"process\",\n \"globalThis\",\n \"self\",\n \"window\",\n \"document\",\n \"require\",\n \"module\",\n \"exports\",\n \"fetch\",\n \"XMLHttpRequest\",\n \"Worker\",\n \"importScripts\",\n \"location\",\n \"navigator\",\n \"alert\",\n \"confirm\",\n \"prompt\",\n \"setTimeout\",\n \"setInterval\",\n \"clearTimeout\",\n \"clearInterval\",\n \"requestAnimationFrame\",\n \"cancelAnimationFrame\",\n \"performance\",\n \"Function\",\n \"Vec3\",\n \"Vec2\",\n \"input\",\n \"MediaPlaybackEvent\",\n '\"use strict\";\\n' + body + '\\n;return {update: typeof update === \"function\" ? update : null,init: typeof init === \"function\" ? init : null,applyUserProperties: typeof applyUserProperties === \"function\" ? applyUserProperties : null,cursorClick: typeof cursorClick === \"function\" ? cursorClick : null,cursorEnter: typeof cursorEnter === \"function\" ? cursorEnter : null,cursorLeave: typeof cursorLeave === \"function\" ? cursorLeave : null,cursorDown: typeof cursorDown === \"function\" ? cursorDown : null,cursorUp: typeof cursorUp === \"function\" ? cursorUp : null,cursorMove: typeof cursorMove === \"function\" ? cursorMove : null,' + // [we-scene patch] 媒体回调。此前只收了 mediaPropertiesChanged,且收完\n // 没有出口(只在「脚本是否为空」的判据里出现过一次),等于没实现。\n // 歌名/歌手文字层就靠这一条:`export function mediaPropertiesChanged(e){ mediaData = e.title }`\n // 是全库 44 处文字脚本的标准形态。\n MEDIA_CALLBACKS.map((n) => `${n}: typeof ${n} === \"function\" ? ${n} : null,`).join(\"\") + \"dummy_: 0};\"\n );\n fns = factory(\n spValues,\n wrapEngine(engine),\n thisLayer,\n thisScene,\n WEMATH,\n WECOLOR,\n WEVECTOR,\n builder,\n shared,\n sandboxGlobal.console,\n void 0,\n sandboxGlobal,\n sandboxGlobal,\n sandboxGlobal,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n Vec3,\n Vec2,\n input,\n MEDIA_PLAYBACK_EVENT\n );\n } catch (e) {\n if (opts.onError) opts.onError(e, \"parse\");\n return null;\n }\n const hasMediaHook = !!(fns && MEDIA_CALLBACKS.some((n) => fns[n]));\n const hasApplyHook = !!(fns && typeof fns.applyUserProperties === \"function\");\n if (!fns || !fns.update && !hasMediaHook && !hasApplyHook) return null;\n const sandbox = {\n engine,\n thisLayer,\n scriptProperties: spValues,\n hasUpdate: !!fns.update,\n // [we-scene patch] 是否挂了指针回调(宿主据此建 hit-test 索引)\n hasCursorHook: !!(fns.cursorClick || fns.cursorEnter || fns.cursorLeave || fns.cursorDown || fns.cursorUp || fns.cursorMove),\n // [we-scene patch] 是否挂了媒体回调(宿主据此建广播表)\n hasMediaHook,\n hasApplyHook,\n errCount: 0,\n disabled: false,\n init(value) {\n if (!fns.init) return;\n try {\n fns.init(value);\n } catch (e) {\n sandbox.errCount++;\n if (opts.onError) opts.onError(e, \"init\");\n }\n },\n applyUserProperties(props) {\n if (!fns.applyUserProperties) return;\n try {\n fns.applyUserProperties(props || {});\n } catch (e) {\n sandbox.errCount++;\n if (opts.onError) opts.onError(e, \"applyUserProperties\");\n }\n },\n /** 求值当前文本:返回新文本;undefined/null 保留原值;连续出错 3 次熔断回退静态文本 */\n callUpdate(value) {\n if (!fns.update || sandbox.disabled) return null;\n const before = thisLayer.text;\n let ret;\n try {\n ret = fns.update(before !== \"\" ? before : value !== void 0 ? value : \"\");\n } catch (e) {\n sandbox.errCount++;\n if (opts.onError) opts.onError(e, \"update\");\n if (sandbox.errCount >= 3) sandbox.disabled = true;\n return null;\n }\n if (typeof ret === \"string\") {\n thisLayer.text = ret;\n return ret;\n }\n if (typeof ret === \"boolean\") return null;\n if (ret !== void 0 && ret !== null) {\n thisLayer.text = String(ret);\n return thisLayer.text;\n }\n if (thisLayer.text !== before) return thisLayer.text;\n return null;\n },\n // [we-scene patch] 文字脚本也有 cursor* 回调(3786330502 的鼠标悬停/显隐\n // 交互按钮挂在文字层上)。语义同对象脚本的 callCursor。\n callCursor(name, event) {\n if (sandbox.disabled) return void 0;\n const fn = fns[name];\n if (typeof fn !== \"function\") return void 0;\n try {\n return fn(event);\n } catch (e) {\n sandbox.errCount++;\n if (opts.onError) opts.onError(e, name);\n if (sandbox.errCount >= 3) sandbox.disabled = true;\n return void 0;\n }\n },\n /**\n * [we-scene patch] 派发媒体回调(歌名/歌手文字层的唯一数据入口)。\n * 与 callCursor 同构;宿主只在快照变化时调用。\n */\n callMedia(name, event) {\n if (sandbox.disabled) return void 0;\n const fn = fns[name];\n if (typeof fn !== \"function\") return void 0;\n try {\n return fn(event);\n } catch (e) {\n sandbox.errCount++;\n if (opts.onError) opts.onError(e, name);\n if (sandbox.errCount >= 3) sandbox.disabled = true;\n return void 0;\n }\n }\n };\n return sandbox;\n}\nfunction makeNeutralAnimation() {\n const self = {\n play: () => self,\n pause: () => self,\n stop: () => self,\n setFrame: () => self,\n setRate: () => self,\n setBlend: () => self,\n setVisible: () => self,\n // isPlaying 两种调用形态都有:属性读(`if (a.isPlaying)`)与方法调\n // (`if (a.isPlaying())`)。用函数并挂 valueOf/toString,两种写法都不炸。\n isPlaying: Object.assign(() => false, { valueOf: () => false, toString: () => \"false\" }),\n get frame() {\n return 0;\n },\n get frameCount() {\n return 0;\n },\n get rate() {\n return 1;\n }\n };\n return self;\n}\nfunction makeTextureAnimation(layer) {\n if (!layer) return makeNeutralAnimation();\n if (layer.textureAnimation) return layer.textureAnimation.api;\n const state = {\n frame: null,\n // null = 未被脚本钉帧(走时间自动播)\n playing: true,\n rate: 1\n };\n const api = {\n play: () => {\n state.playing = true;\n return api;\n },\n pause: () => {\n state.playing = false;\n return api;\n },\n // stop 语义上是「停并回到起点」;脚本随后基本都会 setFrame,故只落 playing\n stop: () => {\n state.playing = false;\n return api;\n },\n setFrame: (n) => {\n const v = Number(n);\n state.frame = Number.isFinite(v) ? v : 0;\n return api;\n },\n setRate: (r) => {\n const v = Number(r);\n if (Number.isFinite(v)) state.rate = v;\n return api;\n },\n setBlend: () => api,\n setVisible: (v) => {\n layer.visible = !!v;\n return api;\n },\n isPlaying: Object.assign(() => state.playing, {\n valueOf: () => state.playing,\n toString: () => String(state.playing)\n }),\n get frame() {\n return state.frame === null ? 0 : state.frame;\n },\n get frameCount() {\n return layer.spriteFrameCount || 0;\n },\n get rate() {\n return state.rate;\n }\n };\n state.api = api;\n layer.textureAnimation = state;\n return api;\n}\nfunction makeVideoTextureHandle(layer) {\n if (layer && layer.videoTextureApi) return layer.videoTextureApi;\n const ctl = () => layer && layer.videoCtl || null;\n const api = {\n get duration() {\n const c = ctl();\n const n = c && typeof c.duration === \"function\" ? c.duration() : 0;\n return Number.isFinite(n) ? n : 0;\n },\n get rate() {\n const c = ctl();\n const n = c && typeof c.getRate === \"function\" ? c.getRate() : 1;\n return Number.isFinite(n) && n > 0 ? n : 1;\n },\n set rate(v) {\n const c = ctl();\n const n = Number(v);\n if (c && typeof c.setRate === \"function\" && Number.isFinite(n)) c.setRate(n);\n },\n get loop() {\n const c = ctl();\n return c && typeof c.getLoop === \"function\" ? !!c.getLoop() : true;\n },\n set loop(v) {\n const c = ctl();\n if (c && typeof c.setLoop === \"function\") c.setLoop(!!v);\n },\n play: () => {\n const c = ctl();\n if (c && c.play) c.play();\n },\n pause: () => {\n const c = ctl();\n if (c && c.pause) c.pause();\n },\n stop: () => {\n const c = ctl();\n if (c && c.stop) c.stop();\n },\n isPlaying: Object.assign(() => {\n const c = ctl();\n return !!(c && typeof c.isPlaying === \"function\" && c.isPlaying());\n }, {\n valueOf() {\n const c = ctl();\n return !!(c && typeof c.isPlaying === \"function\" && c.isPlaying());\n },\n toString() {\n const c = ctl();\n return String(!!(c && typeof c.isPlaying === \"function\" && c.isPlaying()));\n }\n }),\n getCurrentTime: () => {\n const c = ctl();\n const n = c && typeof c.getCurrentTime === \"function\" ? c.getCurrentTime() : 0;\n return Number.isFinite(n) ? n : 0;\n },\n setCurrentTime: (t) => {\n const c = ctl();\n const n = Number(t);\n if (c && typeof c.setCurrentTime === \"function\" && Number.isFinite(n)) c.setCurrentTime(n);\n },\n addEndedCallback: (cb) => {\n const c = ctl();\n if (typeof cb === \"function\" && c && typeof c.addEndedCallback === \"function\") c.addEndedCallback(cb);\n }\n };\n if (layer) layer.videoTextureApi = api;\n return api;\n}\nfunction makeSandboxStorage() {\n const m = /* @__PURE__ */ new Map();\n const get = (k) => m.has(String(k)) ? m.get(String(k)) : null;\n const set = (k, v) => {\n m.set(String(k), String(v));\n };\n return {\n getItem: get,\n setItem: set,\n // 语料里有脚本按 `localStorage.set/get` 调用(非标准写法),一并提供别名\n get,\n set,\n removeItem: (k) => {\n m.delete(String(k));\n },\n remove: (k) => {\n m.delete(String(k));\n },\n clear: () => {\n m.clear();\n },\n key: (i) => Array.from(m.keys())[i] ?? null,\n get length() {\n return m.size;\n }\n };\n}\nfunction makeBoneApi(layer, overrides2) {\n const mdl2 = layer && layer.puppet;\n const bones = mdl2 && mdl2.bones || null;\n const count = bones ? bones.length : 0;\n const origin = layer && layer.origin || [0, 0, 0];\n const scale = layer && layer.scale || [1, 1, 1];\n const sx = scale[0] || 1;\n const sy = scale[1] || 1;\n const toWorld = (lx, ly) => [origin[0] + lx * sx, origin[1] - ly * sy];\n const toLocal = (wx, wy) => [(wx - origin[0]) / sx, -(wy - origin[1]) / sy];\n const localT = (i) => {\n const ov = overrides2.get(i);\n if (ov) return [ov[0], ov[1], ov[2]];\n const m = bones[i].matrix;\n return [m[12], m[13], m[14]];\n };\n const worldT = (i) => {\n let x = 0, y = 0;\n let cur = i;\n for (let guard = 0; cur >= 0 && cur < count && guard < 64; guard++) {\n const t = localT(cur);\n x += t[0];\n y += t[1];\n cur = bones[cur].parent;\n }\n return toWorld(x, y);\n };\n const makeTransform = (i) => {\n const tf = {\n /** 无参 = getter(返回世界像素 Vec3);有参 = setter(**返回自身**) */\n translation(v) {\n if (v === void 0) {\n const w = worldT(i);\n return new Vec3(w[0], w[1], 0);\n }\n const a = normVec(v);\n let px = 0, py = 0;\n if (bones[i].parent >= 0) {\n const pw = worldT(bones[i].parent);\n const pl = toLocal(pw[0], pw[1]);\n px = pl[0];\n py = pl[1];\n }\n const l = toLocal(a[0], a[1]);\n overrides2.set(i, [l[0] - px, l[1] - py, 0]);\n return tf;\n },\n // 语料零调用,保留链式以防混淆脚本按名访问\n rotation() {\n return tf;\n },\n scale() {\n return tf;\n }\n };\n return tf;\n };\n return {\n getBoneCount: () => count,\n getBoneTransform: (i) => {\n const k = Math.floor(Number(i));\n if (!bones || !(k >= 0) || k >= count) {\n const dummy = {\n translation(v) {\n return v === void 0 ? new Vec3(0, 0, 0) : dummy;\n },\n rotation() {\n return dummy;\n },\n scale() {\n return dummy;\n }\n };\n return dummy;\n }\n return makeTransform(k);\n },\n setBoneTransform: (i, tf) => {\n const k = Math.floor(Number(i));\n if (!bones || !(k >= 0) || k >= count) return;\n },\n // 见函数头「已知边界」\n applyBonePhysicsImpulse: () => {\n }\n };\n}\nfunction makeEffectHandle(eff2) {\n return {\n get visible() {\n return eff2 ? !!eff2.visible : false;\n },\n set visible(v) {\n if (eff2) eff2.visible = !!v;\n },\n get name() {\n return eff2 && eff2.name || \"\";\n },\n // 语料里没见到别的成员,但保持链式安全\n getMaterial: () => null\n };\n}\nfunction resolveDestroyTarget(arg, opts) {\n if (arg == null) return null;\n const lookup = (name) => {\n if (!name) return null;\n if (opts && typeof opts.getSceneLayer === \"function\") {\n const l = opts.getSceneLayer(String(name));\n if (l) return l;\n }\n if (opts && opts.layer && opts.layer.name === name) return opts.layer;\n return null;\n };\n if (typeof arg === \"object\") return lookup(arg.name);\n return lookup(String(arg));\n}\nfunction markLayerDestroyed(layer, opts) {\n if (!layer) return;\n layer.visibleSelf = false;\n layer.visible = false;\n layer.destroyed = true;\n if (opts && typeof opts.recomputeVisibility === \"function\") opts.recomputeVisibility();\n}\nfunction resolveWorkshopAssetPath(assetPath, workshopId) {\n if (typeof assetPath !== \"string\" || !assetPath) return assetPath;\n if (/\\/workshop\\//.test(assetPath)) return assetPath;\n const id = workshopId != null && workshopId !== \"\" ? String(workshopId) : \"\";\n if (!id) return assetPath;\n const m = assetPath.match(/^(models|materials|shaders|particles|effects)\\/(.+)$/);\n if (!m) return assetPath;\n return `${m[1]}/workshop/${id}/${m[2]}`;\n}\nfunction extractWorkshopId(script) {\n if (typeof script !== \"string\") return null;\n const m = script.match(/export\\s+let\\s+__workshopId\\s*=\\s*['\"](\\d+)['\"]/);\n return m ? m[1] : null;\n}\nfunction makeThisScene(opts) {\n const layerProxy = (layer) => makeObjectLayerProxy(layer || null, opts);\n return {\n getLayer(name) {\n if (opts.getSceneLayer) {\n const l = opts.getSceneLayer(String(name));\n if (l && !l.destroyed) return layerProxy(l);\n }\n return layerProxy(null);\n },\n createLayer(cfg) {\n if (typeof opts.createSceneLayer !== \"function\") return layerProxy(null);\n let arg = cfg;\n if (typeof cfg === \"string\") {\n const wid = typeof opts.getWorkshopId === \"function\" ? opts.getWorkshopId() : opts.workshopId;\n arg = resolveWorkshopAssetPath(cfg, wid);\n }\n const created = opts.createSceneLayer(arg);\n if (created) return layerProxy(created);\n return layerProxy(null);\n },\n destroyLayer(arg) {\n markLayerDestroyed(resolveDestroyTarget(arg, opts), opts);\n },\n sortLayer: () => {\n },\n getLayerIndex(arg) {\n const list = typeof opts.enumerateSceneLayers === \"function\" ? opts.enumerateSceneLayers() : [];\n const name = arg && typeof arg === \"object\" ? arg.name : String(arg || \"\");\n const i = list.findIndex((l) => l && l.name === name);\n return i < 0 ? 0 : i;\n },\n enumerateLayers() {\n const list = typeof opts.enumerateSceneLayers === \"function\" ? opts.enumerateSceneLayers() : [];\n const out = [];\n for (const l of list) {\n if (l && !l.destroyed) out.push(layerProxy(l));\n }\n return out;\n },\n getAnimation(name) {\n if (typeof opts.getSceneAnimation === \"function\") {\n const a = opts.getSceneAnimation(name);\n if (a) return a;\n }\n return makeNeutralAnimation();\n },\n getCameraTransforms() {\n const c = opts.cameraTransforms || { zoom: 1 };\n return {\n zoom: typeof c.zoom === \"number\" ? c.zoom : 1,\n center: c.center || null,\n eye: c.eye || null,\n parallaxAmount: typeof c.parallaxAmount === \"number\" ? c.parallaxAmount : 0\n };\n },\n setCameraTransforms(t) {\n const c = opts.cameraTransforms;\n if (!c || !t || typeof t !== \"object\") return;\n if (typeof t.zoom === \"number\" && Number.isFinite(t.zoom) && t.zoom > 0) c.zoom = t.zoom;\n if (t.center !== void 0) c.center = t.center;\n if (t.eye !== void 0) c.eye = t.eye;\n if (typeof t.parallaxAmount === \"number\") c.parallaxAmount = t.parallaxAmount;\n },\n getInitialLayerConfig(arg) {\n if (typeof opts.getInitialLayerConfig === \"function\") return opts.getInitialLayerConfig(arg);\n const layer = resolveDestroyTarget(arg, opts);\n return layer || null;\n }\n };\n}\nfunction makeObjectLayerProxy(layer, opts) {\n const vec = (arr) => makeVec3(Array.isArray(arr) ? arr : [0, 0, 0]);\n const boneOverrides = opts && typeof opts.getBoneOverrides === \"function\" && layer ? opts.getBoneOverrides(layer) : null;\n const store = {\n origin: vec(layer ? layer.origin : [0, 0, 0]),\n scale: vec(layer ? layer.scale : [1, 1, 1]),\n // SceneScript 的 angles 是**角度**;图层数组是弧度(scene.json / layerModelMatrix)。\n // 分量赋值 `layer.angles.z = -5` 必须当场写回,不能只改本地 store。\n angles: makeScriptAngleVec(layer),\n size: vec(layer ? layer.size : [0, 0, 0]),\n color: vec(layer ? layer.color : [1, 1, 1])\n };\n const proxy = {\n get name() {\n return layer && layer.name || \"\";\n },\n get id() {\n return layer && layer.id || 0;\n },\n // [we-scene patch] 效果开关脚本(`effects[i].visible.script`)里的\n // `thisObject.visible` 指的是**那个效果**,不是整个图层。宿主通过\n // opts.targetEffect 指明重定向目标;不给则照旧写图层。\n // 写错对象的后果是整层被隐藏,而作者只想关掉一个效果。\n get visible() {\n const te = opts && opts.targetEffect;\n if (te) return !!te.visible;\n if (!layer) return false;\n return layer.visibleSelf !== void 0 ? !!layer.visibleSelf : !!layer.visible;\n },\n set visible(v) {\n const te = opts && opts.targetEffect;\n if (te) {\n te.visible = !!v;\n return;\n }\n if (!layer) return;\n layer.visibleSelf = !!v;\n if (typeof opts.recomputeVisibility === \"function\") {\n opts.recomputeVisibility();\n } else {\n layer.visible = !!v;\n }\n },\n get alpha() {\n return layer && typeof layer.alpha === \"number\" ? layer.alpha : 1;\n },\n set alpha(v) {\n if (layer) layer.alpha = Number(v) || 0;\n },\n get brightness() {\n return layer && typeof layer.brightness === \"number\" ? layer.brightness : 1;\n },\n set brightness(v) {\n if (layer) layer.brightness = Number(v) || 0;\n },\n get text() {\n return layer && layer.text !== void 0 ? String(layer.text) : \"\";\n },\n set text(v) {\n if (!layer) return;\n if (typeof v === \"boolean\") return;\n layer.text = v == null ? \"\" : String(v);\n },\n get pointsize() {\n return layer && layer.textPointsize || 24;\n },\n set pointsize(v) {\n if (layer) layer.textPointsize = Number(v) || 24;\n },\n // 文字脚本 `thisLayer.font = 'fonts/….otf'`:对象代理也要能写回,否则\n // getLayer('旋转文字1').font 的赋值进空气,21 档字体切不换。\n get font() {\n return layer && layer.textFont || \"\";\n },\n set font(v) {\n if (layer) layer.textFont = String(v || \"\");\n },\n // 音频条模板写 `bar.alignment = 'bottom'|'centre'|'top'`(2652493753)\n get alignment() {\n return layer && layer.alignment || \"center\";\n },\n set alignment(v) {\n if (!layer) return;\n const s = String(v || \"center\").toLowerCase();\n layer.alignment = s === \"centre\" ? \"center\" : s;\n },\n // 骨骼:有 puppet 且宿主给了覆写表就接真实 MDL,否则退回中性值\n // (见 makeBoneApi 的说明;中性 getBoneCount()=0 会让拖拽脚本的\n // cursorDown 循环一次都不跑,从而整段逻辑安全地不生效)\n ...layer && layer.puppet && boneOverrides ? makeBoneApi(layer, boneOverrides) : {\n getBoneCount: () => 0,\n getBoneTransform: () => {\n const d = {\n translation(v) {\n return v === void 0 ? new Vec3(0, 0, 0) : d;\n },\n rotation() {\n return d;\n },\n scale() {\n return d;\n }\n };\n return d;\n },\n setBoneTransform: () => {\n },\n applyBonePhysicsImpulse: () => {\n }\n },\n getParent: () => {\n if (!layer || layer.parentId == null) return null;\n const p = opts && typeof opts.getSceneLayerById === \"function\" ? opts.getSceneLayerById(layer.parentId) : null;\n if (!p || p.destroyed) return null;\n return makeObjectLayerProxy(p, opts);\n },\n getChildren: () => {\n const ids = layer && layer.childIds || [];\n if (!ids.length) return [];\n const lookup = opts && typeof opts.getSceneLayerById === \"function\" ? opts.getSceneLayerById : null;\n if (!lookup) return [];\n const out = [];\n for (const id of ids) {\n const c = lookup(id);\n if (c && !c.destroyed) out.push(makeObjectLayerProxy(c, opts));\n }\n return out;\n },\n // [we-scene patch] 关键帧动画:改为返回**真实控制器**。\n //\n // 此前一律返回 makeNeutralAnimation() —— 纯 no-op,`play()` 什么也不做。\n // 于是 2938612768 的封面淡入(mediaThumbnailChanged 里 `anim.stop(); anim.play()`)\n // 表现为「封面瞬切、没有过渡」。全库 126 处动画 / 25 张壁纸。\n //\n // 控制器由宿主在解析阶段建好挂到 layer.animations(名字 → 控制器)与\n // layer.animationList(声明顺序)。取不到时仍回退中性对象:语料不判空,\n // 拿 null 会 TypeError 熔断。\n getAnimation: (key) => {\n const map = layer && layer.animations;\n const list = layer && layer.animationList || [];\n if (key === void 0 || key === null || key === \"\") return list[0] || makeNeutralAnimation();\n if (map && map[key]) return map[key];\n if (typeof key === \"number\" && list[key]) return list[key];\n if (typeof key === \"string\" && /^\\d+$/.test(key) && list[Number(key)]) return list[Number(key)];\n return makeNeutralAnimation();\n },\n getAnimationLayer: (key) => {\n const map = layer && layer.animations;\n const list = layer && layer.animationList || [];\n if (map && map[key]) return map[key];\n if (typeof key === \"number\" && list[key]) return list[key];\n if (typeof key === \"string\" && /^\\d+$/.test(key) && list[Number(key)]) return list[Number(key)];\n return makeNeutralAnimation();\n },\n getAnimationLayerCount: () => (layer && layer.animationList || []).length,\n getTextureAnimation: () => makeTextureAnimation(layer),\n // [we-scene patch] ISoundLayer / IVideoTexture 播放控制。\n //\n // 此前 play/pause/stop 是空 stub、getVideoTexture 恒 null:\n // - 3292361861 `init` 里 `thisLayer.getVideoTexture().stop()` —— 拿 null\n // 立刻 TypeError,整段交互(含点耳朵播语音)三振熔断;\n // - 2887099508 点书本/耳朵/切 BGM 走 `getLayer('语言1').play()`,stub\n // 什么都不做;宿主还把 startsilent 的语音一律 au.play(),一加载就抢播。\n // 句柄挂在图层的 soundCtl / videoCtl 上,由宿主把 HTMLAudio/Video 接进来。\n // 没有媒体时仍返回可调用对象(语料不判空),写入落到空气。\n play: () => {\n layer && layer.soundCtl && layer.soundCtl.play && layer.soundCtl.play();\n layer && layer.videoCtl && layer.videoCtl.play && layer.videoCtl.play();\n },\n pause: () => {\n layer && layer.soundCtl && layer.soundCtl.pause && layer.soundCtl.pause();\n layer && layer.videoCtl && layer.videoCtl.pause && layer.videoCtl.pause();\n },\n stop: () => {\n layer && layer.soundCtl && layer.soundCtl.stop && layer.soundCtl.stop();\n layer && layer.videoCtl && layer.videoCtl.stop && layer.videoCtl.stop();\n },\n isPlaying: Object.assign(() => {\n const s = layer && layer.soundCtl && typeof layer.soundCtl.isPlaying === \"function\" && layer.soundCtl.isPlaying();\n const v = layer && layer.videoCtl && typeof layer.videoCtl.isPlaying === \"function\" && layer.videoCtl.isPlaying();\n return !!(s || v);\n }, {\n valueOf() {\n const s = layer && layer.soundCtl && typeof layer.soundCtl.isPlaying === \"function\" && layer.soundCtl.isPlaying();\n const v = layer && layer.videoCtl && typeof layer.videoCtl.isPlaying === \"function\" && layer.videoCtl.isPlaying();\n return !!(s || v);\n },\n toString() {\n const s = layer && layer.soundCtl && typeof layer.soundCtl.isPlaying === \"function\" && layer.soundCtl.isPlaying();\n const v = layer && layer.videoCtl && typeof layer.videoCtl.isPlaying === \"function\" && layer.videoCtl.isPlaying();\n return String(!!(s || v));\n }\n }),\n get volume() {\n if (layer && layer.soundCtl && typeof layer.soundCtl.getVolume === \"function\") return layer.soundCtl.getVolume();\n const n = layer && layer.soundprops && layer.soundprops.volume;\n return typeof n === \"number\" ? n : 1;\n },\n set volume(v) {\n const n = Number(v);\n if (!Number.isFinite(n) || !layer) return;\n const c = Math.max(0, Math.min(1, n));\n if (layer.soundprops) layer.soundprops.volume = c;\n if (layer.soundCtl && typeof layer.soundCtl.setVolume === \"function\") layer.soundCtl.setVolume(c);\n },\n getVideoTexture: () => makeVideoTextureHandle(layer),\n getTransformMatrix: () => {\n const o = layer && layer.origin || [0, 0, 0];\n const m = new Float32Array(16);\n m[0] = 1;\n m[5] = 1;\n m[10] = 1;\n m[15] = 1;\n m[12] = o[0] || 0;\n m[13] = o[1] || 0;\n m[14] = o[2] || 0;\n return { m };\n },\n // 见 makeEffectHandle:名字或索引取效果,取不到也返回句柄(脚本不判空)\n getEffect: (key) => {\n const list = layer && layer.effects || null;\n if (!list || list.length === 0) return makeEffectHandle(null);\n if (typeof key === \"number\" || typeof key === \"string\" && /^\\d+$/.test(key)) {\n return makeEffectHandle(list[Number(key)] || null);\n }\n const name = String(key);\n return makeEffectHandle(list.find((e) => e && e.name === name) || null);\n }\n };\n Object.defineProperty(proxy, \"angles\", {\n enumerable: true,\n get() {\n return store.angles;\n },\n set(v) {\n if (layer && Array.isArray(layer.angles)) {\n const r = scriptAnglesToRad(v);\n layer.angles[0] = r[0];\n layer.angles[1] = r[1];\n layer.angles[2] = r[2];\n }\n }\n });\n for (const key of [\"origin\", \"scale\", \"size\", \"color\"]) {\n Object.defineProperty(proxy, key, {\n enumerable: true,\n get() {\n if (layer && Array.isArray(layer[key])) {\n const a = layer[key];\n store[key].x = a[0] || 0;\n store[key].y = a[1] || 0;\n store[key].z = a[2] || 0;\n }\n return store[key];\n },\n set(v) {\n const a = normVec(v);\n store[key].x = a[0];\n store[key].y = a[1];\n store[key].z = a[2];\n if (layer && Array.isArray(layer[key]) && key !== \"size\") {\n layer[key][0] = a[0];\n layer[key][1] = a[1];\n layer[key][2] = a[2];\n }\n }\n });\n }\n return proxy;\n}\nfunction evalObjectScript(script, scriptprops, opts = {}) {\n if (typeof script !== \"string\" || script.length === 0) return null;\n const body = scriptToFunctionBody(script);\n const spValues = {};\n if (scriptprops && typeof scriptprops === \"object\") {\n for (const [k, v] of Object.entries(scriptprops)) {\n if (v !== null && typeof v === \"object\" && typeof v.user === \"string\") {\n const live = opts.userProperties ? opts.userProperties[v.user] : void 0;\n spValues[k] = live !== void 0 ? live : propValue(v);\n } else {\n spValues[k] = propValue(v);\n }\n }\n }\n const builder = new Proxy(() => builder, {\n apply() {\n return builder;\n },\n get(_t, name) {\n if (name === \"finish\") return () => spValues;\n if (typeof name === \"string\" && ADD_METHOD_RE.test(name)) {\n return (def) => {\n if (def && typeof def === \"object\" && typeof def.name === \"string\" && !(def.name in spValues)) {\n spValues[def.name] = propValue(def.value);\n }\n return builder;\n };\n }\n return void 0;\n }\n });\n const engine = {\n registerAsset: () => {\n },\n frametime: 1 / 60,\n runtime: 0,\n canvasSize: opts.canvasSize || { width: 1920, height: 1080 },\n screenResolution: opts.screenResolution || { x: 1920, y: 1080 },\n timeOfDay: typeof opts.timeOfDay === \"number\" ? opts.timeOfDay : 0,\n userProperties: opts.userProperties || {},\n AUDIO_RESOLUTION_16: 16,\n AUDIO_RESOLUTION_32: 32,\n AUDIO_RESOLUTION_64: 64,\n setTimeout: opts.setTimeout || defaultEngineTimer,\n clearTimeout: opts.clearTimeout || (() => {\n }),\n setInterval: opts.setInterval || defaultEngineTimer,\n clearInterval: opts.clearInterval || (() => {\n }),\n openUserShortcut: opts.openUserShortcut || (() => {\n }),\n isRunningInEditor: !!opts.isRunningInEditor,\n isScreensaver: !!opts.isScreensaver\n };\n applyEngineHost(engine, opts);\n const audioViews = opts.audioViews;\n engine.registerAudioBuffers = (n) => {\n const k = Math.max(1, Math.min(64, Math.floor(Number(n) || 0)));\n let v = audioViews ? audioViews.get(k) : void 0;\n if (!v) {\n v = {\n left: new Float32Array(k),\n right: new Float32Array(k),\n average: new Float32Array(k)\n };\n if (audioViews) audioViews.set(k, v);\n }\n return v;\n };\n const shared = opts.shared || {};\n const sandboxGlobal = { console: makeSandboxConsole() };\n const input = makeInput(opts.inputView);\n const layerRef = opts.layer || null;\n const workshopId = opts.workshopId != null ? opts.workshopId : extractWorkshopId(script);\n const thisLayer = makeObjectLayerProxy(layerRef, opts);\n const thisScene = makeThisScene({\n ...opts,\n workshopId,\n getWorkshopId: () => workshopId\n });\n let fns;\n try {\n const factory = new Function(\n \"scriptProperties\",\n \"engine\",\n \"WEMath\",\n \"WEColor\",\n \"WEVector\",\n \"createScriptProperties\",\n \"shared\",\n \"console\",\n \"process\",\n \"globalThis\",\n \"self\",\n \"window\",\n \"document\",\n \"require\",\n \"module\",\n \"exports\",\n \"fetch\",\n \"XMLHttpRequest\",\n \"Worker\",\n \"importScripts\",\n \"location\",\n \"navigator\",\n \"alert\",\n \"confirm\",\n \"prompt\",\n \"setTimeout\",\n \"setInterval\",\n \"clearTimeout\",\n \"clearInterval\",\n \"requestAnimationFrame\",\n \"cancelAnimationFrame\",\n \"performance\",\n \"Function\",\n \"Vec3\",\n \"Vec2\",\n \"input\",\n \"thisLayer\",\n \"thisScene\",\n \"thisObject\",\n \"localStorage\",\n \"MediaPlaybackEvent\",\n '\"use strict\";\\n' + body + '\\n;return {update: typeof update === \"function\" ? update : null,init: typeof init === \"function\" ? init : null,applyUserProperties: typeof applyUserProperties === \"function\" ? applyUserProperties : null,cursorClick: typeof cursorClick === \"function\" ? cursorClick : null,cursorEnter: typeof cursorEnter === \"function\" ? cursorEnter : null,cursorLeave: typeof cursorLeave === \"function\" ? cursorLeave : null,cursorDown: typeof cursorDown === \"function\" ? cursorDown : null,cursorUp: typeof cursorUp === \"function\" ? cursorUp : null,cursorMove: typeof cursorMove === \"function\" ? cursorMove : null,' + // [we-scene patch] 媒体回调此前**一个都没收集**(evalTextScript 至少收了\n // mediaPropertiesChanged,这里是零)。全库 308 处声明里 264 处挂在对象字段与\n // 效果常量上,全部落在这个函数 —— 不收集就等于媒体集成整体不存在。\n MEDIA_CALLBACKS.map((n) => `${n}: typeof ${n} === \"function\" ? ${n} : null,`).join(\"\") + \"dummy_: 0};\"\n );\n fns = factory(\n spValues,\n wrapEngine(engine),\n WEMATH,\n WECOLOR,\n WEVECTOR,\n builder,\n shared,\n sandboxGlobal.console,\n void 0,\n sandboxGlobal,\n sandboxGlobal,\n sandboxGlobal,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n void 0,\n Vec3,\n Vec2,\n input,\n thisLayer,\n thisScene,\n thisLayer,\n makeSandboxStorage(),\n MEDIA_PLAYBACK_EVENT\n );\n } catch (e) {\n if (opts.onError) opts.onError(e, \"parse\");\n return null;\n }\n const hasCursorHook = !!(fns && (fns.cursorClick || fns.cursorEnter || fns.cursorLeave || fns.cursorDown || fns.cursorUp || fns.cursorMove));\n const hasMediaHook = !!(fns && MEDIA_CALLBACKS.some((n) => fns[n]));\n const hasApplyHook = !!(fns && typeof fns.applyUserProperties === \"function\");\n if (!fns || !fns.update && !hasCursorHook && !hasMediaHook && !hasApplyHook) return null;\n const sandbox = {\n engine,\n scriptProperties: spValues,\n // [we-scene patch] 供宿主区分「字段求值脚本」与「纯指针交互脚本」:\n // 后者没有 update(3299228616 的拖拽猫、2998757800 的骨骼拖拽都只导出\n // cursorMove / cursorDown),进逐帧字段求值队列只会每帧白跑。\n hasUpdate: !!fns.update,\n hasCursorHook,\n hasApplyHook,\n errCount: 0,\n disabled: false,\n init(value) {\n if (!fns.init) return;\n try {\n fns.init(asScriptVec3(value));\n } catch (e) {\n sandbox.errCount++;\n if (opts.onError) opts.onError(e, \"init\");\n }\n },\n applyUserProperties(props) {\n if (!fns.applyUserProperties) return;\n try {\n fns.applyUserProperties(props || {});\n } catch (e) {\n sandbox.errCount++;\n if (opts.onError) opts.onError(e, \"applyUserProperties\");\n }\n },\n /** 求值:value 为字段当前值(可变对象/数字),返回脚本的原始返回值(可能 undefined) */\n callUpdate(value) {\n if (sandbox.disabled) return void 0;\n if (!fns.update) return void 0;\n let ret;\n try {\n ret = fns.update(asScriptVec3(value));\n } catch (e) {\n sandbox.errCount++;\n if (opts.onError) opts.onError(e, \"update\");\n if (sandbox.errCount >= 3) sandbox.disabled = true;\n return void 0;\n }\n return ret;\n },\n hasCursorHook,\n /**\n * [we-scene patch] 派发指针回调。name ∈ cursorClick / cursorEnter /\n * cursorLeave / cursorDown / cursorUp / cursorMove。\n * event 只需 { worldPosition }(全库 51 处只读这一个字段)。\n * 与 callUpdate 共用三振熔断:坏脚本不会每帧刷错误日志。\n */\n callCursor(name, event) {\n if (sandbox.disabled) return void 0;\n const fn = fns[name];\n if (typeof fn !== \"function\") return void 0;\n try {\n return fn(event);\n } catch (e) {\n sandbox.errCount++;\n if (opts.onError) opts.onError(e, name);\n if (sandbox.errCount >= 3) sandbox.disabled = true;\n return void 0;\n }\n },\n hasMediaHook,\n /**\n * [we-scene patch] 派发媒体回调。name ∈ MEDIA_CALLBACKS。\n * 与 callCursor 同构(三振熔断 + onError 上报)。\n *\n * 宿主**只在快照变化时**调这里,不要每帧广播 —— 语料里\n * `mediaThumbnailChanged` 常写 `anim.stop(); anim.play();`,\n * 每帧调用会让动画永远卡在第 0 帧重放。\n */\n callMedia(name, event) {\n if (sandbox.disabled) return void 0;\n const fn = fns[name];\n if (typeof fn !== \"function\") return void 0;\n try {\n return fn(event);\n } catch (e) {\n sandbox.errCount++;\n if (opts.onError) opts.onError(e, name);\n if (sandbox.errCount >= 3) sandbox.disabled = true;\n return void 0;\n }\n }\n };\n return sandbox;\n}\nfunction makeVec3(v) {\n const a = Array.isArray(v) ? v : [0, 0, 0];\n const base = { x: a[0] || 0, y: a[1] || 0, z: a[2] || 0 };\n const api = {\n get x() {\n return base.x;\n },\n set x(n) {\n base.x = Number(n) || 0;\n },\n get y() {\n return base.y;\n },\n set y(n) {\n base.y = Number(n) || 0;\n },\n get z() {\n return base.z;\n },\n set z(n) {\n base.z = Number(n) || 0;\n },\n add(o) {\n const b = normVec(o);\n base.x += b[0];\n base.y += b[1];\n base.z += b[2];\n return api;\n },\n subtract(o) {\n const b = normVec(o);\n base.x -= b[0];\n base.y -= b[1];\n base.z -= b[2];\n return api;\n },\n multiply(k) {\n if (k && typeof k === \"object\") {\n const b = normVec(k);\n base.x *= b[0];\n base.y *= b[1];\n base.z *= b[2];\n } else {\n const n = Number(k) || 0;\n base.x *= n;\n base.y *= n;\n base.z *= n;\n }\n return api;\n },\n // 3789604238 Simple Visualizer:`baseOrigin = thisLayer.origin` 再 `baseOrigin.copy()`。\n // 旧 api 没有 copy,update 被 try/catch 吃掉 → 64 根条 origin/scale 永不更新。\n copy() {\n return new Vec3(base.x, base.y, base.z);\n },\n length() {\n return Math.sqrt(base.x * base.x + base.y * base.y + base.z * base.z);\n },\n toArray() {\n return [base.x, base.y, base.z];\n }\n };\n return api;\n}\nfunction normVec(o) {\n if (Array.isArray(o)) return [o[0] || 0, o[1] || 0, o[2] || 0];\n if (o && typeof o === \"object\") return [o.x || 0, o.y || 0, o.z || 0];\n const n = Number(o) || 0;\n return [n, n, n];\n}\nconst ANGLE_RAD = Math.PI / 180;\nconst ANGLE_DEG = 180 / Math.PI;\nfunction radToScriptAngles(arr) {\n const a = Array.isArray(arr) ? arr : [0, 0, 0];\n return { x: (a[0] || 0) * ANGLE_DEG, y: (a[1] || 0) * ANGLE_DEG, z: (a[2] || 0) * ANGLE_DEG };\n}\nfunction scriptAnglesToRad(v) {\n const a = normVec(v);\n return [a[0] * ANGLE_RAD, a[1] * ANGLE_RAD, a[2] * ANGLE_RAD];\n}\nfunction makeScriptAngleVec(layer) {\n const idx = { x: 0, y: 1, z: 2 };\n const api = {\n add(o) {\n const a = normVec(o);\n api.x += a[0];\n api.y += a[1];\n api.z += a[2];\n return api;\n },\n subtract(o) {\n const a = normVec(o);\n api.x -= a[0];\n api.y -= a[1];\n api.z -= a[2];\n return api;\n },\n multiply(k) {\n api.x *= k;\n api.y *= k;\n api.z *= k;\n return api;\n },\n toArray() {\n return [api.x, api.y, api.z];\n }\n };\n for (const k of [\"x\", \"y\", \"z\"]) {\n Object.defineProperty(api, k, {\n enumerable: true,\n get() {\n if (!layer || !Array.isArray(layer.angles)) return 0;\n return (layer.angles[idx[k]] || 0) * ANGLE_DEG;\n },\n set(v) {\n if (!layer || !Array.isArray(layer.angles)) return;\n layer.angles[idx[k]] = (Number(v) || 0) * ANGLE_RAD;\n }\n });\n }\n return api;\n}\nfunction textCanvasMargin(em, _padding) {\n return Math.min(256, Math.ceil(Math.max(1, Number(em) || 1) * 2 + 8));\n}\nfunction textLayerHasTintMask(layer) {\n for (const e of layer && layer.effects ? layer.effects : []) {\n if (e && e.visible === false) continue;\n const file = String(e && (e.file || e.name) || \"\");\n if (file.includes(\"tint\")) return true;\n for (const p of e && e.passes || []) {\n for (const t of p && p.textures || []) {\n if (t && String(t).toLowerCase().includes(\"mask\")) return true;\n }\n }\n }\n return false;\n}\nconst textMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n createInputView,\n drawTextLayer,\n effectiveTextPadding,\n evalObjectScript,\n evalTextScript,\n layoutText,\n makeCursorEventVec,\n radToScriptAngles,\n resolveWorkshopAssetPath,\n rewriteComboStringEq,\n scriptAnglesToRad,\n textCanvasMargin,\n textLayerHasTintMask\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction createEngineTimers(host = {}, opts = {}) {\n const setT = typeof host.setTimeout === \"function\" ? host.setTimeout : null;\n const clearT = typeof host.clearTimeout === \"function\" ? host.clearTimeout : null;\n const setI = typeof host.setInterval === \"function\" ? host.setInterval : null;\n const clearI = typeof host.clearInterval === \"function\" ? host.clearInterval : null;\n const onError = typeof opts.onError === \"function\" ? opts.onError : null;\n const pending = /* @__PURE__ */ new Set();\n const normDelay = (ms) => {\n const n = Number(ms);\n return Number.isFinite(n) && n > 0 ? n : 0;\n };\n const guarded = (fn) => () => {\n try {\n fn();\n } catch (e) {\n if (onError) onError(e, \"timer\");\n }\n };\n const makeCancel = (state, clearFn) => {\n const cancel = () => {\n if (state.fired) return;\n state.fired = true;\n pending.delete(cancel);\n if (clearFn && state.handle != null) clearFn(state.handle);\n };\n cancel.handle = null;\n cancel.valueOf = () => typeof state.handle === \"number\" ? state.handle : 0;\n return cancel;\n };\n function setTimeout(fn, ms) {\n if (typeof fn !== \"function\") {\n const dead = makeCancel({ fired: true, handle: null }, null);\n return dead;\n }\n const state = { fired: false, handle: null };\n const cancel = makeCancel(state, clearT);\n pending.add(cancel);\n state.handle = setT ? setT(\n guarded(() => {\n state.fired = true;\n pending.delete(cancel);\n fn();\n }),\n normDelay(ms)\n ) : null;\n cancel.handle = state.handle;\n return cancel;\n }\n function setInterval(fn, ms) {\n if (typeof fn !== \"function\") return makeCancel({ fired: true, handle: null }, null);\n const state = { fired: false, handle: null };\n const cancel = makeCancel(state, clearI);\n pending.add(cancel);\n state.handle = setI ? setI(guarded(fn), normDelay(ms)) : null;\n cancel.handle = state.handle;\n return cancel;\n }\n function clearTimeout(h) {\n if (typeof h === \"function\") {\n h();\n return;\n }\n if (clearT && h != null) clearT(h);\n }\n function clearInterval(h) {\n if (typeof h === \"function\") {\n h();\n return;\n }\n if (clearI && h != null) clearI(h);\n }\n function dispose() {\n for (const cancel of [...pending]) cancel();\n pending.clear();\n }\n return {\n setTimeout,\n setInterval,\n clearTimeout,\n clearInterval,\n dispose,\n /** 测试与诊断用:尚未触发且未取消的定时器数 */\n pendingCount: () => pending.size\n };\n}\nconst timersMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n createEngineTimers\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction mulberry32(seed) {\n let a = seed >>> 0;\n return function() {\n a |= 0;\n a = a + 1831565813 | 0;\n let t = Math.imul(a ^ a >>> 15, 1 | a);\n t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n };\n}\nfunction vnoise(x, seedIdx) {\n const i = Math.floor(x);\n const f = x - i;\n const h = (n) => {\n const s = Math.sin((n * 127.1 + seedIdx * 311.7) * 43758.5453) * 43758.5453;\n return (s - Math.floor(s)) * 2 - 1;\n };\n const u = f * f * (3 - 2 * f);\n return h(i) * (1 - u) + h(i + 1) * u;\n}\nconst SECTION_LEN = 32;\nconst BPM = 112;\nconst BEAT = 60 / BPM;\nconst GAIN = 3.2;\nfunction makePatterns(rand2) {\n const kick = new Float32Array(16);\n const snare = new Float32Array(16);\n const hat = new Float32Array(16);\n for (let i = 0; i < 16; i++) {\n kick[i] = i % 4 === 0 ? 1 : i % 4 === 2 ? 0.38 + rand2() * 0.15 : rand2() < 0.08 ? 0.5 : 0;\n snare[i] = i % 8 === 4 ? 1 : rand2() < 0.06 ? 0.6 : 0;\n hat[i] = i % 2 === 1 ? 0.5 + rand2() * 0.4 : i % 4 === 0 ? 0.25 : rand2() < 0.3 ? 0.3 : 0;\n }\n return { kick, snare, hat };\n}\nfunction createSimulatedAudio(seed = 20260830) {\n const rand2 = mulberry32(seed);\n const patterns = makePatterns(rand2);\n const phases = new Float32Array(64);\n for (let i = 0; i < 64; i++) phases[i] = rand2() * 64;\n const BANDS = 64;\n const rawL = new Float32Array(BANDS);\n const rawR = new Float32Array(BANDS);\n const left64 = new Float32Array(BANDS);\n const right64 = new Float32Array(BANDS);\n const left32 = new Float32Array(32);\n const right32 = new Float32Array(32);\n const left16 = new Float32Array(16);\n const right16 = new Float32Array(16);\n const snapshot = {\n left64,\n right64,\n left32,\n right32,\n left16,\n right16,\n /** vumeter:整体响度 0..1(粒子 audioprocessing / 文字脚本 average 用) */\n level: 0,\n /** 渲染器诊断:当前是否处于「静音段」 */\n silent: false\n };\n function downsample(dst, src) {\n const g = src.length / dst.length;\n for (let i = 0; i < dst.length; i++) {\n let s = 0;\n const i0 = Math.floor(i * g);\n const i1 = Math.floor((i + 1) * g);\n for (let j = i0; j < Math.max(i0 + 1, i1); j++) s += src[j];\n dst[i] = s / Math.max(1, i1 - i0);\n }\n }\n function update(t) {\n const beat = t / BEAT;\n const step = beat * 4;\n const i16 = Math.floor(step) % 16;\n const frac = step - Math.floor(step);\n const hitEnv = Math.exp(-frac * BEAT * 14);\n const section = t % SECTION_LEN;\n const silent = section >= 27 && section < 29;\n const buildup = section >= 29 ? (section - 29) / 3 : 0;\n const breakdown = section >= 24 && section < 27 ? 1 - (section - 24) / 3 : 0;\n const drumGate = silent ? 0 : buildup > 0 ? buildup * buildup : breakdown > 0 ? 0 : 1;\n const midGate = silent ? 0 : breakdown > 0 ? 0.35 : 1;\n const kickV = patterns.kick[i16] * hitEnv * drumGate;\n const snareV = (patterns.snare[i16] * hitEnv + patterns.hat[i16] * hitEnv * 0.7) * drumGate;\n const hatV = patterns.hat[i16] * hitEnv * drumGate;\n const riser = buildup > 0 ? Math.pow(buildup, 3) * (0.4 + 0.6 * Math.abs(vnoise(step * 2, 7))) : 0;\n let levelSum = 0;\n for (let i = 0; i < BANDS; i++) {\n const fq = i / BANDS;\n const tilt = Math.pow(1 - fq * 0.85, 1.6);\n let v = midGate * (0.5 + 0.3 * vnoise(beat * 0.5 + phases[i] * 0.05, i % 8));\n v *= 0.35 + 0.65 * fq;\n if (fq < 0.2) v += kickV * (1 - fq / 0.2);\n if (fq >= 0.12 && fq < 0.62) {\n const w = 1 - Math.abs(fq - 0.34) / 0.28;\n if (w > 0) v += snareV * 0.55 * w;\n }\n if (fq >= 0.45) v += hatV * 0.5 * ((fq - 0.45) / 0.55);\n v += riser * 0.5;\n v *= tilt;\n v = Math.min(1, v * GAIN);\n const width = 0.06 + fq * 0.2;\n const pan = vnoise(beat * 0.13 + i * 0.35, 11) * width;\n let l = Math.min(1, Math.max(0, v * (1 - pan)));\n let r = Math.min(1, Math.max(0, v * (1 + pan)));\n const floorV = silent ? 0.012 : 0;\n rawL[i] = Math.max(floorV, l);\n rawR[i] = Math.max(floorV, r);\n if (i < 48) levelSum += (rawL[i] + rawR[i]) * 0.5;\n }\n left64.set(rawL);\n right64.set(rawR);\n downsample(left32, rawL);\n downsample(right32, rawR);\n downsample(left16, rawL);\n downsample(right16, rawR);\n snapshot.level = Math.min(1, levelSum / (48 * 1.2));\n snapshot.silent = silent;\n return snapshot;\n }\n return {\n update,\n snapshot,\n /** 频段基数 */\n bands: BANDS\n };\n}\nfunction fillAudioBuffers(views, snapshot) {\n for (const v of views.values()) {\n fillOne(v.left, snapshot.left64);\n fillOne(v.right, snapshot.right64);\n for (let i = 0; i < v.average.length; i++) {\n v.average[i] = (v.left[i] + v.right[i]) * 0.5;\n }\n }\n}\nfunction fillOne(dst, src64) {\n const g = src64.length / dst.length;\n for (let i = 0; i < dst.length; i++) {\n let s = 0;\n const i0 = Math.floor(i * g);\n const i1 = Math.max(i0 + 1, Math.floor((i + 1) * g));\n for (let j = i0; j < i1; j++) s += src64[j];\n dst[i] = s / (i1 - i0);\n }\n}\nconst MEDIA_PLAYBACK = { STOPPED: 0, PLAYING: 1, PAUSED: 2 };\nclass MediaVec3 {\n constructor(x, y, z) {\n this.x = Number(x) || 0;\n this.y = Number(y) || 0;\n this.z = Number(z) || 0;\n }\n add(o) {\n return new MediaVec3(this.x + o.x, this.y + o.y, this.z + o.z);\n }\n subtract(o) {\n return new MediaVec3(this.x - o.x, this.y - o.y, this.z - o.z);\n }\n multiply(k) {\n if (k !== null && typeof k === \"object\") return new MediaVec3(this.x * k.x, this.y * k.y, this.z * k.z);\n const n = Number(k) || 0;\n return new MediaVec3(this.x * n, this.y * n, this.z * n);\n }\n divide(k) {\n const n = Number(k) || 1;\n return new MediaVec3(this.x / n, this.y / n, this.z / n);\n }\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n copy() {\n return new MediaVec3(this.x, this.y, this.z);\n }\n toArray() {\n return [this.x, this.y, this.z];\n }\n}\nfunction mediaVec3(x, y, z) {\n return new MediaVec3(x, y, z);\n}\nconst PLAYLIST = [\n {\n title: \"夜航星\",\n artist: \"相位迁移\",\n album: \"深空回声\",\n albumArtist: \"相位迁移\",\n duration: 212,\n colors: { primary: [0.24, 0.42, 0.86], secondary: [0.12, 0.18, 0.42], tertiary: [0.62, 0.74, 0.98], text: [0.95, 0.97, 1] },\n lyrics: [\n [0, \"在无光的航道上\"],\n [12, \"我们只带走彼此的名字\"],\n [26, \"引擎低鸣像一句旧诺言\"],\n [41, \"把黑暗折成两半\"],\n [58, \"夜航星啊\"],\n [72, \"别在中途熄灭\"],\n [95, \"(间奏)\"],\n [126, \"如果坐标终将失效\"],\n [140, \"就让轨迹自己说话\"],\n [158, \"我们不返航\"],\n [176, \"也不遗憾\"],\n [198, \"……\"]\n ]\n },\n {\n title: \"Amber Lantern\",\n artist: \"Hollow Coast\",\n album: \"Tidewater\",\n albumArtist: \"Hollow Coast\",\n duration: 187,\n colors: { primary: [0.93, 0.62, 0.24], secondary: [0.44, 0.24, 0.1], tertiary: [0.99, 0.82, 0.56], text: [1, 0.98, 0.93] },\n lyrics: [\n [0, \"Salt on the window frame\"],\n [14, \"a lantern swinging slow\"],\n [30, \"you said the tide forgets\"],\n [46, \"but the harbour never does\"],\n [63, \"Amber lantern, burn a little longer\"],\n [88, \"(instrumental)\"],\n [118, \"Every rope remembers the knot\"],\n [134, \"every shore remembers the leaving\"],\n [152, \"burn a little longer\"],\n [170, \"for me\"]\n ]\n },\n {\n title: \"苔痕\",\n artist: \"林间电台\",\n album: \"半山雨\",\n albumArtist: \"林间电台\",\n duration: 241,\n colors: { primary: [0.3, 0.68, 0.44], secondary: [0.1, 0.28, 0.2], tertiary: [0.72, 0.92, 0.78], text: [0.96, 1, 0.97] },\n lyrics: [\n [0, \"雨停在第三级台阶\"],\n [16, \"苔痕爬满了旧门牌\"],\n [33, \"你说慢一点也没关系\"],\n [52, \"山不会走\"],\n [70, \"而我们有的是时间\"],\n [92, \"(间奏)\"],\n [130, \"把伞收起来吧\"],\n [148, \"让潮气记住这一刻\"],\n [172, \"慢一点\"],\n [200, \"真的没关系\"],\n [226, \"……\"]\n ]\n },\n {\n title: \"Neon Ashes\",\n artist: \"VELVET//NULL\",\n album: \"Afterimage\",\n albumArtist: \"VELVET//NULL\",\n duration: 168,\n colors: { primary: [0.86, 0.22, 0.58], secondary: [0.3, 0.06, 0.22], tertiary: [0.99, 0.64, 0.86], text: [1, 0.94, 0.98] },\n lyrics: [\n [0, \"city bleeds into the lens\"],\n [11, \"we were only afterimage\"],\n [24, \"neon ashes on your coat\"],\n [38, \"nothing here stays lit\"],\n [55, \"burn out with me\"],\n [76, \"(drop)\"],\n [104, \"nothing here stays lit\"],\n [122, \"burn out with me\"],\n [146, \"…\"]\n ]\n }\n];\nconst GAP = 3;\nfunction createSimulatedMedia(seed = 20260901) {\n const tracks = PLAYLIST;\n const cycle = tracks.reduce((s, t) => s + t.duration + GAP, 0);\n const snapshot = {\n hasMedia: false,\n state: MEDIA_PLAYBACK.STOPPED,\n title: \"\",\n artist: \"\",\n album: \"\",\n albumArtist: \"\",\n position: 0,\n duration: 0,\n hasThumbnail: false,\n // 颜色恒为 Vec3 实例(见文件头的类型约定)\n primaryColor: new MediaVec3(0, 0, 0),\n secondaryColor: new MediaVec3(0, 0, 0),\n tertiaryColor: new MediaVec3(0, 0, 0),\n textColor: new MediaVec3(1, 1, 1),\n highContrastColor: new MediaVec3(1, 1, 1),\n trackIndex: -1,\n // 自定义扩展:歌词\n lyrics: [],\n lyricLine: \"\",\n lyricIndex: -1\n };\n let seekOffset = 0;\n let held = false;\n let holdT = 0;\n let lastWall = 0;\n function trackStart(i) {\n let t = 0;\n const n = (i % tracks.length + tracks.length) % tracks.length;\n for (let k = 0; k < n; k++) t += tracks[k].duration + GAP;\n return t;\n }\n function applyAt(time) {\n let x = cycle > 0 ? time % cycle : 0;\n if (x < 0) x += cycle;\n let idx = -1;\n let pos = 0;\n let inGap = false;\n for (let i = 0; i < tracks.length; i++) {\n const d = tracks[i].duration;\n if (x < d) {\n idx = i;\n pos = x;\n break;\n }\n x -= d;\n if (x < GAP) {\n idx = i;\n pos = d;\n inGap = true;\n break;\n }\n x -= GAP;\n }\n if (idx < 0) {\n idx = tracks.length - 1;\n pos = tracks[idx].duration;\n inGap = true;\n }\n const tr = tracks[idx];\n snapshot.hasMedia = true;\n snapshot.trackIndex = idx;\n snapshot.title = tr.title;\n snapshot.artist = tr.artist;\n snapshot.album = tr.album;\n snapshot.albumArtist = tr.albumArtist;\n snapshot.duration = tr.duration;\n snapshot.position = pos;\n const frac = tr.duration > 0 ? pos / tr.duration : 0;\n if (held) snapshot.state = MEDIA_PLAYBACK.PAUSED;\n else if (inGap) snapshot.state = MEDIA_PLAYBACK.STOPPED;\n else if (frac > 0.7 && frac < 0.76) snapshot.state = MEDIA_PLAYBACK.PAUSED;\n else snapshot.state = MEDIA_PLAYBACK.PLAYING;\n snapshot.hasThumbnail = !inGap;\n const c = tr.colors;\n snapshot.primaryColor = new MediaVec3(c.primary[0], c.primary[1], c.primary[2]);\n snapshot.secondaryColor = new MediaVec3(c.secondary[0], c.secondary[1], c.secondary[2]);\n snapshot.tertiaryColor = new MediaVec3(c.tertiary[0], c.tertiary[1], c.tertiary[2]);\n snapshot.textColor = new MediaVec3(c.text[0], c.text[1], c.text[2]);\n const lum = 0.2126 * c.primary[0] + 0.7152 * c.primary[1] + 0.0722 * c.primary[2];\n snapshot.highContrastColor = lum > 0.5 ? new MediaVec3(0, 0, 0) : new MediaVec3(1, 1, 1);\n snapshot.lyrics = tr.lyrics;\n let li = -1;\n for (let i = 0; i < tr.lyrics.length; i++) if (pos >= tr.lyrics[i][0]) li = i;\n snapshot.lyricIndex = li;\n snapshot.lyricLine = li >= 0 ? tr.lyrics[li][1] : \"\";\n return snapshot;\n }\n function update(t) {\n lastWall = Number(t) || 0;\n const time = held ? holdT : lastWall + seekOffset;\n return applyAt(time);\n }\n function skipToTrack(i) {\n held = false;\n const start = trackStart(i);\n seekOffset = start - lastWall;\n return applyAt(start);\n }\n function skipNext() {\n const i = snapshot.trackIndex < 0 ? 0 : snapshot.trackIndex + 1;\n return skipToTrack(i);\n }\n function skipPrevious() {\n const i = snapshot.trackIndex < 0 ? tracks.length - 1 : snapshot.trackIndex - 1;\n return skipToTrack(i);\n }\n function pause() {\n if (held) return snapshot;\n holdT = lastWall + seekOffset;\n held = true;\n snapshot.state = MEDIA_PLAYBACK.PAUSED;\n return snapshot;\n }\n function play() {\n if (!held) return snapshot;\n held = false;\n seekOffset = holdT - lastWall;\n return applyAt(holdT);\n }\n function playPause() {\n return held ? play() : pause();\n }\n return {\n update,\n snapshot,\n tracks,\n cycle,\n MEDIA_PLAYBACK,\n skipNext,\n skipPrevious,\n play,\n pause,\n playPause\n };\n}\nfunction renderThumbnail(track, size = 512) {\n const n = Math.max(8, size | 0);\n const rgba = new Uint8Array(n * n * 4);\n const c = track && track.colors ? track.colors : { primary: [0.5, 0.5, 0.5], secondary: [0.1, 0.1, 0.1], tertiary: [0.8, 0.8, 0.8] };\n const [pr, pg, pb] = c.primary;\n const [sr, sg, sb] = c.secondary;\n const [tr_, tg, tb] = c.tertiary;\n for (let y = 0; y < n; y++) {\n for (let x = 0; x < n; x++) {\n const u = x / (n - 1);\n const v = y / (n - 1);\n const dx = u - 0.5;\n const dy = v - 0.5;\n const r = Math.sqrt(dx * dx + dy * dy) * 2;\n const ring2 = 0.5 + 0.5 * Math.sin(r * 18 - 1.2);\n const band = 0.5 + 0.5 * Math.sin((u + v) * 6);\n const k = Math.min(1, Math.max(0, r));\n let cr = pr * (1 - k) + sr * k;\n let cg = pg * (1 - k) + sg * k;\n let cb = pb * (1 - k) + sb * k;\n cr = cr * (0.72 + 0.28 * ring2) + tr_ * 0.18 * band;\n cg = cg * (0.72 + 0.28 * ring2) + tg * 0.18 * band;\n cb = cb * (0.72 + 0.28 * ring2) + tb * 0.18 * band;\n const vig = 1 - 0.35 * Math.min(1, r * r);\n const i = (y * n + x) * 4;\n rgba[i] = Math.max(0, Math.min(255, Math.round(cr * vig * 255)));\n rgba[i + 1] = Math.max(0, Math.min(255, Math.round(cg * vig * 255)));\n rgba[i + 2] = Math.max(0, Math.min(255, Math.round(cb * vig * 255)));\n rgba[i + 3] = 255;\n }\n }\n return { width: n, height: n, rgba };\n}\nfunction diffMediaEvents(prev, snap) {\n const out = [];\n if (!snap) return out;\n const first = !prev;\n if (first || prev.hasMedia !== snap.hasMedia) {\n out.push({ name: \"mediaStatusChanged\", event: { enabled: snap.hasMedia } });\n }\n if (first || prev.title !== snap.title || prev.artist !== snap.artist || prev.album !== snap.album || prev.albumArtist !== snap.albumArtist) {\n out.push({\n name: \"mediaPropertiesChanged\",\n event: {\n title: snap.title,\n artist: snap.artist,\n album: snap.album,\n albumArtist: snap.albumArtist,\n albumTitle: snap.album,\n subTitle: \"\",\n trackType: \"music\"\n }\n });\n }\n if (first || prev.hasThumbnail !== snap.hasThumbnail || prev.trackIndex !== snap.trackIndex) {\n out.push({\n name: \"mediaThumbnailChanged\",\n event: {\n hasThumbnail: snap.hasThumbnail,\n primaryColor: snap.primaryColor,\n secondaryColor: snap.secondaryColor,\n tertiaryColor: snap.tertiaryColor,\n textColor: snap.textColor,\n highContrastColor: snap.highContrastColor\n }\n });\n }\n if (first || prev.state !== snap.state) {\n out.push({ name: \"mediaPlaybackChanged\", event: { state: snap.state } });\n }\n if (first || Math.floor(prev.position) !== Math.floor(snap.position) || prev.duration !== snap.duration) {\n out.push({ name: \"mediaTimelineChanged\", event: { position: snap.position, duration: snap.duration } });\n }\n if (first || prev.lyricIndex !== snap.lyricIndex || prev.trackIndex !== snap.trackIndex) {\n out.push({\n name: \"mediaLyricsChanged\",\n event: { line: snap.lyricLine, index: snap.lyricIndex, lines: snap.lyrics }\n });\n }\n return out;\n}\nfunction cloneMediaSnapshot(s) {\n if (!s) return null;\n return {\n hasMedia: s.hasMedia,\n state: s.state,\n title: s.title,\n artist: s.artist,\n album: s.album,\n albumArtist: s.albumArtist,\n position: s.position,\n duration: s.duration,\n hasThumbnail: s.hasThumbnail,\n trackIndex: s.trackIndex,\n lyricIndex: s.lyricIndex,\n lyricLine: s.lyricLine\n };\n}\nconst mediaMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n MEDIA_PLAYBACK,\n cloneMediaSnapshot,\n createSimulatedMedia,\n diffMediaEvents,\n mediaVec3,\n renderThumbnail\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst TAB_HOLD = 14;\nconst TABS = [\n { app: \"Safari\", title: \"GitHub · we-scene-renderer\", url: \"https://github.com/oneincase/we-scene-renderer\" },\n { app: \"Google Chrome\", title: \"YouTube\", url: \"https://www.youtube.com/watch?v=dQw4w9WgXcQ\" },\n { app: \"Google Chrome\", title: \"Wallpaper Engine - Workshop\", url: \"https://steamcommunity.com/app/431960/workshop/\" },\n { app: \"Safari\", title: \"MDN Web Docs\", url: \"https://developer.mozilla.org/en-US/docs/Web/API\" },\n { app: \"Music\", title: \"夜航星 — 相位迁移\", url: \"\" },\n { app: \"Code\", title: \"we-scene-renderer — text.js\", url: \"\" }\n];\nfunction createSimulatedWindowTitle() {\n const snapshot = { app: \"\", title: \"\", url: \"\", index: -1 };\n function update(t) {\n const time = Number(t) || 0;\n const i = TABS.length ? Math.floor(time / TAB_HOLD) % TABS.length : 0;\n const tab = TABS[i] || TABS[0];\n snapshot.app = tab.app;\n snapshot.title = tab.title;\n snapshot.url = tab.url;\n snapshot.index = i;\n return snapshot;\n }\n update(0);\n return { update, snapshot, tabs: TABS, hold: TAB_HOLD };\n}\nfunction createShortcutHandler(onOpen) {\n const last = { name: \"\", at: 0 };\n function openUserShortcut(name) {\n last.name = String(name || \"\");\n last.at = Date.now();\n if (typeof onOpen === \"function\") onOpen(last.name);\n return last.name;\n }\n return { openUserShortcut, last };\n}\nfunction createSimulatedSystem(seed) {\n const media2 = createSimulatedMedia(seed);\n const windowTitle = createSimulatedWindowTitle();\n const shortcuts = createShortcutHandler(null);\n return { media: media2, windowTitle, shortcuts };\n}\nconst systemMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n createShortcutHandler,\n createSimulatedSystem,\n createSimulatedWindowTitle\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction createPointerSource(opts = {}) {\n const target = opts.target || (typeof window !== \"undefined\" ? window : null);\n const readViewportSize = opts.viewport || (typeof window !== \"undefined\" ? () => ({ w: window.innerWidth || 1, h: window.innerHeight || 1 }) : null);\n const state = {\n // 归一化 [0,1],Y 朝下(g_PointerPosition 空间)\n u: 0.5,\n v: 0.5,\n // 屏幕像素(input.cursorScreenPosition 空间)\n screenX: 0,\n screenY: 0,\n // 渲染世界像素,Y 朝下(hit-test 空间)\n wx: 0,\n wy: 0,\n // origin 空间 Y(Y-up):脚本 cursorWorldPosition / event.worldPosition\n originY: null,\n // 上一帧快照(g_PointerPositionLast / input.cursorPositionLast)\n lastU: 0.5,\n lastV: 0.5,\n lastScreenX: 0,\n lastScreenY: 0,\n lastWx: 0,\n lastWy: 0,\n lastOriginY: null,\n // 鼠标左键按下(input.cursorLeftDown,全库 2 处在用)\n leftDown: false,\n // 是否收到过真实事件。u/v 未收到时停在屏幕中心(0.5,0.5):视差 / 粒子 /\n // iris 要的是「相对中心为零」。xray 开窗另在 bind 时停到相机外\n // (见 xrayShouldParkPointer),不要把全局指针初值改到角上 —— 角上会让\n // 涟漪/虹膜在用户还没动鼠标时就从左上角起。\n has: false,\n // 诊断计数\n moveCount: 0,\n downCount: 0,\n upCount: 0,\n lastEventTime: 0,\n // 屏幕尺寸(engine.screenResolution);每次事件与 beginFrame 时刷新,\n // 因为渲染器没有 resize 监听,缓存下来会在改窗口后失效\n screenW: 1,\n screenH: 1\n };\n function readViewport() {\n if (!readViewportSize) return;\n const v = readViewportSize();\n state.screenW = v.w || 1;\n state.screenH = v.h || 1;\n }\n readViewport();\n function onMove(ev) {\n readViewport();\n let x = ev.clientX;\n let y = ev.clientY;\n if (target && typeof target.getBoundingClientRect === \"function\") {\n const r = target.getBoundingClientRect();\n x -= r.left;\n y -= r.top;\n }\n const u = x / state.screenW;\n const v = y / state.screenH;\n if (!state.has) {\n state.lastU = u;\n state.lastV = v;\n state.lastScreenX = x;\n state.lastScreenY = y;\n }\n state.screenX = x;\n state.screenY = y;\n state.u = u;\n state.v = v;\n state.has = true;\n state.moveCount++;\n state.lastEventTime = Date.now();\n }\n function onDown(ev) {\n if (ev.button !== void 0 && ev.button !== 0) return;\n state.leftDown = true;\n state.downCount++;\n }\n function onUp(ev) {\n if (ev.button !== void 0 && ev.button !== 0) return;\n state.leftDown = false;\n state.upCount++;\n }\n function onLeaveWindow() {\n state.leftDown = false;\n }\n let attached = false;\n if (target && target.addEventListener) {\n attached = true;\n target.addEventListener(\"mousemove\", onMove, { passive: true });\n target.addEventListener(\"mousedown\", onDown, { passive: true });\n target.addEventListener(\"mouseup\", onUp, { passive: true });\n target.addEventListener(\"blur\", onLeaveWindow, { passive: true });\n if (typeof document !== \"undefined\" && document.addEventListener) {\n document.addEventListener(\"mouseleave\", onLeaveWindow, { passive: true });\n }\n }\n return {\n state,\n /**\n * 每帧所有消费方读完 current/last **之后**调用一次:把 last 推到 current。\n * 事件驱动下 current 在 rAF 之间已被 mousemove 更新;消费前调用会把\n * 帧间位移抹成 0(见文件头注释)。\n */\n beginFrame() {\n readViewport();\n state.lastU = state.u;\n state.lastV = state.v;\n state.lastScreenX = state.screenX;\n state.lastScreenY = state.screenY;\n state.lastWx = state.wx;\n state.lastWy = state.wy;\n state.lastOriginY = state.originY;\n },\n /**\n * 用当前相机把归一化坐标换算成世界像素。\n * cam 只在 renderer.render 内部可得(每帧由 buildCamera 构造),故由渲染器\n * 在帧内回调本方法,而不是让本模块自己算。\n *\n * wy 是渲染世界 Y 朝下(hit-test);originY = projH - wy 是 origin Y-up\n * (脚本跟随动画)。没有 projH 时 originY 退回 wy,离线测试保持旧行为。\n *\n * @param {{offX:number,offY:number,viewW:number,viewH:number,projH?:number}} cam\n * @param {number} [parOffX] 相机视差的世界位移。视差把 translate 右乘进了\n * viewProj(发生在 cam.offX/viewW 计算**之后**),所以屏幕上看到的内容\n * 相对 cam 窗口整体平移了 parOff。要让指针命中「肉眼看到的位置」,\n * 世界坐标必须减掉它,否则视差场景下 hit-test 与画面错开最多 60px。\n * @param {number} [parOffY]\n */\n syncWorld(cam, parOffX = 0, parOffY = 0) {\n if (!cam) return;\n state.wx = cam.offX + state.u * cam.viewW - parOffX;\n state.wy = cam.offY + state.v * cam.viewH - parOffY;\n const projH = Number(cam.projH);\n state.originY = Number.isFinite(projH) ? projH - state.wy : state.wy;\n if (state.lastWx === 0 && state.lastWy === 0) {\n state.lastWx = state.wx;\n state.lastWy = state.wy;\n state.lastOriginY = state.originY;\n }\n },\n /** 归一化空间的帧间位移长度(g_PointerPositionLast 的主要用途) */\n normalizedDelta() {\n const dx = state.u - state.lastU;\n const dy = state.v - state.lastV;\n return Math.hypot(dx, dy);\n },\n dispose() {\n if (!attached || !target || !target.removeEventListener) return;\n attached = false;\n target.removeEventListener(\"mousemove\", onMove);\n target.removeEventListener(\"mousedown\", onDown);\n target.removeEventListener(\"mouseup\", onUp);\n target.removeEventListener(\"blur\", onLeaveWindow);\n if (typeof document !== \"undefined\" && document.removeEventListener) {\n document.removeEventListener(\"mouseleave\", onLeaveWindow);\n }\n }\n };\n}\nconst pointerMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n createPointerSource\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction worldToLayerLocal(layer, wx, wy, projH, parOffX, parOffY, alignTable) {\n const size = layer.size || [0, 0];\n const scale = layer.scale || [1, 1, 1];\n const w = size[0] * scale[0];\n const h = size[1] * scale[1];\n if (!(w > 0) || !(h > 0)) return null;\n const origin = layer.origin || [0, 0, 0];\n let cx = origin[0];\n let cy = projH - origin[1];\n if (layer.parallaxDepth && (parOffX !== 0 || parOffY !== 0)) {\n const d = layer.parallaxDepth;\n const fx = parallaxDepthFactor(d[0]);\n const fy = parallaxDepthFactor(d[1]);\n cx += fx * parOffX;\n cy += fy * parOffY;\n }\n let px = wx - cx;\n let py = wy - cy;\n const ang = layer.angles ? layer.angles[2] : 0;\n if (ang) {\n const c = Math.cos(-ang);\n const s = Math.sin(-ang);\n const rx = px * c + py * s;\n const ry = -px * s + py * c;\n px = rx;\n py = ry;\n }\n const a = alignTable && alignTable[layer.alignment] || [0.5, 0.5];\n if (a[0] !== 0.5 || a[1] !== 0.5) {\n px -= (0.5 - a[0]) * w;\n py -= (0.5 - a[1]) * h;\n }\n return { lx: px / w, ly: py / h, w, h };\n}\nfunction hitTestLayers(layers, wx, wy, projH, opts = {}) {\n if (!layers || layers.length === 0) return null;\n const parOffX = opts.parOffX || 0;\n const parOffY = opts.parOffY || 0;\n const alignTable = opts.alignTable;\n const filter = opts.filter;\n for (let i = layers.length - 1; i >= 0; i--) {\n const layer = layers[i];\n if (!layer || !layer.visible || layer.destroyed) continue;\n if (filter && !filter(layer)) continue;\n const loc = worldToLayerLocal(layer, wx, wy, projH, parOffX, parOffY, alignTable);\n if (!loc) continue;\n if (Math.abs(loc.lx) <= 0.5 && Math.abs(loc.ly) <= 0.5) return layer;\n }\n return null;\n}\nconst hitTestMod = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n hitTestLayers,\n worldToLayerLocal\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst asAny = (m) => m;\nconst pkg = asAny(pkgMod);\nconst tex = asAny(texMod);\nconst scn = asAny(sceneMod);\nconst eff = asAny(effMod);\nconst rnd = asAny(rndMod);\nconst noise = asAny(noiseMod);\nconst particles = asAny(particlesMod);\nconst ptex = asAny(particleTexMod);\nconst mdl = asAny(mdlMod);\nconst wtext = asAny(textMod);\nconst wtimers = asAny(timersMod);\nconst media = asAny(mediaMod);\nconst system = asAny(systemMod);\nconst anim = asAny(animMod);\nconst pointerLib = asAny(pointerMod);\nconst hitTest = asAny(hitTestMod);\nfunction buildMediaScene(width, height, textureName) {\n return {\n camera: null,\n // contain 模式的留边由 clearcolor 填充(对应 DOM 路径里的深色背景)\n general: { orthogonalprojection: { width, height }, clearenabled: true, clearcolor: \"0 0 0\" },\n layers: [\n {\n id: 0,\n name: \"media\",\n visible: true,\n image: textureName,\n textureName,\n particle: null,\n puppet: null,\n solid: false,\n isContainer: false,\n isPostProcess: false,\n isText: false,\n isSound: false,\n isComponent: false,\n sound: [],\n // 铺满整个投影:层中心在投影中心、尺寸等于投影尺寸\n origin: [width / 2, height / 2, 0],\n scale: [1, 1, 1],\n angles: [0, 0, 0],\n size: [width, height],\n alignment: \"center\",\n color: [1, 1, 1],\n alpha: 1,\n brightness: 1,\n colorBlendMode: 0,\n copybackground: false,\n parallaxDepth: null,\n animationLayers: [],\n effects: []\n }\n ],\n properties: {}\n };\n}\nasync function decodeGifFrames(src) {\n const resp = await fetch(src);\n if (!resp.ok) throw new Error(`HTTP ${resp.status}`);\n const dec = new window.ImageDecoder({\n data: await resp.arrayBuffer(),\n type: \"image/gif\"\n });\n await dec.tracks.ready;\n await dec.completed;\n const track = dec.tracks.selectedTrack;\n if (!track || !track.frameCount) return null;\n const count = Math.min(track.frameCount, 300);\n const frames = [];\n let width = 0;\n let height = 0;\n for (let i = 0; i < count; i++) {\n const { image } = await dec.decode({ frameIndex: i });\n width = image.displayWidth;\n height = image.displayHeight;\n frames.push({\n bitmap: await createImageBitmap(image),\n // duration 单位是微秒;缺失/为 0 的帧按 GIF 惯例给 100ms\n durationMs: image.duration ? image.duration / 1e3 : 100\n });\n image.close();\n }\n dec.close?.();\n return { width, height, frames };\n}\nfunction mountMedia(rt, cfg) {\n clear(rt);\n if (!cfg.src) {\n rt.fallbackPage?.();\n return;\n }\n const isVideo = cfg.type === \"video\";\n const isGif = cfg.type === \"gif\";\n const c = document.createElement(\"canvas\");\n const dpr = effectiveDpr(rt, cfg);\n c.width = Math.max(1, Math.round(innerWidth * dpr));\n c.height = Math.max(1, Math.round(innerHeight * dpr));\n c.style.cssText = \"position:absolute;inset:0;width:100%;height:100%;\";\n const gl2 = c.getContext(\"webgl2\", {\n premultipliedAlpha: false,\n antialias: false,\n alpha: false,\n preserveDrawingBuffer: true\n });\n if (!gl2) {\n reportDiag(rt, cfg, `media ${cfg.type}: WEBGL2_UNAVAILABLE,回退 DOM 渲染`);\n if (isVideo) mountVideoDom(rt, cfg);\n else mountGifDom(rt, cfg);\n return;\n }\n rt.wrap?.appendChild(c);\n rt.canvas = c;\n let disposed = false;\n rt.sceneCleanup = () => {\n disposed = true;\n if (rt.renderer) {\n rt.renderer.dispose?.();\n rt.renderer = void 0;\n }\n };\n let pauseImpl;\n let resumeImpl;\n let videoWasPlaying = false;\n rt.sceneCtl = {\n pause() {\n pauseImpl?.();\n },\n resume() {\n resumeImpl?.();\n },\n applyUserProperties() {\n }\n };\n const fail = (why) => {\n if (disposed) return;\n disposed = true;\n reportDiag(rt, cfg, `media ${cfg.type} 失败: ${why}`);\n rt.fallbackPage?.();\n };\n void (async () => {\n try {\n const renderer = rnd.createRenderer(c, {\n diag: (msg) => reportDiag(rt, cfg, `renderer: ${msg}`),\n fboCapFactor: 0\n });\n rt.renderer = renderer;\n if (disposed) return;\n const TEX = \"__media\";\n const textures = /* @__PURE__ */ new Map();\n let refreshTex;\n let mediaW = 0;\n let mediaH = 0;\n if (isVideo) {\n const v = document.createElement(\"video\");\n v.autoplay = true;\n v.loop = cfg.loop !== false;\n v.muted = cfg.muted !== false;\n v.playsInline = true;\n v.preload = \"metadata\";\n v.width = c.width;\n v.height = c.height;\n v.style.cssText = \"position:fixed;left:-9999px;top:-9999px;width:2px;height:2px;opacity:0;pointer-events:none\";\n v.src = cfg.src;\n document.body.appendChild(v);\n rt.video = v;\n (rt.videoTextures ??= []).push(v);\n await new Promise((ok, err) => {\n v.addEventListener(\"loadedmetadata\", () => ok(), { once: true });\n v.addEventListener(\"error\", () => err(new Error(`video error ${v.error?.code ?? \"?\"}`)), {\n once: true\n });\n });\n if (disposed) return;\n mediaW = v.videoWidth || c.width;\n mediaH = v.videoHeight || c.height;\n textures.set(TEX, {\n video: v,\n glTex: rnd.makeTexture(renderer.gl, new Uint8Array([0, 0, 0, 255]), 1, 1),\n width: mediaW,\n height: mediaH,\n rg88: false,\n lastUploaded: -1\n });\n if (!rt.paused) void v.play().catch(() => {\n });\n reportDiag(rt, cfg, `media video ${mediaW}x${mediaH} → scene 渲染`);\n } else {\n let decoded = false;\n if (isGif && typeof window.ImageDecoder === \"function\") {\n try {\n const gifFrames = await decodeGifFrames(cfg.src);\n if (gifFrames && gifFrames.frames.length > 1) {\n mediaW = gifFrames.width;\n mediaH = gifFrames.height;\n const gl = renderer.gl;\n const entry = {\n glTex: rnd.makeTexture(gl, null, 0, 0, gifFrames.frames[0].bitmap),\n width: mediaW,\n height: mediaH,\n rg88: false\n };\n textures.set(TEX, entry);\n let idx = 0;\n let nextAt = performance.now() + gifFrames.frames[0].durationMs;\n refreshTex = () => {\n const now = performance.now();\n if (now < nextAt) return;\n idx = (idx + 1) % gifFrames.frames.length;\n nextAt = now + gifFrames.frames[idx].durationMs;\n gl.bindTexture(gl.TEXTURE_2D, entry.glTex);\n try {\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n gifFrames.frames[idx].bitmap\n );\n } catch {\n }\n };\n const prev = rt.sceneCleanup;\n rt.sceneCleanup = () => {\n prev?.();\n for (const f of gifFrames.frames) f.bitmap.close();\n };\n decoded = true;\n reportDiag(\n rt,\n cfg,\n `media gif ${mediaW}x${mediaH} ${gifFrames.frames.length} 帧 → scene 渲染`\n );\n }\n } catch (e) {\n reportDiag(rt, cfg, `gif 解码失败,回退静态首帧: ${String(e.message).slice(0, 80)}`);\n }\n }\n if (!decoded) {\n const img = new Image();\n img.crossOrigin = \"anonymous\";\n img.src = cfg.src;\n await new Promise((ok, err) => {\n img.addEventListener(\"load\", () => ok(), { once: true });\n img.addEventListener(\"error\", () => err(new Error(\"image load error\")), { once: true });\n });\n if (disposed) return;\n mediaW = img.naturalWidth || 1;\n mediaH = img.naturalHeight || 1;\n rt.img = img;\n textures.set(TEX, {\n glTex: rnd.makeTexture(renderer.gl, null, 0, 0, img),\n width: mediaW,\n height: mediaH,\n rg88: false\n });\n reportDiag(rt, cfg, `media ${cfg.type} ${mediaW}x${mediaH} → scene 渲染`);\n }\n }\n if (disposed) return;\n const scene = buildMediaScene(mediaW, mediaH, TEX);\n const start = performance.now();\n let pauseAccum = 0;\n let pauseStarted = 0;\n let lastRender = -Infinity;\n const renderLoop = (now) => {\n if (disposed || rt.paused) return;\n const fps = rt.cfg.sceneFps || 60;\n if (now - lastRender >= 1e3 / fps) {\n lastRender = now;\n markFrame(rt, now);\n syncCanvasSize(rt, c, rt.cfg);\n refreshTex?.();\n const peek = rt.coverAlign;\n void renderer.render(\n scene,\n textures,\n c.width,\n c.height,\n (now - start - pauseAccum) / 1e3,\n normalizeFit(rt.cfg.fit),\n peek.x,\n peek.y\n ).then(() => {\n if (disposed || rt.paused) return;\n rt.raf = requestAnimationFrame(renderLoop);\n }).catch((e) => fail(String(e.message || e).slice(0, 200)));\n } else if (!rt.paused) {\n rt.raf = requestAnimationFrame(renderLoop);\n }\n };\n const kickLoop = () => {\n if (disposed || rt.paused) return;\n if (rt.raf !== void 0) return;\n rt.raf = requestAnimationFrame(renderLoop);\n };\n pauseImpl = () => {\n if (rt.raf !== void 0) {\n cancelAnimationFrame(rt.raf);\n rt.raf = void 0;\n }\n if (!pauseStarted) pauseStarted = performance.now();\n const v = rt.video;\n videoWasPlaying = !!(v && !v.paused && !v.ended);\n v?.pause();\n };\n resumeImpl = () => {\n if (pauseStarted) {\n pauseAccum += performance.now() - pauseStarted;\n pauseStarted = 0;\n }\n if (videoWasPlaying) void rt.video?.play().catch(() => {\n });\n videoWasPlaying = false;\n kickLoop();\n };\n kickLoop();\n } catch (e) {\n fail(String(e.message || e).slice(0, 200));\n }\n })();\n}\nfunction mountVideoDom(rt, cfg) {\n clear(rt);\n if (!cfg.src) {\n rt.fallbackPage?.();\n return;\n }\n const fit = fitObjectFit(cfg.fit);\n const css = `position:absolute;inset:0;width:100%;height:100%;object-fit:${fit.objectFit};object-position:50% 50%;background:${fit.background};`;\n let fellBack = false;\n const onErr = () => {\n if (fellBack) return;\n fellBack = true;\n console.warn(\"video error, fallback to default wallpaper\");\n rt.fallbackPage?.();\n };\n const v = document.createElement(\"video\");\n v.autoplay = true;\n v.loop = cfg.loop !== false;\n v.muted = cfg.muted !== false;\n v.playsInline = true;\n v.preload = \"metadata\";\n const dprV = Math.min(window.devicePixelRatio || 1, rt.cfg.renderDpr || 1);\n v.width = Math.max(1, Math.round(innerWidth * dprV));\n v.height = Math.max(1, Math.round(innerHeight * dprV));\n v.style.cssText = css;\n v.src = cfg.src;\n v.addEventListener(\"error\", onErr);\n rt.wrap?.appendChild(v);\n rt.video = v;\n v.addEventListener(\"canplay\", () => v.play().catch(() => {\n }), { once: true });\n reportDiag(rt, cfg, \"video mounted (single + native loop)\");\n}\nfunction mountGifDom(rt, cfg) {\n clear(rt);\n const img = document.createElement(\"img\");\n const fit = fitObjectFit(cfg.fit);\n img.style.cssText = `position:absolute;inset:0;width:100%;height:100%;object-fit:${fit.objectFit};object-position:50% 50%;background:${fit.background};`;\n img.src = cfg.src ?? \"\";\n img.addEventListener(\"error\", () => rt.fallbackPage?.());\n rt.wrap?.appendChild(img);\n rt.img = img;\n}\nconst PKG_PATHS = [\"scene.pkg\", \"scenes/scene.pkg\", \"gifscene.pkg\"];\nfunction httpSource(baseUrl, init) {\n const base = baseUrl.replace(/\\/+$/, \"\");\n return {\n key: base,\n async scenePkg(signal) {\n let lastStatus = null;\n let lastThrow = null;\n for (const p of PKG_PATHS) {\n let r;\n try {\n r = await fetch(`${base}/${p}`, { ...init, signal });\n } catch (e) {\n if (signal?.aborted) throw e;\n lastThrow = e;\n continue;\n }\n if (!r.ok) {\n lastStatus = r.status;\n continue;\n }\n try {\n return await r.arrayBuffer();\n } catch (e) {\n if (signal?.aborted) throw e;\n const why2 = e instanceof Error ? e.message : String(e);\n throw new Error(`读取 scene.pkg 体失败(${why2})`);\n }\n }\n if (lastStatus != null) throw new Error(`scene.pkg 加载失败(HTTP ${lastStatus})`);\n const why = lastThrow instanceof Error ? lastThrow.message : \"Failed to fetch\";\n throw new Error(`scene.pkg 加载失败(${why})`);\n },\n async project(signal) {\n try {\n const r = await fetch(`${base}/project.json`, { ...init, signal });\n return r.ok ? await r.json() : null;\n } catch {\n return null;\n }\n }\n };\n}\nfunction fileSource(file, project) {\n const named = file;\n const key = typeof named.name === \"string\" ? `file:${named.name}:${named.size}:${named.lastModified ?? 0}` : void 0;\n return {\n key,\n scenePkg: () => file.arrayBuffer(),\n project: async () => project ?? null\n };\n}\nfunction bytesSource(pkg2, project, key) {\n return {\n key,\n scenePkg: async () => pkg2,\n project: async () => project ?? null\n };\n}\nconst LOOP_PREROLL_SEC = 0.5;\nconst LOOP_HOLD_SEC = 0.04;\nconst LOOP_SWAP_EPS = 0.08;\nfunction createLoopingVideo(src, opts) {\n const make = (assignSrc) => {\n const v = document.createElement(\"video\");\n if (assignSrc) v.src = src;\n v.muted = opts.muted;\n v.playsInline = true;\n v.preload = \"metadata\";\n const dpr = Math.min(window.devicePixelRatio || 1, opts.renderDpr || 1);\n const maxW = Math.max(1, Math.round(opts.maxW * dpr));\n const maxH = Math.max(1, Math.round(opts.maxH * dpr));\n v.width = maxW;\n v.height = maxH;\n v.loop = true;\n return v;\n };\n let active = make(true);\n let standby = make(false);\n let standbySrcReady = false;\n let userVolume = 1;\n let userMuted = opts.muted;\n standby.muted = true;\n const ensureStandbySrc = () => {\n if (standbySrcReady) return;\n standby.src = src;\n standbySrcReady = true;\n };\n let arming = false;\n let held = false;\n let prevTime = -1;\n let raf = 0;\n let destroyed = false;\n const disarm = () => {\n arming = false;\n held = false;\n if (!standby.paused) {\n standby.pause();\n try {\n standby.currentTime = 0;\n } catch {\n }\n }\n };\n const doSwap = () => {\n const prev = active;\n active = standby;\n standby = prev;\n arming = false;\n held = false;\n void active.play().catch(() => {\n });\n active.muted = userMuted;\n active.volume = userVolume;\n prev.pause();\n try {\n prev.currentTime = 0;\n } catch {\n }\n prev.muted = true;\n prevTime = -1;\n standbySrcReady = true;\n pair.onSwap?.(active);\n };\n const tick = () => {\n if (destroyed) return;\n raf = requestAnimationFrame(tick);\n const d = active.duration;\n if (!isFinite(d) || d <= 0) return;\n const t = active.currentTime;\n if (prevTime >= 0 && t < prevTime - 0.05) {\n const hadStandby = held;\n disarm();\n prevTime = t;\n if (!hadStandby) pair.onFallback?.();\n return;\n }\n prevTime = t;\n const remaining = d - t;\n if (remaining > LOOP_PREROLL_SEC + 0.5) {\n if (arming || held) disarm();\n return;\n }\n if (held) {\n if (remaining <= LOOP_SWAP_EPS || t <= LOOP_SWAP_EPS) doSwap();\n return;\n }\n if (arming) {\n if (!standby.paused) {\n if (standby.currentTime >= LOOP_HOLD_SEC * 0.5) {\n standby.pause();\n arming = false;\n held = true;\n }\n } else {\n void standby.play().catch(() => {\n });\n }\n return;\n }\n if (remaining <= LOOP_PREROLL_SEC) {\n ensureStandbySrc();\n if (standby.readyState >= 2) {\n try {\n standby.currentTime = 0;\n } catch {\n }\n void standby.play().catch(() => {\n });\n arming = true;\n }\n }\n };\n raf = requestAnimationFrame(tick);\n const pair = {\n get active() {\n return active;\n },\n get standby() {\n return standby;\n },\n onSwap: void 0,\n onFallback: void 0,\n setVolume(vol) {\n userVolume = Math.max(0, Math.min(1, vol));\n userMuted = vol <= 0;\n active.muted = userMuted;\n active.volume = userVolume;\n standby.muted = true;\n standby.volume = userVolume;\n },\n pause() {\n disarm();\n active.pause();\n if (raf) cancelAnimationFrame(raf);\n raf = 0;\n },\n resume() {\n if (destroyed) return;\n void active.play().catch((e) => {\n if (e && e.name === \"AbortError\") return;\n });\n if (!raf) raf = requestAnimationFrame(tick);\n },\n destroy() {\n destroyed = true;\n if (raf) cancelAnimationFrame(raf);\n raf = 0;\n for (const v of [active, standby]) {\n v.pause();\n v.removeAttribute(\"src\");\n try {\n v.load();\n } catch {\n }\n v.remove();\n }\n }\n };\n return pair;\n}\nconst SKIP_3D_MODELS = false;\nconst SKIP_COMPONENTS = true;\nconst SKIP_TEXT = false;\nconst SKIP_PARTICLES = false;\nconst SKIP_SCENE_EFFECTS = false;\nconst TEXT_EM_SCALE = 4;\nconst WE_SHADER_HEADERS = {\n \"common.h\": `// WE common.h(重建子集,供 we-scene 浏览器渲染)\n#define M_PI 3.14159265359\n// M_PI_2 是「PI × 2」而不是「PI ÷ 2」—— 名字极易读反,此前误写成 1.5708,\n// 影响全库 142 个文件(64 个壁纸)。三条独立证据:\n// 1. shake.frag: sin(frac(t / M_PI_2) * M_PI_2) —— frac(t/K)*K 即 mod(t,K),\n// sin(mod(t,K)) == sin(t) 仅当 K 是正弦周期 2π;写成 π/2 则每 1/4 周期\n// 出现一次断点(表现为 shake 效果规律性抖动),且与紧邻的 cos(time) 相位不一致;\n// 2. circular_text.frag: (atan2(y,x) + M_PI) / M_PI_2 —— 分子域为 [0,2π],\n// 下一行按 mod(x, 1.0) 取小数且起始角来自 deg × (1/360),即单位是「圈」,\n// 故必须除以 2π 才落在 [0,1];除以 π/2 会让文字沿环重复 4 次;\n// 3. shine_cast.vert: EDGES==3 用 M_PI_2 * 0.3333 / 0.6666 排三条光边,\n// 只有整圈的 1/3、2/3 才等分;同文件 EDGES==4 反而不用这个常量\n// (90° 直接写 vec2(-y, x))—— 作者清楚它是整圈。\n// 反向证据为 0:全库没有任何文件按 π/2 才成立。\n// 另有壁纸 3436945972 的作者在同一文件里自定义 \\`#define M_PI_D2 1.5707963... // PI / 2\\`,\n// 正说明 common.h 的 M_PI_2 不是 π/2,否则无需另起一个名字。\n#define M_PI_2 6.28318530718\n// 真正的 π/2 在 WE 里叫 M_PI_HALF(本机库暂无引用,补全以对齐真实头的符号面)\n#define M_PI_HALF 1.57079632679\nvec2 rotateVec2(vec2 v, float a) {\n float c = cos(a);\n float s = sin(a);\n return vec2(v.x * c - v.y * s, v.x * s + v.y * c);\n}\nfloat rand(vec2 n) { return fract(sin(dot(n, vec2(12.9898, 78.233))) * 43758.5453); }\nfloat rand(vec2 n, float m) { return 0.5 + 0.5 * rand(n * m); }\nfloat smoothstep01(float x) { return smoothstep(0.0, 1.0, x); }\nvec2 smoothstep01(vec2 x) { return smoothstep(vec2(0.0), vec2(1.0), x); }\nvec3 smoothstep01(vec3 x) { return smoothstep(vec3(0.0), vec3(1.0), x); }\nvec4 smoothstep01(vec4 x) { return smoothstep(vec4(0.0), vec4(1.0), x); }\n// WE shader 里大量使用的 atan2(GLSL 内置是 atan(y, x),无 atan2 名)\nfloat atan2(float y, float x) { return atan(y, x); }\n// HSV ↔ RGB。色相范围是 0..1 而不是 0..360 —— 依据 gradient_color.frag 的\n// \\`hsv.x = frac(hsv.x + g_Time * u_Speed)\\`(按 1 环绕)与 test_shader.frag 的\n// \\`hsv2rgb(vec3(x * 0.23 + g_Time * 0.12, 1.0, 1.0))\\`(喂入无界小数)。\nvec3 rgb2hsv(vec3 c) {\n vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\n vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\n float d = q.x - min(q.w, q.y);\n float e = 1.0e-10;\n return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\n}\nvec3 hsv2rgb(vec3 c) {\n vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n`,\n // WE common_blending.h(重建子集)。此前缺失导致 pulse / Simple_Audio_Bars /\n // 绝大多数 workshop 图像效果因 ApplyBlending 未定义而编译失败、效果被整体跳过\n // (README「HLSL→GLSL 转译」一节的已知待办)。逐字翻译自本仓库\n // render/effects.js 的 applyBlending CPU 参考实现(编号 = common_blending.h)。\n // 内部辅助函数一律加 weBlend 前缀:不得与 GLSL 内置撞名(如 reflect)。\n \"common_blending.h\": `// WE common_blending.h(重建子集)\nvec3 weBlendOverlay(vec3 a, vec3 b) {\n return vec3(\n a.r < 0.5 ? 2.0 * a.r * b.r : 1.0 - 2.0 * (1.0 - a.r) * (1.0 - b.r),\n a.g < 0.5 ? 2.0 * a.g * b.g : 1.0 - 2.0 * (1.0 - a.g) * (1.0 - b.g),\n a.b < 0.5 ? 2.0 * a.b * b.b : 1.0 - 2.0 * (1.0 - a.b) * (1.0 - b.b));\n}\nvec3 weBlendSoftLight(vec3 a, vec3 b) {\n return vec3(\n b.r < 0.5 ? 2.0 * a.r * b.r + a.r * a.r * (1.0 - 2.0 * b.r) : sqrt(a.r) * (2.0 * b.r - 1.0) + 2.0 * a.r * (1.0 - b.r),\n b.g < 0.5 ? 2.0 * a.g * b.g + a.g * a.g * (1.0 - 2.0 * b.g) : sqrt(a.g) * (2.0 * b.g - 1.0) + 2.0 * a.g * (1.0 - b.g),\n b.b < 0.5 ? 2.0 * a.b * b.b + a.b * a.b * (1.0 - 2.0 * b.b) : sqrt(a.b) * (2.0 * b.b - 1.0) + 2.0 * a.b * (1.0 - b.b));\n}\nfloat weBlendVivid(float a, float b) {\n if (b < 0.5) {\n float bb = 2.0 * b;\n return bb == 0.0 ? 0.0 : max(1.0 - (1.0 - a) / bb, 0.0);\n }\n float bb = 2.0 * (b - 0.5);\n return bb == 1.0 ? 1.0 : min(a / (1.0 - bb), 1.0);\n}\n// Reflect 单独成函数:Glow = Reflect(B,A)。GLSL 禁止递归,不能在 ApplyBlending\n// 内部调 ApplyBlending(21, …)(整个函数会编译失败,效果被静默跳过)。\nvec3 weBlendReflect(vec3 A, vec3 B) {\n return vec3(\n A.r == 1.0 ? 1.0 : min(B.r * B.r / (1.0 - A.r), 1.0),\n A.g == 1.0 ? 1.0 : min(B.g * B.g / (1.0 - A.g), 1.0),\n A.b == 1.0 ? 1.0 : min(B.b * B.b / (1.0 - A.b), 1.0));\n}\nvec3 RGBToHSL(vec3 c) {\n float fmin = min(c.r, min(c.g, c.b));\n float fmax = max(c.r, max(c.g, c.b));\n float delta = fmax - fmin;\n vec3 h = vec3(0.0);\n h.z = (fmax + fmin) / 2.0;\n if (delta == 0.0) {\n h.x = 0.0;\n h.y = 0.0;\n } else {\n h.y = h.z < 0.5 ? delta / (fmax + fmin) : delta / (2.0 - fmax - fmin);\n float deltaR = ((fmax - c.r) / 6.0 + delta / 2.0) / delta;\n float deltaG = ((fmax - c.g) / 6.0 + delta / 2.0) / delta;\n float deltaB = ((fmax - c.b) / 6.0 + delta / 2.0) / delta;\n if (c.r == fmax) h.x = deltaB - deltaG;\n else if (c.g == fmax) h.x = 1.0 / 3.0 + deltaR - deltaB;\n else if (c.b == fmax) h.x = 2.0 / 3.0 + deltaG - deltaB;\n if (h.x < 0.0) h.x += 1.0;\n else if (h.x > 1.0) h.x -= 1.0;\n }\n return h;\n}\nfloat weHueToRgb(float f1, float f2, float hue) {\n if (hue < 0.0) hue += 1.0;\n else if (hue > 1.0) hue -= 1.0;\n if (6.0 * hue < 1.0) return f1 + (f2 - f1) * 6.0 * hue;\n if (2.0 * hue < 1.0) return f2;\n if (3.0 * hue < 2.0) return f1 + (f2 - f1) * ((2.0 / 3.0 - hue) * 6.0);\n return f1;\n}\nvec3 HSLToRGB(vec3 h) {\n if (h.y == 0.0) return vec3(h.z);\n float f2 = h.z < 0.5 ? h.z * (1.0 + h.y) : h.z + h.y - h.y * h.z;\n float f1 = 2.0 * h.z - f2;\n return vec3(\n weHueToRgb(f1, f2, h.x + 1.0 / 3.0),\n weHueToRgb(f1, f2, h.x),\n weHueToRgb(f1, f2, h.x - 1.0 / 3.0));\n}\n// mode 编号同 WE common_blending.h(0=Normal … 32=LighterColor 的实现子集)\nvec3 ApplyBlending(int mode, vec3 A, vec3 B, float opacity) {\n vec3 r;\n if (mode == 1) { r = min(B, A); } // Darken\n else if (mode == 2) { r = A * B; } // Multiply\n else if (mode == 3) { // ColorBurn\n r = vec3(\n B.r == 0.0 ? 0.0 : max(1.0 - (1.0 - A.r) / B.r, 0.0),\n B.g == 0.0 ? 0.0 : max(1.0 - (1.0 - A.g) / B.g, 0.0),\n B.b == 0.0 ? 0.0 : max(1.0 - (1.0 - A.b) / B.b, 0.0));\n }\n else if (mode == 4 || mode == 20) { r = max(A + B - 1.0, vec3(0.0)); } // Substract\n else if (mode == 5) { r = min(A, B); } // LinearBurn\n else if (mode == 6) { r = max(B, A); } // Lighten\n else if (mode == 7) { r = 1.0 - (1.0 - A) * (1.0 - B); } // Screen\n else if (mode == 8) { // ColorDodge\n r = vec3(\n B.r == 1.0 ? 1.0 : min(A.r / (1.0 - B.r), 1.0),\n B.g == 1.0 ? 1.0 : min(A.g / (1.0 - B.g), 1.0),\n B.b == 1.0 ? 1.0 : min(A.b / (1.0 - B.b), 1.0));\n }\n else if (mode == 9) { r = min(A + B, vec3(1.0)); } // Add\n else if (mode == 10) { r = max(A, B); } // Lighter\n else if (mode == 11) { r = weBlendOverlay(A, B); } // Overlay\n else if (mode == 12) { r = weBlendSoftLight(A, B); } // SoftLight\n else if (mode == 13) { r = weBlendOverlay(B, A); } // HardLight\n else if (mode == 14) { // VividLight\n r = vec3(weBlendVivid(A.r, B.r), weBlendVivid(A.g, B.g), weBlendVivid(A.b, B.b));\n }\n else if (mode == 15) { // LinearLight\n r = vec3(\n B.r < 0.5 ? max(A.r + 2.0 * B.r - 1.0, 0.0) : min(A.r + 2.0 * (B.r - 0.5), 1.0),\n B.g < 0.5 ? max(A.g + 2.0 * B.g - 1.0, 0.0) : min(A.g + 2.0 * (B.g - 0.5), 1.0),\n B.b < 0.5 ? max(A.b + 2.0 * B.b - 1.0, 0.0) : min(A.b + 2.0 * (B.b - 0.5), 1.0));\n }\n else if (mode == 16) { // PinLight\n r = vec3(\n B.r < 0.5 ? min(A.r, 2.0 * B.r) : max(A.r, 2.0 * (B.r - 0.5)),\n B.g < 0.5 ? min(A.g, 2.0 * B.g) : max(A.g, 2.0 * (B.g - 0.5)),\n B.b < 0.5 ? min(A.b, 2.0 * B.b) : max(A.b, 2.0 * (B.b - 0.5)));\n }\n else if (mode == 17) { // HardMix\n r = vec3(\n weBlendVivid(A.r, B.r) < 0.5 ? 0.0 : 1.0,\n weBlendVivid(A.g, B.g) < 0.5 ? 0.0 : 1.0,\n weBlendVivid(A.b, B.b) < 0.5 ? 0.0 : 1.0);\n }\n else if (mode == 18) { r = abs(A - B); } // Difference\n else if (mode == 19) { r = A + B - 2.0 * A * B; } // Exclusion\n else if (mode == 21) { r = weBlendReflect(A, B); } // Reflect\n else if (mode == 22) { r = weBlendReflect(B, A); } // Glow = Reflect(B,A)\n else if (mode == 23) { r = min(A, B) - max(A, B) + 1.0; } // Phoenix\n else if (mode == 24) { r = (A + B) / 2.0; } // Average\n else if (mode == 25) { r = 1.0 - abs(1.0 - A - B); } // Negation\n else if (mode == 26) { r = HSLToRGB(vec3(RGBToHSL(B).x, RGBToHSL(A).y, RGBToHSL(A).z)); } // Hue\n else if (mode == 27) { r = HSLToRGB(vec3(RGBToHSL(A).x, RGBToHSL(B).y, RGBToHSL(A).z)); } // Saturation\n else if (mode == 28) { r = HSLToRGB(vec3(RGBToHSL(B).x, RGBToHSL(B).y, RGBToHSL(A).z)); } // Color\n else if (mode == 29) { r = HSLToRGB(vec3(RGBToHSL(A).x, RGBToHSL(A).y, RGBToHSL(B).z)); } // Luminosity\n else if (mode == 30) { r = mix(A, max(max(A.r, max(A.g, A.b)), 0.0) * B, opacity); } // Tint\n else if (mode == 31) { r = A + B * opacity; } // Add(带 opacity 权重)\n else if (mode == 32) { r = mix(A, A + A * B, opacity); } // LinearDodge 变体\n else { r = mix(A, B, opacity); } // Normal(含 0)\n // CPU 参考(effects.js applyBlending):5/10/30/31/32 直接返回不经 opacity 权重,\n // 其余统一 mix(A, r, opacity) 回归原色。\n //\n // [we-scene patch] **mode 0 也必须排除**:它的分支已经是 mix(A, B, opacity),\n // 再套一层等于按 opacity² 加权。effects.js 的 default 分支是 switch 内直接\n // return mix3(A, B, opacity)、不走 per() 的二次加权,这里漏排了 0。\n // 症状极隐蔽:xray 的两张图是同一构图的不同版本(A≈B),平方后差异被压到\n // 肉眼与 readPixels 都读不出(实测 6 个 xray 壁纸像素差恰好为 0,\n // 而把最终输出换成中间量的探针显示 blend=187、sprite=187、mask.a=255 全都正常)。\n // 注意本文件是 TS 模板字符串,注释里不能出现反引号。\n if (mode != 0 && mode != 5 && mode != 10 && mode != 30 && mode != 31 && mode != 32) {\n r = mix(A, r, opacity);\n }\n return r;\n}\n// greyscale 必须返回 **float** 而不是 vec3 —— 调用点几乎全是\n// \\`noise = CAST3(greyscale(noise))\\`(filmgrain/vhs),CAST3 只能作用于标量;\n// 若声明成 vec3 版本,这些点会变成非法的 vec3(vec3)。\n// 唯一的 \\`albedo.rgb = greyscale(albedo.rgb)\\`(color_grading)在 HLSL 里靠标量\n// 自动广播成立,转译到 GLSL 后由赋值端的 vec3 = float 广播承接。\n//\n// 权重是 **vec3(0.11, 0.59, 0.3)**,即 Rec.601 (0.30,0.59,0.11) 的**逆序**——\n// WE 第一方 shader 里的历史遗留(BGR 时代)。依据是 4 个第一方文件把它内联写死:\n// localcontrast_combine.frag(正是 blur_combine 的免头文件版,#if GREYSCALE 下\n// 做的就是 greyscale 的事)、shine_downsample2.frag 等,跨 6 个壁纸字节一致。\n// 注意工坊 shader 大多用 Rec.709 (0.2126,0.7152,0.0722),但它们都是**本地自定义**\n// 的宏,不经过这个头;color_grading.frag 甚至同文件内两种并存 ——\n// 它自己 #define LUMINANCE_FACTOR 为 709,同时又调用本头的 greyscale,\n// 正说明 greyscale 不是 709 那套。\n#define LUMINANCE_FACTOR vec3(0.11, 0.59, 0.3)\nfloat greyscale(vec3 color) { return dot(vec3(0.11, 0.59, 0.3), color); }\n// BlendLinearDodge 必须按名存在:它被当作**实参**传给 BlendOpacity,\n// 自身从不带括号调用(故按调用扫描的校验器看不到它,但缺了会展开失败)。\nvec3 BlendLinearDodge(vec3 base, vec3 blend) { return min(base + blend, vec3(1.0)); }\n// BlendSoftLight 按名导出(splitTone 直接调用,2 参、无 opacity,0.5 为恒等)\nvec3 BlendSoftLight(vec3 a, vec3 b) { return weBlendSoftLight(a, b); }\n// BlendOpacity 只能是**函数式宏**,不能是函数 —— 第 3 个实参是裸函数名\n// (\\`BlendOpacity(albedo.rgb, smoothstep(...), BlendLinearDodge, blend)\\`),\n// 而 GLSL ES 没有函数指针。hlsl2glsl 的 expandFunctionMacro 会在 JS 侧预展开。\n#define BlendOpacity(base, blend, F, O) mix((base), F((base), (blend)), (O))\n// ContrastSaturationBrightness 的实参顺序与函数名相反:\n// 实测唯一调用点为 (albedo.rgb, 1.0 + c_brightness, 1.0 + c_saturation, 1.0 + c_contrast),\n// 三个 uniform 的 range 均为 [-1,1],故三个参数都是 [0,2] 的倍率、1.0 为恒等。\nvec3 ContrastSaturationBrightness(vec3 color, float brt, float sat, float con) {\n vec3 brtColor = color * brt;\n vec3 satColor = mix(vec3(dot(brtColor, LUMINANCE_FACTOR)), brtColor, sat);\n return mix(vec3(0.5), satColor, con);\n}\n`,\n // WE common_perspective.h(重建)。缺失时 waterwaves(全库 344 处引用 / 44 壁纸)、\n // waterripple、perspective、reflection 等整体被跳过 —— 是影响面最大的一个头。\n //\n // squareToQuad 把**单位正方形映射到四边形**,全库 98 个文件只有一种调用形式:\n // mat3 xform = inverse(squareToQuad(g_Point0, g_Point1, g_Point2, g_Point3));\n // v_TexCoord = mul(vec3(a_TexCoord.xy, 1.0), xform);\n // 片元侧再做透视除法 \\`v_TexCoord.xy / v_TexCoord.z\\`,并用 \\`step(0.0, v_TexCoord.z)\\`\n // 当有效性掩码 —— 所以正面样本的 z 必须为**正**,末行不能带负号缩放。\n //\n // 四个点的默认值是 g_Point0..3 = (0,0) (1,0) (1,1) (0,1),即单位正方形,\n // 此时必须退化为单位矩阵(否则所有没调透视的图层都会被莫名扭曲)。\n //\n // 采用标准的「单位正方形 → 任意四边形」投影解法(Heckbert):\n // dx1 = p1-p2, dy1 = p3-p2, dx2 = p0-p1+p2-p3(对边不平行时的偏差量)\n // 若 dx2 为 0 则是仿射情形,g=h=0。\n // 结果按**行向量约定**装配:调用点用的是 mul(rowVec, M),而 hlsl2glsl 会把\n // mul(v, M) 改写成 transpose(M) * v,故这里按「行向量右乘」的排布填矩阵。\n \"common_perspective.h\": `// WE common_perspective.h(重建)\nmat3 squareToQuad(vec2 p0, vec2 p1, vec2 p2, vec2 p3) {\n float dx1 = p1.x - p2.x;\n float dy1 = p1.y - p2.y;\n float dx2 = p3.x - p2.x;\n float dy2 = p3.y - p2.y;\n float sx = p0.x - p1.x + p2.x - p3.x;\n float sy = p0.y - p1.y + p2.y - p3.y;\n float den = dx1 * dy2 - dx2 * dy1;\n float g = 0.0;\n float h = 0.0;\n if (abs(den) > 1e-9) {\n g = (sx * dy2 - dx2 * sy) / den;\n h = (dx1 * sy - sx * dy1) / den;\n }\n float a = p1.x - p0.x + g * p1.x;\n float b = p3.x - p0.x + h * p3.x;\n float c = p0.x;\n float d = p1.y - p0.y + g * p1.y;\n float e = p3.y - p0.y + h * p3.y;\n float f = p0.y;\n // 行向量约定:[u v 1] * M\n return mat3(a, d, g,\n b, e, h,\n c, f, 1.0);\n}\n`,\n // WE common_blur.h(重建)。blurNa 的权重不是估算的 —— 壁纸 1444077782 里存着\n // **加公共头之前的旧版** blur_precise_gaussian.frag,把 13/7/3 抽样的系数\n // 逐项内联写死,这里逐字照抄(已核对原文)。\n //\n // 两个关键约定:\n // 1. **隐式采样 g_Texture0**,不传 sampler —— 调用形式恒为 blurNa(uv, step),\n // 而包含本头的文件都声明了 uniform sampler2D g_Texture0;\n // 2. step 由**顶点着色器**算好:VERTICAL 时 (0, g_Scale.y / g_Texture0Resolution.w),\n // 否则 (g_Scale.x / g_Texture0Resolution.z, 0) —— 即已经除过分辨率的单texel步长,\n // 未使用的轴为 0。所以这里直接按 ±1..±6 倍 step 取样即可。\n //\n // 注意 precise 版的 3 抽样权重是 0.27901/0.44198/0.27901(真高斯,和为 1),\n // 与 blur_gaussian.frag 的 0.25/0.5/0.25 **不同**,不要统一。\n // g_Texture0Resolution 四个分量都是像素尺寸:.xy 是补齐后的纹理尺寸(POT),\n // .zw 是图像实际尺寸;都是被除数,不是倒数。\n //\n // **本头必须自己声明 g_Texture0**:`#include \"common_blur.h\"` 在文件第 4 行,\n // 而 `uniform sampler2D g_Texture0` 在第 8 行 —— GLSL 要求先声明后使用,\n // 若头里只引用不声明,实测报 `'g_Texture0' : undeclared identifier`。\n // 重复声明同一个 uniform 在 GLSL ES 3.0 里是**错误**,所以不能直接再写一遍;\n // 解决办法是把 include 展开后出现的重复声明交给 hlsl2glsl 去重\n //(见 dedupeUniforms)。这里照常声明,由去重保证只留一份。\n \"common_blur.h\": `// WE common_blur.h(重建)\nuniform sampler2D g_Texture0;\nvec4 blur13a(vec2 uv, vec2 stp) {\n return texture(g_Texture0, uv - stp * 6.0) * 0.006299\n + texture(g_Texture0, uv - stp * 5.0) * 0.017298\n + texture(g_Texture0, uv - stp * 4.0) * 0.039533\n + texture(g_Texture0, uv - stp * 3.0) * 0.075189\n + texture(g_Texture0, uv - stp * 2.0) * 0.119007\n + texture(g_Texture0, uv - stp) * 0.156756\n + texture(g_Texture0, uv) * 0.171834\n + texture(g_Texture0, uv + stp) * 0.156756\n + texture(g_Texture0, uv + stp * 2.0) * 0.119007\n + texture(g_Texture0, uv + stp * 3.0) * 0.075189\n + texture(g_Texture0, uv + stp * 4.0) * 0.039533\n + texture(g_Texture0, uv + stp * 5.0) * 0.017298\n + texture(g_Texture0, uv + stp * 6.0) * 0.006299;\n}\nvec4 blur7a(vec2 uv, vec2 stp) {\n return texture(g_Texture0, uv - stp * 3.0) * 0.071303\n + texture(g_Texture0, uv - stp * 2.0) * 0.131514\n + texture(g_Texture0, uv - stp) * 0.189879\n + texture(g_Texture0, uv) * 0.214607\n + texture(g_Texture0, uv + stp) * 0.189879\n + texture(g_Texture0, uv + stp * 2.0) * 0.131514\n + texture(g_Texture0, uv + stp * 3.0) * 0.071303;\n}\nvec4 blur3a(vec2 uv, vec2 stp) {\n return texture(g_Texture0, uv - stp) * 0.27901\n + texture(g_Texture0, uv) * 0.44198\n + texture(g_Texture0, uv + stp) * 0.27901;\n}\n// 径向模糊:blurRadialNa(uv, center, scale)。它的 .vert 不传分辨率也不传步长,\n// 故步长只能由 (uv - center) 自行导出 —— 按「沿指向中心的方向按比例取样」实现,\n// 系数取 1/64 使 scale=1 时的最大位移约为半径的 1/10(与 u_Scale 的 [0.01,2] 量程匹配)。\nvec4 blurRadial13a(vec2 uv, vec2 center, float scale) {\n return blur13a(uv, (uv - center) * scale * 0.015625);\n}\nvec4 blurRadial7a(vec2 uv, vec2 center, float scale) {\n return blur7a(uv, (uv - center) * scale * 0.015625);\n}\nvec4 blurRadial3a(vec2 uv, vec2 center, float scale) {\n return blur3a(uv, (uv - center) * scale * 0.015625);\n}\n`,\n // WE common_composite.h(重建)。仅被 blur_combine.frag 使用(全库 4 个调用点)。\n // vec4 blurred = texSample2D(g_Texture0, ApplyCompositeOffset(uv, g_Texture0Resolution.xy));\n // blurred = ApplyComposite(albedoOld, vec4(blurred.rgb / div, blurred.a));\n // 第 1 参是**原始画面**(g_Texture2 显式标注 \"material\":\"previous\"),第 2 参是新的模糊结果。\n // COMPOSITE 取值 0 normal / 1 blend / 2 under / 3 cutout;本机库只出现 0 与 1\n // (3 处 scene.json 覆盖成 1),2/3 无实例,按语义实现备用。\n // COMPOSITEMONO 全库从未被覆盖,恒为 0。\n // ApplyCompositeOffset 在 normal 下必须是恒等 —— 否则所有未改 COMPOSITE 的\n // blur 效果都会整体偏移。\n //\n // 两条**必须自洽**的约束(踩过):\n // 1. **不能调用 ApplyBlending** —— blur_combine.frag 只 include 本头,\n // 不 include common_blending.h。真实 WE 的 common_composite.h 必须自给自足,\n // 否则这 2 个文件(3 个壁纸)会因 ApplyBlending 未定义而整体编译失败。\n // 故这里内联所需的少量混合,不外借 common_blending.h 的符号;\n // 2. **不能用 #elif** —— 本仓库的预处理器明确不支持(见 hlsl2glsl.js 的\n // 「不支持 #elif」注释),遇到会当作条件终止,导致后续分支全部漏掉。\n // 一律写成独立的 #if / #endif。\n \"common_composite.h\": `// WE common_composite.h(重建)\nvec2 ApplyCompositeOffset(vec2 uv, vec2 res) {\n return uv;\n}\nvec4 ApplyComposite(vec4 backdrop, vec4 source) {\n vec4 result = source;\n#if COMPOSITE == 1\n result = vec4(mix(backdrop.rgb, source.rgb, source.a), max(backdrop.a, source.a));\n#endif\n#if COMPOSITE == 2\n result = vec4(mix(source.rgb, backdrop.rgb, backdrop.a), max(backdrop.a, source.a));\n#endif\n#if COMPOSITE == 3\n result = vec4(backdrop.rgb, backdrop.a * (1.0 - source.a));\n#endif\n#if COMPOSITEMONO == 1\n result.rgb = vec3(dot(vec3(0.11, 0.59, 0.3), result.rgb));\n#endif\n return result;\n}\n`,\n // WE common_fragment.h(重建)。当前只需 DecompressNormal 与两个格式宏。\n // DecompressNormal 收**整个 vec4** 纹素(调用点无 swizzle),但内容是两通道的:\n // 实测 3 张 refractnormal.tex 有 2 张是 RG88(format=8)。WE 用 \"format\":\"normalmap\"\n // 标注这类贴图并重建 z。返回值的 .z 在现有 3 个调用点里从未被使用\n // (只用 normal.xy 做 UV 位移),故真正吃重的只有 *2-1 这步。\n // FORMAT_R8 / FORMAT_RG88 取 pkg/texture.js 的 .tex 格式枚举:RG88=8、R8=9。\n \"common_fragment.h\": `// WE common_fragment.h(重建)\n#define FORMAT_RG88 8\n#define FORMAT_R8 9\nvec3 DecompressNormal(vec4 tex) {\n vec2 xy = tex.xy * 2.0 - 1.0;\n return vec3(xy, sqrt(clamp(1.0 - dot(xy, xy), 0.0, 1.0)));\n}\n`,\n // WE common_vertex.h:**只被 include,不提供任何符号**。\n // 全库仅 2 个文件包含它(flowimage.vert / cutout_vignette.vert),\n // 两者用到的 uniform / attribute / varying 全部自行声明,\n // 其余标识符都是 GLSL 内建或由 hlsl2glsl 处理的 HLSL 方言(mul / CAST2)。\n // 真实 WE 里它是声明宏与平台 #define 的样板头,这里给空实现即可。\n \"common_vertex.h\": `// WE common_vertex.h(重建:空占位,见 headers.ts 注释)\n`\n};\nconst SYSTEM_FONT_FAMILIES = {\n systemfont_segoe: \"'Segoe UI', 'Helvetica Neue', Arial, sans-serif\",\n systemfont_arial: \"Arial, 'Helvetica Neue', sans-serif\",\n systemfont_verdana: \"Verdana, Geneva, sans-serif\",\n systemfont_tahoma: \"Tahoma, Geneva, sans-serif\",\n systemfont_timesnewroman: \"'Times New Roman', Times, serif\",\n systemfont_georgia: \"Georgia, 'Times New Roman', serif\",\n systemfont_couriernew: \"'Courier New', Courier, monospace\",\n systemfont_trebuchetms: \"'Trebuchet MS', 'Helvetica Neue', sans-serif\",\n systemfont_impact: \"Impact, 'Arial Black', sans-serif\",\n systemfont_comicsansms: \"'Comic Sans MS', 'Comic Sans', cursive\",\n systemfont_sylfaen: \"Palatino, 'Times New Roman', serif\",\n systemfont_calibri: \"Calibri, Carlito, 'Helvetica Neue', sans-serif\",\n systemfont_cambria: \"Cambria, Georgia, serif\",\n systemfont_consolas: \"Consolas, 'Courier New', monospace\",\n systemfont_microsoftyahei: \"'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', sans-serif\",\n systemfont_simsun: \"SimSun, 'Songti SC', serif\",\n systemfont_simhei: \"SimHei, 'Heiti SC', sans-serif\"\n};\nconst fontFaceCache = /* @__PURE__ */ new Map();\nconst pkgCache = /* @__PURE__ */ new Map();\nasync function loadParsedPkg(rt, cfg, source, signal) {\n const cacheKey = source.key;\n if (cacheKey) {\n const hit = pkgCache.get(cacheKey);\n if (hit) {\n hit.at = Date.now();\n reportDiag(rt, cfg, `pkg cache hit: ${hit.parsed.fileSize} bytes`);\n return hit.parsed;\n }\n }\n let pkgBytes;\n try {\n pkgBytes = await source.scenePkg(signal);\n } catch (e) {\n if (signal.aborted) throw e;\n throw e instanceof Error ? e : new Error(String(e));\n }\n reportDiag(rt, cfg, `pkg body: ${pkgBytes.byteLength} bytes`);\n const bytes = pkgBytes instanceof Uint8Array ? pkgBytes : new Uint8Array(pkgBytes);\n const parsed = pkg.parsePkg(bytes);\n if (!cacheKey) return parsed;\n pkgCache.set(cacheKey, { parsed, at: Date.now() });\n if (pkgCache.size > 2) {\n let oldestKey = null;\n let oldestAt = Infinity;\n for (const [k, v] of pkgCache) {\n if (k === cacheKey) continue;\n if (v.at < oldestAt) {\n oldestAt = v.at;\n oldestKey = k;\n }\n }\n if (oldestKey) pkgCache.delete(oldestKey);\n }\n return parsed;\n}\nfunction mountScene(rt, cfg) {\n clear(rt);\n const c = cfg.canvas ?? document.createElement(\"canvas\");\n const dpr = effectiveDpr(rt, cfg);\n const vw = c.clientWidth || window.innerWidth || 1;\n const vh = c.clientHeight || window.innerHeight || 1;\n c.width = Math.max(1, Math.round(vw * dpr));\n c.height = Math.max(1, Math.round(vh * dpr));\n if (!cfg.canvas) {\n c.style.cssText = \"position:absolute;inset:0;width:100%;height:100%;\";\n rt.wrap?.appendChild(c);\n }\n rt.canvas = c;\n let disposed = false;\n const pkgAbort = new AbortController();\n let particleCleanup;\n rt.sceneCleanup = () => {\n disposed = true;\n pkgAbort.abort();\n rt.sceneTextUpdate = void 0;\n if (particleCleanup) {\n particleCleanup();\n particleCleanup = void 0;\n }\n if (rt.renderer) {\n rt.renderer.dispose?.();\n rt.renderer = void 0;\n }\n };\n let pendingWire = null;\n let applyLiveImpl;\n let pauseImpl;\n let resumeImpl;\n rt.sceneCtl = {\n pause() {\n pauseImpl?.();\n },\n resume() {\n resumeImpl?.();\n },\n applyUserProperties(props) {\n if (applyLiveImpl) applyLiveImpl(props);\n else pendingWire = { ...pendingWire || {}, ...props };\n }\n };\n void (async () => {\n try {\n const source = cfg.source ?? httpSource(`${cfg.mediaBase}/${cfg.src}`);\n if (!cfg.source && (!cfg.mediaBase || !cfg.src)) {\n throw new Error(\"场景壁纸缺少 mediaBase/src\");\n }\n reportDiag(rt, cfg, \"mountScene start\");\n const parsedPkg = await loadParsedPkg(\n rt,\n cfg,\n source,\n pkgAbort.signal\n );\n if (disposed) return;\n let project = null;\n try {\n project = await source.project?.(pkgAbort.signal) ?? null;\n } catch {\n }\n const gl2 = c.getContext(\"webgl2\", {\n premultipliedAlpha: false,\n antialias: false,\n alpha: false,\n preserveDrawingBuffer: true\n });\n if (!gl2) throw new Error(\"WEBGL2_UNAVAILABLE\");\n const sceneEntry = pkg.getEntry(parsedPkg, \"scene.json\");\n if (!sceneEntry) throw new Error(\"pkg 中没有 scene.json(不是场景壁纸?)\");\n const scene = scn.parseScene(JSON.parse(readText(sceneEntry)), project);\n {\n const zRaw = scene.general?.zoom;\n const zVal = zRaw && typeof zRaw === \"object\" ? Number(zRaw.value) : Number(zRaw);\n scene.cameraTransforms = {\n zoom: Number.isFinite(zVal) && zVal > 0 ? zVal : 1\n };\n }\n const liveUserProps = flattenUserProperties(\n scene.properties || {}\n );\n rt.liveUserProps = liveUserProps;\n const recomputeVisibility = () => scn.recomputeLayerVisibility(scene.layers);\n if (rt.onSceneInfo) {\n const ortho = scene.general?.orthogonalprojection || {};\n const gw = Number(ortho.width) > 0 ? Number(ortho.width) : c.width;\n const gh = Number(ortho.height) > 0 ? Number(ortho.height) : c.height;\n const layers = scene.layers || [];\n const info = {\n width: gw,\n height: gh,\n layerCount: layers.length,\n hasModels: layers.some((l) => !!l.model),\n hasParticles: layers.some((l) => !!l.particle),\n hasText: layers.some((l) => !!l.text)\n };\n const hook = rt.onSceneInfo;\n rt.onSceneInfo = void 0;\n hook(info);\n }\n const propSandboxes = [];\n if (SKIP_COMPONENTS) {\n scene.layers = scene.layers.filter((l) => {\n if (SKIP_COMPONENTS && l.isComponent) return false;\n return true;\n });\n }\n if (SKIP_SCENE_EFFECTS) ;\n const shaderResolver = (rel) => {\n const inner = rel.startsWith(\"shaders/\") ? rel : \"shaders/\" + rel;\n const file = rel.startsWith(\"shaders/\") ? rel.slice(\"shaders/\".length) : rel;\n const e = pkg.getEntry(parsedPkg, inner);\n let src = e ? readText(e) : WE_SHADER_HEADERS[file] ?? null;\n const patch = window.__shaderPatch;\n if (src && patch) {\n const key = file.replace(/\\.(frag|vert|h)$/, \"\");\n const fn = patch[key] || patch[file];\n if (typeof fn === \"function\") {\n try {\n const r = fn(src, file);\n if (typeof r === \"string\") src = r;\n } catch {\n }\n }\n }\n return Promise.resolve(src);\n };\n const renderer = rnd.createRenderer(c, {\n shaderResolver,\n diag: (msg) => reportDiag(rt, cfg, `renderer: ${msg}`),\n // 效果链 FBO 降采样:0=全质量,0.5≈效果分辨率减半→内存约 1/4。\n // 用全质量:降采样会让「层 alpha 再乘一张羽化 mask」的效果(opacity)在\n // 低分辨率下把过渡带插得更淡,再经后续 waterwaves 的 UV 位移搬移、\n // 最后放大回屏幕,就在网格交界处(如 3113287126 头发与手臂交汇)看到发虚透明。\n // 代价:该场景效果链 FBO 由 3.5MB 升到约 100MB。\n fboCapFactor: 0\n });\n rt.renderer = renderer;\n if (disposed) return;\n const supportsAudioProcessing = project?.general?.supportsaudioprocessing !== false;\n const simAudio = createSimulatedAudio();\n const audioSim = { enabled: supportsAudioProcessing };\n const zero = (n) => new Float32Array(n);\n const SILENT_AUDIO = {\n left16: zero(16),\n right16: zero(16),\n left32: zero(32),\n right32: zero(32),\n left64: zero(64),\n right64: zero(64),\n level: 0,\n silent: true\n };\n renderer.setAudioProvider(() => audioSim.enabled ? simAudio.snapshot : SILENT_AUDIO);\n const audioViews = /* @__PURE__ */ new Map();\n window.__audioStats = () => ({\n enabled: audioSim.enabled,\n level: audioSim.enabled ? Math.round(simAudio.snapshot.level * 1e3) / 1e3 : 0,\n silent: audioSim.enabled ? simAudio.snapshot.silent : true,\n bass: audioSim.enabled ? Math.round(simAudio.snapshot.left64[2] * 1e3) / 1e3 : 0\n });\n window.__audioMute = (on) => {\n audioSim.enabled = !on;\n return audioSim.enabled;\n };\n reportDiag(rt, cfg, `audio: simulated stream, supportsaudioprocessing=${supportsAudioProcessing}`);\n const simMedia = media.createSimulatedMedia();\n const simWindow = system.createSimulatedWindowTitle();\n const shortcuts = system.createShortcutHandler((name) => {\n reportDiag(rt, cfg, `openUserShortcut: ${name}`);\n });\n const mediaSim = { enabled: true, override: null };\n const mediaHooks = [];\n let lastMediaSnap = null;\n const registerMediaHook = (sb) => {\n if (!sb || !sb.hasMediaHook || mediaHooks.includes(sb)) return;\n mediaHooks.push(sb);\n if (!simMedia.snapshot.hasMedia) return;\n for (const { name, event } of media.diffMediaEvents(null, simMedia.snapshot)) {\n try {\n sb.callMedia(name, event);\n } catch {\n }\n }\n };\n window.__mediaStats = () => ({\n enabled: mediaSim.enabled,\n hooks: mediaHooks.length,\n title: simMedia.snapshot.title,\n artist: simMedia.snapshot.artist,\n album: simMedia.snapshot.album,\n state: simMedia.snapshot.state,\n position: Math.round(simMedia.snapshot.position),\n duration: simMedia.snapshot.duration,\n hasThumbnail: simMedia.snapshot.hasThumbnail,\n lyric: simMedia.snapshot.lyricLine,\n primaryColor: simMedia.snapshot.primaryColor ? [simMedia.snapshot.primaryColor.x, simMedia.snapshot.primaryColor.y, simMedia.snapshot.primaryColor.z] : null\n });\n window.__mediaSet = (patch) => {\n Object.assign(simMedia.snapshot, patch || {});\n const evts = media.diffMediaEvents(lastMediaSnap, simMedia.snapshot);\n for (const { name, event } of evts) for (const sb of mediaHooks) sb.callMedia(name, event);\n lastMediaSnap = media.cloneMediaSnapshot(simMedia.snapshot);\n return window.__mediaStats();\n };\n const dispatchMediaNow = () => {\n const evts = media.diffMediaEvents(lastMediaSnap, simMedia.snapshot);\n for (const { name, event } of evts) {\n for (const sb of mediaHooks) {\n try {\n sb.callMedia(name, event);\n } catch {\n }\n }\n }\n lastMediaSnap = media.cloneMediaSnapshot(simMedia.snapshot);\n };\n const mediaControl = {\n snapshot: simMedia.snapshot,\n skipNext: () => {\n simMedia.skipNext();\n dispatchMediaNow();\n return simMedia.snapshot;\n },\n skipPrevious: () => {\n simMedia.skipPrevious();\n dispatchMediaNow();\n return simMedia.snapshot;\n },\n play: () => {\n simMedia.play();\n dispatchMediaNow();\n return simMedia.snapshot;\n },\n pause: () => {\n simMedia.pause();\n dispatchMediaNow();\n return simMedia.snapshot;\n },\n playPause: () => {\n simMedia.playPause();\n dispatchMediaNow();\n return simMedia.snapshot;\n }\n };\n window.__mediaControl = mediaControl;\n window.__system = {\n media: mediaControl,\n windowTitle: simWindow.snapshot,\n shortcuts: shortcuts.last\n };\n const pointerSrc = pointerLib.createPointerSource(\n cfg.canvas ? {\n target: cfg.canvas,\n viewport: () => ({\n w: cfg.canvas.clientWidth || window.innerWidth || 1,\n h: cfg.canvas.clientHeight || window.innerHeight || 1\n })\n } : {}\n );\n renderer.setPointerProvider(() => pointerSrc);\n {\n const prevCleanup = particleCleanup;\n particleCleanup = () => {\n prevCleanup?.();\n pointerSrc.dispose();\n };\n }\n const inputView = wtext.createInputView();\n const engineTimers = wtimers.createEngineTimers(\n {\n setTimeout: (fn, ms) => window.setTimeout(fn, ms),\n clearTimeout: (h) => window.clearTimeout(h),\n setInterval: (fn, ms) => window.setInterval(fn, ms),\n clearInterval: (h) => window.clearInterval(h)\n },\n {\n // 回调抛错由引擎隔离;这里只报首条(interval 抛错会逐拍触发,不能刷屏)\n onError: /* @__PURE__ */ (() => {\n let reported = false;\n return (e) => {\n if (reported) return;\n reported = true;\n reportDiag(rt, cfg, `engine 定时器回调抛错(此后同类静默): ${String(e?.message || e).slice(0, 90)}`);\n };\n })()\n }\n );\n const timerOpts = {\n setTimeout: engineTimers.setTimeout,\n clearTimeout: engineTimers.clearTimeout,\n setInterval: engineTimers.setInterval,\n clearInterval: engineTimers.clearInterval\n };\n {\n const prevCleanup = particleCleanup;\n particleCleanup = () => {\n prevCleanup?.();\n engineTimers.dispose();\n };\n }\n window.__pointerStats = () => {\n const p = pointerSrc.state;\n const r = (v) => Math.round(v * 1e3) / 1e3;\n return {\n normalized: { u: r(p.u), v: r(p.v) },\n last: { u: r(p.lastU), v: r(p.lastV) },\n world: { x: Math.round(p.wx), y: Math.round(p.wy) },\n originY: p.originY != null ? Math.round(p.originY) : null,\n screen: { x: p.screenX, y: p.screenY, w: p.screenW, h: p.screenH },\n leftDown: p.leftDown,\n has: p.has,\n delta: r(pointerSrc.normalizedDelta()),\n counts: { move: p.moveCount, down: p.downCount, up: p.upCount }\n };\n };\n const textures = /* @__PURE__ */ new Map();\n textures.set(\"util/white\", {\n glTex: rnd.makeTexture(renderer.gl, new Uint8Array([255, 255, 255, 255]), 1, 1),\n width: 1,\n height: 1,\n rg88: false\n });\n textures.set(\"util/noflow\", {\n glTex: rnd.makeTexture(renderer.gl, new Uint8Array([127, 127, 127, 255]), 1, 1),\n width: 1,\n height: 1,\n rg88: false\n });\n textures.set(\"util/noise\", {\n glTex: rnd.makeTexture(renderer.gl, noise.generateNoiseTexture(), 256, 256),\n width: 256,\n height: 256,\n rg88: false,\n mips: null\n });\n {\n const mkThumb = (track) => {\n const img = media.renderThumbnail(track, 512);\n return {\n glTex: rnd.makeTextureMip(renderer.gl, [img], false),\n width: img.width,\n height: img.height,\n rg88: false,\n mips: [img],\n generated: true\n };\n };\n const tracks = simMedia.tracks || [];\n if (tracks.length) {\n textures.set(\"$mediaThumbnail\", mkThumb(tracks[0]));\n textures.set(\"$mediaPreviousThumbnail\", mkThumb(tracks[tracks.length - 1]));\n }\n }\n const texInflight = /* @__PURE__ */ new Map();\n const loadTexInner = async (name) => {\n if (textures.has(name)) return textures.get(name);\n const texEntry = pkg.getEntry(parsedPkg, `materials/${name}.tex`);\n if (!texEntry) {\n if (ptex.isBuiltinParticleTextureName(name)) {\n const gen = ptex.buildBuiltinParticleTexture(name);\n if (gen) {\n const genEntry = {\n glTex: rnd.makeTextureMip(renderer.gl, [gen], false),\n width: gen.width,\n height: gen.height,\n rg88: false,\n mips: [gen],\n generated: true\n };\n textures.set(name, genEntry);\n return genEntry;\n }\n }\n return null;\n }\n const parsedTex = tex.parseTex(texEntry);\n const m = tex.decodeMip0(parsedTex);\n const rg88 = parsedTex.format === 8;\n let entry = null;\n if (m.video !== void 0) {\n const url = URL.createObjectURL(new Blob([m.video], { type: \"video/mp4\" }));\n const pair = createLoopingVideo(url, {\n muted: true,\n renderDpr: effectiveDpr(rt, cfg),\n maxW: c.clientWidth || window.innerWidth || 1,\n maxH: c.clientHeight || window.innerHeight || 1\n });\n for (const v of [pair.active, pair.standby]) {\n v.style.cssText = \"position:fixed;left:-9999px;top:-9999px;width:2px;height:2px;opacity:0;pointer-events:none\";\n document.body.appendChild(v);\n (rt.videoTextures ??= []).push(v);\n }\n (rt.objectUrls ??= []).push(url);\n (rt.videoPairs ??= []).push(pair);\n pair.active.addEventListener(\"loadedmetadata\", () => {\n reportDiag(rt, cfg, `video tex '${name}': ${pair.active.videoWidth}x${pair.active.videoHeight}`);\n });\n pair.active.addEventListener(\"error\", () => {\n reportDiag(rt, cfg, `video tex '${name}' ERROR: ${pair.active.error?.code}`);\n });\n const endedCbs = [];\n const bindEnded = (el) => {\n for (const cb of endedCbs) el.addEventListener(\"ended\", cb);\n };\n const videoCtl = {\n play: () => {\n if (disposed) return;\n pair.resume();\n },\n pause: () => pair.pause(),\n stop: () => {\n pair.pause();\n try {\n pair.active.currentTime = 0;\n } catch {\n }\n },\n isPlaying: () => !pair.active.paused && !pair.active.ended,\n duration: () => Number.isFinite(pair.active.duration) ? pair.active.duration : 0,\n getCurrentTime: () => pair.active.currentTime || 0,\n setCurrentTime: (t) => {\n try {\n pair.active.currentTime = t;\n } catch {\n }\n },\n getRate: () => pair.active.playbackRate || 1,\n setRate: (r) => {\n pair.active.playbackRate = r;\n pair.standby.playbackRate = r;\n },\n getLoop: () => pair.active.loop,\n setLoop: (v) => {\n pair.active.loop = v;\n pair.standby.loop = v;\n },\n addEndedCallback: (cb) => {\n endedCbs.push(cb);\n pair.active.addEventListener(\"ended\", cb);\n }\n };\n const entry2 = {\n get video() {\n return pair.active;\n },\n glTex: rnd.makeTexture(renderer.gl, new Uint8Array([0, 0, 0, 0]), 1, 1),\n width: m.width,\n height: m.height,\n rg88: false,\n lastUploaded: -1,\n videoCtl\n };\n let texSwapCount = 0;\n pair.onSwap = (el) => {\n entry2.lastUploaded = -1;\n bindEnded(el);\n texSwapCount++;\n if (texSwapCount === 1 || texSwapCount === 10 || texSwapCount === 100) {\n reportDiag(rt, cfg, `video tex '${name}' loop swap ok x${texSwapCount}`);\n }\n };\n pair.onFallback = () => {\n reportDiag(rt, cfg, `video tex '${name}' loop fallback (native loop used)`);\n };\n textures.set(name, entry2);\n return entry2;\n } else if (m.png !== void 0 || m.image !== void 0 && m.fif === tex.FIF.JPEG) {\n const blob = new Blob([m.png || m.image], {\n type: m.png ? \"image/png\" : \"image/jpeg\"\n });\n const bmp = await createImageBitmap(blob);\n entry = {\n glTex: rnd.makeTexture(renderer.gl, null, 0, 0, bmp),\n width: bmp.width,\n height: bmp.height,\n rg88\n };\n } else if (m.image !== void 0) {\n return null;\n } else {\n const m0 = tex.decodeMip0(parsedTex);\n entry = {\n glTex: rnd.makeTextureMip(renderer.gl, [m0], rg88),\n width: m0.width,\n height: m0.height,\n rg88,\n mips: [m0]\n };\n }\n if (!entry) return null;\n if (parsedTex.frames?.list?.length) {\n const fl = parsedTex.frames.list;\n fl.atlasWidth = entry.width;\n fl.atlasHeight = entry.height;\n entry.frames = fl;\n }\n textures.set(name, entry);\n return entry;\n };\n const loadTex = (name) => {\n if (textures.has(name)) return Promise.resolve(textures.get(name));\n const hit = texInflight.get(name);\n if (hit) return hit;\n const p = loadTexInner(name);\n texInflight.set(name, p);\n void p.finally(() => {\n if (texInflight.get(name) === p) texInflight.delete(name);\n });\n return p;\n };\n const SAMPLER_DEFAULT_RE = /uniform\\s+sampler2D\\s+g_Texture\\d+\\s*;\\s*\\/\\/[^\\n]*\"default\"\\s*:\\s*\"([^\"]+)\"/g;\n const preloadSamplerDefaults = async (effect) => {\n for (const mp of effect.materialPasses || []) {\n if (!mp.shader) continue;\n for (const stage of [\"frag\", \"vert\"]) {\n const bytes = pkg.getEntry(parsedPkg, `shaders/${mp.shader}.${stage}`);\n if (!bytes) continue;\n const src = readText(bytes);\n SAMPLER_DEFAULT_RE.lastIndex = 0;\n let m;\n while ((m = SAMPLER_DEFAULT_RE.exec(src)) !== null) {\n const name = m[1];\n if (!name || name.startsWith(\"util/\") || name.startsWith(\"_rt_\")) continue;\n if (textures.has(name)) continue;\n await loadTex(name);\n }\n }\n }\n };\n let loadedTex = 0;\n const texJobs = [];\n for (let li = 0; li < scene.layers.length; li++) {\n const layer = scene.layers[li];\n if (!layer.image) continue;\n try {\n let model;\n if (eff.BUILTIN_MODELS[layer.image]) {\n model = eff.BUILTIN_MODELS[layer.image];\n } else {\n const modelEntry = pkg.getEntry(parsedPkg, layer.image);\n if (!modelEntry) continue;\n model = JSON.parse(readText(modelEntry));\n }\n scn.applySolidFromModel(layer, model);\n if (model && typeof model === \"object\" && \"width\" in model && \"height\" in model) {\n const m = model;\n if ((layer.size?.[0] || 0) === 0 && (layer.size?.[1] || 0) === 0 && m.width > 0 && m.height > 0) {\n layer.size = [m.width, m.height];\n }\n }\n const mat = scn.resolveMaterial(model);\n if (!mat) continue;\n let material;\n if (eff.BUILTIN_MATERIALS[mat.materialPath]) {\n material = eff.BUILTIN_MATERIALS[mat.materialPath];\n } else {\n const matEntry = pkg.getEntry(parsedPkg, mat.materialPath);\n if (!matEntry) {\n if (layer.solid && eff.BUILTIN_MATERIALS[\"materials/util/solidlayer.json\"]) {\n material = eff.BUILTIN_MATERIALS[\"materials/util/solidlayer.json\"];\n } else {\n continue;\n }\n } else {\n material = JSON.parse(readText(matEntry));\n }\n }\n const pass = material.passes?.[0];\n const texSlots = pass?.textures || [];\n const texName = texSlots[0];\n if (pass?.combos) {\n for (const k of Object.keys(pass.combos)) {\n if (k.toLowerCase() === \"spritesheet\" && Number(pass.combos[k]) === 1) {\n layer.spriteSheet = true;\n break;\n }\n }\n }\n for (let si = 0; si < texSlots.length; si++) {\n const tn = texSlots[si];\n if (typeof tn !== \"string\" || !tn || tn.startsWith(\"util/\") || tn.startsWith(\"_rt_\")) continue;\n texJobs.push(\n loadTex(tn).then((entry) => {\n if (!entry) return;\n if (si === 0) {\n layer.textureName = tn;\n loadedTex++;\n if (entry.videoCtl) layer.videoCtl = entry.videoCtl;\n }\n })\n );\n }\n if (pass?.shader && pkg.getEntry(parsedPkg, `shaders/${pass.shader}.frag`)) {\n eff.attachLayerMaterialEffect(layer, pass);\n }\n for (const e of layer.effects || []) {\n eff.resolveEffectChain(parsedPkg, e, readText);\n }\n for (const e of layer.effects || []) {\n for (const p of e.passes || []) {\n for (const tn of p.textures || []) {\n if (typeof tn === \"string\" && tn !== \"\" && !tn.startsWith(\"util/\") && !tn.startsWith(\"_rt_\")) {\n texJobs.push(loadTex(tn));\n }\n }\n }\n texJobs.push(preloadSamplerDefaults(e));\n }\n } catch (e) {\n console.warn(`图层 ${layer.name || li} 加载失败: ${e.message}`);\n }\n }\n if (!SKIP_TEXT) {\n for (const layer of scene.layers) {\n if (!layer.isText || !(layer.effects || []).length) continue;\n try {\n for (const e of layer.effects || []) {\n eff.resolveEffectChain(parsedPkg, e, readText);\n }\n for (const e of layer.effects || []) {\n for (const p of e.passes || []) {\n for (const tn of p.textures || []) {\n if (typeof tn === \"string\" && tn !== \"\" && !tn.startsWith(\"util/\") && !tn.startsWith(\"_rt_\")) {\n texJobs.push(loadTex(tn));\n }\n }\n }\n }\n } catch (e) {\n console.warn(`文字层效果 ${layer.name} 解析失败: ${e.message}`);\n }\n }\n }\n await Promise.all(texJobs);\n for (const [texName, texEntry] of textures) {\n if (!texEntry?.videoCtl) continue;\n const usedVisible = scene.layers.some(\n (l) => l.textureName === texName && l.visible && !l.destroyed\n );\n if (usedVisible && !rt.paused) texEntry.videoCtl.play();\n }\n const particleSystems = [];\n const particleSystemsByLayer = /* @__PURE__ */ new Map();\n let builtinTexCount = 0;\n const loadParticleTex = async (name) => {\n const inPkg = await loadTex(name);\n if (inPkg) return inPkg;\n const gen = ptex.buildBuiltinParticleTexture(name);\n if (!gen) return null;\n const entry = {\n glTex: rnd.makeTextureMip(renderer.gl, [gen], false),\n width: gen.width,\n height: gen.height,\n rg88: false,\n mips: [gen],\n generated: true\n };\n textures.set(name, entry);\n builtinTexCount++;\n return entry;\n };\n const asParticleNormal = (entry) => {\n if (!entry) return null;\n const pix = entry.mips && entry.mips[0];\n if (pix?.rgba && typeof ptex.prepareParticleNormalTexture === \"function\") {\n const n = ptex.prepareParticleNormalTexture(pix);\n if (n && n !== pix) {\n return {\n glTex: rnd.makeTextureMip(renderer.gl, [n], false),\n width: n.width,\n height: n.height,\n rg88: false,\n mips: [n],\n generated: true\n };\n }\n }\n return entry;\n };\n const buildParticleSystem = async (particlePath, layer, override, depth) => {\n if (depth > 3) return null;\n const modelEntry = pkg.getEntry(parsedPkg, particlePath);\n if (!modelEntry) {\n reportDiag(rt, cfg, `particle '${particlePath}' 不在 pkg,跳过`);\n return null;\n }\n const model = JSON.parse(readText(modelEntry));\n const ps = new particles.ParticleSystem(renderer.gl, model, override, layer);\n let texName = null;\n let texName1 = null;\n if (model.material) {\n const matEntry = pkg.getEntry(parsedPkg, model.material);\n if (matEntry) {\n const mat = JSON.parse(readText(matEntry));\n ps.setMaterial(mat);\n const slots = mat?.passes?.[0]?.textures || [];\n texName = slots[0] || null;\n texName1 = slots[1] || null;\n }\n }\n const te = await loadParticleTex(texName || \"particle/halo\");\n if (!te) {\n reportDiag(rt, cfg, `particle '${particlePath}' 无贴图可用,跳过`);\n return null;\n }\n ps.setTexture({ glTex: te.glTex, width: te.width, height: te.height, frames: te.frames });\n const nrmName = texName1 || (ps.refract ? ptex.particleNormalNameForAlbedo(texName || \"particle/halo\") : null);\n if (nrmName) {\n const nrm = asParticleNormal(await loadParticleTex(nrmName));\n if (nrm) ps.setNormalTexture({ glTex: nrm.glTex, width: nrm.width, height: nrm.height });\n }\n ps.setVisible(!!layer.visible);\n particleSystems.push(ps);\n const lid = layer.id;\n if (lid !== void 0) {\n let list = particleSystemsByLayer.get(lid);\n if (!list) {\n list = [];\n particleSystemsByLayer.set(lid, list);\n }\n list.push(ps);\n }\n for (const ch of model.children || []) {\n if (!ch || typeof ch.name !== \"string\") continue;\n const cOrigin = String(ch.origin ?? \"0 0 0\").trim().split(/\\s+/).map(Number);\n const cScale = String(ch.scale ?? \"1 1 1\").trim().split(/\\s+/).map(Number);\n const cAngles = String(ch.angles ?? \"0 0 0\").trim().split(/\\s+/).map(Number);\n const followMode = ch.type === \"eventfollow\" ? \"particle\" : !ch.type || ch.type === \"static\" ? \"origin\" : null;\n const wOrigin = ps.localToWorld(cOrigin[0] || 0, cOrigin[1] || 0);\n const childLayer = {\n ...layer,\n origin: [\n wOrigin[0],\n wOrigin[1],\n (layer.origin?.[2] || 0) + (cOrigin[2] || 0)\n ],\n scale: [\n (layer.scale?.[0] ?? 1) * (cScale[0] || 1),\n (layer.scale?.[1] ?? 1) * (cScale[1] || 1),\n (layer.scale?.[2] ?? 1) * (cScale[2] || 1)\n ],\n angles: [\n (layer.angles?.[0] || 0) + (cAngles[0] || 0),\n (layer.angles?.[1] || 0) + (cAngles[1] || 0),\n (layer.angles?.[2] || 0) + (cAngles[2] || 0)\n ]\n };\n const childPs = await buildParticleSystem(\n ch.name,\n childLayer,\n ch.instanceoverride || override,\n depth + 1\n );\n if (childPs && followMode) {\n childPs.attachFollow(ps, followMode, [\n cOrigin[0] || 0,\n cOrigin[1] || 0,\n cOrigin[2] || 0\n ]);\n }\n }\n return ps;\n };\n if (!SKIP_PARTICLES) {\n for (const layer of scene.layers) {\n if (!layer.particle) continue;\n try {\n await buildParticleSystem(layer.particle, layer, layer.instanceoverride, 0);\n } catch (e) {\n console.warn(`粒子图层 ${layer.name} 加载失败: ${e.message}`);\n reportDiag(rt, cfg, `particle '${layer.name}' FAIL: ${e.message.slice(0, 80)}`);\n }\n }\n }\n if (particleSystems.length > 0) {\n const prevCleanup = particleCleanup;\n particleCleanup = () => {\n prevCleanup?.();\n for (const ps of particleSystems) ps.dispose();\n };\n }\n const soundAudios = [];\n for (const layer of scene.layers) {\n if (!layer.sound || !layer.sound.length) continue;\n try {\n for (const snd of layer.sound) {\n const entry = pkg.getEntry(parsedPkg, snd);\n if (!entry) continue;\n const ext = (snd.split(\".\").pop() || \"\").toLowerCase();\n const mime = ext === \"mp3\" ? \"audio/mpeg\" : ext === \"ogg\" ? \"audio/ogg\" : ext === \"flac\" ? \"audio/flac\" : \"audio/wav\";\n const blob = new Blob([entry], { type: mime });\n const url = URL.createObjectURL(blob);\n (rt.objectUrls ??= []).push(url);\n const au = document.createElement(\"audio\");\n au.src = url;\n au.loop = layer.soundprops?.playbackmode === \"loop\";\n au.volume = Math.max(0, Math.min(1, layer.soundprops?.volume ?? 1));\n au.muted = cfg.muted !== false;\n layer.soundCtl = {\n play() {\n if (au.ended) {\n try {\n au.currentTime = 0;\n } catch {\n }\n }\n void au.play().catch(() => {\n });\n },\n pause() {\n au.pause();\n },\n stop() {\n au.pause();\n try {\n au.currentTime = 0;\n } catch {\n }\n },\n isPlaying: () => !au.paused && !au.ended,\n getVolume: () => au.volume,\n setVolume: (v) => {\n au.volume = Math.max(0, Math.min(1, v));\n }\n };\n if (!layer.soundprops?.startsilent && !rt.paused) {\n void au.play().catch(() => {\n });\n }\n soundAudios.push(au);\n break;\n }\n } catch (e) {\n console.warn(`声音图层 ${layer.name} 加载失败: ${e.message}`);\n }\n }\n const setSceneVolume = (vol) => {\n for (const au of soundAudios) {\n au.volume = Math.max(0, Math.min(1, vol));\n au.muted = vol <= 0;\n }\n };\n rt.sceneAudio = { setVolume: setSceneVolume, audios: soundAudios };\n if (disposed) return;\n let lastPt = performance.now();\n let particleDiagFrame = 0;\n renderer.setParticleRenderer(\n // advanceFn:每帧推进所有粒子系统(在图层迭代前统一调用)\n () => {\n const now = performance.now();\n const pdt = Math.min(0.05, (now - lastPt) / 1e3);\n lastPt = now;\n if (pointerSrc.state.has) {\n const { wx, wy, originY } = pointerSrc.state;\n const py = originY != null ? originY : wy;\n for (const ps of particleSystems) ps.setPointer(wx, py);\n }\n for (const ps of particleSystems) ps.advance(pdt, audioSim.enabled ? simAudio.snapshot : null);\n if (particleDiagFrame < 2) {\n particleDiagFrame++;\n if (particleDiagFrame === 2) {\n const live = particleSystems.reduce((s, ps) => s + ps.liveCount(), 0);\n reportDiag(rt, cfg, `particles live: ${live} across ${particleSystems.length} systems`);\n }\n }\n },\n // renderByLayerFn:按图层 id 渲染该层对应的粒子系统。\n // cam.projW/projH 必须透传:particles.render 用 projH 做世界 y 向下 → 投影空间的翻转。\n (layerId, cam, viewProj, w, h) => {\n if (layerId === void 0) return;\n const list = particleSystemsByLayer.get(layerId);\n if (!list) return;\n for (const ps of list) ps.render(viewProj, w, h, cam.projW, cam.projH);\n }\n );\n reportDiag(\n rt,\n cfg,\n `particles: ${particleSystems.length} systems, ${builtinTexCount} builtin tex generated`\n );\n window.__particleStats = () => particleSystems.map((ps) => {\n let live = 0;\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n let minS = Infinity;\n let maxS = -Infinity;\n for (const p of ps.pool) {\n if (!p.alive) continue;\n live++;\n const px = ps.originX + p.x * ps.scaleX;\n const py = ps.originY + p.y * ps.scaleY;\n if (px < minX) minX = px;\n if (px > maxX) maxX = px;\n if (py < minY) minY = py;\n if (py > maxY) maxY = py;\n const s = Math.abs(p.size) * ps.sysScale;\n if (s < minS) minS = s;\n if (s > maxS) maxS = s;\n }\n return {\n live,\n max: ps.maxCount,\n blend: ps.blend,\n renderer: ps.renderers.map((r) => r.kind).join(\"+\"),\n origin: [Math.round(ps.originX), Math.round(ps.originY)],\n bbox: live ? [Math.round(minX), Math.round(minY), Math.round(maxX), Math.round(maxY)] : null,\n size: live ? [Math.round(minS), Math.round(maxS)] : null\n };\n });\n window.__particleToggle = (on, onlyIndex) => {\n for (let i = 0; i < particleSystems.length; i++) {\n particleSystems[i].setVisible(onlyIndex === void 0 ? on : i === onlyIndex);\n }\n return particleSystems.length;\n };\n const mdlItems = [];\n const boneOverridesByLayer = /* @__PURE__ */ new Map();\n const getBoneOverrides = (l) => {\n if (!l || !l.puppet) return null;\n let m = boneOverridesByLayer.get(l);\n if (!m) {\n m = /* @__PURE__ */ new Map();\n boneOverridesByLayer.set(l, m);\n }\n return m;\n };\n for (const layer of scene.layers) {\n if (!layer.image) continue;\n if (SKIP_3D_MODELS) ;\n try {\n if (eff.BUILTIN_MODELS[layer.image]) continue;\n const modelEntry = pkg.getEntry(parsedPkg, layer.image);\n if (!modelEntry) continue;\n const model = JSON.parse(readText(modelEntry));\n if (!model.puppet) continue;\n const mdlEntry = pkg.getEntry(parsedPkg, model.puppet);\n if (!mdlEntry) continue;\n const mdlObj = mdl.parseMDL(new Uint8Array(mdlEntry));\n const texObj = layer.textureName ? textures.get(layer.textureName) : null;\n if (!texObj) {\n reportDiag(rt, cfg, `puppet '${layer.name}' 无贴图,跳过`);\n continue;\n }\n layer.puppet = mdlObj;\n mdlItems.push({ mdl: mdlObj, tex: texObj, layer });\n const an = mdlObj.animations[0];\n reportDiag(\n rt,\n cfg,\n `puppet '${layer.name}' v=${mdlObj.vertexCount} bones=${mdlObj.bones.length}` + (an ? ` anim='${an.name}' ${an.fps}fps×${an.frameCount}` : \" 无动画\")\n );\n } catch (e) {\n console.warn(`puppet 图层 ${layer.name} 加载失败: ${e.message}`);\n reportDiag(rt, cfg, `puppet '${layer.name}' 失败: ${e.message}`);\n }\n }\n for (const layer of scene.layers) {\n if (!layer.model) continue;\n if (SKIP_3D_MODELS) ;\n if (layer.puppet) continue;\n try {\n const mdlEntry = pkg.getEntry(parsedPkg, layer.model);\n if (!mdlEntry) continue;\n const mdlObj = mdl.parseMDL(new Uint8Array(mdlEntry));\n let texName = null;\n if (mdlObj.materialPath) {\n const matEntry = pkg.getEntry(parsedPkg, mdlObj.materialPath);\n if (matEntry) {\n const material = JSON.parse(readText(matEntry));\n const tex2 = material?.passes?.[0]?.textures?.[0];\n if (typeof tex2 === \"string\" && tex2) texName = tex2;\n }\n }\n if (texName) {\n await loadTex(texName);\n layer.textureName = texName;\n }\n const texObj = texName ? textures.get(texName) : null;\n if (!texObj) {\n reportDiag(rt, cfg, `model '${layer.name}' 无贴图,跳过`);\n continue;\n }\n layer.puppet = mdlObj;\n mdlItems.push({ mdl: mdlObj, tex: texObj, layer });\n reportDiag(\n rt,\n cfg,\n `model '${layer.name}' v=${mdlObj.vertexCount} static ${mdlObj.materialPath || \"\"}`\n );\n } catch (e) {\n console.warn(`model 图层 ${layer.name} 加载失败: ${e.message}`);\n reportDiag(rt, cfg, `model '${layer.name}' 失败: ${e.message}`);\n }\n }\n let mdlRenderer = null;\n if (mdlItems.length > 0) {\n try {\n mdlRenderer = mdl.createMDLRenderer(renderer.gl);\n for (const item of mdlItems) mdlRenderer.upload(item.mdl);\n const byLayer = /* @__PURE__ */ new Map();\n for (const item of mdlItems) byLayer.set(item.layer, item);\n renderer.setPuppetRenderer((layer, mvp, o) => {\n const item = byLayer.get(layer);\n if (!item) return;\n mdlRenderer.draw(\n mvp,\n item.mdl,\n {\n time: o.time,\n animLayers: layer.animationLayers,\n // [we-scene patch] 脚本层的骨骼平移覆写(thisLayer.setBoneTransform)。\n // 骨骼拖拽壁纸的 puppet 动画数为 0,蒙皮完全由脚本驱动,\n // 所以这个表是它们唯一的形变来源。\n boneOverrides: boneOverridesByLayer.get(layer),\n // [we-scene patch] 效果链输出(贴图空间的合成结果)。\n // 无效果链时为 null,网格照常采样原始贴图。\n overrideTex: o.overrideTex || null,\n color: [\n layer.color[0] * layer.brightness,\n layer.color[1] * layer.brightness,\n layer.color[2] * layer.brightness,\n layer.alpha\n ]\n },\n item.tex\n );\n });\n } catch (e) {\n console.warn(`puppet 渲染器初始化失败: ${e.message}`);\n reportDiag(rt, cfg, `puppet renderer 失败: ${e.message}`);\n mdlRenderer = null;\n for (const item of mdlItems) item.layer.puppet = null;\n }\n }\n if (disposed) return;\n reportDiag(rt, cfg, `puppet: ${mdlItems.length} meshes`);\n const attachFollows = mdl.applyAttachmentBindOrigins(scene.layers);\n if (attachFollows.length) {\n reportDiag(rt, cfg, `attachments: ${attachFollows.length} hanging layers`);\n }\n const textWidgets = [];\n const textLayerText = /* @__PURE__ */ new Map();\n const textShared = {};\n let textCanvas = null;\n let textCtx = null;\n let textEvalDue = 0;\n if (!SKIP_TEXT && scene.layers.some((l) => l.isText)) {\n const ortho = scene.general?.orthogonalprojection;\n const projW = ortho?.width || c.width;\n const projH = ortho?.height || c.height;\n const win0 = fitWindow(normalizeFit(rt.cfg.fit), projW, projH, c.width, c.height);\n const quality = Math.min(3, Math.max(0.5, c.width / Math.max(1, win0.viewW)));\n const fontFamilies = /* @__PURE__ */ new Map();\n const fontPaths = /* @__PURE__ */ new Set();\n for (const l of scene.layers) if (l.isText && l.textFont) fontPaths.add(l.textFont);\n for (const e of parsedPkg.entries || []) {\n if (typeof e.name === \"string\" && /^fonts\\/.+\\.(ttf|otf|woff2?)$/i.test(e.name)) fontPaths.add(e.name);\n }\n for (const fp of fontPaths) {\n const cached = fontFaceCache.get(`${cfg.src}|${fp}`);\n if (cached) {\n fontFamilies.set(fp, cached);\n continue;\n }\n const sys = SYSTEM_FONT_FAMILIES[fp.toLowerCase()];\n if (sys) {\n fontFamilies.set(fp, sys);\n continue;\n }\n try {\n const fe = pkg.getEntry(parsedPkg, fp);\n if (!fe) continue;\n const fam = \"wefont_\" + fp.split(\"/\").pop().replace(/[^a-zA-Z0-9]/g, \"_\");\n const url = URL.createObjectURL(new Blob([fe]));\n const ff = new FontFace(fam, `url(${url})`);\n await ff.load();\n document.fonts.add(ff);\n (rt.objectUrls ??= []).push(url);\n fontFamilies.set(fp, fam);\n fontFaceCache.set(`${cfg.src}|${fp}`, fam);\n } catch (e) {\n console.warn(`字体加载失败 ${fp}: ${e.message}`);\n }\n }\n textCanvas = document.createElement(\"canvas\");\n textCtx = textCanvas.getContext(\"2d\");\n const MAX_TEX = 2048;\n for (const layer of scene.layers) {\n if (!layer.isText) continue;\n try {\n const item = {\n layer,\n sandbox: null,\n texName: \"__wstext_\" + layer.id,\n entry: null,\n lastKey: null,\n quality\n };\n if (layer.textScript) {\n item.sandbox = wtext.evalTextScript(layer.textScript, layer.textScriptProps, {\n text: layer.text ?? \"\",\n font: layer.textFont || \"\",\n pointsize: layer.textPointsize,\n color: layer.textColor,\n angles: layer.angles,\n origin: layer.origin,\n scale: layer.scale,\n visible: layer.visible,\n canvasSize: { width: projW, height: projH },\n userProperties: liveUserProps,\n shared: textShared,\n audioViews,\n inputView,\n // [we-scene patch] 文字脚本此前没有真定时器(no-op stub),\n // 与对象/效果开关/常量/general 统一走 engineTimers(P1-1)。\n ...timerOpts,\n mediaControl,\n windowTitle: simWindow.snapshot,\n openUserShortcut: shortcuts.openUserShortcut,\n getLayerText: (name) => textLayerText.get(name),\n onError: (e) => {\n reportDiag(rt, cfg, `text script '${layer.name}' 失败: ${String(e.message || e).slice(0, 120)}`);\n }\n });\n if (item.sandbox) {\n propSandboxes.push(item.sandbox);\n item.sandbox.init();\n item.sandbox.applyUserProperties(liveUserProps);\n if (item.sandbox.hasMediaHook) registerMediaHook(item.sandbox);\n }\n }\n textLayerText.set(layer.name || \"\", String(layer.text ?? \"\"));\n if (layer.textAnchor !== \"center\" && layer.size[0] > 0 && layer.size[1] > 0) {\n const hw = layer.size[0] * (layer.scale[0] || 1) / 2;\n const hh = layer.size[1] * (layer.scale[1] || 1) / 2;\n const a = layer.textAnchor;\n if (a.includes(\"left\")) layer.origin[0] += hw;\n if (a.includes(\"right\")) layer.origin[0] -= hw;\n if (a.includes(\"top\")) layer.origin[1] -= hh;\n if (a.includes(\"bottom\")) layer.origin[1] += hh;\n }\n const em0 = TEXT_EM_SCALE * Math.max(1, layer.textPointsize);\n const marginCap = wtext.textLayerHasTintMask(layer) ? 8 : 256;\n const margin = Math.min(marginCap, wtext.textCanvasMargin(em0, 0));\n item.boxW = layer.size[0] > 0 ? layer.size[0] : em0 * 4;\n item.boxH = layer.size[1] > 0 ? layer.size[1] : em0 * 1.6;\n item.margin = margin;\n layer.size = [item.boxW + margin * 2, item.boxH + margin * 2];\n item.entry = {\n glTex: rnd.makeTexture(renderer.gl, new Uint8Array([0, 0, 0, 0]), 1, 1),\n width: 1,\n height: 1,\n rg88: false\n };\n textures.set(item.texName, item.entry);\n layer.textureName = item.texName;\n layer.solid = false;\n textWidgets.push(item);\n } catch (e) {\n console.warn(`文字对象 ${layer.name} 初始化失败: ${e.message}`);\n }\n }\n if (textWidgets.length > 0) {\n const prevCleanup = particleCleanup;\n particleCleanup = () => {\n prevCleanup?.();\n for (const it of textWidgets) renderer.gl.deleteTexture(it.entry.glTex);\n };\n }\n const updateTexts = (t) => {\n if (!textCtx || !textCanvas) return;\n const ctx = textCtx;\n for (const it of textWidgets) {\n const layer = it.layer;\n let content = String(layer.text ?? \"\");\n if (it.sandbox && it.sandbox.hasUpdate) {\n it.sandbox.engine.runtime = t;\n const r = it.sandbox.callUpdate(content);\n if (r !== null && r !== void 0) content = String(r);\n else if (it.sandbox.thisLayer.text) content = String(it.sandbox.thisLayer.text);\n } else if (it.sandbox && typeof it.sandbox.thisLayer?.text === \"string\") {\n content = String(it.sandbox.thisLayer.text);\n }\n textLayerText.set(layer.name || \"\", content);\n if (!layer.visible) continue;\n const pts = Math.max(1, it.sandbox ? it.sandbox.thisLayer.pointsize : layer.textPointsize);\n const fontPath = it.sandbox && it.sandbox.thisLayer.font || layer.textFont || \"\";\n const key = `${content}\\0${pts}\\0${fontPath}\\0${layer.alpha}\\0${layer.textCastshadow}`;\n if (it.lastKey === key) continue;\n it.lastKey = key;\n try {\n const em = TEXT_EM_SCALE * pts;\n const bw = it.boxW;\n const bh = it.boxH;\n const M = it.margin;\n const sx = Math.abs(layer.scale[0] || 1);\n const sy = Math.abs(layer.scale[1] || 1);\n let cw = Math.max(1, Math.round(layer.size[0] * sx * it.quality));\n let ch = Math.max(1, Math.round(layer.size[1] * sy * it.quality));\n const shrink = Math.min(1, MAX_TEX / Math.max(cw, ch));\n cw = Math.max(1, Math.round(cw * shrink));\n ch = Math.max(1, Math.round(ch * shrink));\n if (textCanvas.width !== cw || textCanvas.height !== ch) {\n textCanvas.width = cw;\n textCanvas.height = ch;\n } else {\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.clearRect(0, 0, cw, ch);\n }\n const k = Math.min(cw / layer.size[0], ch / layer.size[1]);\n ctx.setTransform(k, 0, 0, k, 0, 0);\n ctx.translate(M, M);\n const fam = fontPath ? fontFamilies.get(fontPath) || \"sans-serif\" : \"sans-serif\";\n ctx.font = `${em}px \"${fam}\", sans-serif`;\n const met = ctx.measureText(\"\");\n const fontH = (met.fontBoundingBoxAscent || 0) + (met.fontBoundingBoxDescent || 0);\n const spacing = layer.textSpacing || [0, 0];\n const layout = wtext.layoutText(content, {\n boxW: bw,\n boxH: bh,\n pointsize: em,\n lineHeight: (fontH > 0 ? fontH : em * 1.25) + spacing[1],\n spacing,\n padding: layer.textPadding || 0,\n maxwidth: layer.textMaxwidth || 0,\n limitwidth: !!layer.textLimitwidth,\n maxrows: layer.textMaxrows || 0,\n limitrows: !!layer.textLimitrows,\n limituseellipsis: !!layer.textLimituseellipsis,\n halign: layer.textHAlign,\n valign: layer.textVAlign\n }, (s) => ctx.measureText(s).width);\n wtext.drawTextLayer(ctx, layout, {\n font: ctx.font,\n color: layer.textColor,\n alpha: layer.alpha,\n brightness: layer.brightness,\n spacing,\n pointsize: em,\n opaquebackground: !!layer.textOpaquebackground,\n backgroundcolor: layer.textBackgroundcolor,\n backgroundbrightness: layer.textBackgroundbrightness,\n castshadow: !!layer.textCastshadow\n });\n const entry = it.entry;\n renderer.gl.bindTexture(renderer.gl.TEXTURE_2D, entry.glTex);\n renderer.gl.texImage2D(renderer.gl.TEXTURE_2D, 0, renderer.gl.RGBA, renderer.gl.RGBA, renderer.gl.UNSIGNED_BYTE, textCanvas);\n entry.width = cw;\n entry.height = ch;\n } catch (e) {\n console.warn(`文字对象 ${layer.name} 绘制失败: ${e.message}`);\n it.lastKey = null;\n }\n }\n };\n rt.sceneTextUpdate = updateTexts;\n window.__textWidgets = textWidgets;\n reportDiag(\n rt,\n cfg,\n `text widgets: ${textWidgets.length} (scripts ${textWidgets.filter((i) => i.sandbox).length}, fonts ${fontFamilies.size}, quality ${quality.toFixed(2)})`\n );\n }\n if (disposed) return;\n const objectScriptRuns = [];\n const animRuns = [];\n const generalAnimRuns = [];\n const sceneNamedAnims = {};\n const effectVisibleRuns = [];\n const generalScriptRuns = [];\n const cursorHooks = /* @__PURE__ */ new Map();\n const addCursorHook = (layer, sandbox) => {\n if (!sandbox || typeof sandbox.callCursor !== \"function\") return;\n if (!sandbox.hasCursorHook) return;\n const list = cursorHooks.get(layer);\n if (list) list.push(sandbox);\n else cursorHooks.set(layer, [sandbox]);\n };\n for (const it of textWidgets) {\n if (it.sandbox) addCursorHook(it.layer, it.sandbox);\n }\n {\n const ortho = scene.general?.orthogonalprojection;\n const objProjW = ortho?.width || c.width;\n const objProjH = ortho?.height || c.height;\n const objUserProps = liveUserProps;\n const writeGeneralField = (field, v) => {\n const g = scene.general || {};\n if (field === \"zoom\" && typeof v === \"number\" && Number.isFinite(v) && v > 0) {\n scene.cameraTransforms.zoom = v;\n if (g.zoom && typeof g.zoom === \"object\") g.zoom.value = v;\n else g.zoom = v;\n return;\n }\n if (g[field] && typeof g[field] === \"object\" && \"value\" in g[field]) g[field].value = v;\n else g[field] = v;\n };\n let nextLayerId = 1 + Math.max(0, ...scene.layers.map((l) => Number(l.id) || 0));\n const sceneApi = {\n recomputeVisibility,\n getSceneLayer: (name) => scene.layers.find((l) => l.name === name && !l.destroyed) || null,\n getSceneLayerById: (id) => scene.layers.find((l) => l.id === id && !l.destroyed) || null,\n enumerateSceneLayers: () => scene.layers.filter((l) => !l.destroyed),\n getSceneAnimation: (name) => {\n if (name == null || name === \"\") return null;\n if (sceneNamedAnims[name]) return sceneNamedAnims[name];\n for (const l of scene.layers) {\n if (l.animations && l.animations[name]) return l.animations[name];\n }\n return null;\n },\n cameraTransforms: scene.cameraTransforms,\n getInitialLayerConfig: (arg) => {\n const name = arg && typeof arg === \"object\" ? arg.name : String(arg || \"\");\n return scene.layers.find((l) => l.name === name) || null;\n },\n createSceneLayer: (layerCfg) => {\n let src = layerCfg && typeof layerCfg === \"object\" ? layerCfg : null;\n if (typeof layerCfg === \"string\") {\n const imagePath = layerCfg;\n src = scene.layers.find(\n (l) => l && !l.destroyed && l.image === imagePath && l.textureName\n ) || scene.layers.find(\n (l) => l && !l.destroyed && l.image === imagePath\n ) || null;\n if (!src) {\n reportDiag(\n rt,\n cfg,\n `createLayer('${imagePath}') 找不到已加载的同模型层`\n );\n return null;\n }\n }\n if (!src) src = {};\n const clone = {\n ...src,\n id: nextLayerId++,\n origin: Array.isArray(src.origin) ? src.origin.slice() : [0, 0, 0],\n scale: Array.isArray(src.scale) ? src.scale.slice() : [1, 1, 1],\n angles: Array.isArray(src.angles) ? src.angles.slice() : [0, 0, 0],\n size: Array.isArray(src.size) ? src.size.slice() : [0, 0],\n color: Array.isArray(src.color) ? src.color.slice() : [1, 1, 1],\n childIds: null,\n hasChildren: false,\n destroyed: false,\n animations: {},\n animationList: [],\n // 克隆条不要再跑模板层的 objectScripts(否则 64 根各自再造 64 根)\n objectScripts: null\n };\n delete clone.textureAnimation;\n delete clone.videoTextureApi;\n delete clone.soundCtl;\n delete clone.videoCtl;\n if (Array.isArray(src.effects)) {\n clone.effects = src.effects.map((e) => ({\n ...e,\n passes: Array.isArray(e.passes) ? e.passes.map((p) => ({ ...p })) : e.passes\n }));\n }\n scene.layers.push(clone);\n return clone;\n },\n mediaControl,\n windowTitle: simWindow.snapshot,\n openUserShortcut: shortcuts.openUserShortcut,\n isScreensaver: false\n };\n renderer.setConstantScriptRuntime?.(wtext.evalObjectScript, {\n userProperties: objUserProps,\n audioViews,\n shared: textShared,\n inputView,\n // [we-scene patch] 效果常量的延时逻辑(全库 8 处)。renderer 侧\n // setConstantScriptRuntime 只提取白名单字段,timers 单独透传。\n timers: engineTimers,\n ...sceneApi,\n onSandbox: (sb) => {\n if (sb && sb.hasMediaHook) registerMediaHook(sb);\n }\n });\n for (const layer of scene.layers) {\n const defs = layer.objectAnimations;\n if (!defs) continue;\n layer.animations = layer.animations || {};\n layer.animationList = layer.animationList || [];\n for (const [field, def] of Object.entries(defs)) {\n try {\n const ctrl = anim.createAnimation(def.animation);\n ctrl.field = field;\n ctrl.baseValue = def.value;\n const live = layer[field];\n ctrl.baseNumeric = Array.isArray(live) ? live.slice() : live;\n layer.animationList.push(ctrl);\n if (ctrl.name) layer.animations[ctrl.name] = ctrl;\n animRuns.push({ layer, field, ctrl });\n } catch (e) {\n reportDiag(rt, cfg, `animation '${layer.name}.${field}' 建控制器失败: ${String(e.message).slice(0, 80)}`);\n }\n }\n }\n for (const layer of scene.layers) {\n for (const [ei, effect] of (layer.effects || []).entries()) {\n const vs = effect.visibleScript;\n if (!vs) continue;\n try {\n const sandbox = wtext.evalObjectScript(vs.script, vs.scriptproperties, {\n canvasSize: { width: objProjW, height: objProjH },\n userProperties: objUserProps,\n audioViews,\n inputView,\n // [we-scene patch] 效果开关是定时器的最大挂点(全库 37 处:\n // 延迟显隐、播放状态轮换),此前全部拿 no-op stub。\n ...timerOpts,\n layer,\n targetEffect: effect,\n ...sceneApi,\n shared: textShared,\n onError: (e) => reportDiag(rt, cfg, `effect visible script '${layer.name}#${ei}' 失败: ${String(e.message || e).slice(0, 80)}`)\n });\n if (!sandbox) continue;\n propSandboxes.push(sandbox);\n sandbox.init(effect.visible);\n sandbox.applyUserProperties(objUserProps);\n if (sandbox.hasMediaHook) registerMediaHook(sandbox);\n if (sandbox.hasUpdate) effectVisibleRuns.push({ effect, sandbox });\n } catch (e) {\n console.warn(`效果开关脚本 ${layer.name}#${ei} 求值失败: ${e.message}`);\n }\n }\n const scripts = layer.objectScripts;\n if (!scripts) continue;\n for (const [field, def] of Object.entries(scripts)) {\n try {\n const sandbox = wtext.evalObjectScript(def.script, def.scriptproperties, {\n canvasSize: { width: objProjW, height: objProjH },\n screenResolution: { x: c.clientWidth || window.innerWidth || 1, y: c.clientHeight || window.innerHeight || 1 },\n timeOfDay: (() => {\n const d = /* @__PURE__ */ new Date();\n return (d.getHours() * 3600 + d.getMinutes() * 60 + d.getSeconds()) / 86400;\n })(),\n userProperties: objUserProps,\n audioViews,\n inputView,\n // thisLayer / thisScene.getLayer:拖拽类回调靠它们写回图层\n layer,\n ...sceneApi,\n // 骨骼 API 的覆写表(按图层)\n getBoneOverrides,\n shared: textShared,\n // [we-scene patch] WE 的 engine.setTimeout 返回**取消函数**句柄:\n // 语料写 `lastHideEvent = engine.setTimeout(...)` 之后\n // `lastHideEvent()` 直接调用它来取消(3790189808 的延时隐藏封面)。\n // 五个 eval 点统一走 engineTimers(SCENESCRIPT-PLAN P1-1),\n // 句柄语义与卸载 dispose 见 render/engine-timers.js。\n ...timerOpts,\n onError: (e) => reportDiag(rt, cfg, `object script '${layer.name}.${field}' 失败: ${String(e.message || e).slice(0, 90)}`)\n });\n if (sandbox) {\n propSandboxes.push(sandbox);\n const fieldVal = layer[field];\n const initArg = field === \"angles\" && Array.isArray(fieldVal) ? wtext.radToScriptAngles(fieldVal) : Array.isArray(fieldVal) ? { x: fieldVal[0] ?? 0, y: fieldVal[1] ?? 0, z: fieldVal[2] ?? 0 } : fieldVal;\n sandbox.init(initArg);\n sandbox.applyUserProperties(objUserProps);\n addCursorHook(layer, sandbox);\n if (sandbox.hasMediaHook) registerMediaHook(sandbox);\n if (sandbox.hasUpdate) {\n objectScriptRuns.push({\n layer,\n field,\n kind: field === \"visible\" ? \"bool\" : field === \"alpha\" || field === \"brightness\" ? \"scalar\" : \"vec3\",\n sandbox\n });\n }\n }\n } catch (e) {\n console.warn(`对象脚本 ${layer.name}.${field} 求值失败: ${e.message}`);\n }\n }\n }\n const generalScripts = scene.generalScripts;\n if (generalScripts) {\n for (const [field, def] of Object.entries(generalScripts)) {\n try {\n const sandbox = wtext.evalObjectScript(def.script, def.scriptproperties, {\n canvasSize: { width: objProjW, height: objProjH },\n userProperties: objUserProps,\n audioViews,\n inputView,\n ...timerOpts,\n ...sceneApi,\n shared: textShared,\n onError: (e) => reportDiag(rt, cfg, `general script '${field}' 失败: ${String(e.message || e).slice(0, 80)}`)\n });\n if (!sandbox) continue;\n propSandboxes.push(sandbox);\n sandbox.init(def.value);\n sandbox.applyUserProperties(objUserProps);\n if (sandbox.hasMediaHook) registerMediaHook(sandbox);\n const write = (v) => writeGeneralField(field, v);\n if (sandbox.hasUpdate) generalScriptRuns.push({ field, sandbox, write });\n } catch (e) {\n console.warn(`general 脚本 ${field} 求值失败: ${e.message}`);\n }\n }\n if (generalScriptRuns.length) {\n reportDiag(rt, cfg, `general scripts: ${generalScriptRuns.map((r) => r.field).join(\",\")}`);\n }\n }\n const generalAnims = scene.generalAnimations;\n if (generalAnims) {\n for (const [field, def] of Object.entries(generalAnims)) {\n try {\n const ctrl = anim.createAnimation(def.animation);\n ctrl.field = field;\n ctrl.baseValue = def.value;\n ctrl.baseNumeric = def.value;\n if (ctrl.name) sceneNamedAnims[ctrl.name] = ctrl;\n generalAnimRuns.push({ field, ctrl, write: (v) => writeGeneralField(field, v) });\n } catch (e) {\n reportDiag(rt, cfg, `general animation '${field}' 建控制器失败: ${String(e.message).slice(0, 80)}`);\n }\n }\n if (generalAnimRuns.length) {\n reportDiag(rt, cfg, `general animations: ${generalAnimRuns.map((r) => r.field).join(\",\")}`);\n }\n }\n }\n if (objectScriptRuns.length) {\n reportDiag(rt, cfg, `object scripts: ${objectScriptRuns.length}`);\n window.__objScripts = objectScriptRuns;\n }\n window.__mediaHooks = mediaHooks;\n window.__compositeStats = () => renderer.compositeStats?.() ?? null;\n window.__compositeEnable = (on) => renderer.setCompositeEnabled?.(on);\n window.__scene = scene;\n window.__textures = textures;\n const cursorLayers = Array.from(cursorHooks.keys());\n if (cursorLayers.length) {\n reportDiag(rt, cfg, `cursor hooks: ${cursorLayers.length} layers`);\n }\n let hoveredLayer = null;\n let pressedLayer = null;\n let lastLeftDown = false;\n const makeCursorEvent = () => ({\n worldPosition: wtext.makeCursorEventVec(\n pointerSrc.state.wx,\n pointerSrc.state.originY != null ? pointerSrc.state.originY : pointerSrc.state.wy,\n 0\n )\n });\n const fire = (layer, name, ev) => {\n const list = cursorHooks.get(layer);\n if (!list) return;\n for (const sb of list) sb.callCursor(name, ev);\n };\n const dispatchCursor = () => {\n if (cursorLayers.length === 0) return;\n const p = pointerSrc.state;\n if (!p.has) return;\n const par = renderer.getParallaxOffset ? renderer.getParallaxOffset() : { x: 0, y: 0 };\n const projH = scene.general?.orthogonalprojection?.height || c.height;\n const hit = hitTest.hitTestLayers(scene.layers, p.wx, p.wy, projH, {\n parOffX: par.x,\n parOffY: par.y,\n alignTable: rnd.ALIGN,\n // 只在挂了回调的图层里找命中 —— 否则上方任何一个全屏背景层都会把\n // 指针「挡住」,下方真正的交互层永远收不到 enter。\n filter: (l) => cursorHooks.has(l)\n });\n const ev = makeCursorEvent();\n if (hit !== hoveredLayer) {\n if (hoveredLayer) fire(hoveredLayer, \"cursorLeave\", ev);\n hoveredLayer = hit;\n if (hit) fire(hit, \"cursorEnter\", ev);\n }\n if (hit) fire(hit, \"cursorMove\", ev);\n if (p.leftDown && !lastLeftDown) {\n pressedLayer = hit;\n if (hit) fire(hit, \"cursorDown\", ev);\n } else if (!p.leftDown && lastLeftDown) {\n if (pressedLayer) fire(pressedLayer, \"cursorUp\", ev);\n if (pressedLayer && pressedLayer === hit) fire(hit, \"cursorClick\", ev);\n pressedLayer = null;\n }\n lastLeftDown = p.leftDown;\n };\n const start = performance.now();\n let pauseAccum = 0;\n let pauseStarted = 0;\n const playingVideos = [];\n const playingAudios = [];\n let lastRender = -Infinity;\n const renderLoop = (now) => {\n if (disposed || rt.paused) return;\n const fps = rt.cfg.sceneFps || 60;\n const interval = 1e3 / fps;\n if (now - lastRender >= interval) {\n lastRender = now;\n markFrame(rt, now);\n if (rt.onFirstFrame) {\n const first = rt.onFirstFrame;\n rt.onFirstFrame = void 0;\n first();\n }\n syncCanvasSize(rt, c, rt.cfg);\n const t = (now - start - pauseAccum) / 1e3;\n inputView.update(pointerSrc.state);\n if (mediaSim.enabled) {\n simMedia.update(t);\n const evts = media.diffMediaEvents(lastMediaSnap, simMedia.snapshot);\n if (evts.length) {\n for (const { name, event } of evts) {\n for (const sb of mediaHooks) {\n if (sb.disabled) continue;\n sb.callMedia(name, event);\n }\n }\n lastMediaSnap = media.cloneMediaSnapshot(simMedia.snapshot);\n }\n }\n simWindow.update(t);\n for (const run of animRuns) {\n run.ctrl.advance(interval / 1e3);\n const field = run.field;\n const out = run.ctrl.applyTo(run.ctrl.baseNumeric);\n if (Array.isArray(out)) {\n const cur = run.layer[field];\n if (Array.isArray(cur)) for (let i = 0; i < out.length && i < cur.length; i++) cur[i] = out[i];\n } else if (Number.isFinite(out)) {\n if (field === \"visible\") run.layer[field] = !!out;\n else run.layer[field] = out;\n }\n }\n for (const run of generalAnimRuns) {\n run.ctrl.advance(interval / 1e3);\n const out = run.ctrl.applyTo(run.ctrl.baseNumeric);\n if (typeof out === \"number\" && Number.isFinite(out)) run.write(out);\n else if (Array.isArray(out) && Number.isFinite(out[0])) run.write(out[0]);\n }\n for (const run of effectVisibleRuns) {\n if (run.sandbox.disabled) continue;\n run.sandbox.engine.frametime = interval / 1e3;\n run.sandbox.engine.runtime = t;\n const ret = run.sandbox.callUpdate(!!run.effect.visible);\n if (typeof ret === \"boolean\") run.effect.visible = ret;\n }\n for (const run of generalScriptRuns) {\n if (run.sandbox.disabled) continue;\n run.sandbox.engine.frametime = interval / 1e3;\n run.sandbox.engine.runtime = t;\n const g = scene.general || {};\n const cur = g[run.field] && typeof g[run.field] === \"object\" && \"value\" in g[run.field] ? g[run.field].value : g[run.field];\n const ret = run.sandbox.callUpdate(cur);\n if (ret !== void 0) run.write(ret);\n }\n const screenRes = { x: c.clientWidth || window.innerWidth || 1, y: c.clientHeight || window.innerHeight || 1 };\n let visibilityDirty = false;\n for (const run of objectScriptRuns) {\n if (run.sandbox.disabled) continue;\n run.sandbox.engine.frametime = interval / 1e3;\n run.sandbox.engine.runtime = t;\n run.sandbox.engine.screenResolution = screenRes;\n const cur = run.layer[run.field];\n if (run.kind === \"bool\") {\n const ret = run.sandbox.callUpdate(!!cur);\n if (typeof ret === \"boolean\") {\n if (run.field === \"visible\") {\n if (run.layer.visibleSelf !== ret) {\n run.layer.visibleSelf = ret;\n visibilityDirty = true;\n }\n } else {\n run.layer[run.field] = ret;\n }\n }\n } else if (run.kind === \"scalar\") {\n const ret = run.sandbox.callUpdate(Number(cur) || 0);\n const n = Number(ret);\n if (Number.isFinite(n)) run.layer[run.field] = n;\n } else {\n const v = run.field === \"angles\" ? wtext.radToScriptAngles(cur) : { x: cur[0] || 0, y: cur[1] || 0, z: cur[2] || 0 };\n const ret = run.sandbox.callUpdate(v);\n const o = ret && typeof ret === \"object\" && \"x\" in ret ? ret : v;\n run.layer[run.field] = run.field === \"angles\" ? wtext.scriptAnglesToRad(o) : [o.x || 0, o.y || 0, o.z || 0];\n }\n }\n if (visibilityDirty) recomputeVisibility();\n if (audioSim.enabled) {\n simAudio.update(t);\n fillAudioBuffers(audioViews, simAudio.snapshot);\n }\n if (attachFollows.length) {\n mdl.followAttachments(attachFollows, t, getBoneOverrides);\n }\n const peek = rt.coverAlign;\n void renderer.render(scene, textures, c.width, c.height, t, normalizeFit(rt.cfg.fit), peek.x, peek.y).then(() => {\n if (disposed || rt.paused) return;\n try {\n dispatchCursor();\n } catch (e) {\n }\n pointerSrc.beginFrame();\n try {\n if (rt.sceneTextUpdate && now >= textEvalDue) {\n textEvalDue = now + 100;\n rt.sceneTextUpdate(t);\n }\n } catch (e) {\n }\n rt.raf = requestAnimationFrame(renderLoop);\n }).catch((e) => {\n console.warn(\"scene render error:\", e);\n reportDiag(rt, cfg, `render: ${String(e.message || e).slice(0, 200)}`);\n disposed = true;\n });\n } else {\n if (!rt.paused) rt.raf = requestAnimationFrame(renderLoop);\n }\n };\n const kickLoop = () => {\n if (disposed || rt.paused) return;\n if (rt.raf !== void 0) return;\n rt.raf = requestAnimationFrame(renderLoop);\n };\n const applyLiveProps = (wire) => {\n if (disposed) return;\n const properties = scene.properties || {};\n const changed = mergeUserPropertyValues(properties, liveUserProps, wire);\n if (!Object.keys(changed).length) return;\n for (const layer of scene.layers) {\n const src = layer.srcObject;\n if (!src) continue;\n resolveUserProps(src, properties, 0);\n const uVis = boundUserName(src.visible);\n if (uVis && uVis in changed) {\n layer.visibleSelf = scn.parseBool(src.visible, true);\n }\n const uCol = boundUserName(src.color);\n if (uCol && uCol in changed) {\n layer.color = scn.parseColor(src.color);\n if (layer.isText) layer.textColor = layer.color;\n }\n const uA = boundUserName(src.alpha);\n if (uA && uA in changed) layer.alpha = scn.parseNum(src.alpha, 1);\n const uB = boundUserName(src.brightness);\n if (uB && uB in changed) layer.brightness = scn.parseNum(src.brightness, 1);\n const uVol = boundUserName(src.volume);\n if (uVol && uVol in changed) {\n const vol = scn.parseNum(src.volume, 1);\n if (layer.soundprops) layer.soundprops.volume = vol;\n layer.soundCtl?.setVolume?.(vol);\n }\n for (let i = 0; i < (src.animationlayers || []).length; i++) {\n const a = src.animationlayers[i];\n const al = layer.animationLayers?.[i];\n if (!a || !al) continue;\n const uv = boundUserName(a.visible);\n if (uv && uv in changed) al.visible = scn.parseBool(a.visible, true);\n const ur = boundUserName(a.rate);\n if (ur && ur in changed) al.rate = scn.parseNum(a.rate, 1);\n const ub = boundUserName(a.blend);\n if (ub && ub in changed) al.blend = scn.parseNum(a.blend, 1);\n }\n for (let ei = 0; ei < (src.effects || []).length; ei++) {\n const se = src.effects[ei];\n const le = layer.effects?.[ei];\n if (!se || !le) continue;\n const ue = boundUserName(se.visible);\n if (ue && ue in changed && !le.visibleScript) {\n le.visible = scn.parseBool(se.visible, true);\n }\n }\n const iov = src.instanceoverride;\n if (iov && typeof iov === \"object\" && layer.particle) {\n let ovHit = false;\n for (const k of Object.keys(iov)) {\n if (k === \"id\") continue;\n const un = boundUserName(iov[k]);\n if (un && un in changed) {\n ovHit = true;\n break;\n }\n }\n if (ovHit) {\n const list = particleSystemsByLayer.get(layer.id);\n if (list) for (const ps of list) ps.reapplyOverride?.();\n }\n }\n }\n for (const sb of propSandboxes) {\n if (!sb || sb.disabled) continue;\n try {\n sb.applyUserProperties(changed);\n } catch {\n }\n }\n recomputeVisibility();\n for (const layer of scene.layers) {\n if (!layer.particle) continue;\n const list = particleSystemsByLayer.get(layer.id);\n if (!list) continue;\n for (const ps of list) ps.setVisible(!!layer.visible);\n }\n renderer.applyConstUserProperties?.(changed);\n for (const it of textWidgets) it.lastKey = null;\n reportDiag(rt, cfg, `props hot: ${Object.keys(changed).join(\",\")}`);\n };\n pauseImpl = () => {\n if (rt.raf !== void 0) {\n cancelAnimationFrame(rt.raf);\n rt.raf = void 0;\n }\n if (!pauseStarted) pauseStarted = performance.now();\n playingVideos.length = 0;\n for (const entry of textures.values()) {\n if (entry?.videoCtl?.isPlaying?.()) {\n playingVideos.push(entry.videoCtl);\n entry.videoCtl.pause();\n }\n }\n playingAudios.length = 0;\n for (const au of soundAudios) {\n if (!au.paused && !au.ended) {\n playingAudios.push(au);\n au.pause();\n }\n }\n };\n resumeImpl = () => {\n if (pauseStarted) {\n pauseAccum += performance.now() - pauseStarted;\n pauseStarted = 0;\n }\n lastPt = performance.now();\n for (const ctl of playingVideos) {\n try {\n ctl.play();\n } catch {\n }\n }\n playingVideos.length = 0;\n for (const au of playingAudios) void au.play().catch(() => {\n });\n playingAudios.length = 0;\n kickLoop();\n };\n applyLiveImpl = applyLiveProps;\n if (pendingWire) {\n applyLiveProps(pendingWire);\n pendingWire = null;\n }\n kickLoop();\n {\n const ortho = scene.general?.orthogonalprojection;\n const projW = ortho?.width || c.width;\n const projH = ortho?.height || c.height;\n const fit = normalizeFit(rt.cfg.fit);\n const win = fitWindow(fit, projW, projH, c.width, c.height);\n reportDiag(\n rt,\n cfg,\n `fit ${fit}: view ${Math.round(win.viewW)}x${Math.round(win.viewH)} scene ${projW}x${projH} canvas ${c.width}x${c.height}`\n );\n }\n reportDiag(rt, cfg, `renderer started: ${scene.layers.length} layers`);\n } catch (e) {\n if (disposed) return;\n if (e && e.name === \"AbortError\") return;\n console.warn(\"scene render failed:\", e);\n const err = e instanceof Error ? e : new Error(String(e));\n reportDiag(rt, cfg, `failed: ${String(err.message || err).slice(0, 200)}`);\n if (rt.onError) rt.onError(err);\n else rt.fallbackPage?.();\n }\n })();\n}\nfunction mountWallpaper(rt, cfg) {\n if ((cfg.type === \"video\" || cfg.type === \"gif\" || cfg.type === \"image\") && cfg.src) {\n mountMedia(rt, cfg);\n } else if (cfg.type === \"scene\" && (cfg.source || cfg.src)) {\n mountScene(rt, cfg);\n } else {\n rt.onUnhandledType?.(cfg);\n }\n}\nfunction normalizeFitOption(fit) {\n if (fit === \"fit\") return \"contain\";\n if (fit === \"fill\") return \"cover\";\n return fit === \"contain\" || fit === \"stretch\" ? fit : \"cover\";\n}\nfunction toConfig(canvas, o) {\n return {\n type: \"scene\",\n canvas,\n source: o.source,\n fit: normalizeFitOption(o.fit),\n renderDpr: o.renderDpr ?? 1,\n sceneFps: o.fps ?? 60,\n muted: (o.volume ?? 0) <= 0,\n loop: true\n };\n}\nfunction createScene(canvas, options) {\n const rt = createRuntime();\n const events = { ready: [], error: [], diagnostic: [] };\n let currentOptions = { ...options ?? {}, source: null };\n const emitError = (err) => {\n for (const fn of events.error) {\n try {\n fn(err);\n } catch {\n }\n }\n };\n const wireOptions = (o) => {\n rt.onDiagnostic = (msg, level) => {\n try {\n o.onDiagnostic?.(msg, level);\n } catch {\n }\n for (const fn of events.diagnostic) {\n try {\n fn(msg, level);\n } catch {\n }\n }\n };\n rt.onError = (err) => {\n try {\n o.onError?.(err);\n } catch {\n }\n emitError(err);\n };\n rt.onSceneInfo = (info) => {\n rt.info = info;\n };\n };\n const armFirstFrame = () => {\n return new Promise((resolve) => {\n const prev = rt.onFirstFrame;\n rt.onFirstFrame = () => {\n rt.onFirstFrame = void 0;\n prev?.();\n resolve();\n };\n });\n };\n const armFailure = () => {\n let off = () => {\n };\n const promise = new Promise((_, reject) => {\n off = instance.on(\"error\", (e) => reject(e));\n });\n return { promise, off };\n };\n const instance = {\n canvas,\n pause() {\n rt.paused = true;\n rt.sceneCtl?.pause();\n },\n resume() {\n rt.paused = false;\n resetFrameMeter(rt);\n rt.sceneCtl?.resume();\n },\n get paused() {\n return !!rt.paused;\n },\n setFit(fit) {\n rt.cfg.fit = fit;\n resetCoverAlign(rt);\n },\n setFps(fps) {\n rt.cfg.sceneFps = fps;\n },\n setVolume(volume) {\n const v = Math.max(0, Math.min(1, volume));\n rt.cfg.muted = v <= 0;\n rt.sceneAudio?.setVolume(v);\n },\n setRenderDpr(dpr) {\n rt.cfg.renderDpr = dpr;\n mountWallpaper(rt, rt.cfg);\n },\n setProperties(props) {\n const wire = {};\n for (const [k, v] of Object.entries(props)) wire[k] = { value: v };\n rt.sceneCtl?.applyUserProperties(wire);\n },\n getProperties() {\n return { ...rt.liveUserProps ?? {} };\n },\n async load(source) {\n currentOptions = { ...currentOptions, source };\n wireOptions(currentOptions);\n const cfg = {\n ...rt.cfg,\n type: \"scene\",\n source,\n src: void 0,\n mediaBase: void 0\n };\n rt.cfg = cfg;\n rt.paused = false;\n rt.info = void 0;\n resetCoverAlign(rt);\n const firstFrame = armFirstFrame();\n const failure = armFailure();\n mountWallpaper(rt, cfg);\n try {\n await Promise.race([firstFrame, failure.promise]);\n } finally {\n failure.off();\n }\n },\n release() {\n clear(rt);\n },\n restore() {\n mountWallpaper(rt, rt.cfg);\n },\n destroy() {\n destroyRuntime(rt);\n rt.onDiagnostic = void 0;\n rt.onError = void 0;\n rt.onFirstFrame = void 0;\n rt.onSceneInfo = void 0;\n events.ready.length = 0;\n events.error.length = 0;\n events.diagnostic.length = 0;\n },\n get stats() {\n return frameStats(rt);\n },\n get info() {\n return rt.info ?? null;\n },\n on(ev, fn) {\n const list = events[ev];\n list.push(fn);\n return () => {\n const i = list.indexOf(fn);\n if (i >= 0) list.splice(i, 1);\n };\n }\n };\n const applyOptions = async (o) => {\n currentOptions = o;\n wireOptions(o);\n rt.cfg = toConfig(canvas, o);\n rt.paused = o.autoplay === false;\n rt.info = void 0;\n resetCoverAlign(rt);\n const firstFrame = armFirstFrame();\n const failure = armFailure();\n mountWallpaper(rt, rt.cfg);\n try {\n await Promise.race([firstFrame, failure.promise]);\n } finally {\n failure.off();\n }\n if ((o.volume ?? 0) > 0) instance.setVolume(o.volume);\n if (o.properties && Object.keys(o.properties).length) instance.setProperties(o.properties);\n };\n instance.__applyOptions = applyOptions;\n return instance;\n}\nasync function mount(canvas, options) {\n const instance = createScene(canvas, options);\n const withApply = instance;\n await withApply.__applyOptions(options);\n return instance;\n}\nexport {\n bytesSource,\n createScene,\n fileSource,\n httpSource,\n mount\n};\n//# sourceMappingURL=webwallgl.mjs.map\n"],"mappings":"AAAA,SAASA,GAAaC,EAAIC,EAAK,CAC7B,MAAMC,EAAMD,GAAK,WAAaD,EAAG,KAAK,WAAa,EACnD,OAAO,KAAK,IAAI,OAAO,kBAAoB,EAAGE,CAAG,CACnD,CACA,SAASC,GAAaC,EAAK,CACzB,OAAIA,IAAQ,MAAc,UACtBA,IAAQ,OAAe,QACpBA,IAAQ,WAAaA,IAAQ,UAAYA,EAAM,OACxD,CACA,SAASC,GAAaD,EAAK,CACzB,MAAME,EAAIH,GAAaC,CAAG,EAC1B,OAAIE,IAAM,UAAkB,CAAE,UAAW,UAAW,WAAY,qBAAsB,EAClFA,IAAM,UAAkB,CAAE,UAAW,OAAQ,WAAY,aAAc,EACpE,CAAE,UAAW,QAAS,WAAY,aAAc,CACzD,CACA,SAASC,GAAcC,EAAM,CAO3B,MANW,CACT,IAAK,CAAE,KAAM,QAAS,EACtB,WAAY,CAAE,EAAG,GAAK,EAAG,GAAK,GAAI,GAAK,GAAI,EAAI,EAC/C,WAAY,CAAE,OAAQ,CAAC,EAAG,KAAM,EAAG,IAAK,CAAE,EAC1C,UAAW,CAAC,CACd,CAEF,EACC,IAAM,CACL,MAAMC,EAASC,GAAMA,EAAE,eAAe,EACtC,OAAO,iBAAiB,cAAeD,EAAO,EAAI,EAClD,SAAS,iBAAiB,cAAeA,EAAO,EAAI,EACpD,OAAO,mBAAsBE,GAAQA,EAAI,iBAAiB,cAAeF,EAAO,EAAI,CACtF,GAAG,EACH,SAASG,GAAMZ,EAAI,CACbA,EAAG,OAAMA,EAAG,KAAK,UAAY,IAC7BA,EAAG,MAAQ,QAAQ,qBAAqBA,EAAG,GAAG,EAClDA,EAAG,IAAM,OACT,UAAWa,KAAKb,EAAG,YAAc,CAAC,EAAGa,EAAE,QAAQ,EAC/Cb,EAAG,WAAa,OACZA,EAAG,cAAcA,EAAG,aAAa,EACrCA,EAAG,aAAe,OAClBA,EAAG,SAAW,OACVA,EAAG,WACLA,EAAG,SAAS,UAAU,EACtBA,EAAG,SAAW,QAEhB,UAAWc,KAAKd,EAAG,eAAiB,CAAC,EACnCc,EAAE,MAAM,EACRA,EAAE,gBAAgB,KAAK,EACvBA,EAAE,KAAK,EACPA,EAAE,OAAO,EAEXd,EAAG,cAAgB,OACnB,UAAWe,KAAKf,EAAG,YAAc,CAAC,EAChC,GAAI,CACF,IAAI,gBAAgBe,CAAC,CACvB,MAAQ,CACR,CAGF,GADAf,EAAG,WAAa,OACZA,EAAG,WAAY,CACjB,UAAWgB,KAAMhB,EAAG,WAAW,OAC7BgB,EAAG,MAAM,EACTA,EAAG,gBAAgB,KAAK,EACxBA,EAAG,KAAK,EAEVhB,EAAG,WAAa,MAClB,CACA,GAAIA,EAAG,MAAO,CACZA,EAAG,MAAM,MAAM,EACfA,EAAG,MAAM,gBAAgB,KAAK,EAC9B,GAAI,CACFA,EAAG,MAAM,KAAK,CAChB,MAAQ,CACR,CACAA,EAAG,MAAM,OAAO,CAClB,CACAA,EAAG,MAAQ,OACXA,EAAG,IAAM,OACTA,EAAG,OAAS,OACZA,EAAG,OAAS,OACZA,EAAG,IAAM,OACTA,EAAG,KAAO,OACViB,GAAgBjB,CAAE,CACpB,CACA,SAASkB,GAAelB,EAAI,CAC1BY,GAAMZ,CAAE,EACR,UAAWmB,KAAOnB,EAAG,UAAU,OAAO,CAAC,EACrC,GAAI,CACFmB,EAAI,CACN,MAAQ,CACR,CAEFnB,EAAG,MAAM,OAAO,EAChBA,EAAG,KAAO,MACZ,CACA,MAAMoB,GAAO,IAAI,YACXC,GAAYC,GAAUF,GAAK,OAAOE,CAAK,EAAE,QAAQ,UAAW,EAAE,EAC9DC,GAAgB,IACtB,SAASC,GAAUxB,EAAIyB,EAAK,CAC1B,MAAMC,EAAI1B,EAAG,WAAW,OACxB0B,EAAE,KAAKD,CAAG,EACVzB,EAAG,WAAW,KAAOyB,EACrB,MAAME,EAAMF,EAAMF,GAClB,KAAOG,EAAE,QAAUA,EAAE,CAAC,EAAIC,GAAKD,EAAE,MAAM,EACvC,MAAME,EAAOF,EAAE,QAAU,EAAIA,EAAEA,EAAE,OAAS,CAAC,EAAIA,EAAE,CAAC,EAAI,EACtD1B,EAAG,WAAW,IAAM4B,EAAO,GAAKF,EAAE,OAAS,GAAK,IAAME,EAAO,CAC/D,CACA,SAASX,GAAgBjB,EAAI,CAC3BA,EAAG,WAAW,OAAO,OAAS,EAC9BA,EAAG,WAAW,KAAO,EACrBA,EAAG,WAAW,IAAM,CACtB,CACA,SAAS6B,GAAW7B,EAAI,CACtB,MAAI,CAACA,EAAG,WAAW,MAAQA,EAAG,OAAe,CAAE,IAAK,EAAG,QAAS,EAAM,EACzD,YAAY,IAAI,EAAIA,EAAG,WAAW,KACpC,KAAK,IAAIuB,GAAe,GAAG,EAAU,CAAE,IAAK,EAAG,QAAS,EAAM,EAClE,CAAE,IAAKvB,EAAG,WAAW,IAAK,QAAS,EAAK,CACjD,CACA,SAAS8B,GAAW9B,EAAIC,EAAK8B,EAAK,CAChC,GAAI,CACF/B,EAAG,eAAe+B,EAAK,sBAAsB,KAAKA,CAAG,EAAI,QAAU,MAAM,CAC3E,MAAQ,CACR,CACA,GAAI,CACF,MAAMC,EAAS/B,EAAI,UAAY,IAAI,IAAIA,EAAI,SAAS,EAAE,OAAS,GAC/D,GAAI+B,EAAQ,CACV,MAAMC,EAAM,IAAI,MAChBA,EAAI,IAAM,GAAGD,CAAM,aAAa,mBAAmB,SAAS/B,EAAI,KAAO,GAAG,KAAK8B,EAAI,MAAM,EAAG,GAAG,CAAC,EAAE,CAAC,EACrG,CACF,MAAQ,CACR,CACF,CACA,SAASG,GAAgBlC,EAAI,CAC3BA,EAAG,WAAW,EAAIA,EAAG,WAAW,EAAIA,EAAG,WAAW,GAAKA,EAAG,WAAW,GAAK,GAC1EmC,GAAqBnC,CAAE,CACzB,CACA,SAASmC,GAAqBnC,EAAI,CAChC,MAAMoC,EAAM,IAAIpC,EAAG,WAAW,EAAI,KAAK,QAAQ,CAAC,CAAC,MAAMA,EAAG,WAAW,EAAI,KAAK,QAAQ,CAAC,CAAC,IAClFqC,EAAMrC,EAAG,OAASA,EAAG,IACvBqC,GAAOA,EAAI,cAAaA,EAAI,MAAM,eAAiBD,EACzD,CACA,SAASE,GAAetC,EAAIuC,EAAQtC,EAAK,CACvC,MAAMuC,EAAMzC,GAAaC,EAAIC,CAAG,EAC1BwC,EAAI,KAAK,IAAI,EAAG,KAAK,OAAOF,EAAO,aAAe,OAAO,YAAc,GAAKC,CAAG,CAAC,EAChFE,EAAI,KAAK,IAAI,EAAG,KAAK,OAAOH,EAAO,cAAgB,OAAO,aAAe,GAAKC,CAAG,CAAC,EACxF,OAAID,EAAO,QAAUE,GAAKF,EAAO,SAAWG,EAAU,IACtDH,EAAO,MAAQE,EACfF,EAAO,OAASG,EACT,GACT,CACA,SAASC,GAASC,EAAK,CACrB,MAAMC,EAAK,IAAI,SAASD,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAClE,GAAIA,EAAI,OAAS,GAAI,MAAM,IAAI,MAAM,sDAAmB,EACxD,MAAME,EAAWD,EAAG,UAAU,EAAG,EAAI,EACrC,GAAIC,EAAW,GAAKA,EAAW,GAAI,MAAM,IAAI,MAAM,yCAAaA,CAAQ,EACxE,MAAMC,EAAQC,GAAMJ,EAAK,EAAGE,CAAQ,EACpC,GAAI,CAACC,EAAM,WAAW,MAAM,EAAG,MAAM,IAAI,MAAM,6CAAsBA,CAAK,EAC1E,MAAME,EAAQJ,EAAG,UAAU,EAAIC,EAAU,EAAI,EAC7C,IAAIjC,EAAI,EAAIiC,EAAW,EACvB,MAAMI,EAAU,CAAC,EACjB,QAASC,EAAI,EAAGA,EAAIF,EAAOE,IAAK,CAC9B,GAAItC,EAAI,EAAI+B,EAAI,OAAQ,MAAM,IAAI,MAAM,mCAAYO,CAAC,EACrD,MAAMC,EAAUP,EAAG,UAAUhC,EAAG,EAAI,EAEpC,GADAA,GAAK,EACDA,EAAIuC,EAAU,EAAIR,EAAI,OAAQ,MAAM,IAAI,MAAM,gBAAQO,EAAI,eAAK,EACnE,MAAME,EAAOC,GAAWV,EAAK/B,EAAGuC,CAAO,EACvCvC,GAAKuC,EACL,MAAMG,EAASV,EAAG,UAAUhC,EAAG,EAAI,EACnCA,GAAK,EACL,MAAM2C,EAAOX,EAAG,UAAUhC,EAAG,EAAI,EACjCA,GAAK,EACLqC,EAAQ,KAAK,CAAE,KAAAG,EAAM,OAAAE,EAAQ,KAAAC,CAAK,CAAC,CACrC,CACA,MAAMC,EAAY5C,EAClB,MAAO,CACL,MAAAkC,EACA,QAASA,EAAM,MAAM,CAAC,EACtB,MAAAE,EACA,QAAAC,EACA,UAAAO,EACA,SAAUb,EAAI,OACd,IAAAA,CACF,CACF,CACA,SAASc,GAASC,EAAMN,EAAM,CAC5B,MAAM3C,EAAIiD,EAAK,QAAQ,KAAMC,GAAMA,EAAE,OAASP,CAAI,EAClD,GAAI3C,IAAM,OAAQ,OAAO,KACzB,MAAMmD,EAAQF,EAAK,UAAYjD,EAAE,OAC3BoD,EAAMD,EAAQnD,EAAE,KACtB,GAAImD,EAAQ,GAAKC,EAAMH,EAAK,SAAU,MAAM,IAAI,MAAM,gBAAQN,EAAO,eAAK,EAC1E,OAAOM,EAAK,IAAI,SAASE,EAAOC,CAAG,CACrC,CACA,SAASC,GAAaJ,EAAM,CAC1B,IAAIG,EAAM,EACV,UAAWpD,KAAKiD,EAAK,QAASG,EAAM,KAAK,IAAIA,EAAKpD,EAAE,OAASA,EAAE,IAAI,EACnE,MAAO,CAAE,QAASiD,EAAK,UAAYG,EAAK,SAAUH,EAAK,SAAU,GAAIA,EAAK,UAAYG,GAAOH,EAAK,QAAS,CAC7G,CACA,SAASX,GAAMJ,EAAKiB,EAAOG,EAAK,CAC9B,IAAItC,EAAI,GACR,QAASyB,EAAIU,EAAOV,EAAIU,EAAQG,EAAKb,IAAKzB,GAAK,OAAO,aAAakB,EAAIO,CAAC,CAAC,EACzE,OAAOzB,CACT,CACA,SAAS4B,GAAWV,EAAKiB,EAAOG,EAAK,CACnC,GAAI,CACF,OAAO,IAAI,YAAY,QAAS,CAAE,MAAO,EAAK,CAAC,EAAE,OAAOpB,EAAI,SAASiB,EAAOA,EAAQG,CAAG,CAAC,CAC1F,MAAY,CACV,OAAOhB,GAAMJ,EAAKiB,EAAOG,CAAG,CAC9B,CACF,CACA,MAAMC,GAAyB,OAAO,OAAuB,OAAO,eAAe,CACjF,UAAW,KACX,SAAAP,GACA,SAAAf,GACA,aAAAoB,EACF,EAAG,OAAO,YAAa,CAAE,MAAO,QAAS,CAAC,CAAC,EACrCG,GAAkB,CACtB,EAAG,WACH,EAAG,SACH,EAAG,SACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,KACH,GAAI,UACJ,GAAI,OACJ,GAAI,MACJ,GAAI,cACJ,GAAI,gBACJ,GAAI,YACN,EACMC,GAAM,CAAE,QAAS,GAAI,KAAM,EAAG,IAAK,GAAI,IAAK,GAAI,KAAM,GAAI,IAAK,EAAG,EACxE,SAASC,GAAWC,EAAM,CACxB,MAAMC,EAAQD,EAAK,OAAO,CAAC,EAC3B,GAAI,CAACC,GAASA,EAAM,SAAW,EAAG,MAAM,IAAI,MAAM,gCAAO,EACzD,MAAMC,EAAID,EAAM,CAAC,EACjB,GAAID,EAAK,QAAS,MAAO,CAAE,MAAOE,EAAE,MAAO,OAAQA,EAAE,OAAQ,MAAOA,EAAE,IAAK,EAC3E,GAAIF,EAAK,kBAAoBF,GAAI,IAAK,MAAO,CAAE,MAAOI,EAAE,MAAO,OAAQA,EAAE,OAAQ,IAAKA,EAAE,IAAK,EAC7F,GAAIF,EAAK,kBAAoBF,GAAI,QAC/B,MAAO,CAAE,MAAOI,EAAE,MAAO,OAAQA,EAAE,OAAQ,MAAOA,EAAE,KAAM,IAAKF,EAAK,eAAgB,EAEtF,MAAMG,EAAOC,GAAaJ,EAAK,OAAQE,EAAE,KAAMA,EAAE,MAAOA,EAAE,MAAM,EAChE,MAAI,CAACF,EAAK,QAAQ,MAAM,SAAWE,EAAE,QAAUF,EAAK,OAASE,EAAE,SAAWF,EAAK,QACtE,CAAE,MAAOA,EAAK,MAAO,OAAQA,EAAK,OAAQ,KAAMK,GAASF,EAAMD,EAAE,MAAOA,EAAE,OAAQF,EAAK,MAAOA,EAAK,MAAM,CAAE,EAE7G,CAAE,MAAOE,EAAE,MAAO,OAAQA,EAAE,OAAQ,KAAAC,CAAK,CAClD,CACA,SAASG,GAAWN,EAAM,CACxB,MAAMC,EAAQD,EAAK,OAAO,CAAC,EAC3B,GAAI,CAACC,GAASA,EAAM,SAAW,EAAG,MAAM,IAAI,MAAM,gCAAO,EACzD,MAAMM,EAAM,CAAC,EACb,UAAWL,KAAKD,EAAO,CACrB,GAAID,EAAK,kBAAoBF,GAAI,QAAS,CACxCS,EAAI,KAAK,CAAE,MAAOL,EAAE,MAAO,OAAQA,EAAE,OAAQ,MAAOA,EAAE,KAAM,IAAKF,EAAK,eAAgB,CAAC,EACvF,QACF,CACA,MAAMG,EAAOC,GAAaJ,EAAK,OAAQE,EAAE,KAAMA,EAAE,MAAOA,EAAE,MAAM,EAChEK,EAAI,KAAK,CAAE,MAAOL,EAAE,MAAO,OAAQA,EAAE,OAAQ,KAAAC,CAAK,CAAC,CACrD,CACA,MAAI,CAACH,EAAK,QAAQ,MAAM,QAAUO,EAAI,OAAS,IAAMA,EAAI,CAAC,EAAE,QAAUP,EAAK,OAASO,EAAI,CAAC,EAAE,SAAWP,EAAK,SAAWO,EAAI,CAAC,EAAE,OAC3HA,EAAI,CAAC,EAAI,CAAE,MAAOP,EAAK,MAAO,OAAQA,EAAK,OAAQ,KAAMK,GAASE,EAAI,CAAC,EAAE,KAAMA,EAAI,CAAC,EAAE,MAAOA,EAAI,CAAC,EAAE,OAAQP,EAAK,MAAOA,EAAK,MAAM,CAAE,GAEhIO,CACT,CACA,SAASF,GAASF,EAAMK,EAAIC,EAAIrC,EAAGC,EAAG,CACpC,MAAMkC,EAAM,IAAI,WAAWnC,EAAIC,EAAI,CAAC,EACpC,QAASqC,EAAI,EAAGA,EAAIrC,EAAGqC,IACrBH,EAAI,IAAIJ,EAAK,SAASO,EAAIF,EAAK,EAAGE,EAAIF,EAAK,EAAIpC,EAAI,CAAC,EAAGsC,EAAItC,EAAI,CAAC,EAElE,OAAOmC,CACT,CACA,SAASH,GAAaO,EAAQC,EAAMxC,EAAGC,EAAG,CACxC,OAAQsC,EAAQ,CACd,IAAK,GACH,OAAOE,GAAaD,EAAMxC,EAAGC,CAAC,EAChC,IAAK,GACH,OAAOyC,GAAWF,EAAMxC,EAAGC,CAAC,EAC9B,IAAK,GACH,OAAO0C,GAAWH,EAAMxC,EAAGC,CAAC,EAC9B,IAAK,GACH,OAAO2C,GAAWJ,EAAMxC,EAAGC,CAAC,EAC9B,IAAK,GACH,OAAO4C,GAAWL,EAAMxC,EAAGC,CAAC,EAC9B,IAAK,GACH,OAAO6C,GAAWN,EAAMxC,EAAGC,CAAC,EAC9B,IAAK,GACH,OAAO8C,GAASP,EAAMxC,EAAGC,CAAC,EAC5B,IAAK,GACH,OAAO+C,GAAOR,EAAMxC,EAAGC,CAAC,EAC1B,IAAK,IACH,MAAM,IAAI,MAAM,+DAAuB,EACzC,QACE,MAAM,IAAI,MAAM,sDAAgBwB,GAAgBc,CAAM,GAAKA,EAAO,CACtE,CACF,CACA,SAASE,GAAaQ,EAAGjD,EAAGC,EAAG,CAC7B,OAAO,IAAI,WAAWgD,EAAE,OAAQA,EAAE,WAAYjD,EAAIC,EAAI,CAAC,EAAE,MAAM,CACjE,CACA,SAASyC,GAAWO,EAAGjD,EAAGC,EAAG,CAC3B,MAAMkC,EAAM,IAAI,WAAWnC,EAAIC,EAAI,CAAC,EACpC,QAASS,EAAI,EAAGA,EAAIV,EAAIC,EAAGS,IACzByB,EAAIzB,EAAI,CAAC,EAAIuC,EAAEvC,EAAI,CAAC,EACpByB,EAAIzB,EAAI,EAAI,CAAC,EAAIuC,EAAEvC,EAAI,EAAI,CAAC,EAC5ByB,EAAIzB,EAAI,EAAI,CAAC,EAAIuC,EAAEvC,EAAI,EAAI,CAAC,EAC5ByB,EAAIzB,EAAI,EAAI,CAAC,EAAI,IAEnB,OAAOyB,CACT,CACA,SAASQ,GAAWM,EAAGjD,EAAGC,EAAG,CAC3B,MAAMkC,EAAM,IAAI,WAAWnC,EAAIC,EAAI,CAAC,EACpC,QAASS,EAAI,EAAGA,EAAIV,EAAIC,EAAGS,IAAK,CAC9B,MAAMwC,EAAID,EAAEvC,EAAI,CAAC,EAAIuC,EAAEvC,EAAI,EAAI,CAAC,GAAK,EAC/ByC,EAAID,GAAK,GAAK,GACdE,EAAIF,GAAK,EAAI,GACbG,EAAIH,EAAI,GACdf,EAAIzB,EAAI,CAAC,EAAIyC,GAAK,EAAIA,GAAK,EAC3BhB,EAAIzB,EAAI,EAAI,CAAC,EAAI0C,GAAK,EAAIA,GAAK,EAC/BjB,EAAIzB,EAAI,EAAI,CAAC,EAAI2C,GAAK,EAAIA,GAAK,EAC/BlB,EAAIzB,EAAI,EAAI,CAAC,EAAI,GACnB,CACA,OAAOyB,CACT,CACA,SAASY,GAASE,EAAGjD,EAAGC,EAAG,CACzB,MAAMkC,EAAM,IAAI,WAAWnC,EAAIC,EAAI,CAAC,EACpC,QAASS,EAAI,EAAGA,EAAIV,EAAIC,EAAGS,IACzByB,EAAIzB,EAAI,CAAC,EAAIuC,EAAEvC,EAAI,EAAI,CAAC,EACxByB,EAAIzB,EAAI,EAAI,CAAC,EAAIuC,EAAEvC,EAAI,EAAI,CAAC,EAC5ByB,EAAIzB,EAAI,EAAI,CAAC,EAAIuC,EAAEvC,EAAI,EAAI,CAAC,EAC5ByB,EAAIzB,EAAI,EAAI,CAAC,EAAIuC,EAAEvC,EAAI,CAAC,EAE1B,OAAOyB,CACT,CACA,SAASa,GAAOC,EAAGjD,EAAGC,EAAG,CACvB,MAAMkC,EAAM,IAAI,WAAWnC,EAAIC,EAAI,CAAC,EACpC,QAASS,EAAI,EAAGA,EAAIV,EAAIC,EAAGS,IACzByB,EAAIzB,EAAI,CAAC,EAAIuC,EAAEvC,CAAC,EAChByB,EAAIzB,EAAI,EAAI,CAAC,EAAIuC,EAAEvC,CAAC,EACpByB,EAAIzB,EAAI,EAAI,CAAC,EAAIuC,EAAEvC,CAAC,EACpByB,EAAIzB,EAAI,EAAI,CAAC,EAAI,IAEnB,OAAOyB,CACT,CACA,SAASW,GAAWG,EAAGjD,EAAGC,EAAG,CAC3B,OAAOqD,GAAgBL,EAAGjD,EAAGC,EAAG,GAAM,CAAC,CACzC,CACA,SAAS4C,GAAWI,EAAGjD,EAAGC,EAAG,CAC3B,OAAOqD,GAAgBL,EAAGjD,EAAGC,EAAG,GAAO,CAAC,CAC1C,CACA,SAAS2C,GAAWK,EAAGjD,EAAGC,EAAG,CAC3B,OAAOqD,GAAgBL,EAAGjD,EAAGC,EAAG,GAAO,CAAC,CAC1C,CACA,SAASqD,GAAgBL,EAAGjD,EAAGC,EAAGsD,EAAQC,EAAW,CACnD,MAAMzB,EAAO,IAAI,WAAW/B,EAAIC,EAAI,CAAC,EAC/BwD,EAAgBF,EAAS,EAAI,GAC7BvF,EAAQ,IAAI,WAAW,EAAE,EAC/B,IAAI0F,EAAM,EACV,QAASpB,EAAI,EAAGA,EAAIrC,EAAGqC,GAAK,EAC1B,QAASnB,EAAI,EAAGA,EAAInB,EAAGmB,GAAK,EAAG,CAC7B,GAAIuC,EAAMD,EAAgBR,EAAE,OAAQ,OAAOlB,EAC3C/D,EAAM,IAAIiF,EAAE,SAASS,EAAKA,EAAMD,CAAa,CAAC,EAC9CC,GAAOD,EACP,MAAME,EAASC,GAAW5F,EAAOuF,CAAM,EACjCM,EAAUC,GAAa9F,EAAOuF,CAAM,EACpCQ,EAASP,IAAc,EAAIQ,GAAWhG,CAAK,EAAIwF,IAAc,EAAIS,GAAWjG,CAAK,EAAI,KAC3F,QAASkG,EAAK,EAAGA,EAAK,EAAGA,IACvB,QAASC,EAAK,EAAGA,EAAK,EAAGA,IAAM,CAC7B,MAAMC,EAAKjD,EAAIgD,EACTE,EAAK/B,EAAI4B,EACf,GAAIE,GAAMpE,GAAKqE,GAAMpE,EAAG,SACxB,MAAMS,EAAIwD,EAAK,EAAIC,EACbG,GAAKD,EAAKrE,EAAIoE,GAAM,EAC1BrC,EAAKuC,CAAC,EAAIX,EAAOE,EAAQnD,CAAC,EAAI,CAAC,EAC/BqB,EAAKuC,EAAI,CAAC,EAAIX,EAAOE,EAAQnD,CAAC,EAAI,EAAI,CAAC,EACvCqB,EAAKuC,EAAI,CAAC,EAAIX,EAAOE,EAAQnD,CAAC,EAAI,EAAI,CAAC,EACvCqB,EAAKuC,EAAI,CAAC,EAAIP,IAAW,KAAOA,EAAOrD,CAAC,EAAIiD,EAAOE,EAAQnD,CAAC,EAAI,EAAI,CAAC,CACvE,CAEJ,CAEF,OAAOqB,CACT,CACA,SAASwC,GAAUvG,EAAOU,EAAK,CAC7B,MAAM8F,EAAQxG,EAAMU,CAAG,EAAIV,EAAMU,EAAM,CAAC,GAAK,EACvC+F,EAAMD,GAAS,GAAK,GACpBE,EAAQF,GAAS,EAAI,GACrBG,EAAOH,EAAQ,GACrB,MAAO,CACLA,EACAC,GAAO,EAAIA,GAAO,EAClBC,GAAS,EAAIA,GAAS,EACtBC,GAAQ,EAAIA,GAAQ,CACtB,CACF,CACA,SAASf,GAAW5F,EAAOuF,EAAQ,CACjC,MAAMqB,EAAWrB,EAAS,EAAI,EACxBsB,EAAIN,GAAUvG,EAAO4G,CAAQ,EAC7BvB,EAAIkB,GAAUvG,EAAO4G,EAAW,CAAC,EACjCE,EAAQ,IAAI,WAAW,EAAE,EAC/B,OAAAA,EAAM,CAAC,EAAID,EAAE,CAAC,EACdC,EAAM,CAAC,EAAID,EAAE,CAAC,EACdC,EAAM,CAAC,EAAID,EAAE,CAAC,EACdC,EAAM,CAAC,EAAI,IACXA,EAAM,CAAC,EAAIzB,EAAE,CAAC,EACdyB,EAAM,CAAC,EAAIzB,EAAE,CAAC,EACdyB,EAAM,CAAC,EAAIzB,EAAE,CAAC,EACdyB,EAAM,CAAC,EAAI,IACPvB,GAAUsB,EAAE,CAAC,GAAKxB,EAAE,CAAC,GACvByB,EAAM,CAAC,EAAID,EAAE,CAAC,EAAIxB,EAAE,CAAC,GAAK,EAC1ByB,EAAM,CAAC,EAAID,EAAE,CAAC,EAAIxB,EAAE,CAAC,GAAK,EAC1ByB,EAAM,EAAE,EAAID,EAAE,CAAC,EAAIxB,EAAE,CAAC,GAAK,EAC3ByB,EAAM,EAAE,EAAI,IACZA,EAAM,EAAE,EAAI,EACZA,EAAM,EAAE,EAAI,EACZA,EAAM,EAAE,EAAI,EACZA,EAAM,EAAE,EAAI,IAEZA,EAAM,CAAC,EAAI,KAAK,OAAO,EAAID,EAAE,CAAC,EAAIxB,EAAE,CAAC,GAAK,CAAC,EAC3CyB,EAAM,CAAC,EAAI,KAAK,OAAO,EAAID,EAAE,CAAC,EAAIxB,EAAE,CAAC,GAAK,CAAC,EAC3CyB,EAAM,EAAE,EAAI,KAAK,OAAO,EAAID,EAAE,CAAC,EAAIxB,EAAE,CAAC,GAAK,CAAC,EAC5CyB,EAAM,EAAE,EAAI,IACZA,EAAM,EAAE,EAAI,KAAK,OAAOD,EAAE,CAAC,EAAI,EAAIxB,EAAE,CAAC,GAAK,CAAC,EAC5CyB,EAAM,EAAE,EAAI,KAAK,OAAOD,EAAE,CAAC,EAAI,EAAIxB,EAAE,CAAC,GAAK,CAAC,EAC5CyB,EAAM,EAAE,EAAI,KAAK,OAAOD,EAAE,CAAC,EAAI,EAAIxB,EAAE,CAAC,GAAK,CAAC,EAC5CyB,EAAM,EAAE,EAAI,KAEPA,CACT,CACA,SAAShB,GAAa9F,EAAOuF,EAAQ,CACnC,MAAMwB,EAAOxB,EAAS,EAAI,GACpBM,EAAU,IAAI,WAAW,EAAE,EACjC,QAASnD,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMsE,EAAShH,EAAM+G,EAAOrE,CAAC,EAC7BmD,EAAQnD,EAAI,CAAC,EAAIsE,EAAS,EAC1BnB,EAAQnD,EAAI,EAAI,CAAC,EAAIsE,GAAU,EAAI,EACnCnB,EAAQnD,EAAI,EAAI,CAAC,EAAIsE,GAAU,EAAI,EACnCnB,EAAQnD,EAAI,EAAI,CAAC,EAAIsE,GAAU,EAAI,CACrC,CACA,OAAOnB,CACT,CACA,SAASG,GAAWhG,EAAO,CACzB,MAAM+F,EAAS,IAAI,WAAW,EAAE,EAChC,QAASrD,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMuE,EAAQjH,EAAM0C,CAAC,EACfwE,EAAKD,EAAQ,GACbE,EAAKF,EAAQ,IACnBlB,EAAO,EAAIrD,CAAC,EAAIwE,EAAKA,GAAM,EAC3BnB,EAAO,EAAIrD,EAAI,CAAC,EAAIyE,EAAKA,GAAM,CACjC,CACA,OAAOpB,CACT,CACA,SAASE,GAAWjG,EAAO,CACzB,MAAMoH,EAAKpH,EAAM,CAAC,EACZqH,EAAKrH,EAAM,CAAC,EACZ8G,EAAQ,IAAI,WAAW,CAAC,EAG9B,GAFAA,EAAM,CAAC,EAAIM,EACXN,EAAM,CAAC,EAAIO,EACPD,GAAMC,EAAI,CACZ,QAAS3E,EAAI,EAAGA,EAAI,EAAGA,IAAKoE,EAAM,EAAIpE,CAAC,EAAI,KAAK,QAAQ,EAAIA,GAAK0E,EAAK1E,EAAI2E,GAAM,CAAC,EACjFP,EAAM,CAAC,EAAI,EACXA,EAAM,CAAC,EAAI,GACb,KACE,SAASpE,EAAI,EAAGA,EAAI,EAAGA,IAAKoE,EAAMpE,EAAI,CAAC,EAAI,KAAK,QAAQ,EAAIA,GAAK0E,EAAK1E,EAAI2E,GAAM,CAAC,EAEnF,MAAMxB,EAAU,IAAI,WAAW,EAAE,EACjC,IAAIzF,EAAI,EACR,QAASgF,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAIoB,EAAQ,EACZ,QAASc,EAAI,EAAGA,EAAI,EAAGA,IAAKd,GAASxG,EAAM,EAAIoF,EAAI,EAAIkC,CAAC,GAAK,EAAIA,EACjE,QAASA,EAAI,EAAGA,EAAI,EAAGA,IAAKzB,EAAQzF,GAAG,EAAIoG,GAAS,EAAIc,EAAI,CAC9D,CACA,MAAMvB,EAAS,IAAI,WAAW,EAAE,EAChC,QAASrD,EAAI,EAAGA,EAAI,GAAIA,IAAKqD,EAAOrD,CAAC,EAAIoE,EAAMjB,EAAQnD,CAAC,CAAC,EACzD,OAAOqD,CACT,CACA,SAASwB,GAAc7B,EAAK8B,EAAS,CACnC,MAAMrD,EAAM,IAAI,WAAWqD,CAAO,EAClC,IAAIC,EAAK,EACLC,EAAK,EACT,KAAOD,EAAK/B,EAAI,QAAQ,CACtB,MAAMiC,EAAQjC,EAAI+B,GAAI,EACtB,IAAIG,EAASD,GAAS,EACtB,GAAIC,IAAW,GAAI,CACjB,IAAIvC,EACJ,GACEA,EAAIK,EAAI+B,GAAI,EACZG,GAAUvC,QACHA,IAAM,IACjB,CACA,QAAS3C,EAAI,EAAGA,EAAIkF,EAAQlF,IAAKyB,EAAIuD,GAAI,EAAIhC,EAAI+B,GAAI,EACrD,GAAIA,GAAM/B,EAAI,OAAQ,MACtB,MAAM5C,EAAS4C,EAAI+B,CAAE,EAAI/B,EAAI+B,EAAK,CAAC,GAAK,EACxCA,GAAM,EACN,IAAII,EAAW,GAAKF,EAAQ,IAC5B,IAAKA,EAAQ,MAAQ,GAAI,CACvB,IAAItC,EACJ,GACEA,EAAIK,EAAI+B,GAAI,EACZI,GAAYxC,QACLA,IAAM,IACjB,CACA,MAAMjC,EAAQsE,EAAK5E,EACnB,QAASJ,EAAI,EAAGA,EAAImF,EAAUnF,IAAKyB,EAAIuD,GAAI,EAAIvD,EAAIf,EAAQV,CAAC,CAC9D,CACA,OAAOyB,CACT,CACA,SAAS2D,GAAI3F,EAAK/B,EAAG,CACnB,OAAQ+B,EAAI/B,CAAC,EAAI+B,EAAI/B,EAAI,CAAC,GAAK,EAAI+B,EAAI/B,EAAI,CAAC,GAAK,GAAK+B,EAAI/B,EAAI,CAAC,GAAK,MAAQ,CAC9E,CACA,SAAS2H,GAAI5F,EAAK/B,EAAG,CACnB,OAAO0H,GAAI3F,EAAK/B,CAAC,EAAI,CACvB,CACA,MAAM4H,GAAU,IAAI,SAAS,IAAI,YAAY,CAAC,CAAC,EAC/C,SAASC,GAAI9F,EAAK/B,EAAG,CACnB,OAAA4H,GAAQ,SAAS,EAAG7F,EAAI/B,CAAC,CAAC,EAC1B4H,GAAQ,SAAS,EAAG7F,EAAI/B,EAAI,CAAC,CAAC,EAC9B4H,GAAQ,SAAS,EAAG7F,EAAI/B,EAAI,CAAC,CAAC,EAC9B4H,GAAQ,SAAS,EAAG7F,EAAI/B,EAAI,CAAC,CAAC,EACvB4H,GAAQ,WAAW,EAAG,EAAI,CACnC,CACA,SAASE,GAAS/F,EAAK,CACrB,IAAI/B,EAAI,EACR,MAAM+H,EAASC,GAASjG,EAAK/B,EAAG,CAAC,EAEjC,GADAA,GAAK,EACD+H,IAAW,aAAc,MAAM,IAAI,MAAM,mCAAiBA,CAAM,EACpE,MAAME,EAASD,GAASjG,EAAK/B,EAAG,CAAC,EAEjC,GADAA,GAAK,EACDiI,IAAW,aAAc,MAAM,IAAI,MAAM,yCAAkBA,CAAM,EACrE,MAAM9D,EAASuD,GAAI3F,EAAK/B,CAAC,EACzBA,GAAK,EACL,MAAMkI,EAAQR,GAAI3F,EAAK/B,CAAC,EACxBA,GAAK,EACL,MAAMmI,EAAeT,GAAI3F,EAAK/B,CAAC,EAC/BA,GAAK,EACL,MAAMoI,EAAgBV,GAAI3F,EAAK/B,CAAC,EAChCA,GAAK,EACL,MAAMqI,EAAQX,GAAI3F,EAAK/B,CAAC,EACxBA,GAAK,EACL,MAAMsI,EAASZ,GAAI3F,EAAK/B,CAAC,EACzBA,GAAK,EACLA,GAAK,EACL,MAAMuI,EAAiBP,GAASjG,EAAK/B,EAAG,CAAC,EACzCA,GAAK,EACL,MAAMwI,EAAad,GAAI3F,EAAK/B,CAAC,EAC7BA,GAAK,EACL,IAAIyI,EAAkBnF,GAAI,QACtBoF,EAAmB,EACvB,GAAIH,IAAmB,aAAc,CACnCE,EAAkBf,GAAI3F,EAAK/B,CAAC,EAAI,EAChCA,GAAK,EACL,MAAM2I,EAAkBjB,GAAI3F,EAAK/B,CAAC,EAClCA,GAAK,EACDyI,IAAoBnF,GAAI,SAAWqF,IAAoB,IAAGF,EAAkBnF,GAAI,KACpFoF,EAAmBC,IAAoB,EAAI,EAAI,CACjD,SAAWJ,IAAmB,aAC5BE,EAAkBf,GAAI3F,EAAK/B,CAAC,EAAI,EAChCA,GAAK,EACL0I,EAAmB,UACVH,IAAmB,aAC5BG,EAAmB,UACVH,IAAmB,aAC5BG,EAAmB,MAEnB,OAAM,IAAI,MAAM,mCAAiBH,CAAc,EAEjD,MAAMK,GAAWV,EAAQ,MAAQ,GAAKO,IAAoBnF,GAAI,IACxDuF,EAAS,CAAC,EAChB,QAASvG,EAAI,EAAGA,EAAIkG,EAAYlG,IAAK,CACnC,MAAMwG,EAAWpB,GAAI3F,EAAK/B,CAAC,EAC3BA,GAAK,EACL,MAAM+I,EAAO,CAAC,EACd,QAASrF,EAAI,EAAGA,EAAIoF,EAAUpF,IAAK,CACjC,GAAIgF,IAAqB,EAAG,CAE1B,IADA1I,GAAK,EACEA,EAAI+B,EAAI,QAAUA,EAAI/B,CAAC,IAAM,GAAGA,IACvCA,GAAK,EACLA,GAAK,CACP,CACA,MAAMgJ,EAAKtB,GAAI3F,EAAK/B,CAAC,EACrBA,GAAK,EACL,MAAMiJ,EAAKvB,GAAI3F,EAAK/B,CAAC,EACrBA,GAAK,EACL,IAAIkJ,EAAc,EACdC,EAAmB,EACnBT,GAAoB,IACtBQ,EAAcxB,GAAI3F,EAAK/B,CAAC,EACxBA,GAAK,EACLmJ,EAAmBxB,GAAI5F,EAAK/B,CAAC,EAC7BA,GAAK,GAEP,MAAMoJ,EAAiBzB,GAAI5F,EAAK/B,CAAC,EAEjC,GADAA,GAAK,EACD4I,EAAS,CACXG,EAAK,KAAK,CAAE,MAAOC,EAAI,OAAQC,EAAI,YAAa,EAAG,KAAMlH,EAAI,SAAS/B,CAAC,CAAE,CAAC,EAC1EA,EAAI+B,EAAI,OACR,QACF,CACImH,IAAgB,IAAGC,EAAmBC,GAC1C,MAAMC,EAAMtH,EAAI,SAAS/B,EAAGA,EAAIoJ,CAAc,EAC9CpJ,GAAKoJ,EACL,IAAIhF,EAAOiF,EACPH,IAAgB,IAAG9E,EAAO+C,GAAckC,EAAKF,CAAgB,GACjEJ,EAAK,KAAK,CAAE,MAAOC,EAAI,OAAQC,EAAI,YAAAC,EAAa,KAAA9E,CAAK,CAAC,CACxD,CACAyE,EAAO,KAAKE,CAAI,CAClB,CACA,MAAMO,EAAOT,EAAO,CAAC,GAAKA,EAAO,CAAC,EAAE,CAAC,EAC/BU,EAASD,EAAOA,EAAK,MAAQnB,EAC7BqB,EAASF,EAAOA,EAAK,OAASlB,EACpC,IAAIqB,EAAS,KACb,GAAIzJ,EAAI,IAAM+B,EAAI,OAAQ,CACxB,MAAM2H,EAAY1B,GAASjG,EAAK/B,EAAG,CAAC,EACpC,GAAI0J,EAAU,QAAQ,MAAM,IAAM,EAAG,CACnC,IAAIC,EAAI3J,EAAI,EACZ,MAAM4J,EAAalC,GAAI3F,EAAK4H,CAAC,EAC7BA,GAAK,EACL,IAAIE,EAAS,EACTC,EAAS,EACTJ,IAAc,eAChBG,EAASnC,GAAI3F,EAAK4H,CAAC,EACnBA,GAAK,EACLG,EAASpC,GAAI3F,EAAK4H,CAAC,EACnBA,GAAK,GAEP,MAAMI,EAAMhI,EAAI,OAAS4H,EACnBK,EAASJ,EAAa,GAAKG,EAAM,GAAKA,EAAMH,IAAe,EAAIG,EAAMH,EAAa,EACxF,GAAIA,EAAa,GAAKA,GAAc,MAAQI,GAAU,GAAI,CACxD,MAAMC,EAAO,CAAC,EACd,QAAS3H,EAAI,EAAGA,EAAIsH,EAAYtH,IAAK,CACnC,MAAMhC,EAAMqJ,EAAIrH,EAAI0H,EACpB,GAAI1J,EAAM,GAAKyB,EAAI,OAAQ,MAC3B,MAAMmI,EAAKrC,GAAI9F,EAAKzB,EAAM,CAAC,EACrB6J,EAAKtC,GAAI9F,EAAKzB,EAAM,EAAE,EACtB8J,EAAKvC,GAAI9F,EAAKzB,EAAM,EAAE,EACtB+J,GAAKxC,GAAI9F,EAAKzB,EAAM,EAAE,EACtBgK,GAAKzC,GAAI9F,EAAKzB,EAAM,EAAE,EACtBiK,GAAK1C,GAAI9F,EAAKzB,EAAM,EAAE,EAC5B2J,EAAK,KAAK,CACR,QAASpC,GAAI9F,EAAKzB,CAAG,EAAI,EACzB,SAAUuH,GAAI9F,EAAKzB,EAAM,CAAC,EAC1B,EAAG4J,EACH,EAAGC,EACH,MAAO,KAAK,MAAMC,EAAIC,EAAE,GAAKR,EAC7B,OAAQ,KAAK,MAAMS,GAAIC,EAAE,GAAKT,EAG9B,KAAM,CAACM,EAAIC,EAAE,EACb,KAAM,CAACC,GAAIC,EAAE,EACb,QAAS,KAAK,IAAIF,EAAE,EAAI,IAAO,KAAK,IAAIC,EAAE,EAAI,EAChD,CAAC,CACH,CACaL,EAAK,SAAWL,GAAcK,EAAK,MAAOxK,GAAM,CAC3D,GAAI,EAAEA,EAAE,MAAQ,GAAKA,EAAE,OAAS,GAAI,MAAO,GAC3C,MAAM+K,EAAK,CAAC/K,EAAE,EAAGA,EAAE,EAAIA,EAAE,KAAK,CAAC,EAAGA,EAAE,EAAIA,EAAE,KAAK,CAAC,EAAGA,EAAE,EAAIA,EAAE,KAAK,CAAC,EAAIA,EAAE,KAAK,CAAC,CAAC,EACxEgL,EAAK,CAAChL,EAAE,EAAGA,EAAE,EAAIA,EAAE,KAAK,CAAC,EAAGA,EAAE,EAAIA,EAAE,KAAK,CAAC,EAAGA,EAAE,EAAIA,EAAE,KAAK,CAAC,EAAIA,EAAE,KAAK,CAAC,CAAC,EAC9E,OAAO,KAAK,IAAI,GAAG+K,CAAE,GAAK,IAAM,KAAK,IAAI,GAAGA,CAAE,GAAKjB,EAAS,GAAK,KAAK,IAAI,GAAGkB,CAAE,GAAK,IAAM,KAAK,IAAI,GAAGA,CAAE,GAAKjB,EAAS,CACxH,CAAC,IAECC,EAAS,CACP,MAAOC,EACP,WAAYG,EACZ,YAAaC,EAEb,WAAYP,EACZ,YAAaC,EACb,KAAAS,CACF,EAEJ,CACF,CACF,CACA,MAAO,CACL,OAAA9F,EACA,WAAYd,GAAgBc,CAAM,GAAK,OAAOA,CAAM,EACpD,MAAA+D,EACA,aAAAC,EACA,cAAAC,EACA,MAAAC,EACA,OAAAC,EACA,gBAAAG,EACA,eAAAF,EACA,iBAAAG,EACA,QAAAE,EACA,OAAAC,EAEA,OAAAY,CACF,CACF,CACA,SAASzB,GAASjG,EAAKiB,EAAOG,EAAK,CACjC,IAAItC,EAAI,GACR,QAASyB,EAAIU,EAAOV,EAAIU,EAAQG,EAAKb,IAAKzB,GAAK,OAAO,aAAakB,EAAIO,CAAC,CAAC,EACzE,OAAOzB,CACT,CACA,MAAM6J,GAAyB,OAAO,OAAuB,OAAO,eAAe,CACjF,UAAW,KACX,IAAApH,GACA,gBAAAD,GACA,WAAAE,GACA,WAAAO,GACA,aAAAF,GACA,cAAAuD,GACA,SAAAW,EACF,EAAG,OAAO,YAAa,CAAE,MAAO,QAAS,CAAC,CAAC,EAC3C,SAAS6C,GAAUC,EAAYpI,EAAM,CACnC,GAAI,CAACoI,GAAc,OAAOpI,GAAS,SAAU,OAAO,KACpD,MAAMxC,EAAI4K,EAAWpI,CAAI,EACzB,OAAOxC,GAAK,OAAOA,GAAM,SAAWA,EAAI,IAC1C,CACA,SAAS6K,GAAaC,EAAM,CAC1B,OAAI,OAAOA,GAAS,SAAiBA,EACjCA,GAAQ,OAAOA,GAAS,UAAY,OAAOA,EAAK,MAAS,SAAiBA,EAAK,KAC5E,IACT,CACA,SAASC,GAAYtE,EAAGxB,EAAG,CACzB,OAAI+F,GAAUvE,CAAC,GAAKuE,GAAU/F,CAAC,EAAU,OAAOwB,CAAC,IAAM,OAAOxB,CAAC,EACxD,OAAOwB,CAAC,IAAM,OAAOxB,CAAC,CAC/B,CACA,SAASgG,GAAWhL,EAAG,CACrB,GAAI,OAAOA,GAAM,UAAW,MAAO,OACnC,GAAI,OAAOA,GAAM,SAAU,OAAO,OAAO,SAASA,CAAC,EAAI,MAAQ,QAC/D,GAAI,OAAOA,GAAM,SAAU,CACzB,MAAMiL,EAAQjL,EAAE,KAAK,EAAE,MAAM,KAAK,EAClC,OAAIiL,EAAM,OAAS,GAAKA,EAAM,CAAC,IAAM,IAAMA,EAAM,MAAOnI,GAAM,OAAO,SAAS,OAAOA,CAAC,CAAC,CAAC,EAAU,MAC3F,MACT,CACA,MAAO,OACT,CACA,SAASoI,GAAUnL,EAAG,CACpB,OAAQA,EAAE,KAAM,CACd,IAAK,OACH,MAAO,OACT,IAAK,SACH,MAAO,MACT,IAAK,QACH,MAAO,MACT,IAAK,YACH,MAAO,OACT,QACE,OAAOiL,GAAWjL,EAAE,KAAK,CAC7B,CACF,CACA,SAASoL,GAAiBnL,EAAG2K,EAAY,CACvC,GAAI3K,IAAM,MAAQ,OAAOA,GAAM,SAAU,OAAOA,EAChD,GAAIA,EAAE,MAAQ,OAAOA,EAAE,MAAS,UAAY,OAAOA,EAAE,KAAK,MAAS,SAAU,CAC3E,MAAMoL,EAAKV,GAAUC,EAAY3K,EAAE,KAAK,IAAI,EAC5C,GAAI,CAACoL,GAAMA,EAAG,QAAU,QAAUA,EAAG,QAAU,KAAM,OAAOpL,EAAE,MAC9D,MAAMqL,EAAMD,EAAG,OAAS,QAAUE,GAAiBF,EAAG,MAAOA,EAAG,OAAO,EAAIA,EAAG,MAC9E,OAAON,GAAYO,EAAKrL,EAAE,KAAK,SAAS,CAC1C,CACA,GAAI,OAAOA,EAAE,MAAS,SAAU,OAAOA,EACvC,MAAMD,EAAI2K,GAAUC,EAAY3K,EAAE,IAAI,EACtC,GAAI,CAACD,GAAKA,EAAE,QAAU,QAAUA,EAAE,QAAU,KAAM,OAAOC,EAAE,MAC3D,GAAID,EAAE,eAAgB,OAAOA,EAAE,MAC/B,GAAIC,EAAE,QAAU,MAAQ,OAAOA,EAAE,OAAU,SAAU,OAAOA,EAAE,MAC9D,GAAIA,EAAE,QAAU,OAAQ,OAAOD,EAAE,MACjC,GAAIiL,GAAWhL,EAAE,KAAK,IAAM,QAAUD,EAAE,OAAS,SAAU,CACzD,MAAMwL,EAAI,OAAOxL,EAAE,KAAK,EACxB,OAAO,OAAO,SAASwL,CAAC,EAAIA,IAAM,EAAIvL,EAAE,KAC1C,CACA,OAAOgL,GAAWhL,EAAE,KAAK,IAAMkL,GAAUnL,CAAC,EAAIA,EAAE,MAAQC,EAAE,KAC5D,CACA,SAASwL,GAAiBC,EAAMd,EAAYe,EAAO,CACjD,GAAIA,EAAQ,IAAMD,IAAS,MAAQ,OAAOA,GAAS,SAAU,OAAOA,EACpE,GAAI,MAAM,QAAQA,CAAI,EAAG,CACvB,QAASpJ,EAAI,EAAGA,EAAIoJ,EAAK,OAAQpJ,IAAKoJ,EAAKpJ,CAAC,EAAImJ,GAAiBC,EAAKpJ,CAAC,EAAGsI,EAAYe,EAAQ,CAAC,EAC/F,OAAOD,CACT,CACA,GAAIb,GAAaa,EAAK,IAAI,EAAG,CAC3B,IAAIzL,EAAImL,GAAiBM,EAAMd,CAAU,EACzC,QAASgB,EAAQ,EAAGA,EAAQ,GAAK3L,IAAM,MAAQ,OAAOA,GAAM,UAAY4K,GAAa5K,EAAE,IAAI,EAAG2L,IAC5F3L,EAAImL,GAAiBnL,EAAG2K,CAAU,EAEpC,OAAAc,EAAK,MAAQD,GAAiBxL,EAAG2K,EAAYe,EAAQ,CAAC,EAC/CD,CACT,CACA,UAAWG,KAAK,OAAO,KAAKH,CAAI,EAAGA,EAAKG,CAAC,EAAIJ,GAAiBC,EAAKG,CAAC,EAAGjB,EAAYe,EAAQ,CAAC,EAC5F,OAAOD,CACT,CACA,SAASI,GAAkBC,EAAS,CAClC,OAAKA,EACD,MAAM,QAAQA,CAAO,EAChBA,EAAQ,IAAK7F,GAAMA,GAAK,OAAOA,GAAM,UAAY,UAAWA,EAAIA,EAAE,MAAQA,CAAC,EAEhF,OAAO6F,GAAY,SAAiB,OAAO,OAAOA,CAAO,EACtD,CAAC,EALa,CAAC,CAMxB,CACA,SAASf,GAAU/K,EAAG,CACpB,OAAI,OAAOA,GAAM,SAAiB,OAAO,UAAUA,CAAC,EAC7C,OAAOA,GAAM,UAAY,UAAU,KAAKA,EAAE,KAAK,CAAC,CACzD,CACA,SAASsL,GAAiBnF,EAAO2F,EAAS,CACxC,MAAMpM,EAAOmM,GAAkBC,CAAO,EAGtC,MADI,EADYpM,EAAK,OAAS,EAAIA,EAAK,MAAMqL,EAAS,EAAIA,GAAU5E,CAAK,IAErE,OAAOA,GAAU,UAAY,OAAO,SAASA,CAAK,EAAUA,EAC5D,OAAOA,GAAU,UAAY,UAAU,KAAKA,EAAM,KAAK,CAAC,EAAU,OAAOA,CAAK,EAC3EA,CACT,CACA,SAAS4F,GAAsBpB,EAAY,CACzC,MAAM7G,EAAM,CAAC,EACb,GAAI,CAAC6G,GAAc,OAAOA,GAAe,SAAU,OAAO7G,EAC1D,SAAW,CAAC8H,EAAG5L,CAAC,IAAK,OAAO,QAAQ2K,CAAU,EACxC,CAAC3K,GAAK,OAAOA,GAAM,UAAY,EAAE,UAAWA,KAChD8D,EAAI8H,CAAC,EAAI5L,EAAE,OAAS,QAAUsL,GAAiBtL,EAAE,MAAOA,EAAE,OAAO,EAAIA,EAAE,OAEzE,OAAO8D,CACT,CACA,SAASkI,GAAchM,EAAG,CACxB,OAAOA,GAAK,OAAOA,GAAM,SAAW4K,GAAa5K,EAAE,IAAI,EAAI,IAC7D,CACA,SAASiM,GAAwBtB,EAAYuB,EAAMC,EAAM,CACvD,MAAMC,EAAU,CAAC,EACjB,GAAI,CAACD,GAAQ,OAAOA,GAAS,SAAU,OAAOC,EAC9C,MAAMC,EAAQ1B,GAAc,OAAOA,GAAe,SAAWA,EAAa,CAAC,EACrE2B,EAAMJ,GAAQ,OAAOA,GAAS,SAAWA,EAAO,CAAC,EACvD,SAAW,CAACN,EAAGW,CAAK,IAAK,OAAO,QAAQJ,CAAI,EAAG,CAC7C,MAAM/C,EAAMmD,GAAS,OAAOA,GAAU,UAAY,UAAWA,EAAQA,EAAM,MAAQA,EAC7ExM,EAAIsM,EAAMT,CAAC,EACjB,GAAI7L,GAAK,OAAOA,GAAM,SAAU,CAC9BA,EAAE,MAAQqJ,EACVrJ,EAAE,eAAiB,GACnB,MAAMC,EAAID,EAAE,OAAS,QAAUuL,GAAiBvL,EAAE,MAAOA,EAAE,OAAO,EAAIA,EAAE,MACxEuM,EAAIV,CAAC,EAAI5L,EACToM,EAAQR,CAAC,EAAI5L,CACf,MACEsM,EAAIV,CAAC,EAAIxC,EACTgD,EAAQR,CAAC,EAAIxC,CAEjB,CACA,OAAOgD,CACT,CACA,SAASI,GAAU5L,EAAG,CAChB,OAAOA,GAAM,UAAYA,IAAM,OAAMA,EAAIA,EAAE,OAC/C,MAAMb,EAAI,OAAOa,GAAK,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,IAAI,MAAM,EACxD,OAAIb,EAAE,SAAW,EAAU,CAACA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,CAAC,EACpD,CAACA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,CAAC,CACzC,CACA,SAAS0M,GAAU7L,EAAG,CAChB,OAAOA,GAAM,UAAYA,IAAM,OAAMA,EAAIA,EAAE,OAC/C,MAAMb,EAAI,OAAOa,GAAK,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,IAAI,MAAM,EACxD,OAAIb,EAAE,SAAW,EAAU,CAACA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,CAAC,EACzC,CAACA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,CAAC,CAC9B,CACA,SAAS2M,GAAW7H,EAAG,CACrB,OAAoBA,GAAM,KAAa,CAAC,EAAG,EAAG,CAAC,EAC3C,OAAOA,GAAM,SAAiB2H,GAAU3H,CAAC,EACzC,OAAOA,GAAM,UAAYA,IAAM,KAAa2H,GAAU3H,EAAE,KAAK,EAC1D,CAAC,EAAG,EAAG,CAAC,CACjB,CACA,SAAS8H,GAAU3M,EAAG4M,EAAO,GAAO,CAClC,GAAoB5M,GAAM,KAAM,OAAO4M,EACvC,GAAI,OAAO5M,GAAM,UAAW,OAAOA,EACnC,GAAI,OAAOA,GAAM,SAAU,OAAOA,IAAM,EACxC,GAAI,OAAOA,GAAM,UAAYA,IAAM,KAAM,CACvC,MAAM6M,EAAQ7M,EAAE,MAChB,OAAI,OAAO6M,GAAU,SAAiBA,IAAU,EACzC,CAAC,CAACA,CACX,CACA,OAAOD,CACT,CACA,SAASE,GAAS9M,EAAG4M,EAAM,CACzB,GAAI,OAAO5M,GAAM,SAAU,OAAOA,EAClC,GAAIA,IAAM,MAAQ,OAAOA,GAAM,SAAU,CACvC,MAAMuL,EAAI,OAAOvL,EAAE,KAAK,EACxB,OAAO,OAAO,SAASuL,CAAC,EAAIA,EAAIqB,CAClC,CACA,OAAOA,CACT,CACA,SAASG,GAAWC,EAAWC,EAAS,CACtC,MAAMtC,EAAasC,GAAWA,EAAQ,SAAWA,EAAQ,QAAQ,YAAc,CAAC,EAC1EC,EAAUF,EAAU,SAAW,CAAC,EACtCxB,GAAiB0B,EAASvC,EAAY,CAAC,EACvCa,GAAiBwB,EAAU,SAAW,CAAC,EAAGrC,EAAY,CAAC,EACvD,MAAMwC,EAAuB,IAAI,IACjC,UAAWlH,KAAKiH,EACVjH,EAAE,KAAO,QAAQkH,EAAK,IAAIlH,EAAE,GAAIA,CAAC,EAEvC,MAAMmH,EAAQF,EAAQ,IAAKjH,IAAO,CAChC,GAAIA,EAAE,GACN,OAAQA,EAAE,OACV,OAAQuG,GAAUvG,EAAE,QAAU,OAAO,EACrC,MAAOuG,GAAUvG,EAAE,OAAS,OAAO,EACnC,OAAQuG,GAAUvG,EAAE,QAAU,OAAO,CACvC,EAAE,EACF,QAASoH,EAAO,EAAGA,EAAO,EAAGA,IAAQ,CACnC,IAAIjB,EAAU,GACd,UAAWvH,KAAKuI,EAAO,CAGrB,GAFIvI,EAAE,SAAW,QAAUA,EAAE,SAAW,MAEpC,CADMsI,EAAK,IAAItI,EAAE,MAAM,EACnB,SACR,MAAMyI,EAAOF,EAAM,UAAWtK,GAAMA,EAAE,KAAO+B,EAAE,MAAM,EACrD,GAAIyI,EAAO,EAAG,SACd,MAAMC,EAAKH,EAAME,CAAI,EACrB,GAAIC,EAAG,SAAW,QAAUA,EAAG,SAAW,KAAM,SAChD,MAAMC,EAAKN,EAAQI,CAAI,EACjBG,EAAMD,EAAG,MACTE,EAAeD,IAAQ,MAAQ,OAAOA,GAAQ,WAAa,OAAOA,EAAI,QAAW,UAAYA,EAAI,OAAS,QAC1GE,EAAc,CAACH,EAAG,OAAS,CAACA,EAAG,OAAS,CAACA,EAAG,UAAYA,EAAG,MAAQ,MAAQ,CAACA,EAAG,KAC/EI,EAASF,GAAgBC,EAAc,CAAC,EAAG,EAAG,CAAC,EAAIJ,EAAG,MACtDM,EAAKN,EAAG,OAAO,CAAC,EAAI,KAAK,GAAK,IAC9BO,EAAM,KAAK,IAAID,CAAE,EACjBE,EAAM,KAAK,IAAIF,CAAE,EACjB5D,EAAKpF,EAAE,OAAO,CAAC,EAAI+I,EAAO,CAAC,EAC3B1D,EAAKrF,EAAE,OAAO,CAAC,EAAI+I,EAAO,CAAC,EACjC/I,EAAE,OAAO,CAAC,EAAI0I,EAAG,OAAO,CAAC,EAAItD,EAAK6D,EAAM5D,EAAK6D,EAC7ClJ,EAAE,OAAO,CAAC,EAAI0I,EAAG,OAAO,CAAC,EAAItD,EAAK8D,EAAM7D,EAAK4D,EAC7CjJ,EAAE,OAAO,CAAC,EAAI0I,EAAG,OAAO,CAAC,EAAI1I,EAAE,OAAO,CAAC,EACvCA,EAAE,OAAO,CAAC,EAAI0I,EAAG,OAAO,CAAC,EAAI1I,EAAE,OAAO,CAAC,EACvCA,EAAE,MAAM,CAAC,EAAI+I,EAAO,CAAC,EAAI/I,EAAE,MAAM,CAAC,EAClCA,EAAE,MAAM,CAAC,EAAI+I,EAAO,CAAC,EAAI/I,EAAE,MAAM,CAAC,EAClCA,EAAE,MAAM,CAAC,EAAI+I,EAAO,CAAC,EAAI/I,EAAE,MAAM,CAAC,EAClCA,EAAE,OAAS,KACXuH,EAAU,EACZ,CACA,GAAI,CAACA,EAAS,KAChB,CACA,MAAM4B,EAAcd,EAAQ,IAAKjH,GAAM0G,GAAU1G,EAAE,QAAS,EAAI,CAAC,EAC3DgI,EAA0B,IAAI,IACpCf,EAAQ,QAAQ,CAACjH,EAAG5D,IAAM,CACpB4D,EAAE,KAAO,QAAQgI,EAAQ,IAAIhI,EAAE,GAAI5D,CAAC,CAC1C,CAAC,EACD,MAAM6L,EAA8B,IAAI,IAClCC,EAA+B,IAAI,IACzC,UAAWlI,KAAKiH,EACd,GAAIjH,EAAE,SAAW,QAAUA,EAAE,SAAW,KAAM,CAC5CiI,EAAY,IAAIjI,EAAE,QAASiI,EAAY,IAAIjI,EAAE,MAAM,GAAK,GAAK,CAAC,EAC9D,MAAMmI,EAAKnI,EAAE,KAAO,OAASA,EAAE,GAAK,KACpC,GAAImI,IAAO,KAAM,CACf,MAAMpE,EAAOmE,EAAa,IAAIlI,EAAE,MAAM,EAClC+D,EAAMA,EAAK,KAAKoE,CAAE,EACjBD,EAAa,IAAIlI,EAAE,OAAQ,CAACmI,CAAE,CAAC,CACtC,CACF,CAEF,MAAMC,EAAanB,EAAQ,IAAI,IAAM,EAAI,EACzC,QAAS7K,EAAI,EAAGA,EAAI6K,EAAQ,OAAQ7K,IAAK,CACvC,IAAIiM,EAAMN,EAAY3L,CAAC,EACnBtC,EAAImN,EAAQ7K,CAAC,EAAE,OACnB,QAASsJ,EAAQ,EAAG2C,GAAOvO,IAAM,QAAUA,IAAM,MAAQ4L,EAAQ,GAAIA,IAAS,CAC5E,MAAM4C,EAAKN,EAAQ,IAAIlO,CAAC,EACxB,GAAIwO,IAAO,OAAQ,MACdP,EAAYO,CAAE,IAAGD,EAAM,IAC5BvO,EAAImN,EAAQqB,CAAE,EAAE,MAClB,CACAF,EAAWhM,CAAC,EAAIiM,CAClB,CACA,MAAME,EAAStB,EAAQ,IAAI,CAACjH,EAAG5D,IAAM,CACnC,MAAMoM,EAAQrB,EAAM/K,CAAC,EACfqM,EAAS,OAAOzI,EAAE,OAAU,WAAaA,EAAE,MAAM,QAAQ,0BAA0B,IAAM,GAAKA,EAAE,MAAM,QAAQ,6BAA6B,IAAM,GACvJ,IAAI0I,EAAYlC,GAAUxG,EAAE,MAAQ,KAAK,EACrC2I,EAAcH,EAAM,OACxB,GAAIC,EAAQ,CACV,MAAMG,GAAS7B,EAAU,SAAW,CAAC,GAAG,qBAClC8B,EAAKD,GAAS,OAAOA,EAAM,KAAK,EAChCE,EAAKF,GAAS,OAAOA,EAAM,MAAM,EACnCC,EAAK,GAAKC,EAAK,IACjBJ,EAAY,CAACG,EAAIC,CAAE,EACnBH,EAAc,CAACE,EAAK,EAAGC,EAAK,EAAGN,EAAM,OAAO,CAAC,GAAK,CAAC,EAEvD,CACA,MAAO,CACL,GAAIxI,EAAE,KAAO,OAASA,EAAE,GAAK5D,EAC7B,KAAM4D,EAAE,MAAQ,GAChB,QAASoI,EAAWhM,CAAC,EAGrB,YAAa2L,EAAY3L,CAAC,EAG1B,UAAW4D,EACX,MAAO,OAAOA,EAAE,OAAU,SAAWA,EAAE,MAAQ,KAG/C,MAAO,OAAOA,EAAE,OAAU,SAAWA,EAAE,MAAQ,KAC/C,SAAU,OAAOA,EAAE,MAAS,UAAYA,EAAE,KAAK,QAAQ,oBAAK,GAAK,EACjE,SAAU,OAAOA,EAAE,UAAa,SAAWA,EAAE,SAAW,KAExD,iBAAkBA,EAAE,kBAAoB,KACxC,MAAO,MAAM,QAAQA,EAAE,KAAK,EAAIA,EAAE,MAAM,OAAQrF,GAAM,OAAOA,GAAM,QAAQ,EAAI,CAAC,EAChF,WAAY,CACV,OAAQkM,GAAS7G,EAAE,OAAQ,CAAC,EAC5B,aAAcA,EAAE,cAAgB,SAChC,YAAa0G,GAAU1G,EAAE,YAAa,EAAK,EAC3C,QAAS6G,GAAS7G,EAAE,QAAS,CAAC,EAC9B,QAAS6G,GAAS7G,EAAE,QAAS,CAAC,EAC9B,eAAgB0G,GAAU1G,EAAE,eAAgB,EAAK,EACjD,aAAc0G,GAAU1G,EAAE,aAAc,EAAK,CAC/C,EACA,KAAM,OAAOA,EAAE,MAAS,SAAWA,EAAE,KAAOA,EAAE,MAAQ,OAAOA,EAAE,MAAS,SAAWA,EAAE,KAAK,MAAQ,KAClG,WAAYA,EAAE,MAAQ,OAAOA,EAAE,MAAS,UAAWA,EAAE,KAAK,QAAU,KACpE,gBAAiBA,EAAE,MAAQ,OAAOA,EAAE,MAAS,UAAWA,EAAE,KAAK,kBAAoB,KACnF,UAAW,OAAOA,EAAE,WAAc,SAAWA,EAAE,UAAY,KAC3D,OAAWA,EAAE,OAAS,QAAUA,EAAE,OAAS,KAE3C,SAAU,OAAOA,EAAE,MAAS,SAAWA,EAAE,KAAO,KAChD,cAAe6G,GAAS7G,EAAE,UAAW,EAAE,GAAK,GAC5C,UAAWyG,GAAWzG,EAAE,KAAK,EAI7B,WAAY,OAAOA,EAAE,QAAW,UAAYA,EAAE,SAAW,OAASA,EAAE,OAAS,SAC7E,aAAc6G,GAAS7G,EAAE,SAAU,CAAC,EACpC,YAAa6G,GAAS7G,EAAE,QAAS,CAAC,EAClC,eAAgB0G,GAAU1G,EAAE,WAAY,EAAK,EAC7C,cAAe0G,GAAU1G,EAAE,UAAW,EAAK,EAC3C,qBAAsB0G,GAAU1G,EAAE,iBAAkB,EAAK,EACzD,WAAYA,EAAE,iBAAmB,SACjC,WAAYA,EAAE,eAAiB,SAC/B,YAAaA,EAAE,QAAUwG,GAAUxG,EAAE,OAAO,EAAI,CAAC,EAAG,CAAC,EAKrD,aAAc,IAAM,CAClB,MAAMlG,EAAIkG,EAAE,QACZ,GAAI,OAAOlG,GAAM,SAAU,OAAOA,EAClC,MAAMwL,EAAI,OAAOxL,GAAK,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,IAAI,MAAM,EAAE,OAAQ+C,GAAM,OAAO,SAASA,CAAC,CAAC,EAC1F,OAAOyI,EAAE,OAASA,EAAE,OAAO,CAAC/E,EAAGxB,IAAMwB,EAAIxB,EAAG,CAAC,EAAIuG,EAAE,OAAS,CAC9D,GAAG,EACH,qBAAsBoB,GAAU1G,EAAE,iBAAkB,EAAK,EACzD,oBAAqByG,GAAWzG,EAAE,eAAe,EACjD,yBAA0B6G,GAAS7G,EAAE,qBAAsB,CAAC,EAC5D,eAAgB0G,GAAU1G,EAAE,WAAY,EAAK,EAC7C,QAAS,CAAC,EAAEA,EAAE,OAASA,EAAE,MAAM,QAC/B,YAAa,CAAC,CAACA,EAAE,UAYjB,eAAgB,IAAM,CACpB,MAAMnC,EAAM,CAAC,EACb,UAAWtE,IAAK,CAAC,QAAS,SAAU,QAAS,QAAS,aAAc,SAAU,SAAS,EAAG,CACxF,MAAMQ,EAAIiG,EAAEzG,CAAC,EACTQ,GAAK,OAAOA,GAAM,UAAY,OAAOA,EAAE,QAAW,UAAYA,EAAE,SAClE8D,EAAItE,CAAC,EAAI,CAAE,OAAQQ,EAAE,OAAQ,iBAAkBA,EAAE,kBAAoB,KAAM,MAAOA,EAAE,KAAM,EAE9F,CACA,OAAO,OAAO,KAAK8D,CAAG,EAAE,OAASA,EAAM,IACzC,GAAG,EAOH,kBAAmB,IAAM,CACvB,MAAMA,EAAM,CAAC,EACb,UAAWtE,IAAK,CAAC,QAAS,SAAU,QAAS,QAAS,aAAc,SAAU,UAAW,SAAU,WAAY,MAAM,EAAG,CACtH,MAAMQ,EAAIiG,EAAEzG,CAAC,EACTQ,GAAK,OAAOA,GAAM,UAAYA,EAAE,WAAa,OAAOA,EAAE,WAAc,UAAYA,EAAE,UAAU,UAC9F8D,EAAItE,CAAC,EAAI,CAAE,UAAWQ,EAAE,UAAW,MAAOA,EAAE,KAAM,EAEtD,CACA,OAAO,OAAO,KAAK8D,CAAG,EAAE,OAASA,EAAM,IACzC,GAAG,EACH,iBAAkBmC,EAAE,iBAAmB,CAAC,GAAG,OAAQO,GAAMA,GAAK,OAAOA,EAAE,WAAc,QAAQ,EAAE,IAAKA,IAAO,CACzG,UAAWA,EAAE,UACb,QAASmG,GAAUnG,EAAE,QAAS,EAAI,EAClC,SAAUmG,GAAUnG,EAAE,SAAU,EAAK,EACrC,MAAOsG,GAAStG,EAAE,MAAO,CAAC,EAC1B,KAAMsG,GAAStG,EAAE,KAAM,CAAC,CAC1B,EAAE,EAgBF,OAAQ,IAAM,CACZ,GAAI,OAAOP,EAAE,UAAa,SAAU,MAAO,GAC3C,MAAM9E,EAAM,OAAO8E,EAAE,OAAU,SAAWA,EAAE,MAAQ,GACpD,OAAI9E,EAAI,QAAQ,0BAA0B,IAAM,EAAU,GACtDA,EAAI,QAAQ,wBAAwB,IAAM,EAAU,GACnD8E,EAAE,MACA,CAAC9E,GAAOA,EAAI,QAAQ,cAAc,IAAM,EAD1B,EAEvB,GAAG,EAKH,YAAa,OAAO8E,EAAE,OAAU,UAAYA,EAAE,MAAM,QAAQ,0BAA0B,IAAM,EAC5F,aAAciI,EAAY,IAAIjI,EAAE,KAAO,OAASA,EAAE,GAAK5D,CAAC,GAAK,GAAK,EAIlE,SAAU8L,EAAa,IAAIlI,EAAE,KAAO,OAASA,EAAE,GAAK5D,CAAC,GAAK,KAC1D,SAAU4D,EAAE,SAAW,QAAUA,EAAE,SAAW,KAAOA,EAAE,OAAS,KAKhE,WAAY,OAAOA,EAAE,YAAe,UAAYA,EAAE,aAAe,GAAKA,EAAE,WAAa,KAYrF,YAAa,CAAC,EAAEA,EAAE,QAAUA,EAAE,OAAO,cAAgB,IAMrD,cAAeyI,EACf,OAAQE,EACR,MAAOH,EAAM,MACb,OAAQA,EAAM,OACd,KAAME,EACN,UAAW1I,EAAE,WAAa,SAC1B,MAAOyG,GAAWzG,EAAE,KAAK,EACzB,MAAO6G,GAAS7G,EAAE,MAAO,CAAC,EAC1B,WAAY6G,GAAS7G,EAAE,WAAY,CAAC,EACpC,eAAgB,CAAC,CAACA,EAAE,eACpB,eAAgBA,EAAE,gBAAkB,EAEpC,cAAeA,EAAE,gBAAkB,OAASwG,GAAUxG,EAAE,aAAa,EAAI,KACzE,SAAUA,EAAE,SAAW,CAAC,GAAG,IAAKrG,IAAO,CACrC,KAAMA,EAAE,MAAQ,GAKhB,KAAM,OAAOA,EAAE,MAAS,SAAWA,EAAE,KAAO,GAC5C,QAAS+M,GAAU/M,EAAE,QAAS,EAAI,EAKlC,cAAeA,EAAE,SAAW,OAAOA,EAAE,SAAY,UAAY,OAAOA,EAAE,QAAQ,QAAW,UAAYA,EAAE,QAAQ,OAAS,CAAE,OAAQA,EAAE,QAAQ,OAAQ,iBAAkBA,EAAE,QAAQ,kBAAoB,KAAM,MAAO,CAAC,CAACA,EAAE,QAAQ,KAAM,EAAI,KACvO,QAASA,EAAE,QAAU,CAAC,GAAG,IAAKG,IAAO,CACnC,OAAQA,EAAE,QAAU,CAAC,EACrB,qBAAsBA,EAAE,sBAAwB,CAAC,EACjD,SAAUA,EAAE,UAAY,CAAC,CAC3B,EAAE,CACJ,EAAE,CACJ,CACF,CAAC,EACKiP,EAAUhC,EAAU,SAAW,CAAC,EAChCiC,GAAkB,IAAM,CAC5B,MAAMnL,EAAM,CAAC,EACb,SAAW,CAAC8H,EAAG,CAAC,IAAK,OAAO,QAAQoD,CAAO,EACrC,GAAK,OAAO,GAAM,UAAY,OAAO,EAAE,QAAW,UAAY,EAAE,SAClElL,EAAI8H,CAAC,EAAI,CAAE,OAAQ,EAAE,OAAQ,iBAAkB,EAAE,kBAAoB,KAAM,MAAO,EAAE,KAAM,GAG9F,OAAO,OAAO,KAAK9H,CAAG,EAAE,OAASA,EAAM,IACzC,GAAG,EACGoL,GAAqB,IAAM,CAC/B,MAAMpL,EAAM,CAAC,EACb,SAAW,CAAC8H,EAAG,CAAC,IAAK,OAAO,QAAQoD,CAAO,EACrC,GAAK,OAAO,GAAM,UAAY,EAAE,WAAa,OAAO,EAAE,WAAc,UAAY,EAAE,UAAU,UAC9FlL,EAAI8H,CAAC,EAAI,CAAE,UAAW,EAAE,UAAW,MAAO,EAAE,KAAM,GAGtD,OAAO,OAAO,KAAK9H,CAAG,EAAE,OAASA,EAAM,IACzC,GAAG,EACH,CACE,MAAMqL,EAAwB,IAAI,IAClC,UAAWC,KAAKZ,EAAYY,EAAE,KAAO,QAAQD,EAAM,IAAIC,EAAE,GAAIA,CAAC,EAC9D,QAAS/B,EAAO,EAAGA,EAAO,EAAGA,IAAQ,CACnC,IAAIjB,EAAU,GACd,UAAWgD,KAAKZ,EAAQ,CACtB,GAAIY,EAAE,eAAiBA,EAAE,UAAY,KAAM,SAC3C,MAAMrP,EAAIoP,EAAM,IAAIC,EAAE,QAAQ,EAC1B,CAACrP,GAAK,CAACA,EAAE,eACTA,EAAE,OAASA,EAAE,UAAYA,EAAE,QAC/BqP,EAAE,cAAgBrP,EAAE,cAAc,MAAM,EACxCqM,EAAU,GACZ,CACA,GAAI,CAACA,EAAS,KAChB,CACF,CACA,MAAO,CACL,OAAQY,EAAU,QAAU,KAC5B,QAAAgC,EACA,eAAAC,EACA,kBAAAC,EACA,OAAAV,EACA,WAAA7D,CACF,CACF,CACA,SAAS0E,GAAyBb,EAAQ,CACxC,GAAI,CAAC,MAAM,QAAQA,CAAM,EAAG,OAC5B,MAAMrB,EAAuB,IAAI,IACjC,UAAWmC,KAAKd,EACVc,GAAKA,EAAE,KAAO,QAAUA,EAAE,KAAO,MAAMnC,EAAK,IAAImC,EAAE,GAAIA,CAAC,EAE7D,UAAWA,KAAKd,EAAQ,CACtB,GAAI,CAACc,EAAG,SACR,GAAIA,EAAE,UAAW,CACfA,EAAE,QAAU,GACZ,QACF,CACA,IAAIhB,EAAMgB,EAAE,cAAgB,GACxBvP,EAAIuP,EAAE,SACV,QAASvK,EAAI,EAAGuJ,GAAOvO,GAAK,MAAQgF,EAAI,GAAIA,IAAK,CAC/C,MAAMwK,EAASpC,EAAK,IAAIpN,CAAC,EACzB,GAAI,CAACwP,EAAQ,OACTA,EAAO,cAAgB,IAASA,EAAO,aAAWjB,EAAM,IAC5DvO,EAAIwP,EAAO,QACb,CACAD,EAAE,QAAUhB,CACd,CACF,CACA,SAASkB,GAAoBC,EAAOC,EAAW,CACzC,CAACD,GAAS,CAACC,GAAa,OAAOA,GAAc,UAC7CD,EAAM,aACNC,EAAU,aAAe,KAAMD,EAAM,MAAQ,GACnD,CACA,SAASE,GAAgBD,EAAW,CAClC,MAAI,CAACA,GAAa,OAAOA,EAAU,UAAa,SAAiB,KAC1D,CACL,aAAcA,EAAU,SACxB,SAAU,CAAC,CAACA,EAAU,SACtB,WAAYA,EAAU,WAAajD,GAAUiD,EAAU,UAAU,EAAI,IACvE,CACF,CACA,MAAME,GAA2B,OAAO,OAAuB,OAAO,eAAe,CACnF,UAAW,KACX,oBAAAJ,GACA,UAAA7C,GACA,WAAAD,GACA,SAAAI,GACA,WAAAC,GACA,UAAAN,GACA,UAAAD,GACA,yBAAA6C,GACA,gBAAAM,EACF,EAAG,OAAO,YAAa,CAAE,MAAO,QAAS,CAAC,CAAC,EAC3C,SAASE,GAAmBhN,EAAMiN,EAAQC,EAAW,CACnD,MAAMxD,EAAQ3J,GAASC,EAAMiN,EAAO,IAAI,EACxC,GAAIvD,IAAU,KAAM,OACpB,IAAIyD,EACJ,GAAI,CACFA,EAAK,KAAK,MAAMD,EAAUxD,CAAK,CAAC,CAClC,MAAY,CACV,MACF,CACAuD,EAAO,KAAOE,EAAG,MAAQ,CAAC,EAC1BF,EAAO,gBAAkBE,EAAG,QAAU,CAAC,GAAG,IAAKjQ,GAAM,CACnD,GAAI,CAACA,EAAE,SACL,MAAO,CACL,OAAQ,KACR,YAAa,GACb,OAAQA,EAAE,QAAU,KACpB,OAAQA,EAAE,QAAU,KACpB,MAAOA,EAAE,MAAQ,CAAC,EAClB,SAAU,SACV,SAAU,CAAC,EACX,OAAQ,CAAC,EACT,UAAW,CAAC,CACd,EAEF,MAAMkQ,EAAKrN,GAASC,EAAM9C,EAAE,QAAQ,EACpC,GAAIkQ,IAAO,KACT,MAAO,CAAE,OAAQ,KAAM,YAAa,GAAO,OAAQlQ,EAAE,QAAU,KAAM,MAAOA,EAAE,MAAQ,CAAC,EAAG,SAAU,SAAU,SAAU,CAAC,EAAG,OAAQ,CAAC,EAAG,UAAW,CAAC,CAAE,EAExJ,MAAMmQ,EAAK,KAAK,MAAMH,EAAUE,CAAE,CAAC,EAC7BE,EAAKD,EAAG,QAAUA,EAAG,OAAO,CAAC,GAAK,CAAC,EACzC,MAAO,CACL,OAAQC,EAAG,QAAU,KACrB,YAAa,GACb,OAAQpQ,EAAE,QAAU,KACpB,MAAOA,EAAE,MAAQ,CAAC,EAClB,SAAUoQ,EAAG,UAAY,SACzB,SAAUA,EAAG,UAAY,CAAC,EAC1B,OAAQA,EAAG,QAAU,CAAC,EACtB,UAAWA,EAAG,sBAAwB,CAAC,CACzC,CACF,CAAC,CACH,CACA,MAAMC,GAAiB,CACrB,8BAA+B,CAAE,SAAU,gCAAiC,EAI5E,gCAAiC,CAAE,SAAU,gCAAiC,EAI9E,mCAAoC,CAAE,SAAU,gCAAiC,EACjF,gCAAiC,CAAE,SAAU,gCAAiC,CAChF,EACA,SAASC,GAAsB9N,EAAM,CACnC,GAAI,CAACA,GAAQ,OAAOA,GAAS,SAAU,MAAO,GAC9C,MAAM,EAAIA,EAAK,YAAY,EAC3B,OAAO,IAAM,WAAa,IAAM,UAAY,IAAM,QAAU,EAAE,WAAW,cAAc,CACzF,CACA,SAAS+N,GAA0Bb,EAAOpC,EAAM,CAG9C,MAFI,CAACoC,GAAS,CAACpC,GAAQ,CAACA,EAAK,QAAUgD,GAAsBhD,EAAK,MAAM,IACxEoC,EAAM,QAAUA,EAAM,SAAW,CAAC,EAC9BA,EAAM,QAAQ,KAAM7P,GAAMA,EAAE,aAAa,GAAU,IACvD6P,EAAM,QAAQ,QAAQ,CACpB,KAAM,GACN,KAAM,iBACN,QAAS,GACT,cAAe,GACf,OAAQ,CAAC,CACP,OAAQpC,EAAK,QAAU,CAAC,EACxB,qBAAsBA,EAAK,sBAAwB,CAAC,EACpD,SAAUA,EAAK,UAAY,CAAC,CAC9B,CAAC,EACD,eAAgB,CAAC,CACf,OAAQA,EAAK,OACb,YAAa,GACb,OAAQ,KACR,MAAO,CAAC,EACR,SAAUA,EAAK,UAAY,SAC3B,SAAUA,EAAK,UAAY,CAAC,EAC5B,OAAQA,EAAK,QAAU,CAAC,EACxB,UAAWA,EAAK,sBAAwB,CAAC,CAC3C,CAAC,EACD,KAAM,CAAC,CACT,CAAC,EACM,GACT,CACA,MAAMkD,GAAoB,CACxB,iCAAkC,CAChC,OAAQ,CAAC,CAAE,OAAQ,OAAQ,SAAU,cAAe,SAAU,SAAU,UAAW,WAAY,WAAY,WAAY,SAAU,CAAC,EAAG,OAAQ,CAAC,CAAE,CAAC,CACnJ,CACF,EACMC,GAAyB,OAAO,OAAuB,OAAO,eAAe,CACjF,UAAW,KACX,kBAAAD,GACA,eAAAH,GACA,0BAAAE,GACA,sBAAAD,GACA,mBAAAR,EACF,EAAG,OAAO,YAAa,CAAE,MAAO,QAAS,CAAC,CAAC,EAC3C,SAASY,IAAe,CACtB,OAAO,IAAI,aAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAC1E,CACA,SAASC,GAAalK,EAAGxB,EAAG,CAC1B,MAAMlB,EAAM,IAAI,aAAa,EAAE,EAC/B,QAASe,EAAI,EAAGA,EAAI,EAAGA,IACrB,QAASC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAIlE,EAAI,EACR,QAASgL,EAAI,EAAGA,EAAI,EAAGA,IAAKhL,GAAK4F,EAAEoF,EAAI,EAAI9G,CAAC,EAAIE,EAAEH,EAAI,EAAI+G,CAAC,EAC3D9H,EAAIe,EAAI,EAAIC,CAAC,EAAIlE,CACnB,CAEF,OAAOkD,CACT,CACA,SAAS6M,GAAUC,EAAMC,EAAOC,EAAKC,EAAQC,EAAMC,EAAK,CACtD,MAAMnN,EAAM2M,GAAa,EACzB,OAAA3M,EAAI,CAAC,EAAI,GAAK+M,EAAQD,GACtB9M,EAAI,CAAC,EAAI,GAAKiN,EAASD,GACvBhN,EAAI,EAAE,EAAI,IAAMmN,EAAMD,GACtBlN,EAAI,EAAE,EAAI,EAAE+M,EAAQD,IAASC,EAAQD,GACrC9M,EAAI,EAAE,EAAI,EAAEiN,EAASD,IAAQC,EAASD,GACtChN,EAAI,EAAE,EAAI,IAAMmN,EAAMD,GACflN,CACT,CACA,SAASoN,GAAczN,EAAGX,EAAGmB,EAAGkN,EAAG,CACjC,OAAOT,GAAajN,EAAG,IAAI,aAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGX,EAAGmB,EAAGkN,EAAG,CAAC,CAAC,CAAC,CAC3F,CACA,SAASC,GAAc3N,EAAG,CACxB,MAAMwC,EAAI,IAAI,aAAa,EAAE,EAC7B,QAASnB,EAAI,EAAGA,EAAI,EAAGA,IAAK,QAASD,EAAI,EAAGA,EAAI,EAAGA,IAAKoB,EAAEpB,EAAI,EAAIC,CAAC,EAAIrB,EAAEqB,EAAI,EAAID,CAAC,EAClF,OAAOoB,CACT,CACA,SAASoL,GAAU5N,EAAGsC,EAAIC,EAAIsL,EAAI,CAChC,OAAOZ,GAAajN,EAAG,IAAI,aAAa,CAACsC,EAAI,EAAG,EAAG,EAAG,EAAGC,EAAI,EAAG,EAAG,EAAG,EAAGsL,EAAI,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAC,CAC9F,CACA,SAASC,GAAY9N,EAAG+N,EAAK,CAC3B,MAAM3M,EAAI,KAAK,IAAI2M,CAAG,EAChB5Q,EAAI,KAAK,IAAI4Q,CAAG,EACtB,OAAOd,GAAajN,EAAG,IAAI,aAAa,CAACoB,EAAGjE,EAAG,EAAG,EAAG,CAACA,EAAGiE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAC,CAC5F,CACA,SAAS4M,GAAYhO,EAAG+N,EAAK,CAC3B,MAAM3M,EAAI,KAAK,IAAI2M,CAAG,EAChB5Q,EAAI,KAAK,IAAI4Q,CAAG,EACtB,OAAOd,GAAajN,EAAG,IAAI,aAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAGoB,EAAGjE,EAAG,EAAG,EAAG,CAACA,EAAGiE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAC,CAC5F,CACA,SAAS6M,GAAYjO,EAAG+N,EAAK,CAC3B,MAAM3M,EAAI,KAAK,IAAI2M,CAAG,EAChB5Q,EAAI,KAAK,IAAI4Q,CAAG,EACtB,OAAOd,GAAajN,EAAG,IAAI,aAAa,CAACoB,EAAG,EAAG,CAACjE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGA,EAAG,EAAGiE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAC,CAC5F,CACA,SAAS8M,GAAgBC,EAASC,EAAQb,EAAMC,EAAK,CACnD,MAAMzR,EAAI,EAAI,KAAK,IAAIoS,EAAU,KAAK,GAAK,IAAM,CAAC,EAC5C9N,EAAM,IAAI,aAAa,EAAE,EAC/B,OAAAA,EAAI,CAAC,EAAItE,GAAKqS,GAAU,GACxB/N,EAAI,CAAC,EAAItE,EACTsE,EAAI,EAAE,GAAKmN,EAAMD,IAASA,EAAOC,GACjCnN,EAAI,EAAE,EAAI,GACVA,EAAI,EAAE,EAAI,EAAImN,EAAMD,GAAQA,EAAOC,GAC5BnN,CACT,CACA,SAASgO,GAAS9R,EAAG4M,EAAM,CACzB,MAAM9H,EAAI9E,GAAK,OAAOA,GAAM,SAAWA,EAAE,MAAQA,EACjD,OAAO,OAAO8E,GAAM,UAAY,OAAO,SAASA,CAAC,EAAIA,EAAI8H,CAC3D,CACA,SAASmF,GAAmBC,EAAO,CACjC,MAAMjN,EAAIiN,GAASA,EAAM,QACzB,MAAI,CAACjN,GAAKA,EAAE,qBAA6B,GAClC+M,GAAS/M,EAAE,IAAK,CAAC,EAAI,CAC9B,CACA,SAASkN,GAAiBxC,EAAOyC,EAAK,CACpC,OAAIA,GAAOA,EAAI,aAAezC,GAASA,EAAM,UAAYyC,EAAI,IAAYA,EAAI,IACtEzC,EAAM,MACf,CACA,SAAS0C,GAAWC,EAAKC,EAAQC,EAAI,CACnC,MAAMnB,EAAIoB,GAAU,CAACH,EAAI,CAAC,EAAIC,EAAO,CAAC,EAAGD,EAAI,CAAC,EAAIC,EAAO,CAAC,EAAGD,EAAI,CAAC,EAAIC,EAAO,CAAC,CAAC,CAAC,EAC1EvP,EAAIyP,GAAUC,GAAMF,EAAInB,CAAC,CAAC,EAC1BlN,EAAIuO,GAAMrB,EAAGrO,CAAC,EACdgB,EAAM,IAAI,aAAa,CAAChB,EAAE,CAAC,EAAGmB,EAAE,CAAC,EAAGkN,EAAE,CAAC,EAAG,EAAGrO,EAAE,CAAC,EAAGmB,EAAE,CAAC,EAAGkN,EAAE,CAAC,EAAG,EAAGrO,EAAE,CAAC,EAAGmB,EAAE,CAAC,EAAGkN,EAAE,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,EACxG,OAAArN,EAAI,EAAE,EAAI,EAAEhB,EAAE,CAAC,EAAIsP,EAAI,CAAC,EAAItP,EAAE,CAAC,EAAIsP,EAAI,CAAC,EAAItP,EAAE,CAAC,EAAIsP,EAAI,CAAC,GACxDtO,EAAI,EAAE,EAAI,EAAEG,EAAE,CAAC,EAAImO,EAAI,CAAC,EAAInO,EAAE,CAAC,EAAImO,EAAI,CAAC,EAAInO,EAAE,CAAC,EAAImO,EAAI,CAAC,GACxDtO,EAAI,EAAE,EAAI,EAAEqN,EAAE,CAAC,EAAIiB,EAAI,CAAC,EAAIjB,EAAE,CAAC,EAAIiB,EAAI,CAAC,EAAIjB,EAAE,CAAC,EAAIiB,EAAI,CAAC,GACjDtO,CACT,CACA,SAAS2O,GAAmBhP,EAAGX,EAAGmB,EAAGkN,EAAG,CACtC,MAAMxP,EAAI8B,EAAE,CAAC,EAAIX,EAAIW,EAAE,CAAC,EAAIQ,EAAIR,EAAE,EAAE,EAAI0N,EAAI1N,EAAE,EAAE,EAChD,MAAO,EACJA,EAAE,CAAC,EAAIX,EAAIW,EAAE,CAAC,EAAIQ,EAAIR,EAAE,CAAC,EAAI0N,EAAI1N,EAAE,EAAE,GAAK9B,GAC1C8B,EAAE,CAAC,EAAIX,EAAIW,EAAE,CAAC,EAAIQ,EAAIR,EAAE,CAAC,EAAI0N,EAAI1N,EAAE,EAAE,GAAK9B,GAC1C8B,EAAE,CAAC,EAAIX,EAAIW,EAAE,CAAC,EAAIQ,EAAIR,EAAE,EAAE,EAAI0N,EAAI1N,EAAE,EAAE,GAAK9B,CAC9C,CACF,CACA,MAAM+Q,GAAiB,CACrB,CAAC,GAAI,CAAC,EACN,CAAC,GAAI,EAAE,EACP,CAAC,GAAI,CAAC,EACN,CAAC,GAAI,CAAC,CACR,EACA,SAASC,GAAkBvK,EAAOC,EAAQuK,EAAOC,EAAOC,EAAQ,CAC9D,MAAMtM,EAAI4B,EAAQC,EAClB,GAAI,CAAC,OAAO,SAAS7B,CAAC,GAAKA,GAAK,GAAK,EAAEoM,EAAQ,IAAM,EAAEC,EAAQ,GAAI,OAAO,KAC1E,MAAME,EAAM,IACNC,EAASJ,EAAQC,EACvB,GAAI,KAAK,IAAIrM,EAAIwM,CAAM,GAAKD,EAAMC,EAChC,MAAO,CAAE,MAAOJ,EAAO,MAAOC,CAAM,EAEtC,SAAW,CAACI,EAAIC,CAAE,IAAKR,GAAgB,CACrC,MAAM5N,EAAImO,EAAKC,EACf,GAAI,KAAK,IAAI1M,EAAI1B,CAAC,EAAIiO,EAAMjO,EAAG,SAC/B,MAAMqO,EAAQN,EACRO,EAAQP,EAAQ/N,EACtB,OAAIsO,EAAQR,EAAQ,KACX,CAAE,MAAOA,EAAO,MAAOA,EAAQ9N,CAAE,EAEnC,CAAE,MAAAsO,EAAO,MAAAD,CAAM,CACxB,CACA,OAAO,IACT,CACA,SAASE,GAAU/T,EAAKsT,EAAOC,EAAOzK,EAAOC,EAAQiL,EAAQC,EAAQ,CACnE,MAAMC,EAAKC,GAAQH,CAAM,EACnBI,EAAKD,GAAQF,CAAM,EACzB,GAAIjU,IAAQ,QAAS,CACnB,MAAMqU,EAAUhB,GAAkBvK,EAAOC,EAAQuK,EAAOC,CAAK,EAC7D,GAAIc,EACF,MAAO,CACL,MAAOf,EAAQe,EAAQ,OAASH,EAChC,MAAOX,EAAQc,EAAQ,OAASD,EAChC,MAAOC,EAAQ,MACf,MAAOA,EAAQ,KACjB,EAEF,MAAMC,EAAQ,KAAK,IAAIxL,EAAQwK,EAAOvK,EAASwK,CAAK,EAC9CO,EAAQhL,EAAQwL,EAChBT,EAAQ9K,EAASuL,EACvB,MAAO,CAAE,MAAOhB,EAAQQ,GAASI,EAAI,MAAOX,EAAQM,GAASO,EAAI,MAAAN,EAAO,MAAAD,CAAM,CAChF,CACA,GAAI7T,IAAQ,UAAW,CACrB,MAAMuU,EAAezL,EAAQC,EAE7B,GADsBuK,EAAQC,EACVgB,EAAc,CAChC,MAAMC,EAASlB,EACTmB,EAASnB,EAAQiB,EACvB,MAAO,CAAE,KAAM,EAAG,MAAOhB,EAAQkB,GAAU,EAAG,MAAOD,EAAQ,MAAOC,CAAO,CAC7E,CACA,MAAMZ,EAAQN,EACRO,EAAQP,EAAQgB,EACtB,MAAO,CAAE,KAAM,EAAG,MAAOjB,EAAQQ,GAAS,EAAG,MAAAA,EAAO,MAAAD,CAAM,CAC5D,CACA,MAAO,CAAE,KAAM,EAAG,KAAM,EAAG,MAAOP,EAAO,MAAOC,CAAM,CACxD,CACA,SAASmB,GAAYhC,EAAO5J,EAAOC,EAAQ/I,EAAKgU,EAAQC,EAAQ,CAC9D,MAAMvE,EAAUgD,EAAM,QAChBE,EAAMF,EAAM,OACZiC,EAAO/B,GAAOA,EAAI,IAAMgC,GAAWhC,EAAI,GAAG,EAAI,CAAC,EAAG,EAAG,CAAC,EACtDiC,EAAUjC,GAAOA,EAAI,OAASgC,GAAWhC,EAAI,MAAM,EAAI,CAAC,EAAG,EAAG,EAAE,EAChEkC,EAAMlC,GAAOA,EAAI,GAAKgC,GAAWhC,EAAI,EAAE,EAAI,CAAC,EAAG,EAAG,CAAC,EACzD,GAAIH,GAAmBC,CAAK,EAAG,CAC7B,MAAMH,EAASxJ,EAAS,EAAID,EAAQC,EAAS,mBACvCgM,EAAMvC,GAAS9C,EAAQ,IAAK,EAAE,EAC9BgC,EAAO,KAAK,IAAIc,GAAS9C,EAAQ,MAAO,GAAI,EAAG,IAAI,EACnDiC,EAAM,KAAK,IAAIa,GAAS9C,EAAQ,KAAM,GAAG,EAAGgC,EAAO,CAAC,EACpDsD,EAAQnC,GAAW8B,EAAME,EAASC,CAAG,EACrCG,EAAc5C,GAAgB0C,EAAKxC,EAAQb,EAAMC,CAAG,EAC1D,MAAO,CACL,KAAMqD,EACN,WAAYC,EACZ,IAAKN,EACL,OAAQE,EACR,MAAOtC,EACP,MAAO,EACP,KAAM,EACN,KAAM,EACN,MAAOA,EACP,MAAO,EACP,YAAa,EACf,CACF,CACA,MAAM2C,EAAO/D,GAAa,EACpBmC,EAAQ5D,GAAWA,EAAQ,sBAAuBA,EAAQ,qBAAqB,OAAS5G,EACxFyK,EAAQ7D,GAAWA,EAAQ,sBAAuBA,EAAQ,qBAAqB,QAAU3G,EACzFoM,EAAMpB,GAAU/T,EAAKsT,EAAOC,EAAOzK,EAAOC,EAAQiL,EAAQC,CAAM,EAChEmB,EAAO1C,GAASA,EAAM,iBAAmBA,EAAM,iBAAiB,KAAOhD,GAAWA,EAAQ,KAC1F2F,EAAOD,GAAQ,OAAOA,GAAS,SAAWA,EAAK,MAAQA,EACvDE,EAAO,OAAOD,CAAI,EACxB,GAAI,OAAO,SAASC,CAAI,GAAKA,EAAO,GAAK,KAAK,IAAIA,EAAO,CAAC,EAAI,KAAM,CAClE,MAAMC,EAAKJ,EAAI,KAAOA,EAAI,MAAQ,EAC5BK,EAAKL,EAAI,KAAOA,EAAI,MAAQ,EAC5BM,EAAKN,EAAI,MAAQG,EACjBI,EAAKP,EAAI,MAAQG,EACvBH,EAAI,KAAOI,EAAKE,EAAK,EACrBN,EAAI,KAAOK,EAAKE,EAAK,EACrBP,EAAI,MAAQM,EACZN,EAAI,MAAQO,CACd,CACA,MAAMC,EAAatE,GAAU8D,EAAI,KAAMA,EAAI,KAAOA,EAAI,MAAOA,EAAI,KAAOA,EAAI,MAAOA,EAAI,KAAM,KAAM,GAAG,EACtG,MAAO,CAAE,KAAAD,EAAM,WAAAS,EAAY,IAAKhB,EAAM,MAAArB,EAAO,MAAAC,EAAO,KAAM4B,EAAI,KAAM,KAAMA,EAAI,KAAM,MAAOA,EAAI,MAAO,MAAOA,EAAI,MAAO,YAAa,EAAM,CAC7I,CACA,SAAShB,GAAQzT,EAAG,CAClB,MAAM,EAAI,OAAOA,CAAC,EAClB,OAAK,OAAO,SAAS,CAAC,EACf,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EADC,EAElC,CACA,SAASkU,GAAWtT,EAAG,CACrB,OAAO,OAAOA,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,IAAI,MAAM,CACjD,CACA,SAAS2R,GAAUvS,EAAG,CACpB,MAAMsP,EAAI,KAAK,MAAMtP,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,GAAK,EAC1C,MAAO,CAACA,EAAE,CAAC,EAAIsP,EAAGtP,EAAE,CAAC,EAAIsP,EAAGtP,EAAE,CAAC,EAAIsP,CAAC,CACtC,CACA,SAASkD,GAAMhM,EAAGxB,EAAG,CACnB,MAAO,CAACwB,EAAE,CAAC,EAAIxB,EAAE,CAAC,EAAIwB,EAAE,CAAC,EAAIxB,EAAE,CAAC,EAAGwB,EAAE,CAAC,EAAIxB,EAAE,CAAC,EAAIwB,EAAE,CAAC,EAAIxB,EAAE,CAAC,EAAGwB,EAAE,CAAC,EAAIxB,EAAE,CAAC,EAAIwB,EAAE,CAAC,EAAIxB,EAAE,CAAC,CAAC,CACzF,CACA,SAASkQ,GAAoBtQ,EAAG,CAC9B,MAAM,EAAI,OAAOA,CAAC,EAClB,OAAO,OAAO,SAAS,CAAC,EAAI,EAAI,GAAM,CACxC,CACA,SAASuQ,GAAc9P,EAAK,CAC1B,MAAM+P,EAAuB,IAAI,IAC3BC,EAAsB,IAAI,IAC1BC,EAAK,4EACX,IAAI7R,EACJ,MAAQA,EAAI6R,EAAG,KAAKjQ,CAAG,KAAO,MAAM,CAClC,MAAMkQ,EAAS,GAAM,EAAE,QAAQ,UAAW,EAAE,EAAE,QAAQ,oBAAqB,EAAE,EAAE,KAAK,EAChF9R,EAAE,CAAC,IAAM,OACX4R,EAAI,IAAI5R,EAAE,CAAC,EAAG,CAAE,KAAMA,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAK,GAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,EAAG,KAAM8R,EAAM9R,EAAE,CAAC,CAAC,CAAE,CAAC,EAE/F2R,EAAK,IAAI3R,EAAE,CAAC,EAAG8R,EAAM9R,EAAE,CAAC,CAAC,CAAC,CAE9B,CACA,MAAO,CAAE,KAAA2R,EAAM,IAAAC,CAAI,CACrB,CACA,SAASG,GAAoBC,EAAMlT,EAAMmT,EAAMhK,EAAO,CACpD,MAAM5H,EAAM,CAAC,EACb,IAAI,EAAI,EACR,KAAO,EAAI2R,EAAK,QAAQ,CACtB,MAAME,EAAMF,EAAK,QAAQlT,EAAM,CAAC,EAChC,GAAIoT,IAAQ,GAAI,CACd7R,EAAI,KAAK2R,EAAK,MAAM,CAAC,CAAC,EACtB,KACF,CACA3R,EAAI,KAAK2R,EAAK,MAAM,EAAGE,CAAG,CAAC,EAE3B,IAAIjM,EADMiM,EAAMpT,EAAK,OAErB,KAAOmH,EAAI+L,EAAK,QAAU,KAAK,KAAKA,EAAK/L,CAAC,CAAC,GAAGA,IAC9C,GAAI+L,EAAK/L,CAAC,IAAM,IAAK,CACnB5F,EAAI,KAAK2R,EAAK,MAAME,EAAKjM,CAAC,CAAC,EAC3B,EAAIA,EACJ,QACF,CACA,IAAIkM,EAAa,EACb5S,EAAM0G,EACV,KAAO1G,EAAMyS,EAAK,OAAQzS,IACxB,GAAIyS,EAAKzS,CAAG,IAAM,IAAK4S,YACdH,EAAKzS,CAAG,IAAM,MACrB4S,IACIA,IAAe,GAAG,MAG1B,GAAI5S,GAAOyS,EAAK,OAAQ,CACtB3R,EAAI,KAAK2R,EAAK,MAAME,CAAG,CAAC,EACxB,KACF,CACA,MAAME,EAAUJ,EAAK,MAAM/L,EAAI,EAAG1G,CAAG,EAC/B8S,EAAOC,GAAUF,CAAO,EAC9B,IAAIG,EAAON,EAAK,KAChBA,EAAK,KAAK,QAAQ,CAACO,EAAOrK,IAAM,CAC9B,MAAMsK,EAAMJ,EAAKlK,CAAC,IAAM,OAASkK,EAAKlK,CAAC,EAAE,KAAK,EAAI,GAClDoK,EAAOG,GAAYH,EAAMC,EAAOC,CAAG,CACrC,CAAC,EACGxK,EAAQ,IAAGsK,EAAOI,GAAeJ,EAAMtK,EAAQ,CAAC,GACpD5H,EAAI,KAAK,IAAMkS,EAAO,GAAG,EACzB,EAAIhT,EAAM,CACZ,CACA,OAAOc,EAAI,KAAK,EAAE,CACpB,CACA,SAASqS,GAAYV,EAAMY,EAAMC,EAAa,CAC5C,OAAOb,EAAK,QAAQ,IAAI,OAAO,MAAQY,EAAK,QAAQ,sBAAuB,MAAM,EAAI,MAAO,GAAG,EAAGC,CAAW,CAC/G,CACA,SAASP,GAAUnV,EAAG,CACpB,MAAMkD,EAAM,CAAC,EACb,IAAI4H,EAAQ,EACRL,EAAM,GACV,QAAShJ,EAAI,EAAGA,EAAIzB,EAAE,OAAQyB,IAAK,CACjC,MAAMwC,EAAIjE,EAAEyB,CAAC,EACTwC,IAAM,IAAK6G,IACN7G,IAAM,KAAK6G,IAChB7G,IAAM,KAAO6G,IAAU,GACzB5H,EAAI,KAAKuH,CAAG,EACZA,EAAM,IAENA,GAAOxG,CAEX,CACA,OAAIwG,EAAI,KAAK,IAAM,IAAIvH,EAAI,KAAKuH,CAAG,EAC5BvH,CACT,CACA,SAASsS,GAAeX,EAAM/J,EAAO,CACnC,QAAS6K,EAAQ,EAAGA,EAAQ,GAAIA,IAAS,CACvC,KAAM,CAAE,KAAAnB,EAAM,IAAAC,CAAI,EAAIF,GAAcM,CAAI,EACxC,GAAIL,EAAK,OAAS,GAAKC,EAAI,OAAS,EAAG,MACvC,MAAMmB,EAAQf,EAAK,MAAM;AAAA,CAAI,EAC7B,IAAIrJ,EAAU,GACd,QAAS/J,EAAI,EAAGA,EAAImU,EAAM,OAAQnU,IAAK,CACrC,MAAMoU,EAAOD,EAAMnU,CAAC,EACpB,GAAI,WAAW,KAAKoU,CAAI,EAAG,SAC3B,IAAInH,EAAImH,EACR,SAAW,CAAClU,EAAM2T,CAAG,IAAKd,EACb,IAAI,OAAO,MAAQ7S,EAAK,QAAQ,sBAAuB,MAAM,EAAI,KAAK,EAC1E,KAAK+M,CAAC,IACXA,EAAI6G,GAAY7G,EAAG/M,EAAM2T,CAAG,EAC5B9J,EAAU,IAGd,SAAW,CAAC7J,EAAMmT,CAAI,IAAKL,EACrB/F,EAAE,SAAS/M,CAAI,IACjB+M,EAAIkG,GAAoBlG,EAAG/M,EAAMmT,EAAMhK,CAAK,EAC5CU,EAAU,IAGdoK,EAAMnU,CAAC,EAAIiN,CACb,CAEA,GADAmG,EAAOe,EAAM,KAAK;AAAA,CAAI,EAClB,CAACpK,EAAS,KAChB,CACA,OAAOqJ,CACT,CACA,SAASiB,GAAWC,EAAMC,EAAQxB,EAAM,CACtC,MAAMyB,EAAWtU,GACXqU,EAAOrU,CAAI,IAAM,OAAe,OAAOqU,EAAOrU,CAAI,CAAC,EACnD6S,EAAK,IAAI7S,CAAI,EAAU,IAAM6S,EAAK,IAAI7S,CAAI,EAAI,IAC3C,IAET,IAAI3B,EAAI+V,EAAK,QAAQ,8BAAgCpL,GAAMsL,EAAQtL,CAAC,CAAC,EACjE,EAAI,EACR,SAASuL,GAAS,CAChB,KAAO,EAAIlW,EAAE,QAAU,KAAK,KAAKA,EAAE,CAAC,CAAC,GAAG,GAC1C,CACA,SAASmW,GAAU,CACjB,IAAI/W,EAAIgX,EAAS,EAEjB,IADAF,EAAO,EACAlW,EAAE,WAAW,KAAM,CAAC,GAAG,CAC5B,GAAK,EACL,MAAMkE,EAAIkS,EAAS,EACnBhX,EAAIA,GAAK8E,EACTgS,EAAO,CACT,CACA,OAAO9W,CACT,CACA,SAASgX,GAAW,CAClB,IAAIhX,EAAIiX,EAAQ,EAEhB,IADAH,EAAO,EACAlW,EAAE,WAAW,KAAM,CAAC,GAAG,CAC5B,GAAK,EACL,MAAMkE,EAAImS,EAAQ,EAClBjX,EAAIA,GAAK8E,EACTgS,EAAO,CACT,CACA,OAAO9W,CACT,CACA,SAASiX,GAAU,CACjB,IAAIjX,EAAIkX,EAAS,EAEjB,IADAJ,EAAO,EACAlW,EAAE,WAAW,KAAM,CAAC,GAAKA,EAAE,WAAW,KAAM,CAAC,GAAG,CACrD,MAAMyG,EAAKzG,EAAE,CAAC,IAAM,IAAM,KAAO,KACjC,GAAK,EACL,MAAMkE,EAAIoS,EAAS,EACnBlX,EAAIqH,IAAO,KAAOrH,IAAM8E,EAAI9E,IAAM8E,EAClCgS,EAAO,CACT,CACA,OAAO9W,CACT,CACA,SAASkX,GAAW,CAClB,IAAIlX,EAAImX,EAAW,EAEnB,IADAL,EAAO,EACA,QAAQ,KAAKlW,EAAE,CAAC,GAAK,EAAE,GAAG,CAC/B,IAAIyG,EAAKzG,EAAE,CAAC,EACRA,EAAE,EAAI,CAAC,IAAM,MACfyG,GAAM,IACN,KAEF,IACA,MAAMvC,EAAIqS,EAAW,EACjB9P,IAAO,IAAKrH,EAAIA,EAAI8E,EACfuC,IAAO,IAAKrH,EAAIA,EAAI8E,EACpBuC,IAAO,KAAMrH,EAAIA,GAAK8E,EAC1B9E,EAAIA,GAAK8E,EACdgS,EAAO,CACT,CACA,OAAO9W,CACT,CACA,SAASmX,GAAa,CAEpB,OADAL,EAAO,EACHlW,EAAE,CAAC,IAAM,KACX,IACO,CAACuW,EAAW,GAEdC,EAAU,CACnB,CACA,SAASA,GAAY,CAEnB,GADAN,EAAO,EACHlW,EAAE,CAAC,IAAM,IAAK,CAChB,IACA,MAAMZ,EAAI+W,EAAQ,EAClB,OAAAD,EAAO,EACP,IACO9W,CACT,CACA,MAAMyD,EAAI,iBAAiB,KAAK7C,EAAE,MAAM,CAAC,CAAC,EAC1C,OAAI6C,GACF,GAAKA,EAAE,CAAC,EAAE,OACH,OAAOA,EAAE,CAAC,CAAC,GAEb,EACT,CACA,OAAOsT,EAAQ,CACjB,CACA,SAASM,GAAchS,EAAK,CAC1B,IAAIvB,EAAM,GACNzB,EAAI,EACR,MAAMkJ,EAAIlG,EAAI,OACd,KAAOhD,EAAIkJ,GAAG,CACZ,MAAM1G,EAAIQ,EAAIhD,CAAC,EACTuC,EAAIS,EAAIhD,EAAI,CAAC,EACnB,GAAIwC,IAAM,KAAOD,IAAM,IAAK,CAE1B,IADAvC,GAAK,EACEA,EAAIkJ,GAAK,EAAElG,EAAIhD,CAAC,IAAM,KAAOgD,EAAIhD,EAAI,CAAC,IAAM,MAC7CgD,EAAIhD,CAAC,IAAM;AAAA,IAAMyB,GAAO;AAAA,GAC5BzB,IAEFA,GAAK,EACL,QACF,CACA,GAAIwC,IAAM,KAAOD,IAAM,IAAK,CAC1B,KAAOvC,EAAIkJ,GAAKlG,EAAIhD,CAAC,IAAM;AAAA,GAAMA,IACjC,QACF,CACAyB,GAAOe,EACPxC,GACF,CACA,OAAOyB,CACT,CACA,SAASwT,GAAWjS,EAAKuR,EAAQW,EAAiB7L,EAAO,CACvD,MAAM8K,EAAQnR,EAAI,MAAM;AAAA,CAAI,EACtBvB,EAAM,CAAC,EACP0T,EAAQ,CAAC,EACTpC,EAAuB,IAAI,IACjC,QAAS/S,EAAI,EAAGA,EAAImU,EAAM,OAAQnU,IAAK,CACrC,MAAMoU,EAAOD,EAAMnU,CAAC,EACdoV,EAAIhB,EAAK,KAAK,EACpB,GAAIgB,EAAE,WAAW,UAAU,EAAG,CAC5B,GAAIC,GAAUF,CAAK,EAAG,CACpB,MAAM/T,EAAI,oDAAoD,KAAKgU,CAAC,EAC9DE,EAAOlU,IAAMA,EAAE,CAAC,GAAKA,EAAE,CAAC,GACxBmU,EAAMD,GAAQJ,EAAkBA,EAAgBI,CAAI,EAAI,KAC1DC,GAAQ,KACV9T,EAAI,KAAKwT,GAAWD,GAAcO,CAAG,EAAGhB,EAAQW,CAAe,CAAC,EAEhEzT,EAAI,KAAK,6BAAqB6T,EAAO,GAAG,CAE5C,CACA,QACF,CACA,GAAIF,EAAE,WAAW,SAAS,EAAG,CAC3B,GAAIC,GAAUF,CAAK,EAAG,CACpB1T,EAAI,KAAK2S,CAAI,EACb,MAAMhT,EAAI,kEAAkE,KAAKgU,CAAC,EAC9EhU,GAAG2R,EAAK,IAAI3R,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAE,KAAK,CAAC,CACnC,CACA,QACF,CACA,GAAIgU,EAAE,WAAW,QAAQ,EAAG,CACtBC,GAAUF,CAAK,GAAG1T,EAAI,KAAK2S,CAAI,EACnC,QACF,CACA,GAAIgB,EAAE,WAAW,QAAQ,GAAKA,EAAE,WAAW,SAAS,GAAKA,EAAE,WAAW,KAAK,EAAG,CAC5E,MAAMlI,EAASmI,GAAUF,CAAK,EAC9B,IAAIK,EAAO,GACX,GAAIJ,EAAE,WAAW,QAAQ,EAAG,CAC1B,MAAMlV,EAAOkV,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,CAAC,EAC7CI,EAAOjB,EAAOrU,CAAI,IAAM,QAAU6S,EAAK,IAAI7S,CAAI,CACjD,SAAWkV,EAAE,WAAW,SAAS,EAAG,CAClC,MAAMlV,EAAOkV,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,CAAC,EAC7CI,EAAO,EAAEjB,EAAOrU,CAAI,IAAM,QAAU6S,EAAK,IAAI7S,CAAI,EACnD,KACE,IAAI,CACFsV,EAAO,CAAC,CAACnB,GAAWe,EAAE,MAAM,CAAC,EAAE,KAAK,EAAGb,EAAQxB,CAAI,CACrD,MAAY,CACVyC,EAAO,EACT,CAEFL,EAAM,KAAK,CAAE,OAAAjI,EAAQ,IAAKsI,EAAM,KAAMA,CAAK,CAAC,EAC5C,QACF,CACA,GAAIJ,EAAE,WAAW,OAAO,EAAG,CACzB,GAAID,EAAM,OAAS,EAAG,CACpB,MAAM1G,EAAM0G,EAAMA,EAAM,OAAS,CAAC,EAClC1G,EAAI,IAAM,CAACA,EAAI,KACfA,EAAI,KAAO,EACb,CACA,QACF,CACA,GAAI2G,EAAE,WAAW,OAAO,EAAG,CACzB,GAAID,EAAM,OAAS,EAAG,CACpB,MAAM1G,EAAM0G,EAAMA,EAAM,OAAS,CAAC,EAClC,GAAI1G,EAAI,KACNA,EAAI,IAAM,OACL,CACL,IAAI+G,EAAO,GACX,GAAI,CACFA,EAAO,CAAC,CAACnB,GAAWe,EAAE,MAAM,CAAC,EAAE,KAAK,EAAGb,EAAQxB,CAAI,CACrD,MAAY,CACVyC,EAAO,EACT,CACA/G,EAAI,IAAM+G,EACV/G,EAAI,KAAO+G,CACb,CACF,CACA,QACF,CACA,GAAIJ,EAAE,WAAW,QAAQ,EAAG,CACtBD,EAAM,OAAS,GAAGA,EAAM,IAAI,EAChC,QACF,CACIC,EAAE,WAAW,GAAG,GAGhBC,GAAUF,CAAK,GAAG1T,EAAI,KAAK2S,CAAI,CACrC,CACA,OAAO3S,EAAI,KAAK;AAAA,CAAI,CACtB,CACA,SAAS4T,GAAUF,EAAO,CACxB,OAAOA,EAAM,MAAO5W,GAAMA,EAAE,QAAUA,EAAE,GAAG,CAC7C,CACA,SAASkX,GAAWrC,EAAMsC,EAASC,EAAQC,EAAS,CAClD,IAAIvM,EAAQ,EACZ,QAAS,EAAIqM,EAAS,EAAItC,EAAK,OAAQ,IACrC,GAAIA,EAAK,CAAC,IAAMuC,EAAQtM,YACf+J,EAAK,CAAC,IAAMwC,IACnBvM,IACIA,IAAU,GAAG,OAAO,EAG5B,MAAO,EACT,CACA,SAASwM,GAAWzC,EAAMsC,EAAS,CACjC,OAAOD,GAAWrC,EAAMsC,EAAS,IAAK,GAAG,CAC3C,CACA,MAAMI,GAA6B,IAAI,IAAI,CACzC,OACA,OACA,MACA,OACA,QACA,SACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACF,CAAC,EACD,SAASC,GAAc3C,EAAME,EAAK,CAChC,IAAI5V,EAAI4V,EAAM,EACd,KAAO5V,GAAK,GAAK,QAAQ,KAAK0V,EAAK1V,CAAC,CAAC,GAAGA,IACxC,GAAIA,EAAI,GAAKA,IAAM4V,EAAM,EAAG,MAAO,GACnC,IAAI/V,EAAIG,EAAI,EACZ,KAAOA,GAAK,GAAK,eAAe,KAAK0V,EAAK1V,CAAC,CAAC,GAAGA,IAC/C,MAAMsW,EAAOZ,EAAK,MAAM1V,EAAI,EAAGH,CAAC,EAChC,OAAOuY,GAAW,IAAI9B,CAAI,CAC5B,CACA,SAASgC,GAAY5C,EAAM6C,EAAUC,EAAI,CACvC,IAAIzU,EAAM,GACNzB,EAAI,EACR,KAAOA,EAAIoT,EAAK,QAAQ,CACtB,MAAME,EAAMF,EAAK,QAAQ6C,EAAUjW,CAAC,EACpC,GAAIsT,IAAQ,GAAI,CACd7R,GAAO2R,EAAK,MAAMpT,CAAC,EACnB,KACF,CACA,GAAIsT,EAAM,GAAK,eAAe,KAAKF,EAAKE,EAAM,CAAC,CAAC,EAAG,CACjD7R,GAAO2R,EAAK,MAAMpT,EAAGsT,EAAM,CAAC,EAC5BtT,EAAIsT,EAAM,EACV,QACF,CACA,MAAM6C,EAAQ7C,EAAM2C,EAAS,OAC7B,GAAIE,EAAQ/C,EAAK,QAAU,eAAe,KAAKA,EAAK+C,CAAK,CAAC,EAAG,CAC3D1U,GAAO2R,EAAK,MAAMpT,EAAGmW,CAAK,EAC1BnW,EAAImW,EACJ,QACF,CACA,GAAIJ,GAAc3C,EAAME,CAAG,EAAG,CAC5B7R,GAAO2R,EAAK,MAAMpT,EAAGmW,CAAK,EAC1BnW,EAAImW,EACJ,QACF,CACA1U,GAAO2R,EAAK,MAAMpT,EAAGsT,CAAG,EACxB,IAAIjM,EAAIiM,EAAM2C,EAAS,OACvB,KAAO5O,EAAI+L,EAAK,QAAU,KAAK,KAAKA,EAAK/L,CAAC,CAAC,GAAGA,IAC9C,GAAI+L,EAAK/L,CAAC,IAAM,IAAK,CACnB5F,GAAO2R,EAAK,MAAME,EAAKjM,CAAC,EACxBrH,EAAIqH,EACJ,QACF,CACA,MAAM1G,EAAMkV,GAAWzC,EAAM/L,CAAC,EAC9B,GAAI1G,IAAQ,GAAI,CACdc,GAAO2R,EAAK,MAAME,CAAG,EACrB,KACF,CACA,MAAM9I,EAAQ4I,EAAK,MAAM/L,EAAI,EAAG1G,CAAG,EACnCc,GAAOyU,EAAG1L,EAAO8I,CAAG,EACpBtT,EAAIW,EAAM,CACZ,CACA,OAAOc,CACT,CACA,SAAS2U,GAAUpT,EAAKqT,EAAO9B,EAAQW,EAAiBoB,EAAY,CAClE,MAAMC,EAASvT,EACfA,EAAMgS,GAAchS,CAAG,EACvB,MAAMwT,EAAW,CAAC,EACZC,EAAU,yEAChB,IAAIC,EACJ,GAAI,OAAOJ,GAAe,UAAYA,EAAY,CAChD,MAAMK,EAAQ,IAAI,OAAOF,EAAQ,OAAQ,GAAG,EAC5C,IAAIG,EACJ,MAAQA,EAAKD,EAAM,KAAKL,CAAU,KAAO,MAAME,EAASI,EAAG,CAAC,CAAC,EAAI,OAAOA,EAAG,CAAC,CAAC,CAC/E,CACA,MAAQF,EAAKD,EAAQ,KAAKF,CAAM,KAAO,MAAMC,EAASE,EAAG,CAAC,CAAC,EAAI,OAAOA,EAAG,CAAC,CAAC,EAC3E,MAAMG,EAAY,CAAE,KAAM,EAAG,GAAGL,EAAU,GAAGjC,GAAU,CAAC,CAAE,EAC1D,IAAIuC,EAAO7B,GAAWjS,EAAK6T,EAAW3B,CAAe,EACrD4B,EAAO/C,GAAe+C,EAAM,EAAE,EAC9BA,EAAOA,EAAK,QAAQ,4BAA6B,EAAE,EACnD,CACE,MAAMC,EAA6B,IAAI,IACjCC,EAAW,0CACjB,IAAIC,EACJ,MAAQA,EAAKD,EAAS,KAAKT,CAAM,KAAO,MAAMQ,EAAW,IAAIE,EAAG,CAAC,CAAC,EAClE,UAAW1N,KAAK,OAAO,KAAKsN,CAAS,EAAGE,EAAW,IAAIxN,CAAC,EACxDwN,EAAW,OAAO,MAAM,EACxB,UAAW7W,KAAQ6W,EAAY,CAC7B,MAAMpZ,EAAIkZ,EAAU3W,CAAI,IAAM,OAAS2W,EAAU3W,CAAI,EAAI,EACzD4W,EAAOhD,GAAYgD,EAAM5W,EAAM,OAAOvC,CAAC,CAAC,CAC1C,CACF,CACAmZ,EAAOhD,GAAYgD,EAAM,SAAU,KAAK,EACxCA,EAAOA,EAAK,QAAQ,0CAA2C,IAAI,EACnEA,EAAOA,EAAK,QAAQ,gBAAiB,MAAM,EAAE,QAAQ,gBAAiB,MAAM,EAAE,QAAQ,gBAAiB,MAAM,EAAE,QAAQ,cAAe,MAAM,EAAE,QAAQ,cAAe,MAAM,EAAE,QAAQ,cAAe,MAAM,EAAE,QAAQ,aAAc,MAAM,EAAE,QAAQ,aAAc,MAAM,EAAE,QAAQ,aAAc,MAAM,EAAE,QAAQ,YAAa,OAAO,EAClUA,EAAOA,EAAK,QAAQ,sBAAuB,YAAY,EAAE,QAAQ,mBAAoB,SAAS,EAC9FA,EAAOd,GAAYc,EAAM,WAAatM,GAAU,SAAWA,EAAQ,aAAa,EAChFsM,EAAOd,GAAYc,EAAM,QAAUtM,GAAU,QAAUA,EAAQ,GAAG,EAClEsM,EAAOd,GAAYc,EAAM,QAAUtM,GAAU,QAAUA,EAAQ,GAAG,EAClEsM,EAAOd,GAAYc,EAAM,QAAUtM,GAAU,QAAUA,EAAQ,GAAG,EAClEsM,EAAOA,EAAK,QAAQ,oFAAqF,CAACI,EAAKhB,EAAIiB,EAAM7C,EAAM5S,IAAO,CACpI,MAAM0V,EAAM1V,EAAG,OACf,OAAOwU,EAAK,OAASkB,EAAM,IAAMD,EAAO,MAAQ7C,EAAO,GACzD,CAAC,EACDwC,EAAOA,EAAK,QAAQ,uDAAwD,cAAc,EAC1FA,EAAOA,EAAK,QAAQ,wDAAyD,YAAY,EACzFA,EAAOA,EAAK,QAAQ,wCAAyC,YAAY,EACzEA,EAAOA,EAAK,QAAQ,yCAA0C,cAAc,EAC5EA,EAAOA,EAAK,QAAQ,qCAAsC,YAAY,EACtEA,EAAOA,EAAK,QAAQ,4FAA6F,YAAY,EAC7HA,EAAOA,EAAK,QAAQ,yCAA0C,cAAc,EAC5EA,EAAOA,EAAK,QAAQ,6FAA8F,cAAc,EAChI,CACE,MAAMO,EAA6B,IAAI,IACjCC,EAAS,iHACf,IAAIC,EACJ,MAAQA,EAAKD,EAAO,KAAKR,CAAI,KAAO,MAAMO,EAAW,IAAIE,EAAG,CAAC,CAAC,EAC9D,GAAIF,EAAW,KAAO,EAAG,CACvB,MAAMG,EAAM,MAAM,KAAKH,CAAU,EAAE,KAAK,CAAClT,EAAGxB,IAAMA,EAAE,OAASwB,EAAE,MAAM,EAAE,KAAK,GAAG,EAC/E2S,EAAOA,EAAK,QAAQ,IAAI,OAAO,mCAAqCU,EAAM,oBAAqB,GAAG,EAAG,cAAc,CACrH,CACF,CACA,CACE,MAAMC,EAAiB,CACrB,aACA,OACA,MACA,QACA,MACA,MACA,MACA,MACA,OACA,OACA,cACA,MACA,MACA,OACA,OACA,MACA,OACA,QACA,OACA,QACA,SACA,WACA,MACA,UACA,UACA,cACA,YACA,OACF,EACMC,EAAgB,0DACtB,UAAWxB,KAAMuB,EACfX,EAAOd,GAAYc,EAAMZ,EAAK1L,GAAU,CAEtC,MAAMmN,EADQjE,GAAUlJ,CAAK,EACT,IAAK9M,GAAM,CAC7B,GAAIga,EAAc,KAAKha,CAAC,EAAG,OAAOA,EAClC,MAAMka,EAAQ,CAAC,EACf,IAAIC,EAASna,EAAE,QAAQ,cAAgB0D,IACrCwW,EAAM,KAAKxW,CAAC,EACL,MAAQwW,EAAM,OAAS,GAAK,KACpC,EAAE,QAAQ,mDAAqDxW,IAC9DwW,EAAM,KAAKxW,CAAC,EACL,MAAQwW,EAAM,OAAS,GAAK,KACpC,EACD,OAAAC,EAASA,EAAO,QAAQ,uDAAwD,MAAM,EAC/EA,EAAO,QAAQ,qBAAsB,CAACzW,EAAGpB,IAAM4X,EAAM,OAAO5X,CAAC,CAAC,CAAC,CACxE,CAAC,EACD,OAAOkW,EAAK,IAAMyB,EAAM,KAAK,GAAG,EAAI,GACtC,CAAC,EAEHb,EAAOd,GAAYc,EAAM,MAAQtM,GAAU,CACzC,MAAMiJ,EAAOC,GAAUlJ,CAAK,EAC5B,GAAIiJ,EAAK,SAAW,EAAG,MAAO,OAASjJ,EAAQ,IAC/C,MAAMnG,EAAOoP,EAAK,CAAC,EAAE,KAAK,EACpBqE,EAAMrE,EAAK,CAAC,EAAE,KAAK,EACnB/R,EAAK,qCAAqC,KAAK2C,CAAI,EAEnD/E,EAAIoC,EADA,CAAE,KAAM,EAAG,KAAM,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAE,EACjDA,EAAG,CAAC,CAAC,EAAI,EACpBqW,EAAW,kBAAkB,KAAKD,CAAG,GAAK,mCAAmC,KAAKA,CAAG,EAC3F,OAAIxY,GAAK,GAAK,CAACyY,EAAiB,OAAS1T,EAAO,QAAU/E,EAAI,IAAMwY,EAAM,KACnE,OAASzT,EAAO,KAAOyT,EAAM,GACtC,CAAC,CACH,CACAhB,EAAOA,EAAK,QAAQ,qCAAsC,YAAY,EACtEA,EAAOA,EAAK,QAAQ,gCAAiC,WAAW,EAChEA,EAAOA,EAAK,QACV,8MACA,cACF,EACA,CACE,MAAMkB,EAA2B,IAAI,IAC/BC,EAAQ,6CACd,IAAIC,EACJ,MAAQA,EAAKD,EAAM,KAAKnB,CAAI,KAAO,MAAMkB,EAAS,IAAIE,EAAG,CAAC,CAAC,EAC3D,GAAIF,EAAS,KAAO,EAAG,CACrB,MAAMG,EAAO,MAAM,KAAKH,CAAQ,EAAE,KAAK,CAAC7T,EAAGxB,IAAMA,EAAE,OAASwB,EAAE,MAAM,EAAE,KAAK,GAAG,EAC9E2S,EAAOA,EAAK,QAAQ,IAAI,OAAO,OAASqB,EAAO,kCAAmC,GAAG,EAAG,YAAY,CACtG,CACF,CACA,CACE,MAAMC,EAA2B,IAAI,IAC/BC,EAAQ,6CACd,IAAIC,EACJ,MAAQA,EAAKD,EAAM,KAAKvB,CAAI,KAAO,MAAMsB,EAAS,IAAIE,EAAG,CAAC,CAAC,EAC3DxB,EAAOA,EAAK,QAAQ,YAAa,KAAK,EACtCA,EAAOA,EAAK,QACV,mDACA,CAACI,EAAKqB,EAAKrP,IAAMkP,EAAS,IAAIG,CAAG,EAAIrB,EAAM,OAASqB,EAAM,KAAOrP,EAAI,KACvE,EACA4N,EAAOA,EAAK,QAAQ,0DAA2D,wBAAwB,CACzG,CACAA,EAAOA,EAAK,QAAQ,+DAAgE,CAACI,EAAKsB,EAAItY,EAAMuY,IAAQ,CAC1G,MAAMhW,EAAIgW,EAAI,KAAK,EACnB,MAAI,qCAAqC,KAAKhW,CAAC,EAAUyU,EAClDsB,EAAK,IAAMtY,EAAO,MAAQsY,EAAK,IAAM/V,EAAI,IAClD,CAAC,EACD,UAAWyT,IAAM,CAAC,MAAO,QAAS,OAAQ,aAAc,MAAO,MAAO,MAAO,KAAK,EAChFY,EAAOd,GAAYc,EAAMZ,EAAK1L,GAAU0L,EAAK,IAAM1L,EAAM,QAAQ,oCAAqC,MAAM,EAAI,GAAG,EAErHsM,EAAOd,GAAYc,EAAM,QAAUtM,GAAU,CAC3C,MAAMiJ,EAAOC,GAAUlJ,CAAK,EAC5B,GAAIiJ,EAAK,SAAW,EAAG,MAAO,SAAWjJ,EAAQ,IACjD,MAAM9F,EAAK+O,EAAK,CAAC,EAAE,KAAK,EAClB9O,EAAK8O,EAAK,CAAC,EAAE,KAAK,EAClBiF,EAAUna,GAAM,gBAAgB,KAAKA,CAAC,EAC5C,OAAIma,EAAOhU,CAAE,GAAKgU,EAAO/T,CAAE,GAAK,OAAOD,CAAE,IAAM,GAAK,OAAOC,CAAE,IAAM,EAC1D,SAAW8O,EAAK,CAAC,EAAE,KAAK,EAAI,KAAO/O,EAAK,KAAOC,EAAK,IAEtD,SAAW6F,EAAQ,GAC5B,CAAC,EACDsM,EAAOA,EAAK,QAAQ,qCAAsC,YAAY,EACtEA,EAAOA,EAAK,QAAQ,qCAAsC,YAAY,EACtEA,EAAOd,GAAYc,EAAM,aAAetM,GAAU,CAChD,MAAMiJ,EAAOC,GAAUlJ,CAAK,EAC5B,OAAIiJ,EAAK,SAAW,GAAKA,EAAK,CAAC,EAAE,KAAK,IAAM,OAASA,EAAK,CAAC,EAAE,KAAK,IAAM,MAC/D,0BAA4BA,EAAK,CAAC,EAAE,KAAK,EAAI,KAAOA,EAAK,CAAC,EAAE,KAAK,EAAI,KAEvE,cAAgBjJ,EAAQ,GACjC,CAAC,EACD,CACE,MAAMzE,EAAwB,IAAI,IAC5B4S,EAAM,6EACZ,IAAIC,EACJ,MAAQA,EAAKD,EAAI,KAAK7B,CAAI,KAAO,MAAM/Q,EAAM,IAAI6S,EAAG,CAAC,EAAG,OAAOA,EAAG,CAAC,CAAC,CAAC,EACrE,GAAI7S,EAAM,KAAO,EAAG,CAClB,MAAM8S,EAAK,CAAE,EAAG,KAAM,EAAG,MAAO,EAAG,MAAO,EAC1C/B,EAAOA,EAAK,QAAQ,yDAA0D,CAACI,EAAK4B,EAAKP,EAAKE,IAAQ,CACpG,MAAMM,EAAKhT,EAAM,IAAIwS,CAAG,EAClB3H,EAAK7K,EAAM,IAAI0S,CAAG,EACxB,MAAI,CAACM,GAAM,CAACnI,GAAMmI,GAAMnI,EAAWsG,EAC5B4B,EAAMP,EAAM,MAAQE,EAAM,IAAMI,EAAGE,CAAE,EAAI,GAClD,CAAC,CACH,CACA,GAAIhT,EAAM,KAAO,EAAG,CAClB,MAAMsR,EAA6B,IAAI,IACjC2B,EAAM,sEACZ,IAAIC,EACJ,MAAQA,EAAKD,EAAI,KAAKlC,CAAI,KAAO,MAAMO,EAAW,IAAI4B,EAAG,CAAC,CAAC,EAC3D,MAAMC,EAAc,0JACdC,EAAe,4BACfC,EAAgB3W,GAAM,CAC1B,MAAMrB,EAAIqB,EAAE,MAAM,IAAI,OAAO,OAASyW,EAAc,UAAU,CAAC,EAC/D,GAAI,CAAC9X,EAAG,MAAO,GACf,IAAIiI,EAAQ,EACZ,MAAMgQ,EAAOjY,EAAE,CAAC,EAAE,OAAS,EAC3B,IAAIkY,EAAQ,GACZ,QAAStZ,EAAIqZ,EAAMrZ,EAAIyC,EAAE,OAAQzC,IAC/B,GAAIyC,EAAEzC,CAAC,IAAM,IAAKqJ,YACT5G,EAAEzC,CAAC,IAAM,MAChBqJ,IACIA,IAAU,GAAG,CACfiQ,EAAQtZ,EACR,KACF,CAGJ,GAAIsZ,IAAU7W,EAAE,OAAS,EAAG,MAAO,GACnC,MAAMyT,EAAK9U,EAAE,CAAC,EAAE,QAAQ,SAAU,EAAE,EACpC,GAAI+X,EAAa,KAAKjD,CAAE,EAAG,MAAO,GAClC,MAAMzC,EAAOhR,EAAE,MAAM4W,EAAO,EAAGC,CAAK,EAEpC,GADI,kBAAkB,KAAK7F,CAAI,GAC3B,sBAAsB,KAAKA,CAAI,EAAG,MAAO,GAC7C,UAAWvT,KAAQ6F,EAAM,KAAK,EAAG,CAC/B,MAAMwT,GAAMrZ,EAAK,QAAQ,sBAAuB,MAAM,EACtD,GAAI,IAAI,OAAO,cAAgBqZ,GAAM,6BAA6B,EAAE,KAAK9F,CAAI,EAC3E,MAAO,EAEX,CACA,MAAO,EACT,EACM+F,EAA+B,IAAI,IAazC,GAZA1C,EAAOA,EAAK,QAAQ,+CAAgD,CAACI,EAAK4B,EAAKP,EAAKE,IAAQ,CAC1F,MAAMM,EAAKhT,EAAM,IAAIwS,CAAG,EACxB,GAAI,CAACQ,EAAI,OAAO7B,EAChB,MAAMzU,EAAIgW,EAAI,KAAK,EAEnB,GADI,IAAI,OAAO,OAASM,EAAK,SAAS,EAAE,KAAKtW,CAAC,GAC1CsD,EAAM,IAAItD,CAAC,EAAG,OAAOyU,EACzB,MAAMuC,EAAQ,mCAAmC,KAAKhX,CAAC,EACjDiX,EAAYrC,EAAW,IAAI5U,CAAC,EAClC,MAAI,CAACgX,GAAS,CAACC,GAAa,CAACN,EAAa3W,CAAC,EAAUyU,GACrDsC,EAAa,IAAIjB,CAAG,EACbO,EAAMP,EAAM,SAAWQ,EAAK,IAAMtW,EAAI,KAC/C,CAAC,EACG+W,EAAa,KAAO,EAAG,CACzB,MAAMhC,EAAM,CAAC,GAAGgC,CAAY,EAAE,KAAK,CAACrV,EAAGxB,IAAMA,EAAE,OAASwB,EAAE,MAAM,EAAE,KAAK,GAAG,EAC1E2S,EAAOA,EAAK,QACV,IAAI,OAAO,oCAAoCU,CAAG,OAAQ,GAAG,EAC7D,CAACN,EAAKqB,EAAKvT,EAAIyT,IAAQ1S,EAAM,IAAIwS,CAAG,EAAIrB,EAAM,GAAGqB,CAAG,IAAIvT,CAAE,IAAIyT,CAAG,IACnE,EACA3B,EAAOA,EAAK,QACV,IAAI,OAAO,OAAOU,CAAG,oCAAqC,GAAG,EAC7D,CAACN,EAAKqB,EAAKvT,EAAIyT,IAAQ1S,EAAM,IAAI0S,CAAG,EAAIvB,EAAM,GAAGqB,CAAG,MAAMvT,CAAE,IAAIyT,CAAG,EACrE,CACF,CACF,CACF,CACA3B,EAAOA,EAAK,QAAQ,yCAA0C,SAAS,EACvEA,EAAOA,EAAK,QAAQ,+DAAgE,CAACI,EAAKsB,EAAItY,EAAMgJ,IAC3FsP,IAAO,QAAU,GAAGA,CAAE,IAAItY,CAAI,MAAMgJ,CAAC,MAAQ,GAAGsP,CAAE,IAAItY,CAAI,MAAMsY,CAAE,IAAItP,CAAC,MAC/E,EACD,CACE,MAAMmO,EAA6B,IAAI,IACjC2B,EAAM,sEACZ,IAAIC,EACJ,MAAQA,EAAKD,EAAI,KAAKlC,CAAI,KAAO,MAAMO,EAAW,IAAI4B,EAAG,CAAC,CAAC,EAC3D,GAAI5B,EAAW,KAAO,EAAG,CACvB,MAAMG,EAAM,CAAC,GAAGH,CAAU,EAAE,KAAK,CAAClT,EAAGxB,IAAMA,EAAE,OAASwB,EAAE,MAAM,EAAE,KAAK,GAAG,EACxE2S,EAAOA,EAAK,QAAQ,IAAI,OAAO,OAAOU,CAAG,0BAA2B,GAAG,EAAG,YAAY,EACtFV,EAAOA,EAAK,QAAQ,IAAI,OAAO,OAAOU,CAAG,kCAAmC,GAAG,EAAG,aAAa,CACjG,CACF,CACAV,EAAOA,EAAK,QAAQ,+CAAgD,SAAS,EAC7E,MAAM6C,EAAY,yGAClB7C,EAAOA,EAAK,QACV,IAAI,OAAO,yCAAyC6C,CAAS,YAAa,GAAG,EAC7E,eACF,EACA,CACE,MAAMC,EAA4B,IAAI,IAChCC,EAAS,+BACf,IAAIC,EACJ,MAAQA,EAAKD,EAAO,KAAK/C,CAAI,KAAO,MAAM8C,EAAU,IAAIE,EAAG,CAAC,CAAC,EAC7D,GAAIF,EAAU,KAAO,EAAG,CACtB,MAAMpC,EAAM,CAAC,GAAGoC,CAAS,EAAE,KAAK,GAAG,EACnC9C,EAAOA,EAAK,QACV,IAAI,OAAO,iBAAiBU,CAAG,OAAQ,GAAG,EAC1C,CAACN,EAAKlS,EAAI9E,IAAS,GAAG8E,CAAE,SAAS9E,CAAI,GACvC,CACF,CACF,CACA,CACE,MAAM6Z,EAAwB,IAAI,IAClC,UAAWd,KAAMnC,EAAK,SAAS,yEAAyE,EACtGiD,EAAM,IAAId,EAAG,CAAC,CAAC,EAEjB,GAAIc,EAAM,KAAM,CACd,MAAMvC,EAAM,CAAC,GAAGuC,CAAK,EAAE,KAAK,CAAC5V,EAAGxB,IAAMA,EAAE,OAASwB,EAAE,MAAM,EAAE,KAAK,GAAG,EAC7D8O,EAAK,IAAI,OAAO,OAASuE,EAAM,WAAY,GAAG,EACpD,IAAI/V,EAAM,GACNuY,EAAO,EACPf,EACJ,KAAOA,EAAKhG,EAAG,KAAK6D,CAAI,GAAG,CACzB,MAAMmD,EAAQhB,EAAG,MAAQA,EAAG,CAAC,EAAE,OAAS,EAClCiB,EAASzE,GAAWqB,EAAMmD,EAAO,IAAK,GAAG,EAC/C,GAAIC,EAAS,EAAG,MAChB,IAAIxc,EAAIwc,EAAS,EACjB,KAAOxc,EAAIoZ,EAAK,QAAU,QAAQ,KAAKA,EAAKpZ,CAAC,CAAC,GAAGA,IACjD,GAAIoZ,EAAKpZ,CAAC,IAAM,IAAK,CACnBuV,EAAG,UAAYiH,EAAS,EACxB,QACF,CACA,MAAMC,EAAS1E,GAAWqB,EAAMpZ,EAAG,IAAK,GAAG,EAC3C,GAAIyc,EAAS,EAAG,MAChB,MAAMC,EAAKtD,EAAK,MAAMmD,EAAQ,EAAGC,CAAM,EACjCG,EAAKvD,EAAK,MAAMpZ,EAAI,EAAGyc,CAAM,EACnC1Y,GAAOqV,EAAK,MAAMkD,EAAMf,EAAG,KAAK,EAChCxX,GAAOwX,EAAG,CAAC,EAAI,SAAWmB,EAAK,iBAAmBC,EAAK,MACvDL,EAAOG,EAAS,EAChBlH,EAAG,UAAY+G,CACjB,CACAlD,EAAOrV,EAAMqV,EAAK,MAAMkD,CAAI,CAC9B,CACF,CACAlD,EAAOd,GAAYc,EAAM,MAAO,CAACtM,EAAO8I,IAAQ,CAC9C,MAAMG,EAAOC,GAAUlJ,CAAK,EAC5B,GAAIiJ,EAAK,SAAW,EAAG,MAAO,OAASjJ,EAAQ,IAC/C,MAAM8P,EAAehG,GAAS,CAC5B,MAAMc,EAAId,EAAK,KAAK,EACd5S,EAAK,0BAA0B,KAAK0T,CAAC,EAC3C,GAAI1T,EAAI,OAAOA,EAAG,CAAC,EAAE,OACrB,MAAM6Y,EAAO,mBAAmB,KAAKnF,CAAC,EACtC,GAAImF,EAAM,OAAO,OAAOA,EAAK,CAAC,CAAC,EAC/B,GAAI,CAAC,iBAAiB,KAAKnF,CAAC,EAAG,MAAO,GACtC,MAAMoF,EAAM,IAAI,OAAO,4BAA8BpF,EAAI,MAAO,GAAG,EACnE,IAAIqF,EAAQ,EACRlD,EACJ,MAAQA,EAAKiD,EAAI,KAAK1D,CAAI,KAAO,MAAQS,EAAG,MAAQjE,GAClDmH,EAAQlD,EAAG,CAAC,EAAE,WAAW,KAAK,EAAI,OAAOA,EAAG,CAAC,CAAC,EAAI,EAEpD,OAAOkD,CACT,EACMtW,EAAIsP,EAAK,CAAC,EAAE,KAAK,EACjB9Q,EAAI8Q,EAAK,CAAC,EAAE,KAAK,EACjBiH,EAAKJ,EAAYnW,CAAC,EAClBwW,EAAKL,EAAY3X,CAAC,EACxB,GAAI+X,GAAM,GAAKC,GAAM,GAAKD,IAAOC,EAAI,CACnC,MAAMrb,EAAI,KAAK,IAAIob,EAAIC,CAAE,EACnBjZ,EAAKpC,IAAM,EAAI,MAAQA,IAAM,EAAI,OAAS,GAChD,OAAKoC,EACE,QAAUgZ,EAAKpb,EAAI6E,EAAIzC,EAAKyC,GAAK,MAAQwW,EAAKrb,EAAIqD,EAAIjB,EAAKiB,GAAK,KAAO8Q,EAAK,CAAC,EAAE,KAAK,EAAI,IAD/E,OAASjJ,EAAQ,GAEnC,CACA,MAAO,OAASA,EAAQ,GAC1B,CAAC,EACD,CACE,MAAMyI,EAAK,wCACX,IAAIxR,EAAM,GACNuY,EAAO,EACPf,EACJ,KAAOA,EAAKhG,EAAG,KAAK6D,CAAI,GAAG,CACzB,MAAM8D,EAAa/E,GAAWiB,EAAMmC,EAAG,MAAQA,EAAG,CAAC,EAAE,OAAS,CAAC,EAC/D,GAAI2B,EAAa,EAAG,MACpB,IAAIld,EAAIkd,EAAa,EACrB,KAAOld,EAAIoZ,EAAK,QAAU,KAAK,KAAKA,EAAKpZ,CAAC,CAAC,GAAGA,IAC9C,GAAIoZ,EAAKpZ,CAAC,IAAM,IAAK,SACrB,MAAMmd,EAAapF,GAAWqB,EAAMpZ,EAAG,IAAK,GAAG,EAC/C,GAAImd,EAAa,EAAG,MACpB,MAAM9B,EAAK,OAAOE,EAAG,CAAC,CAAC,EACvB,GAAIF,GAAM,EAAG,CACX9F,EAAG,UAAY4H,EACf,QACF,CACA,IAAIlH,EAAOmD,EAAK,MAAMpZ,EAAI,EAAGmd,CAAU,EACvC,MAAMC,EAAyB,IAAI,IACnC,UAAWC,KAAMjE,EAAK,MAAM,EAAGmC,EAAG,KAAK,EAAE,SAAS,sEAAsE,EACtH6B,EAAO,IAAIC,EAAG,CAAC,EAAG,OAAOA,EAAG,CAAC,CAAC,CAAC,EAEjC,UAAWxD,KAAM5D,EAAK,SAAS,kCAAkC,EAC/DmH,EAAO,IAAIvD,EAAG,CAAC,EAAG,OAAOA,EAAG,CAAC,CAAC,CAAC,EAEjC,MAAM7V,EAAKqX,IAAO,EAAI,KAAO,MAC7BpF,EAAOA,EAAK,QAAQ,iCAAkC,CAACuD,EAAKhX,IAAS,CACnE,MAAM0Q,EAAKkK,EAAO,IAAI5a,CAAI,EAC1B,OAAI0Q,GAAMA,EAAKmI,EAAW,UAAY7Y,EAAO,IAAMwB,EAAK,IACjDwV,CACT,CAAC,EACDzV,GAAOqV,EAAK,MAAMkD,EAAMtc,EAAI,CAAC,EAAIiW,EACjCqG,EAAOa,EACP5H,EAAG,UAAY4H,CACjB,CACA/D,EAAOrV,EAAMqV,EAAK,MAAMkD,CAAI,CAC9B,CACA,MAAMgB,EAA2B,IAAI,IAC/BC,EAAQ,2EACd,IAAIC,EACJ,MAAQA,EAAKD,EAAM,KAAKnE,CAAI,KAAO,MAAMkE,EAAS,IAAIE,EAAG,CAAC,CAAC,EAuB3D,GAtBApE,EAAOd,GAAYc,EAAM,MAAQtM,GAAU,CACzC,MAAMiJ,EAAOC,GAAUlJ,CAAK,EAC5B,GAAIiJ,EAAK,SAAW,EAAG,MAAO,OAASjJ,EAAQ,IAC/C,MAAMrG,EAAIsP,EAAK,CAAC,EAAE,KAAK,EACjB9Q,EAAI8Q,EAAK,CAAC,EAAE,KAAK,EACjB0H,EAAS5c,GAAMyc,EAAS,IAAIzc,EAAE,MAAM,SAAS,EAAE,CAAC,CAAC,GAAK,cAAc,KAAKA,CAAC,EAChF,OAAI4c,EAAMhX,CAAC,GAAKgX,EAAMxY,CAAC,EAAU,cAAgBA,EAAI,iBAAmBwB,EAAI,KACxEgX,EAAMxY,CAAC,EAAU,cAAgBA,EAAI,OAASwB,EAAI,IAC/C,IAAMA,EAAI,MAAQxB,EAAI,GAC/B,CAAC,EACDmU,EAAOA,EAAK,QAAQ,YAAa,KAAK,EAAE,QAAQ,YAAa,OAAO,EACpEA,EAAOd,GAAYc,EAAM,QAAUtM,GAAU,QAAUA,EAAQ,GAAG,EAClEsM,EAAOd,GAAYc,EAAM,OAAStM,GAAU,CAC1C,MAAMiJ,EAAOC,GAAUlJ,CAAK,EAC5B,GAAIiJ,EAAK,SAAW,EAAG,MAAO,OAASjJ,EAAQ,IAC/C,MAAMrG,EAAIsP,EAAK,CAAC,EAAE,KAAK,EACjB9Q,EAAI8Q,EAAK,CAAC,EAAE,KAAK,EACvB,MAAO,KAAOtP,EAAI,QAAUxB,EAAI,cAAgBwB,EAAI,QAAUxB,EAAI,KACpE,CAAC,EACDmU,EAAOd,GAAYc,EAAM,MAAQtM,GAAU,QAAUA,EAAQ,GAAG,EAChEsM,EAAOd,GAAYc,EAAM,MAAQtM,GAAU,QAAUA,EAAQ,GAAG,EAChEsM,EAAOd,GAAYc,EAAM,UAAYtM,GAAU,QAAUA,EAAQ,GAAG,EAChE6L,IAAU,OACZS,EAAOA,EAAK,QAAQ,iBAAkB,IAAI,EAAE,QAAQ,eAAgB,KAAK,MACpE,CAEL,GADAA,EAAOA,EAAK,QAAQ,eAAgB,IAAI,EAAE,QAAQ,iBAAkB,IAAI,EACpE,OAAOR,GAAe,UAAYA,EAAY,CAChD,MAAM8E,EAA4B,IAAI,IAChCC,EAAM,0FACZ,IAAInD,EACJ,MAAQA,EAAKmD,EAAI,KAAK/E,CAAU,KAAO,MAAM8E,EAAU,IAAIlD,EAAG,CAAC,EAAGA,EAAG,CAAC,CAAC,EACvE,MAAMoD,EAAO,CAAE,MAAO,EAAG,KAAM,EAAG,KAAM,EAAG,KAAM,CAAE,EAC7CC,EAA0B,IAAI,IAUpC,GATAzE,EAAOA,EAAK,QACV,mFACA,CAACI,EAAK4B,EAAKN,EAAIgD,EAAItb,EAAMub,IAAS,CAChC,MAAMC,EAAKN,EAAU,IAAIlb,CAAI,EAC7B,MAAI,CAACwb,GAAMJ,EAAKI,CAAE,GAAKJ,EAAK9C,CAAE,EAAUtB,GACxCqE,EAAQ,IAAIrb,EAAMob,EAAK9C,CAAE,CAAC,EACnBM,EAAM4C,EAAKF,EAAKtb,EAAOub,EAChC,CACF,EACIF,EAAQ,KAAO,EAAG,CACpB,MAAM1C,EAAK,CAAE,EAAG,IAAK,EAAG,KAAM,EAAG,KAAM,EACvC,SAAW,CAAC3Y,EAAMyb,CAAQ,IAAKJ,EAAS,CACtC,MAAM7Z,EAAKmX,EAAG8C,CAAQ,EACjBja,IACLoV,EAAOA,EAAK,MAAM;AAAA,CAAI,EAAE,IAAK1C,GACvB,WAAW,KAAKA,CAAI,EAAUA,EAC3BA,EAAK,QAAQ,IAAI,OAAO,MAAQlU,EAAO,oBAAqB,GAAG,EAAGA,EAAO,IAAMwB,CAAE,CACzF,EAAE,KAAK;AAAA,CAAI,EACd,CACF,CACF,CACA,MAAMka,EAA0B,IAAI,IAC9BC,EAA0B,IAAI,IACpC,CACE,MAAMrB,EAAM,6EACZ,IAAIjD,EACJ,MAAQA,EAAKiD,EAAI,KAAK1D,CAAI,KAAO,MAAM+E,EAAQ,IAAItE,EAAG,CAAC,CAAC,CAC1D,CACA,UAAWrX,KAAQ2b,EACL,IAAI,OAAO,MAAQ3b,EAAO,+DAA+D,EAC7F,KAAK4W,CAAI,GAAG8E,EAAQ,IAAI1b,CAAI,EAEtC,GAAI0b,EAAQ,KAAO,EAAG,CACpB,MAAME,EAAYhF,EAAK,OAAO,gCAAgC,EAC9D,GAAIgF,IAAc,GAAI,CACpB,MAAMC,EAAWjF,EAAK,QAAQ,IAAKgF,CAAS,EACtCE,EAAOlF,EAAK,MAAM,EAAGiF,EAAW,CAAC,EACvC,IAAIpI,EAAOmD,EAAK,MAAMiF,EAAW,CAAC,EAClC,MAAME,EAAQ,CAAC,EACf,UAAW/b,KAAQ0b,EAAS,CAC1B,MAAMM,EAAK,IAAI,OAAO,6DAA+Dhc,EAAO,QAAS,GAAG,EAAE,KAAK4W,CAAI,EAC7G0B,EAAK0D,EAAKA,EAAG,CAAC,EAAI,OACxBD,EAAM,KAAK,OAASzD,EAAK,IAAMtY,EAAO,SAAWA,EAAO,GAAG,EAC3DyT,EAAOG,GAAYH,EAAMzT,EAAMA,EAAO,KAAK,CAC7C,CACAyT,EAAO;AAAA,EAAOsI,EAAM,IAAK1Z,GAAMA,EAAE,QAAQ,cAAe,OAAO,CAAC,EAAE,KAAK;AAAA,CAAI,EAAI;AAAA,EAAOoR,EACtFmD,EAAOkF,EAAOrI,CAChB,CACF,CACF,CACAmD,EAAOA,EAAK,QAAQ,yCAA0C,EAAE,EAChEA,EAAOA,EAAK,QAAQ,eAAgB,EAAE,EACtC,CACE,MAAMO,EAA6B,IAAI,IACvC,UAAWjW,KAAK0V,EAAK,SAAS,uFAAuF,EACnHO,EAAW,IAAIjW,EAAE,CAAC,CAAC,EAErB,GAAIiW,EAAW,KAAM,CACnB,MAAM8E,EAAQ5e,GAAM,CAClB,MAAM6e,EAAM7e,EAAE,KAAK,EAAE,WAAW,GAAG,EAC7B2C,EAAO3C,EAAE,QAAQ,QAAS,EAAE,EAAE,KAAK,EACzC,OAAK8Z,EAAW,IAAInX,CAAI,GAChBkc,EAAM,IAAM,IAAM,OAASlc,EAAO,IADR3C,CAEpC,EACAuZ,EAAOA,EAAK,QACV,iIACA,CAACI,EAAK8E,EAAMre,EAAG0e,EAAMC,EAAKC,EAAOd,IAASO,EAAOG,EAAKE,CAAI,EAAIC,EAAMH,EAAKI,CAAK,EAAId,CACpF,CACF,CACF,CACA,CACE,MAAMe,EAAuB,IAAI,IACjC1F,EAAOA,EAAK,MAAM;AAAA,CAAI,EAAE,IAAK1C,GAAS,CACpC,MAAMhT,EAAI,+FAA+F,KAAKgT,CAAI,EAClH,GAAI,CAAChT,EAAG,OAAOgT,EACf,MAAMlU,EAAOkB,EAAE,CAAC,EAChB,OAAIob,EAAK,IAAItc,CAAI,EAAU,IAC3Bsc,EAAK,IAAItc,CAAI,EACNkU,EACT,CAAC,EAAE,KAAK;AAAA,CAAI,CACd,CACA,IAAIqI,EAAW;AAAA,EACf,OAAIpG,IAAU,SACZoG,GAAY;AAAA,GAEVpG,IAAU,SACZoG,GAAY;AAAA,EACR,mBAAmB,KAAK3F,CAAI,IAC9B2F,GAAY;AAAA,EACZ3F,EAAOA,EAAK,QAAQ,oBAAqB,WAAW,IAGjD2F,EAAW3F,CACpB,CACA,MAAM4F,GAAQ,CACZ,OAAQ,CAAC,GAAK,EAAG,EAEjB,OAAQ,CAAC,GAAK,EAAG,EACjB,KAAM,CAAC,EAAG,EAAG,EACb,MAAO,CAAC,EAAG,EAAG,EACd,IAAK,CAAC,GAAK,CAAC,EACZ,OAAQ,CAAC,GAAK,CAAC,EACf,QAAS,CAAC,EAAG,CAAC,EACd,SAAU,CAAC,EAAG,CAAC,EACf,WAAY,CAAC,EAAG,CAAC,EACjB,YAAa,CAAC,EAAG,CAAC,CACpB,EACMC,GAAiB,CACrB,EAAG,WAEH,EAAG,WAEH,EAAG,SAEH,EAAG,WAEH,GAAI,UAEN,EACMC,GAAa,CAAE,OAAQ,EAAG,SAAU,CAAE,EACtCC,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASZC,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBZC,GAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYjBC,GAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQtB,SAASC,GAAe3d,EAAGC,EAAG,CAC5B,OAAO,IAAI,aAAa,CACtB,EACAA,EACA,EACA,EACA,EAEA,EACA,EACA,EACA,EACA,EACAD,EACAC,EACA,EACA,EACA,EACAD,EACAC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACAD,EACA,EACA,EACA,EACA,CACF,CAAC,CACH,CACA,SAAS4d,IAAgB,CACvB,OAAO,IAAI,aAAa,CACtB,GACA,EACA,EACA,EACA,EAEA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,CACF,CAAC,CACH,CACA,SAASC,IAAiB,CACxB,OAAO,IAAI,aAAa,CACtB,IACA,GACA,EACA,EACA,EAEA,IACA,IACA,EACA,EACA,EAEA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,EACA,EACA,EACA,IACA,IACA,EACA,EACA,EACA,GACA,IACA,EACA,EACA,CACF,CAAC,CACH,CACA,MAAMC,GAAW,CACf,KAAM,QAEN,MAAO,OAEP,MAAO,OAEP,MAAO,OAEP,KAAM,MAEN,MAAO,QACP,MAAO,QACP,MAAO,QACP,MAAO,OACP,MAAO,OAEP,MAAO,MAET,EACA,SAASC,GAAYC,EAAIC,EAAOC,EAAO,CACrC,MAAMC,EAAKC,GAAQJ,EAAIA,EAAG,cAAeC,CAAK,EACxCI,EAAKD,GAAQJ,EAAIA,EAAG,gBAAiBE,CAAK,EAC1C9f,EAAI4f,EAAG,cAAc,EAM3B,GALAA,EAAG,aAAa5f,EAAG+f,CAAE,EACrBH,EAAG,aAAa5f,EAAGigB,CAAE,EACrBL,EAAG,mBAAmB5f,EAAG,EAAG,YAAY,EACxC4f,EAAG,mBAAmB5f,EAAG,EAAG,YAAY,EACxC4f,EAAG,YAAY5f,CAAC,EACZ,CAAC4f,EAAG,oBAAoB5f,EAAG4f,EAAG,WAAW,EAC3C,MAAM,IAAI,MAAM,+CAAcA,EAAG,kBAAkB5f,CAAC,CAAC,EAEvD,OAAOA,CACT,CACA,SAASggB,GAAQJ,EAAIM,EAAM5a,EAAK,CAC9B,MAAMzE,EAAI+e,EAAG,aAAaM,CAAI,EAG9B,GAFAN,EAAG,aAAa/e,EAAGyE,CAAG,EACtBsa,EAAG,cAAc/e,CAAC,EACd,CAAC+e,EAAG,mBAAmB/e,EAAG+e,EAAG,cAAc,EAC7C,MAAM,IAAI,MAAM,+CAAcA,EAAG,iBAAiB/e,CAAC,CAAC,EAEtD,OAAOA,CACT,CACA,SAASsf,GAAetf,EAAG,CACzB,MAAMb,EAAI,OAAOa,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,IAAI,MAAM,EAClD,MAAO,CAACb,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,CAAC,CACzC,CACA,SAASogB,GAAYR,EAAIjc,EAAM0E,EAAOC,EAAQ+X,EAAS,KAAM,CAC3D,MAAM7c,EAAOoc,EAAG,cAAc,EAC9B,OAAAA,EAAG,YAAYA,EAAG,WAAYpc,CAAI,EAClCoc,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAChEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAC5DS,EACFT,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,KAAMA,EAAG,KAAMA,EAAG,cAAeS,CAAM,EAE1ET,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,KAAMvX,EAAOC,EAAQ,EAAGsX,EAAG,KAAMA,EAAG,cAAejc,CAAI,EAErFH,CACT,CACA,SAAS8c,GAAeV,EAAIW,EAAQC,EAAO,GAAO,CAChD,MAAMhd,EAAOoc,EAAG,cAAc,EAC9BA,EAAG,YAAYA,EAAG,WAAYpc,CAAI,EAClCoc,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,oBAAoB,EAC9EA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAChE,MAAMa,EAAKF,EAAO,CAAC,EACnB,GAAIE,EAAG,OACLb,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,KAAMA,EAAG,KAAMA,EAAG,cAAea,EAAG,MAAM,UACpED,GAAQC,EAAG,KAAM,CAC1B,MAAMjV,EAAIiV,EAAG,MAAQA,EAAG,OAClBC,EAAK,IAAI,WAAWlV,EAAI,CAAC,EAC/B,QAASxL,EAAI,EAAGA,EAAIwL,EAAGxL,IACrB0gB,EAAG1gB,EAAI,CAAC,EAAIygB,EAAG,KAAKzgB,EAAI,EAAI,CAAC,EAC7B0gB,EAAG1gB,EAAI,EAAI,CAAC,EAAIygB,EAAG,KAAKzgB,EAAI,CAAC,EAE/B,MAAM2gB,EAAYf,EAAG,aAAaA,EAAG,gBAAgB,EACrDA,EAAG,YAAYA,EAAG,iBAAkB,CAAC,EACrCA,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,IAAKa,EAAG,MAAOA,EAAG,OAAQ,EAAGb,EAAG,GAAIA,EAAG,cAAec,CAAE,EAC3Fd,EAAG,YAAYA,EAAG,iBAAkBe,CAAS,CAC/C,MACEf,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,KAAMa,EAAG,MAAOA,EAAG,OAAQ,EAAGb,EAAG,KAAMA,EAAG,cAAea,EAAG,IAAI,EAErG,OAAAb,EAAG,eAAeA,EAAG,UAAU,EACxBpc,CACT,CACA,SAASod,GAAKC,EAAIC,EAAIzV,EAAI0V,EAAIrJ,EAAG,CAC/B,MAAMxX,EAAI,EAAIwX,EACd,OAAOxX,EAAIA,EAAIA,EAAI2gB,EAAK,EAAI3gB,EAAIA,EAAIwX,EAAIoJ,EAAK,EAAI5gB,EAAIwX,EAAIA,EAAIrM,EAAKqM,EAAIA,EAAIA,EAAIqJ,CAChF,CACA,SAASC,GAAOC,EAAIC,EAAIC,EAAIC,EAAIre,EAAG,CACjC,GAAIA,GAAKke,EAAI,MAAO,GACpB,GAAIle,GAAKqe,EAAI,MAAO,GACpB,IAAI1J,EAAI0J,EAAKH,EAAK,MAAQle,EAAIke,IAAOG,EAAKH,GAAM,GAChD,QAAS3e,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMgJ,EAAMsV,GAAKK,EAAIC,EAAIC,EAAIC,EAAI1J,CAAC,EAAI3U,EACtC,GAAI,KAAK,IAAIuI,CAAG,EAAI,KAAM,OAAOoM,EACjC,MAAMxX,EAAI,EAAIwX,EACR,EAAI,EAAIxX,EAAIA,GAAKghB,EAAKD,GAAM,EAAI/gB,EAAIwX,GAAKyJ,EAAKD,GAAM,EAAIxJ,EAAIA,GAAK0J,EAAKD,GAC5E,GAAI,KAAK,IAAI,CAAC,EAAI,KAAM,MACxB,MAAME,EAAK3J,EAAIpM,EAAM,EACrB,GAAI+V,EAAK,GAAKA,EAAK,GAAK,CAAC,OAAO,SAASA,CAAE,EAAG,MAC9C3J,EAAI2J,CACN,CACA,IAAIva,EAAK,EACLC,EAAK,EACT,QAASzE,EAAI,EAAGA,EAAI,GAAIA,IACtBoV,GAAK5Q,EAAKC,GAAM,EACZ6Z,GAAKK,EAAIC,EAAIC,EAAIC,EAAI1J,CAAC,EAAI3U,EAAG+D,EAAK4Q,EACjC3Q,EAAK2Q,EAEZ,OAAOA,CACT,CACA,SAAS4J,GAAcC,EAAMC,EAAO/C,EAAM,CACxC,GAAI,CAAC8C,GAAQA,EAAK,SAAW,EAAG,MAAO,GACvC,GAAIA,EAAK,SAAW,EAAG,OAAO,OAAOA,EAAK,CAAC,EAAE,KAAK,GAAK,EACvD,GAAI9C,GAAQA,EAAK,OAAS,EAAG,CAC3B,MAAMgD,EAAQF,EAAK,CAAC,EACdG,EAAQH,EAAKA,EAAK,OAAS,CAAC,EAC5BI,EAAWlD,EAAK,OAASiD,EAAM,MACrC,GAAIC,EAAW,MAAQH,EAAQE,EAAM,OAASF,GAAS/C,EAAK,OAC1D,OAAO6C,GAAc,CACnB,CAAE,MAAO,EAAG,MAAOI,EAAM,MAAO,MAAOA,EAAM,MAAO,KAAMA,EAAM,IAAK,EACrE,CAAE,MAAOC,EAAU,MAAOF,EAAM,MAAO,MAAOA,EAAM,MAAO,KAAMA,EAAM,IAAK,CAC9E,EAAGD,EAAQE,EAAM,KAAK,CAE1B,CACA,GAAIF,GAASD,EAAK,CAAC,EAAE,MAAO,OAAO,OAAOA,EAAK,CAAC,EAAE,KAAK,GAAK,EAC5D,MAAMjF,EAAOiF,EAAKA,EAAK,OAAS,CAAC,EACjC,GAAIC,GAASlF,EAAK,MAAO,OAAO,OAAOA,EAAK,KAAK,GAAK,EACtD,IAAIxV,EAAK,EACLC,EAAKwa,EAAK,OAAS,EACvB,KAAOxa,EAAKD,EAAK,GAAG,CAClB,MAAM8X,EAAM9X,EAAKC,GAAM,EACnBwa,EAAK3C,CAAG,EAAE,OAAS4C,EAAO1a,EAAK8X,EAC9B7X,EAAK6X,CACZ,CACA,MAAMgD,EAAKL,EAAKza,CAAE,EACZ+a,EAAKN,EAAKxa,CAAE,EACZ+a,EAAKF,EAAG,MACRG,EAAKF,EAAG,MACRG,EAAK,OAAOJ,EAAG,KAAK,GAAK,EACzBK,EAAK,OAAOJ,EAAG,KAAK,GAAK,EACzB9gB,EAAOghB,EAAKD,EAClB,GAAI/gB,GAAQ,EAAG,OAAOkhB,EACtB,MAAMC,EAAKN,EAAG,MACRO,EAAKN,EAAG,KACRO,EAAQrhB,EAAO,EACfshB,EAAO,CAAC,EAAEH,GAAMA,EAAG,SACnBI,EAAO,CAAC,EAAEH,GAAMA,EAAG,SACnBI,EAAKF,EAAO,KAAK,IAAI,OAAOH,EAAG,CAAC,GAAK,CAAC,EAAI,EAC1CM,EAAKF,EAAO,KAAK,IAAI,OAAOH,EAAG,CAAC,GAAK,CAAC,EAAI,EAC1CjB,EAAKY,EAAK,KAAK,IAAIS,EAAI,GAAG,EAAIH,EAC9BjB,EAAKY,EAAK,KAAK,IAAIS,EAAI,GAAG,EAAIJ,EAC9BK,EAAKJ,EAAOL,GAAM,OAAOE,EAAG,CAAC,GAAK,GAAKF,GAAMC,EAAKD,GAAM,EACxDU,EAAKJ,EAAOL,GAAM,OAAOE,EAAG,CAAC,GAAK,GAAKF,GAAMA,EAAKD,GAAM,EACxDtK,EAAIsJ,GAAOc,EAAIZ,EAAIC,EAAIY,EAAIP,CAAK,EACtC,OAAOZ,GAAKoB,EAAIS,EAAIC,EAAIT,EAAIvK,CAAC,CAC/B,CACA,SAASiL,GAAUnB,EAAOoB,EAAQC,EAAM,CACtC,MAAM1f,EAAMyf,EAAS,EAAIA,EAAS,EAClC,GAAIC,IAAS,OAAQ,CACnB,IAAIpjB,EAAI+hB,EAAQre,EAChB,OAAI1D,EAAI,IAAGA,GAAK0D,GACT1D,CACT,CACA,GAAIojB,IAAS,SAAU,CACrB,MAAMC,EAAS3f,EAAM,EACrB,IAAI1D,EAAI+hB,EAAQsB,EAChB,OAAIrjB,EAAI,IAAGA,GAAKqjB,GACTrjB,GAAK0D,EAAM1D,EAAIqjB,EAASrjB,CACjC,CACA,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI0D,EAAKqe,CAAK,CAAC,CACzC,CACA,SAASuB,GAAWpc,EAAM,CACxB,OAAI,MAAM,QAAQA,CAAI,EAAUA,EAC5B,OAAOA,GAAS,SAAiBA,EAAK,KAAK,EAAE,MAAM,KAAK,EAAE,IAAI,MAAM,EACpE,OAAO,SAASA,CAAI,EAAU,CAACA,CAAI,EAChC,CAAC,CACV,CACA,SAASqc,GAAgBC,EAAK,CAC5B,MAAMtjB,EAAOsjB,GAAOA,EAAI,SAAW,CAAC,EAC9BC,EAAM,OAAOvjB,EAAK,GAAG,EAAI,EAAI,OAAOA,EAAK,GAAG,EAAI,GAChDijB,EAAS,OAAOjjB,EAAK,MAAM,EAAI,EAAI,OAAOA,EAAK,MAAM,EAAI,EACzDkjB,EAAOljB,EAAK,OAAS,QAAUA,EAAK,OAAS,SAAWA,EAAK,KAAO,SACpE6C,EAAO,OAAO7C,EAAK,MAAS,SAAWA,EAAK,KAAO,GACnDwjB,EAAW,CAAC,EAAEF,GAAOA,EAAI,UACzBG,EAAWzjB,EAAK,WAAa,IAAQkjB,IAAS,OAC9CQ,EAAW,CAAC,EAClB,QAAS/gB,EAAI,GAAKA,IAAK,CACrB,MAAMwC,EAAIme,GAAOA,EAAI,IAAM3gB,CAAC,EAC5B,GAAI,CAAC,MAAM,QAAQwC,CAAC,EAAG,MACvBue,EAAS,KAAKve,CAAC,CACjB,CACA,MAAMwe,EAAW3jB,EAAK,cAAgB,GAChC4jB,EAAiB,CAAC,EAClBC,EAAQ,CACZ,KAAAhhB,EACA,KAAAqgB,EACA,IAAAK,EACA,SAAAC,EACA,aAAcE,EAAS,OACvB,MAAO,EACP,KAAM,EACN,QAASC,EACT,MAAO,GACP,IAAI,YAAa,CACf,OAAOV,CACT,EACA,MAAO,CACL,OAAAY,EAAM,QAAU,GAChBA,EAAM,MAAQ,GACPA,CACT,EACA,OAAQ,CACN,OAAAA,EAAM,QAAU,GACTA,CACT,EACA,MAAO,CACL,OAAAA,EAAM,QAAU,GAChBA,EAAM,MAAQ,EACdA,EAAM,MAAQ,GACPA,CACT,EACA,SAAS/jB,EAAG,CACV,MAAM+L,EAAI,OAAO/L,CAAC,EAClB,OAAI,OAAO,SAAS+L,CAAC,IAAGgY,EAAM,MAAQhY,GAC/BgY,CACT,EACA,UAAW,CACT,OAAOA,EAAM,KACf,EACA,QAAQze,EAAG,CACT,MAAMyG,EAAI,OAAOzG,CAAC,EAClB,OAAI,OAAO,SAASyG,CAAC,IAAGgY,EAAM,KAAOhY,GAC9BgY,CACT,EACA,iBAAiBhL,EAAI,CACnB,OAAI,OAAOA,GAAO,YAAY+K,EAAe,KAAK/K,CAAE,EAC7CgL,CACT,EACA,UAAW,CACT,OAAOA,CACT,EACA,YAAa,CACX,OAAOA,CACT,EAEA,QAAQC,EAAI,CACV,GAAKD,EAAM,UACXA,EAAM,QAAU,OAAOC,CAAE,GAAK,GAAKP,EAAMM,EAAM,KAC3CX,IAAS,UACX,GAAIW,EAAM,OAASZ,GAGjB,GAFAY,EAAM,MAAQZ,EACdY,EAAM,QAAU,GACZ,CAACA,EAAM,MAAO,CAChBA,EAAM,MAAQ,GACd,UAAWE,KAAMH,EACf,GAAI,CACFG,EAAG,CACL,MAAY,CACZ,CAEJ,OACSF,EAAM,MAAQ,IACvBA,EAAM,MAAQ,EACdA,EAAM,QAAU,GAGtB,EAKA,OAAQ,CACN,MAAM/jB,EAAIkjB,GAAUa,EAAM,MAAOZ,EAAQC,CAAI,EACvCpE,EAAO2E,EAAW,CAAE,OAAAR,CAAO,EAAI,OACrC,GAAIS,EAAS,SAAW,EAAG,OAAO/B,GAAc+B,EAAS,CAAC,EAAG5jB,EAAGgf,CAAI,EACpE,MAAM1a,EAAM,CAAC,EACb,UAAWe,KAAKue,EAAUtf,EAAI,KAAKud,GAAcxc,EAAGrF,EAAGgf,CAAI,CAAC,EAC5D,OAAO1a,CACT,EAMA,QAAQ4C,EAAM,CACZ,MAAM1G,EAAIujB,EAAM,MAAM,EACtB,GAAI,CAACL,EAAU,OAAOljB,EACtB,MAAMgF,EAAI8d,GAAWpc,CAAI,EACzB,OAAI,MAAM,QAAQ1G,CAAC,EAAUA,EAAE,IAAI,CAAC8C,EAAGT,IAAMS,GAAK,OAAOkC,EAAE3C,CAAC,CAAC,GAAK,EAAE,EAC7DrC,GAAK,OAAOgF,EAAE,CAAC,CAAC,GAAK,EAC9B,CACF,EACA,OAAOue,CACT,CACA,SAASG,IAAyB,CAChC,MAAMld,EAAI,CACR,KAAM,GACN,KAAM,SACN,IAAK,GACL,SAAU,GACV,aAAc,EACd,MAAO,EACP,KAAM,EACN,QAAS,GACT,MAAO,GACP,IAAI,YAAa,CACf,MAAO,EACT,EACA,MAAO,CACL,OAAOA,CACT,EACA,OAAQ,CACN,OAAOA,CACT,EACA,MAAO,CACL,OAAOA,CACT,EACA,UAAW,CACT,OAAOA,CACT,EACA,UAAW,CACT,MAAO,EACT,EACA,SAAU,CACR,OAAOA,CACT,EACA,kBAAmB,CACjB,OAAOA,CACT,EACA,UAAW,CACT,OAAOA,CACT,EACA,YAAa,CACX,OAAOA,CACT,EACA,SAAU,CACV,EACA,OAAQ,CACN,MAAO,EACT,EACA,QAAQE,EAAM,CACZ,OAAOA,CACT,CACF,EACA,OAAOF,CACT,CACA,MAAMmd,GAA0B,OAAO,OAAuB,OAAO,eAAe,CAClF,UAAW,KACX,gBAAAZ,GACA,uBAAAW,GACA,cAAArC,GACA,UAAAqB,EACF,EAAG,OAAO,YAAa,CAAE,MAAO,QAAS,CAAC,CAAC,EAC3C,SAASkB,GAAiBnU,EAAO,CAC/B,MAAMzK,EAAIyK,GAASA,EAAM,QAAUA,EAAM,OAAO,UAChD,OAAKzK,EACE,CAACA,EAAE,EAAI,KAAK,IAAIyK,EAAM,MAAM,CAAC,CAAC,EAAGzK,EAAE,EAAI,KAAK,IAAIyK,EAAM,MAAM,CAAC,CAAC,CAAC,EADvD,CAAC,EAAG,CAAC,CAEtB,CACA,SAASoU,GAA2BpU,EAAO,CACzC,UAAW7P,KAAK6P,GAASA,EAAM,SAAW,CAAC,EAAG,CAC5C,GAAI7P,EAAE,UAAY,GAAO,SACzB,MAAM2L,EAAI,KAAK,KAAK3L,EAAE,QAAU,CAAC,GAAG,QAASA,EAAE,gBAAkB,CAAC,GAAG,MAAM,EAC3E,QAASyC,EAAI,EAAGA,EAAIkJ,EAAGlJ,IAAK,CAC1B,MAAMkL,EAAK3N,EAAE,QAAUA,EAAE,OAAOyC,CAAC,GAAKzC,EAAE,OAAOyC,CAAC,EAAE,QAAU,CAAC,EACvDyhB,EAAKlkB,EAAE,gBAAkBA,EAAE,eAAeyC,CAAC,GAAKzC,EAAE,eAAeyC,CAAC,EAAE,QAAU,CAAC,EAC/EoV,EAAIlK,EAAG,eAAiB,OAASA,EAAG,aAAeuW,EAAG,aAC5D,GAAI,OAAOrM,CAAC,IAAM,EAAG,MAAO,EAC9B,CACF,CACA,MAAO,EACT,CACA,SAASsM,GAA0BtU,EAAOuU,EAAWlgB,EAAK,CAExD,GADKA,IAAKA,EAAsB,IAAI,KAChC,CAACkgB,EAAW,OAAOlgB,EACvB,UAAWsK,KAAMqB,EAAM,UAAY,CAAC,EAAG,CACrC,MAAMwU,EAAQD,EAAU,IAAI5V,CAAE,EAC1B,CAAC6V,GAASA,EAAM,UAAYA,EAAM,gBACtCngB,EAAI,IAAIsK,CAAE,EACV2V,GAA0BE,EAAOD,EAAWlgB,CAAG,EACjD,CACA,OAAOA,CACT,CACA,SAASogB,GAAeC,EAAgB,CACtC,MAAMvB,EAAO5D,GAAemF,CAAc,GAAK,cAC/C,MAAO,CAAE,KAAAvB,EAAM,KAAM3D,GAAW2D,CAAI,GAAK,CAAE,CAC7C,CACA,SAASwB,GAAmBD,EAAgB7X,EAAKjH,EAAKgC,EAAI,CACxD,KAAM,CAAE,KAAAub,EAAM,KAAAyB,CAAK,EAAIH,GAAeC,CAAc,EACpD,IAAI,EAAI9e,EAGR,OAFIgf,IAAS,EAAG,EAAIhf,EAAMgC,EACjBgd,IAAS,IAAG,EAAI,EAAIhd,EAAKhC,EAAMgC,GACpCub,IAAS,SAAiB,EAAItW,GAAO,EAAI,GACzCsW,IAAS,WAAmBtW,EAAM,EAClCsW,IAAS,WAAmBtW,EAAMjH,EAAMgC,EACrCiF,GAAO,EAAIjF,GAAMhC,EAAMgC,CAChC,CACA,SAASid,GAAcC,EAAQC,EAAOC,EAAO,CAC3C,MAAM7Q,EAAQ2Q,GAAU,OAAOA,EAAO,KAAK,GAAK,EAChD,IAAI5iB,EAAI,KAAK,IAAI,EAAG,KAAK,MAAM6iB,EAAQ5Q,CAAK,CAAC,EACzChS,EAAI,KAAK,IAAI,EAAG,KAAK,MAAM6iB,EAAQ7Q,CAAK,CAAC,EAC7C,MAAMtU,EAAMilB,GAAU,OAAOA,EAAO,GAAG,EACvC,GAAI,OAAO,SAASjlB,CAAG,GAAKA,EAAM,EAAG,CACnC,MAAMolB,EAAO,KAAK,IAAI/iB,EAAGC,CAAC,EAC1B,GAAI8iB,EAAOplB,EAAK,CACd,MAAMsB,EAAItB,EAAMolB,EAChB/iB,EAAI,KAAK,IAAI,EAAG,KAAK,MAAMA,EAAIf,CAAC,CAAC,EACjCgB,EAAI,KAAK,IAAI,EAAG,KAAK,MAAMA,EAAIhB,CAAC,CAAC,CACnC,CACF,CACA,MAAO,CAACe,EAAGC,CAAC,CACd,CACA,SAAS+iB,GAAYC,EAAe,CAClC,MAAM7f,EAAI,OAAO6f,CAAa,EAC9B,MAAI,CAAC,OAAO,SAAS7f,CAAC,GAAKA,EAAI,KAAa,IACrC,EAAIA,CACb,CACA,MAAM8f,GAAsB,GAC5B,SAASC,GAAsBC,EAAYC,EAAoB,CAC7D,MAAO,CAAC,CAACA,GAAsB,CAACD,CAClC,CACA,MAAME,GAAqB,4EAC3B,SAASC,GAAqBC,EAAU,CAEtC,GADI,OAAOA,GAAa,UACpB,2EAA2E,KAAKA,CAAQ,EAC1F,OAAOA,EAET,MAAMC,EAAc,6CAA6C,KAAKD,CAAQ,EACxEE,EAAc,6CAA6C,KAAKF,CAAQ,EAC9E,GAAI,CAACC,GAAe,CAACC,EAAa,OAAOF,EACzC,IAAIrhB,EAAMqhB,EACL,qCAAqC,KAAKrhB,CAAG,IAChDA,EAAMA,EAAI,QAAQ,mBAAoB;AAAA,WAA2C,GAEnF,MAAMwhB,EAAOF,EAAc,6CAA+C,6CAC1E,OAAOthB,EAAI,QAAQwhB,EAAM,qBAAuBL,GAAqB,IAAI,CAC3E,CACA,SAASM,GAAe9jB,EAAQ/B,EAAO,CAAC,EAAG,CACzC,MAAMigB,EAAKle,EAAO,WAAW,SAAU,CAAE,mBAAoB,GAAO,UAAW,GAAO,MAAO,GAAO,sBAAuB,EAAK,CAAC,EACjI,GAAI,CAACke,EAAI,MAAM,IAAI,MAAM,yDAAiB,EAC1C,MAAM6F,EAAiB9lB,EAAK,iBAAmB,SAAY,MACrD+lB,EAAO/lB,EAAK,OAAS,IAAM,CACjC,GACMgmB,EAAc,OAAO,SAAa,IAAc,SAAS,cAAc,QAAQ,EAAI,KACrFA,IACFA,EAAY,MAAM,QAAU,0EAE9B,IAAIC,EAAsB,GACtBC,EAAelmB,EAAK,eAAiB,OAAS,EAAIA,EAAK,aACvDmmB,EAAoB,KACpBC,EAAwB,KACxBC,EAAgB,KACpB,MAAMC,EAA0B,CAC9B,CAAC,wBAAyB,QAAQ,EAClC,CAAC,yBAA0B,SAAS,EACpC,CAAC,wBAAyB,QAAQ,EAClC,CAAC,yBAA0B,SAAS,EACpC,CAAC,wBAAyB,QAAQ,EAClC,CAAC,yBAA0B,SAAS,CACtC,EACA,SAASC,EAAiBC,EAAkB,CAC1CH,EAAgBG,GAAoB,IACtC,CACA,IAAIC,EAAqB,KACrBC,EAAY,KACZC,EAAmB,KACnBC,EAAe,KACfC,EAAkB,KAClBC,EAAe,KACfC,EAAkB,KACtB,MAAMC,EAAmC,IAAI,IACvCC,EAAiC,IAAI,IACrCC,EAAkB,CAAE,MAAO,EAAG,GAAI,EAAG,OAAQ,CAAE,EACrD,SAASC,EAAyBC,EAAQC,EAAO,CAC/CZ,EAAqB,OAAOW,GAAW,WAAaA,EAAS,KAC7DV,EAAYW,GAASA,EAAM,gBAAkB,KAC7CV,EAAmBU,GAASA,EAAM,YAAc,KAChDT,EAAeS,GAASA,EAAM,QAAU,KACxCR,EAAkBQ,GAASA,EAAM,WAAa,KAC9CP,EAAeO,GAASA,EAAM,QAAU,KACxCN,EAAkBM,GAAS,OAAOA,EAAM,WAAc,WAAaA,EAAM,UAAY,KACrFL,EAAiB,MAAM,EACvBC,EAAe,MAAM,CACvB,CACA,IAAIK,EAAoB,GACxB,MAAMC,EAAWvH,GAAYC,EAAIT,GAAWC,EAAS,EAC/C+H,EAAWxH,GAAYC,EAAIT,GAAWE,EAAc,EACpD+H,EAAezH,GAAYC,EAAIT,GAAWG,EAAa,EACvD+H,EAAMzH,EAAG,kBAAkB,EACjCA,EAAG,gBAAgByH,CAAG,EACtB,MAAMC,EAAO1H,EAAG,aAAa,EAC7BA,EAAG,WAAWA,EAAG,aAAc0H,CAAI,EACnC1H,EAAG,wBAAwB,CAAC,EAC5BA,EAAG,oBAAoB,EAAG,EAAGA,EAAG,MAAO,GAAO,GAAI,CAAC,EACnDA,EAAG,wBAAwB,CAAC,EAC5BA,EAAG,oBAAoB,EAAG,EAAGA,EAAG,MAAO,GAAO,GAAI,EAAE,EACpDA,EAAG,gBAAgB,IAAI,EACvB,MAAM2H,EAA2B,IAAI,IACrC,IAAIC,EAAW,EACf,SAASC,EAAO7lB,EAAGC,EAAG6lB,EAAK,CACzB,MAAMC,GAAOD,GAAO,IAAM,IAAM9lB,EAAI,IAAMC,EAC1C,GAAI0lB,EAAS,IAAII,CAAG,EAAG,CACrB,MAAMC,EAAML,EAAS,IAAII,CAAG,EAC5B,OAAAC,EAAI,MAAQJ,EACLI,CACT,CACA,MAAMC,EAAMjI,EAAG,kBAAkB,EAC3Bpc,EAAOoc,EAAG,cAAc,EAC9BA,EAAG,YAAYA,EAAG,WAAYpc,CAAI,EAClCoc,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,KAAMhe,EAAGC,EAAG,EAAG+d,EAAG,KAAMA,EAAG,cAAe,IAAI,EACjFA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAChEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAChEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,gBAAgBA,EAAG,YAAaiI,CAAG,EACtCjI,EAAG,qBAAqBA,EAAG,YAAaA,EAAG,kBAAmBA,EAAG,WAAYpc,EAAM,CAAC,EACpFoc,EAAG,WAAW,EAAG,EAAG,EAAG,CAAC,EACxBA,EAAG,MAAMA,EAAG,gBAAgB,EAC5BA,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EACvC,MAAMpT,EAAQ,CAAE,IAAAqb,EAAK,IAAKrkB,EAAM,MAAO5B,EAAG,OAAQC,EAAG,MAAO2lB,CAAS,EACrE,OAAAD,EAAS,IAAII,EAAKnb,CAAK,EAChBA,CACT,CACA,SAASsb,GAAkB,CACzB,SAAW,CAACH,EAAKnb,CAAK,IAAK+a,EACrB/a,EAAM,QAAUgb,IAChBhb,EAAM,KAAKoT,EAAG,kBAAkBpT,EAAM,GAAG,EACzCA,EAAM,KAAKoT,EAAG,cAAcpT,EAAM,GAAG,EACzC+a,EAAS,OAAOI,CAAG,EAEvB,CACA,MAAMI,GAA4B,IAAI,IAChCC,GAA+B,IAAI,IACnCC,GAAiC,IAAI,IAC3C,SAASC,GAAkB5iB,EAAK,CAC9B,MAAM6iB,EAAO,CAAC,EACR5S,EAAK,2EACX,IAAI7R,EACJ,MAAQA,EAAI6R,EAAG,KAAKjQ,CAAG,KAAO,MAAM,CAClC,MAAM8iB,EAAc1kB,EAAE,CAAC,EACjB2kB,EAAU3kB,EAAE,CAAC,EACb4kB,EAAM,6BAA6B,KAAKD,CAAO,EACrD,GAAI,CAACC,EAAK,SACV,MAAMrF,EAAM,gDAAgD,KAAKoF,CAAO,EACxEF,EAAKG,EAAI,CAAC,CAAC,EAAI,CAAE,QAASF,EAAa,QAASnF,EAAMsF,GAAkBtF,EAAI,CAAC,CAAC,EAAI,MAAO,CAC3F,CACA,OAAOkF,CACT,CACA,SAASK,GAAqBljB,EAAK,CACjC,MAAMvB,EAAsB,IAAI,IAC1BwR,EAAK,2DACX,IAAI7R,EACJ,MAAQA,EAAI6R,EAAG,KAAKjQ,CAAG,KAAO,MAAM,CAClC,MAAMmjB,EAAO,OAAO/kB,EAAE,CAAC,CAAC,EAClBuf,EAAM,4BAA4B,KAAKvf,EAAE,CAAC,CAAC,EAC7Cuf,GAAOA,EAAI,CAAC,GAAGlf,EAAI,IAAI0kB,EAAMxF,EAAI,CAAC,CAAC,CACzC,CACA,OAAOlf,CACT,CACA,SAAS2kB,GAAmBpjB,EAAK,CAC/B,MAAMvB,EAAM,CAAC,EACPwR,EAAK,+DACX,IAAI7R,EACJ,MAAQA,EAAI6R,EAAG,KAAKjQ,CAAG,KAAO,MAAM,CAClC,MAAMqjB,EAAQ,0BAA0B,KAAKjlB,EAAE,CAAC,CAAC,EAC7CilB,GAAO5kB,EAAI,KAAK,CAAE,KAAM,OAAOL,EAAE,CAAC,CAAC,EAAG,KAAMA,EAAE,CAAC,EAAG,MAAOilB,EAAM,CAAC,CAAE,CAAC,CACzE,CACA,OAAO5kB,CACT,CACA,SAASwkB,GAAkB1nB,EAAG,CAC5B,GAAIA,EAAE,WAAW,GAAG,EAAG,OAAOA,EAAE,MAAM,EAAG,EAAE,EAC3C,MAAM2K,EAAI,OAAO3K,CAAC,EAClB,OAAO,OAAO,SAAS2K,CAAC,EAAIA,EAAI,MAClC,CACA,eAAeod,GAAiBC,EAAYhS,EAAQiS,EAAkB,CACpE,IAAIxjB,EAAM2iB,GAAe,IAAIY,CAAU,EACvC,GAAIvjB,IAAQ,OAAQ,CAClB,MAAMyjB,EAAU,MAAMtD,EAAe,WAAaoD,EAAa,OAAO,GAAK,GACrEG,EAAU,MAAMvD,EAAe,WAAaoD,EAAa,OAAO,GAAK,GAC3EvjB,EAAM,CAAE,KAAMyjB,EAAS,KAAMC,EAAS,UAAWN,GAAmBK,CAAO,CAAE,EAC7Ed,GAAe,IAAIY,EAAYvjB,CAAG,CACpC,CACA,MAAM2jB,EAAkB,CAAE,GAAGpS,CAAO,EACpC,UAAWqS,KAAM5jB,EAAI,UACfwjB,GAAoBA,EAAiBI,EAAG,IAAI,GAAKD,EAAgBC,EAAG,KAAK,IAAM,SACjFD,EAAgBC,EAAG,KAAK,EAAI,GAGhC,MAAMvB,EAAMkB,EAAa,IAAM,KAAK,UAAUI,CAAe,EAC7D,GAAIlB,GAAU,IAAIJ,CAAG,EAAG,OAAOI,GAAU,IAAIJ,CAAG,EAChD,QAASwB,EAAU,EAAGA,EAAU,EAAGA,IAAW,CAC5C,MAAMC,EAA0B,IAAI,IAC9BC,EAAYzR,IACZoQ,GAAa,IAAIpQ,EAAI,EAAUoQ,GAAa,IAAIpQ,EAAI,GACxDwR,EAAQ,IAAIxR,EAAI,EACT,MAEHwN,EAAWD,GAAqBzM,GAAUpT,EAAI,KAAM,OAAQ2jB,EAAiBI,EAAU/jB,EAAI,IAAI,CAAC,EAChGgkB,EAAW5Q,GAAUpT,EAAI,KAAM,OAAQ2jB,EAAiBI,EAAU/jB,EAAI,IAAI,EAChF,GAAI8jB,EAAQ,OAAS,EAAG,CACtB,IAAIG,GACJ,GAAI,CACFA,GAAO5J,GAAYC,EAAI0J,EAAUlE,CAAQ,CAC3C,OAASvlB,EAAG,CACV,MAAM,IAAI,MAAM,UAAYgpB,EAAa,KAAOhpB,GAAKA,EAAE,QAAQ,CACjE,CACA,MAAM2pB,EAAsB,IAAI,IAC1Bhe,GAAIoU,EAAG,oBAAoB2J,GAAM3J,EAAG,eAAe,EACzD,QAAStd,EAAI,EAAGA,EAAIkJ,GAAGlJ,IAAK,CAC1B,MAAMqT,GAAOiK,EAAG,iBAAiB2J,GAAMjnB,CAAC,EAClCqE,GAAOgP,GAAK,KAAK,QAAQ,SAAU,EAAE,EAC3C6T,EAAI,IAAI7iB,GAAM,CAAE,IAAKiZ,EAAG,mBAAmB2J,GAAM5T,GAAK,IAAI,EAAG,KAAM+J,GAAS/J,GAAK,IAAI,GAAK,UAAW,KAAMA,GAAK,IAAK,CAAC,CACxH,CACA,MAAM8T,GAAU,CAAE,GAAGvB,GAAkB5iB,EAAI,IAAI,EAAG,GAAG4iB,GAAkB5iB,EAAI,IAAI,CAAE,EAC3EokB,GAAkB,IAAI,IAAI,CAAC,GAAGlB,GAAqBljB,EAAI,IAAI,EAAG,GAAGkjB,GAAqBljB,EAAI,IAAI,CAAC,CAAC,EAChGkH,GAAQ,CAAE,KAAA+c,GAAM,IAAAC,EAAK,QAAAC,GAAS,gBAAAC,GAAiB,SAAAtE,EAAU,SAAAkE,CAAS,EACxE,OAAAvB,GAAU,IAAIJ,EAAKnb,EAAK,EACjBA,EACT,CACA,MAAM,QAAQ,IAAI,MAAM,KAAK4c,CAAO,EAAE,IAAI,MAAO3pB,IAAM,CACrDuoB,GAAa,IAAIvoB,GAAG,MAAMgmB,EAAe,WAAahmB,EAAC,GAAK,EAAE,CAChE,CAAC,CAAC,CACJ,CACA,MAAM,IAAI,MAAM,qCAAmBopB,CAAU,CAC/C,CACA,MAAMc,GAAWvJ,GAAYR,EAAI,IAAI,WAAW,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EAAG,EAAG,CAAC,EACrEgK,GAAiBxJ,GAAYR,EAAI,IAAI,WAAW,CAAC,EAAG,EAAG,EAAG,CAAC,CAAC,EAAG,EAAG,CAAC,EACzE,IAAIiK,GAAkB,KACtB,SAASC,GAAmBtR,EAAI,CAC9BqR,GAAkBrR,GAAM,IAC1B,CACA,SAASuR,IAAc,CACrB,GAAI,CAACF,GAAiB,OAAO,KAC7B,MAAM7pB,EAAI,OAAO6pB,IAAoB,WAAaA,GAAgB,EAAIA,GACtE,OAAO7pB,GAAKA,EAAE,MAAQA,EAAE,MAAQA,CAClC,CACA,MAAMgqB,GAAgB,CAAE,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,CAAE,EACjD,IAAIC,GAAmB,EACnBC,GAAsB,EACtBC,GAAsB,EACtBC,GAAgB,EAAI,GACpBC,GAAqB,GACzB,MAAMC,GAAe,OAAO3qB,EAAK,cAAiB,UAAYA,EAAK,cAAgB,EAAIA,EAAK,aAAe,EACrG4qB,GAAW,CAACtqB,EAAG4M,IAAS,CAC5B,MAAMxD,EAAMpJ,IAAM,MAAQ,OAAOA,GAAM,SAAWA,EAAE,MAAQA,EAC5D,OAAIoJ,IAAQ,IAAQA,IAAQ,EAAU,GAClCA,IAAQ,IAASA,IAAQ,EAAU,GAChCwD,CACT,EACM2d,GAAW,CAACvqB,EAAG4M,IAAS,CAC5B,MAAMxD,EAAMpJ,IAAM,MAAQ,OAAOA,GAAM,SAAWA,EAAE,MAAQA,EAC5D,OAAO,OAAOoJ,GAAQ,UAAY,OAAO,SAASA,CAAG,EAAIA,EAAMwD,CACjE,EACM4d,GAAexb,GAAYtP,EAAK,OAAS,IAAS4qB,GAAStb,EAAQ,WAAY,EAAK,EAC1F,SAASyb,GAAkBzb,EAAS0b,EAAM,CACxC,GAAI,CAACJ,GAAStb,EAAQ,YAAa,EAAK,EAAG,OAAO,KAClD,MAAM2b,EAAMJ,GAASvb,EAAQ,qBAAsB,CAAC,EACpD,GAAI2b,IAAQ,EAAG,OAAO,KACtB,MAAMC,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGL,GAASvb,EAAQ,qBAAsB,CAAC,CAAC,CAAC,EAC1E6b,EAAQN,GAASvb,EAAQ,iBAAkB,CAAC,EAC5CyI,EAAIiT,EAAOG,EACXC,EAAO,KAAK,IAAIrT,EAAI,GAAG,EAAI,KAAK,IAAIA,EAAI,EAAG,EAC3CsT,EAAO,KAAK,IAAItT,EAAI,GAAG,EAAI,KAAK,IAAIA,EAAI,EAAG,EAC3CuT,EAAM,KAAK,IAAIvT,EAAI,IAAI,EAAI,KAAK,IAAIA,EAAI,GAAG,EAC3CwT,EAAM,KAAK,IAAIxT,EAAI,GAAG,EAAI,KAAK,IAAIA,EAAI,IAAI,EACjD,MAAO,CACL,GAAIqT,GAAQ,EAAIF,GAASI,EAAMJ,GAASD,EACxC,GAAII,GAAQ,EAAIH,GAASK,EAAML,GAASD,CAC1C,CACF,CACA,SAASO,IAAkB,CACzB,MAAMtmB,EAAoB,IAAI,KAC9B,OAAQA,EAAE,SAAS,EAAI,KAAOA,EAAE,WAAW,EAAI,GAAKA,EAAE,WAAW,GAAK,KACxE,CACA,SAASumB,GAAO5B,EAAKhnB,EAAM6oB,EAAQ,CACjC,MAAMnrB,EAAIspB,EAAI,IAAIhnB,CAAI,EAClBtC,GAAKA,EAAE,MAAQ,MAAMmrB,EAAOnrB,EAAE,IAAKA,EAAE,KAAMA,EAAE,IAAI,CACvD,CACA,SAASorB,GAAcrrB,EAAG,CACxB,GAAI,OAAOA,GAAM,SAAU,MAAO,CAACA,EAAGA,EAAGA,EAAGA,CAAC,EAC7C,MAAMD,EAAI,OAAOC,CAAC,EAAE,KAAK,EAAE,MAAM,QAAQ,EAAE,IAAI,MAAM,EACrD,MAAO,CAACD,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,CAAC,CACpD,CACA,SAASurB,GAAY/B,EAAKhnB,EAAM4D,EAAO,CACrC,MAAMlG,EAAIspB,EAAI,IAAIhnB,CAAI,EACtB,GAAI,CAACtC,GAAKA,EAAE,MAAQ,KAAM,OAC1B,MAAMmJ,EAAMjD,GAASA,EAAM,QAAU,OAASA,EAAM,MAAQA,EACtDolB,EAAMF,GAAcjiB,CAAG,EAC7B,OAAQnJ,EAAE,KAAM,CACd,IAAK,QACH0f,EAAG,UAAU1f,EAAE,IAAKsrB,EAAI,CAAC,CAAC,EAC1B,MACF,IAAK,MACL,IAAK,OACH5L,EAAG,UAAU1f,EAAE,IAAKmJ,IAAQ,IAAQA,IAAQ,EAAI,EAAI,KAAK,MAAMmiB,EAAI,CAAC,CAAC,CAAC,EACtE,MACF,IAAK,OACH5L,EAAG,UAAU1f,EAAE,IAAKsrB,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,EAClC,MACF,IAAK,OACH5L,EAAG,UAAU1f,EAAE,IAAKsrB,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,EAC1C,MACF,IAAK,OACH5L,EAAG,UAAU1f,EAAE,IAAKsrB,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,EAClD,MACF,IAAK,OACH5L,EAAG,iBAAiB1f,EAAE,IAAK,GAAOurB,EAAQ,EAC1C,MACF,IAAK,OACH7L,EAAG,iBAAiB1f,EAAE,IAAK,GAAOwrB,EAAQ,EAC1C,KACJ,CACF,CACA,MAAMC,GAAe,IAAM,IAAI,aAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,EACvE,SAASC,GAAmBpC,EAAK9Z,EAAOib,EAAM9X,EAAOC,EAAO+Y,EAAKC,EAAQC,EAAWC,EAAaC,EAAU9Z,EAAK,CAM9G,GALAiZ,GAAO5B,EAAK,SAAWja,GAAMqQ,EAAG,UAAUrQ,EAAGob,CAAI,CAAC,EAClDS,GAAO5B,EAAK,YAAcja,GAAMqQ,EAAG,UAAUrQ,EAAG4b,GAAgB,CAAC,CAAC,EAClEC,GAAO5B,EAAK,8BAAgCja,GAAMqQ,EAAG,iBAAiBrQ,EAAG,GAAOsc,CAAG,CAAC,EACpFT,GAAO5B,EAAK,gBAAkBja,GAAMqQ,EAAG,iBAAiBrQ,EAAG,GAAOuc,CAAM,CAAC,EACzEV,GAAO5B,EAAK,yBAA2Bja,GAAMqQ,EAAG,iBAAiBrQ,EAAG,GAAOwc,CAAS,CAAC,EACjFvC,EAAI,IAAI,oCAAoC,EAAG,CACjD,IAAI0C,EAAK,KACT,SAAW,CAAC5pB,GAAG6pB,EAAG,IAAKH,EAAiB1pB,KAAM,IAAG4pB,EAAKC,IACtD,MAAMC,GAASF,GAAMA,EAAG,CAAC,EAAI,GAAKA,EAAG,CAAC,EAAI,EAAI7a,GAAcC,GAAUZ,GAAa,EAAGwb,EAAG,CAAC,EAAI,EAAGA,EAAG,CAAC,EAAI,EAAG,CAAC,CAAC,EAAIT,GAClHL,GAAO5B,EAAK,qCAAuCja,IAAMqQ,EAAG,iBAAiBrQ,GAAG,GAAO6c,EAAM,CAAC,CAChG,CACAhB,GAAO5B,EAAK,eAAiBja,GAAMqQ,EAAG,UAAUrQ,EAAGG,EAAM,UAAU,CAAC,EACpE0b,GAAO5B,EAAK,cAAgBja,GAAMqQ,EAAG,UAAUrQ,EAAGG,EAAM,KAAK,CAAC,EAC9D0b,GAAO5B,EAAK,UAAYja,GAAMqQ,EAAG,UAAUrQ,EAAGG,EAAM,KAAK,CAAC,EAC1D0b,GAAO5B,EAAK,UAAYja,GAAMqQ,EAAG,UAAUrQ,EAAGG,EAAM,MAAM,CAAC,EAAGA,EAAM,MAAM,CAAC,EAAGA,EAAM,MAAM,CAAC,CAAC,CAAC,EAC7F0b,GAAO5B,EAAK,WAAaja,GAAMqQ,EAAG,UAAUrQ,EAAGG,EAAM,MAAM,CAAC,EAAGA,EAAM,MAAM,CAAC,EAAGA,EAAM,MAAM,CAAC,EAAG,CAAC,CAAC,EACjG0b,GAAO5B,EAAK,mBAAqBja,GAAMqQ,EAAG,UAAUrQ,EAAGG,EAAM,MAAM,CAAC,EAAGA,EAAM,MAAM,CAAC,EAAGA,EAAM,MAAM,CAAC,CAAC,CAAC,EACtG0b,GAAO5B,EAAK,cAAgBja,GAAMqQ,EAAG,UAAUrQ,EAAG,EAAIsD,EAAO,EAAIC,CAAK,CAAC,EACvEsY,GAAO5B,EAAK,kBAAoBja,GAAMqQ,EAAG,UAAUrQ,EAAG,GAAMsD,EAAO,GAAMC,CAAK,CAAC,EAC/EsY,GAAO5B,EAAK,0BAA4Bja,GAAMqQ,EAAG,UAAUrQ,EAAG,CAAC,CAAC,EAChE,MAAMvP,GAAI+pB,GAAY,EAChBsC,EAAWtH,GAAsB,CAAC,EAAE/kB,IAAKA,GAAE,KAAM,CAAC,CAACwpB,EAAI,IAAI,gBAAgB,CAAC,EAClF,IAAI8C,GAAKD,EAAWvH,GAAsB9kB,GAAIA,GAAE,EAAI,GAChDusB,GAAKF,EAAWvH,GAAsB9kB,GAAIA,GAAE,EAAI,GAChDwsB,GAAMH,EAAWvH,GAAsB9kB,GAAIA,GAAE,MAAQ,GACrDysB,GAAMJ,EAAWvH,GAAsB9kB,GAAIA,GAAE,MAAQ,GACzD,GAAImS,GAAOzC,GAASA,EAAM,MAAQA,EAAM,KAAK,CAAC,EAAI,GAAKA,EAAM,KAAK,CAAC,EAAI,EAAG,CACxE,MAAM2L,EAAK,KAAK,IAAI3L,EAAM,KAAK,CAAC,EAAIA,EAAM,MAAM,CAAC,CAAC,EAC5Cgd,GAAK,KAAK,IAAIhd,EAAM,KAAK,CAAC,EAAIA,EAAM,MAAM,CAAC,CAAC,EAClD,GAAI2L,EAAK,GAAKqR,GAAK,EAAG,CACpB,MAAMC,GAAKjd,EAAM,OAAO,CAAC,EAAI2L,EAAK,EAC5BuR,GAAKza,EAAI,MAAQzC,EAAM,OAAO,CAAC,EAAIgd,GAAK,EACxCG,GAAY3sB,KAAOiS,EAAI,KAAOjS,GAAIiS,EAAI,MAAQwa,IAAMtR,EACpDyR,GAAY7sB,KAAOkS,EAAI,KAAOlS,GAAIkS,EAAI,MAAQya,IAAMF,GAC1DJ,GAAKO,GAASP,EAAE,EAChBC,GAAKO,GAASP,EAAE,EAChBC,GAAMK,GAASL,EAAG,EAClBC,GAAMK,GAASL,EAAG,CACpB,CACF,CACArB,GAAO5B,EAAK,oBAAsBja,GAAMqQ,EAAG,UAAUrQ,EAAG+c,GAAIC,EAAE,CAAC,EAC/DnB,GAAO5B,EAAK,wBAA0Bja,GAAMqQ,EAAG,UAAUrQ,EAAGid,GAAKC,EAAG,CAAC,EACrErB,GAAO5B,EAAK,iBAAmBja,GAAMqQ,EAAG,UAAUrQ,EAAG+c,GAAIC,GAAIvsB,IAAKA,GAAE,SAAW,EAAI,EAAG,CAAC,CAAC,EACxForB,GAAO5B,EAAK,qBAAuBja,GAAMqQ,EAAG,UAAUrQ,EAAGya,GAAc,GAAK,GAAM,GAAKA,GAAc,GAAK,GAAM,EAAG,CAAC,EACpHoB,GAAO5B,EAAK,cAAgBja,GAAMqQ,EAAG,UAAUrQ,EAAG6a,EAAa,CAAC,EAC5DZ,EAAI,IAAI,wCAAwC,GAClD4B,GAAO5B,EAAK,yCAA2Cja,GAAMqQ,EAAG,iBAAiBrQ,EAAG,GAAOkc,EAAQ,CAAC,EAEtG,QAASnpB,EAAI,EAAGA,EAAI,EAAGA,IACrB8oB,GAAO5B,EAAK,YAAclnB,EAAIiN,IAAMqQ,EAAG,UAAUrQ,GAAGjN,CAAC,CAAC,EAExD,SAAW,CAACA,EAAG6pB,EAAG,IAAKH,EACrBZ,GAAO5B,EAAK,YAAclnB,EAAI,aAAeiN,IAAMqQ,EAAG,UAAUrQ,GAAG4c,GAAI,CAAC,EAAGA,GAAI,CAAC,EAAGA,GAAI,CAAC,EAAGA,GAAI,CAAC,CAAC,CAAC,EAEpG,GAAInG,EAAe,CACjB,MAAM+G,EAAO,OAAO/G,GAAkB,WAAaA,EAAc,EAAIA,EACrE,GAAI+G,EACF,SAAW,CAACvqB,GAAMmlB,EAAG,IAAK1B,EAAyB,CACjD,MAAMuF,GAAMuB,EAAKpF,EAAG,EAChB6D,IAAKJ,GAAO5B,EAAKhnB,GAAO+M,IAAMqQ,EAAG,WAAWrQ,GAAGic,EAAG,CAAC,CACzD,CAEJ,CACF,CACA,SAASwB,GAAcxD,EAAKyD,EAAWxD,EAAS,CAC9C,SAAW,CAACyD,EAAQ9mB,CAAK,IAAK,OAAO,QAAQ6mB,GAAa,CAAC,CAAC,EAAG,CAC7D,MAAMzgB,EAAQid,GAAWA,EAAQyD,CAAM,EAClC1gB,GACL+e,GAAY/B,EAAKhd,EAAM,QAASpG,CAAK,CACvC,CACA,SAAW,CAAC8mB,EAAQ1gB,CAAK,IAAK,OAAO,QAAQid,GAAW,CAAC,CAAC,GACpD,CAACwD,GAAa,EAAEC,KAAUD,KACxBzgB,EAAM,UAAY,QAAQ+e,GAAY/B,EAAKhd,EAAM,QAASA,EAAM,OAAO,CAGjF,CACA,SAAS2gB,GAAqB3D,EAAK,CACjC,MAAMxpB,EAAI+pB,GAAY,EACjBhF,GAAsB,CAAC,EAAE/kB,GAAKA,EAAE,KAAM,CAAC,CAACwpB,EAAI,IAAI,gBAAgB,CAAC,GACtE4B,GAAO5B,EAAK,iBAAmBja,GAAMqQ,EAAG,UAAUrQ,EAAG,CAAC,CAAC,CACzD,CACA,SAAS6d,GAAkBH,EAAWI,EAAU1C,EAAMjb,EAAO,CAC3D,GAAI,CAACud,EAAW,OAAOA,EACvB,IAAIK,EAAY,GAChB,UAAWrtB,KAAK,OAAO,OAAOgtB,CAAS,EACrC,GAAIhtB,IAAM,MAAQ,OAAOA,GAAM,UAAY,OAAOA,EAAE,QAAW,SAAU,CACvEqtB,EAAY,GACZ,KACF,CAGF,GADI,CAACA,GACD,CAAClH,EAAoB,OAAO6G,EAChC,MAAMlpB,EAAM,CAAE,GAAGkpB,CAAU,EAC3B,SAAW,CAACtF,EAAK1nB,CAAC,IAAK,OAAO,QAAQgtB,CAAS,EAAG,CAChD,GAAIhtB,IAAM,MAAQ,OAAOA,GAAM,UAAY,OAAOA,EAAE,QAAW,SAAU,SACzE,MAAMstB,EAAKF,EAAW,IAAM1F,EAC5B,IAAI6F,EAAK7G,EAAiB,IAAI4G,CAAE,EAChC,GAAIC,IAAO,OAAQ,CACjB3G,EAAgB,QAChB,GAAI,CACF2G,EAAKpH,EAAmBnmB,EAAE,OAAQA,EAAE,kBAAoBA,EAAE,kBAAoB,KAAM,CAClF,eAAgBomB,GAAa,CAAC,EAC9B,WAAYC,GAAoB,OAIhC,MAAO5W,GAAS,KAIhB,OAAQ6W,GAAgB,CAAC,EAGzB,UAAWC,GAAmB,OAG9B,WAAYC,EAAeA,EAAa,WAAa,OACrD,aAAcA,EAAeA,EAAa,aAAe,OACzD,YAAaA,EAAeA,EAAa,YAAc,OACvD,cAAeA,EAAeA,EAAa,cAAgB,MAC7D,CAAC,CACH,MAAQ,CACN+G,EAAK,IACP,CAIA,GAHIA,EAAI3G,EAAgB,KACnBA,EAAgB,SACrBF,EAAiB,IAAI4G,EAAIC,CAAE,EACvBA,EAAI,CACN,MAAMC,GAASxtB,EAAE,QAAU,OAASA,EAAE,MAAQA,EACxCytB,GAAQpC,GAAcmC,EAAM,EAE5BE,GADS,OAAOF,IAAW,SACRC,GAAM,CAAC,EAAI,CAAE,EAAGA,GAAM,CAAC,EAAG,EAAGA,GAAM,CAAC,EAAG,EAAGA,GAAM,CAAC,CAAE,EACxEF,EAAG,MAAMA,EAAG,KAAKG,EAAO,CAC9B,CACA,GAAIH,GAAM,OAAOA,EAAG,qBAAwB,WAC1C,GAAI,CACFA,EAAG,oBAAoBnH,GAAa,CAAC,CAAC,CACxC,MAAQ,CACR,CAEF,GAAImH,GAAMA,EAAG,cAAgB9G,EAC3B,GAAI,CACFA,EAAgB8G,CAAE,CACpB,MAAQ,CACR,CAEJ,CACA,GAAI,CAACA,GAAMA,EAAG,UAAY,CAACA,EAAG,UAAW,SACzC,GAAIA,EAAG,OAAQ,CACbA,EAAG,OAAO,QAAU7C,EACpB6C,EAAG,OAAO,UAAYpD,GACtBoD,EAAG,OAAO,UAAYrC,GAAgB,EACtC,MAAMyC,GAAM7D,GAAY,EACpB6D,IAAOA,GAAI,SAAWA,GAAI,UAC5BJ,EAAG,OAAO,iBAAmB,CAAE,EAAGI,GAAI,QAAS,EAAGA,GAAI,OAAQ,EAElE,CACA,MAAMjnB,EAAO2kB,GAAcrrB,EAAE,QAAU,OAASA,EAAE,MAAQA,CAAC,EAErD4tB,EADW,OAAQ5tB,EAAE,QAAU,OAASA,EAAE,MAAQA,IAAO,SACxC0G,EAAK,CAAC,EAAI,CAAE,EAAGA,EAAK,CAAC,EAAG,EAAGA,EAAK,CAAC,EAAG,EAAGA,EAAK,CAAC,CAAE,EACtE,IAAImnB,GACJ,GAAI,CACFA,GAAMN,EAAG,WAAWK,CAAG,CACzB,MAAQ,CACNC,GAAM,MACR,CACA,MAAMxoB,GAAwBwoB,IAAqBD,EACnD,GAAI,OAAOvoB,IAAQ,UAAY,OAAO,SAASA,EAAG,EAAGvB,EAAI4jB,CAAG,EAAIriB,WACvDA,IAAO,OAAOA,IAAQ,SAAU,CACvC,MAAMvC,GAAI,OAAOuC,GAAI,CAAC,EAAGpB,GAAI,OAAOoB,GAAI,CAAC,EACnC8L,EAAI,OAAO9L,GAAI,CAAC,EAClB,OAAO,SAASvC,EAAC,GAAK,OAAO,SAASmB,EAAC,IACzCH,EAAI4jB,CAAG,EAAI,OAAO,SAASvW,CAAC,EAAI,GAAGrO,EAAC,IAAImB,EAAC,IAAIkN,CAAC,GAAK,GAAGrO,EAAC,IAAImB,EAAC,KAEhE,CACF,CACA,OAAOH,CACT,CACA,SAASgqB,GAAkBd,EAAWI,EAAU1C,EAAM,CACpD,GAAI,CAACsC,EAAW,OAAOA,EACvB,IAAIe,EAAU,GACd,UAAW/tB,KAAK,OAAO,OAAOgtB,CAAS,EACrC,GAAIhtB,GAAK,OAAOA,GAAM,UAAYA,EAAE,WAAaA,EAAE,UAAU,QAAS,CACpE+tB,EAAU,GACV,KACF,CAEF,GAAI,CAACA,EAAS,OAAOf,EACrB,MAAMlpB,EAAM,CAAE,GAAGkpB,CAAU,EAC3B,SAAW,CAACtF,EAAK1nB,CAAC,IAAK,OAAO,QAAQgtB,CAAS,EAAG,CAChD,GAAI,CAAChtB,GAAK,OAAOA,GAAM,UAAY,CAACA,EAAE,WAAa,CAACA,EAAE,UAAU,QAAS,SACzE,MAAMstB,EAAKF,EAAW,SAAW1F,EACjC,IAAIsG,EAAMrH,EAAe,IAAI2G,CAAE,EAC/B,GAAI,CAACU,EAAK,CACR,MAAMC,EAAOlL,GAAgB/iB,EAAE,SAAS,EAClCoJ,EAAMpJ,EAAE,QAAU,OAASA,EAAE,MAAQ,EAC3CiuB,EAAK,YAAc,MAAM,QAAQ7kB,CAAG,EAAIA,EAAI,MAAM,EAAIA,EACtD4kB,EAAM,CAAE,KAAAC,CAAK,EACbtH,EAAe,IAAI2G,EAAIU,CAAG,CAC5B,CACIA,EAAI,KAAK,SAASA,EAAI,KAAK,SAAStD,EAAOsD,EAAI,KAAK,IAAMA,EAAI,KAAK,IAAI,EAC3ElqB,EAAI4jB,CAAG,EAAIsG,EAAI,KAAK,QAAQA,EAAI,KAAK,WAAW,CAClD,CACA,OAAOlqB,CACT,CACA,SAASoqB,GAAmB3rB,EAAM4rB,EAAUC,EAAYC,EAAU,CAChE,OAAI9rB,GAAS,MAA2BA,IAAS,GAAW,KACxDA,EAAK,WAAW,MAAM,EACpBA,EAAK,WAAW,yBAAyB,EACtC+rB,IACDC,GAAc,IAAIhsB,CAAI,EAAUgsB,GAAc,IAAIhsB,CAAI,EAD5B4rB,EAI5BC,EAAW,IAAI7rB,CAAI,EAAU6rB,EAAW,IAAI7rB,CAAI,EAC7C,KAEL6rB,EAAW,IAAI7rB,CAAI,EAAU6rB,EAAW,IAAI7rB,CAAI,EAC7C8rB,EAAS,IAAI9rB,CAAI,GAAK,IAC/B,CACA,MAAMisB,GAAYjP,GAAc,EAC1BkP,GAAajP,GAAe,EAC5BkP,GAAiC,IAAI,IAC3C,SAASC,GAAUhtB,EAAGC,EAAG,CACvB,MAAM8lB,EAAM/lB,EAAI,IAAMC,EACtB,IAAI8H,EAAIglB,GAAe,IAAIhH,CAAG,EAC9B,OAAIhe,IAAM,SACRA,EAAI4V,GAAe3d,EAAGC,CAAC,EACvB8sB,GAAe,IAAIhH,EAAKhe,CAAC,GAEpBA,CACT,CACA,IAAIklB,GAAiB,KACrB,SAASC,GAAWnH,EAAKoH,EAAO,CAC1BF,KAAmBlH,IACvB/H,EAAG,WAAWA,EAAG,aAAc0H,CAAI,EACnC1H,EAAG,WAAWA,EAAG,aAAcmP,EAAOnP,EAAG,YAAY,EACrDiP,GAAiBlH,EACnB,CACA,MAAMqH,GAAU,CACd,IAAKpP,EAAG,mBAAmBsH,EAAU,OAAO,EAC5C,IAAKtH,EAAG,mBAAmBsH,EAAU,OAAO,EAC5C,MAAOtH,EAAG,mBAAmBsH,EAAU,UAAU,EACjD,YAAatH,EAAG,mBAAmBsH,EAAU,eAAe,EAC5D,OAAQtH,EAAG,mBAAmBsH,EAAU,UAAU,EAClD,OAAQtH,EAAG,mBAAmBsH,EAAU,UAAU,EAClD,UAAWtH,EAAG,mBAAmBsH,EAAU,aAAa,CAC1D,EACM+H,GAAU,CACd,IAAKrP,EAAG,mBAAmBuH,EAAU,OAAO,EAC5C,IAAKvH,EAAG,mBAAmBuH,EAAU,OAAO,EAC5C,UAAWvH,EAAG,mBAAmBuH,EAAU,aAAa,CAC1D,EACM+H,GAAc,CAClB,IAAKtP,EAAG,mBAAmBwH,EAAc,OAAO,EAChD,IAAKxH,EAAG,mBAAmBwH,EAAc,OAAO,CAClD,EACMqE,GAAW/a,GAAa,EACxBgb,GAAWC,GAAa,EAC9B,SAASwD,GAAStM,EAAM,CAClBA,IAAS,eACXjD,EAAG,OAAOA,EAAG,KAAK,EAClBA,EAAG,kBAAkBA,EAAG,UAAWA,EAAG,oBAAqBA,EAAG,IAAKA,EAAG,mBAAmB,GAChFiD,IAAS,YAClBjD,EAAG,OAAOA,EAAG,KAAK,EAClBA,EAAG,kBAAkBA,EAAG,UAAWA,EAAG,IAAKA,EAAG,IAAKA,EAAG,GAAG,GAEzDA,EAAG,QAAQA,EAAG,KAAK,CAEvB,CACA,IAAIwP,GAAY,EAChB,SAASC,GAAcjL,EAAgB,CACrC,KAAM,CAAE,KAAAvB,EAAM,KAAAyB,CAAK,EAAIH,GAAeC,CAAc,EACpDgL,GAAY9K,EACRzB,IAAS,YACXjD,EAAG,OAAOA,EAAG,KAAK,EAClBA,EAAG,kBAAkBA,EAAG,UAAWA,EAAG,IAAKA,EAAG,IAAKA,EAAG,GAAG,GAChDiD,IAAS,YAClBjD,EAAG,OAAOA,EAAG,KAAK,EAClBA,EAAG,kBAAkBA,EAAG,UAAWA,EAAG,KAAMA,EAAG,IAAKA,EAAG,mBAAmB,GACjEiD,IAAS,UAClBjD,EAAG,OAAOA,EAAG,KAAK,EAClBA,EAAG,kBAAkBA,EAAG,IAAKA,EAAG,oBAAqBA,EAAG,IAAKA,EAAG,mBAAmB,GAEnFuP,GAAS,aAAa,CAE1B,CACA,SAASG,GAAiB5f,EAAOyC,EAAK,CACpC,GAAIA,GAAOA,EAAI,YAAa,MAAO,GACnC,MAAMnO,EAAK0L,EAAM,KAAK,CAAC,EAAIA,EAAM,MAAM,CAAC,EAClCzL,EAAKyL,EAAM,KAAK,CAAC,EAAIA,EAAM,MAAM,CAAC,EACxC,GAAI1L,IAAO,GAAKC,IAAO,EAAG,MAAO,GACjC,IAAIsrB,EAAQ,KAAK,IAAIvrB,CAAE,EAAI,EACvBwrB,EAAQ,KAAK,IAAIvrB,CAAE,EAAI,EAC3B,MAAMwrB,EAAM/f,EAAM,OAAO,CAAC,EAC1B,GAAI+f,IAAQ,EAAG,CACb,MAAM3qB,GAAI,KAAK,IAAI,KAAK,IAAI2qB,CAAG,CAAC,EAC1B5uB,GAAI,KAAK,IAAI,KAAK,IAAI4uB,CAAG,CAAC,EAC1Bvc,GAAKqc,EAAQzqB,GAAI0qB,EAAQ3uB,GACzBsS,GAAKoc,EAAQ1uB,GAAI2uB,EAAQ1qB,GAC/ByqB,EAAQrc,GACRsc,EAAQrc,EACV,CACA,MAAM2B,EAAKpF,EAAM,OAAO,CAAC,EACnBqF,EAAK5C,EAAI,MAAQzC,EAAM,OAAO,CAAC,EACrC,IAAIggB,EAAS,GACThgB,EAAM,gBACRggB,GAAU,KAAK,IAAIva,GAAoBzF,EAAM,cAAc,CAAC,CAAC,EAAIwa,EAAmB,EACpFwF,GAAU,KAAK,IAAIva,GAAoBzF,EAAM,cAAc,CAAC,CAAC,EAAIya,EAAmB,GAEtF,MAAMwF,EAAM9L,GAAiBnU,CAAK,EAC5BkgB,GAAUF,EAASC,EAAI,CAAC,EACxBE,EAAUH,EAASC,EAAI,CAAC,EAC9B,OAAO7a,EAAKya,EAAQK,GAAUzd,EAAI,MAAQ2C,EAAKya,EAAQK,GAAUzd,EAAI,KAAOA,EAAI,OAAS4C,EAAKya,EAAQK,EAAU1d,EAAI,MAAQ4C,EAAKya,EAAQK,EAAU1d,EAAI,KAAOA,EAAI,KACpK,CACA,SAAS2d,GAAiBpgB,EAAOqgB,EAAQpF,EAAM,CAC7C,GAAI,CAACjb,EAAM,YAAa,OAAO,KAC/B,MAAMjG,EAASsmB,GAAUA,EAAO,OAC1B9lB,EAAO,MAAM,QAAQR,CAAM,EAAIA,EAASA,GAAUA,EAAO,KAC/D,GAAI,CAACQ,GAAQA,EAAK,SAAW,EAAG,OAAO,KACvC,MAAM+lB,EAAOvmB,GAAUA,EAAO,YAAcsmB,EAAO,OAAS,EACtDE,EAAOxmB,GAAUA,EAAO,aAAesmB,EAAO,QAAU,EAC9D,GAAIC,GAAQ,GAAKC,GAAQ,EAAG,OAAO,KACnCvgB,EAAM,iBAAmBzF,EAAK,OAC9B,IAAI2L,EAAM,EACV,MAAM4N,EAAQ9T,EAAM,iBACpB,GAAI8T,GAASA,EAAM,QAAU,MAAQA,EAAM,QAAU,OACnD5N,EAAM,KAAK,MAAM,OAAO4N,EAAM,KAAK,CAAC,GAAK,EACnC5N,GAAO,IAAIA,EAAM,GACnBA,GAAO3L,EAAK,SAAQ2L,EAAM3L,EAAK,OAAS,WACnCA,EAAK,OAAS,EAAG,CAC1B,MAAMimB,GAAS1M,GAASA,EAAM,UAAY,GAC1C,IAAI2M,GAAQ,EACZ,UAAWC,MAAMnmB,EAAMkmB,IAASC,GAAG,SAAW,EAAIA,GAAG,SAAW,EAAI,GACpE,GAAI,CAACF,IAAUC,GAAQ,EAAG,CACxB,IAAIzY,GAAIiT,EAAOwF,GACXzY,GAAI,IAAGA,IAAKyY,IAChB,QAAS7tB,EAAI,EAAGA,EAAI2H,EAAK,OAAQ3H,IAAK,CACpC,MAAMuC,GAAIoF,EAAK3H,CAAC,EAAE,SAAW,EAAI2H,EAAK3H,CAAC,EAAE,SAAW,mBACpD,GAAIoV,GAAI7S,GAAG,CACT+Q,EAAMtT,EACN,KACF,CACAoV,IAAK7S,GACL+Q,EAAMtT,CACR,CACF,CACF,CACA,MAAM7C,EAAIwK,EAAK2L,CAAG,EACZxL,EAAK3K,EAAE,KAAOA,EAAE,KAAK,CAAC,EAAIA,EAAE,MAC5B4K,GAAK5K,EAAE,KAAOA,EAAE,KAAK,CAAC,EAAI,EAC1B6K,EAAK7K,EAAE,KAAOA,EAAE,KAAK,CAAC,EAAI,EAC1B8K,GAAK9K,EAAE,KAAOA,EAAE,KAAK,CAAC,EAAIA,EAAE,OAClC,MAAO,CAACA,EAAE,EAAIuwB,EAAMvwB,EAAE,EAAIwwB,EAAM7lB,EAAK4lB,EAAM3lB,GAAK4lB,EAAM3lB,EAAK0lB,EAAMzlB,GAAK0lB,CAAI,CAC5E,CACA,SAASI,GAAiB3gB,EAAOyC,EAAK,CACpC,MAAMvQ,EAAI8N,EAAM,KAAK,CAAC,EAAIA,EAAM,MAAM,CAAC,EACjC7N,EAAI6N,EAAM,KAAK,CAAC,EAAIA,EAAM,MAAM,CAAC,EACvC,IAAIhM,EAAIgN,GAAa,EACrB,GAAIyB,GAAOA,EAAI,YAAa,CAC1B,MAAMjM,EAAIgM,GAAiBxC,EAAOyC,CAAG,EACrCzO,EAAIyN,GAAczN,EAAGwC,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,EACrC,MAAMuN,EAAK/D,EAAM,OAAO,CAAC,GAAK,EACxBiE,EAAKjE,EAAM,OAAO,CAAC,GAAK,EAC1BiE,IAAIjQ,EAAIiO,GAAYjO,EAAGiQ,CAAE,GACzBF,IAAI/P,EAAIgO,GAAYhO,EAAG+P,CAAE,GAC7B/P,EAAI8N,GAAY9N,EAAG,CAACgM,EAAM,OAAO,CAAC,CAAC,CACrC,KAAO,CAEL,GADAhM,EAAIyN,GAAczN,EAAGgM,EAAM,OAAO,CAAC,EAAGyC,EAAI,MAAQzC,EAAM,OAAO,CAAC,EAAGA,EAAM,OAAO,CAAC,CAAC,EAC9EA,EAAM,gBAAkBwa,KAAwB,GAAKC,KAAwB,GAAI,CACnF,MAAM5H,EAAKpN,GAAoBzF,EAAM,cAAc,CAAC,CAAC,EAC/C4gB,EAAKnb,GAAoBzF,EAAM,cAAc,CAAC,CAAC,EACrDhM,EAAIyN,GAAczN,EAAG6e,EAAK2H,GAAqBoG,EAAKnG,GAAqB,CAAC,CAC5E,CACAzmB,EAAI8N,GAAY9N,EAAG,CAACgM,EAAM,OAAO,CAAC,CAAC,CACrC,CACA,MAAMjJ,EAAIuY,GAAMtP,EAAM,SAAS,GAAK,CAAC,GAAK,EAAG,EAC7C,OAAIjJ,EAAE,CAAC,IAAM,IAAOA,EAAE,CAAC,IAAM,MAC3B/C,EAAIyN,GAAczN,GAAI,GAAM+C,EAAE,CAAC,GAAK7E,GAAI,GAAM6E,EAAE,CAAC,GAAK5E,EAAG,CAAC,GAErD,CAAE,EAAA6B,EAAG,EAAA9B,EAAG,EAAAC,CAAE,CACnB,CACA,SAAS0uB,GAAehH,EAAMiH,EAAUC,EAAQ/gB,EAAOyC,EAAKue,EAAUroB,EAAOC,EAAQqoB,EAAgB,GAAOC,EAAa,KAAMC,EAAc,KAAM,CACjJ,MAAMlqB,GAAO0pB,GAAiB3gB,EAAOyC,CAAG,EACxC,IAAIzO,EAAIiD,GAAK,EACb,GAAIkqB,EAAa,CACf,MAAM/b,IAAM+b,EAAY,CAAC,EAAIA,EAAY,CAAC,EAAI,GAAKnhB,EAAM,MAAM,CAAC,EAC1DqF,IAAM8b,EAAY,CAAC,EAAIA,EAAY,CAAC,EAAI,GAAKnhB,EAAM,MAAM,CAAC,EAChEhM,EAAIyN,GAAczN,EAAGoR,GAAI,CAACC,GAAI,CAAC,EAC/BrR,EAAI4N,GAAU5N,EAAGmtB,EAAY,CAAC,EAAInhB,EAAM,MAAM,CAAC,EAAGmhB,EAAY,CAAC,EAAInhB,EAAM,MAAM,CAAC,EAAG,CAAC,CACtF,MACEhM,EAAI4N,GAAU5N,EAAGiD,GAAK,EAAGA,GAAK,EAAG,CAAC,EAEpC,MAAMklB,GAAMlb,GAAa+f,EAAUhtB,CAAC,EAC9B8lB,GAAMD,IAASpC,EAAW8H,GAAUD,GAC1CpP,EAAG,WAAW2J,CAAI,EACdoH,GACFvB,GAAY,EACZxP,EAAG,OAAOA,EAAG,KAAK,EACdlQ,EAAM,yBACRkQ,EAAG,kBAAkBA,EAAG,UAAWA,EAAG,oBAAqBA,EAAG,IAAKA,EAAG,mBAAmB,EAEzFA,EAAG,kBAAkBA,EAAG,IAAKA,EAAG,oBAAqBA,EAAG,IAAKA,EAAG,mBAAmB,GAGrFyP,GAAc3f,EAAM,cAAc,EAEhC8Z,GAAI,YAAc,MAAQA,GAAI,YAAc,QAC9C5J,EAAG,UAAU4J,GAAI,UAAW4F,EAAS,EAEnC0B,IACFlR,EAAG,gBAAgBA,EAAG,YAAakR,GAAY,IAAI,GAAG,EACtDlR,EAAG,SAAS,EAAG,EAAGkR,GAAY,EAAGA,GAAY,CAAC,IAE9ClR,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EACvCA,EAAG,SAAS,EAAG,EAAGvX,EAAOC,CAAM,GAEjCsX,EAAG,gBAAgByH,CAAG,EACtByH,GAAW,QAASJ,EAAU,EAC9B9O,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAY4Q,CAAQ,EACtC5Q,EAAG,UAAU4J,GAAI,IAAK,CAAC,EACvB5J,EAAG,iBAAiB4J,GAAI,IAAK,GAAOqC,EAAG,EACnCrC,GAAI,QAAU,MAAQA,GAAI,QAAU,QAAQ5J,EAAG,UAAU4J,GAAI,MAAOiH,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EAClHM,GAAcvH,GAAKoH,CAAU,EAC7BhR,EAAG,WAAWA,EAAG,UAAW,EAAG,CAAC,CAClC,CACA,SAASmR,GAAcvH,EAAKwH,EAAO,CAC7B,CAACxH,GAAOA,EAAI,cAAgB,MAAQA,EAAI,cAAgB,SACxDwH,GACFpR,EAAG,UAAU4J,EAAI,YAAawH,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAChDpR,EAAG,UAAU4J,EAAI,OAAQwH,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAC3CpR,EAAG,UAAU4J,EAAI,OAAQwH,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,IAE3CpR,EAAG,UAAU4J,EAAI,YAAa,EAAG,CAAC,EAClC5J,EAAG,UAAU4J,EAAI,OAAQ,EAAG,CAAC,EAC7B5J,EAAG,UAAU4J,EAAI,OAAQ,EAAG,CAAC,GAEjC,CACA,IAAIyH,GAAe,KACfH,GAAc,KAClB,MAAMtC,GAAgC,IAAI,IACpC0C,GAAsC,IAAI,IAChD,IAAI3C,GAAmB,GACvB,SAAS4C,GAAkBzhB,EAAOyC,EAAK,CACrC,MAAMxL,EAAO0pB,GAAiB3gB,EAAOyC,CAAG,EAClClM,EAAKkM,GAAOA,EAAI,YAAczC,EAAM,MAAM,CAAC,EAAI,CAACA,EAAM,MAAM,CAAC,EAC7D6B,EAAKY,GAAOA,EAAI,aAAczC,EAAM,MAAM,CAAC,GAAK,EACtD,OAAO4B,GAAU3K,EAAK,EAAG+I,EAAM,MAAM,CAAC,EAAGzJ,EAAIsL,CAAE,CACjD,CACA,SAAS6f,GAAiB1hB,EAAOyC,EAAKue,EAAUroB,EAAOC,EAAQqiB,EAAM0G,EAAa,CAC5EP,IACFlR,EAAG,gBAAgBA,EAAG,YAAakR,GAAY,IAAI,GAAG,EACtDlR,EAAG,SAAS,EAAG,EAAGkR,GAAY,EAAGA,GAAY,CAAC,IAE9ClR,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EACvCA,EAAG,SAAS,EAAG,EAAGvX,EAAOC,CAAM,GAEjC,MAAMujB,EAAMlb,GAAa+f,EAAUS,GAAkBzhB,EAAOyC,CAAG,CAAC,EAChE8e,GAAavhB,EAAOmc,EAAK,CAAE,KAAAlB,EAAM,YAAa0G,GAAe,IAAK,CAAC,EACnExC,GAAiB,IACnB,CACA,IAAIyC,GAAc,KAClB,SAASC,EAAgBlpB,EAAOC,EAAQ,CACtC,OAAIgpB,KAAgB,OAClBA,GAAc1R,EAAG,cAAc,EAC/BA,EAAG,YAAYA,EAAG,WAAY0R,EAAW,EACzC1R,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAChEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAChEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,GAErEA,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EACvCA,EAAG,YAAYA,EAAG,WAAY0R,EAAW,EACzC1R,EAAG,eAAeA,EAAG,WAAY,EAAGA,EAAG,KAAM,EAAG,EAAGvX,EAAOC,EAAQ,CAAC,EAC5DgpB,EACT,CACA,SAASE,EAAkB9hB,EAAOmY,EAAK4J,EAAMC,EAAMvf,EAAKue,EAAUroB,EAAOC,EAAQ,CAC/E,MAAMhD,EAAMisB,EAAgBlpB,EAAOC,CAAM,EACnC3B,EAAO0pB,GAAiB3gB,EAAOyC,CAAG,EACxC,IAAIzO,EAAIiD,EAAK,EACbjD,EAAI4N,GAAU5N,EAAGiD,EAAK,EAAGA,EAAK,EAAG,CAAC,EAClC,MAAMklB,GAAMlb,GAAa+f,EAAUhtB,CAAC,EAC9BiuB,EAAU,CACd,CAAC,IAAM,EAAG,EACV,CAAC,GAAK,EAAG,EAET,CAAC,IAAM,GAAI,EACX,CAAC,GAAK,GAAI,CAEZ,EAAE,IAAI,CAAC,CAAChF,GAAIC,EAAE,IAAM,CAClB,MAAM5sB,GAAI0S,GAAmBmZ,GAAKc,GAAIC,GAAI,CAAC,EAC3C,MAAO,CAAC5sB,GAAE,CAAC,EAAI,GAAM,GAAKA,GAAE,CAAC,EAAI,GAAM,EAAG,CAC5C,CAAC,EACK,CAAC4xB,GAAKC,GAAKC,GAAKC,EAAG,EAAIJ,EACvB5C,EAAQ,IAAI,aAAa,CAC7B,EACA2C,EACA,EACAE,GAAI,CAAC,EACLA,GAAI,CAAC,EACL,EACA,EACA,EACAE,GAAI,CAAC,EACLA,GAAI,CAAC,EACLL,EACAC,EACA,EACAG,GAAI,CAAC,EACLA,GAAI,CAAC,EACLJ,EACAC,EACA,EACAG,GAAI,CAAC,EACLA,GAAI,CAAC,EACL,EACA,EACA,EACAC,GAAI,CAAC,EACLA,GAAI,CAAC,EACLL,EACA,EACA,EACAM,GAAI,CAAC,EACLA,GAAI,CAAC,CACP,CAAC,EACDnS,EAAG,WAAWwH,CAAY,EAC1B+H,GAAS,QAAQ,EACjBvP,EAAG,QAAQA,EAAG,KAAK,EACnBA,EAAG,gBAAgBA,EAAG,YAAaiI,EAAI,GAAG,EAC1CjI,EAAG,SAAS,EAAG,EAAG6R,EAAMC,CAAI,EAC5B9R,EAAG,WAAW,EAAG,EAAG,EAAG,CAAC,EACxBA,EAAG,MAAMA,EAAG,gBAAgB,EAC5BA,EAAG,gBAAgByH,CAAG,EACtBzH,EAAG,WAAWA,EAAG,aAAc0H,CAAI,EACnC1H,EAAG,WAAWA,EAAG,aAAcmP,EAAOnP,EAAG,YAAY,EACrDiP,GAAiB,KACjBjP,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAYta,CAAG,EACjCsa,EAAG,UAAUsP,GAAY,IAAK,CAAC,EAC/BtP,EAAG,iBAAiBsP,GAAY,IAAK,GAAOte,GAAU,EAAG6gB,EAAM,EAAGC,EAAM,KAAM,GAAG,CAAC,EAClF9R,EAAG,WAAWA,EAAG,UAAW,EAAG,CAAC,EAChCA,EAAG,OAAOA,EAAG,KAAK,CACpB,CACA,SAASoS,EAA4BtiB,EAAOyC,EAAKue,EAAUroB,EAAOC,EAAQ,CACxE,GAAI,CAACimB,IAAoBuC,GAAa,OACtC,MAAMzU,EAAQ6U,GAAoB,IAAIxhB,EAAM,EAAE,EAC9C,GAAI,CAAC2M,GAASA,EAAM,OAAS,EAAG,OAChC,MAAMrY,EAAK,KAAK,IAAI,EAAG,KAAK,MAAM,KAAK,IAAI0L,EAAM,KAAK,CAAC,GAAKA,EAAM,MAAM,CAAC,GAAK,EAAE,CAAC,CAAC,EAC5EzL,EAAK,KAAK,IAAI,EAAG,KAAK,MAAM,KAAK,IAAIyL,EAAM,KAAK,CAAC,GAAKA,EAAM,MAAM,CAAC,GAAK,EAAE,CAAC,CAAC,EAClF,GAAI1L,GAAM,GAAKC,GAAM,EAAG,OACxB,MAAM4jB,EAAMJ,EAAOzjB,EAAIC,EAAI,MAAQyL,EAAM,EAAE,EAC3C8hB,EAAkB9hB,EAAOmY,EAAK7jB,EAAIC,EAAIkO,EAAKue,EAAUroB,EAAOC,CAAM,EAClE,UAAWkD,KAAK6Q,EAAOmS,GAAc,IAAIhjB,EAAGqc,CAAG,EAC/CqJ,GAAoB,OAAOxhB,EAAM,EAAE,EACnCkQ,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EACvCA,EAAG,SAAS,EAAG,EAAGvX,EAAOC,CAAM,CACjC,CACA,eAAe2pB,EAAYhgB,EAAOqc,EAAUjmB,EAAOC,EAAQqiB,EAAMprB,EAAKgU,EAAQC,EAAQ,CACpFgU,IACA5H,EAAG,SAAS,EAAG,EAAGvX,EAAOC,CAAM,EAC/B,MAAM2G,EAAUgD,EAAM,SAAW,CAAC,EAClC,GAAIhD,EAAQ,eAAiB,GAAO,CAClC,MAAMijB,EAAK/R,GAAelR,EAAQ,YAAc,OAAO,EACvD2Q,EAAG,WAAWsS,EAAG,CAAC,EAAGA,EAAG,CAAC,EAAGA,EAAG,CAAC,EAAG,CAAC,CACtC,MACEtS,EAAG,WAAW,EAAG,EAAG,EAAG,CAAC,EAG1B,GADAA,EAAG,MAAMA,EAAG,gBAAgB,EACxByK,IAAsB,EAAG,CAC3B,MAAM5G,EAAKkH,EAAON,GAClBD,GAAgB3G,EAAK,GAAKA,EAAK,EAAIA,EAAK,KAAK,IAAI,GAAK,KAAK,IAAI,KAAMA,GAAM,EAAI,EAAE,CAAC,CACpF,CACA4G,GAAqBM,EACrB,MAAMxY,EAAM8B,GAAYhC,EAAO5J,EAAOC,EAAQ/I,EAAKgU,EAAQC,CAAM,EACjE,IAAIkd,EAAW/f,GAAawB,EAAI,WAAYA,EAAI,IAAI,EACpD,MAAMggB,GAASljB,EAAQ,eACjBmjB,EAAaD,KAAW,IAAQA,KAAW,MAAQ,OAAOA,IAAW,UAAYA,GAAO,QAAU,GACxGjI,GAAsB,EACtBC,GAAsB,EACtB,MAAMyD,GAAM7D,GAAY,EAKxB,GAJI6D,KACF5D,GAAc,EAAI4D,GAAI,EAAI,EAAI,EAC9B5D,GAAc,EAAI4D,GAAI,EAAI,EAAI,GAE5B,CAACzb,EAAI,aAAexS,EAAK,WAAa,IAASyyB,EAAY,CAC7D,MAAMC,EAAU,CAACpyB,GAAG4M,KAAS,CAC3B,MAAMxD,GAAMpJ,KAAM,MAAQ,OAAOA,IAAM,SAAWA,GAAE,MAAQA,GAC5D,OAAO,OAAOoJ,IAAQ,UAAY,OAAO,SAASA,EAAG,EAAIA,GAAMwD,EACjE,EACMylB,GAASD,EAAQpjB,EAAQ,qBAAsB,CAAC,EAChDsjB,GAAYF,EAAQpjB,EAAQ,6BAA8B,CAAC,EAC3DujB,GAAQH,EAAQpjB,EAAQ,oBAAqB,CAAC,EAC9CwjB,GAAQ9H,EAAOV,GACrBA,GAAmBU,EACnB,MAAM+H,GAAWD,GAAQ,EAAI,EAAI,KAAK,IAAI,CAACA,GAAQ,KAAK,IAAI,IAAMD,EAAK,CAAC,EAAI,EAC5ExI,GAAc,KAAOA,GAAc,EAAIA,GAAc,IAAM0I,GAC3D1I,GAAc,KAAOA,GAAc,EAAIA,GAAc,IAAM0I,GAC3D,MAAMC,GAAWL,GAASC,GACpBK,GAAkB,GAClBC,GAAU7I,GAAc,GAAK2I,GAAWxgB,EAAI,MAC5C2gB,GAAU9I,GAAc,GAAK2I,GAAWxgB,EAAI,MAC5C4gB,GAAO,KAAK,IAAI,KAAK,IAAIF,EAAO,EAAG,KAAK,IAAIC,EAAO,CAAC,EAAIF,GACxDI,GAAOD,GAAO,EAAI,EAAIA,GAAO,EACnC7I,GAAsB,EAAE2I,GAAUG,IAClC7I,GAAsB,EAAE2I,GAAUE,GACpC,CACA,GAAI,CAAC7gB,EAAI,aAAexS,EAAK,QAAU,GAAO,CAC5C,MAAMsE,EAAKymB,GAAkBzb,EAAS0b,CAAI,EAC1C,GAAI1mB,EAAI,CACN,MAAM8B,GAAK9B,EAAG,EAAIkO,EAAI,MAAQ,IACxBrM,GAAK7B,EAAG,EAAIkO,EAAI,MAAQ,KAC1BpM,KAAO,GAAKD,KAAO,KACrB4qB,EAAW/f,GAAa+f,EAAUvf,GAAcT,GAAa,EAAG3K,GAAID,GAAI,CAAC,CAAC,EAE9E,CACF,CACA,GAAI+jB,GAAiB,CACnB,MAAMvkB,EAAM,OAAOukB,IAAoB,WAAaA,GAAgB,EAAIA,GACpEvkB,GAAO,OAAOA,EAAI,WAAc,YAClCA,EAAI,UAAU6M,EAAK,EAAG,CAAC,CAE3B,CACA,GAAI,CAAC8U,EAAmB,CACtBA,EAAoB,GACpB,MAAMgM,GAAMhhB,EAAM,QAAU,CAAC,GAAG,OAAQ1C,IAAMA,GAAE,WAAW,EACrD2jB,GAAaD,EAAG,OAAQ1jB,KAAOA,GAAE,SAAW,CAAC,GAAG,KAAM1P,IAAMA,GAAE,OAAO,GAAK,CAAC0P,GAAE,WAAW,EACxF4jB,GAAWD,GAAW,OAAQ3jB,KAAOA,GAAE,SAAW,CAAC,GAAG,KAAM1P,KAAOA,GAAE,gBAAkB,CAAC,GAAG,OAAS,CAAC,CAAC,EAC5G6lB,EACE,oBAAoBuN,EAAG,MAAM,qBAAqBC,GAAW,MAAM,mBAAmBC,GAAS,MAAM,UAAUD,GAAW,MAAM,EAAG,CAAC,EAAE,IAAK3jB,IAAMA,GAAE,MAAQ,GAAG,EAAE,KAAK,GAAG,CAAC,EAC3K,CACF,CACA,MAAM6jB,EAAuBnhB,EAAOqc,EAAUnc,EAAK9J,EAAOC,EAAQqiB,CAAI,EACtE,MAAM1G,GAA4B,IAAI,IACtC,UAAW1U,KAAK0C,EAAM,OAAY1C,EAAE,KAAO,QAAQ0U,GAAU,IAAI1U,EAAE,GAAIA,CAAC,EACxE,MAAM8jB,GAAgC,IAAI,IAC1C,UAAW3jB,KAASuC,EAAM,OACpB,CAACvC,EAAM,SAAWA,EAAM,WAAa,CAACA,EAAM,aAAe,CAACA,EAAM,aAClE,EAAEA,EAAM,SAAW,CAAC,GAAG,KAAM7P,IAAMA,GAAE,OAAO,IACnC6P,EAAM,UAAY,CAAC,GACvB,SAAW,GACpBsU,GAA0BtU,EAAOuU,GAAWoP,EAAa,EAE3D,GAAIvN,EACF,GAAI,CACFA,EAAkB,CACpB,OAASjmB,EAAG,CACV6lB,EAAK,4BAA8B7lB,GAAKA,EAAE,QAAQ,CACpD,CAEF,MAAMyzB,GAAanhB,EAAI,YAAcF,EAAM,OAAO,MAAM,EAAE,KAAK,CAACxL,EAAGxB,KAAM,CAAO,CAAC,CAACA,GAAE,SAAY,CAAO,CAAC,CAACwB,EAAE,QAAS,EAAIwL,EAAM,OAC9H,UAAWvC,KAAS4jB,GAClB,GAAI,GAAC5jB,EAAM,SAAWA,EAAM,YACxB,EAAAA,EAAM,eAAiB,EAAEA,EAAM,SAAW,CAAC,GAAG,KAAM7P,IAAMA,GAAE,OAAO,IACnE,CAAAwzB,GAAc,IAAI3jB,EAAM,EAAE,EAC9B,IAAIA,EAAM,YAAa,CAErB,GAAI,EADuBA,EAAM,SAAW,CAAC,GAAG,KAAM7P,IAAMA,GAAE,OAAO,EAC7C,CACtBmyB,EAA4BtiB,EAAOyC,EAAKue,EAAUroB,EAAOC,CAAM,EAC/D,QACF,CACA,GAAIoH,EAAM,YAAa,EAChBA,EAAM,UAAY,CAAC,GAAG,OAAS,GAClC,MAAM6jB,GAAqB7jB,EAAOuC,EAAOqc,EAAUnc,EAAKue,EAAUroB,EAAOC,EAAQqiB,CAAI,EAEvF,QACF,CACF,CACA,GAAIjb,EAAM,SAAU,CAClB,GAAIqW,EACF,GAAI,CACF,MAAMA,EAAsBrW,EAAM,GAAIyC,EAAKue,EAAUroB,EAAOC,CAAM,CACpE,OAASzI,GAAG,CACV6lB,EAAK,2BAA6B7lB,IAAKA,GAAE,QAAQ,CACnD,CAEF,QACF,CACIyvB,GAAiB5f,EAAOyC,CAAG,GAC/B,MAAMqhB,EAAY9jB,EAAO4e,EAAUnc,EAAKue,EAAUroB,EAAOC,EAAQqiB,CAAI,EAEvE,GAAIF,GAAYxb,CAAO,GAAK0b,EAAOL,GAAc,CAC/C,MAAMze,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG8e,EAAOL,EAAY,CAAC,EAChDmJ,GAAQ,EAAI5nB,EAAIA,GAAK,EAAI,EAAIA,GACnC,GAAI4nB,GAAQ,KAAM,CAChB,MAAMvB,GAAK/R,GAAelR,EAAQ,YAAc,OAAO,EACvD2Q,EAAG,WAAWsH,CAAQ,EACtBtH,EAAG,OAAOA,EAAG,KAAK,EAClBA,EAAG,kBAAkBA,EAAG,UAAWA,EAAG,oBAAqBA,EAAG,IAAKA,EAAG,mBAAmB,EACzFA,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EACvCA,EAAG,SAAS,EAAG,EAAGvX,EAAOC,CAAM,EAC/BsX,EAAG,gBAAgByH,CAAG,EACtByH,GAAW,OAAQL,EAAS,EAC5B7O,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAY+J,EAAQ,EACtC/J,EAAG,UAAUoP,GAAQ,IAAK,CAAC,EAC3BpP,EAAG,UAAUoP,GAAQ,MAAOkD,GAAG,CAAC,EAAGA,GAAG,CAAC,EAAGA,GAAG,CAAC,EAAGuB,EAAK,EACtD1C,GAAc/B,GAAS,IAAI,EACvBA,GAAQ,YAAc,MAAQA,GAAQ,YAAc,QACtDpP,EAAG,UAAUoP,GAAQ,UAAW,CAAC,EAEnCpP,EAAG,iBAAiBoP,GAAQ,IAAK,GAAOvD,EAAQ,EAChD7L,EAAG,WAAWA,EAAG,UAAW,EAAG,CAAC,CAClC,CACF,CACAA,EAAG,gBAAgB,IAAI,EACvBkI,EAAgB,CAClB,CACA,eAAesL,EAAuBnhB,EAAOqc,EAAUnc,EAAK9J,EAAOC,EAAQqiB,EAAM,CAC/E6D,GAAc,MAAM,EACpB0C,GAAoB,MAAM,EAC1B,MAAMwC,EAAyB,IAAI,IAC7BC,EAA6B,IAAI,IACvC,IAAIC,EAAY,KAChB,MAAMC,EAAYroB,GAAM,CACtB,GAAI,OAAOA,GAAM,SAAU,OAC3B,MAAM9H,GAAI,wCAAwC,KAAK8H,CAAC,EACxD,GAAI,CAAC9H,GAAG,OACR,MAAMowB,EAAM,OAAOpwB,GAAE,CAAC,CAAC,EACnBkwB,IAAc,MAAQE,IAAQF,GAAWD,EAAW,IAAIG,CAAG,EAC/D,IAAIC,GAAML,EAAO,IAAII,CAAG,EACnBC,KACHA,GAAsB,IAAI,IAC1BL,EAAO,IAAII,EAAKC,EAAG,GAErBA,GAAI,IAAIvoB,CAAC,CACX,EACA,UAAWkE,KAASuC,EAAM,QAAU,CAAC,EAAG,CACtC2hB,EAAYlkB,EAAM,GAClB,UAAWskB,MAAQtkB,EAAM,SAAW,CAAC,EACnC,GAAKskB,GAAK,QACV,WAAWh0B,KAAKg0B,GAAK,QAAU,CAAC,EAC9B,UAAWtc,MAAK1X,EAAE,UAAY,CAAC,EAAG6zB,EAASnc,EAAC,EAE9C,UAAWtH,KAAM4jB,GAAK,gBAAkB,CAAC,EAAG,CAC1C,UAAW/uB,MAAKmL,EAAG,OAAS,CAAC,EAAGyjB,EAAS5uB,IAAKA,GAAE,IAAI,EACpD,UAAWyS,MAAKtH,EAAG,UAAY,CAAC,EAAGyjB,EAASnc,EAAC,CAC/C,EAEJ,CACA,GAAIgc,EAAO,OAAS,EACpB,UAAW,CAACI,EAAKzX,EAAK,IAAKqX,EAAQ,CACjC,MAAMpuB,GAAO2M,EAAM,QAAU,CAAC,GAAG,KAAM1C,IAAMA,GAAE,KAAOukB,CAAG,EAEzD,GADI,CAACxuB,GAAOA,EAAI,UAAYA,EAAI,eAC5BquB,EAAW,IAAIG,CAAG,EAAG,SACzB,MAAMG,GAAW,OAAO3uB,EAAI,OAAU,SAAWA,EAAI,MAAQ,GAE7D,GADuBA,EAAI,aAAe,CAACA,EAAI,aAAe2uB,GAAS,QAAQ,0BAA0B,IAAM,GAAK,EAAE3uB,EAAI,SAAW,CAAC,GAAG,KAAMzF,IAAMA,GAAE,OAAO,EAC1I,CAClBqxB,GAAoB,IAAI4C,EAAKzX,EAAK,EAClC,QACF,CACA,MAAMrY,GAAK,KAAK,IAAI,EAAG,KAAK,MAAM,KAAK,IAAIsB,EAAI,KAAK,CAAC,GAAKA,EAAI,MAAM,CAAC,GAAK,EAAE,CAAC,CAAC,EACxErB,GAAK,KAAK,IAAI,EAAG,KAAK,MAAM,KAAK,IAAIqB,EAAI,KAAK,CAAC,GAAKA,EAAI,MAAM,CAAC,GAAK,EAAE,CAAC,CAAC,EAC9E,GAAItB,IAAM,GAAKC,IAAM,EAAG,SACxB,MAAM4jB,EAAMJ,EAAOzjB,GAAIC,GAAI,MAAQ6vB,CAAG,EACtClU,EAAG,gBAAgBA,EAAG,YAAaiI,EAAI,GAAG,EAC1CjI,EAAG,SAAS,EAAG,EAAG5b,GAAIC,EAAE,EACxB2b,EAAG,WAAW,EAAG,EAAG,EAAG,CAAC,EACxBA,EAAG,MAAMA,EAAG,gBAAgB,EAC5B,MAAMsU,GAAS,CACb,KAAM/hB,EAAI,KACV,WAAYvB,GAAU,EAAG5M,GAAI,EAAGC,GAAI,KAAM,GAAG,EAC7C,IAAKkO,EAAI,IACT,MAAOnO,GACP,MAAOC,GACP,KAAM,EACN,KAAM,EACN,MAAOD,GACP,MAAOC,EACT,EACMkwB,GAAcrD,GACdsD,GAAc9uB,EAAI,OAClB+uB,GAAa/uB,EAAI,MACjBgvB,GAAchvB,EAAI,OAClBivB,GAAejvB,EAAI,QACzBwrB,GAAc,CAAE,IAAAjJ,EAAK,EAAG7jB,GAAI,EAAGC,EAAG,EAClCqB,EAAI,OAAS,CAACtB,GAAK,EAAGkwB,GAAO,MAAQjwB,GAAK,EAAGmwB,GAAY,CAAC,CAAC,EAC3D9uB,EAAI,MAAQ,CAAC,KAAK,KAAK+uB,GAAW,CAAC,CAAC,GAAK,EAAG,KAAK,KAAKA,GAAW,CAAC,CAAC,GAAK,EAAGA,GAAW,CAAC,CAAC,EACxF/uB,EAAI,OAAS,CAAC,EAAG,EAAG,CAAC,EACrBA,EAAI,QAAU,GACd,GAAI,CACF,MAAMkuB,EAAYluB,EAAKgpB,EAAU4F,GAAQA,GAAO,WAAYlwB,GAAIC,GAAI0mB,CAAI,EACxE,UAAWnf,MAAK6Q,GAAOmS,GAAc,IAAIhjB,GAAGqc,CAAG,CACjD,OAAShoB,GAAG,CACV6lB,EAAK,0BAAgBoO,CAAG,8BAAUj0B,IAAKA,GAAE,OAAO,EAAE,CACpD,QAAE,CACAixB,GAAcqD,GACd7uB,EAAI,OAAS8uB,GACb9uB,EAAI,MAAQ+uB,GACZ/uB,EAAI,OAASgvB,GACbhvB,EAAI,QAAUivB,EAChB,CACF,CACA3U,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EACvCA,EAAG,SAAS,EAAG,EAAGvX,EAAOC,CAAM,EACjC,CACA,eAAeirB,GAAqBiB,EAAWviB,EAAOqc,EAAUnc,EAAKue,EAAUroB,EAAOC,EAAQqiB,EAAM,CAClG,MAAM5b,EAAK,KAAK,IAAI,EAAG,KAAK,MAAM,KAAK,IAAIylB,EAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EACxDxlB,EAAK,KAAK,IAAI,EAAG,KAAK,MAAM,KAAK,IAAIwlB,EAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAE9D,IADaA,EAAU,UAAY,CAAC,GAC3B,SAAW,EAAG,OACvB,MAAMpnB,GAAuB,IAAI,IACjC,UAAWmC,MAAK0C,EAAM,OAAY1C,GAAE,KAAO,QAAQnC,GAAK,IAAImC,GAAE,GAAIA,EAAC,EACnE,MAAMklB,EAAQzQ,GAA0BwQ,EAAWpnB,EAAI,EACjDsnB,GAAWziB,EAAM,OAAO,OAAQ1C,IAAMklB,EAAM,IAAIllB,GAAE,EAAE,GAAKA,GAAE,OAAO,EACxE,GAAImlB,GAAS,SAAW,EAAG,OAC3B,MAAMC,GAAWlN,EAAO1Y,EAAIC,EAAI,OAAO,EACvC4Q,EAAG,gBAAgBA,EAAG,YAAa+U,GAAS,GAAG,EAC/C/U,EAAG,SAAS,EAAG,EAAG7Q,EAAIC,CAAE,EACxB4Q,EAAG,WAAW,EAAG,EAAG,EAAG,CAAC,EACxBA,EAAG,MAAMA,EAAG,gBAAgB,EAC5B,MAAMgV,GAAW,CACf,KAAMziB,EAAI,KACV,WAAYvB,GAAU,EAAG7B,EAAI,EAAGC,EAAI,KAAM,GAAG,EAC7C,IAAKmD,EAAI,IACT,MAAOpD,EACP,MAAOC,EACP,KAAM,EACN,KAAM,EACN,MAAOD,EACP,MAAOC,CACT,EACM6lB,GAAgBD,GAAS,WACzBE,EAAMN,EAAU,MAAM,CAAC,GAAK,EAC5BO,GAAMP,EAAU,MAAM,CAAC,GAAK,EAC5BQ,GAAOR,EAAU,OAAO,CAAC,GAAK,EAC9BzmB,GAAM,KAAK,IAAI,CAACinB,EAAI,EACpBhnB,GAAM,KAAK,IAAI,CAACgnB,EAAI,EAC1BlE,GAAc,CAAE,IAAK6D,GAAU,EAAG5lB,EAAI,EAAGC,CAAG,EAC5C,GAAI,CACF,UAAWkV,MAASwQ,GAAU,CAE5B,GADIxQ,GAAM,eAAiBA,GAAM,UAC7BA,GAAM,cAAgBA,GAAM,UAAY,CAAC,GAAG,OAAS,EAAG,SAC5D,MAAMkQ,GAAclQ,GAAM,OACpBmQ,GAAanQ,GAAM,MACnBoQ,GAAcpQ,GAAM,OACpB+Q,GAAKb,GAAY,CAAC,EAAII,EAAU,OAAO,CAAC,EACxCU,GAAKd,GAAY,CAAC,EAAII,EAAU,OAAO,CAAC,EACxCW,IAAMF,GAAKlnB,GAAMmnB,GAAKlnB,IAAO8mB,EAC7BM,IAAMH,GAAKjnB,GAAMknB,GAAKnnB,IAAOgnB,GACnC7Q,GAAM,OAAS,CAACnV,EAAK,EAAIomB,GAAInmB,EAAK,EAAIomB,GAAIhB,GAAY,CAAC,CAAC,EACxDlQ,GAAM,MAAQ,CAACmQ,GAAW,CAAC,EAAIS,EAAKT,GAAW,CAAC,EAAIU,GAAKV,GAAW,CAAC,CAAC,EACtEnQ,GAAM,OAAS,CAACoQ,GAAY,CAAC,EAAGA,GAAY,CAAC,EAAGA,GAAY,CAAC,EAAIU,EAAI,EACrE,GAAI,CACF,MAAMxB,EAAYtP,GAAOoK,EAAUsG,GAAUC,GAAe9lB,EAAIC,EAAI2b,CAAI,CAC1E,QAAE,CACAzG,GAAM,OAASkQ,GACflQ,GAAM,MAAQmQ,GACdnQ,GAAM,OAASoQ,EACjB,CACF,CACF,QAAE,CACAxD,GAAc,IAChB,CACA0D,EAAU,SAAWG,GAAS,IAC9BH,EAAU,OAASzlB,EACnBylB,EAAU,OAASxlB,EACnB,GAAI,CACF,MAAMwkB,EAAYgB,EAAWlG,EAAUnc,EAAKue,EAAUroB,EAAOC,EAAQqiB,CAAI,CAC3E,QAAE,CACA6J,EAAU,SAAW,IACvB,CACF,CACA,eAAehB,EAAY9jB,EAAO4e,EAAUnc,EAAKue,EAAUroB,EAAOC,EAAQqiB,EAAM,CAC9E,MAAM0K,EAAW,CAAC,EAAE3lB,EAAM,QAAUuhB,IAC9BlB,EAAS,CAACrgB,EAAM,OAASA,EAAM,YAAc4e,EAAS,IAAI5e,EAAM,WAAW,EAAI,KACrF,GAAIqgB,GAAUA,EAAO,MAAO,CAC1B,MAAM9vB,GAAI8vB,EAAO,MACjB,GAAI9vB,GAAE,YAAc,GAAKA,GAAE,cAAgB8vB,EAAO,aAAc,CAC9DnQ,EAAG,YAAYA,EAAG,WAAYmQ,EAAO,KAAK,EAC1C,GAAI,CACF,IAAI/a,GAAK/U,GAAE,YAAc8vB,EAAO,MAC5B9a,GAAKhV,GAAE,aAAe8vB,EAAO,OACjC,MAAMuF,GAAU,KACVC,GAAS3V,EAAG,aAAaA,EAAG,gBAAgB,EAC5C4V,GAAQD,GAAS,GAAKA,GAAS,KAAO,KAAK,IAAID,GAASC,EAAM,EAAID,GACxE,IAAIzhB,GAAQ,EACR,KAAK,IAAImB,GAAIC,EAAE,EAAIugB,KAAO3hB,GAAQ2hB,GAAQ,KAAK,IAAIxgB,GAAIC,EAAE,GAC7D,MAAMwgB,GAAK,KAAK,IAAI,EAAG,KAAK,MAAMzgB,GAAKnB,EAAK,CAAC,EACvC6hB,GAAK,KAAK,IAAI,EAAG,KAAK,MAAMzgB,GAAKpB,EAAK,CAAC,EAC7C,IAAIvO,GAAMrF,GACV,GAAI0lB,GAAe8P,GAAK,GAAKC,GAAK,EAAG,EAC/B/P,EAAY,QAAU8P,IAAM9P,EAAY,SAAW+P,MACrD/P,EAAY,MAAQ8P,GACpB9P,EAAY,OAAS+P,IAEvB,MAAMC,GAAOhQ,EAAY,WAAW,IAAI,EACpCgQ,KACFA,GAAK,UAAU,EAAG,EAAGF,GAAIC,EAAE,EAC3BC,GAAK,UAAU11B,GAAG,EAAG,EAAGw1B,GAAIC,EAAE,EAC9BpwB,GAAMqgB,EAEV,CAEA,GADA/F,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,KAAMA,EAAG,KAAMA,EAAG,cAAeta,EAAG,EACnEsa,EAAG,SAAS,IAAMA,EAAG,UAAY+F,EACnC,GAAI,CAEF,MAAMtX,GADQsX,EAAY,WAAW,IAAI,EACxB,aAAa,EAAG,EAAGA,EAAY,MAAOA,EAAY,MAAM,EAEzE,IADA/F,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,KAAM+F,EAAY,MAAOA,EAAY,OAAQ,EAAG/F,EAAG,KAAMA,EAAG,cAAe,IAAI,WAAWvR,GAAG,KAAK,MAAM,CAAC,EACrIuR,EAAG,SAAS,IAAMA,EAAG,UAAU,CAExC,MAAY,CACZ,CAEFmQ,EAAO,MAAQ0F,GACf1F,EAAO,OAAS2F,GAChB3F,EAAO,aAAe9vB,GAAE,YACnB2lB,IACHA,EAAsB,GACtBF,EAAK,mBAAqB+P,GAAK,IAAMC,GAAK,SAAW1gB,GAAK,IAAMC,GAAK,GAAG,EAE5E,OAASpV,GAAG,CACL+lB,IACHA,EAAsB,GACtBF,EAAK,uBAAyB7lB,IAAKA,GAAE,SAAWA,GAAE,GAEpD,QAAQ,KAAK,yDAAuBA,IAAKA,GAAE,QAAS,cAAeI,GAAE,WAAY,OAAQA,GAAE,WAAW,CACxG,CACF,CACF,CACA,MAAM21B,EAASlmB,EAAM,SAAWA,EAAM,SAAWqgB,GAAUA,EAAO,MAAQA,EAAO,MAAQrgB,EAAM,MAAQia,GAAWC,GAC5GiM,GAAkB,CAAC,CAACnmB,EAAM,aAAe,CAAC,CAACA,EAAM,eAAiBoU,GAA2BpU,CAAK,IAAM,CAACA,EAAM,UAAY,CAACqgB,GAAU,CAACsF,EAC7I,IAAIS,GACAC,EAWJ,GAVIrmB,EAAM,UACRomB,GAAWpmB,EAAM,QAAUA,EAAM,KAAK,CAAC,EACvCqmB,EAAWrmB,EAAM,QAAUA,EAAM,KAAK,CAAC,GAC9B2lB,GAAY,CAACtF,GACtB+F,GAAWpmB,EAAM,KAAK,CAAC,EACvBqmB,EAAWrmB,EAAM,KAAK,CAAC,IAEvBomB,GAAW/F,EAAO,MAClBgG,EAAWhG,EAAO,QAEhB,CAACsF,GAAYtF,GAAUrgB,EAAM,YAAa,CAC5C,MAAMsmB,GAAKjG,EAAO,OACZkG,GAAQ,MAAM,QAAQD,EAAE,EAAIA,GAAKA,IAAMA,GAAG,KAC5CC,IAASA,GAAM,SACjBH,GAAWG,GAAM,CAAC,EAAE,OAASH,GAC7BC,EAAWE,GAAM,CAAC,EAAE,QAAUF,EAElC,CACA,MAAMn0B,GAAI,KAAK,IAAI,EAAG,KAAK,MAAMk0B,EAAQ,CAAC,EACpCj0B,GAAI,KAAK,IAAI,EAAG,KAAK,MAAMk0B,CAAQ,CAAC,EACpCtF,GAAS,CAAC/gB,EAAM,MAAM,CAAC,EAAIA,EAAM,WAAYA,EAAM,MAAM,CAAC,EAAIA,EAAM,WAAYA,EAAM,MAAM,CAAC,EAAIA,EAAM,WAAYA,EAAM,KAAK,EAC9HwmB,IAAWxmB,EAAM,SAAW,CAAC,GAAG,OAAQ7P,IAAMA,GAAE,OAAO,EAC7D,IAAI4xB,EAAO7vB,GACP8vB,GAAO7vB,GACX,GAAIgkB,EAAe,GAAK1T,EAAI,MAAQ,GAAKA,EAAI,MAAQ,EAAG,CACtD,MAAMgkB,GAAO,KAAK,IAAI,KAAK,IAAIzmB,EAAM,KAAK,CAAC,EAAIA,EAAM,MAAM,CAAC,CAAC,EAAGyC,EAAI,KAAK,EACnEikB,GAAO,KAAK,IAAI,KAAK,IAAI1mB,EAAM,KAAK,CAAC,EAAIA,EAAM,MAAM,CAAC,CAAC,EAAGyC,EAAI,KAAK,EACnEkkB,GAAUF,IAAQ9tB,EAAQ8J,EAAI,OAC9BmkB,GAAUF,IAAQ9tB,EAAS6J,EAAI,OACrC,GAAIkkB,GAAU,GAAKC,GAAU,EAAG,CAC9B,MAAMC,GAAO,KAAK,IAAI,GAAI,KAAK,MAAMF,GAAUxQ,CAAY,CAAC,EACtD2Q,GAAO,KAAK,IAAI,GAAI,KAAK,MAAMF,GAAUzQ,CAAY,CAAC,EACxD0Q,GAAO30B,KAAG6vB,EAAO8E,IACjBC,GAAO30B,KAAG6vB,GAAO8E,GACvB,CACF,CACA,GAAIN,GAAQ,SAAW,EAAG,CACpBb,EAAUjE,GAAiB1hB,EAAOyC,EAAKue,EAAUroB,EAAOC,EAAQqiB,CAAI,EAEtE4F,GACErJ,EACA0O,EACAnF,GACA/gB,EACAyC,EACAue,EACAroB,EACAC,EACA,GACAwnB,GAAiBpgB,EAAOqgB,EAAQpF,CAAI,CACtC,EAEF,MACF,CACA,MAAM8L,GAAOhP,EAAOgK,EAAMC,GAAM,MAAM,EAChCgF,GAAOjP,EAAOgK,EAAMC,GAAM,MAAM,EAChCiF,GAAa/lB,GAAU,EAAG6gB,EAAM,EAAGC,GAAM,KAAM,GAAG,EACxD,GAAI2D,EACFzV,EAAG,WAAWsH,CAAQ,EACtBiI,GAAS,QAAQ,EACjBvP,EAAG,gBAAgBA,EAAG,YAAa6W,GAAK,GAAG,EAC3C7W,EAAG,SAAS,EAAG,EAAG6R,EAAMC,EAAI,EAC5B9R,EAAG,WAAW,EAAG,EAAG,EAAG,CAAC,EACxBA,EAAG,MAAMA,EAAG,gBAAgB,EAC5BA,EAAG,gBAAgByH,CAAG,EACtBwH,GAAiB,KACjBC,GAAW,QAAU2C,EAAO,IAAMC,GAAM9C,GAAU6C,EAAMC,EAAI,CAAC,EAC7D9R,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAYgW,CAAM,EACpChW,EAAG,UAAUoP,GAAQ,IAAK,CAAC,EAC3BpP,EAAG,UAAUoP,GAAQ,MAAO,EAAG,EAAG,EAAG,CAAC,EACtC+B,GAAc/B,GAAS,IAAI,EACvBA,GAAQ,YAAc,MAAQA,GAAQ,YAAc,QACtDpP,EAAG,UAAUoP,GAAQ,UAAW,CAAC,EAEnCpP,EAAG,iBAAiBoP,GAAQ,IAAK,GAAO2H,EAAU,EAClD/W,EAAG,WAAWA,EAAG,UAAW,EAAG,CAAC,UACvBiW,EACTrE,EAAkB9hB,EAAO+mB,GAAMhF,EAAMC,GAAMvf,EAAKue,EAAUroB,EAAOC,CAAM,MAClE,CACLsX,EAAG,WAAWsH,CAAQ,EACtBiI,GAAS,QAAQ,EACjBvP,EAAG,gBAAgBA,EAAG,YAAa6W,GAAK,GAAG,EAC3C7W,EAAG,SAAS,EAAG,EAAG6R,EAAMC,EAAI,EAC5B9R,EAAG,WAAW,EAAG,EAAG,EAAG,CAAC,EACxBA,EAAG,MAAMA,EAAG,gBAAgB,EAC5BA,EAAG,gBAAgByH,CAAG,EACtByH,GAAW,QAAU2C,EAAO,IAAMC,GAAM9C,GAAU6C,EAAMC,EAAI,CAAC,EAC7D9R,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAYgW,CAAM,EACpChW,EAAG,UAAUoP,GAAQ,IAAK,CAAC,EAC3B,MAAM4H,GAAYV,GAAQ,KAAMr2B,IAAMA,IAAKA,GAAE,aAAa,EAAI,CAAC,EAAG,EAAG,EAAG4wB,GAAO,CAAC,CAAC,EAAIA,GACrF7Q,EAAG,UAAUoP,GAAQ,MAAO4H,GAAU,CAAC,EAAGA,GAAU,CAAC,EAAGA,GAAU,CAAC,EAAGA,GAAU,CAAC,CAAC,EAClF7F,GAAc/B,GAASc,GAAiBpgB,EAAOqgB,EAAQpF,CAAI,CAAC,EACxDqE,GAAQ,YAAc,MAAQA,GAAQ,YAAc,QACtDpP,EAAG,UAAUoP,GAAQ,UAAW,CAAC,EAEnCpP,EAAG,iBAAiBoP,GAAQ,IAAK,GAAO2H,EAAU,EAClD/W,EAAG,WAAWA,EAAG,UAAW,EAAG,CAAC,CAClC,CACA,IAAIiX,GAAWJ,GACXK,GAAUJ,GACd,MAAMrI,GAA6B,IAAI,IACvC,IAAI0I,GAAc,GACdC,GAAWP,GACf,MAAMQ,GAAa,CAAC,EACdC,GAAgC,IAAI,IAC1C,UAAWlD,MAAQkC,GAAS,CAC1B,UAAWz2B,MAAKu0B,GAAK,MAAQ,CAAC,EAC5B,GAAI,CAAC3F,GAAW,IAAI5uB,GAAE,IAAI,EAAG,CAC3B,KAAM,CAAC03B,GAAIC,EAAE,EAAI7S,GAAc9kB,GAAGgyB,EAAMC,EAAI,EACtChK,GAAMjoB,GAAE,OAASiQ,EAAM,GAAK,IAAMjQ,GAAE,KAAOA,GAAE,KACnD4uB,GAAW,IAAI5uB,GAAE,KAAMgoB,EAAO0P,GAAIC,GAAI1P,EAAG,CAAC,CAC5C,CAEF,MAAM2P,GAASrD,GAAK,gBAAkB,CAAC,EACvC,QAASxlB,GAAK,EAAGA,GAAK6oB,GAAO,OAAQ7oB,KACnCyoB,GAAW,KAAK,CAAE,IAAKjD,GAAM,GAAIqD,GAAO7oB,EAAE,EAAG,GAAIwlB,GAAK,QAAUA,GAAK,OAAOxlB,EAAE,CAAE,CAAC,CAErF,CACA,MAAM8oB,GAAgB,CAAC,EACvB,QAASC,GAAK,EAAGA,GAAKN,GAAW,OAAQM,KAAM,CAC7C,KAAM,CAAE,IAAKvD,GAAM,GAAA5jB,GAAI,GAAAonB,EAAG,EAAIP,GAAWM,EAAE,EAC3C,GAAIL,GAAc,IAAIlD,EAAI,EAAG,SAC7B,MAAMnd,GAAS,CAAE,GAAGzG,GAAG,QAAU,CAAC,EAAG,GAAGonB,IAAMA,GAAG,QAAU,CAAC,CAAE,EACxDC,GAAMrnB,GAAG,UAAY,CAAC,EACtBsnB,GAAMF,IAAMA,GAAG,UAAY,CAAC,EAC5BG,GAAY,CAAC,EACnB,QAASr1B,GAAI,EAAGA,GAAI,KAAK,IAAIm1B,GAAI,OAAQC,GAAI,MAAM,EAAGp1B,KAChDo1B,GAAIp1B,EAAC,IAAM,QAAUo1B,GAAIp1B,EAAC,IAAM,KAAMq1B,GAAUr1B,EAAC,EAAIo1B,GAAIp1B,EAAC,EACzDq1B,GAAUr1B,EAAC,EAAIm1B,GAAIn1B,EAAC,IAAM,OAASm1B,GAAIn1B,EAAC,EAAI,KAEnD,GAAI8N,GAAG,YAAa,CAClB,MAAMwnB,GAAWxnB,GAAG,OAASie,GAAW,IAAIje,GAAG,MAAM,EAAI,KACnDynB,GAAWznB,GAAG,OAASie,GAAW,IAAIje,GAAG,MAAM,EAAI,KACrDwnB,IAAYC,KACdjY,EAAG,WAAWuH,CAAQ,EACtBgI,GAAS,QAAQ,EACjBvP,EAAG,gBAAgBA,EAAG,YAAaiY,GAAS,GAAG,EAC/CjY,EAAG,SAAS,EAAG,EAAGiY,GAAS,MAAOA,GAAS,MAAM,EACjDjY,EAAG,gBAAgByH,CAAG,EACtByH,GAAW,OAAQL,EAAS,EAC5B7O,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAYgY,GAAS,GAAG,EAC1ChY,EAAG,UAAUqP,GAAQ,IAAK,CAAC,EACvBA,GAAQ,YAAc,MAAQA,GAAQ,YAAc,QACtDrP,EAAG,UAAUqP,GAAQ,UAAW,CAAC,EAEnCrP,EAAG,iBAAiBqP,GAAQ,IAAK,GAAOxD,EAAQ,EAChD7L,EAAG,WAAWA,EAAG,UAAW,EAAG,CAAC,EAChCA,EAAG,gBAAgBA,EAAG,YAAa,IAAI,GAEzC,QACF,CACA,IAAIkY,GACJ,GAAI,CACFA,GAAY,MAAMlP,GAAiBxY,GAAG,OAAQyG,GAAQ8gB,EAAS,CACjE,OAAS93B,GAAG,CACV,QAAQ,KAAK,gFAA+BuQ,GAAG,OAAQvQ,IAAKA,GAAE,SAAWA,EAAC,EAC1Eq3B,GAAc,IAAIlD,EAAI,EACtB,QACF,CACA,MAAMzK,GAAOuO,GAAU,KACjBtO,GAAMsO,GAAU,IAClBA,GAAU,UAAUR,GAAc,KAAKQ,GAAU,QAAQ,EAC7D,IAAIC,GACAC,GACA5nB,GAAG,QACA2mB,KACHC,GAAWH,GACXE,GAAc,IAEhBgB,GAAS1J,GAAW,IAAIje,GAAG,MAAM,GAAKymB,GACtCmB,GAAYhB,KAEZD,GAAc,GACdgB,GAASjB,GACTkB,GAAYnB,IAEdjX,EAAG,WAAW2J,EAAI,EAClB4F,GAAS/e,GAAG,UAAY,QAAQ,EAChCwP,EAAG,gBAAgBA,EAAG,YAAamY,GAAO,GAAG,EAC7CnY,EAAG,SAAS,EAAG,EAAGmY,GAAO,MAAOA,GAAO,MAAM,EAC7CnY,EAAG,gBAAgByH,CAAG,EACtByH,GAAW,OAAQL,EAAS,EAC5B,MAAMwJ,GAAW7nB,GAAG,UAAY,CAAC,EAC3BmlB,GAAS,KAAK,IAAI0C,GAAS,OAAQ,CAAC,EACpCjM,GAA8B,IAAI,IAClCkM,GAA4B,IAAI,IACtC,QAASC,GAAK,EAAGA,GAAK5C,GAAQ4C,KAAM,CAClC,IAAI31B,GAAO21B,GAAKF,GAAS,OAASA,GAASE,EAAE,EAAI,KAC7CX,IAAMA,GAAG,UAAYA,GAAG,SAASW,EAAE,IAAM,QAAUX,GAAG,SAASW,EAAE,IAAM,OAAM31B,GAAOg1B,GAAG,SAASW,EAAE,GACtG,UAAWlzB,MAAKmL,GAAG,OAAS,CAAC,EACvBnL,GAAE,QAAUkzB,KAAI31B,GAAOyC,GAAE,MAE/B,IAAIuH,GACJ,GAAI2rB,KAAO,IAAM31B,IAAS,MAA2BA,KAAS,IAC5DgK,GAAQwrB,OACH,CACL,IAAKx1B,IAAS,MAA2BA,KAAS,KAAOs1B,GAAU,gBAAiB,CAClF,MAAMjrB,GAAOirB,GAAU,gBAAgB,IAAIK,EAAE,EACzCtrB,KAAMrK,GAAOqK,GACnB,CACAL,GAAQ2hB,GAAmB3rB,GAAMw1B,GAAW3J,GAAYC,CAAQ,CAClE,CACI9rB,KAAS,aAAYgK,GAAQwrB,IAC7BxrB,KAAU,OAAMA,GAAQ,CAAE,MAAOmd,GAAU,MAAO,EAAG,OAAQ,EAAG,IAAKA,EAAS,GAClF,MAAMjS,GAAIlL,GAAM,IAAMA,GAAQ,CAAE,IAAKA,GAAM,OAASmd,GAAU,MAAOnd,GAAM,OAAS,EAAG,OAAQA,GAAM,QAAU,CAAE,EACjHoT,EAAG,cAAcA,EAAG,SAAWuY,EAAE,EACjCvY,EAAG,YAAYA,EAAG,WAAYlI,GAAE,GAAG,EACnCwgB,GAAU,IAAIC,EAAE,EAChBnM,GAAY,IAAImM,GAAI,CAACzgB,GAAE,MAAOA,GAAE,OAAQA,GAAE,MAAOA,GAAE,MAAM,CAAC,CAC5D,CACAkU,GAAmBpC,GAAK9Z,EAAOib,EAAMxY,EAAI,MAAOA,EAAI,MAAOsZ,GAAUkL,GAAYlL,GAAUO,GAAa2K,GAAYxkB,CAAG,EACvH6a,GACExD,GACAuE,GACEX,GACE,CAAE,GAAGhd,GAAG,WAAa,CAAC,EAAG,GAAGonB,IAAMA,GAAG,sBAAwB,CAAC,CAAE,GAC/D9nB,EAAM,IAAMA,EAAM,MAAQ,KAAO,KAAOU,GAAG,QAAU,KAAO,IAAMmnB,GACnE5M,EACAjb,CACF,GACCA,EAAM,IAAMA,EAAM,MAAQ,KAAO,KAAOU,GAAG,QAAU,KAAO,IAAMmnB,GACnE5M,CACF,EACAmN,GAAU,OACZ,EACA3K,GAAqB3D,EAAG,EACxB5J,EAAG,WAAWA,EAAG,UAAW,EAAG,CAAC,EAC3BxP,GAAG,SACN0mB,GAAUD,GACVA,GAAWkB,GAEf,CACA,GAAIroB,EAAM,aAAe,CAACA,EAAM,UAAY,CAACmmB,GAAkBnmB,EAAM,2BAA6B,OAAQ,CACxG,IAAI0oB,GAAa,GACjB,UAAW9yB,MAAOgyB,GAAe,CAC/B,GAAI,OAAOhyB,IAAQ,SAAU,SAC7B,MAAM5B,GAAI4B,GAAI,MAAM,gCAAgC,EACpD,GAAI5B,IAAK,CAAC,yBAAyB,KAAKA,GAAE,CAAC,CAAC,EAAG,CAC7C00B,GAAa,GACb,KACF,CACF,CACA1oB,EAAM,yBAA2B0oB,GACjC1S,EAAK,cAAchW,EAAM,MAAQ,GAAG,WAAW0oB,GAAa,4CAAqB,wCAAU,EAAE,CAC/F,CACA,GAAI/C,EAAU,CACZjE,GAAiB1hB,EAAOyC,EAAKue,EAAUroB,EAAOC,EAAQqiB,EAAMkM,GAAS,GAAG,EACxE,MACF,CACAtG,GAAepJ,EAAU0P,GAAS,IAAK,CAAC,EAAG,EAAG,EAAG,CAAC,EAAGnnB,EAAOyC,EAAKue,EAAUroB,EAAOC,EAAQ,CAAC,CAACoH,EAAM,aAAe,CAACA,EAAM,UAAY,CAACmmB,EAAgB,KAAM,IAAI,CACjK,CACA,MAAO,CACL,GAAAjW,EACA,OAAQqS,EACR,OAAAxK,EACA,iBAAAmB,GACA,UAAAb,GACA,eAAAtC,EACA,SAAAkE,GAEA,kBAAmB,UAAW,CAC5B5B,GAAU,MAAM,EAChBC,GAAa,MAAM,EACfC,IAAgBA,GAAe,MAAM,CAC3C,EAEA,gBAAiB,SAAShoB,EAAG,CAC3B4lB,EAAe5lB,CACjB,EAIA,oBAAqB,SAASo4B,EAAWC,EAAiB,CACxDxS,EAAoB,OAAOuS,GAAc,WAAaA,EAAY,KAClEtS,EAAwB,OAAOuS,GAAoB,WAAaA,EAAkB,IACpF,EAIA,yBAAAxR,EAEA,yBAA0B,SAASza,EAAS,CAC1C,GAAKA,GACL,UAAWmhB,KAAM7G,EAAiB,OAAO,EACvC,GAAI6G,GAAM,OAAOA,EAAG,qBAAwB,WAC1C,GAAI,CACFA,EAAG,oBAAoBnhB,CAAO,CAChC,MAAQ,CACR,EAGN,EAEA,oBAAqB,UAAW,CAC9B,MAAO,CAAE,GAAGwa,EAAiB,OAAQF,EAAiB,IAAK,CAC7D,EAEA,oBAAqB,SAAS4R,EAAI,CAChChK,GAAmB,CAAC,CAACgK,CACvB,EAEA,eAAgB,UAAW,CACzB,MAAMx0B,EAAM,CAAC,EACPgC,EAAK,IAAI,WAAW,CAAC,EAC3B,SAAW,CAACvD,EAAMqlB,CAAG,IAAK2G,GAAe,CACvC,IAAIlc,EAAS,KACb,GAAI,CACFsN,EAAG,gBAAgBA,EAAG,YAAaiI,EAAI,GAAG,EAC1CjI,EAAG,WAAWiI,EAAI,GAAK,EAAGA,EAAI,GAAK,EAAG,EAAG,EAAGjI,EAAG,KAAMA,EAAG,cAAe7Z,CAAE,EACzEuM,EAAS,CAACvM,EAAG,CAAC,EAAGA,EAAG,CAAC,EAAGA,EAAG,CAAC,EAAGA,EAAG,CAAC,CAAC,CACtC,MAAQ,CACR,CACAhC,EAAI,KAAK,CAAE,KAAAvB,EAAM,EAAGqlB,EAAI,EAAG,EAAGA,EAAI,EAAG,OAAAvV,CAAO,CAAC,CAC/C,CACA,OAAAsN,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EAChC7b,CACT,EAGA,kBAAmB,SAASyU,EAAI,CAC9ByY,GAAezY,CACjB,EAGA,iBAAA0N,EAKA,mBAAA4D,GAGA,kBAAmB,UAAW,CAC5B,MAAO,CAAE,EAAGI,GAAqB,EAAGC,EAAoB,CAC1D,EAEA,QAAS,UAAW,CAClB,GAAI,CACF,MAAMwF,EAAM/P,EAAG,aAAa,oBAAoB,EAC5C+P,GAAKA,EAAI,YAAY,CAC3B,MAAY,CACZ,CACF,CACF,CACF,CACA,MAAM6I,GAAyB,OAAO,OAAuB,OAAO,eAAe,CACjF,UAAW,KACX,MAAAxZ,GACA,oBAAA8F,GACA,mBAAAT,GACA,0BAAAL,GACA,eAAAG,GACA,eAAAqB,GACA,cAAAjB,GACA,2BAAAT,GACA,YAAA1D,GACA,eAAAE,GACA,iBAAAuD,GACA,qBAAAsB,GACA,sBAAAJ,GACA,YAAAH,EACF,EAAG,OAAO,YAAa,CAAE,MAAO,QAAS,CAAC,CAAC,EAC3C,SAAS6T,GAAqB91B,EAAO,IAAK+1B,EAAW,EAAG,CACtD,MAAMC,EAAQh2B,EAAO+1B,EACfE,EAAQC,GAAa,IAAI,EACzBC,EAAQD,GAAa,IAAI,EACzBE,EAAQ,IAAI,aAAaJ,EAAQA,CAAK,EACtCK,EAAQ,IAAI,aAAaL,EAAQA,CAAK,EAC5C,QAASr2B,EAAI,EAAGA,EAAIq2B,EAAQA,EAAOr2B,IACjCy2B,EAAMz2B,CAAC,EAAIs2B,EAAM,EACjBI,EAAM12B,CAAC,EAAIw2B,EAAM,EAEnB,MAAMn1B,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCs2B,EAAOP,EACb,QAASx0B,EAAI,EAAGA,EAAIvB,EAAMuB,IAAK,CAC7B,MAAM6Q,EAAK,KAAK,MAAM7Q,EAAI+0B,CAAI,EACxB3I,EAAKpsB,EAAI+0B,EAAOA,EAChBhzB,EAAKqqB,EAAKA,GAAM,EAAI,EAAIA,GAC9B,QAASvtB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAM+R,EAAK,KAAK,MAAM/R,EAAIk2B,CAAI,EACxB1W,EAAKxf,EAAIk2B,EAAOA,EAChBjzB,EAAKuc,EAAKA,GAAM,EAAI,EAAIA,GACxBtB,EAAKnM,EAAK6jB,EACVzX,GAAMpM,EAAK,GAAK6jB,EAChBO,EAAKnkB,EAAK4jB,EACVlW,GAAM1N,EAAK,GAAK4jB,EAChBQ,EAAMJ,EAAMG,EAAKP,EAAQ1X,CAAE,EAC3BmY,EAAML,EAAMG,EAAKP,EAAQzX,CAAE,EAC3BmY,EAAMN,EAAMtW,EAAKkW,EAAQ1X,CAAE,EAC3BqY,EAAMP,EAAMtW,EAAKkW,EAAQzX,CAAE,EAC3BqY,EAAMP,EAAME,EAAKP,EAAQ1X,CAAE,EAC3BuY,EAAMR,EAAME,EAAKP,EAAQzX,CAAE,EAC3BuY,EAAMT,EAAMvW,EAAKkW,EAAQ1X,CAAE,EAC3ByY,EAAMV,EAAMvW,EAAKkW,EAAQzX,CAAE,EAC3ByY,EAAKR,GAAOC,EAAMD,GAAOnzB,GAAMqzB,EAAMF,GAAOlzB,GAAMkzB,EAAMC,EAAMC,EAAMC,GAAOtzB,EAAKC,EAChF2zB,EAAKL,GAAOC,EAAMD,GAAOvzB,GAAMyzB,EAAMF,GAAOtzB,GAAMszB,EAAMC,EAAMC,EAAMC,GAAO1zB,EAAKC,EAChFC,GAAKhC,EAAIvB,EAAOI,GAAK,EAC3BY,EAAKuC,CAAC,EAAI,KAAK,MAAMyzB,EAAK,GAAG,EAC7Bh2B,EAAKuC,EAAI,CAAC,EAAI,KAAK,MAAM0zB,EAAK,GAAG,EACjCj2B,EAAKuC,EAAI,CAAC,EAAI,EACdvC,EAAKuC,EAAI,CAAC,EAAI,GAChB,CACF,CACA,OAAOvC,CACT,CACA,SAASk1B,GAAagB,EAAM,CAC1B,IAAIpzB,EAAIozB,IAAS,EACjB,MAAO,IAAM,CACXpzB,GAAK,EACLA,EAAIA,EAAI,WAAa,EACrB,IAAI,EAAI,KAAK,KAAKA,EAAIA,IAAM,GAAI,EAAIA,CAAC,EACrC,SAAI,EAAI,KAAK,KAAK,EAAI,IAAM,EAAG,GAAK,CAAC,EAAI,IAChC,EAAI,IAAM,MAAQ,GAAK,UAClC,CACF,CACA,MAAMqzB,GAA2B,OAAO,OAAuB,OAAO,eAAe,CACnF,UAAW,KACX,qBAAArB,EACF,EAAG,OAAO,YAAa,CAAE,MAAO,QAAS,CAAC,CAAC,EACrCsB,GAAM,KAAK,GAAK,EACtB,SAASC,GAAKvzB,EAAGxB,EAAG,CAClB,OAAoBwB,GAAM,KAAa,KAAK,OAAO,EAC/BxB,GAAM,KAAawB,EAChCA,EAAI,KAAK,OAAO,GAAKxB,EAAIwB,EAClC,CACA,SAASwzB,GAAQxzB,EAAGxB,EAAGi1B,EAAU,CAC/B,GAAoBzzB,GAAM,KAAM,OAAO,KAAK,OAAO,EACnD,GAAoBxB,GAAM,KAAM,OAAOwB,EACvC,MAAMiR,EAAIwiB,GAAYA,IAAa,EAAI,KAAK,IAAI,KAAK,OAAO,EAAGA,CAAQ,EAAI,KAAK,OAAO,EACvF,OAAOzzB,EAAIiR,GAAKzS,EAAIwB,EACtB,CACA,SAAS0zB,GAASt5B,EAAGgM,EAAM,CACzB,GAAI,MAAM,QAAQhM,CAAC,EAAG,MAAO,CAACA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,CAAC,EAC7D,GAAoBA,GAAM,KAAM,OAAOgM,EAAOA,EAAK,MAAM,EAAI,CAAC,EAAG,EAAG,CAAC,EACrE,GAAI,OAAOhM,GAAM,SAAU,OAAOs5B,GAASt5B,EAAE,MAAOgM,CAAI,EACxD,GAAI,OAAOhM,GAAM,SAAU,MAAO,CAACA,EAAGA,EAAGA,CAAC,EAC1C,MAAMb,EAAI,OAAOa,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,IAAI,MAAM,EAClD,MAAO,CAACb,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,EAAGA,EAAE,CAAC,GAAK,CAAC,CACzC,CACA,SAASo6B,GAAUv5B,EAAG,CACpB,OAAoBA,GAAM,KAAa,KACnC,OAAOA,GAAM,SAAiB,CAACA,EAAGA,EAAGA,CAAC,EACnCs5B,GAASt5B,CAAC,CACnB,CACA,SAASw5B,EAAIp6B,EAAG4M,EAAM,CACpB,GAAoB5M,GAAM,KAAM,OAAO4M,EACvC,GAAI,OAAO5M,GAAM,SAAU,OAAOo6B,EAAIp6B,EAAE,MAAO4M,CAAI,EACnD,MAAMrB,EAAI,OAAOvL,CAAC,EAClB,OAAO,OAAO,SAASuL,CAAC,EAAIA,EAAIqB,CAClC,CACA,SAASytB,GAAUC,EAAQC,EAAO,CAChC,MAAM1zB,EAAKyzB,EAAO,CAAC,EACbxzB,EAAKwzB,EAAO,CAAC,EAAIzzB,EAAKyzB,EAAO,CAAC,EAAIzzB,EAAK,KACvC+E,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI2uB,EAAQ1zB,IAAOC,EAAKD,EAAG,CAAC,EAC3D,OAAO+E,EAAIA,GAAK,EAAI,EAAIA,EAC1B,CACA,SAAS4uB,GAAM13B,EAAGmB,EAAGkN,EAAG,CACtB,MAAM5F,EAAI,KAAK,IAAIzI,EAAI,MAAQmB,EAAI,MAAQkN,EAAI,IAAI,EAAI,WACvD,OAAO5F,EAAI,KAAK,MAAMA,CAAC,CACzB,CACA,SAASkvB,GAAQ33B,EAAGmB,EAAGkN,EAAG,CACxB,MAAMupB,EAAK,KAAK,MAAM53B,CAAC,EACjB63B,EAAK,KAAK,MAAM12B,CAAC,EACjB22B,EAAK,KAAK,MAAMzpB,CAAC,EACjBmR,EAAKxf,EAAI43B,EACTrK,EAAKpsB,EAAI02B,EACTE,EAAK1pB,EAAIypB,EACT70B,EAAKuc,EAAKA,GAAM,EAAI,EAAIA,GACxBtc,EAAKqqB,EAAKA,GAAM,EAAI,EAAIA,GACxB/e,EAAKupB,EAAKA,GAAM,EAAI,EAAIA,GACxBvrB,EAAI,CAAC9I,EAAG,EAAGiR,IAAMjR,GAAK,EAAIA,GAAKiR,EAC/BqjB,EAAMxrB,EAAEkrB,GAAME,EAAIC,EAAIC,CAAE,EAAGJ,GAAME,EAAK,EAAGC,EAAIC,CAAE,EAAG70B,CAAE,EACpDg1B,EAAMzrB,EAAEkrB,GAAME,EAAIC,EAAK,EAAGC,CAAE,EAAGJ,GAAME,EAAK,EAAGC,EAAK,EAAGC,CAAE,EAAG70B,CAAE,EAC5Di1B,EAAM1rB,EAAEkrB,GAAME,EAAIC,EAAIC,EAAK,CAAC,EAAGJ,GAAME,EAAK,EAAGC,EAAIC,EAAK,CAAC,EAAG70B,CAAE,EAC5Dk1B,EAAM3rB,EAAEkrB,GAAME,EAAIC,EAAK,EAAGC,EAAK,CAAC,EAAGJ,GAAME,EAAK,EAAGC,EAAK,EAAGC,EAAK,CAAC,EAAG70B,CAAE,EAC1E,OAAOuJ,EAAEA,EAAEwrB,EAAKC,EAAK/0B,CAAE,EAAGsJ,EAAE0rB,EAAKC,EAAKj1B,CAAE,EAAGsL,CAAE,CAC/C,CACA,SAAS4pB,GAAKp4B,EAAGmB,EAAGkN,EAAGgqB,EAAK,CAC1B,IAAIn7B,EAAI,EACJ2qB,EAAM,GACNnrB,EAAI,EACJ47B,EAAO,EACX,QAAS/4B,EAAI,EAAGA,EAAI84B,EAAK94B,IACvBrC,GAAK2qB,EAAM8P,GAAQ33B,EAAItD,EAAGyE,EAAIzE,EAAG2R,EAAI3R,CAAC,EACtC47B,GAAQzQ,EACRA,GAAO,GACPnrB,GAAK,EAEP,OAAOQ,GAAKo7B,GAAQ,EACtB,CACA,SAASC,GAAUv4B,EAAGmB,EAAGkN,EAAGgqB,EAAK,CAC/B,MAAO,CACLD,GAAKp4B,EAAGmB,EAAGkN,EAAGgqB,CAAG,EAAI,EAAI,EACzBD,GAAKp4B,EAAI,KAAMmB,EAAI,KAAMkN,EAAI,KAAMgqB,CAAG,EAAI,EAAI,EAC9CD,GAAKp4B,EAAI,KAAMmB,EAAI,KAAMkN,EAAI,KAAMgqB,CAAG,EAAI,EAAI,CAChD,CACF,CACA,SAASG,GAAqB3b,EAAI,CAChC,MAAMG,EAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoCLE,EAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuCLub,EAAW,CAACtb,EAAM5a,IAAQ,CAC9B,MAAMzE,EAAI+e,EAAG,aAAaM,CAAI,EAG9B,GAFAN,EAAG,aAAa/e,EAAGyE,CAAG,EACtBsa,EAAG,cAAc/e,CAAC,EACd,CAAC+e,EAAG,mBAAmB/e,EAAG+e,EAAG,cAAc,EAAG,MAAM,IAAI,MAAM,wBAAgBA,EAAG,iBAAiB/e,CAAC,CAAC,EACxG,OAAOA,CACT,EACM0oB,EAAO3J,EAAG,cAAc,EAI9B,GAHAA,EAAG,aAAa2J,EAAMiS,EAAS5b,EAAG,cAAeG,CAAE,CAAC,EACpDH,EAAG,aAAa2J,EAAMiS,EAAS5b,EAAG,gBAAiBK,CAAE,CAAC,EACtDL,EAAG,YAAY2J,CAAI,EACf,CAAC3J,EAAG,oBAAoB2J,EAAM3J,EAAG,WAAW,EAAG,MAAM,IAAI,MAAM,iDAAqBA,EAAG,kBAAkB2J,CAAI,CAAC,EAClH,MAAMkS,EAAU7b,EAAG,aAAa,EAChCA,EAAG,WAAWA,EAAG,aAAc6b,CAAO,EACtC7b,EAAG,WAAWA,EAAG,aAAc,IAAI,aAAa,CAAC,IAAM,IAAM,GAAK,IAAM,IAAM,GAAK,GAAK,EAAG,CAAC,EAAGA,EAAG,WAAW,EAC7G,MAAM0H,EAAO1H,EAAG,aAAa,EACvByH,EAAMzH,EAAG,kBAAkB,EACjCA,EAAG,gBAAgByH,CAAG,EACtBzH,EAAG,WAAWA,EAAG,aAAc6b,CAAO,EACtC7b,EAAG,wBAAwB,CAAC,EAC5BA,EAAG,oBAAoB,EAAG,EAAGA,EAAG,MAAO,GAAO,EAAG,CAAC,EAClDA,EAAG,oBAAoB,EAAG,CAAC,EAC3BA,EAAG,WAAWA,EAAG,aAAc0H,CAAI,EACnC,MAAMoU,EAAI,GACV,OAAA9b,EAAG,wBAAwB,CAAC,EAC5BA,EAAG,oBAAoB,EAAG,EAAGA,EAAG,MAAO,GAAO8b,EAAG,CAAC,EAClD9b,EAAG,oBAAoB,EAAG,CAAC,EAC3BA,EAAG,wBAAwB,CAAC,EAC5BA,EAAG,oBAAoB,EAAG,EAAGA,EAAG,MAAO,GAAO8b,EAAG,EAAE,EACnD9b,EAAG,oBAAoB,EAAG,CAAC,EAC3BA,EAAG,wBAAwB,CAAC,EAC5BA,EAAG,oBAAoB,EAAG,EAAGA,EAAG,MAAO,GAAO8b,EAAG,EAAE,EACnD9b,EAAG,oBAAoB,EAAG,CAAC,EAC3BA,EAAG,wBAAwB,CAAC,EAC5BA,EAAG,oBAAoB,EAAG,EAAGA,EAAG,MAAO,GAAO8b,EAAG,EAAE,EACnD9b,EAAG,oBAAoB,EAAG,CAAC,EAC3BA,EAAG,gBAAgB,IAAI,EAChB,CACL,KAAM,CACJ,KAAA2J,EACA,OAAQ3J,EAAG,mBAAmB2J,EAAM,OAAO,EAC3C,UAAW3J,EAAG,mBAAmB2J,EAAM,UAAU,EACjD,SAAU3J,EAAG,mBAAmB2J,EAAM,SAAS,EAC/C,WAAY3J,EAAG,mBAAmB2J,EAAM,WAAW,EACnD,eAAgB3J,EAAG,mBAAmB2J,EAAM,eAAe,EAC3D,cAAe3J,EAAG,mBAAmB2J,EAAM,cAAc,EACzD,gBAAiB3J,EAAG,mBAAmB2J,EAAM,gBAAgB,EAC7D,OAAQ3J,EAAG,mBAAmB2J,EAAM,OAAO,EAC3C,cAAe3J,EAAG,mBAAmB2J,EAAM,cAAc,EACzD,UAAW3J,EAAG,mBAAmB2J,EAAM,UAAU,CACnD,EACA,QAAAkS,EACA,KAAAnU,EACA,IAAAD,CACF,CACF,CACA,SAASsU,GAAoBrT,EAAK,CAChC,MAAMxjB,EAAIwjB,GAAOA,EAAI,QAAUA,EAAI,OAAO,CAAC,GAAKA,EAAI,OAAO,CAAC,EAAE,OAC9D,MAAO,CAAC,EAAExjB,GAAK,OAAOA,EAAE,OAAO,IAAM,EACvC,CACA,SAAS82B,GAAiBj4B,EAAM,CAC9B,GAAI,CAACA,GAAQA,EAAK,OAAS,GAAI,MAAO,GACtC,MAAM,EAAIA,EAAK,OAAS,EAClBk4B,EAAO,KAAK,IAAI,EAAG,EAAI,GAAK,CAAC,EACnC,IAAI/c,EAAO,EACX,QAASxc,EAAI,EAAGA,EAAI,EAAGA,GAAKu5B,EAAM,CAChC,MAAM31B,EAAI5D,EAAI,EACd,GAAIqB,EAAKuC,CAAC,EAAI,KAAOvC,EAAKuC,EAAI,CAAC,EAAI,KAAOvC,EAAKuC,EAAI,CAAC,EAAI,KAAOvC,EAAKuC,EAAI,CAAC,EAAI,IAAK,MAAO,GACzF4Y,GACF,CACA,OAAOA,EAAO,CAChB,CACA,SAASgd,GAAwBhR,EAAOlI,EAAQmZ,EAAWC,EAAW,CACpE,IAAIv8B,EAAI,KAAK,IAAI,OAAOqrB,CAAK,GAAK,CAAC,GAAK,OAAOlI,CAAM,GAAK,GAC1D,MAAMqZ,EAAK,OAAOF,CAAS,GAAK,EAC1BG,EAAK,OAAOF,CAAS,GAAK,EAChC,OAAIC,EAAK,IAAGx8B,EAAI,KAAK,IAAIw8B,EAAIx8B,CAAC,GAC1By8B,EAAK,IAAGz8B,EAAI,KAAK,IAAIy8B,EAAIz8B,CAAC,GACvBA,CACT,CACA,SAAS08B,GAAoBlH,EAAIC,EAAI,CACnC,OAAMD,GAAMC,EACL,KAAK,MAAMA,EAAID,CAAE,EAAI,KAAK,GAAK,EADd,CAE1B,CACA,SAASmH,GAAqBC,EAAUC,EAAe,CACrD,OAAOD,GAAYA,EAAS,OAAS,YAAc,KAAK,IAAI,EAAGC,GAAiB,CAAC,EAAI,CACvF,CACA,MAAMC,EAAS,CACb,aAAc,CACZ,KAAK,MAAQ,GACb,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,EAC3B,KAAK,GAAK,KAAK,GAAK,KAAK,GAAK,EAC9B,KAAK,GAAK,KAAK,GAAK,KAAK,GAAK,EAC9B,KAAK,IAAM,EACX,KAAK,KAAO,EACZ,KAAK,KAAO,EACZ,KAAK,SAAW,EAChB,KAAK,IAAM,EACX,KAAK,OAAS,EACd,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,EAC3B,KAAK,MAAQ,KAAK,MAAQ,KAAK,MAAQ,EACvC,KAAK,MAAQ,EACb,KAAK,UAAY,EACjB,KAAK,KAAO,EACZ,KAAK,MAAQ,EACb,KAAK,SAAW,EAChB,KAAK,QAAU,EACf,KAAK,OAAS,EACd,KAAK,UAAY,EACjB,KAAK,SAAW,EAChB,KAAK,UAAY,EACjB,KAAK,SAAW,EAChB,KAAK,UAAY,EACjB,KAAK,UAAY,EACjB,KAAK,MAAQ,IACf,CACF,CACA,MAAMC,EAAe,CACnB,YAAY5c,EAAI6c,EAAOC,EAAUhtB,EAAO,CACtC,KAAK,GAAKkQ,EACV,KAAK,MAAQ6c,GAAS,CAAC,EACvB,KAAK,SAAWC,GAAY,CAAC,EAC7B,KAAK,MAAQhtB,GAAS,KACtB,MAAM5I,EAAK4I,GAASA,EAAM,OAASA,EAAM,OAAS,CAAC,EAAG,EAAG,CAAC,EACpDitB,EAAKjtB,GAASA,EAAM,MAAQA,EAAM,MAAQ,CAAC,EAAG,EAAG,CAAC,EAClDktB,EAAKltB,GAASA,EAAM,OAASA,EAAM,OAAS,CAAC,EAAG,EAAG,CAAC,EAC1D,KAAK,QAAU5I,EAAG,CAAC,GAAK,EACxB,KAAK,QAAUA,EAAG,CAAC,GAAK,EACxB,KAAK,QAAUA,EAAG,CAAC,GAAK,EACxB,KAAK,OAAS61B,EAAG,CAAC,IAAM,EAAI,EAAIA,EAAG,CAAC,EACpC,KAAK,OAASA,EAAG,CAAC,IAAM,EAAI,EAAIA,EAAG,CAAC,EACpC,KAAK,QAAUC,EAAG,CAAC,GAAK,GAAK,KAAK,GAAK,IACvC,MAAMC,EAAM,KAAK,IAAI,KAAK,MAAM,EAC1BC,EAAM,KAAK,IAAI,KAAK,MAAM,EAChC,KAAK,SAAW,KAAK,IAAID,EAAKC,CAAG,GAAK,EACtC,KAAK,eAAiBD,EAAM,KAAK,SACjC,KAAK,eAAiBC,EAAM,KAAK,SACjC,KAAK,SAAW,KAAK,IAAI,EAAG,KAAK,IAAI,IAAKzC,EAAI,KAAK,MAAM,SAAU,GAAG,CAAC,CAAC,EACxE,KAAK,QAAU,EACf,KAAK,OAAS,GACd,KAAK,QAAU,KACf,KAAK,UAAY,KACjB,KAAK,SAAW,KAChB,KAAK,MAAQ,cACb,KAAK,QAAU,GACf,KAAK,cAAgB,IACrB,KAAK,WAAa,EAClB,KAAK,YAAc,EACnB,KAAK,QAAU,GACf,KAAK,OAAS,GACd,KAAK,MAAQ,KACb,KAAK,MAAQ,KACb,KAAK,SAAW,KAChB,KAAK,KAAO,KACZ,KAAK,MAAQ,KACb,KAAK,UAAY,KACjB,KAAK,YAAc,KAAK,IAAI,EAAG,KAAK,MAAMA,EAAI,KAAK,MAAM,mBAAoB,CAAC,CAAC,CAAC,EAChF,KAAK,cAAgB,KAAK,MAAM,eAAiB,KACjD,KAAK,UAAY,KACjB,KAAK,WAAa,KAAK,YAAc,KAAK,YAC1C,KAAK,WAAa,EAClB,KAAK,WAAa,EAClB,KAAK,eAAiB,KAAK,MAAM,cAAgB,CAAC,GAAG,OAAO,OAAO,EAAE,IAAK0C,IAAQ,CAChF,GAAI1C,EAAI0C,EAAG,GAAI,CAAC,EAChB,cAAe,CAAC,CAACA,EAAG,gBAAkB1C,EAAI0C,EAAG,MAAO,CAAC,EAAI,KAAO,EAChE,OAAQ5C,GAAS4C,EAAG,MAAM,EAE1B,EAAG,EACH,EAAG,EACH,EAAG,CACL,EAAE,EACF,KAAK,QAAU,KACf,KAAK,cAAgB,KACrB,KAAK,YAAc,KACnB,KAAK,cAAgB,CAAC,EAAG,EAAG,CAAC,EAC7B,KAAK,IAAM,CAAC,EACZ,KAAK,eAAe,EACpB,KAAK,UAAY,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI1C,EAAI,KAAK,MAAM,UAAW,CAAC,CAAC,CAAC,EACvE,KAAK,QAAU,GACf,KAAK,SAAS,CAChB,CAKA,iBAAkB,CAChB,KAAK,eAAe,CACtB,CACA,gBAAiB,CACf,KAAK,IAAM,CAAC,EACZ,KAAK,WAAa,EAClB,KAAK,YAAc,EACnB,KAAK,SAAW,KAAK,IAAI,EAAG,KAAK,IAAI,IAAKA,EAAI,KAAK,MAAM,SAAU,GAAG,CAAC,CAAC,EACxE,MAAM7C,EAAK,KAAK,UAAY,CAAC,EAC7B,UAAW3rB,KAAK,OAAO,KAAK2rB,CAAE,EAAG,CAC/B,GAAI3rB,IAAM,KAAM,SAChB,MAAMxC,EAAMmuB,EAAG3rB,CAAC,EACVsK,EAAM9M,GAAO,OAAOA,GAAQ,UAAY,UAAWA,EAAMA,EAAI,MAAQA,EAC3E,GAAIwC,IAAM,QAAS,CACjB,MAAMlF,EAAO0zB,EAAI,KAAK,MAAM,SAAU,GAAG,EACnC2C,EAAM,OAAO7mB,CAAG,EAChBzS,EAAI,OAAO,SAASs5B,CAAG,EAAIA,EAAM,EACvC,KAAK,SAAW,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,KAAK,MAAMr2B,EAAOjD,CAAC,CAAC,CAAC,EAC/D,KAAK,IAAI,SAAWA,CACtB,SAAWmI,IAAM,QACf,KAAK,WAAa,OAAOsK,CAAG,EACvB,OAAO,SAAS,KAAK,UAAU,IAAG,KAAK,WAAa,WAChDtK,IAAM,SAAWA,IAAM,SAAU,CAC1C,MAAM5L,EAAIk6B,GAAShkB,CAAG,EACtB,KAAK,IAAI,MAAQtK,IAAM,SAAW5L,EAAI,CAACA,EAAE,CAAC,EAAI,IAAKA,EAAE,CAAC,EAAI,IAAKA,EAAE,CAAC,EAAI,GAAG,CAC3E,MAAW4L,IAAM,OACf,KAAK,IAAI,KAAO,OAAOsK,CAAG,GAAK,EACtBtK,IAAM,QACf,KAAK,IAAI,QAAU,OAAOsK,CAAG,EACxB,OAAO,SAAS,KAAK,IAAI,OAAO,IAAG,KAAK,IAAI,QAAU,IAClDtK,IAAM,QACf,KAAK,IAAI,MAAQ,OAAOsK,CAAG,GAAK,EACvBtK,IAAM,WACf,KAAK,YAAc,OAAOsK,CAAG,GAAK,EACzBtK,IAAM,aACf,KAAK,IAAI,WAAa,OAAOsK,CAAG,GAAK,EAErC,KAAK,IAAItK,CAAC,EAAIsK,CAElB,CACA,KAAK,KAAO,CAAC,EACb,QAAS7T,EAAI,EAAGA,EAAI,KAAK,SAAUA,IAAK,KAAK,KAAK,KAAK,IAAIi6B,EAAU,CACvE,CAEA,UAAW,CACT,MAAM74B,EAAI,KAAK,MACf,KAAK,UAAYA,EAAE,SAAW,CAAC,GAAG,IAAK7D,IAAO,CAC5C,KAAMA,EAAE,OAAS,YAAc,MAAQ,SACvC,OAAQs6B,GAASt6B,EAAE,MAAM,EACzB,WAAYs6B,GAASt6B,EAAE,WAAY,CAAC,EAAG,EAAG,CAAC,CAAC,EAC5C,YAAau6B,GAAUv6B,EAAE,WAAW,EACpC,YAAau6B,GAAUv6B,EAAE,WAAW,EACpC,KAAMA,EAAE,KAAOs6B,GAASt6B,EAAE,IAAI,EAAI,KAClC,KAAMw6B,EAAIx6B,EAAE,KAAM,CAAC,EASnB,YAAaA,EAAE,sBAAwB,OAEvC,YAAas6B,GAASt6B,EAAE,sBAAuB,CAAC,EAAG,CAAC,CAAC,EACrD,KAAMA,EAAE,OAAS,QAAUA,EAAE,gBAAkB,QAAUA,EAAE,sBAAwB,OACnF,cAAew6B,EAAIx6B,EAAE,cAAe,CAAC,EACrC,SAAUw6B,EAAIx6B,EAAE,SAAU,CAAC,EAC3B,SAAUw6B,EAAIx6B,EAAE,SAAU,CAAC,EAG3B,aAAcA,EAAE,eAAiB,QAAUA,EAAE,eAAiB,KAAOw6B,EAAIx6B,EAAE,aAAc,CAAC,EAAI,EAC9F,OAAQ,EACV,EAAE,EACF,MAAM8e,EAAOjb,EAAE,aAAe,CAAC,EAC/B,KAAK,KAAO,CACV,KAAM,KACN,KAAM,KACN,MAAO,KACP,MAAO,KACP,SAAU,KACV,SAAU,KACV,gBAAiB,KACjB,kBAAmB,KACnB,UAAW,IACb,EACA,UAAW0N,KAAKuN,EACd,OAAQvN,EAAE,KAAM,CACd,IAAK,iBACH,KAAK,KAAK,KAAO,CAAE,IAAKipB,EAAIjpB,EAAE,IAAK,CAAC,EAAG,IAAKipB,EAAIjpB,EAAE,IAAK,CAAC,EAAG,IAAKipB,EAAIjpB,EAAE,SAAU,CAAC,CAAE,EACnF,MACF,IAAK,aACH,KAAK,KAAK,KAAO,CAAE,IAAKipB,EAAIjpB,EAAE,IAAK,CAAC,EAAG,IAAKipB,EAAIjpB,EAAE,IAAK,CAAC,EAAG,IAAKipB,EAAIjpB,EAAE,SAAU,CAAC,CAAE,EACnF,MACF,IAAK,cACH,KAAK,KAAK,MAAQ,CAAE,IAAK+oB,GAAS/oB,EAAE,IAAK,CAAC,IAAK,IAAK,GAAG,CAAC,EAAG,IAAK+oB,GAAS/oB,EAAE,IAAK,CAAC,IAAK,IAAK,GAAG,CAAC,CAAE,EACjG,MACF,IAAK,cACH,KAAK,KAAK,MAAQ,CAAE,IAAKipB,EAAIjpB,EAAE,IAAK,CAAC,EAAG,IAAKipB,EAAIjpB,EAAE,IAAK,CAAC,CAAE,EAC3D,MACF,IAAK,iBACH,KAAK,KAAK,SAAW,CAAE,IAAK+oB,GAAS/oB,EAAE,GAAG,EAAG,IAAK+oB,GAAS/oB,EAAE,GAAG,CAAE,EAClE,MACF,IAAK,iBACH,KAAK,KAAK,SAAW,CAAE,IAAK+oB,GAAS/oB,EAAE,GAAG,EAAG,IAAK+oB,GAAS/oB,EAAE,IAAK,CAAC,EAAG,EAAG,CAAC,CAAC,EAAG,IAAKipB,EAAIjpB,EAAE,SAAU,CAAC,CAAE,EACtG,MACF,IAAK,wBACH,KAAK,KAAK,gBAAkB,CAAE,IAAK+oB,GAAS/oB,EAAE,GAAG,EAAG,IAAK+oB,GAAS/oB,EAAE,GAAG,EAAG,IAAKipB,EAAIjpB,EAAE,SAAU,CAAC,CAAE,EAClG,MACF,IAAK,gCACH,KAAK,KAAK,UAAY,CACpB,MAAO,KAAK,IAAI,EAAGipB,EAAIjpB,EAAE,MAAO,CAAC,CAAC,EAClC,OAAQ+oB,GAAS/oB,EAAE,OAAQ,CAAC,EAAG,CAAC,CAAC,EACjC,SAAU+oB,GAAS/oB,EAAE,QAAQ,EAC7B,SAAU+oB,GAAS/oB,EAAE,SAAU,CAAC,EAAG,EAAG,CAAC,CAAC,EACxC,GAAIipB,EAAIjpB,EAAE,aAAc,CAAC,CAC3B,EACA,KAAK,cAAgB,EACrB,MACF,IAAK,0BACH,KAAK,KAAK,kBAAoB,CAC5B,MAAOipB,EAAIjpB,EAAE,MAAO,EAAG,EACvB,OAAQipB,EAAIjpB,EAAE,OAAQ,CAAC,EACvB,SAAUipB,EAAIjpB,EAAE,SAAU,CAAC,EAC3B,SAAUipB,EAAIjpB,EAAE,SAAU,CAAC,EAC3B,SAAUipB,EAAIjpB,EAAE,SAAU,CAAC,EAC3B,UAAWipB,EAAIjpB,EAAE,UAAW,CAAC,EAE7B,UAAWipB,EAAIjpB,EAAE,oBAAqB,CAAC,EACvC,YAAa+oB,GAAS/oB,EAAE,sBAAuB,CAAC,EAAG,CAAC,CAAC,CACvD,EACA,KACJ,CAEF,MAAM6rB,EAAMv5B,EAAE,UAAY,CAAC,EAC3B,KAAK,IAAM,CACT,SAAU,KACV,gBAAiB,KACjB,UAAW,KACX,YAAa,KACb,WAAY,KACZ,YAAa,KACb,WAAY,CAAC,EACb,SAAU,KACV,QAAS,KACT,OAAQ,KACR,QAAS,CAAC,EACV,OAAQ,CAAC,EACT,MAAO,CAAC,CACV,EACA,UAAWwC,KAAK+2B,EACd,OAAQ/2B,EAAE,KAAM,CACd,IAAK,WACH,KAAK,IAAI,SAAW,CAAE,QAASi0B,GAASj0B,EAAE,OAAO,EAAG,KAAMm0B,EAAIn0B,EAAE,KAAM,CAAC,CAAE,EACzE,MACF,IAAK,kBACH,KAAK,IAAI,gBAAkB,CAAE,MAAOi0B,GAASj0B,EAAE,KAAK,EAAG,KAAMm0B,EAAIn0B,EAAE,KAAM,CAAC,CAAE,EAC5E,MACF,IAAK,YACH,KAAK,IAAI,UAAY,CAAE,OAAQm0B,EAAIn0B,EAAE,WAAY,EAAG,EAAG,QAASm0B,EAAIn0B,EAAE,YAAa,EAAG,CAAE,EACxF,MACF,IAAK,cACH,KAAK,IAAI,YAAc,CACrB,UAAWm0B,EAAIn0B,EAAE,UAAW,CAAC,EAC7B,QAASm0B,EAAIn0B,EAAE,QAAS,CAAC,EACzB,WAAYm0B,EAAIn0B,EAAE,WAAY,CAAC,EAC/B,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,CAC7B,EACA,MACF,IAAK,aACH,KAAK,IAAI,WAAa,CACpB,UAAWm0B,EAAIn0B,EAAE,UAAW,CAAC,EAC7B,QAASm0B,EAAIn0B,EAAE,QAAS,CAAC,EACzB,WAAYm0B,EAAIn0B,EAAE,WAAY,CAAC,EAC/B,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,CAC7B,EACA,MACF,IAAK,cACH,KAAK,IAAI,YAAc,CACrB,UAAWm0B,EAAIn0B,EAAE,UAAW,CAAC,EAC7B,QAASm0B,EAAIn0B,EAAE,QAAS,CAAC,EACzB,WAAYA,EAAE,aAAe,OAASi0B,GAASj0B,EAAE,UAAU,EAAI,KAC/D,SAAUi0B,GAASj0B,EAAE,SAAU,CAAC,EAAG,EAAG,CAAC,CAAC,CAC1C,EACA,MACF,IAAK,aACH,KAAK,IAAI,WAAW,KAAK,CACvB,MAAOm0B,EAAIn0B,EAAE,MAAO,GAAI,EACxB,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,EAC3B,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,EAC3B,UAAWm0B,EAAIn0B,EAAE,UAAW,CAAC,EAC7B,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,EAC3B,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,EAC3B,KAAMA,EAAE,OAAS,OAASi0B,GAASj0B,EAAE,KAAM,CAAC,EAAG,EAAG,CAAC,CAAC,EAAI,CAAC,EAAG,EAAG,CAAC,CAClE,CAAC,EACD,MACF,IAAK,iBACH,KAAK,IAAI,SAAW,CAClB,QAASm0B,EAAIn0B,EAAE,aAAcm0B,EAAIn0B,EAAE,aAAc,CAAC,CAAC,EACnD,QAASm0B,EAAIn0B,EAAE,aAAc,CAAC,EAC9B,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,EAC3B,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,EAC3B,SAAUm0B,EAAIn0B,EAAE,SAAU6zB,EAAG,CAC/B,EACA,MACF,IAAK,gBACH,KAAK,IAAI,QAAU,CACjB,QAASM,EAAIn0B,EAAE,aAAcm0B,EAAIn0B,EAAE,aAAc,CAAC,CAAC,EACnD,QAASm0B,EAAIn0B,EAAE,aAAcm0B,EAAIn0B,EAAE,aAAc,CAAC,CAAC,EACnD,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,EAC3B,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,EAC3B,SAAUm0B,EAAIn0B,EAAE,SAAU6zB,EAAG,CAC/B,EACA,MACF,IAAK,oBACH,KAAK,IAAI,OAAS,CAChB,QAASM,EAAIn0B,EAAE,aAAcm0B,EAAIn0B,EAAE,aAAc,EAAG,CAAC,EACrD,QAASm0B,EAAIn0B,EAAE,aAAc,EAAG,EAChC,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,EAC3B,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,EAC3B,SAAUm0B,EAAIn0B,EAAE,SAAU,CAAC,EAC3B,SAAUm0B,EAAIn0B,EAAE,SAAU6zB,EAAG,EAC7B,KAAM7zB,EAAE,OAAS,OAASi0B,GAASj0B,EAAE,KAAM,CAAC,EAAG,EAAG,CAAC,CAAC,EAAI,CAAC,EAAG,EAAG,CAAC,CAClE,EACA,MACF,IAAK,sBACH,KAAK,IAAI,QAAQ,KAAK,CACpB,GAAIm0B,EAAIn0B,EAAE,aAAc,CAAC,EACzB,OAAQi0B,GAASj0B,EAAE,MAAM,EACzB,MAAOm0B,EAAIn0B,EAAE,MAAO,CAAC,EACrB,UAAWm0B,EAAIn0B,EAAE,UAAW,CAAC,CAC/B,CAAC,EACD,MACF,IAAK,SACH,KAAK,IAAI,OAAO,KAAK,CACnB,KAAMi0B,GAASj0B,EAAE,KAAM,CAAC,EAAG,EAAG,CAAC,CAAC,EAChC,OAAQi0B,GAASj0B,EAAE,MAAM,EACzB,cAAem0B,EAAIn0B,EAAE,cAAe,CAAC,EACrC,cAAem0B,EAAIn0B,EAAE,cAAe,CAAC,EACrC,WAAYm0B,EAAIn0B,EAAE,WAAY,CAAC,EAC/B,WAAYm0B,EAAIn0B,EAAE,WAAY,CAAC,EAE/B,GAAIA,EAAE,eAAiB,QAAUA,EAAE,eAAiB,KAAOm0B,EAAIn0B,EAAE,aAAc,CAAC,EAAI,EAEpF,UAAWm0B,EAAIn0B,EAAE,oBAAqB,CAAC,EACvC,YAAai0B,GAASj0B,EAAE,sBAAuB,CAAC,EAAG,CAAC,CAAC,CACvD,CAAC,EACD,MACF,IAAK,aACH,KAAK,IAAI,MAAM,KAAK,CAClB,OAAQA,EAAE,QAAU,WACpB,SAAUi0B,GAASj0B,EAAE,cAAc,EACnC,SAAUi0B,GAASj0B,EAAE,cAAc,EACnC,GAAIA,EAAE,mBAAqB,eAC3B,WAAYm0B,EAAIn0B,EAAE,oBAAqB,CAAC,CAC1C,CAAC,EACD,KACJ,CAEF,MAAMg3B,EAAO,KAAK,MAAM,SAClBC,EAA6BD,GAAS,KACtCE,EAAQ,MAAM,QAAQF,CAAI,EAAIA,EAAOA,EAAO,CAACA,CAAI,EAAI,CAAC,EAC5D,KAAK,UAAYE,EAAM,IAAKr4B,GAAM,CAChC,MAAMs4B,EAAOt4B,GAAKA,EAAE,MAAQ,SAC5B,MAAO,CACL,KAAAs4B,EACA,OAAQhD,EAAIt1B,GAAKA,EAAE,OAAQs4B,IAAS,cAAgB,GAAM,CAAC,EAC3D,UAAWhD,EAAIt1B,GAAKA,EAAE,UAAW,CAAC,EAClC,UAAWs1B,EAAIt1B,GAAKA,EAAE,UAAW,CAAC,EAClC,YAAas1B,EAAIt1B,GAAKA,EAAE,YAAa,CAAC,EACtC,YAAaA,GAAKA,EAAE,aAAe,IACrC,CACF,CAAC,EACGo4B,GAAW,CAAC,KAAK,UAAU,SAC7B,KAAK,UAAY,CAAC,CAAE,KAAM,SAAU,OAAQ,EAAG,UAAW,EAAG,UAAW,EAAG,YAAa,EAAG,YAAa,IAAK,CAAC,GAEhH,MAAMG,EAAK,KAAK,UAAU,KAAMv4B,GAAMA,EAAE,OAAS,eAAiBA,EAAE,OAAS,WAAW,EAGxF,GAFA,KAAK,SAAWu4B,GAAM,KACtB,KAAK,cAAgB,EACjBA,GAAMA,EAAG,OAAS,YAAa,CACjC,MAAMC,EAAO,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,KAAK,MAAMD,EAAG,WAAaA,EAAG,aAAe,CAAC,CAAC,CAAC,EACtF,KAAK,cAAgBC,EACrB,UAAWv9B,KAAK,KAAK,KAAMA,EAAE,MAAQ,IAAI,aAAau9B,EAAO,CAAC,CAChE,CACF,CACA,SAASd,EAAO,CACd,KAAK,MAAQA,EACb,KAAK,SAAS,CAChB,CACA,YAAYnU,EAAK,CACf,KAAK,SAAWA,EAChB,MAAMhb,EAAOgb,GAAOA,EAAI,QAAUA,EAAI,OAAO,CAAC,EAC9C,KAAK,MAAQhb,GAAQA,EAAK,UAAY,cACtC,KAAK,QAAUquB,GAAoBrT,CAAG,EACtC,MAAMkV,EAAKlwB,GAAQA,EAAK,qBAClBmwB,EAASD,GAAMA,EAAG,oCAClBE,EAAM,OAAOD,CAAM,EACzB,KAAK,cAAgB,OAAO,SAASC,CAAG,EAAI,KAAK,IAAI,IAAM,KAAK,IAAI,EAAGA,CAAG,CAAC,EAAI,GACjF,CACA,iBAAiBl6B,EAAM,CACrB,KAAK,UAAYA,GAAQ,IAC3B,CAMA,WAAWA,EAAM,CACf,KAAK,QAAUA,EACf,KAAK,OAAS,CAAC,CAACA,EAChB,MAAM6F,EAAM7F,GAAQA,EAAK,OACnByG,EAAO,MAAM,QAAQZ,CAAG,EAAIA,EAAMA,GAAOA,EAAI,MAAQA,EAAI,KAAK,OAASA,EAAI,KAAO,KAClFs0B,EAAOn6B,GAAQA,EAAK,OAASyG,IAASZ,GAAOA,EAAI,YAAcY,EAAK,aAAe,EACnF2zB,EAAOp6B,GAAQA,EAAK,QAAUyG,IAASZ,GAAOA,EAAI,aAAeY,EAAK,cAAgB,EACxFA,GAAQ0zB,EAAO,GAAKC,EAAO,GAC7B,KAAK,UAAY3zB,EAAK,IAAKxK,IAAO,CAChC,GAAIA,EAAE,EAAIk+B,EACV,GAAIl+B,EAAE,EAAIm+B,EACV,GAAIn+B,EAAE,MAAQk+B,EACd,GAAIl+B,EAAE,OAASm+B,CACjB,EAAE,EACF,KAAK,WAAa,KAAK,UAAU,SAEjC,KAAK,UAAY,KACjB,KAAK,WAAa,KAAK,YAAc,KAAK,aAE5C,IAAIC,EAAK,EACLC,EAAK,EACL,KAAK,WAAa7zB,GACpB4zB,EAAK5zB,EAAK,CAAC,EAAE,OAAS,EACtB6zB,EAAK7zB,EAAK,CAAC,EAAE,QAAU,GACdzG,GAAQA,EAAK,MAAQ,GAAKA,EAAK,OAAS,IACjDq6B,EAAKr6B,EAAK,MACVs6B,EAAKt6B,EAAK,QAEZ,MAAMu6B,EAAW,KAAK,IAAIF,EAAIC,CAAE,GAAK,EACrC,KAAK,WAAaD,EAAKE,EACvB,KAAK,WAAaD,EAAKC,EACvB,KAAK,WAAa,MACpB,CACA,WAAW99B,EAAG,CACZ,KAAK,QAAUA,CACjB,CAEA,WAAW+9B,EAAQC,EAAQ,CACzB,MAAMhJ,EAAK+I,EAAS,KAAK,QACnB9I,EAAK+I,EAAS,KAAK,QACnBn5B,EAAI,KAAK,IAAI,CAAC,KAAK,MAAM,EACzB,EAAI,KAAK,IAAI,CAAC,KAAK,MAAM,EAC/B,KAAK,QAAU,CACb,GAAImwB,EAAKnwB,EAAIowB,EAAK,IAAM,KAAK,QAAU,GACvC,GAAID,EAAK,EAAIC,EAAKpwB,IAAM,KAAK,QAAU,EACzC,CACF,CAEA,aAAa0K,EAAQqT,EAAMngB,EAAQ,CACjC,KAAK,cAAgB8M,GAAU,KAC/B,KAAK,YAAcqT,IAAS,YAAcA,IAAS,SAAWA,EAAO,KACrE,MAAM,EAAIngB,GAAU,CAAC,EAAG,EAAG,CAAC,EAC5B,KAAK,cAAgB,CAAC,EAAE,CAAC,GAAK,EAAG,EAAE,CAAC,GAAK,EAAG,EAAE,CAAC,GAAK,CAAC,EACrD,KAAK,YAAY,CACnB,CACA,gBAAiB,CACf,MAAMw7B,EAAO,KAAK,KAClB,QAAS57B,EAAI,EAAGA,EAAI47B,EAAK,OAAQ57B,IAAK,GAAI47B,EAAK57B,CAAC,EAAE,MAAO,OAAO47B,EAAK57B,CAAC,EACtE,OAAO,IACT,CAEA,aAAaqqB,EAAIC,EAAI,CACnB,MAAM7mB,EAAK4mB,EAAK,KAAK,OACf7mB,EAAK8mB,EAAK,KAAK,OACf9nB,EAAI,KAAK,IAAI,KAAK,MAAM,EACxB,EAAI,KAAK,IAAI,KAAK,MAAM,EAC9B,MAAO,CAAC,KAAK,QAAUiB,EAAKjB,EAAIgB,EAAK,EAAG,KAAK,QAAUC,EAAK,EAAID,EAAKhB,CAAC,CACxE,CACA,aAAc,CACZ,MAAM0K,EAAS,KAAK,cACdqT,EAAO,KAAK,YAClB,GAAI,CAACrT,GAAU,CAACqT,EAAM,OACtB,MAAMviB,EAAM,KAAK,cACjB,GAAIuiB,IAAS,WAAY,CACvB,MAAMsb,EAAO3uB,EAAO,eAAe,EACnC,GAAI,CAAC2uB,EAAM,OACX,MAAMv8B,EAAI4N,EAAO,aAAa2uB,EAAK,EAAI79B,EAAI,CAAC,EAAG69B,EAAK,EAAI79B,EAAI,CAAC,CAAC,EAC9D,KAAK,QAAUsB,EAAE,CAAC,EAClB,KAAK,QAAUA,EAAE,CAAC,CACpB,KAAO,CACL,MAAMA,EAAI4N,EAAO,aAAalP,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,EAC5C,KAAK,QAAUsB,EAAE,CAAC,EAClB,KAAK,QAAUA,EAAE,CAAC,CACpB,CACF,CAEA,MAAMw8B,EAAI,CACR,MAAMF,EAAO,KAAK,KACZ1yB,EAAI0yB,EAAK,OACf,IAAIl+B,EAAI,KACJsL,EAAM,KAAK,SAAW,EAC1B,QAAShJ,EAAI,EAAGA,EAAIkJ,EAAGlJ,IAAK,CAC1B,MAAMqH,EAAIu0B,GAAM5yB,EAAMhJ,GAAKkJ,CAAC,EAC5B,GAAI,CAAC7B,EAAE,MAAO,CACZ3J,EAAI2J,EACJ,KAAK,SAAW2B,EAAMhJ,EAAI,GAAKkJ,EAC/B,KACF,CACF,CACA,GAAI,CAACxL,EAAG,OACRA,EAAE,MAAQ,GACVA,EAAE,IAAM,EACRA,EAAE,KAAO,KAAK,OAAO,EACrBA,EAAE,IAAM,EACRA,EAAE,OAAS,EACXA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAK,EACrBA,EAAE,MAAQ,EACV,MAAMkG,EAAIk4B,EAAG,OACb,GAAIA,EAAG,OAAS,MAAO,CACrB,MAAM,EAAIA,EAAG,aAAe,CAAC,EAAG,EAAG,CAAC,EAC9BC,EAAOD,EAAG,YAChBp+B,EAAE,EAAIkG,EAAE,CAAC,EAAI8zB,GAAK,CAAC,EAAE,CAAC,EAAG,EAAE,CAAC,CAAC,GAAKqE,EAAOA,EAAK,CAAC,EAAI,GACnDr+B,EAAE,EAAIkG,EAAE,CAAC,EAAI8zB,GAAK,CAAC,EAAE,CAAC,EAAG,EAAE,CAAC,CAAC,GAAKqE,EAAOA,EAAK,CAAC,EAAI,GACnDr+B,EAAE,EAAIkG,EAAE,CAAC,EAAI8zB,GAAK,CAAC,EAAE,CAAC,EAAG,EAAE,CAAC,CAAC,GAAKqE,EAAOA,EAAK,CAAC,EAAI,EACrD,KAAO,CACL,MAAMC,EAAMF,EAAG,WACTG,EAAOH,EAAG,YAAcA,EAAG,YAAY,CAAC,EAAI,EAC5CI,EAAOJ,EAAG,YAAcA,EAAG,YAAY,CAAC,EAAI,EAC5Cl+B,EAAI,KAAK,OAAO,EAAI,EAAI,EACxBu+B,EAAK,KAAK,OAAO,EAAI1E,GACrB2E,EAAK,KAAK,KAAK,KAAK,IAAI,EAAG,EAAIx+B,EAAIA,CAAC,CAAC,EAC3C,IAAIy+B,EAAKD,EAAK,KAAK,IAAID,CAAE,EACrBG,EAAKF,EAAK,KAAK,IAAID,CAAE,EACrBI,EAAK3+B,EACLk+B,EAAG,OACDA,EAAG,KAAK,CAAC,IAAGO,EAAK,KAAK,IAAIA,CAAE,EAAI,KAAK,KAAKP,EAAG,KAAK,CAAC,CAAC,GACpDA,EAAG,KAAK,CAAC,IAAGQ,EAAK,KAAK,IAAIA,CAAE,EAAI,KAAK,KAAKR,EAAG,KAAK,CAAC,CAAC,GACpDA,EAAG,KAAK,CAAC,IAAGS,EAAK,KAAK,IAAIA,CAAE,EAAI,KAAK,KAAKT,EAAG,KAAK,CAAC,CAAC,IAE1D,MAAMr5B,EAAIi1B,GAAKuE,EAAMC,CAAI,EAIzB,GAHAx+B,EAAE,EAAIkG,EAAE,CAAC,EAAIy4B,EAAK55B,EAAIu5B,EAAI,CAAC,EAC3Bt+B,EAAE,EAAIkG,EAAE,CAAC,EAAI04B,EAAK75B,EAAIu5B,EAAI,CAAC,EAC3Bt+B,EAAE,EAAIkG,EAAE,CAAC,EAAI24B,EAAK95B,EAAIu5B,EAAI,CAAC,EACvBF,EAAG,UAAYA,EAAG,SAAU,CAC9B,MAAMtgB,EAAKkc,GAAKoE,EAAG,SAAUA,EAAG,QAAQ,EACxCp+B,EAAE,IAAM2+B,EAAK7gB,EACb9d,EAAE,IAAM4+B,EAAK9gB,EACb9d,EAAE,IAAM6+B,EAAK/gB,CACf,CACF,CACA,CACE,MAAMghB,EAAS,KAAK,OAAOV,EAAG,YAAY,EAC1C,GAAIU,EACF9+B,EAAE,GAAK8+B,EAAO,CAAC,EACf9+B,EAAE,GAAK8+B,EAAO,CAAC,EACf9+B,EAAE,GAAK8+B,EAAO,CAAC,MACV,CACL,MAAMC,EAAO,KAAK,cAAc,KAAMj6B,GAAMA,EAAE,KAAOs5B,EAAG,YAAY,EACpE,GAAIW,GAAQA,EAAK,cAAe,CAC9B/+B,EAAE,MAAQ,GACV,MACF,CACF,CACF,CACA,GAAI,KAAK,KAAK,UAAW,CACvB,MAAMg/B,EAAK,KAAK,KAAK,UACfC,EAAS,KAAK,OAAOD,EAAG,EAAE,EAChC,GAAIC,EAAQ,CACV,MAAMC,EAAKF,EAAG,MACR18B,EAAI,KAAK,gBACTpC,EAAIg/B,EAAK,EAAI58B,EAAI48B,EAAKA,EAAK,EAE3BzP,GADIuP,EAAG,OAAO,CAAC,GAAKA,EAAG,OAAO,CAAC,EAAIA,EAAG,OAAO,CAAC,GAAK9+B,GACzC65B,GACVwE,EAAOH,EAAG,YAAcA,EAAG,YAAY,CAAC,EAAI,EAC5CI,EAAOJ,EAAG,YAAcA,EAAG,YAAY,CAAC,EAAI,EAC5C3sB,EAAM+sB,EAAO,EAAIA,EAAOD,EAC9Bv+B,EAAE,EAAIi/B,EAAO,CAAC,EAAI,KAAK,IAAIxP,CAAG,EAAIhe,EAClCzR,EAAE,EAAIi/B,EAAO,CAAC,EAAI,KAAK,IAAIxP,CAAG,EAAIhe,EAClCzR,EAAE,EAAIi/B,EAAO,CAAC,EACd,MAAMpzB,EAAI,KAAK,OAAO,EACtB7L,EAAE,IAAMg/B,EAAG,SAAS,CAAC,GAAKA,EAAG,SAAS,CAAC,EAAIA,EAAG,SAAS,CAAC,GAAKnzB,EAC7D7L,EAAE,IAAMg/B,EAAG,SAAS,CAAC,GAAKA,EAAG,SAAS,CAAC,EAAIA,EAAG,SAAS,CAAC,GAAKnzB,EAC7D7L,EAAE,IAAMg/B,EAAG,SAAS,CAAC,GAAKA,EAAG,SAAS,CAAC,EAAIA,EAAG,SAAS,CAAC,GAAKnzB,CAC/D,CACF,CACA,MAAMszB,EAAI,KAAK,KACTC,EAAW,KAAK,IAAI,OAAS,EAC7BC,EAAU,KAAK,IAAI,MAAQ,EAIjC,GAHAr/B,EAAE,KAAOm/B,EAAE,KAAO,KAAK,IAAI,KAAMlF,GAAQkF,EAAE,KAAK,IAAKA,EAAE,KAAK,IAAKA,EAAE,KAAK,GAAG,EAAI,KAAK,WAAW,EAAI,EACnGn/B,EAAE,SAAWm/B,EAAE,KAAOlF,GAAQkF,EAAE,KAAK,IAAKA,EAAE,KAAK,IAAKA,EAAE,KAAK,GAAG,EAAIE,EAAUA,EAC9Er/B,EAAE,KAAOA,EAAE,SACPm/B,EAAE,MAAO,CACX,MAAMlD,EAAKkD,EAAE,MAAM,IACbjD,EAAKiD,EAAE,MAAM,IACbznB,EAAI,KAAK,OAAO,EACtB1X,EAAE,OAASi8B,EAAG,CAAC,GAAKC,EAAG,CAAC,EAAID,EAAG,CAAC,GAAKvkB,GAAK,IAC1C1X,EAAE,OAASi8B,EAAG,CAAC,GAAKC,EAAG,CAAC,EAAID,EAAG,CAAC,GAAKvkB,GAAK,IAC1C1X,EAAE,OAASi8B,EAAG,CAAC,GAAKC,EAAG,CAAC,EAAID,EAAG,CAAC,GAAKvkB,GAAK,GAC5C,MACE1X,EAAE,MAAQA,EAAE,MAAQA,EAAE,MAAQ,EAiBhC,GAfI,KAAK,IAAI,QACXA,EAAE,MAAQ,KAAK,IAAI,MAAM,CAAC,EAC1BA,EAAE,MAAQ,KAAK,IAAI,MAAM,CAAC,EAC1BA,EAAE,MAAQ,KAAK,IAAI,MAAM,CAAC,GAE5BA,EAAE,EAAIA,EAAE,MACRA,EAAE,EAAIA,EAAE,MACRA,EAAE,EAAIA,EAAE,MACRA,EAAE,WAAam/B,EAAE,MAAQnF,GAAKmF,EAAE,MAAM,IAAKA,EAAE,MAAM,GAAG,EAAI,GAAK,KAAK,WACpEn/B,EAAE,MAAQA,EAAE,UACRm/B,EAAE,WACJn/B,EAAE,IAAMg6B,GAAKmF,EAAE,SAAS,IAAI,CAAC,EAAGA,EAAE,SAAS,IAAI,CAAC,CAAC,EAAIC,EACrDp/B,EAAE,IAAMg6B,GAAKmF,EAAE,SAAS,IAAI,CAAC,EAAGA,EAAE,SAAS,IAAI,CAAC,CAAC,EAAIC,EACrDp/B,EAAE,IAAMg6B,GAAKmF,EAAE,SAAS,IAAI,CAAC,EAAGA,EAAE,SAAS,IAAI,CAAC,CAAC,EAAIC,GAEnDD,EAAE,kBAAmB,CACvB,MAAMG,EAAKH,EAAE,kBACPI,EAAMD,EAAG,UAAYhF,GAAUgF,EAAG,YAAa,KAAK,aAAe,CAAC,EAAI,EACxExhB,EAAKkc,GAAKsF,EAAG,SAAUA,EAAG,QAAQ,EAAIF,EAAWG,EACjD7nB,EAAI,KAAK,SAAW4nB,EAAG,WAAa,GACpCE,EAAKlE,GAAUt7B,EAAE,EAAIs/B,EAAG,MAAQA,EAAG,OAAQt/B,EAAE,EAAIs/B,EAAG,MAAQA,EAAG,OAAQ5nB,EAAI1X,EAAE,MAAQs/B,EAAG,UAAY,GAAI,CAAC,EAC/Gt/B,EAAE,IAAMw/B,EAAG,CAAC,EAAI1hB,EAChB9d,EAAE,IAAMw/B,EAAG,CAAC,EAAI1hB,EAChB9d,EAAE,IAAMw/B,EAAG,CAAC,EAAI1hB,CAClB,CACIqhB,EAAE,WACJn/B,EAAE,IAAMg6B,GAAKmF,EAAE,SAAS,IAAI,CAAC,EAAGA,EAAE,SAAS,IAAI,CAAC,CAAC,GAE/CA,EAAE,kBACJn/B,EAAE,OAASg6B,GAAKmF,EAAE,gBAAgB,IAAI,CAAC,EAAGA,EAAE,gBAAgB,IAAI,CAAC,CAAC,GAEpE,MAAMM,EAAI,KAAK,IAcf,GAbIA,EAAE,SACJz/B,EAAE,QAAUg6B,GAAKyF,EAAE,OAAO,QAASA,EAAE,OAAO,OAAO,EACnDz/B,EAAE,OAASg6B,GAAKyF,EAAE,OAAO,SAAUA,EAAE,OAAO,QAAQ,EACpDz/B,EAAE,SAAWg6B,GAAKyF,EAAE,OAAO,SAAUA,EAAE,OAAO,QAAQ,EAAIz/B,EAAE,KAAO+5B,IAEjE0F,EAAE,WACJz/B,EAAE,SAAWg6B,GAAKyF,EAAE,SAAS,QAASA,EAAE,SAAS,OAAO,EACxDz/B,EAAE,UAAY,KAAK,OAAO,GAAKy/B,EAAE,SAAS,UAAY1F,KAEpD0F,EAAE,UACJz/B,EAAE,SAAWg6B,GAAKyF,EAAE,QAAQ,QAASA,EAAE,QAAQ,OAAO,EACtDz/B,EAAE,UAAY,KAAK,OAAO,GAAKy/B,EAAE,QAAQ,UAAY1F,KAEnD0F,EAAE,WAAW,OAAQ,CACvB,MAAMvT,EAAKuT,EAAE,WAAW,CAAC,EACzBz/B,EAAE,UAAYg6B,GAAK9N,EAAG,SAAUA,EAAG,QAAQ,EAC3ClsB,EAAE,UAAYg6B,GAAK9N,EAAG,SAAUA,EAAG,QAAQ,CAC7C,CAOA,GANI,KAAK,WAAa,IACpBlsB,EAAE,MAAQ,KAAK,gBAAkB,cAAgB,KAAK,MAAM,KAAK,OAAO,EAAI,KAAK,UAAU,EAAI,GAEjGA,EAAE,GAAKA,EAAE,EACTA,EAAE,GAAKA,EAAE,EACTA,EAAE,GAAKA,EAAE,EACLA,EAAE,MACJ,QAASsC,EAAI,EAAGA,EAAItC,EAAE,MAAM,OAAQsC,GAAK,EACvCtC,EAAE,MAAMsC,CAAC,EAAItC,EAAE,EACfA,EAAE,MAAMsC,EAAI,CAAC,EAAItC,EAAE,EACnBA,EAAE,MAAMsC,EAAI,CAAC,EAAItC,EAAE,CAGzB,CAEA,eAAeA,EAAGyjB,EAAI,CAEpB,GADAzjB,EAAE,KAAOyjB,EACLzjB,EAAE,KAAOA,EAAE,KAAM,CACnBA,EAAE,MAAQ,GACV,MACF,CACA,MAAM0/B,EAAK1/B,EAAE,IAAMA,EAAE,KACfy/B,EAAI,KAAK,IACf,GAAIA,EAAE,WACJz/B,EAAE,IAAMy/B,EAAE,SAAS,QAAQ,CAAC,EAAIhc,EAChCzjB,EAAE,IAAMy/B,EAAE,SAAS,QAAQ,CAAC,EAAIhc,EAChCzjB,EAAE,IAAMy/B,EAAE,SAAS,QAAQ,CAAC,EAAIhc,EAC5Bgc,EAAE,SAAS,KAAO,GAAG,CACvB,MAAM56B,EAAI,KAAK,IAAI,CAAC46B,EAAE,SAAS,KAAOhc,CAAE,EACxCzjB,EAAE,IAAM6E,EACR7E,EAAE,IAAM6E,EACR7E,EAAE,IAAM6E,CACV,CAEE46B,EAAE,kBACJz/B,EAAE,SAAWy/B,EAAE,gBAAgB,MAAM,CAAC,GAAK,GAAKhc,EAC5Cgc,EAAE,gBAAgB,KAAO,IAAGz/B,EAAE,QAAU,KAAK,IAAI,CAACy/B,EAAE,gBAAgB,KAAOhc,CAAE,IAEnF,UAAW/L,KAAK+nB,EAAE,WAAY,CAC5B,MAAME,EAAKjoB,EAAE,WAAa,EACpB8nB,EAAKlE,GACTt7B,EAAE,GAAK0X,EAAE,MACT1X,EAAE,GAAK0X,EAAE,MACT,KAAK,QAAUA,EAAE,MAAQioB,EAAK3/B,EAAE,UAChC,CACF,EACAA,EAAE,IAAMw/B,EAAG,CAAC,EAAIx/B,EAAE,UAAY0X,EAAE,KAAK,CAAC,EAAI+L,EAC1CzjB,EAAE,IAAMw/B,EAAG,CAAC,EAAIx/B,EAAE,UAAY0X,EAAE,KAAK,CAAC,EAAI+L,EAC1CzjB,EAAE,IAAMw/B,EAAG,CAAC,EAAIx/B,EAAE,UAAY0X,EAAE,KAAK,CAAC,EAAI+L,CAC5C,CACA,UAAWmc,KAAMH,EAAE,QAAS,CAC1B,MAAM1C,EAAK,KAAK,OAAO6C,EAAG,EAAE,EAC5B,GAAI,CAAC7C,EAAI,SACT,MAAM9H,EAAK8H,EAAG,CAAC,EAAI6C,EAAG,OAAO,CAAC,EAAI5/B,EAAE,EAC9Bk1B,EAAK6H,EAAG,CAAC,EAAI6C,EAAG,OAAO,CAAC,EAAI5/B,EAAE,EAC9B6/B,EAAO,KAAK,MAAM5K,EAAIC,CAAE,EAE9B,GADI2K,EAAO,MACPD,EAAG,UAAY,GAAKC,EAAOD,EAAG,UAAW,SAC7C,MAAME,EAAUF,EAAG,UAAY,EAAI,EAAIC,EAAOD,EAAG,UAAY,EACvDngC,EAAImgC,EAAG,MAAQE,EAAUrc,EAAK,KAAK,IAAI,EAAGoc,CAAI,EACpD7/B,EAAE,IAAMi1B,EAAKx1B,EACbO,EAAE,IAAMk1B,EAAKz1B,CACf,CACA,UAAWQ,KAAKw/B,EAAE,OAAQ,CACxB,MAAM94B,EAAO,KAAK,OAAO1G,EAAE,EAAE,GAAK,CAAC,EAAG,EAAG,CAAC,EACpCg1B,EAAKj1B,EAAE,GAAK2G,EAAK,CAAC,EAAI1G,EAAE,OAAO,CAAC,GAChCi1B,EAAKl1B,EAAE,GAAK2G,EAAK,CAAC,EAAI1G,EAAE,OAAO,CAAC,GAChC4/B,EAAO,KAAK,MAAM5K,EAAIC,CAAE,EAC9B,GAAI2K,EAAO,KAAM,SACjB,MAAM9+B,EAAOd,EAAE,cAAgBA,EAAE,cAC3B4L,EAAI9K,EAAO,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI8+B,EAAO5/B,EAAE,eAAiBc,CAAI,CAAC,EAAI,EAC3Eg/B,EAAK9/B,EAAE,UAAYq6B,GAAUr6B,EAAE,YAAa,KAAK,aAAe,CAAC,EAAI,EACrE6qB,EAAQ7qB,EAAE,YAAcA,EAAE,WAAaA,EAAE,YAAc4L,EAC7D7L,EAAE,IAAM,CAACk1B,EAAK2K,EAAO/U,EAAQrH,EAAKsc,EAClC//B,EAAE,IAAMi1B,EAAK4K,EAAO/U,EAAQrH,EAAKsc,CACnC,CACA,UAAWC,KAAMP,EAAE,MAAO,CACxB,MAAM5+B,EAAIm/B,EAAG,YAAc,EACrBR,EAAKlE,GAAUt7B,EAAE,GAAK,IAAOa,EAAGb,EAAE,GAAK,IAAOa,EAAG,KAAK,QAAU,GAAKm/B,EAAG,KAAO,WAAa,EAAI,CAAC,EACvG,GAAIA,EAAG,SAAW,WAChB,QAAS19B,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMoV,GAAK8nB,EAAGl9B,CAAC,EAAI,GAAK,EAClB6T,EAAM6pB,EAAG,SAAS19B,CAAC,GAAK09B,EAAG,SAAS19B,CAAC,EAAI09B,EAAG,SAAS19B,CAAC,GAAKoV,EAC7DpV,IAAM,EAAGtC,EAAE,GAAKmW,EACX7T,IAAM,EAAGtC,EAAE,GAAKmW,EACpBnW,EAAE,GAAKmW,CACd,SACS6pB,EAAG,SAAW,QAAS,CAChC,MAAMtoB,GAAK8nB,EAAG,CAAC,EAAI,GAAK,EAClBxC,EAAMgD,EAAG,SAAS,CAAC,GAAKA,EAAG,SAAS,CAAC,EAAIA,EAAG,SAAS,CAAC,GAAKtoB,EAC3DvU,EAAM,KAAK,MAAMnD,EAAE,GAAIA,EAAE,EAAE,GAAK,EACtCA,EAAE,GAAKA,EAAE,GAAKmD,EAAM65B,EACpBh9B,EAAE,GAAKA,EAAE,GAAKmD,EAAM65B,CACtB,CACF,CAQA,GAPAh9B,EAAE,IAAMA,EAAE,GAAKyjB,EACfzjB,EAAE,IAAMA,EAAE,GAAKyjB,EACfzjB,EAAE,IAAMA,EAAE,GAAKyjB,EACfzjB,EAAE,KAAOA,EAAE,OAASyjB,EACpBzjB,EAAE,EAAIA,EAAE,GACRA,EAAE,EAAIA,EAAE,GACRA,EAAE,EAAIA,EAAE,GACJy/B,EAAE,OAAQ,CACZ,MAAMQ,EAAK,KAAK,QAAUjgC,EAAE,QAAU+5B,GAAM/5B,EAAE,SACxC0D,EAAI+7B,EAAE,OAAO,KACnBz/B,EAAE,GAAK,KAAK,IAAIigC,CAAE,EAAIjgC,EAAE,OAAS0D,EAAE,CAAC,EACpC1D,EAAE,GAAK,KAAK,IAAIigC,CAAE,EAAIjgC,EAAE,OAAS0D,EAAE,CAAC,EACpC1D,EAAE,GAAK,KAAK,IAAIigC,EAAK,EAAG,EAAIjgC,EAAE,OAAS0D,EAAE,CAAC,CAC5C,CACA,IAAIf,EAAO3C,EAAE,SACb,GAAIy/B,EAAE,WAAY,CAChB,MAAMS,EAAKT,EAAE,WACP1+B,EAAOm/B,EAAG,QAAUA,EAAG,UACvBr0B,EAAI9K,EAAO,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI2+B,EAAKQ,EAAG,WAAan/B,CAAI,CAAC,EAAI2+B,GAAMQ,EAAG,UAAY,EAAI,EACrGv9B,GAAQu9B,EAAG,YAAcA,EAAG,SAAWA,EAAG,YAAcr0B,CAC1D,CACA,GAAI4zB,EAAE,QAAS,CACb,MAAMQ,EAAK,KAAK,QAAUjgC,EAAE,SAAW+5B,GAAM/5B,EAAE,UACzCmgC,EAAKV,EAAE,QACP7gB,GAAOuhB,EAAG,SAAWA,EAAG,UAAY,EACpCvV,GAAOuV,EAAG,SAAWA,EAAG,UAAY,EAC1Cx9B,GAAQic,EAAM,KAAK,IAAIqhB,CAAE,EAAIrV,CAC/B,CAEA,GADA5qB,EAAE,KAAO2C,EACL88B,EAAE,YAAa,CACjB,MAAMvN,EAAKuN,EAAE,YACP1+B,EAAOmxB,EAAG,QAAUA,EAAG,UACvBrmB,EAAI9K,EAAO,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI2+B,EAAKxN,EAAG,WAAanxB,CAAI,CAAC,EAAI2+B,GAAMxN,EAAG,UAAY,EAAI,EAC/FkO,EAAKlO,EAAG,YAAc,CAAClyB,EAAE,MAAOA,EAAE,MAAOA,EAAE,KAAK,EACtDA,EAAE,EAAIogC,EAAG,CAAC,GAAKlO,EAAG,SAAS,CAAC,EAAIkO,EAAG,CAAC,GAAKv0B,EACzC7L,EAAE,EAAIogC,EAAG,CAAC,GAAKlO,EAAG,SAAS,CAAC,EAAIkO,EAAG,CAAC,GAAKv0B,EACzC7L,EAAE,EAAIogC,EAAG,CAAC,GAAKlO,EAAG,SAAS,CAAC,EAAIkO,EAAG,CAAC,GAAKv0B,CAC3C,CACA,IAAIpF,EAAIzG,EAAE,UACV,GAAIy/B,EAAE,UAAW,CACf,MAAMlI,EAAKkI,EAAE,UAAU,OACjBY,EAAKZ,EAAE,UAAU,QACnBlI,EAAK,GAAKmI,EAAKnI,IAAI9wB,GAAKi5B,EAAKnI,GAC7B8I,EAAK,GAAKX,EAAKW,IAAI55B,GAAK,KAAK,IAAI,GAAI,EAAIi5B,IAAO,EAAIW,EAAG,EAC7D,MAAYZ,EAAE,cACRC,EAAK,GAAKj5B,GAAKi5B,EAAK,GACfA,EAAK,MAAMj5B,IAAM,EAAIi5B,GAAM,MAEtC,GAAID,EAAE,YAAa,CACjB,MAAMa,EAAKb,EAAE,YACP1+B,EAAOu/B,EAAG,QAAUA,EAAG,UACvBz0B,EAAI9K,EAAO,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI2+B,EAAKY,EAAG,WAAav/B,CAAI,CAAC,EAAI2+B,GAAMY,EAAG,UAAY,EAAI,EACrG75B,GAAK65B,EAAG,YAAcA,EAAG,SAAWA,EAAG,YAAcz0B,CACvD,CACA,GAAI4zB,EAAE,SAAU,CACd,MAAMQ,EAAK,KAAK,QAAUjgC,EAAE,SAAW+5B,GAAM/5B,EAAE,UACzCugC,EAAKd,EAAE,SACP7gB,GAAO2hB,EAAG,SAAWA,EAAG,UAAY,EACpC3V,GAAO2V,EAAG,SAAWA,EAAG,UAAY,EAC1C95B,GAAKmY,EAAM,KAAK,IAAIqhB,CAAE,EAAIrV,CAC5B,CAKA,GAJA5qB,EAAE,MAAQ,KAAK,IAAI,EAAGyG,CAAC,EACnB,KAAK,WAAa,GAAK,KAAK,gBAAkB,gBAChDzG,EAAE,MAAQ,KAAK,IAAI,KAAK,WAAa,EAAG,KAAK,MAAM0/B,EAAK,KAAK,UAAU,CAAC,GAEtE1/B,EAAE,MAAO,CACX,MAAMs9B,EAAKt9B,EAAE,MACb,QAASsC,EAAIg7B,EAAG,OAAS,EAAGh7B,GAAK,EAAGA,GAAK,EACvCg7B,EAAGh7B,CAAC,EAAIg7B,EAAGh7B,EAAI,CAAC,EAChBg7B,EAAGh7B,EAAI,CAAC,EAAIg7B,EAAGh7B,EAAI,CAAC,EACpBg7B,EAAGh7B,EAAI,CAAC,EAAIg7B,EAAGh7B,EAAI,CAAC,EAEtBg7B,EAAG,CAAC,EAAIt9B,EAAE,EACVs9B,EAAG,CAAC,EAAIt9B,EAAE,EACVs9B,EAAG,CAAC,EAAIt9B,EAAE,CACZ,CACF,CAEA,OAAOqO,EAAI,CACT,MAAM0uB,EAAK,KAAK,cAAc,KAAMj4B,GAAMA,EAAE,KAAOuJ,CAAE,EACrD,OAAK0uB,EACDA,EAAG,cACA,KAAK,QACH,CAAC,KAAK,QAAQ,EAAIA,EAAG,OAAO,CAAC,EAAG,KAAK,QAAQ,EAAIA,EAAG,OAAO,CAAC,EAAGA,EAAG,OAAO,CAAC,CAAC,EADxD,KAGrBA,EAAG,OALM,IAMlB,CAEA,QAAQtZ,EAAI+c,EAAO,CACjB,GAAI,OAAK,QAAU,CAAC,KAAK,SAEzB,IADA,KAAK,YAAY,EACb,CAAC,KAAK,UACR,KAAK,QAAU,GACX,KAAK,UAAY,GAAG,CACtB,MAAM3E,EAAO,mBACP4E,EAAQ,KAAK,IAAI,IAAK,KAAK,MAAM,KAAK,UAAY5E,CAAI,CAAC,EAC7D,QAAS,EAAI,EAAG,EAAI4E,EAAO,IAAK,KAAK,MAAM5E,CAAI,CACjD,CAEF,KAAK,MAAMpY,EAAI+c,CAAK,EACtB,CACA,MAAM/c,EAAI+c,EAAO,CACf,KAAK,SAAW/c,EAChB,MAAM+W,EAAQgG,GAAS,OAAO,SAASA,EAAM,KAAK,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGA,EAAM,KAAK,CAAC,EAAI,EAC9F,KAAK,YAAchG,EACnB,UAAW4D,KAAM,KAAK,SAAU,CAC9B,GAAIA,EAAG,cAAgB,GAAK,CAACA,EAAG,OAAQ,CACtCA,EAAG,OAAS,GACZ,QAAS97B,EAAI,EAAGA,EAAI,KAAK,IAAI87B,EAAG,cAAe,KAAK,QAAQ,EAAG97B,IAAK,KAAK,MAAM87B,CAAE,CACnF,CACA,GAAIA,EAAG,KAAM,CAEX,MAAM/+B,EAAM,KAAK,IAAI,KAAK,SAAU,IAAQ,EAC5C,IAAI8M,EAAO,EACX,QAAS7J,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,IAAS,KAAK,KAAKA,CAAC,EAAE,OAAO6J,IACnE,IAAIu0B,EAAS,KAAK,IAAIrhC,EAAM8M,EAAM,GAAG,EACrC,KAAOu0B,KAAW,GAAG,KAAK,MAAMtC,CAAE,EAClC,QACF,CACA,GAAIA,EAAG,YAAa,CAClB,MAAMvyB,EAAIyuB,GAAU8D,EAAG,YAAa5D,CAAK,EACzC,GAAI4D,EAAG,KAAO,EAAG,CACf,MAAMuC,EAAQvC,EAAG,KAAOvyB,GAAK,KAAK,IAAI,UAAY,OAAS,KAAK,IAAI,QAAU,IAAM,KAAK,IAAI,WAAa,OAAS,KAAK,IAAI,SAAW,GACvI,GAAI,EAAE80B,EAAQ,GAAI,SAClBvC,EAAG,QAAUA,EAAG,QAAU,GAAKuC,EAAQld,EACvC,IAAIyb,EAAK,KAAK,MAAMd,EAAG,MAAM,EAC7B,GAAIc,EAAK,EAAG,CACVd,EAAG,QAAUc,EACTA,EAAK,KAAK,WAAUA,EAAK,KAAK,UAClC,QAAS58B,EAAI,EAAGA,EAAI48B,EAAI58B,IAAK,KAAK,MAAM87B,CAAE,CAC5C,CACF,KAAO,CAEL,MAAMwC,EAAS,KAAK,MAAM,KAAK,IAAI,KAAK,SAAU,IAAQ,EAAI/0B,CAAC,EAC/D,IAAIM,EAAO,EACX,QAAS7J,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,IAAS,KAAK,KAAKA,CAAC,EAAE,OAAO6J,IACnE,IAAIu0B,EAAS,KAAK,IAAIE,EAASz0B,EAAM,GAAG,EACxC,KAAOu0B,KAAW,GAAG,KAAK,MAAMtC,CAAE,CACpC,CACA,QACF,CACA,MAAMyC,EAAOzC,EAAG,MAAQ,KAAK,IAAI,UAAY,OAAS,KAAK,IAAI,QAAU,IAAM,KAAK,IAAI,WAAa,OAAS,KAAK,IAAI,SAAW,GAClI,GAAI,EAAEyC,EAAO,GAAI,SACjBzC,EAAG,QAAUA,EAAG,QAAU,GAAKyC,EAAOpd,EACtC,IAAIjY,EAAI,KAAK,MAAM4yB,EAAG,MAAM,EAC5B,GAAI5yB,EAAI,EAAG,CACT4yB,EAAG,QAAU5yB,EACTA,EAAI,KAAK,WAAUA,EAAI,KAAK,UAChC,QAASlJ,EAAI,EAAGA,EAAIkJ,EAAGlJ,IAAK,KAAK,MAAM87B,CAAE,CAC3C,CACF,CACA,MAAMF,EAAO,KAAK,KAClB,QAAS,EAAI,EAAG,EAAIA,EAAK,OAAQ,IAC3BA,EAAK,CAAC,EAAE,OAAO,KAAK,eAAeA,EAAK,CAAC,EAAGza,CAAE,CAEtD,CAGA,OAAOiN,EAAUroB,EAAOC,EAAQuK,EAAOC,EAAO,CAE5C,GADI,CAAC,KAAK,QAAU,CAAC,KAAK,SACtB,CAAC,KAAK,UAAU,OAAQ,OAC5B,MAAM8M,EAAK,KAAK,GACX,KAAK,OAAO,KAAK,cAAcA,CAAE,EACtC,MAAMkhB,EAAQ,KAAK,UAAY,KAAK,SAAS,OAAS,YAAc,KAAK,SAAW,KAC9EC,EAAc,KAAK,UAAY,KAAK,SAAS,OAAS,cAAgB,KAAK,SAAW,KACtFxD,EAAOnB,GAAqB,KAAK,SAAU,KAAK,aAAa,EAC7D4E,EAAS,GACT9C,EAAO,KAAK,KAClB,IAAI/xB,EAAO,EACX,QAAS7J,EAAI,EAAGA,EAAI47B,EAAK,OAAQ57B,IAAS47B,EAAK57B,CAAC,EAAE,OAAO6J,IACzD,GAAIA,IAAS,EAAG,OAChB,MAAM80B,EAAY90B,EAAOoxB,EACnB2D,EAAOD,EAAYD,GACrB,CAAC,KAAK,OAAS,KAAK,MAAM,OAASE,KAAM,KAAK,MAAQ,IAAI,aAAa,KAAK,IAAIA,EAAM,IAAI,CAAC,GAC/F,MAAM98B,EAAO,KAAK,MAClB,IAAIyH,EAAI,EACR,MAAMs1B,EAAS,KAAK,IAAI,YAAc,EAChCC,EAAW,KAAK,SAChBC,EAAW,KAAK,gBAAkB,KAAK,YAAc,GACrDC,EAAW,KAAK,gBAAkB,KAAK,YAAc,GACrDvzB,EAAM,KAAK,IAAI,KAAK,MAAM,EAC1BC,EAAM,KAAK,IAAI,KAAK,MAAM,EAC1B9D,EAAK,KAAK,QACVC,EAAK,KAAK,QACVnE,EAAK,KAAK,OACVC,EAAK,KAAK,OACVs7B,EAAU,CAAC5U,EAAIC,IAAO,CAC1B,MAAM7mB,EAAK4mB,EAAK3mB,EACVF,GAAK8mB,EAAK3mB,EAChB,MAAO,CAACiE,EAAKnE,EAAKgI,EAAMjI,GAAKkI,EAAK8E,GAAS3I,EAAKpE,EAAKiI,EAAMlI,GAAKiI,EAAI,CACtE,EACA,QAASzL,EAAI,EAAGA,EAAI47B,EAAK,OAAQ57B,IAAK,CACpC,MAAMtC,EAAIk+B,EAAK57B,CAAC,EAChB,GAAKtC,EAAE,MACP,QAASa,EAAI,EAAGA,EAAI08B,EAAM18B,IAAK,CAC7B,IAAI8rB,GAAK3sB,EAAE,EACP4sB,GAAK5sB,EAAE,EACPwhC,GAAW,EACXC,GAAU,EACd,GAAIX,GAAS9gC,EAAE,MAAO,CACpB2sB,GAAK3sB,EAAE,MAAMa,EAAI,CAAC,EAClB+rB,GAAK5sB,EAAE,MAAMa,EAAI,EAAI,CAAC,EACtB,MAAM6W,GAAI6lB,EAAO,EAAI18B,GAAK08B,EAAO,GAAK,EACtCiE,GAAW,EAAI9pB,GACf+pB,GAAU,EAAI/pB,GAAI,GACpB,CACA,MAAM9V,GAAI2/B,EAAQ5U,GAAIC,EAAE,EACxB,IAAI8U,GAAM1hC,EAAE,IACR2hC,GAAeN,EACfO,GAAeN,EACnB,GAAIP,EAAa,CACf,MAAMc,GAAKN,EAAQvhC,EAAE,EAAIA,EAAE,GAAIA,EAAE,EAAIA,EAAE,EAAE,EACzC0hC,GAAMvF,GAAoB0F,GAAG,CAAC,EAAIjgC,GAAE,CAAC,EAAGigC,GAAG,CAAC,EAAIjgC,GAAE,CAAC,CAAC,EACpD,MAAMkgC,GAAShG,GACb,KAAK,MAAM97B,EAAE,GAAIA,EAAE,EAAE,EACrB+gC,EAAY,OACZA,EAAY,UACZA,EAAY,SACd,EACAa,GAAeN,EAAWQ,EAC5B,CACA19B,EAAKyH,GAAG,EAAIjK,GAAE,CAAC,EACfwC,EAAKyH,GAAG,EAAIjK,GAAE,CAAC,EACfwC,EAAKyH,GAAG,EAAI,EACZzH,EAAKyH,GAAG,EAAI,KAAK,IAAI7L,EAAE,IAAI,EAAIohC,EAAWK,GAC1Cr9B,EAAKyH,GAAG,EAAI61B,GACZt9B,EAAKyH,GAAG,EAAI7L,EAAE,EAAImhC,EAClB/8B,EAAKyH,GAAG,EAAI7L,EAAE,EAAImhC,EAClB/8B,EAAKyH,GAAG,EAAI7L,EAAE,EAAImhC,EAClB/8B,EAAKyH,GAAG,EAAI7L,EAAE,MAAQwhC,GACtBp9B,EAAKyH,GAAG,EAAI81B,GACZv9B,EAAKyH,GAAG,EAAI+1B,GACZx9B,EAAKyH,GAAG,EAAI7L,EAAE,KAChB,CACF,CACA,MAAMupB,EAAO,KAAK,MAClB3J,EAAG,WAAW2J,EAAK,IAAI,EACvB3J,EAAG,gBAAgB,KAAK,IAAI,EAC5BA,EAAG,WAAWA,EAAG,aAAc,KAAK,KAAK,EACzCA,EAAG,WAAWA,EAAG,aAAcxb,EAAK,SAAS,EAAGyH,CAAC,EAAG+T,EAAG,YAAY,EACnEA,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAY,KAAK,QAAQ,KAAK,EAChDA,EAAG,UAAU2J,EAAK,OAAQ,CAAC,EAC3B3J,EAAG,iBAAiB2J,EAAK,OAAQ,GAAOmH,CAAQ,EAChD,MAAMqR,EAAa,KAAK,SAAW,KAAK,WAAa,KAAK,UAAU,MAEpE,GADIxY,EAAK,YAAY3J,EAAG,UAAU2J,EAAK,WAAYwY,EAAa,EAAI,CAAC,EACjEA,EAAY,CACdniB,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAY,KAAK,UAAU,KAAK,EAC9C2J,EAAK,WAAW3J,EAAG,UAAU2J,EAAK,UAAW,CAAC,EAClD,MAAMyY,EAAc,KAAK,QAAU,WAEnC,GADIzY,EAAK,gBAAgB3J,EAAG,UAAU2J,EAAK,eAAgByY,EAAc,EAAI,CAAC,EAC1EA,EAAa,CACf,MAAMC,EAAKriB,EAAG,oBAAsBvX,EAC9B65B,EAAKtiB,EAAG,qBAAuBtX,EACrCsX,EAAG,gBAAgBA,EAAG,YAAa,IAAI,EACvCA,EAAG,cAAcA,EAAG,QAAQ,EACvB,KAAK,UAQRA,EAAG,YAAYA,EAAG,WAAY,KAAK,SAAS,GAP5C,KAAK,UAAYA,EAAG,cAAc,EAClCA,EAAG,YAAYA,EAAG,WAAY,KAAK,SAAS,EAC5CA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAChEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAChEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,GAIrEA,EAAG,eAAeA,EAAG,WAAY,EAAGA,EAAG,KAAM,EAAG,EAAGqiB,EAAIC,EAAI,CAAC,EACxD3Y,EAAK,UAAU3J,EAAG,UAAU2J,EAAK,SAAU,CAAC,EAC5CA,EAAK,eAAe3J,EAAG,UAAU2J,EAAK,cAAe0Y,EAAIC,CAAE,EAC3D3Y,EAAK,iBAAiB3J,EAAG,UAAU2J,EAAK,gBAAiB,KAAK,eAAiB,GAAI,CACzF,MACE3J,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAY,KAAK,QAAQ,KAAK,EAC5C2J,EAAK,UAAU3J,EAAG,UAAU2J,EAAK,SAAU,CAAC,CAEpD,MAAWA,EAAK,YACd3J,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAY,KAAK,QAAQ,KAAK,EAChDA,EAAG,UAAU2J,EAAK,UAAW,CAAC,EAC9B3J,EAAG,cAAcA,EAAG,QAAQ,EAC5BA,EAAG,YAAYA,EAAG,WAAY,KAAK,QAAQ,KAAK,EAC5C2J,EAAK,UAAU3J,EAAG,UAAU2J,EAAK,SAAU,CAAC,EAC5CA,EAAK,gBAAgB3J,EAAG,UAAU2J,EAAK,eAAgB,CAAC,GAE9D,MAAM4Y,EAAK,KAAK,kBAAkB,EAC9BA,GACFviB,EAAG,UAAU2J,EAAK,cAAe4Y,EAAG,KAAK,EACzCviB,EAAG,WAAW2J,EAAK,UAAW4Y,EAAG,GAAG,GAEpCviB,EAAG,UAAU2J,EAAK,cAAe,CAAC,EAEpC3J,EAAG,OAAOA,EAAG,KAAK,EACd,KAAK,QAAU,WAAYA,EAAG,UAAUA,EAAG,UAAWA,EAAG,GAAG,EAC3DA,EAAG,UAAUA,EAAG,UAAWA,EAAG,mBAAmB,EACtDA,EAAG,UAAU,EAAK,EAClBA,EAAG,oBAAoBA,EAAG,eAAgB,EAAG,EAAGqhB,CAAS,EACzDrhB,EAAG,UAAU,EAAI,EACjBA,EAAG,QAAQA,EAAG,KAAK,EACnBA,EAAG,gBAAgB,IAAI,CACzB,CACA,cAAcA,EAAI,CAChB,MAAMwiB,EAAQ7G,GAAqB3b,CAAE,EACrC,KAAK,SAAWwiB,EAAM,QACtB,KAAK,MAAQA,EAAM,KACnB,KAAK,KAAOA,EAAM,IAClB,KAAK,MAAQA,EAAM,IACrB,CAGA,mBAAoB,CAClB,GAAI,KAAK,aAAe,OAAQ,OAAO,KAAK,WAC5C,IAAIn4B,EAAO,KAAK,UAChB,GAAI,CAACA,GAAQ,KAAK,YAAc,EAAG,CACjC,MAAMuB,EAAI,KAAK,YACfvB,EAAO,CAAC,EACR,QAASlF,EAAI,EAAGA,EAAIyG,EAAGzG,IACrB,QAASD,EAAI,EAAGA,EAAI0G,EAAG1G,IAAKmF,EAAK,KAAK,CAAE,GAAInF,EAAI0G,EAAG,GAAIzG,EAAIyG,EAAG,GAAI,EAAIA,EAAG,GAAI,EAAIA,CAAE,CAAC,CACxF,CACA,GAAI,CAACvB,GAAQA,EAAK,SAAW,EAC3B,YAAK,WAAa,KACX,KAET,MAAM5K,EAAM,KAAK,IAAI4K,EAAK,OAAQ,GAAG,EAC/BuhB,EAAM,IAAI,aAAansB,EAAM,CAAC,EACpC,QAASiD,EAAI,EAAGA,EAAIjD,EAAKiD,IACvBkpB,EAAIlpB,EAAI,CAAC,EAAI2H,EAAK3H,CAAC,EAAE,GACrBkpB,EAAIlpB,EAAI,EAAI,CAAC,EAAI2H,EAAK3H,CAAC,EAAE,GACzBkpB,EAAIlpB,EAAI,EAAI,CAAC,EAAI2H,EAAK3H,CAAC,EAAE,GACzBkpB,EAAIlpB,EAAI,EAAI,CAAC,EAAI2H,EAAK3H,CAAC,EAAE,GAE3B,YAAK,WAAa,CAAE,MAAOjD,EAAK,IAAAmsB,CAAI,EAC7B,KAAK,UACd,CAEA,WAAY,CACV,IAAI,EAAI,EACR,UAAWxrB,KAAK,KAAK,KAAUA,EAAE,OAAO,IACxC,OAAO,CACT,CACA,SAAU,CACR,KAAK,OAAS,GACd,MAAM4f,EAAK,KAAK,GAChB,GAAKA,EACL,IAAI,CACE,KAAK,OAAOA,EAAG,aAAa,KAAK,KAAK,EACtC,KAAK,UAAUA,EAAG,aAAa,KAAK,QAAQ,EAC5C,KAAK,MAAMA,EAAG,kBAAkB,KAAK,IAAI,EACzC,KAAK,OAAS,KAAK,MAAM,MAAMA,EAAG,cAAc,KAAK,MAAM,IAAI,EAC/D,KAAK,WAAWA,EAAG,cAAc,KAAK,SAAS,CACrD,MAAY,CACZ,CACA,KAAK,MAAQ,KACb,KAAK,MAAQ,KACb,KAAK,SAAW,KAChB,KAAK,KAAO,KACZ,KAAK,MAAQ,KACb,KAAK,UAAY,KACnB,CACF,CACA,MAAMyiB,GAA+B,OAAO,OAAuB,OAAO,eAAe,CACvF,UAAW,KACX,eAAA7F,GACA,qBAAAJ,GACA,oBAAAT,GACA,iBAAAC,GACA,wBAAAE,GACA,oBAAAK,EACF,EAAG,OAAO,YAAa,CAAE,MAAO,QAAS,CAAC,CAAC,EACrCmG,GAAwB,IAAI,IAC5BC,GAA4B,IAAI,IACtC,IAAIC,GAAmB,KACvB,SAASC,GAA0BjgC,EAAMkgC,EAAS,CAChD,MAAM/a,EAAM,OAAOnlB,CAAI,EACvB+/B,GAAU,IAAI5a,EAAK+a,CAAO,EAC1BJ,GAAM,OAAO3a,CAAG,CAClB,CACA,SAASgb,GAA2BC,EAAU,CAC5CJ,GAAmB,OAAOI,GAAa,WAAaA,EAAW,IACjE,CACA,SAASC,IAAgC,CACvCN,GAAU,MAAM,EAChBC,GAAmB,KACnBF,GAAM,MAAM,CACd,CACA,SAASQ,IAAkC,CACzC,OAAO,OAAO,KAAKC,EAAQ,CAC7B,CACA,SAASC,GAAWr/B,EAAMuC,EAAGO,EAAG,CAC9B9C,EAAKuC,CAAC,EAAI,IACVvC,EAAKuC,EAAI,CAAC,EAAI,IACdvC,EAAKuC,EAAI,CAAC,EAAI,IACdvC,EAAKuC,EAAI,CAAC,EAAI,KAAK,MAAM,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGO,CAAC,CAAC,EAAI,GAAG,CAC5D,CACA,SAASw8B,GAAiBz/B,EAAM0/B,EAAW,CACzC,KAAM,CAAE,MAAOC,EAAG,OAAQC,EAAG,KAAAz/B,CAAK,EAAIH,EAChC6/B,EAAU,KAAK,IAAI,EAAG,KAAK,MAAM,KAAK,IAAIF,EAAGC,CAAC,EAAI,GAAI,CAAC,EAC7D,QAASl/B,EAAI,EAAGA,EAAIk/B,EAAGl/B,IACrB,QAASnB,EAAI,EAAGA,EAAIogC,EAAGpgC,IAAK,CAC1B,MAAMugC,EAAQ,KAAK,IAAIvgC,EAAGmB,EAAGi/B,EAAI,EAAIpgC,EAAGqgC,EAAI,EAAIl/B,CAAC,EACjD,GAAIo/B,GAASD,EAAS,SACtB,MAAMx3B,EAAIy3B,EAAQD,EACZn9B,GAAKhC,EAAIi/B,EAAIpgC,GAAK,EAAI,EAC5BY,EAAKuC,CAAC,EAAI,KAAK,MAAMvC,EAAKuC,CAAC,EAAI2F,CAAC,CAClC,CAEF,GAAIq3B,EAAY,EAAG,CACjB,IAAIK,EAAM,EACV,MAAMC,EAAIL,EAAIC,EACd,QAAS9gC,EAAI,EAAGA,EAAIkhC,EAAGlhC,IAAKihC,GAAO5/B,EAAKrB,EAAI,EAAI,CAAC,EACjD,MAAMmhC,EAAMF,EAAMC,EAAI,IACtB,GAAIC,EAAMP,GAAaO,EAAM,EAAG,CAC9B,MAAM53B,EAAIq3B,EAAYO,EACtB,QAASnhC,EAAI,EAAGA,EAAIkhC,EAAGlhC,IAAKqB,EAAKrB,EAAI,EAAI,CAAC,EAAI,KAAK,MAAMqB,EAAKrB,EAAI,EAAI,CAAC,EAAIuJ,CAAC,CAC9E,CACF,CACA,OAAOrI,CACT,CACA,SAASkgC,GAAa7J,EAAM,CAC1B,IAAIpzB,EAAIozB,IAAS,EACjB,OAAO,UAAW,CAChBpzB,GAAK,EACLA,EAAIA,EAAI,WAAa,EACrB,IAAI,EAAI,KAAK,KAAKA,EAAIA,IAAM,GAAI,EAAIA,CAAC,EACrC,SAAI,EAAI,KAAK,KAAK,EAAI,IAAM,EAAG,GAAK,CAAC,EAAI,IAChC,EAAI,IAAM,MAAQ,GAAK,UAClC,CACF,CACA,MAAMk9B,GAAYjsB,GAAMA,EAAIA,GAAK,EAAI,EAAIA,GACnCksB,GAAWlsB,GAAMA,EAAIA,EAAIA,GAAKA,GAAKA,EAAI,EAAI,IAAM,IACjDmsB,GAAO,CAACp9B,EAAGxB,EAAG,IAAMwB,GAAKxB,EAAIwB,GAAK,EAClCq9B,GAAQ,CAACj/B,EAAGhE,IAAM,KAAK,IAAI,EAAEgE,EAAIA,IAAMhE,EAAIA,EAAE,EACnD,SAASkjC,GAAShhC,EAAGmB,EAAGvB,EAAM0gC,EAAS,CACrC,MAAMC,EAAQ,KAAK,IAAIvgC,EAAGmB,EAAGvB,EAAO,EAAII,EAAGJ,EAAO,EAAIuB,CAAC,EACvD,OAAOo/B,GAASD,EAAU,EAAIC,EAAQD,CACxC,CACA,SAASW,GAAMrhC,EAAMshC,EAAO,CAC1B,MAAMtgC,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCuhC,EAAOvhC,EAAO,EACpB,QAASuB,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAM8B,EAAI,KAAK,OAAO9B,EAAI,GAAMmhC,GAAQA,GAAOhgC,EAAI,GAAMggC,GAAQA,CAAI,EACrE,IAAIz9B,EAAI,EACR,QAASnE,EAAI,EAAGA,EAAI2hC,EAAM,OAAQ3hC,IAAKmE,GAAKw9B,EAAM3hC,CAAC,EAAE,EAAIwhC,GAAMj/B,EAAGo/B,EAAM3hC,CAAC,EAAE,CAAC,EAC5E0gC,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG0D,CAAC,CACxC,CAEF,MAAO,CAAE,MAAO9D,EAAM,OAAQA,EAAM,KAAAgB,CAAK,CAC3C,CACA,SAASwgC,GAAMxhC,EAAMyhC,EAAMC,EAAM,CAC/B,OAAOL,GAAMrhC,EAAM,CAACyhC,EAAMC,CAAI,CAAC,CACjC,CACA,SAASC,GAAU3hC,EAAM4hC,EAAQphC,EAAKqhC,EAAOC,EAAO,CAClD,MAAM9gC,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCuhC,EAAOvhC,EAAO,EACd0gC,EAAU,KAAK,IAAI,EAAG,KAAK,MAAM1gC,EAAO,GAAI,CAAC,EACnD,QAASuB,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAMgD,GAAMhD,EAAI,GAAMmhC,GAAQA,EACxBp+B,GAAM5B,EAAI,GAAMggC,GAAQA,EACxBr/B,EAAI,KAAK,MAAMkB,EAAID,CAAE,EACrB24B,EAAK,KAAK,MAAM34B,EAAIC,CAAE,EACtBrC,EAAI,KAAK,IAAI,GAAM,GAAM,KAAK,IAAI6gC,EAAS9F,CAAE,EAAG+F,CAAK,EAC3D,IAAI/9B,EAAIq9B,GAAMj/B,EAAG4/B,CAAK,EAAI/gC,EAAIogC,GAAMj/B,EAAG1B,CAAG,EAC1CsD,GAAKs9B,GAAShhC,EAAGmB,EAAGvB,EAAM0gC,CAAO,EACjCL,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG0D,CAAC,CACxC,CAEF,MAAO,CAAE,MAAO9D,EAAM,OAAQA,EAAM,KAAAgB,CAAK,CAC3C,CACA,SAAS+gC,GAAK9iC,EAAGC,EAAG8iC,EAAWC,EAAUC,EAAM,CAC7C,MAAMC,EAAKD,IAAS,OAAS,IAAOA,EAC9BlhC,EAAO,IAAI,WAAW/B,EAAIC,EAAI,CAAC,EACrC,QAASqC,EAAI,EAAGA,EAAIrC,EAAGqC,IAAK,CAC1B,MAAM4W,EAAK5W,GAAKrC,EAAI,GACdkjC,EAAKH,EAAWd,GAAMhpB,EAAK,GAAK,GAAI,EAAI6oB,GAAS,KAAK,IAAI,EAAG7oB,EAAK,GAAI,CAAC,EAAI,KAAK,IAAI,EAAIA,EAAI,IAAI,EACtG,QAAS/X,EAAI,EAAGA,EAAInB,EAAGmB,IAAK,CAC1B,MAAMiiC,EAAKjiC,GAAKnB,EAAI,GAAK,EAAI,EACvBoD,EAAI8+B,GAAMkB,EAAIL,CAAS,EAC7B3B,GAAWr/B,GAAOO,EAAItC,EAAImB,GAAK,EAAGiC,EAAIA,EAAIA,EAAI+/B,EAAKD,CAAE,CACvD,CACF,CACA,MAAO,CAAE,MAAOljC,EAAG,OAAQC,EAAG,KAAA8B,CAAK,CACrC,CACA,SAASshC,GAAKtiC,EAAMuiC,EAAQC,EAAW,CACrC,MAAMxhC,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCuhC,EAAOvhC,EAAO,EACpB,QAASuB,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAM8B,EAAI,KAAK,OAAO9B,EAAImhC,GAAQA,GAAOhgC,EAAIggC,GAAQA,CAAI,EACzDlB,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG+gC,GAAMj/B,EAAIqgC,EAAQC,EAAY,EAAG,EAAI,KAAK,IAAI,EAAG,EAAItgC,CAAC,CAAC,CAC9F,CAEF,MAAO,CAAE,MAAOlC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,CAC3C,CACA,SAASyhC,GAAOziC,EAAM0iC,EAAS,CAC7B,MAAMC,EAAQ,CACZ,EAAG,CAAE,EAAG,IAAM,EAAG,KAAO,MAAO,IAAM,GAAI,CAAC,CAAC,KAAO,KAAO,IAAM,EAAG,EAAG,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,CAAE,EAC/F,EAAG,CAAE,EAAG,GAAK,EAAG,IAAM,MAAO,IAAM,GAAI,CAAC,CAAC,IAAM,KAAO,GAAK,GAAI,EAAG,CAAC,IAAM,GAAK,IAAM,EAAG,CAAC,CAAE,EAC1F,EAAG,CAAE,EAAG,IAAM,EAAG,KAAO,MAAO,IAAM,GAAI,CAAC,CAAC,KAAO,KAAO,IAAM,GAAI,EAAG,CAAC,GAAK,IAAM,GAAK,GAAI,EAAG,CAAC,IAAM,KAAO,IAAM,GAAI,CAAC,CAAE,CAC3H,EACMvG,EAAOuG,EAAMD,CAAO,GAAKC,EAAM,CAAC,EAChC3hC,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCuhC,EAAOvhC,EAAO,EACpB,QAASuB,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAMgD,GAAMhD,EAAI,GAAMmhC,GAAQA,EACxBp+B,GAAM5B,EAAI,GAAMggC,GAAQA,EACxBr/B,EAAI,KAAK,MAAMkB,EAAID,CAAE,EAC3B,IAAIW,EAAIq9B,GAAMj/B,EAAIk6B,EAAK,EAAGA,EAAK,EAAI,GAAI,EAAI,KAAK,IAAI,EAAG,KAAOl6B,CAAC,EAC3DA,EAAIk6B,EAAK,IAAGt4B,GAAKs4B,EAAK,MAAQ+E,GAAMj/B,EAAG,EAAG,GAC9C,QAASvC,EAAI,EAAGA,EAAIy8B,EAAK,GAAG,OAAQz8B,IAAK,CACvC,MAAMT,EAAIk9B,EAAK,GAAGz8B,CAAC,EACnBmE,GAAK5E,EAAE,CAAC,EAAIiiC,GAAM,KAAK,MAAM/9B,EAAKlE,EAAE,CAAC,EAAGiE,EAAKjE,EAAE,CAAC,CAAC,EAAGA,EAAE,CAAC,CAAC,CAC1D,CACAmhC,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG0D,CAAC,CACxC,CAEF,OAAOw8B,GAAiB,CAAE,MAAOtgC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,EAAG,GAAI,CACnE,CACA,SAAS4hC,GAAY5iC,EAAM6iC,EAAa,CACtC,MAAMvM,EAAOt2B,GAAQ,EACfgB,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrC8iC,EAAOD,IAAgB,EAAI,CAAC,EAAG,EAAG,EAAG,CAAC,EAAIA,IAAgB,EAAI,CAAC,EAAG,EAAG,EAAG,CAAC,EAAI,CAAC,EAAG,EAAG,EAAG,CAAC,EAC9F,QAASE,EAAM,EAAGA,EAAM,EAAGA,IACzB,QAASC,EAAM,EAAGA,EAAM,EAAGA,IAAO,CAChC,MAAMrgC,EAAM8/B,GAAOnM,EAAMwM,EAAKC,EAAM,EAAIC,CAAG,CAAC,EAC5C,QAASzhC,EAAI,EAAGA,EAAI+0B,EAAM/0B,IAAK,CAC7B,MAAMgxB,GAAMwQ,EAAMzM,EAAO/0B,GAAKvB,EACxBsD,EAAK/B,EAAI+0B,EACf,QAASl2B,EAAI,EAAGA,EAAIk2B,EAAMl2B,IAAK,CAC7B,MAAM6iC,GAAM1Q,EAAKyQ,EAAM1M,EAAOl2B,GAAK,EAC7B8iC,GAAM5/B,EAAKlD,GAAK,EACtBY,EAAKiiC,CAAE,EAAItgC,EAAI,KAAKugC,CAAE,EACtBliC,EAAKiiC,EAAK,CAAC,EAAItgC,EAAI,KAAKugC,EAAK,CAAC,EAC9BliC,EAAKiiC,EAAK,CAAC,EAAItgC,EAAI,KAAKugC,EAAK,CAAC,EAC9BliC,EAAKiiC,EAAK,CAAC,EAAItgC,EAAI,KAAKugC,EAAK,CAAC,CAChC,CACF,CACF,CAEF,MAAO,CAAE,MAAOljC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,CAC3C,CACA,SAASmiC,GAAOnjC,EAAM,CACpB,MAAMgB,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCs2B,EAAOt2B,EAAO,EACdvD,EAAM,CACV,CAAC,IAAM,CAAC,EACR,CAAC,IAAK,GAAI,EACV,CAAC,IAAK,GAAI,EACV,CAAC,IAAM,EAAG,CACZ,EACA,QAAS8E,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAM4iC,EAAM5iC,GAAKk2B,EAAO,EAAI,EACtByM,EAAMxhC,GAAK+0B,EAAO,EAAI,EACtB32B,EAAIojC,EAAM,EAAIC,EACd7wB,EAAK6wB,EAAM1M,EAAOA,EAAO,EACzBlkB,EAAK2wB,EAAMzM,EAAOA,EAAO,EACzByI,EAAMtiC,EAAIkD,CAAC,EAAE,CAAC,EACdyjC,EAAO3mC,EAAIkD,CAAC,EAAE,CAAC,EACfyD,GAAMhD,EAAI,GAAM+R,IAAOmkB,EAAO,IAC9BnzB,GAAM5B,EAAI,GAAM6Q,IAAOkkB,EAAO,IAC9BnrB,EAAK,KAAK,IAAI4zB,CAAG,EACjBsE,EAAK,KAAK,IAAItE,CAAG,EACvB,IAAIuE,EAAKlgC,EAAK+H,EAAKhI,EAAKkgC,EACxB,MAAME,EAAK,CAACngC,EAAKigC,EAAKlgC,EAAKgI,EAC3Bm4B,GAAMF,EAAOG,EAAK,IAClB,MAAMC,EAAQ,EAAI,KAAK,IAAI,EAAGD,CAAE,EAAI,IAC9BrhC,EAAI,KAAK,MAAMohC,GAAM,IAAOE,GAAQD,EAAK,GAAI,EACnD,IAAIz/B,EAAI5B,GAAK,KAAO,EAAIi/B,GAAMj/B,EAAG,GAAI,EACrC4B,EAAI,KAAK,IAAI,EAAGA,EAAIq9B,GAAMmC,EAAI,GAAI,EAAInC,GAAMoC,EAAI,GAAI,EAAIz/B,EAAI,EAAG,EAC/Du8B,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG0D,CAAC,CACxC,CAEF,OAAOw8B,GAAiB,CAAE,MAAOtgC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,EAAG,GAAI,CACnE,CACA,SAASyiC,GAAKzjC,EAAM06B,EAAM,CACxB,MAAMiI,EAAQ,CACZ,EAAG,CAAE,GAAI,IAAM,GAAI,IAAM,KAAM,EAAG,MAAO,CAAE,EAC3C,EAAG,CAAE,GAAI,IAAM,GAAI,IAAM,KAAM,IAAM,MAAO,CAAE,EAC9C,EAAG,CAAE,GAAI,GAAK,GAAI,IAAM,KAAM,IAAM,MAAO,CAAE,EAC7C,EAAG,CAAE,GAAI,IAAM,GAAI,IAAM,KAAM,EAAG,MAAO,CAAE,EAC3C,EAAG,CAAE,GAAI,IAAM,GAAI,GAAK,KAAM,IAAM,MAAO,CAAE,EAC7C,EAAG,CAAE,GAAI,IAAM,GAAI,IAAM,KAAM,IAAM,MAAO,CAAE,EAC9C,EAAG,CAAE,GAAI,GAAK,GAAI,GAAK,KAAM,IAAM,MAAO,CAAE,EAC5C,EAAG,CAAE,GAAI,IAAM,GAAI,IAAM,KAAM,GAAK,MAAO,CAAE,CAC/C,EACMzkC,EAAIykC,EAAMjI,CAAI,GAAKiI,EAAM,CAAC,EAC1B3hC,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCuhC,EAAOvhC,EAAO,EACpB,QAASuB,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAMgD,GAAMhD,EAAI,GAAMmhC,GAAQA,EACxBp+B,GAAM5B,EAAI,GAAMggC,GAAQA,EACxBzF,EAAK,KAAK,MAAM14B,EAAID,CAAE,EACtBugC,EAAOxlC,EAAE,KAAO,EAAIA,EAAE,KAAO,KAAK,IAAI49B,EAAK59B,EAAE,KAAK,EAAI,EACtDgE,EAAI,KAAK,MAAMkB,GAAMlF,EAAE,GAAKwlC,GAAOvgC,EAAKjF,EAAE,EAAE,EAClD,IAAI4F,EAAI5B,GAAK,KAAO,EAAIi/B,GAAMj/B,EAAG,EAAG,EAChC4B,EAAI,IAAGA,EAAI,KAAK,IAAI,EAAGA,EAAIq9B,GAAM/9B,EAAI,IAAK,EAAI+9B,GAAMh+B,EAAI,GAAI,EAAI,GAAI,GACxEk9B,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG0D,CAAC,CACxC,CAEF,OAAOw8B,GAAiB,CAAE,MAAOtgC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,EAAG,GAAI,CACnE,CACA,SAAS2iC,GAAehhC,EAAKqtB,EAAU,CACrC,MAAMwQ,EAAI79B,EAAI,MACR89B,EAAI99B,EAAI,OACRihC,EAAUjhC,EAAI,KACduG,EAAI8mB,GAAmB,IACvBhvB,EAAO,IAAI,WAAWw/B,EAAIC,EAAI,CAAC,EAC/BoD,EAAM,CAACzjC,EAAGmB,IAAM,CACpB,MAAM4Q,EAAK/R,EAAI,EAAI,EAAIA,GAAKogC,EAAIA,EAAI,EAAIpgC,EAClCgS,EAAK7Q,EAAI,EAAI,EAAIA,GAAKk/B,EAAIA,EAAI,EAAIl/B,EACxC,OAAOqiC,GAASxxB,EAAKouB,EAAIruB,GAAM,EAAI,CAAC,EAAI,GAC1C,EACA,QAAS5Q,EAAI,EAAGA,EAAIk/B,EAAGl/B,IACrB,QAASnB,EAAI,EAAGA,EAAIogC,EAAGpgC,IAAK,CAC1B,MAAMkyB,GAAMuR,EAAIzjC,EAAI,EAAGmB,CAAC,EAAIsiC,EAAIzjC,EAAI,EAAGmB,CAAC,GAAK2H,EACvCqpB,GAAMsR,EAAIzjC,EAAGmB,EAAI,CAAC,EAAIsiC,EAAIzjC,EAAGmB,EAAI,CAAC,GAAK2H,EACvC46B,EAAM,EAAI,KAAK,MAAMxR,EAAIC,EAAI,CAAC,EAC9BhvB,GAAKhC,EAAIi/B,EAAIpgC,GAAK,EACxBY,EAAKuC,CAAC,EAAI,KAAK,OAAO+uB,EAAKwR,EAAM,GAAM,IAAO,GAAG,EACjD9iC,EAAKuC,EAAI,CAAC,EAAI,KAAK,OAAOgvB,EAAKuR,EAAM,GAAM,IAAO,GAAG,EACrD9iC,EAAKuC,EAAI,CAAC,EAAI,KAAK,OAAOugC,EAAM,GAAM,IAAO,GAAG,EAChD9iC,EAAKuC,EAAI,CAAC,EAAI,GAChB,CAEF,MAAO,CAAE,MAAOi9B,EAAG,OAAQC,EAAG,KAAAz/B,CAAK,CACrC,CACA,SAAS+iC,GAAa/jC,EAAM,CAC1B,MAAMgB,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCuhC,EAAOvhC,EAAO,EACpB,QAASuB,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAMgD,GAAMhD,EAAI,GAAMmhC,GAAQA,EACxBp+B,GAAM5B,EAAI,GAAMggC,GAAQA,EACxBn/B,EAAI,KAAK,MAAMgB,EAAID,CAAE,EACrBzG,EAAM0F,GAAK,EAAI,EAAI,KAAK,KAAK,KAAK,IAAI,EAAG,EAAIA,EAAIA,CAAC,CAAC,EACnD4hC,EAAQ7C,GAAM/+B,EAAI,IAAM,GAAI,EAAI,IACtCi+B,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG,KAAK,IAAI,EAAG1D,EAAM,IAAOsnC,CAAK,CAAC,CACtE,CAEF,MAAO,CAAE,MAAOhkC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,CAC3C,CACA,SAASijC,GAAYjkC,EAAM,CACzB,MAAMgB,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCuhC,EAAOvhC,EAAO,EACpB,QAASuB,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAMgD,GAAMhD,EAAI,GAAMmhC,GAAQA,EACxBp+B,GAAM5B,EAAI,GAAMggC,GAAQA,EACxBn/B,EAAI,KAAK,MAAMgB,EAAID,CAAE,EACrB24B,EAAK,KAAK,MAAM34B,EAAIC,CAAE,EACtB8gC,EAAQ/C,GAAM/+B,EAAG,GAAI,GAAK,IAAO,IAAO,KAAK,IAAI05B,EAAK,EAAI15B,EAAI,CAAC,GACrEi+B,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG8jC,CAAK,CAC5C,CAEF,MAAO,CAAE,MAAOlkC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,CAC3C,CACA,SAASmjC,GAAWnkC,EAAM,CACxB,MAAMgB,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCuhC,EAAOvhC,EAAO,EACd0gC,EAAU,KAAK,IAAI,EAAG,KAAK,MAAM1gC,EAAO,GAAI,CAAC,EACnD,QAASuB,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAMgD,GAAMhD,EAAI,GAAMmhC,GAAQA,EACxBp+B,GAAM5B,EAAI,GAAMggC,GAAQA,EACxBn/B,EAAI,KAAK,MAAMgB,EAAID,CAAE,EACrB24B,EAAK,KAAK,MAAM34B,EAAIC,CAAE,EACtBghC,EAAMpD,GAAS,KAAK,IAAI,EAAG,KAAK,IAAIlF,CAAE,EAAI,IAAO,GAAI,CAAC,EACtDh4B,EAAIq9B,GAAM/+B,EAAI,IAAM,GAAI,EAAIgiC,EAAM,IAAOjD,GAAM/+B,EAAI,IAAM,GAAI,EAAI++B,GAAMrF,EAAK,GAAK,GAAI,EAC3FuE,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG,KAAK,IAAI,EAAG0D,CAAC,EAAIs9B,GAAShhC,EAAGmB,EAAGvB,EAAM0gC,CAAO,CAAC,CACrF,CAEF,MAAO,CAAE,MAAO1gC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,CAC3C,CACA,SAASqjC,GAAoBrjC,EAAM,CACjC,GAAI,CAACA,GAAQA,EAAK,OAAS,GAAI,MAAO,GACtC,MAAM,EAAIA,EAAK,OAAS,EAClBk4B,EAAO,KAAK,IAAI,EAAG,EAAI,GAAK,CAAC,EACnC,IAAI/c,EAAO,EACX,QAASxc,EAAI,EAAGA,EAAI,EAAGA,GAAKu5B,EAAM,CAChC,MAAM31B,EAAI5D,EAAI,EACd,GAAIqB,EAAKuC,CAAC,EAAI,KAAOvC,EAAKuC,EAAI,CAAC,EAAI,KAAOvC,EAAKuC,EAAI,CAAC,EAAI,IAAK,MAAO,GACpE4Y,GACF,CACA,OAAOA,EAAO,CAChB,CACA,SAASmoB,GAA6BzjC,EAAM,CAC1C,MAAI,CAACA,GAAQ,CAACA,EAAK,KAAaA,EACzBwjC,GAAoBxjC,EAAK,IAAI,EAAI8iC,GAAe9iC,EAAM,GAAG,EAAIA,CACtE,CACA,MAAM0jC,GAAsB,CAC1B,gBAAiB,uBACjB,kCAAmC,yCACnC,2BAA4B,iCAC5B,2BAA4B,kCAC5B,sBAAuB,6BACvB,qBAAsB,yBACtB,gBAAiB,4BACnB,EACA,SAASC,GAA4BC,EAAQ,CAC3C,GAAI,CAACA,EAAQ,OAAO,KACpB,MAAM,EAAI,OAAOA,CAAM,EACvB,MAAI,UAAU,KAAK,CAAC,EAAU,EACvBF,GAAoB,CAAC,GAAK,EAAI,SACvC,CACA,SAASG,GAAiB7kC,EAAM,CAC9B,MAAM,EAAI,OAAOA,CAAI,EACrB,MAAI,gBAAgB,KAAK,CAAC,EAAU,KAChC,YAAY,KAAK,CAAC,EAAU,EAAE,QAAQ,YAAa,EAAE,EACrD,WAAW,KAAK,CAAC,EAAU,EAAE,QAAQ,WAAY,EAAE,EAChD,IACT,CACA,SAAS8kC,GAAa9kC,EAAM,CAC1B,GAAIugC,GAASvgC,CAAI,EAAG,OAAOugC,GAASvgC,CAAI,EAAE,EAC1C,MAAM,EAAI,OAAOA,CAAI,EAAE,YAAY,EACnC,MAAI,SAAS,KAAK,CAAC,EAAU2hC,GAAM,GAAI,CAAE,EAAG,IAAM,EAAG,CAAE,EAAG,CAAE,EAAG,GAAK,EAAG,EAAI,CAAC,EACrEoD,GAAY/kC,CAAI,EAAE,CAC3B,CACA,SAASglC,GAAQC,EAAMrM,EAAKvB,EAAM,CAChC,MAAM6N,EAAOhE,GAAa7J,EAAO,KAAO,EAAE,EAC1C,IAAIp6B,EAAIgoC,EACR,MAAME,EAAW,CAAC,EAClB,QAASzhC,EAAI,EAAGA,EAAIk1B,EAAKl1B,IAAK,CAC5B,MAAMsF,EAAI/L,EAAIA,EACRuF,EAAI,IAAI,aAAawG,EAAI,CAAC,EAChC,QAASlJ,EAAI,EAAGA,EAAIkJ,EAAGlJ,IAAK,CAC1B,MAAMmtB,EAAMiY,EAAK,EAAI,KAAK,GAAK,EAC/B1iC,EAAE1C,EAAI,CAAC,EAAI,KAAK,IAAImtB,CAAG,EACvBzqB,EAAE1C,EAAI,EAAI,CAAC,EAAI,KAAK,IAAImtB,CAAG,CAC7B,CACAkY,EAAS,KAAK,CAAE,EAAAloC,EAAG,EAAAuF,EAAG,GAAIkB,EAAI,KAAM,GAAIA,EAAI,IAAK,CAAC,EAClDzG,GAAK,CACP,CACA,MAAMmoC,EAAQ,CAACC,EAAKlN,EAAIC,EAAI3F,EAAIC,IAAO,CACrC,MAAM4S,EAAKD,EAAI,EACTE,GAAMpN,EAAKmN,EAAKA,GAAMA,EAEtBxlC,IADMs4B,EAAKkN,EAAKA,GAAMA,EACZA,EAAKC,GAAM,EAC3B,OAAOF,EAAI,EAAEvlC,CAAC,EAAI2yB,EAAK4S,EAAI,EAAEvlC,EAAI,CAAC,EAAI4yB,CACxC,EACM8S,EAAS,CAACH,EAAK,EAAG5nC,IAAM,CAC5B,MAAMsiB,GAAM,EAAIslB,EAAI,IAAMA,EAAI,EACxBvX,GAAMrwB,EAAI4nC,EAAI,IAAMA,EAAI,EACxB5mB,EAAK,KAAK,MAAMsB,CAAE,EAClB2W,EAAK,KAAK,MAAM5I,CAAE,EAClB2E,EAAK1S,EAAKtB,EACViU,EAAK5E,EAAK4I,EACV8L,EAAKpB,GAAQ3O,CAAE,EACfna,EAAK8oB,GAAQ1O,CAAE,EACrB,OAAO2O,GACLA,GAAK+D,EAAMC,EAAK5mB,EAAIiY,EAAIjE,EAAIC,CAAE,EAAG0S,EAAMC,EAAK5mB,EAAK,EAAGiY,EAAIjE,EAAK,EAAGC,CAAE,EAAG8P,CAAE,EACvEnB,GAAK+D,EAAMC,EAAK5mB,EAAIiY,EAAK,EAAGjE,EAAIC,EAAK,CAAC,EAAG0S,EAAMC,EAAK5mB,EAAK,EAAGiY,EAAK,EAAGjE,EAAK,EAAGC,EAAK,CAAC,EAAG8P,CAAE,EACvFlqB,CACF,CACF,EACA,OAAO,SAAa,EAAG7a,EAAGgoC,EAAU,CAClC,MAAMz8B,EAAIy8B,GAAY,KAAON,EAAS,OAAS,KAAK,IAAIM,EAAUN,EAAS,MAAM,EACjF,IAAI/c,EAAM,EACN2Y,EAAM,EACNlI,EAAO,EACX,QAAS/4B,EAAI,EAAGA,EAAIkJ,EAAGlJ,IACrBihC,IAAQyE,EAAOL,EAASrlC,CAAC,EAAG,EAAGrC,CAAC,EAAI,GAAM,IAAO2qB,EACjDyQ,GAAQzQ,EACRA,GAAO,IAET,OAAO2Y,EAAMlI,CACf,CACF,CACA,SAAS6M,GAAe1kC,EAAM2kC,EAAIC,EAAI,CACpC,KAAM,CAAE,MAAOxmC,EAAG,OAAQC,EAAG,KAAA8B,CAAK,EAAIH,EACtC,GAAI5B,IAAMumC,GAAMtmC,IAAMumC,EAAI,OAAO5kC,EACjC,MAAMO,EAAM,IAAI,WAAWokC,EAAKC,EAAK,CAAC,EACtC,QAASlkC,EAAI,EAAGA,EAAIkkC,EAAIlkC,IAAK,CAC3B,MAAMosB,GAAMpsB,EAAI,IAAOkkC,EAAKvmC,EAAI,GAC1Bq3B,EAAK,KAAK,IAAI,EAAG,KAAK,IAAIr3B,EAAI,EAAG,KAAK,MAAMyuB,CAAE,CAAC,CAAC,EAChD7N,EAAK,KAAK,IAAI,EAAG,KAAK,IAAI5gB,EAAI,EAAGq3B,EAAK,CAAC,CAAC,EACxCpe,EAAKwV,EAAK,KAAK,MAAMA,CAAE,EAC7B,QAASvtB,EAAI,EAAGA,EAAIolC,EAAIplC,IAAK,CAC3B,MAAMwf,GAAMxf,EAAI,IAAOolC,EAAKvmC,EAAI,GAC1Bqf,EAAK,KAAK,IAAI,EAAG,KAAK,IAAIrf,EAAI,EAAG,KAAK,MAAM2gB,CAAE,CAAC,CAAC,EAChDrB,EAAK,KAAK,IAAI,EAAG,KAAK,IAAItf,EAAI,EAAGqf,EAAK,CAAC,CAAC,EACxC+jB,EAAKziB,EAAK,KAAK,MAAMA,CAAE,EACvBvb,EAAKrD,GAAMu1B,EAAKt3B,EAAIqf,GAAM,EAAI,CAAC,EAC/Bha,EAAKtD,GAAMu1B,EAAKt3B,EAAIsf,GAAM,EAAI,CAAC,EAC/B0e,EAAKj8B,GAAM8e,EAAK7gB,EAAIqf,GAAM,EAAI,CAAC,EAC/BonB,EAAK1kC,GAAM8e,EAAK7gB,EAAIsf,GAAM,EAAI,CAAC,EAC/Bza,GAAKO,GAAM,EAAIg+B,GAAM/9B,EAAK+9B,IAAO,EAAIlqB,IAAO8kB,GAAM,EAAIoF,GAAMqD,EAAKrD,GAAMlqB,EAC7EkoB,GAAWj/B,GAAMG,EAAIikC,EAAKplC,GAAK,EAAG0D,EAAI,GAAG,CAC3C,CACF,CACA,MAAO,CAAE,MAAO0hC,EAAI,OAAQC,EAAI,KAAMrkC,CAAI,CAC5C,CACA,SAASukC,GAAS3lC,EAAM8kC,EAAMrM,EAAKvB,EAAM0O,EAASC,EAASC,EAAY,CACrE,MAAMC,EAAOF,IAAY,OAAS,EAAIA,EAChC1D,EAAK2D,IAAe,OAAS,IAAMA,EACnC37B,EAAQ,IACR67B,EAAMnB,GAAQC,EAAMrM,EAAKvB,CAAI,EAC7Bl2B,EAAO,IAAI,WAAWmJ,EAAQA,EAAQ,CAAC,EACvCo3B,EAAOp3B,EAAQ,EACf02B,EAAI12B,EAAQA,EACZ87B,EAAS,IAAI,aAAapF,CAAC,EACjC,IAAI18B,EAAK,EACLC,EAAK,EACT,QAASzE,EAAI,EAAGA,EAAIkhC,EAAGlhC,IAAK,CAC1B,MAAMS,EAAIT,EAAIwK,EACR5I,EAAI5B,EAAIwK,EAAQ,EAChB5M,GAAK6C,EAAI,IAAO+J,EAChB7M,GAAKiE,EAAI,IAAO4I,EAChB+7B,EAAKF,EAAIzoC,EAAI,IAAKD,EAAI,IAAK,CAAC,EAAI,GAChC6oC,EAAKH,EAAIzoC,EAAI,IAAKD,EAAI,IAAK,CAAC,EAAI,GAChCkW,EAAMyyB,EAAOtmC,CAAC,EAAIqmC,EAAIzoC,EAAI2oC,EAAK,IAAM5oC,EAAI6oC,EAAK,GAAI,EACpD3yB,EAAMrP,IAAIA,EAAKqP,GACfA,EAAMpP,IAAIA,EAAKoP,EACrB,CACA,MAAMpV,EAAOgG,EAAKD,GAAM,EACxB,QAAS5C,EAAI,EAAGA,EAAI4I,EAAO5I,IACzB,QAASnB,EAAI,EAAGA,EAAI+J,EAAO/J,IAAK,CAC9B,MAAMyI,GAAKo9B,EAAO1kC,EAAI4I,EAAQ/J,CAAC,EAAI+D,GAAM/F,EACnC8D,EAAI,KAAK,OAAO9B,EAAI,GAAMmhC,GAAQA,GAAOhgC,EAAI,GAAMggC,GAAQA,CAAI,EAC/D6E,EAAO,KAAK,IAAI,KAAK,IAAI,EAAG,EAAIlkC,CAAC,EAAG6jC,CAAI,EAC9C,IAAIjiC,EAAI,KAAK,IAAI,GAAI+E,GAAK,EAAI+8B,KAAaA,GAAW,EAAE,EACxD9hC,EAAIk9B,GAAS,KAAK,IAAI,EAAGl9B,CAAC,CAAC,EAAIsiC,EAC/B/F,GAAWr/B,GAAOO,EAAI4I,EAAQ/J,GAAK,EAAG0D,CAAC,CACzC,CAEF,IAAIuiC,EAAO,EACX,QAAS1mC,EAAI,EAAGA,EAAIkhC,EAAGlhC,IAAK0mC,EAAO,KAAK,IAAIA,EAAMrlC,EAAKrB,EAAI,EAAI,CAAC,CAAC,EACjE,GAAI0mC,EAAO,GAAKA,EAAOlE,EAAI,CACzB,MAAMj5B,EAAIi5B,EAAKkE,EACf,QAAS1mC,EAAI,EAAGA,EAAIkhC,EAAGlhC,IAAKqB,EAAKrB,EAAI,EAAI,CAAC,EAAI,KAAK,MAAM,KAAK,IAAI,IAAKqB,EAAKrB,EAAI,EAAI,CAAC,EAAIuJ,CAAC,CAAC,CAC7F,CACA,MAAMrI,EAAO,CAAE,MAAOsJ,EAAO,OAAQA,EAAO,KAAAnJ,CAAK,EACjD,OAAOmJ,IAAUnK,EAAOa,EAAO0kC,GAAe1kC,EAAMb,EAAMA,CAAI,CAChE,CACA,SAASsmC,GAAStmC,EAAMk3B,EAAM,CAC5B,MAAM/sB,EAAQnK,EACRgmC,EAAMnB,GAAQ,EAAG,EAAG3N,GAAe,EAAS,EAC5Cl2B,EAAO,IAAI,WAAWmJ,EAAQA,EAAQ,CAAC,EACvC02B,EAAI12B,EAAQA,EACZ87B,EAAS,IAAI,aAAapF,CAAC,EACjC,IAAI18B,EAAK,EACLC,EAAK,EACT,QAASzE,EAAI,EAAGA,EAAIkhC,EAAGlhC,IAAK,CAC1B,MAAMS,EAAIT,EAAIwK,EACR5I,EAAI5B,EAAIwK,EAAQ,EAChB5M,GAAK6C,EAAI,IAAO+J,EAChB7M,GAAKiE,EAAI,IAAO4I,EAChB+7B,EAAKF,EAAIzoC,EAAI,IAAKD,EAAI,IAAK,CAAC,EAAI,GAChC6oC,EAAKH,EAAIzoC,EAAI,IAAKD,EAAI,IAAK,CAAC,EAAI,GAChCkW,EAAMyyB,EAAOtmC,CAAC,EAAIqmC,EAAIzoC,EAAI2oC,EAAK,IAAM5oC,EAAI6oC,EAAK,GAAI,EACpD3yB,EAAMrP,IAAIA,EAAKqP,GACfA,EAAMpP,IAAIA,EAAKoP,EACrB,CACA,MAAMpV,EAAOgG,EAAKD,GAAM,EACxB,QAAS5C,EAAI,EAAGA,EAAI4I,EAAO5I,IACzB,QAASnB,EAAI,EAAGA,EAAI+J,EAAO/J,IAAK,CAC9B,MAAM+X,GAAM5W,EAAI,IAAO4I,EACjBk4B,GAAMjiC,EAAI,IAAO+J,EAAQ,EAAI,EAC7ByiB,EAAQ,GAAM,IAAO,KAAK,IAAIzU,EAAI,IAAI,EACtCtP,GAAKo9B,EAAO1kC,EAAI4I,EAAQ/J,CAAC,EAAI+D,GAAM/F,EACnCgoC,EAAOjF,GAAMkB,GAAMzV,GAAS,KAAO,GAAI,EAAIuU,GAAMhpB,EAAK,IAAM,GAAI,EACtE,IAAIrU,EAAIk9B,GAAS,KAAK,IAAI,EAAG,KAAK,IAAI,GAAIn4B,EAAI,KAAQ,GAAI,CAAC,CAAC,EAAIu9B,EAChEtiC,GAAKqU,EAAK,IAAOA,EAAK,IAAO,EAC7BkoB,GAAWr/B,GAAOO,EAAI4I,EAAQ/J,GAAK,EAAG0D,CAAC,CACzC,CAEF,IAAIuiC,EAAO,EACX,QAAS1mC,EAAI,EAAGA,EAAIkhC,EAAGlhC,IAAK0mC,EAAO,KAAK,IAAIA,EAAMrlC,EAAKrB,EAAI,EAAI,CAAC,CAAC,EACjE,GAAI0mC,EAAO,GAAKA,EAAO,IAAK,CAC1B,MAAMn9B,EAAI,IAAMm9B,EAChB,QAAS1mC,EAAI,EAAGA,EAAIkhC,EAAGlhC,IAAKqB,EAAKrB,EAAI,EAAI,CAAC,EAAI,KAAK,MAAM,KAAK,IAAI,IAAKqB,EAAKrB,EAAI,EAAI,CAAC,EAAIuJ,CAAC,CAAC,CAC7F,CACA,MAAMrI,EAAOy/B,GAAiB,CAAE,MAAOn2B,EAAO,OAAQA,EAAO,KAAAnJ,CAAK,EAAG,GAAI,EACzE,OAAOmJ,IAAUnK,EAAOa,EAAO0kC,GAAe1kC,EAAMb,EAAMA,CAAI,CAChE,CACA,SAASumC,GAAUtnC,EAAGC,EAAGsnC,EAAMC,EAAM,CACnC,MAAMzlC,EAAO,IAAI,WAAW/B,EAAIC,EAAI,CAAC,EAC/BwnC,EAAKznC,EAAIunC,EACTG,EAAKznC,EAAIunC,EACf,QAASllC,EAAI,EAAGA,EAAIrC,EAAGqC,IACrB,QAASnB,EAAI,EAAGA,EAAInB,EAAGmB,IAAK,CAC1B,MAAM+R,EAAK,KAAK,MAAM/R,EAAIsmC,CAAE,EACtBt0B,EAAK,KAAK,MAAM7Q,EAAIolC,CAAE,EACtB3c,GAAM5pB,EAAI,GAAM+R,EAAKu0B,GAAMA,EAAK,EAAI,EACpCzc,GAAM1oB,EAAI,GAAM6Q,EAAKu0B,GAAMA,EAAK,EAAI,EACpCnD,EAAQ,EAAI,KAAK,IAAI,EAAGvZ,CAAE,EAAI,IAC9B/nB,EAAI,KAAK,MAAM8nB,GAAM,IAAOwZ,GAAQvZ,EAAK,EAAG,EAC5CnmB,EAAI5B,GAAK,KAAO,EAAIi/B,GAAMj/B,EAAG,GAAI,EACvCm+B,GAAWr/B,GAAOO,EAAItC,EAAImB,GAAK,EAAG0D,CAAC,CACrC,CAEF,MAAO,CAAE,MAAO7E,EAAG,OAAQC,EAAG,KAAA8B,CAAK,CACrC,CACA,SAAS4lC,GAAc5mC,EAAM,CAC3B,MAAMgB,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrC+kC,EAAOhE,GAAa,CAAC,EACrB8F,EAAS,CAAC,EAChB,QAASlnC,EAAI,EAAGA,EAAI,GAAIA,IACtBknC,EAAO,KAAK,CACV,EAAG,IAAO9B,EAAK,EAAI,IACnB,EAAG,IAAOA,EAAK,EAAI,IACnB,GAAI,KAAQA,EAAK,EAAI,IACrB,GAAI,KAAQA,EAAK,EAAI,KACrB,IAAKA,EAAK,EAAI,KAAK,EACrB,CAAC,EAEH,QAASxjC,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAMgD,GAAMhD,EAAI,IAAOJ,EACjBmD,GAAM5B,EAAI,IAAOvB,EACvB,IAAI8mC,EAAO,EACX,UAAW5oC,KAAK2oC,EAAQ,CACtB,MAAMvU,EAAKlvB,EAAKlF,EAAE,EACZq0B,EAAKpvB,EAAKjF,EAAE,EACZiN,EAAK,KAAK,IAAIjN,EAAE,GAAG,EACnBmlC,EAAK,KAAK,IAAInlC,EAAE,GAAG,EACnBolC,GAAMhR,EAAKnnB,EAAKonB,EAAK8Q,GAAMnlC,EAAE,GAC7BqlC,GAAM,CAACjR,EAAK+Q,EAAK9Q,EAAKpnB,GAAMjN,EAAE,GAC9B4F,EAAIq9B,GAAM,KAAK,MAAMmC,EAAIC,CAAE,EAAG,GAAI,EACpCz/B,EAAIgjC,IAAMA,EAAOhjC,EACvB,CACAu8B,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG0mC,CAAI,CAC3C,CAEF,MAAO,CAAE,MAAO9mC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,CAC3C,CACA,SAAS+lC,GAAc/mC,EAAMk3B,EAAM,CACjC,MAAMh5B,EAAIg5B,GAAe,GACnB6N,EAAOhE,GAAa7iC,CAAC,EACrB8oC,EAAU1pC,GAAM,KAAK,IAAI,IAAM,KAAK,IAAI,IAAMA,CAAC,CAAC,EAChD2pC,EAAQ,EAAI/oC,EAAI,EAChBgpC,EAAM,CAAC,EACb,IAAI9mC,EAAI4mC,EAAO,IAAOjC,EAAK,EAAI,IAAO,GAAI,EAC1C,QAASplC,EAAI,EAAGA,GAAKsnC,EAAOtnC,IAAK,CAC/B,MAAM4B,EAAI,IAAO5B,EAAIsnC,EAAQ,IACzBtnC,EAAI,IAAGS,EAAI4mC,EAAO5mC,GAAK2kC,EAAK,EAAI,IAAO,GAAI,GAC/CmC,EAAI,KAAK,CAAC9mC,EAAGmB,CAAC,CAAC,CACjB,CACA,MAAMq5B,EAAO,CAAC,EACd,QAASj7B,EAAI,EAAGA,EAAIunC,EAAI,OAAS,EAAGvnC,IAAKi7B,EAAK,KAAK,CAACsM,EAAIvnC,CAAC,EAAGunC,EAAIvnC,EAAI,CAAC,EAAG,CAAC,CAAC,EAC1E,MAAMwnC,EAAU,EAAIjpC,EAAI,EACxB,QAASoE,EAAI,EAAGA,EAAI6kC,EAAS7kC,IAAK,CAChC,MAAM8kC,EAAK,GAAKlpC,EAAIoE,EAAI,GAAK,KAAK,IAAI,EAAG4kC,EAAI,OAAS,CAAC,EACjD1oC,EAAS0oC,EAAIE,CAAE,EACfC,EAAK,CAAC7oC,CAAM,EAClB,IAAIqhB,EAAKrhB,EAAO,CAAC,EACb8oC,EAAK9oC,EAAO,CAAC,EACjB,MAAMgC,EAAM,EAAItC,EAAI,EACpB,QAASgL,EAAI,EAAGA,EAAI1I,EAAK0I,IACvB2W,EAAKmnB,EAAOnnB,GAAMklB,EAAK,EAAI,IAAO,GAAI,EACtCuC,EAAK,KAAK,IAAI,IAAMA,EAAK,GAAMvC,EAAK,EAAI,GAAI,EAC5CsC,EAAG,KAAK,CAACxnB,EAAIynB,CAAE,CAAC,EAElB,QAAS3nC,EAAI,EAAGA,EAAI0nC,EAAG,OAAS,EAAG1nC,IAAKi7B,EAAK,KAAK,CAACyM,EAAG1nC,CAAC,EAAG0nC,EAAG1nC,EAAI,CAAC,EAAG,IAAO2C,EAAI,EAAG,CAAC,CACtF,CACA,MAAMtB,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrC0gC,EAAU,KAAK,IAAI,EAAG,KAAK,MAAM1gC,EAAO,GAAI,CAAC,EACnD,QAASuB,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASid,EAAK,EAAGA,EAAKxe,EAAMwe,IAAM,CAChC,MAAMpb,GAAMob,EAAK,IAAOxe,EAClBmD,GAAM5B,EAAI,IAAOvB,EACvB,IAAIunC,EAAO,EACPC,EAAO,EACX,SAAW,CAACvK,EAAI36B,EAAGrD,CAAC,IAAK27B,EAAM,CAC7B,MAAM6M,EAAMnlC,EAAE,CAAC,EAAI26B,EAAG,CAAC,EACjByK,EAAMplC,EAAE,CAAC,EAAI26B,EAAG,CAAC,EACjB0K,EAAMF,EAAMA,EAAMC,EAAMA,GAAO,KAC/B3yB,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK3R,EAAK65B,EAAG,CAAC,GAAKwK,GAAOtkC,EAAK85B,EAAG,CAAC,GAAKyK,GAAOC,CAAG,CAAC,EAC5EzlC,EAAI,KAAK,MAAMkB,GAAM65B,EAAG,CAAC,EAAIwK,EAAM1yB,GAAI5R,GAAM85B,EAAG,CAAC,EAAIyK,EAAM3yB,EAAE,EAC/D7S,EAAIjD,EAAIsoC,IACVA,EAAOrlC,EAAIjD,EACXuoC,EAAOvoC,EAEX,CACA,MAAM6E,EAAI,IAAOq9B,GAAMoG,EAAM,IAAK,EAAI,GAAMpG,GAAMoG,EAAM,GAAI,EAAIC,EAChEnH,GAAWr/B,GAAOO,EAAIvB,EAAOwe,GAAM,EAAG,KAAK,IAAI,EAAG1a,CAAC,EAAIs9B,GAAS5iB,EAAIjd,EAAGvB,EAAM0gC,CAAO,CAAC,CACvF,CAEF,MAAO,CAAE,MAAO1gC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,CAC3C,CACA,SAAS4mC,GAAU3oC,EAAGC,EAAG,CACvB,MAAM8B,EAAO,IAAI,WAAW/B,EAAIC,EAAI,CAAC,EACrC,QAASqC,EAAI,EAAGA,EAAIrC,EAAGqC,IACrB,QAASnB,EAAI,EAAGA,EAAInB,EAAGmB,IAAK,CAC1B,MAAMgD,GAAMhD,EAAI,GAAMnB,EAAI,IAAMA,EAAI,GAC9BkE,GAAM5B,EAAI,GAAMrC,EAAI,IAAMA,EAAI,GAC9Bkc,EAAO+lB,GAAM/9B,EAAI,GAAI,EAAI,KAAK,IAAI,CAAC,KAAK,IAAI,EAAG,CAACD,EAAK,GAAI,EAAI,GAAG,GAAKA,EAAK,GAAM,EAAI,KAAK,IAAI,EAAG,EAAIA,EAAK,CAAC,GAC1G0kC,EAAK,KAAK,MAAMzkC,EAAK,KAAOD,EAAK,KAAQ,EAAG,EAC5CwY,EAAOksB,GAAM,EAAI,EAAI1G,GAAM0G,EAAI,EAAG,EACxCxH,GAAWr/B,GAAOO,EAAItC,EAAImB,GAAK,EAAG,KAAK,IAAIgb,EAAMO,CAAI,CAAC,CACxD,CAEF,MAAO,CAAE,MAAO1c,EAAG,OAAQC,EAAG,KAAA8B,CAAK,CACrC,CACA,SAAS8mC,GAAa9nC,EAAM,CAC1B,OAAOwhC,GAAMxhC,EAAM,CAAE,EAAG,GAAK,EAAG,CAAE,EAAG,CAAE,EAAG,GAAK,EAAG,GAAK,CAAC,CAC1D,CACA,SAAS+nC,GAAS9oC,EAAGC,EAAG,CACtB,MAAM8B,EAAO,IAAI,WAAW/B,EAAIC,EAAI,CAAC,EACrC,QAASqC,EAAI,EAAGA,EAAIrC,EAAGqC,IAAK,CAC1B,MAAM4W,GAAM5W,EAAI,IAAOrC,EACjBxC,EAAMskC,GAAS,KAAK,IAAI,EAAG,KAAK,IAAI7oB,EAAK,KAAO,EAAIA,GAAM,GAAI,CAAC,CAAC,EAChEiqB,EAAKjB,GAAMhpB,EAAK,IAAM,GAAI,EAAIzb,EAC9B0F,EAAI,IAAO,EAAI4+B,GAAS,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI7oB,EAAK,KAAQ,EAAG,CAAC,CAAC,EAAI,IAC7E,QAAS/X,EAAI,EAAGA,EAAInB,EAAGmB,IAAK,CAC1B,MAAMkyB,GAAMlyB,EAAI,GAAMnB,EAAI,IAAMA,EAAI,GACpCohC,GAAWr/B,GAAOO,EAAItC,EAAImB,GAAK,EAAG+gC,GAAM,KAAK,IAAI7O,CAAE,GAAKlwB,GAAK,KAAO,EAAG,EAAIggC,CAAE,CAC/E,CACF,CACA,MAAO,CAAE,MAAOnjC,EAAG,OAAQC,EAAG,KAAA8B,CAAK,CACrC,CACA,SAASgnC,GAAShoC,EAAM,CACtB,MAAMgB,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCuhC,EAAOvhC,EAAO,EACd0gC,EAAU,KAAK,IAAI,EAAG,KAAK,MAAM1gC,EAAO,GAAI,CAAC,EACnD,QAASuB,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAMgD,GAAMhD,EAAI,GAAMmhC,GAAQA,EACxBp+B,GAAM5B,EAAI,GAAMggC,GAAQA,EACxB0G,EAAQ9G,GAAM,KAAK,MAAM/9B,EAAID,CAAE,EAAG,GAAI,EACtCgH,EAAQg3B,GAAM,KAAK,MAAM/9B,EAAK,IAAMD,CAAE,EAAG,GAAI,EAC7CW,EAAI,KAAK,IAAI,EAAGmkC,EAAQ99B,EAAQ,IAAI,EAAIi3B,GAAShhC,EAAGmB,EAAGvB,EAAM0gC,CAAO,EAC1EL,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG0D,CAAC,CACxC,CAEF,MAAO,CAAE,MAAO9D,EAAM,OAAQA,EAAM,KAAAgB,CAAK,CAC3C,CACA,SAASknC,GAAUloC,EAAM,CACvB,MAAMgB,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCuhC,EAAOvhC,EAAO,EACd0gC,EAAU,KAAK,IAAI,EAAG,KAAK,MAAM1gC,EAAO,GAAI,CAAC,EACnD,QAASuB,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAMgD,GAAMhD,EAAI,GAAMmhC,GAAQA,EACxBp+B,GAAM5B,EAAI,GAAMggC,GAAQA,EAC9B,IAAI,EAAIJ,GAAM,KAAK,MAAM/9B,EAAID,CAAE,EAAG,GAAI,EACtC,QAAS+F,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAM4jB,EAAM5jB,EAAI,KAAK,GAAK,EACpBiC,EAAK,KAAK,IAAI2hB,CAAG,EACjBuW,EAAK,KAAK,IAAIvW,CAAG,EACjBqb,EAAQ/kC,EAAK+H,EAAKhI,EAAKkgC,EACvB+E,EAAO,CAAChlC,EAAKigC,EAAKlgC,EAAKgI,EAC7B,GAAIg9B,EAAQ,EAAG,SACf,MAAM3E,EAAQ,KAAK,IAAI,EAAG,KAAO2E,EAAQ,GAAI,EAC7C,GAAKhH,GAAMiH,EAAM,IAAK,EAAIjH,GAAMgH,EAAO,EAAG,EAAI3E,EAC9C,GAAK,IAAOrC,GAAMiH,GAAQD,EAAQ,KAAQ,IAAM,GAAI,EAAIhH,GAAMgH,EAAQ,IAAM,GAAI,EAAI3E,EACpF,GAAK,IAAOrC,GAAMiH,GAAQD,EAAQ,KAAQ,IAAM,GAAI,EAAIhH,GAAMgH,EAAQ,IAAM,GAAI,EAAI3E,EACpF,GAAK,GAAMrC,GAAMiH,GAAQD,EAAQ,KAAQ,GAAK,IAAK,EAAIhH,GAAMgH,EAAQ,IAAM,GAAI,EAAI3E,EACnF,GAAK,GAAMrC,GAAMiH,GAAQD,EAAQ,KAAQ,GAAK,IAAK,EAAIhH,GAAMgH,EAAQ,IAAM,GAAI,EAAI3E,CACrF,CACAnD,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG,KAAK,IAAI,EAAG,CAAC,EAAIghC,GAAShhC,EAAGmB,EAAGvB,EAAM0gC,CAAO,CAAC,CACrF,CAEF,MAAO,CAAE,MAAO1gC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,CAC3C,CACA,SAASqnC,GAAMroC,EAAM0iC,EAAS,CAC5B,MAAM1hC,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCuhC,EAAOvhC,EAAO,EACd0gC,EAAU,KAAK,IAAI,EAAG,KAAK,MAAM1gC,EAAO,GAAI,CAAC,EAC7CsoC,EAAQ,KAAK,IAAI5F,EAAU,CAAC,EAAI,EACtC,QAASnhC,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAMgD,GAAMhD,EAAI,GAAMmhC,GAAQA,EAAO,KAC/Bp+B,GAAM5B,EAAI,GAAMggC,GAAQA,EAAO,KAC/BgH,EAAU,KAAK,IAAI,KAAK,IAAInlC,CAAE,EAAI,KAAK,IAAID,CAAE,EAAI,GAAI,EAC3D,IAAIW,EAAIq9B,GAAMoH,EAAS,IAAK,EACxBD,IAAU,GACZxkC,GAAKq9B,GAAM/9B,EAAI,IAAK,EAAI+9B,GAAMh+B,EAAI,GAAI,EACtCW,GAAKq9B,GAAMh+B,EAAI,IAAK,EAAIg+B,GAAM/9B,EAAI,GAAI,GAC7BklC,IAAU,GACnBxkC,GAAKq9B,GAAM/9B,EAAKD,EAAI,IAAK,EAAIg+B,GAAM/9B,EAAKD,EAAI,GAAI,EAChDW,GAAKq9B,GAAM/9B,EAAKD,EAAI,IAAK,EAAIg+B,GAAM/9B,EAAKD,EAAI,GAAI,IAEhDW,GAAKq9B,GAAM,KAAK,MAAM/9B,EAAID,CAAE,EAAI,IAAM,IAAK,EAC3CW,GAAKq9B,GAAM/9B,EAAI,IAAK,EAAI+9B,GAAMh+B,EAAI,GAAI,GAExCk9B,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG,KAAK,IAAI,EAAG0D,CAAC,EAAIs9B,GAAShhC,EAAGmB,EAAGvB,EAAM0gC,CAAO,CAAC,CACrF,CAEF,OAAOJ,GAAiB,CAAE,MAAOtgC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,EAAG,GAAI,CACnE,CACA,SAASwnC,GAAS3/B,EAAG,CACnB,IAAI3J,EAAI,EACR,MAAMhB,EAAI,OAAO2K,CAAC,EAClB,QAASlJ,EAAI,EAAGA,EAAIzB,EAAE,OAAQyB,IAAKT,EAAIA,EAAI,GAAKhB,EAAE,WAAWyB,CAAC,EAAI,EAClE,OAAOT,CACT,CACA,SAASupC,GAAgBzoC,EAAM,CAC7B,MAAMgB,EAAO,IAAI,WAAWhB,EAAOA,EAAO,CAAC,EACrCuhC,EAAOvhC,EAAO,EACd0gC,EAAU,KAAK,IAAI,EAAG,KAAK,MAAM1gC,EAAO,GAAI,CAAC,EACnD,QAASuB,EAAI,EAAGA,EAAIvB,EAAMuB,IACxB,QAASnB,EAAI,EAAGA,EAAIJ,EAAMI,IAAK,CAC7B,MAAMgD,GAAMhD,EAAI,GAAMmhC,GAAQA,EACxBp+B,GAAM5B,EAAI,GAAMggC,GAAQA,EACxBr/B,EAAI,KAAK,MAAMkB,EAAID,CAAE,EACrBW,EAAIq9B,GAAMj/B,EAAG,GAAI,EAAI,IAAOi/B,GAAM/9B,EAAI,GAAI,EAAI+9B,GAAMh+B,EAAI,IAAK,EAAI,IAAOg+B,GAAM/9B,EAAI,GAAI,EAAI+9B,GAAMh+B,EAAI,IAAK,EAC/Gk9B,GAAWr/B,GAAOO,EAAIvB,EAAOI,GAAK,EAAG,KAAK,IAAI,EAAG0D,CAAC,EAAIs9B,GAAShhC,EAAGmB,EAAGvB,EAAM0gC,CAAO,CAAC,CACrF,CAEF,MAAO,CAAE,MAAO1gC,EAAM,OAAQA,EAAM,KAAAgB,CAAK,CAC3C,CACA,MAAMo/B,GAAW,CAOf,kBAAmB,IAAMoB,GAAM,IAAK,CAAE,EAAG,IAAM,EAAG,CAAE,EAAG,CAAE,EAAG,GAAK,EAAG,GAAK,CAAC,EAI1E,yBAA0B,IAAMmC,GAAeI,GAAa,GAAG,EAAG,GAAG,EACrE,uBAAwB,IAAMJ,GAAeoE,GAAS,IAAK,GAAG,EAAG,GAAG,EACpE,8BAA+B,IAAMpE,GAAerB,GAAK,IAAK,IAAM,GAAI,EAAG,GAAG,EAC9E,+BAAgC,IAAMqB,GAAeM,GAAY,GAAG,EAAG,GAAG,EAC1E,yCAA0C,IAAMN,GAAe4C,GAAU,IAAK,IAAK,EAAG,CAAC,EAAG,GAAG,EAC7F,iCAAkC,IAAM5C,GAAef,GAAY,IAAK,CAAC,EAAG,GAAG,EAC/E,kCAAmC,IAAMe,GAAef,GAAY,IAAK,CAAC,EAAG,GAAG,EAChF,6BAA8B,IAAMe,GAAetC,GAAM,IAAK,CAAC,CAAE,EAAG,KAAO,EAAG,CAAE,EAAG,CAAE,EAAG,IAAM,EAAG,GAAK,EAAG,CAAE,EAAG,IAAM,EAAG,GAAK,CAAC,CAAC,EAAG,GAAG,EAGpI,uBAAwB,IAAMU,GAAK,IAAK,IAAK,IAAM,EAAI,EACvD,uBAAwB,IAAMA,GAAK,IAAK,IAAK,IAAM,EAAI,EACvD,uBAAwB,IAAMA,GAAK,IAAK,IAAK,IAAM,EAAI,EACvD,4BAA6B,IAAMA,GAAK,IAAK,IAAK,IAAM,EAAK,EAC7D,gCAAiC,IAAMA,GAAK,IAAK,IAAK,IAAM,EAAI,EAChE,gCAAiC,IAAMA,GAAK,IAAK,IAAK,GAAK,EAAI,EAC/D,gCAAiC,IAAMA,GAAK,IAAK,IAAK,IAAM,EAAI,EAChE,gCAAiC,IAAMA,GAAK,IAAK,IAAK,IAAM,EAAI,EAChE,gCAAiC,IAAMA,GAAK,IAAK,IAAK,GAAK,EAAI,EAE/D,6BAA8B,IAAMoB,GAAO,GAAG,EAC9C,yBAA0B,IAAMM,GAAK,IAAK,CAAC,EAC3C,0BAA2B,IAAMA,GAAK,IAAK,CAAC,EAC5C,0BAA2B,IAAMA,GAAK,IAAK,CAAC,EAC5C,0BAA2B,IAAMA,GAAK,IAAK,CAAC,EAC5C,0BAA2B,IAAMA,GAAK,IAAK,CAAC,EAC5C,0BAA2B,IAAMA,GAAK,IAAK,CAAC,EAC5C,0BAA2B,IAAMA,GAAK,IAAK,CAAC,EAC5C,0BAA2B,IAAMA,GAAK,IAAK,CAAC,EAC5C,uBAAwB,IAAMyE,GAAU,GAAG,EAG3C,gBAAiB,IAAM1G,GAAM,IAAK,CAAE,EAAG,IAAM,EAAG,CAAE,EAAG,CAAE,EAAG,GAAK,EAAG,GAAK,CAAC,EACxE,kBAAmB,IAAMA,GAAM,IAAK,CAAE,EAAG,GAAK,EAAG,CAAE,EAAG,CAAE,EAAG,GAAK,EAAG,GAAK,CAAC,EACzE,kBAAmB,IAAMA,GAAM,IAAK,CAAE,EAAG,GAAK,EAAG,EAAI,EAAG,CAAE,EAAG,IAAM,EAAG,EAAI,CAAC,EAC3E,kBAAmB,IAAMH,GAAM,IAAK,CAAC,CAAE,EAAG,KAAO,EAAG,CAAE,EAAG,CAAE,EAAG,IAAM,EAAG,GAAK,EAAG,CAAE,EAAG,IAAM,EAAG,GAAK,CAAC,CAAC,EACpG,kBAAmB,IAAMG,GAAM,IAAK,CAAE,EAAG,KAAO,EAAG,CAAE,EAAG,CAAE,EAAG,IAAM,EAAG,GAAK,CAAC,EAC5E,kBAAmB,IAAMH,GAAM,IAAK,CAAC,CAAE,EAAG,IAAM,EAAG,CAAE,EAAG,CAAE,EAAG,IAAM,EAAG,EAAI,EAAG,CAAE,EAAG,IAAM,EAAG,GAAK,CAAC,CAAC,EAClG,sBAAuB,IAAMA,GAAM,IAAK,CAAC,CAAE,EAAG,KAAO,EAAG,CAAE,EAAG,CAAE,EAAG,IAAM,EAAG,GAAK,EAAG,CAAE,EAAG,IAAM,EAAG,GAAK,CAAC,CAAC,EAExG,wBAAyB,IAAMyG,GAAa,GAAG,EAE/C,yBAA0B,IAAMnG,GAAU,IAAK,EAAG,IAAM,GAAI,GAAI,EAChE,yBAA0B,IAAMA,GAAU,IAAK,EAAG,IAAM,GAAI,GAAI,EAChE,yBAA0B,IAAM8G,GAAgB,GAAG,EAEnD,gBAAiB,IAAMV,GAAS,IAAK,GAAG,EAExC,wBAAyB,IAAMhG,GAAK,IAAK,IAAK,IAAM,GAAM,EAAG,EAC7D,wBAAyB,IAAMA,GAAK,IAAK,IAAK,IAAM,GAAM,GAAI,EAE9D,kCAAmC,IAAMwE,GAAU,IAAK,IAAK,EAAG,CAAC,EAEjE,oBAAqB,IAAMZ,GAAS,IAAK,EAAG,EAAG,EAAG,GAAK,GAAK,GAAG,EAC/D,oBAAqB,IAAMA,GAAS,IAAK,EAAG,EAAG,EAAG,IAAM,GAAK,GAAG,EAChE,oBAAqB,IAAMA,GAAS,IAAK,EAAG,EAAG,EAAG,IAAM,EAAG,GAAG,EAE9D,wBAAyB,IAAMA,GAAS,IAAK,EAAG,EAAG,EAAG,IAAM,IAAK,GAAG,EACpE,wBAAyB,IAAMA,GAAS,IAAK,EAAG,EAAG,GAAI,GAAK,IAAK,GAAG,EACpE,6BAA8B,IAAMA,GAAS,IAAK,EAAG,EAAG,GAAI,GAAK,IAAK,GAAG,EAEzE,qBAAsB,IAAMrD,GAAK,IAAK,IAAM,IAAK,EACjD,uBAAwB,IAAMX,GAAU,IAAK,EAAG,IAAM,EAAG,EAAG,EAE5D,2BAA4B,IAAMiB,GAAY,IAAK,CAAC,EACpD,2BAA4B,IAAMA,GAAY,IAAK,CAAC,EACpD,2BAA4B,IAAMA,GAAY,IAAK,CAAC,EAEpD,0BAA2B,IAAMgE,GAAc,GAAG,EAElD,gCAAiC,IAAMG,GAAc,IAAK,CAAC,EAC3D,gCAAiC,IAAMA,GAAc,IAAK,EAAE,EAC5D,gCAAiC,IAAMA,GAAc,IAAK,EAAE,EAE5D,sBAAuB,IAAMT,GAAS,IAAK,EAAE,EAC7C,sBAAuB,IAAMA,GAAS,IAAK,EAAE,EAC7C,gBAAiB,IAAM3E,GAAU,IAAK,EAAG,IAAM,GAAI,GAAI,EACvD,6BAA8B,IAAMwC,GAAW,GAAG,EAClD,kBAAmB,IAAM6D,GAAS,GAAG,EACrC,yBAA0B,IAAMK,GAAM,IAAK,CAAC,EAE5C,WAAY,IAAM1G,GAAU,IAAK,EAAG,GAAK,GAAI,GAAI,EACjD,QAAS,IAAMA,GAAU,IAAK,EAAG,IAAM,EAAG,EAAG,EAC7C,SAAU,IAAMiG,GAAU,IAAK,GAAG,CACpC,EACA,SAAShD,GAAY/kC,EAAM,CACzB,MAAM,EAAI,OAAOA,CAAI,EAAE,YAAY,EACnC,GAAI,SAAS,KAAK,CAAC,EAAG,CACpB,MAAM6oC,EAAOhE,GAAiB7kC,CAAI,EAClC,OAAI6oC,EAAa,IAAM/E,GAAegB,GAAa+D,CAAI,EAAG,GAAG,EACtD,IAAM/E,GAAeI,GAAa,GAAG,EAAG,GAAG,CACpD,CACA,MAAI,iCAAiC,KAAK,CAAC,EAAU,IAAMZ,GAAO,GAAG,EACjE,sBAAsB,KAAK,CAAC,EAC1B,UAAU,KAAK,CAAC,EAAU,IAAMM,GAAK,IAAK,CAAC,EAC3C,UAAU,KAAK,CAAC,EAAU,IAAMA,GAAK,IAAK,CAAC,EAC3C,UAAU,KAAK,CAAC,EAAU,IAAMA,GAAK,IAAK,CAAC,EAC3C,UAAU,KAAK,CAAC,EAAU,IAAMA,GAAK,IAAK,CAAC,EAC3C,UAAU,KAAK,CAAC,EAAU,IAAMA,GAAK,IAAK,CAAC,EAC3C,UAAU,KAAK,CAAC,EAAU,IAAMA,GAAK,IAAK,CAAC,EAC3C,UAAU,KAAK,CAAC,EAAU,IAAMA,GAAK,IAAK,CAAC,EACxC,IAAMA,GAAK,IAAK,CAAC,EAEtB,yBAAyB,KAAK,CAAC,EAAU,IAAMU,GAAW,GAAG,EAC7D,uBAAuB,KAAK,CAAC,EAAU,IAAMwB,GAAS,IAAK,EAAG,EAAG,EAAG,GAAK,GAAK,GAAG,EACjF,QAAQ,KAAK,CAAC,EAAU,IAAMA,GAAS,IAAK,EAAG,EAAG,EAAG,IAAM,IAAK,GAAG,EACnE,wBAAwB,KAAK,CAAC,EAAU,IAAM5D,GAAK,IAAK,IAAK,GAAK,EAAI,EACtE,QAAQ,KAAK,CAAC,EAAU,IAAM0G,GAAgB,GAAG,EACjD,SAAS,KAAK,CAAC,EAAU,IAAMhG,GAAO,IAAK,CAAC,EAC5C,YAAY,KAAK,CAAC,EAAU,IAAMH,GAAK,IAAK,IAAM,IAAK,EACvD,uBAAuB,KAAK,CAAC,EAAU,IAAMgE,GAAS,IAAKkC,GAAS,CAAC,CAAC,EACtE,uBAAuB,KAAK,CAAC,EAAU,IAAMR,GAAS,GAAG,EACzD,mBAAmB,KAAK,CAAC,EAAU,IAAMK,GAAM,IAAKG,GAAS,CAAC,CAAC,EAC/D,oBAAoB,KAAK,CAAC,EAAU,IAAMN,GAAU,GAAG,EACvD,qBAAqB,KAAK,CAAC,EAAU,IAAMN,GAAU,IAAK,GAAG,EAC7D,SAAS,KAAK,CAAC,EAAU,IAAMjG,GAAU,IAAK,EAAG,IAAM,EAAG,EAAG,EAC7D,wBAAwB,KAAK,CAAC,EAAU,IAAMA,GAAU,IAAK,EAAG,GAAK,GAAI,GAAI,EAC7E,+BAA+B,KAAK,CAAC,EAAU,IAAM4E,GAAU,IAAK,IAAK,EAAG,CAAC,EAC7E,YAAY,KAAK,CAAC,EAAU,IAAMwB,GAAS,IAAK,GAAG,EACnD,mBAAmB,KAAK,CAAC,EAAU,IAAMnB,GAAc,GAAG,EAC1D,qBAAqB,KAAK,CAAC,EAAU,IAAMG,GAAc,IAAKyB,GAAS,CAAC,CAAC,EACzE,aAAa,KAAK,CAAC,EAAU,IAAM7G,GAAU,IAAK,EAAG,IAAM,EAAG,GAAI,EAClE,eAAe,KAAK,CAAC,EAAU,IAAMiG,GAAU,IAAK,GAAG,EACpD,IAAMpG,GAAM,IAAK,CAAE,EAAG,IAAM,EAAG,CAAE,EAAG,CAAE,EAAG,GAAK,EAAG,GAAK,CAAC,CAChE,CACA,SAASmH,GAA4B9oC,EAAM,CACzC,GAAI8/B,GAAM,IAAI9/B,CAAI,EAAG,OAAO8/B,GAAM,IAAI9/B,CAAI,EAC1C,IAAIuB,EAAM,KACV,MAAMyzB,EAAK+K,GAAU,IAAI//B,CAAI,EAC7B,GAAIg1B,EACF,GAAI,CACFzzB,EAAMyzB,EAAG,CACX,MAAQ,CACNzzB,EAAM,IACR,CAEF,GAAI,CAACA,GAAOy+B,GACV,GAAI,CACFz+B,EAAMy+B,GAAiBhgC,CAAI,CAC7B,MAAQ,CACNuB,EAAM,IACR,CAEF,GAAI,CAACA,GAAOg/B,GAASvgC,CAAI,EACvB,GAAI,CACFuB,EAAMg/B,GAASvgC,CAAI,EAAE,CACvB,MAAQ,CACNuB,EAAM,IACR,CAEF,GAAI,CAACA,EACH,GAAI,CACFA,EAAMwjC,GAAY/kC,CAAI,EAAE,CAC1B,MAAQ,CACNuB,EAAM,IACR,CAEF,OAAKA,IAAKA,EAAMogC,GAAM,IAAK,CAAE,EAAG,IAAM,EAAG,CAAE,EAAG,CAAE,EAAG,GAAK,EAAG,GAAK,CAAC,GACjE7B,GAAM,IAAI9/B,EAAMuB,CAAG,EACZA,CACT,CACA,SAASwnC,GAA6B/oC,EAAM,CAC1C,OAAO,OAAOA,GAAS,UAAYA,EAAK,QAAQ,WAAW,IAAM,CACnE,CACA,MAAMgpC,GAAiC,OAAO,OAAuB,OAAO,eAAe,CACzF,UAAW,KACX,4BAAAF,GACA,6BAAAC,GACA,gCAAAzI,GACA,4BAAAqE,GACA,6BAAAF,GACA,8BAAApE,GACA,0BAAAJ,GACA,2BAAAE,EACF,EAAG,OAAO,YAAa,CAAE,MAAO,QAAS,CAAC,CAAC,EACrC8I,GAAW,OAAO,OAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,EAC/E,SAASC,GAAQjlC,EAAGxB,EAAGlB,EAAK,CAC1B,MAAMmC,EAAInC,GAAO,IAAI,aAAa,EAAE,EACpC,QAASe,EAAI,EAAGA,EAAI,EAAGA,IACrB,QAASC,EAAI,EAAGA,EAAI,EAAGA,IACrBmB,EAAEpB,EAAI,EAAIC,CAAC,EAAI0B,EAAE1B,CAAC,EAAIE,EAAEH,EAAI,CAAC,EAAI2B,EAAE,EAAI1B,CAAC,EAAIE,EAAEH,EAAI,EAAI,CAAC,EAAI2B,EAAE,EAAI1B,CAAC,EAAIE,EAAEH,EAAI,EAAI,CAAC,EAAI2B,EAAE,GAAK1B,CAAC,EAAIE,EAAEH,EAAI,EAAI,CAAC,EAGhH,OAAOoB,CACT,CACA,SAASylC,GAAWjoC,EAAG,CACrB,MAAM+C,EAAI,CAAC,EACX,QAAS,EAAI,EAAG,EAAI,EAAG,IACrBA,EAAE,KAAK,CAAC/C,EAAE,CAAC,EAAGA,EAAE,EAAI,CAAC,EAAGA,EAAE,EAAI,CAAC,EAAGA,EAAE,GAAK,CAAC,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,EACxD+C,EAAE,CAAC,EAAE,EAAI,CAAC,EAAI,EAEhB,QAASk/B,EAAM,EAAGA,EAAM,EAAGA,IAAO,CAChC,IAAIiG,EAAMjG,EACV,QAAS5gC,EAAI4gC,EAAM,EAAG5gC,EAAI,EAAGA,IACvB,KAAK,IAAI0B,EAAE1B,CAAC,EAAE4gC,CAAG,CAAC,EAAI,KAAK,IAAIl/B,EAAEmlC,CAAG,EAAEjG,CAAG,CAAC,IAAGiG,EAAM7mC,GAEzD,MAAM2S,EAAIjR,EAAEk/B,CAAG,EACfl/B,EAAEk/B,CAAG,EAAIl/B,EAAEmlC,CAAG,EACdnlC,EAAEmlC,CAAG,EAAIl0B,EACT,MAAM6U,EAAK9lB,EAAEk/B,CAAG,EAAEA,CAAG,EACrB,GAAI,KAAK,IAAIpZ,CAAE,EAAI,MAAO,OAAO,aAAa,KAAKkf,EAAQ,EAC3D,QAASvkC,EAAI,EAAGA,EAAI,EAAGA,IAAKT,EAAEk/B,CAAG,EAAEz+B,CAAC,GAAKqlB,EACzC,QAASxnB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,GAAIA,IAAM4gC,EAAK,SACf,MAAMlmC,EAAIgH,EAAE1B,CAAC,EAAE4gC,CAAG,EAClB,GAAIlmC,IAAM,EACV,QAASyH,EAAI,EAAGA,EAAI,EAAGA,IAAKT,EAAE1B,CAAC,EAAEmC,CAAC,GAAKzH,EAAIgH,EAAEk/B,CAAG,EAAEz+B,CAAC,CACrD,CACF,CACA,MAAMnD,EAAM,IAAI,aAAa,EAAE,EAC/B,QAASe,EAAI,EAAGA,EAAI,EAAGA,IAAK,QAASC,EAAI,EAAGA,EAAI,EAAGA,IAAKhB,EAAIe,EAAI,EAAIC,CAAC,EAAI0B,EAAE1B,CAAC,EAAE,EAAID,CAAC,EACnF,OAAOf,CACT,CACA,SAAS8nC,GAAW7G,EAAIlqB,EAAIgxB,EAAI3W,EAAIC,EAAI2W,EAAIC,EAAKC,EAAKC,EAAKnoC,EAAK,CAC9D,MAAMmC,EAAInC,GAAO,IAAI,aAAa,EAAE,EAC9B+Q,EAAK,KAAK,IAAIqgB,CAAE,EAChBnvB,EAAK,KAAK,IAAImvB,CAAE,EAChBpgB,EAAK,KAAK,IAAIqgB,CAAE,EAChBnvB,EAAK,KAAK,IAAImvB,CAAE,EAChB+W,EAAK,KAAK,IAAIJ,CAAE,EAChBx6B,EAAK,KAAK,IAAIw6B,CAAE,EACtB,OAAA7lC,EAAE,CAAC,EAAIimC,EAAKp3B,EAAKi3B,EACjB9lC,EAAE,CAAC,EAAIqL,EAAKwD,EAAKi3B,EACjB9lC,EAAE,CAAC,EAAI,CAACD,EAAK+lC,EACb9lC,EAAE,CAAC,EAAI,EACPA,EAAE,CAAC,GAAKimC,EAAKlmC,EAAKD,EAAKuL,EAAKuD,GAAMm3B,EAClC/lC,EAAE,CAAC,GAAKqL,EAAKtL,EAAKD,EAAKmmC,EAAKr3B,GAAMm3B,EAClC/lC,EAAE,CAAC,EAAI6O,EAAK/O,EAAKimC,EACjB/lC,EAAE,CAAC,EAAI,EACPA,EAAE,CAAC,GAAKimC,EAAKlmC,EAAK6O,EAAKvD,EAAKvL,GAAMkmC,EAClChmC,EAAE,CAAC,GAAKqL,EAAKtL,EAAK6O,EAAKq3B,EAAKnmC,GAAMkmC,EAClChmC,EAAE,EAAE,EAAI6O,EAAKD,EAAKo3B,EAClBhmC,EAAE,EAAE,EAAI,EACRA,EAAE,EAAE,EAAI8+B,EACR9+B,EAAE,EAAE,EAAI4U,EACR5U,EAAE,EAAE,EAAI4lC,EACR5lC,EAAE,EAAE,EAAI,EACDA,CACT,CACA,SAASkmC,GAASpqC,EAAI1B,EAAK,CACzB,MAAMG,EAAQ,CAAC,EACf,KAAOH,EAAM0B,EAAG,YAAY,CAC1B,MAAM8C,EAAI9C,EAAG,SAAS1B,GAAK,EAC3B,GAAIwE,IAAM,EAAG,MACbrE,EAAM,KAAKqE,CAAC,CACd,CACA,IAAIjE,EAAI,GACR,GAAI,CACFA,EAAI,IAAI,YAAY,OAAO,EAAE,OAAO,IAAI,WAAWJ,CAAK,CAAC,CAC3D,MAAY,CACVI,EAAI,OAAO,aAAa,MAAM,KAAMJ,CAAK,CAC3C,CACA,MAAO,CAAE,MAAOI,EAAG,KAAMP,CAAI,CAC/B,CACA,SAAS+rC,GAAUtqC,EAAKgwB,EAAKxM,EAAO,EAAG,CACrC,MAAM+mB,EAAM,CAAC,EACb,QAAShqC,EAAI,EAAGA,EAAIyvB,EAAI,OAAQzvB,IAAKgqC,EAAI,KAAKva,EAAI,WAAWzvB,CAAC,CAAC,EAC/DsoC,EAAO,QAAS5qC,EAAIulB,EAAMvlB,GAAK+B,EAAI,OAASuqC,EAAI,OAAQtsC,IAAK,CAC3D,QAAS6L,EAAI,EAAGA,EAAIygC,EAAI,OAAQzgC,IAC9B,GAAI9J,EAAI/B,EAAI6L,CAAC,IAAMygC,EAAIzgC,CAAC,EAAG,SAAS++B,EAEtC,OAAO5qC,CACT,CACA,MAAO,EACT,CACA,SAASusC,GAASxqC,EAAK,CACrB,MAAMC,EAAK,IAAI,SAASD,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAC5DG,EAAQ,OAAO,aAAa,MAAM,KAAM,MAAM,KAAKH,EAAI,SAAS,EAAG,CAAC,CAAC,CAAC,EAC5E,GAAI,CAACG,EAAM,WAAW,MAAM,EAAG,MAAM,IAAI,MAAM,qBAAaA,CAAK,EACjE,MAAMomB,EAAM8jB,GAASpqC,EAAI,EAAE,EAErBwqC,EADM,SAAStqC,EAAM,MAAM,CAAC,EAAG,EAAE,GAChB,GAAK,CAC1B,CAAE,OAAQ,GAAI,OAAQ,GAAI,GAAI,GAAI,KAAM,GAAI,OAAQ,EAAG,EAIvD,CAAE,OAAQ,GAAI,OAAQ,GAAI,GAAI,GAAI,KAAM,GAAI,OAAQ,EAAG,CACzD,EAAI,CACF,CAAE,OAAQ,EAAG,OAAQ,GAAI,GAAI,GAAI,KAAM,GAAI,OAAQ,EAAG,EACtD,CAAE,OAAQ,EAAG,OAAQ,GAAI,GAAI,GAAI,KAAM,GAAI,OAAQ,EAAG,EAEtD,CAAE,OAAQ,GAAI,OAAQ,GAAI,GAAI,GAAI,KAAM,GAAI,OAAQ,EAAG,CACzD,EACA,IAAImN,EAAI,KACJo9B,EAAc,EACdC,EAAQ,EACZ,UAAWC,KAAQH,EAAS,CAC1B,MAAMlsC,EAAMgoB,EAAI,KAAOqkB,EAAK,OAC5B,GAAIrsC,EAAM,EAAIyB,EAAI,WAAY,SAC9B,MAAMyJ,EAAIxJ,EAAG,UAAU1B,EAAK,EAAI,EAChC,GAAIkL,EAAI,GAAKA,EAAImhC,EAAK,SAAW,GAAKrsC,EAAM,EAAIkL,GAAKzJ,EAAI,WAAY,CACnEsN,EAAIs9B,EACJF,EAAcjhC,EACdkhC,EAAQpsC,EACR,KACF,CACF,CACA,GAAI,CAAC+O,EACH,MAAM,IAAI,MAAM,mDAAanN,EAAQ,6BAAgBsqC,EAAQ,IAAK1nC,GAAMA,EAAE,MAAM,EAAE,KAAK,GAAG,EAAI,QAAG,EAEnG,MAAM8nC,EAAYF,EAAQ,EACpBG,EAAcJ,EAAcp9B,EAAE,OAC9By9B,EAAY,IAAI,aAAaD,EAAc,CAAC,EAC5CE,EAAM,IAAI,aAAaF,EAAc,CAAC,EACtCG,EAAU,IAAI,aAAaH,EAAc,CAAC,EAC1CI,EAAU,IAAI,aAAaJ,EAAc,CAAC,EAChD,QAASvqC,EAAI,EAAGA,EAAIuqC,EAAavqC,IAAK,CACpC,MAAM2C,EAAI2nC,EAAYtqC,EAAI+M,EAAE,OAM5B,GALAy9B,EAAUxqC,EAAI,CAAC,EAAIN,EAAG,WAAWiD,EAAG,EAAI,EACxC6nC,EAAUxqC,EAAI,EAAI,CAAC,EAAIN,EAAG,WAAWiD,EAAI,EAAG,EAAI,EAChD6nC,EAAUxqC,EAAI,EAAI,CAAC,EAAIN,EAAG,WAAWiD,EAAI,EAAG,EAAI,EAChD8nC,EAAIzqC,EAAI,CAAC,EAAIN,EAAG,WAAWiD,EAAIoK,EAAE,GAAI,EAAI,EACzC09B,EAAIzqC,EAAI,EAAI,CAAC,EAAIN,EAAG,WAAWiD,EAAIoK,EAAE,GAAK,EAAG,EAAI,EAC7CA,EAAE,MAAQ,GAAKA,EAAE,QAAU,EAC7B,QAASxD,EAAI,EAAGA,EAAI,EAAGA,IACrBmhC,EAAQ1qC,EAAI,EAAIuJ,CAAC,EAAI7J,EAAG,UAAUiD,EAAIoK,EAAE,KAAOxD,EAAI,EAAG,EAAI,EAC1DohC,EAAQ3qC,EAAI,EAAIuJ,CAAC,EAAI7J,EAAG,WAAWiD,EAAIoK,EAAE,OAASxD,EAAI,EAAG,EAAI,OAG/DmhC,EAAQ1qC,EAAI,CAAC,EAAI,EACjB2qC,EAAQ3qC,EAAI,CAAC,EAAI,CAErB,CACA,MAAM4qC,EAAalrC,EAAG,UAAU4qC,EAAYH,EAAa,EAAI,EACvDU,EAAWP,EAAYH,EAAc,EACrCW,EAASP,EAAc,OAASK,EAAa,IAAM,EACnDG,EAAaD,EAASF,EAAa,EAAIA,EAAa,EACpDznC,EAAU2nC,EAAS,IAAI,YAAYC,CAAU,EAAI,IAAI,YAAYA,CAAU,EACjF,GAAID,EACF,QAAS9qC,EAAI,EAAGA,EAAI+qC,EAAY/qC,IAAKmD,EAAQnD,CAAC,EAAIN,EAAG,UAAUmrC,EAAW7qC,EAAI,EAAG,EAAI,MAErF,SAASA,EAAI,EAAGA,EAAI+qC,EAAY/qC,IAAKmD,EAAQnD,CAAC,EAAIN,EAAG,UAAUmrC,EAAW7qC,EAAI,EAAG,EAAI,EAEvF,MAAMgrC,EAAQC,GAAcxrC,EAAKC,CAAE,EAC7BwrC,EAAaC,GAAgB1rC,EAAKC,EAAIsrC,EAAM,MAAM,EAClDI,EAAYC,GAAc5rC,EAAKC,EAAIsrC,CAAK,EACxCM,EAAcC,GAAiB9rC,EAAKC,EAAIsrC,EAAM,MAAM,EACpDQ,EAAe,CAAC,EAChBC,EAAiB,CAAC,EAClBC,EAAW,CAAC,EAClB,GAAIV,EAAM,OAAS,EAAG,CACpB,MAAMW,EAAYX,EAAM,IAAI,CAACroC,EAAG3C,KAAM,CACpC,MAAMoB,GAAIuB,EAAE,OACNe,GAAK,KAAK,MAAMtC,GAAE,CAAC,EAAGA,GAAE,CAAC,CAAC,EAC1BuC,GAAK,KAAK,MAAMvC,GAAE,CAAC,EAAGA,GAAE,CAAC,CAAC,EAChC,OAAAsqC,EAAS1rC,EAAC,EAAI,aAAa,KAAK,CAC9BoB,GAAE,EAAE,EACJA,GAAE,EAAE,EACJA,GAAE,EAAE,EACJ,EACA,EACA,KAAK,MAAMA,GAAE,CAAC,EAAGA,GAAE,CAAC,CAAC,EACrBsC,IAAM,EACNC,IAAM,EACNvC,GAAE,EAAE,GAAK,CACX,CAAC,EACM,aAAa,KAAKA,EAAC,CAC5B,CAAC,EACD,QAASpB,EAAI,EAAGA,EAAIgrC,EAAM,OAAQhrC,IAAK,CACrC,MAAM2C,GAAI+oC,EAAS1rC,CAAC,EACdoB,GAAI4pC,EAAMhrC,CAAC,EAAE,OACf,KAAK,MAAM2C,GAAE,CAAC,EAAIvB,GAAE,EAAE,EAAGuB,GAAE,CAAC,EAAIvB,GAAE,EAAE,CAAC,EAAI,OAC3CuqC,EAAU3rC,CAAC,EAAIupC,GAAW5mC,GAAE,CAAC,EAAGA,GAAE,CAAC,EAAGA,GAAE,CAAC,EAAGA,GAAE,CAAC,EAAGA,GAAE,CAAC,EAAGA,GAAE,CAAC,EAAGA,GAAE,CAAC,EAAGA,GAAE,CAAC,EAAGA,GAAE,CAAC,EAAG,IAAI,aAAa,EAAE,CAAC,EAExG,CACA,MAAMipC,EAAY,CAAC,EACnB,QAAS5rC,EAAI,EAAGA,EAAIgrC,EAAM,OAAQhrC,IAAK,CACrC,MAAMtC,GAAIstC,EAAMhrC,CAAC,EAAE,OACnB4rC,EAAU5rC,CAAC,EAAItC,IAAK,GAAKA,GAAIsC,EAAIopC,GAAQwC,EAAUluC,EAAC,EAAGiuC,EAAU3rC,CAAC,CAAC,EAAI,aAAa,KAAK2rC,EAAU3rC,CAAC,CAAC,CACvG,CACA,QAASA,EAAI,EAAGA,EAAIgrC,EAAM,OAAQhrC,IAAKwrC,EAAaxrC,CAAC,EAAIqpC,GAAWuC,EAAU5rC,CAAC,CAAC,EAChF,GAAIorC,EAAW,CACb,MAAMS,EAAY,CAAC,EACnB,QAAS7rC,GAAI,EAAGA,GAAIgrC,EAAM,OAAQhrC,KAAK,CACrC,MAAMtC,GAAIstC,EAAMhrC,EAAC,EAAE,OACnB6rC,EAAU7rC,EAAC,EAAItC,IAAK,GAAKA,GAAIsC,GAAIopC,GAAQyC,EAAUnuC,EAAC,EAAG0tC,EAAUprC,EAAC,CAAC,EAAI,aAAa,KAAKorC,EAAUprC,EAAC,CAAC,CACvG,CACA,QAASA,GAAI,EAAGA,GAAIgrC,EAAM,OAAQhrC,KAChCyrC,EAAezrC,EAAC,EAAIopC,GAAQyC,EAAU7rC,EAAC,EAAGwrC,EAAaxrC,EAAC,CAAC,CAE7D,CACF,CACA,IAAI8rC,EAAO,IACPC,EAAO,KACPC,EAAO,IACPC,EAAO,KACX,QAASjsC,EAAI,EAAGA,EAAIuqC,EAAavqC,IAAK,CACpC,MAAMS,EAAI+pC,EAAUxqC,EAAI,CAAC,EACnB4B,EAAI4oC,EAAUxqC,EAAI,EAAI,CAAC,EACzBS,EAAIqrC,IAAMA,EAAOrrC,GACjBA,EAAIsrC,IAAMA,EAAOtrC,GACjBmB,EAAIoqC,IAAMA,EAAOpqC,GACjBA,EAAIqqC,IAAMA,EAAOrqC,EACvB,CACA,MAAO,CACL,MAAAhC,EACA,aAAcomB,EAAI,MAClB,YAAAukB,EACA,UAAAC,EACA,IAAAC,EACA,QAAAC,EACA,QAAAC,EACA,WAAAI,EACA,UAAWD,EAAS,MAAQ,MAC5B,QAAA3nC,EACA,MAAA6nC,EACA,WAAAE,EAEA,UAAWgB,GAAsBhB,EAAYF,CAAK,EAClD,aAAAQ,EACA,QAASE,EAAS,OAAS,EAAIA,EAAW,KAC1C,YAAaJ,EAAY,OAAS,EAAIA,EAAc,KACpD,eAAgBG,EAAe,OAAS,EAAIA,EAAiB,KAC7D,OAAQ,CAAE,KAAAK,EAAM,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAK,CACnC,CACF,CACA,SAASV,GAAiB9rC,EAAKC,EAAIysC,EAAW,CAC5C,MAAMhoC,EAAI4lC,GAAUtqC,EAAK,MAAM,EAC/B,GAAI0E,EAAI,EAAG,MAAO,CAAC,EACnB,MAAMrE,EAAQJ,EAAG,UAAUyE,EAAI,GAAI,EAAI,EACvC,GAAIrE,GAAS,GAAKA,EAAQ,IAAK,MAAO,CAAC,EACvC,MAAM2B,EAAM,CAAC,EACb,IAAImD,EAAIT,EAAI,GACZ,QAASoF,EAAI,EAAGA,EAAIzJ,GACd,EAAA8E,EAAI,EAAInF,EAAI,QADS8J,IAAK,CAE9B,MAAM6iC,EAAO1sC,EAAG,UAAUkF,EAAG,EAAI,EAC3BynC,EAAKvC,GAASpqC,EAAIkF,EAAI,CAAC,EAC7B,GAAIynC,EAAG,KAAO,GAAK5sC,EAAI,OAAQ,MAC/B,MAAM6sC,EAAS,IAAI,aAAa,EAAE,EAClC,QAASl3B,EAAI,EAAGA,EAAI,GAAIA,IAAKk3B,EAAOl3B,CAAC,EAAI1V,EAAG,WAAW2sC,EAAG,KAAOj3B,EAAI,EAAG,EAAI,EACxEg3B,EAAOD,GAAW1qC,EAAI,KAAK,CAAE,KAAA2qC,EAAM,KAAMC,EAAG,MAAO,OAAAC,CAAO,CAAC,EAC/D1nC,EAAIynC,EAAG,KAAO,EAChB,CACA,OAAO5qC,CACT,CACA,SAASwpC,GAAcxrC,EAAKC,EAAI,CAC9B,MAAMnB,EAAIwrC,GAAUtqC,EAAK,MAAM,EAC/B,GAAIlB,EAAI,EAAG,MAAO,CAAC,EACnB,MAAM4tC,EAAYzsC,EAAG,UAAUnB,EAAI,GAAI,EAAI,EAC3C,GAAI4tC,GAAa,GAAKA,EAAY,KAAM,MAAO,CAAC,EAChD,MAAMnB,EAAQ,CAAC,EACf,IAAIpmC,EAAIrG,EAAI,GACZ,QAASoE,EAAI,EAAGA,EAAIwpC,EAAWxpC,IAAK,CAClC,GAAIiC,EAAI,GAAKlF,EAAG,WAAY,OAAOsrC,EACnC,MAAMj/B,EAAKrM,EAAG,UAAUkF,EAAI,EAAG,EAAI,EAC7BsI,EAASxN,EAAG,SAASkF,EAAI,EAAG,EAAI,EAChC0nC,EAAS,IAAI,aAAa,EAAE,EAClC,QAAS/iC,EAAI,EAAGA,EAAI,GAAIA,IAAK+iC,EAAO/iC,CAAC,EAAI7J,EAAG,WAAWkF,EAAI,GAAK2E,EAAI,EAAG,EAAI,EAC3E,MAAMsc,EAAOikB,GAASpqC,EAAIkF,EAAI,GAAK,EAAE,EACrComC,EAAM,KAAK,CAAE,GAAAj/B,EAAI,OAAQmB,GAAU,GAAKA,EAASi/B,EAAYj/B,EAAS,GAAI,OAAAo/B,CAAO,CAAC,EAClF1nC,EAAIihB,EAAK,IACX,CACA,OAAOmlB,CACT,CACA,SAASG,GAAgB1rC,EAAKC,EAAIysC,EAAW,CAC3C,MAAMhoC,EAAI4lC,GAAUtqC,EAAK,MAAM,EAC/B,GAAI0E,EAAI,EAAG,MAAO,CAAC,EACnB,IAAI,EAAIA,EAAI,EACZ,MAAMooC,EAAS7sC,EAAG,UAAU,EAAG,EAAI,EACnC,GAAK,EACL,MAAM8sC,EAAY9sC,EAAG,UAAU,EAAG,EAAI,EAEtC,GADA,GAAK,EACD8sC,GAAa,GAAKA,EAAY,IAAK,MAAO,CAAC,EAC/C,MAAMC,EAAQ,CAAC,EACf,QAASC,EAAK,EAAGA,EAAKF,GAChB,IAAI,GAAK9sC,EAAG,YADegtC,IAAM,CAErC,MAAM3gC,EAAKrM,EAAG,UAAU,EAAG,EAAI,EAC/B,GAAK,EACL,MAAMitC,EAAQ7C,GAASpqC,EAAI,CAAC,EAC5B,EAAIitC,EAAM,KACV,MAAMC,EAAQ9C,GAASpqC,EAAI,CAAC,EAE5B,GADA,EAAIktC,EAAM,KACN,EAAI,GAAKltC,EAAG,WAAY,MAC5B,MAAMkhB,EAAMlhB,EAAG,WAAW,EAAG,EAAI,EACjC,GAAK,EACL,MAAM4H,EAAa5H,EAAG,UAAU,EAAG,EAAI,EACvC,GAAK,EACL,MAAMmtC,EAAantC,EAAG,UAAU,EAAG,EAAI,EAEvC,GADA,GAAK,EACDmtC,EAAa,KAAM,MACvB,MAAMC,EAAS,CAAC,EAChB,QAAS13B,EAAI,EAAGA,EAAIy3B,GACd,IAAI,EAAIntC,EAAG,YADe0V,IAAK,CAEnC,GAAK,EACL,MAAM23B,EAAartC,EAAG,UAAU,EAAG,EAAI,EACvC,GAAK,EACL,MAAMwJ,EAAI,KAAK,MAAM6jC,EAAa,EAAE,EACpC,GAAI,EAAIA,EAAartC,EAAG,WAAY,MACpC,MAAMstC,EAAK,IAAI,aAAa9jC,EAAI,CAAC,EACjC,QAAS/L,EAAI,EAAGA,EAAI+L,EAAG/L,IAAK,CAC1B,MAAMO,EAAI,EAAIP,EAAI,GAClB,QAASoM,EAAI,EAAGA,EAAI,EAAGA,IAAKyjC,EAAG7vC,EAAI,EAAIoM,CAAC,EAAI7J,EAAG,WAAWhC,EAAI6L,EAAI,EAAG,EAAI,CAC3E,CACA,GAAKwjC,EACLD,EAAO,KAAK,CAAE,WAAY5jC,EAAG,UAAW8jC,CAAG,CAAC,CAC9C,CAaA,GAZA,GAAK,GACDF,EAAO,OAAS,GAAKxlC,EAAa,GAAKsZ,EAAM,GAC/C6rB,EAAM,KAAK,CACT,GAAA1gC,EACA,KAAM4gC,EAAM,MACZ,KAAMC,EAAM,MACZ,IAAAhsB,EACA,WAAAtZ,EACA,SAAUA,EAAasZ,EACvB,OAAAksB,CACF,CAAC,EAEC,GAAKP,EAAQ,KACnB,CACA,OAAOE,CACT,CACA,SAASP,GAAsBO,EAAOzB,EAAO,CAC3C,IAAIvqC,EAAI,EACJmB,EAAI,EACR,UAAWuC,KAAKsoC,EACd,QAASQ,EAAK,EAAGA,EAAK9oC,EAAE,OAAO,OAAQ8oC,IAAM,CAC3C,MAAMjS,EAAK72B,EAAE,OAAO8oC,CAAE,EACtB,GAAI,CAACjS,EAAI,SACT,MAAMoR,EAAOpB,EAAMiC,CAAE,EACf/sB,EAAKksB,EAAOA,EAAK,OAAO,EAAE,EAAI,EAC9BzE,EAAKyE,EAAOA,EAAK,OAAO,EAAE,EAAI,EAC9B7iC,EAAIyxB,EAAG,UACb,QAAS79B,EAAI,EAAGA,EAAI69B,EAAG,WAAY79B,IAAK,CACtC,MAAMw1B,EAAK,KAAK,IAAIppB,EAAEpM,EAAI,CAAC,EAAI+iB,CAAE,EAC3B0S,EAAK,KAAK,IAAIrpB,EAAEpM,EAAI,EAAI,CAAC,EAAIwqC,CAAE,EACjChV,EAAKlyB,IAAGA,EAAIkyB,GACZC,EAAKhxB,IAAGA,EAAIgxB,EAClB,CACF,CAEF,MAAO,CAAE,EAAAnyB,EAAG,EAAAmB,CAAE,CAChB,CACA,SAASypC,GAAc5rC,EAAKC,EAAIsrC,EAAO,CACrC,GAAIA,EAAM,SAAW,EAAG,OAAO,KAC/B,MAAMztC,EAAIwsC,GAAUtqC,EAAK,MAAM,EAC/B,GAAIlC,EAAI,EAAG,OAAO,KAClB,MAAM2vC,EAAK3vC,EAAI,EAAI,EAAI,EAAI,EAC3B,GAAI2vC,EAAKlC,EAAM,OAAS,GAAKtrC,EAAG,WAAY,OAAO,KACnD,MAAM+B,EAAM,CAAC,EACb,QAASkB,EAAI,EAAGA,EAAIqoC,EAAM,OAAQroC,IAAK,CACrC,MAAMvB,EAAI,IAAI,aAAa,EAAE,EAC7B,QAASmI,EAAI,EAAGA,EAAI,GAAIA,IAAKnI,EAAEmI,CAAC,EAAI7J,EAAG,WAAWwtC,EAAKvqC,EAAI,GAAK4G,EAAI,EAAG,EAAI,EAC3E9H,EAAI,KAAKL,CAAC,CACZ,CACA,OAAOK,CACT,CACA,SAAS0rC,GAAeC,EAAOlsB,EAAOmH,EAAMglB,EAAM,CAChD,MAAMnkC,EAAIkkC,EAAM,WAChB,GAAIlkC,IAAM,EACR,OAAAmkC,EAAK,CAAC,EAAI,EACVA,EAAK,CAAC,EAAI,EACVA,EAAK,CAAC,EAAI,EACVA,EAAK,CAAC,EAAI,EACVA,EAAK,CAAC,EAAI,EACVA,EAAK,CAAC,EAAI,EACVA,EAAK,CAAC,EAAI,EACVA,EAAK,CAAC,EAAI,EACVA,EAAK,CAAC,EAAI,EACHA,EAET,MAAMnuB,EAAQmJ,EAAOnH,EAAM,IAC3B,IAAI1B,EACAC,EACArK,EACJ,GAAI8L,EAAM,OAAS,OAAQ,CACzB,MAAMziB,EAAO,KAAK,IAAI,EAAGyK,EAAI,CAAC,EACxB,GAAKgW,EAAQzgB,EAAOA,GAAQA,EAClC+gB,EAAK,KAAK,MAAM,CAAC,EACjBC,GAAMD,EAAK,GAAKtW,EAChBkM,EAAI,EAAIoK,CACV,SAAW0B,EAAM,OAAS,SAAU,CAClC,MAAMziB,EAAO,KAAK,IAAI,EAAGyK,EAAI,CAAC,EACxBsX,EAAS/hB,EAAO,EACtB,IAAIa,GAAK4f,EAAQsB,EAASA,GAAUA,EAChClhB,EAAIb,IAAMa,EAAIkhB,EAASlhB,GAC3BkgB,EAAK,KAAK,MAAMlgB,CAAC,EACjBmgB,EAAK,KAAK,IAAID,EAAK,EAAGtW,EAAI,CAAC,EAC3BkM,EAAI9V,EAAIkgB,CACV,KAAO,CACL,MAAMhd,EAAI,KAAK,IAAI,KAAK,IAAI0c,EAAO,CAAC,EAAGhW,EAAI,CAAC,EAC5CsW,EAAK,KAAK,MAAMhd,CAAC,EACjBid,EAAK,KAAK,IAAID,EAAK,EAAGtW,EAAI,CAAC,EAC3BkM,EAAI5S,EAAIgd,CACV,CACA,MAAMjW,EAAI6jC,EAAM,UACVjpC,EAAIqb,EAAK,EACT7c,EAAI8c,EAAK,EACT6tB,EAAK,EAAIl4B,EACf,QAASpV,EAAI,EAAGA,EAAI,EAAGA,IACrB,GAAIA,GAAK,GAAKA,GAAK,EAAG,CACpB,IAAIuC,EAAIgH,EAAE5G,EAAI3C,CAAC,EAAIuJ,EAAEpF,EAAInE,CAAC,EACtBuC,EAAI,KAAK,GAAIA,GAAK,EAAI,KAAK,GACtBA,EAAI,CAAC,KAAK,KAAIA,GAAK,EAAI,KAAK,IACrC8qC,EAAKrtC,CAAC,EAAIuJ,EAAEpF,EAAInE,CAAC,EAAIuC,EAAI6S,CAC3B,MACEi4B,EAAKrtC,CAAC,EAAIuJ,EAAEpF,EAAInE,CAAC,EAAIstC,EAAK/jC,EAAE5G,EAAI3C,CAAC,EAAIoV,EAGzC,OAAOi4B,CACT,CACA,SAASE,GAAQC,EAAMxtC,EAAGqtC,EAAM,CAC9B,MAAM1qC,EAAI6qC,EAAK,SAAWA,EAAK,QAAQxtC,CAAC,EACxC,GAAI2C,EACF,OAAA0qC,EAAK,IAAI1qC,CAAC,EACH0qC,EAET,MAAMjsC,EAAIosC,EAAK,MAAMxtC,CAAC,EAAE,OACxB,OAAAqtC,EAAK,CAAC,EAAIjsC,EAAE,EAAE,EACdisC,EAAK,CAAC,EAAIjsC,EAAE,EAAE,EACdisC,EAAK,CAAC,EAAIjsC,EAAE,EAAE,EACdisC,EAAK,CAAC,EAAI,EACVA,EAAK,CAAC,EAAI,EACVA,EAAK,CAAC,EAAI,KAAK,MAAMjsC,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,EAC/BisC,EAAK,CAAC,EAAI,KAAK,MAAMjsC,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,GAAK,EACpCisC,EAAK,CAAC,EAAI,KAAK,MAAMjsC,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,GAAK,EACpCisC,EAAK,CAAC,EAAIjsC,EAAE,EAAE,GAAK,EACZisC,CACT,CACA,SAASI,GAAoBD,EAAMnlB,EAAMqlB,EAAYC,EAAe,CAClE,MAAM3C,EAAQwC,EAAK,MACb1tC,EAAQkrC,EAAM,OACpB,GAAIlrC,IAAU,EAAG,OAAO,KACxB,MAAM8tC,EAAc,CAAC,EAAED,GAAiBA,EAAc,KAAO,GAC7D,GAAI,CAACH,EAAK,OAASA,EAAK,MAAM,SAAW1tC,EAAQ,GAAI,CACnD0tC,EAAK,MAAQ,IAAI,aAAa1tC,EAAQ,EAAE,EACxC0tC,EAAK,OAAS,CAAC,EACfA,EAAK,OAAS,CAAC,EACfA,EAAK,KAAO,IAAI,aAAa,EAAE,EAC/BA,EAAK,MAAQ,IAAI,aAAa,EAAE,EAChC,QAASxtC,EAAI,EAAGA,EAAIF,EAAOE,IACzBwtC,EAAK,OAAO,KAAK,IAAI,aAAa,EAAE,CAAC,EACrCA,EAAK,OAAO,KAAK,IAAI,aAAa,EAAE,CAAC,CAEzC,CACA,MAAMK,EAAoB,MAAM,QAAQH,CAAU,GAAKA,EAAW,OAAS,EACrEvhC,EAAS,CAAC,EAChB,GAAI0hC,EACF,UAAW5gC,KAAKygC,EAAY,CAC1B,GAAIzgC,EAAE,UAAY,IAASA,EAAE,UAAY,EAAG,SAC5C,MAAM9I,EAAIqpC,EAAK,WAAW,KAAM/sC,GAAMA,EAAE,KAAOwM,EAAE,SAAS,EACtD9I,GAAGgI,EAAO,KAAK,CAAE,KAAMhI,EAAG,SAAU,CAAC,CAAC8I,EAAE,SAAU,MAAO,OAAOA,EAAE,OAAU,SAAWA,EAAE,MAAQ,EAAG,KAAM,OAAOA,EAAE,MAAS,SAAWA,EAAE,KAAO,CAAE,CAAC,CACzJ,CAEF,GAAId,EAAO,SAAW,GAAK,CAAC0hC,EAAmB,CAC7C,MAAM1pC,EAAIqpC,EAAK,WAAW,CAAC,EAC3B,GAAKrpC,EAGHgI,EAAO,KAAK,CAAE,KAAMhI,EAAG,SAAU,GAAO,MAAO,EAAG,KAAM,CAAE,CAAC,UAFvD,CAACypC,EAAa,OAAO,IAI7B,CACA,MAAMvpC,EAAOmpC,EAAK,WAAaA,EAAK,SAAW,IAAI,aAAa,CAAC,GAC3DM,EAAMN,EAAK,UAAYA,EAAK,QAAU,IAAI,aAAa,CAAC,GACxDO,EAAMP,EAAK,UAAYA,EAAK,QAAU,IAAI,aAAa,CAAC,GAC9D,QAASxtC,EAAI,EAAGA,EAAIF,EAAOE,IAAK,CAC9ButC,GAAQC,EAAMxtC,EAAGqE,CAAI,EACrBypC,EAAI,IAAIzpC,CAAI,EACZ,IAAI2pC,EAAU,GACVC,EAAO,EACX,UAAWlhC,KAAKZ,EAAQ,CACtB,MAAMihC,EAAQrgC,EAAE,KAAK,OAAO/M,CAAC,EAC7B,GAAI,CAACotC,EAAO,SACZD,GAAeC,EAAOrgC,EAAE,KAAMsb,EAAOtb,EAAE,KAAMghC,CAAG,EAChD,MAAMzuC,EAAIyN,EAAE,MACZ,GAAIA,EAAE,SAAU,CACd,QAASxD,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAIhH,EAAIwrC,EAAIxkC,CAAC,EAAIlF,EAAKkF,CAAC,EACnBA,GAAK,GAAKA,GAAK,IACbhH,EAAI,KAAK,GAAIA,GAAK,EAAI,KAAK,GACtBA,EAAI,CAAC,KAAK,KAAIA,GAAK,EAAI,KAAK,KAEvCurC,EAAIvkC,CAAC,GAAKhH,EAAIjD,CAChB,CACA2uC,GAAQ3uC,CACV,KACE,SAASiK,EAAI,EAAGA,EAAI,EAAGA,IAAKukC,EAAIvkC,CAAC,EAAIukC,EAAIvkC,CAAC,GAAK,EAAIjK,GAAKyuC,EAAIxkC,CAAC,EAAIjK,EAEnE0uC,EAAU,EACZ,CACA,GAAIC,EAAO,EACT,QAAS1kC,EAAI,EAAGA,EAAI,EAAGA,IAAKukC,EAAIvkC,CAAC,EAAIlF,EAAKkF,CAAC,GAAKukC,EAAIvkC,CAAC,EAAIlF,EAAKkF,CAAC,GAAK0kC,EAEtE,MAAM/Y,EAAK0Y,EAAcD,EAAc,IAAI3tC,CAAC,EAAI,OAC5Ck1B,IACF4Y,EAAI,CAAC,EAAI5Y,EAAG,CAAC,EACb4Y,EAAI,CAAC,EAAI5Y,EAAG,CAAC,EACb4Y,EAAI,CAAC,EAAI5Y,EAAG,CAAC,EACb8Y,EAAU,IAERA,EACFzE,GAAWuE,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGN,EAAK,OAAOxtC,CAAC,CAAC,EAEjGupC,GAAWllC,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGmpC,EAAK,OAAOxtC,CAAC,CAAC,CAE9G,CACA,QAASA,EAAI,EAAGA,EAAIF,EAAOE,IAAK,CAC9B,MAAM,EAAIgrC,EAAMhrC,CAAC,EAAE,OACf,GAAK,GAAK,EAAIA,EAAGopC,GAAQoE,EAAK,OAAO,CAAC,EAAGA,EAAK,OAAOxtC,CAAC,EAAGwtC,EAAK,OAAOxtC,CAAC,CAAC,EACtEwtC,EAAK,OAAOxtC,CAAC,EAAE,IAAIwtC,EAAK,OAAOxtC,CAAC,CAAC,CACxC,CACA,QAASA,EAAI,EAAGA,EAAIF,EAAOE,IACzBopC,GAAQoE,EAAK,OAAOxtC,CAAC,EAAGwtC,EAAK,aAAaxtC,CAAC,EAAGwtC,EAAK,IAAI,EACvDA,EAAK,MAAM,IAAIA,EAAK,KAAMxtC,EAAI,EAAE,EAElC,OAAOwtC,EAAK,KACd,CACA,SAASU,GAAYV,EAAMW,EAAW,CAEpC,MADI,CAACX,GAAQ,CAACA,EAAK,cACf,EAAEW,GAAa,GAAKA,EAAYX,EAAK,aAAa,QAAgB,KAC/DnE,GAAWmE,EAAK,aAAaW,CAAS,CAAC,CAChD,CACA,SAASC,GAAWjqC,EAAGxB,EAAG,CACxB,OAAOymC,GAAQjlC,EAAGxB,CAAC,CACrB,CACA,SAAS0rC,GAAgBb,EAAMttC,EAAM,CAEnC,GADI,CAACstC,GAAQ,CAACA,EAAK,aAAe,OAAOttC,GAAS,UAAYA,IAAS,IACnE,CAACstC,EAAK,OAAQ,OAAO,KACzB,UAAW/F,KAAM+F,EAAK,YACpB,GAAI/F,EAAG,OAASvnC,EAChB,OAAIunC,EAAG,KAAO,GAAKA,EAAG,MAAQ+F,EAAK,OAAO,OAAe,KAClDpE,GAAQoE,EAAK,OAAO/F,EAAG,IAAI,EAAGA,EAAG,MAAM,EAEhD,OAAO,IACT,CACA,SAAS6G,GAAed,EAAMttC,EAAM,CAClC,GAAI,CAACstC,GAAQ,CAACA,EAAK,aAAe,OAAOttC,GAAS,UAAYA,IAAS,GAAI,OAAO,KAClF,UAAWunC,KAAM+F,EAAK,YAAa,CACjC,GAAI/F,EAAG,OAASvnC,EAAM,SACtB,MAAMquC,EAAKL,GAAYV,EAAM/F,EAAG,IAAI,EACpC,OAAK8G,EACEnF,GAAQmF,EAAI9G,EAAG,MAAM,EADZ,IAElB,CACA,OAAO,IACT,CACA,SAAS+G,GAAuBthC,EAAQylB,EAAIC,EAAI,CAC9C,MAAMzF,EAAMjgB,GAAUA,EAAO,QAASA,EAAO,OAAO,CAAC,GAAK,EACpDxJ,EAAKwJ,GAAUA,EAAO,MAAQA,EAAO,MAAM,CAAC,EAAI,EAChDvJ,EAAKuJ,GAAUA,EAAO,MAAQA,EAAO,MAAM,CAAC,EAAI,EAChD1B,EAAK2hB,EAAM,KAAK,GAAK,IACrB1hB,EAAM,KAAK,IAAID,CAAE,EACjBE,EAAM,KAAK,IAAIF,CAAE,EACjB5D,EAAK+qB,EAAKjvB,EACVmE,EAAK+qB,EAAKjvB,EAChB,MAAO,CAACiE,EAAK6D,EAAM5D,EAAK6D,EAAK9D,EAAK8D,EAAM7D,EAAK4D,CAAG,CAClD,CACA,SAASgjC,GAA2BtiC,EAAQ,CAC1C,MAAMrB,EAAuB,IAAI,IAC3B4jC,EAA6B,IAAI,IACvC,UAAWthC,KAASjB,EAAQ,CAG1B,GAFI,CAACiB,GAASA,EAAM,KAAO,QAAUA,EAAM,KAAO,OAClDtC,EAAK,IAAIsC,EAAM,GAAIA,CAAK,EACpBA,EAAM,WAAa,QAAUA,EAAM,WAAa,MAAM,SAC1D,MAAMzF,EAAO+mC,EAAW,IAAIthC,EAAM,QAAQ,EACtCzF,EAAMA,EAAK,KAAKyF,CAAK,EACpBshC,EAAW,IAAIthC,EAAM,SAAU,CAACA,CAAK,CAAC,CAC7C,CACA,MAAMuhC,EAAc,CAACvhC,EAAO3L,IAAQ,CAClC,MAAMmtC,EAAOF,EAAW,IAAIthC,EAAM,EAAE,EACpC,GAAKwhC,EACL,UAAWpsC,KAAKosC,EACdntC,EAAI,KAAKe,CAAC,EACVmsC,EAAYnsC,EAAGf,CAAG,CAEtB,EACMotC,EAAU,CAAC,EACjB,UAAWzhC,KAASjB,EAAQ,CAC1B,MAAMjM,EAAOkN,GAASA,EAAM,WAC5B,GAAI,OAAOlN,GAAS,UAAYA,IAAS,GAAI,SAC7C,MAAMgN,EAASpC,EAAK,IAAIsC,EAAM,QAAQ,EACtC,GAAI,CAACF,GAAU,CAACA,EAAO,OAAQ,SAC/B,MAAM4hC,EAAQR,GAAephC,EAAO,OAAQhN,CAAI,EAChD,GAAI,CAAC4uC,EAAO,SACZ,MAAM5uB,EAAK4uB,EAAM,EAAE,EACbnH,EAAKmH,EAAM,EAAE,EACb,EAAIN,GAAuBthC,EAAQgT,EAAIynB,CAAE,EACzCoH,EAAO,CAAC,EACdJ,EAAYvhC,EAAO2hC,CAAI,EACvB3hC,EAAM,OAAO,CAAC,GAAK,EAAE,CAAC,EACtBA,EAAM,OAAO,CAAC,GAAK,EAAE,CAAC,EACtB,UAAW5K,KAAKusC,EACdvsC,EAAE,OAAO,CAAC,GAAK,EAAE,CAAC,EAClBA,EAAE,OAAO,CAAC,GAAK,EAAE,CAAC,EAEpBqsC,EAAQ,KAAK,CACX,MAAAzhC,EACA,OAAAF,EACA,KAAAhN,EACA,MAAOggB,EACP,MAAOynB,EACP,KAAAoH,CACF,CAAC,CACH,CACA,UAAW5xC,KAAK0xC,EAAS,CACvB1xC,EAAE,MAAQA,EAAE,MAAM,OAAO,CAAC,EAC1BA,EAAE,MAAQA,EAAE,MAAM,OAAO,CAAC,EAC1BA,EAAE,QAAU,CAAC,CAAE,MAAOA,EAAE,MAAO,EAAGA,EAAE,MAAM,OAAO,CAAC,EAAG,EAAGA,EAAE,MAAM,OAAO,CAAC,CAAE,CAAC,EAC3E,UAAWqF,KAAKrF,EAAE,KAAMA,EAAE,QAAQ,KAAK,CAAE,MAAOqF,EAAG,EAAGA,EAAE,OAAO,CAAC,EAAG,EAAGA,EAAE,OAAO,CAAC,CAAE,CAAC,CACrF,CACA,OAAOqsC,CACT,CACA,SAASG,GAAkBH,EAASxmB,EAAM4mB,EAAkB,CAC1D,GAAI,CAACJ,GAAWA,EAAQ,SAAW,EAAG,OACtC,MAAMK,EAA2B,IAAI,IAC/BC,EAAS,CAAC,EAChB,UAAWhyC,KAAK0xC,EAAS,CACvB,MAAMO,EAASjyC,EAAE,QAAUA,EAAE,OAAO,OACpC,GAAI,CAACiyC,EAAQ,CACXD,EAAO,KAAK,IAAI,EAChB,QACF,CACA,GAAI,CAACD,EAAS,IAAIE,CAAM,EAAG,CACzBF,EAAS,IAAIE,CAAM,EACnB,MAAMC,EAAa,OAAOJ,GAAqB,WAAaA,EAAiB9xC,EAAE,MAAM,EAAI,KACzFswC,GAAoB2B,EAAQ/mB,EAAMlrB,EAAE,OAAO,gBAAiBkyC,CAAU,CACxE,CACA,MAAMrmC,EAAMqlC,GAAgBe,EAAQjyC,EAAE,IAAI,EAC1C,GAAI,CAAC6L,EAAK,CACRmmC,EAAO,KAAK,IAAI,EAChB,QACF,CACAA,EAAO,KAAKX,GAAuBrxC,EAAE,OAAQ6L,EAAI,EAAE,EAAI7L,EAAE,MAAO6L,EAAI,EAAE,EAAI7L,EAAE,KAAK,CAAC,CACpF,CACA,MAAMqf,EAAuB,IAAI,IACjC,UAAWrf,KAAK0xC,EAAS,CACvB,MAAMS,EAAOnyC,EAAE,SAAW,CAAC,CAAE,MAAOA,EAAE,MAAO,EAAGA,EAAE,MAAO,EAAGA,EAAE,KAAM,CAAC,EACrE,UAAWoB,KAAK+wC,EACV9yB,EAAK,IAAIje,EAAE,KAAK,IACpBie,EAAK,IAAIje,EAAE,KAAK,EAChBA,EAAE,MAAM,OAAO,CAAC,EAAIA,EAAE,EACtBA,EAAE,MAAM,OAAO,CAAC,EAAIA,EAAE,EAE1B,CACA,QAASyB,EAAI,EAAGA,EAAI6uC,EAAQ,OAAQ7uC,IAAK,CACvC,MAAM7C,EAAI0xC,EAAQ7uC,CAAC,EACbuC,EAAI4sC,EAAOnvC,CAAC,EACZsvC,EAAOnyC,EAAE,SAAW,CAAC,CAAE,MAAOA,EAAE,MAAO,EAAGA,EAAE,MAAO,EAAGA,EAAE,KAAM,CAAC,EACrE,GAAKoF,EACL,UAAWhE,KAAK+wC,EACd/wC,EAAE,MAAM,OAAO,CAAC,GAAKgE,EAAE,CAAC,EACxBhE,EAAE,MAAM,OAAO,CAAC,GAAKgE,EAAE,CAAC,CAE5B,CACF,CACA,MAAMgtC,GAAqB,IACrBC,GAAkB,GACxB,SAASC,GAAWnyB,EAAI,CACtB,MAAMoyB,EAAOpyB,EAAG,aAAaA,EAAG,0BAA0B,GAAK,IACzDqyB,EAAS,KAAK,OAAOD,EAAO,IAAM,CAAC,EACzC,OAAO,KAAK,IAAIF,GAAiB,KAAK,IAAID,GAAoBI,CAAM,CAAC,CACvE,CACA,MAAMC,GAAcC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMXA,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqBxBC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUjB,SAASC,GAAkBzyB,EAAI,CAC7B,MAAM4b,EAAW,CAACtb,EAAM5a,IAAQ,CAC9B,MAAMzE,EAAI+e,EAAG,aAAaM,CAAI,EAG9B,GAFAN,EAAG,aAAa/e,EAAGyE,CAAG,EACtBsa,EAAG,cAAc/e,CAAC,EACd,CAAC+e,EAAG,mBAAmB/e,EAAG+e,EAAG,cAAc,EAC7C,MAAM,IAAI,MAAM,mDAAkBA,EAAG,iBAAiB/e,CAAC,CAAC,EAE1D,OAAOA,CACT,EACA,IAAIsxC,EAAWJ,GAAWnyB,CAAE,EACxB2J,EAAO,KACX,OAAW,CACT,MAAMvpB,EAAI4f,EAAG,cAAc,EAC3B,IAAI0yB,EAAS,GACb,GAAI,CACF1yB,EAAG,aAAa5f,EAAGw7B,EAAS5b,EAAG,cAAesyB,GAAWC,CAAQ,CAAC,CAAC,EACnEvyB,EAAG,aAAa5f,EAAGw7B,EAAS5b,EAAG,gBAAiBwyB,EAAQ,CAAC,EACzDxyB,EAAG,mBAAmB5f,EAAG,EAAG,OAAO,EACnC4f,EAAG,mBAAmB5f,EAAG,EAAG,MAAM,EAClC4f,EAAG,mBAAmB5f,EAAG,EAAG,QAAQ,EACpC4f,EAAG,mBAAmB5f,EAAG,EAAG,UAAU,EACtC4f,EAAG,YAAY5f,CAAC,EAChBsyC,EAAS,CAAC,CAAC1yB,EAAG,oBAAoB5f,EAAG4f,EAAG,WAAW,CACrD,MAAY,CACV0yB,EAAS,EACX,CACA,GAAIA,EAAQ,CACV/oB,EAAOvpB,EACP,KACF,CAEA,GADA4f,EAAG,cAAc5f,CAAC,EACdmyC,GAAYL,GACd,MAAM,IAAI,MAAM,sFAAuBA,GAAkB,QAAG,EAE9DK,EAAW,KAAK,IAAIL,GAAiBK,GAAY,CAAC,CACpD,CACA,MAAMI,EAAYJ,EACZ3oB,EAAM,CACV,IAAK5J,EAAG,mBAAmB2J,EAAM,OAAO,EACxC,IAAK3J,EAAG,mBAAmB2J,EAAM,OAAO,EACxC,KAAM3J,EAAG,mBAAmB2J,EAAM,QAAQ,EAC1C,UAAW3J,EAAG,mBAAmB2J,EAAM,aAAa,EACpD,MAAO3J,EAAG,mBAAmB2J,EAAM,SAAS,CAC9C,EACMipB,EAAe,IAAI,aAAaD,EAAY,EAAE,EACpD,QAASjwC,EAAI,EAAGA,EAAIiwC,EAAWjwC,IAAKkwC,EAAa,IAAI/G,GAAUnpC,EAAI,EAAE,EACrE,MAAMmwC,EAAyB,IAAI,QACnC,SAASC,EAAW5C,EAAM,CACxB,IAAIpsC,EAAI+uC,EAAO,IAAI3C,CAAI,EACvB,GAAIpsC,EAAG,OAAOA,EACd,MAAM2jB,EAAMzH,EAAG,kBAAkB,EACjCA,EAAG,gBAAgByH,CAAG,EACtB,MAAM7b,EAAIskC,EAAK,YACT1rC,EAAO,IAAI,aAAaoH,EAAI,EAAE,EACpC,QAASlJ,EAAI,EAAGA,EAAIkJ,EAAGlJ,IAAK,CAC1B,MAAM4D,EAAI5D,EAAI,GACd8B,EAAK8B,CAAC,EAAI4pC,EAAK,UAAUxtC,EAAI,CAAC,EAC9B8B,EAAK8B,EAAI,CAAC,EAAI4pC,EAAK,UAAUxtC,EAAI,EAAI,CAAC,EACtC8B,EAAK8B,EAAI,CAAC,EAAI4pC,EAAK,UAAUxtC,EAAI,EAAI,CAAC,EACtC8B,EAAK8B,EAAI,CAAC,EAAI4pC,EAAK,IAAIxtC,EAAI,CAAC,EAC5B8B,EAAK8B,EAAI,CAAC,EAAI4pC,EAAK,IAAIxtC,EAAI,EAAI,CAAC,EAChC,QAASuJ,EAAI,EAAGA,EAAI,EAAGA,IACrBzH,EAAK8B,EAAI,EAAI2F,CAAC,EAAIikC,EAAK,QAAQxtC,EAAI,EAAIuJ,CAAC,EACxCzH,EAAK8B,EAAI,EAAI2F,CAAC,EAAIikC,EAAK,QAAQxtC,EAAI,EAAIuJ,CAAC,CAE5C,CACA,MAAMyb,EAAO1H,EAAG,aAAa,EAC7BA,EAAG,WAAWA,EAAG,aAAc0H,CAAI,EACnC1H,EAAG,WAAWA,EAAG,aAAcxb,EAAMwb,EAAG,WAAW,EACnD,MAAM8b,EAAI,GACV9b,EAAG,wBAAwB,CAAC,EAC5BA,EAAG,oBAAoB,EAAG,EAAGA,EAAG,MAAO,GAAO8b,EAAG,CAAC,EAClD9b,EAAG,wBAAwB,CAAC,EAC5BA,EAAG,oBAAoB,EAAG,EAAGA,EAAG,MAAO,GAAO8b,EAAG,EAAE,EACnD9b,EAAG,wBAAwB,CAAC,EAC5BA,EAAG,oBAAoB,EAAG,EAAGA,EAAG,MAAO,GAAO8b,EAAG,EAAE,EACnD9b,EAAG,wBAAwB,CAAC,EAC5BA,EAAG,oBAAoB,EAAG,EAAGA,EAAG,MAAO,GAAO8b,EAAG,EAAE,EACnD,MAAMiX,EAAO/yB,EAAG,aAAa,EAC7B,OAAAA,EAAG,WAAWA,EAAG,qBAAsB+yB,CAAI,EAC3C/yB,EAAG,WAAWA,EAAG,qBAAsBkwB,EAAK,QAASlwB,EAAG,WAAW,EACnEA,EAAG,gBAAgB,IAAI,EACvBlc,EAAI,CAAE,IAAA2jB,EAAK,KAAAC,EAAM,KAAAqrB,CAAK,EACtBF,EAAO,IAAI3C,EAAMpsC,CAAC,EACXA,CACT,CACA,MAAO,CACL,GAAAkc,EACA,KAAA2J,EACA,SAAUgpB,EACV,OAAOzC,EAAM,CACX4C,EAAW5C,CAAI,CACjB,EAIA,KAAKjkB,EAAKikB,EAAMnwC,EAAMizC,EAAS,CAC7B,MAAMlvC,EAAIgvC,EAAW5C,CAAI,EACzBlwB,EAAG,WAAW2J,CAAI,EAClB3J,EAAG,gBAAgBlc,EAAE,GAAG,EACxBkc,EAAG,cAAcA,EAAG,QAAQ,EAC5B,MAAMta,EAAM3F,EAAK,cAAgBizC,GAAWA,EAAQ,MAAQA,EAAQ,MAAQA,GAC5EhzB,EAAG,YAAYA,EAAG,WAAYta,CAAG,EACjCsa,EAAG,UAAU4J,EAAI,IAAK,CAAC,EACvB5J,EAAG,iBAAiB4J,EAAI,IAAK,GAAOqC,CAAG,EACvC,MAAM8Z,EAAMhmC,EAAK,OAAS,CAAC,EAAG,EAAG,EAAG,CAAC,EACrCigB,EAAG,UAAU4J,EAAI,MAAOmc,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,EACtD,MAAMkN,EAAO9C,GAAoBD,EAAMnwC,EAAK,MAAQ,EAAGA,EAAK,WAAYA,EAAK,aAAa,EACpFyC,EAAQ,KAAK,IAAI0tC,EAAK,MAAM,OAAQyC,CAAS,EAC/CM,GAAQzwC,EAAQ,GAClBwd,EAAG,iBAAiB4J,EAAI,KAAM,GAAOqpB,EAAK,SAAS,EAAGzwC,EAAQ,EAAE,CAAC,EACjEwd,EAAG,UAAU4J,EAAI,UAAWpnB,CAAK,IAEjCwd,EAAG,iBAAiB4J,EAAI,KAAM,GAAOgpB,CAAY,EACjD5yB,EAAG,UAAU4J,EAAI,UAAW,CAAC,GAE3B7pB,EAAK,WAAa,YACpBigB,EAAG,OAAOA,EAAG,KAAK,EAClBA,EAAG,kBAAkBA,EAAG,UAAWA,EAAG,IAAKA,EAAG,IAAKA,EAAG,GAAG,GAChDjgB,EAAK,WAAa,SAC3BigB,EAAG,QAAQA,EAAG,KAAK,GAEnBA,EAAG,OAAOA,EAAG,KAAK,EAClBA,EAAG,kBAAkBA,EAAG,UAAWA,EAAG,oBAAqBA,EAAG,IAAKA,EAAG,mBAAmB,GAE3F,MAAMkzB,EAAUhD,EAAK,YAAc,MAAQlwB,EAAG,aAAeA,EAAG,eAChEA,EAAG,aAAaA,EAAG,UAAWkwB,EAAK,WAAYgD,EAAS,CAAC,EACzDlzB,EAAG,gBAAgB,IAAI,CACzB,CACF,CACF,CACA,MAAMmzB,GAAyB,OAAO,OAAuB,OAAO,eAAe,CACjF,UAAW,KACX,2BAAAhC,GACA,eAAAH,GACA,gBAAAD,GACA,YAAAH,GACA,oBAAAT,GACA,kBAAAsC,GACA,kBAAAf,GACA,WAAAZ,GACA,uBAAAI,GACA,SAAAvE,EACF,EAAG,OAAO,YAAa,CAAE,MAAO,QAAS,CAAC,CAAC,EAC3C,SAASyG,GAAqBC,EAAMC,EAAMC,EAAS,CACjD,MAAMC,EAAM,KAAK,IAAI,EAAG,OAAOD,CAAO,GAAK,CAAC,EACtCvxC,EAAI,KAAK,IAAI,EAAG,OAAOqxC,CAAI,GAAK,CAAC,EACjCpxC,EAAI,KAAK,IAAI,EAAG,OAAOqxC,CAAI,GAAK,CAAC,EACvC,OAAIE,EAAM,GAAK,KAAK,IAAIxxC,EAAGC,CAAC,EAAU,EAC/BuxC,CACT,CACA,SAASC,GAAWC,EAAS3zC,EAAM4zC,EAAS,CAC1C,MAAMN,EAAO,KAAK,IAAI,EAAGtzC,EAAK,IAAI,EAC5BuzC,EAAO,KAAK,IAAI,EAAGvzC,EAAK,IAAI,EAC5ByzC,EAAMJ,GAAqBC,EAAMC,EAAMvzC,EAAK,SAAW,CAAC,EACxD6zC,EAAU7zC,EAAK,SAAW,CAAC,EAAG,CAAC,EAC/B8zC,EAAa,KAAK,IAAI,EAAG9zC,EAAK,aAAeA,EAAK,WAAa,IAAM,KAAO6zC,EAAQ,CAAC,CAAC,EACtFE,EAAS,KAAK,IAAI,EAAGT,EAAOG,EAAM,CAAC,EACnCO,EAAQh0C,EAAK,YAAcA,EAAK,SAAW,EAAI,KAAK,IAAIA,EAAK,SAAU+zC,CAAM,EAAI,IACvF,SAASE,EAAQl+B,EAAM,CACrB,GAAI69B,EAAQ79B,CAAI,GAAKi+B,EAAO,MAAO,CAACj+B,CAAI,EACxC,MAAMm+B,EAAS,CAAC,EAChB,IAAIvoC,EAAM,GACNwoC,EAAY,GAChB,UAAWxK,KAAM5zB,EAGf,GAFApK,GAAOg+B,GACHA,IAAO,KAAOA,IAAO,OAAKwK,EAAYxoC,EAAI,QAC1CioC,EAAQjoC,CAAG,EAAIqoC,GAASroC,EAAI,OAAS,EASvC,IARIwoC,EAAY,GACdD,EAAO,KAAKvoC,EAAI,MAAM,EAAGwoC,EAAY,CAAC,CAAC,EACvCxoC,EAAMA,EAAI,MAAMwoC,CAAS,IAEzBD,EAAO,KAAKvoC,EAAI,MAAM,EAAG,EAAE,CAAC,EAC5BA,EAAMg+B,GAERwK,EAAY,GACLP,EAAQjoC,CAAG,EAAIqoC,GAASroC,EAAI,OAAS,GAC1CuoC,EAAO,KAAKvoC,EAAI,MAAM,EAAG,EAAE,CAAC,EAC5BA,EAAMA,EAAI,MAAM,EAAE,EAIxB,OAAIA,IAAQ,IAAIuoC,EAAO,KAAKvoC,CAAG,EACxBuoC,EAAO,OAASA,EAAS,CAAC,EAAE,CACrC,CACA,IAAIp9B,EAAQ,CAAC,EACb,MAAMpN,EAAM,OAAOiqC,GAAW,EAAE,EAAE,MAAM;AAAA,CAAI,EAC5C,UAAWvuC,KAAKsE,EAAKoN,EAAM,KAAK,GAAGm9B,EAAQ7uC,CAAC,CAAC,EAC7C,IAAIgvC,EAAY,GAChB,GAAIp0C,EAAK,WAAaA,EAAK,QAAU,GAAK8W,EAAM,OAAS9W,EAAK,UAC5D8W,EAAQA,EAAM,MAAM,EAAG9W,EAAK,OAAO,EACnCo0C,EAAY,GACRp0C,EAAK,kBAAkB,CACzB,IAAI2c,EAAO7F,EAAM9W,EAAK,QAAU,CAAC,EACjC,KAAO2c,EAAK,OAAS,GAAKi3B,EAAQj3B,EAAO,QAAG,EAAIq3B,GAAOr3B,EAAOA,EAAK,MAAM,EAAG,EAAE,EAC9E7F,EAAM9W,EAAK,QAAU,CAAC,EAAI2c,EAAO,QACnC,CAEF,MAAM03B,EAASv9B,EAAM,IAAKiB,GAAM67B,EAAQ77B,CAAC,CAAC,EACpCu8B,EAASx9B,EAAM,OAASg9B,EACxBS,EAASv0C,EAAK,QAAU,SACxBw0C,EAASx0C,EAAK,QAAU,SACxBu5B,EAAKib,IAAW,MAAQf,EAAMe,IAAW,SAAW,KAAK,IAAIf,EAAKF,EAAOE,EAAMa,CAAM,GAAKf,EAAOe,GAAU,EAMjH,MAAO,CAAE,MALGx9B,EAAM,IAAI,CAACf,EAAMpT,IAAM,CACjC,MAAMV,EAAIoyC,EAAO1xC,CAAC,EACZS,EAAImxC,IAAW,OAASd,EAAMc,IAAW,QAAU,KAAK,IAAId,EAAKH,EAAOG,EAAMxxC,CAAC,GAAKqxC,EAAOrxC,GAAK,EACtG,MAAO,CAAE,KAAA8T,EAAM,MAAO9T,EAAG,EAAAmB,EAAG,EAAGm2B,EAAK52B,EAAImxC,CAAW,CACrD,CAAC,EACoB,WAAAA,EAAY,OAAAQ,EAAQ,UAAAF,EAAW,KAAAd,EAAM,KAAAC,CAAK,CACjE,CACA,SAASkB,GAAcC,EAAKC,EAAQ30C,EAAM,CACxC,MAAMszC,EAAOqB,EAAO,KACdpB,EAAOoB,EAAO,KACdC,EAAQ50C,EAAK,OAAS,CAAC,EAAG,EAAG,CAAC,EAC9B60C,EAAQ70C,EAAK,QAAU,OAASA,EAAK,MAAQ,EAC7CqqC,EAAKrqC,EAAK,aAAe,OAASA,EAAK,WAAa,EAC1D00C,EAAI,KAAO10C,EAAK,KAChB,GAAI,CACF00C,EAAI,eAAiB10C,EAAK,SAAWA,EAAK,QAAQ,CAAC,EAAIA,EAAK,QAAQ,CAAC,EAAI,GAAK,IAChF,MAAQ,CACR,CAEA,GADA00C,EAAI,aAAe,SACf10C,EAAK,iBAAkB,CACzB,MAAM80C,EAAK90C,EAAK,iBAAmB,CAAC,EAAG,EAAG,CAAC,EACrC+0C,EAAM/0C,EAAK,uBAAyB,OAASA,EAAK,qBAAuB,EAC/E00C,EAAI,UAAY,QAAQ,KAAK,MAAMI,EAAG,CAAC,EAAI,IAAMC,CAAG,CAAC,IAAI,KAAK,MAAMD,EAAG,CAAC,EAAI,IAAMC,CAAG,CAAC,IAAI,KAAK,MAAMD,EAAG,CAAC,EAAI,IAAMC,CAAG,CAAC,IAAIF,CAAK,IAChIH,EAAI,SAAS,EAAG,EAAGpB,EAAMC,CAAI,CAC/B,CACA,MAAMyB,EAAO,CAAC1f,EAAIC,EAAI+V,IAAU,CAC9BoJ,EAAI,UAAYpJ,EAChB,UAAWv0B,KAAQ49B,EAAO,MAAOD,EAAI,SAAS39B,EAAK,KAAMA,EAAK,EAAIue,EAAIve,EAAK,EAAI49B,EAAO,WAAa,EAAIpf,CAAE,CAC3G,EACA,GAAIv1B,EAAK,WAAY,CACnB,MAAMW,EAAM,KAAK,IAAI,GAAIX,EAAK,WAAa,IAAM,EAAE,EACnDg1C,EAAKr0C,EAAKA,EAAK,cAAck0C,EAAQ,GAAI,GAAG,CAC9C,CACAG,EAAK,EAAG,EAAG,QAAQ,KAAK,MAAMJ,EAAM,CAAC,EAAI,IAAMvK,CAAE,CAAC,IAAI,KAAK,MAAMuK,EAAM,CAAC,EAAI,IAAMvK,CAAE,CAAC,IAAI,KAAK,MAAMuK,EAAM,CAAC,EAAI,IAAMvK,CAAE,CAAC,IAAIwK,CAAK,GAAG,CACtI,CACA,MAAMI,GAAgB,YACtB,SAASC,IAAqB,CAC5B,MAAO,CAAE,IAAK,IAAM,CACpB,EAAG,KAAM,IAAM,CACf,EAAG,MAAO,IAAM,CAChB,EAAG,KAAM,IAAM,CACf,EAAG,MAAO,IAAM,CAChB,CAAE,CACJ,CACA,SAASC,GAAWC,EAAQ,CAC1B,OAAO,IAAI,MAAMA,EAAQ,CACvB,IAAIr9B,EAAGlV,EAAMwyC,EAAM,CACjB,MAAM/0C,EAAI,QAAQ,IAAIyX,EAAGlV,EAAMwyC,CAAI,EACnC,GAAI/0C,GAAK,MAAQ,OAAOuC,GAAS,UAAYA,IAAS,OAAQ,CAC5D,MAAMyyC,EAAO,IAAG,GAChB,OAAAv9B,EAAElV,CAAI,EAAIyyC,EACHA,CACT,CACA,OAAOh1C,CACT,CACF,CAAC,CACH,CACA,SAASi1C,GAAmB18B,EAAI28B,EAAI,CAGlC,MAFe,IAAM,CACrB,CAEF,CACA,SAASC,GAAgBL,EAAQp1C,EAAM,CACrCo1C,EAAO,cAAgB,CAAC,CAACp1C,EAAK,cAC1B,OAAOA,EAAK,mBAAsB,YAAWo1C,EAAO,kBAAoBp1C,EAAK,mBAC5Eo1C,EAAO,cAAaA,EAAO,YAAcp1C,EAAK,aAAeu1C,IAC7DH,EAAO,aAAYA,EAAO,WAAap1C,EAAK,YAAcu1C,IAC1DH,EAAO,eAAcA,EAAO,aAAep1C,EAAK,eAAiB,IAAM,CAC5E,IACKo1C,EAAO,gBAAeA,EAAO,cAAgBp1C,EAAK,gBAAkB,IAAM,CAC/E,IACI,OAAOA,EAAK,kBAAqB,aAAYo1C,EAAO,iBAAmBp1C,EAAK,kBAChF,MAAM01C,EAAW11C,EAAK,cAAgB,KACtCo1C,EAAO,MAAQ,CACb,SAAU,IAAM,CACd,GAAIM,GAAYA,EAAS,SAAU,OAAOA,EAAS,SAAS,CAC9D,EACA,aAAc,IAAM,CAClB,GAAIA,GAAYA,EAAS,aAAc,OAAOA,EAAS,aAAa,CACtE,EACA,KAAM,IAAM,CACV,GAAIA,GAAYA,EAAS,KAAM,OAAOA,EAAS,KAAK,CACtD,EACA,MAAO,IAAM,CACX,GAAIA,GAAYA,EAAS,MAAO,OAAOA,EAAS,MAAM,CACxD,EACA,UAAW,IAAM,CACf,GAAIA,GAAYA,EAAS,UAAW,OAAOA,EAAS,UAAU,CAChE,EACA,IAAI,UAAW,CACb,OAAOA,GAAYA,EAAS,SAAWA,EAAS,SAAW,IAC7D,CACF,EACA,MAAM3gC,EAAM/U,EAAK,YACjB,OAAO,eAAeo1C,EAAQ,cAAe,CAC3C,aAAc,GACd,WAAY,GACZ,KAAM,CACJ,OAAOrgC,GAAOA,EAAI,MAAQ,OAAOA,EAAI,KAAK,EAAI,EAChD,CACF,CAAC,EACD,OAAO,eAAeqgC,EAAQ,YAAa,CACzC,aAAc,GACd,WAAY,GACZ,KAAM,CACJ,OAAOrgC,GAAOA,EAAI,IAAM,OAAOA,EAAI,GAAG,EAAI,EAC5C,CACF,CAAC,CACH,CACA,MAAM4gC,EAAK,CACT,YAAYvyC,EAAGmB,EAAGkN,EAAG,CACnB,GAAIrO,IAAM,MAAQ,OAAOA,GAAM,SAC7B,KAAK,EAAIA,EAAE,IAAM,OAASA,EAAE,EAAIA,EAAE,OAAS,EAC3C,KAAK,EAAImB,IAAM,OAASA,EAAInB,EAAE,IAAM,OAASA,EAAE,EAAIA,EAAE,QAAU,EAC/D,KAAK,EAAIqO,IAAM,OAASA,EAAIrO,EAAE,GAAK,UAC1BmB,IAAM,QAAUkN,IAAM,OAAQ,CACvC,MAAM5F,EAAI,OAAOzI,CAAC,GAAK,EACvB,KAAK,EAAIyI,EACT,KAAK,EAAIA,EACT,KAAK,EAAIA,CACX,MACE,KAAK,EAAI,OAAOzI,CAAC,GAAK,EACtB,KAAK,EAAI,OAAOmB,CAAC,GAAK,EACtB,KAAK,EAAI,OAAOkN,CAAC,GAAK,CAE1B,CACA,IAAInR,EAAG,CACL,MAAMiG,EAAI,IAAIovC,GAAKr1C,CAAC,EACpB,OAAO,IAAIq1C,GAAK,KAAK,EAAIpvC,EAAE,EAAG,KAAK,EAAIA,EAAE,EAAG,KAAK,EAAIA,EAAE,CAAC,CAC1D,CACA,SAASjG,EAAG,CACV,MAAMiG,EAAI,IAAIovC,GAAKr1C,CAAC,EACpB,OAAO,IAAIq1C,GAAK,KAAK,EAAIpvC,EAAE,EAAG,KAAK,EAAIA,EAAE,EAAG,KAAK,EAAIA,EAAE,CAAC,CAC1D,CACA,SAASjG,EAAG,CACV,OAAIA,GAAK,OAAOA,GAAM,SAAiB,IAAIq1C,GAAK,KAAK,EAAIr1C,EAAE,EAAG,KAAK,EAAIA,EAAE,EAAG,KAAK,EAAIA,EAAE,CAAC,EACjF,IAAIq1C,GAAK,KAAK,EAAIr1C,EAAG,KAAK,EAAIA,EAAG,KAAK,EAAIA,CAAC,CACpD,CACA,OAAOA,EAAG,CACR,MAAMs1C,EAAO,CAAC9uC,EAAGxB,IAAMA,IAAM,EAAI,EAAIwB,EAAIxB,EACzC,OAAIhF,GAAK,OAAOA,GAAM,SAAiB,IAAIq1C,GAAKC,EAAK,KAAK,EAAGt1C,EAAE,CAAC,EAAGs1C,EAAK,KAAK,EAAGt1C,EAAE,CAAC,EAAGs1C,EAAK,KAAK,EAAGt1C,EAAE,CAAC,CAAC,EAChG,IAAIq1C,GAAKC,EAAK,KAAK,EAAGt1C,CAAC,EAAGs1C,EAAK,KAAK,EAAGt1C,CAAC,EAAGs1C,EAAK,KAAK,EAAGt1C,CAAC,CAAC,CACnE,CACA,MAAO,CACL,OAAO,IAAIq1C,GAAK,KAAK,EAAG,KAAK,EAAG,KAAK,CAAC,CACxC,CAGA,IAAIr1C,EAAG,EAAG,CACR,MAAMiG,EAAI,IAAIovC,GAAKr1C,CAAC,EACd4L,EAAI,OAAO,CAAC,EACZpF,EAAI,OAAO,SAASoF,CAAC,EAAIA,EAAI,EACnC,OAAO,IAAIypC,GACT,KAAK,GAAKpvC,EAAE,EAAI,KAAK,GAAKO,EAC1B,KAAK,GAAKP,EAAE,EAAI,KAAK,GAAKO,EAC1B,KAAK,GAAKP,EAAE,EAAI,KAAK,GAAKO,CAC5B,CACF,CACA,QAAS,CACP,OAAO,KAAK,KAAK,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,CAAC,CACtE,CACA,WAAY,CACV,MAAM8I,EAAI,KAAK,OAAO,EACtB,OAAOA,IAAM,EAAI,IAAI+lC,GAAK,EAAG,EAAG,CAAC,EAAI,IAAIA,GAAK,KAAK,EAAI/lC,EAAG,KAAK,EAAIA,EAAG,KAAK,EAAIA,CAAC,CAClF,CACA,IAAItP,EAAG,CACL,MAAMiG,EAAI,IAAIovC,GAAKr1C,CAAC,EACpB,OAAO,KAAK,EAAIiG,EAAE,EAAI,KAAK,EAAIA,EAAE,EAAI,KAAK,EAAIA,EAAE,CAClD,CACA,UAAW,CACT,OAAO,KAAK,EAAI,IAAM,KAAK,EAAI,IAAM,KAAK,CAC5C,CACF,CACA,MAAMsvC,GAAOF,GACb,SAASG,GAAarvC,EAAO,CAI3B,GAHIA,aAAiBkvC,IACjB,CAAClvC,GAAS,OAAOA,GAAU,UAAY,MAAM,QAAQA,CAAK,GAC1D,EAAE,MAAOA,IAAU,EAAE,MAAOA,IAAU,EAAE,MAAOA,IAC/C,OAAO,eAAeA,CAAK,IAAMkvC,GAAK,UAAW,OAAOlvC,EAC5D,GAAI,CACF,OAAO,eAAeA,EAAOkvC,GAAK,SAAS,CAC7C,MAAQ,CACR,CACA,OAAOlvC,CACT,CACA,SAASsvC,GAAUC,EAAa,CAC9B,OAAIA,GAAeA,EAAY,oBAA4BA,EACpD,CACL,oBAAqB,IAAIL,GAAK,EAAG,EAAG,CAAC,EACrC,qBAAsB,IAAIA,GAAK,EAAG,EAAG,CAAC,EACtC,eAAgB,IAAIA,GAAK,EAAG,EAAG,CAAC,EAChC,mBAAoB,IAAIA,GAAK,EAAG,EAAG,CAAC,EACpC,eAAgB,EAClB,CACF,CACA,SAASM,GAAmB7yC,EAAGmB,EAAGkN,EAAG,CACnC,OAAO,IAAIkkC,GAAKvyC,GAAK,EAAGmB,GAAK,EAAGkN,GAAK,CAAC,CACxC,CACA,SAASykC,IAAkB,CACzB,MAAMphC,EAAO,CACX,oBAAqB,IAAI6gC,GAAK,EAAG,EAAG,CAAC,EACrC,qBAAsB,IAAIA,GAAK,EAAG,EAAG,CAAC,EACtC,eAAgB,IAAIA,GAAK,EAAG,EAAG,CAAC,EAChC,mBAAoB,IAAIA,GAAK,EAAG,EAAG,CAAC,EACpC,eAAgB,EAClB,EACA,OAAA7gC,EAAK,OAAS,SAASzU,EAAG,CACxB,OAAKA,IACLyU,EAAK,oBAAoB,EAAIzU,EAAE,GAC/ByU,EAAK,oBAAoB,EAAIzU,EAAE,SAAW,KAAOA,EAAE,QAAUA,EAAE,GAC/DyU,EAAK,oBAAoB,EAAI,EAC7BA,EAAK,qBAAqB,EAAIzU,EAAE,QAChCyU,EAAK,qBAAqB,EAAIzU,EAAE,QAChCyU,EAAK,qBAAqB,EAAI,EAC9BA,EAAK,eAAe,EAAIzU,EAAE,EAC1ByU,EAAK,eAAe,EAAIzU,EAAE,EAC1ByU,EAAK,eAAe,EAAI,EACxBA,EAAK,mBAAmB,EAAIzU,EAAE,MAC9ByU,EAAK,mBAAmB,EAAIzU,EAAE,MAC9ByU,EAAK,mBAAmB,EAAI,EAC5BA,EAAK,eAAiB,CAAC,CAACzU,EAAE,UACnByU,CACT,EACOA,CACT,CACA,MAAMqhC,GAAS,CACb,IAAK,CAACrvC,EAAGxB,EAAG,IAAMwB,GAAKxB,EAAIwB,GAAK,EAChC,KAAM,CAACA,EAAGxB,EAAG,IAAMwB,GAAKxB,EAAIwB,GAAK,EACjC,MAAO,CAACxG,EAAG6G,EAAIC,IAAO,KAAK,IAAIA,EAAI,KAAK,IAAID,EAAI7G,CAAC,CAAC,EAClD,SAAWA,GAAM,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGA,CAAC,CAAC,EAC3C,WAAY,CAACwG,EAAGxB,EAAGlC,IAAM,CACvB,MAAM2U,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI3U,EAAI0D,IAAMxB,EAAIwB,GAAK,EAAE,CAAC,EACzD,OAAOiR,EAAIA,GAAK,EAAI,EAAIA,EAC1B,EAIA,WAAY,CAACjR,EAAGxB,EAAGlC,IAAM,CACvB,MAAM2U,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI3U,EAAI0D,IAAMxB,EAAIwB,GAAK,EAAE,CAAC,EACzD,OAAOiR,EAAIA,GAAK,EAAI,EAAIA,EAC1B,EACA,OAAQ,CAAC5Q,EAAIC,IAAOD,IAAO,OAAS,KAAK,OAAO,EAAIA,EAAK,KAAK,OAAO,IAAMC,IAAO,OAAS,EAAIA,GAAMD,GACrG,UAAW,CAACA,EAAIC,IAAO,KAAK,OAAOD,GAAM,GAAK,KAAK,OAAO,IAAMC,IAAO,OAAS,EAAIA,GAAM,GAAKD,GAAM,GAAG,EACxG,QAAU2K,GAAQA,EAAM,IAAM,KAAK,GACnC,QAAUskC,GAAQA,EAAM,KAAK,GAAK,GACpC,EACMC,GAAU,CACd,QAAUlxC,GAAM,CACd,MAAMoB,EAAIpB,GAAK,OAAOA,GAAM,SAAWA,EAAI,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EACxDjD,IAAM,OAAOqE,EAAE,CAAC,GAAK,GAAK,EAAI,GAAK,EACnCrF,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,OAAOqF,EAAE,CAAC,GAAK,CAAC,CAAC,EAC7CjG,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,OAAOiG,EAAE,CAAC,GAAK,CAAC,CAAC,EAC7C,EAAI,KAAK,MAAMrE,EAAI,CAAC,EACpBpC,EAAIoC,EAAI,EAAI,EACZ7B,EAAIC,GAAK,EAAIY,GACb8I,EAAI1J,GAAK,EAAIR,EAAIoB,GACjB6W,EAAIzX,GAAK,GAAK,EAAIR,GAAKoB,GAEvBo1C,EADM,CAAC,CAACh2C,EAAGyX,EAAG1X,CAAC,EAAG,CAAC2J,EAAG1J,EAAGD,CAAC,EAAG,CAACA,EAAGC,EAAGyX,CAAC,EAAG,CAAC1X,EAAG2J,EAAG1J,CAAC,EAAG,CAACyX,EAAG1X,EAAGC,CAAC,EAAG,CAACA,EAAGD,EAAG2J,CAAC,CAAC,EAC7D,EAAI,CAAC,EACrB,MAAO,CAAE,EAAGssC,EAAI,CAAC,EAAG,EAAGA,EAAI,CAAC,EAAG,EAAGA,EAAI,CAAC,CAAE,CAC3C,EACA,QAAUnxC,GAAM,CACd,MAAMoB,EAAIpB,GAAK,OAAOA,GAAM,SAAWA,EAAI,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EACxDC,EAAI,OAAOmB,EAAE,CAAC,GAAK,EACnBlB,EAAI,OAAOkB,EAAE,CAAC,GAAK,EACnBjB,EAAI,OAAOiB,EAAE,CAAC,GAAK,EACnBg2B,EAAK,KAAK,IAAIn3B,EAAGC,EAAGC,CAAC,EACrBg3B,EAAK,KAAK,IAAIl3B,EAAGC,EAAGC,CAAC,EACrBJ,EAAIq3B,EAAKD,EACf,IAAIp6B,EAAI,EACR,OAAIgD,EAAI,IACFq3B,IAAOn3B,EAAGlD,GAAKmD,EAAIC,GAAKJ,EAAI,EACvBq3B,IAAOl3B,EAAGnD,GAAK,GAAKoD,EAAIF,GAAKF,GAAK,EACtChD,GAAK,GAAKkD,EAAIC,GAAKH,GAAK,EACzBhD,EAAI,IAAGA,GAAK,IAEX,CAAE,EAAGA,EAAG,EAAGq6B,IAAO,EAAI,EAAIr3B,EAAIq3B,EAAI,EAAGA,CAAG,CACjD,CACF,EACMga,GAAW,CACf,IAAK,CAACzvC,EAAGxB,KAAO,CAAE,GAAIwB,EAAE,GAAK,IAAMxB,EAAE,GAAK,GAAI,GAAIwB,EAAE,GAAK,IAAMxB,EAAE,GAAK,GAAI,GAAIwB,EAAE,GAAK,IAAMxB,EAAE,GAAK,EAAG,GACrG,SAAU,CAACwB,EAAGxB,KAAO,CAAE,GAAIwB,EAAE,GAAK,IAAMxB,EAAE,GAAK,GAAI,GAAIwB,EAAE,GAAK,IAAMxB,EAAE,GAAK,GAAI,GAAIwB,EAAE,GAAK,IAAMxB,EAAE,GAAK,EAAG,GAC1G,MAAO,CAACwB,EAAG5F,KAAO,CAAE,GAAI4F,EAAE,GAAK,GAAK5F,EAAG,GAAI4F,EAAE,GAAK,GAAK5F,EAAG,GAAI4F,EAAE,GAAK,GAAK5F,CAAE,GAC5E,OAAS4F,GAAM,KAAK,MAAMA,EAAE,GAAK,EAAGA,EAAE,GAAK,EAAGA,EAAE,GAAK,CAAC,EACtD,IAAK,CAACA,EAAGxB,KAAOwB,EAAE,GAAK,IAAMxB,EAAE,GAAK,IAAMwB,EAAE,GAAK,IAAMxB,EAAE,GAAK,IAAMwB,EAAE,GAAK,IAAMxB,EAAE,GAAK,GACxF,UAAYwB,GAAM,CAChB,MAAM8I,EAAI,KAAK,MAAM9I,EAAE,GAAK,EAAGA,EAAE,GAAK,EAAGA,EAAE,GAAK,CAAC,GAAK,EACtD,MAAO,CAAE,GAAIA,EAAE,GAAK,GAAK8I,EAAG,GAAI9I,EAAE,GAAK,GAAK8I,EAAG,GAAI9I,EAAE,GAAK,GAAK8I,CAAE,CACnE,EACA,IAAK,CAAC9I,EAAGxB,EAAG,KAAO,CACjB,GAAIwB,EAAE,GAAK,KAAOxB,EAAE,GAAK,IAAMwB,EAAE,GAAK,IAAM,EAC5C,GAAIA,EAAE,GAAK,KAAOxB,EAAE,GAAK,IAAMwB,EAAE,GAAK,IAAM,EAC5C,GAAIA,EAAE,GAAK,KAAOxB,EAAE,GAAK,IAAMwB,EAAE,GAAK,IAAM,CAC9C,EACF,EACM0vC,GAAuB,OAAO,OAAO,CACzC,iBAAkB,EAClB,iBAAkB,EAClB,gBAAiB,CACnB,CAAC,EACKC,GAAkB,CACtB,yBACA,wBACA,uBACA,uBACA,qBACA,oBACF,EACMC,GAAsB,CAC1B,mBACA,SACA,SACA,UACA,WACA,yBACA,SACA,UACA,UACA,aACA,OACA,SACA,WACA,UACA,SACA,UACA,QACA,iBACA,SACA,gBACA,WACA,YACA,QACA,UACA,SACA,aACA,cACA,eACA,gBACA,wBACA,uBACA,cACA,WACA,OACA,OACA,QACA,YACA,YACA,aACA,eAKA,oBACF,EACMC,GAAwB,IAAI,OAChC,wDAAwDD,GAAoB,KAAK,GAAG,CAAC,QACrF,IACF,EACME,GAAoB,CAAE,OAAQ,GAAM,QAAS,GAAM,SAAU,EAAK,EACxE,SAASC,GAAqBlxC,EAAK,CACjC,OAAI,OAAOA,GAAQ,SAAiBA,EAC7BA,EAAI,QAAQ,gCAAiC,aAAa,CACnE,CACA,SAASmxC,GAAqBC,EAAQ,CACpC,OAAOF,GAAqBE,CAAM,EAAE,QAAQ,6DAA8D,CAACC,EAAGC,EAAO7X,IAAS,CAC5H,MAAM8X,EAAM,OAAO9X,CAAI,EACvB,OAAIwX,GAAkBM,CAAG,EAChBD,IAAUC,EAAM,GAAK,OAAOD,CAAK,MAAMC,CAAG,IAE5C,OAAOD,CAAK,QACrB,CAAC,EAAE,QAAQ,8EAA+E,IAAI,EAAE,QAAQ,uFAAwF,IAAI,EAAE,QAAQN,GAAuB,IAAI,CAC3O,CACA,SAASQ,GAAU72C,EAAG,CACpB,OAAIA,IAAM,MAAQ,OAAOA,GAAM,UAAY,UAAWA,EAAUA,EAAE,MAC3DA,CACT,CACA,SAAS82C,GAAeL,EAAQM,EAAar3C,EAAO,CAAC,EAAG,CACtD,GAAI,OAAO+2C,GAAW,UAAYA,EAAO,SAAW,EAAG,OAAO,KAC9D,MAAMzgC,EAAOwgC,GAAqBC,CAAM,EACxC,GAAIzgC,IAASygC,GAAUA,EAAO,QAAQ,QAAQ,EAAI,EAAG,OAAO,KAC5D,MAAMO,EAAW,CAAC,EAClB,GAAID,GAAe,OAAOA,GAAgB,SACxC,SAAW,CAACnrC,EAAG5L,CAAC,IAAK,OAAO,QAAQ+2C,CAAW,EAAGC,EAASprC,CAAC,EAAIirC,GAAU72C,CAAC,EAE7E,MAAMi3C,EAAU,IAAI,MAAM,IAAMA,EAAS,CACvC,OAAQ,CACN,OAAOA,CACT,EACA,IAAIC,EAAI30C,EAAM,CACZ,GAAIA,IAAS,SAAU,MAAO,IAAMy0C,EACpC,GAAI,OAAOz0C,GAAS,UAAYoyC,GAAc,KAAKpyC,CAAI,EACrD,OAAQygB,IACFA,GAAO,OAAOA,GAAQ,UAAY,OAAOA,EAAI,MAAS,UAAY,EAAEA,EAAI,QAAQg0B,KAClFA,EAASh0B,EAAI,IAAI,EAAI6zB,GAAU7zB,EAAI,KAAK,GAEnCi0B,EAIb,CACF,CAAC,EACKE,EAAY,CAChB,KAAMz3C,EAAK,OAAS,QAAUA,EAAK,OAAS,KAAO,OAAOA,EAAK,IAAI,EAAI,GACvE,KAAMA,EAAK,MAAQ,GACnB,UAAWA,EAAK,WAAa,GAC7B,OAAQA,EAAK,OAAS,CAAC,EAAG,EAAG,CAAC,GAAG,MAAM,EACvC,QAASA,EAAK,QAAU,CAAC,EAAG,EAAG,CAAC,GAAG,MAAM,EACzC,OAAQA,EAAK,OAAS,CAAC,EAAG,EAAG,CAAC,GAAG,MAAM,EACvC,QAASA,EAAK,UAAY,GAE1B,OAAQ03C,GAAS13C,EAAK,QAAU,CAAC,EAAG,EAAG,CAAC,CAAC,CAC3C,EACMo1C,EAAS,CACb,cAAe,IAAM,CACrB,EACA,UAAW,EAAI,GACf,QAAS,EACT,WAAYp1C,EAAK,YAAc,CAAE,MAAO,KAAM,OAAQ,IAAK,EAK3D,iBAAkBA,EAAK,kBAAoB,CAAE,EAAG,KAAM,EAAG,IAAK,EAG9D,UAAW,OAAOA,EAAK,WAAc,SAAWA,EAAK,UAAY,EACjE,eAAgBA,EAAK,gBAAkB,CAAC,EAGxC,oBAAqB,GACrB,oBAAqB,GACrB,oBAAqB,GAMrB,WAAYA,EAAK,YAAcu1C,GAC/B,aAAcv1C,EAAK,eAAiB,IAAM,CAC1C,GACA,YAAaA,EAAK,aAAeu1C,GACjC,cAAev1C,EAAK,gBAAkB,IAAM,CAC5C,GACA,iBAAkBA,EAAK,mBAAqB,IAAM,CAClD,GACA,kBAAmB,CAAC,CAACA,EAAK,kBAC1B,cAAe,CAAC,CAACA,EAAK,aACxB,EACAy1C,GAAgBL,EAAQp1C,CAAI,EAC5B,MAAM23C,EAAa33C,EAAK,WACxBo1C,EAAO,qBAAwBvpC,GAAM,CACnC,MAAMK,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,KAAK,MAAM,OAAOL,CAAC,GAAK,CAAC,CAAC,CAAC,EAC9D,IAAIvL,EAAIq3C,EAAaA,EAAW,IAAIzrC,CAAC,EAAI,OACzC,OAAK5L,IACHA,EAAI,CACF,KAAM,IAAI,aAAa4L,CAAC,EACxB,MAAO,IAAI,aAAaA,CAAC,EACzB,QAAS,IAAI,aAAaA,CAAC,CAC7B,EACIyrC,GAAYA,EAAW,IAAIzrC,EAAG5L,CAAC,GAE9BA,CACT,EACA,MAAMs3C,EAAY,CAChB,SAAS/0C,EAAM,CACb,MAAMkV,EAAI/X,EAAK,aAAeA,EAAK,aAAa,OAAO6C,CAAI,CAAC,EAAI,OAChE,MAAO,CAAE,KAAsBkV,GAAM,KAAO,OAAOA,CAAC,EAAI,EAAG,CAC7D,EAIA,YAAYuL,EAAK,CACf,MAAO,CACL,KAAM,GACN,QAAS,GACT,MAAO,CAAC,EAAG,EAAG,CAAC,EACf,MAAO,EACP,UAAWtjB,EAAK,WAAa,GAC7B,KAAMA,EAAK,MAAQ,GACnB,OAAQ03C,GAAS13C,EAAK,QAAU,CAAC,EAAG,EAAG,CAAC,CAAC,EACzC,OAAQ,CAAC,EAAG,EAAG,CAAC,EAChB,MAAO,CAAC,EAAG,EAAG,CAAC,CACjB,CACF,EACA,UAAW,IAAM,CACjB,EACA,cAAe,IAAM,CACvB,EACM63C,EAAS73C,EAAK,QAAU,CAAC,EACzB83C,EAAgB,CAAE,QAAS5C,GAAmB,CAAE,EAChD6C,EAAQhC,GAAU/1C,EAAK,SAAS,EACtC,IAAI2V,EACJ,GAAI,CA+CFA,EA9CgB,IAAI,SAClB,mBACA,SACA,YACA,YACA,SACA,UACA,WACA,yBACA,SACA,UACA,UACA,aACA,OACA,SACA,WACA,UACA,SACA,UACA,QACA,iBACA,SACA,gBACA,WACA,YACA,QACA,UACA,SACA,aACA,cACA,eACA,gBACA,wBACA,uBACA,cACA,WACA,OACA,OACA,QACA,qBACA;AAAA,EAAoBW,EAAO;AAAA,olBAI3BmgC,GAAgB,IAAK5qC,GAAM,GAAGA,CAAC,YAAYA,CAAC,qBAAqBA,CAAC,UAAU,EAAE,KAAK,EAAE,EAAI,aAC3F,EAEEyrC,EACAnC,GAAWC,CAAM,EACjBqC,EACAG,EACAzB,GACAE,GACAE,GACAgB,EACAM,EACAC,EAAc,QACd,OACAA,EACAA,EACAA,EACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACAnC,GACAE,GACAkC,EACAvB,EACF,CACF,OAASt2C,EAAG,CACV,OAAIF,EAAK,SAASA,EAAK,QAAQE,EAAG,OAAO,EAClC,IACT,CACA,MAAM83C,EAAe,CAAC,EAAEriC,GAAO8gC,GAAgB,KAAM5qC,GAAM8J,EAAI9J,CAAC,CAAC,GAC3DosC,EAAe,CAAC,EAAEtiC,GAAO,OAAOA,EAAI,qBAAwB,YAClE,GAAI,CAACA,GAAO,CAACA,EAAI,QAAU,CAACqiC,GAAgB,CAACC,EAAc,OAAO,KAClE,MAAMC,EAAU,CACd,OAAA9C,EACA,UAAAqC,EACA,iBAAkBH,EAClB,UAAW,CAAC,CAAC3hC,EAAI,OAEjB,cAAe,CAAC,EAAEA,EAAI,aAAeA,EAAI,aAAeA,EAAI,aAAeA,EAAI,YAAcA,EAAI,UAAYA,EAAI,YAEjH,aAAAqiC,EACA,aAAAC,EACA,SAAU,EACV,SAAU,GACV,KAAKxxC,EAAO,CACV,GAAKkP,EAAI,KACT,GAAI,CACFA,EAAI,KAAKlP,CAAK,CAChB,OAASvG,EAAG,CACVg4C,EAAQ,WACJl4C,EAAK,SAASA,EAAK,QAAQE,EAAG,MAAM,CAC1C,CACF,EACA,oBAAoByM,EAAO,CACzB,GAAKgJ,EAAI,oBACT,GAAI,CACFA,EAAI,oBAAoBhJ,GAAS,CAAC,CAAC,CACrC,OAASzM,EAAG,CACVg4C,EAAQ,WACJl4C,EAAK,SAASA,EAAK,QAAQE,EAAG,qBAAqB,CACzD,CACF,EAEA,WAAWuG,EAAO,CAChB,GAAI,CAACkP,EAAI,QAAUuiC,EAAQ,SAAU,OAAO,KAC5C,MAAMC,EAASV,EAAU,KACzB,IAAItpB,EACJ,GAAI,CACFA,EAAMxY,EAAI,OAAOwiC,IAAW,GAAKA,EAAS1xC,IAAU,OAASA,EAAQ,EAAE,CACzE,OAASvG,EAAG,CACV,OAAAg4C,EAAQ,WACJl4C,EAAK,SAASA,EAAK,QAAQE,EAAG,QAAQ,EACtCg4C,EAAQ,UAAY,IAAGA,EAAQ,SAAW,IACvC,IACT,CACA,OAAI,OAAO/pB,GAAQ,UACjBspB,EAAU,KAAOtpB,EACVA,GAEL,OAAOA,GAAQ,UAAkB,KACfA,GAAQ,MAC5BspB,EAAU,KAAO,OAAOtpB,CAAG,EACpBspB,EAAU,MAEfA,EAAU,OAASU,EAAeV,EAAU,KACzC,IACT,EAGA,WAAW50C,EAAMu1C,EAAO,CACtB,GAAIF,EAAQ,SAAU,OACtB,MAAMr/B,EAAKlD,EAAI9S,CAAI,EACnB,GAAI,OAAOgW,GAAO,WAClB,GAAI,CACF,OAAOA,EAAGu/B,CAAK,CACjB,OAASl4C,EAAG,CACVg4C,EAAQ,WACJl4C,EAAK,SAASA,EAAK,QAAQE,EAAG2C,CAAI,EAClCq1C,EAAQ,UAAY,IAAGA,EAAQ,SAAW,IAC9C,MACF,CACF,EAKA,UAAUr1C,EAAMu1C,EAAO,CACrB,GAAIF,EAAQ,SAAU,OACtB,MAAMr/B,EAAKlD,EAAI9S,CAAI,EACnB,GAAI,OAAOgW,GAAO,WAClB,GAAI,CACF,OAAOA,EAAGu/B,CAAK,CACjB,OAASl4C,EAAG,CACVg4C,EAAQ,WACJl4C,EAAK,SAASA,EAAK,QAAQE,EAAG2C,CAAI,EAClCq1C,EAAQ,UAAY,IAAGA,EAAQ,SAAW,IAC9C,MACF,CACF,CACF,EACA,OAAOA,CACT,CACA,SAASG,IAAuB,CAC9B,MAAMC,EAAO,CACX,KAAM,IAAMA,EACZ,MAAO,IAAMA,EACb,KAAM,IAAMA,EACZ,SAAU,IAAMA,EAChB,QAAS,IAAMA,EACf,SAAU,IAAMA,EAChB,WAAY,IAAMA,EAGlB,UAAW,OAAO,OAAO,IAAM,GAAO,CAAE,QAAS,IAAM,GAAO,SAAU,IAAM,OAAQ,CAAC,EACvF,IAAI,OAAQ,CACV,MAAO,EACT,EACA,IAAI,YAAa,CACf,MAAO,EACT,EACA,IAAI,MAAO,CACT,MAAO,EACT,CACF,EACA,OAAOA,CACT,CACA,SAASC,GAAqBxoC,EAAO,CACnC,GAAI,CAACA,EAAO,OAAOsoC,GAAqB,EACxC,GAAItoC,EAAM,iBAAkB,OAAOA,EAAM,iBAAiB,IAC1D,MAAMyoC,EAAQ,CACZ,MAAO,KAEP,QAAS,GACT,KAAM,CACR,EACMC,EAAM,CACV,KAAM,KACJD,EAAM,QAAU,GACTC,GAET,MAAO,KACLD,EAAM,QAAU,GACTC,GAGT,KAAM,KACJD,EAAM,QAAU,GACTC,GAET,SAAW5sC,GAAM,CACf,MAAMvL,EAAI,OAAOuL,CAAC,EAClB,OAAA2sC,EAAM,MAAQ,OAAO,SAASl4C,CAAC,EAAIA,EAAI,EAChCm4C,CACT,EACA,QAAU,GAAM,CACd,MAAMn4C,EAAI,OAAO,CAAC,EAClB,OAAI,OAAO,SAASA,CAAC,IAAGk4C,EAAM,KAAOl4C,GAC9Bm4C,CACT,EACA,SAAU,IAAMA,EAChB,WAAan4C,IACXyP,EAAM,QAAU,CAAC,CAACzP,EACXm4C,GAET,UAAW,OAAO,OAAO,IAAMD,EAAM,QAAS,CAC5C,QAAS,IAAMA,EAAM,QACrB,SAAU,IAAM,OAAOA,EAAM,OAAO,CACtC,CAAC,EACD,IAAI,OAAQ,CACV,OAAOA,EAAM,QAAU,KAAO,EAAIA,EAAM,KAC1C,EACA,IAAI,YAAa,CACf,OAAOzoC,EAAM,kBAAoB,CACnC,EACA,IAAI,MAAO,CACT,OAAOyoC,EAAM,IACf,CACF,EACA,OAAAA,EAAM,IAAMC,EACZ1oC,EAAM,iBAAmByoC,EAClBC,CACT,CACA,SAASC,GAAuB3oC,EAAO,CACrC,GAAIA,GAASA,EAAM,gBAAiB,OAAOA,EAAM,gBACjD,MAAM4oC,EAAM,IAAM5oC,GAASA,EAAM,UAAY,KACvC0oC,EAAM,CACV,IAAI,UAAW,CACb,MAAMtzC,EAAIwzC,EAAI,EACR9sC,EAAI1G,GAAK,OAAOA,EAAE,UAAa,WAAaA,EAAE,SAAS,EAAI,EACjE,OAAO,OAAO,SAAS0G,CAAC,EAAIA,EAAI,CAClC,EACA,IAAI,MAAO,CACT,MAAM1G,EAAIwzC,EAAI,EACR9sC,EAAI1G,GAAK,OAAOA,EAAE,SAAY,WAAaA,EAAE,QAAQ,EAAI,EAC/D,OAAO,OAAO,SAAS0G,CAAC,GAAKA,EAAI,EAAIA,EAAI,CAC3C,EACA,IAAI,KAAKvL,EAAG,CACV,MAAM6E,EAAIwzC,EAAI,EACR9sC,EAAI,OAAOvL,CAAC,EACd6E,GAAK,OAAOA,EAAE,SAAY,YAAc,OAAO,SAAS0G,CAAC,GAAG1G,EAAE,QAAQ0G,CAAC,CAC7E,EACA,IAAI,MAAO,CACT,MAAM1G,EAAIwzC,EAAI,EACd,OAAOxzC,GAAK,OAAOA,EAAE,SAAY,WAAa,CAAC,CAACA,EAAE,QAAQ,EAAI,EAChE,EACA,IAAI,KAAK7E,EAAG,CACV,MAAM6E,EAAIwzC,EAAI,EACVxzC,GAAK,OAAOA,EAAE,SAAY,YAAYA,EAAE,QAAQ,CAAC,CAAC7E,CAAC,CACzD,EACA,KAAM,IAAM,CACV,MAAM6E,EAAIwzC,EAAI,EACVxzC,GAAKA,EAAE,MAAMA,EAAE,KAAK,CAC1B,EACA,MAAO,IAAM,CACX,MAAMA,EAAIwzC,EAAI,EACVxzC,GAAKA,EAAE,OAAOA,EAAE,MAAM,CAC5B,EACA,KAAM,IAAM,CACV,MAAMA,EAAIwzC,EAAI,EACVxzC,GAAKA,EAAE,MAAMA,EAAE,KAAK,CAC1B,EACA,UAAW,OAAO,OAAO,IAAM,CAC7B,MAAMA,EAAIwzC,EAAI,EACd,MAAO,CAAC,EAAExzC,GAAK,OAAOA,EAAE,WAAc,YAAcA,EAAE,UAAU,EAClE,EAAG,CACD,SAAU,CACR,MAAMA,EAAIwzC,EAAI,EACd,MAAO,CAAC,EAAExzC,GAAK,OAAOA,EAAE,WAAc,YAAcA,EAAE,UAAU,EAClE,EACA,UAAW,CACT,MAAMA,EAAIwzC,EAAI,EACd,OAAO,OAAO,CAAC,EAAExzC,GAAK,OAAOA,EAAE,WAAc,YAAcA,EAAE,UAAU,EAAE,CAC3E,CACF,CAAC,EACD,eAAgB,IAAM,CACpB,MAAMA,EAAIwzC,EAAI,EACR9sC,EAAI1G,GAAK,OAAOA,EAAE,gBAAmB,WAAaA,EAAE,eAAe,EAAI,EAC7E,OAAO,OAAO,SAAS0G,CAAC,EAAIA,EAAI,CAClC,EACA,eAAiBkM,GAAM,CACrB,MAAM5S,EAAIwzC,EAAI,EACR9sC,EAAI,OAAOkM,CAAC,EACd5S,GAAK,OAAOA,EAAE,gBAAmB,YAAc,OAAO,SAAS0G,CAAC,GAAG1G,EAAE,eAAe0G,CAAC,CAC3F,EACA,iBAAmBkY,GAAO,CACxB,MAAM5e,EAAIwzC,EAAI,EACV,OAAO50B,GAAO,YAAc5e,GAAK,OAAOA,EAAE,kBAAqB,YAAYA,EAAE,iBAAiB4e,CAAE,CACtG,CACF,EACA,OAAIhU,IAAOA,EAAM,gBAAkB0oC,GAC5BA,CACT,CACA,SAASG,IAAqB,CAC5B,MAAM70C,EAAoB,IAAI,IACxB80C,EAAO3sC,GAAMnI,EAAE,IAAI,OAAOmI,CAAC,CAAC,EAAInI,EAAE,IAAI,OAAOmI,CAAC,CAAC,EAAI,KACnDkoB,EAAM,CAACloB,EAAG5L,IAAM,CACpByD,EAAE,IAAI,OAAOmI,CAAC,EAAG,OAAO5L,CAAC,CAAC,CAC5B,EACA,MAAO,CACL,QAASu4C,EACT,QAASzkB,EAET,IAAAykB,EACA,IAAAzkB,EACA,WAAaloB,GAAM,CACjBnI,EAAE,OAAO,OAAOmI,CAAC,CAAC,CACpB,EACA,OAASA,GAAM,CACbnI,EAAE,OAAO,OAAOmI,CAAC,CAAC,CACpB,EACA,MAAO,IAAM,CACXnI,EAAE,MAAM,CACV,EACA,IAAMpB,GAAM,MAAM,KAAKoB,EAAE,KAAK,CAAC,EAAEpB,CAAC,GAAK,KACvC,IAAI,QAAS,CACX,OAAOoB,EAAE,IACX,CACF,CACF,CACA,SAAS+0C,GAAY/oC,EAAOiiC,EAAY,CACtC,MAAM7B,EAAOpgC,GAASA,EAAM,OACtB49B,EAAQwC,GAAQA,EAAK,OAAS,KAC9B1tC,EAAQkrC,EAAQA,EAAM,OAAS,EAC/BnsC,EAASuO,GAASA,EAAM,QAAU,CAAC,EAAG,EAAG,CAAC,EAC1CmE,EAAQnE,GAASA,EAAM,OAAS,CAAC,EAAG,EAAG,CAAC,EACxC1J,EAAK6N,EAAM,CAAC,GAAK,EACjB5N,EAAK4N,EAAM,CAAC,GAAK,EACjB0tB,EAAU,CAAC5U,EAAIC,IAAO,CAACzrB,EAAO,CAAC,EAAIwrB,EAAK3mB,EAAI7E,EAAO,CAAC,EAAIyrB,EAAK3mB,CAAE,EAC/DyyC,EAAU,CAACC,EAAIC,IAAO,EAAED,EAAKx3C,EAAO,CAAC,GAAK6E,EAAI,EAAE4yC,EAAKz3C,EAAO,CAAC,GAAK8E,CAAE,EACpE4yC,EAAUv2C,GAAM,CACpB,MAAMk1B,EAAKma,EAAW,IAAIrvC,CAAC,EAC3B,GAAIk1B,EAAI,MAAO,CAACA,EAAG,CAAC,EAAGA,EAAG,CAAC,EAAGA,EAAG,CAAC,CAAC,EACnC,MAAM9zB,EAAI4pC,EAAMhrC,CAAC,EAAE,OACnB,MAAO,CAACoB,EAAE,EAAE,EAAGA,EAAE,EAAE,EAAGA,EAAE,EAAE,CAAC,CAC7B,EACMo1C,EAAUx2C,GAAM,CACpB,IAAIS,EAAI,EAAGmB,EAAI,EACXoH,EAAMhJ,EACV,QAASsJ,EAAQ,EAAGN,GAAO,GAAKA,EAAMlJ,GAASwJ,EAAQ,GAAIA,IAAS,CAClE,MAAM8L,EAAImhC,EAAOvtC,CAAG,EACpBvI,GAAK2U,EAAE,CAAC,EACRxT,GAAKwT,EAAE,CAAC,EACRpM,EAAMgiC,EAAMhiC,CAAG,EAAE,MACnB,CACA,OAAOi2B,EAAQx+B,EAAGmB,CAAC,CACrB,EACM60C,EAAiBz2C,GAAM,CAC3B,MAAM02C,EAAK,CAET,YAAY/4C,EAAG,CACb,GAAIA,IAAM,OAAQ,CAChB,MAAM2B,EAAIk3C,EAAOx2C,CAAC,EAClB,OAAO,IAAIgzC,GAAK1zC,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAG,CAAC,CAC/B,CACA,MAAM6E,EAAIwyC,GAAQh5C,CAAC,EACnB,IAAI8F,EAAK,EAAGD,EAAK,EACjB,GAAIwnC,EAAMhrC,CAAC,EAAE,QAAU,EAAG,CACxB,MAAM42C,EAAKJ,EAAOxL,EAAMhrC,CAAC,EAAE,MAAM,EAC3B62C,EAAKT,EAAQQ,EAAG,CAAC,EAAGA,EAAG,CAAC,CAAC,EAC/BnzC,EAAKozC,EAAG,CAAC,EACTrzC,EAAKqzC,EAAG,CAAC,CACX,CACA,MAAM5pC,EAAImpC,EAAQjyC,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,EAC5B,OAAAkrC,EAAW,IAAIrvC,EAAG,CAACiN,EAAE,CAAC,EAAIxJ,EAAIwJ,EAAE,CAAC,EAAIzJ,EAAI,CAAC,CAAC,EACpCkzC,CACT,EAEA,UAAW,CACT,OAAOA,CACT,EACA,OAAQ,CACN,OAAOA,CACT,CACF,EACA,OAAOA,CACT,EACA,MAAO,CACL,aAAc,IAAM52C,EACpB,iBAAmBE,GAAM,CACvB,MAAMuJ,EAAI,KAAK,MAAM,OAAOvJ,CAAC,CAAC,EAC9B,GAAI,CAACgrC,GAAS,EAAEzhC,GAAK,IAAMA,GAAKzJ,EAAO,CACrC,MAAMg3C,EAAQ,CACZ,YAAY,EAAG,CACb,OAAO,IAAM,OAAS,IAAI9D,GAAK,EAAG,EAAG,CAAC,EAAI8D,CAC5C,EACA,UAAW,CACT,OAAOA,CACT,EACA,OAAQ,CACN,OAAOA,CACT,CACF,EACA,OAAOA,CACT,CACA,OAAOL,EAAcltC,CAAC,CACxB,EACA,iBAAkB,CAACvJ,EAAG02C,IAAO,CAC3B,MAAMntC,EAAI,KAAK,MAAM,OAAOvJ,CAAC,CAAC,EAC1B,CAACgrC,GAAS,EAAEzhC,GAAK,IAAMA,GAAKzJ,CAClC,EAEA,wBAAyB,IAAM,CAC/B,CACF,CACF,CACA,SAASi3C,GAAiBrlB,EAAM,CAC9B,MAAO,CACL,IAAI,SAAU,CACZ,OAAOA,EAAO,CAAC,CAACA,EAAK,QAAU,EACjC,EACA,IAAI,QAAQ/zB,EAAG,CACT+zB,IAAMA,EAAK,QAAU,CAAC,CAAC/zB,EAC7B,EACA,IAAI,MAAO,CACT,OAAO+zB,GAAQA,EAAK,MAAQ,EAC9B,EAEA,YAAa,IAAM,IACrB,CACF,CACA,SAASslB,GAAqBzrB,EAAKluB,EAAM,CACvC,GAAIkuB,GAAO,KAAM,OAAO,KACxB,MAAM0rB,EAAU/2C,GAAS,CACvB,GAAI,CAACA,EAAM,OAAO,KAClB,GAAI7C,GAAQ,OAAOA,EAAK,eAAkB,WAAY,CACpD,MAAM4P,EAAI5P,EAAK,cAAc,OAAO6C,CAAI,CAAC,EACzC,GAAI+M,EAAG,OAAOA,CAChB,CACA,OAAI5P,GAAQA,EAAK,OAASA,EAAK,MAAM,OAAS6C,EAAa7C,EAAK,MACzD,IACT,EACA,OAAoC45C,EAAhC,OAAO1rB,GAAQ,SAAwBA,EAAI,KACjC,OAAOA,CAAG,CAD2B,CAErD,CACA,SAAS2rB,GAAmB9pC,EAAO/P,EAAM,CAClC+P,IACLA,EAAM,YAAc,GACpBA,EAAM,QAAU,GAChBA,EAAM,UAAY,GACd/P,GAAQ,OAAOA,EAAK,qBAAwB,YAAYA,EAAK,oBAAoB,EACvF,CACA,SAAS85C,GAAyBC,EAAWC,EAAY,CAEvD,GADI,OAAOD,GAAc,UAAY,CAACA,GAClC,eAAe,KAAKA,CAAS,EAAG,OAAOA,EAC3C,MAAMrrC,EAAKsrC,GAAc,MAAQA,IAAe,GAAK,OAAOA,CAAU,EAAI,GAC1E,GAAI,CAACtrC,EAAI,OAAOqrC,EAChB,MAAMh2C,EAAIg2C,EAAU,MAAM,sDAAsD,EAChF,OAAKh2C,EACE,GAAGA,EAAE,CAAC,CAAC,aAAa2K,CAAE,IAAI3K,EAAE,CAAC,CAAC,GADtBg2C,CAEjB,CACA,SAASE,GAAkBlD,EAAQ,CACjC,GAAI,OAAOA,GAAW,SAAU,OAAO,KACvC,MAAMhzC,EAAIgzC,EAAO,MAAM,iDAAiD,EACxE,OAAOhzC,EAAIA,EAAE,CAAC,EAAI,IACpB,CACA,SAASm2C,GAAcl6C,EAAM,CAC3B,MAAMm6C,EAAcpqC,GAAUqqC,GAAqBrqC,GAAS,KAAM/P,CAAI,EACtE,MAAO,CACL,SAAS6C,EAAM,CACb,GAAI7C,EAAK,cAAe,CACtB,MAAM4P,EAAI5P,EAAK,cAAc,OAAO6C,CAAI,CAAC,EACzC,GAAI+M,GAAK,CAACA,EAAE,UAAW,OAAOuqC,EAAWvqC,CAAC,CAC5C,CACA,OAAOuqC,EAAW,IAAI,CACxB,EACA,YAAY16C,EAAK,CACf,GAAI,OAAOO,EAAK,kBAAqB,WAAY,OAAOm6C,EAAW,IAAI,EACvE,IAAIjsB,EAAMzuB,EACV,GAAI,OAAOA,GAAQ,SAAU,CAC3B,MAAM46C,EAAM,OAAOr6C,EAAK,eAAkB,WAAaA,EAAK,cAAc,EAAIA,EAAK,WACnFkuB,EAAM4rB,GAAyBr6C,EAAK46C,CAAG,CACzC,CACA,MAAMC,EAAUt6C,EAAK,iBAAiBkuB,CAAG,EACzC,OAAoBisB,EAAhBG,GACc,IADoB,CAExC,EACA,aAAapsB,EAAK,CAChB2rB,GAAmBF,GAAqBzrB,EAAKluB,CAAI,EAAGA,CAAI,CAC1D,EACA,UAAW,IAAM,CACjB,EACA,cAAckuB,EAAK,CACjB,MAAM5jB,EAAO,OAAOtK,EAAK,sBAAyB,WAAaA,EAAK,qBAAqB,EAAI,CAAC,EACxF6C,EAAOqrB,GAAO,OAAOA,GAAQ,SAAWA,EAAI,KAAO,OAAOA,GAAO,EAAE,EACnE,EAAI5jB,EAAK,UAAWsF,GAAMA,GAAKA,EAAE,OAAS/M,CAAI,EACpD,OAAO,EAAI,EAAI,EAAI,CACrB,EACA,iBAAkB,CAChB,MAAMyH,EAAO,OAAOtK,EAAK,sBAAyB,WAAaA,EAAK,qBAAqB,EAAI,CAAC,EACxFoE,EAAM,CAAC,EACb,UAAWwL,KAAKtF,EACVsF,GAAK,CAACA,EAAE,WAAWxL,EAAI,KAAK+1C,EAAWvqC,CAAC,CAAC,EAE/C,OAAOxL,CACT,EACA,aAAavB,EAAM,CACjB,GAAI,OAAO7C,EAAK,mBAAsB,WAAY,CAChD,MAAM8G,EAAI9G,EAAK,kBAAkB6C,CAAI,EACrC,GAAIiE,EAAG,OAAOA,CAChB,CACA,OAAOuxC,GAAqB,CAC9B,EACA,qBAAsB,CACpB,MAAMlzC,EAAInF,EAAK,kBAAoB,CAAE,KAAM,CAAE,EAC7C,MAAO,CACL,KAAM,OAAOmF,EAAE,MAAS,SAAWA,EAAE,KAAO,EAC5C,OAAQA,EAAE,QAAU,KACpB,IAAKA,EAAE,KAAO,KACd,eAAgB,OAAOA,EAAE,gBAAmB,SAAWA,EAAE,eAAiB,CAC5E,CACF,EACA,oBAAoB,EAAG,CACrB,MAAMA,EAAInF,EAAK,iBACX,CAACmF,GAAK,CAAC,GAAK,OAAO,GAAM,WACzB,OAAO,EAAE,MAAS,UAAY,OAAO,SAAS,EAAE,IAAI,GAAK,EAAE,KAAO,IAAGA,EAAE,KAAO,EAAE,MAChF,EAAE,SAAW,SAAQA,EAAE,OAAS,EAAE,QAClC,EAAE,MAAQ,SAAQA,EAAE,IAAM,EAAE,KAC5B,OAAO,EAAE,gBAAmB,WAAUA,EAAE,eAAiB,EAAE,gBACjE,EACA,sBAAsB+oB,EAAK,CACzB,OAAI,OAAOluB,EAAK,uBAA0B,WAAmBA,EAAK,sBAAsBkuB,CAAG,EAC7EyrB,GAAqBzrB,EAAKluB,CAAI,GAC5B,IAClB,CACF,CACF,CACA,SAASo6C,GAAqBrqC,EAAO/P,EAAM,CACzC,MAAMu6C,EAAO1uB,GAAQ6rB,GAAS,MAAM,QAAQ7rB,CAAG,EAAIA,EAAM,CAAC,EAAG,EAAG,CAAC,CAAC,EAC5DykB,EAAgBtwC,GAAQ,OAAOA,EAAK,kBAAqB,YAAc+P,EAAQ/P,EAAK,iBAAiB+P,CAAK,EAAI,KAC9GyqC,EAAQ,CACZ,OAAQD,EAAIxqC,EAAQA,EAAM,OAAS,CAAC,EAAG,EAAG,CAAC,CAAC,EAC5C,MAAOwqC,EAAIxqC,EAAQA,EAAM,MAAQ,CAAC,EAAG,EAAG,CAAC,CAAC,EAG1C,OAAQ0qC,GAAmB1qC,CAAK,EAChC,KAAMwqC,EAAIxqC,EAAQA,EAAM,KAAO,CAAC,EAAG,EAAG,CAAC,CAAC,EACxC,MAAOwqC,EAAIxqC,EAAQA,EAAM,MAAQ,CAAC,EAAG,EAAG,CAAC,CAAC,CAC5C,EACM2qC,EAAQ,CACZ,IAAI,MAAO,CACT,OAAO3qC,GAASA,EAAM,MAAQ,EAChC,EACA,IAAI,IAAK,CACP,OAAOA,GAASA,EAAM,IAAM,CAC9B,EAKA,IAAI,SAAU,CACZ,MAAM4qC,EAAK36C,GAAQA,EAAK,aACxB,OAAI26C,EAAW,CAAC,CAACA,EAAG,QACf5qC,EACEA,EAAM,cAAgB,OAAS,CAAC,CAACA,EAAM,YAAc,CAAC,CAACA,EAAM,QADjD,EAErB,EACA,IAAI,QAAQzP,EAAG,CACb,MAAMq6C,EAAK36C,GAAQA,EAAK,aACxB,GAAI26C,EAAI,CACNA,EAAG,QAAU,CAAC,CAACr6C,EACf,MACF,CACKyP,IACLA,EAAM,YAAc,CAAC,CAACzP,EAClB,OAAON,EAAK,qBAAwB,WACtCA,EAAK,oBAAoB,EAEzB+P,EAAM,QAAU,CAAC,CAACzP,EAEtB,EACA,IAAI,OAAQ,CACV,OAAOyP,GAAS,OAAOA,EAAM,OAAU,SAAWA,EAAM,MAAQ,CAClE,EACA,IAAI,MAAMzP,EAAG,CACPyP,IAAOA,EAAM,MAAQ,OAAOzP,CAAC,GAAK,EACxC,EACA,IAAI,YAAa,CACf,OAAOyP,GAAS,OAAOA,EAAM,YAAe,SAAWA,EAAM,WAAa,CAC5E,EACA,IAAI,WAAWzP,EAAG,CACZyP,IAAOA,EAAM,WAAa,OAAOzP,CAAC,GAAK,EAC7C,EACA,IAAI,MAAO,CACT,OAAOyP,GAASA,EAAM,OAAS,OAAS,OAAOA,EAAM,IAAI,EAAI,EAC/D,EACA,IAAI,KAAKzP,EAAG,CACLyP,GACD,OAAOzP,GAAM,YACjByP,EAAM,KAAOzP,GAAK,KAAO,GAAK,OAAOA,CAAC,EACxC,EACA,IAAI,WAAY,CACd,OAAOyP,GAASA,EAAM,eAAiB,EACzC,EACA,IAAI,UAAUzP,EAAG,CACXyP,IAAOA,EAAM,cAAgB,OAAOzP,CAAC,GAAK,GAChD,EAGA,IAAI,MAAO,CACT,OAAOyP,GAASA,EAAM,UAAY,EACpC,EACA,IAAI,KAAKzP,EAAG,CACNyP,IAAOA,EAAM,SAAW,OAAOzP,GAAK,EAAE,EAC5C,EAEA,IAAI,WAAY,CACd,OAAOyP,GAASA,EAAM,WAAa,QACrC,EACA,IAAI,UAAUzP,EAAG,CACf,GAAI,CAACyP,EAAO,OACZ,MAAM7O,EAAI,OAAOZ,GAAK,QAAQ,EAAE,YAAY,EAC5CyP,EAAM,UAAY7O,IAAM,SAAW,SAAWA,CAChD,EAIA,GAAG6O,GAASA,EAAM,QAAUugC,EAAgBwI,GAAY/oC,EAAOugC,CAAa,EAAI,CAC9E,aAAc,IAAM,EACpB,iBAAkB,IAAM,CACtB,MAAMprC,EAAI,CACR,YAAY5E,EAAG,CACb,OAAOA,IAAM,OAAS,IAAIq1C,GAAK,EAAG,EAAG,CAAC,EAAIzwC,CAC5C,EACA,UAAW,CACT,OAAOA,CACT,EACA,OAAQ,CACN,OAAOA,CACT,CACF,EACA,OAAOA,CACT,EACA,iBAAkB,IAAM,CACxB,EACA,wBAAyB,IAAM,CAC/B,CACF,EACA,UAAW,IAAM,CACf,GAAI,CAAC6K,GAASA,EAAM,UAAY,KAAM,OAAO,KAC7C,MAAM1P,EAAIL,GAAQ,OAAOA,EAAK,mBAAsB,WAAaA,EAAK,kBAAkB+P,EAAM,QAAQ,EAAI,KAC1G,MAAI,CAAC1P,GAAKA,EAAE,UAAkB,KACvB+5C,GAAqB/5C,EAAGL,CAAI,CACrC,EACA,YAAa,IAAM,CACjB,MAAM46C,EAAM7qC,GAASA,EAAM,UAAY,CAAC,EACxC,GAAI,CAAC6qC,EAAI,OAAQ,MAAO,CAAC,EACzB,MAAMhB,EAAS55C,GAAQ,OAAOA,EAAK,mBAAsB,WAAaA,EAAK,kBAAoB,KAC/F,GAAI,CAAC45C,EAAQ,MAAO,CAAC,EACrB,MAAMx1C,EAAM,CAAC,EACb,UAAWsK,KAAMksC,EAAK,CACpB,MAAMz1C,EAAIy0C,EAAOlrC,CAAE,EACfvJ,GAAK,CAACA,EAAE,WAAWf,EAAI,KAAKg2C,GAAqBj1C,EAAGnF,CAAI,CAAC,CAC/D,CACA,OAAOoE,CACT,EAUA,aAAe4jB,GAAQ,CACrB,MAAM6yB,EAAM9qC,GAASA,EAAM,WACrBzF,EAAOyF,GAASA,EAAM,eAAiB,CAAC,EAC9C,OAAsBiY,GAAQ,MAAQA,IAAQ,GAAW1d,EAAK,CAAC,GAAK+tC,GAAqB,EACrFwC,GAAOA,EAAI7yB,CAAG,EAAU6yB,EAAI7yB,CAAG,EAC/B,OAAOA,GAAQ,UAAY1d,EAAK0d,CAAG,EAAU1d,EAAK0d,CAAG,EACrD,OAAOA,GAAQ,UAAY,QAAQ,KAAKA,CAAG,GAAK1d,EAAK,OAAO0d,CAAG,CAAC,EAAU1d,EAAK,OAAO0d,CAAG,CAAC,EACvFqwB,GAAqB,CAC9B,EACA,kBAAoBrwB,GAAQ,CAC1B,MAAM6yB,EAAM9qC,GAASA,EAAM,WACrBzF,EAAOyF,GAASA,EAAM,eAAiB,CAAC,EAC9C,OAAI8qC,GAAOA,EAAI7yB,CAAG,EAAU6yB,EAAI7yB,CAAG,EAC/B,OAAOA,GAAQ,UAAY1d,EAAK0d,CAAG,EAAU1d,EAAK0d,CAAG,EACrD,OAAOA,GAAQ,UAAY,QAAQ,KAAKA,CAAG,GAAK1d,EAAK,OAAO0d,CAAG,CAAC,EAAU1d,EAAK,OAAO0d,CAAG,CAAC,EACvFqwB,GAAqB,CAC9B,EACA,uBAAwB,KAAOtoC,GAASA,EAAM,eAAiB,CAAC,GAAG,OACnE,oBAAqB,IAAMwoC,GAAqBxoC,CAAK,EAUrD,KAAM,IAAM,CACVA,GAASA,EAAM,UAAYA,EAAM,SAAS,MAAQA,EAAM,SAAS,KAAK,EACtEA,GAASA,EAAM,UAAYA,EAAM,SAAS,MAAQA,EAAM,SAAS,KAAK,CACxE,EACA,MAAO,IAAM,CACXA,GAASA,EAAM,UAAYA,EAAM,SAAS,OAASA,EAAM,SAAS,MAAM,EACxEA,GAASA,EAAM,UAAYA,EAAM,SAAS,OAASA,EAAM,SAAS,MAAM,CAC1E,EACA,KAAM,IAAM,CACVA,GAASA,EAAM,UAAYA,EAAM,SAAS,MAAQA,EAAM,SAAS,KAAK,EACtEA,GAASA,EAAM,UAAYA,EAAM,SAAS,MAAQA,EAAM,SAAS,KAAK,CACxE,EACA,UAAW,OAAO,OAAO,IAAM,CAC7B,MAAM,EAAIA,GAASA,EAAM,UAAY,OAAOA,EAAM,SAAS,WAAc,YAAcA,EAAM,SAAS,UAAU,EAC1GzP,EAAIyP,GAASA,EAAM,UAAY,OAAOA,EAAM,SAAS,WAAc,YAAcA,EAAM,SAAS,UAAU,EAChH,MAAO,CAAC,EAAE,GAAKzP,EACjB,EAAG,CACD,SAAU,CACR,MAAM,EAAIyP,GAASA,EAAM,UAAY,OAAOA,EAAM,SAAS,WAAc,YAAcA,EAAM,SAAS,UAAU,EAC1GzP,EAAIyP,GAASA,EAAM,UAAY,OAAOA,EAAM,SAAS,WAAc,YAAcA,EAAM,SAAS,UAAU,EAChH,MAAO,CAAC,EAAE,GAAKzP,EACjB,EACA,UAAW,CACT,MAAM,EAAIyP,GAASA,EAAM,UAAY,OAAOA,EAAM,SAAS,WAAc,YAAcA,EAAM,SAAS,UAAU,EAC1GzP,EAAIyP,GAASA,EAAM,UAAY,OAAOA,EAAM,SAAS,WAAc,YAAcA,EAAM,SAAS,UAAU,EAChH,OAAO,OAAO,CAAC,EAAE,GAAKzP,EAAE,CAC1B,CACF,CAAC,EACD,IAAI,QAAS,CACX,GAAIyP,GAASA,EAAM,UAAY,OAAOA,EAAM,SAAS,WAAc,WAAY,OAAOA,EAAM,SAAS,UAAU,EAC/G,MAAMlE,EAAIkE,GAASA,EAAM,YAAcA,EAAM,WAAW,OACxD,OAAO,OAAOlE,GAAM,SAAWA,EAAI,CACrC,EACA,IAAI,OAAOvL,EAAG,CACZ,MAAMuL,EAAI,OAAOvL,CAAC,EAClB,GAAI,CAAC,OAAO,SAASuL,CAAC,GAAK,CAACkE,EAAO,OACnC,MAAM5K,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG0G,CAAC,CAAC,EAChCkE,EAAM,aAAYA,EAAM,WAAW,OAAS5K,GAC5C4K,EAAM,UAAY,OAAOA,EAAM,SAAS,WAAc,YAAYA,EAAM,SAAS,UAAU5K,CAAC,CAClG,EACA,gBAAiB,IAAMuzC,GAAuB3oC,CAAK,EACnD,mBAAoB,IAAM,CACxB,MAAMxJ,EAAIwJ,GAASA,EAAM,QAAU,CAAC,EAAG,EAAG,CAAC,EACrChM,EAAI,IAAI,aAAa,EAAE,EAC7B,OAAAA,EAAE,CAAC,EAAI,EACPA,EAAE,CAAC,EAAI,EACPA,EAAE,EAAE,EAAI,EACRA,EAAE,EAAE,EAAI,EACRA,EAAE,EAAE,EAAIwC,EAAE,CAAC,GAAK,EAChBxC,EAAE,EAAE,EAAIwC,EAAE,CAAC,GAAK,EAChBxC,EAAE,EAAE,EAAIwC,EAAE,CAAC,GAAK,EACT,CAAE,EAAAxC,CAAE,CACb,EAEA,UAAYikB,GAAQ,CAClB,MAAM1d,EAAOyF,GAASA,EAAM,SAAW,KACvC,GAAI,CAACzF,GAAQA,EAAK,SAAW,EAAG,OAAOovC,GAAiB,IAAI,EAC5D,GAAI,OAAO1xB,GAAQ,UAAY,OAAOA,GAAQ,UAAY,QAAQ,KAAKA,CAAG,EACxE,OAAO0xB,GAAiBpvC,EAAK,OAAO0d,CAAG,CAAC,GAAK,IAAI,EAEnD,MAAMnlB,EAAO,OAAOmlB,CAAG,EACvB,OAAO0xB,GAAiBpvC,EAAK,KAAMpK,GAAMA,GAAKA,EAAE,OAAS2C,CAAI,GAAK,IAAI,CACxE,CACF,EACA,OAAO,eAAe63C,EAAO,SAAU,CACrC,WAAY,GACZ,KAAM,CACJ,OAAOF,EAAM,MACf,EACA,IAAIl6C,EAAG,CACL,GAAIyP,GAAS,MAAM,QAAQA,EAAM,MAAM,EAAG,CACxC,MAAM3K,EAAI01C,GAAkBx6C,CAAC,EAC7ByP,EAAM,OAAO,CAAC,EAAI3K,EAAE,CAAC,EACrB2K,EAAM,OAAO,CAAC,EAAI3K,EAAE,CAAC,EACrB2K,EAAM,OAAO,CAAC,EAAI3K,EAAE,CAAC,CACvB,CACF,CACF,CAAC,EACD,UAAW4iB,IAAO,CAAC,SAAU,QAAS,OAAQ,OAAO,EACnD,OAAO,eAAe0yB,EAAO1yB,EAAK,CAChC,WAAY,GACZ,KAAM,CACJ,GAAIjY,GAAS,MAAM,QAAQA,EAAMiY,CAAG,CAAC,EAAG,CACtC,MAAMlhB,EAAIiJ,EAAMiY,CAAG,EACnBwyB,EAAMxyB,CAAG,EAAE,EAAIlhB,EAAE,CAAC,GAAK,EACvB0zC,EAAMxyB,CAAG,EAAE,EAAIlhB,EAAE,CAAC,GAAK,EACvB0zC,EAAMxyB,CAAG,EAAE,EAAIlhB,EAAE,CAAC,GAAK,CACzB,CACA,OAAO0zC,EAAMxyB,CAAG,CAClB,EACA,IAAI1nB,EAAG,CACL,MAAM,EAAIg5C,GAAQh5C,CAAC,EACnBk6C,EAAMxyB,CAAG,EAAE,EAAI,EAAE,CAAC,EAClBwyB,EAAMxyB,CAAG,EAAE,EAAI,EAAE,CAAC,EAClBwyB,EAAMxyB,CAAG,EAAE,EAAI,EAAE,CAAC,EACdjY,GAAS,MAAM,QAAQA,EAAMiY,CAAG,CAAC,GAAKA,IAAQ,SAChDjY,EAAMiY,CAAG,EAAE,CAAC,EAAI,EAAE,CAAC,EACnBjY,EAAMiY,CAAG,EAAE,CAAC,EAAI,EAAE,CAAC,EACnBjY,EAAMiY,CAAG,EAAE,CAAC,EAAI,EAAE,CAAC,EAEvB,CACF,CAAC,EAEH,OAAO0yB,CACT,CACA,SAASK,GAAiBhE,EAAQM,EAAar3C,EAAO,CAAC,EAAG,CACxD,GAAI,OAAO+2C,GAAW,UAAYA,EAAO,SAAW,EAAG,OAAO,KAC9D,MAAMzgC,EAAOwgC,GAAqBC,CAAM,EAClCO,EAAW,CAAC,EAClB,GAAID,GAAe,OAAOA,GAAgB,SACxC,SAAW,CAACnrC,EAAG5L,CAAC,IAAK,OAAO,QAAQ+2C,CAAW,EAC7C,GAAI/2C,IAAM,MAAQ,OAAOA,GAAM,UAAY,OAAOA,EAAE,MAAS,SAAU,CACrE,MAAMkM,EAAOxM,EAAK,eAAiBA,EAAK,eAAeM,EAAE,IAAI,EAAI,OACjEg3C,EAASprC,CAAC,EAAIM,IAAS,OAASA,EAAO2qC,GAAU72C,CAAC,CACpD,MACEg3C,EAASprC,CAAC,EAAIirC,GAAU72C,CAAC,EAI/B,MAAMi3C,EAAU,IAAI,MAAM,IAAMA,EAAS,CACvC,OAAQ,CACN,OAAOA,CACT,EACA,IAAIC,EAAI30C,EAAM,CACZ,GAAIA,IAAS,SAAU,MAAO,IAAMy0C,EACpC,GAAI,OAAOz0C,GAAS,UAAYoyC,GAAc,KAAKpyC,CAAI,EACrD,OAAQygB,IACFA,GAAO,OAAOA,GAAQ,UAAY,OAAOA,EAAI,MAAS,UAAY,EAAEA,EAAI,QAAQg0B,KAClFA,EAASh0B,EAAI,IAAI,EAAI6zB,GAAU7zB,EAAI,KAAK,GAEnCi0B,EAIb,CACF,CAAC,EACKnC,EAAS,CACb,cAAe,IAAM,CACrB,EACA,UAAW,EAAI,GACf,QAAS,EACT,WAAYp1C,EAAK,YAAc,CAAE,MAAO,KAAM,OAAQ,IAAK,EAC3D,iBAAkBA,EAAK,kBAAoB,CAAE,EAAG,KAAM,EAAG,IAAK,EAC9D,UAAW,OAAOA,EAAK,WAAc,SAAWA,EAAK,UAAY,EACjE,eAAgBA,EAAK,gBAAkB,CAAC,EACxC,oBAAqB,GACrB,oBAAqB,GACrB,oBAAqB,GACrB,WAAYA,EAAK,YAAcu1C,GAC/B,aAAcv1C,EAAK,eAAiB,IAAM,CAC1C,GACA,YAAaA,EAAK,aAAeu1C,GACjC,cAAev1C,EAAK,gBAAkB,IAAM,CAC5C,GACA,iBAAkBA,EAAK,mBAAqB,IAAM,CAClD,GACA,kBAAmB,CAAC,CAACA,EAAK,kBAC1B,cAAe,CAAC,CAACA,EAAK,aACxB,EACAy1C,GAAgBL,EAAQp1C,CAAI,EAC5B,MAAM23C,EAAa33C,EAAK,WACxBo1C,EAAO,qBAAwBvpC,GAAM,CACnC,MAAMK,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,KAAK,MAAM,OAAOL,CAAC,GAAK,CAAC,CAAC,CAAC,EAC9D,IAAIvL,EAAIq3C,EAAaA,EAAW,IAAIzrC,CAAC,EAAI,OACzC,OAAK5L,IACHA,EAAI,CACF,KAAM,IAAI,aAAa4L,CAAC,EACxB,MAAO,IAAI,aAAaA,CAAC,EACzB,QAAS,IAAI,aAAaA,CAAC,CAC7B,EACIyrC,GAAYA,EAAW,IAAIzrC,EAAG5L,CAAC,GAE9BA,CACT,EACA,MAAMu3C,EAAS73C,EAAK,QAAU,CAAC,EACzB83C,EAAgB,CAAE,QAAS5C,GAAmB,CAAE,EAChD6C,EAAQhC,GAAU/1C,EAAK,SAAS,EAChCg7C,EAAWh7C,EAAK,OAAS,KACzBg6C,EAAah6C,EAAK,YAAc,KAAOA,EAAK,WAAai6C,GAAkBlD,CAAM,EACjFU,EAAY2C,GAAqBY,EAAUh7C,CAAI,EAC/C43C,EAAYsC,GAAc,CAC9B,GAAGl6C,EACH,WAAAg6C,EACA,cAAe,IAAMA,CACvB,CAAC,EACD,IAAIrkC,EACJ,GAAI,CAgDFA,EA/CgB,IAAI,SAClB,mBACA,SACA,SACA,UACA,WACA,yBACA,SACA,UACA,UACA,aACA,OACA,SACA,WACA,UACA,SACA,UACA,QACA,iBACA,SACA,gBACA,WACA,YACA,QACA,UACA,SACA,aACA,cACA,eACA,gBACA,wBACA,uBACA,cACA,WACA,OACA,OACA,QACA,YACA,YACA,aACA,eACA,qBACA;AAAA,EAAoBW,EAAO;AAAA,olBAG3BmgC,GAAgB,IAAK5qC,GAAM,GAAGA,CAAC,YAAYA,CAAC,qBAAqBA,CAAC,UAAU,EAAE,KAAK,EAAE,EAAI,aAC3F,EAEEyrC,EACAnC,GAAWC,CAAM,EACjBe,GACAE,GACAE,GACAgB,EACAM,EACAC,EAAc,QACd,OACAA,EACAA,EACAA,EACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACAnC,GACAE,GACAkC,EACAN,EACAG,EACAH,EACAmB,GAAmB,EACnBpC,EACF,CACF,OAASt2C,EAAG,CACV,OAAIF,EAAK,SAASA,EAAK,QAAQE,EAAG,OAAO,EAClC,IACT,CACA,MAAM+6C,EAAgB,CAAC,EAAEtlC,IAAQA,EAAI,aAAeA,EAAI,aAAeA,EAAI,aAAeA,EAAI,YAAcA,EAAI,UAAYA,EAAI,aAC1HqiC,EAAe,CAAC,EAAEriC,GAAO8gC,GAAgB,KAAM5qC,GAAM8J,EAAI9J,CAAC,CAAC,GAC3DosC,EAAe,CAAC,EAAEtiC,GAAO,OAAOA,EAAI,qBAAwB,YAClE,GAAI,CAACA,GAAO,CAACA,EAAI,QAAU,CAACslC,GAAiB,CAACjD,GAAgB,CAACC,EAAc,OAAO,KACpF,MAAMC,EAAU,CACd,OAAA9C,EACA,iB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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoMrB,uBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiDxB,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","names":["effectiveDpr","rt","cfg","cap","normalizeFit","fit","fitObjectFit","f","createRuntime","opts","block","e","doc","clear","p","v","u","au","resetFrameMeter","destroyRuntime","off","utf8","readText","bytes","FPS_WINDOW_MS","markFrame","now","s","cut","span","frameStats","reportDiag","msg","origin","img","resetCoverAlign","applyCoverAlignToDom","pos","obj","syncCanvasSize","canvas","dpr","w","h","parsePkg","buf","dv","magicLen","magic","ascii","count","entries","i","nameLen","name","decodeName","offset","size","dataStart","getEntry","pkg2","x","start","end","verifyLayout","len","pkgMod","TEXTURE_FORMATS","FIF","decodeMip0","tex2","image","m","rgba","decodePixels","cropRgba","decodeMips","out","sw","sh","y","format","data","fromARGB8888","fromRGB888","fromRGB565","decodeDXT5","decodeDXT3","decodeDXT1","fromRG88","fromR8","d","c","r","g","b","decodeDxtCommon","isDxt1","alphaMode","bytesPerBlock","src","colors","colorCodes","indices","colorIndices","alphas","dxt3Alphas","dxt5Alphas","py","px","sx","sy","o","unpack565","value","red","green","blue","colorOff","a","codes","base","packed","quant","lo","hi","a0","a1","j","lz4Decompress","outSize","ip","op","token","litLen","matchLen","u32","i32","f32View","f32","parseTex","magic1","asciiTex","magic2","flags","textureWidth","textureHeight","width","height","containerMagic","imageCount","freeImageFormat","containerVersion","hasMipExtension","isVideo","images","mipCount","mips","mw","mh","compression","uncompressedSize","compressedSize","raw","mip0","atlasW","atlasH","frames","texsMagic","q","frameCount","frameW","frameH","rem","stride","list","ox","oy","uX","uY","vX","vY","xs","ys","texMod","propEntry","properties","userBindName","user","valuesEqual","isIntLike","valueShape","parts","propShape","resolveUserValue","p2","cur","coerceComboValue","n","resolveUserProps","node","depth","guard","k","comboOptionValues","options","flattenUserProperties","boundUserName","mergeUserPropertyValues","live","wire","changed","props","dst","entry","parseVec3","parseVec2","parseColor","parseBool","dflt","inner","parseNum","parseScene","sceneJson","project","objects","byId","local","pass","pIdx","pc","pr","prs","runtimeBound","renderInert","pscale","ca","cos","sin","visibleSelf","idxById","childCounts","childIdsById","id","effVisible","vis","pi","layers","world","isPost","layerSize","layerOrigin","ortho","gw","gh","general","generalScripts","generalAnimations","byId2","L","recomputeLayerVisibility","l","parent","applySolidFromModel","layer","modelJson","resolveMaterial","sceneMod","resolveEffectChain","effect","readText2","ej","me","mj","mp","BUILTIN_MODELS","isBuiltinAlbedoShader","attachLayerMaterialEffect","BUILTIN_MATERIALS","effMod","mat4Identity","mat4Multiply","mat4Ortho","left","right","top","bottom","near","far","mat4Translate","z","mat4Transpose","mat4Scale","sz","mat4RotateZ","rad","mat4RotateX","mat4RotateY","mat4Perspective","fovyDeg","aspect","numField","isPerspectiveScene","scene","layerWorldOrigin","cam","mat4LookAt","eye","center","up","normalize","cross","mat4TransformPoint","DESIGN_ASPECTS","matchDesignAspect","projW","projH","relTol","tol","design","rw","rh","viewH","viewW","fitWindow","alignX","alignY","ax","clamp01","ay","matched","scale","screenAspect","viewW2","viewH2","buildCamera","eyeV","parseVec$1","centerV","upV","fov","view2","projection2","view","win","zRaw","zVal","zoom","cx","cy","vw","vh","projection","parallaxDepthFactor","collectMacros","defs","fns","re","strip","expandFunctionMacro","text","info","idx","depthCount","argsStr","args","splitArgs","body","name2","val","replaceWord","expandMacrosIn","word","replacement","round","lines","line","evalIfExpr","expr","combos","resolve","skipWs","parseOr","parseAnd","parseEq","parseRel","parseUnary","parseAtom","stripComments","preprocess","includeResolver","stack","t","allActive","file","inc","cond","matchGroup","openIdx","openCh","closeCh","matchParen","GLSL_TYPES","isDeclaration","rewriteCall","callName","fn","after","hlsl2glsl","stage","siblingSrc","rawSrc","defaults","comboRe","cm","sibRe","sm","effective","code","comboNames","comboRe2","c2","all","num2","dim","floatNames","declRe","dm","alt","FLOAT_BUILTINS","INT_FIRST_ARG","fixed","holes","masked","exp","expIsVec","vecNames","vecRe","vm","valt","intNames","intRe","im","lhs","ty","rhs","numLit","wre","wm","SW","pre","lw","fre","fm","SCALAR_CALL","ALWAYS_FLOAT","isScalarCall","open","close","esc","scalarFilled","isLit","isFloatId","FLOAT_FNS","boolNames","boolRe","bm","names","last","open1","close1","close2","e1","e2","widthBefore","ctor","dre","lastW","wa","wb","closeParen","closeBrace","localW","um","matNames","matRe","mm","isMat","vertTypes","vre","RANK","widened","sp","tail","vt","origRank","written","inNames","bodyStart","braceIdx","head","decls","tm","wrap","neg","init","mid","bound","seen","prologue","ALIGN","COLOR_BLEND_GL","BLEND_PREP","COPY_VERT","COPY_FRAG","COMPOSITE_FRAG","BACKDROP_FRAG","layerQuadVerts","passQuadVerts","localQuadVerts","GL_TYPES","linkProgram","gl","vsSrc","fsSrc","vs","compile","fs","type","parseVec3Local","makeTexture","bitmap","makeTextureMip","levels","rg88","lv","rg","prevAlign","bez1","p0","p1","p3","solveT","x0","x1","x2","x3","nt","sampleChannel","keys","frame","first","last2","wrapSpan","k0","k1","f0","f1","v0","v1","fr","bk","third","frOn","bkOn","fx","bx","y1","y2","wrapFrame","length","mode","period","coerceBase","createAnimation","def","fps","relative","wraploop","channels","autoPlay","endedCallbacks","anim2","dt","cb","createNeutralAnimation","animMod","puppetAnimMargin","layerWantsPreserveBackdrop","mc","collectGroupDescendantIds","layerById","child","colorBlendPlan","colorBlendMode","applyColorBlendCPU","prep","effectFboSize","fboDef","baseW","baseH","long","xrayUvScale","gPointerScale","XRAY_IDLE_SCREEN_UV","xrayShouldParkPointer","pointerHas","hasPointerScaleUni","XRAY_FRAG_UV_SCALE","rewriteXrayFragScale","fragGlsl","usesVarying","usesUniform","from","createRenderer","shaderResolver","diag","videoCanvas","videoCanvasReported","fboCapFactor","particleAdvanceFn","particleRenderByLayer","audioSnapshot","AUDIO_SPECTRUM_UNIFORMS","setAudioProvider","snapshotProvider","evalObjectScriptFn","userProps","scriptAudioViews","scriptShared","scriptInputView","scriptTimers","constScriptSink","constScriptCache","constAnimCache","constScriptDiag","setConstantScriptRuntime","evalFn","opts2","containerDiagDone","copyProg","compProg","backdropProg","vao","vbuf","fboCache","fboStamp","getFBO","tag","key","hit","fbo","pruneUnusedFbos","progCache","includeCache","shaderSrcCache","parseMaterialMeta","meta","uniformName","comment","mat","parseDefaultValue","parseSamplerDefaults","slot","parseTextureCombos","combo","getEffectProgram","shaderName","providedTextures","fragSrc","vertSrc","effectiveCombos","tc","attempt","missing","resolver","vertGlsl","prog","uni","matMeta","samplerDefaults","whiteTex","transparentTex","pointerProvider","setPointerProvider","readPointer","parallaxState","lastParallaxTime","layerParallaxScaleX","layerParallaxScaleY","lastFrametime","lastFrameTimeStamp","fadeDuration","boolProp","numProp2","fadeEnabled","cameraShakeOffset","time","amp","rough","speed","lowX","lowY","hiX","hiY","daytimeFraction","setVal","setter","parseVecValue","setConstant","arr","IDENT_M4","IDENT_M3","mat3Identity","bindSystemUniforms","mvp","modelM","viewProjM","resolutions","passProj","t0","res","mvpInv","parkXray","pu","pv","plu","plv","lh","lx","ly","toLayerU","toLayerV","snap","bindConstants","constants","matKey","parkXrayUntilPointer","scriptedConstants","cacheKey","hasScript","sk","sb","rawVal","base0","initArg","ptr","arg","ret","animatedConstants","hasAnim","rec","ctrl","resolveTextureName","inputFBO","effectFBOs","textures","compositeEnabled","compositeFBOs","PASS_QUAD","LOCAL_QUAD","layerQuadCache","layerQuad","currentQuadKey","uploadQuad","verts","copyUni","compUni","backdropUni","setBlend","blendPrep","setColorBlend","isLayerOffscreen","halfW","halfH","ang","margin","ext","marginX","marginY","spriteFrameBasis","texObj","texW","texH","paused","total","f2","layerModelMatrix","fy","compositeLayer","inputTex","color4","viewProj","premultiplied","frameBasis","contentRect","groupTarget","setFrameBasis","basis","puppetDrawFn","pendingEmptyCompose","puppetModelMatrix","drawPuppetDirect","overrideTex","backdropTex","captureBackdrop","drawBackdropToFBO","fboW","fboH","corners","sbl","sbr","stl","str","captureEmptyComposeAtZOrder","renderScene","cc","parRaw","parEnabled","numProp","amount","influence","delay","parDt","parAlpha","strength","PARALLAX_MAX_PX","rawOffX","rawOffY","over","damp","cs","candidates","resolved","renderCompositeSources","groupChildIds","drawLayers","renderContainerGroup","renderLayer","cover","wanted","selfRefIds","noteOwner","noteName","oid","set","eff2","srcImage","srcCam","savedTarget","savedOrigin","savedScale","savedAngles","savedVisible","container","idSet","children","groupFBO","groupCam","groupViewProj","csx","csy","cang","dx","dy","rx","ry","isPuppet","MAX_DIM","maxTex","limit","uw","uh","vctx","srcTex","usePassthrough","contentW","contentH","fl","flist","effects","visW","visH","screenW","screenH","capW","capH","fboA","fboB","layerOrtho","copyColor","curInput","curDraw","inTargetSeq","seqInput","flatPasses","failedEffects","ew","eh","passes","chainFragGlsl","fi","ov","mpT","ovT","mergedTex","srcEntry","dstEntry","progEntry","outFBO","passInput","texNames","usedUnits","ti","meaningful","advanceFn","renderByLayerFn","on","rndMod","generateNoiseTexture","cellSize","cells","randA","mulberry32$2","randB","gridA","gridB","cell","y0","a00","a10","a01","a11","b00","b10","b01","b11","va","vb","seed","noiseMod","TAU","rand","randExp","exponent","parseVec","parseDist","num","audioGate","bounds","level","hash3","vnoise3","ix","iy","iz","fz","c00","c10","c01","c11","fbm3","oct","norm","noiseVec3","buildParticleProgram","compile2","quadBuf","S","particlePassRefract","rgbaIsBlankWhite","step","spriteTrailLengthFactor","minLength","maxLength","mn","mx","spriteTrailRotation","particleInstanceSegs","trailCfg","trailSegments","Particle","ParticleSystem","model","override","ls","la","asx","asy","cp","mul","ops","rawR","omitted","rlist","kind","tr","segs","cv","rawAmt","amt","denW","denH","aw","ah","longSide","worldX","worldY","pool","host","em","dmin","dir","rmin","rmax","th","sq","nx","ny","nz","emitAt","spec","ma","around","n2","I","speedMul","sizeMul","tv","tvK","nv","O","lt","ts","a2","dist","falloff","vK","rm","ph","sc","os","s0","fo","ac","oa","audio","steps","refill","rate2","target","rate","trail","spriteTrail","STRIDE","instCount","need","bright","sysScale","stretchX","stretchY","toWorld","segAlpha","segSize","rot","instStretchX","instStretchY","w1","factor","useRefract","sampleScene","dw","dh","fd","built","particlesMod","cache","overrides","overrideProvider","setParticleTextureFactory","factory","setParticleTextureProvider","provider","resetParticleTextureFactories","listBuiltinParticleTextureNames","BUILDERS","writeWhite","conditionTexture","targetAvg","W","H","feather","dEdge","sum","N","avg","mulberry32$1","smooth01","smooth5","lerp","gauss","edgeFade","glowN","lobes","half","glow2","core","halo","spikyStar","points","sharp","coreR","beam","coreWidth","fadeBoth","peak","pk","vy","tx","ring","radius","thickness","bubble","variant","specs","bubbleSheet","baseVariant","vars","row","col","di","si","petals","curl","sa","ux","uy","taper","leaf","serr","heightToNormal","srcRgba","hAt","inv","splashHeight","ring2","pinchHeight","pinch","windCircle","gap","rgbaLooksLikeAlbedo","prepareParticleNormalTexture","ALBEDO_NORMAL_ALIAS","particleNormalNameForAlbedo","albedo","pairedAlbedoName","albedoPixels","fallbackFor","makeFbm","freq","rnd2","lattices","dotAt","lat","lf","xa","perlin","octLimit","bilinearResize","w2","h2","a3","fogNoise","density","maskExp","peakTarget","mExp","fbm","noise2","qx","qy","mask","maxA","fireWisp","dropSheet","cols","rows","cw","ch","debrisScatter","specks","best","lightningBolt","clampX","nMain","pts","nBranch","at","br","by","dMin","wMax","abx","aby","den","trailBlob","hd","chromaticDot","teardrop","crescent","outer","snowflake","along","perp","glyph","style","diamond","hashName","flareAnamorphic","pair","buildBuiltinParticleTexture","isBuiltinParticleTextureName","particleTexMod","IDENTITY","mat4Mul","mat4Invert","piv","composeTRS","tz","rz","scx","scy","scz","cz","readCStr","findAscii","pat","parseMDL","LAYOUTS","vertexBytes","vbOff","cand","vertStart","vertexCount","positions","uvs","boneIdx","weights","idxByteLen","idxStart","useU32","indexCount","bones","parseSkeleton","animations","parseAnimations","restLocal","parseBindPose","attachments","parseAttachments","invBindWorld","restCorrection","bindTRS9","baseLocal","bindWorld","restWorld","minX","maxX","minY","maxY","animDisplacementBound","boneCount","bone","nm","matrix","endPos","animCount","anims","ai","nameR","modeR","trackCount","tracks","trackBytes","kf","bi","bj","sampleTrackTRS","track","out9","it","bindTRS","mdl2","computeSkinMatrices","animLayers","boneOverrides","hasOverride","hadExplicitLayers","acc","smp","touched","addW","bindWorldOf","boneIndex","mat4MulOut","attachmentWorld","attachmentBind","bw","parentMeshToWorldDelta","applyAttachmentBindOrigins","childrenOf","collectDesc","kids","follows","bindM","desc","followAttachments","getBoneOverrides","computed","deltas","puppet","overrides2","tree","MAX_BONES_HARD_CAP","MAX_BONES_FLOOR","boneBudget","vecs","usable","mdlVertSrc","maxBones","MDL_FRAG","createMDLRenderer","linked","MAX_BONES","identitySkin","meshes","ensureMesh","ibuf","texture","skin","idxType","mdlMod","effectiveTextPadding","boxW","boxH","padding","pad","layoutText","content","measure","spacing","lineHeight","innerW","wrapW","wrapOne","lines2","lastBreak","truncated","widths","totalH","halign","valign","drawTextLayer","ctx","layout","color","alpha","bg","bgb","fill","ADD_METHOD_RE","makeSandboxConsole","wrapEngine","engine","recv","stub","defaultEngineTimer","ms","applyEngineHost","mediaCtl","Vec3","safe","Vec2","asScriptVec3","makeInput","pointerView","makeCursorEventVec","createInputView","WEMATH","deg","WECOLOR","rgb","WEVECTOR","MEDIA_PLAYBACK_EVENT","MEDIA_CALLBACKS","SANDBOX_PARAM_NAMES","SANDBOX_PARAM_DECL_RE","WE_IMPORT_MODULES","rewriteComboStringEq","scriptToFunctionBody","script","_","alias","mod","propValue","evalTextScript","scriptprops","spValues","builder","_t","thisLayer","makeVec3","audioViews","thisScene","shared","sandboxGlobal","input","hasMediaHook","hasApplyHook","sandbox","before","event","makeNeutralAnimation","self","makeTextureAnimation","state","api","makeVideoTextureHandle","ctl","makeSandboxStorage","get","makeBoneApi","toLocal","wx","wy","localT","worldT","makeTransform","tf","normVec","pw","pl","dummy","makeEffectHandle","resolveDestroyTarget","lookup","markLayerDestroyed","resolveWorkshopAssetPath","assetPath","workshopId","extractWorkshopId","makeThisScene","layerProxy","makeObjectLayerProxy","wid","created","vec","store","makeScriptAngleVec","proxy","te","ids","map","scriptAnglesToRad","evalObjectScript","layerRef","hasCursorHook","ANGLE_RAD","ANGLE_DEG","radToScriptAngles","textCanvasMargin","_padding","textLayerHasTintMask","textMod","createEngineTimers","setT","clearT","setI","clearI","onError","pending","normDelay","guarded","makeCancel","clearFn","cancel","setTimeout","setInterval","clearTimeout","clearInterval","dispose","timersMod","mulberry32","vnoise","seedIdx","SECTION_LEN","BPM","BEAT","GAIN","makePatterns","rand2","kick","snare","hat","createSimulatedAudio","patterns","phases","BANDS","rawL","left64","right64","left32","right32","left16","right16","snapshot","downsample","i0","i1","update","beat","i16","frac","hitEnv","section","silent","buildup","breakdown","drumGate","midGate","kickV","snareV","hatV","riser","levelSum","fq","tilt","pan","floorV","fillAudioBuffers","views","fillOne","src64","MEDIA_PLAYBACK","MediaVec3","mediaVec3","PLAYLIST","GAP","createSimulatedMedia","cycle","seekOffset","held","holdT","lastWall","trackStart","applyAt","inGap","lum","li","skipToTrack","skipNext","skipPrevious","pause","play","playPause","renderThumbnail","pg","pb","sr","sg","tr_","tg","tb","band","cr","cg","vig","diffMediaEvents","prev","cloneMediaSnapshot","mediaMod","TAB_HOLD","TABS","createSimulatedWindowTitle","tab","createShortcutHandler","onOpen","openUserShortcut","createSimulatedSystem","media2","windowTitle","shortcuts","systemMod","createPointerSource","readViewportSize","readViewport","onMove","ev","onDown","onUp","onLeaveWindow","attached","parOffX","parOffY","pointerMod","worldToLayerLocal","alignTable","hitTestLayers","filter","loc","hitTestMod","asAny","pkg","tex","scn","eff","rnd","noise","particles","ptex","mdl","wtext","wtimers","media","system","anim","pointerLib","hitTest","buildMediaScene","textureName","decodeGifFrames","resp","dec","mountMedia","isGif","mountVideoDom","mountGifDom","disposed","pauseImpl","resumeImpl","videoWasPlaying","fail","why","renderer","TEX","refreshTex","mediaW","mediaH","ok","err","decoded","gifFrames","nextAt","pauseAccum","pauseStarted","lastRender","renderLoop","peek","kickLoop","css","fellBack","onErr","dprV","PKG_PATHS","httpSource","baseUrl","signal","lastStatus","lastThrow","why2","fileSource","named","bytesSource","LOOP_PREROLL_SEC","LOOP_HOLD_SEC","LOOP_SWAP_EPS","createLoopingVideo","make","assignSrc","maxW","maxH","active","standby","standbySrcReady","userVolume","userMuted","ensureStandbySrc","arming","prevTime","raf","destroyed","disarm","doSwap","tick","hadStandby","remaining","vol","SKIP_3D_MODELS","SKIP_COMPONENTS","SKIP_TEXT","SKIP_PARTICLES","SKIP_SCENE_EFFECTS","TEXT_EM_SCALE","WE_SHADER_HEADERS","SYSTEM_FONT_FAMILIES","fontFaceCache","pkgCache","loadParsedPkg","source","pkgBytes","parsed","oldestKey","oldestAt","mountScene","pkgAbort","particleCleanup","pendingWire","applyLiveImpl","parsedPkg","sceneEntry","liveUserProps","recomputeVisibility","hook","propSandboxes","rel","patch","supportsAudioProcessing","simAudio","audioSim","zero","SILENT_AUDIO","simMedia","simWindow","mediaSim","mediaHooks","lastMediaSnap","registerMediaHook","evts","dispatchMediaNow","mediaControl","pointerSrc","prevCleanup","inputView","engineTimers","reported","timerOpts","mkThumb","texInflight","loadTexInner","texEntry","gen","genEntry","parsedTex","url","endedCbs","bindEnded","el","videoCtl","entry2","texSwapCount","blob","bmp","m0","loadTex","SAMPLER_DEFAULT_RE","preloadSamplerDefaults","loadedTex","texJobs","modelEntry","material","matEntry","texSlots","texName","tn","particleSystems","particleSystemsByLayer","builtinTexCount","loadParticleTex","inPkg","asParticleNormal","pix","buildParticleSystem","particlePath","ps","texName1","slots","nrmName","nrm","lid","cOrigin","cScale","cAngles","followMode","wOrigin","childLayer","childPs","soundAudios","snd","mime","setSceneVolume","lastPt","particleDiagFrame","pdt","originY","layerId","minS","maxS","onlyIndex","mdlItems","boneOverridesByLayer","mdlEntry","mdlObj","an","mdlRenderer","item","byLayer","attachFollows","textWidgets","textLayerText","textShared","textCanvas","textCtx","textEvalDue","win0","quality","fontFamilies","fontPaths","fp","cached","sys","fe","fam","ff","MAX_TEX","hw","hh","em0","marginCap","updateTexts","fontPath","bh","M","shrink","met","fontH","objectScriptRuns","animRuns","generalAnimRuns","sceneNamedAnims","effectVisibleRuns","generalScriptRuns","cursorHooks","addCursorHook","objProjW","objProjH","objUserProps","writeGeneralField","field","nextLayerId","sceneApi","layerCfg","imagePath","clone","ei","scripts","fieldVal","write","generalAnims","cursorLayers","hoveredLayer","pressedLayer","lastLeftDown","makeCursorEvent","fire","dispatchCursor","par","playingVideos","playingAudios","interval","run","screenRes","visibilityDirty","applyLiveProps","uVis","uCol","uA","uB","uVol","al","uv","ur","ub","se","le","ue","iov","ovHit","un","mountWallpaper","normalizeFitOption","toConfig","createScene","events","currentOptions","emitError","wireOptions","armFirstFrame","armFailure","reject","instance","volume","firstFrame","failure","applyOptions","mount"],"file":"webwallgl.min.mjs"}
|