From 3332f609a918214768f306dced878d83725aa48d Mon Sep 17 00:00:00 2001 From: Diego Marcos Date: Fri, 23 May 2025 08:52:14 -0700 Subject: [PATCH] Initial commit --- .gitattributes | 12 + .github/workflows/ci-linux.yml | 34 + .github/workflows/ci-windows.yaml | 40 + .gitignore | 8 + LICENSE | 21 + README.md | 196 + biome.json | 38 + dist/forge.cjs.js | 12072 ++++++++++++++++++ dist/forge.cjs.min.js | 1086 ++ dist/forge.d.ts | 3398 +++++ dist/forge.module.js | 12055 +++++++++++++++++ dist/forge.module.min.js | 9610 ++++++++++++++ docs/assets/images/hero-image.png | Bin 0 -> 1397218 bytes docs/assets/images/logo-hero.png | Bin 0 -> 85186 bytes docs/assets/images/logo.svg | 8 + docs/controls.md | 152 + docs/forge-renderer.md | 86 + docs/forge-viewpoint.md | 81 + docs/getting-started.md | 52 + docs/index.md | 13 + docs/loading-splats.md | 86 + docs/overrides/main.html | 45 + docs/overrides/partials/header.html | 30 + docs/overview.md | 17 + docs/packed-splats.md | 188 + docs/performance.md | 16 + docs/procedural-splats.md | 286 + docs/splat-editing.md | 88 + docs/splat-mesh.md | 123 + docs/stylesheets/forge.css | 120 + docs/system-design.md | 29 + examples/animation-skinning/index.html | 105 + examples/assets.json | 90 + examples/envmap/index.html | 120 + examples/hello-world/carousel.html | 121 + examples/hello-world/index.html | 46 + examples/index.html | 8 + examples/interactivity/food.js | 75 + examples/interactivity/index.html | 215 + examples/interactivity/loading.gif | Bin 0 -> 23263 bytes examples/interactivity/style.css | 91 + examples/js/get-asset-url.js | 15 + examples/multiple-splats/index.html | 100 + examples/multiple-viewpoints/index.html | 94 + examples/procedural-splats/index.html | 141 + examples/raycasting/index.html | 106 + examples/vfx-dynamic-lighting/index.html | 222 + examples/vfx-particle-simulation/index.html | 46 + examples/viewer/index.html | 46 + index.html | 148 + lefthook.yml | 6 + mkdocs.yml | 32 + package-lock.json | 1958 +++ package.json | 55 + rust/.gitignore | 2 + rust/Cargo.lock | 224 + rust/Cargo.toml | 22 + rust/build_rust_wasm.ps1 | 24 + rust/build_rust_wasm.sh | 22 + rust/build_wasm.js | 18 + rust/forge-internal-rs/Cargo.toml | 18 + rust/forge-internal-rs/README.md | 35 + rust/forge-internal-rs/src/lib.rs | 154 + rust/forge-internal-rs/src/raycast.rs | 170 + rust/forge-internal-rs/src/sort.rs | 133 + rust/wlg/Cargo.toml | 15 + rust/wlg/src/lib.rs | 15 + rust/wlg/src/ordering.rs | 201 + rust/wlg/src/wlg0/decode.rs | 268 + rust/wlg/src/wlg0/encode.rs | 283 + rust/wlg/src/wlg0/mod.rs | 274 + scripts/build-site.js | 32 + scripts/clean-assets.js | 8 + scripts/clean-site.js | 8 + scripts/download-assets.js | 64 + scripts/serve-site.js | 64 + src/ForgeRenderer.ts | 856 ++ src/ForgeViewpoint.ts | 758 ++ src/PackedSplats.ts | 656 + src/Readback.ts | 349 + src/RgbaArray.ts | 283 + src/SplatAccumulator.ts | 120 + src/SplatEdit.ts | 827 ++ src/SplatGenerator.ts | 216 + src/SplatGeometry.ts | 44 + src/SplatLoader.ts | 218 + src/SplatMesh.ts | 842 ++ src/SplatSkinning.ts | 298 + src/controls.ts | 682 + src/defines.ts | 36 + src/dyno.ts | 16 + src/dyno/base.ts | 575 + src/dyno/control.ts | 22 + src/dyno/convert.ts | 451 + src/dyno/logic.ts | 434 + src/dyno/math.ts | 534 + src/dyno/mathTypes.ts | 717 ++ src/dyno/output.ts | 66 + src/dyno/program.ts | 117 + src/dyno/splats.ts | 593 + src/dyno/texture.ts | 239 + src/dyno/transform.ts | 155 + src/dyno/trig.ts | 182 + src/dyno/types.ts | 420 + src/dyno/uniforms.ts | 826 ++ src/dyno/util.ts | 419 + src/dyno/value.ts | 289 + src/dyno/vecmat.ts | 835 ++ src/generators.ts | 2 + src/generators/snow.ts | 276 + src/generators/static.ts | 117 + src/hands.ts | 475 + src/index.ts | 90 + src/ply.ts | 930 ++ src/shaders.ts | 19 + src/shaders/computeUvec4.glsl | 36 + src/shaders/computeVec4.glsl | 36 + src/shaders/splatDefines.glsl | 321 + src/shaders/splatFragment.glsl | 35 + src/shaders/splatVertex.glsl | 172 + src/splatConstructors.ts | 413 + src/splatWorker.ts | 128 + src/spz.ts | 185 + src/utils.ts | 1260 ++ src/vrButton.ts | 164 + src/worker.ts | 833 ++ test/utils.test.ts | 7 + tsconfig.json | 25 + vite.config.ts | 92 + 129 files changed, 64575 insertions(+) create mode 100644 .gitattributes create mode 100644 .github/workflows/ci-linux.yml create mode 100644 .github/workflows/ci-windows.yaml create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 biome.json create mode 100644 dist/forge.cjs.js create mode 100644 dist/forge.cjs.min.js create mode 100644 dist/forge.d.ts create mode 100644 dist/forge.module.js create mode 100644 dist/forge.module.min.js create mode 100644 docs/assets/images/hero-image.png create mode 100644 docs/assets/images/logo-hero.png create mode 100644 docs/assets/images/logo.svg create mode 100644 docs/controls.md create mode 100644 docs/forge-renderer.md create mode 100644 docs/forge-viewpoint.md create mode 100644 docs/getting-started.md create mode 100644 docs/index.md create mode 100644 docs/loading-splats.md create mode 100644 docs/overrides/main.html create mode 100644 docs/overrides/partials/header.html create mode 100644 docs/overview.md create mode 100644 docs/packed-splats.md create mode 100644 docs/performance.md create mode 100644 docs/procedural-splats.md create mode 100644 docs/splat-editing.md create mode 100644 docs/splat-mesh.md create mode 100644 docs/stylesheets/forge.css create mode 100644 docs/system-design.md create mode 100644 examples/animation-skinning/index.html create mode 100644 examples/assets.json create mode 100644 examples/envmap/index.html create mode 100644 examples/hello-world/carousel.html create mode 100644 examples/hello-world/index.html create mode 100644 examples/index.html create mode 100644 examples/interactivity/food.js create mode 100644 examples/interactivity/index.html create mode 100644 examples/interactivity/loading.gif create mode 100644 examples/interactivity/style.css create mode 100644 examples/js/get-asset-url.js create mode 100644 examples/multiple-splats/index.html create mode 100644 examples/multiple-viewpoints/index.html create mode 100644 examples/procedural-splats/index.html create mode 100644 examples/raycasting/index.html create mode 100644 examples/vfx-dynamic-lighting/index.html create mode 100644 examples/vfx-particle-simulation/index.html create mode 100644 examples/viewer/index.html create mode 100644 index.html create mode 100644 lefthook.yml create mode 100644 mkdocs.yml create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 rust/.gitignore create mode 100644 rust/Cargo.lock create mode 100644 rust/Cargo.toml create mode 100644 rust/build_rust_wasm.ps1 create mode 100755 rust/build_rust_wasm.sh create mode 100644 rust/build_wasm.js create mode 100644 rust/forge-internal-rs/Cargo.toml create mode 100644 rust/forge-internal-rs/README.md create mode 100644 rust/forge-internal-rs/src/lib.rs create mode 100644 rust/forge-internal-rs/src/raycast.rs create mode 100644 rust/forge-internal-rs/src/sort.rs create mode 100644 rust/wlg/Cargo.toml create mode 100644 rust/wlg/src/lib.rs create mode 100644 rust/wlg/src/ordering.rs create mode 100644 rust/wlg/src/wlg0/decode.rs create mode 100644 rust/wlg/src/wlg0/encode.rs create mode 100644 rust/wlg/src/wlg0/mod.rs create mode 100644 scripts/build-site.js create mode 100644 scripts/clean-assets.js create mode 100644 scripts/clean-site.js create mode 100644 scripts/download-assets.js create mode 100644 scripts/serve-site.js create mode 100644 src/ForgeRenderer.ts create mode 100644 src/ForgeViewpoint.ts create mode 100644 src/PackedSplats.ts create mode 100644 src/Readback.ts create mode 100644 src/RgbaArray.ts create mode 100644 src/SplatAccumulator.ts create mode 100644 src/SplatEdit.ts create mode 100644 src/SplatGenerator.ts create mode 100644 src/SplatGeometry.ts create mode 100644 src/SplatLoader.ts create mode 100644 src/SplatMesh.ts create mode 100644 src/SplatSkinning.ts create mode 100644 src/controls.ts create mode 100644 src/defines.ts create mode 100644 src/dyno.ts create mode 100644 src/dyno/base.ts create mode 100644 src/dyno/control.ts create mode 100644 src/dyno/convert.ts create mode 100644 src/dyno/logic.ts create mode 100644 src/dyno/math.ts create mode 100644 src/dyno/mathTypes.ts create mode 100644 src/dyno/output.ts create mode 100644 src/dyno/program.ts create mode 100644 src/dyno/splats.ts create mode 100644 src/dyno/texture.ts create mode 100644 src/dyno/transform.ts create mode 100644 src/dyno/trig.ts create mode 100644 src/dyno/types.ts create mode 100644 src/dyno/uniforms.ts create mode 100644 src/dyno/util.ts create mode 100644 src/dyno/value.ts create mode 100644 src/dyno/vecmat.ts create mode 100644 src/generators.ts create mode 100644 src/generators/snow.ts create mode 100644 src/generators/static.ts create mode 100644 src/hands.ts create mode 100644 src/index.ts create mode 100644 src/ply.ts create mode 100644 src/shaders.ts create mode 100644 src/shaders/computeUvec4.glsl create mode 100644 src/shaders/computeVec4.glsl create mode 100644 src/shaders/splatDefines.glsl create mode 100644 src/shaders/splatFragment.glsl create mode 100644 src/shaders/splatVertex.glsl create mode 100644 src/splatConstructors.ts create mode 100644 src/splatWorker.ts create mode 100644 src/spz.ts create mode 100644 src/utils.ts create mode 100644 src/vrButton.ts create mode 100644 src/worker.ts create mode 100644 test/utils.test.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/ .gitattributes b/ .gitattributes new file mode 100644 index 0000000..edf2dcd --- /dev/null +++ b/ .gitattributes @@ -0,0 +1,12 @@ +# FIX CRLF always when developer has not set +# Linux/Mac: git config --global core.autocrlf input +# Windows: git config --global core.autocrlf true +# Auto detect text files and perform LF normalization +* text=auto +* eol=lf + +*.html text +*.glsl text +*.js text +*.md text +*.ts text diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml new file mode 100644 index 0000000..20cc3fe --- /dev/null +++ b/.github/workflows/ci-linux.yml @@ -0,0 +1,34 @@ +name: Forge CI Linux +on: + push: + branches: + - main + pull_request: + branches: + - main +permissions: + contents: read +jobs: + test: + name: forge + runs-on: ubuntu-latest + strategy: + matrix: + node-version: ['22.x'] + steps: + - name: Use Node.js ${{ matrix['node-version'] }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix['node-version'] }} + + - name: Checkout Repo + uses: actions/checkout@v4 + + - name: Install dependencies + run: npm install + + - name: Lint + run: npm run lint + + - name: Tests + run: npm run test \ No newline at end of file diff --git a/.github/workflows/ci-windows.yaml b/.github/workflows/ci-windows.yaml new file mode 100644 index 0000000..1c26e5b --- /dev/null +++ b/.github/workflows/ci-windows.yaml @@ -0,0 +1,40 @@ +name: Forge CI Windows +on: + push: + branches: + - main + pull_request: + branches: + - main +permissions: + contents: read +jobs: + test: + name: forge + runs-on: windows-latest + strategy: + matrix: + node-version: ['22.x'] + steps: + - name: Use Node.js ${{ matrix['node-version'] }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix['node-version'] }} + + - name: Set git to use LF + run: | + git config --global core.autocrlf false + git config --global core.eol lf + - uses: actions/checkout@v4 + + - name: Checkout Repo + uses: actions/checkout@v4 + + - name: Install dependencies + run: npm install + + - name: Lint + run: npm run lint + + - name: Tests + run: npm run test \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..66a7929 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.DS_Store +examples/assets +examples/js/vendor +examples/showcase/assets +node_modules/ +site/ +*.zip +*.gltf diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ee2b427 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright © 2025 WORLD LABS TECHNOLOGIES, INC. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..132b337 --- /dev/null +++ b/README.md @@ -0,0 +1,196 @@ +

+ + Forge + +
+

An advanced 3D Gaussian Splatting renderer for THREE.js

+
+ + [Features](#features) - + [Getting Started](#getting-started) - + Documentation - + FAQ +
+

+ +
+ + [![License](https://img.shields.io/badge/license-MIT-%23d43e4c)](https://github.com/forge-gfx/forge/blob/main/LICENSE) + [![npm version](https://img.shields.io/npm/v/forge?color=d43e4c)](https://www.npmjs.com/package/forge) + +
+ +

+ + + + + +## Features + +- Load multiple splats files simultaneously ([demo]()) +- Combine and composite splats with regular Meshes ([demo]()) +- Animation ([demo]()) +- Real Time Visual Effects ([demo]()) +- Multiple Camera Views ([demo]()) +- Procedurally generated splats ([demo]()) + +Check out all the [examples]() + +## Getting Started + +### Copy code + +Copy code below in an `index.html` file. + +```html + + + +``` + +### Web Editor + +Remix the [glitch starter template](https://glitch.com/edit/#!/forge-dev) + +### Usage from CDN + +```html + +``` + +### Install with NPM + +```shell +npm install forge-dev +``` + +## Develop and contribute to the project + +The examples fetch the assets from an external URL. To work offline is possible to downloading the assets files locally with the following command: + +``` +npm run assets:download +``` + +Install [Rust](https://www.rust-lang.org/tools/install) if it's not already installed in your machine. + +Next, build Forge by running: +``` +npm install +npm run build +``` +This will first build the Rust Wasm component (can be invoked via `npm run build:wasm`), then Forge itself (`npm run build`). + +Once you've fetched the data and built Forge, you can run run the examples: +``` +npm start +``` +This will run a dev server by default at [http://localhost:8080/](http://localhost:8080/). Check the console log output to see if yours is served on a different port. + +## Build troubleshooting + +First try cleaning all the build files and re-building everything: +``` +npm run clean +npm install +npm run build +``` + +There's no versioning system for assets. If you need to re-download a specific file you can delete that asset file individually or download all assets from scratch: + +``` + npm run assets:clean + npm run assets:download +``` + +## Ignore dist directory during development + +To ignore the dist directory and prevent accidental commits and merge conflicts + +``` +git update-index --assume-unchanged dist/* +``` + +To revert and be able to commit into to the dist directory again: + +``` +git update-index --no-assume-unchanged dist/* +``` + +To liste ignored files in case of need to troubleshoot + +``` +git ls-files -v | grep '^[a-z]' | cut -c3- +``` + +## Build docs + +Install [Mkdocs Material](https://squidfunk.github.io/mkdocs-material/) + +``` +pip install mkdocs-material +``` + +If you hit an `externally managed environment` error on macOS and if you installed python via `brew` try: + +``` +brew install mkdocs-material +``` + +Edit markdown in `/docs` directory + +``` +mkdocs serve +``` + +## Build Forge website + +Build the static site and docs in a `site` directory. + +``` +npm run site:build +``` + +You can run any static server in the `site` directory but for convenience you can run + +``` +npm run site:serve +``` + +## Deploy Forge website + +TO-DO diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..d2562f6 --- /dev/null +++ b/biome.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "ignore": [ + "dist/*", + "examples/showcase/hello-gsplat", + "rust/target", + "rust/forge-internal-rs/pkg", + "src/vrButton.ts", + "site" + ] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "lineEnding": "lf" + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + } +} diff --git a/dist/forge.cjs.js b/dist/forge.cjs.js new file mode 100644 index 0000000..013fa8c --- /dev/null +++ b/dist/forge.cjs.js @@ -0,0 +1,12072 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const THREE = require("three"); +var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null; +function _interopNamespaceDefault(e) { + const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } }); + if (e) { + for (const k in e) { + if (k !== "default") { + const d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: () => e[k] + }); + } + } + } + n.default = e; + return Object.freeze(n); +} +const THREE__namespace = /* @__PURE__ */ _interopNamespaceDefault(THREE); +let wasm; +function addToExternrefTable0(obj) { + const idx = wasm.__externref_table_alloc(); + wasm.__wbindgen_export_2.set(idx, obj); + return idx; +} +function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + const idx = addToExternrefTable0(e); + wasm.__wbindgen_exn_store(idx); + } +} +function debugString(val) { + const type = typeof val; + if (type == "number" || type == "boolean" || val == null) { + return `${val}`; + } + if (type == "string") { + return `"${val}"`; + } + if (type == "symbol") { + const description = val.description; + if (description == null) { + return "Symbol"; + } else { + return `Symbol(${description})`; + } + } + if (type == "function") { + const name = val.name; + if (typeof name == "string" && name.length > 0) { + return `Function(${name})`; + } else { + return "Function"; + } + } + if (Array.isArray(val)) { + const length2 = val.length; + let debug = "["; + if (length2 > 0) { + debug += debugString(val[0]); + } + for (let i = 1; i < length2; i++) { + debug += ", " + debugString(val[i]); + } + debug += "]"; + return debug; + } + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches && builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + return toString.call(val); + } + if (className == "Object") { + try { + return "Object(" + JSON.stringify(val) + ")"; + } catch (_) { + return "Object"; + } + } + if (val instanceof Error) { + return `${val.name}: ${val.message} +${val.stack}`; + } + return className; +} +let WASM_VECTOR_LEN = 0; +let cachedUint8ArrayMemory0 = null; +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} +const cachedTextEncoder = typeof TextEncoder !== "undefined" ? new TextEncoder("utf-8") : { encode: () => { + throw Error("TextEncoder not available"); +} }; +const encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} : function(arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}; +function passStringToWasm0(arg, malloc, realloc) { + if (realloc === void 0) { + const buf = cachedTextEncoder.encode(arg); + const ptr2 = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr2; + } + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + const mem = getUint8ArrayMemory0(); + let offset = 0; + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 127) break; + mem[ptr + offset] = code; + } + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + WASM_VECTOR_LEN = offset; + return ptr; +} +let cachedDataViewMemory0 = null; +function getDataViewMemory0() { + if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) { + cachedDataViewMemory0 = new DataView(wasm.memory.buffer); + } + return cachedDataViewMemory0; +} +const cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) : { decode: () => { + throw Error("TextDecoder not available"); +} }; +if (typeof TextDecoder !== "undefined") { + cachedTextDecoder.decode(); +} +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} +function raycast_splats(origin_x, origin_y, origin_z, dir_x, dir_y, dir_z, near, far, num_splats, packed_splats, raycast_ellipsoid) { + const ret = wasm.raycast_splats(origin_x, origin_y, origin_z, dir_x, dir_y, dir_z, near, far, num_splats, packed_splats, raycast_ellipsoid); + return ret; +} +async function __wbg_load(module2, imports) { + if (typeof Response === "function" && module2 instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === "function") { + try { + return await WebAssembly.instantiateStreaming(module2, imports); + } catch (e) { + if (module2.headers.get("Content-Type") != "application/wasm") { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + } else { + throw e; + } + } + } + const bytes = await module2.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + } else { + const instance = await WebAssembly.instantiate(module2, imports); + if (instance instanceof WebAssembly.Instance) { + return { instance, module: module2 }; + } else { + return instance; + } + } +} +function __wbg_get_imports() { + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbg_buffer_09165b52af8c5237 = function(arg0) { + const ret = arg0.buffer; + return ret; + }; + imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) { + const ret = arg0.buffer; + return ret; + }; + imports.wbg.__wbg_get_b9b93047fe3cf45b = function(arg0, arg1) { + const ret = arg0[arg1 >>> 0]; + return ret; + }; + imports.wbg.__wbg_instanceof_Uint8Array_17156bcf118086a9 = function(arg0) { + let result; + try { + result = arg0 instanceof Uint8Array; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_length_3b4f022188ae8db6 = function(arg0) { + const ret = arg0.length; + return ret; + }; + imports.wbg.__wbg_length_6ca527665d89694d = function(arg0) { + const ret = arg0.length; + return ret; + }; + imports.wbg.__wbg_length_8cfd2c6409af88ad = function(arg0) { + const ret = arg0.length; + return ret; + }; + imports.wbg.__wbg_length_a446193dc22c12f8 = function(arg0) { + const ret = arg0.length; + return ret; + }; + imports.wbg.__wbg_length_e2d2a49132c1b256 = function(arg0) { + const ret = arg0.length; + return ret; + }; + imports.wbg.__wbg_new_405e22f390576ce2 = function() { + const ret = new Object(); + return ret; + }; + imports.wbg.__wbg_new_9fee97a409b32b68 = function(arg0) { + const ret = new Uint16Array(arg0); + return ret; + }; + imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) { + const ret = new Uint8Array(arg0); + return ret; + }; + imports.wbg.__wbg_new_e3b321dcfef89fc7 = function(arg0) { + const ret = new Uint32Array(arg0); + return ret; + }; + imports.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354 = function(arg0, arg1, arg2) { + const ret = new Float32Array(arg0, arg1 >>> 0, arg2 >>> 0); + return ret; + }; + imports.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212 = function(arg0, arg1, arg2) { + const ret = new Uint32Array(arg0, arg1 >>> 0, arg2 >>> 0); + return ret; + }; + imports.wbg.__wbg_newwithlength_5a5efe313cfd59f1 = function(arg0) { + const ret = new Float32Array(arg0 >>> 0); + return ret; + }; + imports.wbg.__wbg_newwithlength_bd3de93688d68fbc = function(arg0) { + const ret = new Uint32Array(arg0 >>> 0); + return ret; + }; + imports.wbg.__wbg_set_10bad9bee0e9c58b = function(arg0, arg1, arg2) { + arg0.set(arg1, arg2 >>> 0); + }; + imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) { + arg0.set(arg1, arg2 >>> 0); + }; + imports.wbg.__wbg_set_bb8cecf6a62b9f46 = function() { + return handleError(function(arg0, arg1, arg2) { + const ret = Reflect.set(arg0, arg1, arg2); + return ret; + }, arguments); + }; + imports.wbg.__wbg_set_d23661d19148b229 = function(arg0, arg1, arg2) { + arg0.set(arg1, arg2 >>> 0); + }; + imports.wbg.__wbg_set_f4f1f0daa30696fc = function(arg0, arg1, arg2) { + arg0.set(arg1, arg2 >>> 0); + }; + imports.wbg.__wbg_subarray_3aaeec89bb2544f0 = function(arg0, arg1, arg2) { + const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0); + return ret; + }; + imports.wbg.__wbg_subarray_769e1e0f81bb259b = function(arg0, arg1, arg2) { + const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0); + return ret; + }; + imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { + const ret = debugString(arg1); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }; + imports.wbg.__wbindgen_init_externref_table = function() { + const table = wasm.__wbindgen_export_2; + const offset = table.grow(4); + table.set(0, void 0); + table.set(offset + 0, void 0); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + }; + imports.wbg.__wbindgen_memory = function() { + const ret = wasm.memory; + return ret; + }; + imports.wbg.__wbindgen_number_new = function(arg0) { + const ret = arg0; + return ret; + }; + imports.wbg.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return ret; + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + return imports; +} +function __wbg_finalize_init(instance, module2) { + wasm = instance.exports; + __wbg_init.__wbindgen_wasm_module = module2; + cachedDataViewMemory0 = null; + cachedUint8ArrayMemory0 = null; + wasm.__wbindgen_start(); + return wasm; +} +async function __wbg_init(module_or_path) { + if (wasm !== void 0) return wasm; + if (typeof module_or_path !== "undefined") { + if (Object.getPrototypeOf(module_or_path) === Object.prototype) { + ({ module_or_path } = module_or_path); + } else { + console.warn("using deprecated parameters for the initialization function; pass a single object instead"); + } + } + if (typeof module_or_path === "undefined") { + module_or_path = new URL("data:application/wasm;base64,AGFzbQEAAAABtgItYAJ/fwF/YAJ/fwBgA39/fwF/YAF/AGABfwF/YAN/f38AYAV/f39/fwBgBH9/f38AYAFvAX9gAW8Bb2ADb39/AW9gBX9/f39/AX9gA29vfwBgAABgA39+fgBgA39+fgF/YAd/f39/f39/AX9gBn9/f39/fwBgAX0BfWAEf39/fwF/YAABb2ABfwFvYAZ/f39/f38Bf2AAAX9gC39/f39/f39/f39/AX9gAn9/AW9gAXwBb2ACb38Bb2ADb29vAX9gAn9vAGAHf39/f39/fwBgAn9/AX5gAn9+AX9gAn9+AGALfX19fX19fX1/b38Bb2ABfwF9YAV/f35/fwBgBH9+f38AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AYAR/f29vAX9gA39vbwF/YAJ9fQF9ArcIHgN3YmcVX193YmluZGdlbl9zdHJpbmdfbmV3ABkDd2JnFV9fd2JpbmRnZW5fbnVtYmVyX25ldwAaA3diZxpfX3diZ19nZXRfYjliOTMwNDdmZTNjZjQ1YgAbA3diZx1fX3diZ19sZW5ndGhfZTJkMmE0OTEzMmMxYjI1NgAIA3diZxpfX3diZ19uZXdfNDA1ZTIyZjM5MDU3NmNlMgAUA3diZx1fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OAAJA3diZxpfX3diZ19uZXdfYTEyMDAyYTdmOTFjNzViZQAJA3diZxpfX3diZ19zZXRfNjU1OTViZGQ4NjhiMzAwOQAMA3diZx1fX3diZ19sZW5ndGhfYTQ0NjE5M2RjMjJjMTJmOAAIA3diZxpfX3diZ19uZXdfOWZlZTk3YTQwOWIzMmI2OAAJA3diZxpfX3diZ19zZXRfZjRmMWYwZGFhMzA2OTZmYwAMA3diZx1fX3diZ19sZW5ndGhfOGNmZDJjNjQwOWFmODhhZAAIA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyAAoDd2JnGl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3AAkDd2JnGl9fd2JnX3NldF9kMjM2NjFkMTkxNDhiMjI5AAwDd2JnHV9fd2JnX2xlbmd0aF82Y2E1Mjc2NjVkODk2OTRkAAgDd2JnMV9fd2JnX25ld3dpdGhi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CwJAIAAoAhAiAkUNAEGousIAQQggAhDVBEUNAEEBDAILIAFBATsBJCABIAQ2AiAgAUEANgIcIAFBAToAGCABQd8ANgIUIAEgBDYCECABQQA2AgwgASAENgIIIAEgAzYCBCABQd8ANgIAIAFBKGogARBQAn8gASgCKEUEQAJAIAEtACUNACABQQE6ACUCQCABLQAkQQFGBEAgASgCICEFIAEoAhwhBAwBCyABKAIgIgUgASgCHCIERg0BCyABKAIEIARqIQMgBSAEawwCC0GwusIAEK4EAAsgASgCHCEEIAEgASgCMDYCHCADIARqIQMgASgCLCAEawshBAJAIAIEQCADIAQgAhDVBA0BCyABQcgAaiABQSBqKQIANwMAIAFBQGsgAUEYaikCADcDACABQThqIAFBEGopAgA3AwAgAUEwaiABQQhqKQIANwMAIAEgASkCADcDKAJAIAEtAE0NACACIQMDQCABKAIsIQUgAUHUAGogAUEoahBQAn8gASgCVEUEQCABLQBNDQMgAUEBOgBNAkAgAS0ATEEBRgRAIAEoAkghBSABKAJEIQQMAQsgASgCSCIFIAEoAkQiBEYNBAsgASgCLCAEaiEGIAUgBGsMAQsgASgCRCEEIAEgASgCXDYCRCAEIAVqIQYgASgCWCAEawshBAJAIANFBEBBACEDDAELQbm2wgBBASADENUEDQMgACgCECICRQRAQQAhAkEAIQMMAQsgAiEDIAYgBCACENUEDQMLIAEtAE1FDQALCyACRQ0BQcC6wgBBAiACENUERQ0BC0EBDAELAkAgACgCECICRQ0AQcK6wgBBAyACENUERQ0AQQEMAQsCQAJAAkAgACgCACIDRQRAQQAhAwwBC0EAIQIDQAJAIAAoAggiBCAAKAIETw0AIAMgBGotAABBxQBHDQAgACAEQQFqNgIIDAILAkAgAkUNACAAKAIQIgNFDQBB9bnCAEECIAMQ1QRFDQBBAQwFCyAAECcNAiACQQFrIQIgACgCACIDDQALQQAhAwsgACgCECIEBEBBAUH1s8IAQQEgBBDVBA0DGiAAKAIAIQMLIANFDQEgACgCCCICIAAoAgRPDQEgAiADai0AAEH1AEcNASAAIAJBAWo2AghBAAwCC0EBDAELAkAgACgCECICRQ0AQcW6wgBBBCACENUERQ0AQQEMAQsgABAnCyAB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AWogBiARGyADa2whAwwDCyABIApBjIHCABCtAgALQZyBwgBBKUHIgcIAEO0CAAtBoP/BAEEXQZyAwgAQ7QIACyAPIAZBAWo2AgAgAkEEaiAJOgAAIAIgAzYCACACQQhqIQIgBCAFQQFqIgVHDQALCyAAQYWAgIB4NgIADwsgBUEBaiEFIAMoAgAhCSADQQRqIQMgCUEATA0ACyAFQQFrIQxBACEDA0ACQCACIAZJBEAgA0EBaiEDIAsgAkEDdGogDDoABQNAIAIgDWogDnEiAiAETw0ACwwBCyACIAZB2IHCABCtAgALIAMgCUcNAAsMAAsAC9IHAQN/AkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAOCgAHBwECAwQHBwUHCwJAAkACQAJAAkACQCAALQAEDgcADAEMAgMEDAsgAC0ACEEDRw0LIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQQgASADIAIoAggQpwQMBAsgAC0ACEEDRw0KIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQMgASADIAIoAggQpwQMAwsgAC0ACEEDRw0JIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQIgASADIAIoAggQpwQMAgsgAC0ACEEDRw0IIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQEgASADIAIoAggQpwQMAQsgAC0ACEEDRw0HIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQAgASADIAIoAggQpwQLIABBDEEEEKcEDwsCQAJAIAAtAAQOAgcBAAsgACgCCCIBQfv///8HaiICQQ1NIAJBAkdxDQYgAUGEgICAeEoNBSABQYOAgIB4Rw0GDAULIAAoAggiAUGEgICAeEogAUGDgICAeEZyDQQMBQsgAC0ABEEDRw0EDAULAkACQEEDIAAoAgQiAUEHayICIAJBA08bQQJrDgIBAAULAkACQAJAIAEOBgAHAQcHAgcLIAAtAAhBA0cNBgwICyAAKAIIIgFB7f///wdqIgJBCk0gAkEDR3ENBSABRSABQfv///8H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wQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA4hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwICyACIAA2AgQgAkEBNgIMIAJB8KfBADYCCCACQgE3AhQgAiACQQRqrUKAgICAoDeENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAcLIAIgAEEEajYCBCACQQE2AgwgAkHwp8EANgIIIAJCATcCFCACIAJBBGqtQoCAgICgOIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMBgsgASgCHEHFusEAQTkgASgCICgCDBECAAwFCyACIABBBGo2AgQgAkECNgIMIAJBqLvBADYCCCACQgE3AhQgAiACQQRqrUKAgICA8DWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAQLIAIgAEEEajYCACACIABBCGo2AgQgAkEDNgIMIAJB6LvBADYCCCACQgI3AhQgAkKAgICA8DUiBCACrYQ3AyggAiAEIAJBBGqthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwDCyACIABBBGo2AgQgAkECNgIMIAJB8LzBADYCCCACQgE3AhQgAiACQQRqrUKAgICAsDiENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAILIAIgAEEEajYCACACIABBCGo2AgQgAkECNgIMIAJBsL3BADYCCCACQgI3AhQgAkKAgICAwDgiBCACQQRqrYQ3AyggAiAEIAKthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAjYCDCACQfS9wQA2AgggAkICNwIUIAJCgICAgPA1IgQgAkEEaq2ENwMoIAIgBCACrYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAuXBgEIfyMAQTBrIgEkAAJAAn8CQAJAAkAgACgCACIFBEAgACgCCCIEIAQgACgCBCIHIAQgB0sbayEIIAUhAwNAIAIgCGpFDQMgACACIARqQQFqNgIIIAJBAWohAiADIARqIANBAWohAy0AACIGQTBrQf8BcUEKSSAGQeEAa0H/AXFBBklyDQALIAZB3wBHDQIgAiAEakEBayEGAkAgBARAIAQgB08EQCAGIAdLDQgMAgsgBiAHSw0HIAQgBWosAABBv39KDQEMBwsgBiAHSw0GCyACQQFrIgJBAXFFBEAgAUKAgICAIDcCGCABIAMgBGpBAWsiAzYCFCABIAI2AhAgASAEIAVqIgU2AgwDQCABQQxqECYiBEGAgMQASQ0ACyAEQYGAxABGDQILIAAoAhAiA0UNA0HEucIAQRAgAxDVBEUNA0EBDAQLQQAgACgCECIARQ0DGkHtucIAQQEgABDVBAwDC0EAIAAoAhAiAEUNAhpBASAAQSIQ6wMNAhogAUKAgICAIDcCGCABIAM2AhQgASACNgIQIAEgBTYCDCABQQxqECYiAkGBgMQARwRAIAFBKGohBANAAkACQAJAAkAgAkGAgMQARwRAIAJBJ0YNASABQSBqIAIQPCABLQAgQYABRw0CQYABIQMDQAJAIANBgAFHBEAgAS0AKiIFIAEtACtPDQcgASAFQQFqOgAqIAFBIGogBWotAAAhAgwBC0EAIQMgBEEANgIAIAEoAiQhAiABQgA3AyALIAAgAhDrA0UNAAsMAwtBgLDCAEErIAFBIGpB8K/CAEHQrsIAEKACAAsgAEEnEOsDRQ0CDAELIAEtACoiAiABLQArIgMgAiADSxshAwNAIAIgA0YNAiABQSBqIAJqIQUgAkEBaiECIAAgBS0AABDrA0UNAAsLQQEMBQsgAUEMahAmIgJBgYDEAEcNAAsLIABBIhDrAwwCCyAAKAIQIgNFDQBBxLnCAEEQIAMQ1QRFDQBBAQwBCyAAQQA6AAQgAEEANgIAQQALIAFBMGokAA8LIAUgByAEIAZB9LjCABDsAwALrQUCBn8CfiAFQf8BcSIKIQcCQCABKAIQIgkgAS0AFCIGaiIIQQBKBEACQCAHIAhNBEAgCUEATCAGIApPcg0BA0AgCUEBayIIQQN2IQdBwAAgBkEHaiILQXhxayEFAkAgCEE/TQRAIAEgByAFEIgBIAEoAhAhCSABLQAUIQYMAQsCQCABKAIEIgggByALQfgBcUEDdmpBB2siB08EQCAIIAdrIghBB0sNAUEIIAhBxN7BABCrBAALIAcgCEHU3sEAEKoEAAsgASAFIAZqIgY6ABQgASAJIAVB/wFxayIJNgIQIAEgASgCACAHaikAADcDCAsgBkH/AXEgCk8NAiAJQQBKDQALDAELAn5CACACQf8BcSIFRQ0AGiAFIAZNBEAgASAGIAJrIgU6ABRCfyACrYZCf4UgASkDCCAFQT9xrYiDDAELIAEgAhBbCyENAkAgA0H/AXEiBUUNACAFIAEtABQiAksEQCABIAMQWyEMDAELIAEgAiADayICOgAUQn8gA62GQn+FIAEpAwggAkE/ca2IgyEMCyAAAn5CACAEQf8BcSICRQ0AGiACIAEtABQiA00EQCABIAMgBGsiAjoAFEJ/IASthkJ/hSABKQMIIAJBP3GtiIMMAQsgASAEEFsLNwMQDAILIAJB/wFxBH4gASAGIAJrIgY6ABRCfyACrYZCf4UgASkDCCAGQT9xrYiDBUIACyENIANB/wFxBEAgASAGIANrIgY6ABRCfyADrYZCf4UgASkDCCAGQT9xrYiDIQwLIAAgBEH/AXEEfiABIAYgBGsiAjoAFEJ/IASthkJ/hSABKQMIIAJBP3GtiIMFQgALNwMQDAELIABCADcDACABIAkgB2s2AhAgAEEIakIANwMAIABBEGpCADcDAA8LIAAgDDcDCCAAIA03AwAL7AUBB38CfyABRQRAIAAoAhQhCEEtIQogBUEBagwBC0ErQYCAxAAgACgCFCIIQQFxIgEbIQogASAFagshBwJAIAhBBHFFBEBBACECDAELIANBEE8EQCACIAMQLyAHaiEHDAELIANFDQAgA0EDcSEJAkAgA0EESQRAQQAhAQwBCyADQQxxIQxBACEBA0AgASACIAZqIgssAABBv39KaiALQQFqLAAAQb9/SmogC0ECaiwAAEG/f0pqIAtBA2osAABBv39KaiEBIAwgBkEEaiIGRw0ACwsgCQRAIAIgBmohBgNAIAEgBiwAAEG/f0pqIQEgBkEBaiEGIAlBAWsiCQ0ACwsgASAHaiEHCyAAKAIARQRAIAAoAhwiASAAKAIgIgAgCiACIAMQ/QIEQEEBDwsgASAEIAUgACgCDBECAA8LAkACQAJAIAcgACgCBCIGTwRAIAAoAhwiASAAKAIgIgAgCiACIAMQ/QJFDQFBAQ8LIAhBCHFFDQEgACgCECELIABBMDYCECAALQAYIQxBASEBIABBAToAGCAAKAIcIgggACgCICIJIAogAiADEP0CDQIgBiAHa0EBaiEBAkADQCABQQFrIgFFDQEgCEEwIAkoAhARAABFDQALQQEPCyAIIAQgBSAJKAIMEQIABEBBAQ8LIAAgDDoAGCAAIAs2AhBBAA8LIAEgBCAFIAAoAgwRAgAhAQwBCyAGIAdrIQcCQAJAAkBBASAALQAYIgEgAUEDRhsiAUEBaw4CAAECCyAHIQFBACEHDAELIAdBAXYhASAHQQFqQQF2IQcLIAFBAWohASAAKAIQIQggACgCICEGIAAoAhwhAAJAA0AgAUEBayIBRQ0BIAAgCCAGKAIQEQAARQ0AC0EBDwtBASEBIAAgBiAKIAIgAxD9Ag0AIAAgBCAFIAYoAgwRAgANAEEAIQEDQCABIAdGBEBBAA8LIAFBAWohASAAIAggBigCEBEAAEUNAAsgAUEBayAHSQ8LIAELrgUBB38CQCAAKAIAIgkgACgCCCIEcgRAAkAgBEEBcUUNACABIAJqIQcCQCAAKAIMIgZFBEAgASEEDAELIAEhBANAIAQiAyAHRg0CAn8gA0EBaiADLAAAIghBAE4NABogA0ECaiAIQWBJDQAaIANBA2ogCEFwSQ0AGiADQQRqCyIEIANrIAVqIQUgBkEBayIGDQALCyAEIAdGDQAgBCwAABogBSACAn8CQCAFRQ0AIAIgBU0EQCACIAVGDQFBAAwCCyABIAVqLAAAQUBODQBBAAwBCyABCyIDGyECIAMgASADGyEBCyAJRQ0BIAAoAgQhBwJAIAJBEE8EQCABIAIQLyEDDAELIAJFBEBBACEDDAELIAJBA3EhBgJAIAJBBEkEQEEAIQNBACEFDAELIAJBDHEhCEEAIQNBACEFA0AgAyABIAVqIgQsAABBv39KaiAEQQFqLAAAQb9/SmogBEECaiwAAEG/f0pqIARBA2osAABBv39KaiEDIAggBUEEaiIFRw0ACwsgBkUNACABIAVqIQQDQCADIAQsAABBv39KaiEDIARBAWohBCAGQQFrIgYNAAsLAkAgAyAHSQRAIAcgA2shBgJAAkACQCAALQAYIgRBACAEQQNHGyIDQQFrDgIAAQILIAYhA0EAIQYMAQsgBkEBdiEDIAZBAWpBAXYhBgsgA0EBaiEDIAAoAhAhBSAAKAIgIQQgACgCHCEAA0AgA0EBayIDRQ0CIAAgBSAEKAIQEQAARQ0AC0EBDwsMAgsgACABIAIgBCgCDBECAARAQQEPC0EAIQMDQCADIAZGBEBBAA8LIANBAWohAyAAIAUgBCgCEBEAAEUNAAsgA0EBayAGSQ8LIAAoAhwgASACIAAoAiAoAgwRAgAPCyAAKAIcIAEgAiAAKAIgKAIMEQIAC7gFAgh/AX4CQCABKAIIIgIgASgCBCIETw0AIAEoAgAgAmotAABB9QBHDQBBASEHIAEgAkEBaiICNgIICwJAAkAgAiAETw0BIAEoAgAiBSACai0AAEEwayIDQf8BcSIGQQlLDQEgASACQQFqIgI2AgggBkUEQEEAIQMMAQsgAiAEIAIgBEsbIQYgA0H/AXEhAwNAIAIgBkYNASACIAVqLQAAQTBrQf8BcSIIQQlLDQEgASACQQFqIgI2AgggA61CCn4iCkIgiFAEQCAIIAqnIghqIgMgCE8NAQsLDAELAkAgAiAETw0AIAIgBWotAABB3wBHDQAgASACQQFqIgI2AggLAkACQAJAAkAgAiACIANqIgZNBEAgASAGNgIIIAQgBkkNBSACRQ0CIAIgBEkNAQwCCwwECyACIAVqLAAAQb9/TA0BCyAGRSAEIAZNckUEQCAFIAZqLAAAQb9/TA0BCyACIAVqIQQgBw0BIABCATcCCCAAIAM2AgQgACAENgIADwsgBSAEIAIgBkGEucIAEOwDAAtBACEHQQAgA2shASAFIAZqIgZBAWshCEEAIQICQAJAAn8DQCABIAJGBEAgBCEBQQEMAgsgAiAIaiACQQFrIgUhAi0AAEHfAEcNAAsgAyAFaiEHAkACQEEAIANrIAVGDQAgAyAHTQRAIAUNBEEAIQIgA0F/cyAFRw0BDAILIAUgBmosAABBv39MDQMLIAMgB0EBaiIBTQRAIAMhAiAFQX9GDQEMBAsgBSAGakEBaiwAAEG/f0wNAyABIQILIAIgBGohASADIAJrIQMgBAshAiADRQRADAMLIAAgAzYCDCAAIAE2AgggACAHNgIEIAAgAjYCAA8LIAQgA0EAIAdBlLnCABDsAwALIAQgAyABIANBpLnCABDsAwALIABBADYCACAAQQA6AAQL4gUCB38CfiMAQSBrIgQkAAJ/AkACQCAAKAIAIgNFDQAgACgCCCICIAAoAgQiBU8NACACIANqIgEtAABBwgBGBEAgACACQQFqIgE2AggCQAJAAkACQAJAIAKtAn4CQCABIAVJBEAgASADai0AAEHfAEYNAQsgASAFIAEgBUsbIQcDQAJAIAEgBUkEQCABIANqLQAAQd8ARg0BCyABIAdGDQQCQCABIANqLQAAIgJBMGsiBkH/AXFBCkkNACACQeEAa0H/AXFBGk8EQCACQcEAa0H/AXFBGk8NBiACQR1rIQYMAQsgAkHXAGshBgsgACABQQFqIgE2AgggBCAIEJsCIAQpAwhCAFINBCAEKQMAIgkgBq1C/wGDfCIIIAlaDQEMBAsLIAAgAUEBajYCCCAIQn9RDQIgCEIBfAwBCyAAIAJBAmo2AghCAAsiCFgNAEEBIQEgACgCECECIAAoAgxBAWoiA0H0A0sNASACRQ0EIARBGGoiAiAAQQhqIgEpAgA3AwAgACADNgIMIAEgCD4CACAEIAApAgA3AxAgABA4IAEgAikDADcCACAAIAQpAxA3AgBB/wFxDAgLQQAhASAAKAIQIgJFDQJBxLnCAEEQIAIQ1QQNAQwCCyACRQ0BQdS5wgBBGSACENUERQ0BC0ECDAULIAAgAToABCAAQQA2AgALQQAMAwsgAS0AAEHJAEcNACAAIAJBAWo2AgggAEEAEB9FDQFBAgwCC0ECQQAgAEEAEB8bDAELAkAgACgCECIBRQ0AQfizwgBBASABENUERQ0AQQIMAQtBASAAKAIAIgFFDQAaQQAhAgJAA0ACQCAAKAIIIgMgACgCBE8NACABIANqLQAAQcUARw0AIAAgA0EBajYCCEEBDAMLAkAgAkUNACAAKAIQIgNFDQBBAkH1ucIAQQIgAxDVBA0DGgsgABBZDQEgAkEBayECIAAoAgAiAQ0AC0EBDAELQQILIARBIGokAAvPBgEDfyMAQSBrIgMkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDigGAQEBAQEBAQECBAEBAwEBAQEBAQEBAQEBAQEBAQEBAQEBCAEBAQEHAAsgAUHcAEYNBAsgAkEBcUUgAUGABklyDQcgARBcRQ0HIANBADoACiADQQA7AQggAyABQRR2QfzAwgBqLQAAOgALIAMgAUEEdkEPcUH8wMIAai0AADoADyADIAFBCHZBD3FB/MDCAGotAAA6AA4gAyABQQx2QQ9xQfzAwgBqLQAAOgANIAMgAUEQdkEPcUH8wMIAai0AADoADCABQQFyZ0ECdiICIANBCGoiBWoiBEH7ADoAACAEQQFrQfUAOgAAIAUgAkECayICakHcADoAACADQRBqIgQgAUEPcUH8wMIAai0AADoAACAAQQo6AAsgACACOgAKIAAgAykCCDcCACADQf0AOgARIABBCGogBC8BADsBAAwJCyAAQYAEOwEKIABCADcBAiAAQdzoATsBAAwICyAAQYAEOwEKIABCADcBAiAAQdzkATsBAAwHCyAAQYAEOwEKIABCADcBAiAAQdzcATsBAAwGCyAAQYAEOwEKIABCADcBAiAAQdy4ATsBAAwFCyAAQYAEOwEKIABCADcBAiAAQdzgADsBAAwECyACQYACcUUNASAAQYAEOwEKIABCADcBAiAAQdzOADsBAAwDCyACQYCABHENAQsgARC6AUUEQCADQQA6ABYgA0EAOwEUIAMgAUEUdkH8wMIAai0AADoAFyADIAFBBHZBD3FB/MDCAGotAAA6ABsgAyABQQh2QQ9xQfzAwgBqLQAAOgAaIAMgAUEMdkEPcUH8wMIAai0AADoAGSADIAFBEHZBD3FB/MDCAGotAAA6ABggAUEBcmdBAnYiAiADQRRqIgVqIgRB+wA6AAAgBEEBa0H1ADoAACAFIAJBAmsiAmpB3AA6AAAgA0EcaiIEIAFBD3FB/MDCAGotAAA6AAAgAEEKOgALIAAgAjoACiAAIAMpAhQ3AgAgA0H9ADoAHSAAQQhqIAQvAQA7AQAMAgsgACABNgIEIABBgAE6AAAMAQsgAEGABDsBCiAAQgA3AQIgAEHcxAA7AQALIANBIGokAAvpBQEBfyMAQTBrIgIkAAJ/AkACQAJAAkACQAJAAkACQCAALQAAQQFrDgcBAgMEBQYHAAsgAiAAQQRqNgIEIAJBATYCDCACQZSqwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA1hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwHCyACIABBBGo2AgQgAkEBNgIMIAJBuKrBADYCCCACQgE3AhQgAiACQQRqrUKAgICAkDaENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAYLIAIgAEEEajYCBCACQQE2AgwgAkHoqsEANgIIIAJCATcCFCACIAJBBGqtQoCAgICQNYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMBQsgAiAAQQFqNgIEIAJBATYCDCACQfCnwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgOA1hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwECyACIABBBGo2AgQgAkEBNgIMIAJBmKvBADYCCCACQgE3AhQgAiACQQRqrUKAgICAkDWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAMLIAIgAEEEajYCBCACQQE2AgwgAkHEq8EANgIIIAJCATcCFCACIAJBBGqtQoCAgICQNYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMAgsgAiAAQQRqNgIEIAJBATYCDCACQfSrwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA1hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAzYCDCACQbyswQA2AgggAkICNwIUIAIgAkEEaq1CgICAgIA2hDcDKCACIAKtQoCAgICQNoQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAuMBQEIfwJAIAJBEEkEQCAAIQMMAQsCQCAAQQAgAGtBA3EiBmoiBSAATQ0AIAAhAyABIQQgBgRAIAYhBwNAIAMgBC0AADoAACAEQQFqIQQgA0EBaiEDIAdBAWsiBw0ACwsgBkEBa0EHSQ0AA0AgAyAELQAAOgAAIANBAWogBEEBai0AADoAACADQQJqIARBAmotAAA6AAAgA0EDaiAEQQNqLQAAOgAAIANBBGogBEEEai0AADoAACADQQVqIARBBWotAAA6AAAgA0EGaiAEQQZqLQAAOgAAIANBB2ogBEEHai0AADoAACAEQQhqIQQgA0EIaiIDIAVHDQALCyAFIAIgBmsiB0F8cSIIaiEDAkAgASAGaiIEQQNxRQRAIAMgBU0NASAEIQEDQCAFIAEoAgA2AgAgAUEEaiEBIAVBBGoiBSADSQ0ACwwBCyADIAVNDQAgBEEDdCICQRhxIQYgBEF8cSIJQQRqIQFBACACa0EYcSEKIAkoAgAhAgNAIAUgAiAGdiABKAIAIgIgCnRyNgIAIAFBBGohASAFQQRqIgUgA0kNAAsLIAdBA3EhAiAEIAhqIQELAkAgAyACIANqIgZPDQAgAkEHcSIEBEADQCADIAEtAAA6AAAgAUEBaiEBIANBAWohAyAEQQFrIgQNAAsLIAJBAWtBB0kNAANAIAMgAS0AADoAACADQQFqIAFBAWotAAA6AAAgA0ECaiABQQJqLQAAOgAAIANBA2ogAUEDai0AADoAACADQQRqIAFBBGotAAA6AAAgA0EFaiABQQVqLQAAOgAAIANBBmogAUEGai0AADoAACADQQdqIAFBB2otAAA6AAAgAUEIaiEBIANBCGoiAyAGRw0ACwsgAAuzBgEEfyMAQSBrIgIkAAJAAkACQAJAAkACQAJAAkACQAJAIAEOKAAHBwcHBwcHBwEDBwcCBwcHBwcHBwcHBwcHBwcHBwcHBwcEBwcHBwUGCyAAQYAEOwEKIABCADcBAiAAQdzgADsBAAwICyAAQYAEOwEKIABCADcBAiAAQdzoATsBAAwHCyAAQYAEOwEKIABCADcBAiAAQdzkATsBAAwGCyAAQYAEOwEKIABCADcBAiAAQdzcATsBAAwFCyAAQYAEOwEKIABCADcBAiAAQdzEADsBAAwECyAAQYAEOwEKIABCADcBAiAAQdzOADsBAAwDCyABQdwARg0BCwJAIAFB/wVNDQAgARBcRQ0AIAJBADoACiACQQA7AQggAiABQRR2QeCvwgBqLQAAOgALIAIgAUEEdkEPcUHgr8IAai0AADoADyACIAFBCHZBD3FB4K/CAGotAAA6AA4gAiABQQx2QQ9xQeCvwgBqLQAAOgANIAIgAUEQdkEPcUHgr8IAai0AADoADCABQQFyZ0ECdiIDIAJBCGoiBWoiBEH7ADoAACAEQQFrQfUAOgAAIAUgA0ECayIDakHcADoAACACQRBqIgQgAUEPcUHgr8IAai0AADoAACAAQQo6AAsgACADOgAKIAAgAikCCDcCACACQf0AOgARIABBCGogBC8BADsBAAwCCyABELoBRQRAIAJBADoAFiACQQA7ARQgAiABQRR2QeCvwgBqLQAAOgAXIAIgAUEEdkEPcUHgr8IAai0AADoAGyACIAFBCHZBD3FB4K/CAGotAAA6ABogAiABQQx2QQ9xQeCvwgBqLQAAOgAZIAIgAUEQdkEPcUHgr8IAai0AADoAGCABQQFyZ0ECdiIDIAJBFGoiBWoiBEH7ADoAACAEQQFrQfUAOgAAIAUgA0ECayIDakHcADoAACACQRxqIgQgAUEPcUHgr8IAai0AADoAACAAQQo6AAsgACADOgAKIAAgAikCFDcCACACQf0AOgAdIABBCGogBC8BADsBAAwCCyAAIAE2AgQgAEGAAToAAAwBCyAAQYAEOwEKIABCADcBAiAAQdy4ATsBAAsgAkEgaiQAC84FAgZ/An4CQCACRQ0AIAJBB2siA0EAIAIgA08bIQcgAUEDakF8cSABayEIQQAhAwNAAkACQAJAIAEgA2otAAAiBcAiBkEATgRAIAggA2tBA3ENASADIAdPDQIDQCABIANqIgQoAgQgBCgCAHJBgIGChHhxDQMgA0EIaiIDIAdJDQALDAILQoCAgICAICEKQoCAgIAQIQkCQAJAAn4CQAJAAkACQAJAAkACQAJAAkAgBUHfx8IAai0AAEECaw4DAAECCgsgA0EBaiIEIAJJDQJCACEKQgAhCQwJC0IAIQogA0EBaiIEIAJJDQJCACEJDAgLQgAhCiADQQFqIgQgAkkNAkIAIQkMBwsgASAEaiwAAEG/f0oNBgwHCyABIARqLAAAIQQCQAJAIAVB4AFrIgUEQCAFQQ1GBEAMAgUMAwsACyAEQWBxQaB/Rg0EDAMLIARBn39KDQIMAwsgBkEfakH/AXFBDE8EQCAGQX5xQW5HDQIgBEFASA0DDAILIARBQEgNAgwBCyABIARqLAAAIQQCQAJAAkACQCAFQfABaw4FAQAAAAIACyAGQQ9qQf8BcUECSyAEQUBOcg0DDAILIARB8ABqQf8BcUEwTw0CDAELIARBj39KDQELIAIgA0ECaiIETQRAQgAhCQwFCyABIARqLAAAQb9/Sg0CQgAhCSADQQNqIgQgAk8NBCABIARqLAAAQb9/TA0FQoCAgICA4AAMAwtCgICAgIAgDAILQgAhCSADQQJqIgQgAk8NAiABIARqLAAAQb9/TA0DC0KAgICAgMAACyEKQoCAgIAQIQkLIAAgCiADrYQgCYQ3AgQgAEEBNgIADwsgBEEBaiEDDAILIANBAWohAwwBCyACIANNDQADQCABIANqLAAAQQBIDQEgAiADQQFqIgNHDQALDAILIAIgA0sNAAsLIAAgAjYCCCAAIAE2AgQgAEEANgIAC/4FAQV/IABBCGsiASAAQQRrKAIAIgNBeHEiAGohAgJAAkAgA0EBcQ0AIANBAnFFDQEgASgCACIDIABqIQAgASADayIBQdDowgAoAgBGBEAgAigCBEEDcUEDRw0BQcjowgAgADYCACACIAIoAgRBfnE2AgQgASAAQQFyNgIEIAIgADYCAA8LIAEgAxB1CwJAAkACQAJAAkAgAigCBCIDQQJxRQRAIAJB1OjCACgCAEYNAiACQdDowgAoAgBGDQMgAiADQXhxIgIQdSABIAAgAmoiAEEBcjYCBCAAIAFqIAA2AgAgAUHQ6MIAKAIARw0BQcjowgAgADYCAA8LIAIgA0F+cTYCBCABIABBAXI2AgQgACABaiAANgIACyAAQYACSQ0CIAEgABB+QQAhAUHo6MIAQejowgAoAgBBAWsiADYCACAADQRBsObCACgCACIABEADQCABQQFqIQEgACgCCCIADQALC0Ho6MIAQf8fIAEgAUH/H00bNgIADwtB1OjCACABNgIAQczowgBBzOjCACgCACAAaiIANgIAIAEgAEEBcjYCBEHQ6MIAKAIAIAFGBEBByOjCAEEANgIAQdDowgBBADYCAAsgAEHg6MIAKAIAIgNNDQNB1OjCACgCACICRQ0DQQAhAEHM6MIAKAIAIgRBKUkNAkGo5sIAIQEDQCACIAEoAgAiBU8EQCACIAUgASgCBGpJDQQLIAEoAgghAQwACwALQdDowgAgATYCAEHI6MIAQcjowgAoAgAgAGoiADYCACABIABBAXI2AgQgACABaiAANgIADwsgAEH4AXFBuObCAGohAgJ/QcDowgAoAgAiA0EBIABBA3Z0IgBxRQRAQcDowgAgACADcjYCACACDAELIAIoAggLIQAgAiABNgIIIAAgATYCDCABIAI2AgwgASAANgIIDwtBsObCACgCACIBBEADQCAAQQFqIQAgASgCCCIBDQALC0Ho6MIAQf8fIAAgAEH/H00bNgIAIAMgBE8NAEHg6MIAQX82AgALC98FAQJ/IwBBMGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkBBAiAAKAIAQfv///8HaiIDIANBDE8bQQFrDgsBAgMEBQYHCAkKCwALIAIgAEEEajYCDCACQQE2AhQgAkHwp8EANgIQIAJCATcCHCACIAJBDGqtQoCAgICQOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUMCwsgAiAAQQRqNgIMIAJBATYCFCACQfCnwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA4hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRQwKCyACIAA2AgwgAkEBNgIUIAJB8KfBADYCECACQgE3AhwgAiACQQxqrUKAgICAkDeENwMoIAIgAkEoajYCGCABKAIcIAEoAiAgAkEQahBFDAkLIAIgAEEEajYCDCACQQI2AhQgAkHwvMEANgIQIAJCATcCHCACIAJBDGqtQoCAgICwOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUMCAsgAiAAQQRqNgIMIAJBATYCFCACQZy/wQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA0hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRQwHCyABKAIcQaS/wQBBOSABKAIgKAIMEQIADAYLIAEoAhxB3b/BAEE/IAEoAiAoAgwRAgAMBQsgAiAAQQRqNgIMIAJBATYCFCACQfCnwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgMA4hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRQwECyABKAIcQZzAwQBBPCABKAIgKAIMEQIADAMLIAEoAhxB2MDBAEEkIAEoAiAoAgwRAgAMAgsgASgCHEH8wMEAQSQgASgCICgCDBECAAwBCyABKAIcQaDBwQBBJCABKAIgKAIMEQIACyACQTBqJAALkQUCAX8BfiMAQUBqIgIkAAJ/AkACQAJAAkACQAJAAkAgAC0AAEEBaw4GAQIDBAUGAAsgAiAAQQhqNgIkIAJBAjYCLCACQYCnwQA2AiggAkICNwI0IAJCsKbBgMA1NwMYIAIgAkEkaq1CgICAgNA1hDcDECACIAJBEGo2AjAgASgCHCABKAIgIAJBKGoQRQwGCyACIABBCGo2AiQgAkECNgIsIAJB4KfBADYCKCACQgI3AjQgAkKQp8GAwDU3AxggAiACQSRqrUKAgICA0DWENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAULIAIgAEEBajYCJCACQQE2AiwgAkHwp8EANgIoIAJCATcCNCACIAJBJGqtQoCAgIDgNYQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEUMBAsgAiAAQQRqNgIMIAIgAEEIajYCJCACQQI2AiwgAkGoqMEANgIoIAJCAjcCNCACQoCAgIDwNSIDIAJBJGqthDcDGCACIAMgAkEMaq2ENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAMLIAIgAEEEajYCDCACIABBAWo2AiQgAkECNgIsIAJB8KjBADYCKCACQgI3AjQgAiACQSRqrUKAgICA4DSENwMYIAIgAkEMaq1CgICAgPA1hDcDECACIAJBEGo2AjAgASgCHCABKAIgIAJBKGoQRQwCCyABKAIcQYCpwQBBGyABKAIgKAIMEQIADAELIAIgAEEBajYCJCACQQI2AiwgAkHgqcEANgIoIAJCATcCNCACIAJBJGqtQoCAgIDgNIQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEULIAJBQGskAAvrBAEFfwJ/AkAgAkECTwRAIAEoAgQiBEH//wFxRQRAIARBEHQMAwsgBEH/B3EhBSAEQYCAAnEhAyAEQYD4AXEiBkGA+AFGBEAgA0EQdCEDIANBgICA/AdyIAVFDQMaIAMgBUENdHJBgICA/gdyDAMLIANBEHQhAyAGRQ0BIAZBDXRBgICA/ABxIAVBDXRyQYCAgMADaiADcgwCC0EBQQFB/IzAABCtAgALIAUgBWdBEGsiBUH//wNxQQhqdEH///8DcSADQYCAgNgDciAFQRd0a3ILIQUCfyAEQYCAfHEgBEEQdiIDQf//AXFFDQAaIANB/wdxIQQgA0GAgAJxIQYgA0GA+AFxIgdBgPgBRgRAIAZBEHQhBiAGQYCAgPwHciAERQ0BGiAGIANBDXRyQYCAgP4HcgwBCyAGQRB0IQMgB0ENdEGAgID8AHEgBEENdHJBgICAwANqIANyIAcNABogBCAEZ0EQayIEQf//A3FBCGp0Qf///wNxIANBgICA2ANyIARBF3RrcgshBCAAAn8CQCACQQJHBEAgASgCCCICQf//AXFFBEAgAkEQdAwDCyACQf8HcSEBIAJBgIACcSEDIAJBgPgBcSICQYD4AUYEQCADQRB0IQIgAkGAgID8B3IgAUUNAxogAiABQQ10ckGAgID+B3IMAwsgA0EQdCEDIAJFDQEgAkENdEGAgID8AHEgAUENdHJBgICAwANqIANyDAILQQJBAkGMjcAAEK0CAAsgASABZ0EQayIBQf//A3FBCGp0Qf///wNxIANBgICA2ANyIAFBF3Rrcgs2AgggACAENgIEIAAgBTYCAAuLBQEEfyMAQSBrIgMkAAJAIAAQOEH/AXEiAUECRgRAQQEhAQwBCwJAAkACQAJAIAAoAgAiBEUNACAAKAIIIgIgACgCBE8NACACIARqLQAAQfAARw0AIAAgAkEBajYCCCAAKAIQIQIgAUEBcUUEQCACRQ0CQQEhAUH4s8IAQQEgAhDVBA0FDAILIAJFDQFB9bnCAEECIAIQ1QRFDQFBASEBDAQLIAFBAXFFDQIMAQsCQAJAIAAoAgBFDQAgAyAAEDcgAygCAEUNASADQRhqIANBCGopAgA3AwAgAyADKQIANwMQAkAgACgCECICRQ0AQQEhASADQRBqIAIQIw0FIAAoAhAiAkUNAEHJusIAQQMgAhDVBA0FCyAAECcEQEEBIQEMBQsDQCAAKAIAIgJFDQMgACgCCCIBIAAoAgRPDQMgASACai0AAEHwAEcNAyAAIAFBAWo2AgggACgCECIBBEBB9bnCAEECIAEQ1QQEQEEBIQEMBwsgACgCAEUNAgsgAyAAEDcgAygCAEUNAiADQRhqIANBCGopAgA3AwAgAyADKQIANwMQAkAgACgCECICRQ0AQQEhASADQRBqIAIQIw0GIAAoAhAiAkUNAEHJusIAQQMgAhDVBA0GC0EBIQEgABAnRQ0ACwwECyAAKAIQIgBFDQJB7bnCAEEBIAAQ1QQhAQwDCyAAKAIQIQECQCADLQAEIgJFBEAgAUUNAUHEucIAQRAgARDVBEUNAUEBIQEMBAsgAUUNAEHUucIAQRkgARDVBEUNAEEBIQEMAwsgACACOgAEQQAhASAAQQA2AgAMAgsgACgCECIARQ0AQQEhAUH3s8IAQQEgABDVBA0BC0EAIQELIANBIGokACABC9IEAg9/AX4jAEHQAGsiAyQAIANBDGqtQoCAgIAQhCESIAAtAAwhByAAKAIEIQ4gACgCACENIAAoAggiCEEcaiEPIAhBIGohEAJ/A0ACQCAJIhENACAGIQpBASEJAkAgAiAFTwRAA0AgASAFaiEGAkACQAJAIAIgBWsiC0EHTQRAIAIgBUYEQCAKIQYgAiEFIAIhBAwHC0EAIQQDQCAEIAZqLQAAQQpGDQIgCyAEQQFqIgRHDQALIAohBiACIQUgAiEEDAYLIANBCiAGIAsQiQEgAygCACILQQFHDQEgAygCBCEECyAEIAVqIgRBAWohBSACIARNDQEgASAEai0AAEEKRw0BQQAhCSAFIQYMBAsgCiEGIAIhBSACIQQgC0EBcUUNA0EAIQkMAwsgAiAFTw0ACwsgCiEGIAIhBAsCQCAHQQFxRQRAIABBAToADCANQQFxRQRAIAhB3IPCAEEEEOUDRQ0CDAMLIAMgDjYCDCADIBI3AyggA0EBOgBMIANBADYCSCADQiA3AkAgA0KAgICA0AA3AjggA0ECNgIwIANBATYCJCADQQI2AhQgA0Hkg8IANgIQIANBATYCHCAPKAIAIQsgECgCACEHIAMgA0EwajYCICADIANBKGo2AhhBASALIAcgA0EQahBFDQQaDAELIAxFDQAgCEEKEOsDDQEgDQRAIAhB9IPCAEEHEOUDDQIMAQsgCEHcg8IAQQQQ5QMNAQsgDEEBaiEMQQEhByAIIAEgCmogBCAKaxDlA0UNAQsLIBFBAXMLIANB0ABqJABBAXELhwUCAn8BfiMAQUBqIgIkACAAQQRqIQMCfwJAAkACQAJAAkACQAJAIAAoAgBBAWsOBgECAwQFBgALIAIgAzYCJCACQQE2AiwgAkHwr8EANgIoIAJCATcCNCACIAJBJGqtQoCAgICQNYQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEUMBgsgAiADNgIMIAIgAEEIajYCJCACQQM2AiwgAkHUsMEANgIoIAJCAjcCNCACQoCAgIDwNSIEIAJBJGqthDcDGCACIAQgAkEMaq2ENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAULIAIgAzYCJCACQQE2AiwgAkHwp8EANgIoIAJCATcCNCACIAJBJGqtQoCAgICgNoQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEUMBAsgAiADNgIkIAJBATYCLCACQfCnwQA2AiggAkIBNwI0IAIgAkEkaq1CgICAgLA2hDcDECACIAJBEGo2AjAgASgCHCABKAIgIAJBKGoQRQwDCyACIAM2AiQgAkEBNgIsIAJB8KfBADYCKCACQgE3AjQgAiACQSRqrUKAgICAwDaENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAILIAIgAzYCJCACQQE2AiwgAkHwp8EANgIoIAJCATcCNCACIAJBJGqtQoCAgIDQNoQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEUMAQsgAiADNgIkIAJBATYCLCACQfCnwQA2AiggAkIBNwI0IAIgAkEkaq1CgICAgOA2hDcDECACIAJBEGo2AjAgASgCHCABKAIgIAJBKGoQRQsgAkFAayQAC+oEAQp/IwBBMGsiAyQAIAMgATYCLCADIAA2AiggA0EDOgAkIANCIDcCHCADQQA2AhQgA0EANgIMAn8CQAJAAkAgAigCECIKRQRAIAIoAgwiAEUNASACKAIIIgEgAEEDdGohBCAAQQFrQf////8BcUEBaiEHIAIoAgAhAANAIABBBGooAgAiBQRAIAMoAiggACgCACAFIAMoAiwoAgwRAgANBAsgASgCACADQQxqIAFBBGooAgARAAANAyAAQQhqIQAgAUEIaiIBIARHDQALDAELIAIoAhQiAEUNACAAQQV0IQsgAEEBa0H///8/cUEBaiEHIAIoAgghBSACKAIAIQADQCAAQQRqKAIAIgEEQCADKAIoIAAoAgAgASADKAIsKAIMEQIADQMLIAMgCCAKaiIBQRBqKAIANgIcIAMgAUEcai0AADoAJCADIAFBGGooAgA2AiAgAUEMaigCACEEQQAhCUEAIQYCQAJAAkAgAUEIaigCAEEBaw4CAAIBCyAEQQN0IAVqIgwoAgANASAMKAIEIQQLQQEhBgsgAyAENgIQIAMgBjYCDCABQQRqKAIAIQQCQAJAAkAgASgCAEEBaw4CAAIBCyAEQQN0IAVqIgYoAgANASAGKAIEIQQLQQEhCQsgAyAENgIYIAMgCTYCFCAFIAFBFGooAgBBA3RqIgEoAgAgA0EMaiABQQRqKAIAEQAADQIgAEEIaiEAIAsgCEEgaiIIRw0ACwsgByACKAIETw0BIAMoAiggAigCACAHQQN0aiIAKAIAIAAoAgQgAygCLCgCDBECAEUNAQtBAQwBC0EACyADQTBqJAALlgQBBH8jAEGAAWsiBCQAAkACQAJAIAEoAhQiAkEQcUUEQCACQSBxDQFBASECIAAoAgBBASABEGxFDQIMAwsgACgCACECA0AgAyAEakH/AGogAkEPcSIFQTByIAVB1wBqIAVBCkkbOgAAIANBAWshAyACQRBJIAJBBHYhAkUNAAtBASECIAFBAUGPxMIAQQIgAyAEakGAAWpBACADaxA1RQ0BDAILIAAoAgAhAgNAIAMgBGpB/wBqIAJBD3EiBUEwciAFQTdqIAVBCkkbOgAAIANBAWshAyACQQ9LIAJBBHYhAg0AC0EBIQIgAUEBQY/EwgBBAiADIARqQYABakEAIANrEDUNAQsgASgCHEH6wMIAQQIgASgCICgCDBECAA0AAkAgASgCFCICQRBxRQRAIAJBIHENASAAKAIEQQEgARBsIQIMAgsgACgCBCECQQAhAwNAIAMgBGpB/wBqIAJBD3EiAEEwciAAQdcAaiAAQQpJGzoAACADQQFrIQMgAkEPSyACQQR2IQINAAsgAUEBQY/EwgBBAiADIARqQYABakEAIANrEDUhAgwBCyAAKAIEIQJBACEDA0AgAyAEakH/AGogAkEPcSIAQTByIABBN2ogAEEKSRs6AAAgA0EBayEDIAJBD0sgAkEEdiECDQALIAFBAUGPxMIAQQIgAyAEakGAAWpBACADaxA1IQILIARBgAFqJAAgAgu7BAEBfwJAIAAoAgBBAkYNACAAKAIoIgEEQCAAKAIsIAFBAXRBARCnBAsgACgCNCIBBEAgACgCOCABQQEQpwQLIAAoAkAiAQRAIAAoAkQgAUEBEKcECyAAKAJMIgEEQCAAKAJQIAFBAnRBBBCnBAsgACgCWCIBBEAgACgCXCABQQJ0QQQQpwQLIAAoAmQiAQRAIAAoAmggAUEDdEEEEKcECyAAKAJwIgEEQCAAKAJ0IAFBAnRBBBCnBAsgACgCfCIBBEAgACgCgAEgAUECdEEEEKcECyAAKAKQASIBBEAgACgClAEgAUEDdEEEEKcECyAAKAKcASIBBEAgACgCoAEgAUECdEEEEKcECyAAKAKoASIBBEAgACgCrAEgAUECdEEEEKcECyAAKAK4ASIBBEAgACgCvAEgAUEDdEEEEKcECyAAKALEASIBBEAgACgCyAEgAUECdEEEEKcECyAAKALQASIBBEAgACgC1AEgAUECdEEEEKcECyAAKALgASIBBEAgACgC5AEgAUEDdEEEEKcECyAAKALsASIBBEAgACgC8AEgAUECdEEEEKcECyAAKAL4ASIBBEAgACgC/AEgAUECdEEEEKcECyAAQZACahDTAyAAKAKEAyIBBEAgACgCiAMgAUEBEKcECyAAKAKQAyIBBEAgACgClAMgAUEBEKcECyAAKAKcAyIBBEAgACgCoAMgAUEMbEEEEKcECyAAKAKoAyIBRQ0AIAAoAqwDIAFBARCnBAsgAEHQA2oQKwuPBAENfyABQQFrIQ8gACgCBCEKIAAoAgAhCyAAKAIIIQwCQANAIA4NAQJAAkAgAiAESQ0AA0AgASAEaiEFAkACQAJAIAIgBGsiBkEHTQRAIAIgBEcNASACIQQMBQsCQCAFQQNqQXxxIgggBWsiAwRAQQAhAANAIAAgBWotAABBCkYNBSADIABBAWoiAEcNAAsgAyAGQQhrIgBNDQEMAwsgBkEIayEACwNAQYCChAggCCgCACIJQYqUqNAAc2sgCXJBgIKECCAIQQRqKAIAIglBipSo0ABzayAJcnFBgIGChHhxQYCBgoR4Rw0CIAhBCGohCCADQQhqIgMgAE0NAAsMAQtBACEAA0AgACAFai0AAEEKRg0CIAYgAEEBaiIARw0ACyACIQQMAwsgAyAGRgRAIAIhBAwDCwNAIAMgBWotAABBCkYEQCADIQAMAgsgBiADQQFqIgNHDQALIAIhBAwCCyAAIARqIgNBAWohBAJAIAIgA00NACAAIAVqLQAAQQpHDQAgBCEFIAQhAAwDCyACIARPDQALC0EBIQ4gAiIAIAciBUYNAgsCQCAMLQAABEAgC0H4w8IAQQQgCigCDBECAA0BC0EAIQMgACAHRwRAIAAgD2otAABBCkYhAwsgACAHayEAIAEgB2ohBiAMIAM6AAAgBSEHIAsgBiAAIAooAgwRAgBFDQELC0EBIQ0LIA0LswQBAX8CQCAAKAIAQQJGDQAgACgCKCIBBEAgACgCLCABQQF0QQEQpwQLIAAoAjQiAQRAIAAoAjggAUEBEKcECyAAKAJAIgEEQCAAKAJEIAFBARCnBAsgACgCTCIBBEAgACgCUCABQQJ0QQQQpwQLIAAoAlgiAQRAIAAoAlwgAUECdEEEEKcECyAAKAJkIgEEQCAAKAJoIAFBA3RBBBCnBAsgACgCcCIBBEAgACgCdCABQQJ0QQQQpwQLIAAoAnwiAQRAIAAoAoABIAFBAnRBBBCnBAsgACgCkAEiAQRAIAAoApQBIAFBA3RBBBCnBAsgACgCnAEiAQRAIAAoAqABIAFBAnRBBBCnBAsgACgCqAEiAQRAIAAoAqwBIAFBAnRBBBCnBAsgACgCuAEiAQRAIAAoArwBIAFBA3RBBBCnBAsgACgCxAEiAQRAIAAoAsgBIAFBAnRBBBCnBAsgACgC0AEiAQRAIAAoAtQBIAFBAnRBBBCnBAsgACgC4AEiAQRAIAAoAuQBIAFBA3RBBBCnBAsgACgC7AEiAQRAIAAoAvABIAFBAnRBBBCnBAsgACgC+AEiAQRAIAAoAvwBIAFBAnRBBBCnBAsgAEGQAmoQ0wMgACgChAMiAQRAIAAoAogDIAFBARCnBAsgACgCkAMiAQRAIAAoApQDIAFBARCnBAsgACgCnAMiAQRAIAAoAqADIAFBDGxBBBCnBAsgACgCqAMiAUUNACAAKAKsAyABQQEQpwQLC54FAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQIgACgCACIAKAIAQfv///8HaiIDIANBDk8bQQFrDg0BAgMEBQYHCAkKCwwNAAsgAiAAQQRqNgIMIAFB6NTBAEEMIAJBDGpB2NTBABB/DA0LIAIgAEEEajYCDCABQdDXwQBBDyACQQxqQcDXwQAQfwwMCyACIAA2AgwgAUGA1MEAQQ0gAkEMakHw08EAEH8MCwsgAUHY2sEAQQ0Q5QMMCgsgAiAAQQhqNgIMIAFB5drBAEEYQf3awQBBCSAAQQRqQfTMwQBBhtvBAEEOIAJBDGpBhM3BABDDAQwJCyACIABBBGo2AgwgAUH41cEAQQxBhNbBAEEMIAJBDGpB6NXBABDJAQwICyACIABBBGo2AgwgAUGU28EAQQ5Bi87BAEEDIAJBDGpBuM3BABDJAQwHCyABQaLbwQBBDhDlAwwGCyACIABBBGo2AgwgAUGw28EAQRZBi87BAEEDIAJBDGpBzM/BABDJAQwFCyACIABBCGo2AgwgAUHG28EAQSFBsNfBAEEEIABBBGpB9MzBAEG308EAQQQgAkEMakG4zcEAEMMBDAQLIAIgAEEIajYCDCABQefbwQBBGEH/28EAQQQgAEEEakH0zMEAQYPcwQBBDyACQQxqQYTNwQAQwwEMAwsgAiAAQQhqNgIMIAFBktzBAEEWQYvOwQBBAyAAQQRqQfTMwQBBt9PBAEEEIAJBDGpBuM3BABDDAQwCCyACIABBBGo2AgwgAUGo3MEAQRpBi87BAEEDIAJBDGpBhM3BABDJAQwBCyACIABBBGo2AgwgAUHC3MEAQQ5Bi87BAEEDIAJBDGpBhM3BABDJAQsgAkEQaiQAC5kFAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQIgACgCAEH7////B2oiAyADQQ5PG0EBaw4NAQIDBAUGBwgJCgsMDQALIAIgAEEEajYCDCABQcSZwABBDCACQQxqQbSZwAAQfwwNCyACIABBBGo2AgwgAUGMoMAAQQ8gAkEMakH8n8AAEH8MDAsgAiAANgIMIAFBrKDAAEENIAJBDGpBnKDAABB/DAsLIAFBuaDAAEENEOUDDAoLIAIgAEEIajYCDCABQcagwABBGEHeoMAAQQkgAEEEakGImMAAQeegwABBDiACQQxqQZiYwAAQwwEMCQsgAiAAQQRqNgIMIAFBiKHAAEEMQZShwABBDCACQQxqQfigwAAQyQEMCAsgAiAAQQRqNgIMIAFBoKHAAEEOQayZwABBAyACQQxqQcyYwAAQyQEMBwsgAUGuocAAQQ4Q5QMMBgsgAiAAQQRqNgIMIAFBvKHAAEEWQayZwABBAyACQQxqQbiawAAQyQEMBQsgAiAAQQhqNgIMIAFB0qHAAEEhQfOhwABBBCAAQQRqQYiYwABB+pzAAEEEIAJBDGpBzJjAABDDAQwECyACIABBCGo2AgwgAUH3ocAAQRhBj6LAAEEEIABBBGpBiJjAAEGTosAAQQ8gAkEMakGYmMAAEMMBDAMLIAIgAEEIajYCDCABQaKiwABBFkGsmcAAQQMgAEEEakGImMAAQfqcwABBBCACQQxqQcyYwAAQwwEMAgsgAiAAQQRqNgIMIAFBuKLAAEEaQayZwABBAyACQQxqQZiYwAAQyQEMAQsgAiAAQQRqNgIMIAFB0qLAAEEOQayZwABBAyACQQxqQZiYwAAQyQELIAJBEGokAAuZBQECfyMAQRBrIgIkAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEECIAAoAgBB+////wdqIgMgA0EOTxtBAWsODQECAwQFBgcICQoLDA0ACyACIABBBGo2AgwgAUHYvMAAQQwgAkEMakHIvMAAEH8MDQsgAiAAQQRqNgIMIAFBoMPAAEEPIAJBDGpBkMPAABB/DAwLIAIgADYCDCABQcDDwABBDSACQQxqQbDDwAAQfwwLCyABQc3DwABBDRDlAwwKCyACIABBCGo2AgwgAUHaw8AAQRhB8sPAAEEJIABBBGpBnLvAAEH7w8AAQQ4gAkEMakGsu8AAEMMBDAkLIAIgAEEEajYCDCABQZzEwABBDEGoxMAAQQwgAkEMakGMxMAAEMkBDAgLIAIgAEEEajYCDCABQbTEwABBDkHAvMAAQQMgAkEMakHgu8AAEMkBDAcLIAFBwsTAAEEOEOUDDAYLIAIgAEEEajYCDCABQdDEwABBFkHAvMAAQQMgAkEMakHMvcAAEMkBDAULIAIgAEEIajYCDCABQebEwABBIUGHxcAAQQQgAEEEakGcu8AAQY7AwABBBCACQQxqQeC7wAAQwwEMBAsgAiAAQQhqNgIMIAFBi8XAAEEYQaPFwABBBCAAQQRqQZy7wABBp8XAAEEPIAJBDGpBrLvAABDDAQwDCyACIABBCGo2AgwgAUG2xcAAQRZBwLzAAEEDIABBBGpBnLvAAEGOwMAAQQQgAkEMakHgu8AAEMMBDAILIAIgAEEEajYCDCABQczFwABBGkHAvMAAQQMgAkEMakGsu8AAEMkBDAELIAIgAEEEajYCDCABQebFwABBDkHAvMAAQQMgAkEMakGsu8AAEMkBCyACQRBqJAALmQUBAn8jAEEQayICJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkBBAiAAKAIAQfv///8HaiIDIANBDk8bQQFrDg0BAgMEBQYHCAkKCwwNAAsgAiAAQQRqNgIMIAFBqN/AAEEMIAJBDGpBmN/AABB/DA0LIAIgAEEEajYCDCABQdzlwABBDyACQQxqQczlwAAQfwwMCyACIAA2AgwgAUH85cAAQQ0gAkEMakHs5cAAEH8MCwsgAUGJ5sAAQQ0Q5QMMCgsgAiAAQQhqNgIMIAFBlubAAEEYQa7mwABBCSAAQQRqQYzewABBt+bAAEEOIAJBDGpB+NrAABDDAQwJCyACIABBBGo2AgwgAUHF5sAAQQxB0ebAAEEMIAJBDGpB6NrAABDJAQwICyACIABBBGo2AgwgAUHd5sAAQQ5BkN/AAEEDIAJBDGpB+NzAABDJAQwHCyABQevmwABBDhDlAwwGCyACIABBBGo2AgwgAUH55sAAQRZBkN/AAEEDIAJBDGpBnODAABDJAQwFCyACIABBCGo2AgwgAUGP58AAQSFBsOfAAEEEIABBBGpBjN7AAEHe4sAAQQQgAkEMakH43MAAEMMBDAQLIAIgAEEIajYCDCABQbTnwABBGEHM58AAQQQgAEEEakGM3sAAQdDnwABBDyACQQxqQfjawAAQwwEMAwsgAiAAQQhqNgIMIAFB3+fAAEEWQZDfwABBAyAAQQRqQYzewABB3uLAAEEEIAJBDGpB+NzAABDDAQwCCyACIABBBGo2AgwgAUH158AAQRpBkN/AAEEDIAJBDGpB+NrAABDJAQwBCyACIABBBGo2AgwgAUGP6MAAQQ5BkN/AAEEDIAJBDGpB+NrAABDJAQsgAkEQaiQAC5kFAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQIgACgCAEH7////B2oiAyADQQ5PG0EBaw4NAQIDBAUGBwgJCgsMDQALIAIgAEEEajYCDCABQeyHwQBBDCACQQxqQdyHwQAQfwwNCyACIABBBGo2AgwgAUHQi8EAQQ8gAkEMakHAi8EAEH8MDAsgAiAANgIMIAFB8IvBAEENIAJBDGpB4IvBABB/DAsLIAFB/YvBAEENEOUDDAoLIAIgAEEIajYCDCABQYqMwQBBGEGijMEAQQkgAEEEakHohcEAQauMwQBBDiACQQxqQcCGwQAQwwEMCQsgAiAAQQRqNgIMIAFBzIzBAEEMQdiMwQBBDCACQQxqQbyMwQAQyQEMCAsgAiAAQQRqNgIMIAFB5IzBAEEOQdSHwQBBAyACQQxqQfSGwQAQyQEMBwsgAUHyjMEAQQ4Q5QMMBgsgAiAAQQRqNgIMIAFBgI3BAEEWQdSHwQBBAyACQQxqQeCIwQAQyQEMBQsgAiAAQQhqNgIMIAFBlo3BAEEhQbeNwQBBBCAAQQRqQeiFwQBBoovBAEEEIAJBDGpB9IbBABDDAQwECyACIABBCGo2AgwgAUG7jcEAQRhB043BAEEEIABBBGpB6IXBAEHXjcEAQQ8gAkEMakHAhsEAEMMBDAMLIAIgAEEIajYCDCABQeaNwQBBFkHUh8EAQQMgAEEEakHohcEAQaKLwQBBBCACQQxqQfSGwQAQwwEMAgsgAiAAQQRqNgIMIAFB/I3BAEEaQdSHwQBBAyACQQxqQcCGwQAQyQEMAQsgAiAAQQRqNgIMIAFBlo7BAEEOQdSHwQBBAyACQQxqQcCGwQAQyQELIAJBEGokAAuLBAIJfwF+AkACQAJ/AkACQAJAAkAgAkHAAE0EQCABKAIEIghBA3QgASgCCCIGayIDIAJJDQEgBkEDdiIDIAhPDQIgASgCACIKIANqLQAAIAZBB3EiCXatIQxBCCAJayIFIAJJBEAgASAFIAZqIgQ2AggCQCAEQQdxRQRAIAIgBWsiB0EITw0BIAUhCSAHDAgLQeDkwQBBI0GE5cEAEO0CAAtBASAHQQN2IgMgA0EBTRsiBEEDdCAJa0EIaiEJA0AgBSAGaiIDQQN2IgsgCE8NBSABIANBCGo2AgggCiALajEAACAFQT9xrYYgDIQhDCAFQQhqIQUgBEEBayIEDQALDAULIAEgAiAGajYCCCAMQn8gAq2GQn+FgyEMDAYLIAAgAjYCCCAAQYCAATsBBCAAQQE2AgAPCyAAIAM2AgwgACACNgIIIABBAToABCAAQQE2AgAPCyADIAhB5OPBABCtAgALIAsgCEHQ5MEAEK0CAAsgBSAGaiEEIAIgCWsLIAdBB3EiB0cEQEH048EAQTtBsOTBABDtAgALIAcEQCAEQQN2IgMgCE8NAiABIAQgB2oiBDYCCCADIApqMQAAQn8gB62GQn+FgyAJQT9xrYYgDIQhDAsgBCACIAZqRg0AQZTlwQBBKUHA5cEAEO0CAAsgACAMNwMIIABBADYCAA8LIAMgCEHA5MEAEK0CAAvvAwELfyMAQRBrIgYkAAJAIAEoAhAiBCABKAIMIgNJBEAMAQsgASgCCCIMIARJBEAMAQsgAUEUaiIJIAEtABgiB2pBAWstAAAhCiABKAIEIQsCQCAHQQRNBEADQCADIAtqIQUCQCAEIANrIghBB00EQCADIARGBEBBACECIAEgBDYCDAwGC0EAIQIDQCACIAVqLQAAIApGDQIgCCACQQFqIgJHDQALQQAhAiABIAQ2AgwMBQsgBkEIaiAKIAUgCBCJASAGKAIIIgJBAUcNAyAGKAIMIQILIAEgAiADakEBaiIDNgIMAkAgAyAHSSADIAxLcg0AIAsgAyAHayICaiAJIAcQ1AINACAAIAM2AgggACACNgIEQQEhAgwECyADIARNDQALQQAhAgwCCwJAA0AgAyALaiEIAkAgBCADayIJQQhPBEAgBiAKIAggCRCJASAGKAIAIgJBAUcNBCAGKAIEIQUMAQsgAyAERgRAQQAhAiABIAQ2AgwMBQtBACEFA0AgBSAIai0AACAKRg0BQQAhAiAJIAVBAWoiBUcNAAsMAwsgASADIAVqQQFqIgM2AgwgAyAMTSADIAdPcQ0BIAMgBE0NAAtBACECDAILIAdBBEGoscIAEKsEAAsgASAENgIMCyAAIAI2AgAgBkEQaiQAC/8DAQl/IwBBIGsiBCQAAkACQAJ/AkACQAJAAkACQCAAKAIAIgYEQCAAKAIIIgMgACgCBCIFIAMgBUsbIQlBfyEHIAMhAgNAIAIgCUYNBCAAIAJBAWoiCDYCCCAHQQFqIQcgAiAGaiAIIQItAAAiCEEwa0H/AXFBCkkgCEHhAGtB/wFxQQZJcg0ACyAIQd8ARw0DIAJBAWshAgJAIAMEQCADIAVPBEAgAiAFSw0LDAILIAIgBUsNCiADIAZqLAAAQb9/Sg0BDAoLIAIgBUsNCQsgBEEIaiADIAZqIgMgBxBnIAQoAggNASAAKAIQIgJFDQRB3brCAEECIAIQ1QQNAiADIAcgAhDVBA0CDAULQQAgACgCECIARQ0FGkHtucIAQQEgABDVBAwFCyAAKAIQIQIgBCAEKQMQNwMYIAJFDQIgBEEYaiACEK8ERQ0DC0EBDAMLAkAgACgCECIBRQ0AQcS5wgBBECABENUERQ0AQQEMAwsgAEEAOgAEIABBADYCAEEADAILQQAMAQtBACACLQAUQQRxDQAaIAFB4QBrIgBB/wFxIgFBGk9Bv/fzHSABdkEBcUVyDQEgAEECdEH8B3EiAEHcvcIAaigCACAAQfS8wgBqKAIAIAIQ1QQLIARBIGokAA8LQeC6wgAQrgQACyAGIAUgAyACQfS4wgAQ7AMAC7IEAgJ9BH8jAEEQayEEIAC8IgVBH3YhBgJAAn0gAAJ/AkACQAJAAkAgBUH/////B3EiA0HQ2LqVBE8EQCADQYCAgPwHSwRAIAAPCyAFQQBIIgVFIANBl+TFlQRLcQ0CIAVFDQEgBEMAAICAIACVOAIIIAQqAggaIANBtOO/lgRNDQEMBwsgA0GY5MX1A00EQCADQYCAgMgDTQ0DQQAhAyAADAYLIANBkquU/ANNDQMLIABDO6q4P5QgBkECdEH048IAaioCAJIiAUMAAADPYCEEQf////8HAn8gAYtDAAAAT10EQCABqAwBC0GAgICAeAtBgICAgHggBBsgAUP///9OXhtBACABIAFbGwwDCyAAQwAAAH+UDwsgBCAAQwAAAH+SOAIMIAQqAgwaIABDAACAP5IPCyAGRSAGawsiA7IiAUMAcjG/lJIiACABQ46+vzWUIgKTCyEBIAAgASABIAEgAZQiACAAQxVSNbuUQ4+qKj6SlJMiAJRDAAAAQCAAk5UgApOSQwAAgD+SIQEgA0UNAAJAAkACQCADQf8ATARAIANBgn9ODQMgAUMAAIAMlCEBIANBm35NDQEgA0HmAGohAwwDCyABQwAAAH+UIQEgA0H+AUsNASADQf8AayEDDAILIAFDAACADJQhAUG2fSADIANBtn1NG0HMAWohAwwBCyABQwAAAH+UIQFB/QIgAyADQf0CTxtB/gFrIQMLIAEgA0EXdEGAgID8A2q+lCEBCyABC4gEAQh/IAEoAgQiBQRAIAEoAgAhBANAAkAgA0EBaiECAn8gAiADIARqLQAAIgjAIglBAE4NABoCQAJAAkACQAJAAkACQAJAAkACQAJAIAhB38fCAGotAABBAmsOAwABAgwLQfjAwgAgAiAEaiACIAVPGy0AAEHAAXFBgAFHDQsgA0ECagwKC0H4wMIAIAIgBGogAiAFTxssAAAhByAIQeABayIGRQ0BIAZBDUYNAgwDC0H4wMIAIAIgBGogAiAFTxssAAAhBiAIQfABaw4FBAMDAwUDCyAHQWBxQaB/Rw0IDAYLIAdBn39KDQcMBQsgCUEfakH/AXFBDE8EQCAJQX5xQW5HIAdBQE5yDQcMBQsgB0FATg0GDAQLIAlBD2pB/wFxQQJLIAZBQE5yDQUMAgsgBkHwAGpB/wFxQTBPDQQMAQsgBkGPf0oNAwtB+MDCACAEIANBAmoiAmogAiAFTxstAABBwAFxQYABRw0CQfjAwgAgBCADQQNqIgJqIAIgBU8bLQAAQcABcUGAAUcNAiADQQRqDAELQfjAwgAgBCADQQJqIgJqIAIgBU8bLQAAQcABcUGAAUcNASADQQNqCyIDIgIgBUkNAQsLIAAgAzYCBCAAIAQ2AgAgASAFIAJrNgIEIAEgAiAEajYCACAAIAIgA2s2AgwgACADIARqNgIIDwsgAEEANgIAC6UDAQN/AkACQAJAAkACQAJAAkACQAJAAkAgACgCAA4KAAcHAQIDBAcHBQcLIABBBGoQbQ8LAkACQCAALQAEDgIHAQALIAAoAggiAUH7////B2oiA0ENTSADQQJHcQ0GIAFBhICAgHhKDQUgAUGDgICAeEcNBgwFCyAAKAIIIgFBhICAgHhKIAFBg4CAgHhGcg0EDAULIAAtAAQiAUEDSyABQQNHcg0EDAULAkACQEEDIAAoAgRBB2siASABQQNPG0ECaw4CAQAFCyAAQQRqEKQBDwsgAC0ACEEDRw0DIAAoAgwiACgCACEBDAULIAAtAARBA0cNAgwDCyAALQAEQQNHDQEgACgCCCIAKAIAIQEgAEEEaigCACIDKAIAIgIEQCABIAIRAwALIAMoAgQiAgRAIAEgAiADKAIIEKcECyAAQQxBBBCnBAwBCyABRQ0AIAAoAgwgAUECdEEEEKcECw8LIAAoAggiACgCACEBCyAAQQRqKAIAIgMoAgAiAgRAIAEgAhEDAAsgAygCBCICBEAgASACIAMoAggQpwQLIABBDEEEEKcEC/IDAgJ/AX4jAEFAaiICJAACfwJAAkACQAJAAkBBAyAAKAIAQYCAgIB4cyIDIANBBU8bQQFrDgQBAgMEAAsgASgCHEG0w8EAQRkgASgCICgCDBECAAwECyACIABBBGo2AgQgAiAAQQVqNgIkIAJBAjYCLCACQYzEwQA2AiggAkICNwI0IAJCgICAgOA0IgQgAkEkaq2ENwMQIAIgBCACQQRqrYQ3AwggAiACQQhqNgIwIAEoAhwgASgCICACQShqEEUMAwsgAiAAQQRqNgIkIAJBATYCLCACQfCnwQA2AiggAkIBNwI0IAIgAkEkaq1CgICAgJA4hDcDCCACIAJBCGo2AjAgASgCHCABKAIgIAJBKGoQRQwCCyACIABBDGo2AgAgAiAAQRBqNgIEIAIgADYCJCACQQM2AgwgAkHwxMEANgIIIAJCAzcCFCACIAJBJGqtQoCAgIDwOIQ3AzggAkKAgICAgDYiBCACQQRqrYQ3AzAgAiAEIAKthDcDKCACIAJBKGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AiQgAkECNgIsIAJBxMXBADYCKCACQgE3AjQgAiACQSRqrUKAgICA8DWENwMIIAIgAkEIajYCMCABKAIcIAEoAiAgAkEoahBFCyACQUBrJAALyQMCDX8BfiADIAVBAWsiDSABKAIUIghqIgdLBEBBACABKAIIIgprIQ4gBSABKAIQIg9rIRAgASgCHCELIAEpAwAhFANAAkAgAQJ/AkAgFCACIAdqMQAAiEIBg1AEQCABIAUgCGoiCDYCFCAGDQMMAQsgCiALIAogCiALSRsgBhsiCSAFIAUgCUkbIQwgAiAIaiERIAkhBwJAAkACQANAIAcgDEYEQEEAIAsgBhshDCAKIQcDQCAHIAxNBEAgASAFIAhqIgI2AhQgBkUEQCABQQA2AhwLIAAgAjYCCCAAIAg2AgQgAEEBNgIADwsgB0EBayIHIAVPDQUgByAIaiIJIANPDQMgBCAHai0AACACIAlqLQAARg0ACyABIAggD2oiCDYCFCAQIAZFDQYaDAcLIAcgCGogA08NAiAHIBFqIRIgBCAHaiAHQQFqIQctAAAgEi0AAEYNAAsgCCAOaiAHaiEIIAZFDQMMBQsgCSADQcCvwgAQrQIACyADIAggCWoiACAAIANJGyADQdCvwgAQrQIACyAHIAVBsK/CABCtAgALQQALIgc2AhwgByELCyAIIA1qIgcgA0kNAAsLIAEgAzYCFCAAQQA2AgALsQQCBH8EfiAAQShqIQUCQAJAIAAoAkgiA0UEQCACIQMMAQsgA0EgSw0BIAMgBWogAUEgIANrIgMgAiACIANLGyIEEDsaIABBACAAKAJIIARqIgMgA0EgRiIGGzYCSCACIARrIQMgASAEaiEBIAZFDQAgACAAKQMAIAApAyhCz9bTvtLHq9lCfnxCH4lCh5Wvr5i23puef343AwAgACAAKQMIIAApAzBCz9bTvtLHq9lCfnxCH4lCh5Wvr5i23puef343AwggACAAKQMQIAApAzhCz9bTvtLHq9lCfnxCH4lCh5Wvr5i23puef343AxAgACAAKQMYIAApA0BCz9bTvtLHq9lCfnxCH4lCh5Wvr5i23puef343AxgLIANBIE8EQCAAKQMYIQcgACkDECEIIAApAwghCSAAKQMAIQoDQCABKQAYQs/W077Sx6vZQn4gB3xCH4lCh5Wvr5i23puef34hByABKQAQQs/W077Sx6vZQn4gCHxCH4lCh5Wvr5i23puef34hCCABKQAIQs/W077Sx6vZQn4gCXxCH4lCh5Wvr5i23puef34hCSABKQAAQs/W077Sx6vZQn4gCnxCH4lCh5Wvr5i23puef34hCiABQSBqIQEgA0EgayIDQR9LDQALIAAgBzcDGCAAIAg3AxAgACAJNwMIIAAgCjcDAAsgAwRAIAUgASADEDsaIAAgAzYCSAsgACAAKQNQIAKtfDcDUA8LIANBIEGU9sEAEKoEAAv5AwECfyAAIAFqIQICQAJAIAAoAgQiA0EBcQ0AIANBAnFFDQEgACgCACIDIAFqIQEgACADayIAQdDowgAoAgBGBEAgAigCBEEDcUEDRw0BQcjowgAgATYCACACIAIoAgRBfnE2AgQgACABQQFyNgIEIAIgATYCAAwCCyAAIAMQdQsCQAJAAkAgAigCBCIDQQJxRQRAIAJB1OjCACgCAEYNAiACQdDowgAoAgBGDQMgAiADQXhxIgIQdSAAIAEgAmoiAUEBcjYCBCAAIAFqIAE2AgAgAEHQ6MIAKAIARw0BQcjowgAgATYCAA8LIAIgA0F+cTYCBCAAIAFBAXI2AgQgACABaiABNgIACyABQYACTwRAIAAgARB+DwsgAUH4AXFBuObCAGohAgJ/QcDowgAoAgAiA0EBIAFBA3Z0IgFxRQRAQcDowgAgASADcjYCACACDAELIAIoAggLIQEgAiAANgIIIAEgADYCDCAAIAI2AgwgACABNgIIDwtB1OjCACAANgIAQczowgBBzOjCACgCACABaiIBNgIAIAAgAUEBcjYCBCAAQdDowgAoAgBHDQFByOjCAEEANgIAQdDowgBBADYCAA8LQdDowgAgADYCAEHI6MIAQcjowgAoAgAgAWoiATYCACAAIAFBAXI2AgQgACABaiABNgIACwueAwIHfwJ+IwBBEGsiBCQAAn8CQCAAKAIAIgNFDQAgACgCCCICIAAoAgQiBU8NACACIANqIgEtAABBzABGBEAgACACQQFqIgE2AgggAAJ+AkAgASAFSQRAIAEgA2otAABB3wBGDQELIAEgBSABIAVLGyEHAkACQANAAkAgASAFSQRAIAEgA2otAABB3wBGDQELIAEgB0YNAgJAIAEgA2otAAAiAkEwayIGQf8BcUEKSQ0AIAJB4QBrQf8BcUEaTwRAIAJBwQBrQf8BcUEaTw0EIAJBHWshBgwBCyACQdcAayEGCyAAIAFBAWoiATYCCCAEIAgQmwIgBCkDCEIAUg0CIAQpAwAiCSAGrUL/AYN8IgggCVoNAQwCCwsgACABQQFqNgIIIAhCf1INAQsgACgCECIDBEBBAUHEucIAQRAgAxDVBA0GGgsgAEEAOgAEIABBADYCAEEADAULIAhCAXwMAQsgACACQQJqNgIIQgALELwBDAILIAEtAABBywBHDQAgACACQQFqNgIIIABBABAgDAELIAAQJwsgBEEQaiQAC5QDAQR/AkAgAkEQSQRAIAAhAwwBCwJAIABBACAAa0EDcSIFaiIEIABNDQAgACEDIAUEQCAFIQYDQCADIAE6AAAgA0EBaiEDIAZBAWsiBg0ACwsgBUEBa0EHSQ0AA0AgAyABOgAAIANBB2ogAToAACADQQZqIAE6AAAgA0EFaiABOgAAIANBBGogAToAACADQQNqIAE6AAAgA0ECaiABOgAAIANBAWogAToAACADQQhqIgMgBEcNAAsLIAQgAiAFayICQXxxaiIDIARLBEAgAUH/AXFBgYKECGwhBQNAIAQgBTYCACAEQQRqIgQgA0kNAAsLIAJBA3EhAgsCQCADIAIgA2oiBU8NACACQQdxIgQEQANAIAMgAToAACADQQFqIQMgBEEBayIEDQALCyACQQFrQQdJDQADQCADIAE6AAAgA0EHaiABOgAAIANBBmogAToAACADQQVqIAE6AAAgA0EEaiABOgAAIANBA2ogAToAACADQQJqIAE6AAAgA0EBaiABOgAAIANBCGoiAyAFRw0ACwsgAAudAwIGfwF+QTggAUH/AXEiASABQThPGyECAkAgACgCECIEIAAtABQiAWoiA0EASgRAIAIgA0sNAQJAIARBAEwgASACT3INAANAIARBAWsiBUEDdiEGQcAAIAFBB2oiB0F4cWshAwJAIAVBP00EQCAAIAYgAxCIASAAKAIQIQQgAC0AFCEBDAELAkAgACgCBCIFIAYgB0H4AXFBA3ZqQQdrIgZPBEAgBSAGayIFQQdLDQFBCCAFQcTewQAQqwQACyAGIAVB1N7BABCqBAALIAAgASADaiIBOgAUIAAgBCADQf8BcWsiBDYCECAAIAAoAgAgBmopAAA3AwgLIAFB/wFxIAJPDQEgBEEASg0ACwsgACABIAJrIgE6ABRCfyACrYZCf4UgACkDCCABQT9xrYiDDwsgACAEIAJrNgIQQgAPCyACIANrIQICQCADQf8BcSABSwRAIAAgAxBbIQggACgCECEEDAELIAAgASADayIBOgAUQn8gA62GQn+FIAApAwggAUE/ca2IgyEICyAAIAQgAms2AhAgCCACQT9xrYYLnAMBBX8CQEERQQAgAEGvsARPGyIBIAFBCHIiASAAQQt0IgIgAUECdEH82sIAaigCAEELdEkbIgEg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AEEEaiACKAIEIAIoAggQPUHcoMIAIAAoAgggACgCBCICGyEDQQkgACgCDCACGwshAiADIAIgARDaASAAQRBqJAALZgAjAEEwayIAJABBhOXCAC0AAARAIABBAjYCDCAAQYyhwgA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIAQhDcDICAAIABBIGo2AhAgAEEIakG0ocIAEKQDAAsgAEEwaiQAC2EBAX8jAEEwayICJAAgAiAANgIMIAJBAjYCFCACQZymwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA0hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRSACQTBqJAALYQEBfyMAQTBrIgIkACACIAA2AgwgAkECNgIUIAJB5K7BADYCECACQgE3AhwgAiACQQxqrUKAgICA4DSENwMoIAIgAkEoajYCGCABKAIcIAEoAiAgAkEQahBFIAJBMGokAAthAQF/IwBBMGsiAiQAIAIgADYCDCACQQE2AhQgAkHwp8EANgIQIAJCATcCHCACIAJBDGqtQoCAgICQOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUgAkEwaiQAC18BAn8CQCAAKAIAIgFB7f///wdqIgJBCk0gAkEDR3ENACABRSABQfv///8HaiICQQ1NIAJBAkdxIAFBg4CAgHhHIAFBhICAgHhMcXJyDQAgACgCBCABQQJ0QQQQpwQLC1wBA38gAC0AACIBQQNLIAFBA0dyRQRAIAAoAgQiACgCACEBIABBBGooAgAiAygCACICBEAgASACEQMACyADKAIEIgIEQCABIAIgAygCCBCnBAsgAEEMQQQQpwQLC2sBAn9BqJbAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMAAQIDC0EAIQEMAgsgAUEBaiEBQdStwAAhAgwBCyABQQRqIQFBkK7AACECCyAAIAI2AgQgACABNgIAC2gBA38CQAJAAkACQEEDIAEoAgBB7f///wdqIgQgBEELTxtBAmsOAwABAgMLIAFBBGohAkGcm8AAIQMMAgtB2LPAACEDIAEhAgwBCyABQQRqIQJBjLXAACEDCyAAIAM2AgQgACACNgIAC2sBAn9B1LfAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EE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AX8jAEEQayICJAAgAiAANgIMIAFB8b3AAEEWQYe+wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBic7AAEEbQcC8wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBrODAAEERQb3gwABBBCACQQxqQZzgwAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBweDAAEEWQdfgwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8fDAAEEbQZDfwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8IjBAEERQYGJwQBBBCACQQxqQeCIwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhYnBAEEWQZuJwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhZfBAEEbQdSHwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzwBAX8jAEEQayICJAAgAkGQksIANgIMIAIgADYCCCACQQhqQZSSwgAgAkEMakGUksIAIAFB5J/CABBrAAs4AQF/IwBBEGsiAiQAIAIgADYCDCABQeywwgBBDUH5sMIAQQQgAkEMakHcsMIAEMkBIAJBEGokAAs5AQF/IwBBEGsiAyQAIAMgATYCDCADIAA2AgggA0EIakGswsIAIANBDGpBrMLCACACQeyOwgAQawALMAEBfyMAQRBrIgIkACACQQhqIAAQ8wIgAigCCCABIAIoAgwoAhARAAAgAkEQaiQACzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEMUBDwsgACABEPwBDwsgACABEP0BCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEK0EDwsgACABEIQCDwsgACABEIMCCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEKkDDwsgACABEIQCDwsgACABEIMCCzMBAX8jAEEQayICJAAgAiAAKAIANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAszAQF/IwBBEGsiAiQAIAIgACgCADYCDCABQejUwQBBDCACQQxqQdjUwQAQfyACQRBqJAALLQACQCAAIAEQrANFDQAgAARAQYXlwgAtAAAaIAAgARD1AyIBRQ0BCyABDwsACzcBAX8jAEEgayIBJAAgAUEANgIYIAFBATYCDCABQdzZwgA2AgggAUIENwIQIAFBCGogABCkAwALMwEBfyAAKAIAIgFBhICAgHhMIAFBg4CAgHhHcSABRXJFBEAgACgCBCABQQJ0QQQQpwQLCzABAX8jAEEQayICJAAgAiAANgIMIAFBxJnAAEEMIAJBDGpBtJnAABB/IAJBEGokAAsvACAAQZybwAA2AgQgACABIAFBACABLQAAQQJrQf8BcSIAQQFGGyAAQQJLGzYCAAswAQF/IwBBEGsiAiQAIAIgADYCDCABQdi8wABBDCACQQxqQci8wAAQfyACQRBqJAALLwAgAEGwvsAANgIEIAAgASABQQAgAS0AAEECa0H/AXEiAEEBRhsgAEECSxs2AgALMAEBfyMAQRBrIgIkACACIAA2AgwgAUGo38AAQQwgAkEMakGY38AAEH8gAkEQaiQACy8AIABBgOHAADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACy8AIABBxInBADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACzABAX8jAEEQayICJAAgAiAANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAssAQF/IwBBEGsiACQAIABBCGoiAiABQfyVwgBBCxCmAyACEK4CIABBEGokAAuEAQEDfyMAQSBrIgQkACAEQQhqIgMQ8AECf0GF5cIALQAAGkEkQQQQ9QMiAgRAIAJB5LrAADYCACACIAE2AiAgAiAANgIcIAIgAykCADcCBCACQQxqIANBCGopAgA3AgAgAkEUaiADQRBqKQIANwIAIAIMAQtBBEEkENMEAAsgBEEgaiQACzgBAX9BASEBIAAtAARFBEAgACgCACIBKAIcQY7EwgBBASABKAIgKAIMEQIAIQELIAAgAToABCABC5ABAQN/IwBBIGsiAyQAIANBCGoiAhDwAQJ/QYXlwgAtAAAaQShBBBD1AyIBBEAgAUGcgsAANgIAIAEgAikCADcCBCABIAApAgA3AhwgAUEMaiACQQhq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NgIMIABBhKLCACABKAIEIAEoAggiAC0ACCAALQAJEMEBAAsgACADNgIEIAAgAjYCACAAQeihwgAgASgCBCABKAIIIgAtAAggAC0ACRDBAQALKgAgAEH/AXFFBEBDAAAAAA8LIABBAWtB/wFxs0NFIpE9lEMAABDBkhBSCy0AIAEoAhwgAiADIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAsyAQF/IAEoAhxBvMHCAEEBIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAshAAJAIAEgAxCsAwRAIAAgASADIAIQ3wMiAA0BCwALIAALIgEBfyAAKAIAIgAgAEEfdSICcyACayAAQX9zQR92IAEQbAslACAARQRAQfiPwgBBMhDIBAALIAAgAiADIAQgBSABKAIQEQsACygAIAEgACgCAC0AAEECdCIAQeC8wgBqKAIAIABBzLzCAGooAgAQ5QMLGQEBf0GAgICAeCABayAATyACIAFpQQFGGwslACABIAAtAABBAnQiAEH8tcAAaigCACAAQey1wABqKAIAEOUDCyUAIABBnJvAADYCBCAAIAFBBGpBACABKAIAQYKAgIB4Rhs2AgALIQAgAEHwosAANgIEIAAgAUEBakEAIAEtAABBAkYbNgIACyUAIAEgAC0AAEECdCIAQZDZwABqKAIAIABBgNnAAGooAgAQ5QMLJQAgAEGwvsAANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAshACAAQYTGwAA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgASAALQAAQQJ0IgBB+PvAAGooAgAgAEHo+8AAaigCABDlAwslACAAQYDhwAA2AgQgACABQQRqQQAgASgCAEGCgICAeEYbNgIACyEAIABBsOjAADYCBCAAIAFBAWpBACABLQAAQQJGGzYCAAshACAAQbSOwQA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgAEHEicEANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAslACABIAAtAABBAnQiAEGMosEAaigCACAAQfyhwQBqKAIAEOUDCyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCABKAIQEQcACyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCAB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BBD1AyILBEACQEGF5cIALQAAGkGACEEEEPUDIghFDQJBheXCAC0AABpBgAhBBBD1AyIERQ0AQYXlwgAtAAAaQYAIQQQQ9QMiDkUNAkGF5cIALQAAGkGACEEEEPUDIgxFDQBBheXCAC0AABpBgAhBBBD1AyISRQ0CIANCADcDqAIgA0EBNgLoASADQQA6AOQBIANBADoA4gEgA0EAOgDgASADQTQ7AdwBIANBADYC2AEgAyASNgLUASADQoCAgICAIDcCzAEgAyAMNgLIASADQoCAgICAIDcDwAEgA0KAgICAwAA3A7gBIANBIzsBtAEgA0EANgKwASADIA42AqwBIANCgICAgIAgNwKkASADIAQ2AqABIANCgICAgIAgNwOYASADQoCAgIDAADcDkAEgA0EfOwGMASADQQA2AogBIAMgCDYChAEgA0KAgICAgCA3AnwgAyALNgJ4IANCgICAgIAgNwNwIANCgICAgMAANwNoIANBwAJqQgA3AwAgA0G4AmpCADcDACADQbACakIANwMAIANB/AFqQQA2AgAgA0H0AWpCADcCACADQgA3AuwBIANC1uuC7ur9ifXgADcDgAIgA0LP1tO+0ser2UI3A4gCIANCADcDkAIgA0L56tDQ58mh5OEANwOYAiADQgA3A6ACIANBADYCyAIgA0IANwPQAiADIAY2AtgCIANBADYC5AIgA0EINgKUAyADQoCAgIAQNwLcAiADQoGAgIDAADcCjAMgA0EANgKIAyADQoCAgIAQNwPoAiADQgA3A/ACIANCBDcD+AIgA0KAgICAEDcDgAMMAwsLQQRBgAhBzIDCABDXAwALQQRBgAhB3IDCABDXAwALIAdBADYCqAcgB0EANgKwByAHQQA6ANwKIAdBADYC2AogByAjNwPQCiAHKQOoByEgIAcpA7AHISMgB0HoA2oiBiADQagDEDsaIAdBCGoQSSAHICM3AyggByAgNwMgIAcgITcDGCAHIA02AgwgByAiPgIQIAcgIkIgiD4CFCAHIAU2AgggB0EwaiAGQagDEDshCCAFQQFxBEBBDCEQIAcoAtgDIhJFDQEgBygC3AMhFwNAIBJB1AFrIQQgEkEEaiEGIBIvAd4WIgNBAnQhC0F/IQUCQAJAA0AgC0UEQCADIQUMAgsgBigCACEOIAVBAWohBSAEQYQCaiEEIAtBBGsh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EwAgAEHMuMAANgIEIAAgATYCAAsTACAAQYi5wAA2AgQgACABNgIACxMAIABBxLnAADYCBCAAIAE2AgALEwAgAEGAusAANgIEIAAgATYCAAsTACAAQbC+wAA2AgQgACABNgIACxMAIABBKDYCBCAAQYjbwAA2AgALEwAgAEGA4cAANgIEIAAgATYCAAshACAAQqTFo/yfjvDjADcDCCAAQqqooLmusOaw6QA3AwALEAAgACgCACAAKAIEIAEQMAsRACAAKAIAIAAoAgQgARDVBAsiACAAQsuH6/rgqLu20AA3AwggAELEr9zF2tKv9bh/NwMACxMAIABBKDYCBCAAQcCFwQA2AgALEwAgAEHEicEANgIEIAAgATYCAAsgACAAQrz8k7Ko16DsTDcDCCAAQuuYqJm2gbKefzcDAAshACAAQriynYTMrpfUQjcDCCAAQu/Dv6KOjcrEoH83AwALIAAgAEKcnaLxgrvwoHU3AwggAELRqsqvpcqt8kA3AwALIQAgAEL7wqCWlfy/yHo3AwggAELmsfLlkYe/ybF/NwMACyIAIABC9auQ77TsvKaWfzcDCCAAQrHh7P30uYbLwgA3AwALIAAgAELNnq77nqC2sEE3AwggAELxps+Y0aSn/gE3AwALIAAgAEK3v8ue+N2SoEM3AwggAEKvuaX0x5vV+zA3AwALIQAgAEKWl7rs79nZo3Q3AwggAEKH+OXLhuPSwtQANwMACyEAIABC/O6Qyq7osdU1NwMIIABC2OvVj+a1zN2OfzcDAAshACAAQrzprN2Y1v7ui383AwggAEKk3Nqt0/nNwEU3AwALIQAgAELl6obQ6cP/7Xk3AwggAEL30OLk1cPQ6ad/NwMACyEAIABC5sHsgPKk3YtlNwMIIABChu7u8+efmIeefzcDAAshACAAQs7Is8mT6a+2pX83AwggAELt66KMv7HLkg83AwALIgAgAEKcrtGn56WAwMIANwMIIABC16rLiaf+wYLHADcDAAsiACAAQt3+weC9o+rogn83AwggAEKX2/aYrfP7zY5/NwMACyEAIABCgsDc4LCv07mnfzcDCCAAQpbk17fDtcOKAzcDAAshACAAQrvV0cb1jfDEkH83AwggAELVi9bpuKS4kXk3AwALIQAgAEKynOer2rGju98ANwMIIABCvfif/8L+hsNVNwMACyIAIABC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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAAVwAAAFYAAABgERAAWAAAAFkAAABaAAAAWwAAAFwAAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAA/wAAAFYAAAD0IhAAAAEAAFkAAAABAQAAWwAAAAIBAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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bEVuY29kaW5nSW52YWxpZENoYXJFbmNvZGluZwAAAAAAAAAEAAAABAAAAEEAAABJbnZhbGlkVGFnRW5jb2RpbmdEZXNlcmlhbGl6ZUFueU5vdFN1cHBvcnRlZFNpemVMaW1pdFNlcXVlbmNlTXVzdEhhdmVMZW5ndGgAAAAAAAQAAAAEAAAANQEAAEN1c3RvbU5vbmVTb21lUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVkAAAAAAAABAAAAAQAAAA2AQAAVG9vTWFueUJpdHNudW1fcmVxdWVzdGVkX2JpdHNsaW1pdE5vdEVub3VnaFJlbWFpbmluZ0JpdHNyZXF1ZXN0ZWRyZW1haW5pbmdBY2NMb2dJc1plcm8AAAAAAAABAAAAAQAAADcBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAA4AQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAAA5AQAARwAAAHAwEAA6AQAASQAAADsBAABKAAAAPAEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABNAAAAUmVhZEZyYW1lSGVhZGVyRXJyb3IAAAAABAAAAAQAAABOAAAARnJhbWVIZWFkZXJFcnJvcldpbmRvd1NpemVUb29CaWcAAAAABAAAAAQAAABPAAAARGljdGlvbmFyeURlY29kZUVycm9yAAAAAAAAAAQAAAAEAAAAUAAAAEZhaWxlZFRvUmVhZEJsb2NrSGVhZGVyAAAAAAAEAAAABAAAAFEAAABGYWlsZWRUb1JlYWRCbG9ja0JvZHlGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzRXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzVG9vTWFueVdlaWdodHNNaXNzaW5nV2VpZ2h0c0xlZnRvdmVySXNOb3RBUG93ZXJPZjJOb3RFbm91Z2hCeXRlc1RvRGVjb21wcmVzc1dlaWdodHNoYXZlRlNFVGFibGVVc2VkVG9vTWFueUJ5dGVzdXNlZGF2YWlsYWJsZV9ieXRlc05vdEVub3VnaEJ5dGVzSW5Tb3VyY2VXZWlnaHRCaWdnZXJUaGFuTWF4TnVtQml0c01heEJpdHNUb29IaWdoAAAAAAAAAAEAAAABAAAAVgAAAAAAAAABAAAAAQAAAD0BAABWAAAAIDQQAD4BAABZAAAAPwEAAFsAAABAAQAAVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZVplcm9PZmZzZXROb3RFbm91Z2hCeXRlc0Zvck51bVNlcXVlbmNlcwAAAAAABAAAAAQAAABdAAAARXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlAAAAQQEAAAwAAAAEAAAAXwAAAEEBAAAMAAAABAAAAEIBAABfAAAAKDUQAEMBAABiAAAAOwEAAGMAAAA8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YWxzbmVlZGVkAAAAAAAABAAAAAQAAABjAQAAQml0c3RyZWFtUmVhZE1pc21hdGNocmVhZF90aWxEZWNvZGVkTGl0ZXJhbENvdW50TWlzbWF0Y2hkZWNvZGVkAGQBAAAUAAAABAAAALQAAABkAQAAFAAAAAQAAABlAQAAtAAAAMQ8EABmAQAAtwAAADsBAAC4AAAAPAEAAAAAAAAMAAAABAAAALkAAAAAAAAADAAAAAQAAABnAQAAuQAAAAA9EAA6AQAAuwAAADsBAABKAAAAPAEAAGgBAAAYAAAABAAAAL0AAABoAQAAGAAAAAQAAABpAQAAvQAAADw9EABqAQAAwAAAADsBAADBAAAAPAEAAAAAAAAMAAAABAAAAMIAAAAAAAAADAAAAAQAAABrAQAAwgAAAHg9EABsAQAAxQAAADsBAADGAAAAPAEAAElsbGVnYWxMaXRlcmFsU2VjdGlvblR5cGVOb3RFbm91Z2hCeXRlc25lZWRfYXRfbGVhc3QDAAAAAwAAAAoAAAAIAAAA8i4QAPUuEAD4LhAAAi8QAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAAAIPhAAbQAAACoCAAARAAAAYW4gYXJyYXkgb2YgbGVuZ3RoIDQAAAAAAAAAAAEAAABtAQBBtP3AAAv1KAEAAABtAQAAAAAAAAgAAAAEAAAAbgEAAHN0cnVjdCBXbGcwSGVhZGVyIHdpdGggNyBlbGVtZW50cwAAAMw+EAAhAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogaW52YWxpZCBPbmNlIHN0YXRl+D4QADwAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvb25jZS9ub190aHJlYWRzLnJzPD8QAHwAAAA1AAAAEgAAAGZhaWxlZCB0byBmaWxsIHdob2xlIGJ1ZmZlcgDIPxAAGwAAACUAAAACAAAA5D8QAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2RpbmcvYmxvY2tfZGVjb2Rlci5yc0J1ZyBpbiB0aGlzIGxpYnJhcnkA+D8QAGwAAACYAAAAFgAAAFdyb25nIG51bWJlciBvZiBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiAAAIhAEAAaAAAAokAQABQAAAD4PxAAbAAAAK0AAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uID09IHVwcGVyX2xpbWl0X2Zvcl9saXRlcmFscyBhcyB1MzIA+D8QAGwAAACzAAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHUzMjo6ZnJvbShieXRlc19pbl9saXRlcmFsc19oZWFkZXIpICsgYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uICsKICAgICAgICAgICAgdTMyOjpmcm9tKGJ5dGVzX2luX3NlcXVlbmNlX2hlYWRlcikgKyByYXcubGVuKCkgYXMgdTMyID09CiAgICBoZWFkZXIuY29udGVudF9zaXplAAD4PxAAbAAAAMEAAAAJAAAA+D8QAGwAAAC6AAAAFwAAAPg/EABsAAAAiwAAABcAAABIb3cgZGlkIHlvdSBldmVuIGdldCB0aGlzLiBUaGUgZGVjb2RlciBzaG91bGQgZXJyb3Igb3V0IGlmIGl0IGRldGVjdHMgYSByZXNlcnZlZC10eXBlIGJsb2NrAPg/EABsAAAAcAAAABEAAABmYWlsZWQgdG8gZmlsbCB3aG9sZSBidWZmZXIAkEIQABsAAAAlAAAAAgAAAKxCEABkZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBEaXNwbGF5AAAAAAQAAAAEAAAAbwEAAAAAAAAEAAAABAAAAHABAABVdGY4RXJyb3J2YWxpZF91cF90b2Vycm9yX2xlblJhd1JMRUNvbXByZXNzZWRSZXNlcnZlZAAAAAAAAAAEAAAABAAAAEAAAABUb29NYW55Qml0c251bV9yZXF1ZXN0ZWRfYml0c2xpbWl0AAAAAAAABAAAAAQAAABBAAAATm90RW5vdWdoUmVtYWluaW5nQml0c3JlcXVlc3RlZHJlbWFpbmluZ0FjY0xvZ0lzWmVybwAAAAABAAAAAQAAAHEBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAByAQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAABzAQAARwAAALREEABKAAAASQAAAHQBAABKAAAAdQEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzAAAAAAAAAAQAAAAEAAAAVQAAAEV4dHJhUGFkZGluZ3NraXBwZWRfYml0c1Rvb01hbnlXZWlnaHRzTWlzc2luZ1dlaWdodHNMZWZ0b3ZlcklzTm90QVBvd2VyT2YyTm90RW5vdWdoQnl0ZXNUb0RlY29tcHJlc3NXZWlnaHRzaGF2ZUZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaAAAAAABAAAAAQAAAFYAAAAAAAAAAQAAAAEAAAB2AQAAVgAAACRHEABbAAAAWQAAAHcBAABbAAAAeAEAAFVuc3VwcG9ydGVkT2Zmc2V0b2Zmc2V0X2NvZGVaZXJvT2Zmc2V0Tm90RW5vdWdoQnl0ZXNGb3JOdW1TZXF1ZW5jZXMAAAAAAAQAAAAEAAAAXQAAAEV4dHJhQml0c2JpdHNfcmVtYWluaW5nTWlzc2luZ0NvbXByZXNzaW9uTW9kZU1pc3NpbmdCeXRlRm9yUmxlTGxUYWJsZU1pc3NpbmdCeXRlRm9yUmxlT2ZUYWJsZU1pc3NpbmdCeXRlRm9yUmxlTWxUYWJsZQAAAHkBAAAMAAAABAAAAF8AAAB5AQAADAAAAAQAAAB6AQAAXwAAACxIEAB7AQAAYgAAAHQBAABjAAAAdQEAAAAAAAAQAAAACAAAAGQAAAAAAAAAEAAAAAgAAAB8AQAAZAAAAGhIEAB9AQAAZwAAAH4BAABoAAAAfwEAAIABAAAYAAAABAAAAGoAAACAAQAAGAAAAAQAAACBAQAAagAAAKRIEACCAQAAbQAAAHQBAABuAAAAdQEAAIMBAAAIAAAABAAAAHAAAACDAQAACAAAAAQAAACEAQAAcAAAAOBIEACFAQAAcwAAAHQBAAB0AAAAdQEAAIYBAAAYAAAABAAAAHYAAACGAQAAGAAAAAQAAACHAQAAdgAAABxJEACIAQAAeQAAAHQBAAB6AAAAdQEAAIkBAAAIAAAABAAAACUAAACJAQAACAAAAAQAAAAmAAAAJQAAAFhJEAAnAAAAKAAAACkAAAAqAAAAdQEAAAAAAAAMAAAABAAAAHsAAAAAAAAADAAAAAQAAACKAQAAewAAAJRJEACLAQAAfgAAAHQBAAB/AAAAdQEAAIwBAAAUAAAABAAAAIEAAACMAQAAFAAAAAQAAACNAQAAgQAAANBJEACOAQAAhAAAAHQBAACFAAAAdQEAAAAAAAAEAAAABAAAAFIAAABSZWFkRXJyb3JGb3VuZFJlc2VydmVkQmxvY2sAAAAAAAQAAAAEAAAAhgAAAEJsb2NrVHlwZUVycm9yAAAAAAAABAAAAAQAAACHAAAAQmxvY2tTaXplRXJyb3JCbG9ja0NvbnRlbnRSZWFkRXJyb3JNYWxmb3JtZWRTZWN0aW9uSGVhZGVyZXhwZWN0ZWRfbGVucmVtYWluaW5nX2J5dGVzAAAAAAQAAAAEAAAAiAAAAERlY29tcHJlc3NMaXRlcmFsc0Vycm9yAAAAAAAEAAAABAAAAIkAAABMaXRlcmFsc1NlY3Rpb25QYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAigAAAFNlcXVlbmNlc0hlYWRlclBhcnNlRXJyb3IAAAAAAAAABAAAAAQAAACLAAAARGVjb2RlU2VxdWVuY2VFcnJvcgAAAAAABAAAAAQAAACMAAAARXhlY3V0ZVNlcXVlbmNlc0Vycm9ySW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnTWFnaWNOdW1iZXJSZWFkRXJyb3JCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvclNraXBGcmFtZW1hZ2ljX251bWJlcmxlbmd0aAAAAAAAAAQAAAAEAAAAjQAAAEJhZE1hZ2ljTnVtAAAAAAAEAAAABAAAAI4AAABIdWZmbWFuVGFibGVFcnJvcgAAAAAAAAAEAAAABAAAAI8AAABEZWNvZGVidWZmZXJFcnJvck5vdEVub3VnaEJ5dGVzRm9yU2VxdWVuY2V3YW50ZWQAAAAAAQAAAAEAAACQAAAAAAAAAAEAAAABAAAAjwEAAJAAAADUTBAAWwAAAJIAAAB3AQAAWwAAAHgBAAAAAAAABAAAAAQAAACTAAAAAAAAAAQAAAAEAAAAkAEAAJMAAAAQTRAASgAAAJUAAAB0AQAASgAAAHUBAACRAQAAFAAAAAQAAACXAAAAkQEAABQAAAAEAAAAkgEAAJcAAABMTRAAkwEAAJoAAAB0AQAAmwAAAHUBAAAAAAAADAAAAAQAAACcAAAAAAAAAAwAAAAEAAAAlAEAAJwAAACITRAAlQEAAJ8AAAB0AQAAoAAAAHUBAAAAAAAACAAAAAQAAAChAAAAAAAAAAgAAAAEAAAAlgEAAKEAAADETRAASgAAAKMAAAB0AQAASgAAAHUBAACXAQAAFAAAAAQAAAClAAAAlwEAABQAAAAEAAAAmAEAAKUAAAAAThAAmQEAAKgAAAB0AQAAqQAAAHUBAAAAAAAADAAAAAQAAACqAAAAAAAAAAwAAAAEAAAAmgEAAKoAAAA8ThAAmwEAAK0AAAB0AQAArgAAAHUBAABEZWNvZGVyU3RhdGVJc0ZhaWxlZEV4cGVjdGVkSGVhZGVyT2ZQcmV2aW91c0Jsb2NrAAAAAAAAAAEAAAABAAAAnAEAAHN0ZXBzb3VyY2UAAAAAAAAEAAAABAAAALAAAABEZWNvbXByZXNzQmxvY2tFcnJvck1pc3NpbmdDb21wcmVzc2VkU2l6ZU1pc3NpbmdOdW1TdHJlYW1zAAAAAAAABAAAAAQAAACxAAAASHVmZm1hbkRlY29kZXJFcnJvclVuaW5pdGlhbGl6ZWRIdWZmbWFuVGFibGVNaXNzaW5nQnl0ZXNGb3JKdW1wSGVhZGVyTWlzc2luZ0J5dGVzRm9yTGl0ZXJhbHNuZWVkZWQAAAAAAAAEAAAABAAAAJ0BAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAngEAABQAAAAEAAAAtAAAAJ4BAAAUAAAABAAAAJ8BAAC0AAAA2E8QAKABAAC3AAAAdAEAALgAAAB1AQAAAAAAAAwAAAAEAAAAuQAAAAAAAAAMAAAABAAAAKEBAAC5AAAAFFAQAEoAAAC7AAAAdAEAAEoAAAB1AQAAogEAABgAAAAEAAAAvQAAAKIBAAAYAAAABAAAAKMBAAC9AAAAUFAQAKQBAADAAAAAdAEAAMEAAAB1AQAAAAAAAAwAAAAEAAAAwgAAAAAAAAAMAAAABAAAAKUBAADCAAAAjFAQAMYAAADFAAAAdAEAAMYAAAB1AQAASWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzbmVlZF9hdF9sZWFzdAMAAAADAAAACgAAAAgAAAAlQxAAKEMQACtDEAA1QxAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9zdGQvc3JjL2lvL21vZC5ycwAAHFEQAGoAAACyAQAAMQAAAGFzc2VydGlvbiBmYWlsZWQ6IGZpbGxlZCA8PSBzZWxmLmJ1Zi5pbml0L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9jb3JlL3NyYy9pby9ib3Jyb3dlZF9idWYucnMAAADBURAAdAAAAB0BAAAJAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnNIUhAAgAAAAFgCAAAwAAAASW52YWxpZCBGcmFtZV9Db250ZW50X1NpemVfRmxhZzsgSXM6ICwgU2hvdWxkIGJlIG9uZSBvZjogMCwgMSwgMiwgMwDYUhAAJQAAAP1SEAAeAEG0psEAC8piwAMAAHdpbmRvd19zaXplIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bS4gSXM6ICwgU2hvdWxkIGJlIGxvd2VyIHRoYW46IAAAADhTEAAtAAAAZVMQABgAAAAABAAAAAAAAHdpbmRvd19zaXplIHNtYWxsZXIgdGhhbiBhbGxvd2VkIG1pbmltdW0uIElzOiAsIFNob3VsZCBiZSBncmVhdGVyIHRoYW46IJhTEAAuAAAAxlMQABoAAAABAAAAAAAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gZGljdF9pZC4gSXM6ICwgU2hvdWxkIGJlOiAAAPhTEAAhAAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQgbGVuZ3RoLiBJczogADhUEAA3AAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgd2FzIHplcm9JbnZhbGlkIGZyYW1lX2NvbnRlbnRfc2l6ZS4gSXM6ICwgU2hvdWxkIGJlIG9uZSBvZiAxLCAyLCA0LCA4IGJ5dGVzAACbVBAAIAAAALtUEAAjAAAARXJyb3Igd2hpbGUgcmVhZGluZyBtYWdpYyBudW1iZXI6IAAA8FQQACIAAABSZWFkIHdyb25nIG1hZ2ljIG51bWJlcjogMHgAHFUQABsAAABFcnJvciB3aGlsZSByZWFkaW5nIGZyYW1lIGRlc2NyaXB0b3I6IAAAQFUQACYAAABFcnJvciB3aGlsZSByZWFkaW5nIHdpbmRvdyBkZXNjcmlwdG9yOiAAcFUQACcAAABFcnJvciB3aGlsZSByZWFkaW5nIGRpY3Rpb25hcnkgaWQ6IACgVRAAIwAAAEVycm9yIHdoaWxlIHJlYWRpbmcgZnJhbWUgY29udGVudCBzaXplOiDMVRAAKAAAAFNraXBwYWJsZUZyYW1lIGVuY291bnRlcmVkIHdpdGggTWFnaWNOdW1iZXIgMHggYW5kIGxlbmd0aCAgYnl0ZXP8VRAALgAAACpWEAAMAAAANlYQAAYAAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBoZWFkZXJSZXNlcnZlZCBibG9jayBvY2N1cmVkLiBUaGlzIGlzIGNvbnNpZGVyZWQgY29ycnVwdGlvbiBieSB0aGUgZG9jdW1lbnRhdGlvbkVycm9yIGdldHRpbmcgYmxvY2sgdHlwZTogwlYQABoAAABFcnJvciBnZXR0aW5nIGJsb2NrIGNvbnRlbnQgc2l6ZTogAADkVhAAIgAAAEludmFsaWQgQmxvY2t0eXBlIG51bWJlci4gSXM6ICBTaG91bGQgYmUgb25lIG9mOiAwLCAxLCAyLCAzICgzIGlzIHJlc2VydmVkIHRob3VnaAAAABBXEAAeAAAALlcQADMAAAAAAAIAQmxvY2tzaXplIHdhcyBiaWdnZXIgdGhhbiB0aGUgYWJzb2x1dGUgbWF4aW11bSAgKDEyOGtiKS4gSXM6IAAAAHhXEAAvAAAAp1cQAA4AAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBjb250ZW50OiAAyFcQACcAAABNYWxmb3JtZWQgc2VjdGlvbiBoZWFkZXIuIFNheXMgbGl0ZXJhbHMgd291bGQgYmUgdGhpcyBsb25nOiAgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBsZWZ0APhXEAA8AAAANFgQABQAAABIWBAACwAAAENhbid0IGRlY29kZSBuZXh0IGJsb2NrIGlmIGZhaWxlZCBhbG9uZyB0aGUgd2F5LiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VDYW4ndCBkZWNvZGUgbmV4dCBibG9jayBib2R5LCB3aGlsZSBleHBlY3RpbmcgdG8gZGVjb2RlIHRoZSBoZWFkZXIgb2YgdGhlIHByZXZpb3VzIGJsb2NrLiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VFcnJvciB3aGlsZSByZWFkaW5nIGJ5dGVzIGZvciA6IAAnWRAAHgAAAEVZEAACAAAATmVlZCAgYnl0ZXMgZnJvbSB0aGUgZGljdGlvbmFyeSBidXQgaXQgaXMgb25seSAgYnl0ZXMgbG9uZwAAWFkQAAUAAABdWRAAKgAAAIdZEAALAAAAb2Zmc2V0OiAgYmlnZ2VyIHRoYW4gYnVmZmVyOiAAAACsWRAACAAAALRZEAAVAAAAQmFkIG1hZ2ljX251bSBhdCBzdGFydCBvZiB0aGUgZGljdGlvbmFyeTsgR290OiAsIEV4cGVjdGVkOiAA3FkQAC8AAAALWhAADAAAADekMOxTcGVjaWZpZWQgd2luZG93X3NpemUgaXMgdG9vIGJpZzsgUmVxdWVzdGVkOiAsIE1heDogLFoQAC0AAABZWhAABwAAAEZhaWxlZCB0byBwYXJzZS9kZWNvZGUgYmxvY2sgYm9keTogAHBaEAAjAAAARmFpbGVkIHRvIHBhcnNlIGJsb2NrIGhlYWRlcjogAACcWhAAHgAAAEZhaWxlZCB0byByZWFkIGNoZWNrc3VtOiAAAADEWhAAGQAAAERlY29kZXIgbXVzdCBpbml0aWFsaXplZCBvciByZXNldCBiZWZvcmUgdXNpbmcgaXREZWNvZGVyIGVuY291bnRlcmVkIGVycm9yIHdoaWxlIGluaXRpYWxpemluZzogABlbEAAuAAAARGVjb2RlciBlbmNvdW50ZXJlZCBlcnJvciB3aGlsZSBkcmFpbmluZyB0aGUgZGVjb2RlYnVmZmVyOiAAUFsQADsAAABGYWlsZWQgdG8gc2tpcCBieXRlcyBmb3IgdGhlIGxlbmd0aCBnaXZlbiBpbiB0aGUgZnJhbWUgaGVhZGVyVGFyZ2V0IG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGJ5dGVzIGFzIHRoZSBjb250ZW50c2l6ZSBvZiB0aGUgZnJhbWUgcmVwb3J0c0ZyYW1lIGhlYWRlciBzcGVjaWZpZWQgZGljdGlvbmFyeSBpZCAweCB0aGF0IHdhc250IHByb3ZpZGVkIGJ5IGFkZF9kaWN0KCkgb3IgcmVzZXRfd2l0aF9kaWN0KCkAACBcEAAnAAAAR1wQADcAAABjb21wcmVzc2VkIHNpemUgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzbnVtX3N0cmVhbXMgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nICgxIG9yIDQpIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzVHJpZWQgdG8gcmV1c2UgaHVmZm1hbiB0YWJsZSBidXQgaXQgd2FzIG5ldmVyIGluaXRpYWxpemVkTmVlZCA2IGJ5dGVzIHRvIGRlY29kZSBqdW1wIGhlYWRlciwgZ290IAAAfl0QACgAAAA2VhAABgAAAE5lZWQgYXQgbGVhc3QgIGJ5dGVzIHRvIGRlY29kZSBsaXRlcmFscy4gSGF2ZTogALhdEAAOAAAAxl0QACEAAAA2VhAABgAAAFBhZGRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2Vfc2VjdGlvbiB3YXMgbW9yZSB0aGFuIGEgYnl0ZSBsb25nOiAgYml0cy4gUHJvYmFibHkgY2F1c2VkIGJ5IGRhdGEgY29ycnVwdGlvbgAAXhAARgAAAEZeEAApAAAAQml0c3RyZWFtIHdhcyByZWFkIHRpbGw6ICwgc2hvdWxkIGhhdmUgYmVlbjogAAAAgF4QABkAAACZXhAAFAAAAERpZCBub3QgZGVjb2RlIGVub3VnaCBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiDAXhAAIAAAAOBeEAAUAAAAU2VxdWVuY2Ugd2FudHMgdG8gY29weSB1cCB0byBieXRlIC4gQnl0ZXMgaW4gbGl0ZXJhbHNidWZmZXI6IAAAAARfEAAiAAAAJl8QABsAAABJbGxlZ2FsIG9mZnNldDogMCBmb3VuZERvIG5vdCBzdXBwb3J0IG9mZnNldHMgYmlnZ2VyIHRoYW4gMTw8MzI7IGdvdDogAABrXxAALwAAAFJlYWQgYW4gb2Zmc2V0ID09IDAuIFRoYXQgaXMgYW4gaWxsZWdhbCB2YWx1ZSBmb3Igb2Zmc2V0c0J5dGVzdHJlYW0gZGlkIG5vdCBjb250YWluIGVub3VnaCBieXRlcyB0byBkZWNvZGUgbnVtX3NlcXVlbmNlc2NvbXByZXNzaW9uIG1vZGVzIGFyZSBub25lIGJ1dCB0aGV5IG11c3QgYmUgc2V0IHRvIHNvbWV0aGluZ05lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBsbCB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBvZiB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBtbCB0YWJsZUlsbGVnYWwgbGl0ZXJhbHNzZWN0aW9udHlwZS4gSXM6ICwgbXVzdCBiZSBpbjogMCwgMSwgMiwgMwAAAMRgEAAhAAAA5WAQABgAAABOb3QgZW5vdWdoIGJ5dGUgdG8gcGFyc2UgdGhlIGxpdGVyYWxzIHNlY3Rpb24gaGVhZGVyLiBIYXZlOiAsIE5lZWQ6IBBhEAA8AAAATGEQAAgAAABzb3VyY2UgbXVzdCBoYXZlIGF0IGxlYXN0ICBieXRlcyB0byBwYXJzZSBoZWFkZXI7IGdvdCAAAGRhEAAaAAAAfmEQABwAAAA2VhAABgAAAEFjY2xvZyBtdXN0IGJlIGF0IGxlYXN0IDFGb3VuZCBGU0UgYWNjX2xvZzogIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bSBpbiB0aGlzIGNhc2U6IADNYRAAEwAAAOBhEAArAAAAVGhlIGNvdW50ZXIgKCkgZXhjZWVkZWQgdGhlIGV4cGVjdGVkIHN1bTogLiBUaGlzIG1lYW5zIGFuIGVycm9yIG9yIGNvcnJ1cHRlZCBkYXRhIAogHGIQAA0AAAApYhAAHQAAAEZiEAAqAAAAVGhlcmUgYXJlIHRvbyBtYW55IHN5bWJvbHMgaW4gdGhpcyBkaXN0cmlidXRpb246IC4gTWF4OiAyNTYAiGIQADEAAAC5YhAACgAAAFRyaWVkIHRvIHVzZSBhbiB1bmluaXRpYWxpemVkIHRhYmxlIVNvdXJjZSBuZWVkcyB0byBoYXZlIGF0IGxlYXN0IG9uZSBieXRlSGVhZGVyIHNheXMgdGhlcmUgc2hvdWxkIGJlICBieXRlcyBmb3IgdGhlIHdlaWdodHMgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBpbiB0aGUgc3RyZWFtHmMQABwAAAA6YxAAKgAAAGRjEAAUAAAATW9yZSB0aGFuIDI1NSB3ZWlnaHRzIGRlY29kZWQgKGdvdCAgd2VpZ2h0cykuIFN0cmVhbSBpcyBwcm9iYWJseSBjb3JydXB0ZWQAAJBjEAAjAAAAs2MQACcAAABDYW4ndCBidWlsZCBodWZmbWFuIHRhYmxlIHdpdGhvdXQgYW55IHdlaWdodHNMZWZ0b3ZlciBtdXN0IGJlIHBvd2VyIG9mIHR3byBidXQgaXM6IAAZZBAAJgAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gc3RyZWFtIHRvIGRlY29tcHJlc3Mgd2VpZ2h0cy4gSXM6IAAASGQQADYAAAAZVBAADQAAAEZTRSB0YWJsZSB1c2VkIG1vcmUgYnl0ZXM6ICB0aGFuIHdlcmUgbWVhbnQgdG8gYmUgdXNlZCBmb3IgdGhlIHdob2xlIHN0cmVhbSBvZiBodWZmbWFuIHdlaWdodHMgKCkAAACQZBAAGwAAAKtkEABFAAAA8GQQAAEAAABTb3VyY2UgbmVlZHMgdG8gaGF2ZSBhdCBsZWFzdCAgYnl0ZXMsIGdvdDogAAxlEAAeAAAAKmUQAA0AAAALQ2FudCBoYXZlIHdlaWdodDogIGJpZ2dlciB0aGFuIG1heF9udW1fYml0czogAABJZRAAEgAAAFtlEAAbAAAAbWF4X2JpdHMgZGVyaXZlZCBmcm9tIHdlaWdodHMgaXM6ICBzaG91bGQgYmUgbG93ZXIgdGhhbjogAAAAiGUQACIAAACqZRAAFwAAAENhbnQgc2VydmUgdGhpcyByZXF1ZXN0LiBUaGUgcmVhZGVyIGlzIGxpbWl0ZWQgdG8gIGJpdHMsIHJlcXVlc3RlZCAgYml0c9RlEAAyAAAABmYQABEAAAAXZhAABQAAAENhbid0IHJlYWQgIGJpdHMsIG9ubHkgaGF2ZSAgYml0cyBsZWZ0AAA0ZhAACwAAAD9mEAARAAAAUGYQAAoAAAAAAAAABAAAAAQAAADJAQAAAAAAAAQAAAAEAAAAygEAAFRvb01hbnlCaXRzbnVtX3JlcXVlc3RlZF9iaXRzbGltaXQAAAAAAAAEAAAABAAAAMsBAABOb3RFbm91Z2hSZW1haW5pbmdCaXRzcmVxdWVzdGVkcmVtYWluaW5nSW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnZ290AAAAAAAABAAAAAQAAADMAQAAV2luZG93VG9vQmlnV2luZG93VG9vU21hbGwAAAAAAAAEAAAABAAAAK4BAABGcmFtZURlc2NyaXB0b3JFcnJvckRpY3RJZFRvb1NtYWxsZXhwZWN0ZWRNaXNtYXRjaGVkRnJhbWVTaXplRnJhbWVTaXplSXNaZXJvSW52YWxpZEZyYW1lU2l6ZQAAAAAEAAAABAAAAM0BAABNYWdpY051bWJlclJlYWRFcnJvcgAAAAAEAAAABAAAAM4BAABCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvcgAAAAAABAAAAAQAAADPAQAAU2tpcEZyYW1lbWFnaWNfbnVtYmVybGVuZ3RoQmxvY2tDb250ZW50UmVhZEVycm9yTWFsZm9ybWVkU2VjdGlvbkhlYWRlcmV4cGVjdGVkX2xlbnJlbWFpbmluZ19ieXRlcwAAAAAAAAAEAAAABAAAALIBAABEZWNvbXByZXNzTGl0ZXJhbHNFcnJvcgAAAAAABAAAAAQAAACzAQAATGl0ZXJhbHNTZWN0aW9uUGFyc2VFcnJvcgAAAAAAAAAEAAAABAAAALQBAABTZXF1ZW5jZXNIZWFkZXJQYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAtQEAAERlY29kZVNlcXVlbmNlRXJyb3IAAAAAAAQAAAAEAAAAtgEAAEV4ZWN1dGVTZXF1ZW5jZXNFcnJvck5vdEVub3VnaEJ5dGVzSW5EaWN0aW9uYXJ5bmVlZE9mZnNldFRvb0JpZ29mZnNldGJ1Zl9sZW4AAAAABAAAAAQAAAC4AQAAQmFkTWFnaWNOdW0AAAAAAAQAAAAEAAAAuQEAAEZTRVRhYmxlRXJyb3IAAAAAAAAABAAAAAQAAAC6AQAASHVmZm1hblRhYmxlRXJyb3JNaXNzaW5nQ29tcHJlc3NlZFNpemVNaXNzaW5nTnVtU3RyZWFtcwAAAAAABAAAAAQAAADBAQAAR2V0Qml0c0Vycm9yAAAAAAQAAAAEAAAAwgEAAEh1ZmZtYW5EZWNvZGVyRXJyb3JVbmluaXRpYWxpemVkSHVmZm1hblRhYmxlTWlzc2luZ0J5dGVzRm9ySnVtcEhlYWRlck1pc3NpbmdCeXRlc0ZvckxpdGVyYWxzbmVlZGVkAAAAAAAABAAAAAQAAADQAQAARXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzAAAAAAQAAAAEAAAA0QEAAAAAAAAEAAAABAAAANIBAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAAAAAAAQAAAAEAAAAxQEAAERlY29kZWJ1ZmZlckVycm9yTm90RW5vdWdoQnl0ZXNGb3JTZXF1ZW5jZXdhbnRlZGhhdmVaZXJvT2Zmc2V0AAAAAAAABAAAAAQAAADGAQAARlNFRGVjb2RlckVycm9yVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZU5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzRXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlSWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzAAAAAAEAAAABAAAA0wEAAG5lZWRfYXRfbGVhc3RBY2NMb2dJc1plcm9BY2NMb2dUb29CaWdtYXgAAAAABAAAAAQAAADHAQAAUHJvYmFiaWxpdHlDb3VudGVyTWlzbWF0Y2hleHBlY3RlZF9zdW1zeW1ib2xfcHJvYmFiaWxpdGllc1Rvb01hbnlTeW1ib2xzVGFibGVJc1VuaW5pdGlhbGl6ZWRTb3VyY2VJc0VtcHR5Tm90RW5vdWdoQnl0ZXNGb3JXZWlnaHRzZ290X2J5dGVzZXhwZWN0ZWRfYnl0ZXNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c0ZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAABQbhAAbQAAACoCAAARAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyX3JldmVyc2UucnMAAADQbhAAcQAAADcAAABFAAAA0G4QAHEAAAA3AAAALwAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGXQbhAAcQAAAEYAAAANAAAA0G4QAHEAAABKAAAAHgAAAFRoaXMgaXMgYSBidWcgaW4gdGhlIHByb2dyYW0uIFRoZXJlIHNob3VsZCBvbmx5IGJlIHZhbHVlcyBiZXR3ZWVuIDAuLjMvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2Jsb2Nrcy9saXRlcmFsc19zZWN0aW9uLnJzAPJvEABtAAAAewAAADQAAADybxAAbQAAAJAAAABXAAAA8m8QAG0AAACXAAAAKgAAAPJvEABtAAAAmAAAACoAAADybxAAbQAAAJsAAAAaAAAA8m8QAG0AAACoAAAAGgAAAPJvEABtAAAAtAAAAEQAAADybxAAbQAAALgAAABGAAAA8m8QAG0AAADAAAAAKgAAAPJvEABtAAAAwQAAACsAAADybxAAbQAAAMUAAABIAAAA8m8QAG0AAADNAAAAKgAAAPJvEABtAAAAzgAAACsAAADybxAAbQAAANMAAAAuAAAA8m8QAG0AAADUAAAALgAAAENhbnQgcmV0dXJuIHRoaXMgbWFueSBiaXRzL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyLnJzAGpxEABpAAAANgAAAA0AAABqcRAAaQAAAE8AAAAjAAAAYXNzZXJ0aW9uIGZhaWxlZDogbiAtIGJpdF9zaGlmdCA9PSBiaXRzX2luX2xhc3RfYnl0ZV9uZWVkZWQAanEQAGkAAABtAAAADQAAAGpxEABpAAAAcQAAAB8AAABqcRAAaQAAAGgAAAAkAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pZHggJSA4ID09IDAAanEQAGkAAABkAAAADQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaWR4ID09IG9sZF9pZHggKyBuAAAAanEQAGkAAAB3AAAACQAAAFNlcV9zdW06ICBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZGlmZmVyZW5jZSBpbiBidWZmZXJzaXplOiAAANByEAAJAAAA2XIQADEAAAAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3NlcXVlbmNlX2V4ZWN1dGlvbi5ycwAAABxzEABxAAAALwAAAAUAAAAccxAAcQAAAAsAAAAkAAAAHHMQAHEAAAAVAAAANAAAAEFsbG9jYXRpbmcgbmV3IHNwYWNlIGZvciB0aGUgcmluZ2J1ZmZlciBmYWlsZWQvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3JpbmdidWZmZXIucnMA7nMQAGkAAABhAAAAIwAAAENvdWxkIG5vdCBjcmVhdGUgbGF5b3V0IGZvciB1OCBhcnJheSBvZiBzaXplIAAAAGh0EAAtAAAA7nMQAGkAAABaAAAAIQAAAO5zEABpAAAAtAAAABUAAADucxAAaQAAAL4AAAAVAAAA7nMQAGkAAAB3AQAAHQAAAO5zEABpAAAAzgEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwDwdBAAawAAAKIAAAAZAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9saXRlcmFsc19zZWN0aW9uX2RlY29kZXIucnMAbHUQAHcAAAAUAAAAIgAAAGx1EAB3AAAAGAAAAE0AAABsdRAAdwAAADQAAAAZAAAAbHUQAHcAAAByAAAAGAAAAGx1EAB3AAAAkQAAABQAAABhc3NlcnRpb24gZmFpbGVkOiBudW1fc3RyZWFtcyA9PSAxAABsdRAAdwAAAIAAAAAJAAAAbHUQAHcAAABFAAAAGQAAAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2Rpbmcvc2VxdWVuY2Vfc2VjdGlvbl9kZWNvZGVyLnJzAHh2EAB3AAAAGAAAAB0AAAB4dhAAdwAAAHUAAAAQAAAAeHYQAHcAAADAAAAAEAAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IElsbGVnYWwgbGl0ZXJhbCBsZW5ndGggY29kZSB3YXM6IAAgdxAASwAAAHh2EAB3AAAA+gAAAA4AAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBJbGxlZ2FsIG1hdGNoIGxlbmd0aCBjb2RlIHdhczogAAAAhHcQAEkAAAB4dhAAdwAAABoBAAAOAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAD/////////////////////AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA//////////////////////////8BAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA/////////////////////////////////////3h2EAB3AAAAdgEAABwAAAB4dhAAdwAAAFMBAAAcAAAAAQEBAQICAwMEBgcICQoLDA0ODxAQAAAAEgAAABQAAAAWAAAAGAAAABwAAAAgAAAAKAAAADAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAEBAQECAgMDBAQFBwgJCgsMDQ4PEAAAACMAAAAlAAAAJwAAACkAAAArAAAALwAAADMAAAA7AAAAQwAAAFMAAABjAAAAgwAAAAMBAAADAgAAAwQAAAMIAAADEAAAAyAAAANAAAADgAAAAwABAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3R3b3gtaGFzaC0yLjEuMC9zcmMveHhoYXNoNjQucnMAAACwehAAYQAAAFQAAAAfAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9kZWNvZGVidWZmZXIucnMAJHsQAGsAAAAaAAAAHgAAACR7EABrAAAAnQAAADQAAAAkexAAawAAAOoAAAAeAAAAUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVyZAAAAAAAAAAEAAAABAAAAMoBAAAAAAAABAAAAAQAAADQAQAAYXNzZXJ0aW9uIGZhaWxlZDogeCA+IDAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2h1ZmYwL2h1ZmYwX2RlY29kZXIucnMTfBAAaQAAADEAAAAFAAAAE3wQAGkAAAA+AAAAGgAAABN8EABpAAAAUAAAACkAAAATfBAAaQAAAGgAAAAWAAAAE3wQAGkAAABqAAAAEwAAABN8EABpAAAAawAAABgAAAATfBAAaQAAAGwAAAAbAAAAE3wQAGkAAAAdAQAANgAAABN8EABpAAAAHQEAACUAAAATfBAAaQAAAB8BAAA2AAAAE3wQAGkAAAAfAQAAJQAAABN8EABpAAAA6AAAACIAAAATfBAAaQAAAPIAAAAiAAAAE3wQAGkAAAD3AAAAJgAAABN8EABpAAAA7QAAACYAAAATfBAAaQAAAFcBAAASAAAAE3wQAGkAAABfAQAAGAAAABN8EABpAAAAZQEAABUAAAATfBAAaQAAAG8BAAAbAAAAE3wQAGkAAABxAQAAGgAAABN8EABpAAAAeAEAAB4AAAByYW5rX2lkeFswXTogIHNob3VsZCBiZTogAAAAzH0QAA0AAADZfRAADAAAABN8EABpAAAAdwEAAAkAAAATfBAAaQAAAH8BAAAsAAAAE3wQAGkAAACEAQAAMQAAABN8EABpAAAAiAEAACAAAAATfBAAaQAAAIkBAAAgAAAAE3wQAGkAAABzAQAARQAAABN8EABpAAAAdAEAACEAAAATfBAAaQAAAHMBAAAeAAAAE3wQAGkAAABhAQAAGwAAABN8EABpAAAATwEAACcAAAATfBAAaQAAAFQBAAAWAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAqH4QAGsAAACiAAAAGQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzACR/EABrAAAAogAAABkAAABhc3NlcnRpb24gZmFpbGVkOiB4ID4gMC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZnNlL2ZzZV9kZWNvZGVyLnJzt38QAGUAAAA9AAAABQAAALd/EABlAAAAWgAAACcAAAC3fxAAZQAAAGUAAAAnAAAAt38QAGUAAABwAAAAIwAAALd/EABlAAAAcQAAAB0AAAC3fxAAZQAAAOIAAAApAAAAt38QAGUAAADkAAAAMQAAALd/EABlAAAA5gAAADMAAABhc3NlcnRpb24gZmFpbGVkOiBuYiA8PSBzZWxmLmFjY3VyYWN5X2xvZwAAALd/EABlAAAA6wAAAA0AAAC3fxAAZQAAANIAAAAtAAAAt38QAGUAAADAAAAALQAAALd/EABlAAAAOQEAAEEAAAC3fxAAZQAAAB4BAAAnAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHJvYiA9PSAtMbd/EABlAAAAJAEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy92ZWMvbW9kLnJzAAAARIEQAG0AAAA9CgAAJAAAAAAAAAAQAAAABAAAANQBAADVAQAA1gEAACAgICA6IAAAAQAAAAAAAADggRAAAgAAACAgICAgICAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL3B0ci9tb2QucnMA+4EQAGwAAAALAgAAAQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvc2xpY2UvaW5kZXgucnN4ghAAcAAAAEwDAAA0AAAAeIIQAHAAAABTAwAAMgAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuKS9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAAMoMQAGwAAAD7BwAAHQAAADKDEABsAAAAAwgAAB0AAAAygxAAbAAAAI0FAAAbAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5ycwAAANCDEABtAAAAKgIAABEAAADXAQAADAAAAAQAAADYAQAA2QEAANoBAADdAQAADAAAAAQAAADeAQAA3wEAANoBAEGIicIAC4UJAQAAAOABAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAMeEEABsAAAA3woAAA4AAABFcnJvcgAAAMeEEABsAAAAjQUAABsAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbinHhBAAbAAAAMAFAAANAAAAAAAAABAAAAAEAAAA1AEAANUBAADWAQAAYmFja3RyYWNlIGNhcHR1cmUgZmFpbGVkL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYW55aG93LTEuMC45OC9zcmMvZXJyb3IucnPMhRAAXAAAAGcEAAAOAAAAAQAAAAAAAAA6IAAAQIYQAAIAAAAKCkNhdXNlZCBieToKCgpzdGFjayBiYWNrdHJhY2U6U3RhY2sgYmFja3RyYWNlOgprhhAAEQAAAFMvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAACFhhAAeQAAALMHAAAJAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy43Ny9zcmMvbGliLnJzAAAQhxAAWgAAAPsYAAABAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMDAvc3JjL2NvbnZlcnQvc2xpY2VzLnJzfIcQAGwAAAAkAQAADgAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkSnNWYWx1ZSgpACqIEAAIAAAAMogQAAEAAABMYXp5IGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWQAAESIEAAqAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvb25jZV9jZWxsLTEuMjEuMy9zcmMvbGliLnJzAAAAeIgQAF0AAAAIAwAAGQAAAHJlZW50cmFudCBpbml0AADoiBAADgAAAHiIEABdAAAAegIAAA0AQZiSwgALlSMEAAAABAAAAPYBAAAvcnVzdGMvMDVmOTg0NmY4OTNiMDlhMWJlMWZjODU2MGUzM2ZjM2M4MTVjZmVjYi9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAAJIkQAEoAAACiAAAAGQAAAC9ydXN0Yy8wNWY5ODQ2Zjg5M2IwOWExYmUxZmM4NTYwZTMzZmMzYzgxNWNmZWNiL2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwCAiRAASwAAAI0FAAAbAAAAL3J1c3RjLzA1Zjk4NDZmODkzYjA5YTFiZTFmYzg1NjBlMzNmYzNjODE1Y2ZlY2IvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc9yJEABMAAAAKgIAABEAAAA6AAAA9wEAAAwAAAAEAAAA+AEAAPkBAAD6AQAAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuNy9zcmMvZGxtYWxsb2MucnNhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAFSKEAApAAAAqAQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAABUihAAKQAAAK4EAAANAAAAQWNjZXNzRXJyb3JjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uOiAAB4sQAEgAAABsaWJyYXJ5L3N0ZC9zcmMvYmFja3RyYWNlLnJzb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybXSLEAAoAAAAJAAAAAIAAACcixAAdW5zdXBwb3J0ZWQgYmFja3RyYWNlZGlzYWJsZWQgYmFja3RyYWNlAFiLEAAcAAAAigEAAB0AAAD7AQAAEAAAAAQAAAD8AQAA/QEAAAEAAAAAAAAAZW50aXR5IG5vdCBmb3VuZHBlcm1pc3Npb24gZGVuaWVkY29ubmVjdGlvbiByZWZ1c2VkY29ubmVjdGlvbiByZXNldGhvc3QgdW5yZWFjaGFibGVuZXR3b3JrIHVucmVhY2hhYmxlY29ubmVjdGlvbiBhYm9ydGVkbm90IGNvbm5lY3RlZGFkZHJlc3MgaW4gdXNlYWRkcmVzcyBub3QgYXZhaWxhYmxlbmV0d29yayBkb3duYnJva2VuIHBpcGVlbnRpdHkgYWxyZWFkeSBleGlzdHNvcGVyYXRpb24gd291bGQgYmxvY2tub3QgYSBkaXJlY3RvcnlpcyBhIGRpcmVjdG9yeWRpcmVjdG9yeSBub3QgZW1wdHlyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWZpbGVzeXN0ZW0gbG9vcCBvciBpbmRpcmVjdGlvbiBsaW1pdCAoZS5nLiBzeW1saW5rIGxvb3Apc3RhbGUgbmV0d29yayBmaWxlIGhhbmRsZWludmFsaWQgaW5wdXQgcGFyYW1ldGVyaW52YWxpZCBkYXRhdGltZWQgb3V0d3JpdGUgemVyb25vIHN0b3JhZ2Ugc3BhY2VzZWVrIG9uIHVuc2Vla2FibGUgZmlsZXF1b3RhIGV4Y2VlZGVkZmlsZSB0b28gbGFyZ2VyZXNvdXJjZSBidXN5ZXhlY3V0YWJsZSBmaWxlIGJ1c3lkZWFkbG9ja2Nyb3NzLWRldmljZSBsaW5rIG9yIHJlbmFtZXRvbyBtYW55IGxpbmtzaW52YWxpZCBmaWxlbmFtZWFyZ3VtZW50IGxpc3QgdG9vIGxvbmdvcGVyYXRpb24gaW50ZXJydXB0ZWR1bnN1cHBvcnRlZHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVvdXQgb2YgbWVtb3J5aW4gcHJvZ3Jlc3NvdGhlciBlcnJvcnVuY2F0ZWdvcml6ZWQgZXJyb3JPcwAAAAAABAAAAAQAAAD+AQAAY29kZQAAAAABAAAAAQAAAP8BAABraW5k9wEAAAwAAAAEAAAAAAIAAG1lc3NhZ2VLaW5kRXJyb3IAAAAACAAAAAQAAAABAgAAAAAAAAQAAAAEAAAAAgIAAEN1c3RvbWVycm9yIChvcyBlcnJvciApAAEAAAAAAAAAZ48QAAsAAAByjxAAAQAAADogY2Fubm90IHJlY3Vyc2l2ZWx5IGFjcXVpcmUgbXV0ZXgAAI6PEAAgAAAAbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnO4jxAALAAAABMAAAAJAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvcG9pc29uL29uY2UucnMA9I8QACMAAACbAAAAMgAAAGxpYnJhcnkvc3RkL3NyYy9zeW5jL2xhenlfbG9jay5ycwAAACiQEAAhAAAA0QAAABMAAAA8dW5rbm93bj7vv71tZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAABokBAAFQAAAH2QEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJznJAQABgAAABjAQAACQAAAAoAAAD3AQAADAAAAAQAAAADAgAAAAAAAAgAAAAEAAAABAIAAAAAAAAIAAAABAAAAAUCAAAGAgAABwIAAAgCAAAJAgAAEAAAAAQAAAAKAgAACwIAAAwCAAANAgAAbGlicmFyeS9zdGQvc3JjLy4uLy4uL2JhY2t0cmFjZS9zcmMvc3ltYm9saXplL21vZC5ycyCREAA0AAAAZwEAADAAAAABAAAAAAAAAIyPEAACAAAAIC0gAAEAAAAAAAAAdJEQAAMAAAAgICAgICAgICAgICAgICAgICAgYXQgAAA4ihAAAQAAAE5vdEZvdW5kUGVybWlzc2lvbkRlbmllZENvbm5lY3Rpb25SZWZ1c2VkQ29ubmVjdGlvblJlc2V0SG9zdFVucmVhY2hhYmxlTmV0d29ya1VucmVhY2hhYmxlQ29ubmVjdGlvbkFib3J0ZWROb3RDb25uZWN0ZWRBZGRySW5Vc2VBZGRyTm90QXZhaWxhYmxlTmV0d29ya0Rvd25Ccm9rZW5QaXBlQWxyZWFkeUV4aXN0c1dvdWxkQmxvY2tOb3RBRGlyZWN0b3J5SXNBRGlyZWN0b3J5RGlyZWN0b3J5Tm90RW1wdHlSZWFkT25seUZpbGVzeXN0ZW1GaWxlc3lzdGVtTG9vcFN0YWxlTmV0d29ya0ZpbGVIYW5kbGVJbnZhbGlkSW5wdXRJbnZhbGlkRGF0YVRpbWVkT3V0V3JpdGVaZXJvU3RvcmFnZUZ1bGxOb3RTZWVrYWJsZVF1b3RhRXhjZWVkZWRGaWxlVG9vTGFyZ2VSZXNvdXJjZUJ1c3lFeGVjdXRhYmxlRmlsZUJ1c3lEZWFkbG9ja0Nyb3NzZXNEZXZpY2VzVG9vTWFueUxpbmtzSW52YWxpZEZpbGVuYW1lQXJndW1lbnRMaXN0VG9vTG9uZ0ludGVycnVwdGVkVW5zdXBwb3J0ZWRVbmV4cGVjdGVkRW9mT3V0T2ZNZW1vcnlJblByb2dyZXNzT3RoZXJVbmNhdGVnb3JpemVkb3BlcmF0aW9uIHN1Y2Nlc3NmdWxPbmNlIGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWTakxAAKgAAAG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgcGVyZm9ybWVkIHJlY3Vyc2l2ZWx5DJQQADgAAAAQAAAAEQAA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", typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("forge.cjs.js", document.baseURI).href); + } + const imports = __wbg_get_imports(); + if (typeof module_or_path === "string" || typeof Request === "function" && module_or_path instanceof Request || typeof URL === "function" && module_or_path instanceof URL) { + module_or_path = fetch(module_or_path); + } + const { instance, module: module2 } = await __wbg_load(await module_or_path, imports); + return __wbg_finalize_init(instance, module2); +} +const LN_SCALE_MIN = -9; +const LN_SCALE_MAX = 9; +const LN_RESCALE = (LN_SCALE_MAX - LN_SCALE_MIN) / 254; +const SPLAT_TEX_WIDTH_BITS = 11; +const SPLAT_TEX_HEIGHT_BITS = 11; +const SPLAT_TEX_WIDTH = 1 << SPLAT_TEX_WIDTH_BITS; +const SPLAT_TEX_HEIGHT = 1 << SPLAT_TEX_HEIGHT_BITS; +const SPLAT_TEX_MIN_HEIGHT = 1; +function isBoolType(type) { + return type === "bool" || type === "bvec2" || type === "bvec3" || type === "bvec4"; +} +function isScalarType(type) { + return type === "int" || type === "uint" || type === "float"; +} +function isIntType(type) { + return type === "int" || type === "ivec2" || type === "ivec3" || type === "ivec4"; +} +function isUintType(type) { + return type === "uint" || type === "uvec2" || type === "uvec3" || type === "uvec4"; +} +function isFloatType(type) { + return type === "float" || type === "vec2" || type === "vec3" || type === "vec4"; +} +function isMatFloatType(type) { + return type === "mat2" || type === "mat2x2" || type === "mat2x3" || type === "mat2x4" || type === "mat3" || type === "mat3x2" || type === "mat3x3" || type === "mat3x4" || type === "mat4" || type === "mat4x2" || type === "mat4x3" || type === "mat4x4"; +} +function isAllFloatType(type) { + return isFloatType(type) || isMatFloatType(type); +} +function isVector2Type(type) { + return type === "vec2" || type === "ivec2" || type === "uvec2"; +} +function isVector3Type(type) { + return type === "vec3" || type === "ivec3" || type === "uvec3"; +} +function isVector4Type(type) { + return type === "vec4" || type === "ivec4" || type === "uvec4"; +} +function isVectorType(type) { + return isVector2Type(type) || isVector3Type(type) || isVector4Type(type); +} +function isMat2(type) { + return type === "mat2" || type === "mat2x2"; +} +function isMat3(type) { + return type === "mat3" || type === "mat3x3"; +} +function isMat4(type) { + return type === "mat4" || type === "mat4x4"; +} +function vectorElementType(type) { + switch (type) { + case "vec2": + return "float"; + case "vec3": + return "float"; + case "vec4": + return "float"; + case "ivec2": + return "int"; + case "ivec3": + return "int"; + case "ivec4": + return "int"; + case "uvec2": + return "uint"; + case "uvec3": + return "uint"; + case "uvec4": + return "uint"; + default: + throw new Error(`Invalid vector type: ${type}`); + } +} +function vectorDim(type) { + switch (type) { + case "vec2": + case "ivec2": + case "uvec2": + return 2; + case "vec3": + case "ivec3": + case "uvec3": + return 3; + case "vec4": + case "ivec4": + case "uvec4": + return 4; + default: + throw new Error(`Invalid vector type: ${type}`); + } +} +function sameSizeVec(type) { + if (isScalarType(type)) { + return "float"; + } + if (isVector2Type(type)) { + return "vec2"; + } + if (isVector3Type(type)) { + return "vec3"; + } + if (isVector4Type(type)) { + return "vec4"; + } + throw new Error(`Invalid vector type: ${type}`); +} +function sameSizeUvec(type) { + if (isScalarType(type)) { + return "uint"; + } + if (isVector2Type(type)) { + return "uvec2"; + } + if (isVector3Type(type)) { + return "uvec3"; + } + if (isVector4Type(type)) { + return "uvec4"; + } + throw new Error(`Invalid vector type: ${type}`); +} +function sameSizeIvec(type) { + if (isScalarType(type)) { + return "int"; + } + if (isVector2Type(type)) { + return "ivec2"; + } + if (isVector3Type(type)) { + return "ivec3"; + } + if (isVector4Type(type)) { + return "ivec4"; + } + throw new Error(`Invalid vector type: ${type}`); +} +function typeLiteral(type) { + if (typeof type === "string") { + return type; + } + if (typeof type === "object" && type.type) { + return type.type; + } + throw new Error(`Invalid DynoType: ${String(type)}`); +} +function numberAsInt(value) { + return Math.trunc(value).toString(); +} +function numberAsUint(value) { + const v = Math.max(0, Math.trunc(value)); + return `${v.toString()}u`; +} +function numberAsFloat(value) { + return value === Number.POSITIVE_INFINITY ? "INFINITY" : value === Number.NEGATIVE_INFINITY ? "-INFINITY" : Number.isInteger(value) ? value.toFixed(1) : value.toString(); +} +function valType(val) { + if (val instanceof DynoValue) { + return val.type; + } + const value = val.dynoOut(); + return value.type; +} +class DynoValue { + constructor(type) { + this.__isDynoValue = true; + this.type = type; + } +} +class DynoOutput extends DynoValue { + constructor(dyno2, key) { + super(dyno2.outTypes[key]); + this.dyno = dyno2; + this.key = key; + } +} +class DynoLiteral extends DynoValue { + constructor(type, literal) { + super(type); + this.literal = literal; + } + getLiteral() { + return this.literal; + } +} +function dynoLiteral(type, literal) { + return new DynoLiteral(type, literal); +} +class DynoConst extends DynoLiteral { + constructor(type, value) { + super(type, ""); + this.value = value; + } + getLiteral() { + const { type, value } = this; + switch (type) { + case "bool": + return value ? "true" : "false"; + case "uint": + return numberAsUint(value); + case "int": + return numberAsInt(value); + case "float": + return numberAsFloat(value); + case "bvec2": { + const v = value; + return `bvec2(${v[0]}, ${v[1]})`; + } + case "uvec2": { + if (value instanceof THREE__namespace.Vector2) { + return `uvec2(${numberAsUint(value.x)}, ${numberAsUint(value.y)})`; + } + const v = value; + return `uvec2(${numberAsUint(v[0])}, ${numberAsUint(v[1])})`; + } + case "ivec2": { + if (value instanceof THREE__namespace.Vector2) { + return `ivec2(${numberAsInt(value.x)}, ${numberAsInt(value.y)})`; + } + const v = value; + return `ivec2(${numberAsInt(v[0])}, ${numberAsInt(v[1])})`; + } + case "vec2": { + if (value instanceof THREE__namespace.Vector2) { + return `vec2(${numberAsFloat(value.x)}, ${numberAsFloat(value.y)})`; + } + const v = value; + return `vec2(${numberAsFloat(v[0])}, ${numberAsFloat(v[1])})`; + } + case "bvec3": { + const v = value; + return `bvec3(${v[0]}, ${v[1]}, ${v[2]})`; + } + case "uvec3": { + if (value instanceof THREE__namespace.Vector3) { + return `uvec3(${numberAsUint(value.x)}, ${numberAsUint(value.y)}, ${numberAsUint(value.z)})`; + } + const v = value; + return `uvec3(${numberAsUint(v[0])}, ${numberAsUint(v[1])}, ${numberAsUint(v[2])})`; + } + case "ivec3": { + if (value instanceof THREE__namespace.Vector3) { + return `ivec3(${numberAsInt(value.x)}, ${numberAsInt(value.y)}, ${numberAsInt(value.z)})`; + } + const v = value; + return `ivec3(${numberAsInt(v[0])}, ${numberAsInt(v[1])}, ${numberAsInt(v[2])})`; + } + case "vec3": { + if (value instanceof THREE__namespace.Vector3) { + return `vec3(${numberAsFloat(value.x)}, ${numberAsFloat(value.y)}, ${numberAsFloat(value.z)})`; + } + const v = value; + return `vec3(${numberAsFloat(v[0])}, ${numberAsFloat(v[1])}, ${numberAsFloat(v[2])})`; + } + case "bvec4": { + const v = value; + return `bvec4(${v[0]}, ${v[1]}, ${v[2]}, ${v[3]})`; + } + case "uvec4": { + if (value instanceof THREE__namespace.Vector4) { + return `uvec4(${numberAsUint(value.x)}, ${numberAsUint(value.y)}, ${numberAsUint(value.z)}, ${numberAsUint(value.w)})`; + } + const v = value; + return `uvec4(${numberAsUint(v[0])}, ${numberAsUint(v[1])}, ${numberAsUint(v[2])}, ${numberAsUint(v[3])})`; + } + case "ivec4": { + if (value instanceof THREE__namespace.Vector4) { + return `ivec4(${numberAsInt(value.x)}, ${numberAsInt(value.y)}, ${numberAsInt(value.z)}, ${numberAsInt(value.w)})`; + } + const v = value; + return `ivec4(${numberAsInt(v[0])}, ${numberAsInt(v[1])}, ${numberAsInt(v[2])}, ${numberAsInt(v[3])})`; + } + case "vec4": { + if (value instanceof THREE__namespace.Vector4) { + return `vec4(${numberAsFloat(value.x)}, ${numberAsFloat(value.y)}, ${numberAsFloat(value.z)}, ${numberAsFloat(value.w)})`; + } + if (value instanceof THREE__namespace.Quaternion) { + return `vec4(${numberAsFloat(value.x)}, ${numberAsFloat(value.y)}, ${numberAsFloat(value.z)}, ${numberAsFloat(value.w)})`; + } + const v = value; + return `vec4(${numberAsFloat(v[0])}, ${numberAsFloat(v[1])}, ${numberAsFloat(v[2])}, ${numberAsFloat(v[3])})`; + } + case "mat2": + case "mat2x2": { + const m = value; + const e = m instanceof THREE__namespace.Matrix2 ? m.elements : value; + const arg = new Array(4).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat2x3": { + const e = value; + const arg = new Array(6).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat2x4": { + const e = value; + const arg = new Array(8).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat3": + case "mat3x3": { + const m = value; + const e = m instanceof THREE__namespace.Matrix3 ? m.elements : value; + const arg = new Array(9).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat3x2": { + const e = value; + const arg = new Array(6).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat3x4": { + const e = value; + const arg = new Array(12).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat4": + case "mat4x4": { + const m = value; + const e = m instanceof THREE__namespace.Matrix4 ? m.elements : value; + const arg = new Array(16).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat4x2": { + const e = value; + const arg = new Array(8).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat4x3": { + const e = value; + const arg = new Array(12).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + default: + throw new Error(`Type not implemented: ${String(type)}`); + } + } +} +function dynoConst(type, value) { + return new DynoConst(type, value); +} +function literalZero(type) { + const typeString = String(type); + if (isBoolType(type)) { + return `${typeString}(false)`; + } + if (isAllFloatType(type)) { + return `${typeString}(0.0)`; + } + if (isIntType(type)) { + return `${typeString}(0)`; + } + if (isUintType(type)) { + return `${typeString}(0u)`; + } + throw new Error(`Type not implemented: ${typeString}`); +} +function literalOne(type) { + const typeString = String(type); + if (isBoolType(type)) { + return `${typeString}(true)`; + } + if (isAllFloatType(type)) { + return `${typeString}(1.0)`; + } + if (isIntType(type)) { + return `${typeString}(1)`; + } + if (isUintType(type)) { + return `${typeString}(1u)`; + } + throw new Error(`Type not implemented: ${typeString}`); +} +function literalNegOne(type) { + const typeString = String(type); + if (isBoolType(type)) { + return `${typeString}(true)`; + } + if (isAllFloatType(type)) { + return `${typeString}(-1.0)`; + } + if (isIntType(type)) { + return `${typeString}(-1)`; + } + if (isUintType(type)) { + return `${typeString}(0xFFFFFFFFu)`; + } + throw new Error(`Type not implemented: ${typeString}`); +} +const DEFAULT_INDENT = " "; +class Compilation { + constructor({ indent } = {}) { + this.globals = /* @__PURE__ */ new Set(); + this.statements = []; + this.uniforms = {}; + this.declares = /* @__PURE__ */ new Set(); + this.updaters = []; + this.sequence = 0; + this.indent = DEFAULT_INDENT; + this.indent = indent ?? DEFAULT_INDENT; + } + nextSequence() { + return this.sequence++; + } +} +class Dyno { + constructor({ + inTypes, + outTypes, + inputs, + update, + globals, + statements, + generate + }) { + this.inTypes = inTypes ?? {}; + this.outTypes = outTypes ?? {}; + this.inputs = inputs ?? {}; + this.update = update; + this.globals = globals; + this.statements = statements; + this.generate = generate ?? (({ inputs: inputs2, outputs, compile }) => { + var _a2, _b2; + return { + globals: (_a2 = this.globals) == null ? void 0 : _a2.call(this, { inputs: inputs2, outputs, compile }), + statements: (_b2 = this.statements) == null ? void 0 : _b2.call(this, { inputs: inputs2, outputs, compile }) + }; + }); + } + get outputs() { + const outputs = {}; + for (const key in this.outTypes) { + outputs[key] = new DynoOutput(this, key); + } + return outputs; + } + apply(inputs) { + Object.assign(this.inputs, inputs); + return this.outputs; + } + compile({ + inputs, + outputs, + compile + }) { + const result = [ + `// ${this.constructor.name}(${Object.values(inputs).join(", ")}) => (${Object.values(outputs).join(", ")})` + ]; + const declares = []; + for (const key in outputs) { + const name = outputs[key]; + if (name && !compile.declares.has(name)) { + compile.declares.add(name); + declares.push(key); + } + } + const { globals, statements, uniforms } = this.generate({ + inputs, + outputs, + compile + }); + for (const global of globals ?? []) { + compile.globals.add(global); + } + for (const key in uniforms) { + compile.uniforms[key] = uniforms[key]; + } + if (this.update) { + compile.updaters.push(this.update); + } + for (const key of declares) { + const name = outputs[key]; + if (name) { + if (!compile.uniforms[name]) { + result.push(`${dynoDeclare(name, this.outTypes[key])};`); + } + } + } + if (statements == null ? void 0 : statements.length) { + result.push("{"); + result.push(...statements.map((line) => compile.indent + line)); + result.push("}"); + } + return result; + } +} +class DynoBlock extends Dyno { + constructor({ + inTypes, + outTypes, + inputs, + update, + globals, + construct + }) { + super({ + inTypes, + outTypes, + inputs, + update, + globals, + generate: (args) => this.generateBlock(args) + }); + this.construct = construct; + } + generateBlock({ + inputs, + outputs, + compile + }) { + var _a2, _b2; + const blockInputs = {}; + const blockOutputs = {}; + for (const key in inputs) { + if (inputs[key] != null) { + blockInputs[key] = new DynoLiteral(this.inTypes[key], inputs[key]); + } + } + for (const key in outputs) { + if (outputs[key] != null) { + blockOutputs[key] = new DynoValue(this.outTypes[key]); + } + } + const options = { roots: [] }; + const returned = this.construct(blockInputs, blockOutputs, options); + for (const global of ((_a2 = this.globals) == null ? void 0 : _a2.call(this, { inputs, outputs, compile })) ?? []) { + compile.globals.add(global); + } + const ordering = []; + const nodeOuts = /* @__PURE__ */ new Map(); + function visit(node, outKey, outName) { + let outs = nodeOuts.get(node); + if (!outs) { + outs = { + sequence: compile.nextSequence(), + outNames: /* @__PURE__ */ new Map(), + newOuts: /* @__PURE__ */ new Set() + }; + nodeOuts.set(node, outs); + for (const key in node.inputs) { + let input = node.inputs[key]; + while (input) { + if (input instanceof DynoValue) { + if (input instanceof DynoOutput) { + visit(input.dyno, input.key); + } + break; + } + input = input.dynoOut(); + } + } + ordering.push(node); + } + if (outKey) { + if (!outName) { + outs.newOuts.add(outKey); + } + outs.outNames.set(outKey, outName ?? `${outKey}_${outs.sequence}`); + } + } + for (const root of options.roots) { + visit(root); + } + for (const key in blockOutputs) { + let value = (returned == null ? void 0 : returned[key]) ?? blockOutputs[key]; + while (value) { + if (value instanceof DynoValue) { + if (value instanceof DynoOutput) { + visit(value.dyno, value.key, outputs[key]); + } + break; + } + value = value.dynoOut(); + } + blockOutputs[key] = value; + } + const steps = []; + for (const dyno2 of ordering) { + const inputs2 = {}; + const outputs2 = {}; + for (const key in dyno2.inputs) { + let value = dyno2.inputs[key]; + while (value) { + if (value instanceof DynoValue) { + if (value instanceof DynoLiteral) { + inputs2[key] = value.getLiteral(); + } else if (value instanceof DynoOutput) { + const source = (_b2 = nodeOuts.get(value.dyno)) == null ? void 0 : _b2.outNames.get(value.key); + if (!source) { + throw new Error( + `Source not found for ${value.dyno.constructor.name}.${value.key}` + ); + } + inputs2[key] = source; + } + break; + } + value = value.dynoOut(); + } + } + const outs = nodeOuts.get(dyno2) ?? { outNames: /* @__PURE__ */ new Map() }; + for (const [key, name] of outs.outNames.entries()) { + outputs2[key] = name; + } + const newSteps = dyno2.compile({ inputs: inputs2, outputs: outputs2, compile }); + steps.push(newSteps); + } + const literalOutputs = []; + for (const key in outputs) { + if (blockOutputs[key] instanceof DynoLiteral) { + literalOutputs.push( + `${outputs[key]} = ${blockOutputs[key].getLiteral()};` + ); + } + } + if (literalOutputs.length > 0) { + steps.push(literalOutputs); + } + const statements = steps.flatMap((step2, index) => { + return index === 0 ? step2 : ["", ...step2]; + }); + return { statements }; + } +} +function dynoBlock(inTypes, outTypes, construct, { update, globals } = {}) { + return new DynoBlock({ inTypes, outTypes, construct, update, globals }); +} +function dyno$1({ + inTypes, + outTypes, + inputs, + update, + globals, + statements, + generate +}) { + return new Dyno({ + inTypes, + outTypes, + inputs, + update, + globals, + statements, + generate + }); +} +function dynoDeclare(name, type, count) { + const typeStr = typeof type === "string" ? type : type.type; + if (!typeStr) { + throw new Error(`Invalid DynoType: ${String(type)}`); + } + return `${typeStr} ${name}${count != null ? `[${count}]` : ""}`; +} +function unindentLines(s) { + var _a2; + let seenNonEmpty = false; + const lines = s.split("\n").map((line) => { + const trimmedLine = line.trimEnd(); + if (seenNonEmpty) { + return trimmedLine; + } + if (trimmedLine.length > 0) { + seenNonEmpty = true; + return trimmedLine; + } + return null; + }).filter((line) => line != null); + while (lines.length > 0 && lines[lines.length - 1].length === 0) { + lines.pop(); + } + if (lines.length === 0) { + return []; + } + const indent = (_a2 = lines[0].match(/^\s*/)) == null ? void 0 : _a2[0]; + if (!indent) { + return lines; + } + const regex = new RegExp(`^${indent}`); + return lines.map((line) => line.replace(regex, "")); +} +function unindent(s) { + return unindentLines(s).join("\n"); +} +class UnaryOp extends Dyno { + constructor({ + a, + outKey, + outTypeFunc + }) { + const inTypes = { a: valType(a) }; + const outType = outTypeFunc(valType(a)); + const outTypes = { [outKey]: outType }; + super({ inTypes, outTypes, inputs: { a } }); + this.outKey = outKey; + } + dynoOut() { + return new DynoOutput(this, this.outKey); + } +} +class BinaryOp extends Dyno { + constructor({ + a, + b, + outKey, + outTypeFunc + }) { + const inTypes = { a: valType(a), b: valType(b) }; + const outType = outTypeFunc(valType(a), valType(b)); + const outTypes = { [outKey]: outType }; + super({ inTypes, outTypes, inputs: { a, b } }); + this.outKey = outKey; + } + dynoOut() { + return new DynoOutput(this, this.outKey); + } +} +class TrinaryOp extends Dyno { + constructor({ + a, + b, + c, + outKey, + outTypeFunc + }) { + const inTypes = { a: valType(a), b: valType(b), c: valType(c) }; + const outType = outTypeFunc(valType(a), valType(b), valType(c)); + const outTypes = { [outKey]: outType }; + super({ inTypes, outTypes, inputs: { a, b, c } }); + this.outKey = outKey; + } + dynoOut() { + return new DynoOutput(this, this.outKey); + } +} +const Gsplat = { type: "Gsplat" }; +const TPackedSplats = { type: "PackedSplats" }; +const numPackedSplats = (packedSplats) => new NumPackedSplats({ packedSplats }); +const readPackedSplat = (packedSplats, index) => new ReadPackedSplat({ packedSplats, index }); +const readPackedSplatRange = (packedSplats, index, base, count) => new ReadPackedSplatRange({ packedSplats, index, base, count }); +const splitGsplat = (gsplat) => new SplitGsplat({ gsplat }); +const combineGsplat = ({ + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b +}) => { + return new CombineGsplat({ + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b + }); +}; +const gsplatNormal = (gsplat) => new GsplatNormal({ gsplat }); +const transformGsplat = (gsplat, { + scale, + rotate, + translate, + recolor +}) => { + return new TransformGsplat({ gsplat, scale, rotate, translate, recolor }); +}; +const defineGsplat = unindent(` + struct Gsplat { + vec3 center; + uint flags; + vec3 scales; + int index; + vec4 quaternion; + vec4 rgba; + }; + const uint GSPLAT_FLAG_ACTIVE = 1u << 0u; + + bool isGsplatActive(uint flags) { + return (flags & GSPLAT_FLAG_ACTIVE) != 0u; + } +`); +const definePackedSplats = unindent(` + struct PackedSplats { + usampler2DArray texture; + int numSplats; + }; +`); +class NumPackedSplats extends UnaryOp { + constructor({ + packedSplats + }) { + super({ a: packedSplats, outKey: "numSplats", outTypeFunc: () => "int" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.numSplats} = ${inputs.a}.numSplats;` + ]; + } +} +const defineReadPackedSplat = unindent(` + bool readPackedSplat(usampler2DArray texture, int numSplats, int index, out Gsplat gsplat) { + if ((index >= 0) && (index < numSplats)) { + uvec4 packed = texelFetch(texture, splatTexCoord(index), 0); + unpackSplat(packed, gsplat.center, gsplat.scales, gsplat.quaternion, gsplat.rgba); + return true; + } else { + return false; + } + } +`); +class ReadPackedSplat extends Dyno { + constructor({ + packedSplats, + index + }) { + super({ + inTypes: { packedSplats: TPackedSplats, index: "int" }, + outTypes: { gsplat: Gsplat }, + inputs: { packedSplats, index }, + globals: () => [defineGsplat, definePackedSplats, defineReadPackedSplat], + statements: ({ inputs, outputs }) => { + const { gsplat } = outputs; + if (!gsplat) { + return []; + } + const { packedSplats: packedSplats2, index: index2 } = inputs; + let statements; + if (packedSplats2 && index2) { + statements = unindentLines(` + if (readPackedSplat(${packedSplats2}.texture, ${packedSplats2}.numSplats, ${index2}, ${gsplat})) { + bool zeroSize = all(equal(${gsplat}.scales, vec3(0.0, 0.0, 0.0))); + ${gsplat}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE; + } else { + ${gsplat}.flags = 0u; + } + `); + } else { + statements = [`${gsplat}.flags = 0u;`]; + } + statements.push(`${gsplat}.index = ${index2 ?? "0"};`); + return statements; + } + }); + } + dynoOut() { + return new DynoOutput(this, "gsplat"); + } +} +class ReadPackedSplatRange extends Dyno { + constructor({ + packedSplats, + index, + base, + count + }) { + super({ + inTypes: { + packedSplats: TPackedSplats, + index: "int", + base: "int", + count: "int" + }, + outTypes: { gsplat: Gsplat }, + inputs: { packedSplats, index, base, count }, + globals: () => [defineGsplat, definePackedSplats, defineReadPackedSplat], + statements: ({ inputs, outputs }) => { + const { gsplat } = outputs; + if (!gsplat) { + return []; + } + const { packedSplats: packedSplats2, index: index2, base: base2, count: count2 } = inputs; + let statements; + if (packedSplats2 && index2 && base2 && count2) { + statements = unindentLines(` + ${gsplat}.flags = 0u; + if ((${index2} >= ${base2}) && (${index2} < (${base2} + ${count2}))) { + if (readPackedSplat(${packedSplats2}.texture, ${packedSplats2}.numSplats, ${index2}, ${gsplat})) { + bool zeroSize = all(equal(${gsplat}.scales, vec3(0.0, 0.0, 0.0))); + ${gsplat}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE; + } + } + `); + } else { + statements = [`${gsplat}.flags = 0u;`]; + } + statements.push(`${gsplat}.index = ${index2 ?? "0"};`); + return statements; + } + }); + } + dynoOut() { + return new DynoOutput(this, "gsplat"); + } +} +class SplitGsplat extends Dyno { + constructor({ gsplat }) { + super({ + inTypes: { gsplat: Gsplat }, + outTypes: { + flags: "uint", + active: "bool", + index: "int", + center: "vec3", + scales: "vec3", + quaternion: "vec4", + rgba: "vec4", + rgb: "vec3", + opacity: "float", + x: "float", + y: "float", + z: "float", + r: "float", + g: "float", + b: "float" + }, + inputs: { gsplat }, + globals: () => [defineGsplat], + statements: ({ inputs, outputs }) => { + const { gsplat: gsplat2 } = inputs; + const { + flags, + active, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b + } = outputs; + return [ + !flags ? null : `${flags} = ${gsplat2 ? `${gsplat2}.flags` : "0u"};`, + !active ? null : `${active} = isGsplatActive(${gsplat2 ? `${gsplat2}.flags` : "0u"});`, + !index ? null : `${index} = ${gsplat2 ? `${gsplat2}.index` : "0"};`, + !center ? null : `${center} = ${gsplat2 ? `${gsplat2}.center` : "vec3(0.0, 0.0, 0.0)"};`, + !scales ? null : `${scales} = ${gsplat2 ? `${gsplat2}.scales` : "vec3(0.0, 0.0, 0.0)"};`, + !quaternion ? null : `${quaternion} = ${gsplat2 ? `${gsplat2}.quaternion` : "vec4(0.0, 0.0, 0.0, 1.0)"};`, + !rgba ? null : `${rgba} = ${gsplat2 ? `${gsplat2}.rgba` : "vec4(0.0, 0.0, 0.0, 0.0)"};`, + !rgb ? null : `${rgb} = ${gsplat2 ? `${gsplat2}.rgba.rgb` : "vec3(0.0, 0.0, 0.0)"};`, + !opacity ? null : `${opacity} = ${gsplat2 ? `${gsplat2}.rgba.a` : "0.0"};`, + !x ? null : `${x} = ${gsplat2 ? `${gsplat2}.center.x` : "0.0"};`, + !y ? null : `${y} = ${gsplat2 ? `${gsplat2}.center.y` : "0.0"};`, + !z ? null : `${z} = ${gsplat2 ? `${gsplat2}.center.z` : "0.0"};`, + !r ? null : `${r} = ${gsplat2 ? `${gsplat2}.rgba.r` : "0.0"};`, + !g ? null : `${g} = ${gsplat2 ? `${gsplat2}.rgba.g` : "0.0"};`, + !b ? null : `${b} = ${gsplat2 ? `${gsplat2}.rgba.b` : "0.0"};` + ].filter(Boolean); + } + }); + } +} +class CombineGsplat extends Dyno { + constructor({ + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b + }) { + super({ + inTypes: { + gsplat: Gsplat, + flags: "uint", + index: "int", + center: "vec3", + scales: "vec3", + quaternion: "vec4", + rgba: "vec4", + rgb: "vec3", + opacity: "float", + x: "float", + y: "float", + z: "float", + r: "float", + g: "float", + b: "float" + }, + outTypes: { gsplat: Gsplat }, + inputs: { + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b + }, + globals: () => [defineGsplat], + statements: ({ inputs, outputs }) => { + const { gsplat: outGsplat } = outputs; + if (!outGsplat) { + return []; + } + const { + gsplat: gsplat2, + flags: flags2, + index: index2, + center: center2, + scales: scales2, + quaternion: quaternion2, + rgba: rgba2, + rgb: rgb2, + opacity: opacity2, + x: x2, + y: y2, + z: z2, + r: r2, + g: g2, + b: b2 + } = inputs; + return [ + `${outGsplat}.flags = ${flags2 ?? (gsplat2 ? `${gsplat2}.flags` : "0u")};`, + `${outGsplat}.index = ${index2 ?? (gsplat2 ? `${gsplat2}.index` : "0")};`, + `${outGsplat}.center = ${center2 ?? (gsplat2 ? `${gsplat2}.center` : "vec3(0.0, 0.0, 0.0)")};`, + `${outGsplat}.scales = ${scales2 ?? (gsplat2 ? `${gsplat2}.scales` : "vec3(0.0, 0.0, 0.0)")};`, + `${outGsplat}.quaternion = ${quaternion2 ?? (gsplat2 ? `${gsplat2}.quaternion` : "vec4(0.0, 0.0, 0.0, 1.0)")};`, + `${outGsplat}.rgba = ${rgba2 ?? (gsplat2 ? `${gsplat2}.rgba` : "vec4(0.0, 0.0, 0.0, 0.0)")};`, + !rgb2 ? null : `${outGsplat}.rgba.rgb = ${rgb2};`, + !opacity2 ? null : `${outGsplat}.rgba.a = ${opacity2};`, + !x2 ? null : `${outGsplat}.center.x = ${x2};`, + !y2 ? null : `${outGsplat}.center.y = ${y2};`, + !z2 ? null : `${outGsplat}.center.z = ${z2};`, + !r2 ? null : `${outGsplat}.rgba.r = ${r2};`, + !g2 ? null : `${outGsplat}.rgba.g = ${g2};`, + !b2 ? null : `${outGsplat}.rgba.b = ${b2};` + ].filter(Boolean); + } + }); + } + dynoOut() { + return new DynoOutput(this, "gsplat"); + } +} +const defineGsplatNormal = unindent(` + vec3 gsplatNormal(vec3 scales, vec4 quaternion) { + float minScale = min(scales.x, min(scales.y, scales.z)); + vec3 normal; + if (scales.z == minScale) { + normal = vec3(0.0, 0.0, 1.0); + } else if (scales.y == minScale) { + normal = vec3(0.0, 1.0, 0.0); + } else { + normal = vec3(1.0, 0.0, 0.0); + } + return quatVec(quaternion, normal); + } +`); +class GsplatNormal extends UnaryOp { + constructor({ gsplat }) { + super({ a: gsplat, outKey: "normal", outTypeFunc: () => "vec3" }); + this.globals = () => [defineGsplat, defineGsplatNormal]; + this.statements = ({ inputs, outputs }) => [ + `${outputs.normal} = gsplatNormal(${inputs.a}.scales, ${inputs.a}.quaternion);` + ]; + } +} +class TransformGsplat extends Dyno { + constructor({ + gsplat, + scale, + rotate, + translate, + recolor + }) { + super({ + inTypes: { + gsplat: Gsplat, + scale: "float", + rotate: "vec4", + translate: "vec3", + recolor: "vec4" + }, + outTypes: { gsplat: Gsplat }, + inputs: { gsplat, scale, rotate, translate, recolor }, + globals: () => [defineGsplat], + statements: ({ inputs, outputs, compile }) => { + const { gsplat: gsplat2 } = outputs; + if (!gsplat2 || !inputs.gsplat) { + return []; + } + const { scale: scale2, rotate: rotate2, translate: translate2, recolor: recolor2 } = inputs; + const indent = compile.indent; + const statements = [ + `${gsplat2} = ${inputs.gsplat};`, + `if (isGsplatActive(${gsplat2}.flags)) {`, + scale2 ? `${indent}${gsplat2}.center *= ${scale2};` : null, + rotate2 ? `${indent}${gsplat2}.center = quatVec(${rotate2}, ${gsplat2}.center);` : null, + translate2 ? `${indent}${gsplat2}.center += ${translate2};` : null, + scale2 ? `${indent}${gsplat2}.scales *= ${scale2};` : null, + rotate2 ? `${indent}${gsplat2}.quaternion = quatQuat(${rotate2}, ${gsplat2}.quaternion);` : null, + recolor2 ? `${indent}${gsplat2}.rgba *= ${recolor2};` : null, + "}" + ].filter(Boolean); + return statements; + } + }); + } + dynoOut() { + return new DynoOutput(this, "gsplat"); + } +} +const outputPackedSplat = (gsplat) => new OutputPackedSplat({ gsplat }); +const outputRgba8 = (rgba8) => new OutputRgba8({ rgba8 }); +class OutputPackedSplat extends Dyno { + constructor({ gsplat }) { + super({ + inTypes: { gsplat: Gsplat }, + inputs: { gsplat }, + globals: () => [defineGsplat], + statements: ({ inputs, outputs }) => { + const { output } = outputs; + if (!output) { + return []; + } + const { gsplat: gsplat2 } = inputs; + if (gsplat2) { + return unindentLines(` + if (isGsplatActive(${gsplat2}.flags)) { + ${output} = packSplat(${gsplat2}.center, ${gsplat2}.scales, ${gsplat2}.quaternion, ${gsplat2}.rgba); + } else { + ${output} = uvec4(0u, 0u, 0u, 0u); + } + `); + } + return [`${output} = uvec4(0u, 0u, 0u, 0u);`]; + } + }); + } + dynoOut() { + return new DynoOutput(this, "output"); + } +} +class OutputRgba8 extends Dyno { + constructor({ rgba8 }) { + super({ + inTypes: { rgba8: "vec4" }, + inputs: { rgba8 }, + statements: ({ inputs, outputs }) => [ + `target = ${inputs.rgba8 ?? "vec4(0.0, 0.0, 0.0, 0.0)"};` + ] + }); + } + dynoOut() { + return new DynoOutput(this, "rgba8"); + } +} +const uniform = (key, type, value) => new DynoUniform({ key, type, value }); +const dynoBool = (value = false, key) => new DynoBool({ key, value }); +const dynoUint = (value = 0, key) => new DynoUint({ key, value }); +const dynoInt = (value = 0, key) => new DynoInt({ key, value }); +const dynoFloat = (value = 0, key) => new DynoFloat({ key, value }); +const dynoBvec2 = (value, key) => new DynoBvec2({ key, value }); +const dynoUvec2 = (value, key) => new DynoUvec2({ key, value }); +const dynoIvec2 = (value, key) => new DynoIvec2({ key, value }); +const dynoVec2 = (value, key) => new DynoVec2({ key, value }); +const dynoBvec3 = (value, key) => new DynoBvec3({ key, value }); +const dynoUvec3 = (value, key) => new DynoUvec3({ key, value }); +const dynoIvec3 = (value, key) => new DynoIvec3({ key, value }); +const dynoVec3 = (value, key) => new DynoVec3({ key, value }); +const dynoBvec4 = (value, key) => new DynoBvec4({ key, value }); +const dynoUvec4 = (value, key) => new DynoUvec4({ key, value }); +const dynoIvec4 = (value, key) => new DynoIvec4({ key, value }); +const dynoVec4 = (value, key) => new DynoVec4({ key, value }); +const dynoMat2 = (value, key) => new DynoMat2({ key, value }); +const dynoMat2x2 = (value, key) => new DynoMat2x2({ key, value }); +const dynoMat2x3 = (value, key) => new DynoMat2x3({ key, value }); +const dynoMat2x4 = (value, key) => new DynoMat2x4({ key, value }); +const dynoMat3 = (value, key) => new DynoMat3({ key, value }); +const dynoMat3x2 = (value, key) => new DynoMat3x2({ key, value }); +const dynoMat3x3 = (value, key) => new DynoMat3x3({ key, value }); +const dynoMat3x4 = (value, key) => new DynoMat3x4({ key, value }); +const dynoMat4 = (value, key) => new DynoMat4({ key, value }); +const dynoMat4x2 = (value, key) => new DynoMat4x2({ key, value }); +const dynoMat4x3 = (value, key) => new DynoMat4x3({ key, value }); +const dynoMat4x4 = (value, key) => new DynoMat4x4({ key, value }); +const dynoUsampler2D = (value, key) => new DynoUsampler2D({ key, value }); +const dynoIsampler2D = (value, key) => new DynoIsampler2D({ key, value }); +const dynoSampler2D = (value, key) => new DynoSampler2D({ key, value }); +const dynoUsampler2DArray = (value, key) => new DynoUsampler2DArray({ key, value }); +const dynoIsampler2DArray = (key, value) => new DynoIsampler2DArray({ key, value }); +const dynoSampler2DArray = (value, key) => new DynoSampler2DArray({ key, value }); +const dynoUsampler3D = (value, key) => new DynoUsampler3D({ key, value }); +const dynoIsampler3D = (value, key) => new DynoIsampler3D({ key, value }); +const dynoSampler3D = (value, key) => new DynoSampler3D({ key, value }); +const dynoUsamplerCube = (value, key) => new DynoUsamplerCube({ key, value }); +const dynoIsamplerCube = (value, key) => new DynoIsamplerCube({ key, value }); +const dynoSamplerCube = (value, key) => new DynoSamplerCube({ key, value }); +const dynoSampler2DShadow = (value, key) => new DynoSampler2DShadow({ key, value }); +const dynoSampler2DArrayShadow = (value, key) => new DynoSampler2DArrayShadow({ key, value }); +const dynoSamplerCubeShadow = (value, key) => new DynoSamplerCubeShadow({ key, value }); +class DynoUniform extends Dyno { + constructor({ + key, + type, + count, + value, + update, + globals + }) { + key = key ?? "value"; + super({ + outTypes: { [key]: type }, + update: () => { + if (update) { + const value2 = update(this.value); + if (value2 !== void 0) { + this.value = value2; + } + } + this.uniform.value = this.value; + }, + generate: ({ inputs, outputs }) => { + const allGlobals = (globals == null ? void 0 : globals({ inputs, outputs })) ?? []; + const uniforms = {}; + const name = outputs[key]; + if (name) { + allGlobals.push(`uniform ${dynoDeclare(name, type, count)};`); + uniforms[name] = this.uniform; + } + return { globals: allGlobals, uniforms }; + } + }); + this.type = type; + this.count = count; + this.value = value; + this.uniform = { value }; + this.outKey = key; + } + dynoOut() { + return new DynoOutput(this, this.outKey); + } +} +class DynoBool extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "bool", value, update }); + } +} +class DynoUint extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "uint", value, update }); + } +} +class DynoInt extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "int", value, update }); + } +} +class DynoFloat extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "float", value, update }); + } +} +class DynoBvec2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "bvec2", value, update }); + } +} +class DynoUvec2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "uvec2", value, update }); + } +} +class DynoIvec2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "ivec2", value, update }); + } +} +class DynoVec2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "vec2", value, update }); + } +} +class DynoBvec3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "bvec3", value, update }); + } +} +class DynoUvec3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "uvec3", value, update }); + } +} +class DynoIvec3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "ivec3", value, update }); + } +} +class DynoVec3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "vec3", value, update }); + } +} +class DynoBvec4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "bvec4", value, update }); + } +} +class DynoUvec4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "uvec4", value, update }); + } +} +class DynoIvec4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "ivec4", value, update }); + } +} +class DynoVec4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "vec4", value, update }); + } +} +class DynoMat2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat2", value, update }); + } +} +class DynoMat2x2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat2x2", value, update }); + } +} +class DynoMat2x3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat2x3", value, update }); + } +} +class DynoMat2x4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat2x4", value, update }); + } +} +class DynoMat3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat3", value, update }); + } +} +class DynoMat3x2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat3x2", value, update }); + } +} +class DynoMat3x3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat3x3", value, update }); + } +} +class DynoMat3x4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat3x4", value, update }); + } +} +class DynoMat4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat4", value, update }); + } +} +class DynoMat4x2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat4x2", value, update }); + } +} +class DynoMat4x3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat4x3", value, update }); + } +} +class DynoMat4x4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat4x4", value, update }); + } +} +class DynoUsampler2D extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "usampler2D", value, update }); + } +} +class DynoIsampler2D extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "isampler2D", value, update }); + } +} +class DynoSampler2D extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "sampler2D", value, update }); + } +} +class DynoUsampler2DArray extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "usampler2DArray", value, update }); + } +} +class DynoIsampler2DArray extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "isampler2DArray", value, update }); + } +} +class DynoSampler2DArray extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "sampler2DArray", value, update }); + } +} +class DynoUsampler3D extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "usampler3D", value, update }); + } +} +class DynoIsampler3D extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "isampler3D", value, update }); + } +} +class DynoSampler3D extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "sampler3D", value, update }); + } +} +class DynoUsamplerCube extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "usamplerCube", value, update }); + } +} +class DynoIsamplerCube extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "isamplerCube", value, update }); + } +} +class DynoSamplerCube extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "samplerCube", value, update }); + } +} +class DynoSampler2DShadow extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "sampler2DShadow", value, update }); + } +} +class DynoSampler2DArrayShadow extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "sampler2DArrayShadow", value, update }); + } +} +class DynoSamplerCubeShadow extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "samplerCubeShadow", value, update }); + } +} +var u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array; +var fleb = new u8([ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 0, + /* unused */ + 0, + 0, + /* impossible */ + 0 +]); +var fdeb = new u8([ + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 8, + 9, + 9, + 10, + 10, + 11, + 11, + 12, + 12, + 13, + 13, + /* unused */ + 0, + 0 +]); +var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); +var freb = function(eb, start) { + var b = new u16(31); + for (var i = 0; i < 31; ++i) { + b[i] = start += 1 << eb[i - 1]; + } + var r = new i32(b[30]); + for (var i = 1; i < 30; ++i) { + for (var j = b[i]; j < b[i + 1]; ++j) { + r[j] = j - b[i] << 5 | i; + } + } + return { b, r }; +}; +var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r; +fl[28] = 258, revfl[258] = 28; +var _b = freb(fdeb, 0), fd = _b.b; +var rev = new u16(32768); +for (var i = 0; i < 32768; ++i) { + var x = (i & 43690) >> 1 | (i & 21845) << 1; + x = (x & 52428) >> 2 | (x & 13107) << 2; + x = (x & 61680) >> 4 | (x & 3855) << 4; + rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1; +} +var hMap = function(cd, mb, r) { + var s = cd.length; + var i = 0; + var l = new u16(mb); + for (; i < s; ++i) { + if (cd[i]) + ++l[cd[i] - 1]; + } + var le = new u16(mb); + for (i = 1; i < mb; ++i) { + le[i] = le[i - 1] + l[i - 1] << 1; + } + var co; + if (r) { + co = new u16(1 << mb); + var rvb = 15 - mb; + for (i = 0; i < s; ++i) { + if (cd[i]) { + var sv = i << 4 | cd[i]; + var r_1 = mb - cd[i]; + var v = le[cd[i] - 1]++ << r_1; + for (var m = v | (1 << r_1) - 1; v <= m; ++v) { + co[rev[v] >> rvb] = sv; + } + } + } + } else { + co = new u16(s); + for (i = 0; i < s; ++i) { + if (cd[i]) { + co[i] = rev[le[cd[i] - 1]++] >> 15 - cd[i]; + } + } + } + return co; +}; +var flt = new u8(288); +for (var i = 0; i < 144; ++i) + flt[i] = 8; +for (var i = 144; i < 256; ++i) + flt[i] = 9; +for (var i = 256; i < 280; ++i) + flt[i] = 7; +for (var i = 280; i < 288; ++i) + flt[i] = 8; +var fdt = new u8(32); +for (var i = 0; i < 32; ++i) + fdt[i] = 5; +var flrm = /* @__PURE__ */ hMap(flt, 9, 1); +var fdrm = /* @__PURE__ */ hMap(fdt, 5, 1); +var max$1 = function(a) { + var m = a[0]; + for (var i = 1; i < a.length; ++i) { + if (a[i] > m) + m = a[i]; + } + return m; +}; +var bits = function(d, p, m) { + var o = p / 8 | 0; + return (d[o] | d[o + 1] << 8) >> (p & 7) & m; +}; +var bits16 = function(d, p) { + var o = p / 8 | 0; + return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7); +}; +var shft = function(p) { + return (p + 7) / 8 | 0; +}; +var slc = function(v, s, e) { + if (s == null || s < 0) + s = 0; + if (e == null || e > v.length) + e = v.length; + return new u8(v.subarray(s, e)); +}; +var ec = [ + "unexpected EOF", + "invalid block type", + "invalid length/literal", + "invalid distance", + "stream finished", + "no stream handler", + , + "no callback", + "invalid UTF-8 data", + "extra field too long", + "date not in range 1980-2099", + "filename too long", + "stream finishing", + "invalid zip data" + // determined by unknown compression method +]; +var err = function(ind, msg, nt) { + var e = new Error(msg || ec[ind]); + e.code = ind; + if (Error.captureStackTrace) + Error.captureStackTrace(e, err); + if (!nt) + throw e; + return e; +}; +var inflt = function(dat, st, buf, dict) { + var sl = dat.length, dl = 0; + if (!sl || st.f && !st.l) + return buf || new u8(0); + var noBuf = !buf; + var resize = noBuf || st.i != 2; + var noSt = st.i; + if (noBuf) + buf = new u8(sl * 3); + var cbuf = function(l2) { + var bl = buf.length; + if (l2 > bl) { + var nbuf = new u8(Math.max(bl * 2, l2)); + nbuf.set(buf); + buf = nbuf; + } + }; + var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n; + var tbts = sl * 8; + do { + if (!lm) { + final = bits(dat, pos, 1); + var type = bits(dat, pos + 1, 3); + pos += 3; + if (!type) { + var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l; + if (t > sl) { + if (noSt) + err(0); + break; + } + if (resize) + cbuf(bt + l); + buf.set(dat.subarray(s, t), bt); + st.b = bt += l, st.p = pos = t * 8, st.f = final; + continue; + } else if (type == 1) + lm = flrm, dm = fdrm, lbt = 9, dbt = 5; + else if (type == 2) { + var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4; + var tl = hLit + bits(dat, pos + 5, 31) + 1; + pos += 14; + var ldt = new u8(tl); + var clt = new u8(19); + for (var i = 0; i < hcLen; ++i) { + clt[clim[i]] = bits(dat, pos + i * 3, 7); + } + pos += hcLen * 3; + var clb = max$1(clt), clbmsk = (1 << clb) - 1; + var clm = hMap(clt, clb, 1); + for (var i = 0; i < tl; ) { + var r = clm[bits(dat, pos, clbmsk)]; + pos += r & 15; + var s = r >> 4; + if (s < 16) { + ldt[i++] = s; + } else { + var c = 0, n = 0; + if (s == 16) + n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1]; + else if (s == 17) + n = 3 + bits(dat, pos, 7), pos += 3; + else if (s == 18) + n = 11 + bits(dat, pos, 127), pos += 7; + while (n--) + ldt[i++] = c; + } + } + var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit); + lbt = max$1(lt); + dbt = max$1(dt); + lm = hMap(lt, lbt, 1); + dm = hMap(dt, dbt, 1); + } else + err(1); + if (pos > tbts) { + if (noSt) + err(0); + break; + } + } + if (resize) + cbuf(bt + 131072); + var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1; + var lpos = pos; + for (; ; lpos = pos) { + var c = lm[bits16(dat, pos) & lms], sym = c >> 4; + pos += c & 15; + if (pos > tbts) { + if (noSt) + err(0); + break; + } + if (!c) + err(2); + if (sym < 256) + buf[bt++] = sym; + else if (sym == 256) { + lpos = pos, lm = null; + break; + } else { + var add2 = sym - 254; + if (sym > 264) { + var i = sym - 257, b = fleb[i]; + add2 = bits(dat, pos, (1 << b) - 1) + fl[i]; + pos += b; + } + var d = dm[bits16(dat, pos) & dms], dsym = d >> 4; + if (!d) + err(3); + pos += d & 15; + var dt = fd[dsym]; + if (dsym > 3) { + var b = fdeb[dsym]; + dt += bits16(dat, pos) & (1 << b) - 1, pos += b; + } + if (pos > tbts) { + if (noSt) + err(0); + break; + } + if (resize) + cbuf(bt + 131072); + var end = bt + add2; + if (bt < dt) { + var shift = dl - dt, dend = Math.min(dt, end); + if (shift + bt < 0) + err(3); + for (; bt < dend; ++bt) + buf[bt] = dict[shift + bt]; + } + for (; bt < end; ++bt) + buf[bt] = buf[bt - dt]; + } + } + st.l = lm, st.p = lpos, st.b = bt, st.f = final; + if (lm) + final = 1, st.m = lbt, st.d = dm, st.n = dbt; + } while (!final); + return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt); +}; +var et = /* @__PURE__ */ new u8(0); +var gzs = function(d) { + if (d[0] != 31 || d[1] != 139 || d[2] != 8) + err(6, "invalid gzip data"); + var flg = d[3]; + var st = 10; + if (flg & 4) + st += (d[10] | d[11] << 8) + 2; + for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++]) + ; + return st + (flg & 2); +}; +var Inflate = /* @__PURE__ */ function() { + function Inflate2(opts, cb) { + if (typeof opts == "function") + cb = opts, opts = {}; + this.ondata = cb; + var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768); + this.s = { i: 0, b: dict ? dict.length : 0 }; + this.o = new u8(32768); + this.p = new u8(0); + if (dict) + this.o.set(dict); + } + Inflate2.prototype.e = function(c) { + if (!this.ondata) + err(5); + if (this.d) + err(4); + if (!this.p.length) + this.p = c; + else if (c.length) { + var n = new u8(this.p.length + c.length); + n.set(this.p), n.set(c, this.p.length), this.p = n; + } + }; + Inflate2.prototype.c = function(final) { + this.s.i = +(this.d = final || false); + var bts = this.s.b; + var dt = inflt(this.p, this.s, this.o); + this.ondata(slc(dt, bts, this.s.b), this.d); + this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length; + this.p = slc(this.p, this.s.p / 8 | 0), this.s.p &= 7; + }; + Inflate2.prototype.push = function(chunk, final) { + this.e(chunk), this.c(final); + }; + return Inflate2; +}(); +var Gunzip = /* @__PURE__ */ function() { + function Gunzip2(opts, cb) { + this.v = 1; + this.r = 0; + Inflate.call(this, opts, cb); + } + Gunzip2.prototype.push = function(chunk, final) { + Inflate.prototype.e.call(this, chunk); + this.r += chunk.length; + if (this.v) { + var p = this.p.subarray(this.v - 1); + var s = p.length > 3 ? gzs(p) : 4; + if (s > p.length) { + if (!final) + return; + } else if (this.v > 1 && this.onmember) { + this.onmember(this.r - p.length); + } + this.p = p.subarray(s), this.v = 0; + } + Inflate.prototype.c.call(this, final); + if (this.s.f && !this.s.l && !final) { + this.v = shft(this.s.p) + 9; + this.s = { i: 0 }; + this.o = new u8(0); + this.push(new u8(0), final); + } + }; + return Gunzip2; +}(); +var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder(); +var tds = 0; +try { + td.decode(et, { stream: true }); + tds = 1; +} catch (e) { +} +const f32buffer = new Float32Array(1); +const u32buffer = new Uint32Array(f32buffer.buffer); +function floatBitsToUint$1(f) { + f32buffer[0] = f; + return u32buffer[0]; +} +function uintBitsToFloat$1(u) { + u32buffer[0] = u; + return f32buffer[0]; +} +function toHalf(f) { + f32buffer[0] = f; + const bits2 = u32buffer[0]; + const sign2 = bits2 >> 31 & 1; + const exp3 = bits2 >> 23 & 255; + const frac = bits2 & 8388607; + const halfSign = sign2 << 15; + if (exp3 === 255) { + if (frac !== 0) { + return halfSign | 32767; + } + return halfSign | 31744; + } + const newExp = exp3 - 127 + 15; + if (newExp >= 31) { + return halfSign | 31744; + } + if (newExp <= 0) { + if (newExp < -10) { + return halfSign; + } + const subFrac = (frac | 8388608) >> 1 - newExp + 13; + return halfSign | subFrac; + } + const halfFrac = frac >> 13; + return halfSign | newExp << 10 | halfFrac; +} +function fromHalf(h) { + const sign2 = h >> 15 & 1; + const exp3 = h >> 10 & 31; + const frac = h & 1023; + let f32bits; + if (exp3 === 0) { + if (frac === 0) { + f32bits = sign2 << 31; + } else { + let mant = frac; + let e = -14; + while ((mant & 1024) === 0) { + mant <<= 1; + e--; + } + mant &= 1023; + const newExp = e + 127; + const newFrac = mant << 13; + f32bits = sign2 << 31 | newExp << 23 | newFrac; + } + } else if (exp3 === 31) { + if (frac === 0) { + f32bits = sign2 << 31 | 2139095040; + } else { + f32bits = sign2 << 31 | 2143289344; + } + } else { + const newExp = exp3 - 15 + 127; + const newFrac = frac << 13; + f32bits = sign2 << 31 | newExp << 23 | newFrac; + } + u32buffer[0] = f32bits; + return f32buffer[0]; +} +function floatToUint8(v) { + return Math.max(0, Math.min(255, Math.round(v * 255))); +} +function floatToSint8(v) { + return Math.max(-127, Math.min(127, Math.round(v * 127))); +} +function Uint8ToFloat(v) { + return v / 255; +} +function Sint8ToFloat(v) { + return v / 127; +} +class DataCache { + // Create a DataCache with a given function that fetches data not in the cache. + constructor({ + asyncFetch, + maxItems = 5 + }) { + this.asyncFetch = asyncFetch; + this.maxItems = maxItems; + this.items = []; + } + // Fetch data for the key, returning cached data if available. + async getFetch(key) { + const index = this.items.findIndex((item) => item.key === key); + if (index >= 0) { + const item = this.items.splice(index, 1)[0]; + this.items.push(item); + return item.data; + } + const data = await this.asyncFetch(key); + this.items.push({ key, data }); + while (this.items.length > this.maxItems) { + this.items.shift(); + } + return data; + } +} +function mapObject(obj, fn) { + const entries = Object.entries(obj).map(([key, value]) => [ + key, + fn(value, key) + ]); + return Object.fromEntries(entries); +} +function mapFilterObject(obj, fn) { + const entries = Object.entries(obj).map(([key, value]) => [key, fn(value, key)]).filter(([_, value]) => value !== void 0); + return Object.fromEntries(entries); +} +function getArrayBuffers(ctx) { + const buffers = []; + const seen = /* @__PURE__ */ new Set(); + function traverse(obj) { + if (obj && typeof obj === "object" && !seen.has(obj)) { + seen.add(obj); + if (obj instanceof ArrayBuffer) { + buffers.push(obj); + } else if (ArrayBuffer.isView(obj)) { + buffers.push(obj.buffer); + } else if (Array.isArray(obj)) { + obj.forEach(traverse); + } else { + Object.values(obj).forEach(traverse); + } + } + } + traverse(ctx); + return buffers; +} +function newArray(n, initFunction) { + return new Array(n).fill(null).map((_, i) => initFunction(i)); +} +class FreeList { + constructor({ + // Allocate a new item with the given args + allocate, + // Dispose of an item (optional, if GC is enough) + dispose, + // Check if an existing item in the list is valid for the given args, + // allowing you to store heterogeneous items in the list. + valid + }) { + this.items = []; + this.allocate = allocate; + this.dispose = dispose; + this.valid = valid; + } + // Allocate a new item from the free list, first checking if a existing item + // on the freelist is valid for the given args. + alloc(args) { + while (true) { + const item = this.items.pop(); + if (!item) { + break; + } + if (this.valid(item, args)) { + return item; + } + if (this.dispose) { + this.dispose(item); + } + } + return this.allocate(args); + } + free(item) { + this.items.push(item); + } + disposeAll() { + let item; + item = this.items.pop(); + while (item) { + if (this.dispose) { + this.dispose(item); + } + item = this.items.pop(); + } + } +} +function setPackedSplat(packedSplats, index, x, y, z, scaleX, scaleY, scaleZ, quatX, quatY, quatZ, quatW, opacity, r, g, b) { + const uR = floatToUint8(r); + const uG = floatToUint8(g); + const uB = floatToUint8(b); + const uA = floatToUint8(opacity); + const uQuat = encodeQuatOctXy88R8( + new THREE__namespace.Quaternion(quatX, quatY, quatZ, quatW) + ); + const uQuatX = uQuat & 255; + const uQuatY = uQuat >>> 8 & 255; + const uQuatZ = uQuat >>> 16 & 255; + const uScaleX = scaleX === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleX) - LN_SCALE_MIN) / LN_RESCALE) + 1 + ) + ); + const uScaleY = scaleY === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleY) - LN_SCALE_MIN) / LN_RESCALE) + 1 + ) + ); + const uScaleZ = scaleZ === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleZ) - LN_SCALE_MIN) / LN_RESCALE) + 1 + ) + ); + const uCenterX = toHalf(x); + const uCenterY = toHalf(y); + const uCenterZ = toHalf(z); + const i4 = index * 4; + packedSplats[i4] = uR | uG << 8 | uB << 16 | uA << 24; + packedSplats[i4 + 1] = uCenterX | uCenterY << 16; + packedSplats[i4 + 2] = uCenterZ | uQuatX << 16 | uQuatY << 24; + packedSplats[i4 + 3] = uScaleX | uScaleY << 8 | uScaleZ << 16 | uQuatZ << 24; +} +function setPackedSplatCenter(packedSplats, index, x, y, z) { + const uCenterX = toHalf(x); + const uCenterY = toHalf(y); + const uCenterZ = toHalf(z); + const i4 = index * 4; + packedSplats[i4 + 1] = uCenterX | uCenterY << 16; + packedSplats[i4 + 2] = uCenterZ | packedSplats[i4 + 2] & 4294901760; +} +function setPackedSplatScales(packedSplats, index, scaleX, scaleY, scaleZ) { + const uScaleX = scaleX === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleX) - LN_SCALE_MIN) / LN_RESCALE) + 1 + ) + ); + const uScaleY = scaleY === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleY) - LN_SCALE_MIN) / LN_RESCALE) + 1 + ) + ); + const uScaleZ = scaleZ === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleZ) - LN_SCALE_MIN) / LN_RESCALE) + 1 + ) + ); + const i4 = index * 4; + packedSplats[i4 + 3] = uScaleX | uScaleY << 8 | uScaleZ << 16 | packedSplats[i4 + 3] & 4278190080; +} +function setPackedSplatQuat(packedSplats, index, quatX, quatY, quatZ, quatW) { + const uQuat = encodeQuatOctXy88R8( + new THREE__namespace.Quaternion(quatX, quatY, quatZ, quatW) + ); + const uQuatX = uQuat & 255; + const uQuatY = uQuat >>> 8 & 255; + const uQuatZ = uQuat >>> 16 & 255; + const i4 = index * 4; + packedSplats[i4 + 2] = packedSplats[i4 + 2] & 65535 | uQuatX << 16 | uQuatY << 24; + packedSplats[i4 + 3] = packedSplats[i4 + 3] & 16777215 | uQuatZ << 24; +} +function setPackedSplatRgb(packedSplats, index, r, g, b) { + const uR = floatToUint8(r); + const uG = floatToUint8(g); + const uB = floatToUint8(b); + const i4 = index * 4; + packedSplats[i4] = uR | uG << 8 | uB << 16 | packedSplats[i4] & 4278190080; +} +function setPackedSplatOpacity(packedSplats, index, opacity) { + const uA = floatToUint8(opacity); + const i4 = index * 4; + packedSplats[i4] = packedSplats[i4] & 16777215 | uA << 24; +} +const packedCenter = new THREE__namespace.Vector3(); +const packedScales = new THREE__namespace.Vector3(); +const packedQuaternion = new THREE__namespace.Quaternion(); +const packedColor = new THREE__namespace.Color(); +const packedFields = { + center: packedCenter, + scales: packedScales, + quaternion: packedQuaternion, + color: packedColor, + opacity: 0 +}; +function unpackSplat(packedSplats, index) { + const result = packedFields; + const i4 = index * 4; + const word0 = packedSplats[i4]; + const word1 = packedSplats[i4 + 1]; + const word2 = packedSplats[i4 + 2]; + const word3 = packedSplats[i4 + 3]; + result.color.set( + (word0 & 255) / 255, + (word0 >>> 8 & 255) / 255, + (word0 >>> 16 & 255) / 255 + ); + result.opacity = (word0 >>> 24 & 255) / 255; + result.center.set( + fromHalf(word1 & 65535), + fromHalf(word1 >>> 16 & 65535), + fromHalf(word2 & 65535) + ); + const uScalesX = word3 & 255; + result.scales.x = uScalesX === 0 ? 0 : Math.exp(LN_SCALE_MIN + (uScalesX - 1) * LN_RESCALE); + const uScalesY = word3 >>> 8 & 255; + result.scales.y = uScalesY === 0 ? 0 : Math.exp(LN_SCALE_MIN + (uScalesY - 1) * LN_RESCALE); + const uScalesZ = word3 >>> 16 & 255; + result.scales.z = uScalesZ === 0 ? 0 : Math.exp(LN_SCALE_MIN + (uScalesZ - 1) * LN_RESCALE); + const uQuat = word2 >>> 16 & 65535 | word3 >>> 8 & 16711680; + decodeQuatOctXy88R8(uQuat, result.quaternion); + return result; +} +function getTextureSize(numSplats) { + const width = SPLAT_TEX_WIDTH; + const height = Math.max( + SPLAT_TEX_MIN_HEIGHT, + Math.min(SPLAT_TEX_HEIGHT, Math.ceil(numSplats / width)) + ); + const depth = Math.ceil(numSplats / (width * height)); + const maxSplats = width * height * depth; + return { width, height, depth, maxSplats }; +} +function isMobile() { + if (navigator.maxTouchPoints > 0) { + return true; + } + return /Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test( + navigator.userAgent + ); +} +function isAndroid() { + return /Android/.test(navigator.userAgent); +} +function isOculus() { + return /Oculus/.test(navigator.userAgent); +} +function flipPixels(pixels, width, height) { + const tempLine = new Uint8Array(width * 4); + for (let y = 0; y < height / 2; y++) { + const topOffset = y * width * 4; + const bottomOffset = (height - 1 - y) * width * 4; + tempLine.set(pixels.subarray(topOffset, topOffset + width * 4)); + pixels.set( + pixels.subarray(bottomOffset, bottomOffset + width * 4), + topOffset + ); + pixels.set(tempLine, bottomOffset); + } + return pixels; +} +function pixelsToPngUrl(pixels, width, height) { + const canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext("2d"); + if (!ctx) { + throw new Error("Can't get 2d context"); + } + const imageData = ctx.createImageData(width, height); + imageData.data.set(pixels); + ctx.putImageData(imageData, 0, 0); + return canvas.toDataURL("image/png"); +} +function cloneClock(clock) { + const newClock = new THREE__namespace.Clock(clock.autoStart); + newClock.startTime = clock.startTime; + newClock.oldTime = clock.oldTime; + newClock.elapsedTime = clock.elapsedTime; + newClock.running = clock.running; + return newClock; +} +function omitUndefined(obj) { + return Object.fromEntries( + Object.entries(obj).filter(([_, value]) => value !== void 0) + ); +} +const IDENT_VERTEX_SHADER = unindent(` + precision highp float; + + in vec3 position; + + void main() { + gl_Position = vec4(position.xy, 0.0, 1.0); + } +`); +function averagePositions(positions) { + const sum = new THREE__namespace.Vector3(); + for (const position of positions) { + sum.add(position); + } + return sum.divideScalar(positions.length); +} +function averageQuaternions(quaternions) { + if (quaternions.length === 0) { + return new THREE__namespace.Quaternion(); + } + const sum = quaternions[0].clone(); + for (let i = 1; i < quaternions.length; i++) { + if (quaternions[i].dot(quaternions[0]) < 0) { + sum.x -= quaternions[i].x; + sum.y -= quaternions[i].y; + sum.z -= quaternions[i].z; + sum.w -= quaternions[i].w; + } else { + sum.x += quaternions[i].x; + sum.y += quaternions[i].y; + sum.z += quaternions[i].z; + sum.w += quaternions[i].w; + } + } + return sum.normalize(); +} +function coinciDist(matrix1, matrix2) { + const origin1 = new THREE__namespace.Vector3(0, 0, 0).applyMatrix4(matrix1); + const origin2 = new THREE__namespace.Vector3(0, 0, 0).applyMatrix4(matrix2); + const direction1 = new THREE__namespace.Vector3(0, 0, -1).applyMatrix4(matrix1).sub(origin1).normalize(); + const direction2 = new THREE__namespace.Vector3(0, 0, -1).applyMatrix4(matrix2).sub(origin2).normalize(); + const distance2 = origin1.distanceTo(origin2); + const coincidence = direction1.dot(direction2); + return { distance: distance2, coincidence }; +} +function withinDist({ + matrix1, + matrix2, + maxDistance +}) { + const origin1 = new THREE__namespace.Vector3(0, 0, 0).applyMatrix4(matrix1); + const origin2 = new THREE__namespace.Vector3(0, 0, 0).applyMatrix4(matrix2); + return origin1.distanceTo(origin2) <= maxDistance; +} +function withinCoinciDist({ + matrix1, + matrix2, + maxDistance, + minCoincidence +}) { + const { distance: distance2, coincidence } = coinciDist(matrix1, matrix2); + return distance2 <= maxDistance && (minCoincidence == null || coincidence >= minCoincidence); +} +function coorientDist(matrix1, matrix2) { + const [origin1, rotate1] = [new THREE__namespace.Vector3(), new THREE__namespace.Quaternion()]; + const [origin2, rotate2] = [new THREE__namespace.Vector3(), new THREE__namespace.Quaternion()]; + matrix1.decompose(origin1, rotate1, new THREE__namespace.Vector3()); + matrix2.decompose(origin2, rotate2, new THREE__namespace.Vector3()); + const distance2 = origin1.distanceTo(origin2); + const coorient = Math.abs(rotate1.dot(rotate2)); + return { distance: distance2, coorient }; +} +function withinCoorientDist({ + matrix1, + matrix2, + maxDistance, + minCoorient +}) { + const { distance: distance2, coorient } = coorientDist(matrix1, matrix2); + return distance2 <= maxDistance && (minCoorient == null || coorient >= minCoorient); +} +function epsilonSign(value, epsilon = 1e-3) { + if (Math.abs(value) < epsilon) { + return 0; + } + return Math.sign(value); +} +function encodeQuatXyz888(q) { + const negQuat = q.w < 0; + const iQuatX = floatToSint8(negQuat ? -q.x : q.x); + const iQuatY = floatToSint8(negQuat ? -q.y : q.y); + const iQuatZ = floatToSint8(negQuat ? -q.z : q.z); + const uQuatX = iQuatX & 255; + const uQuatY = iQuatY & 255; + const uQuatZ = iQuatZ & 255; + return uQuatX | uQuatY << 8 | uQuatZ << 16; +} +function decodeQuatXyz888(encoded, out) { + const iQuatX = encoded << 24 >> 24; + const iQuatY = encoded << 16 >> 24; + const iQuatZ = encoded << 8 >> 24; + out.set(iQuatX / 127, iQuatY / 127, iQuatZ / 127, 0); + const dotSelf = out.x * out.x + out.y * out.y + out.z * out.z; + out.w = Math.sqrt(Math.max(0, 1 - dotSelf)); + return out; +} +function encodeQuatOctXy88R8(q) { + const qnorm = q.clone().normalize(); + if (qnorm.w < 0) { + qnorm.set(-qnorm.x, -qnorm.y, -qnorm.z, -qnorm.w); + } + const theta = 2 * Math.acos(qnorm.w); + const xyz_norm = Math.sqrt( + qnorm.x * qnorm.x + qnorm.y * qnorm.y + qnorm.z * qnorm.z + ); + const axis = xyz_norm < 1e-6 ? new THREE__namespace.Vector3(1, 0, 0) : new THREE__namespace.Vector3(qnorm.x, qnorm.y, qnorm.z).divideScalar(xyz_norm); + const sum = Math.abs(axis.x) + Math.abs(axis.y) + Math.abs(axis.z); + let p_x = axis.x / sum; + let p_y = axis.y / sum; + if (axis.z < 0) { + const tmp = p_x; + p_x = (1 - Math.abs(p_y)) * (p_x >= 0 ? 1 : -1); + p_y = (1 - Math.abs(tmp)) * (p_y >= 0 ? 1 : -1); + } + const u_f = p_x * 0.5 + 0.5; + const v_f = p_y * 0.5 + 0.5; + const quantU = Math.round(u_f * 255); + const quantV = Math.round(v_f * 255); + const angleInt = Math.round(theta * (255 / Math.PI)); + return angleInt << 16 | quantV << 8 | quantU; +} +function decodeQuatOctXy88R8(encoded, out) { + const quantU = encoded & 255; + const quantV = encoded >>> 8 & 255; + const angleInt = encoded >>> 16 & 255; + const u_f = quantU / 255; + const v_f = quantV / 255; + let f_x = (u_f - 0.5) * 2; + let f_y = (v_f - 0.5) * 2; + const f_z = 1 - (Math.abs(f_x) + Math.abs(f_y)); + const t = Math.max(-f_z, 0); + f_x += f_x >= 0 ? -t : t; + f_y += f_y >= 0 ? -t : t; + const axis = new THREE__namespace.Vector3(f_x, f_y, f_z).normalize(); + const theta = angleInt / 255 * Math.PI; + const halfTheta = theta * 0.5; + const s = Math.sin(halfTheta); + const w = Math.cos(halfTheta); + out.set(axis.x * s, axis.y * s, axis.z * s, w); + return out; +} +function encodeQuatEulerXyz888(q) { + const qNorm = q.clone().normalize(); + const sinr_cosp = 2 * (qNorm.w * qNorm.x + qNorm.y * qNorm.z); + const cosr_cosp = 1 - 2 * (qNorm.x * qNorm.x + qNorm.y * qNorm.y); + const roll = Math.atan2(sinr_cosp, cosr_cosp); + const sinp = 2 * (qNorm.w * qNorm.y - qNorm.z * qNorm.x); + const pitch = Math.abs(sinp) >= 1 ? Math.sign(sinp) * (Math.PI / 2) : Math.asin(sinp); + const siny_cosp = 2 * (qNorm.w * qNorm.z + qNorm.x * qNorm.y); + const cosy_cosp = 1 - 2 * (qNorm.y * qNorm.y + qNorm.z * qNorm.z); + const yaw = Math.atan2(siny_cosp, cosy_cosp); + const normRoll = (roll + Math.PI) / (2 * Math.PI); + const normPitch = (pitch + Math.PI) / (2 * Math.PI); + const normYaw = (yaw + Math.PI) / (2 * Math.PI); + const rollQ = Math.round(normRoll * 255); + const pitchQ = Math.round(normPitch * 255); + const yawQ = Math.round(normYaw * 255); + return yawQ << 16 | pitchQ << 8 | rollQ; +} +function decodeQuatEulerXyz888(encoded, out) { + const rollQ = encoded & 255; + const pitchQ = encoded >>> 8 & 255; + const yawQ = encoded >>> 16 & 255; + const normRoll = rollQ / 255; + const normPitch = pitchQ / 255; + const normYaw = yawQ / 255; + const roll = normRoll * (2 * Math.PI) - Math.PI; + const pitch = normPitch * (2 * Math.PI) - Math.PI; + const yaw = normYaw * (2 * Math.PI) - Math.PI; + const cr = Math.cos(roll * 0.5); + const sr = Math.sin(roll * 0.5); + const cp = Math.cos(pitch * 0.5); + const sp = Math.sin(pitch * 0.5); + const cy = Math.cos(yaw * 0.5); + const sy = Math.sin(yaw * 0.5); + out.w = cr * cp * cy + sr * sp * sy; + out.x = sr * cp * cy - cr * sp * sy; + out.y = cr * sp * cy + sr * cp * sy; + out.z = cr * cp * sy - sr * sp * cy; + out.normalize(); + return out; +} +function packSint8Bytes(b0, b1, b2, b3) { + const clampedB0 = Math.max(-127, Math.min(127, b0 * 127)); + const clampedB1 = Math.max(-127, Math.min(127, b1 * 127)); + const clampedB2 = Math.max(-127, Math.min(127, b2 * 127)); + const clampedB3 = Math.max(-127, Math.min(127, b3 * 127)); + return clampedB0 & 255 | (clampedB1 & 255) << 8 | (clampedB2 & 255) << 16 | (clampedB3 & 255) << 24; +} +function encodeSh1Rgb(sh1Array, index, sh1Rgb) { + const base = index * 2; + for (let i = 0; i < 9; ++i) { + const value = Math.max(-63, Math.min(63, sh1Rgb[i] * 63)) & 127; + const bitStart = i * 7; + const bitEnd = bitStart + 7; + const wordStart = Math.floor(bitStart / 32); + const bitOffset = bitStart - wordStart * 32; + const firstWord = value << bitOffset & 4294967295; + sh1Array[base + wordStart] |= firstWord; + if (bitEnd > wordStart * 32 + 32) { + const secondWord = value >>> 32 - bitOffset & 4294967295; + sh1Array[base + wordStart + 1] |= secondWord; + } + } +} +function encodeSh2Rgb(sh2Array, index, sh2Rgb) { + sh2Array[index * 4 + 0] = packSint8Bytes( + sh2Rgb[0], + sh2Rgb[1], + sh2Rgb[2], + sh2Rgb[3] + ); + sh2Array[index * 4 + 1] = packSint8Bytes( + sh2Rgb[4], + sh2Rgb[5], + sh2Rgb[6], + sh2Rgb[7] + ); + sh2Array[index * 4 + 2] = packSint8Bytes( + sh2Rgb[8], + sh2Rgb[9], + sh2Rgb[10], + sh2Rgb[11] + ); + sh2Array[index * 4 + 3] = packSint8Bytes( + sh2Rgb[12], + sh2Rgb[13], + sh2Rgb[14], + 0 + ); +} +function encodeSh3Rgb(sh3Array, index, sh3Rgb) { + const base = index * 4; + for (let i = 0; i < 21; ++i) { + const value = Math.max(-31, Math.min(31, sh3Rgb[i] * 31)) & 63; + const bitStart = i * 6; + const bitEnd = bitStart + 6; + const wordStart = Math.floor(bitStart / 32); + const bitOffset = bitStart - wordStart * 32; + const firstWord = value << bitOffset & 4294967295; + sh3Array[base + wordStart] |= firstWord; + if (bitEnd > wordStart * 32 + 32) { + const secondWord = value >>> 32 - bitOffset & 4294967295; + sh3Array[base + wordStart + 1] |= secondWord; + } + } +} +function decompressPartialGzip(fileBytes, numBytes) { + const chunks = []; + let totalBytes = 0; + let result = null; + const gunzip = new Gunzip((data, final) => { + chunks.push(data); + totalBytes += data.length; + if (final || totalBytes >= numBytes) { + const allBytes = new Uint8Array(totalBytes); + let offset2 = 0; + for (const chunk of chunks) { + allBytes.set(chunk, offset2); + offset2 += chunk.length; + } + result = allBytes.slice(0, numBytes); + } + }); + const CHUNK_SIZE = 1024; + let offset = 0; + while (result == null && offset < fileBytes.length) { + const chunk = fileBytes.slice(offset, offset + CHUNK_SIZE); + gunzip.push(chunk, false); + offset += CHUNK_SIZE; + } + if (result == null) { + gunzip.push(new Uint8Array(), true); + if (result == null) { + throw new Error("Failed to decompress partial gzip"); + } + } + return result; +} +class GunzipReader { + constructor({ + fileBytes, + chunkBytes = 64 * 1024 + }) { + this.fileBytes = fileBytes; + this.chunkBytes = chunkBytes; + this.offset = 0; + this.chunks = []; + this.totalBytes = 0; + this.gunzip = new Gunzip((chunk, _final) => { + this.chunks.push(chunk); + this.totalBytes += chunk.length; + }); + } + read(numBytes) { + while (this.totalBytes < numBytes && this.offset < this.fileBytes.length) { + const end = Math.min( + this.offset + this.chunkBytes, + this.fileBytes.length + ); + this.gunzip.push(this.fileBytes.subarray(this.offset, end), false); + this.offset = end; + } + if (this.totalBytes < numBytes && this.offset >= this.fileBytes.length) { + this.gunzip.push(new Uint8Array(0), true); + } + if (this.totalBytes < numBytes) { + throw new Error( + `Unexpected EOF: needed ${numBytes}, got ${this.totalBytes}` + ); + } + const allBytes = new Uint8Array(this.totalBytes); + let outOffset = 0; + for (const chunk of this.chunks) { + allBytes.set(chunk, outOffset); + outOffset += chunk.length; + } + const result = allBytes.subarray(0, numBytes); + this.chunks = [allBytes.subarray(numBytes)]; + this.totalBytes -= numBytes; + return result; + } +} +const utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DataCache, + FreeList, + GunzipReader, + IDENT_VERTEX_SHADER, + Sint8ToFloat, + Uint8ToFloat, + averagePositions, + averageQuaternions, + cloneClock, + coinciDist, + coorientDist, + decodeQuatEulerXyz888, + decodeQuatOctXy88R8, + decodeQuatXyz888, + decompressPartialGzip, + encodeQuatEulerXyz888, + encodeQuatOctXy88R8, + encodeQuatXyz888, + encodeSh1Rgb, + encodeSh2Rgb, + encodeSh3Rgb, + epsilonSign, + flipPixels, + floatBitsToUint: floatBitsToUint$1, + floatToSint8, + floatToUint8, + fromHalf, + getArrayBuffers, + getTextureSize, + isAndroid, + isMobile, + isOculus, + mapFilterObject, + mapObject, + newArray, + omitUndefined, + pixelsToPngUrl, + setPackedSplat, + setPackedSplatCenter, + setPackedSplatOpacity, + setPackedSplatQuat, + setPackedSplatRgb, + setPackedSplatScales, + toHalf, + uintBitsToFloat: uintBitsToFloat$1, + unpackSplat, + withinCoinciDist, + withinCoorientDist, + withinDist +}, Symbol.toStringTag, { value: "Module" })); +class DynoProgram { + constructor({ + graph, + inputs, + outputs, + template + }) { + this.graph = graph; + this.template = template; + this.inputs = inputs ?? {}; + this.outputs = outputs ?? {}; + const compile = new Compilation({ indent: this.template.indent }); + for (const key in this.outputs) { + if (this.outputs[key]) { + compile.declares.add(this.outputs[key]); + } + } + const statements = graph.compile({ + inputs: this.inputs, + outputs: this.outputs, + compile + }); + this.shader = template.generate({ globals: compile.globals, statements }); + this.uniforms = compile.uniforms; + this.updaters = compile.updaters; + } + prepareMaterial() { + return getMaterial(this); + } + update() { + for (const updater of this.updaters) { + updater(); + } + } +} +class DynoProgramTemplate { + constructor(template) { + const globals = template.match(/^([ \t]*)\{\{\s*GLOBALS\s*\}\}/m); + const statements = template.match(/^([ \t]*)\{\{\s*STATEMENTS\s*\}\}/m); + if (!globals || !statements) { + throw new Error( + "Template must contain {{ GLOBALS }} and {{ STATEMENTS }}" + ); + } + this.before = template.substring(0, globals.index); + this.between = template.substring( + globals.index + globals[0].length, + statements.index + ); + this.after = template.substring( + statements.index + statements[0].length + ); + this.indent = statements[1]; + } + generate({ + globals, + statements + }) { + return this.before + Array.from(globals).join("\n\n") + this.between + statements.map((s) => this.indent + s).join("\n") + this.after; + } +} +const programMaterial = /* @__PURE__ */ new Map(); +function getMaterial(program) { + let material = programMaterial.get(program); + if (material) { + return material; + } + material = new THREE__namespace.RawShaderMaterial({ + glslVersion: THREE__namespace.GLSL3, + vertexShader: IDENT_VERTEX_SHADER, + fragmentShader: program.shader, + uniforms: program.uniforms + }); + programMaterial.set(program, material); + return material; +} +function addOutputType(a, b, operation = "add") { + const error = () => { + throw new Error(`Invalid ${operation} types: ${a}, ${b}`); + }; + if (a === b) return a; + if (a === "int") { + if (isIntType(b)) return b; + error(); + } + if (b === "int") { + if (isIntType(a)) return a; + error(); + } + if (a === "uint") { + if (isUintType(b)) return b; + error(); + } + if (b === "uint") { + if (isUintType(a)) return a; + error(); + } + if (a === "float") { + if (isAllFloatType(b)) return b; + error(); + } + if (b === "float") { + if (isAllFloatType(a)) return a; + error(); + } + throw new Error(`Invalid ${operation} types: ${a}, ${b}`); +} +function subOutputType(a, b) { + return addOutputType(a, b, "sub"); +} +function mulOutputType(a, b) { + const error = () => { + throw new Error(`Invalid mul types: ${a}, ${b}`); + }; + const result = (value) => value; + if (a === "int") { + if (isIntType(b)) return result(b); + error(); + } + if (b === "int") { + if (isIntType(a)) return result(a); + error(); + } + if (a === "uint") { + if (isUintType(b)) return result(b); + error(); + } + if (b === "uint") { + if (isUintType(a)) return result(a); + error(); + } + if (a === "float") { + if (isAllFloatType(b)) return result(b); + error(); + } + if (b === "float") { + if (isAllFloatType(a)) return result(a); + error(); + } + if (isIntType(a) || isUintType(a) || isIntType(b) || isUintType(b)) { + if (a === b) return result(a); + error(); + } + if (a === "vec2") { + if (b === "vec2" || isMat2(b)) return result("vec2"); + if (b === "mat3x2") return result("vec3"); + if (b === "mat4x2") return result("vec4"); + error(); + } + if (a === "vec3") { + if (b === "mat2x3") return result("vec2"); + if (b === "vec3" || isMat3(b)) return result("vec3"); + if (b === "mat4x3") return result("vec4"); + error(); + } + if (a === "vec4") { + if (b === "mat2x4") return result("vec2"); + if (b === "mat3x4") return result("vec3"); + if (b === "vec4" || isMat4(b)) return result("vec4"); + error(); + } + if (b === "vec2") { + if (isMat2(a)) return result("vec2"); + if (a === "mat2x3") return result("vec3"); + if (a === "mat2x4") return result("vec4"); + error(); + } + if (b === "vec3") { + if (a === "mat3x2") return result("vec2"); + if (isMat3(a)) return result("vec3"); + if (a === "mat3x4") return result("vec4"); + error(); + } + if (b === "vec4") { + if (a === "mat4x2") return result("vec2"); + if (a === "mat4x3") return result("vec3"); + if (isMat4(a)) return result("vec4"); + error(); + } + if (isMat2(a)) { + if (isMat2(b)) return result("mat2"); + if (b === "mat3x2") return result("mat3x2"); + if (b === "mat4x2") return result("mat4x2"); + error(); + } + if (a === "mat2x3") { + if (isMat2(b)) return result("mat2x3"); + if (b === "mat3x2") return result("mat3"); + if (b === "mat4x2") return result("mat4x3"); + error(); + } + if (a === "mat2x4") { + if (isMat2(b)) return result("mat2x4"); + if (b === "mat3x2") return result("mat3x4"); + if (b === "mat4x2") return result("mat4"); + error(); + } + if (a === "mat3x2") { + if (b === "mat2x3") return result("mat2"); + if (isMat3(b)) return result("mat3x2"); + if (b === "mat4x3") return result("mat4x2"); + error(); + } + if (isMat3(a)) { + if (b === "mat2x3") return result("mat2x3"); + if (isMat3(b)) return result("mat3"); + if (b === "mat4x3") return result("mat4x3"); + error(); + } + if (a === "mat3x4") { + if (b === "mat2x3") return result("mat2x4"); + if (isMat3(b)) return result("mat3x4"); + if (b === "mat4x3") return result("mat4"); + error(); + } + if (a === "mat4x2") { + if (b === "mat2x4") return result("mat2"); + if (b === "mat3x4") return result("mat3x2"); + if (isMat4(b)) return result("mat4x2"); + error(); + } + if (a === "mat4x3") { + if (b === "mat2x4") return result("mat2x3"); + if (b === "mat3x4") return result("mat3"); + if (isMat4(b)) return result("mat4x3"); + error(); + } + if (isMat4(a)) { + if (b === "mat2x4") return result("mat2x4"); + if (b === "mat3x4") return result("mat3x4"); + if (isMat4(b)) return result("mat4"); + error(); + } + throw new Error(`Invalid mul types: ${a}, ${b}`); +} +function divOutputType(a, b) { + return addOutputType(a, b, "div"); +} +function imodOutputType(a, b) { + if (a === b) return a; + if (a === "int") { + if (isIntType(b)) return b; + } else if (b === "int") { + if (isIntType(a)) return a; + } else if (a === "uint") { + if (isUintType(b)) return b; + } else if (b === "uint") { + if (isUintType(a)) return a; + } + throw new Error(`Invalid imod types: ${a}, ${b}`); +} +function modOutputType(a, b) { + if (a === b || b === "float") return a; + throw new Error(`Invalid mod types: ${a}, ${b}`); +} +function modfOutputType(a) { + return a; +} +function negOutputType(a) { + return a; +} +function absOutputType(a) { + return a; +} +function signOutputType(a) { + return a; +} +function floorOutputType(a) { + return a; +} +function ceilOutputType(a) { + return a; +} +function truncOutputType(a) { + return a; +} +function roundOutputType(a) { + return a; +} +function fractOutputType(a) { + return a; +} +function powOutputType(a) { + return a; +} +function expOutputType(a) { + return a; +} +function exp2OutputType(a) { + return a; +} +function logOutputType(a) { + return a; +} +function log2OutputType(a) { + return a; +} +function sqrOutputType(a) { + return a; +} +function sqrtOutputType(a) { + return a; +} +function inversesqrtOutputType(a) { + return a; +} +function minOutputType(a, b, operation = "min") { + if (a === b) return a; + if (b === "float") { + if (isFloatType(a)) return a; + } else if (b === "int") { + if (isIntType(a)) return a; + } else if (b === "uint") { + if (isUintType(a)) return a; + } + throw new Error(`Invalid ${operation} types: ${a}, ${b}`); +} +function maxOutputType(a, b) { + return minOutputType(a, b, "max"); +} +function clampOutputType(a, b, _c) { + if (b === "float") { + if (isFloatType(a)) return a; + } else if (b === "int") { + if (isIntType(a)) return a; + } else if (b === "uint") { + if (isUintType(a)) return a; + } + throw new Error(`Invalid clamp types: ${a}, ${b}`); +} +function mixOutputType(a, b, c) { + if (c === a) return a; + if (c === "float") return a; + if (c === "bool" && a === "float") return a; + if (c === "bvec2" && a === "vec2") return a; + if (c === "bvec3" && a === "vec3") return a; + if (c === "bvec4" && a === "vec4") return a; + throw new Error(`Invalid mix types: ${a}, ${b}, ${c}`); +} +function stepOutputType(a, b) { + if (a === b || b === "float") return b; + throw new Error(`Invalid step types: ${a}, ${b}`); +} +function smoothstepOutputType(a, b, c) { + if (a === b) { + if (a === c || a === "float") return c; + } + throw new Error(`Invalid smoothstep types: ${a}, ${b}, ${c}`); +} +function isNanOutputType(a, operation = "isNan") { + if (a === "float") return "bool"; + if (a === "vec2") return "bvec2"; + if (a === "vec3") return "bvec3"; + if (a === "vec4") return "bvec4"; + throw new Error(`Invalid ${operation} types: ${a}`); +} +function isInfOutputType(a) { + return isNanOutputType(a, "isInf"); +} +const add = (a, b) => new Add({ a, b }); +const sub = (a, b) => new Sub({ a, b }); +const mul = (a, b) => new Mul({ a, b }); +const div = (a, b) => new Div({ a, b }); +const imod = (a, b) => new IMod({ a, b }); +const mod = (a, b) => new Mod({ a, b }); +const modf = (a) => new Modf({ a }).outputs; +const neg = (a) => new Neg({ a }); +const abs = (a) => new Abs({ a }); +const sign = (a) => new Sign({ a }); +const floor = (a) => new Floor({ a }); +const ceil = (a) => new Ceil({ a }); +const trunc = (a) => new Trunc({ a }); +const round = (a) => new Round({ a }); +const fract = (a) => new Fract({ a }); +const pow = (a, b) => new Pow({ a, b }); +const exp = (a) => new Exp({ a }); +const exp2 = (a) => new Exp2({ a }); +const log = (a) => new Log({ a }); +const log2 = (a) => new Log2({ a }); +const sqr = (a) => new Sqr({ a }); +const sqrt = (a) => new Sqrt({ a }); +const inversesqrt = (a) => new InverseSqrt({ a }); +const min = (a, b) => new Min({ a, b }); +const max = (a, b) => new Max({ a, b }); +const clamp = (a, min2, max2) => new Clamp({ a, min: min2, max: max2 }); +const mix = (a, b, t) => new Mix({ a, b, t }); +const step = (edge, x) => new Step({ edge, x }); +const smoothstep = (edge0, edge1, x) => new Smoothstep({ edge0, edge1, x }); +const isNan = (a) => new IsNan({ a }); +const isInf = (a) => new IsInf({ a }); +class Add extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "sum", outTypeFunc: addOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.sum} = ${inputs.a} + ${inputs.b};`]; + }; + } +} +class Sub extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "difference", outTypeFunc: subOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.difference} = ${inputs.a} - ${inputs.b};`]; + }; + } +} +class Mul extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "product", outTypeFunc: mulOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.product} = ${inputs.a} * ${inputs.b};`]; + }; + } +} +class Div extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "quotient", outTypeFunc: divOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.quotient} = ${inputs.a} / ${inputs.b};`]; + }; + } +} +class IMod extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "remainder", outTypeFunc: imodOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.remainder} = ${inputs.a} % ${inputs.b};`]; + }; + } +} +class Mod extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "remainder", outTypeFunc: modOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.remainder} = mod(${inputs.a}, ${inputs.b});`]; + }; + } +} +class Modf extends Dyno { + constructor({ a }) { + const inTypes = { a: valType(a) }; + const outType = modfOutputType(inTypes.a); + const outTypes = { + fract: outType, + integer: outType + }; + super({ inTypes, outTypes, inputs: { a } }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.fract} = modf(${inputs.a}, ${outputs.integer});`]; + }; + } +} +class Neg extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "neg", outTypeFunc: negOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.neg} = -${inputs.a};`]; + }; + } +} +class Abs extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "abs", outTypeFunc: absOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.abs} = abs(${inputs.a});`]; + }; + } +} +class Sign extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "sign", outTypeFunc: signOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.sign} = sign(${inputs.a});`]; + }; + } +} +class Floor extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "floor", outTypeFunc: floorOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.floor} = floor(${inputs.a});`]; + }; + } +} +class Ceil extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "ceil", outTypeFunc: ceilOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.ceil} = ceil(${inputs.a});`]; + }; + } +} +class Trunc extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "trunc", outTypeFunc: truncOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.trunc} = trunc(${inputs.a});`]; + }; + } +} +class Round extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "round", outTypeFunc: roundOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.round} = round(${inputs.a});`]; + }; + } +} +class Fract extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "fract", outTypeFunc: fractOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.fract} = fract(${inputs.a});`]; + }; + } +} +class Pow extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "power", outTypeFunc: powOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.power} = pow(${inputs.a}, ${inputs.b});`]; + }; + } +} +class Exp extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "exp", outTypeFunc: expOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.exp} = exp(${inputs.a});`]; + }; + } +} +class Exp2 extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "exp2", outTypeFunc: exp2OutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.exp2} = exp2(${inputs.a});`]; + }; + } +} +class Log extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "log", outTypeFunc: logOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.log} = log(${inputs.a});`]; + }; + } +} +class Log2 extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "log2", outTypeFunc: log2OutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.log2} = log2(${inputs.a});`]; + }; + } +} +class Sqr extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "sqr", outTypeFunc: sqrOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.sqr} = ${inputs.a} * ${inputs.a};`]; + }; + } +} +class Sqrt extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "sqrt", outTypeFunc: sqrtOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.sqrt} = sqrt(${inputs.a});`]; + }; + } +} +class InverseSqrt extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "inversesqrt", outTypeFunc: inversesqrtOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.inversesqrt} = inversesqrt(${inputs.a});`]; + }; + } +} +class Min extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "min", outTypeFunc: minOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.min} = min(${inputs.a}, ${inputs.b});`]; + }; + } +} +class Max extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "max", outTypeFunc: maxOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.max} = max(${inputs.a}, ${inputs.b});`]; + }; + } +} +class Clamp extends TrinaryOp { + constructor({ + a, + min: min2, + max: max2 + }) { + super({ + a, + b: min2, + c: max2, + outKey: "clamp", + outTypeFunc: clampOutputType + }); + this.statements = ({ inputs, outputs }) => { + const { a: a2, b: min3, c: max3 } = inputs; + return [`${outputs.clamp} = clamp(${a2}, ${min3}, ${max3});`]; + }; + } +} +class Mix extends TrinaryOp { + constructor({ a, b, t }) { + super({ a, b, c: t, outKey: "mix", outTypeFunc: mixOutputType }); + this.statements = ({ inputs, outputs }) => { + const { a: a2, b: b2, c: t2 } = inputs; + return [`${outputs.mix} = mix(${a2}, ${b2}, ${t2});`]; + }; + } +} +class Step extends BinaryOp { + constructor({ edge, x }) { + super({ + a: edge, + b: x, + outKey: "step", + outTypeFunc: stepOutputType + }); + this.statements = ({ inputs, outputs }) => { + const { a: edge2, b: x2 } = inputs; + return [`${outputs.step} = step(${edge2}, ${x2});`]; + }; + } +} +class Smoothstep extends TrinaryOp { + constructor({ + edge0, + edge1, + x + }) { + super({ + a: edge0, + b: edge1, + c: x, + outKey: "smoothstep", + outTypeFunc: smoothstepOutputType + }); + this.statements = ({ inputs, outputs }) => { + const { a: edge02, b: edge12, c: x2 } = inputs; + return [`${outputs.smoothstep} = smoothstep(${edge02}, ${edge12}, ${x2});`]; + }; + } +} +class IsNan extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "isNan", outTypeFunc: isNanOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.isNan} = isNan(${inputs.a});`]; + }; + } +} +class IsInf extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "isInf", outTypeFunc: isInfOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.isInf} = isInf(${inputs.a});`]; + }; + } +} +const and = (a, b) => new And({ a, b }); +const or = (a, b) => new Or({ a, b }); +const xor = (a, b) => new Xor({ a, b }); +const not = (a) => new Not({ a }); +const lessThan = (a, b) => new LessThan({ a, b }); +const lessThanEqual = (a, b) => new LessThanEqual({ a, b }); +const greaterThan = (a, b) => new GreaterThan({ a, b }); +const greaterThanEqual = (a, b) => new GreaterThanEqual({ a, b }); +const equal = (a, b) => new Equal({ a, b }); +const notEqual = (a, b) => new NotEqual({ a, b }); +const any = (a) => new Any({ a }); +const all = (a) => new All({ a }); +const select = (cond, t, f) => new Select({ cond, t, f }); +const compXor = (a) => new CompXor({ a }); +class And extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outTypeFunc: (aType, bType) => aType, outKey: "and" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.and === "bool") { + return [`${outputs.and} = ${inputs.a} && ${inputs.b};`]; + } + return [`${outputs.and} = ${inputs.a} & ${inputs.b};`]; + }; + } +} +class Or extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outTypeFunc: (aType, bType) => aType, outKey: "or" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.or === "bool") { + return [`${outputs.or} = ${inputs.a} || ${inputs.b};`]; + } + return [`${outputs.or} = ${inputs.a} | ${inputs.b};`]; + }; + } +} +class Xor extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outTypeFunc: (aType, bType) => aType, outKey: "xor" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.xor === "bool") { + return [`${outputs.xor} = ${inputs.a} ^^ ${inputs.b};`]; + } + return [`${outputs.xor} = ${inputs.a} ^ ${inputs.b};`]; + }; + } +} +class Not extends UnaryOp { + constructor({ a }) { + super({ a, outTypeFunc: (aType) => aType, outKey: "not" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.not === "bool") { + return [`${outputs.not} = !${inputs.a};`]; + } + return [`${outputs.not} = not(${inputs.a});`]; + }; + } +} +class LessThan extends BinaryOp { + constructor({ a, b }) { + super({ + a, + b, + outTypeFunc: (aType, bType) => compareOutputType(aType, "lessThan"), + outKey: "lessThan" + }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.lessThan === "bool") { + return [`${outputs.lessThan} = ${inputs.a} < ${inputs.b};`]; + } + return [`${outputs.lessThan} = lessThan(${inputs.a}, ${inputs.b});`]; + }; + } +} +class LessThanEqual extends BinaryOp { + constructor({ a, b }) { + super({ + a, + b, + outTypeFunc: (aType, bType) => compareOutputType(aType, "lessThanEqual"), + outKey: "lessThanEqual" + }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.lessThanEqual === "bool") { + return [`${outputs.lessThanEqual} = ${inputs.a} <= ${inputs.b};`]; + } + return [ + `${outputs.lessThanEqual} = lessThanEqual(${inputs.a}, ${inputs.b});` + ]; + }; + } +} +class GreaterThan extends BinaryOp { + constructor({ a, b }) { + super({ + a, + b, + outTypeFunc: (aType, bType) => compareOutputType(aType, "greaterThan"), + outKey: "greaterThan" + }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.greaterThan === "bool") { + return [`${outputs.greaterThan} = ${inputs.a} > ${inputs.b};`]; + } + return [ + `${outputs.greaterThan} = greaterThan(${inputs.a}, ${inputs.b});` + ]; + }; + } +} +class GreaterThanEqual extends BinaryOp { + constructor({ a, b }) { + super({ + a, + b, + outTypeFunc: (aType, bType) => compareOutputType(aType, "greaterThanEqual"), + outKey: "greaterThanEqual" + }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.greaterThanEqual === "bool") { + return [`${outputs.greaterThanEqual} = ${inputs.a} >= ${inputs.b};`]; + } + return [ + `${outputs.greaterThanEqual} = greaterThanEqual(${inputs.a}, ${inputs.b});` + ]; + }; + } +} +class Equal extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outTypeFunc: equalOutputType, outKey: "equal" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.equal === "bool") { + return [`${outputs.equal} = ${inputs.a} == ${inputs.b};`]; + } + return [`${outputs.equal} = equal(${inputs.a}, ${inputs.b});`]; + }; + } +} +class NotEqual extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outTypeFunc: notEqualOutputType, outKey: "notEqual" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.notEqual === "bool") { + return [`${outputs.notEqual} = ${inputs.a} != ${inputs.b};`]; + } + return [`${outputs.notEqual} = notEqual(${inputs.a}, ${inputs.b});`]; + }; + } +} +class Any extends UnaryOp { + constructor({ a }) { + super({ a, outTypeFunc: (aType) => "bool", outKey: "any" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.any} = any(${inputs.a});`]; + }; + } +} +class All extends UnaryOp { + constructor({ a }) { + super({ a, outTypeFunc: (aType) => "bool", outKey: "all" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.all} = all(${inputs.a});`]; + }; + } +} +class Select extends TrinaryOp { + constructor({ + cond, + t, + f + }) { + super({ + a: cond, + b: t, + c: f, + outKey: "select", + outTypeFunc: (aType, bType, cType) => bType + }); + this.statements = ({ inputs, outputs }) => { + const { a: cond2, b: t2, c: f2 } = inputs; + return [`${outputs.select} = (${cond2}) ? (${t2}) : (${f2});`]; + }; + } +} +function compareOutputType(type, operator) { + if (isScalarType(type)) { + return "bool"; + } + if (type === "ivec2" || type === "uvec2" || type === "vec2") { + return "bvec2"; + } + if (type === "ivec3" || type === "uvec3" || type === "vec3") { + return "bvec3"; + } + if (type === "ivec4" || type === "uvec4" || type === "vec4") { + return "bvec4"; + } + throw new Error(`Invalid ${operator} type: ${type}`); +} +function equalOutputType(type, operator = "equal") { + if (isScalarType(type)) { + return "bool"; + } + if (isBoolType(type)) { + return type; + } + if (type === "ivec2" || type === "uvec2" || type === "vec2") { + return "bvec2"; + } + if (type === "ivec3" || type === "uvec3" || type === "vec3") { + return "bvec3"; + } + if (type === "ivec4" || type === "uvec4" || type === "vec4") { + return "bvec4"; + } + throw new Error(`Invalid ${operator} type: ${type}`); +} +function notEqualOutputType(type) { + return equalOutputType(type, "notEqual"); +} +function compXorOutputType(type) { + if (isBoolType(type)) { + return "bool"; + } + if (isIntType(type)) { + return "int"; + } + if (isUintType(type)) { + return "uint"; + } + throw new Error(`Invalid compXor type: ${type}`); +} +class CompXor extends UnaryOp { + constructor({ a }) { + const outType = compXorOutputType(valType(a)); + super({ a, outTypeFunc: (aType) => outType, outKey: "compXor" }); + this.statements = ({ inputs, outputs }) => { + if (isScalarType(this.outTypes.compXor)) { + return [`${outputs.compXor} = ${inputs.a};`]; + } + const components = isVector2Type(outType) ? ["x", "y"] : isVector3Type(outType) ? ["x", "y", "z"] : ["x", "y", "z", "w"]; + const operands = components.map((c) => `${inputs.a}.${c}`); + const operator = isBoolType(outType) ? "^^" : "^"; + return [`${outputs.compXor} = ${operands.join(` ${operator} `)};`]; + }; + } +} +const bool = (value) => new Bool({ value }); +const int = (value) => new Int({ value }); +const uint = (value) => new Uint({ value }); +const float = (value) => new Float({ value }); +const bvec2 = (value) => new BVec2({ value }); +const bvec3 = (value) => new BVec3({ value }); +const bvec4 = (value) => new BVec4({ value }); +const ivec2 = (value) => new IVec2({ value }); +const ivec3 = (value) => new IVec3({ value }); +const ivec4 = (value) => new IVec4({ value }); +const uvec2 = (value) => new UVec2({ value }); +const uvec3 = (value) => new UVec3({ value }); +const uvec4 = (value) => new UVec4({ value }); +const vec2 = (value) => new Vec2({ value }); +const vec3 = (value) => new Vec3({ value }); +const vec4 = (value) => new Vec4({ value }); +const mat2 = (value) => new Mat2({ value }); +const mat3 = (value) => new Mat3({ value }); +const mat4 = (value) => new Mat4({ value }); +const floatBitsToInt = (value) => new FloatBitsToInt({ value }); +const floatBitsToUint = (value) => new FloatBitsToUint({ value }); +const intBitsToFloat = (value) => new IntBitsToFloat({ value }); +const uintBitsToFloat = (value) => new UintBitsToFloat({ value }); +const packSnorm2x16 = (value) => new PackSnorm2x16({ value }); +const unpackSnorm2x16 = (value) => new UnpackSnorm2x16({ value }); +const packUnorm2x16 = (value) => new PackUnorm2x16({ value }); +const unpackUnorm2x16 = (value) => new UnpackUnorm2x16({ value }); +const packHalf2x16 = (value) => new PackHalf2x16({ value }); +const unpackHalf2x16 = (value) => new UnpackHalf2x16({ value }); +const uintToRgba8 = (value) => new UintToRgba8({ value }); +class SimpleCast extends UnaryOp { + constructor({ + value, + outType, + outKey + }) { + super({ a: value, outTypeFunc: () => outType, outKey }); + this.statements = ({ inputs, outputs }) => [ + `${outputs[outKey]} = ${typeLiteral(outType)}(${inputs.a});` + ]; + } +} +class Bool extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "bool", outKey: "bool" }); + } +} +class Int extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "int", outKey: "int" }); + } +} +class Uint extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "uint", outKey: "uint" }); + } +} +class Float extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "float", outKey: "float" }); + } +} +class BVec2 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "bvec2", outKey: "bvec2" }); + } +} +class BVec3 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "bvec3", outKey: "bvec3" }); + } +} +class BVec4 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "bvec4", outKey: "bvec4" }); + } +} +class IVec2 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "ivec2", outKey: "ivec2" }); + } +} +class IVec3 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "ivec3", outKey: "ivec3" }); + } +} +class IVec4 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "ivec4", outKey: "ivec4" }); + } +} +class UVec2 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "uvec2", outKey: "uvec2" }); + } +} +class UVec3 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "uvec3", outKey: "uvec3" }); + } +} +class UVec4 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "uvec4", outKey: "uvec4" }); + } +} +class Vec2 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "vec2", outKey: "vec2" }); + } +} +class Vec3 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "vec3", outKey: "vec3" }); + } +} +class Vec4 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "vec4", outKey: "vec4" }); + } +} +class Mat2 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "mat2", outKey: "mat2" }); + } +} +class Mat3 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "mat3", outKey: "mat3" }); + } +} +class Mat4 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "mat4", outKey: "mat4" }); + } +} +class FloatBitsToInt extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "int", outTypeFunc: () => "int" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.int} = floatBitsToInt(${inputs.a});`]; + }; + } +} +class FloatBitsToUint extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "uint", outTypeFunc: () => "uint" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.uint} = floatBitsToUint(${inputs.a});`]; + }; + } +} +class IntBitsToFloat extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "float", outTypeFunc: () => "float" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.float} = intBitsToFloat(${inputs.a});`]; + }; + } +} +class UintBitsToFloat extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "float", outTypeFunc: () => "float" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.float} = uintBitsToFloat(${inputs.a});`]; + }; + } +} +class PackSnorm2x16 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "uint", outTypeFunc: () => "uint" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.uint} = packSnorm2x16(${inputs.a});`]; + }; + } +} +class UnpackSnorm2x16 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "vec2", outTypeFunc: () => "vec2" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.vec2} = unpackSnorm2x16(${inputs.a});`]; + }; + } +} +class PackUnorm2x16 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "uint", outTypeFunc: () => "uint" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.uint} = packUnorm2x16(${inputs.a});`]; + }; + } +} +class UnpackUnorm2x16 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "vec2", outTypeFunc: () => "vec2" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.vec2} = unpackUnorm2x16(${inputs.a});`]; + }; + } +} +class PackHalf2x16 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "uint", outTypeFunc: () => "uint" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.uint} = packHalf2x16(${inputs.a});`]; + }; + } +} +class UnpackHalf2x16 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "vec2", outTypeFunc: () => "vec2" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.vec2} = unpackHalf2x16(${inputs.a});`]; + }; + } +} +class UintToRgba8 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "rgba8", outTypeFunc: () => "vec4" }); + this.statements = ({ inputs, outputs }) => { + return [ + `uvec4 uRgba = uvec4(${inputs.a} & 0xffu, (${inputs.a} >> 8u) & 0xffu, (${inputs.a} >> 16u) & 0xffu, (${inputs.a} >> 24u) & 0xffu);`, + `${outputs.rgba8} = vec4(uRgba) / 255.0;` + ]; + }; + } +} +const length = (a) => new Length({ a }); +const distance = (a, b) => new Distance({ a, b }); +const dot = (a, b) => new Dot({ a, b }); +const cross = (a, b) => new Cross({ a, b }); +const normalize = (a) => new Normalize({ a }); +const faceforward = (a, b, c) => new FaceForward({ a, b, c }); +const reflectVec = (incident, normal) => new ReflectVec({ incident, normal }); +const refractVec = (incident, normal, eta) => new RefractVec({ incident, normal, eta }); +const split = (vector) => new Split({ vector }); +const combine = ({ + vector, + vectorType, + x, + y, + z, + w, + r, + g, + b, + a +}) => new Combine({ vector, vectorType, x, y, z, w, r, g, b, a }); +const projectH = (a) => new ProjectH({ a }); +const extendVec = (a, b) => new ExtendVec({ a, b }); +const swizzle = (a, select2) => new Swizzle({ vector: a, select: select2 }); +const compMult = (a, b) => new CompMult({ a, b }); +const outer = (a, b) => new Outer({ a, b }); +const transpose = (a) => new Transpose({ a }); +const determinant = (a) => new Determinant({ a }); +const inverse = (a) => new Inverse({ a }); +class Length extends UnaryOp { + constructor({ a }) { + super({ a, outTypeFunc: (aType) => "float", outKey: "length" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.length} = length(${inputs.a});` + ]; + } +} +class Distance extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "distance", outTypeFunc: (aType, bType) => "float" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.distance} = distance(${inputs.a}, ${inputs.b});` + ]; + } +} +class Dot extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "dot", outTypeFunc: (aType, bType) => "float" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.dot} = dot(${inputs.a}, ${inputs.b});` + ]; + } +} +class Cross extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "cross", outTypeFunc: (aType, bType) => "vec3" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.cross} = cross(${inputs.a}, ${inputs.b});` + ]; + } +} +class Normalize extends UnaryOp { + constructor({ a }) { + super({ a, outTypeFunc: (aType) => aType, outKey: "normalize" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.normalize} = normalize(${inputs.a});` + ]; + } +} +function projectHOutputType(type) { + if (type === "vec3") { + return "vec2"; + } + if (type === "vec4") { + return "vec3"; + } + throw new Error("Invalid type"); +} +class ProjectH extends UnaryOp { + constructor({ a }) { + super({ + a, + outTypeFunc: (aType) => projectHOutputType(aType), + outKey: "projected" + }); + this.statements = ({ inputs, outputs }) => { + if (this.inTypes.a === "vec3") { + return [`${outputs.projected} = ${inputs.a}.xy / ${inputs.a}.z;`]; + } + if (this.inTypes.a === "vec4") { + return [`${outputs.projected} = ${inputs.a}.xyz / ${inputs.a}.w;`]; + } + throw new Error("Invalid type"); + }; + } +} +function extendVecOutputType(type) { + if (type === "float") return "vec2"; + if (type === "vec2") return "vec3"; + if (type === "vec3") return "vec4"; + throw new Error("Invalid type"); +} +class ExtendVec extends BinaryOp { + constructor({ a, b }) { + const type = valType(a); + const outType = extendVecOutputType(type); + super({ a, b, outKey: "extend", outTypeFunc: () => outType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.extend} = ${outType}(${inputs.a}, ${inputs.b});` + ]; + } +} +class FaceForward extends TrinaryOp { + constructor({ a, b, c }) { + super({ + a, + b, + c, + outKey: "forward", + outTypeFunc: (aType, bType, cType) => aType + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.forward} = faceforward(${inputs.a}, ${inputs.b}, ${inputs.c});` + ]; + } +} +class ReflectVec extends BinaryOp { + constructor({ + incident, + normal + }) { + super({ + a: incident, + b: normal, + outKey: "reflection", + outTypeFunc: (aType, bType) => aType + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.reflection} = reflect(${inputs.a}, ${inputs.b});` + ]; + } +} +class RefractVec extends TrinaryOp { + constructor({ + incident, + normal, + eta + }) { + super({ + a: incident, + b: normal, + c: eta, + outKey: "refraction", + outTypeFunc: (aType, bType, cType) => aType + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.refraction} = refract(${inputs.a}, ${inputs.b}, ${inputs.c});` + ]; + } +} +class CompMult extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "product", outTypeFunc: (aType, bType) => aType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.product} = matrixCompMult(${a}, ${b});` + ]; + } +} +function outerOutputType(aType, bType) { + if (aType === "vec2") { + if (bType === "vec2") return "mat2"; + if (bType === "vec3") return "mat3x2"; + if (bType === "vec4") return "mat4x2"; + } + if (aType === "vec3") { + if (bType === "vec2") return "mat2x3"; + if (bType === "vec3") return "mat3"; + if (bType === "vec4") return "mat4x3"; + } + if (aType === "vec4") { + if (bType === "vec2") return "mat2x4"; + if (bType === "vec3") return "mat3x4"; + if (bType === "vec4") return "mat4"; + } + throw new Error(`Invalid outer type: ${aType}, ${bType}`); +} +class Outer extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "outer", outTypeFunc: outerOutputType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.outer} = outerProduct(${inputs.a}, ${inputs.b});` + ]; + } +} +function transposeOutputType(type) { + if (type === "mat2") return "mat2"; + if (type === "mat3") return "mat3"; + if (type === "mat4") return "mat4"; + if (type === "mat2x2") return "mat2x2"; + if (type === "mat2x3") return "mat3x2"; + if (type === "mat2x4") return "mat4x2"; + if (type === "mat3x2") return "mat2x3"; + if (type === "mat3x3") return "mat3x3"; + if (type === "mat3x4") return "mat4x3"; + if (type === "mat4x2") return "mat2x4"; + if (type === "mat4x3") return "mat3x4"; + if (type === "mat4x4") return "mat4x4"; + throw new Error(`Invalid transpose type: ${type}`); +} +class Transpose extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "transpose", outTypeFunc: transposeOutputType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.transpose} = transpose(${inputs.a});` + ]; + } +} +class Determinant extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "det", outTypeFunc: (aType) => "float" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.det} = determinant(${inputs.a});` + ]; + } +} +class Inverse extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "inverse", outTypeFunc: (aType) => aType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.inverse} = inverse(${a});` + ]; + } +} +function splitOutTypes(type) { + const result = (value) => value; + switch (type) { + case "vec2": + return result({ x: "float", y: "float", r: "float", g: "float" }); + case "vec3": + return result({ + x: "float", + y: "float", + z: "float", + r: "float", + g: "float", + b: "float" + }); + case "vec4": + return result({ + x: "float", + y: "float", + z: "float", + w: "float", + r: "float", + g: "float", + b: "float", + a: "float" + }); + case "ivec2": + return result({ x: "int", y: "int", r: "int", g: "int" }); + case "ivec3": + return result({ + x: "int", + y: "int", + z: "int", + r: "int", + g: "int", + b: "int" + }); + case "ivec4": + return result({ + x: "int", + y: "int", + z: "int", + w: "int", + r: "int", + g: "int", + b: "int", + a: "int" + }); + case "uvec2": + return result({ x: "uint", y: "uint", r: "uint", g: "uint" }); + case "uvec3": + return result({ + x: "uint", + y: "uint", + z: "uint", + r: "uint", + g: "uint", + b: "uint" + }); + case "uvec4": + return result({ + x: "uint", + y: "uint", + z: "uint", + w: "uint", + r: "uint", + g: "uint", + b: "uint", + a: "uint" + }); + default: + throw new Error(`Invalid vector type: ${type}`); + } +} +class Split extends Dyno { + constructor({ vector }) { + const type = valType(vector); + const inTypes = { vector: type }; + const outTypes = splitOutTypes(inTypes.vector); + super({ inTypes, outTypes, inputs: { vector } }); + this.statements = ({ inputs, outputs }) => { + const { x, y, z, w, r, g, b, a } = outputs; + const { vector: vector2 } = inputs; + return [ + x ? `${x} = ${vector2}.x;` : null, + y ? `${y} = ${vector2}.y;` : null, + z ? `${z} = ${vector2}.z;` : null, + w ? `${w} = ${vector2}.w;` : null, + r ? `${r} = ${vector2}.r;` : null, + g ? `${g} = ${vector2}.g;` : null, + b ? `${b} = ${vector2}.b;` : null, + a ? `${a} = ${vector2}.a;` : null + ].filter(Boolean); + }; + } +} +class Combine extends Dyno { + constructor({ + vector, + vectorType, + x, + y, + z, + w, + r, + g, + b, + a + }) { + if (!vector && !vectorType) { + throw new Error("Either vector or vectorType must be provided"); + } + const vType = vectorType ?? valType(vector); + const elType = vectorElementType(vType); + const dim = vectorDim(vType); + const inTypes = { + vector: vType, + x: elType, + y: elType, + r: elType, + g: elType + }; + const inputs = { vector, x, y, r, g }; + if (dim >= 3) { + Object.assign(inTypes, { z: elType, b: elType }); + Object.assign(inputs, { z, b }); + } + if (dim >= 4) { + Object.assign(inTypes, { w: elType, a: elType }); + Object.assign(inputs, { w, a }); + } + super({ inTypes, outTypes: { vector: vType }, inputs }); + this.statements = ({ inputs: inputs2, outputs }) => { + const { vector: vector2 } = outputs; + const { + vector: input, + x: x2, + y: y2, + z: z2, + w: w2, + r: r2, + g: g2, + b: b2, + a: a2 + } = inputs2; + const statements = [ + `${vector2}.x = ${x2 ?? r2 ?? (input ? `${input}.x` : literalZero(elType))};`, + `${vector2}.y = ${y2 ?? g2 ?? (input ? `${input}.y` : literalZero(elType))};` + ]; + if (dim >= 3) + statements.push( + `${vector2}.z = ${z2 ?? b2 ?? (input ? `${input}.z` : literalZero(elType))};` + ); + if (dim >= 4) + statements.push( + `${vector2}.w = ${w2 ?? a2 ?? (input ? `${input}.w` : literalZero(elType))};` + ); + return statements; + }; + } + dynoOut() { + return new DynoOutput( + this, + "vector" + ); + } +} +function swizzleOutputType(type, swizzle2) { + let result = null; + if (isFloatType(type)) { + result = swizzle2.length === 1 ? "float" : swizzle2.length === 2 ? "vec2" : swizzle2.length === 3 ? "vec3" : swizzle2.length === 4 ? "vec4" : null; + } else if (isIntType(type)) { + result = swizzle2.length === 1 ? "int" : swizzle2.length === 2 ? "ivec2" : swizzle2.length === 3 ? "ivec3" : swizzle2.length === 4 ? "ivec4" : null; + } else if (isUintType(type)) { + result = swizzle2.length === 1 ? "uint" : swizzle2.length === 2 ? "uvec2" : swizzle2.length === 3 ? "uvec3" : swizzle2.length === 4 ? "uvec4" : null; + } + if (result == null) { + throw new Error(`Invalid swizzle: ${swizzle2}`); + } + return result; +} +class Swizzle extends UnaryOp { + constructor({ vector, select: select2 }) { + super({ + a: vector, + outKey: "swizzle", + outTypeFunc: (aType) => swizzleOutputType(aType, select2) + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.swizzle} = ${inputs.a}.${select2};` + ]; + } +} +const remapIndex = (index, from, to) => { + return new DynoRemapIndex({ index, from, to }); +}; +const pcgMix = (value) => { + return new PcgMix({ value }); +}; +const pcgNext = (state) => { + return new PcgNext({ state }); +}; +const pcgHash = (state) => { + return new PcgHash({ state }); +}; +const hash = (value) => { + return new Hash({ value }); +}; +const hash2 = (value) => { + return new Hash2({ value }); +}; +const hash3 = (value) => { + return new Hash3({ value }); +}; +const hash4 = (value) => { + return new Hash4({ value }); +}; +const hashFloat = (value) => { + return new HashFloat({ value }); +}; +const hashVec2 = (value) => { + return new HashVec2({ value }); +}; +const hashVec3 = (value) => { + return new HashVec3({ value }); +}; +const hashVec4 = (value) => { + return new HashVec4({ value }); +}; +class DynoRemapIndex extends Dyno { + constructor({ + from, + to, + index + }) { + super({ + inTypes: { from: "int", to: "int", index: "int" }, + outTypes: { index: "int" }, + inputs: { from, to, index }, + statements: ({ inputs, outputs }) => { + return [ + `${outputs.index} = ${inputs.index} - ${inputs.from} + ${inputs.to};` + ]; + } + }); + } + dynoOut() { + return new DynoOutput(this, "index"); + } +} +class PcgNext extends Dyno { + constructor({ state }) { + const type = valType(state); + super({ + inTypes: { state: type }, + outTypes: { state: "uint" }, + inputs: { state }, + globals: () => [ + unindent(` + uint pcg_next(uint state) { + return state * 747796405u + 2891336453u; + } + `) + ], + statements: ({ inputs, outputs }) => { + const toUint = type === "uint" ? `${inputs.state}` : type === "int" ? `uint(${inputs.state})` : `floatBitsToUint(${inputs.state})`; + return [`${outputs.state} = pcg_next(${toUint});`]; + } + }); + } + dynoOut() { + return new DynoOutput(this, "state"); + } +} +class PcgHash extends Dyno { + constructor({ state }) { + super({ + inTypes: { state: "uint" }, + outTypes: { hash: "uint" }, + inputs: { state }, + globals: () => [ + unindent(` + uint pcg_hash(uint state) { + uint hash = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; + return (hash >> 22u) ^ hash; + } + `) + ], + statements: ({ inputs, outputs }) => [ + `${outputs.hash} = pcg_hash(${inputs.state});` + ] + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class PcgMix extends Dyno { + constructor({ value }) { + const type = valType(value); + const tempType = sameSizeUvec(type); + super({ + inTypes: { value: type }, + outTypes: { state: "uint" }, + inputs: { value }, + globals: () => [ + unindent(` + uint pcg_mix(uint value) { + return value; + } + uint pcg_mix(uvec2 value) { + return value.x + 0x9e3779b9u * value.y; + } + uint pcg_mix(uvec3 value) { + return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z; + } + uint pcg_mix(uvec4 value) { + return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z + 0xc2b2ae35u * value.w; + } + `) + ], + statements: ({ inputs, outputs }) => { + const toUvec = isUintType(type) ? `${inputs.value}` : isIntType(type) ? `${tempType}(${inputs.value})` : `floatBitsToUint(${inputs.value})`; + return [ + `${tempType} bits = ${toUvec};`, + `${outputs.state} = pcg_mix(bits);` + ]; + } + }); + } + dynoOut() { + return new DynoOutput(this, "state"); + } +} +class Hash extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "uint" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + let state = new PcgMix({ value: value2 }).outputs.state; + state = new PcgNext({ state }).outputs.state; + return new PcgHash({ state }).outputs; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class Hash2 extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "uvec2" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + let state = new PcgMix({ value: value2 }).outputs.state; + state = new PcgNext({ state }).outputs.state; + const x = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const y = new PcgHash({ state }).outputs.hash; + return { hash: combine({ vectorType: "uvec2", x, y }) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class Hash3 extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "uvec3" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + let state = new PcgMix({ value: value2 }).outputs.state; + state = new PcgNext({ state }).outputs.state; + const x = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const y = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const z = new PcgHash({ state }).outputs.hash; + return { hash: combine({ vectorType: "uvec3", x, y, z }) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class Hash4 extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "uvec4" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + let state = new PcgMix({ value: value2 }).outputs.state; + state = new PcgNext({ state }).outputs.state; + const x = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const y = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const z = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const w = new PcgHash({ state }).outputs.hash; + return { hash: combine({ vectorType: "uvec4", x, y, z, w }) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class HashFloat extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "float" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + const word = hash(value2); + return { hash: mul(float(word), dynoConst("float", 1 / 2 ** 32)) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class HashVec2 extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "vec2" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + const words = hash2(value2); + return { hash: mul(vec2(words), dynoConst("float", 1 / 2 ** 32)) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class HashVec3 extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "vec3" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + const words = hash3(value2); + return { hash: mul(vec3(words), dynoConst("float", 1 / 2 ** 32)) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class HashVec4 extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "vec4" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + const words = hash4(value2); + return { hash: mul(vec4(words), dynoConst("float", 1 / 2 ** 32)) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +const transformPos = (position, { + scale, + scales, + rotate, + translate +}) => { + return new TransformPosition({ position, scale, scales, rotate, translate }).outputs.position; +}; +const transformRay = (ray, { + scale, + scales, + rotate +}) => { + return new TransformRay({ ray, scale, scales, rotate }).outputs.ray; +}; +const transformQuat = (quaternion, { rotate }) => { + return new TransformQuaternion({ quaternion, rotate }).outputs.quaternion; +}; +class TransformPosition extends Dyno { + constructor({ + position, + scale, + scales, + rotate, + translate + }) { + super({ + inTypes: { + position: "vec3", + scale: "float", + scales: "vec3", + rotate: "vec4", + translate: "vec3" + }, + outTypes: { position: "vec3" }, + inputs: { position, scale, scales, rotate, translate }, + statements: ({ inputs, outputs }) => { + const { position: position2 } = outputs; + if (!position2) { + return []; + } + const { scale: scale2, scales: scales2, rotate: rotate2, translate: translate2 } = inputs; + return [ + `${position2} = ${inputs.position ?? "vec3(0.0, 0.0, 0.0)"};`, + !scale2 ? null : `${position2} *= ${scale2};`, + !scales2 ? null : `${position2} *= ${scales2};`, + !rotate2 ? null : `${position2} = quatVec(${rotate2}, ${position2});`, + !translate2 ? null : `${position2} += ${translate2};` + ].filter(Boolean); + } + }); + } +} +class TransformRay extends Dyno { + constructor({ + ray, + scale, + scales, + rotate + }) { + super({ + inTypes: { ray: "vec3", scale: "float", scales: "vec3", rotate: "vec4" }, + outTypes: { ray: "vec3" }, + inputs: { ray, scale, scales, rotate }, + statements: ({ inputs, outputs }) => { + const { ray: ray2 } = outputs; + if (!ray2) { + return []; + } + const { scale: scale2, scales: scales2, rotate: rotate2 } = inputs; + return [ + `${ray2} = ${inputs.ray ?? "vec3(0.0, 0.0, 0.0)"};`, + !scale2 ? null : `${ray2} *= ${scale2};`, + !scales2 ? null : `${ray2} *= ${scales2};`, + !rotate2 ? null : `${ray2} = quatVec(${rotate2}, ${ray2});` + ].filter(Boolean); + } + }); + } +} +class TransformQuaternion extends Dyno { + constructor({ + quaternion, + rotate + }) { + super({ + inTypes: { quaternion: "vec4", rotate: "vec4" }, + outTypes: { quaternion: "vec4" }, + inputs: { quaternion, rotate }, + statements: ({ inputs, outputs }) => { + const { quaternion: quaternion2 } = outputs; + if (!quaternion2) { + return []; + } + return [ + `${quaternion2} = ${inputs.quaternion ?? "vec4(0.0, 0.0, 0.0, 1.0)"};`, + !rotate ? null : `${quaternion2} = quatQuat(${inputs.rotate}, ${quaternion2});` + ].filter(Boolean); + } + }); + } +} +const dynoIf = () => { + throw new Error("Not implemented"); +}; +const dynoSwitch = () => { + throw new Error("Not implemented"); +}; +const dynoFor = () => { + throw new Error("Not implemented"); +}; +const comment = () => { + throw new Error("Not implemented"); +}; +const arrayIndex = () => { + throw new Error("Not implemented"); +}; +const arrayLength = () => { + throw new Error("Not implemented"); +}; +const textureSize = (texture2, lod) => new TextureSize({ texture: texture2, lod }); +const texture = (texture2, coord, bias) => new Texture({ texture: texture2, coord, bias }); +const texelFetch = (texture2, coord, lod) => new TexelFetch({ texture: texture2, coord, lod }); +class TextureSize extends Dyno { + constructor({ texture: texture2, lod }) { + const textureType = valType(texture2); + super({ + inTypes: { texture: textureType, lod: "int" }, + outTypes: { size: textureSizeType(textureType) }, + inputs: { texture: texture2, lod }, + statements: ({ inputs, outputs }) => [ + `${outputs.size} = textureSize(${inputs.texture}, ${inputs.lod ?? "0"});` + ] + }); + } + dynoOut() { + return new DynoOutput(this, "size"); + } +} +class Texture extends Dyno { + constructor({ + texture: texture2, + coord, + bias + }) { + const textureType = valType(texture2); + super({ + inTypes: { + texture: textureType, + coord: textureCoordType(textureType), + bias: "float" + }, + outTypes: { sample: textureReturnType(textureType) }, + inputs: { texture: texture2, coord, bias }, + statements: ({ inputs, outputs }) => [ + `${outputs.sample} = texture(${inputs.texture}, ${inputs.coord}${inputs.bias ? `, ${inputs.bias}` : ""});` + ] + }); + } + dynoOut() { + return new DynoOutput(this, "sample"); + } +} +class TexelFetch extends Dyno { + constructor({ + texture: texture2, + coord, + lod + }) { + const textureType = valType(texture2); + super({ + inTypes: { + texture: textureType, + coord: textureSizeType(textureType), + lod: "int" + }, + outTypes: { texel: textureReturnType(textureType) }, + inputs: { texture: texture2, coord, lod }, + statements: ({ inputs, outputs }) => [ + `${outputs.texel} = texelFetch(${inputs.texture}, ${inputs.coord}, ${inputs.lod ?? "0"});` + ] + }); + } + dynoOut() { + return new DynoOutput(this, "texel"); + } +} +function textureSizeType(textureType) { + switch (textureType) { + case "sampler2D": + case "usampler2D": + case "isampler2D": + case "samplerCube": + case "usamplerCube": + case "isamplerCube": + case "sampler2DShadow": + case "samplerCubeShadow": + return "ivec2"; + case "sampler3D": + case "usampler3D": + case "isampler3D": + case "sampler2DArray": + case "usampler2DArray": + case "isampler2DArray": + case "sampler2DArrayShadow": + return "ivec3"; + default: + throw new Error(`Invalid texture type: ${textureType}`); + } +} +function textureCoordType(textureType) { + switch (textureType) { + case "sampler2D": + case "usampler2D": + case "isampler2D": + return "vec2"; + case "sampler3D": + case "usampler3D": + case "isampler3D": + case "samplerCube": + case "usamplerCube": + case "isamplerCube": + case "sampler2DArray": + case "usampler2DArray": + case "isampler2DArray": + case "sampler2DShadow": + return "vec3"; + case "samplerCubeShadow": + case "sampler2DArrayShadow": + return "vec4"; + default: + throw new Error(`Invalid texture type: ${textureType}`); + } +} +function textureReturnType(textureType) { + switch (textureType) { + case "sampler2D": + case "sampler2DArray": + case "sampler3D": + case "samplerCube": + case "sampler2DShadow": + return "vec4"; + case "usampler2D": + case "usampler2DArray": + case "usampler3D": + case "usamplerCube": + return "uvec4"; + case "isampler2D": + case "isampler2DArray": + case "isampler3D": + case "isamplerCube": + return "ivec4"; + case "samplerCubeShadow": + case "sampler2DArrayShadow": + return "float"; + default: + throw new Error(`Invalid texture type: ${textureType}`); + } +} +const radians = (degrees2) => new Radians({ degrees: degrees2 }); +const degrees = (radians2) => new Degrees({ radians: radians2 }); +const sin = (radians2) => new Sin({ radians: radians2 }); +const cos = (radians2) => new Cos({ radians: radians2 }); +const tan = (radians2) => new Tan({ radians: radians2 }); +const asin = (sin2) => new Asin({ sin: sin2 }); +const acos = (cos2) => new Acos({ cos: cos2 }); +const atan = (tan2) => new Atan({ tan: tan2 }); +const atan2 = (y, x) => new Atan2({ y, x }); +const sinh = (x) => new Sinh({ x }); +const cosh = (x) => new Cosh({ x }); +const tanh = (x) => new Tanh({ x }); +const asinh = (x) => new Asinh({ x }); +const acosh = (x) => new Acosh({ x }); +const atanh = (x) => new Atanh({ x }); +class Radians extends UnaryOp { + constructor({ degrees: degrees2 }) { + super({ a: degrees2, outTypeFunc: (aType) => aType, outKey: "radians" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.radians} = radians(${inputs.a});` + ]; + } +} +class Degrees extends UnaryOp { + constructor({ radians: radians2 }) { + super({ a: radians2, outTypeFunc: (aType) => aType, outKey: "degrees" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.degrees} = degrees(${inputs.a});` + ]; + } +} +class Sin extends UnaryOp { + constructor({ radians: radians2 }) { + super({ a: radians2, outTypeFunc: (aType) => aType, outKey: "sin" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.sin} = sin(${inputs.a});` + ]; + } +} +class Cos extends UnaryOp { + constructor({ radians: radians2 }) { + super({ a: radians2, outTypeFunc: (aType) => aType, outKey: "cos" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.cos} = cos(${inputs.a});` + ]; + } +} +class Tan extends UnaryOp { + constructor({ radians: radians2 }) { + super({ a: radians2, outTypeFunc: (aType) => aType, outKey: "tan" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.tan} = tan(${inputs.a});` + ]; + } +} +class Asin extends UnaryOp { + constructor({ sin: sin2 }) { + super({ a: sin2, outTypeFunc: (aType) => aType, outKey: "asin" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.asin} = asin(${inputs.a});` + ]; + } +} +class Acos extends UnaryOp { + constructor({ cos: cos2 }) { + super({ a: cos2, outTypeFunc: (aType) => aType, outKey: "acos" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.acos} = acos(${inputs.a});` + ]; + } +} +class Atan extends UnaryOp { + constructor({ tan: tan2 }) { + super({ a: tan2, outTypeFunc: (aType) => aType, outKey: "atan" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.atan} = atan(${inputs.a});` + ]; + } +} +class Atan2 extends BinaryOp { + constructor({ y, x }) { + super({ + a: y, + b: x, + outTypeFunc: (aType, bType) => aType, + outKey: "atan2" + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.atan2} = atan2(${inputs.a}, ${inputs.b});` + ]; + } +} +class Sinh extends UnaryOp { + constructor({ x }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "sinh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.sinh} = sinh(${inputs.a});` + ]; + } +} +class Cosh extends UnaryOp { + constructor({ x }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "cosh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.cosh} = cosh(${inputs.a});` + ]; + } +} +class Tanh extends UnaryOp { + constructor({ x }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "tanh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.tanh} = tanh(${inputs.a});` + ]; + } +} +class Asinh extends UnaryOp { + constructor({ x }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "asinh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.asinh} = asinh(${inputs.a});` + ]; + } +} +class Acosh extends UnaryOp { + constructor({ x }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "acosh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.acosh} = acosh(${inputs.a});` + ]; + } +} +class Atanh extends UnaryOp { + constructor({ x }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "atanh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.atanh} = atanh(${inputs.a});` + ]; + } +} +const dyno = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + Abs, + Acos, + Acosh, + Add, + All, + And, + Any, + Asin, + Asinh, + Atan, + Atan2, + Atanh, + BVec2, + BVec3, + BVec4, + BinaryOp, + Bool, + Ceil, + Clamp, + Combine, + CombineGsplat, + CompMult, + CompXor, + Compilation, + Cos, + Cosh, + Cross, + Degrees, + Determinant, + Distance, + Div, + Dot, + Dyno, + DynoBlock, + DynoBool, + DynoBvec2, + DynoBvec3, + DynoBvec4, + DynoConst, + DynoFloat, + DynoInt, + DynoIsampler2D, + DynoIsampler2DArray, + DynoIsampler3D, + DynoIsamplerCube, + DynoIvec2, + DynoIvec3, + DynoIvec4, + DynoLiteral, + DynoMat2, + DynoMat2x2, + DynoMat2x3, + DynoMat2x4, + DynoMat3, + DynoMat3x2, + DynoMat3x3, + DynoMat3x4, + DynoMat4, + DynoMat4x2, + DynoMat4x3, + DynoMat4x4, + DynoOutput, + DynoProgram, + DynoProgramTemplate, + DynoRemapIndex, + DynoSampler2D, + DynoSampler2DArray, + DynoSampler2DArrayShadow, + DynoSampler2DShadow, + DynoSampler3D, + DynoSamplerCube, + DynoSamplerCubeShadow, + DynoUint, + DynoUniform, + DynoUsampler2D, + DynoUsampler2DArray, + DynoUsampler3D, + DynoUsamplerCube, + DynoUvec2, + DynoUvec3, + DynoUvec4, + DynoValue, + DynoVec2, + DynoVec3, + DynoVec4, + Equal, + Exp, + Exp2, + ExtendVec, + FaceForward, + Float, + FloatBitsToInt, + FloatBitsToUint, + Floor, + Fract, + GreaterThan, + GreaterThanEqual, + Gsplat, + GsplatNormal, + Hash, + Hash2, + Hash3, + Hash4, + HashFloat, + HashVec2, + HashVec3, + HashVec4, + IMod, + IVec2, + IVec3, + IVec4, + Int, + IntBitsToFloat, + Inverse, + InverseSqrt, + IsInf, + IsNan, + Length, + LessThan, + LessThanEqual, + Log, + Log2, + Mat2, + Mat3, + Mat4, + Max, + Min, + Mix, + Mod, + Modf, + Mul, + Neg, + Normalize, + Not, + NotEqual, + NumPackedSplats, + Or, + Outer, + OutputPackedSplat, + OutputRgba8, + PackHalf2x16, + PackSnorm2x16, + PackUnorm2x16, + PcgHash, + PcgMix, + PcgNext, + Pow, + ProjectH, + Radians, + ReadPackedSplat, + ReadPackedSplatRange, + ReflectVec, + RefractVec, + Round, + Select, + Sign, + SimpleCast, + Sin, + Sinh, + Smoothstep, + Split, + SplitGsplat, + Sqr, + Sqrt, + Step, + Sub, + Swizzle, + TPackedSplats, + Tan, + Tanh, + TexelFetch, + Texture, + TextureSize, + TransformGsplat, + TransformPosition, + TransformQuaternion, + TransformRay, + Transpose, + TrinaryOp, + Trunc, + UVec2, + UVec3, + UVec4, + Uint, + UintBitsToFloat, + UintToRgba8, + UnaryOp, + UnpackHalf2x16, + UnpackSnorm2x16, + UnpackUnorm2x16, + Vec2, + Vec3, + Vec4, + Xor, + abs, + acos, + acosh, + add, + all, + and, + any, + arrayIndex, + arrayLength, + asin, + asinh, + atan, + atan2, + atanh, + bool, + bvec2, + bvec3, + bvec4, + ceil, + clamp, + combine, + combineGsplat, + comment, + compMult, + compXor, + cos, + cosh, + cross, + defineGsplat, + defineGsplatNormal, + definePackedSplats, + degrees, + determinant, + distance, + div, + dot, + dyno: dyno$1, + dynoBlock, + dynoBool, + dynoBvec2, + dynoBvec3, + dynoBvec4, + dynoConst, + dynoDeclare, + dynoFloat, + dynoFor, + dynoIf, + dynoInt, + dynoIsampler2D, + dynoIsampler2DArray, + dynoIsampler3D, + dynoIsamplerCube, + dynoIvec2, + dynoIvec3, + dynoIvec4, + dynoLiteral, + dynoMat2, + dynoMat2x2, + dynoMat2x3, + dynoMat2x4, + dynoMat3, + dynoMat3x2, + dynoMat3x3, + dynoMat3x4, + dynoMat4, + dynoMat4x2, + dynoMat4x3, + dynoMat4x4, + dynoSampler2D, + dynoSampler2DArray, + dynoSampler2DArrayShadow, + dynoSampler2DShadow, + dynoSampler3D, + dynoSamplerCube, + dynoSamplerCubeShadow, + dynoSwitch, + dynoUint, + dynoUsampler2D, + dynoUsampler2DArray, + dynoUsampler3D, + dynoUsamplerCube, + dynoUvec2, + dynoUvec3, + dynoUvec4, + dynoVec2, + dynoVec3, + dynoVec4, + equal, + exp, + exp2, + extendVec, + faceforward, + float, + floatBitsToInt, + floatBitsToUint, + floor, + fract, + greaterThan, + greaterThanEqual, + gsplatNormal, + hash, + hash2, + hash3, + hash4, + hashFloat, + hashVec2, + hashVec3, + hashVec4, + imod, + int, + intBitsToFloat, + inverse, + inversesqrt, + isAllFloatType, + isBoolType, + isFloatType, + isInf, + isIntType, + isMat2, + isMat3, + isMat4, + isMatFloatType, + isNan, + isScalarType, + isUintType, + isVector2Type, + isVector3Type, + isVector4Type, + isVectorType, + ivec2, + ivec3, + ivec4, + length, + lessThan, + lessThanEqual, + literalNegOne, + literalOne, + literalZero, + log, + log2, + mat2, + mat3, + mat4, + max, + min, + mix, + mod, + modf, + mul, + neg, + normalize, + not, + notEqual, + numPackedSplats, + numberAsFloat, + numberAsInt, + numberAsUint, + or, + outer, + outputPackedSplat, + outputRgba8, + packHalf2x16, + packSnorm2x16, + packUnorm2x16, + pcgHash, + pcgMix, + pcgNext, + pow, + projectH, + radians, + readPackedSplat, + readPackedSplatRange, + reflectVec, + refractVec, + remapIndex, + round, + sameSizeIvec, + sameSizeUvec, + sameSizeVec, + select, + sign, + sin, + sinh, + smoothstep, + split, + splitGsplat, + sqr, + sqrt, + step, + sub, + swizzle, + tan, + tanh, + texelFetch, + texture, + textureSize, + transformGsplat, + transformPos, + transformQuat, + transformRay, + transpose, + trunc, + typeLiteral, + uint, + uintBitsToFloat, + uintToRgba8, + uniform, + unindent, + unindentLines, + unpackHalf2x16, + unpackSnorm2x16, + unpackUnorm2x16, + uvec2, + uvec3, + uvec4, + valType, + vec2, + vec3, + vec4, + vectorDim, + vectorElementType, + xor +}, Symbol.toStringTag, { value: "Module" })); +var computeVec4_default = "precision highp float;\nprecision highp int;\nprecision highp sampler2D;\nprecision highp usampler2D;\nprecision highp isampler2D;\nprecision highp sampler2DArray;\nprecision highp usampler2DArray;\nprecision highp isampler2DArray;\nprecision highp sampler3D;\nprecision highp usampler3D;\nprecision highp isampler3D;\n\n#include \n\nuniform uint targetLayer;\nuniform int targetBase;\nuniform int targetCount;\n\nout vec4 target;\n\n{{ GLOBALS }}\n\nvoid computeReadback(int index) {\n {{ STATEMENTS }}\n}\n\nvoid main() {\n int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x);\n int index = targetIndex - targetBase;\n\n if ((index >= 0) && (index < targetCount)) {\n computeReadback(index);\n } else {\n target = vec4(0.0, 0.0, 0.0, 0.0);\n }\n}"; +const _Readback = class _Readback { + constructor({ renderer } = {}) { + this.renderer = renderer; + this.capacity = 0; + this.count = 0; + } + dispose() { + if (this.target) { + this.target.dispose(); + this.target = void 0; + } + } + // Ensure we have a buffer large enough for the readback of count indices. + // Pass in previous bufer of the desired type. + ensureBuffer(count, buffer) { + const roundedCount = Math.ceil(Math.max(1, count) / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + const bytes = roundedCount * 4; + if (buffer.byteLength >= bytes) { + return buffer; + } + const newBuffer = new ArrayBuffer(bytes); + if (buffer instanceof ArrayBuffer) { + return newBuffer; + } + const ctor = buffer.constructor; + return new ctor(newBuffer); + } + // Ensure our render target is large enough for the readback of capacity indices. + ensureCapacity(capacity) { + const { width, height, depth, maxSplats } = getTextureSize(capacity); + if (!this.target || maxSplats > this.capacity) { + this.dispose(); + this.capacity = maxSplats; + this.target = new THREE__namespace.WebGLArrayRenderTarget(width, height, depth, { + depthBuffer: false, + stencilBuffer: false, + generateMipmaps: false, + magFilter: THREE__namespace.NearestFilter, + minFilter: THREE__namespace.NearestFilter + }); + this.target.texture.format = THREE__namespace.RGBAFormat; + this.target.texture.type = THREE__namespace.UnsignedByteType; + this.target.texture.internalFormat = "RGBA8"; + } + } + // Get a program and THREE.RawShaderMaterial for a given Rgba8Readback, + // generating it if necessary and caching the result. + prepareProgramMaterial(reader) { + let program = _Readback.readbackProgram.get(reader); + if (!program) { + const graph = dynoBlock( + { index: "int" }, + { rgba8: "vec4" }, + ({ index }) => { + reader.inputs.index = index; + const rgba8 = new OutputRgba8({ rgba8: reader.outputs.rgba8 }); + return { rgba8 }; + } + ); + if (!_Readback.programTemplate) { + _Readback.programTemplate = new DynoProgramTemplate(computeVec4_default); + } + program = new DynoProgram({ + graph, + inputs: { index: "index" }, + outputs: { rgba8: "target" }, + template: _Readback.programTemplate + }); + Object.assign(program.uniforms, { + targetLayer: { value: 0 }, + targetBase: { value: 0 }, + targetCount: { value: 0 } + }); + _Readback.readbackProgram.set(reader, program); + } + const material = program.prepareMaterial(); + _Readback.mesh.material = material; + return { program, material }; + } + saveRenderState(renderer) { + return { + xrPresenting: renderer.xr.isPresenting, + autoClear: renderer.autoClear, + scissorTest: renderer.getScissorTest() + }; + } + resetRenderState(renderer, state) { + renderer.setRenderTarget(null); + renderer.xr.isPresenting = state.xrPresenting; + renderer.autoClear = state.autoClear; + renderer.setScissorTest(state.scissorTest); + } + process({ + count, + material + }) { + const renderer = this.renderer; + if (!renderer) { + throw new Error("No renderer"); + } + if (!this.target) { + throw new Error("No target"); + } + const layerSize = SPLAT_TEX_WIDTH * SPLAT_TEX_HEIGHT; + material.uniforms.targetBase.value = 0; + material.uniforms.targetCount.value = count; + let baseIndex = 0; + while (baseIndex < count) { + const layer = Math.floor(baseIndex / layerSize); + const layerBase = layer * layerSize; + const layerYEnd = Math.min( + SPLAT_TEX_HEIGHT, + Math.ceil((count - layerBase) / SPLAT_TEX_WIDTH) + ); + material.uniforms.targetLayer.value = layer; + renderer.setRenderTarget(this.target, layer); + renderer.xr.isPresenting = false; + renderer.autoClear = false; + renderer.setScissorTest(true); + renderer.setScissor(0, 0, SPLAT_TEX_WIDTH, layerYEnd); + renderer.render(_Readback.scene, _Readback.camera); + baseIndex += SPLAT_TEX_WIDTH * layerYEnd; + } + this.count = count; + } + async read({ + readback + }) { + const renderer = this.renderer; + if (!renderer) { + throw new Error("No renderer"); + } + if (!this.target) { + throw new Error("No target"); + } + const roundedCount = Math.ceil(this.count / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + if (readback.byteLength < roundedCount * 4) { + throw new Error( + `Readback buffer too small: ${readback.byteLength} < ${roundedCount * 4}` + ); + } + const readbackUint8 = new Uint8Array( + readback instanceof ArrayBuffer ? readback : readback.buffer + ); + const layerSize = SPLAT_TEX_WIDTH * SPLAT_TEX_HEIGHT; + let baseIndex = 0; + const promises = []; + while (baseIndex < this.count) { + const layer = Math.floor(baseIndex / layerSize); + const layerBase = layer * layerSize; + const layerYEnd = Math.min( + SPLAT_TEX_HEIGHT, + Math.ceil((this.count - layerBase) / SPLAT_TEX_WIDTH) + ); + renderer.setRenderTarget(this.target, layer); + const readbackSize = SPLAT_TEX_WIDTH * layerYEnd * 4; + const subReadback = readbackUint8.subarray( + layerBase * 4, + layerBase * 4 + readbackSize + ); + const promise = renderer == null ? void 0 : renderer.readRenderTargetPixelsAsync( + this.target, + 0, + 0, + SPLAT_TEX_WIDTH, + layerYEnd, + subReadback + ); + promises.push(promise); + baseIndex += SPLAT_TEX_WIDTH * layerYEnd; + } + return Promise.all(promises).then(() => readback); + } + // Perform render operation to run the Rgba8Readback program + // but don't perform the readback yet. + render({ + reader, + count, + renderer + }) { + this.renderer = renderer || this.renderer; + if (!this.renderer) { + throw new Error("No renderer"); + } + this.ensureCapacity(count); + const { program, material } = this.prepareProgramMaterial(reader); + program.update(); + const renderState = this.saveRenderState(this.renderer); + this.process({ count, material }); + this.resetRenderState(this.renderer, renderState); + } + // Perform a readback of the render target, returning a buffer of the + // given type. + async readback({ + readback + }) { + if (!this.renderer) { + throw new Error("No renderer"); + } + const renderState = this.saveRenderState(this.renderer); + const promise = this.read({ readback }); + this.resetRenderState(this.renderer, renderState); + return promise; + } + // Perform a render and readback operation for the given Rgba8Readback, + // and readback buffer (call ensureBuffer first). + async renderReadback({ + reader, + count, + renderer, + readback + }) { + this.renderer = renderer || this.renderer; + if (!this.renderer) { + throw new Error("No renderer"); + } + this.ensureCapacity(count); + const { program, material } = this.prepareProgramMaterial(reader); + program.update(); + const renderState = this.saveRenderState(this.renderer); + this.process({ count, material }); + const promise = this.read({ readback }); + this.resetRenderState(this.renderer, renderState); + return promise; + } + getTexture() { + var _a2; + return (_a2 = this.target) == null ? void 0 : _a2.texture; + } +}; +_Readback.programTemplate = null; +_Readback.readbackProgram = /* @__PURE__ */ new Map(); +_Readback.geometry = new THREE__namespace.PlaneGeometry(2, 2); +_Readback.mesh = new THREE__namespace.Mesh( + _Readback.geometry, + new THREE__namespace.RawShaderMaterial({ visible: false }) +); +_Readback.scene = new THREE__namespace.Scene().add(_Readback.mesh); +_Readback.camera = new THREE__namespace.Camera(); +let Readback = _Readback; +const _RgbaArray = class _RgbaArray { + constructor(options = {}) { + this.capacity = 0; + this.count = 0; + this.array = null; + this.readback = null; + this.source = null; + this.needsUpdate = true; + this.dyno = new DynoUniform({ + key: "rgbaArray", + type: TRgbaArray, + globals: () => [defineRgbaArray], + value: { + texture: _RgbaArray.getEmpty(), + count: 0 + }, + update: (value) => { + var _a2; + value.texture = ((_a2 = this.readback) == null ? void 0 : _a2.getTexture()) ?? this.source ?? _RgbaArray.getEmpty(); + value.count = this.count; + return value; + } + }); + if (options.array) { + this.array = options.array; + this.capacity = Math.floor(this.array.length / 4); + this.capacity = Math.floor(this.capacity / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + this.count = Math.min( + this.capacity, + options.count ?? Number.POSITIVE_INFINITY + ); + } else { + this.capacity = options.capacity ?? 0; + this.count = 0; + } + } + // Free up resources + dispose() { + if (this.readback) { + this.readback.dispose(); + this.readback = null; + } + if (this.source) { + this.source.dispose(); + this.source = null; + } + } + // Ensure that our array is large enough to hold capacity RGBA8 values. + ensureCapacity(capacity) { + var _a2; + if (!this.array || capacity > (((_a2 = this.array) == null ? void 0 : _a2.length) ?? 0) / 4) { + this.capacity = getTextureSize(capacity).maxSplats; + const newArray2 = new Uint8Array(this.capacity * 4); + if (this.array) { + newArray2.set(this.array); + } + this.array = newArray2; + } + return this.array; + } + // Get the THREE.DataArrayTexture from either the readback or the source. + getTexture() { + var _a2; + let texture2 = (_a2 = this.readback) == null ? void 0 : _a2.getTexture(); + if (this.source || this.array) { + texture2 = this.maybeUpdateSource(); + } + return texture2 ?? _RgbaArray.getEmpty(); + } + // Create or get a THREE.DataArrayTexture from the data array. + maybeUpdateSource() { + if (!this.array) { + throw new Error("No array"); + } + if (this.needsUpdate || !this.source) { + this.needsUpdate = false; + if (this.source) { + const { width, height, depth } = this.source.image; + if (this.capacity !== width * height * depth) { + this.source.dispose(); + this.source = null; + } + } + if (!this.source) { + const { width, height, depth } = getTextureSize(this.capacity); + this.source = new THREE__namespace.DataArrayTexture( + this.array, + width, + height, + depth + ); + this.source.format = THREE__namespace.RGBAFormat; + this.source.type = THREE__namespace.UnsignedByteType; + this.source.internalFormat = "RGBA8"; + this.source.needsUpdate = true; + } else if (this.array.buffer !== this.source.image.data.buffer) { + this.source.image.data = new Uint8Array(this.array.buffer); + } + this.source.needsUpdate = true; + } + return this.source; + } + // Generate the RGBA8 values from a Rgba8Readback dyno program. + render({ + reader, + count, + renderer + }) { + if (!this.readback) { + this.readback = new Readback({ renderer }); + } + this.readback.render({ reader, count, renderer }); + this.capacity = this.readback.capacity; + this.count = this.readback.count; + } + // Extract the RGBA8 values from a PackedSplats collection. + fromPackedSplats({ + packedSplats, + base, + count, + renderer + }) { + const { dynoSplats, dynoBase, dynoCount, reader } = _RgbaArray.makeDynos(); + dynoSplats.packedSplats = packedSplats; + dynoBase.value = base; + dynoCount.value = count; + this.render({ reader, count, renderer }); + return this; + } + // Read back the RGBA8 values from the readback buffer. + async read() { + if (!this.readback) { + throw new Error("No readback"); + } + if (!this.array || this.array.length < this.count * 4) { + this.array = new Uint8Array(this.capacity * 4); + } + const result = await this.readback.readback({ readback: this.array }); + return result.subarray(0, this.count * 4); + } + // Can be used where you need an uninitialized THREE.DataArrayTexture like + // a uniform you will update with the result of this.getTexture() later. + static getEmpty() { + if (!_RgbaArray.emptySource) { + const emptyArray = new Uint8Array(1 * 4); + _RgbaArray.emptySource = new THREE__namespace.DataArrayTexture(emptyArray, 1, 1, 1); + _RgbaArray.emptySource.format = THREE__namespace.RGBAFormat; + _RgbaArray.emptySource.type = THREE__namespace.UnsignedByteType; + _RgbaArray.emptySource.internalFormat = "RGBA8"; + _RgbaArray.emptySource.needsUpdate = true; + } + return _RgbaArray.emptySource; + } + // Create a dyno program that can extract RGBA8 values from a PackedSplats + static makeDynos() { + if (!_RgbaArray.dynos) { + const dynoSplats = new DynoPackedSplats(); + const dynoBase = new DynoInt({ value: 0 }); + const dynoCount = new DynoInt({ value: 0 }); + const reader = dynoBlock( + { index: "int" }, + { rgba8: "vec4" }, + ({ index }) => { + if (!index) { + throw new Error("index is undefined"); + } + index = add(index, dynoBase); + const gsplat = readPackedSplatRange( + dynoSplats, + index, + dynoBase, + dynoCount + ); + return { rgba8: splitGsplat(gsplat).outputs.rgba }; + } + ); + _RgbaArray.dynos = { dynoSplats, dynoBase, dynoCount, reader }; + } + return _RgbaArray.dynos; + } +}; +_RgbaArray.emptySource = null; +_RgbaArray.dynos = null; +let RgbaArray = _RgbaArray; +const TRgbaArray = { type: "RgbaArray" }; +const defineRgbaArray = unindent(` + struct RgbaArray { + sampler2DArray texture; + int count; + }; +`); +function readRgbaArray(rgba, index) { + const dyno2 = new Dyno({ + inTypes: { rgba: TRgbaArray, index: "int" }, + outTypes: { rgba: "vec4" }, + inputs: { rgba, index }, + globals: () => [defineRgbaArray], + statements: ({ inputs, outputs }) => unindentLines(` + if ((index >= 0) && (index < ${inputs.rgba}.count)) { + ${outputs.rgba} = texelFetch(${inputs.rgba}.texture, splatTexCoord(index), 0); + } else { + ${outputs.rgba} = vec4(0.0, 0.0, 0.0, 0.0); + } + `) + }); + return dyno2.outputs.rgba; +} +var SplatEditSdfType = /* @__PURE__ */ ((SplatEditSdfType2) => { + SplatEditSdfType2["ALL"] = "all"; + SplatEditSdfType2["PLANE"] = "plane"; + SplatEditSdfType2["SPHERE"] = "sphere"; + SplatEditSdfType2["BOX"] = "box"; + SplatEditSdfType2["ELLIPSOID"] = "ellipsoid"; + SplatEditSdfType2["CYLINDER"] = "cylinder"; + SplatEditSdfType2["CAPSULE"] = "capsule"; + SplatEditSdfType2["INFINITE_CONE"] = "infinite_cone"; + return SplatEditSdfType2; +})(SplatEditSdfType || {}); +function sdfTypeToNumber(type) { + switch (type) { + case "all": + return 0; + case "plane": + return 1; + case "sphere": + return 2; + case "box": + return 3; + case "ellipsoid": + return 4; + case "cylinder": + return 5; + case "capsule": + return 6; + case "infinite_cone": + return 7; + default: + throw new Error(`Unknown SDF type: ${type}`); + } +} +var SplatEditRgbaBlendMode = /* @__PURE__ */ ((SplatEditRgbaBlendMode2) => { + SplatEditRgbaBlendMode2["MULTIPLY"] = "multiply"; + SplatEditRgbaBlendMode2["SET_RGB"] = "set_rgb"; + SplatEditRgbaBlendMode2["ADD_RGBA"] = "add_rgba"; + return SplatEditRgbaBlendMode2; +})(SplatEditRgbaBlendMode || {}); +function rgbaBlendModeToNumber(mode) { + switch (mode) { + case "multiply": + return 0; + case "set_rgb": + return 1; + case "add_rgba": + return 2; + default: + throw new Error(`Unknown blend mode: ${mode}`); + } +} +class SplatEditSdf extends THREE__namespace.Object3D { + constructor(options = {}) { + super(); + const { type, invert, opacity, color, displace, radius } = options; + this.type = type ?? "sphere"; + this.invert = invert ?? false; + this.opacity = opacity ?? 1; + this.color = color ?? new THREE__namespace.Color(1, 1, 1); + this.displace = displace ?? new THREE__namespace.Vector3(0, 0, 0); + this.radius = radius ?? 0; + } +} +const _SplatEdit = class _SplatEdit extends THREE__namespace.Object3D { + constructor(options = {}) { + const { + name, + rgbaBlendMode = "multiply", + sdfSmooth = 0, + softEdge = 0, + invert = false, + sdfs = null + } = options; + super(); + this.rgbaBlendMode = rgbaBlendMode; + this.sdfSmooth = sdfSmooth; + this.softEdge = softEdge; + this.invert = invert; + this.sdfs = sdfs; + this.ordering = _SplatEdit.nextOrdering++; + this.name = name ?? `Edit ${this.ordering}`; + } + addSdf(sdf) { + if (this.sdfs == null) { + this.sdfs = []; + } + this.sdfs.push(sdf); + } + removeSdf(sdf) { + if (this.sdfs == null) { + return; + } + this.sdfs = this.sdfs.filter((s) => s !== sdf); + } +}; +_SplatEdit.nextOrdering = 1; +let SplatEdit = _SplatEdit; +class SplatEdits { + constructor({ maxSdfs, maxEdits }) { + this.maxSdfs = Math.max(16, maxSdfs ?? 0); + this.numSdfs = 0; + this.sdfData = new Uint32Array(this.maxSdfs * 8 * 4); + this.sdfFloatData = new Float32Array(this.sdfData.buffer); + this.sdfTexture = this.newSdfTexture(this.sdfData, this.maxSdfs); + this.dynoSdfArray = new DynoUniform({ + key: "sdfArray", + type: SdfArray, + globals: () => [defineSdfArray], + value: { + numSdfs: 0, + sdfTexture: this.sdfTexture + }, + update: (uniform2) => { + uniform2.numSdfs = this.numSdfs; + uniform2.sdfTexture = this.sdfTexture; + return uniform2; + } + }); + this.maxEdits = Math.max(16, maxEdits ?? 0); + this.numEdits = 0; + this.editData = new Uint32Array(this.maxEdits * 4); + this.editFloatData = new Float32Array(this.editData.buffer); + this.dynoNumEdits = new DynoInt({ value: 0 }); + this.dynoEdits = this.newEdits(this.editData, this.maxEdits); + } + newSdfTexture(data, maxSdfs) { + const texture2 = new THREE__namespace.DataTexture( + data, + 8, + maxSdfs, + THREE__namespace.RGBAIntegerFormat, + THREE__namespace.UnsignedIntType + ); + texture2.internalFormat = "RGBA32UI"; + texture2.needsUpdate = true; + return texture2; + } + newEdits(data, maxEdits) { + return new DynoUniform({ + key: "edits", + type: "uvec4", + count: maxEdits, + globals: () => [defineEdit], + value: data + }); + } + // Ensure our SDF texture and edits uniform array have enough capacity. + // Reallocate if not. + ensureCapacity({ + maxSdfs, + maxEdits + }) { + let dynoUpdated = false; + if (maxSdfs > this.sdfTexture.image.height) { + this.sdfTexture.dispose(); + this.maxSdfs = Math.max(this.maxSdfs * 2, maxSdfs); + this.sdfData = new Uint32Array(this.maxSdfs * 8 * 4); + this.sdfFloatData = new Float32Array(this.sdfData.buffer); + this.sdfTexture = this.newSdfTexture(this.sdfData, this.maxSdfs); + } + if (maxEdits > (this.dynoEdits.count ?? 0)) { + this.maxEdits = Math.max(this.maxEdits * 2, maxEdits); + this.editData = new Uint32Array(this.maxEdits * 4); + this.editFloatData = new Float32Array(this.editData.buffer); + this.dynoEdits = this.newEdits(this.editData, this.maxEdits); + dynoUpdated = true; + } + return dynoUpdated; + } + updateEditData(offset, value) { + const updated = this.editData[offset] !== value; + this.editData[offset] = value; + return updated; + } + updateEditFloatData(offset, value) { + tempFloat32[0] = value; + const updated = this.editFloatData[offset] !== tempFloat32[0]; + if (updated) { + this.editFloatData[offset] = tempFloat32[0]; + } + return updated; + } + encodeEdit(editIndex, { + sdfFirst, + sdfCount, + invert, + rgbaBlendMode, + softEdge, + sdfSmooth + }) { + const base = editIndex * 4; + let updated = false; + updated = this.updateEditData(base + 0, rgbaBlendMode | (invert ? 1 << 8 : 0)) || updated; + updated = this.updateEditData(base + 1, sdfFirst | sdfCount << 16) || updated; + updated = this.updateEditFloatData(base + 2, softEdge) || updated; + updated = this.updateEditFloatData(base + 3, sdfSmooth) || updated; + return updated; + } + updateSdfData(offset, value) { + const updated = this.sdfData[offset] !== value; + this.sdfData[offset] = value; + return updated; + } + updateSdfFloatData(offset, value) { + tempFloat32[0] = value; + const updated = this.sdfFloatData[offset] !== tempFloat32[0]; + if (updated) { + this.sdfFloatData[offset] = tempFloat32[0]; + } + return updated; + } + encodeSdf(sdfIndex, { + sdfType, + invert, + center, + quaternion, + scale, + sizes + }, values) { + const base = sdfIndex * (8 * 4); + const flags = sdfType | (invert ? 1 << 8 : 0); + let updated = false; + updated = this.updateSdfFloatData(base + 0, (center == null ? void 0 : center.x) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 1, (center == null ? void 0 : center.y) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 2, (center == null ? void 0 : center.z) ?? 0) || updated; + updated = this.updateSdfData(base + 3, flags) || updated; + updated = this.updateSdfFloatData(base + 4, (quaternion == null ? void 0 : quaternion.x) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 5, (quaternion == null ? void 0 : quaternion.y) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 6, (quaternion == null ? void 0 : quaternion.z) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 7, (quaternion == null ? void 0 : quaternion.w) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 8, (scale == null ? void 0 : scale.x) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 9, (scale == null ? void 0 : scale.y) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 10, (scale == null ? void 0 : scale.z) ?? 0) || updated; + updated = this.updateSdfData(base + 11, 0) || updated; + updated = this.updateSdfFloatData(base + 12, (sizes == null ? void 0 : sizes.x) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 13, (sizes == null ? void 0 : sizes.y) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 14, (sizes == null ? void 0 : sizes.z) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 15, (sizes == null ? void 0 : sizes.w) ?? 0) || updated; + const nValues = Math.min(4, values.length); + for (let i = 0; i < nValues; ++i) { + const vBase = base + 16 + i * 4; + updated = this.updateSdfFloatData(vBase + 0, values[i].x) || updated; + updated = this.updateSdfFloatData(vBase + 1, values[i].y) || updated; + updated = this.updateSdfFloatData(vBase + 2, values[i].z) || updated; + updated = this.updateSdfFloatData(vBase + 3, values[i].w) || updated; + } + return updated; + } + // Update the SDFs and edits from an array of SplatEdits and their + // associated SplatEditSdfs, updating it for the dyno shader program. + update(edits) { + const sdfCount = edits.reduce((total, { sdfs }) => total + sdfs.length, 0); + const dynoUpdated = this.ensureCapacity({ + maxEdits: edits.length, + maxSdfs: sdfCount + }); + const values = [new THREE__namespace.Vector4(), new THREE__namespace.Vector4()]; + const center = new THREE__namespace.Vector3(); + const quaternion = new THREE__namespace.Quaternion(); + const scale = new THREE__namespace.Vector3(); + const sizes = new THREE__namespace.Vector4(); + let sdfIndex = 0; + let updated = dynoUpdated; + if (edits.length !== this.dynoNumEdits.value) { + this.dynoNumEdits.value = edits.length; + this.numEdits = edits.length; + updated = true; + } + for (const [editIndex, { edit, sdfs }] of edits.entries()) { + updated = this.encodeEdit(editIndex, { + sdfFirst: sdfIndex, + sdfCount: sdfs.length, + invert: edit.invert, + rgbaBlendMode: rgbaBlendModeToNumber(edit.rgbaBlendMode), + softEdge: edit.softEdge, + sdfSmooth: edit.sdfSmooth + }) || updated; + let sdfUpdated = false; + for (const sdf of sdfs) { + sizes.set(sdf.scale.x, sdf.scale.y, sdf.scale.z, sdf.radius); + sdf.scale.setScalar(1); + sdf.updateMatrixWorld(); + const worldToSdf = sdf.matrixWorld.clone().invert(); + worldToSdf.decompose(center, quaternion, scale); + sdf.scale.set(sizes.x, sizes.y, sizes.z); + sdf.updateMatrixWorld(); + values[0].set(sdf.color.r, sdf.color.g, sdf.color.b, sdf.opacity); + values[1].set(sdf.displace.x, sdf.displace.y, sdf.displace.z, 1); + sdfUpdated = this.encodeSdf( + sdfIndex, + { + sdfType: sdfTypeToNumber(sdf.type), + invert: sdf.invert, + center, + quaternion, + scale, + sizes + }, + values + ) || sdfUpdated; + sdfIndex += 1; + } + this.numSdfs = sdfIndex; + if (sdfUpdated) { + this.sdfTexture.needsUpdate = true; + } + updated || (updated = sdfUpdated); + } + return { updated, dynoUpdated }; + } + // Modify a Gsplat in a dyno shader program using the current edits and SDFs. + modify(gsplat) { + return applyGsplatRgbaDisplaceEdits( + gsplat, + this.dynoSdfArray, + this.dynoNumEdits, + this.dynoEdits + ); + } +} +const SdfArray = { type: "SdfArray" }; +const defineSdfArray = unindent(` + struct SdfArray { + int numSdfs; + usampler2D sdfTexture; + }; + + void unpackSdfArray( + usampler2D sdfTexture, int sdfIndex, out uint flags, + out vec3 center, out vec4 quaternion, out vec3 scale, out vec4 sizes, + int numValues, out vec4 values[4] + ) { + uvec4 temp = texelFetch(sdfTexture, ivec2(0, sdfIndex), 0); + flags = temp.w; + center = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z)); + + temp = texelFetch(sdfTexture, ivec2(1, sdfIndex), 0); + quaternion = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + + temp = texelFetch(sdfTexture, ivec2(2, sdfIndex), 0); + scale = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z)); + + temp = texelFetch(sdfTexture, ivec2(3, sdfIndex), 0); + sizes = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + + for (int i = 0; i < numValues; ++i) { + temp = texelFetch(sdfTexture, ivec2(4 + i, sdfIndex), 0); + values[i] = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + } + } + + const uint SDF_FLAG_TYPE = 0xFFu; + const uint SDF_FLAG_INVERT = 1u << 8u; + + const uint SDF_TYPE_ALL = 0u; + const uint SDF_TYPE_PLANE = 1u; + const uint SDF_TYPE_SPHERE = 2u; + const uint SDF_TYPE_BOX = 3u; + const uint SDF_TYPE_ELLIPSOID = 4u; + const uint SDF_TYPE_CYLINDER = 5u; + const uint SDF_TYPE_CAPSULE = 6u; + const uint SDF_TYPE_INFINITE_CONE = 7u; + + float evaluateSdfArray( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos, + float smoothK, int numValues, out vec4 outValues[4] + ) { + float distanceAccum = (smoothK == 0.0) ? 1.0 / 0.0 : 0.0; + float maxExp = -1.0 / 0.0; + for (int i = 0; i < numValues; ++i) { + outValues[i] = vec4(0.0); + } + + uint flags; + vec3 center, scale; + vec4 quaternion, sizes; + vec4 values[4]; + + int sdfLast = min(sdfFirst + sdfCount, numSdfs); + for (int index = sdfFirst; index < sdfLast; ++index) { + unpackSdfArray(sdfTexture, index, flags, center, quaternion, scale, sizes, numValues, values); + uint sdfType = flags & SDF_FLAG_TYPE; + vec3 sdfPos = quatVec(quaternion, pos * scale) + center; + + float distance; + switch (sdfType) { + case SDF_TYPE_ALL: + distance = -1.0 / 0.0; + break; + case SDF_TYPE_PLANE: { + distance = sdfPos.z; + break; + } + case SDF_TYPE_SPHERE: { + distance = length(sdfPos) - sizes.w; + break; + } + case SDF_TYPE_BOX: { + vec3 q = abs(sdfPos) - sizes.xyz + sizes.w; + distance = length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - sizes.w; + break; + } + case SDF_TYPE_ELLIPSOID: { + vec3 sizes = sizes.xyz; + float k0 = length(sdfPos / sizes); + float k1 = length(sdfPos / dot(sizes, sizes)); + distance = k0 * (k0 - 1.0) / k1; + break; + } + case SDF_TYPE_CYLINDER: { + vec2 d = abs(vec2(length(sdfPos.xz), sdfPos.y)) - sizes.wy; + distance = min(max(d.x, d.y), 0.0) + length(max(d, 0.0)); + break; + } + case SDF_TYPE_CAPSULE: { + sdfPos.y -= clamp(sdfPos.y, -0.5 * sizes.y, 0.5 * sizes.y); + distance = length(sdfPos) - sizes.w; + break; + } + case SDF_TYPE_INFINITE_CONE: { + float angle = 0.25 * PI * sizes.w; + vec2 c = vec2(sin(angle), cos(angle)); + vec2 q = vec2(length(sdfPos.xy), -sdfPos.z); + float d = length(q - c * max(dot(q, c), 0.0)); + distance = d * (((q.x * c.y - q.y * c.x) < 0.0) ? -1.0 : 1.0); + break; + } + } + + if ((flags & SDF_FLAG_INVERT) != 0u) { + distance = -distance; + } + + if (smoothK == 0.0) { + if (distance < distanceAccum) { + distanceAccum = distance; + for (int i = 0; i < numValues; ++i) { + outValues[i] = values[i]; + } + } + } else { + float scaledDistance = -distance / smoothK; + if (scaledDistance > maxExp) { + float scale = exp(maxExp - scaledDistance); + distanceAccum *= scale; + for (int i = 0; i < numValues; ++i) { + outValues[i] *= scale; + } + maxExp = scaledDistance; + } + + float weight = exp(scaledDistance - maxExp); + distanceAccum += weight; + for (int i = 0; i < numValues; ++i) { + outValues[i] += weight * values[i]; + } + } + } + + if (smoothK == 0.0) { + return distanceAccum; + } else { + // Very distant SDFs may result in 0 accumulation + if (distanceAccum == 0.0) { + return 1.0 / 0.0; + } + for (int i = 0; i < numValues; ++i) { + outValues[i] /= distanceAccum; + } + return (-log(distanceAccum) - maxExp) * smoothK; + } + } + + float modulateSdfArray( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos, + float smoothK, int numValues, out vec4 values[4], + float softEdge, bool invert + ) { + float distance = evaluateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, numValues, values); + if (invert) { + distance = -distance; + } + + return (softEdge == 0.0) ? ((distance < 0.0) ? 1.0 : 0.0) + : clamp(-distance / softEdge + 0.5, 0.0, 1.0); + } +`); +const defineEdit = unindent(` + const uint EDIT_FLAG_BLEND = 0xFFu; + const uint EDIT_BLEND_MULTIPLY = 0u; + const uint EDIT_BLEND_SET_RGB = 1u; + const uint EDIT_BLEND_ADD_RGBA = 2u; + const uint EDIT_FLAG_INVERT = 0x100u; + + void decodeEdit( + uvec4 packedEdit, out int sdfFirst, out int sdfCount, + out bool invert, out uint rgbaBlendMode, out float softEdge, out float sdfSmooth + ) { + rgbaBlendMode = packedEdit.x & EDIT_FLAG_BLEND; + invert = (packedEdit.x & EDIT_FLAG_INVERT) != 0u; + + sdfFirst = int(packedEdit.y & 0xFFFFu); + sdfCount = int(packedEdit.y >> 16u); + + softEdge = uintBitsToFloat(packedEdit.z); + sdfSmooth = uintBitsToFloat(packedEdit.w); + } + + void applyRgbaDisplaceEdit( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, inout vec3 pos, + float smoothK, float softEdge, bool invert, uint rgbaBlendMode, inout vec4 rgba + ) { + vec4 values[4]; + float modulate = modulateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, 2, values, softEdge, invert); + // On Android, moving values[0] is necessary to work around a compiler bug. + vec4 sdfRgba = values[0]; + vec4 sdfDisplaceScale = values[1]; + + vec4 target; + switch (rgbaBlendMode) { + case EDIT_BLEND_MULTIPLY: + target = rgba * sdfRgba; + break; + case EDIT_BLEND_SET_RGB: + target = vec4(sdfRgba.rgb, rgba.a * sdfRgba.a); + break; + case EDIT_BLEND_ADD_RGBA: + target = rgba + sdfRgba; + break; + default: + // Debug output if blend mode not set + target = vec4(fract(pos), 1.0); + } + rgba = mix(rgba, target, modulate); + pos += sdfDisplaceScale.xyz * modulate; + } + + void applyPackedRgbaDisplaceEdit(uvec4 packedEdit, usampler2D sdfTexture, int numSdfs, inout vec3 pos, inout vec4 rgba) { + int sdfFirst, sdfCount; + bool invert; + uint rgbaBlendMode; + float softEdge, sdfSmooth; + decodeEdit(packedEdit, sdfFirst, sdfCount, invert, rgbaBlendMode, softEdge, sdfSmooth); + applyRgbaDisplaceEdit(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, sdfSmooth, softEdge, invert, rgbaBlendMode, rgba); + } +`); +function applyGsplatRgbaDisplaceEdits(gsplat, sdfArray, numEdits, rgbaDisplaceEdits) { + const dyno2 = new Dyno({ + inTypes: { + gsplat: Gsplat, + sdfArray: SdfArray, + numEdits: "int", + rgbaDisplaceEdits: "uvec4" + }, + outTypes: { gsplat: Gsplat }, + globals: () => [defineSdfArray, defineEdit], + inputs: { gsplat, sdfArray, numEdits, rgbaDisplaceEdits }, + statements: ({ inputs, outputs }) => { + const { sdfArray: sdfArray2, numEdits: numEdits2, rgbaDisplaceEdits: rgbaDisplaceEdits2 } = inputs; + const { gsplat: gsplat2 } = outputs; + return unindentLines(` + ${gsplat2} = ${inputs.gsplat}; + if (isGsplatActive(${gsplat2}.flags)) { + for (int editIndex = 0; editIndex < ${numEdits2}; ++editIndex) { + applyPackedRgbaDisplaceEdit( + ${rgbaDisplaceEdits2}[editIndex], ${sdfArray2}.sdfTexture, ${sdfArray2}.numSdfs, + ${gsplat2}.center, ${gsplat2}.rgba + ); + } + } + `); + } + }); + return dyno2.outputs.gsplat; +} +const tempFloat32 = new Float32Array(1); +class SplatModifier { + constructor(modifier) { + this.modifier = modifier; + this.cache = /* @__PURE__ */ new Map(); + } + apply(generator) { + let modified = this.cache.get(generator); + if (!modified) { + modified = dynoBlock( + { index: "int" }, + { gsplat: Gsplat }, + ({ index }) => { + const { gsplat } = generator.apply({ index }); + return this.modifier.apply({ gsplat }); + } + ); + this.cache.set(generator, modified); + } + return modified; + } +} +class SplatTransformer { + // Create the dyno uniforms that parameterize the transform, setting them + // to initial values that are different from any valid transform. + constructor() { + this.scale = new DynoFloat({ value: Number.NEGATIVE_INFINITY }); + this.rotate = new DynoVec4({ + value: new THREE__namespace.Quaternion( + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY + ) + }); + this.translate = new DynoVec3({ + value: new THREE__namespace.Vector3( + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY + ) + }); + } + // Apply the transform to a Gsplat in a dyno program. + modify(gsplat) { + return transformGsplat(gsplat, { + scale: this.scale, + rotate: this.rotate, + translate: this.translate + }); + } + // Update the uniforms to match the given transform matrix. + updateFromMatrix(transform) { + const scale = new THREE__namespace.Vector3(); + const quaternion = new THREE__namespace.Quaternion(); + const position = new THREE__namespace.Vector3(); + transform.decompose(position, quaternion, scale); + const newScale = (scale.x + scale.y + scale.z) / 3; + let updated = false; + if (newScale !== this.scale.value) { + this.scale.value = newScale; + updated = true; + } + if (!position.equals(this.translate.value)) { + this.translate.value.copy(position); + updated = true; + } + if (!quaternion.equals(this.rotate.value)) { + this.rotate.value.copy(quaternion); + updated = true; + } + return updated; + } + // Update this transform to match the object's to-world transform. + update(object) { + return this.updateFromMatrix(object.matrixWorld); + } +} +class SplatGenerator extends THREE__namespace.Object3D { + constructor({ + numSplats, + generator, + construct, + update + }) { + super(); + this.numSplats = numSplats ?? 0; + this.generator = generator; + this.frameUpdate = update; + this.version = 0; + if (construct) { + const constructed = construct(this); + Object.assign(this, constructed); + } + } + updateVersion() { + this.version += 1; + } + set needsUpdate(value) { + if (value) { + this.updateVersion(); + } + } +} +const _SplatMesh = class _SplatMesh extends SplatGenerator { + constructor(options = {}) { + const transform = new SplatTransformer(); + const viewToWorld = new SplatTransformer(); + const worldToView = new SplatTransformer(); + const viewToObject = new SplatTransformer(); + const recolor = new DynoVec4({ + value: new THREE__namespace.Vector4( + Number.NEGATIVE_INFINITY, + Number.NEGATIVE_INFINITY, + Number.NEGATIVE_INFINITY, + Number.NEGATIVE_INFINITY + ) + }); + const time = new DynoFloat({ value: 0 }); + const deltaTime = new DynoFloat({ value: 0 }); + const context = { + transform, + viewToWorld, + worldToView, + viewToObject, + recolor, + time, + deltaTime + }; + super({ + update: ({ time: time2, deltaTime: deltaTime2, viewToWorld: viewToWorld2, globalEdits }) => this.update({ time: time2, deltaTime: deltaTime2, viewToWorld: viewToWorld2, globalEdits }) + }); + this.isInitialized = false; + this.recolor = new THREE__namespace.Color(1, 1, 1); + this.opacity = 1; + this.enableViewToObject = false; + this.enableViewToWorld = false; + this.enableWorldToView = false; + this.skinning = null; + this.edits = null; + this.rgbaDisplaceEdits = null; + this.splatRgba = null; + this.maxSh = 3; + this.packedSplats = options.packedSplats ?? new PackedSplats(); + this.numSplats = this.packedSplats.numSplats; + this.editable = options.editable ?? true; + this.onFrame = options.onFrame; + this.context = context; + this.objectModifier = options.objectModifier; + this.worldModifier = options.worldModifier; + this.updateGenerator(); + if (options.url || options.fileBytes || options.constructSplats || options.packedSplats && !options.packedSplats.isInitialized) { + this.initialized = this.asyncInitialize(options).then(async () => { + this.updateGenerator(); + this.isInitialized = true; + if (options.onLoad) { + const maybePromise = options.onLoad(this); + if (maybePromise instanceof Promise) { + await maybePromise; + } + } + return this; + }); + } else { + this.isInitialized = true; + this.initialized = Promise.resolve(this); + if (options.onLoad) { + const maybePromise = options.onLoad(this); + if (maybePromise instanceof Promise) { + this.initialized = maybePromise.then(() => this); + } + } + } + } + async asyncInitialize(options) { + const { url, fileBytes, fileType, maxSplats, constructSplats } = options; + if (url || fileBytes || constructSplats) { + const packedSplatsOptions = { + url, + fileBytes, + fileType, + maxSplats, + construct: constructSplats + }; + this.packedSplats.reinitialize(packedSplatsOptions); + this.updateGenerator(); + } + if (this.packedSplats) { + await this.packedSplats.initialized; + this.numSplats = this.packedSplats.numSplats; + } + } + static async staticInitialize() { + await __wbg_init(); + _SplatMesh.isStaticInitialized = true; + } + // Creates a new Gsplat with the provided parameters (all values in "float" space, + // i.e. 0-1 for opacity and color) and adds it to the end of the packedSplats, + // increasing numSplats by 1. If necessary, reallocates the buffer with an exponential + // doubling strategy to fit the new data, so it's fairly efficient to just + // pushSplat(...) each Gsplat you want to create in a loop. + pushSplat(center, scales, quaternion, opacity, color) { + this.packedSplats.pushSplat(center, scales, quaternion, opacity, color); + } + // This method iterates over all Gsplats in this instance's packedSplats, + // invoking the provided callback with index: number in 0..=(this.numSplats-1) and + // center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, + // opacity: number (0..1), and color: THREE.Color (rgb values in 0..1). + // Note that the objects passed in as center etc. are the same for every callback + // invocation: these objects are reused for efficiency. Changing these values has + // no effect as they are decoded/unpacked copies of the underlying data. To update + // the packedSplats, call .packedSplats.setSplat(index, center, scales, + // quaternion, opacity, color). + forEachSplat(callback) { + this.packedSplats.forEachSplat(callback); + } + // Call this when you are finished with the SplatMesh and want to free + // any buffers it holds (via packedSplats). + dispose() { + this.packedSplats.dispose(); + } + constructGenerator({ transform, viewToObject, recolor }) { + const generator = dynoBlock( + { index: "int" }, + { gsplat: Gsplat }, + ({ index }) => { + if (!index) { + throw new Error("index is undefined"); + } + let gsplat = readPackedSplat(this.packedSplats.dyno, index); + if (this.maxSh >= 1) { + const { sh1Texture, sh2Texture, sh3Texture } = this.ensureShTextures(); + if (sh1Texture) { + const viewCenterInObject = viewToObject.translate; + const { center } = splitGsplat(gsplat).outputs; + const viewDir = normalize(sub(center, viewCenterInObject)); + let rgb = evaluateSH1(gsplat, sh1Texture, viewDir); + if (this.maxSh >= 2 && sh2Texture) { + rgb = add(rgb, evaluateSH2(gsplat, sh2Texture, viewDir)); + } + if (this.maxSh >= 3 && sh3Texture) { + rgb = add(rgb, evaluateSH3(gsplat, sh3Texture, viewDir)); + } + let { rgba } = splitGsplat(gsplat).outputs; + rgba = add(rgba, extendVec(rgb, dynoConst("float", 0))); + gsplat = combineGsplat({ gsplat, rgba }); + } + } + if (this.splatRgba) { + const rgba = readRgbaArray(this.splatRgba.dyno, index); + gsplat = combineGsplat({ gsplat, rgba }); + } + if (this.skinning) { + gsplat = this.skinning.modify(gsplat); + } + if (this.objectModifier) { + gsplat = this.objectModifier.apply({ gsplat }).gsplat; + } + gsplat = transform.modify(gsplat); + const recolorRgba = mul(recolor, splitGsplat(gsplat).outputs.rgba); + gsplat = combineGsplat({ gsplat, rgba: recolorRgba }); + if (this.rgbaDisplaceEdits) { + gsplat = this.rgbaDisplaceEdits.modify(gsplat); + } + if (this.worldModifier) { + gsplat = this.worldModifier.apply({ gsplat }).gsplat; + } + return { gsplat }; + } + ); + this.generator = generator; + } + // Call this whenever something changes in the Gsplat processing pipeline, + // for example changing maxSh or updating objectModifier or worldModifier. + // Compiled generators are cached for efficiency and re-use when the same + // pipeline structure emerges after successive changes. + updateGenerator() { + this.constructGenerator(this.context); + } + // This is called automatically by ForgeRenderer and you should not have to + // call it. It updates parameters for the generated pipeline and calls + // updateGenerator() if the pipeline needs to change. + update({ + time, + viewToWorld, + deltaTime, + globalEdits + }) { + var _a2; + this.numSplats = this.packedSplats.numSplats; + this.context.time.value = time; + this.context.deltaTime.value = deltaTime; + _SplatMesh.dynoTime.value = time; + const { transform, viewToObject, recolor } = this.context; + let updated = transform.update(this); + if (this.context.viewToWorld.updateFromMatrix(viewToWorld) && this.enableViewToWorld) { + updated = true; + } + const worldToView = viewToWorld.clone().invert(); + if (this.context.worldToView.updateFromMatrix(worldToView) && this.enableWorldToView) { + updated = true; + } + const objectToWorld = new THREE__namespace.Matrix4().compose( + transform.translate.value, + transform.rotate.value, + new THREE__namespace.Vector3().setScalar(transform.scale.value) + ); + const worldToObject = objectToWorld.invert(); + const viewToObjectMatrix = worldToObject.multiply(viewToWorld); + if (viewToObject.updateFromMatrix(viewToObjectMatrix) && (this.enableViewToObject || this.packedSplats.extra.sh1)) { + updated = true; + } + const newRecolor = new THREE__namespace.Vector4( + this.recolor.r, + this.recolor.g, + this.recolor.b, + this.opacity + ); + if (!newRecolor.equals(recolor.value)) { + recolor.value.copy(newRecolor); + updated = true; + } + const edits = this.editable ? (this.edits ?? []).concat(globalEdits) : []; + if (this.editable && !this.edits) { + this.traverseVisible((node) => { + if (node instanceof SplatEdit) { + edits.push(node); + } + }); + } + edits.sort((a, b) => a.ordering - b.ordering); + const editsSdfs = edits.map((edit) => { + if (edit.sdfs != null) { + return { edit, sdfs: edit.sdfs }; + } + const sdfs = []; + edit.traverseVisible((node) => { + if (node instanceof SplatEditSdf) { + sdfs.push(node); + } + }); + return { edit, sdfs }; + }); + if (editsSdfs.length > 0 && !this.rgbaDisplaceEdits) { + const edits2 = editsSdfs.length; + const sdfs = editsSdfs.reduce( + (total, edit) => total + edit.sdfs.length, + 0 + ); + this.rgbaDisplaceEdits = new SplatEdits({ + maxEdits: edits2, + maxSdfs: sdfs + }); + this.updateGenerator(); + } + if (this.rgbaDisplaceEdits) { + const editResult = this.rgbaDisplaceEdits.update(editsSdfs); + updated || (updated = editResult.updated); + if (editResult.dynoUpdated) { + this.updateGenerator(); + } + } + if (updated) { + this.updateVersion(); + } + (_a2 = this.onFrame) == null ? void 0 : _a2.call(this, { mesh: this, time, deltaTime }); + } + // This method conforms to the standard THREE.Raycaster API, performing object-ray + // intersections using this method to populate the provided intersects[] array + // with each intersection point. + raycast(raycaster, intersects) { + if (!this.packedSplats.packedArray || !this.packedSplats.numSplats) { + return; + } + const { near, far, ray } = raycaster; + const worldToMesh = this.matrixWorld.clone().invert(); + const worldToMeshRot = new THREE__namespace.Matrix3().setFromMatrix4(worldToMesh); + const origin = ray.origin.clone().applyMatrix4(worldToMesh); + const direction = ray.direction.clone().applyMatrix3(worldToMeshRot); + const scales = new THREE__namespace.Vector3(); + worldToMesh.decompose(new THREE__namespace.Vector3(), new THREE__namespace.Quaternion(), scales); + (scales.x * scales.y * scales.z) ** (1 / 3); + const RAYCAST_ELLIPSOID = true; + const distances = raycast_splats( + origin.x, + origin.y, + origin.z, + direction.x, + direction.y, + direction.z, + near, + far, + this.packedSplats.numSplats, + this.packedSplats.packedArray, + RAYCAST_ELLIPSOID + ); + for (const distance2 of distances) { + const point = ray.direction.clone().multiplyScalar(distance2).add(ray.origin); + intersects.push({ + distance: distance2, + point, + object: this + }); + } + } + ensureShTextures() { + if (!this.packedSplats.extra.sh1) { + return {}; + } + const sh1Texture = this.packedSplats.extra.sh1Texture; + if (!sh1Texture) { + let sh1 = this.packedSplats.extra.sh1; + const { width, height, depth, maxSplats } = getTextureSize( + sh1.length / 2 + ); + if (sh1.length < maxSplats * 2) { + const newSh1 = new Uint32Array(maxSplats * 2); + newSh1.set(sh1); + this.packedSplats.extra.sh1 = newSh1; + sh1 = newSh1; + } + const texture2 = new THREE__namespace.DataArrayTexture(sh1, width, height, depth); + texture2.format = THREE__namespace.RGIntegerFormat; + texture2.type = THREE__namespace.UnsignedIntType; + texture2.internalFormat = "RG32UI"; + texture2.needsUpdate = true; + const sh1Texture2 = new DynoUsampler2DArray({ + value: texture2, + key: "sh1" + }); + this.packedSplats.extra.sh1Texture = sh1Texture2; + } + if (!this.packedSplats.extra.sh2) { + return { sh1Texture }; + } + const sh2Texture = this.packedSplats.extra.sh2Texture; + if (!sh2Texture) { + let sh2 = this.packedSplats.extra.sh2; + const { width, height, depth, maxSplats } = getTextureSize( + sh2.length / 4 + ); + if (sh2.length < maxSplats * 4) { + const newSh2 = new Uint32Array(maxSplats * 4); + newSh2.set(sh2); + this.packedSplats.extra.sh2 = newSh2; + sh2 = newSh2; + } + const texture2 = new THREE__namespace.DataArrayTexture(sh2, width, height, depth); + texture2.format = THREE__namespace.RGBAIntegerFormat; + texture2.type = THREE__namespace.UnsignedIntType; + texture2.internalFormat = "RGBA32UI"; + texture2.needsUpdate = true; + const sh2Texture2 = new DynoUsampler2DArray({ + value: texture2, + key: "sh2" + }); + this.packedSplats.extra.sh2Texture = sh2Texture2; + } + if (!this.packedSplats.extra.sh3) { + return { sh1Texture, sh2Texture }; + } + const sh3Texture = this.packedSplats.extra.sh3Texture; + if (!sh3Texture) { + let sh3 = this.packedSplats.extra.sh3; + const { width, height, depth, maxSplats } = getTextureSize( + sh3.length / 4 + ); + if (sh3.length < maxSplats * 4) { + const newSh3 = new Uint32Array(maxSplats * 4); + newSh3.set(sh3); + this.packedSplats.extra.sh3 = newSh3; + sh3 = newSh3; + } + const texture2 = new THREE__namespace.DataArrayTexture(sh3, width, height, depth); + texture2.format = THREE__namespace.RGBAIntegerFormat; + texture2.type = THREE__namespace.UnsignedIntType; + texture2.internalFormat = "RGBA32UI"; + texture2.needsUpdate = true; + const sh3Texture2 = new DynoUsampler2DArray({ + value: texture2, + key: "sh3" + }); + this.packedSplats.extra.sh3Texture = sh3Texture2; + } + return { sh1Texture, sh2Texture, sh3Texture }; + } +}; +_SplatMesh.staticInitialized = _SplatMesh.staticInitialize(); +_SplatMesh.isStaticInitialized = false; +_SplatMesh.dynoTime = new DynoFloat({ value: 0 }); +let SplatMesh = _SplatMesh; +const defineEvaluateSH1 = unindent(` + vec3 evaluateSH1(Gsplat gsplat, usampler2DArray sh1, vec3 viewDir) { + // Extract sint7 values packed into 2 x uint32 + uvec2 packed = texelFetch(sh1, splatTexCoord(gsplat.index), 0).rg; + vec3 sh1_0 = vec3(ivec3( + int(packed.x << 25u) >> 25, + int(packed.x << 18u) >> 25, + int(packed.x << 11u) >> 25 + )) / 63.0; + vec3 sh1_1 = vec3(ivec3( + int(packed.x << 4u) >> 25, + int((packed.x >> 3u) | (packed.y << 29u)) >> 25, + int(packed.y << 22u) >> 25 + )) / 63.0; + vec3 sh1_2 = vec3(ivec3( + int(packed.y << 15u) >> 25, + int(packed.y << 8u) >> 25, + int(packed.y << 1u) >> 25 + )) / 63.0; + + return sh1_0 * (-0.4886025 * viewDir.y) + + sh1_1 * (0.4886025 * viewDir.z) + + sh1_2 * (-0.4886025 * viewDir.x); + } +`); +const defineEvaluateSH2 = unindent(` + vec3 evaluateSH2(Gsplat gsplat, usampler2DArray sh2, vec3 viewDir) { + // Extract sint8 values packed into 4 x uint32 + uvec4 packed = texelFetch(sh2, splatTexCoord(gsplat.index), 0); + vec3 sh2_0 = vec3(ivec3( + int(packed.x << 24u) >> 24, + int(packed.x << 16u) >> 24, + int(packed.x << 8u) >> 24 + )) / 127.0; + vec3 sh2_1 = vec3(ivec3( + int(packed.x) >> 24, + int(packed.y << 24u) >> 24, + int(packed.y << 16u) >> 24 + )) / 127.0; + vec3 sh2_2 = vec3(ivec3( + int(packed.y << 8u) >> 24, + int(packed.y) >> 24, + int(packed.z << 24u) >> 24 + )) / 127.0; + vec3 sh2_3 = vec3(ivec3( + int(packed.z << 16u) >> 24, + int(packed.z << 8u) >> 24, + int(packed.z) >> 24 + )) / 127.0; + vec3 sh2_4 = vec3(ivec3( + int(packed.w << 24u) >> 24, + int(packed.w << 16u) >> 24, + int(packed.w << 8u) >> 24 + )) / 127.0; + + return sh2_0 * (1.0925484 * viewDir.x * viewDir.y) + + sh2_1 * (1.0925484 * viewDir.y * viewDir.z) + + sh2_2 * (0.3153915 * (2.0 * viewDir.z * viewDir.z - viewDir.x * viewDir.x - viewDir.y * viewDir.y)) + + sh2_3 * (1.0925484 * viewDir.x * viewDir.z) + + sh2_4 * (0.5462742 * (viewDir.x * viewDir.x - viewDir.y * viewDir.y)); + } +`); +const defineEvaluateSH3 = unindent(` + vec3 evaluateSH3(Gsplat gsplat, usampler2DArray sh3, vec3 viewDir) { + // Extract sint6 values packed into 4 x uint32 + uvec4 packed = texelFetch(sh3, splatTexCoord(gsplat.index), 0); + vec3 sh3_0 = vec3(ivec3( + int(packed.x << 26u) >> 26, + int(packed.x << 20u) >> 26, + int(packed.x << 14u) >> 26 + )) / 31.0; + vec3 sh3_1 = vec3(ivec3( + int(packed.x << 8u) >> 26, + int(packed.x << 2u) >> 26, + int((packed.x >> 4u) | (packed.y << 28u)) >> 26 + )) / 31.0; + vec3 sh3_2 = vec3(ivec3( + int(packed.y << 22u) >> 26, + int(packed.y << 16u) >> 26, + int(packed.y << 10u) >> 26 + )) / 31.0; + vec3 sh3_3 = vec3(ivec3( + int(packed.y << 4u) >> 26, + int((packed.y >> 2u) | (packed.z << 30u)) >> 26, + int(packed.z << 24u) >> 26 + )) / 31.0; + vec3 sh3_4 = vec3(ivec3( + int(packed.z << 18u) >> 26, + int(packed.z << 12u) >> 26, + int(packed.z << 6u) >> 26 + )) / 31.0; + vec3 sh3_5 = vec3(ivec3( + int(packed.z) >> 26, + int(packed.w << 26u) >> 26, + int(packed.w << 20u) >> 26 + )) / 31.0; + vec3 sh3_6 = vec3(ivec3( + int(packed.w << 14u) >> 26, + int(packed.w << 8u) >> 26, + int(packed.w << 2u) >> 26 + )) / 31.0; + + float xx = viewDir.x * viewDir.x; + float yy = viewDir.y * viewDir.y; + float zz = viewDir.z * viewDir.z; + float xy = viewDir.x * viewDir.y; + float yz = viewDir.y * viewDir.z; + float zx = viewDir.z * viewDir.x; + + return sh3_0 * (-0.5900436 * viewDir.y * (3.0 * xx - yy)) + + sh3_1 * (2.8906114 * xy * viewDir.z) + + + sh3_2 * (-0.4570458 * viewDir.y * (4.0 * zz - xx - yy)) + + sh3_3 * (0.3731763 * viewDir.z * (2.0 * zz - 3.0 * xx - 3.0 * yy)) + + sh3_4 * (-0.4570458 * viewDir.x * (4.0 * zz - xx - yy)) + + sh3_5 * (1.4453057 * viewDir.z * (xx - yy)) + + sh3_6 * (-0.5900436 * viewDir.x * (xx - 3.0 * yy)); + } +`); +function evaluateSH1(gsplat, sh1, viewDir) { + return dyno$1({ + inTypes: { gsplat: Gsplat, sh1: "usampler2DArray", viewDir: "vec3" }, + outTypes: { rgb: "vec3" }, + inputs: { gsplat, sh1, viewDir }, + globals: () => [defineGsplat, defineEvaluateSH1], + statements: ({ inputs, outputs }) => { + const statements = unindentLines(` + if (isGsplatActive(${inputs.gsplat}.flags)) { + ${outputs.rgb} = evaluateSH1(${inputs.gsplat}, ${inputs.sh1}, ${inputs.viewDir}); + } else { + ${outputs.rgb} = vec3(0.0); + } + `); + return statements; + } + }).outputs.rgb; +} +function evaluateSH2(gsplat, sh2, viewDir) { + return dyno$1({ + inTypes: { gsplat: Gsplat, sh2: "usampler2DArray", viewDir: "vec3" }, + outTypes: { rgb: "vec3" }, + inputs: { gsplat, sh2, viewDir }, + globals: () => [defineGsplat, defineEvaluateSH2], + statements: ({ inputs, outputs }) => unindentLines(` + if (isGsplatActive(${inputs.gsplat}.flags)) { + ${outputs.rgb} = evaluateSH2(${inputs.gsplat}, ${inputs.sh2}, ${inputs.viewDir}); + } else { + ${outputs.rgb} = vec3(0.0); + } + `) + }).outputs.rgb; +} +function evaluateSH3(gsplat, sh3, viewDir) { + return dyno$1({ + inTypes: { gsplat: Gsplat, sh3: "usampler2DArray", viewDir: "vec3" }, + outTypes: { rgb: "vec3" }, + inputs: { gsplat, sh3, viewDir }, + globals: () => [defineGsplat, defineEvaluateSH3], + statements: ({ inputs, outputs }) => unindentLines(` + if (isGsplatActive(${inputs.gsplat}.flags)) { + ${outputs.rgb} = evaluateSH3(${inputs.gsplat}, ${inputs.sh3}, ${inputs.viewDir}); + } else { + ${outputs.rgb} = vec3(0.0); + } + `) + }).outputs.rgb; +} +const _PlyReader = class _PlyReader { + // Create a PlyReader from a Uint8Array/ArrayBuffer, no parsing done yet + constructor({ fileBytes }) { + this.header = ""; + this.littleEndian = true; + this.elements = {}; + this.comments = []; + this.data = null; + this.numSplats = 0; + this.fileBytes = fileBytes instanceof ArrayBuffer ? new Uint8Array(fileBytes) : fileBytes; + } + // Identify and parse the PLY text header (assumed to be <64KB in size). + // this.elements will contain all the elements in the file, typically + // "vertex" contains the Gsplat data. + async parseHeader() { + const bufferStream = new ReadableStream({ + start: (controller) => { + controller.enqueue(this.fileBytes.slice(0, 65536)); + controller.close(); + } + }); + const decoder = bufferStream.pipeThrough(new TextDecoderStream()).getReader(); + this.header = ""; + const headerTerminator = "end_header\n"; + while (true) { + const { value, done } = await decoder.read(); + if (done) { + throw new Error("Failed to read header"); + } + this.header += value; + const endHeader = this.header.indexOf(headerTerminator); + if (endHeader >= 0) { + this.header = this.header.slice(0, endHeader + headerTerminator.length); + break; + } + } + const headerLen = new TextEncoder().encode(this.header).length; + this.data = new DataView(this.fileBytes.buffer, headerLen); + this.elements = {}; + let curElement = null; + this.comments = []; + this.header.trim().split("\n").forEach((line, lineIndex) => { + const trimmedLine = line.trim(); + if (lineIndex === 0) { + if (trimmedLine !== "ply") { + throw new Error("Invalid PLY header"); + } + return; + } + if (trimmedLine.length === 0) { + return; + } + const fields = trimmedLine.split(" "); + switch (fields[0]) { + case "format": + if (fields[1] === "binary_little_endian") { + this.littleEndian = true; + } else if (fields[1] === "binary_big_endian") { + this.littleEndian = false; + } else { + throw new Error(`Unsupported PLY format: ${fields[1]}`); + } + if (fields[2] !== "1.0") { + throw new Error(`Unsupported PLY version: ${fields[2]}`); + } + break; + case "end_header": + break; + case "comment": + this.comments.push(trimmedLine.slice("comment ".length)); + break; + case "element": { + const name = fields[1]; + curElement = { + name, + count: Number.parseInt(fields[2]), + properties: {} + }; + this.elements[name] = curElement; + break; + } + case "property": + if (curElement == null) { + throw new Error("Property must be inside an element"); + } + if (fields[1] === "list") { + curElement.properties[fields[4]] = { + isList: true, + type: fields[3], + countType: fields[2] + }; + } else { + curElement.properties[fields[2]] = { + isList: false, + type: fields[1] + }; + } + break; + } + }); + if (this.elements.vertex) { + this.numSplats = this.elements.vertex.count; + } + } + parseData(elementCallback) { + let offset = 0; + const data = this.data; + if (data == null) { + throw new Error("No data to parse"); + } + for (const elementName in this.elements) { + const element = this.elements[elementName]; + const { count, properties } = element; + const item = {}; + const parsers = []; + for (const [propertyName, property] of Object.entries(properties)) { + if (!property.isList) { + item[propertyName] = 0; + parsers.push(() => { + item[propertyName] = PARSE_FIELD[property.type]( + data, + offset, + this.littleEndian + ); + offset += FIELD_BYTES[property.type]; + }); + } else { + item[propertyName] = []; + parsers.push(() => { + const list = item[propertyName]; + list.length = PARSE_FIELD[property.countType]( + data, + offset, + this.littleEndian + ); + offset += FIELD_BYTES[property.countType]; + for (let i = 0; i < list.length; i++) { + list[i] = PARSE_FIELD[property.type]( + data, + offset, + this.littleEndian + ); + offset += FIELD_BYTES[property.type]; + } + }); + } + } + const callback = elementCallback(element) ?? (() => { + }); + for (let index = 0; index < count; index++) { + for (const parser of parsers) { + parser(); + } + callback(index, item); + } + } + } + // Parse all the Gsplat data in the PLY file in go, invoking the given + // callbacks for each Gsplat. + parseSplats(splatCallback, shCallback) { + if (this.elements.vertex == null) { + throw new Error("No vertex element found"); + } + let isSuperSplat = false; + const ssChunks = []; + let numSh = 0; + let sh1Props = []; + let sh2Props = []; + let sh3Props = []; + let sh1 = void 0; + let sh2 = void 0; + let sh3 = void 0; + function prepareSh() { + const num_f_rest = NUM_SH_TO_NUM_F_REST[numSh]; + sh1Props = new Array(3).fill(null).flatMap( + (_, k) => [0, 1, 2].map((_2, d) => `f_rest_${k + d * num_f_rest / 3}`) + ); + sh2Props = new Array(5).fill(null).flatMap( + (_, k) => [0, 1, 2].map((_2, d) => `f_rest_${3 + k + d * num_f_rest / 3}`) + ); + sh3Props = new Array(7).fill(null).flatMap( + (_, k) => [0, 1, 2].map((_2, d) => `f_rest_${8 + k + d * num_f_rest / 3}`) + ); + sh1 = numSh >= 1 ? new Float32Array(3 * 3) : void 0; + sh2 = numSh >= 2 ? new Float32Array(5 * 3) : void 0; + sh3 = numSh >= 3 ? new Float32Array(7 * 3) : void 0; + } + function ssShCallback(index, item) { + if (!sh1) { + throw new Error("Missing sh1"); + } + for (const [i, key] of sh1Props.entries()) { + sh1[i] = item[key] * 8 / 255 - 4; + } + if (sh2) { + for (const [i, key] of sh2Props.entries()) { + sh2[i] = item[key] * 8 / 255 - 4; + } + } + if (sh3) { + for (const [i, key] of sh3Props.entries()) { + sh3[i] = item[key] * 8 / 255 - 4; + } + } + shCallback == null ? void 0 : shCallback(index, sh1, sh2, sh3); + } + function initSuperSplat(element) { + const { + min_x, + min_y, + min_z, + max_x, + max_y, + max_z, + min_scale_x, + min_scale_y, + min_scale_z, + max_scale_x, + max_scale_y, + max_scale_z, + min_r, + min_g, + min_b, + max_r, + max_g, + max_b + } = element.properties; + if (!min_x || !min_y || !min_z || !max_x || !max_y || !max_z || !min_scale_x || !min_scale_y || !min_scale_z || !max_scale_x || !max_scale_y || !max_scale_z || !min_r || !min_g || !min_b || !max_r || !max_g || !max_b) { + throw new Error("Missing PLY chunk properties"); + } + isSuperSplat = true; + return (index, item) => { + const { + min_x: min_x2, + min_y: min_y2, + min_z: min_z2, + max_x: max_x2, + max_y: max_y2, + max_z: max_z2, + min_scale_x: min_scale_x2, + min_scale_y: min_scale_y2, + min_scale_z: min_scale_z2, + max_scale_x: max_scale_x2, + max_scale_y: max_scale_y2, + max_scale_z: max_scale_z2, + min_r: min_r2, + min_g: min_g2, + min_b: min_b2, + max_r: max_r2, + max_g: max_g2, + max_b: max_b2 + } = item; + ssChunks.push({ + min_x: min_x2, + min_y: min_y2, + min_z: min_z2, + max_x: max_x2, + max_y: max_y2, + max_z: max_z2, + min_scale_x: min_scale_x2, + min_scale_y: min_scale_y2, + min_scale_z: min_scale_z2, + max_scale_x: max_scale_x2, + max_scale_y: max_scale_y2, + max_scale_z: max_scale_z2, + min_r: min_r2, + min_g: min_g2, + min_b: min_b2, + max_r: max_r2, + max_g: max_g2, + max_b: max_b2 + }); + }; + } + function decodeSuperSplat(element) { + if (shCallback && element.name === "sh") { + numSh = getNumSh(element.properties); + prepareSh(); + return ssShCallback; + } + if (element.name !== "vertex") { + return null; + } + const { packed_position, packed_rotation, packed_scale, packed_color } = element.properties; + if (!packed_position || !packed_rotation || !packed_scale || !packed_color) { + throw new Error( + "Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color" + ); + } + const SQRT2 = Math.sqrt(2); + return (index, item) => { + const chunk = ssChunks[index >>> 8]; + if (chunk == null) { + throw new Error("Missing PLY chunk"); + } + const { + min_x, + min_y, + min_z, + max_x, + max_y, + max_z, + min_scale_x, + min_scale_y, + min_scale_z, + max_scale_x, + max_scale_y, + max_scale_z, + min_r, + min_g, + min_b, + max_r, + max_g, + max_b + } = chunk; + const { packed_position: packed_position2, packed_rotation: packed_rotation2, packed_scale: packed_scale2, packed_color: packed_color2 } = item; + const x = (packed_position2 >>> 21 & 2047) / 2047 * (max_x - min_x) + min_x; + const y = (packed_position2 >>> 11 & 1023) / 1023 * (max_y - min_y) + min_y; + const z = (packed_position2 & 2047) / 2047 * (max_z - min_z) + min_z; + const r0 = ((packed_rotation2 >>> 20 & 1023) / 1023 - 0.5) * SQRT2; + const r1 = ((packed_rotation2 >>> 10 & 1023) / 1023 - 0.5) * SQRT2; + const r2 = ((packed_rotation2 & 1023) / 1023 - 0.5) * SQRT2; + const rr = Math.sqrt(Math.max(0, 1 - r0 * r0 - r1 * r1 - r2 * r2)); + const rOrder = packed_rotation2 >>> 30; + const quatX = rOrder === 0 ? r0 : rOrder === 1 ? rr : r1; + const quatY = rOrder <= 1 ? r1 : rOrder === 2 ? rr : r2; + const quatZ = rOrder <= 2 ? r2 : rr; + const quatW = rOrder === 0 ? rr : r0; + const scaleX = Math.exp( + (packed_scale2 >>> 21 & 2047) / 2047 * (max_scale_x - min_scale_x) + min_scale_x + ); + const scaleY = Math.exp( + (packed_scale2 >>> 11 & 1023) / 1023 * (max_scale_y - min_scale_y) + min_scale_y + ); + const scaleZ = Math.exp( + (packed_scale2 & 2047) / 2047 * (max_scale_z - min_scale_z) + min_scale_z + ); + const r = (packed_color2 >>> 24 & 255) / 255 * (max_r - min_r) + min_r; + const g = (packed_color2 >>> 16 & 255) / 255 * (max_g - min_g) + min_g; + const b = (packed_color2 >>> 8 & 255) / 255 * (max_b - min_b) + min_b; + const opacity = (packed_color2 & 255) / 255; + splatCallback( + index, + x, + y, + z, + scaleX, + scaleY, + scaleZ, + quatX, + quatY, + quatZ, + quatW, + opacity, + r, + g, + b + ); + }; + } + const elementCallback = (element) => { + if (element.name === "chunk") { + if (this.comments.some( + (comment2) => comment2.toLowerCase().includes("supersplat") + )) { + return initSuperSplat(element); + } + } + if (isSuperSplat) { + return decodeSuperSplat(element); + } + if (element.name !== "vertex") { + return null; + } + const { + x, + y, + z, + scale_0, + scale_1, + scale_2, + rot_0, + rot_1, + rot_2, + rot_3, + opacity, + f_dc_0, + f_dc_1, + f_dc_2, + red, + green, + blue, + alpha + } = element.properties; + if (!x || !y || !z) { + throw new Error("Missing PLY properties: x, y, z"); + } + const hasScales = scale_0 && scale_1 && scale_2; + const hasRots = rot_0 && rot_1 && rot_2 && rot_3; + const alphaDiv = alpha != null ? FIELD_SCALE[alpha.type] : 1; + const redDiv = red != null ? FIELD_SCALE[red.type] : 1; + const greenDiv = green != null ? FIELD_SCALE[green.type] : 1; + const blueDiv = blue != null ? FIELD_SCALE[blue.type] : 1; + numSh = getNumSh(element.properties); + prepareSh(); + return (index, item) => { + const scaleX = hasScales ? Math.exp(item.scale_0) : _PlyReader.defaultPointScale; + const scaleY = hasScales ? Math.exp(item.scale_1) : _PlyReader.defaultPointScale; + const scaleZ = hasScales ? Math.exp(item.scale_2) : _PlyReader.defaultPointScale; + const quatX = hasRots ? item.rot_1 : 0; + const quatY = hasRots ? item.rot_2 : 0; + const quatZ = hasRots ? item.rot_3 : 0; + const quatW = hasRots ? item.rot_0 : 1; + const op = opacity != null ? 1 / (1 + Math.exp(-item.opacity)) : alpha != null ? item.alpha / alphaDiv : 1; + const r = f_dc_0 != null ? item.f_dc_0 * SH_C0$1 + 0.5 : red != null ? item.red / redDiv : 1; + const g = f_dc_1 != null ? item.f_dc_1 * SH_C0$1 + 0.5 : green != null ? item.green / greenDiv : 1; + const b = f_dc_2 != null ? item.f_dc_2 * SH_C0$1 + 0.5 : blue != null ? item.blue / blueDiv : 1; + splatCallback( + index, + item.x, + item.y, + item.z, + scaleX, + scaleY, + scaleZ, + quatX, + quatY, + quatZ, + quatW, + op, + r, + g, + b + ); + if (shCallback && sh1) { + if (sh1) { + for (const [i, key] of sh1Props.entries()) { + sh1[i] = item[key]; + } + } + if (sh2) { + for (const [i, key] of sh2Props.entries()) { + sh2[i] = item[key]; + } + } + if (sh3) { + for (const [i, key] of sh3Props.entries()) { + sh3[i] = item[key]; + } + } + shCallback(index, sh1, sh2, sh3); + } + }; + }; + this.parseData(elementCallback); + } + // Inject RGBA values into original PLY file, which can be used to modify + // the color/opacity of the Gsplats and write out the modified PLY file. + injectRgba(rgba) { + let offset = 0; + const data = this.data; + if (data == null) { + throw new Error("No parsed data"); + } + if (rgba.length !== this.numSplats * 4) { + throw new Error("Invalid RGBA array length"); + } + for (const elementName in this.elements) { + const element = this.elements[elementName]; + const { count, properties } = element; + const parsers = []; + let rgbaOffset = 0; + const isVertex = elementName === "vertex"; + if (isVertex) { + for (const name of ["opacity", "f_dc_0", "f_dc_1", "f_dc_2"]) { + if (!properties[name] || properties[name].type !== "float") { + throw new Error(`Can't injectRgba due to property: ${name}`); + } + } + } + for (const [propertyName, property] of Object.entries(properties)) { + if (!property.isList) { + if (isVertex) { + if (propertyName === "f_dc_0" || propertyName === "f_dc_1" || propertyName === "f_dc_2") { + const component = Number.parseInt( + propertyName.slice("f_dc_".length) + ); + parsers.push(() => { + const value = (rgba[rgbaOffset + component] / 255 - 0.5) / SH_C0$1; + SET_FIELD[property.type]( + data, + offset, + this.littleEndian, + value + ); + }); + } else if (propertyName === "opacity") { + parsers.push(() => { + const value = Math.max( + -100, + Math.min( + 100, + -Math.log(1 / (rgba[rgbaOffset + 3] / 255) - 1) + ) + ); + SET_FIELD[property.type]( + data, + offset, + this.littleEndian, + value + ); + }); + } + } + parsers.push(() => { + offset += FIELD_BYTES[property.type]; + }); + } else { + parsers.push(() => { + const length2 = PARSE_FIELD[property.countType]( + data, + offset, + this.littleEndian + ); + offset += FIELD_BYTES[property.countType]; + offset += length2 * FIELD_BYTES[property.type]; + }); + } + } + for (let index = 0; index < count; index++) { + for (const parser of parsers) { + parser(); + } + if (isVertex) { + rgbaOffset += 4; + } + } + } + } +}; +_PlyReader.defaultPointScale = 1e-3; +let PlyReader = _PlyReader; +const SH_C0$1 = 0.28209479177387814; +const PARSE_FIELD = { + char: (data, offset, littleEndian) => { + return data.getInt8(offset); + }, + uchar: (data, offset, littleEndian) => { + return data.getUint8(offset); + }, + short: (data, offset, littleEndian) => { + return data.getInt16(offset, littleEndian); + }, + ushort: (data, offset, littleEndian) => { + return data.getUint16(offset, littleEndian); + }, + int: (data, offset, littleEndian) => { + return data.getInt32(offset, littleEndian); + }, + uint: (data, offset, littleEndian) => { + return data.getUint32(offset, littleEndian); + }, + float: (data, offset, littleEndian) => { + return data.getFloat32(offset, littleEndian); + }, + double: (data, offset, littleEndian) => { + return data.getFloat64(offset, littleEndian); + } +}; +const SET_FIELD = { + char: (data, offset, littleEndian, value) => { + data.setInt8(offset, value); + }, + uchar: (data, offset, littleEndian, value) => { + data.setUint8(offset, value); + }, + short: (data, offset, littleEndian, value) => { + data.setInt16(offset, value, littleEndian); + }, + ushort: (data, offset, littleEndian, value) => { + data.setUint16(offset, value, littleEndian); + }, + int: (data, offset, littleEndian, value) => { + data.setInt32(offset, value, littleEndian); + }, + uint: (data, offset, littleEndian, value) => { + data.setUint32(offset, value, littleEndian); + }, + float: (data, offset, littleEndian, value) => { + data.setFloat32(offset, value, littleEndian); + }, + double: (data, offset, littleEndian, value) => { + data.setFloat64(offset, value, littleEndian); + } +}; +const FIELD_BYTES = { + char: 1, + uchar: 1, + short: 2, + ushort: 2, + int: 4, + uint: 4, + float: 4, + double: 8 +}; +const FIELD_SCALE = { + char: 127, + uchar: 255, + short: 32767, + ushort: 65535, + int: 2147483647, + uint: 4294967295, + float: 1, + double: 1 +}; +const NUM_F_REST_TO_NUM_SH = { + 0: 0, + 9: 1, + 24: 2, + 45: 3 +}; +const NUM_SH_TO_NUM_F_REST = { + 0: 0, + 1: 9, + 2: 24, + 3: 45 +}; +function getNumSh(properties) { + let num_f_rest = 0; + while (properties[`f_rest_${num_f_rest}`]) { + num_f_rest += 1; + } + const numSh = NUM_F_REST_TO_NUM_SH[num_f_rest]; + if (numSh == null) { + throw new Error(`Unsupported number of SH coefficients: ${num_f_rest}`); + } + return numSh; +} +const jsContent = '(function() {\n "use strict";\n let wasm;\n function addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_export_2.set(idx, obj);\n return idx;\n }\n function handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n }\n function debugString(val) {\n const type = typeof val;\n if (type == "number" || type == "boolean" || val == null) {\n return `${val}`;\n }\n if (type == "string") {\n return `"${val}"`;\n }\n if (type == "symbol") {\n const description = val.description;\n if (description == null) {\n return "Symbol";\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == "function") {\n const name = val.name;\n if (typeof name == "string" && name.length > 0) {\n return `Function(${name})`;\n } else {\n return "Function";\n }\n }\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = "[";\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for (let i2 = 1; i2 < length; i2++) {\n debug += ", " + debugString(val[i2]);\n }\n debug += "]";\n return debug;\n }\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n return toString.call(val);\n }\n if (className == "Object") {\n try {\n return "Object(" + JSON.stringify(val) + ")";\n } catch (_) {\n return "Object";\n }\n }\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\n${val.stack}`;\n }\n return className;\n }\n let WASM_VECTOR_LEN = 0;\n let cachedUint8ArrayMemory0 = null;\n function getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n }\n const cachedTextEncoder = typeof TextEncoder !== "undefined" ? new TextEncoder("utf-8") : { encode: () => {\n throw Error("TextEncoder not available");\n } };\n const encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n } : function(arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n function passStringToWasm0(arg, malloc, realloc) {\n if (realloc === void 0) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr2 = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr2;\n }\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n const mem = getUint8ArrayMemory0();\n let offset = 0;\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 127) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n WASM_VECTOR_LEN = offset;\n return ptr;\n }\n let cachedDataViewMemory0 = null;\n function getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n }\n const cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) : { decode: () => {\n throw Error("TextDecoder not available");\n } };\n if (typeof TextDecoder !== "undefined") {\n cachedTextDecoder.decode();\n }\n function getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n }\n function decode_wlg(bytes, tex_width, tex_height) {\n const ret = wasm.decode_wlg(bytes, tex_width, tex_height);\n return ret;\n }\n function old_sort_splats(max_splats, total_splats, readback, ordering) {\n const ret = wasm.old_sort_splats(max_splats, total_splats, readback, ordering);\n return ret >>> 0;\n }\n function sort_splats(num_splats, readback, ordering) {\n const ret = wasm.sort_splats(num_splats, readback, ordering);\n return ret >>> 0;\n }\n async function __wbg_load(module, imports) {\n if (typeof Response === "function" && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === "function") {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n if (module.headers.get("Content-Type") != "application/wasm") {\n console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n", e);\n } else {\n throw e;\n }\n }\n }\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n }\n function __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg_buffer_09165b52af8c5237 = function(arg0) {\n const ret = arg0.buffer;\n return ret;\n };\n imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) {\n const ret = arg0.buffer;\n return ret;\n };\n imports.wbg.__wbg_get_b9b93047fe3cf45b = function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return ret;\n };\n imports.wbg.__wbg_instanceof_Uint8Array_17156bcf118086a9 = function(arg0) {\n let result;\n try {\n result = arg0 instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_length_3b4f022188ae8db6 = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_6ca527665d89694d = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_8cfd2c6409af88ad = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_a446193dc22c12f8 = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_e2d2a49132c1b256 = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_new_405e22f390576ce2 = function() {\n const ret = new Object();\n return ret;\n };\n imports.wbg.__wbg_new_9fee97a409b32b68 = function(arg0) {\n const ret = new Uint16Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) {\n const ret = new Uint8Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_e3b321dcfef89fc7 = function(arg0) {\n const ret = new Uint32Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354 = function(arg0, arg1, arg2) {\n const ret = new Float32Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212 = function(arg0, arg1, arg2) {\n const ret = new Uint32Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_newwithlength_5a5efe313cfd59f1 = function(arg0) {\n const ret = new Float32Array(arg0 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_newwithlength_bd3de93688d68fbc = function(arg0) {\n const ret = new Uint32Array(arg0 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_set_10bad9bee0e9c58b = function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n };\n imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n };\n imports.wbg.__wbg_set_bb8cecf6a62b9f46 = function() {\n return handleError(function(arg0, arg1, arg2) {\n const ret = Reflect.set(arg0, arg1, arg2);\n return ret;\n }, arguments);\n };\n imports.wbg.__wbg_set_d23661d19148b229 = function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n };\n imports.wbg.__wbg_set_f4f1f0daa30696fc = function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n };\n imports.wbg.__wbg_subarray_3aaeec89bb2544f0 = function(arg0, arg1, arg2) {\n const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_subarray_769e1e0f81bb259b = function(arg0, arg1, arg2) {\n const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_export_2;\n const offset = table.grow(4);\n table.set(0, void 0);\n table.set(offset + 0, void 0);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n };\n imports.wbg.__wbindgen_memory = function() {\n const ret = wasm.memory;\n return ret;\n };\n imports.wbg.__wbindgen_number_new = function(arg0) {\n const ret = arg0;\n return ret;\n };\n imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n return imports;\n }\n function __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n }\n async function __wbg_init(module_or_path) {\n if (wasm !== void 0) return wasm;\n if (typeof module_or_path !== "undefined") {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({ module_or_path } = module_or_path);\n } else {\n console.warn("using deprecated parameters for the initialization function; pass a single object instead");\n }\n }\n if (typeof module_or_path === "undefined") {\n module_or_path = new URL("data:application/wasm;base64,AGFzbQEAAAABtgItYAJ/fwF/YAJ/fwBgA39/fwF/YAF/AGABfwF/YAN/f38AYAV/f39/fwBgBH9/f38AYAFvAX9gAW8Bb2ADb39/AW9gBX9/f39/AX9gA29vfwBgAABgA39+fgBgA39+fgF/YAd/f39/f39/AX9gBn9/f39/fwBgAX0BfWAEf39/fwF/YAABb2ABfwFvYAZ/f39/f38Bf2AAAX9gC39/f39/f39/f39/AX9gAn9/AW9gAXwBb2ACb38Bb2ADb29vAX9gAn9vAGAHf39/f39/fwBgAn9/AX5gAn9+AX9gAn9+AGALfX19fX19fX1/b38Bb2ABfwF9YAV/f35/fwBgBH9+f38AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AYAR/f29vAX9gA39vbwF/YAJ9fQF9ArcIHgN3YmcVX193YmluZGdlbl9zdHJpbmdfbmV3ABkDd2JnFV9fd2JpbmRnZW5fbnVtYmVyX25ldwAaA3diZxpfX3diZ19nZXRfYjliOTMwNDdmZTNjZjQ1YgAbA3diZx1fX3diZ19sZW5ndGhfZTJkMmE0OTEzMmMxYjI1NgAIA3diZxpfX3diZ19uZXdfNDA1ZTIyZjM5MDU3NmNlMgAUA3diZx1fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OAAJA3diZxpfX3diZ19uZXdfYTEyMDAyYTdmOTFjNzViZQAJA3diZxpfX3diZ19zZXRfNjU1OTViZGQ4NjhiMzAwOQAMA3diZx1fX3diZ19sZW5ndGhfYTQ0NjE5M2RjMjJjMTJmOAAIA3diZxpfX3diZ19uZXdfOWZlZTk3YTQwOWIzMmI2OAAJA3diZxpfX3diZ19zZXRfZjRmMWYwZGFhMzA2OTZmYwAMA3diZx1fX3diZ19sZW5ndGhfOGNmZDJjNjQwOWFmODhhZAAIA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyAAoDd2JnGl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3AAkDd2JnGl9fd2JnX3NldF9kMjM2NjFkMTkxNDhiMjI5AAwDd2JnHV9fd2JnX2xlbmd0aF82Y2E1Mjc2NjVkODk2OTRkAAgDd2JnMV9fd2JnX25ld3dpdGhi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CwJAIAAoAhAiAkUNAEGousIAQQggAhDVBEUNAEEBDAILIAFBATsBJCABIAQ2AiAgAUEANgIcIAFBAToAGCABQd8ANgIUIAEgBDYCECABQQA2AgwgASAENgIIIAEgAzYCBCABQd8ANgIAIAFBKGogARBQAn8gASgCKEUEQAJAIAEtACUNACABQQE6ACUCQCABLQAkQQFGBEAgASgCICEFIAEoAhwhBAwBCyABKAIgIgUgASgCHCIERg0BCyABKAIEIARqIQMgBSAEawwCC0GwusIAEK4EAAsgASgCHCEEIAEgASgCMDYCHCADIARqIQMgASgCLCAEawshBAJAIAIEQCADIAQgAhDVBA0BCyABQcgAaiABQSBqKQIANwMAIAFBQGsgAUEYaikCADcDACABQThqIAFBEGopAgA3AwAgAUEwaiABQQhqKQIANwMAIAEgASkCADcDKAJAIAEtAE0NACACIQMDQCABKAIsIQUgAUHUAGogAUEoahBQAn8gASgCVEUEQCABLQBNDQMgAUEBOgBNAkAgAS0ATEEBRgRAIAEoAkghBSABKAJEIQQMAQsgASgCSCIFIAEoAkQiBEYNBAsgASgCLCAEaiEGIAUgBGsMAQsgASgCRCEEIAEgASgCXDYCRCAEIAVqIQYgASgCWCAEawshBAJAIANFBEBBACEDDAELQbm2wgBBASADENUEDQMgACgCECICRQRAQQAhAkEAIQMMAQsgAiEDIAYgBCACENUEDQMLIAEtAE1FDQALCyACRQ0BQcC6wgBBAiACENUERQ0BC0EBDAELAkAgACgCECICRQ0AQcK6wgBBAyACENUERQ0AQQEMAQsCQAJAAkAgACgCACIDRQRAQQAhAwwBC0EAIQIDQAJAIAAoAggiBCAAKAIETw0AIAMgBGotAABBxQBHDQAgACAEQQFqNgIIDAILAkAgAkUNACAAKAIQIgNFDQBB9bnCAEECIAMQ1QRFDQBBAQwFCyAAECcNAiACQQFrIQIgACgCACIDDQALQQAhAwsgACgCECIEBEBBAUH1s8IAQQEgBBDVBA0DGiAAKAIAIQMLIANFDQEgACgCCCICIAAoAgRPDQEgAiADai0AAEH1AEcNASAAIAJBAWo2AghBAAwCC0EBDAELAkAgACgCECICRQ0AQcW6wgBBBCACENUERQ0AQQEMAQsgABAnCyAB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AWogBiARGyADa2whAwwDCyABIApBjIHCABCtAgALQZyBwgBBKUHIgcIAEO0CAAtBoP/BAEEXQZyAwgAQ7QIACyAPIAZBAWo2AgAgAkEEaiAJOgAAIAIgAzYCACACQQhqIQIgBCAFQQFqIgVHDQALCyAAQYWAgIB4NgIADwsgBUEBaiEFIAMoAgAhCSADQQRqIQMgCUEATA0ACyAFQQFrIQxBACEDA0ACQCACIAZJBEAgA0EBaiEDIAsgAkEDdGogDDoABQNAIAIgDWogDnEiAiAETw0ACwwBCyACIAZB2IHCABCtAgALIAMgCUcNAAsMAAsAC9IHAQN/AkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAOCgAHBwECAwQHBwUHCwJAAkACQAJAAkACQCAALQAEDgcADAEMAgMEDAsgAC0ACEEDRw0LIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQQgASADIAIoAggQpwQMBAsgAC0ACEEDRw0KIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQMgASADIAIoAggQpwQMAwsgAC0ACEEDRw0JIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQIgASADIAIoAggQpwQMAgsgAC0ACEEDRw0IIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQEgASADIAIoAggQpwQMAQsgAC0ACEEDRw0HIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQAgASADIAIoAggQpwQLIABBDEEEEKcEDwsCQAJAIAAtAAQOAgcBAAsgACgCCCIBQfv///8HaiICQQ1NIAJBAkdxDQYgAUGEgICAeEoNBSABQYOAgIB4Rw0GDAULIAAoAggiAUGEgICAeEogAUGDgICAeEZyDQQMBQsgAC0ABEEDRw0EDAULAkACQEEDIAAoAgQiAUEHayICIAJBA08bQQJrDgIBAAULAkACQAJAIAEOBgAHAQcHAgcLIAAtAAhBA0cNBgwICyAAKAIIIgFB7f///wdqIgJBCk0gAkEDR3ENBSABRSABQfv///8HaiICQQ1NIAJBAkdxIAFBg4CAgHhHIAFBhICAgHhMcXJyDQUMCQsgACgCCCIBQfv///8HaiICQQtNIAJBAkdxIAFBg4CAgHhHIAFBhICAgHhMcXIgAUVyDQQMCAsgAC0ACEEDRw0DDAULIAAtAARBA0cNAgwDCyAALQAEQQNHDQEgACgCCCIAKAIAIQEgAEEEaigCACICKAIAIgMEQCABIAMRAwALIAIoAgQiAwRAIAEgAyACKAIIEKcECyAAQQxBBBCnBAwBCyABRQ0AIAAoAgwgAUECdEEEEKcECw8LIAAoAggiACgCACEBDAELIAAoAgwiACgCACEBCyAAQQRqKAIAIgIoAgAiAwRAIAEgAxEDAAsgAigCBCIDBEAgASADIAIoAggQpwQLIABBDEEEEKcEDwsgACgCDCABQQJ0QQQQpwQLvQgBB38gACgCACICBEAgACgCBCEDAkAgACgCCCIHBEBBACEAA0ACQCAABEAgAiEBDAELQQAhAQJAIANFDQAgAyIAQQdxIgQEQANAIABBAWshACACKALgFiECIARBAWsiBA0ACwsgA0EISQ0AA0AgAigC4BYoAuAWKALgFigC4BYoAuAWKALgFigC4BYoAuAWIQIgAEEIayIADQALCyACIQBBACEDCwJAIAAvAd4WIANLBEAgAyEGIAAhAgwBCwNAIAAoAgAiAgRAIAAvAdwWIQYgAEGQF0HgFiABG0EEEKcEIAFBAWohASACIgAvAd4WIAZNDQEMAgsLIABBkBdB4BYgARtBBBCnBEHIpcEAEK4EAAsgBkEBaiEDAkAgAUUEQCACIQAMAQsgAiADQQJ0akHgFmohBAJAIAFBB3EiA0UEQCABIQUMAQsgASEFA0AgBUEBayEFIAQoAgAiAEHgFmohBCADQQFrIgMNAAsLQQAhAyABQQhJDQADQCAEKAIAKALgFigC4BYoAuAWKALgFigC4BYoAuAWKALgFiIAQeAWaiEEIAVBCGsiBQ0ACwsgAiAGQYQCbGpBMGoiAigCACIBBEAgAigCBCABQQN0QQQQpwQLIAIoAgwiAQRAIAIoAhAgAUECdEEEEKcECyACKAIYIgEEQCACKAIcIAFBAnRBBBCnBAsgAigCKCIBBEAgAigCLCABQQN0QQQQpwQLIAIoAjQiAQRAIAIoAjggAUECdEEEEKcECyACKAJAIgEEQCACKAJEIAFBAnRBBBCnBAsgAigCUCIBBEAgAigCVCABQQN0QQQQpwQLIAIoAlwiAQRAIAIoAmAgAUECdEEEEKcECyACKAJoIgEEQCACKAJsIAFBAnRBBBCnBAsgAigCgAEiAQRAIAIoAoQBIAFBAXRBARCnBAsgAigCjAEiAQRAIAIoApABIAFBARCnBAsgAigCmAEiAQRAIAIoApwBIAFBARCnBAsgAigCpAEiAQRAIAIoAqgBIAFBAnRBBBCnBAsgAigCsAEiAQRAIAIoArQBIAFBAnRBBBCnBAsgAigCvAEiAQRAIAIoAsABIAFBA3RBBBCnBAsgAigCyAEiAQRAIAIoAswBIAFBAnRBBBCnBAsgAigC1AEiAQRAIAIoAtgBIAFBAnRBBBCnBAsgAigC6AEiAQRAIAIoAuwBIAFBARCnBAtBACECIAdBAWsiBw0ACwwBCyADRQRAIAIhAAwBCwJAIANBB3EiBEUEQCACIQAgAyEBDAELIAIhACADIQEDQCABQQFrIQEgACgC4BYhACAEQQFrIgQNAAsLIANBCEkNAANAIAAoAuAWKALgFigC4BYoAuAWKALgFigC4BYoAuAWKALgFiEAIAFBCGsiAQ0ACwtBACEBA0AgACgCACAAQZAXQeAWIAEbQQQQpwQgAUEBayEBIgANAAsLC/kHAhR/AX4CQAJAAkACQAJAIAEoAgBFBEAgAS0ADg0BIAEgAS0ADCIGQQFzOgAMIAEoAjQhAyABKAIwIQQCQCABKAIEIgJFDQAgAiADTwRAIAIgA0YNAQwHCyACIARqLAAAQb9/TA0GCwJAIAIgA0cEQAJ/IAIgBGoiBCwAACIDQQBOBEAgA0H/AXEMAQsgBC0AAUE/cSEHIANBH3EhBSAFQQZ0IAdyIANBX00NABogBC0AAkE/cSAHQQZ0ciEHIAcgBUEMdHIgA0FwSQ0AGiAFQRJ0QYCA8ABxIAQtAANBP3EgB0EGdHJyCyEDQQEhBSAGQQFxDQECQCADQYABSQ0AQQIhBSADQYAQSQ0AQQNBBCADQYCABEkbIQULIAAgAjYCBCAAQQE2AgAgACACIAVqIgA2AgggASAANgIEDwsgBkEBcUUNBQsgACACNgIIIAAgAjYCBCAAQQA2AgAPCyABKAIcIgYgASgCNCIERg0BIAEoAjAhCgJAIAQiAyAGIAEoAjwiCEEBayIQaiICTQ0AIAEoAjghDSAGIApqIREgBiAIaiEHIAYgASgCECILayESIAEoAhgiAyAGaiEOIAggA2shEyABKQMIIRYgASgCJCIPQX9GIQkgDyEFIAYhAwNAIAMgBkcNAQJAAkAgFiACIApqMQAAiKdBAXFFBEAgASAHNgIcIAchAyAJDQJBACECDAELIAsgBSALIAUgC0sbIAkbIgMgCCADIAhLGyEMIAMhAgJAAkACQANAIAIgDEYEQEEAIAUgCRshDCALIQIDQCACIAxNBEAgASAHNgIcIA9Bf0cEQCABQQA2AiQLIAAgBzYCCCAAIAY2AgQgAEEANgIADwsgAkEBayICIAhPDQUgAiAGaiIDIARPDQMgAiANai0AACADIApqLQAARg0ACyABIA42AhwgEyECIA4hAyAJRQ0FDAYLIAIgBmogBE8NAiACIBFqIRQgAiANaiACQQFqIQItAAAgFC0AAEYNAAsgAiASaiEDIAkNBEEAIQIMAwsgAyAEQcCvwgAQrQIACyAEIAMgBmoiACAAIARJGyAEQdCvwgAQrQIACyACIAhBsK/CABCtAgALIAEgAjYCJCACIQULIAMgEGoiAiAESQ0ACyAEIQMLQQAhBSADRQ0CIAMhAgNAAkAgAiAETwRAIAIgBEcNASAEIQUMBQsgAiAKaiwAAEG/f0wNACACIQUMBAsgAkEBaiICDQALDAILIABBAjYCAA8LIABBAjYCAA8LIAAgBTYCCCAAIAY2AgQgAEEBNgIAIAEgAyAFIAMgBUsbNgIcDwsgAEECNgIAIAFBAToADg8LIAQgAyACIANBmLHCABDsAwAL1wgCBn8BfiMAQTBrIgUkACABQQA6ACUgAUEANgIUIAUgAzYCGCAFIAI2AhQgBUEANgIcIAVBIGogBUEUakEEEE8CQAJAAkACQAJAAkAgBSgCIEUEQCABIAUtAChBBWoiAjoAJQJAIAJB/wFxIgMgBEH/AXFNBEAgAw0BQYCAgIB4IQMMBgsgBSAEOgAFIAUgAjoABEGBgICAeCEDDAULIAFBDGohB0EBIAJ0IQlBACECA0ACQAJAAkACQCAJIAJrQQFqIgMEQCAFQSBqIAVBFGpBICADZyIGayIIEE8gBSkDKCELAkACQCAFKAIgRQRAIAunIgRBfyAGQR9zdEF/cyIKcSIGQX8gCHRBf3MgA2siA0kNASAEIANBACAEIApLG2shBgwCCyAFKAIkIQEgBSALNwIIIAUgATYCBAwJCyAFKAIcIgNFDQIgBSADQQFrNgIcCyAGQQFrIQMgASgCFCIEIAEoAgxGBEAgB0GIgsIAELQBCyABKAIQIARBAnRqIAM2AgAgASAEQQFqIgQ2AhQgA0UEQANAIAVBIGogBUEUakECEE8gBSkDKCELIAUoAiANBCABKAIUIgMgAyALpyIGaiIESQRAIAYgBygCACADa0sEQCAHIAMgBkEEQQQQkgEgASgCFCEDCyABKAIQIgggA0ECdGohBCAGQQJPBH8gBEEAIAZBAnRBBGsQWhogAyAGaiIEQQFrIQMgCCAEQQJ0akEEawUgBAtBADYCACADQQFqIQQLIAEgBDYCFCAGQQNGDQAMBgsACyADQQBKDQMgBkUEQCACQQFqIQIMBQtBmILCAEEcQbSCwgAQ7QIAC0Gg/8EAQRdBnIDCABDtAgALQdDiwQBBGkHU48EAEO0CAAsgBSgCJCEBIAUgCzcCCCAFIAE2AgQMBAsgAiADaiECCyACIAlJDQALIAIgCUYNAkEAIQYgBygCCCIEQQJ0IQMCQAJAIARB/////wNLIANB/P///wdLcg0AIAcoAgQhCAJ/IANFBEBBBCEHQQAMAQtBheXCAC0AABpBBCEGIANBBBD1AyIHRQ0BIAQLIQYgByAIIAMQOyEDIAUgBDYCCCAFIAM2AgQgBSAGNgIADAELIAYgA0GU/sEAENcDAAsgBSAJNgIQIAUgAjYCDCAFKAIAIgNBhYCAgHhHDQQgBSgCBCEDDAMLIAUgBSkDKDcCCCAFIAUoAiQ2AgQLQYKAgIB4IQMMAgsgAS0AJEEBaiAETwRAIAUoAhwiAkEDdiACQQdxQQBHaiEDDAELIAUgBDYCBEGEgICAeCEDDAELIAUgARApIAUoAgBBhYCAgHhHDQEgAEGFgICAeDYCACAAIAM2AgQMAgsgACAFKQIINwIIIABBEGogBUEQaigCADYCACAAIAUoAgQ2AgQgACADNgIADAELIAAgBSkCADcCACAAQRBqIAVBEGooAgA2AgAgAEEIaiAFQQhqKQIANwIACyAFQTBqJAAL0QYBCn8CQAJAAkACQAJAAkACQAJAAkACQCAAKAIIIgcgACgCDCIITwRAIAAoAgQiCyABIAdqIglJDQQgCyAJayIGIAIgAiAGSxshCiAAKAIAIgUgCGohBCAFIAdqIAFqIQMgCkEFSSAHIAhrIgcgBiAGIAdLGyIMQQRPcQ0BIAwgCkEDakF8cSIBTw0CIAQgAyAKEDsaDAMLIAAoAgQiCyAIayIGIAIgAiAGSxshCSAAKAIAIgUgCGohAyABIAdqIgEgBWohBCAJQQVJIAYgCCABayIKIAYgCkkbIgFBBE9xDQYgASAJQQNqQXxxIgFJBEAgAyAEIAkQOxoMCAsgAUEATA0HIAEgBGohCSAEIQEDQCADIAEoAAA2AAAgA0EEaiEDIAFBBGoiASAJSQ0ACwwHCyAEIAMoAAA2AAAMAQsgAUEATA0AIAEgA2ohCiAEIQEDQCABIAMoAAA2AAAgAUEEaiEBIANBBGoiAyAKSQ0ACwsgAiAGTQ0FIAQgBmohBCACIAZrIgNBBE0gByAGayIBIAggASAISRsiAUEDS3ENASABIANBA2pBfHEiAUkEQCAEIAUgAxA7GgwGCyABQQBMDQUgASAFaiEBIAggC2ogCWshBANAIAQgBWogBSgAADYAACAFQQRqIgUgAUkNAAsMBQsgCwRAIAcgCGsiASAIIAkgC3AiA2siBCABIARJGyEEIAAoAgAiBSAIaiEBIAMgBWohAyACQQRNIARBA0txDQIgBCACQQNqQXxxIgRJBEAgASADIAIQOxoMBwsgBEEATA0GIAMgBGohBANAIAEgAygAADYAACABQQRqIQEgA0EEaiIDIARJDQALDAULQdDpwQAQlAMACyAEIAUoAAA2AAAMAwsgASADKAAANgAADAMLIAMgBCgAADYAAAsgAiAGTQ0AIAQgBmohAwJAIAIgBmsiBEEETSAHIAogBmsiASABIAdLGyIBQQNLcUUEQCABIARBA2pBfHEiB08NASAFIAMgBBA7GgwCCyAFIAMoAAA2AAAMAQsgB0EATA0AIAMgB2ohAQNAIAUgAygAADYAACAFQQRqIQUgA0EEaiIDIAFJDQALCyALDQBB4OnBABCUAwALIAAgAiAIaiALcDYCDAvGBgEIfwJAAkAgASAAQQNqQXxxIgMgAGsiCEkNACABIAhrIgZBBEkNACAGQQNxIQdBACEBAkAgACADRiIJDQACQCAAIANrIgVBfEsEQEEAIQMMAQtBACEDA0AgASAAIANqIgIsAABBv39KaiACQQFqLAAAQb9/SmogAkECaiwAAEG/f0pqIAJBA2osAABBv39KaiEBIANBBGoiAw0ACwsgCQ0AIAAgA2ohAgNAIAEgAiwAAEG/f0pqIQEgAkEBaiECIAVBAWoiBQ0ACwsgACAIaiEAAkAgB0UNACAAIAZBfHFqIgMsAABBv39KIQQgB0EBRg0AIAQgAywAAUG/f0pqIQQgB0ECRg0AIAQgAywAAkG/f0pqIQQLIAZBAnYhBSABIARqIQQDQCAAIQMgBUUNAkHAASAFIAVBwAFPGyIGQQNxIQcgBkECdCEIQQAhAiAFQQRPBEAgACAIQfAHcWohCSAAIQEDQCABKAIAIgBBf3NBB3YgAEEGdnJBgYKECHEgAmogASgCBCIAQX9zQQd2IABBBnZyQYGChAhxaiABKAIIIgBBf3NBB3YgAEEGdnJBgYKECHFqIAEoAgwiAEF/c0EHdiAAQQZ2ckGBgoQIcWohAiABQRBqIgEgCUcNAAsLIAUgBmshBSADIAhqIQAgAkEIdkH/gfwHcSACQf+B/AdxakGBgARsQRB2IARqIQQgB0UNAAsCfyADIAZB/AFxQQJ0aiIAKAIAIgFBf3NBB3YgAUEGdnJBgYKECHEiASAHQQFGDQAaIAEgACgCBCIBQX9zQQd2IAFBBnZyQYGChAhxaiIBIAdBAkYNABogACgCCCIAQX9zQQd2IABBBnZyQYGChAhxIAFqCyIBQQh2Qf+BHHEgAUH/gfwHcWpBgYAEbEEQdiAEag8LIAFFBEBBAA8LIAFBA3EhAwJAIAFBBEkEQAwBCyABQXxxIQUDQCAEIAAgAmoiASwAAEG/f0pqIAFBAWosAABBv39KaiABQQJqLAAAQb9/SmogAUEDaiwAAEG/f0pqIQQgBSACQQRqIgJHDQALCyADRQ0AIAAgAmohAQNAIAQgASwAAEG/f0pqIQQgAUEBaiEBIANBAWsiAw0ACwsgBAvOBgEOfyMAQRBrIgYkAEEBIQwCQCACKAIcIglBIiACKAIgIg0oAhAiDhEAAA0AAkAgAUUEQEEAIQIMAQtBACABayEPIAAhByABIQMCQAJ/AkACQANAIAMgB2ohEEEAIQICQANAIAIgB2oiCi0AACIFQf8Aa0H/AXFBoQFJIAVBIkZyIAVB3ABGcg0BIAMgAkEBaiICRw0ACyADIAhqDAQLIApBAWohBwJAIAosAAAiC0EATgRAIAtB/wFxIQMMAQsgBy0AAEE/cSEDIAtBH3EhBSAKQQJqIQcgC0FfTQRAIAVBBnQgA3IhAwwBCyAHLQAAQT9xIANBBnRyIQMgCkEDaiEHIAtBcEkEQCADIAVBDHRyIQMMAQsgBUESdEGAgPAAcSAHLQAAQT9xIANBBnRyciEDIApBBGohBwsgBkEEaiADQYGABBA5AkACQCAGLQAEQYABRg0AIAYtAA8gBi0ADmtB/wFxQQFGDQAgBCACIAhqIgVLDQECQCAERQ0AIAEgBE0EQCABIARHDQMMAQsgACAEaiwAAEG/f0wNAgsCQCAFRQ0AIAEgBU0EQCAFIA9qRQ0BDAMLIAAgCGogAmosAABBv39MDQILIAkgACAEaiAIIARrIAJqIA0oAgwiBRECAA0DAkAgBi0ABEGAAUYEQCAJIAYoAgggDhEAAEUNAQwFCyAJIAYtAA4iBCAGQQRqaiAGLQAPIARrIAURAgANBAsCf0EBIANBgAFJDQAaQQIgA0GAEEkNABpBA0EEIANBgIAESRsLIAhqIAJqIQQLAn9BASADQYABSQ0AGkECIANBgBBJDQAaQQNBBCADQYCABEkbCyAIaiIFIAJqIQggECAHayIDRQ0DDAELCyAAIAEgBCAFQYDGwgAQ7AMACwwECyACIAVqCyICIARJDQBBACEDAkAgBEUNACABIARNBEAgBCIDIAFHDQIMAQsgBCIDIABqLAAAQb9/TA0BCyACRQRAQQAhAgwCCyABIAJNBEAgAyEEIAEgAkYNAgwBCyADIQQgACACaiwAAEG/f0oNAQsgACABIAQgAkGQxsIAEOwDAAsgCSAAIANqIAIgA2sgDSgCDBECAA0AIAlBIiAOEQAAIQwLIAZBEGokACAMC8EHAQF/IwBBMGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIAQQFrDgwBAgMEBQYHCAkKCwwACyACIABBBGo2AhQgAkEBNgIcIAJB8KfBADYCGCACQgE3AiQgAiACQRRqrUKAgICAsDeENwMAIAIgAjYCICABKAIcIAEoAiAgAkEYahBFDAwLIAIgAEEIajYCFCACQQE2AhwgAkHwp8EANgIYIAJCATcCJCACIAJBFGqtQoCAgIDAN4Q3AwAgAiACNgIgIAEoAhwgASgCICACQRhqEEUMCwsgAiAAQQhqNgIUIAJBAjYCHCACQeC0wQA2AhggAkICNwIkIAJCsKbBgMA1NwMIIAIgAkEUaq1CgICAgNA1hDcDACACIAI2AiAgASgCHCABKAIgIAJBGGoQRQwKCyACIABBBGo2AhQgAkEBNgIcIAJB8KfBADYCGCACQgE3AiQgAiACQRRqrUKAgICA0DeENwMAIAIgAjYCICABKAIcIAEoAiAgAkEYahBFDAkLIAIgAEEEajYCFCACQQE2AhwgAkGUtcEANgIYIAJCATcCJCACIAJBFGqtQoCAgIDgN4Q3AwAgAiACNgIgIAEoAhwgASgCICACQRhqEEUMCAsgAiAAQQRqNgIUIAJBATYCHCACQby1wQA2AhggAkIBNwIkIAIgAkEUaq1CgICAgPA3hDcDACACIAI2AiAgASgCHCABKAIgIAJBGGoQRQwHCyACIABBBGo2AhQgAkEBNgIcIAJB4LXBADYCGCACQgE3AiQgAiACQRRqrUKAgICAkDWENwMAIAIgAjYCICABKAIcIAEoAiAgAkEYahBFDAYLIAEoAhxB6LXBAEExIAEoAiAoAgwRAgAMBQsgAiAAQQhqNgIUIAJBATYCHCACQci2wQA2AhggAkIBNwIkIAIgAkEUaq1CgICAgIA4hDcDACACIAI2AiAgASgCHCABKAIgIAJBGGoQRQwECyACIABBBGo2AhQgAkEBNgIcIAJBjLfBADYCGCACQgE3AiQgAiACQRRqrUKAgICAkDWENwMAIAIgAjYCICABKAIcIAEoAiAgAkEYahBFDAMLIAEoAhxBlLfBAEE9IAEoAiAoAgwRAgAMAgsgASgCHEHRt8EAQc8AIAEoAiAoAgwRAgAMAQsgAiAAQQRqNgIUIAJBAjYCHCACQYC5wQA2AhggAkIBNwIkIAIgAkEUaq1CgICAgJA2hDcDACACIAI2AiAgASgCHCABKAIgIAJBGGoQRQsgAkEwaiQAC/0GAgJ/AX4jAEEwayICJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkBBAyAAKAIAQe3///8HaiIDIANBC08bQQFrDgoBAgMEBQYHCAkKAAsgASgCHEGQucEAQdgAIAEoAiAoAgwRAgAMCgsgASgCHEHoucEAQd0AIAEoAiAoAgwRAgAMCQsgAiAAQQRqNgIEIAJBATYCDCACQfCnwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA4hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwICyACIAA2AgQgAkEBNgIMIAJB8KfBADYCCCACQgE3AhQgAiACQQRqrUKAgICAoDeENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAcLIAIgAEEEajYCBCACQQE2AgwgAkHwp8EANgIIIAJCATcCFCACIAJBBGqtQoCAgICgOIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMBgsgASgCHEHFusEAQTkgASgCICgCDBECAAwFCyACIABBBGo2AgQgAkECNgIMIAJBqLvBADYCCCACQgE3AhQgAiACQQRqrUKAgICA8DWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAQLIAIgAEEEajYCACACIABBCGo2AgQgAkEDNgIMIAJB6LvBADYCCCACQgI3AhQgAkKAgICA8DUiBCACrYQ3AyggAiAEIAJBBGqthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwDCyACIABBBGo2AgQgAkECNgIMIAJB8LzBADYCCCACQgE3AhQgAiACQQRqrUKAgICAsDiENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAILIAIgAEEEajYCACACIABBCGo2AgQgAkECNgIMIAJBsL3BADYCCCACQgI3AhQgAkKAgICAwDgiBCACQQRqrYQ3AyggAiAEIAKthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAjYCDCACQfS9wQA2AgggAkICNwIUIAJCgICAgPA1IgQgAkEEaq2ENwMoIAIgBCACrYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAuXBgEIfyMAQTBrIgEkAAJAAn8CQAJAAkAgACgCACIFBEAgACgCCCIEIAQgACgCBCIHIAQgB0sbayEIIAUhAwNAIAIgCGpFDQMgACACIARqQQFqNgIIIAJBAWohAiADIARqIANBAWohAy0AACIGQTBrQf8BcUEKSSAGQeEAa0H/AXFBBklyDQALIAZB3wBHDQIgAiAEakEBayEGAkAgBARA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IABBABAgDAELIAAQJwsgBEEQaiQAC5QDAQR/AkAgAkEQSQRAIAAhAwwBCwJAIABBACAAa0EDcSIFaiIEIABNDQAgACEDIAUEQCAFIQYDQCADIAE6AAAgA0EBaiEDIAZBAWsiBg0ACwsgBUEBa0EHSQ0AA0AgAyABOgAAIANBB2ogAToAACADQQZqIAE6AAAgA0EFaiABOgAAIANBBGogAToAACADQQNqIAE6AAAgA0ECaiABOgAAIANBAWogAToAACADQQhqIgMgBEcNAAsLIAQgAiAFayICQXxxaiIDIARLBEAgAUH/AXFBgYKECGwhBQNAIAQgBTYCACAEQQRqIgQgA0kNAAsLIAJBA3EhAgsCQCADIAIgA2oiBU8NACACQQdxIgQEQANAIAMgAToAACADQQFqIQMgBEEBayIEDQALCyACQQFrQQdJDQADQCADIAE6AAAgA0EHaiABOgAAIANBBmogAToAACADQQVqIAE6AAAgA0EEaiABOgAAIANBA2ogAToAACADQQJqIAE6AAAgA0EBaiABOgAAIANBCGoiAyAFRw0ACwsgAAudAwIGfwF+QTggAUH/AXEiASABQThPGyECAkAgACgCECIEIAAtABQiAWoiA0EASgRAIAIgA0sNAQJAIARBAEwgASACT3INAANAIARBAWsiBUEDdiEGQcAAIAFBB2oiB0F4cWshAwJAIAVBP00EQCAAIAYgAxCIASAAKAIQIQQgAC0AFCEBDAELAkAgACgCBCIFIAYgB0H4AXFBA3ZqQQdrIgZPBEAgBSAGayIFQQdLDQFBCCAFQcTewQAQqwQACyAGIAVB1N7BABCqBAALIAAgASADaiIBOgAUIAAgBCADQf8BcWsiBDYCECAAIAAoAgAgBmopAAA3AwgLIAFB/wFxIAJPDQEgBEEASg0ACwsgACABIAJrIgE6ABRCfyACrYZCf4UgACkDCCABQT9xrYiDDwsgACAEIAJrNgIQQgAPCyACIANrIQICQCADQf8BcSABSwRAIAAgAxBbIQggACgCECEEDAELIAAgASADayIBOgAUQn8gA62GQn+FIAApAwggAUE/ca2IgyEICyAAIAQgAms2AhAgCCACQT9xrYYLnAMBBX8CQEERQQAgAEGvsARPGyIBIAFBCHIiASAAQQt0IgIgAUECdEH82sIAaigCAEELdEkbIgEgAUEEciIBIAFBAnRB/NrCAGooAgBBC3QgAksbIgEgAUECciIBIAFBAnRB/NrCAGooAgBBC3QgAksbIgEgAUEBaiIBIAFBAnRB/NrCAGooAgBBC3QgAksbIgEgAUEBaiIBIAFBAnRB/NrCAGooAgBBC3QgAksbIgNBAnRB/NrCAGooAgBBC3QiASACRiABIAJJaiADaiICQSFNBEAgAkECdEH82sIAaiIBKAIAQRV2IQNB7wUhBAJ/AkAgAkEhRg0AIAEoAgRBFXYhBCACDQBBAAwBCyABQQRrKAIAQf///wBxCyEBAkAgBCADQX9zakUNACAAIAFrIQJB7wUgAyADQe8FTRshBSAEQQFrIQFBACEAA0AgAyAFRg0DIAAgA0GE3MIAai0AAGoiACACSw0BIAEgA0EBaiIDRw0ACyABIQMLIANBAXEPCyACQSJB3NjCABCtAgALIAVB7wVB7NjCABCtAgAL1wMBAX8jAEEQayICJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgBBAWsODAECAwQFBgcICQoLDAALIAIgAEEEajYCDCABQaidwABBFCACQQxqQZidwAAQfwwMCyACIABBCGo2AgwgAUHMncAAQRAgAkEMakG8ncAAEH8MCwsgAiAAQQhqNgIMIAFB3J3AAEEQQfKYwABBCSACQQxqQcibwAAQyQEMCgsgAiAAQQRqNgIMIAFB/J3AAEEVIAJBDGpB7J3AABB/DAkLIAIgAEEEajYCDCABQaSewABBFyACQQxqQZSewAAQfwwICyACIABBBGo2AgwgAUHMnsAAQRUgAkEMakG8nsAAEH8MBwsgAiAAQQRqNgIMIAFB9J7AAEEUIAJBDGpB5J7AABB/DAYLIAFBiJ/AAEEREOUDDAULIAIgAEEIajYCDCABQZmfwABBEiACQQxqQbydwAAQfwwECyACIABBBGo2AgwgAUGrn8AAQRkgAkEMakHknsAAEH8MAwsgAUHEn8AAQREQ5QMMAgsgAUHVn8AAQQ4Q5QMMAQsgAiAAQQRqNgIMIAFB45/AAEEPQfKfwABBByACQQxqQbiawAAQyQELIAJBEGokAAvXAwEBfyMAQRBrIgIkAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCAEEBaw4MAQIDBAUGBwgJCgsMAAsgAiAAQQRqNgIMIAFBvMDAAEEUIAJBDGpBrMDAABB/DAwLIAIgAEEIajYCDCABQeDAwABBECACQQxqQdDAwAAQfwwLCyACIABBCGo2AgwgAUHwwMAAQRBBhrzAAEEJIAJBDGpB3L7AABDJAQwKCyACIABBBGo2AgwgAUGQwcAAQRUgAkEMakGAwcAAEH8MCQsgAiAAQQRqNgIMIAFBuMHAAEEXIAJBDGpBqMHAABB/DAgLIAIgAEEEajYCDCABQeDBwABBFSACQQxqQdDBwAAQfwwHCyACIABBBGo2AgwgAUGIwsAAQRQgAkEMakH4wcAAEH8MBgsgAUGcwsAAQREQ5QMMBQsgAiAAQQhqNgIMIAFBrcLAAEESIAJBDGpB0MDAABB/DAQLIAIgAEEEajYCDCABQb/CwABBGSACQQxqQfjBwAAQfwwDCyABQdjCwABBERDlAwwCCyABQenCwABBDhDlAwwBCyACIABBBGo2AgwgAUH3wsAAQQ9BhsPAAEEHIAJBDGpBzL3AABDJAQsgAkEQaiQAC9cDAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIAQQFrDgwBAgMEBQYHCAkKCwwACyACIABBBGo2AgwgAUGM48AAQRQgAkEMakH84sAAEH8MDAsgAiAAQQhqNgIMIAFBsOPAAEEQIAJBDGpBoOPAABB/DAsLIAIgAEEIajYCDCABQcDjwABBEEHU3sAAQQkgAkEMakGs4cAAEMkBDAoLIAIgAEEEajYCDCABQeDjwABBFSACQQxqQdDjwAAQfwwJCyACIABBBGo2AgwgAUGI5MAAQRcgAkEMakH448AAEH8MCAsgAiAAQQRqNgIMIAFBsOTAAEEVIAJBDGpBoOTAABB/DAcLIAIgAEEEajYCDCABQcXkwABBFCACQQxqQZjcwAAQfwwGCyABQdnkwABBERDlAwwFCyACIABBCGo2AgwgAUHq5MAAQRIgAkEMakGg48AAEH8MBAsgAiAAQQRqNgIMIAFB/OTAAEEZIAJBDGpBmNzAABB/DAMLIAFBleXAAEEREOUDDAILIAFBpuXAAEEOEOUDDAELIAIgAEEEajYCDCABQbTlwABBD0HD5cAAQQcgAkEMakGc4MAAEMkBCyACQRBqJAAL6wMBAn8jAEEQayICJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkBBAyAAKAIAIgAoAgBB7f///wdqIgMgA0ELTxtBAWsOCgECAwQFBgcICQoACyABQbHUwQBBFRDlAwwKCyABQcbUwQBBERDlAwwJCyACIABBBGo2AgwgAUHo1MEAQQwgAkEMakHY1MEAEH8MCAsgAiAANgIMIAFBoNTBAEERIAJBDGpBkNTBABB/DAcLIAIgAEEEajYCDCABQYTVwQBBEyACQQxqQfTUwQAQfwwGCyABQZfVwQBBGRDlAwwFCyACIABBBGo2AgwgAUGw1cEAQRlBi87BAEEDIAJBDGpBuM3BABDJAQwECyACIABBCGo2AgwgAUHJ1cEAQRdBi87BAEEDIABBBGpB9MzBAEHg1cEAQQYgAkEMakG4zcEAEMMBDAMLIAIgAEEEajYCDCABQfjVwQBBDEGE1sEAQQwgAkEMakHo1cEAEMkBDAILIAIgAEEIajYCDCABQbDWwQBBFUHF1sEAQQggAEEEakGQ1sEAQe7OwQBBCCACQQxqQaDWwQAQwwEMAQsgAiAAQQhqNgIMIAFBzdbBAEEbQejWwQBBByAAQQRqQfTMwQBB7s7BAEEIIAJBDGpBuM3BABDDAQsgAkEQaiQAC+YDAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAQQMgACgCAEHt////B2oiAyADQQtPG0EBaw4KAQIDBAUGBwgJCgALIAFB3LHAAEEVEOUDDAoLIAFB8bHAAEEREOUDDAkLIAIgAEEEajYCDCABQcSZwABBDCACQQxqQbSZwAAQfwwICyACIAA2AgwgAUHwrMAAQREgAkEMakHgrMAAEH8MBwsgAiAAQQRqNgIMIAFBlLLAAEETIAJBDGpBhLLAABB/DAYLIAFBp7LAAEEZEOUDDAULIAIgAEEEajYCDCABQcCywABBGUGsmcAAQQMgAkEMakHMmMAAEMkBDAQLIAIgAEEIajYCDCABQdmywABBF0GsmcAAQQMgAEEEakGImMAAQfCywABBBiACQQxqQcyYwAAQwwEMAwsgAiAAQQRqNgIMIAFBiKHAAEEMQZShwABBDCACQQxqQfigwAAQyQEMAgsgAiAAQQhqNgIMIAFBiLPAAEEVQZ2zwABBCCAAQQRqQfiywABBppzAAEEIIAJBDGpB4KPAABDDAQwBCyACIABBCGo2AgwgAUGls8AAQRtBwLPAAEEHIABBBGpBiJjAAEGmnMAAQQggAkEMakHMmMAAEMMBCyACQRBqJAAL5gMBAn8jAEEQayICJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkBBAyAAKAIAQe3///8HaiIDIANBC08bQQFrDgoBAgMEBQYHCAkKAAsgAUHw1MAAQRUQ5QMMCgsgAUGF1cAAQREQ5QMMCQsgAiAAQQRqNgIMIAFB2LzAAEEMIAJBDGpByLzAABB/DAgLIAIgADYCDCABQYTQwABBESACQQxqQfTPwAAQfwwHCyACIABBBGo2AgwgAUGo1cAAQRMgAkEMakGY1cAAEH8MBgsgAUG71cAAQRkQ5QMMBQsgAiAAQQRqNgIMIAFB1NXAAEEZQcC8wABBAyACQQxqQeC7wAAQyQEMBAsgAiAAQQhqNgIMIAFB7dXAAEEXQcC8wABBAyAAQQRqQZy7wABBhNbAAEEGIAJBDGpB4LvAABDDAQwDCyACIABBBGo2AgwgAUGcxMAAQQxBqMTAAEEMIAJBDGpBjMTAABDJAQwCCyACIABBCGo2AgwgAUGc1sAAQRVBsdbAAEEIIABBBGpBjNbAAEG6v8AAQQggAkEMakH0xsAAEMMBDAELIAIgAEEIajYCDCABQbnWwABBG0HU1sAAQQcgAEEEakGcu8AAQbq/wABBCCACQQxqQeC7wAAQwwELIAJBEGokAAvmAwECfyMAQRBrIgIkAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQEEDIAAoAgBB7f///wdqIgMgA0ELTxtBAWsOCgECAwQFBgcICQoACyABQdj3wABBFRDlAwwKCyABQe33wABBERDlAwwJCyACIABBBGo2AgwgAUGo38AAQQwgAkEMakGY38AAEH8MCAsgAiAANgIMIAFB7PLAAEERIAJBDGpB3PLAABB/DAcLIAIgAEEEajYCDCABQZD4wABBEyACQQxqQYD4wAAQfwwGCyABQaP4wABBGRDlAwwFCyACIABBBGo2AgwgAUG8+MAAQRlBkN/AAEEDIAJBDGpB+NzAABDJAQwECyACIABBCGo2AgwgAUHV+MAAQRdBkN/AAEEDIABBBGpBjN7AAEHs+MAAQQYgAkEMakH43MAAEMMBDAMLIAIgAEEEajYCDCABQcXmwABBDEHR5sAAQQwgAkEMakHo2sAAEMkBDAILIAIgAEEIajYCDCABQYT5wABBFUGZ+cAAQQggAEEEakH0+MAAQYriwABBCCACQQxqQaDpwAAQwwEMAQsgAiAAQQhqNgIMIAFBofnAAEEbQbz5wABBByAAQQRqQYzewABBiuLAAEEIIAJBDGpB+NzAABDDAQsgAkEQaiQAC+YDAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAQQMgACgCAEHt////B2oiAyADQQtPG0EBaw4KAQIDBAUGBwgJCgALIAFB7J3BAEEVEOUDDAoLIAFBgZ7BAEEREOUDDAkLIAIgAEEEajYCDCABQeyHwQBBDCACQQxqQdyHwQAQfwwICyACIAA2AgwgAUGAmcEAQREgAkEMakHwmMEAEH8MBwsgAiAAQQRqNgIMIAFBpJ7BAEETIAJBDGpBlJ7BABB/DAYLIAFBt57BAEEZEOUDDAULIAIgAEEEajYCDCABQdCewQBBGUHUh8EAQQMgAkEMakH0hsEAEMkBDAQLIAIgAEEIajYCDCABQemewQBBF0HUh8EAQQMgAEEEakHohcEAQYCfwQBBBiACQQxqQfSGwQAQwwEMAwsgAiAAQQRqNgIMIAFBzIzBAEEMQdiMwQBBDCACQQxqQbyMwQAQyQEMAgsgAiAAQQhqNgIMIAFBmJ/BAEEVQa2fwQBBCCAAQQRqQYifwQBBzorBAEEIIAJBDGpBpI/BABDDAQwBCyACIABBCGo2AgwgAUG1n8EAQRtB0J/BAEEHIABBBGpB6IXBAEHOisEAQQggAkEMakH0hsEAEMMBCyACQRBqJAAL5wIBBX8CQEHN/3tBECAAIABBEE0bIgBrIAFNDQAgAEEQIAFBC2pBeHEgAUELSRsiBGpBDGoQHiICRQ0AIAJBCGshAQJAIABBAWsiAyACcUUEQCABIQAMAQsgAkEEayIFKAIAIgZBeHEgAiADakEAIABrcUEIayICIABBACACIAFrQRBNG2oiACABayICayEDIAZBA3EEQCAAIAMgACgCBEEBcXJBAnI2AgQgACADaiIDIAMoAgRBAXI2AgQgBSACIAUoAgBBAXFyQQJyNgIAIAEgAmoiAyADKAIEQQFyNgIEIAEgAhBYDAELIAEoAgAhASAAIAM2AgQgACABIAJqNgIACwJAIAAoAgQiAUEDcUUNACABQXhxIgIgBEEQak0NACAAIAQgAUEBcXJBAnI2AgQgACAEaiIBIAIgBGsiBEEDcjYCBCAAIAJqIgIgAigCBEEBcjYCBCABIAQQWAsgAEEIaiEDCyADC/ICAgZ/An4jAEEQayIEJAAgAAJ/AkACQCABKAIIIgMgASgCBCIFSQRAIAEoAgAiBiADai0AAEHzAEYNAQsgAEIANwMIDAELIAEgA0EBaiICNgIIAkACQAJAIAIgBU8NACACIAZqLQAAQd8ARw0AIAEgA0ECajYCCAwBCwJAAkADQAJAIAIgBUkEQCACIAZqLQAAQd8ARg0BCyACIAVGDQICQCACIAZqLQAAIgNBMGsiB0H/AXFBCkkNACADQeEAa0H/AXFBGk8EQCADQcEAa0H/AXFBGk8NBCADQR1rIQcMAQsgA0HXAGshBwsgASACQQFqIgI2AgggBCAIEJsCIAQpAwhCAFINAiAEKQMAIgkgB61C/wGDfCIIIAlaDQEMAgsLIAEgAkEBajYCCCAIQn9SDQELIABBADoAAUEBDAQLIAhCAXwiCEJ/UQ0BCyAAIAhCAXw3AwgMAQsgAEEAOgABQQEMAQtBAAs6AAAgBEEQaiQAC9kCAgR/AX4jAEHQAGsiBCQAIAQgASACQbu2wgBBARAhA0AgBEHEAGogBBAsIAQoAkQiA0UNAAsCQCAAIAICfyADQQJHBEAgBCgCSAwBCyACCyIDa0EQTQR+IAIgA0cEQCABIAJqIQYgASADaiEDA0ACfyADLAAAIgFBAE4EQCABQf8BcSECIANBAWoMAQsgAy0AAUE/cSEFIAFBH3EhAiABQV9NBEAgAkEGdCAFciECIANBAmoMAQsgAy0AAkE/cSAFQQZ0ciEFIAFBcEkEQCAFIAJBDHRyIQIgA0EDagwBCyACQRJ0QYCA8ABxIAMtAANBP3EgBUEGdHJyIQIgA0EEagshAyACQcEAa0FfcUEKaiACQTBrIAJBOUsbIgFBEE8NAyABrSAHQgSGhCEHIAMgBkcNAAsLIAAgBzcDCEIBBSAHCzcDACAEQdAAaiQADwtBvLbCABCuBAALgwMBB38jAEEQayIEJAACQAJAAkACQAJAIAEoAgQiAkUNACABKAIAIQcgAkEDcSEFAkAgAkEESQRAQQAhAgwBCyAHQRxqIQMgAkF8cSEIQQAhAgNAIAMoAgAgA0EIaygCACADQRBrKAIAIANBGGsoAgAgAmpqamohAiADQSBqIQMgCCAGQQRqIgZHDQALCyAFBEAgBkEDdCAHakEEaiEDA0AgAygCACACaiECIANBCGohAyAFQQFrIgUNAAsLIAEoAgwEQCACQQBIDQEgBygCBEUgAkEQSXENASACQQF0IQILQQAhBSACQQBIDQMgAg0BC0EBIQNBACECDAELQYXlwgAtAAAaQQEhBSACQQEQ9QMiA0UNAQsgBEEANgIIIAQgAzYCBCAEIAI2AgAgBEHMvsIAIAEQRUUNAUHov8IAQdYAIARBD2pB2L/CAEHYwMIAEKACAAsgBSACQci/wgAQ1wMACyAAIAQpAgA3AgAgAEEIaiAEQQhqKAIANgIAIARBEGokAAuhAwEIfyMAQSBrIgIkABCYAUGQ5MIAKAIAIQVBjOTCACgCACEHQYzkwgBCADcCAEGE5MIAKAIAIQZBiOTCACgCACEDQYTkwgBCBDcCAEGA5MIAKAIAIQBBgOTCAEEANgIAAkAgAyAHRgRAAkAgACADRgRA0G9BgAEgACAAQYABTRsiBPwPASIBQX9GDQMCQCAFRQRAIAEhBQwBCyAAIAVqIAFHDQQLIAAgBGoiBEH/////AUsNAyACIAAEfyACIAY2AhQgAiAAQQJ0NgIcQQQFQQALNgIYIAJBCGpBBCAEQQJ0IAJBFGoQ2wEgAigCCEEBRg0DIAIoAgwhBiAAIQEgBCEADAELIAAgAyIBTQ0CCyAGIAFBAnRqIANBAWo2AgAgAUEBaiEDCyADIAdNDQAgBiAHQQJ0aigCACEBQZDkwgAgBTYCAEGM5MIAIAE2AgBBiOTCACADNgIAQYTkwgAoAgAhAUGE5MIAIAY2AgBBgOTCACgCACEEQYDkwgAgADYCACAEBEAgASAEQQJ0QQQQpwQLIAJBIGokACAFIAdqDwsAC78DAQF/IwBBQGoiAiQAAkACQAJAAkACQAJAIAAtAABBAWsOAwECAwALIAIgACgCBDYCBEGF5cIALQAAGkEUQQEQ9QMiAEUNBCAAQRBqQdanwgAoAAA2AAAgAEEIakHOp8IAKQAANwAAIABBxqfCACkAADcAACACQRQ2AhAgAiAANgIMIAJBFDYCCCACQQM2AiwgAkH0nsIANgIoIAJCAjcCNCACIAJBBGqtQoCAgICwPoQ3AyAgAiACQQhqrUKAgICAwD6ENwMYIAIgAkEYajYCMCABKAIcIAEoAiAgAkEoahBFIQAgAigCCCIBRQ0DIAIoAgwgAUEBEKcEDAMLIAAtAAEhACACQQE2AiwgAkH8l8IANgIoIAJCATcCNCACIAJBGGqtQoCAgICQPoQ3AwggAiAAQQJ0IgBBzKjCAGooAgA2AhwgAiAAQfSpwgBqKAIANgIYIAIgAkEIajYCMCABKAIcIAEoAiAgAkEoahBFIQAMAgsgACgCBCIAKAIAIAAoAgQgARDVBCEADAELIAAoAgQiACgCACABIAAoAgQoAhARAAAhAAsgAkFAayQAIAAPC0EBQRRB8JLCABDXAwALsQIBAX8jAEHwAGsiBiQAIAYgATYCDCAGIAA2AgggBiADNgIUIAYgAjYCECAGQbzCwgA2AhggBkECNgIcAkAgBCgCAEUEQCAGQQM2AlwgBkH4wsIANgJYIAZCAzcCZCAGIAZBEGqtQoCAgICAxACENwNIIAYgBkEIaq1CgICAgIDEAIQ3A0AMAQsgBkEwaiAEQRBqKQIANwMAIAZBKGogBEEIaikCADcDACAGIAQpAgA3AyAgBkEENgJcIAZBrMPCADYCWCAGQgQ3AmQgBiAGQRBqrUKAgICAgMQAhDcDUCAGIAZBCGqtQoCAgICAxACENwNIIAYgBkEgaq1CgICAgKDEAIQ3A0ALIAYgBkEYaq1CgICAgJDEAIQ3AzggBiAGQThqNgJgIAZB2ABqIAUQpAMAC+YCAQh/IwBBEGsiBiQAQQohAyAAIgRB6AdPBEAgBCEFA0AgBkEGaiADaiIHQQNrIAUgBUGQzgBuIgRBkM4AbGsiCEH//wNxQeQAbiIJQQF0IgpBksTCAGotAAA6AAAgB0EEayAKQZHEwgBqLQAAOgAAIAdBAWsgCCAJQeQAbGtB//8DcUEBdCIIQZLEwgBqLQAAOgAAIAdBAmsgCEGRxMIAai0AADoAACADQQRrIQMgBUH/rOIESyAEIQUNAAsLAkAgBEEJTQRAIAQhBQwBCyADIAZqQQVqIAQgBEH//wNxQeQAbiIFQeQAbGtB//8DcUEBdCIEQZLEwgBqLQAAOgAAIANBAmsiAyAGQQZqaiAEQZHEwgBqLQAAOgAAC0EAIAAgBRtFBEAgA0EBayIDIAZBBmpqIAVBAXRBHnFBksTCAGotAAA6AAALIAIgAUEBQQAgBkEGaiADakEKIANrEDUgBkEQaiQAC5IDAQN/AkACQAJAAkACQAJAAkAgAC0AAA4HAAYBBgIDBAYLIAAtAARBA0cNBSAAKAIIIgAoAgAhAiAAQQRqKAIAIgMoAgAiAQRAIAIgAREDAAsgAygCBCIBRQ0EIAIgASADKAIIEKcEDAQLIAAtAARBA0cNBCAAKAIIIgAoAgAhAiAAQQRqKAIAIgMoAgAiAQRAIAIgAREDAAsgAygCBCIBRQ0DIAIgASADKAIIEKcEDAMLIAAtAARBA0cNAyAAKAIIIgAoAgAhAiAAQQRqKAIAIgMoAgAiAQRAIAIgAREDAAsgAygCBCIBRQ0CIAIgASADKAIIEKcEDAILIAAtAARBA0cNAiAAKAIIIgAoAgAhAiAAQQRqKAIAIgMoAgAiAQRAIAIgAREDAAsgAygCBCIBRQ0BIAIgASADKAIIEKcEDAELIAAtAARBA0cNASAAKAIIIgAoAgAhAiAAQQRqKAIAIgMoAgAiAQRAIAIgAREDAAsgAygCBCIBRQ0AIAIgASADKAIIEKcECyAAQQxBBBCnBAsLlAMBAX8jAEHwAGsiAiQAAn8CQAJAAkAgAC0AAEEBaw4CAQIACyACIABBAWo2AgQgAkKotMGA8DY3AyggAiACQQRqrUKAgICAgDeENwMgIAJBAjYCHCACQQI2AgwgAkGYtMEANgIIIAJBAjYCFCACQQM6AGwgAkEcNgJoIAJCoICAgBA3AmAgAkKAgICAwAA3AlggAkECNgJQIAJBAzoATCACQSw2AkggAkIgNwJAIAJCgICAgMAANwI4IAJBAjYCMCACIAJBMGo2AhggAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMAgsgAiAAQQRqNgIgIAJBATYCNCACQfCnwQA2AjAgAkIBNwI8IAIgAkEgaq1CgICAgJA3hDcDCCACIAJBCGo2AjggASgCHCABKAIgIAJBMGoQRQwBCyACIABBBGo2AiAgAkEBNgI0IAJB8KfBADYCMCACQgE3AjwgAiACQSBqrUKAgICAoDeENwMIIAIgAkEIajYCOCABKAIcIAEoAiAgAkEwahBFCyACQfAAaiQAC4gDAgR/AX4jAEFAaiIGJABBASEHAkAgAC0ABA0AIAAtAAUhCCAAKAIAIgUtABRBBHFFBEAgBSgCHEH/w8IAQfzDwgAgCEEBcSIIG0ECQQMgCBsgBSgCICgCDBECAA0BIAUoAhwgASACIAUoAiAoAgwRAgANASAFKAIcQczDwgBBAiAFKAIgKAIMEQIADQEgAyAFIAQoAgwRAAAhBwwBCyAIQQFxRQRAIAUoAhxBgcTCAEEDIAUoAiAoAgwRAgANAQsgBkEBOgAXIAZBIGogBUEIaikCADcDACAGQShqIAVBEGopAgA3AwAgBkEwaiAFQRhqKAIANgIAIAYgBSkCHDcCCCAFKQIAIQkgBkHgw8IANgI4IAYgCTcDGCAGIAZBF2o2AhAgBiAGQQhqIgU2AjQgBSABIAIQSA0AIAVBzMPCAEECEEgNACADIAZBGGogBCgCDBEAAA0AIAYoAjRBhMTCAEECIAYoAjgoAgwRAgAhBwsgAEEBOgAFIAAgBzoABCAGQUBrJAAgAAvJAgIHfwJ+IwBBEGsiBCQAIAEoAgAhBgJAAkACQCABKAIIIgIgASgCBCIHSQRAIAIgBmotAABB3wBGDQELIAIgByACIAdLGyEIAkADQCACIAdJBEAgAiAGai0AAEHfAEYNAgsgAiAIRg0DAkAgAiAGai0AACIFQTBrIgNB/wFxQQpJDQAgBUHhAGtB/wFxQRpPBEAgBUHBAGtB/wFxQRpPDQUgBUEdayEDDAELIAVB1wBrIQMLIAEgAkEBaiICNgIIIAQgCRCbAiAEKQMIQgBSDQMgBCkDACIKIAOtQv8Bg3wiCSAKWg0ACwwCC0EBIQMgASACQQFqNgIIIAlCf1IEQCAAIAlCAXw3AwhBACEDDAMLIABBADoAAQwCCyAAQgA3AwggASACQQFqNgIIDAELIABBADoAAUEBIQMLIAAgAzoAACAEQRBqJAAL0gIBB39BASEJAkACQCACRQ0AIAEgAkEBdGohCiAAQYD+A3FBCHYhCyAAQf8BcSENA0AgAUECaiEMIAcgAS0AASICaiEIIAsgAS0AACIBRwRAIAEgC0sNAiAIIQcgDCIBIApGDQIMAQsCQAJAIAcgCE0EQCAEIAhJDQEgAyAHaiEBA0AgAkUNAyACQQFrIQIgAS0AACABQQFqIQEgDUcNAAtBACEJDAULIAcgCEH4zMIAEKwEAAsgCCAEQfjMwgAQqwQACyAIIQcgDCIBIApHDQALCyAGRQ0AIAUgBmohAyAAQf//A3EhAQNAIAVBAWohAAJAIAUsAAAiAkEATgRAIAAhBQwBCyAAIANHBEAgBS0AASACQf8AcUEIdHIhAiAFQQJqIQUMAQtB6MzCABCuBAALIAEgAmsiAUEASA0BIAlBAXMhCSADIAVHDQALCyAJQQFxC/kCAQV/IwBBMGsiAyQAIANBIGpCADcDACADQRhqQgA3AwAgA0EQakIANwMAIANCADcDCCADQShqIAEgA0EIakEgECgCQAJAAkAgAy0AKCIEQQRGDQADQAJAAkACQAJAAkAgBEEBaw4DAgABBAsgAygCLC0ACEEjRg0CDAMLIAMoAiwiBC0ACEEjRw0CIAQoAgAhBiAEQQRqKAIAIgcoAgAiBQRAIAYgBREDAAsgBygCBCIFBEAgBiAFIAcoAggQpwQLIARBDEEEEKcEDAELIAMtAClBI0cNAQsgA0EoaiABIANBCGpBIBAoIAMtACgiBEEERw0BDAILCyAAIAMpAyg3AgAMAQsgAygCLCIEQSFPDQEgBCACKAIAIAIoAggiAWtLBEAgAiABIARBAUEBEJABIAIoAgghAQsgAigCBCABaiADQQhqIAQQOxogACAENgIEIAIgASAEajYCCCAAQQQ6AAALIANBMGokAA8LIARBIEGIo8EAEKsEAAvYAgEEfyMAQRBrIgIkAAJAIAFBgAFPBEAgAkEMaiIEQQJyIQMgAkEANgIMAkAgAUGAEE8EQCAEQQNyIQUgAUGAgARPBEAgAkEQaiEDIAIgAUESdkHwAXI6AAwgAiABQQZ2QT9xQYABcjoADiACIAFBDHZBP3FBgAFyOgANIAUhBAwCCyACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA0gAyEEIAUhAwwBCyACQQxqQQFyIQQgAiABQQZ2QcABcjoADAsgBCABQT9xQYABcjoAACADIAJBDGprIgMgACgCACAAKAIIIgFrSwRAIAAgASADEJMBIAAoAgghAQsgACgCBCABaiACQQxqIAMQOxogACABIANqNgIIDAELIAAoAggiAyAAKAIARgRAIABBwIfCABDCAQsgACgCBCADaiABOgAAIAAgA0EBajYCCAsgAkEQaiQAQQAL2AIBBH8jAEEQayICJAACQCABQYABTwRAIAJBDGoiBEECciEDIAJBADYCDAJAIAFBgBBPBEAgBEEDciEFIAFBgIAETwRAIAJBEGohAyACIAFBEnZB8AFyOgAMIAIgAUEGdkE/cUGAAXI6AA4gAiABQQx2QT9xQYABcjoADSAFIQQMAgsgAiABQQx2QeABcjoADCACIAFBBnZBP3FBgAFyOgANIAMhBCAFIQMMAQsgAkEMakEBciEEIAIgAUEGdkHAAXI6AAwLIAQgAUE/cUGAAXI6AAAgAyACQQxqayIDIAAoAgAgACgCCCIBa0sEQCAAIAEgAxCTASAAKAIIIQELIAAoAgQgAWogAkEMaiADEDsaIAAgASADajYCCAwBCyAAKAIIIgMgACgCAEYEQCAAQcyKwgAQwgELIAAoAgQgA2ogAToAACAAIANBAWo2AggLIAJBEGokAEEAC/ECAQR/IAAoAgwhAgJAAkAgAUGAAk8EQCAAKAIYIQMCQAJAIAAgAkYEQCAAQRRBECAAKAIUIgIbaigCACIBDQFBACECDAILIAAoAggiASACNgIMIAIgATYCCAwBCyAAQRRqIABBEGogAhshBANAIAQhBSABIgJBFGogAkEQaiACKAIUIgEbIQQgAkEUQRAgARtqKAIAIgENAAsgBUEANgIACyADRQ0CIAAgACgCHEECdEGo5cIAaiIBKAIARwRAIANBEEEUIAMoAhAgAEYbaiACNgIAIAJFDQMMAgsgASACNgIAIAINAUHE6MIAQcTowgAoAgBBfiAAKAIcd3E2AgAMAgsgACgCCCIAIAJHBEAgACACNgIMIAIgADYCCA8LQcDowgBBwOjCACgCAEF+IAFBA3Z3cTYCAA8LIAIgAzYCGCAAKAIQIgEEQCACIAE2AhAgASACNgIYCyAAKAIUIgBFDQAgAiAANgIUIAAgAjYCGAsLxgIBA38jAEEQayICJAACQCABQYABTwRAIAJBADYCDAJ/IAFBgBBPBEAgAUGAgARPBEAgAkEMakEDciEEIAIgAUESdkHwAXI6AAwgAiABQQZ2QT9xQYABcjoADiACIAFBDHZBP3FBgAFyOgANQQQMAgsgAkEMakECciEEIAIgAUEMdkHgAXI6AAwgAiABQQZ2QT9xQYABcjoADUEDDAELIAJBDGpBAXIhBCACIAFBBnZBwAFyOgAMQQILIQMgBCABQT9xQYABcjoAACADIAAoAgAgACgCCCIBa0sEQCAAIAEgAxC5ASAAKAIIIQELIAAoAgQgAWogAkEMaiADEDsaIAAgASADajYCCAwBCyAAKAIIIgMgACgCAEYEQCAAQejAwgAQwgELIAAgA0EBajYCCCAAKAIEIANqIAE6AAALIAJBEGokAEEAC5QDAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkBBAiAAKAIAIgAoAgBB+////wdqIgMgA0EMTxtBAWsOCwECAwQFBgcICQoLAAsgAiAAQQRqNgIMIAFB6NTBAEEMIAJBDGpB2NTBABB/DAsLIAIgAEEEajYCDCABQdDXwQBBDyACQQxqQcDXwQAQfwwKCyACIAA2AgwgAUGA1MEAQQ0gAkEMakHw08EAEH8MCQsgAiAAQQRqNgIMIAFB+NXBAEEMQYTWwQBBDCACQQxqQejVwQAQyQEMCAsgAiAAQQRqNgIMIAFB39fBAEERQfDXwQBBCyACQQxqQYTNwQAQyQEMBwsgAUG018EAQQoQ5QMMBgsgAUH718EAQR0Q5QMMBQsgAiAAQQRqNgIMIAFBmNjBAEEJQaHYwQBBDiACQQxqQaDWwQAQyQEMBAsgAUGv2MEAQRYQ5QMMAwsgAUHF2MEAQRgQ5QMMAgsgAUHd2MEAQRgQ5QMMAQsgAUH12MEAQRgQ5QMLIAJBEGokAAvEAgECfyMAQRBrIgIkAAJAIAFBgAFPBEAgAkEANgIMAn8gAUGAEE8EQCABQYCABE8EQCACIAFBP3FBgAFyOgAPIAIgAUESdkHwAXI6AAwgAiABQQZ2QT9xQYABcjoADiACIAFBDHZBP3FBgAFyOgANQQQMAgsgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwwBCyACIAFBP3FBgAFyOgANIAIgAUEGdkHAAXI6AAxBAgshASABIAAoAgAgACgCCCIDa0sEQCAAIAMgARCgASAAKAIIIQMLIAAoAgQgA2ogAkEMaiABEDsaIAAgASADajYCCAwBCyAAKAIIIgMgACgCAEYEQCAAQcyTwgAQwgELIAAoAgQgA2ogAToAACAAIANBAWo2AggLIAJBEGokAEEAC48DAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkBBAiAAKAIAQfv///8HaiIDIANBDE8bQQFrDgsBAgMEBQYHCAkKCwALIAIgAEEEajYCDCABQcSZwABBDCACQQxqQbSZwAAQfwwLCyACIABBBGo2AgwgAUGMoMAAQQ8gAkEMakH8n8AAEH8MCgsgAiAANgIMIAFBrKDAAEENIAJBDGpBnKDAABB/DAkLIAIgAEEEajYCDCABQYihwABBDEGUocAAQQwgAkEMakH4oMAAEMkBDAgLIAIgAEEEajYCDCABQZyjwABBEUGto8AAQQsgAkEMakGYmMAAEMkBDAcLIAFBuKPAAEEKEOUDDAYLIAFBwqPAAEEdEOUDDAULIAIgAEEEajYCDCABQfCjwABBCUH5o8AAQQ4gAkEMakHgo8AAEMkBDAQLIAFBh6TAAEEWEOUDDAMLIAFBnaTAAEEYEOUDDAILIAFBtaTAAEEYEOUDDAELIAFBzaTAAEEYEOUDCyACQRBqJAALjwMBAn8jAEEQayICJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQEECIAAoAgBB+////wdqIgMgA0EMTxtBAWsOCwECAwQFBgcICQoLAAsgAiAAQQRqNgIMIAFB2LzAAEEMIAJBDGpByLzAABB/DAsLIAIgAEEEajYCDCABQaDDwABBDyACQQxqQZDDwAAQfwwKCyACIAA2AgwgAUHAw8AAQQ0gAkEMakGww8AAEH8MCQsgAiAAQQRqNgIMIAFBnMTAAEEMQajEwABBDCACQQxqQYzEwAAQyQEMCAsgAiAAQQRqNgIMIAFBsMbAAEERQcHGwABBCyACQQxqQay7wAAQyQEMBwsgAUHMxsAAQQoQ5QMMBgsgAUHWxsAAQR0Q5QMMBQsgAiAAQQRqNgIMIAFBhMfAAEEJQY3HwABBDiACQQxqQfTGwAAQyQEMBAsgAUGbx8AAQRYQ5QMMAwsgAUGxx8AAQRgQ5QMMAgsgAUHJx8AAQRgQ5QMMAQsgAUHhx8AAQRgQ5QMLIAJBEGokAAuPAwECfyMAQRBrIgIkAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAQQIgACgCAEH7////B2oiAyADQQxPG0EBaw4LAQIDBAUGBwgJCgsACyACIABBBGo2AgwgAUGo38AAQQwgAkEMakGY38AAEH8MCwsgAiAAQQRqNgIMIAFB3OXAAEEPIAJBDGpBzOXAABB/DAoLIAIgADYCDCABQfzlwABBDSACQQxqQezlwAAQfwwJCyACIABBBGo2AgwgAUHF5sAAQQxB0ebAAEEMIAJBDGpB6NrAABDJAQwICyACIABBBGo2AgwgAUHc6MAAQRFB7ejAAEELIAJBDGpB+NrAABDJAQwHCyABQfjowABBChDlAwwGCyABQYLpwABBHRDlAwwFCyACIABBBGo2AgwgAUGw6cAAQQlBuenAAEEOIAJBDGpBoOnAABDJAQwECyABQcfpwABBFhDlAwwDCyABQd3pwABBGBDlAwwCCyABQfXpwABBGBDlAwwBCyABQY3qwABBGBDlAwsgAkEQaiQAC48DAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkBBAiAAKAIAQfv///8HaiIDIANBDE8bQQFrDgsBAgMEBQYHCAkKCwALIAIgAEEEajYCDCABQeyHwQBBDCACQQxqQdyHwQAQfwwLCyACIABBBGo2AgwgAUHQi8EAQQ8gAkEMakHAi8EAEH8MCgsgAiAANgIMIAFB8IvBAEENIAJBDGpB4IvBABB/DAkLIAIgAEEEajYCDCABQcyMwQBBDEHYjMEAQQwgAkEMakG8jMEAEMkBDAgLIAIgAEEEajYCDCABQeCOwQBBEUHxjsEAQQsgAkEMakHAhsEAEMkBDAcLIAFB/I7BAEEKEOUDDAYLIAFBho/BAEEdEOUDDAULIAIgAEEEajYCDCABQbSPwQBBCUG9j8EAQQ4gAkEMakGkj8EAEMkBDAQLIAFBy4/BAEEWEOUDDAMLIAFB4Y/BAEEYEOUDDAILIAFB+Y/BAEEYEOUDDAELIAFBkZDBAEEYEOUDCyACQRBqJAALzQIBAn8jAEEwayICJAACfwJAAkACQEEBIAAtAABBAmsiAyADQf8BcUEDTxtB/wFxQQFrDgIBAgALIAIgAEEBajYCBCACQQI2AgwgAkGAwsEANgIIIAJCATcCFCACIAJBBGqtQoCAgIDgNIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMAgsgAiAANgIEIAJBATYCDCACQfCnwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA4hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAjYCDCACQdTCwQA2AgggAkICNwIUIAIgAkEEaq1CgICAgOA0hDcDKCACIAKtQoCAgIDwNYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAvEAgEEfyAAQgA3AhAgAAJ/QQAgAUGAAkkNABpBHyABQf///wdLDQAaIAFBBiABQQh2ZyIDa3ZBAXEgA0EBdGtBPmoLIgI2AhwgAkECdEGo5cIAaiEEQQEgAnQiA0HE6MIAKAIAcUUEQCAEIAA2AgAgACAENgIYIAAgADYCDCAAIAA2AghBxOjCAEHE6MIAKAIAIANyNgIADwsCQAJAIAEgBCgCACIDKAIEQXhxRgRAIAMhAgwBCyABQRkgAkEBdmtBACACQR9HG3QhBQNAIAMgBUEddkEEcWpBEGoiBCgCACICRQ0CIAVBAXQhBSACIQMgAigCBEF4cSABRw0ACwsgAigCCCIBIAA2AgwgAiAANgIIIABBADYCGCAAIAI2AgwgACABNgIIDwsgBCAANgIAIAAgAzYCGCAAIAA2AgwgACAANgIIC9MCAQR/IwBBQGoiBSQAQQEhBgJAIAAoAhwiByABIAIgACgCICIIKAIMIgERAgANAAJAIAAtABRBBHFFBEAgB0GJxMIAQQEgARECAA0CIAMgACAEKAIMEQAARQ0BDAILIAdBisTCAEECIAERAgANASAFQQE6ABcgBUEgaiAAQQhqKQIANwMAIAVBKGogAEEQaikCADcDACAFQTBqIABBGGooAgA2AgAgBSAINgIMIAUgBzYCCCAFQeDDwgA2AjggBSAAKQIANwMYIAUgBUEXajYCECAFIAVBCGo2AjQgAyAFQRhqIAQoAgwRAAANASAFKAI0QYTEwgBBAiAFKAI4KAIMEQIADQELAkAgAg0AIAAtABRBBHENACAAKAIcQYzEwgBBASAAKAIgKAIMEQIADQELIAAoAhxB+cDCAEEBIAAoAiAoAgwRAgAhBgsgBUFAayQAIAYLtAIBB38jAEEwayICJAAgAkEBQX8gASAAKAIEIgFqIgNBAWtndkEBaiADQQFNGyIDQQFBfyABQQFrZ3ZBAWogAUEBTRsiBSADIAVLG0EBaiIDNgIMAkAgA0EATgRAQYXlwgAtAAAaIANBARD1AyIFRQ0BIAEEQCAFIAAoAgAiByAAKAIIIgRqIAEgACgCDCIGIAQgBksiCBsgBGsiBBA7IARqIAcgBkEAIAgbIgYQOxogByABQQEQpwQgAEEANgIIIAAgBCAGajYCDAsgACADNgIEIAAgBTYCACACQTBqJAAPCyACQQE2AhQgAkGY6cEANgIQIAJCATcCHCACIAJBDGqtQoCAgIAQhDcDKCACIAJBKGo2AhggAkEQakGg6cEAEKQDAAtBwOfBAEEuQdjowQAQwwIAC+UCAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAIAAoAgAiAC0AAEEBaw4HAQIDBAUGBwALIAIgAEEEajYCDCABQbjPwQBBFCACQQxqQajPwQAQfwwHCyACIABBBGo2AgwgAUHcz8EAQQ4gAkEMakHMz8EAEH8MBgsgAiAAQQRqNgIMIAFB6s/BAEEYIAJBDGpBqM/BABB/DAULIAIgAEEBajYCDCABQYLQwQBBFiACQQxqQbzOwQAQfwwECyACIABBBGo2AgwgAUGY0MEAQRkgAkEMakGoz8EAEH8MAwsgAiAAQQRqNgIMIAFBsdDBAEEVIAJBDGpBqM/BABB/DAILIAIgAEEEajYCDCABQcbQwQBBGSACQQxqQajPwQAQfwwBCyACIABBCGo2AgwgAUHw0MEAQQlB+dDBAEEMIABBBGpB4NDBAEGF0cEAQQYgAkEMakHMz8EAEMMBCyACQRBqJAALugICBH8BfiMAQUBqIgMkAEEBIQUCQCAALQAEDQAgAC0ABSEGAkAgACgCACIELQAUQQRxRQRAIAZBAXFFDQEgBCgCHEH/w8IAQQIgBCgCICgCDBECAEUNAQwCCyAGQQFxRQRAIAQoAhxBjcTCAEEBIAQoAiAoAgwRAgANAgsgA0EBOgAXIANBIGogBEEIaikCADcDACADQShqIARBEGopAgA3AwAgA0EwaiAEQRhqKAIANgIAIAMgBCkCHDcCCCAEKQIAIQcgA0Hgw8IANgI4IAMgBzcDGCADIANBF2o2AhAgAyADQQhqNgI0IAEgA0EYaiACKAIMEQAADQEgAygCNEGExMIAQQIgAygCOCgCDBECACEFDAELIAEgBCACKAIMEQAAIQULIABBAToABSAAIAU6AAQgA0FAayQAC+ACAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAIAAtAABBAWsOBwECAwQFBgcACyACIABBBGo2AgwgAUGQq8AAQRQgAkEMakHknsAAEH8MBwsgAiAAQQRqNgIMIAFBpKvAAEEOIAJBDGpBuJrAABB/DAYLIAIgAEEEajYCDCABQbKrwABBGCACQQxqQeSewAAQfwwFCyACIABBAWo2AgwgAUHKq8AAQRYgAkEMakH0m8AAEH8MBAsgAiAAQQRqNgIMIAFB4KvAAEEZIAJBDGpB5J7AABB/DAMLIAIgAEEEajYCDCABQfmrwABBFSACQQxqQeSewAAQfwwCCyACIABBBGo2AgwgAUGOrMAAQRkgAkEMakHknsAAEH8MAQsgAiAAQQhqNgIMIAFBp6zAAEEJQbCswABBDCAAQQRqQdCZwABBvKzAAEEGIAJBDGpBuJrAABDDAQsgAkEQaiQAC+ACAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAIAAtAABBAWsOBwECAwQFBgcACyACIABBBGo2AgwgAUGkzsAAQRQgAkEMakH4wcAAEH8MBwsgAiAAQQRqNgIMIAFBuM7AAEEOIAJBDGpBzL3AABB/DAYLIAIgAEEEajYCDCABQcbOwABBGCACQQxqQfjBwAAQfwwFCyACIABBAWo2AgwgAUHezsAAQRYgAkEMakGIv8AAEH8MBAsgAiAAQQRqNgIMIAFB9M7AAEEZIAJBDGpB+MHAABB/DAMLIAIgAEEEajYCDCABQY3PwABBFSACQQxqQfjBwAAQfwwCCyACIABBBGo2AgwgAUGiz8AAQRkgAkEMakH4wcAAEH8MAQsgAiAAQQhqNgIMIAFBu8/AAEEJQcTPwABBDCAAQQRqQeS8wABB0M/AAEEGIAJBDGpBzL3AABDDAQsgAkEQaiQAC+ACAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAIAAtAABBAWsOBwECAwQFBgcACyACIABBBGo2AgwgAUGM8cAAQRQgAkEMakGY3MAAEH8MBwsgAiAAQQRqNgIMIAFBoPHAAEEOIAJBDGpBnODAABB/DAYLIAIgAEEEajYCDCABQa7xwABBGCACQQxqQZjcwAAQfwwFCyACIABBAWo2AgwgAUHG8cAAQRYgAkEMakHY4cAAEH8MBAsgAiAAQQRqNgIMIAFB3PHAAEEZIAJBDGpBmNzAABB/DAMLIAIgAEEEajYCDCABQfXxwABBFSACQQxqQZjcwAAQfwwCCyACIABBBGo2AgwgAUGK8sAAQRkgAkEMakGY3MAAEH8MAQsgAiAAQQhqNgIMIAFBo/LAAEEJQazywABBDCAAQQRqQbTfwABBuPLAAEEGIAJBDGpBnODAABDDAQsgAkEQaiQAC+ACAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAIAAtAABBAWsOBwECAwQFBgcACyACIABBBGo2AgwgAUGgl8EAQRQgAkEMakGMlMEAEH8MBwsgAiAAQQRqNgIMIAFBtJfBAEEOIAJBDGpB4IjBABB/DAYLIAIgAEEEajYCDCABQcKXwQBBGCACQQxqQYyUwQAQfwwFCyACIABBAWo2AgwgAUHal8EAQRYgAkEMakGcisEAEH8MBAsgAiAAQQRqNgIMIAFB8JfBAEEZIAJBDGpBjJTBABB/DAMLIAIgAEEEajYCDCABQYmYwQBBFSACQQxqQYyUwQAQfwwCCyACIABBBGo2AgwgAUGemMEAQRkgAkEMakGMlMEAEH8MAQsgAiAAQQhqNgIMIAFBt5jBAEEJQcCYwQBBDCAAQQRqQfiHwQBBzJjBAEEGIAJBDGpB4IjBABDDAQsgAkEQaiQAC6gCAQV/IABBADYCFCAAQQA2AiAgAEEAOgAlIABBADYCCCABKAIgIgNBAnQhBSABKAIcIQYgAyAAKAIYSwRAIABBGGpBACADQQRBBBCSASAAKAIgIQQgACgCFCECCyAAKAIcIARBAnRqIAYgBRA7GiAAIAMgBGo2AiAgASgCFCIDQQJ0IQQgASgCECEFIAMgACgCDCACa0sEQCAAQQxqIAIgA0EEQQQQkgEgACgCFCECCyAAKAIQIAJBAnRqIAUgBBA7GiAAIAIgA2o2AhQgASgCBCEEIAEoAggiAyAAKAIAIAAoAggiAmtLBEAgACACIANBBEEIEJIBIAAoAgghAgsgACgCBCACQQN0aiAEIANBA3QQOxogACACIANqNgIIIAAgAS0AJToAJQukAgIFfwF+IwBBEGsiAyQAIAAoAhAhBSADQgA3AwggBSACQf8BcSICIAIgBUobIgZBCG0hAgJAIAZBCGtBcEsgAkEJT3JFBEAgACgCBCIHIAEgAmtBAWoiBEkNASACQQN0IQECQAJAAkAgAiAHIARrTQRAIAAoAgAgBGohBCAGQXhxQQhGDQEgA0EIaiAEIAIQOxogAykDCCEICyAAIAUgAWs2AhAgACAALQAUIAFqOgAUIAJBCEkNASAAIAg3AwgMAgsgACAFIAFrNgIQIAAgAC0AFCABajoAFCADIAQtAAA6AAggAykDCCEICyAAIAApAwggAa2GIAiENwMICyADQRBqJAAPC0Hk3sEAQShBjN/BABDtAgALIAQgB0Gc38EAEKoEAAudAgEFfwJAAkACQAJAIAJBA2pBfHEiBCACRg0AIAQgAmsiBCADIAMgBEsbIgVFDQBBACEEIAFB/wFxIQZBASEHA0AgAiAEai0AACAGRg0EIAUgBEEBaiIERw0ACyAFIANBCGsiCEsNAgwBCyADQQhrIQhBACEFCyABQf8BcUGBgoQIbCEEA0BBgIKECCACIAVqIgcoAgAgBHMiBmsgBnJBgIKECCAHQQRqKAIAIARzIgZrIAZycUGAgYKEeHFBgIGChHhHDQEgBUEIaiIFIAhNDQALCyADIAVHBEAgAUH/AXEhBEEBIQcDQCAEIAIgBWotAABGBEAgBSEEDAMLIAMgBUEBaiIFRw0ACwtBACEHCyAAIAQ2AgQgACAHNgIAC5YCAQN/IwBBEGsiAiQAIAJBADYCDAJ/IAFBgAFPBEAgAUGAEE8EQCABQYCABE8EQCACIAFBP3FBgAFyOgAPIAIgAUESdkHwAXI6AAwgAiABQQZ2QT9xQYABcjoADiACIAFBDHZBP3FBgAFyOgANQQQMAwsgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwwCCyACIAFBP3FBgAFyOgANIAIgAUEGdkHAAXI6AAxBAgwBCyACIAE6AAxBAQshASAAIAAoAgQiAyABazYCBCAAIAAoAgAgASADS3IiBDYCAEEBIQMgBEUEQCAAKAIIIAJBDGogARDlAyEDCyACQRBqJAAgAwuvAgEFfyMAQTBrIgIkACACQSBqIgQgAUE4aikDADcDACACQRhqIgUgAUEwaikDADcDACACQRBqIgYgAUEoaikDADcDAEGF5cIALQAAGiACIAEpAyA3AwhBIEEIEPUDIgMEQCADIAIpAwg3AwAgA0EYaiAEKQMANwMAIANBEGogBSkDADcDACADQQhqIAYpAwA3AwACQCABKAIEQQJHDQACQAJAIAEtABhBAWsOAgIAAQsgAkEBNgIMIAJBtP7AADYCCCACQgA3AhQgAiACQSxqNgIQIAJBCGpBuP/AABCkAwALIAFBCGoQqQEgASgCCCIERQ0AIAEoAgwgBEEMbEEEEKcECyABQcAAQQgQpwQgAEHklsAANgIEIAAgAzYCACACQTBqJAAPC0EIQSAQ0wQAC94CAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQCAAKAIAIgAtAABBAWsOBgECAwQFBgALIAIgAEEIajYCDCABQaDOwQBBDEGLzsEAQQMgAkEMakGQzsEAEMkBDAYLIAIgAEEIajYCDCABQazOwQBBDkGLzsEAQQMgAkEMakGQzsEAEMkBDAULIAIgAEEBajYCDCABQczOwQBBFCACQQxqQbzOwQAQfwwECyACIABBCGo2AgwgAUHgzsEAQQ5Bi87BAEEDIABBBGpB9MzBAEHuzsEAQQggAkEMakG4zcEAEMMBDAMLIAIgAEEBajYCDCABQfbOwQBBE0GLzsEAQQMgAEEEakH0zMEAQe7OwQBBCCACQQxqQYTNwQAQwwEMAgsgAUGJz8EAQQ8Q5QMMAQsgAiAAQQFqNgIMIAFBmM/BAEEQQYvOwQBBAyACQQxqQYTNwQAQyQELIAJBEGokAAuLAgEBfyMAQRBrIgIkACAAKAIAIQACfyABKAIAIAEoAghyBEAgAkEANgIMIAEgAkEMagJ/IABBgAFPBEAgAEGAEE8EQCAAQYCABE8EQCACIABBP3FBgAFyOgAPIAIgAEESdkHwAXI6AAwgAiAAQQZ2QT9xQYABcjoADiACIABBDHZBP3FBgAFyOgANQQQMAwsgAiAAQT9xQYABcjoADiACIABBDHZB4AFyOgAMIAIgAEEGdkE/cUGAAXI6AA1BAwwCCyACIABBP3FBgAFyOgANIAIgAEEGdkHAAXI6AAxBAgwBCyACIAA6AAxBAQsQNgwBCyABKAIcIAAgASgCICgCEBEAAAsgAkEQaiQAC4YCAQN/IwBBgAFrIgQkACAAKAIAIQACfwJAIAEoAhQiAkEQcUUEQCACQSBxDQEgACgCAEEBIAEQbAwCCyAAKAIAIQBBACECA0AgAiAEakH/AGogAEEPcSIDQTByIANB1wBqIANBCkkbOgAAIAJBAWshAiAAQQ9LIABBBHYhAA0ACyABQQFBj8TCAEECIAIgBGpBgAFqQQAgAmsQNQwBCyAAKAIAIQBBACECA0AgAiAEakH/AGogAEEPcSIDQTByIANBN2ogA0EKSRs6AAAgAkEBayECIABBD0sgAEEEdiEADQALIAFBAUGPxMIAQQIgAiAEakGAAWpBACACaxA1CyAEQYABaiQAC/0BAgR/AX4jAEEgayIFJAACQAJAIARFDQAgASABIAJqIgJLDQAgAyAEakEBa0EAIANrca0gAiAAKAIAIgFBAXQiBiACIAZLGyICQQhBBEEBIARBgQhJGyAEQQFGGyIGIAIgBksbIgatfiIJQiCIUEUNACAJpyIIQYCAgIB4IANrSw0AQQAhAiAFIAEEfyAFIAEgBGw2AhwgBSAAKAIENgIUIAMFIAILNgIYIAVBCGogAyAIIAVBFGoQ2wEgBSgCCEEBRw0BIAUoAhAhAiAFKAIMIQcLIAcgAkGIisAAENcDAAsgBSgCDCEBIAAgBjYCACAAIAE2AgQgBUEgaiQAC/0BAgR/AX4jAEEgayIFJAACQAJAIARFDQAgASABIAJqIgJLDQAgAyAEakEBa0EAIANrca0gAiAAKAIAIgFBAXQiBiACIAZLGyICQQhBBEEBIARBgQhJGyAEQQFGGyIGIAIgBksbIgatfiIJQiCIUEUNACAJpyIIQYCAgIB4IANrSw0AQQAhAiAFIAEEfyAFIAEgBGw2AhwgBSAAKAIENgIUIAMFIAILNgIYIAVBCGogAyAIIAVBFGoQ2wEgBSgCCEEBRw0BIAUoAhAhAiAFKAIMIQcLIAcgAkH4/MAAENcDAAsgBSgCDCEBIAAgBjYCACAAIAE2AgQgBUEgaiQAC64CAQJ/IwBBQGoiAiQAAn8CQAJAAkACQEEDIAAoAgBBB2siAyADQQNPG0EBaw4DAQIDAAsgASgCHEHssMEAQckAIAEoAiAoAgwRAgAMAwsgASgCHEG1scEAQfIAIAEoAiAoAgwRAgAMAgsgAiAAQQxqNgIMIAIgAEEEajYCJCACQQI2AiwgAkHIssEANgIoIAJCAjcCNCACIAJBJGqtQoCAgICQNYQ3AxggAiACQQxqrUKAgICAoDWENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAELIAIgADYCJCACQQE2AiwgAkHwp8EANgIoIAJCATcCNCACIAJBJGqtQoCAgICwNYQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEULIAJBQGskAAv9AQIEfwF+IwBBIGsiBSQAAkACQCAERQ0AIAEgASACaiICSw0AIAMgBGpBAWtBACADa3GtIAIgACgCACIBQQF0IgYgAiAGSxsiAkEIQQRBASAEQYEISRsgBEEBRhsiBiACIAZLGyIGrX4iCUIgiFBFDQAgCaciCEGAgICAeCADa0sNAEEAIQIgBSABBH8gBSABIARsNgIcIAUgACgCBDYCFCADBSACCzYCGCAFQQhqIAMgCCAFQRRqENsBIAUoAghBAUcNASAFKAIQIQIgBSgCDCEHCyAHIAJBwN3BABDXAwALIAUoAgwhASAAIAY2AgAgACABNgIEIAVBIGokAAvLAQIEfwF+IwBBIGsiAyQAAkACQCABIAEgAmoiAksNAEEIIAIgACgCACIBQQF0IgQgAiAESxsiAiACQQhNGyIErSIHQiCIUEUNACAHpyIFQf////8HSw0AIAMgAQR/IAMgATYCHCADIAAoAgQ2AhRBAQVBAAs2AhggA0EIakEBIAUgA0EUahDbASADKAIIQQFHDQEgAygCECECIAMoAgwhBgsgBiACQcCIwgAQ1wMACyADKAIMIQEgACAENgIAIAAgATYCBCADQSBqJAAL2QIBAX8jAEEQayICJAACfwJAAkACQAJAAkACQAJAIAAtAABBAWsOBgECAwQFBgALIAIgAEEIajYCDCABQdibwABBDEGsmcAAQQMgAkEMakHIm8AAEMkBDAYLIAIgAEEIajYCDCABQeSbwABBDkGsmcAAQQMgAkEMakHIm8AAEMkBDAULIAIgAEEBajYCDCABQYScwABBFCACQQxqQfSbwAAQfwwECyACIABBCGo2AgwgAUGYnMAAQQ5BrJnAAEEDIABBBGpBiJjAAEGmnMAAQQggAkEMakHMmMAAEMMBDAMLIAIgAEEBajYCDCABQa6cwABBE0GsmcAAQQMgAEEEakGImMAAQaacwABBCCACQQxqQZiYwAAQwwEMAgsgAUHBnMAAQQ8Q5QMMAQsgAiAAQQFqNgIMIAFB0JzAAEEQQayZwABBAyACQQxqQZiYwAAQyQELIAJBEGokAAvZAgEBfyMAQRBrIgIkAAJ/AkACQAJAAkACQAJAAkAgAC0AAEEBaw4GAQIDBAUGAAsgAiAAQQhqNgIMIAFB7L7AAEEMQcC8wABBAyACQQxqQdy+wAAQyQEMBgsgAiAAQQhqNgIMIAFB+L7AAEEOQcC8wABBAyACQQxqQdy+wAAQyQEMBQsgAiAAQQFqNgIMIAFBmL/AAEEUIAJBDGpBiL/AABB/DAQLIAIgAEEIajYCDCABQay/wABBDkHAvMAAQQMgAEEEakGcu8AAQbq/wABBCCACQQxqQeC7wAAQwwEMAwsgAiAAQQFqNgIMIAFBwr/AAEETQcC8wABBAyAAQQRqQZy7wABBur/AAEEIIAJBDGpBrLvAABDDAQwCCyABQdW/wABBDxDlAwwBCyACIABBAWo2AgwgAUHkv8AAQRBBwLzAAEEDIAJBDGpBrLvAABDJAQsgAkEQaiQAC9kCAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQCAALQAAQQFrDgYBAgMEBQYACyACIABBCGo2AgwgAUG84cAAQQxBkN/AAEEDIAJBDGpBrOHAABDJAQwGCyACIABBCGo2AgwgAUHI4cAAQQ5BkN/AAEEDIAJBDGpBrOHAABDJAQwFCyACIABBAWo2AgwgAUHo4cAAQRQgAkEMakHY4cAAEH8MBAsgAiAAQQhqNgIMIAFB/OHAAEEOQZDfwABBAyAAQQRqQYzewABBiuLAAEEIIAJBDGpB+NzAABDDAQwDCyACIABBAWo2AgwgAUGS4sAAQRNBkN/AAEEDIABBBGpBjN7AAEGK4sAAQQggAkEMakH42sAAEMMBDAILIAFBpeLAAEEPEOUDDAELIAIgAEEBajYCDCABQbTiwABBEEGQ38AAQQMgAkEMakH42sAAEMkBCyACQRBqJAAL2QIBAX8jAEEQayICJAACfwJAAkACQAJAAkACQAJAIAAtAABBAWsOBgECAwQFBgALIAIgAEEIajYCDCABQYCKwQBBDEHUh8EAQQMgAkEMakHwicEAEMkBDAYLIAIgAEEIajYCDCABQYyKwQBBDkHUh8EAQQMgAkEMakHwicEAEMkBDAULIAIgAEEBajYCDCABQayKwQBBFCACQQxqQZyKwQAQfwwECyACIABBCGo2AgwgAUHAisEAQQ5B1IfBAEEDIABBBGpB6IXBAEHOisEAQQggAkEMakH0hsEAEMMBDAMLIAIgAEEBajYCDCABQdaKwQBBE0HUh8EAQQMgAEEEakHohcEAQc6KwQBBCCACQQxqQcCGwQAQwwEMAgsgAUHpisEAQQ8Q5QMMAQsgAiAAQQFqNgIMIAFB+IrBAEEQQdSHwQBBAyACQQxqQcCGwQAQyQELIAJBEGokAAv2AgEEfyMAQTBrIgAkAAJAAkBB/OPCACgCAEUEQEGU5MIAKAIAIQFBlOTCAEEANgIAIAFFDQEgAEEYaiABEQMAIABBEGoiAiAAQSRqKQIANwMAIAAgACkCHDcDCCAAKAIYIQFB/OPCACgCACIDDQICQCADRQ0AQYDkwgAoAgAiAkUNAEGE5MIAKAIAIAJBAnRBBBCnBAtBgOTCACABNgIAQfzjwgBBATYCAEGE5MIAIAApAwg3AgBBjOTCACAAQRBqKQMANwIACyAAQTBqJAAPCyAAQQA2AiggAEEBNgIcIABB8JDCADYCGCAAQgQ3AiAgAEEYakHYkcIAEKQDAAsgAEEoaiACKQMANwIAIAAgACkDCDcCICAAIAE2AhwgAEEBNgIYAkAgAEEYaiIBKAIARQ0AIAEoAgQiAkUNACABKAIIIAJBAnRBBBCnBAsgAEEANgIoIABBATYCHCAAQfiRwgA2AhggAEIENwIgIAFBgJLCABCkAwALqgICA38BfiMAQUBqIgIkACABKAIAQYCAgIB4RgRAIAEoAgwhAyACQSRqIgRBADYCACACQoCAgIAQNwIcIAJBMGogAygCACIDQQhqKQIANwMAIAJBOGogA0EQaikCADcDACACIAMpAgA3AyggAkEcakG8lMIAIAJBKGoQRRogAkEYaiAEKAIAIgM2AgAgAiACKQIcIgU3AxAgAUEIaiADNgIAIAEgBTcCAAsgASkCACEFIAFCgICAgBA3AgAgAkEIaiIDIAFBCGoiASgCADYCACABQQA2AgBBheXCAC0AABogAiAFNwMAQQxBBBD1AyIBRQRAQQRBDBDTBAALIAEgAikDADcCACABQQhqIAMoAgA2AgAgAEHIocIANgIEIAAgATYCACACQUBrJAALwAIBAX8jAEEQayICJAACfwJAAkACQAJAAkACQAJAIAAoAgAiACgCAEEBaw4GAQIDBAUGAAsgAiAAQQRqNgIMIAFBi9HBAEEVIAJBDGpBqM/BABB/DAYLIAIgAEEIajYCDCABQaDRwQBBFkG20cEAQQwgAEEEakH0zMEAQcLRwQBBDyACQQxqQbjNwQAQwwEMBQsgAiAAQQRqNgIMIAFB5NHBAEEXIAJBDGpB1NHBABB/DAQLIAIgAEEEajYCDCABQYzSwQBBGSACQQxqQfzRwQAQfwwDCyACIABBBGo2AgwgAUG40sEAQRkgAkEMakGo0sEAEH8MAgsgAiAAQQRqNgIMIAFB5NLBAEETIAJBDGpB1NLBABB/DAELIAIgAEEEajYCDCABQYjTwQBBFSACQQxqQfjSwQAQfwsgAkEQaiQAC7sCAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQCAAKAIAQQFrDgYBAgMEBQYACyACIABBBGo2AgwgAUHmqMAAQRUgAkEMakHknsAAEH8MBgsgAiAAQQhqNgIMIAFB+6jAAEEWQZGpwABBDCAAQQRqQYiYwABBnanAAEEPIAJBDGpBzJjAABDDAQwFCyACIABBBGo2AgwgAUG8qcAAQRcgAkEMakGsqcAAEH8MBAsgAiAAQQRqNgIMIAFB5KnAAEEZIAJBDGpB1KnAABB/DAMLIAIgAEEEajYCDCABQZCqwABBGSACQQxqQYCqwAAQfwwCCyACIABBBGo2AgwgAUG8qsAAQRMgAkEMakGsqsAAEH8MAQsgAiAAQQRqNgIMIAFB4KrAAEEVIAJBDGpB0KrAABB/CyACQRBqJAALuwIBAX8jAEEQayICJAACfwJAAkACQAJAAkACQAJAIAAoAgBBAWsOBgECAwQFBgALIAIgAEEEajYCDCABQfrLwABBFSACQQxqQfjBwAAQfwwGCyACIABBCGo2AgwgAUGPzMAAQRZBpczAAEEMIABBBGpBnLvAAEGxzMAAQQ8gAkEMakHgu8AAEMMBDAULIAIgAEEEajYCDCABQdDMwABBFyACQQxqQcDMwAAQfwwECyACIABBBGo2AgwgAUH4zMAAQRkgAkEMakHozMAAEH8MAwsgAiAAQQRqNgIMIAFBpM3AAEEZIAJBDGpBlM3AABB/DAILIAIgAEEEajYCDCABQdDNwABBEyACQQxqQcDNwAAQfwwBCyACIABBBGo2AgwgAUH0zcAAQRUgAkEMakHkzcAAEH8LIAJBEGokAAu7AgEBfyMAQRBrIgIkAAJ/AkACQAJAAkACQAJAAkAgACgCAEEBaw4GAQIDBAUGAAsgAiAAQQRqNgIMIAFB4u7AAEEVIAJBDGpBmNzAABB/DAYLIAIgAEEIajYCDCABQffuwABBFkGN78AAQQwgAEEEakGM3sAAQZnvwABBDyACQQxqQfjcwAAQwwEMBQsgAiAAQQRqNgIMIAFBuO/AAEEXIAJBDGpBqO/AABB/DAQLIAIgAEEEajYCDCABQeDvwABBGSACQQxqQdDvwAAQfwwDCyACIABBBGo2AgwgAUGM8MAAQRkgAkEMakH878AAEH8MAgsgAiAAQQRqNgIMIAFBuPDAAEETIAJBDGpBqPDAABB/DAELIAIgAEEEajYCDCABQdzwwABBFSACQQxqQczwwAAQfwsgAkEQaiQAC7sCAQF/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQCAAKAIAQQFrDgYBAgMEBQYACyACIABBBGo2AgwgAUH2lMEAQRUgAkEMakGMlMEAEH8MBgsgAiAAQQhqNgIMIAFBi5XBAEEWQaGVwQBBDCAAQQRqQeiFwQBBrZXBAEEPIAJBDGpB9IbBABDDAQwFCyACIABBBGo2AgwgAUHMlcEAQRcgAkEMakG8lcEAEH8MBAsgAiAAQQRqNgIMIAFB9JXBAEEZIAJBDGpB5JXBABB/DAMLIAIgAEEEajYCDCABQaCWwQBBGSACQQxqQZCWwQAQfwwCCyACIABBBGo2AgwgAUHMlsEAQRMgAkEMakG8lsEAEH8MAQsgAiAAQQRqNgIMIAFB8JbBAEEVIAJBDGpB4JbBABB/CyACQRBqJAAL9gEBCH8gASgCCCICIAEoAgQiAyACIANLGyEIIAEoAgAhBUF/IQcgAiEEAkACQANAIAQgCEYNASABIARBAWoiBjYCCCAHQQFqIQcgBCAFaiAGIQQtAAAiBkEwa0H/AXFBCkkgBkHhAGtB/wFxQQZJcg0ACyAGQd8ARw0AIAIgBEEBayIBSw0BAkAgAgRAIAIgA08EQCACIANHIAEgA0tyDQQMAgsgAiAFaiwAAEFASA0DIAEgA00NAQwDCyABIANLDQILIAAgBzYCBCAAIAIgBWo2AgAPCyAAQQA2AgAgAEEAOgAEDwsgBSADIAIgAUH0uMIAEOwDAAvWAQIEfwF+IwBBIGsiAyQAAkACQCABIAEgAmoiAksEQEEAIQEMAQtBACEBQQggAiAAKAIAIgVBAXQiBCACIARLGyICIAJBCE0bIgStIgdCIIhQRQ0AIAenIgZB/////wdLDQAgAyAFBH8gAyAFNgIcIAMgACgCBDYCFEEBBUEACzYCGCADQQhqQQEgBiADQRRqENsBIAMoAghBAUcNASADKAIQIQIgAygCDCEBCyABIAJBqJTCABDXAwALIAMoAgwhASAAIAQ2AgAgACABNgIEIANBIGokAAuzAgECfyMAQRBrIgIkAAJ/AkACQAJAAkACQAJAAkACQAJAQQggACgCACIAKAIAQYCAgIB4cyIDIANBCE8bQQFrDggBAgMEBQYHCAALIAIgAEEEajYCDCABQajcwABBAiACQQxqQZjcwAAQfwwICyACIABBBGo2AgwgAUG83MAAQRMgAkEMakGs3MAAEH8MBwsgAiAAQQRqNgIMIAFBz9zAAEETIAJBDGpB+NrAABB/DAYLIAFB4tzAAEETEOUDDAULIAIgAEEEajYCDCABQYjdwABBEiACQQxqQfjcwAAQfwwECyABQZrdwABBGhDlAwwDCyABQbTdwABBCRDlAwwCCyABQb3dwABBFhDlAwwBCyACIAA2AgwgAUHk3cAAQQYgAkEMakHU3cAAEH8LIAJBEGokAAuaAgECfyMAQTBrIgIkAAJ/AkACQAJAAkAgAC0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMBAgMACyABKAIcQdSswQBBJCABKAIgKAIMEQIADAMLIAEoAhxB+KzBAEHKACABKAIgKAIMEQIADAILIAIgAEEBajYCDCACQQE2AhQgAkHcrcEANgIQIAJCATcCHCACIAJBDGqtQoCAgIDwNIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUMAQsgAiAAQQRqNgIMIAJBATYCFCACQYiuwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgIA1hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRQsgAkEwaiQAC/oBAQN/IAAgACgCCCICIAFJBH8gAiEDIAEgAmsiBCAAKAIAIAJrSwRAIAAgAiAEQQRBBBCSASAAKAIIIQMLIAAoAgQgA0ECdGohACAEQQJPBEAgAkF/cyABaiICQQdxIQEgBEECa0EHTwRAIAJBeHEhAgNAIABBADYCHCAAQQA2AhggAEEANgIUIABBADYCECAAQQA2AgwgAEEANgIIIABBADYCBCAAQQA2AgAgAEEgaiEAIAJBCGsiAg0ACwsgAQRAA0AgAEEANgIAIABBBGohACABQQFrIgENAAsLIAMgBGpBAWshAwsgAEEANgIAIANBAWoFIAELNgIIC4gCAQN/AkACQAJAAkAgACgCAA4GAAMBAwMCAwsgAC0ABEEDRw0CIAAoAggiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgMEQCABIAMgAigCCBCnBAsgAEEMQQQQpwQPCyAAKAIEIgFB7f///wdqIgJBCk0gAkEDR3ENASABRSABQfv///8HaiICQQ1NIAJBAkdxIAFBg4CAgHhHIAFBhICAgHhMcXJyDQEgACgCCCABQQJ0QQQQpwQPCyAAKAIEIgFB+////wdqIgJBC00gAkECR3EgAUGDgICAeEcgAUGEgICAeExxciABRXINACAAKAIIIAFBAnRBBBCnBAsLiwICAn8BfiMAQTBrIgIkAAJ/AkACQAJAIAAoAgAiA0EBa0EAIANBAk8bQQFrDgIBAgALIAIgADYCBCACQQE2AgwgAkHwp8EANgIIIAJCATcCFCACIAJBBGqtQoCAgIDQOIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMAgsgAiAAQQRqNgIAIAIgAEEIajYCBCACQQI2AgwgAkHEvsEANgIIIAJCAjcCFCACQoCAgIDwNSIEIAJBBGqthDcDKCACIAQgAq2ENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAELIAEoAhxB1L7BAEEXIAEoAiAoAgwRAgALIAJBMGokAAv2AQICfwF+IwBBMGsiAiQAIABBBGohAwJ/IAAtAABFBEAgAiADNgIAIAIgAEEBajYCBCACQQM2AgwgAkGczMEANgIIIAJCAjcCFCACIAKtQoCAgIDwNYQ3AyggAiACQQRqrUKAgICA4DSENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAELIAIgAzYCACACIABBCGo2AgQgAkEDNgIMIAJB3MzBADYCCCACQgI3AhQgAkKAgICA8DUiBCACQQRqrYQ3AyggAiAEIAKthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQsgAkEwaiQAC94BAQZ/AkAgAgRAIAAoAggiAyAAKAIEIgYgACgCDCIEIANJIgUbIARrQQAgAyAFG2oiBUEBayIHQQAgBSAHTxsiBSACSQRAIAAgAiAFaxCAASAAKAIEIQYgACgCCCEDIAAoAgwhBAsgAyAGIAMgBEsbIgcgBGsiAyACIAIgA0siCBshAyAAKAIAIQUgBCAHRwRAIAQgBWogASADEDsaCyAIBEAgBSABIANqIAIgA2sQOxoLIAZFDQEgACACIARqIAZwNgIMCyAAIAApAxAgAq18NwMQDwtBsOnBABCUAwAL3wEBAX8jAEEQayICJAAgAkEANgIMIAAgAkEMagJ/IAFBgAFPBEAgAUGAEE8EQCABQYCABE8EQCACIAFBP3FBgAFyOgAPIAIgAUESdkHwAXI6AAwgAiABQQZ2QT9xQYABcjoADiACIAFBDHZBP3FBgAFyOgANQQQMAwsgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwwCCyACIAFBP3FBgAFyOgANIAIgAUEGdkHAAXI6AAxBAgwBCyACIAE6AAxBAQsQQyACQRBqJAAL5wEBB38gACgCCCIFBEAgACgCBCEGA0AgBiACQQxsaiIDKAIIIgQEQCADKAIEQSRqIQADQCAAQQRrKAIAIgFBgICAgHhGIAFFckUEQCAAKAIAIAFBARCnBAsCQCAAQRRrKAIAIgdBAkYNACAAQRBrIQEgB0UEQCABKAIAIgFFDQEgAEEMaygCACABQQEQpwQMAQsgASgCACIBRQ0AIABBDGsoAgAgAUEBdEECEKcECyAAQSxqIQAgBEEBayIEDQALCyADKAIAIgAEQCADKAIEIABBLGxBBBCnBAsgAkEBaiICIAVHDQALCwuHAgICfwJ9AkACQCAAvCIBQYCAgAROBEAgAUH////7B0sNAUGBfyECQwAAAAAhACABQYCAgPwDRg0BDAILIABDAAAAAFsEQEMAAIC/IAAgAJSVDwsgAUEATgRAIABDAAAATJS8IQFB6H4hAgwCCyAAIACTQwAAAACVIQALIAAPCyABQY32qwJqIgFBF3YgAmqyIgNDgHExP5QgAUH///8DcUHzidT5A2q+QwAAgL+SIgAgA0PR9xc3lCAAIABDAAAAQJKVIgMgACAAQwAAAD+UlCIEIAMgA5QiACAAIACUIgBD7umRPpRDqqoqP5KUIAAgAEMmnng+lEMTzsw+kpSSkpSSIASTkpILmwIBAn8jAEEQayICJAACfwJAAkACQAJAAkBBAyAAKAIAIgAoAgBBgICAgHhzIgMgA0EFTxtBAWsOBAECAwQACyABQdHZwQBBDBDlAwwECyACIABBBWo2AgwgAUHd2cEAQQxBi87BAEEDIABBBGpBtNnBAEHp2cEAQQMgAkEMakGEzcEAEMMBDAMLIAIgAEEEajYCDCABQejUwQBBDCACQQxqQdjUwQAQfwwCCyACIAA2AgwgAUH82cEAQYvOwQAgAEEMakHg0MEAQZbawQAgAEEQakHg0MEAQaLawQAgAkEMakHs2cEAEL4BDAELIAIgAEEEajYCDCABQbbawQBBDkGLzsEAQQMgAkEMakG4zcEAEMkBCyACQRBqJAAL7wECA38BfiMAQTBrIgIkACAAQQhqIQMgAEEEaiEEQoCAgIDwNSEFAn8gACgCAEUEQCACIAQ2AgAgAiADNgIEIAJBAzYCDCACQZSzwQA2AgggAkICNwIUIAIgBSACrYQ3AyggAiAFIAJBBGqthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIAQ2AgAgAiADNgIEIAJBAjYCDCACQcyzwQA2AgggAkICNwIUIAIgBSACQQRqrYQ3AyggAiAFIAKthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQsgAkEwaiQAC5YCAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAQQMgACgCAEGAgICAeHMiAyADQQVPG0EBaw4EAQIDBAALIAFBhJnAAEEMEOUDDAQLIAIgAEEFajYCDCABQaCZwABBDEGsmcAAQQMgAEEEakGQmcAAQa+ZwABBAyACQQxqQZiYwAAQwwEMAwsgAiAAQQRqNgIMIAFBxJnAAEEMIAJBDGpBtJnAABB/DAILIAIgADYCDCABQfCZwABBrJnAACAAQQxqQdCZwABBiprAACAAQRBqQdCZwABBlprAACACQQxqQeCZwAAQvgEMAQsgAiAAQQRqNgIMIAFBqprAAEEOQayZwABBAyACQQxqQcyYwAAQyQELIAJBEGokAAuWAgECfyMAQRBrIgIkAAJ/AkACQAJAAkACQEEDIAAoAgBBgICAgHhzIgMgA0EFTxtBAWsOBAECAwQACyABQZi8wABBDBDlAwwECyACIABBBWo2AgwgAUG0vMAAQQxBwLzAAEEDIABBBGpBpLzAAEHDvMAAQQMgAkEMakGsu8AAEMMBDAMLIAIgAEEEajYCDCABQdi8wABBDCACQQxqQci8wAAQfwwCCyACIAA2AgwgAUGEvcAAQcC8wAAgAEEMakHkvMAAQZ69wAAgAEEQakHkvMAAQaq9wAAgAkEMakH0vMAAEL4BDAELIAIgAEEEajYCDCABQb69wABBDkHAvMAAQQMgAkEMakHgu8AAEMkBCyACQRBqJAALlgIBAn8jAEEQayICJAACfwJAAkACQAJAAkBBAyAAKAIAQYCAgIB4cyIDIANBBU8bQQFrDgQBAgMEAAsgAUHm3sAAQQwQ5QMMBAsgAiAAQQVqNgIMIAFBhN/AAEEMQZDfwABBAyAAQQRqQfTewABBk9/AAEEDIAJBDGpB+NrAABDDAQwDCyACIABBBGo2AgwgAUGo38AAQQwgAkEMakGY38AAEH8MAgsgAiAANgIMIAFB1N/AAEGQ38AAIABBDGpBtN/AAEHu38AAIABBEGpBtN/AAEH638AAIAJBDGpBxN/AABC+AQwBCyACIABBBGo2AgwgAUGO4MAAQQ5BkN/AAEEDIAJBDGpB+NzAABDJAQsgAkEQaiQAC5YCAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAQQMgACgCAEGAgICAeHMiAyADQQVPG0EBaw4EAQIDBAALIAFBrIfBAEEMEOUDDAQLIAIgAEEFajYCDCABQciHwQBBDEHUh8EAQQMgAEEEakG4h8EAQdeHwQBBAyACQQxqQcCGwQAQwwEMAwsgAiAAQQRqNgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/DAILIAIgADYCDCABQZiIwQBB1IfBACAAQQxqQfiHwQBBsojBACAAQRBqQfiHwQBBvojBACACQQxqQYiIwQAQvgEMAQsgAiAAQQRqNgIMIAFB0ojBAEEOQdSHwQBBAyACQQxqQfSGwQAQyQELIAJBEGokAAv/BgIIfwF+IAIgASgCBCIJIAEoAgwiBCAEIAEoAggiBkkiBxsgBmsgBEEAIAcbaiIITQRAIAggAmsiBSADaiEKIAYgCSAHGyAEa0EAIAYgBxtqIgRBAWsiBkEAIAQgBk8bIgQgA0kEQCABIAMgBGsQgAELAkAgCCAKTwRAIAEgBSADEC4MAQsgA0UNACADIQQDQCABIAUgBCACIAIgBEsbIgYQLiAFIAZqIQUgBCAGayIEDQALCyAAQQI2AgAgASABKQMQIAOtfDcDEA8LIAEoAgQhBiABKAIIIQUgASgCDCEEAkAgASkDECIMIAE1AnBWBEAgACACNgIEIABBATYCACAAIAYgBCAEIAVJIgAbIAVrIARBACAAG2o2AggMAQsCQAJAAkACQAJAAkACQAJAAkACQCABKAJ8IgggAiAFaiIKIAZBACAEIAVJIgkbIARqIgtrIgJPBEAgCCACayEHIAIgA08EQCADIAdqIgIgB0kNAiACIAhLDQMgA0UNCiABKAJ4IAUgBiAJGyAEa0EAIAUgCRtqIghBAWsiCUEAIAggCU8bIgggA0kEQCABIAMgCGsQgAEgASgCBCEGIAEoAgghBSABKAIMIQQLIAdqIQcgBSAGIAQgBUkbIgggBGsiAiADIAIgA0kiCRshAiABKAIAIQUgBCAIRwRAIAQgBWogByACEDsaCyAJDQQMCQsgCiALRg0GIAEoAnghCCAFIAYgCRsgBGtBACAFIAkbaiIJQQFrIgpBACAJIApPGyIJIAJJBEAgASACIAlrEIABIAEoAgQhBiABKAIIIQUgASgCDCEECyAHIAhqIQggBSAGIAQgBUkbIgogBGsiByACIAIgB0siCxshByABKAIAIQkgBCAKRwRAIAQgCWogCCAHEDsaCyALDQQMBQsgACACNgIIIAAgCDYCBCAAQQA2AgAMCgsgByACQaD3wQAQrAQACyACIAhBoPfBABCrBAALIAUgAiAHaiADIAJrEDsaDAQLIAkgByAIaiACIAdrEDsaCyAGRQ0BIAEgAiAEaiAGcCIENgIMIAEpAxAhDAsgASAMIAKtfDcDECAAIAEgBiAEIAQgBUkiABsgBWsgBEEAIAAbaiADIAJrELEBDAQLQbDpwQAQlAMACyAGRQ0BIAEgAyAEaiAGcDYCDAsgAEECNgIADAELQbDpwQAQlAMACwvUAQIGfwF+IwBBIGsiAiQAQQQgACgCACIEQQFqIgMgBEEBdCIFIAMgBUsbIgMgA0EETRsiBa1CDH4iCEIgiFBFBEBBAEEAIAEQ1wMACwJAIAinIgdB/P///wdNBEBBACEDIAIgBAR/IAIgBEEMbDYCHCACIAAoAgQ2AhRBBAUgAws2AhggAkEIakEEIAcgAkEUahDbASACKAIIQQFHDQEgAigCDCEGIAIoAhAhAwsgBiADIAEQ1wMACyACKAIMIQEgACAFNgIAIAAgATYCBCACQSBqJAAL3AEBA38jAEEQayIDJAACfyACKAIAQQFxBEBB3KDCACEEQQkMAQsgA0EEaiACKAIEIAIoAggQPUHcoMIAIAMoAgggAygCBCICGyEEQQkgAygCDCACGwshAiAEIAIgARDaAQJAIAAoAgAiAUGAgICAeEcEQCABRQ0BIAAoAgQgAUEBEKcEDAELIAAtAARBA0cNACAAKAIIIgAoAgAhASAAQQRqKAIAIgIoAgAiBQRAIAEgBREDAAsgAigCBCIFBEAgASAFIAIoAggQpwQLIABBDEEEEKcECyADQRBqJAALywEBBX8jAEEgayICJAAgACgCACIFQQFqIgMgBUEBdCIGIAMgBksbIgNB/////wNLBEBBAEEAIAEQ1wMACwJAQQQgAyADQQRNGyIDQQJ0IgZB/P///wdNBH8gAiAFBH8gAiAFQQJ0NgIcIAIgACgCBDYCFEEEBSAECzYCGCACQQhqQQQgBiACQRRqENsBIAIoAghBAUcNASACKAIQIQQgAigCDAUgBAsgBCABENcDAAsgAigCDCEBIAAgAzYCACAAIAE2AgQgAkEgaiQAC+0BAQN/IwBBIGsiAiQAIAJBCGoiAyABQSRqKAIANgIAQYXlwgAtAAAaIAIgASkCHDcDAEEMQQQQ9QMiBARAIAQgAikDADcCACAEQQhqIAMoAgA2AgACQCABKAIEQQJHDQACQAJAIAEtABhBAWsOAgIAAQsgAkEBNgIEIAJB9ILAADYCACACQgA3AgwgAiACQRxqNgIIIAJB+IPAABCkAwALIAFBCGoQqQEgASgCCCIDRQ0AIAEoAgwgA0EMbEEEEKcECyABQShBBBCnBCAAQZCMwAA2AgQgACAENgIAIAJBIGokAA8LQQRBDBDTBAAL7QEBA38jAEEgayICJAAgAkEIaiIDIAFBJGooAgA2AgBBheXCAC0AABogAiABKQIcNwMAQQxBBBD1AyIEBEAgBCACKQMANwIAIARBCGogAygCADYCAAJAIAEoAgRBAkcNAAJAAkAgAS0AGEEBaw4CAgABCyACQQE2AgQgAkG0/sAANgIAIAJCADcCDCACIAJBHGo2AgggAkG4/8AAEKQDAAsgAUEIahCpASABKAIIIgNFDQAgASgCDCADQQxsQQQQpwQLIAFBKEEEEKcEIABBoJfAADYCBCAAIAQ2AgAgAkEgaiQADwtBBEEMENMEAAvdAQEFfyMAQSBrIgEkAAJAIAAoAgRBAkcNAAJAAkAgAC0AGEEBaw4CAgABCyABQQE2AgggAUG0/sAANgIEIAFCADcCECABIAFBHGo2AgwgAUEEakG4/8AAEKQDAAsgAEEIahCpASAAKAIIIgJFDQAgACgCDCACQQxsQQQQpwQLIAAtABxBA0YEQCAAKAIgIgIoAgAhBCACQQRqKAIAIgUoAgAiAwRAIAQgAxEDAAsgBSgCBCIDBEAgBCADIAUoAggQpwQLIAJBDEEEEKcECyAAQSRBBBCnBCABQSBqJAALxgQCBn8BfiMAQRBrIgQkAAJAAkAgACgCAEECRwRAIwBB4ABrIgIkAAJ/AkAgACgCAEUEQEEBIAEgACgCECAAKAIUEOUDDQIaDAELIAIgAEEEajYCCCABKAIUIQMgAiABNgIUIAJCgICAgIDI0Ac3AgwgAkEIaq1CgICAgIDCAIQhCAJAAn8gA0EEcQRAIAIgCDcDMCACQQE2AiwgAkEBNgIcIAJBxLvCADYCGCACQQE2AiQgAkEDOgBYIAJBBDYCVCACQiA3AkwgAkECNgJEIAJBAjYCPCACIAJBPGo2AiggAiACQTBqNgIgIAJBDGpBgLHCACACQRhqEEUMAQsgAkEBNgJAIAJBxLvCADYCPCACQgE3AkggAiAINwMYIAIgAkEYajYCRCACQQxqQYCxwgAgAkE8ahBFCyIDQQAgAigCDCIFG0UEQCADDQEgBUUNAkHwu8IAQTcgAkHfAGpB4LvCAEGovMIAEKACAAsgAUHMu8IAQRQQ5QNFDQELQQEMAQsgASAAKAIYIAAoAhwQ5QMLIAJB4ABqJAAhBQwBCyAAKAIkIgJFDQAgACgCICEAA0AgBEEEaiAAIAIQPQJAAkAgBCgCBEUEQCAEKAIIIAQoAgwgARDVBA0BDAQLIAQtAA0hAyAELQAMIQYgBCgCCCEHQeWgwgBBAyABENUERQ0BC0EBIQUMAgsgBkEBcUUNASACIAMgB2oiA0kNAiAAIANqIQAgAiADayICDQALCyAEQRBqJAAgBQ8LIAMgAkHUosIAEKoEAAu8AQECfyMAQSBrIgMkAAJAAn9BACABIAEgAmoiAksNABpBAEEIIAIgACgCACIBQQF0IgQgAiAESxsiAiACQQhNGyIEQQBIDQAaQQAhAiADIAEEfyADIAE2AhwgAyAAKAIENgIUQQEFIAILNgIYIANBCGpBASAEIANBFGoQ2wEgAygCCEEBRw0BIAMoAhAhACADKAIMCyAAQZy/wgAQ1wMACyADKAIMIQEgACAENgIAIAAgATYCBCADQSBqJAAL2QEAIABBIEkEQEEADwsgAEH/AEkEQEEBDwsgAEGAgARPBEAgAEGAgAhPBEAgAEHg//8AcUHgzQpHIABB/v//AHFBnvAKR3EgAEHA7gprQXpJcSAAQbCdC2tBcklxIABB8NcLa0FxSXEgAEGA8AtrQd5sSXEgAEGAgAxrQZ50SXEgAEHQpgxrQXtJcSAAQYCCOGtBsMVUSXEgAEHwgzhJcQ8LIABBiM3CAEEsQeDNwgBB0AFBsM/CAEHmAxBxDwsgAEGW08IAQShB5tPCAEGiAkGI1sIAQakCEHEL1AEBBH8jAEEgayIBJAACQCAAKAIEQQJHDQACQAJAIAAtABhBAWsOAgIAAQsgAUEBNgIIIAFBtP7AADYCBCABQgA3AhAgASABQRxqNgIMIAFBBGpBuP/AABCkAwALIABBCGoQqQEgACgCCCICRQ0AIAAoAgwgAkEMbEEEEKcECyAALQAcQQNGBEAgACgCICIAKAIAIQIgAEEEaigCACIEKAIAIgMEQCACIAMRAwALIAQoAgQiAwRAIAIgAyAEKAIIEKcECyAAQQxBBBCnBAsgAUEgaiQAC8kBAgN/AX4jAEEQayIEJAACQCAAKAIQIgNFBEAMAQtBASECQe65wgBBASADENUEDQAgAVAEQEHuuMIAQQEgAxDVBCECDAELAkAgASAANQIUIgVYBEAgBSABfSIBQhpUDQFB7rjCAEEBIAMQ1QQNAiAEIAE3AwggBEEIaiADEK8EIQIMAgtBxLnCAEEQIAMQ1QQNAUEAIQIgAEEAOgAEIABBADYCAAwBCyAEIAGnQeEAajYCBCAEQQRqIAMQjQEhAgsgBEEQaiQAIAIL2QEBBH8jAEEgayICJABBheXCAC0AABogASgCICEDIAEoAhwhBUEIQQQQ9QMiBARAIAQgAzYCBCAEIAU2AgACQCABKAIEQQJHDQACQAJAIAEtABhBAWsOAgIAAQsgAkEBNgIIIAJBtP7AADYCBCACQgA3AhAgAiACQRxqNgIMIAJBBGpBuP/AABCkAwALIAFBCGoQqQEgASgCCCIDRQ0AIAEoAgwgA0EMbEEEEKcECyABQSRBBBCnBCAAQdyXwAA2AgQgACAENgIAIAJBIGokAA8LQQRBCBDTBAALzwEBAX8jAEEQayILJAAgACgCHCABQRogACgCICgCDBECACEBIAtBADoADSALIAE6AAwgCyAANgIIIAtBCGogAkEDIAMgBBBvIAVBDCAGIAcQbyAIQRQgCSAKEG8hASALLQANIgIgCy0ADCIDciEAAkAgA0EBcSACQQFHcg0AIAEoAgAiAC0AFEEEcUUEQCAAKAIcQYfEwgBBAiAAKAIgKAIMEQIAIQAMAQsgACgCHEGGxMIAQQEgACgCICgCDBECACEACyALQRBqJAAgAEEBcQuuAQEEfwJAIAAoAgBBAkcEfyAALQDMAyEBAkAgAC0AEEEEcQRAIAFBAXFFDQMgACgCGA0BDAMLIAFBAXFFDQILIAAoApQCIAAoApwCIgEgASAAKAKYAiIASSICGyAAayABQQAgAhtqBSABCw8LIAAoApwCIgFBACABIAAoApgCIgJJIgMbIgQgACgClAIgASADGyIBaiACIAAoAoADIgBqa0EAIAEgAmsgBGogAEsbC8EBAgN/AX4jAEEwayICJAAgASgCAEGAgICAeEYEQCABKAIMIQMgAkEUaiIEQQA2AgAgAkKAgICAEDcCDCACQSBqIAMoAgAiA0EIaikCADcDACACQShqIANBEGopAgA3AwAgAiADKQIANwMYIAJBDGpBvJTCACACQRhqEEUaIAJBCGogBCgCACIDNgIAIAIgAikCDCIFNwMAIAFBCGogAzYCACABIAU3AgALIABByKHCADYCBCAAIAE2AgAgAkEwaiQAC5YCAQJ/IwBBIGsiBSQAQaTlwgBBpOXCACgCACIGQQFqNgIAAkACf0EAIAZBAEgNABpBAUHw6MIALQAADQAaQfDowgBBAToAAEHs6MIAQezowgAoAgBBAWo2AgBBAgtB/wFxIgZBAkcEQCAGQQFxRQ0BIAVBCGogACABKAIYEQEAAAtBmOXCACgCACIGQQBIDQBBmOXCACAGQQFqNgIAQZjlwgBBnOXCACgCAAR/IAUgACABKAIUEQEAIAUgBDoAHSAFIAM6ABwgBSACNgIYIAUgBSkDADcCEEGc5cIAKAIAIAVBEGpBoOXCACgCACgCFBEBAEGY5cIAKAIAQQFrBSAGCzYCAEHw6MIAQQA6AAAgA0UNAAALAAuuAQEEfyMAQSBrIgIkAEEIIAAoAgAiBEEBaiIDIARBAXQiBSADIAVLGyIDIANBCE0bIgNBAEgEQEEAQQAgARDXAwALQQAhBSACIAQEfyACIAQ2AhwgAiAAKAIENgIUQQEFIAULNgIYIAJBCGpBASADIAJBFGoQ2wEgAigCCEEBRgRAIAIoAgwgAigCECABENcDAAsgAigCDCEBIAAgAzYCACAAIAE2AgQgAkEgaiQAC8UBAQF/IwBBEGsiCyQAIAAoAhwgASACIAAoAiAoAgwRAgAhASALQQA6AA0gCyABOgAMIAsgADYCCCALQQhqIAMgBCAFIAYQbyAHIAggCSAKEG8hASALLQANIgIgCy0ADCIDciEAAkAgA0EBcSACQQFHcg0AIAEoAgAiAC0AFEEEcUUEQCAAKAIcQYfEwgBBAiAAKAIgKAIMEQIAIQAMAQsgACgCHEGGxMIAQQEgACgCICgCDBECACEACyALQRBqJAAgAEEBcQvNAQIDfwF+IwBBIGsiAiQAQYXlwgAtAAAaIAEpAhwhBUEIQQQQ9QMiAwRAIAMgBTcCAAJAIAEoAgRBAkcNAAJAAkAgAS0AGEEBaw4CAgABCyACQQE2AgggAkG0/sAANgIEIAJCADcCECACIAJBHGo2AgwgAkEEakG4/8AAEKQDAAsgAUEIahCpASABKAIIIgRFDQAgASgCDCAEQQxsQQQQpwQLIAFBJEEEEKcEIABBqJbAADYCBCAAIAM2AgAgAkEgaiQADwtBBEEIENMEAAunAQEDfyMAQRBrIgMkAEEDIQIgAC0AACIAIQQgAEEKTwRAIAMgACAAQeQAbiIEQeQAbGtB/wFxQQF0IgJBksTCAGotAAA6AA8gAyACQZHEwgBqLQAAOgAOQQEhAgtBACAAIAQbRQRAIAJBAWsiAiADQQ1qaiAEQQF0Qf4BcUGSxMIAai0AADoAAAsgAUEBQQFBACADQQ1qIAJqQQMgAmsQNSADQRBqJAAL4AEBBX8CQAJAIABBhAFJDQAgANBvJgEQmAFBjOTCACgCACEEQZDkwgAoAgAhAUGM5MIAQgA3AgBBiOTCACgCACECQYTkwgAoAgAhA0GE5MIAQgQ3AgBBgOTCACgCACEFQYDkwgBBADYCACAAIAFJDQEgACABayIAIAJPDQEgAyAAQQJ0aiAENgIAQZDkwgAgATYCAEGM5MIAIAA2AgBBiOTCACACNgIAQYTkwgAoAgBBhOTCACADNgIAQYDkwgAoAgAhAEGA5MIAIAU2AgAgAEUNACAAQQJ0QQQQpwQLDwsAC8YBAQJ/IwBBEGsiAiQAAn8CQAJAAkBBASAAKAIAIgAtAABBAmsiAyADQf8BcUEDTxtB/wFxQQFrDgIBAgALIAIgAEEBajYCBCABQcihwQBBGUHUh8EAQQMgAkEEakHAhsEAEMkBDAILIAIgADYCCCABQeyHwQBBDCACQQhqQdyHwQAQfwwBCyACIABBCGo2AgwgAUHhocEAQQ5Bt43BAEEEIABBBGpB6IXBAEGii8EAQQQgAkEMakHAhsEAEMMBCyACQRBqJAALxgEBAn8jAEEQayICJAACfwJAAkACQEEBIAAoAgAiAC0AAEECayIDIANB/wFxQQNPG0H/AXFBAWsOAgECAAsgAiAAQQFqNgIEIAFBjdnBAEEZQYvOwQBBAyACQQRqQYTNwQAQyQEMAgsgAiAANgIIIAFB6NTBAEEMIAJBCGpB2NTBABB/DAELIAIgAEEIajYCDCABQabZwQBBDkGw18EAQQQgAEEEakH0zMEAQbfTwQBBBCACQQxqQYTNwQAQwwELIAJBEGokAAu7AQEBfyMAQRBrIgckACAAKAIcIAEgAiAAKAIgKAIMEQIAIQEgB0EAOgANIAcgAToADCAHIAA2AgggB0EIaiADIAQgBSAGEG8hASAHLQANIgIgBy0ADCIDciEAAkAgA0EBcSACQQFHcg0AIAEoAgAiAC0AFEEEcUUEQCAAKAIcQYfEwgBBAiAAKAIgKAIMEQIAIQAMAQsgACgCHEGGxMIAQQEgACgCICgCDBECACEACyAHQRBqJAAgAEEBcQueAQIEfwJ+AkACQCAAKAIIIgMoAggiBCAAKQMAIgenIgJLBEAgAygCBCACQQF0ai0AASICDQEMAgsgAiAEQZz5wQAQrQIACyACIAEtABQiBU0EQCABIAUgAmsiAzoAFEJ/IAKthkJ/hSABKQMIIANBP3GtiIMhBgwBCyABIAIQWyEGIAMoAgghBAsgACAErUIBfSAHIAKthoMgBoQ3AwALrgEBAX8jAEEQayIGJAACQCABBEAgBkEEaiABIAMgBCAFIAIoAhARBgACQCAGKAIEIgIgBigCDCIBTQRAIAYoAgghBQwBCyACQQJ0IQIgBigCCCEDIAFFBEBBBCEFIAMgAkEEEKcEDAELIAMgAkEEIAFBAnQiAhDfAyIFRQ0CCyAAIAE2AgQgACAFNgIAIAZBEGokAA8LQfiPwgBBMhDIBAALQQQgAkHoj8IAENcDAAvBAQECfyMAQRBrIgIkAAJ/AkACQAJAQQEgAC0AAEECayIDIANB/wFxQQNPG0H/AXFBAWsOAgECAAsgAiAAQQFqNgIEIAFBuLXAAEEZQayZwABBAyACQQRqQZiYwAAQyQEMAgsgAiAANgIIIAFBxJnAAEEMIAJBCGpBtJnAABB/DAELIAIgAEEIajYCDCABQdG1wABBDkHzocAAQQQgAEEEakGImMAAQfqcwABBBCACQQxqQZiYwAAQwwELIAJBEGokAAvBAQECfyMAQRBrIgIkAAJ/AkACQAJAQQEgAC0AAEECayIDIANB/wFxQQNPG0H/AXFBAWsOAgECAAsgAiAAQQFqNgIEIAFBzNjAAEEZQcC8wABBAyACQQRqQay7wAAQyQEMAgsgAiAANgIIIAFB2LzAAEEMIAJBCGpByLzAABB/DAELIAIgAEEIajYCDCABQeXYwABBDkGHxcAAQQQgAEEEakGcu8AAQY7AwABBBCACQQxqQay7wAAQwwELIAJBEGokAAvBAQECfyMAQRBrIgIkAAJ/AkACQAJAQQEgAC0AAEECayIDIANB/wFxQQNPG0H/AXFBAWsOAgECAAsgAiAAQQFqNgIEIAFBtPvAAEEZQZDfwABBAyACQQRqQfjawAAQyQEMAgsgAiAANgIIIAFBqN/AAEEMIAJBCGpBmN/AABB/DAELIAIgAEEIajYCDCABQc37wABBDkGw58AAQQQgAEEEakGM3sAAQd7iwABBBCACQQxqQfjawAAQwwELIAJBEGokAAvBAQECfyMAQRBrIgIkAAJ/AkACQAJAQQEgAC0AAEECayIDIANB/wFxQQNPG0H/AXFBAWsOAgECAAsgAiAAQQFqNgIEIAFByKHBAEEZQdSHwQBBAyACQQRqQcCGwQAQyQEMAgsgAiAANgIIIAFB7IfBAEEMIAJBCGpB3IfBABB/DAELIAIgAEEIajYCDCABQeGhwQBBDkG3jcEAQQQgAEEEakHohcEAQaKLwQBBBCACQQxqQcCGwQAQwwELIAJBEGokAAuzAQEDfyABKAIMIQICQAJAAkACQAJAAkAgASgCBA4CAAECCyACDQFBASEDQQAhAUEBIQIMAwsgAkUNAQsgACABEGgPCyABKAIAIgIoAgQiAUEASA0BIAIoAgAhAyABRQRAQQEhAkEAIQEMAQtBheXCAC0AABpBASEEIAFBARD1AyICRQ0BCyACIAMgARA7IQIgACABNgIIIAAgAjYCBCAAIAE2AgAPCyAEIAFBlIHAABDXAwALswEBA38gASgCDCECAkACQAJAAkACQAJAIAEoAgQOAgABAgsgAg0BQQEhA0EAIQFBASECDAMLIAJFDQELIAAgARBoDwsgASgCACICKAIEIgFBAEgNASACKAIAIQMgAUUEQEEBIQJBACEBDAELQYXlwgAtAAAaQQEhBCABQQEQ9QMiAkUNAQsgAiADIAEQOyECIAAgATYCCCAAIAI2AgQgACABNgIADwsgBCABQYiJwAAQ1wMAC7YBAQJ/IwBBEGsiAiQAAn8CQAJAAkACQCAAKAIAIgAtAAAiA0EDa0EAIANBBGtB/wFxQQNJG0EBaw4DAQIDAAsgAiAANgIEIAFBnJTBAEEJIAJBBGpBjJTBABB/DAMLIAFBpZTBAEESEOUDDAILIAIgAEEBajYCCCABQciUwQBBDiACQQhqQbiUwQAQfwwBCyACIABBBGo2AgwgAUHolMEAQQ4gAkEMakHYlMEAEH8LIAJBEGokAAuxAQECfyMAQRBrIgIkAAJ/AkACQAJAAkAgAC0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMBAgMACyACIAA2AgQgAUGMqMAAQQkgAkEEakHknsAAEH8MAwsgAUGVqMAAQRIQ5QMMAgsgAiAAQQFqNgIIIAFBuKjAAEEOIAJBCGpBqKjAABB/DAELIAIgAEEEajYCDCABQdiowABBDiACQQxqQciowAAQfwsgAkEQaiQAC7EBAQJ/IwBBEGsiAiQAAn8CQAJAAkACQCAALQAAIgNBA2tBACADQQRrQf8BcUEDSRtBAWsOAwECAwALIAIgADYCBCABQaDLwABBCSACQQRqQfjBwAAQfwwDCyABQanLwABBEhDlAwwCCyACIABBAWo2AgggAUHMy8AAQQ4gAkEIakG8y8AAEH8MAQsgAiAAQQRqNgIMIAFB7MvAAEEOIAJBDGpB3MvAABB/CyACQRBqJAALsQEBAn8jAEEQayICJAACfwJAAkACQAJAIAAtAAAiA0EDa0EAIANBBGtB/wFxQQNJG0EBaw4DAQIDAAsgAiAANgIEIAFBiO7AAEEJIAJBBGpBmNzAABB/DAMLIAFBke7AAEESEOUDDAILIAIgAEEBajYCCCABQbTuwABBDiACQQhqQaTuwAAQfwwBCyACIABBBGo2AgwgAUHU7sAAQQ4gAkEMakHE7sAAEH8LIAJBEGokAAuxAQECfyMAQRBrIgIkAAJ/AkACQAJAAkAgAC0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMBAgMACyACIAA2AgQgAUGclMEAQQkgAkEEakGMlMEAEH8MAwsgAUGllMEAQRIQ5QMMAgsgAiAAQQFqNgIIIAFByJTBAEEOIAJBCGpBuJTBABB/DAELIAIgAEEEajYCDCABQeiUwQBBDiACQQxqQdiUwQAQfwsgAkEQaiQAC6YBAQF/IwBBQGoiAiQAIAAoAgAhACACQgA3AzggAkE4aiAAJQEQGiACIAIoAjwiADYCNCACIAIoAjg2AjAgAiAANgIsIAIgAkEsaq1CgICAgNA9hDcDICACQQI2AgwgAkG0kMIANgIIIAJCATcCFCACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRSACKAIsIgEEQCACKAIwIAFBARCnBAsgAkFAayQAC5YBAQJ/IwBBEGsiAiQAIAAoAgAhACACQQRqIgMgARCnAyACIAA2AgwgAyACQQxqQfjawAAQggEgAiAAQQFqNgIMIAJBBGogAkEMakH42sAAEIIBIAIgAEECajYCDCACQQRqIAJBDGpB+NrAABCCASACIABBA2o2AgwgAkEEaiACQQxqQfjawAAQggEgAxCgAyACQRBqJAALlgEBAn8jAEEQayICJAAgACgCACEAIAJBBGoiAyABEKcDIAIgADYCDCADIAJBDGpB3PfBABCCASACIABBAWo2AgwgAkEEaiACQQxqQdz3wQAQggEgAiAAQQJqNgIMIAJBBGogAkEMakHc98EAEIIBIAIgAEEDajYCDCACQQRqIAJBDGpB3PfBABCCASADEKADIAJBEGokAAujAQECfyMAQSBrIgMkAAJAIAFFBEBBAUEAIAIQ1QQhAAwBCyADIAE2AgwgAyAANgIIIANBEGogA0EIahBTIAMoAhAiAQRAA0AgAygCFCEEIAMoAhxFBEAgASAEIAIQ1QQhAAwDC0EBIQAgAiABIAQQ5QMNAiACQf3/AxDrAw0CIANBEGogA0EIahBTIAMoAhAiAQ0ACwtBACEACyADQSBqJAAgAAuLAQEBfwJAIAJBAE4EQAJ/IAMoAgQEQAJAIAMoAggiBEUEQAwBCyADKAIAIAQgASACEN8DDAILCyABIAJFDQAaQYXlwgAtAAAaIAIgARD1AwsiAwRAIAAgAjYCCCAAIAM2AgQgAEEANgIADwsgACACNgIIIAAgATYCBAwBCyAAQQA2AgQLIABBATYCAAudAQEEfwJAQQggACgCACIAKAIAIgJBgICAgHhzIgEgAUEITxsiAUEBa0EHSQ0AIAEEQCACRQ0BIAAoAgQgAkEBEKcEDAELIAAtAARBA0cNACAAKAIIIgIoAgAhASACQQRqKAIAIgQoAgAiAwRAIAEgAxEDAAsgBCgCBCIDBEAgASADIAQoAggQpwQLIAJBDEEEEKcECyAAQQxBBBCnBAu1AQECfyMAQRBrIgIkAAJ/AkACQAJAAkBBAyAAKAIAIgAoAgBBB2siAyADQQNPG0EBaw4DAQIDAAsgAUH4nMEAQRQQ5QMMAwsgAUGMncEAQR0Q5QMMAgsgAiAAQQRqNgIIIAFBnJTBAEEJQbydwQBBBCAAQQxqQaydwQBBwJ3BAEEGIAJBCGpBjJTBABDDAQwBCyACIAA2AgwgAUHYncEAQRQgAkEMakHIncEAEH8LIAJBEGokAAu3AQECfwJAAn8CQAJAAkACQAJAAkACQAJAIAEoAgAOCgABCQIDBAUJBgcJCyABQQRqIQJB+KTAACEDDAgLIAFBCGohAkG0pcAAIQMMBwsgAUEEaiECQfClwAAhAwwGCyABQQRqIQJBrKbAACEDDAULIAFBBGohAkHopsAAIQMMBAsgAUEEagwCCyABQQhqIQJBtKXAACEDDAILIAFBBGoLIQJBqJbAACEDCyAAIAM2AgQgACACNgIAC7cBAQJ/AkACfwJAAkACQAJAAkACQAJAAkAgASgCAA4KAAEJAgMEBQkGBwkLIAFBBGohAkGMyMAAIQMMCAsgAUEIaiECQcjIwAAhAwwHCyABQQRqIQJBhMnAACEDDAYLIAFBBGohAkHAycAAIQMMBQsgAUEEaiECQfzJwAAhAwwECyABQQRqDAILIAFBCGohAkHIyMAAIQMMAgsgAUEEagshAkHUt8AAIQMLIAAgAzYCBCAAIAI2AgALtwEBAn8CQAJ/AkACQAJAAkACQAJAAkACQCABKAIADgoAAQkCAwQFCQYHCQsgAUEEaiECQbjqwAAhAwwICyABQQhqIQJB9OrAACEDDAcLIAFBBGohAkGw68AAIQMMBgsgAUEEaiECQezrwAAhAwwFCyABQQRqIQJBqOzAACEDDAQLIAFBBGoMAgsgAUEIaiECQfTqwAAhAwwCCyABQQRqCyECQeTswAAhAwsgACADNgIEIAAgAjYCAAu3AQECfwJAAn8CQAJAAkACQAJAAkACQAJAIAEoAgAOCgABCQIDBAUJBgcJCyABQQRqIQJBvJDBACEDDAgLIAFBCGohAkH4kMEAIQMMBwsgAUEEaiECQbSRwQAhAwwGCyABQQRqIQJB8JHBACEDDAULIAFBBGohAkGsksEAIQMMBAsgAUEEagwCCyABQQhqIQJB+JDBACEDDAILIAFBBGoLIQJB6JLBACEDCyAAIAM2AgQgACACNgIAC48BAQJ/IwBBEGsiAiQAIAJBBGoiAyABEKcDIAIgADYCDCADIAJBDGpB3PfBABCCASACIABBAWo2AgwgAkEEaiACQQxqQdz3wQAQggEgAiAAQQJqNgIMIAJBBGogAkEMakHc98EAEIIBIAIgAEEDajYCDCACQQRqIAJBDGpB3PfBABCCASADEKADIAJBEGokAAuwAQECfyMAQRBrIgIkAAJ/AkACQAJAAkBBAyAAKAIAQQdrIgMgA0EDTxtBAWsOAwECAwALIAFB6LDAAEEUEOUDDAMLIAFB/LDAAEEdEOUDDAILIAIgAEEEajYCCCABQYyowABBCUGsscAAQQQgAEEMakGcscAAQbCxwABBBiACQQhqQeSewAAQwwEMAQsgAiAANgIMIAFByLHAAEEUIAJBDGpBuLHAABB/CyACQRBqJAALsAEBAn8jAEEQayICJAACfwJAAkACQAJAQQMgACgCAEEHayIDIANBA08bQQFrDgMBAgMACyABQfzTwABBFBDlAwwDCyABQZDUwABBHRDlAwwCCyACIABBBGo2AgggAUGgy8AAQQlBwNTAAEEEIABBDGpBsNTAAEHE1MAAQQYgAkEIakH4wcAAEMMBDAELIAIgADYCDCABQdzUwABBFCACQQxqQczUwAAQfwsgAkEQaiQAC7ABAQJ/IwBBEGsiAiQAAn8CQAJAAkACQEEDIAAoAgBBB2siAyADQQNPG0EBaw4DAQIDAAsgAUHk9sAAQRQQ5QMMAwsgAUH49sAAQR0Q5QMMAgsgAiAAQQRqNgIIIAFBiO7AAEEJQaj3wABBBCAAQQxqQZj3wABBrPfAAEEGIAJBCGpBmNzAABDDAQwBCyACIAA2AgwgAUHE98AAQRQgAkEMakG098AAEH8LIAJBEGokAAuwAQECfyMAQRBrIgIkAAJ/AkACQAJAAkBBAyAAKAIAQQdrIgMgA0EDTxtBAWsOAwECAwALIAFB+JzBAEEUEOUDDAMLIAFBjJ3BAEEdEOUDDAILIAIgAEEEajYCCCABQZyUwQBBCUG8ncEAQQQgAEEMakGsncEAQcCdwQBBBiACQQhqQYyUwQAQwwEMAQsgAiAANgIMIAFB2J3BAEEUIAJBDGpByJ3BABB/CyACQRBqJAALowEBAn8jAEEgayIBJAACQCAAKAIEIgJBA0YgAkECSXINAAJAAkAgAC0AGEEBaw4CAgABCyABQQE2AgggAUH0gsAANgIEIAFCADcCECABIAFBHGo2AgwgAUEEakH4g8AAEKQDAAsgAEEIahCpASAAKAIIIgJFDQAgACgCDCACQQxsQQQQpwQLIAAoAhwiAgRAIAAoAiAgAkEBEKcECyABQSBqJAALkgECA38BfiABKAIAIgUtACUiA0UEQCAAQQI6AAAPCwJ+IAMgAi0AFCIETQRAIAIgBCADayIEOgAUQn8gA62GQn+FIAIpAwggBEE/ca2IgwwBCyACIAMQWwshBiAFKAIIIgMgBqciAksEQCABIAUoAgQgAkEDdGopAgA3AgQgAEEDOgAADwsgAiADQayAwgAQrQIAC5IBAQN/IwBBIGsiAyQAIAMgACgCACIFENwEIgA2AgAgAyACNgIEIAAgAkYEQBDtAyIEENwDIgAgASACENYDIQEgBEGEAU8EQCAEEMYBCyAAQYQBTwRAIAAQxgELIAUgAUEAEKYEIAFBhAFPBEAgARDGAQsgA0EgaiQADwsgA0EANgIIIAMgA0EEaiADQQhqEIwDAAukAQECfyMAQSBrIgEkAAJAIAAoAgRBAkcNAAJAAkAgAC0AGEEBaw4CAgABCyABQQE2AgggAUH0gsAANgIEIAFCADcCECABIAFBHGo2AgwgAUEEakH4g8AAEKQDAAsgAEEIahCpASAAKAIIIgJFDQAgACgCDCACQQxsQQQQpwQLIAAoAhwiAgRAIAAoAiAgAkEBEKcECyAAQShBBBCnBCABQSBqJAALpAEBAn8jAEEgayIBJAACQCAAKAIEQQJHDQACQAJAIAAtABhBAWsOAgIAAQsgAUEBNgIIIAFBtP7AADYCBCABQgA3AhAgASABQRxqNgIMIAFBBGpBuP/AABCkAwALIABBCGoQqQEgACgCCCICRQ0AIAAoAgwgAkEMbEEEEKcECyAAKAIcIgIEQCAAKAIgIAJBARCnBAsgAEEoQQQQpwQgAUEgaiQAC4sBAgJ/AX4CfkIAIAAtAAgiAkUNABogAiABLQAUIgNNBEAgASADIAJrIgM6ABRCfyACrYZCf4UgASkDCCADQT9xrYiDDAELIAEgAhBbCyEEIAAoAgQgBKdqIgEgACgCACICKAIIIgNJBEAgACACKAIEIAFBA3RqKQIANwIEDwsgASADQbyAwgAQrQIAC6MBAQJ/IwBBEGsiAiQAAn8CQAJAAkAgACgCACIAKAIAIgNBAWtBACADQQJPG0EBaw4CAQIACyACIAA2AgggAUGkmcEAQREgAkEIakGUmcEAEH8MAgsgAiAAQQhqNgIMIAFBtZnBAEEZQc6ZwQBBBiAAQQRqQeiFwQBBt43BAEEEIAJBDGpB9IbBABDDAQwBCyABQfyOwQBBChDlAwsgAkEQaiQAC6MBAQJ/IwBBEGsiAiQAAn8CQAJAAkAgACgCACIAKAIAIgNBAWtBACADQQJPG0EBaw4CAQIACyACIAA2AgggAUGA18EAQREgAkEIakHw1sEAEH8MAgsgAiAAQQhqNgIMIAFBkdfBAEEZQarXwQBBBiAAQQRqQfTMwQBBsNfBAEEEIAJBDGpBuM3BABDDAQwBCyABQbTXwQBBChDlAwsgAkEQaiQAC5sBAQJ/IwBBIGsiASQAAkAgACgCBEECRw0AAkACQCAALQAYQQFrDgICAAELIAFBATYCCCABQbT+wAA2AgQgAUIANwIQIAEgAUEcajYCDCABQQRqQbj/wAAQpAMACyAAQQhqEKkBIAAoAggiAkUNACAAKAIMIAJBDGxBBBCnBAsgACgCHCICBEAgACgCICACQQEQpwQLIAFBIGokAAupAQECfyMAQSBrIgEkAAJAAkACQAJAAkBBkOXCAC0AAA4CAAECC0GQ5cIAQQE6AAALIABBATYCAAwBC0GR5cIALQAAIQJBkeXCAEEBOgAAIAEgAjoAByACQQFGDQEgAEEAOgAUIABBADYCAEGR5cIAQQA6AAALIAFBIGokAA8LIAFCADcCFCABQoGAgIDAADcCDCABQbCfwgA2AgggAUEHaiABQQhqEIoDAAuoAQEDfyMAQRBrIgIkAEHencIAIQNBEyEEAkACQAJAAkAgAS0AAEEBaw4DAgABAwsgASgCBCIBKAIEIQQgASgCACEDDAILIAJBCGogASgCBCIBKAIAIAEoAgQoAiARAQAgAigCDCEEIAIoAgghAwwBCyABLQABQQJ0IgFB9KnCAGooAgAhAyABQcyowgBqKAIAIQQLIAAgBDYCBCAAIAM2AgAgAkEQaiQAC5IBAQR/IwBBEGsiAiQAQQEhBAJAIAEoAhwiA0EnIAEoAiAiBSgCECIBEQAADQAgAkEEaiAAKAIAQYECEDkCQCACLQAEQYABRgRAIAMgAigCCCABEQAARQ0BDAILIAMgAi0ADiIAIAJBBGpqIAItAA8gAGsgBSgCDBECAA0BCyADQScgAREAACEECyACQRBqJAAgBAueAQECfyMAQRBrIgIkAAJ/AkACQAJAIAAoAgAiA0EBa0EAIANBAk8bQQFrDgIBAgALIAIgADYCCCABQZStwABBESACQQhqQYStwAAQfwwCCyACIABBCGo2AgwgAUGlrcAAQRlBvq3AAEEGIABBBGpBiJjAAEHzocAAQQQgAkEMakHMmMAAEMMBDAELIAFBuKPAAEEKEOUDCyACQRBqJAALngEBAn8jAEEQayICJAACfwJAAkACQCAAKAIAIgNBAWtBACADQQJPG0EBaw4CAQIACyACIAA2AgggAUGo0MAAQREgAkEIakGY0MAAEH8MAgsgAiAAQQhqNgIMIAFBudDAAEEZQdLQwABBBiAAQQRqQZy7wABBh8XAAEEEIAJBDGpB4LvAABDDAQwBCyABQczGwABBChDlAwsgAkEQaiQAC54BAQJ/IwBBEGsiAiQAAn8CQAJAAkAgACgCACIDQQFrQQAgA0ECTxtBAWsOAgECAAsgAiAANgIIIAFBkPPAAEERIAJBCGpBgPPAABB/DAILIAIgAEEIajYCDCABQaHzwABBGUG688AAQQYgAEEEakGM3sAAQbDnwABBBCACQQxqQfjcwAAQwwEMAQsgAUH46MAAQQoQ5QMLIAJBEGokAAueAQECfyMAQRBrIgIkAAJ/AkACQAJAIAAoAgAiA0EBa0EAIANBAk8bQQFrDgIBAgALIAIgADYCCCABQaSZwQBBESACQQhqQZSZwQAQfwwCCyACIABBCGo2AgwgAUG1mcEAQRlBzpnBAEEGIABBBGpB6IXBAEG3jcEAQQQgAkEMakH0hsEAEMMBDAELIAFB/I7BAEEKEOUDCyACQRBqJAALmwEBAX8jAEEQayICJAACfwJAAkACQCAAKAIAIgAtAABBAWsOAgECAAsgAiAAQQFqNgIEIAFB5JjBAEELQdSHwQBBAyACQQRqQdSYwQAQyQEMAgsgAiAAQQRqNgIIIAFB8IvBAEENIAJBCGpB4IvBABB/DAELIAIgAEEEajYCDCABQYCZwQBBESACQQxqQfCYwQAQfwsgAkEQaiQAC5sBAQF/IwBBEGsiAiQAAn8CQAJAAkAgACgCACIALQAAQQFrDgIBAgALIAIgAEEBajYCBCABQeTTwQBBC0GLzsEAQQMgAkEEakHU08EAEMkBDAILIAIgAEEEajYCCCABQYDUwQBBDSACQQhqQfDTwQAQfwwBCyACIABBBGo2AgwgAUGg1MEAQREgAkEMakGQ1MEAEH8LIAJBEGokAAuEAQEDfwJ/AkAgACgCACIBRQ0AA0ACQCAAKAIIIgMgACgCBE8NACABIANqLQAAQcUARw0AIAAgA0EBajYCCAwCCwJAIAJFDQAgACgCECIBRQ0AQfW5wgBBAiABENUERQ0AQQEPC0EBIABBARAgDQIaIAJBAWshAiAAKAIAIgENAAsLQQALC5YBAQJ/IwBBIGsiASQAAkAgACgCBEECRw0AAkACQCAALQAYQQFrDgICAAELIAFBATYCCCABQbT+wAA2AgQgAUIANwIQIAEgAUEcajYCDCABQQRqQbj/wAAQpAMACyAAQQhqEKkBIAAoAggiAkUNACAAKAIMIAJBDGxBBBCnBAsgAEEgahBUIABBwABBCBCnBCABQSBqJAALiAEBAX8jAEEwayICJAACfyAALQAAQQJHBEAgAiAANgIMIAJBATYCFCACQfCnwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgJA4hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRQwBCyABKAIcQdTFwQBBJCABKAIgKAIMEQIACyACQTBqJAALdwEDfyMAQYABayIDJAAgAC0AACEEQQAhAANAIAAgA2pB/wBqIARBD3EiAkEwciACQTdqIAJBCkkbOgAAIABBAWshACAEIgJBBHYhBCACQQ9LDQALIAFBAUGPxMIAQQIgACADakGAAWpBACAAaxA1IANBgAFqJAALeAEDfyMAQYABayIDJAAgAC0AACEEQQAhAANAIAAgA2pB/wBqIARBD3EiAkEwciACQdcAaiACQQpJGzoAACAAQQFrIQAgBCICQQR2IQQgAkEPSw0ACyABQQFBj8TCAEECIAAgA2pBgAFqQQAgAGsQNSADQYABaiQAC3kCAX4CfyMAQYABayIEJAAgACkDACECQQAhAANAIAAgBGpB/wBqIAKnQQ9xIgNBMHIgA0HXAGogA0EKSRs6AAAgAEEBayEAIAJCD1YgAkIEiCECDQALIAFBAUGPxMIAQQIgACAEakGAAWpBACAAaxA1IARBgAFqJAALlgEBAX8jAEEQayICJAACfwJAAkACQCAALQAAQQFrDgIBAgALIAIgAEEBajYCBCABQdSswABBC0GsmcAAQQMgAkEEakHErMAAEMkBDAILIAIgAEEEajYCCCABQaygwABBDSACQQhqQZygwAAQfwwBCyACIABBBGo2AgwgAUHwrMAAQREgAkEMakHgrMAAEH8LIAJBEGokAAuWAQEBfyMAQRBrIgIkAAJ/AkACQAJAIAAtAABBAWsOAgECAAsgAiAAQQFqNgIEIAFB6M/AAEELQcC8wABBAyACQQRqQdjPwAAQyQEMAgsgAiAAQQRqNgIIIAFBwMPAAEENIAJBCGpBsMPAABB/DAELIAIgAEEEajYCDCABQYTQwABBESACQQxqQfTPwAAQfwsgAkEQaiQAC5YBAQF/IwBBEGsiAiQAAn8CQAJAAkAgAC0AAEEBaw4CAQIACyACIABBAWo2AgQgAUHQ8sAAQQtBkN/AAEEDIAJBBGpBwPLAABDJAQwCCyACIABBBGo2AgggAUH85cAAQQ0gAkEIakHs5cAAEH8MAQsgAiAAQQRqNgIMIAFB7PLAAEERIAJBDGpB3PLAABB/CyACQRBqJAALlgEBAX8jAEEQayICJAACfwJAAkACQCAALQAAQQFrDgIBAgALIAIgAEEBajYCBCABQeSYwQBBC0HUh8EAQQMgAkEEakHUmMEAEMkBDAILIAIgAEEEajYCCCABQfCLwQBBDSACQQhqQeCLwQAQfwwBCyACIABBBGo2AgwgAUGAmcEAQREgAkEMakHwmMEAEH8LIAJBEGokAAtyAQN/IwBBgAFrIgQkACAAKAIAIQADQCACIARqQf8AaiAAQQ9xIgNBMHIgA0HXAGogA0EKSRs6AAAgAkEBayECIABBD0sgAEEEdiEADQALIAFBAUGPxMIAQQIgAiAEakGAAWpBACACaxA1IARBgAFqJAALcQEDfyMAQYABayIEJAAgACgCACEAA0AgAiAEakH/AGogAEEPcSIDQTByIANBN2ogA0EKSRs6AAAgAkEBayECIABBD0sgAEEEdiEADQALIAFBAUGPxMIAQQIgAiAEakGAAWpBACACaxA1IARBgAFqJAALdwECfyMAQRBrIgIkACAAKAIAIgBBCGooAgAhAyAAQQRqKAIAIQAgAkEEaiABEKcDIAMEQCADQQJ0IQEDQCACIAA2AgwgAkEEaiACQQxqQejawAAQggEgAEEEaiEAIAFBBGsiAQ0ACwsgAkEEahCgAyACQRBqJAALmAEBAn8jAEEQayICJAAgACgCACIAQQRqIQMCfyAALQAARQRAIAIgAEEBajYCCCABQdCGwQBBC0HbhsEAQRIgA0HohcEAQe2GwQBBBSACQQhqQcCGwQAQwwEMAQsgAiAAQQhqNgIMIAFBhIfBAEEWQZqHwQBBCSADQeiFwQBBo4fBAEEJIAJBDGpB9IbBABDDAQsgAkEQaiQAC5kBAQN/IwBBEGsiAiQAIAAoAgAiAEEIaiEDIABBBGohBAJ/IAAoAgBFBEAgAiADNgIIIAFBiIvBAEEaQdSHwQBBAyAEQeiFwQBBoovBAEEEIAJBCGpB9IbBABDDAQwBCyACIAM2AgwgAUGmi8EAQQxBsovBAEEGIARB6IXBAEG4i8EAQQcgAkEMakH0hsEAEMMBCyACQRBqJAALmAEBAn8jAEEQayICJAAgACgCACIAQQRqIQMCfyAALQAARQRAIAIgAEEBajYCCCABQZTNwQBBC0GfzcEAQRIgA0H0zMEAQbHNwQBBBSACQQhqQYTNwQAQwwEMAQsgAiAAQQhqNgIMIAFByM3BAEEWQd7NwQBBCSADQfTMwQBB583BAEEJIAJBDGpBuM3BABDDAQsgAkEQaiQAC5kBAQN/IwBBEGsiAiQAIAAoAgAiAEEIaiEDIABBBGohBAJ/IAAoAgBFBEAgAiADNgIIIAFBndPBAEEaQYvOwQBBAyAEQfTMwQBBt9PBAEEEIAJBCGpBuM3BABDDAQwBCyACIAM2AgwgAUG708EAQQxBx9PBAEEGIARB9MzBAEHN08EAQQcgAkEMakG4zcEAEMMBCyACQRBqJAALdwECfyMAQRBrIgIkACAAKAIAIgBBCGooAgAhAyAAQQRqKAIAIQAgAkEEaiABEKcDIAMEQCADQQJ0IQEDQCACIAA2AgwgAkEEaiACQQxqQez3wQAQggEgAEEEaiEAIAFBBGsiAQ0ACwsgAkEEahCgAyACQRBqJAALewEBfyMAQTBrIgIkACACIABBBGo2AgAgAiAANgIEIAJBAzYCDCACQZzDwQA2AgggAkICNwIUIAIgAkEEaq1CgICAgPA1hDcDKCACIAKtQoCAgIDgNIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUgAkEwaiQAC3oBAX8jAEEgayICJAACfyAAKAIAQYCAgIB4RwRAIAEgACgCBCAAKAIIEOUDDAELIAJBEGogACgCDCgCACIAQQhqKQIANwMAIAJBGGogAEEQaikCADcDACACIAApAgA3AwggASgCHCABKAIgIAJBCGoQRQsgAkEgaiQAC44BAQJ/IwBBIGsiAyQAAkAgACgCBEECRw0AAkACQCAALQAYQQFrDgICAAELIANBATYCCCADQfSCwAA2AgQgA0IANwIQIAMgA0EcajYCDCADQQRqQfiDwAAQpAMACyAAQQhqEKkBIAAoAggiBEUNACAAKAIMIARBDGxBBBCnBAsgAEEoQQQQpwQgA0EgaiQAC44BAQJ/IwBBIGsiASQAAkAgACgCBEECRw0AAkACQCAALQAYQQFrDgICAAELIAFBATYCCCABQbT+wAA2AgQgAUIANwIQIAEgAUEcajYCDCABQQRqQbj/wAAQpAMACyAAQQhqEKkBIAAoAggiAkUNACAAKAIMIAJBDGxBBBCnBAsgAEEkQQQQpwQgAUEgaiQAC44BAQJ/IwBBIGsiAyQAAkAgACgCBEECRw0AAkACQCAALQAYQQFrDgICAAELIANBATYCCCADQbT+wAA2AgQgA0IANwIQIAMgA0EcajYCDCADQQRqQbj/wAAQpAMACyAAQQhqEKkBIAAoAggiBEUNACAAKAIMIARBDGxBBBCnBAsgAEEkQQQQpwQgA0EgaiQAC48BAQJ/IwBBIGsiAyQAAkAgACgCBEECRw0AAkACQCAALQAYQQFrDgICAAELIANBATYCCCADQbT+wAA2AgQgA0IANwIQIAMgA0EcajYCDCADQQRqQbj/wAAQpAMACyAAQQhqEKkBIAAoAggiBEUNACAAKAIMIARBDGxBBBCnBAsgAEHAAEEIEKcEIANBIGokAAuOAQECfyMAQSBrIgMkAAJAIAAoAgRBAkcNAAJAAkAgAC0AGEEBaw4CAgABCyADQQE2AgggA0G0/sAANgIEIANCADcCECADIANBHGo2AgwgA0EEakG4/8AAEKQDAAsgAEEIahCpASAAKAIIIgRFDQAgACgCDCAEQQxsQQQQpwQLIABBKEEEEKcEIANBIGokAAuTAQECfyMAQRBrIgIkACAAQQRqIQMCfyAALQAARQRAIAIgAEEBajYCCCABQaiYwABBC0GzmMAAQRIgA0GImMAAQcWYwABBBSACQQhqQZiYwAAQwwEMAQsgAiAAQQhqNgIMIAFB3JjAAEEWQfKYwABBCSADQYiYwABB+5jAAEEJIAJBDGpBzJjAABDDAQsgAkEQaiQAC5QBAQN/IwBBEGsiAiQAIABBCGohAyAAQQRqIQQCfyAAKAIARQRAIAIgAzYCCCABQeCcwABBGkGsmcAAQQMgBEGImMAAQfqcwABBBCACQQhqQcyYwAAQwwEMAQsgAiADNgIMIAFB/pzAAEEMQYqdwABBBiAEQYiYwABBkJ3AAEEHIAJBDGpBzJjAABDDAQsgAkEQaiQAC4wBAQJ/IwBBIGsiASQAAkAgACgCBEECRw0AAkACQCAALQAYQQFrDgICAAELIAFBATYCCCABQbT+wAA2AgQgAUIANwIQIAEgAUEcajYCDCABQQRqQbj/wAAQpAMACyAAQQhqEKkBIAAoAggiAkUNACAAKAIMIAJBDGxBBBCnBAsgAEEgahBUIAFBIGokAAuTAQECfyMAQRBrIgIkACAAQQRqIQMCfyAALQAARQRAIAIgAEEBajYCCCABQby7wABBC0HHu8AAQRIgA0Gcu8AAQdm7wABBBSACQQhqQay7wAAQwwEMAQsgAiAAQQhqNgIMIAFB8LvAAEEWQYa8wABBCSADQZy7wABBj7zAAEEJIAJBDGpB4LvAABDDAQsgAkEQaiQAC5QBAQN/IwBBEGsiAiQAIABBCGohAyAAQQRqIQQCfyAAKAIARQRAIAIgAzYCCCABQfS/wABBGkHAvMAAQQMgBEGcu8AAQY7AwABBBCACQQhqQeC7wAAQwwEMAQsgAiADNgIMIAFBksDAAEEMQZ7AwABBBiAEQZy7wABBpMDAAEEHIAJBDGpB4LvAABDDAQsgAkEQaiQAC5MBAQJ/IwBBEGsiAiQAIABBBGohAwJ/IAAtAABFBEAgAiAAQQFqNgIIIAFBnN7AAEELQafewABBEiADQYzewABBud7AAEEFIAJBCGpB+NrAABDDAQwBCyACIABBCGo2AgwgAUG+3sAAQRZB1N7AAEEJIANBjN7AAEHd3sAAQQkgAkEMakH43MAAEMMBCyACQRBqJAALlAEBA38jAEEQayICJAAgAEEIaiEDIABBBGohBAJ/IAAoAgBFBEAgAiADNgIIIAFBxOLAAEEaQZDfwABBAyAEQYzewABB3uLAAEEEIAJBCGpB+NzAABDDAQwBCyACIAM2AgwgAUHi4sAAQQxB7uLAAEEGIARBjN7AAEH04sAAQQcgAkEMakH43MAAEMMBCyACQRBqJAALkwEBAn8jAEEQayICJAAgAEEEaiEDAn8gAC0AAEUEQCACIABBAWo2AgggAUHQhsEAQQtB24bBAEESIANB6IXBAEHthsEAQQUgAkEIakHAhsEAEMMBDAELIAIgAEEIajYCDCABQYSHwQBBFkGah8EAQQkgA0HohcEAQaOHwQBBCSACQQxqQfSGwQAQwwELIAJBEGokAAuUAQEDfyMAQRBrIgIkACAAQQhqIQMgAEEEaiEEAn8gACgCAEUEQCACIAM2AgggAUGIi8EAQRpB1IfBAEEDIARB6IXBAEGii8EAQQQgAkEIakH0hsEAEMMBDAELIAIgAzYCDCABQaaLwQBBDEGyi8EAQQYgBEHohcEAQbiLwQBBByACQQxqQfSGwQAQwwELIAJBEGokAAtJAQN+IAAgAUL/////D4MiAkI+fiIDQgAiAiABQiCIQj5+fCIBQiCGfCIENwMAIAAgAyAEVq0gASACVK1CIIYgAUIgiIR8NwMIC5YBAQJ/AkACQAJAAkACQAJAAkAgASgCAEEBaw4GBgECAwQFAAsgAUEEaiECQaiWwAAhAwwFCyABQQRqIQJBzK7AACEDDAQLIAFBBGohAkGIr8AAIQMMAwsgAUEEaiECQcSvwAAhAwwCCyABQQRqIQJBgLDAACEDDAELIAFBBGohAkG8sMAAIQMLIAAgAzYCBCAAIAI2AgALlgEBAn8CQAJAAkACQAJAAkACQCABKAIAQQFrDgYGAQIDBAUACyABQQRqIQJB1LfAACEDDAULIAFBBGohAkHg0cAAIQMMBAsgAUEEaiECQZzSwAAhAwwDCyABQQRqIQJB2NLAACEDDAILIAFBBGohAkGU08AAIQMMAQsgAUEEaiECQdDTwAAhAwsgACADNgIEIAAgAjYCAAuWAQECfwJAAkACQAJAAkACQAJAIAEoAgBBAWsOBgYBAgMEBQALIAFBBGohAkHk7MAAIQMMBQsgAUEEaiECQcj0wAAhAwwECyABQQRqIQJBhPXAACEDDAMLIAFBBGohAkHA9cAAIQMMAgsgAUEEaiECQfz1wAAhAwwBCyABQQRqIQJBuPbAACEDCyAAIAM2AgQgACACNgIAC5YBAQJ/AkACQAJAAkACQAJAAkAgASgCAEEBaw4GBgECAwQFAAsgAUEEaiECQeiSwQAhAwwFCyABQQRqIQJB3JrBACEDDAQLIAFBBGohAkGYm8EAIQMMAwsgAUEEaiECQdSbwQAhAwwCCyABQQRqIQJBkJzBACEDDAELIAFBBGohAkHMnMEAIQMLIAAgAzYCBCAAIAI2AgALfgEBfyMAQUBqIgUkACAFIAE2AgwgBSAANgIIIAUgAzYCFCAFIAI2AhAgBUECNgIcIAVB0MPCADYCGCAFQgI3AiQgBSAFQRBqrUKAgICAgMQAhDcDOCAFIAVBCGqtQoCAgICQxACENwMwIAUgBUEwajYCICAFQRhqIAQQpAMAC28BAX8jAEEwayICJAAgAiAAKAIANgIEIAJBAjYCDCACQbivwQA2AgggAkICNwIUIAIgAkEEaq1CgICAgIA2hDcDKCACQvSuwYAQNwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFIAJBMGokAAt8AQN/AkACQAJAQQMgACgCAEEHayIBIAFBA08bQQJrDgIBAAILIAAQpAEMAQsgAC0ABEEDRw0AIAAoAggiACgCACEBIABBBGooAgAiAygCACICBEAgASACEQMACyADKAIEIgIEQCABIAIgAygCCBCnBAsgAEEMQQQQpwQLC4UBAQJ/IwBBIGsiASQAAkAgACgCBEECRw0AAkACQCAALQAYQQFrDgICAAELIAFBATYCCCABQbT+wAA2AgQgAUIANwIQIAEgAUEcajYCDCABQQRqQbj/wAAQpAMACyAAQQhqEKkBIAAoAggiAkUNACAAKAIMIAJBDGxBBBCnBAsgAUEgaiQAC2wBAX8jAEEwayICJAAgAiAANgIEIAJBAjYCDCACQbivwQA2AgggAkICNwIUIAIgAkEEaq1CgICAgIA2hDcDKCACQvSuwYAQNwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFIAJBMGokAAt4AQN/AkAgACgCACIBQYCAgIB4RwRAIAFFDQEgACgCBCABQQEQpwQPCyAALQAEQQNHDQAgACgCCCIAKAIAIQEgAEEEaigCACIDKAIAIgIEQCABIAIRAwALIAMoAgQiAgRAIAEgAiADKAIIEKcECyAAQQxBBBCnBAsLcwECfwJAAn8CQAJAAkACQAJAAkAgAS0AAA4HAAcBAgMEBQcLIAFBBGoMBQsgAUEEagwECyABQQFqIQJB8KLAACEDDAQLIAFBBGoMAgsgAUEEagwBCyABQQRqCyECQaiWwAAhAwsgACADNgIEIAAgAjYCAAtzAQJ/AkACfwJAAkACQAJAAkACQCABLQAADgcABwECAwQFBwsgAUEEagwFCyABQQRqDAQLIAFBAWohAkGExsAAIQMMBAsgAUEEagwCCyABQQRqDAELIAFBBGoLIQJB1LfAACEDCyAAIAM2AgQgACACNgIAC3MBAn8CQAJ/AkACQAJAAkACQAJAIAEtAAAOBwAHAQIDBAUHCyABQQRqDAULIAFBBGoMBAsgAUEBaiECQbDowAAhAwwECyABQQRqDAILIAFBBGoMAQsgAUEEagshAkHk7MAAIQMLIAAgAzYCBCAAIAI2AgALcwECfwJAAn8CQAJAAkACQAJAAkAgAS0AAA4HAAcBAgMEBQcLIAFBBGoMBQsgAUEEagwECyABQQFqIQJBtI7BACEDDAQLIAFBBGoMAgsgAUEEagwBCyABQQRqCyECQeiSwQAhAwsgACADNgIEIAAgAjYCAAtlAQJ/IwBBEGsiAiQAIAAoAgQhAyAAKAIAIQAgAkEEaiABEKcDIAMEQANAIAIgADYCDCACQQRqIAJBDGpB8K3CABCCASAAQQFqIQAgA0EBayIDDQALCyACQQRqEKADIAJBEGokAAvxAQEEfyMAQRBrIgMkACAAKAIMIQICfwJAAkACQAJAIAAoAgQOAgABAgsgAg0BQQFBABCfAwwDCyACRQ0BCyADQQRqIgIgABBoIwBBIGsiBCQAIARBCGoiABDwAQJ/QYXlwgAtAAAaQShBBBD1AyIBBEAgAUGAu8AANgIAIAEgACkCADcCBCABIAIpAgA3AhwgAUEMaiAAQQhqKQIANwIAIAFBFGogAEEQaikCADcCACABQSRqIAJBCGooAgA2AgAgAQwBC0EEQSgQ0wQACyAEQSBqJAAMAQsgACgCACIAKAIAIAAoAgQQnwMLIANBEGokAAt8AQJ/AkACQAJAAkAgAC0AAA4CAwEACyAAKAIEIgFB+////wdqIgJBDU0gAkECR3ENAiABQYSAgIB4Sg0BIAFBg4CAgHhHDQIMAQsgACgCBCIBQYSAgIB4Sg0AIAFBg4CAgHhHDQELIAFFDQAgACgCCCABQQJ0QQQQpwQLC2kCAX8BfiMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQZzCwgA2AgggA0ICNwIUIANCgICAgBAiBCADrYQ3AyggAyAEIANBBGqthDcDICADIANBIGo2AhAgA0EIaiACEKQDAAttAQF/IAAtAAQhASAALQAFBEAgAAJ/QQEgAUEBcQ0AGiAAKAIAIgEtABRBBHFFBEAgASgCHEGHxMIAQQIgASgCICgCDBECAAwBCyABKAIcQYbEwgBBASABKAIgKAIMEQIACyIBOgAECyABQQFxC2QBAX8jAEEwayICJAAgAiAAKAIANgIMIAJBAjYCFCACQeSuwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA0hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRSACQTBqJAALWgECfyAAKAIILQBkIgJFBEAgAEIANwMADwsgAiABLQAUIgNNBEAgASADIAJrIgM6ABQgAEJ/IAKthkJ/hSABKQMIIANBP3GtiIM3AwAPCyAAIAEgAhBbNwMAC2QBAX8jAEEQayIAJAACfyACKAIABEBB3KDCACEDQQkMAQsgAEEEaiACKAIEIAIoAggQPUHcoMIAIAAoAgggACgCBCICGyEDQQkgACgCDCACGwshAiADIAIgARDaASAAQRBqJAALZgAjAEEwayIAJABBhOXCAC0AAARAIABBAjYCDCAAQYyhwgA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIAQhDcDICAAIABBIGo2AhAgAEEIakG0ocIAEKQDAAsgAEEwaiQAC2EBAX8jAEEwayICJAAgAiAANgIMIAJBAjYCFCACQZymwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA0hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRSACQTBqJAALYQEBfyMAQTBrIgIkACACIAA2AgwgAkECNgIUIAJB5K7BADYCECACQgE3AhwgAiACQQxqrUKAgICA4DSENwMoIAIgAkEoajYCGCABKAIcIAEoAiAgAkEQahBFIAJBMGokAAthAQF/IwBBMGsiAiQAIAIgADYCDCACQQE2AhQgAkHwp8EANgIQIAJCATcCHCACIAJBDGqtQoCAgICQOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUgAkEwaiQAC18BAn8CQCAAKAIAIgFB7f///wdqIgJBCk0gAkEDR3ENACABRSABQfv///8HaiICQQ1NIAJBAkdxIAFBg4CAgHhHIAFBhICAgHhMcXJyDQAgACgCBCABQQJ0QQQQpwQLC1wBA38gAC0AACIBQQNLIAFBA0dyRQRAIAAoAgQiACgCACEBIABBBGooAgAiAygCACICBEAgASACEQMACyADKAIEIgIEQCABIAIgAygCCBCnBAsgAEEMQQQQpwQLC2sBAn9BqJbAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMAAQIDC0EAIQEMAgsgAUEBaiEBQdStwAAhAgwBCyABQQRqIQFBkK7AACECCyAAIAI2AgQgACABNgIAC2gBA38CQAJAAkACQEEDIAEoAgBB7f///wdqIgQgBEELTxtBAmsOAwABAgMLIAFBBGohAkGcm8AAIQMMAgtB2LPAACEDIAEhAgwBCyABQQRqIQJBjLXAACEDCyAAIAM2AgQgACACNgIAC2sBAn9B1LfAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EE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AX8jAEEQayICJAAgAiAANgIMIAFB8b3AAEEWQYe+wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBic7AAEEbQcC8wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBrODAAEERQb3gwABBBCACQQxqQZzgwAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBweDAAEEWQdfgwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8fDAAEEbQZDfwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8IjBAEERQYGJwQBBBCACQQxqQeCIwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhYnBAEEWQZuJwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhZfBAEEbQdSHwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzwBAX8jAEEQayICJAAgAkGQksIANgIMIAIgADYCCCACQQhqQZSSwgAgAkEMakGUksIAIAFB5J/CABBrAAs4AQF/IwBBEGsiAiQAIAIgADYCDCABQeywwgBBDUH5sMIAQQQgAkEMakHcsMIAEMkBIAJBEGokAAs5AQF/IwBBEGsiAyQAIAMgATYCDCADIAA2AgggA0EIakGswsIAIANBDGpBrMLCACACQeyOwgAQawALMAEBfyMAQRBrIgIkACACQQhqIAAQ8wIgAigCCCABIAIoAgwoAhARAAAgAkEQaiQACzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEMUBDwsgACABEPwBDwsgACABEP0BCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEK0EDwsgACABEIQCDwsgACABEIMCCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEKkDDwsgACABEIQCDwsgACABEIMCCzMBAX8jAEEQayICJAAgAiAAKAIANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAszAQF/IwBBEGsiAiQAIAIgACgCADYCDCABQejUwQBBDCACQQxqQdjUwQAQfyACQRBqJAALLQACQCAAIAEQrANFDQAgAARAQYXlwgAtAAAaIAAgARD1AyIBRQ0BCyABDwsACzcBAX8jAEEgayIBJAAgAUEANgIYIAFBATYCDCABQdzZwgA2AgggAUIENwIQIAFBCGogABCkAwALMwEBfyAAKAIAIgFBhICAgHhMIAFBg4CAgHhHcSABRXJFBEAgACgCBCABQQJ0QQQQpwQLCzABAX8jAEEQayICJAAgAiAANgIMIAFBxJnAAEEMIAJBDGpBtJnAABB/IAJBEGokAAsvACAAQZybwAA2AgQgACABIAFBACABLQAAQQJrQf8BcSIAQQFGGyAAQQJLGzYCAAswAQF/IwBBEGsiAiQAIAIgADYCDCABQdi8wABBDCACQQxqQci8wAAQfyACQRBqJAALLwAgAEGwvsAANgIEIAAgASABQQAgAS0AAEECa0H/AXEiAEEBRhsgAEECSxs2AgALMAEBfyMAQRBrIgIkACACIAA2AgwgAUGo38AAQQwgAkEMakGY38AAEH8gAkEQaiQACy8AIABBgOHAADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACy8AIABBxInBADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACzABAX8jAEEQayICJAAgAiAANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAssAQF/IwBBEGsiACQAIABBCGoiAiABQfyVwgBBCxCmAyACEK4CIABBEGokAAuEAQEDfyMAQSBrIgQkACAEQQhqIgMQ8AECf0GF5cIALQAAGkEkQQQQ9QMiAgRAIAJB5LrAADYCACACIAE2AiAgAiAANgIcIAIgAykCADcCBCACQQxqIANBCGopAgA3AgAgAkEUaiADQRBqKQIANwIAIAIMAQtBBEEkENMEAAsgBEEgaiQACzgBAX9BASEBIAAtAARFBEAgACgCACIBKAIcQY7EwgBBASABKAIgKAIMEQIAIQELIAAgAToABCABC5ABAQN/IwBBIGsiAyQAIANBCGoiAhDwAQJ/QYXlwgAtAAAaQShBBBD1AyIBBEAgAUGcgsAANgIAIAEgAikCADcCBCABIAApAgA3AhwgAUEMaiACQQhq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NgIMIABBhKLCACABKAIEIAEoAggiAC0ACCAALQAJEMEBAAsgACADNgIEIAAgAjYCACAAQeihwgAgASgCBCABKAIIIgAtAAggAC0ACRDBAQALKgAgAEH/AXFFBEBDAAAAAA8LIABBAWtB/wFxs0NFIpE9lEMAABDBkhBSCy0AIAEoAhwgAiADIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAsyAQF/IAEoAhxBvMHCAEEBIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAshAAJAIAEgAxCsAwRAIAAgASADIAIQ3wMiAA0BCwALIAALIgEBfyAAKAIAIgAgAEEfdSICcyACayAAQX9zQR92IAEQbAslACAARQRAQfiPwgBBMhDIBAALIAAgAiADIAQgBSABKAIQEQsACygAIAEgACgCAC0AAEECdCIAQeC8wgBqKAIAIABBzLzCAGooAgAQ5QMLGQEBf0GAgICAeCABayAATyACIAFpQQFGGwslACABIAAtAABBAnQiAEH8tcAAaigCACAAQey1wABqKAIAEOUDCyUAIABBnJvAADYCBCAAIAFBBGpBACABKAIAQYKAgIB4Rhs2AgALIQAgAEHwosAANgIEIAAgAUEBakEAIAEtAABBAkYbNgIACyUAIAEgAC0AAEECdCIAQZDZwABqKAIAIABBgNnAAGooAgAQ5QMLJQAgAEGwvsAANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAshACAAQYTGwAA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgASAALQAAQQJ0IgBB+PvAAGooAgAgAEHo+8AAaigCABDlAwslACAAQYDhwAA2AgQgACABQQRqQQAgASgCAEGCgICAeEYbNgIACyEAIABBsOjAADYCBCAAIAFBAWpBACABLQAAQQJGGzYCAAshACAAQbSOwQA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgAEHEicEANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAslACABIAAtAABBAnQiAEGMosEAaigCACAAQfyhwQBqKAIAEOUDCyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCABKAIQEQcACyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCAB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BBD1AyILBEACQEGF5cIALQAAGkGACEEEEPUDIghFDQJBheXCAC0AABpBgAhBBBD1AyIERQ0AQYXlwgAtAAAaQYAIQQQQ9QMiDkUNAkGF5cIALQAAGkGACEEEEPUDIgxFDQBBheXCAC0AABpBgAhBBBD1AyISRQ0CIANCADcDqAIgA0EBNgLoASADQQA6AOQBIANBADoA4gEgA0EAOgDgASADQTQ7AdwBIANBADYC2AEgAyASNgLUASADQoCAgICAIDcCzAEgAyAMNgLIASADQoCAgICAIDcDwAEgA0KAgICAwAA3A7gBIANBIzsBtAEgA0EANgKwASADIA42AqwBIANCgICAgIAgNwKkASADIAQ2AqABIANCgICAgIAgNwOYASADQoCAgIDAADcDkAEgA0EfOwGMASADQQA2AogBIAMgCDYChAEgA0KAgICAgCA3AnwgAyALNgJ4IANCgICAgIAgNwNwIANCgICAgMAANwNoIANBwAJqQgA3AwAgA0G4AmpCADcDACADQbACakIANwMAIANB/AFqQQA2AgAgA0H0AWpCADcCACADQgA3AuwBIANC1uuC7ur9ifXgADcDgAIgA0LP1tO+0ser2UI3A4gCIANCADcDkAIgA0L56tDQ58mh5OEANwOYAiADQgA3A6ACIANBADYCyAIgA0IANwPQAiADIAY2AtgCIANBADYC5AIgA0EINgKUAyADQoCAgIAQNwLcAiADQoGAgIDAADcCjAMgA0EANgKIAyADQoCAgIAQNwPoAiADQgA3A/ACIANCBDcD+AIgA0KAgICAEDcDgAMMAwsLQQRBgAhBzIDCABDXAwALQQRBgAhB3IDCABDXAwALIAdBADYCqAcgB0EANgKwByAHQQA6ANwKIAdBADYC2AogByAjNwPQCiAHKQOoByEgIAcpA7AHISMgB0HoA2oiBiADQagDEDsaIAdBCGoQSSAHICM3AyggByAgNwMgIAcgITcDGCAHIA02AgwgByAiPgIQIAcgIkIgiD4CFCAHIAU2AgggB0EwaiAGQagDEDshCCAFQQFxBEBBDCEQIAcoAtgDIhJFDQEgBygC3AMhFwNAIBJB1AFrIQQgEkEEaiEGIBIvAd4WIgNBAnQhC0F/IQUCQAJAA0AgC0UEQCADIQUMAgsgBigCACEOIAVBAWohBSAEQYQCaiEEIAtBBGsh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EwAgAEHMuMAANgIEIAAgATYCAAsTACAAQYi5wAA2AgQgACABNgIACxMAIABBxLnAADYCBCAAIAE2AgALEwAgAEGAusAANgIEIAAgATYCAAsTACAAQbC+wAA2AgQgACABNgIACxMAIABBKDYCBCAAQYjbwAA2AgALEwAgAEGA4cAANgIEIAAgATYCAAshACAAQqTFo/yfjvDjADcDCCAAQqqooLmusOaw6QA3AwALEAAgACgCACAAKAIEIAEQMAsRACAAKAIAIAAoAgQgARDVBAsiACAAQsuH6/rgqLu20AA3AwggAELEr9zF2tKv9bh/NwMACxMAIABBKDYCBCAAQcCFwQA2AgALEwAgAEHEicEANgIEIAAgATYCAAsgACAAQrz8k7Ko16DsTDcDCCAAQuuYqJm2gbKefzcDAAshACAAQriynYTMrpfUQjcDCCAAQu/Dv6KOjcrEoH83AwALIAAgAEKcnaLxgrvwoHU3AwggAELRqsqvpcqt8kA3AwALIQAgAEL7wqCWlfy/yHo3AwggAELmsfLlkYe/ybF/NwMACyIAIABC9auQ77TsvKaWfzcDCCAAQrHh7P30uYbLwgA3AwALIAAgAELNnq77nqC2sEE3AwggAELxps+Y0aSn/gE3AwALIAAgAEK3v8ue+N2SoEM3AwggAEKvuaX0x5vV+zA3AwALIQAgAEKWl7rs79nZo3Q3AwggAEKH+OXLhuPSwtQANwMACyEAIABC/O6Qyq7osdU1NwMIIABC2OvVj+a1zN2OfzcDAAshACAAQrzprN2Y1v7ui383AwggAEKk3Nqt0/nNwEU3AwALIQAgAELl6obQ6cP/7Xk3AwggAEL30OLk1cPQ6ad/NwMACyEAIABC5sHsgPKk3YtlNwMIIABChu7u8+efmIeefzcDAAshACAAQs7Is8mT6a+2pX83AwggAELt66KMv7HLkg83AwALIgAgAEKcrtGn56WAwMIANwMIIABC16rLiaf+wYLHADcDAAsiACAAQt3+weC9o+rogn83AwggAEKX2/aYrfP7zY5/NwMACyEAIABCgsDc4LCv07mnfzcDCCAAQpbk17fDtcOKAzcDAAshACAAQrvV0cb1jfDEkH83AwggAELVi9bpuKS4kXk3AwALIQAgAEKynOer2rGju98ANwMIIABCvfif/8L+hsNVNwMACyIAIABC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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAAVwAAAFYAAABgERAAWAAAAFkAAABaAAAAWwAAAFwAAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAA/wAAAFYAAAD0IhAAAAEAAFkAAAABAQAAWwAAAAIBAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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bEVuY29kaW5nSW52YWxpZENoYXJFbmNvZGluZwAAAAAAAAAEAAAABAAAAEEAAABJbnZhbGlkVGFnRW5jb2RpbmdEZXNlcmlhbGl6ZUFueU5vdFN1cHBvcnRlZFNpemVMaW1pdFNlcXVlbmNlTXVzdEhhdmVMZW5ndGgAAAAAAAQAAAAEAAAANQEAAEN1c3RvbU5vbmVTb21lUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVkAAAAAAAABAAAAAQAAAA2AQAAVG9vTWFueUJpdHNudW1fcmVxdWVzdGVkX2JpdHNsaW1pdE5vdEVub3VnaFJlbWFpbmluZ0JpdHNyZXF1ZXN0ZWRyZW1haW5pbmdBY2NMb2dJc1plcm8AAAAAAAABAAAAAQAAADcBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAA4AQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAAA5AQAARwAAAHAwEAA6AQAASQAAADsBAABKAAAAPAEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABNAAAAUmVhZEZyYW1lSGVhZGVyRXJyb3IAAAAABAAAAAQAAABOAAAARnJhbWVIZWFkZXJFcnJvcldpbmRvd1NpemVUb29CaWcAAAAABAAAAAQAAABPAAAARGljdGlvbmFyeURlY29kZUVycm9yAAAAAAAAAAQAAAAEAAAAUAAAAEZhaWxlZFRvUmVhZEJsb2NrSGVhZGVyAAAAAAAEAAAABAAAAFEAAABGYWlsZWRUb1JlYWRCbG9ja0JvZHlGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzRXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzVG9vTWFueVdlaWdodHNNaXNzaW5nV2VpZ2h0c0xlZnRvdmVySXNOb3RBUG93ZXJPZjJOb3RFbm91Z2hCeXRlc1RvRGVjb21wcmVzc1dlaWdodHNoYXZlRlNFVGFibGVVc2VkVG9vTWFueUJ5dGVzdXNlZGF2YWlsYWJsZV9ieXRlc05vdEVub3VnaEJ5dGVzSW5Tb3VyY2VXZWlnaHRCaWdnZXJUaGFuTWF4TnVtQml0c01heEJpdHNUb29IaWdoAAAAAAAAAAEAAAABAAAAVgAAAAAAAAABAAAAAQAAAD0BAABWAAAAIDQQAD4BAABZAAAAPwEAAFsAAABAAQAAVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZVplcm9PZmZzZXROb3RFbm91Z2hCeXRlc0Zvck51bVNlcXVlbmNlcwAAAAAABAAAAAQAAABdAAAARXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlAAAAQQEAAAwAAAAEAAAAXwAAAEEBAAAMAAAABAAAAEIBAABfAAAAKDUQAEMBAABiAAAAOwEAAGMAAAA8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YWxzbmVlZGVkAAAAAAAABAAAAAQAAABjAQAAQml0c3RyZWFtUmVhZE1pc21hdGNocmVhZF90aWxEZWNvZGVkTGl0ZXJhbENvdW50TWlzbWF0Y2hkZWNvZGVkAGQBAAAUAAAABAAAALQAAABkAQAAFAAAAAQAAABlAQAAtAAAAMQ8EABmAQAAtwAAADsBAAC4AAAAPAEAAAAAAAAMAAAABAAAALkAAAAAAAAADAAAAAQAAABnAQAAuQAAAAA9EAA6AQAAuwAAADsBAABKAAAAPAEAAGgBAAAYAAAABAAAAL0AAABoAQAAGAAAAAQAAABpAQAAvQAAADw9EABqAQAAwAAAADsBAADBAAAAPAEAAAAAAAAMAAAABAAAAMIAAAAAAAAADAAAAAQAAABrAQAAwgAAAHg9EABsAQAAxQAAADsBAADGAAAAPAEAAElsbGVnYWxMaXRlcmFsU2VjdGlvblR5cGVOb3RFbm91Z2hCeXRlc25lZWRfYXRfbGVhc3QDAAAAAwAAAAoAAAAIAAAA8i4QAPUuEAD4LhAAAi8QAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAAAIPhAAbQAAACoCAAARAAAAYW4gYXJyYXkgb2YgbGVuZ3RoIDQAAAAAAAAAAAEAAABtAQBBtP3AAAv1KAEAAABtAQAAAAAAAAgAAAAEAAAAbgEAAHN0cnVjdCBXbGcwSGVhZGVyIHdpdGggNyBlbGVtZW50cwAAAMw+EAAhAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogaW52YWxpZCBPbmNlIHN0YXRl+D4QADwAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvb25jZS9ub190aHJlYWRzLnJzPD8QAHwAAAA1AAAAEgAAAGZhaWxlZCB0byBmaWxsIHdob2xlIGJ1ZmZlcgDIPxAAGwAAACUAAAACAAAA5D8QAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2RpbmcvYmxvY2tfZGVjb2Rlci5yc0J1ZyBpbiB0aGlzIGxpYnJhcnkA+D8QAGwAAACYAAAAFgAAAFdyb25nIG51bWJlciBvZiBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiAAAIhAEAAaAAAAokAQABQAAAD4PxAAbAAAAK0AAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uID09IHVwcGVyX2xpbWl0X2Zvcl9saXRlcmFscyBhcyB1MzIA+D8QAGwAAACzAAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHUzMjo6ZnJvbShieXRlc19pbl9saXRlcmFsc19oZWFkZXIpICsgYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uICsKICAgICAgICAgICAgdTMyOjpmcm9tKGJ5dGVzX2luX3NlcXVlbmNlX2hlYWRlcikgKyByYXcubGVuKCkgYXMgdTMyID09CiAgICBoZWFkZXIuY29udGVudF9zaXplAAD4PxAAbAAAAMEAAAAJAAAA+D8QAGwAAAC6AAAAFwAAAPg/EABsAAAAiwAAABcAAABIb3cgZGlkIHlvdSBldmVuIGdldCB0aGlzLiBUaGUgZGVjb2RlciBzaG91bGQgZXJyb3Igb3V0IGlmIGl0IGRldGVjdHMgYSByZXNlcnZlZC10eXBlIGJsb2NrAPg/EABsAAAAcAAAABEAAABmYWlsZWQgdG8gZmlsbCB3aG9sZSBidWZmZXIAkEIQABsAAAAlAAAAAgAAAKxCEABkZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBEaXNwbGF5AAAAAAQAAAAEAAAAbwEAAAAAAAAEAAAABAAAAHABAABVdGY4RXJyb3J2YWxpZF91cF90b2Vycm9yX2xlblJhd1JMRUNvbXByZXNzZWRSZXNlcnZlZAAAAAAAAAAEAAAABAAAAEAAAABUb29NYW55Qml0c251bV9yZXF1ZXN0ZWRfYml0c2xpbWl0AAAAAAAABAAAAAQAAABBAAAATm90RW5vdWdoUmVtYWluaW5nQml0c3JlcXVlc3RlZHJlbWFpbmluZ0FjY0xvZ0lzWmVybwAAAAABAAAAAQAAAHEBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAByAQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAABzAQAARwAAALREEABKAAAASQAAAHQBAABKAAAAdQEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzAAAAAAAAAAQAAAAEAAAAVQAAAEV4dHJhUGFkZGluZ3NraXBwZWRfYml0c1Rvb01hbnlXZWlnaHRzTWlzc2luZ1dlaWdodHNMZWZ0b3ZlcklzTm90QVBvd2VyT2YyTm90RW5vdWdoQnl0ZXNUb0RlY29tcHJlc3NXZWlnaHRzaGF2ZUZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaAAAAAABAAAAAQAAAFYAAAAAAAAAAQAAAAEAAAB2AQAAVgAAACRHEABbAAAAWQAAAHcBAABbAAAAeAEAAFVuc3VwcG9ydGVkT2Zmc2V0b2Zmc2V0X2NvZGVaZXJvT2Zmc2V0Tm90RW5vdWdoQnl0ZXNGb3JOdW1TZXF1ZW5jZXMAAAAAAAQAAAAEAAAAXQAAAEV4dHJhQml0c2JpdHNfcmVtYWluaW5nTWlzc2luZ0NvbXByZXNzaW9uTW9kZU1pc3NpbmdCeXRlRm9yUmxlTGxUYWJsZU1pc3NpbmdCeXRlRm9yUmxlT2ZUYWJsZU1pc3NpbmdCeXRlRm9yUmxlTWxUYWJsZQAAAHkBAAAMAAAABAAAAF8AAAB5AQAADAAAAAQAAAB6AQAAXwAAACxIEAB7AQAAYgAAAHQBAABjAAAAdQEAAAAAAAAQAAAACAAAAGQAAAAAAAAAEAAAAAgAAAB8AQAAZAAAAGhIEAB9AQAAZwAAAH4BAABoAAAAfwEAAIABAAAYAAAABAAAAGoAAACAAQAAGAAAAAQAAACBAQAAagAAAKRIEACCAQAAbQAAAHQBAABuAAAAdQEAAIMBAAAIAAAABAAAAHAAAACDAQAACAAAAAQAAACEAQAAcAAAAOBIEACFAQAAcwAAAHQBAAB0AAAAdQEAAIYBAAAYAAAABAAAAHYAAACGAQAAGAAAAAQAAACHAQAAdgAAABxJEACIAQAAeQAAAHQBAAB6AAAAdQEAAIkBAAAIAAAABAAAACUAAACJAQAACAAAAAQAAAAmAAAAJQAAAFhJEAAnAAAAKAAAACkAAAAqAAAAdQEAAAAAAAAMAAAABAAAAHsAAAAAAAAADAAAAAQAAACKAQAAewAAAJRJEACLAQAAfgAAAHQBAAB/AAAAdQEAAIwBAAAUAAAABAAAAIEAAACMAQAAFAAAAAQAAACNAQAAgQAAANBJEACOAQAAhAAAAHQBAACFAAAAdQEAAAAAAAAEAAAABAAAAFIAAABSZWFkRXJyb3JGb3VuZFJlc2VydmVkQmxvY2sAAAAAAAQAAAAEAAAAhgAAAEJsb2NrVHlwZUVycm9yAAAAAAAABAAAAAQAAACHAAAAQmxvY2tTaXplRXJyb3JCbG9ja0NvbnRlbnRSZWFkRXJyb3JNYWxmb3JtZWRTZWN0aW9uSGVhZGVyZXhwZWN0ZWRfbGVucmVtYWluaW5nX2J5dGVzAAAAAAQAAAAEAAAAiAAAAERlY29tcHJlc3NMaXRlcmFsc0Vycm9yAAAAAAAEAAAABAAAAIkAAABMaXRlcmFsc1NlY3Rpb25QYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAigAAAFNlcXVlbmNlc0hlYWRlclBhcnNlRXJyb3IAAAAAAAAABAAAAAQAAACLAAAARGVjb2RlU2VxdWVuY2VFcnJvcgAAAAAABAAAAAQAAACMAAAARXhlY3V0ZVNlcXVlbmNlc0Vycm9ySW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnTWFnaWNOdW1iZXJSZWFkRXJyb3JCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvclNraXBGcmFtZW1hZ2ljX251bWJlcmxlbmd0aAAAAAAAAAQAAAAEAAAAjQAAAEJhZE1hZ2ljTnVtAAAAAAAEAAAABAAAAI4AAABIdWZmbWFuVGFibGVFcnJvcgAAAAAAAAAEAAAABAAAAI8AAABEZWNvZGVidWZmZXJFcnJvck5vdEVub3VnaEJ5dGVzRm9yU2VxdWVuY2V3YW50ZWQAAAAAAQAAAAEAAACQAAAAAAAAAAEAAAABAAAAjwEAAJAAAADUTBAAWwAAAJIAAAB3AQAAWwAAAHgBAAAAAAAABAAAAAQAAACTAAAAAAAAAAQAAAAEAAAAkAEAAJMAAAAQTRAASgAAAJUAAAB0AQAASgAAAHUBAACRAQAAFAAAAAQAAACXAAAAkQEAABQAAAAEAAAAkgEAAJcAAABMTRAAkwEAAJoAAAB0AQAAmwAAAHUBAAAAAAAADAAAAAQAAACcAAAAAAAAAAwAAAAEAAAAlAEAAJwAAACITRAAlQEAAJ8AAAB0AQAAoAAAAHUBAAAAAAAACAAAAAQAAAChAAAAAAAAAAgAAAAEAAAAlgEAAKEAAADETRAASgAAAKMAAAB0AQAASgAAAHUBAACXAQAAFAAAAAQAAAClAAAAlwEAABQAAAAEAAAAmAEAAKUAAAAAThAAmQEAAKgAAAB0AQAAqQAAAHUBAAAAAAAADAAAAAQAAACqAAAAAAAAAAwAAAAEAAAAmgEAAKoAAAA8ThAAmwEAAK0AAAB0AQAArgAAAHUBAABEZWNvZGVyU3RhdGVJc0ZhaWxlZEV4cGVjdGVkSGVhZGVyT2ZQcmV2aW91c0Jsb2NrAAAAAAAAAAEAAAABAAAAnAEAAHN0ZXBzb3VyY2UAAAAAAAAEAAAABAAAALAAAABEZWNvbXByZXNzQmxvY2tFcnJvck1pc3NpbmdDb21wcmVzc2VkU2l6ZU1pc3NpbmdOdW1TdHJlYW1zAAAAAAAABAAAAAQAAACxAAAASHVmZm1hbkRlY29kZXJFcnJvclVuaW5pdGlhbGl6ZWRIdWZmbWFuVGFibGVNaXNzaW5nQnl0ZXNGb3JKdW1wSGVhZGVyTWlzc2luZ0J5dGVzRm9yTGl0ZXJhbHNuZWVkZWQAAAAAAAAEAAAABAAAAJ0BAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAngEAABQAAAAEAAAAtAAAAJ4BAAAUAAAABAAAAJ8BAAC0AAAA2E8QAKABAAC3AAAAdAEAALgAAAB1AQAAAAAAAAwAAAAEAAAAuQAAAAAAAAAMAAAABAAAAKEBAAC5AAAAFFAQAEoAAAC7AAAAdAEAAEoAAAB1AQAAogEAABgAAAAEAAAAvQAAAKIBAAAYAAAABAAAAKMBAAC9AAAAUFAQAKQBAADAAAAAdAEAAMEAAAB1AQAAAAAAAAwAAAAEAAAAwgAAAAAAAAAMAAAABAAAAKUBAADCAAAAjFAQAMYAAADFAAAAdAEAAMYAAAB1AQAASWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzbmVlZF9hdF9sZWFzdAMAAAADAAAACgAAAAgAAAAlQxAAKEMQACtDEAA1QxAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9zdGQvc3JjL2lvL21vZC5ycwAAHFEQAGoAAACyAQAAMQAAAGFzc2VydGlvbiBmYWlsZWQ6IGZpbGxlZCA8PSBzZWxmLmJ1Zi5pbml0L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9jb3JlL3NyYy9pby9ib3Jyb3dlZF9idWYucnMAAADBURAAdAAAAB0BAAAJAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnNIUhAAgAAAAFgCAAAwAAAASW52YWxpZCBGcmFtZV9Db250ZW50X1NpemVfRmxhZzsgSXM6ICwgU2hvdWxkIGJlIG9uZSBvZjogMCwgMSwgMiwgMwDYUhAAJQAAAP1SEAAeAEG0psEAC8piwAMAAHdpbmRvd19zaXplIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bS4gSXM6ICwgU2hvdWxkIGJlIGxvd2VyIHRoYW46IAAAADhTEAAtAAAAZVMQABgAAAAABAAAAAAAAHdpbmRvd19zaXplIHNtYWxsZXIgdGhhbiBhbGxvd2VkIG1pbmltdW0uIElzOiAsIFNob3VsZCBiZSBncmVhdGVyIHRoYW46IJhTEAAuAAAAxlMQABoAAAABAAAAAAAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gZGljdF9pZC4gSXM6ICwgU2hvdWxkIGJlOiAAAPhTEAAhAAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQgbGVuZ3RoLiBJczogADhUEAA3AAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgd2FzIHplcm9JbnZhbGlkIGZyYW1lX2NvbnRlbnRfc2l6ZS4gSXM6ICwgU2hvdWxkIGJlIG9uZSBvZiAxLCAyLCA0LCA4IGJ5dGVzAACbVBAAIAAAALtUEAAjAAAARXJyb3Igd2hpbGUgcmVhZGluZyBtYWdpYyBudW1iZXI6IAAA8FQQACIAAABSZWFkIHdyb25nIG1hZ2ljIG51bWJlcjogMHgAHFUQABsAAABFcnJvciB3aGlsZSByZWFkaW5nIGZyYW1lIGRlc2NyaXB0b3I6IAAAQFUQACYAAABFcnJvciB3aGlsZSByZWFkaW5nIHdpbmRvdyBkZXNjcmlwdG9yOiAAcFUQACcAAABFcnJvciB3aGlsZSByZWFkaW5nIGRpY3Rpb25hcnkgaWQ6IACgVRAAIwAAAEVycm9yIHdoaWxlIHJlYWRpbmcgZnJhbWUgY29udGVudCBzaXplOiDMVRAAKAAAAFNraXBwYWJsZUZyYW1lIGVuY291bnRlcmVkIHdpdGggTWFnaWNOdW1iZXIgMHggYW5kIGxlbmd0aCAgYnl0ZXP8VRAALgAAACpWEAAMAAAANlYQAAYAAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBoZWFkZXJSZXNlcnZlZCBibG9jayBvY2N1cmVkLiBUaGlzIGlzIGNvbnNpZGVyZWQgY29ycnVwdGlvbiBieSB0aGUgZG9jdW1lbnRhdGlvbkVycm9yIGdldHRpbmcgYmxvY2sgdHlwZTogwlYQABoAAABFcnJvciBnZXR0aW5nIGJsb2NrIGNvbnRlbnQgc2l6ZTogAADkVhAAIgAAAEludmFsaWQgQmxvY2t0eXBlIG51bWJlci4gSXM6ICBTaG91bGQgYmUgb25lIG9mOiAwLCAxLCAyLCAzICgzIGlzIHJlc2VydmVkIHRob3VnaAAAABBXEAAeAAAALlcQADMAAAAAAAIAQmxvY2tzaXplIHdhcyBiaWdnZXIgdGhhbiB0aGUgYWJzb2x1dGUgbWF4aW11bSAgKDEyOGtiKS4gSXM6IAAAAHhXEAAvAAAAp1cQAA4AAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBjb250ZW50OiAAyFcQACcAAABNYWxmb3JtZWQgc2VjdGlvbiBoZWFkZXIuIFNheXMgbGl0ZXJhbHMgd291bGQgYmUgdGhpcyBsb25nOiAgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBsZWZ0APhXEAA8AAAANFgQABQAAABIWBAACwAAAENhbid0IGRlY29kZSBuZXh0IGJsb2NrIGlmIGZhaWxlZCBhbG9uZyB0aGUgd2F5LiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VDYW4ndCBkZWNvZGUgbmV4dCBibG9jayBib2R5LCB3aGlsZSBleHBlY3RpbmcgdG8gZGVjb2RlIHRoZSBoZWFkZXIgb2YgdGhlIHByZXZpb3VzIGJsb2NrLiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VFcnJvciB3aGlsZSByZWFkaW5nIGJ5dGVzIGZvciA6IAAnWRAAHgAAAEVZEAACAAAATmVlZCAgYnl0ZXMgZnJvbSB0aGUgZGljdGlvbmFyeSBidXQgaXQgaXMgb25seSAgYnl0ZXMgbG9uZwAAWFkQAAUAAABdWRAAKgAAAIdZEAALAAAAb2Zmc2V0OiAgYmlnZ2VyIHRoYW4gYnVmZmVyOiAAAACsWRAACAAAALRZEAAVAAAAQmFkIG1hZ2ljX251bSBhdCBzdGFydCBvZiB0aGUgZGljdGlvbmFyeTsgR290OiAsIEV4cGVjdGVkOiAA3FkQAC8AAAALWhAADAAAADekMOxTcGVjaWZpZWQgd2luZG93X3NpemUgaXMgdG9vIGJpZzsgUmVxdWVzdGVkOiAsIE1heDogLFoQAC0AAABZWhAABwAAAEZhaWxlZCB0byBwYXJzZS9kZWNvZGUgYmxvY2sgYm9keTogAHBaEAAjAAAARmFpbGVkIHRvIHBhcnNlIGJsb2NrIGhlYWRlcjogAACcWhAAHgAAAEZhaWxlZCB0byByZWFkIGNoZWNrc3VtOiAAAADEWhAAGQAAAERlY29kZXIgbXVzdCBpbml0aWFsaXplZCBvciByZXNldCBiZWZvcmUgdXNpbmcgaXREZWNvZGVyIGVuY291bnRlcmVkIGVycm9yIHdoaWxlIGluaXRpYWxpemluZzogABlbEAAuAAAARGVjb2RlciBlbmNvdW50ZXJlZCBlcnJvciB3aGlsZSBkcmFpbmluZyB0aGUgZGVjb2RlYnVmZmVyOiAAUFsQADsAAABGYWlsZWQgdG8gc2tpcCBieXRlcyBmb3IgdGhlIGxlbmd0aCBnaXZlbiBpbiB0aGUgZnJhbWUgaGVhZGVyVGFyZ2V0IG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGJ5dGVzIGFzIHRoZSBjb250ZW50c2l6ZSBvZiB0aGUgZnJhbWUgcmVwb3J0c0ZyYW1lIGhlYWRlciBzcGVjaWZpZWQgZGljdGlvbmFyeSBpZCAweCB0aGF0IHdhc250IHByb3ZpZGVkIGJ5IGFkZF9kaWN0KCkgb3IgcmVzZXRfd2l0aF9kaWN0KCkAACBcEAAnAAAAR1wQADcAAABjb21wcmVzc2VkIHNpemUgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzbnVtX3N0cmVhbXMgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nICgxIG9yIDQpIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzVHJpZWQgdG8gcmV1c2UgaHVmZm1hbiB0YWJsZSBidXQgaXQgd2FzIG5ldmVyIGluaXRpYWxpemVkTmVlZCA2IGJ5dGVzIHRvIGRlY29kZSBqdW1wIGhlYWRlciwgZ290IAAAfl0QACgAAAA2VhAABgAAAE5lZWQgYXQgbGVhc3QgIGJ5dGVzIHRvIGRlY29kZSBsaXRlcmFscy4gSGF2ZTogALhdEAAOAAAAxl0QACEAAAA2VhAABgAAAFBhZGRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2Vfc2VjdGlvbiB3YXMgbW9yZSB0aGFuIGEgYnl0ZSBsb25nOiAgYml0cy4gUHJvYmFibHkgY2F1c2VkIGJ5IGRhdGEgY29ycnVwdGlvbgAAXhAARgAAAEZeEAApAAAAQml0c3RyZWFtIHdhcyByZWFkIHRpbGw6ICwgc2hvdWxkIGhhdmUgYmVlbjogAAAAgF4QABkAAACZXhAAFAAAAERpZCBub3QgZGVjb2RlIGVub3VnaCBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiDAXhAAIAAAAOBeEAAUAAAAU2VxdWVuY2Ugd2FudHMgdG8gY29weSB1cCB0byBieXRlIC4gQnl0ZXMgaW4gbGl0ZXJhbHNidWZmZXI6IAAAAARfEAAiAAAAJl8QABsAAABJbGxlZ2FsIG9mZnNldDogMCBmb3VuZERvIG5vdCBzdXBwb3J0IG9mZnNldHMgYmlnZ2VyIHRoYW4gMTw8MzI7IGdvdDogAABrXxAALwAAAFJlYWQgYW4gb2Zmc2V0ID09IDAuIFRoYXQgaXMgYW4gaWxsZWdhbCB2YWx1ZSBmb3Igb2Zmc2V0c0J5dGVzdHJlYW0gZGlkIG5vdCBjb250YWluIGVub3VnaCBieXRlcyB0byBkZWNvZGUgbnVtX3NlcXVlbmNlc2NvbXByZXNzaW9uIG1vZGVzIGFyZSBub25lIGJ1dCB0aGV5IG11c3QgYmUgc2V0IHRvIHNvbWV0aGluZ05lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBsbCB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBvZiB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBtbCB0YWJsZUlsbGVnYWwgbGl0ZXJhbHNzZWN0aW9udHlwZS4gSXM6ICwgbXVzdCBiZSBpbjogMCwgMSwgMiwgMwAAAMRgEAAhAAAA5WAQABgAAABOb3QgZW5vdWdoIGJ5dGUgdG8gcGFyc2UgdGhlIGxpdGVyYWxzIHNlY3Rpb24gaGVhZGVyLiBIYXZlOiAsIE5lZWQ6IBBhEAA8AAAATGEQAAgAAABzb3VyY2UgbXVzdCBoYXZlIGF0IGxlYXN0ICBieXRlcyB0byBwYXJzZSBoZWFkZXI7IGdvdCAAAGRhEAAaAAAAfmEQABwAAAA2VhAABgAAAEFjY2xvZyBtdXN0IGJlIGF0IGxlYXN0IDFGb3VuZCBGU0UgYWNjX2xvZzogIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bSBpbiB0aGlzIGNhc2U6IADNYRAAEwAAAOBhEAArAAAAVGhlIGNvdW50ZXIgKCkgZXhjZWVkZWQgdGhlIGV4cGVjdGVkIHN1bTogLiBUaGlzIG1lYW5zIGFuIGVycm9yIG9yIGNvcnJ1cHRlZCBkYXRhIAogHGIQAA0AAAApYhAAHQAAAEZiEAAqAAAAVGhlcmUgYXJlIHRvbyBtYW55IHN5bWJvbHMgaW4gdGhpcyBkaXN0cmlidXRpb246IC4gTWF4OiAyNTYAiGIQADEAAAC5YhAACgAAAFRyaWVkIHRvIHVzZSBhbiB1bmluaXRpYWxpemVkIHRhYmxlIVNvdXJjZSBuZWVkcyB0byBoYXZlIGF0IGxlYXN0IG9uZSBieXRlSGVhZGVyIHNheXMgdGhlcmUgc2hvdWxkIGJlICBieXRlcyBmb3IgdGhlIHdlaWdodHMgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBpbiB0aGUgc3RyZWFtHmMQABwAAAA6YxAAKgAAAGRjEAAUAAAATW9yZSB0aGFuIDI1NSB3ZWlnaHRzIGRlY29kZWQgKGdvdCAgd2VpZ2h0cykuIFN0cmVhbSBpcyBwcm9iYWJseSBjb3JydXB0ZWQAAJBjEAAjAAAAs2MQACcAAABDYW4ndCBidWlsZCBodWZmbWFuIHRhYmxlIHdpdGhvdXQgYW55IHdlaWdodHNMZWZ0b3ZlciBtdXN0IGJlIHBvd2VyIG9mIHR3byBidXQgaXM6IAAZZBAAJgAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gc3RyZWFtIHRvIGRlY29tcHJlc3Mgd2VpZ2h0cy4gSXM6IAAASGQQADYAAAAZVBAADQAAAEZTRSB0YWJsZSB1c2VkIG1vcmUgYnl0ZXM6ICB0aGFuIHdlcmUgbWVhbnQgdG8gYmUgdXNlZCBmb3IgdGhlIHdob2xlIHN0cmVhbSBvZiBodWZmbWFuIHdlaWdodHMgKCkAAACQZBAAGwAAAKtkEABFAAAA8GQQAAEAAABTb3VyY2UgbmVlZHMgdG8gaGF2ZSBhdCBsZWFzdCAgYnl0ZXMsIGdvdDogAAxlEAAeAAAAKmUQAA0AAAALQ2FudCBoYXZlIHdlaWdodDogIGJpZ2dlciB0aGFuIG1heF9udW1fYml0czogAABJZRAAEgAAAFtlEAAbAAAAbWF4X2JpdHMgZGVyaXZlZCBmcm9tIHdlaWdodHMgaXM6ICBzaG91bGQgYmUgbG93ZXIgdGhhbjogAAAAiGUQACIAAACqZRAAFwAAAENhbnQgc2VydmUgdGhpcyByZXF1ZXN0LiBUaGUgcmVhZGVyIGlzIGxpbWl0ZWQgdG8gIGJpdHMsIHJlcXVlc3RlZCAgYml0c9RlEAAyAAAABmYQABEAAAAXZhAABQAAAENhbid0IHJlYWQgIGJpdHMsIG9ubHkgaGF2ZSAgYml0cyBsZWZ0AAA0ZhAACwAAAD9mEAARAAAAUGYQAAoAAAAAAAAABAAAAAQAAADJAQAAAAAAAAQAAAAEAAAAygEAAFRvb01hbnlCaXRzbnVtX3JlcXVlc3RlZF9iaXRzbGltaXQAAAAAAAAEAAAABAAAAMsBAABOb3RFbm91Z2hSZW1haW5pbmdCaXRzcmVxdWVzdGVkcmVtYWluaW5nSW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnZ290AAAAAAAABAAAAAQAAADMAQAAV2luZG93VG9vQmlnV2luZG93VG9vU21hbGwAAAAAAAAEAAAABAAAAK4BAABGcmFtZURlc2NyaXB0b3JFcnJvckRpY3RJZFRvb1NtYWxsZXhwZWN0ZWRNaXNtYXRjaGVkRnJhbWVTaXplRnJhbWVTaXplSXNaZXJvSW52YWxpZEZyYW1lU2l6ZQAAAAAEAAAABAAAAM0BAABNYWdpY051bWJlclJlYWRFcnJvcgAAAAAEAAAABAAAAM4BAABCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvcgAAAAAABAAAAAQAAADPAQAAU2tpcEZyYW1lbWFnaWNfbnVtYmVybGVuZ3RoQmxvY2tDb250ZW50UmVhZEVycm9yTWFsZm9ybWVkU2VjdGlvbkhlYWRlcmV4cGVjdGVkX2xlbnJlbWFpbmluZ19ieXRlcwAAAAAAAAAEAAAABAAAALIBAABEZWNvbXByZXNzTGl0ZXJhbHNFcnJvcgAAAAAABAAAAAQAAACzAQAATGl0ZXJhbHNTZWN0aW9uUGFyc2VFcnJvcgAAAAAAAAAEAAAABAAAALQBAABTZXF1ZW5jZXNIZWFkZXJQYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAtQEAAERlY29kZVNlcXVlbmNlRXJyb3IAAAAAAAQAAAAEAAAAtgEAAEV4ZWN1dGVTZXF1ZW5jZXNFcnJvck5vdEVub3VnaEJ5dGVzSW5EaWN0aW9uYXJ5bmVlZE9mZnNldFRvb0JpZ29mZnNldGJ1Zl9sZW4AAAAABAAAAAQAAAC4AQAAQmFkTWFnaWNOdW0AAAAAAAQAAAAEAAAAuQEAAEZTRVRhYmxlRXJyb3IAAAAAAAAABAAAAAQAAAC6AQAASHVmZm1hblRhYmxlRXJyb3JNaXNzaW5nQ29tcHJlc3NlZFNpemVNaXNzaW5nTnVtU3RyZWFtcwAAAAAABAAAAAQAAADBAQAAR2V0Qml0c0Vycm9yAAAAAAQAAAAEAAAAwgEAAEh1ZmZtYW5EZWNvZGVyRXJyb3JVbmluaXRpYWxpemVkSHVmZm1hblRhYmxlTWlzc2luZ0J5dGVzRm9ySnVtcEhlYWRlck1pc3NpbmdCeXRlc0ZvckxpdGVyYWxzbmVlZGVkAAAAAAAABAAAAAQAAADQAQAARXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzAAAAAAQAAAAEAAAA0QEAAAAAAAAEAAAABAAAANIBAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAAAAAAAQAAAAEAAAAxQEAAERlY29kZWJ1ZmZlckVycm9yTm90RW5vdWdoQnl0ZXNGb3JTZXF1ZW5jZXdhbnRlZGhhdmVaZXJvT2Zmc2V0AAAAAAAABAAAAAQAAADGAQAARlNFRGVjb2RlckVycm9yVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZU5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzRXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlSWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzAAAAAAEAAAABAAAA0wEAAG5lZWRfYXRfbGVhc3RBY2NMb2dJc1plcm9BY2NMb2dUb29CaWdtYXgAAAAABAAAAAQAAADHAQAAUHJvYmFiaWxpdHlDb3VudGVyTWlzbWF0Y2hleHBlY3RlZF9zdW1zeW1ib2xfcHJvYmFiaWxpdGllc1Rvb01hbnlTeW1ib2xzVGFibGVJc1VuaW5pdGlhbGl6ZWRTb3VyY2VJc0VtcHR5Tm90RW5vdWdoQnl0ZXNGb3JXZWlnaHRzZ290X2J5dGVzZXhwZWN0ZWRfYnl0ZXNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c0ZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAABQbhAAbQAAACoCAAARAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyX3JldmVyc2UucnMAAADQbhAAcQAAADcAAABFAAAA0G4QAHEAAAA3AAAALwAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGXQbhAAcQAAAEYAAAANAAAA0G4QAHEAAABKAAAAHgAAAFRoaXMgaXMgYSBidWcgaW4gdGhlIHByb2dyYW0uIFRoZXJlIHNob3VsZCBvbmx5IGJlIHZhbHVlcyBiZXR3ZWVuIDAuLjMvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2Jsb2Nrcy9saXRlcmFsc19zZWN0aW9uLnJzAPJvEABtAAAAewAAADQAAADybxAAbQAAAJAAAABXAAAA8m8QAG0AAACXAAAAKgAAAPJvEABtAAAAmAAAACoAAADybxAAbQAAAJsAAAAaAAAA8m8QAG0AAACoAAAAGgAAAPJvEABtAAAAtAAAAEQAAADybxAAbQAAALgAAABGAAAA8m8QAG0AAADAAAAAKgAAAPJvEABtAAAAwQAAACsAAADybxAAbQAAAMUAAABIAAAA8m8QAG0AAADNAAAAKgAAAPJvEABtAAAAzgAAACsAAADybxAAbQAAANMAAAAuAAAA8m8QAG0AAADUAAAALgAAAENhbnQgcmV0dXJuIHRoaXMgbWFueSBiaXRzL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyLnJzAGpxEABpAAAANgAAAA0AAABqcRAAaQAAAE8AAAAjAAAAYXNzZXJ0aW9uIGZhaWxlZDogbiAtIGJpdF9zaGlmdCA9PSBiaXRzX2luX2xhc3RfYnl0ZV9uZWVkZWQAanEQAGkAAABtAAAADQAAAGpxEABpAAAAcQAAAB8AAABqcRAAaQAAAGgAAAAkAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pZHggJSA4ID09IDAAanEQAGkAAABkAAAADQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaWR4ID09IG9sZF9pZHggKyBuAAAAanEQAGkAAAB3AAAACQAAAFNlcV9zdW06ICBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZGlmZmVyZW5jZSBpbiBidWZmZXJzaXplOiAAANByEAAJAAAA2XIQADEAAAAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3NlcXVlbmNlX2V4ZWN1dGlvbi5ycwAAABxzEABxAAAALwAAAAUAAAAccxAAcQAAAAsAAAAkAAAAHHMQAHEAAAAVAAAANAAAAEFsbG9jYXRpbmcgbmV3IHNwYWNlIGZvciB0aGUgcmluZ2J1ZmZlciBmYWlsZWQvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3JpbmdidWZmZXIucnMA7nMQAGkAAABhAAAAIwAAAENvdWxkIG5vdCBjcmVhdGUgbGF5b3V0IGZvciB1OCBhcnJheSBvZiBzaXplIAAAAGh0EAAtAAAA7nMQAGkAAABaAAAAIQAAAO5zEABpAAAAtAAAABUAAADucxAAaQAAAL4AAAAVAAAA7nMQAGkAAAB3AQAAHQAAAO5zEABpAAAAzgEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwDwdBAAawAAAKIAAAAZAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9saXRlcmFsc19zZWN0aW9uX2RlY29kZXIucnMAbHUQAHcAAAAUAAAAIgAAAGx1EAB3AAAAGAAAAE0AAABsdRAAdwAAADQAAAAZAAAAbHUQAHcAAAByAAAAGAAAAGx1EAB3AAAAkQAAABQAAABhc3NlcnRpb24gZmFpbGVkOiBudW1fc3RyZWFtcyA9PSAxAABsdRAAdwAAAIAAAAAJAAAAbHUQAHcAAABFAAAAGQAAAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2Rpbmcvc2VxdWVuY2Vfc2VjdGlvbl9kZWNvZGVyLnJzAHh2EAB3AAAAGAAAAB0AAAB4dhAAdwAAAHUAAAAQAAAAeHYQAHcAAADAAAAAEAAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IElsbGVnYWwgbGl0ZXJhbCBsZW5ndGggY29kZSB3YXM6IAAgdxAASwAAAHh2EAB3AAAA+gAAAA4AAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBJbGxlZ2FsIG1hdGNoIGxlbmd0aCBjb2RlIHdhczogAAAAhHcQAEkAAAB4dhAAdwAAABoBAAAOAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAD/////////////////////AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA//////////////////////////8BAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA/////////////////////////////////////3h2EAB3AAAAdgEAABwAAAB4dhAAdwAAAFMBAAAcAAAAAQEBAQICAwMEBgcICQoLDA0ODxAQAAAAEgAAABQAAAAWAAAAGAAAABwAAAAgAAAAKAAAADAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAEBAQECAgMDBAQFBwgJCgsMDQ4PEAAAACMAAAAlAAAAJwAAACkAAAArAAAALwAAADMAAAA7AAAAQwAAAFMAAABjAAAAgwAAAAMBAAADAgAAAwQAAAMIAAADEAAAAyAAAANAAAADgAAAAwABAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3R3b3gtaGFzaC0yLjEuMC9zcmMveHhoYXNoNjQucnMAAACwehAAYQAAAFQAAAAfAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9kZWNvZGVidWZmZXIucnMAJHsQAGsAAAAaAAAAHgAAACR7EABrAAAAnQAAADQAAAAkexAAawAAAOoAAAAeAAAAUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVyZAAAAAAAAAAEAAAABAAAAMoBAAAAAAAABAAAAAQAAADQAQAAYXNzZXJ0aW9uIGZhaWxlZDogeCA+IDAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2h1ZmYwL2h1ZmYwX2RlY29kZXIucnMTfBAAaQAAADEAAAAFAAAAE3wQAGkAAAA+AAAAGgAAABN8EABpAAAAUAAAACkAAAATfBAAaQAAAGgAAAAWAAAAE3wQAGkAAABqAAAAEwAAABN8EABpAAAAawAAABgAAAATfBAAaQAAAGwAAAAbAAAAE3wQAGkAAAAdAQAANgAAABN8EABpAAAAHQEAACUAAAATfBAAaQAAAB8BAAA2AAAAE3wQAGkAAAAfAQAAJQAAABN8EABpAAAA6AAAACIAAAATfBAAaQAAAPIAAAAiAAAAE3wQAGkAAAD3AAAAJgAAABN8EABpAAAA7QAAACYAAAATfBAAaQAAAFcBAAASAAAAE3wQAGkAAABfAQAAGAAAABN8EABpAAAAZQEAABUAAAATfBAAaQAAAG8BAAAbAAAAE3wQAGkAAABxAQAAGgAAABN8EABpAAAAeAEAAB4AAAByYW5rX2lkeFswXTogIHNob3VsZCBiZTogAAAAzH0QAA0AAADZfRAADAAAABN8EABpAAAAdwEAAAkAAAATfBAAaQAAAH8BAAAsAAAAE3wQAGkAAACEAQAAMQAAABN8EABpAAAAiAEAACAAAAATfBAAaQAAAIkBAAAgAAAAE3wQAGkAAABzAQAARQAAABN8EABpAAAAdAEAACEAAAATfBAAaQAAAHMBAAAeAAAAE3wQAGkAAABhAQAAGwAAABN8EABpAAAATwEAACcAAAATfBAAaQAAAFQBAAAWAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAqH4QAGsAAACiAAAAGQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzACR/EABrAAAAogAAABkAAABhc3NlcnRpb24gZmFpbGVkOiB4ID4gMC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZnNlL2ZzZV9kZWNvZGVyLnJzt38QAGUAAAA9AAAABQAAALd/EABlAAAAWgAAACcAAAC3fxAAZQAAAGUAAAAnAAAAt38QAGUAAABwAAAAIwAAALd/EABlAAAAcQAAAB0AAAC3fxAAZQAAAOIAAAApAAAAt38QAGUAAADkAAAAMQAAALd/EABlAAAA5gAAADMAAABhc3NlcnRpb24gZmFpbGVkOiBuYiA8PSBzZWxmLmFjY3VyYWN5X2xvZwAAALd/EABlAAAA6wAAAA0AAAC3fxAAZQAAANIAAAAtAAAAt38QAGUAAADAAAAALQAAALd/EABlAAAAOQEAAEEAAAC3fxAAZQAAAB4BAAAnAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHJvYiA9PSAtMbd/EABlAAAAJAEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy92ZWMvbW9kLnJzAAAARIEQAG0AAAA9CgAAJAAAAAAAAAAQAAAABAAAANQBAADVAQAA1gEAACAgICA6IAAAAQAAAAAAAADggRAAAgAAACAgICAgICAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL3B0ci9tb2QucnMA+4EQAGwAAAALAgAAAQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvc2xpY2UvaW5kZXgucnN4ghAAcAAAAEwDAAA0AAAAeIIQAHAAAABTAwAAMgAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuKS9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAAMoMQAGwAAAD7BwAAHQAAADKDEABsAAAAAwgAAB0AAAAygxAAbAAAAI0FAAAbAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5ycwAAANCDEABtAAAAKgIAABEAAADXAQAADAAAAAQAAADYAQAA2QEAANoBAADdAQAADAAAAAQAAADeAQAA3wEAANoBAEGIicIAC4UJAQAAAOABAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAMeEEABsAAAA3woAAA4AAABFcnJvcgAAAMeEEABsAAAAjQUAABsAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbinHhBAAbAAAAMAFAAANAAAAAAAAABAAAAAEAAAA1AEAANUBAADWAQAAYmFja3RyYWNlIGNhcHR1cmUgZmFpbGVkL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYW55aG93LTEuMC45OC9zcmMvZXJyb3IucnPMhRAAXAAAAGcEAAAOAAAAAQAAAAAAAAA6IAAAQIYQAAIAAAAKCkNhdXNlZCBieToKCgpzdGFjayBiYWNrdHJhY2U6U3RhY2sgYmFja3RyYWNlOgprhhAAEQAAAFMvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAACFhhAAeQAAALMHAAAJAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy43Ny9zcmMvbGliLnJzAAAQhxAAWgAAAPsYAAABAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMDAvc3JjL2NvbnZlcnQvc2xpY2VzLnJzfIcQAGwAAAAkAQAADgAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkSnNWYWx1ZSgpACqIEAAIAAAAMogQAAEAAABMYXp5IGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWQAAESIEAAqAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvb25jZV9jZWxsLTEuMjEuMy9zcmMvbGliLnJzAAAAeIgQAF0AAAAIAwAAGQAAAHJlZW50cmFudCBpbml0AADoiBAADgAAAHiIEABdAAAAegIAAA0AQZiSwgALlSMEAAAABAAAAPYBAAAvcnVzdGMvMDVmOTg0NmY4OTNiMDlhMWJlMWZjODU2MGUzM2ZjM2M4MTVjZmVjYi9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAAJIkQAEoAAACiAAAAGQAAAC9ydXN0Yy8wNWY5ODQ2Zjg5M2IwOWExYmUxZmM4NTYwZTMzZmMzYzgxNWNmZWNiL2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwCAiRAASwAAAI0FAAAbAAAAL3J1c3RjLzA1Zjk4NDZmODkzYjA5YTFiZTFmYzg1NjBlMzNmYzNjODE1Y2ZlY2IvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc9yJEABMAAAAKgIAABEAAAA6AAAA9wEAAAwAAAAEAAAA+AEAAPkBAAD6AQAAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuNy9zcmMvZGxtYWxsb2MucnNhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAFSKEAApAAAAqAQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAABUihAAKQAAAK4EAAANAAAAQWNjZXNzRXJyb3JjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uOiAAB4sQAEgAAABsaWJyYXJ5L3N0ZC9zcmMvYmFja3RyYWNlLnJzb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybXSLEAAoAAAAJAAAAAIAAACcixAAdW5zdXBwb3J0ZWQgYmFja3RyYWNlZGlzYWJsZWQgYmFja3RyYWNlAFiLEAAcAAAAigEAAB0AAAD7AQAAEAAAAAQAAAD8AQAA/QEAAAEAAAAAAAAAZW50aXR5IG5vdCBmb3VuZHBlcm1pc3Npb24gZGVuaWVkY29ubmVjdGlvbiByZWZ1c2VkY29ubmVjdGlvbiByZXNldGhvc3QgdW5yZWFjaGFibGVuZXR3b3JrIHVucmVhY2hhYmxlY29ubmVjdGlvbiBhYm9ydGVkbm90IGNvbm5lY3RlZGFkZHJlc3MgaW4gdXNlYWRkcmVzcyBub3QgYXZhaWxhYmxlbmV0d29yayBkb3duYnJva2VuIHBpcGVlbnRpdHkgYWxyZWFkeSBleGlzdHNvcGVyYXRpb24gd291bGQgYmxvY2tub3QgYSBkaXJlY3RvcnlpcyBhIGRpcmVjdG9yeWRpcmVjdG9yeSBub3QgZW1wdHlyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWZpbGVzeXN0ZW0gbG9vcCBvciBpbmRpcmVjdGlvbiBsaW1pdCAoZS5nLiBzeW1saW5rIGxvb3Apc3RhbGUgbmV0d29yayBmaWxlIGhhbmRsZWludmFsaWQgaW5wdXQgcGFyYW1ldGVyaW52YWxpZCBkYXRhdGltZWQgb3V0d3JpdGUgemVyb25vIHN0b3JhZ2Ugc3BhY2VzZWVrIG9uIHVuc2Vla2FibGUgZmlsZXF1b3RhIGV4Y2VlZGVkZmlsZSB0b28gbGFyZ2VyZXNvdXJjZSBidXN5ZXhlY3V0YWJsZSBmaWxlIGJ1c3lkZWFkbG9ja2Nyb3NzLWRldmljZSBsaW5rIG9yIHJlbmFtZXRvbyBtYW55IGxpbmtzaW52YWxpZCBmaWxlbmFtZWFyZ3VtZW50IGxpc3QgdG9vIGxvbmdvcGVyYXRpb24gaW50ZXJydXB0ZWR1bnN1cHBvcnRlZHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVvdXQgb2YgbWVtb3J5aW4gcHJvZ3Jlc3NvdGhlciBlcnJvcnVuY2F0ZWdvcml6ZWQgZXJyb3JPcwAAAAAABAAAAAQAAAD+AQAAY29kZQAAAAABAAAAAQAAAP8BAABraW5k9wEAAAwAAAAEAAAAAAIAAG1lc3NhZ2VLaW5kRXJyb3IAAAAACAAAAAQAAAABAgAAAAAAAAQAAAAEAAAAAgIAAEN1c3RvbWVycm9yIChvcyBlcnJvciApAAEAAAAAAAAAZ48QAAsAAAByjxAAAQAAADogY2Fubm90IHJlY3Vyc2l2ZWx5IGFjcXVpcmUgbXV0ZXgAAI6PEAAgAAAAbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnO4jxAALAAAABMAAAAJAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvcG9pc29uL29uY2UucnMA9I8QACMAAACbAAAAMgAAAGxpYnJhcnkvc3RkL3NyYy9zeW5jL2xhenlfbG9jay5ycwAAACiQEAAhAAAA0QAAABMAAAA8dW5rbm93bj7vv71tZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAABokBAAFQAAAH2QEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJznJAQABgAAABjAQAACQAAAAoAAAD3AQAADAAAAAQAAAADAgAAAAAAAAgAAAAEAAAABAIAAAAAAAAIAAAABAAAAAUCAAAGAgAABwIAAAgCAAAJAgAAEAAAAAQAAAAKAgAACwIAAAwCAAANAgAAbGlicmFyeS9zdGQvc3JjLy4uLy4uL2JhY2t0cmFjZS9zcmMvc3ltYm9saXplL21vZC5ycyCREAA0AAAAZwEAADAAAAABAAAAAAAAAIyPEAACAAAAIC0gAAEAAAAAAAAAdJEQAAMAAAAgICAgICAgICAgICAgICAgICAgYXQgAAA4ihAAAQAAAE5vdEZvdW5kUGVybWlzc2lvbkRlbmllZENvbm5lY3Rpb25SZWZ1c2VkQ29ubmVjdGlvblJlc2V0SG9zdFVucmVhY2hhYmxlTmV0d29ya1VucmVhY2hhYmxlQ29ubmVjdGlvbkFib3J0ZWROb3RDb25uZWN0ZWRBZGRySW5Vc2VBZGRyTm90QXZhaWxhYmxlTmV0d29ya0Rvd25Ccm9rZW5QaXBlQWxyZWFkeUV4aXN0c1dvdWxkQmxvY2tOb3RBRGlyZWN0b3J5SXNBRGlyZWN0b3J5RGlyZWN0b3J5Tm90RW1wdHlSZWFkT25seUZpbGVzeXN0ZW1GaWxlc3lzdGVtTG9vcFN0YWxlTmV0d29ya0ZpbGVIYW5kbGVJbnZhbGlkSW5wdXRJbnZhbGlkRGF0YVRpbWVkT3V0V3JpdGVaZXJvU3RvcmFnZUZ1bGxOb3RTZWVrYWJsZVF1b3RhRXhjZWVkZWRGaWxlVG9vTGFyZ2VSZXNvdXJjZUJ1c3lFeGVjdXRhYmxlRmlsZUJ1c3lEZWFkbG9ja0Nyb3NzZXNEZXZpY2VzVG9vTWFueUxpbmtzSW52YWxpZEZpbGVuYW1lQXJndW1lbnRMaXN0VG9vTG9uZ0ludGVycnVwdGVkVW5zdXBwb3J0ZWRVbmV4cGVjdGVkRW9mT3V0T2ZNZW1vcnlJblByb2dyZXNzT3RoZXJVbmNhdGVnb3JpemVkb3BlcmF0aW9uIHN1Y2Nlc3NmdWxPbmNlIGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWTakxAAKgAAAG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgcGVyZm9ybWVkIHJlY3Vyc2l2ZWx5DJQQADgAAAAQAAAAEQAA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", self.location.href);\n }\n const imports = __wbg_get_imports();\n if (typeof module_or_path === "string" || typeof Request === "function" && module_or_path instanceof Request || typeof URL === "function" && module_or_path instanceof URL) {\n module_or_path = fetch(module_or_path);\n }\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n return __wbg_finalize_init(instance, module);\n }\n const LN_SCALE_MIN = -9;\n const LN_SCALE_MAX = 9;\n const LN_RESCALE = (LN_SCALE_MAX - LN_SCALE_MIN) / 254;\n const SCALE_MIN = Math.exp(LN_SCALE_MIN);\n const SPLAT_TEX_WIDTH_BITS = 11;\n const SPLAT_TEX_HEIGHT_BITS = 11;\n const SPLAT_TEX_WIDTH = 1 << SPLAT_TEX_WIDTH_BITS;\n const SPLAT_TEX_HEIGHT = 1 << SPLAT_TEX_HEIGHT_BITS;\n const SPLAT_TEX_MIN_HEIGHT = 1;\n const WASM_SPLAT_SORT = true;\n const _PlyReader = class _PlyReader {\n // Create a PlyReader from a Uint8Array/ArrayBuffer, no parsing done yet\n constructor({ fileBytes }) {\n this.header = "";\n this.littleEndian = true;\n this.elements = {};\n this.comments = [];\n this.data = null;\n this.numSplats = 0;\n this.fileBytes = fileBytes instanceof ArrayBuffer ? new Uint8Array(fileBytes) : fileBytes;\n }\n // Identify and parse the PLY text header (assumed to be <64KB in size).\n // this.elements will contain all the elements in the file, typically\n // "vertex" contains the Gsplat data.\n async parseHeader() {\n const bufferStream = new ReadableStream({\n start: (controller) => {\n controller.enqueue(this.fileBytes.slice(0, 65536));\n controller.close();\n }\n });\n const decoder = bufferStream.pipeThrough(new TextDecoderStream()).getReader();\n this.header = "";\n const headerTerminator = "end_header\\n";\n while (true) {\n const { value, done } = await decoder.read();\n if (done) {\n throw new Error("Failed to read header");\n }\n this.header += value;\n const endHeader = this.header.indexOf(headerTerminator);\n if (endHeader >= 0) {\n this.header = this.header.slice(0, endHeader + headerTerminator.length);\n break;\n }\n }\n const headerLen = new TextEncoder().encode(this.header).length;\n this.data = new DataView(this.fileBytes.buffer, headerLen);\n this.elements = {};\n let curElement = null;\n this.comments = [];\n this.header.trim().split("\\n").forEach((line, lineIndex) => {\n const trimmedLine = line.trim();\n if (lineIndex === 0) {\n if (trimmedLine !== "ply") {\n throw new Error("Invalid PLY header");\n }\n return;\n }\n if (trimmedLine.length === 0) {\n return;\n }\n const fields = trimmedLine.split(" ");\n switch (fields[0]) {\n case "format":\n if (fields[1] === "binary_little_endian") {\n this.littleEndian = true;\n } else if (fields[1] === "binary_big_endian") {\n this.littleEndian = false;\n } else {\n throw new Error(`Unsupported PLY format: ${fields[1]}`);\n }\n if (fields[2] !== "1.0") {\n throw new Error(`Unsupported PLY version: ${fields[2]}`);\n }\n break;\n case "end_header":\n break;\n case "comment":\n this.comments.push(trimmedLine.slice("comment ".length));\n break;\n case "element": {\n const name = fields[1];\n curElement = {\n name,\n count: Number.parseInt(fields[2]),\n properties: {}\n };\n this.elements[name] = curElement;\n break;\n }\n case "property":\n if (curElement == null) {\n throw new Error("Property must be inside an element");\n }\n if (fields[1] === "list") {\n curElement.properties[fields[4]] = {\n isList: true,\n type: fields[3],\n countType: fields[2]\n };\n } else {\n curElement.properties[fields[2]] = {\n isList: false,\n type: fields[1]\n };\n }\n break;\n }\n });\n if (this.elements.vertex) {\n this.numSplats = this.elements.vertex.count;\n }\n }\n parseData(elementCallback) {\n let offset = 0;\n const data = this.data;\n if (data == null) {\n throw new Error("No data to parse");\n }\n for (const elementName in this.elements) {\n const element = this.elements[elementName];\n const { count, properties } = element;\n const item = {};\n const parsers = [];\n for (const [propertyName, property] of Object.entries(properties)) {\n if (!property.isList) {\n item[propertyName] = 0;\n parsers.push(() => {\n item[propertyName] = PARSE_FIELD[property.type](\n data,\n offset,\n this.littleEndian\n );\n offset += FIELD_BYTES[property.type];\n });\n } else {\n item[propertyName] = [];\n parsers.push(() => {\n const list = item[propertyName];\n list.length = PARSE_FIELD[property.countType](\n data,\n offset,\n this.littleEndian\n );\n offset += FIELD_BYTES[property.countType];\n for (let i2 = 0; i2 < list.length; i2++) {\n list[i2] = PARSE_FIELD[property.type](\n data,\n offset,\n this.littleEndian\n );\n offset += FIELD_BYTES[property.type];\n }\n });\n }\n }\n const callback = elementCallback(element) ?? (() => {\n });\n for (let index = 0; index < count; index++) {\n for (const parser of parsers) {\n parser();\n }\n callback(index, item);\n }\n }\n }\n // Parse all the Gsplat data in the PLY file in go, invoking the given\n // callbacks for each Gsplat.\n parseSplats(splatCallback, shCallback) {\n if (this.elements.vertex == null) {\n throw new Error("No vertex element found");\n }\n let isSuperSplat = false;\n const ssChunks = [];\n let numSh = 0;\n let sh1Props = [];\n let sh2Props = [];\n let sh3Props = [];\n let sh1 = void 0;\n let sh2 = void 0;\n let sh3 = void 0;\n function prepareSh() {\n const num_f_rest = NUM_SH_TO_NUM_F_REST[numSh];\n sh1Props = new Array(3).fill(null).flatMap(\n (_, k) => [0, 1, 2].map((_2, d) => `f_rest_${k + d * num_f_rest / 3}`)\n );\n sh2Props = new Array(5).fill(null).flatMap(\n (_, k) => [0, 1, 2].map((_2, d) => `f_rest_${3 + k + d * num_f_rest / 3}`)\n );\n sh3Props = new Array(7).fill(null).flatMap(\n (_, k) => [0, 1, 2].map((_2, d) => `f_rest_${8 + k + d * num_f_rest / 3}`)\n );\n sh1 = numSh >= 1 ? new Float32Array(3 * 3) : void 0;\n sh2 = numSh >= 2 ? new Float32Array(5 * 3) : void 0;\n sh3 = numSh >= 3 ? new Float32Array(7 * 3) : void 0;\n }\n function ssShCallback(index, item) {\n if (!sh1) {\n throw new Error("Missing sh1");\n }\n for (const [i2, key] of sh1Props.entries()) {\n sh1[i2] = item[key] * 8 / 255 - 4;\n }\n if (sh2) {\n for (const [i2, key] of sh2Props.entries()) {\n sh2[i2] = item[key] * 8 / 255 - 4;\n }\n }\n if (sh3) {\n for (const [i2, key] of sh3Props.entries()) {\n sh3[i2] = item[key] * 8 / 255 - 4;\n }\n }\n shCallback == null ? void 0 : shCallback(index, sh1, sh2, sh3);\n }\n function initSuperSplat(element) {\n const {\n min_x,\n min_y,\n min_z,\n max_x,\n max_y,\n max_z,\n min_scale_x,\n min_scale_y,\n min_scale_z,\n max_scale_x,\n max_scale_y,\n max_scale_z,\n min_r,\n min_g,\n min_b,\n max_r,\n max_g,\n max_b\n } = element.properties;\n if (!min_x || !min_y || !min_z || !max_x || !max_y || !max_z || !min_scale_x || !min_scale_y || !min_scale_z || !max_scale_x || !max_scale_y || !max_scale_z || !min_r || !min_g || !min_b || !max_r || !max_g || !max_b) {\n throw new Error("Missing PLY chunk properties");\n }\n isSuperSplat = true;\n return (index, item) => {\n const {\n min_x: min_x2,\n min_y: min_y2,\n min_z: min_z2,\n max_x: max_x2,\n max_y: max_y2,\n max_z: max_z2,\n min_scale_x: min_scale_x2,\n min_scale_y: min_scale_y2,\n min_scale_z: min_scale_z2,\n max_scale_x: max_scale_x2,\n max_scale_y: max_scale_y2,\n max_scale_z: max_scale_z2,\n min_r: min_r2,\n min_g: min_g2,\n min_b: min_b2,\n max_r: max_r2,\n max_g: max_g2,\n max_b: max_b2\n } = item;\n ssChunks.push({\n min_x: min_x2,\n min_y: min_y2,\n min_z: min_z2,\n max_x: max_x2,\n max_y: max_y2,\n max_z: max_z2,\n min_scale_x: min_scale_x2,\n min_scale_y: min_scale_y2,\n min_scale_z: min_scale_z2,\n max_scale_x: max_scale_x2,\n max_scale_y: max_scale_y2,\n max_scale_z: max_scale_z2,\n min_r: min_r2,\n min_g: min_g2,\n min_b: min_b2,\n max_r: max_r2,\n max_g: max_g2,\n max_b: max_b2\n });\n };\n }\n function decodeSuperSplat(element) {\n if (shCallback && element.name === "sh") {\n numSh = getNumSh(element.properties);\n prepareSh();\n return ssShCallback;\n }\n if (element.name !== "vertex") {\n return null;\n }\n const { packed_position, packed_rotation, packed_scale, packed_color } = element.properties;\n if (!packed_position || !packed_rotation || !packed_scale || !packed_color) {\n throw new Error(\n "Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color"\n );\n }\n const SQRT2 = Math.sqrt(2);\n return (index, item) => {\n const chunk = ssChunks[index >>> 8];\n if (chunk == null) {\n throw new Error("Missing PLY chunk");\n }\n const {\n min_x,\n min_y,\n min_z,\n max_x,\n max_y,\n max_z,\n min_scale_x,\n min_scale_y,\n min_scale_z,\n max_scale_x,\n max_scale_y,\n max_scale_z,\n min_r,\n min_g,\n min_b,\n max_r,\n max_g,\n max_b\n } = chunk;\n const { packed_position: packed_position2, packed_rotation: packed_rotation2, packed_scale: packed_scale2, packed_color: packed_color2 } = item;\n const x2 = (packed_position2 >>> 21 & 2047) / 2047 * (max_x - min_x) + min_x;\n const y = (packed_position2 >>> 11 & 1023) / 1023 * (max_y - min_y) + min_y;\n const z = (packed_position2 & 2047) / 2047 * (max_z - min_z) + min_z;\n const r0 = ((packed_rotation2 >>> 20 & 1023) / 1023 - 0.5) * SQRT2;\n const r1 = ((packed_rotation2 >>> 10 & 1023) / 1023 - 0.5) * SQRT2;\n const r2 = ((packed_rotation2 & 1023) / 1023 - 0.5) * SQRT2;\n const rr = Math.sqrt(Math.max(0, 1 - r0 * r0 - r1 * r1 - r2 * r2));\n const rOrder = packed_rotation2 >>> 30;\n const quatX = rOrder === 0 ? r0 : rOrder === 1 ? rr : r1;\n const quatY = rOrder <= 1 ? r1 : rOrder === 2 ? rr : r2;\n const quatZ = rOrder <= 2 ? r2 : rr;\n const quatW = rOrder === 0 ? rr : r0;\n const scaleX = Math.exp(\n (packed_scale2 >>> 21 & 2047) / 2047 * (max_scale_x - min_scale_x) + min_scale_x\n );\n const scaleY = Math.exp(\n (packed_scale2 >>> 11 & 1023) / 1023 * (max_scale_y - min_scale_y) + min_scale_y\n );\n const scaleZ = Math.exp(\n (packed_scale2 & 2047) / 2047 * (max_scale_z - min_scale_z) + min_scale_z\n );\n const r = (packed_color2 >>> 24 & 255) / 255 * (max_r - min_r) + min_r;\n const g = (packed_color2 >>> 16 & 255) / 255 * (max_g - min_g) + min_g;\n const b = (packed_color2 >>> 8 & 255) / 255 * (max_b - min_b) + min_b;\n const opacity = (packed_color2 & 255) / 255;\n splatCallback(\n index,\n x2,\n y,\n z,\n scaleX,\n scaleY,\n scaleZ,\n quatX,\n quatY,\n quatZ,\n quatW,\n opacity,\n r,\n g,\n b\n );\n };\n }\n const elementCallback = (element) => {\n if (element.name === "chunk") {\n if (this.comments.some(\n (comment) => comment.toLowerCase().includes("supersplat")\n )) {\n return initSuperSplat(element);\n }\n }\n if (isSuperSplat) {\n return decodeSuperSplat(element);\n }\n if (element.name !== "vertex") {\n return null;\n }\n const {\n x: x2,\n y,\n z,\n scale_0,\n scale_1,\n scale_2,\n rot_0,\n rot_1,\n rot_2,\n rot_3,\n opacity,\n f_dc_0,\n f_dc_1,\n f_dc_2,\n red,\n green,\n blue,\n alpha\n } = element.properties;\n if (!x2 || !y || !z) {\n throw new Error("Missing PLY properties: x, y, z");\n }\n const hasScales = scale_0 && scale_1 && scale_2;\n const hasRots = rot_0 && rot_1 && rot_2 && rot_3;\n const alphaDiv = alpha != null ? FIELD_SCALE[alpha.type] : 1;\n const redDiv = red != null ? FIELD_SCALE[red.type] : 1;\n const greenDiv = green != null ? FIELD_SCALE[green.type] : 1;\n const blueDiv = blue != null ? FIELD_SCALE[blue.type] : 1;\n numSh = getNumSh(element.properties);\n prepareSh();\n return (index, item) => {\n const scaleX = hasScales ? Math.exp(item.scale_0) : _PlyReader.defaultPointScale;\n const scaleY = hasScales ? Math.exp(item.scale_1) : _PlyReader.defaultPointScale;\n const scaleZ = hasScales ? Math.exp(item.scale_2) : _PlyReader.defaultPointScale;\n const quatX = hasRots ? item.rot_1 : 0;\n const quatY = hasRots ? item.rot_2 : 0;\n const quatZ = hasRots ? item.rot_3 : 0;\n const quatW = hasRots ? item.rot_0 : 1;\n const op = opacity != null ? 1 / (1 + Math.exp(-item.opacity)) : alpha != null ? item.alpha / alphaDiv : 1;\n const r = f_dc_0 != null ? item.f_dc_0 * SH_C0$1 + 0.5 : red != null ? item.red / redDiv : 1;\n const g = f_dc_1 != null ? item.f_dc_1 * SH_C0$1 + 0.5 : green != null ? item.green / greenDiv : 1;\n const b = f_dc_2 != null ? item.f_dc_2 * SH_C0$1 + 0.5 : blue != null ? item.blue / blueDiv : 1;\n splatCallback(\n index,\n item.x,\n item.y,\n item.z,\n scaleX,\n scaleY,\n scaleZ,\n quatX,\n quatY,\n quatZ,\n quatW,\n op,\n r,\n g,\n b\n );\n if (shCallback && sh1) {\n if (sh1) {\n for (const [i2, key] of sh1Props.entries()) {\n sh1[i2] = item[key];\n }\n }\n if (sh2) {\n for (const [i2, key] of sh2Props.entries()) {\n sh2[i2] = item[key];\n }\n }\n if (sh3) {\n for (const [i2, key] of sh3Props.entries()) {\n sh3[i2] = item[key];\n }\n }\n shCallback(index, sh1, sh2, sh3);\n }\n };\n };\n this.parseData(elementCallback);\n }\n // Inject RGBA values into original PLY file, which can be used to modify\n // the color/opacity of the Gsplats and write out the modified PLY file.\n injectRgba(rgba) {\n let offset = 0;\n const data = this.data;\n if (data == null) {\n throw new Error("No parsed data");\n }\n if (rgba.length !== this.numSplats * 4) {\n throw new Error("Invalid RGBA array length");\n }\n for (const elementName in this.elements) {\n const element = this.elements[elementName];\n const { count, properties } = element;\n const parsers = [];\n let rgbaOffset = 0;\n const isVertex = elementName === "vertex";\n if (isVertex) {\n for (const name of ["opacity", "f_dc_0", "f_dc_1", "f_dc_2"]) {\n if (!properties[name] || properties[name].type !== "float") {\n throw new Error(`Can\'t injectRgba due to property: ${name}`);\n }\n }\n }\n for (const [propertyName, property] of Object.entries(properties)) {\n if (!property.isList) {\n if (isVertex) {\n if (propertyName === "f_dc_0" || propertyName === "f_dc_1" || propertyName === "f_dc_2") {\n const component = Number.parseInt(\n propertyName.slice("f_dc_".length)\n );\n parsers.push(() => {\n const value = (rgba[rgbaOffset + component] / 255 - 0.5) / SH_C0$1;\n SET_FIELD[property.type](\n data,\n offset,\n this.littleEndian,\n value\n );\n });\n } else if (propertyName === "opacity") {\n parsers.push(() => {\n const value = Math.max(\n -100,\n Math.min(\n 100,\n -Math.log(1 / (rgba[rgbaOffset + 3] / 255) - 1)\n )\n );\n SET_FIELD[property.type](\n data,\n offset,\n this.littleEndian,\n value\n );\n });\n }\n }\n parsers.push(() => {\n offset += FIELD_BYTES[property.type];\n });\n } else {\n parsers.push(() => {\n const length = PARSE_FIELD[property.countType](\n data,\n offset,\n this.littleEndian\n );\n offset += FIELD_BYTES[property.countType];\n offset += length * FIELD_BYTES[property.type];\n });\n }\n }\n for (let index = 0; index < count; index++) {\n for (const parser of parsers) {\n parser();\n }\n if (isVertex) {\n rgbaOffset += 4;\n }\n }\n }\n }\n };\n _PlyReader.defaultPointScale = 1e-3;\n let PlyReader = _PlyReader;\n const SH_C0$1 = 0.28209479177387814;\n const PARSE_FIELD = {\n char: (data, offset, littleEndian) => {\n return data.getInt8(offset);\n },\n uchar: (data, offset, littleEndian) => {\n return data.getUint8(offset);\n },\n short: (data, offset, littleEndian) => {\n return data.getInt16(offset, littleEndian);\n },\n ushort: (data, offset, littleEndian) => {\n return data.getUint16(offset, littleEndian);\n },\n int: (data, offset, littleEndian) => {\n return data.getInt32(offset, littleEndian);\n },\n uint: (data, offset, littleEndian) => {\n return data.getUint32(offset, littleEndian);\n },\n float: (data, offset, littleEndian) => {\n return data.getFloat32(offset, littleEndian);\n },\n double: (data, offset, littleEndian) => {\n return data.getFloat64(offset, littleEndian);\n }\n };\n const SET_FIELD = {\n char: (data, offset, littleEndian, value) => {\n data.setInt8(offset, value);\n },\n uchar: (data, offset, littleEndian, value) => {\n data.setUint8(offset, value);\n },\n short: (data, offset, littleEndian, value) => {\n data.setInt16(offset, value, littleEndian);\n },\n ushort: (data, offset, littleEndian, value) => {\n data.setUint16(offset, value, littleEndian);\n },\n int: (data, offset, littleEndian, value) => {\n data.setInt32(offset, value, littleEndian);\n },\n uint: (data, offset, littleEndian, value) => {\n data.setUint32(offset, value, littleEndian);\n },\n float: (data, offset, littleEndian, value) => {\n data.setFloat32(offset, value, littleEndian);\n },\n double: (data, offset, littleEndian, value) => {\n data.setFloat64(offset, value, littleEndian);\n }\n };\n const FIELD_BYTES = {\n char: 1,\n uchar: 1,\n short: 2,\n ushort: 2,\n int: 4,\n uint: 4,\n float: 4,\n double: 8\n };\n const FIELD_SCALE = {\n char: 127,\n uchar: 255,\n short: 32767,\n ushort: 65535,\n int: 2147483647,\n uint: 4294967295,\n float: 1,\n double: 1\n };\n const NUM_F_REST_TO_NUM_SH = {\n 0: 0,\n 9: 1,\n 24: 2,\n 45: 3\n };\n const NUM_SH_TO_NUM_F_REST = {\n 0: 0,\n 1: 9,\n 2: 24,\n 3: 45\n };\n function getNumSh(properties) {\n let num_f_rest = 0;\n while (properties[`f_rest_${num_f_rest}`]) {\n num_f_rest += 1;\n }\n const numSh = NUM_F_REST_TO_NUM_SH[num_f_rest];\n if (numSh == null) {\n throw new Error(`Unsupported number of SH coefficients: ${num_f_rest}`);\n }\n return numSh;\n }\n var u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n var fleb = new u8([\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 2,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 4,\n 4,\n 5,\n 5,\n 5,\n 5,\n 0,\n /* unused */\n 0,\n 0,\n /* impossible */\n 0\n ]);\n var fdeb = new u8([\n 0,\n 0,\n 0,\n 0,\n 1,\n 1,\n 2,\n 2,\n 3,\n 3,\n 4,\n 4,\n 5,\n 5,\n 6,\n 6,\n 7,\n 7,\n 8,\n 8,\n 9,\n 9,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n /* unused */\n 0,\n 0\n ]);\n var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n var freb = function(eb, start) {\n var b = new u16(31);\n for (var i2 = 0; i2 < 31; ++i2) {\n b[i2] = start += 1 << eb[i2 - 1];\n }\n var r = new i32(b[30]);\n for (var i2 = 1; i2 < 30; ++i2) {\n for (var j = b[i2]; j < b[i2 + 1]; ++j) {\n r[j] = j - b[i2] << 5 | i2;\n }\n }\n return { b, r };\n };\n var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n fl[28] = 258, revfl[258] = 28;\n var _b = freb(fdeb, 0), fd = _b.b;\n var rev = new u16(32768);\n for (var i = 0; i < 32768; ++i) {\n var x = (i & 43690) >> 1 | (i & 21845) << 1;\n x = (x & 52428) >> 2 | (x & 13107) << 2;\n x = (x & 61680) >> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1;\n }\n var hMap = function(cd, mb, r) {\n var s = cd.length;\n var i2 = 0;\n var l = new u16(mb);\n for (; i2 < s; ++i2) {\n if (cd[i2])\n ++l[cd[i2] - 1];\n }\n var le = new u16(mb);\n for (i2 = 1; i2 < mb; ++i2) {\n le[i2] = le[i2 - 1] + l[i2 - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i2 = 0; i2 < s; ++i2) {\n if (cd[i2]) {\n var sv = i2 << 4 | cd[i2];\n var r_1 = mb - cd[i2];\n var v = le[cd[i2] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i2 = 0; i2 < s; ++i2) {\n if (cd[i2]) {\n co[i2] = rev[le[cd[i2] - 1]++] >> 15 - cd[i2];\n }\n }\n }\n return co;\n };\n var flt = new u8(288);\n for (var i = 0; i < 144; ++i)\n flt[i] = 8;\n for (var i = 144; i < 256; ++i)\n flt[i] = 9;\n for (var i = 256; i < 280; ++i)\n flt[i] = 7;\n for (var i = 280; i < 288; ++i)\n flt[i] = 8;\n var fdt = new u8(32);\n for (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n var flrm = /* @__PURE__ */ hMap(flt, 9, 1);\n var fdrm = /* @__PURE__ */ hMap(fdt, 5, 1);\n var max = function(a) {\n var m = a[0];\n for (var i2 = 1; i2 < a.length; ++i2) {\n if (a[i2] > m)\n m = a[i2];\n }\n return m;\n };\n var bits = function(d, p, m) {\n var o = p / 8 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n };\n var bits16 = function(d, p) {\n var o = p / 8 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n };\n var shft = function(p) {\n return (p + 7) / 8 | 0;\n };\n var slc = function(v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n return new u8(v.subarray(s, e));\n };\n var ec = [\n "unexpected EOF",\n "invalid block type",\n "invalid length/literal",\n "invalid distance",\n "stream finished",\n "no stream handler",\n ,\n "no callback",\n "invalid UTF-8 data",\n "extra field too long",\n "date not in range 1980-2099",\n "filename too long",\n "stream finishing",\n "invalid zip data"\n // determined by unknown compression method\n ];\n var err = function(ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n };\n var inflt = function(dat, st, buf, dict) {\n var sl = dat.length, dl = 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n var resize = noBuf || st.i != 2;\n var noSt = st.i;\n if (noBuf)\n buf = new u8(sl * 3);\n var cbuf = function(l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n } else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i2 = 0; i2 < hcLen; ++i2) {\n clt[clim[i2]] = bits(dat, pos + i2 * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i2 = 0; i2 < tl; ) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >> 4;\n if (s < 16) {\n ldt[i2++] = s;\n } else {\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i2 - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i2++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i2 = sym - 257, b = fleb[i2];\n add = bits(dat, pos, (1 << b) - 1) + fl[i2];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n };\n var et = /* @__PURE__ */ new u8(0);\n var gzs = function(d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, "invalid gzip data");\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n };\n var Inflate = /* @__PURE__ */ function() {\n function Inflate2(opts, cb) {\n if (typeof opts == "function")\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate2.prototype.e = function(c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate2.prototype.c = function(final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, this.s.p / 8 | 0), this.s.p &= 7;\n };\n Inflate2.prototype.push = function(chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate2;\n }();\n var Gunzip = /* @__PURE__ */ function() {\n function Gunzip2(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n Gunzip2.prototype.push = function(chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n } else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n Inflate.prototype.c.call(this, final);\n if (this.s.f && !this.s.l && !final) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n };\n return Gunzip2;\n }();\n var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder();\n var tds = 0;\n try {\n td.decode(et, { stream: true });\n tds = 1;\n } catch (e) {\n }\n /**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\n const REVISION = "172";\n const NoColorSpace = "";\n const SRGBColorSpace = "srgb";\n const LinearSRGBColorSpace = "srgb-linear";\n const LinearTransfer = "linear";\n const SRGBTransfer = "srgb";\n function clamp(value, min, max2) {\n return Math.max(min, Math.min(max2, value));\n }\n function euclideanModulo(n, m) {\n return (n % m + m) % m;\n }\n function lerp(x2, y, t) {\n return (1 - t) * x2 + t * y;\n }\n class Matrix3 {\n constructor(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\n Matrix3.prototype.isMatrix3 = true;\n this.elements = [\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 1\n ];\n if (n11 !== void 0) {\n this.set(n11, n12, n13, n21, n22, n23, n31, n32, n33);\n }\n }\n set(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\n const te = this.elements;\n te[0] = n11;\n te[1] = n21;\n te[2] = n31;\n te[3] = n12;\n te[4] = n22;\n te[5] = n32;\n te[6] = n13;\n te[7] = n23;\n te[8] = n33;\n return this;\n }\n identity() {\n this.set(\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 1\n );\n return this;\n }\n copy(m) {\n const te = this.elements;\n const me = m.elements;\n te[0] = me[0];\n te[1] = me[1];\n te[2] = me[2];\n te[3] = me[3];\n te[4] = me[4];\n te[5] = me[5];\n te[6] = me[6];\n te[7] = me[7];\n te[8] = me[8];\n return this;\n }\n extractBasis(xAxis, yAxis, zAxis) {\n xAxis.setFromMatrix3Column(this, 0);\n yAxis.setFromMatrix3Column(this, 1);\n zAxis.setFromMatrix3Column(this, 2);\n return this;\n }\n setFromMatrix4(m) {\n const me = m.elements;\n this.set(\n me[0],\n me[4],\n me[8],\n me[1],\n me[5],\n me[9],\n me[2],\n me[6],\n me[10]\n );\n return this;\n }\n multiply(m) {\n return this.multiplyMatrices(this, m);\n }\n premultiply(m) {\n return this.multiplyMatrices(m, this);\n }\n multiplyMatrices(a, b) {\n const ae = a.elements;\n const be = b.elements;\n const te = this.elements;\n const a11 = ae[0], a12 = ae[3], a13 = ae[6];\n const a21 = ae[1], a22 = ae[4], a23 = ae[7];\n const a31 = ae[2], a32 = ae[5], a33 = ae[8];\n const b11 = be[0], b12 = be[3], b13 = be[6];\n const b21 = be[1], b22 = be[4], b23 = be[7];\n const b31 = be[2], b32 = be[5], b33 = be[8];\n te[0] = a11 * b11 + a12 * b21 + a13 * b31;\n te[3] = a11 * b12 + a12 * b22 + a13 * b32;\n te[6] = a11 * b13 + a12 * b23 + a13 * b33;\n te[1] = a21 * b11 + a22 * b21 + a23 * b31;\n te[4] = a21 * b12 + a22 * b22 + a23 * b32;\n te[7] = a21 * b13 + a22 * b23 + a23 * b33;\n te[2] = a31 * b11 + a32 * b21 + a33 * b31;\n te[5] = a31 * b12 + a32 * b22 + a33 * b32;\n te[8] = a31 * b13 + a32 * b23 + a33 * b33;\n return this;\n }\n multiplyScalar(s) {\n const te = this.elements;\n te[0] *= s;\n te[3] *= s;\n te[6] *= s;\n te[1] *= s;\n te[4] *= s;\n te[7] *= s;\n te[2] *= s;\n te[5] *= s;\n te[8] *= s;\n return this;\n }\n determinant() {\n const te = this.elements;\n const a = te[0], b = te[1], c = te[2], d = te[3], e = te[4], f = te[5], g = te[6], h = te[7], i2 = te[8];\n return a * e * i2 - a * f * h - b * d * i2 + b * f * g + c * d * h - c * e * g;\n }\n invert() {\n const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n12 = te[3], n22 = te[4], n32 = te[5], n13 = te[6], n23 = te[7], n33 = te[8], t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13, det = n11 * t11 + n21 * t12 + n31 * t13;\n if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);\n const detInv = 1 / det;\n te[0] = t11 * detInv;\n te[1] = (n31 * n23 - n33 * n21) * detInv;\n te[2] = (n32 * n21 - n31 * n22) * detInv;\n te[3] = t12 * detInv;\n te[4] = (n33 * n11 - n31 * n13) * detInv;\n te[5] = (n31 * n12 - n32 * n11) * detInv;\n te[6] = t13 * detInv;\n te[7] = (n21 * n13 - n23 * n11) * detInv;\n te[8] = (n22 * n11 - n21 * n12) * detInv;\n return this;\n }\n transpose() {\n let tmp;\n const m = this.elements;\n tmp = m[1];\n m[1] = m[3];\n m[3] = tmp;\n tmp = m[2];\n m[2] = m[6];\n m[6] = tmp;\n tmp = m[5];\n m[5] = m[7];\n m[7] = tmp;\n return this;\n }\n getNormalMatrix(matrix4) {\n return this.setFromMatrix4(matrix4).invert().transpose();\n }\n transposeIntoArray(r) {\n const m = this.elements;\n r[0] = m[0];\n r[1] = m[3];\n r[2] = m[6];\n r[3] = m[1];\n r[4] = m[4];\n r[5] = m[7];\n r[6] = m[2];\n r[7] = m[5];\n r[8] = m[8];\n return this;\n }\n setUvTransform(tx, ty, sx, sy, rotation, cx, cy) {\n const c = Math.cos(rotation);\n const s = Math.sin(rotation);\n this.set(\n sx * c,\n sx * s,\n -sx * (c * cx + s * cy) + cx + tx,\n -sy * s,\n sy * c,\n -sy * (-s * cx + c * cy) + cy + ty,\n 0,\n 0,\n 1\n );\n return this;\n }\n //\n scale(sx, sy) {\n this.premultiply(_m3.makeScale(sx, sy));\n return this;\n }\n rotate(theta) {\n this.premultiply(_m3.makeRotation(-theta));\n return this;\n }\n translate(tx, ty) {\n this.premultiply(_m3.makeTranslation(tx, ty));\n return this;\n }\n // for 2D Transforms\n makeTranslation(x2, y) {\n if (x2.isVector2) {\n this.set(\n 1,\n 0,\n x2.x,\n 0,\n 1,\n x2.y,\n 0,\n 0,\n 1\n );\n } else {\n this.set(\n 1,\n 0,\n x2,\n 0,\n 1,\n y,\n 0,\n 0,\n 1\n );\n }\n return this;\n }\n makeRotation(theta) {\n const c = Math.cos(theta);\n const s = Math.sin(theta);\n this.set(\n c,\n -s,\n 0,\n s,\n c,\n 0,\n 0,\n 0,\n 1\n );\n return this;\n }\n makeScale(x2, y) {\n this.set(\n x2,\n 0,\n 0,\n 0,\n y,\n 0,\n 0,\n 0,\n 1\n );\n return this;\n }\n //\n equals(matrix) {\n const te = this.elements;\n const me = matrix.elements;\n for (let i2 = 0; i2 < 9; i2++) {\n if (te[i2] !== me[i2]) return false;\n }\n return true;\n }\n fromArray(array, offset = 0) {\n for (let i2 = 0; i2 < 9; i2++) {\n this.elements[i2] = array[i2 + offset];\n }\n return this;\n }\n toArray(array = [], offset = 0) {\n const te = this.elements;\n array[offset] = te[0];\n array[offset + 1] = te[1];\n array[offset + 2] = te[2];\n array[offset + 3] = te[3];\n array[offset + 4] = te[4];\n array[offset + 5] = te[5];\n array[offset + 6] = te[6];\n array[offset + 7] = te[7];\n array[offset + 8] = te[8];\n return array;\n }\n clone() {\n return new this.constructor().fromArray(this.elements);\n }\n }\n const _m3 = /* @__PURE__ */ new Matrix3();\n const LINEAR_REC709_TO_XYZ = /* @__PURE__ */ new Matrix3().set(\n 0.4123908,\n 0.3575843,\n 0.1804808,\n 0.212639,\n 0.7151687,\n 0.0721923,\n 0.0193308,\n 0.1191948,\n 0.9505322\n );\n const XYZ_TO_LINEAR_REC709 = /* @__PURE__ */ new Matrix3().set(\n 3.2409699,\n -1.5373832,\n -0.4986108,\n -0.9692436,\n 1.8759675,\n 0.0415551,\n 0.0556301,\n -0.203977,\n 1.0569715\n );\n function createColorManagement() {\n const ColorManagement2 = {\n enabled: true,\n workingColorSpace: LinearSRGBColorSpace,\n /**\n * Implementations of supported color spaces.\n *\n * Required:\n * - primaries: chromaticity coordinates [ rx ry gx gy bx by ]\n * - whitePoint: reference white [ x y ]\n * - transfer: transfer function (pre-defined)\n * - toXYZ: Matrix3 RGB to XYZ transform\n * - fromXYZ: Matrix3 XYZ to RGB transform\n * - luminanceCoefficients: RGB luminance coefficients\n *\n * Optional:\n * - outputColorSpaceConfig: { drawingBufferColorSpace: ColorSpace }\n * - workingColorSpaceConfig: { unpackColorSpace: ColorSpace }\n *\n * Reference:\n * - https://www.russellcottrell.com/photo/matrixCalculator.htm\n */\n spaces: {},\n convert: function(color, sourceColorSpace, targetColorSpace) {\n if (this.enabled === false || sourceColorSpace === targetColorSpace || !sourceColorSpace || !targetColorSpace) {\n return color;\n }\n if (this.spaces[sourceColorSpace].transfer === SRGBTransfer) {\n color.r = SRGBToLinear(color.r);\n color.g = SRGBToLinear(color.g);\n color.b = SRGBToLinear(color.b);\n }\n if (this.spaces[sourceColorSpace].primaries !== this.spaces[targetColorSpace].primaries) {\n color.applyMatrix3(this.spaces[sourceColorSpace].toXYZ);\n color.applyMatrix3(this.spaces[targetColorSpace].fromXYZ);\n }\n if (this.spaces[targetColorSpace].transfer === SRGBTransfer) {\n color.r = LinearToSRGB(color.r);\n color.g = LinearToSRGB(color.g);\n color.b = LinearToSRGB(color.b);\n }\n return color;\n },\n fromWorkingColorSpace: function(color, targetColorSpace) {\n return this.convert(color, this.workingColorSpace, targetColorSpace);\n },\n toWorkingColorSpace: function(color, sourceColorSpace) {\n return this.convert(color, sourceColorSpace, this.workingColorSpace);\n },\n getPrimaries: function(colorSpace) {\n return this.spaces[colorSpace].primaries;\n },\n getTransfer: function(colorSpace) {\n if (colorSpace === NoColorSpace) return LinearTransfer;\n return this.spaces[colorSpace].transfer;\n },\n getLuminanceCoefficients: function(target, colorSpace = this.workingColorSpace) {\n return target.fromArray(this.spaces[colorSpace].luminanceCoefficients);\n },\n define: function(colorSpaces) {\n Object.assign(this.spaces, colorSpaces);\n },\n // Internal APIs\n _getMatrix: function(targetMatrix, sourceColorSpace, targetColorSpace) {\n return targetMatrix.copy(this.spaces[sourceColorSpace].toXYZ).multiply(this.spaces[targetColorSpace].fromXYZ);\n },\n _getDrawingBufferColorSpace: function(colorSpace) {\n return this.spaces[colorSpace].outputColorSpaceConfig.drawingBufferColorSpace;\n },\n _getUnpackColorSpace: function(colorSpace = this.workingColorSpace) {\n return this.spaces[colorSpace].workingColorSpaceConfig.unpackColorSpace;\n }\n };\n const REC709_PRIMARIES = [0.64, 0.33, 0.3, 0.6, 0.15, 0.06];\n const REC709_LUMINANCE_COEFFICIENTS = [0.2126, 0.7152, 0.0722];\n const D65 = [0.3127, 0.329];\n ColorManagement2.define({\n [LinearSRGBColorSpace]: {\n primaries: REC709_PRIMARIES,\n whitePoint: D65,\n transfer: LinearTransfer,\n toXYZ: LINEAR_REC709_TO_XYZ,\n fromXYZ: XYZ_TO_LINEAR_REC709,\n luminanceCoefficients: REC709_LUMINANCE_COEFFICIENTS,\n workingColorSpaceConfig: { unpackColorSpace: SRGBColorSpace },\n outputColorSpaceConfig: { drawingBufferColorSpace: SRGBColorSpace }\n },\n [SRGBColorSpace]: {\n primaries: REC709_PRIMARIES,\n whitePoint: D65,\n transfer: SRGBTransfer,\n toXYZ: LINEAR_REC709_TO_XYZ,\n fromXYZ: XYZ_TO_LINEAR_REC709,\n luminanceCoefficients: REC709_LUMINANCE_COEFFICIENTS,\n outputColorSpaceConfig: { drawingBufferColorSpace: SRGBColorSpace }\n }\n });\n return ColorManagement2;\n }\n const ColorManagement = /* @__PURE__ */ createColorManagement();\n function SRGBToLinear(c) {\n return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\n }\n function LinearToSRGB(c) {\n return c < 31308e-7 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;\n }\n class Quaternion {\n constructor(x2 = 0, y = 0, z = 0, w = 1) {\n this.isQuaternion = true;\n this._x = x2;\n this._y = y;\n this._z = z;\n this._w = w;\n }\n static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) {\n let x0 = src0[srcOffset0 + 0], y0 = src0[srcOffset0 + 1], z0 = src0[srcOffset0 + 2], w0 = src0[srcOffset0 + 3];\n const x1 = src1[srcOffset1 + 0], y1 = src1[srcOffset1 + 1], z1 = src1[srcOffset1 + 2], w1 = src1[srcOffset1 + 3];\n if (t === 0) {\n dst[dstOffset + 0] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n return;\n }\n if (t === 1) {\n dst[dstOffset + 0] = x1;\n dst[dstOffset + 1] = y1;\n dst[dstOffset + 2] = z1;\n dst[dstOffset + 3] = w1;\n return;\n }\n if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {\n let s = 1 - t;\n const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, dir = cos >= 0 ? 1 : -1, sqrSin = 1 - cos * cos;\n if (sqrSin > Number.EPSILON) {\n const sin = Math.sqrt(sqrSin), len = Math.atan2(sin, cos * dir);\n s = Math.sin(s * len) / sin;\n t = Math.sin(t * len) / sin;\n }\n const tDir = t * dir;\n x0 = x0 * s + x1 * tDir;\n y0 = y0 * s + y1 * tDir;\n z0 = z0 * s + z1 * tDir;\n w0 = w0 * s + w1 * tDir;\n if (s === 1 - t) {\n const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);\n x0 *= f;\n y0 *= f;\n z0 *= f;\n w0 *= f;\n }\n }\n dst[dstOffset] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n }\n static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) {\n const x0 = src0[srcOffset0];\n const y0 = src0[srcOffset0 + 1];\n const z0 = src0[srcOffset0 + 2];\n const w0 = src0[srcOffset0 + 3];\n const x1 = src1[srcOffset1];\n const y1 = src1[srcOffset1 + 1];\n const z1 = src1[srcOffset1 + 2];\n const w1 = src1[srcOffset1 + 3];\n dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n return dst;\n }\n get x() {\n return this._x;\n }\n set x(value) {\n this._x = value;\n this._onChangeCallback();\n }\n get y() {\n return this._y;\n }\n set y(value) {\n this._y = value;\n this._onChangeCallback();\n }\n get z() {\n return this._z;\n }\n set z(value) {\n this._z = value;\n this._onChangeCallback();\n }\n get w() {\n return this._w;\n }\n set w(value) {\n this._w = value;\n this._onChangeCallback();\n }\n set(x2, y, z, w) {\n this._x = x2;\n this._y = y;\n this._z = z;\n this._w = w;\n this._onChangeCallback();\n return this;\n }\n clone() {\n return new this.constructor(this._x, this._y, this._z, this._w);\n }\n copy(quaternion) {\n this._x = quaternion.x;\n this._y = quaternion.y;\n this._z = quaternion.z;\n this._w = quaternion.w;\n this._onChangeCallback();\n return this;\n }\n setFromEuler(euler, update = true) {\n const x2 = euler._x, y = euler._y, z = euler._z, order = euler._order;\n const cos = Math.cos;\n const sin = Math.sin;\n const c1 = cos(x2 / 2);\n const c2 = cos(y / 2);\n const c3 = cos(z / 2);\n const s1 = sin(x2 / 2);\n const s2 = sin(y / 2);\n const s3 = sin(z / 2);\n switch (order) {\n case "XYZ":\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case "YXZ":\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n case "ZXY":\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case "ZYX":\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n case "YZX":\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case "XZY":\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n default:\n console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + order);\n }\n if (update === true) this._onChangeCallback();\n return this;\n }\n setFromAxisAngle(axis, angle) {\n const halfAngle = angle / 2, s = Math.sin(halfAngle);\n this._x = axis.x * s;\n this._y = axis.y * s;\n this._z = axis.z * s;\n this._w = Math.cos(halfAngle);\n this._onChangeCallback();\n return this;\n }\n setFromRotationMatrix(m) {\n const te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10], trace = m11 + m22 + m33;\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n this._w = 0.25 / s;\n this._x = (m32 - m23) * s;\n this._y = (m13 - m31) * s;\n this._z = (m21 - m12) * s;\n } else if (m11 > m22 && m11 > m33) {\n const s = 2 * Math.sqrt(1 + m11 - m22 - m33);\n this._w = (m32 - m23) / s;\n this._x = 0.25 * s;\n this._y = (m12 + m21) / s;\n this._z = (m13 + m31) / s;\n } else if (m22 > m33) {\n const s = 2 * Math.sqrt(1 + m22 - m11 - m33);\n this._w = (m13 - m31) / s;\n this._x = (m12 + m21) / s;\n this._y = 0.25 * s;\n this._z = (m23 + m32) / s;\n } else {\n const s = 2 * Math.sqrt(1 + m33 - m11 - m22);\n this._w = (m21 - m12) / s;\n this._x = (m13 + m31) / s;\n this._y = (m23 + m32) / s;\n this._z = 0.25 * s;\n }\n this._onChangeCallback();\n return this;\n }\n setFromUnitVectors(vFrom, vTo) {\n let r = vFrom.dot(vTo) + 1;\n if (r < Number.EPSILON) {\n r = 0;\n if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) {\n this._x = -vFrom.y;\n this._y = vFrom.x;\n this._z = 0;\n this._w = r;\n } else {\n this._x = 0;\n this._y = -vFrom.z;\n this._z = vFrom.y;\n this._w = r;\n }\n } else {\n this._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n this._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n this._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n this._w = r;\n }\n return this.normalize();\n }\n angleTo(q) {\n return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1)));\n }\n rotateTowards(q, step) {\n const angle = this.angleTo(q);\n if (angle === 0) return this;\n const t = Math.min(1, step / angle);\n this.slerp(q, t);\n return this;\n }\n identity() {\n return this.set(0, 0, 0, 1);\n }\n invert() {\n return this.conjugate();\n }\n conjugate() {\n this._x *= -1;\n this._y *= -1;\n this._z *= -1;\n this._onChangeCallback();\n return this;\n }\n dot(v) {\n return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n }\n lengthSq() {\n return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n }\n length() {\n return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w);\n }\n normalize() {\n let l = this.length();\n if (l === 0) {\n this._x = 0;\n this._y = 0;\n this._z = 0;\n this._w = 1;\n } else {\n l = 1 / l;\n this._x = this._x * l;\n this._y = this._y * l;\n this._z = this._z * l;\n this._w = this._w * l;\n }\n this._onChangeCallback();\n return this;\n }\n multiply(q) {\n return this.multiplyQuaternions(this, q);\n }\n premultiply(q) {\n return this.multiplyQuaternions(q, this);\n }\n multiplyQuaternions(a, b) {\n const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n this._onChangeCallback();\n return this;\n }\n slerp(qb, t) {\n if (t === 0) return this;\n if (t === 1) return this.copy(qb);\n const x2 = this._x, y = this._y, z = this._z, w = this._w;\n let cosHalfTheta = w * qb._w + x2 * qb._x + y * qb._y + z * qb._z;\n if (cosHalfTheta < 0) {\n this._w = -qb._w;\n this._x = -qb._x;\n this._y = -qb._y;\n this._z = -qb._z;\n cosHalfTheta = -cosHalfTheta;\n } else {\n this.copy(qb);\n }\n if (cosHalfTheta >= 1) {\n this._w = w;\n this._x = x2;\n this._y = y;\n this._z = z;\n return this;\n }\n const sqrSinHalfTheta = 1 - cosHalfTheta * cosHalfTheta;\n if (sqrSinHalfTheta <= Number.EPSILON) {\n const s = 1 - t;\n this._w = s * w + t * this._w;\n this._x = s * x2 + t * this._x;\n this._y = s * y + t * this._y;\n this._z = s * z + t * this._z;\n this.normalize();\n return this;\n }\n const sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\n const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\n const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta, ratioB = Math.sin(t * halfTheta) / sinHalfTheta;\n this._w = w * ratioA + this._w * ratioB;\n this._x = x2 * ratioA + this._x * ratioB;\n this._y = y * ratioA + this._y * ratioB;\n this._z = z * ratioA + this._z * ratioB;\n this._onChangeCallback();\n return this;\n }\n slerpQuaternions(qa, qb, t) {\n return this.copy(qa).slerp(qb, t);\n }\n random() {\n const theta1 = 2 * Math.PI * Math.random();\n const theta2 = 2 * Math.PI * Math.random();\n const x0 = Math.random();\n const r1 = Math.sqrt(1 - x0);\n const r2 = Math.sqrt(x0);\n return this.set(\n r1 * Math.sin(theta1),\n r1 * Math.cos(theta1),\n r2 * Math.sin(theta2),\n r2 * Math.cos(theta2)\n );\n }\n equals(quaternion) {\n return quaternion._x === this._x && quaternion._y === this._y && quaternion._z === this._z && quaternion._w === this._w;\n }\n fromArray(array, offset = 0) {\n this._x = array[offset];\n this._y = array[offset + 1];\n this._z = array[offset + 2];\n this._w = array[offset + 3];\n this._onChangeCallback();\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this._x;\n array[offset + 1] = this._y;\n array[offset + 2] = this._z;\n array[offset + 3] = this._w;\n return array;\n }\n fromBufferAttribute(attribute, index) {\n this._x = attribute.getX(index);\n this._y = attribute.getY(index);\n this._z = attribute.getZ(index);\n this._w = attribute.getW(index);\n this._onChangeCallback();\n return this;\n }\n toJSON() {\n return this.toArray();\n }\n _onChange(callback) {\n this._onChangeCallback = callback;\n return this;\n }\n _onChangeCallback() {\n }\n *[Symbol.iterator]() {\n yield this._x;\n yield this._y;\n yield this._z;\n yield this._w;\n }\n }\n class Vector3 {\n constructor(x2 = 0, y = 0, z = 0) {\n Vector3.prototype.isVector3 = true;\n this.x = x2;\n this.y = y;\n this.z = z;\n }\n set(x2, y, z) {\n if (z === void 0) z = this.z;\n this.x = x2;\n this.y = y;\n this.z = z;\n return this;\n }\n setScalar(scalar) {\n this.x = scalar;\n this.y = scalar;\n this.z = scalar;\n return this;\n }\n setX(x2) {\n this.x = x2;\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n setZ(z) {\n this.z = z;\n return this;\n }\n setComponent(index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n case 2:\n this.z = value;\n break;\n default:\n throw new Error("index is out of range: " + index);\n }\n return this;\n }\n getComponent(index) {\n switch (index) {\n case 0:\n return this.x;\n case 1:\n return this.y;\n case 2:\n return this.z;\n default:\n throw new Error("index is out of range: " + index);\n }\n }\n clone() {\n return new this.constructor(this.x, this.y, this.z);\n }\n copy(v) {\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n return this;\n }\n add(v) {\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n return this;\n }\n addScalar(s) {\n this.x += s;\n this.y += s;\n this.z += s;\n return this;\n }\n addVectors(a, b) {\n this.x = a.x + b.x;\n this.y = a.y + b.y;\n this.z = a.z + b.z;\n return this;\n }\n addScaledVector(v, s) {\n this.x += v.x * s;\n this.y += v.y * s;\n this.z += v.z * s;\n return this;\n }\n sub(v) {\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n return this;\n }\n subScalar(s) {\n this.x -= s;\n this.y -= s;\n this.z -= s;\n return this;\n }\n subVectors(a, b) {\n this.x = a.x - b.x;\n this.y = a.y - b.y;\n this.z = a.z - b.z;\n return this;\n }\n multiply(v) {\n this.x *= v.x;\n this.y *= v.y;\n this.z *= v.z;\n return this;\n }\n multiplyScalar(scalar) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n return this;\n }\n multiplyVectors(a, b) {\n this.x = a.x * b.x;\n this.y = a.y * b.y;\n this.z = a.z * b.z;\n return this;\n }\n applyEuler(euler) {\n return this.applyQuaternion(_quaternion$4.setFromEuler(euler));\n }\n applyAxisAngle(axis, angle) {\n return this.applyQuaternion(_quaternion$4.setFromAxisAngle(axis, angle));\n }\n applyMatrix3(m) {\n const x2 = this.x, y = this.y, z = this.z;\n const e = m.elements;\n this.x = e[0] * x2 + e[3] * y + e[6] * z;\n this.y = e[1] * x2 + e[4] * y + e[7] * z;\n this.z = e[2] * x2 + e[5] * y + e[8] * z;\n return this;\n }\n applyNormalMatrix(m) {\n return this.applyMatrix3(m).normalize();\n }\n applyMatrix4(m) {\n const x2 = this.x, y = this.y, z = this.z;\n const e = m.elements;\n const w = 1 / (e[3] * x2 + e[7] * y + e[11] * z + e[15]);\n this.x = (e[0] * x2 + e[4] * y + e[8] * z + e[12]) * w;\n this.y = (e[1] * x2 + e[5] * y + e[9] * z + e[13]) * w;\n this.z = (e[2] * x2 + e[6] * y + e[10] * z + e[14]) * w;\n return this;\n }\n applyQuaternion(q) {\n const vx = this.x, vy = this.y, vz = this.z;\n const qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n const tx = 2 * (qy * vz - qz * vy);\n const ty = 2 * (qz * vx - qx * vz);\n const tz = 2 * (qx * vy - qy * vx);\n this.x = vx + qw * tx + qy * tz - qz * ty;\n this.y = vy + qw * ty + qz * tx - qx * tz;\n this.z = vz + qw * tz + qx * ty - qy * tx;\n return this;\n }\n project(camera) {\n return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);\n }\n unproject(camera) {\n return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);\n }\n transformDirection(m) {\n const x2 = this.x, y = this.y, z = this.z;\n const e = m.elements;\n this.x = e[0] * x2 + e[4] * y + e[8] * z;\n this.y = e[1] * x2 + e[5] * y + e[9] * z;\n this.z = e[2] * x2 + e[6] * y + e[10] * z;\n return this.normalize();\n }\n divide(v) {\n this.x /= v.x;\n this.y /= v.y;\n this.z /= v.z;\n return this;\n }\n divideScalar(scalar) {\n return this.multiplyScalar(1 / scalar);\n }\n min(v) {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n this.z = Math.min(this.z, v.z);\n return this;\n }\n max(v) {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n this.z = Math.max(this.z, v.z);\n return this;\n }\n clamp(min, max2) {\n this.x = clamp(this.x, min.x, max2.x);\n this.y = clamp(this.y, min.y, max2.y);\n this.z = clamp(this.z, min.z, max2.z);\n return this;\n }\n clampScalar(minVal, maxVal) {\n this.x = clamp(this.x, minVal, maxVal);\n this.y = clamp(this.y, minVal, maxVal);\n this.z = clamp(this.z, minVal, maxVal);\n return this;\n }\n clampLength(min, max2) {\n const length = this.length();\n return this.divideScalar(length || 1).multiplyScalar(clamp(length, min, max2));\n }\n floor() {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n this.z = Math.floor(this.z);\n return this;\n }\n ceil() {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n this.z = Math.ceil(this.z);\n return this;\n }\n round() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n this.z = Math.round(this.z);\n return this;\n }\n roundToZero() {\n this.x = Math.trunc(this.x);\n this.y = Math.trunc(this.y);\n this.z = Math.trunc(this.z);\n return this;\n }\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n dot(v) {\n return this.x * v.x + this.y * v.y + this.z * v.z;\n }\n // TODO lengthSquared?\n lengthSq() {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n manhattanLength() {\n return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\n }\n normalize() {\n return this.divideScalar(this.length() || 1);\n }\n setLength(length) {\n return this.normalize().multiplyScalar(length);\n }\n lerp(v, alpha) {\n this.x += (v.x - this.x) * alpha;\n this.y += (v.y - this.y) * alpha;\n this.z += (v.z - this.z) * alpha;\n return this;\n }\n lerpVectors(v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n this.z = v1.z + (v2.z - v1.z) * alpha;\n return this;\n }\n cross(v) {\n return this.crossVectors(this, v);\n }\n crossVectors(a, b) {\n const ax = a.x, ay = a.y, az = a.z;\n const bx = b.x, by = b.y, bz = b.z;\n this.x = ay * bz - az * by;\n this.y = az * bx - ax * bz;\n this.z = ax * by - ay * bx;\n return this;\n }\n projectOnVector(v) {\n const denominator = v.lengthSq();\n if (denominator === 0) return this.set(0, 0, 0);\n const scalar = v.dot(this) / denominator;\n return this.copy(v).multiplyScalar(scalar);\n }\n projectOnPlane(planeNormal) {\n _vector$c.copy(this).projectOnVector(planeNormal);\n return this.sub(_vector$c);\n }\n reflect(normal) {\n return this.sub(_vector$c.copy(normal).multiplyScalar(2 * this.dot(normal)));\n }\n angleTo(v) {\n const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\n if (denominator === 0) return Math.PI / 2;\n const theta = this.dot(v) / denominator;\n return Math.acos(clamp(theta, -1, 1));\n }\n distanceTo(v) {\n return Math.sqrt(this.distanceToSquared(v));\n }\n distanceToSquared(v) {\n const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n return dx * dx + dy * dy + dz * dz;\n }\n manhattanDistanceTo(v) {\n return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);\n }\n setFromSpherical(s) {\n return this.setFromSphericalCoords(s.radius, s.phi, s.theta);\n }\n setFromSphericalCoords(radius, phi, theta) {\n const sinPhiRadius = Math.sin(phi) * radius;\n this.x = sinPhiRadius * Math.sin(theta);\n this.y = Math.cos(phi) * radius;\n this.z = sinPhiRadius * Math.cos(theta);\n return this;\n }\n setFromCylindrical(c) {\n return this.setFromCylindricalCoords(c.radius, c.theta, c.y);\n }\n setFromCylindricalCoords(radius, theta, y) {\n this.x = radius * Math.sin(theta);\n this.y = y;\n this.z = radius * Math.cos(theta);\n return this;\n }\n setFromMatrixPosition(m) {\n const e = m.elements;\n this.x = e[12];\n this.y = e[13];\n this.z = e[14];\n return this;\n }\n setFromMatrixScale(m) {\n const sx = this.setFromMatrixColumn(m, 0).length();\n const sy = this.setFromMatrixColumn(m, 1).length();\n const sz = this.setFromMatrixColumn(m, 2).length();\n this.x = sx;\n this.y = sy;\n this.z = sz;\n return this;\n }\n setFromMatrixColumn(m, index) {\n return this.fromArray(m.elements, index * 4);\n }\n setFromMatrix3Column(m, index) {\n return this.fromArray(m.elements, index * 3);\n }\n setFromEuler(e) {\n this.x = e._x;\n this.y = e._y;\n this.z = e._z;\n return this;\n }\n setFromColor(c) {\n this.x = c.r;\n this.y = c.g;\n this.z = c.b;\n return this;\n }\n equals(v) {\n return v.x === this.x && v.y === this.y && v.z === this.z;\n }\n fromArray(array, offset = 0) {\n this.x = array[offset];\n this.y = array[offset + 1];\n this.z = array[offset + 2];\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this.x;\n array[offset + 1] = this.y;\n array[offset + 2] = this.z;\n return array;\n }\n fromBufferAttribute(attribute, index) {\n this.x = attribute.getX(index);\n this.y = attribute.getY(index);\n this.z = attribute.getZ(index);\n return this;\n }\n random() {\n this.x = Math.random();\n this.y = Math.random();\n this.z = Math.random();\n return this;\n }\n randomDirection() {\n const theta = Math.random() * Math.PI * 2;\n const u = Math.random() * 2 - 1;\n const c = Math.sqrt(1 - u * u);\n this.x = c * Math.cos(theta);\n this.y = u;\n this.z = c * Math.sin(theta);\n return this;\n }\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n }\n }\n const _vector$c = /* @__PURE__ */ new Vector3();\n const _quaternion$4 = /* @__PURE__ */ new Quaternion();\n const _colorKeywords = {\n "aliceblue": 15792383,\n "antiquewhite": 16444375,\n "aqua": 65535,\n "aquamarine": 8388564,\n "azure": 15794175,\n "beige": 16119260,\n "bisque": 16770244,\n "black": 0,\n "blanchedalmond": 16772045,\n "blue": 255,\n "blueviolet": 9055202,\n "brown": 10824234,\n "burlywood": 14596231,\n "cadetblue": 6266528,\n "chartreuse": 8388352,\n "chocolate": 13789470,\n "coral": 16744272,\n "cornflowerblue": 6591981,\n "cornsilk": 16775388,\n "crimson": 14423100,\n "cyan": 65535,\n "darkblue": 139,\n "darkcyan": 35723,\n "darkgoldenrod": 12092939,\n "darkgray": 11119017,\n "darkgreen": 25600,\n "darkgrey": 11119017,\n "darkkhaki": 12433259,\n "darkmagenta": 9109643,\n "darkolivegreen": 5597999,\n "darkorange": 16747520,\n "darkorchid": 10040012,\n "darkred": 9109504,\n "darksalmon": 15308410,\n "darkseagreen": 9419919,\n "darkslateblue": 4734347,\n "darkslategray": 3100495,\n "darkslategrey": 3100495,\n "darkturquoise": 52945,\n "darkviolet": 9699539,\n "deeppink": 16716947,\n "deepskyblue": 49151,\n "dimgray": 6908265,\n "dimgrey": 6908265,\n "dodgerblue": 2003199,\n "firebrick": 11674146,\n "floralwhite": 16775920,\n "forestgreen": 2263842,\n "fuchsia": 16711935,\n "gainsboro": 14474460,\n "ghostwhite": 16316671,\n "gold": 16766720,\n "goldenrod": 14329120,\n "gray": 8421504,\n "green": 32768,\n "greenyellow": 11403055,\n "grey": 8421504,\n "honeydew": 15794160,\n "hotpink": 16738740,\n "indianred": 13458524,\n "indigo": 4915330,\n "ivory": 16777200,\n "khaki": 15787660,\n "lavender": 15132410,\n "lavenderblush": 16773365,\n "lawngreen": 8190976,\n "lemonchiffon": 16775885,\n "lightblue": 11393254,\n "lightcoral": 15761536,\n "lightcyan": 14745599,\n "lightgoldenrodyellow": 16448210,\n "lightgray": 13882323,\n "lightgreen": 9498256,\n "lightgrey": 13882323,\n "lightpink": 16758465,\n "lightsalmon": 16752762,\n "lightseagreen": 2142890,\n "lightskyblue": 8900346,\n "lightslategray": 7833753,\n "lightslategrey": 7833753,\n "lightsteelblue": 11584734,\n "lightyellow": 16777184,\n "lime": 65280,\n "limegreen": 3329330,\n "linen": 16445670,\n "magenta": 16711935,\n "maroon": 8388608,\n "mediumaquamarine": 6737322,\n "mediumblue": 205,\n "mediumorchid": 12211667,\n "mediumpurple": 9662683,\n "mediumseagreen": 3978097,\n "mediumslateblue": 8087790,\n "mediumspringgreen": 64154,\n "mediumturquoise": 4772300,\n "mediumvioletred": 13047173,\n "midnightblue": 1644912,\n "mintcream": 16121850,\n "mistyrose": 16770273,\n "moccasin": 16770229,\n "navajowhite": 16768685,\n "navy": 128,\n "oldlace": 16643558,\n "olive": 8421376,\n "olivedrab": 7048739,\n "orange": 16753920,\n "orangered": 16729344,\n "orchid": 14315734,\n "palegoldenrod": 15657130,\n "palegreen": 10025880,\n "paleturquoise": 11529966,\n "palevioletred": 14381203,\n "papayawhip": 16773077,\n "peachpuff": 16767673,\n "peru": 13468991,\n "pink": 16761035,\n "plum": 14524637,\n "powderblue": 11591910,\n "purple": 8388736,\n "rebeccapurple": 6697881,\n "red": 16711680,\n "rosybrown": 12357519,\n "royalblue": 4286945,\n "saddlebrown": 9127187,\n "salmon": 16416882,\n "sandybrown": 16032864,\n "seagreen": 3050327,\n "seashell": 16774638,\n "sienna": 10506797,\n "silver": 12632256,\n "skyblue": 8900331,\n "slateblue": 6970061,\n "slategray": 7372944,\n "slategrey": 7372944,\n "snow": 16775930,\n "springgreen": 65407,\n "steelblue": 4620980,\n "tan": 13808780,\n "teal": 32896,\n "thistle": 14204888,\n "tomato": 16737095,\n "turquoise": 4251856,\n "violet": 15631086,\n "wheat": 16113331,\n "white": 16777215,\n "whitesmoke": 16119285,\n "yellow": 16776960,\n "yellowgreen": 10145074\n };\n const _hslA = { h: 0, s: 0, l: 0 };\n const _hslB = { h: 0, s: 0, l: 0 };\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t);\n return p;\n }\n class Color {\n constructor(r, g, b) {\n this.isColor = true;\n this.r = 1;\n this.g = 1;\n this.b = 1;\n return this.set(r, g, b);\n }\n set(r, g, b) {\n if (g === void 0 && b === void 0) {\n const value = r;\n if (value && value.isColor) {\n this.copy(value);\n } else if (typeof value === "number") {\n this.setHex(value);\n } else if (typeof value === "string") {\n this.setStyle(value);\n }\n } else {\n this.setRGB(r, g, b);\n }\n return this;\n }\n setScalar(scalar) {\n this.r = scalar;\n this.g = scalar;\n this.b = scalar;\n return this;\n }\n setHex(hex, colorSpace = SRGBColorSpace) {\n hex = Math.floor(hex);\n this.r = (hex >> 16 & 255) / 255;\n this.g = (hex >> 8 & 255) / 255;\n this.b = (hex & 255) / 255;\n ColorManagement.toWorkingColorSpace(this, colorSpace);\n return this;\n }\n setRGB(r, g, b, colorSpace = ColorManagement.workingColorSpace) {\n this.r = r;\n this.g = g;\n this.b = b;\n ColorManagement.toWorkingColorSpace(this, colorSpace);\n return this;\n }\n setHSL(h, s, l, colorSpace = ColorManagement.workingColorSpace) {\n h = euclideanModulo(h, 1);\n s = clamp(s, 0, 1);\n l = clamp(l, 0, 1);\n if (s === 0) {\n this.r = this.g = this.b = l;\n } else {\n const p = l <= 0.5 ? l * (1 + s) : l + s - l * s;\n const q = 2 * l - p;\n this.r = hue2rgb(q, p, h + 1 / 3);\n this.g = hue2rgb(q, p, h);\n this.b = hue2rgb(q, p, h - 1 / 3);\n }\n ColorManagement.toWorkingColorSpace(this, colorSpace);\n return this;\n }\n setStyle(style, colorSpace = SRGBColorSpace) {\n function handleAlpha(string) {\n if (string === void 0) return;\n if (parseFloat(string) < 1) {\n console.warn("THREE.Color: Alpha component of " + style + " will be ignored.");\n }\n }\n let m;\n if (m = /^(\\w+)\\(([^\\)]*)\\)/.exec(style)) {\n let color;\n const name = m[1];\n const components = m[2];\n switch (name) {\n case "rgb":\n case "rgba":\n if (color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(components)) {\n handleAlpha(color[4]);\n return this.setRGB(\n Math.min(255, parseInt(color[1], 10)) / 255,\n Math.min(255, parseInt(color[2], 10)) / 255,\n Math.min(255, parseInt(color[3], 10)) / 255,\n colorSpace\n );\n }\n if (color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(components)) {\n handleAlpha(color[4]);\n return this.setRGB(\n Math.min(100, parseInt(color[1], 10)) / 100,\n Math.min(100, parseInt(color[2], 10)) / 100,\n Math.min(100, parseInt(color[3], 10)) / 100,\n colorSpace\n );\n }\n break;\n case "hsl":\n case "hsla":\n if (color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(components)) {\n handleAlpha(color[4]);\n return this.setHSL(\n parseFloat(color[1]) / 360,\n parseFloat(color[2]) / 100,\n parseFloat(color[3]) / 100,\n colorSpace\n );\n }\n break;\n default:\n console.warn("THREE.Color: Unknown color model " + style);\n }\n } else if (m = /^\\#([A-Fa-f\\d]+)$/.exec(style)) {\n const hex = m[1];\n const size = hex.length;\n if (size === 3) {\n return this.setRGB(\n parseInt(hex.charAt(0), 16) / 15,\n parseInt(hex.charAt(1), 16) / 15,\n parseInt(hex.charAt(2), 16) / 15,\n colorSpace\n );\n } else if (size === 6) {\n return this.setHex(parseInt(hex, 16), colorSpace);\n } else {\n console.warn("THREE.Color: Invalid hex color " + style);\n }\n } else if (style && style.length > 0) {\n return this.setColorName(style, colorSpace);\n }\n return this;\n }\n setColorName(style, colorSpace = SRGBColorSpace) {\n const hex = _colorKeywords[style.toLowerCase()];\n if (hex !== void 0) {\n this.setHex(hex, colorSpace);\n } else {\n console.warn("THREE.Color: Unknown color " + style);\n }\n return this;\n }\n clone() {\n return new this.constructor(this.r, this.g, this.b);\n }\n copy(color) {\n this.r = color.r;\n this.g = color.g;\n this.b = color.b;\n return this;\n }\n copySRGBToLinear(color) {\n this.r = SRGBToLinear(color.r);\n this.g = SRGBToLinear(color.g);\n this.b = SRGBToLinear(color.b);\n return this;\n }\n copyLinearToSRGB(color) {\n this.r = LinearToSRGB(color.r);\n this.g = LinearToSRGB(color.g);\n this.b = LinearToSRGB(color.b);\n return this;\n }\n convertSRGBToLinear() {\n this.copySRGBToLinear(this);\n return this;\n }\n convertLinearToSRGB() {\n this.copyLinearToSRGB(this);\n return this;\n }\n getHex(colorSpace = SRGBColorSpace) {\n ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace);\n return Math.round(clamp(_color.r * 255, 0, 255)) * 65536 + Math.round(clamp(_color.g * 255, 0, 255)) * 256 + Math.round(clamp(_color.b * 255, 0, 255));\n }\n getHexString(colorSpace = SRGBColorSpace) {\n return ("000000" + this.getHex(colorSpace).toString(16)).slice(-6);\n }\n getHSL(target, colorSpace = ColorManagement.workingColorSpace) {\n ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace);\n const r = _color.r, g = _color.g, b = _color.b;\n const max2 = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let hue, saturation;\n const lightness = (min + max2) / 2;\n if (min === max2) {\n hue = 0;\n saturation = 0;\n } else {\n const delta = max2 - min;\n saturation = lightness <= 0.5 ? delta / (max2 + min) : delta / (2 - max2 - min);\n switch (max2) {\n case r:\n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g:\n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n hue /= 6;\n }\n target.h = hue;\n target.s = saturation;\n target.l = lightness;\n return target;\n }\n getRGB(target, colorSpace = ColorManagement.workingColorSpace) {\n ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace);\n target.r = _color.r;\n target.g = _color.g;\n target.b = _color.b;\n return target;\n }\n getStyle(colorSpace = SRGBColorSpace) {\n ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace);\n const r = _color.r, g = _color.g, b = _color.b;\n if (colorSpace !== SRGBColorSpace) {\n return `color(${colorSpace} ${r.toFixed(3)} ${g.toFixed(3)} ${b.toFixed(3)})`;\n }\n return `rgb(${Math.round(r * 255)},${Math.round(g * 255)},${Math.round(b * 255)})`;\n }\n offsetHSL(h, s, l) {\n this.getHSL(_hslA);\n return this.setHSL(_hslA.h + h, _hslA.s + s, _hslA.l + l);\n }\n add(color) {\n this.r += color.r;\n this.g += color.g;\n this.b += color.b;\n return this;\n }\n addColors(color1, color2) {\n this.r = color1.r + color2.r;\n this.g = color1.g + color2.g;\n this.b = color1.b + color2.b;\n return this;\n }\n addScalar(s) {\n this.r += s;\n this.g += s;\n this.b += s;\n return this;\n }\n sub(color) {\n this.r = Math.max(0, this.r - color.r);\n this.g = Math.max(0, this.g - color.g);\n this.b = Math.max(0, this.b - color.b);\n return this;\n }\n multiply(color) {\n this.r *= color.r;\n this.g *= color.g;\n this.b *= color.b;\n return this;\n }\n multiplyScalar(s) {\n this.r *= s;\n this.g *= s;\n this.b *= s;\n return this;\n }\n lerp(color, alpha) {\n this.r += (color.r - this.r) * alpha;\n this.g += (color.g - this.g) * alpha;\n this.b += (color.b - this.b) * alpha;\n return this;\n }\n lerpColors(color1, color2, alpha) {\n this.r = color1.r + (color2.r - color1.r) * alpha;\n this.g = color1.g + (color2.g - color1.g) * alpha;\n this.b = color1.b + (color2.b - color1.b) * alpha;\n return this;\n }\n lerpHSL(color, alpha) {\n this.getHSL(_hslA);\n color.getHSL(_hslB);\n const h = lerp(_hslA.h, _hslB.h, alpha);\n const s = lerp(_hslA.s, _hslB.s, alpha);\n const l = lerp(_hslA.l, _hslB.l, alpha);\n this.setHSL(h, s, l);\n return this;\n }\n setFromVector3(v) {\n this.r = v.x;\n this.g = v.y;\n this.b = v.z;\n return this;\n }\n applyMatrix3(m) {\n const r = this.r, g = this.g, b = this.b;\n const e = m.elements;\n this.r = e[0] * r + e[3] * g + e[6] * b;\n this.g = e[1] * r + e[4] * g + e[7] * b;\n this.b = e[2] * r + e[5] * g + e[8] * b;\n return this;\n }\n equals(c) {\n return c.r === this.r && c.g === this.g && c.b === this.b;\n }\n fromArray(array, offset = 0) {\n this.r = array[offset];\n this.g = array[offset + 1];\n this.b = array[offset + 2];\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this.r;\n array[offset + 1] = this.g;\n array[offset + 2] = this.b;\n return array;\n }\n fromBufferAttribute(attribute, index) {\n this.r = attribute.getX(index);\n this.g = attribute.getY(index);\n this.b = attribute.getZ(index);\n return this;\n }\n toJSON() {\n return this.getHex();\n }\n *[Symbol.iterator]() {\n yield this.r;\n yield this.g;\n yield this.b;\n }\n }\n const _color = /* @__PURE__ */ new Color();\n Color.NAMES = _colorKeywords;\n if (typeof __THREE_DEVTOOLS__ !== "undefined") {\n __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { detail: {\n revision: REVISION\n } }));\n }\n if (typeof window !== "undefined") {\n if (window.__THREE__) {\n console.warn("WARNING: Multiple instances of Three.js being imported.");\n } else {\n window.__THREE__ = REVISION;\n }\n }\n function unindentLines(s) {\n var _a2;\n let seenNonEmpty = false;\n const lines = s.split("\\n").map((line) => {\n const trimmedLine = line.trimEnd();\n if (seenNonEmpty) {\n return trimmedLine;\n }\n if (trimmedLine.length > 0) {\n seenNonEmpty = true;\n return trimmedLine;\n }\n return null;\n }).filter((line) => line != null);\n while (lines.length > 0 && lines[lines.length - 1].length === 0) {\n lines.pop();\n }\n if (lines.length === 0) {\n return [];\n }\n const indent = (_a2 = lines[0].match(/^\\s*/)) == null ? void 0 : _a2[0];\n if (!indent) {\n return lines;\n }\n const regex = new RegExp(`^${indent}`);\n return lines.map((line) => line.replace(regex, ""));\n }\n function unindent(s) {\n return unindentLines(s).join("\\n");\n }\n const f32buffer = new Float32Array(1);\n const u32buffer = new Uint32Array(f32buffer.buffer);\n function toHalf(f) {\n f32buffer[0] = f;\n const bits2 = u32buffer[0];\n const sign = bits2 >> 31 & 1;\n const exp = bits2 >> 23 & 255;\n const frac = bits2 & 8388607;\n const halfSign = sign << 15;\n if (exp === 255) {\n if (frac !== 0) {\n return halfSign | 32767;\n }\n return halfSign | 31744;\n }\n const newExp = exp - 127 + 15;\n if (newExp >= 31) {\n return halfSign | 31744;\n }\n if (newExp <= 0) {\n if (newExp < -10) {\n return halfSign;\n }\n const subFrac = (frac | 8388608) >> 1 - newExp + 13;\n return halfSign | subFrac;\n }\n const halfFrac = frac >> 13;\n return halfSign | newExp << 10 | halfFrac;\n }\n function fromHalf(h) {\n const sign = h >> 15 & 1;\n const exp = h >> 10 & 31;\n const frac = h & 1023;\n let f32bits;\n if (exp === 0) {\n if (frac === 0) {\n f32bits = sign << 31;\n } else {\n let mant = frac;\n let e = -14;\n while ((mant & 1024) === 0) {\n mant <<= 1;\n e--;\n }\n mant &= 1023;\n const newExp = e + 127;\n const newFrac = mant << 13;\n f32bits = sign << 31 | newExp << 23 | newFrac;\n }\n } else if (exp === 31) {\n if (frac === 0) {\n f32bits = sign << 31 | 2139095040;\n } else {\n f32bits = sign << 31 | 2143289344;\n }\n } else {\n const newExp = exp - 15 + 127;\n const newFrac = frac << 13;\n f32bits = sign << 31 | newExp << 23 | newFrac;\n }\n u32buffer[0] = f32bits;\n return f32buffer[0];\n }\n function floatToUint8(v) {\n return Math.max(0, Math.min(255, Math.round(v * 255)));\n }\n function getArrayBuffers(ctx) {\n const buffers = [];\n const seen = /* @__PURE__ */ new Set();\n function traverse(obj) {\n if (obj && typeof obj === "object" && !seen.has(obj)) {\n seen.add(obj);\n if (obj instanceof ArrayBuffer) {\n buffers.push(obj);\n } else if (ArrayBuffer.isView(obj)) {\n buffers.push(obj.buffer);\n } else if (Array.isArray(obj)) {\n obj.forEach(traverse);\n } else {\n Object.values(obj).forEach(traverse);\n }\n }\n }\n traverse(ctx);\n return buffers;\n }\n function setPackedSplat(packedSplats, index, x2, y, z, scaleX, scaleY, scaleZ, quatX, quatY, quatZ, quatW, opacity, r, g, b) {\n const uR = floatToUint8(r);\n const uG = floatToUint8(g);\n const uB = floatToUint8(b);\n const uA = floatToUint8(opacity);\n const uQuat = encodeQuatOctXy88R8(\n new Quaternion(quatX, quatY, quatZ, quatW)\n );\n const uQuatX = uQuat & 255;\n const uQuatY = uQuat >>> 8 & 255;\n const uQuatZ = uQuat >>> 16 & 255;\n const uScaleX = scaleX === 0 ? 0 : Math.min(\n 255,\n Math.max(\n 0,\n Math.round((Math.log(scaleX) - LN_SCALE_MIN) / LN_RESCALE) + 1\n )\n );\n const uScaleY = scaleY === 0 ? 0 : Math.min(\n 255,\n Math.max(\n 0,\n Math.round((Math.log(scaleY) - LN_SCALE_MIN) / LN_RESCALE) + 1\n )\n );\n const uScaleZ = scaleZ === 0 ? 0 : Math.min(\n 255,\n Math.max(\n 0,\n Math.round((Math.log(scaleZ) - LN_SCALE_MIN) / LN_RESCALE) + 1\n )\n );\n const uCenterX = toHalf(x2);\n const uCenterY = toHalf(y);\n const uCenterZ = toHalf(z);\n const i4 = index * 4;\n packedSplats[i4] = uR | uG << 8 | uB << 16 | uA << 24;\n packedSplats[i4 + 1] = uCenterX | uCenterY << 16;\n packedSplats[i4 + 2] = uCenterZ | uQuatX << 16 | uQuatY << 24;\n packedSplats[i4 + 3] = uScaleX | uScaleY << 8 | uScaleZ << 16 | uQuatZ << 24;\n }\n function setPackedSplatCenter(packedSplats, index, x2, y, z) {\n const uCenterX = toHalf(x2);\n const uCenterY = toHalf(y);\n const uCenterZ = toHalf(z);\n const i4 = index * 4;\n packedSplats[i4 + 1] = uCenterX | uCenterY << 16;\n packedSplats[i4 + 2] = uCenterZ | packedSplats[i4 + 2] & 4294901760;\n }\n function setPackedSplatScales(packedSplats, index, scaleX, scaleY, scaleZ) {\n const uScaleX = scaleX === 0 ? 0 : Math.min(\n 255,\n Math.max(\n 0,\n Math.round((Math.log(scaleX) - LN_SCALE_MIN) / LN_RESCALE) + 1\n )\n );\n const uScaleY = scaleY === 0 ? 0 : Math.min(\n 255,\n Math.max(\n 0,\n Math.round((Math.log(scaleY) - LN_SCALE_MIN) / LN_RESCALE) + 1\n )\n );\n const uScaleZ = scaleZ === 0 ? 0 : Math.min(\n 255,\n Math.max(\n 0,\n Math.round((Math.log(scaleZ) - LN_SCALE_MIN) / LN_RESCALE) + 1\n )\n );\n const i4 = index * 4;\n packedSplats[i4 + 3] = uScaleX | uScaleY << 8 | uScaleZ << 16 | packedSplats[i4 + 3] & 4278190080;\n }\n function setPackedSplatQuat(packedSplats, index, quatX, quatY, quatZ, quatW) {\n const uQuat = encodeQuatOctXy88R8(\n new Quaternion(quatX, quatY, quatZ, quatW)\n );\n const uQuatX = uQuat & 255;\n const uQuatY = uQuat >>> 8 & 255;\n const uQuatZ = uQuat >>> 16 & 255;\n const i4 = index * 4;\n packedSplats[i4 + 2] = packedSplats[i4 + 2] & 65535 | uQuatX << 16 | uQuatY << 24;\n packedSplats[i4 + 3] = packedSplats[i4 + 3] & 16777215 | uQuatZ << 24;\n }\n function setPackedSplatRgb(packedSplats, index, r, g, b) {\n const uR = floatToUint8(r);\n const uG = floatToUint8(g);\n const uB = floatToUint8(b);\n const i4 = index * 4;\n packedSplats[i4] = uR | uG << 8 | uB << 16 | packedSplats[i4] & 4278190080;\n }\n function setPackedSplatOpacity(packedSplats, index, opacity) {\n const uA = floatToUint8(opacity);\n const i4 = index * 4;\n packedSplats[i4] = packedSplats[i4] & 16777215 | uA << 24;\n }\n new Vector3();\n new Vector3();\n new Color();\n unindent(`\n precision highp float;\n\n in vec3 position;\n\n void main() {\n gl_Position = vec4(position.xy, 0.0, 1.0);\n }\n`);\n function encodeQuatOctXy88R8(q) {\n const qnorm = q.clone().normalize();\n if (qnorm.w < 0) {\n qnorm.set(-qnorm.x, -qnorm.y, -qnorm.z, -qnorm.w);\n }\n const theta = 2 * Math.acos(qnorm.w);\n const xyz_norm = Math.sqrt(\n qnorm.x * qnorm.x + qnorm.y * qnorm.y + qnorm.z * qnorm.z\n );\n const axis = xyz_norm < 1e-6 ? new Vector3(1, 0, 0) : new Vector3(qnorm.x, qnorm.y, qnorm.z).divideScalar(xyz_norm);\n const sum = Math.abs(axis.x) + Math.abs(axis.y) + Math.abs(axis.z);\n let p_x = axis.x / sum;\n let p_y = axis.y / sum;\n if (axis.z < 0) {\n const tmp = p_x;\n p_x = (1 - Math.abs(p_y)) * (p_x >= 0 ? 1 : -1);\n p_y = (1 - Math.abs(tmp)) * (p_y >= 0 ? 1 : -1);\n }\n const u_f = p_x * 0.5 + 0.5;\n const v_f = p_y * 0.5 + 0.5;\n const quantU = Math.round(u_f * 255);\n const quantV = Math.round(v_f * 255);\n const angleInt = Math.round(theta * (255 / Math.PI));\n return angleInt << 16 | quantV << 8 | quantU;\n }\n function packSint8Bytes(b0, b1, b2, b3) {\n const clampedB0 = Math.max(-127, Math.min(127, b0 * 127));\n const clampedB1 = Math.max(-127, Math.min(127, b1 * 127));\n const clampedB2 = Math.max(-127, Math.min(127, b2 * 127));\n const clampedB3 = Math.max(-127, Math.min(127, b3 * 127));\n return clampedB0 & 255 | (clampedB1 & 255) << 8 | (clampedB2 & 255) << 16 | (clampedB3 & 255) << 24;\n }\n function encodeSh1Rgb(sh1Array, index, sh1Rgb) {\n const base = index * 2;\n for (let i2 = 0; i2 < 9; ++i2) {\n const value = Math.max(-63, Math.min(63, sh1Rgb[i2] * 63)) & 127;\n const bitStart = i2 * 7;\n const bitEnd = bitStart + 7;\n const wordStart = Math.floor(bitStart / 32);\n const bitOffset = bitStart - wordStart * 32;\n const firstWord = value << bitOffset & 4294967295;\n sh1Array[base + wordStart] |= firstWord;\n if (bitEnd > wordStart * 32 + 32) {\n const secondWord = value >>> 32 - bitOffset & 4294967295;\n sh1Array[base + wordStart + 1] |= secondWord;\n }\n }\n }\n function encodeSh2Rgb(sh2Array, index, sh2Rgb) {\n sh2Array[index * 4 + 0] = packSint8Bytes(\n sh2Rgb[0],\n sh2Rgb[1],\n sh2Rgb[2],\n sh2Rgb[3]\n );\n sh2Array[index * 4 + 1] = packSint8Bytes(\n sh2Rgb[4],\n sh2Rgb[5],\n sh2Rgb[6],\n sh2Rgb[7]\n );\n sh2Array[index * 4 + 2] = packSint8Bytes(\n sh2Rgb[8],\n sh2Rgb[9],\n sh2Rgb[10],\n sh2Rgb[11]\n );\n sh2Array[index * 4 + 3] = packSint8Bytes(\n sh2Rgb[12],\n sh2Rgb[13],\n sh2Rgb[14],\n 0\n );\n }\n function encodeSh3Rgb(sh3Array, index, sh3Rgb) {\n const base = index * 4;\n for (let i2 = 0; i2 < 21; ++i2) {\n const value = Math.max(-31, Math.min(31, sh3Rgb[i2] * 31)) & 63;\n const bitStart = i2 * 6;\n const bitEnd = bitStart + 6;\n const wordStart = Math.floor(bitStart / 32);\n const bitOffset = bitStart - wordStart * 32;\n const firstWord = value << bitOffset & 4294967295;\n sh3Array[base + wordStart] |= firstWord;\n if (bitEnd > wordStart * 32 + 32) {\n const secondWord = value >>> 32 - bitOffset & 4294967295;\n sh3Array[base + wordStart + 1] |= secondWord;\n }\n }\n }\n class GunzipReader {\n constructor({\n fileBytes,\n chunkBytes = 64 * 1024\n }) {\n this.fileBytes = fileBytes;\n this.chunkBytes = chunkBytes;\n this.offset = 0;\n this.chunks = [];\n this.totalBytes = 0;\n this.gunzip = new Gunzip((chunk, _final) => {\n this.chunks.push(chunk);\n this.totalBytes += chunk.length;\n });\n }\n read(numBytes) {\n while (this.totalBytes < numBytes && this.offset < this.fileBytes.length) {\n const end = Math.min(\n this.offset + this.chunkBytes,\n this.fileBytes.length\n );\n this.gunzip.push(this.fileBytes.subarray(this.offset, end), false);\n this.offset = end;\n }\n if (this.totalBytes < numBytes && this.offset >= this.fileBytes.length) {\n this.gunzip.push(new Uint8Array(0), true);\n }\n if (this.totalBytes < numBytes) {\n throw new Error(\n `Unexpected EOF: needed ${numBytes}, got ${this.totalBytes}`\n );\n }\n const allBytes = new Uint8Array(this.totalBytes);\n let outOffset = 0;\n for (const chunk of this.chunks) {\n allBytes.set(chunk, outOffset);\n outOffset += chunk.length;\n }\n const result = allBytes.subarray(0, numBytes);\n this.chunks = [allBytes.subarray(numBytes)];\n this.totalBytes -= numBytes;\n return result;\n }\n }\n class SpzReader {\n constructor({ fileBytes }) {\n this.fileBytes = fileBytes instanceof ArrayBuffer ? new Uint8Array(fileBytes) : fileBytes;\n this.reader = new GunzipReader({ fileBytes: this.fileBytes });\n const header = new DataView(this.reader.read(16).buffer);\n if (header.getUint32(0, true) !== 1347635022) {\n throw new Error("Invalid SPZ file");\n }\n this.version = header.getUint32(4, true);\n if (this.version < 1 || this.version > 2) {\n throw new Error(`Unsupported SPZ version: ${this.version}`);\n }\n this.numSplats = header.getUint32(8, true);\n this.shDegree = header.getUint8(12);\n this.fractionalBits = header.getUint8(13);\n this.flags = header.getUint8(14);\n this.flagAntiAlias = (this.flags & 1) !== 0;\n this.reserved = header.getUint8(15);\n this.parsed = false;\n }\n parseSplats(centerCallback, alphaCallback, rgbCallback, scalesCallback, quatCallback, shCallback) {\n if (this.parsed) {\n throw new Error("SPZ file already parsed");\n }\n this.parsed = true;\n if (this.version === 1) {\n const centerBytes = this.reader.read(this.numSplats * 3 * 2);\n const centerUint16 = new Uint16Array(centerBytes.buffer);\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n const i3 = i2 * 3;\n const x2 = fromHalf(centerUint16[i3]);\n const y = fromHalf(centerUint16[i3 + 1]);\n const z = fromHalf(centerUint16[i3 + 2]);\n centerCallback(i2, x2, y, z);\n }\n } else if (this.version === 2) {\n const fixed = 1 << this.fractionalBits;\n const centerBytes = this.reader.read(this.numSplats * 3 * 3);\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n const i9 = i2 * 9;\n const x2 = ((centerBytes[i9 + 2] << 24 | centerBytes[i9 + 1] << 16 | centerBytes[i9] << 8) >> 8) / fixed;\n const y = ((centerBytes[i9 + 5] << 24 | centerBytes[i9 + 4] << 16 | centerBytes[i9 + 3] << 8) >> 8) / fixed;\n const z = ((centerBytes[i9 + 8] << 24 | centerBytes[i9 + 7] << 16 | centerBytes[i9 + 6] << 8) >> 8) / fixed;\n centerCallback(i2, x2, y, z);\n }\n } else {\n throw new Error("Unreachable");\n }\n {\n const bytes = this.reader.read(this.numSplats);\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n alphaCallback(i2, bytes[i2] / 255);\n }\n }\n {\n const rgbBytes = this.reader.read(this.numSplats * 3);\n const scale = SH_C0 / 0.15;\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n const i3 = i2 * 3;\n const r = (rgbBytes[i3] / 255 - 0.5) * scale + 0.5;\n const g = (rgbBytes[i3 + 1] / 255 - 0.5) * scale + 0.5;\n const b = (rgbBytes[i3 + 2] / 255 - 0.5) * scale + 0.5;\n rgbCallback(i2, r, g, b);\n }\n }\n {\n const scalesBytes = this.reader.read(this.numSplats * 3);\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n const i3 = i2 * 3;\n const scaleX = Math.exp(scalesBytes[i3] / 16 - 10);\n const scaleY = Math.exp(scalesBytes[i3 + 1] / 16 - 10);\n const scaleZ = Math.exp(scalesBytes[i3 + 2] / 16 - 10);\n scalesCallback(i2, scaleX, scaleY, scaleZ);\n }\n }\n {\n const quatBytes = this.reader.read(this.numSplats * 3);\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n const i3 = i2 * 3;\n const quatX = quatBytes[i3] / 127.5 - 1;\n const quatY = quatBytes[i3 + 1] / 127.5 - 1;\n const quatZ = quatBytes[i3 + 2] / 127.5 - 1;\n const quatW = Math.sqrt(\n Math.max(0, 1 - quatX * quatX - quatY * quatY - quatZ * quatZ)\n );\n quatCallback(i2, quatX, quatY, quatZ, quatW);\n }\n }\n if (shCallback && this.shDegree >= 1) {\n const sh1 = new Float32Array(3 * 3);\n const sh2 = this.shDegree >= 2 ? new Float32Array(5 * 3) : void 0;\n const sh3 = this.shDegree >= 3 ? new Float32Array(7 * 3) : void 0;\n const shBytes = this.reader.read(\n this.numSplats * SH_DEGREE_TO_VECS[this.shDegree] * 3\n );\n let offset = 0;\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n for (let j = 0; j < 9; ++j) {\n sh1[j] = (shBytes[offset + j] - 128) / 128;\n }\n offset += 9;\n if (sh2) {\n for (let j = 0; j < 15; ++j) {\n sh2[j] = (shBytes[offset + j] - 128) / 128;\n }\n offset += 15;\n }\n if (sh3) {\n for (let j = 0; j < 21; ++j) {\n sh3[j] = (shBytes[offset + j] - 128) / 128;\n }\n offset += 21;\n }\n shCallback(i2, sh1, sh2, sh3);\n }\n }\n }\n }\n const SH_DEGREE_TO_VECS = { 1: 3, 2: 8, 3: 15 };\n const SH_C0 = 0.28209479177387814;\n async function onMessage(event) {\n const { name, args, id } = event.data;\n let result = void 0;\n let error = void 0;\n try {\n switch (name) {\n case "unpackPly": {\n const { packedArray, fileBytes } = args;\n const decoded = await unpackPly({ packedArray, fileBytes });\n result = {\n id,\n numSplats: decoded.numSplats,\n packedArray: decoded.packedArray,\n extra: decoded.extra\n };\n break;\n }\n case "decodeWlg": {\n const { fileBytes } = args;\n const decoded = decode_wlg(\n fileBytes,\n SPLAT_TEX_WIDTH,\n SPLAT_TEX_HEIGHT\n );\n result = {\n id,\n numSplats: decoded.numSplats,\n packedArray: decoded.packedSplats\n };\n break;\n }\n case "decodeSpz": {\n const { fileBytes } = args;\n const decoded = unpackSpz(fileBytes);\n result = {\n id,\n numSplats: decoded.numSplats,\n packedArray: decoded.packedArray,\n extra: decoded.extra\n };\n break;\n }\n case "decodeAntiSplat": {\n const { fileBytes } = args;\n const decoded = unpackAntiSplat(fileBytes);\n result = {\n id,\n numSplats: decoded.numSplats,\n packedArray: decoded.packedArray\n };\n break;\n }\n case "decodeKsplat": {\n const { fileBytes } = args;\n const decoded = unpackKsplat(fileBytes);\n result = {\n id,\n numSplats: decoded.numSplats,\n packedArray: decoded.packedArray,\n extra: decoded.extra\n };\n break;\n }\n case "sortSplats": {\n const { maxSplats, totalSplats, readback, ordering } = args;\n if (WASM_SPLAT_SORT) {\n result = {\n id,\n readback,\n ordering,\n activeSplats: old_sort_splats(\n maxSplats,\n totalSplats,\n readback,\n ordering\n )\n };\n }\n break;\n }\n case "sortDoubleSplats": {\n const { numSplats, readback, ordering } = args;\n result = {\n id,\n readback,\n ordering\n };\n if (WASM_SPLAT_SORT) {\n result = {\n id,\n readback,\n ordering,\n activeSplats: sort_splats(numSplats, readback, ordering)\n };\n }\n break;\n }\n default: {\n throw new Error(`Unknown name: ${name}`);\n }\n }\n } catch (e) {\n error = e;\n }\n self.postMessage(\n { id, result, error },\n { transfer: getArrayBuffers(result) }\n );\n }\n async function unpackPly({\n packedArray,\n fileBytes\n }) {\n const ply = new PlyReader({ fileBytes });\n await ply.parseHeader();\n const numSplats = ply.numSplats;\n const extra = {};\n const ZERO_CUTOFF = Math.exp(-20);\n ply.parseSplats(\n (index, x2, y, z, scaleX, scaleY, scaleZ, quatX, quatY, quatZ, quatW, opacity, r, g, b) => {\n setPackedSplat(\n packedArray,\n index,\n x2,\n y,\n z,\n scaleX < ZERO_CUTOFF ? 0 : Math.max(SCALE_MIN, scaleX),\n scaleY < ZERO_CUTOFF ? 0 : Math.max(SCALE_MIN, scaleY),\n scaleZ < ZERO_CUTOFF ? 0 : Math.max(SCALE_MIN, scaleZ),\n quatX,\n quatY,\n quatZ,\n quatW,\n opacity,\n r,\n g,\n b\n );\n },\n (index, sh1, sh2, sh3) => {\n if (sh1) {\n if (!extra.sh1) {\n extra.sh1 = new Uint32Array(numSplats * 2);\n }\n encodeSh1Rgb(extra.sh1, index, sh1);\n }\n if (sh2) {\n if (!extra.sh2) {\n extra.sh2 = new Uint32Array(numSplats * 4);\n }\n encodeSh2Rgb(extra.sh2, index, sh2);\n }\n if (sh3) {\n if (!extra.sh3) {\n extra.sh3 = new Uint32Array(numSplats * 4);\n }\n encodeSh3Rgb(extra.sh3, index, sh3);\n }\n }\n );\n return { packedArray, numSplats, extra };\n }\n function computeMaxSplats(numSplats) {\n const width = SPLAT_TEX_WIDTH;\n const height = Math.max(\n SPLAT_TEX_MIN_HEIGHT,\n Math.min(SPLAT_TEX_HEIGHT, Math.ceil(numSplats / width))\n );\n const depth = Math.ceil(numSplats / (width * height));\n return width * height * depth;\n }\n function unpackSpz(fileBytes) {\n const spz = new SpzReader({ fileBytes });\n const numSplats = spz.numSplats;\n const maxSplats = computeMaxSplats(numSplats);\n const packedArray = new Uint32Array(maxSplats * 4);\n const extra = {};\n spz.parseSplats(\n (index, x2, y, z) => {\n setPackedSplatCenter(packedArray, index, x2, y, z);\n },\n (index, alpha) => {\n setPackedSplatOpacity(packedArray, index, alpha);\n },\n (index, r, g, b) => {\n setPackedSplatRgb(packedArray, index, r, g, b);\n },\n (index, scaleX, scaleY, scaleZ) => {\n setPackedSplatScales(packedArray, index, scaleX, scaleY, scaleZ);\n },\n (index, quatX, quatY, quatZ, quatW) => {\n setPackedSplatQuat(packedArray, index, quatX, quatY, quatZ, quatW);\n },\n (index, sh1, sh2, sh3) => {\n if (sh1) {\n if (!extra.sh1) {\n extra.sh1 = new Uint32Array(numSplats * 2);\n }\n encodeSh1Rgb(extra.sh1, index, sh1);\n }\n if (sh2) {\n if (!extra.sh2) {\n extra.sh2 = new Uint32Array(numSplats * 4);\n }\n encodeSh2Rgb(extra.sh2, index, sh2);\n }\n if (sh3) {\n if (!extra.sh3) {\n extra.sh3 = new Uint32Array(numSplats * 4);\n }\n encodeSh3Rgb(extra.sh3, index, sh3);\n }\n }\n );\n return { packedArray, numSplats, extra };\n }\n function unpackAntiSplat(fileBytes) {\n const numSplats = Math.floor(fileBytes.length / 32);\n if (numSplats * 32 !== fileBytes.length) {\n throw new Error("Invalid .splat file size");\n }\n const maxSplats = computeMaxSplats(numSplats);\n const packedArray = new Uint32Array(maxSplats * 4);\n const f32 = new Float32Array(fileBytes.buffer);\n for (let i2 = 0; i2 < numSplats; ++i2) {\n const i322 = i2 * 32;\n const i8 = i2 * 8;\n const x2 = f32[i8 + 0];\n const y = f32[i8 + 1];\n const z = f32[i8 + 2];\n const scaleX = f32[i8 + 3];\n const scaleY = f32[i8 + 4];\n const scaleZ = f32[i8 + 5];\n const r = fileBytes[i322 + 24] / 255;\n const g = fileBytes[i322 + 25] / 255;\n const b = fileBytes[i322 + 26] / 255;\n const opacity = fileBytes[i322 + 27] / 255;\n const quatW = (fileBytes[i322 + 28] - 128) / 128;\n const quatX = (fileBytes[i322 + 29] - 128) / 128;\n const quatY = (fileBytes[i322 + 30] - 128) / 128;\n const quatZ = (fileBytes[i322 + 31] - 128) / 128;\n setPackedSplat(\n packedArray,\n i2,\n x2,\n y,\n z,\n scaleX,\n scaleY,\n scaleZ,\n quatX,\n quatY,\n quatZ,\n quatW,\n opacity,\n r,\n g,\n b\n );\n }\n return { packedArray, numSplats };\n }\n const KSPLAT_COMPRESSION = {\n 0: {\n bytesPerCenter: 12,\n bytesPerScale: 12,\n bytesPerRotation: 16,\n bytesPerColor: 4,\n bytesPerSphericalHarmonicsComponent: 4,\n scaleOffsetBytes: 12,\n rotationOffsetBytes: 24,\n colorOffsetBytes: 40,\n sphericalHarmonicsOffsetBytes: 44,\n scaleRange: 1\n },\n 1: {\n bytesPerCenter: 6,\n bytesPerScale: 6,\n bytesPerRotation: 8,\n bytesPerColor: 4,\n bytesPerSphericalHarmonicsComponent: 2,\n scaleOffsetBytes: 6,\n rotationOffsetBytes: 12,\n colorOffsetBytes: 20,\n sphericalHarmonicsOffsetBytes: 24,\n scaleRange: 32767\n },\n 2: {\n bytesPerCenter: 6,\n bytesPerScale: 6,\n bytesPerRotation: 8,\n bytesPerColor: 4,\n bytesPerSphericalHarmonicsComponent: 1,\n scaleOffsetBytes: 6,\n rotationOffsetBytes: 12,\n colorOffsetBytes: 20,\n sphericalHarmonicsOffsetBytes: 24,\n scaleRange: 32767\n }\n };\n const KSPLAT_SH_DEGREE_TO_COMPONENTS = {\n 0: 0,\n 1: 9,\n 2: 24,\n 3: 45\n };\n function unpackKsplat(fileBytes) {\n var _a2;\n const HEADER_BYTES = 4096;\n const SECTION_BYTES = 1024;\n let headerOffset = 0;\n const header = new DataView(fileBytes.buffer, headerOffset, HEADER_BYTES);\n headerOffset += HEADER_BYTES;\n const versionMajor = header.getUint8(0);\n const versionMinor = header.getUint8(1);\n if (versionMajor !== 0 || versionMinor < 1) {\n throw new Error(\n `Unsupported .ksplat version: ${versionMajor}.${versionMinor}`\n );\n }\n const maxSectionCount = header.getUint32(4, true);\n const splatCount = header.getUint32(16, true);\n const compressionLevel = header.getUint16(20, true);\n if (compressionLevel < 0 || compressionLevel > 2) {\n throw new Error(`Invalid .ksplat compression level: ${compressionLevel}`);\n }\n const minSphericalHarmonicsCoeff = header.getFloat32(36, true) || -1.5;\n const maxSphericalHarmonicsCoeff = header.getFloat32(40, true) || 1.5;\n const numSplats = splatCount;\n const maxSplats = computeMaxSplats(numSplats);\n const packedArray = new Uint32Array(maxSplats * 4);\n const extra = {};\n let sectionBase = HEADER_BYTES + maxSectionCount * SECTION_BYTES;\n for (let section = 0; section < maxSectionCount; ++section) {\n let getSh = function(splatOffset, component) {\n if (compressionLevel === 0) {\n return data.getFloat32(\n splatOffset + sphericalHarmonicsOffsetBytes + component * 4,\n true\n );\n }\n if (compressionLevel === 1) {\n return fromHalf(\n data.getUint16(\n splatOffset + sphericalHarmonicsOffsetBytes + component * 2,\n true\n )\n );\n }\n const t = data.getUint8(splatOffset + sphericalHarmonicsOffsetBytes + component) / 255;\n return minSphericalHarmonicsCoeff + t * (maxSphericalHarmonicsCoeff - minSphericalHarmonicsCoeff);\n };\n const section2 = new DataView(fileBytes.buffer, headerOffset, SECTION_BYTES);\n headerOffset += SECTION_BYTES;\n const sectionSplatCount = section2.getUint32(0, true);\n const sectionMaxSplatCount = section2.getUint32(4, true);\n const bucketSize = section2.getUint32(8, true);\n const bucketCount = section2.getUint32(12, true);\n const bucketBlockSize = section2.getFloat32(16, true);\n const bucketStorageSizeBytes = section2.getUint16(20, true);\n const compressionScaleRange = (section2.getUint32(24, true) || ((_a2 = KSPLAT_COMPRESSION[compressionLevel]) == null ? void 0 : _a2.scaleRange)) ?? 1;\n const partiallyFilledBucketCount = section2.getUint32(36, true);\n const bucketsMetaDataSizeBytes = partiallyFilledBucketCount * 4;\n const bucketsStorageSizeBytes = bucketStorageSizeBytes * bucketCount + bucketsMetaDataSizeBytes;\n const sphericalHarmonicsDegree = section2.getUint16(40, true);\n const shComponents = KSPLAT_SH_DEGREE_TO_COMPONENTS[sphericalHarmonicsDegree];\n const {\n bytesPerCenter,\n bytesPerScale,\n bytesPerRotation,\n bytesPerColor,\n bytesPerSphericalHarmonicsComponent,\n scaleOffsetBytes,\n rotationOffsetBytes,\n colorOffsetBytes,\n sphericalHarmonicsOffsetBytes\n } = KSPLAT_COMPRESSION[compressionLevel];\n const bytesPerSplat = bytesPerCenter + bytesPerScale + bytesPerRotation + bytesPerColor + shComponents * bytesPerSphericalHarmonicsComponent;\n const splatDataStorageSizeBytes = bytesPerSplat * sectionMaxSplatCount;\n const storageSizeBytes = splatDataStorageSizeBytes + bucketsStorageSizeBytes;\n const sh1Index = [0, 3, 6, 1, 4, 7, 2, 5, 8];\n const sh2Index = [\n 9,\n 14,\n 19,\n 10,\n 15,\n 20,\n 11,\n 16,\n 21,\n 12,\n 17,\n 22,\n 13,\n 18,\n 23\n ];\n const sh3Index = [\n 24,\n 31,\n 38,\n 25,\n 32,\n 39,\n 26,\n 33,\n 40,\n 27,\n 34,\n 41,\n 28,\n 35,\n 42,\n 29,\n 36,\n 43,\n 30,\n 37,\n 44\n ];\n const sh1 = sphericalHarmonicsDegree >= 1 ? new Float32Array(3 * 3) : void 0;\n const sh2 = sphericalHarmonicsDegree >= 2 ? new Float32Array(5 * 3) : void 0;\n const sh3 = sphericalHarmonicsDegree >= 3 ? new Float32Array(7 * 3) : void 0;\n const compressionScaleFactor = bucketBlockSize / 2 / compressionScaleRange;\n const bucketsBase = sectionBase + bucketsMetaDataSizeBytes;\n const dataBase = sectionBase + bucketsStorageSizeBytes;\n const data = new DataView(\n fileBytes.buffer,\n dataBase,\n splatDataStorageSizeBytes\n );\n const bucketArray = new Float32Array(\n fileBytes.buffer,\n bucketsBase,\n bucketCount * 3\n );\n for (let i2 = 0; i2 < sectionSplatCount; ++i2) {\n const splatOffset = i2 * bytesPerSplat;\n const bucketIndex = Math.floor(i2 / bucketSize);\n const x2 = compressionLevel === 0 ? data.getFloat32(splatOffset + 0, true) : (data.getUint16(splatOffset + 0, true) - compressionScaleRange) * compressionScaleFactor + bucketArray[3 * bucketIndex + 0];\n const y = compressionLevel === 0 ? data.getFloat32(splatOffset + 4, true) : (data.getUint16(splatOffset + 2, true) - compressionScaleRange) * compressionScaleFactor + bucketArray[3 * bucketIndex + 1];\n const z = compressionLevel === 0 ? data.getFloat32(splatOffset + 8, true) : (data.getUint16(splatOffset + 4, true) - compressionScaleRange) * compressionScaleFactor + bucketArray[3 * bucketIndex + 2];\n const scaleX = compressionLevel === 0 ? data.getFloat32(splatOffset + scaleOffsetBytes + 0, true) : fromHalf(data.getUint16(splatOffset + scaleOffsetBytes + 0, true));\n const scaleY = compressionLevel === 0 ? data.getFloat32(splatOffset + scaleOffsetBytes + 4, true) : fromHalf(data.getUint16(splatOffset + scaleOffsetBytes + 2, true));\n const scaleZ = compressionLevel === 0 ? data.getFloat32(splatOffset + scaleOffsetBytes + 8, true) : fromHalf(data.getUint16(splatOffset + scaleOffsetBytes + 4, true));\n const quatW = compressionLevel === 0 ? data.getFloat32(splatOffset + rotationOffsetBytes + 0, true) : fromHalf(\n data.getUint16(splatOffset + rotationOffsetBytes + 0, true)\n );\n const quatX = compressionLevel === 0 ? data.getFloat32(splatOffset + rotationOffsetBytes + 4, true) : fromHalf(\n data.getUint16(splatOffset + rotationOffsetBytes + 2, true)\n );\n const quatY = compressionLevel === 0 ? data.getFloat32(splatOffset + rotationOffsetBytes + 8, true) : fromHalf(\n data.getUint16(splatOffset + rotationOffsetBytes + 4, true)\n );\n const quatZ = compressionLevel === 0 ? data.getFloat32(splatOffset + rotationOffsetBytes + 12, true) : fromHalf(\n data.getUint16(splatOffset + rotationOffsetBytes + 6, true)\n );\n const r = data.getUint8(splatOffset + colorOffsetBytes + 0) / 255;\n const g = data.getUint8(splatOffset + colorOffsetBytes + 1) / 255;\n const b = data.getUint8(splatOffset + colorOffsetBytes + 2) / 255;\n const opacity = data.getUint8(splatOffset + colorOffsetBytes + 3) / 255;\n setPackedSplat(\n packedArray,\n i2,\n x2,\n y,\n z,\n scaleX,\n scaleY,\n scaleZ,\n quatX,\n quatY,\n quatZ,\n quatW,\n opacity,\n r,\n g,\n b\n );\n if (sphericalHarmonicsDegree >= 1) {\n if (sh1) {\n if (!extra.sh1) {\n extra.sh1 = new Uint32Array(numSplats * 2);\n }\n for (const [i22, key] of sh1Index.entries()) {\n sh1[i22] = getSh(splatOffset, key);\n }\n encodeSh1Rgb(extra.sh1, i2, sh1);\n }\n if (sh2) {\n if (!extra.sh2) {\n extra.sh2 = new Uint32Array(numSplats * 4);\n }\n for (const [i22, key] of sh2Index.entries()) {\n sh2[i22] = getSh(splatOffset, key);\n }\n encodeSh2Rgb(extra.sh2, i2, sh2);\n }\n if (sh3) {\n if (!extra.sh3) {\n extra.sh3 = new Uint32Array(numSplats * 4);\n }\n for (const [i22, key] of sh3Index.entries()) {\n sh3[i22] = getSh(splatOffset, key);\n }\n encodeSh3Rgb(extra.sh3, i2, sh3);\n }\n }\n }\n sectionBase += storageSizeBytes;\n }\n return { packedArray, numSplats, extra };\n }\n const DEPTH_INFINITY = 31744;\n const DEPTH_SIZE = DEPTH_INFINITY + 1;\n let depthArray = null;\n function oldSortSplats({\n totalSplats,\n readback,\n ordering\n }) {\n if (!depthArray) {\n depthArray = new Uint32Array(DEPTH_SIZE);\n }\n depthArray.fill(0);\n const readbackUint32 = readback.map((layer) => new Uint32Array(layer.buffer));\n const layerSize = readbackUint32[0].length;\n const numLayers = Math.ceil(totalSplats / layerSize);\n let layerBase = 0;\n for (let layer = 0; layer < numLayers; ++layer) {\n const readbackLayer = readbackUint32[layer];\n const layerSplats = Math.min(readbackLayer.length, totalSplats - layerBase);\n for (let i2 = 0; i2 < layerSplats; ++i2) {\n const pri = readbackLayer[i2] & 32767;\n if (pri < DEPTH_INFINITY) {\n depthArray[pri] += 1;\n }\n }\n layerBase += layerSplats;\n }\n let activeSplats = 0;\n for (let j = 0; j < DEPTH_SIZE; ++j) {\n const nextIndex = activeSplats + depthArray[j];\n depthArray[j] = activeSplats;\n activeSplats = nextIndex;\n }\n layerBase = 0;\n for (let layer = 0; layer < numLayers; ++layer) {\n const readbackLayer = readbackUint32[layer];\n const layerSplats = Math.min(readbackLayer.length, totalSplats - layerBase);\n for (let i2 = 0; i2 < layerSplats; ++i2) {\n const pri = readbackLayer[i2] & 32767;\n if (pri < DEPTH_INFINITY) {\n ordering[depthArray[pri]] = layerBase + i2;\n depthArray[pri] += 1;\n }\n }\n layerBase += layerSplats;\n }\n if (depthArray[DEPTH_SIZE - 1] !== activeSplats) {\n throw new Error(\n `Expected ${activeSplats} active splats but got ${depthArray[DEPTH_SIZE - 1]}`\n );\n }\n return { activeSplats, ordering };\n }\n function sortSplats({\n numSplats,\n readback,\n ordering\n }) {\n if (!depthArray) {\n depthArray = new Uint32Array(DEPTH_SIZE);\n }\n depthArray.fill(0);\n for (let i2 = 0; i2 < numSplats; ++i2) {\n const pri = readback[i2];\n if (pri < DEPTH_INFINITY) {\n depthArray[pri] += 1;\n }\n }\n let activeSplats = 0;\n for (let j = DEPTH_INFINITY - 1; j >= 0; --j) {\n const nextIndex = activeSplats + depthArray[j];\n depthArray[j] = activeSplats;\n activeSplats = nextIndex;\n }\n for (let i2 = 0; i2 < numSplats; ++i2) {\n const pri = readback[i2];\n if (pri < DEPTH_INFINITY) {\n ordering[depthArray[pri]] = i2;\n depthArray[pri] += 1;\n }\n }\n if (depthArray[0] !== activeSplats) {\n throw new Error(\n `Expected ${activeSplats} active splats but got ${depthArray[0]}`\n );\n }\n return { activeSplats, ordering };\n }\n const messageBuffer = [];\n function bufferMessage(event) {\n messageBuffer.push(event);\n }\n async function initialize() {\n self.addEventListener("message", bufferMessage);\n await __wbg_init();\n self.removeEventListener("message", bufferMessage);\n self.addEventListener("message", onMessage);\n for (const event of messageBuffer) {\n onMessage(event);\n }\n messageBuffer.length = 0;\n }\n initialize().catch(console.error);\n})();\n'; +const blob = typeof self !== "undefined" && self.Blob && new Blob([jsContent], { type: "text/javascript;charset=utf-8" }); +function WorkerWrapper(options) { + let objURL; + try { + objURL = blob && (self.URL || self.webkitURL).createObjectURL(blob); + if (!objURL) throw ""; + const worker = new Worker(objURL, { + name: options == null ? void 0 : options.name + }); + worker.addEventListener("error", () => { + (self.URL || self.webkitURL).revokeObjectURL(objURL); + }); + return worker; + } catch (e) { + return new Worker( + "data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent), + { + name: options == null ? void 0 : options.name + } + ); + } finally { + objURL && (self.URL || self.webkitURL).revokeObjectURL(objURL); + } +} +class SplatWorker { + constructor() { + this.messages = {}; + this.messageIdNext = 0; + this.worker = new WorkerWrapper(); + this.worker.onmessage = (event) => this.onMessage(event); + } + makeMessageId() { + return ++this.messageIdNext; + } + makeMessagePromiseId() { + const id = this.makeMessageId(); + const promise = new Promise((resolve, reject) => { + this.messages[id] = { resolve, reject }; + }); + return { id, promise }; + } + onMessage(event) { + const { id, result, error } = event.data; + const handler = this.messages[id]; + if (handler) { + delete this.messages[id]; + if (error) { + handler.reject(error); + } else { + handler.resolve(result); + } + } + } + // Invoke an RPC on the worker with the given name and arguments. + // The normal usage of a worker is to run one activity at a time, + // but this function allows for concurrent calls, tagging each request + // with a unique message Id and awaiting a response to that same Id. + // The method will automatically transfer any ArrayBuffers in the + // arguments to the worker. If you'd like to transfer a copy of a + // buffer then you must clone it before passing to this function. + async call(name, args) { + const { id, promise } = this.makeMessagePromiseId(); + this.worker.postMessage( + { name, args, id }, + { transfer: getArrayBuffers(args) } + ); + return promise; + } +} +let maxWorkers = 4; +let numWorkers = 0; +const freeWorkers = []; +const workerQueue = []; +async function allocWorker() { + const worker = freeWorkers.shift(); + if (worker) { + return worker; + } + if (numWorkers < maxWorkers) { + const worker2 = new SplatWorker(); + numWorkers += 1; + return worker2; + } + return new Promise((resolve) => { + workerQueue.push(resolve); + }); +} +function freeWorker(worker) { + if (numWorkers > maxWorkers) { + numWorkers -= 1; + return; + } + const waiter = workerQueue.shift(); + if (waiter) { + waiter(worker); + return; + } + freeWorkers.push(worker); +} +async function withWorker(callback) { + const worker = await allocWorker(); + try { + return await callback(worker); + } finally { + freeWorker(worker); + } +} +class SplatLoader extends THREE.Loader { + constructor(manager) { + super(manager); + this.fileLoader = new THREE.FileLoader(manager); + } + load(url, onLoad, onProgress, onError) { + this.fileLoader.setResponseType("arraybuffer"); + this.fileLoader.setCrossOrigin(this.crossOrigin); + this.fileLoader.setWithCredentials(this.withCredentials); + this.fileLoader.setPath(this.path); + this.fileLoader.setResourcePath(this.resourcePath); + this.fileLoader.setRequestHeader(this.requestHeader); + this.fileLoader.load( + url, + async (response) => { + if (onLoad) { + const input = response; + const decoded = await unpackSplats({ + input, + fileType: this.fileType, + pathOrUrl: url + }); + onLoad(new PackedSplats(decoded)); + } + }, + onProgress, + onError + ); + } + async loadAsync(url, onProgress) { + return new Promise((resolve, reject) => { + this.load( + url, + (decoded) => { + resolve(decoded); + }, + onProgress, + reject + ); + }); + } + parse(packedSplats) { + return new SplatMesh({ packedSplats }); + } +} +var SplatFileType = /* @__PURE__ */ ((SplatFileType2) => { + SplatFileType2["PLY"] = "ply"; + SplatFileType2["WLG0"] = "wlg0"; + SplatFileType2["SPZ"] = "spz"; + SplatFileType2["SPLAT"] = "splat"; + SplatFileType2["KSPLAT"] = "ksplat"; + return SplatFileType2; +})(SplatFileType || {}); +function getSplatFileType(fileBytes) { + const view = new DataView(fileBytes.buffer); + if ((view.getUint32(0, true) & 16777215) === 7957616) { + return "ply"; + } + if (view.getUint32(0, true) === 809978967) { + return "wlg0"; + } + if ((view.getUint32(0, true) & 16777215) === 559903) { + const header = decompressPartialGzip(fileBytes, 4); + const gView = new DataView(header.buffer); + if (gView.getUint32(0, true) === 1347635022) { + return "spz"; + } + return void 0; + } + return void 0; +} +function getFileExtension(pathOrUrl) { + const noTrailing = pathOrUrl.split(/[?#]/, 1)[0]; + const lastSlash = Math.max( + noTrailing.lastIndexOf("/"), + noTrailing.lastIndexOf("\\") + ); + const filename = noTrailing.slice(lastSlash + 1); + const lastDot = filename.lastIndexOf("."); + if (lastDot <= 0 || lastDot === filename.length - 1) { + return ""; + } + return filename.slice(lastDot + 1).toLowerCase(); +} +async function unpackSplats({ + input, + fileType, + pathOrUrl +}) { + const fileBytes = input instanceof ArrayBuffer ? new Uint8Array(input) : input; + let splatFileType = fileType; + if (!fileType) { + splatFileType = getSplatFileType(fileBytes); + if (!splatFileType && pathOrUrl) { + const extension = getFileExtension(pathOrUrl); + if (extension === "ply") { + splatFileType = "ply"; + } else if (extension === "wlg") { + splatFileType = "wlg0"; + } else if (extension === "spz") { + splatFileType = "spz"; + } else if (extension === "splat") { + splatFileType = "splat"; + } else if (extension === "ksplat") { + splatFileType = "ksplat"; + } + } + } + if (splatFileType === "wlg0") { + return await withWorker(async (worker) => { + const { packedArray, numSplats } = await worker.call("decodeWlg", { + fileBytes + }); + return { packedArray, numSplats }; + }); + } + if (splatFileType === "ply") { + const ply = new PlyReader({ fileBytes }); + await ply.parseHeader(); + const numSplats = ply.numSplats; + const maxSplats = getTextureSize(numSplats).maxSplats; + const args = { fileBytes, packedArray: new Uint32Array(maxSplats * 4) }; + return await withWorker(async (worker) => { + const { packedArray, numSplats: numSplats2, extra } = await worker.call( + "unpackPly", + args + ); + return { packedArray, numSplats: numSplats2, extra }; + }); + } + if (splatFileType === "spz") { + return await withWorker(async (worker) => { + const { packedArray, numSplats, extra } = await worker.call( + "decodeSpz", + { + fileBytes + } + ); + return { packedArray, numSplats, extra }; + }); + } + if (splatFileType === "splat") { + return await withWorker(async (worker) => { + const { packedArray, numSplats } = await worker.call("decodeAntiSplat", { + fileBytes + }); + return { packedArray, numSplats }; + }); + } + if (splatFileType === "ksplat") { + return await withWorker(async (worker) => { + const { packedArray, numSplats, extra } = await worker.call( + "decodeKsplat", + { fileBytes } + ); + return { packedArray, numSplats, extra }; + }); + } + throw new Error("Unknown splat file type"); +} +var computeUvec4_default = "precision highp float;\nprecision highp int;\nprecision highp sampler2D;\nprecision highp usampler2D;\nprecision highp isampler2D;\nprecision highp sampler2DArray;\nprecision highp usampler2DArray;\nprecision highp isampler2DArray;\nprecision highp sampler3D;\nprecision highp usampler3D;\nprecision highp isampler3D;\n\n#include \n\nuniform uint targetLayer;\nuniform int targetBase;\nuniform int targetCount;\n\nout uvec4 target;\n\n{{ GLOBALS }}\n\nvoid produceSplat(int index) {\n {{ STATEMENTS }}\n}\n\nvoid main() {\n int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x);\n int index = targetIndex - targetBase;\n\n if ((index >= 0) && (index < targetCount)) {\n produceSplat(index);\n } else {\n target = uvec4(0u, 0u, 0u, 0u);\n }\n}"; +const _PackedSplats = class _PackedSplats { + constructor(options = {}) { + this.maxSplats = 0; + this.numSplats = 0; + this.packedArray = null; + this.isInitialized = false; + this.target = null; + this.source = null; + this.needsUpdate = true; + this.extra = {}; + this.dyno = new DynoPackedSplats({ packedSplats: this }); + this.initialized = Promise.resolve(this); + this.reinitialize(options); + } + reinitialize(options) { + this.isInitialized = false; + if (options.url || options.fileBytes || options.construct) { + this.initialized = this.asyncInitialize(options).then(() => { + this.isInitialized = true; + return this; + }); + } else { + this.initialize(options); + this.isInitialized = true; + this.initialized = Promise.resolve(this); + } + } + initialize(options) { + if (options.packedArray) { + this.packedArray = options.packedArray; + this.maxSplats = Math.floor(this.packedArray.length / 4); + this.maxSplats = Math.floor(this.maxSplats / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + this.numSplats = Math.min( + this.maxSplats, + options.numSplats ?? Number.POSITIVE_INFINITY + ); + } else { + this.maxSplats = options.maxSplats ?? 0; + this.numSplats = 0; + } + this.extra = options.extra ?? {}; + } + async asyncInitialize(options) { + let { url, fileBytes, construct } = options; + if (url) { + fileBytes = await fetch(url).then(async (response) => { + if (!response.ok) { + throw new Error( + `${response.status} "${response.statusText}" fetching URL: ${url}` + ); + } + const arrayBuffer = await response.arrayBuffer(); + return arrayBuffer; + }); + } + if (fileBytes) { + const unpacked = await unpackSplats({ + input: fileBytes, + fileType: options.fileType, + pathOrUrl: url + }); + this.initialize(unpacked); + } + if (construct) { + const maybePromise = construct(this); + if (maybePromise instanceof Promise) { + await maybePromise; + } + } + } + // Call this when you are finished with the PackedSplats and want to free + // any buffers it holds. + dispose() { + if (this.target) { + this.target.dispose(); + this.target = null; + } + if (this.source) { + this.source.dispose(); + this.source = null; + } + } + // Ensures that this.packedArray can fit numSplats Gsplats. If it's too small, + // resize exponentially and copy over the original data. + // + // Typically you don't need to call this, because calling this.setSplat(index, ...) + // and this.pushSplat(...) will automatically call ensureSplats() so we have + // enough splats. + ensureSplats(numSplats) { + const targetSize = numSplats <= this.maxSplats ? this.maxSplats : ( + // Grow exponentially to avoid frequent reallocations + Math.max(numSplats, 2 * this.maxSplats) + ); + const currentSize = !this.packedArray ? 0 : this.packedArray.length / 4; + if (!this.packedArray || targetSize > currentSize) { + this.maxSplats = getTextureSize(targetSize).maxSplats; + const newArray2 = new Uint32Array(this.maxSplats * 4); + if (this.packedArray) { + newArray2.set(this.packedArray); + } + this.packedArray = newArray2; + } + return this.packedArray; + } + // Ensure the extra array for the given level is large enough to hold numSplats + ensureSplatsSh(level, numSplats) { + let wordsPerSplat; + let key; + if (level === 0) { + return this.ensureSplats(numSplats); + } + if (level === 1) { + wordsPerSplat = 2; + key = "sh1"; + } else if (level === 2) { + wordsPerSplat = 4; + key = "sh2"; + } else if (level === 3) { + wordsPerSplat = 4; + key = "sh3"; + } else { + throw new Error(`Invalid level: ${level}`); + } + let maxSplats = !this.extra[key] ? 0 : this.extra[key].length / wordsPerSplat; + const targetSize = numSplats <= maxSplats ? maxSplats : Math.max(numSplats, 2 * maxSplats); + if (!this.extra[key] || targetSize > maxSplats) { + maxSplats = getTextureSize(targetSize).maxSplats; + const newArray2 = new Uint32Array(maxSplats * wordsPerSplat); + if (this.extra[key]) { + newArray2.set(this.extra[key]); + } + this.extra[key] = newArray2; + } + return this.extra[key]; + } + // Unpack the 16-byte Gsplat data at index into the Three.js components + // center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, + // opacity: number 0..1, color: THREE.Color 0..1. + getSplat(index) { + if (!this.packedArray || index >= this.numSplats) { + throw new Error("Invalid index"); + } + return unpackSplat(this.packedArray, index); + } + // Set all PackedSplat components at index with the provided Gsplat attributes + // (can be the same objects returned by getSplat). Ensures there is capacity + // for at least index+1 Gsplats. + setSplat(index, center, scales, quaternion, opacity, color) { + const packedSplats = this.ensureSplats(index + 1); + setPackedSplat( + packedSplats, + index, + center.x, + center.y, + center.z, + scales.x, + scales.y, + scales.z, + quaternion.x, + quaternion.y, + quaternion.z, + quaternion.w, + opacity, + color.r, + color.g, + color.b + ); + this.numSplats = Math.max(this.numSplats, index + 1); + } + // Effectively calls this.setSplat(this.numSplats++, center, ...), useful on + // construction where you just want to iterate and create a collection of Gsplats. + pushSplat(center, scales, quaternion, opacity, color) { + const packedSplats = this.ensureSplats(this.numSplats + 1); + setPackedSplat( + packedSplats, + this.numSplats, + center.x, + center.y, + center.z, + scales.x, + scales.y, + scales.z, + quaternion.x, + quaternion.y, + quaternion.z, + quaternion.w, + opacity, + color.r, + color.g, + color.b + ); + ++this.numSplats; + } + // Iterate over Gsplats index 0..=(this.numSplats-1), unpack each Gsplat + // and invoke the callback function with the Gsplat attributes. + forEachSplat(callback) { + if (!this.packedArray || !this.numSplats) { + return; + } + for (let i = 0; i < this.numSplats; ++i) { + const unpacked = unpackSplat(this.packedArray, i); + callback( + i, + unpacked.center, + unpacked.scales, + unpacked.quaternion, + unpacked.opacity, + unpacked.color + ); + } + } + // Ensures our PackedSplats.target render target has enough space to generate + // maxSplats total Gsplats, and reallocate if not large enough. + ensureGenerate(maxSplats) { + if (this.target && (maxSplats ?? 1) <= this.maxSplats) { + return false; + } + this.dispose(); + const textureSize2 = getTextureSize(maxSplats ?? 1); + const { width, height, depth } = textureSize2; + this.maxSplats = textureSize2.maxSplats; + this.target = new THREE__namespace.WebGLArrayRenderTarget(width, height, depth, { + depthBuffer: false, + stencilBuffer: false, + generateMipmaps: false, + magFilter: THREE__namespace.NearestFilter, + minFilter: THREE__namespace.NearestFilter + }); + this.target.texture.format = THREE__namespace.RGBAIntegerFormat; + this.target.texture.type = THREE__namespace.UnsignedIntType; + this.target.texture.internalFormat = "RGBA32UI"; + return true; + } + // Given an array of splatCounts (.numSplats for each + // SplatGenerator/SplatMesh in the scene), compute a + // "mapping layout" in the composite array of generated outputs. + generateMapping(splatCounts) { + let maxSplats = 0; + const mapping = splatCounts.map((numSplats) => { + const base = maxSplats; + const rounded = Math.ceil(numSplats / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + maxSplats += rounded; + return { base, count: numSplats }; + }); + return { maxSplats, mapping }; + } + // Returns a THREE.DataArrayTexture representing the PackedSplats content as + // a Uint32x4 data array texture (2048 x 2048 x depth in size) + getTexture() { + if (this.target) { + return this.target.texture; + } + if (this.source || this.packedArray) { + const source = this.maybeUpdateSource(); + return source; + } + return _PackedSplats.getEmpty(); + } + // Check if source texture needs to be created/updated + maybeUpdateSource() { + if (!this.packedArray) { + throw new Error("No packed splats"); + } + if (this.needsUpdate || !this.source) { + this.needsUpdate = false; + if (this.source) { + const { width, height, depth } = this.source.image; + if (this.maxSplats !== width * height * depth) { + this.source.dispose(); + this.source = null; + } + } + if (!this.source) { + const { width, height, depth } = getTextureSize(this.maxSplats); + this.source = new THREE__namespace.DataArrayTexture( + this.packedArray, + width, + height, + depth + ); + this.source.format = THREE__namespace.RGBAIntegerFormat; + this.source.type = THREE__namespace.UnsignedIntType; + this.source.internalFormat = "RGBA32UI"; + this.source.needsUpdate = true; + } else if (this.packedArray.buffer !== this.source.image.data.buffer) { + this.source.image.data = new Uint8Array(this.packedArray.buffer); + } + this.source.needsUpdate = true; + } + return this.source; + } + // Can be used where you need an uninitialized THREE.DataArrayTexture like + // a uniform you will update with the result of this.getTexture() later. + static getEmpty() { + if (!_PackedSplats.emptySource) { + const { width, height, depth, maxSplats } = getTextureSize(1); + const emptyArray = new Uint32Array(maxSplats * 4); + _PackedSplats.emptySource = new THREE__namespace.DataArrayTexture( + emptyArray, + width, + height, + depth + ); + _PackedSplats.emptySource.format = THREE__namespace.RGBAIntegerFormat; + _PackedSplats.emptySource.type = THREE__namespace.UnsignedIntType; + _PackedSplats.emptySource.internalFormat = "RGBA32UI"; + _PackedSplats.emptySource.needsUpdate = true; + } + return _PackedSplats.emptySource; + } + // Get a program and THREE.RawShaderMaterial for a given GsplatGenerator, + // generating it if necessary and caching the result. + prepareProgramMaterial(generator) { + let program = _PackedSplats.generatorProgram.get(generator); + if (!program) { + const graph = dynoBlock( + { index: "int" }, + { output: "uvec4" }, + ({ index }) => { + generator.inputs.index = index; + const gsplat = generator.outputs.gsplat; + const output = outputPackedSplat(gsplat); + return { output }; + } + ); + if (!_PackedSplats.programTemplate) { + _PackedSplats.programTemplate = new DynoProgramTemplate( + computeUvec4_default + ); + } + program = new DynoProgram({ + graph, + inputs: { index: "index" }, + outputs: { output: "target" }, + template: _PackedSplats.programTemplate + }); + Object.assign(program.uniforms, { + targetLayer: { value: 0 }, + targetBase: { value: 0 }, + targetCount: { value: 0 } + }); + _PackedSplats.generatorProgram.set(generator, program); + } + const material = program.prepareMaterial(); + _PackedSplats.mesh.material = material; + return { program, material }; + } + saveRenderState(renderer) { + return { + xrPresenting: renderer.xr.isPresenting, + autoClear: renderer.autoClear, + scissorTest: renderer.getScissorTest() + }; + } + resetRenderState(renderer, state) { + renderer.setRenderTarget(null); + renderer.xr.isPresenting = state.xrPresenting; + renderer.autoClear = state.autoClear; + renderer.setScissorTest(state.scissorTest); + } + // Executes a dyno program specified by generator which is any DynoBlock that + // maps { index: "int" } to { gsplat: Gsplat }. This is called in + // ForgeRenderer.updateInternal() to re-generate Gsplats in the scene for + // SplatGenerator instances whose version is newer than what was generated + // for it last time. + generate({ + generator, + base, + count, + renderer + }) { + if (!this.target) { + throw new Error("Target must be initialized with ensureSplats"); + } + if (base + count > this.maxSplats) { + throw new Error("Base + count exceeds maxSplats"); + } + const { program, material } = this.prepareProgramMaterial(generator); + program.update(); + const renderState = this.saveRenderState(renderer); + const nextBase = Math.ceil((base + count) / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + const layerSize = SPLAT_TEX_WIDTH * SPLAT_TEX_HEIGHT; + material.uniforms.targetBase.value = base; + material.uniforms.targetCount.value = count; + while (base < nextBase) { + const layer = Math.floor(base / layerSize); + material.uniforms.targetLayer.value = layer; + const layerBase = layer * layerSize; + const layerYStart = Math.floor((base - layerBase) / SPLAT_TEX_WIDTH); + const layerYEnd = Math.min( + SPLAT_TEX_HEIGHT, + Math.ceil((nextBase - layerBase) / SPLAT_TEX_WIDTH) + ); + renderer.setRenderTarget(this.target, layer); + renderer.xr.isPresenting = false; + renderer.autoClear = false; + renderer.setScissorTest(true); + renderer.setScissor( + 0, + layerYStart, + SPLAT_TEX_WIDTH, + layerYEnd - layerYStart + ); + renderer.render(_PackedSplats.scene, _PackedSplats.camera); + base += SPLAT_TEX_WIDTH * (layerYEnd - layerYStart); + } + this.resetRenderState(renderer, renderState); + return { nextBase }; + } +}; +_PackedSplats.emptySource = null; +_PackedSplats.programTemplate = null; +_PackedSplats.generatorProgram = /* @__PURE__ */ new Map(); +_PackedSplats.geometry = new THREE__namespace.PlaneGeometry(2, 2); +_PackedSplats.mesh = new THREE__namespace.Mesh( + _PackedSplats.geometry, + new THREE__namespace.RawShaderMaterial({ visible: false }) +); +_PackedSplats.scene = new THREE__namespace.Scene().add(_PackedSplats.mesh); +_PackedSplats.camera = new THREE__namespace.Camera(); +let PackedSplats = _PackedSplats; +class DynoPackedSplats extends DynoUniform { + constructor({ packedSplats } = {}) { + super({ + key: "packedSplats", + type: TPackedSplats, + globals: () => [definePackedSplats], + value: { + texture: PackedSplats.getEmpty(), + numSplats: 0 + }, + update: (value) => { + var _a2, _b2; + value.texture = ((_a2 = this.packedSplats) == null ? void 0 : _a2.getTexture()) ?? PackedSplats.getEmpty(); + value.numSplats = ((_b2 = this.packedSplats) == null ? void 0 : _b2.numSplats) ?? 0; + return value; + } + }); + this.packedSplats = packedSplats; + } +} +class SplatGeometry extends THREE__namespace.InstancedBufferGeometry { + constructor(ordering, activeSplats) { + super(); + this.ordering = ordering; + this.setAttribute("position", new THREE__namespace.BufferAttribute(QUAD_VERTICES, 3)); + this.setIndex(new THREE__namespace.BufferAttribute(QUAD_INDICES, 1)); + this._maxInstanceCount = ordering.length; + this.instanceCount = activeSplats; + this.attribute = new THREE__namespace.InstancedBufferAttribute(ordering, 1, false, 1); + this.attribute.setUsage(THREE__namespace.DynamicDrawUsage); + this.setAttribute("splatIndex", this.attribute); + } + update(ordering, activeSplats) { + this.ordering = ordering; + this.attribute.array = ordering; + this.instanceCount = activeSplats; + this.attribute.addUpdateRange(0, activeSplats); + this.attribute.needsUpdate = true; + } +} +const QUAD_VERTICES = new Float32Array([ + -1, + -1, + 0, + 1, + -1, + 0, + 1, + 1, + 0, + -1, + 1, + 0 +]); +const QUAD_INDICES = new Uint16Array([0, 1, 2, 0, 2, 3]); +const _ForgeViewpoint = class _ForgeViewpoint { + constructor(options) { + this.lastTime = null; + this.encodeLinear = false; + this.superXY = 1; + this.display = null; + this.sorting = null; + this.pending = null; + this.sortingCheck = false; + this.readback = new Uint16Array(0); + this.forge = options.forge; + this.camera = options.camera; + this.viewToWorld = options.viewToWorld ?? new THREE__namespace.Matrix4(); + if (options.target) { + const { width, height, doubleBuffer } = options.target; + const superXY = Math.max(1, Math.min(4, options.target.superXY ?? 1)); + this.superXY = superXY; + if (width * superXY > 8192 || height * superXY > 8192) { + throw new Error("Target size too large"); + } + this.target = new THREE__namespace.WebGLRenderTarget( + width * superXY, + height * superXY, + { + format: THREE__namespace.RGBAFormat, + type: THREE__namespace.UnsignedByteType, + colorSpace: THREE__namespace.SRGBColorSpace + } + ); + if (doubleBuffer) { + this.back = new THREE__namespace.WebGLRenderTarget( + width * superXY, + height * superXY, + { + format: THREE__namespace.RGBAFormat, + type: THREE__namespace.UnsignedByteType, + colorSpace: THREE__namespace.SRGBColorSpace + } + ); + } + this.encodeLinear = true; + } + this.onTextureUpdated = options.onTextureUpdated; + this.sortRadial = options.sortRadial ?? true; + this.sortDistance = options.sortDistance; + this.sortCoorient = options.sortCoorient; + this.depthBias = options.depthBias; + this.sort360 = options.sort360; + this.orderingFreelist = new FreeList({ + allocate: (maxSplats) => new Uint32Array(maxSplats), + valid: (ordering, maxSplats) => ordering.length === maxSplats + }); + this.autoUpdate = false; + this.setAutoUpdate(options.autoUpdate ?? false); + } + // Call this when you are done with the ForgeViewpoint and want to + // free up its resources (GPU targets, pixel buffers, etc.) + dispose() { + var _a2; + this.setAutoUpdate(false); + if (this.target) { + this.target.dispose(); + this.target = void 0; + } + if (this.back) { + this.back.dispose(); + this.back = void 0; + } + if (this.display) { + this.forge.releaseAccumulator(this.display.accumulator); + this.display.geometry.dispose(); + this.display = null; + } + if ((_a2 = this.pending) == null ? void 0 : _a2.accumulator) { + this.forge.releaseAccumulator(this.pending.accumulator); + this.pending = null; + } + } + // Use this function to change whether this viewpoint will auto-update + // its sort order whenever the attached ForgeRenderer updates the Gsplats. + // Turn this on or off depending on whether you expect to do renders from + // this viewpoint most frames. + setAutoUpdate(autoUpdate) { + if (!this.autoUpdate && autoUpdate) { + this.forge.autoViewpoints.push(this); + } else if (this.autoUpdate && !autoUpdate) { + this.forge.autoViewpoints = this.forge.autoViewpoints.filter( + (v) => v !== this + ); + } + this.autoUpdate = autoUpdate; + } + // See below async prepareRenderPixels() for explanation of parameters. + // Awaiting this method updates the Gsplats in the scene and performs a sort of the + // Gsplats from this viewpoint, preparing it for a subsequent this.renderTarget() + // call in the same tick. + async prepare({ + scene, + camera, + viewToWorld, + update, + forceOrigin + }) { + var _a2; + if (viewToWorld) { + this.viewToWorld = viewToWorld; + } else { + this.camera = camera ?? this.camera; + if (this.camera) { + this.camera.updateMatrixWorld(); + this.viewToWorld = this.camera.matrixWorld.clone(); + } + } + while (update ?? true) { + const originToWorld = forceOrigin ? this.viewToWorld : void 0; + const updated = this.forge.updateInternal({ scene, originToWorld }); + if (updated) { + break; + } + await new Promise((resolve) => setTimeout(resolve, 10)); + } + const accumulator = this.forge.active; + if (accumulator !== ((_a2 = this.display) == null ? void 0 : _a2.accumulator)) { + this.forge.active.refCount += 1; + } + await this.sortUpdate({ accumulator, viewToWorld: this.viewToWorld }); + } + // Render out the viewpoint to the view target RGBA buffer. + // Swaps buffers if doubleBuffer: true was set. + // Calls onTextureUpdated(texture) with the resulting texture. + renderTarget({ + scene, + camera + }) { + var _a2; + const target = this.back ?? this.target; + if (!target) { + throw new Error("Must initialize ForgeViewpoint with target"); + } + camera = camera ?? this.camera; + if (!camera) { + throw new Error("Must provide camera"); + } + if (camera instanceof THREE__namespace.PerspectiveCamera) { + const newCam = new THREE__namespace.PerspectiveCamera().copy(camera, false); + newCam.aspect = target.width / target.height; + newCam.updateProjectionMatrix(); + camera = newCam; + } + this.viewToWorld = camera.matrixWorld.clone(); + try { + this.forge.renderer.setRenderTarget(target); + this.forge.prepareViewpoint(this); + this.forge.renderer.render(scene, camera); + } finally { + this.forge.prepareViewpoint(this.forge.defaultView); + this.forge.renderer.setRenderTarget(null); + } + if (target !== this.target) { + [this.target, this.back] = [this.back, this.target]; + } + (_a2 = this.onTextureUpdated) == null ? void 0 : _a2.call(this, target.texture); + } + // Read back the previously rendered target image as a Uint8Array of packed + // RGBA values (in that order). If superXY was set greater than 1 then + // downsampling is performed in the target pixel array with simple averaging + // to derive the returned pixel values. Subsequent calls to this.readTarget() + // will reuse the same buffers to minimize memory allocations. + async readTarget() { + if (!this.target) { + throw new Error("Must initialize ForgeViewpoint with target"); + } + const { width, height } = this.target; + const byteSize = width * height * 4; + if (!this.superPixels || this.superPixels.length < byteSize) { + this.superPixels = new Uint8Array(byteSize); + } + await this.forge.renderer.readRenderTargetPixelsAsync( + this.target, + 0, + 0, + width, + height, + this.superPixels + ); + const { superXY } = this; + if (superXY === 1) { + return this.superPixels; + } + const subWidth = width / superXY; + const subHeight = height / superXY; + const subSize = subWidth * subHeight * 4; + if (!this.pixels || this.pixels.length < subSize) { + this.pixels = new Uint8Array(subSize); + } + const { superPixels, pixels } = this; + const super2 = superXY * superXY; + for (let y = 0; y < subHeight; y++) { + const row = y * subWidth; + for (let x = 0; x < subWidth; x++) { + const superCol = x * superXY; + let r = 0; + let g = 0; + let b = 0; + let a = 0; + for (let sy = 0; sy < superXY; sy++) { + const superRow = (y * superXY + sy) * this.target.width; + for (let sx = 0; sx < superXY; sx++) { + const superIndex = (superRow + superCol + sx) * 4; + r += superPixels[superIndex]; + g += superPixels[superIndex + 1]; + b += superPixels[superIndex + 2]; + a += superPixels[superIndex + 3]; + } + } + const pixelIndex = (row + x) * 4; + pixels[pixelIndex] = r / super2; + pixels[pixelIndex + 1] = g / super2; + pixels[pixelIndex + 2] = b / super2; + pixels[pixelIndex + 3] = a / super2; + } + } + return pixels; + } + // Render out a viewpoint as a Uint8Array of RGBA values for the provided scene + // and any camera/viewToWorld viewpoint overrides. By default update is true, + // which triggers its ForgeRenderer to check and potentially update the Gsplats. + // Setting update to false disables this and sorts the Gsplats as they are. + // Setting forceOrigin (default: false) to true forces the view update to + // recalculate the splats with this view origin, potentially altering any + // view-dependent effects. If you expect view-dependent effects to play a role + // in the rendering quality, enable this. + // + // Underneath, prepareRenderPixels() simply calls await this.prepare(...), + // this.renderTarget(...), and finally returns the result this.readTarget(), + // a Promise to a Uint8Array with RGBA values for all the pixels (potentially + // downsampled if the superXY parameter was used). These steps can also be called + // manually, for example if you need to alter the scene before and after + // this.renderTarget(...) to hide UI elements from being rendered. + async prepareRenderPixels({ + scene, + camera, + viewToWorld, + update, + forceOrigin + }) { + await this.prepare({ scene, camera, viewToWorld, update, forceOrigin }); + this.renderTarget({ scene, camera }); + return this.readTarget(); + } + // This is called automatically by ForgeRenderer, there is no need to call it! + // The method cannot be private because then ForgeRenderer would + // not be able to call it. + autoPoll({ accumulator }) { + var _a2, _b2, _c; + if (this.camera) { + this.camera.updateMatrixWorld(); + this.viewToWorld = this.camera.matrixWorld.clone(); + } + let needsSort = false; + if (!this.display) { + needsSort = true; + } else if (accumulator) { + needsSort = true; + const { mappingVersion } = this.display.accumulator; + if (accumulator.mappingVersion === mappingVersion) { + this.forge.releaseAccumulator(this.display.accumulator); + this.display.accumulator = accumulator; + } + } + const latestView = ((_a2 = this.sorting) == null ? void 0 : _a2.viewToWorld) ?? ((_b2 = this.display) == null ? void 0 : _b2.viewToWorld); + if (latestView && !withinCoorientDist({ + matrix1: this.viewToWorld, + matrix2: latestView, + // By default update sort each 1 cm + maxDistance: this.sortDistance ?? 0.01, + // By default for radial sort, update for intermittent movement so that + // we bring back splats culled by being behind the camera. + // For depth sort, small rotations can change sort order a lot, so + // update sort for even small rotations. + minCoorient: this.sortCoorient ?? this.sortRadial ? 0.99 : 0.999 + })) { + needsSort = true; + } + if (!needsSort) { + return; + } + if (accumulator) { + accumulator.refCount += 1; + } + if (accumulator && ((_c = this.pending) == null ? void 0 : _c.accumulator)) { + this.forge.releaseAccumulator(this.pending.accumulator); + } + this.pending = { accumulator, viewToWorld: this.viewToWorld }; + this.driveSort(); + } + async driveSort() { + var _a2; + while (true) { + if (this.sorting || !this.pending) { + return; + } + const viewToWorld = this.pending.viewToWorld; + let accumulator = this.pending.accumulator ?? ((_a2 = this.display) == null ? void 0 : _a2.accumulator); + if (!accumulator) { + accumulator = this.forge.active; + accumulator.refCount += 1; + } + this.pending = null; + if (!accumulator) { + throw new Error("No accumulator to sort"); + } + this.sorting = { viewToWorld }; + await this.sortUpdate({ accumulator, viewToWorld }); + this.sorting = null; + } + } + async sortUpdate({ + accumulator, + viewToWorld + }) { + if (this.sortingCheck) { + throw new Error("Only one sort at a time"); + } + this.sortingCheck = true; + accumulator = accumulator ?? this.forge.active; + const { numSplats, maxSplats } = accumulator.splats; + let activeSplats = 0; + let ordering = this.orderingFreelist.alloc(maxSplats); + if (numSplats > 0) { + const { + reader, + doubleSortReader, + dynoSortRadial, + dynoOrigin, + dynoDirection, + dynoDepthBias, + dynoSort360, + dynoSplats + } = _ForgeViewpoint.makeSorter(); + const halfMaxSplats = Math.ceil(maxSplats / 2); + this.readback = reader.ensureBuffer(halfMaxSplats, this.readback); + const worldToOrigin = accumulator.toWorld.clone().invert(); + const viewToOrigin = viewToWorld.clone().premultiply(worldToOrigin); + dynoSortRadial.value = this.sort360 ? true : this.sortRadial; + dynoOrigin.value.set(0, 0, 0).applyMatrix4(viewToOrigin); + dynoDirection.value.set(0, 0, -1).applyMatrix4(viewToOrigin).sub(dynoOrigin.value).normalize(); + dynoDepthBias.value = this.depthBias ?? 1; + dynoSort360.value = this.sort360 ?? false; + dynoSplats.packedSplats = accumulator.splats; + await reader.renderReadback({ + renderer: this.forge.renderer, + reader: doubleSortReader, + count: Math.ceil(numSplats / 2), + readback: this.readback + }); + const result = await withWorker(async (worker) => { + return worker.call("sortDoubleSplats", { + numSplats, + readback: this.readback, + ordering + }); + }); + this.readback = result.readback; + ordering = result.ordering; + activeSplats = result.activeSplats; + } + this.updateDisplay({ accumulator, viewToWorld, ordering, activeSplats }); + this.sortingCheck = false; + } + updateDisplay({ + accumulator, + viewToWorld, + ordering, + activeSplats + }) { + if (!this.display) { + this.display = { + accumulator, + viewToWorld, + geometry: new SplatGeometry(ordering, activeSplats) + }; + } else { + if (accumulator !== this.display.accumulator) { + this.forge.releaseAccumulator(this.display.accumulator); + this.display.accumulator = accumulator; + } + this.display.viewToWorld = viewToWorld; + const oldOrdering = this.display.geometry.ordering; + if (oldOrdering.length === ordering.length) { + this.display.geometry.update(ordering, activeSplats); + } else { + this.display.geometry.dispose(); + this.display.geometry = new SplatGeometry(ordering, activeSplats); + } + this.orderingFreelist.free(oldOrdering); + } + if (this.forge.viewpoint === this) { + this.forge.prepareViewpoint(this); + } + } + static makeSorter() { + if (!_ForgeViewpoint.dynos) { + const dynoSortRadial = new DynoBool({ value: true }); + const dynoOrigin = new DynoVec3({ value: new THREE__namespace.Vector3() }); + const dynoDirection = new DynoVec3({ value: new THREE__namespace.Vector3() }); + const dynoDepthBias = new DynoFloat({ value: 1 }); + const dynoSort360 = new DynoBool({ value: false }); + const dynoSplats = new DynoPackedSplats(); + const reader = new Readback(); + const doubleSortReader = dynoBlock( + { index: "int" }, + { rgba8: "vec4" }, + ({ index }) => { + if (!index) { + throw new Error("No index"); + } + const sortParams = { + sortRadial: dynoSortRadial, + sortOrigin: dynoOrigin, + sortDirection: dynoDirection, + sortDepthBias: dynoDepthBias, + sort360: dynoSort360 + }; + const index2 = mul(index, dynoConst("int", 2)); + const gsplat0 = readPackedSplat(dynoSplats, index2); + const metric0 = computeSortMetric({ gsplat: gsplat0, ...sortParams }); + const gsplat1 = readPackedSplat( + dynoSplats, + add(index2, dynoConst("int", 1)) + ); + const metric1 = computeSortMetric({ gsplat: gsplat1, ...sortParams }); + const combined = combine({ + vectorType: "vec2", + x: metric0, + y: metric1 + }); + const rgba8 = uintToRgba8(packHalf2x16(combined)); + return { rgba8 }; + } + ); + _ForgeViewpoint.dynos = { + dynoSortRadial, + dynoOrigin, + dynoDirection, + dynoDepthBias, + dynoSort360, + dynoSplats, + reader, + doubleSortReader + }; + } + return _ForgeViewpoint.dynos; + } +}; +_ForgeViewpoint.EMPTY_TEXTURE = new THREE__namespace.Texture(); +_ForgeViewpoint.dynos = null; +let ForgeViewpoint = _ForgeViewpoint; +const defineComputeSortMetric = unindent(` + float computeSort(Gsplat gsplat, bool sortRadial, vec3 sortOrigin, vec3 sortDirection, float sortDepthBias, bool sort360) { + if (!isGsplatActive(gsplat.flags)) { + return INFINITY; + } + + vec3 center = gsplat.center - sortOrigin; + float biasedDepth = dot(center, sortDirection) + sortDepthBias; + if (!sort360 && (biasedDepth <= 0.0)) { + return INFINITY; + } + + return sortRadial ? length(center) : biasedDepth; + } +`); +function computeSortMetric({ + gsplat, + sortRadial, + sortOrigin, + sortDirection, + sortDepthBias, + sort360 +}) { + return dyno$1({ + inTypes: { + gsplat: Gsplat, + sortRadial: "bool", + sortOrigin: "vec3", + sortDirection: "vec3", + sortDepthBias: "float", + sort360: "bool" + }, + outTypes: { metric: "float" }, + globals: () => [defineGsplat, defineComputeSortMetric], + inputs: { + gsplat, + sortRadial, + sortOrigin, + sortDirection, + sortDepthBias, + sort360 + }, + statements: ({ inputs, outputs }) => { + const { + gsplat: gsplat2, + sortRadial: sortRadial2, + sortOrigin: sortOrigin2, + sortDirection: sortDirection2, + sortDepthBias: sortDepthBias2, + sort360: sort3602 + } = inputs; + return unindentLines(` + ${outputs.metric} = computeSort(${gsplat2}, ${sortRadial2}, ${sortOrigin2}, ${sortDirection2}, ${sortDepthBias2}, ${sort3602}); + `); + } + }).outputs.metric; +} +class SplatAccumulator { + constructor() { + this.splats = new PackedSplats(); + this.toWorld = new THREE__namespace.Matrix4(); + this.mapping = []; + this.refCount = 0; + this.splatsVersion = -1; + this.mappingVersion = -1; + } + ensureGenerate(maxSplats) { + if (this.splats.ensureGenerate(maxSplats)) { + this.mapping = []; + } + } + // Generate all Gsplats from an array of generators + generateSplats({ + renderer, + modifier, + generators: generators2, + forceUpdate, + originToWorld + }) { + const mapping = this.mapping.reduce((map, record) => { + map.set(record.node, record); + return map; + }, /* @__PURE__ */ new Map()); + let updated = 0; + let numSplats = 0; + for (const { node, generator, version, base, count } of generators2) { + const current = mapping.get(node); + if (forceUpdate || generator !== (current == null ? void 0 : current.generator) || version !== (current == null ? void 0 : current.version) || base !== (current == null ? void 0 : current.base) || count !== (current == null ? void 0 : current.count)) { + if (generator) { + const modGenerator = modifier.apply(generator); + try { + this.splats.generate({ + generator: modGenerator, + base, + count, + renderer + }); + } catch (error) { + node.generator = void 0; + node.generatorError = error; + } + updated += 1; + } + } + numSplats = Math.max(numSplats, base + count); + } + this.splats.numSplats = numSplats; + this.toWorld = originToWorld; + this.mapping = generators2; + return updated !== 0; + } + // Check if this accumulator has exactly the same generator mapping as + // the previous one. If so, we can reuse the Gsplat sort order. + hasCorrespondence(other) { + if (this.mapping.length !== other.mapping.length) { + return false; + } + return this.mapping.every(({ node, base, count }, i) => { + const { + node: otherNode, + base: otherBase, + count: otherCount + } = other.mapping[i]; + return node === otherNode && base === otherBase && count === otherCount; + }); + } +} +var splatDefines_default = "const float LN_SCALE_MIN = -9.0;\nconst float LN_SCALE_MAX = 9.0;\nconst float LN_RESCALE = (LN_SCALE_MAX - LN_SCALE_MIN) / 254.0; \n\nconst uint SPLAT_TEX_WIDTH_BITS = 11u;\nconst uint SPLAT_TEX_HEIGHT_BITS = 11u;\nconst uint SPLAT_TEX_DEPTH_BITS = 11u;\nconst uint SPLAT_TEX_LAYER_BITS = SPLAT_TEX_WIDTH_BITS + SPLAT_TEX_HEIGHT_BITS;\n\nconst uint SPLAT_TEX_WIDTH = 1u << SPLAT_TEX_WIDTH_BITS;\nconst uint SPLAT_TEX_HEIGHT = 1u << SPLAT_TEX_HEIGHT_BITS;\nconst uint SPLAT_TEX_DEPTH = 1u << SPLAT_TEX_DEPTH_BITS;\n\nconst uint SPLAT_TEX_WIDTH_MASK = SPLAT_TEX_WIDTH - 1u;\nconst uint SPLAT_TEX_HEIGHT_MASK = SPLAT_TEX_HEIGHT - 1u;\nconst uint SPLAT_TEX_DEPTH_MASK = SPLAT_TEX_DEPTH - 1u;\n\nconst uint F16_INF = 0x7c00u;\nconst float PI = 3.1415926535897932384626433832795;\n\nconst float INFINITY = 1.0 / 0.0;\nconst float NEG_INFINITY = -INFINITY;\n\nconst float MAX_PIXEL_RADIUS = 512.0;\nconst float MIN_ALPHA = 0.01;\nconst float MAX_STDDEV = sqrt(8.0);\n\nfloat sqr(float x) {\n return x * x;\n}\n\nfloat pow4(float x) {\n float x2 = x * x;\n return x2 * x2;\n}\n\nfloat pow8(float x) {\n float x4 = pow4(x);\n return x4 * x4;\n}\n\nvec3 srgbToLinear(vec3 rgb) {\n return pow(rgb, vec3(2.2));\n}\n\nvec3 linearToSrgb(vec3 rgb) {\n return pow(rgb, vec3(1.0 / 2.2));\n}\n\nuint encodeQuatOctXy88R8(vec4 q) {\n \n if (q.w < 0.0) {\n q = -q;\n }\n \n float theta = 2.0 * acos(q.w);\n float halfTheta = theta * 0.5;\n float s = sin(halfTheta);\n \n vec3 axis = (abs(s) < 1e-6) ? vec3(1.0, 0.0, 0.0) : q.xyz / s;\n \n \n \n float sum = abs(axis.x) + abs(axis.y) + abs(axis.z);\n vec2 p = vec2(axis.x, axis.y) / sum;\n \n if (axis.z < 0.0) {\n float oldPx = p.x;\n p.x = (1.0 - abs(p.y)) * (p.x >= 0.0 ? 1.0 : -1.0);\n p.y = (1.0 - abs(oldPx)) * (p.y >= 0.0 ? 1.0 : -1.0);\n }\n \n float u_f = p.x * 0.5 + 0.5;\n float v_f = p.y * 0.5 + 0.5;\n \n uint quantU = uint(clamp(round(u_f * 255.0), 0.0, 255.0));\n uint quantV = uint(clamp(round(v_f * 255.0), 0.0, 255.0));\n \n \n \n uint angleInt = uint(clamp(round((theta / 3.14159265359) * 255.0), 0.0, 255.0));\n \n \n return (angleInt << 16u) | (quantV << 8u) | quantU;\n}\n\nvec4 decodeQuatOctXy88R8(uint encoded) {\n \n uint quantU = encoded & uint(0xFFu); \n uint quantV = (encoded >> 8u) & uint(0xFFu); \n uint angleInt = encoded >> 16u; \n\n \n float u_f = float(quantU) / 255.0;\n float v_f = float(quantV) / 255.0;\n vec2 f = vec2(u_f * 2.0 - 1.0, v_f * 2.0 - 1.0);\n\n vec3 axis = vec3(f.xy, 1.0 - abs(f.x) - abs(f.y));\n float t = max(-axis.z, 0.0);\n axis.x += (axis.x >= 0.0) ? -t : t;\n axis.y += (axis.y >= 0.0) ? -t : t;\n axis = normalize(axis);\n \n \n float theta = (float(angleInt) / 255.0) * 3.14159265359;\n float halfTheta = theta * 0.5;\n float s = sin(halfTheta);\n float w = cos(halfTheta);\n \n return vec4(axis * s, w);\n}\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\nuvec4 packSplat(vec3 center, vec3 scales, vec4 quaternion, vec4 rgba) {\n uvec4 uRgba = uvec4(round(clamp(rgba * 255.0, 0.0, 255.0)));\n\n uint uQuat = encodeQuatOctXy88R8(quaternion);\n \n \n uvec3 uQuat3 = uvec3(uQuat & 0xffu, (uQuat >> 8u) & 0xffu, (uQuat >> 16u) & 0xffu);\n\n \n uvec3 uScales = uvec3(\n (scales.x == 0.0) ? 0u : uint(round(clamp((log(scales.x) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u,\n (scales.y == 0.0) ? 0u : uint(round(clamp((log(scales.y) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u,\n (scales.z == 0.0) ? 0u : uint(round(clamp((log(scales.z) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u\n );\n\n \n uint word0 = uRgba.r | (uRgba.g << 8u) | (uRgba.b << 16u) | (uRgba.a << 24u);\n uint word1 = packHalf2x16(center.xy);\n uint word2 = packHalf2x16(vec2(center.z, 0.0)) | (uQuat3.x << 16u) | (uQuat3.y << 24u);\n uint word3 = uScales.x | (uScales.y << 8u) | (uScales.z << 16u) | (uQuat3.z << 24u);\n return uvec4(word0, word1, word2, word3);\n}\n\nvoid unpackSplat(uvec4 packed, out vec3 center, out vec3 scales, out vec4 quaternion, out vec4 rgba) {\n uint word0 = packed.x, word1 = packed.y, word2 = packed.z, word3 = packed.w;\n\n uvec4 uRgba = uvec4(word0 & 0xffu, (word0 >> 8u) & 0xffu, (word0 >> 16u) & 0xffu, (word0 >> 24u) & 0xffu);\n rgba = vec4(uRgba) / 255.0;\n\n center = vec4(\n unpackHalf2x16(word1),\n unpackHalf2x16(word2 & 0xffffu)\n ).xyz;\n\n uvec3 uScales = uvec3(word3 & 0xffu, (word3 >> 8u) & 0xffu, (word3 >> 16u) & 0xffu);\n scales = vec3(\n (uScales.x == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.x - 1u) * LN_RESCALE),\n (uScales.y == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.y - 1u) * LN_RESCALE),\n (uScales.z == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.z - 1u) * LN_RESCALE)\n );\n\n uint uQuat = ((word2 >> 16u) & 0xFFFFu) | ((word3 >> 8u) & 0xFF0000u);\n quaternion = decodeQuatOctXy88R8(uQuat);\n \n \n}\n\nvec3 quatVec(vec4 q, vec3 v) {\n \n vec3 t = 2.0 * cross(q.xyz, v);\n return v + q.w * t + cross(q.xyz, t);\n}\n\nvec4 quatQuat(vec4 q1, vec4 q2) {\n return vec4(\n q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y,\n q1.w * q2.y - q1.x * q2.z + q1.y * q2.w + q1.z * q2.x,\n q1.w * q2.z + q1.x * q2.y - q1.y * q2.x + q1.z * q2.w,\n q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z\n );\n}\n\nmat3 scaleQuaternionToMatrix(vec3 s, vec4 q) {\n \n return mat3(\n s.x * (1.0 - 2.0 * (q.y * q.y + q.z * q.z)),\n s.x * (2.0 * (q.x * q.y + q.w * q.z)),\n s.x * (2.0 * (q.x * q.z - q.w * q.y)),\n s.y * (2.0 * (q.x * q.y - q.w * q.z)),\n s.y * (1.0 - 2.0 * (q.x * q.x + q.z * q.z)),\n s.y * (2.0 * (q.y * q.z + q.w * q.x)),\n s.z * (2.0 * (q.x * q.z + q.w * q.y)),\n s.z * (2.0 * (q.y * q.z - q.w * q.x)),\n s.z * (1.0 - 2.0 * (q.x * q.x + q.y * q.y))\n );\n}\n\nvec4 slerp(vec4 q1, vec4 q2, float t) {\n \n float cosHalfTheta = dot(q1, q2);\n\n \n if (abs(cosHalfTheta) >= 0.999) {\n return q1;\n }\n \n \n \n if (cosHalfTheta < 0.0) {\n q2 = -q2;\n cosHalfTheta = -cosHalfTheta;\n }\n\n \n float halfTheta = acos(cosHalfTheta);\n float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta);\n\n \n float ratioA = sin((1.0 - t) * halfTheta) / sinHalfTheta;\n float ratioB = sin(t * halfTheta) / sinHalfTheta;\n\n \n return q1 * ratioA + q2 * ratioB;\n}\n\nivec3 splatTexCoord(int index) {\n uint x = uint(index) & SPLAT_TEX_WIDTH_MASK;\n uint y = (uint(index) >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK;\n uint z = uint(index) >> SPLAT_TEX_LAYER_BITS;\n return ivec3(x, y, z);\n}"; +var splatFragment_default = "precision highp float;\nprecision highp int;\n\n#include \n\nuniform bool encodeLinear;\nuniform float maxStdDev;\nuniform bool disableFalloff;\nuniform float falloff;\n\nout vec4 fragColor;\n\nin vec4 vRgba;\nin vec2 vSplatUv;\nin vec3 vNdc;\n\nvoid main() {\n float z = dot(vSplatUv, vSplatUv);\n if (z > (maxStdDev * maxStdDev)) {\n discard;\n }\n\n float alpha = vRgba.a;\n alpha *= mix(1.0, exp(-0.5 * z), falloff);\n if (alpha < MIN_ALPHA) {\n discard;\n }\n\n vec3 rgb = vRgba.rgb;\n if (encodeLinear) {\n rgb = srgbToLinear(rgb);\n }\n fragColor = vec4(rgb, alpha);\n}"; +var splatVertex_default = "precision highp float;\nprecision highp int;\nprecision highp usampler2DArray;\n\n#include \n\nattribute uint splatIndex;\n\nout vec4 vRgba;\nout vec2 vSplatUv;\nout vec3 vNdc;\n\nuniform vec2 renderSize;\nuniform uint numSplats;\nuniform vec4 renderToViewQuat;\nuniform vec3 renderToViewPos;\nuniform float maxStdDev;\nuniform float time;\nuniform float deltaTime;\nuniform bool debugFlag;\nuniform bool enable2DGS;\nuniform float blurAmount;\nuniform float preBlurAmount;\nuniform float clipXY;\n\nuniform usampler2DArray packedSplats;\n\nvoid main() {\n \n gl_Position = vec4(0.0, 0.0, 2.0, 1.0);\n\n if (uint(gl_InstanceID) >= numSplats) {\n return;\n }\n if (splatIndex == 0xffffffffu) {\n \n return;\n }\n\n ivec3 texCoord = ivec3(\n splatIndex & SPLAT_TEX_WIDTH_MASK,\n (splatIndex >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK,\n splatIndex >> SPLAT_TEX_LAYER_BITS\n );\n uvec4 packed = texelFetch(packedSplats, texCoord, 0);\n\n vec3 center, scales;\n vec4 quaternion, rgba;\n unpackSplat(packed, center, scales, quaternion, rgba);\n\n if (rgba.a < MIN_ALPHA) {\n return;\n }\n bvec3 zeroScales = equal(scales, vec3(0.0));\n if (all(zeroScales)) {\n return;\n }\n\n \n vec3 viewCenter = quatVec(renderToViewQuat, center) + renderToViewPos;\n\n \n if (viewCenter.z >= 0.0) {\n return;\n }\n\n \n vec4 clipCenter = projectionMatrix * vec4(viewCenter, 1.0);\n\n \n if (abs(clipCenter.z) >= clipCenter.w) {\n return;\n }\n\n \n float clip = clipXY * clipCenter.w;\n if (abs(clipCenter.x) > clip || abs(clipCenter.y) > clip) {\n return;\n }\n\n \n vec4 viewQuaternion = quatQuat(renderToViewQuat, quaternion);\n\n if (enable2DGS && any(zeroScales)) {\n vRgba = rgba;\n vSplatUv = position.xy * maxStdDev;\n\n vec3 offset;\n if (zeroScales.z) {\n offset = vec3(vSplatUv.xy * scales.xy, 0.0);\n } else if (zeroScales.y) {\n offset = vec3(vSplatUv.x * scales.x, 0.0, vSplatUv.y * scales.z);\n } else {\n offset = vec3(0.0, vSplatUv.xy * scales.yz);\n }\n\n vec3 viewPos = viewCenter + quatVec(viewQuaternion, offset);\n gl_Position = projectionMatrix * vec4(viewPos, 1.0);\n vNdc = gl_Position.xyz / gl_Position.w;\n return;\n }\n\n \n vec3 ndcCenter = clipCenter.xyz / clipCenter.w;\n\n \n mat3 RS = scaleQuaternionToMatrix(scales, viewQuaternion);\n mat3 cov3D = RS * transpose(RS);\n\n \n vec2 focal = 0.5 * renderSize * vec2(projectionMatrix[0][0], projectionMatrix[1][1]);\n float invZ = 1.0 / viewCenter.z;\n vec2 J1 = focal * invZ;\n vec2 J2 = -(J1 * viewCenter.xy) * invZ;\n mat3 J = mat3(\n J1.x, 0.0, J2.x,\n 0.0, J1.y, J2.y,\n 0.0, 0.0, 0.0\n );\n\n \n \n \n \n \n \n \n mat3 cov2D = transpose(J) * cov3D * J;\n float a = cov2D[0][0];\n float d = cov2D[1][1];\n float b = cov2D[0][1];\n\n \n a += preBlurAmount;\n d += preBlurAmount;\n\n \n float detOrig = a * d - b * b;\n a += blurAmount;\n d += blurAmount;\n float det = a * d - b * b;\n\n \n float blurAdjust = sqrt(max(0.0, detOrig / det));\n rgba.a *= blurAdjust;\n if (rgba.a < MIN_ALPHA) {\n return;\n }\n\n \n float eigenAvg = 0.5 * (a + d);\n float eigenDelta = sqrt(max(0.0, eigenAvg * eigenAvg - det));\n float eigen1 = eigenAvg + eigenDelta;\n float eigen2 = eigenAvg - eigenDelta;\n\n vec2 eigenVec1 = normalize(vec2((abs(b) < 0.001) ? 1.0 : b, eigen1 - a));\n vec2 eigenVec2 = vec2(eigenVec1.y, -eigenVec1.x);\n\n float scale1 = position.x * min(MAX_PIXEL_RADIUS, maxStdDev * sqrt(eigen1));\n float scale2 = position.y * min(MAX_PIXEL_RADIUS, maxStdDev * sqrt(eigen2));\n\n \n vec2 pixelOffset = eigenVec1 * scale1 + eigenVec2 * scale2;\n vec2 ndcOffset = (2.0 / renderSize) * pixelOffset;\n vec3 ndc = vec3(ndcCenter.xy + ndcOffset, ndcCenter.z);\n\n vRgba = rgba;\n vSplatUv = position.xy * maxStdDev;\n vNdc = ndc;\n gl_Position = vec4(ndc.xy * clipCenter.w, clipCenter.zw);\n}"; +let shaders = null; +function getShaders() { + if (!shaders) { + THREE__namespace.ShaderChunk.splatDefines = splatDefines_default; + shaders = { + splatVertex: splatVertex_default, + splatFragment: splatFragment_default + }; + } + return shaders; +} +const MAX_ACCUMULATORS = 5; +let hasSplatMesh = false; +let hasForgeRenderer = false; +let forgeRendererInstance; +const sceneAdd = THREE__namespace.Scene.prototype.add; +THREE__namespace.Scene.prototype.add = function(object) { + hasSplatMesh = hasSplatMesh || object instanceof SplatMesh; + hasForgeRenderer = hasForgeRenderer || object instanceof ForgeRenderer; + sceneAdd.call(this, object); + return this; +}; +const sceneOnBeforeRender = THREE__namespace.Scene.prototype.onBeforeRender; +THREE__namespace.Scene.prototype.onBeforeRender = function(renderer) { + if (!hasSplatMesh) { + return; + } + if (!hasForgeRenderer) { + const forge = forgeRendererInstance || new ForgeRenderer({ renderer }); + this.add(forge); + } + THREE__namespace.Scene.prototype.onBeforeRender = sceneOnBeforeRender; + THREE__namespace.Scene.prototype.add = sceneAdd; +}; +const _ForgeRenderer = class _ForgeRenderer extends THREE__namespace.Mesh { + constructor(options) { + const uniforms = _ForgeRenderer.makeUniforms(); + const shaders2 = getShaders(); + const material = new THREE__namespace.ShaderMaterial({ + glslVersion: THREE__namespace.GLSL3, + vertexShader: shaders2.splatVertex, + fragmentShader: shaders2.splatFragment, + uniforms, + transparent: true, + blending: THREE__namespace.NormalBlending, + depthTest: true, + depthWrite: false, + side: THREE__namespace.DoubleSide + }); + super(EMPTY_GEOMETRY, material); + this.autoViewpoints = []; + this.rotateToAccumulator = new DynoVec4({ value: new THREE__namespace.Quaternion() }); + this.translateToAccumulator = new DynoVec3({ value: new THREE__namespace.Vector3() }); + this.lastFrame = -1; + this.lastUpdateTime = null; + this.defaultCameras = []; + this.pendingUpdate = null; + this.envViewpoint = null; + this.frustumCulled = false; + this.renderer = options.renderer; + this.material = material; + this.uniforms = uniforms; + const modifier = dynoBlock( + { gsplat: Gsplat }, + { gsplat: Gsplat }, + ({ gsplat }) => { + if (!gsplat) { + throw new Error("gsplat not defined"); + } + gsplat = transformGsplat(gsplat, { + rotate: this.rotateToAccumulator, + translate: this.translateToAccumulator + }); + return { gsplat }; + } + ); + this.modifier = new SplatModifier(modifier); + this.autoUpdate = options.autoUpdate ?? true; + this.preUpdate = options.preUpdate ?? false; + this.originDistance = options.originDistance ?? 1; + this.maxStdDev = options.maxStdDev ?? Math.sqrt(8); + this.enable2DGS = options.enable2DGS ?? true; + this.preBlurAmount = options.preBlurAmount ?? 0; + this.blurAmount = options.blurAmount ?? 0.3; + this.falloff = options.falloff ?? 1; + this.clipXY = options.clipXY ?? 1.4; + this.active = new SplatAccumulator(); + this.accumulatorCount = 1; + this.freeAccumulators = []; + for (let count = 0; count < 1; ++count) { + this.freeAccumulators.push(new SplatAccumulator()); + this.accumulatorCount += 1; + } + this.defaultView = new ForgeViewpoint({ + ...options.view, + autoUpdate: true, + forge: this + }); + this.viewpoint = this.defaultView; + this.prepareViewpoint(this.viewpoint); + this.clock = options.clock ? cloneClock(options.clock) : new THREE__namespace.Clock(); + forgeRendererInstance = this; + } + static makeUniforms() { + const uniforms = { + // Size of render viewport in pixels + renderSize: { value: new THREE__namespace.Vector2() }, + // Total number of Gsplats in packedSplats to render + numSplats: { value: 0 }, + // SplatAccumulator to view transformation quaternion + renderToViewQuat: { value: new THREE__namespace.Quaternion() }, + // SplatAccumulator to view transformation translation + renderToViewPos: { value: new THREE__namespace.Vector3() }, + // Maximum distance (in stddevs) from Gsplat center to render + maxStdDev: { value: 1 }, + // Enable interpreting 0-thickness Gsplats as 2DGS + enable2DGS: { value: false }, + // Add to projected 2D splat covariance diagonal (thickens and brightens) + preBlurAmount: { value: 0 }, + // Add to 2D splat covariance diagonal and adjust opacity (anti-aliasing) + blurAmount: { value: 0.3 }, + // Modulate Gaussian kernal falloff. 0 means "no falloff, flat shading", + // 1 is normal e^-x^2 falloff. + falloff: { value: 1 }, + // Clip Gsplats that are clipXY times beyond the +-1 frustum bounds + clipXY: { value: 1.4 }, + // Gsplat collection to render + packedSplats: { type: "t", value: PackedSplats.getEmpty() }, + // Time in seconds for time-based effects + time: { value: 0 }, + // Delta time in seconds since last frame + deltaTime: { value: 0 }, + // Whether to encode Gsplat with linear RGB (for environment mapping) + encodeLinear: { value: false }, + // Debug flag that alternates each frame + debugFlag: { value: false } + }; + return uniforms; + } + canAllocAccumulator() { + return this.freeAccumulators.length > 0 || this.accumulatorCount < MAX_ACCUMULATORS; + } + maybeAllocAccumulator() { + let accumulator = this.freeAccumulators.pop(); + if (accumulator === void 0) { + if (this.accumulatorCount >= MAX_ACCUMULATORS) { + return null; + } + accumulator = new SplatAccumulator(); + this.accumulatorCount += 1; + } + accumulator.refCount = 1; + return accumulator; + } + releaseAccumulator(accumulator) { + accumulator.refCount -= 1; + if (accumulator.refCount === 0) { + this.freeAccumulators.push(accumulator); + } + } + newViewpoint(options) { + return new ForgeViewpoint({ ...options, forge: this }); + } + onBeforeRender(renderer, scene, camera) { + var _a2, _b2; + const time = this.time ?? this.clock.getElapsedTime(); + const deltaTime = time - (this.viewpoint.lastTime ?? time); + this.viewpoint.lastTime = time; + const frame = renderer.info.render.frame; + const isNewFrame = frame !== this.lastFrame; + this.lastFrame = frame; + const viewpoint = this.viewpoint; + if (viewpoint === this.defaultView) { + if (isNewFrame) { + if (!renderer.xr.isPresenting) { + this.defaultView.viewToWorld = camera.matrixWorld.clone(); + this.defaultCameras = [this.defaultView.viewToWorld]; + } else { + const cameras = renderer.xr.getCamera().cameras; + this.defaultCameras = [ + cameras[0].matrixWorld, + cameras[1].matrixWorld + ]; + this.defaultView.viewToWorld = averageOriginToWorlds(this.defaultCameras) ?? new THREE__namespace.Matrix4(); + } + } + if (this.autoUpdate) { + this.update({ scene, viewToWorld: this.defaultView.viewToWorld }); + } + } + if (isNewFrame) { + this.uniforms.time.value = time; + this.uniforms.deltaTime.value = deltaTime; + this.uniforms.debugFlag.value = performance.now() / 1e3 % 2 < 1; + } + if (viewpoint.target) { + this.uniforms.renderSize.value.set( + viewpoint.target.width, + viewpoint.target.height + ); + } else { + const renderSize = renderer.getSize(this.uniforms.renderSize.value); + if (renderSize.x === 1 && renderSize.y === 1) { + const baseLayer = (_a2 = renderer.xr.getSession()) == null ? void 0 : _a2.renderState.baseLayer; + if (baseLayer) { + renderSize.x = baseLayer.framebufferWidth; + renderSize.y = baseLayer.framebufferHeight; + } + } + } + this.uniforms.encodeLinear.value = viewpoint.encodeLinear; + this.uniforms.maxStdDev.value = this.maxStdDev; + this.uniforms.enable2DGS.value = this.enable2DGS; + this.uniforms.preBlurAmount.value = this.preBlurAmount; + this.uniforms.blurAmount.value = this.blurAmount; + this.uniforms.falloff.value = this.falloff; + this.uniforms.clipXY.value = this.clipXY; + const accumToWorld = ((_b2 = viewpoint.display) == null ? void 0 : _b2.accumulator.toWorld) ?? new THREE__namespace.Matrix4(); + const worldToCamera = camera.matrixWorld.clone().invert(); + const originToCamera = accumToWorld.clone().premultiply(worldToCamera); + originToCamera.decompose( + this.uniforms.renderToViewPos.value, + this.uniforms.renderToViewQuat.value, + new THREE__namespace.Vector3() + ); + } + // Update the uniforms for the given viewpoint. + // Note that the client expects to be able to call render() at any point + // to update the canvas, so we must switch the viewpoint back to + // defaultView when we're finished. + prepareViewpoint(viewpoint) { + this.viewpoint = viewpoint ?? this.viewpoint; + if (this.viewpoint.display) { + const { accumulator, geometry } = this.viewpoint.display; + this.uniforms.numSplats.value = accumulator.splats.numSplats; + this.uniforms.packedSplats.value = accumulator.splats.getTexture(); + this.geometry = geometry; + } else { + this.uniforms.numSplats.value = 0; + this.uniforms.packedSplats.value = PackedSplats.getEmpty(); + this.geometry = EMPTY_GEOMETRY; + } + } + // If forge.autoUpdate is false then you must manually call + // forge.update({ scene }) to have the scene Gsplats be re-generated. + update({ + scene, + viewToWorld + }) { + const originToWorld = this.matrixWorld.clone(); + if (this.preUpdate) { + this.updateInternal({ scene, originToWorld, viewToWorld }); + } else { + this.pendingUpdate = { + scene, + originToWorld + }; + setTimeout(() => { + if (this.pendingUpdate) { + const { scene: scene2, originToWorld: originToWorld2 } = this.pendingUpdate; + this.pendingUpdate = null; + this.updateInternal({ scene: scene2, originToWorld: originToWorld2, viewToWorld }); + } + }, 1); + } + } + updateInternal({ + scene, + originToWorld, + viewToWorld + }) { + var _a2; + if (!this.canAllocAccumulator()) { + return false; + } + if (!originToWorld) { + originToWorld = this.active.toWorld; + } + viewToWorld = viewToWorld ?? originToWorld.clone(); + const time = this.time ?? this.clock.getElapsedTime(); + const deltaTime = time - (this.lastUpdateTime ?? time); + this.lastUpdateTime = time; + const activeMapping = this.active.mapping.reduce((map, record) => { + map.set(record.node, record); + return map; + }, /* @__PURE__ */ new Map()); + const { generators: generators2, globalEdits } = this.compileScene(scene); + for (const object of generators2) { + (_a2 = object.frameUpdate) == null ? void 0 : _a2.call(object, { + object, + time, + deltaTime, + viewToWorld, + globalEdits + }); + } + for (const object of generators2) { + const current = activeMapping.get(object); + const numSplats = object.generator ? object.numSplats : 0; + if (object.generator !== (current == null ? void 0 : current.generator) || numSplats !== (current == null ? void 0 : current.count)) { + object.updateVersion(); + } + } + const originUpdate = !withinCoorientDist({ + matrix1: originToWorld, + matrix2: this.active.toWorld, + maxDistance: this.originDistance + }); + const needsUpdate = originUpdate || generators2.length !== activeMapping.size || generators2.some((g) => { + var _a3; + return g.version !== ((_a3 = activeMapping.get(g)) == null ? void 0 : _a3.version); + }); + let accumulator = null; + if (needsUpdate) { + accumulator = this.maybeAllocAccumulator(); + if (!accumulator) { + throw new Error("Unreachable"); + } + const originChanged = !withinCoorientDist({ + matrix1: originToWorld, + matrix2: this.active.toWorld, + maxDistance: 1e-5, + minCoorient: 0.99999 + }); + const sorted = generators2.map((g, gIndex) => { + const lastGen = activeMapping.get(g); + return !lastGen ? [Number.POSITIVE_INFINITY, g.version, g] : ( + // Sort by version deltas then by previous ordering in the mapping, + // attempting to keep unchanging generators near the front + // to improve our chances of avoiding a re-generation. + [g.version - lastGen.version, lastGen.base, g] + ); + }).sort((a, b) => { + if (a[0] !== b[0]) { + return a[0] - b[0]; + } + return a[1] - b[1]; + }); + const genOrder = sorted.map(([_version, _seq, g]) => g); + const splatCounts = genOrder.map((g) => g.numSplats); + const { maxSplats, mapping } = accumulator.splats.generateMapping(splatCounts); + const newGenerators = genOrder.map((node, gIndex) => { + const { base, count } = mapping[gIndex]; + return { + node, + generator: node.generator, + version: node.version, + base, + count + }; + }); + originToWorld.clone().invert().decompose( + this.translateToAccumulator.value, + this.rotateToAccumulator.value, + new THREE__namespace.Vector3() + ); + accumulator.ensureGenerate(maxSplats); + accumulator.generateSplats({ + renderer: this.renderer, + modifier: this.modifier, + generators: newGenerators, + forceUpdate: originChanged, + originToWorld + }); + accumulator.splatsVersion = this.active.splatsVersion + 1; + const hasCorrespondence = accumulator.hasCorrespondence(this.active); + accumulator.mappingVersion = this.active.mappingVersion + (hasCorrespondence ? 0 : 1); + this.releaseAccumulator(this.active); + this.active = accumulator; + this.prepareViewpoint(); + } + setTimeout(() => { + for (const view of this.autoViewpoints) { + view.autoPoll({ accumulator: accumulator ?? void 0 }); + } + }, 1); + return true; + } + compileScene(scene) { + const generators2 = []; + scene.traverse((node) => { + if (node instanceof SplatGenerator) { + generators2.push(node); + } + }); + const globalEdits = /* @__PURE__ */ new Set(); + scene.traverseVisible((node) => { + if (node instanceof SplatEdit) { + let ancestor = node.parent; + while (ancestor != null && !(ancestor instanceof SplatMesh)) { + ancestor = ancestor.parent; + } + if (ancestor == null) { + globalEdits.add(node); + } + } + }); + return { generators: generators2, globalEdits: Array.from(globalEdits) }; + } + // Renders out the scene to an environment map that can be used for + // Image-based lighting or similar applications. First optionally updates Gsplats, + // sorts them with respect to the provided worldCenter, renders 6 cube faces, + // then pre-filters them using THREE.PMREMGenerator and returns a THREE.Texture + // that can assigned directly to a THREE.MeshStandardMaterial.envMap property. + async renderEnvMap({ + renderer, + scene, + worldCenter, + size = 256, + near = 0.1, + far = 1e3, + hideObjects = [], + update = false + }) { + var _a2, _b2; + if (!this.envViewpoint) { + this.envViewpoint = this.newViewpoint({ sort360: true }); + } + if (!_ForgeRenderer.cubeRender || _ForgeRenderer.cubeRender.target.width !== size || _ForgeRenderer.cubeRender.near !== near || _ForgeRenderer.cubeRender.far !== far) { + if (_ForgeRenderer.cubeRender) { + _ForgeRenderer.cubeRender.target.dispose(); + } + const target2 = new THREE__namespace.WebGLCubeRenderTarget(size, { + format: THREE__namespace.RGBAFormat, + generateMipmaps: true, + minFilter: THREE__namespace.LinearMipMapLinearFilter + }); + const camera2 = new THREE__namespace.CubeCamera(near, far, target2); + _ForgeRenderer.cubeRender = { target: target2, camera: camera2, near, far }; + } + if (!_ForgeRenderer.pmrem) { + _ForgeRenderer.pmrem = new THREE__namespace.PMREMGenerator(renderer ?? this.renderer); + } + const viewToWorld = new THREE__namespace.Matrix4().setPosition(worldCenter); + await ((_a2 = this.envViewpoint) == null ? void 0 : _a2.prepare({ scene, viewToWorld, update })); + const { target, camera } = _ForgeRenderer.cubeRender; + camera.position.copy(worldCenter); + const objectVisibility = /* @__PURE__ */ new Map(); + for (const object of hideObjects) { + objectVisibility.set(object, object.visible); + object.visible = false; + } + this.prepareViewpoint(this.envViewpoint); + camera.update(renderer ?? this.renderer, scene); + this.prepareViewpoint(this.defaultView); + for (const [object, visible] of objectVisibility.entries()) { + object.visible = visible; + } + return (_b2 = _ForgeRenderer.pmrem) == null ? void 0 : _b2.fromCubemap(target.texture).texture; + } + // Utility function to recursively set the envMap property for any + // THREE.MeshStandardMaterial within the subtree of root. + recurseSetEnvMap(root, envMap) { + root.traverse((node) => { + if (node instanceof THREE__namespace.Mesh) { + if (Array.isArray(node.material)) { + for (const material of node.material) { + if (material instanceof THREE__namespace.MeshStandardMaterial) { + material.envMap = envMap; + } + } + } else { + if (node.material instanceof THREE__namespace.MeshStandardMaterial) { + node.material.envMap = envMap; + } + } + } + }); + } + // Utility function that helps extract the Gsplat RGBA values from a + // SplatGenerator, including the result of any real-time RGBA SDF edits applied + // to a SplatMesh. This effectively "bakes" any computed RGBA values, which can + // now be used as a pipeline input via SplatMesh.splatRgba to inject these + // baked values into the Gsplat data. + getRgba({ + generator, + rgba + }) { + const mapping = this.active.mapping.find(({ node }) => node === generator); + if (!mapping) { + throw new Error("Generator not found"); + } + rgba = rgba ?? new RgbaArray(); + rgba.fromPackedSplats({ + packedSplats: this.active.splats, + base: mapping.base, + count: mapping.count, + renderer: this.renderer + }); + return rgba; + } + // Utility function that builds on getRgba({ generator }) and additionally + // reads back the RGBA values to the CPU in a Uint8Array with packed RGBA + // in that byte order. + async readRgba({ + generator, + rgba + }) { + rgba = this.getRgba({ generator, rgba }); + return rgba.read(); + } +}; +_ForgeRenderer.cubeRender = null; +_ForgeRenderer.pmrem = null; +let ForgeRenderer = _ForgeRenderer; +const EMPTY_GEOMETRY = new SplatGeometry(new Uint32Array(1), 0); +dynoBlock( + { packedSplats: TPackedSplats, index: "int" }, + { gsplat: Gsplat }, + ({ packedSplats, index }) => { + if (!packedSplats || !index) { + throw new Error("Invalid input"); + } + const gsplat = readPackedSplat(packedSplats, index); + return { gsplat }; + } +); +function averageOriginToWorlds(originToWorlds) { + if (originToWorlds.length === 0) { + return null; + } + const position = new THREE__namespace.Vector3(); + const quaternion = new THREE__namespace.Quaternion(); + const scale = new THREE__namespace.Vector3(); + const positions = []; + const quaternions = []; + for (const matrix of originToWorlds) { + matrix.decompose(position, quaternion, scale); + positions.push(position); + quaternions.push(quaternion); + } + return new THREE__namespace.Matrix4().compose( + averagePositions(positions), + averageQuaternions(quaternions), + new THREE__namespace.Vector3(1, 1, 1) + ); +} +class SpzReader { + constructor({ fileBytes }) { + this.fileBytes = fileBytes instanceof ArrayBuffer ? new Uint8Array(fileBytes) : fileBytes; + this.reader = new GunzipReader({ fileBytes: this.fileBytes }); + const header = new DataView(this.reader.read(16).buffer); + if (header.getUint32(0, true) !== 1347635022) { + throw new Error("Invalid SPZ file"); + } + this.version = header.getUint32(4, true); + if (this.version < 1 || this.version > 2) { + throw new Error(`Unsupported SPZ version: ${this.version}`); + } + this.numSplats = header.getUint32(8, true); + this.shDegree = header.getUint8(12); + this.fractionalBits = header.getUint8(13); + this.flags = header.getUint8(14); + this.flagAntiAlias = (this.flags & 1) !== 0; + this.reserved = header.getUint8(15); + this.parsed = false; + } + parseSplats(centerCallback, alphaCallback, rgbCallback, scalesCallback, quatCallback, shCallback) { + if (this.parsed) { + throw new Error("SPZ file already parsed"); + } + this.parsed = true; + if (this.version === 1) { + const centerBytes = this.reader.read(this.numSplats * 3 * 2); + const centerUint16 = new Uint16Array(centerBytes.buffer); + for (let i = 0; i < this.numSplats; i++) { + const i3 = i * 3; + const x = fromHalf(centerUint16[i3]); + const y = fromHalf(centerUint16[i3 + 1]); + const z = fromHalf(centerUint16[i3 + 2]); + centerCallback(i, x, y, z); + } + } else if (this.version === 2) { + const fixed = 1 << this.fractionalBits; + const centerBytes = this.reader.read(this.numSplats * 3 * 3); + for (let i = 0; i < this.numSplats; i++) { + const i9 = i * 9; + const x = ((centerBytes[i9 + 2] << 24 | centerBytes[i9 + 1] << 16 | centerBytes[i9] << 8) >> 8) / fixed; + const y = ((centerBytes[i9 + 5] << 24 | centerBytes[i9 + 4] << 16 | centerBytes[i9 + 3] << 8) >> 8) / fixed; + const z = ((centerBytes[i9 + 8] << 24 | centerBytes[i9 + 7] << 16 | centerBytes[i9 + 6] << 8) >> 8) / fixed; + centerCallback(i, x, y, z); + } + } else { + throw new Error("Unreachable"); + } + { + const bytes = this.reader.read(this.numSplats); + for (let i = 0; i < this.numSplats; i++) { + alphaCallback(i, bytes[i] / 255); + } + } + { + const rgbBytes = this.reader.read(this.numSplats * 3); + const scale = SH_C0 / 0.15; + for (let i = 0; i < this.numSplats; i++) { + const i3 = i * 3; + const r = (rgbBytes[i3] / 255 - 0.5) * scale + 0.5; + const g = (rgbBytes[i3 + 1] / 255 - 0.5) * scale + 0.5; + const b = (rgbBytes[i3 + 2] / 255 - 0.5) * scale + 0.5; + rgbCallback(i, r, g, b); + } + } + { + const scalesBytes = this.reader.read(this.numSplats * 3); + for (let i = 0; i < this.numSplats; i++) { + const i3 = i * 3; + const scaleX = Math.exp(scalesBytes[i3] / 16 - 10); + const scaleY = Math.exp(scalesBytes[i3 + 1] / 16 - 10); + const scaleZ = Math.exp(scalesBytes[i3 + 2] / 16 - 10); + scalesCallback(i, scaleX, scaleY, scaleZ); + } + } + { + const quatBytes = this.reader.read(this.numSplats * 3); + for (let i = 0; i < this.numSplats; i++) { + const i3 = i * 3; + const quatX = quatBytes[i3] / 127.5 - 1; + const quatY = quatBytes[i3 + 1] / 127.5 - 1; + const quatZ = quatBytes[i3 + 2] / 127.5 - 1; + const quatW = Math.sqrt( + Math.max(0, 1 - quatX * quatX - quatY * quatY - quatZ * quatZ) + ); + quatCallback(i, quatX, quatY, quatZ, quatW); + } + } + if (shCallback && this.shDegree >= 1) { + const sh1 = new Float32Array(3 * 3); + const sh2 = this.shDegree >= 2 ? new Float32Array(5 * 3) : void 0; + const sh3 = this.shDegree >= 3 ? new Float32Array(7 * 3) : void 0; + const shBytes = this.reader.read( + this.numSplats * SH_DEGREE_TO_VECS[this.shDegree] * 3 + ); + let offset = 0; + for (let i = 0; i < this.numSplats; i++) { + for (let j = 0; j < 9; ++j) { + sh1[j] = (shBytes[offset + j] - 128) / 128; + } + offset += 9; + if (sh2) { + for (let j = 0; j < 15; ++j) { + sh2[j] = (shBytes[offset + j] - 128) / 128; + } + offset += 15; + } + if (sh3) { + for (let j = 0; j < 21; ++j) { + sh3[j] = (shBytes[offset + j] - 128) / 128; + } + offset += 21; + } + shCallback(i, sh1, sh2, sh3); + } + } + } +} +const SH_DEGREE_TO_VECS = { 1: 3, 2: 8, 3: 15 }; +const SH_C0 = 0.28209479177387814; +class SplatSkinning { + constructor(options) { + this.mesh = options.mesh; + this.numSplats = options.numSplats ?? this.mesh.numSplats; + const { width, height, depth, maxSplats } = getTextureSize(this.numSplats); + this.skinData = new Uint16Array(maxSplats * 4); + this.skinTexture = new THREE__namespace.DataArrayTexture( + this.skinData, + width, + height, + depth + ); + this.skinTexture.format = THREE__namespace.RGBAIntegerFormat; + this.skinTexture.type = THREE__namespace.UnsignedShortType; + this.skinTexture.internalFormat = "RGBA16UI"; + this.skinTexture.needsUpdate = true; + this.numBones = options.numBones ?? 256; + this.boneData = new Float32Array(this.numBones * 16); + this.boneTexture = new THREE__namespace.DataTexture( + this.boneData, + 4, + this.numBones, + THREE__namespace.RGBAFormat, + THREE__namespace.FloatType + ); + this.boneTexture.internalFormat = "RGBA32F"; + this.boneTexture.needsUpdate = true; + this.uniform = new DynoUniform({ + key: "skinning", + type: GsplatSkinning, + globals: () => [defineGsplatSkinning], + value: { + numSplats: this.numSplats, + numBones: this.numBones, + skinTexture: this.skinTexture, + boneTexture: this.boneTexture + } + }); + } + // Apply the skeletal animation to a Gsplat in a dyno program. + modify(gsplat) { + return applyGsplatSkinning(gsplat, this.uniform); + } + // Set the "rest" pose for a bone with position and quaternion orientation. + setRestQuatPos(boneIndex, quat, pos) { + const i16 = boneIndex * 16; + this.boneData[i16 + 0] = quat.x; + this.boneData[i16 + 1] = quat.y; + this.boneData[i16 + 2] = quat.z; + this.boneData[i16 + 3] = quat.w; + this.boneData[i16 + 4] = pos.x; + this.boneData[i16 + 5] = pos.y; + this.boneData[i16 + 6] = pos.z; + this.boneData[i16 + 7] = 0; + this.boneData[i16 + 8] = 0; + this.boneData[i16 + 9] = 0; + this.boneData[i16 + 10] = 0; + this.boneData[i16 + 11] = 1; + this.boneData[i16 + 12] = 0; + this.boneData[i16 + 13] = 0; + this.boneData[i16 + 14] = 0; + this.boneData[i16 + 15] = 0; + } + // Set the "current" position and orientation of a bone. + setBoneQuatPos(boneIndex, quat, pos) { + const i16 = boneIndex * 16; + const origQuat = new THREE__namespace.Quaternion( + this.boneData[i16 + 0], + this.boneData[i16 + 1], + this.boneData[i16 + 2], + this.boneData[i16 + 3] + ); + const origPos = new THREE__namespace.Vector3( + this.boneData[i16 + 4], + this.boneData[i16 + 5], + this.boneData[i16 + 6] + ); + const relQuat = origQuat.clone().invert(); + const relPos = pos.clone().sub(origPos); + relPos.applyQuaternion(relQuat); + relQuat.multiply(quat); + const dual = new THREE__namespace.Quaternion( + relPos.x, + relPos.y, + relPos.z, + 0 + ).multiply(origQuat); + this.boneData[i16 + 8] = relQuat.x; + this.boneData[i16 + 9] = relQuat.y; + this.boneData[i16 + 10] = relQuat.z; + this.boneData[i16 + 11] = relQuat.w; + this.boneData[i16 + 12] = 0.5 * dual.x; + this.boneData[i16 + 13] = 0.5 * dual.y; + this.boneData[i16 + 14] = 0.5 * dual.z; + this.boneData[i16 + 15] = 0.5 * dual.w; + } + // Set up to 4 bone indices and weights for a Gsplat. For fewer than 4 bones, + // you can set the remaining weights to 0 (and index=0). + setSplatBones(splatIndex, boneIndices, weights) { + const i4 = splatIndex * 4; + this.skinData[i4 + 0] = Math.min(255, Math.max(0, Math.round(weights.x * 255))) + (boneIndices.x << 8); + this.skinData[i4 + 1] = Math.min(255, Math.max(0, Math.round(weights.y * 255))) + (boneIndices.y << 8); + this.skinData[i4 + 2] = Math.min(255, Math.max(0, Math.round(weights.z * 255))) + (boneIndices.z << 8); + this.skinData[i4 + 3] = Math.min(255, Math.max(0, Math.round(weights.w * 255))) + (boneIndices.w << 8); + } + // Call this to indicate that the bones have changed and the Gsplats need to be + // re-generated with updated skinning. + updateBones() { + this.boneTexture.needsUpdate = true; + this.mesh.needsUpdate = true; + } +} +const GsplatSkinning = { type: "GsplatSkinning" }; +const defineGsplatSkinning = unindent(` + struct GsplatSkinning { + int numSplats; + int numBones; + usampler2DArray skinTexture; + sampler2D boneTexture; + }; +`); +const defineApplyGsplatSkinning = unindent(` + void applyGsplatSkinning( + int numSplats, int numBones, + usampler2DArray skinTexture, sampler2D boneTexture, + int splatIndex, inout vec3 center, inout vec4 quaternion + ) { + if ((splatIndex < 0) || (splatIndex >= numSplats)) { + return; + } + + uvec4 skinData = texelFetch(skinTexture, splatTexCoord(splatIndex), 0); + + float weights[4]; + weights[0] = float(skinData.x & 0xffu) / 255.0; + weights[1] = float(skinData.y & 0xffu) / 255.0; + weights[2] = float(skinData.z & 0xffu) / 255.0; + weights[3] = float(skinData.w & 0xffu) / 255.0; + + uint boneIndices[4]; + boneIndices[0] = (skinData.x >> 8u) & 0xffu; + boneIndices[1] = (skinData.y >> 8u) & 0xffu; + boneIndices[2] = (skinData.z >> 8u) & 0xffu; + boneIndices[3] = (skinData.w >> 8u) & 0xffu; + + vec4 quat = vec4(0.0); + vec4 dual = vec4(0.0); + for (int i = 0; i < 4; i++) { + if (weights[i] > 0.0) { + int boneIndex = int(boneIndices[i]); + vec4 boneQuat = vec4(0.0, 0.0, 0.0, 1.0); + vec4 boneDual = vec4(0.0); + if (boneIndex < numBones) { + boneQuat = texelFetch(boneTexture, ivec2(2, boneIndex), 0); + boneDual = texelFetch(boneTexture, ivec2(3, boneIndex), 0); + } + + if ((i > 0) && (dot(quat, boneQuat) < 0.0)) { + // Flip sign if next blend is pointing in the opposite direction + boneQuat = -boneQuat; + boneDual = -boneDual; + } + quat += weights[i] * boneQuat; + dual += weights[i] * boneDual; + } + } + + // Normalize dual quaternion + float norm = length(quat); + quat /= norm; + dual /= norm; + vec3 translate = vec3( + 2.0 * (-dual.w * quat.x + dual.x * quat.w - dual.y * quat.z + dual.z * quat.y), + 2.0 * (-dual.w * quat.y + dual.x * quat.z + dual.y * quat.w - dual.z * quat.x), + 2.0 * (-dual.w * quat.z - dual.x * quat.y + dual.y * quat.x + dual.z * quat.w) + ); + + center = quatVec(quat, center) + translate; + quaternion = quatQuat(quat, quaternion); + } +`); +function applyGsplatSkinning(gsplat, skinning) { + const dyno2 = new Dyno({ + inTypes: { gsplat: Gsplat, skinning: GsplatSkinning }, + outTypes: { gsplat: Gsplat }, + globals: () => [defineGsplatSkinning, defineApplyGsplatSkinning], + inputs: { gsplat, skinning }, + statements: ({ inputs, outputs }) => { + const { skinning: skinning2 } = inputs; + const { gsplat: gsplat2 } = outputs; + return unindentLines(` + ${gsplat2} = ${inputs.gsplat}; + if (isGsplatActive(${gsplat2}.flags)) { + applyGsplatSkinning( + ${skinning2}.numSplats, ${skinning2}.numBones, + ${skinning2}.skinTexture, ${skinning2}.boneTexture, + ${gsplat2}.index, ${gsplat2}.center, ${gsplat2}.quaternion + ); + } + `); + } + }); + return dyno2.outputs.gsplat; +} +function constructGrid({ + // PackedSplats object to add splats to + splats, + // min and max box extents of the grid + extents, + // step size along each grid axis + stepSize = 1, + // spherical radius of each Gsplat + pointRadius = 0.01, + // relative size of the "shadow copy" of each Gsplat placed behind it + pointShadowScale = 2, + // Gsplat opacity + opacity = 1, + // Gsplat color (THREE.Color) or function to set color for position: + // ((THREE.Color, THREE.Vector3) => void) (default: RGB-modulated grid) + color +}) { + const EPSILON = 1e-6; + const center = new THREE__namespace.Vector3(); + const scales = new THREE__namespace.Vector3(); + const quaternion = new THREE__namespace.Quaternion(0, 0, 0, 1); + if (color == null) { + color = (color2, point) => color2.set( + 0.55 + 0.45 * Math.cos(point.x * 1), + 0.55 + 0.45 * Math.cos(point.y * 1), + 0.55 + 0.45 * Math.cos(point.z * 1) + ); + } + const pointColor = new THREE__namespace.Color(); + for (let z = extents.min.z; z < extents.max.z + EPSILON; z += stepSize) { + for (let y = extents.min.y; y < extents.max.y + EPSILON; y += stepSize) { + for (let x = extents.min.x; x < extents.max.x + EPSILON; x += stepSize) { + center.set(x, y, z); + for (let layer = 0; layer < 2; ++layer) { + scales.setScalar(pointRadius * (layer ? 1 : pointShadowScale)); + if (!layer) { + pointColor.setScalar(0); + } else if (typeof color === "function") { + color(pointColor, center); + } else { + pointColor.copy(color); + } + splats.pushSplat(center, scales, quaternion, opacity, pointColor); + } + } + } + } +} +function constructAxes({ + // PackedSplats object to add splats to + splats, + // scale (Gsplat scale along axis) + scale = 0.25, + // radius of the axes (Gsplat scale orthogonal to axis) + axisRadius = 75e-4, + // relative size of the "shadow copy" of each Gsplat placed behind it + axisShadowScale = 2, + // origins of the axes (default single axis at origin) + origins = [new THREE__namespace.Vector3()] +}) { + const center = new THREE__namespace.Vector3(); + const scales = new THREE__namespace.Vector3(); + const quaternion = new THREE__namespace.Quaternion(0, 0, 0, 1); + const color = new THREE__namespace.Color(); + const opacity = 1; + for (const origin of origins) { + for (let axis = 0; axis < 3; ++axis) { + center.set( + origin.x + (axis === 0 ? scale : 0), + origin.y + (axis === 1 ? scale : 0), + origin.z + (axis === 2 ? scale : 0) + ); + for (let layer = 0; layer < 2; ++layer) { + scales.set( + (axis === 0 ? scale : axisRadius) * (layer ? 1 : axisShadowScale), + (axis === 1 ? scale : axisRadius) * (layer ? 1 : axisShadowScale), + (axis === 2 ? scale : axisRadius) * (layer ? 1 : axisShadowScale) + ); + color.setRGB( + layer === 0 ? 0 : axis === 0 ? 1 : 0, + layer === 0 ? 0 : axis === 1 ? 1 : 0, + layer === 0 ? 0 : axis === 2 ? 1 : 0 + ); + splats.pushSplat(center, scales, quaternion, opacity, color); + } + } + } +} +function constructSpherePoints({ + // PackedSplats object to add splats to + splats, + // center of the sphere (default: origin) + origin = new THREE__namespace.Vector3(), + // radius of the sphere + radius = 1, + // maximum depth of recursion for subdividing the sphere + // Warning: Gsplat count grows exponentially with depth + maxDepth = 3, + // filter function to apply to each point, for example to select + // points in a certain direction or other function ((THREE.Vector3) => boolean) + // (default: null) + filter = null, + // radius of each oriented Gsplat + pointRadius = 0.02, + // flatness of each oriented Gsplat + pointThickness = 1e-3, + // color of each Gsplat (THREE.Color) or function to set color for point: + // ((THREE.Color, THREE.Vector3) => void) (default: white) + color = new THREE__namespace.Color(1, 1, 1) +}) { + const pointsHash = {}; + function addPoint(p) { + if (filter && !filter(p)) { + return; + } + const key = `${p.x},${p.y},${p.z}`; + if (!pointsHash[key]) { + pointsHash[key] = p; + } + } + function recurse(depth, p0, p1, p2) { + addPoint(p0); + addPoint(p1); + addPoint(p2); + if (depth >= maxDepth) { + return; + } + const p01 = new THREE__namespace.Vector3().addVectors(p0, p1).normalize(); + const p12 = new THREE__namespace.Vector3().addVectors(p1, p2).normalize(); + const p20 = new THREE__namespace.Vector3().addVectors(p2, p0).normalize(); + recurse(depth + 1, p0, p01, p20); + recurse(depth + 1, p01, p1, p12); + recurse(depth + 1, p20, p12, p2); + recurse(depth + 1, p01, p12, p20); + } + for (const x of [-1, 1]) { + for (const y of [-1, 1]) { + for (const z of [-1, 1]) { + const p0 = new THREE__namespace.Vector3(x, 0, 0); + const p1 = new THREE__namespace.Vector3(0, y, 0); + const p2 = new THREE__namespace.Vector3(0, 0, z); + recurse(0, p0, p1, p2); + } + } + } + const points = Object.values(pointsHash); + const scales = new THREE__namespace.Vector3(pointRadius, pointRadius, pointThickness); + const quaternion = new THREE__namespace.Quaternion(); + const pointColor = typeof color === "function" ? new THREE__namespace.Color() : color; + for (const point of points) { + quaternion.setFromUnitVectors(new THREE__namespace.Vector3(0, 0, -1), point); + if (typeof color === "function") { + color(pointColor, point); + } + point.multiplyScalar(radius); + point.add(origin); + splats.pushSplat(point, scales, quaternion, 1, pointColor); + } +} +function textSplats({ + // text string to display + text, + // browser font to render text with (default: "Arial") + font, + // font size in pixels/Gsplats (default: 32) + fontSize, + // SplatMesh.recolor tint assuming white Gsplats (default: white) + color, + // Individual Gsplat color (default: white) + rgb, + // Gsplat radius (default: 0.8 covers 1-unit spacing well) + dotRadius, + // text alignment: "left", "center", "right", "start", "end" (default: "start") + textAlign, + // line spacing multiplier, lines delimited by "\n" (default: 1.0) + lineHeight +}) { + font = font ?? "Arial"; + fontSize = fontSize ?? 32; + color = color ?? new THREE__namespace.Color(1, 1, 1); + dotRadius = dotRadius ?? 0.8; + textAlign = textAlign ?? "start"; + lineHeight = lineHeight ?? 1; + const lines = text.split("\n"); + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + if (!ctx) { + throw new Error("Failed to create canvas context"); + } + ctx.font = `${fontSize}px ${font}`; + ctx.textAlign = textAlign; + const metrics = ctx.measureText(""); + const fontHeight = metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent; + let minLeft = Number.POSITIVE_INFINITY; + let maxRight = Number.NEGATIVE_INFINITY; + let minTop = Number.POSITIVE_INFINITY; + let maxBottom = Number.NEGATIVE_INFINITY; + for (let line = 0; line < lines.length; ++line) { + const metrics2 = ctx.measureText(lines[line]); + const y = fontHeight * lineHeight * line; + minLeft = Math.min(minLeft, -metrics2.actualBoundingBoxLeft); + maxRight = Math.max(maxRight, metrics2.actualBoundingBoxRight); + minTop = Math.min(minTop, y - metrics2.actualBoundingBoxAscent); + maxBottom = Math.max(maxBottom, y + metrics2.actualBoundingBoxDescent); + } + const originLeft = Math.floor(minLeft); + const originTop = Math.floor(minTop); + const width = Math.ceil(maxRight) - originLeft; + const height = Math.ceil(maxBottom) - originTop; + canvas.width = width; + canvas.height = height; + ctx.font = `${fontSize}px ${font}`; + ctx.textAlign = textAlign; + ctx.textBaseline = "alphabetic"; + ctx.fillStyle = "#FFFFFF"; + for (let i = 0; i < lines.length; ++i) { + const y = fontHeight * lineHeight * i - originTop; + ctx.fillText(lines[i], -originLeft, y); + } + const imageData = ctx.getImageData(0, 0, width, height); + const rgba = new Uint8Array(imageData.data.buffer); + const splats = new PackedSplats(); + const center = new THREE__namespace.Vector3(); + const scales = new THREE__namespace.Vector3().setScalar(dotRadius); + const quaternion = new THREE__namespace.Quaternion(0, 0, 0, 1); + rgb = rgb ?? new THREE__namespace.Color(1, 1, 1); + let offset = 0; + for (let y = 0; y < height; ++y) { + for (let x = 0; x < width; ++x) { + const a = rgba[offset + 3]; + if (a > 0) { + const opacity = a / 255; + center.set(x - 0.5 * (width - 1), 0.5 * (height - 1) - y, 0); + splats.pushSplat(center, scales, quaternion, opacity, rgb); + } + offset += 4; + } + } + const mesh = new SplatMesh({ packedSplats: splats }); + mesh.recolor = color; + return mesh; +} +function imageSplats({ + // URL of the image to convert to splats (example: `url: "./image.png"`) + url, + // Radius of each Gsplat, default covers 1-unit spacing well (default: 0.8) + dotRadius, + // Subsampling factor for the image. Higher values reduce resolution, + // for example 2 will halve the width and height by averaging (default: 1) + subXY, + // Optional callback function to modify each Gsplat before it's added. + // Return null to skip adding the Gsplat, or a number to set the opacity + // and add the Gsplat with parameter values in the objects center, rgba etc. were + // passed into the forEachSplat callback. Ending the callback in `return opacity;` + // will retain the original opacity. + // ((width: number, height: number, index: number, center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color) => number | null) + forEachSplat +}) { + dotRadius = dotRadius ?? 0.8; + subXY = Math.max(1, Math.floor(subXY ?? 1)); + return new SplatMesh({ + constructSplats: async (splats) => { + return new Promise((resolve, reject) => { + const img = new Image(); + img.onerror = reject; + img.onload = () => { + const { width, height } = img; + const canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext("2d"); + if (!ctx) { + reject(new Error("Failed to create canvas context")); + return; + } + ctx.imageSmoothingEnabled = true; + ctx.imageSmoothingQuality = "high"; + const destWidth = Math.round(width / subXY); + const destHeight = Math.round(height / subXY); + ctx.drawImage(img, 0, 0, destWidth, destHeight); + try { + const imageData = ctx.getImageData(0, 0, destWidth, destHeight); + const rgba = new Uint8Array(imageData.data.buffer); + const center = new THREE__namespace.Vector3(); + const scales = new THREE__namespace.Vector3().setScalar(dotRadius); + const quaternion = new THREE__namespace.Quaternion(0, 0, 0, 1); + const rgb = new THREE__namespace.Color(); + let index = 0; + for (let y = 0; y < destHeight; ++y) { + for (let x = 0; x < destWidth; ++x) { + const offset = index * 4; + const a = rgba[offset + 3]; + if (a > 0) { + let opacity = a / 255; + rgb.set( + rgba[offset + 0] / 255, + rgba[offset + 1] / 255, + rgba[offset + 2] / 255 + ); + center.set( + x - 0.5 * (destWidth - 1), + 0.5 * (destHeight - 1) - y, + 0 + ); + scales.setScalar(dotRadius); + quaternion.set(0, 0, 0, 1); + let push = true; + if (forEachSplat) { + const maybeOpacity = forEachSplat( + destWidth, + destHeight, + index, + center, + scales, + quaternion, + opacity, + rgb + ); + opacity = maybeOpacity ?? opacity; + push = maybeOpacity !== null; + } + if (push) { + splats.pushSplat(center, scales, quaternion, opacity, rgb); + } + } + index += 1; + } + } + resolve(); + } catch (error) { + reject(error); + } + }; + img.src = url; + }); + } + }); +} +function staticBox({ + box, + cells, + dotScale, + color, + opacity +}) { + cells.x = Math.max(1, Math.round(cells.x)); + cells.y = Math.max(1, Math.round(cells.y)); + cells.z = Math.max(1, Math.round(cells.z)); + opacity = opacity ?? 1; + const numSplats = cells.x * cells.y * cells.z; + const dynoX = dynoConst("int", cells.x); + const dynoY = dynoConst("int", cells.y); + dynoConst("int", cells.z); + const dynoTime = dynoFloat(0); + const generator = new SplatGenerator({ + numSplats, + generator: dynoBlock( + { index: "int" }, + { gsplat: Gsplat }, + ({ index }) => { + if (!index) { + throw new Error("index is undefined"); + } + const cellX = imod(index, dynoX); + const index2 = div(index, dynoX); + const cellY = imod(index2, dynoY); + const cellZ = div(index2, dynoY); + const cell = combine({ + vectorType: "ivec3", + x: cellX, + y: cellY, + z: cellZ + }); + const intTime = floatBitsToInt(dynoTime); + const inputs = combine({ vectorType: "ivec2", x: index, y: intTime }); + const random = hashVec3(inputs); + const min2 = dynoConst("vec3", box.min); + const max2 = dynoConst("vec3", box.max); + const size = sub(max2, min2); + const coord = div(add(vec3(cell), random), dynoConst("vec3", cells)); + let r; + let g; + let b; + if (color) { + r = dynoConst("float", color.r); + g = dynoConst("float", color.g); + b = dynoConst("float", color.b); + } else { + ({ r, g, b } = split(coord).outputs); + } + const rgba = combine({ + vectorType: "vec4", + r, + g, + b, + a: dynoConst("float", opacity) + }); + const center = add(min2, mul(size, coord)); + const scales = vec3(dynoConst("float", dotScale)); + const quaternion = dynoConst("vec4", new THREE__namespace.Quaternion(0, 0, 0, 1)); + let gsplat = combineGsplat({ + flags: dynoLiteral("uint", "GSPLAT_FLAG_ACTIVE"), + index, + center, + scales, + quaternion, + rgba + }); + gsplat = transformer.modify(gsplat); + return { gsplat }; + }, + { + globals: () => [defineGsplat] + } + ), + update: ({ time }) => { + dynoTime.value = time; + transformer.update(generator); + generator.updateVersion(); + } + }); + const transformer = new SplatTransformer(); + return generator; +} +const DEFAULT_SNOW = { + box: new THREE__namespace.Box3( + new THREE__namespace.Vector3(-1, -1, -1), + new THREE__namespace.Vector3(1, 1, 1) + ), + density: 100, + fallDirection: new THREE__namespace.Vector3(-1, -3, 1).normalize(), + fallVelocity: 0.02, + wanderScale: 0.04, + wanderVariance: 2, + color1: new THREE__namespace.Color(1, 1, 1), + color2: new THREE__namespace.Color(0.5, 0.5, 1), + minScale: 1e-3, + maxScale: 5e-3, + anisoScale: new THREE__namespace.Vector3(1, 1, 1) +}; +const DEFAULT_RAIN = { + box: new THREE__namespace.Box3( + new THREE__namespace.Vector3(-2, -1, -2), + new THREE__namespace.Vector3(2, 5, 2) + ), + density: 10, + fallDirection: new THREE__namespace.Vector3(0, -1, 0), + fallVelocity: 2, + wanderScale: 0.1, + wanderVariance: 1, + color1: new THREE__namespace.Color(1, 1, 1), + color2: new THREE__namespace.Color(0.25, 0.25, 0.5), + minScale: 5e-3, + maxScale: 0.01, + anisoScale: new THREE__namespace.Vector3(0.1, 1, 0.1) +}; +function snowBox({ + // min and max box extents of the snowBox + box, + // minimum y-coordinate to clamp particle position, which can be used to + // fake hitting a ground plane and lingering there for a bit + minY, + // number of Gsplats to generate (default: calculated from box and density) + numSplats, + // density of Gsplats per unit volume (default: 100) + density, + // The xyz anisotropic scale of the Gsplat, which can be used for example + // to elongate rain particles (default: (1, 1, 1)) + anisoScale, + // Minimum Gsplat particle scale (default: 0.001) + minScale, + // Maximum Gsplat particle scale (default: 0.005) + maxScale, + // The average direction of fall (default: (0, -1, 0)) + fallDirection, + // The average speed of the fall (multiplied with fallDirection) (default: 0.02) + fallVelocity, + // The world scale of wandering overlay motion (default: 0.01) + wanderScale, + // Controls how uniformly the particles wander in sync, more variance mean + // more randomness in the motion (default: 2) + wanderVariance, + // Color 1 of the two colors interpolated between (default: (1, 1, 1)) + color1, + // Color 2 of the two colors interpolated between (default: (0.5, 0.5, 1)) + color2, + // The base opacity of the Gsplats (default: 1) + opacity, + // Optional callback function to call each frame. + onFrame +}) { + box = box ?? new THREE__namespace.Box3(new THREE__namespace.Vector3(-1, -1, -1), new THREE__namespace.Vector3(1, 1, 1)); + const volume = (box.max.x - box.min.x) * (box.max.y - box.min.y) * (box.max.z - box.min.z); + density = density ?? 100; + numSplats = numSplats ?? Math.max(1, Math.min(1e6, Math.round(volume * density))); + const dynoMinScale = dynoFloat(minScale ?? 1e-3); + const dynoMaxScale = dynoFloat(maxScale ?? 5e-3); + const dynoAnisoScale = dynoVec3( + ((anisoScale == null ? void 0 : anisoScale.clone()) ?? new THREE__namespace.Vector3(1, 1, 1)).normalize() + ); + const dynoFallDirection = dynoVec3( + (fallDirection ?? new THREE__namespace.Vector3(0, -1, 0)).normalize() + ); + const dynoFallVelocity = dynoFloat(fallVelocity ?? 0.02); + const dynoWanderScale = dynoFloat(wanderScale ?? 0.01); + const dynoWanderVariance = dynoFloat(wanderVariance ?? 2); + const dynoColor1 = dynoVec3(color1 ?? new THREE__namespace.Color(1, 1, 1)); + const dynoColor2 = dynoVec3(color2 ?? new THREE__namespace.Color(0.5, 0.5, 1)); + const dynoOpacity = dynoFloat(opacity ?? 1); + const dynoTime = dynoFloat(0); + const globalOffset = dynoVec3(new THREE__namespace.Vector3(0, 0, 0)); + const dynoMin = dynoVec3(box.min); + const dynoMax = dynoVec3(box.max); + const dynoMinY = dynoFloat(minY ?? Number.NEGATIVE_INFINITY); + const minMax = sub(dynoMax, dynoMin); + const snow = new SplatGenerator({ + numSplats, + generator: dynoBlock( + { index: "int" }, + { gsplat: Gsplat }, + ({ index }) => { + if (!index) { + throw new Error("index not defined"); + } + const random = hashVec4(index); + const randomW = split(random).outputs.w; + let position = vec3(random); + let size = fract(mul(randomW, dynoConst("float", 100))); + size = sin(mul(dynoLiteral("float", "PI"), size)); + size = add(dynoMinScale, mul(size, sub(dynoMaxScale, dynoMinScale))); + const scales = mul(size, dynoAnisoScale); + const intensity = fract(mul(randomW, dynoConst("float", 10))); + const hue = fract(randomW); + const color = mix(dynoColor1, dynoColor2, hue); + const rgb = mul(color, intensity); + const random2 = hashVec4( + combine({ + vectorType: "ivec2", + x: index, + y: dynoConst("int", 6837) + }) + ); + let perturb = vec3(random2); + let timeOffset = mul(split(random2).outputs.w, dynoWanderVariance); + timeOffset = add(dynoTime, timeOffset); + position = add(position, globalOffset); + const modulo = mod( + position, + dynoConst("vec3", new THREE__namespace.Vector3(1, 1, 1)) + ); + position = add(dynoMin, mul(minMax, modulo)); + const quaternion = dynoConst("vec4", new THREE__namespace.Quaternion(0, 0, 0, 1)); + perturb = sin(add(vec3(timeOffset), perturb)); + perturb = mul(perturb, dynoWanderScale); + let center = add(position, perturb); + let centerY = split(center).outputs.y; + centerY = max(dynoMinY, centerY); + center = combine({ vector: center, y: centerY }); + let gsplat = combineGsplat({ + flags: dynoLiteral("uint", "GSPLAT_FLAG_ACTIVE"), + index, + center, + scales, + quaternion, + rgb, + opacity: dynoOpacity + }); + gsplat = transformer.modify(gsplat); + return { gsplat }; + }, + { + globals: () => [defineGsplat] + } + ), + update: ({ object, time, deltaTime }) => { + dynoTime.value = time; + transformer.update(snow); + const fallDelta = dynoFallDirection.value.clone().multiplyScalar(dynoFallVelocity.value * deltaTime); + globalOffset.value.add(fallDelta); + object.visible = dynoOpacity.value > 0; + onFrame == null ? void 0 : onFrame({ object, time, deltaTime }); + snow.updateVersion(); + } + }); + const transformer = new SplatTransformer(); + return { + snow, + min: dynoMin, + max: dynoMax, + minY: dynoMinY, + color1: dynoColor1, + color2: dynoColor2, + opacity: dynoOpacity, + fallVelocity: dynoFallVelocity, + wanderVariance: dynoWanderVariance, + wanderScale: dynoWanderScale, + fallDirection: dynoFallDirection, + minScale: dynoMinScale, + maxScale: dynoMaxScale, + anisoScale: dynoAnisoScale + }; +} +const generators = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DEFAULT_RAIN, + DEFAULT_SNOW, + snowBox, + staticBox +}, Symbol.toStringTag, { value: "Module" })); +const _VRButton = class _VRButton { + static createButton(renderer, sessionInit = {}) { + const navigatorXr = navigator.xr; + if (!navigatorXr) { + return null; + } + const xr = navigatorXr; + const button = document.createElement("button"); + renderer.xr.enabled = true; + renderer.xr.setReferenceSpaceType("local"); + function showEnterVR() { + let currentSession = null; + async function onSessionStarted(session) { + console.log("onSessionStarted"); + session.addEventListener("end", onSessionEnded); + await renderer.xr.setSession(session); + button.textContent = "EXIT VR"; + currentSession = session; + } + function onSessionEnded() { + console.log("onSessionEnded"); + currentSession == null ? void 0 : currentSession.removeEventListener("end", onSessionEnded); + button.textContent = "ENTER VR"; + currentSession = null; + } + button.style.display = ""; + button.style.cursor = "pointer"; + button.style.left = "calc(50% - 100px)"; + button.style.width = "200px"; + button.style.height = "100px"; + button.textContent = "ENTER VR"; + const sessionOptions = { + ...sessionInit, + optionalFeatures: [ + // "local-floor", + // "bounded-floor", + // "layers", + ...sessionInit.optionalFeatures || [] + ] + }; + button.onmouseenter = () => { + button.style.opacity = "1.0"; + }; + button.onmouseleave = () => { + button.style.opacity = "0.5"; + }; + button.onclick = () => { + if (currentSession === null) { + console.log("requesting session"); + xr.requestSession("immersive-vr", sessionOptions).then( + onSessionStarted + ); + } else { + console.log("ending session"); + currentSession.end(); + } + }; + } + function disableButton() { + button.style.display = "none"; + button.style.cursor = "auto"; + button.style.left = "calc(50% - 75px)"; + button.style.width = "150px"; + button.onmouseenter = null; + button.onmouseleave = null; + button.onclick = null; + } + function showWebXRNotFound() { + disableButton(); + button.textContent = "VR NOT SUPPORTED"; + } + function showVRNotAllowed(exception) { + disableButton(); + console.warn( + "Exception when trying to call xr.isSessionSupported", + exception + ); + button.textContent = "VR NOT ALLOWED"; + } + function stylizeElement(element) { + element.style.position = "absolute"; + element.style.bottom = "20px"; + element.style.padding = "12px 6px"; + element.style.border = "1px solid #fff"; + element.style.borderRadius = "4px"; + element.style.background = "rgba(0,0,0,0.1)"; + element.style.color = "#fff"; + element.style.font = "normal 13px sans-serif"; + element.style.textAlign = "center"; + element.style.opacity = "0.5"; + element.style.outline = "none"; + element.style.zIndex = "999"; + } + button.id = "VRButton"; + button.style.display = "none"; + stylizeElement(button); + xr.isSessionSupported("immersive-vr").then((supported) => { + supported ? showEnterVR() : showWebXRNotFound(); + if (supported && _VRButton.xrSessionIsGranted) { + button.click(); + } + }).catch(showVRNotAllowed); + return button; + } + static registerSessionGrantedListener() { + const navigatorXr = navigator.xr; + if (!navigatorXr) { + return null; + } + const xr = navigatorXr; + if (/WebXRViewer\//i.test(navigator.userAgent)) return; + xr.addEventListener("sessiongranted", () => { + _VRButton.xrSessionIsGranted = true; + }); + } +}; +_VRButton.xrSessionIsGranted = false; +let VRButton = _VRButton; +VRButton.registerSessionGrantedListener(); +const DEFAULT_MOVE_INERTIA$1 = 0.5; +const DEFAULT_ROTATE_INERTIA$1 = 0.5; +const TOUCH_BIAS = 0; +var JointEnum = /* @__PURE__ */ ((JointEnum2) => { + JointEnum2["w"] = "wrist"; + JointEnum2["t0"] = "thumb-metacarpal"; + JointEnum2["t1"] = "thumb-phalanx-proximal"; + JointEnum2["t2"] = "thumb-phalanx-distal"; + JointEnum2["t3"] = "thumb-tip"; + JointEnum2["i0"] = "index-finger-metacarpal"; + JointEnum2["i1"] = "index-finger-phalanx-proximal"; + JointEnum2["i2"] = "index-finger-phalanx-intermediate"; + JointEnum2["i3"] = "index-finger-phalanx-distal"; + JointEnum2["i4"] = "index-finger-tip"; + JointEnum2["m0"] = "middle-finger-metacarpal"; + JointEnum2["m1"] = "middle-finger-phalanx-proximal"; + JointEnum2["m2"] = "middle-finger-phalanx-intermediate"; + JointEnum2["m3"] = "middle-finger-phalanx-distal"; + JointEnum2["m4"] = "middle-finger-tip"; + JointEnum2["r0"] = "ring-finger-metacarpal"; + JointEnum2["r1"] = "ring-finger-phalanx-proximal"; + JointEnum2["r2"] = "ring-finger-phalanx-intermediate"; + JointEnum2["r3"] = "ring-finger-phalanx-distal"; + JointEnum2["r4"] = "ring-finger-tip"; + JointEnum2["p0"] = "pinky-finger-metacarpal"; + JointEnum2["p1"] = "pinky-finger-phalanx-proximal"; + JointEnum2["p2"] = "pinky-finger-phalanx-intermediate"; + JointEnum2["p3"] = "pinky-finger-phalanx-distal"; + JointEnum2["p4"] = "pinky-finger-tip"; + return JointEnum2; +})(JointEnum || {}); +const JOINT_IDS = Object.keys(JointEnum); +const NUM_JOINTS = JOINT_IDS.length; +const JOINT_INDEX = { + w: 0, + t0: 1, + t1: 2, + t2: 3, + t3: 4, + i0: 5, + i1: 6, + i2: 7, + i3: 8, + i4: 9, + m0: 10, + m1: 11, + m2: 12, + m3: 13, + m4: 14, + r0: 15, + r1: 16, + r2: 17, + r3: 18, + r4: 19, + p0: 20, + p1: 21, + p2: 22, + p3: 23, + p4: 24 +}; +const JOINT_RADIUS = { + w: 0.02, + t0: 0.02, + t1: 0.014, + t2: 0.0115, + t3: 85e-4, + i0: 0.022, + i1: 0.012, + i2: 85e-4, + i3: 75e-4, + i4: 65e-4, + m0: 0.021, + m1: 0.012, + m2: 8e-3, + m3: 75e-4, + m4: 65e-4, + r0: 0.019, + r1: 0.011, + r2: 75e-4, + r3: 7e-3, + r4: 6e-3, + p0: 0.012, + p1: 0.01, + p2: 7e-3, + p3: 65e-4, + p4: 55e-4 +}; +const JOINT_SEGMENTS = [ + ["w", "t0", "t1", "t2", "t3"], + ["w", "i0", "i1", "i2", "i3", "i4"], + ["w", "m0", "m1", "m2", "m3", "m4"], + ["w", "r0", "r1", "r2", "r3", "r4"], + ["w", "p0", "p1", "p2", "p3", "p4"] +]; +const JOINT_SEGMENT_STEPS = [ + [8, 10, 8, 6], + [8, 19, 14, 8, 6], + [8, 19, 14, 8, 6], + [8, 19, 14, 8, 6], + [8, 19, 14, 8, 6] +]; +const JOINT_TIPS = ["t3", "i4", "m4", "r4", "p4"]; +const FINGER_TIPS = ["i4", "m4", "r4", "p4"]; +var Hand = /* @__PURE__ */ ((Hand2) => { + Hand2["left"] = "left"; + Hand2["right"] = "right"; + return Hand2; +})(Hand || {}); +const HANDS = Object.keys(Hand); +class XrHands { + constructor() { + this.hands = {}; + this.last = {}; + this.values = {}; + this.tests = {}; + this.lastTests = {}; + this.updated = false; + } + update({ xr, xrFrame }) { + const xrSession = xr.getSession(); + if (!xrSession) { + return; + } + const referenceSpace = xr.getReferenceSpace(); + if (!referenceSpace) { + return; + } + if (!xrFrame.getJointPose) { + return; + } + this.last = this.hands; + this.lastTests = this.tests; + this.hands = {}; + this.values = {}; + this.tests = {}; + for (const inputSource of xrSession.inputSources) { + if (!inputSource.hand) { + continue; + } + const hand = inputSource.handedness; + this.hands[hand] = {}; + for (const jointId of JOINT_IDS) { + const jointSpace = inputSource.hand.get(JointEnum[jointId]); + if (jointSpace) { + const jointPose = xrFrame.getJointPose(jointSpace, referenceSpace); + if (jointPose) { + const { position, orientation } = jointPose.transform; + this.hands[hand][jointId] = { + position: new THREE.Vector3(position.x, position.y, position.z), + quaternion: new THREE.Quaternion( + orientation.x, + orientation.y, + orientation.z, + orientation.w + ), + radius: jointPose.radius || 1e-3 + }; + } + } + } + } + for (const hand of HANDS) { + for (const { key, value } of [ + { key: `${hand}AllTips`, value: this.allTipsTouching(hand) }, + { + key: `${hand}IndexThumb`, + value: this.touching(hand, "i4", hand, "t3") + }, + { + key: `${hand}MiddleThumb`, + value: this.touching(hand, "m4", hand, "t3") + }, + { + key: `${hand}RingThumb`, + value: this.touching(hand, "r4", hand, "t3") + }, + { + key: `${hand}PinkyThumb`, + value: this.touching(hand, "p4", hand, "t3") + }, + { key: `${hand}TriTips`, value: this.triTipsTouching(hand) } + ]) { + this.values[key] = value; + this.tests[key] = value === 1 ? true : value === 0 ? false : this.lastTests[key] ?? false; + } + } + } + makeGhostMesh() { + const center = new THREE.Vector3(); + const scales = new THREE.Vector3(0.01, 0.01, 0.01); + const quaternion = new THREE.Quaternion(0, 0, 0, 1); + const color = new THREE.Color(1, 1, 1); + const CYCLE = Math.PI * 3; + const WHITE = new THREE.Color(1, 1, 1); + let opacity = 1; + const mesh = new SplatMesh({ + onFrame: () => { + let splatIndex = 0; + for (const handedness of HANDS) { + const active = this.values[`${handedness}MiddleThumb`]; + const xrHand = this.hands[handedness]; + for (const [index, segment] of JOINT_SEGMENTS.entries()) { + for (let i = 1; i < segment.length; ++i) { + const segmentSplats = JOINT_SEGMENT_STEPS[index][i - 1] * 2; + const lastSegment = i + 1 === segment.length; + const jointA = xrHand == null ? void 0 : xrHand[segment[i - 1]]; + const jointB = xrHand == null ? void 0 : xrHand[segment[i]]; + for (let j = 0; j < segmentSplats; ++j) { + const t = (j + 0.5) / segmentSplats; + opacity = 0; + if (jointA && jointB) { + center.copy(jointA.position).lerp(jointB.position, t); + quaternion.copy(jointA.quaternion).slerp(jointB.quaternion, t); + const radiusA = JOINT_RADIUS[segment[i - 1]]; + const radiusB = JOINT_RADIUS[segment[i]]; + let radius = (1 - t) * radiusA + t * radiusB; + if (lastSegment && t > 0.8) { + radius *= Math.sqrt(1 - ((t - 0.8) / 0.2) ** 2); + } + scales.set(0.65 * radius, 0.5 * radius, 3e-3); + color.set( + 0.55 + 0.45 * Math.sin(center.x * CYCLE), + 0.55 + 0.45 * Math.sin(center.y * CYCLE), + 0.55 + 0.45 * Math.sin(center.z * CYCLE) + ); + if (handedness === "right") { + color.set(1 - color.r, 1 - color.g, 1 - color.b); + } + color.lerp(WHITE, active); + opacity = 0.75; + } + mesh.packedSplats.setSplat( + splatIndex, + center, + scales, + quaternion, + opacity, + color + ); + splatIndex += 1; + } + } + } + } + mesh.packedSplats.numSplats = splatIndex; + mesh.packedSplats.needsUpdate = true; + mesh.numSplats = splatIndex; + } + }); + return mesh; + } + distance(handA, jointA, handB, jointB, last = false) { + const hA = last ? this.last[handA] : this.hands[handA]; + const hB = last ? this.last[handB] : this.hands[handB]; + const jA = hA == null ? void 0 : hA[jointA]; + const jB = hB == null ? void 0 : hB[jointB]; + if (!jA || !jB) { + return Number.POSITIVE_INFINITY; + } + return jA.position.distanceTo(jB.position); + } + separation(handA, jointA, handB, jointB, last = false) { + const d = this.distance(handA, jointA, handB, jointB, last); + if (d === Number.POSITIVE_INFINITY) { + return Number.POSITIVE_INFINITY; + } + return d - JOINT_RADIUS[jointA] - JOINT_RADIUS[jointB]; + } + touching(handA, jointA, handB, jointB, last = false) { + const d = this.separation(handA, jointA, handB, jointB, last); + if (d === Number.POSITIVE_INFINITY) { + return Number.POSITIVE_INFINITY; + } + return 1 - Math.max(0, Math.min(1, d / 0.01 - TOUCH_BIAS)); + } + allTipsTouching(hand, last = false) { + return Math.min( + this.touching(hand, "t3", hand, "i4", last), + this.touching(hand, "i4", hand, "m4", last), + this.touching(hand, "m4", hand, "r4", last), + this.touching(hand, "r4", hand, "p4", last) + // this.touching(hand, "p4", hand, "t3", last), + ); + } + triTipsTouching(hand, last = false) { + return Math.min( + this.touching(hand, "t3", hand, "i4", last), + this.touching(hand, "i4", hand, "m4", last), + this.touching(hand, "m4", hand, "t3", last) + ); + } +} +class HandMovement { + constructor({ + xrHands, + control, + moveInertia, + rotateInertia + }) { + this.lastGrip = {}; + this.lastPivot = new THREE.Vector3(); + this.rotateVelocity = 0; + this.velocity = new THREE.Vector3(); + this.xrHands = xrHands; + this.control = control; + this.moveInertia = moveInertia ?? DEFAULT_MOVE_INERTIA$1; + this.rotateInertia = rotateInertia ?? DEFAULT_ROTATE_INERTIA$1; + } + update(deltaTime) { + var _a2, _b2, _c, _d, _e; + const grip = {}; + for (const handedness of HANDS) { + const hand = this.xrHands.hands[handedness]; + if (hand && this.xrHands.tests[`${handedness}MiddleThumb`]) { + grip[handedness] = new THREE.Vector3().add(((_a2 = hand.t3) == null ? void 0 : _a2.position) ?? new THREE.Vector3()).add(((_b2 = hand.i4) == null ? void 0 : _b2.position) ?? new THREE.Vector3()).add(((_c = hand.m4) == null ? void 0 : _c.position) ?? new THREE.Vector3()).add(((_d = hand.r4) == null ? void 0 : _d.position) ?? new THREE.Vector3()).add(((_e = hand.p4) == null ? void 0 : _e.position) ?? new THREE.Vector3()).multiplyScalar(1 / 5); + } + } + if (grip.left && grip.right && this.lastGrip.left && this.lastGrip.right) { + const mid = grip.left.clone().add(grip.right).multiplyScalar(0.5); + const lastMid = this.lastGrip.left.clone().add(this.lastGrip.right).multiplyScalar(0.5); + this.lastPivot = mid; + const delta = mid.clone().applyMatrix4(this.control.matrix); + delta.sub(lastMid.clone().applyMatrix4(this.control.matrix)); + delta.multiplyScalar(1 / deltaTime); + this.velocity.lerp(delta, 1 - Math.exp(-20 * deltaTime)); + const angle = Math.atan2(grip.left.z - mid.z, grip.left.x - mid.x); + const lastAngle = Math.atan2( + this.lastGrip.left.z - lastMid.z, + this.lastGrip.left.x - lastMid.x + ); + let closestAngle = angle - lastAngle; + if (closestAngle > Math.PI) { + closestAngle -= Math.PI * 2; + } else if (closestAngle < -Math.PI) { + closestAngle += Math.PI * 2; + } + const rotateVelocity = closestAngle / deltaTime; + const blend = Math.exp(-20 * deltaTime); + this.rotateVelocity = this.rotateVelocity * blend + rotateVelocity * (1 - blend); + } else { + this.rotateVelocity *= Math.exp(-deltaTime / this.rotateInertia); + if (grip.left && this.lastGrip.left) { + const delta = grip.left.clone().applyMatrix4(this.control.matrix); + delta.sub(this.lastGrip.left.clone().applyMatrix4(this.control.matrix)); + delta.multiplyScalar(1 / deltaTime); + this.velocity.lerp(delta, 1 - Math.exp(-20 * deltaTime)); + } else if (grip.right && this.lastGrip.right) { + const delta = grip.right.clone().applyMatrix4(this.control.matrix); + delta.sub( + this.lastGrip.right.clone().applyMatrix4(this.control.matrix) + ); + delta.multiplyScalar(1 / deltaTime); + this.velocity.lerp(delta, 1 - Math.exp(-20 * deltaTime)); + } else { + this.velocity.multiplyScalar(Math.exp(-deltaTime / this.moveInertia)); + } + } + const negPivot = this.lastPivot.clone().negate(); + const rotate = new THREE.Matrix4().makeTranslation(negPivot).premultiply(new THREE.Matrix4().makeRotationY(this.rotateVelocity * deltaTime)).premultiply(new THREE.Matrix4().makeTranslation(this.lastPivot)); + this.control.matrix.multiply(rotate); + this.control.matrix.decompose( + this.control.position, + this.control.quaternion, + this.control.scale + ); + this.control.updateMatrixWorld(true); + this.control.position.sub(this.velocity.clone().multiplyScalar(deltaTime)); + this.lastGrip = grip; + } +} +const DEFAULT_MOVEMENT_SPEED = 1; +const DEFAULT_ROLL_SPEED = 2; +const DEFAULT_ROTATE_SPEED = 2e-3; +const DEFAULT_SLIDE_SPEED = 6e-3; +const DEFAULT_SCROLL_SPEED = 15e-4; +const DEFAULT_ROTATE_INERTIA = 0.15; +const DEFAULT_MOVE_INERTIA = 0.15; +const DEFAULT_STICK_THRESHOLD = 0.1; +const DEFAULT_FPS_ROTATE_SPEED = 2; +const DUAL_PRESS_MS = 200; +const DOUBLE_PRESS_LIMIT_MS = 400; +const DOUBLE_PRESS_DISTANCE = 50; +const WASD_KEYCODE_MOVE = { + KeyW: new THREE__namespace.Vector3(0, 0, -1), + KeyS: new THREE__namespace.Vector3(0, 0, 1), + KeyA: new THREE__namespace.Vector3(-1, 0, 0), + KeyD: new THREE__namespace.Vector3(1, 0, 0), + KeyR: new THREE__namespace.Vector3(0, 1, 0), + KeyF: new THREE__namespace.Vector3(0, -1, 0) +}; +const ARROW_KEYCODE_MOVE = { + ArrowUp: new THREE__namespace.Vector3(0, 0, -1), + ArrowDown: new THREE__namespace.Vector3(0, 0, 1), + ArrowLeft: new THREE__namespace.Vector3(-1, 0, 0), + ArrowRight: new THREE__namespace.Vector3(1, 0, 0), + PageUp: new THREE__namespace.Vector3(0, 1, 0), + PageDown: new THREE__namespace.Vector3(0, -1, 0) +}; +const QE_KEYCODE_ROTATE = { + KeyQ: new THREE__namespace.Vector3(0, 0, 1), + KeyE: new THREE__namespace.Vector3(0, 0, -1) +}; +const ARROW_KEYCODE_ROTATE = { + Home: new THREE__namespace.Vector3(0, -1, 0), + End: new THREE__namespace.Vector3(0, 1, 0), + Insert: new THREE__namespace.Vector3(-1, 0, 0), + Delete: new THREE__namespace.Vector3(1, 0, 0) +}; +class ForgeControls { + constructor({ canvas }) { + this.lastTime = 0; + this.fpsMovement = new FpsMovement({}); + this.pointerControls = new PointerControls({ canvas }); + } + update(control) { + const time = performance.now(); + const deltaTime = (time - (this.lastTime || time)) / 1e3; + this.lastTime = time; + this.fpsMovement.update(deltaTime, control); + this.pointerControls.update(deltaTime, control); + } +} +class FpsMovement { + constructor({ + moveSpeed, + rollSpeed, + stickThreshold, + rotateSpeed, + keycodeMoveMapping, + keycodeRotateMapping, + gamepadMapping, + capsMultiplier, + shiftMultiplier, + ctrlMultiplier, + xr + } = {}) { + this.enable = true; + this.moveSpeed = moveSpeed ?? DEFAULT_MOVEMENT_SPEED; + this.rollSpeed = rollSpeed ?? DEFAULT_ROLL_SPEED; + this.stickThreshold = stickThreshold ?? DEFAULT_STICK_THRESHOLD; + this.rotateSpeed = rotateSpeed ?? DEFAULT_FPS_ROTATE_SPEED; + this.keycodeMoveMapping = keycodeMoveMapping ?? { + ...WASD_KEYCODE_MOVE, + ...ARROW_KEYCODE_MOVE + }; + this.keycodeRotateMapping = keycodeRotateMapping ?? { + ...QE_KEYCODE_ROTATE, + ...ARROW_KEYCODE_ROTATE + }; + this.gamepadMapping = gamepadMapping ?? { + 4: "rollLeft", + 5: "rollRight", + 6: "ctrl", + 7: "shift" + }; + this.capsMultiplier = capsMultiplier ?? 10; + this.shiftMultiplier = shiftMultiplier ?? 5; + this.ctrlMultiplier = ctrlMultiplier ?? 1 / 5; + this.xr = xr; + this.keydown = {}; + this.keycode = {}; + document.addEventListener("keydown", (event) => { + this.keydown[event.key] = true; + this.keycode[event.code] = true; + }); + document.addEventListener("keyup", (event) => { + this.keydown[event.key] = false; + this.keycode[event.code] = false; + }); + } + // Call this method in your render loop with `control` set to the object to control + // (`THREE.Camera` or a `THREE.Object3D` that contains it), with `deltaTime` + // in seconds since the last update. + update(deltaTime, control) { + var _a2, _b2; + if (!this.enable) { + return; + } + const sticks = [new THREE__namespace.Vector2(), new THREE__namespace.Vector2()]; + const gamepad = navigator.getGamepads()[0]; + if (gamepad) { + sticks[0].set(gamepad.axes[0], gamepad.axes[1]); + sticks[1].set(gamepad.axes[2], gamepad.axes[3]); + } + const gamepadButtons = (gamepad == null ? void 0 : gamepad.buttons.map((button) => button.pressed)) || []; + const xrSources = Array.from(((_b2 = (_a2 = this.xr) == null ? void 0 : _a2.getSession()) == null ? void 0 : _b2.inputSources) ?? []); + for (const source of xrSources) { + const gamepad2 = source.gamepad; + if (gamepad2) { + switch (source.handedness) { + case "none": { + sticks[0].x += gamepad2.axes[0]; + sticks[0].y += gamepad2.axes[1]; + sticks[1].x += gamepad2.axes[2]; + sticks[1].y += gamepad2.axes[3]; + break; + } + case "left": { + sticks[0].x += gamepad2.axes[2]; + sticks[0].y += gamepad2.axes[3]; + break; + } + case "right": { + sticks[1].x += gamepad2.axes[2]; + sticks[1].y += gamepad2.axes[3]; + break; + } + } + } + } + for (const stick of sticks) { + stick.x = Math.abs(stick.x) >= this.stickThreshold ? stick.x : 0; + stick.y = Math.abs(stick.y) >= this.stickThreshold ? stick.y : 0; + } + const rotate = new THREE__namespace.Vector3( + sticks[1].x, + sticks[1].y, + 0 + ).multiplyScalar(this.rotateSpeed); + for (const [keycode, rot] of Object.entries(this.keycodeRotateMapping)) { + if (this.keycode[keycode]) { + rotate.add(rot); + } + } + for (const button in this.gamepadMapping) { + if (gamepadButtons[Number.parseInt(button)]) { + switch (this.gamepadMapping[button]) { + case "rollLeft": + rotate.z += 1; + break; + case "rollRight": + rotate.z -= 1; + break; + } + } + } + rotate.multiply( + new THREE__namespace.Vector3(this.rotateSpeed, this.rotateSpeed, this.rollSpeed) + ); + if (rotate.manhattanLength() > 0) { + rotate.multiplyScalar(deltaTime); + const eulers = new THREE__namespace.Euler().setFromQuaternion( + control.quaternion, + "YXZ" + ); + eulers.y -= rotate.x; + eulers.x = Math.max( + -Math.PI / 2, + Math.min(Math.PI / 2, eulers.x - rotate.y) + ); + eulers.z = Math.max(-Math.PI, Math.min(Math.PI, eulers.z + rotate.z)); + control.quaternion.setFromEuler(eulers); + } + const moveVector = new THREE__namespace.Vector3(sticks[0].x, 0, sticks[0].y); + for (const [keycode, move] of Object.entries(this.keycodeMoveMapping)) { + if (this.keycode[keycode]) { + moveVector.add(move); + } + } + let speedMultiplier = 1; + if (this.keydown.CapsLock) { + speedMultiplier *= this.capsMultiplier; + } + if (this.keycode.ShiftLeft || this.keycode.ShiftRight) { + speedMultiplier *= this.shiftMultiplier; + } + if (this.keycode.ControlLeft || this.keycode.ControlRight) { + speedMultiplier *= this.ctrlMultiplier; + } + for (const button in this.gamepadMapping) { + if (gamepadButtons[Number.parseInt(button)]) { + switch (this.gamepadMapping[button]) { + case "shift": + speedMultiplier *= this.shiftMultiplier; + break; + case "ctrl": + speedMultiplier *= this.ctrlMultiplier; + break; + } + } + } + moveVector.applyQuaternion(control.quaternion); + control.position.add( + moveVector.multiplyScalar(this.moveSpeed * speedMultiplier * deltaTime) + ); + } +} +class PointerControls { + constructor({ + // The HTML canvas element to attach pointer events to + canvas, + // Speed of rotation (default DEFAULT_ROTATE_SPEED) + rotateSpeed, + // Speed of sliding when dragging with right/middle mouse button or two fingers + // (default DEFAULT_SLIDE_SPEED) + slideSpeed, + // Speed of movement when using mouse scroll wheel (default DEFAULT_SCROLL_SPEED) + scrollSpeed, + // Reverse the direction of rotation (default: false) + reverseRotate, + // Reverse the direction of sliding (default: false) + reverseSlide, + // Reverse the direction of swipe gestures (default: false) + reverseSwipe, + // Reverse the direction of scroll wheel movement (default: false) + reverseScroll, + // Inertia factor for movement (default: DEFAULT_MOVE_INERTIA) + moveInertia, + // Inertia factor for rotation (default: DEFAULT_ROTATE_INERTIA) + rotateInertia, + // Callback for double press events (default: () => {}) + doublePress + }) { + this.enable = true; + this.canvas = canvas; + this.rotateSpeed = rotateSpeed ?? DEFAULT_ROTATE_SPEED; + this.slideSpeed = slideSpeed ?? DEFAULT_SLIDE_SPEED; + this.scrollSpeed = scrollSpeed ?? DEFAULT_SCROLL_SPEED; + this.reverseRotate = reverseRotate ?? false; + this.reverseSlide = reverseSlide ?? false; + this.reverseSwipe = reverseSwipe ?? false; + this.reverseScroll = reverseScroll ?? false; + this.moveInertia = moveInertia ?? DEFAULT_MOVE_INERTIA; + this.rotateInertia = rotateInertia ?? DEFAULT_ROTATE_INERTIA; + this.doublePress = doublePress ?? (() => { + }); + this.doublePressLimitMs = DOUBLE_PRESS_LIMIT_MS; + this.doublePressDistance = DOUBLE_PRESS_DISTANCE; + this.lastUp = null; + this.rotating = null; + this.sliding = null; + this.dualPress = false; + this.scroll = new THREE__namespace.Vector3(); + this.rotateVelocity = new THREE__namespace.Vector3(); + this.moveVelocity = new THREE__namespace.Vector3(); + canvas.addEventListener("pointerdown", (event) => { + const position = this.getPointerPosition(event); + const initial = position.clone(); + const last = position.clone(); + const isRotate = !this.rotating && (event.pointerType !== "mouse" || event.button === 0); + const { pointerId, timeStamp } = event; + if (isRotate) { + this.rotating = { initial, last, position, pointerId, timeStamp }; + canvas.setPointerCapture(event.pointerId); + this.dualPress = false; + } else if (!this.sliding) { + const button = event.pointerType === "mouse" ? event.button : void 0; + this.sliding = { + initial, + last, + position, + pointerId, + button, + timeStamp + }; + canvas.setPointerCapture(event.pointerId); + this.dualPress = this.rotating != null && timeStamp - this.rotating.timeStamp < DUAL_PRESS_MS; + } + }); + const pointerUp = (event) => { + var _a2, _b2; + if (((_a2 = this.rotating) == null ? void 0 : _a2.pointerId) === event.pointerId) { + this.rotating = null; + canvas.releasePointerCapture(event.pointerId); + if (this.dualPress && this.sliding) { + canvas.releasePointerCapture(this.sliding.pointerId); + this.sliding = null; + } + } else if (((_b2 = this.sliding) == null ? void 0 : _b2.pointerId) === event.pointerId) { + this.sliding = null; + canvas.releasePointerCapture(event.pointerId); + if (this.dualPress && this.rotating) { + canvas.releasePointerCapture(this.rotating.pointerId); + this.rotating = null; + } + } + const position = this.getPointerPosition(event); + const lastUp = this.lastUp; + this.lastUp = { position, time: event.timeStamp }; + if (lastUp) { + const distance2 = lastUp.position.distanceTo(position); + if (distance2 < this.doublePressDistance) { + const intervalMs = event.timeStamp - lastUp.time; + if (intervalMs < this.doublePressLimitMs) { + this.lastUp = null; + this.doublePress({ position, intervalMs }); + } + } + } + }; + document.addEventListener("pointerup", pointerUp); + document.addEventListener("pointercancel", pointerUp); + document.addEventListener("pointermove", (event) => { + var _a2, _b2; + if (((_a2 = this.rotating) == null ? void 0 : _a2.pointerId) === event.pointerId) { + this.rotating.position = this.getPointerPosition(event); + } else if (((_b2 = this.sliding) == null ? void 0 : _b2.pointerId) === event.pointerId) { + this.sliding.position = this.getPointerPosition(event); + } + }); + canvas.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + canvas.addEventListener("wheel", (event) => { + this.scroll.add( + new THREE__namespace.Vector3(event.deltaX, event.deltaY, event.deltaZ) + ); + event.preventDefault(); + }); + } + getPointerPosition(event) { + const rect = this.canvas.getBoundingClientRect(); + return new THREE__namespace.Vector2( + event.clientX - rect.left, + event.clientY - rect.top + ); + } + update(deltaTime, control) { + if (!this.enable) { + return; + } + if (this.dualPress && this.rotating && this.sliding) { + const motion = [ + this.rotating.position.clone().sub(this.rotating.last), + this.sliding.position.clone().sub(this.sliding.last) + ]; + const coincidence = motion[0].dot(motion[1]); + if (coincidence >= 0.2) { + const totalMotion = motion[0].clone().add(motion[1]); + const slide = new THREE__namespace.Vector3(totalMotion.x, -totalMotion.y, 0); + slide.multiplyScalar(this.slideSpeed * (this.reverseSwipe ? 1 : -1)); + slide.applyQuaternion(control.quaternion); + control.position.add(slide); + this.moveVelocity = slide.clone().multiplyScalar(1 / deltaTime); + } else if (coincidence <= -0.2) { + const deltaDir = this.sliding.last.clone().sub(this.rotating.last); + const deltaDist = deltaDir.length(); + deltaDir.multiplyScalar(1 / deltaDist).normalize(); + const orthoDir = new THREE__namespace.Vector2(-deltaDir.y, deltaDir.x); + const motionDir = [motion[0].dot(deltaDir), motion[1].dot(deltaDir)]; + const motionOrtho = [motion[0].dot(orthoDir), motion[1].dot(orthoDir)]; + const midpoint = this.rotating.last.clone().add(this.sliding.last).multiplyScalar(0.5); + let midpointDir = new THREE__namespace.Vector3(); + if (control instanceof THREE__namespace.Camera) { + const ndcMidpoint = new THREE__namespace.Vector2( + midpoint.x / this.canvas.clientWidth * 2 - 1, + -(midpoint.y / this.canvas.clientHeight) * 2 + 1 + ); + const raycaster = new THREE__namespace.Raycaster(); + raycaster.setFromCamera(ndcMidpoint, control); + midpointDir = raycaster.ray.direction; + } + const pinchOut = motionDir[1] - motionDir[0]; + const slide = midpointDir.multiplyScalar(pinchOut * this.slideSpeed); + control.position.add(slide); + this.moveVelocity = slide.clone().multiplyScalar(1 / deltaTime); + const angles = [ + Math.atan(motionOrtho[0] / (-0.5 * deltaDist)), + Math.atan(motionOrtho[1] / (0.5 * deltaDist)) + ]; + const rotate = 0.5 * (angles[0] + angles[1]); + const eulers = new THREE__namespace.Euler().setFromQuaternion( + control.quaternion, + "YXZ" + ); + eulers.z = Math.max( + -Math.PI, + Math.min(Math.PI, eulers.z + 0.5 * rotate) + ); + control.quaternion.setFromEuler(eulers); + } + this.rotating.last.copy(this.rotating.position); + this.sliding.last.copy(this.sliding.position); + } else { + const rotate = new THREE__namespace.Vector3(); + if (this.rotating && !this.dualPress) { + const delta = this.rotating.position.clone().sub(this.rotating.last); + this.rotating.last.copy(this.rotating.position); + rotate.set(delta.x, delta.y, 0); + rotate.multiplyScalar(this.rotateSpeed * (this.reverseRotate ? -1 : 1)); + this.rotateVelocity = rotate.clone().multiplyScalar(1 / deltaTime); + } else { + this.rotateVelocity.multiplyScalar( + Math.exp(-deltaTime / this.rotateInertia) + ); + rotate.addScaledVector(this.rotateVelocity, deltaTime); + } + const eulers = new THREE__namespace.Euler().setFromQuaternion( + control.quaternion, + "YXZ" + ); + eulers.y -= rotate.x; + eulers.x = Math.max( + -Math.PI / 2, + Math.min(Math.PI / 2, eulers.x - rotate.y) + ); + eulers.z *= Math.exp(-0 * deltaTime); + control.quaternion.setFromEuler(eulers); + if (this.sliding && !this.dualPress) { + const delta = this.sliding.position.clone().sub(this.sliding.last); + this.sliding.last.copy(this.sliding.position); + const slide = this.sliding.button !== 2 ? new THREE__namespace.Vector3(delta.x, 0, delta.y) : new THREE__namespace.Vector3(delta.x, -delta.y, 0); + slide.multiplyScalar(this.slideSpeed * (this.reverseSlide ? -1 : 1)); + slide.applyQuaternion(control.quaternion); + control.position.add(slide); + this.moveVelocity = slide.clone().multiplyScalar(1 / deltaTime); + } else { + this.moveVelocity.multiplyScalar( + Math.exp(-deltaTime / this.moveInertia) + ); + control.position.addScaledVector(this.moveVelocity, deltaTime); + } + } + const scroll = this.scroll.multiplyScalar(this.scrollSpeed); + scroll.set(scroll.x, scroll.z, scroll.y); + if (this.reverseScroll) { + scroll.multiplyScalar(-1); + } + scroll.applyQuaternion(control.quaternion); + control.position.add(scroll); + this.scroll.set(0, 0, 0); + } +} +exports.FINGER_TIPS = FINGER_TIPS; +exports.ForgeControls = ForgeControls; +exports.ForgeRenderer = ForgeRenderer; +exports.ForgeViewpoint = ForgeViewpoint; +exports.FpsMovement = FpsMovement; +exports.HANDS = HANDS; +exports.Hand = Hand; +exports.HandMovement = HandMovement; +exports.JOINT_IDS = JOINT_IDS; +exports.JOINT_INDEX = JOINT_INDEX; +exports.JOINT_RADIUS = JOINT_RADIUS; +exports.JOINT_SEGMENTS = JOINT_SEGMENTS; +exports.JOINT_SEGMENT_STEPS = JOINT_SEGMENT_STEPS; +exports.JOINT_TIPS = JOINT_TIPS; +exports.JointEnum = JointEnum; +exports.NUM_JOINTS = NUM_JOINTS; +exports.PackedSplats = PackedSplats; +exports.PlyReader = PlyReader; +exports.PointerControls = PointerControls; +exports.Readback = Readback; +exports.Sint8ToFloat = Sint8ToFloat; +exports.SplatAccumulator = SplatAccumulator; +exports.SplatEdit = SplatEdit; +exports.SplatEditRgbaBlendMode = SplatEditRgbaBlendMode; +exports.SplatEditSdf = SplatEditSdf; +exports.SplatEditSdfType = SplatEditSdfType; +exports.SplatEdits = SplatEdits; +exports.SplatFileType = SplatFileType; +exports.SplatGenerator = SplatGenerator; +exports.SplatLoader = SplatLoader; +exports.SplatMesh = SplatMesh; +exports.SplatModifier = SplatModifier; +exports.SplatSkinning = SplatSkinning; +exports.SplatTransformer = SplatTransformer; +exports.SpzReader = SpzReader; +exports.Uint8ToFloat = Uint8ToFloat; +exports.VRButton = VRButton; +exports.XrHands = XrHands; +exports.constructAxes = constructAxes; +exports.constructGrid = constructGrid; +exports.constructSpherePoints = constructSpherePoints; +exports.dyno = dyno; +exports.flipPixels = flipPixels; +exports.floatToSint8 = floatToSint8; +exports.floatToUint8 = floatToUint8; +exports.fromHalf = fromHalf; +exports.generators = generators; +exports.getSplatFileType = getSplatFileType; +exports.imageSplats = imageSplats; +exports.isAndroid = isAndroid; +exports.isMobile = isMobile; +exports.isOculus = isOculus; +exports.pixelsToPngUrl = pixelsToPngUrl; +exports.setPackedSplat = setPackedSplat; +exports.textSplats = textSplats; +exports.toHalf = toHalf; +exports.unpackSplat = unpackSplat; +exports.unpackSplats = unpackSplats; +exports.utils = utils; diff --git a/dist/forge.cjs.min.js b/dist/forge.cjs.min.js new file mode 100644 index 0000000..4802c5e --- /dev/null +++ b/dist/forge.cjs.min.js @@ -0,0 +1,1086 @@ +"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=require("three");var wI=typeof document<"u"?document.currentScript:null;function Vt(Q){const A=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(Q){for(const I in Q)if(I!=="default"){const g=Object.getOwnPropertyDescriptor(Q,I);Object.defineProperty(A,I,g.get?g:{enumerable:!0,get:()=>Q[I]})}}return A.default=Q,Object.freeze(A)}const e=Vt(j);let aA;function Tt(Q){const A=aA.__externref_table_alloc();return aA.__wbindgen_export_2.set(A,Q),A}function vt(Q,A){try{return Q.apply(this,A)}catch(I){const g=Tt(I);aA.__wbindgen_exn_store(g)}}function lI(Q){const A=typeof Q;if(A=="number"||A=="boolean"||Q==null)return`${Q}`;if(A=="string")return`"${Q}"`;if(A=="symbol"){const B=Q.description;return B==null?"Symbol":`Symbol(${B})`}if(A=="function"){const B=Q.name;return typeof B=="string"&&B.length>0?`Function(${B})`:"Function"}if(Array.isArray(Q)){const B=Q.length;let C="[";B>0&&(C+=lI(Q[0]));for(let E=1;E1)g=I[1];else return toString.call(Q);if(g=="Object")try{return"Object("+JSON.stringify(Q)+")"}catch{return"Object"}return Q instanceof Error?`${Q.name}: ${Q.message} +${Q.stack}`:g}let MI=0,MQ=null;function OQ(){return(MQ===null||MQ.byteLength===0)&&(MQ=new Uint8Array(aA.memory.buffer)),MQ}const PQ=typeof TextEncoder<"u"?new TextEncoder("utf-8"):{encode:()=>{throw Error("TextEncoder not available")}},Xt=typeof PQ.encodeInto=="function"?function(Q,A){return PQ.encodeInto(Q,A)}:function(Q,A){const I=PQ.encode(Q);return A.set(I),{read:Q.length,written:I.length}};function jt(Q,A,I){if(I===void 0){const t=PQ.encode(Q),s=A(t.length,1)>>>0;return OQ().subarray(s,s+t.length).set(t),MI=t.length,s}let g=Q.length,B=A(g,1)>>>0;const C=OQ();let E=0;for(;E127)break;C[B+E]=t}if(E!==g){E!==0&&(Q=Q.slice(E)),B=I(B,g,g=E+Q.length*3,1)>>>0;const t=OQ().subarray(B+E,B+g),s=Xt(Q,t);E+=s.written,B=I(B,g,E,1)>>>0}return MI=E,B}let AQ=null;function qI(){return(AQ===null||AQ.buffer.detached===!0||AQ.buffer.detached===void 0&&AQ.buffer!==aA.memory.buffer)&&(AQ=new DataView(aA.memory.buffer)),AQ}const _I=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};typeof TextDecoder<"u"&&_I.decode();function WI(Q,A){return Q=Q>>>0,_I.decode(OQ().subarray(Q,Q+A))}function zt(Q,A,I,g,B,C,E,t,s,o,a){return aA.raycast_splats(Q,A,I,g,B,C,E,t,s,o,a)}async function Ot(Q,A){if(typeof Response=="function"&&Q instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(Q,A)}catch(g){if(Q.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",g);else throw g}const I=await Q.arrayBuffer();return await WebAssembly.instantiate(I,A)}else{const I=await WebAssembly.instantiate(Q,A);return I instanceof WebAssembly.Instance?{instance:I,module:Q}:I}}function Pt(){const Q={};return Q.wbg={},Q.wbg.__wbg_buffer_09165b52af8c5237=function(A){return A.buffer},Q.wbg.__wbg_buffer_609cc3eee51ed158=function(A){return A.buffer},Q.wbg.__wbg_get_b9b93047fe3cf45b=function(A,I){return A[I>>>0]},Q.wbg.__wbg_instanceof_Uint8Array_17156bcf118086a9=function(A){let I;try{I=A instanceof Uint8Array}catch{I=!1}return I},Q.wbg.__wbg_length_3b4f022188ae8db6=function(A){return A.length},Q.wbg.__wbg_length_6ca527665d89694d=function(A){return A.length},Q.wbg.__wbg_length_8cfd2c6409af88ad=function(A){return A.length},Q.wbg.__wbg_length_a446193dc22c12f8=function(A){return A.length},Q.wbg.__wbg_length_e2d2a49132c1b256=function(A){return A.length},Q.wbg.__wbg_new_405e22f390576ce2=function(){return new Object},Q.wbg.__wbg_new_9fee97a409b32b68=function(A){return new Uint16Array(A)},Q.wbg.__wbg_new_a12002a7f91c75be=function(A){return new Uint8Array(A)},Q.wbg.__wbg_new_e3b321dcfef89fc7=function(A){return new Uint32Array(A)},Q.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354=function(A,I,g){return new Float32Array(A,I>>>0,g>>>0)},Q.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212=function(A,I,g){return new Uint32Array(A,I>>>0,g>>>0)},Q.wbg.__wbg_newwithlength_5a5efe313cfd59f1=function(A){return new Float32Array(A>>>0)},Q.wbg.__wbg_newwithlength_bd3de93688d68fbc=function(A){return new Uint32Array(A>>>0)},Q.wbg.__wbg_set_10bad9bee0e9c58b=function(A,I,g){A.set(I,g>>>0)},Q.wbg.__wbg_set_65595bdd868b3009=function(A,I,g){A.set(I,g>>>0)},Q.wbg.__wbg_set_bb8cecf6a62b9f46=function(){return vt(function(A,I,g){return Reflect.set(A,I,g)},arguments)},Q.wbg.__wbg_set_d23661d19148b229=function(A,I,g){A.set(I,g>>>0)},Q.wbg.__wbg_set_f4f1f0daa30696fc=function(A,I,g){A.set(I,g>>>0)},Q.wbg.__wbg_subarray_3aaeec89bb2544f0=function(A,I,g){return A.subarray(I>>>0,g>>>0)},Q.wbg.__wbg_subarray_769e1e0f81bb259b=function(A,I,g){return A.subarray(I>>>0,g>>>0)},Q.wbg.__wbindgen_debug_string=function(A,I){const g=lI(I),B=jt(g,aA.__wbindgen_malloc,aA.__wbindgen_realloc),C=MI;qI().setInt32(A+4*1,C,!0),qI().setInt32(A+4*0,B,!0)},Q.wbg.__wbindgen_init_externref_table=function(){const A=aA.__wbindgen_export_2,I=A.grow(4);A.set(0,void 0),A.set(I+0,void 0),A.set(I+1,null),A.set(I+2,!0),A.set(I+3,!1)},Q.wbg.__wbindgen_memory=function(){return aA.memory},Q.wbg.__wbindgen_number_new=function(A){return A},Q.wbg.__wbindgen_string_new=function(A,I){return WI(A,I)},Q.wbg.__wbindgen_throw=function(A,I){throw new Error(WI(A,I))},Q}function _t(Q,A){return aA=Q.exports,$I.__wbindgen_wasm_module=A,AQ=null,MQ=null,aA.__wbindgen_start(),aA}async function $I(Q){if(aA!==void 0)return aA;typeof Q<"u"&&(Object.getPrototypeOf(Q)===Object.prototype?{module_or_path:Q}=Q:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),typeof Q>"u"&&(Q=new URL("data:application/wasm;base64,AGFzbQEAAAABtgItYAJ/fwF/YAJ/fwBgA39/fwF/YAF/AGABfwF/YAN/f38AYAV/f39/fwBgBH9/f38AYAFvAX9gAW8Bb2ADb39/AW9gBX9/f39/AX9gA29vfwBgAABgA39+fgBgA39+fgF/YAd/f39/f39/AX9gBn9/f39/fwBgAX0BfWAEf39/fwF/YAABb2ABfwFvYAZ/f39/f38Bf2AAAX9gC39/f39/f39/f39/AX9gAn9/AW9gAXwBb2ACb38Bb2ADb29vAX9gAn9vAGAHf39/f39/fwBgAn9/AX5gAn9+AX9gAn9+AGALfX19fX19fX1/b38Bb2ABfwF9YAV/f35/fwBgBH9+f38AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AYAR/f29vAX9gA39vbwF/YAJ9fQF9ArcIHgN3YmcVX193YmluZGdlbl9zdHJpbmdfbmV3ABkDd2JnFV9fd2JpbmRnZW5fbnVtYmVyX25ldwAaA3diZxpfX3diZ19nZXRfYjliOTMwNDdmZTNjZjQ1YgAbA3diZx1fX3diZ19sZW5ndGhfZTJkMmE0OTEzMmMxYjI1NgAIA3diZxpfX3diZ19uZXdfNDA1ZTIyZjM5MDU3NmNlMgAUA3diZx1fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OAAJA3diZxpfX3diZ19uZXdfYTEyMDAyYTdmOTFjNzViZQAJA3diZxpfX3diZ19zZXRfNjU1OTViZGQ4NjhiMzAwOQAMA3diZx1fX3diZ19sZW5ndGhfYTQ0NjE5M2RjMjJjMTJmOAAIA3diZxpfX3diZ19uZXdfOWZlZTk3YTQwOWIzMmI2OAAJA3diZxpfX3diZ19zZXRfZjRmMWYwZGFhMzA2OTZmYwAMA3diZx1fX3diZ19sZW5ndGhfOGNmZDJjNjQwOWFmODhhZAAIA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyAAoDd2JnGl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3AAkDd2JnGl9fd2JnX3NldF9kMjM2NjFkMTkxNDhiMjI5AAwDd2JnHV9fd2JnX2xlbmd0aF82Y2E1Mjc2NjVkODk2OTRkAAgDd2JnMV9fd2JnX25ld3dpdGhi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CwJAIAAoAhAiAkUNAEGousIAQQggAhDVBEUNAEEBDAILIAFBATsBJCABIAQ2AiAgAUEANgIcIAFBAToAGCABQd8ANgIUIAEgBDYCECABQQA2AgwgASAENgIIIAEgAzYCBCABQd8ANgIAIAFBKGogARBQAn8gASgCKEUEQAJAIAEtACUNACABQQE6ACUCQCABLQAkQQFGBEAgASgCICEFIAEoAhwhBAwBCyABKAIgIgUgASgCHCIERg0BCyABKAIEIARqIQMgBSAEawwCC0GwusIAEK4EAAsgASgCHCEEIAEgASgCMDYCHCADIARqIQMgASgCLCAEawshBAJAIAIEQCADIAQgAhDVBA0BCyABQcgAaiABQSBqKQIANwMAIAFBQGsgAUEYaikCADcDACABQThqIAFBEGopAgA3AwAgAUEwaiABQQhqKQIANwMAIAEgASkCADcDKAJAIAEtAE0NACACIQMDQCABKAIsIQUgAUHUAGogAUEoahBQAn8gASgCVEUEQCABLQBNDQMgAUEBOgBNAkAgAS0ATEEBRgRAIAEoAkghBSABKAJEIQQMAQsgASgCSCIFIAEoAkQiBEYNBAsgASgCLCAEaiEGIAUgBGsMAQsgASgCRCEEIAEgASgCXDYCRCAEIAVqIQYgASgCWCAEawshBAJAIANFBEBBACEDDAELQbm2wgBBASADENUEDQMgACgCECICRQRAQQAhAkEAIQMMAQsgAiEDIAYgBCACENUEDQMLIAEtAE1FDQALCyACRQ0BQcC6wgBBAiACENUERQ0BC0EBDAELAkAgACgCECICRQ0AQcK6wgBBAyACENUERQ0AQQEMAQsCQAJAAkAgACgCACIDRQRAQQAhAwwBC0EAIQIDQAJAIAAoAggiBCAAKAIETw0AIAMgBGotAABBxQBHDQAgACAEQQFqNgIIDAILAkAgAkUNACAAKAIQIgNFDQBB9bnCAEECIAMQ1QRFDQBBAQwFCyAAECcNAiACQQFrIQIgACgCACIDDQALQQAhAwsgACgCECIEBEBBAUH1s8IAQQEgBBDVBA0DGiAAKAIAIQMLIANFDQEgACgCCCICIAAoAgRPDQEgAiADai0AAEH1AEcNASAAIAJBAWo2AghBAAwCC0EBDAELAkAgACgCECICRQ0AQcW6wgBBBCACENUERQ0AQQEMAQsgABAnCyAB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AWogBiARGyADa2whAwwDCyABIApBjIHCABCtAgALQZyBwgBBKUHIgcIAEO0CAAtBoP/BAEEXQZyAwgAQ7QIACyAPIAZBAWo2AgAgAkEEaiAJOgAAIAIgAzYCACACQQhqIQIgBCAFQQFqIgVHDQALCyAAQYWAgIB4NgIADwsgBUEBaiEFIAMoAgAhCSADQQRqIQMgCUEATA0ACyAFQQFrIQxBACEDA0ACQCACIAZJBEAgA0EBaiEDIAsgAkEDdGogDDoABQNAIAIgDWogDnEiAiAETw0ACwwBCyACIAZB2IHCABCtAgALIAMgCUcNAAsMAAsAC9IHAQN/AkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAOCgAHBwECAwQHBwUHCwJAAkACQAJAAkACQCAALQAEDgcADAEMAgMEDAsgAC0ACEEDRw0LIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQQgASADIAIoAggQpwQMBAsgAC0ACEEDRw0KIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQMgASADIAIoAggQpwQMAwsgAC0ACEEDRw0JIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQIgASADIAIoAggQpwQMAgsgAC0ACEEDRw0IIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQEgASADIAIoAggQpwQMAQsgAC0ACEEDRw0HIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQAgASADIAIoAggQpwQLIABBDEEEEKcEDwsCQAJAIAAtAAQOAgcBAAsgACgCCCIBQfv///8HaiICQQ1NIAJBAkdxDQYgAUGEgICAeEoNBSABQYOAgIB4Rw0GDAULIAAoAggiAUGEgICAeEogAUGDgICAeEZyDQQMBQsgAC0ABEEDRw0EDAULAkACQEEDIAAoAgQiAUEHayICIAJBA08bQQJrDgIBAAULAkACQAJAIAEOBgAHAQcHAgcLIAAtAAhBA0cNBgwICyAAKAIIIgFB7f///wdqIgJBCk0gAkEDR3ENBSABRSABQfv///8H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wQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA4hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwICyACIAA2AgQgAkEBNgIMIAJB8KfBADYCCCACQgE3AhQgAiACQQRqrUKAgICAoDeENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAcLIAIgAEEEajYCBCACQQE2AgwgAkHwp8EANgIIIAJCATcCFCACIAJBBGqtQoCAgICgOIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMBgsgASgCHEHFusEAQTkgASgCICgCDBECAAwFCyACIABBBGo2AgQgAkECNgIMIAJBqLvBADYCCCACQgE3AhQgAiACQQRqrUKAgICA8DWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAQLIAIgAEEEajYCACACIABBCGo2AgQgAkEDNgIMIAJB6LvBADYCCCACQgI3AhQgAkKAgICA8DUiBCACrYQ3AyggAiAEIAJBBGqthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwDCyACIABBBGo2AgQgAkECNgIMIAJB8LzBADYCCCACQgE3AhQgAiACQQRqrUKAgICAsDiENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAILIAIgAEEEajYCACACIABBCGo2AgQgAkECNgIMIAJBsL3BADYCCCACQgI3AhQgAkKAgICAwDgiBCACQQRqrYQ3AyggAiAEIAKthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAjYCDCACQfS9wQA2AgggAkICNwIUIAJCgICAgPA1IgQgAkEEaq2ENwMoIAIgBCACrYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAuXBgEIfyMAQTBrIgEkAAJAAn8CQAJAAkAgACgCACIFBEAgACgCCCIEIAQgACgCBCIHIAQgB0sbayEIIAUhAwNAIAIgCGpFDQMgACACIARqQQFqNgIIIAJBAWohAiADIARqIANBAWohAy0AACIGQTBrQf8BcUEKSSAGQeEAa0H/AXFBBklyDQALIAZB3wBHDQIgAiAEakEBayEGAkAgBARA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IABBABAgDAELIAAQJwsgBEEQaiQAC5QDAQR/AkAgAkEQSQRAIAAhAwwBCwJAIABBACAAa0EDcSIFaiIEIABNDQAgACEDIAUEQCAFIQYDQCADIAE6AAAgA0EBaiEDIAZBAWsiBg0ACwsgBUEBa0EHSQ0AA0AgAyABOgAAIANBB2ogAToAACADQQZqIAE6AAAgA0EFaiABOgAAIANBBGogAToAACADQQNqIAE6AAAgA0ECaiABOgAAIANBAWogAToAACADQQhqIgMgBEcNAAsLIAQgAiAFayICQXxxaiIDIARLBEAgAUH/AXFBgYKECGwhBQNAIAQgBTYCACAEQQRqIgQgA0kNAAsLIAJBA3EhAgsCQCADIAIgA2oiBU8NACACQQdxIgQEQANAIAMgAToAACADQQFqIQMgBEEBayIEDQALCyACQQFrQQdJDQADQCADIAE6AAAgA0EHaiABOgAAIANBBmogAToAACADQQVqIAE6AAAgA0EEaiABOgAAIANBA2ogAToAACADQQJqIAE6AAAgA0EBaiABOgAAIANBCGoiAyAFRw0ACwsgAAudAwIGfwF+QTggAUH/AXEiASABQThPGyECAkAgACgCECIEIAAtABQiAWoiA0EASgRAIAIgA0sNAQJAIARBAEwgASACT3INAANAIARBAWsiBUEDdiEGQcAAIAFBB2oiB0F4cWshAwJAIAVBP00EQCAAIAYgAxCIASAAKAIQIQQgAC0AFCEBDAELAkAgACgCBCIFIAYgB0H4AXFBA3ZqQQdrIgZPBEAgBSAGayIFQQdLDQFBCCAFQcTewQAQqwQACyAGIAVB1N7BABCqBAALIAAgASADaiIBOgAUIAAgBCADQf8BcWsiBDYCECAAIAAoAgAgBmopAAA3AwgLIAFB/wFxIAJPDQEgBEEASg0ACwsgACABIAJrIgE6ABRCfyACrYZCf4UgACkDCCABQT9xrYiDDwsgACAEIAJrNgIQQgAPCyACIANrIQICQCADQf8BcSABSwRAIAAgAxBbIQggACgCECEEDAELIAAgASADayIBOgAUQn8gA62GQn+FIAApAwggAUE/ca2IgyEICyAAIAQgAms2AhAgCCACQT9xrYYLnAMBBX8CQEERQQAgAEGvsARPGyIBIAFBCHIiASAAQQt0IgIgAUECdEH82sIAaigCAEELdEkbIgEg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AEEEaiACKAIEIAIoAggQPUHcoMIAIAAoAgggACgCBCICGyEDQQkgACgCDCACGwshAiADIAIgARDaASAAQRBqJAALZgAjAEEwayIAJABBhOXCAC0AAARAIABBAjYCDCAAQYyhwgA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIAQhDcDICAAIABBIGo2AhAgAEEIakG0ocIAEKQDAAsgAEEwaiQAC2EBAX8jAEEwayICJAAgAiAANgIMIAJBAjYCFCACQZymwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA0hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRSACQTBqJAALYQEBfyMAQTBrIgIkACACIAA2AgwgAkECNgIUIAJB5K7BADYCECACQgE3AhwgAiACQQxqrUKAgICA4DSENwMoIAIgAkEoajYCGCABKAIcIAEoAiAgAkEQahBFIAJBMGokAAthAQF/IwBBMGsiAiQAIAIgADYCDCACQQE2AhQgAkHwp8EANgIQIAJCATcCHCACIAJBDGqtQoCAgICQOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUgAkEwaiQAC18BAn8CQCAAKAIAIgFB7f///wdqIgJBCk0gAkEDR3ENACABRSABQfv///8HaiICQQ1NIAJBAkdxIAFBg4CAgHhHIAFBhICAgHhMcXJyDQAgACgCBCABQQJ0QQQQpwQLC1wBA38gAC0AACIBQQNLIAFBA0dyRQRAIAAoAgQiACgCACEBIABBBGooAgAiAygCACICBEAgASACEQMACyADKAIEIgIEQCABIAIgAygCCBCnBAsgAEEMQQQQpwQLC2sBAn9BqJbAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMAAQIDC0EAIQEMAgsgAUEBaiEBQdStwAAhAgwBCyABQQRqIQFBkK7AACECCyAAIAI2AgQgACABNgIAC2gBA38CQAJAAkACQEEDIAEoAgBB7f///wdqIgQgBEELTxtBAmsOAwABAgMLIAFBBGohAkGcm8AAIQMMAgtB2LPAACEDIAEhAgwBCyABQQRqIQJBjLXAACEDCyAAIAM2AgQgACACNgIAC2sBAn9B1LfAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMAAQIDC0EAIQEMAgsgAUEBaiEBQejQwAAhAgwBCyABQQRqIQFBpNHAACECCyAAIAI2AgQgACABNgIAC2gBA38CQAJAAkACQEEDIAEoAgBB7f///wdqIgQgBEELTxtBAmsOAwABAgMLIAFBBGohAkGwvsAAIQMMAgtB7NbAACEDIAEhAgwBCyABQQRqIQJBoNjAACEDCyAAIAM2AgQgACACNgIAC2sBAn9B5OzAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMAAQIDC0EAIQEMAgsgAUEBaiEBQdDzwAAhAgwBCyABQQRqIQFBjPTAACECCyAAIAI2AgQgACABNgIAC2gBA38CQAJAAkACQEEDIAEoAgBB7f///wdqIgQgBEELTxtBAmsOAwABAgMLIAFBBGohAkGA4cAAIQMMAgtB1PnAACEDIAEhAgwBCyABQQRqIQJBiPvAACEDCyAAIAM2AgQgACACNgIAC2sBAn9B6JLBACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMAAQIDC0EAIQEMAgsgAUEBaiEBQeSZwQAhAgwBCyABQQRqIQFBoJrBACECCyAAIAI2AgQgACABNgIAC2gBA38CQAJAAkACQEEDIAEoAgBB7f///wdqIgQgBEELTxtBAmsOAwABAgMLIAFBBGohAkHEicEAIQMMAgtB6J/BACEDIAEhAgwBCyABQQRqIQJBnKHBACEDCyAAIAM2AgQgACACNgIAC1gBAn8jAEEQayICJAAgAS0AAEEDRwR/QQAFIAJBCGogASgCBCIBKAIAIAEoAgQoAiQRAQAgAigCDCEDIAIoAggLIQEgACADNgIEIAAgATYCACACQRBqJAALWAECfyMAQRBrIgIkACABLQAAQQNHBH9BAAUgAkEIaiABKAIEIgEoAgAgASgCBCgCGBEBACACKAIMIQMgAigCCAshASAAIAM2AgQgACABNgIAIAJBEGokAAueGQITfwF+IwBBIGsiDiQAAn8gACgCACIAKAIABEACfyABIQsjAEEwayIIJAAgACgCCCERIAAoAgQhCSAAKAIAIQ0CQAJAAkACQANAAkAgESAQIgpGBEBBACEADAELIAlFDQUgCiARRyESIApBAWohECAJQQFrIQUgDSIBLQAAIQZBACECAkACQANAAkAgBsBBAEgEQCAGQR9xIQAgASACaiIDQQFqLQAAQT9xIQQgBkH/AXEiDUHfAU0EQCAAQQZ0IARyIQMMAgsgA0ECai0AAEE/cSAEQQZ0ciEEIA1B8AFJBEAgBCAAQQx0ciEDDAILIABBEnRBgIDwAHEgA0EDai0AAEE/cSAEQQZ0cnIiA0GAgMQARw0BDAoLIAZB/wFxIQMLAkACQCADQTBrQQlNBEAgAiAFRg0LIAEgAmoiAEEBaiwAACIGQb9/Sg0BIAAgCSACayIAQQEgAEG8ssIAEOwDAAsgAg0BQQAhBAwDCyACQQFqIQIMAQsLAkAgASACaiIHLAAAQb9/SgRAIAEtAAAhAAJAIAJBAUYEQEEBIQQgASEDIABBK2sOAwQBBAELIABBK0YEQCACQQFrIQQgAUEBaiEDIAJBCkkNAQwDCyABIQMgAiEEIAJBCU8NAgtBACEFA0AgAy0AAEEwayIAQQlLBEBBASEEDAQLIANBAWohAyAAIAVBCmxqIQUgBEEBayIEDQALDAMLIAEgCUEAIAJBzLLCABDsAwALQQAhBSAEIQADQCAARQ0CIAMtAABBMGsiDUEJSwRAQQEhBAwCC0ECIQQgBa1CCn4iFUIgiKcNASADQQFqIQMgAEEBayEAIA0gFaciDGoiBSAMTw0ACwsgCCAEOgAUQYCwwgBBKyAIQRRqQbC0wgBBwLTCABCgAgALIAkgBWshDAJAAkACQAJAIAVFDQAgCSACayIAIAVNBEAgAiAMRg0BDAkLIAEgBWogAmoiAywAAEG/f0wNCCADLAAAQb9/TA0BCyABIAVqIAJqIQ0gECARRw0CIAVFIAsoAhRBBHFFIAZB/wFxQegAR3JyDQIgBUEBRwRAIAdBAWosAABBv39MDQILIAdBAWohBgNAQQAhACAGIA1GDQQCfyAGLAAAIgNBAE4EQCADQf8BcSEDIAZBAWoMAQsgBi0AAUE/cSEJIANBH3EhBCADQV9NBEAgBEEGdCAJciEDIAZBAmoMAQsgBi0AAkE/cSAJQQZ0ciEJIANBcEkEQCAJIARBDHRyIQMgBkEDagwBCyAEQRJ0QYCA8ABxIAYtAANBP3EgCUEGdHJyIgNBgIDEAEYNBSAGQQRqCyEGIANBwQBrQV5xQQpqIANBMGsgA0E5SxtBEEkNAAsMAgsgByAAQQAgBUHsssIAEOwDAAsgByAFQQEgBUGcssIAEOwDAAsCQCAKRQ0AIAtB/LLCAEECEOUDRQ0AIBIhAAwBCyABIAJqIQoCQAJAAkAgBUECSQ0AIAovAABB38gARw0AIAdBAWoiCiwAAEG/f0wNASAFQQFrIQULIAwgAmshCQNAIAohAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAFIgRFDQACQCABLQAAQSRrDgsCAQEBAQEBAQEBAAELIARBAUYNBSABLAABQb9/Sg0EIAEgBEEBIARB/LPCABDsAwALIAEgBGohCkEAIQIgASEGA0AgAiEAIAYiAiAKRg0RAn8gAiwAACIDQQBOBEAgA0H/AXEhBSACQQFqDAELIAItAAFBP3EhBSADQR9xIQYgA0FfTQRAIAZBBnQgBXIhBSACQQJqDAELIAItAAJBP3EgBUEGdHIhBSADQXBJBEAgBSAGQQx0ciEFIAJBA2oMAQsgBkESdEGAgPAAcSACLQADQT9xIAVBBnRyciEFIAJBBGoLIgYgACACa2ohAiAFQSRrDgsCAAAAAAAAAAAAAgALAAsgBEEBRg0BIAEsAAFBv39KDQEgASAEQQEgBEGws8IAEOwDAAsCQAJAAkAgAARAAkAgACAESSICRQRAIAAgBEcNASALIAEgABDlA0UNBEEBIQAMFQsgACABaiwAAEG/f0oNAgsgASAEQQAgAEGQs8IAEOwDAAsgCyABIAAQ5QNFDQJBASEADBILIAsgASAAEOUDRQ0AQQEhAAwRCyACRQRAIAAgBEYNAQwUCyAAIAFqLAAAQUBIDRMLIAAgAWohCiAEIABrIQUMDAsgCCAEQQFrIgA2AiQgCEEANgIgIAggADYCHCAIQSQ2AhQgCEEkNgIoIAhBAToALCAIIAFBAWoiADYCGCAIQQhqIAhBFGoQUCAIKAIIQQFHDQ0CQCAIKAIMIgdBf0cEQCAHQQFqIQIgBEEBRw0BDAULIwBBIGsiACQAIABBADYCGCAAQQE2AgwgAEG8x8IANgIIIABCBDcCECAAQQhqQcCzwgAQpAMACyAALAAAQb9/Sg0DDAQLAkACfyABLAABIgBBAE4EQCAAQf8BcQwBCyABLQACQT9xIgMgAEEfcSICQQZ0ciAAQV9NDQAaIAEtAANBP3EgA0EGdHIiAyACQQx0ciAAQXBJDQAaIAJBEnRBgIDwAHEgAS0ABEE/cSADQQZ0cnILQS5HBEBBASEAIAtBnLTCAEEBEOUDDQ8gASwAAUFASA0BDAMLIAtB/LLCAEECEOUDBEBBASEADA8LAkAgBEEDTwRAIAEsAAJBQEgNAQsgAUECaiEKIARBAmshBQwMCyABIARBAiAEQYy0wgAQ7AMACyABIARBASAEQaC0wgAQ7AMAC0EBIQAgC0GctMIAQQEQ5QMNDAsgAUEBaiEKIARBAWshBQwICwJAIAIgBE8EQCACIARHDQIgB0ECaiICDQEMBgsgASACaiwAAEFASA0BIAdBAmohAgsgAiAESQ0BIAIgBEYNAgwDCyABIARBASACQcCzwgAQ7AMACyABIAJqLAAAQUBIDQELIAEgAmohCiAEIAJrIQUCQAJAAkACQCAHDgMKAQAFCyAALwAAQdOgAUYEQEH7s8IAIQIMAwsgAC8AAEHCoAFGBEBB+rPCACECDAMLIAAvAABB0owBRgRAQfmzwgAhAgwDCyAALwAAQcyoAUYEQEH4s8IAIQIMAwsgAC8AAEHHqAFGBEBB97PCACECDAMLIAAvAABBzKABRgRAQfazwgAhAgwDCyAALwAAQdKgAUcNAUH1s8IAIQIMAgsgAC0AAEHDAEYEQEH0s8IAIQIMAgsgAC0AAEH1AEYNBQwICyAALQAAQfUARw0HDAMLQQEhACALIAJBARDlA0UNBAwHCyABIAQgAiAEQdCzwgAQ7AMACyABLQABQfUARw0EIAdBAk8NAEEBIQcMBwsgASwAAkG/f0wNBgsgACAHaiEUIAdBAWshACABQQJqIgYhAgJAA0BBASETIAIgFEYNAQJ/IAIsAAAiA0EATgRAIANB/wFxIQMgAkEBagwBCyACLQABQT9xIQ8gA0EfcSEMIANBX00EQCAMQQZ0IA9yIQMgAkECagwBCyACLQACQT9xIA9BBnRyIQ8gA0FwSQRAIA8gDEEMdHIhAyACQQNqDAELIAxBEnRBgIDwAHEgAi0AA0E/cSAPQQZ0cnIiA0GAgMQARg0CIAJBBGoLIQIgA0Ewa0EKSSADQeEAa0EGSXINAAtBACETCwJAAkACQAJAIAdBAWsOAgYAAQtBASEAIAYtAABBK2sOAwUBBQELAkAgBi0AAEErRgRAIAdBAmshACABQQNqIQYgB0ELTw0BDAILIAdBCkkNAQtBACEDA0AgBi0AACICQcEAa0FfcUEKaiACQTBrIAJBOUsbIgJBD0sgA0H/////AEtyDQUgBkEBaiEGIAIgA0EEdHIhAyAAQQFrIgANAAsMAQtBACEDA0AgBi0AACICQcEAa0FfcUEKaiACQTBrIAJBOUsbIgJBD0sNBCAGQQFqIQYgAiADQQR0ciEDIABBAWsiAA0ACwsgE0VBgIDEACADIANBgLADc0GAgMQAa0GAkLx/SRsiAEGAgMQARnINAiAIIAA2AgQgAEEgSSAAQf8Aa0EhSXINAiAIQQRqIAsQjQFFDQALQQEhAAwCCyAHIAVBASAFQYCzwgAQ7AMACyASIQAgCyABIAQQ5QNFDQELCyAIQTBqJAAgAAwECyAAIAdBASAHQeSzwgAQ7AMACyABIAQgACAEQaCzwgAQ7AMACyAHIAAgBSAAQdyywgAQ7AMAC0GsssIAEK4EAAsMAQsgDkEANgIcIA4gATYCGCAOQgA3AhAgDiAAKQIENwIIIA5BCGpBARAfCyAOQSBqJAALXAEBfyMAQTBrIgMkACADIAE2AgwgAyAANgIIIANBATYCFCADQYzBwgA2AhAgA0IBNwIcIAMgA0EIaq1CgICAgJDEAIQ3AyggAyADQShqNgIYIANBEGogAhCkAwALZQEDfwJAAkACQAJAQQIgASgCAEH7////B2oiBCAEQQ5PGw4DAAECAwsgAUEEaiECQZybwAAhAwwCCyABQQRqIQJBpKfAACEDDAELQeCnwAAhAyABIQILIAAgAzYCBCAAIAI2AgALZQEDfwJAAkACQAJAQQIgASgCAEH7////B2oiBCAEQQxPGw4DAAECAwsgAUEEaiECQZybwAAhAwwCCyABQQRqIQJBpKfAACEDDAELQeCnwAAhAyABIQILIAAgAzYCBCAAIAI2AgALZQEDfwJAAkACQAJAQQIgASgCAEH7////B2oiBCAEQQ5PGw4DAAECAwsgAUEEaiECQbC+wAAhAwwCCyABQQRqIQJBuMrAACEDDAELQfTKwAAhAyABIQILIAAgAzYCBCAAIAI2AgALZQEDfwJAAkACQAJAQQIgASgCAEH7////B2oiBCAEQQxPGw4DAAECAwsgAUEEaiECQbC+wAAhAwwCCyABQQRqIQJBuMrAACEDDAELQfTKwAAhAyABIQILIAAgAzYCBCAAIAI2AgALZQEDfwJAAkACQAJAQQIgASgCAEH7////B2oiBCAEQQ5PGw4DAAECAwsgAUEEaiECQYDhwAAhAwwCCyABQQRqIQJBoO3AACEDDAELQdztwAAhAyABIQILIAAgAzYCBCAAIAI2AgALZQEDfwJAAkACQAJAQQIgASgCAEH7////B2oiBCAEQQxPGw4DAAECAwsgAUEEaiECQYDhwAAhAwwCCyABQQRqIQJBoO3AACEDDAELQdztwAAhAyABIQILIAAgAzYCBCAAIAI2AgALZQEDfwJAAkACQAJAQQIgASgCAEH7////B2oiBCAEQQ5PGw4DAAECAwsgAUEEaiECQcSJwQAhAwwCCyABQQRqIQJBpJPBACEDDAELQeCTwQAhAyABIQILIAAgAzYCBCAAIAI2AgALZQEDfwJAAkACQAJAQQIgASgCAEH7////B2oiBCAEQQxPGw4DAAECAwsgAUEEaiECQcSJwQAhAwwCCyABQQRqIQJBpJPBACEDDAELQeCTwQAhAyABIQILIAAgAzYCBCAAIAI2AgALnAECA38BbyMAQSBrIgMkACADIAAoAgAQ3AQiBDYCACADIAI2AgQgAiAERwRAIANBADYCCCADIANBBGogA0EIahCMAwALEO0DIgQQ3AMiBSUBEA0hBhBpIgIgBiYBIAVBhAFPBEAgBRDGAQsgAiAAKAIAIAFBAnYQpgQgAkGEAU8EQCACEMYBCyAEQYQBTwRAIAQQxgELIANBIGokAAtTAQN/IAAtAABBA0YEQCAAKAIEIgAoAgAhAiAAQQRqKAIAIgMoAgAiAQRAIAIgAREDAAsgAygCBCIBBEAgAiABIAMoAggQpwQLIABBDEEEEKcECwttAQF/IAEoAhwhAiABKAIgKAIMIQECQAJAAkACQCAAKAIALQAAQQFrDgMBAgMACyACQcD3wQBBAyABEQIADwsgAkHD98EAQQMgARECAA8LIAJBxvfBAEEKIAERAgAPCyACQdD3wQBBCSABEQIAC1IBAX8jAEEQayICJAACfyAAKAIAIgAtAABFBEAgAUHq3cAAQQQQ5QMMAQsgAiAAQQFqNgIMIAFB7t3AAEEEIAJBDGpB+NrAABB/CyACQRBqJAALUQEBfyMAQRBrIgIkAAJ/IAAoAgAiAC0AAEECRwRAIAIgADYCDCABQeyHwQBBDCACQQxqQdyHwQAQfwwBCyABQZ6JwQBBFBDlAwsgAkEQaiQAC1EBAX8jAEEQayICJAACfyAAKAIAIgAtAABBAkcEQCACIAA2AgwgAUHo1MEAQQwgAkEMakHY1MEAEH8MAQsgAUHE2sEAQRQQ5QMLIAJBEGokAAtQAQF/IwBBMGsiACQAIABBATYCDCAAQdCWwgA2AgggAEIBNwIUIAAgAEEvaq1CgICAgPA9hDcDICAAIABBIGo2AhAgAEEIakH8h8AAEKQDAAtRAQF/IwBBMGsiACQAIABBATYCDCAAQbTBwgA2AgggAEIBNwIUIAAgAEEvaq1CgICAgPDDAIQ3AyAgACAAQSBqNgIQIABBCGpBjIjAABCkAwALQwEDfwJAIAJFDQADQCAALQAAIgQgAS0AACIFRgRAIABBAWohACABQQFqIQEgAkEBayICDQEMAgsLIAQgBWshAwsgAwtMAQF/IwBBEGsiAiQAAn8gAC0AAEECRwRAIAIgADYCDCABQcSZwABBDCACQQxqQbSZwAAQfwwBCyABQfaawABBFBDlAwsgAkEQaiQAC1ABA38CQAJAAkBBAyABKAIAQQdrIgQgBEEDTxtBAmsOAgABAgsgAUEEaiECQaiWwAAhAwwBC0HQtMAAIQMgASECCyAAIAM2AgQgACACNgIAC0wBAX8jAEEQayICJAACfyAALQAAQQJHBEAgAiAANgIMIAFB2LzAAEEMIAJBDGpByLzAABB/DAELIAFBir7AAEEUEOUDCyACQRBqJAALUAEDfwJAAkACQEEDIAEoAgBBB2siBCAEQQNPG0ECaw4CAAECCyABQQRqIQJB1LfAACEDDAELQeTXwAAhAyABIQILIAAgAzYCBCAAIAI2AgALTAEBfyMAQRBrIgIkAAJ/IAAtAABBAkcEQCACIAA2AgwgAUGo38AAQQwgAkEMakGY38AAEH8MAQsgAUHa4MAAQRQQ5QMLIAJBEGokAAtQAQN/AkACQAJAQQMgASgCAEEHayIEIARBA08bQQJrDgIAAQILIAFBBGohAkHk7MAAIQMMAQtBzPrAACEDIAEhAgsgACADNgIEIAAgAjYCAAtQAQN/AkACQAJAQQMgASgCAEEHayIEIARBA08bQQJrDgIAAQILIAFBBGohAkHoksEAIQMMAQtB4KDBACEDIAEhAgsgACADNgIEIAAgAjYCAAtMAQF/IwBBEGsiAiQAAn8gAC0AAEECRwRAIAIgADYCDCABQeyHwQBBDCACQQxqQdyHwQAQfwwBCyABQZ6JwQBBFBDlAwsgAkEQaiQAC14AIAEoAgAlASACKAIAJQEgAygCACUBEBkhAUEBIQMCQEGI5cIAKAIAQQFGBEAgAEGM5cIAKAIANgIEDAELIAAgAUEARzoAAUEAIQMLIAAgAzoAAEGI5cIAQgA3AgALSAECfyAAKAIAIgFB+////wdqIgJBDU0gAkECR3EgAUGDgICAeEcgAUGEgICAeExxciABRXJFBEAgACgCBCABQQJ0QQQQpwQLC0gBAn8gACgCACIBQfv///8HaiICQQtNIAJBAkdxIAFBg4CAgHhHIAFBhICAgHhMcXIgAUVyRQRAIAAoAgQgAUECdEEEEKcECwtCAQF/IAIgACgCACAAKAIIIgNrSwRAIAAgAyACEJMBIAAoAgghAwsgACgCBCADaiABIAIQOxogACACIANqNgIIQQALQgEBfyACIAAoAgAgACgCCCIDa0sEQCAAIAMgAhCgASAAKAIIIQMLIAAoAgQgA2ogASACEDsaIAAgAiADajYCCEEAC08BAn8gACgCBCECIAAoAgAhAwJAIAAoAggiAC0AAEUNACADQfjDwgBBBCACKAIMEQIARQ0AQQEPCyAAIAFBCkY6AAAgAyABIAIoAhARAAALTgEBfyMAQRBrIgIkACACIAAoAgAiADYCDCABQeGhwQBBDkHvocEAQQ0gAEEEakG4h8EAQdSHwQBBAyACQQxqQfSGwQAQwwEgAkEQaiQAC04BAX8jAEEQayICJAAgAiAAKAIAIgBBBGo2AgwgAUGIhsEAQQlBkYbBAEELIABB6IXBAEGchsEAQQkgAkEMakH4hcEAEMMBIAJBEGokAAtOAQF/IwBBEGsiAiQAIAIgACgCACIANgIMIAFBptnBAEEOQcTZwQBBDSAAQQRqQbTZwQBBi87BAEEDIAJBDGpBuM3BABDDASACQRBqJAALSAEBfyMAQRBrIgIkACACQQhqIAEQ8wIgAiACKAIIIAIoAgwoAhgRAQAgAigCBCEBIAAgAigCADYCACAAIAE2AgQgAkEQaiQAC08BAn9BheXCAC0AABogASgCBCECIAEoAgAhA0EIQQQQ9QMiAUUEQEEEQQgQ0wQACyABIAI2AgQgASADNgIAIABB2KHCADYCBCAAIAE2AgALQgEBfyACIAAoAgAgACgCCCIDa0sEQCAAIAMgAhC5ASAAKAIIIQMLIAAoAgQgA2ogASACEDsaIAAgAiADajYCCEEAC0kBAX8jAEEQayICJAAgAiAANgIMIAFB0bXAAEEOQd+1wABBDSAAQQRqQZCZwABBrJnAAEEDIAJBDGpBzJjAABDDASACQRBqJAALSQEBfyMAQRBrIgIkACACIAA2AgwgAUHl2MAAQQ5B89jAAEENIABBBGpBpLzAAEHAvMAAQQMgAkEMakHgu8AAEMMBIAJBEGokAAtJAQF/IwBBEGsiAiQAIAIgADYCDCABQc37wABBDkHb+8AAQQ0gAEEEakH03sAAQZDfwABBAyACQQxqQfjcwAAQwwEgAkEQaiQAC0kBAX8jAEEQayICJAAgAiAANgIMIAFB4aHBAEEOQe+hwQBBDSAAQQRqQbiHwQBB1IfBAEEDIAJBDGpB9IbBABDDASACQRBqJAALQgEBfyMAQSBrIgMkACADQQA2AhAgA0EBNgIEIANCBDcCCCADIAE2AhwgAyAANgIYIAMgA0EYajYCACADIAIQpAMACz0BAn8gACAAKAIEIgMgAms2AgQgACAAKAIAIAIgA0tyIgQ2AgBBASEDIAQEfyADBSAAKAIIIAEgAhDlAwsLRgECfwJAAkACQCABLQAAQQFrDgIAAQILIAFBBGohAkHgp8AAIQMMAQsgAUEEaiECQdizwAAhAwsgACADNgIEIAAgAjYCAAtGAQJ/AkACQAJAIAEtAABBAWsOAgABAgsgAUEEaiECQfTKwAAhAwwBCyABQQRqIQJB7NbAACEDCyAAIAM2AgQgACACNgIAC0YBAn8CQAJAAkAgAS0AAEEBaw4CAAECCyABQQRqIQJB3O3AACEDDAELIAFBBGohAkHU+cAAIQMLIAAgAzYCBCAAIAI2AgALRgECfwJAAkACQCABLQAAQQFrDgIAAQILIAFBBGohAkHgk8EAIQMMAQsgAUEEaiECQeifwQAhAwsgACADNgIEIAAgAjYCAAs+AQF/IwBBEGsiAiQAIAJBCGogASABKAIAKAIEEQEAIAIoAgwhASAAIAIoAgg2AgAgACABNgIEIAJBEGokAAumAQICfwF+IAAoAgAhACABKAIUIgJBEHFFBEAgAkEgcUUEQCAAIAEQrwQPCyMAQYABayICJAAgACkDACEEQQAhAANAIAAgAmpB/wBqIASnQQ9xIgNBMHIgA0E3aiADQQpJGzoAACAAQQFrIQAgBEIPViAEQgSIIQQNAAsgAUEBQY/EwgBBAiAAIAJqQYABakEAIABrEDUgAkGAAWokAA8LIAAgARD+AQs5AQF/IAAoAgAhACABKAIUIgJBEHFFBEAgAkEgcUUEQCAAIAEQxQEPCyAAIAEQ/AEPCyAAIAEQ/QELOQEBfyAAKAIAIQAgASgCFCICQRBxRQRAIAJBIHFFBEAgACABEKkDDwsgACABEIQCDwsgACABEIMCCzkBAX8gACgCACEAIAEoAhQiAkEQcUUEQCACQSBxRQRAIAAgARCtBA8LIAAgARCEAg8LIAAgARCDAgs7AQF/IwBBEGsiAiQAIAIgACgCADYCDCABQYWJwQBBFkGbicEAQQMgAkEMakHAhsEAEMkBIAJBEGokAAs7AQF/IwBBEGsiAiQAIAIgACgCADYCDCABQfCIwQBBEUGBicEAQQQgAkEMakHgiMEAEMkBIAJBEGokAAs7AQF/IwBBEGsiAiQAIAIgACgCADYCDCABQYWXwQBBG0HUh8EAQQMgAkEMakHAhsEAEMkBIAJBEGokAAs9AQF+QYXlwgAtAAAaIAApAgAhAUEMQQQQ9QMiAARAIAAgATcCBCAAQYCAgIB4NgIAIAAPC0EEQQwQ0wQACzsBAX8jAEEQayICJAAgAiAAKAIANgIMIAFB8M3BAEEbQYvOwQBBAyACQQxqQYTNwQAQyQEgAkEQaiQACzgAAkAgAkGAgMQARg0AIAAgAiABKAIQEQAARQ0AQQEPCyADRQRAQQAPCyAAIAMgBCABKAIMEQIACzgBAX8jAEEQayICJAAgAiAANgIMIAFByJrAAEERQdmawABBBCACQQxqQbiawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB3ZrAAEEWQfOawABBAyACQQxqQZiYwAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB9arAAEEbQayZwABBAyACQQxqQZiYwAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB3L3AAEERQe29wABBBCACQQxqQcy9wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8b3AAEEWQYe+wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBic7AAEEbQcC8wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBrODAAEERQb3gwABBBCACQQxqQZzgwAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBweDAAEEWQdfgwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8fDAAEEbQZDfwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8IjBAEERQYGJwQBBBCACQQxqQeCIwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhYnBAEEWQZuJwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhZfBAEEbQdSHwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzwBAX8jAEEQayICJAAgAkGQksIANgIMIAIgADYCCCACQQhqQZSSwgAgAkEMakGUksIAIAFB5J/CABBrAAs4AQF/IwBBEGsiAiQAIAIgADYCDCABQeywwgBBDUH5sMIAQQQgAkEMakHcsMIAEMkBIAJBEGokAAs5AQF/IwBBEGsiAyQAIAMgATYCDCADIAA2AgggA0EIakGswsIAIANBDGpBrMLCACACQeyOwgAQawALMAEBfyMAQRBrIgIkACACQQhqIAAQ8wIgAigCCCABIAIoAgwoAhARAAAgAkEQaiQACzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEMUBDwsgACABEPwBDwsgACABEP0BCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEK0EDwsgACABEIQCDwsgACABEIMCCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEKkDDwsgACABEIQCDwsgACABEIMCCzMBAX8jAEEQayICJAAgAiAAKAIANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAszAQF/IwBBEGsiAiQAIAIgACgCADYCDCABQejUwQBBDCACQQxqQdjUwQAQfyACQRBqJAALLQACQCAAIAEQrANFDQAgAARAQYXlwgAtAAAaIAAgARD1AyIBRQ0BCyABDwsACzcBAX8jAEEgayIBJAAgAUEANgIYIAFBATYCDCABQdzZwgA2AgggAUIENwIQIAFBCGogABCkAwALMwEBfyAAKAIAIgFBhICAgHhMIAFBg4CAgHhHcSABRXJFBEAgACgCBCABQQJ0QQQQpwQLCzABAX8jAEEQayICJAAgAiAANgIMIAFBxJnAAEEMIAJBDGpBtJnAABB/IAJBEGokAAsvACAAQZybwAA2AgQgACABIAFBACABLQAAQQJrQf8BcSIAQQFGGyAAQQJLGzYCAAswAQF/IwBBEGsiAiQAIAIgADYCDCABQdi8wABBDCACQQxqQci8wAAQfyACQRBqJAALLwAgAEGwvsAANgIEIAAgASABQQAgAS0AAEECa0H/AXEiAEEBRhsgAEECSxs2AgALMAEBfyMAQRBrIgIkACACIAA2AgwgAUGo38AAQQwgAkEMakGY38AAEH8gAkEQaiQACy8AIABBgOHAADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACy8AIABBxInBADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACzABAX8jAEEQayICJAAgAiAANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAssAQF/IwBBEGsiACQAIABBCGoiAiABQfyVwgBBCxCmAyACEK4CIABBEGokAAuEAQEDfyMAQSBrIgQkACAEQQhqIgMQ8AECf0GF5cIALQAAGkEkQQQQ9QMiAgRAIAJB5LrAADYCACACIAE2AiAgAiAANgIcIAIgAykCADcCBCACQQxqIANBCGopAgA3AgAgAkEUaiADQRBqKQIANwIAIAIMAQtBBEEkENMEAAsgBEEgaiQACzgBAX9BASEBIAAtAARFBEAgACgCACIBKAIcQY7EwgBBASABKAIgKAIMEQIAIQELIAAgAToABCABC5ABAQN/IwBBIGsiAyQAIANBCGoiAhDwAQJ/QYXlwgAtAAAaQShBBBD1AyIBBEAgAUGcgsAANgIAIAEgAikCADcCBCABIAApAgA3AhwgAUEMaiACQQhq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NgIMIABBhKLCACABKAIEIAEoAggiAC0ACCAALQAJEMEBAAsgACADNgIEIAAgAjYCACAAQeihwgAgASgCBCABKAIIIgAtAAggAC0ACRDBAQALKgAgAEH/AXFFBEBDAAAAAA8LIABBAWtB/wFxs0NFIpE9lEMAABDBkhBSCy0AIAEoAhwgAiADIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAsyAQF/IAEoAhxBvMHCAEEBIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAshAAJAIAEgAxCsAwRAIAAgASADIAIQ3wMiAA0BCwALIAALIgEBfyAAKAIAIgAgAEEfdSICcyACayAAQX9zQR92IAEQbAslACAARQRAQfiPwgBBMhDIBAALIAAgAiADIAQgBSABKAIQEQsACygAIAEgACgCAC0AAEECdCIAQeC8wgBqKAIAIABBzLzCAGooAgAQ5QMLGQEBf0GAgICAeCABayAATyACIAFpQQFGGwslACABIAAtAABBAnQiAEH8tcAAaigCACAAQey1wABqKAIAEOUDCyUAIABBnJvAADYCBCAAIAFBBGpBACABKAIAQYKAgIB4Rhs2AgALIQAgAEHwosAANgIEIAAgAUEBakEAIAEtAABBAkYbNgIACyUAIAEgAC0AAEECdCIAQZDZwABqKAIAIABBgNnAAGooAgAQ5QMLJQAgAEGwvsAANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAshACAAQYTGwAA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgASAALQAAQQJ0IgBB+PvAAGooAgAgAEHo+8AAaigCABDlAwslACAAQYDhwAA2AgQgACABQQRqQQAgASgCAEGCgICAeEYbNgIACyEAIABBsOjAADYCBCAAIAFBAWpBACABLQAAQQJGGzYCAAshACAAQbSOwQA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgAEHEicEANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAslACABIAAtAABBAnQiAEGMosEAaigCACAAQfyhwQBqKAIAEOUDCyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCABKAIQEQcACyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCAB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BBD1AyILBEACQEGF5cIALQAAGkGACEEEEPUDIghFDQJBheXCAC0AABpBgAhBBBD1AyIERQ0AQYXlwgAtAAAaQYAIQQQQ9QMiDkUNAkGF5cIALQAAGkGACEEEEPUDIgxFDQBBheXCAC0AABpBgAhBBBD1AyISRQ0CIANCADcDqAIgA0EBNgLoASADQQA6AOQBIANBADoA4gEgA0EAOgDgASADQTQ7AdwBIANBADYC2AEgAyASNgLUASADQoCAgICAIDcCzAEgAyAMNgLIASADQoCAgICAIDcDwAEgA0KAgICAwAA3A7gBIANBIzsBtAEgA0EANgKwASADIA42AqwBIANCgICAgIAgNwKkASADIAQ2AqABIANCgICAgIAgNwOYASADQoCAgIDAADcDkAEgA0EfOwGMASADQQA2AogBIAMgCDYChAEgA0KAgICAgCA3AnwgAyALNgJ4IANCgICAgIAgNwNwIANCgICAgMAANwNoIANBwAJqQgA3AwAgA0G4AmpCADcDACADQbACakIANwMAIANB/AFqQQA2AgAgA0H0AWpCADcCACADQgA3AuwBIANC1uuC7ur9ifXgADcDgAIgA0LP1tO+0ser2UI3A4gCIANCADcDkAIgA0L56tDQ58mh5OEANwOYAiADQgA3A6ACIANBADYCyAIgA0IANwPQAiADIAY2AtgCIANBADYC5AIgA0EINgKUAyADQoCAgIAQNwLcAiADQoGAgIDAADcCjAMgA0EANgKIAyADQoCAgIAQNwPoAiADQgA3A/ACIANCBDcD+AIgA0KAgICAEDcDgAMMAwsLQQRBgAhBzIDCABDXAwALQQRBgAhB3IDCABDXAwALIAdBADYCqAcgB0EANgKwByAHQQA6ANwKIAdBADYC2AogByAjNwPQCiAHKQOoByEgIAcpA7AHISMgB0HoA2oiBiADQagDEDsaIAdBCGoQSSAHICM3AyggByAgNwMgIAcgITcDGCAHIA02AgwgByAiPgIQIAcgIkIgiD4CFCAHIAU2AgggB0EwaiAGQagDEDshCCAFQQFxBEBBDCEQIAcoAtgDIhJFDQEgBygC3AMhFwNAIBJB1AFrIQQgEkEEaiEGIBIvAd4WIgNBAnQhC0F/IQUCQAJAA0AgC0UEQCADIQUMAgsgBigCACEOIAVBAWohBSAEQYQCaiEEIAtBBGsh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EwAgAEHMuMAANgIEIAAgATYCAAsTACAAQYi5wAA2AgQgACABNgIACxMAIABBxLnAADYCBCAAIAE2AgALEwAgAEGAusAANgIEIAAgATYCAAsTACAAQbC+wAA2AgQgACABNgIACxMAIABBKDYCBCAAQYjbwAA2AgALEwAgAEGA4cAANgIEIAAgATYCAAshACAAQqTFo/yfjvDjADcDCCAAQqqooLmusOaw6QA3AwALEAAgACgCACAAKAIEIAEQMAsRACAAKAIAIAAoAgQgARDVBAsiACAAQsuH6/rgqLu20AA3AwggAELEr9zF2tKv9bh/NwMACxMAIABBKDYCBCAAQcCFwQA2AgALEwAgAEHEicEANgIEIAAgATYCAAsgACAAQrz8k7Ko16DsTDcDCCAAQuuYqJm2gbKefzcDAAshACAAQriynYTMrpfUQjcDCCAAQu/Dv6KOjcrEoH83AwALIAAgAEKcnaLxgrvwoHU3AwggAELRqsqvpcqt8kA3AwALIQAgAEL7wqCWlfy/yHo3AwggAELmsfLlkYe/ybF/NwMACyIAIABC9auQ77TsvKaWfzcDCCAAQrHh7P30uYbLwgA3AwALIAAgAELNnq77nqC2sEE3AwggAELxps+Y0aSn/gE3AwALIAAgAEK3v8ue+N2SoEM3AwggAEKvuaX0x5vV+zA3AwALIQAgAEKWl7rs79nZo3Q3AwggAEKH+OXLhuPSwtQANwMACyEAIABC/O6Qyq7osdU1NwMIIABC2OvVj+a1zN2OfzcDAAshACAAQrzprN2Y1v7ui383AwggAEKk3Nqt0/nNwEU3AwALIQAgAELl6obQ6cP/7Xk3AwggAEL30OLk1cPQ6ad/NwMACyEAIABC5sHsgPKk3YtlNwMIIABChu7u8+efmIeefzcDAAshACAAQs7Is8mT6a+2pX83AwggAELt66KMv7HLkg83AwALIgAgAEKcrtGn56WAwMIANwMIIABC16rLiaf+wYLHADcDAAsiACAAQt3+weC9o+rogn83AwggAEKX2/aYrfP7zY5/NwMACyEAIABCgsDc4LCv07mnfzcDCCAAQpbk17fDtcOKAzcDAAshACAAQrvV0cb1jfDEkH83AwggAELVi9bpuKS4kXk3AwALIQAgAEKynOer2rGju98ANwMIIABCvfif/8L+hsNVNwMACyIAIABC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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAAVwAAAFYAAABgERAAWAAAAFkAAABaAAAAWwAAAFwAAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAA/wAAAFYAAAD0IhAAAAEAAFkAAAABAQAAWwAAAAIBAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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bEVuY29kaW5nSW52YWxpZENoYXJFbmNvZGluZwAAAAAAAAAEAAAABAAAAEEAAABJbnZhbGlkVGFnRW5jb2RpbmdEZXNlcmlhbGl6ZUFueU5vdFN1cHBvcnRlZFNpemVMaW1pdFNlcXVlbmNlTXVzdEhhdmVMZW5ndGgAAAAAAAQAAAAEAAAANQEAAEN1c3RvbU5vbmVTb21lUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVkAAAAAAAABAAAAAQAAAA2AQAAVG9vTWFueUJpdHNudW1fcmVxdWVzdGVkX2JpdHNsaW1pdE5vdEVub3VnaFJlbWFpbmluZ0JpdHNyZXF1ZXN0ZWRyZW1haW5pbmdBY2NMb2dJc1plcm8AAAAAAAABAAAAAQAAADcBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAA4AQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAAA5AQAARwAAAHAwEAA6AQAASQAAADsBAABKAAAAPAEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABNAAAAUmVhZEZyYW1lSGVhZGVyRXJyb3IAAAAABAAAAAQAAABOAAAARnJhbWVIZWFkZXJFcnJvcldpbmRvd1NpemVUb29CaWcAAAAABAAAAAQAAABPAAAARGljdGlvbmFyeURlY29kZUVycm9yAAAAAAAAAAQAAAAEAAAAUAAAAEZhaWxlZFRvUmVhZEJsb2NrSGVhZGVyAAAAAAAEAAAABAAAAFEAAABGYWlsZWRUb1JlYWRCbG9ja0JvZHlGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzRXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzVG9vTWFueVdlaWdodHNNaXNzaW5nV2VpZ2h0c0xlZnRvdmVySXNOb3RBUG93ZXJPZjJOb3RFbm91Z2hCeXRlc1RvRGVjb21wcmVzc1dlaWdodHNoYXZlRlNFVGFibGVVc2VkVG9vTWFueUJ5dGVzdXNlZGF2YWlsYWJsZV9ieXRlc05vdEVub3VnaEJ5dGVzSW5Tb3VyY2VXZWlnaHRCaWdnZXJUaGFuTWF4TnVtQml0c01heEJpdHNUb29IaWdoAAAAAAAAAAEAAAABAAAAVgAAAAAAAAABAAAAAQAAAD0BAABWAAAAIDQQAD4BAABZAAAAPwEAAFsAAABAAQAAVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZVplcm9PZmZzZXROb3RFbm91Z2hCeXRlc0Zvck51bVNlcXVlbmNlcwAAAAAABAAAAAQAAABdAAAARXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlAAAAQQEAAAwAAAAEAAAAXwAAAEEBAAAMAAAABAAAAEIBAABfAAAAKDUQAEMBAABiAAAAOwEAAGMAAAA8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YWxzbmVlZGVkAAAAAAAABAAAAAQAAABjAQAAQml0c3RyZWFtUmVhZE1pc21hdGNocmVhZF90aWxEZWNvZGVkTGl0ZXJhbENvdW50TWlzbWF0Y2hkZWNvZGVkAGQBAAAUAAAABAAAALQAAABkAQAAFAAAAAQAAABlAQAAtAAAAMQ8EABmAQAAtwAAADsBAAC4AAAAPAEAAAAAAAAMAAAABAAAALkAAAAAAAAADAAAAAQAAABnAQAAuQAAAAA9EAA6AQAAuwAAADsBAABKAAAAPAEAAGgBAAAYAAAABAAAAL0AAABoAQAAGAAAAAQAAABpAQAAvQAAADw9EABqAQAAwAAAADsBAADBAAAAPAEAAAAAAAAMAAAABAAAAMIAAAAAAAAADAAAAAQAAABrAQAAwgAAAHg9EABsAQAAxQAAADsBAADGAAAAPAEAAElsbGVnYWxMaXRlcmFsU2VjdGlvblR5cGVOb3RFbm91Z2hCeXRlc25lZWRfYXRfbGVhc3QDAAAAAwAAAAoAAAAIAAAA8i4QAPUuEAD4LhAAAi8QAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAAAIPhAAbQAAACoCAAARAAAAYW4gYXJyYXkgb2YgbGVuZ3RoIDQAAAAAAAAAAAEAAABtAQBBtP3AAAv1KAEAAABtAQAAAAAAAAgAAAAEAAAAbgEAAHN0cnVjdCBXbGcwSGVhZGVyIHdpdGggNyBlbGVtZW50cwAAAMw+EAAhAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogaW52YWxpZCBPbmNlIHN0YXRl+D4QADwAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvb25jZS9ub190aHJlYWRzLnJzPD8QAHwAAAA1AAAAEgAAAGZhaWxlZCB0byBmaWxsIHdob2xlIGJ1ZmZlcgDIPxAAGwAAACUAAAACAAAA5D8QAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2RpbmcvYmxvY2tfZGVjb2Rlci5yc0J1ZyBpbiB0aGlzIGxpYnJhcnkA+D8QAGwAAACYAAAAFgAAAFdyb25nIG51bWJlciBvZiBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiAAAIhAEAAaAAAAokAQABQAAAD4PxAAbAAAAK0AAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uID09IHVwcGVyX2xpbWl0X2Zvcl9saXRlcmFscyBhcyB1MzIA+D8QAGwAAACzAAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHUzMjo6ZnJvbShieXRlc19pbl9saXRlcmFsc19oZWFkZXIpICsgYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uICsKICAgICAgICAgICAgdTMyOjpmcm9tKGJ5dGVzX2luX3NlcXVlbmNlX2hlYWRlcikgKyByYXcubGVuKCkgYXMgdTMyID09CiAgICBoZWFkZXIuY29udGVudF9zaXplAAD4PxAAbAAAAMEAAAAJAAAA+D8QAGwAAAC6AAAAFwAAAPg/EABsAAAAiwAAABcAAABIb3cgZGlkIHlvdSBldmVuIGdldCB0aGlzLiBUaGUgZGVjb2RlciBzaG91bGQgZXJyb3Igb3V0IGlmIGl0IGRldGVjdHMgYSByZXNlcnZlZC10eXBlIGJsb2NrAPg/EABsAAAAcAAAABEAAABmYWlsZWQgdG8gZmlsbCB3aG9sZSBidWZmZXIAkEIQABsAAAAlAAAAAgAAAKxCEABkZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBEaXNwbGF5AAAAAAQAAAAEAAAAbwEAAAAAAAAEAAAABAAAAHABAABVdGY4RXJyb3J2YWxpZF91cF90b2Vycm9yX2xlblJhd1JMRUNvbXByZXNzZWRSZXNlcnZlZAAAAAAAAAAEAAAABAAAAEAAAABUb29NYW55Qml0c251bV9yZXF1ZXN0ZWRfYml0c2xpbWl0AAAAAAAABAAAAAQAAABBAAAATm90RW5vdWdoUmVtYWluaW5nQml0c3JlcXVlc3RlZHJlbWFpbmluZ0FjY0xvZ0lzWmVybwAAAAABAAAAAQAAAHEBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAByAQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAABzAQAARwAAALREEABKAAAASQAAAHQBAABKAAAAdQEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzAAAAAAAAAAQAAAAEAAAAVQAAAEV4dHJhUGFkZGluZ3NraXBwZWRfYml0c1Rvb01hbnlXZWlnaHRzTWlzc2luZ1dlaWdodHNMZWZ0b3ZlcklzTm90QVBvd2VyT2YyTm90RW5vdWdoQnl0ZXNUb0RlY29tcHJlc3NXZWlnaHRzaGF2ZUZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaAAAAAABAAAAAQAAAFYAAAAAAAAAAQAAAAEAAAB2AQAAVgAAACRHEABbAAAAWQAAAHcBAABbAAAAeAEAAFVuc3VwcG9ydGVkT2Zmc2V0b2Zmc2V0X2NvZGVaZXJvT2Zmc2V0Tm90RW5vdWdoQnl0ZXNGb3JOdW1TZXF1ZW5jZXMAAAAAAAQAAAAEAAAAXQAAAEV4dHJhQml0c2JpdHNfcmVtYWluaW5nTWlzc2luZ0NvbXByZXNzaW9uTW9kZU1pc3NpbmdCeXRlRm9yUmxlTGxUYWJsZU1pc3NpbmdCeXRlRm9yUmxlT2ZUYWJsZU1pc3NpbmdCeXRlRm9yUmxlTWxUYWJsZQAAAHkBAAAMAAAABAAAAF8AAAB5AQAADAAAAAQAAAB6AQAAXwAAACxIEAB7AQAAYgAAAHQBAABjAAAAdQEAAAAAAAAQAAAACAAAAGQAAAAAAAAAEAAAAAgAAAB8AQAAZAAAAGhIEAB9AQAAZwAAAH4BAABoAAAAfwEAAIABAAAYAAAABAAAAGoAAACAAQAAGAAAAAQAAACBAQAAagAAAKRIEACCAQAAbQAAAHQBAABuAAAAdQEAAIMBAAAIAAAABAAAAHAAAACDAQAACAAAAAQAAACEAQAAcAAAAOBIEACFAQAAcwAAAHQBAAB0AAAAdQEAAIYBAAAYAAAABAAAAHYAAACGAQAAGAAAAAQAAACHAQAAdgAAABxJEACIAQAAeQAAAHQBAAB6AAAAdQEAAIkBAAAIAAAABAAAACUAAACJAQAACAAAAAQAAAAmAAAAJQAAAFhJEAAnAAAAKAAAACkAAAAqAAAAdQEAAAAAAAAMAAAABAAAAHsAAAAAAAAADAAAAAQAAACKAQAAewAAAJRJEACLAQAAfgAAAHQBAAB/AAAAdQEAAIwBAAAUAAAABAAAAIEAAACMAQAAFAAAAAQAAACNAQAAgQAAANBJEACOAQAAhAAAAHQBAACFAAAAdQEAAAAAAAAEAAAABAAAAFIAAABSZWFkRXJyb3JGb3VuZFJlc2VydmVkQmxvY2sAAAAAAAQAAAAEAAAAhgAAAEJsb2NrVHlwZUVycm9yAAAAAAAABAAAAAQAAACHAAAAQmxvY2tTaXplRXJyb3JCbG9ja0NvbnRlbnRSZWFkRXJyb3JNYWxmb3JtZWRTZWN0aW9uSGVhZGVyZXhwZWN0ZWRfbGVucmVtYWluaW5nX2J5dGVzAAAAAAQAAAAEAAAAiAAAAERlY29tcHJlc3NMaXRlcmFsc0Vycm9yAAAAAAAEAAAABAAAAIkAAABMaXRlcmFsc1NlY3Rpb25QYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAigAAAFNlcXVlbmNlc0hlYWRlclBhcnNlRXJyb3IAAAAAAAAABAAAAAQAAACLAAAARGVjb2RlU2VxdWVuY2VFcnJvcgAAAAAABAAAAAQAAACMAAAARXhlY3V0ZVNlcXVlbmNlc0Vycm9ySW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnTWFnaWNOdW1iZXJSZWFkRXJyb3JCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvclNraXBGcmFtZW1hZ2ljX251bWJlcmxlbmd0aAAAAAAAAAQAAAAEAAAAjQAAAEJhZE1hZ2ljTnVtAAAAAAAEAAAABAAAAI4AAABIdWZmbWFuVGFibGVFcnJvcgAAAAAAAAAEAAAABAAAAI8AAABEZWNvZGVidWZmZXJFcnJvck5vdEVub3VnaEJ5dGVzRm9yU2VxdWVuY2V3YW50ZWQAAAAAAQAAAAEAAACQAAAAAAAAAAEAAAABAAAAjwEAAJAAAADUTBAAWwAAAJIAAAB3AQAAWwAAAHgBAAAAAAAABAAAAAQAAACTAAAAAAAAAAQAAAAEAAAAkAEAAJMAAAAQTRAASgAAAJUAAAB0AQAASgAAAHUBAACRAQAAFAAAAAQAAACXAAAAkQEAABQAAAAEAAAAkgEAAJcAAABMTRAAkwEAAJoAAAB0AQAAmwAAAHUBAAAAAAAADAAAAAQAAACcAAAAAAAAAAwAAAAEAAAAlAEAAJwAAACITRAAlQEAAJ8AAAB0AQAAoAAAAHUBAAAAAAAACAAAAAQAAAChAAAAAAAAAAgAAAAEAAAAlgEAAKEAAADETRAASgAAAKMAAAB0AQAASgAAAHUBAACXAQAAFAAAAAQAAAClAAAAlwEAABQAAAAEAAAAmAEAAKUAAAAAThAAmQEAAKgAAAB0AQAAqQAAAHUBAAAAAAAADAAAAAQAAACqAAAAAAAAAAwAAAAEAAAAmgEAAKoAAAA8ThAAmwEAAK0AAAB0AQAArgAAAHUBAABEZWNvZGVyU3RhdGVJc0ZhaWxlZEV4cGVjdGVkSGVhZGVyT2ZQcmV2aW91c0Jsb2NrAAAAAAAAAAEAAAABAAAAnAEAAHN0ZXBzb3VyY2UAAAAAAAAEAAAABAAAALAAAABEZWNvbXByZXNzQmxvY2tFcnJvck1pc3NpbmdDb21wcmVzc2VkU2l6ZU1pc3NpbmdOdW1TdHJlYW1zAAAAAAAABAAAAAQAAACxAAAASHVmZm1hbkRlY29kZXJFcnJvclVuaW5pdGlhbGl6ZWRIdWZmbWFuVGFibGVNaXNzaW5nQnl0ZXNGb3JKdW1wSGVhZGVyTWlzc2luZ0J5dGVzRm9yTGl0ZXJhbHNuZWVkZWQAAAAAAAAEAAAABAAAAJ0BAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAngEAABQAAAAEAAAAtAAAAJ4BAAAUAAAABAAAAJ8BAAC0AAAA2E8QAKABAAC3AAAAdAEAALgAAAB1AQAAAAAAAAwAAAAEAAAAuQAAAAAAAAAMAAAABAAAAKEBAAC5AAAAFFAQAEoAAAC7AAAAdAEAAEoAAAB1AQAAogEAABgAAAAEAAAAvQAAAKIBAAAYAAAABAAAAKMBAAC9AAAAUFAQAKQBAADAAAAAdAEAAMEAAAB1AQAAAAAAAAwAAAAEAAAAwgAAAAAAAAAMAAAABAAAAKUBAADCAAAAjFAQAMYAAADFAAAAdAEAAMYAAAB1AQAASWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzbmVlZF9hdF9sZWFzdAMAAAADAAAACgAAAAgAAAAlQxAAKEMQACtDEAA1QxAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9zdGQvc3JjL2lvL21vZC5ycwAAHFEQAGoAAACyAQAAMQAAAGFzc2VydGlvbiBmYWlsZWQ6IGZpbGxlZCA8PSBzZWxmLmJ1Zi5pbml0L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9jb3JlL3NyYy9pby9ib3Jyb3dlZF9idWYucnMAAADBURAAdAAAAB0BAAAJAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnNIUhAAgAAAAFgCAAAwAAAASW52YWxpZCBGcmFtZV9Db250ZW50X1NpemVfRmxhZzsgSXM6ICwgU2hvdWxkIGJlIG9uZSBvZjogMCwgMSwgMiwgMwDYUhAAJQAAAP1SEAAeAEG0psEAC8piwAMAAHdpbmRvd19zaXplIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bS4gSXM6ICwgU2hvdWxkIGJlIGxvd2VyIHRoYW46IAAAADhTEAAtAAAAZVMQABgAAAAABAAAAAAAAHdpbmRvd19zaXplIHNtYWxsZXIgdGhhbiBhbGxvd2VkIG1pbmltdW0uIElzOiAsIFNob3VsZCBiZSBncmVhdGVyIHRoYW46IJhTEAAuAAAAxlMQABoAAAABAAAAAAAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gZGljdF9pZC4gSXM6ICwgU2hvdWxkIGJlOiAAAPhTEAAhAAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQgbGVuZ3RoLiBJczogADhUEAA3AAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgd2FzIHplcm9JbnZhbGlkIGZyYW1lX2NvbnRlbnRfc2l6ZS4gSXM6ICwgU2hvdWxkIGJlIG9uZSBvZiAxLCAyLCA0LCA4IGJ5dGVzAACbVBAAIAAAALtUEAAjAAAARXJyb3Igd2hpbGUgcmVhZGluZyBtYWdpYyBudW1iZXI6IAAA8FQQACIAAABSZWFkIHdyb25nIG1hZ2ljIG51bWJlcjogMHgAHFUQABsAAABFcnJvciB3aGlsZSByZWFkaW5nIGZyYW1lIGRlc2NyaXB0b3I6IAAAQFUQACYAAABFcnJvciB3aGlsZSByZWFkaW5nIHdpbmRvdyBkZXNjcmlwdG9yOiAAcFUQACcAAABFcnJvciB3aGlsZSByZWFkaW5nIGRpY3Rpb25hcnkgaWQ6IACgVRAAIwAAAEVycm9yIHdoaWxlIHJlYWRpbmcgZnJhbWUgY29udGVudCBzaXplOiDMVRAAKAAAAFNraXBwYWJsZUZyYW1lIGVuY291bnRlcmVkIHdpdGggTWFnaWNOdW1iZXIgMHggYW5kIGxlbmd0aCAgYnl0ZXP8VRAALgAAACpWEAAMAAAANlYQAAYAAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBoZWFkZXJSZXNlcnZlZCBibG9jayBvY2N1cmVkLiBUaGlzIGlzIGNvbnNpZGVyZWQgY29ycnVwdGlvbiBieSB0aGUgZG9jdW1lbnRhdGlvbkVycm9yIGdldHRpbmcgYmxvY2sgdHlwZTogwlYQABoAAABFcnJvciBnZXR0aW5nIGJsb2NrIGNvbnRlbnQgc2l6ZTogAADkVhAAIgAAAEludmFsaWQgQmxvY2t0eXBlIG51bWJlci4gSXM6ICBTaG91bGQgYmUgb25lIG9mOiAwLCAxLCAyLCAzICgzIGlzIHJlc2VydmVkIHRob3VnaAAAABBXEAAeAAAALlcQADMAAAAAAAIAQmxvY2tzaXplIHdhcyBiaWdnZXIgdGhhbiB0aGUgYWJzb2x1dGUgbWF4aW11bSAgKDEyOGtiKS4gSXM6IAAAAHhXEAAvAAAAp1cQAA4AAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBjb250ZW50OiAAyFcQACcAAABNYWxmb3JtZWQgc2VjdGlvbiBoZWFkZXIuIFNheXMgbGl0ZXJhbHMgd291bGQgYmUgdGhpcyBsb25nOiAgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBsZWZ0APhXEAA8AAAANFgQABQAAABIWBAACwAAAENhbid0IGRlY29kZSBuZXh0IGJsb2NrIGlmIGZhaWxlZCBhbG9uZyB0aGUgd2F5LiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VDYW4ndCBkZWNvZGUgbmV4dCBibG9jayBib2R5LCB3aGlsZSBleHBlY3RpbmcgdG8gZGVjb2RlIHRoZSBoZWFkZXIgb2YgdGhlIHByZXZpb3VzIGJsb2NrLiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VFcnJvciB3aGlsZSByZWFkaW5nIGJ5dGVzIGZvciA6IAAnWRAAHgAAAEVZEAACAAAATmVlZCAgYnl0ZXMgZnJvbSB0aGUgZGljdGlvbmFyeSBidXQgaXQgaXMgb25seSAgYnl0ZXMgbG9uZwAAWFkQAAUAAABdWRAAKgAAAIdZEAALAAAAb2Zmc2V0OiAgYmlnZ2VyIHRoYW4gYnVmZmVyOiAAAACsWRAACAAAALRZEAAVAAAAQmFkIG1hZ2ljX251bSBhdCBzdGFydCBvZiB0aGUgZGljdGlvbmFyeTsgR290OiAsIEV4cGVjdGVkOiAA3FkQAC8AAAALWhAADAAAADekMOxTcGVjaWZpZWQgd2luZG93X3NpemUgaXMgdG9vIGJpZzsgUmVxdWVzdGVkOiAsIE1heDogLFoQAC0AAABZWhAABwAAAEZhaWxlZCB0byBwYXJzZS9kZWNvZGUgYmxvY2sgYm9keTogAHBaEAAjAAAARmFpbGVkIHRvIHBhcnNlIGJsb2NrIGhlYWRlcjogAACcWhAAHgAAAEZhaWxlZCB0byByZWFkIGNoZWNrc3VtOiAAAADEWhAAGQAAAERlY29kZXIgbXVzdCBpbml0aWFsaXplZCBvciByZXNldCBiZWZvcmUgdXNpbmcgaXREZWNvZGVyIGVuY291bnRlcmVkIGVycm9yIHdoaWxlIGluaXRpYWxpemluZzogABlbEAAuAAAARGVjb2RlciBlbmNvdW50ZXJlZCBlcnJvciB3aGlsZSBkcmFpbmluZyB0aGUgZGVjb2RlYnVmZmVyOiAAUFsQADsAAABGYWlsZWQgdG8gc2tpcCBieXRlcyBmb3IgdGhlIGxlbmd0aCBnaXZlbiBpbiB0aGUgZnJhbWUgaGVhZGVyVGFyZ2V0IG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGJ5dGVzIGFzIHRoZSBjb250ZW50c2l6ZSBvZiB0aGUgZnJhbWUgcmVwb3J0c0ZyYW1lIGhlYWRlciBzcGVjaWZpZWQgZGljdGlvbmFyeSBpZCAweCB0aGF0IHdhc250IHByb3ZpZGVkIGJ5IGFkZF9kaWN0KCkgb3IgcmVzZXRfd2l0aF9kaWN0KCkAACBcEAAnAAAAR1wQADcAAABjb21wcmVzc2VkIHNpemUgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzbnVtX3N0cmVhbXMgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nICgxIG9yIDQpIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzVHJpZWQgdG8gcmV1c2UgaHVmZm1hbiB0YWJsZSBidXQgaXQgd2FzIG5ldmVyIGluaXRpYWxpemVkTmVlZCA2IGJ5dGVzIHRvIGRlY29kZSBqdW1wIGhlYWRlciwgZ290IAAAfl0QACgAAAA2VhAABgAAAE5lZWQgYXQgbGVhc3QgIGJ5dGVzIHRvIGRlY29kZSBsaXRlcmFscy4gSGF2ZTogALhdEAAOAAAAxl0QACEAAAA2VhAABgAAAFBhZGRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2Vfc2VjdGlvbiB3YXMgbW9yZSB0aGFuIGEgYnl0ZSBsb25nOiAgYml0cy4gUHJvYmFibHkgY2F1c2VkIGJ5IGRhdGEgY29ycnVwdGlvbgAAXhAARgAAAEZeEAApAAAAQml0c3RyZWFtIHdhcyByZWFkIHRpbGw6ICwgc2hvdWxkIGhhdmUgYmVlbjogAAAAgF4QABkAAACZXhAAFAAAAERpZCBub3QgZGVjb2RlIGVub3VnaCBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiDAXhAAIAAAAOBeEAAUAAAAU2VxdWVuY2Ugd2FudHMgdG8gY29weSB1cCB0byBieXRlIC4gQnl0ZXMgaW4gbGl0ZXJhbHNidWZmZXI6IAAAAARfEAAiAAAAJl8QABsAAABJbGxlZ2FsIG9mZnNldDogMCBmb3VuZERvIG5vdCBzdXBwb3J0IG9mZnNldHMgYmlnZ2VyIHRoYW4gMTw8MzI7IGdvdDogAABrXxAALwAAAFJlYWQgYW4gb2Zmc2V0ID09IDAuIFRoYXQgaXMgYW4gaWxsZWdhbCB2YWx1ZSBmb3Igb2Zmc2V0c0J5dGVzdHJlYW0gZGlkIG5vdCBjb250YWluIGVub3VnaCBieXRlcyB0byBkZWNvZGUgbnVtX3NlcXVlbmNlc2NvbXByZXNzaW9uIG1vZGVzIGFyZSBub25lIGJ1dCB0aGV5IG11c3QgYmUgc2V0IHRvIHNvbWV0aGluZ05lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBsbCB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBvZiB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBtbCB0YWJsZUlsbGVnYWwgbGl0ZXJhbHNzZWN0aW9udHlwZS4gSXM6ICwgbXVzdCBiZSBpbjogMCwgMSwgMiwgMwAAAMRgEAAhAAAA5WAQABgAAABOb3QgZW5vdWdoIGJ5dGUgdG8gcGFyc2UgdGhlIGxpdGVyYWxzIHNlY3Rpb24gaGVhZGVyLiBIYXZlOiAsIE5lZWQ6IBBhEAA8AAAATGEQAAgAAABzb3VyY2UgbXVzdCBoYXZlIGF0IGxlYXN0ICBieXRlcyB0byBwYXJzZSBoZWFkZXI7IGdvdCAAAGRhEAAaAAAAfmEQABwAAAA2VhAABgAAAEFjY2xvZyBtdXN0IGJlIGF0IGxlYXN0IDFGb3VuZCBGU0UgYWNjX2xvZzogIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bSBpbiB0aGlzIGNhc2U6IADNYRAAEwAAAOBhEAArAAAAVGhlIGNvdW50ZXIgKCkgZXhjZWVkZWQgdGhlIGV4cGVjdGVkIHN1bTogLiBUaGlzIG1lYW5zIGFuIGVycm9yIG9yIGNvcnJ1cHRlZCBkYXRhIAogHGIQAA0AAAApYhAAHQAAAEZiEAAqAAAAVGhlcmUgYXJlIHRvbyBtYW55IHN5bWJvbHMgaW4gdGhpcyBkaXN0cmlidXRpb246IC4gTWF4OiAyNTYAiGIQADEAAAC5YhAACgAAAFRyaWVkIHRvIHVzZSBhbiB1bmluaXRpYWxpemVkIHRhYmxlIVNvdXJjZSBuZWVkcyB0byBoYXZlIGF0IGxlYXN0IG9uZSBieXRlSGVhZGVyIHNheXMgdGhlcmUgc2hvdWxkIGJlICBieXRlcyBmb3IgdGhlIHdlaWdodHMgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBpbiB0aGUgc3RyZWFtHmMQABwAAAA6YxAAKgAAAGRjEAAUAAAATW9yZSB0aGFuIDI1NSB3ZWlnaHRzIGRlY29kZWQgKGdvdCAgd2VpZ2h0cykuIFN0cmVhbSBpcyBwcm9iYWJseSBjb3JydXB0ZWQAAJBjEAAjAAAAs2MQACcAAABDYW4ndCBidWlsZCBodWZmbWFuIHRhYmxlIHdpdGhvdXQgYW55IHdlaWdodHNMZWZ0b3ZlciBtdXN0IGJlIHBvd2VyIG9mIHR3byBidXQgaXM6IAAZZBAAJgAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gc3RyZWFtIHRvIGRlY29tcHJlc3Mgd2VpZ2h0cy4gSXM6IAAASGQQADYAAAAZVBAADQAAAEZTRSB0YWJsZSB1c2VkIG1vcmUgYnl0ZXM6ICB0aGFuIHdlcmUgbWVhbnQgdG8gYmUgdXNlZCBmb3IgdGhlIHdob2xlIHN0cmVhbSBvZiBodWZmbWFuIHdlaWdodHMgKCkAAACQZBAAGwAAAKtkEABFAAAA8GQQAAEAAABTb3VyY2UgbmVlZHMgdG8gaGF2ZSBhdCBsZWFzdCAgYnl0ZXMsIGdvdDogAAxlEAAeAAAAKmUQAA0AAAALQ2FudCBoYXZlIHdlaWdodDogIGJpZ2dlciB0aGFuIG1heF9udW1fYml0czogAABJZRAAEgAAAFtlEAAbAAAAbWF4X2JpdHMgZGVyaXZlZCBmcm9tIHdlaWdodHMgaXM6ICBzaG91bGQgYmUgbG93ZXIgdGhhbjogAAAAiGUQACIAAACqZRAAFwAAAENhbnQgc2VydmUgdGhpcyByZXF1ZXN0LiBUaGUgcmVhZGVyIGlzIGxpbWl0ZWQgdG8gIGJpdHMsIHJlcXVlc3RlZCAgYml0c9RlEAAyAAAABmYQABEAAAAXZhAABQAAAENhbid0IHJlYWQgIGJpdHMsIG9ubHkgaGF2ZSAgYml0cyBsZWZ0AAA0ZhAACwAAAD9mEAARAAAAUGYQAAoAAAAAAAAABAAAAAQAAADJAQAAAAAAAAQAAAAEAAAAygEAAFRvb01hbnlCaXRzbnVtX3JlcXVlc3RlZF9iaXRzbGltaXQAAAAAAAAEAAAABAAAAMsBAABOb3RFbm91Z2hSZW1haW5pbmdCaXRzcmVxdWVzdGVkcmVtYWluaW5nSW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnZ290AAAAAAAABAAAAAQAAADMAQAAV2luZG93VG9vQmlnV2luZG93VG9vU21hbGwAAAAAAAAEAAAABAAAAK4BAABGcmFtZURlc2NyaXB0b3JFcnJvckRpY3RJZFRvb1NtYWxsZXhwZWN0ZWRNaXNtYXRjaGVkRnJhbWVTaXplRnJhbWVTaXplSXNaZXJvSW52YWxpZEZyYW1lU2l6ZQAAAAAEAAAABAAAAM0BAABNYWdpY051bWJlclJlYWRFcnJvcgAAAAAEAAAABAAAAM4BAABCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvcgAAAAAABAAAAAQAAADPAQAAU2tpcEZyYW1lbWFnaWNfbnVtYmVybGVuZ3RoQmxvY2tDb250ZW50UmVhZEVycm9yTWFsZm9ybWVkU2VjdGlvbkhlYWRlcmV4cGVjdGVkX2xlbnJlbWFpbmluZ19ieXRlcwAAAAAAAAAEAAAABAAAALIBAABEZWNvbXByZXNzTGl0ZXJhbHNFcnJvcgAAAAAABAAAAAQAAACzAQAATGl0ZXJhbHNTZWN0aW9uUGFyc2VFcnJvcgAAAAAAAAAEAAAABAAAALQBAABTZXF1ZW5jZXNIZWFkZXJQYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAtQEAAERlY29kZVNlcXVlbmNlRXJyb3IAAAAAAAQAAAAEAAAAtgEAAEV4ZWN1dGVTZXF1ZW5jZXNFcnJvck5vdEVub3VnaEJ5dGVzSW5EaWN0aW9uYXJ5bmVlZE9mZnNldFRvb0JpZ29mZnNldGJ1Zl9sZW4AAAAABAAAAAQAAAC4AQAAQmFkTWFnaWNOdW0AAAAAAAQAAAAEAAAAuQEAAEZTRVRhYmxlRXJyb3IAAAAAAAAABAAAAAQAAAC6AQAASHVmZm1hblRhYmxlRXJyb3JNaXNzaW5nQ29tcHJlc3NlZFNpemVNaXNzaW5nTnVtU3RyZWFtcwAAAAAABAAAAAQAAADBAQAAR2V0Qml0c0Vycm9yAAAAAAQAAAAEAAAAwgEAAEh1ZmZtYW5EZWNvZGVyRXJyb3JVbmluaXRpYWxpemVkSHVmZm1hblRhYmxlTWlzc2luZ0J5dGVzRm9ySnVtcEhlYWRlck1pc3NpbmdCeXRlc0ZvckxpdGVyYWxzbmVlZGVkAAAAAAAABAAAAAQAAADQAQAARXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzAAAAAAQAAAAEAAAA0QEAAAAAAAAEAAAABAAAANIBAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAAAAAAAQAAAAEAAAAxQEAAERlY29kZWJ1ZmZlckVycm9yTm90RW5vdWdoQnl0ZXNGb3JTZXF1ZW5jZXdhbnRlZGhhdmVaZXJvT2Zmc2V0AAAAAAAABAAAAAQAAADGAQAARlNFRGVjb2RlckVycm9yVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZU5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzRXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlSWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzAAAAAAEAAAABAAAA0wEAAG5lZWRfYXRfbGVhc3RBY2NMb2dJc1plcm9BY2NMb2dUb29CaWdtYXgAAAAABAAAAAQAAADHAQAAUHJvYmFiaWxpdHlDb3VudGVyTWlzbWF0Y2hleHBlY3RlZF9zdW1zeW1ib2xfcHJvYmFiaWxpdGllc1Rvb01hbnlTeW1ib2xzVGFibGVJc1VuaW5pdGlhbGl6ZWRTb3VyY2VJc0VtcHR5Tm90RW5vdWdoQnl0ZXNGb3JXZWlnaHRzZ290X2J5dGVzZXhwZWN0ZWRfYnl0ZXNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c0ZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAABQbhAAbQAAACoCAAARAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyX3JldmVyc2UucnMAAADQbhAAcQAAADcAAABFAAAA0G4QAHEAAAA3AAAALwAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGXQbhAAcQAAAEYAAAANAAAA0G4QAHEAAABKAAAAHgAAAFRoaXMgaXMgYSBidWcgaW4gdGhlIHByb2dyYW0uIFRoZXJlIHNob3VsZCBvbmx5IGJlIHZhbHVlcyBiZXR3ZWVuIDAuLjMvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2Jsb2Nrcy9saXRlcmFsc19zZWN0aW9uLnJzAPJvEABtAAAAewAAADQAAADybxAAbQAAAJAAAABXAAAA8m8QAG0AAACXAAAAKgAAAPJvEABtAAAAmAAAACoAAADybxAAbQAAAJsAAAAaAAAA8m8QAG0AAACoAAAAGgAAAPJvEABtAAAAtAAAAEQAAADybxAAbQAAALgAAABGAAAA8m8QAG0AAADAAAAAKgAAAPJvEABtAAAAwQAAACsAAADybxAAbQAAAMUAAABIAAAA8m8QAG0AAADNAAAAKgAAAPJvEABtAAAAzgAAACsAAADybxAAbQAAANMAAAAuAAAA8m8QAG0AAADUAAAALgAAAENhbnQgcmV0dXJuIHRoaXMgbWFueSBiaXRzL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyLnJzAGpxEABpAAAANgAAAA0AAABqcRAAaQAAAE8AAAAjAAAAYXNzZXJ0aW9uIGZhaWxlZDogbiAtIGJpdF9zaGlmdCA9PSBiaXRzX2luX2xhc3RfYnl0ZV9uZWVkZWQAanEQAGkAAABtAAAADQAAAGpxEABpAAAAcQAAAB8AAABqcRAAaQAAAGgAAAAkAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pZHggJSA4ID09IDAAanEQAGkAAABkAAAADQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaWR4ID09IG9sZF9pZHggKyBuAAAAanEQAGkAAAB3AAAACQAAAFNlcV9zdW06ICBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZGlmZmVyZW5jZSBpbiBidWZmZXJzaXplOiAAANByEAAJAAAA2XIQADEAAAAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3NlcXVlbmNlX2V4ZWN1dGlvbi5ycwAAABxzEABxAAAALwAAAAUAAAAccxAAcQAAAAsAAAAkAAAAHHMQAHEAAAAVAAAANAAAAEFsbG9jYXRpbmcgbmV3IHNwYWNlIGZvciB0aGUgcmluZ2J1ZmZlciBmYWlsZWQvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3JpbmdidWZmZXIucnMA7nMQAGkAAABhAAAAIwAAAENvdWxkIG5vdCBjcmVhdGUgbGF5b3V0IGZvciB1OCBhcnJheSBvZiBzaXplIAAAAGh0EAAtAAAA7nMQAGkAAABaAAAAIQAAAO5zEABpAAAAtAAAABUAAADucxAAaQAAAL4AAAAVAAAA7nMQAGkAAAB3AQAAHQAAAO5zEABpAAAAzgEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwDwdBAAawAAAKIAAAAZAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9saXRlcmFsc19zZWN0aW9uX2RlY29kZXIucnMAbHUQAHcAAAAUAAAAIgAAAGx1EAB3AAAAGAAAAE0AAABsdRAAdwAAADQAAAAZAAAAbHUQAHcAAAByAAAAGAAAAGx1EAB3AAAAkQAAABQAAABhc3NlcnRpb24gZmFpbGVkOiBudW1fc3RyZWFtcyA9PSAxAABsdRAAdwAAAIAAAAAJAAAAbHUQAHcAAABFAAAAGQAAAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2Rpbmcvc2VxdWVuY2Vfc2VjdGlvbl9kZWNvZGVyLnJzAHh2EAB3AAAAGAAAAB0AAAB4dhAAdwAAAHUAAAAQAAAAeHYQAHcAAADAAAAAEAAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IElsbGVnYWwgbGl0ZXJhbCBsZW5ndGggY29kZSB3YXM6IAAgdxAASwAAAHh2EAB3AAAA+gAAAA4AAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBJbGxlZ2FsIG1hdGNoIGxlbmd0aCBjb2RlIHdhczogAAAAhHcQAEkAAAB4dhAAdwAAABoBAAAOAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAD/////////////////////AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA//////////////////////////8BAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA/////////////////////////////////////3h2EAB3AAAAdgEAABwAAAB4dhAAdwAAAFMBAAAcAAAAAQEBAQICAwMEBgcICQoLDA0ODxAQAAAAEgAAABQAAAAWAAAAGAAAABwAAAAgAAAAKAAAADAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAEBAQECAgMDBAQFBwgJCgsMDQ4PEAAAACMAAAAlAAAAJwAAACkAAAArAAAALwAAADMAAAA7AAAAQwAAAFMAAABjAAAAgwAAAAMBAAADAgAAAwQAAAMIAAADEAAAAyAAAANAAAADgAAAAwABAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3R3b3gtaGFzaC0yLjEuMC9zcmMveHhoYXNoNjQucnMAAACwehAAYQAAAFQAAAAfAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9kZWNvZGVidWZmZXIucnMAJHsQAGsAAAAaAAAAHgAAACR7EABrAAAAnQAAADQAAAAkexAAawAAAOoAAAAeAAAAUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVyZAAAAAAAAAAEAAAABAAAAMoBAAAAAAAABAAAAAQAAADQAQAAYXNzZXJ0aW9uIGZhaWxlZDogeCA+IDAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2h1ZmYwL2h1ZmYwX2RlY29kZXIucnMTfBAAaQAAADEAAAAFAAAAE3wQAGkAAAA+AAAAGgAAABN8EABpAAAAUAAAACkAAAATfBAAaQAAAGgAAAAWAAAAE3wQAGkAAABqAAAAEwAAABN8EABpAAAAawAAABgAAAATfBAAaQAAAGwAAAAbAAAAE3wQAGkAAAAdAQAANgAAABN8EABpAAAAHQEAACUAAAATfBAAaQAAAB8BAAA2AAAAE3wQAGkAAAAfAQAAJQAAABN8EABpAAAA6AAAACIAAAATfBAAaQAAAPIAAAAiAAAAE3wQAGkAAAD3AAAAJgAAABN8EABpAAAA7QAAACYAAAATfBAAaQAAAFcBAAASAAAAE3wQAGkAAABfAQAAGAAAABN8EABpAAAAZQEAABUAAAATfBAAaQAAAG8BAAAbAAAAE3wQAGkAAABxAQAAGgAAABN8EABpAAAAeAEAAB4AAAByYW5rX2lkeFswXTogIHNob3VsZCBiZTogAAAAzH0QAA0AAADZfRAADAAAABN8EABpAAAAdwEAAAkAAAATfBAAaQAAAH8BAAAsAAAAE3wQAGkAAACEAQAAMQAAABN8EABpAAAAiAEAACAAAAATfBAAaQAAAIkBAAAgAAAAE3wQAGkAAABzAQAARQAAABN8EABpAAAAdAEAACEAAAATfBAAaQAAAHMBAAAeAAAAE3wQAGkAAABhAQAAGwAAABN8EABpAAAATwEAACcAAAATfBAAaQAAAFQBAAAWAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAqH4QAGsAAACiAAAAGQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzACR/EABrAAAAogAAABkAAABhc3NlcnRpb24gZmFpbGVkOiB4ID4gMC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZnNlL2ZzZV9kZWNvZGVyLnJzt38QAGUAAAA9AAAABQAAALd/EABlAAAAWgAAACcAAAC3fxAAZQAAAGUAAAAnAAAAt38QAGUAAABwAAAAIwAAALd/EABlAAAAcQAAAB0AAAC3fxAAZQAAAOIAAAApAAAAt38QAGUAAADkAAAAMQAAALd/EABlAAAA5gAAADMAAABhc3NlcnRpb24gZmFpbGVkOiBuYiA8PSBzZWxmLmFjY3VyYWN5X2xvZwAAALd/EABlAAAA6wAAAA0AAAC3fxAAZQAAANIAAAAtAAAAt38QAGUAAADAAAAALQAAALd/EABlAAAAOQEAAEEAAAC3fxAAZQAAAB4BAAAnAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHJvYiA9PSAtMbd/EABlAAAAJAEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy92ZWMvbW9kLnJzAAAARIEQAG0AAAA9CgAAJAAAAAAAAAAQAAAABAAAANQBAADVAQAA1gEAACAgICA6IAAAAQAAAAAAAADggRAAAgAAACAgICAgICAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL3B0ci9tb2QucnMA+4EQAGwAAAALAgAAAQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvc2xpY2UvaW5kZXgucnN4ghAAcAAAAEwDAAA0AAAAeIIQAHAAAABTAwAAMgAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuKS9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAAMoMQAGwAAAD7BwAAHQAAADKDEABsAAAAAwgAAB0AAAAygxAAbAAAAI0FAAAbAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5ycwAAANCDEABtAAAAKgIAABEAAADXAQAADAAAAAQAAADYAQAA2QEAANoBAADdAQAADAAAAAQAAADeAQAA3wEAANoBAEGIicIAC4UJAQAAAOABAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAMeEEABsAAAA3woAAA4AAABFcnJvcgAAAMeEEABsAAAAjQUAABsAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbinHhBAAbAAAAMAFAAANAAAAAAAAABAAAAAEAAAA1AEAANUBAADWAQAAYmFja3RyYWNlIGNhcHR1cmUgZmFpbGVkL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYW55aG93LTEuMC45OC9zcmMvZXJyb3IucnPMhRAAXAAAAGcEAAAOAAAAAQAAAAAAAAA6IAAAQIYQAAIAAAAKCkNhdXNlZCBieToKCgpzdGFjayBiYWNrdHJhY2U6U3RhY2sgYmFja3RyYWNlOgprhhAAEQAAAFMvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAACFhhAAeQAAALMHAAAJAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy43Ny9zcmMvbGliLnJzAAAQhxAAWgAAAPsYAAABAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMDAvc3JjL2NvbnZlcnQvc2xpY2VzLnJzfIcQAGwAAAAkAQAADgAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkSnNWYWx1ZSgpACqIEAAIAAAAMogQAAEAAABMYXp5IGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWQAAESIEAAqAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvb25jZV9jZWxsLTEuMjEuMy9zcmMvbGliLnJzAAAAeIgQAF0AAAAIAwAAGQAAAHJlZW50cmFudCBpbml0AADoiBAADgAAAHiIEABdAAAAegIAAA0AQZiSwgALlSMEAAAABAAAAPYBAAAvcnVzdGMvMDVmOTg0NmY4OTNiMDlhMWJlMWZjODU2MGUzM2ZjM2M4MTVjZmVjYi9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAAJIkQAEoAAACiAAAAGQAAAC9ydXN0Yy8wNWY5ODQ2Zjg5M2IwOWExYmUxZmM4NTYwZTMzZmMzYzgxNWNmZWNiL2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwCAiRAASwAAAI0FAAAbAAAAL3J1c3RjLzA1Zjk4NDZmODkzYjA5YTFiZTFmYzg1NjBlMzNmYzNjODE1Y2ZlY2IvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc9yJEABMAAAAKgIAABEAAAA6AAAA9wEAAAwAAAAEAAAA+AEAAPkBAAD6AQAAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuNy9zcmMvZGxtYWxsb2MucnNhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAFSKEAApAAAAqAQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAABUihAAKQAAAK4EAAANAAAAQWNjZXNzRXJyb3JjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uOiAAB4sQAEgAAABsaWJyYXJ5L3N0ZC9zcmMvYmFja3RyYWNlLnJzb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybXSLEAAoAAAAJAAAAAIAAACcixAAdW5zdXBwb3J0ZWQgYmFja3RyYWNlZGlzYWJsZWQgYmFja3RyYWNlAFiLEAAcAAAAigEAAB0AAAD7AQAAEAAAAAQAAAD8AQAA/QEAAAEAAAAAAAAAZW50aXR5IG5vdCBmb3VuZHBlcm1pc3Npb24gZGVuaWVkY29ubmVjdGlvbiByZWZ1c2VkY29ubmVjdGlvbiByZXNldGhvc3QgdW5yZWFjaGFibGVuZXR3b3JrIHVucmVhY2hhYmxlY29ubmVjdGlvbiBhYm9ydGVkbm90IGNvbm5lY3RlZGFkZHJlc3MgaW4gdXNlYWRkcmVzcyBub3QgYXZhaWxhYmxlbmV0d29yayBkb3duYnJva2VuIHBpcGVlbnRpdHkgYWxyZWFkeSBleGlzdHNvcGVyYXRpb24gd291bGQgYmxvY2tub3QgYSBkaXJlY3RvcnlpcyBhIGRpcmVjdG9yeWRpcmVjdG9yeSBub3QgZW1wdHlyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWZpbGVzeXN0ZW0gbG9vcCBvciBpbmRpcmVjdGlvbiBsaW1pdCAoZS5nLiBzeW1saW5rIGxvb3Apc3RhbGUgbmV0d29yayBmaWxlIGhhbmRsZWludmFsaWQgaW5wdXQgcGFyYW1ldGVyaW52YWxpZCBkYXRhdGltZWQgb3V0d3JpdGUgemVyb25vIHN0b3JhZ2Ugc3BhY2VzZWVrIG9uIHVuc2Vla2FibGUgZmlsZXF1b3RhIGV4Y2VlZGVkZmlsZSB0b28gbGFyZ2VyZXNvdXJjZSBidXN5ZXhlY3V0YWJsZSBmaWxlIGJ1c3lkZWFkbG9ja2Nyb3NzLWRldmljZSBsaW5rIG9yIHJlbmFtZXRvbyBtYW55IGxpbmtzaW52YWxpZCBmaWxlbmFtZWFyZ3VtZW50IGxpc3QgdG9vIGxvbmdvcGVyYXRpb24gaW50ZXJydXB0ZWR1bnN1cHBvcnRlZHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVvdXQgb2YgbWVtb3J5aW4gcHJvZ3Jlc3NvdGhlciBlcnJvcnVuY2F0ZWdvcml6ZWQgZXJyb3JPcwAAAAAABAAAAAQAAAD+AQAAY29kZQAAAAABAAAAAQAAAP8BAABraW5k9wEAAAwAAAAEAAAAAAIAAG1lc3NhZ2VLaW5kRXJyb3IAAAAACAAAAAQAAAABAgAAAAAAAAQAAAAEAAAAAgIAAEN1c3RvbWVycm9yIChvcyBlcnJvciApAAEAAAAAAAAAZ48QAAsAAAByjxAAAQAAADogY2Fubm90IHJlY3Vyc2l2ZWx5IGFjcXVpcmUgbXV0ZXgAAI6PEAAgAAAAbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnO4jxAALAAAABMAAAAJAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvcG9pc29uL29uY2UucnMA9I8QACMAAACbAAAAMgAAAGxpYnJhcnkvc3RkL3NyYy9zeW5jL2xhenlfbG9jay5ycwAAACiQEAAhAAAA0QAAABMAAAA8dW5rbm93bj7vv71tZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAABokBAAFQAAAH2QEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJznJAQABgAAABjAQAACQAAAAoAAAD3AQAADAAAAAQAAAADAgAAAAAAAAgAAAAEAAAABAIAAAAAAAAIAAAABAAAAAUCAAAGAgAABwIAAAgCAAAJAgAAEAAAAAQAAAAKAgAACwIAAAwCAAANAgAAbGlicmFyeS9zdGQvc3JjLy4uLy4uL2JhY2t0cmFjZS9zcmMvc3ltYm9saXplL21vZC5ycyCREAA0AAAAZwEAADAAAAABAAAAAAAAAIyPEAACAAAAIC0gAAEAAAAAAAAAdJEQAAMAAAAgICAgICAgICAgICAgICAgICAgYXQgAAA4ihAAAQAAAE5vdEZvdW5kUGVybWlzc2lvbkRlbmllZENvbm5lY3Rpb25SZWZ1c2VkQ29ubmVjdGlvblJlc2V0SG9zdFVucmVhY2hhYmxlTmV0d29ya1VucmVhY2hhYmxlQ29ubmVjdGlvbkFib3J0ZWROb3RDb25uZWN0ZWRBZGRySW5Vc2VBZGRyTm90QXZhaWxhYmxlTmV0d29ya0Rvd25Ccm9rZW5QaXBlQWxyZWFkeUV4aXN0c1dvdWxkQmxvY2tOb3RBRGlyZWN0b3J5SXNBRGlyZWN0b3J5RGlyZWN0b3J5Tm90RW1wdHlSZWFkT25seUZpbGVzeXN0ZW1GaWxlc3lzdGVtTG9vcFN0YWxlTmV0d29ya0ZpbGVIYW5kbGVJbnZhbGlkSW5wdXRJbnZhbGlkRGF0YVRpbWVkT3V0V3JpdGVaZXJvU3RvcmFnZUZ1bGxOb3RTZWVrYWJsZVF1b3RhRXhjZWVkZWRGaWxlVG9vTGFyZ2VSZXNvdXJjZUJ1c3lFeGVjdXRhYmxlRmlsZUJ1c3lEZWFkbG9ja0Nyb3NzZXNEZXZpY2VzVG9vTWFueUxpbmtzSW52YWxpZEZpbGVuYW1lQXJndW1lbnRMaXN0VG9vTG9uZ0ludGVycnVwdGVkVW5zdXBwb3J0ZWRVbmV4cGVjdGVkRW9mT3V0T2ZNZW1vcnlJblByb2dyZXNzT3RoZXJVbmNhdGVnb3JpemVkb3BlcmF0aW9uIHN1Y2Nlc3NmdWxPbmNlIGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWTakxAAKgAAAG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgcGVyZm9ybWVkIHJlY3Vyc2l2ZWx5DJQQADgAAAAQAAAAEQAA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",typeof document>"u"?require("url").pathToFileURL(__filename).href:wI&&wI.tagName.toUpperCase()==="SCRIPT"&&wI.src||new URL("forge.cjs.min.js",document.baseURI).href));const A=Pt();(typeof Q=="string"||typeof Request=="function"&&Q instanceof Request||typeof URL=="function"&&Q instanceof URL)&&(Q=fetch(Q));const{instance:I,module:g}=await Ot(await Q,A);return _t(I,g)}const fA=-9,$t=9,KA=($t-fA)/254,Ai=11,Qi=11,Z=1<u(B[t]));return`${A}(${C.join(", ")})`}case"mat2x3":{const g=I,B=new Array(6).fill(0).map((C,E)=>u(g[E]));return`${A}(${B.join(", ")})`}case"mat2x4":{const g=I,B=new Array(8).fill(0).map((C,E)=>u(g[E]));return`${A}(${B.join(", ")})`}case"mat3":case"mat3x3":{const g=I,B=g instanceof e.Matrix3?g.elements:I,C=new Array(9).fill(0).map((E,t)=>u(B[t]));return`${A}(${C.join(", ")})`}case"mat3x2":{const g=I,B=new Array(6).fill(0).map((C,E)=>u(g[E]));return`${A}(${B.join(", ")})`}case"mat3x4":{const g=I,B=new Array(12).fill(0).map((C,E)=>u(g[E]));return`${A}(${B.join(", ")})`}case"mat4":case"mat4x4":{const g=I,B=g instanceof e.Matrix4?g.elements:I,C=new Array(16).fill(0).map((E,t)=>u(B[t]));return`${A}(${C.join(", ")})`}case"mat4x2":{const g=I,B=new Array(8).fill(0).map((C,E)=>u(g[E]));return`${A}(${B.join(", ")})`}case"mat4x3":{const g=I,B=new Array(12).fill(0).map((C,E)=>u(g[E]));return`${A}(${B.join(", ")})`}default:throw new Error(`Type not implemented: ${String(A)}`)}}}function q(Q,A){return new Cg(Q,A)}function NQ(Q){const A=String(Q);if(iQ(Q))return`${A}(false)`;if(_A(Q))return`${A}(0.0)`;if(tA(Q))return`${A}(0)`;if(iA(Q))return`${A}(0u)`;throw new Error(`Type not implemented: ${A}`)}function Ei(Q){const A=String(Q);if(iQ(Q))return`${A}(true)`;if(_A(Q))return`${A}(1.0)`;if(tA(Q))return`${A}(1)`;if(iA(Q))return`${A}(1u)`;throw new Error(`Type not implemented: ${A}`)}function ti(Q){const A=String(Q);if(iQ(Q))return`${A}(true)`;if(_A(Q))return`${A}(-1.0)`;if(tA(Q))return`${A}(-1)`;if(iA(Q))return`${A}(0xFFFFFFFFu)`;throw new Error(`Type not implemented: ${A}`)}const VI=" ";class Eg{constructor({indent:A}={}){this.globals=new Set,this.statements=[],this.uniforms={},this.declares=new Set,this.updaters=[],this.sequence=0,this.indent=VI,this.indent=A??VI}nextSequence(){return this.sequence++}}class f{constructor({inTypes:A,outTypes:I,inputs:g,update:B,globals:C,statements:E,generate:t}){this.inTypes=A??{},this.outTypes=I??{},this.inputs=g??{},this.update=B,this.globals=C,this.statements=E,this.generate=t??(({inputs:s,outputs:o,compile:a})=>{var i,D;return{globals:(i=this.globals)==null?void 0:i.call(this,{inputs:s,outputs:o,compile:a}),statements:(D=this.statements)==null?void 0:D.call(this,{inputs:s,outputs:o,compile:a})}})}get outputs(){const A={};for(const I in this.outTypes)A[I]=new H(this,I);return A}apply(A){return Object.assign(this.inputs,A),this.outputs}compile({inputs:A,outputs:I,compile:g}){const B=[`// ${this.constructor.name}(${Object.values(A).join(", ")}) => (${Object.values(I).join(", ")})`],C=[];for(const o in I){const a=I[o];a&&!g.declares.has(a)&&(g.declares.add(a),C.push(o))}const{globals:E,statements:t,uniforms:s}=this.generate({inputs:A,outputs:I,compile:g});for(const o of E??[])g.globals.add(o);for(const o in s)g.uniforms[o]=s[o];this.update&&g.updaters.push(this.update);for(const o of C){const a=I[o];a&&(g.uniforms[a]||B.push(`${UI(a,this.outTypes[o])};`))}return t!=null&&t.length&&(B.push("{"),B.push(...t.map(o=>g.indent+o)),B.push("}")),B}}class bA extends f{constructor({inTypes:A,outTypes:I,inputs:g,update:B,globals:C,construct:E}){super({inTypes:A,outTypes:I,inputs:g,update:B,globals:C,generate:t=>this.generateBlock(t)}),this.construct=E}generateBlock({inputs:A,outputs:I,compile:g}){var w,c;const B={},C={};for(const r in A)A[r]!=null&&(B[r]=new wQ(this.inTypes[r],A[r]));for(const r in I)I[r]!=null&&(C[r]=new zA(this.outTypes[r]));const E={roots:[]},t=this.construct(B,C,E);for(const r of((w=this.globals)==null?void 0:w.call(this,{inputs:A,outputs:I,compile:g}))??[])g.globals.add(r);const s=[],o=new Map;function a(r,y,G){let h=o.get(r);if(!h){h={sequence:g.nextSequence(),outNames:new Map,newOuts:new Set},o.set(r,h);for(const M in r.inputs){let l=r.inputs[M];for(;l;){if(l instanceof zA){l instanceof H&&a(l.dyno,l.key);break}l=l.dynoOut()}}s.push(r)}y&&(G||h.newOuts.add(y),h.outNames.set(y,G??`${y}_${h.sequence}`))}for(const r of E.roots)a(r);for(const r in C){let y=(t==null?void 0:t[r])??C[r];for(;y;){if(y instanceof zA){y instanceof H&&a(y.dyno,y.key,I[r]);break}y=y.dynoOut()}C[r]=y}const i=[];for(const r of s){const y={},G={};for(const l in r.inputs){let k=r.inputs[l];for(;k;){if(k instanceof zA){if(k instanceof wQ)y[l]=k.getLiteral();else if(k instanceof H){const R=(c=o.get(k.dyno))==null?void 0:c.outNames.get(k.key);if(!R)throw new Error(`Source not found for ${k.dyno.constructor.name}.${k.key}`);y[l]=R}break}k=k.dynoOut()}}const h=o.get(r)??{outNames:new Map};for(const[l,k]of h.outNames.entries())G[l]=k;const M=r.compile({inputs:y,outputs:G,compile:g});i.push(M)}const D=[];for(const r in I)C[r]instanceof wQ&&D.push(`${I[r]} = ${C[r].getLiteral()};`);return D.length>0&&i.push(D),{statements:i.flatMap((r,y)=>y===0?r:["",...r])}}}function SA(Q,A,I,{update:g,globals:B}={}){return new bA({inTypes:Q,outTypes:A,construct:I,update:g,globals:B})}function KQ({inTypes:Q,outTypes:A,inputs:I,update:g,globals:B,statements:C,generate:E}){return new f({inTypes:Q,outTypes:A,inputs:I,update:g,globals:B,statements:C,generate:E})}function UI(Q,A,I){const g=typeof A=="string"?A:A.type;if(!g)throw new Error(`Invalid DynoType: ${String(A)}`);return`${g} ${Q}${I!=null?`[${I}]`:""}`}function dA(Q){var C;let A=!1;const I=Q.split(` +`).map(E=>{const t=E.trimEnd();return A?t:t.length>0?(A=!0,t):null}).filter(E=>E!=null);for(;I.length>0&&I[I.length-1].length===0;)I.pop();if(I.length===0)return[];const g=(C=I[0].match(/^\s*/))==null?void 0:C[0];if(!g)return I;const B=new RegExp(`^${g}`);return I.map(E=>E.replace(B,""))}function gA(Q){return dA(Q).join(` +`)}class N extends f{constructor({a:A,outKey:I,outTypeFunc:g}){const B={a:p(A)},C=g(p(A)),E={[I]:C};super({inTypes:B,outTypes:E,inputs:{a:A}}),this.outKey=I}dynoOut(){return new H(this,this.outKey)}}class b extends f{constructor({a:A,b:I,outKey:g,outTypeFunc:B}){const C={a:p(A),b:p(I)},E=B(p(A),p(I)),t={[g]:E};super({inTypes:C,outTypes:t,inputs:{a:A,b:I}}),this.outKey=g}dynoOut(){return new H(this,this.outKey)}}class oQ extends f{constructor({a:A,b:I,c:g,outKey:B,outTypeFunc:C}){const E={a:p(A),b:p(I),c:p(g)},t=C(p(A),p(I),p(g)),s={[B]:t};super({inTypes:E,outTypes:s,inputs:{a:A,b:I,c:g}}),this.outKey=B}dynoOut(){return new H(this,this.outKey)}}const T={type:"Gsplat"},ZQ={type:"PackedSplats"},ii=Q=>new ig({packedSplats:Q}),UQ=(Q,A)=>new og({packedSplats:Q,index:A}),tg=(Q,A,I,g)=>new ag({packedSplats:Q,index:A,base:I,count:g}),FQ=Q=>new eg({gsplat:Q}),rQ=({gsplat:Q,flags:A,index:I,center:g,scales:B,quaternion:C,rgba:E,rgb:t,opacity:s,x:o,y:a,z:i,r:D,g:n,b:w})=>new Dg({gsplat:Q,flags:A,index:I,center:g,scales:B,quaternion:C,rgba:E,rgb:t,opacity:s,x:o,y:a,z:i,r:D,g:n,b:w}),si=Q=>new cg({gsplat:Q}),SI=(Q,{scale:A,rotate:I,translate:g,recolor:B})=>new wg({gsplat:Q,scale:A,rotate:I,translate:g,recolor:B}),hA=gA(` + struct Gsplat { + vec3 center; + uint flags; + vec3 scales; + int index; + vec4 quaternion; + vec4 rgba; + }; + const uint GSPLAT_FLAG_ACTIVE = 1u << 0u; + + bool isGsplatActive(uint flags) { + return (flags & GSPLAT_FLAG_ACTIVE) != 0u; + } +`),eI=gA(` + struct PackedSplats { + usampler2DArray texture; + int numSplats; + }; +`);class ig extends N{constructor({packedSplats:A}){super({a:A,outKey:"numSplats",outTypeFunc:()=>"int"}),this.statements=({inputs:I,outputs:g})=>[`${g.numSplats} = ${I.a}.numSplats;`]}}const sg=gA(` + bool readPackedSplat(usampler2DArray texture, int numSplats, int index, out Gsplat gsplat) { + if ((index >= 0) && (index < numSplats)) { + uvec4 packed = texelFetch(texture, splatTexCoord(index), 0); + unpackSplat(packed, gsplat.center, gsplat.scales, gsplat.quaternion, gsplat.rgba); + return true; + } else { + return false; + } + } +`);class og extends f{constructor({packedSplats:A,index:I}){super({inTypes:{packedSplats:ZQ,index:"int"},outTypes:{gsplat:T},inputs:{packedSplats:A,index:I},globals:()=>[hA,eI,sg],statements:({inputs:g,outputs:B})=>{const{gsplat:C}=B;if(!C)return[];const{packedSplats:E,index:t}=g;let s;return E&&t?s=dA(` + if (readPackedSplat(${E}.texture, ${E}.numSplats, ${t}, ${C})) { + bool zeroSize = all(equal(${C}.scales, vec3(0.0, 0.0, 0.0))); + ${C}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE; + } else { + ${C}.flags = 0u; + } + `):s=[`${C}.flags = 0u;`],s.push(`${C}.index = ${t??"0"};`),s}})}dynoOut(){return new H(this,"gsplat")}}class ag extends f{constructor({packedSplats:A,index:I,base:g,count:B}){super({inTypes:{packedSplats:ZQ,index:"int",base:"int",count:"int"},outTypes:{gsplat:T},inputs:{packedSplats:A,index:I,base:g,count:B},globals:()=>[hA,eI,sg],statements:({inputs:C,outputs:E})=>{const{gsplat:t}=E;if(!t)return[];const{packedSplats:s,index:o,base:a,count:i}=C;let D;return s&&o&&a&&i?D=dA(` + ${t}.flags = 0u; + if ((${o} >= ${a}) && (${o} < (${a} + ${i}))) { + if (readPackedSplat(${s}.texture, ${s}.numSplats, ${o}, ${t})) { + bool zeroSize = all(equal(${t}.scales, vec3(0.0, 0.0, 0.0))); + ${t}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE; + } + } + `):D=[`${t}.flags = 0u;`],D.push(`${t}.index = ${o??"0"};`),D}})}dynoOut(){return new H(this,"gsplat")}}class eg extends f{constructor({gsplat:A}){super({inTypes:{gsplat:T},outTypes:{flags:"uint",active:"bool",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},inputs:{gsplat:A},globals:()=>[hA],statements:({inputs:I,outputs:g})=>{const{gsplat:B}=I,{flags:C,active:E,index:t,center:s,scales:o,quaternion:a,rgba:i,rgb:D,opacity:n,x:w,y:c,z:r,r:y,g:G,b:h}=g;return[C?`${C} = ${B?`${B}.flags`:"0u"};`:null,E?`${E} = isGsplatActive(${B?`${B}.flags`:"0u"});`:null,t?`${t} = ${B?`${B}.index`:"0"};`:null,s?`${s} = ${B?`${B}.center`:"vec3(0.0, 0.0, 0.0)"};`:null,o?`${o} = ${B?`${B}.scales`:"vec3(0.0, 0.0, 0.0)"};`:null,a?`${a} = ${B?`${B}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)"};`:null,i?`${i} = ${B?`${B}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)"};`:null,D?`${D} = ${B?`${B}.rgba.rgb`:"vec3(0.0, 0.0, 0.0)"};`:null,n?`${n} = ${B?`${B}.rgba.a`:"0.0"};`:null,w?`${w} = ${B?`${B}.center.x`:"0.0"};`:null,c?`${c} = ${B?`${B}.center.y`:"0.0"};`:null,r?`${r} = ${B?`${B}.center.z`:"0.0"};`:null,y?`${y} = ${B?`${B}.rgba.r`:"0.0"};`:null,G?`${G} = ${B?`${B}.rgba.g`:"0.0"};`:null,h?`${h} = ${B?`${B}.rgba.b`:"0.0"};`:null].filter(Boolean)}})}}class Dg extends f{constructor({gsplat:A,flags:I,index:g,center:B,scales:C,quaternion:E,rgba:t,rgb:s,opacity:o,x:a,y:i,z:D,r:n,g:w,b:c}){super({inTypes:{gsplat:T,flags:"uint",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},outTypes:{gsplat:T},inputs:{gsplat:A,flags:I,index:g,center:B,scales:C,quaternion:E,rgba:t,rgb:s,opacity:o,x:a,y:i,z:D,r:n,g:w,b:c},globals:()=>[hA],statements:({inputs:r,outputs:y})=>{const{gsplat:G}=y;if(!G)return[];const{gsplat:h,flags:M,index:l,center:k,scales:R,quaternion:d,rgba:Y,rgb:m,opacity:J,x,y:U,z:S,r:v,g:V,b:_}=r;return[`${G}.flags = ${M??(h?`${h}.flags`:"0u")};`,`${G}.index = ${l??(h?`${h}.index`:"0")};`,`${G}.center = ${k??(h?`${h}.center`:"vec3(0.0, 0.0, 0.0)")};`,`${G}.scales = ${R??(h?`${h}.scales`:"vec3(0.0, 0.0, 0.0)")};`,`${G}.quaternion = ${d??(h?`${h}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)")};`,`${G}.rgba = ${Y??(h?`${h}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)")};`,m?`${G}.rgba.rgb = ${m};`:null,J?`${G}.rgba.a = ${J};`:null,x?`${G}.center.x = ${x};`:null,U?`${G}.center.y = ${U};`:null,S?`${G}.center.z = ${S};`:null,v?`${G}.rgba.r = ${v};`:null,V?`${G}.rgba.g = ${V};`:null,_?`${G}.rgba.b = ${_};`:null].filter(Boolean)}})}dynoOut(){return new H(this,"gsplat")}}const ng=gA(` + vec3 gsplatNormal(vec3 scales, vec4 quaternion) { + float minScale = min(scales.x, min(scales.y, scales.z)); + vec3 normal; + if (scales.z == minScale) { + normal = vec3(0.0, 0.0, 1.0); + } else if (scales.y == minScale) { + normal = vec3(0.0, 1.0, 0.0); + } else { + normal = vec3(1.0, 0.0, 0.0); + } + return quatVec(quaternion, normal); + } +`);class cg extends N{constructor({gsplat:A}){super({a:A,outKey:"normal",outTypeFunc:()=>"vec3"}),this.globals=()=>[hA,ng],this.statements=({inputs:I,outputs:g})=>[`${g.normal} = gsplatNormal(${I.a}.scales, ${I.a}.quaternion);`]}}class wg extends f{constructor({gsplat:A,scale:I,rotate:g,translate:B,recolor:C}){super({inTypes:{gsplat:T,scale:"float",rotate:"vec4",translate:"vec3",recolor:"vec4"},outTypes:{gsplat:T},inputs:{gsplat:A,scale:I,rotate:g,translate:B,recolor:C},globals:()=>[hA],statements:({inputs:E,outputs:t,compile:s})=>{const{gsplat:o}=t;if(!o||!E.gsplat)return[];const{scale:a,rotate:i,translate:D,recolor:n}=E,w=s.indent;return[`${o} = ${E.gsplat};`,`if (isGsplatActive(${o}.flags)) {`,a?`${w}${o}.center *= ${a};`:null,i?`${w}${o}.center = quatVec(${i}, ${o}.center);`:null,D?`${w}${o}.center += ${D};`:null,a?`${w}${o}.scales *= ${a};`:null,i?`${w}${o}.quaternion = quatQuat(${i}, ${o}.quaternion);`:null,n?`${w}${o}.rgba *= ${n};`:null,"}"].filter(Boolean)}})}dynoOut(){return new H(this,"gsplat")}}const rg=Q=>new hg({gsplat:Q}),oi=Q=>new LI({rgba8:Q});class hg extends f{constructor({gsplat:A}){super({inTypes:{gsplat:T},inputs:{gsplat:A},globals:()=>[hA],statements:({inputs:I,outputs:g})=>{const{output:B}=g;if(!B)return[];const{gsplat:C}=I;return C?dA(` + if (isGsplatActive(${C}.flags)) { + ${B} = packSplat(${C}.center, ${C}.scales, ${C}.quaternion, ${C}.rgba); + } else { + ${B} = uvec4(0u, 0u, 0u, 0u); + } + `):[`${B} = uvec4(0u, 0u, 0u, 0u);`]}})}dynoOut(){return new H(this,"output")}}class LI extends f{constructor({rgba8:A}){super({inTypes:{rgba8:"vec4"},inputs:{rgba8:A},statements:({inputs:I,outputs:g})=>[`target = ${I.rgba8??"vec4(0.0, 0.0, 0.0, 0.0)"};`]})}dynoOut(){return new H(this,"rgba8")}}const ai=(Q,A,I)=>new F({key:Q,type:A,value:I}),ei=(Q=!1,A)=>new gI({key:A,value:Q}),Di=(Q=0,A)=>new yg({key:A,value:Q}),ni=(Q=0,A)=>new SQ({key:A,value:Q}),pA=(Q=0,A)=>new EQ({key:A,value:Q}),ci=(Q,A)=>new Gg({key:A,value:Q}),wi=(Q,A)=>new lg({key:A,value:Q}),ri=(Q,A)=>new Mg({key:A,value:Q}),hi=(Q,A)=>new Ng({key:A,value:Q}),yi=(Q,A)=>new kg({key:A,value:Q}),Gi=(Q,A)=>new Fg({key:A,value:Q}),li=(Q,A)=>new Rg({key:A,value:Q}),vA=(Q,A)=>new hQ({key:A,value:Q}),Mi=(Q,A)=>new Jg({key:A,value:Q}),Ni=(Q,A)=>new dg({key:A,value:Q}),ki=(Q,A)=>new Yg({key:A,value:Q}),Fi=(Q,A)=>new qQ({key:A,value:Q}),Ri=(Q,A)=>new ug({key:A,value:Q}),Ji=(Q,A)=>new Ug({key:A,value:Q}),di=(Q,A)=>new Sg({key:A,value:Q}),Yi=(Q,A)=>new Lg({key:A,value:Q}),ui=(Q,A)=>new pg({key:A,value:Q}),Ui=(Q,A)=>new Hg({key:A,value:Q}),Si=(Q,A)=>new fg({key:A,value:Q}),Li=(Q,A)=>new mg({key:A,value:Q}),pi=(Q,A)=>new bg({key:A,value:Q}),Hi=(Q,A)=>new xg({key:A,value:Q}),fi=(Q,A)=>new Kg({key:A,value:Q}),mi=(Q,A)=>new Zg({key:A,value:Q}),bi=(Q,A)=>new qg({key:A,value:Q}),xi=(Q,A)=>new Wg({key:A,value:Q}),Ki=(Q,A)=>new Vg({key:A,value:Q}),Zi=(Q,A)=>new RQ({key:A,value:Q}),qi=(Q,A)=>new Tg({key:Q,value:A}),Wi=(Q,A)=>new vg({key:A,value:Q}),Vi=(Q,A)=>new Xg({key:A,value:Q}),Ti=(Q,A)=>new jg({key:A,value:Q}),vi=(Q,A)=>new zg({key:A,value:Q}),Xi=(Q,A)=>new Og({key:A,value:Q}),ji=(Q,A)=>new Pg({key:A,value:Q}),zi=(Q,A)=>new _g({key:A,value:Q}),Oi=(Q,A)=>new $g({key:A,value:Q}),Pi=(Q,A)=>new AB({key:A,value:Q}),_i=(Q,A)=>new QB({key:A,value:Q});class F extends f{constructor({key:A,type:I,count:g,value:B,update:C,globals:E}){A=A??"value",super({outTypes:{[A]:I},update:()=>{if(C){const t=C(this.value);t!==void 0&&(this.value=t)}this.uniform.value=this.value},generate:({inputs:t,outputs:s})=>{const o=(E==null?void 0:E({inputs:t,outputs:s}))??[],a={},i=s[A];return i&&(o.push(`uniform ${UI(i,I,g)};`),a[i]=this.uniform),{globals:o,uniforms:a}}}),this.type=I,this.count=g,this.value=B,this.uniform={value:B},this.outKey=A}dynoOut(){return new H(this,this.outKey)}}class gI extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"bool",value:I,update:g})}}class yg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"uint",value:I,update:g})}}class SQ extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"int",value:I,update:g})}}class EQ extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"float",value:I,update:g})}}class Gg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"bvec2",value:I,update:g})}}class lg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"uvec2",value:I,update:g})}}class Mg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"ivec2",value:I,update:g})}}class Ng extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"vec2",value:I,update:g})}}class kg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"bvec3",value:I,update:g})}}class Fg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"uvec3",value:I,update:g})}}class Rg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"ivec3",value:I,update:g})}}class hQ extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"vec3",value:I,update:g})}}class Jg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"bvec4",value:I,update:g})}}class dg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"uvec4",value:I,update:g})}}class Yg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"ivec4",value:I,update:g})}}class qQ extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"vec4",value:I,update:g})}}class ug extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"mat2",value:I,update:g})}}class Ug extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"mat2x2",value:I,update:g})}}class Sg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"mat2x3",value:I,update:g})}}class Lg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"mat2x4",value:I,update:g})}}class pg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"mat3",value:I,update:g})}}class Hg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"mat3x2",value:I,update:g})}}class fg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"mat3x3",value:I,update:g})}}class mg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"mat3x4",value:I,update:g})}}class bg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"mat4",value:I,update:g})}}class xg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"mat4x2",value:I,update:g})}}class Kg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"mat4x3",value:I,update:g})}}class Zg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"mat4x4",value:I,update:g})}}class qg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"usampler2D",value:I,update:g})}}class Wg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"isampler2D",value:I,update:g})}}class Vg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"sampler2D",value:I,update:g})}}class RQ extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"usampler2DArray",value:I,update:g})}}class Tg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"isampler2DArray",value:I,update:g})}}class vg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"sampler2DArray",value:I,update:g})}}class Xg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"usampler3D",value:I,update:g})}}class jg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"isampler3D",value:I,update:g})}}class zg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"sampler3D",value:I,update:g})}}class Og extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"usamplerCube",value:I,update:g})}}class Pg extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"isamplerCube",value:I,update:g})}}class _g extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"samplerCube",value:I,update:g})}}class $g extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"sampler2DShadow",value:I,update:g})}}class AB extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"sampler2DArrayShadow",value:I,update:g})}}class QB extends F{constructor({key:A,value:I,update:g}){super({key:A,type:"samplerCubeShadow",value:I,update:g})}}var EA=Uint8Array,nQ=Uint16Array,$i=Int32Array,IB=new EA([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),gB=new EA([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),As=new EA([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),BB=function(Q,A){for(var I=new nQ(31),g=0;g<31;++g)I[g]=A+=1<>1|(W&21845)<<1;TA=(TA&52428)>>2|(TA&13107)<<2,TA=(TA&61680)>>4|(TA&3855)<<4,NI[W]=((TA&65280)>>8|(TA&255)<<8)>>1}var JQ=function(Q,A,I){for(var g=Q.length,B=0,C=new nQ(A);B>s]=o}else for(t=new nQ(g),B=0;B>15-Q[B]);return t},WQ=new EA(288);for(var W=0;W<144;++W)WQ[W]=8;for(var W=144;W<256;++W)WQ[W]=9;for(var W=256;W<280;++W)WQ[W]=7;for(var W=280;W<288;++W)WQ[W]=8;var tB=new EA(32);for(var W=0;W<32;++W)tB[W]=5;var Bs=JQ(WQ,9,1),Cs=JQ(tB,5,1),rI=function(Q){for(var A=Q[0],I=1;IA&&(A=Q[I]);return A},uA=function(Q,A,I){var g=A/8|0;return(Q[g]|Q[g+1]<<8)>>(A&7)&I},hI=function(Q,A){var I=A/8|0;return(Q[I]|Q[I+1]<<8|Q[I+2]<<16)>>(A&7)},iB=function(Q){return(Q+7)/8|0},_Q=function(Q,A,I){return(A==null||A<0)&&(A=0),(I==null||I>Q.length)&&(I=Q.length),new EA(Q.subarray(A,I))},Es=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],FA=function(Q,A,I){var g=new Error(A||Es[Q]);if(g.code=Q,Error.captureStackTrace&&Error.captureStackTrace(g,FA),!I)throw g;return g},ts=function(Q,A,I,g){var B=Q.length,C=0;if(!B||A.f&&!A.l)return I||new EA(0);var E=!I,t=E||A.i!=2,s=A.i;E&&(I=new EA(B*3));var o=function(MA){var LA=I.length;if(MA>LA){var NA=new EA(Math.max(LA*2,MA));NA.set(I),I=NA}},a=A.f||0,i=A.p||0,D=A.b||0,n=A.l,w=A.d,c=A.m,r=A.n,y=B*8;do{if(!n){a=uA(Q,i,1);var G=uA(Q,i+1,3);if(i+=3,G)if(G==1)n=Bs,w=Cs,c=9,r=5;else if(G==2){var k=uA(Q,i,31)+257,R=uA(Q,i+10,15)+4,d=k+uA(Q,i+5,31)+1;i+=14;for(var Y=new EA(d),m=new EA(19),J=0;J>4;if(h<16)Y[J++]=h;else{var V=0,_=0;for(h==16?(_=3+uA(Q,i,3),i+=2,V=Y[J-1]):h==17?(_=3+uA(Q,i,7),i+=3):h==18&&(_=11+uA(Q,i,127),i+=7);_--;)Y[J++]=V}}var $=Y.subarray(0,k),X=Y.subarray(k);c=rI($),r=rI(X),n=JQ($,c,1),w=JQ(X,r,1)}else FA(1);else{var h=iB(i)+4,M=Q[h-4]|Q[h-3]<<8,l=h+M;if(l>B){s&&FA(0);break}t&&o(D+M),I.set(Q.subarray(h,l),D),A.b=D+=M,A.p=i=l*8,A.f=a;continue}if(i>y){s&&FA(0);break}}t&&o(D+131072);for(var eA=(1<>4;if(i+=V&15,i>y){s&&FA(0);break}if(V||FA(2),DA<256)I[D++]=DA;else if(DA==256){sA=i,n=null;break}else{var YA=DA-254;if(DA>264){var J=DA-257,yA=IB[J];YA=uA(Q,i,(1<>4;nA||FA(3),i+=nA&15;var X=gs[L];if(L>3){var yA=gB[L];X+=hI(Q,i)&(1<y){s&&FA(0);break}t&&o(D+131072);var GA=D+YA;if(D>3&1)+(A>>4&1);g>0;g-=!Q[I++]);return I+(A&2)},yI=function(){function Q(A,I){typeof A=="function"&&(I=A,A={}),this.ondata=I;var g=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:g?g.length:0},this.o=new EA(32768),this.p=new EA(0),g&&this.o.set(g)}return Q.prototype.e=function(A){if(this.ondata||FA(5),this.d&&FA(4),!this.p.length)this.p=A;else if(A.length){var I=new EA(this.p.length+A.length);I.set(this.p),I.set(A,this.p.length),this.p=I}},Q.prototype.c=function(A){this.s.i=+(this.d=A||!1);var I=this.s.b,g=ts(this.p,this.s,this.o);this.ondata(_Q(g,I,this.s.b),this.d),this.o=_Q(g,this.s.b-32768),this.s.b=this.o.length,this.p=_Q(this.p,this.s.p/8|0),this.s.p&=7},Q.prototype.push=function(A,I){this.e(A),this.c(I)},Q}(),sB=function(){function Q(A,I){this.v=1,this.r=0,yI.call(this,A,I)}return Q.prototype.push=function(A,I){if(yI.prototype.e.call(this,A),this.r+=A.length,this.v){var g=this.p.subarray(this.v-1),B=g.length>3?ss(g):4;if(B>g.length){if(!I)return}else this.v>1&&this.onmember&&this.onmember(this.r-g.length);this.p=g.subarray(B),this.v=0}yI.prototype.c.call(this,I),this.s.f&&!this.s.l&&!I&&(this.v=iB(this.s.p)+9,this.s={i:0},this.o=new EA(0),this.push(new EA(0),I))},Q}(),os=typeof TextDecoder<"u"&&new TextDecoder,as=0;try{os.decode(is,{stream:!0}),as=1}catch{}const VQ=new Float32Array(1),DI=new Uint32Array(VQ.buffer);function es(Q){return VQ[0]=Q,DI[0]}function Ds(Q){return DI[0]=Q,VQ[0]}function OA(Q){VQ[0]=Q;const A=DI[0],I=A>>31&1,g=A>>23&255,B=A&8388607,C=I<<15;if(g===255)return B!==0?C|32767:C|31744;const E=g-127+15;if(E>=31)return C|31744;if(E<=0){if(E<-10)return C;const s=(B|8388608)>>1-E+13;return C|s}const t=B>>13;return C|E<<10|t}function PA(Q){const A=Q>>15&1,I=Q>>10&31,g=Q&1023;let B;if(I===0)if(g===0)B=A<<31;else{let C=g,E=-14;for(;(C&1024)===0;)C<<=1,E--;C&=1023;const t=E+127,s=C<<13;B=A<<31|t<<23|s}else if(I===31)g===0?B=A<<31|2139095040:B=A<<31|2143289344;else{const C=I-15+127,E=g<<13;B=A<<31|C<<23|E}return DI[0]=B,VQ[0]}function HA(Q){return Math.max(0,Math.min(255,Math.round(Q*255)))}function dQ(Q){return Math.max(-127,Math.min(127,Math.round(Q*127)))}function oB(Q){return Q/255}function aB(Q){return Q/127}class ns{constructor({asyncFetch:A,maxItems:I=5}){this.asyncFetch=A,this.maxItems=I,this.items=[]}async getFetch(A){const I=this.items.findIndex(B=>B.key===A);if(I>=0){const B=this.items.splice(I,1)[0];return this.items.push(B),B.data}const g=await this.asyncFetch(A);for(this.items.push({key:A,data:g});this.items.length>this.maxItems;)this.items.shift();return g}}function cs(Q,A){const I=Object.entries(Q).map(([g,B])=>[g,A(B,g)]);return Object.fromEntries(I)}function ws(Q,A){const I=Object.entries(Q).map(([g,B])=>[g,A(B,g)]).filter(([g,B])=>B!==void 0);return Object.fromEntries(I)}function eB(Q){const A=[],I=new Set;function g(B){B&&typeof B=="object"&&!I.has(B)&&(I.add(B),B instanceof ArrayBuffer?A.push(B):ArrayBuffer.isView(B)?A.push(B.buffer):Array.isArray(B)?B.forEach(g):Object.values(B).forEach(g))}return g(Q),A}function rs(Q,A){return new Array(Q).fill(null).map((I,g)=>A(g))}class DB{constructor({allocate:A,dispose:I,valid:g}){this.items=[],this.allocate=A,this.dispose=I,this.valid=g}alloc(A){for(;;){const I=this.items.pop();if(!I)break;if(this.valid(I,A))return I;this.dispose&&this.dispose(I)}return this.allocate(A)}free(A){this.items.push(A)}disposeAll(){let A;for(A=this.items.pop();A;)this.dispose&&this.dispose(A),A=this.items.pop()}}function BI(Q,A,I,g,B,C,E,t,s,o,a,i,D,n,w,c){const r=HA(n),y=HA(w),G=HA(c),h=HA(D),M=pI(new e.Quaternion(s,o,a,i)),l=M&255,k=M>>>8&255,R=M>>>16&255,d=C===0?0:Math.min(255,Math.max(0,Math.round((Math.log(C)-fA)/KA)+1)),Y=E===0?0:Math.min(255,Math.max(0,Math.round((Math.log(E)-fA)/KA)+1)),m=t===0?0:Math.min(255,Math.max(0,Math.round((Math.log(t)-fA)/KA)+1)),J=OA(I),x=OA(g),U=OA(B),S=A*4;Q[S]=r|y<<8|G<<16|h<<24,Q[S+1]=J|x<<16,Q[S+2]=U|l<<16|k<<24,Q[S+3]=d|Y<<8|m<<16|R<<24}function hs(Q,A,I,g,B){const C=OA(I),E=OA(g),t=OA(B),s=A*4;Q[s+1]=C|E<<16,Q[s+2]=t|Q[s+2]&4294901760}function ys(Q,A,I,g,B){const C=I===0?0:Math.min(255,Math.max(0,Math.round((Math.log(I)-fA)/KA)+1)),E=g===0?0:Math.min(255,Math.max(0,Math.round((Math.log(g)-fA)/KA)+1)),t=B===0?0:Math.min(255,Math.max(0,Math.round((Math.log(B)-fA)/KA)+1)),s=A*4;Q[s+3]=C|E<<8|t<<16|Q[s+3]&4278190080}function Gs(Q,A,I,g,B,C){const E=pI(new e.Quaternion(I,g,B,C)),t=E&255,s=E>>>8&255,o=E>>>16&255,a=A*4;Q[a+2]=Q[a+2]&65535|t<<16|s<<24,Q[a+3]=Q[a+3]&16777215|o<<24}function ls(Q,A,I,g,B){const C=HA(I),E=HA(g),t=HA(B),s=A*4;Q[s]=C|E<<8|t<<16|Q[s]&4278190080}function Ms(Q,A,I){const g=HA(I),B=A*4;Q[B]=Q[B]&16777215|g<<24}const Ns=new e.Vector3,ks=new e.Vector3,Fs=new e.Quaternion,Rs=new e.Color,Js={center:Ns,scales:ks,quaternion:Fs,color:Rs,opacity:0};function CI(Q,A){const I=Js,g=A*4,B=Q[g],C=Q[g+1],E=Q[g+2],t=Q[g+3];I.color.set((B&255)/255,(B>>>8&255)/255,(B>>>16&255)/255),I.opacity=(B>>>24&255)/255,I.center.set(PA(C&65535),PA(C>>>16&65535),PA(E&65535));const s=t&255;I.scales.x=s===0?0:Math.exp(fA+(s-1)*KA);const o=t>>>8&255;I.scales.y=o===0?0:Math.exp(fA+(o-1)*KA);const a=t>>>16&255;I.scales.z=a===0?0:Math.exp(fA+(a-1)*KA);const i=E>>>16&65535|t>>>8&16711680;return FB(i,I.quaternion),I}function rA(Q){const A=Z,I=Math.max(Ii,Math.min(BQ,Math.ceil(Q/A))),g=Math.ceil(Q/(A*I)),B=A*I*g;return{width:A,height:I,depth:g,maxSplats:B}}function nB(){return navigator.maxTouchPoints>0?!0:/Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test(navigator.userAgent)}function cB(){return/Android/.test(navigator.userAgent)}function wB(){return/Oculus/.test(navigator.userAgent)}function rB(Q,A,I){const g=new Uint8Array(A*4);for(let B=0;BI!==void 0))}const GB=gA(` + precision highp float; + + in vec3 position; + + void main() { + gl_Position = vec4(position.xy, 0.0, 1.0); + } +`);function lB(Q){const A=new e.Vector3;for(const I of Q)A.add(I);return A.divideScalar(Q.length)}function MB(Q){if(Q.length===0)return new e.Quaternion;const A=Q[0].clone();for(let I=1;I=g)}function kB(Q,A){const[I,g]=[new e.Vector3,new e.Quaternion],[B,C]=[new e.Vector3,new e.Quaternion];Q.decompose(I,g,new e.Vector3),A.decompose(B,C,new e.Vector3);const E=I.distanceTo(B),t=Math.abs(g.dot(C));return{distance:E,coorient:t}}function EI({matrix1:Q,matrix2:A,maxDistance:I,minCoorient:g}){const{distance:B,coorient:C}=kB(Q,A);return B<=I&&(g==null||C>=g)}function Us(Q,A=.001){return Math.abs(Q)>24,g=Q<<16>>24,B=Q<<8>>24;A.set(I/127,g/127,B/127,0);const C=A.x*A.x+A.y*A.y+A.z*A.z;return A.w=Math.sqrt(Math.max(0,1-C)),A}function pI(Q){const A=Q.clone().normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const I=2*Math.acos(A.w),g=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),B=g<1e-6?new e.Vector3(1,0,0):new e.Vector3(A.x,A.y,A.z).divideScalar(g),C=Math.abs(B.x)+Math.abs(B.y)+Math.abs(B.z);let E=B.x/C,t=B.y/C;if(B.z<0){const n=E;E=(1-Math.abs(t))*(E>=0?1:-1),t=(1-Math.abs(n))*(t>=0?1:-1)}const s=E*.5+.5,o=t*.5+.5,a=Math.round(s*255),i=Math.round(o*255);return Math.round(I*(255/Math.PI))<<16|i<<8|a}function FB(Q,A){const I=Q&255,g=Q>>>8&255,B=Q>>>16&255,C=I/255,E=g/255;let t=(C-.5)*2,s=(E-.5)*2;const o=1-(Math.abs(t)+Math.abs(s)),a=Math.max(-o,0);t+=t>=0?-a:a,s+=s>=0?-a:a;const i=new e.Vector3(t,s,o).normalize(),n=B/255*Math.PI*.5,w=Math.sin(n),c=Math.cos(n);return A.set(i.x*w,i.y*w,i.z*w,c),A}function ps(Q){const A=Q.clone().normalize(),I=2*(A.w*A.x+A.y*A.z),g=1-2*(A.x*A.x+A.y*A.y),B=Math.atan2(I,g),C=2*(A.w*A.y-A.z*A.x),E=Math.abs(C)>=1?Math.sign(C)*(Math.PI/2):Math.asin(C),t=2*(A.w*A.z+A.x*A.y),s=1-2*(A.y*A.y+A.z*A.z),o=Math.atan2(t,s),a=(B+Math.PI)/(2*Math.PI),i=(E+Math.PI)/(2*Math.PI),D=(o+Math.PI)/(2*Math.PI),n=Math.round(a*255),w=Math.round(i*255);return Math.round(D*255)<<16|w<<8|n}function Hs(Q,A){const I=Q&255,g=Q>>>8&255,B=Q>>>16&255,C=I/255,E=g/255,t=B/255,s=C*(2*Math.PI)-Math.PI,o=E*(2*Math.PI)-Math.PI,a=t*(2*Math.PI)-Math.PI,i=Math.cos(s*.5),D=Math.sin(s*.5),n=Math.cos(o*.5),w=Math.sin(o*.5),c=Math.cos(a*.5),r=Math.sin(a*.5);return A.w=i*n*c+D*w*r,A.x=D*n*c-i*w*r,A.y=i*w*c+D*n*r,A.z=i*n*r-D*w*c,A.normalize(),A}function vQ(Q,A,I,g){const B=Math.max(-127,Math.min(127,Q*127)),C=Math.max(-127,Math.min(127,A*127)),E=Math.max(-127,Math.min(127,I*127)),t=Math.max(-127,Math.min(127,g*127));return B&255|(C&255)<<8|(E&255)<<16|(t&255)<<24}function fs(Q,A,I){const g=A*2;for(let B=0;B<9;++B){const C=Math.max(-63,Math.min(63,I[B]*63))&127,E=B*7,t=E+7,s=Math.floor(E/32),o=E-s*32,a=C<s*32+32){const i=C>>>32-o&4294967295;Q[g+s+1]|=i}}}function ms(Q,A,I){Q[A*4+0]=vQ(I[0],I[1],I[2],I[3]),Q[A*4+1]=vQ(I[4],I[5],I[6],I[7]),Q[A*4+2]=vQ(I[8],I[9],I[10],I[11]),Q[A*4+3]=vQ(I[12],I[13],I[14],0)}function bs(Q,A,I){const g=A*4;for(let B=0;B<21;++B){const C=Math.max(-31,Math.min(31,I[B]*31))&63,E=B*6,t=E+6,s=Math.floor(E/32),o=E-s*32,a=C<s*32+32){const i=C>>>32-o&4294967295;Q[g+s+1]|=i}}}function RB(Q,A){const I=[];let g=0,B=null;const C=new sB((s,o)=>{if(I.push(s),g+=s.length,o||g>=A){const a=new Uint8Array(g);let i=0;for(const D of I)a.set(D,i),i+=D.length;B=a.slice(0,A)}}),E=1024;let t=0;for(;B==null&&t{this.chunks.push(g),this.totalBytes+=g.length})}read(A){for(;this.totalBytes=this.fileBytes.length&&this.gunzip.push(new Uint8Array(0),!0),this.totalBytesthis.indent+g).join(` +`)+this.after}}const TI=new Map;function Ks(Q){let A=TI.get(Q);return A||(A=new e.RawShaderMaterial({glslVersion:e.GLSL3,vertexShader:GB,fragmentShader:Q.shader,uniforms:Q.uniforms}),TI.set(Q,A),A)}function mI(Q,A,I="add"){const g=()=>{throw new Error(`Invalid ${I} types: ${Q}, ${A}`)};if(Q===A)return Q;if(Q==="int"){if(tA(A))return A;g()}if(A==="int"){if(tA(Q))return Q;g()}if(Q==="uint"){if(iA(A))return A;g()}if(A==="uint"){if(iA(Q))return Q;g()}if(Q==="float"){if(_A(A))return A;g()}if(A==="float"){if(_A(Q))return Q;g()}throw new Error(`Invalid ${I} types: ${Q}, ${A}`)}function Zs(Q,A){return mI(Q,A,"sub")}function qs(Q,A){const I=()=>{throw new Error(`Invalid mul types: ${Q}, ${A}`)},g=B=>B;if(Q==="int"){if(tA(A))return g(A);I()}if(A==="int"){if(tA(Q))return g(Q);I()}if(Q==="uint"){if(iA(A))return g(A);I()}if(A==="uint"){if(iA(Q))return g(Q);I()}if(Q==="float"){if(_A(A))return g(A);I()}if(A==="float"){if(_A(Q))return g(Q);I()}if(tA(Q)||iA(Q)||tA(A)||iA(A)){if(Q===A)return g(Q);I()}if(Q==="vec2"){if(A==="vec2"||QQ(A))return g("vec2");if(A==="mat3x2")return g("vec3");if(A==="mat4x2")return g("vec4");I()}if(Q==="vec3"){if(A==="mat2x3")return g("vec2");if(A==="vec3"||IQ(A))return g("vec3");if(A==="mat4x3")return g("vec4");I()}if(Q==="vec4"){if(A==="mat2x4")return g("vec2");if(A==="mat3x4")return g("vec3");if(A==="vec4"||gQ(A))return g("vec4");I()}if(A==="vec2"){if(QQ(Q))return g("vec2");if(Q==="mat2x3")return g("vec3");if(Q==="mat2x4")return g("vec4");I()}if(A==="vec3"){if(Q==="mat3x2")return g("vec2");if(IQ(Q))return g("vec3");if(Q==="mat3x4")return g("vec4");I()}if(A==="vec4"){if(Q==="mat4x2")return g("vec2");if(Q==="mat4x3")return g("vec3");if(gQ(Q))return g("vec4");I()}if(QQ(Q)){if(QQ(A))return g("mat2");if(A==="mat3x2")return g("mat3x2");if(A==="mat4x2")return g("mat4x2");I()}if(Q==="mat2x3"){if(QQ(A))return g("mat2x3");if(A==="mat3x2")return g("mat3");if(A==="mat4x2")return g("mat4x3");I()}if(Q==="mat2x4"){if(QQ(A))return g("mat2x4");if(A==="mat3x2")return g("mat3x4");if(A==="mat4x2")return g("mat4");I()}if(Q==="mat3x2"){if(A==="mat2x3")return g("mat2");if(IQ(A))return g("mat3x2");if(A==="mat4x3")return g("mat4x2");I()}if(IQ(Q)){if(A==="mat2x3")return g("mat2x3");if(IQ(A))return g("mat3");if(A==="mat4x3")return g("mat4x3");I()}if(Q==="mat3x4"){if(A==="mat2x3")return g("mat2x4");if(IQ(A))return g("mat3x4");if(A==="mat4x3")return g("mat4");I()}if(Q==="mat4x2"){if(A==="mat2x4")return g("mat2");if(A==="mat3x4")return g("mat3x2");if(gQ(A))return g("mat4x2");I()}if(Q==="mat4x3"){if(A==="mat2x4")return g("mat2x3");if(A==="mat3x4")return g("mat3");if(gQ(A))return g("mat4x3");I()}if(gQ(Q)){if(A==="mat2x4")return g("mat2x4");if(A==="mat3x4")return g("mat3x4");if(gQ(A))return g("mat4");I()}throw new Error(`Invalid mul types: ${Q}, ${A}`)}function Ws(Q,A){return mI(Q,A,"div")}function Vs(Q,A){if(Q===A)return Q;if(Q==="int"){if(tA(A))return A}else if(A==="int"){if(tA(Q))return Q}else if(Q==="uint"){if(iA(A))return A}else if(A==="uint"&&iA(Q))return Q;throw new Error(`Invalid imod types: ${Q}, ${A}`)}function Ts(Q,A){if(Q===A||A==="float")return Q;throw new Error(`Invalid mod types: ${Q}, ${A}`)}function vs(Q){return Q}function Xs(Q){return Q}function js(Q){return Q}function zs(Q){return Q}function Os(Q){return Q}function Ps(Q){return Q}function _s(Q){return Q}function $s(Q){return Q}function Ao(Q){return Q}function Qo(Q){return Q}function Io(Q){return Q}function go(Q){return Q}function Bo(Q){return Q}function Co(Q){return Q}function Eo(Q){return Q}function to(Q){return Q}function dB(Q,A,I="min"){if(Q===A)return Q;if(A==="float"){if(bQ(Q))return Q}else if(A==="int"){if(tA(Q))return Q}else if(A==="uint"&&iA(Q))return Q;throw new Error(`Invalid ${I} types: ${Q}, ${A}`)}function io(Q,A){return dB(Q,A,"max")}function so(Q,A,I){if(A==="float"){if(bQ(Q))return Q}else if(A==="int"){if(tA(Q))return Q}else if(A==="uint"&&iA(Q))return Q;throw new Error(`Invalid clamp types: ${Q}, ${A}`)}function oo(Q,A,I){if(I===Q||I==="float"||I==="bool"&&Q==="float"||I==="bvec2"&&Q==="vec2"||I==="bvec3"&&Q==="vec3"||I==="bvec4"&&Q==="vec4")return Q;throw new Error(`Invalid mix types: ${Q}, ${A}, ${I}`)}function ao(Q,A){if(Q===A||A==="float")return A;throw new Error(`Invalid step types: ${Q}, ${A}`)}function eo(Q,A,I){if(Q===A&&(Q===I||Q==="float"))return I;throw new Error(`Invalid smoothstep types: ${Q}, ${A}, ${I}`)}function YB(Q,A="isNan"){if(Q==="float")return"bool";if(Q==="vec2")return"bvec2";if(Q==="vec3")return"bvec3";if(Q==="vec4")return"bvec4";throw new Error(`Invalid ${A} types: ${Q}`)}function Do(Q){return YB(Q,"isInf")}const wA=(Q,A)=>new LB({a:Q,b:A}),LQ=(Q,A)=>new pB({a:Q,b:A}),CA=(Q,A)=>new HB({a:Q,b:A}),$Q=(Q,A)=>new fB({a:Q,b:A}),kI=(Q,A)=>new mB({a:Q,b:A}),uB=(Q,A)=>new bB({a:Q,b:A}),no=Q=>new xB({a:Q}).outputs,co=Q=>new KB({a:Q}),wo=Q=>new ZB({a:Q}),ro=Q=>new qB({a:Q}),ho=Q=>new WB({a:Q}),yo=Q=>new VB({a:Q}),Go=Q=>new TB({a:Q}),lo=Q=>new vB({a:Q}),AI=Q=>new XB({a:Q}),Mo=(Q,A)=>new jB({a:Q,b:A}),No=Q=>new zB({a:Q}),ko=Q=>new OB({a:Q}),Fo=Q=>new PB({a:Q}),Ro=Q=>new _B({a:Q}),Jo=Q=>new $B({a:Q}),Yo=Q=>new AC({a:Q}),uo=Q=>new QC({a:Q}),Uo=(Q,A)=>new IC({a:Q,b:A}),UB=(Q,A)=>new gC({a:Q,b:A}),So=(Q,A,I)=>new BC({a:Q,min:A,max:I}),SB=(Q,A,I)=>new CC({a:Q,b:A,t:I}),Lo=(Q,A)=>new EC({edge:Q,x:A}),po=(Q,A,I)=>new tC({edge0:Q,edge1:A,x:I}),Ho=Q=>new iC({a:Q}),fo=Q=>new sC({a:Q});class LB extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"sum",outTypeFunc:mI}),this.statements=({inputs:g,outputs:B})=>[`${B.sum} = ${g.a} + ${g.b};`]}}class pB extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"difference",outTypeFunc:Zs}),this.statements=({inputs:g,outputs:B})=>[`${B.difference} = ${g.a} - ${g.b};`]}}class HB extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"product",outTypeFunc:qs}),this.statements=({inputs:g,outputs:B})=>[`${B.product} = ${g.a} * ${g.b};`]}}class fB extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"quotient",outTypeFunc:Ws}),this.statements=({inputs:g,outputs:B})=>[`${B.quotient} = ${g.a} / ${g.b};`]}}class mB extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"remainder",outTypeFunc:Vs}),this.statements=({inputs:g,outputs:B})=>[`${B.remainder} = ${g.a} % ${g.b};`]}}class bB extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"remainder",outTypeFunc:Ts}),this.statements=({inputs:g,outputs:B})=>[`${B.remainder} = mod(${g.a}, ${g.b});`]}}class xB extends f{constructor({a:A}){const I={a:p(A)},g=I.a,B={fract:g,integer:g};super({inTypes:I,outTypes:B,inputs:{a:A}}),this.statements=({inputs:C,outputs:E})=>[`${E.fract} = modf(${C.a}, ${E.integer});`]}}class KB extends N{constructor({a:A}){super({a:A,outKey:"neg",outTypeFunc:vs}),this.statements=({inputs:I,outputs:g})=>[`${g.neg} = -${I.a};`]}}class ZB extends N{constructor({a:A}){super({a:A,outKey:"abs",outTypeFunc:Xs}),this.statements=({inputs:I,outputs:g})=>[`${g.abs} = abs(${I.a});`]}}class qB extends N{constructor({a:A}){super({a:A,outKey:"sign",outTypeFunc:js}),this.statements=({inputs:I,outputs:g})=>[`${g.sign} = sign(${I.a});`]}}class WB extends N{constructor({a:A}){super({a:A,outKey:"floor",outTypeFunc:zs}),this.statements=({inputs:I,outputs:g})=>[`${g.floor} = floor(${I.a});`]}}class VB extends N{constructor({a:A}){super({a:A,outKey:"ceil",outTypeFunc:Os}),this.statements=({inputs:I,outputs:g})=>[`${g.ceil} = ceil(${I.a});`]}}class TB extends N{constructor({a:A}){super({a:A,outKey:"trunc",outTypeFunc:Ps}),this.statements=({inputs:I,outputs:g})=>[`${g.trunc} = trunc(${I.a});`]}}class vB extends N{constructor({a:A}){super({a:A,outKey:"round",outTypeFunc:_s}),this.statements=({inputs:I,outputs:g})=>[`${g.round} = round(${I.a});`]}}class XB extends N{constructor({a:A}){super({a:A,outKey:"fract",outTypeFunc:$s}),this.statements=({inputs:I,outputs:g})=>[`${g.fract} = fract(${I.a});`]}}class jB extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"power",outTypeFunc:Ao}),this.statements=({inputs:g,outputs:B})=>[`${B.power} = pow(${g.a}, ${g.b});`]}}class zB extends N{constructor({a:A}){super({a:A,outKey:"exp",outTypeFunc:Qo}),this.statements=({inputs:I,outputs:g})=>[`${g.exp} = exp(${I.a});`]}}class OB extends N{constructor({a:A}){super({a:A,outKey:"exp2",outTypeFunc:Io}),this.statements=({inputs:I,outputs:g})=>[`${g.exp2} = exp2(${I.a});`]}}class PB extends N{constructor({a:A}){super({a:A,outKey:"log",outTypeFunc:go}),this.statements=({inputs:I,outputs:g})=>[`${g.log} = log(${I.a});`]}}class _B extends N{constructor({a:A}){super({a:A,outKey:"log2",outTypeFunc:Bo}),this.statements=({inputs:I,outputs:g})=>[`${g.log2} = log2(${I.a});`]}}class $B extends N{constructor({a:A}){super({a:A,outKey:"sqr",outTypeFunc:Co}),this.statements=({inputs:I,outputs:g})=>[`${g.sqr} = ${I.a} * ${I.a};`]}}class AC extends N{constructor({a:A}){super({a:A,outKey:"sqrt",outTypeFunc:Eo}),this.statements=({inputs:I,outputs:g})=>[`${g.sqrt} = sqrt(${I.a});`]}}class QC extends N{constructor({a:A}){super({a:A,outKey:"inversesqrt",outTypeFunc:to}),this.statements=({inputs:I,outputs:g})=>[`${g.inversesqrt} = inversesqrt(${I.a});`]}}class IC extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"min",outTypeFunc:dB}),this.statements=({inputs:g,outputs:B})=>[`${B.min} = min(${g.a}, ${g.b});`]}}class gC extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"max",outTypeFunc:io}),this.statements=({inputs:g,outputs:B})=>[`${B.max} = max(${g.a}, ${g.b});`]}}class BC extends oQ{constructor({a:A,min:I,max:g}){super({a:A,b:I,c:g,outKey:"clamp",outTypeFunc:so}),this.statements=({inputs:B,outputs:C})=>{const{a:E,b:t,c:s}=B;return[`${C.clamp} = clamp(${E}, ${t}, ${s});`]}}}class CC extends oQ{constructor({a:A,b:I,t:g}){super({a:A,b:I,c:g,outKey:"mix",outTypeFunc:oo}),this.statements=({inputs:B,outputs:C})=>{const{a:E,b:t,c:s}=B;return[`${C.mix} = mix(${E}, ${t}, ${s});`]}}}class EC extends b{constructor({edge:A,x:I}){super({a:A,b:I,outKey:"step",outTypeFunc:ao}),this.statements=({inputs:g,outputs:B})=>{const{a:C,b:E}=g;return[`${B.step} = step(${C}, ${E});`]}}}class tC extends oQ{constructor({edge0:A,edge1:I,x:g}){super({a:A,b:I,c:g,outKey:"smoothstep",outTypeFunc:eo}),this.statements=({inputs:B,outputs:C})=>{const{a:E,b:t,c:s}=B;return[`${C.smoothstep} = smoothstep(${E}, ${t}, ${s});`]}}}class iC extends N{constructor({a:A}){super({a:A,outKey:"isNan",outTypeFunc:YB}),this.statements=({inputs:I,outputs:g})=>[`${g.isNan} = isNan(${I.a});`]}}class sC extends N{constructor({a:A}){super({a:A,outKey:"isInf",outTypeFunc:Do}),this.statements=({inputs:I,outputs:g})=>[`${g.isInf} = isInf(${I.a});`]}}const mo=(Q,A)=>new oC({a:Q,b:A}),bo=(Q,A)=>new aC({a:Q,b:A}),xo=(Q,A)=>new eC({a:Q,b:A}),Ko=Q=>new DC({a:Q}),Zo=(Q,A)=>new nC({a:Q,b:A}),qo=(Q,A)=>new cC({a:Q,b:A}),Wo=(Q,A)=>new wC({a:Q,b:A}),Vo=(Q,A)=>new rC({a:Q,b:A}),To=(Q,A)=>new hC({a:Q,b:A}),vo=(Q,A)=>new yC({a:Q,b:A}),Xo=Q=>new GC({a:Q}),jo=Q=>new lC({a:Q}),zo=(Q,A,I)=>new MC({cond:Q,t:A,f:I}),Oo=Q=>new kC({a:Q});class oC extends b{constructor({a:A,b:I}){super({a:A,b:I,outTypeFunc:(g,B)=>g,outKey:"and"}),this.statements=({inputs:g,outputs:B})=>this.outTypes.and==="bool"?[`${B.and} = ${g.a} && ${g.b};`]:[`${B.and} = ${g.a} & ${g.b};`]}}class aC extends b{constructor({a:A,b:I}){super({a:A,b:I,outTypeFunc:(g,B)=>g,outKey:"or"}),this.statements=({inputs:g,outputs:B})=>this.outTypes.or==="bool"?[`${B.or} = ${g.a} || ${g.b};`]:[`${B.or} = ${g.a} | ${g.b};`]}}class eC extends b{constructor({a:A,b:I}){super({a:A,b:I,outTypeFunc:(g,B)=>g,outKey:"xor"}),this.statements=({inputs:g,outputs:B})=>this.outTypes.xor==="bool"?[`${B.xor} = ${g.a} ^^ ${g.b};`]:[`${B.xor} = ${g.a} ^ ${g.b};`]}}class DC extends N{constructor({a:A}){super({a:A,outTypeFunc:I=>I,outKey:"not"}),this.statements=({inputs:I,outputs:g})=>this.outTypes.not==="bool"?[`${g.not} = !${I.a};`]:[`${g.not} = not(${I.a});`]}}class nC extends b{constructor({a:A,b:I}){super({a:A,b:I,outTypeFunc:(g,B)=>nI(g,"lessThan"),outKey:"lessThan"}),this.statements=({inputs:g,outputs:B})=>this.outTypes.lessThan==="bool"?[`${B.lessThan} = ${g.a} < ${g.b};`]:[`${B.lessThan} = lessThan(${g.a}, ${g.b});`]}}class cC extends b{constructor({a:A,b:I}){super({a:A,b:I,outTypeFunc:(g,B)=>nI(g,"lessThanEqual"),outKey:"lessThanEqual"}),this.statements=({inputs:g,outputs:B})=>this.outTypes.lessThanEqual==="bool"?[`${B.lessThanEqual} = ${g.a} <= ${g.b};`]:[`${B.lessThanEqual} = lessThanEqual(${g.a}, ${g.b});`]}}class wC extends b{constructor({a:A,b:I}){super({a:A,b:I,outTypeFunc:(g,B)=>nI(g,"greaterThan"),outKey:"greaterThan"}),this.statements=({inputs:g,outputs:B})=>this.outTypes.greaterThan==="bool"?[`${B.greaterThan} = ${g.a} > ${g.b};`]:[`${B.greaterThan} = greaterThan(${g.a}, ${g.b});`]}}class rC extends b{constructor({a:A,b:I}){super({a:A,b:I,outTypeFunc:(g,B)=>nI(g,"greaterThanEqual"),outKey:"greaterThanEqual"}),this.statements=({inputs:g,outputs:B})=>this.outTypes.greaterThanEqual==="bool"?[`${B.greaterThanEqual} = ${g.a} >= ${g.b};`]:[`${B.greaterThanEqual} = greaterThanEqual(${g.a}, ${g.b});`]}}class hC extends b{constructor({a:A,b:I}){super({a:A,b:I,outTypeFunc:NC,outKey:"equal"}),this.statements=({inputs:g,outputs:B})=>this.outTypes.equal==="bool"?[`${B.equal} = ${g.a} == ${g.b};`]:[`${B.equal} = equal(${g.a}, ${g.b});`]}}class yC extends b{constructor({a:A,b:I}){super({a:A,b:I,outTypeFunc:Po,outKey:"notEqual"}),this.statements=({inputs:g,outputs:B})=>this.outTypes.notEqual==="bool"?[`${B.notEqual} = ${g.a} != ${g.b};`]:[`${B.notEqual} = notEqual(${g.a}, ${g.b});`]}}class GC extends N{constructor({a:A}){super({a:A,outTypeFunc:I=>"bool",outKey:"any"}),this.statements=({inputs:I,outputs:g})=>[`${g.any} = any(${I.a});`]}}class lC extends N{constructor({a:A}){super({a:A,outTypeFunc:I=>"bool",outKey:"all"}),this.statements=({inputs:I,outputs:g})=>[`${g.all} = all(${I.a});`]}}class MC extends oQ{constructor({cond:A,t:I,f:g}){super({a:A,b:I,c:g,outKey:"select",outTypeFunc:(B,C,E)=>C}),this.statements=({inputs:B,outputs:C})=>{const{a:E,b:t,c:s}=B;return[`${C.select} = (${E}) ? (${t}) : (${s});`]}}}function nI(Q,A){if(sQ(Q))return"bool";if(Q==="ivec2"||Q==="uvec2"||Q==="vec2")return"bvec2";if(Q==="ivec3"||Q==="uvec3"||Q==="vec3")return"bvec3";if(Q==="ivec4"||Q==="uvec4"||Q==="vec4")return"bvec4";throw new Error(`Invalid ${A} type: ${Q}`)}function NC(Q,A="equal"){if(sQ(Q))return"bool";if(iQ(Q))return Q;if(Q==="ivec2"||Q==="uvec2"||Q==="vec2")return"bvec2";if(Q==="ivec3"||Q==="uvec3"||Q==="vec3")return"bvec3";if(Q==="ivec4"||Q==="uvec4"||Q==="vec4")return"bvec4";throw new Error(`Invalid ${A} type: ${Q}`)}function Po(Q){return NC(Q,"notEqual")}function _o(Q){if(iQ(Q))return"bool";if(tA(Q))return"int";if(iA(Q))return"uint";throw new Error(`Invalid compXor type: ${Q}`)}class kC extends N{constructor({a:A}){const I=_o(p(A));super({a:A,outTypeFunc:g=>I,outKey:"compXor"}),this.statements=({inputs:g,outputs:B})=>{if(sQ(this.outTypes.compXor))return[`${B.compXor} = ${g.a};`];const E=(yQ(I)?["x","y"]:GQ(I)?["x","y","z"]:["x","y","z","w"]).map(s=>`${g.a}.${s}`),t=iQ(I)?"^^":"^";return[`${B.compXor} = ${E.join(` ${t} `)};`]}}}const $o=Q=>new UC({value:Q}),Aa=Q=>new SC({value:Q}),Qa=Q=>new LC({value:Q}),FC=Q=>new pC({value:Q}),Ia=Q=>new HC({value:Q}),ga=Q=>new fC({value:Q}),Ba=Q=>new mC({value:Q}),Ca=Q=>new bC({value:Q}),Ea=Q=>new xC({value:Q}),ta=Q=>new KC({value:Q}),ia=Q=>new ZC({value:Q}),sa=Q=>new qC({value:Q}),oa=Q=>new WC({value:Q}),RC=Q=>new VC({value:Q}),tQ=Q=>new TC({value:Q}),JC=Q=>new vC({value:Q}),aa=Q=>new XC({value:Q}),ea=Q=>new jC({value:Q}),Da=Q=>new zC({value:Q}),dC=Q=>new OC({value:Q}),na=Q=>new PC({value:Q}),ca=Q=>new _C({value:Q}),wa=Q=>new $C({value:Q}),ra=Q=>new AE({value:Q}),ha=Q=>new QE({value:Q}),ya=Q=>new IE({value:Q}),Ga=Q=>new gE({value:Q}),YC=Q=>new BE({value:Q}),la=Q=>new CE({value:Q}),uC=Q=>new EE({value:Q});class P extends N{constructor({value:A,outType:I,outKey:g}){super({a:A,outTypeFunc:()=>I,outKey:g}),this.statements=({inputs:B,outputs:C})=>[`${C[g]} = ${Bg(I)}(${B.a});`]}}class UC extends P{constructor({value:A}){super({value:A,outType:"bool",outKey:"bool"})}}class SC extends P{constructor({value:A}){super({value:A,outType:"int",outKey:"int"})}}class LC extends P{constructor({value:A}){super({value:A,outType:"uint",outKey:"uint"})}}class pC extends P{constructor({value:A}){super({value:A,outType:"float",outKey:"float"})}}class HC extends P{constructor({value:A}){super({value:A,outType:"bvec2",outKey:"bvec2"})}}class fC extends P{constructor({value:A}){super({value:A,outType:"bvec3",outKey:"bvec3"})}}class mC extends P{constructor({value:A}){super({value:A,outType:"bvec4",outKey:"bvec4"})}}class bC extends P{constructor({value:A}){super({value:A,outType:"ivec2",outKey:"ivec2"})}}class xC extends P{constructor({value:A}){super({value:A,outType:"ivec3",outKey:"ivec3"})}}class KC extends P{constructor({value:A}){super({value:A,outType:"ivec4",outKey:"ivec4"})}}class ZC extends P{constructor({value:A}){super({value:A,outType:"uvec2",outKey:"uvec2"})}}class qC extends P{constructor({value:A}){super({value:A,outType:"uvec3",outKey:"uvec3"})}}class WC extends P{constructor({value:A}){super({value:A,outType:"uvec4",outKey:"uvec4"})}}class VC extends P{constructor({value:A}){super({value:A,outType:"vec2",outKey:"vec2"})}}class TC extends P{constructor({value:A}){super({value:A,outType:"vec3",outKey:"vec3"})}}class vC extends P{constructor({value:A}){super({value:A,outType:"vec4",outKey:"vec4"})}}class XC extends P{constructor({value:A}){super({value:A,outType:"mat2",outKey:"mat2"})}}class jC extends P{constructor({value:A}){super({value:A,outType:"mat3",outKey:"mat3"})}}class zC extends P{constructor({value:A}){super({value:A,outType:"mat4",outKey:"mat4"})}}class OC extends N{constructor({value:A}){super({a:A,outKey:"int",outTypeFunc:()=>"int"}),this.statements=({inputs:I,outputs:g})=>[`${g.int} = floatBitsToInt(${I.a});`]}}class PC extends N{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:I,outputs:g})=>[`${g.uint} = floatBitsToUint(${I.a});`]}}class _C extends N{constructor({value:A}){super({a:A,outKey:"float",outTypeFunc:()=>"float"}),this.statements=({inputs:I,outputs:g})=>[`${g.float} = intBitsToFloat(${I.a});`]}}class $C extends N{constructor({value:A}){super({a:A,outKey:"float",outTypeFunc:()=>"float"}),this.statements=({inputs:I,outputs:g})=>[`${g.float} = uintBitsToFloat(${I.a});`]}}class AE extends N{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:I,outputs:g})=>[`${g.uint} = packSnorm2x16(${I.a});`]}}class QE extends N{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:I,outputs:g})=>[`${g.vec2} = unpackSnorm2x16(${I.a});`]}}class IE extends N{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:I,outputs:g})=>[`${g.uint} = packUnorm2x16(${I.a});`]}}class gE extends N{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:I,outputs:g})=>[`${g.vec2} = unpackUnorm2x16(${I.a});`]}}class BE extends N{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:I,outputs:g})=>[`${g.uint} = packHalf2x16(${I.a});`]}}class CE extends N{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:I,outputs:g})=>[`${g.vec2} = unpackHalf2x16(${I.a});`]}}class EE extends N{constructor({value:A}){super({a:A,outKey:"rgba8",outTypeFunc:()=>"vec4"}),this.statements=({inputs:I,outputs:g})=>[`uvec4 uRgba = uvec4(${I.a} & 0xffu, (${I.a} >> 8u) & 0xffu, (${I.a} >> 16u) & 0xffu, (${I.a} >> 24u) & 0xffu);`,`${g.rgba8} = vec4(uRgba) / 255.0;`]}}const Ma=Q=>new sE({a:Q}),Na=(Q,A)=>new oE({a:Q,b:A}),ka=(Q,A)=>new aE({a:Q,b:A}),Fa=(Q,A)=>new eE({a:Q,b:A}),tE=Q=>new DE({a:Q}),Ra=(Q,A,I)=>new wE({a:Q,b:A,c:I}),Ja=(Q,A)=>new rE({incident:Q,normal:A}),da=(Q,A,I)=>new hE({incident:Q,normal:A,eta:I}),YQ=Q=>new kE({vector:Q}),mA=({vector:Q,vectorType:A,x:I,y:g,z:B,w:C,r:E,g:t,b:s,a:o})=>new FE({vector:Q,vectorType:A,x:I,y:g,z:B,w:C,r:E,g:t,b:s,a:o}),Ya=Q=>new nE({a:Q}),iE=(Q,A)=>new cE({a:Q,b:A}),ua=(Q,A)=>new RE({vector:Q,select:A}),Ua=(Q,A)=>new yE({a:Q,b:A}),Sa=(Q,A)=>new GE({a:Q,b:A}),La=Q=>new lE({a:Q}),pa=Q=>new ME({a:Q}),Ha=Q=>new NE({a:Q});class sE extends N{constructor({a:A}){super({a:A,outTypeFunc:I=>"float",outKey:"length"}),this.statements=({inputs:I,outputs:g})=>[`${g.length} = length(${I.a});`]}}class oE extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"distance",outTypeFunc:(g,B)=>"float"}),this.statements=({inputs:g,outputs:B})=>[`${B.distance} = distance(${g.a}, ${g.b});`]}}class aE extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"dot",outTypeFunc:(g,B)=>"float"}),this.statements=({inputs:g,outputs:B})=>[`${B.dot} = dot(${g.a}, ${g.b});`]}}class eE extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"cross",outTypeFunc:(g,B)=>"vec3"}),this.statements=({inputs:g,outputs:B})=>[`${B.cross} = cross(${g.a}, ${g.b});`]}}class DE extends N{constructor({a:A}){super({a:A,outTypeFunc:I=>I,outKey:"normalize"}),this.statements=({inputs:I,outputs:g})=>[`${g.normalize} = normalize(${I.a});`]}}function fa(Q){if(Q==="vec3")return"vec2";if(Q==="vec4")return"vec3";throw new Error("Invalid type")}class nE extends N{constructor({a:A}){super({a:A,outTypeFunc:I=>fa(I),outKey:"projected"}),this.statements=({inputs:I,outputs:g})=>{if(this.inTypes.a==="vec3")return[`${g.projected} = ${I.a}.xy / ${I.a}.z;`];if(this.inTypes.a==="vec4")return[`${g.projected} = ${I.a}.xyz / ${I.a}.w;`];throw new Error("Invalid type")}}}function ma(Q){if(Q==="float")return"vec2";if(Q==="vec2")return"vec3";if(Q==="vec3")return"vec4";throw new Error("Invalid type")}class cE extends b{constructor({a:A,b:I}){const g=p(A),B=ma(g);super({a:A,b:I,outKey:"extend",outTypeFunc:()=>B}),this.statements=({inputs:C,outputs:E})=>[`${E.extend} = ${B}(${C.a}, ${C.b});`]}}class wE extends oQ{constructor({a:A,b:I,c:g}){super({a:A,b:I,c:g,outKey:"forward",outTypeFunc:(B,C,E)=>B}),this.statements=({inputs:B,outputs:C})=>[`${C.forward} = faceforward(${B.a}, ${B.b}, ${B.c});`]}}class rE extends b{constructor({incident:A,normal:I}){super({a:A,b:I,outKey:"reflection",outTypeFunc:(g,B)=>g}),this.statements=({inputs:g,outputs:B})=>[`${B.reflection} = reflect(${g.a}, ${g.b});`]}}class hE extends oQ{constructor({incident:A,normal:I,eta:g}){super({a:A,b:I,c:g,outKey:"refraction",outTypeFunc:(B,C,E)=>B}),this.statements=({inputs:B,outputs:C})=>[`${C.refraction} = refract(${B.a}, ${B.b}, ${B.c});`]}}class yE extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"product",outTypeFunc:(g,B)=>g}),this.statements=({inputs:g,outputs:B})=>[`${B.product} = matrixCompMult(${A}, ${I});`]}}function ba(Q,A){if(Q==="vec2"){if(A==="vec2")return"mat2";if(A==="vec3")return"mat3x2";if(A==="vec4")return"mat4x2"}if(Q==="vec3"){if(A==="vec2")return"mat2x3";if(A==="vec3")return"mat3";if(A==="vec4")return"mat4x3"}if(Q==="vec4"){if(A==="vec2")return"mat2x4";if(A==="vec3")return"mat3x4";if(A==="vec4")return"mat4"}throw new Error(`Invalid outer type: ${Q}, ${A}`)}class GE extends b{constructor({a:A,b:I}){super({a:A,b:I,outKey:"outer",outTypeFunc:ba}),this.statements=({inputs:g,outputs:B})=>[`${B.outer} = outerProduct(${g.a}, ${g.b});`]}}function xa(Q){if(Q==="mat2")return"mat2";if(Q==="mat3")return"mat3";if(Q==="mat4")return"mat4";if(Q==="mat2x2")return"mat2x2";if(Q==="mat2x3")return"mat3x2";if(Q==="mat2x4")return"mat4x2";if(Q==="mat3x2")return"mat2x3";if(Q==="mat3x3")return"mat3x3";if(Q==="mat3x4")return"mat4x3";if(Q==="mat4x2")return"mat2x4";if(Q==="mat4x3")return"mat3x4";if(Q==="mat4x4")return"mat4x4";throw new Error(`Invalid transpose type: ${Q}`)}class lE extends N{constructor({a:A}){super({a:A,outKey:"transpose",outTypeFunc:xa}),this.statements=({inputs:I,outputs:g})=>[`${g.transpose} = transpose(${I.a});`]}}class ME extends N{constructor({a:A}){super({a:A,outKey:"det",outTypeFunc:I=>"float"}),this.statements=({inputs:I,outputs:g})=>[`${g.det} = determinant(${I.a});`]}}class NE extends N{constructor({a:A}){super({a:A,outKey:"inverse",outTypeFunc:I=>I}),this.statements=({inputs:I,outputs:g})=>[`${g.inverse} = inverse(${A});`]}}function Ka(Q){const A=I=>I;switch(Q){case"vec2":return A({x:"float",y:"float",r:"float",g:"float"});case"vec3":return A({x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"});case"vec4":return A({x:"float",y:"float",z:"float",w:"float",r:"float",g:"float",b:"float",a:"float"});case"ivec2":return A({x:"int",y:"int",r:"int",g:"int"});case"ivec3":return A({x:"int",y:"int",z:"int",r:"int",g:"int",b:"int"});case"ivec4":return A({x:"int",y:"int",z:"int",w:"int",r:"int",g:"int",b:"int",a:"int"});case"uvec2":return A({x:"uint",y:"uint",r:"uint",g:"uint"});case"uvec3":return A({x:"uint",y:"uint",z:"uint",r:"uint",g:"uint",b:"uint"});case"uvec4":return A({x:"uint",y:"uint",z:"uint",w:"uint",r:"uint",g:"uint",b:"uint",a:"uint"});default:throw new Error(`Invalid vector type: ${Q}`)}}class kE extends f{constructor({vector:A}){const g={vector:p(A)},B=Ka(g.vector);super({inTypes:g,outTypes:B,inputs:{vector:A}}),this.statements=({inputs:C,outputs:E})=>{const{x:t,y:s,z:o,w:a,r:i,g:D,b:n,a:w}=E,{vector:c}=C;return[t?`${t} = ${c}.x;`:null,s?`${s} = ${c}.y;`:null,o?`${o} = ${c}.z;`:null,a?`${a} = ${c}.w;`:null,i?`${i} = ${c}.r;`:null,D?`${D} = ${c}.g;`:null,n?`${n} = ${c}.b;`:null,w?`${w} = ${c}.a;`:null].filter(Boolean)}}}class FE extends f{constructor({vector:A,vectorType:I,x:g,y:B,z:C,w:E,r:t,g:s,b:o,a}){if(!A&&!I)throw new Error("Either vector or vectorType must be provided");const i=I??p(A),D=Qg(i),n=Ig(i),w={vector:i,x:D,y:D,r:D,g:D},c={vector:A,x:g,y:B,r:t,g:s};n>=3&&(Object.assign(w,{z:D,b:D}),Object.assign(c,{z:C,b:o})),n>=4&&(Object.assign(w,{w:D,a:D}),Object.assign(c,{w:E,a})),super({inTypes:w,outTypes:{vector:i},inputs:c}),this.statements=({inputs:r,outputs:y})=>{const{vector:G}=y,{vector:h,x:M,y:l,z:k,w:R,r:d,g:Y,b:m,a:J}=r,x=[`${G}.x = ${M??d??(h?`${h}.x`:NQ(D))};`,`${G}.y = ${l??Y??(h?`${h}.y`:NQ(D))};`];return n>=3&&x.push(`${G}.z = ${k??m??(h?`${h}.z`:NQ(D))};`),n>=4&&x.push(`${G}.w = ${R??J??(h?`${h}.w`:NQ(D))};`),x}}dynoOut(){return new H(this,"vector")}}function Za(Q,A){let I=null;if(bQ(Q)?I=A.length===1?"float":A.length===2?"vec2":A.length===3?"vec3":A.length===4?"vec4":null:tA(Q)?I=A.length===1?"int":A.length===2?"ivec2":A.length===3?"ivec3":A.length===4?"ivec4":null:iA(Q)&&(I=A.length===1?"uint":A.length===2?"uvec2":A.length===3?"uvec3":A.length===4?"uvec4":null),I==null)throw new Error(`Invalid swizzle: ${A}`);return I}class RE extends N{constructor({vector:A,select:I}){super({a:A,outKey:"swizzle",outTypeFunc:g=>Za(g,I)}),this.statements=({inputs:g,outputs:B})=>[`${B.swizzle} = ${g.a}.${I};`]}}const qa=(Q,A,I)=>new SE({index:Q,from:A,to:I}),Wa=Q=>new lQ({value:Q}),Va=Q=>new RA({state:Q}),Ta=Q=>new JA({state:Q}),JE=Q=>new LE({value:Q}),dE=Q=>new pE({value:Q}),YE=Q=>new HE({value:Q}),uE=Q=>new fE({value:Q}),va=Q=>new mE({value:Q}),Xa=Q=>new bE({value:Q}),UE=Q=>new xE({value:Q}),FI=Q=>new KE({value:Q});class SE extends f{constructor({from:A,to:I,index:g}){super({inTypes:{from:"int",to:"int",index:"int"},outTypes:{index:"int"},inputs:{from:A,to:I,index:g},statements:({inputs:B,outputs:C})=>[`${C.index} = ${B.index} - ${B.from} + ${B.to};`]})}dynoOut(){return new H(this,"index")}}class RA extends f{constructor({state:A}){const I=p(A);super({inTypes:{state:I},outTypes:{state:"uint"},inputs:{state:A},globals:()=>[gA(` + uint pcg_next(uint state) { + return state * 747796405u + 2891336453u; + } + `)],statements:({inputs:g,outputs:B})=>{const C=I==="uint"?`${g.state}`:I==="int"?`uint(${g.state})`:`floatBitsToUint(${g.state})`;return[`${B.state} = pcg_next(${C});`]}})}dynoOut(){return new H(this,"state")}}class JA extends f{constructor({state:A}){super({inTypes:{state:"uint"},outTypes:{hash:"uint"},inputs:{state:A},globals:()=>[gA(` + uint pcg_hash(uint state) { + uint hash = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; + return (hash >> 22u) ^ hash; + } + `)],statements:({inputs:I,outputs:g})=>[`${g.hash} = pcg_hash(${I.state});`]})}dynoOut(){return new H(this,"hash")}}class lQ extends f{constructor({value:A}){const I=p(A),g=gg(I);super({inTypes:{value:I},outTypes:{state:"uint"},inputs:{value:A},globals:()=>[gA(` + uint pcg_mix(uint value) { + return value; + } + uint pcg_mix(uvec2 value) { + return value.x + 0x9e3779b9u * value.y; + } + uint pcg_mix(uvec3 value) { + return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z; + } + uint pcg_mix(uvec4 value) { + return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z + 0xc2b2ae35u * value.w; + } + `)],statements:({inputs:B,outputs:C})=>{const E=iA(I)?`${B.value}`:tA(I)?`${g}(${B.value})`:`floatBitsToUint(${B.value})`;return[`${g} bits = ${E};`,`${C.state} = pcg_mix(bits);`]}})}dynoOut(){return new H(this,"state")}}class LE extends bA{constructor({value:A}){super({inTypes:{value:p(A)},outTypes:{hash:"uint"},inputs:{value:A},construct:({value:I})=>{if(!I)throw new Error("value is required");let g=new lQ({value:I}).outputs.state;return g=new RA({state:g}).outputs.state,new JA({state:g}).outputs}})}dynoOut(){return new H(this,"hash")}}class pE extends bA{constructor({value:A}){super({inTypes:{value:p(A)},outTypes:{hash:"uvec2"},inputs:{value:A},construct:({value:I})=>{if(!I)throw new Error("value is required");let g=new lQ({value:I}).outputs.state;g=new RA({state:g}).outputs.state;const B=new JA({state:g}).outputs.hash;g=new RA({state:g}).outputs.state;const C=new JA({state:g}).outputs.hash;return{hash:mA({vectorType:"uvec2",x:B,y:C})}}})}dynoOut(){return new H(this,"hash")}}class HE extends bA{constructor({value:A}){super({inTypes:{value:p(A)},outTypes:{hash:"uvec3"},inputs:{value:A},construct:({value:I})=>{if(!I)throw new Error("value is required");let g=new lQ({value:I}).outputs.state;g=new RA({state:g}).outputs.state;const B=new JA({state:g}).outputs.hash;g=new RA({state:g}).outputs.state;const C=new JA({state:g}).outputs.hash;g=new RA({state:g}).outputs.state;const E=new JA({state:g}).outputs.hash;return{hash:mA({vectorType:"uvec3",x:B,y:C,z:E})}}})}dynoOut(){return new H(this,"hash")}}class fE extends bA{constructor({value:A}){super({inTypes:{value:p(A)},outTypes:{hash:"uvec4"},inputs:{value:A},construct:({value:I})=>{if(!I)throw new Error("value is required");let g=new lQ({value:I}).outputs.state;g=new RA({state:g}).outputs.state;const B=new JA({state:g}).outputs.hash;g=new RA({state:g}).outputs.state;const C=new JA({state:g}).outputs.hash;g=new RA({state:g}).outputs.state;const E=new JA({state:g}).outputs.hash;g=new RA({state:g}).outputs.state;const t=new JA({state:g}).outputs.hash;return{hash:mA({vectorType:"uvec4",x:B,y:C,z:E,w:t})}}})}dynoOut(){return new H(this,"hash")}}class mE extends bA{constructor({value:A}){super({inTypes:{value:p(A)},outTypes:{hash:"float"},inputs:{value:A},construct:({value:I})=>{if(!I)throw new Error("value is required");const g=JE(I);return{hash:CA(FC(g),q("float",1/2**32))}}})}dynoOut(){return new H(this,"hash")}}class bE extends bA{constructor({value:A}){super({inTypes:{value:p(A)},outTypes:{hash:"vec2"},inputs:{value:A},construct:({value:I})=>{if(!I)throw new Error("value is required");const g=dE(I);return{hash:CA(RC(g),q("float",1/2**32))}}})}dynoOut(){return new H(this,"hash")}}class xE extends bA{constructor({value:A}){super({inTypes:{value:p(A)},outTypes:{hash:"vec3"},inputs:{value:A},construct:({value:I})=>{if(!I)throw new Error("value is required");const g=YE(I);return{hash:CA(tQ(g),q("float",1/2**32))}}})}dynoOut(){return new H(this,"hash")}}class KE extends bA{constructor({value:A}){super({inTypes:{value:p(A)},outTypes:{hash:"vec4"},inputs:{value:A},construct:({value:I})=>{if(!I)throw new Error("value is required");const g=uE(I);return{hash:CA(JC(g),q("float",1/2**32))}}})}dynoOut(){return new H(this,"hash")}}const ja=(Q,{scale:A,scales:I,rotate:g,translate:B})=>new ZE({position:Q,scale:A,scales:I,rotate:g,translate:B}).outputs.position,za=(Q,{scale:A,scales:I,rotate:g})=>new qE({ray:Q,scale:A,scales:I,rotate:g}).outputs.ray,Oa=(Q,{rotate:A})=>new WE({quaternion:Q,rotate:A}).outputs.quaternion;class ZE extends f{constructor({position:A,scale:I,scales:g,rotate:B,translate:C}){super({inTypes:{position:"vec3",scale:"float",scales:"vec3",rotate:"vec4",translate:"vec3"},outTypes:{position:"vec3"},inputs:{position:A,scale:I,scales:g,rotate:B,translate:C},statements:({inputs:E,outputs:t})=>{const{position:s}=t;if(!s)return[];const{scale:o,scales:a,rotate:i,translate:D}=E;return[`${s} = ${E.position??"vec3(0.0, 0.0, 0.0)"};`,o?`${s} *= ${o};`:null,a?`${s} *= ${a};`:null,i?`${s} = quatVec(${i}, ${s});`:null,D?`${s} += ${D};`:null].filter(Boolean)}})}}class qE extends f{constructor({ray:A,scale:I,scales:g,rotate:B}){super({inTypes:{ray:"vec3",scale:"float",scales:"vec3",rotate:"vec4"},outTypes:{ray:"vec3"},inputs:{ray:A,scale:I,scales:g,rotate:B},statements:({inputs:C,outputs:E})=>{const{ray:t}=E;if(!t)return[];const{scale:s,scales:o,rotate:a}=C;return[`${t} = ${C.ray??"vec3(0.0, 0.0, 0.0)"};`,s?`${t} *= ${s};`:null,o?`${t} *= ${o};`:null,a?`${t} = quatVec(${a}, ${t});`:null].filter(Boolean)}})}}class WE extends f{constructor({quaternion:A,rotate:I}){super({inTypes:{quaternion:"vec4",rotate:"vec4"},outTypes:{quaternion:"vec4"},inputs:{quaternion:A,rotate:I},statements:({inputs:g,outputs:B})=>{const{quaternion:C}=B;return C?[`${C} = ${g.quaternion??"vec4(0.0, 0.0, 0.0, 1.0)"};`,I?`${C} = quatQuat(${g.rotate}, ${C});`:null].filter(Boolean):[]}})}}const Pa=()=>{throw new Error("Not implemented")},_a=()=>{throw new Error("Not implemented")},$a=()=>{throw new Error("Not implemented")},Ae=()=>{throw new Error("Not implemented")},Qe=()=>{throw new Error("Not implemented")},Ie=()=>{throw new Error("Not implemented")},ge=(Q,A)=>new VE({texture:Q,lod:A}),Be=(Q,A,I)=>new TE({texture:Q,coord:A,bias:I}),Ce=(Q,A,I)=>new vE({texture:Q,coord:A,lod:I});class VE extends f{constructor({texture:A,lod:I}){const g=p(A);super({inTypes:{texture:g,lod:"int"},outTypes:{size:XE(g)},inputs:{texture:A,lod:I},statements:({inputs:B,outputs:C})=>[`${C.size} = textureSize(${B.texture}, ${B.lod??"0"});`]})}dynoOut(){return new H(this,"size")}}class TE extends f{constructor({texture:A,coord:I,bias:g}){const B=p(A);super({inTypes:{texture:B,coord:Ee(B),bias:"float"},outTypes:{sample:jE(B)},inputs:{texture:A,coord:I,bias:g},statements:({inputs:C,outputs:E})=>[`${E.sample} = texture(${C.texture}, ${C.coord}${C.bias?`, ${C.bias}`:""});`]})}dynoOut(){return new H(this,"sample")}}class vE extends f{constructor({texture:A,coord:I,lod:g}){const B=p(A);super({inTypes:{texture:B,coord:XE(B),lod:"int"},outTypes:{texel:jE(B)},inputs:{texture:A,coord:I,lod:g},statements:({inputs:C,outputs:E})=>[`${E.texel} = texelFetch(${C.texture}, ${C.coord}, ${C.lod??"0"});`]})}dynoOut(){return new H(this,"texel")}}function XE(Q){switch(Q){case"sampler2D":case"usampler2D":case"isampler2D":case"samplerCube":case"usamplerCube":case"isamplerCube":case"sampler2DShadow":case"samplerCubeShadow":return"ivec2";case"sampler3D":case"usampler3D":case"isampler3D":case"sampler2DArray":case"usampler2DArray":case"isampler2DArray":case"sampler2DArrayShadow":return"ivec3";default:throw new Error(`Invalid texture type: ${Q}`)}}function Ee(Q){switch(Q){case"sampler2D":case"usampler2D":case"isampler2D":return"vec2";case"sampler3D":case"usampler3D":case"isampler3D":case"samplerCube":case"usamplerCube":case"isamplerCube":case"sampler2DArray":case"usampler2DArray":case"isampler2DArray":case"sampler2DShadow":return"vec3";case"samplerCubeShadow":case"sampler2DArrayShadow":return"vec4";default:throw new Error(`Invalid texture type: ${Q}`)}}function jE(Q){switch(Q){case"sampler2D":case"sampler2DArray":case"sampler3D":case"samplerCube":case"sampler2DShadow":return"vec4";case"usampler2D":case"usampler2DArray":case"usampler3D":case"usamplerCube":return"uvec4";case"isampler2D":case"isampler2DArray":case"isampler3D":case"isamplerCube":return"ivec4";case"samplerCubeShadow":case"sampler2DArrayShadow":return"float";default:throw new Error(`Invalid texture type: ${Q}`)}}const te=Q=>new zE({degrees:Q}),ie=Q=>new OE({radians:Q}),RI=Q=>new PE({radians:Q}),se=Q=>new _E({radians:Q}),oe=Q=>new $E({radians:Q}),ae=Q=>new At({sin:Q}),ee=Q=>new Qt({cos:Q}),De=Q=>new It({tan:Q}),ne=(Q,A)=>new gt({y:Q,x:A}),ce=Q=>new Bt({x:Q}),we=Q=>new Ct({x:Q}),re=Q=>new Et({x:Q}),he=Q=>new tt({x:Q}),ye=Q=>new it({x:Q}),Ge=Q=>new st({x:Q});class zE extends N{constructor({degrees:A}){super({a:A,outTypeFunc:I=>I,outKey:"radians"}),this.statements=({inputs:I,outputs:g})=>[`${g.radians} = radians(${I.a});`]}}class OE extends N{constructor({radians:A}){super({a:A,outTypeFunc:I=>I,outKey:"degrees"}),this.statements=({inputs:I,outputs:g})=>[`${g.degrees} = degrees(${I.a});`]}}class PE extends N{constructor({radians:A}){super({a:A,outTypeFunc:I=>I,outKey:"sin"}),this.statements=({inputs:I,outputs:g})=>[`${g.sin} = sin(${I.a});`]}}class _E extends N{constructor({radians:A}){super({a:A,outTypeFunc:I=>I,outKey:"cos"}),this.statements=({inputs:I,outputs:g})=>[`${g.cos} = cos(${I.a});`]}}class $E extends N{constructor({radians:A}){super({a:A,outTypeFunc:I=>I,outKey:"tan"}),this.statements=({inputs:I,outputs:g})=>[`${g.tan} = tan(${I.a});`]}}class At extends N{constructor({sin:A}){super({a:A,outTypeFunc:I=>I,outKey:"asin"}),this.statements=({inputs:I,outputs:g})=>[`${g.asin} = asin(${I.a});`]}}class Qt extends N{constructor({cos:A}){super({a:A,outTypeFunc:I=>I,outKey:"acos"}),this.statements=({inputs:I,outputs:g})=>[`${g.acos} = acos(${I.a});`]}}class It extends N{constructor({tan:A}){super({a:A,outTypeFunc:I=>I,outKey:"atan"}),this.statements=({inputs:I,outputs:g})=>[`${g.atan} = atan(${I.a});`]}}class gt extends b{constructor({y:A,x:I}){super({a:A,b:I,outTypeFunc:(g,B)=>g,outKey:"atan2"}),this.statements=({inputs:g,outputs:B})=>[`${B.atan2} = atan2(${g.a}, ${g.b});`]}}class Bt extends N{constructor({x:A}){super({a:A,outTypeFunc:I=>I,outKey:"sinh"}),this.statements=({inputs:I,outputs:g})=>[`${g.sinh} = sinh(${I.a});`]}}class Ct extends N{constructor({x:A}){super({a:A,outTypeFunc:I=>I,outKey:"cosh"}),this.statements=({inputs:I,outputs:g})=>[`${g.cosh} = cosh(${I.a});`]}}class Et extends N{constructor({x:A}){super({a:A,outTypeFunc:I=>I,outKey:"tanh"}),this.statements=({inputs:I,outputs:g})=>[`${g.tanh} = tanh(${I.a});`]}}class tt extends N{constructor({x:A}){super({a:A,outTypeFunc:I=>I,outKey:"asinh"}),this.statements=({inputs:I,outputs:g})=>[`${g.asinh} = asinh(${I.a});`]}}class it extends N{constructor({x:A}){super({a:A,outTypeFunc:I=>I,outKey:"acosh"}),this.statements=({inputs:I,outputs:g})=>[`${g.acosh} = acosh(${I.a});`]}}class st extends N{constructor({x:A}){super({a:A,outTypeFunc:I=>I,outKey:"atanh"}),this.statements=({inputs:I,outputs:g})=>[`${g.atanh} = atanh(${I.a});`]}}const le=Object.freeze(Object.defineProperty({__proto__:null,Abs:ZB,Acos:Qt,Acosh:it,Add:LB,All:lC,And:oC,Any:GC,Asin:At,Asinh:tt,Atan:It,Atan2:gt,Atanh:st,BVec2:HC,BVec3:fC,BVec4:mC,BinaryOp:b,Bool:UC,Ceil:VB,Clamp:BC,Combine:FE,CombineGsplat:Dg,CompMult:yE,CompXor:kC,Compilation:Eg,Cos:_E,Cosh:Ct,Cross:eE,Degrees:OE,Determinant:ME,Distance:oE,Div:fB,Dot:aE,Dyno:f,DynoBlock:bA,DynoBool:gI,DynoBvec2:Gg,DynoBvec3:kg,DynoBvec4:Jg,DynoConst:Cg,DynoFloat:EQ,DynoInt:SQ,DynoIsampler2D:Wg,DynoIsampler2DArray:Tg,DynoIsampler3D:jg,DynoIsamplerCube:Pg,DynoIvec2:Mg,DynoIvec3:Rg,DynoIvec4:Yg,DynoLiteral:wQ,DynoMat2:ug,DynoMat2x2:Ug,DynoMat2x3:Sg,DynoMat2x4:Lg,DynoMat3:pg,DynoMat3x2:Hg,DynoMat3x3:fg,DynoMat3x4:mg,DynoMat4:bg,DynoMat4x2:xg,DynoMat4x3:Kg,DynoMat4x4:Zg,DynoOutput:H,DynoProgram:HI,DynoProgramTemplate:fI,DynoRemapIndex:SE,DynoSampler2D:Vg,DynoSampler2DArray:vg,DynoSampler2DArrayShadow:AB,DynoSampler2DShadow:$g,DynoSampler3D:zg,DynoSamplerCube:_g,DynoSamplerCubeShadow:QB,DynoUint:yg,DynoUniform:F,DynoUsampler2D:qg,DynoUsampler2DArray:RQ,DynoUsampler3D:Xg,DynoUsamplerCube:Og,DynoUvec2:lg,DynoUvec3:Fg,DynoUvec4:dg,DynoValue:zA,DynoVec2:Ng,DynoVec3:hQ,DynoVec4:qQ,Equal:hC,Exp:zB,Exp2:OB,ExtendVec:cE,FaceForward:wE,Float:pC,FloatBitsToInt:OC,FloatBitsToUint:PC,Floor:WB,Fract:XB,GreaterThan:wC,GreaterThanEqual:rC,Gsplat:T,GsplatNormal:cg,Hash:LE,Hash2:pE,Hash3:HE,Hash4:fE,HashFloat:mE,HashVec2:bE,HashVec3:xE,HashVec4:KE,IMod:mB,IVec2:bC,IVec3:xC,IVec4:KC,Int:SC,IntBitsToFloat:_C,Inverse:NE,InverseSqrt:QC,IsInf:sC,IsNan:iC,Length:sE,LessThan:nC,LessThanEqual:cC,Log:PB,Log2:_B,Mat2:XC,Mat3:jC,Mat4:zC,Max:gC,Min:IC,Mix:CC,Mod:bB,Modf:xB,Mul:HB,Neg:KB,Normalize:DE,Not:DC,NotEqual:yC,NumPackedSplats:ig,Or:aC,Outer:GE,OutputPackedSplat:hg,OutputRgba8:LI,PackHalf2x16:BE,PackSnorm2x16:AE,PackUnorm2x16:IE,PcgHash:JA,PcgMix:lQ,PcgNext:RA,Pow:jB,ProjectH:nE,Radians:zE,ReadPackedSplat:og,ReadPackedSplatRange:ag,ReflectVec:rE,RefractVec:hE,Round:vB,Select:MC,Sign:qB,SimpleCast:P,Sin:PE,Sinh:Bt,Smoothstep:tC,Split:kE,SplitGsplat:eg,Sqr:$B,Sqrt:AC,Step:EC,Sub:pB,Swizzle:RE,TPackedSplats:ZQ,Tan:$E,Tanh:Et,TexelFetch:vE,Texture:TE,TextureSize:VE,TransformGsplat:wg,TransformPosition:ZE,TransformQuaternion:WE,TransformRay:qE,Transpose:lE,TrinaryOp:oQ,Trunc:TB,UVec2:ZC,UVec3:qC,UVec4:WC,Uint:LC,UintBitsToFloat:$C,UintToRgba8:EE,UnaryOp:N,UnpackHalf2x16:CE,UnpackSnorm2x16:QE,UnpackUnorm2x16:gE,Vec2:VC,Vec3:TC,Vec4:vC,Xor:eC,abs:wo,acos:ee,acosh:ye,add:wA,all:jo,and:mo,any:Xo,arrayIndex:Qe,arrayLength:Ie,asin:ae,asinh:he,atan:De,atan2:ne,atanh:Ge,bool:$o,bvec2:Ia,bvec3:ga,bvec4:Ba,ceil:yo,clamp:So,combine:mA,combineGsplat:rQ,comment:Ae,compMult:Ua,compXor:Oo,cos:se,cosh:we,cross:Fa,defineGsplat:hA,defineGsplatNormal:ng,definePackedSplats:eI,degrees:ie,determinant:pa,distance:Na,div:$Q,dot:ka,dyno:KQ,dynoBlock:SA,dynoBool:ei,dynoBvec2:ci,dynoBvec3:yi,dynoBvec4:Mi,dynoConst:q,dynoDeclare:UI,dynoFloat:pA,dynoFor:$a,dynoIf:Pa,dynoInt:ni,dynoIsampler2D:xi,dynoIsampler2DArray:qi,dynoIsampler3D:Ti,dynoIsamplerCube:ji,dynoIvec2:ri,dynoIvec3:li,dynoIvec4:ki,dynoLiteral:II,dynoMat2:Ri,dynoMat2x2:Ji,dynoMat2x3:di,dynoMat2x4:Yi,dynoMat3:ui,dynoMat3x2:Ui,dynoMat3x3:Si,dynoMat3x4:Li,dynoMat4:pi,dynoMat4x2:Hi,dynoMat4x3:fi,dynoMat4x4:mi,dynoSampler2D:Ki,dynoSampler2DArray:Wi,dynoSampler2DArrayShadow:Pi,dynoSampler2DShadow:Oi,dynoSampler3D:vi,dynoSamplerCube:zi,dynoSamplerCubeShadow:_i,dynoSwitch:_a,dynoUint:Di,dynoUsampler2D:bi,dynoUsampler2DArray:Zi,dynoUsampler3D:Vi,dynoUsamplerCube:Xi,dynoUvec2:wi,dynoUvec3:Gi,dynoUvec4:Ni,dynoVec2:hi,dynoVec3:vA,dynoVec4:Fi,equal:To,exp:No,exp2:ko,extendVec:iE,faceforward:Ra,float:FC,floatBitsToInt:dC,floatBitsToUint:na,floor:ho,fract:AI,greaterThan:Wo,greaterThanEqual:Vo,gsplatNormal:si,hash:JE,hash2:dE,hash3:YE,hash4:uE,hashFloat:va,hashVec2:Xa,hashVec3:UE,hashVec4:FI,imod:kI,int:Aa,intBitsToFloat:ca,inverse:Ha,inversesqrt:uo,isAllFloatType:_A,isBoolType:iQ,isFloatType:bQ,isInf:fo,isIntType:tA,isMat2:QQ,isMat3:IQ,isMat4:gQ,isMatFloatType:Ag,isNan:Ho,isScalarType:sQ,isUintType:iA,isVector2Type:yQ,isVector3Type:GQ,isVector4Type:xQ,isVectorType:gi,ivec2:Ca,ivec3:Ea,ivec4:ta,length:Ma,lessThan:Zo,lessThanEqual:qo,literalNegOne:ti,literalOne:Ei,literalZero:NQ,log:Fo,log2:Ro,mat2:aa,mat3:ea,mat4:Da,max:UB,min:Uo,mix:SB,mod:uB,modf:no,mul:CA,neg:co,normalize:tE,not:Ko,notEqual:vo,numPackedSplats:ii,numberAsFloat:u,numberAsInt:z,numberAsUint:O,or:bo,outer:Sa,outputPackedSplat:rg,outputRgba8:oi,packHalf2x16:YC,packSnorm2x16:ra,packUnorm2x16:ya,pcgHash:Ta,pcgMix:Wa,pcgNext:Va,pow:Mo,projectH:Ya,radians:te,readPackedSplat:UQ,readPackedSplatRange:tg,reflectVec:Ja,refractVec:da,remapIndex:qa,round:lo,sameSizeIvec:Ci,sameSizeUvec:gg,sameSizeVec:Bi,select:zo,sign:ro,sin:RI,sinh:ce,smoothstep:po,split:YQ,splitGsplat:FQ,sqr:Jo,sqrt:Yo,step:Lo,sub:LQ,swizzle:ua,tan:oe,tanh:re,texelFetch:Ce,texture:Be,textureSize:ge,transformGsplat:SI,transformPos:ja,transformQuat:Oa,transformRay:za,transpose:La,trunc:Go,typeLiteral:Bg,uint:Qa,uintBitsToFloat:wa,uintToRgba8:uC,uniform:ai,unindent:gA,unindentLines:dA,unpackHalf2x16:la,unpackSnorm2x16:ha,unpackUnorm2x16:Ga,uvec2:ia,uvec3:sa,uvec4:oa,valType:p,vec2:RC,vec3:tQ,vec4:JC,vectorDim:Ig,vectorElementType:Qg,xor:xo},Symbol.toStringTag,{value:"Module"}));var Me=`precision highp float; +precision highp int; +precision highp sampler2D; +precision highp usampler2D; +precision highp isampler2D; +precision highp sampler2DArray; +precision highp usampler2DArray; +precision highp isampler2DArray; +precision highp sampler3D; +precision highp usampler3D; +precision highp isampler3D; + +#include + +uniform uint targetLayer; +uniform int targetBase; +uniform int targetCount; + +out vec4 target; + +{{ GLOBALS }} + +void computeReadback(int index) { + {{ STATEMENTS }} +} + +void main() { + int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x); + int index = targetIndex - targetBase; + + if ((index >= 0) && (index < targetCount)) { + computeReadback(index); + } else { + target = vec4(0.0, 0.0, 0.0, 0.0); + } +}`;const QA=class QA{constructor({renderer:A}={}){this.renderer=A,this.capacity=0,this.count=0}dispose(){this.target&&(this.target.dispose(),this.target=void 0)}ensureBuffer(A,I){const B=Math.ceil(Math.max(1,A)/Z)*Z*4;if(I.byteLength>=B)return I;const C=new ArrayBuffer(B);if(I instanceof ArrayBuffer)return C;const E=I.constructor;return new E(C)}ensureCapacity(A){const{width:I,height:g,depth:B,maxSplats:C}=rA(A);(!this.target||C>this.capacity)&&(this.dispose(),this.capacity=C,this.target=new e.WebGLArrayRenderTarget(I,g,B,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:e.NearestFilter,minFilter:e.NearestFilter}),this.target.texture.format=e.RGBAFormat,this.target.texture.type=e.UnsignedByteType,this.target.texture.internalFormat="RGBA8")}prepareProgramMaterial(A){let I=QA.readbackProgram.get(A);if(!I){const B=SA({index:"int"},{rgba8:"vec4"},({index:C})=>(A.inputs.index=C,{rgba8:new LI({rgba8:A.outputs.rgba8})}));QA.programTemplate||(QA.programTemplate=new fI(Me)),I=new HI({graph:B,inputs:{index:"index"},outputs:{rgba8:"target"},template:QA.programTemplate}),Object.assign(I.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),QA.readbackProgram.set(A,I)}const g=I.prepareMaterial();return QA.mesh.material=g,{program:I,material:g}}saveRenderState(A){return{xrPresenting:A.xr.isPresenting,autoClear:A.autoClear,scissorTest:A.getScissorTest()}}resetRenderState(A,I){A.setRenderTarget(null),A.xr.isPresenting=I.xrPresenting,A.autoClear=I.autoClear,A.setScissorTest(I.scissorTest)}process({count:A,material:I}){const g=this.renderer;if(!g)throw new Error("No renderer");if(!this.target)throw new Error("No target");const B=Z*BQ;I.uniforms.targetBase.value=0,I.uniforms.targetCount.value=A;let C=0;for(;CA)}render({reader:A,count:I,renderer:g}){if(this.renderer=g||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(I);const{program:B,material:C}=this.prepareProgramMaterial(A);B.update();const E=this.saveRenderState(this.renderer);this.process({count:I,material:C}),this.resetRenderState(this.renderer,E)}async readback({readback:A}){if(!this.renderer)throw new Error("No renderer");const I=this.saveRenderState(this.renderer),g=this.read({readback:A});return this.resetRenderState(this.renderer,I),g}async renderReadback({reader:A,count:I,renderer:g,readback:B}){if(this.renderer=g||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(I);const{program:C,material:E}=this.prepareProgramMaterial(A);C.update();const t=this.saveRenderState(this.renderer);this.process({count:I,material:E});const s=this.read({readback:B});return this.resetRenderState(this.renderer,t),s}getTexture(){var A;return(A=this.target)==null?void 0:A.texture}};QA.programTemplate=null,QA.readbackProgram=new Map,QA.geometry=new e.PlaneGeometry(2,2),QA.mesh=new e.Mesh(QA.geometry,new e.RawShaderMaterial({visible:!1})),QA.scene=new e.Scene().add(QA.mesh),QA.camera=new e.Camera;let pQ=QA;const IA=class IA{constructor(A={}){this.capacity=0,this.count=0,this.array=null,this.readback=null,this.source=null,this.needsUpdate=!0,this.dyno=new F({key:"rgbaArray",type:ot,globals:()=>[at],value:{texture:IA.getEmpty(),count:0},update:I=>{var g;return I.texture=((g=this.readback)==null?void 0:g.getTexture())??this.source??IA.getEmpty(),I.count=this.count,I}}),A.array?(this.array=A.array,this.capacity=Math.floor(this.array.length/4),this.capacity=Math.floor(this.capacity/Z)*Z,this.count=Math.min(this.capacity,A.count??Number.POSITIVE_INFINITY)):(this.capacity=A.capacity??0,this.count=0)}dispose(){this.readback&&(this.readback.dispose(),this.readback=null),this.source&&(this.source.dispose(),this.source=null)}ensureCapacity(A){var I;if(!this.array||A>(((I=this.array)==null?void 0:I.length)??0)/4){this.capacity=rA(A).maxSplats;const g=new Uint8Array(this.capacity*4);this.array&&g.set(this.array),this.array=g}return this.array}getTexture(){var I;let A=(I=this.readback)==null?void 0:I.getTexture();return(this.source||this.array)&&(A=this.maybeUpdateSource()),A??IA.getEmpty()}maybeUpdateSource(){if(!this.array)throw new Error("No array");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:I,depth:g}=this.source.image;this.capacity!==A*I*g&&(this.source.dispose(),this.source=null)}if(this.source)this.array.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.array.buffer));else{const{width:A,height:I,depth:g}=rA(this.capacity);this.source=new e.DataArrayTexture(this.array,A,I,g),this.source.format=e.RGBAFormat,this.source.type=e.UnsignedByteType,this.source.internalFormat="RGBA8",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}render({reader:A,count:I,renderer:g}){this.readback||(this.readback=new pQ({renderer:g})),this.readback.render({reader:A,count:I,renderer:g}),this.capacity=this.readback.capacity,this.count=this.readback.count}fromPackedSplats({packedSplats:A,base:I,count:g,renderer:B}){const{dynoSplats:C,dynoBase:E,dynoCount:t,reader:s}=IA.makeDynos();return C.packedSplats=A,E.value=I,t.value=g,this.render({reader:s,count:g,renderer:B}),this}async read(){if(!this.readback)throw new Error("No readback");return(!this.array||this.array.length{if(!C)throw new Error("index is undefined");C=wA(C,I);const E=tg(A,C,I,g);return{rgba8:FQ(E).outputs.rgba}});IA.dynos={dynoSplats:A,dynoBase:I,dynoCount:g,reader:B}}return IA.dynos}};IA.emptySource=null,IA.dynos=null;let JI=IA;const ot={type:"RgbaArray"},at=gA(` + struct RgbaArray { + sampler2DArray texture; + int count; + }; +`);function Ne(Q,A){return new f({inTypes:{rgba:ot,index:"int"},outTypes:{rgba:"vec4"},inputs:{rgba:Q,index:A},globals:()=>[at],statements:({inputs:g,outputs:B})=>dA(` + if ((index >= 0) && (index < ${g.rgba}.count)) { + ${B.rgba} = texelFetch(${g.rgba}.texture, splatTexCoord(index), 0); + } else { + ${B.rgba} = vec4(0.0, 0.0, 0.0, 0.0); + } + `)}).outputs.rgba}var et=(Q=>(Q.ALL="all",Q.PLANE="plane",Q.SPHERE="sphere",Q.BOX="box",Q.ELLIPSOID="ellipsoid",Q.CYLINDER="cylinder",Q.CAPSULE="capsule",Q.INFINITE_CONE="infinite_cone",Q))(et||{});function ke(Q){switch(Q){case"all":return 0;case"plane":return 1;case"sphere":return 2;case"box":return 3;case"ellipsoid":return 4;case"cylinder":return 5;case"capsule":return 6;case"infinite_cone":return 7;default:throw new Error(`Unknown SDF type: ${Q}`)}}var Dt=(Q=>(Q.MULTIPLY="multiply",Q.SET_RGB="set_rgb",Q.ADD_RGBA="add_rgba",Q))(Dt||{});function Fe(Q){switch(Q){case"multiply":return 0;case"set_rgb":return 1;case"add_rgba":return 2;default:throw new Error(`Unknown blend mode: ${Q}`)}}class nt extends e.Object3D{constructor(A={}){super();const{type:I,invert:g,opacity:B,color:C,displace:E,radius:t}=A;this.type=I??"sphere",this.invert=g??!1,this.opacity=B??1,this.color=C??new e.Color(1,1,1),this.displace=E??new e.Vector3(0,0,0),this.radius=t??0}}const aI=class aI extends e.Object3D{constructor(A={}){const{name:I,rgbaBlendMode:g="multiply",sdfSmooth:B=0,softEdge:C=0,invert:E=!1,sdfs:t=null}=A;super(),this.rgbaBlendMode=g,this.sdfSmooth=B,this.softEdge=C,this.invert=E,this.sdfs=t,this.ordering=aI.nextOrdering++,this.name=I??`Edit ${this.ordering}`}addSdf(A){this.sdfs==null&&(this.sdfs=[]),this.sdfs.push(A)}removeSdf(A){this.sdfs!=null&&(this.sdfs=this.sdfs.filter(I=>I!==A))}};aI.nextOrdering=1;let HQ=aI;class ct{constructor({maxSdfs:A,maxEdits:I}){this.maxSdfs=Math.max(16,A??0),this.numSdfs=0,this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs),this.dynoSdfArray=new F({key:"sdfArray",type:wt,globals:()=>[rt],value:{numSdfs:0,sdfTexture:this.sdfTexture},update:g=>(g.numSdfs=this.numSdfs,g.sdfTexture=this.sdfTexture,g)}),this.maxEdits=Math.max(16,I??0),this.numEdits=0,this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoNumEdits=new SQ({value:0}),this.dynoEdits=this.newEdits(this.editData,this.maxEdits)}newSdfTexture(A,I){const g=new e.DataTexture(A,8,I,e.RGBAIntegerFormat,e.UnsignedIntType);return g.internalFormat="RGBA32UI",g.needsUpdate=!0,g}newEdits(A,I){return new F({key:"edits",type:"uvec4",count:I,globals:()=>[ht],value:A})}ensureCapacity({maxSdfs:A,maxEdits:I}){let g=!1;return A>this.sdfTexture.image.height&&(this.sdfTexture.dispose(),this.maxSdfs=Math.max(this.maxSdfs*2,A),this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs)),I>(this.dynoEdits.count??0)&&(this.maxEdits=Math.max(this.maxEdits*2,I),this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoEdits=this.newEdits(this.editData,this.maxEdits),g=!0),g}updateEditData(A,I){const g=this.editData[A]!==I;return this.editData[A]=I,g}updateEditFloatData(A,I){aQ[0]=I;const g=this.editFloatData[A]!==aQ[0];return g&&(this.editFloatData[A]=aQ[0]),g}encodeEdit(A,{sdfFirst:I,sdfCount:g,invert:B,rgbaBlendMode:C,softEdge:E,sdfSmooth:t}){const s=A*4;let o=!1;return o=this.updateEditData(s+0,C|(B?256:0))||o,o=this.updateEditData(s+1,I|g<<16)||o,o=this.updateEditFloatData(s+2,E)||o,o=this.updateEditFloatData(s+3,t)||o,o}updateSdfData(A,I){const g=this.sdfData[A]!==I;return this.sdfData[A]=I,g}updateSdfFloatData(A,I){aQ[0]=I;const g=this.sdfFloatData[A]!==aQ[0];return g&&(this.sdfFloatData[A]=aQ[0]),g}encodeSdf(A,{sdfType:I,invert:g,center:B,quaternion:C,scale:E,sizes:t},s){const o=A*32,a=I|(g?256:0);let i=!1;i=this.updateSdfFloatData(o+0,(B==null?void 0:B.x)??0)||i,i=this.updateSdfFloatData(o+1,(B==null?void 0:B.y)??0)||i,i=this.updateSdfFloatData(o+2,(B==null?void 0:B.z)??0)||i,i=this.updateSdfData(o+3,a)||i,i=this.updateSdfFloatData(o+4,(C==null?void 0:C.x)??0)||i,i=this.updateSdfFloatData(o+5,(C==null?void 0:C.y)??0)||i,i=this.updateSdfFloatData(o+6,(C==null?void 0:C.z)??0)||i,i=this.updateSdfFloatData(o+7,(C==null?void 0:C.w)??0)||i,i=this.updateSdfFloatData(o+8,(E==null?void 0:E.x)??0)||i,i=this.updateSdfFloatData(o+9,(E==null?void 0:E.y)??0)||i,i=this.updateSdfFloatData(o+10,(E==null?void 0:E.z)??0)||i,i=this.updateSdfData(o+11,0)||i,i=this.updateSdfFloatData(o+12,(t==null?void 0:t.x)??0)||i,i=this.updateSdfFloatData(o+13,(t==null?void 0:t.y)??0)||i,i=this.updateSdfFloatData(o+14,(t==null?void 0:t.z)??0)||i,i=this.updateSdfFloatData(o+15,(t==null?void 0:t.w)??0)||i;const D=Math.min(4,s.length);for(let n=0;ni+D.length,0),g=this.ensureCapacity({maxEdits:A.length,maxSdfs:I}),B=[new e.Vector4,new e.Vector4],C=new e.Vector3,E=new e.Quaternion,t=new e.Vector3,s=new e.Vector4;let o=0,a=g;A.length!==this.dynoNumEdits.value&&(this.dynoNumEdits.value=A.length,this.numEdits=A.length,a=!0);for(const[i,{edit:D,sdfs:n}]of A.entries()){a=this.encodeEdit(i,{sdfFirst:o,sdfCount:n.length,invert:D.invert,rgbaBlendMode:Fe(D.rgbaBlendMode),softEdge:D.softEdge,sdfSmooth:D.sdfSmooth})||a;let w=!1;for(const c of n)s.set(c.scale.x,c.scale.y,c.scale.z,c.radius),c.scale.setScalar(1),c.updateMatrixWorld(),c.matrixWorld.clone().invert().decompose(C,E,t),c.scale.set(s.x,s.y,s.z),c.updateMatrixWorld(),B[0].set(c.color.r,c.color.g,c.color.b,c.opacity),B[1].set(c.displace.x,c.displace.y,c.displace.z,1),w=this.encodeSdf(o,{sdfType:ke(c.type),invert:c.invert,center:C,quaternion:E,scale:t,sizes:s},B)||w,o+=1;this.numSdfs=o,w&&(this.sdfTexture.needsUpdate=!0),a||(a=w)}return{updated:a,dynoUpdated:g}}modify(A){return Re(A,this.dynoSdfArray,this.dynoNumEdits,this.dynoEdits)}}const wt={type:"SdfArray"},rt=gA(` + struct SdfArray { + int numSdfs; + usampler2D sdfTexture; + }; + + void unpackSdfArray( + usampler2D sdfTexture, int sdfIndex, out uint flags, + out vec3 center, out vec4 quaternion, out vec3 scale, out vec4 sizes, + int numValues, out vec4 values[4] + ) { + uvec4 temp = texelFetch(sdfTexture, ivec2(0, sdfIndex), 0); + flags = temp.w; + center = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z)); + + temp = texelFetch(sdfTexture, ivec2(1, sdfIndex), 0); + quaternion = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + + temp = texelFetch(sdfTexture, ivec2(2, sdfIndex), 0); + scale = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z)); + + temp = texelFetch(sdfTexture, ivec2(3, sdfIndex), 0); + sizes = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + + for (int i = 0; i < numValues; ++i) { + temp = texelFetch(sdfTexture, ivec2(4 + i, sdfIndex), 0); + values[i] = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + } + } + + const uint SDF_FLAG_TYPE = 0xFFu; + const uint SDF_FLAG_INVERT = 1u << 8u; + + const uint SDF_TYPE_ALL = 0u; + const uint SDF_TYPE_PLANE = 1u; + const uint SDF_TYPE_SPHERE = 2u; + const uint SDF_TYPE_BOX = 3u; + const uint SDF_TYPE_ELLIPSOID = 4u; + const uint SDF_TYPE_CYLINDER = 5u; + const uint SDF_TYPE_CAPSULE = 6u; + const uint SDF_TYPE_INFINITE_CONE = 7u; + + float evaluateSdfArray( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos, + float smoothK, int numValues, out vec4 outValues[4] + ) { + float distanceAccum = (smoothK == 0.0) ? 1.0 / 0.0 : 0.0; + float maxExp = -1.0 / 0.0; + for (int i = 0; i < numValues; ++i) { + outValues[i] = vec4(0.0); + } + + uint flags; + vec3 center, scale; + vec4 quaternion, sizes; + vec4 values[4]; + + int sdfLast = min(sdfFirst + sdfCount, numSdfs); + for (int index = sdfFirst; index < sdfLast; ++index) { + unpackSdfArray(sdfTexture, index, flags, center, quaternion, scale, sizes, numValues, values); + uint sdfType = flags & SDF_FLAG_TYPE; + vec3 sdfPos = quatVec(quaternion, pos * scale) + center; + + float distance; + switch (sdfType) { + case SDF_TYPE_ALL: + distance = -1.0 / 0.0; + break; + case SDF_TYPE_PLANE: { + distance = sdfPos.z; + break; + } + case SDF_TYPE_SPHERE: { + distance = length(sdfPos) - sizes.w; + break; + } + case SDF_TYPE_BOX: { + vec3 q = abs(sdfPos) - sizes.xyz + sizes.w; + distance = length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - sizes.w; + break; + } + case SDF_TYPE_ELLIPSOID: { + vec3 sizes = sizes.xyz; + float k0 = length(sdfPos / sizes); + float k1 = length(sdfPos / dot(sizes, sizes)); + distance = k0 * (k0 - 1.0) / k1; + break; + } + case SDF_TYPE_CYLINDER: { + vec2 d = abs(vec2(length(sdfPos.xz), sdfPos.y)) - sizes.wy; + distance = min(max(d.x, d.y), 0.0) + length(max(d, 0.0)); + break; + } + case SDF_TYPE_CAPSULE: { + sdfPos.y -= clamp(sdfPos.y, -0.5 * sizes.y, 0.5 * sizes.y); + distance = length(sdfPos) - sizes.w; + break; + } + case SDF_TYPE_INFINITE_CONE: { + float angle = 0.25 * PI * sizes.w; + vec2 c = vec2(sin(angle), cos(angle)); + vec2 q = vec2(length(sdfPos.xy), -sdfPos.z); + float d = length(q - c * max(dot(q, c), 0.0)); + distance = d * (((q.x * c.y - q.y * c.x) < 0.0) ? -1.0 : 1.0); + break; + } + } + + if ((flags & SDF_FLAG_INVERT) != 0u) { + distance = -distance; + } + + if (smoothK == 0.0) { + if (distance < distanceAccum) { + distanceAccum = distance; + for (int i = 0; i < numValues; ++i) { + outValues[i] = values[i]; + } + } + } else { + float scaledDistance = -distance / smoothK; + if (scaledDistance > maxExp) { + float scale = exp(maxExp - scaledDistance); + distanceAccum *= scale; + for (int i = 0; i < numValues; ++i) { + outValues[i] *= scale; + } + maxExp = scaledDistance; + } + + float weight = exp(scaledDistance - maxExp); + distanceAccum += weight; + for (int i = 0; i < numValues; ++i) { + outValues[i] += weight * values[i]; + } + } + } + + if (smoothK == 0.0) { + return distanceAccum; + } else { + // Very distant SDFs may result in 0 accumulation + if (distanceAccum == 0.0) { + return 1.0 / 0.0; + } + for (int i = 0; i < numValues; ++i) { + outValues[i] /= distanceAccum; + } + return (-log(distanceAccum) - maxExp) * smoothK; + } + } + + float modulateSdfArray( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos, + float smoothK, int numValues, out vec4 values[4], + float softEdge, bool invert + ) { + float distance = evaluateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, numValues, values); + if (invert) { + distance = -distance; + } + + return (softEdge == 0.0) ? ((distance < 0.0) ? 1.0 : 0.0) + : clamp(-distance / softEdge + 0.5, 0.0, 1.0); + } +`),ht=gA(` + const uint EDIT_FLAG_BLEND = 0xFFu; + const uint EDIT_BLEND_MULTIPLY = 0u; + const uint EDIT_BLEND_SET_RGB = 1u; + const uint EDIT_BLEND_ADD_RGBA = 2u; + const uint EDIT_FLAG_INVERT = 0x100u; + + void decodeEdit( + uvec4 packedEdit, out int sdfFirst, out int sdfCount, + out bool invert, out uint rgbaBlendMode, out float softEdge, out float sdfSmooth + ) { + rgbaBlendMode = packedEdit.x & EDIT_FLAG_BLEND; + invert = (packedEdit.x & EDIT_FLAG_INVERT) != 0u; + + sdfFirst = int(packedEdit.y & 0xFFFFu); + sdfCount = int(packedEdit.y >> 16u); + + softEdge = uintBitsToFloat(packedEdit.z); + sdfSmooth = uintBitsToFloat(packedEdit.w); + } + + void applyRgbaDisplaceEdit( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, inout vec3 pos, + float smoothK, float softEdge, bool invert, uint rgbaBlendMode, inout vec4 rgba + ) { + vec4 values[4]; + float modulate = modulateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, 2, values, softEdge, invert); + // On Android, moving values[0] is necessary to work around a compiler bug. + vec4 sdfRgba = values[0]; + vec4 sdfDisplaceScale = values[1]; + + vec4 target; + switch (rgbaBlendMode) { + case EDIT_BLEND_MULTIPLY: + target = rgba * sdfRgba; + break; + case EDIT_BLEND_SET_RGB: + target = vec4(sdfRgba.rgb, rgba.a * sdfRgba.a); + break; + case EDIT_BLEND_ADD_RGBA: + target = rgba + sdfRgba; + break; + default: + // Debug output if blend mode not set + target = vec4(fract(pos), 1.0); + } + rgba = mix(rgba, target, modulate); + pos += sdfDisplaceScale.xyz * modulate; + } + + void applyPackedRgbaDisplaceEdit(uvec4 packedEdit, usampler2D sdfTexture, int numSdfs, inout vec3 pos, inout vec4 rgba) { + int sdfFirst, sdfCount; + bool invert; + uint rgbaBlendMode; + float softEdge, sdfSmooth; + decodeEdit(packedEdit, sdfFirst, sdfCount, invert, rgbaBlendMode, softEdge, sdfSmooth); + applyRgbaDisplaceEdit(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, sdfSmooth, softEdge, invert, rgbaBlendMode, rgba); + } +`);function Re(Q,A,I,g){return new f({inTypes:{gsplat:T,sdfArray:wt,numEdits:"int",rgbaDisplaceEdits:"uvec4"},outTypes:{gsplat:T},globals:()=>[rt,ht],inputs:{gsplat:Q,sdfArray:A,numEdits:I,rgbaDisplaceEdits:g},statements:({inputs:C,outputs:E})=>{const{sdfArray:t,numEdits:s,rgbaDisplaceEdits:o}=C,{gsplat:a}=E;return dA(` + ${a} = ${C.gsplat}; + if (isGsplatActive(${a}.flags)) { + for (int editIndex = 0; editIndex < ${s}; ++editIndex) { + applyPackedRgbaDisplaceEdit( + ${o}[editIndex], ${t}.sdfTexture, ${t}.numSdfs, + ${a}.center, ${a}.rgba + ); + } + } + `)}}).outputs.gsplat}const aQ=new Float32Array(1);class yt{constructor(A){this.modifier=A,this.cache=new Map}apply(A){let I=this.cache.get(A);return I||(I=SA({index:"int"},{gsplat:T},({index:g})=>{const{gsplat:B}=A.apply({index:g});return this.modifier.apply({gsplat:B})}),this.cache.set(A,I)),I}}class CQ{constructor(){this.scale=new EQ({value:Number.NEGATIVE_INFINITY}),this.rotate=new qQ({value:new e.Quaternion(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}),this.translate=new hQ({value:new e.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)})}modify(A){return SI(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}updateFromMatrix(A){const I=new e.Vector3,g=new e.Quaternion,B=new e.Vector3;A.decompose(B,g,I);const C=(I.x+I.y+I.z)/3;let E=!1;return C!==this.scale.value&&(this.scale.value=C,E=!0),B.equals(this.translate.value)||(this.translate.value.copy(B),E=!0),g.equals(this.rotate.value)||(this.rotate.value.copy(g),E=!0),E}update(A){return this.updateFromMatrix(A.matrixWorld)}}class TQ extends e.Object3D{constructor({numSplats:A,generator:I,construct:g,update:B}){if(super(),this.numSplats=A??0,this.generator=I,this.frameUpdate=B,this.version=0,g){const C=g(this);Object.assign(this,C)}}updateVersion(){this.version+=1}set needsUpdate(A){A&&this.updateVersion()}}const XA=class XA extends TQ{constructor(A={}){const I=new CQ,g=new CQ,B=new CQ,C=new CQ,E=new qQ({value:new e.Vector4(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY)}),t=new EQ({value:0}),s=new EQ({value:0}),o={transform:I,viewToWorld:g,worldToView:B,viewToObject:C,recolor:E,time:t,deltaTime:s};if(super({update:({time:a,deltaTime:i,viewToWorld:D,globalEdits:n})=>this.update({time:a,deltaTime:i,viewToWorld:D,globalEdits:n})}),this.isInitialized=!1,this.recolor=new e.Color(1,1,1),this.opacity=1,this.enableViewToObject=!1,this.enableViewToWorld=!1,this.enableWorldToView=!1,this.skinning=null,this.edits=null,this.rgbaDisplaceEdits=null,this.splatRgba=null,this.maxSh=3,this.packedSplats=A.packedSplats??new UA,this.numSplats=this.packedSplats.numSplats,this.editable=A.editable??!0,this.onFrame=A.onFrame,this.context=o,this.objectModifier=A.objectModifier,this.worldModifier=A.worldModifier,this.updateGenerator(),A.url||A.fileBytes||A.constructSplats||A.packedSplats&&!A.packedSplats.isInitialized)this.initialized=this.asyncInitialize(A).then(async()=>{if(this.updateGenerator(),this.isInitialized=!0,A.onLoad){const a=A.onLoad(this);a instanceof Promise&&await a}return this});else if(this.isInitialized=!0,this.initialized=Promise.resolve(this),A.onLoad){const a=A.onLoad(this);a instanceof Promise&&(this.initialized=a.then(()=>this))}}async asyncInitialize(A){const{url:I,fileBytes:g,fileType:B,maxSplats:C,constructSplats:E}=A;if(I||g||E){const t={url:I,fileBytes:g,fileType:B,maxSplats:C,construct:E};this.packedSplats.reinitialize(t),this.updateGenerator()}this.packedSplats&&(await this.packedSplats.initialized,this.numSplats=this.packedSplats.numSplats)}static async staticInitialize(){await $I(),XA.isStaticInitialized=!0}pushSplat(A,I,g,B,C){this.packedSplats.pushSplat(A,I,g,B,C)}forEachSplat(A){this.packedSplats.forEachSplat(A)}dispose(){this.packedSplats.dispose()}constructGenerator({transform:A,viewToObject:I,recolor:g}){const B=SA({index:"int"},{gsplat:T},({index:C})=>{if(!C)throw new Error("index is undefined");let E=UQ(this.packedSplats.dyno,C);if(this.maxSh>=1){const{sh1Texture:s,sh2Texture:o,sh3Texture:a}=this.ensureShTextures();if(s){const i=I.translate,{center:D}=FQ(E).outputs,n=tE(LQ(D,i));let w=ue(E,s,n);this.maxSh>=2&&o&&(w=wA(w,Ue(E,o,n))),this.maxSh>=3&&a&&(w=wA(w,Se(E,a,n)));let{rgba:c}=FQ(E).outputs;c=wA(c,iE(w,q("float",0))),E=rQ({gsplat:E,rgba:c})}}if(this.splatRgba){const s=Ne(this.splatRgba.dyno,C);E=rQ({gsplat:E,rgba:s})}this.skinning&&(E=this.skinning.modify(E)),this.objectModifier&&(E=this.objectModifier.apply({gsplat:E}).gsplat),E=A.modify(E);const t=CA(g,FQ(E).outputs.rgba);return E=rQ({gsplat:E,rgba:t}),this.rgbaDisplaceEdits&&(E=this.rgbaDisplaceEdits.modify(E)),this.worldModifier&&(E=this.worldModifier.apply({gsplat:E}).gsplat),{gsplat:E}});this.generator=B}updateGenerator(){this.constructGenerator(this.context)}update({time:A,viewToWorld:I,deltaTime:g,globalEdits:B}){var r;this.numSplats=this.packedSplats.numSplats,this.context.time.value=A,this.context.deltaTime.value=g,XA.dynoTime.value=A;const{transform:C,viewToObject:E,recolor:t}=this.context;let s=C.update(this);this.context.viewToWorld.updateFromMatrix(I)&&this.enableViewToWorld&&(s=!0);const o=I.clone().invert();this.context.worldToView.updateFromMatrix(o)&&this.enableWorldToView&&(s=!0);const D=new e.Matrix4().compose(C.translate.value,C.rotate.value,new e.Vector3().setScalar(C.scale.value)).invert().multiply(I);E.updateFromMatrix(D)&&(this.enableViewToObject||this.packedSplats.extra.sh1)&&(s=!0);const n=new e.Vector4(this.recolor.r,this.recolor.g,this.recolor.b,this.opacity);n.equals(t.value)||(t.value.copy(n),s=!0);const w=this.editable?(this.edits??[]).concat(B):[];this.editable&&!this.edits&&this.traverseVisible(y=>{y instanceof HQ&&w.push(y)}),w.sort((y,G)=>y.ordering-G.ordering);const c=w.map(y=>{if(y.sdfs!=null)return{edit:y,sdfs:y.sdfs};const G=[];return y.traverseVisible(h=>{h instanceof nt&&G.push(h)}),{edit:y,sdfs:G}});if(c.length>0&&!this.rgbaDisplaceEdits){const y=c.length,G=c.reduce((h,M)=>h+M.sdfs.length,0);this.rgbaDisplaceEdits=new ct({maxEdits:y,maxSdfs:G}),this.updateGenerator()}if(this.rgbaDisplaceEdits){const y=this.rgbaDisplaceEdits.update(c);s||(s=y.updated),y.dynoUpdated&&this.updateGenerator()}s&&this.updateVersion(),(r=this.onFrame)==null||r.call(this,{mesh:this,time:A,deltaTime:g})}raycast(A,I){if(!this.packedSplats.packedArray||!this.packedSplats.numSplats)return;const{near:g,far:B,ray:C}=A,E=this.matrixWorld.clone().invert(),t=new e.Matrix3().setFromMatrix4(E),s=C.origin.clone().applyMatrix4(E),o=C.direction.clone().applyMatrix3(t),a=new e.Vector3;E.decompose(new e.Vector3,new e.Quaternion,a),(a.x*a.y*a.z)**(1/3);const D=zt(s.x,s.y,s.z,o.x,o.y,o.z,g,B,this.packedSplats.numSplats,this.packedSplats.packedArray,!0);for(const n of D){const w=C.direction.clone().multiplyScalar(n).add(C.origin);I.push({distance:n,point:w,object:this})}}ensureShTextures(){if(!this.packedSplats.extra.sh1)return{};const A=this.packedSplats.extra.sh1Texture;if(!A){let B=this.packedSplats.extra.sh1;const{width:C,height:E,depth:t,maxSplats:s}=rA(B.length/2);if(B.length> 25, + int(packed.x << 18u) >> 25, + int(packed.x << 11u) >> 25 + )) / 63.0; + vec3 sh1_1 = vec3(ivec3( + int(packed.x << 4u) >> 25, + int((packed.x >> 3u) | (packed.y << 29u)) >> 25, + int(packed.y << 22u) >> 25 + )) / 63.0; + vec3 sh1_2 = vec3(ivec3( + int(packed.y << 15u) >> 25, + int(packed.y << 8u) >> 25, + int(packed.y << 1u) >> 25 + )) / 63.0; + + return sh1_0 * (-0.4886025 * viewDir.y) + + sh1_1 * (0.4886025 * viewDir.z) + + sh1_2 * (-0.4886025 * viewDir.x); + } +`),de=gA(` + vec3 evaluateSH2(Gsplat gsplat, usampler2DArray sh2, vec3 viewDir) { + // Extract sint8 values packed into 4 x uint32 + uvec4 packed = texelFetch(sh2, splatTexCoord(gsplat.index), 0); + vec3 sh2_0 = vec3(ivec3( + int(packed.x << 24u) >> 24, + int(packed.x << 16u) >> 24, + int(packed.x << 8u) >> 24 + )) / 127.0; + vec3 sh2_1 = vec3(ivec3( + int(packed.x) >> 24, + int(packed.y << 24u) >> 24, + int(packed.y << 16u) >> 24 + )) / 127.0; + vec3 sh2_2 = vec3(ivec3( + int(packed.y << 8u) >> 24, + int(packed.y) >> 24, + int(packed.z << 24u) >> 24 + )) / 127.0; + vec3 sh2_3 = vec3(ivec3( + int(packed.z << 16u) >> 24, + int(packed.z << 8u) >> 24, + int(packed.z) >> 24 + )) / 127.0; + vec3 sh2_4 = vec3(ivec3( + int(packed.w << 24u) >> 24, + int(packed.w << 16u) >> 24, + int(packed.w << 8u) >> 24 + )) / 127.0; + + return sh2_0 * (1.0925484 * viewDir.x * viewDir.y) + + sh2_1 * (1.0925484 * viewDir.y * viewDir.z) + + sh2_2 * (0.3153915 * (2.0 * viewDir.z * viewDir.z - viewDir.x * viewDir.x - viewDir.y * viewDir.y)) + + sh2_3 * (1.0925484 * viewDir.x * viewDir.z) + + sh2_4 * (0.5462742 * (viewDir.x * viewDir.x - viewDir.y * viewDir.y)); + } +`),Ye=gA(` + vec3 evaluateSH3(Gsplat gsplat, usampler2DArray sh3, vec3 viewDir) { + // Extract sint6 values packed into 4 x uint32 + uvec4 packed = texelFetch(sh3, splatTexCoord(gsplat.index), 0); + vec3 sh3_0 = vec3(ivec3( + int(packed.x << 26u) >> 26, + int(packed.x << 20u) >> 26, + int(packed.x << 14u) >> 26 + )) / 31.0; + vec3 sh3_1 = vec3(ivec3( + int(packed.x << 8u) >> 26, + int(packed.x << 2u) >> 26, + int((packed.x >> 4u) | (packed.y << 28u)) >> 26 + )) / 31.0; + vec3 sh3_2 = vec3(ivec3( + int(packed.y << 22u) >> 26, + int(packed.y << 16u) >> 26, + int(packed.y << 10u) >> 26 + )) / 31.0; + vec3 sh3_3 = vec3(ivec3( + int(packed.y << 4u) >> 26, + int((packed.y >> 2u) | (packed.z << 30u)) >> 26, + int(packed.z << 24u) >> 26 + )) / 31.0; + vec3 sh3_4 = vec3(ivec3( + int(packed.z << 18u) >> 26, + int(packed.z << 12u) >> 26, + int(packed.z << 6u) >> 26 + )) / 31.0; + vec3 sh3_5 = vec3(ivec3( + int(packed.z) >> 26, + int(packed.w << 26u) >> 26, + int(packed.w << 20u) >> 26 + )) / 31.0; + vec3 sh3_6 = vec3(ivec3( + int(packed.w << 14u) >> 26, + int(packed.w << 8u) >> 26, + int(packed.w << 2u) >> 26 + )) / 31.0; + + float xx = viewDir.x * viewDir.x; + float yy = viewDir.y * viewDir.y; + float zz = viewDir.z * viewDir.z; + float xy = viewDir.x * viewDir.y; + float yz = viewDir.y * viewDir.z; + float zx = viewDir.z * viewDir.x; + + return sh3_0 * (-0.5900436 * viewDir.y * (3.0 * xx - yy)) + + sh3_1 * (2.8906114 * xy * viewDir.z) + + + sh3_2 * (-0.4570458 * viewDir.y * (4.0 * zz - xx - yy)) + + sh3_3 * (0.3731763 * viewDir.z * (2.0 * zz - 3.0 * xx - 3.0 * yy)) + + sh3_4 * (-0.4570458 * viewDir.x * (4.0 * zz - xx - yy)) + + sh3_5 * (1.4453057 * viewDir.z * (xx - yy)) + + sh3_6 * (-0.5900436 * viewDir.x * (xx - 3.0 * yy)); + } +`);function ue(Q,A,I){return KQ({inTypes:{gsplat:T,sh1:"usampler2DArray",viewDir:"vec3"},outTypes:{rgb:"vec3"},inputs:{gsplat:Q,sh1:A,viewDir:I},globals:()=>[hA,Je],statements:({inputs:g,outputs:B})=>dA(` + if (isGsplatActive(${g.gsplat}.flags)) { + ${B.rgb} = evaluateSH1(${g.gsplat}, ${g.sh1}, ${g.viewDir}); + } else { + ${B.rgb} = vec3(0.0); + } + `)}).outputs.rgb}function Ue(Q,A,I){return KQ({inTypes:{gsplat:T,sh2:"usampler2DArray",viewDir:"vec3"},outTypes:{rgb:"vec3"},inputs:{gsplat:Q,sh2:A,viewDir:I},globals:()=>[hA,de],statements:({inputs:g,outputs:B})=>dA(` + if (isGsplatActive(${g.gsplat}.flags)) { + ${B.rgb} = evaluateSH2(${g.gsplat}, ${g.sh2}, ${g.viewDir}); + } else { + ${B.rgb} = vec3(0.0); + } + `)}).outputs.rgb}function Se(Q,A,I){return KQ({inTypes:{gsplat:T,sh3:"usampler2DArray",viewDir:"vec3"},outTypes:{rgb:"vec3"},inputs:{gsplat:Q,sh3:A,viewDir:I},globals:()=>[hA,Ye],statements:({inputs:g,outputs:B})=>dA(` + if (isGsplatActive(${g.gsplat}.flags)) { + ${B.rgb} = evaluateSH3(${g.gsplat}, ${g.sh3}, ${g.viewDir}); + } else { + ${B.rgb} = vec3(0.0); + } + `)}).outputs.rgb}const cQ=class cQ{constructor({fileBytes:A}){this.header="",this.littleEndian=!0,this.elements={},this.comments=[],this.data=null,this.numSplats=0,this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A}async parseHeader(){const I=new ReadableStream({start:E=>{E.enqueue(this.fileBytes.slice(0,65536)),E.close()}}).pipeThrough(new TextDecoderStream).getReader();this.header="";const g=`end_header +`;for(;;){const{value:E,done:t}=await I.read();if(t)throw new Error("Failed to read header");this.header+=E;const s=this.header.indexOf(g);if(s>=0){this.header=this.header.slice(0,s+g.length);break}}const B=new TextEncoder().encode(this.header).length;this.data=new DataView(this.fileBytes.buffer,B),this.elements={};let C=null;this.comments=[],this.header.trim().split(` +`).forEach((E,t)=>{const s=E.trim();if(t===0){if(s!=="ply")throw new Error("Invalid PLY header");return}if(s.length===0)return;const o=s.split(" ");switch(o[0]){case"format":if(o[1]==="binary_little_endian")this.littleEndian=!0;else if(o[1]==="binary_big_endian")this.littleEndian=!1;else throw new Error(`Unsupported PLY format: ${o[1]}`);if(o[2]!=="1.0")throw new Error(`Unsupported PLY version: ${o[2]}`);break;case"end_header":break;case"comment":this.comments.push(s.slice(8));break;case"element":{const a=o[1];C={name:a,count:Number.parseInt(o[2]),properties:{}},this.elements[a]=C;break}case"property":if(C==null)throw new Error("Property must be inside an element");o[1]==="list"?C.properties[o[4]]={isList:!0,type:o[3],countType:o[2]}:C.properties[o[2]]={isList:!1,type:o[1]};break}}),this.elements.vertex&&(this.numSplats=this.elements.vertex.count)}parseData(A){let I=0;const g=this.data;if(g==null)throw new Error("No data to parse");for(const B in this.elements){const C=this.elements[B],{count:E,properties:t}=C,s={},o=[];for(const[i,D]of Object.entries(t))D.isList?(s[i]=[],o.push(()=>{const n=s[i];n.length=jQ[D.countType](g,I,this.littleEndian),I+=eQ[D.countType];for(let w=0;w{s[i]=jQ[D.type](g,I,this.littleEndian),I+=eQ[D.type]}));const a=A(C)??(()=>{});for(let i=0;i[0,1,2].map((M,l)=>`f_rest_${h+l*y/3}`)),t=new Array(5).fill(null).flatMap((G,h)=>[0,1,2].map((M,l)=>`f_rest_${3+h+l*y/3}`)),s=new Array(7).fill(null).flatMap((G,h)=>[0,1,2].map((M,l)=>`f_rest_${8+h+l*y/3}`)),o=C>=1?new Float32Array(3*3):void 0,a=C>=2?new Float32Array(5*3):void 0,i=C>=3?new Float32Array(7*3):void 0}function n(y,G){if(!o)throw new Error("Missing sh1");for(const[h,M]of E.entries())o[h]=G[M]*8/255-4;if(a)for(const[h,M]of t.entries())a[h]=G[M]*8/255-4;if(i)for(const[h,M]of s.entries())i[h]=G[M]*8/255-4;I==null||I(y,o,a,i)}function w(y){const{min_x:G,min_y:h,min_z:M,max_x:l,max_y:k,max_z:R,min_scale_x:d,min_scale_y:Y,min_scale_z:m,max_scale_x:J,max_scale_y:x,max_scale_z:U,min_r:S,min_g:v,min_b:V,max_r:_,max_g:$,max_b:X}=y.properties;if(!G||!h||!M||!l||!k||!R||!d||!Y||!m||!J||!x||!U||!S||!v||!V||!_||!$||!X)throw new Error("Missing PLY chunk properties");return g=!0,(eA,AA)=>{const{min_x:sA,min_y:DA,min_z:YA,max_x:yA,max_y:nA,max_z:L,min_scale_x:GA,min_scale_y:BA,min_scale_z:lA,max_scale_x:MA,max_scale_y:LA,max_scale_z:NA,min_r:xA,min_g:kA,min_b:qA,max_r:WA,max_g:VA,max_b:cA}=AA;B.push({min_x:sA,min_y:DA,min_z:YA,max_x:yA,max_y:nA,max_z:L,min_scale_x:GA,min_scale_y:BA,min_scale_z:lA,max_scale_x:MA,max_scale_y:LA,max_scale_z:NA,min_r:xA,min_g:kA,min_b:qA,max_r:WA,max_g:VA,max_b:cA})}}function c(y){if(I&&y.name==="sh")return C=XI(y.properties),D(),n;if(y.name!=="vertex")return null;const{packed_position:G,packed_rotation:h,packed_scale:M,packed_color:l}=y.properties;if(!G||!h||!M||!l)throw new Error("Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color");const k=Math.sqrt(2);return(R,d)=>{const Y=B[R>>>8];if(Y==null)throw new Error("Missing PLY chunk");const{min_x:m,min_y:J,min_z:x,max_x:U,max_y:S,max_z:v,min_scale_x:V,min_scale_y:_,min_scale_z:$,max_scale_x:X,max_scale_y:eA,max_scale_z:AA,min_r:sA,min_g:DA,min_b:YA,max_r:yA,max_g:nA,max_b:L}=Y,{packed_position:GA,packed_rotation:BA,packed_scale:lA,packed_color:MA}=d,LA=(GA>>>21&2047)/2047*(U-m)+m,NA=(GA>>>11&1023)/1023*(S-J)+J,xA=(GA&2047)/2047*(v-x)+x,kA=((BA>>>20&1023)/1023-.5)*k,qA=((BA>>>10&1023)/1023-.5)*k,WA=((BA&1023)/1023-.5)*k,VA=Math.sqrt(Math.max(0,1-kA*kA-qA*qA-WA*WA)),cA=BA>>>30,$A=cA===0?kA:cA===1?VA:qA,pt=cA<=1?qA:cA===2?VA:WA,Ht=cA<=2?WA:VA,ft=cA===0?VA:kA,mt=Math.exp((lA>>>21&2047)/2047*(X-V)+V),bt=Math.exp((lA>>>11&1023)/1023*(eA-_)+_),xt=Math.exp((lA&2047)/2047*(AA-$)+$),Kt=(MA>>>24&255)/255*(yA-sA)+sA,Zt=(MA>>>16&255)/255*(nA-DA)+DA,qt=(MA>>>8&255)/255*(L-YA)+YA,Wt=(MA&255)/255;A(R,LA,NA,xA,mt,bt,xt,$A,pt,Ht,ft,Wt,Kt,Zt,qt)}}const r=y=>{if(y.name==="chunk"&&this.comments.some(nA=>nA.toLowerCase().includes("supersplat")))return w(y);if(g)return c(y);if(y.name!=="vertex")return null;const{x:G,y:h,z:M,scale_0:l,scale_1:k,scale_2:R,rot_0:d,rot_1:Y,rot_2:m,rot_3:J,opacity:x,f_dc_0:U,f_dc_1:S,f_dc_2:v,red:V,green:_,blue:$,alpha:X}=y.properties;if(!G||!h||!M)throw new Error("Missing PLY properties: x, y, z");const eA=l&&k&&R,AA=d&&Y&&m&&J,sA=X!=null?zQ[X.type]:1,DA=V!=null?zQ[V.type]:1,YA=_!=null?zQ[_.type]:1,yA=$!=null?zQ[$.type]:1;return C=XI(y.properties),D(),(nA,L)=>{const GA=eA?Math.exp(L.scale_0):cQ.defaultPointScale,BA=eA?Math.exp(L.scale_1):cQ.defaultPointScale,lA=eA?Math.exp(L.scale_2):cQ.defaultPointScale,MA=AA?L.rot_1:0,LA=AA?L.rot_2:0,NA=AA?L.rot_3:0,xA=AA?L.rot_0:1,kA=x!=null?1/(1+Math.exp(-L.opacity)):X!=null?L.alpha/sA:1,qA=U!=null?L.f_dc_0*XQ+.5:V!=null?L.red/DA:1,WA=S!=null?L.f_dc_1*XQ+.5:_!=null?L.green/YA:1,VA=v!=null?L.f_dc_2*XQ+.5:$!=null?L.blue/yA:1;if(A(nA,L.x,L.y,L.z,GA,BA,lA,MA,LA,NA,xA,kA,qA,WA,VA),I&&o){if(o)for(const[cA,$A]of E.entries())o[cA]=L[$A];if(a)for(const[cA,$A]of t.entries())a[cA]=L[$A];if(i)for(const[cA,$A]of s.entries())i[cA]=L[$A];I(nA,o,a,i)}}};this.parseData(r)}injectRgba(A){let I=0;const g=this.data;if(g==null)throw new Error("No parsed data");if(A.length!==this.numSplats*4)throw new Error("Invalid RGBA array length");for(const B in this.elements){const C=this.elements[B],{count:E,properties:t}=C,s=[];let o=0;const a=B==="vertex";if(a){for(const i of["opacity","f_dc_0","f_dc_1","f_dc_2"])if(!t[i]||t[i].type!=="float")throw new Error(`Can't injectRgba due to property: ${i}`)}for(const[i,D]of Object.entries(t))if(D.isList)s.push(()=>{const n=jQ[D.countType](g,I,this.littleEndian);I+=eQ[D.countType],I+=n*eQ[D.type]});else{if(a)if(i==="f_dc_0"||i==="f_dc_1"||i==="f_dc_2"){const n=Number.parseInt(i.slice(5));s.push(()=>{const w=(A[o+n]/255-.5)/XQ;vI[D.type](g,I,this.littleEndian,w)})}else i==="opacity"&&s.push(()=>{const n=Math.max(-100,Math.min(100,-Math.log(1/(A[o+3]/255)-1)));vI[D.type](g,I,this.littleEndian,n)});s.push(()=>{I+=eQ[D.type]})}for(let i=0;iQ.getInt8(A),uchar:(Q,A,I)=>Q.getUint8(A),short:(Q,A,I)=>Q.getInt16(A,I),ushort:(Q,A,I)=>Q.getUint16(A,I),int:(Q,A,I)=>Q.getInt32(A,I),uint:(Q,A,I)=>Q.getUint32(A,I),float:(Q,A,I)=>Q.getFloat32(A,I),double:(Q,A,I)=>Q.getFloat64(A,I)},vI={char:(Q,A,I,g)=>{Q.setInt8(A,g)},uchar:(Q,A,I,g)=>{Q.setUint8(A,g)},short:(Q,A,I,g)=>{Q.setInt16(A,g,I)},ushort:(Q,A,I,g)=>{Q.setUint16(A,g,I)},int:(Q,A,I,g)=>{Q.setInt32(A,g,I)},uint:(Q,A,I,g)=>{Q.setUint32(A,g,I)},float:(Q,A,I,g)=>{Q.setFloat32(A,g,I)},double:(Q,A,I,g)=>{Q.setFloat64(A,g,I)}},eQ={char:1,uchar:1,short:2,ushort:2,int:4,uint:4,float:4,double:8},zQ={char:127,uchar:255,short:32767,ushort:65535,int:2147483647,uint:4294967295,float:1,double:1},Le={0:0,9:1,24:2,45:3},pe={0:0,1:9,2:24,3:45};function XI(Q){let A=0;for(;Q[`f_rest_${A}`];)A+=1;const I=Le[A];if(I==null)throw new Error(`Unsupported number of SH coefficients: ${A}`);return I}const Gt='(function(){"use strict";let S;function OQ(g){const A=S.__externref_table_alloc();return S.__wbindgen_export_2.set(A,g),A}function vQ(g,A){try{return g.apply(this,A)}catch(Q){const I=OQ(Q);S.__wbindgen_exn_store(I)}}function XA(g){const A=typeof g;if(A=="number"||A=="boolean"||g==null)return`${g}`;if(A=="string")return`"${g}"`;if(A=="symbol"){const B=g.description;return B==null?"Symbol":`Symbol(${B})`}if(A=="function"){const B=g.name;return typeof B=="string"&&B.length>0?`Function(${B})`:"Function"}if(Array.isArray(g)){const B=g.length;let C="[";B>0&&(C+=XA(g[0]));for(let E=1;E1)I=Q[1];else return toString.call(g);if(I=="Object")try{return"Object("+JSON.stringify(g)+")"}catch{return"Object"}return g instanceof Error?`${g.name}: ${g.message}\n${g.stack}`:I}let jA=0,LA=null;function qA(){return(LA===null||LA.byteLength===0)&&(LA=new Uint8Array(S.memory.buffer)),LA}const xA=typeof TextEncoder<"u"?new TextEncoder("utf-8"):{encode:()=>{throw Error("TextEncoder not available")}},PQ=typeof xA.encodeInto=="function"?function(g,A){return xA.encodeInto(g,A)}:function(g,A){const Q=xA.encode(g);return A.set(Q),{read:g.length,written:Q.length}};function _Q(g,A,Q){if(Q===void 0){const i=xA.encode(g),D=A(i.length,1)>>>0;return qA().subarray(D,D+i.length).set(i),jA=i.length,D}let I=g.length,B=A(I,1)>>>0;const C=qA();let E=0;for(;E127)break;C[B+E]=i}if(E!==I){E!==0&&(g=g.slice(E)),B=Q(B,I,I=E+g.length*3,1)>>>0;const i=qA().subarray(B+E,B+I),D=PQ(g,i);E+=D.written,B=Q(B,I,E,1)>>>0}return jA=E,B}let NA=null;function kQ(){return(NA===null||NA.buffer.detached===!0||NA.buffer.detached===void 0&&NA.buffer!==S.memory.buffer)&&(NA=new DataView(S.memory.buffer)),NA}const JQ=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};typeof TextDecoder<"u"&&JQ.decode();function RQ(g,A){return g=g>>>0,JQ.decode(qA().subarray(g,g+A))}function $Q(g,A,Q){return S.decode_wlg(g,A,Q)}function AI(g,A,Q,I){return S.old_sort_splats(g,A,Q,I)>>>0}function QI(g,A,Q){return S.sort_splats(g,A,Q)>>>0}async function II(g,A){if(typeof Response=="function"&&g instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(g,A)}catch(I){if(g.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n",I);else throw I}const Q=await g.arrayBuffer();return await WebAssembly.instantiate(Q,A)}else{const Q=await WebAssembly.instantiate(g,A);return Q instanceof WebAssembly.Instance?{instance:Q,module:g}:Q}}function BI(){const g={};return g.wbg={},g.wbg.__wbg_buffer_09165b52af8c5237=function(A){return A.buffer},g.wbg.__wbg_buffer_609cc3eee51ed158=function(A){return A.buffer},g.wbg.__wbg_get_b9b93047fe3cf45b=function(A,Q){return A[Q>>>0]},g.wbg.__wbg_instanceof_Uint8Array_17156bcf118086a9=function(A){let Q;try{Q=A instanceof Uint8Array}catch{Q=!1}return Q},g.wbg.__wbg_length_3b4f022188ae8db6=function(A){return A.length},g.wbg.__wbg_length_6ca527665d89694d=function(A){return A.length},g.wbg.__wbg_length_8cfd2c6409af88ad=function(A){return A.length},g.wbg.__wbg_length_a446193dc22c12f8=function(A){return A.length},g.wbg.__wbg_length_e2d2a49132c1b256=function(A){return A.length},g.wbg.__wbg_new_405e22f390576ce2=function(){return new Object},g.wbg.__wbg_new_9fee97a409b32b68=function(A){return new Uint16Array(A)},g.wbg.__wbg_new_a12002a7f91c75be=function(A){return new Uint8Array(A)},g.wbg.__wbg_new_e3b321dcfef89fc7=function(A){return new Uint32Array(A)},g.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354=function(A,Q,I){return new Float32Array(A,Q>>>0,I>>>0)},g.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212=function(A,Q,I){return new Uint32Array(A,Q>>>0,I>>>0)},g.wbg.__wbg_newwithlength_5a5efe313cfd59f1=function(A){return new Float32Array(A>>>0)},g.wbg.__wbg_newwithlength_bd3de93688d68fbc=function(A){return new Uint32Array(A>>>0)},g.wbg.__wbg_set_10bad9bee0e9c58b=function(A,Q,I){A.set(Q,I>>>0)},g.wbg.__wbg_set_65595bdd868b3009=function(A,Q,I){A.set(Q,I>>>0)},g.wbg.__wbg_set_bb8cecf6a62b9f46=function(){return vQ(function(A,Q,I){return Reflect.set(A,Q,I)},arguments)},g.wbg.__wbg_set_d23661d19148b229=function(A,Q,I){A.set(Q,I>>>0)},g.wbg.__wbg_set_f4f1f0daa30696fc=function(A,Q,I){A.set(Q,I>>>0)},g.wbg.__wbg_subarray_3aaeec89bb2544f0=function(A,Q,I){return A.subarray(Q>>>0,I>>>0)},g.wbg.__wbg_subarray_769e1e0f81bb259b=function(A,Q,I){return A.subarray(Q>>>0,I>>>0)},g.wbg.__wbindgen_debug_string=function(A,Q){const I=XA(Q),B=_Q(I,S.__wbindgen_malloc,S.__wbindgen_realloc),C=jA;kQ().setInt32(A+4*1,C,!0),kQ().setInt32(A+4*0,B,!0)},g.wbg.__wbindgen_init_externref_table=function(){const A=S.__wbindgen_export_2,Q=A.grow(4);A.set(0,void 0),A.set(Q+0,void 0),A.set(Q+1,null),A.set(Q+2,!0),A.set(Q+3,!1)},g.wbg.__wbindgen_memory=function(){return S.memory},g.wbg.__wbindgen_number_new=function(A){return A},g.wbg.__wbindgen_string_new=function(A,Q){return RQ(A,Q)},g.wbg.__wbindgen_throw=function(A,Q){throw new Error(RQ(A,Q))},g}function gI(g,A){return S=g.exports,nQ.__wbindgen_wasm_module=A,NA=null,LA=null,S.__wbindgen_start(),S}async function nQ(g){if(S!==void 0)return S;typeof g<"u"&&(Object.getPrototypeOf(g)===Object.prototype?{module_or_path:g}=g:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),typeof g>"u"&&(g=new URL("data:application/wasm;base64,AGFzbQEAAAABtgItYAJ/fwF/YAJ/fwBgA39/fwF/YAF/AGABfwF/YAN/f38AYAV/f39/fwBgBH9/f38AYAFvAX9gAW8Bb2ADb39/AW9gBX9/f39/AX9gA29vfwBgAABgA39+fgBgA39+fgF/YAd/f39/f39/AX9gBn9/f39/fwBgAX0BfWAEf39/fwF/YAABb2ABfwFvYAZ/f39/f38Bf2AAAX9gC39/f39/f39/f39/AX9gAn9/AW9gAXwBb2ACb38Bb2ADb29vAX9gAn9vAGAHf39/f39/fwBgAn9/AX5gAn9+AX9gAn9+AGALfX19fX19fX1/b38Bb2ABfwF9YAV/f35/fwBgBH9+f38AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AYAR/f29vAX9gA39vbwF/YAJ9fQF9ArcIHgN3YmcVX193YmluZGdlbl9zdHJpbmdfbmV3ABkDd2JnFV9fd2JpbmRnZW5fbnVtYmVyX25ldwAaA3diZxpfX3diZ19nZXRfYjliOTMwNDdmZTNjZjQ1YgAbA3diZx1fX3diZ19sZW5ndGhfZTJkMmE0OTEzMmMxYjI1NgAIA3diZxpfX3diZ19uZXdfNDA1ZTIyZjM5MDU3NmNlMgAUA3diZx1fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OAAJA3diZxpfX3diZ19uZXdfYTEyMDAyYTdmOTFjNzViZQAJA3diZxpfX3diZ19zZXRfNjU1OTViZGQ4NjhiMzAwOQAMA3diZx1fX3diZ19sZW5ndGhfYTQ0NjE5M2RjMjJjMTJmOAAIA3diZxpfX3diZ19uZXdfOWZlZTk3YTQwOWIzMmI2OAAJA3diZxpfX3diZ19zZXRfZjRmMWYwZGFhMzA2OTZmYwAMA3diZx1fX3diZ19sZW5ndGhfOGNmZDJjNjQwOWFmODhhZAAIA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyAAoDd2JnGl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3AAkDd2JnGl9fd2JnX3NldF9kMjM2NjFkMTkxNDhiMjI5AAwDd2JnHV9fd2JnX2xlbmd0aF82Y2E1Mjc2NjVkODk2OTRkAAgDd2JnMV9fd2JnX25ld3dpdGhi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CwJAIAAoAhAiAkUNAEGousIAQQggAhDVBEUNAEEBDAILIAFBATsBJCABIAQ2AiAgAUEANgIcIAFBAToAGCABQd8ANgIUIAEgBDYCECABQQA2AgwgASAENgIIIAEgAzYCBCABQd8ANgIAIAFBKGogARBQAn8gASgCKEUEQAJAIAEtACUNACABQQE6ACUCQCABLQAkQQFGBEAgASgCICEFIAEoAhwhBAwBCyABKAIgIgUgASgCHCIERg0BCyABKAIEIARqIQMgBSAEawwCC0GwusIAEK4EAAsgASgCHCEEIAEgASgCMDYCHCADIARqIQMgASgCLCAEawshBAJAIAIEQCADIAQgAhDVBA0BCyABQcgAaiABQSBqKQIANwMAIAFBQGsgAUEYaikCADcDACABQThqIAFBEGopAgA3AwAgAUEwaiABQQhqKQIANwMAIAEgASkCADcDKAJAIAEtAE0NACACIQMDQCABKAIsIQUgAUHUAGogAUEoahBQAn8gASgCVEUEQCABLQBNDQMgAUEBOgBNAkAgAS0ATEEBRgRAIAEoAkghBSABKAJEIQQMAQsgASgCSCIFIAEoAkQiBEYNBAsgASgCLCAEaiEGIAUgBGsMAQsgASgCRCEEIAEgASgCXDYCRCAEIAVqIQYgASgCWCAEawshBAJAIANFBEBBACEDDAELQbm2wgBBASADENUEDQMgACgCECICRQRAQQAhAkEAIQMMAQsgAiEDIAYgBCACENUEDQMLIAEtAE1FDQALCyACRQ0BQcC6wgBBAiACENUERQ0BC0EBDAELAkAgACgCECICRQ0AQcK6wgBBAyACENUERQ0AQQEMAQsCQAJAAkAgACgCACIDRQRAQQAhAwwBC0EAIQIDQAJAIAAoAggiBCAAKAIETw0AIAMgBGotAABBxQBHDQAgACAEQQFqNgIIDAILAkAgAkUNACAAKAIQIgNFDQBB9bnCAEECIAMQ1QRFDQBBAQwFCyAAECcNAiACQQFrIQIgACgCACIDDQALQQAhAwsgACgCECIEBEBBAUH1s8IAQQEgBBDVBA0DGiAAKAIAIQMLIANFDQEgACgCCCICIAAoAgRPDQEgAiADai0AAEH1AEcNASAAIAJBAWo2AghBAAwCC0EBDAELAkAgACgCECICRQ0AQcW6wgBBBCACENUERQ0AQQEMAQsgABAnCyAB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AWogBiARGyADa2whAwwDCyABIApBjIHCABCtAgALQZyBwgBBKUHIgcIAEO0CAAtBoP/BAEEXQZyAwgAQ7QIACyAPIAZBAWo2AgAgAkEEaiAJOgAAIAIgAzYCACACQQhqIQIgBCAFQQFqIgVHDQALCyAAQYWAgIB4NgIADwsgBUEBaiEFIAMoAgAhCSADQQRqIQMgCUEATA0ACyAFQQFrIQxBACEDA0ACQCACIAZJBEAgA0EBaiEDIAsgAkEDdGogDDoABQNAIAIgDWogDnEiAiAETw0ACwwBCyACIAZB2IHCABCtAgALIAMgCUcNAAsMAAsAC9IHAQN/AkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAOCgAHBwECAwQHBwUHCwJAAkACQAJAAkACQCAALQAEDgcADAEMAgMEDAsgAC0ACEEDRw0LIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQQgASADIAIoAggQpwQMBAsgAC0ACEEDRw0KIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQMgASADIAIoAggQpwQMAwsgAC0ACEEDRw0JIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQIgASADIAIoAggQpwQMAgsgAC0ACEEDRw0IIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQEgASADIAIoAggQpwQMAQsgAC0ACEEDRw0HIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQAgASADIAIoAggQpwQLIABBDEEEEKcEDwsCQAJAIAAtAAQOAgcBAAsgACgCCCIBQfv///8HaiICQQ1NIAJBAkdxDQYgAUGEgICAeEoNBSABQYOAgIB4Rw0GDAULIAAoAggiAUGEgICAeEogAUGDgICAeEZyDQQMBQsgAC0ABEEDRw0EDAULAkACQEEDIAAoAgQiAUEHayICIAJBA08bQQJrDgIBAAULAkACQAJAIAEOBgAHAQcHAgcLIAAtAAhBA0cNBgwICyAAKAIIIgFB7f///wdqIgJBCk0gAkEDR3ENBSABRSABQfv///8H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wQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA4hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwICyACIAA2AgQgAkEBNgIMIAJB8KfBADYCCCACQgE3AhQgAiACQQRqrUKAgICAoDeENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAcLIAIgAEEEajYCBCACQQE2AgwgAkHwp8EANgIIIAJCATcCFCACIAJBBGqtQoCAgICgOIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMBgsgASgCHEHFusEAQTkgASgCICgCDBECAAwFCyACIABBBGo2AgQgAkECNgIMIAJBqLvBADYCCCACQgE3AhQgAiACQQRqrUKAgICA8DWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAQLIAIgAEEEajYCACACIABBCGo2AgQgAkEDNgIMIAJB6LvBADYCCCACQgI3AhQgAkKAgICA8DUiBCACrYQ3AyggAiAEIAJBBGqthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwDCyACIABBBGo2AgQgAkECNgIMIAJB8LzBADYCCCACQgE3AhQgAiACQQRqrUKAgICAsDiENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAILIAIgAEEEajYCACACIABBCGo2AgQgAkECNgIMIAJBsL3BADYCCCACQgI3AhQgAkKAgICAwDgiBCACQQRqrYQ3AyggAiAEIAKthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAjYCDCACQfS9wQA2AgggAkICNwIUIAJCgICAgPA1IgQgAkEEaq2ENwMoIAIgBCACrYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAuXBgEIfyMAQTBrIgEkAAJAAn8CQAJAAkAgACgCACIFBEAgACgCCCIEIAQgACgCBCIHIAQgB0sbayEIIAUhAwNAIAIgCGpFDQMgACACIARqQQFqNgIIIAJBAWohAiADIARqIANBAWohAy0AACIGQTBrQf8BcUEKSSAGQeEAa0H/AXFBBklyDQALIAZB3wBHDQIgAiAEakEBayEGAkAgBARA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IABBABAgDAELIAAQJwsgBEEQaiQAC5QDAQR/AkAgAkEQSQRAIAAhAwwBCwJAIABBACAAa0EDcSIFaiIEIABNDQAgACEDIAUEQCAFIQYDQCADIAE6AAAgA0EBaiEDIAZBAWsiBg0ACwsgBUEBa0EHSQ0AA0AgAyABOgAAIANBB2ogAToAACADQQZqIAE6AAAgA0EFaiABOgAAIANBBGogAToAACADQQNqIAE6AAAgA0ECaiABOgAAIANBAWogAToAACADQQhqIgMgBEcNAAsLIAQgAiAFayICQXxxaiIDIARLBEAgAUH/AXFBgYKECGwhBQNAIAQgBTYCACAEQQRqIgQgA0kNAAsLIAJBA3EhAgsCQCADIAIgA2oiBU8NACACQQdxIgQEQANAIAMgAToAACADQQFqIQMgBEEBayIEDQALCyACQQFrQQdJDQADQCADIAE6AAAgA0EHaiABOgAAIANBBmogAToAACADQQVqIAE6AAAgA0EEaiABOgAAIANBA2ogAToAACADQQJqIAE6AAAgA0EBaiABOgAAIANBCGoiAyAFRw0ACwsgAAudAwIGfwF+QTggAUH/AXEiASABQThPGyECAkAgACgCECIEIAAtABQiAWoiA0EASgRAIAIgA0sNAQJAIARBAEwgASACT3INAANAIARBAWsiBUEDdiEGQcAAIAFBB2oiB0F4cWshAwJAIAVBP00EQCAAIAYgAxCIASAAKAIQIQQgAC0AFCEBDAELAkAgACgCBCIFIAYgB0H4AXFBA3ZqQQdrIgZPBEAgBSAGayIFQQdLDQFBCCAFQcTewQAQqwQACyAGIAVB1N7BABCqBAALIAAgASADaiIBOgAUIAAgBCADQf8BcWsiBDYCECAAIAAoAgAgBmopAAA3AwgLIAFB/wFxIAJPDQEgBEEASg0ACwsgACABIAJrIgE6ABRCfyACrYZCf4UgACkDCCABQT9xrYiDDwsgACAEIAJrNgIQQgAPCyACIANrIQICQCADQf8BcSABSwRAIAAgAxBbIQggACgCECEEDAELIAAgASADayIBOgAUQn8gA62GQn+FIAApAwggAUE/ca2IgyEICyAAIAQgAms2AhAgCCACQT9xrYYLnAMBBX8CQEERQQAgAEGvsARPGyIBIAFBCHIiASAAQQt0IgIgAUECdEH82sIAaigCAEELdEkbIgEg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AEEEaiACKAIEIAIoAggQPUHcoMIAIAAoAgggACgCBCICGyEDQQkgACgCDCACGwshAiADIAIgARDaASAAQRBqJAALZgAjAEEwayIAJABBhOXCAC0AAARAIABBAjYCDCAAQYyhwgA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIAQhDcDICAAIABBIGo2AhAgAEEIakG0ocIAEKQDAAsgAEEwaiQAC2EBAX8jAEEwayICJAAgAiAANgIMIAJBAjYCFCACQZymwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA0hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRSACQTBqJAALYQEBfyMAQTBrIgIkACACIAA2AgwgAkECNgIUIAJB5K7BADYCECACQgE3AhwgAiACQQxqrUKAgICA4DSENwMoIAIgAkEoajYCGCABKAIcIAEoAiAgAkEQahBFIAJBMGokAAthAQF/IwBBMGsiAiQAIAIgADYCDCACQQE2AhQgAkHwp8EANgIQIAJCATcCHCACIAJBDGqtQoCAgICQOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUgAkEwaiQAC18BAn8CQCAAKAIAIgFB7f///wdqIgJBCk0gAkEDR3ENACABRSABQfv///8HaiICQQ1NIAJBAkdxIAFBg4CAgHhHIAFBhICAgHhMcXJyDQAgACgCBCABQQJ0QQQQpwQLC1wBA38gAC0AACIBQQNLIAFBA0dyRQRAIAAoAgQiACgCACEBIABBBGooAgAiAygCACICBEAgASACEQMACyADKAIEIgIEQCABIAIgAygCCBCnBAsgAEEMQQQQpwQLC2sBAn9BqJbAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMAAQIDC0EAIQEMAgsgAUEBaiEBQdStwAAhAgwBCyABQQRqIQFBkK7AACECCyAAIAI2AgQgACABNgIAC2gBA38CQAJAAkACQEEDIAEoAgBB7f///wdqIgQgBEELTxtBAmsOAwABAgMLIAFBBGohAkGcm8AAIQMMAgtB2LPAACEDIAEhAgwBCyABQQRqIQJBjLXAACEDCyAAIAM2AgQgACACNgIAC2sBAn9B1LfAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EE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AX8jAEEQayICJAAgAiAANgIMIAFB8b3AAEEWQYe+wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBic7AAEEbQcC8wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBrODAAEERQb3gwABBBCACQQxqQZzgwAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBweDAAEEWQdfgwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8fDAAEEbQZDfwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8IjBAEERQYGJwQBBBCACQQxqQeCIwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhYnBAEEWQZuJwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhZfBAEEbQdSHwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzwBAX8jAEEQayICJAAgAkGQksIANgIMIAIgADYCCCACQQhqQZSSwgAgAkEMakGUksIAIAFB5J/CABBrAAs4AQF/IwBBEGsiAiQAIAIgADYCDCABQeywwgBBDUH5sMIAQQQgAkEMakHcsMIAEMkBIAJBEGokAAs5AQF/IwBBEGsiAyQAIAMgATYCDCADIAA2AgggA0EIakGswsIAIANBDGpBrMLCACACQeyOwgAQawALMAEBfyMAQRBrIgIkACACQQhqIAAQ8wIgAigCCCABIAIoAgwoAhARAAAgAkEQaiQACzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEMUBDwsgACABEPwBDwsgACABEP0BCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEK0EDwsgACABEIQCDwsgACABEIMCCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEKkDDwsgACABEIQCDwsgACABEIMCCzMBAX8jAEEQayICJAAgAiAAKAIANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAszAQF/IwBBEGsiAiQAIAIgACgCADYCDCABQejUwQBBDCACQQxqQdjUwQAQfyACQRBqJAALLQACQCAAIAEQrANFDQAgAARAQYXlwgAtAAAaIAAgARD1AyIBRQ0BCyABDwsACzcBAX8jAEEgayIBJAAgAUEANgIYIAFBATYCDCABQdzZwgA2AgggAUIENwIQIAFBCGogABCkAwALMwEBfyAAKAIAIgFBhICAgHhMIAFBg4CAgHhHcSABRXJFBEAgACgCBCABQQJ0QQQQpwQLCzABAX8jAEEQayICJAAgAiAANgIMIAFBxJnAAEEMIAJBDGpBtJnAABB/IAJBEGokAAsvACAAQZybwAA2AgQgACABIAFBACABLQAAQQJrQf8BcSIAQQFGGyAAQQJLGzYCAAswAQF/IwBBEGsiAiQAIAIgADYCDCABQdi8wABBDCACQQxqQci8wAAQfyACQRBqJAALLwAgAEGwvsAANgIEIAAgASABQQAgAS0AAEECa0H/AXEiAEEBRhsgAEECSxs2AgALMAEBfyMAQRBrIgIkACACIAA2AgwgAUGo38AAQQwgAkEMakGY38AAEH8gAkEQaiQACy8AIABBgOHAADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACy8AIABBxInBADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACzABAX8jAEEQayICJAAgAiAANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAssAQF/IwBBEGsiACQAIABBCGoiAiABQfyVwgBBCxCmAyACEK4CIABBEGokAAuEAQEDfyMAQSBrIgQkACAEQQhqIgMQ8AECf0GF5cIALQAAGkEkQQQQ9QMiAgRAIAJB5LrAADYCACACIAE2AiAgAiAANgIcIAIgAykCADcCBCACQQxqIANBCGopAgA3AgAgAkEUaiADQRBqKQIANwIAIAIMAQtBBEEkENMEAAsgBEEgaiQACzgBAX9BASEBIAAtAARFBEAgACgCACIBKAIcQY7EwgBBASABKAIgKAIMEQIAIQELIAAgAToABCABC5ABAQN/IwBBIGsiAyQAIANBCGoiAhDwAQJ/QYXlwgAtAAAaQShBBBD1AyIBBEAgAUGcgsAANgIAIAEgAikCADcCBCABIAApAgA3AhwgAUEMaiACQQhq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NgIMIABBhKLCACABKAIEIAEoAggiAC0ACCAALQAJEMEBAAsgACADNgIEIAAgAjYCACAAQeihwgAgASgCBCABKAIIIgAtAAggAC0ACRDBAQALKgAgAEH/AXFFBEBDAAAAAA8LIABBAWtB/wFxs0NFIpE9lEMAABDBkhBSCy0AIAEoAhwgAiADIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAsyAQF/IAEoAhxBvMHCAEEBIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAshAAJAIAEgAxCsAwRAIAAgASADIAIQ3wMiAA0BCwALIAALIgEBfyAAKAIAIgAgAEEfdSICcyACayAAQX9zQR92IAEQbAslACAARQRAQfiPwgBBMhDIBAALIAAgAiADIAQgBSABKAIQEQsACygAIAEgACgCAC0AAEECdCIAQeC8wgBqKAIAIABBzLzCAGooAgAQ5QMLGQEBf0GAgICAeCABayAATyACIAFpQQFGGwslACABIAAtAABBAnQiAEH8tcAAaigCACAAQey1wABqKAIAEOUDCyUAIABBnJvAADYCBCAAIAFBBGpBACABKAIAQYKAgIB4Rhs2AgALIQAgAEHwosAANgIEIAAgAUEBakEAIAEtAABBAkYbNgIACyUAIAEgAC0AAEECdCIAQZDZwABqKAIAIABBgNnAAGooAgAQ5QMLJQAgAEGwvsAANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAshACAAQYTGwAA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgASAALQAAQQJ0IgBB+PvAAGooAgAgAEHo+8AAaigCABDlAwslACAAQYDhwAA2AgQgACABQQRqQQAgASgCAEGCgICAeEYbNgIACyEAIABBsOjAADYCBCAAIAFBAWpBACABLQAAQQJGGzYCAAshACAAQbSOwQA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgAEHEicEANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAslACABIAAtAABBAnQiAEGMosEAaigCACAAQfyhwQBqKAIAEOUDCyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCABKAIQEQcACyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCABKAIQESUACyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCABKAIQERMACyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCABKAIQEScACyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCABKAIQESkACygBAX8gACgCACIBQYCAgIB4ckGAgICAeEcEQCAAKAIEIAFBARCnBAsLJQAgASAALQAAQQJ0IgBBxKzCAGooAgAgAEGcq8IAaigCABDlAwsnACAAQRxqQQAgAkLj4Nah9qKXnVZRG0EAIAFC0Jamw5Le7cA3URsLKQAgAEEgakEAIAJC3f7B4L2j6uiCf1EbQQAgAUKX2/aYrfP7zY5/URsLKQAgAEEcakEAIAJC7bqtts2F1PXjAFEbQQAgAUL4gpm9le7Gxbl/URsLKQAgAEEcakEAIAJCy4fr+uCou7bQAFEbQQAgAULEr9zF2tKv9bh/URsLIQAgAEUEQEH4j8IAQTIQyAQACyAAIAIgAyABKAIQEQUAC5sRAQ5/An8QaSIEIAImARBpIgUgAyYBIwBBMGsiByQAIAcgBTYCBCAHIAQ2AgAgByAANgIIIAcgATYCDCAHIAcoAgAlARADNgIQIAcgB0EAEMcEIgA2AhggB0EYaiIBEKgEBEAgByAANgIYIAcgASgCABDaBEECdjYCFCAAQYQBTwRAIAAQxgELIAcgB0EEajYCLCAHIAc2AiggByAHQQxqNgIkIAcgB0EUajYCICAHIAdBEGo2AhwgByAHQQhqNgIYAn8gB0EYaiEAIwBBQGoiBSQAAkACQAJAAkACQEEAQfCGwAAoAgARBAAiDwRAIA8oAgBFBEAgACgCFCERIAAoAhAhECAAKAIMIQwgACgCCCELIA9BfzYCACAAKAIEIQ0gACgCACgCACIEIA9BBGoiBigCCCIBSwRAIAQgASIAayIIIAYoAgAgAGtLBEAgBiAAIAhBBEEEEI8BIAYoAgghAAsgBigCBCIOIABBAnRqIQkgCEECTwRAIAlBACABQX9zIARqQQJ0EFoaIAAgBGpBAnQgAUECdGsgDmpBBGshCSAAIAhqQQFrIQALIAlBADYCACAGIABBAWo2AggLIAYoAhQiASAESQRAIAQgASIAayIIIAYoAgwgAGtLBEAgBkEMaiAAIAhBBEEEEI8BIAYoAhQhAAsgBigCECIOIABBAnRqIQkgCEECTwRAIAlBACABQX9zIARqQQJ0EFoaIAAgBGpBAnQgAUECdGsgDmpBBGshCSAAIAhqQQFrIQALIAlBADYCACAGIABBAWo2AhQLIAYoAiAiAEGA+AFNBEBBgfgBIAAiAWsiBCAGKAIYIABrSwRAIAZBGGogACAEQQRBBBCPASAGKAIgIQELIAYoAhwiCSABQQJ0IghqIQQgAEGA+AFHBH8gBEEAQYDgByAAQQJ0IgRrEFoaIAEgAGtBgPgBaiEBIAggBGsgCWpBgOAHagUgBAtBADYCACAGIAFBAWo2AiALAkAgDSgCACIJBEBBACEAA0AgDCgCACAAayIBIAsoAgAiBCABIARJGyIEBEAgBSAQIAoQxwQiATYCICAFQSBqIggQqARFDQMgBSABNgIgIAgoAgAlARAUIQIQaSIBIAImASAFIAE2AhQgBSgCICIBQYQBTwRAIAEQxgELIAUgBUEUaigCAEEAIAQQ1gM2AiAgACAEaiIBIARJDQYgASAPKAIMIghLDQcgBUEgaiAPKAIIIABBAnRqIAQQzAIgBSgCICIAQYQBTwRAIAAQxgELIAUoAhQiAEGEAU8EQCAAEMYBCyABIQALIAkgCkEBaiIKRw0ACwsgBUEIaiEQIAwoAgAhDCMAQUBqIgkkAAJAIAwgBigCCCIATQRAIAYoAgQhASAGQQA2AiBBACEAIAYoAhhBgPgBTQRAIAZBGGpBAEGB+AFBBEEEEI8BIAYoAiAhAAsgBigCHCIEIABBAnRqQQBBgOAHEFogBiAAQYH4AWoiCjYCIEGA4AdqQQA2AgACQCAMRQ0AIAxBAWtB/////wNxIAEhAAJAIAxBAXFFDQAgAEEEaiEAIAEoAgBB//8BcSILQf/3AUsNACAEIAtBAnRqIgsgCygCAEEBajYCAAtFDQAgASAMQQJ0aiEIA0AgACgCAEH//wFxIgtBgPgBSQRAIAQgC0ECdGoiCyALKAIAQQFqNgIACyAAQQRqKAIAQf//AXEiC0H/9wFNBEAgBCALQQJ0aiILIAsoAgBBAWo2AgALIABBCGoiACAIRw0ACwsgCkH8////A3EhCCAKQQNxIQtBACEKIAQhAANAIAAoAgAhDSAAIAo2AgAgCSAKIA1qIgo2AgggAEEEaiINKAIAIQ4gDSAKNgIAIAkgCiAOaiIKNgIIIABBCGoiDSgCACEOIA0gCjYCACAJIAogDmoiCjYCCCAAQQxqIg0oAgAhDiANIAo2AgAgCSAKIA5qIgo2AgggAEEQaiEAIAhBBGsiCA0ACyALBEAgC0ECdCELQQAhCANAIAAgCGoiDSgCACEOIA0gCjYCACAJIAogDmoiCjYCCCALIAhBBGoiCEcNAAsLIAwEQCAMQQJ0IQggBigCECENIAYoAhQhBkEAIQADQAJAIAEoAgBB//8BcSIMQYD4AU8NACAGIAQgDEECdGoiDCgCACILSwRAIA0gC0ECdGogADYCACAMIAwoAgBBAWo2AgAMAQsgCyAGQeiEwAAQrQIACyABQQRqIQEgAEEBaiEAIAhBBGsiCA0ACwsgCiAEKAKA4AdGBEBBACEADAILIAlBAjYCHCAJQdiEwAA2AhggCUICNwIkIAkgBEGA4AdqrUKAgICAEIQ3AzggCSAJQQhqrUKAgICAEIQ3AzAgCSAJQTBqNgIgIAlBDGoiACAJQRhqENABIAAQoQMhCkEBIQAMAQsgDCAAQaiEwAAQqwQACyAQIAo2AgQgECAANgIAIAlBQGskACAFKAIMIQAgBSgCCARAIAUgADYCECAFQQE2AiQgBUHEisAANgIgIAVCATcCLCAFIAVBEGqtQoCAgIAghDcDOCAFIAVBOGo2AiggBUEUaiAFQSBqENEBIAUoAhggBSgCHBDIBAALIAANBQwGCyAFIAE2AiBB7IrAAEErIAVBIGpB3IrAAEGYi8AAEKACAAsQ0wIACxDSAgALIAAgAUHMisAAEKwEAAsgASAIQcyKwAAQqwQACyAPKAIYIgEgAEkNASAPKAIUIQQgBSARQQAgABCpBCIBNgIgIAVBIGogBCAAEOkBIAFBhAFJDQAgARDGAQsgDyAPKAIAQQFqNgIAIAVBQGskACAADAELIAAgAUG0isAAEKsEAAsgBygCBCIBQYQBTwRAIAEQxgELIAcoAgAiAUGEAU8EQCABEMYBCyAHQTBqJAAMAQsgByAANgIYQZyGwABBKyAHQRhqQYyGwABB9IbAABCgAgALCx4AIABBnJvAADYCBCAAIAFBACABLQAAQQJHGzYCAAseACAAQZS0wAA2AgQgACABQQAgASgCAEECSRs2AgALHgAgAEGwvsAANgIEIAAgAUEAIAEtAABBAkcbNgIACx4AIABBqNfAADYCBCAAIAFBACABKAIAQQJJGzYCAAseACAAQYDhwAA2AgQgACABQQAgAS0AAEECRxs2AgALHgAgAEGQ+sAANgIEIAAgAUEAIAEoAgBBAkkbNgIACxsAIAAoAgAiAEEEaigCACAAQQhqKAIAIAEQMAseACAAQcSJwQA2AgQgACABQQAgAS0AAEECRxs2AgALHgAgAEGkoMEANgIEIAAgAUEAIAEoAgBBAkkbNgIACx8AIABFBEBB+I/CAEEyEMgEAAsgACACIAEoAhARAAALno4BAx1/Bn4IfRBpIgMgACYBAn8jAEHwAGsiDyQAIA8gAzYCCCAPIA9BCGooAgAQ3QMiCDYCGCAPQQxqIQUCQAJAIA9BGGooAgAiBxDaBCIDQQBIDQACQCADRQRAQQEhBgwBC0GF5cIALQAAGkEBIQsgA0EBEPUDIgZFDQELEO0DIgkQ3AMiBBDdAyELIARBhAFPBEAgBBDGAQsgCyUBIAclASAGEAcgC0GEAU8EQCALEMYBCyAJQYQBTwRAIAkQxgELIAUgBxDaBDYCCCAFIAY2AgQgBSADNgIADAELIAsgA0HsjsIAENcDAAsgCEGEAU8EQCAIEMYBCyAPQRhqIRogDygCECEcIA8oAhQhCCMAQeAAayIRJAAgEUIANwNQAkACQAJAAkACQAJAIAhBCE8EQCARIBwpAAA3A1AMAQtB4NnAACkCACIgQv8Bg0IEUg0BCyARQQg2AlwgESARQdAAajYCWCMAQRBrIgMkACARQQhqIgYCfwJAIBFB2ABqIgUoAgQiB0UEQCADQoHKADcDCCAGIANBCGoQ+wI2AgQMAQsgBSAHQQFrIgk2AgQgBSAFKAIAIgtBAWo2AgAgCUUEQCADQoHKADcDCCAGIANBCGoQ+wI2AgQMAQsgCy0AACEJIAUgB0ECayIENgIEIAUgC0ECajYCACAERQRAIANCgcoANwMIIAYgA0EIahD7AjYCBAwBCyALLQABIQQgBSAHQQNrIg02AgQgBSALQQNqNgIAIAYCfyANRQRAIANCgcoANwMIIANBCGoQ+wIMAQsgBiALLQACOgADIAYgBDoAAiAGIAk6AAEgBSAHQQRrNgIEIAUgC0EEajYCACAGIAstAAM6AARBAAwCCzYCBAtBAQs6AAAgA0EQaiQAIBECfyARLQAIQQFGBEAgESgCDAwBCyARKAJcQQNLDQIgEUKBygA3AwggEUEIahD7Ags2AghBzI/AAEErIBFBCGpBvI/AAEGMkMAAEKACAAsgESAgNwMIIBFBCGoQogMhAyAaQYCAgIB4NgIQIBogAzYCAAwBCyARMwAJIBExAAtCEIaEIBExAAxCGIaEQteYnYIDUgRAIBFBADYCGCARQQE2AgwgEUGUkcAANgIIIBFCBDcCECARQQhqEKsCIQMgGkGAgICAeDYCECAaIAM2AgAMAQsgESgCWCgAACIDQQFrQQJPBEAgEUEANgIYIBFBATYCDCARQfSQwAA2AgggEUIENwIQIBFBCGoQqwIhAyAaQYCAgIB4NgIQIBogAzYCAAwBCyARQQE6AC4gEUGBAjsBLCARQYECOwEoIBFBADYCJCARIANBBHQiA0G7kMAAai0AADoALyARIANBtpDAAGovAQA7ASogESADQayQwABqKAIANgIgIBFBADYCECARQoCAgIDAADcCCCAIQQhJDQECfyAcQQhqIQYgCEEIayELIBFBCGohFkEAIQhCACEgIwBB8ABrIgokAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAKAn8CQAJAAkAgEUEgaiIZLQANRQ0AAkACQCALBEAgC0EBcSEHIAtBAUcNAUG1tdTVASEEIAYhAwwCCyAZLQAIDQRBASEDDAMLIAtBfnEhBUG1tdTVASEEIAYhAwNAIAMgCCADLQAAIgkgBEGNzOUAbEHf5rvjA2pBCHZzIg1BBXQgDUH4AXFBA3ZyczoAACADQQFqIgggCSAILQAAIgggBEGpueG5AWxBstLAugRqIgRBCHZzIg1BBXQgDUH4AXFBA3ZyczoAACADQQJqIQMgBUECayIFDQALCyAHRQ0AIAMgAy0AACAEQY3MAWxB3+YDakEIdnMiA0EFdCADQfgBcUEDdnIgCHM6AAALIBktAAgNAUEAIQQgC0EASA0DIAtFBEBBASEDDAELQYXlwgAtAAAaQQEhBCALQQEQ9QMiA0UNAwsgAyAGIAsQOxogCwwBCyAKQShqIRgjAEGACGsiCSQAIAlBmARqIRRBACEFIwBBgAtrIgckACAHIAs2AgQgByAGNgIAIAdBADYC4AMgB0EANgLYAyAHQQI2AgggB0HgCmohBEEAIQZBACELIwBBEGsiDiQAIAcoAgAhAwJAAkACQAJAAkACQAJAAkACQAJAAkACQCAHKAIEIgxBA00EQCAHQQA2AgQgByADIAxqNgIAQfD/wAApAwAiIEL/AYNCBFENASAEICA3AwggBEEAOgAEIARBAjYCAAwMCyAHIAxBBGsiCDYCBCAHIANBBGoiDTYCACAOIAMoAAAiBjYCBCAGQXBxQdDUtMIBRg0BIAZBqOq+aUYNAgsgBCAGNgIIIARBAToABCAEQQI2AgAMCgsgCEEESQ0BIAcgDEEIazYCBCAHIANBCGo2AgAgAygABCELDAILAkAgCEUEQCAHQQA2AgRB8P/AACkDACIgQv8Bg0IEUg0BIA5CADcDCEEBIQxBKCEIQQUhFwwGCyAHIAxBBWsiBjYCBEEFIRcgByADQQVqIg02AgAgDiADLQAEIgg6AAQgCEEgcSITDQQgBgRAIAcgDEEGayIGNgIEQQYhFyAHIANBBmoiDTYCACAOIAMtAAUiCzoABAwFC0EAIQYgB0EANgIEQfD/wAApAwAiIkL/AYNCBFEEQEEGIRcgCCELDAULIAQgIjcDCCAEQQQ6AAQgBEECNgIADAkLIAQgIDcDCCAEQQI6AAQgBEECNgIADAgLIAdBADYCBCAHIAMgDGo2AgAgBiELQfD/wAApAwAiIEL/AYNCBFINAQsgBCALNgIMIAQgBjYCCCAEQQc6AAQgBEECNgIADAYLIAQgIDcDCCAEQQI6AAQgBEECNgIADAULAkACQAJ/AkACQAJ/AkACQAJAIAhBA3EiEkEBaw4DAgEACAtBBCESCyAGIBJPDQIgEgwBCyAGDQJBAQshDCAHQQA2AgQgByAGIA1qIg02AgBB8P/AACkDACIiQv8Bg0IEUQ0DIAQgIjcDCCAEQQU6AAQgBEECNgIADAkLIA5BBGogDSASEDsaIAYgEmshBSANIBJqIQ0gEgwBCyAOIA0tAAA6AAQgBkEBayEFIA1BAWohDUEBCyEMIAcgBTYCBCAHIA02AgALIAUhBgJ/IA4tAAQiAyAMQQFGDQAaIA4tAAVBCHQgA3IiAyAMQQJGDQAaIA4tAAZBEHQgDi0AB0EYdHIgA3ILIgVBAEchEiAMIBdqIRcLQQEhA0ECIQwgBwJ/AkACQAJAAkACQCAIQQZ2QQFrDgMDAgABC0EAIQNBCCEMDAILIBMNAgwHC0EAIQNBBCEMCyAOQgA3AwggBiAMSQ0DIA5BCGogDSAMEDsaIAwgDWohDSAGIAxrDAELIA5CADcDCCAGRQRAQQEhDAwCCyAOIA0tAAA6AAhBASEMIA1BAWohDUEAIQMgBkEBaws2AgQgByANNgIADAILQQAhBkEAIQMLIAdBADYCBCAHIAYgDWo2AgBB8P/AACkDACIgQv8Bg0IEUQ0AIAQgIDcDCCAEQQY6AAQgBEECNgIADAILAn4gDjEACCIgIAxBAUYNABogDjEACUIIhiAghCIgIAxBAkYNABogDjEACkIQhiAOMQALQhiGhCAghCIgIAxBBEYNABogDjEADEIghiAOMQANQiiGhCAOMQAOQjCGhCAOMQAPQjiGhCAghAsiIEKAAnwgICADGyEgIAwgF2ohFwsgBCAXOgAYIAQgCzoAESAEIAg6ABAgBCAgNwMIIAQgBTYCBCAEIBI2AgALIA5BEGokACAHKQPoCiEiIAcoAuQKIQ0CQAJAIAcoAuAKIgVBAkYNACAHMQD4CiEjICIhIAJAIAcpA/AKIiFCIINCAFINAEIBICFCCIgiIKdB+AFxQQN2QQpqrYYiJEIDiCAgQgeDfiAkfCIgQoCAgICA+ABUDQAgB0EAOgCgB0EBIRAgBykDoAchIgwBCyAgpyEGIAdBuAdqIQNBheXCAC0AABoCQAJAAkACQAJAAkBBgAJBARD1AyILBEBBheXCAC0AABpBgAJBARD1AyIIRQ0BQYXlwgAtAAAaQSxBBBD1AyIERQ0CQYXlwgAtAAAaQSxBBBD1AyIORQ0DQYXlwgAtAAAaQYAIQQQQ9QMiDEUNBEGF5cIALQAAGkGACEEEEPUDIhJFDQUgA0IENwJAIANB/wE7AWAgA0EANgJcIAMgEjYCWCADQoCAgICAIDcCUCADIAw2AkwgA0GAAjYCSCADQQA6AGQgAyALNgIQIANCgICAgIAgNwIIIANCgICAgBA3AgAgA0IANwI4IAMgDjYCNCADQoCAgICwATcCLCADIAQ2AiggA0KAgICAsAE3AiAgAyAINgIcIANCgICAgIAgNwIUDAYLQQFBgAJBrPnBABDXAwALQQFBgAJBvPnBABDXAwALQQRBLEHM+cEAENcDAAtBBEEsQdz5wQAQ1wMAC0EEQYAIQcyAwgAQ1wMAC0EEQYAIQdyAwgAQ1wMAC0GF5cIALQAAGgJAAkBBgAhBBBD1AyILBEACQEGF5cIALQAAGkGACEEEEPUDIghFDQJBheXCAC0AABpBgAhBBBD1AyIERQ0AQYXlwgAtAAAaQYAIQQQQ9QMiDkUNAkGF5cIALQAAGkGACEEEEPUDIgxFDQBBheXCAC0AABpBgAhBBBD1AyISRQ0CIANCADcDqAIgA0EBNgLoASADQQA6AOQBIANBADoA4gEgA0EAOgDgASADQTQ7AdwBIANBADYC2AEgAyASNgLUASADQoCAgICAIDcCzAEgAyAMNgLIASADQoCAgICAIDcDwAEgA0KAgICAwAA3A7gBIANBIzsBtAEgA0EANgKwASADIA42AqwBIANCgICAgIAgNwKkASADIAQ2AqABIANCgICAgIAgNwOYASADQoCAgIDAADcDkAEgA0EfOwGMASADQQA2AogBIAMgCDYChAEgA0KAgICAgCA3AnwgAyALNgJ4IANCgICAgIAgNwNwIANCgICAgMAANwNoIANBwAJqQgA3AwAgA0G4AmpCADcDACADQbACakIANwMAIANB/AFqQQA2AgAgA0H0AWpCADcCACADQgA3AuwBIANC1uuC7ur9ifXgADcDgAIgA0LP1tO+0ser2UI3A4gCIANCADcDkAIgA0L56tDQ58mh5OEANwOYAiADQgA3A6ACIANBADYCyAIgA0IANwPQAiADIAY2AtgCIANBADYC5AIgA0EINgKUAyADQoCAgIAQNwLcAiADQoGAgIDAADcCjAMgA0EANgKIAyADQoCAgIAQNwPoAiADQgA3A/ACIANCBDcD+AIgA0KAgICAEDcDgAMMAwsLQQRBgAhBzIDCABDXAwALQQRBgAhB3IDCABDXAwALIAdBADYCqAcgB0EANgKwByAHQQA6ANwKIAdBADYC2AogByAjNwPQCiAHKQOoByEgIAcpA7AHISMgB0HoA2oiBiADQagDEDsaIAdBCGoQSSAHICM3AyggByAgNwMgIAcgITcDGCAHIA02AgwgByAiPgIQIAcgIkIgiD4CFCAHIAU2AgggB0EwaiAGQagDEDshCCAFQQFxBEBBDCEQIAcoAtgDIhJFDQEgBygC3AMhFwNAIBJB1AFrIQQgEkEEaiEGIBIvAd4WIgNBAnQhC0F/IQUCQAJAA0AgC0UEQCADIQUMAgsgBigCACEOIAVBAWohBSAEQYQCaiEEIAtBBGsh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EwAgAEHMuMAANgIEIAAgATYCAAsTACAAQYi5wAA2AgQgACABNgIACxMAIABBxLnAADYCBCAAIAE2AgALEwAgAEGAusAANgIEIAAgATYCAAsTACAAQbC+wAA2AgQgACABNgIACxMAIABBKDYCBCAAQYjbwAA2AgALEwAgAEGA4cAANgIEIAAgATYCAAshACAAQqTFo/yfjvDjADcDCCAAQqqooLmusOaw6QA3AwALEAAgACgCACAAKAIEIAEQMAsRACAAKAIAIAAoAgQgARDVBAsiACAAQsuH6/rgqLu20AA3AwggAELEr9zF2tKv9bh/NwMACxMAIABBKDYCBCAAQcCFwQA2AgALEwAgAEHEicEANgIEIAAgATYCAAsgACAAQrz8k7Ko16DsTDcDCCAAQuuYqJm2gbKefzcDAAshACAAQriynYTMrpfUQjcDCCAAQu/Dv6KOjcrEoH83AwALIAAgAEKcnaLxgrvwoHU3AwggAELRqsqvpcqt8kA3AwALIQAgAEL7wqCWlfy/yHo3AwggAELmsfLlkYe/ybF/NwMACyIAIABC9auQ77TsvKaWfzcDCCAAQrHh7P30uYbLwgA3AwALIAAgAELNnq77nqC2sEE3AwggAELxps+Y0aSn/gE3AwALIAAgAEK3v8ue+N2SoEM3AwggAEKvuaX0x5vV+zA3AwALIQAgAEKWl7rs79nZo3Q3AwggAEKH+OXLhuPSwtQANwMACyEAIABC/O6Qyq7osdU1NwMIIABC2OvVj+a1zN2OfzcDAAshACAAQrzprN2Y1v7ui383AwggAEKk3Nqt0/nNwEU3AwALIQAgAELl6obQ6cP/7Xk3AwggAEL30OLk1cPQ6ad/NwMACyEAIABC5sHsgPKk3YtlNwMIIABChu7u8+efmIeefzcDAAshACAAQs7Is8mT6a+2pX83AwggAELt66KMv7HLkg83AwALIgAgAEKcrtGn56WAwMIANwMIIABC16rLiaf+wYLHADcDAAsiACAAQt3+weC9o+rogn83AwggAEKX2/aYrfP7zY5/NwMACyEAIABCgsDc4LCv07mnfzcDCCAAQpbk17fDtcOKAzcDAAshACAAQrvV0cb1jfDEkH83AwggAELVi9bpuKS4kXk3AwALIQAgAEKynOer2rGju98ANwMIIABCvfif/8L+hsNVNwMACyIAIABC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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAAVwAAAFYAAABgERAAWAAAAFkAAABaAAAAWwAAAFwAAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAA/wAAAFYAAAD0IhAAAAEAAFkAAAABAQAAWwAAAAIBAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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bEVuY29kaW5nSW52YWxpZENoYXJFbmNvZGluZwAAAAAAAAAEAAAABAAAAEEAAABJbnZhbGlkVGFnRW5jb2RpbmdEZXNlcmlhbGl6ZUFueU5vdFN1cHBvcnRlZFNpemVMaW1pdFNlcXVlbmNlTXVzdEhhdmVMZW5ndGgAAAAAAAQAAAAEAAAANQEAAEN1c3RvbU5vbmVTb21lUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVkAAAAAAAABAAAAAQAAAA2AQAAVG9vTWFueUJpdHNudW1fcmVxdWVzdGVkX2JpdHNsaW1pdE5vdEVub3VnaFJlbWFpbmluZ0JpdHNyZXF1ZXN0ZWRyZW1haW5pbmdBY2NMb2dJc1plcm8AAAAAAAABAAAAAQAAADcBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAA4AQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAAA5AQAARwAAAHAwEAA6AQAASQAAADsBAABKAAAAPAEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABNAAAAUmVhZEZyYW1lSGVhZGVyRXJyb3IAAAAABAAAAAQAAABOAAAARnJhbWVIZWFkZXJFcnJvcldpbmRvd1NpemVUb29CaWcAAAAABAAAAAQAAABPAAAARGljdGlvbmFyeURlY29kZUVycm9yAAAAAAAAAAQAAAAEAAAAUAAAAEZhaWxlZFRvUmVhZEJsb2NrSGVhZGVyAAAAAAAEAAAABAAAAFEAAABGYWlsZWRUb1JlYWRCbG9ja0JvZHlGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzRXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzVG9vTWFueVdlaWdodHNNaXNzaW5nV2VpZ2h0c0xlZnRvdmVySXNOb3RBUG93ZXJPZjJOb3RFbm91Z2hCeXRlc1RvRGVjb21wcmVzc1dlaWdodHNoYXZlRlNFVGFibGVVc2VkVG9vTWFueUJ5dGVzdXNlZGF2YWlsYWJsZV9ieXRlc05vdEVub3VnaEJ5dGVzSW5Tb3VyY2VXZWlnaHRCaWdnZXJUaGFuTWF4TnVtQml0c01heEJpdHNUb29IaWdoAAAAAAAAAAEAAAABAAAAVgAAAAAAAAABAAAAAQAAAD0BAABWAAAAIDQQAD4BAABZAAAAPwEAAFsAAABAAQAAVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZVplcm9PZmZzZXROb3RFbm91Z2hCeXRlc0Zvck51bVNlcXVlbmNlcwAAAAAABAAAAAQAAABdAAAARXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlAAAAQQEAAAwAAAAEAAAAXwAAAEEBAAAMAAAABAAAAEIBAABfAAAAKDUQAEMBAABiAAAAOwEAAGMAAAA8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YWxzbmVlZGVkAAAAAAAABAAAAAQAAABjAQAAQml0c3RyZWFtUmVhZE1pc21hdGNocmVhZF90aWxEZWNvZGVkTGl0ZXJhbENvdW50TWlzbWF0Y2hkZWNvZGVkAGQBAAAUAAAABAAAALQAAABkAQAAFAAAAAQAAABlAQAAtAAAAMQ8EABmAQAAtwAAADsBAAC4AAAAPAEAAAAAAAAMAAAABAAAALkAAAAAAAAADAAAAAQAAABnAQAAuQAAAAA9EAA6AQAAuwAAADsBAABKAAAAPAEAAGgBAAAYAAAABAAAAL0AAABoAQAAGAAAAAQAAABpAQAAvQAAADw9EABqAQAAwAAAADsBAADBAAAAPAEAAAAAAAAMAAAABAAAAMIAAAAAAAAADAAAAAQAAABrAQAAwgAAAHg9EABsAQAAxQAAADsBAADGAAAAPAEAAElsbGVnYWxMaXRlcmFsU2VjdGlvblR5cGVOb3RFbm91Z2hCeXRlc25lZWRfYXRfbGVhc3QDAAAAAwAAAAoAAAAIAAAA8i4QAPUuEAD4LhAAAi8QAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAAAIPhAAbQAAACoCAAARAAAAYW4gYXJyYXkgb2YgbGVuZ3RoIDQAAAAAAAAAAAEAAABtAQBBtP3AAAv1KAEAAABtAQAAAAAAAAgAAAAEAAAAbgEAAHN0cnVjdCBXbGcwSGVhZGVyIHdpdGggNyBlbGVtZW50cwAAAMw+EAAhAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogaW52YWxpZCBPbmNlIHN0YXRl+D4QADwAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvb25jZS9ub190aHJlYWRzLnJzPD8QAHwAAAA1AAAAEgAAAGZhaWxlZCB0byBmaWxsIHdob2xlIGJ1ZmZlcgDIPxAAGwAAACUAAAACAAAA5D8QAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2RpbmcvYmxvY2tfZGVjb2Rlci5yc0J1ZyBpbiB0aGlzIGxpYnJhcnkA+D8QAGwAAACYAAAAFgAAAFdyb25nIG51bWJlciBvZiBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiAAAIhAEAAaAAAAokAQABQAAAD4PxAAbAAAAK0AAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uID09IHVwcGVyX2xpbWl0X2Zvcl9saXRlcmFscyBhcyB1MzIA+D8QAGwAAACzAAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHUzMjo6ZnJvbShieXRlc19pbl9saXRlcmFsc19oZWFkZXIpICsgYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uICsKICAgICAgICAgICAgdTMyOjpmcm9tKGJ5dGVzX2luX3NlcXVlbmNlX2hlYWRlcikgKyByYXcubGVuKCkgYXMgdTMyID09CiAgICBoZWFkZXIuY29udGVudF9zaXplAAD4PxAAbAAAAMEAAAAJAAAA+D8QAGwAAAC6AAAAFwAAAPg/EABsAAAAiwAAABcAAABIb3cgZGlkIHlvdSBldmVuIGdldCB0aGlzLiBUaGUgZGVjb2RlciBzaG91bGQgZXJyb3Igb3V0IGlmIGl0IGRldGVjdHMgYSByZXNlcnZlZC10eXBlIGJsb2NrAPg/EABsAAAAcAAAABEAAABmYWlsZWQgdG8gZmlsbCB3aG9sZSBidWZmZXIAkEIQABsAAAAlAAAAAgAAAKxCEABkZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBEaXNwbGF5AAAAAAQAAAAEAAAAbwEAAAAAAAAEAAAABAAAAHABAABVdGY4RXJyb3J2YWxpZF91cF90b2Vycm9yX2xlblJhd1JMRUNvbXByZXNzZWRSZXNlcnZlZAAAAAAAAAAEAAAABAAAAEAAAABUb29NYW55Qml0c251bV9yZXF1ZXN0ZWRfYml0c2xpbWl0AAAAAAAABAAAAAQAAABBAAAATm90RW5vdWdoUmVtYWluaW5nQml0c3JlcXVlc3RlZHJlbWFpbmluZ0FjY0xvZ0lzWmVybwAAAAABAAAAAQAAAHEBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAByAQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAABzAQAARwAAALREEABKAAAASQAAAHQBAABKAAAAdQEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzAAAAAAAAAAQAAAAEAAAAVQAAAEV4dHJhUGFkZGluZ3NraXBwZWRfYml0c1Rvb01hbnlXZWlnaHRzTWlzc2luZ1dlaWdodHNMZWZ0b3ZlcklzTm90QVBvd2VyT2YyTm90RW5vdWdoQnl0ZXNUb0RlY29tcHJlc3NXZWlnaHRzaGF2ZUZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaAAAAAABAAAAAQAAAFYAAAAAAAAAAQAAAAEAAAB2AQAAVgAAACRHEABbAAAAWQAAAHcBAABbAAAAeAEAAFVuc3VwcG9ydGVkT2Zmc2V0b2Zmc2V0X2NvZGVaZXJvT2Zmc2V0Tm90RW5vdWdoQnl0ZXNGb3JOdW1TZXF1ZW5jZXMAAAAAAAQAAAAEAAAAXQAAAEV4dHJhQml0c2JpdHNfcmVtYWluaW5nTWlzc2luZ0NvbXByZXNzaW9uTW9kZU1pc3NpbmdCeXRlRm9yUmxlTGxUYWJsZU1pc3NpbmdCeXRlRm9yUmxlT2ZUYWJsZU1pc3NpbmdCeXRlRm9yUmxlTWxUYWJsZQAAAHkBAAAMAAAABAAAAF8AAAB5AQAADAAAAAQAAAB6AQAAXwAAACxIEAB7AQAAYgAAAHQBAABjAAAAdQEAAAAAAAAQAAAACAAAAGQAAAAAAAAAEAAAAAgAAAB8AQAAZAAAAGhIEAB9AQAAZwAAAH4BAABoAAAAfwEAAIABAAAYAAAABAAAAGoAAACAAQAAGAAAAAQAAACBAQAAagAAAKRIEACCAQAAbQAAAHQBAABuAAAAdQEAAIMBAAAIAAAABAAAAHAAAACDAQAACAAAAAQAAACEAQAAcAAAAOBIEACFAQAAcwAAAHQBAAB0AAAAdQEAAIYBAAAYAAAABAAAAHYAAACGAQAAGAAAAAQAAACHAQAAdgAAABxJEACIAQAAeQAAAHQBAAB6AAAAdQEAAIkBAAAIAAAABAAAACUAAACJAQAACAAAAAQAAAAmAAAAJQAAAFhJEAAnAAAAKAAAACkAAAAqAAAAdQEAAAAAAAAMAAAABAAAAHsAAAAAAAAADAAAAAQAAACKAQAAewAAAJRJEACLAQAAfgAAAHQBAAB/AAAAdQEAAIwBAAAUAAAABAAAAIEAAACMAQAAFAAAAAQAAACNAQAAgQAAANBJEACOAQAAhAAAAHQBAACFAAAAdQEAAAAAAAAEAAAABAAAAFIAAABSZWFkRXJyb3JGb3VuZFJlc2VydmVkQmxvY2sAAAAAAAQAAAAEAAAAhgAAAEJsb2NrVHlwZUVycm9yAAAAAAAABAAAAAQAAACHAAAAQmxvY2tTaXplRXJyb3JCbG9ja0NvbnRlbnRSZWFkRXJyb3JNYWxmb3JtZWRTZWN0aW9uSGVhZGVyZXhwZWN0ZWRfbGVucmVtYWluaW5nX2J5dGVzAAAAAAQAAAAEAAAAiAAAAERlY29tcHJlc3NMaXRlcmFsc0Vycm9yAAAAAAAEAAAABAAAAIkAAABMaXRlcmFsc1NlY3Rpb25QYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAigAAAFNlcXVlbmNlc0hlYWRlclBhcnNlRXJyb3IAAAAAAAAABAAAAAQAAACLAAAARGVjb2RlU2VxdWVuY2VFcnJvcgAAAAAABAAAAAQAAACMAAAARXhlY3V0ZVNlcXVlbmNlc0Vycm9ySW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnTWFnaWNOdW1iZXJSZWFkRXJyb3JCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvclNraXBGcmFtZW1hZ2ljX251bWJlcmxlbmd0aAAAAAAAAAQAAAAEAAAAjQAAAEJhZE1hZ2ljTnVtAAAAAAAEAAAABAAAAI4AAABIdWZmbWFuVGFibGVFcnJvcgAAAAAAAAAEAAAABAAAAI8AAABEZWNvZGVidWZmZXJFcnJvck5vdEVub3VnaEJ5dGVzRm9yU2VxdWVuY2V3YW50ZWQAAAAAAQAAAAEAAACQAAAAAAAAAAEAAAABAAAAjwEAAJAAAADUTBAAWwAAAJIAAAB3AQAAWwAAAHgBAAAAAAAABAAAAAQAAACTAAAAAAAAAAQAAAAEAAAAkAEAAJMAAAAQTRAASgAAAJUAAAB0AQAASgAAAHUBAACRAQAAFAAAAAQAAACXAAAAkQEAABQAAAAEAAAAkgEAAJcAAABMTRAAkwEAAJoAAAB0AQAAmwAAAHUBAAAAAAAADAAAAAQAAACcAAAAAAAAAAwAAAAEAAAAlAEAAJwAAACITRAAlQEAAJ8AAAB0AQAAoAAAAHUBAAAAAAAACAAAAAQAAAChAAAAAAAAAAgAAAAEAAAAlgEAAKEAAADETRAASgAAAKMAAAB0AQAASgAAAHUBAACXAQAAFAAAAAQAAAClAAAAlwEAABQAAAAEAAAAmAEAAKUAAAAAThAAmQEAAKgAAAB0AQAAqQAAAHUBAAAAAAAADAAAAAQAAACqAAAAAAAAAAwAAAAEAAAAmgEAAKoAAAA8ThAAmwEAAK0AAAB0AQAArgAAAHUBAABEZWNvZGVyU3RhdGVJc0ZhaWxlZEV4cGVjdGVkSGVhZGVyT2ZQcmV2aW91c0Jsb2NrAAAAAAAAAAEAAAABAAAAnAEAAHN0ZXBzb3VyY2UAAAAAAAAEAAAABAAAALAAAABEZWNvbXByZXNzQmxvY2tFcnJvck1pc3NpbmdDb21wcmVzc2VkU2l6ZU1pc3NpbmdOdW1TdHJlYW1zAAAAAAAABAAAAAQAAACxAAAASHVmZm1hbkRlY29kZXJFcnJvclVuaW5pdGlhbGl6ZWRIdWZmbWFuVGFibGVNaXNzaW5nQnl0ZXNGb3JKdW1wSGVhZGVyTWlzc2luZ0J5dGVzRm9yTGl0ZXJhbHNuZWVkZWQAAAAAAAAEAAAABAAAAJ0BAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAngEAABQAAAAEAAAAtAAAAJ4BAAAUAAAABAAAAJ8BAAC0AAAA2E8QAKABAAC3AAAAdAEAALgAAAB1AQAAAAAAAAwAAAAEAAAAuQAAAAAAAAAMAAAABAAAAKEBAAC5AAAAFFAQAEoAAAC7AAAAdAEAAEoAAAB1AQAAogEAABgAAAAEAAAAvQAAAKIBAAAYAAAABAAAAKMBAAC9AAAAUFAQAKQBAADAAAAAdAEAAMEAAAB1AQAAAAAAAAwAAAAEAAAAwgAAAAAAAAAMAAAABAAAAKUBAADCAAAAjFAQAMYAAADFAAAAdAEAAMYAAAB1AQAASWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzbmVlZF9hdF9sZWFzdAMAAAADAAAACgAAAAgAAAAlQxAAKEMQACtDEAA1QxAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9zdGQvc3JjL2lvL21vZC5ycwAAHFEQAGoAAACyAQAAMQAAAGFzc2VydGlvbiBmYWlsZWQ6IGZpbGxlZCA8PSBzZWxmLmJ1Zi5pbml0L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9jb3JlL3NyYy9pby9ib3Jyb3dlZF9idWYucnMAAADBURAAdAAAAB0BAAAJAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnNIUhAAgAAAAFgCAAAwAAAASW52YWxpZCBGcmFtZV9Db250ZW50X1NpemVfRmxhZzsgSXM6ICwgU2hvdWxkIGJlIG9uZSBvZjogMCwgMSwgMiwgMwDYUhAAJQAAAP1SEAAeAEG0psEAC8piwAMAAHdpbmRvd19zaXplIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bS4gSXM6ICwgU2hvdWxkIGJlIGxvd2VyIHRoYW46IAAAADhTEAAtAAAAZVMQABgAAAAABAAAAAAAAHdpbmRvd19zaXplIHNtYWxsZXIgdGhhbiBhbGxvd2VkIG1pbmltdW0uIElzOiAsIFNob3VsZCBiZSBncmVhdGVyIHRoYW46IJhTEAAuAAAAxlMQABoAAAABAAAAAAAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gZGljdF9pZC4gSXM6ICwgU2hvdWxkIGJlOiAAAPhTEAAhAAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQgbGVuZ3RoLiBJczogADhUEAA3AAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgd2FzIHplcm9JbnZhbGlkIGZyYW1lX2NvbnRlbnRfc2l6ZS4gSXM6ICwgU2hvdWxkIGJlIG9uZSBvZiAxLCAyLCA0LCA4IGJ5dGVzAACbVBAAIAAAALtUEAAjAAAARXJyb3Igd2hpbGUgcmVhZGluZyBtYWdpYyBudW1iZXI6IAAA8FQQACIAAABSZWFkIHdyb25nIG1hZ2ljIG51bWJlcjogMHgAHFUQABsAAABFcnJvciB3aGlsZSByZWFkaW5nIGZyYW1lIGRlc2NyaXB0b3I6IAAAQFUQACYAAABFcnJvciB3aGlsZSByZWFkaW5nIHdpbmRvdyBkZXNjcmlwdG9yOiAAcFUQACcAAABFcnJvciB3aGlsZSByZWFkaW5nIGRpY3Rpb25hcnkgaWQ6IACgVRAAIwAAAEVycm9yIHdoaWxlIHJlYWRpbmcgZnJhbWUgY29udGVudCBzaXplOiDMVRAAKAAAAFNraXBwYWJsZUZyYW1lIGVuY291bnRlcmVkIHdpdGggTWFnaWNOdW1iZXIgMHggYW5kIGxlbmd0aCAgYnl0ZXP8VRAALgAAACpWEAAMAAAANlYQAAYAAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBoZWFkZXJSZXNlcnZlZCBibG9jayBvY2N1cmVkLiBUaGlzIGlzIGNvbnNpZGVyZWQgY29ycnVwdGlvbiBieSB0aGUgZG9jdW1lbnRhdGlvbkVycm9yIGdldHRpbmcgYmxvY2sgdHlwZTogwlYQABoAAABFcnJvciBnZXR0aW5nIGJsb2NrIGNvbnRlbnQgc2l6ZTogAADkVhAAIgAAAEludmFsaWQgQmxvY2t0eXBlIG51bWJlci4gSXM6ICBTaG91bGQgYmUgb25lIG9mOiAwLCAxLCAyLCAzICgzIGlzIHJlc2VydmVkIHRob3VnaAAAABBXEAAeAAAALlcQADMAAAAAAAIAQmxvY2tzaXplIHdhcyBiaWdnZXIgdGhhbiB0aGUgYWJzb2x1dGUgbWF4aW11bSAgKDEyOGtiKS4gSXM6IAAAAHhXEAAvAAAAp1cQAA4AAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBjb250ZW50OiAAyFcQACcAAABNYWxmb3JtZWQgc2VjdGlvbiBoZWFkZXIuIFNheXMgbGl0ZXJhbHMgd291bGQgYmUgdGhpcyBsb25nOiAgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBsZWZ0APhXEAA8AAAANFgQABQAAABIWBAACwAAAENhbid0IGRlY29kZSBuZXh0IGJsb2NrIGlmIGZhaWxlZCBhbG9uZyB0aGUgd2F5LiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VDYW4ndCBkZWNvZGUgbmV4dCBibG9jayBib2R5LCB3aGlsZSBleHBlY3RpbmcgdG8gZGVjb2RlIHRoZSBoZWFkZXIgb2YgdGhlIHByZXZpb3VzIGJsb2NrLiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VFcnJvciB3aGlsZSByZWFkaW5nIGJ5dGVzIGZvciA6IAAnWRAAHgAAAEVZEAACAAAATmVlZCAgYnl0ZXMgZnJvbSB0aGUgZGljdGlvbmFyeSBidXQgaXQgaXMgb25seSAgYnl0ZXMgbG9uZwAAWFkQAAUAAABdWRAAKgAAAIdZEAALAAAAb2Zmc2V0OiAgYmlnZ2VyIHRoYW4gYnVmZmVyOiAAAACsWRAACAAAALRZEAAVAAAAQmFkIG1hZ2ljX251bSBhdCBzdGFydCBvZiB0aGUgZGljdGlvbmFyeTsgR290OiAsIEV4cGVjdGVkOiAA3FkQAC8AAAALWhAADAAAADekMOxTcGVjaWZpZWQgd2luZG93X3NpemUgaXMgdG9vIGJpZzsgUmVxdWVzdGVkOiAsIE1heDogLFoQAC0AAABZWhAABwAAAEZhaWxlZCB0byBwYXJzZS9kZWNvZGUgYmxvY2sgYm9keTogAHBaEAAjAAAARmFpbGVkIHRvIHBhcnNlIGJsb2NrIGhlYWRlcjogAACcWhAAHgAAAEZhaWxlZCB0byByZWFkIGNoZWNrc3VtOiAAAADEWhAAGQAAAERlY29kZXIgbXVzdCBpbml0aWFsaXplZCBvciByZXNldCBiZWZvcmUgdXNpbmcgaXREZWNvZGVyIGVuY291bnRlcmVkIGVycm9yIHdoaWxlIGluaXRpYWxpemluZzogABlbEAAuAAAARGVjb2RlciBlbmNvdW50ZXJlZCBlcnJvciB3aGlsZSBkcmFpbmluZyB0aGUgZGVjb2RlYnVmZmVyOiAAUFsQADsAAABGYWlsZWQgdG8gc2tpcCBieXRlcyBmb3IgdGhlIGxlbmd0aCBnaXZlbiBpbiB0aGUgZnJhbWUgaGVhZGVyVGFyZ2V0IG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGJ5dGVzIGFzIHRoZSBjb250ZW50c2l6ZSBvZiB0aGUgZnJhbWUgcmVwb3J0c0ZyYW1lIGhlYWRlciBzcGVjaWZpZWQgZGljdGlvbmFyeSBpZCAweCB0aGF0IHdhc250IHByb3ZpZGVkIGJ5IGFkZF9kaWN0KCkgb3IgcmVzZXRfd2l0aF9kaWN0KCkAACBcEAAnAAAAR1wQADcAAABjb21wcmVzc2VkIHNpemUgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzbnVtX3N0cmVhbXMgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nICgxIG9yIDQpIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzVHJpZWQgdG8gcmV1c2UgaHVmZm1hbiB0YWJsZSBidXQgaXQgd2FzIG5ldmVyIGluaXRpYWxpemVkTmVlZCA2IGJ5dGVzIHRvIGRlY29kZSBqdW1wIGhlYWRlciwgZ290IAAAfl0QACgAAAA2VhAABgAAAE5lZWQgYXQgbGVhc3QgIGJ5dGVzIHRvIGRlY29kZSBsaXRlcmFscy4gSGF2ZTogALhdEAAOAAAAxl0QACEAAAA2VhAABgAAAFBhZGRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2Vfc2VjdGlvbiB3YXMgbW9yZSB0aGFuIGEgYnl0ZSBsb25nOiAgYml0cy4gUHJvYmFibHkgY2F1c2VkIGJ5IGRhdGEgY29ycnVwdGlvbgAAXhAARgAAAEZeEAApAAAAQml0c3RyZWFtIHdhcyByZWFkIHRpbGw6ICwgc2hvdWxkIGhhdmUgYmVlbjogAAAAgF4QABkAAACZXhAAFAAAAERpZCBub3QgZGVjb2RlIGVub3VnaCBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiDAXhAAIAAAAOBeEAAUAAAAU2VxdWVuY2Ugd2FudHMgdG8gY29weSB1cCB0byBieXRlIC4gQnl0ZXMgaW4gbGl0ZXJhbHNidWZmZXI6IAAAAARfEAAiAAAAJl8QABsAAABJbGxlZ2FsIG9mZnNldDogMCBmb3VuZERvIG5vdCBzdXBwb3J0IG9mZnNldHMgYmlnZ2VyIHRoYW4gMTw8MzI7IGdvdDogAABrXxAALwAAAFJlYWQgYW4gb2Zmc2V0ID09IDAuIFRoYXQgaXMgYW4gaWxsZWdhbCB2YWx1ZSBmb3Igb2Zmc2V0c0J5dGVzdHJlYW0gZGlkIG5vdCBjb250YWluIGVub3VnaCBieXRlcyB0byBkZWNvZGUgbnVtX3NlcXVlbmNlc2NvbXByZXNzaW9uIG1vZGVzIGFyZSBub25lIGJ1dCB0aGV5IG11c3QgYmUgc2V0IHRvIHNvbWV0aGluZ05lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBsbCB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBvZiB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBtbCB0YWJsZUlsbGVnYWwgbGl0ZXJhbHNzZWN0aW9udHlwZS4gSXM6ICwgbXVzdCBiZSBpbjogMCwgMSwgMiwgMwAAAMRgEAAhAAAA5WAQABgAAABOb3QgZW5vdWdoIGJ5dGUgdG8gcGFyc2UgdGhlIGxpdGVyYWxzIHNlY3Rpb24gaGVhZGVyLiBIYXZlOiAsIE5lZWQ6IBBhEAA8AAAATGEQAAgAAABzb3VyY2UgbXVzdCBoYXZlIGF0IGxlYXN0ICBieXRlcyB0byBwYXJzZSBoZWFkZXI7IGdvdCAAAGRhEAAaAAAAfmEQABwAAAA2VhAABgAAAEFjY2xvZyBtdXN0IGJlIGF0IGxlYXN0IDFGb3VuZCBGU0UgYWNjX2xvZzogIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bSBpbiB0aGlzIGNhc2U6IADNYRAAEwAAAOBhEAArAAAAVGhlIGNvdW50ZXIgKCkgZXhjZWVkZWQgdGhlIGV4cGVjdGVkIHN1bTogLiBUaGlzIG1lYW5zIGFuIGVycm9yIG9yIGNvcnJ1cHRlZCBkYXRhIAogHGIQAA0AAAApYhAAHQAAAEZiEAAqAAAAVGhlcmUgYXJlIHRvbyBtYW55IHN5bWJvbHMgaW4gdGhpcyBkaXN0cmlidXRpb246IC4gTWF4OiAyNTYAiGIQADEAAAC5YhAACgAAAFRyaWVkIHRvIHVzZSBhbiB1bmluaXRpYWxpemVkIHRhYmxlIVNvdXJjZSBuZWVkcyB0byBoYXZlIGF0IGxlYXN0IG9uZSBieXRlSGVhZGVyIHNheXMgdGhlcmUgc2hvdWxkIGJlICBieXRlcyBmb3IgdGhlIHdlaWdodHMgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBpbiB0aGUgc3RyZWFtHmMQABwAAAA6YxAAKgAAAGRjEAAUAAAATW9yZSB0aGFuIDI1NSB3ZWlnaHRzIGRlY29kZWQgKGdvdCAgd2VpZ2h0cykuIFN0cmVhbSBpcyBwcm9iYWJseSBjb3JydXB0ZWQAAJBjEAAjAAAAs2MQACcAAABDYW4ndCBidWlsZCBodWZmbWFuIHRhYmxlIHdpdGhvdXQgYW55IHdlaWdodHNMZWZ0b3ZlciBtdXN0IGJlIHBvd2VyIG9mIHR3byBidXQgaXM6IAAZZBAAJgAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gc3RyZWFtIHRvIGRlY29tcHJlc3Mgd2VpZ2h0cy4gSXM6IAAASGQQADYAAAAZVBAADQAAAEZTRSB0YWJsZSB1c2VkIG1vcmUgYnl0ZXM6ICB0aGFuIHdlcmUgbWVhbnQgdG8gYmUgdXNlZCBmb3IgdGhlIHdob2xlIHN0cmVhbSBvZiBodWZmbWFuIHdlaWdodHMgKCkAAACQZBAAGwAAAKtkEABFAAAA8GQQAAEAAABTb3VyY2UgbmVlZHMgdG8gaGF2ZSBhdCBsZWFzdCAgYnl0ZXMsIGdvdDogAAxlEAAeAAAAKmUQAA0AAAALQ2FudCBoYXZlIHdlaWdodDogIGJpZ2dlciB0aGFuIG1heF9udW1fYml0czogAABJZRAAEgAAAFtlEAAbAAAAbWF4X2JpdHMgZGVyaXZlZCBmcm9tIHdlaWdodHMgaXM6ICBzaG91bGQgYmUgbG93ZXIgdGhhbjogAAAAiGUQACIAAACqZRAAFwAAAENhbnQgc2VydmUgdGhpcyByZXF1ZXN0LiBUaGUgcmVhZGVyIGlzIGxpbWl0ZWQgdG8gIGJpdHMsIHJlcXVlc3RlZCAgYml0c9RlEAAyAAAABmYQABEAAAAXZhAABQAAAENhbid0IHJlYWQgIGJpdHMsIG9ubHkgaGF2ZSAgYml0cyBsZWZ0AAA0ZhAACwAAAD9mEAARAAAAUGYQAAoAAAAAAAAABAAAAAQAAADJAQAAAAAAAAQAAAAEAAAAygEAAFRvb01hbnlCaXRzbnVtX3JlcXVlc3RlZF9iaXRzbGltaXQAAAAAAAAEAAAABAAAAMsBAABOb3RFbm91Z2hSZW1haW5pbmdCaXRzcmVxdWVzdGVkcmVtYWluaW5nSW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnZ290AAAAAAAABAAAAAQAAADMAQAAV2luZG93VG9vQmlnV2luZG93VG9vU21hbGwAAAAAAAAEAAAABAAAAK4BAABGcmFtZURlc2NyaXB0b3JFcnJvckRpY3RJZFRvb1NtYWxsZXhwZWN0ZWRNaXNtYXRjaGVkRnJhbWVTaXplRnJhbWVTaXplSXNaZXJvSW52YWxpZEZyYW1lU2l6ZQAAAAAEAAAABAAAAM0BAABNYWdpY051bWJlclJlYWRFcnJvcgAAAAAEAAAABAAAAM4BAABCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvcgAAAAAABAAAAAQAAADPAQAAU2tpcEZyYW1lbWFnaWNfbnVtYmVybGVuZ3RoQmxvY2tDb250ZW50UmVhZEVycm9yTWFsZm9ybWVkU2VjdGlvbkhlYWRlcmV4cGVjdGVkX2xlbnJlbWFpbmluZ19ieXRlcwAAAAAAAAAEAAAABAAAALIBAABEZWNvbXByZXNzTGl0ZXJhbHNFcnJvcgAAAAAABAAAAAQAAACzAQAATGl0ZXJhbHNTZWN0aW9uUGFyc2VFcnJvcgAAAAAAAAAEAAAABAAAALQBAABTZXF1ZW5jZXNIZWFkZXJQYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAtQEAAERlY29kZVNlcXVlbmNlRXJyb3IAAAAAAAQAAAAEAAAAtgEAAEV4ZWN1dGVTZXF1ZW5jZXNFcnJvck5vdEVub3VnaEJ5dGVzSW5EaWN0aW9uYXJ5bmVlZE9mZnNldFRvb0JpZ29mZnNldGJ1Zl9sZW4AAAAABAAAAAQAAAC4AQAAQmFkTWFnaWNOdW0AAAAAAAQAAAAEAAAAuQEAAEZTRVRhYmxlRXJyb3IAAAAAAAAABAAAAAQAAAC6AQAASHVmZm1hblRhYmxlRXJyb3JNaXNzaW5nQ29tcHJlc3NlZFNpemVNaXNzaW5nTnVtU3RyZWFtcwAAAAAABAAAAAQAAADBAQAAR2V0Qml0c0Vycm9yAAAAAAQAAAAEAAAAwgEAAEh1ZmZtYW5EZWNvZGVyRXJyb3JVbmluaXRpYWxpemVkSHVmZm1hblRhYmxlTWlzc2luZ0J5dGVzRm9ySnVtcEhlYWRlck1pc3NpbmdCeXRlc0ZvckxpdGVyYWxzbmVlZGVkAAAAAAAABAAAAAQAAADQAQAARXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzAAAAAAQAAAAEAAAA0QEAAAAAAAAEAAAABAAAANIBAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAAAAAAAQAAAAEAAAAxQEAAERlY29kZWJ1ZmZlckVycm9yTm90RW5vdWdoQnl0ZXNGb3JTZXF1ZW5jZXdhbnRlZGhhdmVaZXJvT2Zmc2V0AAAAAAAABAAAAAQAAADGAQAARlNFRGVjb2RlckVycm9yVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZU5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzRXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlSWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzAAAAAAEAAAABAAAA0wEAAG5lZWRfYXRfbGVhc3RBY2NMb2dJc1plcm9BY2NMb2dUb29CaWdtYXgAAAAABAAAAAQAAADHAQAAUHJvYmFiaWxpdHlDb3VudGVyTWlzbWF0Y2hleHBlY3RlZF9zdW1zeW1ib2xfcHJvYmFiaWxpdGllc1Rvb01hbnlTeW1ib2xzVGFibGVJc1VuaW5pdGlhbGl6ZWRTb3VyY2VJc0VtcHR5Tm90RW5vdWdoQnl0ZXNGb3JXZWlnaHRzZ290X2J5dGVzZXhwZWN0ZWRfYnl0ZXNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c0ZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAABQbhAAbQAAACoCAAARAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyX3JldmVyc2UucnMAAADQbhAAcQAAADcAAABFAAAA0G4QAHEAAAA3AAAALwAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGXQbhAAcQAAAEYAAAANAAAA0G4QAHEAAABKAAAAHgAAAFRoaXMgaXMgYSBidWcgaW4gdGhlIHByb2dyYW0uIFRoZXJlIHNob3VsZCBvbmx5IGJlIHZhbHVlcyBiZXR3ZWVuIDAuLjMvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2Jsb2Nrcy9saXRlcmFsc19zZWN0aW9uLnJzAPJvEABtAAAAewAAADQAAADybxAAbQAAAJAAAABXAAAA8m8QAG0AAACXAAAAKgAAAPJvEABtAAAAmAAAACoAAADybxAAbQAAAJsAAAAaAAAA8m8QAG0AAACoAAAAGgAAAPJvEABtAAAAtAAAAEQAAADybxAAbQAAALgAAABGAAAA8m8QAG0AAADAAAAAKgAAAPJvEABtAAAAwQAAACsAAADybxAAbQAAAMUAAABIAAAA8m8QAG0AAADNAAAAKgAAAPJvEABtAAAAzgAAACsAAADybxAAbQAAANMAAAAuAAAA8m8QAG0AAADUAAAALgAAAENhbnQgcmV0dXJuIHRoaXMgbWFueSBiaXRzL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyLnJzAGpxEABpAAAANgAAAA0AAABqcRAAaQAAAE8AAAAjAAAAYXNzZXJ0aW9uIGZhaWxlZDogbiAtIGJpdF9zaGlmdCA9PSBiaXRzX2luX2xhc3RfYnl0ZV9uZWVkZWQAanEQAGkAAABtAAAADQAAAGpxEABpAAAAcQAAAB8AAABqcRAAaQAAAGgAAAAkAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pZHggJSA4ID09IDAAanEQAGkAAABkAAAADQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaWR4ID09IG9sZF9pZHggKyBuAAAAanEQAGkAAAB3AAAACQAAAFNlcV9zdW06ICBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZGlmZmVyZW5jZSBpbiBidWZmZXJzaXplOiAAANByEAAJAAAA2XIQADEAAAAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3NlcXVlbmNlX2V4ZWN1dGlvbi5ycwAAABxzEABxAAAALwAAAAUAAAAccxAAcQAAAAsAAAAkAAAAHHMQAHEAAAAVAAAANAAAAEFsbG9jYXRpbmcgbmV3IHNwYWNlIGZvciB0aGUgcmluZ2J1ZmZlciBmYWlsZWQvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3JpbmdidWZmZXIucnMA7nMQAGkAAABhAAAAIwAAAENvdWxkIG5vdCBjcmVhdGUgbGF5b3V0IGZvciB1OCBhcnJheSBvZiBzaXplIAAAAGh0EAAtAAAA7nMQAGkAAABaAAAAIQAAAO5zEABpAAAAtAAAABUAAADucxAAaQAAAL4AAAAVAAAA7nMQAGkAAAB3AQAAHQAAAO5zEABpAAAAzgEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwDwdBAAawAAAKIAAAAZAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9saXRlcmFsc19zZWN0aW9uX2RlY29kZXIucnMAbHUQAHcAAAAUAAAAIgAAAGx1EAB3AAAAGAAAAE0AAABsdRAAdwAAADQAAAAZAAAAbHUQAHcAAAByAAAAGAAAAGx1EAB3AAAAkQAAABQAAABhc3NlcnRpb24gZmFpbGVkOiBudW1fc3RyZWFtcyA9PSAxAABsdRAAdwAAAIAAAAAJAAAAbHUQAHcAAABFAAAAGQAAAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2Rpbmcvc2VxdWVuY2Vfc2VjdGlvbl9kZWNvZGVyLnJzAHh2EAB3AAAAGAAAAB0AAAB4dhAAdwAAAHUAAAAQAAAAeHYQAHcAAADAAAAAEAAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IElsbGVnYWwgbGl0ZXJhbCBsZW5ndGggY29kZSB3YXM6IAAgdxAASwAAAHh2EAB3AAAA+gAAAA4AAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBJbGxlZ2FsIG1hdGNoIGxlbmd0aCBjb2RlIHdhczogAAAAhHcQAEkAAAB4dhAAdwAAABoBAAAOAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAD/////////////////////AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA//////////////////////////8BAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA/////////////////////////////////////3h2EAB3AAAAdgEAABwAAAB4dhAAdwAAAFMBAAAcAAAAAQEBAQICAwMEBgcICQoLDA0ODxAQAAAAEgAAABQAAAAWAAAAGAAAABwAAAAgAAAAKAAAADAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAEBAQECAgMDBAQFBwgJCgsMDQ4PEAAAACMAAAAlAAAAJwAAACkAAAArAAAALwAAADMAAAA7AAAAQwAAAFMAAABjAAAAgwAAAAMBAAADAgAAAwQAAAMIAAADEAAAAyAAAANAAAADgAAAAwABAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3R3b3gtaGFzaC0yLjEuMC9zcmMveHhoYXNoNjQucnMAAACwehAAYQAAAFQAAAAfAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9kZWNvZGVidWZmZXIucnMAJHsQAGsAAAAaAAAAHgAAACR7EABrAAAAnQAAADQAAAAkexAAawAAAOoAAAAeAAAAUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVyZAAAAAAAAAAEAAAABAAAAMoBAAAAAAAABAAAAAQAAADQAQAAYXNzZXJ0aW9uIGZhaWxlZDogeCA+IDAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2h1ZmYwL2h1ZmYwX2RlY29kZXIucnMTfBAAaQAAADEAAAAFAAAAE3wQAGkAAAA+AAAAGgAAABN8EABpAAAAUAAAACkAAAATfBAAaQAAAGgAAAAWAAAAE3wQAGkAAABqAAAAEwAAABN8EABpAAAAawAAABgAAAATfBAAaQAAAGwAAAAbAAAAE3wQAGkAAAAdAQAANgAAABN8EABpAAAAHQEAACUAAAATfBAAaQAAAB8BAAA2AAAAE3wQAGkAAAAfAQAAJQAAABN8EABpAAAA6AAAACIAAAATfBAAaQAAAPIAAAAiAAAAE3wQAGkAAAD3AAAAJgAAABN8EABpAAAA7QAAACYAAAATfBAAaQAAAFcBAAASAAAAE3wQAGkAAABfAQAAGAAAABN8EABpAAAAZQEAABUAAAATfBAAaQAAAG8BAAAbAAAAE3wQAGkAAABxAQAAGgAAABN8EABpAAAAeAEAAB4AAAByYW5rX2lkeFswXTogIHNob3VsZCBiZTogAAAAzH0QAA0AAADZfRAADAAAABN8EABpAAAAdwEAAAkAAAATfBAAaQAAAH8BAAAsAAAAE3wQAGkAAACEAQAAMQAAABN8EABpAAAAiAEAACAAAAATfBAAaQAAAIkBAAAgAAAAE3wQAGkAAABzAQAARQAAABN8EABpAAAAdAEAACEAAAATfBAAaQAAAHMBAAAeAAAAE3wQAGkAAABhAQAAGwAAABN8EABpAAAATwEAACcAAAATfBAAaQAAAFQBAAAWAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAqH4QAGsAAACiAAAAGQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzACR/EABrAAAAogAAABkAAABhc3NlcnRpb24gZmFpbGVkOiB4ID4gMC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZnNlL2ZzZV9kZWNvZGVyLnJzt38QAGUAAAA9AAAABQAAALd/EABlAAAAWgAAACcAAAC3fxAAZQAAAGUAAAAnAAAAt38QAGUAAABwAAAAIwAAALd/EABlAAAAcQAAAB0AAAC3fxAAZQAAAOIAAAApAAAAt38QAGUAAADkAAAAMQAAALd/EABlAAAA5gAAADMAAABhc3NlcnRpb24gZmFpbGVkOiBuYiA8PSBzZWxmLmFjY3VyYWN5X2xvZwAAALd/EABlAAAA6wAAAA0AAAC3fxAAZQAAANIAAAAtAAAAt38QAGUAAADAAAAALQAAALd/EABlAAAAOQEAAEEAAAC3fxAAZQAAAB4BAAAnAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHJvYiA9PSAtMbd/EABlAAAAJAEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy92ZWMvbW9kLnJzAAAARIEQAG0AAAA9CgAAJAAAAAAAAAAQAAAABAAAANQBAADVAQAA1gEAACAgICA6IAAAAQAAAAAAAADggRAAAgAAACAgICAgICAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL3B0ci9tb2QucnMA+4EQAGwAAAALAgAAAQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvc2xpY2UvaW5kZXgucnN4ghAAcAAAAEwDAAA0AAAAeIIQAHAAAABTAwAAMgAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuKS9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAAMoMQAGwAAAD7BwAAHQAAADKDEABsAAAAAwgAAB0AAAAygxAAbAAAAI0FAAAbAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5ycwAAANCDEABtAAAAKgIAABEAAADXAQAADAAAAAQAAADYAQAA2QEAANoBAADdAQAADAAAAAQAAADeAQAA3wEAANoBAEGIicIAC4UJAQAAAOABAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAMeEEABsAAAA3woAAA4AAABFcnJvcgAAAMeEEABsAAAAjQUAABsAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbinHhBAAbAAAAMAFAAANAAAAAAAAABAAAAAEAAAA1AEAANUBAADWAQAAYmFja3RyYWNlIGNhcHR1cmUgZmFpbGVkL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYW55aG93LTEuMC45OC9zcmMvZXJyb3IucnPMhRAAXAAAAGcEAAAOAAAAAQAAAAAAAAA6IAAAQIYQAAIAAAAKCkNhdXNlZCBieToKCgpzdGFjayBiYWNrdHJhY2U6U3RhY2sgYmFja3RyYWNlOgprhhAAEQAAAFMvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAACFhhAAeQAAALMHAAAJAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy43Ny9zcmMvbGliLnJzAAAQhxAAWgAAAPsYAAABAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMDAvc3JjL2NvbnZlcnQvc2xpY2VzLnJzfIcQAGwAAAAkAQAADgAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkSnNWYWx1ZSgpACqIEAAIAAAAMogQAAEAAABMYXp5IGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWQAAESIEAAqAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvb25jZV9jZWxsLTEuMjEuMy9zcmMvbGliLnJzAAAAeIgQAF0AAAAIAwAAGQAAAHJlZW50cmFudCBpbml0AADoiBAADgAAAHiIEABdAAAAegIAAA0AQZiSwgALlSMEAAAABAAAAPYBAAAvcnVzdGMvMDVmOTg0NmY4OTNiMDlhMWJlMWZjODU2MGUzM2ZjM2M4MTVjZmVjYi9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAAJIkQAEoAAACiAAAAGQAAAC9ydXN0Yy8wNWY5ODQ2Zjg5M2IwOWExYmUxZmM4NTYwZTMzZmMzYzgxNWNmZWNiL2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwCAiRAASwAAAI0FAAAbAAAAL3J1c3RjLzA1Zjk4NDZmODkzYjA5YTFiZTFmYzg1NjBlMzNmYzNjODE1Y2ZlY2IvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc9yJEABMAAAAKgIAABEAAAA6AAAA9wEAAAwAAAAEAAAA+AEAAPkBAAD6AQAAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuNy9zcmMvZGxtYWxsb2MucnNhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAFSKEAApAAAAqAQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAABUihAAKQAAAK4EAAANAAAAQWNjZXNzRXJyb3JjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uOiAAB4sQAEgAAABsaWJyYXJ5L3N0ZC9zcmMvYmFja3RyYWNlLnJzb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybXSLEAAoAAAAJAAAAAIAAACcixAAdW5zdXBwb3J0ZWQgYmFja3RyYWNlZGlzYWJsZWQgYmFja3RyYWNlAFiLEAAcAAAAigEAAB0AAAD7AQAAEAAAAAQAAAD8AQAA/QEAAAEAAAAAAAAAZW50aXR5IG5vdCBmb3VuZHBlcm1pc3Npb24gZGVuaWVkY29ubmVjdGlvbiByZWZ1c2VkY29ubmVjdGlvbiByZXNldGhvc3QgdW5yZWFjaGFibGVuZXR3b3JrIHVucmVhY2hhYmxlY29ubmVjdGlvbiBhYm9ydGVkbm90IGNvbm5lY3RlZGFkZHJlc3MgaW4gdXNlYWRkcmVzcyBub3QgYXZhaWxhYmxlbmV0d29yayBkb3duYnJva2VuIHBpcGVlbnRpdHkgYWxyZWFkeSBleGlzdHNvcGVyYXRpb24gd291bGQgYmxvY2tub3QgYSBkaXJlY3RvcnlpcyBhIGRpcmVjdG9yeWRpcmVjdG9yeSBub3QgZW1wdHlyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWZpbGVzeXN0ZW0gbG9vcCBvciBpbmRpcmVjdGlvbiBsaW1pdCAoZS5nLiBzeW1saW5rIGxvb3Apc3RhbGUgbmV0d29yayBmaWxlIGhhbmRsZWludmFsaWQgaW5wdXQgcGFyYW1ldGVyaW52YWxpZCBkYXRhdGltZWQgb3V0d3JpdGUgemVyb25vIHN0b3JhZ2Ugc3BhY2VzZWVrIG9uIHVuc2Vla2FibGUgZmlsZXF1b3RhIGV4Y2VlZGVkZmlsZSB0b28gbGFyZ2VyZXNvdXJjZSBidXN5ZXhlY3V0YWJsZSBmaWxlIGJ1c3lkZWFkbG9ja2Nyb3NzLWRldmljZSBsaW5rIG9yIHJlbmFtZXRvbyBtYW55IGxpbmtzaW52YWxpZCBmaWxlbmFtZWFyZ3VtZW50IGxpc3QgdG9vIGxvbmdvcGVyYXRpb24gaW50ZXJydXB0ZWR1bnN1cHBvcnRlZHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVvdXQgb2YgbWVtb3J5aW4gcHJvZ3Jlc3NvdGhlciBlcnJvcnVuY2F0ZWdvcml6ZWQgZXJyb3JPcwAAAAAABAAAAAQAAAD+AQAAY29kZQAAAAABAAAAAQAAAP8BAABraW5k9wEAAAwAAAAEAAAAAAIAAG1lc3NhZ2VLaW5kRXJyb3IAAAAACAAAAAQAAAABAgAAAAAAAAQAAAAEAAAAAgIAAEN1c3RvbWVycm9yIChvcyBlcnJvciApAAEAAAAAAAAAZ48QAAsAAAByjxAAAQAAADogY2Fubm90IHJlY3Vyc2l2ZWx5IGFjcXVpcmUgbXV0ZXgAAI6PEAAgAAAAbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnO4jxAALAAAABMAAAAJAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvcG9pc29uL29uY2UucnMA9I8QACMAAACbAAAAMgAAAGxpYnJhcnkvc3RkL3NyYy9zeW5jL2xhenlfbG9jay5ycwAAACiQEAAhAAAA0QAAABMAAAA8dW5rbm93bj7vv71tZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAABokBAAFQAAAH2QEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJznJAQABgAAABjAQAACQAAAAoAAAD3AQAADAAAAAQAAAADAgAAAAAAAAgAAAAEAAAABAIAAAAAAAAIAAAABAAAAAUCAAAGAgAABwIAAAgCAAAJAgAAEAAAAAQAAAAKAgAACwIAAAwCAAANAgAAbGlicmFyeS9zdGQvc3JjLy4uLy4uL2JhY2t0cmFjZS9zcmMvc3ltYm9saXplL21vZC5ycyCREAA0AAAAZwEAADAAAAABAAAAAAAAAIyPEAACAAAAIC0gAAEAAAAAAAAAdJEQAAMAAAAgICAgICAgICAgICAgICAgICAgYXQgAAA4ihAAAQAAAE5vdEZvdW5kUGVybWlzc2lvbkRlbmllZENvbm5lY3Rpb25SZWZ1c2VkQ29ubmVjdGlvblJlc2V0SG9zdFVucmVhY2hhYmxlTmV0d29ya1VucmVhY2hhYmxlQ29ubmVjdGlvbkFib3J0ZWROb3RDb25uZWN0ZWRBZGRySW5Vc2VBZGRyTm90QXZhaWxhYmxlTmV0d29ya0Rvd25Ccm9rZW5QaXBlQWxyZWFkeUV4aXN0c1dvdWxkQmxvY2tOb3RBRGlyZWN0b3J5SXNBRGlyZWN0b3J5RGlyZWN0b3J5Tm90RW1wdHlSZWFkT25seUZpbGVzeXN0ZW1GaWxlc3lzdGVtTG9vcFN0YWxlTmV0d29ya0ZpbGVIYW5kbGVJbnZhbGlkSW5wdXRJbnZhbGlkRGF0YVRpbWVkT3V0V3JpdGVaZXJvU3RvcmFnZUZ1bGxOb3RTZWVrYWJsZVF1b3RhRXhjZWVkZWRGaWxlVG9vTGFyZ2VSZXNvdXJjZUJ1c3lFeGVjdXRhYmxlRmlsZUJ1c3lEZWFkbG9ja0Nyb3NzZXNEZXZpY2VzVG9vTWFueUxpbmtzSW52YWxpZEZpbGVuYW1lQXJndW1lbnRMaXN0VG9vTG9uZ0ludGVycnVwdGVkVW5zdXBwb3J0ZWRVbmV4cGVjdGVkRW9mT3V0T2ZNZW1vcnlJblByb2dyZXNzT3RoZXJVbmNhdGVnb3JpemVkb3BlcmF0aW9uIHN1Y2Nlc3NmdWxPbmNlIGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWTakxAAKgAAAG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgcGVyZm9ybWVkIHJlY3Vyc2l2ZWx5DJQQADgAAAAQAAAAEQAA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",self.location.href));const A=BI();(typeof g=="string"||typeof Request=="function"&&g instanceof Request||typeof URL=="function"&&g instanceof URL)&&(g=fetch(g));const{instance:Q,module:I}=await II(await g,A);return gI(Q,I)}const GA=-9,JA=(9-GA)/254,zA=Math.exp(GA),CI=11,EI=11,YQ=1<{E.enqueue(this.fileBytes.slice(0,65536)),E.close()}}).pipeThrough(new TextDecoderStream).getReader();this.header="";const I=`end_header\n`;for(;;){const{value:E,done:i}=await Q.read();if(i)throw new Error("Failed to read header");this.header+=E;const D=this.header.indexOf(I);if(D>=0){this.header=this.header.slice(0,D+I.length);break}}const B=new TextEncoder().encode(this.header).length;this.data=new DataView(this.fileBytes.buffer,B),this.elements={};let C=null;this.comments=[],this.header.trim().split(`\n`).forEach((E,i)=>{const D=E.trim();if(i===0){if(D!=="ply")throw new Error("Invalid PLY header");return}if(D.length===0)return;const w=D.split(" ");switch(w[0]){case"format":if(w[1]==="binary_little_endian")this.littleEndian=!0;else if(w[1]==="binary_big_endian")this.littleEndian=!1;else throw new Error(`Unsupported PLY format: ${w[1]}`);if(w[2]!=="1.0")throw new Error(`Unsupported PLY version: ${w[2]}`);break;case"end_header":break;case"comment":this.comments.push(D.slice(8));break;case"element":{const o=w[1];C={name:o,count:Number.parseInt(w[2]),properties:{}},this.elements[o]=C;break}case"property":if(C==null)throw new Error("Property must be inside an element");w[1]==="list"?C.properties[w[4]]={isList:!0,type:w[3],countType:w[2]}:C.properties[w[2]]={isList:!1,type:w[1]};break}}),this.elements.vertex&&(this.numSplats=this.elements.vertex.count)}parseData(A){let Q=0;const I=this.data;if(I==null)throw new Error("No data to parse");for(const B in this.elements){const C=this.elements[B],{count:E,properties:i}=C,D={},w=[];for(const[s,a]of Object.entries(i))a.isList?(D[s]=[],w.push(()=>{const t=D[s];t.length=mA[a.countType](I,Q,this.littleEndian),Q+=RA[a.countType];for(let c=0;c{D[s]=mA[a.type](I,Q,this.littleEndian),Q+=RA[a.type]}));const o=A(C)??(()=>{});for(let s=0;s[0,1,2].map((h,F)=>`f_rest_${G+F*M/3}`)),i=new Array(5).fill(null).flatMap((J,G)=>[0,1,2].map((h,F)=>`f_rest_${3+G+F*M/3}`)),D=new Array(7).fill(null).flatMap((J,G)=>[0,1,2].map((h,F)=>`f_rest_${8+G+F*M/3}`)),w=C>=1?new Float32Array(3*3):void 0,o=C>=2?new Float32Array(5*3):void 0,s=C>=3?new Float32Array(7*3):void 0}function t(M,J){if(!w)throw new Error("Missing sh1");for(const[G,h]of E.entries())w[G]=J[h]*8/255-4;if(o)for(const[G,h]of i.entries())o[G]=J[h]*8/255-4;if(s)for(const[G,h]of D.entries())s[G]=J[h]*8/255-4;Q==null||Q(M,w,o,s)}function c(M){const{min_x:J,min_y:G,min_z:h,max_x:F,max_y:U,max_z:K,min_scale_x:T,min_scale_y:W,min_scale_z:X,max_scale_x:Y,max_scale_y:$,max_scale_z:AA,min_r:m,min_g:j,min_b:b,max_r:p,max_g:O,max_b:H}=M.properties;if(!J||!G||!h||!F||!U||!K||!T||!W||!X||!Y||!$||!AA||!m||!j||!b||!p||!O||!H)throw new Error("Missing PLY chunk properties");return I=!0,(oA,QA)=>{const{min_x:q,min_y:r,min_z:z,max_x:f,max_y:V,max_z:R,min_scale_x:IA,min_scale_y:v,min_scale_z:sA,max_scale_x:P,max_scale_y:BA,max_scale_z:gA,min_r:cA,min_g:CA,min_b:aA,max_r:tA,max_g:N,max_b:d}=QA;B.push({min_x:q,min_y:r,min_z:z,max_x:f,max_y:V,max_z:R,min_scale_x:IA,min_scale_y:v,min_scale_z:sA,max_scale_x:P,max_scale_y:BA,max_scale_z:gA,min_r:cA,min_g:CA,min_b:aA,max_r:tA,max_g:N,max_b:d})}}function y(M){if(Q&&M.name==="sh")return C=lQ(M.properties),a(),t;if(M.name!=="vertex")return null;const{packed_position:J,packed_rotation:G,packed_scale:h,packed_color:F}=M.properties;if(!J||!G||!h||!F)throw new Error("Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color");const U=Math.sqrt(2);return(K,T)=>{const W=B[K>>>8];if(W==null)throw new Error("Missing PLY chunk");const{min_x:X,min_y:Y,min_z:$,max_x:AA,max_y:m,max_z:j,min_scale_x:b,min_scale_y:p,min_scale_z:O,max_scale_x:H,max_scale_y:oA,max_scale_z:QA,min_r:q,min_g:r,min_b:z,max_r:f,max_g:V,max_b:R}=W,{packed_position:IA,packed_rotation:v,packed_scale:sA,packed_color:P}=T,BA=(IA>>>21&2047)/2047*(AA-X)+X,gA=(IA>>>11&1023)/1023*(m-Y)+Y,cA=(IA&2047)/2047*(j-$)+$,CA=((v>>>20&1023)/1023-.5)*U,aA=((v>>>10&1023)/1023-.5)*U,tA=((v&1023)/1023-.5)*U,N=Math.sqrt(Math.max(0,1-CA*CA-aA*aA-tA*tA)),d=v>>>30,L=d===0?CA:d===1?N:aA,k=d<=1?aA:d===2?N:tA,kA=d<=2?tA:N,tQ=d===0?N:CA,cQ=Math.exp((sA>>>21&2047)/2047*(H-b)+b),GQ=Math.exp((sA>>>11&1023)/1023*(oA-p)+p),hQ=Math.exp((sA&2047)/2047*(QA-O)+O),yQ=(P>>>24&255)/255*(f-q)+q,MQ=(P>>>16&255)/255*(V-r)+r,NQ=(P>>>8&255)/255*(R-z)+z,FQ=(P&255)/255;A(K,BA,gA,cA,cQ,GQ,hQ,L,k,kA,tQ,FQ,yQ,MQ,NQ)}}const n=M=>{if(M.name==="chunk"&&this.comments.some(V=>V.toLowerCase().includes("supersplat")))return c(M);if(I)return y(M);if(M.name!=="vertex")return null;const{x:J,y:G,z:h,scale_0:F,scale_1:U,scale_2:K,rot_0:T,rot_1:W,rot_2:X,rot_3:Y,opacity:$,f_dc_0:AA,f_dc_1:m,f_dc_2:j,red:b,green:p,blue:O,alpha:H}=M.properties;if(!J||!G||!h)throw new Error("Missing PLY properties: x, y, z");const oA=F&&U&&K,QA=T&&W&&X&&Y,q=H!=null?pA[H.type]:1,r=b!=null?pA[b.type]:1,z=p!=null?pA[p.type]:1,f=O!=null?pA[O.type]:1;return C=lQ(M.properties),a(),(V,R)=>{const IA=oA?Math.exp(R.scale_0):lA.defaultPointScale,v=oA?Math.exp(R.scale_1):lA.defaultPointScale,sA=oA?Math.exp(R.scale_2):lA.defaultPointScale,P=QA?R.rot_1:0,BA=QA?R.rot_2:0,gA=QA?R.rot_3:0,cA=QA?R.rot_0:1,CA=$!=null?1/(1+Math.exp(-R.opacity)):H!=null?R.alpha/q:1,aA=AA!=null?R.f_dc_0*WA+.5:b!=null?R.red/r:1,tA=m!=null?R.f_dc_1*WA+.5:p!=null?R.green/z:1,N=j!=null?R.f_dc_2*WA+.5:O!=null?R.blue/f:1;if(A(V,R.x,R.y,R.z,IA,v,sA,P,BA,gA,cA,CA,aA,tA,N),Q&&w){if(w)for(const[d,L]of E.entries())w[d]=R[L];if(o)for(const[d,L]of i.entries())o[d]=R[L];if(s)for(const[d,L]of D.entries())s[d]=R[L];Q(V,w,o,s)}}};this.parseData(n)}injectRgba(A){let Q=0;const I=this.data;if(I==null)throw new Error("No parsed data");if(A.length!==this.numSplats*4)throw new Error("Invalid RGBA array length");for(const B in this.elements){const C=this.elements[B],{count:E,properties:i}=C,D=[];let w=0;const o=B==="vertex";if(o){for(const s of["opacity","f_dc_0","f_dc_1","f_dc_2"])if(!i[s]||i[s].type!=="float")throw new Error(`Can\'t injectRgba due to property: ${s}`)}for(const[s,a]of Object.entries(i))if(a.isList)D.push(()=>{const t=mA[a.countType](I,Q,this.littleEndian);Q+=RA[a.countType],Q+=t*RA[a.type]});else{if(o)if(s==="f_dc_0"||s==="f_dc_1"||s==="f_dc_2"){const t=Number.parseInt(s.slice(5));D.push(()=>{const c=(A[w+t]/255-.5)/WA;rQ[a.type](I,Q,this.littleEndian,c)})}else s==="opacity"&&D.push(()=>{const t=Math.max(-100,Math.min(100,-Math.log(1/(A[w+3]/255)-1)));rQ[a.type](I,Q,this.littleEndian,t)});D.push(()=>{Q+=RA[a.type]})}for(let s=0;sg.getInt8(A),uchar:(g,A,Q)=>g.getUint8(A),short:(g,A,Q)=>g.getInt16(A,Q),ushort:(g,A,Q)=>g.getUint16(A,Q),int:(g,A,Q)=>g.getInt32(A,Q),uint:(g,A,Q)=>g.getUint32(A,Q),float:(g,A,Q)=>g.getFloat32(A,Q),double:(g,A,Q)=>g.getFloat64(A,Q)},rQ={char:(g,A,Q,I)=>{g.setInt8(A,I)},uchar:(g,A,Q,I)=>{g.setUint8(A,I)},short:(g,A,Q,I)=>{g.setInt16(A,I,Q)},ushort:(g,A,Q,I)=>{g.setUint16(A,I,Q)},int:(g,A,Q,I)=>{g.setInt32(A,I,Q)},uint:(g,A,Q,I)=>{g.setUint32(A,I,Q)},float:(g,A,Q,I)=>{g.setFloat32(A,I,Q)},double:(g,A,Q,I)=>{g.setFloat64(A,I,Q)}},RA={char:1,uchar:1,short:2,ushort:2,int:4,uint:4,float:4,double:8},pA={char:127,uchar:255,short:32767,ushort:65535,int:2147483647,uint:4294967295,float:1,double:1},DI={0:0,9:1,24:2,45:3},wI={0:0,1:9,2:24,3:45};function lQ(g){let A=0;for(;g[`f_rest_${A}`];)A+=1;const Q=DI[A];if(Q==null)throw new Error(`Unsupported number of SH coefficients: ${A}`);return Q}var Z=Uint8Array,nA=Uint16Array,sI=Int32Array,LQ=new Z([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),SQ=new Z([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),oI=new Z([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),HQ=function(g,A){for(var Q=new nA(31),I=0;I<31;++I)Q[I]=A+=1<>1|(e&21845)<<1;hA=(hA&52428)>>2|(hA&13107)<<2,hA=(hA&61680)>>4|(hA&3855)<<4,OA[e]=((hA&65280)>>8|(hA&255)<<8)>>1}for(var SA=function(g,A,Q){for(var I=g.length,B=0,C=new nA(A);B>D]=w}else for(i=new nA(I),B=0;B>15-g[B]);return i},HA=new Z(288),e=0;e<144;++e)HA[e]=8;for(var e=144;e<256;++e)HA[e]=9;for(var e=256;e<280;++e)HA[e]=7;for(var e=280;e<288;++e)HA[e]=8;for(var KQ=new Z(32),e=0;e<32;++e)KQ[e]=5;var GI=SA(HA,9,1),hI=SA(KQ,5,1),vA=function(g){for(var A=g[0],Q=1;QA&&(A=g[Q]);return A},EA=function(g,A,Q){var I=A/8|0;return(g[I]|g[I+1]<<8)>>(A&7)&Q},PA=function(g,A){var Q=A/8|0;return(g[Q]|g[Q+1]<<8|g[Q+2]<<16)>>(A&7)},bQ=function(g){return(g+7)/8|0},fA=function(g,A,Q){return(A==null||A<0)&&(A=0),(Q==null||Q>g.length)&&(Q=g.length),new Z(g.subarray(A,Q))},yI=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],_=function(g,A,Q){var I=new Error(A||yI[g]);if(I.code=g,Error.captureStackTrace&&Error.captureStackTrace(I,_),!Q)throw I;return I},MI=function(g,A,Q,I){var B=g.length,C=0;if(!B||A.f&&!A.l)return Q||new Z(0);var E=!Q,i=E||A.i!=2,D=A.i;E&&(Q=new Z(B*3));var w=function(P){var BA=Q.length;if(P>BA){var gA=new Z(Math.max(BA*2,P));gA.set(Q),Q=gA}},o=A.f||0,s=A.p||0,a=A.b||0,t=A.l,c=A.d,y=A.m,n=A.n,M=B*8;do{if(!t){o=EA(g,s,1);var J=EA(g,s+1,3);if(s+=3,J)if(J==1)t=GI,c=hI,y=9,n=5;else if(J==2){var U=EA(g,s,31)+257,K=EA(g,s+10,15)+4,T=U+EA(g,s+5,31)+1;s+=14;for(var W=new Z(T),X=new Z(19),Y=0;Y>4;if(G<16)W[Y++]=G;else{var b=0,p=0;for(G==16?(p=3+EA(g,s,3),s+=2,b=W[Y-1]):G==17?(p=3+EA(g,s,7),s+=3):G==18&&(p=11+EA(g,s,127),s+=7);p--;)W[Y++]=b}}var O=W.subarray(0,U),H=W.subarray(U);y=vA(O),n=vA(H),t=SA(O,y,1),c=SA(H,n,1)}else _(1);else{var G=bQ(s)+4,h=g[G-4]|g[G-3]<<8,F=G+h;if(F>B){D&&_(0);break}i&&w(a+h),Q.set(g.subarray(G,F),a),A.b=a+=h,A.p=s=F*8,A.f=o;continue}if(s>M){D&&_(0);break}}i&&w(a+131072);for(var oA=(1<>4;if(s+=b&15,s>M){D&&_(0);break}if(b||_(2),r<256)Q[a++]=r;else if(r==256){q=s,t=null;break}else{var z=r-254;if(r>264){var Y=r-257,f=LQ[Y];z=EA(g,s,(1<>4;V||_(3),s+=V&15;var H=cI[R];if(R>3){var f=SQ[R];H+=PA(g,s)&(1<M){D&&_(0);break}i&&w(a+131072);var IA=a+z;if(a>3&1)+(A>>4&1);I>0;I-=!g[Q++]);return Q+(A&2)},_A=function(){function g(A,Q){typeof A=="function"&&(Q=A,A={}),this.ondata=Q;var I=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:I?I.length:0},this.o=new Z(32768),this.p=new Z(0),I&&this.o.set(I)}return g.prototype.e=function(A){if(this.ondata||_(5),this.d&&_(4),!this.p.length)this.p=A;else if(A.length){var Q=new Z(this.p.length+A.length);Q.set(this.p),Q.set(A,this.p.length),this.p=Q}},g.prototype.c=function(A){this.s.i=+(this.d=A||!1);var Q=this.s.b,I=MI(this.p,this.s,this.o);this.ondata(fA(I,Q,this.s.b),this.d),this.o=fA(I,this.s.b-32768),this.s.b=this.o.length,this.p=fA(this.p,this.s.p/8|0),this.s.p&=7},g.prototype.push=function(A,Q){this.e(A),this.c(Q)},g}(),kI=function(){function g(A,Q){this.v=1,this.r=0,_A.call(this,A,Q)}return g.prototype.push=function(A,Q){if(_A.prototype.e.call(this,A),this.r+=A.length,this.v){var I=this.p.subarray(this.v-1),B=I.length>3?FI(I):4;if(B>I.length){if(!Q)return}else this.v>1&&this.onmember&&this.onmember(this.r-I.length);this.p=I.subarray(B),this.v=0}_A.prototype.c.call(this,Q),this.s.f&&!this.s.l&&!Q&&(this.v=bQ(this.s.p)+9,this.s={i:0},this.o=new Z(0),this.push(new Z(0),Q))},g}(),JI=typeof TextDecoder<"u"&&new TextDecoder,RI=0;try{JI.decode(NI,{stream:!0}),RI=1}catch{}/**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */const qQ="172",nI="",iA="srgb",xQ="srgb-linear",WQ="linear",$A="srgb";function u(g,A,Q){return Math.max(A,Math.min(Q,g))}function YI(g,A){return(g%A+A)%A}function AQ(g,A,Q){return(1-Q)*g+Q*A}class dA{constructor(A,Q,I,B,C,E,i,D,w){dA.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],A!==void 0&&this.set(A,Q,I,B,C,E,i,D,w)}set(A,Q,I,B,C,E,i,D,w){const o=this.elements;return o[0]=A,o[1]=B,o[2]=i,o[3]=Q,o[4]=C,o[5]=D,o[6]=I,o[7]=E,o[8]=w,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(A){const Q=this.elements,I=A.elements;return Q[0]=I[0],Q[1]=I[1],Q[2]=I[2],Q[3]=I[3],Q[4]=I[4],Q[5]=I[5],Q[6]=I[6],Q[7]=I[7],Q[8]=I[8],this}extractBasis(A,Q,I){return A.setFromMatrix3Column(this,0),Q.setFromMatrix3Column(this,1),I.setFromMatrix3Column(this,2),this}setFromMatrix4(A){const Q=A.elements;return this.set(Q[0],Q[4],Q[8],Q[1],Q[5],Q[9],Q[2],Q[6],Q[10]),this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,Q){const I=A.elements,B=Q.elements,C=this.elements,E=I[0],i=I[3],D=I[6],w=I[1],o=I[4],s=I[7],a=I[2],t=I[5],c=I[8],y=B[0],n=B[3],M=B[6],J=B[1],G=B[4],h=B[7],F=B[2],U=B[5],K=B[8];return C[0]=E*y+i*J+D*F,C[3]=E*n+i*G+D*U,C[6]=E*M+i*h+D*K,C[1]=w*y+o*J+s*F,C[4]=w*n+o*G+s*U,C[7]=w*M+o*h+s*K,C[2]=a*y+t*J+c*F,C[5]=a*n+t*G+c*U,C[8]=a*M+t*h+c*K,this}multiplyScalar(A){const Q=this.elements;return Q[0]*=A,Q[3]*=A,Q[6]*=A,Q[1]*=A,Q[4]*=A,Q[7]*=A,Q[2]*=A,Q[5]*=A,Q[8]*=A,this}determinant(){const A=this.elements,Q=A[0],I=A[1],B=A[2],C=A[3],E=A[4],i=A[5],D=A[6],w=A[7],o=A[8];return Q*E*o-Q*i*w-I*C*o+I*i*D+B*C*w-B*E*D}invert(){const A=this.elements,Q=A[0],I=A[1],B=A[2],C=A[3],E=A[4],i=A[5],D=A[6],w=A[7],o=A[8],s=o*E-i*w,a=i*D-o*C,t=w*C-E*D,c=Q*s+I*a+B*t;if(c===0)return this.set(0,0,0,0,0,0,0,0,0);const y=1/c;return A[0]=s*y,A[1]=(B*w-o*I)*y,A[2]=(i*I-B*E)*y,A[3]=a*y,A[4]=(o*Q-B*D)*y,A[5]=(B*C-i*Q)*y,A[6]=t*y,A[7]=(I*D-w*Q)*y,A[8]=(E*Q-I*C)*y,this}transpose(){let A;const Q=this.elements;return A=Q[1],Q[1]=Q[3],Q[3]=A,A=Q[2],Q[2]=Q[6],Q[6]=A,A=Q[5],Q[5]=Q[7],Q[7]=A,this}getNormalMatrix(A){return this.setFromMatrix4(A).invert().transpose()}transposeIntoArray(A){const Q=this.elements;return A[0]=Q[0],A[1]=Q[3],A[2]=Q[6],A[3]=Q[1],A[4]=Q[4],A[5]=Q[7],A[6]=Q[2],A[7]=Q[5],A[8]=Q[8],this}setUvTransform(A,Q,I,B,C,E,i){const D=Math.cos(C),w=Math.sin(C);return this.set(I*D,I*w,-I*(D*E+w*i)+E+A,-B*w,B*D,-B*(-w*E+D*i)+i+Q,0,0,1),this}scale(A,Q){return this.premultiply(QQ.makeScale(A,Q)),this}rotate(A){return this.premultiply(QQ.makeRotation(-A)),this}translate(A,Q){return this.premultiply(QQ.makeTranslation(A,Q)),this}makeTranslation(A,Q){return A.isVector2?this.set(1,0,A.x,0,1,A.y,0,0,1):this.set(1,0,A,0,1,Q,0,0,1),this}makeRotation(A){const Q=Math.cos(A),I=Math.sin(A);return this.set(Q,-I,0,I,Q,0,0,0,1),this}makeScale(A,Q){return this.set(A,0,0,0,Q,0,0,0,1),this}equals(A){const Q=this.elements,I=A.elements;for(let B=0;B<9;B++)if(Q[B]!==I[B])return!1;return!0}fromArray(A,Q=0){for(let I=0;I<9;I++)this.elements[I]=A[I+Q];return this}toArray(A=[],Q=0){const I=this.elements;return A[Q]=I[0],A[Q+1]=I[1],A[Q+2]=I[2],A[Q+3]=I[3],A[Q+4]=I[4],A[Q+5]=I[5],A[Q+6]=I[6],A[Q+7]=I[7],A[Q+8]=I[8],A}clone(){return new this.constructor().fromArray(this.elements)}}const QQ=new dA,mQ=new dA().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),pQ=new dA().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function eI(){const g={enabled:!0,workingColorSpace:xQ,spaces:{},convert:function(B,C,E){return this.enabled===!1||C===E||!C||!E||(this.spaces[C].transfer===$A&&(B.r=YA(B.r),B.g=YA(B.g),B.b=YA(B.b)),this.spaces[C].primaries!==this.spaces[E].primaries&&(B.applyMatrix3(this.spaces[C].toXYZ),B.applyMatrix3(this.spaces[E].fromXYZ)),this.spaces[E].transfer===$A&&(B.r=eA(B.r),B.g=eA(B.g),B.b=eA(B.b))),B},fromWorkingColorSpace:function(B,C){return this.convert(B,this.workingColorSpace,C)},toWorkingColorSpace:function(B,C){return this.convert(B,C,this.workingColorSpace)},getPrimaries:function(B){return this.spaces[B].primaries},getTransfer:function(B){return B===nI?WQ:this.spaces[B].transfer},getLuminanceCoefficients:function(B,C=this.workingColorSpace){return B.fromArray(this.spaces[C].luminanceCoefficients)},define:function(B){Object.assign(this.spaces,B)},_getMatrix:function(B,C,E){return B.copy(this.spaces[C].toXYZ).multiply(this.spaces[E].fromXYZ)},_getDrawingBufferColorSpace:function(B){return this.spaces[B].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(B=this.workingColorSpace){return this.spaces[B].workingColorSpaceConfig.unpackColorSpace}},A=[.64,.33,.3,.6,.15,.06],Q=[.2126,.7152,.0722],I=[.3127,.329];return g.define({[xQ]:{primaries:A,whitePoint:I,transfer:WQ,toXYZ:mQ,fromXYZ:pQ,luminanceCoefficients:Q,workingColorSpaceConfig:{unpackColorSpace:iA},outputColorSpaceConfig:{drawingBufferColorSpace:iA}},[iA]:{primaries:A,whitePoint:I,transfer:$A,toXYZ:mQ,fromXYZ:pQ,luminanceCoefficients:Q,outputColorSpaceConfig:{drawingBufferColorSpace:iA}}}),g}const DA=eI();function YA(g){return g<.04045?g*.0773993808:Math.pow(g*.9478672986+.0521327014,2.4)}function eA(g){return g<.0031308?g*12.92:1.055*Math.pow(g,.41666)-.055}class IQ{constructor(A=0,Q=0,I=0,B=1){this.isQuaternion=!0,this._x=A,this._y=Q,this._z=I,this._w=B}static slerpFlat(A,Q,I,B,C,E,i){let D=I[B+0],w=I[B+1],o=I[B+2],s=I[B+3];const a=C[E+0],t=C[E+1],c=C[E+2],y=C[E+3];if(i===0){A[Q+0]=D,A[Q+1]=w,A[Q+2]=o,A[Q+3]=s;return}if(i===1){A[Q+0]=a,A[Q+1]=t,A[Q+2]=c,A[Q+3]=y;return}if(s!==y||D!==a||w!==t||o!==c){let n=1-i;const M=D*a+w*t+o*c+s*y,J=M>=0?1:-1,G=1-M*M;if(G>Number.EPSILON){const F=Math.sqrt(G),U=Math.atan2(F,M*J);n=Math.sin(n*U)/F,i=Math.sin(i*U)/F}const h=i*J;if(D=D*n+a*h,w=w*n+t*h,o=o*n+c*h,s=s*n+y*h,n===1-i){const F=1/Math.sqrt(D*D+w*w+o*o+s*s);D*=F,w*=F,o*=F,s*=F}}A[Q]=D,A[Q+1]=w,A[Q+2]=o,A[Q+3]=s}static multiplyQuaternionsFlat(A,Q,I,B,C,E){const i=I[B],D=I[B+1],w=I[B+2],o=I[B+3],s=C[E],a=C[E+1],t=C[E+2],c=C[E+3];return A[Q]=i*c+o*s+D*t-w*a,A[Q+1]=D*c+o*a+w*s-i*t,A[Q+2]=w*c+o*t+i*a-D*s,A[Q+3]=o*c-i*s-D*a-w*t,A}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get w(){return this._w}set w(A){this._w=A,this._onChangeCallback()}set(A,Q,I,B){return this._x=A,this._y=Q,this._z=I,this._w=B,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(A){return this._x=A.x,this._y=A.y,this._z=A.z,this._w=A.w,this._onChangeCallback(),this}setFromEuler(A,Q=!0){const I=A._x,B=A._y,C=A._z,E=A._order,i=Math.cos,D=Math.sin,w=i(I/2),o=i(B/2),s=i(C/2),a=D(I/2),t=D(B/2),c=D(C/2);switch(E){case"XYZ":this._x=a*o*s+w*t*c,this._y=w*t*s-a*o*c,this._z=w*o*c+a*t*s,this._w=w*o*s-a*t*c;break;case"YXZ":this._x=a*o*s+w*t*c,this._y=w*t*s-a*o*c,this._z=w*o*c-a*t*s,this._w=w*o*s+a*t*c;break;case"ZXY":this._x=a*o*s-w*t*c,this._y=w*t*s+a*o*c,this._z=w*o*c+a*t*s,this._w=w*o*s-a*t*c;break;case"ZYX":this._x=a*o*s-w*t*c,this._y=w*t*s+a*o*c,this._z=w*o*c-a*t*s,this._w=w*o*s+a*t*c;break;case"YZX":this._x=a*o*s+w*t*c,this._y=w*t*s+a*o*c,this._z=w*o*c-a*t*s,this._w=w*o*s-a*t*c;break;case"XZY":this._x=a*o*s-w*t*c,this._y=w*t*s-a*o*c,this._z=w*o*c+a*t*s,this._w=w*o*s+a*t*c;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+E)}return Q===!0&&this._onChangeCallback(),this}setFromAxisAngle(A,Q){const I=Q/2,B=Math.sin(I);return this._x=A.x*B,this._y=A.y*B,this._z=A.z*B,this._w=Math.cos(I),this._onChangeCallback(),this}setFromRotationMatrix(A){const Q=A.elements,I=Q[0],B=Q[4],C=Q[8],E=Q[1],i=Q[5],D=Q[9],w=Q[2],o=Q[6],s=Q[10],a=I+i+s;if(a>0){const t=.5/Math.sqrt(a+1);this._w=.25/t,this._x=(o-D)*t,this._y=(C-w)*t,this._z=(E-B)*t}else if(I>i&&I>s){const t=2*Math.sqrt(1+I-i-s);this._w=(o-D)/t,this._x=.25*t,this._y=(B+E)/t,this._z=(C+w)/t}else if(i>s){const t=2*Math.sqrt(1+i-I-s);this._w=(C-w)/t,this._x=(B+E)/t,this._y=.25*t,this._z=(D+o)/t}else{const t=2*Math.sqrt(1+s-I-i);this._w=(E-B)/t,this._x=(C+w)/t,this._y=(D+o)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(A,Q){let I=A.dot(Q)+1;return IMath.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=I):(this._x=0,this._y=-A.z,this._z=A.y,this._w=I)):(this._x=A.y*Q.z-A.z*Q.y,this._y=A.z*Q.x-A.x*Q.z,this._z=A.x*Q.y-A.y*Q.x,this._w=I),this.normalize()}angleTo(A){return 2*Math.acos(Math.abs(u(this.dot(A),-1,1)))}rotateTowards(A,Q){const I=this.angleTo(A);if(I===0)return this;const B=Math.min(1,Q/I);return this.slerp(A,B),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(A){return this._x*A._x+this._y*A._y+this._z*A._z+this._w*A._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let A=this.length();return A===0?(this._x=0,this._y=0,this._z=0,this._w=1):(A=1/A,this._x=this._x*A,this._y=this._y*A,this._z=this._z*A,this._w=this._w*A),this._onChangeCallback(),this}multiply(A){return this.multiplyQuaternions(this,A)}premultiply(A){return this.multiplyQuaternions(A,this)}multiplyQuaternions(A,Q){const I=A._x,B=A._y,C=A._z,E=A._w,i=Q._x,D=Q._y,w=Q._z,o=Q._w;return this._x=I*o+E*i+B*w-C*D,this._y=B*o+E*D+C*i-I*w,this._z=C*o+E*w+I*D-B*i,this._w=E*o-I*i-B*D-C*w,this._onChangeCallback(),this}slerp(A,Q){if(Q===0)return this;if(Q===1)return this.copy(A);const I=this._x,B=this._y,C=this._z,E=this._w;let i=E*A._w+I*A._x+B*A._y+C*A._z;if(i<0?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,i=-i):this.copy(A),i>=1)return this._w=E,this._x=I,this._y=B,this._z=C,this;const D=1-i*i;if(D<=Number.EPSILON){const t=1-Q;return this._w=t*E+Q*this._w,this._x=t*I+Q*this._x,this._y=t*B+Q*this._y,this._z=t*C+Q*this._z,this.normalize(),this}const w=Math.sqrt(D),o=Math.atan2(w,i),s=Math.sin((1-Q)*o)/w,a=Math.sin(Q*o)/w;return this._w=E*s+this._w*a,this._x=I*s+this._x*a,this._y=B*s+this._y*a,this._z=C*s+this._z*a,this._onChangeCallback(),this}slerpQuaternions(A,Q,I){return this.copy(A).slerp(Q,I)}random(){const A=2*Math.PI*Math.random(),Q=2*Math.PI*Math.random(),I=Math.random(),B=Math.sqrt(1-I),C=Math.sqrt(I);return this.set(B*Math.sin(A),B*Math.cos(A),C*Math.sin(Q),C*Math.cos(Q))}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w}fromArray(A,Q=0){return this._x=A[Q],this._y=A[Q+1],this._z=A[Q+2],this._w=A[Q+3],this._onChangeCallback(),this}toArray(A=[],Q=0){return A[Q]=this._x,A[Q+1]=this._y,A[Q+2]=this._z,A[Q+3]=this._w,A}fromBufferAttribute(A,Q){return this._x=A.getX(Q),this._y=A.getY(Q),this._z=A.getZ(Q),this._w=A.getW(Q),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class FA{constructor(A=0,Q=0,I=0){FA.prototype.isVector3=!0,this.x=A,this.y=Q,this.z=I}set(A,Q,I){return I===void 0&&(I=this.z),this.x=A,this.y=Q,this.z=I,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setComponent(A,Q){switch(A){case 0:this.x=Q;break;case 1:this.y=Q;break;case 2:this.z=Q;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+A)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this}addVectors(A,Q){return this.x=A.x+Q.x,this.y=A.y+Q.y,this.z=A.z+Q.z,this}addScaledVector(A,Q){return this.x+=A.x*Q,this.y+=A.y*Q,this.z+=A.z*Q,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this}subVectors(A,Q){return this.x=A.x-Q.x,this.y=A.y-Q.y,this.z=A.z-Q.z,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this}multiplyVectors(A,Q){return this.x=A.x*Q.x,this.y=A.y*Q.y,this.z=A.z*Q.z,this}applyEuler(A){return this.applyQuaternion(fQ.setFromEuler(A))}applyAxisAngle(A,Q){return this.applyQuaternion(fQ.setFromAxisAngle(A,Q))}applyMatrix3(A){const Q=this.x,I=this.y,B=this.z,C=A.elements;return this.x=C[0]*Q+C[3]*I+C[6]*B,this.y=C[1]*Q+C[4]*I+C[7]*B,this.z=C[2]*Q+C[5]*I+C[8]*B,this}applyNormalMatrix(A){return this.applyMatrix3(A).normalize()}applyMatrix4(A){const Q=this.x,I=this.y,B=this.z,C=A.elements,E=1/(C[3]*Q+C[7]*I+C[11]*B+C[15]);return this.x=(C[0]*Q+C[4]*I+C[8]*B+C[12])*E,this.y=(C[1]*Q+C[5]*I+C[9]*B+C[13])*E,this.z=(C[2]*Q+C[6]*I+C[10]*B+C[14])*E,this}applyQuaternion(A){const Q=this.x,I=this.y,B=this.z,C=A.x,E=A.y,i=A.z,D=A.w,w=2*(E*B-i*I),o=2*(i*Q-C*B),s=2*(C*I-E*Q);return this.x=Q+D*w+E*s-i*o,this.y=I+D*o+i*w-C*s,this.z=B+D*s+C*o-E*w,this}project(A){return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix)}unproject(A){return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld)}transformDirection(A){const Q=this.x,I=this.y,B=this.z,C=A.elements;return this.x=C[0]*Q+C[4]*I+C[8]*B,this.y=C[1]*Q+C[5]*I+C[9]*B,this.z=C[2]*Q+C[6]*I+C[10]*B,this.normalize()}divide(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this}divideScalar(A){return this.multiplyScalar(1/A)}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this}clamp(A,Q){return this.x=u(this.x,A.x,Q.x),this.y=u(this.y,A.y,Q.y),this.z=u(this.z,A.z,Q.z),this}clampScalar(A,Q){return this.x=u(this.x,A,Q),this.y=u(this.y,A,Q),this.z=u(this.z,A,Q),this}clampLength(A,Q){const I=this.length();return this.divideScalar(I||1).multiplyScalar(u(I,A,Q))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,Q){return this.x+=(A.x-this.x)*Q,this.y+=(A.y-this.y)*Q,this.z+=(A.z-this.z)*Q,this}lerpVectors(A,Q,I){return this.x=A.x+(Q.x-A.x)*I,this.y=A.y+(Q.y-A.y)*I,this.z=A.z+(Q.z-A.z)*I,this}cross(A){return this.crossVectors(this,A)}crossVectors(A,Q){const I=A.x,B=A.y,C=A.z,E=Q.x,i=Q.y,D=Q.z;return this.x=B*D-C*i,this.y=C*E-I*D,this.z=I*i-B*E,this}projectOnVector(A){const Q=A.lengthSq();if(Q===0)return this.set(0,0,0);const I=A.dot(this)/Q;return this.copy(A).multiplyScalar(I)}projectOnPlane(A){return BQ.copy(this).projectOnVector(A),this.sub(BQ)}reflect(A){return this.sub(BQ.copy(A).multiplyScalar(2*this.dot(A)))}angleTo(A){const Q=Math.sqrt(this.lengthSq()*A.lengthSq());if(Q===0)return Math.PI/2;const I=this.dot(A)/Q;return Math.acos(u(I,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const Q=this.x-A.x,I=this.y-A.y,B=this.z-A.z;return Q*Q+I*I+B*B}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)+Math.abs(this.z-A.z)}setFromSpherical(A){return this.setFromSphericalCoords(A.radius,A.phi,A.theta)}setFromSphericalCoords(A,Q,I){const B=Math.sin(Q)*A;return this.x=B*Math.sin(I),this.y=Math.cos(Q)*A,this.z=B*Math.cos(I),this}setFromCylindrical(A){return this.setFromCylindricalCoords(A.radius,A.theta,A.y)}setFromCylindricalCoords(A,Q,I){return this.x=A*Math.sin(Q),this.y=I,this.z=A*Math.cos(Q),this}setFromMatrixPosition(A){const Q=A.elements;return this.x=Q[12],this.y=Q[13],this.z=Q[14],this}setFromMatrixScale(A){const Q=this.setFromMatrixColumn(A,0).length(),I=this.setFromMatrixColumn(A,1).length(),B=this.setFromMatrixColumn(A,2).length();return this.x=Q,this.y=I,this.z=B,this}setFromMatrixColumn(A,Q){return this.fromArray(A.elements,Q*4)}setFromMatrix3Column(A,Q){return this.fromArray(A.elements,Q*3)}setFromEuler(A){return this.x=A._x,this.y=A._y,this.z=A._z,this}setFromColor(A){return this.x=A.r,this.y=A.g,this.z=A.b,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z}fromArray(A,Q=0){return this.x=A[Q],this.y=A[Q+1],this.z=A[Q+2],this}toArray(A=[],Q=0){return A[Q]=this.x,A[Q+1]=this.y,A[Q+2]=this.z,A}fromBufferAttribute(A,Q){return this.x=A.getX(Q),this.y=A.getY(Q),this.z=A.getZ(Q),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const A=Math.random()*Math.PI*2,Q=Math.random()*2-1,I=Math.sqrt(1-Q*Q);return this.x=I*Math.cos(A),this.y=Q,this.z=I*Math.sin(A),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const BQ=new FA,fQ=new IQ,VQ={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},yA={h:0,s:0,l:0},VA={h:0,s:0,l:0};function gQ(g,A,Q){return Q<0&&(Q+=1),Q>1&&(Q-=1),Q<1/6?g+(A-g)*6*Q:Q<1/2?A:Q<2/3?g+(A-g)*6*(2/3-Q):g}class CQ{constructor(A,Q,I){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(A,Q,I)}set(A,Q,I){if(Q===void 0&&I===void 0){const B=A;B&&B.isColor?this.copy(B):typeof B=="number"?this.setHex(B):typeof B=="string"&&this.setStyle(B)}else this.setRGB(A,Q,I);return this}setScalar(A){return this.r=A,this.g=A,this.b=A,this}setHex(A,Q=iA){return A=Math.floor(A),this.r=(A>>16&255)/255,this.g=(A>>8&255)/255,this.b=(A&255)/255,DA.toWorkingColorSpace(this,Q),this}setRGB(A,Q,I,B=DA.workingColorSpace){return this.r=A,this.g=Q,this.b=I,DA.toWorkingColorSpace(this,B),this}setHSL(A,Q,I,B=DA.workingColorSpace){if(A=YI(A,1),Q=u(Q,0,1),I=u(I,0,1),Q===0)this.r=this.g=this.b=I;else{const C=I<=.5?I*(1+Q):I+Q-I*Q,E=2*I-C;this.r=gQ(E,C,A+1/3),this.g=gQ(E,C,A),this.b=gQ(E,C,A-1/3)}return DA.toWorkingColorSpace(this,B),this}setStyle(A,Q=iA){function I(C){C!==void 0&&parseFloat(C)<1&&console.warn("THREE.Color: Alpha component of "+A+" will be ignored.")}let B;if(B=/^(\\w+)\\(([^\\)]*)\\)/.exec(A)){let C;const E=B[1],i=B[2];switch(E){case"rgb":case"rgba":if(C=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(i))return I(C[4]),this.setRGB(Math.min(255,parseInt(C[1],10))/255,Math.min(255,parseInt(C[2],10))/255,Math.min(255,parseInt(C[3],10))/255,Q);if(C=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(i))return I(C[4]),this.setRGB(Math.min(100,parseInt(C[1],10))/100,Math.min(100,parseInt(C[2],10))/100,Math.min(100,parseInt(C[3],10))/100,Q);break;case"hsl":case"hsla":if(C=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(i))return I(C[4]),this.setHSL(parseFloat(C[1])/360,parseFloat(C[2])/100,parseFloat(C[3])/100,Q);break;default:console.warn("THREE.Color: Unknown color model "+A)}}else if(B=/^\\#([A-Fa-f\\d]+)$/.exec(A)){const C=B[1],E=C.length;if(E===3)return this.setRGB(parseInt(C.charAt(0),16)/15,parseInt(C.charAt(1),16)/15,parseInt(C.charAt(2),16)/15,Q);if(E===6)return this.setHex(parseInt(C,16),Q);console.warn("THREE.Color: Invalid hex color "+A)}else if(A&&A.length>0)return this.setColorName(A,Q);return this}setColorName(A,Q=iA){const I=VQ[A.toLowerCase()];return I!==void 0?this.setHex(I,Q):console.warn("THREE.Color: Unknown color "+A),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(A){return this.r=A.r,this.g=A.g,this.b=A.b,this}copySRGBToLinear(A){return this.r=YA(A.r),this.g=YA(A.g),this.b=YA(A.b),this}copyLinearToSRGB(A){return this.r=eA(A.r),this.g=eA(A.g),this.b=eA(A.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(A=iA){return DA.fromWorkingColorSpace(x.copy(this),A),Math.round(u(x.r*255,0,255))*65536+Math.round(u(x.g*255,0,255))*256+Math.round(u(x.b*255,0,255))}getHexString(A=iA){return("000000"+this.getHex(A).toString(16)).slice(-6)}getHSL(A,Q=DA.workingColorSpace){DA.fromWorkingColorSpace(x.copy(this),Q);const I=x.r,B=x.g,C=x.b,E=Math.max(I,B,C),i=Math.min(I,B,C);let D,w;const o=(i+E)/2;if(i===E)D=0,w=0;else{const s=E-i;switch(w=o<=.5?s/(E+i):s/(2-E-i),E){case I:D=(B-C)/s+(B{const i=E.trimEnd();return A?i:i.length>0?(A=!0,i):null}).filter(E=>E!=null);for(;Q.length>0&&Q[Q.length-1].length===0;)Q.pop();if(Q.length===0)return[];const I=(C=Q[0].match(/^\\s*/))==null?void 0:C[0];if(!I)return Q;const B=new RegExp(`^${I}`);return Q.map(E=>E.replace(B,""))}function rI(g){return UI(g).join(`\n`)}const EQ=new Float32Array(1),uQ=new Uint32Array(EQ.buffer);function UA(g){EQ[0]=g;const A=uQ[0],Q=A>>31&1,I=A>>23&255,B=A&8388607,C=Q<<15;if(I===255)return B!==0?C|32767:C|31744;const E=I-127+15;if(E>=31)return C|31744;if(E<=0){if(E<-10)return C;const D=(B|8388608)>>1-E+13;return C|D}const i=B>>13;return C|E<<10|i}function wA(g){const A=g>>15&1,Q=g>>10&31,I=g&1023;let B;if(Q===0)if(I===0)B=A<<31;else{let C=I,E=-14;for(;(C&1024)===0;)C<<=1,E--;C&=1023;const i=E+127,D=C<<13;B=A<<31|i<<23|D}else if(Q===31)I===0?B=A<<31|2139095040:B=A<<31|2143289344;else{const C=Q-15+127,E=I<<13;B=A<<31|C<<23|E}return uQ[0]=B,EQ[0]}function MA(g){return Math.max(0,Math.min(255,Math.round(g*255)))}function lI(g){const A=[],Q=new Set;function I(B){B&&typeof B=="object"&&!Q.has(B)&&(Q.add(B),B instanceof ArrayBuffer?A.push(B):ArrayBuffer.isView(B)?A.push(B.buffer):Array.isArray(B)?B.forEach(I):Object.values(B).forEach(I))}return I(g),A}function iQ(g,A,Q,I,B,C,E,i,D,w,o,s,a,t,c,y){const n=MA(t),M=MA(c),J=MA(y),G=MA(a),h=XQ(new IQ(D,w,o,s)),F=h&255,U=h>>>8&255,K=h>>>16&255,T=C===0?0:Math.min(255,Math.max(0,Math.round((Math.log(C)-GA)/JA)+1)),W=E===0?0:Math.min(255,Math.max(0,Math.round((Math.log(E)-GA)/JA)+1)),X=i===0?0:Math.min(255,Math.max(0,Math.round((Math.log(i)-GA)/JA)+1)),Y=UA(Q),$=UA(I),AA=UA(B),m=A*4;g[m]=n|M<<8|J<<16|G<<24,g[m+1]=Y|$<<16,g[m+2]=AA|F<<16|U<<24,g[m+3]=T|W<<8|X<<16|K<<24}function LI(g,A,Q,I,B){const C=UA(Q),E=UA(I),i=UA(B),D=A*4;g[D+1]=C|E<<16,g[D+2]=i|g[D+2]&4294901760}function SI(g,A,Q,I,B){const C=Q===0?0:Math.min(255,Math.max(0,Math.round((Math.log(Q)-GA)/JA)+1)),E=I===0?0:Math.min(255,Math.max(0,Math.round((Math.log(I)-GA)/JA)+1)),i=B===0?0:Math.min(255,Math.max(0,Math.round((Math.log(B)-GA)/JA)+1)),D=A*4;g[D+3]=C|E<<8|i<<16|g[D+3]&4278190080}function HI(g,A,Q,I,B,C){const E=XQ(new IQ(Q,I,B,C)),i=E&255,D=E>>>8&255,w=E>>>16&255,o=A*4;g[o+2]=g[o+2]&65535|i<<16|D<<24,g[o+3]=g[o+3]&16777215|w<<24}function dI(g,A,Q,I,B){const C=MA(Q),E=MA(I),i=MA(B),D=A*4;g[D]=C|E<<8|i<<16|g[D]&4278190080}function ZI(g,A,Q){const I=MA(Q),B=A*4;g[B]=g[B]&16777215|I<<24}new FA,new FA,new CQ,rI(`\n precision highp float;\n\n in vec3 position;\n\n void main() {\n gl_Position = vec4(position.xy, 0.0, 1.0);\n }\n`);function XQ(g){const A=g.clone().normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const Q=2*Math.acos(A.w),I=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),B=I<1e-6?new FA(1,0,0):new FA(A.x,A.y,A.z).divideScalar(I),C=Math.abs(B.x)+Math.abs(B.y)+Math.abs(B.z);let E=B.x/C,i=B.y/C;if(B.z<0){const t=E;E=(1-Math.abs(i))*(E>=0?1:-1),i=(1-Math.abs(t))*(i>=0?1:-1)}const D=E*.5+.5,w=i*.5+.5,o=Math.round(D*255),s=Math.round(w*255);return Math.round(Q*(255/Math.PI))<<16|s<<8|o}function uA(g,A,Q,I){const B=Math.max(-127,Math.min(127,g*127)),C=Math.max(-127,Math.min(127,A*127)),E=Math.max(-127,Math.min(127,Q*127)),i=Math.max(-127,Math.min(127,I*127));return B&255|(C&255)<<8|(E&255)<<16|(i&255)<<24}function DQ(g,A,Q){const I=A*2;for(let B=0;B<9;++B){const C=Math.max(-63,Math.min(63,Q[B]*63))&127,E=B*7,i=E+7,D=Math.floor(E/32),w=E-D*32,o=C<D*32+32){const s=C>>>32-w&4294967295;g[I+D+1]|=s}}}function wQ(g,A,Q){g[A*4+0]=uA(Q[0],Q[1],Q[2],Q[3]),g[A*4+1]=uA(Q[4],Q[5],Q[6],Q[7]),g[A*4+2]=uA(Q[8],Q[9],Q[10],Q[11]),g[A*4+3]=uA(Q[12],Q[13],Q[14],0)}function sQ(g,A,Q){const I=A*4;for(let B=0;B<21;++B){const C=Math.max(-31,Math.min(31,Q[B]*31))&63,E=B*6,i=E+6,D=Math.floor(E/32),w=E-D*32,o=C<D*32+32){const s=C>>>32-w&4294967295;g[I+D+1]|=s}}}class KI{constructor({fileBytes:A,chunkBytes:Q=64*1024}){this.fileBytes=A,this.chunkBytes=Q,this.offset=0,this.chunks=[],this.totalBytes=0,this.gunzip=new kI((I,B)=>{this.chunks.push(I),this.totalBytes+=I.length})}read(A){for(;this.totalBytes=this.fileBytes.length&&this.gunzip.push(new Uint8Array(0),!0),this.totalBytes2)throw new Error(`Unsupported SPZ version: ${this.version}`);this.numSplats=Q.getUint32(8,!0),this.shDegree=Q.getUint8(12),this.fractionalBits=Q.getUint8(13),this.flags=Q.getUint8(14),this.flagAntiAlias=(this.flags&1)!==0,this.reserved=Q.getUint8(15),this.parsed=!1}parseSplats(A,Q,I,B,C,E){if(this.parsed)throw new Error("SPZ file already parsed");if(this.parsed=!0,this.version===1){const i=this.reader.read(this.numSplats*3*2),D=new Uint16Array(i.buffer);for(let w=0;w>8)/i,a=((D[o+5]<<24|D[o+4]<<16|D[o+3]<<8)>>8)/i,t=((D[o+8]<<24|D[o+7]<<16|D[o+6]<<8)>>8)/i;A(w,s,a,t)}}else throw new Error("Unreachable");{const i=this.reader.read(this.numSplats);for(let D=0;D=1){const i=new Float32Array(9),D=this.shDegree>=2?new Float32Array(5*3):void 0,w=this.shDegree>=3?new Float32Array(7*3):void 0,o=this.reader.read(this.numSplats*qI[this.shDegree]*3);let s=0;for(let a=0;a{iQ(g,E,i,D,w,o{i&&(B.sh1||(B.sh1=new Uint32Array(I*2)),DQ(B.sh1,E,i)),D&&(B.sh2||(B.sh2=new Uint32Array(I*4)),wQ(B.sh2,E,D)),w&&(B.sh3||(B.sh3=new Uint32Array(I*4)),sQ(B.sh3,E,w))}),{packedArray:g,numSplats:I,extra:B}}function oQ(g){const A=YQ,Q=Math.max(iI,Math.min(eQ,Math.ceil(g/A))),I=Math.ceil(g/(A*Q));return A*Q*I}function mI(g){const A=new bI({fileBytes:g}),Q=A.numSplats,I=oQ(Q),B=new Uint32Array(I*4),C={};return A.parseSplats((E,i,D,w)=>{LI(B,E,i,D,w)},(E,i)=>{ZI(B,E,i)},(E,i,D,w)=>{dI(B,E,i,D,w)},(E,i,D,w)=>{SI(B,E,i,D,w)},(E,i,D,w,o)=>{HI(B,E,i,D,w,o)},(E,i,D,w)=>{i&&(C.sh1||(C.sh1=new Uint32Array(Q*2)),DQ(C.sh1,E,i)),D&&(C.sh2||(C.sh2=new Uint32Array(Q*4)),wQ(C.sh2,E,D)),w&&(C.sh3||(C.sh3=new Uint32Array(Q*4)),sQ(C.sh3,E,w))}),{packedArray:B,numSplats:Q,extra:C}}function pI(g){const A=Math.floor(g.length/32);if(A*32!==g.length)throw new Error("Invalid .splat file size");const Q=oQ(A),I=new Uint32Array(Q*4),B=new Float32Array(g.buffer);for(let C=0;C2)throw new Error(`Invalid .ksplat compression level: ${w}`);const o=B.getFloat32(36,!0)||-1.5,s=B.getFloat32(40,!0)||1.5,a=D,t=oQ(a),c=new Uint32Array(t*4),y={};let n=4096+i*1024;for(let J=0;J=1?new Float32Array(3*3):void 0,gA=j>=2?new Float32Array(5*3):void 0,cA=j>=3?new Float32Array(7*3):void 0,CA=W/2/Y,aA=n+AA,tA=n+m,N=new DataView(g.buffer,tA,R),d=new Float32Array(g.buffer,aA,T*3);for(let L=0;L=1){if(BA){y.sh1||(y.sh1=new Uint32Array(a*2));for(const[KA,bA]of v.entries())BA[KA]=G(k,bA);DQ(y.sh1,L,BA)}if(gA){y.sh2||(y.sh2=new Uint32Array(a*4));for(const[KA,bA]of sA.entries())gA[KA]=G(k,bA);wQ(y.sh2,L,gA)}if(cA){y.sh3||(y.sh3=new Uint32Array(a*4));for(const[KA,bA]of P.entries())cA[KA]=G(k,bA);sQ(y.sh3,L,cA)}}}n+=IA}return{packedArray:c,numSplats:a,extra:y}}const rA=31744,ZA=rA+1;let l=null;function _I({totalSplats:g,readback:A,ordering:Q}){l||(l=new Uint32Array(ZA)),l.fill(0);const I=A.map(D=>new Uint32Array(D.buffer)),B=I[0].length,C=Math.ceil(g/B);let E=0;for(let D=0;D=0;--B){const C=I+l[B];l[B]=I,I=C}for(let B=0;B{(self.URL||self.webkitURL).revokeObjectURL(A)}),I}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Gt),{name:Q==null?void 0:Q.name})}finally{A&&(self.URL||self.webkitURL).revokeObjectURL(A)}}class fe{constructor(){this.messages={},this.messageIdNext=0,this.worker=new He,this.worker.onmessage=A=>this.onMessage(A)}makeMessageId(){return++this.messageIdNext}makeMessagePromiseId(){const A=this.makeMessageId(),I=new Promise((g,B)=>{this.messages[A]={resolve:g,reject:B}});return{id:A,promise:I}}onMessage(A){const{id:I,result:g,error:B}=A.data,C=this.messages[I];C&&(delete this.messages[I],B?C.reject(B):C.resolve(g))}async call(A,I){const{id:g,promise:B}=this.makeMessagePromiseId();return this.worker.postMessage({name:A,args:I,id:g},{transfer:eB(I)}),B}}let lt=4,iI=0;const Mt=[],Nt=[];async function me(){const Q=Mt.shift();if(Q)return Q;if(iI{Nt.push(A)})}function be(Q){if(iI>lt){iI-=1;return}const A=Nt.shift();if(A){A(Q);return}Mt.push(Q)}async function DQ(Q){const A=await me();try{return await Q(A)}finally{be(A)}}class xe extends j.Loader{constructor(A){super(A),this.fileLoader=new j.FileLoader(A)}load(A,I,g,B){this.fileLoader.setResponseType("arraybuffer"),this.fileLoader.setCrossOrigin(this.crossOrigin),this.fileLoader.setWithCredentials(this.withCredentials),this.fileLoader.setPath(this.path),this.fileLoader.setResourcePath(this.resourcePath),this.fileLoader.setRequestHeader(this.requestHeader),this.fileLoader.load(A,async C=>{if(I){const t=await bI({input:C,fileType:this.fileType,pathOrUrl:A});I(new UA(t))}},g,B)}async loadAsync(A,I){return new Promise((g,B)=>{this.load(A,C=>{g(C)},I,B)})}parse(A){return new ZA({packedSplats:A})}}var kt=(Q=>(Q.PLY="ply",Q.WLG0="wlg0",Q.SPZ="spz",Q.SPLAT="splat",Q.KSPLAT="ksplat",Q))(kt||{});function Ft(Q){const A=new DataView(Q.buffer);if((A.getUint32(0,!0)&16777215)===7957616)return"ply";if(A.getUint32(0,!0)===809978967)return"wlg0";if((A.getUint32(0,!0)&16777215)===559903){const I=RB(Q,4);return new DataView(I.buffer).getUint32(0,!0)===1347635022?"spz":void 0}}function Ke(Q){const A=Q.split(/[?#]/,1)[0],I=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\")),g=A.slice(I+1),B=g.lastIndexOf(".");return B<=0||B===g.length-1?"":g.slice(B+1).toLowerCase()}async function bI({input:Q,fileType:A,pathOrUrl:I}){const g=Q instanceof ArrayBuffer?new Uint8Array(Q):Q;let B=A;if(!A&&(B=Ft(g),!B&&I)){const C=Ke(I);C==="ply"?B="ply":C==="wlg"?B="wlg0":C==="spz"?B="spz":C==="splat"?B="splat":C==="ksplat"&&(B="ksplat")}if(B==="wlg0")return await DQ(async C=>{const{packedArray:E,numSplats:t}=await C.call("decodeWlg",{fileBytes:g});return{packedArray:E,numSplats:t}});if(B==="ply"){const C=new tI({fileBytes:g});await C.parseHeader();const E=C.numSplats,t=rA(E).maxSplats,s={fileBytes:g,packedArray:new Uint32Array(t*4)};return await DQ(async o=>{const{packedArray:a,numSplats:i,extra:D}=await o.call("unpackPly",s);return{packedArray:a,numSplats:i,extra:D}})}if(B==="spz")return await DQ(async C=>{const{packedArray:E,numSplats:t,extra:s}=await C.call("decodeSpz",{fileBytes:g});return{packedArray:E,numSplats:t,extra:s}});if(B==="splat")return await DQ(async C=>{const{packedArray:E,numSplats:t}=await C.call("decodeAntiSplat",{fileBytes:g});return{packedArray:E,numSplats:t}});if(B==="ksplat")return await DQ(async C=>{const{packedArray:E,numSplats:t,extra:s}=await C.call("decodeKsplat",{fileBytes:g});return{packedArray:E,numSplats:t,extra:s}});throw new Error("Unknown splat file type")}var Ze=`precision highp float; +precision highp int; +precision highp sampler2D; +precision highp usampler2D; +precision highp isampler2D; +precision highp sampler2DArray; +precision highp usampler2DArray; +precision highp isampler2DArray; +precision highp sampler3D; +precision highp usampler3D; +precision highp isampler3D; + +#include + +uniform uint targetLayer; +uniform int targetBase; +uniform int targetCount; + +out uvec4 target; + +{{ GLOBALS }} + +void produceSplat(int index) { + {{ STATEMENTS }} +} + +void main() { + int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x); + int index = targetIndex - targetBase; + + if ((index >= 0) && (index < targetCount)) { + produceSplat(index); + } else { + target = uvec4(0u, 0u, 0u, 0u); + } +}`;const K=class K{constructor(A={}){this.maxSplats=0,this.numSplats=0,this.packedArray=null,this.isInitialized=!1,this.target=null,this.source=null,this.needsUpdate=!0,this.extra={},this.dyno=new xI({packedSplats:this}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,A.url||A.fileBytes||A.construct?this.initialized=this.asyncInitialize(A).then(()=>(this.isInitialized=!0,this)):(this.initialize(A),this.isInitialized=!0,this.initialized=Promise.resolve(this))}initialize(A){A.packedArray?(this.packedArray=A.packedArray,this.maxSplats=Math.floor(this.packedArray.length/4),this.maxSplats=Math.floor(this.maxSplats/Z)*Z,this.numSplats=Math.min(this.maxSplats,A.numSplats??Number.POSITIVE_INFINITY)):(this.maxSplats=A.maxSplats??0,this.numSplats=0),this.extra=A.extra??{}}async asyncInitialize(A){let{url:I,fileBytes:g,construct:B}=A;if(I&&(g=await fetch(I).then(async C=>{if(!C.ok)throw new Error(`${C.status} "${C.statusText}" fetching URL: ${I}`);return await C.arrayBuffer()})),g){const C=await bI({input:g,fileType:A.fileType,pathOrUrl:I});this.initialize(C)}if(B){const C=B(this);C instanceof Promise&&await C}}dispose(){this.target&&(this.target.dispose(),this.target=null),this.source&&(this.source.dispose(),this.source=null)}ensureSplats(A){const I=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),g=this.packedArray?this.packedArray.length/4:0;if(!this.packedArray||I>g){this.maxSplats=rA(I).maxSplats;const B=new Uint32Array(this.maxSplats*4);this.packedArray&&B.set(this.packedArray),this.packedArray=B}return this.packedArray}ensureSplatsSh(A,I){let g,B;if(A===0)return this.ensureSplats(I);if(A===1)g=2,B="sh1";else if(A===2)g=4,B="sh2";else if(A===3)g=4,B="sh3";else throw new Error(`Invalid level: ${A}`);let C=this.extra[B]?this.extra[B].length/g:0;const E=I<=C?C:Math.max(I,2*C);if(!this.extra[B]||E>C){C=rA(E).maxSplats;const t=new Uint32Array(C*g);this.extra[B]&&t.set(this.extra[B]),this.extra[B]=t}return this.extra[B]}getSplat(A){if(!this.packedArray||A>=this.numSplats)throw new Error("Invalid index");return CI(this.packedArray,A)}setSplat(A,I,g,B,C,E){const t=this.ensureSplats(A+1);BI(t,A,I.x,I.y,I.z,g.x,g.y,g.z,B.x,B.y,B.z,B.w,C,E.r,E.g,E.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,I,g,B,C){const E=this.ensureSplats(this.numSplats+1);BI(E,this.numSplats,A.x,A.y,A.z,I.x,I.y,I.z,g.x,g.y,g.z,g.w,B,C.r,C.g,C.b),++this.numSplats}forEachSplat(A){if(!(!this.packedArray||!this.numSplats))for(let I=0;I{const C=I,E=Math.ceil(B/Z)*Z;return I+=E,{base:C,count:B}});return{maxSplats:I,mapping:g}}getTexture(){return this.target?this.target.texture:this.source||this.packedArray?this.maybeUpdateSource():K.getEmpty()}maybeUpdateSource(){if(!this.packedArray)throw new Error("No packed splats");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:I,depth:g}=this.source.image;this.maxSplats!==A*I*g&&(this.source.dispose(),this.source=null)}if(this.source)this.packedArray.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.packedArray.buffer));else{const{width:A,height:I,depth:g}=rA(this.maxSplats);this.source=new e.DataArrayTexture(this.packedArray,A,I,g),this.source.format=e.RGBAIntegerFormat,this.source.type=e.UnsignedIntType,this.source.internalFormat="RGBA32UI",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}static getEmpty(){if(!K.emptySource){const{width:A,height:I,depth:g,maxSplats:B}=rA(1),C=new Uint32Array(B*4);K.emptySource=new e.DataArrayTexture(C,A,I,g),K.emptySource.format=e.RGBAIntegerFormat,K.emptySource.type=e.UnsignedIntType,K.emptySource.internalFormat="RGBA32UI",K.emptySource.needsUpdate=!0}return K.emptySource}prepareProgramMaterial(A){let I=K.generatorProgram.get(A);if(!I){const B=SA({index:"int"},{output:"uvec4"},({index:C})=>{A.inputs.index=C;const E=A.outputs.gsplat;return{output:rg(E)}});K.programTemplate||(K.programTemplate=new fI(Ze)),I=new HI({graph:B,inputs:{index:"index"},outputs:{output:"target"},template:K.programTemplate}),Object.assign(I.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),K.generatorProgram.set(A,I)}const g=I.prepareMaterial();return K.mesh.material=g,{program:I,material:g}}saveRenderState(A){return{xrPresenting:A.xr.isPresenting,autoClear:A.autoClear,scissorTest:A.getScissorTest()}}resetRenderState(A,I){A.setRenderTarget(null),A.xr.isPresenting=I.xrPresenting,A.autoClear=I.autoClear,A.setScissorTest(I.scissorTest)}generate({generator:A,base:I,count:g,renderer:B}){if(!this.target)throw new Error("Target must be initialized with ensureSplats");if(I+g>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:C,material:E}=this.prepareProgramMaterial(A);C.update();const t=this.saveRenderState(B),s=Math.ceil((I+g)/Z)*Z,o=Z*BQ;for(E.uniforms.targetBase.value=I,E.uniforms.targetCount.value=g;I[eI],value:{texture:UA.getEmpty(),numSplats:0},update:I=>{var g,B;return I.texture=((g=this.packedSplats)==null?void 0:g.getTexture())??UA.getEmpty(),I.numSplats=((B=this.packedSplats)==null?void 0:B.numSplats)??0,I}}),this.packedSplats=A}}class dI extends e.InstancedBufferGeometry{constructor(A,I){super(),this.ordering=A,this.setAttribute("position",new e.BufferAttribute(qe,3)),this.setIndex(new e.BufferAttribute(We,1)),this._maxInstanceCount=A.length,this.instanceCount=I,this.attribute=new e.InstancedBufferAttribute(A,1,!1,1),this.attribute.setUsage(e.DynamicDrawUsage),this.setAttribute("splatIndex",this.attribute)}update(A,I){this.ordering=A,this.attribute.array=A,this.instanceCount=I,this.attribute.addUpdateRange(0,I),this.attribute.needsUpdate=!0}}const qe=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),We=new Uint16Array([0,1,2,0,2,3]),jA=class jA{constructor(A){if(this.lastTime=null,this.encodeLinear=!1,this.superXY=1,this.display=null,this.sorting=null,this.pending=null,this.sortingCheck=!1,this.readback=new Uint16Array(0),this.forge=A.forge,this.camera=A.camera,this.viewToWorld=A.viewToWorld??new e.Matrix4,A.target){const{width:I,height:g,doubleBuffer:B}=A.target,C=Math.max(1,Math.min(4,A.target.superXY??1));if(this.superXY=C,I*C>8192||g*C>8192)throw new Error("Target size too large");this.target=new e.WebGLRenderTarget(I*C,g*C,{format:e.RGBAFormat,type:e.UnsignedByteType,colorSpace:e.SRGBColorSpace}),B&&(this.back=new e.WebGLRenderTarget(I*C,g*C,{format:e.RGBAFormat,type:e.UnsignedByteType,colorSpace:e.SRGBColorSpace})),this.encodeLinear=!0}this.onTextureUpdated=A.onTextureUpdated,this.sortRadial=A.sortRadial??!0,this.sortDistance=A.sortDistance,this.sortCoorient=A.sortCoorient,this.depthBias=A.depthBias,this.sort360=A.sort360,this.orderingFreelist=new DB({allocate:I=>new Uint32Array(I),valid:(I,g)=>I.length===g}),this.autoUpdate=!1,this.setAutoUpdate(A.autoUpdate??!1)}dispose(){var A;this.setAutoUpdate(!1),this.target&&(this.target.dispose(),this.target=void 0),this.back&&(this.back.dispose(),this.back=void 0),this.display&&(this.forge.releaseAccumulator(this.display.accumulator),this.display.geometry.dispose(),this.display=null),(A=this.pending)!=null&&A.accumulator&&(this.forge.releaseAccumulator(this.pending.accumulator),this.pending=null)}setAutoUpdate(A){!this.autoUpdate&&A?this.forge.autoViewpoints.push(this):this.autoUpdate&&!A&&(this.forge.autoViewpoints=this.forge.autoViewpoints.filter(I=>I!==this)),this.autoUpdate=A}async prepare({scene:A,camera:I,viewToWorld:g,update:B,forceOrigin:C}){var t;for(g?this.viewToWorld=g:(this.camera=I??this.camera,this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone()));B??!0;){const s=C?this.viewToWorld:void 0;if(this.forge.updateInternal({scene:A,originToWorld:s}))break;await new Promise(a=>setTimeout(a,10))}const E=this.forge.active;E!==((t=this.display)==null?void 0:t.accumulator)&&(this.forge.active.refCount+=1),await this.sortUpdate({accumulator:E,viewToWorld:this.viewToWorld})}renderTarget({scene:A,camera:I}){var B;const g=this.back??this.target;if(!g)throw new Error("Must initialize ForgeViewpoint with target");if(I=I??this.camera,!I)throw new Error("Must provide camera");if(I instanceof e.PerspectiveCamera){const C=new e.PerspectiveCamera().copy(I,!1);C.aspect=g.width/g.height,C.updateProjectionMatrix(),I=C}this.viewToWorld=I.matrixWorld.clone();try{this.forge.renderer.setRenderTarget(g),this.forge.prepareViewpoint(this),this.forge.renderer.render(A,I)}finally{this.forge.prepareViewpoint(this.forge.defaultView),this.forge.renderer.setRenderTarget(null)}g!==this.target&&([this.target,this.back]=[this.back,this.target]),(B=this.onTextureUpdated)==null||B.call(this,g.texture)}async readTarget(){if(!this.target)throw new Error("Must initialize ForgeViewpoint with target");const{width:A,height:I}=this.target,g=A*I*4;(!this.superPixels||this.superPixels.length0){const{reader:t,doubleSortReader:s,dynoSortRadial:o,dynoOrigin:a,dynoDirection:i,dynoDepthBias:D,dynoSort360:n,dynoSplats:w}=jA.makeSorter(),c=Math.ceil(B/2);this.readback=t.ensureBuffer(c,this.readback);const r=A.toWorld.clone().invert(),y=I.clone().premultiply(r);o.value=this.sort360?!0:this.sortRadial,a.value.set(0,0,0).applyMatrix4(y),i.value.set(0,0,-1).applyMatrix4(y).sub(a.value).normalize(),D.value=this.depthBias??1,n.value=this.sort360??!1,w.packedSplats=A.splats,await t.renderReadback({renderer:this.forge.renderer,reader:s,count:Math.ceil(g/2),readback:this.readback});const G=await DQ(async h=>h.call("sortDoubleSplats",{numSplats:g,readback:this.readback,ordering:E}));this.readback=G.readback,E=G.ordering,C=G.activeSplats}this.updateDisplay({accumulator:A,viewToWorld:I,ordering:E,activeSplats:C}),this.sortingCheck=!1}updateDisplay({accumulator:A,viewToWorld:I,ordering:g,activeSplats:B}){if(!this.display)this.display={accumulator:A,viewToWorld:I,geometry:new dI(g,B)};else{A!==this.display.accumulator&&(this.forge.releaseAccumulator(this.display.accumulator),this.display.accumulator=A),this.display.viewToWorld=I;const C=this.display.geometry.ordering;C.length===g.length?this.display.geometry.update(g,B):(this.display.geometry.dispose(),this.display.geometry=new dI(g,B)),this.orderingFreelist.free(C)}this.forge.viewpoint===this&&this.forge.prepareViewpoint(this)}static makeSorter(){if(!jA.dynos){const A=new gI({value:!0}),I=new hQ({value:new e.Vector3}),g=new hQ({value:new e.Vector3}),B=new EQ({value:1}),C=new gI({value:!1}),E=new xI,t=new pQ,s=SA({index:"int"},{rgba8:"vec4"},({index:o})=>{if(!o)throw new Error("No index");const a={sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:B,sort360:C},i=CA(o,q("int",2)),D=UQ(E,i),n=zI({gsplat:D,...a}),w=UQ(E,wA(i,q("int",1))),c=zI({gsplat:w,...a}),r=mA({vectorType:"vec2",x:n,y:c});return{rgba8:uC(YC(r))}});jA.dynos={dynoSortRadial:A,dynoOrigin:I,dynoDirection:g,dynoDepthBias:B,dynoSort360:C,dynoSplats:E,reader:t,doubleSortReader:s}}return jA.dynos}};jA.EMPTY_TEXTURE=new e.Texture,jA.dynos=null;let fQ=jA;const Ve=gA(` + float computeSort(Gsplat gsplat, bool sortRadial, vec3 sortOrigin, vec3 sortDirection, float sortDepthBias, bool sort360) { + if (!isGsplatActive(gsplat.flags)) { + return INFINITY; + } + + vec3 center = gsplat.center - sortOrigin; + float biasedDepth = dot(center, sortDirection) + sortDepthBias; + if (!sort360 && (biasedDepth <= 0.0)) { + return INFINITY; + } + + return sortRadial ? length(center) : biasedDepth; + } +`);function zI({gsplat:Q,sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:B,sort360:C}){return KQ({inTypes:{gsplat:T,sortRadial:"bool",sortOrigin:"vec3",sortDirection:"vec3",sortDepthBias:"float",sort360:"bool"},outTypes:{metric:"float"},globals:()=>[hA,Ve],inputs:{gsplat:Q,sortRadial:A,sortOrigin:I,sortDirection:g,sortDepthBias:B,sort360:C},statements:({inputs:E,outputs:t})=>{const{gsplat:s,sortRadial:o,sortOrigin:a,sortDirection:i,sortDepthBias:D,sort360:n}=E;return dA(` + ${t.metric} = computeSort(${s}, ${o}, ${a}, ${i}, ${D}, ${n}); + `)}}).outputs.metric}class QI{constructor(){this.splats=new UA,this.toWorld=new e.Matrix4,this.mapping=[],this.refCount=0,this.splatsVersion=-1,this.mappingVersion=-1}ensureGenerate(A){this.splats.ensureGenerate(A)&&(this.mapping=[])}generateSplats({renderer:A,modifier:I,generators:g,forceUpdate:B,originToWorld:C}){const E=this.mapping.reduce((o,a)=>(o.set(a.node,a),o),new Map);let t=0,s=0;for(const{node:o,generator:a,version:i,base:D,count:n}of g){const w=E.get(o);if((B||a!==(w==null?void 0:w.generator)||i!==(w==null?void 0:w.version)||D!==(w==null?void 0:w.base)||n!==(w==null?void 0:w.count))&&a){const c=I.apply(a);try{this.splats.generate({generator:c,base:D,count:n,renderer:A})}catch(r){o.generator=void 0,o.generatorError=r}t+=1}s=Math.max(s,D+n)}return this.splats.numSplats=s,this.toWorld=C,this.mapping=g,t!==0}hasCorrespondence(A){return this.mapping.length!==A.mapping.length?!1:this.mapping.every(({node:I,base:g,count:B},C)=>{const{node:E,base:t,count:s}=A.mapping[C];return I===E&&g===t&&B===s})}}var Te=`const float LN_SCALE_MIN = -9.0; +const float LN_SCALE_MAX = 9.0; +const float LN_RESCALE = (LN_SCALE_MAX - LN_SCALE_MIN) / 254.0; + +const uint SPLAT_TEX_WIDTH_BITS = 11u; +const uint SPLAT_TEX_HEIGHT_BITS = 11u; +const uint SPLAT_TEX_DEPTH_BITS = 11u; +const uint SPLAT_TEX_LAYER_BITS = SPLAT_TEX_WIDTH_BITS + SPLAT_TEX_HEIGHT_BITS; + +const uint SPLAT_TEX_WIDTH = 1u << SPLAT_TEX_WIDTH_BITS; +const uint SPLAT_TEX_HEIGHT = 1u << SPLAT_TEX_HEIGHT_BITS; +const uint SPLAT_TEX_DEPTH = 1u << SPLAT_TEX_DEPTH_BITS; + +const uint SPLAT_TEX_WIDTH_MASK = SPLAT_TEX_WIDTH - 1u; +const uint SPLAT_TEX_HEIGHT_MASK = SPLAT_TEX_HEIGHT - 1u; +const uint SPLAT_TEX_DEPTH_MASK = SPLAT_TEX_DEPTH - 1u; + +const uint F16_INF = 0x7c00u; +const float PI = 3.1415926535897932384626433832795; + +const float INFINITY = 1.0 / 0.0; +const float NEG_INFINITY = -INFINITY; + +const float MAX_PIXEL_RADIUS = 512.0; +const float MIN_ALPHA = 0.01; +const float MAX_STDDEV = sqrt(8.0); + +float sqr(float x) { + return x * x; +} + +float pow4(float x) { + float x2 = x * x; + return x2 * x2; +} + +float pow8(float x) { + float x4 = pow4(x); + return x4 * x4; +} + +vec3 srgbToLinear(vec3 rgb) { + return pow(rgb, vec3(2.2)); +} + +vec3 linearToSrgb(vec3 rgb) { + return pow(rgb, vec3(1.0 / 2.2)); +} + +uint encodeQuatOctXy88R8(vec4 q) { + + if (q.w < 0.0) { + q = -q; + } + + float theta = 2.0 * acos(q.w); + float halfTheta = theta * 0.5; + float s = sin(halfTheta); + + vec3 axis = (abs(s) < 1e-6) ? vec3(1.0, 0.0, 0.0) : q.xyz / s; + + + + float sum = abs(axis.x) + abs(axis.y) + abs(axis.z); + vec2 p = vec2(axis.x, axis.y) / sum; + + if (axis.z < 0.0) { + float oldPx = p.x; + p.x = (1.0 - abs(p.y)) * (p.x >= 0.0 ? 1.0 : -1.0); + p.y = (1.0 - abs(oldPx)) * (p.y >= 0.0 ? 1.0 : -1.0); + } + + float u_f = p.x * 0.5 + 0.5; + float v_f = p.y * 0.5 + 0.5; + + uint quantU = uint(clamp(round(u_f * 255.0), 0.0, 255.0)); + uint quantV = uint(clamp(round(v_f * 255.0), 0.0, 255.0)); + + + + uint angleInt = uint(clamp(round((theta / 3.14159265359) * 255.0), 0.0, 255.0)); + + + return (angleInt << 16u) | (quantV << 8u) | quantU; +} + +vec4 decodeQuatOctXy88R8(uint encoded) { + + uint quantU = encoded & uint(0xFFu); + uint quantV = (encoded >> 8u) & uint(0xFFu); + uint angleInt = encoded >> 16u; + + + float u_f = float(quantU) / 255.0; + float v_f = float(quantV) / 255.0; + vec2 f = vec2(u_f * 2.0 - 1.0, v_f * 2.0 - 1.0); + + vec3 axis = vec3(f.xy, 1.0 - abs(f.x) - abs(f.y)); + float t = max(-axis.z, 0.0); + axis.x += (axis.x >= 0.0) ? -t : t; + axis.y += (axis.y >= 0.0) ? -t : t; + axis = normalize(axis); + + + float theta = (float(angleInt) / 255.0) * 3.14159265359; + float halfTheta = theta * 0.5; + float s = sin(halfTheta); + float w = cos(halfTheta); + + return vec4(axis * s, w); +} + + + + + + + + + + + + + + + + + + + + + +uvec4 packSplat(vec3 center, vec3 scales, vec4 quaternion, vec4 rgba) { + uvec4 uRgba = uvec4(round(clamp(rgba * 255.0, 0.0, 255.0))); + + uint uQuat = encodeQuatOctXy88R8(quaternion); + + + uvec3 uQuat3 = uvec3(uQuat & 0xffu, (uQuat >> 8u) & 0xffu, (uQuat >> 16u) & 0xffu); + + + uvec3 uScales = uvec3( + (scales.x == 0.0) ? 0u : uint(round(clamp((log(scales.x) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u, + (scales.y == 0.0) ? 0u : uint(round(clamp((log(scales.y) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u, + (scales.z == 0.0) ? 0u : uint(round(clamp((log(scales.z) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u + ); + + + uint word0 = uRgba.r | (uRgba.g << 8u) | (uRgba.b << 16u) | (uRgba.a << 24u); + uint word1 = packHalf2x16(center.xy); + uint word2 = packHalf2x16(vec2(center.z, 0.0)) | (uQuat3.x << 16u) | (uQuat3.y << 24u); + uint word3 = uScales.x | (uScales.y << 8u) | (uScales.z << 16u) | (uQuat3.z << 24u); + return uvec4(word0, word1, word2, word3); +} + +void unpackSplat(uvec4 packed, out vec3 center, out vec3 scales, out vec4 quaternion, out vec4 rgba) { + uint word0 = packed.x, word1 = packed.y, word2 = packed.z, word3 = packed.w; + + uvec4 uRgba = uvec4(word0 & 0xffu, (word0 >> 8u) & 0xffu, (word0 >> 16u) & 0xffu, (word0 >> 24u) & 0xffu); + rgba = vec4(uRgba) / 255.0; + + center = vec4( + unpackHalf2x16(word1), + unpackHalf2x16(word2 & 0xffffu) + ).xyz; + + uvec3 uScales = uvec3(word3 & 0xffu, (word3 >> 8u) & 0xffu, (word3 >> 16u) & 0xffu); + scales = vec3( + (uScales.x == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.x - 1u) * LN_RESCALE), + (uScales.y == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.y - 1u) * LN_RESCALE), + (uScales.z == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.z - 1u) * LN_RESCALE) + ); + + uint uQuat = ((word2 >> 16u) & 0xFFFFu) | ((word3 >> 8u) & 0xFF0000u); + quaternion = decodeQuatOctXy88R8(uQuat); + + +} + +vec3 quatVec(vec4 q, vec3 v) { + + vec3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); +} + +vec4 quatQuat(vec4 q1, vec4 q2) { + return vec4( + q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y, + q1.w * q2.y - q1.x * q2.z + q1.y * q2.w + q1.z * q2.x, + q1.w * q2.z + q1.x * q2.y - q1.y * q2.x + q1.z * q2.w, + q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + ); +} + +mat3 scaleQuaternionToMatrix(vec3 s, vec4 q) { + + return mat3( + s.x * (1.0 - 2.0 * (q.y * q.y + q.z * q.z)), + s.x * (2.0 * (q.x * q.y + q.w * q.z)), + s.x * (2.0 * (q.x * q.z - q.w * q.y)), + s.y * (2.0 * (q.x * q.y - q.w * q.z)), + s.y * (1.0 - 2.0 * (q.x * q.x + q.z * q.z)), + s.y * (2.0 * (q.y * q.z + q.w * q.x)), + s.z * (2.0 * (q.x * q.z + q.w * q.y)), + s.z * (2.0 * (q.y * q.z - q.w * q.x)), + s.z * (1.0 - 2.0 * (q.x * q.x + q.y * q.y)) + ); +} + +vec4 slerp(vec4 q1, vec4 q2, float t) { + + float cosHalfTheta = dot(q1, q2); + + + if (abs(cosHalfTheta) >= 0.999) { + return q1; + } + + + + if (cosHalfTheta < 0.0) { + q2 = -q2; + cosHalfTheta = -cosHalfTheta; + } + + + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + + + float ratioA = sin((1.0 - t) * halfTheta) / sinHalfTheta; + float ratioB = sin(t * halfTheta) / sinHalfTheta; + + + return q1 * ratioA + q2 * ratioB; +} + +ivec3 splatTexCoord(int index) { + uint x = uint(index) & SPLAT_TEX_WIDTH_MASK; + uint y = (uint(index) >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK; + uint z = uint(index) >> SPLAT_TEX_LAYER_BITS; + return ivec3(x, y, z); +}`,ve=`precision highp float; +precision highp int; + +#include + +uniform bool encodeLinear; +uniform float maxStdDev; +uniform bool disableFalloff; +uniform float falloff; + +out vec4 fragColor; + +in vec4 vRgba; +in vec2 vSplatUv; +in vec3 vNdc; + +void main() { + float z = dot(vSplatUv, vSplatUv); + if (z > (maxStdDev * maxStdDev)) { + discard; + } + + float alpha = vRgba.a; + alpha *= mix(1.0, exp(-0.5 * z), falloff); + if (alpha < MIN_ALPHA) { + discard; + } + + vec3 rgb = vRgba.rgb; + if (encodeLinear) { + rgb = srgbToLinear(rgb); + } + fragColor = vec4(rgb, alpha); +}`,Xe=`precision highp float; +precision highp int; +precision highp usampler2DArray; + +#include + +attribute uint splatIndex; + +out vec4 vRgba; +out vec2 vSplatUv; +out vec3 vNdc; + +uniform vec2 renderSize; +uniform uint numSplats; +uniform vec4 renderToViewQuat; +uniform vec3 renderToViewPos; +uniform float maxStdDev; +uniform float time; +uniform float deltaTime; +uniform bool debugFlag; +uniform bool enable2DGS; +uniform float blurAmount; +uniform float preBlurAmount; +uniform float clipXY; + +uniform usampler2DArray packedSplats; + +void main() { + + gl_Position = vec4(0.0, 0.0, 2.0, 1.0); + + if (uint(gl_InstanceID) >= numSplats) { + return; + } + if (splatIndex == 0xffffffffu) { + + return; + } + + ivec3 texCoord = ivec3( + splatIndex & SPLAT_TEX_WIDTH_MASK, + (splatIndex >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK, + splatIndex >> SPLAT_TEX_LAYER_BITS + ); + uvec4 packed = texelFetch(packedSplats, texCoord, 0); + + vec3 center, scales; + vec4 quaternion, rgba; + unpackSplat(packed, center, scales, quaternion, rgba); + + if (rgba.a < MIN_ALPHA) { + return; + } + bvec3 zeroScales = equal(scales, vec3(0.0)); + if (all(zeroScales)) { + return; + } + + + vec3 viewCenter = quatVec(renderToViewQuat, center) + renderToViewPos; + + + if (viewCenter.z >= 0.0) { + return; + } + + + vec4 clipCenter = projectionMatrix * vec4(viewCenter, 1.0); + + + if (abs(clipCenter.z) >= clipCenter.w) { + return; + } + + + float clip = clipXY * clipCenter.w; + if (abs(clipCenter.x) > clip || abs(clipCenter.y) > clip) { + return; + } + + + vec4 viewQuaternion = quatQuat(renderToViewQuat, quaternion); + + if (enable2DGS && any(zeroScales)) { + vRgba = rgba; + vSplatUv = position.xy * maxStdDev; + + vec3 offset; + if (zeroScales.z) { + offset = vec3(vSplatUv.xy * scales.xy, 0.0); + } else if (zeroScales.y) { + offset = vec3(vSplatUv.x * scales.x, 0.0, vSplatUv.y * scales.z); + } else { + offset = vec3(0.0, vSplatUv.xy * scales.yz); + } + + vec3 viewPos = viewCenter + quatVec(viewQuaternion, offset); + gl_Position = projectionMatrix * vec4(viewPos, 1.0); + vNdc = gl_Position.xyz / gl_Position.w; + return; + } + + + vec3 ndcCenter = clipCenter.xyz / clipCenter.w; + + + mat3 RS = scaleQuaternionToMatrix(scales, viewQuaternion); + mat3 cov3D = RS * transpose(RS); + + + vec2 focal = 0.5 * renderSize * vec2(projectionMatrix[0][0], projectionMatrix[1][1]); + float invZ = 1.0 / viewCenter.z; + vec2 J1 = focal * invZ; + vec2 J2 = -(J1 * viewCenter.xy) * invZ; + mat3 J = mat3( + J1.x, 0.0, J2.x, + 0.0, J1.y, J2.y, + 0.0, 0.0, 0.0 + ); + + + + + + + + + mat3 cov2D = transpose(J) * cov3D * J; + float a = cov2D[0][0]; + float d = cov2D[1][1]; + float b = cov2D[0][1]; + + + a += preBlurAmount; + d += preBlurAmount; + + + float detOrig = a * d - b * b; + a += blurAmount; + d += blurAmount; + float det = a * d - b * b; + + + float blurAdjust = sqrt(max(0.0, detOrig / det)); + rgba.a *= blurAdjust; + if (rgba.a < MIN_ALPHA) { + return; + } + + + float eigenAvg = 0.5 * (a + d); + float eigenDelta = sqrt(max(0.0, eigenAvg * eigenAvg - det)); + float eigen1 = eigenAvg + eigenDelta; + float eigen2 = eigenAvg - eigenDelta; + + vec2 eigenVec1 = normalize(vec2((abs(b) < 0.001) ? 1.0 : b, eigen1 - a)); + vec2 eigenVec2 = vec2(eigenVec1.y, -eigenVec1.x); + + float scale1 = position.x * min(MAX_PIXEL_RADIUS, maxStdDev * sqrt(eigen1)); + float scale2 = position.y * min(MAX_PIXEL_RADIUS, maxStdDev * sqrt(eigen2)); + + + vec2 pixelOffset = eigenVec1 * scale1 + eigenVec2 * scale2; + vec2 ndcOffset = (2.0 / renderSize) * pixelOffset; + vec3 ndc = vec3(ndcCenter.xy + ndcOffset, ndcCenter.z); + + vRgba = rgba; + vSplatUv = position.xy * maxStdDev; + vNdc = ndc; + gl_Position = vec4(ndc.xy * clipCenter.w, clipCenter.zw); +}`;let GI=null;function je(){return GI||(e.ShaderChunk.splatDefines=Te,GI={splatVertex:Xe,splatFragment:ve}),GI}const OI=5;let YI=!1,uI=!1,Rt;const Jt=e.Scene.prototype.add;e.Scene.prototype.add=function(Q){return YI=YI||Q instanceof ZA,uI=uI||Q instanceof mQ,Jt.call(this,Q),this};const ze=e.Scene.prototype.onBeforeRender;e.Scene.prototype.onBeforeRender=function(Q){if(YI){if(!uI){const A=Rt||new mQ({renderer:Q});this.add(A)}e.Scene.prototype.onBeforeRender=ze,e.Scene.prototype.add=Jt}};const oA=class oA extends e.Mesh{constructor(A){const I=oA.makeUniforms(),g=je(),B=new e.ShaderMaterial({glslVersion:e.GLSL3,vertexShader:g.splatVertex,fragmentShader:g.splatFragment,uniforms:I,transparent:!0,blending:e.NormalBlending,depthTest:!0,depthWrite:!1,side:e.DoubleSide});super(PI,B),this.autoViewpoints=[],this.rotateToAccumulator=new qQ({value:new e.Quaternion}),this.translateToAccumulator=new hQ({value:new e.Vector3}),this.lastFrame=-1,this.lastUpdateTime=null,this.defaultCameras=[],this.pendingUpdate=null,this.envViewpoint=null,this.frustumCulled=!1,this.renderer=A.renderer,this.material=B,this.uniforms=I;const C=SA({gsplat:T},{gsplat:T},({gsplat:E})=>{if(!E)throw new Error("gsplat not defined");return E=SI(E,{rotate:this.rotateToAccumulator,translate:this.translateToAccumulator}),{gsplat:E}});this.modifier=new yt(C),this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!1,this.originDistance=A.originDistance??1,this.maxStdDev=A.maxStdDev??Math.sqrt(8),this.enable2DGS=A.enable2DGS??!0,this.preBlurAmount=A.preBlurAmount??0,this.blurAmount=A.blurAmount??.3,this.falloff=A.falloff??1,this.clipXY=A.clipXY??1.4,this.active=new QI,this.accumulatorCount=1,this.freeAccumulators=[];for(let E=0;E<1;++E)this.freeAccumulators.push(new QI),this.accumulatorCount+=1;this.defaultView=new fQ({...A.view,autoUpdate:!0,forge:this}),this.viewpoint=this.defaultView,this.prepareViewpoint(this.viewpoint),this.clock=A.clock?yB(A.clock):new e.Clock,Rt=this}static makeUniforms(){return{renderSize:{value:new e.Vector2},numSplats:{value:0},renderToViewQuat:{value:new e.Quaternion},renderToViewPos:{value:new e.Vector3},maxStdDev:{value:1},enable2DGS:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},falloff:{value:1},clipXY:{value:1.4},packedSplats:{type:"t",value:UA.getEmpty()},time:{value:0},deltaTime:{value:0},encodeLinear:{value:!1},debugFlag:{value:!1}}}canAllocAccumulator(){return this.freeAccumulators.length>0||this.accumulatorCount=OI)return null;A=new QI,this.accumulatorCount+=1}return A.refCount=1,A}releaseAccumulator(A){A.refCount-=1,A.refCount===0&&this.freeAccumulators.push(A)}newViewpoint(A){return new fQ({...A,forge:this})}onBeforeRender(A,I,g){var D,n;const B=this.time??this.clock.getElapsedTime(),C=B-(this.viewpoint.lastTime??B);this.viewpoint.lastTime=B;const E=A.info.render.frame,t=E!==this.lastFrame;this.lastFrame=E;const s=this.viewpoint;if(s===this.defaultView){if(t)if(!A.xr.isPresenting)this.defaultView.viewToWorld=g.matrixWorld.clone(),this.defaultCameras=[this.defaultView.viewToWorld];else{const w=A.xr.getCamera().cameras;this.defaultCameras=[w[0].matrixWorld,w[1].matrixWorld],this.defaultView.viewToWorld=Oe(this.defaultCameras)??new e.Matrix4}this.autoUpdate&&this.update({scene:I,viewToWorld:this.defaultView.viewToWorld})}if(t&&(this.uniforms.time.value=B,this.uniforms.deltaTime.value=C,this.uniforms.debugFlag.value=performance.now()/1e3%2<1),s.target)this.uniforms.renderSize.value.set(s.target.width,s.target.height);else{const w=A.getSize(this.uniforms.renderSize.value);if(w.x===1&&w.y===1){const c=(D=A.xr.getSession())==null?void 0:D.renderState.baseLayer;c&&(w.x=c.framebufferWidth,w.y=c.framebufferHeight)}}this.uniforms.encodeLinear.value=s.encodeLinear,this.uniforms.maxStdDev.value=this.maxStdDev,this.uniforms.enable2DGS.value=this.enable2DGS,this.uniforms.preBlurAmount.value=this.preBlurAmount,this.uniforms.blurAmount.value=this.blurAmount,this.uniforms.falloff.value=this.falloff,this.uniforms.clipXY.value=this.clipXY;const o=((n=s.display)==null?void 0:n.accumulator.toWorld)??new e.Matrix4,a=g.matrixWorld.clone().invert();o.clone().premultiply(a).decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,new e.Vector3)}prepareViewpoint(A){if(this.viewpoint=A??this.viewpoint,this.viewpoint.display){const{accumulator:I,geometry:g}=this.viewpoint.display;this.uniforms.numSplats.value=I.splats.numSplats,this.uniforms.packedSplats.value=I.splats.getTexture(),this.geometry=g}else this.uniforms.numSplats.value=0,this.uniforms.packedSplats.value=UA.getEmpty(),this.geometry=PI}update({scene:A,viewToWorld:I}){const g=this.matrixWorld.clone();this.preUpdate?this.updateInternal({scene:A,originToWorld:g,viewToWorld:I}):(this.pendingUpdate={scene:A,originToWorld:g},setTimeout(()=>{if(this.pendingUpdate){const{scene:B,originToWorld:C}=this.pendingUpdate;this.pendingUpdate=null,this.updateInternal({scene:B,originToWorld:C,viewToWorld:I})}},1))}updateInternal({scene:A,originToWorld:I,viewToWorld:g}){var D;if(!this.canAllocAccumulator())return!1;I||(I=this.active.toWorld),g=g??I.clone();const B=this.time??this.clock.getElapsedTime(),C=B-(this.lastUpdateTime??B);this.lastUpdateTime=B;const E=this.active.mapping.reduce((n,w)=>(n.set(w.node,w),n),new Map),{generators:t,globalEdits:s}=this.compileScene(A);for(const n of t)(D=n.frameUpdate)==null||D.call(n,{object:n,time:B,deltaTime:C,viewToWorld:g,globalEdits:s});for(const n of t){const w=E.get(n),c=n.generator?n.numSplats:0;(n.generator!==(w==null?void 0:w.generator)||c!==(w==null?void 0:w.count))&&n.updateVersion()}const a=!EI({matrix1:I,matrix2:this.active.toWorld,maxDistance:this.originDistance})||t.length!==E.size||t.some(n=>{var w;return n.version!==((w=E.get(n))==null?void 0:w.version)});let i=null;if(a){if(i=this.maybeAllocAccumulator(),!i)throw new Error("Unreachable");const n=!EI({matrix1:I,matrix2:this.active.toWorld,maxDistance:1e-5,minCoorient:.99999}),c=t.map((l,k)=>{const R=E.get(l);return R?[l.version-R.version,R.base,l]:[Number.POSITIVE_INFINITY,l.version,l]}).sort((l,k)=>l[0]!==k[0]?l[0]-k[0]:l[1]-k[1]).map(([l,k,R])=>R),r=c.map(l=>l.numSplats),{maxSplats:y,mapping:G}=i.splats.generateMapping(r),h=c.map((l,k)=>{const{base:R,count:d}=G[k];return{node:l,generator:l.generator,version:l.version,base:R,count:d}});I.clone().invert().decompose(this.translateToAccumulator.value,this.rotateToAccumulator.value,new e.Vector3),i.ensureGenerate(y),i.generateSplats({renderer:this.renderer,modifier:this.modifier,generators:h,forceUpdate:n,originToWorld:I}),i.splatsVersion=this.active.splatsVersion+1;const M=i.hasCorrespondence(this.active);i.mappingVersion=this.active.mappingVersion+(M?0:1),this.releaseAccumulator(this.active),this.active=i,this.prepareViewpoint()}return setTimeout(()=>{for(const n of this.autoViewpoints)n.autoPoll({accumulator:i??void 0})},1),!0}compileScene(A){const I=[];A.traverse(B=>{B instanceof TQ&&I.push(B)});const g=new Set;return A.traverseVisible(B=>{if(B instanceof HQ){let C=B.parent;for(;C!=null&&!(C instanceof ZA);)C=C.parent;C==null&&g.add(B)}}),{generators:I,globalEdits:Array.from(g)}}async renderEnvMap({renderer:A,scene:I,worldCenter:g,size:B=256,near:C=.1,far:E=1e3,hideObjects:t=[],update:s=!1}){var n,w;if(this.envViewpoint||(this.envViewpoint=this.newViewpoint({sort360:!0})),!oA.cubeRender||oA.cubeRender.target.width!==B||oA.cubeRender.near!==C||oA.cubeRender.far!==E){oA.cubeRender&&oA.cubeRender.target.dispose();const c=new e.WebGLCubeRenderTarget(B,{format:e.RGBAFormat,generateMipmaps:!0,minFilter:e.LinearMipMapLinearFilter}),r=new e.CubeCamera(C,E,c);oA.cubeRender={target:c,camera:r,near:C,far:E}}oA.pmrem||(oA.pmrem=new e.PMREMGenerator(A??this.renderer));const o=new e.Matrix4().setPosition(g);await((n=this.envViewpoint)==null?void 0:n.prepare({scene:I,viewToWorld:o,update:s}));const{target:a,camera:i}=oA.cubeRender;i.position.copy(g);const D=new Map;for(const c of t)D.set(c,c.visible),c.visible=!1;this.prepareViewpoint(this.envViewpoint),i.update(A??this.renderer,I),this.prepareViewpoint(this.defaultView);for(const[c,r]of D.entries())c.visible=r;return(w=oA.pmrem)==null?void 0:w.fromCubemap(a.texture).texture}recurseSetEnvMap(A,I){A.traverse(g=>{if(g instanceof e.Mesh)if(Array.isArray(g.material))for(const B of g.material)B instanceof e.MeshStandardMaterial&&(B.envMap=I);else g.material instanceof e.MeshStandardMaterial&&(g.material.envMap=I)})}getRgba({generator:A,rgba:I}){const g=this.active.mapping.find(({node:B})=>B===A);if(!g)throw new Error("Generator not found");return I=I??new JI,I.fromPackedSplats({packedSplats:this.active.splats,base:g.base,count:g.count,renderer:this.renderer}),I}async readRgba({generator:A,rgba:I}){return I=this.getRgba({generator:A,rgba:I}),I.read()}};oA.cubeRender=null,oA.pmrem=null;let mQ=oA;const PI=new dI(new Uint32Array(1),0);SA({packedSplats:ZQ,index:"int"},{gsplat:T},({packedSplats:Q,index:A})=>{if(!Q||!A)throw new Error("Invalid input");return{gsplat:UQ(Q,A)}});function Oe(Q){if(Q.length===0)return null;const A=new e.Vector3,I=new e.Quaternion,g=new e.Vector3,B=[],C=[];for(const E of Q)E.decompose(A,I,g),B.push(A),C.push(I);return new e.Matrix4().compose(lB(B),MB(C),new e.Vector3(1,1,1))}class Pe{constructor({fileBytes:A}){this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A,this.reader=new JB({fileBytes:this.fileBytes});const I=new DataView(this.reader.read(16).buffer);if(I.getUint32(0,!0)!==1347635022)throw new Error("Invalid SPZ file");if(this.version=I.getUint32(4,!0),this.version<1||this.version>2)throw new Error(`Unsupported SPZ version: ${this.version}`);this.numSplats=I.getUint32(8,!0),this.shDegree=I.getUint8(12),this.fractionalBits=I.getUint8(13),this.flags=I.getUint8(14),this.flagAntiAlias=(this.flags&1)!==0,this.reserved=I.getUint8(15),this.parsed=!1}parseSplats(A,I,g,B,C,E){if(this.parsed)throw new Error("SPZ file already parsed");if(this.parsed=!0,this.version===1){const t=this.reader.read(this.numSplats*3*2),s=new Uint16Array(t.buffer);for(let o=0;o>8)/t,D=((s[a+5]<<24|s[a+4]<<16|s[a+3]<<8)>>8)/t,n=((s[a+8]<<24|s[a+7]<<16|s[a+6]<<8)>>8)/t;A(o,i,D,n)}}else throw new Error("Unreachable");{const t=this.reader.read(this.numSplats);for(let s=0;s=1){const t=new Float32Array(9),s=this.shDegree>=2?new Float32Array(5*3):void 0,o=this.shDegree>=3?new Float32Array(7*3):void 0,a=this.reader.read(this.numSplats*_e[this.shDegree]*3);let i=0;for(let D=0;D[Yt],value:{numSplats:this.numSplats,numBones:this.numBones,skinTexture:this.skinTexture,boneTexture:this.boneTexture}})}modify(A){return ID(A,this.uniform)}setRestQuatPos(A,I,g){const B=A*16;this.boneData[B+0]=I.x,this.boneData[B+1]=I.y,this.boneData[B+2]=I.z,this.boneData[B+3]=I.w,this.boneData[B+4]=g.x,this.boneData[B+5]=g.y,this.boneData[B+6]=g.z,this.boneData[B+7]=0,this.boneData[B+8]=0,this.boneData[B+9]=0,this.boneData[B+10]=0,this.boneData[B+11]=1,this.boneData[B+12]=0,this.boneData[B+13]=0,this.boneData[B+14]=0,this.boneData[B+15]=0}setBoneQuatPos(A,I,g){const B=A*16,C=new e.Quaternion(this.boneData[B+0],this.boneData[B+1],this.boneData[B+2],this.boneData[B+3]),E=new e.Vector3(this.boneData[B+4],this.boneData[B+5],this.boneData[B+6]),t=C.clone().invert(),s=g.clone().sub(E);s.applyQuaternion(t),t.multiply(I);const o=new e.Quaternion(s.x,s.y,s.z,0).multiply(C);this.boneData[B+8]=t.x,this.boneData[B+9]=t.y,this.boneData[B+10]=t.z,this.boneData[B+11]=t.w,this.boneData[B+12]=.5*o.x,this.boneData[B+13]=.5*o.y,this.boneData[B+14]=.5*o.z,this.boneData[B+15]=.5*o.w}setSplatBones(A,I,g){const B=A*4;this.skinData[B+0]=Math.min(255,Math.max(0,Math.round(g.x*255)))+(I.x<<8),this.skinData[B+1]=Math.min(255,Math.max(0,Math.round(g.y*255)))+(I.y<<8),this.skinData[B+2]=Math.min(255,Math.max(0,Math.round(g.z*255)))+(I.z<<8),this.skinData[B+3]=Math.min(255,Math.max(0,Math.round(g.w*255)))+(I.w<<8)}updateBones(){this.boneTexture.needsUpdate=!0,this.mesh.needsUpdate=!0}}const dt={type:"GsplatSkinning"},Yt=gA(` + struct GsplatSkinning { + int numSplats; + int numBones; + usampler2DArray skinTexture; + sampler2D boneTexture; + }; +`),QD=gA(` + void applyGsplatSkinning( + int numSplats, int numBones, + usampler2DArray skinTexture, sampler2D boneTexture, + int splatIndex, inout vec3 center, inout vec4 quaternion + ) { + if ((splatIndex < 0) || (splatIndex >= numSplats)) { + return; + } + + uvec4 skinData = texelFetch(skinTexture, splatTexCoord(splatIndex), 0); + + float weights[4]; + weights[0] = float(skinData.x & 0xffu) / 255.0; + weights[1] = float(skinData.y & 0xffu) / 255.0; + weights[2] = float(skinData.z & 0xffu) / 255.0; + weights[3] = float(skinData.w & 0xffu) / 255.0; + + uint boneIndices[4]; + boneIndices[0] = (skinData.x >> 8u) & 0xffu; + boneIndices[1] = (skinData.y >> 8u) & 0xffu; + boneIndices[2] = (skinData.z >> 8u) & 0xffu; + boneIndices[3] = (skinData.w >> 8u) & 0xffu; + + vec4 quat = vec4(0.0); + vec4 dual = vec4(0.0); + for (int i = 0; i < 4; i++) { + if (weights[i] > 0.0) { + int boneIndex = int(boneIndices[i]); + vec4 boneQuat = vec4(0.0, 0.0, 0.0, 1.0); + vec4 boneDual = vec4(0.0); + if (boneIndex < numBones) { + boneQuat = texelFetch(boneTexture, ivec2(2, boneIndex), 0); + boneDual = texelFetch(boneTexture, ivec2(3, boneIndex), 0); + } + + if ((i > 0) && (dot(quat, boneQuat) < 0.0)) { + // Flip sign if next blend is pointing in the opposite direction + boneQuat = -boneQuat; + boneDual = -boneDual; + } + quat += weights[i] * boneQuat; + dual += weights[i] * boneDual; + } + } + + // Normalize dual quaternion + float norm = length(quat); + quat /= norm; + dual /= norm; + vec3 translate = vec3( + 2.0 * (-dual.w * quat.x + dual.x * quat.w - dual.y * quat.z + dual.z * quat.y), + 2.0 * (-dual.w * quat.y + dual.x * quat.z + dual.y * quat.w - dual.z * quat.x), + 2.0 * (-dual.w * quat.z - dual.x * quat.y + dual.y * quat.x + dual.z * quat.w) + ); + + center = quatVec(quat, center) + translate; + quaternion = quatQuat(quat, quaternion); + } +`);function ID(Q,A){return new f({inTypes:{gsplat:T,skinning:dt},outTypes:{gsplat:T},globals:()=>[Yt,QD],inputs:{gsplat:Q,skinning:A},statements:({inputs:g,outputs:B})=>{const{skinning:C}=g,{gsplat:E}=B;return dA(` + ${E} = ${g.gsplat}; + if (isGsplatActive(${E}.flags)) { + applyGsplatSkinning( + ${C}.numSplats, ${C}.numBones, + ${C}.skinTexture, ${C}.boneTexture, + ${E}.index, ${E}.center, ${E}.quaternion + ); + } + `)}}).outputs.gsplat}function gD({splats:Q,extents:A,stepSize:I=1,pointRadius:g=.01,pointShadowScale:B=2,opacity:C=1,color:E}){const s=new e.Vector3,o=new e.Vector3,a=new e.Quaternion(0,0,0,1);E==null&&(E=(D,n)=>D.set(.55+.45*Math.cos(n.x*1),.55+.45*Math.cos(n.y*1),.55+.45*Math.cos(n.z*1)));const i=new e.Color;for(let D=A.min.z;D=g)return;const h=new e.Vector3().addVectors(r,y).normalize(),M=new e.Vector3().addVectors(y,G).normalize(),l=new e.Vector3().addVectors(G,r).normalize();a(c+1,r,h,l),a(c+1,h,y,M),a(c+1,l,M,G),a(c+1,h,M,l)}for(const c of[-1,1])for(const r of[-1,1])for(const y of[-1,1]){const G=new e.Vector3(c,0,0),h=new e.Vector3(0,r,0),M=new e.Vector3(0,0,y);a(0,G,h,M)}const i=Object.values(s),D=new e.Vector3(C,C,E),n=new e.Quaternion,w=typeof t=="function"?new e.Color:t;for(const c of i)n.setFromUnitVectors(new e.Vector3(0,0,-1),c),typeof t=="function"&&t(w,c),c.multiplyScalar(I),c.add(A),Q.pushSplat(c,D,n,1,w)}function ED({text:Q,font:A,fontSize:I,color:g,rgb:B,dotRadius:C,textAlign:E,lineHeight:t}){A=A??"Arial",I=I??32,g=g??new e.Color(1,1,1),C=C??.8,E=E??"start",t=t??1;const s=Q.split(` +`),o=document.createElement("canvas"),a=o.getContext("2d");if(!a)throw new Error("Failed to create canvas context");a.font=`${I}px ${A}`,a.textAlign=E;const i=a.measureText(""),D=i.fontBoundingBoxAscent+i.fontBoundingBoxDescent;let n=Number.POSITIVE_INFINITY,w=Number.NEGATIVE_INFINITY,c=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY;for(let U=0;U0){const V=v/255;d.set(S-.5*(h-1),.5*(M-1)-U,0),R.pushSplat(d,Y,m,V,B)}J+=4}const x=new ZA({packedSplats:R});return x.recolor=g,x}function tD({url:Q,dotRadius:A,subXY:I,forEachSplat:g}){return A=A??.8,I=Math.max(1,Math.floor(I??1)),new ZA({constructSplats:async B=>new Promise((C,E)=>{const t=new Image;t.onerror=E,t.onload=()=>{const{width:s,height:o}=t,a=document.createElement("canvas");a.width=s,a.height=o;const i=a.getContext("2d");if(!i){E(new Error("Failed to create canvas context"));return}i.imageSmoothingEnabled=!0,i.imageSmoothingQuality="high";const D=Math.round(s/I),n=Math.round(o/I);i.drawImage(t,0,0,D,n);try{const w=i.getImageData(0,0,D,n),c=new Uint8Array(w.data.buffer),r=new e.Vector3,y=new e.Vector3().setScalar(A),G=new e.Quaternion(0,0,0,1),h=new e.Color;let M=0;for(let l=0;l0){let Y=d/255;h.set(c[R+0]/255,c[R+1]/255,c[R+2]/255),r.set(k-.5*(D-1),.5*(n-1)-l,0),y.setScalar(A),G.set(0,0,0,1);let m=!0;if(g){const J=g(D,n,M,r,y,G,Y,h);Y=J??Y,m=J!==null}m&&B.pushSplat(r,y,G,Y,h)}M+=1}C()}catch(w){E(w)}},t.src=Q})})}function iD({box:Q,cells:A,dotScale:I,color:g,opacity:B}){A.x=Math.max(1,Math.round(A.x)),A.y=Math.max(1,Math.round(A.y)),A.z=Math.max(1,Math.round(A.z)),B=B??1;const C=A.x*A.y*A.z,E=q("int",A.x),t=q("int",A.y);q("int",A.z);const s=pA(0),o=new TQ({numSplats:C,generator:SA({index:"int"},{gsplat:T},({index:i})=>{if(!i)throw new Error("index is undefined");const D=kI(i,E),n=$Q(i,E),w=kI(n,t),c=$Q(n,t),r=mA({vectorType:"ivec3",x:D,y:w,z:c}),y=dC(s),G=mA({vectorType:"ivec2",x:i,y}),h=UE(G),M=q("vec3",Q.min),l=q("vec3",Q.max),k=LQ(l,M),R=$Q(wA(tQ(r),h),q("vec3",A));let d,Y,m;g?(d=q("float",g.r),Y=q("float",g.g),m=q("float",g.b)):{r:d,g:Y,b:m}=YQ(R).outputs;const J=mA({vectorType:"vec4",r:d,g:Y,b:m,a:q("float",B)}),x=wA(M,CA(k,R)),U=tQ(q("float",I)),S=q("vec4",new e.Quaternion(0,0,0,1));let v=rQ({flags:II("uint","GSPLAT_FLAG_ACTIVE"),index:i,center:x,scales:U,quaternion:S,rgba:J});return v=a.modify(v),{gsplat:v}},{globals:()=>[hA]}),update:({time:i})=>{s.value=i,a.update(o),o.updateVersion()}}),a=new CQ;return o}const sD={box:new e.Box3(new e.Vector3(-1,-1,-1),new e.Vector3(1,1,1)),density:100,fallDirection:new e.Vector3(-1,-3,1).normalize(),fallVelocity:.02,wanderScale:.04,wanderVariance:2,color1:new e.Color(1,1,1),color2:new e.Color(.5,.5,1),minScale:.001,maxScale:.005,anisoScale:new e.Vector3(1,1,1)},oD={box:new e.Box3(new e.Vector3(-2,-1,-2),new e.Vector3(2,5,2)),density:10,fallDirection:new e.Vector3(0,-1,0),fallVelocity:2,wanderScale:.1,wanderVariance:1,color1:new e.Color(1,1,1),color2:new e.Color(.25,.25,.5),minScale:.005,maxScale:.01,anisoScale:new e.Vector3(.1,1,.1)};function aD({box:Q,minY:A,numSplats:I,density:g,anisoScale:B,minScale:C,maxScale:E,fallDirection:t,fallVelocity:s,wanderScale:o,wanderVariance:a,color1:i,color2:D,opacity:n,onFrame:w}){Q=Q??new e.Box3(new e.Vector3(-1,-1,-1),new e.Vector3(1,1,1));const c=(Q.max.x-Q.min.x)*(Q.max.y-Q.min.y)*(Q.max.z-Q.min.z);g=g??100,I=I??Math.max(1,Math.min(1e6,Math.round(c*g)));const r=pA(C??.001),y=pA(E??.005),G=vA(((B==null?void 0:B.clone())??new e.Vector3(1,1,1)).normalize()),h=vA((t??new e.Vector3(0,-1,0)).normalize()),M=pA(s??.02),l=pA(o??.01),k=pA(a??2),R=vA(i??new e.Color(1,1,1)),d=vA(D??new e.Color(.5,.5,1)),Y=pA(n??1),m=pA(0),J=vA(new e.Vector3(0,0,0)),x=vA(Q.min),U=vA(Q.max),S=pA(A??Number.NEGATIVE_INFINITY),v=LQ(U,x),V=new TQ({numSplats:I,generator:SA({index:"int"},{gsplat:T},({index:$})=>{if(!$)throw new Error("index not defined");const X=FI($),eA=YQ(X).outputs.w;let AA=tQ(X),sA=AI(CA(eA,q("float",100)));sA=RI(CA(II("float","PI"),sA)),sA=wA(r,CA(sA,LQ(y,r)));const DA=CA(sA,G),YA=AI(CA(eA,q("float",10))),yA=AI(eA),nA=SB(R,d,yA),L=CA(nA,YA),GA=FI(mA({vectorType:"ivec2",x:$,y:q("int",6837)}));let BA=tQ(GA),lA=CA(YQ(GA).outputs.w,k);lA=wA(m,lA),AA=wA(AA,J);const MA=uB(AA,q("vec3",new e.Vector3(1,1,1)));AA=wA(x,CA(v,MA));const LA=q("vec4",new e.Quaternion(0,0,0,1));BA=RI(wA(tQ(lA),BA)),BA=CA(BA,l);let NA=wA(AA,BA),xA=YQ(NA).outputs.y;xA=UB(S,xA),NA=mA({vector:NA,y:xA});let kA=rQ({flags:II("uint","GSPLAT_FLAG_ACTIVE"),index:$,center:NA,scales:DA,quaternion:LA,rgb:L,opacity:Y});return kA=_.modify(kA),{gsplat:kA}},{globals:()=>[hA]}),update:({object:$,time:X,deltaTime:eA})=>{m.value=X,_.update(V);const AA=h.value.clone().multiplyScalar(M.value*eA);J.value.add(AA),$.visible=Y.value>0,w==null||w({object:$,time:X,deltaTime:eA}),V.updateVersion()}}),_=new CQ;return{snow:V,min:x,max:U,minY:S,color1:R,color2:d,opacity:Y,fallVelocity:M,wanderVariance:k,wanderScale:l,fallDirection:h,minScale:r,maxScale:y,anisoScale:G}}const eD=Object.freeze(Object.defineProperty({__proto__:null,DEFAULT_RAIN:oD,DEFAULT_SNOW:sD,snowBox:aD,staticBox:iD},Symbol.toStringTag,{value:"Module"})),uQ=class uQ{static createButton(A,I={}){const g=navigator.xr;if(!g)return null;const B=g,C=document.createElement("button");A.xr.enabled=!0,A.xr.setReferenceSpaceType("local");function E(){let i=null;async function D(c){console.log("onSessionStarted"),c.addEventListener("end",n),await A.xr.setSession(c),C.textContent="EXIT VR",i=c}function n(){console.log("onSessionEnded"),i==null||i.removeEventListener("end",n),C.textContent="ENTER VR",i=null}C.style.display="",C.style.cursor="pointer",C.style.left="calc(50% - 100px)",C.style.width="200px",C.style.height="100px",C.textContent="ENTER VR";const w={...I,optionalFeatures:[...I.optionalFeatures||[]]};C.onmouseenter=()=>{C.style.opacity="1.0"},C.onmouseleave=()=>{C.style.opacity="0.5"},C.onclick=()=>{i===null?(console.log("requesting session"),B.requestSession("immersive-vr",w).then(D)):(console.log("ending session"),i.end())}}function t(){C.style.display="none",C.style.cursor="auto",C.style.left="calc(50% - 75px)",C.style.width="150px",C.onmouseenter=null,C.onmouseleave=null,C.onclick=null}function s(){t(),C.textContent="VR NOT SUPPORTED"}function o(i){t(),console.warn("Exception when trying to call xr.isSessionSupported",i),C.textContent="VR NOT ALLOWED"}function a(i){i.style.position="absolute",i.style.bottom="20px",i.style.padding="12px 6px",i.style.border="1px solid #fff",i.style.borderRadius="4px",i.style.background="rgba(0,0,0,0.1)",i.style.color="#fff",i.style.font="normal 13px sans-serif",i.style.textAlign="center",i.style.opacity="0.5",i.style.outline="none",i.style.zIndex="999"}return C.id="VRButton",C.style.display="none",a(C),B.isSessionSupported("immersive-vr").then(i=>{i?E():s(),i&&uQ.xrSessionIsGranted&&C.click()}).catch(o),C}static registerSessionGrantedListener(){const A=navigator.xr;if(!A)return null;const I=A;/WebXRViewer\//i.test(navigator.userAgent)||I.addEventListener("sessiongranted",()=>{uQ.xrSessionIsGranted=!0})}};uQ.xrSessionIsGranted=!1;let sI=uQ;sI.registerSessionGrantedListener();const DD=.5,nD=.5,cD=0;var cI=(Q=>(Q.w="wrist",Q.t0="thumb-metacarpal",Q.t1="thumb-phalanx-proximal",Q.t2="thumb-phalanx-distal",Q.t3="thumb-tip",Q.i0="index-finger-metacarpal",Q.i1="index-finger-phalanx-proximal",Q.i2="index-finger-phalanx-intermediate",Q.i3="index-finger-phalanx-distal",Q.i4="index-finger-tip",Q.m0="middle-finger-metacarpal",Q.m1="middle-finger-phalanx-proximal",Q.m2="middle-finger-phalanx-intermediate",Q.m3="middle-finger-phalanx-distal",Q.m4="middle-finger-tip",Q.r0="ring-finger-metacarpal",Q.r1="ring-finger-phalanx-proximal",Q.r2="ring-finger-phalanx-intermediate",Q.r3="ring-finger-phalanx-distal",Q.r4="ring-finger-tip",Q.p0="pinky-finger-metacarpal",Q.p1="pinky-finger-phalanx-proximal",Q.p2="pinky-finger-phalanx-intermediate",Q.p3="pinky-finger-phalanx-distal",Q.p4="pinky-finger-tip",Q))(cI||{});const KI=Object.keys(cI),wD=KI.length,rD={w:0,t0:1,t1:2,t2:3,t3:4,i0:5,i1:6,i2:7,i3:8,i4:9,m0:10,m1:11,m2:12,m3:13,m4:14,r0:15,r1:16,r2:17,r3:18,r4:19,p0:20,p1:21,p2:22,p3:23,p4:24},kQ={w:.02,t0:.02,t1:.014,t2:.0115,t3:.0085,i0:.022,i1:.012,i2:.0085,i3:.0075,i4:.0065,m0:.021,m1:.012,m2:.008,m3:.0075,m4:.0065,r0:.019,r1:.011,r2:.0075,r3:.007,r4:.006,p0:.012,p1:.01,p2:.007,p3:.0065,p4:.0055},ut=[["w","t0","t1","t2","t3"],["w","i0","i1","i2","i3","i4"],["w","m0","m1","m2","m3","m4"],["w","r0","r1","r2","r3","r4"],["w","p0","p1","p2","p3","p4"]],Ut=[[8,10,8,6],[8,19,14,8,6],[8,19,14,8,6],[8,19,14,8,6],[8,19,14,8,6]],hD=["t3","i4","m4","r4","p4"],yD=["i4","m4","r4","p4"];var ZI=(Q=>(Q.left="left",Q.right="right",Q))(ZI||{});const oI=Object.keys(ZI);class GD{constructor(){this.hands={},this.last={},this.values={},this.tests={},this.lastTests={},this.updated=!1}update({xr:A,xrFrame:I}){const g=A.getSession();if(!g)return;const B=A.getReferenceSpace();if(B&&I.getJointPose){this.last=this.hands,this.lastTests=this.tests,this.hands={},this.values={},this.tests={};for(const C of g.inputSources){if(!C.hand)continue;const E=C.handedness;this.hands[E]={};for(const t of KI){const s=C.hand.get(cI[t]);if(s){const o=I.getJointPose(s,B);if(o){const{position:a,orientation:i}=o.transform;this.hands[E][t]={position:new j.Vector3(a.x,a.y,a.z),quaternion:new j.Quaternion(i.x,i.y,i.z,i.w),radius:o.radius||.001}}}}}for(const C of oI)for(const{key:E,value:t}of[{key:`${C}AllTips`,value:this.allTipsTouching(C)},{key:`${C}IndexThumb`,value:this.touching(C,"i4",C,"t3")},{key:`${C}MiddleThumb`,value:this.touching(C,"m4",C,"t3")},{key:`${C}RingThumb`,value:this.touching(C,"r4",C,"t3")},{key:`${C}PinkyThumb`,value:this.touching(C,"p4",C,"t3")},{key:`${C}TriTips`,value:this.triTipsTouching(C)}])this.values[E]=t,this.tests[E]=t===1?!0:t===0?!1:this.lastTests[E]??!1}}makeGhostMesh(){const A=new j.Vector3,I=new j.Vector3(.01,.01,.01),g=new j.Quaternion(0,0,0,1),B=new j.Color(1,1,1),C=Math.PI*3,E=new j.Color(1,1,1);let t=1;const s=new ZA({onFrame:()=>{let o=0;for(const a of oI){const i=this.values[`${a}MiddleThumb`],D=this.hands[a];for(const[n,w]of ut.entries())for(let c=1;c.8&&(d*=Math.sqrt(1-((l-.8)/.2)**2)),I.set(.65*d,.5*d,.003),B.set(.55+.45*Math.sin(A.x*C),.55+.45*Math.sin(A.y*C),.55+.45*Math.sin(A.z*C)),a==="right"&&B.set(1-B.r,1-B.g,1-B.b),B.lerp(E,i),t=.75}s.packedSplats.setSplat(o,A,I,g,t,B),o+=1}}}s.packedSplats.numSplats=o,s.packedSplats.needsUpdate=!0,s.numSplats=o}});return s}distance(A,I,g,B,C=!1){const E=C?this.last[A]:this.hands[A],t=C?this.last[g]:this.hands[g],s=E==null?void 0:E[I],o=t==null?void 0:t[B];return!s||!o?Number.POSITIVE_INFINITY:s.position.distanceTo(o.position)}separation(A,I,g,B,C=!1){const E=this.distance(A,I,g,B,C);return E===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:E-kQ[I]-kQ[B]}touching(A,I,g,B,C=!1){const E=this.separation(A,I,g,B,C);return E===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:1-Math.max(0,Math.min(1,E/.01-cD))}allTipsTouching(A,I=!1){return Math.min(this.touching(A,"t3",A,"i4",I),this.touching(A,"i4",A,"m4",I),this.touching(A,"m4",A,"r4",I),this.touching(A,"r4",A,"p4",I))}triTipsTouching(A,I=!1){return Math.min(this.touching(A,"t3",A,"i4",I),this.touching(A,"i4",A,"m4",I),this.touching(A,"m4",A,"t3",I))}}class lD{constructor({xrHands:A,control:I,moveInertia:g,rotateInertia:B}){this.lastGrip={},this.lastPivot=new j.Vector3,this.rotateVelocity=0,this.velocity=new j.Vector3,this.xrHands=A,this.control=I,this.moveInertia=g??DD,this.rotateInertia=B??nD}update(A){var C,E,t,s,o;const I={};for(const a of oI){const i=this.xrHands.hands[a];i&&this.xrHands.tests[`${a}MiddleThumb`]&&(I[a]=new j.Vector3().add(((C=i.t3)==null?void 0:C.position)??new j.Vector3).add(((E=i.i4)==null?void 0:E.position)??new j.Vector3).add(((t=i.m4)==null?void 0:t.position)??new j.Vector3).add(((s=i.r4)==null?void 0:s.position)??new j.Vector3).add(((o=i.p4)==null?void 0:o.position)??new j.Vector3).multiplyScalar(1/5))}if(I.left&&I.right&&this.lastGrip.left&&this.lastGrip.right){const a=I.left.clone().add(I.right).multiplyScalar(.5),i=this.lastGrip.left.clone().add(this.lastGrip.right).multiplyScalar(.5);this.lastPivot=a;const D=a.clone().applyMatrix4(this.control.matrix);D.sub(i.clone().applyMatrix4(this.control.matrix)),D.multiplyScalar(1/A),this.velocity.lerp(D,1-Math.exp(-20*A));const n=Math.atan2(I.left.z-a.z,I.left.x-a.x),w=Math.atan2(this.lastGrip.left.z-i.z,this.lastGrip.left.x-i.x);let c=n-w;c>Math.PI?c-=Math.PI*2:c<-Math.PI&&(c+=Math.PI*2);const r=c/A,y=Math.exp(-20*A);this.rotateVelocity=this.rotateVelocity*y+r*(1-y)}else if(this.rotateVelocity*=Math.exp(-A/this.rotateInertia),I.left&&this.lastGrip.left){const a=I.left.clone().applyMatrix4(this.control.matrix);a.sub(this.lastGrip.left.clone().applyMatrix4(this.control.matrix)),a.multiplyScalar(1/A),this.velocity.lerp(a,1-Math.exp(-20*A))}else if(I.right&&this.lastGrip.right){const a=I.right.clone().applyMatrix4(this.control.matrix);a.sub(this.lastGrip.right.clone().applyMatrix4(this.control.matrix)),a.multiplyScalar(1/A),this.velocity.lerp(a,1-Math.exp(-20*A))}else this.velocity.multiplyScalar(Math.exp(-A/this.moveInertia));const g=this.lastPivot.clone().negate(),B=new j.Matrix4().makeTranslation(g).premultiply(new j.Matrix4().makeRotationY(this.rotateVelocity*A)).premultiply(new j.Matrix4().makeTranslation(this.lastPivot));this.control.matrix.multiply(B),this.control.matrix.decompose(this.control.position,this.control.quaternion,this.control.scale),this.control.updateMatrixWorld(!0),this.control.position.sub(this.velocity.clone().multiplyScalar(A)),this.lastGrip=I}}const MD=1,ND=2,kD=.002,FD=.006,RD=.0015,JD=.15,dD=.15,YD=.1,uD=2,UD=200,SD=400,LD=50,pD={KeyW:new e.Vector3(0,0,-1),KeyS:new e.Vector3(0,0,1),KeyA:new e.Vector3(-1,0,0),KeyD:new e.Vector3(1,0,0),KeyR:new e.Vector3(0,1,0),KeyF:new e.Vector3(0,-1,0)},HD={ArrowUp:new e.Vector3(0,0,-1),ArrowDown:new e.Vector3(0,0,1),ArrowLeft:new e.Vector3(-1,0,0),ArrowRight:new e.Vector3(1,0,0),PageUp:new e.Vector3(0,1,0),PageDown:new e.Vector3(0,-1,0)},fD={KeyQ:new e.Vector3(0,0,1),KeyE:new e.Vector3(0,0,-1)},mD={Home:new e.Vector3(0,-1,0),End:new e.Vector3(0,1,0),Insert:new e.Vector3(-1,0,0),Delete:new e.Vector3(1,0,0)};class bD{constructor({canvas:A}){this.lastTime=0,this.fpsMovement=new St({}),this.pointerControls=new Lt({canvas:A})}update(A){const I=performance.now(),g=(I-(this.lastTime||I))/1e3;this.lastTime=I,this.fpsMovement.update(g,A),this.pointerControls.update(g,A)}}class St{constructor({moveSpeed:A,rollSpeed:I,stickThreshold:g,rotateSpeed:B,keycodeMoveMapping:C,keycodeRotateMapping:E,gamepadMapping:t,capsMultiplier:s,shiftMultiplier:o,ctrlMultiplier:a,xr:i}={}){this.enable=!0,this.moveSpeed=A??MD,this.rollSpeed=I??ND,this.stickThreshold=g??YD,this.rotateSpeed=B??uD,this.keycodeMoveMapping=C??{...pD,...HD},this.keycodeRotateMapping=E??{...fD,...mD},this.gamepadMapping=t??{4:"rollLeft",5:"rollRight",6:"ctrl",7:"shift"},this.capsMultiplier=s??10,this.shiftMultiplier=o??5,this.ctrlMultiplier=a??1/5,this.xr=i,this.keydown={},this.keycode={},document.addEventListener("keydown",D=>{this.keydown[D.key]=!0,this.keycode[D.code]=!0}),document.addEventListener("keyup",D=>{this.keydown[D.key]=!1,this.keycode[D.code]=!1})}update(A,I){var a,i;if(!this.enable)return;const g=[new e.Vector2,new e.Vector2],B=navigator.getGamepads()[0];B&&(g[0].set(B.axes[0],B.axes[1]),g[1].set(B.axes[2],B.axes[3]));const C=(B==null?void 0:B.buttons.map(D=>D.pressed))||[],E=Array.from(((i=(a=this.xr)==null?void 0:a.getSession())==null?void 0:i.inputSources)??[]);for(const D of E){const n=D.gamepad;if(n)switch(D.handedness){case"none":{g[0].x+=n.axes[0],g[0].y+=n.axes[1],g[1].x+=n.axes[2],g[1].y+=n.axes[3];break}case"left":{g[0].x+=n.axes[2],g[0].y+=n.axes[3];break}case"right":{g[1].x+=n.axes[2],g[1].y+=n.axes[3];break}}}for(const D of g)D.x=Math.abs(D.x)>=this.stickThreshold?D.x:0,D.y=Math.abs(D.y)>=this.stickThreshold?D.y:0;const t=new e.Vector3(g[1].x,g[1].y,0).multiplyScalar(this.rotateSpeed);for(const[D,n]of Object.entries(this.keycodeRotateMapping))this.keycode[D]&&t.add(n);for(const D in this.gamepadMapping)if(C[Number.parseInt(D)])switch(this.gamepadMapping[D]){case"rollLeft":t.z+=1;break;case"rollRight":t.z-=1;break}if(t.multiply(new e.Vector3(this.rotateSpeed,this.rotateSpeed,this.rollSpeed)),t.manhattanLength()>0){t.multiplyScalar(A);const D=new e.Euler().setFromQuaternion(I.quaternion,"YXZ");D.y-=t.x,D.x=Math.max(-Math.PI/2,Math.min(Math.PI/2,D.x-t.y)),D.z=Math.max(-Math.PI,Math.min(Math.PI,D.z+t.z)),I.quaternion.setFromEuler(D)}const s=new e.Vector3(g[0].x,0,g[0].y);for(const[D,n]of Object.entries(this.keycodeMoveMapping))this.keycode[D]&&s.add(n);let o=1;this.keydown.CapsLock&&(o*=this.capsMultiplier),(this.keycode.ShiftLeft||this.keycode.ShiftRight)&&(o*=this.shiftMultiplier),(this.keycode.ControlLeft||this.keycode.ControlRight)&&(o*=this.ctrlMultiplier);for(const D in this.gamepadMapping)if(C[Number.parseInt(D)])switch(this.gamepadMapping[D]){case"shift":o*=this.shiftMultiplier;break;case"ctrl":o*=this.ctrlMultiplier;break}s.applyQuaternion(I.quaternion),I.position.add(s.multiplyScalar(this.moveSpeed*o*A))}}class Lt{constructor({canvas:A,rotateSpeed:I,slideSpeed:g,scrollSpeed:B,reverseRotate:C,reverseSlide:E,reverseSwipe:t,reverseScroll:s,moveInertia:o,rotateInertia:a,doublePress:i}){this.enable=!0,this.canvas=A,this.rotateSpeed=I??kD,this.slideSpeed=g??FD,this.scrollSpeed=B??RD,this.reverseRotate=C??!1,this.reverseSlide=E??!1,this.reverseSwipe=t??!1,this.reverseScroll=s??!1,this.moveInertia=o??dD,this.rotateInertia=a??JD,this.doublePress=i??(()=>{}),this.doublePressLimitMs=SD,this.doublePressDistance=LD,this.lastUp=null,this.rotating=null,this.sliding=null,this.dualPress=!1,this.scroll=new e.Vector3,this.rotateVelocity=new e.Vector3,this.moveVelocity=new e.Vector3,A.addEventListener("pointerdown",n=>{const w=this.getPointerPosition(n),c=w.clone(),r=w.clone(),y=!this.rotating&&(n.pointerType!=="mouse"||n.button===0),{pointerId:G,timeStamp:h}=n;if(y)this.rotating={initial:c,last:r,position:w,pointerId:G,timeStamp:h},A.setPointerCapture(n.pointerId),this.dualPress=!1;else if(!this.sliding){const M=n.pointerType==="mouse"?n.button:void 0;this.sliding={initial:c,last:r,position:w,pointerId:G,button:M,timeStamp:h},A.setPointerCapture(n.pointerId),this.dualPress=this.rotating!=null&&h-this.rotating.timeStamp{var r,y;((r=this.rotating)==null?void 0:r.pointerId)===n.pointerId?(this.rotating=null,A.releasePointerCapture(n.pointerId),this.dualPress&&this.sliding&&(A.releasePointerCapture(this.sliding.pointerId),this.sliding=null)):((y=this.sliding)==null?void 0:y.pointerId)===n.pointerId&&(this.sliding=null,A.releasePointerCapture(n.pointerId),this.dualPress&&this.rotating&&(A.releasePointerCapture(this.rotating.pointerId),this.rotating=null));const w=this.getPointerPosition(n),c=this.lastUp;if(this.lastUp={position:w,time:n.timeStamp},c&&c.position.distanceTo(w){var w,c;((w=this.rotating)==null?void 0:w.pointerId)===n.pointerId?this.rotating.position=this.getPointerPosition(n):((c=this.sliding)==null?void 0:c.pointerId)===n.pointerId&&(this.sliding.position=this.getPointerPosition(n))}),A.addEventListener("contextmenu",n=>{n.preventDefault()}),A.addEventListener("wheel",n=>{this.scroll.add(new e.Vector3(n.deltaX,n.deltaY,n.deltaZ)),n.preventDefault()})}getPointerPosition(A){const I=this.canvas.getBoundingClientRect();return new e.Vector2(A.clientX-I.left,A.clientY-I.top)}update(A,I){if(!this.enable)return;if(this.dualPress&&this.rotating&&this.sliding){const B=[this.rotating.position.clone().sub(this.rotating.last),this.sliding.position.clone().sub(this.sliding.last)],C=B[0].dot(B[1]);if(C>=.2){const E=B[0].clone().add(B[1]),t=new e.Vector3(E.x,-E.y,0);t.multiplyScalar(this.slideSpeed*(this.reverseSwipe?1:-1)),t.applyQuaternion(I.quaternion),I.position.add(t),this.moveVelocity=t.clone().multiplyScalar(1/A)}else if(C<=-.2){const E=this.sliding.last.clone().sub(this.rotating.last),t=E.length();E.multiplyScalar(1/t).normalize();const s=new e.Vector2(-E.y,E.x),o=[B[0].dot(E),B[1].dot(E)],a=[B[0].dot(s),B[1].dot(s)],i=this.rotating.last.clone().add(this.sliding.last).multiplyScalar(.5);let D=new e.Vector3;if(I instanceof e.Camera){const G=new e.Vector2(i.x/this.canvas.clientWidth*2-1,-(i.y/this.canvas.clientHeight)*2+1),h=new e.Raycaster;h.setFromCamera(G,I),D=h.ray.direction}const n=o[1]-o[0],w=D.multiplyScalar(n*this.slideSpeed);I.position.add(w),this.moveVelocity=w.clone().multiplyScalar(1/A);const c=[Math.atan(a[0]/(-.5*t)),Math.atan(a[1]/(.5*t))],r=.5*(c[0]+c[1]),y=new e.Euler().setFromQuaternion(I.quaternion,"YXZ");y.z=Math.max(-Math.PI,Math.min(Math.PI,y.z+.5*r)),I.quaternion.setFromEuler(y)}this.rotating.last.copy(this.rotating.position),this.sliding.last.copy(this.sliding.position)}else{const B=new e.Vector3;if(this.rotating&&!this.dualPress){const E=this.rotating.position.clone().sub(this.rotating.last);this.rotating.last.copy(this.rotating.position),B.set(E.x,E.y,0),B.multiplyScalar(this.rotateSpeed*(this.reverseRotate?-1:1)),this.rotateVelocity=B.clone().multiplyScalar(1/A)}else this.rotateVelocity.multiplyScalar(Math.exp(-A/this.rotateInertia)),B.addScaledVector(this.rotateVelocity,A);const C=new e.Euler().setFromQuaternion(I.quaternion,"YXZ");if(C.y-=B.x,C.x=Math.max(-Math.PI/2,Math.min(Math.PI/2,C.x-B.y)),C.z*=Math.exp(-0*A),I.quaternion.setFromEuler(C),this.sliding&&!this.dualPress){const E=this.sliding.position.clone().sub(this.sliding.last);this.sliding.last.copy(this.sliding.position);const t=this.sliding.button!==2?new e.Vector3(E.x,0,E.y):new e.Vector3(E.x,-E.y,0);t.multiplyScalar(this.slideSpeed*(this.reverseSlide?-1:1)),t.applyQuaternion(I.quaternion),I.position.add(t),this.moveVelocity=t.clone().multiplyScalar(1/A)}else this.moveVelocity.multiplyScalar(Math.exp(-A/this.moveInertia)),I.position.addScaledVector(this.moveVelocity,A)}const g=this.scroll.multiplyScalar(this.scrollSpeed);g.set(g.x,g.z,g.y),this.reverseScroll&&g.multiplyScalar(-1),g.applyQuaternion(I.quaternion),I.position.add(g),this.scroll.set(0,0,0)}}exports.FINGER_TIPS=yD;exports.ForgeControls=bD;exports.ForgeRenderer=mQ;exports.ForgeViewpoint=fQ;exports.FpsMovement=St;exports.HANDS=oI;exports.Hand=ZI;exports.HandMovement=lD;exports.JOINT_IDS=KI;exports.JOINT_INDEX=rD;exports.JOINT_RADIUS=kQ;exports.JOINT_SEGMENTS=ut;exports.JOINT_SEGMENT_STEPS=Ut;exports.JOINT_TIPS=hD;exports.JointEnum=cI;exports.NUM_JOINTS=wD;exports.PackedSplats=UA;exports.PlyReader=tI;exports.PointerControls=Lt;exports.Readback=pQ;exports.Sint8ToFloat=aB;exports.SplatAccumulator=QI;exports.SplatEdit=HQ;exports.SplatEditRgbaBlendMode=Dt;exports.SplatEditSdf=nt;exports.SplatEditSdfType=et;exports.SplatEdits=ct;exports.SplatFileType=kt;exports.SplatGenerator=TQ;exports.SplatLoader=xe;exports.SplatMesh=ZA;exports.SplatModifier=yt;exports.SplatSkinning=AD;exports.SplatTransformer=CQ;exports.SpzReader=Pe;exports.Uint8ToFloat=oB;exports.VRButton=sI;exports.XrHands=GD;exports.constructAxes=BD;exports.constructGrid=gD;exports.constructSpherePoints=CD;exports.dyno=le;exports.flipPixels=rB;exports.floatToSint8=dQ;exports.floatToUint8=HA;exports.fromHalf=PA;exports.generators=eD;exports.getSplatFileType=Ft;exports.imageSplats=tD;exports.isAndroid=cB;exports.isMobile=nB;exports.isOculus=wB;exports.pixelsToPngUrl=hB;exports.setPackedSplat=BI;exports.textSplats=ED;exports.toHalf=OA;exports.unpackSplat=CI;exports.unpackSplats=bI;exports.utils=xs; diff --git a/dist/forge.d.ts b/dist/forge.d.ts new file mode 100644 index 0000000..4e8ac3d --- /dev/null +++ b/dist/forge.d.ts @@ -0,0 +1,3398 @@ +declare module "dyno/types" { + import type * as THREE from "three"; + export type BoolTypes = "bool" | "bvec2" | "bvec3" | "bvec4"; + export type IntTypes = "int" | "ivec2" | "ivec3" | "ivec4"; + export type UintTypes = "uint" | "uvec2" | "uvec3" | "uvec4"; + export type AllIntTypes = IntTypes | UintTypes; + export type FloatTypes = "float" | "vec2" | "vec3" | "vec4"; + export type ScalarTypes = "uint" | "int" | "float"; + export type Vector2Types = "vec2" | "ivec2" | "uvec2"; + export type Vector3Types = "vec3" | "ivec3" | "uvec3"; + export type Vector4Types = "vec4" | "ivec4" | "uvec4"; + export type VectorTypes = Vector2Types | Vector3Types | Vector4Types; + export type MatFloatTypes = "mat2" | "mat2x2" | "mat2x3" | "mat2x4" | "mat3" | "mat3x2" | "mat3x3" | "mat3x4" | "mat4" | "mat4x2" | "mat4x3" | "mat4x4"; + export type SquareMatTypes = "mat2" | "mat3" | "mat4" | "mat2x2" | "mat3x3" | "mat4x4"; + export type AllFloatTypes = FloatTypes | MatFloatTypes; + export type SignedTypes = IntTypes | FloatTypes; + export type AllSignedTypes = SignedTypes | MatFloatTypes; + export type ValueTypes = FloatTypes | IntTypes | UintTypes; + export type AllValueTypes = AllFloatTypes | IntTypes | UintTypes; + export type SimpleTypes = BoolTypes | AllValueTypes; + export type VectorElementType = A extends FloatTypes ? "float" : A extends IntTypes ? "int" : A extends UintTypes ? "uint" : never; + export type SameSizeVec = T extends ScalarTypes ? "float" : T extends "vec2" | "ivec2" | "uvec2" ? "vec2" : T extends "vec3" | "ivec3" | "uvec3" ? "vec3" : T extends "vec4" | "ivec4" | "uvec4" ? "vec4" : never; + export type SameSizeUvec = T extends ScalarTypes ? "uint" : T extends "vec2" | "ivec2" | "uvec2" ? "uvec2" : T extends "vec3" | "ivec3" | "uvec3" ? "uvec3" : T extends "vec4" | "ivec4" | "uvec4" ? "uvec4" : never; + export type SameSizeIvec = T extends ScalarTypes ? "int" : T extends "vec2" | "ivec2" | "uvec2" ? "ivec2" : T extends "vec3" | "ivec3" | "uvec3" ? "ivec3" : T extends "vec4" | "ivec4" | "uvec4" ? "ivec4" : never; + export type SamplerTypes = "sampler2D" | "sampler2DArray" | "sampler3D" | "samplerCube"; + export type UsamplerTypes = "usampler2D" | "usampler2DArray" | "usampler3D" | "usamplerCube"; + export type IsamplerTypes = "isampler2D" | "isampler2DArray" | "isampler3D" | "isamplerCube"; + export type NormalSamplerTypes = SamplerTypes | UsamplerTypes | IsamplerTypes; + export type SamplerShadowTypes = "sampler2DShadow" | "sampler2DArrayShadow" | "samplerCubeShadow"; + export type AllSamplerTypes = NormalSamplerTypes | SamplerShadowTypes; + export type Sampler2DTypes = "sampler2D" | "usampler2D" | "isampler2D" | "sampler2DShadow"; + export type Sampler2DArrayTypes = "sampler2DArray" | "usampler2DArray" | "isampler2DArray" | "sampler2DArrayShadow"; + export type Sampler3DTypes = "sampler3D" | "usampler3D" | "isampler3D"; + export type SamplerCubeTypes = "samplerCube" | "usamplerCube" | "isamplerCube" | "samplerCubeShadow"; + export function isBoolType(type: DynoType): boolean; + export function isScalarType(type: DynoType): boolean; + export function isIntType(type: DynoType): boolean; + export function isUintType(type: DynoType): boolean; + export function isFloatType(type: DynoType): boolean; + export function isMatFloatType(type: DynoType): boolean; + export function isAllFloatType(type: DynoType): boolean; + export function isVector2Type(type: DynoType): boolean; + export function isVector3Type(type: DynoType): boolean; + export function isVector4Type(type: DynoType): boolean; + export function isVectorType(type: DynoType): boolean; + export function isMat2(type: DynoType): boolean; + export function isMat3(type: DynoType): boolean; + export function isMat4(type: DynoType): boolean; + export function vectorElementType(type: A): VectorElementType; + export function vectorDim(type: A): number; + export function sameSizeVec(type: T): SameSizeVec; + export function sameSizeUvec(type: T): SameSizeUvec; + export function sameSizeIvec(type: T): SameSizeIvec; + export type BaseType = SimpleTypes | AllSamplerTypes; + export type UserType = { + type: string; + }; + export type DynoType = BaseType | UserType; + export type DynoJsType = T extends "bool" ? boolean : T extends "uint" ? number : T extends "int" ? number : T extends "float" ? number : T extends "bvec2" ? [boolean, boolean] : T extends "uvec2" ? THREE.Vector2 | [number, number] | Uint32Array : T extends "ivec2" ? THREE.Vector2 | [number, number] | Int32Array : T extends "vec2" ? THREE.Vector2 | [number, number] | Float32Array : T extends "bvec3" ? [boolean, boolean, boolean] : T extends "uvec3" ? THREE.Vector3 | [number, number, number] | Uint32Array : T extends "ivec3" ? THREE.Vector3 | [number, number, number] | Int32Array : T extends "vec3" ? THREE.Vector3 | THREE.Color | [number, number, number] | Float32Array : T extends "bvec4" ? [boolean, boolean, boolean, boolean] : T extends "uvec4" ? THREE.Vector4 | [number, number, number, number] | Uint32Array : T extends "ivec4" ? THREE.Vector4 | [number, number, number, number] | Int32Array : T extends "vec4" ? THREE.Vector4 | THREE.Quaternion | [number, number, number, number] | Float32Array : T extends "mat2" ? THREE.Matrix2 | Float32Array : T extends "mat2x2" ? THREE.Matrix2 | Float32Array : T extends "mat2x3" ? Float32Array : T extends "mat2x4" ? Float32Array : T extends "mat3" ? THREE.Matrix3 | Float32Array : T extends "mat3x2" ? Float32Array : T extends "mat3x3" ? THREE.Matrix3 | Float32Array : T extends "mat3x4" ? Float32Array : T extends "mat4" ? THREE.Matrix4 | Float32Array : T extends "mat4x2" ? Float32Array : T extends "mat4x3" ? Float32Array : T extends "mat4x4" ? THREE.Matrix4 | Float32Array : T extends "usampler2D" ? THREE.Texture : T extends "isampler2D" ? THREE.Texture : T extends "sampler2D" ? THREE.Texture : T extends "sampler2DShadow" ? THREE.Texture : T extends "usampler2DArray" ? THREE.DataArrayTexture : T extends "isampler2DArray" ? THREE.DataArrayTexture : T extends "sampler2DArray" ? THREE.DataArrayTexture : T extends "sampler2DArrayShadow" ? THREE.Texture : T extends "usampler3D" ? THREE.DataArrayTexture : T extends "isampler3D" ? THREE.DataArrayTexture : T extends "sampler3D" ? THREE.DataArrayTexture : T extends "usamplerCube" ? THREE.DataArrayTexture : T extends "isamplerCube" ? THREE.DataArrayTexture : T extends "samplerCube" ? THREE.DataArrayTexture : T extends "samplerCubeShadow" ? THREE.Texture : unknown; + export function typeLiteral(type: DynoType): string; + export function numberAsInt(value: number): string; + export function numberAsUint(value: number): string; + export function numberAsFloat(value: number): string; +} +declare module "dyno/value" { + import type { Dyno, IOTypes } from "dyno/base"; + import { type DynoJsType, type DynoType, type SimpleTypes } from "dyno/types"; + export type DynoVal = DynoValue | HasDynoOut; + export function valType(val: DynoVal): T; + export interface HasDynoOut { + dynoOut(): DynoValue; + } + export class DynoValue { + type: T; + private __isDynoValue; + constructor(type: T); + } + export class DynoOutput extends DynoValue { + dyno: Dyno; + key: string; + constructor(dyno: Dyno, key: string); + } + export class DynoLiteral extends DynoValue { + literal: string; + constructor(type: T, literal: string); + getLiteral(): string; + } + export function dynoLiteral(type: T, literal: string): DynoLiteral; + export class DynoConst extends DynoLiteral { + value: DynoJsType; + constructor(type: T, value: DynoJsType); + getLiteral(): string; + } + export function dynoConst(type: T, value: DynoJsType): DynoConst; + export function literalZero(type: SimpleTypes): string; + export function literalOne(type: SimpleTypes): string; + export function literalNegOne(type: SimpleTypes): string; +} +declare module "dyno/base" { + import type { IUniform } from "three"; + import type { DynoType } from "dyno/types"; + import { type DynoVal, DynoValue, type HasDynoOut } from "dyno/value"; + export class Compilation { + globals: Set; + statements: string[]; + uniforms: Record; + declares: Set; + updaters: (() => void)[]; + sequence: number; + indent: string; + constructor({ indent }?: { + indent?: string; + }); + nextSequence(): number; + } + export type IOTypes = Record; + type GenerateContext = { + inputs: { + [K in keyof InTypes]?: string; + }; + outputs: { + [K in keyof OutTypes]?: string; + }; + compile: Compilation; + }; + export class Dyno { + inTypes: InTypes; + outTypes: OutTypes; + inputs: { + [K in keyof InTypes]?: DynoVal; + }; + update?: () => void; + globals?: ({ inputs, outputs, compile, }: GenerateContext) => string[]; + statements?: ({ inputs, outputs, compile, }: GenerateContext) => string[]; + generate: ({ inputs, outputs, compile, }: GenerateContext) => { + globals?: string[]; + statements?: string[]; + uniforms?: Record; + }; + constructor({ inTypes, outTypes, inputs, update, globals, statements, generate, }: { + inTypes?: InTypes; + outTypes?: OutTypes; + inputs?: { + [K in keyof InTypes]?: DynoVal; + }; + update?: () => void; + globals?: ({ inputs, outputs, compile, }: GenerateContext) => string[]; + statements?: ({ inputs, outputs, compile, }: GenerateContext) => string[]; + generate?: ({ inputs, outputs, compile, }: GenerateContext) => { + globals?: string[]; + statements?: string[]; + uniforms?: Record; + }; + }); + get outputs(): { + [K in keyof OutTypes]: DynoVal; + }; + apply(inputs: { + [K in keyof InTypes]?: DynoVal; + }): { + [K in keyof OutTypes]: DynoVal; + }; + compile({ inputs, outputs, compile, }: { + inputs: { + [K in keyof InTypes]?: string; + }; + outputs: { + [K in keyof OutTypes]?: string; + }; + compile: Compilation; + }): string[]; + } + export type DynoBlockType = (inputs: { + [K in keyof InTypes]?: DynoVal; + }, outputs: { + [K in keyof OutTypes]?: DynoVal; + }, { roots }: { + roots: Dyno[]; + }) => { + [K in keyof OutTypes]?: DynoVal; + } | undefined; + export class DynoBlock extends Dyno { + construct: DynoBlockType; + constructor({ inTypes, outTypes, inputs, update, globals, construct, }: { + inTypes?: InTypes; + outTypes?: OutTypes; + inputs?: { + [K in keyof InTypes]?: DynoVal; + }; + update?: () => void; + globals?: ({ inputs, outputs, compile, }: GenerateContext) => string[]; + construct: DynoBlockType; + }); + generateBlock({ inputs, outputs, compile, }: { + inputs: { + [K in keyof InTypes]?: string; + }; + outputs: { + [K in keyof OutTypes]?: string; + }; + compile: Compilation; + }): { + statements: string[]; + }; + } + export function dynoBlock, OutTypes extends Record>(inTypes: InTypes, outTypes: OutTypes, construct: DynoBlockType, { update, globals }?: { + update?: () => void; + globals?: () => string[]; + }): DynoBlock; + export function dyno, OutTypes extends Record>({ inTypes, outTypes, inputs, update, globals, statements, generate, }: { + inTypes: InTypes; + outTypes: OutTypes; + inputs?: { + [K in keyof InTypes]?: DynoVal; + }; + update?: () => void; + globals?: ({ inputs, outputs, compile, }: GenerateContext) => string[]; + statements?: ({ inputs, outputs, compile, }: GenerateContext) => string[]; + generate?: ({ inputs, outputs, compile, }: GenerateContext) => { + globals?: string[]; + statements?: string[]; + uniforms?: Record; + }; + }): Dyno; + export function dynoDeclare(name: string, type: DynoType, count?: number): string; + export function unindentLines(s: string): string[]; + export function unindent(s: string): string; + export class UnaryOp extends Dyno<{ + a: A; + }, { + [key in OutKey]: OutType; + }> implements HasDynoOut { + constructor({ a, outKey, outTypeFunc, }: { + a: DynoVal; + outKey: OutKey; + outTypeFunc: (aType: A) => OutType; + }); + outKey: OutKey; + dynoOut(): DynoValue; + } + export class BinaryOp extends Dyno<{ + a: A; + b: B; + }, { + [key in OutKey]: OutType; + }> implements HasDynoOut { + constructor({ a, b, outKey, outTypeFunc, }: { + a: DynoVal; + b: DynoVal; + outKey: OutKey; + outTypeFunc: (aType: A, bType: B) => OutType; + }); + outKey: OutKey; + dynoOut(): DynoValue; + } + export class TrinaryOp extends Dyno<{ + a: A; + b: B; + c: C; + }, { + [key in OutKey]: OutType; + }> implements HasDynoOut { + constructor({ a, b, c, outKey, outTypeFunc, }: { + a: DynoVal; + b: DynoVal; + c: DynoVal; + outKey: OutKey; + outTypeFunc: (aType: A, bType: B, cType: C) => OutType; + }); + outKey: OutKey; + dynoOut(): DynoValue; + } +} +declare module "dyno/splats" { + import { Dyno, UnaryOp } from "dyno/base"; + import { type DynoVal, type DynoValue, type HasDynoOut } from "dyno/value"; + export const Gsplat: { + type: "Gsplat"; + }; + export const TPackedSplats: { + type: "PackedSplats"; + }; + export const numPackedSplats: (packedSplats: DynoVal) => DynoVal<"int">; + export const readPackedSplat: (packedSplats: DynoVal, index: DynoVal<"int">) => DynoVal; + export const readPackedSplatRange: (packedSplats: DynoVal, index: DynoVal<"int">, base: DynoVal<"int">, count: DynoVal<"int">) => DynoVal; + export const splitGsplat: (gsplat: DynoVal) => SplitGsplat; + export const combineGsplat: ({ gsplat, flags, index, center, scales, quaternion, rgba, rgb, opacity, x, y, z, r, g, b, }: { + gsplat?: DynoVal; + flags?: DynoVal<"uint">; + index?: DynoVal<"int">; + center?: DynoVal<"vec3">; + scales?: DynoVal<"vec3">; + quaternion?: DynoVal<"vec4">; + rgba?: DynoVal<"vec4">; + rgb?: DynoVal<"vec3">; + opacity?: DynoVal<"float">; + x?: DynoVal<"float">; + y?: DynoVal<"float">; + z?: DynoVal<"float">; + r?: DynoVal<"float">; + g?: DynoVal<"float">; + b?: DynoVal<"float">; + }) => DynoVal; + export const gsplatNormal: (gsplat: DynoVal) => DynoVal<"vec3">; + export const transformGsplat: (gsplat: DynoVal, { scale, rotate, translate, recolor, }: { + scale?: DynoVal<"float">; + rotate?: DynoVal<"vec4">; + translate?: DynoVal<"vec3">; + recolor?: DynoVal<"vec4">; + }) => DynoVal; + export const defineGsplat: string; + export const definePackedSplats: string; + export class NumPackedSplats extends UnaryOp { + constructor({ packedSplats, }: { + packedSplats: DynoVal; + }); + } + export class ReadPackedSplat extends Dyno<{ + packedSplats: typeof TPackedSplats; + index: "int"; + }, { + gsplat: typeof Gsplat; + }> implements HasDynoOut { + constructor({ packedSplats, index, }: { + packedSplats?: DynoVal; + index?: DynoVal<"int">; + }); + dynoOut(): DynoValue; + } + export class ReadPackedSplatRange extends Dyno<{ + packedSplats: typeof TPackedSplats; + index: "int"; + base: "int"; + count: "int"; + }, { + gsplat: typeof Gsplat; + }> implements HasDynoOut { + constructor({ packedSplats, index, base, count, }: { + packedSplats?: DynoVal; + index?: DynoVal<"int">; + base?: DynoVal<"int">; + count?: DynoVal<"int">; + }); + dynoOut(): DynoValue; + } + export class SplitGsplat extends Dyno<{ + gsplat: typeof Gsplat; + }, { + flags: "uint"; + active: "bool"; + index: "int"; + center: "vec3"; + scales: "vec3"; + quaternion: "vec4"; + rgba: "vec4"; + rgb: "vec3"; + opacity: "float"; + x: "float"; + y: "float"; + z: "float"; + r: "float"; + g: "float"; + b: "float"; + }> { + constructor({ gsplat }: { + gsplat?: DynoVal; + }); + } + export class CombineGsplat extends Dyno<{ + gsplat: typeof Gsplat; + flags: "uint"; + index: "int"; + center: "vec3"; + scales: "vec3"; + quaternion: "vec4"; + rgba: "vec4"; + rgb: "vec3"; + opacity: "float"; + x: "float"; + y: "float"; + z: "float"; + r: "float"; + g: "float"; + b: "float"; + }, { + gsplat: typeof Gsplat; + }> implements HasDynoOut { + constructor({ gsplat, flags, index, center, scales, quaternion, rgba, rgb, opacity, x, y, z, r, g, b, }: { + gsplat?: DynoVal; + flags?: DynoVal<"uint">; + index?: DynoVal<"int">; + center?: DynoVal<"vec3">; + scales?: DynoVal<"vec3">; + quaternion?: DynoVal<"vec4">; + rgba?: DynoVal<"vec4">; + rgb?: DynoVal<"vec3">; + opacity?: DynoVal<"float">; + x?: DynoVal<"float">; + y?: DynoVal<"float">; + z?: DynoVal<"float">; + r?: DynoVal<"float">; + g?: DynoVal<"float">; + b?: DynoVal<"float">; + }); + dynoOut(): DynoValue; + } + export const defineGsplatNormal: string; + export class GsplatNormal extends UnaryOp { + constructor({ gsplat }: { + gsplat: DynoVal; + }); + } + export class TransformGsplat extends Dyno<{ + gsplat: typeof Gsplat; + scale: "float"; + rotate: "vec4"; + translate: "vec3"; + recolor: "vec4"; + }, { + gsplat: typeof Gsplat; + }> implements HasDynoOut { + constructor({ gsplat, scale, rotate, translate, recolor, }: { + gsplat?: DynoVal; + scale?: DynoVal<"float">; + rotate?: DynoVal<"vec4">; + translate?: DynoVal<"vec3">; + recolor?: DynoVal<"vec4">; + }); + dynoOut(): DynoValue; + } +} +declare module "dyno/output" { + import { Dyno } from "dyno/base"; + import { Gsplat } from "dyno/splats"; + import { type DynoVal, type DynoValue, type HasDynoOut } from "dyno/value"; + export const outputPackedSplat: (gsplat: DynoVal) => OutputPackedSplat; + export const outputRgba8: (rgba8: DynoVal<"vec4">) => OutputRgba8; + export class OutputPackedSplat extends Dyno<{ + gsplat: typeof Gsplat; + }, { + output: "uvec4"; + }> implements HasDynoOut<"uvec4"> { + constructor({ gsplat }: { + gsplat?: DynoVal; + }); + dynoOut(): DynoValue<"uvec4">; + } + export class OutputRgba8 extends Dyno<{ + rgba8: "vec4"; + }, { + rgba8: "vec4"; + }> implements HasDynoOut<"vec4"> { + constructor({ rgba8 }: { + rgba8?: DynoVal<"vec4">; + }); + dynoOut(): DynoValue<"vec4">; + } +} +declare module "dyno/uniforms" { + import { Dyno } from "dyno/base"; + import type { DynoJsType, DynoType } from "dyno/types"; + import { type DynoValue, type HasDynoOut } from "dyno/value"; + export const uniform: >(key: string, type: DynoType, value: V) => DynoUniform; + export const dynoBool: (value?: boolean, key?: string) => DynoBool; + export const dynoUint: (value?: number, key?: string) => DynoUint; + export const dynoInt: (value?: number, key?: string) => DynoInt; + export const dynoFloat: (value?: number, key?: string) => DynoFloat; + export const dynoBvec2: >(value: V, key?: string) => DynoBvec2; + export const dynoUvec2: >(value: V, key?: string) => DynoUvec2; + export const dynoIvec2: >(value: V, key?: string) => DynoIvec2; + export const dynoVec2: >(value: V, key?: string) => DynoVec2; + export const dynoBvec3: >(value: V, key?: string) => DynoBvec3; + export const dynoUvec3: >(value: V, key?: string) => DynoUvec3; + export const dynoIvec3: >(value: V, key?: string) => DynoIvec3; + export const dynoVec3: >(value: V, key?: string) => DynoVec3; + export const dynoBvec4: >(value: V, key?: string) => DynoBvec4; + export const dynoUvec4: >(value: V, key?: string) => DynoUvec4; + export const dynoIvec4: >(value: V, key?: string) => DynoIvec4; + export const dynoVec4: >(value: V, key?: string) => DynoVec4; + export const dynoMat2: >(value: V, key?: string) => DynoMat2; + export const dynoMat2x2: >(value: V, key?: string) => DynoMat2x2; + export const dynoMat2x3: >(value: V, key?: string) => DynoMat2x3; + export const dynoMat2x4: >(value: V, key?: string) => DynoMat2x4; + export const dynoMat3: >(value: V, key?: string) => DynoMat3; + export const dynoMat3x2: >(value: V, key?: string) => DynoMat3x2; + export const dynoMat3x3: >(value: V, key?: string) => DynoMat3x3; + export const dynoMat3x4: >(value: V, key?: string) => DynoMat3x4; + export const dynoMat4: >(value: V, key?: string) => DynoMat4; + export const dynoMat4x2: >(value: V, key?: string) => DynoMat4x2; + export const dynoMat4x3: >(value: V, key?: string) => DynoMat4x3; + export const dynoMat4x4: >(value: V, key?: string) => DynoMat4x4; + export const dynoUsampler2D: >(value: V, key?: string) => DynoUsampler2D; + export const dynoIsampler2D: >(value: V, key?: string) => DynoIsampler2D; + export const dynoSampler2D: >(value: V, key?: string) => DynoSampler2D; + export const dynoUsampler2DArray: >(value: V, key?: string) => DynoUsampler2DArray; + export const dynoIsampler2DArray: >(key: string, value: V) => DynoIsampler2DArray; + export const dynoSampler2DArray: >(value: V, key?: string) => DynoSampler2DArray; + export const dynoUsampler3D: >(value: V, key?: string) => DynoUsampler3D; + export const dynoIsampler3D: >(value: V, key?: string) => DynoIsampler3D; + export const dynoSampler3D: >(value: V, key?: string) => DynoSampler3D; + export const dynoUsamplerCube: >(value: V, key?: string) => DynoUsamplerCube; + export const dynoIsamplerCube: >(value: V, key?: string) => DynoIsamplerCube; + export const dynoSamplerCube: >(value: V, key?: string) => DynoSamplerCube; + export const dynoSampler2DShadow: >(value: V, key?: string) => DynoSampler2DShadow; + export const dynoSampler2DArrayShadow: >(value: V, key?: string) => DynoSampler2DArrayShadow; + export const dynoSamplerCubeShadow: >(value: V, key?: string) => DynoSamplerCubeShadow; + export class DynoUniform = DynoJsType> extends Dyno, { + [key in K]: T; + }> implements HasDynoOut { + type: T; + count?: number; + outKey: K; + value: V; + uniform: { + value: V; + type?: string; + }; + constructor({ key, type, count, value, update, globals, }: { + key?: K; + type: T; + count?: number; + value: V; + update?: (value: V) => V | undefined; + globals?: ({ inputs, outputs, }: { + inputs: unknown; + outputs: { + [key in K]?: string; + }; + }) => string[]; + }); + dynoOut(): DynoValue; + } + export class DynoBool extends DynoUniform<"bool", K, boolean> { + constructor({ key, value, update, }: { + key?: K; + value: boolean; + update?: (value: boolean) => boolean | undefined; + }); + } + export class DynoUint extends DynoUniform<"uint", K, number> { + constructor({ key, value, update, }: { + key?: K; + value: number; + update?: (value: number) => number | undefined; + }); + } + export class DynoInt extends DynoUniform<"int", K, number> { + constructor({ key, value, update, }: { + key?: K; + value: number; + update?: (value: number) => number | undefined; + }); + } + export class DynoFloat extends DynoUniform<"float", K, number> { + constructor({ key, value, update, }: { + key?: K; + value: number; + update?: (value: number) => number | undefined; + }); + } + export class DynoBvec2> extends DynoUniform<"bvec2", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoUvec2> extends DynoUniform<"uvec2", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoIvec2> extends DynoUniform<"ivec2", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoVec2> extends DynoUniform<"vec2", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoBvec3> extends DynoUniform<"bvec3", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoUvec3, K extends string = "value"> extends DynoUniform<"uvec3", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoIvec3, K extends string = "value"> extends DynoUniform<"ivec3", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoVec3, K extends string = "value"> extends DynoUniform<"vec3", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoBvec4> extends DynoUniform<"bvec4", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoUvec4> extends DynoUniform<"uvec4", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoIvec4> extends DynoUniform<"ivec4", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoVec4, K extends string = "value"> extends DynoUniform<"vec4", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoMat2> extends DynoUniform<"mat2", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoMat2x2> extends DynoUniform<"mat2x2", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoMat2x3> extends DynoUniform<"mat2x3", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoMat2x4> extends DynoUniform<"mat2x4", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoMat3> extends DynoUniform<"mat3", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoMat3x2> extends DynoUniform<"mat3x2", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoMat3x3> extends DynoUniform<"mat3x3", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoMat3x4> extends DynoUniform<"mat3x4", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoMat4> extends DynoUniform<"mat4", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoMat4x2> extends DynoUniform<"mat4x2", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoMat4x3> extends DynoUniform<"mat4x3", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoMat4x4> extends DynoUniform<"mat4x4", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoUsampler2D> extends DynoUniform<"usampler2D", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoIsampler2D> extends DynoUniform<"isampler2D", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoSampler2D> extends DynoUniform<"sampler2D", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoUsampler2DArray> extends DynoUniform<"usampler2DArray", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoIsampler2DArray> extends DynoUniform<"isampler2DArray", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoSampler2DArray> extends DynoUniform<"sampler2DArray", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoUsampler3D> extends DynoUniform<"usampler3D", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoIsampler3D> extends DynoUniform<"isampler3D", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoSampler3D> extends DynoUniform<"sampler3D", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoUsamplerCube> extends DynoUniform<"usamplerCube", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoIsamplerCube> extends DynoUniform<"isamplerCube", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoSamplerCube> extends DynoUniform<"samplerCube", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoSampler2DShadow> extends DynoUniform<"sampler2DShadow", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoSampler2DArrayShadow> extends DynoUniform<"sampler2DArrayShadow", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } + export class DynoSamplerCubeShadow> extends DynoUniform<"samplerCubeShadow", K, V> { + constructor({ key, value, update, }: { + key?: K; + value: V; + update?: (value: V) => V | undefined; + }); + } +} +declare module "defines" { + export const LN_SCALE_MIN = -9; + export const LN_SCALE_MAX = 9; + export const LN_RESCALE: number; + export const SCALE_MIN: number; + export const SCALE_MAX: number; + export const SPLAT_TEX_WIDTH_BITS = 11; + export const SPLAT_TEX_HEIGHT_BITS = 11; + export const SPLAT_TEX_DEPTH_BITS = 11; + export const SPLAT_TEX_LAYER_BITS: number; + export const SPLAT_TEX_WIDTH: number; + export const SPLAT_TEX_HEIGHT: number; + export const SPLAT_TEX_DEPTH: number; + export const SPLAT_TEX_MIN_HEIGHT = 1; + export const SPLAT_TEX_WIDTH_MASK: number; + export const SPLAT_TEX_HEIGHT_MASK: number; + export const SPLAT_TEX_DEPTH_MASK: number; + export const WASM_SPLAT_SORT = true; +} +declare module "utils" { + import { Gunzip } from "fflate"; + import * as THREE from "three"; + export function floatBitsToUint(f: number): number; + export function uintBitsToFloat(u: number): number; + export function toHalf(f: number): number; + export function fromHalf(h: number): number; + export function floatToUint8(v: number): number; + export function floatToSint8(v: number): number; + export function Uint8ToFloat(v: number): number; + export function Sint8ToFloat(v: number): number; + export class DataCache { + maxItems: number; + asyncFetch: (key: string) => Promise; + items: { + key: string; + data: unknown; + }[]; + constructor({ asyncFetch, maxItems, }: { + asyncFetch: (key: string) => Promise; + maxItems?: number; + }); + getFetch(key: string): Promise; + } + export function mapObject(obj: Record, fn: (value: unknown, key: string) => unknown): Record; + export function mapFilterObject(obj: Record, fn: (value: unknown, key: string) => unknown): Record; + export function getArrayBuffers(ctx: unknown): Transferable[]; + export function newArray(n: number, initFunction: (index: number) => T): T[]; + export class FreeList { + items: T[]; + allocate: (args: Args) => T; + dispose?: (item: T) => void; + valid: (item: T, args: Args) => boolean; + constructor({ allocate, dispose, valid, }: { + allocate: (args: Args) => T; + dispose?: (item: T) => void; + valid: (item: T, args: Args) => boolean; + }); + alloc(args: Args): T; + free(item: T): void; + disposeAll(): void; + } + export function setPackedSplat(packedSplats: Uint32Array, index: number, x: number, y: number, z: number, scaleX: number, scaleY: number, scaleZ: number, quatX: number, quatY: number, quatZ: number, quatW: number, opacity: number, r: number, g: number, b: number): void; + export function setPackedSplatCenter(packedSplats: Uint32Array, index: number, x: number, y: number, z: number): void; + export function setPackedSplatScales(packedSplats: Uint32Array, index: number, scaleX: number, scaleY: number, scaleZ: number): void; + export function setPackedSplatQuat(packedSplats: Uint32Array, index: number, quatX: number, quatY: number, quatZ: number, quatW: number): void; + export function setPackedSplatRgb(packedSplats: Uint32Array, index: number, r: number, g: number, b: number): void; + export function setPackedSplatOpacity(packedSplats: Uint32Array, index: number, opacity: number): void; + export function unpackSplat(packedSplats: Uint32Array, index: number): { + center: THREE.Vector3; + scales: THREE.Vector3; + quaternion: THREE.Quaternion; + color: THREE.Color; + opacity: number; + }; + export function getTextureSize(numSplats: number): { + width: number; + height: number; + depth: number; + maxSplats: number; + }; + export function isMobile(): boolean; + export function isAndroid(): boolean; + export function isOculus(): boolean; + export function flipPixels(pixels: Uint8Array, width: number, height: number): Uint8Array; + export function pixelsToPngUrl(pixels: Uint8Array, width: number, height: number): string; + export function cloneClock(clock: THREE.Clock): THREE.Clock; + export function omitUndefined(obj: T): Partial; + export const IDENT_VERTEX_SHADER: string; + export function averagePositions(positions: THREE.Vector3[]): THREE.Vector3; + export function averageQuaternions(quaternions: THREE.Quaternion[]): THREE.Quaternion; + export function coinciDist(matrix1: THREE.Matrix4, matrix2: THREE.Matrix4): { + distance: number; + coincidence: number; + }; + export function withinDist({ matrix1, matrix2, maxDistance, }: { + matrix1: THREE.Matrix4; + matrix2: THREE.Matrix4; + maxDistance: number; + }): boolean; + export function withinCoinciDist({ matrix1, matrix2, maxDistance, minCoincidence, }: { + matrix1: THREE.Matrix4; + matrix2: THREE.Matrix4; + maxDistance: number; + minCoincidence?: number; + }): boolean; + export function coorientDist(matrix1: THREE.Matrix4, matrix2: THREE.Matrix4): { + distance: number; + coorient: number; + }; + export function withinCoorientDist({ matrix1, matrix2, maxDistance, minCoorient, }: { + matrix1: THREE.Matrix4; + matrix2: THREE.Matrix4; + maxDistance: number; + minCoorient?: number; + }): boolean; + export function epsilonSign(value: number, epsilon?: number): number; + export function encodeQuatXyz888(q: THREE.Quaternion): number; + export function decodeQuatXyz888(encoded: number, out: THREE.Quaternion): THREE.Quaternion; + /** + * Encodes a THREE.Quaternion into a 24‐bit integer. + * + * Bit layout (LSB → MSB): + * - Bits 0–7: quantized U (8 bits) + * - Bits 8–15: quantized V (8 bits) + * - Bits 16–23: quantized angle θ (8 bits) from [0,π] + * + * This version uses folded octahedral mapping (all inline). + */ + export function encodeQuatOctXy88R8(q: THREE.Quaternion): number; + /** + * Decodes a 24‐bit encoded quaternion (packed in a number) back to a THREE.Quaternion. + * + * Assumes the same bit layout as in encodeQuatOctXy88R8. + */ + export function decodeQuatOctXy88R8(encoded: number, out: THREE.Quaternion): THREE.Quaternion; + /** + * Encodes a THREE.Quaternion into a 24‑bit unsigned integer + * by converting it to Euler angles (roll, pitch, yaw). + * The Euler angles are assumed to be in radians in the range [-π, π]. + * Each angle is normalized to [0,1] and quantized to 8 bits. + * Bit layout (LSB→MSB): + * - Bits 0–7: roll (quantized) + * - Bits 8–15: pitch (quantized) + * - Bits 16–23: yaw (quantized) + */ + export function encodeQuatEulerXyz888(q: THREE.Quaternion): number; + /** + * Decodes a 24‑bit unsigned integer into a THREE.Quaternion + * by unpacking three 8‑bit values (roll, pitch, yaw) in the range [0,255] + * and then converting them back to Euler angles in [-π, π] and to a quaternion. + */ + export function decodeQuatEulerXyz888(encoded: number, out: THREE.Quaternion): THREE.Quaternion; + export function encodeSh1Rgb(sh1Array: Uint32Array, index: number, sh1Rgb: Float32Array): void; + export function encodeSh2Rgb(sh2Array: Uint32Array, index: number, sh2Rgb: Float32Array): void; + export function encodeSh3Rgb(sh3Array: Uint32Array, index: number, sh3Rgb: Float32Array): void; + export function decompressPartialGzip(fileBytes: Uint8Array, numBytes: number): Uint8Array; + export class GunzipReader { + fileBytes: Uint8Array; + chunkBytes: number; + offset: number; + chunks: Uint8Array[]; + totalBytes: number; + gunzip: Gunzip; + constructor({ fileBytes, chunkBytes, }: { + fileBytes: Uint8Array; + chunkBytes?: number; + }); + read(numBytes: number): Uint8Array; + } +} +declare module "dyno/program" { + import * as THREE from "three"; + import { type Dyno, type IOTypes } from "dyno/base"; + export class DynoProgram { + graph: Dyno; + template: DynoProgramTemplate; + inputs: Record; + outputs: Record; + shader: string; + uniforms: Record; + updaters: (() => void)[]; + constructor({ graph, inputs, outputs, template, }: { + graph: Dyno; + inputs?: Record; + outputs?: Record; + template: DynoProgramTemplate; + }); + prepareMaterial(): THREE.RawShaderMaterial; + update(): void; + } + export class DynoProgramTemplate { + before: string; + between: string; + after: string; + indent: string; + constructor(template: string); + generate({ globals, statements, }: { + globals: Set; + statements: string[]; + }): string; + } +} +declare module "dyno/mathTypes" { + import { type AllFloatTypes, type AllIntTypes, type AllSignedTypes, type AllValueTypes, type BaseType, type BoolTypes, type FloatTypes, type IntTypes, type SignedTypes, type UintTypes, type ValueTypes } from "dyno/types"; + export type AddOutput = BaseType & (A extends B ? A : A extends "int" ? B extends IntTypes ? B : never : B extends "int" ? A extends IntTypes ? A : never : A extends "uint" ? B extends UintTypes ? B : never : B extends "uint" ? A extends UintTypes ? A : never : A extends "float" ? B extends AllFloatTypes ? B : never : B extends "float" ? A extends AllFloatTypes ? A : never : never); + export type SubOutput = AddOutput; + export type MulOutput = BaseType & (A extends "int" ? B extends IntTypes ? B : never : B extends "int" ? A extends IntTypes ? A : never : A extends "uint" ? B extends UintTypes ? B : never : B extends "uint" ? A extends UintTypes ? A : never : A extends "float" ? B extends AllFloatTypes ? B : never : B extends "float" ? A extends AllFloatTypes ? A : never : A extends IntTypes ? B extends A ? A : never : B extends IntTypes ? A extends B ? A : never : A extends UintTypes ? B extends A ? A : never : B extends UintTypes ? A extends B ? A : never : A extends "vec2" ? B extends "vec2" | "mat2" | "mat2x2" ? "vec2" : B extends "mat3x2" ? "vec3" : B extends "mat4x2" ? "vec4" : never : A extends "vec3" ? B extends "mat2x3" ? "vec2" : B extends "vec3" | "mat3" | "mat3x3" ? "vec3" : B extends "mat4x3" ? "vec4" : never : A extends "vec4" ? B extends "mat2x4" ? "vec2" : B extends "mat3x4" ? "vec3" : B extends "vec4" | "mat4" | "mat4x4" ? "vec4" : never : B extends "vec2" ? A extends "mat2" | "mat2x2" ? "vec2" : A extends "mat2x3" ? "vec3" : A extends "mat2x4" ? "vec4" : never : B extends "vec3" ? A extends "mat3x2" ? "vec2" : A extends "mat3" | "mat3x3" ? "vec3" : A extends "mat3x4" ? "vec4" : never : B extends "vec4" ? A extends "mat4x2" ? "vec2" : A extends "mat4x3" ? "vec3" : A extends "mat4" | "mat4x4" ? "vec4" : never : A extends "mat2" | "mat2x2" ? B extends "mat2" | "mat2x2" ? "mat2" : B extends "mat3x2" ? "mat3x2" : B extends "mat4x2" ? "mat4x2" : never : A extends "mat2x3" ? B extends "mat2" | "mat2x2" ? "mat2x3" : B extends "mat3x2" ? "mat3" : B extends "mat4x2" ? "mat4x3" : never : A extends "mat2x4" ? B extends "mat2" | "mat2x2" ? "mat2x4" : B extends "mat3x2" ? "mat3x4" : B extends "mat4x2" ? "mat4" : never : A extends "mat3x2" ? B extends "mat2x3" ? "mat2" : B extends "mat3" | "mat3x3" ? "mat3x2" : B extends "mat4x3" ? "mat4x2" : never : A extends "mat3" | "mat3x3" ? B extends "mat2x3" ? "mat2x3" : B extends "mat3" | "mat3x3" ? "mat3" : B extends "mat4x3" ? "mat4x3" : never : A extends "mat3x4" ? B extends "mat2x3" ? "mat2x4" : B extends "mat3" | "mat3x3" ? "mat3x4" : B extends "mat4x3" ? "mat4" : never : A extends "mat4x2" ? B extends "mat2x4" ? "mat2" : B extends "mat3x4" ? "mat3x2" : B extends "mat4" | "mat4x4" ? "mat4x2" : never : A extends "mat4x3" ? B extends "mat2x4" ? "mat2x3" : B extends "mat3x4" ? "mat3" : B extends "mat4" | "mat4x4" ? "mat4x3" : never : A extends "mat4" | "mat4x4" ? B extends "mat2x4" ? "mat2x4" : B extends "mat3x4" ? "mat3x4" : B extends "mat4" | "mat4x4" ? "mat4" : never : never); + export type DivOutput = AddOutput; + export type IModOutput = BaseType & (A extends B ? A : A extends "int" ? B extends IntTypes ? B : never : B extends "int" ? A extends IntTypes ? A : never : A extends "uint" ? B extends UintTypes ? B : never : B extends "uint" ? A extends UintTypes ? A : never : never); + export type ModOutput = BaseType & (A extends B ? A : B extends "float" ? A : never); + export type PowOutput = BaseType & (A extends B ? A : never); + export type MinOutput = BaseType & (A extends B ? A : B extends "float" ? A extends FloatTypes ? A : never : B extends "int" ? A extends IntTypes ? A : never : B extends "uint" ? A extends UintTypes ? A : never : never); + export type MaxOutput = MinOutput; + export type ClampOutput = BaseType & (B extends "float" ? A extends FloatTypes ? A : never : B extends "int" ? A extends IntTypes ? A : never : B extends "uint" ? A extends UintTypes ? A : never : never); + export type MixOutput = BaseType & (T extends A ? A : T extends "float" ? A : T extends "bool" ? A extends "float" ? A : never : T extends "bvec2" ? A extends "vec2" ? A : never : T extends "bvec3" ? A extends "vec3" ? A : never : T extends "bvec4" ? A extends "vec4" ? A : never : never); + export type StepOutput = BaseType & (A extends B ? B : A extends "float" ? B : never); + export type SmoothstepOutput = BaseType & (A extends B ? (A extends C ? C : A extends "float" ? C : never) : never); + export type IsNanOutput = BaseType & (A extends "float" ? "bool" : A extends "vec2" ? "bvec2" : A extends "vec3" ? "bvec3" : A extends "vec4" ? "bvec4" : never); + export type IsInfOutput = IsNanOutput; + export function addOutputType(a: A, b: B, operation?: string): AddOutput; + export function subOutputType(a: A, b: B): SubOutput; + export function mulOutputType(a: A, b: B): MulOutput; + export function divOutputType(a: A, b: B): DivOutput; + export function imodOutputType(a: A, b: B): IModOutput; + export function modOutputType(a: A, b: B): ModOutput; + export function modfOutputType(a: A): A; + export function negOutputType(a: A): A; + export function absOutputType(a: A): A; + export function signOutputType(a: A): A; + export function floorOutputType(a: A): A; + export function ceilOutputType(a: A): A; + export function truncOutputType(a: A): A; + export function roundOutputType(a: A): A; + export function fractOutputType(a: A): A; + export function powOutputType(a: A): A; + export function expOutputType(a: A): A; + export function exp2OutputType(a: A): A; + export function logOutputType(a: A): A; + export function log2OutputType(a: A): A; + export function sqrOutputType(a: A): A; + export function sqrtOutputType(a: A): A; + export function inversesqrtOutputType(a: A): A; + export function minOutputType(a: A, b: B, operation?: string): MinOutput; + export function maxOutputType(a: A, b: B): MaxOutput; + export function clampOutputType(a: A, b: B, _c: B): ClampOutput; + export function mixOutputType(a: A, b: A, c: C): MixOutput; + export function stepOutputType(a: A, b: B): StepOutput; + export function smoothstepOutputType(a: A, b: B, c: C): SmoothstepOutput; + export function isNanOutputType(a: A, operation?: string): IsNanOutput; + export function isInfOutputType(a: A): IsInfOutput; +} +declare module "dyno/math" { + import { BinaryOp, Dyno, TrinaryOp, UnaryOp } from "dyno/base"; + import { type AddOutput, type ClampOutput, type DivOutput, type IModOutput, type IsInfOutput, type IsNanOutput, type MaxOutput, type MinOutput, type MixOutput, type ModOutput, type MulOutput, type SmoothstepOutput, type StepOutput, type SubOutput } from "dyno/mathTypes"; + import type { AllIntTypes, AllSignedTypes, AllValueTypes, BoolTypes, FloatTypes, SignedTypes, ValueTypes } from "dyno/types"; + import { type DynoVal } from "dyno/value"; + export const add: (a: DynoVal, b: DynoVal) => DynoVal>; + export const sub: (a: DynoVal, b: DynoVal) => DynoVal>; + export const mul: (a: DynoVal, b: DynoVal) => DynoVal>; + export const div: (a: DynoVal, b: DynoVal) => DynoVal>; + export const imod: (a: DynoVal, b: DynoVal) => DynoVal>; + export const mod: (a: DynoVal, b: DynoVal) => DynoVal>; + export const modf: (a: DynoVal) => { + fract: DynoVal; + integer: DynoVal; + }; + export const neg: (a: DynoVal) => DynoVal; + export const abs: (a: DynoVal) => DynoVal; + export const sign: (a: DynoVal) => DynoVal; + export const floor: (a: DynoVal) => DynoVal; + export const ceil: (a: DynoVal) => DynoVal; + export const trunc: (a: DynoVal) => DynoVal; + export const round: (a: DynoVal) => DynoVal; + export const fract: (a: DynoVal) => DynoVal; + export const pow: (a: DynoVal, b: DynoVal) => DynoVal; + export const exp: (a: DynoVal) => DynoVal; + export const exp2: (a: DynoVal) => DynoVal; + export const log: (a: DynoVal) => DynoVal; + export const log2: (a: DynoVal) => DynoVal; + export const sqr: (a: DynoVal) => DynoVal; + export const sqrt: (a: DynoVal) => DynoVal; + export const inversesqrt: (a: DynoVal) => DynoVal; + export const min: (a: DynoVal, b: DynoVal) => DynoVal>; + export const max: (a: DynoVal, b: DynoVal) => DynoVal>; + export const clamp: (a: DynoVal, min: DynoVal, max: DynoVal) => DynoVal>; + export const mix: (a: DynoVal, b: DynoVal, t: DynoVal) => DynoVal>; + export const step: (edge: DynoVal, x: DynoVal) => DynoVal>; + export const smoothstep: (edge0: DynoVal, edge1: DynoVal, x: DynoVal) => DynoVal>; + export const isNan: (a: DynoVal) => DynoVal>; + export const isInf: (a: DynoVal) => DynoVal>; + export class Add extends BinaryOp, "sum"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Sub extends BinaryOp, "difference"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Mul extends BinaryOp, "product"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Div extends BinaryOp, "quotient"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class IMod extends BinaryOp, "remainder"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Mod extends BinaryOp, "remainder"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Modf extends Dyno<{ + a: A; + }, { + fract: A; + integer: A; + }> { + constructor({ a }: { + a: DynoVal; + }); + } + export class Neg extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Abs extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Sign extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Floor extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Ceil extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Trunc extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Round extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Fract extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Pow extends BinaryOp { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Exp extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Exp2 extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Log extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Log2 extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Sqr extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Sqrt extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class InverseSqrt extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Min extends BinaryOp, "min"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Max extends BinaryOp, "max"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Clamp extends TrinaryOp, "clamp"> { + constructor({ a, min, max, }: { + a: DynoVal; + min: DynoVal; + max: DynoVal; + }); + } + export class Mix extends TrinaryOp, "mix"> { + constructor({ a, b, t }: { + a: DynoVal; + b: DynoVal; + t: DynoVal; + }); + } + export class Step extends BinaryOp, "step"> { + constructor({ edge, x }: { + edge: DynoVal; + x: DynoVal; + }); + } + export class Smoothstep extends TrinaryOp, "smoothstep"> { + constructor({ edge0, edge1, x, }: { + edge0: DynoVal; + edge1: DynoVal; + x: DynoVal; + }); + } + export class IsNan extends UnaryOp, "isNan"> { + constructor({ a }: { + a: DynoVal; + }); + } + export class IsInf extends UnaryOp, "isInf"> { + constructor({ a }: { + a: DynoVal; + }); + } +} +declare module "dyno/logic" { + import { BinaryOp, TrinaryOp, UnaryOp } from "dyno/base"; + import { type AllIntTypes, type BoolTypes, type IntTypes, type ScalarTypes, type SimpleTypes, type UintTypes, type ValueTypes } from "dyno/types"; + import { type DynoVal } from "dyno/value"; + export const and: (a: DynoVal, b: DynoVal) => DynoVal; + export const or: (a: DynoVal, b: DynoVal) => DynoVal; + export const xor: (a: DynoVal, b: DynoVal) => DynoVal; + export const not: (a: DynoVal) => DynoVal; + export const lessThan: (a: DynoVal, b: DynoVal) => DynoVal>; + export const lessThanEqual: (a: DynoVal, b: DynoVal) => DynoVal>; + export const greaterThan: (a: DynoVal, b: DynoVal) => DynoVal>; + export const greaterThanEqual: (a: DynoVal, b: DynoVal) => DynoVal>; + export const equal: (a: DynoVal, b: DynoVal) => DynoVal>; + export const notEqual: (a: DynoVal, b: DynoVal) => DynoVal>; + export const any: (a: DynoVal) => DynoVal<"bool">; + export const all: (a: DynoVal) => DynoVal<"bool">; + export const select: (cond: DynoVal<"bool">, t: DynoVal, f: DynoVal) => DynoVal; + export const compXor: (a: DynoVal) => DynoVal>; + export class And extends BinaryOp { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Or extends BinaryOp { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Xor extends BinaryOp { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Not extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class LessThan extends BinaryOp, "lessThan"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class LessThanEqual extends BinaryOp, "lessThanEqual"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class GreaterThan extends BinaryOp, "greaterThan"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class GreaterThanEqual extends BinaryOp, "greaterThanEqual"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Equal extends BinaryOp, "equal"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class NotEqual extends BinaryOp, "notEqual"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Any extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class All extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Select extends TrinaryOp<"bool", T, T, T, "select"> { + constructor({ cond, t, f, }: { + cond: DynoVal<"bool">; + t: DynoVal; + f: DynoVal; + }); + } + type CompareOutput = T extends ScalarTypes ? "bool" : T extends "ivec2" | "uvec2" | "vec2" ? "bvec2" : T extends "ivec3" | "uvec3" | "vec3" ? "bvec3" : T extends "ivec4" | "uvec4" | "vec4" ? "bvec4" : never; + type EqualOutput = A extends ScalarTypes ? "bool" : A extends BoolTypes ? A : A extends "ivec2" | "uvec2" | "vec2" ? "bvec2" : A extends "ivec3" | "uvec3" | "vec3" ? "bvec3" : A extends "ivec4" | "uvec4" | "vec4" ? "bvec4" : never; + type NotEqualOutput = EqualOutput; + type CompXorOutput = A extends BoolTypes ? "bool" : A extends IntTypes ? "int" : A extends UintTypes ? "uint" : never; + export class CompXor extends UnaryOp, "compXor"> { + constructor({ a }: { + a: DynoVal; + }); + } +} +declare module "dyno/convert" { + import { UnaryOp } from "dyno/base"; + import { type SimpleTypes } from "dyno/types"; + import type { DynoVal } from "dyno/value"; + export const bool: (value: DynoVal) => DynoVal<"bool">; + export const int: (value: DynoVal) => DynoVal<"int">; + export const uint: (value: DynoVal) => DynoVal<"uint">; + export const float: (value: DynoVal) => DynoVal<"float">; + export const bvec2: (value: DynoVal) => DynoVal<"bvec2">; + export const bvec3: (value: DynoVal) => DynoVal<"bvec3">; + export const bvec4: (value: DynoVal) => DynoVal<"bvec4">; + export const ivec2: (value: DynoVal) => DynoVal<"ivec2">; + export const ivec3: (value: DynoVal) => DynoVal<"ivec3">; + export const ivec4: (value: DynoVal) => DynoVal<"ivec4">; + export const uvec2: (value: DynoVal) => DynoVal<"uvec2">; + export const uvec3: (value: DynoVal) => DynoVal<"uvec3">; + export const uvec4: (value: DynoVal) => DynoVal<"uvec4">; + export const vec2: (value: DynoVal) => DynoVal<"vec2">; + export const vec3: (value: DynoVal) => DynoVal<"vec3">; + export const vec4: (value: DynoVal) => DynoVal<"vec4">; + export const mat2: (value: DynoVal) => DynoVal<"mat2">; + export const mat3: (value: DynoVal) => DynoVal<"mat3">; + export const mat4: (value: DynoVal) => DynoVal<"mat4">; + export const floatBitsToInt: (value: DynoVal<"float">) => DynoVal<"int">; + export const floatBitsToUint: (value: DynoVal<"float">) => DynoVal<"uint">; + export const intBitsToFloat: (value: DynoVal<"int">) => DynoVal<"float">; + export const uintBitsToFloat: (value: DynoVal<"uint">) => DynoVal<"float">; + export const packSnorm2x16: (value: DynoVal<"vec2">) => DynoVal<"uint">; + export const unpackSnorm2x16: (value: DynoVal<"uint">) => DynoVal<"vec2">; + export const packUnorm2x16: (value: DynoVal<"vec2">) => DynoVal<"uint">; + export const unpackUnorm2x16: (value: DynoVal<"uint">) => DynoVal<"vec2">; + export const packHalf2x16: (value: DynoVal<"vec2">) => DynoVal<"uint">; + export const unpackHalf2x16: (value: DynoVal<"uint">) => DynoVal<"vec2">; + export const uintToRgba8: (value: DynoVal<"uint">) => DynoVal<"vec4">; + export class SimpleCast extends UnaryOp { + constructor({ value, outType, outKey, }: { + value: DynoVal; + outType: OutType; + outKey: OutKey; + }); + } + export class Bool extends SimpleCast<"bool" | "int" | "uint" | "float", "bool", "bool"> { + constructor({ value, }: { + value: DynoVal<"bool" | "int" | "uint" | "float">; + }); + } + export class Int extends SimpleCast<"bool" | "int" | "uint" | "float", "int", "int"> { + constructor({ value, }: { + value: DynoVal<"bool" | "int" | "uint" | "float">; + }); + } + export class Uint extends SimpleCast<"bool" | "int" | "uint" | "float", "uint", "uint"> { + constructor({ value, }: { + value: DynoVal<"bool" | "int" | "uint" | "float">; + }); + } + export class Float extends SimpleCast<"bool" | "int" | "uint" | "float", "float", "float"> { + constructor({ value, }: { + value: DynoVal<"bool" | "int" | "uint" | "float">; + }); + } + export class BVec2 extends SimpleCast<"bool" | "bvec2" | "ivec2" | "uvec2" | "vec2", "bvec2", "bvec2"> { + constructor({ value, }: { + value: DynoVal<"bool" | "bvec2" | "ivec2" | "uvec2" | "vec2">; + }); + } + export class BVec3 extends SimpleCast<"bool" | "bvec3" | "ivec3" | "uvec3" | "vec3", "bvec3", "bvec3"> { + constructor({ value, }: { + value: DynoVal<"bool" | "bvec3" | "ivec3" | "uvec3" | "vec3">; + }); + } + export class BVec4 extends SimpleCast<"bool" | "bvec4" | "ivec4" | "uvec4" | "vec4", "bvec4", "bvec4"> { + constructor({ value, }: { + value: DynoVal<"bool" | "bvec4" | "ivec4" | "uvec4" | "vec4">; + }); + } + export class IVec2 extends SimpleCast<"int" | "bvec2" | "ivec2" | "uvec2" | "vec2", "ivec2", "ivec2"> { + constructor({ value, }: { + value: DynoVal<"int" | "bvec2" | "ivec2" | "uvec2" | "vec2">; + }); + } + export class IVec3 extends SimpleCast<"int" | "bvec3" | "ivec3" | "uvec3" | "vec3", "ivec3", "ivec3"> { + constructor({ value, }: { + value: DynoVal<"int" | "bvec3" | "ivec3" | "uvec3" | "vec3">; + }); + } + export class IVec4 extends SimpleCast<"int" | "bvec4" | "ivec4" | "uvec4" | "vec4", "ivec4", "ivec4"> { + constructor({ value, }: { + value: DynoVal<"int" | "bvec4" | "ivec4" | "uvec4" | "vec4">; + }); + } + export class UVec2 extends SimpleCast<"uint" | "ivec2" | "bvec2" | "uvec2" | "vec2", "uvec2", "uvec2"> { + constructor({ value, }: { + value: DynoVal<"uint" | "ivec2" | "bvec2" | "uvec2" | "vec2">; + }); + } + export class UVec3 extends SimpleCast<"uint" | "ivec3" | "bvec3" | "uvec3" | "vec3", "uvec3", "uvec3"> { + constructor({ value, }: { + value: DynoVal<"uint" | "ivec3" | "bvec3" | "uvec3" | "vec3">; + }); + } + export class UVec4 extends SimpleCast<"uint" | "ivec4" | "bvec4" | "uvec4" | "vec4", "uvec4", "uvec4"> { + constructor({ value, }: { + value: DynoVal<"uint" | "ivec4" | "bvec4" | "uvec4" | "vec4">; + }); + } + export class Vec2 extends SimpleCast<"float" | "bvec2" | "ivec2" | "uvec2" | "vec2" | "vec3" | "vec4", "vec2", "vec2"> { + constructor({ value, }: { + value: DynoVal<"float" | "bvec2" | "ivec2" | "uvec2" | "vec2" | "vec3" | "vec4">; + }); + } + export class Vec3 extends SimpleCast<"float" | "bvec3" | "ivec3" | "uvec3" | "vec3" | "vec2" | "vec4", "vec3", "vec3"> { + constructor({ value, }: { + value: DynoVal<"float" | "bvec3" | "ivec3" | "uvec3" | "vec3" | "vec2" | "vec4">; + }); + } + export class Vec4 extends SimpleCast<"float" | "bvec4" | "ivec4" | "uvec4" | "vec4", "vec4", "vec4"> { + constructor({ value, }: { + value: DynoVal<"float" | "bvec4" | "ivec4" | "uvec4" | "vec4">; + }); + } + export class Mat2 extends SimpleCast<"float" | "mat2" | "mat3" | "mat4", "mat2", "mat2"> { + constructor({ value, }: { + value: DynoVal<"float" | "mat2" | "mat3" | "mat4">; + }); + } + export class Mat3 extends SimpleCast<"float" | "mat2" | "mat3" | "mat4", "mat3", "mat3"> { + constructor({ value, }: { + value: DynoVal<"float" | "mat2" | "mat3" | "mat4">; + }); + } + export class Mat4 extends SimpleCast<"float" | "mat2" | "mat3" | "mat4", "mat4", "mat4"> { + constructor({ value, }: { + value: DynoVal<"float" | "mat2" | "mat3" | "mat4">; + }); + } + export class FloatBitsToInt extends UnaryOp<"float", "int", "int"> { + constructor({ value }: { + value: DynoVal<"float">; + }); + } + export class FloatBitsToUint extends UnaryOp<"float", "uint", "uint"> { + constructor({ value }: { + value: DynoVal<"float">; + }); + } + export class IntBitsToFloat extends UnaryOp<"int", "float", "float"> { + constructor({ value }: { + value: DynoVal<"int">; + }); + } + export class UintBitsToFloat extends UnaryOp<"uint", "float", "float"> { + constructor({ value }: { + value: DynoVal<"uint">; + }); + } + export class PackSnorm2x16 extends UnaryOp<"vec2", "uint", "uint"> { + constructor({ value }: { + value: DynoVal<"vec2">; + }); + } + export class UnpackSnorm2x16 extends UnaryOp<"uint", "vec2", "vec2"> { + constructor({ value }: { + value: DynoVal<"uint">; + }); + } + export class PackUnorm2x16 extends UnaryOp<"vec2", "uint", "uint"> { + constructor({ value }: { + value: DynoVal<"vec2">; + }); + } + export class UnpackUnorm2x16 extends UnaryOp<"uint", "vec2", "vec2"> { + constructor({ value }: { + value: DynoVal<"uint">; + }); + } + export class PackHalf2x16 extends UnaryOp<"vec2", "uint", "uint"> { + constructor({ value }: { + value: DynoVal<"vec2">; + }); + } + export class UnpackHalf2x16 extends UnaryOp<"uint", "vec2", "vec2"> { + constructor({ value }: { + value: DynoVal<"uint">; + }); + } + export class UintToRgba8 extends UnaryOp<"uint", "vec4", "rgba8"> { + constructor({ value }: { + value: DynoVal<"uint">; + }); + } +} +declare module "dyno/vecmat" { + import { BinaryOp, Dyno, TrinaryOp, UnaryOp } from "dyno/base"; + import { type FloatTypes, type IntTypes, type MatFloatTypes, type SquareMatTypes, type UintTypes, type VectorElementType, type VectorTypes } from "dyno/types"; + import { type DynoVal, type DynoValue, type HasDynoOut } from "dyno/value"; + export const length: (a: DynoVal) => DynoVal<"float">; + export const distance: (a: DynoVal, b: DynoVal) => DynoVal<"float">; + export const dot: (a: DynoVal, b: DynoVal) => DynoVal<"float">; + export const cross: (a: DynoVal<"vec3">, b: DynoVal<"vec3">) => DynoVal<"vec3">; + export const normalize: (a: DynoVal) => DynoVal; + export const faceforward: (a: DynoVal, b: DynoVal, c: DynoVal) => DynoVal; + export const reflectVec: (incident: DynoVal, normal: DynoVal) => DynoVal; + export const refractVec: (incident: DynoVal, normal: DynoVal, eta: DynoVal<"float">) => DynoVal; + export const split: (vector: DynoVal) => Split; + export const combine: >({ vector, vectorType, x, y, z, w, r, g, b, a, }: { + vector?: DynoVal; + vectorType?: V; + x?: DynoVal; + y?: DynoVal; + z?: DynoVal; + w?: DynoVal; + r?: DynoVal; + g?: DynoVal; + b?: DynoVal; + a?: DynoVal; + }) => DynoVal; + export const projectH: (a: DynoVal) => DynoVal>; + export const extendVec: (a: DynoVal, b: DynoVal<"float">) => DynoVal>; + export const swizzle: (a: DynoVal, select: S) => DynoVal>>; + export const compMult: (a: DynoVal, b: DynoVal) => DynoVal; + export const outer: (a: DynoVal, b: DynoVal) => DynoVal>; + export const transpose: (a: DynoVal) => DynoVal>; + export const determinant: (a: DynoVal) => DynoVal<"float">; + export const inverse: (a: DynoVal) => DynoVal; + export class Length extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Distance extends BinaryOp { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Dot extends BinaryOp { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + export class Cross extends BinaryOp<"vec3", "vec3", "vec3", "cross"> { + constructor({ a, b }: { + a: DynoVal<"vec3">; + b: DynoVal<"vec3">; + }); + } + export class Normalize extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + type ProjectHOutput = A extends "vec3" ? "vec2" : A extends "vec4" ? "vec3" : never; + export class ProjectH extends UnaryOp, "projected"> { + constructor({ a }: { + a: DynoVal; + }); + } + type ExtendVecOutput = A extends "float" ? "vec2" : A extends "vec2" ? "vec3" : A extends "vec3" ? "vec4" : never; + export class ExtendVec extends BinaryOp, "extend"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal<"float">; + }); + } + export class FaceForward extends TrinaryOp { + constructor({ a, b, c }: { + a: DynoVal; + b: DynoVal; + c: DynoVal; + }); + } + export class ReflectVec extends BinaryOp { + constructor({ incident, normal, }: { + incident: DynoVal; + normal: DynoVal; + }); + } + export class RefractVec extends TrinaryOp { + constructor({ incident, normal, eta, }: { + incident: DynoVal; + normal: DynoVal; + eta: DynoVal<"float">; + }); + } + export class CompMult extends BinaryOp { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + type OuterOutput = A extends "vec2" ? B extends "vec2" ? "mat2" : B extends "vec3" ? "mat3x2" : B extends "vec4" ? "mat4x2" : never : A extends "vec3" ? B extends "vec2" ? "mat2x3" : B extends "vec3" ? "mat3" : B extends "vec4" ? "mat4x3" : never : A extends "vec4" ? B extends "vec2" ? "mat2x4" : B extends "vec3" ? "mat3x4" : B extends "vec4" ? "mat4" : never : never; + export class Outer extends BinaryOp, "outer"> { + constructor({ a, b }: { + a: DynoVal; + b: DynoVal; + }); + } + type TransposeOutput = A extends SquareMatTypes ? A : A extends "mat2x3" ? "mat3x2" : A extends "mat2x4" ? "mat4x2" : A extends "mat3x2" ? "mat2x3" : A extends "mat3x4" ? "mat4x3" : A extends "mat4x2" ? "mat2x4" : A extends "mat4x3" ? "mat3x4" : never; + export class Transpose extends UnaryOp, "transpose"> { + constructor({ a }: { + a: DynoVal; + }); + } + export class Determinant extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + export class Inverse extends UnaryOp { + constructor({ a }: { + a: DynoVal; + }); + } + type SplitOutTypes = A extends "vec2" ? { + x: "float"; + y: "float"; + r: "float"; + g: "float"; + } : A extends "vec3" ? { + x: "float"; + y: "float"; + z: "float"; + r: "float"; + g: "float"; + b: "float"; + } : A extends "vec4" ? { + x: "float"; + y: "float"; + z: "float"; + w: "float"; + r: "float"; + g: "float"; + b: "float"; + a: "float"; + } : A extends "ivec2" ? { + x: "int"; + y: "int"; + r: "int"; + g: "int"; + } : A extends "ivec3" ? { + x: "int"; + y: "int"; + z: "int"; + r: "int"; + g: "int"; + b: "int"; + } : A extends "ivec4" ? { + x: "int"; + y: "int"; + z: "int"; + w: "int"; + r: "int"; + g: "int"; + b: "int"; + a: "int"; + } : A extends "uvec2" ? { + x: "uint"; + y: "uint"; + r: "uint"; + g: "uint"; + } : A extends "uvec3" ? { + x: "uint"; + y: "uint"; + z: "uint"; + r: "uint"; + g: "uint"; + b: "uint"; + } : A extends "uvec4" ? { + x: "uint"; + y: "uint"; + z: "uint"; + w: "uint"; + r: "uint"; + g: "uint"; + b: "uint"; + a: "uint"; + } : never; + export class Split extends Dyno<{ + vector: V; + }, SplitOutTypes> { + constructor({ vector }: { + vector: DynoVal; + }); + } + export class Combine> extends Dyno & { + vector: V; + }, { + vector: V; + }> implements HasDynoOut { + constructor({ vector, vectorType, x, y, z, w, r, g, b, a, }: { + vector?: DynoVal; + vectorType?: V; + x?: DynoVal; + y?: DynoVal; + z?: DynoVal; + w?: DynoVal; + r?: DynoVal; + g?: DynoVal; + b?: DynoVal; + a?: DynoVal; + }); + dynoOut(): DynoValue; + } + type SwizzleOutput = A extends FloatTypes ? Len extends 1 ? "float" : Len extends 2 ? "vec2" : Len extends 3 ? "vec3" : Len extends 4 ? "vec4" : never : A extends IntTypes ? Len extends 1 ? "int" : Len extends 2 ? "ivec2" : Len extends 3 ? "ivec3" : Len extends 4 ? "ivec4" : never : A extends UintTypes ? Len extends 1 ? "uint" : Len extends 2 ? "uvec2" : Len extends 3 ? "uvec3" : Len extends 4 ? "uvec4" : never : never; + type SwizzleSelectLen = S extends Swizzle1Select ? 1 : S extends Swizzle2Select ? 2 : S extends Swizzle3Select ? 3 : S extends Swizzle4Select ? 4 : never; + type Swizzle1Select = `${"x" | "y" | "z" | "w"}|${"r" | "g" | "b" | "a"}`; + type Swizzle2Select = `${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}` | `${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}`; + type Swizzle3Select = `${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}` | `${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}`; + type Swizzle4Select = `${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}` | `${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}`; + type SwizzleSelect = Swizzle1Select | Swizzle2Select | Swizzle3Select | Swizzle4Select; + export class Swizzle extends UnaryOp>, "swizzle"> { + constructor({ vector, select }: { + vector: DynoVal; + select: S; + }); + } +} +declare module "dyno/util" { + import { Dyno, DynoBlock } from "dyno/base"; + import { type ValueTypes } from "dyno/types"; + import { type DynoVal, type DynoValue, type HasDynoOut } from "dyno/value"; + export const remapIndex: (index: DynoVal<"int">, from: DynoVal<"int">, to: DynoVal<"int">) => DynoVal<"int">; + export const pcgMix: (value: DynoVal) => DynoVal<"uint">; + export const pcgNext: (state: DynoVal<"uint">) => DynoVal<"uint">; + export const pcgHash: (state: DynoVal<"uint">) => DynoVal<"uint">; + export const hash: (value: DynoVal) => DynoVal<"uint">; + export const hash2: (value: DynoVal) => DynoVal<"uvec2">; + export const hash3: (value: DynoVal) => DynoVal<"uvec3">; + export const hash4: (value: DynoVal) => DynoVal<"uvec4">; + export const hashFloat: (value: DynoVal) => DynoVal<"float">; + export const hashVec2: (value: DynoVal) => DynoVal<"vec2">; + export const hashVec3: (value: DynoVal) => DynoVal<"vec3">; + export const hashVec4: (value: DynoVal) => DynoVal<"vec4">; + export class DynoRemapIndex extends Dyno<{ + from: "int"; + to: "int"; + index: "int"; + }, { + index: "int"; + }> implements HasDynoOut<"int"> { + constructor({ from, to, index, }: { + from: DynoVal<"int">; + to: DynoVal<"int">; + index: DynoVal<"int">; + }); + dynoOut(): DynoValue<"int">; + } + export class PcgNext extends Dyno<{ + state: T; + }, { + state: "uint"; + }> implements HasDynoOut<"uint"> { + constructor({ state }: { + state: DynoVal; + }); + dynoOut(): DynoValue<"uint">; + } + export class PcgHash extends Dyno<{ + state: "uint"; + }, { + hash: "uint"; + }> implements HasDynoOut<"uint"> { + constructor({ state }: { + state: DynoVal<"uint">; + }); + dynoOut(): DynoValue<"uint">; + } + export class PcgMix extends Dyno<{ + value: T; + }, { + state: "uint"; + }> implements HasDynoOut<"uint"> { + constructor({ value }: { + value: DynoVal; + }); + dynoOut(): DynoValue<"uint">; + } + export class Hash extends DynoBlock<{ + value: T; + }, { + hash: "uint"; + }> implements HasDynoOut<"uint"> { + constructor({ value }: { + value: DynoVal; + }); + dynoOut(): DynoValue<"uint">; + } + export class Hash2 extends DynoBlock<{ + value: T; + }, { + hash: "uvec2"; + }> implements HasDynoOut<"uvec2"> { + constructor({ value }: { + value: DynoVal; + }); + dynoOut(): DynoValue<"uvec2">; + } + export class Hash3 extends DynoBlock<{ + value: T; + }, { + hash: "uvec3"; + }> implements HasDynoOut<"uvec3"> { + constructor({ value }: { + value: DynoVal; + }); + dynoOut(): DynoValue<"uvec3">; + } + export class Hash4 extends DynoBlock<{ + value: T; + }, { + hash: "uvec4"; + }> implements HasDynoOut<"uvec4"> { + constructor({ value }: { + value: DynoVal; + }); + dynoOut(): DynoValue<"uvec4">; + } + export class HashFloat extends DynoBlock<{ + value: T; + }, { + hash: "float"; + }> implements HasDynoOut<"float"> { + constructor({ value }: { + value: DynoVal; + }); + dynoOut(): DynoValue<"float">; + } + export class HashVec2 extends DynoBlock<{ + value: T; + }, { + hash: "vec2"; + }> implements HasDynoOut<"vec2"> { + constructor({ value }: { + value: DynoVal; + }); + dynoOut(): DynoValue<"vec2">; + } + export class HashVec3 extends DynoBlock<{ + value: T; + }, { + hash: "vec3"; + }> implements HasDynoOut<"vec3"> { + constructor({ value }: { + value: DynoVal; + }); + dynoOut(): DynoValue<"vec3">; + } + export class HashVec4 extends DynoBlock<{ + value: T; + }, { + hash: "vec4"; + }> implements HasDynoOut<"vec4"> { + constructor({ value }: { + value: DynoVal; + }); + dynoOut(): DynoValue<"vec4">; + } +} +declare module "dyno/transform" { + import { Dyno } from "dyno/base"; + import type { DynoVal } from "dyno/value"; + export const transformPos: (position: DynoVal<"vec3">, { scale, scales, rotate, translate, }: { + scale?: DynoVal<"float">; + scales?: DynoVal<"vec3">; + rotate?: DynoVal<"vec4">; + translate?: DynoVal<"vec3">; + }) => DynoVal<"vec3">; + export const transformRay: (ray: DynoVal<"vec3">, { scale, scales, rotate, }: { + scale?: DynoVal<"float">; + scales?: DynoVal<"vec3">; + rotate?: DynoVal<"vec4">; + }) => DynoVal<"vec3">; + export const transformQuat: (quaternion: DynoVal<"vec4">, { rotate }: { + rotate?: DynoVal<"vec4">; + }) => DynoVal<"vec4">; + export class TransformPosition extends Dyno<{ + position: "vec3"; + scale: "float"; + scales: "vec3"; + rotate: "vec4"; + translate: "vec3"; + }, { + position: "vec3"; + }> { + constructor({ position, scale, scales, rotate, translate, }: { + position?: DynoVal<"vec3">; + scale?: DynoVal<"float">; + scales?: DynoVal<"vec3">; + rotate?: DynoVal<"vec4">; + translate?: DynoVal<"vec3">; + }); + } + export class TransformRay extends Dyno<{ + ray: "vec3"; + scale: "float"; + scales: "vec3"; + rotate: "vec4"; + }, { + ray: "vec3"; + }> { + constructor({ ray, scale, scales, rotate, }: { + ray?: DynoVal<"vec3">; + scale?: DynoVal<"float">; + scales?: DynoVal<"vec3">; + rotate?: DynoVal<"vec4">; + }); + } + export class TransformQuaternion extends Dyno<{ + quaternion: "vec4"; + rotate: "vec4"; + }, { + quaternion: "vec4"; + }> { + constructor({ quaternion, rotate, }: { + quaternion?: DynoVal<"vec4">; + rotate?: DynoVal<"vec4">; + }); + } +} +declare module "dyno/control" { + export const dynoIf: () => never; + export const dynoSwitch: () => never; + export const dynoFor: () => never; + export const comment: () => never; + export const arrayIndex: () => never; + export const arrayLength: () => never; +} +declare module "dyno/texture" { + import { Dyno } from "dyno/base"; + import type { AllSamplerTypes, IsamplerTypes, NormalSamplerTypes, Sampler2DArrayTypes, Sampler2DTypes, Sampler3DTypes, SamplerCubeTypes, SamplerShadowTypes, SamplerTypes, UsamplerTypes } from "dyno/types"; + import { type DynoVal, type DynoValue, type HasDynoOut } from "dyno/value"; + export const textureSize: (texture: DynoVal, lod?: DynoVal<"int">) => DynoVal>; + export const texture: (texture: DynoVal, coord: DynoVal>, bias?: DynoVal<"float">) => DynoVal>; + export const texelFetch: (texture: DynoVal, coord: DynoVal>, lod?: DynoVal<"int">) => DynoVal>; + export class TextureSize extends Dyno<{ + texture: T; + lod: "int"; + }, { + size: TextureSizeType; + }> implements HasDynoOut> { + constructor({ texture, lod }: { + texture: DynoVal; + lod?: DynoVal<"int">; + }); + dynoOut(): DynoValue>; + } + export class Texture extends Dyno<{ + texture: T; + coord: TextureCoordType; + bias: "float"; + }, { + sample: TextureReturnType; + }> implements HasDynoOut> { + constructor({ texture, coord, bias, }: { + texture: DynoVal; + coord: DynoVal>; + bias?: DynoVal<"float">; + }); + dynoOut(): DynoValue>; + } + export class TexelFetch extends Dyno<{ + texture: T; + coord: TextureSizeType; + lod: "int"; + }, { + texel: TextureReturnType; + }> implements HasDynoOut> { + constructor({ texture, coord, lod, }: { + texture: DynoVal; + coord: DynoVal>; + lod?: DynoVal<"int">; + }); + dynoOut(): DynoValue>; + } + type TextureSizeType = T extends Sampler2DTypes | SamplerCubeTypes ? "ivec2" : T extends Sampler3DTypes | Sampler2DArrayTypes ? "ivec3" : never; + type TextureCoordType = T extends Sampler2DTypes ? "vec2" : T extends Sampler3DTypes | Sampler2DArrayTypes | SamplerCubeTypes | Sampler2DArrayTypes ? "vec3" : T extends "samperCubeShadow" | "sampler2DArrayShadow" ? "vec4" : never; + type TextureReturnType = T extends SamplerTypes ? "vec4" : T extends UsamplerTypes ? "uvec4" : T extends IsamplerTypes ? "ivec4" : T extends SamplerShadowTypes ? "float" : never; +} +declare module "dyno/trig" { + import { BinaryOp, UnaryOp } from "dyno/base"; + import type { FloatTypes } from "dyno/types"; + import type { DynoVal } from "dyno/value"; + export const radians: (degrees: DynoVal) => DynoVal; + export const degrees: (radians: DynoVal) => DynoVal; + export const sin: (radians: DynoVal) => DynoVal; + export const cos: (radians: DynoVal) => DynoVal; + export const tan: (radians: DynoVal) => DynoVal; + export const asin: (sin: DynoVal) => DynoVal; + export const acos: (cos: DynoVal) => DynoVal; + export const atan: (tan: DynoVal) => DynoVal; + export const atan2: (y: DynoVal, x: DynoVal) => DynoVal; + export const sinh: (x: DynoVal) => DynoVal; + export const cosh: (x: DynoVal) => DynoVal; + export const tanh: (x: DynoVal) => DynoVal; + export const asinh: (x: DynoVal) => DynoVal; + export const acosh: (x: DynoVal) => DynoVal; + export const atanh: (x: DynoVal) => DynoVal; + export class Radians extends UnaryOp { + constructor({ degrees }: { + degrees: DynoVal; + }); + } + export class Degrees extends UnaryOp { + constructor({ radians }: { + radians: DynoVal; + }); + } + export class Sin extends UnaryOp { + constructor({ radians }: { + radians: DynoVal; + }); + } + export class Cos extends UnaryOp { + constructor({ radians }: { + radians: DynoVal; + }); + } + export class Tan extends UnaryOp { + constructor({ radians }: { + radians: DynoVal; + }); + } + export class Asin extends UnaryOp { + constructor({ sin }: { + sin: DynoVal; + }); + } + export class Acos extends UnaryOp { + constructor({ cos }: { + cos: DynoVal; + }); + } + export class Atan extends UnaryOp { + constructor({ tan }: { + tan: DynoVal; + }); + } + export class Atan2 extends BinaryOp { + constructor({ y, x }: { + y: DynoVal; + x: DynoVal; + }); + } + export class Sinh extends UnaryOp { + constructor({ x }: { + x: DynoVal; + }); + } + export class Cosh extends UnaryOp { + constructor({ x }: { + x: DynoVal; + }); + } + export class Tanh extends UnaryOp { + constructor({ x }: { + x: DynoVal; + }); + } + export class Asinh extends UnaryOp { + constructor({ x }: { + x: DynoVal; + }); + } + export class Acosh extends UnaryOp { + constructor({ x }: { + x: DynoVal; + }); + } + export class Atanh extends UnaryOp { + constructor({ x }: { + x: DynoVal; + }); + } +} +declare module "dyno" { + export * from "dyno/types"; + export * from "dyno/base"; + export * from "dyno/value"; + export * from "dyno/output"; + export * from "dyno/uniforms"; + export * from "dyno/program"; + export * from "dyno/math"; + export * from "dyno/logic"; + export * from "dyno/util"; + export * from "dyno/splats"; + export * from "dyno/transform"; + export * from "dyno/control"; + export * from "dyno/convert"; + export * from "dyno/texture"; + export * from "dyno/trig"; + export * from "dyno/vecmat"; +} +declare module "SplatEdit" { + import * as THREE from "three"; + import { DynoUniform, type DynoVal, Gsplat } from "dyno"; + export enum SplatEditSdfType { + ALL = "all", + PLANE = "plane", + SPHERE = "sphere", + BOX = "box", + ELLIPSOID = "ellipsoid", + CYLINDER = "cylinder", + CAPSULE = "capsule", + INFINITE_CONE = "infinite_cone" + } + export enum SplatEditRgbaBlendMode { + MULTIPLY = "multiply", + SET_RGB = "set_rgb", + ADD_RGBA = "add_rgba" + } + export type SplatEditSdfOptions = { + type?: SplatEditSdfType; + invert?: boolean; + opacity?: number; + color?: THREE.Color; + displace?: THREE.Vector3; + radius?: number; + }; + export class SplatEditSdf extends THREE.Object3D { + type: SplatEditSdfType; + invert: boolean; + opacity: number; + color: THREE.Color; + displace: THREE.Vector3; + radius: number; + constructor(options?: SplatEditSdfOptions); + } + export type SplatEditOptions = { + name?: string; + rgbaBlendMode?: SplatEditRgbaBlendMode; + sdfSmooth?: number; + softEdge?: number; + invert?: boolean; + sdfs?: SplatEditSdf[]; + }; + export class SplatEdit extends THREE.Object3D { + ordering: number; + rgbaBlendMode: SplatEditRgbaBlendMode; + sdfSmooth: number; + softEdge: number; + invert: boolean; + sdfs: SplatEditSdf[] | null; + static nextOrdering: number; + constructor(options?: SplatEditOptions); + addSdf(sdf: SplatEditSdf): void; + removeSdf(sdf: SplatEditSdf): void; + } + export class SplatEdits { + maxSdfs: number; + numSdfs: number; + sdfData: Uint32Array; + sdfFloatData: Float32Array; + sdfTexture: THREE.DataTexture; + dynoSdfArray: DynoUniform; + maxEdits: number; + numEdits: number; + editData: Uint32Array; + editFloatData: Float32Array; + dynoNumEdits: DynoUniform<"int", "numEdits">; + dynoEdits: DynoUniform<"uvec4", "edits">; + constructor({ maxSdfs, maxEdits }: { + maxSdfs?: number; + maxEdits?: number; + }); + private newSdfTexture; + private newEdits; + private ensureCapacity; + private updateEditData; + private updateEditFloatData; + private encodeEdit; + private updateSdfData; + private updateSdfFloatData; + private encodeSdf; + update(edits: { + edit: SplatEdit; + sdfs: SplatEditSdf[]; + }[]): { + updated: boolean; + dynoUpdated: boolean; + }; + modify(gsplat: DynoVal): DynoVal; + } + export const SdfArray: { + type: "SdfArray"; + }; + export const defineSdfArray: string; + export const defineEdit: string; +} +declare module "SplatGenerator" { + import * as THREE from "three"; + import type { SplatEdit } from "SplatEdit"; + import { type Dyno, DynoFloat, type DynoVal, DynoVec3, DynoVec4, Gsplat } from "dyno"; + export type GsplatGenerator = Dyno<{ + index: "int"; + }, { + gsplat: typeof Gsplat; + }>; + export type GsplatModifier = Dyno<{ + gsplat: typeof Gsplat; + }, { + gsplat: typeof Gsplat; + }>; + export class SplatModifier { + modifier: GsplatModifier; + cache: Map; + constructor(modifier: GsplatModifier); + apply(generator: GsplatGenerator): GsplatGenerator; + } + export class SplatTransformer { + scale: DynoFloat; + rotate: DynoVec4; + translate: DynoVec3; + constructor(); + modify(gsplat: DynoVal): DynoVal; + updateFromMatrix(transform: THREE.Matrix4): boolean; + update(object: THREE.Object3D): boolean; + } + export class SplatGenerator extends THREE.Object3D { + numSplats: number; + generator?: GsplatGenerator; + generatorError?: unknown; + frameUpdate?: ({ object, time, deltaTime, viewToWorld, globalEdits, }: { + object: SplatGenerator; + time: number; + deltaTime: number; + viewToWorld: THREE.Matrix4; + globalEdits: SplatEdit[]; + }) => void; + version: number; + constructor({ numSplats, generator, construct, update, }: { + numSplats?: number; + generator?: GsplatGenerator; + construct?: (object: SplatGenerator) => { + generator?: GsplatGenerator; + numSplats?: number; + frameUpdate?: (object: SplatGenerator) => void; + }; + update?: ({ object, time, deltaTime, viewToWorld, globalEdits, }: { + object: SplatGenerator; + time: number; + deltaTime: number; + viewToWorld: THREE.Matrix4; + globalEdits: SplatEdit[]; + }) => void; + }); + updateVersion(): void; + set needsUpdate(value: boolean); + } +} +declare module "Readback" { + import * as THREE from "three"; + import { type Dyno } from "dyno"; + import { DynoProgram, DynoProgramTemplate } from "dyno/program"; + export type Rgba8Readback = Dyno<{ + index: "int"; + }, { + rgba8: "vec4"; + }>; + export type ReadbackBuffer = ArrayBuffer | Uint8Array | Int8Array | Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array; + export class Readback { + renderer?: THREE.WebGLRenderer; + target?: THREE.WebGLArrayRenderTarget; + capacity: number; + count: number; + constructor({ renderer }?: { + renderer?: THREE.WebGLRenderer; + }); + dispose(): void; + ensureBuffer(count: number, buffer: B): B; + ensureCapacity(capacity: number): void; + prepareProgramMaterial(reader: Rgba8Readback): { + program: DynoProgram; + material: THREE.RawShaderMaterial; + }; + private saveRenderState; + private resetRenderState; + private process; + private read; + render({ reader, count, renderer, }: { + reader: Rgba8Readback; + count: number; + renderer?: THREE.WebGLRenderer; + }): void; + readback({ readback, }: { + readback: B; + }): Promise; + renderReadback({ reader, count, renderer, readback, }: { + reader: Rgba8Readback; + count: number; + renderer?: THREE.WebGLRenderer; + readback: B; + }): Promise; + getTexture(): THREE.DataArrayTexture | undefined; + static programTemplate: DynoProgramTemplate | null; + static readbackProgram: Map; + static geometry: THREE.PlaneGeometry; + static mesh: THREE.Mesh; + static scene: THREE.Scene; + static camera: THREE.Camera; + } +} +declare module "RgbaArray" { + import * as THREE from "three"; + import { type PackedSplats } from "PackedSplats"; + import { Readback, type Rgba8Readback } from "Readback"; + import { DynoUniform, type DynoVal } from "dyno"; + export type RgbaArrayOptions = { + capacity?: number; + array?: Uint8Array; + count?: number; + }; + export class RgbaArray { + capacity: number; + count: number; + array: Uint8Array | null; + readback: Readback | null; + source: THREE.DataArrayTexture | null; + needsUpdate: boolean; + dyno: DynoUniform; + constructor(options?: RgbaArrayOptions); + dispose(): void; + ensureCapacity(capacity: number): Uint8Array; + getTexture(): THREE.DataArrayTexture; + private maybeUpdateSource; + render({ reader, count, renderer, }: { + reader: Rgba8Readback; + count: number; + renderer: THREE.WebGLRenderer; + }): void; + fromPackedSplats({ packedSplats, base, count, renderer, }: { + packedSplats: PackedSplats; + base: number; + count: number; + renderer: THREE.WebGLRenderer; + }): this; + read(): Promise; + private static emptySource; + static getEmpty(): THREE.DataArrayTexture; + private static dynos; + private static makeDynos; + } + export const TRgbaArray: { + type: "RgbaArray"; + }; + export const defineRgbaArray: string; + export function readRgbaArray(rgba: DynoVal, index: DynoVal<"int">): DynoVal<"vec4">; +} +declare module "SplatSkinning" { + import * as THREE from "three"; + import type { SplatMesh } from "SplatMesh"; + import { DynoUniform, type DynoVal, Gsplat } from "dyno"; + export type SplatSkinningOptions = { + mesh: SplatMesh; + numSplats?: number; + numBones?: number; + }; + export class SplatSkinning { + mesh: SplatMesh; + numSplats: number; + skinData: Uint16Array; + skinTexture: THREE.DataArrayTexture; + numBones: number; + boneData: Float32Array; + boneTexture: THREE.DataTexture; + uniform: DynoUniform; + constructor(options: SplatSkinningOptions); + modify(gsplat: DynoVal): DynoVal; + setRestQuatPos(boneIndex: number, quat: THREE.Quaternion, pos: THREE.Vector3): void; + setBoneQuatPos(boneIndex: number, quat: THREE.Quaternion, pos: THREE.Vector3): void; + setSplatBones(splatIndex: number, boneIndices: THREE.Vector4, weights: THREE.Vector4): void; + updateBones(): void; + } + export const GsplatSkinning: { + type: "GsplatSkinning"; + }; + export const defineGsplatSkinning: string; + export const defineApplyGsplatSkinning: string; +} +declare module "SplatMesh" { + import * as THREE from "three"; + import { PackedSplats } from "PackedSplats"; + import { type RgbaArray } from "RgbaArray"; + import { SplatEdit } from "SplatEdit"; + import { type GsplatModifier, SplatGenerator, SplatTransformer } from "SplatGenerator"; + import type { SplatFileType } from "SplatLoader"; + import type { SplatSkinning } from "SplatSkinning"; + import { DynoFloat, DynoUsampler2DArray, type DynoVal, DynoVec4, Gsplat } from "dyno"; + export type SplatMeshOptions = { + url?: string; + fileBytes?: Uint8Array | ArrayBuffer; + fileType?: SplatFileType; + packedSplats?: PackedSplats; + maxSplats?: number; + constructSplats?: (splats: PackedSplats) => Promise | void; + onLoad?: (mesh: SplatMesh) => Promise | void; + editable?: boolean; + onFrame?: ({ mesh, time, deltaTime, }: { + mesh: SplatMesh; + time: number; + deltaTime: number; + }) => void; + objectModifier?: GsplatModifier; + worldModifier?: GsplatModifier; + }; + export type SplatMeshContext = { + transform: SplatTransformer; + viewToWorld: SplatTransformer; + worldToView: SplatTransformer; + viewToObject: SplatTransformer; + recolor: DynoVec4; + time: DynoFloat; + deltaTime: DynoFloat; + }; + export class SplatMesh extends SplatGenerator { + initialized: Promise; + isInitialized: boolean; + packedSplats: PackedSplats; + recolor: THREE.Color; + opacity: number; + context: SplatMeshContext; + onFrame?: ({ mesh, time, deltaTime, }: { + mesh: SplatMesh; + time: number; + deltaTime: number; + }) => void; + objectModifier?: GsplatModifier; + worldModifier?: GsplatModifier; + enableViewToObject: boolean; + enableViewToWorld: boolean; + enableWorldToView: boolean; + skinning: SplatSkinning | null; + edits: SplatEdit[] | null; + editable: boolean; + private rgbaDisplaceEdits; + splatRgba: RgbaArray | null; + maxSh: number; + constructor(options?: SplatMeshOptions); + asyncInitialize(options: SplatMeshOptions): Promise; + static staticInitialized: Promise; + static isStaticInitialized: boolean; + static dynoTime: DynoFloat<"value">; + static staticInitialize(): Promise; + pushSplat(center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color): void; + forEachSplat(callback: (index: number, center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color) => void): void; + dispose(): void; + constructGenerator({ transform, viewToObject, recolor }: SplatMeshContext): void; + updateGenerator(): void; + update({ time, viewToWorld, deltaTime, globalEdits, }: { + time: number; + viewToWorld: THREE.Matrix4; + deltaTime: number; + globalEdits: SplatEdit[]; + }): void; + raycast(raycaster: THREE.Raycaster, intersects: { + distance: number; + point: THREE.Vector3; + object: THREE.Object3D; + }[]): void; + private ensureShTextures; + } + export function evaluateSH1(gsplat: DynoVal, sh1: DynoUsampler2DArray<"sh1", THREE.DataArrayTexture>, viewDir: DynoVal<"vec3">): DynoVal<"vec3">; + export function evaluateSH2(gsplat: DynoVal, sh2: DynoVal<"usampler2DArray">, viewDir: DynoVal<"vec3">): DynoVal<"vec3">; + export function evaluateSH3(gsplat: DynoVal, sh3: DynoVal<"usampler2DArray">, viewDir: DynoVal<"vec3">): DynoVal<"vec3">; +} +declare module "ply" { + export type PlyPropertyType = "char" | "uchar" | "short" | "ushort" | "int" | "uint" | "float" | "double"; + export type PlyElement = { + name: string; + count: number; + properties: Record; + }; + export type PlyProperty = { + isList: boolean; + type: PlyPropertyType; + countType?: PlyPropertyType; + }; + export type SplatCallback = (index: number, x: number, y: number, z: number, scaleX: number, scaleY: number, scaleZ: number, quatX: number, quatY: number, quatZ: number, quatW: number, opacity: number, r: number, g: number, b: number) => void; + export type SplatShCallback = (index: number, sh1: Float32Array, sh2?: Float32Array, sh3?: Float32Array) => void; + export class PlyReader { + fileBytes: Uint8Array; + header: string; + littleEndian: boolean; + elements: Record; + comments: string[]; + data: DataView | null; + static defaultPointScale: number; + numSplats: number; + constructor({ fileBytes }: { + fileBytes: Uint8Array | ArrayBuffer; + }); + parseHeader(): Promise; + parseData(elementCallback: (element: PlyElement) => null | ((index: number, item: Record) => void)): void; + parseSplats(splatCallback: SplatCallback, shCallback?: SplatShCallback): void; + injectRgba(rgba: Uint8Array): void; + } + export const SH_C0 = 0.28209479177387814; +} +declare module "splatWorker" { + export class SplatWorker { + worker: Worker; + messages: Record void; + reject: (reason?: unknown) => void; + }>; + messageIdNext: number; + constructor(); + makeMessageId(): number; + makeMessagePromiseId(): { + id: number; + promise: Promise; + }; + onMessage(event: MessageEvent): void; + call(name: string, args: unknown): Promise; + } + export function setWorkerPool(count?: number): void; + export function allocWorker(): Promise; + export function freeWorker(worker: SplatWorker): void; + export function withWorker(callback: (worker: SplatWorker) => Promise): Promise; +} +declare module "SplatLoader" { + import { FileLoader, Loader, type LoadingManager } from "three"; + import { PackedSplats } from "PackedSplats"; + import { SplatMesh } from "SplatMesh"; + export class SplatLoader extends Loader { + fileLoader: FileLoader; + fileType?: SplatFileType; + constructor(manager?: LoadingManager); + load(url: string, onLoad?: (decoded: PackedSplats) => void, onProgress?: (event: ProgressEvent) => void, onError?: (error: unknown) => void): void; + loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise; + parse(packedSplats: PackedSplats): SplatMesh; + } + export enum SplatFileType { + PLY = "ply", + WLG0 = "wlg0", + SPZ = "spz", + SPLAT = "splat", + KSPLAT = "ksplat" + } + export function getSplatFileType(fileBytes: Uint8Array): SplatFileType | undefined; + export function getFileExtension(pathOrUrl: string): string; + export function unpackSplats({ input, fileType, pathOrUrl, }: { + input: Uint8Array | ArrayBuffer; + fileType?: SplatFileType; + pathOrUrl?: string; + }): Promise<{ + packedArray: Uint32Array; + numSplats: number; + extra?: Record; + }>; +} +declare module "PackedSplats" { + import * as THREE from "three"; + import type { GsplatGenerator } from "SplatGenerator"; + import { type SplatFileType } from "SplatLoader"; + import { DynoProgram, DynoProgramTemplate, DynoUniform } from "dyno"; + import { TPackedSplats } from "dyno/splats"; + export type PackedSplatsOptions = { + url?: string; + fileBytes?: Uint8Array | ArrayBuffer; + fileType?: SplatFileType; + maxSplats?: number; + packedArray?: Uint32Array; + numSplats?: number; + construct?: (splats: PackedSplats) => Promise | void; + extra?: Record; + }; + export class PackedSplats { + maxSplats: number; + numSplats: number; + packedArray: Uint32Array | null; + extra: Record; + initialized: Promise; + isInitialized: boolean; + target: THREE.WebGLArrayRenderTarget | null; + source: THREE.DataArrayTexture | null; + needsUpdate: boolean; + dyno: DynoUniform; + constructor(options?: PackedSplatsOptions); + reinitialize(options: PackedSplatsOptions): void; + initialize(options: PackedSplatsOptions): void; + asyncInitialize(options: PackedSplatsOptions): Promise; + dispose(): void; + ensureSplats(numSplats: number): Uint32Array; + ensureSplatsSh(level: number, numSplats: number): Uint32Array; + getSplat(index: number): { + center: THREE.Vector3; + scales: THREE.Vector3; + quaternion: THREE.Quaternion; + opacity: number; + color: THREE.Color; + }; + setSplat(index: number, center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color): void; + pushSplat(center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color): void; + forEachSplat(callback: (index: number, center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color) => void): void; + ensureGenerate(maxSplats: number): boolean; + generateMapping(splatCounts: number[]): { + maxSplats: number; + mapping: { + base: number; + count: number; + }[]; + }; + getTexture(): THREE.DataArrayTexture; + private maybeUpdateSource; + private static emptySource; + static getEmpty(): THREE.DataArrayTexture; + prepareProgramMaterial(generator: GsplatGenerator): { + program: DynoProgram; + material: THREE.RawShaderMaterial; + }; + private saveRenderState; + private resetRenderState; + generate({ generator, base, count, renderer, }: { + generator: GsplatGenerator; + base: number; + count: number; + renderer: THREE.WebGLRenderer; + }): { + nextBase: number; + }; + static programTemplate: DynoProgramTemplate | null; + static generatorProgram: Map; + static geometry: THREE.PlaneGeometry; + static mesh: THREE.Mesh; + static scene: THREE.Scene; + static camera: THREE.Camera; + } + export const dynoPackedSplats: (packedSplats?: PackedSplats) => DynoPackedSplats; + export class DynoPackedSplats extends DynoUniform { + packedSplats?: PackedSplats; + constructor({ packedSplats }?: { + packedSplats?: PackedSplats; + }); + } +} +declare module "SplatAccumulator" { + import * as THREE from "three"; + import { PackedSplats } from "PackedSplats"; + import type { GsplatGenerator, SplatGenerator, SplatModifier } from "SplatGenerator"; + export type GeneratorMapping = { + node: SplatGenerator; + generator?: GsplatGenerator; + version: number; + base: number; + count: number; + }; + export class SplatAccumulator { + splats: PackedSplats; + toWorld: THREE.Matrix4; + mapping: GeneratorMapping[]; + refCount: number; + splatsVersion: number; + mappingVersion: number; + ensureGenerate(maxSplats: number): void; + generateSplats({ renderer, modifier, generators, forceUpdate, originToWorld, }: { + renderer: THREE.WebGLRenderer; + modifier: SplatModifier; + generators: GeneratorMapping[]; + forceUpdate?: boolean; + originToWorld: THREE.Matrix4; + }): boolean; + hasCorrespondence(other: SplatAccumulator): boolean; + } +} +declare module "SplatGeometry" { + import * as THREE from "three"; + export class SplatGeometry extends THREE.InstancedBufferGeometry { + ordering: Uint32Array; + attribute: THREE.InstancedBufferAttribute; + constructor(ordering: Uint32Array, activeSplats: number); + update(ordering: Uint32Array, activeSplats: number): void; + } +} +declare module "ForgeViewpoint" { + import * as THREE from "three"; + import type { ForgeRenderer } from "ForgeRenderer"; + import type { SplatAccumulator } from "SplatAccumulator"; + import { SplatGeometry } from "SplatGeometry"; + export type ForgeViewpointOptions = { + autoUpdate?: boolean; + camera?: THREE.Camera; + viewToWorld?: THREE.Matrix4; + target?: { + width: number; + height: number; + doubleBuffer?: boolean; + superXY?: number; + }; + onTextureUpdated?: (texture: THREE.Texture) => void; + sortRadial?: boolean; + sortDistance?: number; + sortCoorient?: boolean; + depthBias?: number; + sort360?: boolean; + }; + export class ForgeViewpoint { + forge: ForgeRenderer; + autoUpdate: boolean; + camera?: THREE.Camera; + viewToWorld: THREE.Matrix4; + lastTime: number | null; + target?: THREE.WebGLRenderTarget; + private back?; + onTextureUpdated?: (texture: THREE.Texture) => void; + encodeLinear: boolean; + superXY: number; + private superPixels?; + private pixels?; + sortRadial: boolean; + sortDistance?: number; + sortCoorient?: boolean; + depthBias?: number; + sort360?: boolean; + display: { + accumulator: SplatAccumulator; + viewToWorld: THREE.Matrix4; + geometry: SplatGeometry; + } | null; + private sorting; + private pending; + private sortingCheck; + private readback; + private orderingFreelist; + constructor(options: ForgeViewpointOptions & { + forge: ForgeRenderer; + }); + dispose(): void; + setAutoUpdate(autoUpdate: boolean): void; + prepare({ scene, camera, viewToWorld, update, forceOrigin, }: { + scene: THREE.Scene; + camera?: THREE.Camera; + viewToWorld?: THREE.Matrix4; + update?: boolean; + forceOrigin?: boolean; + }): Promise; + renderTarget({ scene, camera, }: { + scene: THREE.Scene; + camera?: THREE.Camera; + }): void; + readTarget(): Promise; + prepareRenderPixels({ scene, camera, viewToWorld, update, forceOrigin, }: { + scene: THREE.Scene; + camera?: THREE.Camera; + viewToWorld?: THREE.Matrix4; + update?: boolean; + forceOrigin?: boolean; + }): Promise>; + autoPoll({ accumulator }: { + accumulator?: SplatAccumulator; + }): void; + private driveSort; + private sortUpdate; + private updateDisplay; + static EMPTY_TEXTURE: THREE.Texture; + private static dynos; + private static makeSorter; + } +} +declare module "shaders" { + export function getShaders(): Record; +} +declare module "ForgeRenderer" { + import * as THREE from "three"; + import { ForgeViewpoint, type ForgeViewpointOptions } from "ForgeViewpoint"; + import { RgbaArray } from "RgbaArray"; + import { SplatAccumulator } from "SplatAccumulator"; + import { SplatGenerator } from "SplatGenerator"; + export type ForgeRendererOptions = { + renderer: THREE.WebGLRenderer; + clock?: THREE.Clock; + autoUpdate?: boolean; + preUpdate?: boolean; + originDistance?: number; + maxStdDev?: number; + enable2DGS?: boolean; + preBlurAmount?: number; + blurAmount?: number; + falloff?: number; + clipXY?: number; + view?: ForgeViewpointOptions; + }; + export class ForgeRenderer extends THREE.Mesh { + renderer: THREE.WebGLRenderer; + material: THREE.ShaderMaterial; + uniforms: ReturnType; + autoUpdate: boolean; + preUpdate: boolean; + originDistance: number; + maxStdDev: number; + enable2DGS: boolean; + preBlurAmount: number; + blurAmount: number; + falloff: number; + clipXY: number; + time?: number; + deltaTime?: number; + clock: THREE.Clock; + active: SplatAccumulator; + private freeAccumulators; + private accumulatorCount; + defaultView: ForgeViewpoint; + autoViewpoints: ForgeViewpoint[]; + private rotateToAccumulator; + private translateToAccumulator; + private modifier; + private lastFrame; + private lastUpdateTime; + private defaultCameras; + viewpoint: ForgeViewpoint; + private pendingUpdate; + private envViewpoint; + private static cubeRender; + private static pmrem; + constructor(options: ForgeRendererOptions); + static makeUniforms(): { + renderSize: { + value: THREE.Vector2; + }; + numSplats: { + value: number; + }; + renderToViewQuat: { + value: THREE.Quaternion; + }; + renderToViewPos: { + value: THREE.Vector3; + }; + maxStdDev: { + value: number; + }; + enable2DGS: { + value: boolean; + }; + preBlurAmount: { + value: number; + }; + blurAmount: { + value: number; + }; + falloff: { + value: number; + }; + clipXY: { + value: number; + }; + packedSplats: { + type: string; + value: THREE.DataArrayTexture; + }; + time: { + value: number; + }; + deltaTime: { + value: number; + }; + encodeLinear: { + value: boolean; + }; + debugFlag: { + value: boolean; + }; + }; + private canAllocAccumulator; + private maybeAllocAccumulator; + releaseAccumulator(accumulator: SplatAccumulator): void; + newViewpoint(options: ForgeViewpointOptions): ForgeViewpoint; + onBeforeRender(renderer: THREE.WebGLRenderer, scene: THREE.Scene, camera: THREE.Camera): void; + prepareViewpoint(viewpoint?: ForgeViewpoint): void; + update({ scene, viewToWorld, }: { + scene: THREE.Scene; + viewToWorld?: THREE.Matrix4; + }): void; + updateInternal({ scene, originToWorld, viewToWorld, }: { + scene: THREE.Scene; + originToWorld?: THREE.Matrix4; + viewToWorld?: THREE.Matrix4; + }): boolean; + private compileScene; + renderEnvMap({ renderer, scene, worldCenter, size, near, far, hideObjects, update, }: { + renderer?: THREE.WebGLRenderer; + scene: THREE.Scene; + worldCenter: THREE.Vector3; + size?: number; + near?: number; + far?: number; + hideObjects?: THREE.Object3D[]; + update?: boolean; + }): Promise; + recurseSetEnvMap(root: THREE.Object3D, envMap: THREE.Texture): void; + getRgba({ generator, rgba, }: { + generator: SplatGenerator; + rgba?: RgbaArray; + }): RgbaArray; + readRgba({ generator, rgba, }: { + generator: SplatGenerator; + rgba?: RgbaArray; + }): Promise; + } +} +declare module "controls" { + import * as THREE from "three"; + export class ForgeControls { + fpsMovement: FpsMovement; + pointerControls: PointerControls; + lastTime: number; + constructor({ canvas }: { + canvas: HTMLCanvasElement; + }); + update(control: THREE.Object3D): void; + } + export class FpsMovement { + moveSpeed: number; + rollSpeed: number; + stickThreshold: number; + rotateSpeed: number; + keycodeMoveMapping: { + [key: string]: THREE.Vector3; + }; + keycodeRotateMapping: { + [key: string]: THREE.Vector3; + }; + gamepadMapping: { + [button: number]: "shift" | "ctrl" | "rollLeft" | "rollRight"; + }; + capsMultiplier: number; + shiftMultiplier: number; + ctrlMultiplier: number; + xr?: THREE.WebXRManager; + enable: boolean; + keydown: { + [key: string]: boolean; + }; + keycode: { + [key: string]: boolean; + }; + constructor({ moveSpeed, rollSpeed, stickThreshold, rotateSpeed, keycodeMoveMapping, keycodeRotateMapping, gamepadMapping, capsMultiplier, shiftMultiplier, ctrlMultiplier, xr, }?: { + moveSpeed?: number; + rollSpeed?: number; + stickThreshold?: number; + rotateSpeed?: number; + keycodeMoveMapping?: { + [key: string]: THREE.Vector3; + }; + keycodeRotateMapping?: { + [key: string]: THREE.Vector3; + }; + gamepadMapping?: { + [button: number]: "shift" | "ctrl" | "rollLeft" | "rollRight"; + }; + capsMultiplier?: number; + shiftMultiplier?: number; + ctrlMultiplier?: number; + xr?: THREE.WebXRManager; + }); + update(deltaTime: number, control: THREE.Object3D): void; + } + type PointerState = { + initial: THREE.Vector2; + last: THREE.Vector2; + position: THREE.Vector2; + pointerId: number; + button?: number; + timeStamp: DOMHighResTimeStamp; + }; + export class PointerControls { + canvas: HTMLCanvasElement; + rotateSpeed: number; + slideSpeed: number; + scrollSpeed: number; + reverseRotate: boolean; + reverseSlide: boolean; + reverseSwipe: boolean; + reverseScroll: boolean; + moveInertia: number; + rotateInertia: number; + enable: boolean; + doublePress: ({ position, intervalMs, }: { + position: THREE.Vector2; + intervalMs: number; + }) => void; + doublePressLimitMs: number; + doublePressDistance: number; + lastUp: { + position: THREE.Vector2; + time: number; + } | null; + rotating: PointerState | null; + sliding: PointerState | null; + dualPress: boolean; + scroll: THREE.Vector3; + rotateVelocity: THREE.Vector3; + moveVelocity: THREE.Vector3; + constructor({ canvas, rotateSpeed, slideSpeed, scrollSpeed, reverseRotate, reverseSlide, reverseSwipe, reverseScroll, moveInertia, rotateInertia, doublePress, }: { + canvas: HTMLCanvasElement; + rotateSpeed?: number; + slideSpeed?: number; + scrollSpeed?: number; + reverseRotate?: boolean; + reverseSlide?: boolean; + reverseSwipe?: boolean; + reverseScroll?: boolean; + moveInertia?: number; + rotateInertia?: number; + doublePress?: ({ position, intervalMs, }: { + position: THREE.Vector2; + intervalMs: number; + }) => void; + }); + getPointerPosition(event: PointerEvent): THREE.Vector2; + update(deltaTime: number, control: THREE.Object3D): void; + } +} +declare module "generators/static" { + import * as THREE from "three"; + import { SplatGenerator } from "SplatGenerator"; + export function staticBox({ box, cells, dotScale, color, opacity, }: { + box: THREE.Box3; + cells: THREE.Vector3; + dotScale: number; + color?: THREE.Color; + opacity?: number; + }): SplatGenerator; +} +declare module "generators/snow" { + import * as THREE from "three"; + import { SplatGenerator } from "SplatGenerator"; + export const DEFAULT_SNOW: { + box: THREE.Box3; + density: number; + fallDirection: THREE.Vector3; + fallVelocity: number; + wanderScale: number; + wanderVariance: number; + color1: THREE.Color; + color2: THREE.Color; + minScale: number; + maxScale: number; + anisoScale: THREE.Vector3; + }; + export const DEFAULT_RAIN: { + box: THREE.Box3; + density: number; + fallDirection: THREE.Vector3; + fallVelocity: number; + wanderScale: number; + wanderVariance: number; + color1: THREE.Color; + color2: THREE.Color; + minScale: number; + maxScale: number; + anisoScale: THREE.Vector3; + }; + export function snowBox({ box, minY, numSplats, density, anisoScale, minScale, maxScale, fallDirection, fallVelocity, wanderScale, wanderVariance, color1, color2, opacity, onFrame, }: { + box?: THREE.Box3; + minY?: number; + numSplats?: number; + density?: number; + anisoScale?: THREE.Vector3; + minScale?: number; + maxScale?: number; + fallDirection?: THREE.Vector3; + fallVelocity?: number; + wanderScale?: number; + wanderVariance?: number; + color1?: THREE.Color; + color2?: THREE.Color; + opacity?: number; + onFrame?: ({ object, time, deltaTime, }: { + object: SplatGenerator; + time: number; + deltaTime: number; + }) => void; + }): { + snow: SplatGenerator; + min: import("dyno").DynoVec3; + max: import("dyno").DynoVec3; + minY: import("dyno").DynoFloat; + color1: import("dyno").DynoVec3; + color2: import("dyno").DynoVec3; + opacity: import("dyno").DynoFloat; + fallVelocity: import("dyno").DynoFloat; + wanderVariance: import("dyno").DynoFloat; + wanderScale: import("dyno").DynoFloat; + fallDirection: import("dyno").DynoVec3; + minScale: import("dyno").DynoFloat; + maxScale: import("dyno").DynoFloat; + anisoScale: import("dyno").DynoVec3; + }; + export type SNOW_RESULT_TYPE = ReturnType; +} +declare module "generators" { + export * from "generators/static"; + export * from "generators/snow"; +} +declare module "hands" { + import { type Object3D, Quaternion, Vector3, type WebXRManager } from "three"; + import { SplatMesh } from "SplatMesh"; + export enum JointEnum { + w = "wrist", + t0 = "thumb-metacarpal", + t1 = "thumb-phalanx-proximal", + t2 = "thumb-phalanx-distal", + t3 = "thumb-tip", + i0 = "index-finger-metacarpal", + i1 = "index-finger-phalanx-proximal", + i2 = "index-finger-phalanx-intermediate", + i3 = "index-finger-phalanx-distal", + i4 = "index-finger-tip", + m0 = "middle-finger-metacarpal", + m1 = "middle-finger-phalanx-proximal", + m2 = "middle-finger-phalanx-intermediate", + m3 = "middle-finger-phalanx-distal", + m4 = "middle-finger-tip", + r0 = "ring-finger-metacarpal", + r1 = "ring-finger-phalanx-proximal", + r2 = "ring-finger-phalanx-intermediate", + r3 = "ring-finger-phalanx-distal", + r4 = "ring-finger-tip", + p0 = "pinky-finger-metacarpal", + p1 = "pinky-finger-phalanx-proximal", + p2 = "pinky-finger-phalanx-intermediate", + p3 = "pinky-finger-phalanx-distal", + p4 = "pinky-finger-tip" + } + export type JointId = keyof typeof JointEnum; + export const JOINT_IDS: JointId[]; + export const NUM_JOINTS: number; + export const JOINT_INDEX: { + [key in JointId]: number; + }; + export const JOINT_RADIUS: { + [key in JointId]: number; + }; + export const JOINT_SEGMENTS: JointId[][]; + export const JOINT_SEGMENT_STEPS: number[][]; + export const JOINT_TIPS: JointId[]; + export const FINGER_TIPS: JointId[]; + export enum Hand { + left = "left", + right = "right" + } + export const HANDS: Hand[]; + export type Joint = { + position: Vector3; + quaternion: Quaternion; + radius: number; + }; + export type HandJoints = { + [key in JointId]?: Joint; + }; + export type HandsJoints = { + [key in Hand]?: HandJoints; + }; + export class XrHands { + hands: HandsJoints; + last: HandsJoints; + values: Record; + tests: Record; + lastTests: Record; + updated: boolean; + update({ xr, xrFrame }: { + xr: WebXRManager; + xrFrame: XRFrame; + }): void; + makeGhostMesh(): SplatMesh; + distance(handA: Hand, jointA: JointId, handB: Hand, jointB: JointId, last?: boolean): number; + separation(handA: Hand, jointA: JointId, handB: Hand, jointB: JointId, last?: boolean): number; + touching(handA: Hand, jointA: JointId, handB: Hand, jointB: JointId, last?: boolean): number; + allTipsTouching(hand: Hand, last?: boolean): number; + triTipsTouching(hand: Hand, last?: boolean): number; + } + export class HandMovement { + xrHands: XrHands; + control: Object3D; + moveInertia: number; + rotateInertia: number; + lastGrip: { + [key in Hand]?: Vector3; + }; + lastPivot: Vector3; + rotateVelocity: number; + velocity: Vector3; + constructor({ xrHands, control, moveInertia, rotateInertia, }: { + xrHands: XrHands; + control: Object3D; + moveInertia?: number; + rotateInertia?: number; + }); + update(deltaTime: number): void; + } +} +declare module "spz" { + import { GunzipReader } from "utils"; + export class SpzReader { + fileBytes: Uint8Array; + reader: GunzipReader; + version: number; + numSplats: number; + shDegree: number; + fractionalBits: number; + flags: number; + flagAntiAlias: boolean; + reserved: number; + parsed: boolean; + constructor({ fileBytes }: { + fileBytes: Uint8Array | ArrayBuffer; + }); + parseSplats(centerCallback: (index: number, x: number, y: number, z: number) => void, alphaCallback: (index: number, alpha: number) => void, rgbCallback: (index: number, r: number, g: number, b: number) => void, scalesCallback: (index: number, scaleX: number, scaleY: number, scaleZ: number) => void, quatCallback: (index: number, quatX: number, quatY: number, quatZ: number, quatW: number) => void, shCallback?: (index: number, sh1: Float32Array, sh2?: Float32Array, sh3?: Float32Array) => void): void; + } +} +declare module "splatConstructors" { + import * as THREE from "three"; + import { PackedSplats } from "PackedSplats"; + import { SplatMesh } from "SplatMesh"; + export function constructGrid({ splats, extents, stepSize, pointRadius, pointShadowScale, opacity, color, }: { + splats: PackedSplats; + extents: THREE.Box3; + stepSize?: number; + pointRadius?: number; + pointShadowScale?: number; + opacity?: number; + color?: THREE.Color | ((color: THREE.Color, point: THREE.Vector3) => void); + }): void; + export function constructAxes({ splats, scale, axisRadius, axisShadowScale, origins, }: { + splats: PackedSplats; + scale?: number; + axisRadius?: number; + axisShadowScale?: number; + origins?: THREE.Vector3[]; + }): void; + export function constructSpherePoints({ splats, origin, radius, maxDepth, filter, pointRadius, pointThickness, color, }: { + splats: PackedSplats; + origin?: THREE.Vector3; + radius?: number; + maxDepth?: number; + filter?: ((point: THREE.Vector3) => boolean) | null; + pointRadius?: number; + pointThickness?: number; + color?: THREE.Color | ((color: THREE.Color, point: THREE.Vector3) => void); + }): void; + export function textSplats({ text, font, fontSize, color, rgb, dotRadius, textAlign, lineHeight, }: { + text: string; + font?: string; + fontSize?: number; + color?: THREE.Color; + rgb?: THREE.Color; + dotRadius?: number; + textAlign?: "left" | "center" | "right" | "start" | "end"; + lineHeight?: number; + }): SplatMesh; + export function imageSplats({ url, dotRadius, subXY, forEachSplat, }: { + url: string; + dotRadius?: number; + subXY?: number; + forEachSplat?: (width: number, height: number, index: number, center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color) => number | null; + }): SplatMesh; +} +declare module "vrButton" { + import type * as THREE from "three"; + export class VRButton { + static createButton(renderer: THREE.WebGLRenderer, sessionInit?: XRSessionInit): HTMLElement | null; + static registerSessionGrantedListener(): null | undefined; + static xrSessionIsGranted: boolean; + } +} +declare module "index" { + export { ForgeRenderer, type ForgeRendererOptions } from "ForgeRenderer"; + export { ForgeViewpoint, type ForgeViewpointOptions } from "ForgeViewpoint"; + export * as dyno from "dyno"; + export { SplatLoader, unpackSplats, SplatFileType, getSplatFileType, } from "SplatLoader"; + export { PlyReader } from "ply"; + export { SpzReader } from "spz"; + export { PackedSplats, type PackedSplatsOptions } from "PackedSplats"; + export { SplatGenerator, type GsplatGenerator, SplatModifier, type GsplatModifier, SplatTransformer, } from "SplatGenerator"; + export { SplatAccumulator, type GeneratorMapping } from "SplatAccumulator"; + export { Readback, type Rgba8Readback, type ReadbackBuffer } from "Readback"; + export { SplatMesh, type SplatMeshOptions, type SplatMeshContext, } from "SplatMesh"; + export { SplatSkinning, type SplatSkinningOptions } from "SplatSkinning"; + export { SplatEdit, type SplatEditOptions, SplatEditSdf, type SplatEditSdfOptions, SplatEditSdfType, SplatEditRgbaBlendMode, SplatEdits, } from "SplatEdit"; + export { constructGrid, constructAxes, constructSpherePoints, imageSplats, textSplats, } from "splatConstructors"; + export * as generators from "generators"; + export { VRButton } from "vrButton"; + export { type JointId, JointEnum, JOINT_IDS, NUM_JOINTS, JOINT_INDEX, JOINT_RADIUS, JOINT_SEGMENTS, JOINT_SEGMENT_STEPS, JOINT_TIPS, FINGER_TIPS, Hand, HANDS, type Joint, type HandJoints, type HandsJoints, XrHands, HandMovement, } from "hands"; + export { ForgeControls, FpsMovement, PointerControls } from "controls"; + export { isMobile, isAndroid, isOculus, flipPixels, pixelsToPngUrl, toHalf, fromHalf, floatToUint8, floatToSint8, Uint8ToFloat, Sint8ToFloat, setPackedSplat, unpackSplat, } from "utils"; + export * as utils from "utils"; +} +declare module "worker" { } diff --git a/dist/forge.module.js b/dist/forge.module.js new file mode 100644 index 0000000..afb6570 --- /dev/null +++ b/dist/forge.module.js @@ -0,0 +1,12055 @@ +import * as THREE from "three"; +import { Loader, FileLoader, Quaternion, Vector3, Color, Matrix4 } from "three"; +let wasm; +function addToExternrefTable0(obj) { + const idx = wasm.__externref_table_alloc(); + wasm.__wbindgen_export_2.set(idx, obj); + return idx; +} +function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + const idx = addToExternrefTable0(e); + wasm.__wbindgen_exn_store(idx); + } +} +function debugString(val) { + const type = typeof val; + if (type == "number" || type == "boolean" || val == null) { + return `${val}`; + } + if (type == "string") { + return `"${val}"`; + } + if (type == "symbol") { + const description = val.description; + if (description == null) { + return "Symbol"; + } else { + return `Symbol(${description})`; + } + } + if (type == "function") { + const name = val.name; + if (typeof name == "string" && name.length > 0) { + return `Function(${name})`; + } else { + return "Function"; + } + } + if (Array.isArray(val)) { + const length2 = val.length; + let debug = "["; + if (length2 > 0) { + debug += debugString(val[0]); + } + for (let i = 1; i < length2; i++) { + debug += ", " + debugString(val[i]); + } + debug += "]"; + return debug; + } + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches && builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + return toString.call(val); + } + if (className == "Object") { + try { + return "Object(" + JSON.stringify(val) + ")"; + } catch (_) { + return "Object"; + } + } + if (val instanceof Error) { + return `${val.name}: ${val.message} +${val.stack}`; + } + return className; +} +let WASM_VECTOR_LEN = 0; +let cachedUint8ArrayMemory0 = null; +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} +const cachedTextEncoder = typeof TextEncoder !== "undefined" ? new TextEncoder("utf-8") : { encode: () => { + throw Error("TextEncoder not available"); +} }; +const encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} : function(arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}; +function passStringToWasm0(arg, malloc, realloc) { + if (realloc === void 0) { + const buf = cachedTextEncoder.encode(arg); + const ptr2 = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr2; + } + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + const mem = getUint8ArrayMemory0(); + let offset = 0; + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 127) break; + mem[ptr + offset] = code; + } + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + WASM_VECTOR_LEN = offset; + return ptr; +} +let cachedDataViewMemory0 = null; +function getDataViewMemory0() { + if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) { + cachedDataViewMemory0 = new DataView(wasm.memory.buffer); + } + return cachedDataViewMemory0; +} +const cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) : { decode: () => { + throw Error("TextDecoder not available"); +} }; +if (typeof TextDecoder !== "undefined") { + cachedTextDecoder.decode(); +} +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} +function raycast_splats(origin_x, origin_y, origin_z, dir_x, dir_y, dir_z, near, far, num_splats, packed_splats, raycast_ellipsoid) { + const ret = wasm.raycast_splats(origin_x, origin_y, origin_z, dir_x, dir_y, dir_z, near, far, num_splats, packed_splats, raycast_ellipsoid); + return ret; +} +async function __wbg_load(module, imports) { + if (typeof Response === "function" && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === "function") { + try { + return await WebAssembly.instantiateStreaming(module, imports); + } catch (e) { + if (module.headers.get("Content-Type") != "application/wasm") { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + } else { + throw e; + } + } + } + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + } else { + const instance = await WebAssembly.instantiate(module, imports); + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + } else { + return instance; + } + } +} +function __wbg_get_imports() { + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbg_buffer_09165b52af8c5237 = function(arg0) { + const ret = arg0.buffer; + return ret; + }; + imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) { + const ret = arg0.buffer; + return ret; + }; + imports.wbg.__wbg_get_b9b93047fe3cf45b = function(arg0, arg1) { + const ret = arg0[arg1 >>> 0]; + return ret; + }; + imports.wbg.__wbg_instanceof_Uint8Array_17156bcf118086a9 = function(arg0) { + let result; + try { + result = arg0 instanceof Uint8Array; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_length_3b4f022188ae8db6 = function(arg0) { + const ret = arg0.length; + return ret; + }; + imports.wbg.__wbg_length_6ca527665d89694d = function(arg0) { + const ret = arg0.length; + return ret; + }; + imports.wbg.__wbg_length_8cfd2c6409af88ad = function(arg0) { + const ret = arg0.length; + return ret; + }; + imports.wbg.__wbg_length_a446193dc22c12f8 = function(arg0) { + const ret = arg0.length; + return ret; + }; + imports.wbg.__wbg_length_e2d2a49132c1b256 = function(arg0) { + const ret = arg0.length; + return ret; + }; + imports.wbg.__wbg_new_405e22f390576ce2 = function() { + const ret = new Object(); + return ret; + }; + imports.wbg.__wbg_new_9fee97a409b32b68 = function(arg0) { + const ret = new Uint16Array(arg0); + return ret; + }; + imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) { + const ret = new Uint8Array(arg0); + return ret; + }; + imports.wbg.__wbg_new_e3b321dcfef89fc7 = function(arg0) { + const ret = new Uint32Array(arg0); + return ret; + }; + imports.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354 = function(arg0, arg1, arg2) { + const ret = new Float32Array(arg0, arg1 >>> 0, arg2 >>> 0); + return ret; + }; + imports.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212 = function(arg0, arg1, arg2) { + const ret = new Uint32Array(arg0, arg1 >>> 0, arg2 >>> 0); + return ret; + }; + imports.wbg.__wbg_newwithlength_5a5efe313cfd59f1 = function(arg0) { + const ret = new Float32Array(arg0 >>> 0); + return ret; + }; + imports.wbg.__wbg_newwithlength_bd3de93688d68fbc = function(arg0) { + const ret = new Uint32Array(arg0 >>> 0); + return ret; + }; + imports.wbg.__wbg_set_10bad9bee0e9c58b = function(arg0, arg1, arg2) { + arg0.set(arg1, arg2 >>> 0); + }; + imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) { + arg0.set(arg1, arg2 >>> 0); + }; + imports.wbg.__wbg_set_bb8cecf6a62b9f46 = function() { + return handleError(function(arg0, arg1, arg2) { + const ret = Reflect.set(arg0, arg1, arg2); + return ret; + }, arguments); + }; + imports.wbg.__wbg_set_d23661d19148b229 = function(arg0, arg1, arg2) { + arg0.set(arg1, arg2 >>> 0); + }; + imports.wbg.__wbg_set_f4f1f0daa30696fc = function(arg0, arg1, arg2) { + arg0.set(arg1, arg2 >>> 0); + }; + imports.wbg.__wbg_subarray_3aaeec89bb2544f0 = function(arg0, arg1, arg2) { + const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0); + return ret; + }; + imports.wbg.__wbg_subarray_769e1e0f81bb259b = function(arg0, arg1, arg2) { + const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0); + return ret; + }; + imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { + const ret = debugString(arg1); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }; + imports.wbg.__wbindgen_init_externref_table = function() { + const table = wasm.__wbindgen_export_2; + const offset = table.grow(4); + table.set(0, void 0); + table.set(offset + 0, void 0); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + }; + imports.wbg.__wbindgen_memory = function() { + const ret = wasm.memory; + return ret; + }; + imports.wbg.__wbindgen_number_new = function(arg0) { + const ret = arg0; + return ret; + }; + imports.wbg.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return ret; + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + return imports; +} +function __wbg_finalize_init(instance, module) { + wasm = instance.exports; + __wbg_init.__wbindgen_wasm_module = module; + cachedDataViewMemory0 = null; + cachedUint8ArrayMemory0 = null; + wasm.__wbindgen_start(); + return wasm; +} +async function __wbg_init(module_or_path) { + if (wasm !== void 0) return wasm; + if (typeof module_or_path !== "undefined") { + if (Object.getPrototypeOf(module_or_path) === Object.prototype) { + ({ module_or_path } = module_or_path); + } else { + console.warn("using deprecated parameters for the initialization function; pass a single object instead"); + } + } + if (typeof module_or_path === "undefined") { + module_or_path = new URL("data:application/wasm;base64,AGFzbQEAAAABtgItYAJ/fwF/YAJ/fwBgA39/fwF/YAF/AGABfwF/YAN/f38AYAV/f39/fwBgBH9/f38AYAFvAX9gAW8Bb2ADb39/AW9gBX9/f39/AX9gA29vfwBgAABgA39+fgBgA39+fgF/YAd/f39/f39/AX9gBn9/f39/fwBgAX0BfWAEf39/fwF/YAABb2ABfwFvYAZ/f39/f38Bf2AAAX9gC39/f39/f39/f39/AX9gAn9/AW9gAXwBb2ACb38Bb2ADb29vAX9gAn9vAGAHf39/f39/fwBgAn9/AX5gAn9+AX9gAn9+AGALfX19fX19fX1/b38Bb2ABfwF9YAV/f35/fwBgBH9+f38AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AYAR/f29vAX9gA39vbwF/YAJ9fQF9ArcIHgN3YmcVX193YmluZGdlbl9zdHJpbmdfbmV3ABkDd2JnFV9fd2JpbmRnZW5fbnVtYmVyX25ldwAaA3diZxpfX3diZ19nZXRfYjliOTMwNDdmZTNjZjQ1YgAbA3diZx1fX3diZ19sZW5ndGhfZTJkMmE0OTEzMmMxYjI1NgAIA3diZxpfX3diZ19uZXdfNDA1ZTIyZjM5MDU3NmNlMgAUA3diZx1fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OAAJA3diZxpfX3diZ19uZXdfYTEyMDAyYTdmOTFjNzViZQAJA3diZxpfX3diZ19zZXRfNjU1OTViZGQ4NjhiMzAwOQAMA3diZx1fX3diZ19sZW5ndGhfYTQ0NjE5M2RjMjJjMTJmOAAIA3diZxpfX3diZ19uZXdfOWZlZTk3YTQwOWIzMmI2OAAJA3diZxpfX3diZ19zZXRfZjRmMWYwZGFhMzA2OTZmYwAMA3diZx1fX3diZ19sZW5ndGhfOGNmZDJjNjQwOWFmODhhZAAIA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyAAoDd2JnGl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3AAkDd2JnGl9fd2JnX3NldF9kMjM2NjFkMTkxNDhiMjI5AAwDd2JnHV9fd2JnX2xlbmd0aF82Y2E1Mjc2NjVkODk2OTRkAAgDd2JnMV9fd2JnX25ld3dpdGhi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CwJAIAAoAhAiAkUNAEGousIAQQggAhDVBEUNAEEBDAILIAFBATsBJCABIAQ2AiAgAUEANgIcIAFBAToAGCABQd8ANgIUIAEgBDYCECABQQA2AgwgASAENgIIIAEgAzYCBCABQd8ANgIAIAFBKGogARBQAn8gASgCKEUEQAJAIAEtACUNACABQQE6ACUCQCABLQAkQQFGBEAgASgCICEFIAEoAhwhBAwBCyABKAIgIgUgASgCHCIERg0BCyABKAIEIARqIQMgBSAEawwCC0GwusIAEK4EAAsgASgCHCEEIAEgASgCMDYCHCADIARqIQMgASgCLCAEawshBAJAIAIEQCADIAQgAhDVBA0BCyABQcgAaiABQSBqKQIANwMAIAFBQGsgAUEYaikCADcDACABQThqIAFBEGopAgA3AwAgAUEwaiABQQhqKQIANwMAIAEgASkCADcDKAJAIAEtAE0NACACIQMDQCABKAIsIQUgAUHUAGogAUEoahBQAn8gASgCVEUEQCABLQBNDQMgAUEBOgBNAkAgAS0ATEEBRgRAIAEoAkghBSABKAJEIQQMAQsgASgCSCIFIAEoAkQiBEYNBAsgASgCLCAEaiEGIAUgBGsMAQsgASgCRCEEIAEgASgCXDYCRCAEIAVqIQYgASgCWCAEawshBAJAIANFBEBBACEDDAELQbm2wgBBASADENUEDQMgACgCECICRQRAQQAhAkEAIQMMAQsgAiEDIAYgBCACENUEDQMLIAEtAE1FDQALCyACRQ0BQcC6wgBBAiACENUERQ0BC0EBDAELAkAgACgCECICRQ0AQcK6wgBBAyACENUERQ0AQQEMAQsCQAJAAkAgACgCACIDRQRAQQAhAwwBC0EAIQIDQAJAIAAoAggiBCAAKAIETw0AIAMgBGotAABBxQBHDQAgACAEQQFqNgIIDAILAkAgAkUNACAAKAIQIgNFDQBB9bnCAEECIAMQ1QRFDQBBAQwFCyAAECcNAiACQQFrIQIgACgCACIDDQALQQAhAwsgACgCECIEBEBBAUH1s8IAQQEgBBDVBA0DGiAAKAIAIQMLIANFDQEgACgCCCICIAAoAgRPDQEgAiADai0AAEH1AEcNASAAIAJBAWo2AghBAAwCC0EBDAELAkAgACgCECICRQ0AQcW6wgBBBCACENUERQ0AQQEMAQsgABAnCyAB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AWogBiARGyADa2whAwwDCyABIApBjIHCABCtAgALQZyBwgBBKUHIgcIAEO0CAAtBoP/BAEEXQZyAwgAQ7QIACyAPIAZBAWo2AgAgAkEEaiAJOgAAIAIgAzYCACACQQhqIQIgBCAFQQFqIgVHDQALCyAAQYWAgIB4NgIADwsgBUEBaiEFIAMoAgAhCSADQQRqIQMgCUEATA0ACyAFQQFrIQxBACEDA0ACQCACIAZJBEAgA0EBaiEDIAsgAkEDdGogDDoABQNAIAIgDWogDnEiAiAETw0ACwwBCyACIAZB2IHCABCtAgALIAMgCUcNAAsMAAsAC9IHAQN/AkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAOCgAHBwECAwQHBwUHCwJAAkACQAJAAkACQCAALQAEDgcADAEMAgMEDAsgAC0ACEEDRw0LIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQQgASADIAIoAggQpwQMBAsgAC0ACEEDRw0KIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQMgASADIAIoAggQpwQMAwsgAC0ACEEDRw0JIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQIgASADIAIoAggQpwQMAgsgAC0ACEEDRw0IIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQEgASADIAIoAggQpwQMAQsgAC0ACEEDRw0HIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQAgASADIAIoAggQpwQLIABBDEEEEKcEDwsCQAJAIAAtAAQOAgcBAAsgACgCCCIBQfv///8HaiICQQ1NIAJBAkdxDQYgAUGEgICAeEoNBSABQYOAgIB4Rw0GDAULIAAoAggiAUGEgICAeEogAUGDgICAeEZyDQQMBQsgAC0ABEEDRw0EDAULAkACQEEDIAAoAgQiAUEHayICIAJBA08bQQJrDgIBAAULAkACQAJAIAEOBgAHAQcHAgcLIAAtAAhBA0cNBgwICyAAKAIIIgFB7f///wdqIgJBCk0gAkEDR3ENBSABRSABQfv///8H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wQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA4hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwICyACIAA2AgQgAkEBNgIMIAJB8KfBADYCCCACQgE3AhQgAiACQQRqrUKAgICAoDeENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAcLIAIgAEEEajYCBCACQQE2AgwgAkHwp8EANgIIIAJCATcCFCACIAJBBGqtQoCAgICgOIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMBgsgASgCHEHFusEAQTkgASgCICgCDBECAAwFCyACIABBBGo2AgQgAkECNgIMIAJBqLvBADYCCCACQgE3AhQgAiACQQRqrUKAgICA8DWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAQLIAIgAEEEajYCACACIABBCGo2AgQgAkEDNgIMIAJB6LvBADYCCCACQgI3AhQgAkKAgICA8DUiBCACrYQ3AyggAiAEIAJBBGqthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwDCyACIABBBGo2AgQgAkECNgIMIAJB8LzBADYCCCACQgE3AhQgAiACQQRqrUKAgICAsDiENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAILIAIgAEEEajYCACACIABBCGo2AgQgAkECNgIMIAJBsL3BADYCCCACQgI3AhQgAkKAgICAwDgiBCACQQRqrYQ3AyggAiAEIAKthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAjYCDCACQfS9wQA2AgggAkICNwIUIAJCgICAgPA1IgQgAkEEaq2ENwMoIAIgBCACrYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAuXBgEIfyMAQTBrIgEkAAJAAn8CQAJAAkAgACgCACIFBEAgACgCCCIEIAQgACgCBCIHIAQgB0sbayEIIAUhAwNAIAIgCGpFDQMgACACIARqQQFqNgIIIAJBAWohAiADIARqIANBAWohAy0AACIGQTBrQf8BcUEKSSAGQeEAa0H/AXFBBklyDQALIAZB3wBHDQIgAiAEakEBayEGAkAgBARA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IABBABAgDAELIAAQJwsgBEEQaiQAC5QDAQR/AkAgAkEQSQRAIAAhAwwBCwJAIABBACAAa0EDcSIFaiIEIABNDQAgACEDIAUEQCAFIQYDQCADIAE6AAAgA0EBaiEDIAZBAWsiBg0ACwsgBUEBa0EHSQ0AA0AgAyABOgAAIANBB2ogAToAACADQQZqIAE6AAAgA0EFaiABOgAAIANBBGogAToAACADQQNqIAE6AAAgA0ECaiABOgAAIANBAWogAToAACADQQhqIgMgBEcNAAsLIAQgAiAFayICQXxxaiIDIARLBEAgAUH/AXFBgYKECGwhBQNAIAQgBTYCACAEQQRqIgQgA0kNAAsLIAJBA3EhAgsCQCADIAIgA2oiBU8NACACQQdxIgQEQANAIAMgAToAACADQQFqIQMgBEEBayIEDQALCyACQQFrQQdJDQADQCADIAE6AAAgA0EHaiABOgAAIANBBmogAToAACADQQVqIAE6AAAgA0EEaiABOgAAIANBA2ogAToAACADQQJqIAE6AAAgA0EBaiABOgAAIANBCGoiAyAFRw0ACwsgAAudAwIGfwF+QTggAUH/AXEiASABQThPGyECAkAgACgCECIEIAAtABQiAWoiA0EASgRAIAIgA0sNAQJAIARBAEwgASACT3INAANAIARBAWsiBUEDdiEGQcAAIAFBB2oiB0F4cWshAwJAIAVBP00EQCAAIAYgAxCIASAAKAIQIQQgAC0AFCEBDAELAkAgACgCBCIFIAYgB0H4AXFBA3ZqQQdrIgZPBEAgBSAGayIFQQdLDQFBCCAFQcTewQAQqwQACyAGIAVB1N7BABCqBAALIAAgASADaiIBOgAUIAAgBCADQf8BcWsiBDYCECAAIAAoAgAgBmopAAA3AwgLIAFB/wFxIAJPDQEgBEEASg0ACwsgACABIAJrIgE6ABRCfyACrYZCf4UgACkDCCABQT9xrYiDDwsgACAEIAJrNgIQQgAPCyACIANrIQICQCADQf8BcSABSwRAIAAgAxBbIQggACgCECEEDAELIAAgASADayIBOgAUQn8gA62GQn+FIAApAwggAUE/ca2IgyEICyAAIAQgAms2AhAgCCACQT9xrYYLnAMBBX8CQEERQQAgAEGvsARPGyIBIAFBCHIiASAAQQt0IgIgAUECdEH82sIAaigCAEELdEkbIgEg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AEEEaiACKAIEIAIoAggQPUHcoMIAIAAoAgggACgCBCICGyEDQQkgACgCDCACGwshAiADIAIgARDaASAAQRBqJAALZgAjAEEwayIAJABBhOXCAC0AAARAIABBAjYCDCAAQYyhwgA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIAQhDcDICAAIABBIGo2AhAgAEEIakG0ocIAEKQDAAsgAEEwaiQAC2EBAX8jAEEwayICJAAgAiAANgIMIAJBAjYCFCACQZymwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA0hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRSACQTBqJAALYQEBfyMAQTBrIgIkACACIAA2AgwgAkECNgIUIAJB5K7BADYCECACQgE3AhwgAiACQQxqrUKAgICA4DSENwMoIAIgAkEoajYCGCABKAIcIAEoAiAgAkEQahBFIAJBMGokAAthAQF/IwBBMGsiAiQAIAIgADYCDCACQQE2AhQgAkHwp8EANgIQIAJCATcCHCACIAJBDGqtQoCAgICQOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUgAkEwaiQAC18BAn8CQCAAKAIAIgFB7f///wdqIgJBCk0gAkEDR3ENACABRSABQfv///8HaiICQQ1NIAJBAkdxIAFBg4CAgHhHIAFBhICAgHhMcXJyDQAgACgCBCABQQJ0QQQQpwQLC1wBA38gAC0AACIBQQNLIAFBA0dyRQRAIAAoAgQiACgCACEBIABBBGooAgAiAygCACICBEAgASACEQMACyADKAIEIgIEQCABIAIgAygCCBCnBAsgAEEMQQQQpwQLC2sBAn9BqJbAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMAAQIDC0EAIQEMAgsgAUEBaiEBQdStwAAhAgwBCyABQQRqIQFBkK7AACECCyAAIAI2AgQgACABNgIAC2gBA38CQAJAAkACQEEDIAEoAgBB7f///wdqIgQgBEELTxtBAmsOAwABAgMLIAFBBGohAkGcm8AAIQMMAgtB2LPAACEDIAEhAgwBCyABQQRqIQJBjLXAACEDCyAAIAM2AgQgACACNgIAC2sBAn9B1LfAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EE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AX8jAEEQayICJAAgAiAANgIMIAFB8b3AAEEWQYe+wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBic7AAEEbQcC8wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBrODAAEERQb3gwABBBCACQQxqQZzgwAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBweDAAEEWQdfgwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8fDAAEEbQZDfwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8IjBAEERQYGJwQBBBCACQQxqQeCIwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhYnBAEEWQZuJwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhZfBAEEbQdSHwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzwBAX8jAEEQayICJAAgAkGQksIANgIMIAIgADYCCCACQQhqQZSSwgAgAkEMakGUksIAIAFB5J/CABBrAAs4AQF/IwBBEGsiAiQAIAIgADYCDCABQeywwgBBDUH5sMIAQQQgAkEMakHcsMIAEMkBIAJBEGokAAs5AQF/IwBBEGsiAyQAIAMgATYCDCADIAA2AgggA0EIakGswsIAIANBDGpBrMLCACACQeyOwgAQawALMAEBfyMAQRBrIgIkACACQQhqIAAQ8wIgAigCCCABIAIoAgwoAhARAAAgAkEQaiQACzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEMUBDwsgACABEPwBDwsgACABEP0BCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEK0EDwsgACABEIQCDwsgACABEIMCCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEKkDDwsgACABEIQCDwsgACABEIMCCzMBAX8jAEEQayICJAAgAiAAKAIANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAszAQF/IwBBEGsiAiQAIAIgACgCADYCDCABQejUwQBBDCACQQxqQdjUwQAQfyACQRBqJAALLQACQCAAIAEQrANFDQAgAARAQYXlwgAtAAAaIAAgARD1AyIBRQ0BCyABDwsACzcBAX8jAEEgayIBJAAgAUEANgIYIAFBATYCDCABQdzZwgA2AgggAUIENwIQIAFBCGogABCkAwALMwEBfyAAKAIAIgFBhICAgHhMIAFBg4CAgHhHcSABRXJFBEAgACgCBCABQQJ0QQQQpwQLCzABAX8jAEEQayICJAAgAiAANgIMIAFBxJnAAEEMIAJBDGpBtJnAABB/IAJBEGokAAsvACAAQZybwAA2AgQgACABIAFBACABLQAAQQJrQf8BcSIAQQFGGyAAQQJLGzYCAAswAQF/IwBBEGsiAiQAIAIgADYCDCABQdi8wABBDCACQQxqQci8wAAQfyACQRBqJAALLwAgAEGwvsAANgIEIAAgASABQQAgAS0AAEECa0H/AXEiAEEBRhsgAEECSxs2AgALMAEBfyMAQRBrIgIkACACIAA2AgwgAUGo38AAQQwgAkEMakGY38AAEH8gAkEQaiQACy8AIABBgOHAADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACy8AIABBxInBADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACzABAX8jAEEQayICJAAgAiAANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAssAQF/IwBBEGsiACQAIABBCGoiAiABQfyVwgBBCxCmAyACEK4CIABBEGokAAuEAQEDfyMAQSBrIgQkACAEQQhqIgMQ8AECf0GF5cIALQAAGkEkQQQQ9QMiAgRAIAJB5LrAADYCACACIAE2AiAgAiAANgIcIAIgAykCADcCBCACQQxqIANBCGopAgA3AgAgAkEUaiADQRBqKQIANwIAIAIMAQtBBEEkENMEAAsgBEEgaiQACzgBAX9BASEBIAAtAARFBEAgACgCACIBKAIcQY7EwgBBASABKAIgKAIMEQIAIQELIAAgAToABCABC5ABAQN/IwBBIGsiAyQAIANBCGoiAhDwAQJ/QYXlwgAtAAAaQShBBBD1AyIBBEAgAUGcgsAANgIAIAEgAikCADcCBCABIAApAgA3AhwgAUEMaiACQQhq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NgIMIABBhKLCACABKAIEIAEoAggiAC0ACCAALQAJEMEBAAsgACADNgIEIAAgAjYCACAAQeihwgAgASgCBCABKAIIIgAtAAggAC0ACRDBAQALKgAgAEH/AXFFBEBDAAAAAA8LIABBAWtB/wFxs0NFIpE9lEMAABDBkhBSCy0AIAEoAhwgAiADIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAsyAQF/IAEoAhxBvMHCAEEBIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAshAAJAIAEgAxCsAwRAIAAgASADIAIQ3wMiAA0BCwALIAALIgEBfyAAKAIAIgAgAEEfdSICcyACayAAQX9zQR92IAEQbAslACAARQRAQfiPwgBBMhDIBAALIAAgAiADIAQgBSABKAIQEQsACygAIAEgACgCAC0AAEECdCIAQeC8wgBqKAIAIABBzLzCAGooAgAQ5QMLGQEBf0GAgICAeCABayAATyACIAFpQQFGGwslACABIAAtAABBAnQiAEH8tcAAaigCACAAQey1wABqKAIAEOUDCyUAIABBnJvAADYCBCAAIAFBBGpBACABKAIAQYKAgIB4Rhs2AgALIQAgAEHwosAANgIEIAAgAUEBakEAIAEtAABBAkYbNgIACyUAIAEgAC0AAEECdCIAQZDZwABqKAIAIABBgNnAAGooAgAQ5QMLJQAgAEGwvsAANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAshACAAQYTGwAA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgASAALQAAQQJ0IgBB+PvAAGooAgAgAEHo+8AAaigCABDlAwslACAAQYDhwAA2AgQgACABQQRqQQAgASgCAEGCgICAeEYbNgIACyEAIABBsOjAADYCBCAAIAFBAWpBACABLQAAQQJGGzYCAAshACAAQbSOwQA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgAEHEicEANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAslACABIAAtAABBAnQiAEGMosEAaigCACAAQfyhwQBqKAIAEOUDCyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCABKAIQEQcACyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCAB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BBD1AyILBEACQEGF5cIALQAAGkGACEEEEPUDIghFDQJBheXCAC0AABpBgAhBBBD1AyIERQ0AQYXlwgAtAAAaQYAIQQQQ9QMiDkUNAkGF5cIALQAAGkGACEEEEPUDIgxFDQBBheXCAC0AABpBgAhBBBD1AyISRQ0CIANCADcDqAIgA0EBNgLoASADQQA6AOQBIANBADoA4gEgA0EAOgDgASADQTQ7AdwBIANBADYC2AEgAyASNgLUASADQoCAgICAIDcCzAEgAyAMNgLIASADQoCAgICAIDcDwAEgA0KAgICAwAA3A7gBIANBIzsBtAEgA0EANgKwASADIA42AqwBIANCgICAgIAgNwKkASADIAQ2AqABIANCgICAgIAgNwOYASADQoCAgIDAADcDkAEgA0EfOwGMASADQQA2AogBIAMgCDYChAEgA0KAgICAgCA3AnwgAyALNgJ4IANCgICAgIAgNwNwIANCgICAgMAANwNoIANBwAJqQgA3AwAgA0G4AmpCADcDACADQbACakIANwMAIANB/AFqQQA2AgAgA0H0AWpCADcCACADQgA3AuwBIANC1uuC7ur9ifXgADcDgAIgA0LP1tO+0ser2UI3A4gCIANCADcDkAIgA0L56tDQ58mh5OEANwOYAiADQgA3A6ACIANBADYCyAIgA0IANwPQAiADIAY2AtgCIANBADYC5AIgA0EINgKUAyADQoCAgIAQNwLcAiADQoGAgIDAADcCjAMgA0EANgKIAyADQoCAgIAQNwPoAiADQgA3A/ACIANCBDcD+AIgA0KAgICAEDcDgAMMAwsLQQRBgAhBzIDCABDXAwALQQRBgAhB3IDCABDXAwALIAdBADYCqAcgB0EANgKwByAHQQA6ANwKIAdBADYC2AogByAjNwPQCiAHKQOoByEgIAcpA7AHISMgB0HoA2oiBiADQagDEDsaIAdBCGoQSSAHICM3AyggByAgNwMgIAcgITcDGCAHIA02AgwgByAiPgIQIAcgIkIgiD4CFCAHIAU2AgggB0EwaiAGQagDEDshCCAFQQFxBEBBDCEQIAcoAtgDIhJFDQEgBygC3AMhFwNAIBJB1AFrIQQgEkEEaiEGIBIvAd4WIgNBAnQhC0F/IQUCQAJAA0AgC0UEQCADIQUMAgsgBigCACEOIAVBAWohBSAEQYQCaiEEIAtBBGsh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EwAgAEHMuMAANgIEIAAgATYCAAsTACAAQYi5wAA2AgQgACABNgIACxMAIABBxLnAADYCBCAAIAE2AgALEwAgAEGAusAANgIEIAAgATYCAAsTACAAQbC+wAA2AgQgACABNgIACxMAIABBKDYCBCAAQYjbwAA2AgALEwAgAEGA4cAANgIEIAAgATYCAAshACAAQqTFo/yfjvDjADcDCCAAQqqooLmusOaw6QA3AwALEAAgACgCACAAKAIEIAEQMAsRACAAKAIAIAAoAgQgARDVBAsiACAAQsuH6/rgqLu20AA3AwggAELEr9zF2tKv9bh/NwMACxMAIABBKDYCBCAAQcCFwQA2AgALEwAgAEHEicEANgIEIAAgATYCAAsgACAAQrz8k7Ko16DsTDcDCCAAQuuYqJm2gbKefzcDAAshACAAQriynYTMrpfUQjcDCCAAQu/Dv6KOjcrEoH83AwALIAAgAEKcnaLxgrvwoHU3AwggAELRqsqvpcqt8kA3AwALIQAgAEL7wqCWlfy/yHo3AwggAELmsfLlkYe/ybF/NwMACyIAIABC9auQ77TsvKaWfzcDCCAAQrHh7P30uYbLwgA3AwALIAAgAELNnq77nqC2sEE3AwggAELxps+Y0aSn/gE3AwALIAAgAEK3v8ue+N2SoEM3AwggAEKvuaX0x5vV+zA3AwALIQAgAEKWl7rs79nZo3Q3AwggAEKH+OXLhuPSwtQANwMACyEAIABC/O6Qyq7osdU1NwMIIABC2OvVj+a1zN2OfzcDAAshACAAQrzprN2Y1v7ui383AwggAEKk3Nqt0/nNwEU3AwALIQAgAELl6obQ6cP/7Xk3AwggAEL30OLk1cPQ6ad/NwMACyEAIABC5sHsgPKk3YtlNwMIIABChu7u8+efmIeefzcDAAshACAAQs7Is8mT6a+2pX83AwggAELt66KMv7HLkg83AwALIgAgAEKcrtGn56WAwMIANwMIIABC16rLiaf+wYLHADcDAAsiACAAQt3+weC9o+rogn83AwggAEKX2/aYrfP7zY5/NwMACyEAIABCgsDc4LCv07mnfzcDCCAAQpbk17fDtcOKAzcDAAshACAAQrvV0cb1jfDEkH83AwggAELVi9bpuKS4kXk3AwALIQAgAEKynOer2rGju98ANwMIIABCvfif/8L+hsNVNwMACyIAIABC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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAAVwAAAFYAAABgERAAWAAAAFkAAABaAAAAWwAAAFwAAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAA/wAAAFYAAAD0IhAAAAEAAFkAAAABAQAAWwAAAAIBAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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bEVuY29kaW5nSW52YWxpZENoYXJFbmNvZGluZwAAAAAAAAAEAAAABAAAAEEAAABJbnZhbGlkVGFnRW5jb2RpbmdEZXNlcmlhbGl6ZUFueU5vdFN1cHBvcnRlZFNpemVMaW1pdFNlcXVlbmNlTXVzdEhhdmVMZW5ndGgAAAAAAAQAAAAEAAAANQEAAEN1c3RvbU5vbmVTb21lUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVkAAAAAAAABAAAAAQAAAA2AQAAVG9vTWFueUJpdHNudW1fcmVxdWVzdGVkX2JpdHNsaW1pdE5vdEVub3VnaFJlbWFpbmluZ0JpdHNyZXF1ZXN0ZWRyZW1haW5pbmdBY2NMb2dJc1plcm8AAAAAAAABAAAAAQAAADcBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAA4AQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAAA5AQAARwAAAHAwEAA6AQAASQAAADsBAABKAAAAPAEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABNAAAAUmVhZEZyYW1lSGVhZGVyRXJyb3IAAAAABAAAAAQAAABOAAAARnJhbWVIZWFkZXJFcnJvcldpbmRvd1NpemVUb29CaWcAAAAABAAAAAQAAABPAAAARGljdGlvbmFyeURlY29kZUVycm9yAAAAAAAAAAQAAAAEAAAAUAAAAEZhaWxlZFRvUmVhZEJsb2NrSGVhZGVyAAAAAAAEAAAABAAAAFEAAABGYWlsZWRUb1JlYWRCbG9ja0JvZHlGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzRXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzVG9vTWFueVdlaWdodHNNaXNzaW5nV2VpZ2h0c0xlZnRvdmVySXNOb3RBUG93ZXJPZjJOb3RFbm91Z2hCeXRlc1RvRGVjb21wcmVzc1dlaWdodHNoYXZlRlNFVGFibGVVc2VkVG9vTWFueUJ5dGVzdXNlZGF2YWlsYWJsZV9ieXRlc05vdEVub3VnaEJ5dGVzSW5Tb3VyY2VXZWlnaHRCaWdnZXJUaGFuTWF4TnVtQml0c01heEJpdHNUb29IaWdoAAAAAAAAAAEAAAABAAAAVgAAAAAAAAABAAAAAQAAAD0BAABWAAAAIDQQAD4BAABZAAAAPwEAAFsAAABAAQAAVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZVplcm9PZmZzZXROb3RFbm91Z2hCeXRlc0Zvck51bVNlcXVlbmNlcwAAAAAABAAAAAQAAABdAAAARXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlAAAAQQEAAAwAAAAEAAAAXwAAAEEBAAAMAAAABAAAAEIBAABfAAAAKDUQAEMBAABiAAAAOwEAAGMAAAA8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YWxzbmVlZGVkAAAAAAAABAAAAAQAAABjAQAAQml0c3RyZWFtUmVhZE1pc21hdGNocmVhZF90aWxEZWNvZGVkTGl0ZXJhbENvdW50TWlzbWF0Y2hkZWNvZGVkAGQBAAAUAAAABAAAALQAAABkAQAAFAAAAAQAAABlAQAAtAAAAMQ8EABmAQAAtwAAADsBAAC4AAAAPAEAAAAAAAAMAAAABAAAALkAAAAAAAAADAAAAAQAAABnAQAAuQAAAAA9EAA6AQAAuwAAADsBAABKAAAAPAEAAGgBAAAYAAAABAAAAL0AAABoAQAAGAAAAAQAAABpAQAAvQAAADw9EABqAQAAwAAAADsBAADBAAAAPAEAAAAAAAAMAAAABAAAAMIAAAAAAAAADAAAAAQAAABrAQAAwgAAAHg9EABsAQAAxQAAADsBAADGAAAAPAEAAElsbGVnYWxMaXRlcmFsU2VjdGlvblR5cGVOb3RFbm91Z2hCeXRlc25lZWRfYXRfbGVhc3QDAAAAAwAAAAoAAAAIAAAA8i4QAPUuEAD4LhAAAi8QAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAAAIPhAAbQAAACoCAAARAAAAYW4gYXJyYXkgb2YgbGVuZ3RoIDQAAAAAAAAAAAEAAABtAQBBtP3AAAv1KAEAAABtAQAAAAAAAAgAAAAEAAAAbgEAAHN0cnVjdCBXbGcwSGVhZGVyIHdpdGggNyBlbGVtZW50cwAAAMw+EAAhAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogaW52YWxpZCBPbmNlIHN0YXRl+D4QADwAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvb25jZS9ub190aHJlYWRzLnJzPD8QAHwAAAA1AAAAEgAAAGZhaWxlZCB0byBmaWxsIHdob2xlIGJ1ZmZlcgDIPxAAGwAAACUAAAACAAAA5D8QAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2RpbmcvYmxvY2tfZGVjb2Rlci5yc0J1ZyBpbiB0aGlzIGxpYnJhcnkA+D8QAGwAAACYAAAAFgAAAFdyb25nIG51bWJlciBvZiBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiAAAIhAEAAaAAAAokAQABQAAAD4PxAAbAAAAK0AAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uID09IHVwcGVyX2xpbWl0X2Zvcl9saXRlcmFscyBhcyB1MzIA+D8QAGwAAACzAAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHUzMjo6ZnJvbShieXRlc19pbl9saXRlcmFsc19oZWFkZXIpICsgYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uICsKICAgICAgICAgICAgdTMyOjpmcm9tKGJ5dGVzX2luX3NlcXVlbmNlX2hlYWRlcikgKyByYXcubGVuKCkgYXMgdTMyID09CiAgICBoZWFkZXIuY29udGVudF9zaXplAAD4PxAAbAAAAMEAAAAJAAAA+D8QAGwAAAC6AAAAFwAAAPg/EABsAAAAiwAAABcAAABIb3cgZGlkIHlvdSBldmVuIGdldCB0aGlzLiBUaGUgZGVjb2RlciBzaG91bGQgZXJyb3Igb3V0IGlmIGl0IGRldGVjdHMgYSByZXNlcnZlZC10eXBlIGJsb2NrAPg/EABsAAAAcAAAABEAAABmYWlsZWQgdG8gZmlsbCB3aG9sZSBidWZmZXIAkEIQABsAAAAlAAAAAgAAAKxCEABkZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBEaXNwbGF5AAAAAAQAAAAEAAAAbwEAAAAAAAAEAAAABAAAAHABAABVdGY4RXJyb3J2YWxpZF91cF90b2Vycm9yX2xlblJhd1JMRUNvbXByZXNzZWRSZXNlcnZlZAAAAAAAAAAEAAAABAAAAEAAAABUb29NYW55Qml0c251bV9yZXF1ZXN0ZWRfYml0c2xpbWl0AAAAAAAABAAAAAQAAABBAAAATm90RW5vdWdoUmVtYWluaW5nQml0c3JlcXVlc3RlZHJlbWFpbmluZ0FjY0xvZ0lzWmVybwAAAAABAAAAAQAAAHEBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAByAQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAABzAQAARwAAALREEABKAAAASQAAAHQBAABKAAAAdQEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzAAAAAAAAAAQAAAAEAAAAVQAAAEV4dHJhUGFkZGluZ3NraXBwZWRfYml0c1Rvb01hbnlXZWlnaHRzTWlzc2luZ1dlaWdodHNMZWZ0b3ZlcklzTm90QVBvd2VyT2YyTm90RW5vdWdoQnl0ZXNUb0RlY29tcHJlc3NXZWlnaHRzaGF2ZUZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaAAAAAABAAAAAQAAAFYAAAAAAAAAAQAAAAEAAAB2AQAAVgAAACRHEABbAAAAWQAAAHcBAABbAAAAeAEAAFVuc3VwcG9ydGVkT2Zmc2V0b2Zmc2V0X2NvZGVaZXJvT2Zmc2V0Tm90RW5vdWdoQnl0ZXNGb3JOdW1TZXF1ZW5jZXMAAAAAAAQAAAAEAAAAXQAAAEV4dHJhQml0c2JpdHNfcmVtYWluaW5nTWlzc2luZ0NvbXByZXNzaW9uTW9kZU1pc3NpbmdCeXRlRm9yUmxlTGxUYWJsZU1pc3NpbmdCeXRlRm9yUmxlT2ZUYWJsZU1pc3NpbmdCeXRlRm9yUmxlTWxUYWJsZQAAAHkBAAAMAAAABAAAAF8AAAB5AQAADAAAAAQAAAB6AQAAXwAAACxIEAB7AQAAYgAAAHQBAABjAAAAdQEAAAAAAAAQAAAACAAAAGQAAAAAAAAAEAAAAAgAAAB8AQAAZAAAAGhIEAB9AQAAZwAAAH4BAABoAAAAfwEAAIABAAAYAAAABAAAAGoAAACAAQAAGAAAAAQAAACBAQAAagAAAKRIEACCAQAAbQAAAHQBAABuAAAAdQEAAIMBAAAIAAAABAAAAHAAAACDAQAACAAAAAQAAACEAQAAcAAAAOBIEACFAQAAcwAAAHQBAAB0AAAAdQEAAIYBAAAYAAAABAAAAHYAAACGAQAAGAAAAAQAAACHAQAAdgAAABxJEACIAQAAeQAAAHQBAAB6AAAAdQEAAIkBAAAIAAAABAAAACUAAACJAQAACAAAAAQAAAAmAAAAJQAAAFhJEAAnAAAAKAAAACkAAAAqAAAAdQEAAAAAAAAMAAAABAAAAHsAAAAAAAAADAAAAAQAAACKAQAAewAAAJRJEACLAQAAfgAAAHQBAAB/AAAAdQEAAIwBAAAUAAAABAAAAIEAAACMAQAAFAAAAAQAAACNAQAAgQAAANBJEACOAQAAhAAAAHQBAACFAAAAdQEAAAAAAAAEAAAABAAAAFIAAABSZWFkRXJyb3JGb3VuZFJlc2VydmVkQmxvY2sAAAAAAAQAAAAEAAAAhgAAAEJsb2NrVHlwZUVycm9yAAAAAAAABAAAAAQAAACHAAAAQmxvY2tTaXplRXJyb3JCbG9ja0NvbnRlbnRSZWFkRXJyb3JNYWxmb3JtZWRTZWN0aW9uSGVhZGVyZXhwZWN0ZWRfbGVucmVtYWluaW5nX2J5dGVzAAAAAAQAAAAEAAAAiAAAAERlY29tcHJlc3NMaXRlcmFsc0Vycm9yAAAAAAAEAAAABAAAAIkAAABMaXRlcmFsc1NlY3Rpb25QYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAigAAAFNlcXVlbmNlc0hlYWRlclBhcnNlRXJyb3IAAAAAAAAABAAAAAQAAACLAAAARGVjb2RlU2VxdWVuY2VFcnJvcgAAAAAABAAAAAQAAACMAAAARXhlY3V0ZVNlcXVlbmNlc0Vycm9ySW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnTWFnaWNOdW1iZXJSZWFkRXJyb3JCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvclNraXBGcmFtZW1hZ2ljX251bWJlcmxlbmd0aAAAAAAAAAQAAAAEAAAAjQAAAEJhZE1hZ2ljTnVtAAAAAAAEAAAABAAAAI4AAABIdWZmbWFuVGFibGVFcnJvcgAAAAAAAAAEAAAABAAAAI8AAABEZWNvZGVidWZmZXJFcnJvck5vdEVub3VnaEJ5dGVzRm9yU2VxdWVuY2V3YW50ZWQAAAAAAQAAAAEAAACQAAAAAAAAAAEAAAABAAAAjwEAAJAAAADUTBAAWwAAAJIAAAB3AQAAWwAAAHgBAAAAAAAABAAAAAQAAACTAAAAAAAAAAQAAAAEAAAAkAEAAJMAAAAQTRAASgAAAJUAAAB0AQAASgAAAHUBAACRAQAAFAAAAAQAAACXAAAAkQEAABQAAAAEAAAAkgEAAJcAAABMTRAAkwEAAJoAAAB0AQAAmwAAAHUBAAAAAAAADAAAAAQAAACcAAAAAAAAAAwAAAAEAAAAlAEAAJwAAACITRAAlQEAAJ8AAAB0AQAAoAAAAHUBAAAAAAAACAAAAAQAAAChAAAAAAAAAAgAAAAEAAAAlgEAAKEAAADETRAASgAAAKMAAAB0AQAASgAAAHUBAACXAQAAFAAAAAQAAAClAAAAlwEAABQAAAAEAAAAmAEAAKUAAAAAThAAmQEAAKgAAAB0AQAAqQAAAHUBAAAAAAAADAAAAAQAAACqAAAAAAAAAAwAAAAEAAAAmgEAAKoAAAA8ThAAmwEAAK0AAAB0AQAArgAAAHUBAABEZWNvZGVyU3RhdGVJc0ZhaWxlZEV4cGVjdGVkSGVhZGVyT2ZQcmV2aW91c0Jsb2NrAAAAAAAAAAEAAAABAAAAnAEAAHN0ZXBzb3VyY2UAAAAAAAAEAAAABAAAALAAAABEZWNvbXByZXNzQmxvY2tFcnJvck1pc3NpbmdDb21wcmVzc2VkU2l6ZU1pc3NpbmdOdW1TdHJlYW1zAAAAAAAABAAAAAQAAACxAAAASHVmZm1hbkRlY29kZXJFcnJvclVuaW5pdGlhbGl6ZWRIdWZmbWFuVGFibGVNaXNzaW5nQnl0ZXNGb3JKdW1wSGVhZGVyTWlzc2luZ0J5dGVzRm9yTGl0ZXJhbHNuZWVkZWQAAAAAAAAEAAAABAAAAJ0BAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAngEAABQAAAAEAAAAtAAAAJ4BAAAUAAAABAAAAJ8BAAC0AAAA2E8QAKABAAC3AAAAdAEAALgAAAB1AQAAAAAAAAwAAAAEAAAAuQAAAAAAAAAMAAAABAAAAKEBAAC5AAAAFFAQAEoAAAC7AAAAdAEAAEoAAAB1AQAAogEAABgAAAAEAAAAvQAAAKIBAAAYAAAABAAAAKMBAAC9AAAAUFAQAKQBAADAAAAAdAEAAMEAAAB1AQAAAAAAAAwAAAAEAAAAwgAAAAAAAAAMAAAABAAAAKUBAADCAAAAjFAQAMYAAADFAAAAdAEAAMYAAAB1AQAASWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzbmVlZF9hdF9sZWFzdAMAAAADAAAACgAAAAgAAAAlQxAAKEMQACtDEAA1QxAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9zdGQvc3JjL2lvL21vZC5ycwAAHFEQAGoAAACyAQAAMQAAAGFzc2VydGlvbiBmYWlsZWQ6IGZpbGxlZCA8PSBzZWxmLmJ1Zi5pbml0L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9jb3JlL3NyYy9pby9ib3Jyb3dlZF9idWYucnMAAADBURAAdAAAAB0BAAAJAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnNIUhAAgAAAAFgCAAAwAAAASW52YWxpZCBGcmFtZV9Db250ZW50X1NpemVfRmxhZzsgSXM6ICwgU2hvdWxkIGJlIG9uZSBvZjogMCwgMSwgMiwgMwDYUhAAJQAAAP1SEAAeAEG0psEAC8piwAMAAHdpbmRvd19zaXplIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bS4gSXM6ICwgU2hvdWxkIGJlIGxvd2VyIHRoYW46IAAAADhTEAAtAAAAZVMQABgAAAAABAAAAAAAAHdpbmRvd19zaXplIHNtYWxsZXIgdGhhbiBhbGxvd2VkIG1pbmltdW0uIElzOiAsIFNob3VsZCBiZSBncmVhdGVyIHRoYW46IJhTEAAuAAAAxlMQABoAAAABAAAAAAAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gZGljdF9pZC4gSXM6ICwgU2hvdWxkIGJlOiAAAPhTEAAhAAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQgbGVuZ3RoLiBJczogADhUEAA3AAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgd2FzIHplcm9JbnZhbGlkIGZyYW1lX2NvbnRlbnRfc2l6ZS4gSXM6ICwgU2hvdWxkIGJlIG9uZSBvZiAxLCAyLCA0LCA4IGJ5dGVzAACbVBAAIAAAALtUEAAjAAAARXJyb3Igd2hpbGUgcmVhZGluZyBtYWdpYyBudW1iZXI6IAAA8FQQACIAAABSZWFkIHdyb25nIG1hZ2ljIG51bWJlcjogMHgAHFUQABsAAABFcnJvciB3aGlsZSByZWFkaW5nIGZyYW1lIGRlc2NyaXB0b3I6IAAAQFUQACYAAABFcnJvciB3aGlsZSByZWFkaW5nIHdpbmRvdyBkZXNjcmlwdG9yOiAAcFUQACcAAABFcnJvciB3aGlsZSByZWFkaW5nIGRpY3Rpb25hcnkgaWQ6IACgVRAAIwAAAEVycm9yIHdoaWxlIHJlYWRpbmcgZnJhbWUgY29udGVudCBzaXplOiDMVRAAKAAAAFNraXBwYWJsZUZyYW1lIGVuY291bnRlcmVkIHdpdGggTWFnaWNOdW1iZXIgMHggYW5kIGxlbmd0aCAgYnl0ZXP8VRAALgAAACpWEAAMAAAANlYQAAYAAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBoZWFkZXJSZXNlcnZlZCBibG9jayBvY2N1cmVkLiBUaGlzIGlzIGNvbnNpZGVyZWQgY29ycnVwdGlvbiBieSB0aGUgZG9jdW1lbnRhdGlvbkVycm9yIGdldHRpbmcgYmxvY2sgdHlwZTogwlYQABoAAABFcnJvciBnZXR0aW5nIGJsb2NrIGNvbnRlbnQgc2l6ZTogAADkVhAAIgAAAEludmFsaWQgQmxvY2t0eXBlIG51bWJlci4gSXM6ICBTaG91bGQgYmUgb25lIG9mOiAwLCAxLCAyLCAzICgzIGlzIHJlc2VydmVkIHRob3VnaAAAABBXEAAeAAAALlcQADMAAAAAAAIAQmxvY2tzaXplIHdhcyBiaWdnZXIgdGhhbiB0aGUgYWJzb2x1dGUgbWF4aW11bSAgKDEyOGtiKS4gSXM6IAAAAHhXEAAvAAAAp1cQAA4AAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBjb250ZW50OiAAyFcQACcAAABNYWxmb3JtZWQgc2VjdGlvbiBoZWFkZXIuIFNheXMgbGl0ZXJhbHMgd291bGQgYmUgdGhpcyBsb25nOiAgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBsZWZ0APhXEAA8AAAANFgQABQAAABIWBAACwAAAENhbid0IGRlY29kZSBuZXh0IGJsb2NrIGlmIGZhaWxlZCBhbG9uZyB0aGUgd2F5LiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VDYW4ndCBkZWNvZGUgbmV4dCBibG9jayBib2R5LCB3aGlsZSBleHBlY3RpbmcgdG8gZGVjb2RlIHRoZSBoZWFkZXIgb2YgdGhlIHByZXZpb3VzIGJsb2NrLiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VFcnJvciB3aGlsZSByZWFkaW5nIGJ5dGVzIGZvciA6IAAnWRAAHgAAAEVZEAACAAAATmVlZCAgYnl0ZXMgZnJvbSB0aGUgZGljdGlvbmFyeSBidXQgaXQgaXMgb25seSAgYnl0ZXMgbG9uZwAAWFkQAAUAAABdWRAAKgAAAIdZEAALAAAAb2Zmc2V0OiAgYmlnZ2VyIHRoYW4gYnVmZmVyOiAAAACsWRAACAAAALRZEAAVAAAAQmFkIG1hZ2ljX251bSBhdCBzdGFydCBvZiB0aGUgZGljdGlvbmFyeTsgR290OiAsIEV4cGVjdGVkOiAA3FkQAC8AAAALWhAADAAAADekMOxTcGVjaWZpZWQgd2luZG93X3NpemUgaXMgdG9vIGJpZzsgUmVxdWVzdGVkOiAsIE1heDogLFoQAC0AAABZWhAABwAAAEZhaWxlZCB0byBwYXJzZS9kZWNvZGUgYmxvY2sgYm9keTogAHBaEAAjAAAARmFpbGVkIHRvIHBhcnNlIGJsb2NrIGhlYWRlcjogAACcWhAAHgAAAEZhaWxlZCB0byByZWFkIGNoZWNrc3VtOiAAAADEWhAAGQAAAERlY29kZXIgbXVzdCBpbml0aWFsaXplZCBvciByZXNldCBiZWZvcmUgdXNpbmcgaXREZWNvZGVyIGVuY291bnRlcmVkIGVycm9yIHdoaWxlIGluaXRpYWxpemluZzogABlbEAAuAAAARGVjb2RlciBlbmNvdW50ZXJlZCBlcnJvciB3aGlsZSBkcmFpbmluZyB0aGUgZGVjb2RlYnVmZmVyOiAAUFsQADsAAABGYWlsZWQgdG8gc2tpcCBieXRlcyBmb3IgdGhlIGxlbmd0aCBnaXZlbiBpbiB0aGUgZnJhbWUgaGVhZGVyVGFyZ2V0IG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGJ5dGVzIGFzIHRoZSBjb250ZW50c2l6ZSBvZiB0aGUgZnJhbWUgcmVwb3J0c0ZyYW1lIGhlYWRlciBzcGVjaWZpZWQgZGljdGlvbmFyeSBpZCAweCB0aGF0IHdhc250IHByb3ZpZGVkIGJ5IGFkZF9kaWN0KCkgb3IgcmVzZXRfd2l0aF9kaWN0KCkAACBcEAAnAAAAR1wQADcAAABjb21wcmVzc2VkIHNpemUgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzbnVtX3N0cmVhbXMgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nICgxIG9yIDQpIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzVHJpZWQgdG8gcmV1c2UgaHVmZm1hbiB0YWJsZSBidXQgaXQgd2FzIG5ldmVyIGluaXRpYWxpemVkTmVlZCA2IGJ5dGVzIHRvIGRlY29kZSBqdW1wIGhlYWRlciwgZ290IAAAfl0QACgAAAA2VhAABgAAAE5lZWQgYXQgbGVhc3QgIGJ5dGVzIHRvIGRlY29kZSBsaXRlcmFscy4gSGF2ZTogALhdEAAOAAAAxl0QACEAAAA2VhAABgAAAFBhZGRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2Vfc2VjdGlvbiB3YXMgbW9yZSB0aGFuIGEgYnl0ZSBsb25nOiAgYml0cy4gUHJvYmFibHkgY2F1c2VkIGJ5IGRhdGEgY29ycnVwdGlvbgAAXhAARgAAAEZeEAApAAAAQml0c3RyZWFtIHdhcyByZWFkIHRpbGw6ICwgc2hvdWxkIGhhdmUgYmVlbjogAAAAgF4QABkAAACZXhAAFAAAAERpZCBub3QgZGVjb2RlIGVub3VnaCBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiDAXhAAIAAAAOBeEAAUAAAAU2VxdWVuY2Ugd2FudHMgdG8gY29weSB1cCB0byBieXRlIC4gQnl0ZXMgaW4gbGl0ZXJhbHNidWZmZXI6IAAAAARfEAAiAAAAJl8QABsAAABJbGxlZ2FsIG9mZnNldDogMCBmb3VuZERvIG5vdCBzdXBwb3J0IG9mZnNldHMgYmlnZ2VyIHRoYW4gMTw8MzI7IGdvdDogAABrXxAALwAAAFJlYWQgYW4gb2Zmc2V0ID09IDAuIFRoYXQgaXMgYW4gaWxsZWdhbCB2YWx1ZSBmb3Igb2Zmc2V0c0J5dGVzdHJlYW0gZGlkIG5vdCBjb250YWluIGVub3VnaCBieXRlcyB0byBkZWNvZGUgbnVtX3NlcXVlbmNlc2NvbXByZXNzaW9uIG1vZGVzIGFyZSBub25lIGJ1dCB0aGV5IG11c3QgYmUgc2V0IHRvIHNvbWV0aGluZ05lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBsbCB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBvZiB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBtbCB0YWJsZUlsbGVnYWwgbGl0ZXJhbHNzZWN0aW9udHlwZS4gSXM6ICwgbXVzdCBiZSBpbjogMCwgMSwgMiwgMwAAAMRgEAAhAAAA5WAQABgAAABOb3QgZW5vdWdoIGJ5dGUgdG8gcGFyc2UgdGhlIGxpdGVyYWxzIHNlY3Rpb24gaGVhZGVyLiBIYXZlOiAsIE5lZWQ6IBBhEAA8AAAATGEQAAgAAABzb3VyY2UgbXVzdCBoYXZlIGF0IGxlYXN0ICBieXRlcyB0byBwYXJzZSBoZWFkZXI7IGdvdCAAAGRhEAAaAAAAfmEQABwAAAA2VhAABgAAAEFjY2xvZyBtdXN0IGJlIGF0IGxlYXN0IDFGb3VuZCBGU0UgYWNjX2xvZzogIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bSBpbiB0aGlzIGNhc2U6IADNYRAAEwAAAOBhEAArAAAAVGhlIGNvdW50ZXIgKCkgZXhjZWVkZWQgdGhlIGV4cGVjdGVkIHN1bTogLiBUaGlzIG1lYW5zIGFuIGVycm9yIG9yIGNvcnJ1cHRlZCBkYXRhIAogHGIQAA0AAAApYhAAHQAAAEZiEAAqAAAAVGhlcmUgYXJlIHRvbyBtYW55IHN5bWJvbHMgaW4gdGhpcyBkaXN0cmlidXRpb246IC4gTWF4OiAyNTYAiGIQADEAAAC5YhAACgAAAFRyaWVkIHRvIHVzZSBhbiB1bmluaXRpYWxpemVkIHRhYmxlIVNvdXJjZSBuZWVkcyB0byBoYXZlIGF0IGxlYXN0IG9uZSBieXRlSGVhZGVyIHNheXMgdGhlcmUgc2hvdWxkIGJlICBieXRlcyBmb3IgdGhlIHdlaWdodHMgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBpbiB0aGUgc3RyZWFtHmMQABwAAAA6YxAAKgAAAGRjEAAUAAAATW9yZSB0aGFuIDI1NSB3ZWlnaHRzIGRlY29kZWQgKGdvdCAgd2VpZ2h0cykuIFN0cmVhbSBpcyBwcm9iYWJseSBjb3JydXB0ZWQAAJBjEAAjAAAAs2MQACcAAABDYW4ndCBidWlsZCBodWZmbWFuIHRhYmxlIHdpdGhvdXQgYW55IHdlaWdodHNMZWZ0b3ZlciBtdXN0IGJlIHBvd2VyIG9mIHR3byBidXQgaXM6IAAZZBAAJgAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gc3RyZWFtIHRvIGRlY29tcHJlc3Mgd2VpZ2h0cy4gSXM6IAAASGQQADYAAAAZVBAADQAAAEZTRSB0YWJsZSB1c2VkIG1vcmUgYnl0ZXM6ICB0aGFuIHdlcmUgbWVhbnQgdG8gYmUgdXNlZCBmb3IgdGhlIHdob2xlIHN0cmVhbSBvZiBodWZmbWFuIHdlaWdodHMgKCkAAACQZBAAGwAAAKtkEABFAAAA8GQQAAEAAABTb3VyY2UgbmVlZHMgdG8gaGF2ZSBhdCBsZWFzdCAgYnl0ZXMsIGdvdDogAAxlEAAeAAAAKmUQAA0AAAALQ2FudCBoYXZlIHdlaWdodDogIGJpZ2dlciB0aGFuIG1heF9udW1fYml0czogAABJZRAAEgAAAFtlEAAbAAAAbWF4X2JpdHMgZGVyaXZlZCBmcm9tIHdlaWdodHMgaXM6ICBzaG91bGQgYmUgbG93ZXIgdGhhbjogAAAAiGUQACIAAACqZRAAFwAAAENhbnQgc2VydmUgdGhpcyByZXF1ZXN0LiBUaGUgcmVhZGVyIGlzIGxpbWl0ZWQgdG8gIGJpdHMsIHJlcXVlc3RlZCAgYml0c9RlEAAyAAAABmYQABEAAAAXZhAABQAAAENhbid0IHJlYWQgIGJpdHMsIG9ubHkgaGF2ZSAgYml0cyBsZWZ0AAA0ZhAACwAAAD9mEAARAAAAUGYQAAoAAAAAAAAABAAAAAQAAADJAQAAAAAAAAQAAAAEAAAAygEAAFRvb01hbnlCaXRzbnVtX3JlcXVlc3RlZF9iaXRzbGltaXQAAAAAAAAEAAAABAAAAMsBAABOb3RFbm91Z2hSZW1haW5pbmdCaXRzcmVxdWVzdGVkcmVtYWluaW5nSW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnZ290AAAAAAAABAAAAAQAAADMAQAAV2luZG93VG9vQmlnV2luZG93VG9vU21hbGwAAAAAAAAEAAAABAAAAK4BAABGcmFtZURlc2NyaXB0b3JFcnJvckRpY3RJZFRvb1NtYWxsZXhwZWN0ZWRNaXNtYXRjaGVkRnJhbWVTaXplRnJhbWVTaXplSXNaZXJvSW52YWxpZEZyYW1lU2l6ZQAAAAAEAAAABAAAAM0BAABNYWdpY051bWJlclJlYWRFcnJvcgAAAAAEAAAABAAAAM4BAABCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvcgAAAAAABAAAAAQAAADPAQAAU2tpcEZyYW1lbWFnaWNfbnVtYmVybGVuZ3RoQmxvY2tDb250ZW50UmVhZEVycm9yTWFsZm9ybWVkU2VjdGlvbkhlYWRlcmV4cGVjdGVkX2xlbnJlbWFpbmluZ19ieXRlcwAAAAAAAAAEAAAABAAAALIBAABEZWNvbXByZXNzTGl0ZXJhbHNFcnJvcgAAAAAABAAAAAQAAACzAQAATGl0ZXJhbHNTZWN0aW9uUGFyc2VFcnJvcgAAAAAAAAAEAAAABAAAALQBAABTZXF1ZW5jZXNIZWFkZXJQYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAtQEAAERlY29kZVNlcXVlbmNlRXJyb3IAAAAAAAQAAAAEAAAAtgEAAEV4ZWN1dGVTZXF1ZW5jZXNFcnJvck5vdEVub3VnaEJ5dGVzSW5EaWN0aW9uYXJ5bmVlZE9mZnNldFRvb0JpZ29mZnNldGJ1Zl9sZW4AAAAABAAAAAQAAAC4AQAAQmFkTWFnaWNOdW0AAAAAAAQAAAAEAAAAuQEAAEZTRVRhYmxlRXJyb3IAAAAAAAAABAAAAAQAAAC6AQAASHVmZm1hblRhYmxlRXJyb3JNaXNzaW5nQ29tcHJlc3NlZFNpemVNaXNzaW5nTnVtU3RyZWFtcwAAAAAABAAAAAQAAADBAQAAR2V0Qml0c0Vycm9yAAAAAAQAAAAEAAAAwgEAAEh1ZmZtYW5EZWNvZGVyRXJyb3JVbmluaXRpYWxpemVkSHVmZm1hblRhYmxlTWlzc2luZ0J5dGVzRm9ySnVtcEhlYWRlck1pc3NpbmdCeXRlc0ZvckxpdGVyYWxzbmVlZGVkAAAAAAAABAAAAAQAAADQAQAARXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzAAAAAAQAAAAEAAAA0QEAAAAAAAAEAAAABAAAANIBAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAAAAAAAQAAAAEAAAAxQEAAERlY29kZWJ1ZmZlckVycm9yTm90RW5vdWdoQnl0ZXNGb3JTZXF1ZW5jZXdhbnRlZGhhdmVaZXJvT2Zmc2V0AAAAAAAABAAAAAQAAADGAQAARlNFRGVjb2RlckVycm9yVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZU5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzRXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlSWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzAAAAAAEAAAABAAAA0wEAAG5lZWRfYXRfbGVhc3RBY2NMb2dJc1plcm9BY2NMb2dUb29CaWdtYXgAAAAABAAAAAQAAADHAQAAUHJvYmFiaWxpdHlDb3VudGVyTWlzbWF0Y2hleHBlY3RlZF9zdW1zeW1ib2xfcHJvYmFiaWxpdGllc1Rvb01hbnlTeW1ib2xzVGFibGVJc1VuaW5pdGlhbGl6ZWRTb3VyY2VJc0VtcHR5Tm90RW5vdWdoQnl0ZXNGb3JXZWlnaHRzZ290X2J5dGVzZXhwZWN0ZWRfYnl0ZXNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c0ZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAABQbhAAbQAAACoCAAARAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyX3JldmVyc2UucnMAAADQbhAAcQAAADcAAABFAAAA0G4QAHEAAAA3AAAALwAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGXQbhAAcQAAAEYAAAANAAAA0G4QAHEAAABKAAAAHgAAAFRoaXMgaXMgYSBidWcgaW4gdGhlIHByb2dyYW0uIFRoZXJlIHNob3VsZCBvbmx5IGJlIHZhbHVlcyBiZXR3ZWVuIDAuLjMvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2Jsb2Nrcy9saXRlcmFsc19zZWN0aW9uLnJzAPJvEABtAAAAewAAADQAAADybxAAbQAAAJAAAABXAAAA8m8QAG0AAACXAAAAKgAAAPJvEABtAAAAmAAAACoAAADybxAAbQAAAJsAAAAaAAAA8m8QAG0AAACoAAAAGgAAAPJvEABtAAAAtAAAAEQAAADybxAAbQAAALgAAABGAAAA8m8QAG0AAADAAAAAKgAAAPJvEABtAAAAwQAAACsAAADybxAAbQAAAMUAAABIAAAA8m8QAG0AAADNAAAAKgAAAPJvEABtAAAAzgAAACsAAADybxAAbQAAANMAAAAuAAAA8m8QAG0AAADUAAAALgAAAENhbnQgcmV0dXJuIHRoaXMgbWFueSBiaXRzL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyLnJzAGpxEABpAAAANgAAAA0AAABqcRAAaQAAAE8AAAAjAAAAYXNzZXJ0aW9uIGZhaWxlZDogbiAtIGJpdF9zaGlmdCA9PSBiaXRzX2luX2xhc3RfYnl0ZV9uZWVkZWQAanEQAGkAAABtAAAADQAAAGpxEABpAAAAcQAAAB8AAABqcRAAaQAAAGgAAAAkAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pZHggJSA4ID09IDAAanEQAGkAAABkAAAADQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaWR4ID09IG9sZF9pZHggKyBuAAAAanEQAGkAAAB3AAAACQAAAFNlcV9zdW06ICBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZGlmZmVyZW5jZSBpbiBidWZmZXJzaXplOiAAANByEAAJAAAA2XIQADEAAAAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3NlcXVlbmNlX2V4ZWN1dGlvbi5ycwAAABxzEABxAAAALwAAAAUAAAAccxAAcQAAAAsAAAAkAAAAHHMQAHEAAAAVAAAANAAAAEFsbG9jYXRpbmcgbmV3IHNwYWNlIGZvciB0aGUgcmluZ2J1ZmZlciBmYWlsZWQvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3JpbmdidWZmZXIucnMA7nMQAGkAAABhAAAAIwAAAENvdWxkIG5vdCBjcmVhdGUgbGF5b3V0IGZvciB1OCBhcnJheSBvZiBzaXplIAAAAGh0EAAtAAAA7nMQAGkAAABaAAAAIQAAAO5zEABpAAAAtAAAABUAAADucxAAaQAAAL4AAAAVAAAA7nMQAGkAAAB3AQAAHQAAAO5zEABpAAAAzgEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwDwdBAAawAAAKIAAAAZAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9saXRlcmFsc19zZWN0aW9uX2RlY29kZXIucnMAbHUQAHcAAAAUAAAAIgAAAGx1EAB3AAAAGAAAAE0AAABsdRAAdwAAADQAAAAZAAAAbHUQAHcAAAByAAAAGAAAAGx1EAB3AAAAkQAAABQAAABhc3NlcnRpb24gZmFpbGVkOiBudW1fc3RyZWFtcyA9PSAxAABsdRAAdwAAAIAAAAAJAAAAbHUQAHcAAABFAAAAGQAAAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2Rpbmcvc2VxdWVuY2Vfc2VjdGlvbl9kZWNvZGVyLnJzAHh2EAB3AAAAGAAAAB0AAAB4dhAAdwAAAHUAAAAQAAAAeHYQAHcAAADAAAAAEAAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IElsbGVnYWwgbGl0ZXJhbCBsZW5ndGggY29kZSB3YXM6IAAgdxAASwAAAHh2EAB3AAAA+gAAAA4AAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBJbGxlZ2FsIG1hdGNoIGxlbmd0aCBjb2RlIHdhczogAAAAhHcQAEkAAAB4dhAAdwAAABoBAAAOAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAD/////////////////////AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA//////////////////////////8BAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA/////////////////////////////////////3h2EAB3AAAAdgEAABwAAAB4dhAAdwAAAFMBAAAcAAAAAQEBAQICAwMEBgcICQoLDA0ODxAQAAAAEgAAABQAAAAWAAAAGAAAABwAAAAgAAAAKAAAADAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAEBAQECAgMDBAQFBwgJCgsMDQ4PEAAAACMAAAAlAAAAJwAAACkAAAArAAAALwAAADMAAAA7AAAAQwAAAFMAAABjAAAAgwAAAAMBAAADAgAAAwQAAAMIAAADEAAAAyAAAANAAAADgAAAAwABAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3R3b3gtaGFzaC0yLjEuMC9zcmMveHhoYXNoNjQucnMAAACwehAAYQAAAFQAAAAfAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9kZWNvZGVidWZmZXIucnMAJHsQAGsAAAAaAAAAHgAAACR7EABrAAAAnQAAADQAAAAkexAAawAAAOoAAAAeAAAAUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVyZAAAAAAAAAAEAAAABAAAAMoBAAAAAAAABAAAAAQAAADQAQAAYXNzZXJ0aW9uIGZhaWxlZDogeCA+IDAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2h1ZmYwL2h1ZmYwX2RlY29kZXIucnMTfBAAaQAAADEAAAAFAAAAE3wQAGkAAAA+AAAAGgAAABN8EABpAAAAUAAAACkAAAATfBAAaQAAAGgAAAAWAAAAE3wQAGkAAABqAAAAEwAAABN8EABpAAAAawAAABgAAAATfBAAaQAAAGwAAAAbAAAAE3wQAGkAAAAdAQAANgAAABN8EABpAAAAHQEAACUAAAATfBAAaQAAAB8BAAA2AAAAE3wQAGkAAAAfAQAAJQAAABN8EABpAAAA6AAAACIAAAATfBAAaQAAAPIAAAAiAAAAE3wQAGkAAAD3AAAAJgAAABN8EABpAAAA7QAAACYAAAATfBAAaQAAAFcBAAASAAAAE3wQAGkAAABfAQAAGAAAABN8EABpAAAAZQEAABUAAAATfBAAaQAAAG8BAAAbAAAAE3wQAGkAAABxAQAAGgAAABN8EABpAAAAeAEAAB4AAAByYW5rX2lkeFswXTogIHNob3VsZCBiZTogAAAAzH0QAA0AAADZfRAADAAAABN8EABpAAAAdwEAAAkAAAATfBAAaQAAAH8BAAAsAAAAE3wQAGkAAACEAQAAMQAAABN8EABpAAAAiAEAACAAAAATfBAAaQAAAIkBAAAgAAAAE3wQAGkAAABzAQAARQAAABN8EABpAAAAdAEAACEAAAATfBAAaQAAAHMBAAAeAAAAE3wQAGkAAABhAQAAGwAAABN8EABpAAAATwEAACcAAAATfBAAaQAAAFQBAAAWAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAqH4QAGsAAACiAAAAGQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzACR/EABrAAAAogAAABkAAABhc3NlcnRpb24gZmFpbGVkOiB4ID4gMC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZnNlL2ZzZV9kZWNvZGVyLnJzt38QAGUAAAA9AAAABQAAALd/EABlAAAAWgAAACcAAAC3fxAAZQAAAGUAAAAnAAAAt38QAGUAAABwAAAAIwAAALd/EABlAAAAcQAAAB0AAAC3fxAAZQAAAOIAAAApAAAAt38QAGUAAADkAAAAMQAAALd/EABlAAAA5gAAADMAAABhc3NlcnRpb24gZmFpbGVkOiBuYiA8PSBzZWxmLmFjY3VyYWN5X2xvZwAAALd/EABlAAAA6wAAAA0AAAC3fxAAZQAAANIAAAAtAAAAt38QAGUAAADAAAAALQAAALd/EABlAAAAOQEAAEEAAAC3fxAAZQAAAB4BAAAnAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHJvYiA9PSAtMbd/EABlAAAAJAEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy92ZWMvbW9kLnJzAAAARIEQAG0AAAA9CgAAJAAAAAAAAAAQAAAABAAAANQBAADVAQAA1gEAACAgICA6IAAAAQAAAAAAAADggRAAAgAAACAgICAgICAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL3B0ci9tb2QucnMA+4EQAGwAAAALAgAAAQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvc2xpY2UvaW5kZXgucnN4ghAAcAAAAEwDAAA0AAAAeIIQAHAAAABTAwAAMgAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuKS9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAAMoMQAGwAAAD7BwAAHQAAADKDEABsAAAAAwgAAB0AAAAygxAAbAAAAI0FAAAbAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5ycwAAANCDEABtAAAAKgIAABEAAADXAQAADAAAAAQAAADYAQAA2QEAANoBAADdAQAADAAAAAQAAADeAQAA3wEAANoBAEGIicIAC4UJAQAAAOABAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAMeEEABsAAAA3woAAA4AAABFcnJvcgAAAMeEEABsAAAAjQUAABsAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbinHhBAAbAAAAMAFAAANAAAAAAAAABAAAAAEAAAA1AEAANUBAADWAQAAYmFja3RyYWNlIGNhcHR1cmUgZmFpbGVkL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYW55aG93LTEuMC45OC9zcmMvZXJyb3IucnPMhRAAXAAAAGcEAAAOAAAAAQAAAAAAAAA6IAAAQIYQAAIAAAAKCkNhdXNlZCBieToKCgpzdGFjayBiYWNrdHJhY2U6U3RhY2sgYmFja3RyYWNlOgprhhAAEQAAAFMvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAACFhhAAeQAAALMHAAAJAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy43Ny9zcmMvbGliLnJzAAAQhxAAWgAAAPsYAAABAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMDAvc3JjL2NvbnZlcnQvc2xpY2VzLnJzfIcQAGwAAAAkAQAADgAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkSnNWYWx1ZSgpACqIEAAIAAAAMogQAAEAAABMYXp5IGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWQAAESIEAAqAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvb25jZV9jZWxsLTEuMjEuMy9zcmMvbGliLnJzAAAAeIgQAF0AAAAIAwAAGQAAAHJlZW50cmFudCBpbml0AADoiBAADgAAAHiIEABdAAAAegIAAA0AQZiSwgALlSMEAAAABAAAAPYBAAAvcnVzdGMvMDVmOTg0NmY4OTNiMDlhMWJlMWZjODU2MGUzM2ZjM2M4MTVjZmVjYi9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAAJIkQAEoAAACiAAAAGQAAAC9ydXN0Yy8wNWY5ODQ2Zjg5M2IwOWExYmUxZmM4NTYwZTMzZmMzYzgxNWNmZWNiL2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwCAiRAASwAAAI0FAAAbAAAAL3J1c3RjLzA1Zjk4NDZmODkzYjA5YTFiZTFmYzg1NjBlMzNmYzNjODE1Y2ZlY2IvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc9yJEABMAAAAKgIAABEAAAA6AAAA9wEAAAwAAAAEAAAA+AEAAPkBAAD6AQAAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuNy9zcmMvZGxtYWxsb2MucnNhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAFSKEAApAAAAqAQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAABUihAAKQAAAK4EAAANAAAAQWNjZXNzRXJyb3JjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uOiAAB4sQAEgAAABsaWJyYXJ5L3N0ZC9zcmMvYmFja3RyYWNlLnJzb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybXSLEAAoAAAAJAAAAAIAAACcixAAdW5zdXBwb3J0ZWQgYmFja3RyYWNlZGlzYWJsZWQgYmFja3RyYWNlAFiLEAAcAAAAigEAAB0AAAD7AQAAEAAAAAQAAAD8AQAA/QEAAAEAAAAAAAAAZW50aXR5IG5vdCBmb3VuZHBlcm1pc3Npb24gZGVuaWVkY29ubmVjdGlvbiByZWZ1c2VkY29ubmVjdGlvbiByZXNldGhvc3QgdW5yZWFjaGFibGVuZXR3b3JrIHVucmVhY2hhYmxlY29ubmVjdGlvbiBhYm9ydGVkbm90IGNvbm5lY3RlZGFkZHJlc3MgaW4gdXNlYWRkcmVzcyBub3QgYXZhaWxhYmxlbmV0d29yayBkb3duYnJva2VuIHBpcGVlbnRpdHkgYWxyZWFkeSBleGlzdHNvcGVyYXRpb24gd291bGQgYmxvY2tub3QgYSBkaXJlY3RvcnlpcyBhIGRpcmVjdG9yeWRpcmVjdG9yeSBub3QgZW1wdHlyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWZpbGVzeXN0ZW0gbG9vcCBvciBpbmRpcmVjdGlvbiBsaW1pdCAoZS5nLiBzeW1saW5rIGxvb3Apc3RhbGUgbmV0d29yayBmaWxlIGhhbmRsZWludmFsaWQgaW5wdXQgcGFyYW1ldGVyaW52YWxpZCBkYXRhdGltZWQgb3V0d3JpdGUgemVyb25vIHN0b3JhZ2Ugc3BhY2VzZWVrIG9uIHVuc2Vla2FibGUgZmlsZXF1b3RhIGV4Y2VlZGVkZmlsZSB0b28gbGFyZ2VyZXNvdXJjZSBidXN5ZXhlY3V0YWJsZSBmaWxlIGJ1c3lkZWFkbG9ja2Nyb3NzLWRldmljZSBsaW5rIG9yIHJlbmFtZXRvbyBtYW55IGxpbmtzaW52YWxpZCBmaWxlbmFtZWFyZ3VtZW50IGxpc3QgdG9vIGxvbmdvcGVyYXRpb24gaW50ZXJydXB0ZWR1bnN1cHBvcnRlZHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVvdXQgb2YgbWVtb3J5aW4gcHJvZ3Jlc3NvdGhlciBlcnJvcnVuY2F0ZWdvcml6ZWQgZXJyb3JPcwAAAAAABAAAAAQAAAD+AQAAY29kZQAAAAABAAAAAQAAAP8BAABraW5k9wEAAAwAAAAEAAAAAAIAAG1lc3NhZ2VLaW5kRXJyb3IAAAAACAAAAAQAAAABAgAAAAAAAAQAAAAEAAAAAgIAAEN1c3RvbWVycm9yIChvcyBlcnJvciApAAEAAAAAAAAAZ48QAAsAAAByjxAAAQAAADogY2Fubm90IHJlY3Vyc2l2ZWx5IGFjcXVpcmUgbXV0ZXgAAI6PEAAgAAAAbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnO4jxAALAAAABMAAAAJAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvcG9pc29uL29uY2UucnMA9I8QACMAAACbAAAAMgAAAGxpYnJhcnkvc3RkL3NyYy9zeW5jL2xhenlfbG9jay5ycwAAACiQEAAhAAAA0QAAABMAAAA8dW5rbm93bj7vv71tZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAABokBAAFQAAAH2QEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJznJAQABgAAABjAQAACQAAAAoAAAD3AQAADAAAAAQAAAADAgAAAAAAAAgAAAAEAAAABAIAAAAAAAAIAAAABAAAAAUCAAAGAgAABwIAAAgCAAAJAgAAEAAAAAQAAAAKAgAACwIAAAwCAAANAgAAbGlicmFyeS9zdGQvc3JjLy4uLy4uL2JhY2t0cmFjZS9zcmMvc3ltYm9saXplL21vZC5ycyCREAA0AAAAZwEAADAAAAABAAAAAAAAAIyPEAACAAAAIC0gAAEAAAAAAAAAdJEQAAMAAAAgICAgICAgICAgICAgICAgICAgYXQgAAA4ihAAAQAAAE5vdEZvdW5kUGVybWlzc2lvbkRlbmllZENvbm5lY3Rpb25SZWZ1c2VkQ29ubmVjdGlvblJlc2V0SG9zdFVucmVhY2hhYmxlTmV0d29ya1VucmVhY2hhYmxlQ29ubmVjdGlvbkFib3J0ZWROb3RDb25uZWN0ZWRBZGRySW5Vc2VBZGRyTm90QXZhaWxhYmxlTmV0d29ya0Rvd25Ccm9rZW5QaXBlQWxyZWFkeUV4aXN0c1dvdWxkQmxvY2tOb3RBRGlyZWN0b3J5SXNBRGlyZWN0b3J5RGlyZWN0b3J5Tm90RW1wdHlSZWFkT25seUZpbGVzeXN0ZW1GaWxlc3lzdGVtTG9vcFN0YWxlTmV0d29ya0ZpbGVIYW5kbGVJbnZhbGlkSW5wdXRJbnZhbGlkRGF0YVRpbWVkT3V0V3JpdGVaZXJvU3RvcmFnZUZ1bGxOb3RTZWVrYWJsZVF1b3RhRXhjZWVkZWRGaWxlVG9vTGFyZ2VSZXNvdXJjZUJ1c3lFeGVjdXRhYmxlRmlsZUJ1c3lEZWFkbG9ja0Nyb3NzZXNEZXZpY2VzVG9vTWFueUxpbmtzSW52YWxpZEZpbGVuYW1lQXJndW1lbnRMaXN0VG9vTG9uZ0ludGVycnVwdGVkVW5zdXBwb3J0ZWRVbmV4cGVjdGVkRW9mT3V0T2ZNZW1vcnlJblByb2dyZXNzT3RoZXJVbmNhdGVnb3JpemVkb3BlcmF0aW9uIHN1Y2Nlc3NmdWxPbmNlIGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWTakxAAKgAAAG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgcGVyZm9ybWVkIHJlY3Vyc2l2ZWx5DJQQADgAAAAQAAAAEQAA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", import.meta.url); + } + const imports = __wbg_get_imports(); + if (typeof module_or_path === "string" || typeof Request === "function" && module_or_path instanceof Request || typeof URL === "function" && module_or_path instanceof URL) { + module_or_path = fetch(module_or_path); + } + const { instance, module } = await __wbg_load(await module_or_path, imports); + return __wbg_finalize_init(instance, module); +} +const LN_SCALE_MIN = -9; +const LN_SCALE_MAX = 9; +const LN_RESCALE = (LN_SCALE_MAX - LN_SCALE_MIN) / 254; +const SPLAT_TEX_WIDTH_BITS = 11; +const SPLAT_TEX_HEIGHT_BITS = 11; +const SPLAT_TEX_WIDTH = 1 << SPLAT_TEX_WIDTH_BITS; +const SPLAT_TEX_HEIGHT = 1 << SPLAT_TEX_HEIGHT_BITS; +const SPLAT_TEX_MIN_HEIGHT = 1; +function isBoolType(type) { + return type === "bool" || type === "bvec2" || type === "bvec3" || type === "bvec4"; +} +function isScalarType(type) { + return type === "int" || type === "uint" || type === "float"; +} +function isIntType(type) { + return type === "int" || type === "ivec2" || type === "ivec3" || type === "ivec4"; +} +function isUintType(type) { + return type === "uint" || type === "uvec2" || type === "uvec3" || type === "uvec4"; +} +function isFloatType(type) { + return type === "float" || type === "vec2" || type === "vec3" || type === "vec4"; +} +function isMatFloatType(type) { + return type === "mat2" || type === "mat2x2" || type === "mat2x3" || type === "mat2x4" || type === "mat3" || type === "mat3x2" || type === "mat3x3" || type === "mat3x4" || type === "mat4" || type === "mat4x2" || type === "mat4x3" || type === "mat4x4"; +} +function isAllFloatType(type) { + return isFloatType(type) || isMatFloatType(type); +} +function isVector2Type(type) { + return type === "vec2" || type === "ivec2" || type === "uvec2"; +} +function isVector3Type(type) { + return type === "vec3" || type === "ivec3" || type === "uvec3"; +} +function isVector4Type(type) { + return type === "vec4" || type === "ivec4" || type === "uvec4"; +} +function isVectorType(type) { + return isVector2Type(type) || isVector3Type(type) || isVector4Type(type); +} +function isMat2(type) { + return type === "mat2" || type === "mat2x2"; +} +function isMat3(type) { + return type === "mat3" || type === "mat3x3"; +} +function isMat4(type) { + return type === "mat4" || type === "mat4x4"; +} +function vectorElementType(type) { + switch (type) { + case "vec2": + return "float"; + case "vec3": + return "float"; + case "vec4": + return "float"; + case "ivec2": + return "int"; + case "ivec3": + return "int"; + case "ivec4": + return "int"; + case "uvec2": + return "uint"; + case "uvec3": + return "uint"; + case "uvec4": + return "uint"; + default: + throw new Error(`Invalid vector type: ${type}`); + } +} +function vectorDim(type) { + switch (type) { + case "vec2": + case "ivec2": + case "uvec2": + return 2; + case "vec3": + case "ivec3": + case "uvec3": + return 3; + case "vec4": + case "ivec4": + case "uvec4": + return 4; + default: + throw new Error(`Invalid vector type: ${type}`); + } +} +function sameSizeVec(type) { + if (isScalarType(type)) { + return "float"; + } + if (isVector2Type(type)) { + return "vec2"; + } + if (isVector3Type(type)) { + return "vec3"; + } + if (isVector4Type(type)) { + return "vec4"; + } + throw new Error(`Invalid vector type: ${type}`); +} +function sameSizeUvec(type) { + if (isScalarType(type)) { + return "uint"; + } + if (isVector2Type(type)) { + return "uvec2"; + } + if (isVector3Type(type)) { + return "uvec3"; + } + if (isVector4Type(type)) { + return "uvec4"; + } + throw new Error(`Invalid vector type: ${type}`); +} +function sameSizeIvec(type) { + if (isScalarType(type)) { + return "int"; + } + if (isVector2Type(type)) { + return "ivec2"; + } + if (isVector3Type(type)) { + return "ivec3"; + } + if (isVector4Type(type)) { + return "ivec4"; + } + throw new Error(`Invalid vector type: ${type}`); +} +function typeLiteral(type) { + if (typeof type === "string") { + return type; + } + if (typeof type === "object" && type.type) { + return type.type; + } + throw new Error(`Invalid DynoType: ${String(type)}`); +} +function numberAsInt(value) { + return Math.trunc(value).toString(); +} +function numberAsUint(value) { + const v = Math.max(0, Math.trunc(value)); + return `${v.toString()}u`; +} +function numberAsFloat(value) { + return value === Number.POSITIVE_INFINITY ? "INFINITY" : value === Number.NEGATIVE_INFINITY ? "-INFINITY" : Number.isInteger(value) ? value.toFixed(1) : value.toString(); +} +function valType(val) { + if (val instanceof DynoValue) { + return val.type; + } + const value = val.dynoOut(); + return value.type; +} +class DynoValue { + constructor(type) { + this.__isDynoValue = true; + this.type = type; + } +} +class DynoOutput extends DynoValue { + constructor(dyno2, key) { + super(dyno2.outTypes[key]); + this.dyno = dyno2; + this.key = key; + } +} +class DynoLiteral extends DynoValue { + constructor(type, literal) { + super(type); + this.literal = literal; + } + getLiteral() { + return this.literal; + } +} +function dynoLiteral(type, literal) { + return new DynoLiteral(type, literal); +} +class DynoConst extends DynoLiteral { + constructor(type, value) { + super(type, ""); + this.value = value; + } + getLiteral() { + const { type, value } = this; + switch (type) { + case "bool": + return value ? "true" : "false"; + case "uint": + return numberAsUint(value); + case "int": + return numberAsInt(value); + case "float": + return numberAsFloat(value); + case "bvec2": { + const v = value; + return `bvec2(${v[0]}, ${v[1]})`; + } + case "uvec2": { + if (value instanceof THREE.Vector2) { + return `uvec2(${numberAsUint(value.x)}, ${numberAsUint(value.y)})`; + } + const v = value; + return `uvec2(${numberAsUint(v[0])}, ${numberAsUint(v[1])})`; + } + case "ivec2": { + if (value instanceof THREE.Vector2) { + return `ivec2(${numberAsInt(value.x)}, ${numberAsInt(value.y)})`; + } + const v = value; + return `ivec2(${numberAsInt(v[0])}, ${numberAsInt(v[1])})`; + } + case "vec2": { + if (value instanceof THREE.Vector2) { + return `vec2(${numberAsFloat(value.x)}, ${numberAsFloat(value.y)})`; + } + const v = value; + return `vec2(${numberAsFloat(v[0])}, ${numberAsFloat(v[1])})`; + } + case "bvec3": { + const v = value; + return `bvec3(${v[0]}, ${v[1]}, ${v[2]})`; + } + case "uvec3": { + if (value instanceof THREE.Vector3) { + return `uvec3(${numberAsUint(value.x)}, ${numberAsUint(value.y)}, ${numberAsUint(value.z)})`; + } + const v = value; + return `uvec3(${numberAsUint(v[0])}, ${numberAsUint(v[1])}, ${numberAsUint(v[2])})`; + } + case "ivec3": { + if (value instanceof THREE.Vector3) { + return `ivec3(${numberAsInt(value.x)}, ${numberAsInt(value.y)}, ${numberAsInt(value.z)})`; + } + const v = value; + return `ivec3(${numberAsInt(v[0])}, ${numberAsInt(v[1])}, ${numberAsInt(v[2])})`; + } + case "vec3": { + if (value instanceof THREE.Vector3) { + return `vec3(${numberAsFloat(value.x)}, ${numberAsFloat(value.y)}, ${numberAsFloat(value.z)})`; + } + const v = value; + return `vec3(${numberAsFloat(v[0])}, ${numberAsFloat(v[1])}, ${numberAsFloat(v[2])})`; + } + case "bvec4": { + const v = value; + return `bvec4(${v[0]}, ${v[1]}, ${v[2]}, ${v[3]})`; + } + case "uvec4": { + if (value instanceof THREE.Vector4) { + return `uvec4(${numberAsUint(value.x)}, ${numberAsUint(value.y)}, ${numberAsUint(value.z)}, ${numberAsUint(value.w)})`; + } + const v = value; + return `uvec4(${numberAsUint(v[0])}, ${numberAsUint(v[1])}, ${numberAsUint(v[2])}, ${numberAsUint(v[3])})`; + } + case "ivec4": { + if (value instanceof THREE.Vector4) { + return `ivec4(${numberAsInt(value.x)}, ${numberAsInt(value.y)}, ${numberAsInt(value.z)}, ${numberAsInt(value.w)})`; + } + const v = value; + return `ivec4(${numberAsInt(v[0])}, ${numberAsInt(v[1])}, ${numberAsInt(v[2])}, ${numberAsInt(v[3])})`; + } + case "vec4": { + if (value instanceof THREE.Vector4) { + return `vec4(${numberAsFloat(value.x)}, ${numberAsFloat(value.y)}, ${numberAsFloat(value.z)}, ${numberAsFloat(value.w)})`; + } + if (value instanceof THREE.Quaternion) { + return `vec4(${numberAsFloat(value.x)}, ${numberAsFloat(value.y)}, ${numberAsFloat(value.z)}, ${numberAsFloat(value.w)})`; + } + const v = value; + return `vec4(${numberAsFloat(v[0])}, ${numberAsFloat(v[1])}, ${numberAsFloat(v[2])}, ${numberAsFloat(v[3])})`; + } + case "mat2": + case "mat2x2": { + const m = value; + const e = m instanceof THREE.Matrix2 ? m.elements : value; + const arg = new Array(4).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat2x3": { + const e = value; + const arg = new Array(6).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat2x4": { + const e = value; + const arg = new Array(8).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat3": + case "mat3x3": { + const m = value; + const e = m instanceof THREE.Matrix3 ? m.elements : value; + const arg = new Array(9).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat3x2": { + const e = value; + const arg = new Array(6).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat3x4": { + const e = value; + const arg = new Array(12).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat4": + case "mat4x4": { + const m = value; + const e = m instanceof THREE.Matrix4 ? m.elements : value; + const arg = new Array(16).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat4x2": { + const e = value; + const arg = new Array(8).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + case "mat4x3": { + const e = value; + const arg = new Array(12).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type}(${arg.join(", ")})`; + } + default: + throw new Error(`Type not implemented: ${String(type)}`); + } + } +} +function dynoConst(type, value) { + return new DynoConst(type, value); +} +function literalZero(type) { + const typeString = String(type); + if (isBoolType(type)) { + return `${typeString}(false)`; + } + if (isAllFloatType(type)) { + return `${typeString}(0.0)`; + } + if (isIntType(type)) { + return `${typeString}(0)`; + } + if (isUintType(type)) { + return `${typeString}(0u)`; + } + throw new Error(`Type not implemented: ${typeString}`); +} +function literalOne(type) { + const typeString = String(type); + if (isBoolType(type)) { + return `${typeString}(true)`; + } + if (isAllFloatType(type)) { + return `${typeString}(1.0)`; + } + if (isIntType(type)) { + return `${typeString}(1)`; + } + if (isUintType(type)) { + return `${typeString}(1u)`; + } + throw new Error(`Type not implemented: ${typeString}`); +} +function literalNegOne(type) { + const typeString = String(type); + if (isBoolType(type)) { + return `${typeString}(true)`; + } + if (isAllFloatType(type)) { + return `${typeString}(-1.0)`; + } + if (isIntType(type)) { + return `${typeString}(-1)`; + } + if (isUintType(type)) { + return `${typeString}(0xFFFFFFFFu)`; + } + throw new Error(`Type not implemented: ${typeString}`); +} +const DEFAULT_INDENT = " "; +class Compilation { + constructor({ indent } = {}) { + this.globals = /* @__PURE__ */ new Set(); + this.statements = []; + this.uniforms = {}; + this.declares = /* @__PURE__ */ new Set(); + this.updaters = []; + this.sequence = 0; + this.indent = DEFAULT_INDENT; + this.indent = indent ?? DEFAULT_INDENT; + } + nextSequence() { + return this.sequence++; + } +} +class Dyno { + constructor({ + inTypes, + outTypes, + inputs, + update, + globals, + statements, + generate + }) { + this.inTypes = inTypes ?? {}; + this.outTypes = outTypes ?? {}; + this.inputs = inputs ?? {}; + this.update = update; + this.globals = globals; + this.statements = statements; + this.generate = generate ?? (({ inputs: inputs2, outputs, compile }) => { + var _a2, _b2; + return { + globals: (_a2 = this.globals) == null ? void 0 : _a2.call(this, { inputs: inputs2, outputs, compile }), + statements: (_b2 = this.statements) == null ? void 0 : _b2.call(this, { inputs: inputs2, outputs, compile }) + }; + }); + } + get outputs() { + const outputs = {}; + for (const key in this.outTypes) { + outputs[key] = new DynoOutput(this, key); + } + return outputs; + } + apply(inputs) { + Object.assign(this.inputs, inputs); + return this.outputs; + } + compile({ + inputs, + outputs, + compile + }) { + const result = [ + `// ${this.constructor.name}(${Object.values(inputs).join(", ")}) => (${Object.values(outputs).join(", ")})` + ]; + const declares = []; + for (const key in outputs) { + const name = outputs[key]; + if (name && !compile.declares.has(name)) { + compile.declares.add(name); + declares.push(key); + } + } + const { globals, statements, uniforms } = this.generate({ + inputs, + outputs, + compile + }); + for (const global of globals ?? []) { + compile.globals.add(global); + } + for (const key in uniforms) { + compile.uniforms[key] = uniforms[key]; + } + if (this.update) { + compile.updaters.push(this.update); + } + for (const key of declares) { + const name = outputs[key]; + if (name) { + if (!compile.uniforms[name]) { + result.push(`${dynoDeclare(name, this.outTypes[key])};`); + } + } + } + if (statements == null ? void 0 : statements.length) { + result.push("{"); + result.push(...statements.map((line) => compile.indent + line)); + result.push("}"); + } + return result; + } +} +class DynoBlock extends Dyno { + constructor({ + inTypes, + outTypes, + inputs, + update, + globals, + construct + }) { + super({ + inTypes, + outTypes, + inputs, + update, + globals, + generate: (args) => this.generateBlock(args) + }); + this.construct = construct; + } + generateBlock({ + inputs, + outputs, + compile + }) { + var _a2, _b2; + const blockInputs = {}; + const blockOutputs = {}; + for (const key in inputs) { + if (inputs[key] != null) { + blockInputs[key] = new DynoLiteral(this.inTypes[key], inputs[key]); + } + } + for (const key in outputs) { + if (outputs[key] != null) { + blockOutputs[key] = new DynoValue(this.outTypes[key]); + } + } + const options = { roots: [] }; + const returned = this.construct(blockInputs, blockOutputs, options); + for (const global of ((_a2 = this.globals) == null ? void 0 : _a2.call(this, { inputs, outputs, compile })) ?? []) { + compile.globals.add(global); + } + const ordering = []; + const nodeOuts = /* @__PURE__ */ new Map(); + function visit(node, outKey, outName) { + let outs = nodeOuts.get(node); + if (!outs) { + outs = { + sequence: compile.nextSequence(), + outNames: /* @__PURE__ */ new Map(), + newOuts: /* @__PURE__ */ new Set() + }; + nodeOuts.set(node, outs); + for (const key in node.inputs) { + let input = node.inputs[key]; + while (input) { + if (input instanceof DynoValue) { + if (input instanceof DynoOutput) { + visit(input.dyno, input.key); + } + break; + } + input = input.dynoOut(); + } + } + ordering.push(node); + } + if (outKey) { + if (!outName) { + outs.newOuts.add(outKey); + } + outs.outNames.set(outKey, outName ?? `${outKey}_${outs.sequence}`); + } + } + for (const root of options.roots) { + visit(root); + } + for (const key in blockOutputs) { + let value = (returned == null ? void 0 : returned[key]) ?? blockOutputs[key]; + while (value) { + if (value instanceof DynoValue) { + if (value instanceof DynoOutput) { + visit(value.dyno, value.key, outputs[key]); + } + break; + } + value = value.dynoOut(); + } + blockOutputs[key] = value; + } + const steps = []; + for (const dyno2 of ordering) { + const inputs2 = {}; + const outputs2 = {}; + for (const key in dyno2.inputs) { + let value = dyno2.inputs[key]; + while (value) { + if (value instanceof DynoValue) { + if (value instanceof DynoLiteral) { + inputs2[key] = value.getLiteral(); + } else if (value instanceof DynoOutput) { + const source = (_b2 = nodeOuts.get(value.dyno)) == null ? void 0 : _b2.outNames.get(value.key); + if (!source) { + throw new Error( + `Source not found for ${value.dyno.constructor.name}.${value.key}` + ); + } + inputs2[key] = source; + } + break; + } + value = value.dynoOut(); + } + } + const outs = nodeOuts.get(dyno2) ?? { outNames: /* @__PURE__ */ new Map() }; + for (const [key, name] of outs.outNames.entries()) { + outputs2[key] = name; + } + const newSteps = dyno2.compile({ inputs: inputs2, outputs: outputs2, compile }); + steps.push(newSteps); + } + const literalOutputs = []; + for (const key in outputs) { + if (blockOutputs[key] instanceof DynoLiteral) { + literalOutputs.push( + `${outputs[key]} = ${blockOutputs[key].getLiteral()};` + ); + } + } + if (literalOutputs.length > 0) { + steps.push(literalOutputs); + } + const statements = steps.flatMap((step2, index) => { + return index === 0 ? step2 : ["", ...step2]; + }); + return { statements }; + } +} +function dynoBlock(inTypes, outTypes, construct, { update, globals } = {}) { + return new DynoBlock({ inTypes, outTypes, construct, update, globals }); +} +function dyno$1({ + inTypes, + outTypes, + inputs, + update, + globals, + statements, + generate +}) { + return new Dyno({ + inTypes, + outTypes, + inputs, + update, + globals, + statements, + generate + }); +} +function dynoDeclare(name, type, count) { + const typeStr = typeof type === "string" ? type : type.type; + if (!typeStr) { + throw new Error(`Invalid DynoType: ${String(type)}`); + } + return `${typeStr} ${name}${count != null ? `[${count}]` : ""}`; +} +function unindentLines(s) { + var _a2; + let seenNonEmpty = false; + const lines = s.split("\n").map((line) => { + const trimmedLine = line.trimEnd(); + if (seenNonEmpty) { + return trimmedLine; + } + if (trimmedLine.length > 0) { + seenNonEmpty = true; + return trimmedLine; + } + return null; + }).filter((line) => line != null); + while (lines.length > 0 && lines[lines.length - 1].length === 0) { + lines.pop(); + } + if (lines.length === 0) { + return []; + } + const indent = (_a2 = lines[0].match(/^\s*/)) == null ? void 0 : _a2[0]; + if (!indent) { + return lines; + } + const regex = new RegExp(`^${indent}`); + return lines.map((line) => line.replace(regex, "")); +} +function unindent(s) { + return unindentLines(s).join("\n"); +} +class UnaryOp extends Dyno { + constructor({ + a, + outKey, + outTypeFunc + }) { + const inTypes = { a: valType(a) }; + const outType = outTypeFunc(valType(a)); + const outTypes = { [outKey]: outType }; + super({ inTypes, outTypes, inputs: { a } }); + this.outKey = outKey; + } + dynoOut() { + return new DynoOutput(this, this.outKey); + } +} +class BinaryOp extends Dyno { + constructor({ + a, + b, + outKey, + outTypeFunc + }) { + const inTypes = { a: valType(a), b: valType(b) }; + const outType = outTypeFunc(valType(a), valType(b)); + const outTypes = { [outKey]: outType }; + super({ inTypes, outTypes, inputs: { a, b } }); + this.outKey = outKey; + } + dynoOut() { + return new DynoOutput(this, this.outKey); + } +} +class TrinaryOp extends Dyno { + constructor({ + a, + b, + c, + outKey, + outTypeFunc + }) { + const inTypes = { a: valType(a), b: valType(b), c: valType(c) }; + const outType = outTypeFunc(valType(a), valType(b), valType(c)); + const outTypes = { [outKey]: outType }; + super({ inTypes, outTypes, inputs: { a, b, c } }); + this.outKey = outKey; + } + dynoOut() { + return new DynoOutput(this, this.outKey); + } +} +const Gsplat = { type: "Gsplat" }; +const TPackedSplats = { type: "PackedSplats" }; +const numPackedSplats = (packedSplats) => new NumPackedSplats({ packedSplats }); +const readPackedSplat = (packedSplats, index) => new ReadPackedSplat({ packedSplats, index }); +const readPackedSplatRange = (packedSplats, index, base, count) => new ReadPackedSplatRange({ packedSplats, index, base, count }); +const splitGsplat = (gsplat) => new SplitGsplat({ gsplat }); +const combineGsplat = ({ + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b +}) => { + return new CombineGsplat({ + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b + }); +}; +const gsplatNormal = (gsplat) => new GsplatNormal({ gsplat }); +const transformGsplat = (gsplat, { + scale, + rotate, + translate, + recolor +}) => { + return new TransformGsplat({ gsplat, scale, rotate, translate, recolor }); +}; +const defineGsplat = unindent(` + struct Gsplat { + vec3 center; + uint flags; + vec3 scales; + int index; + vec4 quaternion; + vec4 rgba; + }; + const uint GSPLAT_FLAG_ACTIVE = 1u << 0u; + + bool isGsplatActive(uint flags) { + return (flags & GSPLAT_FLAG_ACTIVE) != 0u; + } +`); +const definePackedSplats = unindent(` + struct PackedSplats { + usampler2DArray texture; + int numSplats; + }; +`); +class NumPackedSplats extends UnaryOp { + constructor({ + packedSplats + }) { + super({ a: packedSplats, outKey: "numSplats", outTypeFunc: () => "int" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.numSplats} = ${inputs.a}.numSplats;` + ]; + } +} +const defineReadPackedSplat = unindent(` + bool readPackedSplat(usampler2DArray texture, int numSplats, int index, out Gsplat gsplat) { + if ((index >= 0) && (index < numSplats)) { + uvec4 packed = texelFetch(texture, splatTexCoord(index), 0); + unpackSplat(packed, gsplat.center, gsplat.scales, gsplat.quaternion, gsplat.rgba); + return true; + } else { + return false; + } + } +`); +class ReadPackedSplat extends Dyno { + constructor({ + packedSplats, + index + }) { + super({ + inTypes: { packedSplats: TPackedSplats, index: "int" }, + outTypes: { gsplat: Gsplat }, + inputs: { packedSplats, index }, + globals: () => [defineGsplat, definePackedSplats, defineReadPackedSplat], + statements: ({ inputs, outputs }) => { + const { gsplat } = outputs; + if (!gsplat) { + return []; + } + const { packedSplats: packedSplats2, index: index2 } = inputs; + let statements; + if (packedSplats2 && index2) { + statements = unindentLines(` + if (readPackedSplat(${packedSplats2}.texture, ${packedSplats2}.numSplats, ${index2}, ${gsplat})) { + bool zeroSize = all(equal(${gsplat}.scales, vec3(0.0, 0.0, 0.0))); + ${gsplat}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE; + } else { + ${gsplat}.flags = 0u; + } + `); + } else { + statements = [`${gsplat}.flags = 0u;`]; + } + statements.push(`${gsplat}.index = ${index2 ?? "0"};`); + return statements; + } + }); + } + dynoOut() { + return new DynoOutput(this, "gsplat"); + } +} +class ReadPackedSplatRange extends Dyno { + constructor({ + packedSplats, + index, + base, + count + }) { + super({ + inTypes: { + packedSplats: TPackedSplats, + index: "int", + base: "int", + count: "int" + }, + outTypes: { gsplat: Gsplat }, + inputs: { packedSplats, index, base, count }, + globals: () => [defineGsplat, definePackedSplats, defineReadPackedSplat], + statements: ({ inputs, outputs }) => { + const { gsplat } = outputs; + if (!gsplat) { + return []; + } + const { packedSplats: packedSplats2, index: index2, base: base2, count: count2 } = inputs; + let statements; + if (packedSplats2 && index2 && base2 && count2) { + statements = unindentLines(` + ${gsplat}.flags = 0u; + if ((${index2} >= ${base2}) && (${index2} < (${base2} + ${count2}))) { + if (readPackedSplat(${packedSplats2}.texture, ${packedSplats2}.numSplats, ${index2}, ${gsplat})) { + bool zeroSize = all(equal(${gsplat}.scales, vec3(0.0, 0.0, 0.0))); + ${gsplat}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE; + } + } + `); + } else { + statements = [`${gsplat}.flags = 0u;`]; + } + statements.push(`${gsplat}.index = ${index2 ?? "0"};`); + return statements; + } + }); + } + dynoOut() { + return new DynoOutput(this, "gsplat"); + } +} +class SplitGsplat extends Dyno { + constructor({ gsplat }) { + super({ + inTypes: { gsplat: Gsplat }, + outTypes: { + flags: "uint", + active: "bool", + index: "int", + center: "vec3", + scales: "vec3", + quaternion: "vec4", + rgba: "vec4", + rgb: "vec3", + opacity: "float", + x: "float", + y: "float", + z: "float", + r: "float", + g: "float", + b: "float" + }, + inputs: { gsplat }, + globals: () => [defineGsplat], + statements: ({ inputs, outputs }) => { + const { gsplat: gsplat2 } = inputs; + const { + flags, + active, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b + } = outputs; + return [ + !flags ? null : `${flags} = ${gsplat2 ? `${gsplat2}.flags` : "0u"};`, + !active ? null : `${active} = isGsplatActive(${gsplat2 ? `${gsplat2}.flags` : "0u"});`, + !index ? null : `${index} = ${gsplat2 ? `${gsplat2}.index` : "0"};`, + !center ? null : `${center} = ${gsplat2 ? `${gsplat2}.center` : "vec3(0.0, 0.0, 0.0)"};`, + !scales ? null : `${scales} = ${gsplat2 ? `${gsplat2}.scales` : "vec3(0.0, 0.0, 0.0)"};`, + !quaternion ? null : `${quaternion} = ${gsplat2 ? `${gsplat2}.quaternion` : "vec4(0.0, 0.0, 0.0, 1.0)"};`, + !rgba ? null : `${rgba} = ${gsplat2 ? `${gsplat2}.rgba` : "vec4(0.0, 0.0, 0.0, 0.0)"};`, + !rgb ? null : `${rgb} = ${gsplat2 ? `${gsplat2}.rgba.rgb` : "vec3(0.0, 0.0, 0.0)"};`, + !opacity ? null : `${opacity} = ${gsplat2 ? `${gsplat2}.rgba.a` : "0.0"};`, + !x ? null : `${x} = ${gsplat2 ? `${gsplat2}.center.x` : "0.0"};`, + !y ? null : `${y} = ${gsplat2 ? `${gsplat2}.center.y` : "0.0"};`, + !z ? null : `${z} = ${gsplat2 ? `${gsplat2}.center.z` : "0.0"};`, + !r ? null : `${r} = ${gsplat2 ? `${gsplat2}.rgba.r` : "0.0"};`, + !g ? null : `${g} = ${gsplat2 ? `${gsplat2}.rgba.g` : "0.0"};`, + !b ? null : `${b} = ${gsplat2 ? `${gsplat2}.rgba.b` : "0.0"};` + ].filter(Boolean); + } + }); + } +} +class CombineGsplat extends Dyno { + constructor({ + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b + }) { + super({ + inTypes: { + gsplat: Gsplat, + flags: "uint", + index: "int", + center: "vec3", + scales: "vec3", + quaternion: "vec4", + rgba: "vec4", + rgb: "vec3", + opacity: "float", + x: "float", + y: "float", + z: "float", + r: "float", + g: "float", + b: "float" + }, + outTypes: { gsplat: Gsplat }, + inputs: { + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b + }, + globals: () => [defineGsplat], + statements: ({ inputs, outputs }) => { + const { gsplat: outGsplat } = outputs; + if (!outGsplat) { + return []; + } + const { + gsplat: gsplat2, + flags: flags2, + index: index2, + center: center2, + scales: scales2, + quaternion: quaternion2, + rgba: rgba2, + rgb: rgb2, + opacity: opacity2, + x: x2, + y: y2, + z: z2, + r: r2, + g: g2, + b: b2 + } = inputs; + return [ + `${outGsplat}.flags = ${flags2 ?? (gsplat2 ? `${gsplat2}.flags` : "0u")};`, + `${outGsplat}.index = ${index2 ?? (gsplat2 ? `${gsplat2}.index` : "0")};`, + `${outGsplat}.center = ${center2 ?? (gsplat2 ? `${gsplat2}.center` : "vec3(0.0, 0.0, 0.0)")};`, + `${outGsplat}.scales = ${scales2 ?? (gsplat2 ? `${gsplat2}.scales` : "vec3(0.0, 0.0, 0.0)")};`, + `${outGsplat}.quaternion = ${quaternion2 ?? (gsplat2 ? `${gsplat2}.quaternion` : "vec4(0.0, 0.0, 0.0, 1.0)")};`, + `${outGsplat}.rgba = ${rgba2 ?? (gsplat2 ? `${gsplat2}.rgba` : "vec4(0.0, 0.0, 0.0, 0.0)")};`, + !rgb2 ? null : `${outGsplat}.rgba.rgb = ${rgb2};`, + !opacity2 ? null : `${outGsplat}.rgba.a = ${opacity2};`, + !x2 ? null : `${outGsplat}.center.x = ${x2};`, + !y2 ? null : `${outGsplat}.center.y = ${y2};`, + !z2 ? null : `${outGsplat}.center.z = ${z2};`, + !r2 ? null : `${outGsplat}.rgba.r = ${r2};`, + !g2 ? null : `${outGsplat}.rgba.g = ${g2};`, + !b2 ? null : `${outGsplat}.rgba.b = ${b2};` + ].filter(Boolean); + } + }); + } + dynoOut() { + return new DynoOutput(this, "gsplat"); + } +} +const defineGsplatNormal = unindent(` + vec3 gsplatNormal(vec3 scales, vec4 quaternion) { + float minScale = min(scales.x, min(scales.y, scales.z)); + vec3 normal; + if (scales.z == minScale) { + normal = vec3(0.0, 0.0, 1.0); + } else if (scales.y == minScale) { + normal = vec3(0.0, 1.0, 0.0); + } else { + normal = vec3(1.0, 0.0, 0.0); + } + return quatVec(quaternion, normal); + } +`); +class GsplatNormal extends UnaryOp { + constructor({ gsplat }) { + super({ a: gsplat, outKey: "normal", outTypeFunc: () => "vec3" }); + this.globals = () => [defineGsplat, defineGsplatNormal]; + this.statements = ({ inputs, outputs }) => [ + `${outputs.normal} = gsplatNormal(${inputs.a}.scales, ${inputs.a}.quaternion);` + ]; + } +} +class TransformGsplat extends Dyno { + constructor({ + gsplat, + scale, + rotate, + translate, + recolor + }) { + super({ + inTypes: { + gsplat: Gsplat, + scale: "float", + rotate: "vec4", + translate: "vec3", + recolor: "vec4" + }, + outTypes: { gsplat: Gsplat }, + inputs: { gsplat, scale, rotate, translate, recolor }, + globals: () => [defineGsplat], + statements: ({ inputs, outputs, compile }) => { + const { gsplat: gsplat2 } = outputs; + if (!gsplat2 || !inputs.gsplat) { + return []; + } + const { scale: scale2, rotate: rotate2, translate: translate2, recolor: recolor2 } = inputs; + const indent = compile.indent; + const statements = [ + `${gsplat2} = ${inputs.gsplat};`, + `if (isGsplatActive(${gsplat2}.flags)) {`, + scale2 ? `${indent}${gsplat2}.center *= ${scale2};` : null, + rotate2 ? `${indent}${gsplat2}.center = quatVec(${rotate2}, ${gsplat2}.center);` : null, + translate2 ? `${indent}${gsplat2}.center += ${translate2};` : null, + scale2 ? `${indent}${gsplat2}.scales *= ${scale2};` : null, + rotate2 ? `${indent}${gsplat2}.quaternion = quatQuat(${rotate2}, ${gsplat2}.quaternion);` : null, + recolor2 ? `${indent}${gsplat2}.rgba *= ${recolor2};` : null, + "}" + ].filter(Boolean); + return statements; + } + }); + } + dynoOut() { + return new DynoOutput(this, "gsplat"); + } +} +const outputPackedSplat = (gsplat) => new OutputPackedSplat({ gsplat }); +const outputRgba8 = (rgba8) => new OutputRgba8({ rgba8 }); +class OutputPackedSplat extends Dyno { + constructor({ gsplat }) { + super({ + inTypes: { gsplat: Gsplat }, + inputs: { gsplat }, + globals: () => [defineGsplat], + statements: ({ inputs, outputs }) => { + const { output } = outputs; + if (!output) { + return []; + } + const { gsplat: gsplat2 } = inputs; + if (gsplat2) { + return unindentLines(` + if (isGsplatActive(${gsplat2}.flags)) { + ${output} = packSplat(${gsplat2}.center, ${gsplat2}.scales, ${gsplat2}.quaternion, ${gsplat2}.rgba); + } else { + ${output} = uvec4(0u, 0u, 0u, 0u); + } + `); + } + return [`${output} = uvec4(0u, 0u, 0u, 0u);`]; + } + }); + } + dynoOut() { + return new DynoOutput(this, "output"); + } +} +class OutputRgba8 extends Dyno { + constructor({ rgba8 }) { + super({ + inTypes: { rgba8: "vec4" }, + inputs: { rgba8 }, + statements: ({ inputs, outputs }) => [ + `target = ${inputs.rgba8 ?? "vec4(0.0, 0.0, 0.0, 0.0)"};` + ] + }); + } + dynoOut() { + return new DynoOutput(this, "rgba8"); + } +} +const uniform = (key, type, value) => new DynoUniform({ key, type, value }); +const dynoBool = (value = false, key) => new DynoBool({ key, value }); +const dynoUint = (value = 0, key) => new DynoUint({ key, value }); +const dynoInt = (value = 0, key) => new DynoInt({ key, value }); +const dynoFloat = (value = 0, key) => new DynoFloat({ key, value }); +const dynoBvec2 = (value, key) => new DynoBvec2({ key, value }); +const dynoUvec2 = (value, key) => new DynoUvec2({ key, value }); +const dynoIvec2 = (value, key) => new DynoIvec2({ key, value }); +const dynoVec2 = (value, key) => new DynoVec2({ key, value }); +const dynoBvec3 = (value, key) => new DynoBvec3({ key, value }); +const dynoUvec3 = (value, key) => new DynoUvec3({ key, value }); +const dynoIvec3 = (value, key) => new DynoIvec3({ key, value }); +const dynoVec3 = (value, key) => new DynoVec3({ key, value }); +const dynoBvec4 = (value, key) => new DynoBvec4({ key, value }); +const dynoUvec4 = (value, key) => new DynoUvec4({ key, value }); +const dynoIvec4 = (value, key) => new DynoIvec4({ key, value }); +const dynoVec4 = (value, key) => new DynoVec4({ key, value }); +const dynoMat2 = (value, key) => new DynoMat2({ key, value }); +const dynoMat2x2 = (value, key) => new DynoMat2x2({ key, value }); +const dynoMat2x3 = (value, key) => new DynoMat2x3({ key, value }); +const dynoMat2x4 = (value, key) => new DynoMat2x4({ key, value }); +const dynoMat3 = (value, key) => new DynoMat3({ key, value }); +const dynoMat3x2 = (value, key) => new DynoMat3x2({ key, value }); +const dynoMat3x3 = (value, key) => new DynoMat3x3({ key, value }); +const dynoMat3x4 = (value, key) => new DynoMat3x4({ key, value }); +const dynoMat4 = (value, key) => new DynoMat4({ key, value }); +const dynoMat4x2 = (value, key) => new DynoMat4x2({ key, value }); +const dynoMat4x3 = (value, key) => new DynoMat4x3({ key, value }); +const dynoMat4x4 = (value, key) => new DynoMat4x4({ key, value }); +const dynoUsampler2D = (value, key) => new DynoUsampler2D({ key, value }); +const dynoIsampler2D = (value, key) => new DynoIsampler2D({ key, value }); +const dynoSampler2D = (value, key) => new DynoSampler2D({ key, value }); +const dynoUsampler2DArray = (value, key) => new DynoUsampler2DArray({ key, value }); +const dynoIsampler2DArray = (key, value) => new DynoIsampler2DArray({ key, value }); +const dynoSampler2DArray = (value, key) => new DynoSampler2DArray({ key, value }); +const dynoUsampler3D = (value, key) => new DynoUsampler3D({ key, value }); +const dynoIsampler3D = (value, key) => new DynoIsampler3D({ key, value }); +const dynoSampler3D = (value, key) => new DynoSampler3D({ key, value }); +const dynoUsamplerCube = (value, key) => new DynoUsamplerCube({ key, value }); +const dynoIsamplerCube = (value, key) => new DynoIsamplerCube({ key, value }); +const dynoSamplerCube = (value, key) => new DynoSamplerCube({ key, value }); +const dynoSampler2DShadow = (value, key) => new DynoSampler2DShadow({ key, value }); +const dynoSampler2DArrayShadow = (value, key) => new DynoSampler2DArrayShadow({ key, value }); +const dynoSamplerCubeShadow = (value, key) => new DynoSamplerCubeShadow({ key, value }); +class DynoUniform extends Dyno { + constructor({ + key, + type, + count, + value, + update, + globals + }) { + key = key ?? "value"; + super({ + outTypes: { [key]: type }, + update: () => { + if (update) { + const value2 = update(this.value); + if (value2 !== void 0) { + this.value = value2; + } + } + this.uniform.value = this.value; + }, + generate: ({ inputs, outputs }) => { + const allGlobals = (globals == null ? void 0 : globals({ inputs, outputs })) ?? []; + const uniforms = {}; + const name = outputs[key]; + if (name) { + allGlobals.push(`uniform ${dynoDeclare(name, type, count)};`); + uniforms[name] = this.uniform; + } + return { globals: allGlobals, uniforms }; + } + }); + this.type = type; + this.count = count; + this.value = value; + this.uniform = { value }; + this.outKey = key; + } + dynoOut() { + return new DynoOutput(this, this.outKey); + } +} +class DynoBool extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "bool", value, update }); + } +} +class DynoUint extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "uint", value, update }); + } +} +class DynoInt extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "int", value, update }); + } +} +class DynoFloat extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "float", value, update }); + } +} +class DynoBvec2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "bvec2", value, update }); + } +} +class DynoUvec2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "uvec2", value, update }); + } +} +class DynoIvec2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "ivec2", value, update }); + } +} +class DynoVec2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "vec2", value, update }); + } +} +class DynoBvec3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "bvec3", value, update }); + } +} +class DynoUvec3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "uvec3", value, update }); + } +} +class DynoIvec3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "ivec3", value, update }); + } +} +class DynoVec3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "vec3", value, update }); + } +} +class DynoBvec4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "bvec4", value, update }); + } +} +class DynoUvec4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "uvec4", value, update }); + } +} +class DynoIvec4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "ivec4", value, update }); + } +} +class DynoVec4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "vec4", value, update }); + } +} +class DynoMat2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat2", value, update }); + } +} +class DynoMat2x2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat2x2", value, update }); + } +} +class DynoMat2x3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat2x3", value, update }); + } +} +class DynoMat2x4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat2x4", value, update }); + } +} +class DynoMat3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat3", value, update }); + } +} +class DynoMat3x2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat3x2", value, update }); + } +} +class DynoMat3x3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat3x3", value, update }); + } +} +class DynoMat3x4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat3x4", value, update }); + } +} +class DynoMat4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat4", value, update }); + } +} +class DynoMat4x2 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat4x2", value, update }); + } +} +class DynoMat4x3 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat4x3", value, update }); + } +} +class DynoMat4x4 extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "mat4x4", value, update }); + } +} +class DynoUsampler2D extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "usampler2D", value, update }); + } +} +class DynoIsampler2D extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "isampler2D", value, update }); + } +} +class DynoSampler2D extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "sampler2D", value, update }); + } +} +class DynoUsampler2DArray extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "usampler2DArray", value, update }); + } +} +class DynoIsampler2DArray extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "isampler2DArray", value, update }); + } +} +class DynoSampler2DArray extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "sampler2DArray", value, update }); + } +} +class DynoUsampler3D extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "usampler3D", value, update }); + } +} +class DynoIsampler3D extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "isampler3D", value, update }); + } +} +class DynoSampler3D extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "sampler3D", value, update }); + } +} +class DynoUsamplerCube extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "usamplerCube", value, update }); + } +} +class DynoIsamplerCube extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "isamplerCube", value, update }); + } +} +class DynoSamplerCube extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "samplerCube", value, update }); + } +} +class DynoSampler2DShadow extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "sampler2DShadow", value, update }); + } +} +class DynoSampler2DArrayShadow extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "sampler2DArrayShadow", value, update }); + } +} +class DynoSamplerCubeShadow extends DynoUniform { + constructor({ + key, + value, + update + }) { + super({ key, type: "samplerCubeShadow", value, update }); + } +} +var u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array; +var fleb = new u8([ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 0, + /* unused */ + 0, + 0, + /* impossible */ + 0 +]); +var fdeb = new u8([ + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 8, + 9, + 9, + 10, + 10, + 11, + 11, + 12, + 12, + 13, + 13, + /* unused */ + 0, + 0 +]); +var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); +var freb = function(eb, start) { + var b = new u16(31); + for (var i = 0; i < 31; ++i) { + b[i] = start += 1 << eb[i - 1]; + } + var r = new i32(b[30]); + for (var i = 1; i < 30; ++i) { + for (var j = b[i]; j < b[i + 1]; ++j) { + r[j] = j - b[i] << 5 | i; + } + } + return { b, r }; +}; +var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r; +fl[28] = 258, revfl[258] = 28; +var _b = freb(fdeb, 0), fd = _b.b; +var rev = new u16(32768); +for (var i = 0; i < 32768; ++i) { + var x = (i & 43690) >> 1 | (i & 21845) << 1; + x = (x & 52428) >> 2 | (x & 13107) << 2; + x = (x & 61680) >> 4 | (x & 3855) << 4; + rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1; +} +var hMap = function(cd, mb, r) { + var s = cd.length; + var i = 0; + var l = new u16(mb); + for (; i < s; ++i) { + if (cd[i]) + ++l[cd[i] - 1]; + } + var le = new u16(mb); + for (i = 1; i < mb; ++i) { + le[i] = le[i - 1] + l[i - 1] << 1; + } + var co; + if (r) { + co = new u16(1 << mb); + var rvb = 15 - mb; + for (i = 0; i < s; ++i) { + if (cd[i]) { + var sv = i << 4 | cd[i]; + var r_1 = mb - cd[i]; + var v = le[cd[i] - 1]++ << r_1; + for (var m = v | (1 << r_1) - 1; v <= m; ++v) { + co[rev[v] >> rvb] = sv; + } + } + } + } else { + co = new u16(s); + for (i = 0; i < s; ++i) { + if (cd[i]) { + co[i] = rev[le[cd[i] - 1]++] >> 15 - cd[i]; + } + } + } + return co; +}; +var flt = new u8(288); +for (var i = 0; i < 144; ++i) + flt[i] = 8; +for (var i = 144; i < 256; ++i) + flt[i] = 9; +for (var i = 256; i < 280; ++i) + flt[i] = 7; +for (var i = 280; i < 288; ++i) + flt[i] = 8; +var fdt = new u8(32); +for (var i = 0; i < 32; ++i) + fdt[i] = 5; +var flrm = /* @__PURE__ */ hMap(flt, 9, 1); +var fdrm = /* @__PURE__ */ hMap(fdt, 5, 1); +var max$1 = function(a) { + var m = a[0]; + for (var i = 1; i < a.length; ++i) { + if (a[i] > m) + m = a[i]; + } + return m; +}; +var bits = function(d, p, m) { + var o = p / 8 | 0; + return (d[o] | d[o + 1] << 8) >> (p & 7) & m; +}; +var bits16 = function(d, p) { + var o = p / 8 | 0; + return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7); +}; +var shft = function(p) { + return (p + 7) / 8 | 0; +}; +var slc = function(v, s, e) { + if (s == null || s < 0) + s = 0; + if (e == null || e > v.length) + e = v.length; + return new u8(v.subarray(s, e)); +}; +var ec = [ + "unexpected EOF", + "invalid block type", + "invalid length/literal", + "invalid distance", + "stream finished", + "no stream handler", + , + "no callback", + "invalid UTF-8 data", + "extra field too long", + "date not in range 1980-2099", + "filename too long", + "stream finishing", + "invalid zip data" + // determined by unknown compression method +]; +var err = function(ind, msg, nt) { + var e = new Error(msg || ec[ind]); + e.code = ind; + if (Error.captureStackTrace) + Error.captureStackTrace(e, err); + if (!nt) + throw e; + return e; +}; +var inflt = function(dat, st, buf, dict) { + var sl = dat.length, dl = 0; + if (!sl || st.f && !st.l) + return buf || new u8(0); + var noBuf = !buf; + var resize = noBuf || st.i != 2; + var noSt = st.i; + if (noBuf) + buf = new u8(sl * 3); + var cbuf = function(l2) { + var bl = buf.length; + if (l2 > bl) { + var nbuf = new u8(Math.max(bl * 2, l2)); + nbuf.set(buf); + buf = nbuf; + } + }; + var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n; + var tbts = sl * 8; + do { + if (!lm) { + final = bits(dat, pos, 1); + var type = bits(dat, pos + 1, 3); + pos += 3; + if (!type) { + var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l; + if (t > sl) { + if (noSt) + err(0); + break; + } + if (resize) + cbuf(bt + l); + buf.set(dat.subarray(s, t), bt); + st.b = bt += l, st.p = pos = t * 8, st.f = final; + continue; + } else if (type == 1) + lm = flrm, dm = fdrm, lbt = 9, dbt = 5; + else if (type == 2) { + var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4; + var tl = hLit + bits(dat, pos + 5, 31) + 1; + pos += 14; + var ldt = new u8(tl); + var clt = new u8(19); + for (var i = 0; i < hcLen; ++i) { + clt[clim[i]] = bits(dat, pos + i * 3, 7); + } + pos += hcLen * 3; + var clb = max$1(clt), clbmsk = (1 << clb) - 1; + var clm = hMap(clt, clb, 1); + for (var i = 0; i < tl; ) { + var r = clm[bits(dat, pos, clbmsk)]; + pos += r & 15; + var s = r >> 4; + if (s < 16) { + ldt[i++] = s; + } else { + var c = 0, n = 0; + if (s == 16) + n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1]; + else if (s == 17) + n = 3 + bits(dat, pos, 7), pos += 3; + else if (s == 18) + n = 11 + bits(dat, pos, 127), pos += 7; + while (n--) + ldt[i++] = c; + } + } + var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit); + lbt = max$1(lt); + dbt = max$1(dt); + lm = hMap(lt, lbt, 1); + dm = hMap(dt, dbt, 1); + } else + err(1); + if (pos > tbts) { + if (noSt) + err(0); + break; + } + } + if (resize) + cbuf(bt + 131072); + var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1; + var lpos = pos; + for (; ; lpos = pos) { + var c = lm[bits16(dat, pos) & lms], sym = c >> 4; + pos += c & 15; + if (pos > tbts) { + if (noSt) + err(0); + break; + } + if (!c) + err(2); + if (sym < 256) + buf[bt++] = sym; + else if (sym == 256) { + lpos = pos, lm = null; + break; + } else { + var add2 = sym - 254; + if (sym > 264) { + var i = sym - 257, b = fleb[i]; + add2 = bits(dat, pos, (1 << b) - 1) + fl[i]; + pos += b; + } + var d = dm[bits16(dat, pos) & dms], dsym = d >> 4; + if (!d) + err(3); + pos += d & 15; + var dt = fd[dsym]; + if (dsym > 3) { + var b = fdeb[dsym]; + dt += bits16(dat, pos) & (1 << b) - 1, pos += b; + } + if (pos > tbts) { + if (noSt) + err(0); + break; + } + if (resize) + cbuf(bt + 131072); + var end = bt + add2; + if (bt < dt) { + var shift = dl - dt, dend = Math.min(dt, end); + if (shift + bt < 0) + err(3); + for (; bt < dend; ++bt) + buf[bt] = dict[shift + bt]; + } + for (; bt < end; ++bt) + buf[bt] = buf[bt - dt]; + } + } + st.l = lm, st.p = lpos, st.b = bt, st.f = final; + if (lm) + final = 1, st.m = lbt, st.d = dm, st.n = dbt; + } while (!final); + return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt); +}; +var et = /* @__PURE__ */ new u8(0); +var gzs = function(d) { + if (d[0] != 31 || d[1] != 139 || d[2] != 8) + err(6, "invalid gzip data"); + var flg = d[3]; + var st = 10; + if (flg & 4) + st += (d[10] | d[11] << 8) + 2; + for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++]) + ; + return st + (flg & 2); +}; +var Inflate = /* @__PURE__ */ function() { + function Inflate2(opts, cb) { + if (typeof opts == "function") + cb = opts, opts = {}; + this.ondata = cb; + var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768); + this.s = { i: 0, b: dict ? dict.length : 0 }; + this.o = new u8(32768); + this.p = new u8(0); + if (dict) + this.o.set(dict); + } + Inflate2.prototype.e = function(c) { + if (!this.ondata) + err(5); + if (this.d) + err(4); + if (!this.p.length) + this.p = c; + else if (c.length) { + var n = new u8(this.p.length + c.length); + n.set(this.p), n.set(c, this.p.length), this.p = n; + } + }; + Inflate2.prototype.c = function(final) { + this.s.i = +(this.d = final || false); + var bts = this.s.b; + var dt = inflt(this.p, this.s, this.o); + this.ondata(slc(dt, bts, this.s.b), this.d); + this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length; + this.p = slc(this.p, this.s.p / 8 | 0), this.s.p &= 7; + }; + Inflate2.prototype.push = function(chunk, final) { + this.e(chunk), this.c(final); + }; + return Inflate2; +}(); +var Gunzip = /* @__PURE__ */ function() { + function Gunzip2(opts, cb) { + this.v = 1; + this.r = 0; + Inflate.call(this, opts, cb); + } + Gunzip2.prototype.push = function(chunk, final) { + Inflate.prototype.e.call(this, chunk); + this.r += chunk.length; + if (this.v) { + var p = this.p.subarray(this.v - 1); + var s = p.length > 3 ? gzs(p) : 4; + if (s > p.length) { + if (!final) + return; + } else if (this.v > 1 && this.onmember) { + this.onmember(this.r - p.length); + } + this.p = p.subarray(s), this.v = 0; + } + Inflate.prototype.c.call(this, final); + if (this.s.f && !this.s.l && !final) { + this.v = shft(this.s.p) + 9; + this.s = { i: 0 }; + this.o = new u8(0); + this.push(new u8(0), final); + } + }; + return Gunzip2; +}(); +var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder(); +var tds = 0; +try { + td.decode(et, { stream: true }); + tds = 1; +} catch (e) { +} +const f32buffer = new Float32Array(1); +const u32buffer = new Uint32Array(f32buffer.buffer); +function floatBitsToUint$1(f) { + f32buffer[0] = f; + return u32buffer[0]; +} +function uintBitsToFloat$1(u) { + u32buffer[0] = u; + return f32buffer[0]; +} +function toHalf(f) { + f32buffer[0] = f; + const bits2 = u32buffer[0]; + const sign2 = bits2 >> 31 & 1; + const exp3 = bits2 >> 23 & 255; + const frac = bits2 & 8388607; + const halfSign = sign2 << 15; + if (exp3 === 255) { + if (frac !== 0) { + return halfSign | 32767; + } + return halfSign | 31744; + } + const newExp = exp3 - 127 + 15; + if (newExp >= 31) { + return halfSign | 31744; + } + if (newExp <= 0) { + if (newExp < -10) { + return halfSign; + } + const subFrac = (frac | 8388608) >> 1 - newExp + 13; + return halfSign | subFrac; + } + const halfFrac = frac >> 13; + return halfSign | newExp << 10 | halfFrac; +} +function fromHalf(h) { + const sign2 = h >> 15 & 1; + const exp3 = h >> 10 & 31; + const frac = h & 1023; + let f32bits; + if (exp3 === 0) { + if (frac === 0) { + f32bits = sign2 << 31; + } else { + let mant = frac; + let e = -14; + while ((mant & 1024) === 0) { + mant <<= 1; + e--; + } + mant &= 1023; + const newExp = e + 127; + const newFrac = mant << 13; + f32bits = sign2 << 31 | newExp << 23 | newFrac; + } + } else if (exp3 === 31) { + if (frac === 0) { + f32bits = sign2 << 31 | 2139095040; + } else { + f32bits = sign2 << 31 | 2143289344; + } + } else { + const newExp = exp3 - 15 + 127; + const newFrac = frac << 13; + f32bits = sign2 << 31 | newExp << 23 | newFrac; + } + u32buffer[0] = f32bits; + return f32buffer[0]; +} +function floatToUint8(v) { + return Math.max(0, Math.min(255, Math.round(v * 255))); +} +function floatToSint8(v) { + return Math.max(-127, Math.min(127, Math.round(v * 127))); +} +function Uint8ToFloat(v) { + return v / 255; +} +function Sint8ToFloat(v) { + return v / 127; +} +class DataCache { + // Create a DataCache with a given function that fetches data not in the cache. + constructor({ + asyncFetch, + maxItems = 5 + }) { + this.asyncFetch = asyncFetch; + this.maxItems = maxItems; + this.items = []; + } + // Fetch data for the key, returning cached data if available. + async getFetch(key) { + const index = this.items.findIndex((item) => item.key === key); + if (index >= 0) { + const item = this.items.splice(index, 1)[0]; + this.items.push(item); + return item.data; + } + const data = await this.asyncFetch(key); + this.items.push({ key, data }); + while (this.items.length > this.maxItems) { + this.items.shift(); + } + return data; + } +} +function mapObject(obj, fn) { + const entries = Object.entries(obj).map(([key, value]) => [ + key, + fn(value, key) + ]); + return Object.fromEntries(entries); +} +function mapFilterObject(obj, fn) { + const entries = Object.entries(obj).map(([key, value]) => [key, fn(value, key)]).filter(([_, value]) => value !== void 0); + return Object.fromEntries(entries); +} +function getArrayBuffers(ctx) { + const buffers = []; + const seen = /* @__PURE__ */ new Set(); + function traverse(obj) { + if (obj && typeof obj === "object" && !seen.has(obj)) { + seen.add(obj); + if (obj instanceof ArrayBuffer) { + buffers.push(obj); + } else if (ArrayBuffer.isView(obj)) { + buffers.push(obj.buffer); + } else if (Array.isArray(obj)) { + obj.forEach(traverse); + } else { + Object.values(obj).forEach(traverse); + } + } + } + traverse(ctx); + return buffers; +} +function newArray(n, initFunction) { + return new Array(n).fill(null).map((_, i) => initFunction(i)); +} +class FreeList { + constructor({ + // Allocate a new item with the given args + allocate, + // Dispose of an item (optional, if GC is enough) + dispose, + // Check if an existing item in the list is valid for the given args, + // allowing you to store heterogeneous items in the list. + valid + }) { + this.items = []; + this.allocate = allocate; + this.dispose = dispose; + this.valid = valid; + } + // Allocate a new item from the free list, first checking if a existing item + // on the freelist is valid for the given args. + alloc(args) { + while (true) { + const item = this.items.pop(); + if (!item) { + break; + } + if (this.valid(item, args)) { + return item; + } + if (this.dispose) { + this.dispose(item); + } + } + return this.allocate(args); + } + free(item) { + this.items.push(item); + } + disposeAll() { + let item; + item = this.items.pop(); + while (item) { + if (this.dispose) { + this.dispose(item); + } + item = this.items.pop(); + } + } +} +function setPackedSplat(packedSplats, index, x, y, z, scaleX, scaleY, scaleZ, quatX, quatY, quatZ, quatW, opacity, r, g, b) { + const uR = floatToUint8(r); + const uG = floatToUint8(g); + const uB = floatToUint8(b); + const uA = floatToUint8(opacity); + const uQuat = encodeQuatOctXy88R8( + new THREE.Quaternion(quatX, quatY, quatZ, quatW) + ); + const uQuatX = uQuat & 255; + const uQuatY = uQuat >>> 8 & 255; + const uQuatZ = uQuat >>> 16 & 255; + const uScaleX = scaleX === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleX) - LN_SCALE_MIN) / LN_RESCALE) + 1 + ) + ); + const uScaleY = scaleY === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleY) - LN_SCALE_MIN) / LN_RESCALE) + 1 + ) + ); + const uScaleZ = scaleZ === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleZ) - LN_SCALE_MIN) / LN_RESCALE) + 1 + ) + ); + const uCenterX = toHalf(x); + const uCenterY = toHalf(y); + const uCenterZ = toHalf(z); + const i4 = index * 4; + packedSplats[i4] = uR | uG << 8 | uB << 16 | uA << 24; + packedSplats[i4 + 1] = uCenterX | uCenterY << 16; + packedSplats[i4 + 2] = uCenterZ | uQuatX << 16 | uQuatY << 24; + packedSplats[i4 + 3] = uScaleX | uScaleY << 8 | uScaleZ << 16 | uQuatZ << 24; +} +function setPackedSplatCenter(packedSplats, index, x, y, z) { + const uCenterX = toHalf(x); + const uCenterY = toHalf(y); + const uCenterZ = toHalf(z); + const i4 = index * 4; + packedSplats[i4 + 1] = uCenterX | uCenterY << 16; + packedSplats[i4 + 2] = uCenterZ | packedSplats[i4 + 2] & 4294901760; +} +function setPackedSplatScales(packedSplats, index, scaleX, scaleY, scaleZ) { + const uScaleX = scaleX === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleX) - LN_SCALE_MIN) / LN_RESCALE) + 1 + ) + ); + const uScaleY = scaleY === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleY) - LN_SCALE_MIN) / LN_RESCALE) + 1 + ) + ); + const uScaleZ = scaleZ === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleZ) - LN_SCALE_MIN) / LN_RESCALE) + 1 + ) + ); + const i4 = index * 4; + packedSplats[i4 + 3] = uScaleX | uScaleY << 8 | uScaleZ << 16 | packedSplats[i4 + 3] & 4278190080; +} +function setPackedSplatQuat(packedSplats, index, quatX, quatY, quatZ, quatW) { + const uQuat = encodeQuatOctXy88R8( + new THREE.Quaternion(quatX, quatY, quatZ, quatW) + ); + const uQuatX = uQuat & 255; + const uQuatY = uQuat >>> 8 & 255; + const uQuatZ = uQuat >>> 16 & 255; + const i4 = index * 4; + packedSplats[i4 + 2] = packedSplats[i4 + 2] & 65535 | uQuatX << 16 | uQuatY << 24; + packedSplats[i4 + 3] = packedSplats[i4 + 3] & 16777215 | uQuatZ << 24; +} +function setPackedSplatRgb(packedSplats, index, r, g, b) { + const uR = floatToUint8(r); + const uG = floatToUint8(g); + const uB = floatToUint8(b); + const i4 = index * 4; + packedSplats[i4] = uR | uG << 8 | uB << 16 | packedSplats[i4] & 4278190080; +} +function setPackedSplatOpacity(packedSplats, index, opacity) { + const uA = floatToUint8(opacity); + const i4 = index * 4; + packedSplats[i4] = packedSplats[i4] & 16777215 | uA << 24; +} +const packedCenter = new THREE.Vector3(); +const packedScales = new THREE.Vector3(); +const packedQuaternion = new THREE.Quaternion(); +const packedColor = new THREE.Color(); +const packedFields = { + center: packedCenter, + scales: packedScales, + quaternion: packedQuaternion, + color: packedColor, + opacity: 0 +}; +function unpackSplat(packedSplats, index) { + const result = packedFields; + const i4 = index * 4; + const word0 = packedSplats[i4]; + const word1 = packedSplats[i4 + 1]; + const word2 = packedSplats[i4 + 2]; + const word3 = packedSplats[i4 + 3]; + result.color.set( + (word0 & 255) / 255, + (word0 >>> 8 & 255) / 255, + (word0 >>> 16 & 255) / 255 + ); + result.opacity = (word0 >>> 24 & 255) / 255; + result.center.set( + fromHalf(word1 & 65535), + fromHalf(word1 >>> 16 & 65535), + fromHalf(word2 & 65535) + ); + const uScalesX = word3 & 255; + result.scales.x = uScalesX === 0 ? 0 : Math.exp(LN_SCALE_MIN + (uScalesX - 1) * LN_RESCALE); + const uScalesY = word3 >>> 8 & 255; + result.scales.y = uScalesY === 0 ? 0 : Math.exp(LN_SCALE_MIN + (uScalesY - 1) * LN_RESCALE); + const uScalesZ = word3 >>> 16 & 255; + result.scales.z = uScalesZ === 0 ? 0 : Math.exp(LN_SCALE_MIN + (uScalesZ - 1) * LN_RESCALE); + const uQuat = word2 >>> 16 & 65535 | word3 >>> 8 & 16711680; + decodeQuatOctXy88R8(uQuat, result.quaternion); + return result; +} +function getTextureSize(numSplats) { + const width = SPLAT_TEX_WIDTH; + const height = Math.max( + SPLAT_TEX_MIN_HEIGHT, + Math.min(SPLAT_TEX_HEIGHT, Math.ceil(numSplats / width)) + ); + const depth = Math.ceil(numSplats / (width * height)); + const maxSplats = width * height * depth; + return { width, height, depth, maxSplats }; +} +function isMobile() { + if (navigator.maxTouchPoints > 0) { + return true; + } + return /Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test( + navigator.userAgent + ); +} +function isAndroid() { + return /Android/.test(navigator.userAgent); +} +function isOculus() { + return /Oculus/.test(navigator.userAgent); +} +function flipPixels(pixels, width, height) { + const tempLine = new Uint8Array(width * 4); + for (let y = 0; y < height / 2; y++) { + const topOffset = y * width * 4; + const bottomOffset = (height - 1 - y) * width * 4; + tempLine.set(pixels.subarray(topOffset, topOffset + width * 4)); + pixels.set( + pixels.subarray(bottomOffset, bottomOffset + width * 4), + topOffset + ); + pixels.set(tempLine, bottomOffset); + } + return pixels; +} +function pixelsToPngUrl(pixels, width, height) { + const canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext("2d"); + if (!ctx) { + throw new Error("Can't get 2d context"); + } + const imageData = ctx.createImageData(width, height); + imageData.data.set(pixels); + ctx.putImageData(imageData, 0, 0); + return canvas.toDataURL("image/png"); +} +function cloneClock(clock) { + const newClock = new THREE.Clock(clock.autoStart); + newClock.startTime = clock.startTime; + newClock.oldTime = clock.oldTime; + newClock.elapsedTime = clock.elapsedTime; + newClock.running = clock.running; + return newClock; +} +function omitUndefined(obj) { + return Object.fromEntries( + Object.entries(obj).filter(([_, value]) => value !== void 0) + ); +} +const IDENT_VERTEX_SHADER = unindent(` + precision highp float; + + in vec3 position; + + void main() { + gl_Position = vec4(position.xy, 0.0, 1.0); + } +`); +function averagePositions(positions) { + const sum = new THREE.Vector3(); + for (const position of positions) { + sum.add(position); + } + return sum.divideScalar(positions.length); +} +function averageQuaternions(quaternions) { + if (quaternions.length === 0) { + return new THREE.Quaternion(); + } + const sum = quaternions[0].clone(); + for (let i = 1; i < quaternions.length; i++) { + if (quaternions[i].dot(quaternions[0]) < 0) { + sum.x -= quaternions[i].x; + sum.y -= quaternions[i].y; + sum.z -= quaternions[i].z; + sum.w -= quaternions[i].w; + } else { + sum.x += quaternions[i].x; + sum.y += quaternions[i].y; + sum.z += quaternions[i].z; + sum.w += quaternions[i].w; + } + } + return sum.normalize(); +} +function coinciDist(matrix1, matrix2) { + const origin1 = new THREE.Vector3(0, 0, 0).applyMatrix4(matrix1); + const origin2 = new THREE.Vector3(0, 0, 0).applyMatrix4(matrix2); + const direction1 = new THREE.Vector3(0, 0, -1).applyMatrix4(matrix1).sub(origin1).normalize(); + const direction2 = new THREE.Vector3(0, 0, -1).applyMatrix4(matrix2).sub(origin2).normalize(); + const distance2 = origin1.distanceTo(origin2); + const coincidence = direction1.dot(direction2); + return { distance: distance2, coincidence }; +} +function withinDist({ + matrix1, + matrix2, + maxDistance +}) { + const origin1 = new THREE.Vector3(0, 0, 0).applyMatrix4(matrix1); + const origin2 = new THREE.Vector3(0, 0, 0).applyMatrix4(matrix2); + return origin1.distanceTo(origin2) <= maxDistance; +} +function withinCoinciDist({ + matrix1, + matrix2, + maxDistance, + minCoincidence +}) { + const { distance: distance2, coincidence } = coinciDist(matrix1, matrix2); + return distance2 <= maxDistance && (minCoincidence == null || coincidence >= minCoincidence); +} +function coorientDist(matrix1, matrix2) { + const [origin1, rotate1] = [new THREE.Vector3(), new THREE.Quaternion()]; + const [origin2, rotate2] = [new THREE.Vector3(), new THREE.Quaternion()]; + matrix1.decompose(origin1, rotate1, new THREE.Vector3()); + matrix2.decompose(origin2, rotate2, new THREE.Vector3()); + const distance2 = origin1.distanceTo(origin2); + const coorient = Math.abs(rotate1.dot(rotate2)); + return { distance: distance2, coorient }; +} +function withinCoorientDist({ + matrix1, + matrix2, + maxDistance, + minCoorient +}) { + const { distance: distance2, coorient } = coorientDist(matrix1, matrix2); + return distance2 <= maxDistance && (minCoorient == null || coorient >= minCoorient); +} +function epsilonSign(value, epsilon = 1e-3) { + if (Math.abs(value) < epsilon) { + return 0; + } + return Math.sign(value); +} +function encodeQuatXyz888(q) { + const negQuat = q.w < 0; + const iQuatX = floatToSint8(negQuat ? -q.x : q.x); + const iQuatY = floatToSint8(negQuat ? -q.y : q.y); + const iQuatZ = floatToSint8(negQuat ? -q.z : q.z); + const uQuatX = iQuatX & 255; + const uQuatY = iQuatY & 255; + const uQuatZ = iQuatZ & 255; + return uQuatX | uQuatY << 8 | uQuatZ << 16; +} +function decodeQuatXyz888(encoded, out) { + const iQuatX = encoded << 24 >> 24; + const iQuatY = encoded << 16 >> 24; + const iQuatZ = encoded << 8 >> 24; + out.set(iQuatX / 127, iQuatY / 127, iQuatZ / 127, 0); + const dotSelf = out.x * out.x + out.y * out.y + out.z * out.z; + out.w = Math.sqrt(Math.max(0, 1 - dotSelf)); + return out; +} +function encodeQuatOctXy88R8(q) { + const qnorm = q.clone().normalize(); + if (qnorm.w < 0) { + qnorm.set(-qnorm.x, -qnorm.y, -qnorm.z, -qnorm.w); + } + const theta = 2 * Math.acos(qnorm.w); + const xyz_norm = Math.sqrt( + qnorm.x * qnorm.x + qnorm.y * qnorm.y + qnorm.z * qnorm.z + ); + const axis = xyz_norm < 1e-6 ? new THREE.Vector3(1, 0, 0) : new THREE.Vector3(qnorm.x, qnorm.y, qnorm.z).divideScalar(xyz_norm); + const sum = Math.abs(axis.x) + Math.abs(axis.y) + Math.abs(axis.z); + let p_x = axis.x / sum; + let p_y = axis.y / sum; + if (axis.z < 0) { + const tmp = p_x; + p_x = (1 - Math.abs(p_y)) * (p_x >= 0 ? 1 : -1); + p_y = (1 - Math.abs(tmp)) * (p_y >= 0 ? 1 : -1); + } + const u_f = p_x * 0.5 + 0.5; + const v_f = p_y * 0.5 + 0.5; + const quantU = Math.round(u_f * 255); + const quantV = Math.round(v_f * 255); + const angleInt = Math.round(theta * (255 / Math.PI)); + return angleInt << 16 | quantV << 8 | quantU; +} +function decodeQuatOctXy88R8(encoded, out) { + const quantU = encoded & 255; + const quantV = encoded >>> 8 & 255; + const angleInt = encoded >>> 16 & 255; + const u_f = quantU / 255; + const v_f = quantV / 255; + let f_x = (u_f - 0.5) * 2; + let f_y = (v_f - 0.5) * 2; + const f_z = 1 - (Math.abs(f_x) + Math.abs(f_y)); + const t = Math.max(-f_z, 0); + f_x += f_x >= 0 ? -t : t; + f_y += f_y >= 0 ? -t : t; + const axis = new THREE.Vector3(f_x, f_y, f_z).normalize(); + const theta = angleInt / 255 * Math.PI; + const halfTheta = theta * 0.5; + const s = Math.sin(halfTheta); + const w = Math.cos(halfTheta); + out.set(axis.x * s, axis.y * s, axis.z * s, w); + return out; +} +function encodeQuatEulerXyz888(q) { + const qNorm = q.clone().normalize(); + const sinr_cosp = 2 * (qNorm.w * qNorm.x + qNorm.y * qNorm.z); + const cosr_cosp = 1 - 2 * (qNorm.x * qNorm.x + qNorm.y * qNorm.y); + const roll = Math.atan2(sinr_cosp, cosr_cosp); + const sinp = 2 * (qNorm.w * qNorm.y - qNorm.z * qNorm.x); + const pitch = Math.abs(sinp) >= 1 ? Math.sign(sinp) * (Math.PI / 2) : Math.asin(sinp); + const siny_cosp = 2 * (qNorm.w * qNorm.z + qNorm.x * qNorm.y); + const cosy_cosp = 1 - 2 * (qNorm.y * qNorm.y + qNorm.z * qNorm.z); + const yaw = Math.atan2(siny_cosp, cosy_cosp); + const normRoll = (roll + Math.PI) / (2 * Math.PI); + const normPitch = (pitch + Math.PI) / (2 * Math.PI); + const normYaw = (yaw + Math.PI) / (2 * Math.PI); + const rollQ = Math.round(normRoll * 255); + const pitchQ = Math.round(normPitch * 255); + const yawQ = Math.round(normYaw * 255); + return yawQ << 16 | pitchQ << 8 | rollQ; +} +function decodeQuatEulerXyz888(encoded, out) { + const rollQ = encoded & 255; + const pitchQ = encoded >>> 8 & 255; + const yawQ = encoded >>> 16 & 255; + const normRoll = rollQ / 255; + const normPitch = pitchQ / 255; + const normYaw = yawQ / 255; + const roll = normRoll * (2 * Math.PI) - Math.PI; + const pitch = normPitch * (2 * Math.PI) - Math.PI; + const yaw = normYaw * (2 * Math.PI) - Math.PI; + const cr = Math.cos(roll * 0.5); + const sr = Math.sin(roll * 0.5); + const cp = Math.cos(pitch * 0.5); + const sp = Math.sin(pitch * 0.5); + const cy = Math.cos(yaw * 0.5); + const sy = Math.sin(yaw * 0.5); + out.w = cr * cp * cy + sr * sp * sy; + out.x = sr * cp * cy - cr * sp * sy; + out.y = cr * sp * cy + sr * cp * sy; + out.z = cr * cp * sy - sr * sp * cy; + out.normalize(); + return out; +} +function packSint8Bytes(b0, b1, b2, b3) { + const clampedB0 = Math.max(-127, Math.min(127, b0 * 127)); + const clampedB1 = Math.max(-127, Math.min(127, b1 * 127)); + const clampedB2 = Math.max(-127, Math.min(127, b2 * 127)); + const clampedB3 = Math.max(-127, Math.min(127, b3 * 127)); + return clampedB0 & 255 | (clampedB1 & 255) << 8 | (clampedB2 & 255) << 16 | (clampedB3 & 255) << 24; +} +function encodeSh1Rgb(sh1Array, index, sh1Rgb) { + const base = index * 2; + for (let i = 0; i < 9; ++i) { + const value = Math.max(-63, Math.min(63, sh1Rgb[i] * 63)) & 127; + const bitStart = i * 7; + const bitEnd = bitStart + 7; + const wordStart = Math.floor(bitStart / 32); + const bitOffset = bitStart - wordStart * 32; + const firstWord = value << bitOffset & 4294967295; + sh1Array[base + wordStart] |= firstWord; + if (bitEnd > wordStart * 32 + 32) { + const secondWord = value >>> 32 - bitOffset & 4294967295; + sh1Array[base + wordStart + 1] |= secondWord; + } + } +} +function encodeSh2Rgb(sh2Array, index, sh2Rgb) { + sh2Array[index * 4 + 0] = packSint8Bytes( + sh2Rgb[0], + sh2Rgb[1], + sh2Rgb[2], + sh2Rgb[3] + ); + sh2Array[index * 4 + 1] = packSint8Bytes( + sh2Rgb[4], + sh2Rgb[5], + sh2Rgb[6], + sh2Rgb[7] + ); + sh2Array[index * 4 + 2] = packSint8Bytes( + sh2Rgb[8], + sh2Rgb[9], + sh2Rgb[10], + sh2Rgb[11] + ); + sh2Array[index * 4 + 3] = packSint8Bytes( + sh2Rgb[12], + sh2Rgb[13], + sh2Rgb[14], + 0 + ); +} +function encodeSh3Rgb(sh3Array, index, sh3Rgb) { + const base = index * 4; + for (let i = 0; i < 21; ++i) { + const value = Math.max(-31, Math.min(31, sh3Rgb[i] * 31)) & 63; + const bitStart = i * 6; + const bitEnd = bitStart + 6; + const wordStart = Math.floor(bitStart / 32); + const bitOffset = bitStart - wordStart * 32; + const firstWord = value << bitOffset & 4294967295; + sh3Array[base + wordStart] |= firstWord; + if (bitEnd > wordStart * 32 + 32) { + const secondWord = value >>> 32 - bitOffset & 4294967295; + sh3Array[base + wordStart + 1] |= secondWord; + } + } +} +function decompressPartialGzip(fileBytes, numBytes) { + const chunks = []; + let totalBytes = 0; + let result = null; + const gunzip = new Gunzip((data, final) => { + chunks.push(data); + totalBytes += data.length; + if (final || totalBytes >= numBytes) { + const allBytes = new Uint8Array(totalBytes); + let offset2 = 0; + for (const chunk of chunks) { + allBytes.set(chunk, offset2); + offset2 += chunk.length; + } + result = allBytes.slice(0, numBytes); + } + }); + const CHUNK_SIZE = 1024; + let offset = 0; + while (result == null && offset < fileBytes.length) { + const chunk = fileBytes.slice(offset, offset + CHUNK_SIZE); + gunzip.push(chunk, false); + offset += CHUNK_SIZE; + } + if (result == null) { + gunzip.push(new Uint8Array(), true); + if (result == null) { + throw new Error("Failed to decompress partial gzip"); + } + } + return result; +} +class GunzipReader { + constructor({ + fileBytes, + chunkBytes = 64 * 1024 + }) { + this.fileBytes = fileBytes; + this.chunkBytes = chunkBytes; + this.offset = 0; + this.chunks = []; + this.totalBytes = 0; + this.gunzip = new Gunzip((chunk, _final) => { + this.chunks.push(chunk); + this.totalBytes += chunk.length; + }); + } + read(numBytes) { + while (this.totalBytes < numBytes && this.offset < this.fileBytes.length) { + const end = Math.min( + this.offset + this.chunkBytes, + this.fileBytes.length + ); + this.gunzip.push(this.fileBytes.subarray(this.offset, end), false); + this.offset = end; + } + if (this.totalBytes < numBytes && this.offset >= this.fileBytes.length) { + this.gunzip.push(new Uint8Array(0), true); + } + if (this.totalBytes < numBytes) { + throw new Error( + `Unexpected EOF: needed ${numBytes}, got ${this.totalBytes}` + ); + } + const allBytes = new Uint8Array(this.totalBytes); + let outOffset = 0; + for (const chunk of this.chunks) { + allBytes.set(chunk, outOffset); + outOffset += chunk.length; + } + const result = allBytes.subarray(0, numBytes); + this.chunks = [allBytes.subarray(numBytes)]; + this.totalBytes -= numBytes; + return result; + } +} +const utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DataCache, + FreeList, + GunzipReader, + IDENT_VERTEX_SHADER, + Sint8ToFloat, + Uint8ToFloat, + averagePositions, + averageQuaternions, + cloneClock, + coinciDist, + coorientDist, + decodeQuatEulerXyz888, + decodeQuatOctXy88R8, + decodeQuatXyz888, + decompressPartialGzip, + encodeQuatEulerXyz888, + encodeQuatOctXy88R8, + encodeQuatXyz888, + encodeSh1Rgb, + encodeSh2Rgb, + encodeSh3Rgb, + epsilonSign, + flipPixels, + floatBitsToUint: floatBitsToUint$1, + floatToSint8, + floatToUint8, + fromHalf, + getArrayBuffers, + getTextureSize, + isAndroid, + isMobile, + isOculus, + mapFilterObject, + mapObject, + newArray, + omitUndefined, + pixelsToPngUrl, + setPackedSplat, + setPackedSplatCenter, + setPackedSplatOpacity, + setPackedSplatQuat, + setPackedSplatRgb, + setPackedSplatScales, + toHalf, + uintBitsToFloat: uintBitsToFloat$1, + unpackSplat, + withinCoinciDist, + withinCoorientDist, + withinDist +}, Symbol.toStringTag, { value: "Module" })); +class DynoProgram { + constructor({ + graph, + inputs, + outputs, + template + }) { + this.graph = graph; + this.template = template; + this.inputs = inputs ?? {}; + this.outputs = outputs ?? {}; + const compile = new Compilation({ indent: this.template.indent }); + for (const key in this.outputs) { + if (this.outputs[key]) { + compile.declares.add(this.outputs[key]); + } + } + const statements = graph.compile({ + inputs: this.inputs, + outputs: this.outputs, + compile + }); + this.shader = template.generate({ globals: compile.globals, statements }); + this.uniforms = compile.uniforms; + this.updaters = compile.updaters; + } + prepareMaterial() { + return getMaterial(this); + } + update() { + for (const updater of this.updaters) { + updater(); + } + } +} +class DynoProgramTemplate { + constructor(template) { + const globals = template.match(/^([ \t]*)\{\{\s*GLOBALS\s*\}\}/m); + const statements = template.match(/^([ \t]*)\{\{\s*STATEMENTS\s*\}\}/m); + if (!globals || !statements) { + throw new Error( + "Template must contain {{ GLOBALS }} and {{ STATEMENTS }}" + ); + } + this.before = template.substring(0, globals.index); + this.between = template.substring( + globals.index + globals[0].length, + statements.index + ); + this.after = template.substring( + statements.index + statements[0].length + ); + this.indent = statements[1]; + } + generate({ + globals, + statements + }) { + return this.before + Array.from(globals).join("\n\n") + this.between + statements.map((s) => this.indent + s).join("\n") + this.after; + } +} +const programMaterial = /* @__PURE__ */ new Map(); +function getMaterial(program) { + let material = programMaterial.get(program); + if (material) { + return material; + } + material = new THREE.RawShaderMaterial({ + glslVersion: THREE.GLSL3, + vertexShader: IDENT_VERTEX_SHADER, + fragmentShader: program.shader, + uniforms: program.uniforms + }); + programMaterial.set(program, material); + return material; +} +function addOutputType(a, b, operation = "add") { + const error = () => { + throw new Error(`Invalid ${operation} types: ${a}, ${b}`); + }; + if (a === b) return a; + if (a === "int") { + if (isIntType(b)) return b; + error(); + } + if (b === "int") { + if (isIntType(a)) return a; + error(); + } + if (a === "uint") { + if (isUintType(b)) return b; + error(); + } + if (b === "uint") { + if (isUintType(a)) return a; + error(); + } + if (a === "float") { + if (isAllFloatType(b)) return b; + error(); + } + if (b === "float") { + if (isAllFloatType(a)) return a; + error(); + } + throw new Error(`Invalid ${operation} types: ${a}, ${b}`); +} +function subOutputType(a, b) { + return addOutputType(a, b, "sub"); +} +function mulOutputType(a, b) { + const error = () => { + throw new Error(`Invalid mul types: ${a}, ${b}`); + }; + const result = (value) => value; + if (a === "int") { + if (isIntType(b)) return result(b); + error(); + } + if (b === "int") { + if (isIntType(a)) return result(a); + error(); + } + if (a === "uint") { + if (isUintType(b)) return result(b); + error(); + } + if (b === "uint") { + if (isUintType(a)) return result(a); + error(); + } + if (a === "float") { + if (isAllFloatType(b)) return result(b); + error(); + } + if (b === "float") { + if (isAllFloatType(a)) return result(a); + error(); + } + if (isIntType(a) || isUintType(a) || isIntType(b) || isUintType(b)) { + if (a === b) return result(a); + error(); + } + if (a === "vec2") { + if (b === "vec2" || isMat2(b)) return result("vec2"); + if (b === "mat3x2") return result("vec3"); + if (b === "mat4x2") return result("vec4"); + error(); + } + if (a === "vec3") { + if (b === "mat2x3") return result("vec2"); + if (b === "vec3" || isMat3(b)) return result("vec3"); + if (b === "mat4x3") return result("vec4"); + error(); + } + if (a === "vec4") { + if (b === "mat2x4") return result("vec2"); + if (b === "mat3x4") return result("vec3"); + if (b === "vec4" || isMat4(b)) return result("vec4"); + error(); + } + if (b === "vec2") { + if (isMat2(a)) return result("vec2"); + if (a === "mat2x3") return result("vec3"); + if (a === "mat2x4") return result("vec4"); + error(); + } + if (b === "vec3") { + if (a === "mat3x2") return result("vec2"); + if (isMat3(a)) return result("vec3"); + if (a === "mat3x4") return result("vec4"); + error(); + } + if (b === "vec4") { + if (a === "mat4x2") return result("vec2"); + if (a === "mat4x3") return result("vec3"); + if (isMat4(a)) return result("vec4"); + error(); + } + if (isMat2(a)) { + if (isMat2(b)) return result("mat2"); + if (b === "mat3x2") return result("mat3x2"); + if (b === "mat4x2") return result("mat4x2"); + error(); + } + if (a === "mat2x3") { + if (isMat2(b)) return result("mat2x3"); + if (b === "mat3x2") return result("mat3"); + if (b === "mat4x2") return result("mat4x3"); + error(); + } + if (a === "mat2x4") { + if (isMat2(b)) return result("mat2x4"); + if (b === "mat3x2") return result("mat3x4"); + if (b === "mat4x2") return result("mat4"); + error(); + } + if (a === "mat3x2") { + if (b === "mat2x3") return result("mat2"); + if (isMat3(b)) return result("mat3x2"); + if (b === "mat4x3") return result("mat4x2"); + error(); + } + if (isMat3(a)) { + if (b === "mat2x3") return result("mat2x3"); + if (isMat3(b)) return result("mat3"); + if (b === "mat4x3") return result("mat4x3"); + error(); + } + if (a === "mat3x4") { + if (b === "mat2x3") return result("mat2x4"); + if (isMat3(b)) return result("mat3x4"); + if (b === "mat4x3") return result("mat4"); + error(); + } + if (a === "mat4x2") { + if (b === "mat2x4") return result("mat2"); + if (b === "mat3x4") return result("mat3x2"); + if (isMat4(b)) return result("mat4x2"); + error(); + } + if (a === "mat4x3") { + if (b === "mat2x4") return result("mat2x3"); + if (b === "mat3x4") return result("mat3"); + if (isMat4(b)) return result("mat4x3"); + error(); + } + if (isMat4(a)) { + if (b === "mat2x4") return result("mat2x4"); + if (b === "mat3x4") return result("mat3x4"); + if (isMat4(b)) return result("mat4"); + error(); + } + throw new Error(`Invalid mul types: ${a}, ${b}`); +} +function divOutputType(a, b) { + return addOutputType(a, b, "div"); +} +function imodOutputType(a, b) { + if (a === b) return a; + if (a === "int") { + if (isIntType(b)) return b; + } else if (b === "int") { + if (isIntType(a)) return a; + } else if (a === "uint") { + if (isUintType(b)) return b; + } else if (b === "uint") { + if (isUintType(a)) return a; + } + throw new Error(`Invalid imod types: ${a}, ${b}`); +} +function modOutputType(a, b) { + if (a === b || b === "float") return a; + throw new Error(`Invalid mod types: ${a}, ${b}`); +} +function modfOutputType(a) { + return a; +} +function negOutputType(a) { + return a; +} +function absOutputType(a) { + return a; +} +function signOutputType(a) { + return a; +} +function floorOutputType(a) { + return a; +} +function ceilOutputType(a) { + return a; +} +function truncOutputType(a) { + return a; +} +function roundOutputType(a) { + return a; +} +function fractOutputType(a) { + return a; +} +function powOutputType(a) { + return a; +} +function expOutputType(a) { + return a; +} +function exp2OutputType(a) { + return a; +} +function logOutputType(a) { + return a; +} +function log2OutputType(a) { + return a; +} +function sqrOutputType(a) { + return a; +} +function sqrtOutputType(a) { + return a; +} +function inversesqrtOutputType(a) { + return a; +} +function minOutputType(a, b, operation = "min") { + if (a === b) return a; + if (b === "float") { + if (isFloatType(a)) return a; + } else if (b === "int") { + if (isIntType(a)) return a; + } else if (b === "uint") { + if (isUintType(a)) return a; + } + throw new Error(`Invalid ${operation} types: ${a}, ${b}`); +} +function maxOutputType(a, b) { + return minOutputType(a, b, "max"); +} +function clampOutputType(a, b, _c) { + if (b === "float") { + if (isFloatType(a)) return a; + } else if (b === "int") { + if (isIntType(a)) return a; + } else if (b === "uint") { + if (isUintType(a)) return a; + } + throw new Error(`Invalid clamp types: ${a}, ${b}`); +} +function mixOutputType(a, b, c) { + if (c === a) return a; + if (c === "float") return a; + if (c === "bool" && a === "float") return a; + if (c === "bvec2" && a === "vec2") return a; + if (c === "bvec3" && a === "vec3") return a; + if (c === "bvec4" && a === "vec4") return a; + throw new Error(`Invalid mix types: ${a}, ${b}, ${c}`); +} +function stepOutputType(a, b) { + if (a === b || b === "float") return b; + throw new Error(`Invalid step types: ${a}, ${b}`); +} +function smoothstepOutputType(a, b, c) { + if (a === b) { + if (a === c || a === "float") return c; + } + throw new Error(`Invalid smoothstep types: ${a}, ${b}, ${c}`); +} +function isNanOutputType(a, operation = "isNan") { + if (a === "float") return "bool"; + if (a === "vec2") return "bvec2"; + if (a === "vec3") return "bvec3"; + if (a === "vec4") return "bvec4"; + throw new Error(`Invalid ${operation} types: ${a}`); +} +function isInfOutputType(a) { + return isNanOutputType(a, "isInf"); +} +const add = (a, b) => new Add({ a, b }); +const sub = (a, b) => new Sub({ a, b }); +const mul = (a, b) => new Mul({ a, b }); +const div = (a, b) => new Div({ a, b }); +const imod = (a, b) => new IMod({ a, b }); +const mod = (a, b) => new Mod({ a, b }); +const modf = (a) => new Modf({ a }).outputs; +const neg = (a) => new Neg({ a }); +const abs = (a) => new Abs({ a }); +const sign = (a) => new Sign({ a }); +const floor = (a) => new Floor({ a }); +const ceil = (a) => new Ceil({ a }); +const trunc = (a) => new Trunc({ a }); +const round = (a) => new Round({ a }); +const fract = (a) => new Fract({ a }); +const pow = (a, b) => new Pow({ a, b }); +const exp = (a) => new Exp({ a }); +const exp2 = (a) => new Exp2({ a }); +const log = (a) => new Log({ a }); +const log2 = (a) => new Log2({ a }); +const sqr = (a) => new Sqr({ a }); +const sqrt = (a) => new Sqrt({ a }); +const inversesqrt = (a) => new InverseSqrt({ a }); +const min = (a, b) => new Min({ a, b }); +const max = (a, b) => new Max({ a, b }); +const clamp = (a, min2, max2) => new Clamp({ a, min: min2, max: max2 }); +const mix = (a, b, t) => new Mix({ a, b, t }); +const step = (edge, x) => new Step({ edge, x }); +const smoothstep = (edge0, edge1, x) => new Smoothstep({ edge0, edge1, x }); +const isNan = (a) => new IsNan({ a }); +const isInf = (a) => new IsInf({ a }); +class Add extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "sum", outTypeFunc: addOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.sum} = ${inputs.a} + ${inputs.b};`]; + }; + } +} +class Sub extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "difference", outTypeFunc: subOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.difference} = ${inputs.a} - ${inputs.b};`]; + }; + } +} +class Mul extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "product", outTypeFunc: mulOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.product} = ${inputs.a} * ${inputs.b};`]; + }; + } +} +class Div extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "quotient", outTypeFunc: divOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.quotient} = ${inputs.a} / ${inputs.b};`]; + }; + } +} +class IMod extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "remainder", outTypeFunc: imodOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.remainder} = ${inputs.a} % ${inputs.b};`]; + }; + } +} +class Mod extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "remainder", outTypeFunc: modOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.remainder} = mod(${inputs.a}, ${inputs.b});`]; + }; + } +} +class Modf extends Dyno { + constructor({ a }) { + const inTypes = { a: valType(a) }; + const outType = modfOutputType(inTypes.a); + const outTypes = { + fract: outType, + integer: outType + }; + super({ inTypes, outTypes, inputs: { a } }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.fract} = modf(${inputs.a}, ${outputs.integer});`]; + }; + } +} +class Neg extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "neg", outTypeFunc: negOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.neg} = -${inputs.a};`]; + }; + } +} +class Abs extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "abs", outTypeFunc: absOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.abs} = abs(${inputs.a});`]; + }; + } +} +class Sign extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "sign", outTypeFunc: signOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.sign} = sign(${inputs.a});`]; + }; + } +} +class Floor extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "floor", outTypeFunc: floorOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.floor} = floor(${inputs.a});`]; + }; + } +} +class Ceil extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "ceil", outTypeFunc: ceilOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.ceil} = ceil(${inputs.a});`]; + }; + } +} +class Trunc extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "trunc", outTypeFunc: truncOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.trunc} = trunc(${inputs.a});`]; + }; + } +} +class Round extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "round", outTypeFunc: roundOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.round} = round(${inputs.a});`]; + }; + } +} +class Fract extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "fract", outTypeFunc: fractOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.fract} = fract(${inputs.a});`]; + }; + } +} +class Pow extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "power", outTypeFunc: powOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.power} = pow(${inputs.a}, ${inputs.b});`]; + }; + } +} +class Exp extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "exp", outTypeFunc: expOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.exp} = exp(${inputs.a});`]; + }; + } +} +class Exp2 extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "exp2", outTypeFunc: exp2OutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.exp2} = exp2(${inputs.a});`]; + }; + } +} +class Log extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "log", outTypeFunc: logOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.log} = log(${inputs.a});`]; + }; + } +} +class Log2 extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "log2", outTypeFunc: log2OutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.log2} = log2(${inputs.a});`]; + }; + } +} +class Sqr extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "sqr", outTypeFunc: sqrOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.sqr} = ${inputs.a} * ${inputs.a};`]; + }; + } +} +class Sqrt extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "sqrt", outTypeFunc: sqrtOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.sqrt} = sqrt(${inputs.a});`]; + }; + } +} +class InverseSqrt extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "inversesqrt", outTypeFunc: inversesqrtOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.inversesqrt} = inversesqrt(${inputs.a});`]; + }; + } +} +class Min extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "min", outTypeFunc: minOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.min} = min(${inputs.a}, ${inputs.b});`]; + }; + } +} +class Max extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "max", outTypeFunc: maxOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.max} = max(${inputs.a}, ${inputs.b});`]; + }; + } +} +class Clamp extends TrinaryOp { + constructor({ + a, + min: min2, + max: max2 + }) { + super({ + a, + b: min2, + c: max2, + outKey: "clamp", + outTypeFunc: clampOutputType + }); + this.statements = ({ inputs, outputs }) => { + const { a: a2, b: min3, c: max3 } = inputs; + return [`${outputs.clamp} = clamp(${a2}, ${min3}, ${max3});`]; + }; + } +} +class Mix extends TrinaryOp { + constructor({ a, b, t }) { + super({ a, b, c: t, outKey: "mix", outTypeFunc: mixOutputType }); + this.statements = ({ inputs, outputs }) => { + const { a: a2, b: b2, c: t2 } = inputs; + return [`${outputs.mix} = mix(${a2}, ${b2}, ${t2});`]; + }; + } +} +class Step extends BinaryOp { + constructor({ edge, x }) { + super({ + a: edge, + b: x, + outKey: "step", + outTypeFunc: stepOutputType + }); + this.statements = ({ inputs, outputs }) => { + const { a: edge2, b: x2 } = inputs; + return [`${outputs.step} = step(${edge2}, ${x2});`]; + }; + } +} +class Smoothstep extends TrinaryOp { + constructor({ + edge0, + edge1, + x + }) { + super({ + a: edge0, + b: edge1, + c: x, + outKey: "smoothstep", + outTypeFunc: smoothstepOutputType + }); + this.statements = ({ inputs, outputs }) => { + const { a: edge02, b: edge12, c: x2 } = inputs; + return [`${outputs.smoothstep} = smoothstep(${edge02}, ${edge12}, ${x2});`]; + }; + } +} +class IsNan extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "isNan", outTypeFunc: isNanOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.isNan} = isNan(${inputs.a});`]; + }; + } +} +class IsInf extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "isInf", outTypeFunc: isInfOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.isInf} = isInf(${inputs.a});`]; + }; + } +} +const and = (a, b) => new And({ a, b }); +const or = (a, b) => new Or({ a, b }); +const xor = (a, b) => new Xor({ a, b }); +const not = (a) => new Not({ a }); +const lessThan = (a, b) => new LessThan({ a, b }); +const lessThanEqual = (a, b) => new LessThanEqual({ a, b }); +const greaterThan = (a, b) => new GreaterThan({ a, b }); +const greaterThanEqual = (a, b) => new GreaterThanEqual({ a, b }); +const equal = (a, b) => new Equal({ a, b }); +const notEqual = (a, b) => new NotEqual({ a, b }); +const any = (a) => new Any({ a }); +const all = (a) => new All({ a }); +const select = (cond, t, f) => new Select({ cond, t, f }); +const compXor = (a) => new CompXor({ a }); +class And extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outTypeFunc: (aType, bType) => aType, outKey: "and" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.and === "bool") { + return [`${outputs.and} = ${inputs.a} && ${inputs.b};`]; + } + return [`${outputs.and} = ${inputs.a} & ${inputs.b};`]; + }; + } +} +class Or extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outTypeFunc: (aType, bType) => aType, outKey: "or" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.or === "bool") { + return [`${outputs.or} = ${inputs.a} || ${inputs.b};`]; + } + return [`${outputs.or} = ${inputs.a} | ${inputs.b};`]; + }; + } +} +class Xor extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outTypeFunc: (aType, bType) => aType, outKey: "xor" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.xor === "bool") { + return [`${outputs.xor} = ${inputs.a} ^^ ${inputs.b};`]; + } + return [`${outputs.xor} = ${inputs.a} ^ ${inputs.b};`]; + }; + } +} +class Not extends UnaryOp { + constructor({ a }) { + super({ a, outTypeFunc: (aType) => aType, outKey: "not" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.not === "bool") { + return [`${outputs.not} = !${inputs.a};`]; + } + return [`${outputs.not} = not(${inputs.a});`]; + }; + } +} +class LessThan extends BinaryOp { + constructor({ a, b }) { + super({ + a, + b, + outTypeFunc: (aType, bType) => compareOutputType(aType, "lessThan"), + outKey: "lessThan" + }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.lessThan === "bool") { + return [`${outputs.lessThan} = ${inputs.a} < ${inputs.b};`]; + } + return [`${outputs.lessThan} = lessThan(${inputs.a}, ${inputs.b});`]; + }; + } +} +class LessThanEqual extends BinaryOp { + constructor({ a, b }) { + super({ + a, + b, + outTypeFunc: (aType, bType) => compareOutputType(aType, "lessThanEqual"), + outKey: "lessThanEqual" + }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.lessThanEqual === "bool") { + return [`${outputs.lessThanEqual} = ${inputs.a} <= ${inputs.b};`]; + } + return [ + `${outputs.lessThanEqual} = lessThanEqual(${inputs.a}, ${inputs.b});` + ]; + }; + } +} +class GreaterThan extends BinaryOp { + constructor({ a, b }) { + super({ + a, + b, + outTypeFunc: (aType, bType) => compareOutputType(aType, "greaterThan"), + outKey: "greaterThan" + }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.greaterThan === "bool") { + return [`${outputs.greaterThan} = ${inputs.a} > ${inputs.b};`]; + } + return [ + `${outputs.greaterThan} = greaterThan(${inputs.a}, ${inputs.b});` + ]; + }; + } +} +class GreaterThanEqual extends BinaryOp { + constructor({ a, b }) { + super({ + a, + b, + outTypeFunc: (aType, bType) => compareOutputType(aType, "greaterThanEqual"), + outKey: "greaterThanEqual" + }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.greaterThanEqual === "bool") { + return [`${outputs.greaterThanEqual} = ${inputs.a} >= ${inputs.b};`]; + } + return [ + `${outputs.greaterThanEqual} = greaterThanEqual(${inputs.a}, ${inputs.b});` + ]; + }; + } +} +class Equal extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outTypeFunc: equalOutputType, outKey: "equal" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.equal === "bool") { + return [`${outputs.equal} = ${inputs.a} == ${inputs.b};`]; + } + return [`${outputs.equal} = equal(${inputs.a}, ${inputs.b});`]; + }; + } +} +class NotEqual extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outTypeFunc: notEqualOutputType, outKey: "notEqual" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.notEqual === "bool") { + return [`${outputs.notEqual} = ${inputs.a} != ${inputs.b};`]; + } + return [`${outputs.notEqual} = notEqual(${inputs.a}, ${inputs.b});`]; + }; + } +} +class Any extends UnaryOp { + constructor({ a }) { + super({ a, outTypeFunc: (aType) => "bool", outKey: "any" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.any} = any(${inputs.a});`]; + }; + } +} +class All extends UnaryOp { + constructor({ a }) { + super({ a, outTypeFunc: (aType) => "bool", outKey: "all" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.all} = all(${inputs.a});`]; + }; + } +} +class Select extends TrinaryOp { + constructor({ + cond, + t, + f + }) { + super({ + a: cond, + b: t, + c: f, + outKey: "select", + outTypeFunc: (aType, bType, cType) => bType + }); + this.statements = ({ inputs, outputs }) => { + const { a: cond2, b: t2, c: f2 } = inputs; + return [`${outputs.select} = (${cond2}) ? (${t2}) : (${f2});`]; + }; + } +} +function compareOutputType(type, operator) { + if (isScalarType(type)) { + return "bool"; + } + if (type === "ivec2" || type === "uvec2" || type === "vec2") { + return "bvec2"; + } + if (type === "ivec3" || type === "uvec3" || type === "vec3") { + return "bvec3"; + } + if (type === "ivec4" || type === "uvec4" || type === "vec4") { + return "bvec4"; + } + throw new Error(`Invalid ${operator} type: ${type}`); +} +function equalOutputType(type, operator = "equal") { + if (isScalarType(type)) { + return "bool"; + } + if (isBoolType(type)) { + return type; + } + if (type === "ivec2" || type === "uvec2" || type === "vec2") { + return "bvec2"; + } + if (type === "ivec3" || type === "uvec3" || type === "vec3") { + return "bvec3"; + } + if (type === "ivec4" || type === "uvec4" || type === "vec4") { + return "bvec4"; + } + throw new Error(`Invalid ${operator} type: ${type}`); +} +function notEqualOutputType(type) { + return equalOutputType(type, "notEqual"); +} +function compXorOutputType(type) { + if (isBoolType(type)) { + return "bool"; + } + if (isIntType(type)) { + return "int"; + } + if (isUintType(type)) { + return "uint"; + } + throw new Error(`Invalid compXor type: ${type}`); +} +class CompXor extends UnaryOp { + constructor({ a }) { + const outType = compXorOutputType(valType(a)); + super({ a, outTypeFunc: (aType) => outType, outKey: "compXor" }); + this.statements = ({ inputs, outputs }) => { + if (isScalarType(this.outTypes.compXor)) { + return [`${outputs.compXor} = ${inputs.a};`]; + } + const components = isVector2Type(outType) ? ["x", "y"] : isVector3Type(outType) ? ["x", "y", "z"] : ["x", "y", "z", "w"]; + const operands = components.map((c) => `${inputs.a}.${c}`); + const operator = isBoolType(outType) ? "^^" : "^"; + return [`${outputs.compXor} = ${operands.join(` ${operator} `)};`]; + }; + } +} +const bool = (value) => new Bool({ value }); +const int = (value) => new Int({ value }); +const uint = (value) => new Uint({ value }); +const float = (value) => new Float({ value }); +const bvec2 = (value) => new BVec2({ value }); +const bvec3 = (value) => new BVec3({ value }); +const bvec4 = (value) => new BVec4({ value }); +const ivec2 = (value) => new IVec2({ value }); +const ivec3 = (value) => new IVec3({ value }); +const ivec4 = (value) => new IVec4({ value }); +const uvec2 = (value) => new UVec2({ value }); +const uvec3 = (value) => new UVec3({ value }); +const uvec4 = (value) => new UVec4({ value }); +const vec2 = (value) => new Vec2({ value }); +const vec3 = (value) => new Vec3({ value }); +const vec4 = (value) => new Vec4({ value }); +const mat2 = (value) => new Mat2({ value }); +const mat3 = (value) => new Mat3({ value }); +const mat4 = (value) => new Mat4({ value }); +const floatBitsToInt = (value) => new FloatBitsToInt({ value }); +const floatBitsToUint = (value) => new FloatBitsToUint({ value }); +const intBitsToFloat = (value) => new IntBitsToFloat({ value }); +const uintBitsToFloat = (value) => new UintBitsToFloat({ value }); +const packSnorm2x16 = (value) => new PackSnorm2x16({ value }); +const unpackSnorm2x16 = (value) => new UnpackSnorm2x16({ value }); +const packUnorm2x16 = (value) => new PackUnorm2x16({ value }); +const unpackUnorm2x16 = (value) => new UnpackUnorm2x16({ value }); +const packHalf2x16 = (value) => new PackHalf2x16({ value }); +const unpackHalf2x16 = (value) => new UnpackHalf2x16({ value }); +const uintToRgba8 = (value) => new UintToRgba8({ value }); +class SimpleCast extends UnaryOp { + constructor({ + value, + outType, + outKey + }) { + super({ a: value, outTypeFunc: () => outType, outKey }); + this.statements = ({ inputs, outputs }) => [ + `${outputs[outKey]} = ${typeLiteral(outType)}(${inputs.a});` + ]; + } +} +class Bool extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "bool", outKey: "bool" }); + } +} +class Int extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "int", outKey: "int" }); + } +} +class Uint extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "uint", outKey: "uint" }); + } +} +class Float extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "float", outKey: "float" }); + } +} +class BVec2 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "bvec2", outKey: "bvec2" }); + } +} +class BVec3 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "bvec3", outKey: "bvec3" }); + } +} +class BVec4 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "bvec4", outKey: "bvec4" }); + } +} +class IVec2 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "ivec2", outKey: "ivec2" }); + } +} +class IVec3 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "ivec3", outKey: "ivec3" }); + } +} +class IVec4 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "ivec4", outKey: "ivec4" }); + } +} +class UVec2 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "uvec2", outKey: "uvec2" }); + } +} +class UVec3 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "uvec3", outKey: "uvec3" }); + } +} +class UVec4 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "uvec4", outKey: "uvec4" }); + } +} +class Vec2 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "vec2", outKey: "vec2" }); + } +} +class Vec3 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "vec3", outKey: "vec3" }); + } +} +class Vec4 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "vec4", outKey: "vec4" }); + } +} +class Mat2 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "mat2", outKey: "mat2" }); + } +} +class Mat3 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "mat3", outKey: "mat3" }); + } +} +class Mat4 extends SimpleCast { + constructor({ + value + }) { + super({ value, outType: "mat4", outKey: "mat4" }); + } +} +class FloatBitsToInt extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "int", outTypeFunc: () => "int" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.int} = floatBitsToInt(${inputs.a});`]; + }; + } +} +class FloatBitsToUint extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "uint", outTypeFunc: () => "uint" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.uint} = floatBitsToUint(${inputs.a});`]; + }; + } +} +class IntBitsToFloat extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "float", outTypeFunc: () => "float" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.float} = intBitsToFloat(${inputs.a});`]; + }; + } +} +class UintBitsToFloat extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "float", outTypeFunc: () => "float" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.float} = uintBitsToFloat(${inputs.a});`]; + }; + } +} +class PackSnorm2x16 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "uint", outTypeFunc: () => "uint" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.uint} = packSnorm2x16(${inputs.a});`]; + }; + } +} +class UnpackSnorm2x16 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "vec2", outTypeFunc: () => "vec2" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.vec2} = unpackSnorm2x16(${inputs.a});`]; + }; + } +} +class PackUnorm2x16 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "uint", outTypeFunc: () => "uint" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.uint} = packUnorm2x16(${inputs.a});`]; + }; + } +} +class UnpackUnorm2x16 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "vec2", outTypeFunc: () => "vec2" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.vec2} = unpackUnorm2x16(${inputs.a});`]; + }; + } +} +class PackHalf2x16 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "uint", outTypeFunc: () => "uint" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.uint} = packHalf2x16(${inputs.a});`]; + }; + } +} +class UnpackHalf2x16 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "vec2", outTypeFunc: () => "vec2" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.vec2} = unpackHalf2x16(${inputs.a});`]; + }; + } +} +class UintToRgba8 extends UnaryOp { + constructor({ value }) { + super({ a: value, outKey: "rgba8", outTypeFunc: () => "vec4" }); + this.statements = ({ inputs, outputs }) => { + return [ + `uvec4 uRgba = uvec4(${inputs.a} & 0xffu, (${inputs.a} >> 8u) & 0xffu, (${inputs.a} >> 16u) & 0xffu, (${inputs.a} >> 24u) & 0xffu);`, + `${outputs.rgba8} = vec4(uRgba) / 255.0;` + ]; + }; + } +} +const length = (a) => new Length({ a }); +const distance = (a, b) => new Distance({ a, b }); +const dot = (a, b) => new Dot({ a, b }); +const cross = (a, b) => new Cross({ a, b }); +const normalize = (a) => new Normalize({ a }); +const faceforward = (a, b, c) => new FaceForward({ a, b, c }); +const reflectVec = (incident, normal) => new ReflectVec({ incident, normal }); +const refractVec = (incident, normal, eta) => new RefractVec({ incident, normal, eta }); +const split = (vector) => new Split({ vector }); +const combine = ({ + vector, + vectorType, + x, + y, + z, + w, + r, + g, + b, + a +}) => new Combine({ vector, vectorType, x, y, z, w, r, g, b, a }); +const projectH = (a) => new ProjectH({ a }); +const extendVec = (a, b) => new ExtendVec({ a, b }); +const swizzle = (a, select2) => new Swizzle({ vector: a, select: select2 }); +const compMult = (a, b) => new CompMult({ a, b }); +const outer = (a, b) => new Outer({ a, b }); +const transpose = (a) => new Transpose({ a }); +const determinant = (a) => new Determinant({ a }); +const inverse = (a) => new Inverse({ a }); +class Length extends UnaryOp { + constructor({ a }) { + super({ a, outTypeFunc: (aType) => "float", outKey: "length" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.length} = length(${inputs.a});` + ]; + } +} +class Distance extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "distance", outTypeFunc: (aType, bType) => "float" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.distance} = distance(${inputs.a}, ${inputs.b});` + ]; + } +} +class Dot extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "dot", outTypeFunc: (aType, bType) => "float" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.dot} = dot(${inputs.a}, ${inputs.b});` + ]; + } +} +class Cross extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "cross", outTypeFunc: (aType, bType) => "vec3" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.cross} = cross(${inputs.a}, ${inputs.b});` + ]; + } +} +class Normalize extends UnaryOp { + constructor({ a }) { + super({ a, outTypeFunc: (aType) => aType, outKey: "normalize" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.normalize} = normalize(${inputs.a});` + ]; + } +} +function projectHOutputType(type) { + if (type === "vec3") { + return "vec2"; + } + if (type === "vec4") { + return "vec3"; + } + throw new Error("Invalid type"); +} +class ProjectH extends UnaryOp { + constructor({ a }) { + super({ + a, + outTypeFunc: (aType) => projectHOutputType(aType), + outKey: "projected" + }); + this.statements = ({ inputs, outputs }) => { + if (this.inTypes.a === "vec3") { + return [`${outputs.projected} = ${inputs.a}.xy / ${inputs.a}.z;`]; + } + if (this.inTypes.a === "vec4") { + return [`${outputs.projected} = ${inputs.a}.xyz / ${inputs.a}.w;`]; + } + throw new Error("Invalid type"); + }; + } +} +function extendVecOutputType(type) { + if (type === "float") return "vec2"; + if (type === "vec2") return "vec3"; + if (type === "vec3") return "vec4"; + throw new Error("Invalid type"); +} +class ExtendVec extends BinaryOp { + constructor({ a, b }) { + const type = valType(a); + const outType = extendVecOutputType(type); + super({ a, b, outKey: "extend", outTypeFunc: () => outType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.extend} = ${outType}(${inputs.a}, ${inputs.b});` + ]; + } +} +class FaceForward extends TrinaryOp { + constructor({ a, b, c }) { + super({ + a, + b, + c, + outKey: "forward", + outTypeFunc: (aType, bType, cType) => aType + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.forward} = faceforward(${inputs.a}, ${inputs.b}, ${inputs.c});` + ]; + } +} +class ReflectVec extends BinaryOp { + constructor({ + incident, + normal + }) { + super({ + a: incident, + b: normal, + outKey: "reflection", + outTypeFunc: (aType, bType) => aType + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.reflection} = reflect(${inputs.a}, ${inputs.b});` + ]; + } +} +class RefractVec extends TrinaryOp { + constructor({ + incident, + normal, + eta + }) { + super({ + a: incident, + b: normal, + c: eta, + outKey: "refraction", + outTypeFunc: (aType, bType, cType) => aType + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.refraction} = refract(${inputs.a}, ${inputs.b}, ${inputs.c});` + ]; + } +} +class CompMult extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "product", outTypeFunc: (aType, bType) => aType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.product} = matrixCompMult(${a}, ${b});` + ]; + } +} +function outerOutputType(aType, bType) { + if (aType === "vec2") { + if (bType === "vec2") return "mat2"; + if (bType === "vec3") return "mat3x2"; + if (bType === "vec4") return "mat4x2"; + } + if (aType === "vec3") { + if (bType === "vec2") return "mat2x3"; + if (bType === "vec3") return "mat3"; + if (bType === "vec4") return "mat4x3"; + } + if (aType === "vec4") { + if (bType === "vec2") return "mat2x4"; + if (bType === "vec3") return "mat3x4"; + if (bType === "vec4") return "mat4"; + } + throw new Error(`Invalid outer type: ${aType}, ${bType}`); +} +class Outer extends BinaryOp { + constructor({ a, b }) { + super({ a, b, outKey: "outer", outTypeFunc: outerOutputType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.outer} = outerProduct(${inputs.a}, ${inputs.b});` + ]; + } +} +function transposeOutputType(type) { + if (type === "mat2") return "mat2"; + if (type === "mat3") return "mat3"; + if (type === "mat4") return "mat4"; + if (type === "mat2x2") return "mat2x2"; + if (type === "mat2x3") return "mat3x2"; + if (type === "mat2x4") return "mat4x2"; + if (type === "mat3x2") return "mat2x3"; + if (type === "mat3x3") return "mat3x3"; + if (type === "mat3x4") return "mat4x3"; + if (type === "mat4x2") return "mat2x4"; + if (type === "mat4x3") return "mat3x4"; + if (type === "mat4x4") return "mat4x4"; + throw new Error(`Invalid transpose type: ${type}`); +} +class Transpose extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "transpose", outTypeFunc: transposeOutputType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.transpose} = transpose(${inputs.a});` + ]; + } +} +class Determinant extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "det", outTypeFunc: (aType) => "float" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.det} = determinant(${inputs.a});` + ]; + } +} +class Inverse extends UnaryOp { + constructor({ a }) { + super({ a, outKey: "inverse", outTypeFunc: (aType) => aType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.inverse} = inverse(${a});` + ]; + } +} +function splitOutTypes(type) { + const result = (value) => value; + switch (type) { + case "vec2": + return result({ x: "float", y: "float", r: "float", g: "float" }); + case "vec3": + return result({ + x: "float", + y: "float", + z: "float", + r: "float", + g: "float", + b: "float" + }); + case "vec4": + return result({ + x: "float", + y: "float", + z: "float", + w: "float", + r: "float", + g: "float", + b: "float", + a: "float" + }); + case "ivec2": + return result({ x: "int", y: "int", r: "int", g: "int" }); + case "ivec3": + return result({ + x: "int", + y: "int", + z: "int", + r: "int", + g: "int", + b: "int" + }); + case "ivec4": + return result({ + x: "int", + y: "int", + z: "int", + w: "int", + r: "int", + g: "int", + b: "int", + a: "int" + }); + case "uvec2": + return result({ x: "uint", y: "uint", r: "uint", g: "uint" }); + case "uvec3": + return result({ + x: "uint", + y: "uint", + z: "uint", + r: "uint", + g: "uint", + b: "uint" + }); + case "uvec4": + return result({ + x: "uint", + y: "uint", + z: "uint", + w: "uint", + r: "uint", + g: "uint", + b: "uint", + a: "uint" + }); + default: + throw new Error(`Invalid vector type: ${type}`); + } +} +class Split extends Dyno { + constructor({ vector }) { + const type = valType(vector); + const inTypes = { vector: type }; + const outTypes = splitOutTypes(inTypes.vector); + super({ inTypes, outTypes, inputs: { vector } }); + this.statements = ({ inputs, outputs }) => { + const { x, y, z, w, r, g, b, a } = outputs; + const { vector: vector2 } = inputs; + return [ + x ? `${x} = ${vector2}.x;` : null, + y ? `${y} = ${vector2}.y;` : null, + z ? `${z} = ${vector2}.z;` : null, + w ? `${w} = ${vector2}.w;` : null, + r ? `${r} = ${vector2}.r;` : null, + g ? `${g} = ${vector2}.g;` : null, + b ? `${b} = ${vector2}.b;` : null, + a ? `${a} = ${vector2}.a;` : null + ].filter(Boolean); + }; + } +} +class Combine extends Dyno { + constructor({ + vector, + vectorType, + x, + y, + z, + w, + r, + g, + b, + a + }) { + if (!vector && !vectorType) { + throw new Error("Either vector or vectorType must be provided"); + } + const vType = vectorType ?? valType(vector); + const elType = vectorElementType(vType); + const dim = vectorDim(vType); + const inTypes = { + vector: vType, + x: elType, + y: elType, + r: elType, + g: elType + }; + const inputs = { vector, x, y, r, g }; + if (dim >= 3) { + Object.assign(inTypes, { z: elType, b: elType }); + Object.assign(inputs, { z, b }); + } + if (dim >= 4) { + Object.assign(inTypes, { w: elType, a: elType }); + Object.assign(inputs, { w, a }); + } + super({ inTypes, outTypes: { vector: vType }, inputs }); + this.statements = ({ inputs: inputs2, outputs }) => { + const { vector: vector2 } = outputs; + const { + vector: input, + x: x2, + y: y2, + z: z2, + w: w2, + r: r2, + g: g2, + b: b2, + a: a2 + } = inputs2; + const statements = [ + `${vector2}.x = ${x2 ?? r2 ?? (input ? `${input}.x` : literalZero(elType))};`, + `${vector2}.y = ${y2 ?? g2 ?? (input ? `${input}.y` : literalZero(elType))};` + ]; + if (dim >= 3) + statements.push( + `${vector2}.z = ${z2 ?? b2 ?? (input ? `${input}.z` : literalZero(elType))};` + ); + if (dim >= 4) + statements.push( + `${vector2}.w = ${w2 ?? a2 ?? (input ? `${input}.w` : literalZero(elType))};` + ); + return statements; + }; + } + dynoOut() { + return new DynoOutput( + this, + "vector" + ); + } +} +function swizzleOutputType(type, swizzle2) { + let result = null; + if (isFloatType(type)) { + result = swizzle2.length === 1 ? "float" : swizzle2.length === 2 ? "vec2" : swizzle2.length === 3 ? "vec3" : swizzle2.length === 4 ? "vec4" : null; + } else if (isIntType(type)) { + result = swizzle2.length === 1 ? "int" : swizzle2.length === 2 ? "ivec2" : swizzle2.length === 3 ? "ivec3" : swizzle2.length === 4 ? "ivec4" : null; + } else if (isUintType(type)) { + result = swizzle2.length === 1 ? "uint" : swizzle2.length === 2 ? "uvec2" : swizzle2.length === 3 ? "uvec3" : swizzle2.length === 4 ? "uvec4" : null; + } + if (result == null) { + throw new Error(`Invalid swizzle: ${swizzle2}`); + } + return result; +} +class Swizzle extends UnaryOp { + constructor({ vector, select: select2 }) { + super({ + a: vector, + outKey: "swizzle", + outTypeFunc: (aType) => swizzleOutputType(aType, select2) + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.swizzle} = ${inputs.a}.${select2};` + ]; + } +} +const remapIndex = (index, from, to) => { + return new DynoRemapIndex({ index, from, to }); +}; +const pcgMix = (value) => { + return new PcgMix({ value }); +}; +const pcgNext = (state) => { + return new PcgNext({ state }); +}; +const pcgHash = (state) => { + return new PcgHash({ state }); +}; +const hash = (value) => { + return new Hash({ value }); +}; +const hash2 = (value) => { + return new Hash2({ value }); +}; +const hash3 = (value) => { + return new Hash3({ value }); +}; +const hash4 = (value) => { + return new Hash4({ value }); +}; +const hashFloat = (value) => { + return new HashFloat({ value }); +}; +const hashVec2 = (value) => { + return new HashVec2({ value }); +}; +const hashVec3 = (value) => { + return new HashVec3({ value }); +}; +const hashVec4 = (value) => { + return new HashVec4({ value }); +}; +class DynoRemapIndex extends Dyno { + constructor({ + from, + to, + index + }) { + super({ + inTypes: { from: "int", to: "int", index: "int" }, + outTypes: { index: "int" }, + inputs: { from, to, index }, + statements: ({ inputs, outputs }) => { + return [ + `${outputs.index} = ${inputs.index} - ${inputs.from} + ${inputs.to};` + ]; + } + }); + } + dynoOut() { + return new DynoOutput(this, "index"); + } +} +class PcgNext extends Dyno { + constructor({ state }) { + const type = valType(state); + super({ + inTypes: { state: type }, + outTypes: { state: "uint" }, + inputs: { state }, + globals: () => [ + unindent(` + uint pcg_next(uint state) { + return state * 747796405u + 2891336453u; + } + `) + ], + statements: ({ inputs, outputs }) => { + const toUint = type === "uint" ? `${inputs.state}` : type === "int" ? `uint(${inputs.state})` : `floatBitsToUint(${inputs.state})`; + return [`${outputs.state} = pcg_next(${toUint});`]; + } + }); + } + dynoOut() { + return new DynoOutput(this, "state"); + } +} +class PcgHash extends Dyno { + constructor({ state }) { + super({ + inTypes: { state: "uint" }, + outTypes: { hash: "uint" }, + inputs: { state }, + globals: () => [ + unindent(` + uint pcg_hash(uint state) { + uint hash = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; + return (hash >> 22u) ^ hash; + } + `) + ], + statements: ({ inputs, outputs }) => [ + `${outputs.hash} = pcg_hash(${inputs.state});` + ] + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class PcgMix extends Dyno { + constructor({ value }) { + const type = valType(value); + const tempType = sameSizeUvec(type); + super({ + inTypes: { value: type }, + outTypes: { state: "uint" }, + inputs: { value }, + globals: () => [ + unindent(` + uint pcg_mix(uint value) { + return value; + } + uint pcg_mix(uvec2 value) { + return value.x + 0x9e3779b9u * value.y; + } + uint pcg_mix(uvec3 value) { + return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z; + } + uint pcg_mix(uvec4 value) { + return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z + 0xc2b2ae35u * value.w; + } + `) + ], + statements: ({ inputs, outputs }) => { + const toUvec = isUintType(type) ? `${inputs.value}` : isIntType(type) ? `${tempType}(${inputs.value})` : `floatBitsToUint(${inputs.value})`; + return [ + `${tempType} bits = ${toUvec};`, + `${outputs.state} = pcg_mix(bits);` + ]; + } + }); + } + dynoOut() { + return new DynoOutput(this, "state"); + } +} +class Hash extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "uint" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + let state = new PcgMix({ value: value2 }).outputs.state; + state = new PcgNext({ state }).outputs.state; + return new PcgHash({ state }).outputs; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class Hash2 extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "uvec2" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + let state = new PcgMix({ value: value2 }).outputs.state; + state = new PcgNext({ state }).outputs.state; + const x = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const y = new PcgHash({ state }).outputs.hash; + return { hash: combine({ vectorType: "uvec2", x, y }) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class Hash3 extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "uvec3" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + let state = new PcgMix({ value: value2 }).outputs.state; + state = new PcgNext({ state }).outputs.state; + const x = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const y = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const z = new PcgHash({ state }).outputs.hash; + return { hash: combine({ vectorType: "uvec3", x, y, z }) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class Hash4 extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "uvec4" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + let state = new PcgMix({ value: value2 }).outputs.state; + state = new PcgNext({ state }).outputs.state; + const x = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const y = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const z = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const w = new PcgHash({ state }).outputs.hash; + return { hash: combine({ vectorType: "uvec4", x, y, z, w }) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class HashFloat extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "float" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + const word = hash(value2); + return { hash: mul(float(word), dynoConst("float", 1 / 2 ** 32)) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class HashVec2 extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "vec2" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + const words = hash2(value2); + return { hash: mul(vec2(words), dynoConst("float", 1 / 2 ** 32)) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class HashVec3 extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "vec3" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + const words = hash3(value2); + return { hash: mul(vec3(words), dynoConst("float", 1 / 2 ** 32)) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +class HashVec4 extends DynoBlock { + constructor({ value }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "vec4" }, + inputs: { value }, + construct: ({ value: value2 }) => { + if (!value2) { + throw new Error("value is required"); + } + const words = hash4(value2); + return { hash: mul(vec4(words), dynoConst("float", 1 / 2 ** 32)) }; + } + }); + } + dynoOut() { + return new DynoOutput(this, "hash"); + } +} +const transformPos = (position, { + scale, + scales, + rotate, + translate +}) => { + return new TransformPosition({ position, scale, scales, rotate, translate }).outputs.position; +}; +const transformRay = (ray, { + scale, + scales, + rotate +}) => { + return new TransformRay({ ray, scale, scales, rotate }).outputs.ray; +}; +const transformQuat = (quaternion, { rotate }) => { + return new TransformQuaternion({ quaternion, rotate }).outputs.quaternion; +}; +class TransformPosition extends Dyno { + constructor({ + position, + scale, + scales, + rotate, + translate + }) { + super({ + inTypes: { + position: "vec3", + scale: "float", + scales: "vec3", + rotate: "vec4", + translate: "vec3" + }, + outTypes: { position: "vec3" }, + inputs: { position, scale, scales, rotate, translate }, + statements: ({ inputs, outputs }) => { + const { position: position2 } = outputs; + if (!position2) { + return []; + } + const { scale: scale2, scales: scales2, rotate: rotate2, translate: translate2 } = inputs; + return [ + `${position2} = ${inputs.position ?? "vec3(0.0, 0.0, 0.0)"};`, + !scale2 ? null : `${position2} *= ${scale2};`, + !scales2 ? null : `${position2} *= ${scales2};`, + !rotate2 ? null : `${position2} = quatVec(${rotate2}, ${position2});`, + !translate2 ? null : `${position2} += ${translate2};` + ].filter(Boolean); + } + }); + } +} +class TransformRay extends Dyno { + constructor({ + ray, + scale, + scales, + rotate + }) { + super({ + inTypes: { ray: "vec3", scale: "float", scales: "vec3", rotate: "vec4" }, + outTypes: { ray: "vec3" }, + inputs: { ray, scale, scales, rotate }, + statements: ({ inputs, outputs }) => { + const { ray: ray2 } = outputs; + if (!ray2) { + return []; + } + const { scale: scale2, scales: scales2, rotate: rotate2 } = inputs; + return [ + `${ray2} = ${inputs.ray ?? "vec3(0.0, 0.0, 0.0)"};`, + !scale2 ? null : `${ray2} *= ${scale2};`, + !scales2 ? null : `${ray2} *= ${scales2};`, + !rotate2 ? null : `${ray2} = quatVec(${rotate2}, ${ray2});` + ].filter(Boolean); + } + }); + } +} +class TransformQuaternion extends Dyno { + constructor({ + quaternion, + rotate + }) { + super({ + inTypes: { quaternion: "vec4", rotate: "vec4" }, + outTypes: { quaternion: "vec4" }, + inputs: { quaternion, rotate }, + statements: ({ inputs, outputs }) => { + const { quaternion: quaternion2 } = outputs; + if (!quaternion2) { + return []; + } + return [ + `${quaternion2} = ${inputs.quaternion ?? "vec4(0.0, 0.0, 0.0, 1.0)"};`, + !rotate ? null : `${quaternion2} = quatQuat(${inputs.rotate}, ${quaternion2});` + ].filter(Boolean); + } + }); + } +} +const dynoIf = () => { + throw new Error("Not implemented"); +}; +const dynoSwitch = () => { + throw new Error("Not implemented"); +}; +const dynoFor = () => { + throw new Error("Not implemented"); +}; +const comment = () => { + throw new Error("Not implemented"); +}; +const arrayIndex = () => { + throw new Error("Not implemented"); +}; +const arrayLength = () => { + throw new Error("Not implemented"); +}; +const textureSize = (texture2, lod) => new TextureSize({ texture: texture2, lod }); +const texture = (texture2, coord, bias) => new Texture({ texture: texture2, coord, bias }); +const texelFetch = (texture2, coord, lod) => new TexelFetch({ texture: texture2, coord, lod }); +class TextureSize extends Dyno { + constructor({ texture: texture2, lod }) { + const textureType = valType(texture2); + super({ + inTypes: { texture: textureType, lod: "int" }, + outTypes: { size: textureSizeType(textureType) }, + inputs: { texture: texture2, lod }, + statements: ({ inputs, outputs }) => [ + `${outputs.size} = textureSize(${inputs.texture}, ${inputs.lod ?? "0"});` + ] + }); + } + dynoOut() { + return new DynoOutput(this, "size"); + } +} +class Texture extends Dyno { + constructor({ + texture: texture2, + coord, + bias + }) { + const textureType = valType(texture2); + super({ + inTypes: { + texture: textureType, + coord: textureCoordType(textureType), + bias: "float" + }, + outTypes: { sample: textureReturnType(textureType) }, + inputs: { texture: texture2, coord, bias }, + statements: ({ inputs, outputs }) => [ + `${outputs.sample} = texture(${inputs.texture}, ${inputs.coord}${inputs.bias ? `, ${inputs.bias}` : ""});` + ] + }); + } + dynoOut() { + return new DynoOutput(this, "sample"); + } +} +class TexelFetch extends Dyno { + constructor({ + texture: texture2, + coord, + lod + }) { + const textureType = valType(texture2); + super({ + inTypes: { + texture: textureType, + coord: textureSizeType(textureType), + lod: "int" + }, + outTypes: { texel: textureReturnType(textureType) }, + inputs: { texture: texture2, coord, lod }, + statements: ({ inputs, outputs }) => [ + `${outputs.texel} = texelFetch(${inputs.texture}, ${inputs.coord}, ${inputs.lod ?? "0"});` + ] + }); + } + dynoOut() { + return new DynoOutput(this, "texel"); + } +} +function textureSizeType(textureType) { + switch (textureType) { + case "sampler2D": + case "usampler2D": + case "isampler2D": + case "samplerCube": + case "usamplerCube": + case "isamplerCube": + case "sampler2DShadow": + case "samplerCubeShadow": + return "ivec2"; + case "sampler3D": + case "usampler3D": + case "isampler3D": + case "sampler2DArray": + case "usampler2DArray": + case "isampler2DArray": + case "sampler2DArrayShadow": + return "ivec3"; + default: + throw new Error(`Invalid texture type: ${textureType}`); + } +} +function textureCoordType(textureType) { + switch (textureType) { + case "sampler2D": + case "usampler2D": + case "isampler2D": + return "vec2"; + case "sampler3D": + case "usampler3D": + case "isampler3D": + case "samplerCube": + case "usamplerCube": + case "isamplerCube": + case "sampler2DArray": + case "usampler2DArray": + case "isampler2DArray": + case "sampler2DShadow": + return "vec3"; + case "samplerCubeShadow": + case "sampler2DArrayShadow": + return "vec4"; + default: + throw new Error(`Invalid texture type: ${textureType}`); + } +} +function textureReturnType(textureType) { + switch (textureType) { + case "sampler2D": + case "sampler2DArray": + case "sampler3D": + case "samplerCube": + case "sampler2DShadow": + return "vec4"; + case "usampler2D": + case "usampler2DArray": + case "usampler3D": + case "usamplerCube": + return "uvec4"; + case "isampler2D": + case "isampler2DArray": + case "isampler3D": + case "isamplerCube": + return "ivec4"; + case "samplerCubeShadow": + case "sampler2DArrayShadow": + return "float"; + default: + throw new Error(`Invalid texture type: ${textureType}`); + } +} +const radians = (degrees2) => new Radians({ degrees: degrees2 }); +const degrees = (radians2) => new Degrees({ radians: radians2 }); +const sin = (radians2) => new Sin({ radians: radians2 }); +const cos = (radians2) => new Cos({ radians: radians2 }); +const tan = (radians2) => new Tan({ radians: radians2 }); +const asin = (sin2) => new Asin({ sin: sin2 }); +const acos = (cos2) => new Acos({ cos: cos2 }); +const atan = (tan2) => new Atan({ tan: tan2 }); +const atan2 = (y, x) => new Atan2({ y, x }); +const sinh = (x) => new Sinh({ x }); +const cosh = (x) => new Cosh({ x }); +const tanh = (x) => new Tanh({ x }); +const asinh = (x) => new Asinh({ x }); +const acosh = (x) => new Acosh({ x }); +const atanh = (x) => new Atanh({ x }); +class Radians extends UnaryOp { + constructor({ degrees: degrees2 }) { + super({ a: degrees2, outTypeFunc: (aType) => aType, outKey: "radians" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.radians} = radians(${inputs.a});` + ]; + } +} +class Degrees extends UnaryOp { + constructor({ radians: radians2 }) { + super({ a: radians2, outTypeFunc: (aType) => aType, outKey: "degrees" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.degrees} = degrees(${inputs.a});` + ]; + } +} +class Sin extends UnaryOp { + constructor({ radians: radians2 }) { + super({ a: radians2, outTypeFunc: (aType) => aType, outKey: "sin" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.sin} = sin(${inputs.a});` + ]; + } +} +class Cos extends UnaryOp { + constructor({ radians: radians2 }) { + super({ a: radians2, outTypeFunc: (aType) => aType, outKey: "cos" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.cos} = cos(${inputs.a});` + ]; + } +} +class Tan extends UnaryOp { + constructor({ radians: radians2 }) { + super({ a: radians2, outTypeFunc: (aType) => aType, outKey: "tan" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.tan} = tan(${inputs.a});` + ]; + } +} +class Asin extends UnaryOp { + constructor({ sin: sin2 }) { + super({ a: sin2, outTypeFunc: (aType) => aType, outKey: "asin" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.asin} = asin(${inputs.a});` + ]; + } +} +class Acos extends UnaryOp { + constructor({ cos: cos2 }) { + super({ a: cos2, outTypeFunc: (aType) => aType, outKey: "acos" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.acos} = acos(${inputs.a});` + ]; + } +} +class Atan extends UnaryOp { + constructor({ tan: tan2 }) { + super({ a: tan2, outTypeFunc: (aType) => aType, outKey: "atan" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.atan} = atan(${inputs.a});` + ]; + } +} +class Atan2 extends BinaryOp { + constructor({ y, x }) { + super({ + a: y, + b: x, + outTypeFunc: (aType, bType) => aType, + outKey: "atan2" + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.atan2} = atan2(${inputs.a}, ${inputs.b});` + ]; + } +} +class Sinh extends UnaryOp { + constructor({ x }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "sinh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.sinh} = sinh(${inputs.a});` + ]; + } +} +class Cosh extends UnaryOp { + constructor({ x }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "cosh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.cosh} = cosh(${inputs.a});` + ]; + } +} +class Tanh extends UnaryOp { + constructor({ x }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "tanh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.tanh} = tanh(${inputs.a});` + ]; + } +} +class Asinh extends UnaryOp { + constructor({ x }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "asinh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.asinh} = asinh(${inputs.a});` + ]; + } +} +class Acosh extends UnaryOp { + constructor({ x }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "acosh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.acosh} = acosh(${inputs.a});` + ]; + } +} +class Atanh extends UnaryOp { + constructor({ x }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "atanh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.atanh} = atanh(${inputs.a});` + ]; + } +} +const dyno = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + Abs, + Acos, + Acosh, + Add, + All, + And, + Any, + Asin, + Asinh, + Atan, + Atan2, + Atanh, + BVec2, + BVec3, + BVec4, + BinaryOp, + Bool, + Ceil, + Clamp, + Combine, + CombineGsplat, + CompMult, + CompXor, + Compilation, + Cos, + Cosh, + Cross, + Degrees, + Determinant, + Distance, + Div, + Dot, + Dyno, + DynoBlock, + DynoBool, + DynoBvec2, + DynoBvec3, + DynoBvec4, + DynoConst, + DynoFloat, + DynoInt, + DynoIsampler2D, + DynoIsampler2DArray, + DynoIsampler3D, + DynoIsamplerCube, + DynoIvec2, + DynoIvec3, + DynoIvec4, + DynoLiteral, + DynoMat2, + DynoMat2x2, + DynoMat2x3, + DynoMat2x4, + DynoMat3, + DynoMat3x2, + DynoMat3x3, + DynoMat3x4, + DynoMat4, + DynoMat4x2, + DynoMat4x3, + DynoMat4x4, + DynoOutput, + DynoProgram, + DynoProgramTemplate, + DynoRemapIndex, + DynoSampler2D, + DynoSampler2DArray, + DynoSampler2DArrayShadow, + DynoSampler2DShadow, + DynoSampler3D, + DynoSamplerCube, + DynoSamplerCubeShadow, + DynoUint, + DynoUniform, + DynoUsampler2D, + DynoUsampler2DArray, + DynoUsampler3D, + DynoUsamplerCube, + DynoUvec2, + DynoUvec3, + DynoUvec4, + DynoValue, + DynoVec2, + DynoVec3, + DynoVec4, + Equal, + Exp, + Exp2, + ExtendVec, + FaceForward, + Float, + FloatBitsToInt, + FloatBitsToUint, + Floor, + Fract, + GreaterThan, + GreaterThanEqual, + Gsplat, + GsplatNormal, + Hash, + Hash2, + Hash3, + Hash4, + HashFloat, + HashVec2, + HashVec3, + HashVec4, + IMod, + IVec2, + IVec3, + IVec4, + Int, + IntBitsToFloat, + Inverse, + InverseSqrt, + IsInf, + IsNan, + Length, + LessThan, + LessThanEqual, + Log, + Log2, + Mat2, + Mat3, + Mat4, + Max, + Min, + Mix, + Mod, + Modf, + Mul, + Neg, + Normalize, + Not, + NotEqual, + NumPackedSplats, + Or, + Outer, + OutputPackedSplat, + OutputRgba8, + PackHalf2x16, + PackSnorm2x16, + PackUnorm2x16, + PcgHash, + PcgMix, + PcgNext, + Pow, + ProjectH, + Radians, + ReadPackedSplat, + ReadPackedSplatRange, + ReflectVec, + RefractVec, + Round, + Select, + Sign, + SimpleCast, + Sin, + Sinh, + Smoothstep, + Split, + SplitGsplat, + Sqr, + Sqrt, + Step, + Sub, + Swizzle, + TPackedSplats, + Tan, + Tanh, + TexelFetch, + Texture, + TextureSize, + TransformGsplat, + TransformPosition, + TransformQuaternion, + TransformRay, + Transpose, + TrinaryOp, + Trunc, + UVec2, + UVec3, + UVec4, + Uint, + UintBitsToFloat, + UintToRgba8, + UnaryOp, + UnpackHalf2x16, + UnpackSnorm2x16, + UnpackUnorm2x16, + Vec2, + Vec3, + Vec4, + Xor, + abs, + acos, + acosh, + add, + all, + and, + any, + arrayIndex, + arrayLength, + asin, + asinh, + atan, + atan2, + atanh, + bool, + bvec2, + bvec3, + bvec4, + ceil, + clamp, + combine, + combineGsplat, + comment, + compMult, + compXor, + cos, + cosh, + cross, + defineGsplat, + defineGsplatNormal, + definePackedSplats, + degrees, + determinant, + distance, + div, + dot, + dyno: dyno$1, + dynoBlock, + dynoBool, + dynoBvec2, + dynoBvec3, + dynoBvec4, + dynoConst, + dynoDeclare, + dynoFloat, + dynoFor, + dynoIf, + dynoInt, + dynoIsampler2D, + dynoIsampler2DArray, + dynoIsampler3D, + dynoIsamplerCube, + dynoIvec2, + dynoIvec3, + dynoIvec4, + dynoLiteral, + dynoMat2, + dynoMat2x2, + dynoMat2x3, + dynoMat2x4, + dynoMat3, + dynoMat3x2, + dynoMat3x3, + dynoMat3x4, + dynoMat4, + dynoMat4x2, + dynoMat4x3, + dynoMat4x4, + dynoSampler2D, + dynoSampler2DArray, + dynoSampler2DArrayShadow, + dynoSampler2DShadow, + dynoSampler3D, + dynoSamplerCube, + dynoSamplerCubeShadow, + dynoSwitch, + dynoUint, + dynoUsampler2D, + dynoUsampler2DArray, + dynoUsampler3D, + dynoUsamplerCube, + dynoUvec2, + dynoUvec3, + dynoUvec4, + dynoVec2, + dynoVec3, + dynoVec4, + equal, + exp, + exp2, + extendVec, + faceforward, + float, + floatBitsToInt, + floatBitsToUint, + floor, + fract, + greaterThan, + greaterThanEqual, + gsplatNormal, + hash, + hash2, + hash3, + hash4, + hashFloat, + hashVec2, + hashVec3, + hashVec4, + imod, + int, + intBitsToFloat, + inverse, + inversesqrt, + isAllFloatType, + isBoolType, + isFloatType, + isInf, + isIntType, + isMat2, + isMat3, + isMat4, + isMatFloatType, + isNan, + isScalarType, + isUintType, + isVector2Type, + isVector3Type, + isVector4Type, + isVectorType, + ivec2, + ivec3, + ivec4, + length, + lessThan, + lessThanEqual, + literalNegOne, + literalOne, + literalZero, + log, + log2, + mat2, + mat3, + mat4, + max, + min, + mix, + mod, + modf, + mul, + neg, + normalize, + not, + notEqual, + numPackedSplats, + numberAsFloat, + numberAsInt, + numberAsUint, + or, + outer, + outputPackedSplat, + outputRgba8, + packHalf2x16, + packSnorm2x16, + packUnorm2x16, + pcgHash, + pcgMix, + pcgNext, + pow, + projectH, + radians, + readPackedSplat, + readPackedSplatRange, + reflectVec, + refractVec, + remapIndex, + round, + sameSizeIvec, + sameSizeUvec, + sameSizeVec, + select, + sign, + sin, + sinh, + smoothstep, + split, + splitGsplat, + sqr, + sqrt, + step, + sub, + swizzle, + tan, + tanh, + texelFetch, + texture, + textureSize, + transformGsplat, + transformPos, + transformQuat, + transformRay, + transpose, + trunc, + typeLiteral, + uint, + uintBitsToFloat, + uintToRgba8, + uniform, + unindent, + unindentLines, + unpackHalf2x16, + unpackSnorm2x16, + unpackUnorm2x16, + uvec2, + uvec3, + uvec4, + valType, + vec2, + vec3, + vec4, + vectorDim, + vectorElementType, + xor +}, Symbol.toStringTag, { value: "Module" })); +var computeVec4_default = "precision highp float;\nprecision highp int;\nprecision highp sampler2D;\nprecision highp usampler2D;\nprecision highp isampler2D;\nprecision highp sampler2DArray;\nprecision highp usampler2DArray;\nprecision highp isampler2DArray;\nprecision highp sampler3D;\nprecision highp usampler3D;\nprecision highp isampler3D;\n\n#include \n\nuniform uint targetLayer;\nuniform int targetBase;\nuniform int targetCount;\n\nout vec4 target;\n\n{{ GLOBALS }}\n\nvoid computeReadback(int index) {\n {{ STATEMENTS }}\n}\n\nvoid main() {\n int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x);\n int index = targetIndex - targetBase;\n\n if ((index >= 0) && (index < targetCount)) {\n computeReadback(index);\n } else {\n target = vec4(0.0, 0.0, 0.0, 0.0);\n }\n}"; +const _Readback = class _Readback { + constructor({ renderer } = {}) { + this.renderer = renderer; + this.capacity = 0; + this.count = 0; + } + dispose() { + if (this.target) { + this.target.dispose(); + this.target = void 0; + } + } + // Ensure we have a buffer large enough for the readback of count indices. + // Pass in previous bufer of the desired type. + ensureBuffer(count, buffer) { + const roundedCount = Math.ceil(Math.max(1, count) / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + const bytes = roundedCount * 4; + if (buffer.byteLength >= bytes) { + return buffer; + } + const newBuffer = new ArrayBuffer(bytes); + if (buffer instanceof ArrayBuffer) { + return newBuffer; + } + const ctor = buffer.constructor; + return new ctor(newBuffer); + } + // Ensure our render target is large enough for the readback of capacity indices. + ensureCapacity(capacity) { + const { width, height, depth, maxSplats } = getTextureSize(capacity); + if (!this.target || maxSplats > this.capacity) { + this.dispose(); + this.capacity = maxSplats; + this.target = new THREE.WebGLArrayRenderTarget(width, height, depth, { + depthBuffer: false, + stencilBuffer: false, + generateMipmaps: false, + magFilter: THREE.NearestFilter, + minFilter: THREE.NearestFilter + }); + this.target.texture.format = THREE.RGBAFormat; + this.target.texture.type = THREE.UnsignedByteType; + this.target.texture.internalFormat = "RGBA8"; + } + } + // Get a program and THREE.RawShaderMaterial for a given Rgba8Readback, + // generating it if necessary and caching the result. + prepareProgramMaterial(reader) { + let program = _Readback.readbackProgram.get(reader); + if (!program) { + const graph = dynoBlock( + { index: "int" }, + { rgba8: "vec4" }, + ({ index }) => { + reader.inputs.index = index; + const rgba8 = new OutputRgba8({ rgba8: reader.outputs.rgba8 }); + return { rgba8 }; + } + ); + if (!_Readback.programTemplate) { + _Readback.programTemplate = new DynoProgramTemplate(computeVec4_default); + } + program = new DynoProgram({ + graph, + inputs: { index: "index" }, + outputs: { rgba8: "target" }, + template: _Readback.programTemplate + }); + Object.assign(program.uniforms, { + targetLayer: { value: 0 }, + targetBase: { value: 0 }, + targetCount: { value: 0 } + }); + _Readback.readbackProgram.set(reader, program); + } + const material = program.prepareMaterial(); + _Readback.mesh.material = material; + return { program, material }; + } + saveRenderState(renderer) { + return { + xrPresenting: renderer.xr.isPresenting, + autoClear: renderer.autoClear, + scissorTest: renderer.getScissorTest() + }; + } + resetRenderState(renderer, state) { + renderer.setRenderTarget(null); + renderer.xr.isPresenting = state.xrPresenting; + renderer.autoClear = state.autoClear; + renderer.setScissorTest(state.scissorTest); + } + process({ + count, + material + }) { + const renderer = this.renderer; + if (!renderer) { + throw new Error("No renderer"); + } + if (!this.target) { + throw new Error("No target"); + } + const layerSize = SPLAT_TEX_WIDTH * SPLAT_TEX_HEIGHT; + material.uniforms.targetBase.value = 0; + material.uniforms.targetCount.value = count; + let baseIndex = 0; + while (baseIndex < count) { + const layer = Math.floor(baseIndex / layerSize); + const layerBase = layer * layerSize; + const layerYEnd = Math.min( + SPLAT_TEX_HEIGHT, + Math.ceil((count - layerBase) / SPLAT_TEX_WIDTH) + ); + material.uniforms.targetLayer.value = layer; + renderer.setRenderTarget(this.target, layer); + renderer.xr.isPresenting = false; + renderer.autoClear = false; + renderer.setScissorTest(true); + renderer.setScissor(0, 0, SPLAT_TEX_WIDTH, layerYEnd); + renderer.render(_Readback.scene, _Readback.camera); + baseIndex += SPLAT_TEX_WIDTH * layerYEnd; + } + this.count = count; + } + async read({ + readback + }) { + const renderer = this.renderer; + if (!renderer) { + throw new Error("No renderer"); + } + if (!this.target) { + throw new Error("No target"); + } + const roundedCount = Math.ceil(this.count / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + if (readback.byteLength < roundedCount * 4) { + throw new Error( + `Readback buffer too small: ${readback.byteLength} < ${roundedCount * 4}` + ); + } + const readbackUint8 = new Uint8Array( + readback instanceof ArrayBuffer ? readback : readback.buffer + ); + const layerSize = SPLAT_TEX_WIDTH * SPLAT_TEX_HEIGHT; + let baseIndex = 0; + const promises = []; + while (baseIndex < this.count) { + const layer = Math.floor(baseIndex / layerSize); + const layerBase = layer * layerSize; + const layerYEnd = Math.min( + SPLAT_TEX_HEIGHT, + Math.ceil((this.count - layerBase) / SPLAT_TEX_WIDTH) + ); + renderer.setRenderTarget(this.target, layer); + const readbackSize = SPLAT_TEX_WIDTH * layerYEnd * 4; + const subReadback = readbackUint8.subarray( + layerBase * 4, + layerBase * 4 + readbackSize + ); + const promise = renderer == null ? void 0 : renderer.readRenderTargetPixelsAsync( + this.target, + 0, + 0, + SPLAT_TEX_WIDTH, + layerYEnd, + subReadback + ); + promises.push(promise); + baseIndex += SPLAT_TEX_WIDTH * layerYEnd; + } + return Promise.all(promises).then(() => readback); + } + // Perform render operation to run the Rgba8Readback program + // but don't perform the readback yet. + render({ + reader, + count, + renderer + }) { + this.renderer = renderer || this.renderer; + if (!this.renderer) { + throw new Error("No renderer"); + } + this.ensureCapacity(count); + const { program, material } = this.prepareProgramMaterial(reader); + program.update(); + const renderState = this.saveRenderState(this.renderer); + this.process({ count, material }); + this.resetRenderState(this.renderer, renderState); + } + // Perform a readback of the render target, returning a buffer of the + // given type. + async readback({ + readback + }) { + if (!this.renderer) { + throw new Error("No renderer"); + } + const renderState = this.saveRenderState(this.renderer); + const promise = this.read({ readback }); + this.resetRenderState(this.renderer, renderState); + return promise; + } + // Perform a render and readback operation for the given Rgba8Readback, + // and readback buffer (call ensureBuffer first). + async renderReadback({ + reader, + count, + renderer, + readback + }) { + this.renderer = renderer || this.renderer; + if (!this.renderer) { + throw new Error("No renderer"); + } + this.ensureCapacity(count); + const { program, material } = this.prepareProgramMaterial(reader); + program.update(); + const renderState = this.saveRenderState(this.renderer); + this.process({ count, material }); + const promise = this.read({ readback }); + this.resetRenderState(this.renderer, renderState); + return promise; + } + getTexture() { + var _a2; + return (_a2 = this.target) == null ? void 0 : _a2.texture; + } +}; +_Readback.programTemplate = null; +_Readback.readbackProgram = /* @__PURE__ */ new Map(); +_Readback.geometry = new THREE.PlaneGeometry(2, 2); +_Readback.mesh = new THREE.Mesh( + _Readback.geometry, + new THREE.RawShaderMaterial({ visible: false }) +); +_Readback.scene = new THREE.Scene().add(_Readback.mesh); +_Readback.camera = new THREE.Camera(); +let Readback = _Readback; +const _RgbaArray = class _RgbaArray { + constructor(options = {}) { + this.capacity = 0; + this.count = 0; + this.array = null; + this.readback = null; + this.source = null; + this.needsUpdate = true; + this.dyno = new DynoUniform({ + key: "rgbaArray", + type: TRgbaArray, + globals: () => [defineRgbaArray], + value: { + texture: _RgbaArray.getEmpty(), + count: 0 + }, + update: (value) => { + var _a2; + value.texture = ((_a2 = this.readback) == null ? void 0 : _a2.getTexture()) ?? this.source ?? _RgbaArray.getEmpty(); + value.count = this.count; + return value; + } + }); + if (options.array) { + this.array = options.array; + this.capacity = Math.floor(this.array.length / 4); + this.capacity = Math.floor(this.capacity / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + this.count = Math.min( + this.capacity, + options.count ?? Number.POSITIVE_INFINITY + ); + } else { + this.capacity = options.capacity ?? 0; + this.count = 0; + } + } + // Free up resources + dispose() { + if (this.readback) { + this.readback.dispose(); + this.readback = null; + } + if (this.source) { + this.source.dispose(); + this.source = null; + } + } + // Ensure that our array is large enough to hold capacity RGBA8 values. + ensureCapacity(capacity) { + var _a2; + if (!this.array || capacity > (((_a2 = this.array) == null ? void 0 : _a2.length) ?? 0) / 4) { + this.capacity = getTextureSize(capacity).maxSplats; + const newArray2 = new Uint8Array(this.capacity * 4); + if (this.array) { + newArray2.set(this.array); + } + this.array = newArray2; + } + return this.array; + } + // Get the THREE.DataArrayTexture from either the readback or the source. + getTexture() { + var _a2; + let texture2 = (_a2 = this.readback) == null ? void 0 : _a2.getTexture(); + if (this.source || this.array) { + texture2 = this.maybeUpdateSource(); + } + return texture2 ?? _RgbaArray.getEmpty(); + } + // Create or get a THREE.DataArrayTexture from the data array. + maybeUpdateSource() { + if (!this.array) { + throw new Error("No array"); + } + if (this.needsUpdate || !this.source) { + this.needsUpdate = false; + if (this.source) { + const { width, height, depth } = this.source.image; + if (this.capacity !== width * height * depth) { + this.source.dispose(); + this.source = null; + } + } + if (!this.source) { + const { width, height, depth } = getTextureSize(this.capacity); + this.source = new THREE.DataArrayTexture( + this.array, + width, + height, + depth + ); + this.source.format = THREE.RGBAFormat; + this.source.type = THREE.UnsignedByteType; + this.source.internalFormat = "RGBA8"; + this.source.needsUpdate = true; + } else if (this.array.buffer !== this.source.image.data.buffer) { + this.source.image.data = new Uint8Array(this.array.buffer); + } + this.source.needsUpdate = true; + } + return this.source; + } + // Generate the RGBA8 values from a Rgba8Readback dyno program. + render({ + reader, + count, + renderer + }) { + if (!this.readback) { + this.readback = new Readback({ renderer }); + } + this.readback.render({ reader, count, renderer }); + this.capacity = this.readback.capacity; + this.count = this.readback.count; + } + // Extract the RGBA8 values from a PackedSplats collection. + fromPackedSplats({ + packedSplats, + base, + count, + renderer + }) { + const { dynoSplats, dynoBase, dynoCount, reader } = _RgbaArray.makeDynos(); + dynoSplats.packedSplats = packedSplats; + dynoBase.value = base; + dynoCount.value = count; + this.render({ reader, count, renderer }); + return this; + } + // Read back the RGBA8 values from the readback buffer. + async read() { + if (!this.readback) { + throw new Error("No readback"); + } + if (!this.array || this.array.length < this.count * 4) { + this.array = new Uint8Array(this.capacity * 4); + } + const result = await this.readback.readback({ readback: this.array }); + return result.subarray(0, this.count * 4); + } + // Can be used where you need an uninitialized THREE.DataArrayTexture like + // a uniform you will update with the result of this.getTexture() later. + static getEmpty() { + if (!_RgbaArray.emptySource) { + const emptyArray = new Uint8Array(1 * 4); + _RgbaArray.emptySource = new THREE.DataArrayTexture(emptyArray, 1, 1, 1); + _RgbaArray.emptySource.format = THREE.RGBAFormat; + _RgbaArray.emptySource.type = THREE.UnsignedByteType; + _RgbaArray.emptySource.internalFormat = "RGBA8"; + _RgbaArray.emptySource.needsUpdate = true; + } + return _RgbaArray.emptySource; + } + // Create a dyno program that can extract RGBA8 values from a PackedSplats + static makeDynos() { + if (!_RgbaArray.dynos) { + const dynoSplats = new DynoPackedSplats(); + const dynoBase = new DynoInt({ value: 0 }); + const dynoCount = new DynoInt({ value: 0 }); + const reader = dynoBlock( + { index: "int" }, + { rgba8: "vec4" }, + ({ index }) => { + if (!index) { + throw new Error("index is undefined"); + } + index = add(index, dynoBase); + const gsplat = readPackedSplatRange( + dynoSplats, + index, + dynoBase, + dynoCount + ); + return { rgba8: splitGsplat(gsplat).outputs.rgba }; + } + ); + _RgbaArray.dynos = { dynoSplats, dynoBase, dynoCount, reader }; + } + return _RgbaArray.dynos; + } +}; +_RgbaArray.emptySource = null; +_RgbaArray.dynos = null; +let RgbaArray = _RgbaArray; +const TRgbaArray = { type: "RgbaArray" }; +const defineRgbaArray = unindent(` + struct RgbaArray { + sampler2DArray texture; + int count; + }; +`); +function readRgbaArray(rgba, index) { + const dyno2 = new Dyno({ + inTypes: { rgba: TRgbaArray, index: "int" }, + outTypes: { rgba: "vec4" }, + inputs: { rgba, index }, + globals: () => [defineRgbaArray], + statements: ({ inputs, outputs }) => unindentLines(` + if ((index >= 0) && (index < ${inputs.rgba}.count)) { + ${outputs.rgba} = texelFetch(${inputs.rgba}.texture, splatTexCoord(index), 0); + } else { + ${outputs.rgba} = vec4(0.0, 0.0, 0.0, 0.0); + } + `) + }); + return dyno2.outputs.rgba; +} +var SplatEditSdfType = /* @__PURE__ */ ((SplatEditSdfType2) => { + SplatEditSdfType2["ALL"] = "all"; + SplatEditSdfType2["PLANE"] = "plane"; + SplatEditSdfType2["SPHERE"] = "sphere"; + SplatEditSdfType2["BOX"] = "box"; + SplatEditSdfType2["ELLIPSOID"] = "ellipsoid"; + SplatEditSdfType2["CYLINDER"] = "cylinder"; + SplatEditSdfType2["CAPSULE"] = "capsule"; + SplatEditSdfType2["INFINITE_CONE"] = "infinite_cone"; + return SplatEditSdfType2; +})(SplatEditSdfType || {}); +function sdfTypeToNumber(type) { + switch (type) { + case "all": + return 0; + case "plane": + return 1; + case "sphere": + return 2; + case "box": + return 3; + case "ellipsoid": + return 4; + case "cylinder": + return 5; + case "capsule": + return 6; + case "infinite_cone": + return 7; + default: + throw new Error(`Unknown SDF type: ${type}`); + } +} +var SplatEditRgbaBlendMode = /* @__PURE__ */ ((SplatEditRgbaBlendMode2) => { + SplatEditRgbaBlendMode2["MULTIPLY"] = "multiply"; + SplatEditRgbaBlendMode2["SET_RGB"] = "set_rgb"; + SplatEditRgbaBlendMode2["ADD_RGBA"] = "add_rgba"; + return SplatEditRgbaBlendMode2; +})(SplatEditRgbaBlendMode || {}); +function rgbaBlendModeToNumber(mode) { + switch (mode) { + case "multiply": + return 0; + case "set_rgb": + return 1; + case "add_rgba": + return 2; + default: + throw new Error(`Unknown blend mode: ${mode}`); + } +} +class SplatEditSdf extends THREE.Object3D { + constructor(options = {}) { + super(); + const { type, invert, opacity, color, displace, radius } = options; + this.type = type ?? "sphere"; + this.invert = invert ?? false; + this.opacity = opacity ?? 1; + this.color = color ?? new THREE.Color(1, 1, 1); + this.displace = displace ?? new THREE.Vector3(0, 0, 0); + this.radius = radius ?? 0; + } +} +const _SplatEdit = class _SplatEdit extends THREE.Object3D { + constructor(options = {}) { + const { + name, + rgbaBlendMode = "multiply", + sdfSmooth = 0, + softEdge = 0, + invert = false, + sdfs = null + } = options; + super(); + this.rgbaBlendMode = rgbaBlendMode; + this.sdfSmooth = sdfSmooth; + this.softEdge = softEdge; + this.invert = invert; + this.sdfs = sdfs; + this.ordering = _SplatEdit.nextOrdering++; + this.name = name ?? `Edit ${this.ordering}`; + } + addSdf(sdf) { + if (this.sdfs == null) { + this.sdfs = []; + } + this.sdfs.push(sdf); + } + removeSdf(sdf) { + if (this.sdfs == null) { + return; + } + this.sdfs = this.sdfs.filter((s) => s !== sdf); + } +}; +_SplatEdit.nextOrdering = 1; +let SplatEdit = _SplatEdit; +class SplatEdits { + constructor({ maxSdfs, maxEdits }) { + this.maxSdfs = Math.max(16, maxSdfs ?? 0); + this.numSdfs = 0; + this.sdfData = new Uint32Array(this.maxSdfs * 8 * 4); + this.sdfFloatData = new Float32Array(this.sdfData.buffer); + this.sdfTexture = this.newSdfTexture(this.sdfData, this.maxSdfs); + this.dynoSdfArray = new DynoUniform({ + key: "sdfArray", + type: SdfArray, + globals: () => [defineSdfArray], + value: { + numSdfs: 0, + sdfTexture: this.sdfTexture + }, + update: (uniform2) => { + uniform2.numSdfs = this.numSdfs; + uniform2.sdfTexture = this.sdfTexture; + return uniform2; + } + }); + this.maxEdits = Math.max(16, maxEdits ?? 0); + this.numEdits = 0; + this.editData = new Uint32Array(this.maxEdits * 4); + this.editFloatData = new Float32Array(this.editData.buffer); + this.dynoNumEdits = new DynoInt({ value: 0 }); + this.dynoEdits = this.newEdits(this.editData, this.maxEdits); + } + newSdfTexture(data, maxSdfs) { + const texture2 = new THREE.DataTexture( + data, + 8, + maxSdfs, + THREE.RGBAIntegerFormat, + THREE.UnsignedIntType + ); + texture2.internalFormat = "RGBA32UI"; + texture2.needsUpdate = true; + return texture2; + } + newEdits(data, maxEdits) { + return new DynoUniform({ + key: "edits", + type: "uvec4", + count: maxEdits, + globals: () => [defineEdit], + value: data + }); + } + // Ensure our SDF texture and edits uniform array have enough capacity. + // Reallocate if not. + ensureCapacity({ + maxSdfs, + maxEdits + }) { + let dynoUpdated = false; + if (maxSdfs > this.sdfTexture.image.height) { + this.sdfTexture.dispose(); + this.maxSdfs = Math.max(this.maxSdfs * 2, maxSdfs); + this.sdfData = new Uint32Array(this.maxSdfs * 8 * 4); + this.sdfFloatData = new Float32Array(this.sdfData.buffer); + this.sdfTexture = this.newSdfTexture(this.sdfData, this.maxSdfs); + } + if (maxEdits > (this.dynoEdits.count ?? 0)) { + this.maxEdits = Math.max(this.maxEdits * 2, maxEdits); + this.editData = new Uint32Array(this.maxEdits * 4); + this.editFloatData = new Float32Array(this.editData.buffer); + this.dynoEdits = this.newEdits(this.editData, this.maxEdits); + dynoUpdated = true; + } + return dynoUpdated; + } + updateEditData(offset, value) { + const updated = this.editData[offset] !== value; + this.editData[offset] = value; + return updated; + } + updateEditFloatData(offset, value) { + tempFloat32[0] = value; + const updated = this.editFloatData[offset] !== tempFloat32[0]; + if (updated) { + this.editFloatData[offset] = tempFloat32[0]; + } + return updated; + } + encodeEdit(editIndex, { + sdfFirst, + sdfCount, + invert, + rgbaBlendMode, + softEdge, + sdfSmooth + }) { + const base = editIndex * 4; + let updated = false; + updated = this.updateEditData(base + 0, rgbaBlendMode | (invert ? 1 << 8 : 0)) || updated; + updated = this.updateEditData(base + 1, sdfFirst | sdfCount << 16) || updated; + updated = this.updateEditFloatData(base + 2, softEdge) || updated; + updated = this.updateEditFloatData(base + 3, sdfSmooth) || updated; + return updated; + } + updateSdfData(offset, value) { + const updated = this.sdfData[offset] !== value; + this.sdfData[offset] = value; + return updated; + } + updateSdfFloatData(offset, value) { + tempFloat32[0] = value; + const updated = this.sdfFloatData[offset] !== tempFloat32[0]; + if (updated) { + this.sdfFloatData[offset] = tempFloat32[0]; + } + return updated; + } + encodeSdf(sdfIndex, { + sdfType, + invert, + center, + quaternion, + scale, + sizes + }, values) { + const base = sdfIndex * (8 * 4); + const flags = sdfType | (invert ? 1 << 8 : 0); + let updated = false; + updated = this.updateSdfFloatData(base + 0, (center == null ? void 0 : center.x) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 1, (center == null ? void 0 : center.y) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 2, (center == null ? void 0 : center.z) ?? 0) || updated; + updated = this.updateSdfData(base + 3, flags) || updated; + updated = this.updateSdfFloatData(base + 4, (quaternion == null ? void 0 : quaternion.x) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 5, (quaternion == null ? void 0 : quaternion.y) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 6, (quaternion == null ? void 0 : quaternion.z) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 7, (quaternion == null ? void 0 : quaternion.w) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 8, (scale == null ? void 0 : scale.x) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 9, (scale == null ? void 0 : scale.y) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 10, (scale == null ? void 0 : scale.z) ?? 0) || updated; + updated = this.updateSdfData(base + 11, 0) || updated; + updated = this.updateSdfFloatData(base + 12, (sizes == null ? void 0 : sizes.x) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 13, (sizes == null ? void 0 : sizes.y) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 14, (sizes == null ? void 0 : sizes.z) ?? 0) || updated; + updated = this.updateSdfFloatData(base + 15, (sizes == null ? void 0 : sizes.w) ?? 0) || updated; + const nValues = Math.min(4, values.length); + for (let i = 0; i < nValues; ++i) { + const vBase = base + 16 + i * 4; + updated = this.updateSdfFloatData(vBase + 0, values[i].x) || updated; + updated = this.updateSdfFloatData(vBase + 1, values[i].y) || updated; + updated = this.updateSdfFloatData(vBase + 2, values[i].z) || updated; + updated = this.updateSdfFloatData(vBase + 3, values[i].w) || updated; + } + return updated; + } + // Update the SDFs and edits from an array of SplatEdits and their + // associated SplatEditSdfs, updating it for the dyno shader program. + update(edits) { + const sdfCount = edits.reduce((total, { sdfs }) => total + sdfs.length, 0); + const dynoUpdated = this.ensureCapacity({ + maxEdits: edits.length, + maxSdfs: sdfCount + }); + const values = [new THREE.Vector4(), new THREE.Vector4()]; + const center = new THREE.Vector3(); + const quaternion = new THREE.Quaternion(); + const scale = new THREE.Vector3(); + const sizes = new THREE.Vector4(); + let sdfIndex = 0; + let updated = dynoUpdated; + if (edits.length !== this.dynoNumEdits.value) { + this.dynoNumEdits.value = edits.length; + this.numEdits = edits.length; + updated = true; + } + for (const [editIndex, { edit, sdfs }] of edits.entries()) { + updated = this.encodeEdit(editIndex, { + sdfFirst: sdfIndex, + sdfCount: sdfs.length, + invert: edit.invert, + rgbaBlendMode: rgbaBlendModeToNumber(edit.rgbaBlendMode), + softEdge: edit.softEdge, + sdfSmooth: edit.sdfSmooth + }) || updated; + let sdfUpdated = false; + for (const sdf of sdfs) { + sizes.set(sdf.scale.x, sdf.scale.y, sdf.scale.z, sdf.radius); + sdf.scale.setScalar(1); + sdf.updateMatrixWorld(); + const worldToSdf = sdf.matrixWorld.clone().invert(); + worldToSdf.decompose(center, quaternion, scale); + sdf.scale.set(sizes.x, sizes.y, sizes.z); + sdf.updateMatrixWorld(); + values[0].set(sdf.color.r, sdf.color.g, sdf.color.b, sdf.opacity); + values[1].set(sdf.displace.x, sdf.displace.y, sdf.displace.z, 1); + sdfUpdated = this.encodeSdf( + sdfIndex, + { + sdfType: sdfTypeToNumber(sdf.type), + invert: sdf.invert, + center, + quaternion, + scale, + sizes + }, + values + ) || sdfUpdated; + sdfIndex += 1; + } + this.numSdfs = sdfIndex; + if (sdfUpdated) { + this.sdfTexture.needsUpdate = true; + } + updated || (updated = sdfUpdated); + } + return { updated, dynoUpdated }; + } + // Modify a Gsplat in a dyno shader program using the current edits and SDFs. + modify(gsplat) { + return applyGsplatRgbaDisplaceEdits( + gsplat, + this.dynoSdfArray, + this.dynoNumEdits, + this.dynoEdits + ); + } +} +const SdfArray = { type: "SdfArray" }; +const defineSdfArray = unindent(` + struct SdfArray { + int numSdfs; + usampler2D sdfTexture; + }; + + void unpackSdfArray( + usampler2D sdfTexture, int sdfIndex, out uint flags, + out vec3 center, out vec4 quaternion, out vec3 scale, out vec4 sizes, + int numValues, out vec4 values[4] + ) { + uvec4 temp = texelFetch(sdfTexture, ivec2(0, sdfIndex), 0); + flags = temp.w; + center = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z)); + + temp = texelFetch(sdfTexture, ivec2(1, sdfIndex), 0); + quaternion = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + + temp = texelFetch(sdfTexture, ivec2(2, sdfIndex), 0); + scale = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z)); + + temp = texelFetch(sdfTexture, ivec2(3, sdfIndex), 0); + sizes = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + + for (int i = 0; i < numValues; ++i) { + temp = texelFetch(sdfTexture, ivec2(4 + i, sdfIndex), 0); + values[i] = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + } + } + + const uint SDF_FLAG_TYPE = 0xFFu; + const uint SDF_FLAG_INVERT = 1u << 8u; + + const uint SDF_TYPE_ALL = 0u; + const uint SDF_TYPE_PLANE = 1u; + const uint SDF_TYPE_SPHERE = 2u; + const uint SDF_TYPE_BOX = 3u; + const uint SDF_TYPE_ELLIPSOID = 4u; + const uint SDF_TYPE_CYLINDER = 5u; + const uint SDF_TYPE_CAPSULE = 6u; + const uint SDF_TYPE_INFINITE_CONE = 7u; + + float evaluateSdfArray( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos, + float smoothK, int numValues, out vec4 outValues[4] + ) { + float distanceAccum = (smoothK == 0.0) ? 1.0 / 0.0 : 0.0; + float maxExp = -1.0 / 0.0; + for (int i = 0; i < numValues; ++i) { + outValues[i] = vec4(0.0); + } + + uint flags; + vec3 center, scale; + vec4 quaternion, sizes; + vec4 values[4]; + + int sdfLast = min(sdfFirst + sdfCount, numSdfs); + for (int index = sdfFirst; index < sdfLast; ++index) { + unpackSdfArray(sdfTexture, index, flags, center, quaternion, scale, sizes, numValues, values); + uint sdfType = flags & SDF_FLAG_TYPE; + vec3 sdfPos = quatVec(quaternion, pos * scale) + center; + + float distance; + switch (sdfType) { + case SDF_TYPE_ALL: + distance = -1.0 / 0.0; + break; + case SDF_TYPE_PLANE: { + distance = sdfPos.z; + break; + } + case SDF_TYPE_SPHERE: { + distance = length(sdfPos) - sizes.w; + break; + } + case SDF_TYPE_BOX: { + vec3 q = abs(sdfPos) - sizes.xyz + sizes.w; + distance = length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - sizes.w; + break; + } + case SDF_TYPE_ELLIPSOID: { + vec3 sizes = sizes.xyz; + float k0 = length(sdfPos / sizes); + float k1 = length(sdfPos / dot(sizes, sizes)); + distance = k0 * (k0 - 1.0) / k1; + break; + } + case SDF_TYPE_CYLINDER: { + vec2 d = abs(vec2(length(sdfPos.xz), sdfPos.y)) - sizes.wy; + distance = min(max(d.x, d.y), 0.0) + length(max(d, 0.0)); + break; + } + case SDF_TYPE_CAPSULE: { + sdfPos.y -= clamp(sdfPos.y, -0.5 * sizes.y, 0.5 * sizes.y); + distance = length(sdfPos) - sizes.w; + break; + } + case SDF_TYPE_INFINITE_CONE: { + float angle = 0.25 * PI * sizes.w; + vec2 c = vec2(sin(angle), cos(angle)); + vec2 q = vec2(length(sdfPos.xy), -sdfPos.z); + float d = length(q - c * max(dot(q, c), 0.0)); + distance = d * (((q.x * c.y - q.y * c.x) < 0.0) ? -1.0 : 1.0); + break; + } + } + + if ((flags & SDF_FLAG_INVERT) != 0u) { + distance = -distance; + } + + if (smoothK == 0.0) { + if (distance < distanceAccum) { + distanceAccum = distance; + for (int i = 0; i < numValues; ++i) { + outValues[i] = values[i]; + } + } + } else { + float scaledDistance = -distance / smoothK; + if (scaledDistance > maxExp) { + float scale = exp(maxExp - scaledDistance); + distanceAccum *= scale; + for (int i = 0; i < numValues; ++i) { + outValues[i] *= scale; + } + maxExp = scaledDistance; + } + + float weight = exp(scaledDistance - maxExp); + distanceAccum += weight; + for (int i = 0; i < numValues; ++i) { + outValues[i] += weight * values[i]; + } + } + } + + if (smoothK == 0.0) { + return distanceAccum; + } else { + // Very distant SDFs may result in 0 accumulation + if (distanceAccum == 0.0) { + return 1.0 / 0.0; + } + for (int i = 0; i < numValues; ++i) { + outValues[i] /= distanceAccum; + } + return (-log(distanceAccum) - maxExp) * smoothK; + } + } + + float modulateSdfArray( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos, + float smoothK, int numValues, out vec4 values[4], + float softEdge, bool invert + ) { + float distance = evaluateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, numValues, values); + if (invert) { + distance = -distance; + } + + return (softEdge == 0.0) ? ((distance < 0.0) ? 1.0 : 0.0) + : clamp(-distance / softEdge + 0.5, 0.0, 1.0); + } +`); +const defineEdit = unindent(` + const uint EDIT_FLAG_BLEND = 0xFFu; + const uint EDIT_BLEND_MULTIPLY = 0u; + const uint EDIT_BLEND_SET_RGB = 1u; + const uint EDIT_BLEND_ADD_RGBA = 2u; + const uint EDIT_FLAG_INVERT = 0x100u; + + void decodeEdit( + uvec4 packedEdit, out int sdfFirst, out int sdfCount, + out bool invert, out uint rgbaBlendMode, out float softEdge, out float sdfSmooth + ) { + rgbaBlendMode = packedEdit.x & EDIT_FLAG_BLEND; + invert = (packedEdit.x & EDIT_FLAG_INVERT) != 0u; + + sdfFirst = int(packedEdit.y & 0xFFFFu); + sdfCount = int(packedEdit.y >> 16u); + + softEdge = uintBitsToFloat(packedEdit.z); + sdfSmooth = uintBitsToFloat(packedEdit.w); + } + + void applyRgbaDisplaceEdit( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, inout vec3 pos, + float smoothK, float softEdge, bool invert, uint rgbaBlendMode, inout vec4 rgba + ) { + vec4 values[4]; + float modulate = modulateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, 2, values, softEdge, invert); + // On Android, moving values[0] is necessary to work around a compiler bug. + vec4 sdfRgba = values[0]; + vec4 sdfDisplaceScale = values[1]; + + vec4 target; + switch (rgbaBlendMode) { + case EDIT_BLEND_MULTIPLY: + target = rgba * sdfRgba; + break; + case EDIT_BLEND_SET_RGB: + target = vec4(sdfRgba.rgb, rgba.a * sdfRgba.a); + break; + case EDIT_BLEND_ADD_RGBA: + target = rgba + sdfRgba; + break; + default: + // Debug output if blend mode not set + target = vec4(fract(pos), 1.0); + } + rgba = mix(rgba, target, modulate); + pos += sdfDisplaceScale.xyz * modulate; + } + + void applyPackedRgbaDisplaceEdit(uvec4 packedEdit, usampler2D sdfTexture, int numSdfs, inout vec3 pos, inout vec4 rgba) { + int sdfFirst, sdfCount; + bool invert; + uint rgbaBlendMode; + float softEdge, sdfSmooth; + decodeEdit(packedEdit, sdfFirst, sdfCount, invert, rgbaBlendMode, softEdge, sdfSmooth); + applyRgbaDisplaceEdit(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, sdfSmooth, softEdge, invert, rgbaBlendMode, rgba); + } +`); +function applyGsplatRgbaDisplaceEdits(gsplat, sdfArray, numEdits, rgbaDisplaceEdits) { + const dyno2 = new Dyno({ + inTypes: { + gsplat: Gsplat, + sdfArray: SdfArray, + numEdits: "int", + rgbaDisplaceEdits: "uvec4" + }, + outTypes: { gsplat: Gsplat }, + globals: () => [defineSdfArray, defineEdit], + inputs: { gsplat, sdfArray, numEdits, rgbaDisplaceEdits }, + statements: ({ inputs, outputs }) => { + const { sdfArray: sdfArray2, numEdits: numEdits2, rgbaDisplaceEdits: rgbaDisplaceEdits2 } = inputs; + const { gsplat: gsplat2 } = outputs; + return unindentLines(` + ${gsplat2} = ${inputs.gsplat}; + if (isGsplatActive(${gsplat2}.flags)) { + for (int editIndex = 0; editIndex < ${numEdits2}; ++editIndex) { + applyPackedRgbaDisplaceEdit( + ${rgbaDisplaceEdits2}[editIndex], ${sdfArray2}.sdfTexture, ${sdfArray2}.numSdfs, + ${gsplat2}.center, ${gsplat2}.rgba + ); + } + } + `); + } + }); + return dyno2.outputs.gsplat; +} +const tempFloat32 = new Float32Array(1); +class SplatModifier { + constructor(modifier) { + this.modifier = modifier; + this.cache = /* @__PURE__ */ new Map(); + } + apply(generator) { + let modified = this.cache.get(generator); + if (!modified) { + modified = dynoBlock( + { index: "int" }, + { gsplat: Gsplat }, + ({ index }) => { + const { gsplat } = generator.apply({ index }); + return this.modifier.apply({ gsplat }); + } + ); + this.cache.set(generator, modified); + } + return modified; + } +} +class SplatTransformer { + // Create the dyno uniforms that parameterize the transform, setting them + // to initial values that are different from any valid transform. + constructor() { + this.scale = new DynoFloat({ value: Number.NEGATIVE_INFINITY }); + this.rotate = new DynoVec4({ + value: new THREE.Quaternion( + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY + ) + }); + this.translate = new DynoVec3({ + value: new THREE.Vector3( + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY + ) + }); + } + // Apply the transform to a Gsplat in a dyno program. + modify(gsplat) { + return transformGsplat(gsplat, { + scale: this.scale, + rotate: this.rotate, + translate: this.translate + }); + } + // Update the uniforms to match the given transform matrix. + updateFromMatrix(transform) { + const scale = new THREE.Vector3(); + const quaternion = new THREE.Quaternion(); + const position = new THREE.Vector3(); + transform.decompose(position, quaternion, scale); + const newScale = (scale.x + scale.y + scale.z) / 3; + let updated = false; + if (newScale !== this.scale.value) { + this.scale.value = newScale; + updated = true; + } + if (!position.equals(this.translate.value)) { + this.translate.value.copy(position); + updated = true; + } + if (!quaternion.equals(this.rotate.value)) { + this.rotate.value.copy(quaternion); + updated = true; + } + return updated; + } + // Update this transform to match the object's to-world transform. + update(object) { + return this.updateFromMatrix(object.matrixWorld); + } +} +class SplatGenerator extends THREE.Object3D { + constructor({ + numSplats, + generator, + construct, + update + }) { + super(); + this.numSplats = numSplats ?? 0; + this.generator = generator; + this.frameUpdate = update; + this.version = 0; + if (construct) { + const constructed = construct(this); + Object.assign(this, constructed); + } + } + updateVersion() { + this.version += 1; + } + set needsUpdate(value) { + if (value) { + this.updateVersion(); + } + } +} +const _SplatMesh = class _SplatMesh extends SplatGenerator { + constructor(options = {}) { + const transform = new SplatTransformer(); + const viewToWorld = new SplatTransformer(); + const worldToView = new SplatTransformer(); + const viewToObject = new SplatTransformer(); + const recolor = new DynoVec4({ + value: new THREE.Vector4( + Number.NEGATIVE_INFINITY, + Number.NEGATIVE_INFINITY, + Number.NEGATIVE_INFINITY, + Number.NEGATIVE_INFINITY + ) + }); + const time = new DynoFloat({ value: 0 }); + const deltaTime = new DynoFloat({ value: 0 }); + const context = { + transform, + viewToWorld, + worldToView, + viewToObject, + recolor, + time, + deltaTime + }; + super({ + update: ({ time: time2, deltaTime: deltaTime2, viewToWorld: viewToWorld2, globalEdits }) => this.update({ time: time2, deltaTime: deltaTime2, viewToWorld: viewToWorld2, globalEdits }) + }); + this.isInitialized = false; + this.recolor = new THREE.Color(1, 1, 1); + this.opacity = 1; + this.enableViewToObject = false; + this.enableViewToWorld = false; + this.enableWorldToView = false; + this.skinning = null; + this.edits = null; + this.rgbaDisplaceEdits = null; + this.splatRgba = null; + this.maxSh = 3; + this.packedSplats = options.packedSplats ?? new PackedSplats(); + this.numSplats = this.packedSplats.numSplats; + this.editable = options.editable ?? true; + this.onFrame = options.onFrame; + this.context = context; + this.objectModifier = options.objectModifier; + this.worldModifier = options.worldModifier; + this.updateGenerator(); + if (options.url || options.fileBytes || options.constructSplats || options.packedSplats && !options.packedSplats.isInitialized) { + this.initialized = this.asyncInitialize(options).then(async () => { + this.updateGenerator(); + this.isInitialized = true; + if (options.onLoad) { + const maybePromise = options.onLoad(this); + if (maybePromise instanceof Promise) { + await maybePromise; + } + } + return this; + }); + } else { + this.isInitialized = true; + this.initialized = Promise.resolve(this); + if (options.onLoad) { + const maybePromise = options.onLoad(this); + if (maybePromise instanceof Promise) { + this.initialized = maybePromise.then(() => this); + } + } + } + } + async asyncInitialize(options) { + const { url, fileBytes, fileType, maxSplats, constructSplats } = options; + if (url || fileBytes || constructSplats) { + const packedSplatsOptions = { + url, + fileBytes, + fileType, + maxSplats, + construct: constructSplats + }; + this.packedSplats.reinitialize(packedSplatsOptions); + this.updateGenerator(); + } + if (this.packedSplats) { + await this.packedSplats.initialized; + this.numSplats = this.packedSplats.numSplats; + } + } + static async staticInitialize() { + await __wbg_init(); + _SplatMesh.isStaticInitialized = true; + } + // Creates a new Gsplat with the provided parameters (all values in "float" space, + // i.e. 0-1 for opacity and color) and adds it to the end of the packedSplats, + // increasing numSplats by 1. If necessary, reallocates the buffer with an exponential + // doubling strategy to fit the new data, so it's fairly efficient to just + // pushSplat(...) each Gsplat you want to create in a loop. + pushSplat(center, scales, quaternion, opacity, color) { + this.packedSplats.pushSplat(center, scales, quaternion, opacity, color); + } + // This method iterates over all Gsplats in this instance's packedSplats, + // invoking the provided callback with index: number in 0..=(this.numSplats-1) and + // center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, + // opacity: number (0..1), and color: THREE.Color (rgb values in 0..1). + // Note that the objects passed in as center etc. are the same for every callback + // invocation: these objects are reused for efficiency. Changing these values has + // no effect as they are decoded/unpacked copies of the underlying data. To update + // the packedSplats, call .packedSplats.setSplat(index, center, scales, + // quaternion, opacity, color). + forEachSplat(callback) { + this.packedSplats.forEachSplat(callback); + } + // Call this when you are finished with the SplatMesh and want to free + // any buffers it holds (via packedSplats). + dispose() { + this.packedSplats.dispose(); + } + constructGenerator({ transform, viewToObject, recolor }) { + const generator = dynoBlock( + { index: "int" }, + { gsplat: Gsplat }, + ({ index }) => { + if (!index) { + throw new Error("index is undefined"); + } + let gsplat = readPackedSplat(this.packedSplats.dyno, index); + if (this.maxSh >= 1) { + const { sh1Texture, sh2Texture, sh3Texture } = this.ensureShTextures(); + if (sh1Texture) { + const viewCenterInObject = viewToObject.translate; + const { center } = splitGsplat(gsplat).outputs; + const viewDir = normalize(sub(center, viewCenterInObject)); + let rgb = evaluateSH1(gsplat, sh1Texture, viewDir); + if (this.maxSh >= 2 && sh2Texture) { + rgb = add(rgb, evaluateSH2(gsplat, sh2Texture, viewDir)); + } + if (this.maxSh >= 3 && sh3Texture) { + rgb = add(rgb, evaluateSH3(gsplat, sh3Texture, viewDir)); + } + let { rgba } = splitGsplat(gsplat).outputs; + rgba = add(rgba, extendVec(rgb, dynoConst("float", 0))); + gsplat = combineGsplat({ gsplat, rgba }); + } + } + if (this.splatRgba) { + const rgba = readRgbaArray(this.splatRgba.dyno, index); + gsplat = combineGsplat({ gsplat, rgba }); + } + if (this.skinning) { + gsplat = this.skinning.modify(gsplat); + } + if (this.objectModifier) { + gsplat = this.objectModifier.apply({ gsplat }).gsplat; + } + gsplat = transform.modify(gsplat); + const recolorRgba = mul(recolor, splitGsplat(gsplat).outputs.rgba); + gsplat = combineGsplat({ gsplat, rgba: recolorRgba }); + if (this.rgbaDisplaceEdits) { + gsplat = this.rgbaDisplaceEdits.modify(gsplat); + } + if (this.worldModifier) { + gsplat = this.worldModifier.apply({ gsplat }).gsplat; + } + return { gsplat }; + } + ); + this.generator = generator; + } + // Call this whenever something changes in the Gsplat processing pipeline, + // for example changing maxSh or updating objectModifier or worldModifier. + // Compiled generators are cached for efficiency and re-use when the same + // pipeline structure emerges after successive changes. + updateGenerator() { + this.constructGenerator(this.context); + } + // This is called automatically by ForgeRenderer and you should not have to + // call it. It updates parameters for the generated pipeline and calls + // updateGenerator() if the pipeline needs to change. + update({ + time, + viewToWorld, + deltaTime, + globalEdits + }) { + var _a2; + this.numSplats = this.packedSplats.numSplats; + this.context.time.value = time; + this.context.deltaTime.value = deltaTime; + _SplatMesh.dynoTime.value = time; + const { transform, viewToObject, recolor } = this.context; + let updated = transform.update(this); + if (this.context.viewToWorld.updateFromMatrix(viewToWorld) && this.enableViewToWorld) { + updated = true; + } + const worldToView = viewToWorld.clone().invert(); + if (this.context.worldToView.updateFromMatrix(worldToView) && this.enableWorldToView) { + updated = true; + } + const objectToWorld = new THREE.Matrix4().compose( + transform.translate.value, + transform.rotate.value, + new THREE.Vector3().setScalar(transform.scale.value) + ); + const worldToObject = objectToWorld.invert(); + const viewToObjectMatrix = worldToObject.multiply(viewToWorld); + if (viewToObject.updateFromMatrix(viewToObjectMatrix) && (this.enableViewToObject || this.packedSplats.extra.sh1)) { + updated = true; + } + const newRecolor = new THREE.Vector4( + this.recolor.r, + this.recolor.g, + this.recolor.b, + this.opacity + ); + if (!newRecolor.equals(recolor.value)) { + recolor.value.copy(newRecolor); + updated = true; + } + const edits = this.editable ? (this.edits ?? []).concat(globalEdits) : []; + if (this.editable && !this.edits) { + this.traverseVisible((node) => { + if (node instanceof SplatEdit) { + edits.push(node); + } + }); + } + edits.sort((a, b) => a.ordering - b.ordering); + const editsSdfs = edits.map((edit) => { + if (edit.sdfs != null) { + return { edit, sdfs: edit.sdfs }; + } + const sdfs = []; + edit.traverseVisible((node) => { + if (node instanceof SplatEditSdf) { + sdfs.push(node); + } + }); + return { edit, sdfs }; + }); + if (editsSdfs.length > 0 && !this.rgbaDisplaceEdits) { + const edits2 = editsSdfs.length; + const sdfs = editsSdfs.reduce( + (total, edit) => total + edit.sdfs.length, + 0 + ); + this.rgbaDisplaceEdits = new SplatEdits({ + maxEdits: edits2, + maxSdfs: sdfs + }); + this.updateGenerator(); + } + if (this.rgbaDisplaceEdits) { + const editResult = this.rgbaDisplaceEdits.update(editsSdfs); + updated || (updated = editResult.updated); + if (editResult.dynoUpdated) { + this.updateGenerator(); + } + } + if (updated) { + this.updateVersion(); + } + (_a2 = this.onFrame) == null ? void 0 : _a2.call(this, { mesh: this, time, deltaTime }); + } + // This method conforms to the standard THREE.Raycaster API, performing object-ray + // intersections using this method to populate the provided intersects[] array + // with each intersection point. + raycast(raycaster, intersects) { + if (!this.packedSplats.packedArray || !this.packedSplats.numSplats) { + return; + } + const { near, far, ray } = raycaster; + const worldToMesh = this.matrixWorld.clone().invert(); + const worldToMeshRot = new THREE.Matrix3().setFromMatrix4(worldToMesh); + const origin = ray.origin.clone().applyMatrix4(worldToMesh); + const direction = ray.direction.clone().applyMatrix3(worldToMeshRot); + const scales = new THREE.Vector3(); + worldToMesh.decompose(new THREE.Vector3(), new THREE.Quaternion(), scales); + (scales.x * scales.y * scales.z) ** (1 / 3); + const RAYCAST_ELLIPSOID = true; + const distances = raycast_splats( + origin.x, + origin.y, + origin.z, + direction.x, + direction.y, + direction.z, + near, + far, + this.packedSplats.numSplats, + this.packedSplats.packedArray, + RAYCAST_ELLIPSOID + ); + for (const distance2 of distances) { + const point = ray.direction.clone().multiplyScalar(distance2).add(ray.origin); + intersects.push({ + distance: distance2, + point, + object: this + }); + } + } + ensureShTextures() { + if (!this.packedSplats.extra.sh1) { + return {}; + } + const sh1Texture = this.packedSplats.extra.sh1Texture; + if (!sh1Texture) { + let sh1 = this.packedSplats.extra.sh1; + const { width, height, depth, maxSplats } = getTextureSize( + sh1.length / 2 + ); + if (sh1.length < maxSplats * 2) { + const newSh1 = new Uint32Array(maxSplats * 2); + newSh1.set(sh1); + this.packedSplats.extra.sh1 = newSh1; + sh1 = newSh1; + } + const texture2 = new THREE.DataArrayTexture(sh1, width, height, depth); + texture2.format = THREE.RGIntegerFormat; + texture2.type = THREE.UnsignedIntType; + texture2.internalFormat = "RG32UI"; + texture2.needsUpdate = true; + const sh1Texture2 = new DynoUsampler2DArray({ + value: texture2, + key: "sh1" + }); + this.packedSplats.extra.sh1Texture = sh1Texture2; + } + if (!this.packedSplats.extra.sh2) { + return { sh1Texture }; + } + const sh2Texture = this.packedSplats.extra.sh2Texture; + if (!sh2Texture) { + let sh2 = this.packedSplats.extra.sh2; + const { width, height, depth, maxSplats } = getTextureSize( + sh2.length / 4 + ); + if (sh2.length < maxSplats * 4) { + const newSh2 = new Uint32Array(maxSplats * 4); + newSh2.set(sh2); + this.packedSplats.extra.sh2 = newSh2; + sh2 = newSh2; + } + const texture2 = new THREE.DataArrayTexture(sh2, width, height, depth); + texture2.format = THREE.RGBAIntegerFormat; + texture2.type = THREE.UnsignedIntType; + texture2.internalFormat = "RGBA32UI"; + texture2.needsUpdate = true; + const sh2Texture2 = new DynoUsampler2DArray({ + value: texture2, + key: "sh2" + }); + this.packedSplats.extra.sh2Texture = sh2Texture2; + } + if (!this.packedSplats.extra.sh3) { + return { sh1Texture, sh2Texture }; + } + const sh3Texture = this.packedSplats.extra.sh3Texture; + if (!sh3Texture) { + let sh3 = this.packedSplats.extra.sh3; + const { width, height, depth, maxSplats } = getTextureSize( + sh3.length / 4 + ); + if (sh3.length < maxSplats * 4) { + const newSh3 = new Uint32Array(maxSplats * 4); + newSh3.set(sh3); + this.packedSplats.extra.sh3 = newSh3; + sh3 = newSh3; + } + const texture2 = new THREE.DataArrayTexture(sh3, width, height, depth); + texture2.format = THREE.RGBAIntegerFormat; + texture2.type = THREE.UnsignedIntType; + texture2.internalFormat = "RGBA32UI"; + texture2.needsUpdate = true; + const sh3Texture2 = new DynoUsampler2DArray({ + value: texture2, + key: "sh3" + }); + this.packedSplats.extra.sh3Texture = sh3Texture2; + } + return { sh1Texture, sh2Texture, sh3Texture }; + } +}; +_SplatMesh.staticInitialized = _SplatMesh.staticInitialize(); +_SplatMesh.isStaticInitialized = false; +_SplatMesh.dynoTime = new DynoFloat({ value: 0 }); +let SplatMesh = _SplatMesh; +const defineEvaluateSH1 = unindent(` + vec3 evaluateSH1(Gsplat gsplat, usampler2DArray sh1, vec3 viewDir) { + // Extract sint7 values packed into 2 x uint32 + uvec2 packed = texelFetch(sh1, splatTexCoord(gsplat.index), 0).rg; + vec3 sh1_0 = vec3(ivec3( + int(packed.x << 25u) >> 25, + int(packed.x << 18u) >> 25, + int(packed.x << 11u) >> 25 + )) / 63.0; + vec3 sh1_1 = vec3(ivec3( + int(packed.x << 4u) >> 25, + int((packed.x >> 3u) | (packed.y << 29u)) >> 25, + int(packed.y << 22u) >> 25 + )) / 63.0; + vec3 sh1_2 = vec3(ivec3( + int(packed.y << 15u) >> 25, + int(packed.y << 8u) >> 25, + int(packed.y << 1u) >> 25 + )) / 63.0; + + return sh1_0 * (-0.4886025 * viewDir.y) + + sh1_1 * (0.4886025 * viewDir.z) + + sh1_2 * (-0.4886025 * viewDir.x); + } +`); +const defineEvaluateSH2 = unindent(` + vec3 evaluateSH2(Gsplat gsplat, usampler2DArray sh2, vec3 viewDir) { + // Extract sint8 values packed into 4 x uint32 + uvec4 packed = texelFetch(sh2, splatTexCoord(gsplat.index), 0); + vec3 sh2_0 = vec3(ivec3( + int(packed.x << 24u) >> 24, + int(packed.x << 16u) >> 24, + int(packed.x << 8u) >> 24 + )) / 127.0; + vec3 sh2_1 = vec3(ivec3( + int(packed.x) >> 24, + int(packed.y << 24u) >> 24, + int(packed.y << 16u) >> 24 + )) / 127.0; + vec3 sh2_2 = vec3(ivec3( + int(packed.y << 8u) >> 24, + int(packed.y) >> 24, + int(packed.z << 24u) >> 24 + )) / 127.0; + vec3 sh2_3 = vec3(ivec3( + int(packed.z << 16u) >> 24, + int(packed.z << 8u) >> 24, + int(packed.z) >> 24 + )) / 127.0; + vec3 sh2_4 = vec3(ivec3( + int(packed.w << 24u) >> 24, + int(packed.w << 16u) >> 24, + int(packed.w << 8u) >> 24 + )) / 127.0; + + return sh2_0 * (1.0925484 * viewDir.x * viewDir.y) + + sh2_1 * (1.0925484 * viewDir.y * viewDir.z) + + sh2_2 * (0.3153915 * (2.0 * viewDir.z * viewDir.z - viewDir.x * viewDir.x - viewDir.y * viewDir.y)) + + sh2_3 * (1.0925484 * viewDir.x * viewDir.z) + + sh2_4 * (0.5462742 * (viewDir.x * viewDir.x - viewDir.y * viewDir.y)); + } +`); +const defineEvaluateSH3 = unindent(` + vec3 evaluateSH3(Gsplat gsplat, usampler2DArray sh3, vec3 viewDir) { + // Extract sint6 values packed into 4 x uint32 + uvec4 packed = texelFetch(sh3, splatTexCoord(gsplat.index), 0); + vec3 sh3_0 = vec3(ivec3( + int(packed.x << 26u) >> 26, + int(packed.x << 20u) >> 26, + int(packed.x << 14u) >> 26 + )) / 31.0; + vec3 sh3_1 = vec3(ivec3( + int(packed.x << 8u) >> 26, + int(packed.x << 2u) >> 26, + int((packed.x >> 4u) | (packed.y << 28u)) >> 26 + )) / 31.0; + vec3 sh3_2 = vec3(ivec3( + int(packed.y << 22u) >> 26, + int(packed.y << 16u) >> 26, + int(packed.y << 10u) >> 26 + )) / 31.0; + vec3 sh3_3 = vec3(ivec3( + int(packed.y << 4u) >> 26, + int((packed.y >> 2u) | (packed.z << 30u)) >> 26, + int(packed.z << 24u) >> 26 + )) / 31.0; + vec3 sh3_4 = vec3(ivec3( + int(packed.z << 18u) >> 26, + int(packed.z << 12u) >> 26, + int(packed.z << 6u) >> 26 + )) / 31.0; + vec3 sh3_5 = vec3(ivec3( + int(packed.z) >> 26, + int(packed.w << 26u) >> 26, + int(packed.w << 20u) >> 26 + )) / 31.0; + vec3 sh3_6 = vec3(ivec3( + int(packed.w << 14u) >> 26, + int(packed.w << 8u) >> 26, + int(packed.w << 2u) >> 26 + )) / 31.0; + + float xx = viewDir.x * viewDir.x; + float yy = viewDir.y * viewDir.y; + float zz = viewDir.z * viewDir.z; + float xy = viewDir.x * viewDir.y; + float yz = viewDir.y * viewDir.z; + float zx = viewDir.z * viewDir.x; + + return sh3_0 * (-0.5900436 * viewDir.y * (3.0 * xx - yy)) + + sh3_1 * (2.8906114 * xy * viewDir.z) + + + sh3_2 * (-0.4570458 * viewDir.y * (4.0 * zz - xx - yy)) + + sh3_3 * (0.3731763 * viewDir.z * (2.0 * zz - 3.0 * xx - 3.0 * yy)) + + sh3_4 * (-0.4570458 * viewDir.x * (4.0 * zz - xx - yy)) + + sh3_5 * (1.4453057 * viewDir.z * (xx - yy)) + + sh3_6 * (-0.5900436 * viewDir.x * (xx - 3.0 * yy)); + } +`); +function evaluateSH1(gsplat, sh1, viewDir) { + return dyno$1({ + inTypes: { gsplat: Gsplat, sh1: "usampler2DArray", viewDir: "vec3" }, + outTypes: { rgb: "vec3" }, + inputs: { gsplat, sh1, viewDir }, + globals: () => [defineGsplat, defineEvaluateSH1], + statements: ({ inputs, outputs }) => { + const statements = unindentLines(` + if (isGsplatActive(${inputs.gsplat}.flags)) { + ${outputs.rgb} = evaluateSH1(${inputs.gsplat}, ${inputs.sh1}, ${inputs.viewDir}); + } else { + ${outputs.rgb} = vec3(0.0); + } + `); + return statements; + } + }).outputs.rgb; +} +function evaluateSH2(gsplat, sh2, viewDir) { + return dyno$1({ + inTypes: { gsplat: Gsplat, sh2: "usampler2DArray", viewDir: "vec3" }, + outTypes: { rgb: "vec3" }, + inputs: { gsplat, sh2, viewDir }, + globals: () => [defineGsplat, defineEvaluateSH2], + statements: ({ inputs, outputs }) => unindentLines(` + if (isGsplatActive(${inputs.gsplat}.flags)) { + ${outputs.rgb} = evaluateSH2(${inputs.gsplat}, ${inputs.sh2}, ${inputs.viewDir}); + } else { + ${outputs.rgb} = vec3(0.0); + } + `) + }).outputs.rgb; +} +function evaluateSH3(gsplat, sh3, viewDir) { + return dyno$1({ + inTypes: { gsplat: Gsplat, sh3: "usampler2DArray", viewDir: "vec3" }, + outTypes: { rgb: "vec3" }, + inputs: { gsplat, sh3, viewDir }, + globals: () => [defineGsplat, defineEvaluateSH3], + statements: ({ inputs, outputs }) => unindentLines(` + if (isGsplatActive(${inputs.gsplat}.flags)) { + ${outputs.rgb} = evaluateSH3(${inputs.gsplat}, ${inputs.sh3}, ${inputs.viewDir}); + } else { + ${outputs.rgb} = vec3(0.0); + } + `) + }).outputs.rgb; +} +const _PlyReader = class _PlyReader { + // Create a PlyReader from a Uint8Array/ArrayBuffer, no parsing done yet + constructor({ fileBytes }) { + this.header = ""; + this.littleEndian = true; + this.elements = {}; + this.comments = []; + this.data = null; + this.numSplats = 0; + this.fileBytes = fileBytes instanceof ArrayBuffer ? new Uint8Array(fileBytes) : fileBytes; + } + // Identify and parse the PLY text header (assumed to be <64KB in size). + // this.elements will contain all the elements in the file, typically + // "vertex" contains the Gsplat data. + async parseHeader() { + const bufferStream = new ReadableStream({ + start: (controller) => { + controller.enqueue(this.fileBytes.slice(0, 65536)); + controller.close(); + } + }); + const decoder = bufferStream.pipeThrough(new TextDecoderStream()).getReader(); + this.header = ""; + const headerTerminator = "end_header\n"; + while (true) { + const { value, done } = await decoder.read(); + if (done) { + throw new Error("Failed to read header"); + } + this.header += value; + const endHeader = this.header.indexOf(headerTerminator); + if (endHeader >= 0) { + this.header = this.header.slice(0, endHeader + headerTerminator.length); + break; + } + } + const headerLen = new TextEncoder().encode(this.header).length; + this.data = new DataView(this.fileBytes.buffer, headerLen); + this.elements = {}; + let curElement = null; + this.comments = []; + this.header.trim().split("\n").forEach((line, lineIndex) => { + const trimmedLine = line.trim(); + if (lineIndex === 0) { + if (trimmedLine !== "ply") { + throw new Error("Invalid PLY header"); + } + return; + } + if (trimmedLine.length === 0) { + return; + } + const fields = trimmedLine.split(" "); + switch (fields[0]) { + case "format": + if (fields[1] === "binary_little_endian") { + this.littleEndian = true; + } else if (fields[1] === "binary_big_endian") { + this.littleEndian = false; + } else { + throw new Error(`Unsupported PLY format: ${fields[1]}`); + } + if (fields[2] !== "1.0") { + throw new Error(`Unsupported PLY version: ${fields[2]}`); + } + break; + case "end_header": + break; + case "comment": + this.comments.push(trimmedLine.slice("comment ".length)); + break; + case "element": { + const name = fields[1]; + curElement = { + name, + count: Number.parseInt(fields[2]), + properties: {} + }; + this.elements[name] = curElement; + break; + } + case "property": + if (curElement == null) { + throw new Error("Property must be inside an element"); + } + if (fields[1] === "list") { + curElement.properties[fields[4]] = { + isList: true, + type: fields[3], + countType: fields[2] + }; + } else { + curElement.properties[fields[2]] = { + isList: false, + type: fields[1] + }; + } + break; + } + }); + if (this.elements.vertex) { + this.numSplats = this.elements.vertex.count; + } + } + parseData(elementCallback) { + let offset = 0; + const data = this.data; + if (data == null) { + throw new Error("No data to parse"); + } + for (const elementName in this.elements) { + const element = this.elements[elementName]; + const { count, properties } = element; + const item = {}; + const parsers = []; + for (const [propertyName, property] of Object.entries(properties)) { + if (!property.isList) { + item[propertyName] = 0; + parsers.push(() => { + item[propertyName] = PARSE_FIELD[property.type]( + data, + offset, + this.littleEndian + ); + offset += FIELD_BYTES[property.type]; + }); + } else { + item[propertyName] = []; + parsers.push(() => { + const list = item[propertyName]; + list.length = PARSE_FIELD[property.countType]( + data, + offset, + this.littleEndian + ); + offset += FIELD_BYTES[property.countType]; + for (let i = 0; i < list.length; i++) { + list[i] = PARSE_FIELD[property.type]( + data, + offset, + this.littleEndian + ); + offset += FIELD_BYTES[property.type]; + } + }); + } + } + const callback = elementCallback(element) ?? (() => { + }); + for (let index = 0; index < count; index++) { + for (const parser of parsers) { + parser(); + } + callback(index, item); + } + } + } + // Parse all the Gsplat data in the PLY file in go, invoking the given + // callbacks for each Gsplat. + parseSplats(splatCallback, shCallback) { + if (this.elements.vertex == null) { + throw new Error("No vertex element found"); + } + let isSuperSplat = false; + const ssChunks = []; + let numSh = 0; + let sh1Props = []; + let sh2Props = []; + let sh3Props = []; + let sh1 = void 0; + let sh2 = void 0; + let sh3 = void 0; + function prepareSh() { + const num_f_rest = NUM_SH_TO_NUM_F_REST[numSh]; + sh1Props = new Array(3).fill(null).flatMap( + (_, k) => [0, 1, 2].map((_2, d) => `f_rest_${k + d * num_f_rest / 3}`) + ); + sh2Props = new Array(5).fill(null).flatMap( + (_, k) => [0, 1, 2].map((_2, d) => `f_rest_${3 + k + d * num_f_rest / 3}`) + ); + sh3Props = new Array(7).fill(null).flatMap( + (_, k) => [0, 1, 2].map((_2, d) => `f_rest_${8 + k + d * num_f_rest / 3}`) + ); + sh1 = numSh >= 1 ? new Float32Array(3 * 3) : void 0; + sh2 = numSh >= 2 ? new Float32Array(5 * 3) : void 0; + sh3 = numSh >= 3 ? new Float32Array(7 * 3) : void 0; + } + function ssShCallback(index, item) { + if (!sh1) { + throw new Error("Missing sh1"); + } + for (const [i, key] of sh1Props.entries()) { + sh1[i] = item[key] * 8 / 255 - 4; + } + if (sh2) { + for (const [i, key] of sh2Props.entries()) { + sh2[i] = item[key] * 8 / 255 - 4; + } + } + if (sh3) { + for (const [i, key] of sh3Props.entries()) { + sh3[i] = item[key] * 8 / 255 - 4; + } + } + shCallback == null ? void 0 : shCallback(index, sh1, sh2, sh3); + } + function initSuperSplat(element) { + const { + min_x, + min_y, + min_z, + max_x, + max_y, + max_z, + min_scale_x, + min_scale_y, + min_scale_z, + max_scale_x, + max_scale_y, + max_scale_z, + min_r, + min_g, + min_b, + max_r, + max_g, + max_b + } = element.properties; + if (!min_x || !min_y || !min_z || !max_x || !max_y || !max_z || !min_scale_x || !min_scale_y || !min_scale_z || !max_scale_x || !max_scale_y || !max_scale_z || !min_r || !min_g || !min_b || !max_r || !max_g || !max_b) { + throw new Error("Missing PLY chunk properties"); + } + isSuperSplat = true; + return (index, item) => { + const { + min_x: min_x2, + min_y: min_y2, + min_z: min_z2, + max_x: max_x2, + max_y: max_y2, + max_z: max_z2, + min_scale_x: min_scale_x2, + min_scale_y: min_scale_y2, + min_scale_z: min_scale_z2, + max_scale_x: max_scale_x2, + max_scale_y: max_scale_y2, + max_scale_z: max_scale_z2, + min_r: min_r2, + min_g: min_g2, + min_b: min_b2, + max_r: max_r2, + max_g: max_g2, + max_b: max_b2 + } = item; + ssChunks.push({ + min_x: min_x2, + min_y: min_y2, + min_z: min_z2, + max_x: max_x2, + max_y: max_y2, + max_z: max_z2, + min_scale_x: min_scale_x2, + min_scale_y: min_scale_y2, + min_scale_z: min_scale_z2, + max_scale_x: max_scale_x2, + max_scale_y: max_scale_y2, + max_scale_z: max_scale_z2, + min_r: min_r2, + min_g: min_g2, + min_b: min_b2, + max_r: max_r2, + max_g: max_g2, + max_b: max_b2 + }); + }; + } + function decodeSuperSplat(element) { + if (shCallback && element.name === "sh") { + numSh = getNumSh(element.properties); + prepareSh(); + return ssShCallback; + } + if (element.name !== "vertex") { + return null; + } + const { packed_position, packed_rotation, packed_scale, packed_color } = element.properties; + if (!packed_position || !packed_rotation || !packed_scale || !packed_color) { + throw new Error( + "Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color" + ); + } + const SQRT2 = Math.sqrt(2); + return (index, item) => { + const chunk = ssChunks[index >>> 8]; + if (chunk == null) { + throw new Error("Missing PLY chunk"); + } + const { + min_x, + min_y, + min_z, + max_x, + max_y, + max_z, + min_scale_x, + min_scale_y, + min_scale_z, + max_scale_x, + max_scale_y, + max_scale_z, + min_r, + min_g, + min_b, + max_r, + max_g, + max_b + } = chunk; + const { packed_position: packed_position2, packed_rotation: packed_rotation2, packed_scale: packed_scale2, packed_color: packed_color2 } = item; + const x = (packed_position2 >>> 21 & 2047) / 2047 * (max_x - min_x) + min_x; + const y = (packed_position2 >>> 11 & 1023) / 1023 * (max_y - min_y) + min_y; + const z = (packed_position2 & 2047) / 2047 * (max_z - min_z) + min_z; + const r0 = ((packed_rotation2 >>> 20 & 1023) / 1023 - 0.5) * SQRT2; + const r1 = ((packed_rotation2 >>> 10 & 1023) / 1023 - 0.5) * SQRT2; + const r2 = ((packed_rotation2 & 1023) / 1023 - 0.5) * SQRT2; + const rr = Math.sqrt(Math.max(0, 1 - r0 * r0 - r1 * r1 - r2 * r2)); + const rOrder = packed_rotation2 >>> 30; + const quatX = rOrder === 0 ? r0 : rOrder === 1 ? rr : r1; + const quatY = rOrder <= 1 ? r1 : rOrder === 2 ? rr : r2; + const quatZ = rOrder <= 2 ? r2 : rr; + const quatW = rOrder === 0 ? rr : r0; + const scaleX = Math.exp( + (packed_scale2 >>> 21 & 2047) / 2047 * (max_scale_x - min_scale_x) + min_scale_x + ); + const scaleY = Math.exp( + (packed_scale2 >>> 11 & 1023) / 1023 * (max_scale_y - min_scale_y) + min_scale_y + ); + const scaleZ = Math.exp( + (packed_scale2 & 2047) / 2047 * (max_scale_z - min_scale_z) + min_scale_z + ); + const r = (packed_color2 >>> 24 & 255) / 255 * (max_r - min_r) + min_r; + const g = (packed_color2 >>> 16 & 255) / 255 * (max_g - min_g) + min_g; + const b = (packed_color2 >>> 8 & 255) / 255 * (max_b - min_b) + min_b; + const opacity = (packed_color2 & 255) / 255; + splatCallback( + index, + x, + y, + z, + scaleX, + scaleY, + scaleZ, + quatX, + quatY, + quatZ, + quatW, + opacity, + r, + g, + b + ); + }; + } + const elementCallback = (element) => { + if (element.name === "chunk") { + if (this.comments.some( + (comment2) => comment2.toLowerCase().includes("supersplat") + )) { + return initSuperSplat(element); + } + } + if (isSuperSplat) { + return decodeSuperSplat(element); + } + if (element.name !== "vertex") { + return null; + } + const { + x, + y, + z, + scale_0, + scale_1, + scale_2, + rot_0, + rot_1, + rot_2, + rot_3, + opacity, + f_dc_0, + f_dc_1, + f_dc_2, + red, + green, + blue, + alpha + } = element.properties; + if (!x || !y || !z) { + throw new Error("Missing PLY properties: x, y, z"); + } + const hasScales = scale_0 && scale_1 && scale_2; + const hasRots = rot_0 && rot_1 && rot_2 && rot_3; + const alphaDiv = alpha != null ? FIELD_SCALE[alpha.type] : 1; + const redDiv = red != null ? FIELD_SCALE[red.type] : 1; + const greenDiv = green != null ? FIELD_SCALE[green.type] : 1; + const blueDiv = blue != null ? FIELD_SCALE[blue.type] : 1; + numSh = getNumSh(element.properties); + prepareSh(); + return (index, item) => { + const scaleX = hasScales ? Math.exp(item.scale_0) : _PlyReader.defaultPointScale; + const scaleY = hasScales ? Math.exp(item.scale_1) : _PlyReader.defaultPointScale; + const scaleZ = hasScales ? Math.exp(item.scale_2) : _PlyReader.defaultPointScale; + const quatX = hasRots ? item.rot_1 : 0; + const quatY = hasRots ? item.rot_2 : 0; + const quatZ = hasRots ? item.rot_3 : 0; + const quatW = hasRots ? item.rot_0 : 1; + const op = opacity != null ? 1 / (1 + Math.exp(-item.opacity)) : alpha != null ? item.alpha / alphaDiv : 1; + const r = f_dc_0 != null ? item.f_dc_0 * SH_C0$1 + 0.5 : red != null ? item.red / redDiv : 1; + const g = f_dc_1 != null ? item.f_dc_1 * SH_C0$1 + 0.5 : green != null ? item.green / greenDiv : 1; + const b = f_dc_2 != null ? item.f_dc_2 * SH_C0$1 + 0.5 : blue != null ? item.blue / blueDiv : 1; + splatCallback( + index, + item.x, + item.y, + item.z, + scaleX, + scaleY, + scaleZ, + quatX, + quatY, + quatZ, + quatW, + op, + r, + g, + b + ); + if (shCallback && sh1) { + if (sh1) { + for (const [i, key] of sh1Props.entries()) { + sh1[i] = item[key]; + } + } + if (sh2) { + for (const [i, key] of sh2Props.entries()) { + sh2[i] = item[key]; + } + } + if (sh3) { + for (const [i, key] of sh3Props.entries()) { + sh3[i] = item[key]; + } + } + shCallback(index, sh1, sh2, sh3); + } + }; + }; + this.parseData(elementCallback); + } + // Inject RGBA values into original PLY file, which can be used to modify + // the color/opacity of the Gsplats and write out the modified PLY file. + injectRgba(rgba) { + let offset = 0; + const data = this.data; + if (data == null) { + throw new Error("No parsed data"); + } + if (rgba.length !== this.numSplats * 4) { + throw new Error("Invalid RGBA array length"); + } + for (const elementName in this.elements) { + const element = this.elements[elementName]; + const { count, properties } = element; + const parsers = []; + let rgbaOffset = 0; + const isVertex = elementName === "vertex"; + if (isVertex) { + for (const name of ["opacity", "f_dc_0", "f_dc_1", "f_dc_2"]) { + if (!properties[name] || properties[name].type !== "float") { + throw new Error(`Can't injectRgba due to property: ${name}`); + } + } + } + for (const [propertyName, property] of Object.entries(properties)) { + if (!property.isList) { + if (isVertex) { + if (propertyName === "f_dc_0" || propertyName === "f_dc_1" || propertyName === "f_dc_2") { + const component = Number.parseInt( + propertyName.slice("f_dc_".length) + ); + parsers.push(() => { + const value = (rgba[rgbaOffset + component] / 255 - 0.5) / SH_C0$1; + SET_FIELD[property.type]( + data, + offset, + this.littleEndian, + value + ); + }); + } else if (propertyName === "opacity") { + parsers.push(() => { + const value = Math.max( + -100, + Math.min( + 100, + -Math.log(1 / (rgba[rgbaOffset + 3] / 255) - 1) + ) + ); + SET_FIELD[property.type]( + data, + offset, + this.littleEndian, + value + ); + }); + } + } + parsers.push(() => { + offset += FIELD_BYTES[property.type]; + }); + } else { + parsers.push(() => { + const length2 = PARSE_FIELD[property.countType]( + data, + offset, + this.littleEndian + ); + offset += FIELD_BYTES[property.countType]; + offset += length2 * FIELD_BYTES[property.type]; + }); + } + } + for (let index = 0; index < count; index++) { + for (const parser of parsers) { + parser(); + } + if (isVertex) { + rgbaOffset += 4; + } + } + } + } +}; +_PlyReader.defaultPointScale = 1e-3; +let PlyReader = _PlyReader; +const SH_C0$1 = 0.28209479177387814; +const PARSE_FIELD = { + char: (data, offset, littleEndian) => { + return data.getInt8(offset); + }, + uchar: (data, offset, littleEndian) => { + return data.getUint8(offset); + }, + short: (data, offset, littleEndian) => { + return data.getInt16(offset, littleEndian); + }, + ushort: (data, offset, littleEndian) => { + return data.getUint16(offset, littleEndian); + }, + int: (data, offset, littleEndian) => { + return data.getInt32(offset, littleEndian); + }, + uint: (data, offset, littleEndian) => { + return data.getUint32(offset, littleEndian); + }, + float: (data, offset, littleEndian) => { + return data.getFloat32(offset, littleEndian); + }, + double: (data, offset, littleEndian) => { + return data.getFloat64(offset, littleEndian); + } +}; +const SET_FIELD = { + char: (data, offset, littleEndian, value) => { + data.setInt8(offset, value); + }, + uchar: (data, offset, littleEndian, value) => { + data.setUint8(offset, value); + }, + short: (data, offset, littleEndian, value) => { + data.setInt16(offset, value, littleEndian); + }, + ushort: (data, offset, littleEndian, value) => { + data.setUint16(offset, value, littleEndian); + }, + int: (data, offset, littleEndian, value) => { + data.setInt32(offset, value, littleEndian); + }, + uint: (data, offset, littleEndian, value) => { + data.setUint32(offset, value, littleEndian); + }, + float: (data, offset, littleEndian, value) => { + data.setFloat32(offset, value, littleEndian); + }, + double: (data, offset, littleEndian, value) => { + data.setFloat64(offset, value, littleEndian); + } +}; +const FIELD_BYTES = { + char: 1, + uchar: 1, + short: 2, + ushort: 2, + int: 4, + uint: 4, + float: 4, + double: 8 +}; +const FIELD_SCALE = { + char: 127, + uchar: 255, + short: 32767, + ushort: 65535, + int: 2147483647, + uint: 4294967295, + float: 1, + double: 1 +}; +const NUM_F_REST_TO_NUM_SH = { + 0: 0, + 9: 1, + 24: 2, + 45: 3 +}; +const NUM_SH_TO_NUM_F_REST = { + 0: 0, + 1: 9, + 2: 24, + 3: 45 +}; +function getNumSh(properties) { + let num_f_rest = 0; + while (properties[`f_rest_${num_f_rest}`]) { + num_f_rest += 1; + } + const numSh = NUM_F_REST_TO_NUM_SH[num_f_rest]; + if (numSh == null) { + throw new Error(`Unsupported number of SH coefficients: ${num_f_rest}`); + } + return numSh; +} +const jsContent = '(function() {\n "use strict";\n let wasm;\n function addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_export_2.set(idx, obj);\n return idx;\n }\n function handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n }\n function debugString(val) {\n const type = typeof val;\n if (type == "number" || type == "boolean" || val == null) {\n return `${val}`;\n }\n if (type == "string") {\n return `"${val}"`;\n }\n if (type == "symbol") {\n const description = val.description;\n if (description == null) {\n return "Symbol";\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == "function") {\n const name = val.name;\n if (typeof name == "string" && name.length > 0) {\n return `Function(${name})`;\n } else {\n return "Function";\n }\n }\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = "[";\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for (let i2 = 1; i2 < length; i2++) {\n debug += ", " + debugString(val[i2]);\n }\n debug += "]";\n return debug;\n }\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n return toString.call(val);\n }\n if (className == "Object") {\n try {\n return "Object(" + JSON.stringify(val) + ")";\n } catch (_) {\n return "Object";\n }\n }\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\n${val.stack}`;\n }\n return className;\n }\n let WASM_VECTOR_LEN = 0;\n let cachedUint8ArrayMemory0 = null;\n function getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n }\n const cachedTextEncoder = typeof TextEncoder !== "undefined" ? new TextEncoder("utf-8") : { encode: () => {\n throw Error("TextEncoder not available");\n } };\n const encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n } : function(arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n function passStringToWasm0(arg, malloc, realloc) {\n if (realloc === void 0) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr2 = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr2;\n }\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n const mem = getUint8ArrayMemory0();\n let offset = 0;\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 127) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n WASM_VECTOR_LEN = offset;\n return ptr;\n }\n let cachedDataViewMemory0 = null;\n function getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n }\n const cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) : { decode: () => {\n throw Error("TextDecoder not available");\n } };\n if (typeof TextDecoder !== "undefined") {\n cachedTextDecoder.decode();\n }\n function getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n }\n function decode_wlg(bytes, tex_width, tex_height) {\n const ret = wasm.decode_wlg(bytes, tex_width, tex_height);\n return ret;\n }\n function old_sort_splats(max_splats, total_splats, readback, ordering) {\n const ret = wasm.old_sort_splats(max_splats, total_splats, readback, ordering);\n return ret >>> 0;\n }\n function sort_splats(num_splats, readback, ordering) {\n const ret = wasm.sort_splats(num_splats, readback, ordering);\n return ret >>> 0;\n }\n async function __wbg_load(module, imports) {\n if (typeof Response === "function" && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === "function") {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n if (module.headers.get("Content-Type") != "application/wasm") {\n console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n", e);\n } else {\n throw e;\n }\n }\n }\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n }\n function __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg_buffer_09165b52af8c5237 = function(arg0) {\n const ret = arg0.buffer;\n return ret;\n };\n imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) {\n const ret = arg0.buffer;\n return ret;\n };\n imports.wbg.__wbg_get_b9b93047fe3cf45b = function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return ret;\n };\n imports.wbg.__wbg_instanceof_Uint8Array_17156bcf118086a9 = function(arg0) {\n let result;\n try {\n result = arg0 instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_length_3b4f022188ae8db6 = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_6ca527665d89694d = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_8cfd2c6409af88ad = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_a446193dc22c12f8 = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_e2d2a49132c1b256 = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_new_405e22f390576ce2 = function() {\n const ret = new Object();\n return ret;\n };\n imports.wbg.__wbg_new_9fee97a409b32b68 = function(arg0) {\n const ret = new Uint16Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) {\n const ret = new Uint8Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_e3b321dcfef89fc7 = function(arg0) {\n const ret = new Uint32Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354 = function(arg0, arg1, arg2) {\n const ret = new Float32Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212 = function(arg0, arg1, arg2) {\n const ret = new Uint32Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_newwithlength_5a5efe313cfd59f1 = function(arg0) {\n const ret = new Float32Array(arg0 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_newwithlength_bd3de93688d68fbc = function(arg0) {\n const ret = new Uint32Array(arg0 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_set_10bad9bee0e9c58b = function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n };\n imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n };\n imports.wbg.__wbg_set_bb8cecf6a62b9f46 = function() {\n return handleError(function(arg0, arg1, arg2) {\n const ret = Reflect.set(arg0, arg1, arg2);\n return ret;\n }, arguments);\n };\n imports.wbg.__wbg_set_d23661d19148b229 = function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n };\n imports.wbg.__wbg_set_f4f1f0daa30696fc = function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n };\n imports.wbg.__wbg_subarray_3aaeec89bb2544f0 = function(arg0, arg1, arg2) {\n const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_subarray_769e1e0f81bb259b = function(arg0, arg1, arg2) {\n const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_export_2;\n const offset = table.grow(4);\n table.set(0, void 0);\n table.set(offset + 0, void 0);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n };\n imports.wbg.__wbindgen_memory = function() {\n const ret = wasm.memory;\n return ret;\n };\n imports.wbg.__wbindgen_number_new = function(arg0) {\n const ret = arg0;\n return ret;\n };\n imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n return imports;\n }\n function __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n }\n async function __wbg_init(module_or_path) {\n if (wasm !== void 0) return wasm;\n if (typeof module_or_path !== "undefined") {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({ module_or_path } = module_or_path);\n } else {\n console.warn("using deprecated parameters for the initialization function; pass a single object instead");\n }\n }\n if (typeof module_or_path === "undefined") {\n module_or_path = new URL("data:application/wasm;base64,AGFzbQEAAAABtgItYAJ/fwF/YAJ/fwBgA39/fwF/YAF/AGABfwF/YAN/f38AYAV/f39/fwBgBH9/f38AYAFvAX9gAW8Bb2ADb39/AW9gBX9/f39/AX9gA29vfwBgAABgA39+fgBgA39+fgF/YAd/f39/f39/AX9gBn9/f39/fwBgAX0BfWAEf39/fwF/YAABb2ABfwFvYAZ/f39/f38Bf2AAAX9gC39/f39/f39/f39/AX9gAn9/AW9gAXwBb2ACb38Bb2ADb29vAX9gAn9vAGAHf39/f39/fwBgAn9/AX5gAn9+AX9gAn9+AGALfX19fX19fX1/b38Bb2ABfwF9YAV/f35/fwBgBH9+f38AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AYAR/f29vAX9gA39vbwF/YAJ9fQF9ArcIHgN3YmcVX193YmluZGdlbl9zdHJpbmdfbmV3ABkDd2JnFV9fd2JpbmRnZW5fbnVtYmVyX25ldwAaA3diZxpfX3diZ19nZXRfYjliOTMwNDdmZTNjZjQ1YgAbA3diZx1fX3diZ19sZW5ndGhfZTJkMmE0OTEzMmMxYjI1NgAIA3diZxpfX3diZ19uZXdfNDA1ZTIyZjM5MDU3NmNlMgAUA3diZx1fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OAAJA3diZxpfX3diZ19uZXdfYTEyMDAyYTdmOTFjNzViZQAJA3diZxpfX3diZ19zZXRfNjU1OTViZGQ4NjhiMzAwOQAMA3diZx1fX3diZ19sZW5ndGhfYTQ0NjE5M2RjMjJjMTJmOAAIA3diZxpfX3diZ19uZXdfOWZlZTk3YTQwOWIzMmI2OAAJA3diZxpfX3diZ19zZXRfZjRmMWYwZGFhMzA2OTZmYwAMA3diZx1fX3diZ19sZW5ndGhfOGNmZDJjNjQwOWFmODhhZAAIA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyAAoDd2JnGl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3AAkDd2JnGl9fd2JnX3NldF9kMjM2NjFkMTkxNDhiMjI5AAwDd2JnHV9fd2JnX2xlbmd0aF82Y2E1Mjc2NjVkODk2OTRkAAgDd2JnMV9fd2JnX25ld3dpdGhi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CwJAIAAoAhAiAkUNAEGousIAQQggAhDVBEUNAEEBDAILIAFBATsBJCABIAQ2AiAgAUEANgIcIAFBAToAGCABQd8ANgIUIAEgBDYCECABQQA2AgwgASAENgIIIAEgAzYCBCABQd8ANgIAIAFBKGogARBQAn8gASgCKEUEQAJAIAEtACUNACABQQE6ACUCQCABLQAkQQFGBEAgASgCICEFIAEoAhwhBAwBCyABKAIgIgUgASgCHCIERg0BCyABKAIEIARqIQMgBSAEawwCC0GwusIAEK4EAAsgASgCHCEEIAEgASgCMDYCHCADIARqIQMgASgCLCAEawshBAJAIAIEQCADIAQgAhDVBA0BCyABQcgAaiABQSBqKQIANwMAIAFBQGsgAUEYaikCADcDACABQThqIAFBEGopAgA3AwAgAUEwaiABQQhqKQIANwMAIAEgASkCADcDKAJAIAEtAE0NACACIQMDQCABKAIsIQUgAUHUAGogAUEoahBQAn8gASgCVEUEQCABLQBNDQMgAUEBOgBNAkAgAS0ATEEBRgRAIAEoAkghBSABKAJEIQQMAQsgASgCSCIFIAEoAkQiBEYNBAsgASgCLCAEaiEGIAUgBGsMAQsgASgCRCEEIAEgASgCXDYCRCAEIAVqIQYgASgCWCAEawshBAJAIANFBEBBACEDDAELQbm2wgBBASADENUEDQMgACgCECICRQRAQQAhAkEAIQMMAQsgAiEDIAYgBCACENUEDQMLIAEtAE1FDQALCyACRQ0BQcC6wgBBAiACENUERQ0BC0EBDAELAkAgACgCECICRQ0AQcK6wgBBAyACENUERQ0AQQEMAQsCQAJAAkAgACgCACIDRQRAQQAhAwwBC0EAIQIDQAJAIAAoAggiBCAAKAIETw0AIAMgBGotAABBxQBHDQAgACAEQQFqNgIIDAILAkAgAkUNACAAKAIQIgNFDQBB9bnCAEECIAMQ1QRFDQBBAQwFCyAAECcNAiACQQFrIQIgACgCACIDDQALQQAhAwsgACgCECIEBEBBAUH1s8IAQQEgBBDVBA0DGiAAKAIAIQMLIANFDQEgACgCCCICIAAoAgRPDQEgAiADai0AAEH1AEcNASAAIAJBAWo2AghBAAwCC0EBDAELAkAgACgCECICRQ0AQcW6wgBBBCACENUERQ0AQQEMAQsgABAnCyAB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AWogBiARGyADa2whAwwDCyABIApBjIHCABCtAgALQZyBwgBBKUHIgcIAEO0CAAtBoP/BAEEXQZyAwgAQ7QIACyAPIAZBAWo2AgAgAkEEaiAJOgAAIAIgAzYCACACQQhqIQIgBCAFQQFqIgVHDQALCyAAQYWAgIB4NgIADwsgBUEBaiEFIAMoAgAhCSADQQRqIQMgCUEATA0ACyAFQQFrIQxBACEDA0ACQCACIAZJBEAgA0EBaiEDIAsgAkEDdGogDDoABQNAIAIgDWogDnEiAiAETw0ACwwBCyACIAZB2IHCABCtAgALIAMgCUcNAAsMAAsAC9IHAQN/AkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAOCgAHBwECAwQHBwUHCwJAAkACQAJAAkACQCAALQAEDgcADAEMAgMEDAsgAC0ACEEDRw0LIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQQgASADIAIoAggQpwQMBAsgAC0ACEEDRw0KIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQMgASADIAIoAggQpwQMAwsgAC0ACEEDRw0JIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQIgASADIAIoAggQpwQMAgsgAC0ACEEDRw0IIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQEgASADIAIoAggQpwQMAQsgAC0ACEEDRw0HIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQAgASADIAIoAggQpwQLIABBDEEEEKcEDwsCQAJAIAAtAAQOAgcBAAsgACgCCCIBQfv///8HaiICQQ1NIAJBAkdxDQYgAUGEgICAeEoNBSABQYOAgIB4Rw0GDAULIAAoAggiAUGEgICAeEogAUGDgICAeEZyDQQMBQsgAC0ABEEDRw0EDAULAkACQEEDIAAoAgQiAUEHayICIAJBA08bQQJrDgIBAAULAkACQAJAIAEOBgAHAQcHAgcLIAAtAAhBA0cNBgwICyAAKAIIIgFB7f///wdqIgJBCk0gAkEDR3ENBSABRSABQfv///8H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wQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA4hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwICyACIAA2AgQgAkEBNgIMIAJB8KfBADYCCCACQgE3AhQgAiACQQRqrUKAgICAoDeENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAcLIAIgAEEEajYCBCACQQE2AgwgAkHwp8EANgIIIAJCATcCFCACIAJBBGqtQoCAgICgOIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMBgsgASgCHEHFusEAQTkgASgCICgCDBECAAwFCyACIABBBGo2AgQgAkECNgIMIAJBqLvBADYCCCACQgE3AhQgAiACQQRqrUKAgICA8DWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAQLIAIgAEEEajYCACACIABBCGo2AgQgAkEDNgIMIAJB6LvBADYCCCACQgI3AhQgAkKAgICA8DUiBCACrYQ3AyggAiAEIAJBBGqthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwDCyACIABBBGo2AgQgAkECNgIMIAJB8LzBADYCCCACQgE3AhQgAiACQQRqrUKAgICAsDiENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAILIAIgAEEEajYCACACIABBCGo2AgQgAkECNgIMIAJBsL3BADYCCCACQgI3AhQgAkKAgICAwDgiBCACQQRqrYQ3AyggAiAEIAKthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAjYCDCACQfS9wQA2AgggAkICNwIUIAJCgICAgPA1IgQgAkEEaq2ENwMoIAIgBCACrYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAuXBgEIfyMAQTBrIgEkAAJAAn8CQAJAAkAgACgCACIFBEAgACgCCCIEIAQgACgCBCIHIAQgB0sbayEIIAUhAwNAIAIgCGpFDQMgACACIARqQQFqNgIIIAJBAWohAiADIARqIANBAWohAy0AACIGQTBrQf8BcUEKSSAGQeEAa0H/AXFBBklyDQALIAZB3wBHDQIgAiAEakEBayEGAkAgBARAIAQgB08EQCAGIAdLDQgMAgsgBiAHSw0HIAQgBWosAABBv39KDQEMBwsgBiAHSw0GCyACQQFrIgJBAXFFBEAgAUKAgICAIDcCGCABIAMgBGpBAWsiAzYCFCABIAI2AhAgASAEIAVqIgU2AgwDQCABQQxqECYiBEGAgMQASQ0ACyAEQYGAxABGDQILIAAoAhAiA0UNA0HEucIAQRAgAxDVBEUNA0EBDAQLQQAgACgCECIARQ0DGkHtucIAQQEgABDVBAwDC0EAIAAoAhAiAEUNAhpBASAAQSIQ6wMNAhogAUKAgICAIDcCGCABIAM2AhQgASACNgIQIAEgBTYCDCABQQxqECYiAkGBgMQARwRAIAFBKGohBANAAkACQAJAAkAgAkGAgMQARwRAIAJBJ0YNASABQSBqIAIQPCABLQAgQYABRw0CQYABIQMDQAJAIANBgAFHBEAgAS0AKiIFIAEtACtPDQcgASAFQQFqOgAqIAFBIGogBWotAAAhAgwBC0EAIQMgBEEANgIAIAEoAiQhAiABQgA3AyALIAAgAhDrA0UNAAsMAwtBgLDCAEErIAFBIGpB8K/CAEHQrsIAEKACAAsgAEEnEOsDRQ0CDAELIAEtACoiAiABLQArIgMgAiADSxshAwNAIAIgA0YNAiABQSBqIAJqIQUgAkEBaiECIAAgBS0AABDrA0UNAAsLQQEMBQsgAUEMahAmIgJBgYDEAEcNAAsLIABBIhDrAwwCCyAAKAIQIgNFDQBBxLnCAEEQIAMQ1QRFDQBBAQwBCyAAQQA6AAQgAEEANgIAQQALIAFBMGokAA8LIAUgByAEIAZB9LjCABDsAwALrQUCBn8CfiAFQf8BcSIKIQcCQCABKAIQIgkgAS0AFCIGaiIIQQBKBEACQCAHIAhNBEAgCUEATCAGIApPcg0BA0AgCUEBayIIQQN2IQdBwAAgBkEHaiILQXhxayEFAkAgCEE/TQRAIAEgByAFEIgBIAEoAhAhCSABLQAUIQYMAQsCQCABKAIEIgggByALQfgBcUEDdmpBB2siB08EQCAIIAdrIghBB0sNAUEIIAhBxN7BABCrBAALIAcgCEHU3sEAEKoEAAsgASAFIAZqIgY6ABQgASAJIAVB/wFxayIJNgIQIAEgASgCACAHaikAADcDCAsgBkH/AXEgCk8NAiAJQQBKDQALDAELAn5CACACQf8BcSIFRQ0AGiAFIAZNBEAgASAGIAJrIgU6ABRCfyACrYZCf4UgASkDCCAFQT9xrYiDDAELIAEgAhBbCyENAkAgA0H/AXEiBUUNACAFIAEtABQiAksEQCABIAMQWyEMDAELIAEgAiADayICOgAUQn8gA62GQn+FIAEpAwggAkE/ca2IgyEMCyAAAn5CACAEQf8BcSICRQ0AGiACIAEtABQiA00EQCABIAMgBGsiAjoAFEJ/IASthkJ/hSABKQMIIAJBP3GtiIMMAQsgASAEEFsLNwMQDAILIAJB/wFxBH4gASAGIAJrIgY6ABRCfyACrYZCf4UgASkDCCAGQT9xrYiDBUIACyENIANB/wFxBEAgASAGIANrIgY6ABRCfyADrYZCf4UgASkDCCAGQT9xrYiDIQwLIAAgBEH/AXEEfiABIAYgBGsiAjoAFEJ/IASthkJ/hSABKQMIIAJBP3GtiIMFQgALNwMQDAELIABCADcDACABIAkgB2s2AhAgAEEIakIANwMAIABBEGpCADcDAA8LIAAgDDcDCCAAIA03AwAL7AUBB38CfyABRQRAIAAoAhQhCEEtIQogBUEBagwBC0ErQYCAxAAgACgCFCIIQQFxIgEbIQogASAFagshBwJAIAhBBHFFBEBBACECDAELIANBEE8EQCACIAMQLyAHaiEHDAELIANFDQAgA0EDcSEJAkAgA0EESQRAQQAhAQwBCyADQQxxIQxBACEBA0AgASACIAZqIgssAABBv39KaiALQQFqLAAAQb9/SmogC0ECaiwAAEG/f0pqIAtBA2osAABBv39KaiEBIAwgBkEEaiIGRw0ACwsgCQRAIAIgBmohBgNAIAEgBiwAAEG/f0pqIQEgBkEBaiEGIAlBAWsiCQ0ACwsgASAHaiEHCyAAKAIARQRAIAAoAhwiASAAKAIgIgAgCiACIAMQ/QIEQEEBDwsgASAEIAUgACgCDBECAA8LAkACQAJAIAcgACgCBCIGTwRAIAAoAhwiASAAKAIgIgAgCiACIAMQ/QJFDQFBAQ8LIAhBCHFFDQEgACgCECELIABBMDYCECAALQAYIQxBASEBIABBAToAGCAAKAIcIgggACgCICIJIAogAiADEP0CDQIgBiAHa0EBaiEBAkADQCABQQFrIgFFDQEgCEEwIAkoAhARAABFDQALQQEPCyAIIAQgBSAJKAIMEQIABEBBAQ8LIAAgDDoAGCAAIAs2AhBBAA8LIAEgBCAFIAAoAgwRAgAhAQwBCyAGIAdrIQcCQAJAAkBBASAALQAYIgEgAUEDRhsiAUEBaw4CAAECCyAHIQFBACEHDAELIAdBAXYhASAHQQFqQQF2IQcLIAFBAWohASAAKAIQIQggACgCICEGIAAoAhwhAAJAA0AgAUEBayIBRQ0BIAAgCCAGKAIQEQAARQ0AC0EBDwtBASEBIAAgBiAKIAIgAxD9Ag0AIAAgBCAFIAYoAgwRAgANAEEAIQEDQCABIAdGBEBBAA8LIAFBAWohASAAIAggBigCEBEAAEUNAAsgAUEBayAHSQ8LIAELrgUBB38CQCAAKAIAIgkgACgCCCIEcgRAAkAgBEEBcUUNACABIAJqIQcCQCAAKAIMIgZFBEAgASEEDAELIAEhBANAIAQiAyAHRg0CAn8gA0EBaiADLAAAIghBAE4NABogA0ECaiAIQWBJDQAaIANBA2ogCEFwSQ0AGiADQQRqCyIEIANrIAVqIQUgBkEBayIGDQALCyAEIAdGDQAgBCwAABogBSACAn8CQCAFRQ0AIAIgBU0EQCACIAVGDQFBAAwCCyABIAVqLAAAQUBODQBBAAwBCyABCyIDGyECIAMgASADGyEBCyAJRQ0BIAAoAgQhBwJAIAJBEE8EQCABIAIQLyEDDAELIAJFBEBBACEDDAELIAJBA3EhBgJAIAJBBEkEQEEAIQNBACEFDAELIAJBDHEhCEEAIQNBACEFA0AgAyABIAVqIgQsAABBv39KaiAEQQFqLAAAQb9/SmogBEECaiwAAEG/f0pqIARBA2osAABBv39KaiEDIAggBUEEaiIFRw0ACwsgBkUNACABIAVqIQQDQCADIAQsAABBv39KaiEDIARBAWohBCAGQQFrIgYNAAsLAkAgAyAHSQRAIAcgA2shBgJAAkACQCAALQAYIgRBACAEQQNHGyIDQQFrDgIAAQILIAYhA0EAIQYMAQsgBkEBdiEDIAZBAWpBAXYhBgsgA0EBaiEDIAAoAhAhBSAAKAIgIQQgACgCHCEAA0AgA0EBayIDRQ0CIAAgBSAEKAIQEQAARQ0AC0EBDwsMAgsgACABIAIgBCgCDBECAARAQQEPC0EAIQMDQCADIAZGBEBBAA8LIANBAWohAyAAIAUgBCgCEBEAAEUNAAsgA0EBayAGSQ8LIAAoAhwgASACIAAoAiAoAgwRAgAPCyAAKAIcIAEgAiAAKAIgKAIMEQIAC7gFAgh/AX4CQCABKAIIIgIgASgCBCIETw0AIAEoAgAgAmotAABB9QBHDQBBASEHIAEgAkEBaiICNgIICwJAAkAgAiAETw0BIAEoAgAiBSACai0AAEEwayIDQf8BcSIGQQlLDQEgASACQQFqIgI2AgggBkUEQEEAIQMMAQsgAiAEIAIgBEsbIQYgA0H/AXEhAwNAIAIgBkYNASACIAVqLQAAQTBrQf8BcSIIQQlLDQEgASACQQFqIgI2AgggA61CCn4iCkIgiFAEQCAIIAqnIghqIgMgCE8NAQsLDAELAkAgAiAETw0AIAIgBWotAABB3wBHDQAgASACQQFqIgI2AggLAkACQAJAAkAgAiACIANqIgZNBEAgASAGNgIIIAQgBkkNBSACRQ0CIAIgBEkNAQwCCwwECyACIAVqLAAAQb9/TA0BCyAGRSAEIAZNckUEQCAFIAZqLAAAQb9/TA0BCyACIAVqIQQgBw0BIABCATcCCCAAIAM2AgQgACAENgIADwsgBSAEIAIgBkGEucIAEOwDAAtBACEHQQAgA2shASAFIAZqIgZBAWshCEEAIQICQAJAAn8DQCABIAJGBEAgBCEBQQEMAgsgAiAIaiACQQFrIgUhAi0AAEHfAEcNAAsgAyAFaiEHAkACQEEAIANrIAVGDQAgAyAHTQRAIAUNBEEAIQIgA0F/cyAFRw0BDAILIAUgBmosAABBv39MDQMLIAMgB0EBaiIBTQRAIAMhAiAFQX9GDQEMBAsgBSAGakEBaiwAAEG/f0wNAyABIQILIAIgBGohASADIAJrIQMgBAshAiADRQRADAMLIAAgAzYCDCAAIAE2AgggACAHNgIEIAAgAjYCAA8LIAQgA0EAIAdBlLnCABDsAwALIAQgAyABIANBpLnCABDsAwALIABBADYCACAAQQA6AAQL4gUCB38CfiMAQSBrIgQkAAJ/AkACQCAAKAIAIgNFDQAgACgCCCICIAAoAgQiBU8NACACIANqIgEtAABBwgBGBEAgACACQQFqIgE2AggCQAJAAkACQAJAIAKtAn4CQCABIAVJBEAgASADai0AAEHfAEYNAQsgASAFIAEgBUsbIQcDQAJAIAEgBUkEQCABIANqLQAAQd8ARg0BCyABIAdGDQQCQCABIANqLQAAIgJBMGsiBkH/AXFBCkkNACACQeEAa0H/AXFBGk8EQCACQcEAa0H/AXFBGk8NBiACQR1rIQYMAQsgAkHXAGshBgsgACABQQFqIgE2AgggBCAIEJsCIAQpAwhCAFINBCAEKQMAIgkgBq1C/wGDfCIIIAlaDQEMBAsLIAAgAUEBajYCCCAIQn9RDQIgCEIBfAwBCyAAIAJBAmo2AghCAAsiCFgNAEEBIQEgACgCECECIAAoAgxBAWoiA0H0A0sNASACRQ0EIARBGGoiAiAAQQhqIgEpAgA3AwAgACADNgIMIAEgCD4CACAEIAApAgA3AxAgABA4IAEgAikDADcCACAAIAQpAxA3AgBB/wFxDAgLQQAhASAAKAIQIgJFDQJBxLnCAEEQIAIQ1QQNAQwCCyACRQ0BQdS5wgBBGSACENUERQ0BC0ECDAULIAAgAToABCAAQQA2AgALQQAMAwsgAS0AAEHJAEcNACAAIAJBAWo2AgggAEEAEB9FDQFBAgwCC0ECQQAgAEEAEB8bDAELAkAgACgCECIBRQ0AQfizwgBBASABENUERQ0AQQIMAQtBASAAKAIAIgFFDQAaQQAhAgJAA0ACQCAAKAIIIgMgACgCBE8NACABIANqLQAAQcUARw0AIAAgA0EBajYCCEEBDAMLAkAgAkUNACAAKAIQIgNFDQBBAkH1ucIAQQIgAxDVBA0DGgsgABBZDQEgAkEBayECIAAoAgAiAQ0AC0EBDAELQQILIARBIGokAAvPBgEDfyMAQSBrIgMkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDigGAQEBAQEBAQECBAEBAwEBAQEBAQEBAQEBAQEBAQEBAQEBCAEBAQEHAAsgAUHcAEYNBAsgAkEBcUUgAUGABklyDQcgARBcRQ0HIANBADoACiADQQA7AQggAyABQRR2QfzAwgBqLQAAOgALIAMgAUEEdkEPcUH8wMIAai0AADoADyADIAFBCHZBD3FB/MDCAGotAAA6AA4gAyABQQx2QQ9xQfzAwgBqLQAAOgANIAMgAUEQdkEPcUH8wMIAai0AADoADCABQQFyZ0ECdiICIANBCGoiBWoiBEH7ADoAACAEQQFrQfUAOgAAIAUgAkECayICakHcADoAACADQRBqIgQgAUEPcUH8wMIAai0AADoAACAAQQo6AAsgACACOgAKIAAgAykCCDcCACADQf0AOgARIABBCGogBC8BADsBAAwJCyAAQYAEOwEKIABCADcBAiAAQdzoATsBAAwICyAAQYAEOwEKIABCADcBAiAAQdzkATsBAAwHCyAAQYAEOwEKIABCADcBAiAAQdzcATsBAAwGCyAAQYAEOwEKIABCADcBAiAAQdy4ATsBAAwFCyAAQYAEOwEKIABCADcBAiAAQdzgADsBAAwECyACQYACcUUNASAAQYAEOwEKIABCADcBAiAAQdzOADsBAAwDCyACQYCABHENAQsgARC6AUUEQCADQQA6ABYgA0EAOwEUIAMgAUEUdkH8wMIAai0AADoAFyADIAFBBHZBD3FB/MDCAGotAAA6ABsgAyABQQh2QQ9xQfzAwgBqLQAAOgAaIAMgAUEMdkEPcUH8wMIAai0AADoAGSADIAFBEHZBD3FB/MDCAGotAAA6ABggAUEBcmdBAnYiAiADQRRqIgVqIgRB+wA6AAAgBEEBa0H1ADoAACAFIAJBAmsiAmpB3AA6AAAgA0EcaiIEIAFBD3FB/MDCAGotAAA6AAAgAEEKOgALIAAgAjoACiAAIAMpAhQ3AgAgA0H9ADoAHSAAQQhqIAQvAQA7AQAMAgsgACABNgIEIABBgAE6AAAMAQsgAEGABDsBCiAAQgA3AQIgAEHcxAA7AQALIANBIGokAAvpBQEBfyMAQTBrIgIkAAJ/AkACQAJAAkACQAJAAkACQCAALQAAQQFrDgcBAgMEBQYHAAsgAiAAQQRqNgIEIAJBATYCDCACQZSqwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA1hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwHCyACIABBBGo2AgQgAkEBNgIMIAJBuKrBADYCCCACQgE3AhQgAiACQQRqrUKAgICAkDaENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAYLIAIgAEEEajYCBCACQQE2AgwgAkHoqsEANgIIIAJCATcCFCACIAJBBGqtQoCAgICQNYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMBQsgAiAAQQFqNgIEIAJBATYCDCACQfCnwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgOA1hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwECyACIABBBGo2AgQgAkEBNgIMIAJBmKvBADYCCCACQgE3AhQgAiACQQRqrUKAgICAkDWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAMLIAIgAEEEajYCBCACQQE2AgwgAkHEq8EANgIIIAJCATcCFCACIAJBBGqtQoCAgICQNYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMAgsgAiAAQQRqNgIEIAJBATYCDCACQfSrwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA1hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAzYCDCACQbyswQA2AgggAkICNwIUIAIgAkEEaq1CgICAgIA2hDcDKCACIAKtQoCAgICQNoQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAuMBQEIfwJAIAJBEEkEQCAAIQMMAQsCQCAAQQAgAGtBA3EiBmoiBSAATQ0AIAAhAyABIQQgBgRAIAYhBwNAIAMgBC0AADoAACAEQQFqIQQgA0EBaiEDIAdBAWsiBw0ACwsgBkEBa0EHSQ0AA0AgAyAELQAAOgAAIANBAWogBEEBai0AADoAACADQQJqIARBAmotAAA6AAAgA0EDaiAEQQNqLQAAOgAAIANBBGogBEEEai0AADoAACADQQVqIARBBWotAAA6AAAgA0EGaiAEQQZqLQAAOgAAIANBB2ogBEEHai0AADoAACAEQQhqIQQgA0EIaiIDIAVHDQALCyAFIAIgBmsiB0F8cSIIaiEDAkAgASAGaiIEQQNxRQRAIAMgBU0NASAEIQEDQCAFIAEoAgA2AgAgAUEEaiEBIAVBBGoiBSADSQ0ACwwBCyADIAVNDQAgBEEDdCICQRhxIQYgBEF8cSIJQQRqIQFBACACa0EYcSEKIAkoAgAhAgNAIAUgAiAGdiABKAIAIgIgCnRyNgIAIAFBBGohASAFQQRqIgUgA0kNAAsLIAdBA3EhAiAEIAhqIQELAkAgAyACIANqIgZPDQAgAkEHcSIEBEADQCADIAEtAAA6AAAgAUEBaiEBIANBAWohAyAEQQFrIgQNAAsLIAJBAWtBB0kNAANAIAMgAS0AADoAACADQQFqIAFBAWotAAA6AAAgA0ECaiABQQJqLQAAOgAAIANBA2ogAUEDai0AADoAACADQQRqIAFBBGotAAA6AAAgA0EFaiABQQVqLQAAOgAAIANBBmogAUEGai0AADoAACADQQdqIAFBB2otAAA6AAAgAUEIaiEBIANBCGoiAyAGRw0ACwsgAAuzBgEEfyMAQSBrIgIkAAJAAkACQAJAAkACQAJAAkACQAJAIAEOKAAHBwcHBwcHBwEDBwcCBwcHBwcHBwcHBwcHBwcHBwcHBwcEBwcHBwUGCyAAQYAEOwEKIABCADcBAiAAQdzgADsBAAwICyAAQYAEOwEKIABCADcBAiAAQdzoATsBAAwHCyAAQYAEOwEKIABCADcBAiAAQdzkATsBAAwGCyAAQYAEOwEKIABCADcBAiAAQdzcATsBAAwFCyAAQYAEOwEKIABCADcBAiAAQdzEADsBAAwECyAAQYAEOwEKIABCADcBAiAAQdzOADsBAAwDCyABQdwARg0BCwJAIAFB/wVNDQAgARBcRQ0AIAJBADoACiACQQA7AQggAiABQRR2QeCvwgBqLQAAOgALIAIgAUEEdkEPcUHgr8IAai0AADoADyACIAFBCHZBD3FB4K/CAGotAAA6AA4gAiABQQx2QQ9xQeCvwgBqLQAAOgANIAIgAUEQdkEPcUHgr8IAai0AADoADCABQQFyZ0ECdiIDIAJBCGoiBWoiBEH7ADoAACAEQQFrQfUAOgAAIAUgA0ECayIDakHcADoAACACQRBqIgQgAUEPcUHgr8IAai0AADoAACAAQQo6AAsgACADOgAKIAAgAikCCDcCACACQf0AOgARIABBCGogBC8BADsBAAwCCyABELoBRQRAIAJBADoAFiACQQA7ARQgAiABQRR2QeCvwgBqLQAAOgAXIAIgAUEEdkEPcUHgr8IAai0AADoAGyACIAFBCHZBD3FB4K/CAGotAAA6ABogAiABQQx2QQ9xQeCvwgBqLQAAOgAZIAIgAUEQdkEPcUHgr8IAai0AADoAGCABQQFyZ0ECdiIDIAJBFGoiBWoiBEH7ADoAACAEQQFrQfUAOgAAIAUgA0ECayIDakHcADoAACACQRxqIgQgAUEPcUHgr8IAai0AADoAACAAQQo6AAsgACADOgAKIAAgAikCFDcCACACQf0AOgAdIABBCGogBC8BADsBAAwCCyAAIAE2AgQgAEGAAToAAAwBCyAAQYAEOwEKIABCADcBAiAAQdy4ATsBAAsgAkEgaiQAC84FAgZ/An4CQCACRQ0AIAJBB2siA0EAIAIgA08bIQcgAUEDakF8cSABayEIQQAhAwNAAkACQAJAIAEgA2otAAAiBcAiBkEATgRAIAggA2tBA3ENASADIAdPDQIDQCABIANqIgQoAgQgBCgCAHJBgIGChHhxDQMgA0EIaiIDIAdJDQALDAILQoCAgICAICEKQoCAgIAQIQkCQAJAAn4CQAJAAkACQAJAAkACQAJAAkAgBUHfx8IAai0AAEECaw4DAAECCgsgA0EBaiIEIAJJDQJCACEKQgAhCQwJC0IAIQogA0EBaiIEIAJJDQJCACEJDAgLQgAhCiADQQFqIgQgAkkNAkIAIQkMBwsgASAEaiwAAEG/f0oNBgwHCyABIARqLAAAIQQCQAJAIAVB4AFrIgUEQCAFQQ1GBEAMAgUMAwsACyAEQWBxQaB/Rg0EDAMLIARBn39KDQIMAwsgBkEfakH/AXFBDE8EQCAGQX5xQW5HDQIgBEFASA0DDAILIARBQEgNAgwBCyABIARqLAAAIQQCQAJAAkACQCAFQfABaw4FAQAAAAIACyAGQQ9qQf8BcUECSyAEQUBOcg0DDAILIARB8ABqQf8BcUEwTw0CDAELIARBj39KDQELIAIgA0ECaiIETQRAQgAhCQwFCyABIARqLAAAQb9/Sg0CQgAhCSADQQNqIgQgAk8NBCABIARqLAAAQb9/TA0FQoCAgICA4AAMAwtCgICAgIAgDAILQgAhCSADQQJqIgQgAk8NAiABIARqLAAAQb9/TA0DC0KAgICAgMAACyEKQoCAgIAQIQkLIAAgCiADrYQgCYQ3AgQgAEEBNgIADwsgBEEBaiEDDAILIANBAWohAwwBCyACIANNDQADQCABIANqLAAAQQBIDQEgAiADQQFqIgNHDQALDAILIAIgA0sNAAsLIAAgAjYCCCAAIAE2AgQgAEEANgIAC/4FAQV/IABBCGsiASAAQQRrKAIAIgNBeHEiAGohAgJAAkAgA0EBcQ0AIANBAnFFDQEgASgCACIDIABqIQAgASADayIBQdDowgAoAgBGBEAgAigCBEEDcUEDRw0BQcjowgAgADYCACACIAIoAgRBfnE2AgQgASAAQQFyNgIEIAIgADYCAA8LIAEgAxB1CwJAAkACQAJAAkAgAigCBCIDQQJxRQRAIAJB1OjCACgCAEYNAiACQdDowgAoAgBGDQMgAiADQXhxIgIQdSABIAAgAmoiAEEBcjYCBCAAIAFqIAA2AgAgAUHQ6MIAKAIARw0BQcjowgAgADYCAA8LIAIgA0F+cTYCBCABIABBAXI2AgQgACABaiAANgIACyAAQYACSQ0CIAEgABB+QQAhAUHo6MIAQejowgAoAgBBAWsiADYCACAADQRBsObCACgCACIABEADQCABQQFqIQEgACgCCCIADQALC0Ho6MIAQf8fIAEgAUH/H00bNgIADwtB1OjCACABNgIAQczowgBBzOjCACgCACAAaiIANgIAIAEgAEEBcjYCBEHQ6MIAKAIAIAFGBEBByOjCAEEANgIAQdDowgBBADYCAAsgAEHg6MIAKAIAIgNNDQNB1OjCACgCACICRQ0DQQAhAEHM6MIAKAIAIgRBKUkNAkGo5sIAIQEDQCACIAEoAgAiBU8EQCACIAUgASgCBGpJDQQLIAEoAgghAQwACwALQdDowgAgATYCAEHI6MIAQcjowgAoAgAgAGoiADYCACABIABBAXI2AgQgACABaiAANgIADwsgAEH4AXFBuObCAGohAgJ/QcDowgAoAgAiA0EBIABBA3Z0IgBxRQRAQcDowgAgACADcjYCACACDAELIAIoAggLIQAgAiABNgIIIAAgATYCDCABIAI2AgwgASAANgIIDwtBsObCACgCACIBBEADQCAAQQFqIQAgASgCCCIBDQALC0Ho6MIAQf8fIAAgAEH/H00bNgIAIAMgBE8NAEHg6MIAQX82AgALC98FAQJ/IwBBMGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkBBAiAAKAIAQfv///8HaiIDIANBDE8bQQFrDgsBAgMEBQYHCAkKCwALIAIgAEEEajYCDCACQQE2AhQgAkHwp8EANgIQIAJCATcCHCACIAJBDGqtQoCAgICQOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUMCwsgAiAAQQRqNgIMIAJBATYCFCACQfCnwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA4hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRQwKCyACIAA2AgwgAkEBNgIUIAJB8KfBADYCECACQgE3AhwgAiACQQxqrUKAgICAkDeENwMoIAIgAkEoajYCGCABKAIcIAEoAiAgAkEQahBFDAkLIAIgAEEEajYCDCACQQI2AhQgAkHwvMEANgIQIAJCATcCHCACIAJBDGqtQoCAgICwOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUMCAsgAiAAQQRqNgIMIAJBATYCFCACQZy/wQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA0hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRQwHCyABKAIcQaS/wQBBOSABKAIgKAIMEQIADAYLIAEoAhxB3b/BAEE/IAEoAiAoAgwRAgAMBQsgAiAAQQRqNgIMIAJBATYCFCACQfCnwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgMA4hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRQwECyABKAIcQZzAwQBBPCABKAIgKAIMEQIADAMLIAEoAhxB2MDBAEEkIAEoAiAoAgwRAgAMAgsgASgCHEH8wMEAQSQgASgCICgCDBECAAwBCyABKAIcQaDBwQBBJCABKAIgKAIMEQIACyACQTBqJAALkQUCAX8BfiMAQUBqIgIkAAJ/AkACQAJAAkACQAJAAkAgAC0AAEEBaw4GAQIDBAUGAAsgAiAAQQhqNgIkIAJBAjYCLCACQYCnwQA2AiggAkICNwI0IAJCsKbBgMA1NwMYIAIgAkEkaq1CgICAgNA1hDcDECACIAJBEGo2AjAgASgCHCABKAIgIAJBKGoQRQwGCyACIABBCGo2AiQgAkECNgIsIAJB4KfBADYCKCACQgI3AjQgAkKQp8GAwDU3AxggAiACQSRqrUKAgICA0DWENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAULIAIgAEEBajYCJCACQQE2AiwgAkHwp8EANgIoIAJCATcCNCACIAJBJGqtQoCAgIDgNYQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEUMBAsgAiAAQQRqNgIMIAIgAEEIajYCJCACQQI2AiwgAkGoqMEANgIoIAJCAjcCNCACQoCAgIDwNSIDIAJBJGqthDcDGCACIAMgAkEMaq2ENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAMLIAIgAEEEajYCDCACIABBAWo2AiQgAkECNgIsIAJB8KjBADYCKCACQgI3AjQgAiACQSRqrUKAgICA4DSENwMYIAIgAkEMaq1CgICAgPA1hDcDECACIAJBEGo2AjAgASgCHCABKAIgIAJBKGoQRQwCCyABKAIcQYCpwQBBGyABKAIgKAIMEQIADAELIAIgAEEBajYCJCACQQI2AiwgAkHgqcEANgIoIAJCATcCNCACIAJBJGqtQoCAgIDgNIQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEULIAJBQGskAAvrBAEFfwJ/AkAgAkECTwRAIAEoAgQiBEH//wFxRQRAIARBEHQMAwsgBEH/B3EhBSAEQYCAAnEhAyAEQYD4AXEiBkGA+AFGBEAgA0EQdCEDIANBgICA/AdyIAVFDQMaIAMgBUENdHJBgICA/gdyDAMLIANBEHQhAyAGRQ0BIAZBDXRBgICA/ABxIAVBDXRyQYCAgMADaiADcgwCC0EBQQFB/IzAABCtAgALIAUgBWdBEGsiBUH//wNxQQhqdEH///8DcSADQYCAgNgDciAFQRd0a3ILIQUCfyAEQYCAfHEgBEEQdiIDQf//AXFFDQAaIANB/wdxIQQgA0GAgAJxIQYgA0GA+AFxIgdBgPgBRgRAIAZBEHQhBiAGQYCAgPwHciAERQ0BGiAGIANBDXRyQYCAgP4HcgwBCyAGQRB0IQMgB0ENdEGAgID8AHEgBEENdHJBgICAwANqIANyIAcNABogBCAEZ0EQayIEQf//A3FBCGp0Qf///wNxIANBgICA2ANyIARBF3RrcgshBCAAAn8CQCACQQJHBEAgASgCCCICQf//AXFFBEAgAkEQdAwDCyACQf8HcSEBIAJBgIACcSEDIAJBgPgBcSICQYD4AUYEQCADQRB0IQIgAkGAgID8B3IgAUUNAxogAiABQQ10ckGAgID+B3IMAwsgA0EQdCEDIAJFDQEgAkENdEGAgID8AHEgAUENdHJBgICAwANqIANyDAILQQJBAkGMjcAAEK0CAAsgASABZ0EQayIBQf//A3FBCGp0Qf///wNxIANBgICA2ANyIAFBF3Rrcgs2AgggACAENgIEIAAgBTYCAAuLBQEEfyMAQSBrIgMkAAJAIAAQOEH/AXEiAUECRgRAQQEhAQwBCwJAAkACQAJAIAAoAgAiBEUNACAAKAIIIgIgACgCBE8NACACIARqLQAAQfAARw0AIAAgAkEBajYCCCAAKAIQIQIgAUEBcUUEQCACRQ0CQQEhAUH4s8IAQQEgAhDVBA0FDAILIAJFDQFB9bnCAEECIAIQ1QRFDQFBASEBDAQLIAFBAXFFDQIMAQsCQAJAIAAoAgBFDQAgAyAAEDcgAygCAEUNASADQRhqIANBCGopAgA3AwAgAyADKQIANwMQAkAgACgCECICRQ0AQQEhASADQRBqIAIQIw0FIAAoAhAiAkUNAEHJusIAQQMgAhDVBA0FCyAAECcEQEEBIQEMBQsDQCAAKAIAIgJFDQMgACgCCCIBIAAoAgRPDQMgASACai0AAEHwAEcNAyAAIAFBAWo2AgggACgCECIBBEBB9bnCAEECIAEQ1QQEQEEBIQEMBwsgACgCAEUNAgsgAyAAEDcgAygCAEUNAiADQRhqIANBCGopAgA3AwAgAyADKQIANwMQAkAgACgCECICRQ0AQQEhASADQRBqIAIQIw0GIAAoAhAiAkUNAEHJusIAQQMgAhDVBA0GC0EBIQEgABAnRQ0ACwwECyAAKAIQIgBFDQJB7bnCAEEBIAAQ1QQhAQwDCyAAKAIQIQECQCADLQAEIgJFBEAgAUUNAUHEucIAQRAgARDVBEUNAUEBIQEMBAsgAUUNAEHUucIAQRkgARDVBEUNAEEBIQEMAwsgACACOgAEQQAhASAAQQA2AgAMAgsgACgCECIARQ0AQQEhAUH3s8IAQQEgABDVBA0BC0EAIQELIANBIGokACABC9IEAg9/AX4jAEHQAGsiAyQAIANBDGqtQoCAgIAQhCESIAAtAAwhByAAKAIEIQ4gACgCACENIAAoAggiCEEcaiEPIAhBIGohEAJ/A0ACQCAJIhENACAGIQpBASEJAkAgAiAFTwRAA0AgASAFaiEGAkACQAJAIAIgBWsiC0EHTQRAIAIgBUYEQCAKIQYgAiEFIAIhBAwHC0EAIQQDQCAEIAZqLQAAQQpGDQIgCyAEQQFqIgRHDQALIAohBiACIQUgAiEEDAYLIANBCiAGIAsQiQEgAygCACILQQFHDQEgAygCBCEECyAEIAVqIgRBAWohBSACIARNDQEgASAEai0AAEEKRw0BQQAhCSAFIQYMBAsgCiEGIAIhBSACIQQgC0EBcUUNA0EAIQkMAwsgAiAFTw0ACwsgCiEGIAIhBAsCQCAHQQFxRQRAIABBAToADCANQQFxRQRAIAhB3IPCAEEEEOUDRQ0CDAMLIAMgDjYCDCADIBI3AyggA0EBOgBMIANBADYCSCADQiA3AkAgA0KAgICA0AA3AjggA0ECNgIwIANBATYCJCADQQI2AhQgA0Hkg8IANgIQIANBATYCHCAPKAIAIQsgECgCACEHIAMgA0EwajYCICADIANBKGo2AhhBASALIAcgA0EQahBFDQQaDAELIAxFDQAgCEEKEOsDDQEgDQRAIAhB9IPCAEEHEOUDDQIMAQsgCEHcg8IAQQQQ5QMNAQsgDEEBaiEMQQEhByAIIAEgCmogBCAKaxDlA0UNAQsLIBFBAXMLIANB0ABqJABBAXELhwUCAn8BfiMAQUBqIgIkACAAQQRqIQMCfwJAAkACQAJAAkACQAJAIAAoAgBBAWsOBgECAwQFBgALIAIgAzYCJCACQQE2AiwgAkHwr8EANgIoIAJCATcCNCACIAJBJGqtQoCAgICQNYQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEUMBgsgAiADNgIMIAIgAEEIajYCJCACQQM2AiwgAkHUsMEANgIoIAJCAjcCNCACQoCAgIDwNSIEIAJBJGqthDcDGCACIAQgAkEMaq2ENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAULIAIgAzYCJCACQQE2AiwgAkHwp8EANgIoIAJCATcCNCACIAJBJGqtQoCAgICgNoQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEUMBAsgAiADNgIkIAJBATYCLCACQfCnwQA2AiggAkIBNwI0IAIgAkEkaq1CgICAgLA2hDcDECACIAJBEGo2AjAgASgCHCABKAIgIAJBKGoQRQwDCyACIAM2AiQgAkEBNgIsIAJB8KfBADYCKCACQgE3AjQgAiACQSRqrUKAgICAwDaENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAILIAIgAzYCJCACQQE2AiwgAkHwp8EANgIoIAJCATcCNCACIAJBJGqtQoCAgIDQNoQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEUMAQsgAiADNgIkIAJBATYCLCACQfCnwQA2AiggAkIBNwI0IAIgAkEkaq1CgICAgOA2hDcDECACIAJBEGo2AjAgASgCHCABKAIgIAJBKGoQRQsgAkFAayQAC+oEAQp/IwBBMGsiAyQAIAMgATYCLCADIAA2AiggA0EDOgAkIANCIDcCHCADQQA2AhQgA0EANgIMAn8CQAJAAkAgAigCECIKRQRAIAIoAgwiAEUNASACKAIIIgEgAEEDdGohBCAAQQFrQf////8BcUEBaiEHIAIoAgAhAANAIABBBGooAgAiBQRAIAMoAiggACgCACAFIAMoAiwoAgwRAgANBAsgASgCACADQQxqIAFBBGooAgARAAANAyAAQQhqIQAgAUEIaiIBIARHDQALDAELIAIoAhQiAEUNACAAQQV0IQsgAEEBa0H///8/cUEBaiEHIAIoAgghBSACKAIAIQADQCAAQQRqKAIAIgEEQCADKAIoIAAoAgAgASADKAIsKAIMEQIADQMLIAMgCCAKaiIBQRBqKAIANgIcIAMgAUEcai0AADoAJCADIAFBGGooAgA2AiAgAUEMaigCACEEQQAhCUEAIQYCQAJAAkAgAUEIaigCAEEBaw4CAAIBCyAEQQN0IAVqIgwoAgANASAMKAIEIQQLQQEhBgsgAyAENgIQIAMgBjYCDCABQQRqKAIAIQQCQAJAAkAgASgCAEEBaw4CAAIBCyAEQQN0IAVqIgYoAgANASAGKAIEIQQLQQEhCQsgAyAENgIYIAMgCTYCFCAFIAFBFGooAgBBA3RqIgEoAgAgA0EMaiABQQRqKAIAEQAADQIgAEEIaiEAIAsgCEEgaiIIRw0ACwsgByACKAIETw0BIAMoAiggAigCACAHQQN0aiIAKAIAIAAoAgQgAygCLCgCDBECAEUNAQtBAQwBC0EACyADQTBqJAALlgQBBH8jAEGAAWsiBCQAAkACQAJAIAEoAhQiAkEQcUUEQCACQSBxDQFBASECIAAoAgBBASABEGxFDQIMAwsgACgCACECA0AgAyAEakH/AGogAkEPcSIFQTByIAVB1wBqIAVBCkkbOgAAIANBAWshAyACQRBJIAJBBHYhAkUNAAtBASECIAFBAUGPxMIAQQIgAyAEakGAAWpBACADaxA1RQ0BDAILIAAoAgAhAgNAIAMgBGpB/wBqIAJBD3EiBUEwciAFQTdqIAVBCkkbOgAAIANBAWshAyACQQ9LIAJBBHYhAg0AC0EBIQIgAUEBQY/EwgBBAiADIARqQYABakEAIANrEDUNAQsgASgCHEH6wMIAQQIgASgCICgCDBECAA0AAkAgASgCFCICQRBxRQRAIAJBIHENASAAKAIEQQEgARBsIQIMAgsgACgCBCECQQAhAwNAIAMgBGpB/wBqIAJBD3EiAEEwciAAQdcAaiAAQQpJGzoAACADQQFrIQMgAkEPSyACQQR2IQINAAsgAUEBQY/EwgBBAiADIARqQYABakEAIANrEDUhAgwBCyAAKAIEIQJBACEDA0AgAyAEakH/AGogAkEPcSIAQTByIABBN2ogAEEKSRs6AAAgA0EBayEDIAJBD0sgAkEEdiECDQALIAFBAUGPxMIAQQIgAyAEakGAAWpBACADaxA1IQILIARBgAFqJAAgAgu7BAEBfwJAIAAoAgBBAkYNACAAKAIoIgEEQCAAKAIsIAFBAXRBARCnBAsgACgCNCIBBEAgACgCOCABQQEQpwQLIAAoAkAiAQRAIAAoAkQgAUEBEKcECyAAKAJMIgEEQCAAKAJQIAFBAnRBBBCnBAsgACgCWCIBBEAgACgCXCABQQJ0QQQQpwQLIAAoAmQiAQRAIAAoAmggAUEDdEEEEKcECyAAKAJwIgEEQCAAKAJ0IAFBAnRBBBCnBAsgACgCfCIBBEAgACgCgAEgAUECdEEEEKcECyAAKAKQASIBBEAgACgClAEgAUEDdEEEEKcECyAAKAKcASIBBEAgACgCoAEgAUECdEEEEKcECyAAKAKoASIBBEAgACgCrAEgAUECdEEEEKcECyAAKAK4ASIBBEAgACgCvAEgAUEDdEEEEKcECyAAKALEASIBBEAgACgCyAEgAUECdEEEEKcECyAAKALQASIBBEAgACgC1AEgAUECdEEEEKcECyAAKALgASIBBEAgACgC5AEgAUEDdEEEEKcECyAAKALsASIBBEAgACgC8AEgAUECdEEEEKcECyAAKAL4ASIBBEAgACgC/AEgAUECdEEEEKcECyAAQZACahDTAyAAKAKEAyIBBEAgACgCiAMgAUEBEKcECyAAKAKQAyIBBEAgACgClAMgAUEBEKcECyAAKAKcAyIBBEAgACgCoAMgAUEMbEEEEKcECyAAKAKoAyIBRQ0AIAAoAqwDIAFBARCnBAsgAEHQA2oQKwuPBAENfyABQQFrIQ8gACgCBCEKIAAoAgAhCyAAKAIIIQwCQANAIA4NAQJAAkAgAiAESQ0AA0AgASAEaiEFAkACQAJAIAIgBGsiBkEHTQRAIAIgBEcNASACIQQMBQsCQCAFQQNqQXxxIgggBWsiAwRAQQAhAANAIAAgBWotAABBCkYNBSADIABBAWoiAEcNAAsgAyAGQQhrIgBNDQEMAwsgBkEIayEACwNAQYCChAggCCgCACIJQYqUqNAAc2sgCXJBgIKECCAIQQRqKAIAIglBipSo0ABzayAJcnFBgIGChHhxQYCBgoR4Rw0CIAhBCGohCCADQQhqIgMgAE0NAAsMAQtBACEAA0AgACAFai0AAEEKRg0CIAYgAEEBaiIARw0ACyACIQQMAwsgAyAGRgRAIAIhBAwDCwNAIAMgBWotAABBCkYEQCADIQAMAgsgBiADQQFqIgNHDQALIAIhBAwCCyAAIARqIgNBAWohBAJAIAIgA00NACAAIAVqLQAAQQpHDQAgBCEFIAQhAAwDCyACIARPDQALC0EBIQ4gAiIAIAciBUYNAgsCQCAMLQAABEAgC0H4w8IAQQQgCigCDBECAA0BC0EAIQMgACAHRwRAIAAgD2otAABBCkYhAwsgACAHayEAIAEgB2ohBiAMIAM6AAAgBSEHIAsgBiAAIAooAgwRAgBFDQELC0EBIQ0LIA0LswQBAX8CQCAAKAIAQQJGDQAgACgCKCIBBEAgACgCLCABQQF0QQEQpwQLIAAoAjQiAQRAIAAoAjggAUEBEKcECyAAKAJAIgEEQCAAKAJEIAFBARCnBAsgACgCTCIBBEAgACgCUCABQQJ0QQQQpwQLIAAoAlgiAQRAIAAoAlwgAUECdEEEEKcECyAAKAJkIgEEQCAAKAJoIAFBA3RBBBCnBAsgACgCcCIBBEAgACgCdCABQQJ0QQQQpwQLIAAoAnwiAQRAIAAoAoABIAFBAnRBBBCnBAsgACgCkAEiAQRAIAAoApQBIAFBA3RBBBCnBAsgACgCnAEiAQRAIAAoAqABIAFBAnRBBBCnBAsgACgCqAEiAQRAIAAoAqwBIAFBAnRBBBCnBAsgACgCuAEiAQRAIAAoArwBIAFBA3RBBBCnBAsgACgCxAEiAQRAIAAoAsgBIAFBAnRBBBCnBAsgACgC0AEiAQRAIAAoAtQBIAFBAnRBBBCnBAsgACgC4AEiAQRAIAAoAuQBIAFBA3RBBBCnBAsgACgC7AEiAQRAIAAoAvABIAFBAnRBBBCnBAsgACgC+AEiAQRAIAAoAvwBIAFBAnRBBBCnBAsgAEGQAmoQ0wMgACgChAMiAQRAIAAoAogDIAFBARCnBAsgACgCkAMiAQRAIAAoApQDIAFBARCnBAsgACgCnAMiAQRAIAAoAqADIAFBDGxBBBCnBAsgACgCqAMiAUUNACAAKAKsAyABQQEQpwQLC54FAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQIgACgCACIAKAIAQfv///8HaiIDIANBDk8bQQFrDg0BAgMEBQYHCAkKCwwNAAsgAiAAQQRqNgIMIAFB6NTBAEEMIAJBDGpB2NTBABB/DA0LIAIgAEEEajYCDCABQdDXwQBBDyACQQxqQcDXwQAQfwwMCyACIAA2AgwgAUGA1MEAQQ0gAkEMakHw08EAEH8MCwsgAUHY2sEAQQ0Q5QMMCgsgAiAAQQhqNgIMIAFB5drBAEEYQf3awQBBCSAAQQRqQfTMwQBBhtvBAEEOIAJBDGpBhM3BABDDAQwJCyACIABBBGo2AgwgAUH41cEAQQxBhNbBAEEMIAJBDGpB6NXBABDJAQwICyACIABBBGo2AgwgAUGU28EAQQ5Bi87BAEEDIAJBDGpBuM3BABDJAQwHCyABQaLbwQBBDhDlAwwGCyACIABBBGo2AgwgAUGw28EAQRZBi87BAEEDIAJBDGpBzM/BABDJAQwFCyACIABBCGo2AgwgAUHG28EAQSFBsNfBAEEEIABBBGpB9MzBAEG308EAQQQgAkEMakG4zcEAEMMBDAQLIAIgAEEIajYCDCABQefbwQBBGEH/28EAQQQgAEEEakH0zMEAQYPcwQBBDyACQQxqQYTNwQAQwwEMAwsgAiAAQQhqNgIMIAFBktzBAEEWQYvOwQBBAyAAQQRqQfTMwQBBt9PBAEEEIAJBDGpBuM3BABDDAQwCCyACIABBBGo2AgwgAUGo3MEAQRpBi87BAEEDIAJBDGpBhM3BABDJAQwBCyACIABBBGo2AgwgAUHC3MEAQQ5Bi87BAEEDIAJBDGpBhM3BABDJAQsgAkEQaiQAC5kFAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQIgACgCAEH7////B2oiAyADQQ5PG0EBaw4NAQIDBAUGBwgJCgsMDQALIAIgAEEEajYCDCABQcSZwABBDCACQQxqQbSZwAAQfwwNCyACIABBBGo2AgwgAUGMoMAAQQ8gAkEMakH8n8AAEH8MDAsgAiAANgIMIAFBrKDAAEENIAJBDGpBnKDAABB/DAsLIAFBuaDAAEENEOUDDAoLIAIgAEEIajYCDCABQcagwABBGEHeoMAAQQkgAEEEakGImMAAQeegwABBDiACQQxqQZiYwAAQwwEMCQsgAiAAQQRqNgIMIAFBiKHAAEEMQZShwABBDCACQQxqQfigwAAQyQEMCAsgAiAAQQRqNgIMIAFBoKHAAEEOQayZwABBAyACQQxqQcyYwAAQyQEMBwsgAUGuocAAQQ4Q5QMMBgsgAiAAQQRqNgIMIAFBvKHAAEEWQayZwABBAyACQQxqQbiawAAQyQEMBQsgAiAAQQhqNgIMIAFB0qHAAEEhQfOhwABBBCAAQQRqQYiYwABB+pzAAEEEIAJBDGpBzJjAABDDAQwECyACIABBCGo2AgwgAUH3ocAAQRhBj6LAAEEEIABBBGpBiJjAAEGTosAAQQ8gAkEMakGYmMAAEMMBDAMLIAIgAEEIajYCDCABQaKiwABBFkGsmcAAQQMgAEEEakGImMAAQfqcwABBBCACQQxqQcyYwAAQwwEMAgsgAiAAQQRqNgIMIAFBuKLAAEEaQayZwABBAyACQQxqQZiYwAAQyQEMAQsgAiAAQQRqNgIMIAFB0qLAAEEOQayZwABBAyACQQxqQZiYwAAQyQELIAJBEGokAAuZBQECfyMAQRBrIgIkAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEECIAAoAgBB+////wdqIgMgA0EOTxtBAWsODQECAwQFBgcICQoLDA0ACyACIABBBGo2AgwgAUHYvMAAQQwgAkEMakHIvMAAEH8MDQsgAiAAQQRqNgIMIAFBoMPAAEEPIAJBDGpBkMPAABB/DAwLIAIgADYCDCABQcDDwABBDSACQQxqQbDDwAAQfwwLCyABQc3DwABBDRDlAwwKCyACIABBCGo2AgwgAUHaw8AAQRhB8sPAAEEJIABBBGpBnLvAAEH7w8AAQQ4gAkEMakGsu8AAEMMBDAkLIAIgAEEEajYCDCABQZzEwABBDEGoxMAAQQwgAkEMakGMxMAAEMkBDAgLIAIgAEEEajYCDCABQbTEwABBDkHAvMAAQQMgAkEMakHgu8AAEMkBDAcLIAFBwsTAAEEOEOUDDAYLIAIgAEEEajYCDCABQdDEwABBFkHAvMAAQQMgAkEMakHMvcAAEMkBDAULIAIgAEEIajYCDCABQebEwABBIUGHxcAAQQQgAEEEakGcu8AAQY7AwABBBCACQQxqQeC7wAAQwwEMBAsgAiAAQQhqNgIMIAFBi8XAAEEYQaPFwABBBCAAQQRqQZy7wABBp8XAAEEPIAJBDGpBrLvAABDDAQwDCyACIABBCGo2AgwgAUG2xcAAQRZBwLzAAEEDIABBBGpBnLvAAEGOwMAAQQQgAkEMakHgu8AAEMMBDAILIAIgAEEEajYCDCABQczFwABBGkHAvMAAQQMgAkEMakGsu8AAEMkBDAELIAIgAEEEajYCDCABQebFwABBDkHAvMAAQQMgAkEMakGsu8AAEMkBCyACQRBqJAALmQUBAn8jAEEQayICJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkBBAiAAKAIAQfv///8HaiIDIANBDk8bQQFrDg0BAgMEBQYHCAkKCwwNAAsgAiAAQQRqNgIMIAFBqN/AAEEMIAJBDGpBmN/AABB/DA0LIAIgAEEEajYCDCABQdzlwABBDyACQQxqQczlwAAQfwwMCyACIAA2AgwgAUH85cAAQQ0gAkEMakHs5cAAEH8MCwsgAUGJ5sAAQQ0Q5QMMCgsgAiAAQQhqNgIMIAFBlubAAEEYQa7mwABBCSAAQQRqQYzewABBt+bAAEEOIAJBDGpB+NrAABDDAQwJCyACIABBBGo2AgwgAUHF5sAAQQxB0ebAAEEMIAJBDGpB6NrAABDJAQwICyACIABBBGo2AgwgAUHd5sAAQQ5BkN/AAEEDIAJBDGpB+NzAABDJAQwHCyABQevmwABBDhDlAwwGCyACIABBBGo2AgwgAUH55sAAQRZBkN/AAEEDIAJBDGpBnODAABDJAQwFCyACIABBCGo2AgwgAUGP58AAQSFBsOfAAEEEIABBBGpBjN7AAEHe4sAAQQQgAkEMakH43MAAEMMBDAQLIAIgAEEIajYCDCABQbTnwABBGEHM58AAQQQgAEEEakGM3sAAQdDnwABBDyACQQxqQfjawAAQwwEMAwsgAiAAQQhqNgIMIAFB3+fAAEEWQZDfwABBAyAAQQRqQYzewABB3uLAAEEEIAJBDGpB+NzAABDDAQwCCyACIABBBGo2AgwgAUH158AAQRpBkN/AAEEDIAJBDGpB+NrAABDJAQwBCyACIABBBGo2AgwgAUGP6MAAQQ5BkN/AAEEDIAJBDGpB+NrAABDJAQsgAkEQaiQAC5kFAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQIgACgCAEH7////B2oiAyADQQ5PG0EBaw4NAQIDBAUGBwgJCgsMDQALIAIgAEEEajYCDCABQeyHwQBBDCACQQxqQdyHwQAQfwwNCyACIABBBGo2AgwgAUHQi8EAQQ8gAkEMakHAi8EAEH8MDAsgAiAANgIMIAFB8IvBAEENIAJBDGpB4IvBABB/DAsLIAFB/YvBAEENEOUDDAoLIAIgAEEIajYCDCABQYqMwQBBGEGijMEAQQkgAEEEakHohcEAQauMwQBBDiACQQxqQcCGwQAQwwEMCQsgAiAAQQRqNgIMIAFBzIzBAEEMQdiMwQBBDCACQQxqQbyMwQAQyQEMCAsgAiAAQQRqNgIMIAFB5IzBAEEOQdSHwQBBAyACQQxqQfSGwQAQyQEMBwsgAUHyjMEAQQ4Q5QMMBgsgAiAAQQRqNgIMIAFBgI3BAEEWQdSHwQBBAyACQQxqQeCIwQAQyQEMBQsgAiAAQQhqNgIMIAFBlo3BAEEhQbeNwQBBBCAAQQRqQeiFwQBBoovBAEEEIAJBDGpB9IbBABDDAQwECyACIABBCGo2AgwgAUG7jcEAQRhB043BAEEEIABBBGpB6IXBAEHXjcEAQQ8gAkEMakHAhsEAEMMBDAMLIAIgAEEIajYCDCABQeaNwQBBFkHUh8EAQQMgAEEEakHohcEAQaKLwQBBBCACQQxqQfSGwQAQwwEMAgsgAiAAQQRqNgIMIAFB/I3BAEEaQdSHwQBBAyACQQxqQcCGwQAQyQEMAQsgAiAAQQRqNgIMIAFBlo7BAEEOQdSHwQBBAyACQQxqQcCGwQAQyQELIAJBEGokAAuLBAIJfwF+AkACQAJ/AkACQAJAAkAgAkHAAE0EQCABKAIEIghBA3QgASgCCCIGayIDIAJJDQEgBkEDdiIDIAhPDQIgASgCACIKIANqLQAAIAZBB3EiCXatIQxBCCAJayIFIAJJBEAgASAFIAZqIgQ2AggCQCAEQQdxRQRAIAIgBWsiB0EITw0BIAUhCSAHDAgLQeDkwQBBI0GE5cEAEO0CAAtBASAHQQN2IgMgA0EBTRsiBEEDdCAJa0EIaiEJA0AgBSAGaiIDQQN2IgsgCE8NBSABIANBCGo2AgggCiALajEAACAFQT9xrYYgDIQhDCAFQQhqIQUgBEEBayIEDQALDAULIAEgAiAGajYCCCAMQn8gAq2GQn+FgyEMDAYLIAAgAjYCCCAAQYCAATsBBCAAQQE2AgAPCyAAIAM2AgwgACACNgIIIABBAToABCAAQQE2AgAPCyADIAhB5OPBABCtAgALIAsgCEHQ5MEAEK0CAAsgBSAGaiEEIAIgCWsLIAdBB3EiB0cEQEH048EAQTtBsOTBABDtAgALIAcEQCAEQQN2IgMgCE8NAiABIAQgB2oiBDYCCCADIApqMQAAQn8gB62GQn+FgyAJQT9xrYYgDIQhDAsgBCACIAZqRg0AQZTlwQBBKUHA5cEAEO0CAAsgACAMNwMIIABBADYCAA8LIAMgCEHA5MEAEK0CAAvvAwELfyMAQRBrIgYkAAJAIAEoAhAiBCABKAIMIgNJBEAMAQsgASgCCCIMIARJBEAMAQsgAUEUaiIJIAEtABgiB2pBAWstAAAhCiABKAIEIQsCQCAHQQRNBEADQCADIAtqIQUCQCAEIANrIghBB00EQCADIARGBEBBACECIAEgBDYCDAwGC0EAIQIDQCACIAVqLQAAIApGDQIgCCACQQFqIgJHDQALQQAhAiABIAQ2AgwMBQsgBkEIaiAKIAUgCBCJASAGKAIIIgJBAUcNAyAGKAIMIQILIAEgAiADakEBaiIDNgIMAkAgAyAHSSADIAxLcg0AIAsgAyAHayICaiAJIAcQ1AINACAAIAM2AgggACACNgIEQQEhAgwECyADIARNDQALQQAhAgwCCwJAA0AgAyALaiEIAkAgBCADayIJQQhPBEAgBiAKIAggCRCJASAGKAIAIgJBAUcNBCAGKAIEIQUMAQsgAyAERgRAQQAhAiABIAQ2AgwMBQtBACEFA0AgBSAIai0AACAKRg0BQQAhAiAJIAVBAWoiBUcNAAsMAwsgASADIAVqQQFqIgM2AgwgAyAMTSADIAdPcQ0BIAMgBE0NAAtBACECDAILIAdBBEGoscIAEKsEAAsgASAENgIMCyAAIAI2AgAgBkEQaiQAC/8DAQl/IwBBIGsiBCQAAkACQAJ/AkACQAJAAkACQCAAKAIAIgYEQCAAKAIIIgMgACgCBCIFIAMgBUsbIQlBfyEHIAMhAgNAIAIgCUYNBCAAIAJBAWoiCDYCCCAHQQFqIQcgAiAGaiAIIQItAAAiCEEwa0H/AXFBCkkgCEHhAGtB/wFxQQZJcg0ACyAIQd8ARw0DIAJBAWshAgJAIAMEQCADIAVPBEAgAiAFSw0LDAILIAIgBUsNCiADIAZqLAAAQb9/Sg0BDAoLIAIgBUsNCQsgBEEIaiADIAZqIgMgBxBnIAQoAggNASAAKAIQIgJFDQRB3brCAEECIAIQ1QQNAiADIAcgAhDVBA0CDAULQQAgACgCECIARQ0FGkHtucIAQQEgABDVBAwFCyAAKAIQIQIgBCAEKQMQNwMYIAJFDQIgBEEYaiACEK8ERQ0DC0EBDAMLAkAgACgCECIBRQ0AQcS5wgBBECABENUERQ0AQQEMAwsgAEEAOgAEIABBADYCAEEADAILQQAMAQtBACACLQAUQQRxDQAaIAFB4QBrIgBB/wFxIgFBGk9Bv/fzHSABdkEBcUVyDQEgAEECdEH8B3EiAEHcvcIAaigCACAAQfS8wgBqKAIAIAIQ1QQLIARBIGokAA8LQeC6wgAQrgQACyAGIAUgAyACQfS4wgAQ7AMAC7IEAgJ9BH8jAEEQayEEIAC8IgVBH3YhBgJAAn0gAAJ/AkACQAJAAkAgBUH/////B3EiA0HQ2LqVBE8EQCADQYCAgPwHSwRAIAAPCyAFQQBIIgVFIANBl+TFlQRLcQ0CIAVFDQEgBEMAAICAIACVOAIIIAQqAggaIANBtOO/lgRNDQEMBwsgA0GY5MX1A00EQCADQYCAgMgDTQ0DQQAhAyAADAYLIANBkquU/ANNDQMLIABDO6q4P5QgBkECdEH048IAaioCAJIiAUMAAADPYCEEQf////8HAn8gAYtDAAAAT10EQCABqAwBC0GAgICAeAtBgICAgHggBBsgAUP///9OXhtBACABIAFbGwwDCyAAQwAAAH+UDwsgBCAAQwAAAH+SOAIMIAQqAgwaIABDAACAP5IPCyAGRSAGawsiA7IiAUMAcjG/lJIiACABQ46+vzWUIgKTCyEBIAAgASABIAEgAZQiACAAQxVSNbuUQ4+qKj6SlJMiAJRDAAAAQCAAk5UgApOSQwAAgD+SIQEgA0UNAAJAAkACQCADQf8ATARAIANBgn9ODQMgAUMAAIAMlCEBIANBm35NDQEgA0HmAGohAwwDCyABQwAAAH+UIQEgA0H+AUsNASADQf8AayEDDAILIAFDAACADJQhAUG2fSADIANBtn1NG0HMAWohAwwBCyABQwAAAH+UIQFB/QIgAyADQf0CTxtB/gFrIQMLIAEgA0EXdEGAgID8A2q+lCEBCyABC4gEAQh/IAEoAgQiBQRAIAEoAgAhBANAAkAgA0EBaiECAn8gAiADIARqLQAAIgjAIglBAE4NABoCQAJAAkACQAJAAkACQAJAAkACQAJAIAhB38fCAGotAABBAmsOAwABAgwLQfjAwgAgAiAEaiACIAVPGy0AAEHAAXFBgAFHDQsgA0ECagwKC0H4wMIAIAIgBGogAiAFTxssAAAhByAIQeABayIGRQ0BIAZBDUYNAgwDC0H4wMIAIAIgBGogAiAFTxssAAAhBiAIQfABaw4FBAMDAwUDCyAHQWBxQaB/Rw0IDAYLIAdBn39KDQcMBQsgCUEfakH/AXFBDE8EQCAJQX5xQW5HIAdBQE5yDQcMBQsgB0FATg0GDAQLIAlBD2pB/wFxQQJLIAZBQE5yDQUMAgsgBkHwAGpB/wFxQTBPDQQMAQsgBkGPf0oNAwtB+MDCACAEIANBAmoiAmogAiAFTxstAABBwAFxQYABRw0CQfjAwgAgBCADQQNqIgJqIAIgBU8bLQAAQcABcUGAAUcNAiADQQRqDAELQfjAwgAgBCADQQJqIgJqIAIgBU8bLQAAQcABcUGAAUcNASADQQNqCyIDIgIgBUkNAQsLIAAgAzYCBCAAIAQ2AgAgASAFIAJrNgIEIAEgAiAEajYCACAAIAIgA2s2AgwgACADIARqNgIIDwsgAEEANgIAC6UDAQN/AkACQAJAAkACQAJAAkACQAJAAkAgACgCAA4KAAcHAQIDBAcHBQcLIABBBGoQbQ8LAkACQCAALQAEDgIHAQALIAAoAggiAUH7////B2oiA0ENTSADQQJHcQ0GIAFBhICAgHhKDQUgAUGDgICAeEcNBgwFCyAAKAIIIgFBhICAgHhKIAFBg4CAgHhGcg0EDAULIAAtAAQiAUEDSyABQQNHcg0EDAULAkACQEEDIAAoAgRBB2siASABQQNPG0ECaw4CAQAFCyAAQQRqEKQBDwsgAC0ACEEDRw0DIAAoAgwiACgCACEBDAULIAAtAARBA0cNAgwDCyAALQAEQQNHDQEgACgCCCIAKAIAIQEgAEEEaigCACIDKAIAIgIEQCABIAIRAwALIAMoAgQiAgRAIAEgAiADKAIIEKcECyAAQQxBBBCnBAwBCyABRQ0AIAAoAgwgAUECdEEEEKcECw8LIAAoAggiACgCACEBCyAAQQRqKAIAIgMoAgAiAgRAIAEgAhEDAAsgAygCBCICBEAgASACIAMoAggQpwQLIABBDEEEEKcEC/IDAgJ/AX4jAEFAaiICJAACfwJAAkACQAJAAkBBAyAAKAIAQYCAgIB4cyIDIANBBU8bQQFrDgQBAgMEAAsgASgCHEG0w8EAQRkgASgCICgCDBECAAwECyACIABBBGo2AgQgAiAAQQVqNgIkIAJBAjYCLCACQYzEwQA2AiggAkICNwI0IAJCgICAgOA0IgQgAkEkaq2ENwMQIAIgBCACQQRqrYQ3AwggAiACQQhqNgIwIAEoAhwgASgCICACQShqEEUMAwsgAiAAQQRqNgIkIAJBATYCLCACQfCnwQA2AiggAkIBNwI0IAIgAkEkaq1CgICAgJA4hDcDCCACIAJBCGo2AjAgASgCHCABKAIgIAJBKGoQRQwCCyACIABBDGo2AgAgAiAAQRBqNgIEIAIgADYCJCACQQM2AgwgAkHwxMEANgIIIAJCAzcCFCACIAJBJGqtQoCAgIDwOIQ3AzggAkKAgICAgDYiBCACQQRqrYQ3AzAgAiAEIAKthDcDKCACIAJBKGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AiQgAkECNgIsIAJBxMXBADYCKCACQgE3AjQgAiACQSRqrUKAgICA8DWENwMIIAIgAkEIajYCMCABKAIcIAEoAiAgAkEoahBFCyACQUBrJAALyQMCDX8BfiADIAVBAWsiDSABKAIUIghqIgdLBEBBACABKAIIIgprIQ4gBSABKAIQIg9rIRAgASgCHCELIAEpAwAhFANAAkAgAQJ/AkAgFCACIAdqMQAAiEIBg1AEQCABIAUgCGoiCDYCFCAGDQMMAQsgCiALIAogCiALSRsgBhsiCSAFIAUgCUkbIQwgAiAIaiERIAkhBwJAAkACQANAIAcgDEYEQEEAIAsgBhshDCAKIQcDQCAHIAxNBEAgASAFIAhqIgI2AhQgBkUEQCABQQA2AhwLIAAgAjYCCCAAIAg2AgQgAEEBNgIADwsgB0EBayIHIAVPDQUgByAIaiIJIANPDQMgBCAHai0AACACIAlqLQAARg0ACyABIAggD2oiCDYCFCAQIAZFDQYaDAcLIAcgCGogA08NAiAHIBFqIRIgBCAHaiAHQQFqIQctAAAgEi0AAEYNAAsgCCAOaiAHaiEIIAZFDQMMBQsgCSADQcCvwgAQrQIACyADIAggCWoiACAAIANJGyADQdCvwgAQrQIACyAHIAVBsK/CABCtAgALQQALIgc2AhwgByELCyAIIA1qIgcgA0kNAAsLIAEgAzYCFCAAQQA2AgALsQQCBH8EfiAAQShqIQUCQAJAIAAoAkgiA0UEQCACIQMMAQsgA0EgSw0BIAMgBWogAUEgIANrIgMgAiACIANLGyIEEDsaIABBACAAKAJIIARqIgMgA0EgRiIGGzYCSCACIARrIQMgASAEaiEBIAZFDQAgACAAKQMAIAApAyhCz9bTvtLHq9lCfnxCH4lCh5Wvr5i23puef343AwAgACAAKQMIIAApAzBCz9bTvtLHq9lCfnxCH4lCh5Wvr5i23puef343AwggACAAKQMQIAApAzhCz9bTvtLHq9lCfnxCH4lCh5Wvr5i23puef343AxAgACAAKQMYIAApA0BCz9bTvtLHq9lCfnxCH4lCh5Wvr5i23puef343AxgLIANBIE8EQCAAKQMYIQcgACkDECEIIAApAwghCSAAKQMAIQoDQCABKQAYQs/W077Sx6vZQn4gB3xCH4lCh5Wvr5i23puef34hByABKQAQQs/W077Sx6vZQn4gCHxCH4lCh5Wvr5i23puef34hCCABKQAIQs/W077Sx6vZQn4gCXxCH4lCh5Wvr5i23puef34hCSABKQAAQs/W077Sx6vZQn4gCnxCH4lCh5Wvr5i23puef34hCiABQSBqIQEgA0EgayIDQR9LDQALIAAgBzcDGCAAIAg3AxAgACAJNwMIIAAgCjcDAAsgAwRAIAUgASADEDsaIAAgAzYCSAsgACAAKQNQIAKtfDcDUA8LIANBIEGU9sEAEKoEAAv5AwECfyAAIAFqIQICQAJAIAAoAgQiA0EBcQ0AIANBAnFFDQEgACgCACIDIAFqIQEgACADayIAQdDowgAoAgBGBEAgAigCBEEDcUEDRw0BQcjowgAgATYCACACIAIoAgRBfnE2AgQgACABQQFyNgIEIAIgATYCAAwCCyAAIAMQdQsCQAJAAkAgAigCBCIDQQJxRQRAIAJB1OjCACgCAEYNAiACQdDowgAoAgBGDQMgAiADQXhxIgIQdSAAIAEgAmoiAUEBcjYCBCAAIAFqIAE2AgAgAEHQ6MIAKAIARw0BQcjowgAgATYCAA8LIAIgA0F+cTYCBCAAIAFBAXI2AgQgACABaiABNgIACyABQYACTwRAIAAgARB+DwsgAUH4AXFBuObCAGohAgJ/QcDowgAoAgAiA0EBIAFBA3Z0IgFxRQRAQcDowgAgASADcjYCACACDAELIAIoAggLIQEgAiAANgIIIAEgADYCDCAAIAI2AgwgACABNgIIDwtB1OjCACAANgIAQczowgBBzOjCACgCACABaiIBNgIAIAAgAUEBcjYCBCAAQdDowgAoAgBHDQFByOjCAEEANgIAQdDowgBBADYCAA8LQdDowgAgADYCAEHI6MIAQcjowgAoAgAgAWoiATYCACAAIAFBAXI2AgQgACABaiABNgIACwueAwIHfwJ+IwBBEGsiBCQAAn8CQCAAKAIAIgNFDQAgACgCCCICIAAoAgQiBU8NACACIANqIgEtAABBzABGBEAgACACQQFqIgE2AgggAAJ+AkAgASAFSQRAIAEgA2otAABB3wBGDQELIAEgBSABIAVLGyEHAkACQANAAkAgASAFSQRAIAEgA2otAABB3wBGDQELIAEgB0YNAgJAIAEgA2otAAAiAkEwayIGQf8BcUEKSQ0AIAJB4QBrQf8BcUEaTwRAIAJBwQBrQf8BcUEaTw0EIAJBHWshBgwBCyACQdcAayEGCyAAIAFBAWoiATYCCCAEIAgQmwIgBCkDCEIAUg0CIAQpAwAiCSAGrUL/AYN8IgggCVoNAQwCCwsgACABQQFqNgIIIAhCf1INAQsgACgCECIDBEBBAUHEucIAQRAgAxDVBA0GGgsgAEEAOgAEIABBADYCAEEADAULIAhCAXwMAQsgACACQQJqNgIIQgALELwBDAILIAEtAABBywBHDQAgACACQQFqNgIIIABBABAgDAELIAAQJwsgBEEQaiQAC5QDAQR/AkAgAkEQSQRAIAAhAwwBCwJAIABBACAAa0EDcSIFaiIEIABNDQAgACEDIAUEQCAFIQYDQCADIAE6AAAgA0EBaiEDIAZBAWsiBg0ACwsgBUEBa0EHSQ0AA0AgAyABOgAAIANBB2ogAToAACADQQZqIAE6AAAgA0EFaiABOgAAIANBBGogAToAACADQQNqIAE6AAAgA0ECaiABOgAAIANBAWogAToAACADQQhqIgMgBEcNAAsLIAQgAiAFayICQXxxaiIDIARLBEAgAUH/AXFBgYKECGwhBQNAIAQgBTYCACAEQQRqIgQgA0kNAAsLIAJBA3EhAgsCQCADIAIgA2oiBU8NACACQQdxIgQEQANAIAMgAToAACADQQFqIQMgBEEBayIEDQALCyACQQFrQQdJDQADQCADIAE6AAAgA0EHaiABOgAAIANBBmogAToAACADQQVqIAE6AAAgA0EEaiABOgAAIANBA2ogAToAACADQQJqIAE6AAAgA0EBaiABOgAAIANBCGoiAyAFRw0ACwsgAAudAwIGfwF+QTggAUH/AXEiASABQThPGyECAkAgACgCECIEIAAtABQiAWoiA0EASgRAIAIgA0sNAQJAIARBAEwgASACT3INAANAIARBAWsiBUEDdiEGQcAAIAFBB2oiB0F4cWshAwJAIAVBP00EQCAAIAYgAxCIASAAKAIQIQQgAC0AFCEBDAELAkAgACgCBCIFIAYgB0H4AXFBA3ZqQQdrIgZPBEAgBSAGayIFQQdLDQFBCCAFQcTewQAQqwQACyAGIAVB1N7BABCqBAALIAAgASADaiIBOgAUIAAgBCADQf8BcWsiBDYCECAAIAAoAgAgBmopAAA3AwgLIAFB/wFxIAJPDQEgBEEASg0ACwsgACABIAJrIgE6ABRCfyACrYZCf4UgACkDCCABQT9xrYiDDwsgACAEIAJrNgIQQgAPCyACIANrIQICQCADQf8BcSABSwRAIAAgAxBbIQggACgCECEEDAELIAAgASADayIBOgAUQn8gA62GQn+FIAApAwggAUE/ca2IgyEICyAAIAQgAms2AhAgCCACQT9xrYYLnAMBBX8CQEERQQAgAEGvsARPGyIBIAFBCHIiASAAQQt0IgIgAUECdEH82sIAaigCAEELdEkbIgEg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AEEEaiACKAIEIAIoAggQPUHcoMIAIAAoAgggACgCBCICGyEDQQkgACgCDCACGwshAiADIAIgARDaASAAQRBqJAALZgAjAEEwayIAJABBhOXCAC0AAARAIABBAjYCDCAAQYyhwgA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIAQhDcDICAAIABBIGo2AhAgAEEIakG0ocIAEKQDAAsgAEEwaiQAC2EBAX8jAEEwayICJAAgAiAANgIMIAJBAjYCFCACQZymwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA0hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRSACQTBqJAALYQEBfyMAQTBrIgIkACACIAA2AgwgAkECNgIUIAJB5K7BADYCECACQgE3AhwgAiACQQxqrUKAgICA4DSENwMoIAIgAkEoajYCGCABKAIcIAEoAiAgAkEQahBFIAJBMGokAAthAQF/IwBBMGsiAiQAIAIgADYCDCACQQE2AhQgAkHwp8EANgIQIAJCATcCHCACIAJBDGqtQoCAgICQOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUgAkEwaiQAC18BAn8CQCAAKAIAIgFB7f///wdqIgJBCk0gAkEDR3ENACABRSABQfv///8HaiICQQ1NIAJBAkdxIAFBg4CAgHhHIAFBhICAgHhMcXJyDQAgACgCBCABQQJ0QQQQpwQLC1wBA38gAC0AACIBQQNLIAFBA0dyRQRAIAAoAgQiACgCACEBIABBBGooAgAiAygCACICBEAgASACEQMACyADKAIEIgIEQCABIAIgAygCCBCnBAsgAEEMQQQQpwQLC2sBAn9BqJbAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMAAQIDC0EAIQEMAgsgAUEBaiEBQdStwAAhAgwBCyABQQRqIQFBkK7AACECCyAAIAI2AgQgACABNgIAC2gBA38CQAJAAkACQEEDIAEoAgBB7f///wdqIgQgBEELTxtBAmsOAwABAgMLIAFBBGohAkGcm8AAIQMMAgtB2LPAACEDIAEhAgwBCyABQQRqIQJBjLXAACEDCyAAIAM2AgQgACACNgIAC2sBAn9B1LfAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EE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AX8jAEEQayICJAAgAiAANgIMIAFB8b3AAEEWQYe+wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBic7AAEEbQcC8wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBrODAAEERQb3gwABBBCACQQxqQZzgwAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBweDAAEEWQdfgwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8fDAAEEbQZDfwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8IjBAEERQYGJwQBBBCACQQxqQeCIwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhYnBAEEWQZuJwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhZfBAEEbQdSHwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzwBAX8jAEEQayICJAAgAkGQksIANgIMIAIgADYCCCACQQhqQZSSwgAgAkEMakGUksIAIAFB5J/CABBrAAs4AQF/IwBBEGsiAiQAIAIgADYCDCABQeywwgBBDUH5sMIAQQQgAkEMakHcsMIAEMkBIAJBEGokAAs5AQF/IwBBEGsiAyQAIAMgATYCDCADIAA2AgggA0EIakGswsIAIANBDGpBrMLCACACQeyOwgAQawALMAEBfyMAQRBrIgIkACACQQhqIAAQ8wIgAigCCCABIAIoAgwoAhARAAAgAkEQaiQACzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEMUBDwsgACABEPwBDwsgACABEP0BCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEK0EDwsgACABEIQCDwsgACABEIMCCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEKkDDwsgACABEIQCDwsgACABEIMCCzMBAX8jAEEQayICJAAgAiAAKAIANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAszAQF/IwBBEGsiAiQAIAIgACgCADYCDCABQejUwQBBDCACQQxqQdjUwQAQfyACQRBqJAALLQACQCAAIAEQrANFDQAgAARAQYXlwgAtAAAaIAAgARD1AyIBRQ0BCyABDwsACzcBAX8jAEEgayIBJAAgAUEANgIYIAFBATYCDCABQdzZwgA2AgggAUIENwIQIAFBCGogABCkAwALMwEBfyAAKAIAIgFBhICAgHhMIAFBg4CAgHhHcSABRXJFBEAgACgCBCABQQJ0QQQQpwQLCzABAX8jAEEQayICJAAgAiAANgIMIAFBxJnAAEEMIAJBDGpBtJnAABB/IAJBEGokAAsvACAAQZybwAA2AgQgACABIAFBACABLQAAQQJrQf8BcSIAQQFGGyAAQQJLGzYCAAswAQF/IwBBEGsiAiQAIAIgADYCDCABQdi8wABBDCACQQxqQci8wAAQfyACQRBqJAALLwAgAEGwvsAANgIEIAAgASABQQAgAS0AAEECa0H/AXEiAEEBRhsgAEECSxs2AgALMAEBfyMAQRBrIgIkACACIAA2AgwgAUGo38AAQQwgAkEMakGY38AAEH8gAkEQaiQACy8AIABBgOHAADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACy8AIABBxInBADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACzABAX8jAEEQayICJAAgAiAANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAssAQF/IwBBEGsiACQAIABBCGoiAiABQfyVwgBBCxCmAyACEK4CIABBEGokAAuEAQEDfyMAQSBrIgQkACAEQQhqIgMQ8AECf0GF5cIALQAAGkEkQQQQ9QMiAgRAIAJB5LrAADYCACACIAE2AiAgAiAANgIcIAIgAykCADcCBCACQQxqIANBCGopAgA3AgAgAkEUaiADQRBqKQIANwIAIAIMAQtBBEEkENMEAAsgBEEgaiQACzgBAX9BASEBIAAtAARFBEAgACgCACIBKAIcQY7EwgBBASABKAIgKAIMEQIAIQELIAAgAToABCABC5ABAQN/IwBBIGsiAyQAIANBCGoiAhDwAQJ/QYXlwgAtAAAaQShBBBD1AyIBBEAgAUGcgsAANgIAIAEgAikCADcCBCABIAApAgA3AhwgAUEMaiACQQhqKQIANwIAIAFBFGogAkEQaikCADcCACABQSRqIABBCGooAgA2AgAgAQwBC0EEQSgQ0wQACyADQSBqJAALhgECAn8BfiMAQSBrIgIkACACQQhqIgEQ8AECf0GF5cIALQAAGiAAKQIAIQNBJEEEEPUDIgAEQCAAQci6wAA2AgAgACADNwIcIAAgASkCADcCBCAAQQxqIAFBCGopAgA3AgAgAEEUaiABQRBqKQIANwIAIAAMAQtBBEEkENMEAAsgAkEgaiQAC5kSAhd/EH0QaSIMIAkmASMAQfAAayILJAAgCyAMNgIsIAsgCDYCKCALIAc4AiQgCyAGOAIgIAsgBTgCHCALIAQ4AhggCyADOAIUIAsgAjgCECALIAE4AgwgCyAAOAIIIAsgCkEARzoAMyALQQA2AjwgC0KAgICAwAA3AjQgCyALQSRqNgJsIAsgC0EgajYCaCALIAtBHGo2AmQgCyALQRhqNgJgIAsgC0EUajYCXCALIAtBEGo2AlggCyALQQxqNgJUIAsgC0EIajYCUCALIAtBNGo2AkwgCyALQTNqNgJIIAsgC0EsajYCRCALIAtBKGo2AkAgC0FAayIeIQgjAEEgayIMJAACQAJAAkBBAEGIh8AAKAIAEQQAIhIEQCASKAIADQIgCCgCLCEUIAgoAighFSAIKAIkIRYgCCgCICEXIAgoAhwhGCAIKAIYIRkgCCgCFCEaIAgoAhAhGyAIKAIMIQ8gCCgCCCEfIAgoAgQhICAIKAIAIRwgEkF/NgIAIBIgHCgCACINBH8gEkEMaigCACEdIBJBCGooAgAhCgNAIAwgICATQQJ0IBNBgIAEIA0gE2siCCAIQYCABE8bIghqIhNBAnQQqQQ2AgQgCEECdCINIB1LDQMgDEEEaiAKIA0QzAICQCAfLQAARQRAIAwgGSoCADgCECAMIBoqAgA4AgwgDCAbKgIAOAIIIAwgFioCADgCHCAMIBcqAgA4AhggDCAYKgIAOAIUIAohCCAVKgIAISQgFCoCACEjIwBBEGsiECQAIA0EQCAMQRRqIg4qAgAiACAAlCAOKgIEIgEgAZSSIA4qAggiAiAClJIhAyAMQQhqIg4qAgghIiAOKgIEISUgDioCACEmA0BBBCANIA1BBE8bIQ4CQCAILQADs0MAAH9DlUPNzMw9XQ0AIBBBBGogCCAOEEEgDUEDSwRAIAAgJiAQKgIEkyIElCABICUgECoCCJMiBZSSIAIgIiAQKgIMkyIGlJIiByAHlCADIAQgBJQgBSAFlJIgBiAGlJIgCCgCDCIREKUDIBFBCHYQpQOSIBFBEHYQpQOSQwAAQECVIgQgBJSTlJMiBEMAAAAAXQ0BIAeMIASRkyADlSIEICRgRSAEICNfRXINASAPKAIIIhEgDygCAEYEQCAPQdyMwAAQtAELIA8oAgQgEUECdGogBDgCACAPIBFBAWo2AggMAQtBAyAOQZyNwAAQrQIACyAIIA5BAnRqIQggDSAOayINDQALCwwBCyAMIBkqAgA4AhAgDCAaKgIAOAIMIAwgGyoCADgCCCAMIBYqAgA4AhwgDCAXKgIAOAIYIAwgGCoCADgCFCAKIQggFSoCACEtIBQqAgAhLiMAQRBrIhAkACANBEAgDEEUaiIOKgIAISUgDioCBCEmIA4qAgghKyAMQQhqIg4qAgghLyAOKgIEITAgDioCACExA0BBBCANIA1BBE8bIQ4CQCAILQADs0MAAH9DlUPNzMw9XQ0AIBBBBGogCCAOEEECQCANQQNLBEAgECoCDCEoIBAqAgghKSAQKgIEISogCCgCDCIREKUDIQMgEUEIdhClAyEEIBFBEHYQpQMhBSArIAgoAggiIUEYdbJDAAD+QpUiACAmIBFBGHWyQwAA/kKVIgGUICsgAJSTIiOUICFBEHbAskMAAP5ClSICICsgApQgJSABlJMiIpSTICUgAJQgJiAClJMiJ0MAAIA/IAIgApSTIAAgAJSTIAEgAZSTQwAAAAAQ1QORIgaUkiIHIAeSkiEHICYgAiAnlCABICOUkyAiIAaUkiIkICSSkiEkICUgASAilCAAICeUkyAjIAaUkiIjICOSkiEjIC8gKJMiIiAAIDAgKZMiJyABlCAiIACUkyIolCACICIgApQgMSAqkyIpIAGUkyIqlJMgKSAAlCAnIAKUkyIsIAaUkiIiICKSkiEiICcgAiAslCABICiUkyAqIAaUkiICIAKSkiECICkgASAqlCAAICyUkyAoIAaUkiIAIACSkiEAIAUgAyAEENUDIAUQ1QNDCtcjPJQiAV1FBEAgASAEXkUEQCABIANeRQRAQwAAgD8gBZUiBSAilCIBIAUgB5QiBZRDAACAPyADlSIDIACUIgAgAyAjlCIDlEMAAIA/IASVIgQgApQiAiAEICSUIgSUkpIiBiAGlCAFIAWUIAMgA5QgBCAElJKSIgMgASABlCAAIACUIAIgApSSkkMAAIC/kpSTIgBDAAAAAF0NBSAGjCAAkZMgA5UhAAwECyAji0O9N4Y1XQ0EIAIgJCAAjCAjlSIAlJIgBJUiASABlCAiIAcgAJSSIAWVIgEgAZSSQwAAgD9eRQ0DDAQLICSLQ703hjVdDQMgACAjIAKMICSVIgCUkiADlSIBIAGUICIgByAAlJIgBZUiASABlJJDAACAP14NAwwCCyAHi0O9N4Y1XQ0CIAAgIyAijCAHlSIAlJIgA5UiASABlCACICQgAJSSIASVIgEgAZSSQwAAgD9eRQ0BDAILQQMgDkGcjcAAEK0CAAsgACAtYEUgACAuX0VyDQAgDygCCCIRIA8oAgBGBEAgD0HsjMAAELQBCyAPKAIEIBFBAnRqIAA4AgAgDyARQQFqNgIICyAIIA5BAnRqIQggDSAOayINDQALCwsgEEEQaiQAIAwoAgQiCEGEAU8EQCAIEMYBCyATIBwoAgAiDUkNAAsgEigCAEEBagVBAAs2AgAgDEEgaiQADAMLENICAAsgDSAdQciLwAAQqwQACxDTAgALIAsoAjwQGCEJEGkiCCAJJgEgCyAINgJAIAsoAjghECALKAI8IQwjAEEgayIKJAAgCiAeKAIAIhIlARASIg02AgAgCiAMNgIEAkAgDCANRgRAEO0DIg0Q3AMiDyUBIBAgDBAQIQkQaSIMIAkmASANQYQBTwRAIA0QxgELIA9BhAFPBEAgDxDGAQsgEiUBIAwlAUEAEBEgDEGEAU8EQCAMEMYBCyAKQSBqJAAMAQsgCkEANgIIIAogCkEEaiAKQQhqEIwDAAsgCygCNCIKBEAgCygCOCAKQQJ0QQQQpwQLIAsoAiwiCkGEAU8EQCAKEMYBCyALQfAAaiQAIAglASAIEMYBC/wBAgJ/AX4jAEEQayICJAAgAkEBOwEMIAIgATYCCCACIAA2AgQjAEEQayIBJAAgAkEEaiIAKQIAIQQgASAANgIMIAEgBDcCBCMAQRBrIgAkACABQQRqIgEoAgAiAigCDCEDAkACQAJAAkAgAigCBA4CAAECCyADDQFBASECQQAhAwwCCyADDQAgAigCACICKAIEIQMgAigCACECDAELIABBgICAgHg2AgAgACABNgIMIABBhKLCACABKAIEIAEoAggiAC0ACCAALQAJEMEBAAsgACADNgIEIAAgAjYCACAAQeihwgAgASgCBCABKAIIIgAtAAggAC0ACRDBAQALKgAgAEH/AXFFBEBDAAAAAA8LIABBAWtB/wFxs0NFIpE9lEMAABDBkhBSCy0AIAEoAhwgAiADIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAsyAQF/IAEoAhxBvMHCAEEBIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAshAAJAIAEgAxCsAwRAIAAgASADIAIQ3wMiAA0BCwALIAALIgEBfyAAKAIAIgAgAEEfdSICcyACayAAQX9zQR92IAEQbAslACAARQRAQfiPwgBBMhDIBAALIAAgAiADIAQgBSABKAIQEQsACygAIAEgACgCAC0AAEECdCIAQeC8wgBqKAIAIABBzLzCAGooAgAQ5QMLGQEBf0GAgICAeCABayAATyACIAFpQQFGGwslACABIAAtAABBAnQiAEH8tcAAaigCACAAQey1wABqKAIAEOUDCyUAIABBnJvAADYCBCAAIAFBBGpBACABKAIAQYKAgIB4Rhs2AgALIQAgAEHwosAANgIEIAAgAUEBakEAIAEtAABBAkYbNgIACyUAIAEgAC0AAEECdCIAQZDZwABqKAIAIABBgNnAAGooAgAQ5QMLJQAgAEGwvsAANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAshACAAQYTGwAA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgASAALQAAQQJ0IgBB+PvAAGooAgAgAEHo+8AAaigCABDlAwslACAAQYDhwAA2AgQgACABQQRqQQAgASgCAEGCgICAeEYbNgIACyEAIABBsOjAADYCBCAAIAFBAWpBACABLQAAQQJGGzYCAAshACAAQbSOwQA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgAEHEicEANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAslACABIAAtAABBAnQiAEGMosEAaigCACAAQfyhwQBqKAIAEOUDCyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCABKAIQEQcACyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCAB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BBD1AyILBEACQEGF5cIALQAAGkGACEEEEPUDIghFDQJBheXCAC0AABpBgAhBBBD1AyIERQ0AQYXlwgAtAAAaQYAIQQQQ9QMiDkUNAkGF5cIALQAAGkGACEEEEPUDIgxFDQBBheXCAC0AABpBgAhBBBD1AyISRQ0CIANCADcDqAIgA0EBNgLoASADQQA6AOQBIANBADoA4gEgA0EAOgDgASADQTQ7AdwBIANBADYC2AEgAyASNgLUASADQoCAgICAIDcCzAEgAyAMNgLIASADQoCAgICAIDcDwAEgA0KAgICAwAA3A7gBIANBIzsBtAEgA0EANgKwASADIA42AqwBIANCgICAgIAgNwKkASADIAQ2AqABIANCgICAgIAgNwOYASADQoCAgIDAADcDkAEgA0EfOwGMASADQQA2AogBIAMgCDYChAEgA0KAgICAgCA3AnwgAyALNgJ4IANCgICAgIAgNwNwIANCgICAgMAANwNoIANBwAJqQgA3AwAgA0G4AmpCADcDACADQbACakIANwMAIANB/AFqQQA2AgAgA0H0AWpCADcCACADQgA3AuwBIANC1uuC7ur9ifXgADcDgAIgA0LP1tO+0ser2UI3A4gCIANCADcDkAIgA0L56tDQ58mh5OEANwOYAiADQgA3A6ACIANBADYCyAIgA0IANwPQAiADIAY2AtgCIANBADYC5AIgA0EINgKUAyADQoCAgIAQNwLcAiADQoGAgIDAADcCjAMgA0EANgKIAyADQoCAgIAQNwPoAiADQgA3A/ACIANCBDcD+AIgA0KAgICAEDcDgAMMAwsLQQRBgAhBzIDCABDXAwALQQRBgAhB3IDCABDXAwALIAdBADYCqAcgB0EANgKwByAHQQA6ANwKIAdBADYC2AogByAjNwPQCiAHKQOoByEgIAcpA7AHISMgB0HoA2oiBiADQagDEDsaIAdBCGoQSSAHICM3AyggByAgNwMgIAcgITcDGCAHIA02AgwgByAiPgIQIAcgIkIgiD4CFCAHIAU2AgggB0EwaiAGQagDEDshCCAFQQFxBEBBDCEQIAcoAtgDIhJFDQEgBygC3AMhFwNAIBJB1AFrIQQgEkEEaiEGIBIvAd4WIgNBAnQhC0F/IQUCQAJAA0AgC0UEQCADIQUMAgsgBigCACEOIAVBAWohBSAEQYQCaiEEIAtBBGsh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EwAgAEHMuMAANgIEIAAgATYCAAsTACAAQYi5wAA2AgQgACABNgIACxMAIABBxLnAADYCBCAAIAE2AgALEwAgAEGAusAANgIEIAAgATYCAAsTACAAQbC+wAA2AgQgACABNgIACxMAIABBKDYCBCAAQYjbwAA2AgALEwAgAEGA4cAANgIEIAAgATYCAAshACAAQqTFo/yfjvDjADcDCCAAQqqooLmusOaw6QA3AwALEAAgACgCACAAKAIEIAEQMAsRACAAKAIAIAAoAgQgARDVBAsiACAAQsuH6/rgqLu20AA3AwggAELEr9zF2tKv9bh/NwMACxMAIABBKDYCBCAAQcCFwQA2AgALEwAgAEHEicEANgIEIAAgATYCAAsgACAAQrz8k7Ko16DsTDcDCCAAQuuYqJm2gbKefzcDAAshACAAQriynYTMrpfUQjcDCCAAQu/Dv6KOjcrEoH83AwALIAAgAEKcnaLxgrvwoHU3AwggAELRqsqvpcqt8kA3AwALIQAgAEL7wqCWlfy/yHo3AwggAELmsfLlkYe/ybF/NwMACyIAIABC9auQ77TsvKaWfzcDCCAAQrHh7P30uYbLwgA3AwALIAAgAELNnq77nqC2sEE3AwggAELxps+Y0aSn/gE3AwALIAAgAEK3v8ue+N2SoEM3AwggAEKvuaX0x5vV+zA3AwALIQAgAEKWl7rs79nZo3Q3AwggAEKH+OXLhuPSwtQANwMACyEAIABC/O6Qyq7osdU1NwMIIABC2OvVj+a1zN2OfzcDAAshACAAQrzprN2Y1v7ui383AwggAEKk3Nqt0/nNwEU3AwALIQAgAELl6obQ6cP/7Xk3AwggAEL30OLk1cPQ6ad/NwMACyEAIABC5sHsgPKk3YtlNwMIIABChu7u8+efmIeefzcDAAshACAAQs7Is8mT6a+2pX83AwggAELt66KMv7HLkg83AwALIgAgAEKcrtGn56WAwMIANwMIIABC16rLiaf+wYLHADcDAAsiACAAQt3+weC9o+rogn83AwggAEKX2/aYrfP7zY5/NwMACyEAIABCgsDc4LCv07mnfzcDCCAAQpbk17fDtcOKAzcDAAshACAAQrvV0cb1jfDEkH83AwggAELVi9bpuKS4kXk3AwALIQAgAEKynOer2rGju98ANwMIIABCvfif/8L+hsNVNwMACyIAIABC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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAAVwAAAFYAAABgERAAWAAAAFkAAABaAAAAWwAAAFwAAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAA/wAAAFYAAAD0IhAAAAEAAFkAAAABAQAAWwAAAAIBAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNzaW5nQnl0ZUZvclJsZU9mVGFibGVNaXNzaW5nQnl0ZUZvclJsZU1sVGFibGUAAAADAQAADAAAAAQAAABfAAAAAwEAAAwAAAAEAAAABAEAAF8AAAD8IxAABQEAAGIAAADNAAAAYwAAAM4AAAAAAAAAEAAAAAgAAABkAAAAAAAAABAAAAAIAAAABgEAAGQAAAA4JBAABwEAAGcAAADKAAAAaAAAAMsAAAAIAQAAGAAAAAQAAABqAAAACAEAABgAAAAEAAAACQEAAGoAAAB0JBAACgEAAG0AAADNAAAAbgAAAM4AAAALAQAACAAAAAQAAABwAAAACwEAAAgAAAAEAAAADAEAAHAAAACwJBAADQEAAHMAAADNAAAAdAAAAM4AAAAOAQAAGAAAAAQAAAB2AAAADgEAABgAAAAEAAAADwEAAHYAAADsJBAAEAEAAHkAAADNAAAAegAAAM4AAAAAAAAADAAAAAQAAAB7AAAAAAAAAAwAAAAEAAAAEQEAAHsAAAAoJRAAEgEAAH4AAADNAAAAfwAAAM4AAAATAQAAFAAAAAQAAACBAAAAEwEAABQAAAAEAAAAFAEAAIEAAABkJRAAFQEAAIQAAADNAAAAhQAAAM4AAABSZWFkRXJyb3JGb3VuZFJlc2VydmVkQmxvY2sAAAAAAAQAAAAEAAAAhgAAAEJsb2NrVHlwZUVycm9yAAAAAAAABAAAAAQAAACHAAAAQmxvY2tTaXplRXJyb3JCbG9ja0NvbnRlbnRSZWFkRXJyb3JNYWxmb3JtZWRTZWN0aW9uSGVhZGVyZXhwZWN0ZWRfbGVucmVtYWluaW5nX2J5dGVzAAAAAAQAAAAEAAAAiAAAAERlY29tcHJlc3NMaXRlcmFsc0Vycm9yAAAAAAAEAAAABAAAAIkAAABMaXRlcmFsc1NlY3Rpb25QYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAigAAAFNlcXVlbmNlc0hlYWRlclBhcnNlRXJyb3IAAAAAAAAABAAAAAQAAACLAAAARGVjb2RlU2VxdWVuY2VFcnJvcgAAAAAABAAAAAQAAACMAAAARXhlY3V0ZVNlcXVlbmNlc0Vycm9ySW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnTWFnaWNOdW1iZXJSZWFkRXJyb3JCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvclNraXBGcmFtZW1hZ2ljX251bWJlcmxlbmd0aAAAAAAAAAQAAAAEAAAAjQAAAEJhZE1hZ2ljTnVtAAAAAAAEAAAABAAAAI4AAABIdWZmbWFuVGFibGVFcnJvcgAAAAAAAAAEAAAABAAAAI8AAABEZWNvZGVidWZmZXJFcnJvck5vdEVub3VnaEJ5dGVzRm9yU2VxdWVuY2V3YW50ZWQAAAAAAQAAAAEAAACQAAAAAAAAAAEAAAABAAAAFgEAAJAAAABYKBAAAAEAAJIAAAABAQAAWwAAAAIBAAAAAAAABAAAAAQAAACTAAAAAAAAAAQAAAAEAAAAFwEAAJMAAACUKBAAzAAAAJUAAADNAAAASgAAAM4AAAAYAQAAFAAAAAQAAACXAAAAGAEAABQAAAAEAAAAGQEAAJcAAADQKBAAGgEAAJoAAADNAAAAmwAAAM4AAAAAAAAADAAAAAQAAACcAAAAAAAAAAwAAAAEAAAAGwEAAJwAAAAMKRAAHAEAAJ8AAADNAAAAoAAAAM4AAAAAAAAACAAAAAQAAAChAAAAAAAAAAgAAAAEAAAAHQEAAKEAAABIKRAAzAAAAKMAAADNAAAASgAAAM4AAAAeAQAAFAAAAAQAAAClAAAAHgEAABQAAAAEAAAAHwEAAKUAAACEKRAAIAEAAKgAAADNAAAAqQAAAM4AAAAAAAAADAAAAAQAAACqAAAAAAAAAAwAAAAEAAAAIQEAAKoAAADAKRAAIgEAAK0AAADNAAAArgAAAM4AAABEZWNvZGVyU3RhdGVJc0ZhaWxlZEV4cGVjdGVkSGVhZGVyT2ZQcmV2aW91c0Jsb2NrAAAAAAAAAAEAAAABAAAAIwEAAHN0ZXBzb3VyY2UAAAAAAAAEAAAABAAAALAAAABEZWNvbXByZXNzQmxvY2tFcnJvck1pc3NpbmdDb21wcmVzc2VkU2l6ZU1pc3NpbmdOdW1TdHJlYW1zAAAAAAAABAAAAAQAAACxAAAASHVmZm1hbkRlY29kZXJFcnJvclVuaW5pdGlhbGl6ZWRIdWZmbWFuVGFibGVNaXNzaW5nQnl0ZXNGb3JKdW1wSGVhZGVyTWlzc2luZ0J5dGVzRm9yTGl0ZXJhbHNuZWVkZWQAAAAAAAAEAAAABAAAACQBAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAJQEAABQAAAAEAAAAtAAAACUBAAAUAAAABAAAACYBAAC0AAAAXCsQACcBAAC3AAAAzQAAALgAAADOAAAAAAAAAAwAAAAEAAAAuQAAAAAAAAAMAAAABAAAACgBAAC5AAAAmCsQAMwAAAC7AAAAzQAAAEoAAADOAAAAKQEAABgAAAAEAAAAvQAAACkBAAAYAAAABAAAACoBAAC9AAAA1CsQACsBAADAAAAAzQAAAMEAAADOAAAAAAAAAAwAAAAEAAAAwgAAAAAAAAAMAAAABAAAACwBAADCAAAAECwQAC0BAADFAAAAzQAAAMYAAADOAAAASWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzbmVlZF9hdF9sZWFzdAMAAAADAAAACgAAAAgAAAA0GxAANxsQADobEABEGxAAbWlkID4gbGVuAAAAoCwQAAkAAABmYWlsZWQgdG8gZmlsbCB3aG9sZSBidWZmZXIAtCwQABsAAAAlAAAAAAAAAAIAAADQLBAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9zdGQvc3JjL2lvL2N1cnNvci5ycwAAAOgsEABtAAAA7AAAAA8AAAAAAAAABAAAAAQAAABVAAAAAAAAAAQAAAAEAAAAQAAAAGRlc2NyaXB0aW9uKCkgaXMgZGVwcmVjYXRlZDsgdXNlIERpc3BsYXkvAQAAIAAAAAgAAAAtAAAALwEAACAAAAAIAAAAMAEAAC0AAACwLRAAMQEAADAAAAAyAQAAMgAAADMBAABpbnZhbGlkIGxlbmd0aCAsIGV4cGVjdGVkIAAA7C0QAA8AAAD7LRAACwAAAAAAAAAEAAAABAAAAFIAAABJbwAAAAAAAAQAAAAEAAAANAEAAEludmFsaWRVdGY4RW5jb2RpbmdJbnZhbGlkQm9vbEVuY29kaW5nSW52YWxpZENoYXJFbmNvZGluZwAAAAAAAAAEAAAABAAAAEEAAABJbnZhbGlkVGFnRW5jb2RpbmdEZXNlcmlhbGl6ZUFueU5vdFN1cHBvcnRlZFNpemVMaW1pdFNlcXVlbmNlTXVzdEhhdmVMZW5ndGgAAAAAAAQAAAAEAAAANQEAAEN1c3RvbU5vbmVTb21lUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVkAAAAAAAABAAAAAQAAAA2AQAAVG9vTWFueUJpdHNudW1fcmVxdWVzdGVkX2JpdHNsaW1pdE5vdEVub3VnaFJlbWFpbmluZ0JpdHNyZXF1ZXN0ZWRyZW1haW5pbmdBY2NMb2dJc1plcm8AAAAAAAABAAAAAQAAADcBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAA4AQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAAA5AQAARwAAAHAwEAA6AQAASQAAADsBAABKAAAAPAEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABNAAAAUmVhZEZyYW1lSGVhZGVyRXJyb3IAAAAABAAAAAQAAABOAAAARnJhbWVIZWFkZXJFcnJvcldpbmRvd1NpemVUb29CaWcAAAAABAAAAAQAAABPAAAARGljdGlvbmFyeURlY29kZUVycm9yAAAAAAAAAAQAAAAEAAAAUAAAAEZhaWxlZFRvUmVhZEJsb2NrSGVhZGVyAAAAAAAEAAAABAAAAFEAAABGYWlsZWRUb1JlYWRCbG9ja0JvZHlGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzRXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzVG9vTWFueVdlaWdodHNNaXNzaW5nV2VpZ2h0c0xlZnRvdmVySXNOb3RBUG93ZXJPZjJOb3RFbm91Z2hCeXRlc1RvRGVjb21wcmVzc1dlaWdodHNoYXZlRlNFVGFibGVVc2VkVG9vTWFueUJ5dGVzdXNlZGF2YWlsYWJsZV9ieXRlc05vdEVub3VnaEJ5dGVzSW5Tb3VyY2VXZWlnaHRCaWdnZXJUaGFuTWF4TnVtQml0c01heEJpdHNUb29IaWdoAAAAAAAAAAEAAAABAAAAVgAAAAAAAAABAAAAAQAAAD0BAABWAAAAIDQQAD4BAABZAAAAPwEAAFsAAABAAQAAVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZVplcm9PZmZzZXROb3RFbm91Z2hCeXRlc0Zvck51bVNlcXVlbmNlcwAAAAAABAAAAAQAAABdAAAARXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlAAAAQQEAAAwAAAAEAAAAXwAAAEEBAAAMAAAABAAAAEIBAABfAAAAKDUQAEMBAABiAAAAOwEAAGMAAAA8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YWxzbmVlZGVkAAAAAAAABAAAAAQAAABjAQAAQml0c3RyZWFtUmVhZE1pc21hdGNocmVhZF90aWxEZWNvZGVkTGl0ZXJhbENvdW50TWlzbWF0Y2hkZWNvZGVkAGQBAAAUAAAABAAAALQAAABkAQAAFAAAAAQAAABlAQAAtAAAAMQ8EABmAQAAtwAAADsBAAC4AAAAPAEAAAAAAAAMAAAABAAAALkAAAAAAAAADAAAAAQAAABnAQAAuQAAAAA9EAA6AQAAuwAAADsBAABKAAAAPAEAAGgBAAAYAAAABAAAAL0AAABoAQAAGAAAAAQAAABpAQAAvQAAADw9EABqAQAAwAAAADsBAADBAAAAPAEAAAAAAAAMAAAABAAAAMIAAAAAAAAADAAAAAQAAABrAQAAwgAAAHg9EABsAQAAxQAAADsBAADGAAAAPAEAAElsbGVnYWxMaXRlcmFsU2VjdGlvblR5cGVOb3RFbm91Z2hCeXRlc25lZWRfYXRfbGVhc3QDAAAAAwAAAAoAAAAIAAAA8i4QAPUuEAD4LhAAAi8QAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAAAIPhAAbQAAACoCAAARAAAAYW4gYXJyYXkgb2YgbGVuZ3RoIDQAAAAAAAAAAAEAAABtAQBBtP3AAAv1KAEAAABtAQAAAAAAAAgAAAAEAAAAbgEAAHN0cnVjdCBXbGcwSGVhZGVyIHdpdGggNyBlbGVtZW50cwAAAMw+EAAhAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogaW52YWxpZCBPbmNlIHN0YXRl+D4QADwAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvb25jZS9ub190aHJlYWRzLnJzPD8QAHwAAAA1AAAAEgAAAGZhaWxlZCB0byBmaWxsIHdob2xlIGJ1ZmZlcgDIPxAAGwAAACUAAAACAAAA5D8QAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2RpbmcvYmxvY2tfZGVjb2Rlci5yc0J1ZyBpbiB0aGlzIGxpYnJhcnkA+D8QAGwAAACYAAAAFgAAAFdyb25nIG51bWJlciBvZiBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiAAAIhAEAAaAAAAokAQABQAAAD4PxAAbAAAAK0AAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uID09IHVwcGVyX2xpbWl0X2Zvcl9saXRlcmFscyBhcyB1MzIA+D8QAGwAAACzAAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHUzMjo6ZnJvbShieXRlc19pbl9saXRlcmFsc19oZWFkZXIpICsgYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uICsKICAgICAgICAgICAgdTMyOjpmcm9tKGJ5dGVzX2luX3NlcXVlbmNlX2hlYWRlcikgKyByYXcubGVuKCkgYXMgdTMyID09CiAgICBoZWFkZXIuY29udGVudF9zaXplAAD4PxAAbAAAAMEAAAAJAAAA+D8QAGwAAAC6AAAAFwAAAPg/EABsAAAAiwAAABcAAABIb3cgZGlkIHlvdSBldmVuIGdldCB0aGlzLiBUaGUgZGVjb2RlciBzaG91bGQgZXJyb3Igb3V0IGlmIGl0IGRldGVjdHMgYSByZXNlcnZlZC10eXBlIGJsb2NrAPg/EABsAAAAcAAAABEAAABmYWlsZWQgdG8gZmlsbCB3aG9sZSBidWZmZXIAkEIQABsAAAAlAAAAAgAAAKxCEABkZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBEaXNwbGF5AAAAAAQAAAAEAAAAbwEAAAAAAAAEAAAABAAAAHABAABVdGY4RXJyb3J2YWxpZF91cF90b2Vycm9yX2xlblJhd1JMRUNvbXByZXNzZWRSZXNlcnZlZAAAAAAAAAAEAAAABAAAAEAAAABUb29NYW55Qml0c251bV9yZXF1ZXN0ZWRfYml0c2xpbWl0AAAAAAAABAAAAAQAAABBAAAATm90RW5vdWdoUmVtYWluaW5nQml0c3JlcXVlc3RlZHJlbWFpbmluZ0FjY0xvZ0lzWmVybwAAAAABAAAAAQAAAHEBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAByAQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAABzAQAARwAAALREEABKAAAASQAAAHQBAABKAAAAdQEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzAAAAAAAAAAQAAAAEAAAAVQAAAEV4dHJhUGFkZGluZ3NraXBwZWRfYml0c1Rvb01hbnlXZWlnaHRzTWlzc2luZ1dlaWdodHNMZWZ0b3ZlcklzTm90QVBvd2VyT2YyTm90RW5vdWdoQnl0ZXNUb0RlY29tcHJlc3NXZWlnaHRzaGF2ZUZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaAAAAAABAAAAAQAAAFYAAAAAAAAAAQAAAAEAAAB2AQAAVgAAACRHEABbAAAAWQAAAHcBAABbAAAAeAEAAFVuc3VwcG9ydGVkT2Zmc2V0b2Zmc2V0X2NvZGVaZXJvT2Zmc2V0Tm90RW5vdWdoQnl0ZXNGb3JOdW1TZXF1ZW5jZXMAAAAAAAQAAAAEAAAAXQAAAEV4dHJhQml0c2JpdHNfcmVtYWluaW5nTWlzc2luZ0NvbXByZXNzaW9uTW9kZU1pc3NpbmdCeXRlRm9yUmxlTGxUYWJsZU1pc3NpbmdCeXRlRm9yUmxlT2ZUYWJsZU1pc3NpbmdCeXRlRm9yUmxlTWxUYWJsZQAAAHkBAAAMAAAABAAAAF8AAAB5AQAADAAAAAQAAAB6AQAAXwAAACxIEAB7AQAAYgAAAHQBAABjAAAAdQEAAAAAAAAQAAAACAAAAGQAAAAAAAAAEAAAAAgAAAB8AQAAZAAAAGhIEAB9AQAAZwAAAH4BAABoAAAAfwEAAIABAAAYAAAABAAAAGoAAACAAQAAGAAAAAQAAACBAQAAagAAAKRIEACCAQAAbQAAAHQBAABuAAAAdQEAAIMBAAAIAAAABAAAAHAAAACDAQAACAAAAAQAAACEAQAAcAAAAOBIEACFAQAAcwAAAHQBAAB0AAAAdQEAAIYBAAAYAAAABAAAAHYAAACGAQAAGAAAAAQAAACHAQAAdgAAABxJEACIAQAAeQAAAHQBAAB6AAAAdQEAAIkBAAAIAAAABAAAACUAAACJAQAACAAAAAQAAAAmAAAAJQAAAFhJEAAnAAAAKAAAACkAAAAqAAAAdQEAAAAAAAAMAAAABAAAAHsAAAAAAAAADAAAAAQAAACKAQAAewAAAJRJEACLAQAAfgAAAHQBAAB/AAAAdQEAAIwBAAAUAAAABAAAAIEAAACMAQAAFAAAAAQAAACNAQAAgQAAANBJEACOAQAAhAAAAHQBAACFAAAAdQEAAAAAAAAEAAAABAAAAFIAAABSZWFkRXJyb3JGb3VuZFJlc2VydmVkQmxvY2sAAAAAAAQAAAAEAAAAhgAAAEJsb2NrVHlwZUVycm9yAAAAAAAABAAAAAQAAACHAAAAQmxvY2tTaXplRXJyb3JCbG9ja0NvbnRlbnRSZWFkRXJyb3JNYWxmb3JtZWRTZWN0aW9uSGVhZGVyZXhwZWN0ZWRfbGVucmVtYWluaW5nX2J5dGVzAAAAAAQAAAAEAAAAiAAAAERlY29tcHJlc3NMaXRlcmFsc0Vycm9yAAAAAAAEAAAABAAAAIkAAABMaXRlcmFsc1NlY3Rpb25QYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAigAAAFNlcXVlbmNlc0hlYWRlclBhcnNlRXJyb3IAAAAAAAAABAAAAAQAAACLAAAARGVjb2RlU2VxdWVuY2VFcnJvcgAAAAAABAAAAAQAAACMAAAARXhlY3V0ZVNlcXVlbmNlc0Vycm9ySW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnTWFnaWNOdW1iZXJSZWFkRXJyb3JCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvclNraXBGcmFtZW1hZ2ljX251bWJlcmxlbmd0aAAAAAAAAAQAAAAEAAAAjQAAAEJhZE1hZ2ljTnVtAAAAAAAEAAAABAAAAI4AAABIdWZmbWFuVGFibGVFcnJvcgAAAAAAAAAEAAAABAAAAI8AAABEZWNvZGVidWZmZXJFcnJvck5vdEVub3VnaEJ5dGVzRm9yU2VxdWVuY2V3YW50ZWQAAAAAAQAAAAEAAACQAAAAAAAAAAEAAAABAAAAjwEAAJAAAADUTBAAWwAAAJIAAAB3AQAAWwAAAHgBAAAAAAAABAAAAAQAAACTAAAAAAAAAAQAAAAEAAAAkAEAAJMAAAAQTRAASgAAAJUAAAB0AQAASgAAAHUBAACRAQAAFAAAAAQAAACXAAAAkQEAABQAAAAEAAAAkgEAAJcAAABMTRAAkwEAAJoAAAB0AQAAmwAAAHUBAAAAAAAADAAAAAQAAACcAAAAAAAAAAwAAAAEAAAAlAEAAJwAAACITRAAlQEAAJ8AAAB0AQAAoAAAAHUBAAAAAAAACAAAAAQAAAChAAAAAAAAAAgAAAAEAAAAlgEAAKEAAADETRAASgAAAKMAAAB0AQAASgAAAHUBAACXAQAAFAAAAAQAAAClAAAAlwEAABQAAAAEAAAAmAEAAKUAAAAAThAAmQEAAKgAAAB0AQAAqQAAAHUBAAAAAAAADAAAAAQAAACqAAAAAAAAAAwAAAAEAAAAmgEAAKoAAAA8ThAAmwEAAK0AAAB0AQAArgAAAHUBAABEZWNvZGVyU3RhdGVJc0ZhaWxlZEV4cGVjdGVkSGVhZGVyT2ZQcmV2aW91c0Jsb2NrAAAAAAAAAAEAAAABAAAAnAEAAHN0ZXBzb3VyY2UAAAAAAAAEAAAABAAAALAAAABEZWNvbXByZXNzQmxvY2tFcnJvck1pc3NpbmdDb21wcmVzc2VkU2l6ZU1pc3NpbmdOdW1TdHJlYW1zAAAAAAAABAAAAAQAAACxAAAASHVmZm1hbkRlY29kZXJFcnJvclVuaW5pdGlhbGl6ZWRIdWZmbWFuVGFibGVNaXNzaW5nQnl0ZXNGb3JKdW1wSGVhZGVyTWlzc2luZ0J5dGVzRm9yTGl0ZXJhbHNuZWVkZWQAAAAAAAAEAAAABAAAAJ0BAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAngEAABQAAAAEAAAAtAAAAJ4BAAAUAAAABAAAAJ8BAAC0AAAA2E8QAKABAAC3AAAAdAEAALgAAAB1AQAAAAAAAAwAAAAEAAAAuQAAAAAAAAAMAAAABAAAAKEBAAC5AAAAFFAQAEoAAAC7AAAAdAEAAEoAAAB1AQAAogEAABgAAAAEAAAAvQAAAKIBAAAYAAAABAAAAKMBAAC9AAAAUFAQAKQBAADAAAAAdAEAAMEAAAB1AQAAAAAAAAwAAAAEAAAAwgAAAAAAAAAMAAAABAAAAKUBAADCAAAAjFAQAMYAAADFAAAAdAEAAMYAAAB1AQAASWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzbmVlZF9hdF9sZWFzdAMAAAADAAAACgAAAAgAAAAlQxAAKEMQACtDEAA1QxAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9zdGQvc3JjL2lvL21vZC5ycwAAHFEQAGoAAACyAQAAMQAAAGFzc2VydGlvbiBmYWlsZWQ6IGZpbGxlZCA8PSBzZWxmLmJ1Zi5pbml0L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9jb3JlL3NyYy9pby9ib3Jyb3dlZF9idWYucnMAAADBURAAdAAAAB0BAAAJAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnNIUhAAgAAAAFgCAAAwAAAASW52YWxpZCBGcmFtZV9Db250ZW50X1NpemVfRmxhZzsgSXM6ICwgU2hvdWxkIGJlIG9uZSBvZjogMCwgMSwgMiwgMwDYUhAAJQAAAP1SEAAeAEG0psEAC8piwAMAAHdpbmRvd19zaXplIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bS4gSXM6ICwgU2hvdWxkIGJlIGxvd2VyIHRoYW46IAAAADhTEAAtAAAAZVMQABgAAAAABAAAAAAAAHdpbmRvd19zaXplIHNtYWxsZXIgdGhhbiBhbGxvd2VkIG1pbmltdW0uIElzOiAsIFNob3VsZCBiZSBncmVhdGVyIHRoYW46IJhTEAAuAAAAxlMQABoAAAABAAAAAAAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gZGljdF9pZC4gSXM6ICwgU2hvdWxkIGJlOiAAAPhTEAAhAAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQgbGVuZ3RoLiBJczogADhUEAA3AAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgd2FzIHplcm9JbnZhbGlkIGZyYW1lX2NvbnRlbnRfc2l6ZS4gSXM6ICwgU2hvdWxkIGJlIG9uZSBvZiAxLCAyLCA0LCA4IGJ5dGVzAACbVBAAIAAAALtUEAAjAAAARXJyb3Igd2hpbGUgcmVhZGluZyBtYWdpYyBudW1iZXI6IAAA8FQQACIAAABSZWFkIHdyb25nIG1hZ2ljIG51bWJlcjogMHgAHFUQABsAAABFcnJvciB3aGlsZSByZWFkaW5nIGZyYW1lIGRlc2NyaXB0b3I6IAAAQFUQACYAAABFcnJvciB3aGlsZSByZWFkaW5nIHdpbmRvdyBkZXNjcmlwdG9yOiAAcFUQACcAAABFcnJvciB3aGlsZSByZWFkaW5nIGRpY3Rpb25hcnkgaWQ6IACgVRAAIwAAAEVycm9yIHdoaWxlIHJlYWRpbmcgZnJhbWUgY29udGVudCBzaXplOiDMVRAAKAAAAFNraXBwYWJsZUZyYW1lIGVuY291bnRlcmVkIHdpdGggTWFnaWNOdW1iZXIgMHggYW5kIGxlbmd0aCAgYnl0ZXP8VRAALgAAACpWEAAMAAAANlYQAAYAAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBoZWFkZXJSZXNlcnZlZCBibG9jayBvY2N1cmVkLiBUaGlzIGlzIGNvbnNpZGVyZWQgY29ycnVwdGlvbiBieSB0aGUgZG9jdW1lbnRhdGlvbkVycm9yIGdldHRpbmcgYmxvY2sgdHlwZTogwlYQABoAAABFcnJvciBnZXR0aW5nIGJsb2NrIGNvbnRlbnQgc2l6ZTogAADkVhAAIgAAAEludmFsaWQgQmxvY2t0eXBlIG51bWJlci4gSXM6ICBTaG91bGQgYmUgb25lIG9mOiAwLCAxLCAyLCAzICgzIGlzIHJlc2VydmVkIHRob3VnaAAAABBXEAAeAAAALlcQADMAAAAAAAIAQmxvY2tzaXplIHdhcyBiaWdnZXIgdGhhbiB0aGUgYWJzb2x1dGUgbWF4aW11bSAgKDEyOGtiKS4gSXM6IAAAAHhXEAAvAAAAp1cQAA4AAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBjb250ZW50OiAAyFcQACcAAABNYWxmb3JtZWQgc2VjdGlvbiBoZWFkZXIuIFNheXMgbGl0ZXJhbHMgd291bGQgYmUgdGhpcyBsb25nOiAgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBsZWZ0APhXEAA8AAAANFgQABQAAABIWBAACwAAAENhbid0IGRlY29kZSBuZXh0IGJsb2NrIGlmIGZhaWxlZCBhbG9uZyB0aGUgd2F5LiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VDYW4ndCBkZWNvZGUgbmV4dCBibG9jayBib2R5LCB3aGlsZSBleHBlY3RpbmcgdG8gZGVjb2RlIHRoZSBoZWFkZXIgb2YgdGhlIHByZXZpb3VzIGJsb2NrLiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VFcnJvciB3aGlsZSByZWFkaW5nIGJ5dGVzIGZvciA6IAAnWRAAHgAAAEVZEAACAAAATmVlZCAgYnl0ZXMgZnJvbSB0aGUgZGljdGlvbmFyeSBidXQgaXQgaXMgb25seSAgYnl0ZXMgbG9uZwAAWFkQAAUAAABdWRAAKgAAAIdZEAALAAAAb2Zmc2V0OiAgYmlnZ2VyIHRoYW4gYnVmZmVyOiAAAACsWRAACAAAALRZEAAVAAAAQmFkIG1hZ2ljX251bSBhdCBzdGFydCBvZiB0aGUgZGljdGlvbmFyeTsgR290OiAsIEV4cGVjdGVkOiAA3FkQAC8AAAALWhAADAAAADekMOxTcGVjaWZpZWQgd2luZG93X3NpemUgaXMgdG9vIGJpZzsgUmVxdWVzdGVkOiAsIE1heDogLFoQAC0AAABZWhAABwAAAEZhaWxlZCB0byBwYXJzZS9kZWNvZGUgYmxvY2sgYm9keTogAHBaEAAjAAAARmFpbGVkIHRvIHBhcnNlIGJsb2NrIGhlYWRlcjogAACcWhAAHgAAAEZhaWxlZCB0byByZWFkIGNoZWNrc3VtOiAAAADEWhAAGQAAAERlY29kZXIgbXVzdCBpbml0aWFsaXplZCBvciByZXNldCBiZWZvcmUgdXNpbmcgaXREZWNvZGVyIGVuY291bnRlcmVkIGVycm9yIHdoaWxlIGluaXRpYWxpemluZzogABlbEAAuAAAARGVjb2RlciBlbmNvdW50ZXJlZCBlcnJvciB3aGlsZSBkcmFpbmluZyB0aGUgZGVjb2RlYnVmZmVyOiAAUFsQADsAAABGYWlsZWQgdG8gc2tpcCBieXRlcyBmb3IgdGhlIGxlbmd0aCBnaXZlbiBpbiB0aGUgZnJhbWUgaGVhZGVyVGFyZ2V0IG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGJ5dGVzIGFzIHRoZSBjb250ZW50c2l6ZSBvZiB0aGUgZnJhbWUgcmVwb3J0c0ZyYW1lIGhlYWRlciBzcGVjaWZpZWQgZGljdGlvbmFyeSBpZCAweCB0aGF0IHdhc250IHByb3ZpZGVkIGJ5IGFkZF9kaWN0KCkgb3IgcmVzZXRfd2l0aF9kaWN0KCkAACBcEAAnAAAAR1wQADcAAABjb21wcmVzc2VkIHNpemUgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzbnVtX3N0cmVhbXMgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nICgxIG9yIDQpIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzVHJpZWQgdG8gcmV1c2UgaHVmZm1hbiB0YWJsZSBidXQgaXQgd2FzIG5ldmVyIGluaXRpYWxpemVkTmVlZCA2IGJ5dGVzIHRvIGRlY29kZSBqdW1wIGhlYWRlciwgZ290IAAAfl0QACgAAAA2VhAABgAAAE5lZWQgYXQgbGVhc3QgIGJ5dGVzIHRvIGRlY29kZSBsaXRlcmFscy4gSGF2ZTogALhdEAAOAAAAxl0QACEAAAA2VhAABgAAAFBhZGRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2Vfc2VjdGlvbiB3YXMgbW9yZSB0aGFuIGEgYnl0ZSBsb25nOiAgYml0cy4gUHJvYmFibHkgY2F1c2VkIGJ5IGRhdGEgY29ycnVwdGlvbgAAXhAARgAAAEZeEAApAAAAQml0c3RyZWFtIHdhcyByZWFkIHRpbGw6ICwgc2hvdWxkIGhhdmUgYmVlbjogAAAAgF4QABkAAACZXhAAFAAAAERpZCBub3QgZGVjb2RlIGVub3VnaCBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiDAXhAAIAAAAOBeEAAUAAAAU2VxdWVuY2Ugd2FudHMgdG8gY29weSB1cCB0byBieXRlIC4gQnl0ZXMgaW4gbGl0ZXJhbHNidWZmZXI6IAAAAARfEAAiAAAAJl8QABsAAABJbGxlZ2FsIG9mZnNldDogMCBmb3VuZERvIG5vdCBzdXBwb3J0IG9mZnNldHMgYmlnZ2VyIHRoYW4gMTw8MzI7IGdvdDogAABrXxAALwAAAFJlYWQgYW4gb2Zmc2V0ID09IDAuIFRoYXQgaXMgYW4gaWxsZWdhbCB2YWx1ZSBmb3Igb2Zmc2V0c0J5dGVzdHJlYW0gZGlkIG5vdCBjb250YWluIGVub3VnaCBieXRlcyB0byBkZWNvZGUgbnVtX3NlcXVlbmNlc2NvbXByZXNzaW9uIG1vZGVzIGFyZSBub25lIGJ1dCB0aGV5IG11c3QgYmUgc2V0IHRvIHNvbWV0aGluZ05lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBsbCB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBvZiB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBtbCB0YWJsZUlsbGVnYWwgbGl0ZXJhbHNzZWN0aW9udHlwZS4gSXM6ICwgbXVzdCBiZSBpbjogMCwgMSwgMiwgMwAAAMRgEAAhAAAA5WAQABgAAABOb3QgZW5vdWdoIGJ5dGUgdG8gcGFyc2UgdGhlIGxpdGVyYWxzIHNlY3Rpb24gaGVhZGVyLiBIYXZlOiAsIE5lZWQ6IBBhEAA8AAAATGEQAAgAAABzb3VyY2UgbXVzdCBoYXZlIGF0IGxlYXN0ICBieXRlcyB0byBwYXJzZSBoZWFkZXI7IGdvdCAAAGRhEAAaAAAAfmEQABwAAAA2VhAABgAAAEFjY2xvZyBtdXN0IGJlIGF0IGxlYXN0IDFGb3VuZCBGU0UgYWNjX2xvZzogIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bSBpbiB0aGlzIGNhc2U6IADNYRAAEwAAAOBhEAArAAAAVGhlIGNvdW50ZXIgKCkgZXhjZWVkZWQgdGhlIGV4cGVjdGVkIHN1bTogLiBUaGlzIG1lYW5zIGFuIGVycm9yIG9yIGNvcnJ1cHRlZCBkYXRhIAogHGIQAA0AAAApYhAAHQAAAEZiEAAqAAAAVGhlcmUgYXJlIHRvbyBtYW55IHN5bWJvbHMgaW4gdGhpcyBkaXN0cmlidXRpb246IC4gTWF4OiAyNTYAiGIQADEAAAC5YhAACgAAAFRyaWVkIHRvIHVzZSBhbiB1bmluaXRpYWxpemVkIHRhYmxlIVNvdXJjZSBuZWVkcyB0byBoYXZlIGF0IGxlYXN0IG9uZSBieXRlSGVhZGVyIHNheXMgdGhlcmUgc2hvdWxkIGJlICBieXRlcyBmb3IgdGhlIHdlaWdodHMgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBpbiB0aGUgc3RyZWFtHmMQABwAAAA6YxAAKgAAAGRjEAAUAAAATW9yZSB0aGFuIDI1NSB3ZWlnaHRzIGRlY29kZWQgKGdvdCAgd2VpZ2h0cykuIFN0cmVhbSBpcyBwcm9iYWJseSBjb3JydXB0ZWQAAJBjEAAjAAAAs2MQACcAAABDYW4ndCBidWlsZCBodWZmbWFuIHRhYmxlIHdpdGhvdXQgYW55IHdlaWdodHNMZWZ0b3ZlciBtdXN0IGJlIHBvd2VyIG9mIHR3byBidXQgaXM6IAAZZBAAJgAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gc3RyZWFtIHRvIGRlY29tcHJlc3Mgd2VpZ2h0cy4gSXM6IAAASGQQADYAAAAZVBAADQAAAEZTRSB0YWJsZSB1c2VkIG1vcmUgYnl0ZXM6ICB0aGFuIHdlcmUgbWVhbnQgdG8gYmUgdXNlZCBmb3IgdGhlIHdob2xlIHN0cmVhbSBvZiBodWZmbWFuIHdlaWdodHMgKCkAAACQZBAAGwAAAKtkEABFAAAA8GQQAAEAAABTb3VyY2UgbmVlZHMgdG8gaGF2ZSBhdCBsZWFzdCAgYnl0ZXMsIGdvdDogAAxlEAAeAAAAKmUQAA0AAAALQ2FudCBoYXZlIHdlaWdodDogIGJpZ2dlciB0aGFuIG1heF9udW1fYml0czogAABJZRAAEgAAAFtlEAAbAAAAbWF4X2JpdHMgZGVyaXZlZCBmcm9tIHdlaWdodHMgaXM6ICBzaG91bGQgYmUgbG93ZXIgdGhhbjogAAAAiGUQACIAAACqZRAAFwAAAENhbnQgc2VydmUgdGhpcyByZXF1ZXN0LiBUaGUgcmVhZGVyIGlzIGxpbWl0ZWQgdG8gIGJpdHMsIHJlcXVlc3RlZCAgYml0c9RlEAAyAAAABmYQABEAAAAXZhAABQAAAENhbid0IHJlYWQgIGJpdHMsIG9ubHkgaGF2ZSAgYml0cyBsZWZ0AAA0ZhAACwAAAD9mEAARAAAAUGYQAAoAAAAAAAAABAAAAAQAAADJAQAAAAAAAAQAAAAEAAAAygEAAFRvb01hbnlCaXRzbnVtX3JlcXVlc3RlZF9iaXRzbGltaXQAAAAAAAAEAAAABAAAAMsBAABOb3RFbm91Z2hSZW1haW5pbmdCaXRzcmVxdWVzdGVkcmVtYWluaW5nSW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnZ290AAAAAAAABAAAAAQAAADMAQAAV2luZG93VG9vQmlnV2luZG93VG9vU21hbGwAAAAAAAAEAAAABAAAAK4BAABGcmFtZURlc2NyaXB0b3JFcnJvckRpY3RJZFRvb1NtYWxsZXhwZWN0ZWRNaXNtYXRjaGVkRnJhbWVTaXplRnJhbWVTaXplSXNaZXJvSW52YWxpZEZyYW1lU2l6ZQAAAAAEAAAABAAAAM0BAABNYWdpY051bWJlclJlYWRFcnJvcgAAAAAEAAAABAAAAM4BAABCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvcgAAAAAABAAAAAQAAADPAQAAU2tpcEZyYW1lbWFnaWNfbnVtYmVybGVuZ3RoQmxvY2tDb250ZW50UmVhZEVycm9yTWFsZm9ybWVkU2VjdGlvbkhlYWRlcmV4cGVjdGVkX2xlbnJlbWFpbmluZ19ieXRlcwAAAAAAAAAEAAAABAAAALIBAABEZWNvbXByZXNzTGl0ZXJhbHNFcnJvcgAAAAAABAAAAAQAAACzAQAATGl0ZXJhbHNTZWN0aW9uUGFyc2VFcnJvcgAAAAAAAAAEAAAABAAAALQBAABTZXF1ZW5jZXNIZWFkZXJQYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAtQEAAERlY29kZVNlcXVlbmNlRXJyb3IAAAAAAAQAAAAEAAAAtgEAAEV4ZWN1dGVTZXF1ZW5jZXNFcnJvck5vdEVub3VnaEJ5dGVzSW5EaWN0aW9uYXJ5bmVlZE9mZnNldFRvb0JpZ29mZnNldGJ1Zl9sZW4AAAAABAAAAAQAAAC4AQAAQmFkTWFnaWNOdW0AAAAAAAQAAAAEAAAAuQEAAEZTRVRhYmxlRXJyb3IAAAAAAAAABAAAAAQAAAC6AQAASHVmZm1hblRhYmxlRXJyb3JNaXNzaW5nQ29tcHJlc3NlZFNpemVNaXNzaW5nTnVtU3RyZWFtcwAAAAAABAAAAAQAAADBAQAAR2V0Qml0c0Vycm9yAAAAAAQAAAAEAAAAwgEAAEh1ZmZtYW5EZWNvZGVyRXJyb3JVbmluaXRpYWxpemVkSHVmZm1hblRhYmxlTWlzc2luZ0J5dGVzRm9ySnVtcEhlYWRlck1pc3NpbmdCeXRlc0ZvckxpdGVyYWxzbmVlZGVkAAAAAAAABAAAAAQAAADQAQAARXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzAAAAAAQAAAAEAAAA0QEAAAAAAAAEAAAABAAAANIBAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAAAAAAAQAAAAEAAAAxQEAAERlY29kZWJ1ZmZlckVycm9yTm90RW5vdWdoQnl0ZXNGb3JTZXF1ZW5jZXdhbnRlZGhhdmVaZXJvT2Zmc2V0AAAAAAAABAAAAAQAAADGAQAARlNFRGVjb2RlckVycm9yVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZU5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzRXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlSWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzAAAAAAEAAAABAAAA0wEAAG5lZWRfYXRfbGVhc3RBY2NMb2dJc1plcm9BY2NMb2dUb29CaWdtYXgAAAAABAAAAAQAAADHAQAAUHJvYmFiaWxpdHlDb3VudGVyTWlzbWF0Y2hleHBlY3RlZF9zdW1zeW1ib2xfcHJvYmFiaWxpdGllc1Rvb01hbnlTeW1ib2xzVGFibGVJc1VuaW5pdGlhbGl6ZWRTb3VyY2VJc0VtcHR5Tm90RW5vdWdoQnl0ZXNGb3JXZWlnaHRzZ290X2J5dGVzZXhwZWN0ZWRfYnl0ZXNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c0ZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAABQbhAAbQAAACoCAAARAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyX3JldmVyc2UucnMAAADQbhAAcQAAADcAAABFAAAA0G4QAHEAAAA3AAAALwAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGXQbhAAcQAAAEYAAAANAAAA0G4QAHEAAABKAAAAHgAAAFRoaXMgaXMgYSBidWcgaW4gdGhlIHByb2dyYW0uIFRoZXJlIHNob3VsZCBvbmx5IGJlIHZhbHVlcyBiZXR3ZWVuIDAuLjMvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2Jsb2Nrcy9saXRlcmFsc19zZWN0aW9uLnJzAPJvEABtAAAAewAAADQAAADybxAAbQAAAJAAAABXAAAA8m8QAG0AAACXAAAAKgAAAPJvEABtAAAAmAAAACoAAADybxAAbQAAAJsAAAAaAAAA8m8QAG0AAACoAAAAGgAAAPJvEABtAAAAtAAAAEQAAADybxAAbQAAALgAAABGAAAA8m8QAG0AAADAAAAAKgAAAPJvEABtAAAAwQAAACsAAADybxAAbQAAAMUAAABIAAAA8m8QAG0AAADNAAAAKgAAAPJvEABtAAAAzgAAACsAAADybxAAbQAAANMAAAAuAAAA8m8QAG0AAADUAAAALgAAAENhbnQgcmV0dXJuIHRoaXMgbWFueSBiaXRzL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyLnJzAGpxEABpAAAANgAAAA0AAABqcRAAaQAAAE8AAAAjAAAAYXNzZXJ0aW9uIGZhaWxlZDogbiAtIGJpdF9zaGlmdCA9PSBiaXRzX2luX2xhc3RfYnl0ZV9uZWVkZWQAanEQAGkAAABtAAAADQAAAGpxEABpAAAAcQAAAB8AAABqcRAAaQAAAGgAAAAkAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pZHggJSA4ID09IDAAanEQAGkAAABkAAAADQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaWR4ID09IG9sZF9pZHggKyBuAAAAanEQAGkAAAB3AAAACQAAAFNlcV9zdW06ICBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZGlmZmVyZW5jZSBpbiBidWZmZXJzaXplOiAAANByEAAJAAAA2XIQADEAAAAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3NlcXVlbmNlX2V4ZWN1dGlvbi5ycwAAABxzEABxAAAALwAAAAUAAAAccxAAcQAAAAsAAAAkAAAAHHMQAHEAAAAVAAAANAAAAEFsbG9jYXRpbmcgbmV3IHNwYWNlIGZvciB0aGUgcmluZ2J1ZmZlciBmYWlsZWQvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3JpbmdidWZmZXIucnMA7nMQAGkAAABhAAAAIwAAAENvdWxkIG5vdCBjcmVhdGUgbGF5b3V0IGZvciB1OCBhcnJheSBvZiBzaXplIAAAAGh0EAAtAAAA7nMQAGkAAABaAAAAIQAAAO5zEABpAAAAtAAAABUAAADucxAAaQAAAL4AAAAVAAAA7nMQAGkAAAB3AQAAHQAAAO5zEABpAAAAzgEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwDwdBAAawAAAKIAAAAZAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9saXRlcmFsc19zZWN0aW9uX2RlY29kZXIucnMAbHUQAHcAAAAUAAAAIgAAAGx1EAB3AAAAGAAAAE0AAABsdRAAdwAAADQAAAAZAAAAbHUQAHcAAAByAAAAGAAAAGx1EAB3AAAAkQAAABQAAABhc3NlcnRpb24gZmFpbGVkOiBudW1fc3RyZWFtcyA9PSAxAABsdRAAdwAAAIAAAAAJAAAAbHUQAHcAAABFAAAAGQAAAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2Rpbmcvc2VxdWVuY2Vfc2VjdGlvbl9kZWNvZGVyLnJzAHh2EAB3AAAAGAAAAB0AAAB4dhAAdwAAAHUAAAAQAAAAeHYQAHcAAADAAAAAEAAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IElsbGVnYWwgbGl0ZXJhbCBsZW5ndGggY29kZSB3YXM6IAAgdxAASwAAAHh2EAB3AAAA+gAAAA4AAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBJbGxlZ2FsIG1hdGNoIGxlbmd0aCBjb2RlIHdhczogAAAAhHcQAEkAAAB4dhAAdwAAABoBAAAOAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAD/////////////////////AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA//////////////////////////8BAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA/////////////////////////////////////3h2EAB3AAAAdgEAABwAAAB4dhAAdwAAAFMBAAAcAAAAAQEBAQICAwMEBgcICQoLDA0ODxAQAAAAEgAAABQAAAAWAAAAGAAAABwAAAAgAAAAKAAAADAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAEBAQECAgMDBAQFBwgJCgsMDQ4PEAAAACMAAAAlAAAAJwAAACkAAAArAAAALwAAADMAAAA7AAAAQwAAAFMAAABjAAAAgwAAAAMBAAADAgAAAwQAAAMIAAADEAAAAyAAAANAAAADgAAAAwABAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3R3b3gtaGFzaC0yLjEuMC9zcmMveHhoYXNoNjQucnMAAACwehAAYQAAAFQAAAAfAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9kZWNvZGVidWZmZXIucnMAJHsQAGsAAAAaAAAAHgAAACR7EABrAAAAnQAAADQAAAAkexAAawAAAOoAAAAeAAAAUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVyZAAAAAAAAAAEAAAABAAAAMoBAAAAAAAABAAAAAQAAADQAQAAYXNzZXJ0aW9uIGZhaWxlZDogeCA+IDAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2h1ZmYwL2h1ZmYwX2RlY29kZXIucnMTfBAAaQAAADEAAAAFAAAAE3wQAGkAAAA+AAAAGgAAABN8EABpAAAAUAAAACkAAAATfBAAaQAAAGgAAAAWAAAAE3wQAGkAAABqAAAAEwAAABN8EABpAAAAawAAABgAAAATfBAAaQAAAGwAAAAbAAAAE3wQAGkAAAAdAQAANgAAABN8EABpAAAAHQEAACUAAAATfBAAaQAAAB8BAAA2AAAAE3wQAGkAAAAfAQAAJQAAABN8EABpAAAA6AAAACIAAAATfBAAaQAAAPIAAAAiAAAAE3wQAGkAAAD3AAAAJgAAABN8EABpAAAA7QAAACYAAAATfBAAaQAAAFcBAAASAAAAE3wQAGkAAABfAQAAGAAAABN8EABpAAAAZQEAABUAAAATfBAAaQAAAG8BAAAbAAAAE3wQAGkAAABxAQAAGgAAABN8EABpAAAAeAEAAB4AAAByYW5rX2lkeFswXTogIHNob3VsZCBiZTogAAAAzH0QAA0AAADZfRAADAAAABN8EABpAAAAdwEAAAkAAAATfBAAaQAAAH8BAAAsAAAAE3wQAGkAAACEAQAAMQAAABN8EABpAAAAiAEAACAAAAATfBAAaQAAAIkBAAAgAAAAE3wQAGkAAABzAQAARQAAABN8EABpAAAAdAEAACEAAAATfBAAaQAAAHMBAAAeAAAAE3wQAGkAAABhAQAAGwAAABN8EABpAAAATwEAACcAAAATfBAAaQAAAFQBAAAWAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAqH4QAGsAAACiAAAAGQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzACR/EABrAAAAogAAABkAAABhc3NlcnRpb24gZmFpbGVkOiB4ID4gMC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZnNlL2ZzZV9kZWNvZGVyLnJzt38QAGUAAAA9AAAABQAAALd/EABlAAAAWgAAACcAAAC3fxAAZQAAAGUAAAAnAAAAt38QAGUAAABwAAAAIwAAALd/EABlAAAAcQAAAB0AAAC3fxAAZQAAAOIAAAApAAAAt38QAGUAAADkAAAAMQAAALd/EABlAAAA5gAAADMAAABhc3NlcnRpb24gZmFpbGVkOiBuYiA8PSBzZWxmLmFjY3VyYWN5X2xvZwAAALd/EABlAAAA6wAAAA0AAAC3fxAAZQAAANIAAAAtAAAAt38QAGUAAADAAAAALQAAALd/EABlAAAAOQEAAEEAAAC3fxAAZQAAAB4BAAAnAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHJvYiA9PSAtMbd/EABlAAAAJAEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy92ZWMvbW9kLnJzAAAARIEQAG0AAAA9CgAAJAAAAAAAAAAQAAAABAAAANQBAADVAQAA1gEAACAgICA6IAAAAQAAAAAAAADggRAAAgAAACAgICAgICAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL3B0ci9tb2QucnMA+4EQAGwAAAALAgAAAQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvc2xpY2UvaW5kZXgucnN4ghAAcAAAAEwDAAA0AAAAeIIQAHAAAABTAwAAMgAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuKS9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAAMoMQAGwAAAD7BwAAHQAAADKDEABsAAAAAwgAAB0AAAAygxAAbAAAAI0FAAAbAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5ycwAAANCDEABtAAAAKgIAABEAAADXAQAADAAAAAQAAADYAQAA2QEAANoBAADdAQAADAAAAAQAAADeAQAA3wEAANoBAEGIicIAC4UJAQAAAOABAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAMeEEABsAAAA3woAAA4AAABFcnJvcgAAAMeEEABsAAAAjQUAABsAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbinHhBAAbAAAAMAFAAANAAAAAAAAABAAAAAEAAAA1AEAANUBAADWAQAAYmFja3RyYWNlIGNhcHR1cmUgZmFpbGVkL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYW55aG93LTEuMC45OC9zcmMvZXJyb3IucnPMhRAAXAAAAGcEAAAOAAAAAQAAAAAAAAA6IAAAQIYQAAIAAAAKCkNhdXNlZCBieToKCgpzdGFjayBiYWNrdHJhY2U6U3RhY2sgYmFja3RyYWNlOgprhhAAEQAAAFMvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAACFhhAAeQAAALMHAAAJAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy43Ny9zcmMvbGliLnJzAAAQhxAAWgAAAPsYAAABAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMDAvc3JjL2NvbnZlcnQvc2xpY2VzLnJzfIcQAGwAAAAkAQAADgAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkSnNWYWx1ZSgpACqIEAAIAAAAMogQAAEAAABMYXp5IGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWQAAESIEAAqAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvb25jZV9jZWxsLTEuMjEuMy9zcmMvbGliLnJzAAAAeIgQAF0AAAAIAwAAGQAAAHJlZW50cmFudCBpbml0AADoiBAADgAAAHiIEABdAAAAegIAAA0AQZiSwgALlSMEAAAABAAAAPYBAAAvcnVzdGMvMDVmOTg0NmY4OTNiMDlhMWJlMWZjODU2MGUzM2ZjM2M4MTVjZmVjYi9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAAJIkQAEoAAACiAAAAGQAAAC9ydXN0Yy8wNWY5ODQ2Zjg5M2IwOWExYmUxZmM4NTYwZTMzZmMzYzgxNWNmZWNiL2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwCAiRAASwAAAI0FAAAbAAAAL3J1c3RjLzA1Zjk4NDZmODkzYjA5YTFiZTFmYzg1NjBlMzNmYzNjODE1Y2ZlY2IvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc9yJEABMAAAAKgIAABEAAAA6AAAA9wEAAAwAAAAEAAAA+AEAAPkBAAD6AQAAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuNy9zcmMvZGxtYWxsb2MucnNhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAFSKEAApAAAAqAQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAABUihAAKQAAAK4EAAANAAAAQWNjZXNzRXJyb3JjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uOiAAB4sQAEgAAABsaWJyYXJ5L3N0ZC9zcmMvYmFja3RyYWNlLnJzb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybXSLEAAoAAAAJAAAAAIAAACcixAAdW5zdXBwb3J0ZWQgYmFja3RyYWNlZGlzYWJsZWQgYmFja3RyYWNlAFiLEAAcAAAAigEAAB0AAAD7AQAAEAAAAAQAAAD8AQAA/QEAAAEAAAAAAAAAZW50aXR5IG5vdCBmb3VuZHBlcm1pc3Npb24gZGVuaWVkY29ubmVjdGlvbiByZWZ1c2VkY29ubmVjdGlvbiByZXNldGhvc3QgdW5yZWFjaGFibGVuZXR3b3JrIHVucmVhY2hhYmxlY29ubmVjdGlvbiBhYm9ydGVkbm90IGNvbm5lY3RlZGFkZHJlc3MgaW4gdXNlYWRkcmVzcyBub3QgYXZhaWxhYmxlbmV0d29yayBkb3duYnJva2VuIHBpcGVlbnRpdHkgYWxyZWFkeSBleGlzdHNvcGVyYXRpb24gd291bGQgYmxvY2tub3QgYSBkaXJlY3RvcnlpcyBhIGRpcmVjdG9yeWRpcmVjdG9yeSBub3QgZW1wdHlyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWZpbGVzeXN0ZW0gbG9vcCBvciBpbmRpcmVjdGlvbiBsaW1pdCAoZS5nLiBzeW1saW5rIGxvb3Apc3RhbGUgbmV0d29yayBmaWxlIGhhbmRsZWludmFsaWQgaW5wdXQgcGFyYW1ldGVyaW52YWxpZCBkYXRhdGltZWQgb3V0d3JpdGUgemVyb25vIHN0b3JhZ2Ugc3BhY2VzZWVrIG9uIHVuc2Vla2FibGUgZmlsZXF1b3RhIGV4Y2VlZGVkZmlsZSB0b28gbGFyZ2VyZXNvdXJjZSBidXN5ZXhlY3V0YWJsZSBmaWxlIGJ1c3lkZWFkbG9ja2Nyb3NzLWRldmljZSBsaW5rIG9yIHJlbmFtZXRvbyBtYW55IGxpbmtzaW52YWxpZCBmaWxlbmFtZWFyZ3VtZW50IGxpc3QgdG9vIGxvbmdvcGVyYXRpb24gaW50ZXJydXB0ZWR1bnN1cHBvcnRlZHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVvdXQgb2YgbWVtb3J5aW4gcHJvZ3Jlc3NvdGhlciBlcnJvcnVuY2F0ZWdvcml6ZWQgZXJyb3JPcwAAAAAABAAAAAQAAAD+AQAAY29kZQAAAAABAAAAAQAAAP8BAABraW5k9wEAAAwAAAAEAAAAAAIAAG1lc3NhZ2VLaW5kRXJyb3IAAAAACAAAAAQAAAABAgAAAAAAAAQAAAAEAAAAAgIAAEN1c3RvbWVycm9yIChvcyBlcnJvciApAAEAAAAAAAAAZ48QAAsAAAByjxAAAQAAADogY2Fubm90IHJlY3Vyc2l2ZWx5IGFjcXVpcmUgbXV0ZXgAAI6PEAAgAAAAbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnO4jxAALAAAABMAAAAJAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvcG9pc29uL29uY2UucnMA9I8QACMAAACbAAAAMgAAAGxpYnJhcnkvc3RkL3NyYy9zeW5jL2xhenlfbG9jay5ycwAAACiQEAAhAAAA0QAAABMAAAA8dW5rbm93bj7vv71tZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAABokBAAFQAAAH2QEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJznJAQABgAAABjAQAACQAAAAoAAAD3AQAADAAAAAQAAAADAgAAAAAAAAgAAAAEAAAABAIAAAAAAAAIAAAABAAAAAUCAAAGAgAABwIAAAgCAAAJAgAAEAAAAAQAAAAKAgAACwIAAAwCAAANAgAAbGlicmFyeS9zdGQvc3JjLy4uLy4uL2JhY2t0cmFjZS9zcmMvc3ltYm9saXplL21vZC5ycyCREAA0AAAAZwEAADAAAAABAAAAAAAAAIyPEAACAAAAIC0gAAEAAAAAAAAAdJEQAAMAAAAgICAgICAgICAgICAgICAgICAgYXQgAAA4ihAAAQAAAE5vdEZvdW5kUGVybWlzc2lvbkRlbmllZENvbm5lY3Rpb25SZWZ1c2VkQ29ubmVjdGlvblJlc2V0SG9zdFVucmVhY2hhYmxlTmV0d29ya1VucmVhY2hhYmxlQ29ubmVjdGlvbkFib3J0ZWROb3RDb25uZWN0ZWRBZGRySW5Vc2VBZGRyTm90QXZhaWxhYmxlTmV0d29ya0Rvd25Ccm9rZW5QaXBlQWxyZWFkeUV4aXN0c1dvdWxkQmxvY2tOb3RBRGlyZWN0b3J5SXNBRGlyZWN0b3J5RGlyZWN0b3J5Tm90RW1wdHlSZWFkT25seUZpbGVzeXN0ZW1GaWxlc3lzdGVtTG9vcFN0YWxlTmV0d29ya0ZpbGVIYW5kbGVJbnZhbGlkSW5wdXRJbnZhbGlkRGF0YVRpbWVkT3V0V3JpdGVaZXJvU3RvcmFnZUZ1bGxOb3RTZWVrYWJsZVF1b3RhRXhjZWVkZWRGaWxlVG9vTGFyZ2VSZXNvdXJjZUJ1c3lFeGVjdXRhYmxlRmlsZUJ1c3lEZWFkbG9ja0Nyb3NzZXNEZXZpY2VzVG9vTWFueUxpbmtzSW52YWxpZEZpbGVuYW1lQXJndW1lbnRMaXN0VG9vTG9uZ0ludGVycnVwdGVkVW5zdXBwb3J0ZWRVbmV4cGVjdGVkRW9mT3V0T2ZNZW1vcnlJblByb2dyZXNzT3RoZXJVbmNhdGVnb3JpemVkb3BlcmF0aW9uIHN1Y2Nlc3NmdWxPbmNlIGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWTakxAAKgAAAG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgcGVyZm9ybWVkIHJlY3Vyc2l2ZWx5DJQQADgAAAAQAAAAEQAA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", self.location.href);\n }\n const imports = __wbg_get_imports();\n if (typeof module_or_path === "string" || typeof Request === "function" && module_or_path instanceof Request || typeof URL === "function" && module_or_path instanceof URL) {\n module_or_path = fetch(module_or_path);\n }\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n return __wbg_finalize_init(instance, module);\n }\n const LN_SCALE_MIN = -9;\n const LN_SCALE_MAX = 9;\n const LN_RESCALE = (LN_SCALE_MAX - LN_SCALE_MIN) / 254;\n const SCALE_MIN = Math.exp(LN_SCALE_MIN);\n const SPLAT_TEX_WIDTH_BITS = 11;\n const SPLAT_TEX_HEIGHT_BITS = 11;\n const SPLAT_TEX_WIDTH = 1 << SPLAT_TEX_WIDTH_BITS;\n const SPLAT_TEX_HEIGHT = 1 << SPLAT_TEX_HEIGHT_BITS;\n const SPLAT_TEX_MIN_HEIGHT = 1;\n const WASM_SPLAT_SORT = true;\n const _PlyReader = class _PlyReader {\n // Create a PlyReader from a Uint8Array/ArrayBuffer, no parsing done yet\n constructor({ fileBytes }) {\n this.header = "";\n this.littleEndian = true;\n this.elements = {};\n this.comments = [];\n this.data = null;\n this.numSplats = 0;\n this.fileBytes = fileBytes instanceof ArrayBuffer ? new Uint8Array(fileBytes) : fileBytes;\n }\n // Identify and parse the PLY text header (assumed to be <64KB in size).\n // this.elements will contain all the elements in the file, typically\n // "vertex" contains the Gsplat data.\n async parseHeader() {\n const bufferStream = new ReadableStream({\n start: (controller) => {\n controller.enqueue(this.fileBytes.slice(0, 65536));\n controller.close();\n }\n });\n const decoder = bufferStream.pipeThrough(new TextDecoderStream()).getReader();\n this.header = "";\n const headerTerminator = "end_header\\n";\n while (true) {\n const { value, done } = await decoder.read();\n if (done) {\n throw new Error("Failed to read header");\n }\n this.header += value;\n const endHeader = this.header.indexOf(headerTerminator);\n if (endHeader >= 0) {\n this.header = this.header.slice(0, endHeader + headerTerminator.length);\n break;\n }\n }\n const headerLen = new TextEncoder().encode(this.header).length;\n this.data = new DataView(this.fileBytes.buffer, headerLen);\n this.elements = {};\n let curElement = null;\n this.comments = [];\n this.header.trim().split("\\n").forEach((line, lineIndex) => {\n const trimmedLine = line.trim();\n if (lineIndex === 0) {\n if (trimmedLine !== "ply") {\n throw new Error("Invalid PLY header");\n }\n return;\n }\n if (trimmedLine.length === 0) {\n return;\n }\n const fields = trimmedLine.split(" ");\n switch (fields[0]) {\n case "format":\n if (fields[1] === "binary_little_endian") {\n this.littleEndian = true;\n } else if (fields[1] === "binary_big_endian") {\n this.littleEndian = false;\n } else {\n throw new Error(`Unsupported PLY format: ${fields[1]}`);\n }\n if (fields[2] !== "1.0") {\n throw new Error(`Unsupported PLY version: ${fields[2]}`);\n }\n break;\n case "end_header":\n break;\n case "comment":\n this.comments.push(trimmedLine.slice("comment ".length));\n break;\n case "element": {\n const name = fields[1];\n curElement = {\n name,\n count: Number.parseInt(fields[2]),\n properties: {}\n };\n this.elements[name] = curElement;\n break;\n }\n case "property":\n if (curElement == null) {\n throw new Error("Property must be inside an element");\n }\n if (fields[1] === "list") {\n curElement.properties[fields[4]] = {\n isList: true,\n type: fields[3],\n countType: fields[2]\n };\n } else {\n curElement.properties[fields[2]] = {\n isList: false,\n type: fields[1]\n };\n }\n break;\n }\n });\n if (this.elements.vertex) {\n this.numSplats = this.elements.vertex.count;\n }\n }\n parseData(elementCallback) {\n let offset = 0;\n const data = this.data;\n if (data == null) {\n throw new Error("No data to parse");\n }\n for (const elementName in this.elements) {\n const element = this.elements[elementName];\n const { count, properties } = element;\n const item = {};\n const parsers = [];\n for (const [propertyName, property] of Object.entries(properties)) {\n if (!property.isList) {\n item[propertyName] = 0;\n parsers.push(() => {\n item[propertyName] = PARSE_FIELD[property.type](\n data,\n offset,\n this.littleEndian\n );\n offset += FIELD_BYTES[property.type];\n });\n } else {\n item[propertyName] = [];\n parsers.push(() => {\n const list = item[propertyName];\n list.length = PARSE_FIELD[property.countType](\n data,\n offset,\n this.littleEndian\n );\n offset += FIELD_BYTES[property.countType];\n for (let i2 = 0; i2 < list.length; i2++) {\n list[i2] = PARSE_FIELD[property.type](\n data,\n offset,\n this.littleEndian\n );\n offset += FIELD_BYTES[property.type];\n }\n });\n }\n }\n const callback = elementCallback(element) ?? (() => {\n });\n for (let index = 0; index < count; index++) {\n for (const parser of parsers) {\n parser();\n }\n callback(index, item);\n }\n }\n }\n // Parse all the Gsplat data in the PLY file in go, invoking the given\n // callbacks for each Gsplat.\n parseSplats(splatCallback, shCallback) {\n if (this.elements.vertex == null) {\n throw new Error("No vertex element found");\n }\n let isSuperSplat = false;\n const ssChunks = [];\n let numSh = 0;\n let sh1Props = [];\n let sh2Props = [];\n let sh3Props = [];\n let sh1 = void 0;\n let sh2 = void 0;\n let sh3 = void 0;\n function prepareSh() {\n const num_f_rest = NUM_SH_TO_NUM_F_REST[numSh];\n sh1Props = new Array(3).fill(null).flatMap(\n (_, k) => [0, 1, 2].map((_2, d) => `f_rest_${k + d * num_f_rest / 3}`)\n );\n sh2Props = new Array(5).fill(null).flatMap(\n (_, k) => [0, 1, 2].map((_2, d) => `f_rest_${3 + k + d * num_f_rest / 3}`)\n );\n sh3Props = new Array(7).fill(null).flatMap(\n (_, k) => [0, 1, 2].map((_2, d) => `f_rest_${8 + k + d * num_f_rest / 3}`)\n );\n sh1 = numSh >= 1 ? new Float32Array(3 * 3) : void 0;\n sh2 = numSh >= 2 ? new Float32Array(5 * 3) : void 0;\n sh3 = numSh >= 3 ? new Float32Array(7 * 3) : void 0;\n }\n function ssShCallback(index, item) {\n if (!sh1) {\n throw new Error("Missing sh1");\n }\n for (const [i2, key] of sh1Props.entries()) {\n sh1[i2] = item[key] * 8 / 255 - 4;\n }\n if (sh2) {\n for (const [i2, key] of sh2Props.entries()) {\n sh2[i2] = item[key] * 8 / 255 - 4;\n }\n }\n if (sh3) {\n for (const [i2, key] of sh3Props.entries()) {\n sh3[i2] = item[key] * 8 / 255 - 4;\n }\n }\n shCallback == null ? void 0 : shCallback(index, sh1, sh2, sh3);\n }\n function initSuperSplat(element) {\n const {\n min_x,\n min_y,\n min_z,\n max_x,\n max_y,\n max_z,\n min_scale_x,\n min_scale_y,\n min_scale_z,\n max_scale_x,\n max_scale_y,\n max_scale_z,\n min_r,\n min_g,\n min_b,\n max_r,\n max_g,\n max_b\n } = element.properties;\n if (!min_x || !min_y || !min_z || !max_x || !max_y || !max_z || !min_scale_x || !min_scale_y || !min_scale_z || !max_scale_x || !max_scale_y || !max_scale_z || !min_r || !min_g || !min_b || !max_r || !max_g || !max_b) {\n throw new Error("Missing PLY chunk properties");\n }\n isSuperSplat = true;\n return (index, item) => {\n const {\n min_x: min_x2,\n min_y: min_y2,\n min_z: min_z2,\n max_x: max_x2,\n max_y: max_y2,\n max_z: max_z2,\n min_scale_x: min_scale_x2,\n min_scale_y: min_scale_y2,\n min_scale_z: min_scale_z2,\n max_scale_x: max_scale_x2,\n max_scale_y: max_scale_y2,\n max_scale_z: max_scale_z2,\n min_r: min_r2,\n min_g: min_g2,\n min_b: min_b2,\n max_r: max_r2,\n max_g: max_g2,\n max_b: max_b2\n } = item;\n ssChunks.push({\n min_x: min_x2,\n min_y: min_y2,\n min_z: min_z2,\n max_x: max_x2,\n max_y: max_y2,\n max_z: max_z2,\n min_scale_x: min_scale_x2,\n min_scale_y: min_scale_y2,\n min_scale_z: min_scale_z2,\n max_scale_x: max_scale_x2,\n max_scale_y: max_scale_y2,\n max_scale_z: max_scale_z2,\n min_r: min_r2,\n min_g: min_g2,\n min_b: min_b2,\n max_r: max_r2,\n max_g: max_g2,\n max_b: max_b2\n });\n };\n }\n function decodeSuperSplat(element) {\n if (shCallback && element.name === "sh") {\n numSh = getNumSh(element.properties);\n prepareSh();\n return ssShCallback;\n }\n if (element.name !== "vertex") {\n return null;\n }\n const { packed_position, packed_rotation, packed_scale, packed_color } = element.properties;\n if (!packed_position || !packed_rotation || !packed_scale || !packed_color) {\n throw new Error(\n "Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color"\n );\n }\n const SQRT2 = Math.sqrt(2);\n return (index, item) => {\n const chunk = ssChunks[index >>> 8];\n if (chunk == null) {\n throw new Error("Missing PLY chunk");\n }\n const {\n min_x,\n min_y,\n min_z,\n max_x,\n max_y,\n max_z,\n min_scale_x,\n min_scale_y,\n min_scale_z,\n max_scale_x,\n max_scale_y,\n max_scale_z,\n min_r,\n min_g,\n min_b,\n max_r,\n max_g,\n max_b\n } = chunk;\n const { packed_position: packed_position2, packed_rotation: packed_rotation2, packed_scale: packed_scale2, packed_color: packed_color2 } = item;\n const x2 = (packed_position2 >>> 21 & 2047) / 2047 * (max_x - min_x) + min_x;\n const y = (packed_position2 >>> 11 & 1023) / 1023 * (max_y - min_y) + min_y;\n const z = (packed_position2 & 2047) / 2047 * (max_z - min_z) + min_z;\n const r0 = ((packed_rotation2 >>> 20 & 1023) / 1023 - 0.5) * SQRT2;\n const r1 = ((packed_rotation2 >>> 10 & 1023) / 1023 - 0.5) * SQRT2;\n const r2 = ((packed_rotation2 & 1023) / 1023 - 0.5) * SQRT2;\n const rr = Math.sqrt(Math.max(0, 1 - r0 * r0 - r1 * r1 - r2 * r2));\n const rOrder = packed_rotation2 >>> 30;\n const quatX = rOrder === 0 ? r0 : rOrder === 1 ? rr : r1;\n const quatY = rOrder <= 1 ? r1 : rOrder === 2 ? rr : r2;\n const quatZ = rOrder <= 2 ? r2 : rr;\n const quatW = rOrder === 0 ? rr : r0;\n const scaleX = Math.exp(\n (packed_scale2 >>> 21 & 2047) / 2047 * (max_scale_x - min_scale_x) + min_scale_x\n );\n const scaleY = Math.exp(\n (packed_scale2 >>> 11 & 1023) / 1023 * (max_scale_y - min_scale_y) + min_scale_y\n );\n const scaleZ = Math.exp(\n (packed_scale2 & 2047) / 2047 * (max_scale_z - min_scale_z) + min_scale_z\n );\n const r = (packed_color2 >>> 24 & 255) / 255 * (max_r - min_r) + min_r;\n const g = (packed_color2 >>> 16 & 255) / 255 * (max_g - min_g) + min_g;\n const b = (packed_color2 >>> 8 & 255) / 255 * (max_b - min_b) + min_b;\n const opacity = (packed_color2 & 255) / 255;\n splatCallback(\n index,\n x2,\n y,\n z,\n scaleX,\n scaleY,\n scaleZ,\n quatX,\n quatY,\n quatZ,\n quatW,\n opacity,\n r,\n g,\n b\n );\n };\n }\n const elementCallback = (element) => {\n if (element.name === "chunk") {\n if (this.comments.some(\n (comment) => comment.toLowerCase().includes("supersplat")\n )) {\n return initSuperSplat(element);\n }\n }\n if (isSuperSplat) {\n return decodeSuperSplat(element);\n }\n if (element.name !== "vertex") {\n return null;\n }\n const {\n x: x2,\n y,\n z,\n scale_0,\n scale_1,\n scale_2,\n rot_0,\n rot_1,\n rot_2,\n rot_3,\n opacity,\n f_dc_0,\n f_dc_1,\n f_dc_2,\n red,\n green,\n blue,\n alpha\n } = element.properties;\n if (!x2 || !y || !z) {\n throw new Error("Missing PLY properties: x, y, z");\n }\n const hasScales = scale_0 && scale_1 && scale_2;\n const hasRots = rot_0 && rot_1 && rot_2 && rot_3;\n const alphaDiv = alpha != null ? FIELD_SCALE[alpha.type] : 1;\n const redDiv = red != null ? FIELD_SCALE[red.type] : 1;\n const greenDiv = green != null ? FIELD_SCALE[green.type] : 1;\n const blueDiv = blue != null ? FIELD_SCALE[blue.type] : 1;\n numSh = getNumSh(element.properties);\n prepareSh();\n return (index, item) => {\n const scaleX = hasScales ? Math.exp(item.scale_0) : _PlyReader.defaultPointScale;\n const scaleY = hasScales ? Math.exp(item.scale_1) : _PlyReader.defaultPointScale;\n const scaleZ = hasScales ? Math.exp(item.scale_2) : _PlyReader.defaultPointScale;\n const quatX = hasRots ? item.rot_1 : 0;\n const quatY = hasRots ? item.rot_2 : 0;\n const quatZ = hasRots ? item.rot_3 : 0;\n const quatW = hasRots ? item.rot_0 : 1;\n const op = opacity != null ? 1 / (1 + Math.exp(-item.opacity)) : alpha != null ? item.alpha / alphaDiv : 1;\n const r = f_dc_0 != null ? item.f_dc_0 * SH_C0$1 + 0.5 : red != null ? item.red / redDiv : 1;\n const g = f_dc_1 != null ? item.f_dc_1 * SH_C0$1 + 0.5 : green != null ? item.green / greenDiv : 1;\n const b = f_dc_2 != null ? item.f_dc_2 * SH_C0$1 + 0.5 : blue != null ? item.blue / blueDiv : 1;\n splatCallback(\n index,\n item.x,\n item.y,\n item.z,\n scaleX,\n scaleY,\n scaleZ,\n quatX,\n quatY,\n quatZ,\n quatW,\n op,\n r,\n g,\n b\n );\n if (shCallback && sh1) {\n if (sh1) {\n for (const [i2, key] of sh1Props.entries()) {\n sh1[i2] = item[key];\n }\n }\n if (sh2) {\n for (const [i2, key] of sh2Props.entries()) {\n sh2[i2] = item[key];\n }\n }\n if (sh3) {\n for (const [i2, key] of sh3Props.entries()) {\n sh3[i2] = item[key];\n }\n }\n shCallback(index, sh1, sh2, sh3);\n }\n };\n };\n this.parseData(elementCallback);\n }\n // Inject RGBA values into original PLY file, which can be used to modify\n // the color/opacity of the Gsplats and write out the modified PLY file.\n injectRgba(rgba) {\n let offset = 0;\n const data = this.data;\n if (data == null) {\n throw new Error("No parsed data");\n }\n if (rgba.length !== this.numSplats * 4) {\n throw new Error("Invalid RGBA array length");\n }\n for (const elementName in this.elements) {\n const element = this.elements[elementName];\n const { count, properties } = element;\n const parsers = [];\n let rgbaOffset = 0;\n const isVertex = elementName === "vertex";\n if (isVertex) {\n for (const name of ["opacity", "f_dc_0", "f_dc_1", "f_dc_2"]) {\n if (!properties[name] || properties[name].type !== "float") {\n throw new Error(`Can\'t injectRgba due to property: ${name}`);\n }\n }\n }\n for (const [propertyName, property] of Object.entries(properties)) {\n if (!property.isList) {\n if (isVertex) {\n if (propertyName === "f_dc_0" || propertyName === "f_dc_1" || propertyName === "f_dc_2") {\n const component = Number.parseInt(\n propertyName.slice("f_dc_".length)\n );\n parsers.push(() => {\n const value = (rgba[rgbaOffset + component] / 255 - 0.5) / SH_C0$1;\n SET_FIELD[property.type](\n data,\n offset,\n this.littleEndian,\n value\n );\n });\n } else if (propertyName === "opacity") {\n parsers.push(() => {\n const value = Math.max(\n -100,\n Math.min(\n 100,\n -Math.log(1 / (rgba[rgbaOffset + 3] / 255) - 1)\n )\n );\n SET_FIELD[property.type](\n data,\n offset,\n this.littleEndian,\n value\n );\n });\n }\n }\n parsers.push(() => {\n offset += FIELD_BYTES[property.type];\n });\n } else {\n parsers.push(() => {\n const length = PARSE_FIELD[property.countType](\n data,\n offset,\n this.littleEndian\n );\n offset += FIELD_BYTES[property.countType];\n offset += length * FIELD_BYTES[property.type];\n });\n }\n }\n for (let index = 0; index < count; index++) {\n for (const parser of parsers) {\n parser();\n }\n if (isVertex) {\n rgbaOffset += 4;\n }\n }\n }\n }\n };\n _PlyReader.defaultPointScale = 1e-3;\n let PlyReader = _PlyReader;\n const SH_C0$1 = 0.28209479177387814;\n const PARSE_FIELD = {\n char: (data, offset, littleEndian) => {\n return data.getInt8(offset);\n },\n uchar: (data, offset, littleEndian) => {\n return data.getUint8(offset);\n },\n short: (data, offset, littleEndian) => {\n return data.getInt16(offset, littleEndian);\n },\n ushort: (data, offset, littleEndian) => {\n return data.getUint16(offset, littleEndian);\n },\n int: (data, offset, littleEndian) => {\n return data.getInt32(offset, littleEndian);\n },\n uint: (data, offset, littleEndian) => {\n return data.getUint32(offset, littleEndian);\n },\n float: (data, offset, littleEndian) => {\n return data.getFloat32(offset, littleEndian);\n },\n double: (data, offset, littleEndian) => {\n return data.getFloat64(offset, littleEndian);\n }\n };\n const SET_FIELD = {\n char: (data, offset, littleEndian, value) => {\n data.setInt8(offset, value);\n },\n uchar: (data, offset, littleEndian, value) => {\n data.setUint8(offset, value);\n },\n short: (data, offset, littleEndian, value) => {\n data.setInt16(offset, value, littleEndian);\n },\n ushort: (data, offset, littleEndian, value) => {\n data.setUint16(offset, value, littleEndian);\n },\n int: (data, offset, littleEndian, value) => {\n data.setInt32(offset, value, littleEndian);\n },\n uint: (data, offset, littleEndian, value) => {\n data.setUint32(offset, value, littleEndian);\n },\n float: (data, offset, littleEndian, value) => {\n data.setFloat32(offset, value, littleEndian);\n },\n double: (data, offset, littleEndian, value) => {\n data.setFloat64(offset, value, littleEndian);\n }\n };\n const FIELD_BYTES = {\n char: 1,\n uchar: 1,\n short: 2,\n ushort: 2,\n int: 4,\n uint: 4,\n float: 4,\n double: 8\n };\n const FIELD_SCALE = {\n char: 127,\n uchar: 255,\n short: 32767,\n ushort: 65535,\n int: 2147483647,\n uint: 4294967295,\n float: 1,\n double: 1\n };\n const NUM_F_REST_TO_NUM_SH = {\n 0: 0,\n 9: 1,\n 24: 2,\n 45: 3\n };\n const NUM_SH_TO_NUM_F_REST = {\n 0: 0,\n 1: 9,\n 2: 24,\n 3: 45\n };\n function getNumSh(properties) {\n let num_f_rest = 0;\n while (properties[`f_rest_${num_f_rest}`]) {\n num_f_rest += 1;\n }\n const numSh = NUM_F_REST_TO_NUM_SH[num_f_rest];\n if (numSh == null) {\n throw new Error(`Unsupported number of SH coefficients: ${num_f_rest}`);\n }\n return numSh;\n }\n var u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n var fleb = new u8([\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 2,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 4,\n 4,\n 5,\n 5,\n 5,\n 5,\n 0,\n /* unused */\n 0,\n 0,\n /* impossible */\n 0\n ]);\n var fdeb = new u8([\n 0,\n 0,\n 0,\n 0,\n 1,\n 1,\n 2,\n 2,\n 3,\n 3,\n 4,\n 4,\n 5,\n 5,\n 6,\n 6,\n 7,\n 7,\n 8,\n 8,\n 9,\n 9,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n /* unused */\n 0,\n 0\n ]);\n var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n var freb = function(eb, start) {\n var b = new u16(31);\n for (var i2 = 0; i2 < 31; ++i2) {\n b[i2] = start += 1 << eb[i2 - 1];\n }\n var r = new i32(b[30]);\n for (var i2 = 1; i2 < 30; ++i2) {\n for (var j = b[i2]; j < b[i2 + 1]; ++j) {\n r[j] = j - b[i2] << 5 | i2;\n }\n }\n return { b, r };\n };\n var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n fl[28] = 258, revfl[258] = 28;\n var _b = freb(fdeb, 0), fd = _b.b;\n var rev = new u16(32768);\n for (var i = 0; i < 32768; ++i) {\n var x = (i & 43690) >> 1 | (i & 21845) << 1;\n x = (x & 52428) >> 2 | (x & 13107) << 2;\n x = (x & 61680) >> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1;\n }\n var hMap = function(cd, mb, r) {\n var s = cd.length;\n var i2 = 0;\n var l = new u16(mb);\n for (; i2 < s; ++i2) {\n if (cd[i2])\n ++l[cd[i2] - 1];\n }\n var le = new u16(mb);\n for (i2 = 1; i2 < mb; ++i2) {\n le[i2] = le[i2 - 1] + l[i2 - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i2 = 0; i2 < s; ++i2) {\n if (cd[i2]) {\n var sv = i2 << 4 | cd[i2];\n var r_1 = mb - cd[i2];\n var v = le[cd[i2] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i2 = 0; i2 < s; ++i2) {\n if (cd[i2]) {\n co[i2] = rev[le[cd[i2] - 1]++] >> 15 - cd[i2];\n }\n }\n }\n return co;\n };\n var flt = new u8(288);\n for (var i = 0; i < 144; ++i)\n flt[i] = 8;\n for (var i = 144; i < 256; ++i)\n flt[i] = 9;\n for (var i = 256; i < 280; ++i)\n flt[i] = 7;\n for (var i = 280; i < 288; ++i)\n flt[i] = 8;\n var fdt = new u8(32);\n for (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n var flrm = /* @__PURE__ */ hMap(flt, 9, 1);\n var fdrm = /* @__PURE__ */ hMap(fdt, 5, 1);\n var max = function(a) {\n var m = a[0];\n for (var i2 = 1; i2 < a.length; ++i2) {\n if (a[i2] > m)\n m = a[i2];\n }\n return m;\n };\n var bits = function(d, p, m) {\n var o = p / 8 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n };\n var bits16 = function(d, p) {\n var o = p / 8 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n };\n var shft = function(p) {\n return (p + 7) / 8 | 0;\n };\n var slc = function(v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n return new u8(v.subarray(s, e));\n };\n var ec = [\n "unexpected EOF",\n "invalid block type",\n "invalid length/literal",\n "invalid distance",\n "stream finished",\n "no stream handler",\n ,\n "no callback",\n "invalid UTF-8 data",\n "extra field too long",\n "date not in range 1980-2099",\n "filename too long",\n "stream finishing",\n "invalid zip data"\n // determined by unknown compression method\n ];\n var err = function(ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n };\n var inflt = function(dat, st, buf, dict) {\n var sl = dat.length, dl = 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n var resize = noBuf || st.i != 2;\n var noSt = st.i;\n if (noBuf)\n buf = new u8(sl * 3);\n var cbuf = function(l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n } else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i2 = 0; i2 < hcLen; ++i2) {\n clt[clim[i2]] = bits(dat, pos + i2 * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i2 = 0; i2 < tl; ) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >> 4;\n if (s < 16) {\n ldt[i2++] = s;\n } else {\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i2 - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i2++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i2 = sym - 257, b = fleb[i2];\n add = bits(dat, pos, (1 << b) - 1) + fl[i2];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n };\n var et = /* @__PURE__ */ new u8(0);\n var gzs = function(d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, "invalid gzip data");\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n };\n var Inflate = /* @__PURE__ */ function() {\n function Inflate2(opts, cb) {\n if (typeof opts == "function")\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate2.prototype.e = function(c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate2.prototype.c = function(final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, this.s.p / 8 | 0), this.s.p &= 7;\n };\n Inflate2.prototype.push = function(chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate2;\n }();\n var Gunzip = /* @__PURE__ */ function() {\n function Gunzip2(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n Gunzip2.prototype.push = function(chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n } else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n Inflate.prototype.c.call(this, final);\n if (this.s.f && !this.s.l && !final) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n };\n return Gunzip2;\n }();\n var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder();\n var tds = 0;\n try {\n td.decode(et, { stream: true });\n tds = 1;\n } catch (e) {\n }\n /**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\n const REVISION = "172";\n const NoColorSpace = "";\n const SRGBColorSpace = "srgb";\n const LinearSRGBColorSpace = "srgb-linear";\n const LinearTransfer = "linear";\n const SRGBTransfer = "srgb";\n function clamp(value, min, max2) {\n return Math.max(min, Math.min(max2, value));\n }\n function euclideanModulo(n, m) {\n return (n % m + m) % m;\n }\n function lerp(x2, y, t) {\n return (1 - t) * x2 + t * y;\n }\n class Matrix3 {\n constructor(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\n Matrix3.prototype.isMatrix3 = true;\n this.elements = [\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 1\n ];\n if (n11 !== void 0) {\n this.set(n11, n12, n13, n21, n22, n23, n31, n32, n33);\n }\n }\n set(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\n const te = this.elements;\n te[0] = n11;\n te[1] = n21;\n te[2] = n31;\n te[3] = n12;\n te[4] = n22;\n te[5] = n32;\n te[6] = n13;\n te[7] = n23;\n te[8] = n33;\n return this;\n }\n identity() {\n this.set(\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 1\n );\n return this;\n }\n copy(m) {\n const te = this.elements;\n const me = m.elements;\n te[0] = me[0];\n te[1] = me[1];\n te[2] = me[2];\n te[3] = me[3];\n te[4] = me[4];\n te[5] = me[5];\n te[6] = me[6];\n te[7] = me[7];\n te[8] = me[8];\n return this;\n }\n extractBasis(xAxis, yAxis, zAxis) {\n xAxis.setFromMatrix3Column(this, 0);\n yAxis.setFromMatrix3Column(this, 1);\n zAxis.setFromMatrix3Column(this, 2);\n return this;\n }\n setFromMatrix4(m) {\n const me = m.elements;\n this.set(\n me[0],\n me[4],\n me[8],\n me[1],\n me[5],\n me[9],\n me[2],\n me[6],\n me[10]\n );\n return this;\n }\n multiply(m) {\n return this.multiplyMatrices(this, m);\n }\n premultiply(m) {\n return this.multiplyMatrices(m, this);\n }\n multiplyMatrices(a, b) {\n const ae = a.elements;\n const be = b.elements;\n const te = this.elements;\n const a11 = ae[0], a12 = ae[3], a13 = ae[6];\n const a21 = ae[1], a22 = ae[4], a23 = ae[7];\n const a31 = ae[2], a32 = ae[5], a33 = ae[8];\n const b11 = be[0], b12 = be[3], b13 = be[6];\n const b21 = be[1], b22 = be[4], b23 = be[7];\n const b31 = be[2], b32 = be[5], b33 = be[8];\n te[0] = a11 * b11 + a12 * b21 + a13 * b31;\n te[3] = a11 * b12 + a12 * b22 + a13 * b32;\n te[6] = a11 * b13 + a12 * b23 + a13 * b33;\n te[1] = a21 * b11 + a22 * b21 + a23 * b31;\n te[4] = a21 * b12 + a22 * b22 + a23 * b32;\n te[7] = a21 * b13 + a22 * b23 + a23 * b33;\n te[2] = a31 * b11 + a32 * b21 + a33 * b31;\n te[5] = a31 * b12 + a32 * b22 + a33 * b32;\n te[8] = a31 * b13 + a32 * b23 + a33 * b33;\n return this;\n }\n multiplyScalar(s) {\n const te = this.elements;\n te[0] *= s;\n te[3] *= s;\n te[6] *= s;\n te[1] *= s;\n te[4] *= s;\n te[7] *= s;\n te[2] *= s;\n te[5] *= s;\n te[8] *= s;\n return this;\n }\n determinant() {\n const te = this.elements;\n const a = te[0], b = te[1], c = te[2], d = te[3], e = te[4], f = te[5], g = te[6], h = te[7], i2 = te[8];\n return a * e * i2 - a * f * h - b * d * i2 + b * f * g + c * d * h - c * e * g;\n }\n invert() {\n const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n12 = te[3], n22 = te[4], n32 = te[5], n13 = te[6], n23 = te[7], n33 = te[8], t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13, det = n11 * t11 + n21 * t12 + n31 * t13;\n if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);\n const detInv = 1 / det;\n te[0] = t11 * detInv;\n te[1] = (n31 * n23 - n33 * n21) * detInv;\n te[2] = (n32 * n21 - n31 * n22) * detInv;\n te[3] = t12 * detInv;\n te[4] = (n33 * n11 - n31 * n13) * detInv;\n te[5] = (n31 * n12 - n32 * n11) * detInv;\n te[6] = t13 * detInv;\n te[7] = (n21 * n13 - n23 * n11) * detInv;\n te[8] = (n22 * n11 - n21 * n12) * detInv;\n return this;\n }\n transpose() {\n let tmp;\n const m = this.elements;\n tmp = m[1];\n m[1] = m[3];\n m[3] = tmp;\n tmp = m[2];\n m[2] = m[6];\n m[6] = tmp;\n tmp = m[5];\n m[5] = m[7];\n m[7] = tmp;\n return this;\n }\n getNormalMatrix(matrix4) {\n return this.setFromMatrix4(matrix4).invert().transpose();\n }\n transposeIntoArray(r) {\n const m = this.elements;\n r[0] = m[0];\n r[1] = m[3];\n r[2] = m[6];\n r[3] = m[1];\n r[4] = m[4];\n r[5] = m[7];\n r[6] = m[2];\n r[7] = m[5];\n r[8] = m[8];\n return this;\n }\n setUvTransform(tx, ty, sx, sy, rotation, cx, cy) {\n const c = Math.cos(rotation);\n const s = Math.sin(rotation);\n this.set(\n sx * c,\n sx * s,\n -sx * (c * cx + s * cy) + cx + tx,\n -sy * s,\n sy * c,\n -sy * (-s * cx + c * cy) + cy + ty,\n 0,\n 0,\n 1\n );\n return this;\n }\n //\n scale(sx, sy) {\n this.premultiply(_m3.makeScale(sx, sy));\n return this;\n }\n rotate(theta) {\n this.premultiply(_m3.makeRotation(-theta));\n return this;\n }\n translate(tx, ty) {\n this.premultiply(_m3.makeTranslation(tx, ty));\n return this;\n }\n // for 2D Transforms\n makeTranslation(x2, y) {\n if (x2.isVector2) {\n this.set(\n 1,\n 0,\n x2.x,\n 0,\n 1,\n x2.y,\n 0,\n 0,\n 1\n );\n } else {\n this.set(\n 1,\n 0,\n x2,\n 0,\n 1,\n y,\n 0,\n 0,\n 1\n );\n }\n return this;\n }\n makeRotation(theta) {\n const c = Math.cos(theta);\n const s = Math.sin(theta);\n this.set(\n c,\n -s,\n 0,\n s,\n c,\n 0,\n 0,\n 0,\n 1\n );\n return this;\n }\n makeScale(x2, y) {\n this.set(\n x2,\n 0,\n 0,\n 0,\n y,\n 0,\n 0,\n 0,\n 1\n );\n return this;\n }\n //\n equals(matrix) {\n const te = this.elements;\n const me = matrix.elements;\n for (let i2 = 0; i2 < 9; i2++) {\n if (te[i2] !== me[i2]) return false;\n }\n return true;\n }\n fromArray(array, offset = 0) {\n for (let i2 = 0; i2 < 9; i2++) {\n this.elements[i2] = array[i2 + offset];\n }\n return this;\n }\n toArray(array = [], offset = 0) {\n const te = this.elements;\n array[offset] = te[0];\n array[offset + 1] = te[1];\n array[offset + 2] = te[2];\n array[offset + 3] = te[3];\n array[offset + 4] = te[4];\n array[offset + 5] = te[5];\n array[offset + 6] = te[6];\n array[offset + 7] = te[7];\n array[offset + 8] = te[8];\n return array;\n }\n clone() {\n return new this.constructor().fromArray(this.elements);\n }\n }\n const _m3 = /* @__PURE__ */ new Matrix3();\n const LINEAR_REC709_TO_XYZ = /* @__PURE__ */ new Matrix3().set(\n 0.4123908,\n 0.3575843,\n 0.1804808,\n 0.212639,\n 0.7151687,\n 0.0721923,\n 0.0193308,\n 0.1191948,\n 0.9505322\n );\n const XYZ_TO_LINEAR_REC709 = /* @__PURE__ */ new Matrix3().set(\n 3.2409699,\n -1.5373832,\n -0.4986108,\n -0.9692436,\n 1.8759675,\n 0.0415551,\n 0.0556301,\n -0.203977,\n 1.0569715\n );\n function createColorManagement() {\n const ColorManagement2 = {\n enabled: true,\n workingColorSpace: LinearSRGBColorSpace,\n /**\n * Implementations of supported color spaces.\n *\n * Required:\n * - primaries: chromaticity coordinates [ rx ry gx gy bx by ]\n * - whitePoint: reference white [ x y ]\n * - transfer: transfer function (pre-defined)\n * - toXYZ: Matrix3 RGB to XYZ transform\n * - fromXYZ: Matrix3 XYZ to RGB transform\n * - luminanceCoefficients: RGB luminance coefficients\n *\n * Optional:\n * - outputColorSpaceConfig: { drawingBufferColorSpace: ColorSpace }\n * - workingColorSpaceConfig: { unpackColorSpace: ColorSpace }\n *\n * Reference:\n * - https://www.russellcottrell.com/photo/matrixCalculator.htm\n */\n spaces: {},\n convert: function(color, sourceColorSpace, targetColorSpace) {\n if (this.enabled === false || sourceColorSpace === targetColorSpace || !sourceColorSpace || !targetColorSpace) {\n return color;\n }\n if (this.spaces[sourceColorSpace].transfer === SRGBTransfer) {\n color.r = SRGBToLinear(color.r);\n color.g = SRGBToLinear(color.g);\n color.b = SRGBToLinear(color.b);\n }\n if (this.spaces[sourceColorSpace].primaries !== this.spaces[targetColorSpace].primaries) {\n color.applyMatrix3(this.spaces[sourceColorSpace].toXYZ);\n color.applyMatrix3(this.spaces[targetColorSpace].fromXYZ);\n }\n if (this.spaces[targetColorSpace].transfer === SRGBTransfer) {\n color.r = LinearToSRGB(color.r);\n color.g = LinearToSRGB(color.g);\n color.b = LinearToSRGB(color.b);\n }\n return color;\n },\n fromWorkingColorSpace: function(color, targetColorSpace) {\n return this.convert(color, this.workingColorSpace, targetColorSpace);\n },\n toWorkingColorSpace: function(color, sourceColorSpace) {\n return this.convert(color, sourceColorSpace, this.workingColorSpace);\n },\n getPrimaries: function(colorSpace) {\n return this.spaces[colorSpace].primaries;\n },\n getTransfer: function(colorSpace) {\n if (colorSpace === NoColorSpace) return LinearTransfer;\n return this.spaces[colorSpace].transfer;\n },\n getLuminanceCoefficients: function(target, colorSpace = this.workingColorSpace) {\n return target.fromArray(this.spaces[colorSpace].luminanceCoefficients);\n },\n define: function(colorSpaces) {\n Object.assign(this.spaces, colorSpaces);\n },\n // Internal APIs\n _getMatrix: function(targetMatrix, sourceColorSpace, targetColorSpace) {\n return targetMatrix.copy(this.spaces[sourceColorSpace].toXYZ).multiply(this.spaces[targetColorSpace].fromXYZ);\n },\n _getDrawingBufferColorSpace: function(colorSpace) {\n return this.spaces[colorSpace].outputColorSpaceConfig.drawingBufferColorSpace;\n },\n _getUnpackColorSpace: function(colorSpace = this.workingColorSpace) {\n return this.spaces[colorSpace].workingColorSpaceConfig.unpackColorSpace;\n }\n };\n const REC709_PRIMARIES = [0.64, 0.33, 0.3, 0.6, 0.15, 0.06];\n const REC709_LUMINANCE_COEFFICIENTS = [0.2126, 0.7152, 0.0722];\n const D65 = [0.3127, 0.329];\n ColorManagement2.define({\n [LinearSRGBColorSpace]: {\n primaries: REC709_PRIMARIES,\n whitePoint: D65,\n transfer: LinearTransfer,\n toXYZ: LINEAR_REC709_TO_XYZ,\n fromXYZ: XYZ_TO_LINEAR_REC709,\n luminanceCoefficients: REC709_LUMINANCE_COEFFICIENTS,\n workingColorSpaceConfig: { unpackColorSpace: SRGBColorSpace },\n outputColorSpaceConfig: { drawingBufferColorSpace: SRGBColorSpace }\n },\n [SRGBColorSpace]: {\n primaries: REC709_PRIMARIES,\n whitePoint: D65,\n transfer: SRGBTransfer,\n toXYZ: LINEAR_REC709_TO_XYZ,\n fromXYZ: XYZ_TO_LINEAR_REC709,\n luminanceCoefficients: REC709_LUMINANCE_COEFFICIENTS,\n outputColorSpaceConfig: { drawingBufferColorSpace: SRGBColorSpace }\n }\n });\n return ColorManagement2;\n }\n const ColorManagement = /* @__PURE__ */ createColorManagement();\n function SRGBToLinear(c) {\n return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\n }\n function LinearToSRGB(c) {\n return c < 31308e-7 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;\n }\n class Quaternion {\n constructor(x2 = 0, y = 0, z = 0, w = 1) {\n this.isQuaternion = true;\n this._x = x2;\n this._y = y;\n this._z = z;\n this._w = w;\n }\n static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) {\n let x0 = src0[srcOffset0 + 0], y0 = src0[srcOffset0 + 1], z0 = src0[srcOffset0 + 2], w0 = src0[srcOffset0 + 3];\n const x1 = src1[srcOffset1 + 0], y1 = src1[srcOffset1 + 1], z1 = src1[srcOffset1 + 2], w1 = src1[srcOffset1 + 3];\n if (t === 0) {\n dst[dstOffset + 0] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n return;\n }\n if (t === 1) {\n dst[dstOffset + 0] = x1;\n dst[dstOffset + 1] = y1;\n dst[dstOffset + 2] = z1;\n dst[dstOffset + 3] = w1;\n return;\n }\n if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {\n let s = 1 - t;\n const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, dir = cos >= 0 ? 1 : -1, sqrSin = 1 - cos * cos;\n if (sqrSin > Number.EPSILON) {\n const sin = Math.sqrt(sqrSin), len = Math.atan2(sin, cos * dir);\n s = Math.sin(s * len) / sin;\n t = Math.sin(t * len) / sin;\n }\n const tDir = t * dir;\n x0 = x0 * s + x1 * tDir;\n y0 = y0 * s + y1 * tDir;\n z0 = z0 * s + z1 * tDir;\n w0 = w0 * s + w1 * tDir;\n if (s === 1 - t) {\n const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);\n x0 *= f;\n y0 *= f;\n z0 *= f;\n w0 *= f;\n }\n }\n dst[dstOffset] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n }\n static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) {\n const x0 = src0[srcOffset0];\n const y0 = src0[srcOffset0 + 1];\n const z0 = src0[srcOffset0 + 2];\n const w0 = src0[srcOffset0 + 3];\n const x1 = src1[srcOffset1];\n const y1 = src1[srcOffset1 + 1];\n const z1 = src1[srcOffset1 + 2];\n const w1 = src1[srcOffset1 + 3];\n dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n return dst;\n }\n get x() {\n return this._x;\n }\n set x(value) {\n this._x = value;\n this._onChangeCallback();\n }\n get y() {\n return this._y;\n }\n set y(value) {\n this._y = value;\n this._onChangeCallback();\n }\n get z() {\n return this._z;\n }\n set z(value) {\n this._z = value;\n this._onChangeCallback();\n }\n get w() {\n return this._w;\n }\n set w(value) {\n this._w = value;\n this._onChangeCallback();\n }\n set(x2, y, z, w) {\n this._x = x2;\n this._y = y;\n this._z = z;\n this._w = w;\n this._onChangeCallback();\n return this;\n }\n clone() {\n return new this.constructor(this._x, this._y, this._z, this._w);\n }\n copy(quaternion) {\n this._x = quaternion.x;\n this._y = quaternion.y;\n this._z = quaternion.z;\n this._w = quaternion.w;\n this._onChangeCallback();\n return this;\n }\n setFromEuler(euler, update = true) {\n const x2 = euler._x, y = euler._y, z = euler._z, order = euler._order;\n const cos = Math.cos;\n const sin = Math.sin;\n const c1 = cos(x2 / 2);\n const c2 = cos(y / 2);\n const c3 = cos(z / 2);\n const s1 = sin(x2 / 2);\n const s2 = sin(y / 2);\n const s3 = sin(z / 2);\n switch (order) {\n case "XYZ":\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case "YXZ":\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n case "ZXY":\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case "ZYX":\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n case "YZX":\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case "XZY":\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n default:\n console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + order);\n }\n if (update === true) this._onChangeCallback();\n return this;\n }\n setFromAxisAngle(axis, angle) {\n const halfAngle = angle / 2, s = Math.sin(halfAngle);\n this._x = axis.x * s;\n this._y = axis.y * s;\n this._z = axis.z * s;\n this._w = Math.cos(halfAngle);\n this._onChangeCallback();\n return this;\n }\n setFromRotationMatrix(m) {\n const te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10], trace = m11 + m22 + m33;\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n this._w = 0.25 / s;\n this._x = (m32 - m23) * s;\n this._y = (m13 - m31) * s;\n this._z = (m21 - m12) * s;\n } else if (m11 > m22 && m11 > m33) {\n const s = 2 * Math.sqrt(1 + m11 - m22 - m33);\n this._w = (m32 - m23) / s;\n this._x = 0.25 * s;\n this._y = (m12 + m21) / s;\n this._z = (m13 + m31) / s;\n } else if (m22 > m33) {\n const s = 2 * Math.sqrt(1 + m22 - m11 - m33);\n this._w = (m13 - m31) / s;\n this._x = (m12 + m21) / s;\n this._y = 0.25 * s;\n this._z = (m23 + m32) / s;\n } else {\n const s = 2 * Math.sqrt(1 + m33 - m11 - m22);\n this._w = (m21 - m12) / s;\n this._x = (m13 + m31) / s;\n this._y = (m23 + m32) / s;\n this._z = 0.25 * s;\n }\n this._onChangeCallback();\n return this;\n }\n setFromUnitVectors(vFrom, vTo) {\n let r = vFrom.dot(vTo) + 1;\n if (r < Number.EPSILON) {\n r = 0;\n if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) {\n this._x = -vFrom.y;\n this._y = vFrom.x;\n this._z = 0;\n this._w = r;\n } else {\n this._x = 0;\n this._y = -vFrom.z;\n this._z = vFrom.y;\n this._w = r;\n }\n } else {\n this._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n this._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n this._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n this._w = r;\n }\n return this.normalize();\n }\n angleTo(q) {\n return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1)));\n }\n rotateTowards(q, step) {\n const angle = this.angleTo(q);\n if (angle === 0) return this;\n const t = Math.min(1, step / angle);\n this.slerp(q, t);\n return this;\n }\n identity() {\n return this.set(0, 0, 0, 1);\n }\n invert() {\n return this.conjugate();\n }\n conjugate() {\n this._x *= -1;\n this._y *= -1;\n this._z *= -1;\n this._onChangeCallback();\n return this;\n }\n dot(v) {\n return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n }\n lengthSq() {\n return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n }\n length() {\n return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w);\n }\n normalize() {\n let l = this.length();\n if (l === 0) {\n this._x = 0;\n this._y = 0;\n this._z = 0;\n this._w = 1;\n } else {\n l = 1 / l;\n this._x = this._x * l;\n this._y = this._y * l;\n this._z = this._z * l;\n this._w = this._w * l;\n }\n this._onChangeCallback();\n return this;\n }\n multiply(q) {\n return this.multiplyQuaternions(this, q);\n }\n premultiply(q) {\n return this.multiplyQuaternions(q, this);\n }\n multiplyQuaternions(a, b) {\n const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n this._onChangeCallback();\n return this;\n }\n slerp(qb, t) {\n if (t === 0) return this;\n if (t === 1) return this.copy(qb);\n const x2 = this._x, y = this._y, z = this._z, w = this._w;\n let cosHalfTheta = w * qb._w + x2 * qb._x + y * qb._y + z * qb._z;\n if (cosHalfTheta < 0) {\n this._w = -qb._w;\n this._x = -qb._x;\n this._y = -qb._y;\n this._z = -qb._z;\n cosHalfTheta = -cosHalfTheta;\n } else {\n this.copy(qb);\n }\n if (cosHalfTheta >= 1) {\n this._w = w;\n this._x = x2;\n this._y = y;\n this._z = z;\n return this;\n }\n const sqrSinHalfTheta = 1 - cosHalfTheta * cosHalfTheta;\n if (sqrSinHalfTheta <= Number.EPSILON) {\n const s = 1 - t;\n this._w = s * w + t * this._w;\n this._x = s * x2 + t * this._x;\n this._y = s * y + t * this._y;\n this._z = s * z + t * this._z;\n this.normalize();\n return this;\n }\n const sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\n const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\n const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta, ratioB = Math.sin(t * halfTheta) / sinHalfTheta;\n this._w = w * ratioA + this._w * ratioB;\n this._x = x2 * ratioA + this._x * ratioB;\n this._y = y * ratioA + this._y * ratioB;\n this._z = z * ratioA + this._z * ratioB;\n this._onChangeCallback();\n return this;\n }\n slerpQuaternions(qa, qb, t) {\n return this.copy(qa).slerp(qb, t);\n }\n random() {\n const theta1 = 2 * Math.PI * Math.random();\n const theta2 = 2 * Math.PI * Math.random();\n const x0 = Math.random();\n const r1 = Math.sqrt(1 - x0);\n const r2 = Math.sqrt(x0);\n return this.set(\n r1 * Math.sin(theta1),\n r1 * Math.cos(theta1),\n r2 * Math.sin(theta2),\n r2 * Math.cos(theta2)\n );\n }\n equals(quaternion) {\n return quaternion._x === this._x && quaternion._y === this._y && quaternion._z === this._z && quaternion._w === this._w;\n }\n fromArray(array, offset = 0) {\n this._x = array[offset];\n this._y = array[offset + 1];\n this._z = array[offset + 2];\n this._w = array[offset + 3];\n this._onChangeCallback();\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this._x;\n array[offset + 1] = this._y;\n array[offset + 2] = this._z;\n array[offset + 3] = this._w;\n return array;\n }\n fromBufferAttribute(attribute, index) {\n this._x = attribute.getX(index);\n this._y = attribute.getY(index);\n this._z = attribute.getZ(index);\n this._w = attribute.getW(index);\n this._onChangeCallback();\n return this;\n }\n toJSON() {\n return this.toArray();\n }\n _onChange(callback) {\n this._onChangeCallback = callback;\n return this;\n }\n _onChangeCallback() {\n }\n *[Symbol.iterator]() {\n yield this._x;\n yield this._y;\n yield this._z;\n yield this._w;\n }\n }\n class Vector3 {\n constructor(x2 = 0, y = 0, z = 0) {\n Vector3.prototype.isVector3 = true;\n this.x = x2;\n this.y = y;\n this.z = z;\n }\n set(x2, y, z) {\n if (z === void 0) z = this.z;\n this.x = x2;\n this.y = y;\n this.z = z;\n return this;\n }\n setScalar(scalar) {\n this.x = scalar;\n this.y = scalar;\n this.z = scalar;\n return this;\n }\n setX(x2) {\n this.x = x2;\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n setZ(z) {\n this.z = z;\n return this;\n }\n setComponent(index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n case 2:\n this.z = value;\n break;\n default:\n throw new Error("index is out of range: " + index);\n }\n return this;\n }\n getComponent(index) {\n switch (index) {\n case 0:\n return this.x;\n case 1:\n return this.y;\n case 2:\n return this.z;\n default:\n throw new Error("index is out of range: " + index);\n }\n }\n clone() {\n return new this.constructor(this.x, this.y, this.z);\n }\n copy(v) {\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n return this;\n }\n add(v) {\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n return this;\n }\n addScalar(s) {\n this.x += s;\n this.y += s;\n this.z += s;\n return this;\n }\n addVectors(a, b) {\n this.x = a.x + b.x;\n this.y = a.y + b.y;\n this.z = a.z + b.z;\n return this;\n }\n addScaledVector(v, s) {\n this.x += v.x * s;\n this.y += v.y * s;\n this.z += v.z * s;\n return this;\n }\n sub(v) {\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n return this;\n }\n subScalar(s) {\n this.x -= s;\n this.y -= s;\n this.z -= s;\n return this;\n }\n subVectors(a, b) {\n this.x = a.x - b.x;\n this.y = a.y - b.y;\n this.z = a.z - b.z;\n return this;\n }\n multiply(v) {\n this.x *= v.x;\n this.y *= v.y;\n this.z *= v.z;\n return this;\n }\n multiplyScalar(scalar) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n return this;\n }\n multiplyVectors(a, b) {\n this.x = a.x * b.x;\n this.y = a.y * b.y;\n this.z = a.z * b.z;\n return this;\n }\n applyEuler(euler) {\n return this.applyQuaternion(_quaternion$4.setFromEuler(euler));\n }\n applyAxisAngle(axis, angle) {\n return this.applyQuaternion(_quaternion$4.setFromAxisAngle(axis, angle));\n }\n applyMatrix3(m) {\n const x2 = this.x, y = this.y, z = this.z;\n const e = m.elements;\n this.x = e[0] * x2 + e[3] * y + e[6] * z;\n this.y = e[1] * x2 + e[4] * y + e[7] * z;\n this.z = e[2] * x2 + e[5] * y + e[8] * z;\n return this;\n }\n applyNormalMatrix(m) {\n return this.applyMatrix3(m).normalize();\n }\n applyMatrix4(m) {\n const x2 = this.x, y = this.y, z = this.z;\n const e = m.elements;\n const w = 1 / (e[3] * x2 + e[7] * y + e[11] * z + e[15]);\n this.x = (e[0] * x2 + e[4] * y + e[8] * z + e[12]) * w;\n this.y = (e[1] * x2 + e[5] * y + e[9] * z + e[13]) * w;\n this.z = (e[2] * x2 + e[6] * y + e[10] * z + e[14]) * w;\n return this;\n }\n applyQuaternion(q) {\n const vx = this.x, vy = this.y, vz = this.z;\n const qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n const tx = 2 * (qy * vz - qz * vy);\n const ty = 2 * (qz * vx - qx * vz);\n const tz = 2 * (qx * vy - qy * vx);\n this.x = vx + qw * tx + qy * tz - qz * ty;\n this.y = vy + qw * ty + qz * tx - qx * tz;\n this.z = vz + qw * tz + qx * ty - qy * tx;\n return this;\n }\n project(camera) {\n return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);\n }\n unproject(camera) {\n return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);\n }\n transformDirection(m) {\n const x2 = this.x, y = this.y, z = this.z;\n const e = m.elements;\n this.x = e[0] * x2 + e[4] * y + e[8] * z;\n this.y = e[1] * x2 + e[5] * y + e[9] * z;\n this.z = e[2] * x2 + e[6] * y + e[10] * z;\n return this.normalize();\n }\n divide(v) {\n this.x /= v.x;\n this.y /= v.y;\n this.z /= v.z;\n return this;\n }\n divideScalar(scalar) {\n return this.multiplyScalar(1 / scalar);\n }\n min(v) {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n this.z = Math.min(this.z, v.z);\n return this;\n }\n max(v) {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n this.z = Math.max(this.z, v.z);\n return this;\n }\n clamp(min, max2) {\n this.x = clamp(this.x, min.x, max2.x);\n this.y = clamp(this.y, min.y, max2.y);\n this.z = clamp(this.z, min.z, max2.z);\n return this;\n }\n clampScalar(minVal, maxVal) {\n this.x = clamp(this.x, minVal, maxVal);\n this.y = clamp(this.y, minVal, maxVal);\n this.z = clamp(this.z, minVal, maxVal);\n return this;\n }\n clampLength(min, max2) {\n const length = this.length();\n return this.divideScalar(length || 1).multiplyScalar(clamp(length, min, max2));\n }\n floor() {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n this.z = Math.floor(this.z);\n return this;\n }\n ceil() {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n this.z = Math.ceil(this.z);\n return this;\n }\n round() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n this.z = Math.round(this.z);\n return this;\n }\n roundToZero() {\n this.x = Math.trunc(this.x);\n this.y = Math.trunc(this.y);\n this.z = Math.trunc(this.z);\n return this;\n }\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n dot(v) {\n return this.x * v.x + this.y * v.y + this.z * v.z;\n }\n // TODO lengthSquared?\n lengthSq() {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n manhattanLength() {\n return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\n }\n normalize() {\n return this.divideScalar(this.length() || 1);\n }\n setLength(length) {\n return this.normalize().multiplyScalar(length);\n }\n lerp(v, alpha) {\n this.x += (v.x - this.x) * alpha;\n this.y += (v.y - this.y) * alpha;\n this.z += (v.z - this.z) * alpha;\n return this;\n }\n lerpVectors(v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n this.z = v1.z + (v2.z - v1.z) * alpha;\n return this;\n }\n cross(v) {\n return this.crossVectors(this, v);\n }\n crossVectors(a, b) {\n const ax = a.x, ay = a.y, az = a.z;\n const bx = b.x, by = b.y, bz = b.z;\n this.x = ay * bz - az * by;\n this.y = az * bx - ax * bz;\n this.z = ax * by - ay * bx;\n return this;\n }\n projectOnVector(v) {\n const denominator = v.lengthSq();\n if (denominator === 0) return this.set(0, 0, 0);\n const scalar = v.dot(this) / denominator;\n return this.copy(v).multiplyScalar(scalar);\n }\n projectOnPlane(planeNormal) {\n _vector$c.copy(this).projectOnVector(planeNormal);\n return this.sub(_vector$c);\n }\n reflect(normal) {\n return this.sub(_vector$c.copy(normal).multiplyScalar(2 * this.dot(normal)));\n }\n angleTo(v) {\n const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\n if (denominator === 0) return Math.PI / 2;\n const theta = this.dot(v) / denominator;\n return Math.acos(clamp(theta, -1, 1));\n }\n distanceTo(v) {\n return Math.sqrt(this.distanceToSquared(v));\n }\n distanceToSquared(v) {\n const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n return dx * dx + dy * dy + dz * dz;\n }\n manhattanDistanceTo(v) {\n return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);\n }\n setFromSpherical(s) {\n return this.setFromSphericalCoords(s.radius, s.phi, s.theta);\n }\n setFromSphericalCoords(radius, phi, theta) {\n const sinPhiRadius = Math.sin(phi) * radius;\n this.x = sinPhiRadius * Math.sin(theta);\n this.y = Math.cos(phi) * radius;\n this.z = sinPhiRadius * Math.cos(theta);\n return this;\n }\n setFromCylindrical(c) {\n return this.setFromCylindricalCoords(c.radius, c.theta, c.y);\n }\n setFromCylindricalCoords(radius, theta, y) {\n this.x = radius * Math.sin(theta);\n this.y = y;\n this.z = radius * Math.cos(theta);\n return this;\n }\n setFromMatrixPosition(m) {\n const e = m.elements;\n this.x = e[12];\n this.y = e[13];\n this.z = e[14];\n return this;\n }\n setFromMatrixScale(m) {\n const sx = this.setFromMatrixColumn(m, 0).length();\n const sy = this.setFromMatrixColumn(m, 1).length();\n const sz = this.setFromMatrixColumn(m, 2).length();\n this.x = sx;\n this.y = sy;\n this.z = sz;\n return this;\n }\n setFromMatrixColumn(m, index) {\n return this.fromArray(m.elements, index * 4);\n }\n setFromMatrix3Column(m, index) {\n return this.fromArray(m.elements, index * 3);\n }\n setFromEuler(e) {\n this.x = e._x;\n this.y = e._y;\n this.z = e._z;\n return this;\n }\n setFromColor(c) {\n this.x = c.r;\n this.y = c.g;\n this.z = c.b;\n return this;\n }\n equals(v) {\n return v.x === this.x && v.y === this.y && v.z === this.z;\n }\n fromArray(array, offset = 0) {\n this.x = array[offset];\n this.y = array[offset + 1];\n this.z = array[offset + 2];\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this.x;\n array[offset + 1] = this.y;\n array[offset + 2] = this.z;\n return array;\n }\n fromBufferAttribute(attribute, index) {\n this.x = attribute.getX(index);\n this.y = attribute.getY(index);\n this.z = attribute.getZ(index);\n return this;\n }\n random() {\n this.x = Math.random();\n this.y = Math.random();\n this.z = Math.random();\n return this;\n }\n randomDirection() {\n const theta = Math.random() * Math.PI * 2;\n const u = Math.random() * 2 - 1;\n const c = Math.sqrt(1 - u * u);\n this.x = c * Math.cos(theta);\n this.y = u;\n this.z = c * Math.sin(theta);\n return this;\n }\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n }\n }\n const _vector$c = /* @__PURE__ */ new Vector3();\n const _quaternion$4 = /* @__PURE__ */ new Quaternion();\n const _colorKeywords = {\n "aliceblue": 15792383,\n "antiquewhite": 16444375,\n "aqua": 65535,\n "aquamarine": 8388564,\n "azure": 15794175,\n "beige": 16119260,\n "bisque": 16770244,\n "black": 0,\n "blanchedalmond": 16772045,\n "blue": 255,\n "blueviolet": 9055202,\n "brown": 10824234,\n "burlywood": 14596231,\n "cadetblue": 6266528,\n "chartreuse": 8388352,\n "chocolate": 13789470,\n "coral": 16744272,\n "cornflowerblue": 6591981,\n "cornsilk": 16775388,\n "crimson": 14423100,\n "cyan": 65535,\n "darkblue": 139,\n "darkcyan": 35723,\n "darkgoldenrod": 12092939,\n "darkgray": 11119017,\n "darkgreen": 25600,\n "darkgrey": 11119017,\n "darkkhaki": 12433259,\n "darkmagenta": 9109643,\n "darkolivegreen": 5597999,\n "darkorange": 16747520,\n "darkorchid": 10040012,\n "darkred": 9109504,\n "darksalmon": 15308410,\n "darkseagreen": 9419919,\n "darkslateblue": 4734347,\n "darkslategray": 3100495,\n "darkslategrey": 3100495,\n "darkturquoise": 52945,\n "darkviolet": 9699539,\n "deeppink": 16716947,\n "deepskyblue": 49151,\n "dimgray": 6908265,\n "dimgrey": 6908265,\n "dodgerblue": 2003199,\n "firebrick": 11674146,\n "floralwhite": 16775920,\n "forestgreen": 2263842,\n "fuchsia": 16711935,\n "gainsboro": 14474460,\n "ghostwhite": 16316671,\n "gold": 16766720,\n "goldenrod": 14329120,\n "gray": 8421504,\n "green": 32768,\n "greenyellow": 11403055,\n "grey": 8421504,\n "honeydew": 15794160,\n "hotpink": 16738740,\n "indianred": 13458524,\n "indigo": 4915330,\n "ivory": 16777200,\n "khaki": 15787660,\n "lavender": 15132410,\n "lavenderblush": 16773365,\n "lawngreen": 8190976,\n "lemonchiffon": 16775885,\n "lightblue": 11393254,\n "lightcoral": 15761536,\n "lightcyan": 14745599,\n "lightgoldenrodyellow": 16448210,\n "lightgray": 13882323,\n "lightgreen": 9498256,\n "lightgrey": 13882323,\n "lightpink": 16758465,\n "lightsalmon": 16752762,\n "lightseagreen": 2142890,\n "lightskyblue": 8900346,\n "lightslategray": 7833753,\n "lightslategrey": 7833753,\n "lightsteelblue": 11584734,\n "lightyellow": 16777184,\n "lime": 65280,\n "limegreen": 3329330,\n "linen": 16445670,\n "magenta": 16711935,\n "maroon": 8388608,\n "mediumaquamarine": 6737322,\n "mediumblue": 205,\n "mediumorchid": 12211667,\n "mediumpurple": 9662683,\n "mediumseagreen": 3978097,\n "mediumslateblue": 8087790,\n "mediumspringgreen": 64154,\n "mediumturquoise": 4772300,\n "mediumvioletred": 13047173,\n "midnightblue": 1644912,\n "mintcream": 16121850,\n "mistyrose": 16770273,\n "moccasin": 16770229,\n "navajowhite": 16768685,\n "navy": 128,\n "oldlace": 16643558,\n "olive": 8421376,\n "olivedrab": 7048739,\n "orange": 16753920,\n "orangered": 16729344,\n "orchid": 14315734,\n "palegoldenrod": 15657130,\n "palegreen": 10025880,\n "paleturquoise": 11529966,\n "palevioletred": 14381203,\n "papayawhip": 16773077,\n "peachpuff": 16767673,\n "peru": 13468991,\n "pink": 16761035,\n "plum": 14524637,\n "powderblue": 11591910,\n "purple": 8388736,\n "rebeccapurple": 6697881,\n "red": 16711680,\n "rosybrown": 12357519,\n "royalblue": 4286945,\n "saddlebrown": 9127187,\n "salmon": 16416882,\n "sandybrown": 16032864,\n "seagreen": 3050327,\n "seashell": 16774638,\n "sienna": 10506797,\n "silver": 12632256,\n "skyblue": 8900331,\n "slateblue": 6970061,\n "slategray": 7372944,\n "slategrey": 7372944,\n "snow": 16775930,\n "springgreen": 65407,\n "steelblue": 4620980,\n "tan": 13808780,\n "teal": 32896,\n "thistle": 14204888,\n "tomato": 16737095,\n "turquoise": 4251856,\n "violet": 15631086,\n "wheat": 16113331,\n "white": 16777215,\n "whitesmoke": 16119285,\n "yellow": 16776960,\n "yellowgreen": 10145074\n };\n const _hslA = { h: 0, s: 0, l: 0 };\n const _hslB = { h: 0, s: 0, l: 0 };\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t);\n return p;\n }\n class Color {\n constructor(r, g, b) {\n this.isColor = true;\n this.r = 1;\n this.g = 1;\n this.b = 1;\n return this.set(r, g, b);\n }\n set(r, g, b) {\n if (g === void 0 && b === void 0) {\n const value = r;\n if (value && value.isColor) {\n this.copy(value);\n } else if (typeof value === "number") {\n this.setHex(value);\n } else if (typeof value === "string") {\n this.setStyle(value);\n }\n } else {\n this.setRGB(r, g, b);\n }\n return this;\n }\n setScalar(scalar) {\n this.r = scalar;\n this.g = scalar;\n this.b = scalar;\n return this;\n }\n setHex(hex, colorSpace = SRGBColorSpace) {\n hex = Math.floor(hex);\n this.r = (hex >> 16 & 255) / 255;\n this.g = (hex >> 8 & 255) / 255;\n this.b = (hex & 255) / 255;\n ColorManagement.toWorkingColorSpace(this, colorSpace);\n return this;\n }\n setRGB(r, g, b, colorSpace = ColorManagement.workingColorSpace) {\n this.r = r;\n this.g = g;\n this.b = b;\n ColorManagement.toWorkingColorSpace(this, colorSpace);\n return this;\n }\n setHSL(h, s, l, colorSpace = ColorManagement.workingColorSpace) {\n h = euclideanModulo(h, 1);\n s = clamp(s, 0, 1);\n l = clamp(l, 0, 1);\n if (s === 0) {\n this.r = this.g = this.b = l;\n } else {\n const p = l <= 0.5 ? l * (1 + s) : l + s - l * s;\n const q = 2 * l - p;\n this.r = hue2rgb(q, p, h + 1 / 3);\n this.g = hue2rgb(q, p, h);\n this.b = hue2rgb(q, p, h - 1 / 3);\n }\n ColorManagement.toWorkingColorSpace(this, colorSpace);\n return this;\n }\n setStyle(style, colorSpace = SRGBColorSpace) {\n function handleAlpha(string) {\n if (string === void 0) return;\n if (parseFloat(string) < 1) {\n console.warn("THREE.Color: Alpha component of " + style + " will be ignored.");\n }\n }\n let m;\n if (m = /^(\\w+)\\(([^\\)]*)\\)/.exec(style)) {\n let color;\n const name = m[1];\n const components = m[2];\n switch (name) {\n case "rgb":\n case "rgba":\n if (color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(components)) {\n handleAlpha(color[4]);\n return this.setRGB(\n Math.min(255, parseInt(color[1], 10)) / 255,\n Math.min(255, parseInt(color[2], 10)) / 255,\n Math.min(255, parseInt(color[3], 10)) / 255,\n colorSpace\n );\n }\n if (color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(components)) {\n handleAlpha(color[4]);\n return this.setRGB(\n Math.min(100, parseInt(color[1], 10)) / 100,\n Math.min(100, parseInt(color[2], 10)) / 100,\n Math.min(100, parseInt(color[3], 10)) / 100,\n colorSpace\n );\n }\n break;\n case "hsl":\n case "hsla":\n if (color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(components)) {\n handleAlpha(color[4]);\n return this.setHSL(\n parseFloat(color[1]) / 360,\n parseFloat(color[2]) / 100,\n parseFloat(color[3]) / 100,\n colorSpace\n );\n }\n break;\n default:\n console.warn("THREE.Color: Unknown color model " + style);\n }\n } else if (m = /^\\#([A-Fa-f\\d]+)$/.exec(style)) {\n const hex = m[1];\n const size = hex.length;\n if (size === 3) {\n return this.setRGB(\n parseInt(hex.charAt(0), 16) / 15,\n parseInt(hex.charAt(1), 16) / 15,\n parseInt(hex.charAt(2), 16) / 15,\n colorSpace\n );\n } else if (size === 6) {\n return this.setHex(parseInt(hex, 16), colorSpace);\n } else {\n console.warn("THREE.Color: Invalid hex color " + style);\n }\n } else if (style && style.length > 0) {\n return this.setColorName(style, colorSpace);\n }\n return this;\n }\n setColorName(style, colorSpace = SRGBColorSpace) {\n const hex = _colorKeywords[style.toLowerCase()];\n if (hex !== void 0) {\n this.setHex(hex, colorSpace);\n } else {\n console.warn("THREE.Color: Unknown color " + style);\n }\n return this;\n }\n clone() {\n return new this.constructor(this.r, this.g, this.b);\n }\n copy(color) {\n this.r = color.r;\n this.g = color.g;\n this.b = color.b;\n return this;\n }\n copySRGBToLinear(color) {\n this.r = SRGBToLinear(color.r);\n this.g = SRGBToLinear(color.g);\n this.b = SRGBToLinear(color.b);\n return this;\n }\n copyLinearToSRGB(color) {\n this.r = LinearToSRGB(color.r);\n this.g = LinearToSRGB(color.g);\n this.b = LinearToSRGB(color.b);\n return this;\n }\n convertSRGBToLinear() {\n this.copySRGBToLinear(this);\n return this;\n }\n convertLinearToSRGB() {\n this.copyLinearToSRGB(this);\n return this;\n }\n getHex(colorSpace = SRGBColorSpace) {\n ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace);\n return Math.round(clamp(_color.r * 255, 0, 255)) * 65536 + Math.round(clamp(_color.g * 255, 0, 255)) * 256 + Math.round(clamp(_color.b * 255, 0, 255));\n }\n getHexString(colorSpace = SRGBColorSpace) {\n return ("000000" + this.getHex(colorSpace).toString(16)).slice(-6);\n }\n getHSL(target, colorSpace = ColorManagement.workingColorSpace) {\n ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace);\n const r = _color.r, g = _color.g, b = _color.b;\n const max2 = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let hue, saturation;\n const lightness = (min + max2) / 2;\n if (min === max2) {\n hue = 0;\n saturation = 0;\n } else {\n const delta = max2 - min;\n saturation = lightness <= 0.5 ? delta / (max2 + min) : delta / (2 - max2 - min);\n switch (max2) {\n case r:\n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n case g:\n hue = (b - r) / delta + 2;\n break;\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n hue /= 6;\n }\n target.h = hue;\n target.s = saturation;\n target.l = lightness;\n return target;\n }\n getRGB(target, colorSpace = ColorManagement.workingColorSpace) {\n ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace);\n target.r = _color.r;\n target.g = _color.g;\n target.b = _color.b;\n return target;\n }\n getStyle(colorSpace = SRGBColorSpace) {\n ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace);\n const r = _color.r, g = _color.g, b = _color.b;\n if (colorSpace !== SRGBColorSpace) {\n return `color(${colorSpace} ${r.toFixed(3)} ${g.toFixed(3)} ${b.toFixed(3)})`;\n }\n return `rgb(${Math.round(r * 255)},${Math.round(g * 255)},${Math.round(b * 255)})`;\n }\n offsetHSL(h, s, l) {\n this.getHSL(_hslA);\n return this.setHSL(_hslA.h + h, _hslA.s + s, _hslA.l + l);\n }\n add(color) {\n this.r += color.r;\n this.g += color.g;\n this.b += color.b;\n return this;\n }\n addColors(color1, color2) {\n this.r = color1.r + color2.r;\n this.g = color1.g + color2.g;\n this.b = color1.b + color2.b;\n return this;\n }\n addScalar(s) {\n this.r += s;\n this.g += s;\n this.b += s;\n return this;\n }\n sub(color) {\n this.r = Math.max(0, this.r - color.r);\n this.g = Math.max(0, this.g - color.g);\n this.b = Math.max(0, this.b - color.b);\n return this;\n }\n multiply(color) {\n this.r *= color.r;\n this.g *= color.g;\n this.b *= color.b;\n return this;\n }\n multiplyScalar(s) {\n this.r *= s;\n this.g *= s;\n this.b *= s;\n return this;\n }\n lerp(color, alpha) {\n this.r += (color.r - this.r) * alpha;\n this.g += (color.g - this.g) * alpha;\n this.b += (color.b - this.b) * alpha;\n return this;\n }\n lerpColors(color1, color2, alpha) {\n this.r = color1.r + (color2.r - color1.r) * alpha;\n this.g = color1.g + (color2.g - color1.g) * alpha;\n this.b = color1.b + (color2.b - color1.b) * alpha;\n return this;\n }\n lerpHSL(color, alpha) {\n this.getHSL(_hslA);\n color.getHSL(_hslB);\n const h = lerp(_hslA.h, _hslB.h, alpha);\n const s = lerp(_hslA.s, _hslB.s, alpha);\n const l = lerp(_hslA.l, _hslB.l, alpha);\n this.setHSL(h, s, l);\n return this;\n }\n setFromVector3(v) {\n this.r = v.x;\n this.g = v.y;\n this.b = v.z;\n return this;\n }\n applyMatrix3(m) {\n const r = this.r, g = this.g, b = this.b;\n const e = m.elements;\n this.r = e[0] * r + e[3] * g + e[6] * b;\n this.g = e[1] * r + e[4] * g + e[7] * b;\n this.b = e[2] * r + e[5] * g + e[8] * b;\n return this;\n }\n equals(c) {\n return c.r === this.r && c.g === this.g && c.b === this.b;\n }\n fromArray(array, offset = 0) {\n this.r = array[offset];\n this.g = array[offset + 1];\n this.b = array[offset + 2];\n return this;\n }\n toArray(array = [], offset = 0) {\n array[offset] = this.r;\n array[offset + 1] = this.g;\n array[offset + 2] = this.b;\n return array;\n }\n fromBufferAttribute(attribute, index) {\n this.r = attribute.getX(index);\n this.g = attribute.getY(index);\n this.b = attribute.getZ(index);\n return this;\n }\n toJSON() {\n return this.getHex();\n }\n *[Symbol.iterator]() {\n yield this.r;\n yield this.g;\n yield this.b;\n }\n }\n const _color = /* @__PURE__ */ new Color();\n Color.NAMES = _colorKeywords;\n if (typeof __THREE_DEVTOOLS__ !== "undefined") {\n __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { detail: {\n revision: REVISION\n } }));\n }\n if (typeof window !== "undefined") {\n if (window.__THREE__) {\n console.warn("WARNING: Multiple instances of Three.js being imported.");\n } else {\n window.__THREE__ = REVISION;\n }\n }\n function unindentLines(s) {\n var _a2;\n let seenNonEmpty = false;\n const lines = s.split("\\n").map((line) => {\n const trimmedLine = line.trimEnd();\n if (seenNonEmpty) {\n return trimmedLine;\n }\n if (trimmedLine.length > 0) {\n seenNonEmpty = true;\n return trimmedLine;\n }\n return null;\n }).filter((line) => line != null);\n while (lines.length > 0 && lines[lines.length - 1].length === 0) {\n lines.pop();\n }\n if (lines.length === 0) {\n return [];\n }\n const indent = (_a2 = lines[0].match(/^\\s*/)) == null ? void 0 : _a2[0];\n if (!indent) {\n return lines;\n }\n const regex = new RegExp(`^${indent}`);\n return lines.map((line) => line.replace(regex, ""));\n }\n function unindent(s) {\n return unindentLines(s).join("\\n");\n }\n const f32buffer = new Float32Array(1);\n const u32buffer = new Uint32Array(f32buffer.buffer);\n function toHalf(f) {\n f32buffer[0] = f;\n const bits2 = u32buffer[0];\n const sign = bits2 >> 31 & 1;\n const exp = bits2 >> 23 & 255;\n const frac = bits2 & 8388607;\n const halfSign = sign << 15;\n if (exp === 255) {\n if (frac !== 0) {\n return halfSign | 32767;\n }\n return halfSign | 31744;\n }\n const newExp = exp - 127 + 15;\n if (newExp >= 31) {\n return halfSign | 31744;\n }\n if (newExp <= 0) {\n if (newExp < -10) {\n return halfSign;\n }\n const subFrac = (frac | 8388608) >> 1 - newExp + 13;\n return halfSign | subFrac;\n }\n const halfFrac = frac >> 13;\n return halfSign | newExp << 10 | halfFrac;\n }\n function fromHalf(h) {\n const sign = h >> 15 & 1;\n const exp = h >> 10 & 31;\n const frac = h & 1023;\n let f32bits;\n if (exp === 0) {\n if (frac === 0) {\n f32bits = sign << 31;\n } else {\n let mant = frac;\n let e = -14;\n while ((mant & 1024) === 0) {\n mant <<= 1;\n e--;\n }\n mant &= 1023;\n const newExp = e + 127;\n const newFrac = mant << 13;\n f32bits = sign << 31 | newExp << 23 | newFrac;\n }\n } else if (exp === 31) {\n if (frac === 0) {\n f32bits = sign << 31 | 2139095040;\n } else {\n f32bits = sign << 31 | 2143289344;\n }\n } else {\n const newExp = exp - 15 + 127;\n const newFrac = frac << 13;\n f32bits = sign << 31 | newExp << 23 | newFrac;\n }\n u32buffer[0] = f32bits;\n return f32buffer[0];\n }\n function floatToUint8(v) {\n return Math.max(0, Math.min(255, Math.round(v * 255)));\n }\n function getArrayBuffers(ctx) {\n const buffers = [];\n const seen = /* @__PURE__ */ new Set();\n function traverse(obj) {\n if (obj && typeof obj === "object" && !seen.has(obj)) {\n seen.add(obj);\n if (obj instanceof ArrayBuffer) {\n buffers.push(obj);\n } else if (ArrayBuffer.isView(obj)) {\n buffers.push(obj.buffer);\n } else if (Array.isArray(obj)) {\n obj.forEach(traverse);\n } else {\n Object.values(obj).forEach(traverse);\n }\n }\n }\n traverse(ctx);\n return buffers;\n }\n function setPackedSplat(packedSplats, index, x2, y, z, scaleX, scaleY, scaleZ, quatX, quatY, quatZ, quatW, opacity, r, g, b) {\n const uR = floatToUint8(r);\n const uG = floatToUint8(g);\n const uB = floatToUint8(b);\n const uA = floatToUint8(opacity);\n const uQuat = encodeQuatOctXy88R8(\n new Quaternion(quatX, quatY, quatZ, quatW)\n );\n const uQuatX = uQuat & 255;\n const uQuatY = uQuat >>> 8 & 255;\n const uQuatZ = uQuat >>> 16 & 255;\n const uScaleX = scaleX === 0 ? 0 : Math.min(\n 255,\n Math.max(\n 0,\n Math.round((Math.log(scaleX) - LN_SCALE_MIN) / LN_RESCALE) + 1\n )\n );\n const uScaleY = scaleY === 0 ? 0 : Math.min(\n 255,\n Math.max(\n 0,\n Math.round((Math.log(scaleY) - LN_SCALE_MIN) / LN_RESCALE) + 1\n )\n );\n const uScaleZ = scaleZ === 0 ? 0 : Math.min(\n 255,\n Math.max(\n 0,\n Math.round((Math.log(scaleZ) - LN_SCALE_MIN) / LN_RESCALE) + 1\n )\n );\n const uCenterX = toHalf(x2);\n const uCenterY = toHalf(y);\n const uCenterZ = toHalf(z);\n const i4 = index * 4;\n packedSplats[i4] = uR | uG << 8 | uB << 16 | uA << 24;\n packedSplats[i4 + 1] = uCenterX | uCenterY << 16;\n packedSplats[i4 + 2] = uCenterZ | uQuatX << 16 | uQuatY << 24;\n packedSplats[i4 + 3] = uScaleX | uScaleY << 8 | uScaleZ << 16 | uQuatZ << 24;\n }\n function setPackedSplatCenter(packedSplats, index, x2, y, z) {\n const uCenterX = toHalf(x2);\n const uCenterY = toHalf(y);\n const uCenterZ = toHalf(z);\n const i4 = index * 4;\n packedSplats[i4 + 1] = uCenterX | uCenterY << 16;\n packedSplats[i4 + 2] = uCenterZ | packedSplats[i4 + 2] & 4294901760;\n }\n function setPackedSplatScales(packedSplats, index, scaleX, scaleY, scaleZ) {\n const uScaleX = scaleX === 0 ? 0 : Math.min(\n 255,\n Math.max(\n 0,\n Math.round((Math.log(scaleX) - LN_SCALE_MIN) / LN_RESCALE) + 1\n )\n );\n const uScaleY = scaleY === 0 ? 0 : Math.min(\n 255,\n Math.max(\n 0,\n Math.round((Math.log(scaleY) - LN_SCALE_MIN) / LN_RESCALE) + 1\n )\n );\n const uScaleZ = scaleZ === 0 ? 0 : Math.min(\n 255,\n Math.max(\n 0,\n Math.round((Math.log(scaleZ) - LN_SCALE_MIN) / LN_RESCALE) + 1\n )\n );\n const i4 = index * 4;\n packedSplats[i4 + 3] = uScaleX | uScaleY << 8 | uScaleZ << 16 | packedSplats[i4 + 3] & 4278190080;\n }\n function setPackedSplatQuat(packedSplats, index, quatX, quatY, quatZ, quatW) {\n const uQuat = encodeQuatOctXy88R8(\n new Quaternion(quatX, quatY, quatZ, quatW)\n );\n const uQuatX = uQuat & 255;\n const uQuatY = uQuat >>> 8 & 255;\n const uQuatZ = uQuat >>> 16 & 255;\n const i4 = index * 4;\n packedSplats[i4 + 2] = packedSplats[i4 + 2] & 65535 | uQuatX << 16 | uQuatY << 24;\n packedSplats[i4 + 3] = packedSplats[i4 + 3] & 16777215 | uQuatZ << 24;\n }\n function setPackedSplatRgb(packedSplats, index, r, g, b) {\n const uR = floatToUint8(r);\n const uG = floatToUint8(g);\n const uB = floatToUint8(b);\n const i4 = index * 4;\n packedSplats[i4] = uR | uG << 8 | uB << 16 | packedSplats[i4] & 4278190080;\n }\n function setPackedSplatOpacity(packedSplats, index, opacity) {\n const uA = floatToUint8(opacity);\n const i4 = index * 4;\n packedSplats[i4] = packedSplats[i4] & 16777215 | uA << 24;\n }\n new Vector3();\n new Vector3();\n new Color();\n unindent(`\n precision highp float;\n\n in vec3 position;\n\n void main() {\n gl_Position = vec4(position.xy, 0.0, 1.0);\n }\n`);\n function encodeQuatOctXy88R8(q) {\n const qnorm = q.clone().normalize();\n if (qnorm.w < 0) {\n qnorm.set(-qnorm.x, -qnorm.y, -qnorm.z, -qnorm.w);\n }\n const theta = 2 * Math.acos(qnorm.w);\n const xyz_norm = Math.sqrt(\n qnorm.x * qnorm.x + qnorm.y * qnorm.y + qnorm.z * qnorm.z\n );\n const axis = xyz_norm < 1e-6 ? new Vector3(1, 0, 0) : new Vector3(qnorm.x, qnorm.y, qnorm.z).divideScalar(xyz_norm);\n const sum = Math.abs(axis.x) + Math.abs(axis.y) + Math.abs(axis.z);\n let p_x = axis.x / sum;\n let p_y = axis.y / sum;\n if (axis.z < 0) {\n const tmp = p_x;\n p_x = (1 - Math.abs(p_y)) * (p_x >= 0 ? 1 : -1);\n p_y = (1 - Math.abs(tmp)) * (p_y >= 0 ? 1 : -1);\n }\n const u_f = p_x * 0.5 + 0.5;\n const v_f = p_y * 0.5 + 0.5;\n const quantU = Math.round(u_f * 255);\n const quantV = Math.round(v_f * 255);\n const angleInt = Math.round(theta * (255 / Math.PI));\n return angleInt << 16 | quantV << 8 | quantU;\n }\n function packSint8Bytes(b0, b1, b2, b3) {\n const clampedB0 = Math.max(-127, Math.min(127, b0 * 127));\n const clampedB1 = Math.max(-127, Math.min(127, b1 * 127));\n const clampedB2 = Math.max(-127, Math.min(127, b2 * 127));\n const clampedB3 = Math.max(-127, Math.min(127, b3 * 127));\n return clampedB0 & 255 | (clampedB1 & 255) << 8 | (clampedB2 & 255) << 16 | (clampedB3 & 255) << 24;\n }\n function encodeSh1Rgb(sh1Array, index, sh1Rgb) {\n const base = index * 2;\n for (let i2 = 0; i2 < 9; ++i2) {\n const value = Math.max(-63, Math.min(63, sh1Rgb[i2] * 63)) & 127;\n const bitStart = i2 * 7;\n const bitEnd = bitStart + 7;\n const wordStart = Math.floor(bitStart / 32);\n const bitOffset = bitStart - wordStart * 32;\n const firstWord = value << bitOffset & 4294967295;\n sh1Array[base + wordStart] |= firstWord;\n if (bitEnd > wordStart * 32 + 32) {\n const secondWord = value >>> 32 - bitOffset & 4294967295;\n sh1Array[base + wordStart + 1] |= secondWord;\n }\n }\n }\n function encodeSh2Rgb(sh2Array, index, sh2Rgb) {\n sh2Array[index * 4 + 0] = packSint8Bytes(\n sh2Rgb[0],\n sh2Rgb[1],\n sh2Rgb[2],\n sh2Rgb[3]\n );\n sh2Array[index * 4 + 1] = packSint8Bytes(\n sh2Rgb[4],\n sh2Rgb[5],\n sh2Rgb[6],\n sh2Rgb[7]\n );\n sh2Array[index * 4 + 2] = packSint8Bytes(\n sh2Rgb[8],\n sh2Rgb[9],\n sh2Rgb[10],\n sh2Rgb[11]\n );\n sh2Array[index * 4 + 3] = packSint8Bytes(\n sh2Rgb[12],\n sh2Rgb[13],\n sh2Rgb[14],\n 0\n );\n }\n function encodeSh3Rgb(sh3Array, index, sh3Rgb) {\n const base = index * 4;\n for (let i2 = 0; i2 < 21; ++i2) {\n const value = Math.max(-31, Math.min(31, sh3Rgb[i2] * 31)) & 63;\n const bitStart = i2 * 6;\n const bitEnd = bitStart + 6;\n const wordStart = Math.floor(bitStart / 32);\n const bitOffset = bitStart - wordStart * 32;\n const firstWord = value << bitOffset & 4294967295;\n sh3Array[base + wordStart] |= firstWord;\n if (bitEnd > wordStart * 32 + 32) {\n const secondWord = value >>> 32 - bitOffset & 4294967295;\n sh3Array[base + wordStart + 1] |= secondWord;\n }\n }\n }\n class GunzipReader {\n constructor({\n fileBytes,\n chunkBytes = 64 * 1024\n }) {\n this.fileBytes = fileBytes;\n this.chunkBytes = chunkBytes;\n this.offset = 0;\n this.chunks = [];\n this.totalBytes = 0;\n this.gunzip = new Gunzip((chunk, _final) => {\n this.chunks.push(chunk);\n this.totalBytes += chunk.length;\n });\n }\n read(numBytes) {\n while (this.totalBytes < numBytes && this.offset < this.fileBytes.length) {\n const end = Math.min(\n this.offset + this.chunkBytes,\n this.fileBytes.length\n );\n this.gunzip.push(this.fileBytes.subarray(this.offset, end), false);\n this.offset = end;\n }\n if (this.totalBytes < numBytes && this.offset >= this.fileBytes.length) {\n this.gunzip.push(new Uint8Array(0), true);\n }\n if (this.totalBytes < numBytes) {\n throw new Error(\n `Unexpected EOF: needed ${numBytes}, got ${this.totalBytes}`\n );\n }\n const allBytes = new Uint8Array(this.totalBytes);\n let outOffset = 0;\n for (const chunk of this.chunks) {\n allBytes.set(chunk, outOffset);\n outOffset += chunk.length;\n }\n const result = allBytes.subarray(0, numBytes);\n this.chunks = [allBytes.subarray(numBytes)];\n this.totalBytes -= numBytes;\n return result;\n }\n }\n class SpzReader {\n constructor({ fileBytes }) {\n this.fileBytes = fileBytes instanceof ArrayBuffer ? new Uint8Array(fileBytes) : fileBytes;\n this.reader = new GunzipReader({ fileBytes: this.fileBytes });\n const header = new DataView(this.reader.read(16).buffer);\n if (header.getUint32(0, true) !== 1347635022) {\n throw new Error("Invalid SPZ file");\n }\n this.version = header.getUint32(4, true);\n if (this.version < 1 || this.version > 2) {\n throw new Error(`Unsupported SPZ version: ${this.version}`);\n }\n this.numSplats = header.getUint32(8, true);\n this.shDegree = header.getUint8(12);\n this.fractionalBits = header.getUint8(13);\n this.flags = header.getUint8(14);\n this.flagAntiAlias = (this.flags & 1) !== 0;\n this.reserved = header.getUint8(15);\n this.parsed = false;\n }\n parseSplats(centerCallback, alphaCallback, rgbCallback, scalesCallback, quatCallback, shCallback) {\n if (this.parsed) {\n throw new Error("SPZ file already parsed");\n }\n this.parsed = true;\n if (this.version === 1) {\n const centerBytes = this.reader.read(this.numSplats * 3 * 2);\n const centerUint16 = new Uint16Array(centerBytes.buffer);\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n const i3 = i2 * 3;\n const x2 = fromHalf(centerUint16[i3]);\n const y = fromHalf(centerUint16[i3 + 1]);\n const z = fromHalf(centerUint16[i3 + 2]);\n centerCallback(i2, x2, y, z);\n }\n } else if (this.version === 2) {\n const fixed = 1 << this.fractionalBits;\n const centerBytes = this.reader.read(this.numSplats * 3 * 3);\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n const i9 = i2 * 9;\n const x2 = ((centerBytes[i9 + 2] << 24 | centerBytes[i9 + 1] << 16 | centerBytes[i9] << 8) >> 8) / fixed;\n const y = ((centerBytes[i9 + 5] << 24 | centerBytes[i9 + 4] << 16 | centerBytes[i9 + 3] << 8) >> 8) / fixed;\n const z = ((centerBytes[i9 + 8] << 24 | centerBytes[i9 + 7] << 16 | centerBytes[i9 + 6] << 8) >> 8) / fixed;\n centerCallback(i2, x2, y, z);\n }\n } else {\n throw new Error("Unreachable");\n }\n {\n const bytes = this.reader.read(this.numSplats);\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n alphaCallback(i2, bytes[i2] / 255);\n }\n }\n {\n const rgbBytes = this.reader.read(this.numSplats * 3);\n const scale = SH_C0 / 0.15;\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n const i3 = i2 * 3;\n const r = (rgbBytes[i3] / 255 - 0.5) * scale + 0.5;\n const g = (rgbBytes[i3 + 1] / 255 - 0.5) * scale + 0.5;\n const b = (rgbBytes[i3 + 2] / 255 - 0.5) * scale + 0.5;\n rgbCallback(i2, r, g, b);\n }\n }\n {\n const scalesBytes = this.reader.read(this.numSplats * 3);\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n const i3 = i2 * 3;\n const scaleX = Math.exp(scalesBytes[i3] / 16 - 10);\n const scaleY = Math.exp(scalesBytes[i3 + 1] / 16 - 10);\n const scaleZ = Math.exp(scalesBytes[i3 + 2] / 16 - 10);\n scalesCallback(i2, scaleX, scaleY, scaleZ);\n }\n }\n {\n const quatBytes = this.reader.read(this.numSplats * 3);\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n const i3 = i2 * 3;\n const quatX = quatBytes[i3] / 127.5 - 1;\n const quatY = quatBytes[i3 + 1] / 127.5 - 1;\n const quatZ = quatBytes[i3 + 2] / 127.5 - 1;\n const quatW = Math.sqrt(\n Math.max(0, 1 - quatX * quatX - quatY * quatY - quatZ * quatZ)\n );\n quatCallback(i2, quatX, quatY, quatZ, quatW);\n }\n }\n if (shCallback && this.shDegree >= 1) {\n const sh1 = new Float32Array(3 * 3);\n const sh2 = this.shDegree >= 2 ? new Float32Array(5 * 3) : void 0;\n const sh3 = this.shDegree >= 3 ? new Float32Array(7 * 3) : void 0;\n const shBytes = this.reader.read(\n this.numSplats * SH_DEGREE_TO_VECS[this.shDegree] * 3\n );\n let offset = 0;\n for (let i2 = 0; i2 < this.numSplats; i2++) {\n for (let j = 0; j < 9; ++j) {\n sh1[j] = (shBytes[offset + j] - 128) / 128;\n }\n offset += 9;\n if (sh2) {\n for (let j = 0; j < 15; ++j) {\n sh2[j] = (shBytes[offset + j] - 128) / 128;\n }\n offset += 15;\n }\n if (sh3) {\n for (let j = 0; j < 21; ++j) {\n sh3[j] = (shBytes[offset + j] - 128) / 128;\n }\n offset += 21;\n }\n shCallback(i2, sh1, sh2, sh3);\n }\n }\n }\n }\n const SH_DEGREE_TO_VECS = { 1: 3, 2: 8, 3: 15 };\n const SH_C0 = 0.28209479177387814;\n async function onMessage(event) {\n const { name, args, id } = event.data;\n let result = void 0;\n let error = void 0;\n try {\n switch (name) {\n case "unpackPly": {\n const { packedArray, fileBytes } = args;\n const decoded = await unpackPly({ packedArray, fileBytes });\n result = {\n id,\n numSplats: decoded.numSplats,\n packedArray: decoded.packedArray,\n extra: decoded.extra\n };\n break;\n }\n case "decodeWlg": {\n const { fileBytes } = args;\n const decoded = decode_wlg(\n fileBytes,\n SPLAT_TEX_WIDTH,\n SPLAT_TEX_HEIGHT\n );\n result = {\n id,\n numSplats: decoded.numSplats,\n packedArray: decoded.packedSplats\n };\n break;\n }\n case "decodeSpz": {\n const { fileBytes } = args;\n const decoded = unpackSpz(fileBytes);\n result = {\n id,\n numSplats: decoded.numSplats,\n packedArray: decoded.packedArray,\n extra: decoded.extra\n };\n break;\n }\n case "decodeAntiSplat": {\n const { fileBytes } = args;\n const decoded = unpackAntiSplat(fileBytes);\n result = {\n id,\n numSplats: decoded.numSplats,\n packedArray: decoded.packedArray\n };\n break;\n }\n case "decodeKsplat": {\n const { fileBytes } = args;\n const decoded = unpackKsplat(fileBytes);\n result = {\n id,\n numSplats: decoded.numSplats,\n packedArray: decoded.packedArray,\n extra: decoded.extra\n };\n break;\n }\n case "sortSplats": {\n const { maxSplats, totalSplats, readback, ordering } = args;\n if (WASM_SPLAT_SORT) {\n result = {\n id,\n readback,\n ordering,\n activeSplats: old_sort_splats(\n maxSplats,\n totalSplats,\n readback,\n ordering\n )\n };\n }\n break;\n }\n case "sortDoubleSplats": {\n const { numSplats, readback, ordering } = args;\n result = {\n id,\n readback,\n ordering\n };\n if (WASM_SPLAT_SORT) {\n result = {\n id,\n readback,\n ordering,\n activeSplats: sort_splats(numSplats, readback, ordering)\n };\n }\n break;\n }\n default: {\n throw new Error(`Unknown name: ${name}`);\n }\n }\n } catch (e) {\n error = e;\n }\n self.postMessage(\n { id, result, error },\n { transfer: getArrayBuffers(result) }\n );\n }\n async function unpackPly({\n packedArray,\n fileBytes\n }) {\n const ply = new PlyReader({ fileBytes });\n await ply.parseHeader();\n const numSplats = ply.numSplats;\n const extra = {};\n const ZERO_CUTOFF = Math.exp(-20);\n ply.parseSplats(\n (index, x2, y, z, scaleX, scaleY, scaleZ, quatX, quatY, quatZ, quatW, opacity, r, g, b) => {\n setPackedSplat(\n packedArray,\n index,\n x2,\n y,\n z,\n scaleX < ZERO_CUTOFF ? 0 : Math.max(SCALE_MIN, scaleX),\n scaleY < ZERO_CUTOFF ? 0 : Math.max(SCALE_MIN, scaleY),\n scaleZ < ZERO_CUTOFF ? 0 : Math.max(SCALE_MIN, scaleZ),\n quatX,\n quatY,\n quatZ,\n quatW,\n opacity,\n r,\n g,\n b\n );\n },\n (index, sh1, sh2, sh3) => {\n if (sh1) {\n if (!extra.sh1) {\n extra.sh1 = new Uint32Array(numSplats * 2);\n }\n encodeSh1Rgb(extra.sh1, index, sh1);\n }\n if (sh2) {\n if (!extra.sh2) {\n extra.sh2 = new Uint32Array(numSplats * 4);\n }\n encodeSh2Rgb(extra.sh2, index, sh2);\n }\n if (sh3) {\n if (!extra.sh3) {\n extra.sh3 = new Uint32Array(numSplats * 4);\n }\n encodeSh3Rgb(extra.sh3, index, sh3);\n }\n }\n );\n return { packedArray, numSplats, extra };\n }\n function computeMaxSplats(numSplats) {\n const width = SPLAT_TEX_WIDTH;\n const height = Math.max(\n SPLAT_TEX_MIN_HEIGHT,\n Math.min(SPLAT_TEX_HEIGHT, Math.ceil(numSplats / width))\n );\n const depth = Math.ceil(numSplats / (width * height));\n return width * height * depth;\n }\n function unpackSpz(fileBytes) {\n const spz = new SpzReader({ fileBytes });\n const numSplats = spz.numSplats;\n const maxSplats = computeMaxSplats(numSplats);\n const packedArray = new Uint32Array(maxSplats * 4);\n const extra = {};\n spz.parseSplats(\n (index, x2, y, z) => {\n setPackedSplatCenter(packedArray, index, x2, y, z);\n },\n (index, alpha) => {\n setPackedSplatOpacity(packedArray, index, alpha);\n },\n (index, r, g, b) => {\n setPackedSplatRgb(packedArray, index, r, g, b);\n },\n (index, scaleX, scaleY, scaleZ) => {\n setPackedSplatScales(packedArray, index, scaleX, scaleY, scaleZ);\n },\n (index, quatX, quatY, quatZ, quatW) => {\n setPackedSplatQuat(packedArray, index, quatX, quatY, quatZ, quatW);\n },\n (index, sh1, sh2, sh3) => {\n if (sh1) {\n if (!extra.sh1) {\n extra.sh1 = new Uint32Array(numSplats * 2);\n }\n encodeSh1Rgb(extra.sh1, index, sh1);\n }\n if (sh2) {\n if (!extra.sh2) {\n extra.sh2 = new Uint32Array(numSplats * 4);\n }\n encodeSh2Rgb(extra.sh2, index, sh2);\n }\n if (sh3) {\n if (!extra.sh3) {\n extra.sh3 = new Uint32Array(numSplats * 4);\n }\n encodeSh3Rgb(extra.sh3, index, sh3);\n }\n }\n );\n return { packedArray, numSplats, extra };\n }\n function unpackAntiSplat(fileBytes) {\n const numSplats = Math.floor(fileBytes.length / 32);\n if (numSplats * 32 !== fileBytes.length) {\n throw new Error("Invalid .splat file size");\n }\n const maxSplats = computeMaxSplats(numSplats);\n const packedArray = new Uint32Array(maxSplats * 4);\n const f32 = new Float32Array(fileBytes.buffer);\n for (let i2 = 0; i2 < numSplats; ++i2) {\n const i322 = i2 * 32;\n const i8 = i2 * 8;\n const x2 = f32[i8 + 0];\n const y = f32[i8 + 1];\n const z = f32[i8 + 2];\n const scaleX = f32[i8 + 3];\n const scaleY = f32[i8 + 4];\n const scaleZ = f32[i8 + 5];\n const r = fileBytes[i322 + 24] / 255;\n const g = fileBytes[i322 + 25] / 255;\n const b = fileBytes[i322 + 26] / 255;\n const opacity = fileBytes[i322 + 27] / 255;\n const quatW = (fileBytes[i322 + 28] - 128) / 128;\n const quatX = (fileBytes[i322 + 29] - 128) / 128;\n const quatY = (fileBytes[i322 + 30] - 128) / 128;\n const quatZ = (fileBytes[i322 + 31] - 128) / 128;\n setPackedSplat(\n packedArray,\n i2,\n x2,\n y,\n z,\n scaleX,\n scaleY,\n scaleZ,\n quatX,\n quatY,\n quatZ,\n quatW,\n opacity,\n r,\n g,\n b\n );\n }\n return { packedArray, numSplats };\n }\n const KSPLAT_COMPRESSION = {\n 0: {\n bytesPerCenter: 12,\n bytesPerScale: 12,\n bytesPerRotation: 16,\n bytesPerColor: 4,\n bytesPerSphericalHarmonicsComponent: 4,\n scaleOffsetBytes: 12,\n rotationOffsetBytes: 24,\n colorOffsetBytes: 40,\n sphericalHarmonicsOffsetBytes: 44,\n scaleRange: 1\n },\n 1: {\n bytesPerCenter: 6,\n bytesPerScale: 6,\n bytesPerRotation: 8,\n bytesPerColor: 4,\n bytesPerSphericalHarmonicsComponent: 2,\n scaleOffsetBytes: 6,\n rotationOffsetBytes: 12,\n colorOffsetBytes: 20,\n sphericalHarmonicsOffsetBytes: 24,\n scaleRange: 32767\n },\n 2: {\n bytesPerCenter: 6,\n bytesPerScale: 6,\n bytesPerRotation: 8,\n bytesPerColor: 4,\n bytesPerSphericalHarmonicsComponent: 1,\n scaleOffsetBytes: 6,\n rotationOffsetBytes: 12,\n colorOffsetBytes: 20,\n sphericalHarmonicsOffsetBytes: 24,\n scaleRange: 32767\n }\n };\n const KSPLAT_SH_DEGREE_TO_COMPONENTS = {\n 0: 0,\n 1: 9,\n 2: 24,\n 3: 45\n };\n function unpackKsplat(fileBytes) {\n var _a2;\n const HEADER_BYTES = 4096;\n const SECTION_BYTES = 1024;\n let headerOffset = 0;\n const header = new DataView(fileBytes.buffer, headerOffset, HEADER_BYTES);\n headerOffset += HEADER_BYTES;\n const versionMajor = header.getUint8(0);\n const versionMinor = header.getUint8(1);\n if (versionMajor !== 0 || versionMinor < 1) {\n throw new Error(\n `Unsupported .ksplat version: ${versionMajor}.${versionMinor}`\n );\n }\n const maxSectionCount = header.getUint32(4, true);\n const splatCount = header.getUint32(16, true);\n const compressionLevel = header.getUint16(20, true);\n if (compressionLevel < 0 || compressionLevel > 2) {\n throw new Error(`Invalid .ksplat compression level: ${compressionLevel}`);\n }\n const minSphericalHarmonicsCoeff = header.getFloat32(36, true) || -1.5;\n const maxSphericalHarmonicsCoeff = header.getFloat32(40, true) || 1.5;\n const numSplats = splatCount;\n const maxSplats = computeMaxSplats(numSplats);\n const packedArray = new Uint32Array(maxSplats * 4);\n const extra = {};\n let sectionBase = HEADER_BYTES + maxSectionCount * SECTION_BYTES;\n for (let section = 0; section < maxSectionCount; ++section) {\n let getSh = function(splatOffset, component) {\n if (compressionLevel === 0) {\n return data.getFloat32(\n splatOffset + sphericalHarmonicsOffsetBytes + component * 4,\n true\n );\n }\n if (compressionLevel === 1) {\n return fromHalf(\n data.getUint16(\n splatOffset + sphericalHarmonicsOffsetBytes + component * 2,\n true\n )\n );\n }\n const t = data.getUint8(splatOffset + sphericalHarmonicsOffsetBytes + component) / 255;\n return minSphericalHarmonicsCoeff + t * (maxSphericalHarmonicsCoeff - minSphericalHarmonicsCoeff);\n };\n const section2 = new DataView(fileBytes.buffer, headerOffset, SECTION_BYTES);\n headerOffset += SECTION_BYTES;\n const sectionSplatCount = section2.getUint32(0, true);\n const sectionMaxSplatCount = section2.getUint32(4, true);\n const bucketSize = section2.getUint32(8, true);\n const bucketCount = section2.getUint32(12, true);\n const bucketBlockSize = section2.getFloat32(16, true);\n const bucketStorageSizeBytes = section2.getUint16(20, true);\n const compressionScaleRange = (section2.getUint32(24, true) || ((_a2 = KSPLAT_COMPRESSION[compressionLevel]) == null ? void 0 : _a2.scaleRange)) ?? 1;\n const partiallyFilledBucketCount = section2.getUint32(36, true);\n const bucketsMetaDataSizeBytes = partiallyFilledBucketCount * 4;\n const bucketsStorageSizeBytes = bucketStorageSizeBytes * bucketCount + bucketsMetaDataSizeBytes;\n const sphericalHarmonicsDegree = section2.getUint16(40, true);\n const shComponents = KSPLAT_SH_DEGREE_TO_COMPONENTS[sphericalHarmonicsDegree];\n const {\n bytesPerCenter,\n bytesPerScale,\n bytesPerRotation,\n bytesPerColor,\n bytesPerSphericalHarmonicsComponent,\n scaleOffsetBytes,\n rotationOffsetBytes,\n colorOffsetBytes,\n sphericalHarmonicsOffsetBytes\n } = KSPLAT_COMPRESSION[compressionLevel];\n const bytesPerSplat = bytesPerCenter + bytesPerScale + bytesPerRotation + bytesPerColor + shComponents * bytesPerSphericalHarmonicsComponent;\n const splatDataStorageSizeBytes = bytesPerSplat * sectionMaxSplatCount;\n const storageSizeBytes = splatDataStorageSizeBytes + bucketsStorageSizeBytes;\n const sh1Index = [0, 3, 6, 1, 4, 7, 2, 5, 8];\n const sh2Index = [\n 9,\n 14,\n 19,\n 10,\n 15,\n 20,\n 11,\n 16,\n 21,\n 12,\n 17,\n 22,\n 13,\n 18,\n 23\n ];\n const sh3Index = [\n 24,\n 31,\n 38,\n 25,\n 32,\n 39,\n 26,\n 33,\n 40,\n 27,\n 34,\n 41,\n 28,\n 35,\n 42,\n 29,\n 36,\n 43,\n 30,\n 37,\n 44\n ];\n const sh1 = sphericalHarmonicsDegree >= 1 ? new Float32Array(3 * 3) : void 0;\n const sh2 = sphericalHarmonicsDegree >= 2 ? new Float32Array(5 * 3) : void 0;\n const sh3 = sphericalHarmonicsDegree >= 3 ? new Float32Array(7 * 3) : void 0;\n const compressionScaleFactor = bucketBlockSize / 2 / compressionScaleRange;\n const bucketsBase = sectionBase + bucketsMetaDataSizeBytes;\n const dataBase = sectionBase + bucketsStorageSizeBytes;\n const data = new DataView(\n fileBytes.buffer,\n dataBase,\n splatDataStorageSizeBytes\n );\n const bucketArray = new Float32Array(\n fileBytes.buffer,\n bucketsBase,\n bucketCount * 3\n );\n for (let i2 = 0; i2 < sectionSplatCount; ++i2) {\n const splatOffset = i2 * bytesPerSplat;\n const bucketIndex = Math.floor(i2 / bucketSize);\n const x2 = compressionLevel === 0 ? data.getFloat32(splatOffset + 0, true) : (data.getUint16(splatOffset + 0, true) - compressionScaleRange) * compressionScaleFactor + bucketArray[3 * bucketIndex + 0];\n const y = compressionLevel === 0 ? data.getFloat32(splatOffset + 4, true) : (data.getUint16(splatOffset + 2, true) - compressionScaleRange) * compressionScaleFactor + bucketArray[3 * bucketIndex + 1];\n const z = compressionLevel === 0 ? data.getFloat32(splatOffset + 8, true) : (data.getUint16(splatOffset + 4, true) - compressionScaleRange) * compressionScaleFactor + bucketArray[3 * bucketIndex + 2];\n const scaleX = compressionLevel === 0 ? data.getFloat32(splatOffset + scaleOffsetBytes + 0, true) : fromHalf(data.getUint16(splatOffset + scaleOffsetBytes + 0, true));\n const scaleY = compressionLevel === 0 ? data.getFloat32(splatOffset + scaleOffsetBytes + 4, true) : fromHalf(data.getUint16(splatOffset + scaleOffsetBytes + 2, true));\n const scaleZ = compressionLevel === 0 ? data.getFloat32(splatOffset + scaleOffsetBytes + 8, true) : fromHalf(data.getUint16(splatOffset + scaleOffsetBytes + 4, true));\n const quatW = compressionLevel === 0 ? data.getFloat32(splatOffset + rotationOffsetBytes + 0, true) : fromHalf(\n data.getUint16(splatOffset + rotationOffsetBytes + 0, true)\n );\n const quatX = compressionLevel === 0 ? data.getFloat32(splatOffset + rotationOffsetBytes + 4, true) : fromHalf(\n data.getUint16(splatOffset + rotationOffsetBytes + 2, true)\n );\n const quatY = compressionLevel === 0 ? data.getFloat32(splatOffset + rotationOffsetBytes + 8, true) : fromHalf(\n data.getUint16(splatOffset + rotationOffsetBytes + 4, true)\n );\n const quatZ = compressionLevel === 0 ? data.getFloat32(splatOffset + rotationOffsetBytes + 12, true) : fromHalf(\n data.getUint16(splatOffset + rotationOffsetBytes + 6, true)\n );\n const r = data.getUint8(splatOffset + colorOffsetBytes + 0) / 255;\n const g = data.getUint8(splatOffset + colorOffsetBytes + 1) / 255;\n const b = data.getUint8(splatOffset + colorOffsetBytes + 2) / 255;\n const opacity = data.getUint8(splatOffset + colorOffsetBytes + 3) / 255;\n setPackedSplat(\n packedArray,\n i2,\n x2,\n y,\n z,\n scaleX,\n scaleY,\n scaleZ,\n quatX,\n quatY,\n quatZ,\n quatW,\n opacity,\n r,\n g,\n b\n );\n if (sphericalHarmonicsDegree >= 1) {\n if (sh1) {\n if (!extra.sh1) {\n extra.sh1 = new Uint32Array(numSplats * 2);\n }\n for (const [i22, key] of sh1Index.entries()) {\n sh1[i22] = getSh(splatOffset, key);\n }\n encodeSh1Rgb(extra.sh1, i2, sh1);\n }\n if (sh2) {\n if (!extra.sh2) {\n extra.sh2 = new Uint32Array(numSplats * 4);\n }\n for (const [i22, key] of sh2Index.entries()) {\n sh2[i22] = getSh(splatOffset, key);\n }\n encodeSh2Rgb(extra.sh2, i2, sh2);\n }\n if (sh3) {\n if (!extra.sh3) {\n extra.sh3 = new Uint32Array(numSplats * 4);\n }\n for (const [i22, key] of sh3Index.entries()) {\n sh3[i22] = getSh(splatOffset, key);\n }\n encodeSh3Rgb(extra.sh3, i2, sh3);\n }\n }\n }\n sectionBase += storageSizeBytes;\n }\n return { packedArray, numSplats, extra };\n }\n const DEPTH_INFINITY = 31744;\n const DEPTH_SIZE = DEPTH_INFINITY + 1;\n let depthArray = null;\n function oldSortSplats({\n totalSplats,\n readback,\n ordering\n }) {\n if (!depthArray) {\n depthArray = new Uint32Array(DEPTH_SIZE);\n }\n depthArray.fill(0);\n const readbackUint32 = readback.map((layer) => new Uint32Array(layer.buffer));\n const layerSize = readbackUint32[0].length;\n const numLayers = Math.ceil(totalSplats / layerSize);\n let layerBase = 0;\n for (let layer = 0; layer < numLayers; ++layer) {\n const readbackLayer = readbackUint32[layer];\n const layerSplats = Math.min(readbackLayer.length, totalSplats - layerBase);\n for (let i2 = 0; i2 < layerSplats; ++i2) {\n const pri = readbackLayer[i2] & 32767;\n if (pri < DEPTH_INFINITY) {\n depthArray[pri] += 1;\n }\n }\n layerBase += layerSplats;\n }\n let activeSplats = 0;\n for (let j = 0; j < DEPTH_SIZE; ++j) {\n const nextIndex = activeSplats + depthArray[j];\n depthArray[j] = activeSplats;\n activeSplats = nextIndex;\n }\n layerBase = 0;\n for (let layer = 0; layer < numLayers; ++layer) {\n const readbackLayer = readbackUint32[layer];\n const layerSplats = Math.min(readbackLayer.length, totalSplats - layerBase);\n for (let i2 = 0; i2 < layerSplats; ++i2) {\n const pri = readbackLayer[i2] & 32767;\n if (pri < DEPTH_INFINITY) {\n ordering[depthArray[pri]] = layerBase + i2;\n depthArray[pri] += 1;\n }\n }\n layerBase += layerSplats;\n }\n if (depthArray[DEPTH_SIZE - 1] !== activeSplats) {\n throw new Error(\n `Expected ${activeSplats} active splats but got ${depthArray[DEPTH_SIZE - 1]}`\n );\n }\n return { activeSplats, ordering };\n }\n function sortSplats({\n numSplats,\n readback,\n ordering\n }) {\n if (!depthArray) {\n depthArray = new Uint32Array(DEPTH_SIZE);\n }\n depthArray.fill(0);\n for (let i2 = 0; i2 < numSplats; ++i2) {\n const pri = readback[i2];\n if (pri < DEPTH_INFINITY) {\n depthArray[pri] += 1;\n }\n }\n let activeSplats = 0;\n for (let j = DEPTH_INFINITY - 1; j >= 0; --j) {\n const nextIndex = activeSplats + depthArray[j];\n depthArray[j] = activeSplats;\n activeSplats = nextIndex;\n }\n for (let i2 = 0; i2 < numSplats; ++i2) {\n const pri = readback[i2];\n if (pri < DEPTH_INFINITY) {\n ordering[depthArray[pri]] = i2;\n depthArray[pri] += 1;\n }\n }\n if (depthArray[0] !== activeSplats) {\n throw new Error(\n `Expected ${activeSplats} active splats but got ${depthArray[0]}`\n );\n }\n return { activeSplats, ordering };\n }\n const messageBuffer = [];\n function bufferMessage(event) {\n messageBuffer.push(event);\n }\n async function initialize() {\n self.addEventListener("message", bufferMessage);\n await __wbg_init();\n self.removeEventListener("message", bufferMessage);\n self.addEventListener("message", onMessage);\n for (const event of messageBuffer) {\n onMessage(event);\n }\n messageBuffer.length = 0;\n }\n initialize().catch(console.error);\n})();\n'; +const blob = typeof self !== "undefined" && self.Blob && new Blob([jsContent], { type: "text/javascript;charset=utf-8" }); +function WorkerWrapper(options) { + let objURL; + try { + objURL = blob && (self.URL || self.webkitURL).createObjectURL(blob); + if (!objURL) throw ""; + const worker = new Worker(objURL, { + name: options == null ? void 0 : options.name + }); + worker.addEventListener("error", () => { + (self.URL || self.webkitURL).revokeObjectURL(objURL); + }); + return worker; + } catch (e) { + return new Worker( + "data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent), + { + name: options == null ? void 0 : options.name + } + ); + } finally { + objURL && (self.URL || self.webkitURL).revokeObjectURL(objURL); + } +} +class SplatWorker { + constructor() { + this.messages = {}; + this.messageIdNext = 0; + this.worker = new WorkerWrapper(); + this.worker.onmessage = (event) => this.onMessage(event); + } + makeMessageId() { + return ++this.messageIdNext; + } + makeMessagePromiseId() { + const id = this.makeMessageId(); + const promise = new Promise((resolve, reject) => { + this.messages[id] = { resolve, reject }; + }); + return { id, promise }; + } + onMessage(event) { + const { id, result, error } = event.data; + const handler = this.messages[id]; + if (handler) { + delete this.messages[id]; + if (error) { + handler.reject(error); + } else { + handler.resolve(result); + } + } + } + // Invoke an RPC on the worker with the given name and arguments. + // The normal usage of a worker is to run one activity at a time, + // but this function allows for concurrent calls, tagging each request + // with a unique message Id and awaiting a response to that same Id. + // The method will automatically transfer any ArrayBuffers in the + // arguments to the worker. If you'd like to transfer a copy of a + // buffer then you must clone it before passing to this function. + async call(name, args) { + const { id, promise } = this.makeMessagePromiseId(); + this.worker.postMessage( + { name, args, id }, + { transfer: getArrayBuffers(args) } + ); + return promise; + } +} +let maxWorkers = 4; +let numWorkers = 0; +const freeWorkers = []; +const workerQueue = []; +async function allocWorker() { + const worker = freeWorkers.shift(); + if (worker) { + return worker; + } + if (numWorkers < maxWorkers) { + const worker2 = new SplatWorker(); + numWorkers += 1; + return worker2; + } + return new Promise((resolve) => { + workerQueue.push(resolve); + }); +} +function freeWorker(worker) { + if (numWorkers > maxWorkers) { + numWorkers -= 1; + return; + } + const waiter = workerQueue.shift(); + if (waiter) { + waiter(worker); + return; + } + freeWorkers.push(worker); +} +async function withWorker(callback) { + const worker = await allocWorker(); + try { + return await callback(worker); + } finally { + freeWorker(worker); + } +} +class SplatLoader extends Loader { + constructor(manager) { + super(manager); + this.fileLoader = new FileLoader(manager); + } + load(url, onLoad, onProgress, onError) { + this.fileLoader.setResponseType("arraybuffer"); + this.fileLoader.setCrossOrigin(this.crossOrigin); + this.fileLoader.setWithCredentials(this.withCredentials); + this.fileLoader.setPath(this.path); + this.fileLoader.setResourcePath(this.resourcePath); + this.fileLoader.setRequestHeader(this.requestHeader); + this.fileLoader.load( + url, + async (response) => { + if (onLoad) { + const input = response; + const decoded = await unpackSplats({ + input, + fileType: this.fileType, + pathOrUrl: url + }); + onLoad(new PackedSplats(decoded)); + } + }, + onProgress, + onError + ); + } + async loadAsync(url, onProgress) { + return new Promise((resolve, reject) => { + this.load( + url, + (decoded) => { + resolve(decoded); + }, + onProgress, + reject + ); + }); + } + parse(packedSplats) { + return new SplatMesh({ packedSplats }); + } +} +var SplatFileType = /* @__PURE__ */ ((SplatFileType2) => { + SplatFileType2["PLY"] = "ply"; + SplatFileType2["WLG0"] = "wlg0"; + SplatFileType2["SPZ"] = "spz"; + SplatFileType2["SPLAT"] = "splat"; + SplatFileType2["KSPLAT"] = "ksplat"; + return SplatFileType2; +})(SplatFileType || {}); +function getSplatFileType(fileBytes) { + const view = new DataView(fileBytes.buffer); + if ((view.getUint32(0, true) & 16777215) === 7957616) { + return "ply"; + } + if (view.getUint32(0, true) === 809978967) { + return "wlg0"; + } + if ((view.getUint32(0, true) & 16777215) === 559903) { + const header = decompressPartialGzip(fileBytes, 4); + const gView = new DataView(header.buffer); + if (gView.getUint32(0, true) === 1347635022) { + return "spz"; + } + return void 0; + } + return void 0; +} +function getFileExtension(pathOrUrl) { + const noTrailing = pathOrUrl.split(/[?#]/, 1)[0]; + const lastSlash = Math.max( + noTrailing.lastIndexOf("/"), + noTrailing.lastIndexOf("\\") + ); + const filename = noTrailing.slice(lastSlash + 1); + const lastDot = filename.lastIndexOf("."); + if (lastDot <= 0 || lastDot === filename.length - 1) { + return ""; + } + return filename.slice(lastDot + 1).toLowerCase(); +} +async function unpackSplats({ + input, + fileType, + pathOrUrl +}) { + const fileBytes = input instanceof ArrayBuffer ? new Uint8Array(input) : input; + let splatFileType = fileType; + if (!fileType) { + splatFileType = getSplatFileType(fileBytes); + if (!splatFileType && pathOrUrl) { + const extension = getFileExtension(pathOrUrl); + if (extension === "ply") { + splatFileType = "ply"; + } else if (extension === "wlg") { + splatFileType = "wlg0"; + } else if (extension === "spz") { + splatFileType = "spz"; + } else if (extension === "splat") { + splatFileType = "splat"; + } else if (extension === "ksplat") { + splatFileType = "ksplat"; + } + } + } + if (splatFileType === "wlg0") { + return await withWorker(async (worker) => { + const { packedArray, numSplats } = await worker.call("decodeWlg", { + fileBytes + }); + return { packedArray, numSplats }; + }); + } + if (splatFileType === "ply") { + const ply = new PlyReader({ fileBytes }); + await ply.parseHeader(); + const numSplats = ply.numSplats; + const maxSplats = getTextureSize(numSplats).maxSplats; + const args = { fileBytes, packedArray: new Uint32Array(maxSplats * 4) }; + return await withWorker(async (worker) => { + const { packedArray, numSplats: numSplats2, extra } = await worker.call( + "unpackPly", + args + ); + return { packedArray, numSplats: numSplats2, extra }; + }); + } + if (splatFileType === "spz") { + return await withWorker(async (worker) => { + const { packedArray, numSplats, extra } = await worker.call( + "decodeSpz", + { + fileBytes + } + ); + return { packedArray, numSplats, extra }; + }); + } + if (splatFileType === "splat") { + return await withWorker(async (worker) => { + const { packedArray, numSplats } = await worker.call("decodeAntiSplat", { + fileBytes + }); + return { packedArray, numSplats }; + }); + } + if (splatFileType === "ksplat") { + return await withWorker(async (worker) => { + const { packedArray, numSplats, extra } = await worker.call( + "decodeKsplat", + { fileBytes } + ); + return { packedArray, numSplats, extra }; + }); + } + throw new Error("Unknown splat file type"); +} +var computeUvec4_default = "precision highp float;\nprecision highp int;\nprecision highp sampler2D;\nprecision highp usampler2D;\nprecision highp isampler2D;\nprecision highp sampler2DArray;\nprecision highp usampler2DArray;\nprecision highp isampler2DArray;\nprecision highp sampler3D;\nprecision highp usampler3D;\nprecision highp isampler3D;\n\n#include \n\nuniform uint targetLayer;\nuniform int targetBase;\nuniform int targetCount;\n\nout uvec4 target;\n\n{{ GLOBALS }}\n\nvoid produceSplat(int index) {\n {{ STATEMENTS }}\n}\n\nvoid main() {\n int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x);\n int index = targetIndex - targetBase;\n\n if ((index >= 0) && (index < targetCount)) {\n produceSplat(index);\n } else {\n target = uvec4(0u, 0u, 0u, 0u);\n }\n}"; +const _PackedSplats = class _PackedSplats { + constructor(options = {}) { + this.maxSplats = 0; + this.numSplats = 0; + this.packedArray = null; + this.isInitialized = false; + this.target = null; + this.source = null; + this.needsUpdate = true; + this.extra = {}; + this.dyno = new DynoPackedSplats({ packedSplats: this }); + this.initialized = Promise.resolve(this); + this.reinitialize(options); + } + reinitialize(options) { + this.isInitialized = false; + if (options.url || options.fileBytes || options.construct) { + this.initialized = this.asyncInitialize(options).then(() => { + this.isInitialized = true; + return this; + }); + } else { + this.initialize(options); + this.isInitialized = true; + this.initialized = Promise.resolve(this); + } + } + initialize(options) { + if (options.packedArray) { + this.packedArray = options.packedArray; + this.maxSplats = Math.floor(this.packedArray.length / 4); + this.maxSplats = Math.floor(this.maxSplats / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + this.numSplats = Math.min( + this.maxSplats, + options.numSplats ?? Number.POSITIVE_INFINITY + ); + } else { + this.maxSplats = options.maxSplats ?? 0; + this.numSplats = 0; + } + this.extra = options.extra ?? {}; + } + async asyncInitialize(options) { + let { url, fileBytes, construct } = options; + if (url) { + fileBytes = await fetch(url).then(async (response) => { + if (!response.ok) { + throw new Error( + `${response.status} "${response.statusText}" fetching URL: ${url}` + ); + } + const arrayBuffer = await response.arrayBuffer(); + return arrayBuffer; + }); + } + if (fileBytes) { + const unpacked = await unpackSplats({ + input: fileBytes, + fileType: options.fileType, + pathOrUrl: url + }); + this.initialize(unpacked); + } + if (construct) { + const maybePromise = construct(this); + if (maybePromise instanceof Promise) { + await maybePromise; + } + } + } + // Call this when you are finished with the PackedSplats and want to free + // any buffers it holds. + dispose() { + if (this.target) { + this.target.dispose(); + this.target = null; + } + if (this.source) { + this.source.dispose(); + this.source = null; + } + } + // Ensures that this.packedArray can fit numSplats Gsplats. If it's too small, + // resize exponentially and copy over the original data. + // + // Typically you don't need to call this, because calling this.setSplat(index, ...) + // and this.pushSplat(...) will automatically call ensureSplats() so we have + // enough splats. + ensureSplats(numSplats) { + const targetSize = numSplats <= this.maxSplats ? this.maxSplats : ( + // Grow exponentially to avoid frequent reallocations + Math.max(numSplats, 2 * this.maxSplats) + ); + const currentSize = !this.packedArray ? 0 : this.packedArray.length / 4; + if (!this.packedArray || targetSize > currentSize) { + this.maxSplats = getTextureSize(targetSize).maxSplats; + const newArray2 = new Uint32Array(this.maxSplats * 4); + if (this.packedArray) { + newArray2.set(this.packedArray); + } + this.packedArray = newArray2; + } + return this.packedArray; + } + // Ensure the extra array for the given level is large enough to hold numSplats + ensureSplatsSh(level, numSplats) { + let wordsPerSplat; + let key; + if (level === 0) { + return this.ensureSplats(numSplats); + } + if (level === 1) { + wordsPerSplat = 2; + key = "sh1"; + } else if (level === 2) { + wordsPerSplat = 4; + key = "sh2"; + } else if (level === 3) { + wordsPerSplat = 4; + key = "sh3"; + } else { + throw new Error(`Invalid level: ${level}`); + } + let maxSplats = !this.extra[key] ? 0 : this.extra[key].length / wordsPerSplat; + const targetSize = numSplats <= maxSplats ? maxSplats : Math.max(numSplats, 2 * maxSplats); + if (!this.extra[key] || targetSize > maxSplats) { + maxSplats = getTextureSize(targetSize).maxSplats; + const newArray2 = new Uint32Array(maxSplats * wordsPerSplat); + if (this.extra[key]) { + newArray2.set(this.extra[key]); + } + this.extra[key] = newArray2; + } + return this.extra[key]; + } + // Unpack the 16-byte Gsplat data at index into the Three.js components + // center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, + // opacity: number 0..1, color: THREE.Color 0..1. + getSplat(index) { + if (!this.packedArray || index >= this.numSplats) { + throw new Error("Invalid index"); + } + return unpackSplat(this.packedArray, index); + } + // Set all PackedSplat components at index with the provided Gsplat attributes + // (can be the same objects returned by getSplat). Ensures there is capacity + // for at least index+1 Gsplats. + setSplat(index, center, scales, quaternion, opacity, color) { + const packedSplats = this.ensureSplats(index + 1); + setPackedSplat( + packedSplats, + index, + center.x, + center.y, + center.z, + scales.x, + scales.y, + scales.z, + quaternion.x, + quaternion.y, + quaternion.z, + quaternion.w, + opacity, + color.r, + color.g, + color.b + ); + this.numSplats = Math.max(this.numSplats, index + 1); + } + // Effectively calls this.setSplat(this.numSplats++, center, ...), useful on + // construction where you just want to iterate and create a collection of Gsplats. + pushSplat(center, scales, quaternion, opacity, color) { + const packedSplats = this.ensureSplats(this.numSplats + 1); + setPackedSplat( + packedSplats, + this.numSplats, + center.x, + center.y, + center.z, + scales.x, + scales.y, + scales.z, + quaternion.x, + quaternion.y, + quaternion.z, + quaternion.w, + opacity, + color.r, + color.g, + color.b + ); + ++this.numSplats; + } + // Iterate over Gsplats index 0..=(this.numSplats-1), unpack each Gsplat + // and invoke the callback function with the Gsplat attributes. + forEachSplat(callback) { + if (!this.packedArray || !this.numSplats) { + return; + } + for (let i = 0; i < this.numSplats; ++i) { + const unpacked = unpackSplat(this.packedArray, i); + callback( + i, + unpacked.center, + unpacked.scales, + unpacked.quaternion, + unpacked.opacity, + unpacked.color + ); + } + } + // Ensures our PackedSplats.target render target has enough space to generate + // maxSplats total Gsplats, and reallocate if not large enough. + ensureGenerate(maxSplats) { + if (this.target && (maxSplats ?? 1) <= this.maxSplats) { + return false; + } + this.dispose(); + const textureSize2 = getTextureSize(maxSplats ?? 1); + const { width, height, depth } = textureSize2; + this.maxSplats = textureSize2.maxSplats; + this.target = new THREE.WebGLArrayRenderTarget(width, height, depth, { + depthBuffer: false, + stencilBuffer: false, + generateMipmaps: false, + magFilter: THREE.NearestFilter, + minFilter: THREE.NearestFilter + }); + this.target.texture.format = THREE.RGBAIntegerFormat; + this.target.texture.type = THREE.UnsignedIntType; + this.target.texture.internalFormat = "RGBA32UI"; + return true; + } + // Given an array of splatCounts (.numSplats for each + // SplatGenerator/SplatMesh in the scene), compute a + // "mapping layout" in the composite array of generated outputs. + generateMapping(splatCounts) { + let maxSplats = 0; + const mapping = splatCounts.map((numSplats) => { + const base = maxSplats; + const rounded = Math.ceil(numSplats / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + maxSplats += rounded; + return { base, count: numSplats }; + }); + return { maxSplats, mapping }; + } + // Returns a THREE.DataArrayTexture representing the PackedSplats content as + // a Uint32x4 data array texture (2048 x 2048 x depth in size) + getTexture() { + if (this.target) { + return this.target.texture; + } + if (this.source || this.packedArray) { + const source = this.maybeUpdateSource(); + return source; + } + return _PackedSplats.getEmpty(); + } + // Check if source texture needs to be created/updated + maybeUpdateSource() { + if (!this.packedArray) { + throw new Error("No packed splats"); + } + if (this.needsUpdate || !this.source) { + this.needsUpdate = false; + if (this.source) { + const { width, height, depth } = this.source.image; + if (this.maxSplats !== width * height * depth) { + this.source.dispose(); + this.source = null; + } + } + if (!this.source) { + const { width, height, depth } = getTextureSize(this.maxSplats); + this.source = new THREE.DataArrayTexture( + this.packedArray, + width, + height, + depth + ); + this.source.format = THREE.RGBAIntegerFormat; + this.source.type = THREE.UnsignedIntType; + this.source.internalFormat = "RGBA32UI"; + this.source.needsUpdate = true; + } else if (this.packedArray.buffer !== this.source.image.data.buffer) { + this.source.image.data = new Uint8Array(this.packedArray.buffer); + } + this.source.needsUpdate = true; + } + return this.source; + } + // Can be used where you need an uninitialized THREE.DataArrayTexture like + // a uniform you will update with the result of this.getTexture() later. + static getEmpty() { + if (!_PackedSplats.emptySource) { + const { width, height, depth, maxSplats } = getTextureSize(1); + const emptyArray = new Uint32Array(maxSplats * 4); + _PackedSplats.emptySource = new THREE.DataArrayTexture( + emptyArray, + width, + height, + depth + ); + _PackedSplats.emptySource.format = THREE.RGBAIntegerFormat; + _PackedSplats.emptySource.type = THREE.UnsignedIntType; + _PackedSplats.emptySource.internalFormat = "RGBA32UI"; + _PackedSplats.emptySource.needsUpdate = true; + } + return _PackedSplats.emptySource; + } + // Get a program and THREE.RawShaderMaterial for a given GsplatGenerator, + // generating it if necessary and caching the result. + prepareProgramMaterial(generator) { + let program = _PackedSplats.generatorProgram.get(generator); + if (!program) { + const graph = dynoBlock( + { index: "int" }, + { output: "uvec4" }, + ({ index }) => { + generator.inputs.index = index; + const gsplat = generator.outputs.gsplat; + const output = outputPackedSplat(gsplat); + return { output }; + } + ); + if (!_PackedSplats.programTemplate) { + _PackedSplats.programTemplate = new DynoProgramTemplate( + computeUvec4_default + ); + } + program = new DynoProgram({ + graph, + inputs: { index: "index" }, + outputs: { output: "target" }, + template: _PackedSplats.programTemplate + }); + Object.assign(program.uniforms, { + targetLayer: { value: 0 }, + targetBase: { value: 0 }, + targetCount: { value: 0 } + }); + _PackedSplats.generatorProgram.set(generator, program); + } + const material = program.prepareMaterial(); + _PackedSplats.mesh.material = material; + return { program, material }; + } + saveRenderState(renderer) { + return { + xrPresenting: renderer.xr.isPresenting, + autoClear: renderer.autoClear, + scissorTest: renderer.getScissorTest() + }; + } + resetRenderState(renderer, state) { + renderer.setRenderTarget(null); + renderer.xr.isPresenting = state.xrPresenting; + renderer.autoClear = state.autoClear; + renderer.setScissorTest(state.scissorTest); + } + // Executes a dyno program specified by generator which is any DynoBlock that + // maps { index: "int" } to { gsplat: Gsplat }. This is called in + // ForgeRenderer.updateInternal() to re-generate Gsplats in the scene for + // SplatGenerator instances whose version is newer than what was generated + // for it last time. + generate({ + generator, + base, + count, + renderer + }) { + if (!this.target) { + throw new Error("Target must be initialized with ensureSplats"); + } + if (base + count > this.maxSplats) { + throw new Error("Base + count exceeds maxSplats"); + } + const { program, material } = this.prepareProgramMaterial(generator); + program.update(); + const renderState = this.saveRenderState(renderer); + const nextBase = Math.ceil((base + count) / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + const layerSize = SPLAT_TEX_WIDTH * SPLAT_TEX_HEIGHT; + material.uniforms.targetBase.value = base; + material.uniforms.targetCount.value = count; + while (base < nextBase) { + const layer = Math.floor(base / layerSize); + material.uniforms.targetLayer.value = layer; + const layerBase = layer * layerSize; + const layerYStart = Math.floor((base - layerBase) / SPLAT_TEX_WIDTH); + const layerYEnd = Math.min( + SPLAT_TEX_HEIGHT, + Math.ceil((nextBase - layerBase) / SPLAT_TEX_WIDTH) + ); + renderer.setRenderTarget(this.target, layer); + renderer.xr.isPresenting = false; + renderer.autoClear = false; + renderer.setScissorTest(true); + renderer.setScissor( + 0, + layerYStart, + SPLAT_TEX_WIDTH, + layerYEnd - layerYStart + ); + renderer.render(_PackedSplats.scene, _PackedSplats.camera); + base += SPLAT_TEX_WIDTH * (layerYEnd - layerYStart); + } + this.resetRenderState(renderer, renderState); + return { nextBase }; + } +}; +_PackedSplats.emptySource = null; +_PackedSplats.programTemplate = null; +_PackedSplats.generatorProgram = /* @__PURE__ */ new Map(); +_PackedSplats.geometry = new THREE.PlaneGeometry(2, 2); +_PackedSplats.mesh = new THREE.Mesh( + _PackedSplats.geometry, + new THREE.RawShaderMaterial({ visible: false }) +); +_PackedSplats.scene = new THREE.Scene().add(_PackedSplats.mesh); +_PackedSplats.camera = new THREE.Camera(); +let PackedSplats = _PackedSplats; +class DynoPackedSplats extends DynoUniform { + constructor({ packedSplats } = {}) { + super({ + key: "packedSplats", + type: TPackedSplats, + globals: () => [definePackedSplats], + value: { + texture: PackedSplats.getEmpty(), + numSplats: 0 + }, + update: (value) => { + var _a2, _b2; + value.texture = ((_a2 = this.packedSplats) == null ? void 0 : _a2.getTexture()) ?? PackedSplats.getEmpty(); + value.numSplats = ((_b2 = this.packedSplats) == null ? void 0 : _b2.numSplats) ?? 0; + return value; + } + }); + this.packedSplats = packedSplats; + } +} +class SplatGeometry extends THREE.InstancedBufferGeometry { + constructor(ordering, activeSplats) { + super(); + this.ordering = ordering; + this.setAttribute("position", new THREE.BufferAttribute(QUAD_VERTICES, 3)); + this.setIndex(new THREE.BufferAttribute(QUAD_INDICES, 1)); + this._maxInstanceCount = ordering.length; + this.instanceCount = activeSplats; + this.attribute = new THREE.InstancedBufferAttribute(ordering, 1, false, 1); + this.attribute.setUsage(THREE.DynamicDrawUsage); + this.setAttribute("splatIndex", this.attribute); + } + update(ordering, activeSplats) { + this.ordering = ordering; + this.attribute.array = ordering; + this.instanceCount = activeSplats; + this.attribute.addUpdateRange(0, activeSplats); + this.attribute.needsUpdate = true; + } +} +const QUAD_VERTICES = new Float32Array([ + -1, + -1, + 0, + 1, + -1, + 0, + 1, + 1, + 0, + -1, + 1, + 0 +]); +const QUAD_INDICES = new Uint16Array([0, 1, 2, 0, 2, 3]); +const _ForgeViewpoint = class _ForgeViewpoint { + constructor(options) { + this.lastTime = null; + this.encodeLinear = false; + this.superXY = 1; + this.display = null; + this.sorting = null; + this.pending = null; + this.sortingCheck = false; + this.readback = new Uint16Array(0); + this.forge = options.forge; + this.camera = options.camera; + this.viewToWorld = options.viewToWorld ?? new THREE.Matrix4(); + if (options.target) { + const { width, height, doubleBuffer } = options.target; + const superXY = Math.max(1, Math.min(4, options.target.superXY ?? 1)); + this.superXY = superXY; + if (width * superXY > 8192 || height * superXY > 8192) { + throw new Error("Target size too large"); + } + this.target = new THREE.WebGLRenderTarget( + width * superXY, + height * superXY, + { + format: THREE.RGBAFormat, + type: THREE.UnsignedByteType, + colorSpace: THREE.SRGBColorSpace + } + ); + if (doubleBuffer) { + this.back = new THREE.WebGLRenderTarget( + width * superXY, + height * superXY, + { + format: THREE.RGBAFormat, + type: THREE.UnsignedByteType, + colorSpace: THREE.SRGBColorSpace + } + ); + } + this.encodeLinear = true; + } + this.onTextureUpdated = options.onTextureUpdated; + this.sortRadial = options.sortRadial ?? true; + this.sortDistance = options.sortDistance; + this.sortCoorient = options.sortCoorient; + this.depthBias = options.depthBias; + this.sort360 = options.sort360; + this.orderingFreelist = new FreeList({ + allocate: (maxSplats) => new Uint32Array(maxSplats), + valid: (ordering, maxSplats) => ordering.length === maxSplats + }); + this.autoUpdate = false; + this.setAutoUpdate(options.autoUpdate ?? false); + } + // Call this when you are done with the ForgeViewpoint and want to + // free up its resources (GPU targets, pixel buffers, etc.) + dispose() { + var _a2; + this.setAutoUpdate(false); + if (this.target) { + this.target.dispose(); + this.target = void 0; + } + if (this.back) { + this.back.dispose(); + this.back = void 0; + } + if (this.display) { + this.forge.releaseAccumulator(this.display.accumulator); + this.display.geometry.dispose(); + this.display = null; + } + if ((_a2 = this.pending) == null ? void 0 : _a2.accumulator) { + this.forge.releaseAccumulator(this.pending.accumulator); + this.pending = null; + } + } + // Use this function to change whether this viewpoint will auto-update + // its sort order whenever the attached ForgeRenderer updates the Gsplats. + // Turn this on or off depending on whether you expect to do renders from + // this viewpoint most frames. + setAutoUpdate(autoUpdate) { + if (!this.autoUpdate && autoUpdate) { + this.forge.autoViewpoints.push(this); + } else if (this.autoUpdate && !autoUpdate) { + this.forge.autoViewpoints = this.forge.autoViewpoints.filter( + (v) => v !== this + ); + } + this.autoUpdate = autoUpdate; + } + // See below async prepareRenderPixels() for explanation of parameters. + // Awaiting this method updates the Gsplats in the scene and performs a sort of the + // Gsplats from this viewpoint, preparing it for a subsequent this.renderTarget() + // call in the same tick. + async prepare({ + scene, + camera, + viewToWorld, + update, + forceOrigin + }) { + var _a2; + if (viewToWorld) { + this.viewToWorld = viewToWorld; + } else { + this.camera = camera ?? this.camera; + if (this.camera) { + this.camera.updateMatrixWorld(); + this.viewToWorld = this.camera.matrixWorld.clone(); + } + } + while (update ?? true) { + const originToWorld = forceOrigin ? this.viewToWorld : void 0; + const updated = this.forge.updateInternal({ scene, originToWorld }); + if (updated) { + break; + } + await new Promise((resolve) => setTimeout(resolve, 10)); + } + const accumulator = this.forge.active; + if (accumulator !== ((_a2 = this.display) == null ? void 0 : _a2.accumulator)) { + this.forge.active.refCount += 1; + } + await this.sortUpdate({ accumulator, viewToWorld: this.viewToWorld }); + } + // Render out the viewpoint to the view target RGBA buffer. + // Swaps buffers if doubleBuffer: true was set. + // Calls onTextureUpdated(texture) with the resulting texture. + renderTarget({ + scene, + camera + }) { + var _a2; + const target = this.back ?? this.target; + if (!target) { + throw new Error("Must initialize ForgeViewpoint with target"); + } + camera = camera ?? this.camera; + if (!camera) { + throw new Error("Must provide camera"); + } + if (camera instanceof THREE.PerspectiveCamera) { + const newCam = new THREE.PerspectiveCamera().copy(camera, false); + newCam.aspect = target.width / target.height; + newCam.updateProjectionMatrix(); + camera = newCam; + } + this.viewToWorld = camera.matrixWorld.clone(); + try { + this.forge.renderer.setRenderTarget(target); + this.forge.prepareViewpoint(this); + this.forge.renderer.render(scene, camera); + } finally { + this.forge.prepareViewpoint(this.forge.defaultView); + this.forge.renderer.setRenderTarget(null); + } + if (target !== this.target) { + [this.target, this.back] = [this.back, this.target]; + } + (_a2 = this.onTextureUpdated) == null ? void 0 : _a2.call(this, target.texture); + } + // Read back the previously rendered target image as a Uint8Array of packed + // RGBA values (in that order). If superXY was set greater than 1 then + // downsampling is performed in the target pixel array with simple averaging + // to derive the returned pixel values. Subsequent calls to this.readTarget() + // will reuse the same buffers to minimize memory allocations. + async readTarget() { + if (!this.target) { + throw new Error("Must initialize ForgeViewpoint with target"); + } + const { width, height } = this.target; + const byteSize = width * height * 4; + if (!this.superPixels || this.superPixels.length < byteSize) { + this.superPixels = new Uint8Array(byteSize); + } + await this.forge.renderer.readRenderTargetPixelsAsync( + this.target, + 0, + 0, + width, + height, + this.superPixels + ); + const { superXY } = this; + if (superXY === 1) { + return this.superPixels; + } + const subWidth = width / superXY; + const subHeight = height / superXY; + const subSize = subWidth * subHeight * 4; + if (!this.pixels || this.pixels.length < subSize) { + this.pixels = new Uint8Array(subSize); + } + const { superPixels, pixels } = this; + const super2 = superXY * superXY; + for (let y = 0; y < subHeight; y++) { + const row = y * subWidth; + for (let x = 0; x < subWidth; x++) { + const superCol = x * superXY; + let r = 0; + let g = 0; + let b = 0; + let a = 0; + for (let sy = 0; sy < superXY; sy++) { + const superRow = (y * superXY + sy) * this.target.width; + for (let sx = 0; sx < superXY; sx++) { + const superIndex = (superRow + superCol + sx) * 4; + r += superPixels[superIndex]; + g += superPixels[superIndex + 1]; + b += superPixels[superIndex + 2]; + a += superPixels[superIndex + 3]; + } + } + const pixelIndex = (row + x) * 4; + pixels[pixelIndex] = r / super2; + pixels[pixelIndex + 1] = g / super2; + pixels[pixelIndex + 2] = b / super2; + pixels[pixelIndex + 3] = a / super2; + } + } + return pixels; + } + // Render out a viewpoint as a Uint8Array of RGBA values for the provided scene + // and any camera/viewToWorld viewpoint overrides. By default update is true, + // which triggers its ForgeRenderer to check and potentially update the Gsplats. + // Setting update to false disables this and sorts the Gsplats as they are. + // Setting forceOrigin (default: false) to true forces the view update to + // recalculate the splats with this view origin, potentially altering any + // view-dependent effects. If you expect view-dependent effects to play a role + // in the rendering quality, enable this. + // + // Underneath, prepareRenderPixels() simply calls await this.prepare(...), + // this.renderTarget(...), and finally returns the result this.readTarget(), + // a Promise to a Uint8Array with RGBA values for all the pixels (potentially + // downsampled if the superXY parameter was used). These steps can also be called + // manually, for example if you need to alter the scene before and after + // this.renderTarget(...) to hide UI elements from being rendered. + async prepareRenderPixels({ + scene, + camera, + viewToWorld, + update, + forceOrigin + }) { + await this.prepare({ scene, camera, viewToWorld, update, forceOrigin }); + this.renderTarget({ scene, camera }); + return this.readTarget(); + } + // This is called automatically by ForgeRenderer, there is no need to call it! + // The method cannot be private because then ForgeRenderer would + // not be able to call it. + autoPoll({ accumulator }) { + var _a2, _b2, _c; + if (this.camera) { + this.camera.updateMatrixWorld(); + this.viewToWorld = this.camera.matrixWorld.clone(); + } + let needsSort = false; + if (!this.display) { + needsSort = true; + } else if (accumulator) { + needsSort = true; + const { mappingVersion } = this.display.accumulator; + if (accumulator.mappingVersion === mappingVersion) { + this.forge.releaseAccumulator(this.display.accumulator); + this.display.accumulator = accumulator; + } + } + const latestView = ((_a2 = this.sorting) == null ? void 0 : _a2.viewToWorld) ?? ((_b2 = this.display) == null ? void 0 : _b2.viewToWorld); + if (latestView && !withinCoorientDist({ + matrix1: this.viewToWorld, + matrix2: latestView, + // By default update sort each 1 cm + maxDistance: this.sortDistance ?? 0.01, + // By default for radial sort, update for intermittent movement so that + // we bring back splats culled by being behind the camera. + // For depth sort, small rotations can change sort order a lot, so + // update sort for even small rotations. + minCoorient: this.sortCoorient ?? this.sortRadial ? 0.99 : 0.999 + })) { + needsSort = true; + } + if (!needsSort) { + return; + } + if (accumulator) { + accumulator.refCount += 1; + } + if (accumulator && ((_c = this.pending) == null ? void 0 : _c.accumulator)) { + this.forge.releaseAccumulator(this.pending.accumulator); + } + this.pending = { accumulator, viewToWorld: this.viewToWorld }; + this.driveSort(); + } + async driveSort() { + var _a2; + while (true) { + if (this.sorting || !this.pending) { + return; + } + const viewToWorld = this.pending.viewToWorld; + let accumulator = this.pending.accumulator ?? ((_a2 = this.display) == null ? void 0 : _a2.accumulator); + if (!accumulator) { + accumulator = this.forge.active; + accumulator.refCount += 1; + } + this.pending = null; + if (!accumulator) { + throw new Error("No accumulator to sort"); + } + this.sorting = { viewToWorld }; + await this.sortUpdate({ accumulator, viewToWorld }); + this.sorting = null; + } + } + async sortUpdate({ + accumulator, + viewToWorld + }) { + if (this.sortingCheck) { + throw new Error("Only one sort at a time"); + } + this.sortingCheck = true; + accumulator = accumulator ?? this.forge.active; + const { numSplats, maxSplats } = accumulator.splats; + let activeSplats = 0; + let ordering = this.orderingFreelist.alloc(maxSplats); + if (numSplats > 0) { + const { + reader, + doubleSortReader, + dynoSortRadial, + dynoOrigin, + dynoDirection, + dynoDepthBias, + dynoSort360, + dynoSplats + } = _ForgeViewpoint.makeSorter(); + const halfMaxSplats = Math.ceil(maxSplats / 2); + this.readback = reader.ensureBuffer(halfMaxSplats, this.readback); + const worldToOrigin = accumulator.toWorld.clone().invert(); + const viewToOrigin = viewToWorld.clone().premultiply(worldToOrigin); + dynoSortRadial.value = this.sort360 ? true : this.sortRadial; + dynoOrigin.value.set(0, 0, 0).applyMatrix4(viewToOrigin); + dynoDirection.value.set(0, 0, -1).applyMatrix4(viewToOrigin).sub(dynoOrigin.value).normalize(); + dynoDepthBias.value = this.depthBias ?? 1; + dynoSort360.value = this.sort360 ?? false; + dynoSplats.packedSplats = accumulator.splats; + await reader.renderReadback({ + renderer: this.forge.renderer, + reader: doubleSortReader, + count: Math.ceil(numSplats / 2), + readback: this.readback + }); + const result = await withWorker(async (worker) => { + return worker.call("sortDoubleSplats", { + numSplats, + readback: this.readback, + ordering + }); + }); + this.readback = result.readback; + ordering = result.ordering; + activeSplats = result.activeSplats; + } + this.updateDisplay({ accumulator, viewToWorld, ordering, activeSplats }); + this.sortingCheck = false; + } + updateDisplay({ + accumulator, + viewToWorld, + ordering, + activeSplats + }) { + if (!this.display) { + this.display = { + accumulator, + viewToWorld, + geometry: new SplatGeometry(ordering, activeSplats) + }; + } else { + if (accumulator !== this.display.accumulator) { + this.forge.releaseAccumulator(this.display.accumulator); + this.display.accumulator = accumulator; + } + this.display.viewToWorld = viewToWorld; + const oldOrdering = this.display.geometry.ordering; + if (oldOrdering.length === ordering.length) { + this.display.geometry.update(ordering, activeSplats); + } else { + this.display.geometry.dispose(); + this.display.geometry = new SplatGeometry(ordering, activeSplats); + } + this.orderingFreelist.free(oldOrdering); + } + if (this.forge.viewpoint === this) { + this.forge.prepareViewpoint(this); + } + } + static makeSorter() { + if (!_ForgeViewpoint.dynos) { + const dynoSortRadial = new DynoBool({ value: true }); + const dynoOrigin = new DynoVec3({ value: new THREE.Vector3() }); + const dynoDirection = new DynoVec3({ value: new THREE.Vector3() }); + const dynoDepthBias = new DynoFloat({ value: 1 }); + const dynoSort360 = new DynoBool({ value: false }); + const dynoSplats = new DynoPackedSplats(); + const reader = new Readback(); + const doubleSortReader = dynoBlock( + { index: "int" }, + { rgba8: "vec4" }, + ({ index }) => { + if (!index) { + throw new Error("No index"); + } + const sortParams = { + sortRadial: dynoSortRadial, + sortOrigin: dynoOrigin, + sortDirection: dynoDirection, + sortDepthBias: dynoDepthBias, + sort360: dynoSort360 + }; + const index2 = mul(index, dynoConst("int", 2)); + const gsplat0 = readPackedSplat(dynoSplats, index2); + const metric0 = computeSortMetric({ gsplat: gsplat0, ...sortParams }); + const gsplat1 = readPackedSplat( + dynoSplats, + add(index2, dynoConst("int", 1)) + ); + const metric1 = computeSortMetric({ gsplat: gsplat1, ...sortParams }); + const combined = combine({ + vectorType: "vec2", + x: metric0, + y: metric1 + }); + const rgba8 = uintToRgba8(packHalf2x16(combined)); + return { rgba8 }; + } + ); + _ForgeViewpoint.dynos = { + dynoSortRadial, + dynoOrigin, + dynoDirection, + dynoDepthBias, + dynoSort360, + dynoSplats, + reader, + doubleSortReader + }; + } + return _ForgeViewpoint.dynos; + } +}; +_ForgeViewpoint.EMPTY_TEXTURE = new THREE.Texture(); +_ForgeViewpoint.dynos = null; +let ForgeViewpoint = _ForgeViewpoint; +const defineComputeSortMetric = unindent(` + float computeSort(Gsplat gsplat, bool sortRadial, vec3 sortOrigin, vec3 sortDirection, float sortDepthBias, bool sort360) { + if (!isGsplatActive(gsplat.flags)) { + return INFINITY; + } + + vec3 center = gsplat.center - sortOrigin; + float biasedDepth = dot(center, sortDirection) + sortDepthBias; + if (!sort360 && (biasedDepth <= 0.0)) { + return INFINITY; + } + + return sortRadial ? length(center) : biasedDepth; + } +`); +function computeSortMetric({ + gsplat, + sortRadial, + sortOrigin, + sortDirection, + sortDepthBias, + sort360 +}) { + return dyno$1({ + inTypes: { + gsplat: Gsplat, + sortRadial: "bool", + sortOrigin: "vec3", + sortDirection: "vec3", + sortDepthBias: "float", + sort360: "bool" + }, + outTypes: { metric: "float" }, + globals: () => [defineGsplat, defineComputeSortMetric], + inputs: { + gsplat, + sortRadial, + sortOrigin, + sortDirection, + sortDepthBias, + sort360 + }, + statements: ({ inputs, outputs }) => { + const { + gsplat: gsplat2, + sortRadial: sortRadial2, + sortOrigin: sortOrigin2, + sortDirection: sortDirection2, + sortDepthBias: sortDepthBias2, + sort360: sort3602 + } = inputs; + return unindentLines(` + ${outputs.metric} = computeSort(${gsplat2}, ${sortRadial2}, ${sortOrigin2}, ${sortDirection2}, ${sortDepthBias2}, ${sort3602}); + `); + } + }).outputs.metric; +} +class SplatAccumulator { + constructor() { + this.splats = new PackedSplats(); + this.toWorld = new THREE.Matrix4(); + this.mapping = []; + this.refCount = 0; + this.splatsVersion = -1; + this.mappingVersion = -1; + } + ensureGenerate(maxSplats) { + if (this.splats.ensureGenerate(maxSplats)) { + this.mapping = []; + } + } + // Generate all Gsplats from an array of generators + generateSplats({ + renderer, + modifier, + generators: generators2, + forceUpdate, + originToWorld + }) { + const mapping = this.mapping.reduce((map, record) => { + map.set(record.node, record); + return map; + }, /* @__PURE__ */ new Map()); + let updated = 0; + let numSplats = 0; + for (const { node, generator, version, base, count } of generators2) { + const current = mapping.get(node); + if (forceUpdate || generator !== (current == null ? void 0 : current.generator) || version !== (current == null ? void 0 : current.version) || base !== (current == null ? void 0 : current.base) || count !== (current == null ? void 0 : current.count)) { + if (generator) { + const modGenerator = modifier.apply(generator); + try { + this.splats.generate({ + generator: modGenerator, + base, + count, + renderer + }); + } catch (error) { + node.generator = void 0; + node.generatorError = error; + } + updated += 1; + } + } + numSplats = Math.max(numSplats, base + count); + } + this.splats.numSplats = numSplats; + this.toWorld = originToWorld; + this.mapping = generators2; + return updated !== 0; + } + // Check if this accumulator has exactly the same generator mapping as + // the previous one. If so, we can reuse the Gsplat sort order. + hasCorrespondence(other) { + if (this.mapping.length !== other.mapping.length) { + return false; + } + return this.mapping.every(({ node, base, count }, i) => { + const { + node: otherNode, + base: otherBase, + count: otherCount + } = other.mapping[i]; + return node === otherNode && base === otherBase && count === otherCount; + }); + } +} +var splatDefines_default = "const float LN_SCALE_MIN = -9.0;\nconst float LN_SCALE_MAX = 9.0;\nconst float LN_RESCALE = (LN_SCALE_MAX - LN_SCALE_MIN) / 254.0; \n\nconst uint SPLAT_TEX_WIDTH_BITS = 11u;\nconst uint SPLAT_TEX_HEIGHT_BITS = 11u;\nconst uint SPLAT_TEX_DEPTH_BITS = 11u;\nconst uint SPLAT_TEX_LAYER_BITS = SPLAT_TEX_WIDTH_BITS + SPLAT_TEX_HEIGHT_BITS;\n\nconst uint SPLAT_TEX_WIDTH = 1u << SPLAT_TEX_WIDTH_BITS;\nconst uint SPLAT_TEX_HEIGHT = 1u << SPLAT_TEX_HEIGHT_BITS;\nconst uint SPLAT_TEX_DEPTH = 1u << SPLAT_TEX_DEPTH_BITS;\n\nconst uint SPLAT_TEX_WIDTH_MASK = SPLAT_TEX_WIDTH - 1u;\nconst uint SPLAT_TEX_HEIGHT_MASK = SPLAT_TEX_HEIGHT - 1u;\nconst uint SPLAT_TEX_DEPTH_MASK = SPLAT_TEX_DEPTH - 1u;\n\nconst uint F16_INF = 0x7c00u;\nconst float PI = 3.1415926535897932384626433832795;\n\nconst float INFINITY = 1.0 / 0.0;\nconst float NEG_INFINITY = -INFINITY;\n\nconst float MAX_PIXEL_RADIUS = 512.0;\nconst float MIN_ALPHA = 0.01;\nconst float MAX_STDDEV = sqrt(8.0);\n\nfloat sqr(float x) {\n return x * x;\n}\n\nfloat pow4(float x) {\n float x2 = x * x;\n return x2 * x2;\n}\n\nfloat pow8(float x) {\n float x4 = pow4(x);\n return x4 * x4;\n}\n\nvec3 srgbToLinear(vec3 rgb) {\n return pow(rgb, vec3(2.2));\n}\n\nvec3 linearToSrgb(vec3 rgb) {\n return pow(rgb, vec3(1.0 / 2.2));\n}\n\nuint encodeQuatOctXy88R8(vec4 q) {\n \n if (q.w < 0.0) {\n q = -q;\n }\n \n float theta = 2.0 * acos(q.w);\n float halfTheta = theta * 0.5;\n float s = sin(halfTheta);\n \n vec3 axis = (abs(s) < 1e-6) ? vec3(1.0, 0.0, 0.0) : q.xyz / s;\n \n \n \n float sum = abs(axis.x) + abs(axis.y) + abs(axis.z);\n vec2 p = vec2(axis.x, axis.y) / sum;\n \n if (axis.z < 0.0) {\n float oldPx = p.x;\n p.x = (1.0 - abs(p.y)) * (p.x >= 0.0 ? 1.0 : -1.0);\n p.y = (1.0 - abs(oldPx)) * (p.y >= 0.0 ? 1.0 : -1.0);\n }\n \n float u_f = p.x * 0.5 + 0.5;\n float v_f = p.y * 0.5 + 0.5;\n \n uint quantU = uint(clamp(round(u_f * 255.0), 0.0, 255.0));\n uint quantV = uint(clamp(round(v_f * 255.0), 0.0, 255.0));\n \n \n \n uint angleInt = uint(clamp(round((theta / 3.14159265359) * 255.0), 0.0, 255.0));\n \n \n return (angleInt << 16u) | (quantV << 8u) | quantU;\n}\n\nvec4 decodeQuatOctXy88R8(uint encoded) {\n \n uint quantU = encoded & uint(0xFFu); \n uint quantV = (encoded >> 8u) & uint(0xFFu); \n uint angleInt = encoded >> 16u; \n\n \n float u_f = float(quantU) / 255.0;\n float v_f = float(quantV) / 255.0;\n vec2 f = vec2(u_f * 2.0 - 1.0, v_f * 2.0 - 1.0);\n\n vec3 axis = vec3(f.xy, 1.0 - abs(f.x) - abs(f.y));\n float t = max(-axis.z, 0.0);\n axis.x += (axis.x >= 0.0) ? -t : t;\n axis.y += (axis.y >= 0.0) ? -t : t;\n axis = normalize(axis);\n \n \n float theta = (float(angleInt) / 255.0) * 3.14159265359;\n float halfTheta = theta * 0.5;\n float s = sin(halfTheta);\n float w = cos(halfTheta);\n \n return vec4(axis * s, w);\n}\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\nuvec4 packSplat(vec3 center, vec3 scales, vec4 quaternion, vec4 rgba) {\n uvec4 uRgba = uvec4(round(clamp(rgba * 255.0, 0.0, 255.0)));\n\n uint uQuat = encodeQuatOctXy88R8(quaternion);\n \n \n uvec3 uQuat3 = uvec3(uQuat & 0xffu, (uQuat >> 8u) & 0xffu, (uQuat >> 16u) & 0xffu);\n\n \n uvec3 uScales = uvec3(\n (scales.x == 0.0) ? 0u : uint(round(clamp((log(scales.x) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u,\n (scales.y == 0.0) ? 0u : uint(round(clamp((log(scales.y) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u,\n (scales.z == 0.0) ? 0u : uint(round(clamp((log(scales.z) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u\n );\n\n \n uint word0 = uRgba.r | (uRgba.g << 8u) | (uRgba.b << 16u) | (uRgba.a << 24u);\n uint word1 = packHalf2x16(center.xy);\n uint word2 = packHalf2x16(vec2(center.z, 0.0)) | (uQuat3.x << 16u) | (uQuat3.y << 24u);\n uint word3 = uScales.x | (uScales.y << 8u) | (uScales.z << 16u) | (uQuat3.z << 24u);\n return uvec4(word0, word1, word2, word3);\n}\n\nvoid unpackSplat(uvec4 packed, out vec3 center, out vec3 scales, out vec4 quaternion, out vec4 rgba) {\n uint word0 = packed.x, word1 = packed.y, word2 = packed.z, word3 = packed.w;\n\n uvec4 uRgba = uvec4(word0 & 0xffu, (word0 >> 8u) & 0xffu, (word0 >> 16u) & 0xffu, (word0 >> 24u) & 0xffu);\n rgba = vec4(uRgba) / 255.0;\n\n center = vec4(\n unpackHalf2x16(word1),\n unpackHalf2x16(word2 & 0xffffu)\n ).xyz;\n\n uvec3 uScales = uvec3(word3 & 0xffu, (word3 >> 8u) & 0xffu, (word3 >> 16u) & 0xffu);\n scales = vec3(\n (uScales.x == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.x - 1u) * LN_RESCALE),\n (uScales.y == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.y - 1u) * LN_RESCALE),\n (uScales.z == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.z - 1u) * LN_RESCALE)\n );\n\n uint uQuat = ((word2 >> 16u) & 0xFFFFu) | ((word3 >> 8u) & 0xFF0000u);\n quaternion = decodeQuatOctXy88R8(uQuat);\n \n \n}\n\nvec3 quatVec(vec4 q, vec3 v) {\n \n vec3 t = 2.0 * cross(q.xyz, v);\n return v + q.w * t + cross(q.xyz, t);\n}\n\nvec4 quatQuat(vec4 q1, vec4 q2) {\n return vec4(\n q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y,\n q1.w * q2.y - q1.x * q2.z + q1.y * q2.w + q1.z * q2.x,\n q1.w * q2.z + q1.x * q2.y - q1.y * q2.x + q1.z * q2.w,\n q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z\n );\n}\n\nmat3 scaleQuaternionToMatrix(vec3 s, vec4 q) {\n \n return mat3(\n s.x * (1.0 - 2.0 * (q.y * q.y + q.z * q.z)),\n s.x * (2.0 * (q.x * q.y + q.w * q.z)),\n s.x * (2.0 * (q.x * q.z - q.w * q.y)),\n s.y * (2.0 * (q.x * q.y - q.w * q.z)),\n s.y * (1.0 - 2.0 * (q.x * q.x + q.z * q.z)),\n s.y * (2.0 * (q.y * q.z + q.w * q.x)),\n s.z * (2.0 * (q.x * q.z + q.w * q.y)),\n s.z * (2.0 * (q.y * q.z - q.w * q.x)),\n s.z * (1.0 - 2.0 * (q.x * q.x + q.y * q.y))\n );\n}\n\nvec4 slerp(vec4 q1, vec4 q2, float t) {\n \n float cosHalfTheta = dot(q1, q2);\n\n \n if (abs(cosHalfTheta) >= 0.999) {\n return q1;\n }\n \n \n \n if (cosHalfTheta < 0.0) {\n q2 = -q2;\n cosHalfTheta = -cosHalfTheta;\n }\n\n \n float halfTheta = acos(cosHalfTheta);\n float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta);\n\n \n float ratioA = sin((1.0 - t) * halfTheta) / sinHalfTheta;\n float ratioB = sin(t * halfTheta) / sinHalfTheta;\n\n \n return q1 * ratioA + q2 * ratioB;\n}\n\nivec3 splatTexCoord(int index) {\n uint x = uint(index) & SPLAT_TEX_WIDTH_MASK;\n uint y = (uint(index) >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK;\n uint z = uint(index) >> SPLAT_TEX_LAYER_BITS;\n return ivec3(x, y, z);\n}"; +var splatFragment_default = "precision highp float;\nprecision highp int;\n\n#include \n\nuniform bool encodeLinear;\nuniform float maxStdDev;\nuniform bool disableFalloff;\nuniform float falloff;\n\nout vec4 fragColor;\n\nin vec4 vRgba;\nin vec2 vSplatUv;\nin vec3 vNdc;\n\nvoid main() {\n float z = dot(vSplatUv, vSplatUv);\n if (z > (maxStdDev * maxStdDev)) {\n discard;\n }\n\n float alpha = vRgba.a;\n alpha *= mix(1.0, exp(-0.5 * z), falloff);\n if (alpha < MIN_ALPHA) {\n discard;\n }\n\n vec3 rgb = vRgba.rgb;\n if (encodeLinear) {\n rgb = srgbToLinear(rgb);\n }\n fragColor = vec4(rgb, alpha);\n}"; +var splatVertex_default = "precision highp float;\nprecision highp int;\nprecision highp usampler2DArray;\n\n#include \n\nattribute uint splatIndex;\n\nout vec4 vRgba;\nout vec2 vSplatUv;\nout vec3 vNdc;\n\nuniform vec2 renderSize;\nuniform uint numSplats;\nuniform vec4 renderToViewQuat;\nuniform vec3 renderToViewPos;\nuniform float maxStdDev;\nuniform float time;\nuniform float deltaTime;\nuniform bool debugFlag;\nuniform bool enable2DGS;\nuniform float blurAmount;\nuniform float preBlurAmount;\nuniform float clipXY;\n\nuniform usampler2DArray packedSplats;\n\nvoid main() {\n \n gl_Position = vec4(0.0, 0.0, 2.0, 1.0);\n\n if (uint(gl_InstanceID) >= numSplats) {\n return;\n }\n if (splatIndex == 0xffffffffu) {\n \n return;\n }\n\n ivec3 texCoord = ivec3(\n splatIndex & SPLAT_TEX_WIDTH_MASK,\n (splatIndex >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK,\n splatIndex >> SPLAT_TEX_LAYER_BITS\n );\n uvec4 packed = texelFetch(packedSplats, texCoord, 0);\n\n vec3 center, scales;\n vec4 quaternion, rgba;\n unpackSplat(packed, center, scales, quaternion, rgba);\n\n if (rgba.a < MIN_ALPHA) {\n return;\n }\n bvec3 zeroScales = equal(scales, vec3(0.0));\n if (all(zeroScales)) {\n return;\n }\n\n \n vec3 viewCenter = quatVec(renderToViewQuat, center) + renderToViewPos;\n\n \n if (viewCenter.z >= 0.0) {\n return;\n }\n\n \n vec4 clipCenter = projectionMatrix * vec4(viewCenter, 1.0);\n\n \n if (abs(clipCenter.z) >= clipCenter.w) {\n return;\n }\n\n \n float clip = clipXY * clipCenter.w;\n if (abs(clipCenter.x) > clip || abs(clipCenter.y) > clip) {\n return;\n }\n\n \n vec4 viewQuaternion = quatQuat(renderToViewQuat, quaternion);\n\n if (enable2DGS && any(zeroScales)) {\n vRgba = rgba;\n vSplatUv = position.xy * maxStdDev;\n\n vec3 offset;\n if (zeroScales.z) {\n offset = vec3(vSplatUv.xy * scales.xy, 0.0);\n } else if (zeroScales.y) {\n offset = vec3(vSplatUv.x * scales.x, 0.0, vSplatUv.y * scales.z);\n } else {\n offset = vec3(0.0, vSplatUv.xy * scales.yz);\n }\n\n vec3 viewPos = viewCenter + quatVec(viewQuaternion, offset);\n gl_Position = projectionMatrix * vec4(viewPos, 1.0);\n vNdc = gl_Position.xyz / gl_Position.w;\n return;\n }\n\n \n vec3 ndcCenter = clipCenter.xyz / clipCenter.w;\n\n \n mat3 RS = scaleQuaternionToMatrix(scales, viewQuaternion);\n mat3 cov3D = RS * transpose(RS);\n\n \n vec2 focal = 0.5 * renderSize * vec2(projectionMatrix[0][0], projectionMatrix[1][1]);\n float invZ = 1.0 / viewCenter.z;\n vec2 J1 = focal * invZ;\n vec2 J2 = -(J1 * viewCenter.xy) * invZ;\n mat3 J = mat3(\n J1.x, 0.0, J2.x,\n 0.0, J1.y, J2.y,\n 0.0, 0.0, 0.0\n );\n\n \n \n \n \n \n \n \n mat3 cov2D = transpose(J) * cov3D * J;\n float a = cov2D[0][0];\n float d = cov2D[1][1];\n float b = cov2D[0][1];\n\n \n a += preBlurAmount;\n d += preBlurAmount;\n\n \n float detOrig = a * d - b * b;\n a += blurAmount;\n d += blurAmount;\n float det = a * d - b * b;\n\n \n float blurAdjust = sqrt(max(0.0, detOrig / det));\n rgba.a *= blurAdjust;\n if (rgba.a < MIN_ALPHA) {\n return;\n }\n\n \n float eigenAvg = 0.5 * (a + d);\n float eigenDelta = sqrt(max(0.0, eigenAvg * eigenAvg - det));\n float eigen1 = eigenAvg + eigenDelta;\n float eigen2 = eigenAvg - eigenDelta;\n\n vec2 eigenVec1 = normalize(vec2((abs(b) < 0.001) ? 1.0 : b, eigen1 - a));\n vec2 eigenVec2 = vec2(eigenVec1.y, -eigenVec1.x);\n\n float scale1 = position.x * min(MAX_PIXEL_RADIUS, maxStdDev * sqrt(eigen1));\n float scale2 = position.y * min(MAX_PIXEL_RADIUS, maxStdDev * sqrt(eigen2));\n\n \n vec2 pixelOffset = eigenVec1 * scale1 + eigenVec2 * scale2;\n vec2 ndcOffset = (2.0 / renderSize) * pixelOffset;\n vec3 ndc = vec3(ndcCenter.xy + ndcOffset, ndcCenter.z);\n\n vRgba = rgba;\n vSplatUv = position.xy * maxStdDev;\n vNdc = ndc;\n gl_Position = vec4(ndc.xy * clipCenter.w, clipCenter.zw);\n}"; +let shaders = null; +function getShaders() { + if (!shaders) { + THREE.ShaderChunk.splatDefines = splatDefines_default; + shaders = { + splatVertex: splatVertex_default, + splatFragment: splatFragment_default + }; + } + return shaders; +} +const MAX_ACCUMULATORS = 5; +let hasSplatMesh = false; +let hasForgeRenderer = false; +let forgeRendererInstance; +const sceneAdd = THREE.Scene.prototype.add; +THREE.Scene.prototype.add = function(object) { + hasSplatMesh = hasSplatMesh || object instanceof SplatMesh; + hasForgeRenderer = hasForgeRenderer || object instanceof ForgeRenderer; + sceneAdd.call(this, object); + return this; +}; +const sceneOnBeforeRender = THREE.Scene.prototype.onBeforeRender; +THREE.Scene.prototype.onBeforeRender = function(renderer) { + if (!hasSplatMesh) { + return; + } + if (!hasForgeRenderer) { + const forge = forgeRendererInstance || new ForgeRenderer({ renderer }); + this.add(forge); + } + THREE.Scene.prototype.onBeforeRender = sceneOnBeforeRender; + THREE.Scene.prototype.add = sceneAdd; +}; +const _ForgeRenderer = class _ForgeRenderer extends THREE.Mesh { + constructor(options) { + const uniforms = _ForgeRenderer.makeUniforms(); + const shaders2 = getShaders(); + const material = new THREE.ShaderMaterial({ + glslVersion: THREE.GLSL3, + vertexShader: shaders2.splatVertex, + fragmentShader: shaders2.splatFragment, + uniforms, + transparent: true, + blending: THREE.NormalBlending, + depthTest: true, + depthWrite: false, + side: THREE.DoubleSide + }); + super(EMPTY_GEOMETRY, material); + this.autoViewpoints = []; + this.rotateToAccumulator = new DynoVec4({ value: new THREE.Quaternion() }); + this.translateToAccumulator = new DynoVec3({ value: new THREE.Vector3() }); + this.lastFrame = -1; + this.lastUpdateTime = null; + this.defaultCameras = []; + this.pendingUpdate = null; + this.envViewpoint = null; + this.frustumCulled = false; + this.renderer = options.renderer; + this.material = material; + this.uniforms = uniforms; + const modifier = dynoBlock( + { gsplat: Gsplat }, + { gsplat: Gsplat }, + ({ gsplat }) => { + if (!gsplat) { + throw new Error("gsplat not defined"); + } + gsplat = transformGsplat(gsplat, { + rotate: this.rotateToAccumulator, + translate: this.translateToAccumulator + }); + return { gsplat }; + } + ); + this.modifier = new SplatModifier(modifier); + this.autoUpdate = options.autoUpdate ?? true; + this.preUpdate = options.preUpdate ?? false; + this.originDistance = options.originDistance ?? 1; + this.maxStdDev = options.maxStdDev ?? Math.sqrt(8); + this.enable2DGS = options.enable2DGS ?? true; + this.preBlurAmount = options.preBlurAmount ?? 0; + this.blurAmount = options.blurAmount ?? 0.3; + this.falloff = options.falloff ?? 1; + this.clipXY = options.clipXY ?? 1.4; + this.active = new SplatAccumulator(); + this.accumulatorCount = 1; + this.freeAccumulators = []; + for (let count = 0; count < 1; ++count) { + this.freeAccumulators.push(new SplatAccumulator()); + this.accumulatorCount += 1; + } + this.defaultView = new ForgeViewpoint({ + ...options.view, + autoUpdate: true, + forge: this + }); + this.viewpoint = this.defaultView; + this.prepareViewpoint(this.viewpoint); + this.clock = options.clock ? cloneClock(options.clock) : new THREE.Clock(); + forgeRendererInstance = this; + } + static makeUniforms() { + const uniforms = { + // Size of render viewport in pixels + renderSize: { value: new THREE.Vector2() }, + // Total number of Gsplats in packedSplats to render + numSplats: { value: 0 }, + // SplatAccumulator to view transformation quaternion + renderToViewQuat: { value: new THREE.Quaternion() }, + // SplatAccumulator to view transformation translation + renderToViewPos: { value: new THREE.Vector3() }, + // Maximum distance (in stddevs) from Gsplat center to render + maxStdDev: { value: 1 }, + // Enable interpreting 0-thickness Gsplats as 2DGS + enable2DGS: { value: false }, + // Add to projected 2D splat covariance diagonal (thickens and brightens) + preBlurAmount: { value: 0 }, + // Add to 2D splat covariance diagonal and adjust opacity (anti-aliasing) + blurAmount: { value: 0.3 }, + // Modulate Gaussian kernal falloff. 0 means "no falloff, flat shading", + // 1 is normal e^-x^2 falloff. + falloff: { value: 1 }, + // Clip Gsplats that are clipXY times beyond the +-1 frustum bounds + clipXY: { value: 1.4 }, + // Gsplat collection to render + packedSplats: { type: "t", value: PackedSplats.getEmpty() }, + // Time in seconds for time-based effects + time: { value: 0 }, + // Delta time in seconds since last frame + deltaTime: { value: 0 }, + // Whether to encode Gsplat with linear RGB (for environment mapping) + encodeLinear: { value: false }, + // Debug flag that alternates each frame + debugFlag: { value: false } + }; + return uniforms; + } + canAllocAccumulator() { + return this.freeAccumulators.length > 0 || this.accumulatorCount < MAX_ACCUMULATORS; + } + maybeAllocAccumulator() { + let accumulator = this.freeAccumulators.pop(); + if (accumulator === void 0) { + if (this.accumulatorCount >= MAX_ACCUMULATORS) { + return null; + } + accumulator = new SplatAccumulator(); + this.accumulatorCount += 1; + } + accumulator.refCount = 1; + return accumulator; + } + releaseAccumulator(accumulator) { + accumulator.refCount -= 1; + if (accumulator.refCount === 0) { + this.freeAccumulators.push(accumulator); + } + } + newViewpoint(options) { + return new ForgeViewpoint({ ...options, forge: this }); + } + onBeforeRender(renderer, scene, camera) { + var _a2, _b2; + const time = this.time ?? this.clock.getElapsedTime(); + const deltaTime = time - (this.viewpoint.lastTime ?? time); + this.viewpoint.lastTime = time; + const frame = renderer.info.render.frame; + const isNewFrame = frame !== this.lastFrame; + this.lastFrame = frame; + const viewpoint = this.viewpoint; + if (viewpoint === this.defaultView) { + if (isNewFrame) { + if (!renderer.xr.isPresenting) { + this.defaultView.viewToWorld = camera.matrixWorld.clone(); + this.defaultCameras = [this.defaultView.viewToWorld]; + } else { + const cameras = renderer.xr.getCamera().cameras; + this.defaultCameras = [ + cameras[0].matrixWorld, + cameras[1].matrixWorld + ]; + this.defaultView.viewToWorld = averageOriginToWorlds(this.defaultCameras) ?? new THREE.Matrix4(); + } + } + if (this.autoUpdate) { + this.update({ scene, viewToWorld: this.defaultView.viewToWorld }); + } + } + if (isNewFrame) { + this.uniforms.time.value = time; + this.uniforms.deltaTime.value = deltaTime; + this.uniforms.debugFlag.value = performance.now() / 1e3 % 2 < 1; + } + if (viewpoint.target) { + this.uniforms.renderSize.value.set( + viewpoint.target.width, + viewpoint.target.height + ); + } else { + const renderSize = renderer.getSize(this.uniforms.renderSize.value); + if (renderSize.x === 1 && renderSize.y === 1) { + const baseLayer = (_a2 = renderer.xr.getSession()) == null ? void 0 : _a2.renderState.baseLayer; + if (baseLayer) { + renderSize.x = baseLayer.framebufferWidth; + renderSize.y = baseLayer.framebufferHeight; + } + } + } + this.uniforms.encodeLinear.value = viewpoint.encodeLinear; + this.uniforms.maxStdDev.value = this.maxStdDev; + this.uniforms.enable2DGS.value = this.enable2DGS; + this.uniforms.preBlurAmount.value = this.preBlurAmount; + this.uniforms.blurAmount.value = this.blurAmount; + this.uniforms.falloff.value = this.falloff; + this.uniforms.clipXY.value = this.clipXY; + const accumToWorld = ((_b2 = viewpoint.display) == null ? void 0 : _b2.accumulator.toWorld) ?? new THREE.Matrix4(); + const worldToCamera = camera.matrixWorld.clone().invert(); + const originToCamera = accumToWorld.clone().premultiply(worldToCamera); + originToCamera.decompose( + this.uniforms.renderToViewPos.value, + this.uniforms.renderToViewQuat.value, + new THREE.Vector3() + ); + } + // Update the uniforms for the given viewpoint. + // Note that the client expects to be able to call render() at any point + // to update the canvas, so we must switch the viewpoint back to + // defaultView when we're finished. + prepareViewpoint(viewpoint) { + this.viewpoint = viewpoint ?? this.viewpoint; + if (this.viewpoint.display) { + const { accumulator, geometry } = this.viewpoint.display; + this.uniforms.numSplats.value = accumulator.splats.numSplats; + this.uniforms.packedSplats.value = accumulator.splats.getTexture(); + this.geometry = geometry; + } else { + this.uniforms.numSplats.value = 0; + this.uniforms.packedSplats.value = PackedSplats.getEmpty(); + this.geometry = EMPTY_GEOMETRY; + } + } + // If forge.autoUpdate is false then you must manually call + // forge.update({ scene }) to have the scene Gsplats be re-generated. + update({ + scene, + viewToWorld + }) { + const originToWorld = this.matrixWorld.clone(); + if (this.preUpdate) { + this.updateInternal({ scene, originToWorld, viewToWorld }); + } else { + this.pendingUpdate = { + scene, + originToWorld + }; + setTimeout(() => { + if (this.pendingUpdate) { + const { scene: scene2, originToWorld: originToWorld2 } = this.pendingUpdate; + this.pendingUpdate = null; + this.updateInternal({ scene: scene2, originToWorld: originToWorld2, viewToWorld }); + } + }, 1); + } + } + updateInternal({ + scene, + originToWorld, + viewToWorld + }) { + var _a2; + if (!this.canAllocAccumulator()) { + return false; + } + if (!originToWorld) { + originToWorld = this.active.toWorld; + } + viewToWorld = viewToWorld ?? originToWorld.clone(); + const time = this.time ?? this.clock.getElapsedTime(); + const deltaTime = time - (this.lastUpdateTime ?? time); + this.lastUpdateTime = time; + const activeMapping = this.active.mapping.reduce((map, record) => { + map.set(record.node, record); + return map; + }, /* @__PURE__ */ new Map()); + const { generators: generators2, globalEdits } = this.compileScene(scene); + for (const object of generators2) { + (_a2 = object.frameUpdate) == null ? void 0 : _a2.call(object, { + object, + time, + deltaTime, + viewToWorld, + globalEdits + }); + } + for (const object of generators2) { + const current = activeMapping.get(object); + const numSplats = object.generator ? object.numSplats : 0; + if (object.generator !== (current == null ? void 0 : current.generator) || numSplats !== (current == null ? void 0 : current.count)) { + object.updateVersion(); + } + } + const originUpdate = !withinCoorientDist({ + matrix1: originToWorld, + matrix2: this.active.toWorld, + maxDistance: this.originDistance + }); + const needsUpdate = originUpdate || generators2.length !== activeMapping.size || generators2.some((g) => { + var _a3; + return g.version !== ((_a3 = activeMapping.get(g)) == null ? void 0 : _a3.version); + }); + let accumulator = null; + if (needsUpdate) { + accumulator = this.maybeAllocAccumulator(); + if (!accumulator) { + throw new Error("Unreachable"); + } + const originChanged = !withinCoorientDist({ + matrix1: originToWorld, + matrix2: this.active.toWorld, + maxDistance: 1e-5, + minCoorient: 0.99999 + }); + const sorted = generators2.map((g, gIndex) => { + const lastGen = activeMapping.get(g); + return !lastGen ? [Number.POSITIVE_INFINITY, g.version, g] : ( + // Sort by version deltas then by previous ordering in the mapping, + // attempting to keep unchanging generators near the front + // to improve our chances of avoiding a re-generation. + [g.version - lastGen.version, lastGen.base, g] + ); + }).sort((a, b) => { + if (a[0] !== b[0]) { + return a[0] - b[0]; + } + return a[1] - b[1]; + }); + const genOrder = sorted.map(([_version, _seq, g]) => g); + const splatCounts = genOrder.map((g) => g.numSplats); + const { maxSplats, mapping } = accumulator.splats.generateMapping(splatCounts); + const newGenerators = genOrder.map((node, gIndex) => { + const { base, count } = mapping[gIndex]; + return { + node, + generator: node.generator, + version: node.version, + base, + count + }; + }); + originToWorld.clone().invert().decompose( + this.translateToAccumulator.value, + this.rotateToAccumulator.value, + new THREE.Vector3() + ); + accumulator.ensureGenerate(maxSplats); + accumulator.generateSplats({ + renderer: this.renderer, + modifier: this.modifier, + generators: newGenerators, + forceUpdate: originChanged, + originToWorld + }); + accumulator.splatsVersion = this.active.splatsVersion + 1; + const hasCorrespondence = accumulator.hasCorrespondence(this.active); + accumulator.mappingVersion = this.active.mappingVersion + (hasCorrespondence ? 0 : 1); + this.releaseAccumulator(this.active); + this.active = accumulator; + this.prepareViewpoint(); + } + setTimeout(() => { + for (const view of this.autoViewpoints) { + view.autoPoll({ accumulator: accumulator ?? void 0 }); + } + }, 1); + return true; + } + compileScene(scene) { + const generators2 = []; + scene.traverse((node) => { + if (node instanceof SplatGenerator) { + generators2.push(node); + } + }); + const globalEdits = /* @__PURE__ */ new Set(); + scene.traverseVisible((node) => { + if (node instanceof SplatEdit) { + let ancestor = node.parent; + while (ancestor != null && !(ancestor instanceof SplatMesh)) { + ancestor = ancestor.parent; + } + if (ancestor == null) { + globalEdits.add(node); + } + } + }); + return { generators: generators2, globalEdits: Array.from(globalEdits) }; + } + // Renders out the scene to an environment map that can be used for + // Image-based lighting or similar applications. First optionally updates Gsplats, + // sorts them with respect to the provided worldCenter, renders 6 cube faces, + // then pre-filters them using THREE.PMREMGenerator and returns a THREE.Texture + // that can assigned directly to a THREE.MeshStandardMaterial.envMap property. + async renderEnvMap({ + renderer, + scene, + worldCenter, + size = 256, + near = 0.1, + far = 1e3, + hideObjects = [], + update = false + }) { + var _a2, _b2; + if (!this.envViewpoint) { + this.envViewpoint = this.newViewpoint({ sort360: true }); + } + if (!_ForgeRenderer.cubeRender || _ForgeRenderer.cubeRender.target.width !== size || _ForgeRenderer.cubeRender.near !== near || _ForgeRenderer.cubeRender.far !== far) { + if (_ForgeRenderer.cubeRender) { + _ForgeRenderer.cubeRender.target.dispose(); + } + const target2 = new THREE.WebGLCubeRenderTarget(size, { + format: THREE.RGBAFormat, + generateMipmaps: true, + minFilter: THREE.LinearMipMapLinearFilter + }); + const camera2 = new THREE.CubeCamera(near, far, target2); + _ForgeRenderer.cubeRender = { target: target2, camera: camera2, near, far }; + } + if (!_ForgeRenderer.pmrem) { + _ForgeRenderer.pmrem = new THREE.PMREMGenerator(renderer ?? this.renderer); + } + const viewToWorld = new THREE.Matrix4().setPosition(worldCenter); + await ((_a2 = this.envViewpoint) == null ? void 0 : _a2.prepare({ scene, viewToWorld, update })); + const { target, camera } = _ForgeRenderer.cubeRender; + camera.position.copy(worldCenter); + const objectVisibility = /* @__PURE__ */ new Map(); + for (const object of hideObjects) { + objectVisibility.set(object, object.visible); + object.visible = false; + } + this.prepareViewpoint(this.envViewpoint); + camera.update(renderer ?? this.renderer, scene); + this.prepareViewpoint(this.defaultView); + for (const [object, visible] of objectVisibility.entries()) { + object.visible = visible; + } + return (_b2 = _ForgeRenderer.pmrem) == null ? void 0 : _b2.fromCubemap(target.texture).texture; + } + // Utility function to recursively set the envMap property for any + // THREE.MeshStandardMaterial within the subtree of root. + recurseSetEnvMap(root, envMap) { + root.traverse((node) => { + if (node instanceof THREE.Mesh) { + if (Array.isArray(node.material)) { + for (const material of node.material) { + if (material instanceof THREE.MeshStandardMaterial) { + material.envMap = envMap; + } + } + } else { + if (node.material instanceof THREE.MeshStandardMaterial) { + node.material.envMap = envMap; + } + } + } + }); + } + // Utility function that helps extract the Gsplat RGBA values from a + // SplatGenerator, including the result of any real-time RGBA SDF edits applied + // to a SplatMesh. This effectively "bakes" any computed RGBA values, which can + // now be used as a pipeline input via SplatMesh.splatRgba to inject these + // baked values into the Gsplat data. + getRgba({ + generator, + rgba + }) { + const mapping = this.active.mapping.find(({ node }) => node === generator); + if (!mapping) { + throw new Error("Generator not found"); + } + rgba = rgba ?? new RgbaArray(); + rgba.fromPackedSplats({ + packedSplats: this.active.splats, + base: mapping.base, + count: mapping.count, + renderer: this.renderer + }); + return rgba; + } + // Utility function that builds on getRgba({ generator }) and additionally + // reads back the RGBA values to the CPU in a Uint8Array with packed RGBA + // in that byte order. + async readRgba({ + generator, + rgba + }) { + rgba = this.getRgba({ generator, rgba }); + return rgba.read(); + } +}; +_ForgeRenderer.cubeRender = null; +_ForgeRenderer.pmrem = null; +let ForgeRenderer = _ForgeRenderer; +const EMPTY_GEOMETRY = new SplatGeometry(new Uint32Array(1), 0); +dynoBlock( + { packedSplats: TPackedSplats, index: "int" }, + { gsplat: Gsplat }, + ({ packedSplats, index }) => { + if (!packedSplats || !index) { + throw new Error("Invalid input"); + } + const gsplat = readPackedSplat(packedSplats, index); + return { gsplat }; + } +); +function averageOriginToWorlds(originToWorlds) { + if (originToWorlds.length === 0) { + return null; + } + const position = new THREE.Vector3(); + const quaternion = new THREE.Quaternion(); + const scale = new THREE.Vector3(); + const positions = []; + const quaternions = []; + for (const matrix of originToWorlds) { + matrix.decompose(position, quaternion, scale); + positions.push(position); + quaternions.push(quaternion); + } + return new THREE.Matrix4().compose( + averagePositions(positions), + averageQuaternions(quaternions), + new THREE.Vector3(1, 1, 1) + ); +} +class SpzReader { + constructor({ fileBytes }) { + this.fileBytes = fileBytes instanceof ArrayBuffer ? new Uint8Array(fileBytes) : fileBytes; + this.reader = new GunzipReader({ fileBytes: this.fileBytes }); + const header = new DataView(this.reader.read(16).buffer); + if (header.getUint32(0, true) !== 1347635022) { + throw new Error("Invalid SPZ file"); + } + this.version = header.getUint32(4, true); + if (this.version < 1 || this.version > 2) { + throw new Error(`Unsupported SPZ version: ${this.version}`); + } + this.numSplats = header.getUint32(8, true); + this.shDegree = header.getUint8(12); + this.fractionalBits = header.getUint8(13); + this.flags = header.getUint8(14); + this.flagAntiAlias = (this.flags & 1) !== 0; + this.reserved = header.getUint8(15); + this.parsed = false; + } + parseSplats(centerCallback, alphaCallback, rgbCallback, scalesCallback, quatCallback, shCallback) { + if (this.parsed) { + throw new Error("SPZ file already parsed"); + } + this.parsed = true; + if (this.version === 1) { + const centerBytes = this.reader.read(this.numSplats * 3 * 2); + const centerUint16 = new Uint16Array(centerBytes.buffer); + for (let i = 0; i < this.numSplats; i++) { + const i3 = i * 3; + const x = fromHalf(centerUint16[i3]); + const y = fromHalf(centerUint16[i3 + 1]); + const z = fromHalf(centerUint16[i3 + 2]); + centerCallback(i, x, y, z); + } + } else if (this.version === 2) { + const fixed = 1 << this.fractionalBits; + const centerBytes = this.reader.read(this.numSplats * 3 * 3); + for (let i = 0; i < this.numSplats; i++) { + const i9 = i * 9; + const x = ((centerBytes[i9 + 2] << 24 | centerBytes[i9 + 1] << 16 | centerBytes[i9] << 8) >> 8) / fixed; + const y = ((centerBytes[i9 + 5] << 24 | centerBytes[i9 + 4] << 16 | centerBytes[i9 + 3] << 8) >> 8) / fixed; + const z = ((centerBytes[i9 + 8] << 24 | centerBytes[i9 + 7] << 16 | centerBytes[i9 + 6] << 8) >> 8) / fixed; + centerCallback(i, x, y, z); + } + } else { + throw new Error("Unreachable"); + } + { + const bytes = this.reader.read(this.numSplats); + for (let i = 0; i < this.numSplats; i++) { + alphaCallback(i, bytes[i] / 255); + } + } + { + const rgbBytes = this.reader.read(this.numSplats * 3); + const scale = SH_C0 / 0.15; + for (let i = 0; i < this.numSplats; i++) { + const i3 = i * 3; + const r = (rgbBytes[i3] / 255 - 0.5) * scale + 0.5; + const g = (rgbBytes[i3 + 1] / 255 - 0.5) * scale + 0.5; + const b = (rgbBytes[i3 + 2] / 255 - 0.5) * scale + 0.5; + rgbCallback(i, r, g, b); + } + } + { + const scalesBytes = this.reader.read(this.numSplats * 3); + for (let i = 0; i < this.numSplats; i++) { + const i3 = i * 3; + const scaleX = Math.exp(scalesBytes[i3] / 16 - 10); + const scaleY = Math.exp(scalesBytes[i3 + 1] / 16 - 10); + const scaleZ = Math.exp(scalesBytes[i3 + 2] / 16 - 10); + scalesCallback(i, scaleX, scaleY, scaleZ); + } + } + { + const quatBytes = this.reader.read(this.numSplats * 3); + for (let i = 0; i < this.numSplats; i++) { + const i3 = i * 3; + const quatX = quatBytes[i3] / 127.5 - 1; + const quatY = quatBytes[i3 + 1] / 127.5 - 1; + const quatZ = quatBytes[i3 + 2] / 127.5 - 1; + const quatW = Math.sqrt( + Math.max(0, 1 - quatX * quatX - quatY * quatY - quatZ * quatZ) + ); + quatCallback(i, quatX, quatY, quatZ, quatW); + } + } + if (shCallback && this.shDegree >= 1) { + const sh1 = new Float32Array(3 * 3); + const sh2 = this.shDegree >= 2 ? new Float32Array(5 * 3) : void 0; + const sh3 = this.shDegree >= 3 ? new Float32Array(7 * 3) : void 0; + const shBytes = this.reader.read( + this.numSplats * SH_DEGREE_TO_VECS[this.shDegree] * 3 + ); + let offset = 0; + for (let i = 0; i < this.numSplats; i++) { + for (let j = 0; j < 9; ++j) { + sh1[j] = (shBytes[offset + j] - 128) / 128; + } + offset += 9; + if (sh2) { + for (let j = 0; j < 15; ++j) { + sh2[j] = (shBytes[offset + j] - 128) / 128; + } + offset += 15; + } + if (sh3) { + for (let j = 0; j < 21; ++j) { + sh3[j] = (shBytes[offset + j] - 128) / 128; + } + offset += 21; + } + shCallback(i, sh1, sh2, sh3); + } + } + } +} +const SH_DEGREE_TO_VECS = { 1: 3, 2: 8, 3: 15 }; +const SH_C0 = 0.28209479177387814; +class SplatSkinning { + constructor(options) { + this.mesh = options.mesh; + this.numSplats = options.numSplats ?? this.mesh.numSplats; + const { width, height, depth, maxSplats } = getTextureSize(this.numSplats); + this.skinData = new Uint16Array(maxSplats * 4); + this.skinTexture = new THREE.DataArrayTexture( + this.skinData, + width, + height, + depth + ); + this.skinTexture.format = THREE.RGBAIntegerFormat; + this.skinTexture.type = THREE.UnsignedShortType; + this.skinTexture.internalFormat = "RGBA16UI"; + this.skinTexture.needsUpdate = true; + this.numBones = options.numBones ?? 256; + this.boneData = new Float32Array(this.numBones * 16); + this.boneTexture = new THREE.DataTexture( + this.boneData, + 4, + this.numBones, + THREE.RGBAFormat, + THREE.FloatType + ); + this.boneTexture.internalFormat = "RGBA32F"; + this.boneTexture.needsUpdate = true; + this.uniform = new DynoUniform({ + key: "skinning", + type: GsplatSkinning, + globals: () => [defineGsplatSkinning], + value: { + numSplats: this.numSplats, + numBones: this.numBones, + skinTexture: this.skinTexture, + boneTexture: this.boneTexture + } + }); + } + // Apply the skeletal animation to a Gsplat in a dyno program. + modify(gsplat) { + return applyGsplatSkinning(gsplat, this.uniform); + } + // Set the "rest" pose for a bone with position and quaternion orientation. + setRestQuatPos(boneIndex, quat, pos) { + const i16 = boneIndex * 16; + this.boneData[i16 + 0] = quat.x; + this.boneData[i16 + 1] = quat.y; + this.boneData[i16 + 2] = quat.z; + this.boneData[i16 + 3] = quat.w; + this.boneData[i16 + 4] = pos.x; + this.boneData[i16 + 5] = pos.y; + this.boneData[i16 + 6] = pos.z; + this.boneData[i16 + 7] = 0; + this.boneData[i16 + 8] = 0; + this.boneData[i16 + 9] = 0; + this.boneData[i16 + 10] = 0; + this.boneData[i16 + 11] = 1; + this.boneData[i16 + 12] = 0; + this.boneData[i16 + 13] = 0; + this.boneData[i16 + 14] = 0; + this.boneData[i16 + 15] = 0; + } + // Set the "current" position and orientation of a bone. + setBoneQuatPos(boneIndex, quat, pos) { + const i16 = boneIndex * 16; + const origQuat = new THREE.Quaternion( + this.boneData[i16 + 0], + this.boneData[i16 + 1], + this.boneData[i16 + 2], + this.boneData[i16 + 3] + ); + const origPos = new THREE.Vector3( + this.boneData[i16 + 4], + this.boneData[i16 + 5], + this.boneData[i16 + 6] + ); + const relQuat = origQuat.clone().invert(); + const relPos = pos.clone().sub(origPos); + relPos.applyQuaternion(relQuat); + relQuat.multiply(quat); + const dual = new THREE.Quaternion( + relPos.x, + relPos.y, + relPos.z, + 0 + ).multiply(origQuat); + this.boneData[i16 + 8] = relQuat.x; + this.boneData[i16 + 9] = relQuat.y; + this.boneData[i16 + 10] = relQuat.z; + this.boneData[i16 + 11] = relQuat.w; + this.boneData[i16 + 12] = 0.5 * dual.x; + this.boneData[i16 + 13] = 0.5 * dual.y; + this.boneData[i16 + 14] = 0.5 * dual.z; + this.boneData[i16 + 15] = 0.5 * dual.w; + } + // Set up to 4 bone indices and weights for a Gsplat. For fewer than 4 bones, + // you can set the remaining weights to 0 (and index=0). + setSplatBones(splatIndex, boneIndices, weights) { + const i4 = splatIndex * 4; + this.skinData[i4 + 0] = Math.min(255, Math.max(0, Math.round(weights.x * 255))) + (boneIndices.x << 8); + this.skinData[i4 + 1] = Math.min(255, Math.max(0, Math.round(weights.y * 255))) + (boneIndices.y << 8); + this.skinData[i4 + 2] = Math.min(255, Math.max(0, Math.round(weights.z * 255))) + (boneIndices.z << 8); + this.skinData[i4 + 3] = Math.min(255, Math.max(0, Math.round(weights.w * 255))) + (boneIndices.w << 8); + } + // Call this to indicate that the bones have changed and the Gsplats need to be + // re-generated with updated skinning. + updateBones() { + this.boneTexture.needsUpdate = true; + this.mesh.needsUpdate = true; + } +} +const GsplatSkinning = { type: "GsplatSkinning" }; +const defineGsplatSkinning = unindent(` + struct GsplatSkinning { + int numSplats; + int numBones; + usampler2DArray skinTexture; + sampler2D boneTexture; + }; +`); +const defineApplyGsplatSkinning = unindent(` + void applyGsplatSkinning( + int numSplats, int numBones, + usampler2DArray skinTexture, sampler2D boneTexture, + int splatIndex, inout vec3 center, inout vec4 quaternion + ) { + if ((splatIndex < 0) || (splatIndex >= numSplats)) { + return; + } + + uvec4 skinData = texelFetch(skinTexture, splatTexCoord(splatIndex), 0); + + float weights[4]; + weights[0] = float(skinData.x & 0xffu) / 255.0; + weights[1] = float(skinData.y & 0xffu) / 255.0; + weights[2] = float(skinData.z & 0xffu) / 255.0; + weights[3] = float(skinData.w & 0xffu) / 255.0; + + uint boneIndices[4]; + boneIndices[0] = (skinData.x >> 8u) & 0xffu; + boneIndices[1] = (skinData.y >> 8u) & 0xffu; + boneIndices[2] = (skinData.z >> 8u) & 0xffu; + boneIndices[3] = (skinData.w >> 8u) & 0xffu; + + vec4 quat = vec4(0.0); + vec4 dual = vec4(0.0); + for (int i = 0; i < 4; i++) { + if (weights[i] > 0.0) { + int boneIndex = int(boneIndices[i]); + vec4 boneQuat = vec4(0.0, 0.0, 0.0, 1.0); + vec4 boneDual = vec4(0.0); + if (boneIndex < numBones) { + boneQuat = texelFetch(boneTexture, ivec2(2, boneIndex), 0); + boneDual = texelFetch(boneTexture, ivec2(3, boneIndex), 0); + } + + if ((i > 0) && (dot(quat, boneQuat) < 0.0)) { + // Flip sign if next blend is pointing in the opposite direction + boneQuat = -boneQuat; + boneDual = -boneDual; + } + quat += weights[i] * boneQuat; + dual += weights[i] * boneDual; + } + } + + // Normalize dual quaternion + float norm = length(quat); + quat /= norm; + dual /= norm; + vec3 translate = vec3( + 2.0 * (-dual.w * quat.x + dual.x * quat.w - dual.y * quat.z + dual.z * quat.y), + 2.0 * (-dual.w * quat.y + dual.x * quat.z + dual.y * quat.w - dual.z * quat.x), + 2.0 * (-dual.w * quat.z - dual.x * quat.y + dual.y * quat.x + dual.z * quat.w) + ); + + center = quatVec(quat, center) + translate; + quaternion = quatQuat(quat, quaternion); + } +`); +function applyGsplatSkinning(gsplat, skinning) { + const dyno2 = new Dyno({ + inTypes: { gsplat: Gsplat, skinning: GsplatSkinning }, + outTypes: { gsplat: Gsplat }, + globals: () => [defineGsplatSkinning, defineApplyGsplatSkinning], + inputs: { gsplat, skinning }, + statements: ({ inputs, outputs }) => { + const { skinning: skinning2 } = inputs; + const { gsplat: gsplat2 } = outputs; + return unindentLines(` + ${gsplat2} = ${inputs.gsplat}; + if (isGsplatActive(${gsplat2}.flags)) { + applyGsplatSkinning( + ${skinning2}.numSplats, ${skinning2}.numBones, + ${skinning2}.skinTexture, ${skinning2}.boneTexture, + ${gsplat2}.index, ${gsplat2}.center, ${gsplat2}.quaternion + ); + } + `); + } + }); + return dyno2.outputs.gsplat; +} +function constructGrid({ + // PackedSplats object to add splats to + splats, + // min and max box extents of the grid + extents, + // step size along each grid axis + stepSize = 1, + // spherical radius of each Gsplat + pointRadius = 0.01, + // relative size of the "shadow copy" of each Gsplat placed behind it + pointShadowScale = 2, + // Gsplat opacity + opacity = 1, + // Gsplat color (THREE.Color) or function to set color for position: + // ((THREE.Color, THREE.Vector3) => void) (default: RGB-modulated grid) + color +}) { + const EPSILON = 1e-6; + const center = new THREE.Vector3(); + const scales = new THREE.Vector3(); + const quaternion = new THREE.Quaternion(0, 0, 0, 1); + if (color == null) { + color = (color2, point) => color2.set( + 0.55 + 0.45 * Math.cos(point.x * 1), + 0.55 + 0.45 * Math.cos(point.y * 1), + 0.55 + 0.45 * Math.cos(point.z * 1) + ); + } + const pointColor = new THREE.Color(); + for (let z = extents.min.z; z < extents.max.z + EPSILON; z += stepSize) { + for (let y = extents.min.y; y < extents.max.y + EPSILON; y += stepSize) { + for (let x = extents.min.x; x < extents.max.x + EPSILON; x += stepSize) { + center.set(x, y, z); + for (let layer = 0; layer < 2; ++layer) { + scales.setScalar(pointRadius * (layer ? 1 : pointShadowScale)); + if (!layer) { + pointColor.setScalar(0); + } else if (typeof color === "function") { + color(pointColor, center); + } else { + pointColor.copy(color); + } + splats.pushSplat(center, scales, quaternion, opacity, pointColor); + } + } + } + } +} +function constructAxes({ + // PackedSplats object to add splats to + splats, + // scale (Gsplat scale along axis) + scale = 0.25, + // radius of the axes (Gsplat scale orthogonal to axis) + axisRadius = 75e-4, + // relative size of the "shadow copy" of each Gsplat placed behind it + axisShadowScale = 2, + // origins of the axes (default single axis at origin) + origins = [new THREE.Vector3()] +}) { + const center = new THREE.Vector3(); + const scales = new THREE.Vector3(); + const quaternion = new THREE.Quaternion(0, 0, 0, 1); + const color = new THREE.Color(); + const opacity = 1; + for (const origin of origins) { + for (let axis = 0; axis < 3; ++axis) { + center.set( + origin.x + (axis === 0 ? scale : 0), + origin.y + (axis === 1 ? scale : 0), + origin.z + (axis === 2 ? scale : 0) + ); + for (let layer = 0; layer < 2; ++layer) { + scales.set( + (axis === 0 ? scale : axisRadius) * (layer ? 1 : axisShadowScale), + (axis === 1 ? scale : axisRadius) * (layer ? 1 : axisShadowScale), + (axis === 2 ? scale : axisRadius) * (layer ? 1 : axisShadowScale) + ); + color.setRGB( + layer === 0 ? 0 : axis === 0 ? 1 : 0, + layer === 0 ? 0 : axis === 1 ? 1 : 0, + layer === 0 ? 0 : axis === 2 ? 1 : 0 + ); + splats.pushSplat(center, scales, quaternion, opacity, color); + } + } + } +} +function constructSpherePoints({ + // PackedSplats object to add splats to + splats, + // center of the sphere (default: origin) + origin = new THREE.Vector3(), + // radius of the sphere + radius = 1, + // maximum depth of recursion for subdividing the sphere + // Warning: Gsplat count grows exponentially with depth + maxDepth = 3, + // filter function to apply to each point, for example to select + // points in a certain direction or other function ((THREE.Vector3) => boolean) + // (default: null) + filter = null, + // radius of each oriented Gsplat + pointRadius = 0.02, + // flatness of each oriented Gsplat + pointThickness = 1e-3, + // color of each Gsplat (THREE.Color) or function to set color for point: + // ((THREE.Color, THREE.Vector3) => void) (default: white) + color = new THREE.Color(1, 1, 1) +}) { + const pointsHash = {}; + function addPoint(p) { + if (filter && !filter(p)) { + return; + } + const key = `${p.x},${p.y},${p.z}`; + if (!pointsHash[key]) { + pointsHash[key] = p; + } + } + function recurse(depth, p0, p1, p2) { + addPoint(p0); + addPoint(p1); + addPoint(p2); + if (depth >= maxDepth) { + return; + } + const p01 = new THREE.Vector3().addVectors(p0, p1).normalize(); + const p12 = new THREE.Vector3().addVectors(p1, p2).normalize(); + const p20 = new THREE.Vector3().addVectors(p2, p0).normalize(); + recurse(depth + 1, p0, p01, p20); + recurse(depth + 1, p01, p1, p12); + recurse(depth + 1, p20, p12, p2); + recurse(depth + 1, p01, p12, p20); + } + for (const x of [-1, 1]) { + for (const y of [-1, 1]) { + for (const z of [-1, 1]) { + const p0 = new THREE.Vector3(x, 0, 0); + const p1 = new THREE.Vector3(0, y, 0); + const p2 = new THREE.Vector3(0, 0, z); + recurse(0, p0, p1, p2); + } + } + } + const points = Object.values(pointsHash); + const scales = new THREE.Vector3(pointRadius, pointRadius, pointThickness); + const quaternion = new THREE.Quaternion(); + const pointColor = typeof color === "function" ? new THREE.Color() : color; + for (const point of points) { + quaternion.setFromUnitVectors(new THREE.Vector3(0, 0, -1), point); + if (typeof color === "function") { + color(pointColor, point); + } + point.multiplyScalar(radius); + point.add(origin); + splats.pushSplat(point, scales, quaternion, 1, pointColor); + } +} +function textSplats({ + // text string to display + text, + // browser font to render text with (default: "Arial") + font, + // font size in pixels/Gsplats (default: 32) + fontSize, + // SplatMesh.recolor tint assuming white Gsplats (default: white) + color, + // Individual Gsplat color (default: white) + rgb, + // Gsplat radius (default: 0.8 covers 1-unit spacing well) + dotRadius, + // text alignment: "left", "center", "right", "start", "end" (default: "start") + textAlign, + // line spacing multiplier, lines delimited by "\n" (default: 1.0) + lineHeight +}) { + font = font ?? "Arial"; + fontSize = fontSize ?? 32; + color = color ?? new THREE.Color(1, 1, 1); + dotRadius = dotRadius ?? 0.8; + textAlign = textAlign ?? "start"; + lineHeight = lineHeight ?? 1; + const lines = text.split("\n"); + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + if (!ctx) { + throw new Error("Failed to create canvas context"); + } + ctx.font = `${fontSize}px ${font}`; + ctx.textAlign = textAlign; + const metrics = ctx.measureText(""); + const fontHeight = metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent; + let minLeft = Number.POSITIVE_INFINITY; + let maxRight = Number.NEGATIVE_INFINITY; + let minTop = Number.POSITIVE_INFINITY; + let maxBottom = Number.NEGATIVE_INFINITY; + for (let line = 0; line < lines.length; ++line) { + const metrics2 = ctx.measureText(lines[line]); + const y = fontHeight * lineHeight * line; + minLeft = Math.min(minLeft, -metrics2.actualBoundingBoxLeft); + maxRight = Math.max(maxRight, metrics2.actualBoundingBoxRight); + minTop = Math.min(minTop, y - metrics2.actualBoundingBoxAscent); + maxBottom = Math.max(maxBottom, y + metrics2.actualBoundingBoxDescent); + } + const originLeft = Math.floor(minLeft); + const originTop = Math.floor(minTop); + const width = Math.ceil(maxRight) - originLeft; + const height = Math.ceil(maxBottom) - originTop; + canvas.width = width; + canvas.height = height; + ctx.font = `${fontSize}px ${font}`; + ctx.textAlign = textAlign; + ctx.textBaseline = "alphabetic"; + ctx.fillStyle = "#FFFFFF"; + for (let i = 0; i < lines.length; ++i) { + const y = fontHeight * lineHeight * i - originTop; + ctx.fillText(lines[i], -originLeft, y); + } + const imageData = ctx.getImageData(0, 0, width, height); + const rgba = new Uint8Array(imageData.data.buffer); + const splats = new PackedSplats(); + const center = new THREE.Vector3(); + const scales = new THREE.Vector3().setScalar(dotRadius); + const quaternion = new THREE.Quaternion(0, 0, 0, 1); + rgb = rgb ?? new THREE.Color(1, 1, 1); + let offset = 0; + for (let y = 0; y < height; ++y) { + for (let x = 0; x < width; ++x) { + const a = rgba[offset + 3]; + if (a > 0) { + const opacity = a / 255; + center.set(x - 0.5 * (width - 1), 0.5 * (height - 1) - y, 0); + splats.pushSplat(center, scales, quaternion, opacity, rgb); + } + offset += 4; + } + } + const mesh = new SplatMesh({ packedSplats: splats }); + mesh.recolor = color; + return mesh; +} +function imageSplats({ + // URL of the image to convert to splats (example: `url: "./image.png"`) + url, + // Radius of each Gsplat, default covers 1-unit spacing well (default: 0.8) + dotRadius, + // Subsampling factor for the image. Higher values reduce resolution, + // for example 2 will halve the width and height by averaging (default: 1) + subXY, + // Optional callback function to modify each Gsplat before it's added. + // Return null to skip adding the Gsplat, or a number to set the opacity + // and add the Gsplat with parameter values in the objects center, rgba etc. were + // passed into the forEachSplat callback. Ending the callback in `return opacity;` + // will retain the original opacity. + // ((width: number, height: number, index: number, center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color) => number | null) + forEachSplat +}) { + dotRadius = dotRadius ?? 0.8; + subXY = Math.max(1, Math.floor(subXY ?? 1)); + return new SplatMesh({ + constructSplats: async (splats) => { + return new Promise((resolve, reject) => { + const img = new Image(); + img.onerror = reject; + img.onload = () => { + const { width, height } = img; + const canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext("2d"); + if (!ctx) { + reject(new Error("Failed to create canvas context")); + return; + } + ctx.imageSmoothingEnabled = true; + ctx.imageSmoothingQuality = "high"; + const destWidth = Math.round(width / subXY); + const destHeight = Math.round(height / subXY); + ctx.drawImage(img, 0, 0, destWidth, destHeight); + try { + const imageData = ctx.getImageData(0, 0, destWidth, destHeight); + const rgba = new Uint8Array(imageData.data.buffer); + const center = new THREE.Vector3(); + const scales = new THREE.Vector3().setScalar(dotRadius); + const quaternion = new THREE.Quaternion(0, 0, 0, 1); + const rgb = new THREE.Color(); + let index = 0; + for (let y = 0; y < destHeight; ++y) { + for (let x = 0; x < destWidth; ++x) { + const offset = index * 4; + const a = rgba[offset + 3]; + if (a > 0) { + let opacity = a / 255; + rgb.set( + rgba[offset + 0] / 255, + rgba[offset + 1] / 255, + rgba[offset + 2] / 255 + ); + center.set( + x - 0.5 * (destWidth - 1), + 0.5 * (destHeight - 1) - y, + 0 + ); + scales.setScalar(dotRadius); + quaternion.set(0, 0, 0, 1); + let push = true; + if (forEachSplat) { + const maybeOpacity = forEachSplat( + destWidth, + destHeight, + index, + center, + scales, + quaternion, + opacity, + rgb + ); + opacity = maybeOpacity ?? opacity; + push = maybeOpacity !== null; + } + if (push) { + splats.pushSplat(center, scales, quaternion, opacity, rgb); + } + } + index += 1; + } + } + resolve(); + } catch (error) { + reject(error); + } + }; + img.src = url; + }); + } + }); +} +function staticBox({ + box, + cells, + dotScale, + color, + opacity +}) { + cells.x = Math.max(1, Math.round(cells.x)); + cells.y = Math.max(1, Math.round(cells.y)); + cells.z = Math.max(1, Math.round(cells.z)); + opacity = opacity ?? 1; + const numSplats = cells.x * cells.y * cells.z; + const dynoX = dynoConst("int", cells.x); + const dynoY = dynoConst("int", cells.y); + dynoConst("int", cells.z); + const dynoTime = dynoFloat(0); + const generator = new SplatGenerator({ + numSplats, + generator: dynoBlock( + { index: "int" }, + { gsplat: Gsplat }, + ({ index }) => { + if (!index) { + throw new Error("index is undefined"); + } + const cellX = imod(index, dynoX); + const index2 = div(index, dynoX); + const cellY = imod(index2, dynoY); + const cellZ = div(index2, dynoY); + const cell = combine({ + vectorType: "ivec3", + x: cellX, + y: cellY, + z: cellZ + }); + const intTime = floatBitsToInt(dynoTime); + const inputs = combine({ vectorType: "ivec2", x: index, y: intTime }); + const random = hashVec3(inputs); + const min2 = dynoConst("vec3", box.min); + const max2 = dynoConst("vec3", box.max); + const size = sub(max2, min2); + const coord = div(add(vec3(cell), random), dynoConst("vec3", cells)); + let r; + let g; + let b; + if (color) { + r = dynoConst("float", color.r); + g = dynoConst("float", color.g); + b = dynoConst("float", color.b); + } else { + ({ r, g, b } = split(coord).outputs); + } + const rgba = combine({ + vectorType: "vec4", + r, + g, + b, + a: dynoConst("float", opacity) + }); + const center = add(min2, mul(size, coord)); + const scales = vec3(dynoConst("float", dotScale)); + const quaternion = dynoConst("vec4", new THREE.Quaternion(0, 0, 0, 1)); + let gsplat = combineGsplat({ + flags: dynoLiteral("uint", "GSPLAT_FLAG_ACTIVE"), + index, + center, + scales, + quaternion, + rgba + }); + gsplat = transformer.modify(gsplat); + return { gsplat }; + }, + { + globals: () => [defineGsplat] + } + ), + update: ({ time }) => { + dynoTime.value = time; + transformer.update(generator); + generator.updateVersion(); + } + }); + const transformer = new SplatTransformer(); + return generator; +} +const DEFAULT_SNOW = { + box: new THREE.Box3( + new THREE.Vector3(-1, -1, -1), + new THREE.Vector3(1, 1, 1) + ), + density: 100, + fallDirection: new THREE.Vector3(-1, -3, 1).normalize(), + fallVelocity: 0.02, + wanderScale: 0.04, + wanderVariance: 2, + color1: new THREE.Color(1, 1, 1), + color2: new THREE.Color(0.5, 0.5, 1), + minScale: 1e-3, + maxScale: 5e-3, + anisoScale: new THREE.Vector3(1, 1, 1) +}; +const DEFAULT_RAIN = { + box: new THREE.Box3( + new THREE.Vector3(-2, -1, -2), + new THREE.Vector3(2, 5, 2) + ), + density: 10, + fallDirection: new THREE.Vector3(0, -1, 0), + fallVelocity: 2, + wanderScale: 0.1, + wanderVariance: 1, + color1: new THREE.Color(1, 1, 1), + color2: new THREE.Color(0.25, 0.25, 0.5), + minScale: 5e-3, + maxScale: 0.01, + anisoScale: new THREE.Vector3(0.1, 1, 0.1) +}; +function snowBox({ + // min and max box extents of the snowBox + box, + // minimum y-coordinate to clamp particle position, which can be used to + // fake hitting a ground plane and lingering there for a bit + minY, + // number of Gsplats to generate (default: calculated from box and density) + numSplats, + // density of Gsplats per unit volume (default: 100) + density, + // The xyz anisotropic scale of the Gsplat, which can be used for example + // to elongate rain particles (default: (1, 1, 1)) + anisoScale, + // Minimum Gsplat particle scale (default: 0.001) + minScale, + // Maximum Gsplat particle scale (default: 0.005) + maxScale, + // The average direction of fall (default: (0, -1, 0)) + fallDirection, + // The average speed of the fall (multiplied with fallDirection) (default: 0.02) + fallVelocity, + // The world scale of wandering overlay motion (default: 0.01) + wanderScale, + // Controls how uniformly the particles wander in sync, more variance mean + // more randomness in the motion (default: 2) + wanderVariance, + // Color 1 of the two colors interpolated between (default: (1, 1, 1)) + color1, + // Color 2 of the two colors interpolated between (default: (0.5, 0.5, 1)) + color2, + // The base opacity of the Gsplats (default: 1) + opacity, + // Optional callback function to call each frame. + onFrame +}) { + box = box ?? new THREE.Box3(new THREE.Vector3(-1, -1, -1), new THREE.Vector3(1, 1, 1)); + const volume = (box.max.x - box.min.x) * (box.max.y - box.min.y) * (box.max.z - box.min.z); + density = density ?? 100; + numSplats = numSplats ?? Math.max(1, Math.min(1e6, Math.round(volume * density))); + const dynoMinScale = dynoFloat(minScale ?? 1e-3); + const dynoMaxScale = dynoFloat(maxScale ?? 5e-3); + const dynoAnisoScale = dynoVec3( + ((anisoScale == null ? void 0 : anisoScale.clone()) ?? new THREE.Vector3(1, 1, 1)).normalize() + ); + const dynoFallDirection = dynoVec3( + (fallDirection ?? new THREE.Vector3(0, -1, 0)).normalize() + ); + const dynoFallVelocity = dynoFloat(fallVelocity ?? 0.02); + const dynoWanderScale = dynoFloat(wanderScale ?? 0.01); + const dynoWanderVariance = dynoFloat(wanderVariance ?? 2); + const dynoColor1 = dynoVec3(color1 ?? new THREE.Color(1, 1, 1)); + const dynoColor2 = dynoVec3(color2 ?? new THREE.Color(0.5, 0.5, 1)); + const dynoOpacity = dynoFloat(opacity ?? 1); + const dynoTime = dynoFloat(0); + const globalOffset = dynoVec3(new THREE.Vector3(0, 0, 0)); + const dynoMin = dynoVec3(box.min); + const dynoMax = dynoVec3(box.max); + const dynoMinY = dynoFloat(minY ?? Number.NEGATIVE_INFINITY); + const minMax = sub(dynoMax, dynoMin); + const snow = new SplatGenerator({ + numSplats, + generator: dynoBlock( + { index: "int" }, + { gsplat: Gsplat }, + ({ index }) => { + if (!index) { + throw new Error("index not defined"); + } + const random = hashVec4(index); + const randomW = split(random).outputs.w; + let position = vec3(random); + let size = fract(mul(randomW, dynoConst("float", 100))); + size = sin(mul(dynoLiteral("float", "PI"), size)); + size = add(dynoMinScale, mul(size, sub(dynoMaxScale, dynoMinScale))); + const scales = mul(size, dynoAnisoScale); + const intensity = fract(mul(randomW, dynoConst("float", 10))); + const hue = fract(randomW); + const color = mix(dynoColor1, dynoColor2, hue); + const rgb = mul(color, intensity); + const random2 = hashVec4( + combine({ + vectorType: "ivec2", + x: index, + y: dynoConst("int", 6837) + }) + ); + let perturb = vec3(random2); + let timeOffset = mul(split(random2).outputs.w, dynoWanderVariance); + timeOffset = add(dynoTime, timeOffset); + position = add(position, globalOffset); + const modulo = mod( + position, + dynoConst("vec3", new THREE.Vector3(1, 1, 1)) + ); + position = add(dynoMin, mul(minMax, modulo)); + const quaternion = dynoConst("vec4", new THREE.Quaternion(0, 0, 0, 1)); + perturb = sin(add(vec3(timeOffset), perturb)); + perturb = mul(perturb, dynoWanderScale); + let center = add(position, perturb); + let centerY = split(center).outputs.y; + centerY = max(dynoMinY, centerY); + center = combine({ vector: center, y: centerY }); + let gsplat = combineGsplat({ + flags: dynoLiteral("uint", "GSPLAT_FLAG_ACTIVE"), + index, + center, + scales, + quaternion, + rgb, + opacity: dynoOpacity + }); + gsplat = transformer.modify(gsplat); + return { gsplat }; + }, + { + globals: () => [defineGsplat] + } + ), + update: ({ object, time, deltaTime }) => { + dynoTime.value = time; + transformer.update(snow); + const fallDelta = dynoFallDirection.value.clone().multiplyScalar(dynoFallVelocity.value * deltaTime); + globalOffset.value.add(fallDelta); + object.visible = dynoOpacity.value > 0; + onFrame == null ? void 0 : onFrame({ object, time, deltaTime }); + snow.updateVersion(); + } + }); + const transformer = new SplatTransformer(); + return { + snow, + min: dynoMin, + max: dynoMax, + minY: dynoMinY, + color1: dynoColor1, + color2: dynoColor2, + opacity: dynoOpacity, + fallVelocity: dynoFallVelocity, + wanderVariance: dynoWanderVariance, + wanderScale: dynoWanderScale, + fallDirection: dynoFallDirection, + minScale: dynoMinScale, + maxScale: dynoMaxScale, + anisoScale: dynoAnisoScale + }; +} +const generators = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DEFAULT_RAIN, + DEFAULT_SNOW, + snowBox, + staticBox +}, Symbol.toStringTag, { value: "Module" })); +const _VRButton = class _VRButton { + static createButton(renderer, sessionInit = {}) { + const navigatorXr = navigator.xr; + if (!navigatorXr) { + return null; + } + const xr = navigatorXr; + const button = document.createElement("button"); + renderer.xr.enabled = true; + renderer.xr.setReferenceSpaceType("local"); + function showEnterVR() { + let currentSession = null; + async function onSessionStarted(session) { + console.log("onSessionStarted"); + session.addEventListener("end", onSessionEnded); + await renderer.xr.setSession(session); + button.textContent = "EXIT VR"; + currentSession = session; + } + function onSessionEnded() { + console.log("onSessionEnded"); + currentSession == null ? void 0 : currentSession.removeEventListener("end", onSessionEnded); + button.textContent = "ENTER VR"; + currentSession = null; + } + button.style.display = ""; + button.style.cursor = "pointer"; + button.style.left = "calc(50% - 100px)"; + button.style.width = "200px"; + button.style.height = "100px"; + button.textContent = "ENTER VR"; + const sessionOptions = { + ...sessionInit, + optionalFeatures: [ + // "local-floor", + // "bounded-floor", + // "layers", + ...sessionInit.optionalFeatures || [] + ] + }; + button.onmouseenter = () => { + button.style.opacity = "1.0"; + }; + button.onmouseleave = () => { + button.style.opacity = "0.5"; + }; + button.onclick = () => { + if (currentSession === null) { + console.log("requesting session"); + xr.requestSession("immersive-vr", sessionOptions).then( + onSessionStarted + ); + } else { + console.log("ending session"); + currentSession.end(); + } + }; + } + function disableButton() { + button.style.display = "none"; + button.style.cursor = "auto"; + button.style.left = "calc(50% - 75px)"; + button.style.width = "150px"; + button.onmouseenter = null; + button.onmouseleave = null; + button.onclick = null; + } + function showWebXRNotFound() { + disableButton(); + button.textContent = "VR NOT SUPPORTED"; + } + function showVRNotAllowed(exception) { + disableButton(); + console.warn( + "Exception when trying to call xr.isSessionSupported", + exception + ); + button.textContent = "VR NOT ALLOWED"; + } + function stylizeElement(element) { + element.style.position = "absolute"; + element.style.bottom = "20px"; + element.style.padding = "12px 6px"; + element.style.border = "1px solid #fff"; + element.style.borderRadius = "4px"; + element.style.background = "rgba(0,0,0,0.1)"; + element.style.color = "#fff"; + element.style.font = "normal 13px sans-serif"; + element.style.textAlign = "center"; + element.style.opacity = "0.5"; + element.style.outline = "none"; + element.style.zIndex = "999"; + } + button.id = "VRButton"; + button.style.display = "none"; + stylizeElement(button); + xr.isSessionSupported("immersive-vr").then((supported) => { + supported ? showEnterVR() : showWebXRNotFound(); + if (supported && _VRButton.xrSessionIsGranted) { + button.click(); + } + }).catch(showVRNotAllowed); + return button; + } + static registerSessionGrantedListener() { + const navigatorXr = navigator.xr; + if (!navigatorXr) { + return null; + } + const xr = navigatorXr; + if (/WebXRViewer\//i.test(navigator.userAgent)) return; + xr.addEventListener("sessiongranted", () => { + _VRButton.xrSessionIsGranted = true; + }); + } +}; +_VRButton.xrSessionIsGranted = false; +let VRButton = _VRButton; +VRButton.registerSessionGrantedListener(); +const DEFAULT_MOVE_INERTIA$1 = 0.5; +const DEFAULT_ROTATE_INERTIA$1 = 0.5; +const TOUCH_BIAS = 0; +var JointEnum = /* @__PURE__ */ ((JointEnum2) => { + JointEnum2["w"] = "wrist"; + JointEnum2["t0"] = "thumb-metacarpal"; + JointEnum2["t1"] = "thumb-phalanx-proximal"; + JointEnum2["t2"] = "thumb-phalanx-distal"; + JointEnum2["t3"] = "thumb-tip"; + JointEnum2["i0"] = "index-finger-metacarpal"; + JointEnum2["i1"] = "index-finger-phalanx-proximal"; + JointEnum2["i2"] = "index-finger-phalanx-intermediate"; + JointEnum2["i3"] = "index-finger-phalanx-distal"; + JointEnum2["i4"] = "index-finger-tip"; + JointEnum2["m0"] = "middle-finger-metacarpal"; + JointEnum2["m1"] = "middle-finger-phalanx-proximal"; + JointEnum2["m2"] = "middle-finger-phalanx-intermediate"; + JointEnum2["m3"] = "middle-finger-phalanx-distal"; + JointEnum2["m4"] = "middle-finger-tip"; + JointEnum2["r0"] = "ring-finger-metacarpal"; + JointEnum2["r1"] = "ring-finger-phalanx-proximal"; + JointEnum2["r2"] = "ring-finger-phalanx-intermediate"; + JointEnum2["r3"] = "ring-finger-phalanx-distal"; + JointEnum2["r4"] = "ring-finger-tip"; + JointEnum2["p0"] = "pinky-finger-metacarpal"; + JointEnum2["p1"] = "pinky-finger-phalanx-proximal"; + JointEnum2["p2"] = "pinky-finger-phalanx-intermediate"; + JointEnum2["p3"] = "pinky-finger-phalanx-distal"; + JointEnum2["p4"] = "pinky-finger-tip"; + return JointEnum2; +})(JointEnum || {}); +const JOINT_IDS = Object.keys(JointEnum); +const NUM_JOINTS = JOINT_IDS.length; +const JOINT_INDEX = { + w: 0, + t0: 1, + t1: 2, + t2: 3, + t3: 4, + i0: 5, + i1: 6, + i2: 7, + i3: 8, + i4: 9, + m0: 10, + m1: 11, + m2: 12, + m3: 13, + m4: 14, + r0: 15, + r1: 16, + r2: 17, + r3: 18, + r4: 19, + p0: 20, + p1: 21, + p2: 22, + p3: 23, + p4: 24 +}; +const JOINT_RADIUS = { + w: 0.02, + t0: 0.02, + t1: 0.014, + t2: 0.0115, + t3: 85e-4, + i0: 0.022, + i1: 0.012, + i2: 85e-4, + i3: 75e-4, + i4: 65e-4, + m0: 0.021, + m1: 0.012, + m2: 8e-3, + m3: 75e-4, + m4: 65e-4, + r0: 0.019, + r1: 0.011, + r2: 75e-4, + r3: 7e-3, + r4: 6e-3, + p0: 0.012, + p1: 0.01, + p2: 7e-3, + p3: 65e-4, + p4: 55e-4 +}; +const JOINT_SEGMENTS = [ + ["w", "t0", "t1", "t2", "t3"], + ["w", "i0", "i1", "i2", "i3", "i4"], + ["w", "m0", "m1", "m2", "m3", "m4"], + ["w", "r0", "r1", "r2", "r3", "r4"], + ["w", "p0", "p1", "p2", "p3", "p4"] +]; +const JOINT_SEGMENT_STEPS = [ + [8, 10, 8, 6], + [8, 19, 14, 8, 6], + [8, 19, 14, 8, 6], + [8, 19, 14, 8, 6], + [8, 19, 14, 8, 6] +]; +const JOINT_TIPS = ["t3", "i4", "m4", "r4", "p4"]; +const FINGER_TIPS = ["i4", "m4", "r4", "p4"]; +var Hand = /* @__PURE__ */ ((Hand2) => { + Hand2["left"] = "left"; + Hand2["right"] = "right"; + return Hand2; +})(Hand || {}); +const HANDS = Object.keys(Hand); +class XrHands { + constructor() { + this.hands = {}; + this.last = {}; + this.values = {}; + this.tests = {}; + this.lastTests = {}; + this.updated = false; + } + update({ xr, xrFrame }) { + const xrSession = xr.getSession(); + if (!xrSession) { + return; + } + const referenceSpace = xr.getReferenceSpace(); + if (!referenceSpace) { + return; + } + if (!xrFrame.getJointPose) { + return; + } + this.last = this.hands; + this.lastTests = this.tests; + this.hands = {}; + this.values = {}; + this.tests = {}; + for (const inputSource of xrSession.inputSources) { + if (!inputSource.hand) { + continue; + } + const hand = inputSource.handedness; + this.hands[hand] = {}; + for (const jointId of JOINT_IDS) { + const jointSpace = inputSource.hand.get(JointEnum[jointId]); + if (jointSpace) { + const jointPose = xrFrame.getJointPose(jointSpace, referenceSpace); + if (jointPose) { + const { position, orientation } = jointPose.transform; + this.hands[hand][jointId] = { + position: new Vector3(position.x, position.y, position.z), + quaternion: new Quaternion( + orientation.x, + orientation.y, + orientation.z, + orientation.w + ), + radius: jointPose.radius || 1e-3 + }; + } + } + } + } + for (const hand of HANDS) { + for (const { key, value } of [ + { key: `${hand}AllTips`, value: this.allTipsTouching(hand) }, + { + key: `${hand}IndexThumb`, + value: this.touching(hand, "i4", hand, "t3") + }, + { + key: `${hand}MiddleThumb`, + value: this.touching(hand, "m4", hand, "t3") + }, + { + key: `${hand}RingThumb`, + value: this.touching(hand, "r4", hand, "t3") + }, + { + key: `${hand}PinkyThumb`, + value: this.touching(hand, "p4", hand, "t3") + }, + { key: `${hand}TriTips`, value: this.triTipsTouching(hand) } + ]) { + this.values[key] = value; + this.tests[key] = value === 1 ? true : value === 0 ? false : this.lastTests[key] ?? false; + } + } + } + makeGhostMesh() { + const center = new Vector3(); + const scales = new Vector3(0.01, 0.01, 0.01); + const quaternion = new Quaternion(0, 0, 0, 1); + const color = new Color(1, 1, 1); + const CYCLE = Math.PI * 3; + const WHITE = new Color(1, 1, 1); + let opacity = 1; + const mesh = new SplatMesh({ + onFrame: () => { + let splatIndex = 0; + for (const handedness of HANDS) { + const active = this.values[`${handedness}MiddleThumb`]; + const xrHand = this.hands[handedness]; + for (const [index, segment] of JOINT_SEGMENTS.entries()) { + for (let i = 1; i < segment.length; ++i) { + const segmentSplats = JOINT_SEGMENT_STEPS[index][i - 1] * 2; + const lastSegment = i + 1 === segment.length; + const jointA = xrHand == null ? void 0 : xrHand[segment[i - 1]]; + const jointB = xrHand == null ? void 0 : xrHand[segment[i]]; + for (let j = 0; j < segmentSplats; ++j) { + const t = (j + 0.5) / segmentSplats; + opacity = 0; + if (jointA && jointB) { + center.copy(jointA.position).lerp(jointB.position, t); + quaternion.copy(jointA.quaternion).slerp(jointB.quaternion, t); + const radiusA = JOINT_RADIUS[segment[i - 1]]; + const radiusB = JOINT_RADIUS[segment[i]]; + let radius = (1 - t) * radiusA + t * radiusB; + if (lastSegment && t > 0.8) { + radius *= Math.sqrt(1 - ((t - 0.8) / 0.2) ** 2); + } + scales.set(0.65 * radius, 0.5 * radius, 3e-3); + color.set( + 0.55 + 0.45 * Math.sin(center.x * CYCLE), + 0.55 + 0.45 * Math.sin(center.y * CYCLE), + 0.55 + 0.45 * Math.sin(center.z * CYCLE) + ); + if (handedness === "right") { + color.set(1 - color.r, 1 - color.g, 1 - color.b); + } + color.lerp(WHITE, active); + opacity = 0.75; + } + mesh.packedSplats.setSplat( + splatIndex, + center, + scales, + quaternion, + opacity, + color + ); + splatIndex += 1; + } + } + } + } + mesh.packedSplats.numSplats = splatIndex; + mesh.packedSplats.needsUpdate = true; + mesh.numSplats = splatIndex; + } + }); + return mesh; + } + distance(handA, jointA, handB, jointB, last = false) { + const hA = last ? this.last[handA] : this.hands[handA]; + const hB = last ? this.last[handB] : this.hands[handB]; + const jA = hA == null ? void 0 : hA[jointA]; + const jB = hB == null ? void 0 : hB[jointB]; + if (!jA || !jB) { + return Number.POSITIVE_INFINITY; + } + return jA.position.distanceTo(jB.position); + } + separation(handA, jointA, handB, jointB, last = false) { + const d = this.distance(handA, jointA, handB, jointB, last); + if (d === Number.POSITIVE_INFINITY) { + return Number.POSITIVE_INFINITY; + } + return d - JOINT_RADIUS[jointA] - JOINT_RADIUS[jointB]; + } + touching(handA, jointA, handB, jointB, last = false) { + const d = this.separation(handA, jointA, handB, jointB, last); + if (d === Number.POSITIVE_INFINITY) { + return Number.POSITIVE_INFINITY; + } + return 1 - Math.max(0, Math.min(1, d / 0.01 - TOUCH_BIAS)); + } + allTipsTouching(hand, last = false) { + return Math.min( + this.touching(hand, "t3", hand, "i4", last), + this.touching(hand, "i4", hand, "m4", last), + this.touching(hand, "m4", hand, "r4", last), + this.touching(hand, "r4", hand, "p4", last) + // this.touching(hand, "p4", hand, "t3", last), + ); + } + triTipsTouching(hand, last = false) { + return Math.min( + this.touching(hand, "t3", hand, "i4", last), + this.touching(hand, "i4", hand, "m4", last), + this.touching(hand, "m4", hand, "t3", last) + ); + } +} +class HandMovement { + constructor({ + xrHands, + control, + moveInertia, + rotateInertia + }) { + this.lastGrip = {}; + this.lastPivot = new Vector3(); + this.rotateVelocity = 0; + this.velocity = new Vector3(); + this.xrHands = xrHands; + this.control = control; + this.moveInertia = moveInertia ?? DEFAULT_MOVE_INERTIA$1; + this.rotateInertia = rotateInertia ?? DEFAULT_ROTATE_INERTIA$1; + } + update(deltaTime) { + var _a2, _b2, _c, _d, _e; + const grip = {}; + for (const handedness of HANDS) { + const hand = this.xrHands.hands[handedness]; + if (hand && this.xrHands.tests[`${handedness}MiddleThumb`]) { + grip[handedness] = new Vector3().add(((_a2 = hand.t3) == null ? void 0 : _a2.position) ?? new Vector3()).add(((_b2 = hand.i4) == null ? void 0 : _b2.position) ?? new Vector3()).add(((_c = hand.m4) == null ? void 0 : _c.position) ?? new Vector3()).add(((_d = hand.r4) == null ? void 0 : _d.position) ?? new Vector3()).add(((_e = hand.p4) == null ? void 0 : _e.position) ?? new Vector3()).multiplyScalar(1 / 5); + } + } + if (grip.left && grip.right && this.lastGrip.left && this.lastGrip.right) { + const mid = grip.left.clone().add(grip.right).multiplyScalar(0.5); + const lastMid = this.lastGrip.left.clone().add(this.lastGrip.right).multiplyScalar(0.5); + this.lastPivot = mid; + const delta = mid.clone().applyMatrix4(this.control.matrix); + delta.sub(lastMid.clone().applyMatrix4(this.control.matrix)); + delta.multiplyScalar(1 / deltaTime); + this.velocity.lerp(delta, 1 - Math.exp(-20 * deltaTime)); + const angle = Math.atan2(grip.left.z - mid.z, grip.left.x - mid.x); + const lastAngle = Math.atan2( + this.lastGrip.left.z - lastMid.z, + this.lastGrip.left.x - lastMid.x + ); + let closestAngle = angle - lastAngle; + if (closestAngle > Math.PI) { + closestAngle -= Math.PI * 2; + } else if (closestAngle < -Math.PI) { + closestAngle += Math.PI * 2; + } + const rotateVelocity = closestAngle / deltaTime; + const blend = Math.exp(-20 * deltaTime); + this.rotateVelocity = this.rotateVelocity * blend + rotateVelocity * (1 - blend); + } else { + this.rotateVelocity *= Math.exp(-deltaTime / this.rotateInertia); + if (grip.left && this.lastGrip.left) { + const delta = grip.left.clone().applyMatrix4(this.control.matrix); + delta.sub(this.lastGrip.left.clone().applyMatrix4(this.control.matrix)); + delta.multiplyScalar(1 / deltaTime); + this.velocity.lerp(delta, 1 - Math.exp(-20 * deltaTime)); + } else if (grip.right && this.lastGrip.right) { + const delta = grip.right.clone().applyMatrix4(this.control.matrix); + delta.sub( + this.lastGrip.right.clone().applyMatrix4(this.control.matrix) + ); + delta.multiplyScalar(1 / deltaTime); + this.velocity.lerp(delta, 1 - Math.exp(-20 * deltaTime)); + } else { + this.velocity.multiplyScalar(Math.exp(-deltaTime / this.moveInertia)); + } + } + const negPivot = this.lastPivot.clone().negate(); + const rotate = new Matrix4().makeTranslation(negPivot).premultiply(new Matrix4().makeRotationY(this.rotateVelocity * deltaTime)).premultiply(new Matrix4().makeTranslation(this.lastPivot)); + this.control.matrix.multiply(rotate); + this.control.matrix.decompose( + this.control.position, + this.control.quaternion, + this.control.scale + ); + this.control.updateMatrixWorld(true); + this.control.position.sub(this.velocity.clone().multiplyScalar(deltaTime)); + this.lastGrip = grip; + } +} +const DEFAULT_MOVEMENT_SPEED = 1; +const DEFAULT_ROLL_SPEED = 2; +const DEFAULT_ROTATE_SPEED = 2e-3; +const DEFAULT_SLIDE_SPEED = 6e-3; +const DEFAULT_SCROLL_SPEED = 15e-4; +const DEFAULT_ROTATE_INERTIA = 0.15; +const DEFAULT_MOVE_INERTIA = 0.15; +const DEFAULT_STICK_THRESHOLD = 0.1; +const DEFAULT_FPS_ROTATE_SPEED = 2; +const DUAL_PRESS_MS = 200; +const DOUBLE_PRESS_LIMIT_MS = 400; +const DOUBLE_PRESS_DISTANCE = 50; +const WASD_KEYCODE_MOVE = { + KeyW: new THREE.Vector3(0, 0, -1), + KeyS: new THREE.Vector3(0, 0, 1), + KeyA: new THREE.Vector3(-1, 0, 0), + KeyD: new THREE.Vector3(1, 0, 0), + KeyR: new THREE.Vector3(0, 1, 0), + KeyF: new THREE.Vector3(0, -1, 0) +}; +const ARROW_KEYCODE_MOVE = { + ArrowUp: new THREE.Vector3(0, 0, -1), + ArrowDown: new THREE.Vector3(0, 0, 1), + ArrowLeft: new THREE.Vector3(-1, 0, 0), + ArrowRight: new THREE.Vector3(1, 0, 0), + PageUp: new THREE.Vector3(0, 1, 0), + PageDown: new THREE.Vector3(0, -1, 0) +}; +const QE_KEYCODE_ROTATE = { + KeyQ: new THREE.Vector3(0, 0, 1), + KeyE: new THREE.Vector3(0, 0, -1) +}; +const ARROW_KEYCODE_ROTATE = { + Home: new THREE.Vector3(0, -1, 0), + End: new THREE.Vector3(0, 1, 0), + Insert: new THREE.Vector3(-1, 0, 0), + Delete: new THREE.Vector3(1, 0, 0) +}; +class ForgeControls { + constructor({ canvas }) { + this.lastTime = 0; + this.fpsMovement = new FpsMovement({}); + this.pointerControls = new PointerControls({ canvas }); + } + update(control) { + const time = performance.now(); + const deltaTime = (time - (this.lastTime || time)) / 1e3; + this.lastTime = time; + this.fpsMovement.update(deltaTime, control); + this.pointerControls.update(deltaTime, control); + } +} +class FpsMovement { + constructor({ + moveSpeed, + rollSpeed, + stickThreshold, + rotateSpeed, + keycodeMoveMapping, + keycodeRotateMapping, + gamepadMapping, + capsMultiplier, + shiftMultiplier, + ctrlMultiplier, + xr + } = {}) { + this.enable = true; + this.moveSpeed = moveSpeed ?? DEFAULT_MOVEMENT_SPEED; + this.rollSpeed = rollSpeed ?? DEFAULT_ROLL_SPEED; + this.stickThreshold = stickThreshold ?? DEFAULT_STICK_THRESHOLD; + this.rotateSpeed = rotateSpeed ?? DEFAULT_FPS_ROTATE_SPEED; + this.keycodeMoveMapping = keycodeMoveMapping ?? { + ...WASD_KEYCODE_MOVE, + ...ARROW_KEYCODE_MOVE + }; + this.keycodeRotateMapping = keycodeRotateMapping ?? { + ...QE_KEYCODE_ROTATE, + ...ARROW_KEYCODE_ROTATE + }; + this.gamepadMapping = gamepadMapping ?? { + 4: "rollLeft", + 5: "rollRight", + 6: "ctrl", + 7: "shift" + }; + this.capsMultiplier = capsMultiplier ?? 10; + this.shiftMultiplier = shiftMultiplier ?? 5; + this.ctrlMultiplier = ctrlMultiplier ?? 1 / 5; + this.xr = xr; + this.keydown = {}; + this.keycode = {}; + document.addEventListener("keydown", (event) => { + this.keydown[event.key] = true; + this.keycode[event.code] = true; + }); + document.addEventListener("keyup", (event) => { + this.keydown[event.key] = false; + this.keycode[event.code] = false; + }); + } + // Call this method in your render loop with `control` set to the object to control + // (`THREE.Camera` or a `THREE.Object3D` that contains it), with `deltaTime` + // in seconds since the last update. + update(deltaTime, control) { + var _a2, _b2; + if (!this.enable) { + return; + } + const sticks = [new THREE.Vector2(), new THREE.Vector2()]; + const gamepad = navigator.getGamepads()[0]; + if (gamepad) { + sticks[0].set(gamepad.axes[0], gamepad.axes[1]); + sticks[1].set(gamepad.axes[2], gamepad.axes[3]); + } + const gamepadButtons = (gamepad == null ? void 0 : gamepad.buttons.map((button) => button.pressed)) || []; + const xrSources = Array.from(((_b2 = (_a2 = this.xr) == null ? void 0 : _a2.getSession()) == null ? void 0 : _b2.inputSources) ?? []); + for (const source of xrSources) { + const gamepad2 = source.gamepad; + if (gamepad2) { + switch (source.handedness) { + case "none": { + sticks[0].x += gamepad2.axes[0]; + sticks[0].y += gamepad2.axes[1]; + sticks[1].x += gamepad2.axes[2]; + sticks[1].y += gamepad2.axes[3]; + break; + } + case "left": { + sticks[0].x += gamepad2.axes[2]; + sticks[0].y += gamepad2.axes[3]; + break; + } + case "right": { + sticks[1].x += gamepad2.axes[2]; + sticks[1].y += gamepad2.axes[3]; + break; + } + } + } + } + for (const stick of sticks) { + stick.x = Math.abs(stick.x) >= this.stickThreshold ? stick.x : 0; + stick.y = Math.abs(stick.y) >= this.stickThreshold ? stick.y : 0; + } + const rotate = new THREE.Vector3( + sticks[1].x, + sticks[1].y, + 0 + ).multiplyScalar(this.rotateSpeed); + for (const [keycode, rot] of Object.entries(this.keycodeRotateMapping)) { + if (this.keycode[keycode]) { + rotate.add(rot); + } + } + for (const button in this.gamepadMapping) { + if (gamepadButtons[Number.parseInt(button)]) { + switch (this.gamepadMapping[button]) { + case "rollLeft": + rotate.z += 1; + break; + case "rollRight": + rotate.z -= 1; + break; + } + } + } + rotate.multiply( + new THREE.Vector3(this.rotateSpeed, this.rotateSpeed, this.rollSpeed) + ); + if (rotate.manhattanLength() > 0) { + rotate.multiplyScalar(deltaTime); + const eulers = new THREE.Euler().setFromQuaternion( + control.quaternion, + "YXZ" + ); + eulers.y -= rotate.x; + eulers.x = Math.max( + -Math.PI / 2, + Math.min(Math.PI / 2, eulers.x - rotate.y) + ); + eulers.z = Math.max(-Math.PI, Math.min(Math.PI, eulers.z + rotate.z)); + control.quaternion.setFromEuler(eulers); + } + const moveVector = new THREE.Vector3(sticks[0].x, 0, sticks[0].y); + for (const [keycode, move] of Object.entries(this.keycodeMoveMapping)) { + if (this.keycode[keycode]) { + moveVector.add(move); + } + } + let speedMultiplier = 1; + if (this.keydown.CapsLock) { + speedMultiplier *= this.capsMultiplier; + } + if (this.keycode.ShiftLeft || this.keycode.ShiftRight) { + speedMultiplier *= this.shiftMultiplier; + } + if (this.keycode.ControlLeft || this.keycode.ControlRight) { + speedMultiplier *= this.ctrlMultiplier; + } + for (const button in this.gamepadMapping) { + if (gamepadButtons[Number.parseInt(button)]) { + switch (this.gamepadMapping[button]) { + case "shift": + speedMultiplier *= this.shiftMultiplier; + break; + case "ctrl": + speedMultiplier *= this.ctrlMultiplier; + break; + } + } + } + moveVector.applyQuaternion(control.quaternion); + control.position.add( + moveVector.multiplyScalar(this.moveSpeed * speedMultiplier * deltaTime) + ); + } +} +class PointerControls { + constructor({ + // The HTML canvas element to attach pointer events to + canvas, + // Speed of rotation (default DEFAULT_ROTATE_SPEED) + rotateSpeed, + // Speed of sliding when dragging with right/middle mouse button or two fingers + // (default DEFAULT_SLIDE_SPEED) + slideSpeed, + // Speed of movement when using mouse scroll wheel (default DEFAULT_SCROLL_SPEED) + scrollSpeed, + // Reverse the direction of rotation (default: false) + reverseRotate, + // Reverse the direction of sliding (default: false) + reverseSlide, + // Reverse the direction of swipe gestures (default: false) + reverseSwipe, + // Reverse the direction of scroll wheel movement (default: false) + reverseScroll, + // Inertia factor for movement (default: DEFAULT_MOVE_INERTIA) + moveInertia, + // Inertia factor for rotation (default: DEFAULT_ROTATE_INERTIA) + rotateInertia, + // Callback for double press events (default: () => {}) + doublePress + }) { + this.enable = true; + this.canvas = canvas; + this.rotateSpeed = rotateSpeed ?? DEFAULT_ROTATE_SPEED; + this.slideSpeed = slideSpeed ?? DEFAULT_SLIDE_SPEED; + this.scrollSpeed = scrollSpeed ?? DEFAULT_SCROLL_SPEED; + this.reverseRotate = reverseRotate ?? false; + this.reverseSlide = reverseSlide ?? false; + this.reverseSwipe = reverseSwipe ?? false; + this.reverseScroll = reverseScroll ?? false; + this.moveInertia = moveInertia ?? DEFAULT_MOVE_INERTIA; + this.rotateInertia = rotateInertia ?? DEFAULT_ROTATE_INERTIA; + this.doublePress = doublePress ?? (() => { + }); + this.doublePressLimitMs = DOUBLE_PRESS_LIMIT_MS; + this.doublePressDistance = DOUBLE_PRESS_DISTANCE; + this.lastUp = null; + this.rotating = null; + this.sliding = null; + this.dualPress = false; + this.scroll = new THREE.Vector3(); + this.rotateVelocity = new THREE.Vector3(); + this.moveVelocity = new THREE.Vector3(); + canvas.addEventListener("pointerdown", (event) => { + const position = this.getPointerPosition(event); + const initial = position.clone(); + const last = position.clone(); + const isRotate = !this.rotating && (event.pointerType !== "mouse" || event.button === 0); + const { pointerId, timeStamp } = event; + if (isRotate) { + this.rotating = { initial, last, position, pointerId, timeStamp }; + canvas.setPointerCapture(event.pointerId); + this.dualPress = false; + } else if (!this.sliding) { + const button = event.pointerType === "mouse" ? event.button : void 0; + this.sliding = { + initial, + last, + position, + pointerId, + button, + timeStamp + }; + canvas.setPointerCapture(event.pointerId); + this.dualPress = this.rotating != null && timeStamp - this.rotating.timeStamp < DUAL_PRESS_MS; + } + }); + const pointerUp = (event) => { + var _a2, _b2; + if (((_a2 = this.rotating) == null ? void 0 : _a2.pointerId) === event.pointerId) { + this.rotating = null; + canvas.releasePointerCapture(event.pointerId); + if (this.dualPress && this.sliding) { + canvas.releasePointerCapture(this.sliding.pointerId); + this.sliding = null; + } + } else if (((_b2 = this.sliding) == null ? void 0 : _b2.pointerId) === event.pointerId) { + this.sliding = null; + canvas.releasePointerCapture(event.pointerId); + if (this.dualPress && this.rotating) { + canvas.releasePointerCapture(this.rotating.pointerId); + this.rotating = null; + } + } + const position = this.getPointerPosition(event); + const lastUp = this.lastUp; + this.lastUp = { position, time: event.timeStamp }; + if (lastUp) { + const distance2 = lastUp.position.distanceTo(position); + if (distance2 < this.doublePressDistance) { + const intervalMs = event.timeStamp - lastUp.time; + if (intervalMs < this.doublePressLimitMs) { + this.lastUp = null; + this.doublePress({ position, intervalMs }); + } + } + } + }; + document.addEventListener("pointerup", pointerUp); + document.addEventListener("pointercancel", pointerUp); + document.addEventListener("pointermove", (event) => { + var _a2, _b2; + if (((_a2 = this.rotating) == null ? void 0 : _a2.pointerId) === event.pointerId) { + this.rotating.position = this.getPointerPosition(event); + } else if (((_b2 = this.sliding) == null ? void 0 : _b2.pointerId) === event.pointerId) { + this.sliding.position = this.getPointerPosition(event); + } + }); + canvas.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + canvas.addEventListener("wheel", (event) => { + this.scroll.add( + new THREE.Vector3(event.deltaX, event.deltaY, event.deltaZ) + ); + event.preventDefault(); + }); + } + getPointerPosition(event) { + const rect = this.canvas.getBoundingClientRect(); + return new THREE.Vector2( + event.clientX - rect.left, + event.clientY - rect.top + ); + } + update(deltaTime, control) { + if (!this.enable) { + return; + } + if (this.dualPress && this.rotating && this.sliding) { + const motion = [ + this.rotating.position.clone().sub(this.rotating.last), + this.sliding.position.clone().sub(this.sliding.last) + ]; + const coincidence = motion[0].dot(motion[1]); + if (coincidence >= 0.2) { + const totalMotion = motion[0].clone().add(motion[1]); + const slide = new THREE.Vector3(totalMotion.x, -totalMotion.y, 0); + slide.multiplyScalar(this.slideSpeed * (this.reverseSwipe ? 1 : -1)); + slide.applyQuaternion(control.quaternion); + control.position.add(slide); + this.moveVelocity = slide.clone().multiplyScalar(1 / deltaTime); + } else if (coincidence <= -0.2) { + const deltaDir = this.sliding.last.clone().sub(this.rotating.last); + const deltaDist = deltaDir.length(); + deltaDir.multiplyScalar(1 / deltaDist).normalize(); + const orthoDir = new THREE.Vector2(-deltaDir.y, deltaDir.x); + const motionDir = [motion[0].dot(deltaDir), motion[1].dot(deltaDir)]; + const motionOrtho = [motion[0].dot(orthoDir), motion[1].dot(orthoDir)]; + const midpoint = this.rotating.last.clone().add(this.sliding.last).multiplyScalar(0.5); + let midpointDir = new THREE.Vector3(); + if (control instanceof THREE.Camera) { + const ndcMidpoint = new THREE.Vector2( + midpoint.x / this.canvas.clientWidth * 2 - 1, + -(midpoint.y / this.canvas.clientHeight) * 2 + 1 + ); + const raycaster = new THREE.Raycaster(); + raycaster.setFromCamera(ndcMidpoint, control); + midpointDir = raycaster.ray.direction; + } + const pinchOut = motionDir[1] - motionDir[0]; + const slide = midpointDir.multiplyScalar(pinchOut * this.slideSpeed); + control.position.add(slide); + this.moveVelocity = slide.clone().multiplyScalar(1 / deltaTime); + const angles = [ + Math.atan(motionOrtho[0] / (-0.5 * deltaDist)), + Math.atan(motionOrtho[1] / (0.5 * deltaDist)) + ]; + const rotate = 0.5 * (angles[0] + angles[1]); + const eulers = new THREE.Euler().setFromQuaternion( + control.quaternion, + "YXZ" + ); + eulers.z = Math.max( + -Math.PI, + Math.min(Math.PI, eulers.z + 0.5 * rotate) + ); + control.quaternion.setFromEuler(eulers); + } + this.rotating.last.copy(this.rotating.position); + this.sliding.last.copy(this.sliding.position); + } else { + const rotate = new THREE.Vector3(); + if (this.rotating && !this.dualPress) { + const delta = this.rotating.position.clone().sub(this.rotating.last); + this.rotating.last.copy(this.rotating.position); + rotate.set(delta.x, delta.y, 0); + rotate.multiplyScalar(this.rotateSpeed * (this.reverseRotate ? -1 : 1)); + this.rotateVelocity = rotate.clone().multiplyScalar(1 / deltaTime); + } else { + this.rotateVelocity.multiplyScalar( + Math.exp(-deltaTime / this.rotateInertia) + ); + rotate.addScaledVector(this.rotateVelocity, deltaTime); + } + const eulers = new THREE.Euler().setFromQuaternion( + control.quaternion, + "YXZ" + ); + eulers.y -= rotate.x; + eulers.x = Math.max( + -Math.PI / 2, + Math.min(Math.PI / 2, eulers.x - rotate.y) + ); + eulers.z *= Math.exp(-0 * deltaTime); + control.quaternion.setFromEuler(eulers); + if (this.sliding && !this.dualPress) { + const delta = this.sliding.position.clone().sub(this.sliding.last); + this.sliding.last.copy(this.sliding.position); + const slide = this.sliding.button !== 2 ? new THREE.Vector3(delta.x, 0, delta.y) : new THREE.Vector3(delta.x, -delta.y, 0); + slide.multiplyScalar(this.slideSpeed * (this.reverseSlide ? -1 : 1)); + slide.applyQuaternion(control.quaternion); + control.position.add(slide); + this.moveVelocity = slide.clone().multiplyScalar(1 / deltaTime); + } else { + this.moveVelocity.multiplyScalar( + Math.exp(-deltaTime / this.moveInertia) + ); + control.position.addScaledVector(this.moveVelocity, deltaTime); + } + } + const scroll = this.scroll.multiplyScalar(this.scrollSpeed); + scroll.set(scroll.x, scroll.z, scroll.y); + if (this.reverseScroll) { + scroll.multiplyScalar(-1); + } + scroll.applyQuaternion(control.quaternion); + control.position.add(scroll); + this.scroll.set(0, 0, 0); + } +} +export { + FINGER_TIPS, + ForgeControls, + ForgeRenderer, + ForgeViewpoint, + FpsMovement, + HANDS, + Hand, + HandMovement, + JOINT_IDS, + JOINT_INDEX, + JOINT_RADIUS, + JOINT_SEGMENTS, + JOINT_SEGMENT_STEPS, + JOINT_TIPS, + JointEnum, + NUM_JOINTS, + PackedSplats, + PlyReader, + PointerControls, + Readback, + Sint8ToFloat, + SplatAccumulator, + SplatEdit, + SplatEditRgbaBlendMode, + SplatEditSdf, + SplatEditSdfType, + SplatEdits, + SplatFileType, + SplatGenerator, + SplatLoader, + SplatMesh, + SplatModifier, + SplatSkinning, + SplatTransformer, + SpzReader, + Uint8ToFloat, + VRButton, + XrHands, + constructAxes, + constructGrid, + constructSpherePoints, + dyno, + flipPixels, + floatToSint8, + floatToUint8, + fromHalf, + generators, + getSplatFileType, + imageSplats, + isAndroid, + isMobile, + isOculus, + pixelsToPngUrl, + setPackedSplat, + textSplats, + toHalf, + unpackSplat, + unpackSplats, + utils +}; diff --git a/dist/forge.module.min.js b/dist/forge.module.min.js new file mode 100644 index 0000000..2cd70fe --- /dev/null +++ b/dist/forge.module.min.js @@ -0,0 +1,9610 @@ +import * as e from "three"; +import { Loader as Yt, FileLoader as dt, Quaternion as xI, Vector3 as uA, Color as KI, Matrix4 as sI } from "three"; +let oA; +function ut(Q) { + const A = oA.__externref_table_alloc(); + return oA.__wbindgen_export_2.set(A, Q), A; +} +function Ut(Q, A) { + try { + return Q.apply(this, A); + } catch (I) { + const g = ut(I); + oA.__wbindgen_exn_store(g); + } +} +function cI(Q) { + const A = typeof Q; + if (A == "number" || A == "boolean" || Q == null) + return `${Q}`; + if (A == "string") + return `"${Q}"`; + if (A == "symbol") { + const B = Q.description; + return B == null ? "Symbol" : `Symbol(${B})`; + } + if (A == "function") { + const B = Q.name; + return typeof B == "string" && B.length > 0 ? `Function(${B})` : "Function"; + } + if (Array.isArray(Q)) { + const B = Q.length; + let C = "["; + B > 0 && (C += cI(Q[0])); + for (let E = 1; E < B; E++) + C += ", " + cI(Q[E]); + return C += "]", C; + } + const I = /\[object ([^\]]+)\]/.exec(toString.call(Q)); + let g; + if (I && I.length > 1) + g = I[1]; + else + return toString.call(Q); + if (g == "Object") + try { + return "Object(" + JSON.stringify(Q) + ")"; + } catch { + return "Object"; + } + return Q instanceof Error ? `${Q.name}: ${Q.message} +${Q.stack}` : g; +} +let wI = 0, MQ = null; +function VQ() { + return (MQ === null || MQ.byteLength === 0) && (MQ = new Uint8Array(oA.memory.buffer)), MQ; +} +const vQ = typeof TextEncoder < "u" ? new TextEncoder("utf-8") : { encode: () => { + throw Error("TextEncoder not available"); +} }, St = typeof vQ.encodeInto == "function" ? function(Q, A) { + return vQ.encodeInto(Q, A); +} : function(Q, A) { + const I = vQ.encode(Q); + return A.set(I), { + read: Q.length, + written: I.length + }; +}; +function Lt(Q, A, I) { + if (I === void 0) { + const t = vQ.encode(Q), s = A(t.length, 1) >>> 0; + return VQ().subarray(s, s + t.length).set(t), wI = t.length, s; + } + let g = Q.length, B = A(g, 1) >>> 0; + const C = VQ(); + let E = 0; + for (; E < g; E++) { + const t = Q.charCodeAt(E); + if (t > 127) break; + C[B + E] = t; + } + if (E !== g) { + E !== 0 && (Q = Q.slice(E)), B = I(B, g, g = E + Q.length * 3, 1) >>> 0; + const t = VQ().subarray(B + E, B + g), s = St(Q, t); + E += s.written, B = I(B, g, E, 1) >>> 0; + } + return wI = E, B; +} +let _A = null; +function ZI() { + return (_A === null || _A.buffer.detached === !0 || _A.buffer.detached === void 0 && _A.buffer !== oA.memory.buffer) && (_A = new DataView(oA.memory.buffer)), _A; +} +const PI = typeof TextDecoder < "u" ? new TextDecoder("utf-8", { ignoreBOM: !0, fatal: !0 }) : { decode: () => { + throw Error("TextDecoder not available"); +} }; +typeof TextDecoder < "u" && PI.decode(); +function qI(Q, A) { + return Q = Q >>> 0, PI.decode(VQ().subarray(Q, Q + A)); +} +function pt(Q, A, I, g, B, C, E, t, s, o, a) { + return oA.raycast_splats(Q, A, I, g, B, C, E, t, s, o, a); +} +async function Ht(Q, A) { + if (typeof Response == "function" && Q instanceof Response) { + if (typeof WebAssembly.instantiateStreaming == "function") + try { + return await WebAssembly.instantiateStreaming(Q, A); + } catch (g) { + if (Q.headers.get("Content-Type") != "application/wasm") + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", g); + else + throw g; + } + const I = await Q.arrayBuffer(); + return await WebAssembly.instantiate(I, A); + } else { + const I = await WebAssembly.instantiate(Q, A); + return I instanceof WebAssembly.Instance ? { instance: I, module: Q } : I; + } +} +function ft() { + const Q = {}; + return Q.wbg = {}, Q.wbg.__wbg_buffer_09165b52af8c5237 = function(A) { + return A.buffer; + }, Q.wbg.__wbg_buffer_609cc3eee51ed158 = function(A) { + return A.buffer; + }, Q.wbg.__wbg_get_b9b93047fe3cf45b = function(A, I) { + return A[I >>> 0]; + }, Q.wbg.__wbg_instanceof_Uint8Array_17156bcf118086a9 = function(A) { + let I; + try { + I = A instanceof Uint8Array; + } catch { + I = !1; + } + return I; + }, Q.wbg.__wbg_length_3b4f022188ae8db6 = function(A) { + return A.length; + }, Q.wbg.__wbg_length_6ca527665d89694d = function(A) { + return A.length; + }, Q.wbg.__wbg_length_8cfd2c6409af88ad = function(A) { + return A.length; + }, Q.wbg.__wbg_length_a446193dc22c12f8 = function(A) { + return A.length; + }, Q.wbg.__wbg_length_e2d2a49132c1b256 = function(A) { + return A.length; + }, Q.wbg.__wbg_new_405e22f390576ce2 = function() { + return new Object(); + }, Q.wbg.__wbg_new_9fee97a409b32b68 = function(A) { + return new Uint16Array(A); + }, Q.wbg.__wbg_new_a12002a7f91c75be = function(A) { + return new Uint8Array(A); + }, Q.wbg.__wbg_new_e3b321dcfef89fc7 = function(A) { + return new Uint32Array(A); + }, Q.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354 = function(A, I, g) { + return new Float32Array(A, I >>> 0, g >>> 0); + }, Q.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212 = function(A, I, g) { + return new Uint32Array(A, I >>> 0, g >>> 0); + }, Q.wbg.__wbg_newwithlength_5a5efe313cfd59f1 = function(A) { + return new Float32Array(A >>> 0); + }, Q.wbg.__wbg_newwithlength_bd3de93688d68fbc = function(A) { + return new Uint32Array(A >>> 0); + }, Q.wbg.__wbg_set_10bad9bee0e9c58b = function(A, I, g) { + A.set(I, g >>> 0); + }, Q.wbg.__wbg_set_65595bdd868b3009 = function(A, I, g) { + A.set(I, g >>> 0); + }, Q.wbg.__wbg_set_bb8cecf6a62b9f46 = function() { + return Ut(function(A, I, g) { + return Reflect.set(A, I, g); + }, arguments); + }, Q.wbg.__wbg_set_d23661d19148b229 = function(A, I, g) { + A.set(I, g >>> 0); + }, Q.wbg.__wbg_set_f4f1f0daa30696fc = function(A, I, g) { + A.set(I, g >>> 0); + }, Q.wbg.__wbg_subarray_3aaeec89bb2544f0 = function(A, I, g) { + return A.subarray(I >>> 0, g >>> 0); + }, Q.wbg.__wbg_subarray_769e1e0f81bb259b = function(A, I, g) { + return A.subarray(I >>> 0, g >>> 0); + }, Q.wbg.__wbindgen_debug_string = function(A, I) { + const g = cI(I), B = Lt(g, oA.__wbindgen_malloc, oA.__wbindgen_realloc), C = wI; + ZI().setInt32(A + 4 * 1, C, !0), ZI().setInt32(A + 4 * 0, B, !0); + }, Q.wbg.__wbindgen_init_externref_table = function() { + const A = oA.__wbindgen_export_2, I = A.grow(4); + A.set(0, void 0), A.set(I + 0, void 0), A.set(I + 1, null), A.set(I + 2, !0), A.set(I + 3, !1); + }, Q.wbg.__wbindgen_memory = function() { + return oA.memory; + }, Q.wbg.__wbindgen_number_new = function(A) { + return A; + }, Q.wbg.__wbindgen_string_new = function(A, I) { + return qI(A, I); + }, Q.wbg.__wbindgen_throw = function(A, I) { + throw new Error(qI(A, I)); + }, Q; +} +function mt(Q, A) { + return oA = Q.exports, _I.__wbindgen_wasm_module = A, _A = null, MQ = null, oA.__wbindgen_start(), oA; +} +async function _I(Q) { + if (oA !== void 0) return oA; + typeof Q < "u" && (Object.getPrototypeOf(Q) === Object.prototype ? { module_or_path: Q } = Q : console.warn("using deprecated parameters for the initialization function; pass a single object instead")), typeof Q > "u" && (Q = new URL("data:application/wasm;base64,AGFzbQEAAAABtgItYAJ/fwF/YAJ/fwBgA39/fwF/YAF/AGABfwF/YAN/f38AYAV/f39/fwBgBH9/f38AYAFvAX9gAW8Bb2ADb39/AW9gBX9/f39/AX9gA29vfwBgAABgA39+fgBgA39+fgF/YAd/f39/f39/AX9gBn9/f39/fwBgAX0BfWAEf39/fwF/YAABb2ABfwFvYAZ/f39/f38Bf2AAAX9gC39/f39/f39/f39/AX9gAn9/AW9gAXwBb2ACb38Bb2ADb29vAX9gAn9vAGAHf39/f39/fwBgAn9/AX5gAn9+AX9gAn9+AGALfX19fX19fX1/b38Bb2ABfwF9YAV/f35/fwBgBH9+f38AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AYAR/f29vAX9gA39vbwF/YAJ9fQF9ArcIHgN3YmcVX193YmluZGdlbl9zdHJpbmdfbmV3ABkDd2JnFV9fd2JpbmRnZW5fbnVtYmVyX25ldwAaA3diZxpfX3diZ19nZXRfYjliOTMwNDdmZTNjZjQ1YgAbA3diZx1fX3diZ19sZW5ndGhfZTJkMmE0OTEzMmMxYjI1NgAIA3diZxpfX3diZ19uZXdfNDA1ZTIyZjM5MDU3NmNlMgAUA3diZx1fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OAAJA3diZxpfX3diZ19uZXdfYTEyMDAyYTdmOTFjNzViZQAJA3diZxpfX3diZ19zZXRfNjU1OTViZGQ4NjhiMzAwOQAMA3diZx1fX3diZ19sZW5ndGhfYTQ0NjE5M2RjMjJjMTJmOAAIA3diZxpfX3diZ19uZXdfOWZlZTk3YTQwOWIzMmI2OAAJA3diZxpfX3diZ19zZXRfZjRmMWYwZGFhMzA2OTZmYwAMA3diZx1fX3diZ19sZW5ndGhfOGNmZDJjNjQwOWFmODhhZAAIA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyAAoDd2JnGl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3AAkDd2JnGl9fd2JnX3NldF9kMjM2NjFkMTkxNDhiMjI5AAwDd2JnHV9fd2JnX2xlbmd0aF82Y2E1Mjc2NjVkODk2OTRkAAgDd2JnMV9fd2JnX25ld3dpdGhi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CwJAIAAoAhAiAkUNAEGousIAQQggAhDVBEUNAEEBDAILIAFBATsBJCABIAQ2AiAgAUEANgIcIAFBAToAGCABQd8ANgIUIAEgBDYCECABQQA2AgwgASAENgIIIAEgAzYCBCABQd8ANgIAIAFBKGogARBQAn8gASgCKEUEQAJAIAEtACUNACABQQE6ACUCQCABLQAkQQFGBEAgASgCICEFIAEoAhwhBAwBCyABKAIgIgUgASgCHCIERg0BCyABKAIEIARqIQMgBSAEawwCC0GwusIAEK4EAAsgASgCHCEEIAEgASgCMDYCHCADIARqIQMgASgCLCAEawshBAJAIAIEQCADIAQgAhDVBA0BCyABQcgAaiABQSBqKQIANwMAIAFBQGsgAUEYaikCADcDACABQThqIAFBEGopAgA3AwAgAUEwaiABQQhqKQIANwMAIAEgASkCADcDKAJAIAEtAE0NACACIQMDQCABKAIsIQUgAUHUAGogAUEoahBQAn8gASgCVEUEQCABLQBNDQMgAUEBOgBNAkAgAS0ATEEBRgRAIAEoAkghBSABKAJEIQQMAQsgASgCSCIFIAEoAkQiBEYNBAsgASgCLCAEaiEGIAUgBGsMAQsgASgCRCEEIAEgASgCXDYCRCAEIAVqIQYgASgCWCAEawshBAJAIANFBEBBACEDDAELQbm2wgBBASADENUEDQMgACgCECICRQRAQQAhAkEAIQMMAQsgAiEDIAYgBCACENUEDQMLIAEtAE1FDQALCyACRQ0BQcC6wgBBAiACENUERQ0BC0EBDAELAkAgACgCECICRQ0AQcK6wgBBAyACENUERQ0AQQEMAQsCQAJAAkAgACgCACIDRQRAQQAhAwwBC0EAIQIDQAJAIAAoAggiBCAAKAIETw0AIAMgBGotAABBxQBHDQAgACAEQQFqNgIIDAILAkAgAkUNACAAKAIQIgNFDQBB9bnCAEECIAMQ1QRFDQBBAQwFCyAAECcNAiACQQFrIQIgACgCACIDDQALQQAhAwsgACgCECIEBEBBAUH1s8IAQQEgBBDVBA0DGiAAKAIAIQMLIANFDQEgACgCCCICIAAoAgRPDQEgAiADai0AAEH1AEcNASAAIAJBAWo2AghBAAwCC0EBDAELAkAgACgCECICRQ0AQcW6wgBBBCACENUERQ0AQQEMAQsgABAnCyABQeAAaiQAC+sJAgJ/AX4jAEEwayICJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkBBAiAAKAIAQfv///8HaiIDIANBDk8bQQFrDg0BAgMEBQYHCAkKCwwNAAsgAiAAQQRqNgIEIAJBATYCDCACQfCnwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA4hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwNCyACIABBBGo2AgQgAkEBNgIMIAJB8KfBADYCCCACQgE3AhQgAiACQQRqrUKAgICA4DiENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAwLIAIgADYCBCACQQE2AgwgAkHwp8EANgIIIAJCATcCFCACIAJBBGqtQoCAgICQN4Q3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMCwsgASgCHEH4xcEAQSYgASgCICgCDBECAAwKCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAzYCDCACQfjGwQA2AgggAkICNwIUIAIgAq1CgICAgPA1hDcDKCACIAJBBGqtQoCAgIDgNIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMCQsgAiAAQQRqNgIEIAJBAjYCDCACQfC8wQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgLA4hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwICyACIABBBGo2AgQgAkECNgIMIAJB3MfBADYCCCACQgE3AhQgAiACQQRqrUKAgICA8DWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAcLIAEoAhxB7MfBAEEtIAEoAiAoAgwRAgAMBgsgAiAAQQRqNgIEIAJBATYCDCACQcDIwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgIA2hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwFCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAjYCDCACQYDJwQA2AgggAkICNwIUIAJCgICAgPA1IgQgAkEEaq2ENwMoIAIgBCACrYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMBAsgAiAAQQRqNgIAIAIgAEEIajYCBCACQQM2AgwgAkH0ycEANgIIIAJCAjcCFCACIAJBBGqtQoCAgIDgNIQ3AyggAiACrUKAgICA8DWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAMLIAIgAEEEajYCACACIABBCGo2AgQgAkECNgIMIAJBuMrBADYCCCACQgI3AhQgAkKAgICA8DUiBCACrYQ3AyggAiAEIAJBBGqthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwCCyACIABBBGo2AgQgAkECNgIMIAJB+MrBADYCCCACQgI3AhQgAkLIysGAgDk3AyggAiACQQRqrUKAgICA4DSENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAELIAIgAEEEajYCBCACQQI2AgwgAkHEy8EANgIIIAJCAjcCFCACQsjKwYCAOTcDKCACIAJBBGqtQoCAgIDgNIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAvoCQEJfyMAQdAAayIBJABBgYDEACEDAkACQCAAKAIEIgQgACgCECICSQ0AIAAgBCACayIGNgIEIAAgACgCACIDIAJqIgQ2AgACQAJAAkAgAkECRgRAIAMtAAAiAkHBAGtBX3FBCmogAkEwayACQTlLGyICQRBPDQUgAy0AASIDQcEAa0FfcUEKaiADQTBrIANBOUsbIgNBEE8NBSACQQR0IANyIgLAQQBODQFBgIDEACEDIAJB/wFxIgVBwAFJDQQgAQJ/QQIgBUHgAUkNABogBUHwAUkEQEEBIQhBAwwBCyAFQfgBTw0FQQQLIgM2AgggAUEAOgAPIAFBADsADSABIAI6AAwgASABQQxqNgIEIAZBAkkNAyAAIAZBAmsiBzYCBCAAIARBAmo2AgAgBC0AACIFQcEAa0FfcUEKaiAFQTBrIAVBOUsbIglBD0sNBQJAIAQtAAEiBUHBAGtBX3FBCmogBUEwayAFQTlLGyIFQQ9LDQAgASAJQQR0IAVyOgANIAJB/wFxQeABSQ0DIAdBAkkNBCAAIAZBBGsiBTYCBCAAIARBBGo2AgAgBC0AAiICQcEAa0FfcUEKaiACQTBrIAJBOUsbIgdBD0sNBiAELQADIgJBwQBrQV9xQQpqIAJBMGsgAkE5SxsiAkEPSw0AIAEgB0EEdCACcjoADiAIDQMgBUECSQ0EIAAgBkEGazYCBCAAIARBBmo2AgAgBC0ABCIAQcEAa0FfcUEKaiAAQTBrIABBOUsbIgZBD0sNBiAELQAFIgBBwQBrQV9xQQpqIABBMGsgAEE5SxsiAEEPSw0AIAEgBkEEdCAAcjoADwwDCwwFC0HMtsIAQShB9LbCABDtAgALQQEhAyABQQE2AgggAUEAOgAPIAFBADsADSABIAI6AAwgASABQQxqNgIECyABQTBqIAFBDGogAxA9IAEoAjANACABKAI0IQAgASABKAI4IgQ2AhQgASAANgIQIAECfwJAIARFDQAgACAEaiEFAkAgBQJ/IAAsAAAiA0EATgRAIANB/wFxIQMgAEEBagwBCyAALQABQT9xIQIgA0EfcSEGIANBX00EQCAGQQZ0IAJyIQMgAEECagwBCyAALQACQT9xIAJBBnRyIQIgA0FwSQRAIAIgBkEMdHIhAyAAQQNqDAELIAZBEnRBgIDwAHEgAC0AA0E/cSACQQZ0cnIhAyAAQQRqCyIGRwRAIAYsAAAaDAELIANBgIDEAEcNBAsgBEEQSQ0AIAAgBBAvDAELAn9BACEDQQAgBEUNABogBEEDcSEGAkAgBEEESQRAQQAhBAwBCyAEQXxxIQVBACEEA0AgBCAAIANqIgIsAABBv39KaiACQQFqLAAAQb9/SmogAkECaiwAAEG/f0pqIAJBA2osAABBv39KaiEEIAUgA0EEaiIDRw0ACwsgBgRAIAAgA2ohAANAIAQgACwAAEG/f0pqIQQgAEEBaiEAIAZBAWsiBg0ACwsgBAsLNgJMIAFBBDYCHCABQYS4wgA2AhggAUIDNwIkIAEgAUHMAGqtQoCAgIAQhDcDQCABIAFBEGqtQoCAgIDgwQCENwM4IAEgAUEEaq1CgICAgPDBAIQ3AzAgASABQTBqNgIgIAFBGGpBpLjCABCkAwALQYCAxAAhAwsgAUHQAGokACADDwtBhLfCABCuBAAL2RoCCX8CfiMAQSBrIgYkAAJAAkACQAJAAkACQAJAAkACQCAAKAIAIgMEQCAAKAIIIgIgACgCBE8NAyAAIAJBAWo2AgggAiADai0AACIBQeEAayIEQf8BcSIFQRlLQb/38x0gBXZBAXFFcg0CIAAoAhAiAA0BQQAhAwwJCyAAKAIQIgBFBEBBACEDDAkLQe25wgBBASAAENUEIQMMCAsgBEH/AXFBAnQiAUHcvcIAaigCACABQfS8wgBqKAIAIAAQ1QQhAwwHCyAAIAAoAgxBAWoiBDYCDCAEQfQDTQRAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQcEAaw4UAgYNBQ0EDQ0NDQ0NDQ0BAQAAAgMNCyAAKAIQIgIEQEEBIQNB+bPCAEEBIAIQ1QQNFSAAKAIAIgNFDRILIAAoAggiAiAAKAIETw0RIAIgA2otAABBzABHDREgACACQQFqNgIIIAZBEGogABBwIAYtABANByAGKQMYIgpQRQ0GDBELIAAoAhAiAgRAQQEhA0H6s8IAQQEgAhDVBA0UCyAAKAIQIQMgAUHQAEcNByADRQ0IQZK6wgBBBiADENUERQ0IDBILIAAoAhAiAgRAQQEhA0H3ucIAQQEgAhDVBA0TC0EBIQMgABAnDRIgAUHBAEYEQCAAKAIQIgEEQEGYusIAQQIgARDVBA0UCyAAQQEQIA0TCyAAKAIQIgFFDRBB+LnCAEEBIAEQ1QRFDRAMEgsgACgCECIBBEBBASEDQfazwgBBASABENUEDRILIAZBCGohA0EAIQECfwJAIAAoAgAiAkUNAANAAkAgACgCCCIEIAAoAgRPDQAgAiAEai0AAEHFAEcNACAAIARBAWo2AggMAgsCQCABRQ0AIAAoAhAiAkUNAEH1ucIAQQIgAhDVBEUNAEEBDAMLQQEgABAnDQIaIAFBAWohASAAKAIAIgINAAsLQQALIQIgAyABNgIEIAMgAjYCACAGKAIIDRAgBigCDEEBRgRAIAAoAhAiAUUNEEEBIQNB9LPCAEEBIAEQ1QQNEgsgACgCECIBRQ0PQQEhA0H1s8IAQQEgARDVBEUNDwwRC0EAIQEjAEEQayIDJAACQAJAAkACQCAAKAIAIgIEQCAAKAIIIgQgACgCBCIFTw0DIAIgBGotAABBxwBHDQMgACAEQQFqIgE2AgggASAFTw0BIAEgAmotAABB3wBHDQEgACAEQQJqNgIIDAILIAAoAhAiAkUNA0HtucIAQQEgAhDVBCEBDAMLA0ACQAJAAkACQCABIAVJBEAgASACai0AAEHfAEYNAQsgASAFRg0DIAEgAmotAAAiBEEwayIHQf8BcUEKSQ0CIARB4QBrQf8BcUEaSQ0BIARBwQBrQf8BcUEaTw0DIARBHWshBwwCCyAAIAFBAWo2AgggCkJ9Vg0CIApCAXwhCgwECyAEQdcAayEHCyAAIAFBAWoiATYCCCADIAoQmwIgAykDCEIAUg0AIAMpAwAiCyAHrUL/AYN8IgogC1oNAQsLAkAgACgCECIBRQ0AQcS5wgBBECABENUERQ0AQQEhAQwDC0EAIQEgAEEAOgAEIABBADYCAAwCCyAKQgF8IQsLAkAgACgCECIBBEAgC1ANAUHvucIAQQQgARDVBARAQQEhAQwDCyAAIAAoAhRBAWo2AhQgAEIBELwBBEBBASEBDAMLQgEhCgNAIAogC1EEQCAAKAIQIgJFDQNBASEBQfO5wgBBAiACENUERQ0DDAQLAkAgClANACAAKAIQIgFFDQBB9bnCAEECIAEQ1QRFDQBBASEBDAQLQQEhASAAIAAoAhRBAWo2AhQgCkIBfCEKIABCARC8AUUNAAsMAgsgABAkIQEMAQsgABAkIQEgACAAKAIUIAunazYCFAsgA0EQaiQAIAFFDQ4MDwsgACgCECIBBEBBmrrCAEEEIAEQ1QQNDwtBASEDQQAhASMAQRBrIgQkAAJAAkACQAJAIAAoAgAiAgRAIAAoAggiBSAAKAIEIgdPDQMgAiAFai0AAEHHAEcNAyAAIAVBAWoiATYCCCABIAdPDQEgASACai0AAEHfAEcNASAAIAVBAmo2AggMAgsgACgCECICRQ0DQe25wgBBASACENUEIQEMAwsDQAJAAkACQAJAIAEgB0kEQCABIAJqLQAAQd8ARg0BCyABIAdGDQMgASACai0AACIFQTBrIghB/wFxQQpJDQIgBUHhAGtB/wFxQRpJDQEgBUHBAGtB/wFxQRpPDQMgBUEdayEIDAILIAAgAUEBajYCCCAKQn1WDQIgCkIBfCEKDAQLIAVB1wBrIQgLIAAgAUEBaiIBNgIIIAQgChCbAiAEKQMIQgBSDQAgBCkDACILIAitQv8Bg3wiCiALWg0BCwsCQCAAKAIQIgFFDQBBxLnCAEEQIAEQ1QRFDQBBASEBDAMLQQAhASAAQQA6AAQgAEEANgIADAILIApCAXwhCwsgACgCECIBRQRAQQAhAQNAAkAgACgCCCIFIAAoAgRPDQAgAiAFai0AAEHFAEcNACAAIAVBAWo2AghBACEBDAMLAkAgAUUNACAAKAIQIgJFDQBBnrrCAEEDIAIQ1QRFDQBBASEBDAMLIAAQQgRAQQEhAQwDCyABQQFrIQEgACgCACICDQALQQAhAQwBCwJAIAtQDQBB77nCAEEEIAEQ1QQEQEEBIQEMAgsgACAAKAIUQQFqNgIUIABCARC8AQRAQQEhAQwCC0IBIQoDQCAKIAtRBEAgACgCECICRQ0CQQEhAUHzucIAQQIgAhDVBEUNAgwDCwJAIApQDQAgACgCECIBRQ0AQfW5wgBBAiABENUERQ0AQQEhAQwDC0EBIQEgACAAKAIUQQFqNgIUIApCAXwhCiAAQgEQvAFFDQALDAELAn9BACAAKAIAIgJFDQAaQQAhAQJAA0ACQCAAKAIIIgUgACgCBE8NACACIAVqLQAAQcUARw0AIAAgBUEBajYCCEEADAMLAkAgAUUNACAAKAIQIgJFDQBBnrrCAEEDIAIQ1QQNAgsgABBCDQEgAUEBayEBIAAoAgAiAg0AC0EADAELQQELIQEgACAAKAIUIAunazYCFAsgBEEQaiQAIAENDyAAKAIAIgJFDQUgACgCCCIBIAAoAgRPDQUgASACai0AAEHMAEcNBSAAIAFBAWo2AgggBkEQaiAAEHAgBi0AEA0GIAYpAxgiClANDSAAKAIQIgEEQEGeusIAQQMgARDVBA0PCyAAIAoQvAFFDQ0MDgtBACEBIwBBIGsiAiQAAkACQAJAAkACfgJAAkACQCAAKAIAIgUEQCAAKAIIIgMgACgCBCIHSQRAIAMgBWotAABB3wBGDQMLIAMgByADIAdLGyEJIAMhAQNAIAEgB0kEQCABIAVqLQAAQd8ARg0DCyABIAlGDQYCQCABIAVqLQAAIgRBMGsiCEH/AXFBCkkNACAEQeEAa0H/AXFBGk8EQCAEQcEAa0H/AXFBGk8NCCAEQR1rIQgMAQsgBEHXAGshCAsgACABQQFqIgE2AgggAiAKEJsCIAIpAwhCAFINBiACKQMAIgsgCK1C/wGDfCIKIAtaDQALDAULIAAoAhAiA0UNB0HtucIAQQEgAxDVBCEBDAcLIAAgAUEBajYCCCAKQn9SDQEMAwsgACADQQFqNgIIQgAMAQsgCkIBfAshCiAKIANBAWutWg0AQQEhASAAKAIQIQMgACgCDEEBaiIEQfQDSw0BIANFBEBBACEBDAQLIAJBGGoiBSAAQQhqIgMpAgA3AwAgACAENgIMIAMgCj4CACACIAApAgA3AxAgABAnIQEgAyAFKQMANwIAIAAgAikDEDcCAAwDC0EAIQEgACgCECIDRQ0BQcS5wgBBECADENUERQ0BQQEhAQwCCyADRQ0AQdS5wgBBGSADENUEDQELIAAgAToABEEAIQEgAEEANgIACyACQSBqJAAgAQ0NDAwLIAAgChC8AQ0MIAAoAhAiAkUNCkEBIQNBjbrCAEEBIAIQ1QRFDQoMDQsgACgCECEBAkAgBi0AESIDRQRAIAFFDQFBxLnCAEEQIAEQ1QRFDQEMDQsgAUUNAEHUucIAQRkgARDVBA0MCyAAIAM6AAQMCAsgA0UNAEGOusIAQQQgAxDVBA0KCyAAECdFDQgMCQsgACgCECIBRQ0EQcS5wgBBECABENUEDQkMBAsgACgCECEBAkAgBi0AESIDRQRAIAFFDQFBxLnCAEEQIAEQ1QRFDQEMCQsgAUUNAEHUucIAQRkgARDVBA0ICyAAIAM6AAQMBAsgACACNgIIIABBABAfRQ0FDAYLIAAoAhAiAQRAQdS5wgBBGSABENUEDQYLIABBAToABAwCCyAAKAIQIgFFDQBBxLnCAEEQIAEQ1QQNBAtBACEDIABBADoABCAAQQA2AgAMBAtBACEDIABBADYCAAwDCwJAIAFB0gBGDQAgACgCECIBRQ0AQY66wgBBBCABENUEDQILIAAQJw0BC0EAIQMgACgCAEUNASAAIAAoAgxBAWs2AgwMAQtBASEDCyAGQSBqJAAgAwvriAECJn8KfiMAQYABayITJAACQAJAAkAgASgCAEECRg0AIAEtAMwDIRsgAS0AEEEEcQRAIBtBAXFFDQIgASgCGA0BDAILIBtBAXFFDQELIAEQvwENACAAQQQ6AAAgAEEANgIEDAELAkAgARC/ASADTw0AIAEoAgBBAkYNACABQShqIQ0gAUHgA2ohJUG4hcEAKQMAIi9C/wGDITBB8P/AACkCACIxQv8BgyEyIBNB7ABqQQFyISMCfwJAAkADQCABLQDMAyEEAkAgAS0AEEEEcQRAIARBAXFFDQEgASgCGA0GDAELIARBAXENBQsgARC/ASEEIBMgJTYCRCABKAIAIBNBBzYCSEECRiIGDQJBACABIAYbISAgAyAEayEmIBNByABqECogASgCmAIhJCABKAKcAiEEIBNBADYCbCAEIAEoApQCQQAgBCAkSRtqIScCQANAIBMoAkQiBCgCACEGAn4CQAJAIAQoAgQiBUEDTwRAICMgBi8AADsAACAEIAVBA2s2AgQgBCAGQQNqNgIAICNBAmogBkECai0AADoAAAwBCyAEQQA2AgQgBCAFIAZqNgIAIDJCBFINAQsgEy0AbSIFQQF2QQNxIgdBA0YEQCAbQf+BfHFBgARyIRsgLkKAfoNCBIQMAgsCQAJAAkAgEy0AbkEFdCAFQfgBcUEDdnIgEy0Ab0ENdHIiBkGAgAhNBEAgBiEEIAdBAWsOAgECAwsgG0H/gXxxQYAEciEbIC5CgP7//w+DIAatQiCGhEIGhAwEC0EBIQYMAQtBACEECyATQQE2AmwgG0GAgHxxIAdyIAVBAXFBCHRyIRsgBK0gBq1CIIaEDAELIBtB/4F8cUGABHIhGyAxCyEuIBtBgP4DcUGABEYNASABIAEpA8ADQgN8NwPAAyATIBs2AnggEyAuNwNwIBNByABqIRggE0HwAGohBiATQcQAaiEEQQAhBUEAIQ5CACEqQgAhLEIAIS0jAEHAgAhrIg8kAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBNB7ABqIiItAABBAWsOAgABDQsgBi0ACEEBaw4DAgMEAQsgGEEHNgIADBwLIA9BDGpBAEGAgAgQWhogBCgCACEEAkAgBigCACIKQYCACEkNACAKQRF2IQcgDUHoAWohC0Hw/8AAKQMAIi1C/wGDQgRSBEADQCAEKAIAIQYgBCgCBCIFQYCACEkNCCAPQQxqIgggBkGAgAgQOxogBCAFQYCACGs2AgQgBCAGQYCACGo2AgAgCyAIQYCACBCnASAHQQFrIgcNAAwCCwALA0AgBCgCACEGIAQCfyAEKAIEIghBgIAITwRAIA9BDGogBkGAgAgQOxogBkGAgAhqIQUgCEGAgAhrDAELIAYgCGohBUEACzYCBCAEIAU2AgAgCyAPQQxqQYCACBCnASAHQQFrIgcNAAsLIAQoAgAhBSAEKAIEIgcgCkH//wdxIgZJDQYgByAGayEHIAUgBmohCyAGQQFGDQMgD0EMaiAFIAYQOxoMBAsgD0EAOgAMIAYoAgAhByAEKAIAIgQoAgQiBkUNByAEIAZBAWs2AgQgBCAEKAIAIgRBAWo2AgAgDyAELQAAIgU6AAwMCAsgBigCBCIhIQcgDSgCiAMiBSAhSQRAICEgBWsiBiANKAKAAyAFa0sEQCANQYADaiAFIAZBAUEBEJABIA0oAogDIQULIA0oAoQDIgogBWohByAGQQJPBH8gB0EAIAZBAWsiBhBaGiAKIAUgBmoiBWoFIAcLQQA6AAAgBUEBaiEHCyANIAc2AogDIAQoAgAiBCgCACEGAkAgByAEKAIEIgVNBEAgDSgChAMhCiAFIAdrIQUgBiAHaiELAkAgB0EBRwRAIAogBiAHEDsaDAELIAogBi0AADoAAAsgBCAFNgIEIAQgCzYCAAwBC0EAIQcgBEEANgIEIAQgBSAGajYCAEHw/8AAKQMAIi2nIgRB/wFxQQRHDQwLIA0oAogDIRUgDSgChAMhBiAPQQA6AKaACCAPQQA6AKSACCAPQQA2ApiACCAPQQA2AqCACCAPQQxqIQogD0GYgAhqIQQjAEEgayIFJAAgBSAVNgIIIAUgBjYCBCAFQQA2AgwgBUEQaiIHIAVBBGoiC0ECEE8gBSkDGCErAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBSgCEEUEQCAEICunQQNxIgg6AA4gByALQQIQTyAFKQMYISsgBSgCEA0BIBVFDQJBg4aQKEGBhIQYIAYtAAAiC0ECcRsgC0EBdEEYcXYiB0EHcSAVSw0DICunIQcgCEECSQRAIARBADYCAAJAAkACQAJAIAdB/wFxDgQBAgEDAAtBrN/BAEHGAEGg4cEAEO0CAAsgBCALQQN2NgIIQQEhBwwPCyAVQQFHBEAgBCAGLQABQQR0IAtBBHZyNgIIQQIhBwwPC0EBQQFB8ODBABCtAgALIBVBAUYNBSAVQQJLBEAgBCAGLQABQQR0IAtBBHZyIAYtAAJBDHRyNgIIQQMhBwwOC0ECQQJBkOHBABCtAgALAkACQAJAIAdB/wFxIgcEQCAHQQNLDQ8gBEGBCDsBDCAHQQJrDgICAwELIARBgQI7AQwLIBVBAUYNByAEIAYtAAEiB0E/cUEEdCALQQR2cjYCCCAVQQJLBEAgBEEBNgIAIAQgBi0AAkECdCAHQQZ2cjYCBEEDIQcMDwtBAkECQdDhwQAQrQIACyAVQQFGDQcgFUECTQ0IQQQhByAEIAYtAAFBBHQgC0EEdnIgBi0AAiILQQNxQQx0cjYCCCAVQQNHBEAgBEEBNgIAIAQgBi0AA0EGdCALQQJ2cjYCBAwOC0EDQQNBgOLBABCtAgALIBVBAUYNCCAVQQJNDQkgBCAGLQABQQR0IAtBBHZyIAYtAAIiB0E/cUEMdHI2AgggFUEDRg0KIBVBBEsEQCAEQQE2AgAgBCAGLQADQQJ0IAdBBnZyIAYtAARBCnRyNgIEQQUhBwwNC0EEQQRBwOLBABCtAgALIAUoAhQhBCAKICs3AgQgCiAENgIADAwLIAUoAhQhBCAKICs3AgQgCiAENgIADAsLQQBBAEHg4MEAEK0CAAsgCiAHOgAIIAogFTYCBCAKQQQ6AAAMCQtBAUEBQYDhwQAQrQIAC0EBQQFBwOHBABCtAgALQQFBAUHg4cEAEK0CAAtBAkECQfDhwQAQrQIAC0EBQQFBkOLBABCtAgALQQJBAkGg4sEAEK0CAAtBA0EDQbDiwQAQrQIAC0Gs38EAQcYAQbDhwQAQ7QIACyAKQQU6AAAgCiAHOgABCyAFQSBqJAAgDy0ADSEEIA8tAAwiBUEFRw0MIAQgFUsNDQJAAkACQCAPKAKYgAhFBEAgDy0ApoAIIgcOAgIDAQsgDygCnIAIIQcMAgtB5IDBAEETQfiAwQAQ7QIACyAPKAKggAghBwsgFSAEayIfIAdJDQ4gDUEANgLwAiAPQQxqIRQgBCAGaiEcIAchBiANQegCaiEQIwBBMGsiCSQAAkACQAJAAkACQAJAAkACQAJAIA9BmIAIaiIFLQAOIgRBAWsOAwIBAQALIAUoAggiBCAGSw0DIAQgECgCACAQKAIIIgZrSwRAIBAgBiAEQQFBARCSASAQKAIIIQYLIBAoAgQgBmogHCAEEDsaIBQgBDYCBCAQIAQgBmo2AgggFEGegICAeDYCAAwHCyAFKAIAQQFHBEBBk4CAgHghCAwGCyAFLQAMQQFHBEBBlICAgHghCAwGCyAFKAIEIREgBS0ADSEeIAUoAggiFiAQKAIAIBAoAggiBWtLBEAgECAFIBZBAUEBEJIBCyAGIBFJDQMCQCAEQQJGBEAgCUEYaiEZQQAhBUIAISsjAEFAaiIMJAAgDSIIQQA2AggCQAJAAn8gESIERQRAQYiAgIB4IRIMAgsgHEEBaiEXIARBAWshBQJAAkACQAJAAkACQAJAIBwsAAAiCkEASARAIAggCkH/AGsiHUH/AXEiCyAIKAIUIgRLBH8gCyAEayIOIAgoAgwgBGtLBEAgCEEMaiAEIA5BAUEBEJIBIAgoAhQhBAsgCCgCECIaIARqIRIgDkECTwR/IBJBACAOQQFrIg4QWhogGiAEIA5qIgRqBSASC0EAOgAAIARBAWoFIAsLNgIUIB1BAXEgC0EBdmoiBCAFTQRAIApB/wBxQQJ0QQxqIR1BACEEA0AgBEEBdiEKAkACQAJAAkAgBEEBcUUEQCAFIApNDQEgCCgCFCIOIARNDQIgCCgCECAEaiAKIBdqLQAAQQR2OgAADAQLIAUgCk0EQCAKIAVBjPrBABCtAgALIAgoAhQiDiAESw0CIAQgDkGc+sEAEK0CAAsgCiAFQez5wQAQrQIACyAEIA5B/PnBABCtAgALIAgoAhAgBGogCiAXai0AAEEPcToAAAsgCyAEQQFqIgRHDQALIAgoAhQhBAwCC0GQgICAeCESQQAhCEEAIQ4MCQsCQAJAIAUgCk8EQCAMQRhqIAhBPGoiBCAXIAVBBhAtIAwoAhwhCyAMKAIYIhJBhYCAgHhHDQEgCiALTw0CIAtBCHYhCEGPgICAeCESIAshBSAKIQQMCwtBiYCAgHghEkEAIQggCiEEDAoLIAtBCHYhCCAMKAIgIgRBgH5xIQ4gDCkCJCErIAshBQwJCyAIKAJEBH4gCCgCQCkCAAVCAAshKyAMIAQ2AgAgDCArNwIEIAwgKzcCECAMIAQ2AgwCQCAFIAtrIgUgCiALayIETwRAIAxBADoALCAMQgA3AyAgDCALIBdqNgIYIAwgBDYCHCAMIARBA3Q2AihBACEEDAELIARBgH5xIQ4gBUEIdiEIQY6AgIB4IRIMCQsDQCAEQQhPAn4gDkH/AXFFBEAgDEEYakEBEFsMAQsgDCAOQQFrIgU6ACwgDCkDICAFQT9xrYhCAYMLIitCAVFyRQRAIARBAWohBCAMLQAsIQ4MAQsLIARBB0sNAyAMQTBqIgQgDCAMQRhqIgsQ6AEgDC0AMCIFQQNHDQYgBCAMQQxqIAsQ6AEgDC0AMCIFQQNHDQUgCkEDdEEIaiEdIAhBADYCFCAMLQAJIQQgDCgCDCELIAwoAgAhDkEAIQUCQCAIQQxqIgoCfwJAA0AgCigCACAFRgRAIApBrPrBABDCAQsgCCgCECAFaiAEOgAAIAggBUEBajYCFAJ+QgAgDC0ACCIERQ0AGiAEIAwtACwiBU0EQCAMIAUgBGsiBToALEJ/IASthkJ/hSAMKQMgIAVBP3GtiIMMAQsgDEEYaiAEEFsLISsCfgJAIAwoAgQgK6dqIgQgDigCCCIFSQRAIAwgDigCBCAEQQN0aikCACIrNwIEIAgoAgwhEiAIKAIUIQUgDC0AFSEEAkAgDCgCKCAMLQAsakEATgRAIAUgEkYEQCAKQbz6wQAQwgELIAgoAhAgBWogBDoAACAIIAVBAWo2AhQgDC0AFCIEDQFCAAwECyAFIBJHDQdB3PrBAAwGCyAMLQAsIgUgBEkNASAMIAUgBGsiBToALEJ/IASthkJ/hSAMKQMgIAVBP3GtiIMMAgsgBCAFQbyAwgAQrQIACyAMQRhqIAQQWwshMyAMKAIQIDOnaiIFIAsoAggiBE8NBSArQiiIpyEEIAwgCygCBCAFQQN0aikCADcCECAIKAIUIQUgDCgCKCAMLQAsakEASA0BIAVB/wFNDQALIAVBCHYhCEGLgICAeCESQQAhDgwLCyAFIAooAgBHDQFBzPrBAAsQwgELIAgoAhAgBWogBDoAACAIIAVBAWoiBDYCFAsgCEEANgIgQQAhDiAEIAgoAhhPBEAgCEEYakEAIARBAWpBAUEBEJIBIAgoAiAhDgsgCCgCHCIKIA5qIQVBACELIAQEfyAFQQAgBBBaGiAKIAQgDmoiDmoFIAULQQA6AAAgCCAOQQFqNgIgQYyAgIB4IRICQCAIKAIUIhdFDQAgHUEDdiAdQQdxQQBHaiEdIAgoAhAhCkEAIQ5BACEFAkACQANAIAogDmotAAAiBEELSw0BQQEgBEEBa3RBACAEGyAFaiEFIBcgDkEBaiIORw0ACyAFDQEMAgtBkYCAgHghEgwBC0EBQSAgBWciC2siCnQiDiAFayIEaUEBRgRAIAUgDkYNAyAKQQFqIQ4gBGchEkEAIQQCQAJAAkADQCAEIAgoAhQiGk8NASAEIAgoAiAiGk8NAyAIKAIcIARqIA4gCCgCECAEai0AACIaa0EAIBobOgAAIARBAWoiBCAXRw0ACyAIKAIUIgQgCCgCICIOSQ0BIAQgDkHs+sEAEK0CAAsgBCAaQYj9wQAQrQIACyAIKAIcIARqIAogEmpBH2s6AAAgCCAKOgBkIAVB/w9NDQZBkoCAgHghEkEAIQsgCiEEDAILIAQgGkGY/cEAEK0CAAsgBEGAfnEhC0GNgICAeCESCyAZIBI2AgAgGSALIARB/wFxcjYCBAwICyAFIARBvIDCABCtAgALQfz3wQBBF0H8+MEAEO0CAAsgBEEBaiIFQQh2IQhBioCAgHghEkEAIQ4MBAsgCEEANgIsIAhBJGpBISALayIXEKMBAkACQAJAIAgoAiAiDgRAIAgoAhwhBANAIAgoAiwiCyAELQAAIgVNDQIgCCgCKCAFQQJ0aiIFIAUoAgBBAWo2AgAgBEEBaiEEIA5BAWsiDg0ACwsgCEEBIAgtAGR0Ig4gCCgCCCIESwR/IA4gBCIFayISIAgoAgAgBGtLBEAgCCAEIBJBAUECEJIBIAgoAgghBQsgCCgCBCAFQQF0aiELIBJBAk8EQCAEQX9zIA5qIg5BB3EhBCASQQJrQQdPBEAgDkF4cSEOA0AgC0EAOgAPIAtBADoADiALQQA6AA0gC0EAOgAMIAtBADoACyALQQA6AAogC0EAOgAJIAtBADoACCALQQA6AAcgC0EAOgAGIAtBADoABSALQQA6AAQgC0EAOgADIAtBADoAAiALQQA6AAEgC0EAOgAAIAtBEGohCyAOQQhrIg4NAAsLIAQEQANAIAtBADoAASALQQA6AAAgC0ECaiELIARBAWsiBA0ACwsgBSASakEBayEFCyALQQA6AAEgC0EAOgAAIAVBAWoFIA4LNgIIIAhBADYCOCAIQTBqIBcQowEgCCgCOCIEIApNBEAgCiAEQaz7wQAQrQIACyAIKAI0IApBAnRqQQA2AgAgCCgCOCIOQf4BcUUNAgwBCyAFIAtB+PzBABCtAgALAkACQAJAA0AgCCgCOCIFIA5BAWsiDkH/AXEiBE0NAiAIKAIsIgsgBE0NASAFIARBAWsiC0sEQCAIKAI0IgUgC0ECdGogBEECdCILIAgoAihqKAIAIAogDmt0IAUgC2ooAgBqNgIAIARBAU0NBAwBCwsgCyAFQej8wQAQrQIACyAEIAtB2PzBABCtAgALIAQgBUHI/MEAEK0CAAsgCCgCOCEOCyAOBEAgCCgCCCIEIAgoAjQiBSgCAEYEQCAIKAIgIhcEQEEAIQsDQAJAAkACQCAIKAIgIgQgC0sEQCAIKAIcIAtqLQAAIhJFDQMgCCgCOCIEIBJNDQEgCCgCNCASQQJ0aiIEIAQoAgAiBEEBIAogEmt0IgVqNgIAIARBAXQhDgNAIAQgCCgCCCIaTw0DIAgoAgQgDmogCzoAACAIKAIIIhogBEsEQCAIKAIEIA5qQQFqIBI6AAAgDkECaiEOIARBAWohBCAFQQFrIgVFDQUMAQsLIAQgGkG4/MEAEK0CAAsgCyAEQYj8wQAQrQIACyASIARBmPzBABCtAgALIAQgGkGo/MEAEK0CAAsgC0EBaiILIBdHDQALCyAZQZOAgIB4NgIAIBkgHTYCBAwGCyAMQQI2AhwgDEHo+8EANgIYIAxCAjcCJCAMIAQ2AgwgDCAMQQxqrUKAgICAEIQ3AzggDCAFrUKAgICAEIQ3AzAgDCAMQTBqNgIgIAxBGGpB+PvBABCkAwALQQBBAEG8+8EAEK0CAAsgDCgCNCIEQYB+cSEOIAwvADEgDC0AM0EQdHIMAQsgDCgCNCIEQYB+cSEOIAwvADEgDC0AM0EQdHILIQggDDUCOCErQYaAgIB4IRILIBkgKzcCDCAZIBI2AgAgGSAOIARB/wFxcjYCCCAZIAVB/wFxIAhBCHRyNgIECyAMQUBrJAAgCSgCHCEFIAkoAhgiCEGTgICAeEcNAyAFIBFLDQEMBgtBACEFIA0tAGQNBUGYgICAeCEIDAYLIAUgEUHo7MEAEKoEAAsgBgRAIBAgECgCCCIGIAYgBSgCCCIEaiIFSQR/IBwtAAAhBSAEIBAoAgAgBmtLBEAgECAGIARBAUEBEJIBIBAoAgghBgsgECgCBCILIAZqIQogBEECTwR/IAogBSAEQQFrIgQQWhogCyAEIAZqIgZqBSAKCyAFOgAAIAZBAWoFIAULNgIIIBRCnoCAgBg3AgAMBgtBAEEAQfTrwQAQrQIACyAJKQIkISogCSgCICEGDAMLIAQgBkHk68EAEKsEAAsgESAGQYTswQAQqwQACyAFIBxqIQQgESAFayEFAkACQAJAAkACQAJAAkACQAJAIB5BAWsOBAECAgACCyAFQQZJBEBBmYCAgHghCAwJCyAFQQZrIgUgBC8AACIMIAQtAAJqIAQtAANBCHRqIg4gBC0ABGogBC0ABUEIdGoiBkkEQEGagICAeCEIDAkLIAlCADcDCCAJIA02AhBBACEIIAlBADoALCAJQgA3AyAgCSAEQQZqIhI2AhggCSAMNgIcIAkgDEEDdDYCKCAGIA5rIRlBACEKA0AgCkEITwJ+IAhB/wFxRQRAIAlBGGpBARBbDAELIAkgCEEBayIEOgAsIAkpAyAgBEE/ca2IQgGDCyIqQgFRckUEQCAKQQFqIQogCS0ALCEIDAELCyAKQQdLBEAgCkEBaiEFQZuAgIB4IQgMCQsgCUEIaiAJQRhqELACIAkoAiggCS0ALGoiCkEAIA0tAGRrIgRMDQYgCSkDCCEqIAkoAhAhCwNAIAsoAggiBCAqpyIKTQ0EIApBAXQiCCALKAIEai0AACEXIBAoAggiBCAQKAIARgRAIBBBlOzBABDCAQsgECgCBCAEaiAXOgAAIBAgBEEBajYCCAJAAkAgCiALKAIIIgRJBEAgCS0ALCEKIAsoAgQgCGotAAEiCA0BQgAhKwwCCyAKIARBnPnBABCtAgALIAggCkH/AXFLBEAgCUEYaiAIEFshKyALKAIIIQQgCS0ALCEKDAELIAkgCiAIayIKOgAsQn8gCK2GQn+FIAkpAyAgCkE/ca2IgyErCyAErUIBfSAqIAithoMgK4QhKiAJKAIoIApB/wFxaiIKQQAgDS0AZGsiBEoNAAsMBgsgCUIANwMIIAkgDTYCEEEAIQYgCUEAOgAsIAlCADcDICAJIAQ2AhggCSAFNgIcIAkgBUEDdDYCKEEAIQUMAQtBtOzBAEEiQdjswQAQ7QIACwNAIAVBCE8CfiAGQf8BcUUEQCAJQRhqQQEQWwwBCyAJIAZBAWsiBjoALCAJKQMgIAZBP3GtiEIBgwsiKkIBUXJFBEAgBUEBaiEFIAktACwhBgwBCwsgBUEHSw0CIAlBCGogCUEYahCwAiAJKAIoIAktACxqQQAgDS0AZGtMDQQgCSkDCCEqIAkoAhAhBANAIAQoAggiBSAqpyIGTQ0CIAZBAXQiCiAEKAIEai0AACELIBAoAggiBSAQKAIARgRAIBBBpOzBABDCAQsgECgCBCAFaiALOgAAIBAgBUEBajYCCAJAAkAgBiAEKAIIIghJBEAgCS0ALCEFIAQoAgQgCmotAAEiBg0BQgAhKwwCCyAGIAhBnPnBABCtAgALIAYgBUH/AXFLBEAgCUEYaiAGEFshKyAEKAIIIQggCS0ALCEFDAELIAkgBSAGayIFOgAsQn8gBq2GQn+FIAkpAyAgBUE/ca2IgyErCyAIrUIBfSAqIAathoMgK4QhKiAJKAIoIAVB/wFxakEAIA0tAGRrSg0ACwwECyAKIARBjPnBABCtAgALIAYgBUGM+cEAEK0CAAsgBUEBaiEFQZuAgIB4IQgMAgtBnICAgHghCCAEIApHBEAgBCEGIAohBQwCCyAGIBJqIQogBSAGayEEIAlCADcDCCAJIA02AhBBACEGIAlBADoALCAJQgA3AyAgCSAMIBJqNgIYIAkgDiAMayIFNgIcIAkgBUEDdDYCKEEAIQUDQCAFQQdLAn4gBkH/AXEEQCAJIAZBAWsiBjoALCAJKQMgIAZBP3GtiEIBgwwBCyAJQRhqQQEQWwsiKkIBUXJFBEAgBUEBaiEFIAktACwhBgwBCwsgBUEHSwRAIAVBAWohBUGbgICAeCEIDAILIA4gEmohCyAJQQhqIAlBGGoQsAICQAJAAkAgCSgCKCAJLQAsaiIFQQAgDS0AZGsiBkoEQANAIAkoAhAiBSgCCCIMIAkoAggiBk0NAiAFKAIEIAZBAXRqLQAAIQUgECgCCCIGIBAoAgBGBEAgEEGU7MEAEMIBCyAQKAIEIAZqIAU6AAAgECAGQQFqNgIIIAlBCGogCUEYahDKASAJKAIoIAktACxqIgVBACANLQBkayIGSg0ACwsCQCAFIAZHDQAgCUIANwMIIAkgDTYCEEEAIQYgCUEAOgAsIAlCADcDICAJIAs2AhggCSAZNgIcIAkgGUEDdDYCKEEAIQUDQCAFQQdLAn4gBkH/AXEEQCAJIAZBAWsiBjoALCAJKQMgIAZBP3GtiEIBgwwBCyAJQRhqQQEQWwsiKkIBUXJFBEAgBUEBaiEFIAktACwhBgwBCwsgBUEHSwRAIAVBAWohBUGbgICAeCEIDAYLIAlBCGogCUEYahCwAiAJKAIoIAktACxqIgVBACANLQBkayIGSgRAA0AgCSgCECIFKAIIIgsgCSgCCCIGTQ0EIAUoAgQgBkEBdGotAAAhBSAQKAIIIgYgECgCAEYEQCAQQZTswQAQwgELIBAoAgQgBmogBToAACAQIAZBAWo2AgggCUEIaiAJQRhqEMoBIAkoAiggCS0ALGoiBUEAIA0tAGRrIgZKDQALCyAFIAZHDQAgCUIANwMIIAkgDTYCEEEAIQYgCUEAOgAsIAlCADcDICAJIAo2AhggCSAENgIcIAkgBEEDdDYCKEEAIQUDQCAFQQdLAn4gBkH/AXEEQCAJIAZBAWsiBjoALCAJKQMgIAZBP3GtiEIBgwwBCyAJQRhqQQEQWwsiKkIBUXJFBEAgBUEBaiEFIAktACwhBgwBCwsgBUEHSwRAIAVBAWohBUGbgICAeCEIDAYLIAlBCGogCUEYahCwAiAJKAIoIAktACxqIgVBACANLQBkayIGSgRAA0AgCSgCECIGKAIIIgUgCSgCCCIETQ0FIAYoAgQgBEEBdGotAAAhBiAQKAIIIgQgECgCAEYEQCAQQZTswQAQwgELIBAoAgQgBGogBjoAACAQIARBAWo2AgggCUEIaiAJQRhqEMoBIAkoAiggCS0ALGoiBUEAIA0tAGRrIgZKDQALCyAFIAZGDQQLDAQLIAYgDEGM+cEAEK0CAAsgBiALQYz5wQAQrQIACyAEIAVBjPnBABCtAgALIBYgECgCCCIFRwRAQZ2AgIB4IQggFiEGDAELIBRBnoCAgHg2AgAgFCARNgIEDAELIBQgKjcCDCAUIAY2AgggFCAFNgIEIBQgCDYCAAsgCUEwaiQAIA8oAhAhBCAPKAIMIgZBnoCAgHhHDQ8gDSgC8AIiBiAPKAKggAhHDRAgBCAHRw0RIA9BADoArIAIIA9BADYCqIAIIA9BqIAIaiEKIAcgHGohCwJAIB8gB2siBkUEQCAUQQE6AAggFEEANgIEIBRBAToAAAwBCwJAAkACQAJAIAstAAAiBUH/AUcEQCAFDQEgFEEBOgABIApBADYCACAUQQA6AAAMBQtBAyEEIAZBA00EQCAUQQQ6AAgMBAsgCy8AAUGA/gFqIQVBBCEHDAELAkAgBcBBAE4EQEEBIQQgBkEBRw0BIBRBAjoACCAUQQE2AgQgFEEBOgAADAULQQMhByAGQQNJDQIgCy0AASAFQQh0ckGAgAJrIQVBAiEEDAELQQIhBwsgCiAFNgIAIApBAToABCAUIAc6AAEgCiAEIAtqLQAAOgAFIBRBADoAAAwCCyAUQQM6AAgLIBQgBjYCBCAUQQE6AAALIA8tAAwNEiAGIA8tAA0iBEkNEyAVICFHDRQgBiAEayERIA8oAqiACEUEQCAEIAZGBEAgDUHoAWogDSgC7AIgDSgC8AIQpwEgDUEANgL8AgwMCyAPQYyAgIB4NgKMgAggDyARQQN0NgKQgAhBBSEHDBkLIA9BDGohCiAEIAtqIRYgDUHoAGohBSANQfQCaiELQQAhB0EAIQZCACEqIwBB8ABrIgQkAAJAAkACQAJAAkACQCAPQaiACGoiCS0ABEUEQEGNgICAeCEIDAELAkACQAJAAkACQAJAAkACQAJAAkACQCAJLQAFIhBBwAFxQQZ2QQFrDgMBAgkAC0GF5cIALQAAGkGQAUEEEPUDIgZFDQMgBkHo78EAQZABEDshBkGF5cIALQAAGkGQAUEEEPUDIgdFDQQgByAGQZABEDshByAFKAI0IggEQCAFKAI4IAhBAnRBBBCnBAsgBUEGOgBNIAVBJDYCPCAFIAc2AjggBUEkNgI0IARB0ABqIAVBKGoQKSAEKAJQIghBhYCAgHhHDQIgBkGQAUEEEKcEQQAhBiAFQQA6AHoMCAsgEUUEQEGOgICAeCEIDAoLIBYtAAAiB0EjTQ0FDAgLIARB0ABqIAVBKGogFiARQQkQLSAEKAJUIQcgBCgCUCIIQYWAgIB4Rg0DIARBCGogBEHgAGooAgA2AgAgBCAEKQJYNwMADAgLIARBCGogBEHgAGooAgA2AgAgBCAEKQJYNwMAIAQoAlQhByAGQZABQQQQpwQMBwtBBEGQAUHc6sEAENcDAAtBBEGQAUGQ/8EAENcDAAsgBUEAOgB6DAELIAUgBzoAe0EBIQcgBUEBOgB6CyAHIBFNBEAgByEGDAELIAcgEUHQ88EAEKoEAAsgBiAWaiEHAkACQAJAAkACQAJAAkACQAJAIBBBBHZBA3FBAWsOAwEECAALQYXlwgAtAAAaQfQAQQQQ9QMiB0UNBCAHQfjwwQBB9AAQOyEMQYXlwgAtAAAaQfQAQQQQ9QMiB0UNBSAHIAxB9AAQOyEHIAUoAgwiCARAIAUoAhAgCEECdEEEEKcECyAFQQU6ACUgBUEdNgIUIAUgBzYCECAFQR02AgwgBEHQAGogBRApIAQoAlAiCEGFgICAeEcNASAMQfQAQQQQpwQgBUEAOgB4DAcLIAYgEUcNAUGPgICAeCEIDAgLIARBCGogBEHgAGooAgA2AgAgBCAEKQJYNwMAIAQoAlQhByAMQfQAQQQQpwQMBwsgBy0AACIHQR9LDQUgBSAHOgB5IAVBAToAeCAGQQFqIQYMBAsgBEHQAGogBSAHIBEgBmtBCBAtIAQoAlQhByAEKAJQIghBhYCAgHhGDQIgBEEIaiAEQeAAaigCADYCACAEIAQpAlg3AwAMBQtBBEH0AEHc6sEAENcDAAtBBEH0AEGQ/8EAENcDAAsgBUEAOgB4IAYgB2ohBgsCQAJAAkACQAJAAkACQAJAAkAgBiARTQRAIAYgFmohDCAQQQJ2QQNxQQFrDgMCBQYBCyAGIBFBwPPBABCqBAALQYXlwgAtAAAaQdQBQQQQ9QMiB0UNBiAHQezxwQBB1AEQOyEMQYXlwgAtAAAaQdQBQQQQ9QMiB0UNBSAHIAxB1AEQOyEHIAUoAlwiCARAIAUoAmAgCEECdEEEEKcECyAFQQY6AHUgBUE1NgJkIAUgBzYCYCAFQTU2AlwgBEHQAGogBUHQAGoQKSAEKAJQIghBhYCAgHhHDQEgDEHUAUEEEKcEIAVBADoAfAwEC0GQgICAeCEIIAYgEUcNAQwICyAEQQhqIARB4ABqKAIANgIAIAQgBCkCWDcDACAEKAJUIQcgDEHUAUEEEKcEDAcLIAwtAAAiDEE0Sw0GIAUgDDoAfSAFQQE6AHwgBkEBaiEGDAELIARB0ABqIAVB0ABqIAwgESAGa0EJEC0gBCgCVCEHIAQoAlAiCEGFgICAeEcEQCAEQQhqIARB4ABqKAIANgIAIAQgBCkCWDcDAAwGCyAFQQA6AHwgBiAHaiEGCwJAIAYgEU0EQEEAIQggBEEAOgAkIARCADcDGCAEIAYgFmo2AhAgBCARIAZrIgY2AhQgBCAGQQN0NgIgQQAhBwwBCyAGIBFB8O3BABCqBAALA0AgB0EITwJ+IAhB/wFxRQRAIARBEGpBARBbDAELIAQgCEEBayIGOgAkIAQpAxggBkE/ca2IQgGDC0IBUXJFBEAgB0EBaiEHIAQtACQhCAwBCwsgB0EHTQRAIAUtAHoiEA0DIAUtAHxBAUYNAyAFLQB4DQMgBSgCMARAIAUoAiwpAgAhKgsgCSgCACEJIAQgBUEoajYCKCAEICo3AiwgBSgCWARAIAUoAlQpAgAhLAsgBCAFQdAAajYCNCAEICw3AjggBSgCCAR+IAUoAgQpAgAFQgALISogBCAFNgJAIAQgKjcCRCAEQdAAaiIGIARBKGogBEEQaiIFEOgBIAQtAFAiB0EDRgRAIAYgBEFAayAFEOgBIAQtAFAiB0EDRgRAIAYgBEE0aiAFEOgBIAQtAFAiBkEDRgRAIAtBADYCCCAJIAsoAgBLBEAgC0EAIAlBBEEMEJIBC0F/IQUDQAJ/AkACQCAFQQFqIgUgCUYEQCAEKAIgIAQtACRqIgZBAEoNASAKQZGAgIB4NgIADA4LIAQtAD0hByAELQBJIQYgBCAELQAxIgw6AE8gDEEQSSIQDQEgDEEQa0H/AXEiCEEUTw0OIAhBAnRB9PPBAGooAgAhDCAIQeDzwQBqLQAADAILIAogBjYCBCAKQYyAgIB4NgIADAwLQQALIQggBCAHOgBPAn8gB0EgSSIORQRAIAdBIGtB/wFxIgdBFU8NDiAHQQJ0Qdz0wQBqKAIAIRYgB0HE9MEAai0AAAwBCyAHQQNqQf8BcSEWQQALIRECfgJ+AkAgBkEfTQRAIAYgCGogEWoiFUH/AXEiFEUEQEIAISxCACEqQgAMBAsgBq0hKiAUQThNBEAgFCAELQAkIgdLBEAgBEHQAGogBEEQaiAGIBEgCCAVEDQgBCkDWCEsIAQpA1AhKiAEKQNgDAULQgAhLCAGBH4gBCAHIAZrIgc6ACRCfyAqhkJ/hSAEKQMYIAdBP3GtiIMFQgALISogDkUEQCAEIAcgEWsiBzoAJEJ/IBGthkJ/hSAEKQMYIAdBP3GtiIMhLAtCACAQDQQaIAQgByAIayIHOgAkQn8gCK2GQn+FIAQpAxggB0E/ca2IgwwEC0IAISxCACAGRQ0CGiAELQAkIgcgBkkNASAEIAcgBmsiBzoAJEJ/ICqGQn+FIAQpAxggB0E/ca2IgwwCCyAKIAY6AAQgCkGJgICAeDYCAAwNCyAEQRBqIAYQWwshKgJAIA4NACAELQAkIgcgEUH/AXFJBEAgBEEQaiAREFshLAwBCyAEIAcgEWsiBzoAJEJ/IBGthkJ/hSAEKQMYIAdBP3GtiIMhLAtCACAQDQAaIAQtACQiByAIQf8BcUkEQCAEQRBqIAgQWwwBCyAEIAcgCGsiBzoAJEJ/IAithkJ/hSAEKQMYIAdBP3GtiIMLISsgKqdBASAGdGoiCEUEQCAKQYqAgIB4NgIADAsLIAsoAggiBiALKAIARgRAIAtBkO7BABCyAQsgCygCBCAGQQxsaiIHIAg2AgggByAWICynajYCBCAHIAwgK6dqNgIAIAsgBkEBaiIGNgIIIAYgCUkEQCAEQShqIARBEGoiBhDsASAEQTRqIAYQ7AEgBEFAayAGEOwBCyAEKAIgIAQtACRqQQBODQALIApBi4CAgHg2AgAMCQsgCiAEKQBRNwAFIApBDGogBEHYAGooAAA2AAAgCiAGOgAEIApBhoCAgHg2AgAMCAsgCiAEKQBRNwAFIApBDGogBEHYAGooAAA2AAAgCiAHOgAEIApBhoCAgHg2AgAMBwsgCiAEKQBRNwAFIApBDGogBEHYAGooAAA2AAAgCiAHOgAEIApBhoCAgHg2AgAMBgsgCiAHQQFqNgIEIApBiICAgHg2AgAMBQtBBEHUAUGQ/8EAENcDAAtBBEHUAUHc6sEAENcDAAsgBSgCMARAIAUoAiwpAgAhKgsgCSgCACEJIAQgBUEoajYCKCAEICo3AiwgBSgCWARAIAUoAlQpAgAhLAsgBCAFQdAAajYCNCAEICw3AjggBSgCCAR+IAUoAgQpAgAFQgALISogBCAFNgJAIAQgKjcCRAJAIBANACAEQdAAaiAEQShqIARBEGoQ6AEgBC0AUCIGQQNGDQAgCiAEKQBRNwAFIApBDGogBEHYAGooAAA2AAAgCiAGOgAEIApBhoCAgHg2AgAMAwsCQCAFLQB4Ig4NACAEQdAAaiAEQUBrIARBEGoQ6AEgBC0AUCIGQQNGDQAgCiAEKQBRNwAFIApBDGogBEHYAGooAAA2AAAgCiAGOgAEIApBhoCAgHg2AgAMAwsCQCAFLQB8IhQNACAEQdAAaiAEQTRqIARBEGoQ6AEgBC0AUCIGQQNGDQAgCiAEKQBRNwAFIApBDGogBEHYAGooAAA2AAAgCiAGOgAEIApBhoCAgHg2AgAMAwsgC0EANgIIIAkgCygCAEsEQCALQQAgCUEEQQwQkgELIAUtAHkhHyAFLQB9IR4gBS0AeyEaQX8hFiAEKAJAIRUgBCgCNCESIAQoAighGQNAAn8CQAJAIBZBAWoiFiAJRgRAIAQoAiAgBC0AJGoiBkEASg0BIApBkYCAgHg2AgAMBwsgBC0APSEHIAQtAEkhESAEIBogBC0AMSAQGyIFOgBPIAVB/wFxIgZBEEkiHA0BIAVBEGtB/wFxIgVBFE8NByAFQQJ0QfTzwQBqKAIAIQYgBUHg88EAai0AAAwCCyAKIAY2AgQgCkGMgICAeDYCAAwFC0EACyEFIAQgHiAHIBQbIgc6AE8CfyAHQf8BcUEgSSIXRQRAIAdBIGtB/wFxIgdBFU8NByAHQcT0wQBqLQAAIQggB0ECdEHc9MEAaigCAAwBC0EAIQggB0EDakH/AXELISgCfgJ+AkAgHyARIA4bIhFB/wFxIgxBH00EQCAFIBFqIAhqIilB/wFxIh1FBEBCACEsQgAhKkIADAQLIB1BOE0EQCAdIAQtACQiB0sEQCAEQdAAaiAEQRBqIBEgCCAFICkQNCAEKQNYISwgBCkDUCEqIAQpA2AMBQtCACEsIAwEfiAEIAcgEWsiBzoAJEJ/IBGthkJ/hSAEKQMYIAdBP3GtiIMFQgALISogF0UEQCAEIAcgCGsiBzoAJEJ/IAithkJ/hSAEKQMYIAdBP3GtiIMhLAtCACAcDQQaIAQgByAFayIHOgAkQn8gBa2GQn+FIAQpAxggB0E/ca2IgwwEC0IAISxCACAMRQ0CGiAELQAkIgcgDEkNASAEIAcgEWsiBzoAJEJ/IBGthkJ/hSAEKQMYIAdBP3GtiIMMAgsgCiAROgAEIApBiYCAgHg2AgAMBgsgBEEQaiAREFsLISoCQCAXDQAgBC0AJCIHIAhB/wFxSQRAIARBEGogCBBbISwMAQsgBCAHIAhrIgc6ACRCfyAIrYZCf4UgBCkDGCAHQT9xrYiDISwLQgAgHA0AGiAELQAkIgcgBUH/AXFJBEAgBEEQaiAFEFsMAQsgBCAHIAVrIgc6ACRCfyAFrYZCf4UgBCkDGCAHQT9xrYiDCyErICqnQQEgDHRqIghFBEAgCkGKgICAeDYCAAwECyALKAIIIgUgCygCAEYEQCALQYDuwQAQsgELIAsoAgQgBUEMbGoiByAINgIIIAcgKCAsp2o2AgQgByAGICunajYCACALIAVBAWoiBjYCCAJAIAYgCU8NACAQRQRAAn5CACAELQAwIgZFDQAaIAYgBC0AJCIFTQRAIAQgBSAGayIFOgAkQn8gBq2GQn+FIAQpAxggBUE/ca2IgwwBCyAEQRBqIAYQWwshKiAEKAIsICqnaiIIIBkoAggiBU8NCCAEIBkoAgQgCEEDdGopAgA3AiwLIBRFBEACfkIAIAQtADwiBkUNABogBiAELQAkIgVNBEAgBCAFIAZrIgU6ACRCfyAGrYZCf4UgBCkDGCAFQT9xrYiDDAELIARBEGogBhBbCyEqIAQoAjggKqdqIgggEigCCCIFTw0IIAQgEigCBCAIQQN0aikCADcCOAsgDg0AAn5CACAELQBIIgZFDQAaIAYgBC0AJCIFTQRAIAQgBSAGayIFOgAkQn8gBq2GQn+FIAQpAxggBUE/ca2IgwwBCyAEQRBqIAYQWwshKiAEKAJEICqnaiIIIBUoAggiBU8NByAEIBUoAgQgCEEDdGopAgA3AkQLIAQoAiAgBC0AJGpBAE4NAAsgCkGLgICAeDYCAAwCC0GQgICAeCEICyAKIAc2AgQgCiAINgIAIAogBCkDADcCCCAKQRBqIARBCGooAgA2AgALIARB8ABqJAAMAwsgBEEBNgJUIARB7O7BADYCUCAEQgE3AlwgBCAEQc8Aaq1CgICAgIA5hDcDaCAEIARB6ABqNgJYIARB0ABqQfTuwQAQpAMACyAEQQE2AlQgBEHQ78EANgJQIARCATcCXCAEIARBzwBqrUKAgICAgDmENwNoIAQgBEHoAGo2AlggBEHQAGpB2O/BABCkAwALIAggBUG8gMIAEK0CAAsgDygCDCIEQZGAgIB4Rg0JIA8gDykCEDcCkIAIIA8gBDYCjIAIIA8pAhghLUEFIQcMGAtBpITBAEHbAEGAhcEAEO0CAAsgDyAFLQAAOgAMCyAEIAc2AgQgBCALNgIADBMLIARBADYCBCAEIAUgBmo2AgAMAQsgBEEANgIEIAQgBSAHajYCAEHw/8AAKQMAIi1C/wGDQgRRDRELIBhBADoADCAYIC03AgQgGEEJNgIADBMLQfD/wAApAwAiKkL/AYNCBFINDgsgIkEAOgAAIA9BDWogBUH/AxBaGiAHQYAETwRAIAdBCXYhBiANQegBaiEEA0AgBCAPQQxqQYAEEKcBIAZBAWsiBg0ACwsgDUHoAWogD0EMaiAHQf8DcRCnASAYQQo2AgAgGEIBNwMIDBELIBhBCDYCAAwQCyAPQQxqIQxBACEGQQAhB0EAIQhBACEWIwBBMGsiESQAIA0oAuwBIQsgDSgC8AEhHCANKAL0ASEKIBFBADYCACANQegBaiEUIAshBSAKIQQCQCANKAL8AiIdBEAgDUGIA2ohHyANQYwDaiEQQQghEgNAAkACQAJAAkACQAJAAkACfwJAIA0oAvwCIgQgCEsEQCANKAL4AiASaiIFKAIAIQQgBUEEaygCACEZIAVBCGsoAgAiCQ0HIARBAWsiB0ECTw0BIBAgBEECdGooAgAMAgsgCCAEQaDnwQAQrQIACyAEQQNGBEAgECgCACIEQQFrIQUMAgsgBEEDawshBQJAIAcOAgIDAAsgECgCACEECyANIA0oApADNgKUAwwCCyAQKAIAIQQMAQsgDSANKAKQAzYClAMgDSgCjAMhBAsgBiEHDAELAkAgBiAJaiIHIA0oAvACIgVNBEAgBiAHTQ0BIAYgB0Gw58EAEKwEAAsgDCAFNgIIIAwgBzYCBCAMQQI2AgAMBQsgDSgC7AIhFyANKALwASIOIA0oAuwBIhUgDSgC9AEiBSAOSSIeGyAFa0EAIA4gHhtqIh5BAWsiGkEAIBogHk0bIh4gCUkEQCAUIAkgHmsQgAEgDSgC7AEhFSANKALwASEOIA0oAvQBIQULIAYgF2ohFyAOIBUgBSAOSRsiHiAFayIGIAkgBiAJSSIaGyEGIBQoAgAhDiAFIB5HBEAgBSAOaiAXIAYQOxoLIBoEQCAOIAYgF2ogCSAGaxA7GgsCQCAVBEAgDSAFIAlqIBVwNgL0ASANIA0pA/gBIAmtfDcD+AEgBEEBayIGQQNPBEAgBEEDayEFDAILIB8gBEECdGooAgAhBQwBC0Gw6cEAEJQDAAsCQAJAIAYOAgMBAAsgDSANKAKQAzYClAMgDSgCjAMhBAwBCyAQKAIAIQQLIA0gBTYCjAMgDSAENgKQAwsgBUUEQCAMQQM2AgAMAwsCQCAZRQ0AIBFBCGogFCAFIBkQsQEgESgCCCIEQQJGDQAgDCARKQIMNwIEIAwgBDYCAAwDCyARIAkgFmogGWoiFjYCACASQQxqIRIgByEGIB0gCEEBaiIIRw0ACyANKALsASEFIA0oAvQBIQQLAkAgDSgC8AIiBiAHTQ0AIA0oAuwCIAdqIQggBiAHayIHIA0oAvABIgYgBSAEIAZJIgkbIARrQQAgBiAJG2oiCUEBayIQQQAgCSAQTxsiCUsEQCANQegBaiAHIAlrEIABIA0oAuwBIQUgDSgC8AEhBiANKAL0ASEECyAGIAUgBCAGSRsiECAEayIGIAcgBiAHSSIOGyEGIBQoAgAhCSAEIBBHBEAgBCAJaiAIIAYQOxoLIA4EQCAJIAYgCGogByAGaxA7GgsgBQRAIA0gBCAHaiAFcCIENgL0ASANIA0pA/gBIAetfDcD+AEgESAHIBZqIhY2AgAgDSgC7AEhBQwBC0Gw6cEAEJQDAAsgESAEIBxqIA0oAvABIgYgCiALQQAgCiAcSRtqamsgBUEAIAQgBkkbaiIENgIEIAQgFkcEQCARQQI2AgwgEUGM5sEANgIIIBFCAjcCFCARIBFBBGqtQoCAgIAQhDcDKCARIBGtQoCAgIAQhDcDICARIBFBIGo2AhAgEUEIakGQ58EAEKQDAAsgDEEENgIACyARQTBqJAAgDygCDCIEQQRHDQ0LIBggIa03AwggIkEAOgAAIBhBCjYCAAwOCyAPQZOACGogLUI4iDwAACAPQZGACGogLUIoiD0AACAPIAQ6AIyACCAPIC1CCIg+AI2ACAwMCyAPQZaACGogD0EWai8BADsBACAPIA8pAQ43AY6ACCAPIAQ6AI2ACCAPIAU6AIyACEEDIQcMCwsgBCAVQZSEwQAQqgQACyAPIB82ApCACCAPIAc2AoyACEEBIQcMCQsgDyAPKAIUNgKUgAggDyAENgKQgAggDyAGNgKMgAggDykCGCEtQQIhBwwICyAPQQI2AhAgD0G4gcEANgIMIA9CAjcCGCAPIAY2AryACCAPIA9BoIAIaq1CgICAgBCENwOwgAggDyAPQbyACGqtQoCAgIAQhDcDqIAIIA8gD0GogAhqNgIUIA9BDGpByIHBABCkAwALQdiBwQBB0wBBrILBABDtAgALIA8oAhAhBCAPIA8tABQ6AJCACCAPIAQ2AoyACEEEIQcMBQsgBCAGQYSEwQAQqgQAC0G8gsEAQbYBQfSDwQAQ7QIACyAYQQE6AAwgGCAqNwIEIBhBCTYCAAwDCyANQegBaiAPQQxqIAYQpwEgGCAKrTcDCCAiQQA6AAAgGEEKNgIADAILIA8gDykCEDcCkIAIIA8gBDYCjIAIQQYhBwsgGCAHNgIAIBggDykCjIAINwIEIBggLTcDECAYQQxqIA9BlIAIaigCADYCAAsgD0HAgAhqJAAgEygCSCIEQQpHDQMgASABKQPAAyATKQNQfDcDwAMgASABKALIA0EBajYCyAMCQCATLQB5BEAgIEEBOgDMAyAgLQAQQQRxRQ0BIBMoAkQiBigCACEFAkACQCAGKAIEIgdBBE8EQCAGIAdBBGs2AgQgBiAFQQRqNgIAIAUoAAAhBAwBC0EAIQQgBkEANgIEIAYgBSAHajYCACAwQgRSDQELIAEgASkDwANCBHw3A8ADICAgBDYCHCAgQQE2AhgMAgsgEyAvNwMQQQYMBwsgJCAnIAEoApgCIgZqayABKAKUAiABKAKcAiIEIAQgBkkiBhtqIARBACAGG2ogJkkNAQsLIAEQvwEgA08NBSABKAIAQQJHDQEMBQsLIBMgLjcDEEEEDAILIBNBCGogE0HcAGooAgA2AgAgEyATKQJUNwMAIBMgEykCTDcCFCATIAQ2AhBBBQwBC0EHCyEBIBNBLGogE0EYaigCADYCACATQThqIBNBCGooAgA2AgAgEyABNgIgIBMgEykDEDcCJCATIBMpAwA3AzBBheXCAC0AABpBIEEIEPUDIgFFBEBBCEEgENMEAAsgASATQSBqIgIpAwA3AwAgAUEYaiACQRhqKQMANwMAIAFBEGogAkEQaikDADcDACABQQhqIAJBCGopAwA3AwBBheXCAC0AABpBDEEEEPUDIgJFBEBBBEEMENMEAAsgAkEoOgAIIAJBwNvAADYCBCACIAE2AgAgACACrUIghkIDhDcCAAwBCwJAIAEoAgBBAkYEQCAAQQQ6AAAgAEEANgIEDAELIAFBkAJqIQQgAS0AzANFBEACQAJAAkAgBCgCDCIGQQAgBiAEKAIIIgFJIgcbIgUgBCgCBCAGIAcbIgdqIAEgBCgCcCIGamtBACAHIAFrIg0gBWogBksbIgYgAyADIAZLGyIGRSABIAdGcg0AIAIgBCgCACIHIAFqIgIgDSAGIAYgDUsbIgEQOyENIARBGGoiCiACIAEQVyAGIAFrIgIgBSACIAVJGyICBEAgAyABayIDIAJJDQIgASANaiAHIAIQOxogCiAHIAIQVyABIAJqIgFFDQELIAQoAgQiAkUNAiAEIAIgBCgCDCIDIAMgBCgCCCIESSIFGyAEayADQQAgBRtqIgMgASABIANLGyAEaiACcDYCCAsgAEEEOgAAIAAgBjYCBAwDCyACIANBkPfBABCrBAALQcDpwQAQlAMACwJAAkACQAJAIAQoAgQgBCgCDCIGIAYgBCgCCCIBSSIHGyINIAFrIgUgBkEAIAcbIgdqIgYgAyADIAZLGyIGRSABIA1Gcg0AIAIgBCgCACINIAFqIgIgBSAGIAUgBkkbIgEQOyEFIARBGGoiCiACIAEQVyAGIAFrIgIgByACIAdJGyICBEAgAyABayIDIAJJDQIgASAFaiANIAIQOxogCiANIAIQVyABIAJqIgFFDQELIAQoAgQiAkUNAiAEIAIgBCgCDCIDIAMgBCgCCCIESSIFGyAEayADQQAgBRtqIgMgASABIANLGyAEaiACcDYCCAsgAEEEOgAAIAAgBjYCBAwCCyACIANBsPfBABCrBAALQcDpwQAQlAMACwsLIBNBgAFqJAALtwgBEH8CQAJAIAEoAhQiBCABLQAkQQFqTQRAIAFBADYCCCABAn9BASABLQAldCIHIAEoAgBLBEAgAUEAIAdBBEEIEJIBIAcgASgCCCICIAdPDQEaCyACIQQgByACayIGIAEoAgAgAmtLBEAgASACIAZBBEEIEJIBIAEoAgghBAsgASgCBCIFIARBA3RqIQMgBkECTwRAIANBACAHIAJBf3NqQQN0EFoaIAQgB2pBA3QgAkEDdGsgBWpBCGshAyAEIAZqQQFrIQQLIANCADcCACAEQQFqCyIGNgIIIAEoAhQiCA0BIAEoAgQhCyABKAIQIQogByEEDAILIAAgBDYCBCAAQYSAgIB4NgIADwsgAS0AJSEJIAEoAgQhCyABKAIQIgohAiAHIQRBACEDA0ACQCACKAIAQX9GBEAgBEEBayIEIAZPDQEgCyAEQQN0aiIFIAk6AAQgBUEANgIAIAUgAzoABQsgAkEEaiECIANBAWoiAyAIRw0BDAILCyAEIAZB6IHCABCtAgALIAdBA3YgB0EBdmpBA2ohDSAHQQFrIQ5BACEFQQAhAgNAIAUgCCAFIAhLGyEMIAogBUECdGohAwNAIAUgDEYEQEEAIQogAUEANgIgIAgEQEEAIQIgCCABKAIYSwRAIAFBGGpBACAIQQRBBBCSASABKAIgIQILIAEoAhwiBiACQQJ0aiEDIAhBAUcEfyADQQAgCEECdEEEaxBaGiACIAhqIgNBAWshAiAGIANBAnRqQQRrBSADC0EANgIAIAJBAWohCgsgASAKNgIgIAQEQCABKAIQIQ0gASgCHCEOIAEoAhQhCyABKAIEIQIgASgCCCEIIAEtACUhDEEAIQUDQAJAAkACQAJAAkACQCAFIAhHBEAgCyACQQVqLQAAIgFNDQEgASAKTw0DIA4gAUECdCIBaiIPKAIAIQYgASANaigCACIBDQJBACEDQQAhCQwGCyAIIAhB7IDCABCtAgALIAEgC0H8gMIAEK0CAAsgAUEBQQAgAWciA2t0QQEgA0Efc3QgAUYbIgMgB0sNAkEgIAcgA24iEGciCWsgCUEfcyADIAFrIgMgBksiERsiCUH/AXEgDEsNASAQIAZBAXQgAWogBiARGyADa2whAwwDCyABIApBjIHCABCtAgALQZyBwgBBKUHIgcIAEO0CAAtBoP/BAEEXQZyAwgAQ7QIACyAPIAZBAWo2AgAgAkEEaiAJOgAAIAIgAzYCACACQQhqIQIgBCAFQQFqIgVHDQALCyAAQYWAgIB4NgIADwsgBUEBaiEFIAMoAgAhCSADQQRqIQMgCUEATA0ACyAFQQFrIQxBACEDA0ACQCACIAZJBEAgA0EBaiEDIAsgAkEDdGogDDoABQNAIAIgDWogDnEiAiAETw0ACwwBCyACIAZB2IHCABCtAgALIAMgCUcNAAsMAAsAC9IHAQN/AkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAOCgAHBwECAwQHBwUHCwJAAkACQAJAAkACQCAALQAEDgcADAEMAgMEDAsgAC0ACEEDRw0LIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQQgASADIAIoAggQpwQMBAsgAC0ACEEDRw0KIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQMgASADIAIoAggQpwQMAwsgAC0ACEEDRw0JIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQIgASADIAIoAggQpwQMAgsgAC0ACEEDRw0IIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQEgASADIAIoAggQpwQMAQsgAC0ACEEDRw0HIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQAgASADIAIoAggQpwQLIABBDEEEEKcEDwsCQAJAIAAtAAQOAgcBAAsgACgCCCIBQfv///8HaiICQQ1NIAJBAkdxDQYgAUGEgICAeEoNBSABQYOAgIB4Rw0GDAULIAAoAggiAUGEgICAeEogAUGDgICAeEZyDQQMBQsgAC0ABEEDRw0EDAULAkACQEEDIAAoAgQiAUEHayICIAJBA08bQQJrDgIBAAULAkACQAJAIAEOBgAHAQcHAgcLIAAtAAhBA0cNBgwICyAAKAIIIgFB7f///wdqIgJBCk0gAkEDR3ENBSABRSABQfv///8H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wQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA4hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwICyACIAA2AgQgAkEBNgIMIAJB8KfBADYCCCACQgE3AhQgAiACQQRqrUKAgICAoDeENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAcLIAIgAEEEajYCBCACQQE2AgwgAkHwp8EANgIIIAJCATcCFCACIAJBBGqtQoCAgICgOIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMBgsgASgCHEHFusEAQTkgASgCICgCDBECAAwFCyACIABBBGo2AgQgAkECNgIMIAJBqLvBADYCCCACQgE3AhQgAiACQQRqrUKAgICA8DWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAQLIAIgAEEEajYCACACIABBCGo2AgQgAkEDNgIMIAJB6LvBADYCCCACQgI3AhQgAkKAgICA8DUiBCACrYQ3AyggAiAEIAJBBGqthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwDCyACIABBBGo2AgQgAkECNgIMIAJB8LzBADYCCCACQgE3AhQgAiACQQRqrUKAgICAsDiENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAILIAIgAEEEajYCACACIABBCGo2AgQgAkECNgIMIAJBsL3BADYCCCACQgI3AhQgAkKAgICAwDgiBCACQQRqrYQ3AyggAiAEIAKthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAjYCDCACQfS9wQA2AgggAkICNwIUIAJCgICAgPA1IgQgAkEEaq2ENwMoIAIgBCACrYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAuXBgEIfyMAQTBrIgEkAAJAAn8CQAJAAkAgACgCACIFBEAgACgCCCIEIAQgACgCBCIHIAQgB0sbayEIIAUhAwNAIAIgCGpFDQMgACACIARqQQFqNgIIIAJBAWohAiADIARqIANBAWohAy0AACIGQTBrQf8BcUEKSSAGQeEAa0H/AXFBBklyDQALIAZB3wBHDQIgAiAEakEBayEGAkAgBARA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IABBABAgDAELIAAQJwsgBEEQaiQAC5QDAQR/AkAgAkEQSQRAIAAhAwwBCwJAIABBACAAa0EDcSIFaiIEIABNDQAgACEDIAUEQCAFIQYDQCADIAE6AAAgA0EBaiEDIAZBAWsiBg0ACwsgBUEBa0EHSQ0AA0AgAyABOgAAIANBB2ogAToAACADQQZqIAE6AAAgA0EFaiABOgAAIANBBGogAToAACADQQNqIAE6AAAgA0ECaiABOgAAIANBAWogAToAACADQQhqIgMgBEcNAAsLIAQgAiAFayICQXxxaiIDIARLBEAgAUH/AXFBgYKECGwhBQNAIAQgBTYCACAEQQRqIgQgA0kNAAsLIAJBA3EhAgsCQCADIAIgA2oiBU8NACACQQdxIgQEQANAIAMgAToAACADQQFqIQMgBEEBayIEDQALCyACQQFrQQdJDQADQCADIAE6AAAgA0EHaiABOgAAIANBBmogAToAACADQQVqIAE6AAAgA0EEaiABOgAAIANBA2ogAToAACADQQJqIAE6AAAgA0EBaiABOgAAIANBCGoiAyAFRw0ACwsgAAudAwIGfwF+QTggAUH/AXEiASABQThPGyECAkAgACgCECIEIAAtABQiAWoiA0EASgRAIAIgA0sNAQJAIARBAEwgASACT3INAANAIARBAWsiBUEDdiEGQcAAIAFBB2oiB0F4cWshAwJAIAVBP00EQCAAIAYgAxCIASAAKAIQIQQgAC0AFCEBDAELAkAgACgCBCIFIAYgB0H4AXFBA3ZqQQdrIgZPBEAgBSAGayIFQQdLDQFBCCAFQcTewQAQqwQACyAGIAVB1N7BABCqBAALIAAgASADaiIBOgAUIAAgBCADQf8BcWsiBDYCECAAIAAoAgAgBmopAAA3AwgLIAFB/wFxIAJPDQEgBEEASg0ACwsgACABIAJrIgE6ABRCfyACrYZCf4UgACkDCCABQT9xrYiDDwsgACAEIAJrNgIQQgAPCyACIANrIQICQCADQf8BcSABSwRAIAAgAxBbIQggACgCECEEDAELIAAgASADayIBOgAUQn8gA62GQn+FIAApAwggAUE/ca2IgyEICyAAIAQgAms2AhAgCCACQT9xrYYLnAMBBX8CQEERQQAgAEGvsARPGyIBIAFBCHIiASAAQQt0IgIgAUECdEH82sIAaigCAEELdEkbIgEg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AEEEaiACKAIEIAIoAggQPUHcoMIAIAAoAgggACgCBCICGyEDQQkgACgCDCACGwshAiADIAIgARDaASAAQRBqJAALZgAjAEEwayIAJABBhOXCAC0AAARAIABBAjYCDCAAQYyhwgA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIAQhDcDICAAIABBIGo2AhAgAEEIakG0ocIAEKQDAAsgAEEwaiQAC2EBAX8jAEEwayICJAAgAiAANgIMIAJBAjYCFCACQZymwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA0hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRSACQTBqJAALYQEBfyMAQTBrIgIkACACIAA2AgwgAkECNgIUIAJB5K7BADYCECACQgE3AhwgAiACQQxqrUKAgICA4DSENwMoIAIgAkEoajYCGCABKAIcIAEoAiAgAkEQahBFIAJBMGokAAthAQF/IwBBMGsiAiQAIAIgADYCDCACQQE2AhQgAkHwp8EANgIQIAJCATcCHCACIAJBDGqtQoCAgICQOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUgAkEwaiQAC18BAn8CQCAAKAIAIgFB7f///wdqIgJBCk0gAkEDR3ENACABRSABQfv///8HaiICQQ1NIAJBAkdxIAFBg4CAgHhHIAFBhICAgHhMcXJyDQAgACgCBCABQQJ0QQQQpwQLC1wBA38gAC0AACIBQQNLIAFBA0dyRQRAIAAoAgQiACgCACEBIABBBGooAgAiAygCACICBEAgASACEQMACyADKAIEIgIEQCABIAIgAygCCBCnBAsgAEEMQQQQpwQLC2sBAn9BqJbAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMAAQIDC0EAIQEMAgsgAUEBaiEBQdStwAAhAgwBCyABQQRqIQFBkK7AACECCyAAIAI2AgQgACABNgIAC2gBA38CQAJAAkACQEEDIAEoAgBB7f///wdqIgQgBEELTxtBAmsOAwABAgMLIAFBBGohAkGcm8AAIQMMAgtB2LPAACEDIAEhAgwBCyABQQRqIQJBjLXAACEDCyAAIAM2AgQgACACNgIAC2sBAn9B1LfAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EE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AX8jAEEQayICJAAgAiAANgIMIAFB8b3AAEEWQYe+wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBic7AAEEbQcC8wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBrODAAEERQb3gwABBBCACQQxqQZzgwAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBweDAAEEWQdfgwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8fDAAEEbQZDfwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8IjBAEERQYGJwQBBBCACQQxqQeCIwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhYnBAEEWQZuJwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhZfBAEEbQdSHwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzwBAX8jAEEQayICJAAgAkGQksIANgIMIAIgADYCCCACQQhqQZSSwgAgAkEMakGUksIAIAFB5J/CABBrAAs4AQF/IwBBEGsiAiQAIAIgADYCDCABQeywwgBBDUH5sMIAQQQgAkEMakHcsMIAEMkBIAJBEGokAAs5AQF/IwBBEGsiAyQAIAMgATYCDCADIAA2AgggA0EIakGswsIAIANBDGpBrMLCACACQeyOwgAQawALMAEBfyMAQRBrIgIkACACQQhqIAAQ8wIgAigCCCABIAIoAgwoAhARAAAgAkEQaiQACzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEMUBDwsgACABEPwBDwsgACABEP0BCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEK0EDwsgACABEIQCDwsgACABEIMCCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEKkDDwsgACABEIQCDwsgACABEIMCCzMBAX8jAEEQayICJAAgAiAAKAIANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAszAQF/IwBBEGsiAiQAIAIgACgCADYCDCABQejUwQBBDCACQQxqQdjUwQAQfyACQRBqJAALLQACQCAAIAEQrANFDQAgAARAQYXlwgAtAAAaIAAgARD1AyIBRQ0BCyABDwsACzcBAX8jAEEgayIBJAAgAUEANgIYIAFBATYCDCABQdzZwgA2AgggAUIENwIQIAFBCGogABCkAwALMwEBfyAAKAIAIgFBhICAgHhMIAFBg4CAgHhHcSABRXJFBEAgACgCBCABQQJ0QQQQpwQLCzABAX8jAEEQayICJAAgAiAANgIMIAFBxJnAAEEMIAJBDGpBtJnAABB/IAJBEGokAAsvACAAQZybwAA2AgQgACABIAFBACABLQAAQQJrQf8BcSIAQQFGGyAAQQJLGzYCAAswAQF/IwBBEGsiAiQAIAIgADYCDCABQdi8wABBDCACQQxqQci8wAAQfyACQRBqJAALLwAgAEGwvsAANgIEIAAgASABQQAgAS0AAEECa0H/AXEiAEEBRhsgAEECSxs2AgALMAEBfyMAQRBrIgIkACACIAA2AgwgAUGo38AAQQwgAkEMakGY38AAEH8gAkEQaiQACy8AIABBgOHAADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACy8AIABBxInBADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACzABAX8jAEEQayICJAAgAiAANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAssAQF/IwBBEGsiACQAIABBCGoiAiABQfyVwgBBCxCmAyACEK4CIABBEGokAAuEAQEDfyMAQSBrIgQkACAEQQhqIgMQ8AECf0GF5cIALQAAGkEkQQQQ9QMiAgRAIAJB5LrAADYCACACIAE2AiAgAiAANgIcIAIgAykCADcCBCACQQxqIANBCGopAgA3AgAgAkEUaiADQRBqKQIANwIAIAIMAQtBBEEkENMEAAsgBEEgaiQACzgBAX9BASEBIAAtAARFBEAgACgCACIBKAIcQY7EwgBBASABKAIgKAIMEQIAIQELIAAgAToABCABC5ABAQN/IwBBIGsiAyQAIANBCGoiAhDwAQJ/QYXlwgAtAAAaQShBBBD1AyIBBEAgAUGcgsAANgIAIAEgAikCADcCBCABIAApAgA3AhwgAUEMaiACQQhq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NgIMIABBhKLCACABKAIEIAEoAggiAC0ACCAALQAJEMEBAAsgACADNgIEIAAgAjYCACAAQeihwgAgASgCBCABKAIIIgAtAAggAC0ACRDBAQALKgAgAEH/AXFFBEBDAAAAAA8LIABBAWtB/wFxs0NFIpE9lEMAABDBkhBSCy0AIAEoAhwgAiADIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAsyAQF/IAEoAhxBvMHCAEEBIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAshAAJAIAEgAxCsAwRAIAAgASADIAIQ3wMiAA0BCwALIAALIgEBfyAAKAIAIgAgAEEfdSICcyACayAAQX9zQR92IAEQbAslACAARQRAQfiPwgBBMhDIBAALIAAgAiADIAQgBSABKAIQEQsACygAIAEgACgCAC0AAEECdCIAQeC8wgBqKAIAIABBzLzCAGooAgAQ5QMLGQEBf0GAgICAeCABayAATyACIAFpQQFGGwslACABIAAtAABBAnQiAEH8tcAAaigCACAAQey1wABqKAIAEOUDCyUAIABBnJvAADYCBCAAIAFBBGpBACABKAIAQYKAgIB4Rhs2AgALIQAgAEHwosAANgIEIAAgAUEBakEAIAEtAABBAkYbNgIACyUAIAEgAC0AAEECdCIAQZDZwABqKAIAIABBgNnAAGooAgAQ5QMLJQAgAEGwvsAANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAshACAAQYTGwAA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgASAALQAAQQJ0IgBB+PvAAGooAgAgAEHo+8AAaigCABDlAwslACAAQYDhwAA2AgQgACABQQRqQQAgASgCAEGCgICAeEYbNgIACyEAIABBsOjAADYCBCAAIAFBAWpBACABLQAAQQJGGzYCAAshACAAQbSOwQA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgAEHEicEANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAslACABIAAtAABBAnQiAEGMosEAaigCACAAQfyhwQBqKAIAEOUDCyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCABKAIQEQcACyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCAB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BBD1AyILBEACQEGF5cIALQAAGkGACEEEEPUDIghFDQJBheXCAC0AABpBgAhBBBD1AyIERQ0AQYXlwgAtAAAaQYAIQQQQ9QMiDkUNAkGF5cIALQAAGkGACEEEEPUDIgxFDQBBheXCAC0AABpBgAhBBBD1AyISRQ0CIANCADcDqAIgA0EBNgLoASADQQA6AOQBIANBADoA4gEgA0EAOgDgASADQTQ7AdwBIANBADYC2AEgAyASNgLUASADQoCAgICAIDcCzAEgAyAMNgLIASADQoCAgICAIDcDwAEgA0KAgICAwAA3A7gBIANBIzsBtAEgA0EANgKwASADIA42AqwBIANCgICAgIAgNwKkASADIAQ2AqABIANCgICAgIAgNwOYASADQoCAgIDAADcDkAEgA0EfOwGMASADQQA2AogBIAMgCDYChAEgA0KAgICAgCA3AnwgAyALNgJ4IANCgICAgIAgNwNwIANCgICAgMAANwNoIANBwAJqQgA3AwAgA0G4AmpCADcDACADQbACakIANwMAIANB/AFqQQA2AgAgA0H0AWpCADcCACADQgA3AuwBIANC1uuC7ur9ifXgADcDgAIgA0LP1tO+0ser2UI3A4gCIANCADcDkAIgA0L56tDQ58mh5OEANwOYAiADQgA3A6ACIANBADYCyAIgA0IANwPQAiADIAY2AtgCIANBADYC5AIgA0EINgKUAyADQoCAgIAQNwLcAiADQoGAgIDAADcCjAMgA0EANgKIAyADQoCAgIAQNwPoAiADQgA3A/ACIANCBDcD+AIgA0KAgICAEDcDgAMMAwsLQQRBgAhBzIDCABDXAwALQQRBgAhB3IDCABDXAwALIAdBADYCqAcgB0EANgKwByAHQQA6ANwKIAdBADYC2AogByAjNwPQCiAHKQOoByEgIAcpA7AHISMgB0HoA2oiBiADQagDEDsaIAdBCGoQSSAHICM3AyggByAgNwMgIAcgITcDGCAHIA02AgwgByAiPgIQIAcgIkIgiD4CFCAHIAU2AgggB0EwaiAGQagDEDshCCAFQQFxBEBBDCEQIAcoAtgDIhJFDQEgBygC3AMhFwNAIBJB1AFrIQQgEkEEaiEGIBIvAd4WIgNBAnQhC0F/IQUCQAJAA0AgC0UEQCADIQUMAgsgBigCACEOIAVBAWohBSAEQYQCaiEEIAtBBGshCyAGQQRqIQZBfyANIA5HIA0gDkkbIg5BAUYNAAsgDkH/AXFFDQELIBdFDQMgF0EBayEXIBIgBUECdGpB4BZqKAIAIRIMAQsLIAdBDDYCkAcgByANNgKUByAHQZAHahAqQQAhBSAIQegAaiAEEIcBIAhBkAFqIARBKGoQhwEgCEG4AWogBEHQAGoQhwEgCEEAOgBkIAhBADYCFCAIQQA2AgggCEEANgJcIAhBADYCOCAIQQA2AiwgCEEANgIgIAhBADYCUCAIQQA6AGEgCEEANgJEIAggBC8BeDsB4AEgCCAEKAF6NgHiASAEKAKIASIDQQF0IQYgBCgChAEhCyADIAgoAgBLBEAgCEEAIANBAUECEJIBIAgoAgghBQsgCCgCBCAFQQF0aiALIAYQOxogCCADIAVqNgIIIAQoApABIQYgBCgClAEiAyAIKAIMIAgoAhQiBWtLBEAgCEEMaiAFIANBAUEBEJIBIAgoAhQhBQsgCCgCECAFaiAGIAMQOxogCCADIAVqNgIUIAggBC0A5AE6AGQgBCgCnAEhBiAEKAKgASIDIAgoAhggCCgCICIFa0sEQCAIQRhqIAUgA0EBQQEQkgEgCCgCICEFCyAIKAIcIAVqIAYgAxA7GiAIIAMgBWo2AiAgBCgCuAEiA0ECdCEGIAQoArQBIQsgAyAIKAIwIAgoAjgiBWtLBEAgCEEwaiAFIANBBEEEEJIBIAgoAjghBQsgCCgCNCAFQQJ0aiALIAYQOxogCCADIAVqNgI4IAhBPGogBEG8AWoQhwFBACEFIAhBADYC5AIgCEGUA2ogBEGAAmooAgA2AgAgCCAEKQL4ATcCjAMgBCgC7AEhBiAEKALwASIDIAgoAtwCSwRAIAhB3AJqQQAgA0EBQQEQkgEgCCgC5AIhBQsgCCgC4AIgBWogBiADEDsaIAggAyAFajYC5AIgByANNgIsIAdBATYCKAsgFCAHQQhqQeADEDsgBykCADcD4AMMAQsgFEKAgICAgPgANwMYIBQgIjcDECAUIA02AgwgFCAQNgIIIBRBAzYCACAHQQhqEEkgB0HYA2oQKwsgB0GAC2okAAJAIAkoApgEIgNBA0cEQCAJQZAEaiIFIAlBvARqKAIANgIAIAlBiARqIgYgCUG0BGopAgA3AwAgCUGABGoiCyAJQawEaikCADcDACAJQfgDaiIIIAlBpARqKQIANwMAIAkgCSkCnAQ3A/ADIAlBMGogCUHABGpBwAMQOxogCUEUaiAIKQMANwIAIAlBHGogCykDADcCACAJQSRqIAYpAwA3AgAgCUEsaiAFKAIANgIAIAkgAzYCCCAJIAkpA/ADNwIMIAlBADYCoAQgCUKAgICAEDcCmAQgCUHwA2ohBCAJQQhqIQ4jAEEgayIHJABBgMAAIQwCQAJAIBQoAgAiCCAUKAIIIgVrQSBPBEAgCCEGIAUhAwwBCyAHQRBqIA4gFBByAkACQCAHLQAQQQRGBEAgBygCFCENDAELIAcpAxAiIEIgiKchDSAgpyIDQf8BcUEERw0BCyANBEAgFCgCACEGIBQoAgghAwwCCyAEQQQ6AAAgBEEANgIEDAILIAQgDTYCBCAEIAM6AAAgBEEDaiADQRh2OgAAIAQgA0EIdjsAAQwBC0EAIQ0DQAJAIAMgBkcgBiAIR3INACAHQRBqIA4gFBByAkACQAJAIActABBBBEYEQCAHKAIUIQYMAQsgBykDECIgQiCIpyEGICCnIgNB/wFxQQRHDQELIBQoAgghAyAGRQ0BIBQoAgAhBgwCCyAEIAY2AgQgBCADOgAAIARBA2ogA0EYdjoAACAEIANBCHY7AAEMAwsgBEEEOgAAIAQgAyAFazYCBAwCCwJAAkACQCADIAZGBEAgBkEgaiILIAZBAXQiEiALIBJLGyILQQBIDQEgByAGBH8gByAGNgIYIAcgFCgCBDYCEEEBBUEACzYCFCAHQQRqQQEgCyAHQRBqENsBIAcoAgRBAUYNASAHKAIIIQYgFCALNgIAIBQgBjYCBCALIQYLIBQoAgQgA2oiEiANakEAIAwgBiADayIXIAwgF0kbIgsgDWsQWhogB0EQaiAOIBIgCxAoIActABBBBEYNAQJAA0ACQCAHKQMQIiBCIIgiIqchDQJAAkACQAJAICCnIhBB/wFxQQFrDgQAAgEGBAsgIEKA/gODQoDGAFENAgwDCyANLQAIQSNHDQIgDSgCACEQIA1BBGooAgAiEygCACIVBEAgECAVEQMACyATKAIEIhUEQCAQIBUgEygCCBCnBAsgDUEMQQQQpwQMAQsgDS0ACEEjRw0BCyAHQRBqIA4gEiALECggBy0AEEEERw0BDAQLCyAEIBA6AAAgFCADNgIIIARBB2ogIkIYiDwAACAEQQVqICJCCIg9AAAgBCAgQgiIQv///weDICJCGIaEPgABDAULIBQgAzYCCAwCCyAEQoHMADcCAAwDCyAHKAIUIhIgC0sEQEGYo8EAQSlBuKTBABDtAgALIBQgAyASaiIDNgIIIBJFDQAgCyASayENIAsgEkcgDCAXS3INAUF/IAxBAXQgDEEASBshDAwBCwsgBEEEOgAAIAQgAyAFazYCBAsgB0EgaiQAIAktAPADQQRGBEAgGCAJKQKYBDcCACAYQQhqIAlBoARqKAIANgIAIA4QRwwCCyAJIAkpA/ADIiCnIgNBGHY6APMDIAkgA0EIdjsA8QMgCSAgQiCIPgL0AyAJICA8APADIAlB8ANqEKIDIQMgGEGAgICAeDYCACAYIAM2AgQgCSgCmAQiAwRAIAkoApwEIANBARCnBAsgCUEIahBHDAELIAlBjARqIAlBuARqKQMAIiA3AgAgCUGEBGogCUGwBGoiAykDACIiNwIAIAlB/ANqIAlBqARqIgUpAwAiITcCACAJIAkpA6AEIiM3AvQDIAMgIDcDACAFICI3AwAgCUGgBGogITcDACAJICM3A5gEIwBBIGsiCyQAIAtBCGoiBhDwAQJ/IwBBMGsiAyQAIANBKGogCUGYBGoiBUEYaikCADcCACADQSBqIAVBEGopAgA3AgAgA0EYaiAFQQhqKQIANwIAQYXlwgAtAAAaIAMgBSkCADcCEEHAAEEIEPUDIgUEQCAFQay6wAA2AgAgBSADKQIMNwIcIAUgBikCADcCBCAFQQxqIAZBCGopAgA3AgAgBUEUaiAGQRBqKQIANwIAIAVBJGogA0EUaikCADcCACAFQSxqIANBHGopAgA3AgAgBUE0aiADQSRqKQIANwIAIAVBPGogA0EsaigCADYCACADQTBqJAAgBQwBC0EIQcAAENMEAAshAyALQSBqJAAgGEGAgICAeDYCACAYIAM2AgQLIAlBgAhqJAAgCigCLCEDIAooAigiC0GAgICAeEYNESAKKAIwCzYCFCAKIAM2AhAgCiALNgIMIApCADcDGCAKIApBDGo2AiAgCkEoaiEHQgAhIiMAQfAAayIFJAAgBUEoaiIIQgA3AwAgBUEgaiIJQgA3AwAgBUEYaiIEQgA3AwAgBUEQaiINQgA3AwAgBUEIaiIOQgA3AwAgBUIANwMAAkAgCkEYaiIGKAIIIhQoAggiAyADIAYpAwAiIKcgICADrSIhVhsiC08EQAJAAkAgAyALa0EwTwRAIAggFCgCBCALaiIDQShqKQAANwMAIAkgA0EgaikAADcDACAEIANBGGopAAA3AwAgDSADQRBqKQAANwMAIA4gA0EIaikAADcDACAFIAMpAAA3AwBBBCEDDAELQeDZwAApAgAiI0IIiCEiICOnIQMgI0L/AYNCBFINAQsgIEIwfCEhCyAGICE3AwACQCADQf8BcUEERgRAIAVBMDYCOCAFIAU2AjQjAEEgayIDJAAgBUE8aiILAn8CQCALAn8gBUE0aiIGKAIEIglBA00EQCADQQA6AAsgA0ElOwAJIANBADYCDCADQQE6AAggCyADQQhqEPsCNgIEDAILIAYgCUEEayIENgIEIAYgBigCACIIQQRqNgIAIARBA00EQCADQQA6AAsgA0ElOwAJIANBADYCDCADQQE6AAggCyADQQhqEPsCNgIEDAILIAgqAAAhJyAGIAlBCGsiBDYCBCAGIAhBCGo2AgAgBEEDTQRAIANBADoACyADQSU7AAkgA0EANgIMIANBAToACCALIANBCGoQ+wI2AgQMAgsgCCgABCEOIAYgCUEMayIENgIEIAYgCEEMajYCACAEQQNNBEAgA0EAOgALIANBJTsACSADQQA2AgwgA0EBOgAIIAsgA0EIahD7AjYCBAwCCyAIKAAIIRQgBiAJQRBrIgQ2AgQgBiAIQRBqNgIAIARBBEkEQCADQQA6AAsgA0ElOwAJIANBADYCDCADQQE6AAggCyADQQhqEPsCNgIEDAILIAgoAAwhDCAGIAlBFGsiBDYCBCAGIAhBFGo2AgAgBEEESQRAIANBADoACyADQSU7AAkgA0EANgIMIANBAToACCALIANBCGoQ+wI2AgQMAgsgCCoAECEmIAYgCUEYayIENgIEIAYgCEEYajYCACAEQQNNBEAgA0KBygA3AwggCyADQQhqEPsCNgIEDAILIAgqABQhKCAGIAlBHGsiBDYCBCAGIAhBHGo2AgAgBEEDTQRAIANCgcoANwMIIAsgA0EIahD7AjYCBAwCCyAIKAAYIRIgBiAJQSBrNgIEIAYgCEEgajYCACAIKAAcIRcjAEEQayIIJAAgA0EIaiIJAn8CQCAGKAIEIg1BA00EQCAIQoHKADcDCCAJIAhBCGoQ+wI2AgQMAQsgBiANQQRrIhg2AgQgBiAGKAIAIgRBBGo2AgAgGEEDTQRAIAhCgcoANwMIIAkgCEEIahD7AjYCBAwBCyAEKAAAIRggBiANQQhrIhA2AgQgBiAEQQhqNgIAIBBBA00EQCAIQoHKADcDCCAJIAhBCGoQ+wI2AgQMAQsgBCgABCEQIAYgDUEMayITNgIEIAYgBEEMajYCACAJAn8gE0EDTQRAIAhCgcoANwMIIAhBCGoQ+wIMAQsgCSAEKAAINgIMIAkgEDYCCCAJIBg2AgQgBiANQRBrNgIEIAYgBEEQajYCACAJIAQoAAw2AhBBAAwCCzYCBAtBAQs2AgAgCEEQaiQAIAMoAgwiBiADKAIIDQAaIAsgAykCEDcCCCALQRBqIANBGGooAgA2AgAgCyAXNgIwIAsgEjYCLCALICg4AiggCyAmOAIkIAsgDDYCICALIBQ2AhwgCyAONgIYIAsgJzgCFCALIAY2AgRBAAwCCzYCBAtBAQs2AgAgA0EgaiQAIAUoAkAhAyAFKAI8RQRAIAcgBSkCRDcCCCAHQTBqIAVB7ABqKAIANgIAIAdBKGogBUHkAGopAgA3AgAgB0EgaiAFQdwAaikCADcCACAHQRhqIAVB1ABqKQIANwIAIAdBEGogBUHMAGopAgA3AgAgB0EANgIAIAcgAzYCBAwCCyAFIAM2AjxBzI/AAEErIAVBPGpBvI/AAEGckMAAEKACAAsgB0EBNgIAIAcgA61C/wGDICJCCIaENwIECyAFQfAAaiQADAELIAVBADYCTCAFQQE2AkAgBUGs2cAANgI8IAVCBDcCRCAFQTxqQdjawAAQpAMACwJAAkAgCigCKEUEQCAKQegAaiAKQcgAaigCADYCACAKIAopAkA3A2AgCioCPCEmIAoqAkwhJyAKKgJQISggCigCVCIHQQJ0IhchBSAWIBYoAggiAyAXSQR/IBcgAyIEayIFIBYoAgAgA2tLBEAgFiADIAVBBEEEEJABIBYoAgghBAsgFigCBCILIARBAnQiCGohBiAFQQJPBH8gBkEAIBcgA0F/c2pBAnQQWhogBCAFakEBayEEIAdBBHQgA0ECdGsgC2ogCGpBBGsFIAYLQQA2AgAgBEEBagUgBQs2AgggGS0ADkUEQCAKQQA2AjggCkEBNgIsIApB7JPAADYCKCAKQgQ3AjAgCkEoahCrAiEDDBMLQQAhAyAHQQBIDQICQCAHRQRAQQEhCAwBC0GF5cIALQAAGkEBIQMgB0EBEPYDIghFDQMLIBktAAwNASAKQQA2AjggCkEBNgIsIApB0JTAADYCKCAKQgQ3AjAgCkEoahCrAiEDDBELIAogCikCLDcDKCAKQShqEKIDIQMMEQtBACEDAkAgB0H/////A0sgF0H8////B0tyDQBBBCEGIBcEQEGF5cIALQAAGkEEIQMgF0EEEPYDIgZFDQEgByEbCyAmQ///f0tDAP9/RyAZLQAPIh8blSEqIAdBAnQhFCAHQQNxIQ0gB0H8////A3EhHSAHQQJrIRggB0EBayISQQNxIQ4gEkF8cSEeIBktAAkgB0EBS3EhGUHg2cAAKQIAIiBC/wGDISQgIEIIiCEiIAetISMgIKchC0EAIQkDQCAHBEAgBkEAIBcQWhoLAkACQAJAAn8CQCAfRQ0AAkACQCAKKAIgIgQoAggiAyADIAopAxgiIKcgICADrSIhVhsiBU8EQAJAAkAgByADIAVrTQRAIAQoAgQgBWohAyAHQQFHBEAgCCADIAcQOxpBBCEDDAILIAggAy0AADoAAEEEIQMMAQsgCyEDICRCBFINAQsgICAjfCEhCyAKICE3AxggA0H/AXFBBEYEQCAZRQ0CIAgtAAAhBEEBIQMgGEEDTwRAQQAhBQNAIAUgCGoiA0EBaiIMIAQgDC0AAGoiBDoAACADQQJqIgwgBCAMLQAAaiIEOgAAIANBA2oiDCAEIAwtAABqIgQ6AAAgA0EEaiIDIAQgAy0AAGoiBDoAACAeIAVBBGoiBUcNAAsgBUEBaiEDCyAORQ0DIAMgCGohAyAOIQUDQCADIAQgAy0AAGoiBDoAACADQQFqIQMgBUEBayIFDQALDAMLIAogIj4AKSAKQS9qICJCMIg8AAAgCkEtaiAiQiCIPQAAIAogAzoAKCAKQShqEKIDDAQLDBsLIAdFDQELQQAhBSASQQNJBH8gCAUgBiEDA0AgAyAFIAhqIgQtAABBEHQ2AgAgA0EEaiAEQQFqLQAAQRB0NgIAIANBCGogBEECai0AAEEQdDYCACADQQxqIARBA2otAABBEHQ2AgAgA0EQaiEDIB0gBUEEaiIFRw0ACyAFIAhqCyEDIA1FDQAgBiAFQQJ0aiEEIA0hBQNAIAQgAy0AAEEQdDYCACAEQQRqIQQgA0EBaiEDIAVBAWsiBQ0ACwsCQAJAAkAgCigCICIEKAIIIgMgAyAKKQMYIiCnICAgA60iIVYbIgVPBEACQAJAIAcgAyAFa00EQCAEKAIEIAVqIQMgB0EBRwRAIAggAyAHEDsaQQQhAwwCCyAIIAMtAAA6AABBBCEDDAELIAshAyAkQgRSDQELICAgI3whIQsgCiAhNwMYIANB/wFxQQRHBEAgCiAiPgApIApBL2ogIkIwiDwAACAKQS1qICJCIIg9AAAgCiADOgAoIApBKGoQogMMBQsgGUUNASAILQAAIQRBASEDIBhBA08EQEEAIQUDQCAFIAhqIgNBAWoiDCAEIAwtAABqIgQ6AAAgA0ECaiIMIAQgDC0AAGoiBDoAACADQQNqIgwgBCAMLQAAaiIEOgAAIANBBGoiAyAEIAMtAABqIgQ6AAAgHiAFQQRqIgVHDQALIAVBAWohAwsgDkUNAiADIAhqIQMgDiEFA0AgAyAEIAMtAABqIgQ6AAAgA0EBaiEDIAVBAWsiBQ0ACwwCCwwbCyAHRQ0BC0EAIQUgEkEDSQR/IAgFIAYhAwNAIAMgAygCACAFIAhqIgQtAABBCHRyNgIAIANBBGoiDCAMKAIAIARBAWotAABBCHRyNgIAIANBCGoiDCAMKAIAIARBAmotAABBCHRyNgIAIANBDGoiDCAMKAIAIARBA2otAABBCHRyNgIAIANBEGohAyAdIAVBBGoiBUcNAAsgBSAIagshBCANRQ0AIAYgBUECdGohAyANIQUDQCADIAMoAgAgBC0AAEEIdHI2AgAgA0EEaiEDIARBAWohBCAFQQFrIgUNAAsLAkAgCigCICIEKAIIIgMgAyAKKQMYIiCnICAgA60iIVYbIgVPBEACQAJAIAcgAyAFa00EQCAEKAIEIAVqIQMgB0EBRwRAIAggAyAHEDsaQQQhAwwCCyAIIAMtAAA6AABBBCEDDAELIAshAyAkQgRSDQELICAgI3whIQsgCiAhNwMYIANB/wFxQQRHDQEgGUUNAyAILQAAIQRBASEDIBhBA08EQEEAIQUDQCAFIAhqIgNBAWoiDCAEIAwtAABqIgQ6AAAgA0ECaiIMIAQgDC0AAGoiBDoAACADQQNqIgwgBCAMLQAAaiIEOgAAIANBBGoiAyAEIAMtAABqIgQ6AAAgHiAFQQRqIgVHDQALIAVBAWohAwsgDkUNBCADIAhqIQMgDiEFA0AgAyAEIAMtAABqIgQ6AAAgA0EBaiEDIAVBAWsiBQ0ACwwECwwZCyAKICI+ACkgCkEvaiAiQjCIPAAAIApBLWogIkIgiD0AACAKIAM6ACggCkEoahCiAwshAyAbRQ0UIAYgG0ECdEEEEKcEDBQLIAdFDQELQQAhBSASQQNJBH8gCAUgBiEDA0AgAyADKAIAIAUgCGoiBC0AAHI2AgAgA0EEaiIMIAwoAgAgBEEBai0AAHI2AgAgA0EIaiIMIAwoAgAgBEECai0AAHI2AgAgA0EMaiIMIAwoAgAgBEEDai0AAHI2AgAgA0EQaiEDIB0gBUEEaiIFRw0ACyAFIAhqCyEEIA0EQCAGIAVBAnRqIQMgDSEFA0AgAyADKAIAIAQtAAByNgIAIANBBGohAyAEQQFqIQQgBUEBayIFDQALCyAKQeAAaiAJQQJ0aioCACErQQAhAyAUIQUgBiEEA0AgKyAqIAQoAgCzlJIhJgJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAIAkOAwECAwALQfSNwABBKEGcjsAAEO0CAAsgJrwiE0H///8DcSEVIBNBgICAgHhxIQwgE0GAgID8B3EiEEGAgID8B0YEQCAVQQ12IAxBEHZyIBVBAEdBCXRyQYD4AXIhDAwICyAMQRB2IQwgEEGAgIC4BEsNAiAQQYCAgMQDTwRAIBNBDHYgE0H/3wBxQQBHcSAQQQ12IBVBDXZqQYCAAWogDHJqIQwMCAsgEEGAgICYA0kNByAVQYCAgARyIhNBHiAQQRd2IhVrdiEQIBNBHSAVayIVdkEBcQR/IBBBAyAVdEEBayATcUEAR2oFIBALIAxyIQwMBwsgJrwiE0H///8DcSEVIBNBgICAgHhxIQwgE0GAgID8B3EiEEGAgID8B0YEQCAVQQ12IAxBEHZyIBVBAEdBCXRyQYD4AXIhDAwGCyAMQRB2IQwgEEGAgIC4BEsNAiAQQYCAgMQDTwRAIBNBDHYgE0H/3wBxQQBHcSAQQQ12IBVBDXZqQYCAAWogDHJqIQwMBgsgEEGAgICYA0kNBSAVQYCAgARyIhNBHiAQQRd2IhVrdiEQIBNBHSAVayIVdkEBcQR/IBBBAyAVdEEBayATcUEAR2oFIBALIAxyIQwMBQsgJrwiE0H///8DcSEVIBNBgICAgHhxIQwgE0GAgID8B3EiEEGAgID8B0YEQCAVQQ12IAxBEHZyIBVBAEdBCXRyQYD4AXIhDAwECyAMQRB2IQwgEEGAgIC4BEsNAiAQQYCAgMQDTwRAIBNBDHYgE0H/3wBxQQBHcSAQQQ12IBVBDXZqQYCAAWogDHJqIQwMBAsgEEGAgICYA0kNAyAVQYCAgARyIhNBHiAQQRd2IhVrdiEQIBNBHSAVayIVdkEBcQR/IBBBAyAVdEEBayATcUEAR2oFIBALIAxyIQwMAwsgDEGA+AFyIQwMBAsgDEGA+AFyIQwMAgsgDEGA+AFyIQwLIANBAnRBAnIiECAWKAIIIhNJBEAgDEH//wNxIQwgFigCBCAQQQJ0agwDCyAQIBNB5I3AABCtAgALIANBAnRBAXIiECAWKAIIIhNJBEAgDEEQdCEMIBYoAgQgEEECdGoMAgsgECATQdSNwAAQrQIACyADQQJ0QQFyIhAgFigCCCITTw0BIAxB//8DcSEMIBYoAgQgEEECdGoLIhAgECgCACAMcjYCAAwBCyAQIBNBxI3AABCtAgALIANBAWohAyAEQQRqIQQgBUEEayIFDQALCyAJQQFqIglBA0cNAAsgGwRAIAYgG0ECdEEEEKcECwJAIAooAiAiBigCCCIDIAMgCikDGCIhpyAhIAOtIiBWGyIFTwRAAkACQCAHIAMgBWtNBEAgBigCBCAFaiEDIAdBAUcEQCAIIAMgBxA7GkEEIQMMAgsgCCADLQAAOgAAQQQhAwwBCyALIQMgJEIEUg0BCyAhICN8ISALIAogIDcDGCADQf8BcUEERw0HICggJ5MhKCAHRQ0GIBYoAgRBDGohAyAWKAIIIQ1BAyEEIAchCSAIIQUDQEEAIQYgJyAoIAUtAACzQwAAf0OVlJIQUiImQwAAAABcBEBDAAB/Q0MAAAAAICYQqgFDAAAQQZJDRSKRPZVDAACAP5IiJiAmQwAAAABdGyImICZDAAB/Q14bENgDIiZDAAAAAGAhBkH/AQJ/ICZDAACAT10gJkMAAAAAYHEEQCAmqQwBC0EAC0EAIAYbICZDAAB/Q14bIQYLIAQgDU8NAiAFQQFqIQUgAyADKAIAIAZyNgIAIANBEGohAyAEQQRqIQQgCUEBayIJDQALDAULDBQLIAQgDUGsjsAAEK0CAAsgAyAXQdiUwAAQ1wMACyADIAdBjJTAABDXAwALIAQgC0Gwk8AAENcDAAsgCikDGCEgCyAKKAIgIgYoAggiAyADICCnICAgA60iIVYbIgVJDQ4CQAJAIAcgAyAFa00EQCAGKAIEIAVqIQMgB0EBRwRAIAggAyAHEDsaQQQhAwwCCyAIIAMtAAA6AABBBCEDDAELIAshAyAkQgRSDQELICAgI3whIQsgCiAhNwMYIANB/wFxQQRHDQAgBwRAIBYoAgRBDGohAyAWKAIIIQ1BAyEEIAchCSAIIQUDQEEAIQYgJyAoIAUtAACzQwAAf0OVlJIQUiImQwAAAABcBEBDAAB/Q0MAAAAAICYQqgFDAAAQQZJDRSKRPZVDAACAP5IiJiAmQwAAAABdGyImICZDAAB/Q14bENgDIiZDAAAAAGAhBkH/AQJ/ICZDAACAT10gJkMAAAAAYHEEQCAmqQwBC0EAC0EAIAYbICZDAAB/Q14bIQYLIAQgDU8NAyAFQQFqIQUgAyADKAIAIAZBCHRyNgIAIANBEGohAyAEQQRqIQQgCUEBayIJDQALIAopAxghIQsgCigCICIGKAIIIgMgAyAhpyAhIAOtIiBWGyIFSQ0OAkACQCAHIAMgBWtNBEAgBigCBCAFaiEDIAdBAUcEQCAIIAMgBxA7GkEEIQMMAgsgCCADLQAAOgAAQQQhAwwBCyALIQMgJEIEUg0BCyAhICN8ISALIAogIDcDGCADQf8BcUEERw0AAn8gB0UEQEEBIQVBACEEQQAMAQsgFigCBEEMaiEDIBYoAgghDUEDIQQgByEJIAghBQNAQQAhBiAnICggBS0AALNDAAB/Q5WUkhBSIiZDAAAAAFwEQEMAAH9DQwAAAAAgJhCqAUMAABBBkkNFIpE9lUMAAIA/kiImICZDAAAAAF0bIiYgJkMAAH9DXhsQ2AMiJkMAAAAAYCEGQf8BAn8gJkMAAIBPXSAmQwAAAABgcQRAICapDAELQQALQQAgBhsgJkMAAH9DXhshBgsgBCANTw0EIAVBAWohBSADIAMoAgAgBkEQdHI2AgAgA0EQaiEDIARBBGohBCAJQQFrIgkNAAtBACEDIAdBA2wiBEEASA0EIAdFBEBBASEFQQAMAQtBheXCAC0AABpBASEDIARBARD2AyIFRQ0EIAQLIQ0gCigCICIJKAIIIgMgAyAKKQMYIiGnICEgA60iIFYbIgZJDQ4CQAJAIAcgAyAGa00EQCAJKAIEIAZqIQMgB0EBRwRAIAggAyAHEDsaQQQhAwwCCyAIIAMtAAA6AABBBCEDDAELIAshAyAkQgRSDQELICEgI3whIAsgCiAgNwMYAkACQCADQf8BcUEERw0AIAcEQEEAIQMgByEJIAghBgNAIAMgBE8NAyADIAVqIAYtAAA6AAAgA0EDaiEDIAZBAWohBiAJQQFrIgkNAAsgCikDGCEgCyAKKAIgIgkoAggiAyADICCnICAgA60iIVYbIgZJDRACQAJAIAcgAyAGa00EQCAJKAIEIAZqIQMgB0EBRwRAIAggAyAHEDsaQQQhAwwCCyAIIAMtAAA6AABBBCEDDAELIAshAyAkQgRSDQELICAgI3whIQsgCiAhNwMYIANB/wFxQQRHDQAgBwRAIAchCUEBIQMgCCEGA0AgAyAETw0DIAMgBWogBi0AADoAACADQQNqIQMgBkEBaiEGIAlBAWsiCQ0ACyAKKQMYISELIAooAiAiCSgCCCIDIAMgIacgISADrSIgVhsiBkkNEAJAAkAgByADIAZrTQRAIAkoAgQgBmohAyAHQQFHBEAgCCADIAcQOxpBBCEDDAILIAggAy0AADoAAEEEIQMMAQsgCyEDICRCBFINAQsgISAjfCEgCyAKICA3AxggA0H/AXFBBEcNAAJAAkAgBwRAQQAhBkECIQMDQCADIARPDQUgAyAFaiAGIAhqLQAAOgAAIANBA2ohAyAHIAZBAWoiBkcNAAtBACEDQQAhBgNAIAMgBE8NAiADQQFqIARPDQMgA0ECaiAETw0KIAMgBWoiCSwAACEOIAlBAmosAAAhGyAKIAlBAWosAACyQwAA/kKVIic4AiwgCiAOskMAAP5ClSImOAIoIAogG7JDAAD+QpUiKDgCMCAKQwAAgD8gJiAmlCAnICeUkiAoICiUkpNDAAAAABDVA5E4AjRDAAAAACErIApBKGoiCSoCCCEoIAkqAgQhKiAJKgIAIScgCSoCDCImQwAAAABdBEAgJowhJiAojCEoICqMISogJ4whJwtDAACAPyEsAn0CQCAmvCIOQf////8HcSIJQf////sDTQRAIAlBgICA+ANPBEAgDkEATgRAQwAAgD8gJpNDAAAAP5QiJpEiKSAmICYgJkNr0w28lEO6Ey+9kpRDdaoqPpKUICZDruU0v5RDAACAP5KVlCAmICm8QYBgcb4iJiAmlJMgKSAmkpWSICaSIiYgJpIMBAtD2g/JPyAmQwAAgD+SQwAAAD+UIiaRIikgKSAmICYgJkNr0w28lEO6Ey+9kpRDdaoqPpKUICZDruU0v5RDAACAP5KVlENoIaKzkpKTIiYgJpIhKQwCC0PaD8k/ISkgCUGBgICUA0kNAUNoIaIzICYgJpQiKSApIClDa9MNvJRDuhMvvZKUQ3WqKj6SlCApQ67lNL+UQwAAgD+SlSAmlJMgJpND2g/JP5IMAgtDAAAAACAmICaTlSAJQYCAgPwDRw0BGkMAAAAAQ9oPSUAgDkEAThsMAQsgKQshLUMAAAAAISYgKCAolCAqICqUICcgJ5SSkpEiKUO9N4Y1XUUEQCAoICmVISsgJyAplSEsICogKZUhJgsgJiAriyAmiyAsi5KSIieVISYgLCAnlSEoAkAgK0MAAAAAYARAICYhJwwBC0MAAIA/ICiLk0MAAMB/QwAAgD8gJpggJiAmXBuUISdDAACAPyAmi5NDAADAf0MAAIA/ICiYICggKFwblCEoCwJAIAZBAnQiG0ECciIOIBYoAggiCUkEQEH/AQJ/ICdDAAAAP5RDAAAAP5JDAAB/Q5QQ2AMiJ0MAAIBPXSAnQwAAAABgIhRxBEAgJ6kMAQtBAAtBACAUGyAnQwAAf0NeG0EYdCEUIChDAAAAP5RDAAAAP5JDAAB/Q5QQ2AMiJ0MAAAAAYCEMIBYoAgQiFyAOQQJ0aiIOIA4oAgBB/wECfyAnQwAAgE9dICdDAAAAAGBxBEAgJ6kMAQtBAAtBACAMGyAnQwAAf0NeG0EQdCAUcnI2AgAgCSAbQQNyIg5LBEACf0MAAH9DQwAAAAAgLSAtkkOKVqJClBDYAyInICdDAAAAAF0bIicgJ0MAAH9DXhsiJ0MAAIBPXSAnQwAAAABgIglxBEAgJ6kMAQtBAAshGyAXIA5BAnRqIg4gDigCAEH/ASAbQQAgCRsgJ0MAAH9DXhtBGHRyNgIADAILIA4gCUHsjsAAEK0CAAsgDiAJQdyOwAAQrQIACyADQQNqIQMgBkEBaiIGIAdHDQALCyANBEAgBSANQQEQpwQLIAooAiAiBigCCCIDIAMgCikDGCIlpyAlIAOtIiFWGyIFSQ0SAkACQCAHIAMgBWtNBEAgBigCBCAFaiEDAkAgB0EBRwRAIAggAyAHEDsaDAELIAggAy0AADoAAAtBBCEDQgAhIAwBCyAiISAgCyEDICRCBFINAQsgIyAlfCEhCyAKICE3AxggA0H/AXFBBEYEQCAZBEAgEkEDcSEGIAgtAAAhBEEBIQMgGEEDTwRAIBJBfHEhCUEAIQUDQCAFIAhqIgNBAWoiDSAEIA0tAABqIgQ6AAAgA0ECaiINIAQgDS0AAGoiBDoAACADQQNqIg0gBCANLQAAaiIEOgAAIANBBGoiAyAEIAMtAABqIgQ6AAAgCSAFQQRqIgVHDQALIAVBAWohAwsgBkUNCyADIAhqIQMDQCADIAQgAy0AAGoiBDoAACADQQFqIQMgBkEBayIGDQALDAsLIAcNCgwLCyAKICA+ACkgCkEvaiAgQjCIPAAAIApBLWogIEIgiD0AACAKIAM6ACggCkEoahCiAyEDDA8LIAMgBEGYlcAAEK0CAAsgA0EBaiAEQaiVwAAQrQIACyAKICI+ACkgCkEvaiAiQjCIPAAAIApBLWogIkIgiD0AACAKIAM6ACggCkEoahCiAyEDIA1FDQwgBSANQQEQpwQMDAsgAyAEQciVwAAQrQIACyAKICI+ACkgCkEvaiAiQjCIPAAAIApBLWogIkIgiD0AACAKIAM6ACggCkEoahCiAyEDDAoLIAQgDUG8jsAAEK0CAAsgBCANQcyOwAAQrQIACyADIARB6JTAABDXAwALIANBAmogBEG4lcAAEK0CAAsgFigCBCEDIBYoAgghCUEAIQQgByEGIAghBQNAIAQgCU8NAiADIAMoAgAgBS0AAEEYdHI2AgAgA0EQaiEDIARBBGohBCAFQQFqIQUgBkEBayIGDQALCyAKKAIgIgYoAggiAyADIAopAxgiIKcgICADrSIhVhsiBU8EQAJAAkAgByADIAVrTQRAIAYoAgQgBWohAyAHQQFHBEAgCCADIAcQOxpBBCEDDAILIAggAy0AADoAAEEEIQMMAQsgCyEDICRCBFINAQsgICAjfCEhCyAKICE3AxggA0H/AXFBBEcNBAJAIBlFBEAgBw0BDAULIBJBA3EhBiAILQAAIQRBASEDIBhBA08EQCASQXxxIQlBACEFA0AgBSAIaiIDQQFqIg0gBCANLQAAaiIEOgAAIANBAmoiDSAEIA0tAABqIgQ6AAAgA0EDaiINIAQgDS0AAGoiBDoAACADQQRqIgMgBCADLQAAaiIEOgAAIAkgBUEEaiIFRw0ACyAFQQFqIQMLIAZFDQAgAyAIaiEDA0AgAyAEIAMtAABqIgQ6AAAgA0EBaiEDIAZBAWsiBg0ACwsgFigCBCEDIBYoAgghCUEAIQQgByEGIAghBQNAIAQgCU8NAyADIAMoAgAgBS0AAHI2AgAgA0EQaiEDIARBBGohBCAFQQFqIQUgBkEBayIGDQALDAMLDAcLIAQgCUGsj8AAEK0CAAsgBCAJQfyOwAAQrQIACwJAAkACQAJAAkACQAJAAkACQCAKKAIgIgYoAggiAyADIAopAxgiIKcgICADrSIhVhsiBU8EQAJAAkAgByADIAVrTQRAIAYoAgQgBWohAyAHQQFHBEAgCCADIAcQOxpBBCELDAILIAggAy0AADoAAEEEIQsMAQsgJEIEUg0BCyAgICN8ISELIAogITcDGCALQf8BcUEERwRAIAshAwwLCyAZRQ0BIBJBA3EhBiAILQAAIQRBASEDIBhBA08EQCASQXxxIQtBACEFA0AgBSAIaiIDQQFqIgkgBCAJLQAAaiIJOgAAIANBAmoiBCAJIAQtAABqIgk6AAAgA0EDaiIEIAkgBC0AAGoiCToAACADQQRqIgMgCSADLQAAaiIEOgAAIAsgBUEEaiIFRw0ACyAFQQFqIQMLIAZFDQIgAyAIaiEDA0AgAyAEIAMtAABqIgQ6AAAgA0EBaiEDIAZBAWsiBg0ACwwCCwwNCyAHRQ0BCyAWKAIEIQMgFigCCCELQQAhBCAHIQYgCCEFA0AgBCALTw0CIAMgAygCACAFLQAAQQh0cjYCACADQRBqIQMgBEEEaiEEIAVBAWohBSAGQQFrIgYNAAsLIAooAiAiBigCCCIDIAMgCikDGCIgpyAgIAOtIiFWGyIFSQ0KAkACQCAHIAMgBWtNBEAgBigCBCAFaiEDIAdBAUcEQCAIIAMgBxA7GkEEIQMMAgsgCCADLQAAOgAAQQQhAwwBC0Hg2cAAKQIAIiRCCIghIiAkpyEDICRC/wGDQgRSDQELICAgI3whIQsgCiAhNwMYIANB/wFxQQRHDQYgGUUNASASQQNxIQYgCC0AACEEQQEhAyAYQQNPBEAgEkF8cSELQQAhBQNAIAUgCGoiA0EBaiIJIAQgCS0AAGoiCToAACADQQJqIgQgCSAELQAAaiIJOgAAIANBA2oiBCAJIAQtAABqIgk6AAAgA0EEaiIDIAkgAy0AAGoiBDoAACALIAVBBGoiBUcNAAsgBUEBaiEDCyAGRQ0CIAMgCGohAwNAIAMgBCADLQAAaiIEOgAAIANBAWohAyAGQQFrIgYNAAsMAgsgBCALQYyPwAAQrQIACyAHRQ0BCyAWKAIEIQMgFigCCCELQQAhBCAHIQYgCCEFA0AgBCALTw0CIAMgAygCACAFLQAAQRB0cjYCACADQRBqIQMgBEEEaiEEIAVBAWohBSAGQQFrIgYNAAsLIAooAhQgCigCGEcNASAHBEAgCCAHQQEQpwQLIAooAgwiAwRAIAooAhAgA0EBEKcEC0EAIQMMBQsgBCALQZyPwAAQrQIACyAKQQA2AjggCkEBNgIsIApBkJXAADYCKCAKQgQ3AjAgCkEoahCrAiEDDAELIAogIj4AKSAKQS9qICJCMIg8AAAgCkEtaiAiQiCIPQAAIAogAzoAKCAKQShqEKIDIQMLIAdFDQAgCCAHQQEQpwQLIAooAgwiBUUNACAKKAIQIAVBARCnBAsgCkHwAGokACADDAELIApBADYCOCAKQQE2AiwgCkGs2cAANgIoIApCBDcCMCAKQShqQdjawAAQpAMACyIDRQRAIBogESkCIDcCACAaQRBqIBEpAgg3AgAgGkEIaiARQShqKQIANwIAIBpBGGogEUEQaigCADYCAAwBCyAaQYCAgIB4NgIQIBogAzYCACARKAIIIgNFDQAgESgCDCADQQJ0QQQQpwQLIBFB4ABqJAAMAQtBCCAIQZyRwAAQqgQACwJAAkACQCAPKAIoIgVBgICAgHhHBEAgDygCLCEGAn8gDygCMCILQQJ2IgMgAUUNABogAyACRQ0AGiABIAMgAW4iCCADIAEgCGxHaiIIIAIgAiAISxtsIgFFDQIgAyABbiICIAMgASACbEdqIAFsC0ECdBAWIQAQaSIBIAAmASAPIAE2AmQgDyAPQeQAakEAIAsQqQQ2AmggD0HoAGogBiALEOkBEAQhABBpIgEgACYBIA8gATYCbCAPQfSFwABBCRDbAyIBNgJYIAO4EAEhABBpIgIgACYBIA8gAjYCNCAPQRhqIA9B7ABqIA9B2ABqIA9BNGoQ3QIgDy0AGA0CIAJBhAFPBEAgAhDGASAPKAJYIQELIAFBhAFPBEAgARDGAQsgD0H9hcAAQQwQ2wMiATYCWCAPIA8oAmQiAjYCNCAPQRhqIA9B7ABqIA9B2ABqIA9BNGoQ3QIgDy0AGA0DIAJBhAFPBEAgAhDGASAPKAJYIQELIAFBhAFPBEAgARDGAQsgDygCbCAPKAJoIgJBhAFPBEAgAhDGAQsgBQRAIAYgBUECdEEEEKcECyAPKAIMIgIEQCAcIAJBARCnBAsgDygCCCICQYQBTwRAIAIQxgELIA9B8ABqJAAMBAsgDyAPKAIYNgJsIA9BATYCRCAPQeiGwAA2AkAgD0IBNwJMIA8gD0HsAGqtQoCAgIAghDcDWCAPIA9B2ABqNgJIIA9BNGogD0FAaxDQASAPKAI4IA8oAjwQyAQACyMAQSBrIgEkACABQQA2AhggAUEBNgIMIAFBmNnCADYCCCABQgQ3AhAgAUEIakHkhcAAEKQDAAsgDyAPKAIcNgJAQZyGwABBKyAPQUBrQYyGwABB2IbAABCgAgALIA8gDygCHDYCQEGchsAAQSsgD0FAa0GMhsAAQciGwAAQoAIACyIBJQEgARDGAQvvDgEOfxBpIgQgASYBEGkiBSACJgEjAEEgayIKJAAgCiAFNgIIIAogBDYCBCAKIAA2AgAgCiAKQQRqIgAoAgAQ2wQ2AgwgCiAKQQhqNgIcIAogCjYCGCAKIAA2AhQgCiAKQQxqNgIQIApBEGohACMAQUBqIggkAAJAAkACQAJAQQBBhIfAACgCABEEACINBEAgDSgCAEUEQCAAKAIMIQ8gACgCCCEHIA1BfzYCACAAKAIEIAAoAgAoAgAiBiANQQRqIgUoAggiBEsEQCAGIAQiAGsiCSAFKAIAIABrSwRAIAUgACAJQQJBAhCPASAFKAIIIQALIAUoAgQiDiAAQQF0aiEDIAlBAk8EQCADQQAgBEF/cyAGakEBdBBaGiAAIAZqQQF0IARBAXRrIA5qQQJrIQMgACAJakEBayEACyADQQA7AQAgBSAAQQFqNgIICyAFKAIUIgQgBkkEQCAGIAQiAGsiCSAFKAIMIABrSwRAIAVBDGogACAJQQRBBBCPASAFKAIUIQALIAUoAhAiDiAAQQJ0aiEDIAlBAk8EQCADQQAgBEF/cyAGakECdBBaGiAAIAZqQQJ0IARBAnRrIA5qQQRrIQMgACAJakEBayEACyADQQA2AgAgBSAAQQFqNgIUCyAFKAIgIgBBgPgBTQRAIAAhBEGB+AEgAGsiAyAFKAIYIABrSwRAIAVBGGogACADQQRBBBCPASAFKAIgIQQLIAUoAhwiBiAEQQJ0IglqIQMgAEGA+AFHBH8gA0EAQYDgByAAQQJ0IgNrEFoaIAQgAGtBgPgBaiEEIAkgA2sgBmpBgOAHagUgAwtBADYCACAFIARBAWo2AiALKAIAJQFBACAHKAIAEBUhARBpIgAgASYBIAggADYCDCAHKAIAIgQgDSgCDCIASw0CIA0oAgghCSMAQSBrIgAkACAAIAhBDGoiDCgCABDbBCIDNgIAIAAgBDYCBCADIARHBEAgAEEANgIIIAAgAEEEaiAAQQhqEIwDAAsQ7QMiAxDcAyIGJQEQCSEBEGkiBCABJgEgBkGEAU8EQCAGEMYBCyAEJQEgDCgCACUBIAlBAXYQCiAEQYQBTwRAIAQQxgELIANBhAFPBEAgAxDGAQsgAEEgaiQAIAcoAgAhDEEAIQcjAEFAaiIGJAACQCAMIAUoAggiAE0EQCAFKAIEIQQgBUEANgIgIAUoAhhBgPgBTQRAIAVBGGpBAEGB+AFBBEEEEI8BIAUoAiAhBwsgBSgCHCIJIAdBAnRqQQBBgOAHEFogBSAHQYH4AWoiDjYCIEGA4AdqQQA2AgACQCAMBEAgDEEBdCEDIAQhAANAIAAvAQAiC0GA+AFJBEAgCyAOTw0DIAkgC0ECdGoiCyALKAIAQQFqNgIACyAAQQJqIQAgA0ECayIDDQALCyAJIA5BAnRqQQhrIgAoAgAhAyAAQQA2AgAgBiADNgIIIAAgCUcEQCAHQQFrQQNxIgcEQANAIABBBGsiACgCACELIAAgAzYCACAGIAMgC2oiAzYCCCAHQQFrIgcNAAsLIABBEGshAANAIABBDGoiBygCACELIAcgAzYCACAGIAMgC2oiAzYCCCAAQQhqIgcoAgAhCyAHIAM2AgAgBiADIAtqIgM2AgggAEEEaiIHKAIAIQsgByADNgIAIAYgAyALaiIDNgIIIAAoAgAhByAAIAM2AgAgBiADIAdqIgM2AgggACAJRiAAQRBrIQBFDQALCyAMRQ0CIAxBAXQhByAFKAIQIRAgBSgCFCEMQQAhAANAIAQvAQAiBUGA+AFJBEACQCAFIA5JBEAgCSAFQQJ0aiIFKAIAIgsgDEkNASALIAxBmIXAABCtAgALIAUgDkGIhcAAEK0CAAsgECALQQJ0aiAANgIAIAUgBSgCAEEBajYCAAsgBEECaiEEIABBAWohACAHQQJrIgcNAAsMAgsgCyAOQaiFwAAQrQIACyAMIABB+ITAABCrBAALIAMgCSgCAEYEf0EABSAGQQI2AhwgBkHYhMAANgIYIAZCAjcCJCAGIAmtQoCAgIAQhDcDOCAGIAZBCGqtQoCAgIAQhDcDMCAGIAZBMGo2AiAgBkEMaiIAIAZBGGoQ0AEgABChAyEDQQELIQAgCCADNgIEIAggADYCACAGQUBrJAAgCCgCBCEAIAgoAgANAyAARQ0FIA0oAhgiBCAASQ0EIA0oAhQhBSAIIA9BACAAEKkEIgQ2AiAgCEEgaiAFIAAQ6QEgBEGEAUkNBSAEEMYBDAULENMCAAsQ0gIACyAEIABBqIvAABCrBAALIAggADYCECAIQQE2AiQgCEHEisAANgIgIAhCATcCLCAIIAhBEGqtQoCAgIAghDcDOCAIIAhBOGo2AiggCEEUaiAIQSBqENEBIAgoAhggCCgCHBDIBAALIAAgBEG4i8AAEKsEAAsgCCgCDCIEQYQBTwRAIAQQxgELIA0gDSgCAEEBajYCACAIQUBrJAAgCigCCCIEQYQBTwRAIAQQxgELIAooAgQiBEGEAU8EQCAEEMYBCyAKQSBqJAAgAAsaAQF/IAAoAgAiAQRAIAAoAgQgAUEBEKcECwsaAQF/IAAoAgQiAQRAIAAoAgAgAUEBEKcECwscACAAKAIAIgAoAgAgASAAQQRqKAIAKAIMEQAACxQAIAEgASAAIAAgAV0bIAAgAFwbCxoBAW8gACUBIAEgAhAMIQMQaSIAIAMmASAAC0MAIABFBEAjAEEgayIAJAAgAEEANgIYIABBATYCDCAAQfi+wgA2AgggAEIENwIQIABBCGogAhCkAwALIAAgARDTBAALGAAgALxBgICAgHhxQf////cDcr4gAJKPCxUAIAAoAgAiAEGEAU8EQCAAEMYBCwscACAAQQA2AhAgAEIANwIIIABCgICAgMAANwIACxYBAW8gACABEAAhAhBpIgAgAiYBIAALFgEBbyAAJQEQBSEBEGkiACABJgEgAAsWAQFvIAAlARAGIQEQaSIAIAEmASAACxYAIABBtIHAADYCBCAAIAFBHGo2AgAL2gYBBn8CfwJAAkACQAJAAkAgAEEEayIFKAIAIgZBeHEiBEEEQQggBkEDcSIHGyABak8EQCAHQQAgAUEnaiIJIARJGw0BAkACQCACQQlPBEAgAiADEGUiCA0BQQAMCQsgA0HM/3tLDQFBECADQQtqQXhxIANBC0kbIQECQCAHRQRAIAFBgAJJIAQgAUEEcklyIAQgAWtBgYAIT3INAQwJCyAAQQhrIgIgBGohBwJAAkACQAJAIAEgBEsEQCAHQdTowgAoAgBGDQQgB0HQ6MIAKAIARg0CIAcoAgQiBkECcQ0FIAZBeHEiBiAEaiIEIAFJDQUgByAGEHUgBCABayIDQRBJDQEgBSABIAUoAgBBAXFyQQJyNgIAIAEgAmoiASADQQNyNgIEIAIgBGoiAiACKAIEQQFyNgIEIAEgAxBYDA0LIAQgAWsiA0EPSw0CDAwLIAUgBCAFKAIAQQFxckECcjYCACACIARqIgEgASgCBEEBcjYCBAwLC0HI6MIAKAIAIARqIgQgAUkNAgJAIAQgAWsiA0EPTQRAIAUgBkEBcSAEckECcjYCACACIARqIgEgASgCBEEBcjYCBEEAIQNBACEBDAELIAUgASAGQQFxckECcjYCACABIAJqIgEgA0EBcjYCBCACIARqIgIgAzYCACACIAIoAgRBfnE2AgQLQdDowgAgATYCAEHI6MIAIAM2AgAMCgsgBSABIAZBAXFyQQJyNgIAIAEgAmoiASADQQNyNgIEIAcgBygCBEEBcjYCBCABIAMQWAwJC0HM6MIAKAIAIARqIgQgAUsNBwsgAxAeIgFFDQEgASAAQXxBeCAFKAIAIgFBA3EbIAFBeHFqIgEgAyABIANJGxA7IAAQPgwICyAIIAAgAyABIAEgA0sbEDsaIAUoAgAiAkF4cSIDIAFBBEEIIAJBA3EiAhtqSQ0DIAJBACADIAlLGw0EIAAQPgsgCAwGC0H9lMIAQS5BrJXCABDtAgALQbyVwgBBLkHslcIAEO0CAAtB/ZTCAEEuQayVwgAQ7QIAC0G8lcIAQS5B7JXCABDtAgALIAUgASAGQQFxckECcjYCACABIAJqIgIgBCABayIBQQFyNgIEQczowgAgATYCAEHU6MIAIAI2AgAgAAwBCyAACwsWACAAQdy2wAA2AgQgACABQSBqNgIACxYAIABBmLfAADYCBCAAIAFBHGo2AgALFgAgAEHUt8AANgIEIAAgAUEcajYCAAsWACAAQZC4wAA2AgQgACABQRxqNgIACxkAIAEoAhxBlMHCAEEOIAEoAiAoAgwRAgALFgAgACgCHCABIAIgACgCICgCDBECAAvzAQEDf0Hw5MIAKAIARQRAAkACQAJAAkAgAEUNACAAKAIAIABBADYCAEEBcUUNACAAKAIQIQEgACgCDCECIAAoAgghAyAAKAIEIQAMAQtBACEAQYXlwgAtAAAaQYCAECEBQYCAECEDQYCAwABBBBD2AyICRQ0BC0GA5cIAIAE2AgBB9OTCACAANgIAQfzkwgAoAgAhAUH85MIAIAI2AgBB+OTCACgCACEAQfjkwgAgAzYCAEHw5MIAKAIAQfDkwgBBATYCAEUgAEVyRQRAIAEgAEECdEEEEKcECwwBC0EEQYCAwABB1IXAABDXAwALC0H05MIAC/sCAQl/QcTkwgAoAgBFBEACfwJAIABFDQAgACgCACAAQQA2AgBBAXFFDQAgACgCKCEBIAAoAiQhByAAKAIgIQIgACgCHCEDIAAoAhghCCAAKAIUIQQgACgCECEFIAAoAgwhCSAAKAIIIQYgACgCBAwBC0EEIQdBACEBQQQhCEEEIQlBAAshAEHs5MIAIAE2AgBB4OTCACADNgIAQdTkwgAgBTYCAEHI5MIAIAA2AgBB6OTCACgCACEFQejkwgAgBzYCAEHk5MIAKAIAIQBB5OTCACACNgIAQdzkwgAoAgAhAUHc5MIAIAg2AgBB2OTCACgCACECQdjkwgAgBDYCAEHQ5MIAKAIAIQRB0OTCACAJNgIAQczkwgAoAgAhA0HM5MIAIAY2AgBBxOTCACgCACEGQcTkwgBBATYCAAJAIAZFDQAgAwRAIAQgA0ECdEEEEKcECyACBEAgASACQQJ0QQQQpwQLIABFDQAgBSAAQQJ0QQQQpwQLC0HI5MIAC/sCAQl/QZjkwgAoAgBFBEACfwJAIABFDQAgACgCACAAQQA2AgBBAXFFDQAgACgCKCEBIAAoAiQhByAAKAIgIQIgACgCHCEDIAAoAhghCCAAKAIUIQQgACgCECEFIAAoAgwhCSAAKAIIIQYgACgCBAwBC0ECIQlBBCEHQQAhAUEEIQhBAAshAEHA5MIAIAE2AgBBtOTCACADNgIAQajkwgAgBTYCAEGc5MIAIAA2AgBBvOTCACgCACEFQbzkwgAgBzYCAEG45MIAKAIAIQBBuOTCACACNgIAQbDkwgAoAgAhAUGw5MIAIAg2AgBBrOTCACgCACECQazkwgAgBDYCAEGk5MIAKAIAIQRBpOTCACAJNgIAQaDkwgAoAgAhA0Gg5MIAIAY2AgBBmOTCACgCACEGQZjkwgBBATYCAAJAIAZFDQAgAwRAIAQgA0EBdEECEKcECyACBEAgASACQQJ0QQQQpwQLIABFDQAgBSAAQQJ0QQQQpwQLC0Gc5MIACxQAIAAoAgAgASAAKAIEKAIQEQAACxQAIAAoAgAgASAAKAIEKAIMEQAACxQAIAAoAhwgASAAKAIgKAIQEQAAC9MIAQV/IwBB8ABrIgUkACAFIAM2AgwgBSACNgIIAkACQAJAAkACQAJAIAUCfyAAAn8CQCABQYECTwRAQQMgACwAgAJBv39KDQIaIAAsAP8BQb9/TA0BQQIMAgsgBSABNgIUIAUgADYCEEEBIQZBAAwCCyAALAD+AUG/f0oLQf0BaiIGaiwAAEG/f0wNASAFIAY2AhQgBSAANgIQQdDKwgAhBkEFCzYCHCAFIAY2AhggASACSSIGIAEgA0lyRQRAIAIgA0sNAiACRSABIAJNckUEQCAFQQxqIAVBCGogACACaiwAAEG/f0obKAIAIQMLIAUgAzYCICADIAEiAkkEQCADQQFqIgcgA0EDayICQQAgAiADTRsiAkkNBAJAIAIgB0YNACAHIAJrIQggACADaiwAAEG/f0oEQCAIQQFrIQYMAQsgAiADRg0AIAAgB2oiA0ECayIJLAAAQb9/SgRAIAhBAmshBgwBCyAJIAAgAmoiB0YNACADQQNrIgksAABBv39KBEAgCEEDayEGDAELIAcgCUYNACADQQRrIgMsAABBv39KBEAgCEEEayEGDAELIAMgB0YNACAIQQVrIQYLIAIgBmohAgsCQCACRQ0AIAEgAk0EQCABIAJGDQEMBwsgACACaiwAAEG/f0wNBgsgASACRg0EAn8CQAJAIAAgAmoiASwAACIAQQBIBEAgAS0AAUE/cSEGIABBH3EhAyAAQV9LDQEgA0EGdCAGciEADAILIAUgAEH/AXE2AiRBAQwCCyABLQACQT9xIAZBBnRyIQYgAEFwSQRAIAYgA0EMdHIhAAwBCyADQRJ0QYCA8ABxIAEtAANBP3EgBkEGdHJyIgBBgIDEAEYNBgsgBSAANgIkQQEgAEGAAUkNABpBAiAAQYAQSQ0AGkEDQQQgAEGAgARJGwshACAFIAI2AiggBSAAIAJqNgIsIAVBBTYCNCAFQdjLwgA2AjAgBUIFNwI8IAUgBUEYaq1CgICAgJDEAIQ3A2ggBSAFQRBqrUKAgICAkMQAhDcDYCAFIAVBKGqtQoCAgICwxACENwNYIAUgBUEkaq1CgICAgMDEAIQ3A1AgBSAFQSBqrUKAgICAEIQ3A0gMBgsgBSACIAMgBhs2AiggBUEDNgI0IAVBmMzCADYCMCAFQgM3AjwgBSAFQRhqrUKAgICAkMQAhDcDWCAFIAVBEGqtQoCAgICQxACENwNQIAUgBUEoaq1CgICAgBCENwNIDAULIAAgAUEAIAYgBBDsAwALIAVBBDYCNCAFQfjKwgA2AjAgBUIENwI8IAUgBUEYaq1CgICAgJDEAIQ3A2AgBSAFQRBqrUKAgICAkMQAhDcDWCAFIAVBDGqtQoCAgIAQhDcDUCAFIAVBCGqtQoCAgIAQhDcDSAwDCyACIAdBsMzCABCsBAALIAQQrgQACyAAIAEgAiABIAQQ7AMACyAFIAVByABqNgI4IAVBMGogBBCkAwALFAIBbwF/EBwhABBpIgEgACYBIAELEwAgAEEoNgIEIABBgIDAADYCAAsgACAAQtXs7rbz2sHXSzcDCCAAQrn13fLSq/jYETcDAAsTACAAQfCBwAA2AgQgACABNgIACxAAIAAoAgQgACgCCCABEDALEQAgACgCBCAAKAIIIAEQ1QQLEwAgAEEoNgIEIABB2IvAADYCAAshACAAQvy0pPP2z/uuxAA3AwggAELk7Puo4OKsxmo3AwALGQACfyABQQlPBEAgASAAEGUMAQsgABAeCws6AAJAAn8gAUEJTwRAIAEgABBlDAELIAAQHgsiAUUNACABQQRrLQAAQQNxRQ0AIAFBACAAEFoaCyABCxMAIABBKDYCBCAAQdiVwAA2AgALIgAgAEK9i+HvyI377t8ANwMIIABCiITn+s3+j4OKfzcDAAshACAAQoaY8YHS0uCozQA3AwggAELwgJS4o8zQ9hc3AwALIgAgAELMjMSn19CF/vgANwMIIABCtPOHgpX6kcv1ADcDAAsTACAAQZybwAA2AgQgACABNgIACxMAIABBKDYCBCAAQYy2wAA2AgALEwAgAEHMuMAANgIEIAAgATYCAAsTACAAQYi5wAA2AgQgACABNgIACxMAIABBxLnAADYCBCAAIAE2AgALEwAgAEGAusAANgIEIAAgATYCAAsTACAAQbC+wAA2AgQgACABNgIACxMAIABBKDYCBCAAQYjbwAA2AgALEwAgAEGA4cAANgIEIAAgATYCAAshACAAQqTFo/yfjvDjADcDCCAAQqqooLmusOaw6QA3AwALEAAgACgCACAAKAIEIAEQMAsRACAAKAIAIAAoAgQgARDVBAsiACAAQsuH6/rgqLu20AA3AwggAELEr9zF2tKv9bh/NwMACxMAIABBKDYCBCAAQcCFwQA2AgALEwAgAEHEicEANgIEIAAgATYCAAsgACAAQrz8k7Ko16DsTDcDCCAAQuuYqJm2gbKefzcDAAshACAAQriynYTMrpfUQjcDCCAAQu/Dv6KOjcrEoH83AwALIAAgAEKcnaLxgrvwoHU3AwggAELRqsqvpcqt8kA3AwALIQAgAEL7wqCWlfy/yHo3AwggAELmsfLlkYe/ybF/NwMACyIAIABC9auQ77TsvKaWfzcDCCAAQrHh7P30uYbLwgA3AwALIAAgAELNnq77nqC2sEE3AwggAELxps+Y0aSn/gE3AwALIAAgAEK3v8ue+N2SoEM3AwggAEKvuaX0x5vV+zA3AwALIQAgAEKWl7rs79nZo3Q3AwggAEKH+OXLhuPSwtQANwMACyEAIABC/O6Qyq7osdU1NwMIIABC2OvVj+a1zN2OfzcDAAshACAAQrzprN2Y1v7ui383AwggAEKk3Nqt0/nNwEU3AwALIQAgAELl6obQ6cP/7Xk3AwggAEL30OLk1cPQ6ad/NwMACyEAIABC5sHsgPKk3YtlNwMIIABChu7u8+efmIeefzcDAAshACAAQs7Is8mT6a+2pX83AwggAELt66KMv7HLkg83AwALIgAgAEKcrtGn56WAwMIANwMIIABC16rLiaf+wYLHADcDAAsiACAAQt3+weC9o+rogn83AwggAEKX2/aYrfP7zY5/NwMACyEAIABCgsDc4LCv07mnfzcDCCAAQpbk17fDtcOKAzcDAAshACAAQrvV0cb1jfDEkH83AwggAELVi9bpuKS4kXk3AwALIQAgAEKynOer2rGju98ANwMIIABCvfif/8L+hsNVNwMACyIAIABC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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAAVwAAAFYAAABgERAAWAAAAFkAAABaAAAAWwAAAFwAAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAA/wAAAFYAAAD0IhAAAAEAAFkAAAABAQAAWwAAAAIBAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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bEVuY29kaW5nSW52YWxpZENoYXJFbmNvZGluZwAAAAAAAAAEAAAABAAAAEEAAABJbnZhbGlkVGFnRW5jb2RpbmdEZXNlcmlhbGl6ZUFueU5vdFN1cHBvcnRlZFNpemVMaW1pdFNlcXVlbmNlTXVzdEhhdmVMZW5ndGgAAAAAAAQAAAAEAAAANQEAAEN1c3RvbU5vbmVTb21lUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVkAAAAAAAABAAAAAQAAAA2AQAAVG9vTWFueUJpdHNudW1fcmVxdWVzdGVkX2JpdHNsaW1pdE5vdEVub3VnaFJlbWFpbmluZ0JpdHNyZXF1ZXN0ZWRyZW1haW5pbmdBY2NMb2dJc1plcm8AAAAAAAABAAAAAQAAADcBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAA4AQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAAA5AQAARwAAAHAwEAA6AQAASQAAADsBAABKAAAAPAEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABNAAAAUmVhZEZyYW1lSGVhZGVyRXJyb3IAAAAABAAAAAQAAABOAAAARnJhbWVIZWFkZXJFcnJvcldpbmRvd1NpemVUb29CaWcAAAAABAAAAAQAAABPAAAARGljdGlvbmFyeURlY29kZUVycm9yAAAAAAAAAAQAAAAEAAAAUAAAAEZhaWxlZFRvUmVhZEJsb2NrSGVhZGVyAAAAAAAEAAAABAAAAFEAAABGYWlsZWRUb1JlYWRCbG9ja0JvZHlGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzRXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzVG9vTWFueVdlaWdodHNNaXNzaW5nV2VpZ2h0c0xlZnRvdmVySXNOb3RBUG93ZXJPZjJOb3RFbm91Z2hCeXRlc1RvRGVjb21wcmVzc1dlaWdodHNoYXZlRlNFVGFibGVVc2VkVG9vTWFueUJ5dGVzdXNlZGF2YWlsYWJsZV9ieXRlc05vdEVub3VnaEJ5dGVzSW5Tb3VyY2VXZWlnaHRCaWdnZXJUaGFuTWF4TnVtQml0c01heEJpdHNUb29IaWdoAAAAAAAAAAEAAAABAAAAVgAAAAAAAAABAAAAAQAAAD0BAABWAAAAIDQQAD4BAABZAAAAPwEAAFsAAABAAQAAVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZVplcm9PZmZzZXROb3RFbm91Z2hCeXRlc0Zvck51bVNlcXVlbmNlcwAAAAAABAAAAAQAAABdAAAARXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlAAAAQQEAAAwAAAAEAAAAXwAAAEEBAAAMAAAABAAAAEIBAABfAAAAKDUQAEMBAABiAAAAOwEAAGMAAAA8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YWxzbmVlZGVkAAAAAAAABAAAAAQAAABjAQAAQml0c3RyZWFtUmVhZE1pc21hdGNocmVhZF90aWxEZWNvZGVkTGl0ZXJhbENvdW50TWlzbWF0Y2hkZWNvZGVkAGQBAAAUAAAABAAAALQAAABkAQAAFAAAAAQAAABlAQAAtAAAAMQ8EABmAQAAtwAAADsBAAC4AAAAPAEAAAAAAAAMAAAABAAAALkAAAAAAAAADAAAAAQAAABnAQAAuQAAAAA9EAA6AQAAuwAAADsBAABKAAAAPAEAAGgBAAAYAAAABAAAAL0AAABoAQAAGAAAAAQAAABpAQAAvQAAADw9EABqAQAAwAAAADsBAADBAAAAPAEAAAAAAAAMAAAABAAAAMIAAAAAAAAADAAAAAQAAABrAQAAwgAAAHg9EABsAQAAxQAAADsBAADGAAAAPAEAAElsbGVnYWxMaXRlcmFsU2VjdGlvblR5cGVOb3RFbm91Z2hCeXRlc25lZWRfYXRfbGVhc3QDAAAAAwAAAAoAAAAIAAAA8i4QAPUuEAD4LhAAAi8QAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAAAIPhAAbQAAACoCAAARAAAAYW4gYXJyYXkgb2YgbGVuZ3RoIDQAAAAAAAAAAAEAAABtAQBBtP3AAAv1KAEAAABtAQAAAAAAAAgAAAAEAAAAbgEAAHN0cnVjdCBXbGcwSGVhZGVyIHdpdGggNyBlbGVtZW50cwAAAMw+EAAhAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogaW52YWxpZCBPbmNlIHN0YXRl+D4QADwAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvb25jZS9ub190aHJlYWRzLnJzPD8QAHwAAAA1AAAAEgAAAGZhaWxlZCB0byBmaWxsIHdob2xlIGJ1ZmZlcgDIPxAAGwAAACUAAAACAAAA5D8QAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2RpbmcvYmxvY2tfZGVjb2Rlci5yc0J1ZyBpbiB0aGlzIGxpYnJhcnkA+D8QAGwAAACYAAAAFgAAAFdyb25nIG51bWJlciBvZiBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiAAAIhAEAAaAAAAokAQABQAAAD4PxAAbAAAAK0AAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uID09IHVwcGVyX2xpbWl0X2Zvcl9saXRlcmFscyBhcyB1MzIA+D8QAGwAAACzAAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHUzMjo6ZnJvbShieXRlc19pbl9saXRlcmFsc19oZWFkZXIpICsgYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uICsKICAgICAgICAgICAgdTMyOjpmcm9tKGJ5dGVzX2luX3NlcXVlbmNlX2hlYWRlcikgKyByYXcubGVuKCkgYXMgdTMyID09CiAgICBoZWFkZXIuY29udGVudF9zaXplAAD4PxAAbAAAAMEAAAAJAAAA+D8QAGwAAAC6AAAAFwAAAPg/EABsAAAAiwAAABcAAABIb3cgZGlkIHlvdSBldmVuIGdldCB0aGlzLiBUaGUgZGVjb2RlciBzaG91bGQgZXJyb3Igb3V0IGlmIGl0IGRldGVjdHMgYSByZXNlcnZlZC10eXBlIGJsb2NrAPg/EABsAAAAcAAAABEAAABmYWlsZWQgdG8gZmlsbCB3aG9sZSBidWZmZXIAkEIQABsAAAAlAAAAAgAAAKxCEABkZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBEaXNwbGF5AAAAAAQAAAAEAAAAbwEAAAAAAAAEAAAABAAAAHABAABVdGY4RXJyb3J2YWxpZF91cF90b2Vycm9yX2xlblJhd1JMRUNvbXByZXNzZWRSZXNlcnZlZAAAAAAAAAAEAAAABAAAAEAAAABUb29NYW55Qml0c251bV9yZXF1ZXN0ZWRfYml0c2xpbWl0AAAAAAAABAAAAAQAAABBAAAATm90RW5vdWdoUmVtYWluaW5nQml0c3JlcXVlc3RlZHJlbWFpbmluZ0FjY0xvZ0lzWmVybwAAAAABAAAAAQAAAHEBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAByAQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAABzAQAARwAAALREEABKAAAASQAAAHQBAABKAAAAdQEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzAAAAAAAAAAQAAAAEAAAAVQAAAEV4dHJhUGFkZGluZ3NraXBwZWRfYml0c1Rvb01hbnlXZWlnaHRzTWlzc2luZ1dlaWdodHNMZWZ0b3ZlcklzTm90QVBvd2VyT2YyTm90RW5vdWdoQnl0ZXNUb0RlY29tcHJlc3NXZWlnaHRzaGF2ZUZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaAAAAAABAAAAAQAAAFYAAAAAAAAAAQAAAAEAAAB2AQAAVgAAACRHEABbAAAAWQAAAHcBAABbAAAAeAEAAFVuc3VwcG9ydGVkT2Zmc2V0b2Zmc2V0X2NvZGVaZXJvT2Zmc2V0Tm90RW5vdWdoQnl0ZXNGb3JOdW1TZXF1ZW5jZXMAAAAAAAQAAAAEAAAAXQAAAEV4dHJhQml0c2JpdHNfcmVtYWluaW5nTWlzc2luZ0NvbXByZXNzaW9uTW9kZU1pc3NpbmdCeXRlRm9yUmxlTGxUYWJsZU1pc3NpbmdCeXRlRm9yUmxlT2ZUYWJsZU1pc3NpbmdCeXRlRm9yUmxlTWxUYWJsZQAAAHkBAAAMAAAABAAAAF8AAAB5AQAADAAAAAQAAAB6AQAAXwAAACxIEAB7AQAAYgAAAHQBAABjAAAAdQEAAAAAAAAQAAAACAAAAGQAAAAAAAAAEAAAAAgAAAB8AQAAZAAAAGhIEAB9AQAAZwAAAH4BAABoAAAAfwEAAIABAAAYAAAABAAAAGoAAACAAQAAGAAAAAQAAACBAQAAagAAAKRIEACCAQAAbQAAAHQBAABuAAAAdQEAAIMBAAAIAAAABAAAAHAAAACDAQAACAAAAAQAAACEAQAAcAAAAOBIEACFAQAAcwAAAHQBAAB0AAAAdQEAAIYBAAAYAAAABAAAAHYAAACGAQAAGAAAAAQAAACHAQAAdgAAABxJEACIAQAAeQAAAHQBAAB6AAAAdQEAAIkBAAAIAAAABAAAACUAAACJAQAACAAAAAQAAAAmAAAAJQAAAFhJEAAnAAAAKAAAACkAAAAqAAAAdQEAAAAAAAAMAAAABAAAAHsAAAAAAAAADAAAAAQAAACKAQAAewAAAJRJEACLAQAAfgAAAHQBAAB/AAAAdQEAAIwBAAAUAAAABAAAAIEAAACMAQAAFAAAAAQAAACNAQAAgQAAANBJEACOAQAAhAAAAHQBAACFAAAAdQEAAAAAAAAEAAAABAAAAFIAAABSZWFkRXJyb3JGb3VuZFJlc2VydmVkQmxvY2sAAAAAAAQAAAAEAAAAhgAAAEJsb2NrVHlwZUVycm9yAAAAAAAABAAAAAQAAACHAAAAQmxvY2tTaXplRXJyb3JCbG9ja0NvbnRlbnRSZWFkRXJyb3JNYWxmb3JtZWRTZWN0aW9uSGVhZGVyZXhwZWN0ZWRfbGVucmVtYWluaW5nX2J5dGVzAAAAAAQAAAAEAAAAiAAAAERlY29tcHJlc3NMaXRlcmFsc0Vycm9yAAAAAAAEAAAABAAAAIkAAABMaXRlcmFsc1NlY3Rpb25QYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAigAAAFNlcXVlbmNlc0hlYWRlclBhcnNlRXJyb3IAAAAAAAAABAAAAAQAAACLAAAARGVjb2RlU2VxdWVuY2VFcnJvcgAAAAAABAAAAAQAAACMAAAARXhlY3V0ZVNlcXVlbmNlc0Vycm9ySW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnTWFnaWNOdW1iZXJSZWFkRXJyb3JCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvclNraXBGcmFtZW1hZ2ljX251bWJlcmxlbmd0aAAAAAAAAAQAAAAEAAAAjQAAAEJhZE1hZ2ljTnVtAAAAAAAEAAAABAAAAI4AAABIdWZmbWFuVGFibGVFcnJvcgAAAAAAAAAEAAAABAAAAI8AAABEZWNvZGVidWZmZXJFcnJvck5vdEVub3VnaEJ5dGVzRm9yU2VxdWVuY2V3YW50ZWQAAAAAAQAAAAEAAACQAAAAAAAAAAEAAAABAAAAjwEAAJAAAADUTBAAWwAAAJIAAAB3AQAAWwAAAHgBAAAAAAAABAAAAAQAAACTAAAAAAAAAAQAAAAEAAAAkAEAAJMAAAAQTRAASgAAAJUAAAB0AQAASgAAAHUBAACRAQAAFAAAAAQAAACXAAAAkQEAABQAAAAEAAAAkgEAAJcAAABMTRAAkwEAAJoAAAB0AQAAmwAAAHUBAAAAAAAADAAAAAQAAACcAAAAAAAAAAwAAAAEAAAAlAEAAJwAAACITRAAlQEAAJ8AAAB0AQAAoAAAAHUBAAAAAAAACAAAAAQAAAChAAAAAAAAAAgAAAAEAAAAlgEAAKEAAADETRAASgAAAKMAAAB0AQAASgAAAHUBAACXAQAAFAAAAAQAAAClAAAAlwEAABQAAAAEAAAAmAEAAKUAAAAAThAAmQEAAKgAAAB0AQAAqQAAAHUBAAAAAAAADAAAAAQAAACqAAAAAAAAAAwAAAAEAAAAmgEAAKoAAAA8ThAAmwEAAK0AAAB0AQAArgAAAHUBAABEZWNvZGVyU3RhdGVJc0ZhaWxlZEV4cGVjdGVkSGVhZGVyT2ZQcmV2aW91c0Jsb2NrAAAAAAAAAAEAAAABAAAAnAEAAHN0ZXBzb3VyY2UAAAAAAAAEAAAABAAAALAAAABEZWNvbXByZXNzQmxvY2tFcnJvck1pc3NpbmdDb21wcmVzc2VkU2l6ZU1pc3NpbmdOdW1TdHJlYW1zAAAAAAAABAAAAAQAAACxAAAASHVmZm1hbkRlY29kZXJFcnJvclVuaW5pdGlhbGl6ZWRIdWZmbWFuVGFibGVNaXNzaW5nQnl0ZXNGb3JKdW1wSGVhZGVyTWlzc2luZ0J5dGVzRm9yTGl0ZXJhbHNuZWVkZWQAAAAAAAAEAAAABAAAAJ0BAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAngEAABQAAAAEAAAAtAAAAJ4BAAAUAAAABAAAAJ8BAAC0AAAA2E8QAKABAAC3AAAAdAEAALgAAAB1AQAAAAAAAAwAAAAEAAAAuQAAAAAAAAAMAAAABAAAAKEBAAC5AAAAFFAQAEoAAAC7AAAAdAEAAEoAAAB1AQAAogEAABgAAAAEAAAAvQAAAKIBAAAYAAAABAAAAKMBAAC9AAAAUFAQAKQBAADAAAAAdAEAAMEAAAB1AQAAAAAAAAwAAAAEAAAAwgAAAAAAAAAMAAAABAAAAKUBAADCAAAAjFAQAMYAAADFAAAAdAEAAMYAAAB1AQAASWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzbmVlZF9hdF9sZWFzdAMAAAADAAAACgAAAAgAAAAlQxAAKEMQACtDEAA1QxAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9zdGQvc3JjL2lvL21vZC5ycwAAHFEQAGoAAACyAQAAMQAAAGFzc2VydGlvbiBmYWlsZWQ6IGZpbGxlZCA8PSBzZWxmLmJ1Zi5pbml0L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9jb3JlL3NyYy9pby9ib3Jyb3dlZF9idWYucnMAAADBURAAdAAAAB0BAAAJAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnNIUhAAgAAAAFgCAAAwAAAASW52YWxpZCBGcmFtZV9Db250ZW50X1NpemVfRmxhZzsgSXM6ICwgU2hvdWxkIGJlIG9uZSBvZjogMCwgMSwgMiwgMwDYUhAAJQAAAP1SEAAeAEG0psEAC8piwAMAAHdpbmRvd19zaXplIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bS4gSXM6ICwgU2hvdWxkIGJlIGxvd2VyIHRoYW46IAAAADhTEAAtAAAAZVMQABgAAAAABAAAAAAAAHdpbmRvd19zaXplIHNtYWxsZXIgdGhhbiBhbGxvd2VkIG1pbmltdW0uIElzOiAsIFNob3VsZCBiZSBncmVhdGVyIHRoYW46IJhTEAAuAAAAxlMQABoAAAABAAAAAAAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gZGljdF9pZC4gSXM6ICwgU2hvdWxkIGJlOiAAAPhTEAAhAAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQgbGVuZ3RoLiBJczogADhUEAA3AAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgd2FzIHplcm9JbnZhbGlkIGZyYW1lX2NvbnRlbnRfc2l6ZS4gSXM6ICwgU2hvdWxkIGJlIG9uZSBvZiAxLCAyLCA0LCA4IGJ5dGVzAACbVBAAIAAAALtUEAAjAAAARXJyb3Igd2hpbGUgcmVhZGluZyBtYWdpYyBudW1iZXI6IAAA8FQQACIAAABSZWFkIHdyb25nIG1hZ2ljIG51bWJlcjogMHgAHFUQABsAAABFcnJvciB3aGlsZSByZWFkaW5nIGZyYW1lIGRlc2NyaXB0b3I6IAAAQFUQACYAAABFcnJvciB3aGlsZSByZWFkaW5nIHdpbmRvdyBkZXNjcmlwdG9yOiAAcFUQACcAAABFcnJvciB3aGlsZSByZWFkaW5nIGRpY3Rpb25hcnkgaWQ6IACgVRAAIwAAAEVycm9yIHdoaWxlIHJlYWRpbmcgZnJhbWUgY29udGVudCBzaXplOiDMVRAAKAAAAFNraXBwYWJsZUZyYW1lIGVuY291bnRlcmVkIHdpdGggTWFnaWNOdW1iZXIgMHggYW5kIGxlbmd0aCAgYnl0ZXP8VRAALgAAACpWEAAMAAAANlYQAAYAAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBoZWFkZXJSZXNlcnZlZCBibG9jayBvY2N1cmVkLiBUaGlzIGlzIGNvbnNpZGVyZWQgY29ycnVwdGlvbiBieSB0aGUgZG9jdW1lbnRhdGlvbkVycm9yIGdldHRpbmcgYmxvY2sgdHlwZTogwlYQABoAAABFcnJvciBnZXR0aW5nIGJsb2NrIGNvbnRlbnQgc2l6ZTogAADkVhAAIgAAAEludmFsaWQgQmxvY2t0eXBlIG51bWJlci4gSXM6ICBTaG91bGQgYmUgb25lIG9mOiAwLCAxLCAyLCAzICgzIGlzIHJlc2VydmVkIHRob3VnaAAAABBXEAAeAAAALlcQADMAAAAAAAIAQmxvY2tzaXplIHdhcyBiaWdnZXIgdGhhbiB0aGUgYWJzb2x1dGUgbWF4aW11bSAgKDEyOGtiKS4gSXM6IAAAAHhXEAAvAAAAp1cQAA4AAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBjb250ZW50OiAAyFcQACcAAABNYWxmb3JtZWQgc2VjdGlvbiBoZWFkZXIuIFNheXMgbGl0ZXJhbHMgd291bGQgYmUgdGhpcyBsb25nOiAgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBsZWZ0APhXEAA8AAAANFgQABQAAABIWBAACwAAAENhbid0IGRlY29kZSBuZXh0IGJsb2NrIGlmIGZhaWxlZCBhbG9uZyB0aGUgd2F5LiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VDYW4ndCBkZWNvZGUgbmV4dCBibG9jayBib2R5LCB3aGlsZSBleHBlY3RpbmcgdG8gZGVjb2RlIHRoZSBoZWFkZXIgb2YgdGhlIHByZXZpb3VzIGJsb2NrLiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VFcnJvciB3aGlsZSByZWFkaW5nIGJ5dGVzIGZvciA6IAAnWRAAHgAAAEVZEAACAAAATmVlZCAgYnl0ZXMgZnJvbSB0aGUgZGljdGlvbmFyeSBidXQgaXQgaXMgb25seSAgYnl0ZXMgbG9uZwAAWFkQAAUAAABdWRAAKgAAAIdZEAALAAAAb2Zmc2V0OiAgYmlnZ2VyIHRoYW4gYnVmZmVyOiAAAACsWRAACAAAALRZEAAVAAAAQmFkIG1hZ2ljX251bSBhdCBzdGFydCBvZiB0aGUgZGljdGlvbmFyeTsgR290OiAsIEV4cGVjdGVkOiAA3FkQAC8AAAALWhAADAAAADekMOxTcGVjaWZpZWQgd2luZG93X3NpemUgaXMgdG9vIGJpZzsgUmVxdWVzdGVkOiAsIE1heDogLFoQAC0AAABZWhAABwAAAEZhaWxlZCB0byBwYXJzZS9kZWNvZGUgYmxvY2sgYm9keTogAHBaEAAjAAAARmFpbGVkIHRvIHBhcnNlIGJsb2NrIGhlYWRlcjogAACcWhAAHgAAAEZhaWxlZCB0byByZWFkIGNoZWNrc3VtOiAAAADEWhAAGQAAAERlY29kZXIgbXVzdCBpbml0aWFsaXplZCBvciByZXNldCBiZWZvcmUgdXNpbmcgaXREZWNvZGVyIGVuY291bnRlcmVkIGVycm9yIHdoaWxlIGluaXRpYWxpemluZzogABlbEAAuAAAARGVjb2RlciBlbmNvdW50ZXJlZCBlcnJvciB3aGlsZSBkcmFpbmluZyB0aGUgZGVjb2RlYnVmZmVyOiAAUFsQADsAAABGYWlsZWQgdG8gc2tpcCBieXRlcyBmb3IgdGhlIGxlbmd0aCBnaXZlbiBpbiB0aGUgZnJhbWUgaGVhZGVyVGFyZ2V0IG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGJ5dGVzIGFzIHRoZSBjb250ZW50c2l6ZSBvZiB0aGUgZnJhbWUgcmVwb3J0c0ZyYW1lIGhlYWRlciBzcGVjaWZpZWQgZGljdGlvbmFyeSBpZCAweCB0aGF0IHdhc250IHByb3ZpZGVkIGJ5IGFkZF9kaWN0KCkgb3IgcmVzZXRfd2l0aF9kaWN0KCkAACBcEAAnAAAAR1wQADcAAABjb21wcmVzc2VkIHNpemUgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzbnVtX3N0cmVhbXMgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nICgxIG9yIDQpIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzVHJpZWQgdG8gcmV1c2UgaHVmZm1hbiB0YWJsZSBidXQgaXQgd2FzIG5ldmVyIGluaXRpYWxpemVkTmVlZCA2IGJ5dGVzIHRvIGRlY29kZSBqdW1wIGhlYWRlciwgZ290IAAAfl0QACgAAAA2VhAABgAAAE5lZWQgYXQgbGVhc3QgIGJ5dGVzIHRvIGRlY29kZSBsaXRlcmFscy4gSGF2ZTogALhdEAAOAAAAxl0QACEAAAA2VhAABgAAAFBhZGRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2Vfc2VjdGlvbiB3YXMgbW9yZSB0aGFuIGEgYnl0ZSBsb25nOiAgYml0cy4gUHJvYmFibHkgY2F1c2VkIGJ5IGRhdGEgY29ycnVwdGlvbgAAXhAARgAAAEZeEAApAAAAQml0c3RyZWFtIHdhcyByZWFkIHRpbGw6ICwgc2hvdWxkIGhhdmUgYmVlbjogAAAAgF4QABkAAACZXhAAFAAAAERpZCBub3QgZGVjb2RlIGVub3VnaCBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiDAXhAAIAAAAOBeEAAUAAAAU2VxdWVuY2Ugd2FudHMgdG8gY29weSB1cCB0byBieXRlIC4gQnl0ZXMgaW4gbGl0ZXJhbHNidWZmZXI6IAAAAARfEAAiAAAAJl8QABsAAABJbGxlZ2FsIG9mZnNldDogMCBmb3VuZERvIG5vdCBzdXBwb3J0IG9mZnNldHMgYmlnZ2VyIHRoYW4gMTw8MzI7IGdvdDogAABrXxAALwAAAFJlYWQgYW4gb2Zmc2V0ID09IDAuIFRoYXQgaXMgYW4gaWxsZWdhbCB2YWx1ZSBmb3Igb2Zmc2V0c0J5dGVzdHJlYW0gZGlkIG5vdCBjb250YWluIGVub3VnaCBieXRlcyB0byBkZWNvZGUgbnVtX3NlcXVlbmNlc2NvbXByZXNzaW9uIG1vZGVzIGFyZSBub25lIGJ1dCB0aGV5IG11c3QgYmUgc2V0IHRvIHNvbWV0aGluZ05lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBsbCB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBvZiB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBtbCB0YWJsZUlsbGVnYWwgbGl0ZXJhbHNzZWN0aW9udHlwZS4gSXM6ICwgbXVzdCBiZSBpbjogMCwgMSwgMiwgMwAAAMRgEAAhAAAA5WAQABgAAABOb3QgZW5vdWdoIGJ5dGUgdG8gcGFyc2UgdGhlIGxpdGVyYWxzIHNlY3Rpb24gaGVhZGVyLiBIYXZlOiAsIE5lZWQ6IBBhEAA8AAAATGEQAAgAAABzb3VyY2UgbXVzdCBoYXZlIGF0IGxlYXN0ICBieXRlcyB0byBwYXJzZSBoZWFkZXI7IGdvdCAAAGRhEAAaAAAAfmEQABwAAAA2VhAABgAAAEFjY2xvZyBtdXN0IGJlIGF0IGxlYXN0IDFGb3VuZCBGU0UgYWNjX2xvZzogIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bSBpbiB0aGlzIGNhc2U6IADNYRAAEwAAAOBhEAArAAAAVGhlIGNvdW50ZXIgKCkgZXhjZWVkZWQgdGhlIGV4cGVjdGVkIHN1bTogLiBUaGlzIG1lYW5zIGFuIGVycm9yIG9yIGNvcnJ1cHRlZCBkYXRhIAogHGIQAA0AAAApYhAAHQAAAEZiEAAqAAAAVGhlcmUgYXJlIHRvbyBtYW55IHN5bWJvbHMgaW4gdGhpcyBkaXN0cmlidXRpb246IC4gTWF4OiAyNTYAiGIQADEAAAC5YhAACgAAAFRyaWVkIHRvIHVzZSBhbiB1bmluaXRpYWxpemVkIHRhYmxlIVNvdXJjZSBuZWVkcyB0byBoYXZlIGF0IGxlYXN0IG9uZSBieXRlSGVhZGVyIHNheXMgdGhlcmUgc2hvdWxkIGJlICBieXRlcyBmb3IgdGhlIHdlaWdodHMgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBpbiB0aGUgc3RyZWFtHmMQABwAAAA6YxAAKgAAAGRjEAAUAAAATW9yZSB0aGFuIDI1NSB3ZWlnaHRzIGRlY29kZWQgKGdvdCAgd2VpZ2h0cykuIFN0cmVhbSBpcyBwcm9iYWJseSBjb3JydXB0ZWQAAJBjEAAjAAAAs2MQACcAAABDYW4ndCBidWlsZCBodWZmbWFuIHRhYmxlIHdpdGhvdXQgYW55IHdlaWdodHNMZWZ0b3ZlciBtdXN0IGJlIHBvd2VyIG9mIHR3byBidXQgaXM6IAAZZBAAJgAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gc3RyZWFtIHRvIGRlY29tcHJlc3Mgd2VpZ2h0cy4gSXM6IAAASGQQADYAAAAZVBAADQAAAEZTRSB0YWJsZSB1c2VkIG1vcmUgYnl0ZXM6ICB0aGFuIHdlcmUgbWVhbnQgdG8gYmUgdXNlZCBmb3IgdGhlIHdob2xlIHN0cmVhbSBvZiBodWZmbWFuIHdlaWdodHMgKCkAAACQZBAAGwAAAKtkEABFAAAA8GQQAAEAAABTb3VyY2UgbmVlZHMgdG8gaGF2ZSBhdCBsZWFzdCAgYnl0ZXMsIGdvdDogAAxlEAAeAAAAKmUQAA0AAAALQ2FudCBoYXZlIHdlaWdodDogIGJpZ2dlciB0aGFuIG1heF9udW1fYml0czogAABJZRAAEgAAAFtlEAAbAAAAbWF4X2JpdHMgZGVyaXZlZCBmcm9tIHdlaWdodHMgaXM6ICBzaG91bGQgYmUgbG93ZXIgdGhhbjogAAAAiGUQACIAAACqZRAAFwAAAENhbnQgc2VydmUgdGhpcyByZXF1ZXN0LiBUaGUgcmVhZGVyIGlzIGxpbWl0ZWQgdG8gIGJpdHMsIHJlcXVlc3RlZCAgYml0c9RlEAAyAAAABmYQABEAAAAXZhAABQAAAENhbid0IHJlYWQgIGJpdHMsIG9ubHkgaGF2ZSAgYml0cyBsZWZ0AAA0ZhAACwAAAD9mEAARAAAAUGYQAAoAAAAAAAAABAAAAAQAAADJAQAAAAAAAAQAAAAEAAAAygEAAFRvb01hbnlCaXRzbnVtX3JlcXVlc3RlZF9iaXRzbGltaXQAAAAAAAAEAAAABAAAAMsBAABOb3RFbm91Z2hSZW1haW5pbmdCaXRzcmVxdWVzdGVkcmVtYWluaW5nSW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnZ290AAAAAAAABAAAAAQAAADMAQAAV2luZG93VG9vQmlnV2luZG93VG9vU21hbGwAAAAAAAAEAAAABAAAAK4BAABGcmFtZURlc2NyaXB0b3JFcnJvckRpY3RJZFRvb1NtYWxsZXhwZWN0ZWRNaXNtYXRjaGVkRnJhbWVTaXplRnJhbWVTaXplSXNaZXJvSW52YWxpZEZyYW1lU2l6ZQAAAAAEAAAABAAAAM0BAABNYWdpY051bWJlclJlYWRFcnJvcgAAAAAEAAAABAAAAM4BAABCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvcgAAAAAABAAAAAQAAADPAQAAU2tpcEZyYW1lbWFnaWNfbnVtYmVybGVuZ3RoQmxvY2tDb250ZW50UmVhZEVycm9yTWFsZm9ybWVkU2VjdGlvbkhlYWRlcmV4cGVjdGVkX2xlbnJlbWFpbmluZ19ieXRlcwAAAAAAAAAEAAAABAAAALIBAABEZWNvbXByZXNzTGl0ZXJhbHNFcnJvcgAAAAAABAAAAAQAAACzAQAATGl0ZXJhbHNTZWN0aW9uUGFyc2VFcnJvcgAAAAAAAAAEAAAABAAAALQBAABTZXF1ZW5jZXNIZWFkZXJQYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAtQEAAERlY29kZVNlcXVlbmNlRXJyb3IAAAAAAAQAAAAEAAAAtgEAAEV4ZWN1dGVTZXF1ZW5jZXNFcnJvck5vdEVub3VnaEJ5dGVzSW5EaWN0aW9uYXJ5bmVlZE9mZnNldFRvb0JpZ29mZnNldGJ1Zl9sZW4AAAAABAAAAAQAAAC4AQAAQmFkTWFnaWNOdW0AAAAAAAQAAAAEAAAAuQEAAEZTRVRhYmxlRXJyb3IAAAAAAAAABAAAAAQAAAC6AQAASHVmZm1hblRhYmxlRXJyb3JNaXNzaW5nQ29tcHJlc3NlZFNpemVNaXNzaW5nTnVtU3RyZWFtcwAAAAAABAAAAAQAAADBAQAAR2V0Qml0c0Vycm9yAAAAAAQAAAAEAAAAwgEAAEh1ZmZtYW5EZWNvZGVyRXJyb3JVbmluaXRpYWxpemVkSHVmZm1hblRhYmxlTWlzc2luZ0J5dGVzRm9ySnVtcEhlYWRlck1pc3NpbmdCeXRlc0ZvckxpdGVyYWxzbmVlZGVkAAAAAAAABAAAAAQAAADQAQAARXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzAAAAAAQAAAAEAAAA0QEAAAAAAAAEAAAABAAAANIBAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAAAAAAAQAAAAEAAAAxQEAAERlY29kZWJ1ZmZlckVycm9yTm90RW5vdWdoQnl0ZXNGb3JTZXF1ZW5jZXdhbnRlZGhhdmVaZXJvT2Zmc2V0AAAAAAAABAAAAAQAAADGAQAARlNFRGVjb2RlckVycm9yVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZU5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzRXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlSWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzAAAAAAEAAAABAAAA0wEAAG5lZWRfYXRfbGVhc3RBY2NMb2dJc1plcm9BY2NMb2dUb29CaWdtYXgAAAAABAAAAAQAAADHAQAAUHJvYmFiaWxpdHlDb3VudGVyTWlzbWF0Y2hleHBlY3RlZF9zdW1zeW1ib2xfcHJvYmFiaWxpdGllc1Rvb01hbnlTeW1ib2xzVGFibGVJc1VuaW5pdGlhbGl6ZWRTb3VyY2VJc0VtcHR5Tm90RW5vdWdoQnl0ZXNGb3JXZWlnaHRzZ290X2J5dGVzZXhwZWN0ZWRfYnl0ZXNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c0ZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAABQbhAAbQAAACoCAAARAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyX3JldmVyc2UucnMAAADQbhAAcQAAADcAAABFAAAA0G4QAHEAAAA3AAAALwAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGXQbhAAcQAAAEYAAAANAAAA0G4QAHEAAABKAAAAHgAAAFRoaXMgaXMgYSBidWcgaW4gdGhlIHByb2dyYW0uIFRoZXJlIHNob3VsZCBvbmx5IGJlIHZhbHVlcyBiZXR3ZWVuIDAuLjMvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2Jsb2Nrcy9saXRlcmFsc19zZWN0aW9uLnJzAPJvEABtAAAAewAAADQAAADybxAAbQAAAJAAAABXAAAA8m8QAG0AAACXAAAAKgAAAPJvEABtAAAAmAAAACoAAADybxAAbQAAAJsAAAAaAAAA8m8QAG0AAACoAAAAGgAAAPJvEABtAAAAtAAAAEQAAADybxAAbQAAALgAAABGAAAA8m8QAG0AAADAAAAAKgAAAPJvEABtAAAAwQAAACsAAADybxAAbQAAAMUAAABIAAAA8m8QAG0AAADNAAAAKgAAAPJvEABtAAAAzgAAACsAAADybxAAbQAAANMAAAAuAAAA8m8QAG0AAADUAAAALgAAAENhbnQgcmV0dXJuIHRoaXMgbWFueSBiaXRzL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyLnJzAGpxEABpAAAANgAAAA0AAABqcRAAaQAAAE8AAAAjAAAAYXNzZXJ0aW9uIGZhaWxlZDogbiAtIGJpdF9zaGlmdCA9PSBiaXRzX2luX2xhc3RfYnl0ZV9uZWVkZWQAanEQAGkAAABtAAAADQAAAGpxEABpAAAAcQAAAB8AAABqcRAAaQAAAGgAAAAkAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pZHggJSA4ID09IDAAanEQAGkAAABkAAAADQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaWR4ID09IG9sZF9pZHggKyBuAAAAanEQAGkAAAB3AAAACQAAAFNlcV9zdW06ICBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZGlmZmVyZW5jZSBpbiBidWZmZXJzaXplOiAAANByEAAJAAAA2XIQADEAAAAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3NlcXVlbmNlX2V4ZWN1dGlvbi5ycwAAABxzEABxAAAALwAAAAUAAAAccxAAcQAAAAsAAAAkAAAAHHMQAHEAAAAVAAAANAAAAEFsbG9jYXRpbmcgbmV3IHNwYWNlIGZvciB0aGUgcmluZ2J1ZmZlciBmYWlsZWQvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3JpbmdidWZmZXIucnMA7nMQAGkAAABhAAAAIwAAAENvdWxkIG5vdCBjcmVhdGUgbGF5b3V0IGZvciB1OCBhcnJheSBvZiBzaXplIAAAAGh0EAAtAAAA7nMQAGkAAABaAAAAIQAAAO5zEABpAAAAtAAAABUAAADucxAAaQAAAL4AAAAVAAAA7nMQAGkAAAB3AQAAHQAAAO5zEABpAAAAzgEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwDwdBAAawAAAKIAAAAZAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9saXRlcmFsc19zZWN0aW9uX2RlY29kZXIucnMAbHUQAHcAAAAUAAAAIgAAAGx1EAB3AAAAGAAAAE0AAABsdRAAdwAAADQAAAAZAAAAbHUQAHcAAAByAAAAGAAAAGx1EAB3AAAAkQAAABQAAABhc3NlcnRpb24gZmFpbGVkOiBudW1fc3RyZWFtcyA9PSAxAABsdRAAdwAAAIAAAAAJAAAAbHUQAHcAAABFAAAAGQAAAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2Rpbmcvc2VxdWVuY2Vfc2VjdGlvbl9kZWNvZGVyLnJzAHh2EAB3AAAAGAAAAB0AAAB4dhAAdwAAAHUAAAAQAAAAeHYQAHcAAADAAAAAEAAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IElsbGVnYWwgbGl0ZXJhbCBsZW5ndGggY29kZSB3YXM6IAAgdxAASwAAAHh2EAB3AAAA+gAAAA4AAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBJbGxlZ2FsIG1hdGNoIGxlbmd0aCBjb2RlIHdhczogAAAAhHcQAEkAAAB4dhAAdwAAABoBAAAOAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAD/////////////////////AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA//////////////////////////8BAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA/////////////////////////////////////3h2EAB3AAAAdgEAABwAAAB4dhAAdwAAAFMBAAAcAAAAAQEBAQICAwMEBgcICQoLDA0ODxAQAAAAEgAAABQAAAAWAAAAGAAAABwAAAAgAAAAKAAAADAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAEBAQECAgMDBAQFBwgJCgsMDQ4PEAAAACMAAAAlAAAAJwAAACkAAAArAAAALwAAADMAAAA7AAAAQwAAAFMAAABjAAAAgwAAAAMBAAADAgAAAwQAAAMIAAADEAAAAyAAAANAAAADgAAAAwABAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3R3b3gtaGFzaC0yLjEuMC9zcmMveHhoYXNoNjQucnMAAACwehAAYQAAAFQAAAAfAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9kZWNvZGVidWZmZXIucnMAJHsQAGsAAAAaAAAAHgAAACR7EABrAAAAnQAAADQAAAAkexAAawAAAOoAAAAeAAAAUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVyZAAAAAAAAAAEAAAABAAAAMoBAAAAAAAABAAAAAQAAADQAQAAYXNzZXJ0aW9uIGZhaWxlZDogeCA+IDAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2h1ZmYwL2h1ZmYwX2RlY29kZXIucnMTfBAAaQAAADEAAAAFAAAAE3wQAGkAAAA+AAAAGgAAABN8EABpAAAAUAAAACkAAAATfBAAaQAAAGgAAAAWAAAAE3wQAGkAAABqAAAAEwAAABN8EABpAAAAawAAABgAAAATfBAAaQAAAGwAAAAbAAAAE3wQAGkAAAAdAQAANgAAABN8EABpAAAAHQEAACUAAAATfBAAaQAAAB8BAAA2AAAAE3wQAGkAAAAfAQAAJQAAABN8EABpAAAA6AAAACIAAAATfBAAaQAAAPIAAAAiAAAAE3wQAGkAAAD3AAAAJgAAABN8EABpAAAA7QAAACYAAAATfBAAaQAAAFcBAAASAAAAE3wQAGkAAABfAQAAGAAAABN8EABpAAAAZQEAABUAAAATfBAAaQAAAG8BAAAbAAAAE3wQAGkAAABxAQAAGgAAABN8EABpAAAAeAEAAB4AAAByYW5rX2lkeFswXTogIHNob3VsZCBiZTogAAAAzH0QAA0AAADZfRAADAAAABN8EABpAAAAdwEAAAkAAAATfBAAaQAAAH8BAAAsAAAAE3wQAGkAAACEAQAAMQAAABN8EABpAAAAiAEAACAAAAATfBAAaQAAAIkBAAAgAAAAE3wQAGkAAABzAQAARQAAABN8EABpAAAAdAEAACEAAAATfBAAaQAAAHMBAAAeAAAAE3wQAGkAAABhAQAAGwAAABN8EABpAAAATwEAACcAAAATfBAAaQAAAFQBAAAWAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAqH4QAGsAAACiAAAAGQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzACR/EABrAAAAogAAABkAAABhc3NlcnRpb24gZmFpbGVkOiB4ID4gMC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZnNlL2ZzZV9kZWNvZGVyLnJzt38QAGUAAAA9AAAABQAAALd/EABlAAAAWgAAACcAAAC3fxAAZQAAAGUAAAAnAAAAt38QAGUAAABwAAAAIwAAALd/EABlAAAAcQAAAB0AAAC3fxAAZQAAAOIAAAApAAAAt38QAGUAAADkAAAAMQAAALd/EABlAAAA5gAAADMAAABhc3NlcnRpb24gZmFpbGVkOiBuYiA8PSBzZWxmLmFjY3VyYWN5X2xvZwAAALd/EABlAAAA6wAAAA0AAAC3fxAAZQAAANIAAAAtAAAAt38QAGUAAADAAAAALQAAALd/EABlAAAAOQEAAEEAAAC3fxAAZQAAAB4BAAAnAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHJvYiA9PSAtMbd/EABlAAAAJAEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy92ZWMvbW9kLnJzAAAARIEQAG0AAAA9CgAAJAAAAAAAAAAQAAAABAAAANQBAADVAQAA1gEAACAgICA6IAAAAQAAAAAAAADggRAAAgAAACAgICAgICAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL3B0ci9tb2QucnMA+4EQAGwAAAALAgAAAQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvc2xpY2UvaW5kZXgucnN4ghAAcAAAAEwDAAA0AAAAeIIQAHAAAABTAwAAMgAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuKS9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAAMoMQAGwAAAD7BwAAHQAAADKDEABsAAAAAwgAAB0AAAAygxAAbAAAAI0FAAAbAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5ycwAAANCDEABtAAAAKgIAABEAAADXAQAADAAAAAQAAADYAQAA2QEAANoBAADdAQAADAAAAAQAAADeAQAA3wEAANoBAEGIicIAC4UJAQAAAOABAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAMeEEABsAAAA3woAAA4AAABFcnJvcgAAAMeEEABsAAAAjQUAABsAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbinHhBAAbAAAAMAFAAANAAAAAAAAABAAAAAEAAAA1AEAANUBAADWAQAAYmFja3RyYWNlIGNhcHR1cmUgZmFpbGVkL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYW55aG93LTEuMC45OC9zcmMvZXJyb3IucnPMhRAAXAAAAGcEAAAOAAAAAQAAAAAAAAA6IAAAQIYQAAIAAAAKCkNhdXNlZCBieToKCgpzdGFjayBiYWNrdHJhY2U6U3RhY2sgYmFja3RyYWNlOgprhhAAEQAAAFMvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAACFhhAAeQAAALMHAAAJAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy43Ny9zcmMvbGliLnJzAAAQhxAAWgAAAPsYAAABAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMDAvc3JjL2NvbnZlcnQvc2xpY2VzLnJzfIcQAGwAAAAkAQAADgAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkSnNWYWx1ZSgpACqIEAAIAAAAMogQAAEAAABMYXp5IGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWQAAESIEAAqAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvb25jZV9jZWxsLTEuMjEuMy9zcmMvbGliLnJzAAAAeIgQAF0AAAAIAwAAGQAAAHJlZW50cmFudCBpbml0AADoiBAADgAAAHiIEABdAAAAegIAAA0AQZiSwgALlSMEAAAABAAAAPYBAAAvcnVzdGMvMDVmOTg0NmY4OTNiMDlhMWJlMWZjODU2MGUzM2ZjM2M4MTVjZmVjYi9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAAJIkQAEoAAACiAAAAGQAAAC9ydXN0Yy8wNWY5ODQ2Zjg5M2IwOWExYmUxZmM4NTYwZTMzZmMzYzgxNWNmZWNiL2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwCAiRAASwAAAI0FAAAbAAAAL3J1c3RjLzA1Zjk4NDZmODkzYjA5YTFiZTFmYzg1NjBlMzNmYzNjODE1Y2ZlY2IvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc9yJEABMAAAAKgIAABEAAAA6AAAA9wEAAAwAAAAEAAAA+AEAAPkBAAD6AQAAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuNy9zcmMvZGxtYWxsb2MucnNhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAFSKEAApAAAAqAQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAABUihAAKQAAAK4EAAANAAAAQWNjZXNzRXJyb3JjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uOiAAB4sQAEgAAABsaWJyYXJ5L3N0ZC9zcmMvYmFja3RyYWNlLnJzb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybXSLEAAoAAAAJAAAAAIAAACcixAAdW5zdXBwb3J0ZWQgYmFja3RyYWNlZGlzYWJsZWQgYmFja3RyYWNlAFiLEAAcAAAAigEAAB0AAAD7AQAAEAAAAAQAAAD8AQAA/QEAAAEAAAAAAAAAZW50aXR5IG5vdCBmb3VuZHBlcm1pc3Npb24gZGVuaWVkY29ubmVjdGlvbiByZWZ1c2VkY29ubmVjdGlvbiByZXNldGhvc3QgdW5yZWFjaGFibGVuZXR3b3JrIHVucmVhY2hhYmxlY29ubmVjdGlvbiBhYm9ydGVkbm90IGNvbm5lY3RlZGFkZHJlc3MgaW4gdXNlYWRkcmVzcyBub3QgYXZhaWxhYmxlbmV0d29yayBkb3duYnJva2VuIHBpcGVlbnRpdHkgYWxyZWFkeSBleGlzdHNvcGVyYXRpb24gd291bGQgYmxvY2tub3QgYSBkaXJlY3RvcnlpcyBhIGRpcmVjdG9yeWRpcmVjdG9yeSBub3QgZW1wdHlyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWZpbGVzeXN0ZW0gbG9vcCBvciBpbmRpcmVjdGlvbiBsaW1pdCAoZS5nLiBzeW1saW5rIGxvb3Apc3RhbGUgbmV0d29yayBmaWxlIGhhbmRsZWludmFsaWQgaW5wdXQgcGFyYW1ldGVyaW52YWxpZCBkYXRhdGltZWQgb3V0d3JpdGUgemVyb25vIHN0b3JhZ2Ugc3BhY2VzZWVrIG9uIHVuc2Vla2FibGUgZmlsZXF1b3RhIGV4Y2VlZGVkZmlsZSB0b28gbGFyZ2VyZXNvdXJjZSBidXN5ZXhlY3V0YWJsZSBmaWxlIGJ1c3lkZWFkbG9ja2Nyb3NzLWRldmljZSBsaW5rIG9yIHJlbmFtZXRvbyBtYW55IGxpbmtzaW52YWxpZCBmaWxlbmFtZWFyZ3VtZW50IGxpc3QgdG9vIGxvbmdvcGVyYXRpb24gaW50ZXJydXB0ZWR1bnN1cHBvcnRlZHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVvdXQgb2YgbWVtb3J5aW4gcHJvZ3Jlc3NvdGhlciBlcnJvcnVuY2F0ZWdvcml6ZWQgZXJyb3JPcwAAAAAABAAAAAQAAAD+AQAAY29kZQAAAAABAAAAAQAAAP8BAABraW5k9wEAAAwAAAAEAAAAAAIAAG1lc3NhZ2VLaW5kRXJyb3IAAAAACAAAAAQAAAABAgAAAAAAAAQAAAAEAAAAAgIAAEN1c3RvbWVycm9yIChvcyBlcnJvciApAAEAAAAAAAAAZ48QAAsAAAByjxAAAQAAADogY2Fubm90IHJlY3Vyc2l2ZWx5IGFjcXVpcmUgbXV0ZXgAAI6PEAAgAAAAbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnO4jxAALAAAABMAAAAJAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvcG9pc29uL29uY2UucnMA9I8QACMAAACbAAAAMgAAAGxpYnJhcnkvc3RkL3NyYy9zeW5jL2xhenlfbG9jay5ycwAAACiQEAAhAAAA0QAAABMAAAA8dW5rbm93bj7vv71tZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAABokBAAFQAAAH2QEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJznJAQABgAAABjAQAACQAAAAoAAAD3AQAADAAAAAQAAAADAgAAAAAAAAgAAAAEAAAABAIAAAAAAAAIAAAABAAAAAUCAAAGAgAABwIAAAgCAAAJAgAAEAAAAAQAAAAKAgAACwIAAAwCAAANAgAAbGlicmFyeS9zdGQvc3JjLy4uLy4uL2JhY2t0cmFjZS9zcmMvc3ltYm9saXplL21vZC5ycyCREAA0AAAAZwEAADAAAAABAAAAAAAAAIyPEAACAAAAIC0gAAEAAAAAAAAAdJEQAAMAAAAgICAgICAgICAgICAgICAgICAgYXQgAAA4ihAAAQAAAE5vdEZvdW5kUGVybWlzc2lvbkRlbmllZENvbm5lY3Rpb25SZWZ1c2VkQ29ubmVjdGlvblJlc2V0SG9zdFVucmVhY2hhYmxlTmV0d29ya1VucmVhY2hhYmxlQ29ubmVjdGlvbkFib3J0ZWROb3RDb25uZWN0ZWRBZGRySW5Vc2VBZGRyTm90QXZhaWxhYmxlTmV0d29ya0Rvd25Ccm9rZW5QaXBlQWxyZWFkeUV4aXN0c1dvdWxkQmxvY2tOb3RBRGlyZWN0b3J5SXNBRGlyZWN0b3J5RGlyZWN0b3J5Tm90RW1wdHlSZWFkT25seUZpbGVzeXN0ZW1GaWxlc3lzdGVtTG9vcFN0YWxlTmV0d29ya0ZpbGVIYW5kbGVJbnZhbGlkSW5wdXRJbnZhbGlkRGF0YVRpbWVkT3V0V3JpdGVaZXJvU3RvcmFnZUZ1bGxOb3RTZWVrYWJsZVF1b3RhRXhjZWVkZWRGaWxlVG9vTGFyZ2VSZXNvdXJjZUJ1c3lFeGVjdXRhYmxlRmlsZUJ1c3lEZWFkbG9ja0Nyb3NzZXNEZXZpY2VzVG9vTWFueUxpbmtzSW52YWxpZEZpbGVuYW1lQXJndW1lbnRMaXN0VG9vTG9uZ0ludGVycnVwdGVkVW5zdXBwb3J0ZWRVbmV4cGVjdGVkRW9mT3V0T2ZNZW1vcnlJblByb2dyZXNzT3RoZXJVbmNhdGVnb3JpemVkb3BlcmF0aW9uIHN1Y2Nlc3NmdWxPbmNlIGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWTakxAAKgAAAG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgcGVyZm9ybWVkIHJlY3Vyc2l2ZWx5DJQQADgAAAAQAAAAEQAA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", import.meta.url)); + const A = ft(); + (typeof Q == "string" || typeof Request == "function" && Q instanceof Request || typeof URL == "function" && Q instanceof URL) && (Q = fetch(Q)); + const { instance: I, module: g } = await Ht(await Q, A); + return mt(I, g); +} +const pA = -9, bt = 9, KA = (bt - pA) / 254, xt = 11, Kt = 11, Z = 1 << xt, IQ = 1 << Kt, Zt = 1; +function tQ(Q) { + return Q === "bool" || Q === "bvec2" || Q === "bvec3" || Q === "bvec4"; +} +function iQ(Q) { + return Q === "int" || Q === "uint" || Q === "float"; +} +function EA(Q) { + return Q === "int" || Q === "ivec2" || Q === "ivec3" || Q === "ivec4"; +} +function tA(Q) { + return Q === "uint" || Q === "uvec2" || Q === "uvec3" || Q === "uvec4"; +} +function SQ(Q) { + return Q === "float" || Q === "vec2" || Q === "vec3" || Q === "vec4"; +} +function $I(Q) { + return Q === "mat2" || Q === "mat2x2" || Q === "mat2x3" || Q === "mat2x4" || Q === "mat3" || Q === "mat3x2" || Q === "mat3x3" || Q === "mat3x4" || Q === "mat4" || Q === "mat4x2" || Q === "mat4x3" || Q === "mat4x4"; +} +function zA(Q) { + return SQ(Q) || $I(Q); +} +function yQ(Q) { + return Q === "vec2" || Q === "ivec2" || Q === "uvec2"; +} +function GQ(Q) { + return Q === "vec3" || Q === "ivec3" || Q === "uvec3"; +} +function LQ(Q) { + return Q === "vec4" || Q === "ivec4" || Q === "uvec4"; +} +function qt(Q) { + return yQ(Q) || GQ(Q) || LQ(Q); +} +function $A(Q) { + return Q === "mat2" || Q === "mat2x2"; +} +function AQ(Q) { + return Q === "mat3" || Q === "mat3x3"; +} +function QQ(Q) { + return Q === "mat4" || Q === "mat4x4"; +} +function Ag(Q) { + switch (Q) { + case "vec2": + return "float"; + case "vec3": + return "float"; + case "vec4": + return "float"; + case "ivec2": + return "int"; + case "ivec3": + return "int"; + case "ivec4": + return "int"; + case "uvec2": + return "uint"; + case "uvec3": + return "uint"; + case "uvec4": + return "uint"; + default: + throw new Error(`Invalid vector type: ${Q}`); + } +} +function Qg(Q) { + switch (Q) { + case "vec2": + case "ivec2": + case "uvec2": + return 2; + case "vec3": + case "ivec3": + case "uvec3": + return 3; + case "vec4": + case "ivec4": + case "uvec4": + return 4; + default: + throw new Error(`Invalid vector type: ${Q}`); + } +} +function Wt(Q) { + if (iQ(Q)) + return "float"; + if (yQ(Q)) + return "vec2"; + if (GQ(Q)) + return "vec3"; + if (LQ(Q)) + return "vec4"; + throw new Error(`Invalid vector type: ${Q}`); +} +function Ig(Q) { + if (iQ(Q)) + return "uint"; + if (yQ(Q)) + return "uvec2"; + if (GQ(Q)) + return "uvec3"; + if (LQ(Q)) + return "uvec4"; + throw new Error(`Invalid vector type: ${Q}`); +} +function Vt(Q) { + if (iQ(Q)) + return "int"; + if (yQ(Q)) + return "ivec2"; + if (GQ(Q)) + return "ivec3"; + if (LQ(Q)) + return "ivec4"; + throw new Error(`Invalid vector type: ${Q}`); +} +function gg(Q) { + if (typeof Q == "string") + return Q; + if (typeof Q == "object" && Q.type) + return Q.type; + throw new Error(`Invalid DynoType: ${String(Q)}`); +} +function j(Q) { + return Math.trunc(Q).toString(); +} +function z(Q) { + return `${Math.max(0, Math.trunc(Q)).toString()}u`; +} +function u(Q) { + return Q === Number.POSITIVE_INFINITY ? "INFINITY" : Q === Number.NEGATIVE_INFINITY ? "-INFINITY" : Number.isInteger(Q) ? Q.toFixed(1) : Q.toString(); +} +function p(Q) { + return Q instanceof jA ? Q.type : Q.dynoOut().type; +} +class jA { + constructor(A) { + this.__isDynoValue = !0, this.type = A; + } +} +class H extends jA { + constructor(A, I) { + super(A.outTypes[I]), this.dyno = A, this.key = I; + } +} +class wQ extends jA { + constructor(A, I) { + super(A), this.literal = I; + } + getLiteral() { + return this.literal; + } +} +function OQ(Q, A) { + return new wQ(Q, A); +} +class Bg extends wQ { + constructor(A, I) { + super(A, ""), this.value = I; + } + getLiteral() { + const { type: A, value: I } = this; + switch (A) { + case "bool": + return I ? "true" : "false"; + case "uint": + return z(I); + case "int": + return j(I); + case "float": + return u(I); + case "bvec2": { + const g = I; + return `bvec2(${g[0]}, ${g[1]})`; + } + case "uvec2": { + if (I instanceof e.Vector2) + return `uvec2(${z(I.x)}, ${z(I.y)})`; + const g = I; + return `uvec2(${z(g[0])}, ${z(g[1])})`; + } + case "ivec2": { + if (I instanceof e.Vector2) + return `ivec2(${j(I.x)}, ${j(I.y)})`; + const g = I; + return `ivec2(${j(g[0])}, ${j(g[1])})`; + } + case "vec2": { + if (I instanceof e.Vector2) + return `vec2(${u(I.x)}, ${u(I.y)})`; + const g = I; + return `vec2(${u(g[0])}, ${u(g[1])})`; + } + case "bvec3": { + const g = I; + return `bvec3(${g[0]}, ${g[1]}, ${g[2]})`; + } + case "uvec3": { + if (I instanceof e.Vector3) + return `uvec3(${z(I.x)}, ${z(I.y)}, ${z(I.z)})`; + const g = I; + return `uvec3(${z(g[0])}, ${z(g[1])}, ${z(g[2])})`; + } + case "ivec3": { + if (I instanceof e.Vector3) + return `ivec3(${j(I.x)}, ${j(I.y)}, ${j(I.z)})`; + const g = I; + return `ivec3(${j(g[0])}, ${j(g[1])}, ${j(g[2])})`; + } + case "vec3": { + if (I instanceof e.Vector3) + return `vec3(${u(I.x)}, ${u(I.y)}, ${u(I.z)})`; + const g = I; + return `vec3(${u(g[0])}, ${u(g[1])}, ${u(g[2])})`; + } + case "bvec4": { + const g = I; + return `bvec4(${g[0]}, ${g[1]}, ${g[2]}, ${g[3]})`; + } + case "uvec4": { + if (I instanceof e.Vector4) + return `uvec4(${z(I.x)}, ${z(I.y)}, ${z(I.z)}, ${z(I.w)})`; + const g = I; + return `uvec4(${z(g[0])}, ${z(g[1])}, ${z(g[2])}, ${z(g[3])})`; + } + case "ivec4": { + if (I instanceof e.Vector4) + return `ivec4(${j(I.x)}, ${j(I.y)}, ${j(I.z)}, ${j(I.w)})`; + const g = I; + return `ivec4(${j(g[0])}, ${j(g[1])}, ${j(g[2])}, ${j(g[3])})`; + } + case "vec4": { + if (I instanceof e.Vector4) + return `vec4(${u(I.x)}, ${u(I.y)}, ${u(I.z)}, ${u(I.w)})`; + if (I instanceof e.Quaternion) + return `vec4(${u(I.x)}, ${u(I.y)}, ${u(I.z)}, ${u(I.w)})`; + const g = I; + return `vec4(${u(g[0])}, ${u(g[1])}, ${u(g[2])}, ${u(g[3])})`; + } + case "mat2": + case "mat2x2": { + const g = I, B = g instanceof e.Matrix2 ? g.elements : I, C = new Array(4).fill(0).map((E, t) => u(B[t])); + return `${A}(${C.join(", ")})`; + } + case "mat2x3": { + const g = I, B = new Array(6).fill(0).map((C, E) => u(g[E])); + return `${A}(${B.join(", ")})`; + } + case "mat2x4": { + const g = I, B = new Array(8).fill(0).map((C, E) => u(g[E])); + return `${A}(${B.join(", ")})`; + } + case "mat3": + case "mat3x3": { + const g = I, B = g instanceof e.Matrix3 ? g.elements : I, C = new Array(9).fill(0).map((E, t) => u(B[t])); + return `${A}(${C.join(", ")})`; + } + case "mat3x2": { + const g = I, B = new Array(6).fill(0).map((C, E) => u(g[E])); + return `${A}(${B.join(", ")})`; + } + case "mat3x4": { + const g = I, B = new Array(12).fill(0).map((C, E) => u(g[E])); + return `${A}(${B.join(", ")})`; + } + case "mat4": + case "mat4x4": { + const g = I, B = g instanceof e.Matrix4 ? g.elements : I, C = new Array(16).fill(0).map((E, t) => u(B[t])); + return `${A}(${C.join(", ")})`; + } + case "mat4x2": { + const g = I, B = new Array(8).fill(0).map((C, E) => u(g[E])); + return `${A}(${B.join(", ")})`; + } + case "mat4x3": { + const g = I, B = new Array(12).fill(0).map((C, E) => u(g[E])); + return `${A}(${B.join(", ")})`; + } + default: + throw new Error(`Type not implemented: ${String(A)}`); + } + } +} +function q(Q, A) { + return new Bg(Q, A); +} +function NQ(Q) { + const A = String(Q); + if (tQ(Q)) + return `${A}(false)`; + if (zA(Q)) + return `${A}(0.0)`; + if (EA(Q)) + return `${A}(0)`; + if (tA(Q)) + return `${A}(0u)`; + throw new Error(`Type not implemented: ${A}`); +} +function vt(Q) { + const A = String(Q); + if (tQ(Q)) + return `${A}(true)`; + if (zA(Q)) + return `${A}(1.0)`; + if (EA(Q)) + return `${A}(1)`; + if (tA(Q)) + return `${A}(1u)`; + throw new Error(`Type not implemented: ${A}`); +} +function Tt(Q) { + const A = String(Q); + if (tQ(Q)) + return `${A}(true)`; + if (zA(Q)) + return `${A}(-1.0)`; + if (EA(Q)) + return `${A}(-1)`; + if (tA(Q)) + return `${A}(0xFFFFFFFFu)`; + throw new Error(`Type not implemented: ${A}`); +} +const WI = " "; +class Cg { + constructor({ indent: A } = {}) { + this.globals = /* @__PURE__ */ new Set(), this.statements = [], this.uniforms = {}, this.declares = /* @__PURE__ */ new Set(), this.updaters = [], this.sequence = 0, this.indent = WI, this.indent = A ?? WI; + } + nextSequence() { + return this.sequence++; + } +} +class f { + constructor({ + inTypes: A, + outTypes: I, + inputs: g, + update: B, + globals: C, + statements: E, + generate: t + }) { + this.inTypes = A ?? {}, this.outTypes = I ?? {}, this.inputs = g ?? {}, this.update = B, this.globals = C, this.statements = E, this.generate = t ?? (({ inputs: s, outputs: o, compile: a }) => { + var i, D; + return { + globals: (i = this.globals) == null ? void 0 : i.call(this, { inputs: s, outputs: o, compile: a }), + statements: (D = this.statements) == null ? void 0 : D.call(this, { inputs: s, outputs: o, compile: a }) + }; + }); + } + get outputs() { + const A = {}; + for (const I in this.outTypes) + A[I] = new H(this, I); + return A; + } + apply(A) { + return Object.assign(this.inputs, A), this.outputs; + } + compile({ + inputs: A, + outputs: I, + compile: g + }) { + const B = [ + `// ${this.constructor.name}(${Object.values(A).join(", ")}) => (${Object.values(I).join(", ")})` + ], C = []; + for (const o in I) { + const a = I[o]; + a && !g.declares.has(a) && (g.declares.add(a), C.push(o)); + } + const { globals: E, statements: t, uniforms: s } = this.generate({ + inputs: A, + outputs: I, + compile: g + }); + for (const o of E ?? []) + g.globals.add(o); + for (const o in s) + g.uniforms[o] = s[o]; + this.update && g.updaters.push(this.update); + for (const o of C) { + const a = I[o]; + a && (g.uniforms[a] || B.push(`${uI(a, this.outTypes[o])};`)); + } + return t != null && t.length && (B.push("{"), B.push(...t.map((o) => g.indent + o)), B.push("}")), B; + } +} +class mA extends f { + constructor({ + inTypes: A, + outTypes: I, + inputs: g, + update: B, + globals: C, + construct: E + }) { + super({ + inTypes: A, + outTypes: I, + inputs: g, + update: B, + globals: C, + generate: (t) => this.generateBlock(t) + }), this.construct = E; + } + generateBlock({ + inputs: A, + outputs: I, + compile: g + }) { + var w, c; + const B = {}, C = {}; + for (const r in A) + A[r] != null && (B[r] = new wQ(this.inTypes[r], A[r])); + for (const r in I) + I[r] != null && (C[r] = new jA(this.outTypes[r])); + const E = { roots: [] }, t = this.construct(B, C, E); + for (const r of ((w = this.globals) == null ? void 0 : w.call(this, { inputs: A, outputs: I, compile: g })) ?? []) + g.globals.add(r); + const s = [], o = /* @__PURE__ */ new Map(); + function a(r, y, G) { + let h = o.get(r); + if (!h) { + h = { + sequence: g.nextSequence(), + outNames: /* @__PURE__ */ new Map(), + newOuts: /* @__PURE__ */ new Set() + }, o.set(r, h); + for (const M in r.inputs) { + let l = r.inputs[M]; + for (; l; ) { + if (l instanceof jA) { + l instanceof H && a(l.dyno, l.key); + break; + } + l = l.dynoOut(); + } + } + s.push(r); + } + y && (G || h.newOuts.add(y), h.outNames.set(y, G ?? `${y}_${h.sequence}`)); + } + for (const r of E.roots) + a(r); + for (const r in C) { + let y = (t == null ? void 0 : t[r]) ?? C[r]; + for (; y; ) { + if (y instanceof jA) { + y instanceof H && a(y.dyno, y.key, I[r]); + break; + } + y = y.dynoOut(); + } + C[r] = y; + } + const i = []; + for (const r of s) { + const y = {}, G = {}; + for (const l in r.inputs) { + let k = r.inputs[l]; + for (; k; ) { + if (k instanceof jA) { + if (k instanceof wQ) + y[l] = k.getLiteral(); + else if (k instanceof H) { + const R = (c = o.get(k.dyno)) == null ? void 0 : c.outNames.get(k.key); + if (!R) + throw new Error( + `Source not found for ${k.dyno.constructor.name}.${k.key}` + ); + y[l] = R; + } + break; + } + k = k.dynoOut(); + } + } + const h = o.get(r) ?? { outNames: /* @__PURE__ */ new Map() }; + for (const [l, k] of h.outNames.entries()) + G[l] = k; + const M = r.compile({ inputs: y, outputs: G, compile: g }); + i.push(M); + } + const D = []; + for (const r in I) + C[r] instanceof wQ && D.push( + `${I[r]} = ${C[r].getLiteral()};` + ); + return D.length > 0 && i.push(D), { statements: i.flatMap((r, y) => y === 0 ? r : ["", ...r]) }; + } +} +function UA(Q, A, I, { update: g, globals: B } = {}) { + return new mA({ inTypes: Q, outTypes: A, construct: I, update: g, globals: B }); +} +function pQ({ + inTypes: Q, + outTypes: A, + inputs: I, + update: g, + globals: B, + statements: C, + generate: E +}) { + return new f({ + inTypes: Q, + outTypes: A, + inputs: I, + update: g, + globals: B, + statements: C, + generate: E + }); +} +function uI(Q, A, I) { + const g = typeof A == "string" ? A : A.type; + if (!g) + throw new Error(`Invalid DynoType: ${String(A)}`); + return `${g} ${Q}${I != null ? `[${I}]` : ""}`; +} +function JA(Q) { + var C; + let A = !1; + const I = Q.split(` +`).map((E) => { + const t = E.trimEnd(); + return A ? t : t.length > 0 ? (A = !0, t) : null; + }).filter((E) => E != null); + for (; I.length > 0 && I[I.length - 1].length === 0; ) + I.pop(); + if (I.length === 0) + return []; + const g = (C = I[0].match(/^\s*/)) == null ? void 0 : C[0]; + if (!g) + return I; + const B = new RegExp(`^${g}`); + return I.map((E) => E.replace(B, "")); +} +function IA(Q) { + return JA(Q).join(` +`); +} +class N extends f { + constructor({ + a: A, + outKey: I, + outTypeFunc: g + }) { + const B = { a: p(A) }, C = g(p(A)), E = { [I]: C }; + super({ inTypes: B, outTypes: E, inputs: { a: A } }), this.outKey = I; + } + dynoOut() { + return new H(this, this.outKey); + } +} +class b extends f { + constructor({ + a: A, + b: I, + outKey: g, + outTypeFunc: B + }) { + const C = { a: p(A), b: p(I) }, E = B(p(A), p(I)), t = { [g]: E }; + super({ inTypes: C, outTypes: t, inputs: { a: A, b: I } }), this.outKey = g; + } + dynoOut() { + return new H(this, this.outKey); + } +} +class sQ extends f { + constructor({ + a: A, + b: I, + c: g, + outKey: B, + outTypeFunc: C + }) { + const E = { a: p(A), b: p(I), c: p(g) }, t = C(p(A), p(I), p(g)), s = { [B]: t }; + super({ inTypes: E, outTypes: s, inputs: { a: A, b: I, c: g } }), this.outKey = B; + } + dynoOut() { + return new H(this, this.outKey); + } +} +const v = { type: "Gsplat" }, HQ = { type: "PackedSplats" }, Xt = (Q) => new tg({ packedSplats: Q }), dQ = (Q, A) => new sg({ packedSplats: Q, index: A }), Eg = (Q, A, I, g) => new og({ packedSplats: Q, index: A, base: I, count: g }), kQ = (Q) => new ag({ gsplat: Q }), rQ = ({ + gsplat: Q, + flags: A, + index: I, + center: g, + scales: B, + quaternion: C, + rgba: E, + rgb: t, + opacity: s, + x: o, + y: a, + z: i, + r: D, + g: n, + b: w +}) => new eg({ + gsplat: Q, + flags: A, + index: I, + center: g, + scales: B, + quaternion: C, + rgba: E, + rgb: t, + opacity: s, + x: o, + y: a, + z: i, + r: D, + g: n, + b: w +}), jt = (Q) => new ng({ gsplat: Q }), UI = (Q, { + scale: A, + rotate: I, + translate: g, + recolor: B +}) => new cg({ gsplat: Q, scale: A, rotate: I, translate: g, recolor: B }), rA = IA(` + struct Gsplat { + vec3 center; + uint flags; + vec3 scales; + int index; + vec4 quaternion; + vec4 rgba; + }; + const uint GSPLAT_FLAG_ACTIVE = 1u << 0u; + + bool isGsplatActive(uint flags) { + return (flags & GSPLAT_FLAG_ACTIVE) != 0u; + } +`), CI = IA(` + struct PackedSplats { + usampler2DArray texture; + int numSplats; + }; +`); +class tg extends N { + constructor({ + packedSplats: A + }) { + super({ a: A, outKey: "numSplats", outTypeFunc: () => "int" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.numSplats} = ${I.a}.numSplats;` + ]; + } +} +const ig = IA(` + bool readPackedSplat(usampler2DArray texture, int numSplats, int index, out Gsplat gsplat) { + if ((index >= 0) && (index < numSplats)) { + uvec4 packed = texelFetch(texture, splatTexCoord(index), 0); + unpackSplat(packed, gsplat.center, gsplat.scales, gsplat.quaternion, gsplat.rgba); + return true; + } else { + return false; + } + } +`); +class sg extends f { + constructor({ + packedSplats: A, + index: I + }) { + super({ + inTypes: { packedSplats: HQ, index: "int" }, + outTypes: { gsplat: v }, + inputs: { packedSplats: A, index: I }, + globals: () => [rA, CI, ig], + statements: ({ inputs: g, outputs: B }) => { + const { gsplat: C } = B; + if (!C) + return []; + const { packedSplats: E, index: t } = g; + let s; + return E && t ? s = JA(` + if (readPackedSplat(${E}.texture, ${E}.numSplats, ${t}, ${C})) { + bool zeroSize = all(equal(${C}.scales, vec3(0.0, 0.0, 0.0))); + ${C}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE; + } else { + ${C}.flags = 0u; + } + `) : s = [`${C}.flags = 0u;`], s.push(`${C}.index = ${t ?? "0"};`), s; + } + }); + } + dynoOut() { + return new H(this, "gsplat"); + } +} +class og extends f { + constructor({ + packedSplats: A, + index: I, + base: g, + count: B + }) { + super({ + inTypes: { + packedSplats: HQ, + index: "int", + base: "int", + count: "int" + }, + outTypes: { gsplat: v }, + inputs: { packedSplats: A, index: I, base: g, count: B }, + globals: () => [rA, CI, ig], + statements: ({ inputs: C, outputs: E }) => { + const { gsplat: t } = E; + if (!t) + return []; + const { packedSplats: s, index: o, base: a, count: i } = C; + let D; + return s && o && a && i ? D = JA(` + ${t}.flags = 0u; + if ((${o} >= ${a}) && (${o} < (${a} + ${i}))) { + if (readPackedSplat(${s}.texture, ${s}.numSplats, ${o}, ${t})) { + bool zeroSize = all(equal(${t}.scales, vec3(0.0, 0.0, 0.0))); + ${t}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE; + } + } + `) : D = [`${t}.flags = 0u;`], D.push(`${t}.index = ${o ?? "0"};`), D; + } + }); + } + dynoOut() { + return new H(this, "gsplat"); + } +} +class ag extends f { + constructor({ gsplat: A }) { + super({ + inTypes: { gsplat: v }, + outTypes: { + flags: "uint", + active: "bool", + index: "int", + center: "vec3", + scales: "vec3", + quaternion: "vec4", + rgba: "vec4", + rgb: "vec3", + opacity: "float", + x: "float", + y: "float", + z: "float", + r: "float", + g: "float", + b: "float" + }, + inputs: { gsplat: A }, + globals: () => [rA], + statements: ({ inputs: I, outputs: g }) => { + const { gsplat: B } = I, { + flags: C, + active: E, + index: t, + center: s, + scales: o, + quaternion: a, + rgba: i, + rgb: D, + opacity: n, + x: w, + y: c, + z: r, + r: y, + g: G, + b: h + } = g; + return [ + C ? `${C} = ${B ? `${B}.flags` : "0u"};` : null, + E ? `${E} = isGsplatActive(${B ? `${B}.flags` : "0u"});` : null, + t ? `${t} = ${B ? `${B}.index` : "0"};` : null, + s ? `${s} = ${B ? `${B}.center` : "vec3(0.0, 0.0, 0.0)"};` : null, + o ? `${o} = ${B ? `${B}.scales` : "vec3(0.0, 0.0, 0.0)"};` : null, + a ? `${a} = ${B ? `${B}.quaternion` : "vec4(0.0, 0.0, 0.0, 1.0)"};` : null, + i ? `${i} = ${B ? `${B}.rgba` : "vec4(0.0, 0.0, 0.0, 0.0)"};` : null, + D ? `${D} = ${B ? `${B}.rgba.rgb` : "vec3(0.0, 0.0, 0.0)"};` : null, + n ? `${n} = ${B ? `${B}.rgba.a` : "0.0"};` : null, + w ? `${w} = ${B ? `${B}.center.x` : "0.0"};` : null, + c ? `${c} = ${B ? `${B}.center.y` : "0.0"};` : null, + r ? `${r} = ${B ? `${B}.center.z` : "0.0"};` : null, + y ? `${y} = ${B ? `${B}.rgba.r` : "0.0"};` : null, + G ? `${G} = ${B ? `${B}.rgba.g` : "0.0"};` : null, + h ? `${h} = ${B ? `${B}.rgba.b` : "0.0"};` : null + ].filter(Boolean); + } + }); + } +} +class eg extends f { + constructor({ + gsplat: A, + flags: I, + index: g, + center: B, + scales: C, + quaternion: E, + rgba: t, + rgb: s, + opacity: o, + x: a, + y: i, + z: D, + r: n, + g: w, + b: c + }) { + super({ + inTypes: { + gsplat: v, + flags: "uint", + index: "int", + center: "vec3", + scales: "vec3", + quaternion: "vec4", + rgba: "vec4", + rgb: "vec3", + opacity: "float", + x: "float", + y: "float", + z: "float", + r: "float", + g: "float", + b: "float" + }, + outTypes: { gsplat: v }, + inputs: { + gsplat: A, + flags: I, + index: g, + center: B, + scales: C, + quaternion: E, + rgba: t, + rgb: s, + opacity: o, + x: a, + y: i, + z: D, + r: n, + g: w, + b: c + }, + globals: () => [rA], + statements: ({ inputs: r, outputs: y }) => { + const { gsplat: G } = y; + if (!G) + return []; + const { + gsplat: h, + flags: M, + index: l, + center: k, + scales: R, + quaternion: Y, + rgba: d, + rgb: m, + opacity: J, + x, + y: U, + z: S, + r: T, + g: V, + b: P + } = r; + return [ + `${G}.flags = ${M ?? (h ? `${h}.flags` : "0u")};`, + `${G}.index = ${l ?? (h ? `${h}.index` : "0")};`, + `${G}.center = ${k ?? (h ? `${h}.center` : "vec3(0.0, 0.0, 0.0)")};`, + `${G}.scales = ${R ?? (h ? `${h}.scales` : "vec3(0.0, 0.0, 0.0)")};`, + `${G}.quaternion = ${Y ?? (h ? `${h}.quaternion` : "vec4(0.0, 0.0, 0.0, 1.0)")};`, + `${G}.rgba = ${d ?? (h ? `${h}.rgba` : "vec4(0.0, 0.0, 0.0, 0.0)")};`, + m ? `${G}.rgba.rgb = ${m};` : null, + J ? `${G}.rgba.a = ${J};` : null, + x ? `${G}.center.x = ${x};` : null, + U ? `${G}.center.y = ${U};` : null, + S ? `${G}.center.z = ${S};` : null, + T ? `${G}.rgba.r = ${T};` : null, + V ? `${G}.rgba.g = ${V};` : null, + P ? `${G}.rgba.b = ${P};` : null + ].filter(Boolean); + } + }); + } + dynoOut() { + return new H(this, "gsplat"); + } +} +const Dg = IA(` + vec3 gsplatNormal(vec3 scales, vec4 quaternion) { + float minScale = min(scales.x, min(scales.y, scales.z)); + vec3 normal; + if (scales.z == minScale) { + normal = vec3(0.0, 0.0, 1.0); + } else if (scales.y == minScale) { + normal = vec3(0.0, 1.0, 0.0); + } else { + normal = vec3(1.0, 0.0, 0.0); + } + return quatVec(quaternion, normal); + } +`); +class ng extends N { + constructor({ gsplat: A }) { + super({ a: A, outKey: "normal", outTypeFunc: () => "vec3" }), this.globals = () => [rA, Dg], this.statements = ({ inputs: I, outputs: g }) => [ + `${g.normal} = gsplatNormal(${I.a}.scales, ${I.a}.quaternion);` + ]; + } +} +class cg extends f { + constructor({ + gsplat: A, + scale: I, + rotate: g, + translate: B, + recolor: C + }) { + super({ + inTypes: { + gsplat: v, + scale: "float", + rotate: "vec4", + translate: "vec3", + recolor: "vec4" + }, + outTypes: { gsplat: v }, + inputs: { gsplat: A, scale: I, rotate: g, translate: B, recolor: C }, + globals: () => [rA], + statements: ({ inputs: E, outputs: t, compile: s }) => { + const { gsplat: o } = t; + if (!o || !E.gsplat) + return []; + const { scale: a, rotate: i, translate: D, recolor: n } = E, w = s.indent; + return [ + `${o} = ${E.gsplat};`, + `if (isGsplatActive(${o}.flags)) {`, + a ? `${w}${o}.center *= ${a};` : null, + i ? `${w}${o}.center = quatVec(${i}, ${o}.center);` : null, + D ? `${w}${o}.center += ${D};` : null, + a ? `${w}${o}.scales *= ${a};` : null, + i ? `${w}${o}.quaternion = quatQuat(${i}, ${o}.quaternion);` : null, + n ? `${w}${o}.rgba *= ${n};` : null, + "}" + ].filter(Boolean); + } + }); + } + dynoOut() { + return new H(this, "gsplat"); + } +} +const wg = (Q) => new rg({ gsplat: Q }), zt = (Q) => new SI({ rgba8: Q }); +class rg extends f { + constructor({ gsplat: A }) { + super({ + inTypes: { gsplat: v }, + inputs: { gsplat: A }, + globals: () => [rA], + statements: ({ inputs: I, outputs: g }) => { + const { output: B } = g; + if (!B) + return []; + const { gsplat: C } = I; + return C ? JA(` + if (isGsplatActive(${C}.flags)) { + ${B} = packSplat(${C}.center, ${C}.scales, ${C}.quaternion, ${C}.rgba); + } else { + ${B} = uvec4(0u, 0u, 0u, 0u); + } + `) : [`${B} = uvec4(0u, 0u, 0u, 0u);`]; + } + }); + } + dynoOut() { + return new H(this, "output"); + } +} +class SI extends f { + constructor({ rgba8: A }) { + super({ + inTypes: { rgba8: "vec4" }, + inputs: { rgba8: A }, + statements: ({ inputs: I, outputs: g }) => [ + `target = ${I.rgba8 ?? "vec4(0.0, 0.0, 0.0, 0.0)"};` + ] + }); + } + dynoOut() { + return new H(this, "rgba8"); + } +} +const Ot = (Q, A, I) => new F({ key: Q, type: A, value: I }), Pt = (Q = !1, A) => new PQ({ key: A, value: Q }), _t = (Q = 0, A) => new hg({ key: A, value: Q }), $t = (Q = 0, A) => new uQ({ key: A, value: Q }), LA = (Q = 0, A) => new gQ({ key: A, value: Q }), Ai = (Q, A) => new yg({ key: A, value: Q }), Qi = (Q, A) => new Gg({ key: A, value: Q }), Ii = (Q, A) => new lg({ key: A, value: Q }), gi = (Q, A) => new Mg({ key: A, value: Q }), Bi = (Q, A) => new Ng({ key: A, value: Q }), Ci = (Q, A) => new kg({ key: A, value: Q }), Ei = (Q, A) => new Fg({ key: A, value: Q }), vA = (Q, A) => new hQ({ key: A, value: Q }), ti = (Q, A) => new Rg({ key: A, value: Q }), ii = (Q, A) => new Jg({ key: A, value: Q }), si = (Q, A) => new Yg({ key: A, value: Q }), oi = (Q, A) => new fQ({ key: A, value: Q }), ai = (Q, A) => new dg({ key: A, value: Q }), ei = (Q, A) => new ug({ key: A, value: Q }), Di = (Q, A) => new Ug({ key: A, value: Q }), ni = (Q, A) => new Sg({ key: A, value: Q }), ci = (Q, A) => new Lg({ key: A, value: Q }), wi = (Q, A) => new pg({ key: A, value: Q }), ri = (Q, A) => new Hg({ key: A, value: Q }), hi = (Q, A) => new fg({ key: A, value: Q }), yi = (Q, A) => new mg({ key: A, value: Q }), Gi = (Q, A) => new bg({ key: A, value: Q }), li = (Q, A) => new xg({ key: A, value: Q }), Mi = (Q, A) => new Kg({ key: A, value: Q }), Ni = (Q, A) => new Zg({ key: A, value: Q }), ki = (Q, A) => new qg({ key: A, value: Q }), Fi = (Q, A) => new Wg({ key: A, value: Q }), Ri = (Q, A) => new FQ({ key: A, value: Q }), Ji = (Q, A) => new Vg({ key: Q, value: A }), Yi = (Q, A) => new vg({ key: A, value: Q }), di = (Q, A) => new Tg({ key: A, value: Q }), ui = (Q, A) => new Xg({ key: A, value: Q }), Ui = (Q, A) => new jg({ key: A, value: Q }), Si = (Q, A) => new zg({ key: A, value: Q }), Li = (Q, A) => new Og({ key: A, value: Q }), pi = (Q, A) => new Pg({ key: A, value: Q }), Hi = (Q, A) => new _g({ key: A, value: Q }), fi = (Q, A) => new $g({ key: A, value: Q }), mi = (Q, A) => new AB({ key: A, value: Q }); +class F extends f { + constructor({ + key: A, + type: I, + count: g, + value: B, + update: C, + globals: E + }) { + A = A ?? "value", super({ + outTypes: { [A]: I }, + update: () => { + if (C) { + const t = C(this.value); + t !== void 0 && (this.value = t); + } + this.uniform.value = this.value; + }, + generate: ({ inputs: t, outputs: s }) => { + const o = (E == null ? void 0 : E({ inputs: t, outputs: s })) ?? [], a = {}, i = s[A]; + return i && (o.push(`uniform ${uI(i, I, g)};`), a[i] = this.uniform), { globals: o, uniforms: a }; + } + }), this.type = I, this.count = g, this.value = B, this.uniform = { value: B }, this.outKey = A; + } + dynoOut() { + return new H(this, this.outKey); + } +} +class PQ extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "bool", value: I, update: g }); + } +} +class hg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "uint", value: I, update: g }); + } +} +class uQ extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "int", value: I, update: g }); + } +} +class gQ extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "float", value: I, update: g }); + } +} +class yg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "bvec2", value: I, update: g }); + } +} +class Gg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "uvec2", value: I, update: g }); + } +} +class lg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "ivec2", value: I, update: g }); + } +} +class Mg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "vec2", value: I, update: g }); + } +} +class Ng extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "bvec3", value: I, update: g }); + } +} +class kg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "uvec3", value: I, update: g }); + } +} +class Fg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "ivec3", value: I, update: g }); + } +} +class hQ extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "vec3", value: I, update: g }); + } +} +class Rg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "bvec4", value: I, update: g }); + } +} +class Jg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "uvec4", value: I, update: g }); + } +} +class Yg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "ivec4", value: I, update: g }); + } +} +class fQ extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "vec4", value: I, update: g }); + } +} +class dg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "mat2", value: I, update: g }); + } +} +class ug extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "mat2x2", value: I, update: g }); + } +} +class Ug extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "mat2x3", value: I, update: g }); + } +} +class Sg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "mat2x4", value: I, update: g }); + } +} +class Lg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "mat3", value: I, update: g }); + } +} +class pg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "mat3x2", value: I, update: g }); + } +} +class Hg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "mat3x3", value: I, update: g }); + } +} +class fg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "mat3x4", value: I, update: g }); + } +} +class mg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "mat4", value: I, update: g }); + } +} +class bg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "mat4x2", value: I, update: g }); + } +} +class xg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "mat4x3", value: I, update: g }); + } +} +class Kg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "mat4x4", value: I, update: g }); + } +} +class Zg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "usampler2D", value: I, update: g }); + } +} +class qg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "isampler2D", value: I, update: g }); + } +} +class Wg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "sampler2D", value: I, update: g }); + } +} +class FQ extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "usampler2DArray", value: I, update: g }); + } +} +class Vg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "isampler2DArray", value: I, update: g }); + } +} +class vg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "sampler2DArray", value: I, update: g }); + } +} +class Tg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "usampler3D", value: I, update: g }); + } +} +class Xg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "isampler3D", value: I, update: g }); + } +} +class jg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "sampler3D", value: I, update: g }); + } +} +class zg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "usamplerCube", value: I, update: g }); + } +} +class Og extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "isamplerCube", value: I, update: g }); + } +} +class Pg extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "samplerCube", value: I, update: g }); + } +} +class _g extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "sampler2DShadow", value: I, update: g }); + } +} +class $g extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "sampler2DArrayShadow", value: I, update: g }); + } +} +class AB extends F { + constructor({ + key: A, + value: I, + update: g + }) { + super({ key: A, type: "samplerCubeShadow", value: I, update: g }); + } +} +var CA = Uint8Array, DQ = Uint16Array, bi = Int32Array, QB = new CA([ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 0, + /* unused */ + 0, + 0, + /* impossible */ + 0 +]), IB = new CA([ + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 8, + 9, + 9, + 10, + 10, + 11, + 11, + 12, + 12, + 13, + 13, + /* unused */ + 0, + 0 +]), xi = new CA([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), gB = function(Q, A) { + for (var I = new DQ(31), g = 0; g < 31; ++g) + I[g] = A += 1 << Q[g - 1]; + for (var B = new bi(I[30]), g = 1; g < 30; ++g) + for (var C = I[g]; C < I[g + 1]; ++C) + B[C] = C - I[g] << 5 | g; + return { b: I, r: B }; +}, BB = gB(QB, 2), CB = BB.b, Ki = BB.r; +CB[28] = 258, Ki[258] = 28; +var Zi = gB(IB, 0), qi = Zi.b, rI = new DQ(32768); +for (var W = 0; W < 32768; ++W) { + var VA = (W & 43690) >> 1 | (W & 21845) << 1; + VA = (VA & 52428) >> 2 | (VA & 13107) << 2, VA = (VA & 61680) >> 4 | (VA & 3855) << 4, rI[W] = ((VA & 65280) >> 8 | (VA & 255) << 8) >> 1; +} +var RQ = function(Q, A, I) { + for (var g = Q.length, B = 0, C = new DQ(A); B < g; ++B) + Q[B] && ++C[Q[B] - 1]; + var E = new DQ(A); + for (B = 1; B < A; ++B) + E[B] = E[B - 1] + C[B - 1] << 1; + var t; + if (I) { + t = new DQ(1 << A); + var s = 15 - A; + for (B = 0; B < g; ++B) + if (Q[B]) + for (var o = B << 4 | Q[B], a = A - Q[B], i = E[Q[B] - 1]++ << a, D = i | (1 << a) - 1; i <= D; ++i) + t[rI[i] >> s] = o; + } else + for (t = new DQ(g), B = 0; B < g; ++B) + Q[B] && (t[B] = rI[E[Q[B] - 1]++] >> 15 - Q[B]); + return t; +}, mQ = new CA(288); +for (var W = 0; W < 144; ++W) + mQ[W] = 8; +for (var W = 144; W < 256; ++W) + mQ[W] = 9; +for (var W = 256; W < 280; ++W) + mQ[W] = 7; +for (var W = 280; W < 288; ++W) + mQ[W] = 8; +var EB = new CA(32); +for (var W = 0; W < 32; ++W) + EB[W] = 5; +var Wi = /* @__PURE__ */ RQ(mQ, 9, 1), Vi = /* @__PURE__ */ RQ(EB, 5, 1), oI = function(Q) { + for (var A = Q[0], I = 1; I < Q.length; ++I) + Q[I] > A && (A = Q[I]); + return A; +}, dA = function(Q, A, I) { + var g = A / 8 | 0; + return (Q[g] | Q[g + 1] << 8) >> (A & 7) & I; +}, aI = function(Q, A) { + var I = A / 8 | 0; + return (Q[I] | Q[I + 1] << 8 | Q[I + 2] << 16) >> (A & 7); +}, tB = function(Q) { + return (Q + 7) / 8 | 0; +}, TQ = function(Q, A, I) { + return (A == null || A < 0) && (A = 0), (I == null || I > Q.length) && (I = Q.length), new CA(Q.subarray(A, I)); +}, vi = [ + "unexpected EOF", + "invalid block type", + "invalid length/literal", + "invalid distance", + "stream finished", + "no stream handler", + , + "no callback", + "invalid UTF-8 data", + "extra field too long", + "date not in range 1980-2099", + "filename too long", + "stream finishing", + "invalid zip data" + // determined by unknown compression method +], kA = function(Q, A, I) { + var g = new Error(A || vi[Q]); + if (g.code = Q, Error.captureStackTrace && Error.captureStackTrace(g, kA), !I) + throw g; + return g; +}, Ti = function(Q, A, I, g) { + var B = Q.length, C = 0; + if (!B || A.f && !A.l) + return I || new CA(0); + var E = !I, t = E || A.i != 2, s = A.i; + E && (I = new CA(B * 3)); + var o = function(lA) { + var SA = I.length; + if (lA > SA) { + var MA = new CA(Math.max(SA * 2, lA)); + MA.set(I), I = MA; + } + }, a = A.f || 0, i = A.p || 0, D = A.b || 0, n = A.l, w = A.d, c = A.m, r = A.n, y = B * 8; + do { + if (!n) { + a = dA(Q, i, 1); + var G = dA(Q, i + 1, 3); + if (i += 3, G) + if (G == 1) + n = Wi, w = Vi, c = 9, r = 5; + else if (G == 2) { + var k = dA(Q, i, 31) + 257, R = dA(Q, i + 10, 15) + 4, Y = k + dA(Q, i + 5, 31) + 1; + i += 14; + for (var d = new CA(Y), m = new CA(19), J = 0; J < R; ++J) + m[xi[J]] = dA(Q, i + J * 3, 7); + i += R * 3; + for (var x = oI(m), U = (1 << x) - 1, S = RQ(m, x, 1), J = 0; J < Y; ) { + var T = S[dA(Q, i, U)]; + i += T & 15; + var h = T >> 4; + if (h < 16) + d[J++] = h; + else { + var V = 0, P = 0; + for (h == 16 ? (P = 3 + dA(Q, i, 3), i += 2, V = d[J - 1]) : h == 17 ? (P = 3 + dA(Q, i, 7), i += 3) : h == 18 && (P = 11 + dA(Q, i, 127), i += 7); P--; ) + d[J++] = V; + } + } + var _ = d.subarray(0, k), X = d.subarray(k); + c = oI(_), r = oI(X), n = RQ(_, c, 1), w = RQ(X, r, 1); + } else + kA(1); + else { + var h = tB(i) + 4, M = Q[h - 4] | Q[h - 3] << 8, l = h + M; + if (l > B) { + s && kA(0); + break; + } + t && o(D + M), I.set(Q.subarray(h, l), D), A.b = D += M, A.p = i = l * 8, A.f = a; + continue; + } + if (i > y) { + s && kA(0); + break; + } + } + t && o(D + 131072); + for (var aA = (1 << c) - 1, $ = (1 << r) - 1, iA = i; ; iA = i) { + var V = n[aI(Q, i) & aA], eA = V >> 4; + if (i += V & 15, i > y) { + s && kA(0); + break; + } + if (V || kA(2), eA < 256) + I[D++] = eA; + else if (eA == 256) { + iA = i, n = null; + break; + } else { + var YA = eA - 254; + if (eA > 264) { + var J = eA - 257, hA = QB[J]; + YA = dA(Q, i, (1 << hA) - 1) + CB[J], i += hA; + } + var DA = w[aI(Q, i) & $], L = DA >> 4; + DA || kA(3), i += DA & 15; + var X = qi[L]; + if (L > 3) { + var hA = IB[L]; + X += aI(Q, i) & (1 << hA) - 1, i += hA; + } + if (i > y) { + s && kA(0); + break; + } + t && o(D + 131072); + var yA = D + YA; + if (D < X) { + var gA = C - X, GA = Math.min(X, yA); + for (gA + D < 0 && kA(3); D < GA; ++D) + I[D] = g[gA + D]; + } + for (; D < yA; ++D) + I[D] = I[D - X]; + } + } + A.l = n, A.p = iA, A.b = D, A.f = a, n && (a = 1, A.m = c, A.d = w, A.n = r); + } while (!a); + return D != I.length && E ? TQ(I, 0, D) : I.subarray(0, D); +}, Xi = /* @__PURE__ */ new CA(0), ji = function(Q) { + (Q[0] != 31 || Q[1] != 139 || Q[2] != 8) && kA(6, "invalid gzip data"); + var A = Q[3], I = 10; + A & 4 && (I += (Q[10] | Q[11] << 8) + 2); + for (var g = (A >> 3 & 1) + (A >> 4 & 1); g > 0; g -= !Q[I++]) + ; + return I + (A & 2); +}, eI = /* @__PURE__ */ function() { + function Q(A, I) { + typeof A == "function" && (I = A, A = {}), this.ondata = I; + var g = A && A.dictionary && A.dictionary.subarray(-32768); + this.s = { i: 0, b: g ? g.length : 0 }, this.o = new CA(32768), this.p = new CA(0), g && this.o.set(g); + } + return Q.prototype.e = function(A) { + if (this.ondata || kA(5), this.d && kA(4), !this.p.length) + this.p = A; + else if (A.length) { + var I = new CA(this.p.length + A.length); + I.set(this.p), I.set(A, this.p.length), this.p = I; + } + }, Q.prototype.c = function(A) { + this.s.i = +(this.d = A || !1); + var I = this.s.b, g = Ti(this.p, this.s, this.o); + this.ondata(TQ(g, I, this.s.b), this.d), this.o = TQ(g, this.s.b - 32768), this.s.b = this.o.length, this.p = TQ(this.p, this.s.p / 8 | 0), this.s.p &= 7; + }, Q.prototype.push = function(A, I) { + this.e(A), this.c(I); + }, Q; +}(), iB = /* @__PURE__ */ function() { + function Q(A, I) { + this.v = 1, this.r = 0, eI.call(this, A, I); + } + return Q.prototype.push = function(A, I) { + if (eI.prototype.e.call(this, A), this.r += A.length, this.v) { + var g = this.p.subarray(this.v - 1), B = g.length > 3 ? ji(g) : 4; + if (B > g.length) { + if (!I) + return; + } else this.v > 1 && this.onmember && this.onmember(this.r - g.length); + this.p = g.subarray(B), this.v = 0; + } + eI.prototype.c.call(this, I), this.s.f && !this.s.l && !I && (this.v = tB(this.s.p) + 9, this.s = { i: 0 }, this.o = new CA(0), this.push(new CA(0), I)); + }, Q; +}(), zi = typeof TextDecoder < "u" && /* @__PURE__ */ new TextDecoder(), Oi = 0; +try { + zi.decode(Xi, { stream: !0 }), Oi = 1; +} catch { +} +const bQ = new Float32Array(1), EI = new Uint32Array(bQ.buffer); +function Pi(Q) { + return bQ[0] = Q, EI[0]; +} +function _i(Q) { + return EI[0] = Q, bQ[0]; +} +function BQ(Q) { + bQ[0] = Q; + const A = EI[0], I = A >> 31 & 1, g = A >> 23 & 255, B = A & 8388607, C = I << 15; + if (g === 255) + return B !== 0 ? C | 32767 : C | 31744; + const E = g - 127 + 15; + if (E >= 31) + return C | 31744; + if (E <= 0) { + if (E < -10) + return C; + const s = (B | 8388608) >> 1 - E + 13; + return C | s; + } + const t = B >> 13; + return C | E << 10 | t; +} +function CQ(Q) { + const A = Q >> 15 & 1, I = Q >> 10 & 31, g = Q & 1023; + let B; + if (I === 0) + if (g === 0) + B = A << 31; + else { + let C = g, E = -14; + for (; (C & 1024) === 0; ) + C <<= 1, E--; + C &= 1023; + const t = E + 127, s = C << 13; + B = A << 31 | t << 23 | s; + } + else if (I === 31) + g === 0 ? B = A << 31 | 2139095040 : B = A << 31 | 2143289344; + else { + const C = I - 15 + 127, E = g << 13; + B = A << 31 | C << 23 | E; + } + return EI[0] = B, bQ[0]; +} +function xA(Q) { + return Math.max(0, Math.min(255, Math.round(Q * 255))); +} +function XQ(Q) { + return Math.max(-127, Math.min(127, Math.round(Q * 127))); +} +function $i(Q) { + return Q / 255; +} +function As(Q) { + return Q / 127; +} +class Qs { + // Create a DataCache with a given function that fetches data not in the cache. + constructor({ + asyncFetch: A, + maxItems: I = 5 + }) { + this.asyncFetch = A, this.maxItems = I, this.items = []; + } + // Fetch data for the key, returning cached data if available. + async getFetch(A) { + const I = this.items.findIndex((B) => B.key === A); + if (I >= 0) { + const B = this.items.splice(I, 1)[0]; + return this.items.push(B), B.data; + } + const g = await this.asyncFetch(A); + for (this.items.push({ key: A, data: g }); this.items.length > this.maxItems; ) + this.items.shift(); + return g; + } +} +function Is(Q, A) { + const I = Object.entries(Q).map(([g, B]) => [ + g, + A(B, g) + ]); + return Object.fromEntries(I); +} +function gs(Q, A) { + const I = Object.entries(Q).map(([g, B]) => [g, A(B, g)]).filter(([g, B]) => B !== void 0); + return Object.fromEntries(I); +} +function sB(Q) { + const A = [], I = /* @__PURE__ */ new Set(); + function g(B) { + B && typeof B == "object" && !I.has(B) && (I.add(B), B instanceof ArrayBuffer ? A.push(B) : ArrayBuffer.isView(B) ? A.push(B.buffer) : Array.isArray(B) ? B.forEach(g) : Object.values(B).forEach(g)); + } + return g(Q), A; +} +function Bs(Q, A) { + return new Array(Q).fill(null).map((I, g) => A(g)); +} +class oB { + constructor({ + // Allocate a new item with the given args + allocate: A, + // Dispose of an item (optional, if GC is enough) + dispose: I, + // Check if an existing item in the list is valid for the given args, + // allowing you to store heterogeneous items in the list. + valid: g + }) { + this.items = [], this.allocate = A, this.dispose = I, this.valid = g; + } + // Allocate a new item from the free list, first checking if a existing item + // on the freelist is valid for the given args. + alloc(A) { + for (; ; ) { + const I = this.items.pop(); + if (!I) + break; + if (this.valid(I, A)) + return I; + this.dispose && this.dispose(I); + } + return this.allocate(A); + } + free(A) { + this.items.push(A); + } + disposeAll() { + let A; + for (A = this.items.pop(); A; ) + this.dispose && this.dispose(A), A = this.items.pop(); + } +} +function hI(Q, A, I, g, B, C, E, t, s, o, a, i, D, n, w, c) { + const r = xA(n), y = xA(w), G = xA(c), h = xA(D), M = LI( + new e.Quaternion(s, o, a, i) + ), l = M & 255, k = M >>> 8 & 255, R = M >>> 16 & 255, Y = C === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(C) - pA) / KA) + 1 + ) + ), d = E === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(E) - pA) / KA) + 1 + ) + ), m = t === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(t) - pA) / KA) + 1 + ) + ), J = BQ(I), x = BQ(g), U = BQ(B), S = A * 4; + Q[S] = r | y << 8 | G << 16 | h << 24, Q[S + 1] = J | x << 16, Q[S + 2] = U | l << 16 | k << 24, Q[S + 3] = Y | d << 8 | m << 16 | R << 24; +} +function Cs(Q, A, I, g, B) { + const C = BQ(I), E = BQ(g), t = BQ(B), s = A * 4; + Q[s + 1] = C | E << 16, Q[s + 2] = t | Q[s + 2] & 4294901760; +} +function Es(Q, A, I, g, B) { + const C = I === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(I) - pA) / KA) + 1 + ) + ), E = g === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(g) - pA) / KA) + 1 + ) + ), t = B === 0 ? 0 : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(B) - pA) / KA) + 1 + ) + ), s = A * 4; + Q[s + 3] = C | E << 8 | t << 16 | Q[s + 3] & 4278190080; +} +function ts(Q, A, I, g, B, C) { + const E = LI( + new e.Quaternion(I, g, B, C) + ), t = E & 255, s = E >>> 8 & 255, o = E >>> 16 & 255, a = A * 4; + Q[a + 2] = Q[a + 2] & 65535 | t << 16 | s << 24, Q[a + 3] = Q[a + 3] & 16777215 | o << 24; +} +function is(Q, A, I, g, B) { + const C = xA(I), E = xA(g), t = xA(B), s = A * 4; + Q[s] = C | E << 8 | t << 16 | Q[s] & 4278190080; +} +function ss(Q, A, I) { + const g = xA(I), B = A * 4; + Q[B] = Q[B] & 16777215 | g << 24; +} +const os = new e.Vector3(), as = new e.Vector3(), es = new e.Quaternion(), Ds = new e.Color(), ns = { + center: os, + scales: as, + quaternion: es, + color: Ds, + opacity: 0 +}; +function yI(Q, A) { + const I = ns, g = A * 4, B = Q[g], C = Q[g + 1], E = Q[g + 2], t = Q[g + 3]; + I.color.set( + (B & 255) / 255, + (B >>> 8 & 255) / 255, + (B >>> 16 & 255) / 255 + ), I.opacity = (B >>> 24 & 255) / 255, I.center.set( + CQ(C & 65535), + CQ(C >>> 16 & 65535), + CQ(E & 65535) + ); + const s = t & 255; + I.scales.x = s === 0 ? 0 : Math.exp(pA + (s - 1) * KA); + const o = t >>> 8 & 255; + I.scales.y = o === 0 ? 0 : Math.exp(pA + (o - 1) * KA); + const a = t >>> 16 & 255; + I.scales.z = a === 0 ? 0 : Math.exp(pA + (a - 1) * KA); + const i = E >>> 16 & 65535 | t >>> 8 & 16711680; + return rB(i, I.quaternion), I; +} +function wA(Q) { + const A = Z, I = Math.max( + Zt, + Math.min(IQ, Math.ceil(Q / A)) + ), g = Math.ceil(Q / (A * I)), B = A * I * g; + return { width: A, height: I, depth: g, maxSplats: B }; +} +function cs() { + return navigator.maxTouchPoints > 0 ? !0 : /Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test( + navigator.userAgent + ); +} +function ws() { + return /Android/.test(navigator.userAgent); +} +function rs() { + return /Oculus/.test(navigator.userAgent); +} +function hs(Q, A, I) { + const g = new Uint8Array(A * 4); + for (let B = 0; B < I / 2; B++) { + const C = B * A * 4, E = (I - 1 - B) * A * 4; + g.set(Q.subarray(C, C + A * 4)), Q.set( + Q.subarray(E, E + A * 4), + C + ), Q.set(g, E); + } + return Q; +} +function ys(Q, A, I) { + const g = document.createElement("canvas"); + g.width = A, g.height = I; + const B = g.getContext("2d"); + if (!B) + throw new Error("Can't get 2d context"); + const C = B.createImageData(A, I); + return C.data.set(Q), B.putImageData(C, 0, 0), g.toDataURL("image/png"); +} +function aB(Q) { + const A = new e.Clock(Q.autoStart); + return A.startTime = Q.startTime, A.oldTime = Q.oldTime, A.elapsedTime = Q.elapsedTime, A.running = Q.running, A; +} +function Gs(Q) { + return Object.fromEntries( + Object.entries(Q).filter(([A, I]) => I !== void 0) + ); +} +const eB = IA(` + precision highp float; + + in vec3 position; + + void main() { + gl_Position = vec4(position.xy, 0.0, 1.0); + } +`); +function DB(Q) { + const A = new e.Vector3(); + for (const I of Q) + A.add(I); + return A.divideScalar(Q.length); +} +function nB(Q) { + if (Q.length === 0) + return new e.Quaternion(); + const A = Q[0].clone(); + for (let I = 1; I < Q.length; I++) + Q[I].dot(Q[0]) < 0 ? (A.x -= Q[I].x, A.y -= Q[I].y, A.z -= Q[I].z, A.w -= Q[I].w) : (A.x += Q[I].x, A.y += Q[I].y, A.z += Q[I].z, A.w += Q[I].w); + return A.normalize(); +} +function cB(Q, A) { + const I = new e.Vector3(0, 0, 0).applyMatrix4(Q), g = new e.Vector3(0, 0, 0).applyMatrix4(A), B = new e.Vector3(0, 0, -1).applyMatrix4(Q).sub(I).normalize(), C = new e.Vector3(0, 0, -1).applyMatrix4(A).sub(g).normalize(), E = I.distanceTo(g), t = B.dot(C); + return { distance: E, coincidence: t }; +} +function ls({ + matrix1: Q, + matrix2: A, + maxDistance: I +}) { + const g = new e.Vector3(0, 0, 0).applyMatrix4(Q), B = new e.Vector3(0, 0, 0).applyMatrix4(A); + return g.distanceTo(B) <= I; +} +function Ms({ + matrix1: Q, + matrix2: A, + maxDistance: I, + minCoincidence: g +}) { + const { distance: B, coincidence: C } = cB(Q, A); + return B <= I && (g == null || C >= g); +} +function wB(Q, A) { + const [I, g] = [new e.Vector3(), new e.Quaternion()], [B, C] = [new e.Vector3(), new e.Quaternion()]; + Q.decompose(I, g, new e.Vector3()), A.decompose(B, C, new e.Vector3()); + const E = I.distanceTo(B), t = Math.abs(g.dot(C)); + return { distance: E, coorient: t }; +} +function _Q({ + matrix1: Q, + matrix2: A, + maxDistance: I, + minCoorient: g +}) { + const { distance: B, coorient: C } = wB(Q, A); + return B <= I && (g == null || C >= g); +} +function Ns(Q, A = 1e-3) { + return Math.abs(Q) < A ? 0 : Math.sign(Q); +} +function ks(Q) { + const A = Q.w < 0, I = XQ(A ? -Q.x : Q.x), g = XQ(A ? -Q.y : Q.y), B = XQ(A ? -Q.z : Q.z), C = I & 255, E = g & 255, t = B & 255; + return C | E << 8 | t << 16; +} +function Fs(Q, A) { + const I = Q << 24 >> 24, g = Q << 16 >> 24, B = Q << 8 >> 24; + A.set(I / 127, g / 127, B / 127, 0); + const C = A.x * A.x + A.y * A.y + A.z * A.z; + return A.w = Math.sqrt(Math.max(0, 1 - C)), A; +} +function LI(Q) { + const A = Q.clone().normalize(); + A.w < 0 && A.set(-A.x, -A.y, -A.z, -A.w); + const I = 2 * Math.acos(A.w), g = Math.sqrt( + A.x * A.x + A.y * A.y + A.z * A.z + ), B = g < 1e-6 ? new e.Vector3(1, 0, 0) : new e.Vector3(A.x, A.y, A.z).divideScalar(g), C = Math.abs(B.x) + Math.abs(B.y) + Math.abs(B.z); + let E = B.x / C, t = B.y / C; + if (B.z < 0) { + const n = E; + E = (1 - Math.abs(t)) * (E >= 0 ? 1 : -1), t = (1 - Math.abs(n)) * (t >= 0 ? 1 : -1); + } + const s = E * 0.5 + 0.5, o = t * 0.5 + 0.5, a = Math.round(s * 255), i = Math.round(o * 255); + return Math.round(I * (255 / Math.PI)) << 16 | i << 8 | a; +} +function rB(Q, A) { + const I = Q & 255, g = Q >>> 8 & 255, B = Q >>> 16 & 255, C = I / 255, E = g / 255; + let t = (C - 0.5) * 2, s = (E - 0.5) * 2; + const o = 1 - (Math.abs(t) + Math.abs(s)), a = Math.max(-o, 0); + t += t >= 0 ? -a : a, s += s >= 0 ? -a : a; + const i = new e.Vector3(t, s, o).normalize(), n = B / 255 * Math.PI * 0.5, w = Math.sin(n), c = Math.cos(n); + return A.set(i.x * w, i.y * w, i.z * w, c), A; +} +function Rs(Q) { + const A = Q.clone().normalize(), I = 2 * (A.w * A.x + A.y * A.z), g = 1 - 2 * (A.x * A.x + A.y * A.y), B = Math.atan2(I, g), C = 2 * (A.w * A.y - A.z * A.x), E = Math.abs(C) >= 1 ? Math.sign(C) * (Math.PI / 2) : Math.asin(C), t = 2 * (A.w * A.z + A.x * A.y), s = 1 - 2 * (A.y * A.y + A.z * A.z), o = Math.atan2(t, s), a = (B + Math.PI) / (2 * Math.PI), i = (E + Math.PI) / (2 * Math.PI), D = (o + Math.PI) / (2 * Math.PI), n = Math.round(a * 255), w = Math.round(i * 255); + return Math.round(D * 255) << 16 | w << 8 | n; +} +function Js(Q, A) { + const I = Q & 255, g = Q >>> 8 & 255, B = Q >>> 16 & 255, C = I / 255, E = g / 255, t = B / 255, s = C * (2 * Math.PI) - Math.PI, o = E * (2 * Math.PI) - Math.PI, a = t * (2 * Math.PI) - Math.PI, i = Math.cos(s * 0.5), D = Math.sin(s * 0.5), n = Math.cos(o * 0.5), w = Math.sin(o * 0.5), c = Math.cos(a * 0.5), r = Math.sin(a * 0.5); + return A.w = i * n * c + D * w * r, A.x = D * n * c - i * w * r, A.y = i * w * c + D * n * r, A.z = i * n * r - D * w * c, A.normalize(), A; +} +function xQ(Q, A, I, g) { + const B = Math.max(-127, Math.min(127, Q * 127)), C = Math.max(-127, Math.min(127, A * 127)), E = Math.max(-127, Math.min(127, I * 127)), t = Math.max(-127, Math.min(127, g * 127)); + return B & 255 | (C & 255) << 8 | (E & 255) << 16 | (t & 255) << 24; +} +function Ys(Q, A, I) { + const g = A * 2; + for (let B = 0; B < 9; ++B) { + const C = Math.max(-63, Math.min(63, I[B] * 63)) & 127, E = B * 7, t = E + 7, s = Math.floor(E / 32), o = E - s * 32, a = C << o & 4294967295; + if (Q[g + s] |= a, t > s * 32 + 32) { + const i = C >>> 32 - o & 4294967295; + Q[g + s + 1] |= i; + } + } +} +function ds(Q, A, I) { + Q[A * 4 + 0] = xQ( + I[0], + I[1], + I[2], + I[3] + ), Q[A * 4 + 1] = xQ( + I[4], + I[5], + I[6], + I[7] + ), Q[A * 4 + 2] = xQ( + I[8], + I[9], + I[10], + I[11] + ), Q[A * 4 + 3] = xQ( + I[12], + I[13], + I[14], + 0 + ); +} +function us(Q, A, I) { + const g = A * 4; + for (let B = 0; B < 21; ++B) { + const C = Math.max(-31, Math.min(31, I[B] * 31)) & 63, E = B * 6, t = E + 6, s = Math.floor(E / 32), o = E - s * 32, a = C << o & 4294967295; + if (Q[g + s] |= a, t > s * 32 + 32) { + const i = C >>> 32 - o & 4294967295; + Q[g + s + 1] |= i; + } + } +} +function hB(Q, A) { + const I = []; + let g = 0, B = null; + const C = new iB((s, o) => { + if (I.push(s), g += s.length, o || g >= A) { + const a = new Uint8Array(g); + let i = 0; + for (const D of I) + a.set(D, i), i += D.length; + B = a.slice(0, A); + } + }), E = 1024; + let t = 0; + for (; B == null && t < Q.length; ) { + const s = Q.slice(t, t + E); + C.push(s, !1), t += E; + } + if (B == null && (C.push(new Uint8Array(), !0), B == null)) + throw new Error("Failed to decompress partial gzip"); + return B; +} +class yB { + constructor({ + fileBytes: A, + chunkBytes: I = 64 * 1024 + }) { + this.fileBytes = A, this.chunkBytes = I, this.offset = 0, this.chunks = [], this.totalBytes = 0, this.gunzip = new iB((g, B) => { + this.chunks.push(g), this.totalBytes += g.length; + }); + } + read(A) { + for (; this.totalBytes < A && this.offset < this.fileBytes.length; ) { + const C = Math.min( + this.offset + this.chunkBytes, + this.fileBytes.length + ); + this.gunzip.push(this.fileBytes.subarray(this.offset, C), !1), this.offset = C; + } + if (this.totalBytes < A && this.offset >= this.fileBytes.length && this.gunzip.push(new Uint8Array(0), !0), this.totalBytes < A) + throw new Error( + `Unexpected EOF: needed ${A}, got ${this.totalBytes}` + ); + const I = new Uint8Array(this.totalBytes); + let g = 0; + for (const C of this.chunks) + I.set(C, g), g += C.length; + const B = I.subarray(0, A); + return this.chunks = [I.subarray(A)], this.totalBytes -= A, B; + } +} +const FD = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DataCache: Qs, + FreeList: oB, + GunzipReader: yB, + IDENT_VERTEX_SHADER: eB, + Sint8ToFloat: As, + Uint8ToFloat: $i, + averagePositions: DB, + averageQuaternions: nB, + cloneClock: aB, + coinciDist: cB, + coorientDist: wB, + decodeQuatEulerXyz888: Js, + decodeQuatOctXy88R8: rB, + decodeQuatXyz888: Fs, + decompressPartialGzip: hB, + encodeQuatEulerXyz888: Rs, + encodeQuatOctXy88R8: LI, + encodeQuatXyz888: ks, + encodeSh1Rgb: Ys, + encodeSh2Rgb: ds, + encodeSh3Rgb: us, + epsilonSign: Ns, + flipPixels: hs, + floatBitsToUint: Pi, + floatToSint8: XQ, + floatToUint8: xA, + fromHalf: CQ, + getArrayBuffers: sB, + getTextureSize: wA, + isAndroid: ws, + isMobile: cs, + isOculus: rs, + mapFilterObject: gs, + mapObject: Is, + newArray: Bs, + omitUndefined: Gs, + pixelsToPngUrl: ys, + setPackedSplat: hI, + setPackedSplatCenter: Cs, + setPackedSplatOpacity: ss, + setPackedSplatQuat: ts, + setPackedSplatRgb: is, + setPackedSplatScales: Es, + toHalf: BQ, + uintBitsToFloat: _i, + unpackSplat: yI, + withinCoinciDist: Ms, + withinCoorientDist: _Q, + withinDist: ls +}, Symbol.toStringTag, { value: "Module" })); +class pI { + constructor({ + graph: A, + inputs: I, + outputs: g, + template: B + }) { + this.graph = A, this.template = B, this.inputs = I ?? {}, this.outputs = g ?? {}; + const C = new Cg({ indent: this.template.indent }); + for (const t in this.outputs) + this.outputs[t] && C.declares.add(this.outputs[t]); + const E = A.compile({ + inputs: this.inputs, + outputs: this.outputs, + compile: C + }); + this.shader = B.generate({ globals: C.globals, statements: E }), this.uniforms = C.uniforms, this.updaters = C.updaters; + } + prepareMaterial() { + return Us(this); + } + update() { + for (const A of this.updaters) + A(); + } +} +class HI { + constructor(A) { + const I = A.match(/^([ \t]*)\{\{\s*GLOBALS\s*\}\}/m), g = A.match(/^([ \t]*)\{\{\s*STATEMENTS\s*\}\}/m); + if (!I || !g) + throw new Error( + "Template must contain {{ GLOBALS }} and {{ STATEMENTS }}" + ); + this.before = A.substring(0, I.index), this.between = A.substring( + I.index + I[0].length, + g.index + ), this.after = A.substring( + g.index + g[0].length + ), this.indent = g[1]; + } + generate({ + globals: A, + statements: I + }) { + return this.before + Array.from(A).join(` + +`) + this.between + I.map((g) => this.indent + g).join(` +`) + this.after; + } +} +const VI = /* @__PURE__ */ new Map(); +function Us(Q) { + let A = VI.get(Q); + return A || (A = new e.RawShaderMaterial({ + glslVersion: e.GLSL3, + vertexShader: eB, + fragmentShader: Q.shader, + uniforms: Q.uniforms + }), VI.set(Q, A), A); +} +function fI(Q, A, I = "add") { + const g = () => { + throw new Error(`Invalid ${I} types: ${Q}, ${A}`); + }; + if (Q === A) return Q; + if (Q === "int") { + if (EA(A)) return A; + g(); + } + if (A === "int") { + if (EA(Q)) return Q; + g(); + } + if (Q === "uint") { + if (tA(A)) return A; + g(); + } + if (A === "uint") { + if (tA(Q)) return Q; + g(); + } + if (Q === "float") { + if (zA(A)) return A; + g(); + } + if (A === "float") { + if (zA(Q)) return Q; + g(); + } + throw new Error(`Invalid ${I} types: ${Q}, ${A}`); +} +function Ss(Q, A) { + return fI(Q, A, "sub"); +} +function Ls(Q, A) { + const I = () => { + throw new Error(`Invalid mul types: ${Q}, ${A}`); + }, g = (B) => B; + if (Q === "int") { + if (EA(A)) return g(A); + I(); + } + if (A === "int") { + if (EA(Q)) return g(Q); + I(); + } + if (Q === "uint") { + if (tA(A)) return g(A); + I(); + } + if (A === "uint") { + if (tA(Q)) return g(Q); + I(); + } + if (Q === "float") { + if (zA(A)) return g(A); + I(); + } + if (A === "float") { + if (zA(Q)) return g(Q); + I(); + } + if (EA(Q) || tA(Q) || EA(A) || tA(A)) { + if (Q === A) return g(Q); + I(); + } + if (Q === "vec2") { + if (A === "vec2" || $A(A)) return g("vec2"); + if (A === "mat3x2") return g("vec3"); + if (A === "mat4x2") return g("vec4"); + I(); + } + if (Q === "vec3") { + if (A === "mat2x3") return g("vec2"); + if (A === "vec3" || AQ(A)) return g("vec3"); + if (A === "mat4x3") return g("vec4"); + I(); + } + if (Q === "vec4") { + if (A === "mat2x4") return g("vec2"); + if (A === "mat3x4") return g("vec3"); + if (A === "vec4" || QQ(A)) return g("vec4"); + I(); + } + if (A === "vec2") { + if ($A(Q)) return g("vec2"); + if (Q === "mat2x3") return g("vec3"); + if (Q === "mat2x4") return g("vec4"); + I(); + } + if (A === "vec3") { + if (Q === "mat3x2") return g("vec2"); + if (AQ(Q)) return g("vec3"); + if (Q === "mat3x4") return g("vec4"); + I(); + } + if (A === "vec4") { + if (Q === "mat4x2") return g("vec2"); + if (Q === "mat4x3") return g("vec3"); + if (QQ(Q)) return g("vec4"); + I(); + } + if ($A(Q)) { + if ($A(A)) return g("mat2"); + if (A === "mat3x2") return g("mat3x2"); + if (A === "mat4x2") return g("mat4x2"); + I(); + } + if (Q === "mat2x3") { + if ($A(A)) return g("mat2x3"); + if (A === "mat3x2") return g("mat3"); + if (A === "mat4x2") return g("mat4x3"); + I(); + } + if (Q === "mat2x4") { + if ($A(A)) return g("mat2x4"); + if (A === "mat3x2") return g("mat3x4"); + if (A === "mat4x2") return g("mat4"); + I(); + } + if (Q === "mat3x2") { + if (A === "mat2x3") return g("mat2"); + if (AQ(A)) return g("mat3x2"); + if (A === "mat4x3") return g("mat4x2"); + I(); + } + if (AQ(Q)) { + if (A === "mat2x3") return g("mat2x3"); + if (AQ(A)) return g("mat3"); + if (A === "mat4x3") return g("mat4x3"); + I(); + } + if (Q === "mat3x4") { + if (A === "mat2x3") return g("mat2x4"); + if (AQ(A)) return g("mat3x4"); + if (A === "mat4x3") return g("mat4"); + I(); + } + if (Q === "mat4x2") { + if (A === "mat2x4") return g("mat2"); + if (A === "mat3x4") return g("mat3x2"); + if (QQ(A)) return g("mat4x2"); + I(); + } + if (Q === "mat4x3") { + if (A === "mat2x4") return g("mat2x3"); + if (A === "mat3x4") return g("mat3"); + if (QQ(A)) return g("mat4x3"); + I(); + } + if (QQ(Q)) { + if (A === "mat2x4") return g("mat2x4"); + if (A === "mat3x4") return g("mat3x4"); + if (QQ(A)) return g("mat4"); + I(); + } + throw new Error(`Invalid mul types: ${Q}, ${A}`); +} +function ps(Q, A) { + return fI(Q, A, "div"); +} +function Hs(Q, A) { + if (Q === A) return Q; + if (Q === "int") { + if (EA(A)) return A; + } else if (A === "int") { + if (EA(Q)) return Q; + } else if (Q === "uint") { + if (tA(A)) return A; + } else if (A === "uint" && tA(Q)) + return Q; + throw new Error(`Invalid imod types: ${Q}, ${A}`); +} +function fs(Q, A) { + if (Q === A || A === "float") return Q; + throw new Error(`Invalid mod types: ${Q}, ${A}`); +} +function ms(Q) { + return Q; +} +function bs(Q) { + return Q; +} +function xs(Q) { + return Q; +} +function Ks(Q) { + return Q; +} +function Zs(Q) { + return Q; +} +function qs(Q) { + return Q; +} +function Ws(Q) { + return Q; +} +function Vs(Q) { + return Q; +} +function vs(Q) { + return Q; +} +function Ts(Q) { + return Q; +} +function Xs(Q) { + return Q; +} +function js(Q) { + return Q; +} +function zs(Q) { + return Q; +} +function Os(Q) { + return Q; +} +function Ps(Q) { + return Q; +} +function _s(Q) { + return Q; +} +function GB(Q, A, I = "min") { + if (Q === A) return Q; + if (A === "float") { + if (SQ(Q)) return Q; + } else if (A === "int") { + if (EA(Q)) return Q; + } else if (A === "uint" && tA(Q)) + return Q; + throw new Error(`Invalid ${I} types: ${Q}, ${A}`); +} +function $s(Q, A) { + return GB(Q, A, "max"); +} +function Ao(Q, A, I) { + if (A === "float") { + if (SQ(Q)) return Q; + } else if (A === "int") { + if (EA(Q)) return Q; + } else if (A === "uint" && tA(Q)) + return Q; + throw new Error(`Invalid clamp types: ${Q}, ${A}`); +} +function Qo(Q, A, I) { + if (I === Q || I === "float" || I === "bool" && Q === "float" || I === "bvec2" && Q === "vec2" || I === "bvec3" && Q === "vec3" || I === "bvec4" && Q === "vec4") return Q; + throw new Error(`Invalid mix types: ${Q}, ${A}, ${I}`); +} +function Io(Q, A) { + if (Q === A || A === "float") return A; + throw new Error(`Invalid step types: ${Q}, ${A}`); +} +function go(Q, A, I) { + if (Q === A && (Q === I || Q === "float")) + return I; + throw new Error(`Invalid smoothstep types: ${Q}, ${A}, ${I}`); +} +function lB(Q, A = "isNan") { + if (Q === "float") return "bool"; + if (Q === "vec2") return "bvec2"; + if (Q === "vec3") return "bvec3"; + if (Q === "vec4") return "bvec4"; + throw new Error(`Invalid ${A} types: ${Q}`); +} +function Bo(Q) { + return lB(Q, "isInf"); +} +const cA = (Q, A) => new FB({ a: Q, b: A }), UQ = (Q, A) => new RB({ a: Q, b: A }), BA = (Q, A) => new JB({ a: Q, b: A }), jQ = (Q, A) => new YB({ a: Q, b: A }), GI = (Q, A) => new dB({ a: Q, b: A }), MB = (Q, A) => new uB({ a: Q, b: A }), Co = (Q) => new UB({ a: Q }).outputs, Eo = (Q) => new SB({ a: Q }), to = (Q) => new LB({ a: Q }), io = (Q) => new pB({ a: Q }), so = (Q) => new HB({ a: Q }), oo = (Q) => new fB({ a: Q }), ao = (Q) => new mB({ a: Q }), eo = (Q) => new bB({ a: Q }), zQ = (Q) => new xB({ a: Q }), Do = (Q, A) => new KB({ a: Q, b: A }), no = (Q) => new ZB({ a: Q }), co = (Q) => new qB({ a: Q }), wo = (Q) => new WB({ a: Q }), ro = (Q) => new VB({ a: Q }), ho = (Q) => new vB({ a: Q }), yo = (Q) => new TB({ a: Q }), Go = (Q) => new XB({ a: Q }), lo = (Q, A) => new jB({ a: Q, b: A }), NB = (Q, A) => new zB({ a: Q, b: A }), Mo = (Q, A, I) => new OB({ a: Q, min: A, max: I }), kB = (Q, A, I) => new PB({ a: Q, b: A, t: I }), No = (Q, A) => new _B({ edge: Q, x: A }), ko = (Q, A, I) => new $B({ edge0: Q, edge1: A, x: I }), Fo = (Q) => new AC({ a: Q }), Ro = (Q) => new QC({ a: Q }); +class FB extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "sum", outTypeFunc: fI }), this.statements = ({ inputs: g, outputs: B }) => [`${B.sum} = ${g.a} + ${g.b};`]; + } +} +class RB extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "difference", outTypeFunc: Ss }), this.statements = ({ inputs: g, outputs: B }) => [`${B.difference} = ${g.a} - ${g.b};`]; + } +} +class JB extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "product", outTypeFunc: Ls }), this.statements = ({ inputs: g, outputs: B }) => [`${B.product} = ${g.a} * ${g.b};`]; + } +} +class YB extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "quotient", outTypeFunc: ps }), this.statements = ({ inputs: g, outputs: B }) => [`${B.quotient} = ${g.a} / ${g.b};`]; + } +} +class dB extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "remainder", outTypeFunc: Hs }), this.statements = ({ inputs: g, outputs: B }) => [`${B.remainder} = ${g.a} % ${g.b};`]; + } +} +class uB extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "remainder", outTypeFunc: fs }), this.statements = ({ inputs: g, outputs: B }) => [`${B.remainder} = mod(${g.a}, ${g.b});`]; + } +} +class UB extends f { + constructor({ a: A }) { + const I = { a: p(A) }, g = I.a, B = { + fract: g, + integer: g + }; + super({ inTypes: I, outTypes: B, inputs: { a: A } }), this.statements = ({ inputs: C, outputs: E }) => [`${E.fract} = modf(${C.a}, ${E.integer});`]; + } +} +class SB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "neg", outTypeFunc: ms }), this.statements = ({ inputs: I, outputs: g }) => [`${g.neg} = -${I.a};`]; + } +} +class LB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "abs", outTypeFunc: bs }), this.statements = ({ inputs: I, outputs: g }) => [`${g.abs} = abs(${I.a});`]; + } +} +class pB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "sign", outTypeFunc: xs }), this.statements = ({ inputs: I, outputs: g }) => [`${g.sign} = sign(${I.a});`]; + } +} +class HB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "floor", outTypeFunc: Ks }), this.statements = ({ inputs: I, outputs: g }) => [`${g.floor} = floor(${I.a});`]; + } +} +class fB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "ceil", outTypeFunc: Zs }), this.statements = ({ inputs: I, outputs: g }) => [`${g.ceil} = ceil(${I.a});`]; + } +} +class mB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "trunc", outTypeFunc: qs }), this.statements = ({ inputs: I, outputs: g }) => [`${g.trunc} = trunc(${I.a});`]; + } +} +class bB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "round", outTypeFunc: Ws }), this.statements = ({ inputs: I, outputs: g }) => [`${g.round} = round(${I.a});`]; + } +} +class xB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "fract", outTypeFunc: Vs }), this.statements = ({ inputs: I, outputs: g }) => [`${g.fract} = fract(${I.a});`]; + } +} +class KB extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "power", outTypeFunc: vs }), this.statements = ({ inputs: g, outputs: B }) => [`${B.power} = pow(${g.a}, ${g.b});`]; + } +} +class ZB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "exp", outTypeFunc: Ts }), this.statements = ({ inputs: I, outputs: g }) => [`${g.exp} = exp(${I.a});`]; + } +} +class qB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "exp2", outTypeFunc: Xs }), this.statements = ({ inputs: I, outputs: g }) => [`${g.exp2} = exp2(${I.a});`]; + } +} +class WB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "log", outTypeFunc: js }), this.statements = ({ inputs: I, outputs: g }) => [`${g.log} = log(${I.a});`]; + } +} +class VB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "log2", outTypeFunc: zs }), this.statements = ({ inputs: I, outputs: g }) => [`${g.log2} = log2(${I.a});`]; + } +} +class vB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "sqr", outTypeFunc: Os }), this.statements = ({ inputs: I, outputs: g }) => [`${g.sqr} = ${I.a} * ${I.a};`]; + } +} +class TB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "sqrt", outTypeFunc: Ps }), this.statements = ({ inputs: I, outputs: g }) => [`${g.sqrt} = sqrt(${I.a});`]; + } +} +class XB extends N { + constructor({ a: A }) { + super({ a: A, outKey: "inversesqrt", outTypeFunc: _s }), this.statements = ({ inputs: I, outputs: g }) => [`${g.inversesqrt} = inversesqrt(${I.a});`]; + } +} +class jB extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "min", outTypeFunc: GB }), this.statements = ({ inputs: g, outputs: B }) => [`${B.min} = min(${g.a}, ${g.b});`]; + } +} +class zB extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "max", outTypeFunc: $s }), this.statements = ({ inputs: g, outputs: B }) => [`${B.max} = max(${g.a}, ${g.b});`]; + } +} +class OB extends sQ { + constructor({ + a: A, + min: I, + max: g + }) { + super({ + a: A, + b: I, + c: g, + outKey: "clamp", + outTypeFunc: Ao + }), this.statements = ({ inputs: B, outputs: C }) => { + const { a: E, b: t, c: s } = B; + return [`${C.clamp} = clamp(${E}, ${t}, ${s});`]; + }; + } +} +class PB extends sQ { + constructor({ a: A, b: I, t: g }) { + super({ a: A, b: I, c: g, outKey: "mix", outTypeFunc: Qo }), this.statements = ({ inputs: B, outputs: C }) => { + const { a: E, b: t, c: s } = B; + return [`${C.mix} = mix(${E}, ${t}, ${s});`]; + }; + } +} +class _B extends b { + constructor({ edge: A, x: I }) { + super({ + a: A, + b: I, + outKey: "step", + outTypeFunc: Io + }), this.statements = ({ inputs: g, outputs: B }) => { + const { a: C, b: E } = g; + return [`${B.step} = step(${C}, ${E});`]; + }; + } +} +class $B extends sQ { + constructor({ + edge0: A, + edge1: I, + x: g + }) { + super({ + a: A, + b: I, + c: g, + outKey: "smoothstep", + outTypeFunc: go + }), this.statements = ({ inputs: B, outputs: C }) => { + const { a: E, b: t, c: s } = B; + return [`${C.smoothstep} = smoothstep(${E}, ${t}, ${s});`]; + }; + } +} +class AC extends N { + constructor({ a: A }) { + super({ a: A, outKey: "isNan", outTypeFunc: lB }), this.statements = ({ inputs: I, outputs: g }) => [`${g.isNan} = isNan(${I.a});`]; + } +} +class QC extends N { + constructor({ a: A }) { + super({ a: A, outKey: "isInf", outTypeFunc: Bo }), this.statements = ({ inputs: I, outputs: g }) => [`${g.isInf} = isInf(${I.a});`]; + } +} +const Jo = (Q, A) => new IC({ a: Q, b: A }), Yo = (Q, A) => new gC({ a: Q, b: A }), uo = (Q, A) => new BC({ a: Q, b: A }), Uo = (Q) => new CC({ a: Q }), So = (Q, A) => new EC({ a: Q, b: A }), Lo = (Q, A) => new tC({ a: Q, b: A }), po = (Q, A) => new iC({ a: Q, b: A }), Ho = (Q, A) => new sC({ a: Q, b: A }), fo = (Q, A) => new oC({ a: Q, b: A }), mo = (Q, A) => new aC({ a: Q, b: A }), bo = (Q) => new eC({ a: Q }), xo = (Q) => new DC({ a: Q }), Ko = (Q, A, I) => new nC({ cond: Q, t: A, f: I }), Zo = (Q) => new wC({ a: Q }); +class IC extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outTypeFunc: (g, B) => g, outKey: "and" }), this.statements = ({ inputs: g, outputs: B }) => this.outTypes.and === "bool" ? [`${B.and} = ${g.a} && ${g.b};`] : [`${B.and} = ${g.a} & ${g.b};`]; + } +} +class gC extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outTypeFunc: (g, B) => g, outKey: "or" }), this.statements = ({ inputs: g, outputs: B }) => this.outTypes.or === "bool" ? [`${B.or} = ${g.a} || ${g.b};`] : [`${B.or} = ${g.a} | ${g.b};`]; + } +} +class BC extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outTypeFunc: (g, B) => g, outKey: "xor" }), this.statements = ({ inputs: g, outputs: B }) => this.outTypes.xor === "bool" ? [`${B.xor} = ${g.a} ^^ ${g.b};`] : [`${B.xor} = ${g.a} ^ ${g.b};`]; + } +} +class CC extends N { + constructor({ a: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "not" }), this.statements = ({ inputs: I, outputs: g }) => this.outTypes.not === "bool" ? [`${g.not} = !${I.a};`] : [`${g.not} = not(${I.a});`]; + } +} +class EC extends b { + constructor({ a: A, b: I }) { + super({ + a: A, + b: I, + outTypeFunc: (g, B) => tI(g, "lessThan"), + outKey: "lessThan" + }), this.statements = ({ inputs: g, outputs: B }) => this.outTypes.lessThan === "bool" ? [`${B.lessThan} = ${g.a} < ${g.b};`] : [`${B.lessThan} = lessThan(${g.a}, ${g.b});`]; + } +} +class tC extends b { + constructor({ a: A, b: I }) { + super({ + a: A, + b: I, + outTypeFunc: (g, B) => tI(g, "lessThanEqual"), + outKey: "lessThanEqual" + }), this.statements = ({ inputs: g, outputs: B }) => this.outTypes.lessThanEqual === "bool" ? [`${B.lessThanEqual} = ${g.a} <= ${g.b};`] : [ + `${B.lessThanEqual} = lessThanEqual(${g.a}, ${g.b});` + ]; + } +} +class iC extends b { + constructor({ a: A, b: I }) { + super({ + a: A, + b: I, + outTypeFunc: (g, B) => tI(g, "greaterThan"), + outKey: "greaterThan" + }), this.statements = ({ inputs: g, outputs: B }) => this.outTypes.greaterThan === "bool" ? [`${B.greaterThan} = ${g.a} > ${g.b};`] : [ + `${B.greaterThan} = greaterThan(${g.a}, ${g.b});` + ]; + } +} +class sC extends b { + constructor({ a: A, b: I }) { + super({ + a: A, + b: I, + outTypeFunc: (g, B) => tI(g, "greaterThanEqual"), + outKey: "greaterThanEqual" + }), this.statements = ({ inputs: g, outputs: B }) => this.outTypes.greaterThanEqual === "bool" ? [`${B.greaterThanEqual} = ${g.a} >= ${g.b};`] : [ + `${B.greaterThanEqual} = greaterThanEqual(${g.a}, ${g.b});` + ]; + } +} +class oC extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outTypeFunc: cC, outKey: "equal" }), this.statements = ({ inputs: g, outputs: B }) => this.outTypes.equal === "bool" ? [`${B.equal} = ${g.a} == ${g.b};`] : [`${B.equal} = equal(${g.a}, ${g.b});`]; + } +} +class aC extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outTypeFunc: qo, outKey: "notEqual" }), this.statements = ({ inputs: g, outputs: B }) => this.outTypes.notEqual === "bool" ? [`${B.notEqual} = ${g.a} != ${g.b};`] : [`${B.notEqual} = notEqual(${g.a}, ${g.b});`]; + } +} +class eC extends N { + constructor({ a: A }) { + super({ a: A, outTypeFunc: (I) => "bool", outKey: "any" }), this.statements = ({ inputs: I, outputs: g }) => [`${g.any} = any(${I.a});`]; + } +} +class DC extends N { + constructor({ a: A }) { + super({ a: A, outTypeFunc: (I) => "bool", outKey: "all" }), this.statements = ({ inputs: I, outputs: g }) => [`${g.all} = all(${I.a});`]; + } +} +class nC extends sQ { + constructor({ + cond: A, + t: I, + f: g + }) { + super({ + a: A, + b: I, + c: g, + outKey: "select", + outTypeFunc: (B, C, E) => C + }), this.statements = ({ inputs: B, outputs: C }) => { + const { a: E, b: t, c: s } = B; + return [`${C.select} = (${E}) ? (${t}) : (${s});`]; + }; + } +} +function tI(Q, A) { + if (iQ(Q)) + return "bool"; + if (Q === "ivec2" || Q === "uvec2" || Q === "vec2") + return "bvec2"; + if (Q === "ivec3" || Q === "uvec3" || Q === "vec3") + return "bvec3"; + if (Q === "ivec4" || Q === "uvec4" || Q === "vec4") + return "bvec4"; + throw new Error(`Invalid ${A} type: ${Q}`); +} +function cC(Q, A = "equal") { + if (iQ(Q)) + return "bool"; + if (tQ(Q)) + return Q; + if (Q === "ivec2" || Q === "uvec2" || Q === "vec2") + return "bvec2"; + if (Q === "ivec3" || Q === "uvec3" || Q === "vec3") + return "bvec3"; + if (Q === "ivec4" || Q === "uvec4" || Q === "vec4") + return "bvec4"; + throw new Error(`Invalid ${A} type: ${Q}`); +} +function qo(Q) { + return cC(Q, "notEqual"); +} +function Wo(Q) { + if (tQ(Q)) + return "bool"; + if (EA(Q)) + return "int"; + if (tA(Q)) + return "uint"; + throw new Error(`Invalid compXor type: ${Q}`); +} +class wC extends N { + constructor({ a: A }) { + const I = Wo(p(A)); + super({ a: A, outTypeFunc: (g) => I, outKey: "compXor" }), this.statements = ({ inputs: g, outputs: B }) => { + if (iQ(this.outTypes.compXor)) + return [`${B.compXor} = ${g.a};`]; + const E = (yQ(I) ? ["x", "y"] : GQ(I) ? ["x", "y", "z"] : ["x", "y", "z", "w"]).map((s) => `${g.a}.${s}`), t = tQ(I) ? "^^" : "^"; + return [`${B.compXor} = ${E.join(` ${t} `)};`]; + }; + } +} +const Vo = (Q) => new NC({ value: Q }), vo = (Q) => new kC({ value: Q }), To = (Q) => new FC({ value: Q }), rC = (Q) => new RC({ value: Q }), Xo = (Q) => new JC({ value: Q }), jo = (Q) => new YC({ value: Q }), zo = (Q) => new dC({ value: Q }), Oo = (Q) => new uC({ value: Q }), Po = (Q) => new UC({ value: Q }), _o = (Q) => new SC({ value: Q }), $o = (Q) => new LC({ value: Q }), Aa = (Q) => new pC({ value: Q }), Qa = (Q) => new HC({ value: Q }), hC = (Q) => new fC({ value: Q }), EQ = (Q) => new mC({ value: Q }), yC = (Q) => new bC({ value: Q }), Ia = (Q) => new xC({ value: Q }), ga = (Q) => new KC({ value: Q }), Ba = (Q) => new ZC({ value: Q }), GC = (Q) => new qC({ value: Q }), Ca = (Q) => new WC({ value: Q }), Ea = (Q) => new VC({ value: Q }), ta = (Q) => new vC({ value: Q }), ia = (Q) => new TC({ value: Q }), sa = (Q) => new XC({ value: Q }), oa = (Q) => new jC({ value: Q }), aa = (Q) => new zC({ value: Q }), lC = (Q) => new OC({ value: Q }), ea = (Q) => new PC({ value: Q }), MC = (Q) => new _C({ value: Q }); +class O extends N { + constructor({ + value: A, + outType: I, + outKey: g + }) { + super({ a: A, outTypeFunc: () => I, outKey: g }), this.statements = ({ inputs: B, outputs: C }) => [ + `${C[g]} = ${gg(I)}(${B.a});` + ]; + } +} +class NC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "bool", outKey: "bool" }); + } +} +class kC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "int", outKey: "int" }); + } +} +class FC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "uint", outKey: "uint" }); + } +} +class RC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "float", outKey: "float" }); + } +} +class JC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "bvec2", outKey: "bvec2" }); + } +} +class YC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "bvec3", outKey: "bvec3" }); + } +} +class dC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "bvec4", outKey: "bvec4" }); + } +} +class uC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "ivec2", outKey: "ivec2" }); + } +} +class UC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "ivec3", outKey: "ivec3" }); + } +} +class SC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "ivec4", outKey: "ivec4" }); + } +} +class LC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "uvec2", outKey: "uvec2" }); + } +} +class pC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "uvec3", outKey: "uvec3" }); + } +} +class HC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "uvec4", outKey: "uvec4" }); + } +} +class fC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "vec2", outKey: "vec2" }); + } +} +class mC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "vec3", outKey: "vec3" }); + } +} +class bC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "vec4", outKey: "vec4" }); + } +} +class xC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "mat2", outKey: "mat2" }); + } +} +class KC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "mat3", outKey: "mat3" }); + } +} +class ZC extends O { + constructor({ + value: A + }) { + super({ value: A, outType: "mat4", outKey: "mat4" }); + } +} +class qC extends N { + constructor({ value: A }) { + super({ a: A, outKey: "int", outTypeFunc: () => "int" }), this.statements = ({ inputs: I, outputs: g }) => [`${g.int} = floatBitsToInt(${I.a});`]; + } +} +class WC extends N { + constructor({ value: A }) { + super({ a: A, outKey: "uint", outTypeFunc: () => "uint" }), this.statements = ({ inputs: I, outputs: g }) => [`${g.uint} = floatBitsToUint(${I.a});`]; + } +} +class VC extends N { + constructor({ value: A }) { + super({ a: A, outKey: "float", outTypeFunc: () => "float" }), this.statements = ({ inputs: I, outputs: g }) => [`${g.float} = intBitsToFloat(${I.a});`]; + } +} +class vC extends N { + constructor({ value: A }) { + super({ a: A, outKey: "float", outTypeFunc: () => "float" }), this.statements = ({ inputs: I, outputs: g }) => [`${g.float} = uintBitsToFloat(${I.a});`]; + } +} +class TC extends N { + constructor({ value: A }) { + super({ a: A, outKey: "uint", outTypeFunc: () => "uint" }), this.statements = ({ inputs: I, outputs: g }) => [`${g.uint} = packSnorm2x16(${I.a});`]; + } +} +class XC extends N { + constructor({ value: A }) { + super({ a: A, outKey: "vec2", outTypeFunc: () => "vec2" }), this.statements = ({ inputs: I, outputs: g }) => [`${g.vec2} = unpackSnorm2x16(${I.a});`]; + } +} +class jC extends N { + constructor({ value: A }) { + super({ a: A, outKey: "uint", outTypeFunc: () => "uint" }), this.statements = ({ inputs: I, outputs: g }) => [`${g.uint} = packUnorm2x16(${I.a});`]; + } +} +class zC extends N { + constructor({ value: A }) { + super({ a: A, outKey: "vec2", outTypeFunc: () => "vec2" }), this.statements = ({ inputs: I, outputs: g }) => [`${g.vec2} = unpackUnorm2x16(${I.a});`]; + } +} +class OC extends N { + constructor({ value: A }) { + super({ a: A, outKey: "uint", outTypeFunc: () => "uint" }), this.statements = ({ inputs: I, outputs: g }) => [`${g.uint} = packHalf2x16(${I.a});`]; + } +} +class PC extends N { + constructor({ value: A }) { + super({ a: A, outKey: "vec2", outTypeFunc: () => "vec2" }), this.statements = ({ inputs: I, outputs: g }) => [`${g.vec2} = unpackHalf2x16(${I.a});`]; + } +} +class _C extends N { + constructor({ value: A }) { + super({ a: A, outKey: "rgba8", outTypeFunc: () => "vec4" }), this.statements = ({ inputs: I, outputs: g }) => [ + `uvec4 uRgba = uvec4(${I.a} & 0xffu, (${I.a} >> 8u) & 0xffu, (${I.a} >> 16u) & 0xffu, (${I.a} >> 24u) & 0xffu);`, + `${g.rgba8} = vec4(uRgba) / 255.0;` + ]; + } +} +const Da = (Q) => new QE({ a: Q }), na = (Q, A) => new IE({ a: Q, b: A }), ca = (Q, A) => new gE({ a: Q, b: A }), wa = (Q, A) => new BE({ a: Q, b: A }), $C = (Q) => new CE({ a: Q }), ra = (Q, A, I) => new iE({ a: Q, b: A, c: I }), ha = (Q, A) => new sE({ incident: Q, normal: A }), ya = (Q, A, I) => new oE({ incident: Q, normal: A, eta: I }), JQ = (Q) => new wE({ vector: Q }), HA = ({ + vector: Q, + vectorType: A, + x: I, + y: g, + z: B, + w: C, + r: E, + g: t, + b: s, + a: o +}) => new rE({ vector: Q, vectorType: A, x: I, y: g, z: B, w: C, r: E, g: t, b: s, a: o }), Ga = (Q) => new EE({ a: Q }), AE = (Q, A) => new tE({ a: Q, b: A }), la = (Q, A) => new hE({ vector: Q, select: A }), Ma = (Q, A) => new aE({ a: Q, b: A }), Na = (Q, A) => new eE({ a: Q, b: A }), ka = (Q) => new DE({ a: Q }), Fa = (Q) => new nE({ a: Q }), Ra = (Q) => new cE({ a: Q }); +class QE extends N { + constructor({ a: A }) { + super({ a: A, outTypeFunc: (I) => "float", outKey: "length" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.length} = length(${I.a});` + ]; + } +} +class IE extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "distance", outTypeFunc: (g, B) => "float" }), this.statements = ({ inputs: g, outputs: B }) => [ + `${B.distance} = distance(${g.a}, ${g.b});` + ]; + } +} +class gE extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "dot", outTypeFunc: (g, B) => "float" }), this.statements = ({ inputs: g, outputs: B }) => [ + `${B.dot} = dot(${g.a}, ${g.b});` + ]; + } +} +class BE extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "cross", outTypeFunc: (g, B) => "vec3" }), this.statements = ({ inputs: g, outputs: B }) => [ + `${B.cross} = cross(${g.a}, ${g.b});` + ]; + } +} +class CE extends N { + constructor({ a: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "normalize" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.normalize} = normalize(${I.a});` + ]; + } +} +function Ja(Q) { + if (Q === "vec3") + return "vec2"; + if (Q === "vec4") + return "vec3"; + throw new Error("Invalid type"); +} +class EE extends N { + constructor({ a: A }) { + super({ + a: A, + outTypeFunc: (I) => Ja(I), + outKey: "projected" + }), this.statements = ({ inputs: I, outputs: g }) => { + if (this.inTypes.a === "vec3") + return [`${g.projected} = ${I.a}.xy / ${I.a}.z;`]; + if (this.inTypes.a === "vec4") + return [`${g.projected} = ${I.a}.xyz / ${I.a}.w;`]; + throw new Error("Invalid type"); + }; + } +} +function Ya(Q) { + if (Q === "float") return "vec2"; + if (Q === "vec2") return "vec3"; + if (Q === "vec3") return "vec4"; + throw new Error("Invalid type"); +} +class tE extends b { + constructor({ a: A, b: I }) { + const g = p(A), B = Ya(g); + super({ a: A, b: I, outKey: "extend", outTypeFunc: () => B }), this.statements = ({ inputs: C, outputs: E }) => [ + `${E.extend} = ${B}(${C.a}, ${C.b});` + ]; + } +} +class iE extends sQ { + constructor({ a: A, b: I, c: g }) { + super({ + a: A, + b: I, + c: g, + outKey: "forward", + outTypeFunc: (B, C, E) => B + }), this.statements = ({ inputs: B, outputs: C }) => [ + `${C.forward} = faceforward(${B.a}, ${B.b}, ${B.c});` + ]; + } +} +class sE extends b { + constructor({ + incident: A, + normal: I + }) { + super({ + a: A, + b: I, + outKey: "reflection", + outTypeFunc: (g, B) => g + }), this.statements = ({ inputs: g, outputs: B }) => [ + `${B.reflection} = reflect(${g.a}, ${g.b});` + ]; + } +} +class oE extends sQ { + constructor({ + incident: A, + normal: I, + eta: g + }) { + super({ + a: A, + b: I, + c: g, + outKey: "refraction", + outTypeFunc: (B, C, E) => B + }), this.statements = ({ inputs: B, outputs: C }) => [ + `${C.refraction} = refract(${B.a}, ${B.b}, ${B.c});` + ]; + } +} +class aE extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "product", outTypeFunc: (g, B) => g }), this.statements = ({ inputs: g, outputs: B }) => [ + `${B.product} = matrixCompMult(${A}, ${I});` + ]; + } +} +function da(Q, A) { + if (Q === "vec2") { + if (A === "vec2") return "mat2"; + if (A === "vec3") return "mat3x2"; + if (A === "vec4") return "mat4x2"; + } + if (Q === "vec3") { + if (A === "vec2") return "mat2x3"; + if (A === "vec3") return "mat3"; + if (A === "vec4") return "mat4x3"; + } + if (Q === "vec4") { + if (A === "vec2") return "mat2x4"; + if (A === "vec3") return "mat3x4"; + if (A === "vec4") return "mat4"; + } + throw new Error(`Invalid outer type: ${Q}, ${A}`); +} +class eE extends b { + constructor({ a: A, b: I }) { + super({ a: A, b: I, outKey: "outer", outTypeFunc: da }), this.statements = ({ inputs: g, outputs: B }) => [ + `${B.outer} = outerProduct(${g.a}, ${g.b});` + ]; + } +} +function ua(Q) { + if (Q === "mat2") return "mat2"; + if (Q === "mat3") return "mat3"; + if (Q === "mat4") return "mat4"; + if (Q === "mat2x2") return "mat2x2"; + if (Q === "mat2x3") return "mat3x2"; + if (Q === "mat2x4") return "mat4x2"; + if (Q === "mat3x2") return "mat2x3"; + if (Q === "mat3x3") return "mat3x3"; + if (Q === "mat3x4") return "mat4x3"; + if (Q === "mat4x2") return "mat2x4"; + if (Q === "mat4x3") return "mat3x4"; + if (Q === "mat4x4") return "mat4x4"; + throw new Error(`Invalid transpose type: ${Q}`); +} +class DE extends N { + constructor({ a: A }) { + super({ a: A, outKey: "transpose", outTypeFunc: ua }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.transpose} = transpose(${I.a});` + ]; + } +} +class nE extends N { + constructor({ a: A }) { + super({ a: A, outKey: "det", outTypeFunc: (I) => "float" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.det} = determinant(${I.a});` + ]; + } +} +class cE extends N { + constructor({ a: A }) { + super({ a: A, outKey: "inverse", outTypeFunc: (I) => I }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.inverse} = inverse(${A});` + ]; + } +} +function Ua(Q) { + const A = (I) => I; + switch (Q) { + case "vec2": + return A({ x: "float", y: "float", r: "float", g: "float" }); + case "vec3": + return A({ + x: "float", + y: "float", + z: "float", + r: "float", + g: "float", + b: "float" + }); + case "vec4": + return A({ + x: "float", + y: "float", + z: "float", + w: "float", + r: "float", + g: "float", + b: "float", + a: "float" + }); + case "ivec2": + return A({ x: "int", y: "int", r: "int", g: "int" }); + case "ivec3": + return A({ + x: "int", + y: "int", + z: "int", + r: "int", + g: "int", + b: "int" + }); + case "ivec4": + return A({ + x: "int", + y: "int", + z: "int", + w: "int", + r: "int", + g: "int", + b: "int", + a: "int" + }); + case "uvec2": + return A({ x: "uint", y: "uint", r: "uint", g: "uint" }); + case "uvec3": + return A({ + x: "uint", + y: "uint", + z: "uint", + r: "uint", + g: "uint", + b: "uint" + }); + case "uvec4": + return A({ + x: "uint", + y: "uint", + z: "uint", + w: "uint", + r: "uint", + g: "uint", + b: "uint", + a: "uint" + }); + default: + throw new Error(`Invalid vector type: ${Q}`); + } +} +class wE extends f { + constructor({ vector: A }) { + const g = { vector: p(A) }, B = Ua(g.vector); + super({ inTypes: g, outTypes: B, inputs: { vector: A } }), this.statements = ({ inputs: C, outputs: E }) => { + const { x: t, y: s, z: o, w: a, r: i, g: D, b: n, a: w } = E, { vector: c } = C; + return [ + t ? `${t} = ${c}.x;` : null, + s ? `${s} = ${c}.y;` : null, + o ? `${o} = ${c}.z;` : null, + a ? `${a} = ${c}.w;` : null, + i ? `${i} = ${c}.r;` : null, + D ? `${D} = ${c}.g;` : null, + n ? `${n} = ${c}.b;` : null, + w ? `${w} = ${c}.a;` : null + ].filter(Boolean); + }; + } +} +class rE extends f { + constructor({ + vector: A, + vectorType: I, + x: g, + y: B, + z: C, + w: E, + r: t, + g: s, + b: o, + a + }) { + if (!A && !I) + throw new Error("Either vector or vectorType must be provided"); + const i = I ?? p(A), D = Ag(i), n = Qg(i), w = { + vector: i, + x: D, + y: D, + r: D, + g: D + }, c = { vector: A, x: g, y: B, r: t, g: s }; + n >= 3 && (Object.assign(w, { z: D, b: D }), Object.assign(c, { z: C, b: o })), n >= 4 && (Object.assign(w, { w: D, a: D }), Object.assign(c, { w: E, a })), super({ inTypes: w, outTypes: { vector: i }, inputs: c }), this.statements = ({ inputs: r, outputs: y }) => { + const { vector: G } = y, { + vector: h, + x: M, + y: l, + z: k, + w: R, + r: Y, + g: d, + b: m, + a: J + } = r, x = [ + `${G}.x = ${M ?? Y ?? (h ? `${h}.x` : NQ(D))};`, + `${G}.y = ${l ?? d ?? (h ? `${h}.y` : NQ(D))};` + ]; + return n >= 3 && x.push( + `${G}.z = ${k ?? m ?? (h ? `${h}.z` : NQ(D))};` + ), n >= 4 && x.push( + `${G}.w = ${R ?? J ?? (h ? `${h}.w` : NQ(D))};` + ), x; + }; + } + dynoOut() { + return new H( + this, + "vector" + ); + } +} +function Sa(Q, A) { + let I = null; + if (SQ(Q) ? I = A.length === 1 ? "float" : A.length === 2 ? "vec2" : A.length === 3 ? "vec3" : A.length === 4 ? "vec4" : null : EA(Q) ? I = A.length === 1 ? "int" : A.length === 2 ? "ivec2" : A.length === 3 ? "ivec3" : A.length === 4 ? "ivec4" : null : tA(Q) && (I = A.length === 1 ? "uint" : A.length === 2 ? "uvec2" : A.length === 3 ? "uvec3" : A.length === 4 ? "uvec4" : null), I == null) + throw new Error(`Invalid swizzle: ${A}`); + return I; +} +class hE extends N { + constructor({ vector: A, select: I }) { + super({ + a: A, + outKey: "swizzle", + outTypeFunc: (g) => Sa(g, I) + }), this.statements = ({ inputs: g, outputs: B }) => [ + `${B.swizzle} = ${g.a}.${I};` + ]; + } +} +const La = (Q, A, I) => new kE({ index: Q, from: A, to: I }), pa = (Q) => new lQ({ value: Q }), Ha = (Q) => new FA({ state: Q }), fa = (Q) => new RA({ state: Q }), yE = (Q) => new FE({ value: Q }), GE = (Q) => new RE({ value: Q }), lE = (Q) => new JE({ value: Q }), ME = (Q) => new YE({ value: Q }), ma = (Q) => new dE({ value: Q }), ba = (Q) => new uE({ value: Q }), NE = (Q) => new UE({ value: Q }), lI = (Q) => new SE({ value: Q }); +class kE extends f { + constructor({ + from: A, + to: I, + index: g + }) { + super({ + inTypes: { from: "int", to: "int", index: "int" }, + outTypes: { index: "int" }, + inputs: { from: A, to: I, index: g }, + statements: ({ inputs: B, outputs: C }) => [ + `${C.index} = ${B.index} - ${B.from} + ${B.to};` + ] + }); + } + dynoOut() { + return new H(this, "index"); + } +} +class FA extends f { + constructor({ state: A }) { + const I = p(A); + super({ + inTypes: { state: I }, + outTypes: { state: "uint" }, + inputs: { state: A }, + globals: () => [ + IA(` + uint pcg_next(uint state) { + return state * 747796405u + 2891336453u; + } + `) + ], + statements: ({ inputs: g, outputs: B }) => { + const C = I === "uint" ? `${g.state}` : I === "int" ? `uint(${g.state})` : `floatBitsToUint(${g.state})`; + return [`${B.state} = pcg_next(${C});`]; + } + }); + } + dynoOut() { + return new H(this, "state"); + } +} +class RA extends f { + constructor({ state: A }) { + super({ + inTypes: { state: "uint" }, + outTypes: { hash: "uint" }, + inputs: { state: A }, + globals: () => [ + IA(` + uint pcg_hash(uint state) { + uint hash = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; + return (hash >> 22u) ^ hash; + } + `) + ], + statements: ({ inputs: I, outputs: g }) => [ + `${g.hash} = pcg_hash(${I.state});` + ] + }); + } + dynoOut() { + return new H(this, "hash"); + } +} +class lQ extends f { + constructor({ value: A }) { + const I = p(A), g = Ig(I); + super({ + inTypes: { value: I }, + outTypes: { state: "uint" }, + inputs: { value: A }, + globals: () => [ + IA(` + uint pcg_mix(uint value) { + return value; + } + uint pcg_mix(uvec2 value) { + return value.x + 0x9e3779b9u * value.y; + } + uint pcg_mix(uvec3 value) { + return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z; + } + uint pcg_mix(uvec4 value) { + return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z + 0xc2b2ae35u * value.w; + } + `) + ], + statements: ({ inputs: B, outputs: C }) => { + const E = tA(I) ? `${B.value}` : EA(I) ? `${g}(${B.value})` : `floatBitsToUint(${B.value})`; + return [ + `${g} bits = ${E};`, + `${C.state} = pcg_mix(bits);` + ]; + } + }); + } + dynoOut() { + return new H(this, "state"); + } +} +class FE extends mA { + constructor({ value: A }) { + super({ + inTypes: { value: p(A) }, + outTypes: { hash: "uint" }, + inputs: { value: A }, + construct: ({ value: I }) => { + if (!I) + throw new Error("value is required"); + let g = new lQ({ value: I }).outputs.state; + return g = new FA({ state: g }).outputs.state, new RA({ state: g }).outputs; + } + }); + } + dynoOut() { + return new H(this, "hash"); + } +} +class RE extends mA { + constructor({ value: A }) { + super({ + inTypes: { value: p(A) }, + outTypes: { hash: "uvec2" }, + inputs: { value: A }, + construct: ({ value: I }) => { + if (!I) + throw new Error("value is required"); + let g = new lQ({ value: I }).outputs.state; + g = new FA({ state: g }).outputs.state; + const B = new RA({ state: g }).outputs.hash; + g = new FA({ state: g }).outputs.state; + const C = new RA({ state: g }).outputs.hash; + return { hash: HA({ vectorType: "uvec2", x: B, y: C }) }; + } + }); + } + dynoOut() { + return new H(this, "hash"); + } +} +class JE extends mA { + constructor({ value: A }) { + super({ + inTypes: { value: p(A) }, + outTypes: { hash: "uvec3" }, + inputs: { value: A }, + construct: ({ value: I }) => { + if (!I) + throw new Error("value is required"); + let g = new lQ({ value: I }).outputs.state; + g = new FA({ state: g }).outputs.state; + const B = new RA({ state: g }).outputs.hash; + g = new FA({ state: g }).outputs.state; + const C = new RA({ state: g }).outputs.hash; + g = new FA({ state: g }).outputs.state; + const E = new RA({ state: g }).outputs.hash; + return { hash: HA({ vectorType: "uvec3", x: B, y: C, z: E }) }; + } + }); + } + dynoOut() { + return new H(this, "hash"); + } +} +class YE extends mA { + constructor({ value: A }) { + super({ + inTypes: { value: p(A) }, + outTypes: { hash: "uvec4" }, + inputs: { value: A }, + construct: ({ value: I }) => { + if (!I) + throw new Error("value is required"); + let g = new lQ({ value: I }).outputs.state; + g = new FA({ state: g }).outputs.state; + const B = new RA({ state: g }).outputs.hash; + g = new FA({ state: g }).outputs.state; + const C = new RA({ state: g }).outputs.hash; + g = new FA({ state: g }).outputs.state; + const E = new RA({ state: g }).outputs.hash; + g = new FA({ state: g }).outputs.state; + const t = new RA({ state: g }).outputs.hash; + return { hash: HA({ vectorType: "uvec4", x: B, y: C, z: E, w: t }) }; + } + }); + } + dynoOut() { + return new H(this, "hash"); + } +} +class dE extends mA { + constructor({ value: A }) { + super({ + inTypes: { value: p(A) }, + outTypes: { hash: "float" }, + inputs: { value: A }, + construct: ({ value: I }) => { + if (!I) + throw new Error("value is required"); + const g = yE(I); + return { hash: BA(rC(g), q("float", 1 / 2 ** 32)) }; + } + }); + } + dynoOut() { + return new H(this, "hash"); + } +} +class uE extends mA { + constructor({ value: A }) { + super({ + inTypes: { value: p(A) }, + outTypes: { hash: "vec2" }, + inputs: { value: A }, + construct: ({ value: I }) => { + if (!I) + throw new Error("value is required"); + const g = GE(I); + return { hash: BA(hC(g), q("float", 1 / 2 ** 32)) }; + } + }); + } + dynoOut() { + return new H(this, "hash"); + } +} +class UE extends mA { + constructor({ value: A }) { + super({ + inTypes: { value: p(A) }, + outTypes: { hash: "vec3" }, + inputs: { value: A }, + construct: ({ value: I }) => { + if (!I) + throw new Error("value is required"); + const g = lE(I); + return { hash: BA(EQ(g), q("float", 1 / 2 ** 32)) }; + } + }); + } + dynoOut() { + return new H(this, "hash"); + } +} +class SE extends mA { + constructor({ value: A }) { + super({ + inTypes: { value: p(A) }, + outTypes: { hash: "vec4" }, + inputs: { value: A }, + construct: ({ value: I }) => { + if (!I) + throw new Error("value is required"); + const g = ME(I); + return { hash: BA(yC(g), q("float", 1 / 2 ** 32)) }; + } + }); + } + dynoOut() { + return new H(this, "hash"); + } +} +const xa = (Q, { + scale: A, + scales: I, + rotate: g, + translate: B +}) => new LE({ position: Q, scale: A, scales: I, rotate: g, translate: B }).outputs.position, Ka = (Q, { + scale: A, + scales: I, + rotate: g +}) => new pE({ ray: Q, scale: A, scales: I, rotate: g }).outputs.ray, Za = (Q, { rotate: A }) => new HE({ quaternion: Q, rotate: A }).outputs.quaternion; +class LE extends f { + constructor({ + position: A, + scale: I, + scales: g, + rotate: B, + translate: C + }) { + super({ + inTypes: { + position: "vec3", + scale: "float", + scales: "vec3", + rotate: "vec4", + translate: "vec3" + }, + outTypes: { position: "vec3" }, + inputs: { position: A, scale: I, scales: g, rotate: B, translate: C }, + statements: ({ inputs: E, outputs: t }) => { + const { position: s } = t; + if (!s) + return []; + const { scale: o, scales: a, rotate: i, translate: D } = E; + return [ + `${s} = ${E.position ?? "vec3(0.0, 0.0, 0.0)"};`, + o ? `${s} *= ${o};` : null, + a ? `${s} *= ${a};` : null, + i ? `${s} = quatVec(${i}, ${s});` : null, + D ? `${s} += ${D};` : null + ].filter(Boolean); + } + }); + } +} +class pE extends f { + constructor({ + ray: A, + scale: I, + scales: g, + rotate: B + }) { + super({ + inTypes: { ray: "vec3", scale: "float", scales: "vec3", rotate: "vec4" }, + outTypes: { ray: "vec3" }, + inputs: { ray: A, scale: I, scales: g, rotate: B }, + statements: ({ inputs: C, outputs: E }) => { + const { ray: t } = E; + if (!t) + return []; + const { scale: s, scales: o, rotate: a } = C; + return [ + `${t} = ${C.ray ?? "vec3(0.0, 0.0, 0.0)"};`, + s ? `${t} *= ${s};` : null, + o ? `${t} *= ${o};` : null, + a ? `${t} = quatVec(${a}, ${t});` : null + ].filter(Boolean); + } + }); + } +} +class HE extends f { + constructor({ + quaternion: A, + rotate: I + }) { + super({ + inTypes: { quaternion: "vec4", rotate: "vec4" }, + outTypes: { quaternion: "vec4" }, + inputs: { quaternion: A, rotate: I }, + statements: ({ inputs: g, outputs: B }) => { + const { quaternion: C } = B; + return C ? [ + `${C} = ${g.quaternion ?? "vec4(0.0, 0.0, 0.0, 1.0)"};`, + I ? `${C} = quatQuat(${g.rotate}, ${C});` : null + ].filter(Boolean) : []; + } + }); + } +} +const qa = () => { + throw new Error("Not implemented"); +}, Wa = () => { + throw new Error("Not implemented"); +}, Va = () => { + throw new Error("Not implemented"); +}, va = () => { + throw new Error("Not implemented"); +}, Ta = () => { + throw new Error("Not implemented"); +}, Xa = () => { + throw new Error("Not implemented"); +}, ja = (Q, A) => new fE({ texture: Q, lod: A }), za = (Q, A, I) => new mE({ texture: Q, coord: A, bias: I }), Oa = (Q, A, I) => new bE({ texture: Q, coord: A, lod: I }); +class fE extends f { + constructor({ texture: A, lod: I }) { + const g = p(A); + super({ + inTypes: { texture: g, lod: "int" }, + outTypes: { size: xE(g) }, + inputs: { texture: A, lod: I }, + statements: ({ inputs: B, outputs: C }) => [ + `${C.size} = textureSize(${B.texture}, ${B.lod ?? "0"});` + ] + }); + } + dynoOut() { + return new H(this, "size"); + } +} +class mE extends f { + constructor({ + texture: A, + coord: I, + bias: g + }) { + const B = p(A); + super({ + inTypes: { + texture: B, + coord: Pa(B), + bias: "float" + }, + outTypes: { sample: KE(B) }, + inputs: { texture: A, coord: I, bias: g }, + statements: ({ inputs: C, outputs: E }) => [ + `${E.sample} = texture(${C.texture}, ${C.coord}${C.bias ? `, ${C.bias}` : ""});` + ] + }); + } + dynoOut() { + return new H(this, "sample"); + } +} +class bE extends f { + constructor({ + texture: A, + coord: I, + lod: g + }) { + const B = p(A); + super({ + inTypes: { + texture: B, + coord: xE(B), + lod: "int" + }, + outTypes: { texel: KE(B) }, + inputs: { texture: A, coord: I, lod: g }, + statements: ({ inputs: C, outputs: E }) => [ + `${E.texel} = texelFetch(${C.texture}, ${C.coord}, ${C.lod ?? "0"});` + ] + }); + } + dynoOut() { + return new H(this, "texel"); + } +} +function xE(Q) { + switch (Q) { + case "sampler2D": + case "usampler2D": + case "isampler2D": + case "samplerCube": + case "usamplerCube": + case "isamplerCube": + case "sampler2DShadow": + case "samplerCubeShadow": + return "ivec2"; + case "sampler3D": + case "usampler3D": + case "isampler3D": + case "sampler2DArray": + case "usampler2DArray": + case "isampler2DArray": + case "sampler2DArrayShadow": + return "ivec3"; + default: + throw new Error(`Invalid texture type: ${Q}`); + } +} +function Pa(Q) { + switch (Q) { + case "sampler2D": + case "usampler2D": + case "isampler2D": + return "vec2"; + case "sampler3D": + case "usampler3D": + case "isampler3D": + case "samplerCube": + case "usamplerCube": + case "isamplerCube": + case "sampler2DArray": + case "usampler2DArray": + case "isampler2DArray": + case "sampler2DShadow": + return "vec3"; + case "samplerCubeShadow": + case "sampler2DArrayShadow": + return "vec4"; + default: + throw new Error(`Invalid texture type: ${Q}`); + } +} +function KE(Q) { + switch (Q) { + case "sampler2D": + case "sampler2DArray": + case "sampler3D": + case "samplerCube": + case "sampler2DShadow": + return "vec4"; + case "usampler2D": + case "usampler2DArray": + case "usampler3D": + case "usamplerCube": + return "uvec4"; + case "isampler2D": + case "isampler2DArray": + case "isampler3D": + case "isamplerCube": + return "ivec4"; + case "samplerCubeShadow": + case "sampler2DArrayShadow": + return "float"; + default: + throw new Error(`Invalid texture type: ${Q}`); + } +} +const _a = (Q) => new ZE({ degrees: Q }), $a = (Q) => new qE({ radians: Q }), MI = (Q) => new WE({ radians: Q }), Ae = (Q) => new VE({ radians: Q }), Qe = (Q) => new vE({ radians: Q }), Ie = (Q) => new TE({ sin: Q }), ge = (Q) => new XE({ cos: Q }), Be = (Q) => new jE({ tan: Q }), Ce = (Q, A) => new zE({ y: Q, x: A }), Ee = (Q) => new OE({ x: Q }), te = (Q) => new PE({ x: Q }), ie = (Q) => new _E({ x: Q }), se = (Q) => new $E({ x: Q }), oe = (Q) => new At({ x: Q }), ae = (Q) => new Qt({ x: Q }); +class ZE extends N { + constructor({ degrees: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "radians" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.radians} = radians(${I.a});` + ]; + } +} +class qE extends N { + constructor({ radians: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "degrees" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.degrees} = degrees(${I.a});` + ]; + } +} +class WE extends N { + constructor({ radians: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "sin" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.sin} = sin(${I.a});` + ]; + } +} +class VE extends N { + constructor({ radians: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "cos" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.cos} = cos(${I.a});` + ]; + } +} +class vE extends N { + constructor({ radians: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "tan" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.tan} = tan(${I.a});` + ]; + } +} +class TE extends N { + constructor({ sin: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "asin" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.asin} = asin(${I.a});` + ]; + } +} +class XE extends N { + constructor({ cos: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "acos" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.acos} = acos(${I.a});` + ]; + } +} +class jE extends N { + constructor({ tan: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "atan" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.atan} = atan(${I.a});` + ]; + } +} +class zE extends b { + constructor({ y: A, x: I }) { + super({ + a: A, + b: I, + outTypeFunc: (g, B) => g, + outKey: "atan2" + }), this.statements = ({ inputs: g, outputs: B }) => [ + `${B.atan2} = atan2(${g.a}, ${g.b});` + ]; + } +} +class OE extends N { + constructor({ x: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "sinh" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.sinh} = sinh(${I.a});` + ]; + } +} +class PE extends N { + constructor({ x: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "cosh" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.cosh} = cosh(${I.a});` + ]; + } +} +class _E extends N { + constructor({ x: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "tanh" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.tanh} = tanh(${I.a});` + ]; + } +} +class $E extends N { + constructor({ x: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "asinh" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.asinh} = asinh(${I.a});` + ]; + } +} +class At extends N { + constructor({ x: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "acosh" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.acosh} = acosh(${I.a});` + ]; + } +} +class Qt extends N { + constructor({ x: A }) { + super({ a: A, outTypeFunc: (I) => I, outKey: "atanh" }), this.statements = ({ inputs: I, outputs: g }) => [ + `${g.atanh} = atanh(${I.a});` + ]; + } +} +const RD = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + Abs: LB, + Acos: XE, + Acosh: At, + Add: FB, + All: DC, + And: IC, + Any: eC, + Asin: TE, + Asinh: $E, + Atan: jE, + Atan2: zE, + Atanh: Qt, + BVec2: JC, + BVec3: YC, + BVec4: dC, + BinaryOp: b, + Bool: NC, + Ceil: fB, + Clamp: OB, + Combine: rE, + CombineGsplat: eg, + CompMult: aE, + CompXor: wC, + Compilation: Cg, + Cos: VE, + Cosh: PE, + Cross: BE, + Degrees: qE, + Determinant: nE, + Distance: IE, + Div: YB, + Dot: gE, + Dyno: f, + DynoBlock: mA, + DynoBool: PQ, + DynoBvec2: yg, + DynoBvec3: Ng, + DynoBvec4: Rg, + DynoConst: Bg, + DynoFloat: gQ, + DynoInt: uQ, + DynoIsampler2D: qg, + DynoIsampler2DArray: Vg, + DynoIsampler3D: Xg, + DynoIsamplerCube: Og, + DynoIvec2: lg, + DynoIvec3: Fg, + DynoIvec4: Yg, + DynoLiteral: wQ, + DynoMat2: dg, + DynoMat2x2: ug, + DynoMat2x3: Ug, + DynoMat2x4: Sg, + DynoMat3: Lg, + DynoMat3x2: pg, + DynoMat3x3: Hg, + DynoMat3x4: fg, + DynoMat4: mg, + DynoMat4x2: bg, + DynoMat4x3: xg, + DynoMat4x4: Kg, + DynoOutput: H, + DynoProgram: pI, + DynoProgramTemplate: HI, + DynoRemapIndex: kE, + DynoSampler2D: Wg, + DynoSampler2DArray: vg, + DynoSampler2DArrayShadow: $g, + DynoSampler2DShadow: _g, + DynoSampler3D: jg, + DynoSamplerCube: Pg, + DynoSamplerCubeShadow: AB, + DynoUint: hg, + DynoUniform: F, + DynoUsampler2D: Zg, + DynoUsampler2DArray: FQ, + DynoUsampler3D: Tg, + DynoUsamplerCube: zg, + DynoUvec2: Gg, + DynoUvec3: kg, + DynoUvec4: Jg, + DynoValue: jA, + DynoVec2: Mg, + DynoVec3: hQ, + DynoVec4: fQ, + Equal: oC, + Exp: ZB, + Exp2: qB, + ExtendVec: tE, + FaceForward: iE, + Float: RC, + FloatBitsToInt: qC, + FloatBitsToUint: WC, + Floor: HB, + Fract: xB, + GreaterThan: iC, + GreaterThanEqual: sC, + Gsplat: v, + GsplatNormal: ng, + Hash: FE, + Hash2: RE, + Hash3: JE, + Hash4: YE, + HashFloat: dE, + HashVec2: uE, + HashVec3: UE, + HashVec4: SE, + IMod: dB, + IVec2: uC, + IVec3: UC, + IVec4: SC, + Int: kC, + IntBitsToFloat: VC, + Inverse: cE, + InverseSqrt: XB, + IsInf: QC, + IsNan: AC, + Length: QE, + LessThan: EC, + LessThanEqual: tC, + Log: WB, + Log2: VB, + Mat2: xC, + Mat3: KC, + Mat4: ZC, + Max: zB, + Min: jB, + Mix: PB, + Mod: uB, + Modf: UB, + Mul: JB, + Neg: SB, + Normalize: CE, + Not: CC, + NotEqual: aC, + NumPackedSplats: tg, + Or: gC, + Outer: eE, + OutputPackedSplat: rg, + OutputRgba8: SI, + PackHalf2x16: OC, + PackSnorm2x16: TC, + PackUnorm2x16: jC, + PcgHash: RA, + PcgMix: lQ, + PcgNext: FA, + Pow: KB, + ProjectH: EE, + Radians: ZE, + ReadPackedSplat: sg, + ReadPackedSplatRange: og, + ReflectVec: sE, + RefractVec: oE, + Round: bB, + Select: nC, + Sign: pB, + SimpleCast: O, + Sin: WE, + Sinh: OE, + Smoothstep: $B, + Split: wE, + SplitGsplat: ag, + Sqr: vB, + Sqrt: TB, + Step: _B, + Sub: RB, + Swizzle: hE, + TPackedSplats: HQ, + Tan: vE, + Tanh: _E, + TexelFetch: bE, + Texture: mE, + TextureSize: fE, + TransformGsplat: cg, + TransformPosition: LE, + TransformQuaternion: HE, + TransformRay: pE, + Transpose: DE, + TrinaryOp: sQ, + Trunc: mB, + UVec2: LC, + UVec3: pC, + UVec4: HC, + Uint: FC, + UintBitsToFloat: vC, + UintToRgba8: _C, + UnaryOp: N, + UnpackHalf2x16: PC, + UnpackSnorm2x16: XC, + UnpackUnorm2x16: zC, + Vec2: fC, + Vec3: mC, + Vec4: bC, + Xor: BC, + abs: to, + acos: ge, + acosh: oe, + add: cA, + all: xo, + and: Jo, + any: bo, + arrayIndex: Ta, + arrayLength: Xa, + asin: Ie, + asinh: se, + atan: Be, + atan2: Ce, + atanh: ae, + bool: Vo, + bvec2: Xo, + bvec3: jo, + bvec4: zo, + ceil: oo, + clamp: Mo, + combine: HA, + combineGsplat: rQ, + comment: va, + compMult: Ma, + compXor: Zo, + cos: Ae, + cosh: te, + cross: wa, + defineGsplat: rA, + defineGsplatNormal: Dg, + definePackedSplats: CI, + degrees: $a, + determinant: Fa, + distance: na, + div: jQ, + dot: ca, + dyno: pQ, + dynoBlock: UA, + dynoBool: Pt, + dynoBvec2: Ai, + dynoBvec3: Bi, + dynoBvec4: ti, + dynoConst: q, + dynoDeclare: uI, + dynoFloat: LA, + dynoFor: Va, + dynoIf: qa, + dynoInt: $t, + dynoIsampler2D: ki, + dynoIsampler2DArray: Ji, + dynoIsampler3D: ui, + dynoIsamplerCube: Li, + dynoIvec2: Ii, + dynoIvec3: Ei, + dynoIvec4: si, + dynoLiteral: OQ, + dynoMat2: ai, + dynoMat2x2: ei, + dynoMat2x3: Di, + dynoMat2x4: ni, + dynoMat3: ci, + dynoMat3x2: wi, + dynoMat3x3: ri, + dynoMat3x4: hi, + dynoMat4: yi, + dynoMat4x2: Gi, + dynoMat4x3: li, + dynoMat4x4: Mi, + dynoSampler2D: Fi, + dynoSampler2DArray: Yi, + dynoSampler2DArrayShadow: fi, + dynoSampler2DShadow: Hi, + dynoSampler3D: Ui, + dynoSamplerCube: pi, + dynoSamplerCubeShadow: mi, + dynoSwitch: Wa, + dynoUint: _t, + dynoUsampler2D: Ni, + dynoUsampler2DArray: Ri, + dynoUsampler3D: di, + dynoUsamplerCube: Si, + dynoUvec2: Qi, + dynoUvec3: Ci, + dynoUvec4: ii, + dynoVec2: gi, + dynoVec3: vA, + dynoVec4: oi, + equal: fo, + exp: no, + exp2: co, + extendVec: AE, + faceforward: ra, + float: rC, + floatBitsToInt: GC, + floatBitsToUint: Ca, + floor: so, + fract: zQ, + greaterThan: po, + greaterThanEqual: Ho, + gsplatNormal: jt, + hash: yE, + hash2: GE, + hash3: lE, + hash4: ME, + hashFloat: ma, + hashVec2: ba, + hashVec3: NE, + hashVec4: lI, + imod: GI, + int: vo, + intBitsToFloat: Ea, + inverse: Ra, + inversesqrt: Go, + isAllFloatType: zA, + isBoolType: tQ, + isFloatType: SQ, + isInf: Ro, + isIntType: EA, + isMat2: $A, + isMat3: AQ, + isMat4: QQ, + isMatFloatType: $I, + isNan: Fo, + isScalarType: iQ, + isUintType: tA, + isVector2Type: yQ, + isVector3Type: GQ, + isVector4Type: LQ, + isVectorType: qt, + ivec2: Oo, + ivec3: Po, + ivec4: _o, + length: Da, + lessThan: So, + lessThanEqual: Lo, + literalNegOne: Tt, + literalOne: vt, + literalZero: NQ, + log: wo, + log2: ro, + mat2: Ia, + mat3: ga, + mat4: Ba, + max: NB, + min: lo, + mix: kB, + mod: MB, + modf: Co, + mul: BA, + neg: Eo, + normalize: $C, + not: Uo, + notEqual: mo, + numPackedSplats: Xt, + numberAsFloat: u, + numberAsInt: j, + numberAsUint: z, + or: Yo, + outer: Na, + outputPackedSplat: wg, + outputRgba8: zt, + packHalf2x16: lC, + packSnorm2x16: ia, + packUnorm2x16: oa, + pcgHash: fa, + pcgMix: pa, + pcgNext: Ha, + pow: Do, + projectH: Ga, + radians: _a, + readPackedSplat: dQ, + readPackedSplatRange: Eg, + reflectVec: ha, + refractVec: ya, + remapIndex: La, + round: eo, + sameSizeIvec: Vt, + sameSizeUvec: Ig, + sameSizeVec: Wt, + select: Ko, + sign: io, + sin: MI, + sinh: Ee, + smoothstep: ko, + split: JQ, + splitGsplat: kQ, + sqr: ho, + sqrt: yo, + step: No, + sub: UQ, + swizzle: la, + tan: Qe, + tanh: ie, + texelFetch: Oa, + texture: za, + textureSize: ja, + transformGsplat: UI, + transformPos: xa, + transformQuat: Za, + transformRay: Ka, + transpose: ka, + trunc: ao, + typeLiteral: gg, + uint: To, + uintBitsToFloat: ta, + uintToRgba8: MC, + uniform: Ot, + unindent: IA, + unindentLines: JA, + unpackHalf2x16: ea, + unpackSnorm2x16: sa, + unpackUnorm2x16: aa, + uvec2: $o, + uvec3: Aa, + uvec4: Qa, + valType: p, + vec2: hC, + vec3: EQ, + vec4: yC, + vectorDim: Qg, + vectorElementType: Ag, + xor: uo +}, Symbol.toStringTag, { value: "Module" })); +var ee = `precision highp float; +precision highp int; +precision highp sampler2D; +precision highp usampler2D; +precision highp isampler2D; +precision highp sampler2DArray; +precision highp usampler2DArray; +precision highp isampler2DArray; +precision highp sampler3D; +precision highp usampler3D; +precision highp isampler3D; + +#include + +uniform uint targetLayer; +uniform int targetBase; +uniform int targetCount; + +out vec4 target; + +{{ GLOBALS }} + +void computeReadback(int index) { + {{ STATEMENTS }} +} + +void main() { + int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x); + int index = targetIndex - targetBase; + + if ((index >= 0) && (index < targetCount)) { + computeReadback(index); + } else { + target = vec4(0.0, 0.0, 0.0, 0.0); + } +}`; +const AA = class AA { + constructor({ renderer: A } = {}) { + this.renderer = A, this.capacity = 0, this.count = 0; + } + dispose() { + this.target && (this.target.dispose(), this.target = void 0); + } + // Ensure we have a buffer large enough for the readback of count indices. + // Pass in previous bufer of the desired type. + ensureBuffer(A, I) { + const B = Math.ceil(Math.max(1, A) / Z) * Z * 4; + if (I.byteLength >= B) + return I; + const C = new ArrayBuffer(B); + if (I instanceof ArrayBuffer) + return C; + const E = I.constructor; + return new E(C); + } + // Ensure our render target is large enough for the readback of capacity indices. + ensureCapacity(A) { + const { width: I, height: g, depth: B, maxSplats: C } = wA(A); + (!this.target || C > this.capacity) && (this.dispose(), this.capacity = C, this.target = new e.WebGLArrayRenderTarget(I, g, B, { + depthBuffer: !1, + stencilBuffer: !1, + generateMipmaps: !1, + magFilter: e.NearestFilter, + minFilter: e.NearestFilter + }), this.target.texture.format = e.RGBAFormat, this.target.texture.type = e.UnsignedByteType, this.target.texture.internalFormat = "RGBA8"); + } + // Get a program and THREE.RawShaderMaterial for a given Rgba8Readback, + // generating it if necessary and caching the result. + prepareProgramMaterial(A) { + let I = AA.readbackProgram.get(A); + if (!I) { + const B = UA( + { index: "int" }, + { rgba8: "vec4" }, + ({ index: C }) => (A.inputs.index = C, { rgba8: new SI({ rgba8: A.outputs.rgba8 }) }) + ); + AA.programTemplate || (AA.programTemplate = new HI(ee)), I = new pI({ + graph: B, + inputs: { index: "index" }, + outputs: { rgba8: "target" }, + template: AA.programTemplate + }), Object.assign(I.uniforms, { + targetLayer: { value: 0 }, + targetBase: { value: 0 }, + targetCount: { value: 0 } + }), AA.readbackProgram.set(A, I); + } + const g = I.prepareMaterial(); + return AA.mesh.material = g, { program: I, material: g }; + } + saveRenderState(A) { + return { + xrPresenting: A.xr.isPresenting, + autoClear: A.autoClear, + scissorTest: A.getScissorTest() + }; + } + resetRenderState(A, I) { + A.setRenderTarget(null), A.xr.isPresenting = I.xrPresenting, A.autoClear = I.autoClear, A.setScissorTest(I.scissorTest); + } + process({ + count: A, + material: I + }) { + const g = this.renderer; + if (!g) + throw new Error("No renderer"); + if (!this.target) + throw new Error("No target"); + const B = Z * IQ; + I.uniforms.targetBase.value = 0, I.uniforms.targetCount.value = A; + let C = 0; + for (; C < A; ) { + const E = Math.floor(C / B), t = E * B, s = Math.min( + IQ, + Math.ceil((A - t) / Z) + ); + I.uniforms.targetLayer.value = E, g.setRenderTarget(this.target, E), g.xr.isPresenting = !1, g.autoClear = !1, g.setScissorTest(!0), g.setScissor(0, 0, Z, s), g.render(AA.scene, AA.camera), C += Z * s; + } + this.count = A; + } + async read({ + readback: A + }) { + const I = this.renderer; + if (!I) + throw new Error("No renderer"); + if (!this.target) + throw new Error("No target"); + const g = Math.ceil(this.count / Z) * Z; + if (A.byteLength < g * 4) + throw new Error( + `Readback buffer too small: ${A.byteLength} < ${g * 4}` + ); + const B = new Uint8Array( + A instanceof ArrayBuffer ? A : A.buffer + ), C = Z * IQ; + let E = 0; + const t = []; + for (; E < this.count; ) { + const s = Math.floor(E / C), o = s * C, a = Math.min( + IQ, + Math.ceil((this.count - o) / Z) + ); + I.setRenderTarget(this.target, s); + const i = Z * a * 4, D = B.subarray( + o * 4, + o * 4 + i + ), n = I == null ? void 0 : I.readRenderTargetPixelsAsync( + this.target, + 0, + 0, + Z, + a, + D + ); + t.push(n), E += Z * a; + } + return Promise.all(t).then(() => A); + } + // Perform render operation to run the Rgba8Readback program + // but don't perform the readback yet. + render({ + reader: A, + count: I, + renderer: g + }) { + if (this.renderer = g || this.renderer, !this.renderer) + throw new Error("No renderer"); + this.ensureCapacity(I); + const { program: B, material: C } = this.prepareProgramMaterial(A); + B.update(); + const E = this.saveRenderState(this.renderer); + this.process({ count: I, material: C }), this.resetRenderState(this.renderer, E); + } + // Perform a readback of the render target, returning a buffer of the + // given type. + async readback({ + readback: A + }) { + if (!this.renderer) + throw new Error("No renderer"); + const I = this.saveRenderState(this.renderer), g = this.read({ readback: A }); + return this.resetRenderState(this.renderer, I), g; + } + // Perform a render and readback operation for the given Rgba8Readback, + // and readback buffer (call ensureBuffer first). + async renderReadback({ + reader: A, + count: I, + renderer: g, + readback: B + }) { + if (this.renderer = g || this.renderer, !this.renderer) + throw new Error("No renderer"); + this.ensureCapacity(I); + const { program: C, material: E } = this.prepareProgramMaterial(A); + C.update(); + const t = this.saveRenderState(this.renderer); + this.process({ count: I, material: E }); + const s = this.read({ readback: B }); + return this.resetRenderState(this.renderer, t), s; + } + getTexture() { + var A; + return (A = this.target) == null ? void 0 : A.texture; + } +}; +AA.programTemplate = null, AA.readbackProgram = /* @__PURE__ */ new Map(), AA.geometry = new e.PlaneGeometry(2, 2), AA.mesh = new e.Mesh( + AA.geometry, + new e.RawShaderMaterial({ visible: !1 }) +), AA.scene = new e.Scene().add(AA.mesh), AA.camera = new e.Camera(); +let $Q = AA; +const QA = class QA { + constructor(A = {}) { + this.capacity = 0, this.count = 0, this.array = null, this.readback = null, this.source = null, this.needsUpdate = !0, this.dyno = new F({ + key: "rgbaArray", + type: It, + globals: () => [gt], + value: { + texture: QA.getEmpty(), + count: 0 + }, + update: (I) => { + var g; + return I.texture = ((g = this.readback) == null ? void 0 : g.getTexture()) ?? this.source ?? QA.getEmpty(), I.count = this.count, I; + } + }), A.array ? (this.array = A.array, this.capacity = Math.floor(this.array.length / 4), this.capacity = Math.floor(this.capacity / Z) * Z, this.count = Math.min( + this.capacity, + A.count ?? Number.POSITIVE_INFINITY + )) : (this.capacity = A.capacity ?? 0, this.count = 0); + } + // Free up resources + dispose() { + this.readback && (this.readback.dispose(), this.readback = null), this.source && (this.source.dispose(), this.source = null); + } + // Ensure that our array is large enough to hold capacity RGBA8 values. + ensureCapacity(A) { + var I; + if (!this.array || A > (((I = this.array) == null ? void 0 : I.length) ?? 0) / 4) { + this.capacity = wA(A).maxSplats; + const g = new Uint8Array(this.capacity * 4); + this.array && g.set(this.array), this.array = g; + } + return this.array; + } + // Get the THREE.DataArrayTexture from either the readback or the source. + getTexture() { + var I; + let A = (I = this.readback) == null ? void 0 : I.getTexture(); + return (this.source || this.array) && (A = this.maybeUpdateSource()), A ?? QA.getEmpty(); + } + // Create or get a THREE.DataArrayTexture from the data array. + maybeUpdateSource() { + if (!this.array) + throw new Error("No array"); + if (this.needsUpdate || !this.source) { + if (this.needsUpdate = !1, this.source) { + const { width: A, height: I, depth: g } = this.source.image; + this.capacity !== A * I * g && (this.source.dispose(), this.source = null); + } + if (this.source) + this.array.buffer !== this.source.image.data.buffer && (this.source.image.data = new Uint8Array(this.array.buffer)); + else { + const { width: A, height: I, depth: g } = wA(this.capacity); + this.source = new e.DataArrayTexture( + this.array, + A, + I, + g + ), this.source.format = e.RGBAFormat, this.source.type = e.UnsignedByteType, this.source.internalFormat = "RGBA8", this.source.needsUpdate = !0; + } + this.source.needsUpdate = !0; + } + return this.source; + } + // Generate the RGBA8 values from a Rgba8Readback dyno program. + render({ + reader: A, + count: I, + renderer: g + }) { + this.readback || (this.readback = new $Q({ renderer: g })), this.readback.render({ reader: A, count: I, renderer: g }), this.capacity = this.readback.capacity, this.count = this.readback.count; + } + // Extract the RGBA8 values from a PackedSplats collection. + fromPackedSplats({ + packedSplats: A, + base: I, + count: g, + renderer: B + }) { + const { dynoSplats: C, dynoBase: E, dynoCount: t, reader: s } = QA.makeDynos(); + return C.packedSplats = A, E.value = I, t.value = g, this.render({ reader: s, count: g, renderer: B }), this; + } + // Read back the RGBA8 values from the readback buffer. + async read() { + if (!this.readback) + throw new Error("No readback"); + return (!this.array || this.array.length < this.count * 4) && (this.array = new Uint8Array(this.capacity * 4)), (await this.readback.readback({ readback: this.array })).subarray(0, this.count * 4); + } + // Can be used where you need an uninitialized THREE.DataArrayTexture like + // a uniform you will update with the result of this.getTexture() later. + static getEmpty() { + if (!QA.emptySource) { + const A = new Uint8Array(4); + QA.emptySource = new e.DataArrayTexture(A, 1, 1, 1), QA.emptySource.format = e.RGBAFormat, QA.emptySource.type = e.UnsignedByteType, QA.emptySource.internalFormat = "RGBA8", QA.emptySource.needsUpdate = !0; + } + return QA.emptySource; + } + // Create a dyno program that can extract RGBA8 values from a PackedSplats + static makeDynos() { + if (!QA.dynos) { + const A = new mI(), I = new uQ({ value: 0 }), g = new uQ({ value: 0 }), B = UA( + { index: "int" }, + { rgba8: "vec4" }, + ({ index: C }) => { + if (!C) + throw new Error("index is undefined"); + C = cA(C, I); + const E = Eg( + A, + C, + I, + g + ); + return { rgba8: kQ(E).outputs.rgba }; + } + ); + QA.dynos = { dynoSplats: A, dynoBase: I, dynoCount: g, reader: B }; + } + return QA.dynos; + } +}; +QA.emptySource = null, QA.dynos = null; +let NI = QA; +const It = { type: "RgbaArray" }, gt = IA(` + struct RgbaArray { + sampler2DArray texture; + int count; + }; +`); +function De(Q, A) { + return new f({ + inTypes: { rgba: It, index: "int" }, + outTypes: { rgba: "vec4" }, + inputs: { rgba: Q, index: A }, + globals: () => [gt], + statements: ({ inputs: g, outputs: B }) => JA(` + if ((index >= 0) && (index < ${g.rgba}.count)) { + ${B.rgba} = texelFetch(${g.rgba}.texture, splatTexCoord(index), 0); + } else { + ${B.rgba} = vec4(0.0, 0.0, 0.0, 0.0); + } + `) + }).outputs.rgba; +} +var ne = /* @__PURE__ */ ((Q) => (Q.ALL = "all", Q.PLANE = "plane", Q.SPHERE = "sphere", Q.BOX = "box", Q.ELLIPSOID = "ellipsoid", Q.CYLINDER = "cylinder", Q.CAPSULE = "capsule", Q.INFINITE_CONE = "infinite_cone", Q))(ne || {}); +function ce(Q) { + switch (Q) { + case "all": + return 0; + case "plane": + return 1; + case "sphere": + return 2; + case "box": + return 3; + case "ellipsoid": + return 4; + case "cylinder": + return 5; + case "capsule": + return 6; + case "infinite_cone": + return 7; + default: + throw new Error(`Unknown SDF type: ${Q}`); + } +} +var we = /* @__PURE__ */ ((Q) => (Q.MULTIPLY = "multiply", Q.SET_RGB = "set_rgb", Q.ADD_RGBA = "add_rgba", Q))(we || {}); +function re(Q) { + switch (Q) { + case "multiply": + return 0; + case "set_rgb": + return 1; + case "add_rgba": + return 2; + default: + throw new Error(`Unknown blend mode: ${Q}`); + } +} +class he extends e.Object3D { + constructor(A = {}) { + super(); + const { type: I, invert: g, opacity: B, color: C, displace: E, radius: t } = A; + this.type = I ?? "sphere", this.invert = g ?? !1, this.opacity = B ?? 1, this.color = C ?? new e.Color(1, 1, 1), this.displace = E ?? new e.Vector3(0, 0, 0), this.radius = t ?? 0; + } +} +const BI = class BI extends e.Object3D { + constructor(A = {}) { + const { + name: I, + rgbaBlendMode: g = "multiply", + sdfSmooth: B = 0, + softEdge: C = 0, + invert: E = !1, + sdfs: t = null + } = A; + super(), this.rgbaBlendMode = g, this.sdfSmooth = B, this.softEdge = C, this.invert = E, this.sdfs = t, this.ordering = BI.nextOrdering++, this.name = I ?? `Edit ${this.ordering}`; + } + addSdf(A) { + this.sdfs == null && (this.sdfs = []), this.sdfs.push(A); + } + removeSdf(A) { + this.sdfs != null && (this.sdfs = this.sdfs.filter((I) => I !== A)); + } +}; +BI.nextOrdering = 1; +let AI = BI; +class ye { + constructor({ maxSdfs: A, maxEdits: I }) { + this.maxSdfs = Math.max(16, A ?? 0), this.numSdfs = 0, this.sdfData = new Uint32Array(this.maxSdfs * 8 * 4), this.sdfFloatData = new Float32Array(this.sdfData.buffer), this.sdfTexture = this.newSdfTexture(this.sdfData, this.maxSdfs), this.dynoSdfArray = new F({ + key: "sdfArray", + type: Bt, + globals: () => [Ct], + value: { + numSdfs: 0, + sdfTexture: this.sdfTexture + }, + update: (g) => (g.numSdfs = this.numSdfs, g.sdfTexture = this.sdfTexture, g) + }), this.maxEdits = Math.max(16, I ?? 0), this.numEdits = 0, this.editData = new Uint32Array(this.maxEdits * 4), this.editFloatData = new Float32Array(this.editData.buffer), this.dynoNumEdits = new uQ({ value: 0 }), this.dynoEdits = this.newEdits(this.editData, this.maxEdits); + } + newSdfTexture(A, I) { + const g = new e.DataTexture( + A, + 8, + I, + e.RGBAIntegerFormat, + e.UnsignedIntType + ); + return g.internalFormat = "RGBA32UI", g.needsUpdate = !0, g; + } + newEdits(A, I) { + return new F({ + key: "edits", + type: "uvec4", + count: I, + globals: () => [Et], + value: A + }); + } + // Ensure our SDF texture and edits uniform array have enough capacity. + // Reallocate if not. + ensureCapacity({ + maxSdfs: A, + maxEdits: I + }) { + let g = !1; + return A > this.sdfTexture.image.height && (this.sdfTexture.dispose(), this.maxSdfs = Math.max(this.maxSdfs * 2, A), this.sdfData = new Uint32Array(this.maxSdfs * 8 * 4), this.sdfFloatData = new Float32Array(this.sdfData.buffer), this.sdfTexture = this.newSdfTexture(this.sdfData, this.maxSdfs)), I > (this.dynoEdits.count ?? 0) && (this.maxEdits = Math.max(this.maxEdits * 2, I), this.editData = new Uint32Array(this.maxEdits * 4), this.editFloatData = new Float32Array(this.editData.buffer), this.dynoEdits = this.newEdits(this.editData, this.maxEdits), g = !0), g; + } + updateEditData(A, I) { + const g = this.editData[A] !== I; + return this.editData[A] = I, g; + } + updateEditFloatData(A, I) { + oQ[0] = I; + const g = this.editFloatData[A] !== oQ[0]; + return g && (this.editFloatData[A] = oQ[0]), g; + } + encodeEdit(A, { + sdfFirst: I, + sdfCount: g, + invert: B, + rgbaBlendMode: C, + softEdge: E, + sdfSmooth: t + }) { + const s = A * 4; + let o = !1; + return o = this.updateEditData(s + 0, C | (B ? 256 : 0)) || o, o = this.updateEditData(s + 1, I | g << 16) || o, o = this.updateEditFloatData(s + 2, E) || o, o = this.updateEditFloatData(s + 3, t) || o, o; + } + updateSdfData(A, I) { + const g = this.sdfData[A] !== I; + return this.sdfData[A] = I, g; + } + updateSdfFloatData(A, I) { + oQ[0] = I; + const g = this.sdfFloatData[A] !== oQ[0]; + return g && (this.sdfFloatData[A] = oQ[0]), g; + } + encodeSdf(A, { + sdfType: I, + invert: g, + center: B, + quaternion: C, + scale: E, + sizes: t + }, s) { + const o = A * 32, a = I | (g ? 256 : 0); + let i = !1; + i = this.updateSdfFloatData(o + 0, (B == null ? void 0 : B.x) ?? 0) || i, i = this.updateSdfFloatData(o + 1, (B == null ? void 0 : B.y) ?? 0) || i, i = this.updateSdfFloatData(o + 2, (B == null ? void 0 : B.z) ?? 0) || i, i = this.updateSdfData(o + 3, a) || i, i = this.updateSdfFloatData(o + 4, (C == null ? void 0 : C.x) ?? 0) || i, i = this.updateSdfFloatData(o + 5, (C == null ? void 0 : C.y) ?? 0) || i, i = this.updateSdfFloatData(o + 6, (C == null ? void 0 : C.z) ?? 0) || i, i = this.updateSdfFloatData(o + 7, (C == null ? void 0 : C.w) ?? 0) || i, i = this.updateSdfFloatData(o + 8, (E == null ? void 0 : E.x) ?? 0) || i, i = this.updateSdfFloatData(o + 9, (E == null ? void 0 : E.y) ?? 0) || i, i = this.updateSdfFloatData(o + 10, (E == null ? void 0 : E.z) ?? 0) || i, i = this.updateSdfData(o + 11, 0) || i, i = this.updateSdfFloatData(o + 12, (t == null ? void 0 : t.x) ?? 0) || i, i = this.updateSdfFloatData(o + 13, (t == null ? void 0 : t.y) ?? 0) || i, i = this.updateSdfFloatData(o + 14, (t == null ? void 0 : t.z) ?? 0) || i, i = this.updateSdfFloatData(o + 15, (t == null ? void 0 : t.w) ?? 0) || i; + const D = Math.min(4, s.length); + for (let n = 0; n < D; ++n) { + const w = o + 16 + n * 4; + i = this.updateSdfFloatData(w + 0, s[n].x) || i, i = this.updateSdfFloatData(w + 1, s[n].y) || i, i = this.updateSdfFloatData(w + 2, s[n].z) || i, i = this.updateSdfFloatData(w + 3, s[n].w) || i; + } + return i; + } + // Update the SDFs and edits from an array of SplatEdits and their + // associated SplatEditSdfs, updating it for the dyno shader program. + update(A) { + const I = A.reduce((i, { sdfs: D }) => i + D.length, 0), g = this.ensureCapacity({ + maxEdits: A.length, + maxSdfs: I + }), B = [new e.Vector4(), new e.Vector4()], C = new e.Vector3(), E = new e.Quaternion(), t = new e.Vector3(), s = new e.Vector4(); + let o = 0, a = g; + A.length !== this.dynoNumEdits.value && (this.dynoNumEdits.value = A.length, this.numEdits = A.length, a = !0); + for (const [i, { edit: D, sdfs: n }] of A.entries()) { + a = this.encodeEdit(i, { + sdfFirst: o, + sdfCount: n.length, + invert: D.invert, + rgbaBlendMode: re(D.rgbaBlendMode), + softEdge: D.softEdge, + sdfSmooth: D.sdfSmooth + }) || a; + let w = !1; + for (const c of n) + s.set(c.scale.x, c.scale.y, c.scale.z, c.radius), c.scale.setScalar(1), c.updateMatrixWorld(), c.matrixWorld.clone().invert().decompose(C, E, t), c.scale.set(s.x, s.y, s.z), c.updateMatrixWorld(), B[0].set(c.color.r, c.color.g, c.color.b, c.opacity), B[1].set(c.displace.x, c.displace.y, c.displace.z, 1), w = this.encodeSdf( + o, + { + sdfType: ce(c.type), + invert: c.invert, + center: C, + quaternion: E, + scale: t, + sizes: s + }, + B + ) || w, o += 1; + this.numSdfs = o, w && (this.sdfTexture.needsUpdate = !0), a || (a = w); + } + return { updated: a, dynoUpdated: g }; + } + // Modify a Gsplat in a dyno shader program using the current edits and SDFs. + modify(A) { + return Ge( + A, + this.dynoSdfArray, + this.dynoNumEdits, + this.dynoEdits + ); + } +} +const Bt = { type: "SdfArray" }, Ct = IA(` + struct SdfArray { + int numSdfs; + usampler2D sdfTexture; + }; + + void unpackSdfArray( + usampler2D sdfTexture, int sdfIndex, out uint flags, + out vec3 center, out vec4 quaternion, out vec3 scale, out vec4 sizes, + int numValues, out vec4 values[4] + ) { + uvec4 temp = texelFetch(sdfTexture, ivec2(0, sdfIndex), 0); + flags = temp.w; + center = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z)); + + temp = texelFetch(sdfTexture, ivec2(1, sdfIndex), 0); + quaternion = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + + temp = texelFetch(sdfTexture, ivec2(2, sdfIndex), 0); + scale = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z)); + + temp = texelFetch(sdfTexture, ivec2(3, sdfIndex), 0); + sizes = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + + for (int i = 0; i < numValues; ++i) { + temp = texelFetch(sdfTexture, ivec2(4 + i, sdfIndex), 0); + values[i] = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + } + } + + const uint SDF_FLAG_TYPE = 0xFFu; + const uint SDF_FLAG_INVERT = 1u << 8u; + + const uint SDF_TYPE_ALL = 0u; + const uint SDF_TYPE_PLANE = 1u; + const uint SDF_TYPE_SPHERE = 2u; + const uint SDF_TYPE_BOX = 3u; + const uint SDF_TYPE_ELLIPSOID = 4u; + const uint SDF_TYPE_CYLINDER = 5u; + const uint SDF_TYPE_CAPSULE = 6u; + const uint SDF_TYPE_INFINITE_CONE = 7u; + + float evaluateSdfArray( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos, + float smoothK, int numValues, out vec4 outValues[4] + ) { + float distanceAccum = (smoothK == 0.0) ? 1.0 / 0.0 : 0.0; + float maxExp = -1.0 / 0.0; + for (int i = 0; i < numValues; ++i) { + outValues[i] = vec4(0.0); + } + + uint flags; + vec3 center, scale; + vec4 quaternion, sizes; + vec4 values[4]; + + int sdfLast = min(sdfFirst + sdfCount, numSdfs); + for (int index = sdfFirst; index < sdfLast; ++index) { + unpackSdfArray(sdfTexture, index, flags, center, quaternion, scale, sizes, numValues, values); + uint sdfType = flags & SDF_FLAG_TYPE; + vec3 sdfPos = quatVec(quaternion, pos * scale) + center; + + float distance; + switch (sdfType) { + case SDF_TYPE_ALL: + distance = -1.0 / 0.0; + break; + case SDF_TYPE_PLANE: { + distance = sdfPos.z; + break; + } + case SDF_TYPE_SPHERE: { + distance = length(sdfPos) - sizes.w; + break; + } + case SDF_TYPE_BOX: { + vec3 q = abs(sdfPos) - sizes.xyz + sizes.w; + distance = length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - sizes.w; + break; + } + case SDF_TYPE_ELLIPSOID: { + vec3 sizes = sizes.xyz; + float k0 = length(sdfPos / sizes); + float k1 = length(sdfPos / dot(sizes, sizes)); + distance = k0 * (k0 - 1.0) / k1; + break; + } + case SDF_TYPE_CYLINDER: { + vec2 d = abs(vec2(length(sdfPos.xz), sdfPos.y)) - sizes.wy; + distance = min(max(d.x, d.y), 0.0) + length(max(d, 0.0)); + break; + } + case SDF_TYPE_CAPSULE: { + sdfPos.y -= clamp(sdfPos.y, -0.5 * sizes.y, 0.5 * sizes.y); + distance = length(sdfPos) - sizes.w; + break; + } + case SDF_TYPE_INFINITE_CONE: { + float angle = 0.25 * PI * sizes.w; + vec2 c = vec2(sin(angle), cos(angle)); + vec2 q = vec2(length(sdfPos.xy), -sdfPos.z); + float d = length(q - c * max(dot(q, c), 0.0)); + distance = d * (((q.x * c.y - q.y * c.x) < 0.0) ? -1.0 : 1.0); + break; + } + } + + if ((flags & SDF_FLAG_INVERT) != 0u) { + distance = -distance; + } + + if (smoothK == 0.0) { + if (distance < distanceAccum) { + distanceAccum = distance; + for (int i = 0; i < numValues; ++i) { + outValues[i] = values[i]; + } + } + } else { + float scaledDistance = -distance / smoothK; + if (scaledDistance > maxExp) { + float scale = exp(maxExp - scaledDistance); + distanceAccum *= scale; + for (int i = 0; i < numValues; ++i) { + outValues[i] *= scale; + } + maxExp = scaledDistance; + } + + float weight = exp(scaledDistance - maxExp); + distanceAccum += weight; + for (int i = 0; i < numValues; ++i) { + outValues[i] += weight * values[i]; + } + } + } + + if (smoothK == 0.0) { + return distanceAccum; + } else { + // Very distant SDFs may result in 0 accumulation + if (distanceAccum == 0.0) { + return 1.0 / 0.0; + } + for (int i = 0; i < numValues; ++i) { + outValues[i] /= distanceAccum; + } + return (-log(distanceAccum) - maxExp) * smoothK; + } + } + + float modulateSdfArray( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos, + float smoothK, int numValues, out vec4 values[4], + float softEdge, bool invert + ) { + float distance = evaluateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, numValues, values); + if (invert) { + distance = -distance; + } + + return (softEdge == 0.0) ? ((distance < 0.0) ? 1.0 : 0.0) + : clamp(-distance / softEdge + 0.5, 0.0, 1.0); + } +`), Et = IA(` + const uint EDIT_FLAG_BLEND = 0xFFu; + const uint EDIT_BLEND_MULTIPLY = 0u; + const uint EDIT_BLEND_SET_RGB = 1u; + const uint EDIT_BLEND_ADD_RGBA = 2u; + const uint EDIT_FLAG_INVERT = 0x100u; + + void decodeEdit( + uvec4 packedEdit, out int sdfFirst, out int sdfCount, + out bool invert, out uint rgbaBlendMode, out float softEdge, out float sdfSmooth + ) { + rgbaBlendMode = packedEdit.x & EDIT_FLAG_BLEND; + invert = (packedEdit.x & EDIT_FLAG_INVERT) != 0u; + + sdfFirst = int(packedEdit.y & 0xFFFFu); + sdfCount = int(packedEdit.y >> 16u); + + softEdge = uintBitsToFloat(packedEdit.z); + sdfSmooth = uintBitsToFloat(packedEdit.w); + } + + void applyRgbaDisplaceEdit( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, inout vec3 pos, + float smoothK, float softEdge, bool invert, uint rgbaBlendMode, inout vec4 rgba + ) { + vec4 values[4]; + float modulate = modulateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, 2, values, softEdge, invert); + // On Android, moving values[0] is necessary to work around a compiler bug. + vec4 sdfRgba = values[0]; + vec4 sdfDisplaceScale = values[1]; + + vec4 target; + switch (rgbaBlendMode) { + case EDIT_BLEND_MULTIPLY: + target = rgba * sdfRgba; + break; + case EDIT_BLEND_SET_RGB: + target = vec4(sdfRgba.rgb, rgba.a * sdfRgba.a); + break; + case EDIT_BLEND_ADD_RGBA: + target = rgba + sdfRgba; + break; + default: + // Debug output if blend mode not set + target = vec4(fract(pos), 1.0); + } + rgba = mix(rgba, target, modulate); + pos += sdfDisplaceScale.xyz * modulate; + } + + void applyPackedRgbaDisplaceEdit(uvec4 packedEdit, usampler2D sdfTexture, int numSdfs, inout vec3 pos, inout vec4 rgba) { + int sdfFirst, sdfCount; + bool invert; + uint rgbaBlendMode; + float softEdge, sdfSmooth; + decodeEdit(packedEdit, sdfFirst, sdfCount, invert, rgbaBlendMode, softEdge, sdfSmooth); + applyRgbaDisplaceEdit(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, sdfSmooth, softEdge, invert, rgbaBlendMode, rgba); + } +`); +function Ge(Q, A, I, g) { + return new f({ + inTypes: { + gsplat: v, + sdfArray: Bt, + numEdits: "int", + rgbaDisplaceEdits: "uvec4" + }, + outTypes: { gsplat: v }, + globals: () => [Ct, Et], + inputs: { gsplat: Q, sdfArray: A, numEdits: I, rgbaDisplaceEdits: g }, + statements: ({ inputs: C, outputs: E }) => { + const { sdfArray: t, numEdits: s, rgbaDisplaceEdits: o } = C, { gsplat: a } = E; + return JA(` + ${a} = ${C.gsplat}; + if (isGsplatActive(${a}.flags)) { + for (int editIndex = 0; editIndex < ${s}; ++editIndex) { + applyPackedRgbaDisplaceEdit( + ${o}[editIndex], ${t}.sdfTexture, ${t}.numSdfs, + ${a}.center, ${a}.rgba + ); + } + } + `); + } + }).outputs.gsplat; +} +const oQ = new Float32Array(1); +class le { + constructor(A) { + this.modifier = A, this.cache = /* @__PURE__ */ new Map(); + } + apply(A) { + let I = this.cache.get(A); + return I || (I = UA( + { index: "int" }, + { gsplat: v }, + ({ index: g }) => { + const { gsplat: B } = A.apply({ index: g }); + return this.modifier.apply({ gsplat: B }); + } + ), this.cache.set(A, I)), I; + } +} +class nQ { + // Create the dyno uniforms that parameterize the transform, setting them + // to initial values that are different from any valid transform. + constructor() { + this.scale = new gQ({ value: Number.NEGATIVE_INFINITY }), this.rotate = new fQ({ + value: new e.Quaternion( + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY + ) + }), this.translate = new hQ({ + value: new e.Vector3( + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY + ) + }); + } + // Apply the transform to a Gsplat in a dyno program. + modify(A) { + return UI(A, { + scale: this.scale, + rotate: this.rotate, + translate: this.translate + }); + } + // Update the uniforms to match the given transform matrix. + updateFromMatrix(A) { + const I = new e.Vector3(), g = new e.Quaternion(), B = new e.Vector3(); + A.decompose(B, g, I); + const C = (I.x + I.y + I.z) / 3; + let E = !1; + return C !== this.scale.value && (this.scale.value = C, E = !0), B.equals(this.translate.value) || (this.translate.value.copy(B), E = !0), g.equals(this.rotate.value) || (this.rotate.value.copy(g), E = !0), E; + } + // Update this transform to match the object's to-world transform. + update(A) { + return this.updateFromMatrix(A.matrixWorld); + } +} +class iI extends e.Object3D { + constructor({ + numSplats: A, + generator: I, + construct: g, + update: B + }) { + if (super(), this.numSplats = A ?? 0, this.generator = I, this.frameUpdate = B, this.version = 0, g) { + const C = g(this); + Object.assign(this, C); + } + } + updateVersion() { + this.version += 1; + } + set needsUpdate(A) { + A && this.updateVersion(); + } +} +const TA = class TA extends iI { + constructor(A = {}) { + const I = new nQ(), g = new nQ(), B = new nQ(), C = new nQ(), E = new fQ({ + value: new e.Vector4( + Number.NEGATIVE_INFINITY, + Number.NEGATIVE_INFINITY, + Number.NEGATIVE_INFINITY, + Number.NEGATIVE_INFINITY + ) + }), t = new gQ({ value: 0 }), s = new gQ({ value: 0 }), o = { + transform: I, + viewToWorld: g, + worldToView: B, + viewToObject: C, + recolor: E, + time: t, + deltaTime: s + }; + if (super({ + update: ({ time: a, deltaTime: i, viewToWorld: D, globalEdits: n }) => this.update({ time: a, deltaTime: i, viewToWorld: D, globalEdits: n }) + }), this.isInitialized = !1, this.recolor = new e.Color(1, 1, 1), this.opacity = 1, this.enableViewToObject = !1, this.enableViewToWorld = !1, this.enableWorldToView = !1, this.skinning = null, this.edits = null, this.rgbaDisplaceEdits = null, this.splatRgba = null, this.maxSh = 3, this.packedSplats = A.packedSplats ?? new fA(), this.numSplats = this.packedSplats.numSplats, this.editable = A.editable ?? !0, this.onFrame = A.onFrame, this.context = o, this.objectModifier = A.objectModifier, this.worldModifier = A.worldModifier, this.updateGenerator(), A.url || A.fileBytes || A.constructSplats || A.packedSplats && !A.packedSplats.isInitialized) + this.initialized = this.asyncInitialize(A).then(async () => { + if (this.updateGenerator(), this.isInitialized = !0, A.onLoad) { + const a = A.onLoad(this); + a instanceof Promise && await a; + } + return this; + }); + else if (this.isInitialized = !0, this.initialized = Promise.resolve(this), A.onLoad) { + const a = A.onLoad(this); + a instanceof Promise && (this.initialized = a.then(() => this)); + } + } + async asyncInitialize(A) { + const { url: I, fileBytes: g, fileType: B, maxSplats: C, constructSplats: E } = A; + if (I || g || E) { + const t = { + url: I, + fileBytes: g, + fileType: B, + maxSplats: C, + construct: E + }; + this.packedSplats.reinitialize(t), this.updateGenerator(); + } + this.packedSplats && (await this.packedSplats.initialized, this.numSplats = this.packedSplats.numSplats); + } + static async staticInitialize() { + await _I(), TA.isStaticInitialized = !0; + } + // Creates a new Gsplat with the provided parameters (all values in "float" space, + // i.e. 0-1 for opacity and color) and adds it to the end of the packedSplats, + // increasing numSplats by 1. If necessary, reallocates the buffer with an exponential + // doubling strategy to fit the new data, so it's fairly efficient to just + // pushSplat(...) each Gsplat you want to create in a loop. + pushSplat(A, I, g, B, C) { + this.packedSplats.pushSplat(A, I, g, B, C); + } + // This method iterates over all Gsplats in this instance's packedSplats, + // invoking the provided callback with index: number in 0..=(this.numSplats-1) and + // center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, + // opacity: number (0..1), and color: THREE.Color (rgb values in 0..1). + // Note that the objects passed in as center etc. are the same for every callback + // invocation: these objects are reused for efficiency. Changing these values has + // no effect as they are decoded/unpacked copies of the underlying data. To update + // the packedSplats, call .packedSplats.setSplat(index, center, scales, + // quaternion, opacity, color). + forEachSplat(A) { + this.packedSplats.forEachSplat(A); + } + // Call this when you are finished with the SplatMesh and want to free + // any buffers it holds (via packedSplats). + dispose() { + this.packedSplats.dispose(); + } + constructGenerator({ transform: A, viewToObject: I, recolor: g }) { + const B = UA( + { index: "int" }, + { gsplat: v }, + ({ index: C }) => { + if (!C) + throw new Error("index is undefined"); + let E = dQ(this.packedSplats.dyno, C); + if (this.maxSh >= 1) { + const { sh1Texture: s, sh2Texture: o, sh3Texture: a } = this.ensureShTextures(); + if (s) { + const i = I.translate, { center: D } = kQ(E).outputs, n = $C(UQ(D, i)); + let w = Fe(E, s, n); + this.maxSh >= 2 && o && (w = cA(w, Re(E, o, n))), this.maxSh >= 3 && a && (w = cA(w, Je(E, a, n))); + let { rgba: c } = kQ(E).outputs; + c = cA(c, AE(w, q("float", 0))), E = rQ({ gsplat: E, rgba: c }); + } + } + if (this.splatRgba) { + const s = De(this.splatRgba.dyno, C); + E = rQ({ gsplat: E, rgba: s }); + } + this.skinning && (E = this.skinning.modify(E)), this.objectModifier && (E = this.objectModifier.apply({ gsplat: E }).gsplat), E = A.modify(E); + const t = BA(g, kQ(E).outputs.rgba); + return E = rQ({ gsplat: E, rgba: t }), this.rgbaDisplaceEdits && (E = this.rgbaDisplaceEdits.modify(E)), this.worldModifier && (E = this.worldModifier.apply({ gsplat: E }).gsplat), { gsplat: E }; + } + ); + this.generator = B; + } + // Call this whenever something changes in the Gsplat processing pipeline, + // for example changing maxSh or updating objectModifier or worldModifier. + // Compiled generators are cached for efficiency and re-use when the same + // pipeline structure emerges after successive changes. + updateGenerator() { + this.constructGenerator(this.context); + } + // This is called automatically by ForgeRenderer and you should not have to + // call it. It updates parameters for the generated pipeline and calls + // updateGenerator() if the pipeline needs to change. + update({ + time: A, + viewToWorld: I, + deltaTime: g, + globalEdits: B + }) { + var r; + this.numSplats = this.packedSplats.numSplats, this.context.time.value = A, this.context.deltaTime.value = g, TA.dynoTime.value = A; + const { transform: C, viewToObject: E, recolor: t } = this.context; + let s = C.update(this); + this.context.viewToWorld.updateFromMatrix(I) && this.enableViewToWorld && (s = !0); + const o = I.clone().invert(); + this.context.worldToView.updateFromMatrix(o) && this.enableWorldToView && (s = !0); + const D = new e.Matrix4().compose( + C.translate.value, + C.rotate.value, + new e.Vector3().setScalar(C.scale.value) + ).invert().multiply(I); + E.updateFromMatrix(D) && (this.enableViewToObject || this.packedSplats.extra.sh1) && (s = !0); + const n = new e.Vector4( + this.recolor.r, + this.recolor.g, + this.recolor.b, + this.opacity + ); + n.equals(t.value) || (t.value.copy(n), s = !0); + const w = this.editable ? (this.edits ?? []).concat(B) : []; + this.editable && !this.edits && this.traverseVisible((y) => { + y instanceof AI && w.push(y); + }), w.sort((y, G) => y.ordering - G.ordering); + const c = w.map((y) => { + if (y.sdfs != null) + return { edit: y, sdfs: y.sdfs }; + const G = []; + return y.traverseVisible((h) => { + h instanceof he && G.push(h); + }), { edit: y, sdfs: G }; + }); + if (c.length > 0 && !this.rgbaDisplaceEdits) { + const y = c.length, G = c.reduce( + (h, M) => h + M.sdfs.length, + 0 + ); + this.rgbaDisplaceEdits = new ye({ + maxEdits: y, + maxSdfs: G + }), this.updateGenerator(); + } + if (this.rgbaDisplaceEdits) { + const y = this.rgbaDisplaceEdits.update(c); + s || (s = y.updated), y.dynoUpdated && this.updateGenerator(); + } + s && this.updateVersion(), (r = this.onFrame) == null || r.call(this, { mesh: this, time: A, deltaTime: g }); + } + // This method conforms to the standard THREE.Raycaster API, performing object-ray + // intersections using this method to populate the provided intersects[] array + // with each intersection point. + raycast(A, I) { + if (!this.packedSplats.packedArray || !this.packedSplats.numSplats) + return; + const { near: g, far: B, ray: C } = A, E = this.matrixWorld.clone().invert(), t = new e.Matrix3().setFromMatrix4(E), s = C.origin.clone().applyMatrix4(E), o = C.direction.clone().applyMatrix3(t), a = new e.Vector3(); + E.decompose(new e.Vector3(), new e.Quaternion(), a), (a.x * a.y * a.z) ** (1 / 3); + const D = pt( + s.x, + s.y, + s.z, + o.x, + o.y, + o.z, + g, + B, + this.packedSplats.numSplats, + this.packedSplats.packedArray, + !0 + ); + for (const n of D) { + const w = C.direction.clone().multiplyScalar(n).add(C.origin); + I.push({ + distance: n, + point: w, + object: this + }); + } + } + ensureShTextures() { + if (!this.packedSplats.extra.sh1) + return {}; + const A = this.packedSplats.extra.sh1Texture; + if (!A) { + let B = this.packedSplats.extra.sh1; + const { width: C, height: E, depth: t, maxSplats: s } = wA( + B.length / 2 + ); + if (B.length < s * 2) { + const i = new Uint32Array(s * 2); + i.set(B), this.packedSplats.extra.sh1 = i, B = i; + } + const o = new e.DataArrayTexture(B, C, E, t); + o.format = e.RGIntegerFormat, o.type = e.UnsignedIntType, o.internalFormat = "RG32UI", o.needsUpdate = !0; + const a = new FQ({ + value: o, + key: "sh1" + }); + this.packedSplats.extra.sh1Texture = a; + } + if (!this.packedSplats.extra.sh2) + return { sh1Texture: A }; + const I = this.packedSplats.extra.sh2Texture; + if (!I) { + let B = this.packedSplats.extra.sh2; + const { width: C, height: E, depth: t, maxSplats: s } = wA( + B.length / 4 + ); + if (B.length < s * 4) { + const i = new Uint32Array(s * 4); + i.set(B), this.packedSplats.extra.sh2 = i, B = i; + } + const o = new e.DataArrayTexture(B, C, E, t); + o.format = e.RGBAIntegerFormat, o.type = e.UnsignedIntType, o.internalFormat = "RGBA32UI", o.needsUpdate = !0; + const a = new FQ({ + value: o, + key: "sh2" + }); + this.packedSplats.extra.sh2Texture = a; + } + if (!this.packedSplats.extra.sh3) + return { sh1Texture: A, sh2Texture: I }; + const g = this.packedSplats.extra.sh3Texture; + if (!g) { + let B = this.packedSplats.extra.sh3; + const { width: C, height: E, depth: t, maxSplats: s } = wA( + B.length / 4 + ); + if (B.length < s * 4) { + const i = new Uint32Array(s * 4); + i.set(B), this.packedSplats.extra.sh3 = i, B = i; + } + const o = new e.DataArrayTexture(B, C, E, t); + o.format = e.RGBAIntegerFormat, o.type = e.UnsignedIntType, o.internalFormat = "RGBA32UI", o.needsUpdate = !0; + const a = new FQ({ + value: o, + key: "sh3" + }); + this.packedSplats.extra.sh3Texture = a; + } + return { sh1Texture: A, sh2Texture: I, sh3Texture: g }; + } +}; +TA.staticInitialized = TA.staticInitialize(), TA.isStaticInitialized = !1, TA.dynoTime = new gQ({ value: 0 }); +let OA = TA; +const Me = IA(` + vec3 evaluateSH1(Gsplat gsplat, usampler2DArray sh1, vec3 viewDir) { + // Extract sint7 values packed into 2 x uint32 + uvec2 packed = texelFetch(sh1, splatTexCoord(gsplat.index), 0).rg; + vec3 sh1_0 = vec3(ivec3( + int(packed.x << 25u) >> 25, + int(packed.x << 18u) >> 25, + int(packed.x << 11u) >> 25 + )) / 63.0; + vec3 sh1_1 = vec3(ivec3( + int(packed.x << 4u) >> 25, + int((packed.x >> 3u) | (packed.y << 29u)) >> 25, + int(packed.y << 22u) >> 25 + )) / 63.0; + vec3 sh1_2 = vec3(ivec3( + int(packed.y << 15u) >> 25, + int(packed.y << 8u) >> 25, + int(packed.y << 1u) >> 25 + )) / 63.0; + + return sh1_0 * (-0.4886025 * viewDir.y) + + sh1_1 * (0.4886025 * viewDir.z) + + sh1_2 * (-0.4886025 * viewDir.x); + } +`), Ne = IA(` + vec3 evaluateSH2(Gsplat gsplat, usampler2DArray sh2, vec3 viewDir) { + // Extract sint8 values packed into 4 x uint32 + uvec4 packed = texelFetch(sh2, splatTexCoord(gsplat.index), 0); + vec3 sh2_0 = vec3(ivec3( + int(packed.x << 24u) >> 24, + int(packed.x << 16u) >> 24, + int(packed.x << 8u) >> 24 + )) / 127.0; + vec3 sh2_1 = vec3(ivec3( + int(packed.x) >> 24, + int(packed.y << 24u) >> 24, + int(packed.y << 16u) >> 24 + )) / 127.0; + vec3 sh2_2 = vec3(ivec3( + int(packed.y << 8u) >> 24, + int(packed.y) >> 24, + int(packed.z << 24u) >> 24 + )) / 127.0; + vec3 sh2_3 = vec3(ivec3( + int(packed.z << 16u) >> 24, + int(packed.z << 8u) >> 24, + int(packed.z) >> 24 + )) / 127.0; + vec3 sh2_4 = vec3(ivec3( + int(packed.w << 24u) >> 24, + int(packed.w << 16u) >> 24, + int(packed.w << 8u) >> 24 + )) / 127.0; + + return sh2_0 * (1.0925484 * viewDir.x * viewDir.y) + + sh2_1 * (1.0925484 * viewDir.y * viewDir.z) + + sh2_2 * (0.3153915 * (2.0 * viewDir.z * viewDir.z - viewDir.x * viewDir.x - viewDir.y * viewDir.y)) + + sh2_3 * (1.0925484 * viewDir.x * viewDir.z) + + sh2_4 * (0.5462742 * (viewDir.x * viewDir.x - viewDir.y * viewDir.y)); + } +`), ke = IA(` + vec3 evaluateSH3(Gsplat gsplat, usampler2DArray sh3, vec3 viewDir) { + // Extract sint6 values packed into 4 x uint32 + uvec4 packed = texelFetch(sh3, splatTexCoord(gsplat.index), 0); + vec3 sh3_0 = vec3(ivec3( + int(packed.x << 26u) >> 26, + int(packed.x << 20u) >> 26, + int(packed.x << 14u) >> 26 + )) / 31.0; + vec3 sh3_1 = vec3(ivec3( + int(packed.x << 8u) >> 26, + int(packed.x << 2u) >> 26, + int((packed.x >> 4u) | (packed.y << 28u)) >> 26 + )) / 31.0; + vec3 sh3_2 = vec3(ivec3( + int(packed.y << 22u) >> 26, + int(packed.y << 16u) >> 26, + int(packed.y << 10u) >> 26 + )) / 31.0; + vec3 sh3_3 = vec3(ivec3( + int(packed.y << 4u) >> 26, + int((packed.y >> 2u) | (packed.z << 30u)) >> 26, + int(packed.z << 24u) >> 26 + )) / 31.0; + vec3 sh3_4 = vec3(ivec3( + int(packed.z << 18u) >> 26, + int(packed.z << 12u) >> 26, + int(packed.z << 6u) >> 26 + )) / 31.0; + vec3 sh3_5 = vec3(ivec3( + int(packed.z) >> 26, + int(packed.w << 26u) >> 26, + int(packed.w << 20u) >> 26 + )) / 31.0; + vec3 sh3_6 = vec3(ivec3( + int(packed.w << 14u) >> 26, + int(packed.w << 8u) >> 26, + int(packed.w << 2u) >> 26 + )) / 31.0; + + float xx = viewDir.x * viewDir.x; + float yy = viewDir.y * viewDir.y; + float zz = viewDir.z * viewDir.z; + float xy = viewDir.x * viewDir.y; + float yz = viewDir.y * viewDir.z; + float zx = viewDir.z * viewDir.x; + + return sh3_0 * (-0.5900436 * viewDir.y * (3.0 * xx - yy)) + + sh3_1 * (2.8906114 * xy * viewDir.z) + + + sh3_2 * (-0.4570458 * viewDir.y * (4.0 * zz - xx - yy)) + + sh3_3 * (0.3731763 * viewDir.z * (2.0 * zz - 3.0 * xx - 3.0 * yy)) + + sh3_4 * (-0.4570458 * viewDir.x * (4.0 * zz - xx - yy)) + + sh3_5 * (1.4453057 * viewDir.z * (xx - yy)) + + sh3_6 * (-0.5900436 * viewDir.x * (xx - 3.0 * yy)); + } +`); +function Fe(Q, A, I) { + return pQ({ + inTypes: { gsplat: v, sh1: "usampler2DArray", viewDir: "vec3" }, + outTypes: { rgb: "vec3" }, + inputs: { gsplat: Q, sh1: A, viewDir: I }, + globals: () => [rA, Me], + statements: ({ inputs: g, outputs: B }) => JA(` + if (isGsplatActive(${g.gsplat}.flags)) { + ${B.rgb} = evaluateSH1(${g.gsplat}, ${g.sh1}, ${g.viewDir}); + } else { + ${B.rgb} = vec3(0.0); + } + `) + }).outputs.rgb; +} +function Re(Q, A, I) { + return pQ({ + inTypes: { gsplat: v, sh2: "usampler2DArray", viewDir: "vec3" }, + outTypes: { rgb: "vec3" }, + inputs: { gsplat: Q, sh2: A, viewDir: I }, + globals: () => [rA, Ne], + statements: ({ inputs: g, outputs: B }) => JA(` + if (isGsplatActive(${g.gsplat}.flags)) { + ${B.rgb} = evaluateSH2(${g.gsplat}, ${g.sh2}, ${g.viewDir}); + } else { + ${B.rgb} = vec3(0.0); + } + `) + }).outputs.rgb; +} +function Je(Q, A, I) { + return pQ({ + inTypes: { gsplat: v, sh3: "usampler2DArray", viewDir: "vec3" }, + outTypes: { rgb: "vec3" }, + inputs: { gsplat: Q, sh3: A, viewDir: I }, + globals: () => [rA, ke], + statements: ({ inputs: g, outputs: B }) => JA(` + if (isGsplatActive(${g.gsplat}.flags)) { + ${B.rgb} = evaluateSH3(${g.gsplat}, ${g.sh3}, ${g.viewDir}); + } else { + ${B.rgb} = vec3(0.0); + } + `) + }).outputs.rgb; +} +const cQ = class cQ { + // Create a PlyReader from a Uint8Array/ArrayBuffer, no parsing done yet + constructor({ fileBytes: A }) { + this.header = "", this.littleEndian = !0, this.elements = {}, this.comments = [], this.data = null, this.numSplats = 0, this.fileBytes = A instanceof ArrayBuffer ? new Uint8Array(A) : A; + } + // Identify and parse the PLY text header (assumed to be <64KB in size). + // this.elements will contain all the elements in the file, typically + // "vertex" contains the Gsplat data. + async parseHeader() { + const I = new ReadableStream({ + start: (E) => { + E.enqueue(this.fileBytes.slice(0, 65536)), E.close(); + } + }).pipeThrough(new TextDecoderStream()).getReader(); + this.header = ""; + const g = `end_header +`; + for (; ; ) { + const { value: E, done: t } = await I.read(); + if (t) + throw new Error("Failed to read header"); + this.header += E; + const s = this.header.indexOf(g); + if (s >= 0) { + this.header = this.header.slice(0, s + g.length); + break; + } + } + const B = new TextEncoder().encode(this.header).length; + this.data = new DataView(this.fileBytes.buffer, B), this.elements = {}; + let C = null; + this.comments = [], this.header.trim().split(` +`).forEach((E, t) => { + const s = E.trim(); + if (t === 0) { + if (s !== "ply") + throw new Error("Invalid PLY header"); + return; + } + if (s.length === 0) + return; + const o = s.split(" "); + switch (o[0]) { + case "format": + if (o[1] === "binary_little_endian") + this.littleEndian = !0; + else if (o[1] === "binary_big_endian") + this.littleEndian = !1; + else + throw new Error(`Unsupported PLY format: ${o[1]}`); + if (o[2] !== "1.0") + throw new Error(`Unsupported PLY version: ${o[2]}`); + break; + case "end_header": + break; + case "comment": + this.comments.push(s.slice(8)); + break; + case "element": { + const a = o[1]; + C = { + name: a, + count: Number.parseInt(o[2]), + properties: {} + }, this.elements[a] = C; + break; + } + case "property": + if (C == null) + throw new Error("Property must be inside an element"); + o[1] === "list" ? C.properties[o[4]] = { + isList: !0, + type: o[3], + countType: o[2] + } : C.properties[o[2]] = { + isList: !1, + type: o[1] + }; + break; + } + }), this.elements.vertex && (this.numSplats = this.elements.vertex.count); + } + parseData(A) { + let I = 0; + const g = this.data; + if (g == null) + throw new Error("No data to parse"); + for (const B in this.elements) { + const C = this.elements[B], { count: E, properties: t } = C, s = {}, o = []; + for (const [i, D] of Object.entries(t)) + D.isList ? (s[i] = [], o.push(() => { + const n = s[i]; + n.length = ZQ[D.countType]( + g, + I, + this.littleEndian + ), I += aQ[D.countType]; + for (let w = 0; w < n.length; w++) + n[w] = ZQ[D.type]( + g, + I, + this.littleEndian + ), I += aQ[D.type]; + })) : (s[i] = 0, o.push(() => { + s[i] = ZQ[D.type]( + g, + I, + this.littleEndian + ), I += aQ[D.type]; + })); + const a = A(C) ?? (() => { + }); + for (let i = 0; i < E; i++) { + for (const D of o) + D(); + a(i, s); + } + } + } + // Parse all the Gsplat data in the PLY file in go, invoking the given + // callbacks for each Gsplat. + parseSplats(A, I) { + if (this.elements.vertex == null) + throw new Error("No vertex element found"); + let g = !1; + const B = []; + let C = 0, E = [], t = [], s = [], o, a, i; + function D() { + const y = de[C]; + E = new Array(3).fill(null).flatMap( + (G, h) => [0, 1, 2].map((M, l) => `f_rest_${h + l * y / 3}`) + ), t = new Array(5).fill(null).flatMap( + (G, h) => [0, 1, 2].map((M, l) => `f_rest_${3 + h + l * y / 3}`) + ), s = new Array(7).fill(null).flatMap( + (G, h) => [0, 1, 2].map((M, l) => `f_rest_${8 + h + l * y / 3}`) + ), o = C >= 1 ? new Float32Array(3 * 3) : void 0, a = C >= 2 ? new Float32Array(5 * 3) : void 0, i = C >= 3 ? new Float32Array(7 * 3) : void 0; + } + function n(y, G) { + if (!o) + throw new Error("Missing sh1"); + for (const [h, M] of E.entries()) + o[h] = G[M] * 8 / 255 - 4; + if (a) + for (const [h, M] of t.entries()) + a[h] = G[M] * 8 / 255 - 4; + if (i) + for (const [h, M] of s.entries()) + i[h] = G[M] * 8 / 255 - 4; + I == null || I(y, o, a, i); + } + function w(y) { + const { + min_x: G, + min_y: h, + min_z: M, + max_x: l, + max_y: k, + max_z: R, + min_scale_x: Y, + min_scale_y: d, + min_scale_z: m, + max_scale_x: J, + max_scale_y: x, + max_scale_z: U, + min_r: S, + min_g: T, + min_b: V, + max_r: P, + max_g: _, + max_b: X + } = y.properties; + if (!G || !h || !M || !l || !k || !R || !Y || !d || !m || !J || !x || !U || !S || !T || !V || !P || !_ || !X) + throw new Error("Missing PLY chunk properties"); + return g = !0, (aA, $) => { + const { + min_x: iA, + min_y: eA, + min_z: YA, + max_x: hA, + max_y: DA, + max_z: L, + min_scale_x: yA, + min_scale_y: gA, + min_scale_z: GA, + max_scale_x: lA, + max_scale_y: SA, + max_scale_z: MA, + min_r: bA, + min_g: NA, + min_b: ZA, + max_r: qA, + max_g: WA, + max_b: nA + } = $; + B.push({ + min_x: iA, + min_y: eA, + min_z: YA, + max_x: hA, + max_y: DA, + max_z: L, + min_scale_x: yA, + min_scale_y: gA, + min_scale_z: GA, + max_scale_x: lA, + max_scale_y: SA, + max_scale_z: MA, + min_r: bA, + min_g: NA, + min_b: ZA, + max_r: qA, + max_g: WA, + max_b: nA + }); + }; + } + function c(y) { + if (I && y.name === "sh") + return C = TI(y.properties), D(), n; + if (y.name !== "vertex") + return null; + const { packed_position: G, packed_rotation: h, packed_scale: M, packed_color: l } = y.properties; + if (!G || !h || !M || !l) + throw new Error( + "Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color" + ); + const k = Math.sqrt(2); + return (R, Y) => { + const d = B[R >>> 8]; + if (d == null) + throw new Error("Missing PLY chunk"); + const { + min_x: m, + min_y: J, + min_z: x, + max_x: U, + max_y: S, + max_z: T, + min_scale_x: V, + min_scale_y: P, + min_scale_z: _, + max_scale_x: X, + max_scale_y: aA, + max_scale_z: $, + min_r: iA, + min_g: eA, + min_b: YA, + max_r: hA, + max_g: DA, + max_b: L + } = d, { packed_position: yA, packed_rotation: gA, packed_scale: GA, packed_color: lA } = Y, SA = (yA >>> 21 & 2047) / 2047 * (U - m) + m, MA = (yA >>> 11 & 1023) / 1023 * (S - J) + J, bA = (yA & 2047) / 2047 * (T - x) + x, NA = ((gA >>> 20 & 1023) / 1023 - 0.5) * k, ZA = ((gA >>> 10 & 1023) / 1023 - 0.5) * k, qA = ((gA & 1023) / 1023 - 0.5) * k, WA = Math.sqrt(Math.max(0, 1 - NA * NA - ZA * ZA - qA * qA)), nA = gA >>> 30, PA = nA === 0 ? NA : nA === 1 ? WA : ZA, ht = nA <= 1 ? ZA : nA === 2 ? WA : qA, yt = nA <= 2 ? qA : WA, Gt = nA === 0 ? WA : NA, lt = Math.exp( + (GA >>> 21 & 2047) / 2047 * (X - V) + V + ), Mt = Math.exp( + (GA >>> 11 & 1023) / 1023 * (aA - P) + P + ), Nt = Math.exp( + (GA & 2047) / 2047 * ($ - _) + _ + ), kt = (lA >>> 24 & 255) / 255 * (hA - iA) + iA, Ft = (lA >>> 16 & 255) / 255 * (DA - eA) + eA, Rt = (lA >>> 8 & 255) / 255 * (L - YA) + YA, Jt = (lA & 255) / 255; + A( + R, + SA, + MA, + bA, + lt, + Mt, + Nt, + PA, + ht, + yt, + Gt, + Jt, + kt, + Ft, + Rt + ); + }; + } + const r = (y) => { + if (y.name === "chunk" && this.comments.some( + (DA) => DA.toLowerCase().includes("supersplat") + )) + return w(y); + if (g) + return c(y); + if (y.name !== "vertex") + return null; + const { + x: G, + y: h, + z: M, + scale_0: l, + scale_1: k, + scale_2: R, + rot_0: Y, + rot_1: d, + rot_2: m, + rot_3: J, + opacity: x, + f_dc_0: U, + f_dc_1: S, + f_dc_2: T, + red: V, + green: P, + blue: _, + alpha: X + } = y.properties; + if (!G || !h || !M) + throw new Error("Missing PLY properties: x, y, z"); + const aA = l && k && R, $ = Y && d && m && J, iA = X != null ? qQ[X.type] : 1, eA = V != null ? qQ[V.type] : 1, YA = P != null ? qQ[P.type] : 1, hA = _ != null ? qQ[_.type] : 1; + return C = TI(y.properties), D(), (DA, L) => { + const yA = aA ? Math.exp(L.scale_0) : cQ.defaultPointScale, gA = aA ? Math.exp(L.scale_1) : cQ.defaultPointScale, GA = aA ? Math.exp(L.scale_2) : cQ.defaultPointScale, lA = $ ? L.rot_1 : 0, SA = $ ? L.rot_2 : 0, MA = $ ? L.rot_3 : 0, bA = $ ? L.rot_0 : 1, NA = x != null ? 1 / (1 + Math.exp(-L.opacity)) : X != null ? L.alpha / iA : 1, ZA = U != null ? L.f_dc_0 * KQ + 0.5 : V != null ? L.red / eA : 1, qA = S != null ? L.f_dc_1 * KQ + 0.5 : P != null ? L.green / YA : 1, WA = T != null ? L.f_dc_2 * KQ + 0.5 : _ != null ? L.blue / hA : 1; + if (A( + DA, + L.x, + L.y, + L.z, + yA, + gA, + GA, + lA, + SA, + MA, + bA, + NA, + ZA, + qA, + WA + ), I && o) { + if (o) + for (const [nA, PA] of E.entries()) + o[nA] = L[PA]; + if (a) + for (const [nA, PA] of t.entries()) + a[nA] = L[PA]; + if (i) + for (const [nA, PA] of s.entries()) + i[nA] = L[PA]; + I(DA, o, a, i); + } + }; + }; + this.parseData(r); + } + // Inject RGBA values into original PLY file, which can be used to modify + // the color/opacity of the Gsplats and write out the modified PLY file. + injectRgba(A) { + let I = 0; + const g = this.data; + if (g == null) + throw new Error("No parsed data"); + if (A.length !== this.numSplats * 4) + throw new Error("Invalid RGBA array length"); + for (const B in this.elements) { + const C = this.elements[B], { count: E, properties: t } = C, s = []; + let o = 0; + const a = B === "vertex"; + if (a) { + for (const i of ["opacity", "f_dc_0", "f_dc_1", "f_dc_2"]) + if (!t[i] || t[i].type !== "float") + throw new Error(`Can't injectRgba due to property: ${i}`); + } + for (const [i, D] of Object.entries(t)) + if (D.isList) + s.push(() => { + const n = ZQ[D.countType]( + g, + I, + this.littleEndian + ); + I += aQ[D.countType], I += n * aQ[D.type]; + }); + else { + if (a) + if (i === "f_dc_0" || i === "f_dc_1" || i === "f_dc_2") { + const n = Number.parseInt( + i.slice(5) + ); + s.push(() => { + const w = (A[o + n] / 255 - 0.5) / KQ; + vI[D.type]( + g, + I, + this.littleEndian, + w + ); + }); + } else i === "opacity" && s.push(() => { + const n = Math.max( + -100, + Math.min( + 100, + -Math.log(1 / (A[o + 3] / 255) - 1) + ) + ); + vI[D.type]( + g, + I, + this.littleEndian, + n + ); + }); + s.push(() => { + I += aQ[D.type]; + }); + } + for (let i = 0; i < E; i++) { + for (const D of s) + D(); + a && (o += 4); + } + } + } +}; +cQ.defaultPointScale = 1e-3; +let kI = cQ; +const KQ = 0.28209479177387814, ZQ = { + char: (Q, A, I) => Q.getInt8(A), + uchar: (Q, A, I) => Q.getUint8(A), + short: (Q, A, I) => Q.getInt16(A, I), + ushort: (Q, A, I) => Q.getUint16(A, I), + int: (Q, A, I) => Q.getInt32(A, I), + uint: (Q, A, I) => Q.getUint32(A, I), + float: (Q, A, I) => Q.getFloat32(A, I), + double: (Q, A, I) => Q.getFloat64(A, I) +}, vI = { + char: (Q, A, I, g) => { + Q.setInt8(A, g); + }, + uchar: (Q, A, I, g) => { + Q.setUint8(A, g); + }, + short: (Q, A, I, g) => { + Q.setInt16(A, g, I); + }, + ushort: (Q, A, I, g) => { + Q.setUint16(A, g, I); + }, + int: (Q, A, I, g) => { + Q.setInt32(A, g, I); + }, + uint: (Q, A, I, g) => { + Q.setUint32(A, g, I); + }, + float: (Q, A, I, g) => { + Q.setFloat32(A, g, I); + }, + double: (Q, A, I, g) => { + Q.setFloat64(A, g, I); + } +}, aQ = { + char: 1, + uchar: 1, + short: 2, + ushort: 2, + int: 4, + uint: 4, + float: 4, + double: 8 +}, qQ = { + char: 127, + uchar: 255, + short: 32767, + ushort: 65535, + int: 2147483647, + uint: 4294967295, + float: 1, + double: 1 +}, Ye = { + 0: 0, + 9: 1, + 24: 2, + 45: 3 +}, de = { + 0: 0, + 1: 9, + 2: 24, + 3: 45 +}; +function TI(Q) { + let A = 0; + for (; Q[`f_rest_${A}`]; ) + A += 1; + const I = Ye[A]; + if (I == null) + throw new Error(`Unsupported number of SH coefficients: ${A}`); + return I; +} +const tt = '(function(){"use strict";let S;function OQ(g){const A=S.__externref_table_alloc();return S.__wbindgen_export_2.set(A,g),A}function vQ(g,A){try{return g.apply(this,A)}catch(Q){const I=OQ(Q);S.__wbindgen_exn_store(I)}}function XA(g){const A=typeof g;if(A=="number"||A=="boolean"||g==null)return`${g}`;if(A=="string")return`"${g}"`;if(A=="symbol"){const B=g.description;return B==null?"Symbol":`Symbol(${B})`}if(A=="function"){const B=g.name;return typeof B=="string"&&B.length>0?`Function(${B})`:"Function"}if(Array.isArray(g)){const B=g.length;let C="[";B>0&&(C+=XA(g[0]));for(let E=1;E1)I=Q[1];else return toString.call(g);if(I=="Object")try{return"Object("+JSON.stringify(g)+")"}catch{return"Object"}return g instanceof Error?`${g.name}: ${g.message}\n${g.stack}`:I}let jA=0,LA=null;function qA(){return(LA===null||LA.byteLength===0)&&(LA=new Uint8Array(S.memory.buffer)),LA}const xA=typeof TextEncoder<"u"?new TextEncoder("utf-8"):{encode:()=>{throw Error("TextEncoder not available")}},PQ=typeof xA.encodeInto=="function"?function(g,A){return xA.encodeInto(g,A)}:function(g,A){const Q=xA.encode(g);return A.set(Q),{read:g.length,written:Q.length}};function _Q(g,A,Q){if(Q===void 0){const i=xA.encode(g),D=A(i.length,1)>>>0;return qA().subarray(D,D+i.length).set(i),jA=i.length,D}let I=g.length,B=A(I,1)>>>0;const C=qA();let E=0;for(;E127)break;C[B+E]=i}if(E!==I){E!==0&&(g=g.slice(E)),B=Q(B,I,I=E+g.length*3,1)>>>0;const i=qA().subarray(B+E,B+I),D=PQ(g,i);E+=D.written,B=Q(B,I,E,1)>>>0}return jA=E,B}let NA=null;function kQ(){return(NA===null||NA.buffer.detached===!0||NA.buffer.detached===void 0&&NA.buffer!==S.memory.buffer)&&(NA=new DataView(S.memory.buffer)),NA}const JQ=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};typeof TextDecoder<"u"&&JQ.decode();function RQ(g,A){return g=g>>>0,JQ.decode(qA().subarray(g,g+A))}function $Q(g,A,Q){return S.decode_wlg(g,A,Q)}function AI(g,A,Q,I){return S.old_sort_splats(g,A,Q,I)>>>0}function QI(g,A,Q){return S.sort_splats(g,A,Q)>>>0}async function II(g,A){if(typeof Response=="function"&&g instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(g,A)}catch(I){if(g.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n",I);else throw I}const Q=await g.arrayBuffer();return await WebAssembly.instantiate(Q,A)}else{const Q=await WebAssembly.instantiate(g,A);return Q instanceof WebAssembly.Instance?{instance:Q,module:g}:Q}}function BI(){const g={};return g.wbg={},g.wbg.__wbg_buffer_09165b52af8c5237=function(A){return A.buffer},g.wbg.__wbg_buffer_609cc3eee51ed158=function(A){return A.buffer},g.wbg.__wbg_get_b9b93047fe3cf45b=function(A,Q){return A[Q>>>0]},g.wbg.__wbg_instanceof_Uint8Array_17156bcf118086a9=function(A){let Q;try{Q=A instanceof Uint8Array}catch{Q=!1}return Q},g.wbg.__wbg_length_3b4f022188ae8db6=function(A){return A.length},g.wbg.__wbg_length_6ca527665d89694d=function(A){return A.length},g.wbg.__wbg_length_8cfd2c6409af88ad=function(A){return A.length},g.wbg.__wbg_length_a446193dc22c12f8=function(A){return A.length},g.wbg.__wbg_length_e2d2a49132c1b256=function(A){return A.length},g.wbg.__wbg_new_405e22f390576ce2=function(){return new Object},g.wbg.__wbg_new_9fee97a409b32b68=function(A){return new Uint16Array(A)},g.wbg.__wbg_new_a12002a7f91c75be=function(A){return new Uint8Array(A)},g.wbg.__wbg_new_e3b321dcfef89fc7=function(A){return new Uint32Array(A)},g.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354=function(A,Q,I){return new Float32Array(A,Q>>>0,I>>>0)},g.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212=function(A,Q,I){return new Uint32Array(A,Q>>>0,I>>>0)},g.wbg.__wbg_newwithlength_5a5efe313cfd59f1=function(A){return new Float32Array(A>>>0)},g.wbg.__wbg_newwithlength_bd3de93688d68fbc=function(A){return new Uint32Array(A>>>0)},g.wbg.__wbg_set_10bad9bee0e9c58b=function(A,Q,I){A.set(Q,I>>>0)},g.wbg.__wbg_set_65595bdd868b3009=function(A,Q,I){A.set(Q,I>>>0)},g.wbg.__wbg_set_bb8cecf6a62b9f46=function(){return vQ(function(A,Q,I){return Reflect.set(A,Q,I)},arguments)},g.wbg.__wbg_set_d23661d19148b229=function(A,Q,I){A.set(Q,I>>>0)},g.wbg.__wbg_set_f4f1f0daa30696fc=function(A,Q,I){A.set(Q,I>>>0)},g.wbg.__wbg_subarray_3aaeec89bb2544f0=function(A,Q,I){return A.subarray(Q>>>0,I>>>0)},g.wbg.__wbg_subarray_769e1e0f81bb259b=function(A,Q,I){return A.subarray(Q>>>0,I>>>0)},g.wbg.__wbindgen_debug_string=function(A,Q){const I=XA(Q),B=_Q(I,S.__wbindgen_malloc,S.__wbindgen_realloc),C=jA;kQ().setInt32(A+4*1,C,!0),kQ().setInt32(A+4*0,B,!0)},g.wbg.__wbindgen_init_externref_table=function(){const A=S.__wbindgen_export_2,Q=A.grow(4);A.set(0,void 0),A.set(Q+0,void 0),A.set(Q+1,null),A.set(Q+2,!0),A.set(Q+3,!1)},g.wbg.__wbindgen_memory=function(){return S.memory},g.wbg.__wbindgen_number_new=function(A){return A},g.wbg.__wbindgen_string_new=function(A,Q){return RQ(A,Q)},g.wbg.__wbindgen_throw=function(A,Q){throw new Error(RQ(A,Q))},g}function gI(g,A){return S=g.exports,nQ.__wbindgen_wasm_module=A,NA=null,LA=null,S.__wbindgen_start(),S}async function nQ(g){if(S!==void 0)return S;typeof g<"u"&&(Object.getPrototypeOf(g)===Object.prototype?{module_or_path:g}=g:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),typeof g>"u"&&(g=new URL("data:application/wasm;base64,AGFzbQEAAAABtgItYAJ/fwF/YAJ/fwBgA39/fwF/YAF/AGABfwF/YAN/f38AYAV/f39/fwBgBH9/f38AYAFvAX9gAW8Bb2ADb39/AW9gBX9/f39/AX9gA29vfwBgAABgA39+fgBgA39+fgF/YAd/f39/f39/AX9gBn9/f39/fwBgAX0BfWAEf39/fwF/YAABb2ABfwFvYAZ/f39/f38Bf2AAAX9gC39/f39/f39/f39/AX9gAn9/AW9gAXwBb2ACb38Bb2ADb29vAX9gAn9vAGAHf39/f39/fwBgAn9/AX5gAn9+AX9gAn9+AGALfX19fX19fX1/b38Bb2ABfwF9YAV/f35/fwBgBH9+f38AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AYAR/f29vAX9gA39vbwF/YAJ9fQF9ArcIHgN3YmcVX193YmluZGdlbl9zdHJpbmdfbmV3ABkDd2JnFV9fd2JpbmRnZW5fbnVtYmVyX25ldwAaA3diZxpfX3diZ19nZXRfYjliOTMwNDdmZTNjZjQ1YgAbA3diZx1fX3diZ19sZW5ndGhfZTJkMmE0OTEzMmMxYjI1NgAIA3diZxpfX3diZ19uZXdfNDA1ZTIyZjM5MDU3NmNlMgAUA3diZx1fX3diZ19idWZmZXJfNjA5Y2MzZWVlNTFlZDE1OAAJA3diZxpfX3diZ19uZXdfYTEyMDAyYTdmOTFjNzViZQAJA3diZxpfX3diZ19zZXRfNjU1OTViZGQ4NjhiMzAwOQAMA3diZx1fX3diZ19sZW5ndGhfYTQ0NjE5M2RjMjJjMTJmOAAIA3diZxpfX3diZ19uZXdfOWZlZTk3YTQwOWIzMmI2OAAJA3diZxpfX3diZ19zZXRfZjRmMWYwZGFhMzA2OTZmYwAMA3diZx1fX3diZ19sZW5ndGhfOGNmZDJjNjQwOWFmODhhZAAIA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9mMWRlYWQ0NGQxZmM3MjEyAAoDd2JnGl9fd2JnX25ld19lM2IzMjFkY2ZlZjg5ZmM3AAkDd2JnGl9fd2JnX3NldF9kMjM2NjFkMTkxNDhiMjI5AAwDd2JnHV9fd2JnX2xlbmd0aF82Y2E1Mjc2NjVkODk2OTRkAAgDd2JnMV9fd2JnX25ld3dpdGhi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CwJAIAAoAhAiAkUNAEGousIAQQggAhDVBEUNAEEBDAILIAFBATsBJCABIAQ2AiAgAUEANgIcIAFBAToAGCABQd8ANgIUIAEgBDYCECABQQA2AgwgASAENgIIIAEgAzYCBCABQd8ANgIAIAFBKGogARBQAn8gASgCKEUEQAJAIAEtACUNACABQQE6ACUCQCABLQAkQQFGBEAgASgCICEFIAEoAhwhBAwBCyABKAIgIgUgASgCHCIERg0BCyABKAIEIARqIQMgBSAEawwCC0GwusIAEK4EAAsgASgCHCEEIAEgASgCMDYCHCADIARqIQMgASgCLCAEawshBAJAIAIEQCADIAQgAhDVBA0BCyABQcgAaiABQSBqKQIANwMAIAFBQGsgAUEYaikCADcDACABQThqIAFBEGopAgA3AwAgAUEwaiABQQhqKQIANwMAIAEgASkCADcDKAJAIAEtAE0NACACIQMDQCABKAIsIQUgAUHUAGogAUEoahBQAn8gASgCVEUEQCABLQBNDQMgAUEBOgBNAkAgAS0ATEEBRgRAIAEoAkghBSABKAJEIQQMAQsgASgCSCIFIAEoAkQiBEYNBAsgASgCLCAEaiEGIAUgBGsMAQsgASgCRCEEIAEgASgCXDYCRCAEIAVqIQYgASgCWCAEawshBAJAIANFBEBBACEDDAELQbm2wgBBASADENUEDQMgACgCECICRQRAQQAhAkEAIQMMAQsgAiEDIAYgBCACENUEDQMLIAEtAE1FDQALCyACRQ0BQcC6wgBBAiACENUERQ0BC0EBDAELAkAgACgCECICRQ0AQcK6wgBBAyACENUERQ0AQQEMAQsCQAJAAkAgACgCACIDRQRAQQAhAwwBC0EAIQIDQAJAIAAoAggiBCAAKAIETw0AIAMgBGotAABBxQBHDQAgACAEQQFqNgIIDAILAkAgAkUNACAAKAIQIgNFDQBB9bnCAEECIAMQ1QRFDQBBAQwFCyAAECcNAiACQQFrIQIgACgCACIDDQALQQAhAwsgACgCECIEBEBBAUH1s8IAQQEgBBDVBA0DGiAAKAIAIQMLIANFDQEgACgCCCICIAAoAgRPDQEgAiADai0AAEH1AEcNASAAIAJBAWo2AghBAAwCC0EBDAELAkAgACgCECICRQ0AQcW6wgBBBCACENUERQ0AQQEMAQsgABAnCyAB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AWogBiARGyADa2whAwwDCyABIApBjIHCABCtAgALQZyBwgBBKUHIgcIAEO0CAAtBoP/BAEEXQZyAwgAQ7QIACyAPIAZBAWo2AgAgAkEEaiAJOgAAIAIgAzYCACACQQhqIQIgBCAFQQFqIgVHDQALCyAAQYWAgIB4NgIADwsgBUEBaiEFIAMoAgAhCSADQQRqIQMgCUEATA0ACyAFQQFrIQxBACEDA0ACQCACIAZJBEAgA0EBaiEDIAsgAkEDdGogDDoABQNAIAIgDWogDnEiAiAETw0ACwwBCyACIAZB2IHCABCtAgALIAMgCUcNAAsMAAsAC9IHAQN/AkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAOCgAHBwECAwQHBwUHCwJAAkACQAJAAkACQCAALQAEDgcADAEMAgMEDAsgAC0ACEEDRw0LIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQQgASADIAIoAggQpwQMBAsgAC0ACEEDRw0KIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQMgASADIAIoAggQpwQMAwsgAC0ACEEDRw0JIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQIgASADIAIoAggQpwQMAgsgAC0ACEEDRw0IIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQEgASADIAIoAggQpwQMAQsgAC0ACEEDRw0HIAAoAgwiACgCACEBIABBBGooAgAiAigCACIDBEAgASADEQMACyACKAIEIgNFDQAgASADIAIoAggQpwQLIABBDEEEEKcEDwsCQAJAIAAtAAQOAgcBAAsgACgCCCIBQfv///8HaiICQQ1NIAJBAkdxDQYgAUGEgICAeEoNBSABQYOAgIB4Rw0GDAULIAAoAggiAUGEgICAeEogAUGDgICAeEZyDQQMBQsgAC0ABEEDRw0EDAULAkACQEEDIAAoAgQiAUEHayICIAJBA08bQQJrDgIBAAULAkACQAJAIAEOBgAHAQcHAgcLIAAtAAhBA0cNBgwICyAAKAIIIgFB7f///wdqIgJBCk0gAkEDR3ENBSABRSABQfv///8H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wQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA4hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwICyACIAA2AgQgAkEBNgIMIAJB8KfBADYCCCACQgE3AhQgAiACQQRqrUKAgICAoDeENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAcLIAIgAEEEajYCBCACQQE2AgwgAkHwp8EANgIIIAJCATcCFCACIAJBBGqtQoCAgICgOIQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMBgsgASgCHEHFusEAQTkgASgCICgCDBECAAwFCyACIABBBGo2AgQgAkECNgIMIAJBqLvBADYCCCACQgE3AhQgAiACQQRqrUKAgICA8DWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAQLIAIgAEEEajYCACACIABBCGo2AgQgAkEDNgIMIAJB6LvBADYCCCACQgI3AhQgAkKAgICA8DUiBCACrYQ3AyggAiAEIAJBBGqthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwDCyACIABBBGo2AgQgAkECNgIMIAJB8LzBADYCCCACQgE3AhQgAiACQQRqrUKAgICAsDiENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAILIAIgAEEEajYCACACIABBCGo2AgQgAkECNgIMIAJBsL3BADYCCCACQgI3AhQgAkKAgICAwDgiBCACQQRqrYQ3AyggAiAEIAKthDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAjYCDCACQfS9wQA2AgggAkICNwIUIAJCgICAgPA1IgQgAkEEaq2ENwMoIAIgBCACrYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAuXBgEIfyMAQTBrIgEkAAJAAn8CQAJAAkAgACgCACIFBEAgACgCCCIEIAQgACgCBCIHIAQgB0sbayEIIAUhAwNAIAIgCGpFDQMgACACIARqQQFqNgIIIAJBAWohAiADIARqIANBAWohAy0AACIGQTBrQf8BcUEKSSAGQeEAa0H/AXFBBklyDQALIAZB3wBHDQIgAiAEakEBayEGAkAgBARAIAQgB08EQCAGIAdLDQgMAgsgBiAHSw0HIAQgBWosAABBv39KDQEMBwsgBiAHSw0GCyACQQFrIgJBAXFFBEAgAUKAgICAIDcCGCABIAMgBGpBAWsiAzYCFCABIAI2AhAgASAEIAVqIgU2AgwDQCABQQxqECYiBEGAgMQASQ0ACyAEQYGAxABGDQILIAAoAhAiA0UNA0HEucIAQRAgAxDVBEUNA0EBDAQLQQAgACgCECIARQ0DGkHtucIAQQEgABDVBAwDC0EAIAAoAhAiAEUNAhpBASAAQSIQ6wMNAhogAUKAgICAIDcCGCABIAM2AhQgASACNgIQIAEgBTYCDCABQQxqECYiAkGBgMQARwRAIAFBKGohBANAAkACQAJAAkAgAkGAgMQARwRAIAJBJ0YNASABQSBqIAIQPCABLQAgQYABRw0CQYABIQMDQAJAIANBgAFHBEAgAS0AKiIFIAEtACtPDQcgASAFQQFqOgAqIAFBIGogBWotAAAhAgwBC0EAIQMgBEEANgIAIAEoAiQhAiABQgA3AyALIAAgAhDrA0UNAAsMAwtBgLDCAEErIAFBIGpB8K/CAEHQrsIAEKACAAsgAEEnEOsDRQ0CDAELIAEtACoiAiABLQArIgMgAiADSxshAwNAIAIgA0YNAiABQSBqIAJqIQUgAkEBaiECIAAgBS0AABDrA0UNAAsLQQEMBQsgAUEMahAmIgJBgYDEAEcNAAsLIABBIhDrAwwCCyAAKAIQIgNFDQBBxLnCAEEQIAMQ1QRFDQBBAQwBCyAAQQA6AAQgAEEANgIAQQALIAFBMGokAA8LIAUgByAEIAZB9LjCABDsAwALrQUCBn8CfiAFQf8BcSIKIQcCQCABKAIQIgkgAS0AFCIGaiIIQQBKBEACQCAHIAhNBEAgCUEATCAGIApPcg0BA0AgCUEBayIIQQN2IQdBwAAgBkEHaiILQXhxayEFAkAgCEE/TQRAIAEgByAFEIgBIAEoAhAhCSABLQAUIQYMAQsCQCABKAIEIgggByALQfgBcUEDdmpBB2siB08EQCAIIAdrIghBB0sNAUEIIAhBxN7BABCrBAALIAcgCEHU3sEAEKoEAAsgASAFIAZqIgY6ABQgASAJIAVB/wFxayIJNgIQIAEgASgCACAHaikAADcDCAsgBkH/AXEgCk8NAiAJQQBKDQALDAELAn5CACACQf8BcSIFRQ0AGiAFIAZNBEAgASAGIAJrIgU6ABRCfyACrYZCf4UgASkDCCAFQT9xrYiDDAELIAEgAhBbCyENAkAgA0H/AXEiBUUNACAFIAEtABQiAksEQCABIAMQWyEMDAELIAEgAiADayICOgAUQn8gA62GQn+FIAEpAwggAkE/ca2IgyEMCyAAAn5CACAEQf8BcSICRQ0AGiACIAEtABQiA00EQCABIAMgBGsiAjoAFEJ/IASthkJ/hSABKQMIIAJBP3GtiIMMAQsgASAEEFsLNwMQDAILIAJB/wFxBH4gASAGIAJrIgY6ABRCfyACrYZCf4UgASkDCCAGQT9xrYiDBUIACyENIANB/wFxBEAgASAGIANrIgY6ABRCfyADrYZCf4UgASkDCCAGQT9xrYiDIQwLIAAgBEH/AXEEfiABIAYgBGsiAjoAFEJ/IASthkJ/hSABKQMIIAJBP3GtiIMFQgALNwMQDAELIABCADcDACABIAkgB2s2AhAgAEEIakIANwMAIABBEGpCADcDAA8LIAAgDDcDCCAAIA03AwAL7AUBB38CfyABRQRAIAAoAhQhCEEtIQogBUEBagwBC0ErQYCAxAAgACgCFCIIQQFxIgEbIQogASAFagshBwJAIAhBBHFFBEBBACECDAELIANBEE8EQCACIAMQLyAHaiEHDAELIANFDQAgA0EDcSEJAkAgA0EESQRAQQAhAQwBCyADQQxxIQxBACEBA0AgASACIAZqIgssAABBv39KaiALQQFqLAAAQb9/SmogC0ECaiwAAEG/f0pqIAtBA2osAABBv39KaiEBIAwgBkEEaiIGRw0ACwsgCQRAIAIgBmohBgNAIAEgBiwAAEG/f0pqIQEgBkEBaiEGIAlBAWsiCQ0ACwsgASAHaiEHCyAAKAIARQRAIAAoAhwiASAAKAIgIgAgCiACIAMQ/QIEQEEBDwsgASAEIAUgACgCDBECAA8LAkACQAJAIAcgACgCBCIGTwRAIAAoAhwiASAAKAIgIgAgCiACIAMQ/QJFDQFBAQ8LIAhBCHFFDQEgACgCECELIABBMDYCECAALQAYIQxBASEBIABBAToAGCAAKAIcIgggACgCICIJIAogAiADEP0CDQIgBiAHa0EBaiEBAkADQCABQQFrIgFFDQEgCEEwIAkoAhARAABFDQALQQEPCyAIIAQgBSAJKAIMEQIABEBBAQ8LIAAgDDoAGCAAIAs2AhBBAA8LIAEgBCAFIAAoAgwRAgAhAQwBCyAGIAdrIQcCQAJAAkBBASAALQAYIgEgAUEDRhsiAUEBaw4CAAECCyAHIQFBACEHDAELIAdBAXYhASAHQQFqQQF2IQcLIAFBAWohASAAKAIQIQggACgCICEGIAAoAhwhAAJAA0AgAUEBayIBRQ0BIAAgCCAGKAIQEQAARQ0AC0EBDwtBASEBIAAgBiAKIAIgAxD9Ag0AIAAgBCAFIAYoAgwRAgANAEEAIQEDQCABIAdGBEBBAA8LIAFBAWohASAAIAggBigCEBEAAEUNAAsgAUEBayAHSQ8LIAELrgUBB38CQCAAKAIAIgkgACgCCCIEcgRAAkAgBEEBcUUNACABIAJqIQcCQCAAKAIMIgZFBEAgASEEDAELIAEhBANAIAQiAyAHRg0CAn8gA0EBaiADLAAAIghBAE4NABogA0ECaiAIQWBJDQAaIANBA2ogCEFwSQ0AGiADQQRqCyIEIANrIAVqIQUgBkEBayIGDQALCyAEIAdGDQAgBCwAABogBSACAn8CQCAFRQ0AIAIgBU0EQCACIAVGDQFBAAwCCyABIAVqLAAAQUBODQBBAAwBCyABCyIDGyECIAMgASADGyEBCyAJRQ0BIAAoAgQhBwJAIAJBEE8EQCABIAIQLyEDDAELIAJFBEBBACEDDAELIAJBA3EhBgJAIAJBBEkEQEEAIQNBACEFDAELIAJBDHEhCEEAIQNBACEFA0AgAyABIAVqIgQsAABBv39KaiAEQQFqLAAAQb9/SmogBEECaiwAAEG/f0pqIARBA2osAABBv39KaiEDIAggBUEEaiIFRw0ACwsgBkUNACABIAVqIQQDQCADIAQsAABBv39KaiEDIARBAWohBCAGQQFrIgYNAAsLAkAgAyAHSQRAIAcgA2shBgJAAkACQCAALQAYIgRBACAEQQNHGyIDQQFrDgIAAQILIAYhA0EAIQYMAQsgBkEBdiEDIAZBAWpBAXYhBgsgA0EBaiEDIAAoAhAhBSAAKAIgIQQgACgCHCEAA0AgA0EBayIDRQ0CIAAgBSAEKAIQEQAARQ0AC0EBDwsMAgsgACABIAIgBCgCDBECAARAQQEPC0EAIQMDQCADIAZGBEBBAA8LIANBAWohAyAAIAUgBCgCEBEAAEUNAAsgA0EBayAGSQ8LIAAoAhwgASACIAAoAiAoAgwRAgAPCyAAKAIcIAEgAiAAKAIgKAIMEQIAC7gFAgh/AX4CQCABKAIIIgIgASgCBCIETw0AIAEoAgAgAmotAABB9QBHDQBBASEHIAEgAkEBaiICNgIICwJAAkAgAiAETw0BIAEoAgAiBSACai0AAEEwayIDQf8BcSIGQQlLDQEgASACQQFqIgI2AgggBkUEQEEAIQMMAQsgAiAEIAIgBEsbIQYgA0H/AXEhAwNAIAIgBkYNASACIAVqLQAAQTBrQf8BcSIIQQlLDQEgASACQQFqIgI2AgggA61CCn4iCkIgiFAEQCAIIAqnIghqIgMgCE8NAQsLDAELAkAgAiAETw0AIAIgBWotAABB3wBHDQAgASACQQFqIgI2AggLAkACQAJAAkAgAiACIANqIgZNBEAgASAGNgIIIAQgBkkNBSACRQ0CIAIgBEkNAQwCCwwECyACIAVqLAAAQb9/TA0BCyAGRSAEIAZNckUEQCAFIAZqLAAAQb9/TA0BCyACIAVqIQQgBw0BIABCATcCCCAAIAM2AgQgACAENgIADwsgBSAEIAIgBkGEucIAEOwDAAtBACEHQQAgA2shASAFIAZqIgZBAWshCEEAIQICQAJAAn8DQCABIAJGBEAgBCEBQQEMAgsgAiAIaiACQQFrIgUhAi0AAEHfAEcNAAsgAyAFaiEHAkACQEEAIANrIAVGDQAgAyAHTQRAIAUNBEEAIQIgA0F/cyAFRw0BDAILIAUgBmosAABBv39MDQMLIAMgB0EBaiIBTQRAIAMhAiAFQX9GDQEMBAsgBSAGakEBaiwAAEG/f0wNAyABIQILIAIgBGohASADIAJrIQMgBAshAiADRQRADAMLIAAgAzYCDCAAIAE2AgggACAHNgIEIAAgAjYCAA8LIAQgA0EAIAdBlLnCABDsAwALIAQgAyABIANBpLnCABDsAwALIABBADYCACAAQQA6AAQL4gUCB38CfiMAQSBrIgQkAAJ/AkACQCAAKAIAIgNFDQAgACgCCCICIAAoAgQiBU8NACACIANqIgEtAABBwgBGBEAgACACQQFqIgE2AggCQAJAAkACQAJAIAKtAn4CQCABIAVJBEAgASADai0AAEHfAEYNAQsgASAFIAEgBUsbIQcDQAJAIAEgBUkEQCABIANqLQAAQd8ARg0BCyABIAdGDQQCQCABIANqLQAAIgJBMGsiBkH/AXFBCkkNACACQeEAa0H/AXFBGk8EQCACQcEAa0H/AXFBGk8NBiACQR1rIQYMAQsgAkHXAGshBgsgACABQQFqIgE2AgggBCAIEJsCIAQpAwhCAFINBCAEKQMAIgkgBq1C/wGDfCIIIAlaDQEMBAsLIAAgAUEBajYCCCAIQn9RDQIgCEIBfAwBCyAAIAJBAmo2AghCAAsiCFgNAEEBIQEgACgCECECIAAoAgxBAWoiA0H0A0sNASACRQ0EIARBGGoiAiAAQQhqIgEpAgA3AwAgACADNgIMIAEgCD4CACAEIAApAgA3AxAgABA4IAEgAikDADcCACAAIAQpAxA3AgBB/wFxDAgLQQAhASAAKAIQIgJFDQJBxLnCAEEQIAIQ1QQNAQwCCyACRQ0BQdS5wgBBGSACENUERQ0BC0ECDAULIAAgAToABCAAQQA2AgALQQAMAwsgAS0AAEHJAEcNACAAIAJBAWo2AgggAEEAEB9FDQFBAgwCC0ECQQAgAEEAEB8bDAELAkAgACgCECIBRQ0AQfizwgBBASABENUERQ0AQQIMAQtBASAAKAIAIgFFDQAaQQAhAgJAA0ACQCAAKAIIIgMgACgCBE8NACABIANqLQAAQcUARw0AIAAgA0EBajYCCEEBDAMLAkAgAkUNACAAKAIQIgNFDQBBAkH1ucIAQQIgAxDVBA0DGgsgABBZDQEgAkEBayECIAAoAgAiAQ0AC0EBDAELQQILIARBIGokAAvPBgEDfyMAQSBrIgMkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDigGAQEBAQEBAQECBAEBAwEBAQEBAQEBAQEBAQEBAQEBAQEBCAEBAQEHAAsgAUHcAEYNBAsgAkEBcUUgAUGABklyDQcgARBcRQ0HIANBADoACiADQQA7AQggAyABQRR2QfzAwgBqLQAAOgALIAMgAUEEdkEPcUH8wMIAai0AADoADyADIAFBCHZBD3FB/MDCAGotAAA6AA4gAyABQQx2QQ9xQfzAwgBqLQAAOgANIAMgAUEQdkEPcUH8wMIAai0AADoADCABQQFyZ0ECdiICIANBCGoiBWoiBEH7ADoAACAEQQFrQfUAOgAAIAUgAkECayICakHcADoAACADQRBqIgQgAUEPcUH8wMIAai0AADoAACAAQQo6AAsgACACOgAKIAAgAykCCDcCACADQf0AOgARIABBCGogBC8BADsBAAwJCyAAQYAEOwEKIABCADcBAiAAQdzoATsBAAwICyAAQYAEOwEKIABCADcBAiAAQdzkATsBAAwHCyAAQYAEOwEKIABCADcBAiAAQdzcATsBAAwGCyAAQYAEOwEKIABCADcBAiAAQdy4ATsBAAwFCyAAQYAEOwEKIABCADcBAiAAQdzgADsBAAwECyACQYACcUUNASAAQYAEOwEKIABCADcBAiAAQdzOADsBAAwDCyACQYCABHENAQsgARC6AUUEQCADQQA6ABYgA0EAOwEUIAMgAUEUdkH8wMIAai0AADoAFyADIAFBBHZBD3FB/MDCAGotAAA6ABsgAyABQQh2QQ9xQfzAwgBqLQAAOgAaIAMgAUEMdkEPcUH8wMIAai0AADoAGSADIAFBEHZBD3FB/MDCAGotAAA6ABggAUEBcmdBAnYiAiADQRRqIgVqIgRB+wA6AAAgBEEBa0H1ADoAACAFIAJBAmsiAmpB3AA6AAAgA0EcaiIEIAFBD3FB/MDCAGotAAA6AAAgAEEKOgALIAAgAjoACiAAIAMpAhQ3AgAgA0H9ADoAHSAAQQhqIAQvAQA7AQAMAgsgACABNgIEIABBgAE6AAAMAQsgAEGABDsBCiAAQgA3AQIgAEHcxAA7AQALIANBIGokAAvpBQEBfyMAQTBrIgIkAAJ/AkACQAJAAkACQAJAAkACQCAALQAAQQFrDgcBAgMEBQYHAAsgAiAAQQRqNgIEIAJBATYCDCACQZSqwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA1hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwHCyACIABBBGo2AgQgAkEBNgIMIAJBuKrBADYCCCACQgE3AhQgAiACQQRqrUKAgICAkDaENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAYLIAIgAEEEajYCBCACQQE2AgwgAkHoqsEANgIIIAJCATcCFCACIAJBBGqtQoCAgICQNYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMBQsgAiAAQQFqNgIEIAJBATYCDCACQfCnwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgOA1hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwECyACIABBBGo2AgQgAkEBNgIMIAJBmKvBADYCCCACQgE3AhQgAiACQQRqrUKAgICAkDWENwMgIAIgAkEgajYCECABKAIcIAEoAiAgAkEIahBFDAMLIAIgAEEEajYCBCACQQE2AgwgAkHEq8EANgIIIAJCATcCFCACIAJBBGqtQoCAgICQNYQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEUMAgsgAiAAQQRqNgIEIAJBATYCDCACQfSrwQA2AgggAkIBNwIUIAIgAkEEaq1CgICAgJA1hDcDICACIAJBIGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AgAgAiAAQQhqNgIEIAJBAzYCDCACQbyswQA2AgggAkICNwIUIAIgAkEEaq1CgICAgIA2hDcDKCACIAKtQoCAgICQNoQ3AyAgAiACQSBqNgIQIAEoAhwgASgCICACQQhqEEULIAJBMGokAAuMBQEIfwJAIAJBEEkEQCAAIQMMAQsCQCAAQQAgAGtBA3EiBmoiBSAATQ0AIAAhAyABIQQgBgRAIAYhBwNAIAMgBC0AADoAACAEQQFqIQQgA0EBaiEDIAdBAWsiBw0ACwsgBkEBa0EHSQ0AA0AgAyAELQAAOgAAIANBAWogBEEBai0AADoAACADQQJqIARBAmotAAA6AAAgA0EDaiAEQQNqLQAAOgAAIANBBGogBEEEai0AADoAACADQQVqIARBBWotAAA6AAAgA0EGaiAEQQZqLQAAOgAAIANBB2ogBEEHai0AADoAACAEQQhqIQQgA0EIaiIDIAVHDQALCyAFIAIgBmsiB0F8cSIIaiEDAkAgASAGaiIEQQNxRQRAIAMgBU0NASAEIQEDQCAFIAEoAgA2AgAgAUEEaiEBIAVBBGoiBSADSQ0ACwwBCyADIAVNDQAgBEEDdCICQRhxIQYgBEF8cSIJQQRqIQFBACACa0EYcSEKIAkoAgAhAgNAIAUgAiAGdiABKAIAIgIgCnRyNgIAIAFBBGohASAFQQRqIgUgA0kNAAsLIAdBA3EhAiAEIAhqIQELAkAgAyACIANqIgZPDQAgAkEHcSIEBEADQCADIAEtAAA6AAAgAUEBaiEBIANBAWohAyAEQQFrIgQNAAsLIAJBAWtBB0kNAANAIAMgAS0AADoAACADQQFqIAFBAWotAAA6AAAgA0ECaiABQQJqLQAAOgAAIANBA2ogAUEDai0AADoAACADQQRqIAFBBGotAAA6AAAgA0EFaiABQQVqLQAAOgAAIANBBmogAUEGai0AADoAACADQQdqIAFBB2otAAA6AAAgAUEIaiEBIANBCGoiAyAGRw0ACwsgAAuzBgEEfyMAQSBrIgIkAAJAAkACQAJAAkACQAJAAkACQAJAIAEOKAAHBwcHBwcHBwEDBwcCBwcHBwcHBwcHBwcHBwcHBwcHBwcEBwcHBwUGCyAAQYAEOwEKIABCADcBAiAAQdzgADsBAAwICyAAQYAEOwEKIABCADcBAiAAQdzoATsBAAwHCyAAQYAEOwEKIABCADcBAiAAQdzkATsBAAwGCyAAQYAEOwEKIABCADcBAiAAQdzcATsBAAwFCyAAQYAEOwEKIABCADcBAiAAQdzEADsBAAwECyAAQYAEOwEKIABCADcBAiAAQdzOADsBAAwDCyABQdwARg0BCwJAIAFB/wVNDQAgARBcRQ0AIAJBADoACiACQQA7AQggAiABQRR2QeCvwgBqLQAAOgALIAIgAUEEdkEPcUHgr8IAai0AADoADyACIAFBCHZBD3FB4K/CAGotAAA6AA4gAiABQQx2QQ9xQeCvwgBqLQAAOgANIAIgAUEQdkEPcUHgr8IAai0AADoADCABQQFyZ0ECdiIDIAJBCGoiBWoiBEH7ADoAACAEQQFrQfUAOgAAIAUgA0ECayIDakHcADoAACACQRBqIgQgAUEPcUHgr8IAai0AADoAACAAQQo6AAsgACADOgAKIAAgAikCCDcCACACQf0AOgARIABBCGogBC8BADsBAAwCCyABELoBRQRAIAJBADoAFiACQQA7ARQgAiABQRR2QeCvwgBqLQAAOgAXIAIgAUEEdkEPcUHgr8IAai0AADoAGyACIAFBCHZBD3FB4K/CAGotAAA6ABogAiABQQx2QQ9xQeCvwgBqLQAAOgAZIAIgAUEQdkEPcUHgr8IAai0AADoAGCABQQFyZ0ECdiIDIAJBFGoiBWoiBEH7ADoAACAEQQFrQfUAOgAAIAUgA0ECayIDakHcADoAACACQRxqIgQgAUEPcUHgr8IAai0AADoAACAAQQo6AAsgACADOgAKIAAgAikCFDcCACACQf0AOgAdIABBCGogBC8BADsBAAwCCyAAIAE2AgQgAEGAAToAAAwBCyAAQYAEOwEKIABCADcBAiAAQdy4ATsBAAsgAkEgaiQAC84FAgZ/An4CQCACRQ0AIAJBB2siA0EAIAIgA08bIQcgAUEDakF8cSABayEIQQAhAwNAAkACQAJAIAEgA2otAAAiBcAiBkEATgRAIAggA2tBA3ENASADIAdPDQIDQCABIANqIgQoAgQgBCgCAHJBgIGChHhxDQMgA0EIaiIDIAdJDQALDAILQoCAgICAICEKQoCAgIAQIQkCQAJAAn4CQAJAAkACQAJAAkACQAJAAkAgBUHfx8IAai0AAEECaw4DAAECCgsgA0EBaiIEIAJJDQJCACEKQgAhCQwJC0IAIQogA0EBaiIEIAJJDQJCACEJDAgLQgAhCiADQQFqIgQgAkkNAkIAIQkMBwsgASAEaiwAAEG/f0oNBgwHCyABIARqLAAAIQQCQAJAIAVB4AFrIgUEQCAFQQ1GBEAMAgUMAwsACyAEQWBxQaB/Rg0EDAMLIARBn39KDQIMAwsgBkEfakH/AXFBDE8EQCAGQX5xQW5HDQIgBEFASA0DDAILIARBQEgNAgwBCyABIARqLAAAIQQCQAJAAkACQCAFQfABaw4FAQAAAAIACyAGQQ9qQf8BcUECSyAEQUBOcg0DDAILIARB8ABqQf8BcUEwTw0CDAELIARBj39KDQELIAIgA0ECaiIETQRAQgAhCQwFCyABIARqLAAAQb9/Sg0CQgAhCSADQQNqIgQgAk8NBCABIARqLAAAQb9/TA0FQoCAgICA4AAMAwtCgICAgIAgDAILQgAhCSADQQJqIgQgAk8NAiABIARqLAAAQb9/TA0DC0KAgICAgMAACyEKQoCAgIAQIQkLIAAgCiADrYQgCYQ3AgQgAEEBNgIADwsgBEEBaiEDDAILIANBAWohAwwBCyACIANNDQADQCABIANqLAAAQQBIDQEgAiADQQFqIgNHDQALDAILIAIgA0sNAAsLIAAgAjYCCCAAIAE2AgQgAEEANgIAC/4FAQV/IABBCGsiASAAQQRrKAIAIgNBeHEiAGohAgJAAkAgA0EBcQ0AIANBAnFFDQEgASgCACIDIABqIQAgASADayIBQdDowgAoAgBGBEAgAigCBEEDcUEDRw0BQcjowgAgADYCACACIAIoAgRBfnE2AgQgASAAQQFyNgIEIAIgADYCAA8LIAEgAxB1CwJAAkACQAJAAkAgAigCBCIDQQJxRQRAIAJB1OjCACgCAEYNAiACQdDowgAoAgBGDQMgAiADQXhxIgIQdSABIAAgAmoiAEEBcjYCBCAAIAFqIAA2AgAgAUHQ6MIAKAIARw0BQcjowgAgADYCAA8LIAIgA0F+cTYCBCABIABBAXI2AgQgACABaiAANgIACyAAQYACSQ0CIAEgABB+QQAhAUHo6MIAQejowgAoAgBBAWsiADYCACAADQRBsObCACgCACIABEADQCABQQFqIQEgACgCCCIADQALC0Ho6MIAQf8fIAEgAUH/H00bNgIADwtB1OjCACABNgIAQczowgBBzOjCACgCACAAaiIANgIAIAEgAEEBcjYCBEHQ6MIAKAIAIAFGBEBByOjCAEEANgIAQdDowgBBADYCAAsgAEHg6MIAKAIAIgNNDQNB1OjCACgCACICRQ0DQQAhAEHM6MIAKAIAIgRBKUkNAkGo5sIAIQEDQCACIAEoAgAiBU8EQCACIAUgASgCBGpJDQQLIAEoAgghAQwACwALQdDowgAgATYCAEHI6MIAQcjowgAoAgAgAGoiADYCACABIABBAXI2AgQgACABaiAANgIADwsgAEH4AXFBuObCAGohAgJ/QcDowgAoAgAiA0EBIABBA3Z0IgBxRQRAQcDowgAgACADcjYCACACDAELIAIoAggLIQAgAiABNgIIIAAgATYCDCABIAI2AgwgASAANgIIDwtBsObCACgCACIBBEADQCAAQQFqIQAgASgCCCIBDQALC0Ho6MIAQf8fIAAgAEH/H00bNgIAIAMgBE8NAEHg6MIAQX82AgALC98FAQJ/IwBBMGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkBBAiAAKAIAQfv///8HaiIDIANBDE8bQQFrDgsBAgMEBQYHCAkKCwALIAIgAEEEajYCDCACQQE2AhQgAkHwp8EANgIQIAJCATcCHCACIAJBDGqtQoCAgICQOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUMCwsgAiAAQQRqNgIMIAJBATYCFCACQfCnwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA4hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRQwKCyACIAA2AgwgAkEBNgIUIAJB8KfBADYCECACQgE3AhwgAiACQQxqrUKAgICAkDeENwMoIAIgAkEoajYCGCABKAIcIAEoAiAgAkEQahBFDAkLIAIgAEEEajYCDCACQQI2AhQgAkHwvMEANgIQIAJCATcCHCACIAJBDGqtQoCAgICwOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUMCAsgAiAAQQRqNgIMIAJBATYCFCACQZy/wQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA0hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRQwHCyABKAIcQaS/wQBBOSABKAIgKAIMEQIADAYLIAEoAhxB3b/BAEE/IAEoAiAoAgwRAgAMBQsgAiAAQQRqNgIMIAJBATYCFCACQfCnwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgMA4hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRQwECyABKAIcQZzAwQBBPCABKAIgKAIMEQIADAMLIAEoAhxB2MDBAEEkIAEoAiAoAgwRAgAMAgsgASgCHEH8wMEAQSQgASgCICgCDBECAAwBCyABKAIcQaDBwQBBJCABKAIgKAIMEQIACyACQTBqJAALkQUCAX8BfiMAQUBqIgIkAAJ/AkACQAJAAkACQAJAAkAgAC0AAEEBaw4GAQIDBAUGAAsgAiAAQQhqNgIkIAJBAjYCLCACQYCnwQA2AiggAkICNwI0IAJCsKbBgMA1NwMYIAIgAkEkaq1CgICAgNA1hDcDECACIAJBEGo2AjAgASgCHCABKAIgIAJBKGoQRQwGCyACIABBCGo2AiQgAkECNgIsIAJB4KfBADYCKCACQgI3AjQgAkKQp8GAwDU3AxggAiACQSRqrUKAgICA0DWENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAULIAIgAEEBajYCJCACQQE2AiwgAkHwp8EANgIoIAJCATcCNCACIAJBJGqtQoCAgIDgNYQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEUMBAsgAiAAQQRqNgIMIAIgAEEIajYCJCACQQI2AiwgAkGoqMEANgIoIAJCAjcCNCACQoCAgIDwNSIDIAJBJGqthDcDGCACIAMgAkEMaq2ENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAMLIAIgAEEEajYCDCACIABBAWo2AiQgAkECNgIsIAJB8KjBADYCKCACQgI3AjQgAiACQSRqrUKAgICA4DSENwMYIAIgAkEMaq1CgICAgPA1hDcDECACIAJBEGo2AjAgASgCHCABKAIgIAJBKGoQRQwCCyABKAIcQYCpwQBBGyABKAIgKAIMEQIADAELIAIgAEEBajYCJCACQQI2AiwgAkHgqcEANgIoIAJCATcCNCACIAJBJGqtQoCAgIDgNIQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEULIAJBQGskAAvrBAEFfwJ/AkAgAkECTwRAIAEoAgQiBEH//wFxRQRAIARBEHQMAwsgBEH/B3EhBSAEQYCAAnEhAyAEQYD4AXEiBkGA+AFGBEAgA0EQdCEDIANBgICA/AdyIAVFDQMaIAMgBUENdHJBgICA/gdyDAMLIANBEHQhAyAGRQ0BIAZBDXRBgICA/ABxIAVBDXRyQYCAgMADaiADcgwCC0EBQQFB/IzAABCtAgALIAUgBWdBEGsiBUH//wNxQQhqdEH///8DcSADQYCAgNgDciAFQRd0a3ILIQUCfyAEQYCAfHEgBEEQdiIDQf//AXFFDQAaIANB/wdxIQQgA0GAgAJxIQYgA0GA+AFxIgdBgPgBRgRAIAZBEHQhBiAGQYCAgPwHciAERQ0BGiAGIANBDXRyQYCAgP4HcgwBCyAGQRB0IQMgB0ENdEGAgID8AHEgBEENdHJBgICAwANqIANyIAcNABogBCAEZ0EQayIEQf//A3FBCGp0Qf///wNxIANBgICA2ANyIARBF3RrcgshBCAAAn8CQCACQQJHBEAgASgCCCICQf//AXFFBEAgAkEQdAwDCyACQf8HcSEBIAJBgIACcSEDIAJBgPgBcSICQYD4AUYEQCADQRB0IQIgAkGAgID8B3IgAUUNAxogAiABQQ10ckGAgID+B3IMAwsgA0EQdCEDIAJFDQEgAkENdEGAgID8AHEgAUENdHJBgICAwANqIANyDAILQQJBAkGMjcAAEK0CAAsgASABZ0EQayIBQf//A3FBCGp0Qf///wNxIANBgICA2ANyIAFBF3Rrcgs2AgggACAENgIEIAAgBTYCAAuLBQEEfyMAQSBrIgMkAAJAIAAQOEH/AXEiAUECRgRAQQEhAQwBCwJAAkACQAJAIAAoAgAiBEUNACAAKAIIIgIgACgCBE8NACACIARqLQAAQfAARw0AIAAgAkEBajYCCCAAKAIQIQIgAUEBcUUEQCACRQ0CQQEhAUH4s8IAQQEgAhDVBA0FDAILIAJFDQFB9bnCAEECIAIQ1QRFDQFBASEBDAQLIAFBAXFFDQIMAQsCQAJAIAAoAgBFDQAgAyAAEDcgAygCAEUNASADQRhqIANBCGopAgA3AwAgAyADKQIANwMQAkAgACgCECICRQ0AQQEhASADQRBqIAIQIw0FIAAoAhAiAkUNAEHJusIAQQMgAhDVBA0FCyAAECcEQEEBIQEMBQsDQCAAKAIAIgJFDQMgACgCCCIBIAAoAgRPDQMgASACai0AAEHwAEcNAyAAIAFBAWo2AgggACgCECIBBEBB9bnCAEECIAEQ1QQEQEEBIQEMBwsgACgCAEUNAgsgAyAAEDcgAygCAEUNAiADQRhqIANBCGopAgA3AwAgAyADKQIANwMQAkAgACgCECICRQ0AQQEhASADQRBqIAIQIw0GIAAoAhAiAkUNAEHJusIAQQMgAhDVBA0GC0EBIQEgABAnRQ0ACwwECyAAKAIQIgBFDQJB7bnCAEEBIAAQ1QQhAQwDCyAAKAIQIQECQCADLQAEIgJFBEAgAUUNAUHEucIAQRAgARDVBEUNAUEBIQEMBAsgAUUNAEHUucIAQRkgARDVBEUNAEEBIQEMAwsgACACOgAEQQAhASAAQQA2AgAMAgsgACgCECIARQ0AQQEhAUH3s8IAQQEgABDVBA0BC0EAIQELIANBIGokACABC9IEAg9/AX4jAEHQAGsiAyQAIANBDGqtQoCAgIAQhCESIAAtAAwhByAAKAIEIQ4gACgCACENIAAoAggiCEEcaiEPIAhBIGohEAJ/A0ACQCAJIhENACAGIQpBASEJAkAgAiAFTwRAA0AgASAFaiEGAkACQAJAIAIgBWsiC0EHTQRAIAIgBUYEQCAKIQYgAiEFIAIhBAwHC0EAIQQDQCAEIAZqLQAAQQpGDQIgCyAEQQFqIgRHDQALIAohBiACIQUgAiEEDAYLIANBCiAGIAsQiQEgAygCACILQQFHDQEgAygCBCEECyAEIAVqIgRBAWohBSACIARNDQEgASAEai0AAEEKRw0BQQAhCSAFIQYMBAsgCiEGIAIhBSACIQQgC0EBcUUNA0EAIQkMAwsgAiAFTw0ACwsgCiEGIAIhBAsCQCAHQQFxRQRAIABBAToADCANQQFxRQRAIAhB3IPCAEEEEOUDRQ0CDAMLIAMgDjYCDCADIBI3AyggA0EBOgBMIANBADYCSCADQiA3AkAgA0KAgICA0AA3AjggA0ECNgIwIANBATYCJCADQQI2AhQgA0Hkg8IANgIQIANBATYCHCAPKAIAIQsgECgCACEHIAMgA0EwajYCICADIANBKGo2AhhBASALIAcgA0EQahBFDQQaDAELIAxFDQAgCEEKEOsDDQEgDQRAIAhB9IPCAEEHEOUDDQIMAQsgCEHcg8IAQQQQ5QMNAQsgDEEBaiEMQQEhByAIIAEgCmogBCAKaxDlA0UNAQsLIBFBAXMLIANB0ABqJABBAXELhwUCAn8BfiMAQUBqIgIkACAAQQRqIQMCfwJAAkACQAJAAkACQAJAIAAoAgBBAWsOBgECAwQFBgALIAIgAzYCJCACQQE2AiwgAkHwr8EANgIoIAJCATcCNCACIAJBJGqtQoCAgICQNYQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEUMBgsgAiADNgIMIAIgAEEIajYCJCACQQM2AiwgAkHUsMEANgIoIAJCAjcCNCACQoCAgIDwNSIEIAJBJGqthDcDGCACIAQgAkEMaq2ENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAULIAIgAzYCJCACQQE2AiwgAkHwp8EANgIoIAJCATcCNCACIAJBJGqtQoCAgICgNoQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEUMBAsgAiADNgIkIAJBATYCLCACQfCnwQA2AiggAkIBNwI0IAIgAkEkaq1CgICAgLA2hDcDECACIAJBEGo2AjAgASgCHCABKAIgIAJBKGoQRQwDCyACIAM2AiQgAkEBNgIsIAJB8KfBADYCKCACQgE3AjQgAiACQSRqrUKAgICAwDaENwMQIAIgAkEQajYCMCABKAIcIAEoAiAgAkEoahBFDAILIAIgAzYCJCACQQE2AiwgAkHwp8EANgIoIAJCATcCNCACIAJBJGqtQoCAgIDQNoQ3AxAgAiACQRBqNgIwIAEoAhwgASgCICACQShqEEUMAQsgAiADNgIkIAJBATYCLCACQfCnwQA2AiggAkIBNwI0IAIgAkEkaq1CgICAgOA2hDcDECACIAJBEGo2AjAgASgCHCABKAIgIAJBKGoQRQsgAkFAayQAC+oEAQp/IwBBMGsiAyQAIAMgATYCLCADIAA2AiggA0EDOgAkIANCIDcCHCADQQA2AhQgA0EANgIMAn8CQAJAAkAgAigCECIKRQRAIAIoAgwiAEUNASACKAIIIgEgAEEDdGohBCAAQQFrQf////8BcUEBaiEHIAIoAgAhAANAIABBBGooAgAiBQRAIAMoAiggACgCACAFIAMoAiwoAgwRAgANBAsgASgCACADQQxqIAFBBGooAgARAAANAyAAQQhqIQAgAUEIaiIBIARHDQALDAELIAIoAhQiAEUNACAAQQV0IQsgAEEBa0H///8/cUEBaiEHIAIoAgghBSACKAIAIQADQCAAQQRqKAIAIgEEQCADKAIoIAAoAgAgASADKAIsKAIMEQIADQMLIAMgCCAKaiIBQRBqKAIANgIcIAMgAUEcai0AADoAJCADIAFBGGooAgA2AiAgAUEMaigCACEEQQAhCUEAIQYCQAJAAkAgAUEIaigCAEEBaw4CAAIBCyAEQQN0IAVqIgwoAgANASAMKAIEIQQLQQEhBgsgAyAENgIQIAMgBjYCDCABQQRqKAIAIQQCQAJAAkAgASgCAEEBaw4CAAIBCyAEQQN0IAVqIgYoAgANASAGKAIEIQQLQQEhCQsgAyAENgIYIAMgCTYCFCAFIAFBFGooAgBBA3RqIgEoAgAgA0EMaiABQQRqKAIAEQAADQIgAEEIaiEAIAsgCEEgaiIIRw0ACwsgByACKAIETw0BIAMoAiggAigCACAHQQN0aiIAKAIAIAAoAgQgAygCLCgCDBECAEUNAQtBAQwBC0EACyADQTBqJAALlgQBBH8jAEGAAWsiBCQAAkACQAJAIAEoAhQiAkEQcUUEQCACQSBxDQFBASECIAAoAgBBASABEGxFDQIMAwsgACgCACECA0AgAyAEakH/AGogAkEPcSIFQTByIAVB1wBqIAVBCkkbOgAAIANBAWshAyACQRBJIAJBBHYhAkUNAAtBASECIAFBAUGPxMIAQQIgAyAEakGAAWpBACADaxA1RQ0BDAILIAAoAgAhAgNAIAMgBGpB/wBqIAJBD3EiBUEwciAFQTdqIAVBCkkbOgAAIANBAWshAyACQQ9LIAJBBHYhAg0AC0EBIQIgAUEBQY/EwgBBAiADIARqQYABakEAIANrEDUNAQsgASgCHEH6wMIAQQIgASgCICgCDBECAA0AAkAgASgCFCICQRBxRQRAIAJBIHENASAAKAIEQQEgARBsIQIMAgsgACgCBCECQQAhAwNAIAMgBGpB/wBqIAJBD3EiAEEwciAAQdcAaiAAQQpJGzoAACADQQFrIQMgAkEPSyACQQR2IQINAAsgAUEBQY/EwgBBAiADIARqQYABakEAIANrEDUhAgwBCyAAKAIEIQJBACEDA0AgAyAEakH/AGogAkEPcSIAQTByIABBN2ogAEEKSRs6AAAgA0EBayEDIAJBD0sgAkEEdiECDQALIAFBAUGPxMIAQQIgAyAEakGAAWpBACADaxA1IQILIARBgAFqJAAgAgu7BAEBfwJAIAAoAgBBAkYNACAAKAIoIgEEQCAAKAIsIAFBAXRBARCnBAsgACgCNCIBBEAgACgCOCABQQEQpwQLIAAoAkAiAQRAIAAoAkQgAUEBEKcECyAAKAJMIgEEQCAAKAJQIAFBAnRBBBCnBAsgACgCWCIBBEAgACgCXCABQQJ0QQQQpwQLIAAoAmQiAQRAIAAoAmggAUEDdEEEEKcECyAAKAJwIgEEQCAAKAJ0IAFBAnRBBBCnBAsgACgCfCIBBEAgACgCgAEgAUECdEEEEKcECyAAKAKQASIBBEAgACgClAEgAUEDdEEEEKcECyAAKAKcASIBBEAgACgCoAEgAUECdEEEEKcECyAAKAKoASIBBEAgACgCrAEgAUECdEEEEKcECyAAKAK4ASIBBEAgACgCvAEgAUEDdEEEEKcECyAAKALEASIBBEAgACgCyAEgAUECdEEEEKcECyAAKALQASIBBEAgACgC1AEgAUECdEEEEKcECyAAKALgASIBBEAgACgC5AEgAUEDdEEEEKcECyAAKALsASIBBEAgACgC8AEgAUECdEEEEKcECyAAKAL4ASIBBEAgACgC/AEgAUECdEEEEKcECyAAQZACahDTAyAAKAKEAyIBBEAgACgCiAMgAUEBEKcECyAAKAKQAyIBBEAgACgClAMgAUEBEKcECyAAKAKcAyIBBEAgACgCoAMgAUEMbEEEEKcECyAAKAKoAyIBRQ0AIAAoAqwDIAFBARCnBAsgAEHQA2oQKwuPBAENfyABQQFrIQ8gACgCBCEKIAAoAgAhCyAAKAIIIQwCQANAIA4NAQJAAkAgAiAESQ0AA0AgASAEaiEFAkACQAJAIAIgBGsiBkEHTQRAIAIgBEcNASACIQQMBQsCQCAFQQNqQXxxIgggBWsiAwRAQQAhAANAIAAgBWotAABBCkYNBSADIABBAWoiAEcNAAsgAyAGQQhrIgBNDQEMAwsgBkEIayEACwNAQYCChAggCCgCACIJQYqUqNAAc2sgCXJBgIKECCAIQQRqKAIAIglBipSo0ABzayAJcnFBgIGChHhxQYCBgoR4Rw0CIAhBCGohCCADQQhqIgMgAE0NAAsMAQtBACEAA0AgACAFai0AAEEKRg0CIAYgAEEBaiIARw0ACyACIQQMAwsgAyAGRgRAIAIhBAwDCwNAIAMgBWotAABBCkYEQCADIQAMAgsgBiADQQFqIgNHDQALIAIhBAwCCyAAIARqIgNBAWohBAJAIAIgA00NACAAIAVqLQAAQQpHDQAgBCEFIAQhAAwDCyACIARPDQALC0EBIQ4gAiIAIAciBUYNAgsCQCAMLQAABEAgC0H4w8IAQQQgCigCDBECAA0BC0EAIQMgACAHRwRAIAAgD2otAABBCkYhAwsgACAHayEAIAEgB2ohBiAMIAM6AAAgBSEHIAsgBiAAIAooAgwRAgBFDQELC0EBIQ0LIA0LswQBAX8CQCAAKAIAQQJGDQAgACgCKCIBBEAgACgCLCABQQF0QQEQpwQLIAAoAjQiAQRAIAAoAjggAUEBEKcECyAAKAJAIgEEQCAAKAJEIAFBARCnBAsgACgCTCIBBEAgACgCUCABQQJ0QQQQpwQLIAAoAlgiAQRAIAAoAlwgAUECdEEEEKcECyAAKAJkIgEEQCAAKAJoIAFBA3RBBBCnBAsgACgCcCIBBEAgACgCdCABQQJ0QQQQpwQLIAAoAnwiAQRAIAAoAoABIAFBAnRBBBCnBAsgACgCkAEiAQRAIAAoApQBIAFBA3RBBBCnBAsgACgCnAEiAQRAIAAoAqABIAFBAnRBBBCnBAsgACgCqAEiAQRAIAAoAqwBIAFBAnRBBBCnBAsgACgCuAEiAQRAIAAoArwBIAFBA3RBBBCnBAsgACgCxAEiAQRAIAAoAsgBIAFBAnRBBBCnBAsgACgC0AEiAQRAIAAoAtQBIAFBAnRBBBCnBAsgACgC4AEiAQRAIAAoAuQBIAFBA3RBBBCnBAsgACgC7AEiAQRAIAAoAvABIAFBAnRBBBCnBAsgACgC+AEiAQRAIAAoAvwBIAFBAnRBBBCnBAsgAEGQAmoQ0wMgACgChAMiAQRAIAAoAogDIAFBARCnBAsgACgCkAMiAQRAIAAoApQDIAFBARCnBAsgACgCnAMiAQRAIAAoAqADIAFBDGxBBBCnBAsgACgCqAMiAUUNACAAKAKsAyABQQEQpwQLC54FAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQIgACgCACIAKAIAQfv///8HaiIDIANBDk8bQQFrDg0BAgMEBQYHCAkKCwwNAAsgAiAAQQRqNgIMIAFB6NTBAEEMIAJBDGpB2NTBABB/DA0LIAIgAEEEajYCDCABQdDXwQBBDyACQQxqQcDXwQAQfwwMCyACIAA2AgwgAUGA1MEAQQ0gAkEMakHw08EAEH8MCwsgAUHY2sEAQQ0Q5QMMCgsgAiAAQQhqNgIMIAFB5drBAEEYQf3awQBBCSAAQQRqQfTMwQBBhtvBAEEOIAJBDGpBhM3BABDDAQwJCyACIABBBGo2AgwgAUH41cEAQQxBhNbBAEEMIAJBDGpB6NXBABDJAQwICyACIABBBGo2AgwgAUGU28EAQQ5Bi87BAEEDIAJBDGpBuM3BABDJAQwHCyABQaLbwQBBDhDlAwwGCyACIABBBGo2AgwgAUGw28EAQRZBi87BAEEDIAJBDGpBzM/BABDJAQwFCyACIABBCGo2AgwgAUHG28EAQSFBsNfBAEEEIABBBGpB9MzBAEG308EAQQQgAkEMakG4zcEAEMMBDAQLIAIgAEEIajYCDCABQefbwQBBGEH/28EAQQQgAEEEakH0zMEAQYPcwQBBDyACQQxqQYTNwQAQwwEMAwsgAiAAQQhqNgIMIAFBktzBAEEWQYvOwQBBAyAAQQRqQfTMwQBBt9PBAEEEIAJBDGpBuM3BABDDAQwCCyACIABBBGo2AgwgAUGo3MEAQRpBi87BAEEDIAJBDGpBhM3BABDJAQwBCyACIABBBGo2AgwgAUHC3MEAQQ5Bi87BAEEDIAJBDGpBhM3BABDJAQsgAkEQaiQAC5kFAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQIgACgCAEH7////B2oiAyADQQ5PG0EBaw4NAQIDBAUGBwgJCgsMDQALIAIgAEEEajYCDCABQcSZwABBDCACQQxqQbSZwAAQfwwNCyACIABBBGo2AgwgAUGMoMAAQQ8gAkEMakH8n8AAEH8MDAsgAiAANgIMIAFBrKDAAEENIAJBDGpBnKDAABB/DAsLIAFBuaDAAEENEOUDDAoLIAIgAEEIajYCDCABQcagwABBGEHeoMAAQQkgAEEEakGImMAAQeegwABBDiACQQxqQZiYwAAQwwEMCQsgAiAAQQRqNgIMIAFBiKHAAEEMQZShwABBDCACQQxqQfigwAAQyQEMCAsgAiAAQQRqNgIMIAFBoKHAAEEOQayZwABBAyACQQxqQcyYwAAQyQEMBwsgAUGuocAAQQ4Q5QMMBgsgAiAAQQRqNgIMIAFBvKHAAEEWQayZwABBAyACQQxqQbiawAAQyQEMBQsgAiAAQQhqNgIMIAFB0qHAAEEhQfOhwABBBCAAQQRqQYiYwABB+pzAAEEEIAJBDGpBzJjAABDDAQwECyACIABBCGo2AgwgAUH3ocAAQRhBj6LAAEEEIABBBGpBiJjAAEGTosAAQQ8gAkEMakGYmMAAEMMBDAMLIAIgAEEIajYCDCABQaKiwABBFkGsmcAAQQMgAEEEakGImMAAQfqcwABBBCACQQxqQcyYwAAQwwEMAgsgAiAAQQRqNgIMIAFBuKLAAEEaQayZwABBAyACQQxqQZiYwAAQyQEMAQsgAiAAQQRqNgIMIAFB0qLAAEEOQayZwABBAyACQQxqQZiYwAAQyQELIAJBEGokAAuZBQECfyMAQRBrIgIkAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQEECIAAoAgBB+////wdqIgMgA0EOTxtBAWsODQECAwQFBgcICQoLDA0ACyACIABBBGo2AgwgAUHYvMAAQQwgAkEMakHIvMAAEH8MDQsgAiAAQQRqNgIMIAFBoMPAAEEPIAJBDGpBkMPAABB/DAwLIAIgADYCDCABQcDDwABBDSACQQxqQbDDwAAQfwwLCyABQc3DwABBDRDlAwwKCyACIABBCGo2AgwgAUHaw8AAQRhB8sPAAEEJIABBBGpBnLvAAEH7w8AAQQ4gAkEMakGsu8AAEMMBDAkLIAIgAEEEajYCDCABQZzEwABBDEGoxMAAQQwgAkEMakGMxMAAEMkBDAgLIAIgAEEEajYCDCABQbTEwABBDkHAvMAAQQMgAkEMakHgu8AAEMkBDAcLIAFBwsTAAEEOEOUDDAYLIAIgAEEEajYCDCABQdDEwABBFkHAvMAAQQMgAkEMakHMvcAAEMkBDAULIAIgAEEIajYCDCABQebEwABBIUGHxcAAQQQgAEEEakGcu8AAQY7AwABBBCACQQxqQeC7wAAQwwEMBAsgAiAAQQhqNgIMIAFBi8XAAEEYQaPFwABBBCAAQQRqQZy7wABBp8XAAEEPIAJBDGpBrLvAABDDAQwDCyACIABBCGo2AgwgAUG2xcAAQRZBwLzAAEEDIABBBGpBnLvAAEGOwMAAQQQgAkEMakHgu8AAEMMBDAILIAIgAEEEajYCDCABQczFwABBGkHAvMAAQQMgAkEMakGsu8AAEMkBDAELIAIgAEEEajYCDCABQebFwABBDkHAvMAAQQMgAkEMakGsu8AAEMkBCyACQRBqJAALmQUBAn8jAEEQayICJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkBBAiAAKAIAQfv///8HaiIDIANBDk8bQQFrDg0BAgMEBQYHCAkKCwwNAAsgAiAAQQRqNgIMIAFBqN/AAEEMIAJBDGpBmN/AABB/DA0LIAIgAEEEajYCDCABQdzlwABBDyACQQxqQczlwAAQfwwMCyACIAA2AgwgAUH85cAAQQ0gAkEMakHs5cAAEH8MCwsgAUGJ5sAAQQ0Q5QMMCgsgAiAAQQhqNgIMIAFBlubAAEEYQa7mwABBCSAAQQRqQYzewABBt+bAAEEOIAJBDGpB+NrAABDDAQwJCyACIABBBGo2AgwgAUHF5sAAQQxB0ebAAEEMIAJBDGpB6NrAABDJAQwICyACIABBBGo2AgwgAUHd5sAAQQ5BkN/AAEEDIAJBDGpB+NzAABDJAQwHCyABQevmwABBDhDlAwwGCyACIABBBGo2AgwgAUH55sAAQRZBkN/AAEEDIAJBDGpBnODAABDJAQwFCyACIABBCGo2AgwgAUGP58AAQSFBsOfAAEEEIABBBGpBjN7AAEHe4sAAQQQgAkEMakH43MAAEMMBDAQLIAIgAEEIajYCDCABQbTnwABBGEHM58AAQQQgAEEEakGM3sAAQdDnwABBDyACQQxqQfjawAAQwwEMAwsgAiAAQQhqNgIMIAFB3+fAAEEWQZDfwABBAyAAQQRqQYzewABB3uLAAEEEIAJBDGpB+NzAABDDAQwCCyACIABBBGo2AgwgAUH158AAQRpBkN/AAEEDIAJBDGpB+NrAABDJAQwBCyACIABBBGo2AgwgAUGP6MAAQQ5BkN/AAEEDIAJBDGpB+NrAABDJAQsgAkEQaiQAC5kFAQJ/IwBBEGsiAiQAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQQIgACgCAEH7////B2oiAyADQQ5PG0EBaw4NAQIDBAUGBwgJCgsMDQALIAIgAEEEajYCDCABQeyHwQBBDCACQQxqQdyHwQAQfwwNCyACIABBBGo2AgwgAUHQi8EAQQ8gAkEMakHAi8EAEH8MDAsgAiAANgIMIAFB8IvBAEENIAJBDGpB4IvBABB/DAsLIAFB/YvBAEENEOUDDAoLIAIgAEEIajYCDCABQYqMwQBBGEGijMEAQQkgAEEEakHohcEAQauMwQBBDiACQQxqQcCGwQAQwwEMCQsgAiAAQQRqNgIMIAFBzIzBAEEMQdiMwQBBDCACQQxqQbyMwQAQyQEMCAsgAiAAQQRqNgIMIAFB5IzBAEEOQdSHwQBBAyACQQxqQfSGwQAQyQEMBwsgAUHyjMEAQQ4Q5QMMBgsgAiAAQQRqNgIMIAFBgI3BAEEWQdSHwQBBAyACQQxqQeCIwQAQyQEMBQsgAiAAQQhqNgIMIAFBlo3BAEEhQbeNwQBBBCAAQQRqQeiFwQBBoovBAEEEIAJBDGpB9IbBABDDAQwECyACIABBCGo2AgwgAUG7jcEAQRhB043BAEEEIABBBGpB6IXBAEHXjcEAQQ8gAkEMakHAhsEAEMMBDAMLIAIgAEEIajYCDCABQeaNwQBBFkHUh8EAQQMgAEEEakHohcEAQaKLwQBBBCACQQxqQfSGwQAQwwEMAgsgAiAAQQRqNgIMIAFB/I3BAEEaQdSHwQBBAyACQQxqQcCGwQAQyQEMAQsgAiAAQQRqNgIMIAFBlo7BAEEOQdSHwQBBAyACQQxqQcCGwQAQyQELIAJBEGokAAuLBAIJfwF+AkACQAJ/AkACQAJAAkAgAkHAAE0EQCABKAIEIghBA3QgASgCCCIGayIDIAJJDQEgBkEDdiIDIAhPDQIgASgCACIKIANqLQAAIAZBB3EiCXatIQxBCCAJayIFIAJJBEAgASAFIAZqIgQ2AggCQCAEQQdxRQRAIAIgBWsiB0EITw0BIAUhCSAHDAgLQeDkwQBBI0GE5cEAEO0CAAtBASAHQQN2IgMgA0EBTRsiBEEDdCAJa0EIaiEJA0AgBSAGaiIDQQN2IgsgCE8NBSABIANBCGo2AgggCiALajEAACAFQT9xrYYgDIQhDCAFQQhqIQUgBEEBayIEDQALDAULIAEgAiAGajYCCCAMQn8gAq2GQn+FgyEMDAYLIAAgAjYCCCAAQYCAATsBBCAAQQE2AgAPCyAAIAM2AgwgACACNgIIIABBAToABCAAQQE2AgAPCyADIAhB5OPBABCtAgALIAsgCEHQ5MEAEK0CAAsgBSAGaiEEIAIgCWsLIAdBB3EiB0cEQEH048EAQTtBsOTBABDtAgALIAcEQCAEQQN2IgMgCE8NAiABIAQgB2oiBDYCCCADIApqMQAAQn8gB62GQn+FgyAJQT9xrYYgDIQhDAsgBCACIAZqRg0AQZTlwQBBKUHA5cEAEO0CAAsgACAMNwMIIABBADYCAA8LIAMgCEHA5MEAEK0CAAvvAwELfyMAQRBrIgYkAAJAIAEoAhAiBCABKAIMIgNJBEAMAQsgASgCCCIMIARJBEAMAQsgAUEUaiIJIAEtABgiB2pBAWstAAAhCiABKAIEIQsCQCAHQQRNBEADQCADIAtqIQUCQCAEIANrIghBB00EQCADIARGBEBBACECIAEgBDYCDAwGC0EAIQIDQCACIAVqLQAAIApGDQIgCCACQQFqIgJHDQALQQAhAiABIAQ2AgwMBQsgBkEIaiAKIAUgCBCJASAGKAIIIgJBAUcNAyAGKAIMIQILIAEgAiADakEBaiIDNgIMAkAgAyAHSSADIAxLcg0AIAsgAyAHayICaiAJIAcQ1AINACAAIAM2AgggACACNgIEQQEhAgwECyADIARNDQALQQAhAgwCCwJAA0AgAyALaiEIAkAgBCADayIJQQhPBEAgBiAKIAggCRCJASAGKAIAIgJBAUcNBCAGKAIEIQUMAQsgAyAERgRAQQAhAiABIAQ2AgwMBQtBACEFA0AgBSAIai0AACAKRg0BQQAhAiAJIAVBAWoiBUcNAAsMAwsgASADIAVqQQFqIgM2AgwgAyAMTSADIAdPcQ0BIAMgBE0NAAtBACECDAILIAdBBEGoscIAEKsEAAsgASAENgIMCyAAIAI2AgAgBkEQaiQAC/8DAQl/IwBBIGsiBCQAAkACQAJ/AkACQAJAAkACQCAAKAIAIgYEQCAAKAIIIgMgACgCBCIFIAMgBUsbIQlBfyEHIAMhAgNAIAIgCUYNBCAAIAJBAWoiCDYCCCAHQQFqIQcgAiAGaiAIIQItAAAiCEEwa0H/AXFBCkkgCEHhAGtB/wFxQQZJcg0ACyAIQd8ARw0DIAJBAWshAgJAIAMEQCADIAVPBEAgAiAFSw0LDAILIAIgBUsNCiADIAZqLAAAQb9/Sg0BDAoLIAIgBUsNCQsgBEEIaiADIAZqIgMgBxBnIAQoAggNASAAKAIQIgJFDQRB3brCAEECIAIQ1QQNAiADIAcgAhDVBA0CDAULQQAgACgCECIARQ0FGkHtucIAQQEgABDVBAwFCyAAKAIQIQIgBCAEKQMQNwMYIAJFDQIgBEEYaiACEK8ERQ0DC0EBDAMLAkAgACgCECIBRQ0AQcS5wgBBECABENUERQ0AQQEMAwsgAEEAOgAEIABBADYCAEEADAILQQAMAQtBACACLQAUQQRxDQAaIAFB4QBrIgBB/wFxIgFBGk9Bv/fzHSABdkEBcUVyDQEgAEECdEH8B3EiAEHcvcIAaigCACAAQfS8wgBqKAIAIAIQ1QQLIARBIGokAA8LQeC6wgAQrgQACyAGIAUgAyACQfS4wgAQ7AMAC7IEAgJ9BH8jAEEQayEEIAC8IgVBH3YhBgJAAn0gAAJ/AkACQAJAAkAgBUH/////B3EiA0HQ2LqVBE8EQCADQYCAgPwHSwRAIAAPCyAFQQBIIgVFIANBl+TFlQRLcQ0CIAVFDQEgBEMAAICAIACVOAIIIAQqAggaIANBtOO/lgRNDQEMBwsgA0GY5MX1A00EQCADQYCAgMgDTQ0DQQAhAyAADAYLIANBkquU/ANNDQMLIABDO6q4P5QgBkECdEH048IAaioCAJIiAUMAAADPYCEEQf////8HAn8gAYtDAAAAT10EQCABqAwBC0GAgICAeAtBgICAgHggBBsgAUP///9OXhtBACABIAFbGwwDCyAAQwAAAH+UDwsgBCAAQwAAAH+SOAIMIAQqAgwaIABDAACAP5IPCyAGRSAGawsiA7IiAUMAcjG/lJIiACABQ46+vzWUIgKTCyEBIAAgASABIAEgAZQiACAAQxVSNbuUQ4+qKj6SlJMiAJRDAAAAQCAAk5UgApOSQwAAgD+SIQEgA0UNAAJAAkACQCADQf8ATARAIANBgn9ODQMgAUMAAIAMlCEBIANBm35NDQEgA0HmAGohAwwDCyABQwAAAH+UIQEgA0H+AUsNASADQf8AayEDDAILIAFDAACADJQhAUG2fSADIANBtn1NG0HMAWohAwwBCyABQwAAAH+UIQFB/QIgAyADQf0CTxtB/gFrIQMLIAEgA0EXdEGAgID8A2q+lCEBCyABC4gEAQh/IAEoAgQiBQRAIAEoAgAhBANAAkAgA0EBaiECAn8gAiADIARqLQAAIgjAIglBAE4NABoCQAJAAkACQAJAAkACQAJAAkACQAJAIAhB38fCAGotAABBAmsOAwABAgwLQfjAwgAgAiAEaiACIAVPGy0AAEHAAXFBgAFHDQsgA0ECagwKC0H4wMIAIAIgBGogAiAFTxssAAAhByAIQeABayIGRQ0BIAZBDUYNAgwDC0H4wMIAIAIgBGogAiAFTxssAAAhBiAIQfABaw4FBAMDAwUDCyAHQWBxQaB/Rw0IDAYLIAdBn39KDQcMBQsgCUEfakH/AXFBDE8EQCAJQX5xQW5HIAdBQE5yDQcMBQsgB0FATg0GDAQLIAlBD2pB/wFxQQJLIAZBQE5yDQUMAgsgBkHwAGpB/wFxQTBPDQQMAQsgBkGPf0oNAwtB+MDCACAEIANBAmoiAmogAiAFTxstAABBwAFxQYABRw0CQfjAwgAgBCADQQNqIgJqIAIgBU8bLQAAQcABcUGAAUcNAiADQQRqDAELQfjAwgAgBCADQQJqIgJqIAIgBU8bLQAAQcABcUGAAUcNASADQQNqCyIDIgIgBUkNAQsLIAAgAzYCBCAAIAQ2AgAgASAFIAJrNgIEIAEgAiAEajYCACAAIAIgA2s2AgwgACADIARqNgIIDwsgAEEANgIAC6UDAQN/AkACQAJAAkACQAJAAkACQAJAAkAgACgCAA4KAAcHAQIDBAcHBQcLIABBBGoQbQ8LAkACQCAALQAEDgIHAQALIAAoAggiAUH7////B2oiA0ENTSADQQJHcQ0GIAFBhICAgHhKDQUgAUGDgICAeEcNBgwFCyAAKAIIIgFBhICAgHhKIAFBg4CAgHhGcg0EDAULIAAtAAQiAUEDSyABQQNHcg0EDAULAkACQEEDIAAoAgRBB2siASABQQNPG0ECaw4CAQAFCyAAQQRqEKQBDwsgAC0ACEEDRw0DIAAoAgwiACgCACEBDAULIAAtAARBA0cNAgwDCyAALQAEQQNHDQEgACgCCCIAKAIAIQEgAEEEaigCACIDKAIAIgIEQCABIAIRAwALIAMoAgQiAgRAIAEgAiADKAIIEKcECyAAQQxBBBCnBAwBCyABRQ0AIAAoAgwgAUECdEEEEKcECw8LIAAoAggiACgCACEBCyAAQQRqKAIAIgMoAgAiAgRAIAEgAhEDAAsgAygCBCICBEAgASACIAMoAggQpwQLIABBDEEEEKcEC/IDAgJ/AX4jAEFAaiICJAACfwJAAkACQAJAAkBBAyAAKAIAQYCAgIB4cyIDIANBBU8bQQFrDgQBAgMEAAsgASgCHEG0w8EAQRkgASgCICgCDBECAAwECyACIABBBGo2AgQgAiAAQQVqNgIkIAJBAjYCLCACQYzEwQA2AiggAkICNwI0IAJCgICAgOA0IgQgAkEkaq2ENwMQIAIgBCACQQRqrYQ3AwggAiACQQhqNgIwIAEoAhwgASgCICACQShqEEUMAwsgAiAAQQRqNgIkIAJBATYCLCACQfCnwQA2AiggAkIBNwI0IAIgAkEkaq1CgICAgJA4hDcDCCACIAJBCGo2AjAgASgCHCABKAIgIAJBKGoQRQwCCyACIABBDGo2AgAgAiAAQRBqNgIEIAIgADYCJCACQQM2AgwgAkHwxMEANgIIIAJCAzcCFCACIAJBJGqtQoCAgIDwOIQ3AzggAkKAgICAgDYiBCACQQRqrYQ3AzAgAiAEIAKthDcDKCACIAJBKGo2AhAgASgCHCABKAIgIAJBCGoQRQwBCyACIABBBGo2AiQgAkECNgIsIAJBxMXBADYCKCACQgE3AjQgAiACQSRqrUKAgICA8DWENwMIIAIgAkEIajYCMCABKAIcIAEoAiAgAkEoahBFCyACQUBrJAALyQMCDX8BfiADIAVBAWsiDSABKAIUIghqIgdLBEBBACABKAIIIgprIQ4gBSABKAIQIg9rIRAgASgCHCELIAEpAwAhFANAAkAgAQJ/AkAgFCACIAdqMQAAiEIBg1AEQCABIAUgCGoiCDYCFCAGDQMMAQsgCiALIAogCiALSRsgBhsiCSAFIAUgCUkbIQwgAiAIaiERIAkhBwJAAkACQANAIAcgDEYEQEEAIAsgBhshDCAKIQcDQCAHIAxNBEAgASAFIAhqIgI2AhQgBkUEQCABQQA2AhwLIAAgAjYCCCAAIAg2AgQgAEEBNgIADwsgB0EBayIHIAVPDQUgByAIaiIJIANPDQMgBCAHai0AACACIAlqLQAARg0ACyABIAggD2oiCDYCFCAQIAZFDQYaDAcLIAcgCGogA08NAiAHIBFqIRIgBCAHaiAHQQFqIQctAAAgEi0AAEYNAAsgCCAOaiAHaiEIIAZFDQMMBQsgCSADQcCvwgAQrQIACyADIAggCWoiACAAIANJGyADQdCvwgAQrQIACyAHIAVBsK/CABCtAgALQQALIgc2AhwgByELCyAIIA1qIgcgA0kNAAsLIAEgAzYCFCAAQQA2AgALsQQCBH8EfiAAQShqIQUCQAJAIAAoAkgiA0UEQCACIQMMAQsgA0EgSw0BIAMgBWogAUEgIANrIgMgAiACIANLGyIEEDsaIABBACAAKAJIIARqIgMgA0EgRiIGGzYCSCACIARrIQMgASAEaiEBIAZFDQAgACAAKQMAIAApAyhCz9bTvtLHq9lCfnxCH4lCh5Wvr5i23puef343AwAgACAAKQMIIAApAzBCz9bTvtLHq9lCfnxCH4lCh5Wvr5i23puef343AwggACAAKQMQIAApAzhCz9bTvtLHq9lCfnxCH4lCh5Wvr5i23puef343AxAgACAAKQMYIAApA0BCz9bTvtLHq9lCfnxCH4lCh5Wvr5i23puef343AxgLIANBIE8EQCAAKQMYIQcgACkDECEIIAApAwghCSAAKQMAIQoDQCABKQAYQs/W077Sx6vZQn4gB3xCH4lCh5Wvr5i23puef34hByABKQAQQs/W077Sx6vZQn4gCHxCH4lCh5Wvr5i23puef34hCCABKQAIQs/W077Sx6vZQn4gCXxCH4lCh5Wvr5i23puef34hCSABKQAAQs/W077Sx6vZQn4gCnxCH4lCh5Wvr5i23puef34hCiABQSBqIQEgA0EgayIDQR9LDQALIAAgBzcDGCAAIAg3AxAgACAJNwMIIAAgCjcDAAsgAwRAIAUgASADEDsaIAAgAzYCSAsgACAAKQNQIAKtfDcDUA8LIANBIEGU9sEAEKoEAAv5AwECfyAAIAFqIQICQAJAIAAoAgQiA0EBcQ0AIANBAnFFDQEgACgCACIDIAFqIQEgACADayIAQdDowgAoAgBGBEAgAigCBEEDcUEDRw0BQcjowgAgATYCACACIAIoAgRBfnE2AgQgACABQQFyNgIEIAIgATYCAAwCCyAAIAMQdQsCQAJAAkAgAigCBCIDQQJxRQRAIAJB1OjCACgCAEYNAiACQdDowgAoAgBGDQMgAiADQXhxIgIQdSAAIAEgAmoiAUEBcjYCBCAAIAFqIAE2AgAgAEHQ6MIAKAIARw0BQcjowgAgATYCAA8LIAIgA0F+cTYCBCAAIAFBAXI2AgQgACABaiABNgIACyABQYACTwRAIAAgARB+DwsgAUH4AXFBuObCAGohAgJ/QcDowgAoAgAiA0EBIAFBA3Z0IgFxRQRAQcDowgAgASADcjYCACACDAELIAIoAggLIQEgAiAANgIIIAEgADYCDCAAIAI2AgwgACABNgIIDwtB1OjCACAANgIAQczowgBBzOjCACgCACABaiIBNgIAIAAgAUEBcjYCBCAAQdDowgAoAgBHDQFByOjCAEEANgIAQdDowgBBADYCAA8LQdDowgAgADYCAEHI6MIAQcjowgAoAgAgAWoiATYCACAAIAFBAXI2AgQgACABaiABNgIACwueAwIHfwJ+IwBBEGsiBCQAAn8CQCAAKAIAIgNFDQAgACgCCCICIAAoAgQiBU8NACACIANqIgEtAABBzABGBEAgACACQQFqIgE2AgggAAJ+AkAgASAFSQRAIAEgA2otAABB3wBGDQELIAEgBSABIAVLGyEHAkACQANAAkAgASAFSQRAIAEgA2otAABB3wBGDQELIAEgB0YNAgJAIAEgA2otAAAiAkEwayIGQf8BcUEKSQ0AIAJB4QBrQf8BcUEaTwRAIAJBwQBrQf8BcUEaTw0EIAJBHWshBgwBCyACQdcAayEGCyAAIAFBAWoiATYCCCAEIAgQmwIgBCkDCEIAUg0CIAQpAwAiCSAGrUL/AYN8IgggCVoNAQwCCwsgACABQQFqNgIIIAhCf1INAQsgACgCECIDBEBBAUHEucIAQRAgAxDVBA0GGgsgAEEAOgAEIABBADYCAEEADAULIAhCAXwMAQsgACACQQJqNgIIQgALELwBDAILIAEtAABBywBHDQAgACACQQFqNgIIIABBABAgDAELIAAQJwsgBEEQaiQAC5QDAQR/AkAgAkEQSQRAIAAhAwwBCwJAIABBACAAa0EDcSIFaiIEIABNDQAgACEDIAUEQCAFIQYDQCADIAE6AAAgA0EBaiEDIAZBAWsiBg0ACwsgBUEBa0EHSQ0AA0AgAyABOgAAIANBB2ogAToAACADQQZqIAE6AAAgA0EFaiABOgAAIANBBGogAToAACADQQNqIAE6AAAgA0ECaiABOgAAIANBAWogAToAACADQQhqIgMgBEcNAAsLIAQgAiAFayICQXxxaiIDIARLBEAgAUH/AXFBgYKECGwhBQNAIAQgBTYCACAEQQRqIgQgA0kNAAsLIAJBA3EhAgsCQCADIAIgA2oiBU8NACACQQdxIgQEQANAIAMgAToAACADQQFqIQMgBEEBayIEDQALCyACQQFrQQdJDQADQCADIAE6AAAgA0EHaiABOgAAIANBBmogAToAACADQQVqIAE6AAAgA0EEaiABOgAAIANBA2ogAToAACADQQJqIAE6AAAgA0EBaiABOgAAIANBCGoiAyAFRw0ACwsgAAudAwIGfwF+QTggAUH/AXEiASABQThPGyECAkAgACgCECIEIAAtABQiAWoiA0EASgRAIAIgA0sNAQJAIARBAEwgASACT3INAANAIARBAWsiBUEDdiEGQcAAIAFBB2oiB0F4cWshAwJAIAVBP00EQCAAIAYgAxCIASAAKAIQIQQgAC0AFCEBDAELAkAgACgCBCIFIAYgB0H4AXFBA3ZqQQdrIgZPBEAgBSAGayIFQQdLDQFBCCAFQcTewQAQqwQACyAGIAVB1N7BABCqBAALIAAgASADaiIBOgAUIAAgBCADQf8BcWsiBDYCECAAIAAoAgAgBmopAAA3AwgLIAFB/wFxIAJPDQEgBEEASg0ACwsgACABIAJrIgE6ABRCfyACrYZCf4UgACkDCCABQT9xrYiDDwsgACAEIAJrNgIQQgAPCyACIANrIQICQCADQf8BcSABSwRAIAAgAxBbIQggACgCECEEDAELIAAgASADayIBOgAUQn8gA62GQn+FIAApAwggAUE/ca2IgyEICyAAIAQgAms2AhAgCCACQT9xrYYLnAMBBX8CQEERQQAgAEGvsARPGyIBIAFBCHIiASAAQQt0IgIgAUECdEH82sIAaigCAEELdEkbIgEg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AEEEaiACKAIEIAIoAggQPUHcoMIAIAAoAgggACgCBCICGyEDQQkgACgCDCACGwshAiADIAIgARDaASAAQRBqJAALZgAjAEEwayIAJABBhOXCAC0AAARAIABBAjYCDCAAQYyhwgA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIAQhDcDICAAIABBIGo2AhAgAEEIakG0ocIAEKQDAAsgAEEwaiQAC2EBAX8jAEEwayICJAAgAiAANgIMIAJBAjYCFCACQZymwQA2AhAgAkIBNwIcIAIgAkEMaq1CgICAgOA0hDcDKCACIAJBKGo2AhggASgCHCABKAIgIAJBEGoQRSACQTBqJAALYQEBfyMAQTBrIgIkACACIAA2AgwgAkECNgIUIAJB5K7BADYCECACQgE3AhwgAiACQQxqrUKAgICA4DSENwMoIAIgAkEoajYCGCABKAIcIAEoAiAgAkEQahBFIAJBMGokAAthAQF/IwBBMGsiAiQAIAIgADYCDCACQQE2AhQgAkHwp8EANgIQIAJCATcCHCACIAJBDGqtQoCAgICQOIQ3AyggAiACQShqNgIYIAEoAhwgASgCICACQRBqEEUgAkEwaiQAC18BAn8CQCAAKAIAIgFB7f///wdqIgJBCk0gAkEDR3ENACABRSABQfv///8HaiICQQ1NIAJBAkdxIAFBg4CAgHhHIAFBhICAgHhMcXJyDQAgACgCBCABQQJ0QQQQpwQLC1wBA38gAC0AACIBQQNLIAFBA0dyRQRAIAAoAgQiACgCACEBIABBBGooAgAiAygCACICBEAgASACEQMACyADKAIEIgIEQCABIAIgAygCCBCnBAsgAEEMQQQQpwQLC2sBAn9BqJbAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EEa0H/AXFBA0kbQQFrDgMAAQIDC0EAIQEMAgsgAUEBaiEBQdStwAAhAgwBCyABQQRqIQFBkK7AACECCyAAIAI2AgQgACABNgIAC2gBA38CQAJAAkACQEEDIAEoAgBB7f///wdqIgQgBEELTxtBAmsOAwABAgMLIAFBBGohAkGcm8AAIQMMAgtB2LPAACEDIAEhAgwBCyABQQRqIQJBjLXAACEDCyAAIAM2AgQgACACNgIAC2sBAn9B1LfAACECAkACQAJAAkAgAS0AACIDQQNrQQAgA0EE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AX8jAEEQayICJAAgAiAANgIMIAFB8b3AAEEWQYe+wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBic7AAEEbQcC8wABBAyACQQxqQay7wAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBrODAAEERQb3gwABBBCACQQxqQZzgwAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBweDAAEEWQdfgwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8fDAAEEbQZDfwABBAyACQQxqQfjawAAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFB8IjBAEERQYGJwQBBBCACQQxqQeCIwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhYnBAEEWQZuJwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzgBAX8jAEEQayICJAAgAiAANgIMIAFBhZfBAEEbQdSHwQBBAyACQQxqQcCGwQAQyQEgAkEQaiQACzwBAX8jAEEQayICJAAgAkGQksIANgIMIAIgADYCCCACQQhqQZSSwgAgAkEMakGUksIAIAFB5J/CABBrAAs4AQF/IwBBEGsiAiQAIAIgADYCDCABQeywwgBBDUH5sMIAQQQgAkEMakHcsMIAEMkBIAJBEGokAAs5AQF/IwBBEGsiAyQAIAMgATYCDCADIAA2AgggA0EIakGswsIAIANBDGpBrMLCACACQeyOwgAQawALMAEBfyMAQRBrIgIkACACQQhqIAAQ8wIgAigCCCABIAIoAgwoAhARAAAgAkEQaiQACzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEMUBDwsgACABEPwBDwsgACABEP0BCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEK0EDwsgACABEIQCDwsgACABEIMCCzIBAX8gASgCFCICQRBxRQRAIAJBIHFFBEAgACABEKkDDwsgACABEIQCDwsgACABEIMCCzMBAX8jAEEQayICJAAgAiAAKAIANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAszAQF/IwBBEGsiAiQAIAIgACgCADYCDCABQejUwQBBDCACQQxqQdjUwQAQfyACQRBqJAALLQACQCAAIAEQrANFDQAgAARAQYXlwgAtAAAaIAAgARD1AyIBRQ0BCyABDwsACzcBAX8jAEEgayIBJAAgAUEANgIYIAFBATYCDCABQdzZwgA2AgggAUIENwIQIAFBCGogABCkAwALMwEBfyAAKAIAIgFBhICAgHhMIAFBg4CAgHhHcSABRXJFBEAgACgCBCABQQJ0QQQQpwQLCzABAX8jAEEQayICJAAgAiAANgIMIAFBxJnAAEEMIAJBDGpBtJnAABB/IAJBEGokAAsvACAAQZybwAA2AgQgACABIAFBACABLQAAQQJrQf8BcSIAQQFGGyAAQQJLGzYCAAswAQF/IwBBEGsiAiQAIAIgADYCDCABQdi8wABBDCACQQxqQci8wAAQfyACQRBqJAALLwAgAEGwvsAANgIEIAAgASABQQAgAS0AAEECa0H/AXEiAEEBRhsgAEECSxs2AgALMAEBfyMAQRBrIgIkACACIAA2AgwgAUGo38AAQQwgAkEMakGY38AAEH8gAkEQaiQACy8AIABBgOHAADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACy8AIABBxInBADYCBCAAIAEgAUEAIAEtAABBAmtB/wFxIgBBAUYbIABBAksbNgIACzABAX8jAEEQayICJAAgAiAANgIMIAFB7IfBAEEMIAJBDGpB3IfBABB/IAJBEGokAAssAQF/IwBBEGsiACQAIABBCGoiAiABQfyVwgBBCxCmAyACEK4CIABBEGokAAuEAQEDfyMAQSBrIgQkACAEQQhqIgMQ8AECf0GF5cIALQAAGkEkQQQQ9QMiAgRAIAJB5LrAADYCACACIAE2AiAgAiAANgIcIAIgAykCADcCBCACQQxqIANBCGopAgA3AgAgAkEUaiADQRBqKQIANwIAIAIMAQtBBEEkENMEAAsgBEEgaiQACzgBAX9BASEBIAAtAARFBEAgACgCACIBKAIcQY7EwgBBASABKAIgKAIMEQIAIQELIAAgAToABCABC5ABAQN/IwBBIGsiAyQAIANBCGoiAhDwAQJ/QYXlwgAtAAAaQShBBBD1AyIBBEAgAUGcgsAANgIAIAEgAikCADcCBCABIAApAgA3AhwgAUEMaiACQQhq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NgIMIABBhKLCACABKAIEIAEoAggiAC0ACCAALQAJEMEBAAsgACADNgIEIAAgAjYCACAAQeihwgAgASgCBCABKAIIIgAtAAggAC0ACRDBAQALKgAgAEH/AXFFBEBDAAAAAA8LIABBAWtB/wFxs0NFIpE9lEMAABDBkhBSCy0AIAEoAhwgAiADIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAsyAQF/IAEoAhxBvMHCAEEBIAEoAiAoAgwRAgAhAiAAQQA6AAUgACACOgAEIAAgATYCAAshAAJAIAEgAxCsAwRAIAAgASADIAIQ3wMiAA0BCwALIAALIgEBfyAAKAIAIgAgAEEfdSICcyACayAAQX9zQR92IAEQbAslACAARQRAQfiPwgBBMhDIBAALIAAgAiADIAQgBSABKAIQEQsACygAIAEgACgCAC0AAEECdCIAQeC8wgBqKAIAIABBzLzCAGooAgAQ5QMLGQEBf0GAgICAeCABayAATyACIAFpQQFGGwslACABIAAtAABBAnQiAEH8tcAAaigCACAAQey1wABqKAIAEOUDCyUAIABBnJvAADYCBCAAIAFBBGpBACABKAIAQYKAgIB4Rhs2AgALIQAgAEHwosAANgIEIAAgAUEBakEAIAEtAABBAkYbNgIACyUAIAEgAC0AAEECdCIAQZDZwABqKAIAIABBgNnAAGooAgAQ5QMLJQAgAEGwvsAANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAshACAAQYTGwAA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgASAALQAAQQJ0IgBB+PvAAGooAgAgAEHo+8AAaigCABDlAwslACAAQYDhwAA2AgQgACABQQRqQQAgASgCAEGCgICAeEYbNgIACyEAIABBsOjAADYCBCAAIAFBAWpBACABLQAAQQJGGzYCAAshACAAQbSOwQA2AgQgACABQQFqQQAgAS0AAEECRhs2AgALJQAgAEHEicEANgIEIAAgAUEEakEAIAEoAgBBgoCAgHhGGzYCAAslACABIAAtAABBAnQiAEGMosEAaigCACAAQfyhwQBqKAIAEOUDCyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCABKAIQEQcACyMAIABFBEBB+I/CAEEyEMgEAAsgACACIAMgBCAB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BBD1AyILBEACQEGF5cIALQAAGkGACEEEEPUDIghFDQJBheXCAC0AABpBgAhBBBD1AyIERQ0AQYXlwgAtAAAaQYAIQQQQ9QMiDkUNAkGF5cIALQAAGkGACEEEEPUDIgxFDQBBheXCAC0AABpBgAhBBBD1AyISRQ0CIANCADcDqAIgA0EBNgLoASADQQA6AOQBIANBADoA4gEgA0EAOgDgASADQTQ7AdwBIANBADYC2AEgAyASNgLUASADQoCAgICAIDcCzAEgAyAMNgLIASADQoCAgICAIDcDwAEgA0KAgICAwAA3A7gBIANBIzsBtAEgA0EANgKwASADIA42AqwBIANCgICAgIAgNwKkASADIAQ2AqABIANCgICAgIAgNwOYASADQoCAgIDAADcDkAEgA0EfOwGMASADQQA2AogBIAMgCDYChAEgA0KAgICAgCA3AnwgAyALNgJ4IANCgICAgIAgNwNwIANCgICAgMAANwNoIANBwAJqQgA3AwAgA0G4AmpCADcDACADQbACakIANwMAIANB/AFqQQA2AgAgA0H0AWpCADcCACADQgA3AuwBIANC1uuC7ur9ifXgADcDgAIgA0LP1tO+0ser2UI3A4gCIANCADcDkAIgA0L56tDQ58mh5OEANwOYAiADQgA3A6ACIANBADYCyAIgA0IANwPQAiADIAY2AtgCIANBADYC5AIgA0EINgKUAyADQoCAgIAQNwLcAiADQoGAgIDAADcCjAMgA0EANgKIAyADQoCAgIAQNwPoAiADQgA3A/ACIANCBDcD+AIgA0KAgICAEDcDgAMMAwsLQQRBgAhBzIDCABDXAwALQQRBgAhB3IDCABDXAwALIAdBADYCqAcgB0EANgKwByAHQQA6ANwKIAdBADYC2AogByAjNwPQCiAHKQOoByEgIAcpA7AHISMgB0HoA2oiBiADQagDEDsaIAdBCGoQSSAHICM3AyggByAgNwMgIAcgITcDGCAHIA02AgwgByAiPgIQIAcgIkIgiD4CFCAHIAU2AgggB0EwaiAGQagDEDshCCAFQQFxBEBBDCEQIAcoAtgDIhJFDQEgBygC3AMhFwNAIBJB1AFrIQQgEkEEaiEGIBIvAd4WIgNBAnQhC0F/IQUCQAJAA0AgC0UEQCADIQUMAgsgBigCACEOIAVBAWohBSAEQYQCaiEEIAtBBGsh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EwAgAEHMuMAANgIEIAAgATYCAAsTACAAQYi5wAA2AgQgACABNgIACxMAIABBxLnAADYCBCAAIAE2AgALEwAgAEGAusAANgIEIAAgATYCAAsTACAAQbC+wAA2AgQgACABNgIACxMAIABBKDYCBCAAQYjbwAA2AgALEwAgAEGA4cAANgIEIAAgATYCAAshACAAQqTFo/yfjvDjADcDCCAAQqqooLmusOaw6QA3AwALEAAgACgCACAAKAIEIAEQMAsRACAAKAIAIAAoAgQgARDVBAsiACAAQsuH6/rgqLu20AA3AwggAELEr9zF2tKv9bh/NwMACxMAIABBKDYCBCAAQcCFwQA2AgALEwAgAEHEicEANgIEIAAgATYCAAsgACAAQrz8k7Ko16DsTDcDCCAAQuuYqJm2gbKefzcDAAshACAAQriynYTMrpfUQjcDCCAAQu/Dv6KOjcrEoH83AwALIAAgAEKcnaLxgrvwoHU3AwggAELRqsqvpcqt8kA3AwALIQAgAEL7wqCWlfy/yHo3AwggAELmsfLlkYe/ybF/NwMACyIAIABC9auQ77TsvKaWfzcDCCAAQrHh7P30uYbLwgA3AwALIAAgAELNnq77nqC2sEE3AwggAELxps+Y0aSn/gE3AwALIAAgAEK3v8ue+N2SoEM3AwggAEKvuaX0x5vV+zA3AwALIQAgAEKWl7rs79nZo3Q3AwggAEKH+OXLhuPSwtQANwMACyEAIABC/O6Qyq7osdU1NwMIIABC2OvVj+a1zN2OfzcDAAshACAAQrzprN2Y1v7ui383AwggAEKk3Nqt0/nNwEU3AwALIQAgAELl6obQ6cP/7Xk3AwggAEL30OLk1cPQ6ad/NwMACyEAIABC5sHsgPKk3YtlNwMIIABChu7u8+efmIeefzcDAAshACAAQs7Is8mT6a+2pX83AwggAELt66KMv7HLkg83AwALIgAgAEKcrtGn56WAwMIANwMIIABC16rLiaf+wYLHADcDAAsiACAAQt3+weC9o+rogn83AwggAEKX2/aYrfP7zY5/NwMACyEAIABCgsDc4LCv07mnfzcDCCAAQpbk17fDtcOKAzcDAAshACAAQrvV0cb1jfDEkH83AwggAELVi9bpuKS4kXk3AwALIQAgAEKynOer2rGju98ANwMIIABCvfif/8L+hsNVNwMACyIAIABC9tzrg9PWkOr2ADcDCCAAQuamkMP/nOzgtn83AwALIQAgAEKv1ajhhPu04u0ANwMIIABCjM/Fj7KFi+lnNwMACyEAIABCoKPa7PvI3KZuNwMIIABC7fH6/5z2yOa9fzcDAAsRACABIAAoAgAgACgCBBDlAwsWAEGM5cIAIAA2AgBBiOXCAEEBNgIACyAAIABC4+DWofail51WNwMIIABC0Jamw5Le7cA3NwMACyIAIABC7bqtts2F1PXjADcDCCAAQviCmb2V7sbFuX83AwALEwAgAEHYocIANgIEIAAgATYCAAsQACABIAAoAgAgACgCBBA2CxAAIAEoAhwgASgCICAAEEULDgAgACUBIAElASACEA4LYQEBfwJAAkAgAEEEaygCACICQXhxIgNBBEEIIAJBA3EiAhsgAWpPBEAgAkEAIAMgAUEnaksbDQEgABA+DAILQf2UwgBBLkGslcIAEO0CAAtBvJXCAEEuQeyVwgAQ7QIACwsOACAAKAIAJQEQE0EARwsdAQFvIAAoAgAlASABIAIQFyEDEGkiACADJgEgAAtpAQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0ECNgIMIANBmNrCADYCCCADQgI3AhQgAyADQQRqrUKAgICAEIQ3AyggAyADrUKAgICAEIQ3AyAgAyADQSBqNgIQIANBCGogAhCkAwALaQEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQbjawgA2AgggA0ICNwIUIAMgA0EEaq1CgICAgBCENwMoIAMgA61CgICAgBCENwMgIAMgA0EgajYCECADQQhqIAIQpAMAC2kBAX8jAEEwayIDJAAgAyABNgIEIAMgADYCACADQQI2AgwgA0Hs2sIANgIIIANCAjcCFCADIANBBGqtQoCAgIAQhDcDKCADIAOtQoCAgIAQhDcDICADIANBIGo2AhAgA0EIaiACEKQDAAsNACAAKAIAQQEgARBsCw8AQb3BwgBBKyAAEO0CAAvxAgIFfwN+IAApAwAhCSMAQSBrIgMkAEEUIQAgCSIHQugHWgRAIAchCANAIANBDGogAGoiAkEDayAIIAhCkM4AgCIHQpDOAH59pyIEQf//A3FB5ABuIgVBAXQiBkGSxMIAai0AADoAACACQQRrIAZBkcTCAGotAAA6AAAgAkEBayAEIAVB5ABsa0H//wNxQQF0IgRBksTCAGotAAA6AAAgAkECayAEQZHEwgBqLQAAOgAAIABBBGshACAIQv+s4gRWIAchCA0ACwsgB0IJVgRAIAAgA2pBC2ogB6ciAiACQf//A3FB5ABuIgJB5ABsa0H//wNxQQF0IgRBksTCAGotAAA6AAAgAEECayIAIANBDGpqIARBkcTCAGotAAA6AAAgAq0hBwsgCVBFIAdQcUUEQCAAQQFrIgAgA0EMamogB6dBAXRBHnFBksTCAGotAAA6AAALIAFBAUEBQQAgA0EMaiAAakEUIABrEDUgA0EgaiQACw4AIAFBiP3AAEEUEOUDCwwAIAAoAgAgARDZBAsLACAAKAIAIAEQfAsMACAAKAIAIAEQngELDAAgACgCACABEIYBCwwAIAAoAgAgARCXAQsLACAAKAIAIAEQZAsLACAAKAIAIAEQTgsMACAAKAIAIAEQsAELDAAgACgCACABEKIBCwwAIAAoAgAgARCRAQsLACAAKAIAIAEQQAsMACAAKAIAIAEQrQQLDAAgACgCACABEKkDCwwAIAAoAgAgARDFAQsMACAAKAIAIAEQrwQLDAAgACgCACABEIQCCwsAIAAoAgAgARBqCw0AIABBxIPCACABEEULDQAgAEHQiMIAIAEQRQsKACAAIAEgAhBFCw4AIAFBxIrCAEEFEOUDC6gDAgd/AX4gACgCACEAIwBB0ABrIgIkACACQSBqIAAgACgCACgCBBEBACACIAJByABqrUKAgICAsDuENwMoQQEhAyACQQE2AjQgAkG4jMIANgIwIAJCATcCPCACIAIpAyA3AkggAiACQShqNgI4AkAgASgCHCIHIAEoAiAiCCACQTBqEEUNACABLQAUQQRxRQRAQQAhAwwBCyACQRhqIAAgACgCACgCBBEBACACQShqrUKAgICAsDuEIQkgAigCHCEEIAIoAhghBUEAIQBBASEGA0ACQCAAQQFxBEAgBCEBIAUhAAwBCyAFIQAgBCEBA0AgAEUEQEEAIQMMBAsgAkEQaiAAIAEoAhgRAQAgAigCFCEBIAIoAhAhACAGQQFrIgYNAAsLIABBAEchAyAARQ0BIAJBCGogACABKAIYEQEAIAIoAgwhBCACKAIIIQUgAiABNgIsIAIgADYCKEEBIQAgAkEBNgI0IAJBxIzCADYCMCACQgE3AjwgAiAJNwNIIAIgAkHIAGo2AjhBACEGIAcgCCACQTBqEMQERQ0ACwsgAkHQAGokACADCxsBAW8gACgCACUBIAEQAiECEGkiACACJgEgAAsJACAAIAEQGwALKQACfyAAKAIALQAARQRAIAFB9MXCAEEFEDYMAQsgAUH5xcIAQQQQNgsLDQAgAEG8lMIAIAEQRQvOAQEGfyAAKAIAIQIjAEGAAWsiBCQAIAEoAgQhByABKAIAIQYgASgCFCIFIQACQCAFQQRxRQ0AIAVBCHIhACAGDQAgAUKBgICAoAE3AgALIAEgAEEEcjYCFEEAIQADQCAAIARqQf8AaiACQQ9xIgNBMHIgA0HXAGogA0EKSRs6AAAgAEEBayEAIAJBD0sgAkEEdiECDQALIAFBAUGPxMIAQQIgACAEakGAAWpBACAAaxA1IAEgBTYCFCABIAc2AgQgASAGNgIAIARBgAFqJAALDAAgACABKQIANwMACw0AIAFB7K3CAEECEDYLDQAgAEGAscIAIAEQRQsOACABQauwwgBBBRDlAwsOACABQbi8wgBBEhDlAwsNACAAQcy+wgAgARBFCw4AIAFBxL7CAEEFEOUDCxoAIAAgAUGU5cIAKAIAIgBB9QMgABsRAQAACw0AIABB4MPCACABEEULCgAgAiAAIAEQNgu3CQEHfwJAAkAgAiIFIAAiAyABa0sEQCABIAJqIQAgAiADaiEDIAJBEEkNAUEAIANBA3EiBmshCAJAIANBfHEiBCADTw0AIAZBAWsCQCAGRQRAIAAhAgwBCyAGIQcgACECA0AgA0EBayIDIAJBAWsiAi0AADoAACAHQQFrIgcNAAsLQQNJDQAgAkEEayECA0AgA0EBayACQQNqLQAAOgAAIANBAmsgAkECai0AADoAACADQQNrIAJBAWotAAA6AAAgA0EEayIDIAItAAA6AAAgAkEEayECIAMgBEsNAAsLIAQgBSAGayICQXxxIgVrIQNBACAFayEGAkAgACAIaiIAQQNxRQRAIAMgBE8NASABIAJqQQRrIQEDQCAEQQRrIgQgASgCADYCACABQQRrIQEgAyAESQ0ACwwBCyADIARPDQAgAEEDdCIFQRhxIQcgAEF8cSIIQQRrIQFBACAFa0EYcSEJIAgoAgAhBQNAIARBBGsiBCAFIAl0IAEoAgAiBSAHdnI2AgAgAUEEayEBIAMgBEkNAAsLIAJBA3EhBSAAIAZqIQAMAQsgBUEQTwRAAkAgA0EAIANrQQNxIgZqIgIgA00NACABIQQgBgRAIAYhAANAIAMgBC0AADoAACAEQQFqIQQgA0EBaiEDIABBAWsiAA0ACwsgBkEBa0EHSQ0AA0AgAyAELQAAOgAAIANBAWogBEEBai0AADoAACADQQJqIARBAmotAAA6AAAgA0EDaiAEQQNqLQAAOgAAIANBBGogBEEEai0AADoAACADQQVqIARBBWotAAA6AAAgA0EGaiAEQQZqLQAAOgAAIANBB2ogBEEHai0AADoAACAEQQhqIQQgA0EIaiIDIAJHDQALCyACIAUgBmsiBEF8cSIHaiEDAkAgASAGaiIAQQNxRQRAIAIgA08NASAAIQEDQCACIAEoAgA2AgAgAUEEaiEBIAJBBGoiAiADSQ0ACwwBCyACIANPDQAgAEEDdCIFQRhxIQYgAEF8cSIIQQRqIQFBACAFa0EYcSEJIAgoAgAhBQNAIAIgBSAGdiABKAIAIgUgCXRyNgIAIAFBBGohASACQQRqIgIgA0kNAAsLIARBA3EhBSAAIAdqIQELIAMgAyAFaiIATw0BIAVBB3EiBARAA0AgAyABLQAAOgAAIAFBAWohASADQQFqIQMgBEEBayIEDQALCyAFQQFrQQdJDQEDQCADIAEtAAA6AAAgA0EBaiABQQFqLQAAOgAAIANBAmogAUECai0AADoAACADQQNqIAFBA2otAAA6AAAgA0EEaiABQQRqLQAAOgAAIANBBWogAUEFai0AADoAACADQQZqIAFBBmotAAA6AAAgA0EHaiABQQdqLQAAOgAAIAFBCGohASADQQhqIgMgAEcNAAsMAQsgAyAFayICIANPDQAgBUEDcSIBBEADQCADQQFrIgMgAEEBayIALQAAOgAAIAFBAWsiAQ0ACwsgBUEBa0EDSQ0AIABBBGshAQNAIANBAWsgAUEDai0AADoAACADQQJrIAFBAmotAAA6AAAgA0EDayABQQFqLQAAOgAAIANBBGsiAyABLQAAOgAAIAFBBGshASACIANJDQALCwsJACAAQQA2AgAL3zYCHX8BfiMAQYABayIGJAAgBkEoaiAAIAAoAgAoAgQRAQAgBiAGKAIsIgI2AjQgBiAGKAIoIgQ2AjACQAJAAkACQAJAIAEiDi0AFEEEcUUEQEEBIRUgBkEBNgJgIAZBuIzCADYCXCAGQgE3AmggBiAGQTBqrUKAgICAsDuENwNAIAYgBkFAazYCZCABKAIcIAEoAiAgBkHcAGoQRQ0FIAZBIGogBigCMCAGKAI0KAIYEQEAIAYoAiAiAgRAIAYoAiQhASAOKAIcQcyMwgBBDCAOKAIgKAIMEQIADQYgBkEYaiACIAEoAhgRAQAgBkE4aq1CgICAgLA7hCEfIAYoAhhBAEchBwNAIAZBEGogAiABKAIYEQEAIAYoAhQgBigCECEIIAYgATYCPCAGIAI2AjggDigCHEHYjMIAQQEgDigCICgCDBECAA0HIAZBADoATCAGIAM2AkQgBiAHNgJAIAYgDjYCSCAGQQE2AmAgBkG4jMIANgJcIAZCATcCaCAGIB83A1AgBiAGQdAAajYCZCAGQUBrQZyLwgAgBkHcAGoQRQ0HIANBAWohAyEBIAgiAg0ACwsCQCAAKAIEIgJBA0cEQCAAQQRqIQAMAQsgACAAKAIAKAIYEQQAIgBFDQIgACgCACECCyACQQJHDQQgBkEANgJIIAZCgICAgBA3AkAgBkHoiMIANgJ8IAZBAzoAdCAGQiA3AmwgBkEANgJkIAZBADYCXCAGIAZBQGs2AnggBkHcAGohAiMAQaABayIDJAACfwJAAkACQAJAAkACfwJAAkACQAJAIAAoAgBBAWsOAgABAgsgAkHFl8IAQRIQ5QMMCQsgAC0AFEEDRwRAIAMgAEEEajYCOCADQThqIQQjAEEgayIBJAACQAJAAkACQAJAAkACQAJAIABBFGoiCC0AAEEBaw4DAgUBAAsgCEECOgAAIAQoAgAgBEEANgIARQ0CQZHlwgAtAAAhBEGR5cIAQQE6AAAgASAEOgAHIARBAUYNA0GR5cIAQQA6AAAgCEEDOgAACyABQSBqJAAMBQsgAUEANgIYIAFBATYCDCABQYSowgA2AggMAwtBmKDCABCuBAALIAFCADcCFCABQoGAgIDAADcCDCABQbCfwgA2AgggAUEHaiABQQhqEIoDAAsgAUEANgIYIAFBATYCDCABQcSowgA2AggLIAFCBDcCECABQQhqQcygwgAQpAMACwsgACgCDCEBIAIoAhRBBHEiCEUNASAAKAIIDAILIAJBsJfCAEEVEOUDDAcLIAEgACgCECIESQ0BIAEgBGshASAAKAIIIARBDGxqCyERIANBgICAgHg2AgwgA0Gol8IAKQMANwIQIAMgCEECdiIAOgAYIAMgADoALCADQQA2AiggAyACNgIcIANB6JfCADYCJCADIANBDGo2AiAgAUUNAiARIAFBDGxqIRggA0E8aiETIANBhAFqIRQDQAJAIBEoAggiAEUEQCADQQA2AmQgAyADQRxqNgJgIANBAzYCOCADQQI2AoABIANB4ABqIANBOGogA0GAAWpBACADQQAgAxAiIAMoAmAiASABKAIMQQFqNgIMRQ0BDAcLIABBLGwhGSARKAIEIRpBACEWA0AgA0EANgI0IAMgA0EcajYCMAJAIBYgGmoiD0EgaigCAEGAgICAeEYEQCADQQM2AjgMAQsgA0GAAWoiEiAPQSRqKAIAIhsgD0EoaigCACIcED1BAiEAAkAgAygCgAENACADKAKEASEJIAMoAogBIQEjAEEgayILJAAjAEHgAGsiByQAIAdBEGogCSABQfC6wgBBBhAhAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBygCEEUEQANAIAdB1ABqIAdBEGoQLCAHKAJUIgBBAUYNAAsCQAJAIABBAWsOAgQBAAsgByAHKQJYNwIIIAdBATYCBAwCCyAHQQA2AgQMAQsgB0EYaiEAIAcoAkwhAiAHKAJIIQQgBygCRCEIIAcoAkAhBSAHKAI0QX9HBEAgB0EEaiAAIAUgCCAEIAJBABBWDAELIAdBBGogACAFIAggBCACQQEQVgsgBygCBEUNAgJAIAcoAggiBEEGaiIARQ0AIAAgAU8EQCAAIAFGDQEMEQsgACAJaiwAAEG/f0wNEAsgASAJaiEKIAAgCWohAANAAkAgACAKRg0AAn8gACwAACICQQBOBEAgAkH/AXEhAiAAQQFqDAELIAAtAAFBP3EhBSACQR9xIQggAkFfTQRAIAhBBnQgBXIhAiAAQQJqDAELIAAtAAJBP3EgBUEGdHIhBSACQXBJBEAgBSAIQQx0ciECIABBA2oMAQsgCEESdEGAgPAAcSAALQADQT9xIAVBBnRyciICQYCAxABGDQEgAEEEagshACACQUBqQQdJIAJBMGtBCklyDQEMBAsLIARFBEBBACEBDAQLIAEgBE0EQCABIARGDQMMAgsgBCAJaiwAAEG/f0wNASAEIQEMAgsACyAJIAFBACAEQbS7wgAQ7AMACwJAAkAgAUEDTwRAAkACQAJAQbixwgAgCUEDENQCBEAgCS8AAEHanAFGDQEgAUEDRg0GIAkoAABB377p8gRHDQZBfCECQQQhACABQQVPDQJBBCEBDAULQQMhAEF9IQIgAUEDRgRAQQMhAQwFCyAJLAADQb9/Sg0EIAkgAUEDIAFBjLLCABDsAwALIAksAAJBv39MDQFBAiEAQX4hAgwDCyAJLAAEQb9/Sg0CIAkgAUEEIAFB7LHCABDsAwALIAkgAUECIAFB/LHCABDsAwALQQIhACABQQJHDQIgCS8AAEHanAFHBEBBAiEBDAMLQX4hAkECIQELIAAgCWoiBCABIAJqIghqIRAgCCEAIAQhAgJAA0AgAARAIABBAWshACACLAAAIAJBAWohAkEATg0BDAILCyAIRQ0AAn8gBCwAACIAQQBOBEAgAEH/AXEhACAEQQFqDAELIAQtAAFBP3EhBSAAQR9xIQIgAEFfTQRAIAJBBnQgBXIhACAEQQJqDAELIAQtAAJBP3EgBUEGdHIhBSAAQXBJBEAgBSACQQx0ciEAIARBA2oMAQsgAkESdEGAgPAAcSAELQADQT9xIAVBBnRyciEAIARBBGoLIQICQCAAQcUARgRAQQAhCgwBCyAAQYCAxABGDQFBACEKA0AgAEEwa0EJSw0CQQAhBQNAIABBMGsiDUEKTwRAIAUEQANAIAIgEEYNBgJ/IAIsAAAiAEEATgRAIABB/wFxIQAgAkEBagwBCyACLQABQT9xIQwgAEEfcSENIABBX00EQCANQQZ0IAxyIQAgAkECagwBCyACLQACQT9xIAxBBnRyIQwgAEFwSQRAIAwgDUEMdHIhACACQQNqDAELIA1BEnRBgIDwAHEgAi0AA0E/cSAMQQZ0cnIiAEGAgMQARg0HIAJBBGoLIQIgBUEBayIFDQALCyAKQQFqIQogAEHFAEcNAgwDCyAFrUIKfiIfQiCIpw0DIAIgEEYgH6ciACANaiIFIABJcg0DAn8gAiwAACIAQQBOBEAgAEH/AXEhACACQQFqDAELIAItAAFBP3EhDCAAQR9xIQ0gAEFfTQRAIA1BBnQgDHIhACACQQJqDAELIAItAAJBP3EgDEEGdHIhDCAAQXBJBEAgDCANQQx0ciEAIAJBA2oMAQsgDUESdEGAgPAAcSACLQADQT9xIAxBBnRyciEAIAJBBGoLIQIgAEGAgMQARw0ACwsMAQsgECACayEQDAgLIAFBAk0NAQsgCS8AAEHfpAFHDQEgCSwAAiICQb9/TA0DIAlBAmohCEF+IQoMBQtBAiEAQQAhCiABQQJHDQcgCS0AAEHSAEYNAQwICyAJLQAAQdIARw0CIAEhAAsgCSwAASICQb9/SgRAIAlBAWohCEF/IQogACEBDAMLIAkgAEEBIABBkLXCABDsAwALIAkgAUECIAFBoLXCABDsAwALQQMhAEEAIQogAUEDRg0EQdC0wgAgCUEDENQCDQMgCSwAAyICQb9/SgRAIAlBA2ohCEF9IQoMAQsgCSABQQMgAUGAtcIAEOwDAAsgAkHBAGtB/wFxQRlLDQEgASAKaiEKQQAhAANAIAAgCkcEQCAAIAhqIABBAWohACwAAEEATg0BDAMLCyAHQSBqQgA3AgAgB0IANwIYIAcgCjYCFCAHIAg2AhACQCAHQRBqQQAQH0UEQCAHLQAUIQUCQCAHKAIQIgJFDQAgBygCGCIAIAcvABUgB0EXai0AAEEQdHJBCHQgBXIiBU8NAiAAIAJqLQAAQcEAa0H/AXFBGk8NAiAHKAIcIQQgB0IANwIgIAcgBDYCHCAHIAA2AhggByAFNgIUIAcgAjYCECAHQRBqQQAQHw0KIActABQhBSAHKAIQIgJFDQAgBygCGCEAIAcvABUgB0EXai0AAEEQdHJBCHQgBXIhBQwCCyAFQQFxIQoMBAsMCAsCQAJAIABFDQAgACAFTwRAIAAgBUYNAQwCCyAAIAJqLAAAQb9/TA0BCyAFIABrIRAgACACaiECQQAhBAwBCyACIAUgACAFQZC2wgAQ7AMACwJAAkAgEEUEQEEAIRAMAQtBLiEFQQAhDSACLQAAQS5HDQEgAiAQaiEdIAIhAANAAn8gBcBBAEgEQCAALQABQT9xIRcgBUEfcSEMIAVB/wFxIh5B3wFNBEAgDEEGdCAXciEFIABBAmoMAgsgAC0AAkE/cSAXQQZ0ciEFIB5B8AFJBEAgBSAMQQx0ciEFIABBA2oMAgsgDEESdEGAgPAAcSAALQADQT9xIAVBBnRyciIFQYCAxABGDQMgAEEEagwBCyAFQf8BcSEFIABBAWoLIQACQCAFQd///wBxQcEAa0EaSSAFQTBrQQpJciAFQSFrQQ9Jcg0AAkAgBUE6aw4nAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAAsgBUH7AGtBA0sNAwsgACAdRg0BIAAtAAAhBQwACwALQQEhDSABIQAMBQsgASEAQQEMAwtBACEKCyABIQALQQAhCEEAIQRBACENQQELIQJBACEQCyALIBA2AhwgCyACNgIYIAsgADYCFCALIAk2AhAgCyAKNgIMIAsgCDYCCCALIAQ2AgQgCyANNgIAIAdB4ABqJAAMAgsgCSABIAAgAUGku8IAEOwDAAtBwLXCAEE9IAdB1ABqQbC1wgBBgLbCABCgAgALAkAgCygCAARAIBIgCykCADcCACASQRhqIAtBGGopAgA3AgAgEkEQaiALQRBqKQIANwIAIBJBCGogC0EIaikCADcCAAwBCyASQQI2AgALIAtBIGokACADKAKAASIAQQJGDQAgA0H4AGogFEEYaigCADYCACADQfAAaiAUQRBqKQIANwMAIANB6ABqIBRBCGopAgA3AwAgAyAUKQIANwNgCyATIAMpA2A3AgAgE0EYaiADQfgAaigCADYCACATQRBqIANB8ABqKQMANwIAIBNBCGogA0HoAGopAwA3AgAgAyAcNgJcIAMgGzYCWCADIAA2AjgLIA9BEGooAgAiAEECRwRAIAMgD0EYaikCADcChAELIAMgADYCgAEgA0EwaiADQThqIANBgAFqIA8oAgAgD0EEaigCACAPQQhqKAIAIA9BDGooAgAQIiADKAIwIgEgASgCDEEBajYCDA0HIBkgFkEsaiIWRw0ACwsgGCARQQxqIhFHDQALDAELIAQgAUHYl8IAEKoEAAsgAygCDCIAQYCAgIB4Rg0AIABFDQEgAygCECAAQQEQpwRBAAwDCyADLQAQQQNHDQAgAygCFCIAKAIAIQEgAEEEaigCACICKAIAIgQEQCABIAQRAwALIAIoAgQiBARAIAEgBCACKAIIEKcECyAAQQxBBBCnBAtBAAwBCwJAIAMoAgwiAEGAgICAeEcEQCAARQ0BIAMoAhAgAEEBEKcEQQEMAgsgAy0AEEEDRw0AIAMoAhQiACgCACEBIABBBGooAgAiAigCACIEBEAgASAEEQMACyACKAIEIgQEQCABIAQgAigCCBCnBAsgAEEMQQQQpwQLQQELIANBoAFqJAANAiAGQdgAaiAGQcgAaigCADYCACAGIAYpAkA3A1ACQAJAIA4oAhxB2YzCAEECIA4oAiAoAgwRAgANAAJAAkAgBigCWEEQTwRAQduMwgAgBigCVEEQENQCRQ0BCyAGQQA2AmwgBkEBNgJgIAZB/IzCADYCXCAGQgQ3AmQgDigCHCAOKAIgIAZB3ABqEMQERQ0BDAILIwBBQGoiCCQAIAhBATYCECAIQQA2AgwgBkHQAGoiBCgCBCEDAkACQCAEKAIIIgBBAU0EQCAAQQFHDQEMAgsgA0EBaiwAAEG/f0oNAQtBiIbCAEEqQbCHwgAQ7QIACyAIIAhBEGo2AjwgCEEBNgI4IAhBADYCMCAIIAhBDGo2AjRBACECIAhBMGoiBygCBCEBAkACQAJAIAcoAgBBAWsOAgECAAsgASgCACECDAELIAEoAgAiAUF/RwRAIAFBAWohAgwBCyMAQSBrIgAkACAAQQA2AhggAEEBNgIMIABB1MbCADYCCCAAQgQ3AhAgAEEIakHohcIAEKQDAAsgBygCDCEFIAAhAQJAAkACQCAHKAIIQQFrDgIBAgALIAUoAgAiAUF/RwRAIAFBAWohAQwCCyMAQSBrIgAkACAAQQA2AhggAEEBNgIMIABBiMfCADYCCCAAQgQ3AhAgAEEIakH4hcIAEKQDAAsgBSgCACEBCwJAIAEgAk8EQCAAIAFPDQEgASAAQbSDwgAQqwQACyACIAFBtIPCABCsBAALIAggATYCBCAIIAI2AgAgCCgCBCEBIAQgCCgCACICNgIIIAggBDYCHCAIIAE2AiAgCCAAIAFrNgIkIAhBhI3CADYCKCAIQYWNwgA2AiwgCCABIANqNgIYIAggAiADajYCFCAIQRRqIgVCgYCAgBA3AgACQCAFKAIQIgtFBEAgBSgCGCIHIAUoAhQiAWsiACAFKAIIIgIoAgAgAigCCCIEa0sEQCACIAQgABCTASACKAIIIQQLIAEgB0cEQCACKAIEIQkCQCAAQQNxIgNFBEAgASEADAELIAEhAANAIAQgCWogAC0AADoAACAEQQFqIQQgAEEBaiEAIANBAWsiAw0ACwsgBSABIAdrQXxNBH8gBCAJaiEJQQAhAQNAIAEgCWoiBSAAIAFqIgMtAAA6AAAgBUEBaiADQQFqLQAAOgAAIAVBAmogA0ECai0AADoAACAFQQNqIANBA2otAAA6AAAgAUEEaiEBIANBBGogB0cNAAsgASAEaiEEIAAgAWoFIAALNgIUCyACIAQ2AggMAQsCQCAFKAIMIgEgBSgCCCIHKAIIIgBGBEAgBSgCGCEEIAUoAhQhAwwBCyABIABrIQkgBygCBCAAaiEAIAUoAhghBCAFKAIUIQMDQCADIARGDQIgACADLQAAOgAAIAUgA0EBaiIDNgIUIAcgBygCCEEBajYCCCAAQQFqIQAgCUEBayIJDQALCwJAIAMgBEYNACAEIANrIgAgBygCACABIAtqIgJrSwRAIAcgAiAAEJMBCyAHKAIEIgkgACABaiICaiABIAlqIAsQ1gQgBSACNgIMIAIgBygCCCIJRgRAIAIhAQwBCyAHKAIEIAlqIQAgASAEaiAJayADayEJA0AgAyAERg0CIAAgAy0AADoAACAFIANBAWoiAzYCFCAHIAcoAghBAWo2AgggAEEBaiEAIAlBAWsiCQ0ACyACIQELQQAhCQJAIAQgA2siCkEASA0AIAMgBEYiEA0BQQAhAEGF5cIALQAAGkEBIQkgCkEBEPUDIgJFDQAgCkEDcSEJIAMgBGtBfE0EQCAKQXxxIREDQCAAIAJqIgQgACADaiIPLQAAOgAAIARBAWogD0EBai0AADoAACAEQQJqIA9BAmotAAA6AAAgBEEDaiAPQQNqLQAAOgAAIBEgAEEEaiIARw0ACyAAIANqIQMLIAkEQANAIAAgAmogAy0AADoAACAAQQFqIQAgA0EBaiEDIAlBAWsiCQ0ACwsgBSADNgIUAkAgAEUNACAAIAcoAgAgASALaiIEa0sEQCAHIAQgABCTAQsgBygCBCIDIAAgAWoiBGogASADaiALENYEIAUgBDYCDCAEIAcoAggiA0YNACADIAFrIQEgBygCBCADaiEDIAIhBANAIABFDQEgAyAELQAAOgAAIAcgBygCCEEBajYCCCAEQQFqIQQgA0EBaiEDIAEgAEEBayIARw0ACwsgEA0BIAIgCkEBEKcEDAELIAkgCkGAjsIAENcDAAsgCCgCJCEAAkACQAJAIAgoAhggCCgCFEcEQCAARQ0DIAgoAhwiAUEIaiEEIAgoAiAiAyABKAIIIgJHDQEMAgsgAEUNAiAIKAIcIgFBCGohBCAIKAIgIgMgASgCCCICRg0BCyABKAIEIgEgAmogASADaiAAENYECyAEIAAgAmo2AgALIAhBQGskAAsgBkEIaiEIIAYoAlQhBEEAIQMCQCAGKAJYIgciAEUNACAAIARqIQADQAJAIAAiAkEBayIALAAAIgFBAEgEQCABQT9xAn8gAkECayIALQAAIgHAIgVBQE4EQCABQR9xDAELIAVBP3ECfyACQQNrIgAtAAAiAcAiBUFATgRAIAFBD3EMAQsgBUE/cSACQQRrIgAtAABBB3FBBnRyC0EGdHILQQZ0ciEBCwJAIAFBIEYgAUEJa0EFSXINACABQYABSQ0BAkACQAJAAkAgAUEIdiIFQRZrDhsDBQUFBQUFBQUFAQUFBQUFBQUFBQUFBQUFBQACCyABQYDgAEcNBAwDCyABQf8BcUHz4cIAai0AAEECcUUNAwwCCyAFDQIgAUH/AXFB8+HCAGotAABBAXENAQwCCyABQYAtRw0BCyAAIARHDQEMAgsLIAIgBGshAwsgCCADNgIEIAggBDYCACAGKAIMIgAgB00EQCAARSAAIAdPckUEQCAAIARqLAAAQb9/TA0HCyAGIAA2AlgLIAZBATYCYCAGQbiMwgA2AlwgBkIBNwJoIAYgBkHQAGqtQoCAgIDAO4Q3A0AgBiAGQUBrNgJkIA4oAhwgDigCICAGQdwAahBFRQ0BCyAGKAJQIgBFDQYgBigCVCAAQQEQpwQMBgsgBigCUCIARQ0EIAYoAlQgAEEBEKcEDAQLIAQgDiACKAIMEQAAIRUMBAtBtIvCAEEYQaiMwgAQwwIAC0GQicIAQTcgBkE4akGAicIAQbSKwgAQoAIAC0HcisIAQTBBjIvCABDtAgALQQAhFQsgBkGAAWokACAVC7sHAgR/AX4CfyMAQSBrIgIkAAJAAkACQAJAAkACQCAALQAAQQFrDgMBAgMACyACIAAoAgQ2AgQgAkEIaiIAIAFB8Z3CAEECEKYDIABBhJ7CAEEEIAJBBGpB9J3CABBvIAJBKToAE0GYnsIAQQQgAkETakGInsIAEG9BheXCAC0AABpBFEEBEPUDIgBFDQQgAEEQakHWp8IAKAAANgAAIABBCGpBzqfCACkAADcAACAAQcanwgApAAA3AAAgAkEUNgIcIAIgADYCGCACQRQ2AhRBrJ7CAEEHIAJBFGpBnJ7CABBvEK4CIQAgAigCFCIBRQ0DIAIoAhggAUEBEKcEDAMLIAIgAC0AAToACCACQRRqIgAgASgCHEGznsIAQQQgASgCICgCDBECADoACCAAIAE2AgQgAEEAOgAJIABBADYCACACQQhqIQUjAEFAaiIBJAAgACgCACEEIAACf0EBIAAtAAgNABogACgCBCIDLQAUQQRxRQRAQQEgAygCHEH/w8IAQYnEwgAgBBtBAkEBIAQbIAMoAiAoAgwRAgANARogBSADQZSewgAoAgARAAAMAQsgBEUEQEEBIAMoAhxBisTCAEECIAMoAiAoAgwRAgANARoLIAFBAToAFyABQSBqIANBCGopAgA3AwAgAUEoaiADQRBqKQIANwMAIAFBMGogA0EYaigCADYCACABIAMpAhw3AgggAykCACEGIAFB4MPCADYCOCABIAY3AxggASABQRdqNgIQIAEgAUEIajYCNEEBIAUgAUEYakGUnsIAKAIAEQAADQAaIAEoAjRBhMTCAEECIAEoAjgoAgwRAgALOgAIIAAgBEEBajYCACABQUBrJAAgACIBLQAIIQMCQCABKAIAIgRFBEAgAyEADAELQQEhAAJAIANBAXFFBEAgBEEBRw0BIAEtAAlFDQEgASgCBCIDLQAUQQRxDQEgAygCHEGMxMIAQQEgAygCICgCDBECAEUNAQsgAUEBOgAIDAELIAEgASgCBCIAKAIcQfnAwgBBASAAKAIgKAIMEQIAIgA6AAgLIABBAXEhAAwCCyAAKAIEIQAgAkEUaiIDIAFBt57CAEEFEKYDIANBmJ7CAEEEIABBCGpBiJ7CABBvQayewgBBByAAQbyewgAQbxCuAiEADAELIAIgACgCBCIANgIUIAFB3J7CAEEGQZiewgBBBCAAQQhqQYiewgBB4p7CAEEFIAJBFGpBzJ7CABDDASEACyACQSBqJAAgAAwBC0EBQRRB8JLCABDXAwALCwgAIAAlARAICwgAIAAlARALCwgAIAAlARAPCwQAQQALAgALC43iAhAAQYCAwAALqRBkZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBEaXNwbGF5L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAKAAQAGsAAACiAAAAGQAAAAMAAAAMAAAABAAAAAQAAAADAAAADAAAAAQAAAAFAAAABAAAAKQAEAAGAAAABwAAAAgAAAAGAAAACQAAAAoAAAAoAAAABAAAAAsAAAAKAAAAKAAAAAQAAAAMAAAACwAAAOAAEAANAAAADgAAAA8AAAANAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBpbnZhbGlkIE9uY2Ugc3RhdGU4ARAAPAAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvc3RkL3NyYy9zeXMvc3luYy9vbmNlL25vX3RocmVhZHMucnN8ARAAfAAAADUAAAASAAAAZm9yZ2UtaW50ZXJuYWwtcnMvc3JjL3NvcnQucnMAAAAIAhAAHQAAAB0AAAAdAAAARXhwZWN0ZWQgIGFjdGl2ZSBzcGxhdHMgYnV0IGdvdCA4AhAACQAAAEECEAAXAAAACAIQAB0AAAA3AAAAFQAAAAgCEAAdAAAAXwAAAB0AAAAIAhAAHQAAAHcAAAAdAAAACAIQAB0AAAB3AAAAFQAAAAgCEAAdAAAAaAAAABQAAABmb3JnZS1pbnRlcm5hbC1ycy9zcmMvbGliLnJzuAIQABwAAAATAAAAPQAAALgCEAAcAAAAJAAAACAAAABudW1TcGxhdHNwYWNrZWRTcGxhdHMAAAAYAAAABAAAAAQAAAAZAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZQC4AhAAHAAAADAAAABXAAAAuAIQABwAAAAvAAAAYwAAAAEAAAAAAAAAGgAAALgCEAAcAAAAOwAAAD8AAAAbAAAAHAAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvc3RkL3NyYy90aHJlYWQvbG9jYWwucnOMAxAAcAAAABQBAAAZAAAAjAMQAHAAAAATAgAAJgAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzABwEEABrAAAAogAAABkAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJzAAAAmAQQAG0AAAAqAgAAEQAAAGZvcmdlLWludGVybmFsLXJzL3NyYy9saWIucnMYBRAAHAAAAFUAAAAtAAAAAQAAAAAAAAAYBRAAHAAAAEcAAAA7AAAAHQAAAAQAAAAEAAAAGQAAAGNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUAGAUQABwAAABFAAAAWAAAABgFEAAcAAAAZwAAADMAAAAYBRAAHAAAAHIAAAAtAAAAGAUQABwAAACKAAAAKAAAAGRlc2NyaXB0aW9uKCkgaXMgZGVwcmVjYXRlZDsgdXNlIERpc3BsYXkeAAAADAAAAAQAAAAEAAAAHgAAAAwAAAAEAAAABQAAAAQAAAAABhAAHwAAAAcAAAAgAAAABgAAACEAAABmb3JnZS1pbnRlcm5hbC1ycy9zcmMvcmF5Y2FzdC5yczwGEAAgAAAAIQAAABcAAAA8BhAAIAAAAG4AAAAXAAAAPAYQACAAAAB0AAAAHAAAADwGEAAgAAAAdgAAABwAAAA8BhAAIAAAAHsAAAAgAAAAd2xnL3NyYy93bGcwL2RlY29kZS5ycwAArAYQABYAAAA5AAAAGgAAAKwGEAAWAAAAOgAAABoAAACsBhAAFgAAADsAAAAaAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZawGEAAWAAAAPAAAABIAAACsBhAAFgAAAEMAAAAaAAAArAYQABYAAABEAAAAGgAAAKwGEAAWAAAARQAAABoAAACsBhAAFgAAAHUAAAAPAAAArAYQABYAAAB3AAAADwAAAKwGEAAWAAAAfAAAABoAAACsBhAAFgAAAH0AAAAaAAAArAYQABYAAAB+AAAAGgAAAKwGEAAWAAAAfwAAABoAAAAiAAAABAAAAAQAAAAjAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZXdsZy9zcmMvd2xnMC9tb2QucnMAAPcHEAATAAAASAAAACcAAAD3BxAAEwAAAJwAAAAnAEG0kMAAC/ZsAQEAAQEBAQEBAAAAAAAAAAEBAQABAQEAAgAAAAAAAAABAQEAAQEBAVVuc3VwcG9ydGVkIFdMRyB2ZXJzaW9uAFwIEAAXAAAASW52YWxpZCBXTEcgc2lnbmF0dXJlAAAAfAgQABUAAAD3BxAAEwAAAPgAAAAnAAAAV2xnMEhlYWRlcmNlbnRlcl9zY2FsZWNlbnRlcl9vZmZzZXRsbl9zY2FsZV9taW5sbl9zY2FsZV9tYXhudW1fc3BsYXRzbWF4X3NoX29yZGVybnVtX3NoX3NwbGF0cwAAtggQAAwAAADCCBAADQAAAM8IEAAMAAAA2wgQAAwAAADnCBAACgAAAPEIEAAMAAAA/QgQAA0AAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwBECRAAawAAAKIAAAAZAAAAVW5zdXBwb3J0ZWQgV0xHICFzZXR0aW5ncy5lbmFibGVfc3BsaXRfZGltcwDACRAAKwAAAHdsZy9zcmMvd2xnMC9kZWNvZGUucnMAAPQJEAAWAAAAnQAAACAAAABVbnN1cHBvcnRlZCBXTEcgIXNldHRpbmdzLmVuYWJsZV9zcGxpdF9jZW50ZXJfYnl0ZXMAHAoQADMAAAD0CRAAFgAAAKAAAAAmAAAA9AkQABYAAADYAAAAKAAAAEludmFsaWQgV0xHIGRhdGEgc2l6ZQAAAHgKEAAVAAAA9AkQABYAAADhAAAAHAAAAPQJEAAWAAAA4gAAABwAAAD0CRAAFgAAAOMAAAAcAAAA9AkQABYAAADcAAAAHAAAAGRlc2NyaXB0aW9uKCkgaXMgZGVwcmVjYXRlZDsgdXNlIERpc3BsYXlSYXdSTEVDb21wcmVzc2VkUmVzZXJ2ZWQkAAAACAAAAAQAAAAlAAAAJAAAAAgAAAAEAAAAJgAAACUAAAAYCxAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAAIAAAAAgAAAAtAAAALAAAACAAAAAIAAAALgAAAC0AAABUCxAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAADAAAAAQAAAA1AAAANAAAAAwAAAAEAAAANgAAADUAAACQCxAANwAAADgAAAA5AAAAOgAAACsAAAAAAAAACAAAAAQAAAA7AAAAAAAAAAgAAAAEAAAAPAAAADsAAADMCxAANwAAAD0AAAA5AAAAPgAAACsAAAAAAAAABAAAAAQAAAA/AAAAAAAAAAQAAAAEAAAAQAAAAFRvb01hbnlCaXRzbnVtX3JlcXVlc3RlZF9iaXRzbGltaXQAAAAAAAAEAAAABAAAAEEAAABOb3RFbm91Z2hSZW1haW5pbmdCaXRzcmVxdWVzdGVkcmVtYWluaW5nQWNjTG9nSXNaZXJvAAAAAAEAAAABAAAAQgAAAEFjY0xvZ1Rvb0JpZ2dvdG1heAAAAAAAAAQAAAAEAAAAQwAAAEdldEJpdHNFcnJvcgAAAAAEAAAABAAAAEQAAAAAAAAABAAAAAQAAABFAAAAUHJvYmFiaWxpdHlDb3VudGVyTWlzbWF0Y2hleHBlY3RlZF9zdW1zeW1ib2xfcHJvYmFiaWxpdGllc1Rvb01hbnlTeW1ib2xzAAAAAAQAAAAEAAAARgAAAEJsb2NrU2l6ZVRvb0xhcmdlc2l6ZUludmFsaWRCbG9ja3R5cGVOdW1iZXJudW1UYWJsZUlzVW5pbml0aWFsaXplZAAAAAAAAAwAAAAEAAAARwAAAAAAAAAMAAAABAAAAEgAAABHAAAAjA0QADcAAABJAAAAOQAAAEoAAAArAAAAAAAAAAQAAAAEAAAASwAAAFdpbmRvd1Rvb0JpZ1dpbmRvd1Rvb1NtYWxsAAAAAAAABAAAAAQAAABMAAAARnJhbWVEZXNjcmlwdG9yRXJyb3JEaWN0SWRUb29TbWFsbGV4cGVjdGVkTWlzbWF0Y2hlZEZyYW1lU2l6ZUZyYW1lU2l6ZUlzWmVyb0ludmFsaWRGcmFtZVNpemVOb3RFbm91Z2hCeXRlc0luRGljdGlvbmFyeW5lZWRPZmZzZXRUb29CaWdvZmZzZXRidWZfbGVuAAAAAAAEAAAABAAAAE0AAABSZWFkRnJhbWVIZWFkZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAAVwAAAFYAAABgERAAWAAAAFkAAABaAAAAWwAAAFwAAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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ZXJFcnJvcgAAAAAEAAAABAAAAE4AAABGcmFtZUhlYWRlckVycm9yV2luZG93U2l6ZVRvb0JpZwAAAAAEAAAABAAAAE8AAABEaWN0aW9uYXJ5RGVjb2RlRXJyb3IAAAAAAAAABAAAAAQAAABQAAAARmFpbGVkVG9SZWFkQmxvY2tIZWFkZXIAAAAAAAQAAAAEAAAAUQAAAEZhaWxlZFRvUmVhZEJsb2NrQm9keQAAAAAAAAAEAAAABAAAAFIAAABGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAAAAQAAAAEAAAAUwAAAEZTRURlY29kZXJFcnJvcgAAAAAABAAAAAQAAABUAAAARlNFVGFibGVFcnJvclNvdXJjZUlzRW1wdHlOb3RFbm91Z2hCeXRlc0ZvcldlaWdodHNnb3RfYnl0ZXNleHBlY3RlZF9ieXRlcwAAAAAAAAAEAAAABAAAAFUAAABFeHRyYVBhZGRpbmdza2lwcGVkX2JpdHNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c2hhdmVGU0VUYWJsZVVzZWRUb29NYW55Qnl0ZXN1c2VkYXZhaWxhYmxlX2J5dGVzTm90RW5vdWdoQnl0ZXNJblNvdXJjZVdlaWdodEJpZ2dlclRoYW5NYXhOdW1CaXRzTWF4Qml0c1Rvb0hpZ2gAAAAAAQAAAAEAAABWAAAAAAAAAAEAAAABAAAA/wAAAFYAAAD0IhAAAAEAAFkAAAABAQAAWwAAAAIBAABVbnN1cHBvcnRlZE9mZnNldG9mZnNldF9jb2RlWmVyb09mZnNldE5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzAAAAAAAEAAAABAAAAF0AAABFeHRyYUJpdHNiaXRzX3JlbWFpbmluZ01pc3NpbmdDb21wcmVzc2lvbk1vZGVNaXNzaW5nQnl0ZUZvclJsZUxsVGFibGVNaXNz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bEVuY29kaW5nSW52YWxpZENoYXJFbmNvZGluZwAAAAAAAAAEAAAABAAAAEEAAABJbnZhbGlkVGFnRW5jb2RpbmdEZXNlcmlhbGl6ZUFueU5vdFN1cHBvcnRlZFNpemVMaW1pdFNlcXVlbmNlTXVzdEhhdmVMZW5ndGgAAAAAAAQAAAAEAAAANQEAAEN1c3RvbU5vbmVTb21lUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVkAAAAAAAABAAAAAQAAAA2AQAAVG9vTWFueUJpdHNudW1fcmVxdWVzdGVkX2JpdHNsaW1pdE5vdEVub3VnaFJlbWFpbmluZ0JpdHNyZXF1ZXN0ZWRyZW1haW5pbmdBY2NMb2dJc1plcm8AAAAAAAABAAAAAQAAADcBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAA4AQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAAA5AQAARwAAAHAwEAA6AQAASQAAADsBAABKAAAAPAEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABNAAAAUmVhZEZyYW1lSGVhZGVyRXJyb3IAAAAABAAAAAQAAABOAAAARnJhbWVIZWFkZXJFcnJvcldpbmRvd1NpemVUb29CaWcAAAAABAAAAAQAAABPAAAARGljdGlvbmFyeURlY29kZUVycm9yAAAAAAAAAAQAAAAEAAAAUAAAAEZhaWxlZFRvUmVhZEJsb2NrSGVhZGVyAAAAAAAEAAAABAAAAFEAAABGYWlsZWRUb1JlYWRCbG9ja0JvZHlGYWlsZWRUb1JlYWRDaGVja3N1bU5vdFlldEluaXRpYWxpemVkRmFpbGVkVG9Jbml0aWFsaXplRmFpbGVkVG9EcmFpbkRlY29kZWJ1ZmZlckZhaWxlZFRvU2tpcEZyYW1lVGFyZ2V0VG9vU21hbGxEaWN0Tm90UHJvdmlkZWRkaWN0X2lkAAAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzRXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzVG9vTWFueVdlaWdodHNNaXNzaW5nV2VpZ2h0c0xlZnRvdmVySXNOb3RBUG93ZXJPZjJOb3RFbm91Z2hCeXRlc1RvRGVjb21wcmVzc1dlaWdodHNoYXZlRlNFVGFibGVVc2VkVG9vTWFueUJ5dGVzdXNlZGF2YWlsYWJsZV9ieXRlc05vdEVub3VnaEJ5dGVzSW5Tb3VyY2VXZWlnaHRCaWdnZXJUaGFuTWF4TnVtQml0c01heEJpdHNUb29IaWdoAAAAAAAAAAEAAAABAAAAVgAAAAAAAAABAAAAAQAAAD0BAABWAAAAIDQQAD4BAABZAAAAPwEAAFsAAABAAQAAVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZVplcm9PZmZzZXROb3RFbm91Z2hCeXRlc0Zvck51bVNlcXVlbmNlcwAAAAAABAAAAAQAAABdAAAARXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlAAAAQQEAAAwAAAAEAAAAXwAAAEEBAAAMAAAABAAAAEIBAABfAAAAKDUQAEMBAABiAAAAOwEAAGMAAAA8AQAAAAAAABAAAAAIAAAAZAAAAAAAAAAQAAAACAAAAEQBAABkAAAAZDUQAEUBAABnAAAAMgEAAGgAAAAzAQAARgEAABgAAAAEAAAAagAAAEYBAAAYAAAABAAAAEcBAABqAAAAoDUQAEgBAABtAAAAOwEAAG4AAAA8AQAASQEAAAgAAAAEAAAAcAAAAEkBAAAIAAAABAAAAEoBAABwAAAA3DUQAEsBAABzAAAAOwEAAHQAAAA8AQAATAEAABgAAAAEAAAAdgAAAEwBAAAYAAAABAAAAE0BAAB2AAAAGDYQAE4BAAB5AAAAOwEAAHoAAAA8AQAATwEAAAgAAAAEAAAAJQAAAE8BAAAIAAAABAAAACYAAAAlAAAAVDYQACcAAAAoAAAAKQAAACoAAAA8AQAAAAAAAAwAAAAEAAAAewAAAAAAAAAMAAAABAAAAFABAAB7AAAAkDYQAFEBAAB+AAAAOwEAAH8AAAA8AQAAUgEAABQAAAAEAAAAgQAAAFIBAAAUAAAABAAAAFMBAACBAAAAzDYQAFQBAACEAAAAOwEAAIUAAAA8AQAAUmVhZEVycm9yRm91bmRSZXNlcnZlZEJsb2NrAAAAAAAEAAAABAAAAIYAAABCbG9ja1R5cGVFcnJvcgAAAAAAAAQAAAAEAAAAhwAAAEJsb2NrU2l6ZUVycm9yQmxvY2tDb250ZW50UmVhZEVycm9yTWFsZm9ybWVkU2VjdGlvbkhlYWRlcmV4cGVjdGVkX2xlbnJlbWFpbmluZ19ieXRlcwAAAAAEAAAABAAAAIgAAABEZWNvbXByZXNzTGl0ZXJhbHNFcnJvcgAAAAAABAAAAAQAAACJAAAATGl0ZXJhbHNTZWN0aW9uUGFyc2VFcnJvcgAAAAAAAAAEAAAABAAAAIoAAABTZXF1ZW5jZXNIZWFkZXJQYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAiwAAAERlY29kZVNlcXVlbmNlRXJyb3IAAAAAAAQAAAAEAAAAjAAAAEV4ZWN1dGVTZXF1ZW5jZXNFcnJvckludmFsaWRGcmFtZUNvbnRlbnRTaXplRmxhZ01hZ2ljTnVtYmVyUmVhZEVycm9yQmFkTWFnaWNOdW1iZXJGcmFtZURlc2NyaXB0b3JSZWFkRXJyb3JJbnZhbGlkRnJhbWVEZXNjcmlwdG9yV2luZG93RGVzY3JpcHRvclJlYWRFcnJvckRpY3Rpb25hcnlJZFJlYWRFcnJvckZyYW1lQ29udGVudFNpemVSZWFkRXJyb3JTa2lwRnJhbWVtYWdpY19udW1iZXJsZW5ndGgAAAAAAAAEAAAABAAAAI0AAABCYWRNYWdpY051bQAAAAAABAAAAAQAAACOAAAASHVmZm1hblRhYmxlRXJyb3IAAAAAAAAABAAAAAQAAACPAAAARGVjb2RlYnVmZmVyRXJyb3JOb3RFbm91Z2hCeXRlc0ZvclNlcXVlbmNld2FudGVkAAAAAAEAAAABAAAAkAAAAAAAAAABAAAAAQAAAFUBAACQAAAAwDkQAD4BAACSAAAAPwEAAFsAAABAAQAAAAAAAAQAAAAEAAAAkwAAAAAAAAAEAAAABAAAAFYBAACTAAAA/DkQADoBAACVAAAAOwEAAEoAAAA8AQAAVwEAABQAAAAEAAAAlwAAAFcBAAAUAAAABAAAAFgBAACXAAAAODoQAFkBAACaAAAAOwEAAJsAAAA8AQAAAAAAAAwAAAAEAAAAnAAAAAAAAAAMAAAABAAAAFoBAACcAAAAdDoQAFsBAACfAAAAOwEAAKAAAAA8AQAAAAAAAAgAAAAEAAAAoQAAAAAAAAAIAAAABAAAAFwBAAChAAAAsDoQADoBAACjAAAAOwEAAEoAAAA8AQAAXQEAABQAAAAEAAAApQAAAF0BAAAUAAAABAAAAF4BAAClAAAA7DoQAF8BAACoAAAAOwEAAKkAAAA8AQAAAAAAAAwAAAAEAAAAqgAAAAAAAAAMAAAABAAAAGABAACqAAAAKDsQAGEBAACtAAAAOwEAAK4AAAA8AQAARGVjb2RlclN0YXRlSXNGYWlsZWRFeHBlY3RlZEhlYWRlck9mUHJldmlvdXNCbG9jawAAAAAAAAABAAAAAQAAAGIBAABzdGVwc291cmNlAAAAAAAABAAAAAQAAACwAAAARGVjb21wcmVzc0Jsb2NrRXJyb3JNaXNzaW5nQ29tcHJlc3NlZFNpemVNaXNzaW5nTnVtU3RyZWFtcwAAAAAAAAQAAAAEAAAAsQAAAEh1ZmZtYW5EZWNvZGVyRXJyb3JVbmluaXRpYWxpemVkSHVmZm1hblRhYmxlTWlzc2luZ0J5dGVzRm9ySnVtcEhlYWRlck1pc3NpbmdCeXRlc0ZvckxpdGVyYWxzbmVlZGVkAAAAAAAABAAAAAQAAABjAQAAQml0c3RyZWFtUmVhZE1pc21hdGNocmVhZF90aWxEZWNvZGVkTGl0ZXJhbENvdW50TWlzbWF0Y2hkZWNvZGVkAGQBAAAUAAAABAAAALQAAABkAQAAFAAAAAQAAABlAQAAtAAAAMQ8EABmAQAAtwAAADsBAAC4AAAAPAEAAAAAAAAMAAAABAAAALkAAAAAAAAADAAAAAQAAABnAQAAuQAAAAA9EAA6AQAAuwAAADsBAABKAAAAPAEAAGgBAAAYAAAABAAAAL0AAABoAQAAGAAAAAQAAABpAQAAvQAAADw9EABqAQAAwAAAADsBAADBAAAAPAEAAAAAAAAMAAAABAAAAMIAAAAAAAAADAAAAAQAAABrAQAAwgAAAHg9EABsAQAAxQAAADsBAADGAAAAPAEAAElsbGVnYWxMaXRlcmFsU2VjdGlvblR5cGVOb3RFbm91Z2hCeXRlc25lZWRfYXRfbGVhc3QDAAAAAwAAAAoAAAAIAAAA8i4QAPUuEAD4LhAAAi8QAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAAAIPhAAbQAAACoCAAARAAAAYW4gYXJyYXkgb2YgbGVuZ3RoIDQAAAAAAAAAAAEAAABtAQBBtP3AAAv1KAEAAABtAQAAAAAAAAgAAAAEAAAAbgEAAHN0cnVjdCBXbGcwSGVhZGVyIHdpdGggNyBlbGVtZW50cwAAAMw+EAAhAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogaW52YWxpZCBPbmNlIHN0YXRl+D4QADwAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvb25jZS9ub190aHJlYWRzLnJzPD8QAHwAAAA1AAAAEgAAAGZhaWxlZCB0byBmaWxsIHdob2xlIGJ1ZmZlcgDIPxAAGwAAACUAAAACAAAA5D8QAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2RpbmcvYmxvY2tfZGVjb2Rlci5yc0J1ZyBpbiB0aGlzIGxpYnJhcnkA+D8QAGwAAACYAAAAFgAAAFdyb25nIG51bWJlciBvZiBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiAAAIhAEAAaAAAAokAQABQAAAD4PxAAbAAAAK0AAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uID09IHVwcGVyX2xpbWl0X2Zvcl9saXRlcmFscyBhcyB1MzIA+D8QAGwAAACzAAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHUzMjo6ZnJvbShieXRlc19pbl9saXRlcmFsc19oZWFkZXIpICsgYnl0ZXNfdXNlZF9pbl9saXRlcmFsc19zZWN0aW9uICsKICAgICAgICAgICAgdTMyOjpmcm9tKGJ5dGVzX2luX3NlcXVlbmNlX2hlYWRlcikgKyByYXcubGVuKCkgYXMgdTMyID09CiAgICBoZWFkZXIuY29udGVudF9zaXplAAD4PxAAbAAAAMEAAAAJAAAA+D8QAGwAAAC6AAAAFwAAAPg/EABsAAAAiwAAABcAAABIb3cgZGlkIHlvdSBldmVuIGdldCB0aGlzLiBUaGUgZGVjb2RlciBzaG91bGQgZXJyb3Igb3V0IGlmIGl0IGRldGVjdHMgYSByZXNlcnZlZC10eXBlIGJsb2NrAPg/EABsAAAAcAAAABEAAABmYWlsZWQgdG8gZmlsbCB3aG9sZSBidWZmZXIAkEIQABsAAAAlAAAAAgAAAKxCEABkZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBEaXNwbGF5AAAAAAQAAAAEAAAAbwEAAAAAAAAEAAAABAAAAHABAABVdGY4RXJyb3J2YWxpZF91cF90b2Vycm9yX2xlblJhd1JMRUNvbXByZXNzZWRSZXNlcnZlZAAAAAAAAAAEAAAABAAAAEAAAABUb29NYW55Qml0c251bV9yZXF1ZXN0ZWRfYml0c2xpbWl0AAAAAAAABAAAAAQAAABBAAAATm90RW5vdWdoUmVtYWluaW5nQml0c3JlcXVlc3RlZHJlbWFpbmluZ0FjY0xvZ0lzWmVybwAAAAABAAAAAQAAAHEBAABBY2NMb2dUb29CaWdnb3RtYXgAAAAAAAAEAAAABAAAAEMAAABHZXRCaXRzRXJyb3IAAAAABAAAAAQAAAByAQAAAAAAAAQAAAAEAAAARQAAAFByb2JhYmlsaXR5Q291bnRlck1pc21hdGNoZXhwZWN0ZWRfc3Vtc3ltYm9sX3Byb2JhYmlsaXRpZXNUb29NYW55U3ltYm9scwAAAAAEAAAABAAAAEYAAABCbG9ja1NpemVUb29MYXJnZXNpemVJbnZhbGlkQmxvY2t0eXBlTnVtYmVybnVtVGFibGVJc1VuaW5pdGlhbGl6ZWQAAAAAAAAMAAAABAAAAEcAAAAAAAAADAAAAAQAAABzAQAARwAAALREEABKAAAASQAAAHQBAABKAAAAdQEAAAAAAAAEAAAABAAAAEsAAABXaW5kb3dUb29CaWdXaW5kb3dUb29TbWFsbAAAAAAAAAQAAAAEAAAATAAAAEZyYW1lRGVzY3JpcHRvckVycm9yRGljdElkVG9vU21hbGxleHBlY3RlZE1pc21hdGNoZWRGcmFtZVNpemVGcmFtZVNpemVJc1plcm9JbnZhbGlkRnJhbWVTaXplTm90RW5vdWdoQnl0ZXNJbkRpY3Rpb25hcnluZWVkT2Zmc2V0VG9vQmlnb2Zmc2V0YnVmX2xlbgAAAAAABAAAAAQAAABTAAAARlNFRGVjb2RlckVycm9yAAAAAAAEAAAABAAAAFQAAABGU0VUYWJsZUVycm9yU291cmNlSXNFbXB0eU5vdEVub3VnaEJ5dGVzRm9yV2VpZ2h0c2dvdF9ieXRlc2V4cGVjdGVkX2J5dGVzAAAAAAAAAAQAAAAEAAAAVQAAAEV4dHJhUGFkZGluZ3NraXBwZWRfYml0c1Rvb01hbnlXZWlnaHRzTWlzc2luZ1dlaWdodHNMZWZ0b3ZlcklzTm90QVBvd2VyT2YyTm90RW5vdWdoQnl0ZXNUb0RlY29tcHJlc3NXZWlnaHRzaGF2ZUZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaAAAAAABAAAAAQAAAFYAAAAAAAAAAQAAAAEAAAB2AQAAVgAAACRHEABbAAAAWQAAAHcBAABbAAAAeAEAAFVuc3VwcG9ydGVkT2Zmc2V0b2Zmc2V0X2NvZGVaZXJvT2Zmc2V0Tm90RW5vdWdoQnl0ZXNGb3JOdW1TZXF1ZW5jZXMAAAAAAAQAAAAEAAAAXQAAAEV4dHJhQml0c2JpdHNfcmVtYWluaW5nTWlzc2luZ0NvbXByZXNzaW9uTW9kZU1pc3NpbmdCeXRlRm9yUmxlTGxUYWJsZU1pc3NpbmdCeXRlRm9yUmxlT2ZUYWJsZU1pc3NpbmdCeXRlRm9yUmxlTWxUYWJsZQAAAHkBAAAMAAAABAAAAF8AAAB5AQAADAAAAAQAAAB6AQAAXwAAACxIEAB7AQAAYgAAAHQBAABjAAAAdQEAAAAAAAAQAAAACAAAAGQAAAAAAAAAEAAAAAgAAAB8AQAAZAAAAGhIEAB9AQAAZwAAAH4BAABoAAAAfwEAAIABAAAYAAAABAAAAGoAAACAAQAAGAAAAAQAAACBAQAAagAAAKRIEACCAQAAbQAAAHQBAABuAAAAdQEAAIMBAAAIAAAABAAAAHAAAACDAQAACAAAAAQAAACEAQAAcAAAAOBIEACFAQAAcwAAAHQBAAB0AAAAdQEAAIYBAAAYAAAABAAAAHYAAACGAQAAGAAAAAQAAACHAQAAdgAAABxJEACIAQAAeQAAAHQBAAB6AAAAdQEAAIkBAAAIAAAABAAAACUAAACJAQAACAAAAAQAAAAmAAAAJQAAAFhJEAAnAAAAKAAAACkAAAAqAAAAdQEAAAAAAAAMAAAABAAAAHsAAAAAAAAADAAAAAQAAACKAQAAewAAAJRJEACLAQAAfgAAAHQBAAB/AAAAdQEAAIwBAAAUAAAABAAAAIEAAACMAQAAFAAAAAQAAACNAQAAgQAAANBJEACOAQAAhAAAAHQBAACFAAAAdQEAAAAAAAAEAAAABAAAAFIAAABSZWFkRXJyb3JGb3VuZFJlc2VydmVkQmxvY2sAAAAAAAQAAAAEAAAAhgAAAEJsb2NrVHlwZUVycm9yAAAAAAAABAAAAAQAAACHAAAAQmxvY2tTaXplRXJyb3JCbG9ja0NvbnRlbnRSZWFkRXJyb3JNYWxmb3JtZWRTZWN0aW9uSGVhZGVyZXhwZWN0ZWRfbGVucmVtYWluaW5nX2J5dGVzAAAAAAQAAAAEAAAAiAAAAERlY29tcHJlc3NMaXRlcmFsc0Vycm9yAAAAAAAEAAAABAAAAIkAAABMaXRlcmFsc1NlY3Rpb25QYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAigAAAFNlcXVlbmNlc0hlYWRlclBhcnNlRXJyb3IAAAAAAAAABAAAAAQAAACLAAAARGVjb2RlU2VxdWVuY2VFcnJvcgAAAAAABAAAAAQAAACMAAAARXhlY3V0ZVNlcXVlbmNlc0Vycm9ySW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnTWFnaWNOdW1iZXJSZWFkRXJyb3JCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvclNraXBGcmFtZW1hZ2ljX251bWJlcmxlbmd0aAAAAAAAAAQAAAAEAAAAjQAAAEJhZE1hZ2ljTnVtAAAAAAAEAAAABAAAAI4AAABIdWZmbWFuVGFibGVFcnJvcgAAAAAAAAAEAAAABAAAAI8AAABEZWNvZGVidWZmZXJFcnJvck5vdEVub3VnaEJ5dGVzRm9yU2VxdWVuY2V3YW50ZWQAAAAAAQAAAAEAAACQAAAAAAAAAAEAAAABAAAAjwEAAJAAAADUTBAAWwAAAJIAAAB3AQAAWwAAAHgBAAAAAAAABAAAAAQAAACTAAAAAAAAAAQAAAAEAAAAkAEAAJMAAAAQTRAASgAAAJUAAAB0AQAASgAAAHUBAACRAQAAFAAAAAQAAACXAAAAkQEAABQAAAAEAAAAkgEAAJcAAABMTRAAkwEAAJoAAAB0AQAAmwAAAHUBAAAAAAAADAAAAAQAAACcAAAAAAAAAAwAAAAEAAAAlAEAAJwAAACITRAAlQEAAJ8AAAB0AQAAoAAAAHUBAAAAAAAACAAAAAQAAAChAAAAAAAAAAgAAAAEAAAAlgEAAKEAAADETRAASgAAAKMAAAB0AQAASgAAAHUBAACXAQAAFAAAAAQAAAClAAAAlwEAABQAAAAEAAAAmAEAAKUAAAAAThAAmQEAAKgAAAB0AQAAqQAAAHUBAAAAAAAADAAAAAQAAACqAAAAAAAAAAwAAAAEAAAAmgEAAKoAAAA8ThAAmwEAAK0AAAB0AQAArgAAAHUBAABEZWNvZGVyU3RhdGVJc0ZhaWxlZEV4cGVjdGVkSGVhZGVyT2ZQcmV2aW91c0Jsb2NrAAAAAAAAAAEAAAABAAAAnAEAAHN0ZXBzb3VyY2UAAAAAAAAEAAAABAAAALAAAABEZWNvbXByZXNzQmxvY2tFcnJvck1pc3NpbmdDb21wcmVzc2VkU2l6ZU1pc3NpbmdOdW1TdHJlYW1zAAAAAAAABAAAAAQAAACxAAAASHVmZm1hbkRlY29kZXJFcnJvclVuaW5pdGlhbGl6ZWRIdWZmbWFuVGFibGVNaXNzaW5nQnl0ZXNGb3JKdW1wSGVhZGVyTWlzc2luZ0J5dGVzRm9yTGl0ZXJhbHNuZWVkZWQAAAAAAAAEAAAABAAAAJ0BAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAngEAABQAAAAEAAAAtAAAAJ4BAAAUAAAABAAAAJ8BAAC0AAAA2E8QAKABAAC3AAAAdAEAALgAAAB1AQAAAAAAAAwAAAAEAAAAuQAAAAAAAAAMAAAABAAAAKEBAAC5AAAAFFAQAEoAAAC7AAAAdAEAAEoAAAB1AQAAogEAABgAAAAEAAAAvQAAAKIBAAAYAAAABAAAAKMBAAC9AAAAUFAQAKQBAADAAAAAdAEAAMEAAAB1AQAAAAAAAAwAAAAEAAAAwgAAAAAAAAAMAAAABAAAAKUBAADCAAAAjFAQAMYAAADFAAAAdAEAAMYAAAB1AQAASWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzbmVlZF9hdF9sZWFzdAMAAAADAAAACgAAAAgAAAAlQxAAKEMQACtDEAA1QxAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9zdGQvc3JjL2lvL21vZC5ycwAAHFEQAGoAAACyAQAAMQAAAGFzc2VydGlvbiBmYWlsZWQ6IGZpbGxlZCA8PSBzZWxmLmJ1Zi5pbml0L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9jb3JlL3NyYy9pby9ib3Jyb3dlZF9idWYucnMAAADBURAAdAAAAB0BAAAJAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnNIUhAAgAAAAFgCAAAwAAAASW52YWxpZCBGcmFtZV9Db250ZW50X1NpemVfRmxhZzsgSXM6ICwgU2hvdWxkIGJlIG9uZSBvZjogMCwgMSwgMiwgMwDYUhAAJQAAAP1SEAAeAEG0psEAC8piwAMAAHdpbmRvd19zaXplIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bS4gSXM6ICwgU2hvdWxkIGJlIGxvd2VyIHRoYW46IAAAADhTEAAtAAAAZVMQABgAAAAABAAAAAAAAHdpbmRvd19zaXplIHNtYWxsZXIgdGhhbiBhbGxvd2VkIG1pbmltdW0uIElzOiAsIFNob3VsZCBiZSBncmVhdGVyIHRoYW46IJhTEAAuAAAAxlMQABoAAAABAAAAAAAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gZGljdF9pZC4gSXM6ICwgU2hvdWxkIGJlOiAAAPhTEAAhAAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQgbGVuZ3RoLiBJczogADhUEAA3AAAAGVQQAA0AAABmcmFtZV9jb250ZW50X3NpemUgd2FzIHplcm9JbnZhbGlkIGZyYW1lX2NvbnRlbnRfc2l6ZS4gSXM6ICwgU2hvdWxkIGJlIG9uZSBvZiAxLCAyLCA0LCA4IGJ5dGVzAACbVBAAIAAAALtUEAAjAAAARXJyb3Igd2hpbGUgcmVhZGluZyBtYWdpYyBudW1iZXI6IAAA8FQQACIAAABSZWFkIHdyb25nIG1hZ2ljIG51bWJlcjogMHgAHFUQABsAAABFcnJvciB3aGlsZSByZWFkaW5nIGZyYW1lIGRlc2NyaXB0b3I6IAAAQFUQACYAAABFcnJvciB3aGlsZSByZWFkaW5nIHdpbmRvdyBkZXNjcmlwdG9yOiAAcFUQACcAAABFcnJvciB3aGlsZSByZWFkaW5nIGRpY3Rpb25hcnkgaWQ6IACgVRAAIwAAAEVycm9yIHdoaWxlIHJlYWRpbmcgZnJhbWUgY29udGVudCBzaXplOiDMVRAAKAAAAFNraXBwYWJsZUZyYW1lIGVuY291bnRlcmVkIHdpdGggTWFnaWNOdW1iZXIgMHggYW5kIGxlbmd0aCAgYnl0ZXP8VRAALgAAACpWEAAMAAAANlYQAAYAAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBoZWFkZXJSZXNlcnZlZCBibG9jayBvY2N1cmVkLiBUaGlzIGlzIGNvbnNpZGVyZWQgY29ycnVwdGlvbiBieSB0aGUgZG9jdW1lbnRhdGlvbkVycm9yIGdldHRpbmcgYmxvY2sgdHlwZTogwlYQABoAAABFcnJvciBnZXR0aW5nIGJsb2NrIGNvbnRlbnQgc2l6ZTogAADkVhAAIgAAAEludmFsaWQgQmxvY2t0eXBlIG51bWJlci4gSXM6ICBTaG91bGQgYmUgb25lIG9mOiAwLCAxLCAyLCAzICgzIGlzIHJlc2VydmVkIHRob3VnaAAAABBXEAAeAAAALlcQADMAAAAAAAIAQmxvY2tzaXplIHdhcyBiaWdnZXIgdGhhbiB0aGUgYWJzb2x1dGUgbWF4aW11bSAgKDEyOGtiKS4gSXM6IAAAAHhXEAAvAAAAp1cQAA4AAABFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBibG9jayBjb250ZW50OiAAyFcQACcAAABNYWxmb3JtZWQgc2VjdGlvbiBoZWFkZXIuIFNheXMgbGl0ZXJhbHMgd291bGQgYmUgdGhpcyBsb25nOiAgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBsZWZ0APhXEAA8AAAANFgQABQAAABIWBAACwAAAENhbid0IGRlY29kZSBuZXh0IGJsb2NrIGlmIGZhaWxlZCBhbG9uZyB0aGUgd2F5LiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VDYW4ndCBkZWNvZGUgbmV4dCBibG9jayBib2R5LCB3aGlsZSBleHBlY3RpbmcgdG8gZGVjb2RlIHRoZSBoZWFkZXIgb2YgdGhlIHByZXZpb3VzIGJsb2NrLiBSZXN1bHRzIHdpbGwgYmUgbm9uc2Vuc2VFcnJvciB3aGlsZSByZWFkaW5nIGJ5dGVzIGZvciA6IAAnWRAAHgAAAEVZEAACAAAATmVlZCAgYnl0ZXMgZnJvbSB0aGUgZGljdGlvbmFyeSBidXQgaXQgaXMgb25seSAgYnl0ZXMgbG9uZwAAWFkQAAUAAABdWRAAKgAAAIdZEAALAAAAb2Zmc2V0OiAgYmlnZ2VyIHRoYW4gYnVmZmVyOiAAAACsWRAACAAAALRZEAAVAAAAQmFkIG1hZ2ljX251bSBhdCBzdGFydCBvZiB0aGUgZGljdGlvbmFyeTsgR290OiAsIEV4cGVjdGVkOiAA3FkQAC8AAAALWhAADAAAADekMOxTcGVjaWZpZWQgd2luZG93X3NpemUgaXMgdG9vIGJpZzsgUmVxdWVzdGVkOiAsIE1heDogLFoQAC0AAABZWhAABwAAAEZhaWxlZCB0byBwYXJzZS9kZWNvZGUgYmxvY2sgYm9keTogAHBaEAAjAAAARmFpbGVkIHRvIHBhcnNlIGJsb2NrIGhlYWRlcjogAACcWhAAHgAAAEZhaWxlZCB0byByZWFkIGNoZWNrc3VtOiAAAADEWhAAGQAAAERlY29kZXIgbXVzdCBpbml0aWFsaXplZCBvciByZXNldCBiZWZvcmUgdXNpbmcgaXREZWNvZGVyIGVuY291bnRlcmVkIGVycm9yIHdoaWxlIGluaXRpYWxpemluZzogABlbEAAuAAAARGVjb2RlciBlbmNvdW50ZXJlZCBlcnJvciB3aGlsZSBkcmFpbmluZyB0aGUgZGVjb2RlYnVmZmVyOiAAUFsQADsAAABGYWlsZWQgdG8gc2tpcCBieXRlcyBmb3IgdGhlIGxlbmd0aCBnaXZlbiBpbiB0aGUgZnJhbWUgaGVhZGVyVGFyZ2V0IG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGJ5dGVzIGFzIHRoZSBjb250ZW50c2l6ZSBvZiB0aGUgZnJhbWUgcmVwb3J0c0ZyYW1lIGhlYWRlciBzcGVjaWZpZWQgZGljdGlvbmFyeSBpZCAweCB0aGF0IHdhc250IHByb3ZpZGVkIGJ5IGFkZF9kaWN0KCkgb3IgcmVzZXRfd2l0aF9kaWN0KCkAACBcEAAnAAAAR1wQADcAAABjb21wcmVzc2VkIHNpemUgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzbnVtX3N0cmVhbXMgd2FzIG5vbmUgZXZlbiB0aG91Z2ggaXQgbXVzdCBiZSBzZXQgdG8gc29tZXRoaW5nICgxIG9yIDQpIGZvciBjb21wcmVzc2VkIGxpdGVyYWxzVHJpZWQgdG8gcmV1c2UgaHVmZm1hbiB0YWJsZSBidXQgaXQgd2FzIG5ldmVyIGluaXRpYWxpemVkTmVlZCA2IGJ5dGVzIHRvIGRlY29kZSBqdW1wIGhlYWRlciwgZ290IAAAfl0QACgAAAA2VhAABgAAAE5lZWQgYXQgbGVhc3QgIGJ5dGVzIHRvIGRlY29kZSBsaXRlcmFscy4gSGF2ZTogALhdEAAOAAAAxl0QACEAAAA2VhAABgAAAFBhZGRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2Vfc2VjdGlvbiB3YXMgbW9yZSB0aGFuIGEgYnl0ZSBsb25nOiAgYml0cy4gUHJvYmFibHkgY2F1c2VkIGJ5IGRhdGEgY29ycnVwdGlvbgAAXhAARgAAAEZeEAApAAAAQml0c3RyZWFtIHdhcyByZWFkIHRpbGw6ICwgc2hvdWxkIGhhdmUgYmVlbjogAAAAgF4QABkAAACZXhAAFAAAAERpZCBub3QgZGVjb2RlIGVub3VnaCBsaXRlcmFsczogLCBTaG91bGQgaGF2ZSBiZWVuOiDAXhAAIAAAAOBeEAAUAAAAU2VxdWVuY2Ugd2FudHMgdG8gY29weSB1cCB0byBieXRlIC4gQnl0ZXMgaW4gbGl0ZXJhbHNidWZmZXI6IAAAAARfEAAiAAAAJl8QABsAAABJbGxlZ2FsIG9mZnNldDogMCBmb3VuZERvIG5vdCBzdXBwb3J0IG9mZnNldHMgYmlnZ2VyIHRoYW4gMTw8MzI7IGdvdDogAABrXxAALwAAAFJlYWQgYW4gb2Zmc2V0ID09IDAuIFRoYXQgaXMgYW4gaWxsZWdhbCB2YWx1ZSBmb3Igb2Zmc2V0c0J5dGVzdHJlYW0gZGlkIG5vdCBjb250YWluIGVub3VnaCBieXRlcyB0byBkZWNvZGUgbnVtX3NlcXVlbmNlc2NvbXByZXNzaW9uIG1vZGVzIGFyZSBub25lIGJ1dCB0aGV5IG11c3QgYmUgc2V0IHRvIHNvbWV0aGluZ05lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBsbCB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBvZiB0YWJsZU5lZWQgYSBieXRlIHRvIHJlYWQgZm9yIFJMRSBtbCB0YWJsZUlsbGVnYWwgbGl0ZXJhbHNzZWN0aW9udHlwZS4gSXM6ICwgbXVzdCBiZSBpbjogMCwgMSwgMiwgMwAAAMRgEAAhAAAA5WAQABgAAABOb3QgZW5vdWdoIGJ5dGUgdG8gcGFyc2UgdGhlIGxpdGVyYWxzIHNlY3Rpb24gaGVhZGVyLiBIYXZlOiAsIE5lZWQ6IBBhEAA8AAAATGEQAAgAAABzb3VyY2UgbXVzdCBoYXZlIGF0IGxlYXN0ICBieXRlcyB0byBwYXJzZSBoZWFkZXI7IGdvdCAAAGRhEAAaAAAAfmEQABwAAAA2VhAABgAAAEFjY2xvZyBtdXN0IGJlIGF0IGxlYXN0IDFGb3VuZCBGU0UgYWNjX2xvZzogIGJpZ2dlciB0aGFuIGFsbG93ZWQgbWF4aW11bSBpbiB0aGlzIGNhc2U6IADNYRAAEwAAAOBhEAArAAAAVGhlIGNvdW50ZXIgKCkgZXhjZWVkZWQgdGhlIGV4cGVjdGVkIHN1bTogLiBUaGlzIG1lYW5zIGFuIGVycm9yIG9yIGNvcnJ1cHRlZCBkYXRhIAogHGIQAA0AAAApYhAAHQAAAEZiEAAqAAAAVGhlcmUgYXJlIHRvbyBtYW55IHN5bWJvbHMgaW4gdGhpcyBkaXN0cmlidXRpb246IC4gTWF4OiAyNTYAiGIQADEAAAC5YhAACgAAAFRyaWVkIHRvIHVzZSBhbiB1bmluaXRpYWxpemVkIHRhYmxlIVNvdXJjZSBuZWVkcyB0byBoYXZlIGF0IGxlYXN0IG9uZSBieXRlSGVhZGVyIHNheXMgdGhlcmUgc2hvdWxkIGJlICBieXRlcyBmb3IgdGhlIHdlaWdodHMgYnV0IHRoZXJlIGFyZSBvbmx5ICBieXRlcyBpbiB0aGUgc3RyZWFtHmMQABwAAAA6YxAAKgAAAGRjEAAUAAAATW9yZSB0aGFuIDI1NSB3ZWlnaHRzIGRlY29kZWQgKGdvdCAgd2VpZ2h0cykuIFN0cmVhbSBpcyBwcm9iYWJseSBjb3JydXB0ZWQAAJBjEAAjAAAAs2MQACcAAABDYW4ndCBidWlsZCBodWZmbWFuIHRhYmxlIHdpdGhvdXQgYW55IHdlaWdodHNMZWZ0b3ZlciBtdXN0IGJlIHBvd2VyIG9mIHR3byBidXQgaXM6IAAZZBAAJgAAAE5vdCBlbm91Z2ggYnl0ZXMgaW4gc3RyZWFtIHRvIGRlY29tcHJlc3Mgd2VpZ2h0cy4gSXM6IAAASGQQADYAAAAZVBAADQAAAEZTRSB0YWJsZSB1c2VkIG1vcmUgYnl0ZXM6ICB0aGFuIHdlcmUgbWVhbnQgdG8gYmUgdXNlZCBmb3IgdGhlIHdob2xlIHN0cmVhbSBvZiBodWZmbWFuIHdlaWdodHMgKCkAAACQZBAAGwAAAKtkEABFAAAA8GQQAAEAAABTb3VyY2UgbmVlZHMgdG8gaGF2ZSBhdCBsZWFzdCAgYnl0ZXMsIGdvdDogAAxlEAAeAAAAKmUQAA0AAAALQ2FudCBoYXZlIHdlaWdodDogIGJpZ2dlciB0aGFuIG1heF9udW1fYml0czogAABJZRAAEgAAAFtlEAAbAAAAbWF4X2JpdHMgZGVyaXZlZCBmcm9tIHdlaWdodHMgaXM6ICBzaG91bGQgYmUgbG93ZXIgdGhhbjogAAAAiGUQACIAAACqZRAAFwAAAENhbnQgc2VydmUgdGhpcyByZXF1ZXN0LiBUaGUgcmVhZGVyIGlzIGxpbWl0ZWQgdG8gIGJpdHMsIHJlcXVlc3RlZCAgYml0c9RlEAAyAAAABmYQABEAAAAXZhAABQAAAENhbid0IHJlYWQgIGJpdHMsIG9ubHkgaGF2ZSAgYml0cyBsZWZ0AAA0ZhAACwAAAD9mEAARAAAAUGYQAAoAAAAAAAAABAAAAAQAAADJAQAAAAAAAAQAAAAEAAAAygEAAFRvb01hbnlCaXRzbnVtX3JlcXVlc3RlZF9iaXRzbGltaXQAAAAAAAAEAAAABAAAAMsBAABOb3RFbm91Z2hSZW1haW5pbmdCaXRzcmVxdWVzdGVkcmVtYWluaW5nSW52YWxpZEZyYW1lQ29udGVudFNpemVGbGFnZ290AAAAAAAABAAAAAQAAADMAQAAV2luZG93VG9vQmlnV2luZG93VG9vU21hbGwAAAAAAAAEAAAABAAAAK4BAABGcmFtZURlc2NyaXB0b3JFcnJvckRpY3RJZFRvb1NtYWxsZXhwZWN0ZWRNaXNtYXRjaGVkRnJhbWVTaXplRnJhbWVTaXplSXNaZXJvSW52YWxpZEZyYW1lU2l6ZQAAAAAEAAAABAAAAM0BAABNYWdpY051bWJlclJlYWRFcnJvcgAAAAAEAAAABAAAAM4BAABCYWRNYWdpY051bWJlckZyYW1lRGVzY3JpcHRvclJlYWRFcnJvckludmFsaWRGcmFtZURlc2NyaXB0b3JXaW5kb3dEZXNjcmlwdG9yUmVhZEVycm9yRGljdGlvbmFyeUlkUmVhZEVycm9yRnJhbWVDb250ZW50U2l6ZVJlYWRFcnJvcgAAAAAABAAAAAQAAADPAQAAU2tpcEZyYW1lbWFnaWNfbnVtYmVybGVuZ3RoQmxvY2tDb250ZW50UmVhZEVycm9yTWFsZm9ybWVkU2VjdGlvbkhlYWRlcmV4cGVjdGVkX2xlbnJlbWFpbmluZ19ieXRlcwAAAAAAAAAEAAAABAAAALIBAABEZWNvbXByZXNzTGl0ZXJhbHNFcnJvcgAAAAAABAAAAAQAAACzAQAATGl0ZXJhbHNTZWN0aW9uUGFyc2VFcnJvcgAAAAAAAAAEAAAABAAAALQBAABTZXF1ZW5jZXNIZWFkZXJQYXJzZUVycm9yAAAAAAAAAAQAAAAEAAAAtQEAAERlY29kZVNlcXVlbmNlRXJyb3IAAAAAAAQAAAAEAAAAtgEAAEV4ZWN1dGVTZXF1ZW5jZXNFcnJvck5vdEVub3VnaEJ5dGVzSW5EaWN0aW9uYXJ5bmVlZE9mZnNldFRvb0JpZ29mZnNldGJ1Zl9sZW4AAAAABAAAAAQAAAC4AQAAQmFkTWFnaWNOdW0AAAAAAAQAAAAEAAAAuQEAAEZTRVRhYmxlRXJyb3IAAAAAAAAABAAAAAQAAAC6AQAASHVmZm1hblRhYmxlRXJyb3JNaXNzaW5nQ29tcHJlc3NlZFNpemVNaXNzaW5nTnVtU3RyZWFtcwAAAAAABAAAAAQAAADBAQAAR2V0Qml0c0Vycm9yAAAAAAQAAAAEAAAAwgEAAEh1ZmZtYW5EZWNvZGVyRXJyb3JVbmluaXRpYWxpemVkSHVmZm1hblRhYmxlTWlzc2luZ0J5dGVzRm9ySnVtcEhlYWRlck1pc3NpbmdCeXRlc0ZvckxpdGVyYWxzbmVlZGVkAAAAAAAABAAAAAQAAADQAQAARXh0cmFQYWRkaW5nc2tpcHBlZF9iaXRzAAAAAAQAAAAEAAAA0QEAAAAAAAAEAAAABAAAANIBAABCaXRzdHJlYW1SZWFkTWlzbWF0Y2hyZWFkX3RpbERlY29kZWRMaXRlcmFsQ291bnRNaXNtYXRjaGRlY29kZWQAAAAAAAQAAAAEAAAAxQEAAERlY29kZWJ1ZmZlckVycm9yTm90RW5vdWdoQnl0ZXNGb3JTZXF1ZW5jZXdhbnRlZGhhdmVaZXJvT2Zmc2V0AAAAAAAABAAAAAQAAADGAQAARlNFRGVjb2RlckVycm9yVW5zdXBwb3J0ZWRPZmZzZXRvZmZzZXRfY29kZU5vdEVub3VnaEJ5dGVzRm9yTnVtU2VxdWVuY2VzRXh0cmFCaXRzYml0c19yZW1haW5pbmdNaXNzaW5nQ29tcHJlc3Npb25Nb2RlTWlzc2luZ0J5dGVGb3JSbGVMbFRhYmxlTWlzc2luZ0J5dGVGb3JSbGVPZlRhYmxlTWlzc2luZ0J5dGVGb3JSbGVNbFRhYmxlSWxsZWdhbExpdGVyYWxTZWN0aW9uVHlwZU5vdEVub3VnaEJ5dGVzAAAAAAEAAAABAAAA0wEAAG5lZWRfYXRfbGVhc3RBY2NMb2dJc1plcm9BY2NMb2dUb29CaWdtYXgAAAAABAAAAAQAAADHAQAAUHJvYmFiaWxpdHlDb3VudGVyTWlzbWF0Y2hleHBlY3RlZF9zdW1zeW1ib2xfcHJvYmFiaWxpdGllc1Rvb01hbnlTeW1ib2xzVGFibGVJc1VuaW5pdGlhbGl6ZWRTb3VyY2VJc0VtcHR5Tm90RW5vdWdoQnl0ZXNGb3JXZWlnaHRzZ290X2J5dGVzZXhwZWN0ZWRfYnl0ZXNUb29NYW55V2VpZ2h0c01pc3NpbmdXZWlnaHRzTGVmdG92ZXJJc05vdEFQb3dlck9mMk5vdEVub3VnaEJ5dGVzVG9EZWNvbXByZXNzV2VpZ2h0c0ZTRVRhYmxlVXNlZFRvb01hbnlCeXRlc3VzZWRhdmFpbGFibGVfYnl0ZXNOb3RFbm91Z2hCeXRlc0luU291cmNlV2VpZ2h0QmlnZ2VyVGhhbk1heE51bUJpdHNNYXhCaXRzVG9vSGlnaC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnMAAABQbhAAbQAAACoCAAARAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyX3JldmVyc2UucnMAAADQbhAAcQAAADcAAABFAAAA0G4QAHEAAAA3AAAALwAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGXQbhAAcQAAAEYAAAANAAAA0G4QAHEAAABKAAAAHgAAAFRoaXMgaXMgYSBidWcgaW4gdGhlIHByb2dyYW0uIFRoZXJlIHNob3VsZCBvbmx5IGJlIHZhbHVlcyBiZXR3ZWVuIDAuLjMvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2Jsb2Nrcy9saXRlcmFsc19zZWN0aW9uLnJzAPJvEABtAAAAewAAADQAAADybxAAbQAAAJAAAABXAAAA8m8QAG0AAACXAAAAKgAAAPJvEABtAAAAmAAAACoAAADybxAAbQAAAJsAAAAaAAAA8m8QAG0AAACoAAAAGgAAAPJvEABtAAAAtAAAAEQAAADybxAAbQAAALgAAABGAAAA8m8QAG0AAADAAAAAKgAAAPJvEABtAAAAwQAAACsAAADybxAAbQAAAMUAAABIAAAA8m8QAG0AAADNAAAAKgAAAPJvEABtAAAAzgAAACsAAADybxAAbQAAANMAAAAuAAAA8m8QAG0AAADUAAAALgAAAENhbnQgcmV0dXJuIHRoaXMgbWFueSBiaXRzL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9iaXRfcmVhZGVyLnJzAGpxEABpAAAANgAAAA0AAABqcRAAaQAAAE8AAAAjAAAAYXNzZXJ0aW9uIGZhaWxlZDogbiAtIGJpdF9zaGlmdCA9PSBiaXRzX2luX2xhc3RfYnl0ZV9uZWVkZWQAanEQAGkAAABtAAAADQAAAGpxEABpAAAAcQAAAB8AAABqcRAAaQAAAGgAAAAkAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pZHggJSA4ID09IDAAanEQAGkAAABkAAAADQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaWR4ID09IG9sZF9pZHggKyBuAAAAanEQAGkAAAB3AAAACQAAAFNlcV9zdW06ICBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZGlmZmVyZW5jZSBpbiBidWZmZXJzaXplOiAAANByEAAJAAAA2XIQADEAAAAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3NlcXVlbmNlX2V4ZWN1dGlvbi5ycwAAABxzEABxAAAALwAAAAUAAAAccxAAcQAAAAsAAAAkAAAAHHMQAHEAAAAVAAAANAAAAEFsbG9jYXRpbmcgbmV3IHNwYWNlIGZvciB0aGUgcmluZ2J1ZmZlciBmYWlsZWQvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2RlY29kaW5nL3JpbmdidWZmZXIucnMA7nMQAGkAAABhAAAAIwAAAENvdWxkIG5vdCBjcmVhdGUgbGF5b3V0IGZvciB1OCBhcnJheSBvZiBzaXplIAAAAGh0EAAtAAAA7nMQAGkAAABaAAAAIQAAAO5zEABpAAAAtAAAABUAAADucxAAaQAAAL4AAAAVAAAA7nMQAGkAAAB3AQAAHQAAAO5zEABpAAAAzgEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwDwdBAAawAAAKIAAAAZAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9saXRlcmFsc19zZWN0aW9uX2RlY29kZXIucnMAbHUQAHcAAAAUAAAAIgAAAGx1EAB3AAAAGAAAAE0AAABsdRAAdwAAADQAAAAZAAAAbHUQAHcAAAByAAAAGAAAAGx1EAB3AAAAkQAAABQAAABhc3NlcnRpb24gZmFpbGVkOiBudW1fc3RyZWFtcyA9PSAxAABsdRAAdwAAAIAAAAAJAAAAbHUQAHcAAABFAAAAGQAAAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZGVjb2Rpbmcvc2VxdWVuY2Vfc2VjdGlvbl9kZWNvZGVyLnJzAHh2EAB3AAAAGAAAAB0AAAB4dhAAdwAAAHUAAAAQAAAAeHYQAHcAAADAAAAAEAAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IElsbGVnYWwgbGl0ZXJhbCBsZW5ndGggY29kZSB3YXM6IAAgdxAASwAAAHh2EAB3AAAA+gAAAA4AAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBJbGxlZ2FsIG1hdGNoIGxlbmd0aCBjb2RlIHdhczogAAAAhHcQAEkAAAB4dhAAdwAAABoBAAAOAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAD/////////////////////AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA//////////////////////////8BAAAABAAAAAMAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA/////////////////////////////////////3h2EAB3AAAAdgEAABwAAAB4dhAAdwAAAFMBAAAcAAAAAQEBAQICAwMEBgcICQoLDA0ODxAQAAAAEgAAABQAAAAWAAAAGAAAABwAAAAgAAAAKAAAADAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAEBAQECAgMDBAQFBwgJCgsMDQ4PEAAAACMAAAAlAAAAJwAAACkAAAArAAAALwAAADMAAAA7AAAAQwAAAFMAAABjAAAAgwAAAAMBAAADAgAAAwQAAAMIAAADEAAAAyAAAANAAAADgAAAAwABAC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3R3b3gtaGFzaC0yLjEuMC9zcmMveHhoYXNoNjQucnMAAACwehAAYQAAAFQAAAAfAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcnV6c3RkLTAuOC4wL3NyYy9kZWNvZGluZy9kZWNvZGVidWZmZXIucnMAJHsQAGsAAAAaAAAAHgAAACR7EABrAAAAnQAAADQAAAAkexAAawAAAOoAAAAeAAAAUmF3UkxFQ29tcHJlc3NlZFJlc2VydmVyZAAAAAAAAAAEAAAABAAAAMoBAAAAAAAABAAAAAQAAADQAQAAYXNzZXJ0aW9uIGZhaWxlZDogeCA+IDAvVXNlcnMvZHlsYW4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ydXpzdGQtMC44LjAvc3JjL2h1ZmYwL2h1ZmYwX2RlY29kZXIucnMTfBAAaQAAADEAAAAFAAAAE3wQAGkAAAA+AAAAGgAAABN8EABpAAAAUAAAACkAAAATfBAAaQAAAGgAAAAWAAAAE3wQAGkAAABqAAAAEwAAABN8EABpAAAAawAAABgAAAATfBAAaQAAAGwAAAAbAAAAE3wQAGkAAAAdAQAANgAAABN8EABpAAAAHQEAACUAAAATfBAAaQAAAB8BAAA2AAAAE3wQAGkAAAAfAQAAJQAAABN8EABpAAAA6AAAACIAAAATfBAAaQAAAPIAAAAiAAAAE3wQAGkAAAD3AAAAJgAAABN8EABpAAAA7QAAACYAAAATfBAAaQAAAFcBAAASAAAAE3wQAGkAAABfAQAAGAAAABN8EABpAAAAZQEAABUAAAATfBAAaQAAAG8BAAAbAAAAE3wQAGkAAABxAQAAGgAAABN8EABpAAAAeAEAAB4AAAByYW5rX2lkeFswXTogIHNob3VsZCBiZTogAAAAzH0QAA0AAADZfRAADAAAABN8EABpAAAAdwEAAAkAAAATfBAAaQAAAH8BAAAsAAAAE3wQAGkAAACEAQAAMQAAABN8EABpAAAAiAEAACAAAAATfBAAaQAAAIkBAAAgAAAAE3wQAGkAAABzAQAARQAAABN8EABpAAAAdAEAACEAAAATfBAAaQAAAHMBAAAeAAAAE3wQAGkAAABhAQAAGwAAABN8EABpAAAATwEAACcAAAATfBAAaQAAAFQBAAAWAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAqH4QAGsAAACiAAAAGQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzACR/EABrAAAAogAAABkAAABhc3NlcnRpb24gZmFpbGVkOiB4ID4gMC9Vc2Vycy9keWxhbi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3J1enN0ZC0wLjguMC9zcmMvZnNlL2ZzZV9kZWNvZGVyLnJzt38QAGUAAAA9AAAABQAAALd/EABlAAAAWgAAACcAAAC3fxAAZQAAAGUAAAAnAAAAt38QAGUAAABwAAAAIwAAALd/EABlAAAAcQAAAB0AAAC3fxAAZQAAAOIAAAApAAAAt38QAGUAAADkAAAAMQAAALd/EABlAAAA5gAAADMAAABhc3NlcnRpb24gZmFpbGVkOiBuYiA8PSBzZWxmLmFjY3VyYWN5X2xvZwAAALd/EABlAAAA6wAAAA0AAAC3fxAAZQAAANIAAAAtAAAAt38QAGUAAADAAAAALQAAALd/EABlAAAAOQEAAEEAAAC3fxAAZQAAAB4BAAAnAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHJvYiA9PSAtMbd/EABlAAAAJAEAABUAAAAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy92ZWMvbW9kLnJzAAAARIEQAG0AAAA9CgAAJAAAAAAAAAAQAAAABAAAANQBAADVAQAA1gEAACAgICA6IAAAAQAAAAAAAADggRAAAgAAACAgICAgICAvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL3B0ci9tb2QucnMA+4EQAGwAAAALAgAAAQAAAC9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvc2xpY2UvaW5kZXgucnN4ghAAcAAAAEwDAAA0AAAAeIIQAHAAAABTAwAAMgAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuKS9Vc2Vycy9keWxhbi8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAAMoMQAGwAAAD7BwAAHQAAADKDEABsAAAAAwgAAB0AAAAygxAAbAAAAI0FAAAbAAAAL1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5ycwAAANCDEABtAAAAKgIAABEAAADXAQAADAAAAAQAAADYAQAA2QEAANoBAADdAQAADAAAAAQAAADeAQAA3wEAANoBAEGIicIAC4UJAQAAAOABAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L1VzZXJzL2R5bGFuLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAMeEEABsAAAA3woAAA4AAABFcnJvcgAAAMeEEABsAAAAjQUAABsAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbinHhBAAbAAAAMAFAAANAAAAAAAAABAAAAAEAAAA1AEAANUBAADWAQAAYmFja3RyYWNlIGNhcHR1cmUgZmFpbGVkL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYW55aG93LTEuMC45OC9zcmMvZXJyb3IucnPMhRAAXAAAAGcEAAAOAAAAAQAAAAAAAAA6IAAAQIYQAAIAAAAKCkNhdXNlZCBieToKCgpzdGFjayBiYWNrdHJhY2U6U3RhY2sgYmFja3RyYWNlOgprhhAAEQAAAFMvVXNlcnMvZHlsYW4vLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAACFhhAAeQAAALMHAAAJAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy43Ny9zcmMvbGliLnJzAAAQhxAAWgAAAPsYAAABAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMDAvc3JjL2NvbnZlcnQvc2xpY2VzLnJzfIcQAGwAAAAkAQAADgAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkSnNWYWx1ZSgpACqIEAAIAAAAMogQAAEAAABMYXp5IGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWQAAESIEAAqAAAAL1VzZXJzL2R5bGFuLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvb25jZV9jZWxsLTEuMjEuMy9zcmMvbGliLnJzAAAAeIgQAF0AAAAIAwAAGQAAAHJlZW50cmFudCBpbml0AADoiBAADgAAAHiIEABdAAAAegIAAA0AQZiSwgALlSMEAAAABAAAAPYBAAAvcnVzdGMvMDVmOTg0NmY4OTNiMDlhMWJlMWZjODU2MGUzM2ZjM2M4MTVjZmVjYi9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAAJIkQAEoAAACiAAAAGQAAAC9ydXN0Yy8wNWY5ODQ2Zjg5M2IwOWExYmUxZmM4NTYwZTMzZmMzYzgxNWNmZWNiL2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwCAiRAASwAAAI0FAAAbAAAAL3J1c3RjLzA1Zjk4NDZmODkzYjA5YTFiZTFmYzg1NjBlMzNmYzNjODE1Y2ZlY2IvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc9yJEABMAAAAKgIAABEAAAA6AAAA9wEAAAwAAAAEAAAA+AEAAPkBAAD6AQAAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuNy9zcmMvZGxtYWxsb2MucnNhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAFSKEAApAAAAqAQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAABUihAAKQAAAK4EAAANAAAAQWNjZXNzRXJyb3JjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uOiAAB4sQAEgAAABsaWJyYXJ5L3N0ZC9zcmMvYmFja3RyYWNlLnJzb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybXSLEAAoAAAAJAAAAAIAAACcixAAdW5zdXBwb3J0ZWQgYmFja3RyYWNlZGlzYWJsZWQgYmFja3RyYWNlAFiLEAAcAAAAigEAAB0AAAD7AQAAEAAAAAQAAAD8AQAA/QEAAAEAAAAAAAAAZW50aXR5IG5vdCBmb3VuZHBlcm1pc3Npb24gZGVuaWVkY29ubmVjdGlvbiByZWZ1c2VkY29ubmVjdGlvbiByZXNldGhvc3QgdW5yZWFjaGFibGVuZXR3b3JrIHVucmVhY2hhYmxlY29ubmVjdGlvbiBhYm9ydGVkbm90IGNvbm5lY3RlZGFkZHJlc3MgaW4gdXNlYWRkcmVzcyBub3QgYXZhaWxhYmxlbmV0d29yayBkb3duYnJva2VuIHBpcGVlbnRpdHkgYWxyZWFkeSBleGlzdHNvcGVyYXRpb24gd291bGQgYmxvY2tub3QgYSBkaXJlY3RvcnlpcyBhIGRpcmVjdG9yeWRpcmVjdG9yeSBub3QgZW1wdHlyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWZpbGVzeXN0ZW0gbG9vcCBvciBpbmRpcmVjdGlvbiBsaW1pdCAoZS5nLiBzeW1saW5rIGxvb3Apc3RhbGUgbmV0d29yayBmaWxlIGhhbmRsZWludmFsaWQgaW5wdXQgcGFyYW1ldGVyaW52YWxpZCBkYXRhdGltZWQgb3V0d3JpdGUgemVyb25vIHN0b3JhZ2Ugc3BhY2VzZWVrIG9uIHVuc2Vla2FibGUgZmlsZXF1b3RhIGV4Y2VlZGVkZmlsZSB0b28gbGFyZ2VyZXNvdXJjZSBidXN5ZXhlY3V0YWJsZSBmaWxlIGJ1c3lkZWFkbG9ja2Nyb3NzLWRldmljZSBsaW5rIG9yIHJlbmFtZXRvbyBtYW55IGxpbmtzaW52YWxpZCBmaWxlbmFtZWFyZ3VtZW50IGxpc3QgdG9vIGxvbmdvcGVyYXRpb24gaW50ZXJydXB0ZWR1bnN1cHBvcnRlZHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVvdXQgb2YgbWVtb3J5aW4gcHJvZ3Jlc3NvdGhlciBlcnJvcnVuY2F0ZWdvcml6ZWQgZXJyb3JPcwAAAAAABAAAAAQAAAD+AQAAY29kZQAAAAABAAAAAQAAAP8BAABraW5k9wEAAAwAAAAEAAAAAAIAAG1lc3NhZ2VLaW5kRXJyb3IAAAAACAAAAAQAAAABAgAAAAAAAAQAAAAEAAAAAgIAAEN1c3RvbWVycm9yIChvcyBlcnJvciApAAEAAAAAAAAAZ48QAAsAAAByjxAAAQAAADogY2Fubm90IHJlY3Vyc2l2ZWx5IGFjcXVpcmUgbXV0ZXgAAI6PEAAgAAAAbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnO4jxAALAAAABMAAAAJAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvcG9pc29uL29uY2UucnMA9I8QACMAAACbAAAAMgAAAGxpYnJhcnkvc3RkL3NyYy9zeW5jL2xhenlfbG9jay5ycwAAACiQEAAhAAAA0QAAABMAAAA8dW5rbm93bj7vv71tZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAABokBAAFQAAAH2QEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJznJAQABgAAABjAQAACQAAAAoAAAD3AQAADAAAAAQAAAADAgAAAAAAAAgAAAAEAAAABAIAAAAAAAAIAAAABAAAAAUCAAAGAgAABwIAAAgCAAAJAgAAEAAAAAQAAAAKAgAACwIAAAwCAAANAgAAbGlicmFyeS9zdGQvc3JjLy4uLy4uL2JhY2t0cmFjZS9zcmMvc3ltYm9saXplL21vZC5ycyCREAA0AAAAZwEAADAAAAABAAAAAAAAAIyPEAACAAAAIC0gAAEAAAAAAAAAdJEQAAMAAAAgICAgICAgICAgICAgICAgICAgYXQgAAA4ihAAAQAAAE5vdEZvdW5kUGVybWlzc2lvbkRlbmllZENvbm5lY3Rpb25SZWZ1c2VkQ29ubmVjdGlvblJlc2V0SG9zdFVucmVhY2hhYmxlTmV0d29ya1VucmVhY2hhYmxlQ29ubmVjdGlvbkFib3J0ZWROb3RDb25uZWN0ZWRBZGRySW5Vc2VBZGRyTm90QXZhaWxhYmxlTmV0d29ya0Rvd25Ccm9rZW5QaXBlQWxyZWFkeUV4aXN0c1dvdWxkQmxvY2tOb3RBRGlyZWN0b3J5SXNBRGlyZWN0b3J5RGlyZWN0b3J5Tm90RW1wdHlSZWFkT25seUZpbGVzeXN0ZW1GaWxlc3lzdGVtTG9vcFN0YWxlTmV0d29ya0ZpbGVIYW5kbGVJbnZhbGlkSW5wdXRJbnZhbGlkRGF0YVRpbWVkT3V0V3JpdGVaZXJvU3RvcmFnZUZ1bGxOb3RTZWVrYWJsZVF1b3RhRXhjZWVkZWRGaWxlVG9vTGFyZ2VSZXNvdXJjZUJ1c3lFeGVjdXRhYmxlRmlsZUJ1c3lEZWFkbG9ja0Nyb3NzZXNEZXZpY2VzVG9vTWFueUxpbmtzSW52YWxpZEZpbGVuYW1lQXJndW1lbnRMaXN0VG9vTG9uZ0ludGVycnVwdGVkVW5zdXBwb3J0ZWRVbmV4cGVjdGVkRW9mT3V0T2ZNZW1vcnlJblByb2dyZXNzT3RoZXJVbmNhdGVnb3JpemVkb3BlcmF0aW9uIHN1Y2Nlc3NmdWxPbmNlIGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWTakxAAKgAAAG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgcGVyZm9ybWVkIHJlY3Vyc2l2ZWx5DJQQADgAAAAQAAAAEQAA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",self.location.href));const A=BI();(typeof g=="string"||typeof Request=="function"&&g instanceof Request||typeof URL=="function"&&g instanceof URL)&&(g=fetch(g));const{instance:Q,module:I}=await II(await g,A);return gI(Q,I)}const GA=-9,JA=(9-GA)/254,zA=Math.exp(GA),CI=11,EI=11,YQ=1<{E.enqueue(this.fileBytes.slice(0,65536)),E.close()}}).pipeThrough(new TextDecoderStream).getReader();this.header="";const I=`end_header\n`;for(;;){const{value:E,done:i}=await Q.read();if(i)throw new Error("Failed to read header");this.header+=E;const D=this.header.indexOf(I);if(D>=0){this.header=this.header.slice(0,D+I.length);break}}const B=new TextEncoder().encode(this.header).length;this.data=new DataView(this.fileBytes.buffer,B),this.elements={};let C=null;this.comments=[],this.header.trim().split(`\n`).forEach((E,i)=>{const D=E.trim();if(i===0){if(D!=="ply")throw new Error("Invalid PLY header");return}if(D.length===0)return;const w=D.split(" ");switch(w[0]){case"format":if(w[1]==="binary_little_endian")this.littleEndian=!0;else if(w[1]==="binary_big_endian")this.littleEndian=!1;else throw new Error(`Unsupported PLY format: ${w[1]}`);if(w[2]!=="1.0")throw new Error(`Unsupported PLY version: ${w[2]}`);break;case"end_header":break;case"comment":this.comments.push(D.slice(8));break;case"element":{const o=w[1];C={name:o,count:Number.parseInt(w[2]),properties:{}},this.elements[o]=C;break}case"property":if(C==null)throw new Error("Property must be inside an element");w[1]==="list"?C.properties[w[4]]={isList:!0,type:w[3],countType:w[2]}:C.properties[w[2]]={isList:!1,type:w[1]};break}}),this.elements.vertex&&(this.numSplats=this.elements.vertex.count)}parseData(A){let Q=0;const I=this.data;if(I==null)throw new Error("No data to parse");for(const B in this.elements){const C=this.elements[B],{count:E,properties:i}=C,D={},w=[];for(const[s,a]of Object.entries(i))a.isList?(D[s]=[],w.push(()=>{const t=D[s];t.length=mA[a.countType](I,Q,this.littleEndian),Q+=RA[a.countType];for(let c=0;c{D[s]=mA[a.type](I,Q,this.littleEndian),Q+=RA[a.type]}));const o=A(C)??(()=>{});for(let s=0;s[0,1,2].map((h,F)=>`f_rest_${G+F*M/3}`)),i=new Array(5).fill(null).flatMap((J,G)=>[0,1,2].map((h,F)=>`f_rest_${3+G+F*M/3}`)),D=new Array(7).fill(null).flatMap((J,G)=>[0,1,2].map((h,F)=>`f_rest_${8+G+F*M/3}`)),w=C>=1?new Float32Array(3*3):void 0,o=C>=2?new Float32Array(5*3):void 0,s=C>=3?new Float32Array(7*3):void 0}function t(M,J){if(!w)throw new Error("Missing sh1");for(const[G,h]of E.entries())w[G]=J[h]*8/255-4;if(o)for(const[G,h]of i.entries())o[G]=J[h]*8/255-4;if(s)for(const[G,h]of D.entries())s[G]=J[h]*8/255-4;Q==null||Q(M,w,o,s)}function c(M){const{min_x:J,min_y:G,min_z:h,max_x:F,max_y:U,max_z:K,min_scale_x:T,min_scale_y:W,min_scale_z:X,max_scale_x:Y,max_scale_y:$,max_scale_z:AA,min_r:m,min_g:j,min_b:b,max_r:p,max_g:O,max_b:H}=M.properties;if(!J||!G||!h||!F||!U||!K||!T||!W||!X||!Y||!$||!AA||!m||!j||!b||!p||!O||!H)throw new Error("Missing PLY chunk properties");return I=!0,(oA,QA)=>{const{min_x:q,min_y:r,min_z:z,max_x:f,max_y:V,max_z:R,min_scale_x:IA,min_scale_y:v,min_scale_z:sA,max_scale_x:P,max_scale_y:BA,max_scale_z:gA,min_r:cA,min_g:CA,min_b:aA,max_r:tA,max_g:N,max_b:d}=QA;B.push({min_x:q,min_y:r,min_z:z,max_x:f,max_y:V,max_z:R,min_scale_x:IA,min_scale_y:v,min_scale_z:sA,max_scale_x:P,max_scale_y:BA,max_scale_z:gA,min_r:cA,min_g:CA,min_b:aA,max_r:tA,max_g:N,max_b:d})}}function y(M){if(Q&&M.name==="sh")return C=lQ(M.properties),a(),t;if(M.name!=="vertex")return null;const{packed_position:J,packed_rotation:G,packed_scale:h,packed_color:F}=M.properties;if(!J||!G||!h||!F)throw new Error("Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color");const U=Math.sqrt(2);return(K,T)=>{const W=B[K>>>8];if(W==null)throw new Error("Missing PLY chunk");const{min_x:X,min_y:Y,min_z:$,max_x:AA,max_y:m,max_z:j,min_scale_x:b,min_scale_y:p,min_scale_z:O,max_scale_x:H,max_scale_y:oA,max_scale_z:QA,min_r:q,min_g:r,min_b:z,max_r:f,max_g:V,max_b:R}=W,{packed_position:IA,packed_rotation:v,packed_scale:sA,packed_color:P}=T,BA=(IA>>>21&2047)/2047*(AA-X)+X,gA=(IA>>>11&1023)/1023*(m-Y)+Y,cA=(IA&2047)/2047*(j-$)+$,CA=((v>>>20&1023)/1023-.5)*U,aA=((v>>>10&1023)/1023-.5)*U,tA=((v&1023)/1023-.5)*U,N=Math.sqrt(Math.max(0,1-CA*CA-aA*aA-tA*tA)),d=v>>>30,L=d===0?CA:d===1?N:aA,k=d<=1?aA:d===2?N:tA,kA=d<=2?tA:N,tQ=d===0?N:CA,cQ=Math.exp((sA>>>21&2047)/2047*(H-b)+b),GQ=Math.exp((sA>>>11&1023)/1023*(oA-p)+p),hQ=Math.exp((sA&2047)/2047*(QA-O)+O),yQ=(P>>>24&255)/255*(f-q)+q,MQ=(P>>>16&255)/255*(V-r)+r,NQ=(P>>>8&255)/255*(R-z)+z,FQ=(P&255)/255;A(K,BA,gA,cA,cQ,GQ,hQ,L,k,kA,tQ,FQ,yQ,MQ,NQ)}}const n=M=>{if(M.name==="chunk"&&this.comments.some(V=>V.toLowerCase().includes("supersplat")))return c(M);if(I)return y(M);if(M.name!=="vertex")return null;const{x:J,y:G,z:h,scale_0:F,scale_1:U,scale_2:K,rot_0:T,rot_1:W,rot_2:X,rot_3:Y,opacity:$,f_dc_0:AA,f_dc_1:m,f_dc_2:j,red:b,green:p,blue:O,alpha:H}=M.properties;if(!J||!G||!h)throw new Error("Missing PLY properties: x, y, z");const oA=F&&U&&K,QA=T&&W&&X&&Y,q=H!=null?pA[H.type]:1,r=b!=null?pA[b.type]:1,z=p!=null?pA[p.type]:1,f=O!=null?pA[O.type]:1;return C=lQ(M.properties),a(),(V,R)=>{const IA=oA?Math.exp(R.scale_0):lA.defaultPointScale,v=oA?Math.exp(R.scale_1):lA.defaultPointScale,sA=oA?Math.exp(R.scale_2):lA.defaultPointScale,P=QA?R.rot_1:0,BA=QA?R.rot_2:0,gA=QA?R.rot_3:0,cA=QA?R.rot_0:1,CA=$!=null?1/(1+Math.exp(-R.opacity)):H!=null?R.alpha/q:1,aA=AA!=null?R.f_dc_0*WA+.5:b!=null?R.red/r:1,tA=m!=null?R.f_dc_1*WA+.5:p!=null?R.green/z:1,N=j!=null?R.f_dc_2*WA+.5:O!=null?R.blue/f:1;if(A(V,R.x,R.y,R.z,IA,v,sA,P,BA,gA,cA,CA,aA,tA,N),Q&&w){if(w)for(const[d,L]of E.entries())w[d]=R[L];if(o)for(const[d,L]of i.entries())o[d]=R[L];if(s)for(const[d,L]of D.entries())s[d]=R[L];Q(V,w,o,s)}}};this.parseData(n)}injectRgba(A){let Q=0;const I=this.data;if(I==null)throw new Error("No parsed data");if(A.length!==this.numSplats*4)throw new Error("Invalid RGBA array length");for(const B in this.elements){const C=this.elements[B],{count:E,properties:i}=C,D=[];let w=0;const o=B==="vertex";if(o){for(const s of["opacity","f_dc_0","f_dc_1","f_dc_2"])if(!i[s]||i[s].type!=="float")throw new Error(`Can\'t injectRgba due to property: ${s}`)}for(const[s,a]of Object.entries(i))if(a.isList)D.push(()=>{const t=mA[a.countType](I,Q,this.littleEndian);Q+=RA[a.countType],Q+=t*RA[a.type]});else{if(o)if(s==="f_dc_0"||s==="f_dc_1"||s==="f_dc_2"){const t=Number.parseInt(s.slice(5));D.push(()=>{const c=(A[w+t]/255-.5)/WA;rQ[a.type](I,Q,this.littleEndian,c)})}else s==="opacity"&&D.push(()=>{const t=Math.max(-100,Math.min(100,-Math.log(1/(A[w+3]/255)-1)));rQ[a.type](I,Q,this.littleEndian,t)});D.push(()=>{Q+=RA[a.type]})}for(let s=0;sg.getInt8(A),uchar:(g,A,Q)=>g.getUint8(A),short:(g,A,Q)=>g.getInt16(A,Q),ushort:(g,A,Q)=>g.getUint16(A,Q),int:(g,A,Q)=>g.getInt32(A,Q),uint:(g,A,Q)=>g.getUint32(A,Q),float:(g,A,Q)=>g.getFloat32(A,Q),double:(g,A,Q)=>g.getFloat64(A,Q)},rQ={char:(g,A,Q,I)=>{g.setInt8(A,I)},uchar:(g,A,Q,I)=>{g.setUint8(A,I)},short:(g,A,Q,I)=>{g.setInt16(A,I,Q)},ushort:(g,A,Q,I)=>{g.setUint16(A,I,Q)},int:(g,A,Q,I)=>{g.setInt32(A,I,Q)},uint:(g,A,Q,I)=>{g.setUint32(A,I,Q)},float:(g,A,Q,I)=>{g.setFloat32(A,I,Q)},double:(g,A,Q,I)=>{g.setFloat64(A,I,Q)}},RA={char:1,uchar:1,short:2,ushort:2,int:4,uint:4,float:4,double:8},pA={char:127,uchar:255,short:32767,ushort:65535,int:2147483647,uint:4294967295,float:1,double:1},DI={0:0,9:1,24:2,45:3},wI={0:0,1:9,2:24,3:45};function lQ(g){let A=0;for(;g[`f_rest_${A}`];)A+=1;const Q=DI[A];if(Q==null)throw new Error(`Unsupported number of SH coefficients: ${A}`);return Q}var Z=Uint8Array,nA=Uint16Array,sI=Int32Array,LQ=new Z([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),SQ=new Z([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),oI=new Z([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),HQ=function(g,A){for(var Q=new nA(31),I=0;I<31;++I)Q[I]=A+=1<>1|(e&21845)<<1;hA=(hA&52428)>>2|(hA&13107)<<2,hA=(hA&61680)>>4|(hA&3855)<<4,OA[e]=((hA&65280)>>8|(hA&255)<<8)>>1}for(var SA=function(g,A,Q){for(var I=g.length,B=0,C=new nA(A);B>D]=w}else for(i=new nA(I),B=0;B>15-g[B]);return i},HA=new Z(288),e=0;e<144;++e)HA[e]=8;for(var e=144;e<256;++e)HA[e]=9;for(var e=256;e<280;++e)HA[e]=7;for(var e=280;e<288;++e)HA[e]=8;for(var KQ=new Z(32),e=0;e<32;++e)KQ[e]=5;var GI=SA(HA,9,1),hI=SA(KQ,5,1),vA=function(g){for(var A=g[0],Q=1;QA&&(A=g[Q]);return A},EA=function(g,A,Q){var I=A/8|0;return(g[I]|g[I+1]<<8)>>(A&7)&Q},PA=function(g,A){var Q=A/8|0;return(g[Q]|g[Q+1]<<8|g[Q+2]<<16)>>(A&7)},bQ=function(g){return(g+7)/8|0},fA=function(g,A,Q){return(A==null||A<0)&&(A=0),(Q==null||Q>g.length)&&(Q=g.length),new Z(g.subarray(A,Q))},yI=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],_=function(g,A,Q){var I=new Error(A||yI[g]);if(I.code=g,Error.captureStackTrace&&Error.captureStackTrace(I,_),!Q)throw I;return I},MI=function(g,A,Q,I){var B=g.length,C=0;if(!B||A.f&&!A.l)return Q||new Z(0);var E=!Q,i=E||A.i!=2,D=A.i;E&&(Q=new Z(B*3));var w=function(P){var BA=Q.length;if(P>BA){var gA=new Z(Math.max(BA*2,P));gA.set(Q),Q=gA}},o=A.f||0,s=A.p||0,a=A.b||0,t=A.l,c=A.d,y=A.m,n=A.n,M=B*8;do{if(!t){o=EA(g,s,1);var J=EA(g,s+1,3);if(s+=3,J)if(J==1)t=GI,c=hI,y=9,n=5;else if(J==2){var U=EA(g,s,31)+257,K=EA(g,s+10,15)+4,T=U+EA(g,s+5,31)+1;s+=14;for(var W=new Z(T),X=new Z(19),Y=0;Y>4;if(G<16)W[Y++]=G;else{var b=0,p=0;for(G==16?(p=3+EA(g,s,3),s+=2,b=W[Y-1]):G==17?(p=3+EA(g,s,7),s+=3):G==18&&(p=11+EA(g,s,127),s+=7);p--;)W[Y++]=b}}var O=W.subarray(0,U),H=W.subarray(U);y=vA(O),n=vA(H),t=SA(O,y,1),c=SA(H,n,1)}else _(1);else{var G=bQ(s)+4,h=g[G-4]|g[G-3]<<8,F=G+h;if(F>B){D&&_(0);break}i&&w(a+h),Q.set(g.subarray(G,F),a),A.b=a+=h,A.p=s=F*8,A.f=o;continue}if(s>M){D&&_(0);break}}i&&w(a+131072);for(var oA=(1<>4;if(s+=b&15,s>M){D&&_(0);break}if(b||_(2),r<256)Q[a++]=r;else if(r==256){q=s,t=null;break}else{var z=r-254;if(r>264){var Y=r-257,f=LQ[Y];z=EA(g,s,(1<>4;V||_(3),s+=V&15;var H=cI[R];if(R>3){var f=SQ[R];H+=PA(g,s)&(1<M){D&&_(0);break}i&&w(a+131072);var IA=a+z;if(a>3&1)+(A>>4&1);I>0;I-=!g[Q++]);return Q+(A&2)},_A=function(){function g(A,Q){typeof A=="function"&&(Q=A,A={}),this.ondata=Q;var I=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:I?I.length:0},this.o=new Z(32768),this.p=new Z(0),I&&this.o.set(I)}return g.prototype.e=function(A){if(this.ondata||_(5),this.d&&_(4),!this.p.length)this.p=A;else if(A.length){var Q=new Z(this.p.length+A.length);Q.set(this.p),Q.set(A,this.p.length),this.p=Q}},g.prototype.c=function(A){this.s.i=+(this.d=A||!1);var Q=this.s.b,I=MI(this.p,this.s,this.o);this.ondata(fA(I,Q,this.s.b),this.d),this.o=fA(I,this.s.b-32768),this.s.b=this.o.length,this.p=fA(this.p,this.s.p/8|0),this.s.p&=7},g.prototype.push=function(A,Q){this.e(A),this.c(Q)},g}(),kI=function(){function g(A,Q){this.v=1,this.r=0,_A.call(this,A,Q)}return g.prototype.push=function(A,Q){if(_A.prototype.e.call(this,A),this.r+=A.length,this.v){var I=this.p.subarray(this.v-1),B=I.length>3?FI(I):4;if(B>I.length){if(!Q)return}else this.v>1&&this.onmember&&this.onmember(this.r-I.length);this.p=I.subarray(B),this.v=0}_A.prototype.c.call(this,Q),this.s.f&&!this.s.l&&!Q&&(this.v=bQ(this.s.p)+9,this.s={i:0},this.o=new Z(0),this.push(new Z(0),Q))},g}(),JI=typeof TextDecoder<"u"&&new TextDecoder,RI=0;try{JI.decode(NI,{stream:!0}),RI=1}catch{}/**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */const qQ="172",nI="",iA="srgb",xQ="srgb-linear",WQ="linear",$A="srgb";function u(g,A,Q){return Math.max(A,Math.min(Q,g))}function YI(g,A){return(g%A+A)%A}function AQ(g,A,Q){return(1-Q)*g+Q*A}class dA{constructor(A,Q,I,B,C,E,i,D,w){dA.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],A!==void 0&&this.set(A,Q,I,B,C,E,i,D,w)}set(A,Q,I,B,C,E,i,D,w){const o=this.elements;return o[0]=A,o[1]=B,o[2]=i,o[3]=Q,o[4]=C,o[5]=D,o[6]=I,o[7]=E,o[8]=w,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(A){const Q=this.elements,I=A.elements;return Q[0]=I[0],Q[1]=I[1],Q[2]=I[2],Q[3]=I[3],Q[4]=I[4],Q[5]=I[5],Q[6]=I[6],Q[7]=I[7],Q[8]=I[8],this}extractBasis(A,Q,I){return A.setFromMatrix3Column(this,0),Q.setFromMatrix3Column(this,1),I.setFromMatrix3Column(this,2),this}setFromMatrix4(A){const Q=A.elements;return this.set(Q[0],Q[4],Q[8],Q[1],Q[5],Q[9],Q[2],Q[6],Q[10]),this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,Q){const I=A.elements,B=Q.elements,C=this.elements,E=I[0],i=I[3],D=I[6],w=I[1],o=I[4],s=I[7],a=I[2],t=I[5],c=I[8],y=B[0],n=B[3],M=B[6],J=B[1],G=B[4],h=B[7],F=B[2],U=B[5],K=B[8];return C[0]=E*y+i*J+D*F,C[3]=E*n+i*G+D*U,C[6]=E*M+i*h+D*K,C[1]=w*y+o*J+s*F,C[4]=w*n+o*G+s*U,C[7]=w*M+o*h+s*K,C[2]=a*y+t*J+c*F,C[5]=a*n+t*G+c*U,C[8]=a*M+t*h+c*K,this}multiplyScalar(A){const Q=this.elements;return Q[0]*=A,Q[3]*=A,Q[6]*=A,Q[1]*=A,Q[4]*=A,Q[7]*=A,Q[2]*=A,Q[5]*=A,Q[8]*=A,this}determinant(){const A=this.elements,Q=A[0],I=A[1],B=A[2],C=A[3],E=A[4],i=A[5],D=A[6],w=A[7],o=A[8];return Q*E*o-Q*i*w-I*C*o+I*i*D+B*C*w-B*E*D}invert(){const A=this.elements,Q=A[0],I=A[1],B=A[2],C=A[3],E=A[4],i=A[5],D=A[6],w=A[7],o=A[8],s=o*E-i*w,a=i*D-o*C,t=w*C-E*D,c=Q*s+I*a+B*t;if(c===0)return this.set(0,0,0,0,0,0,0,0,0);const y=1/c;return A[0]=s*y,A[1]=(B*w-o*I)*y,A[2]=(i*I-B*E)*y,A[3]=a*y,A[4]=(o*Q-B*D)*y,A[5]=(B*C-i*Q)*y,A[6]=t*y,A[7]=(I*D-w*Q)*y,A[8]=(E*Q-I*C)*y,this}transpose(){let A;const Q=this.elements;return A=Q[1],Q[1]=Q[3],Q[3]=A,A=Q[2],Q[2]=Q[6],Q[6]=A,A=Q[5],Q[5]=Q[7],Q[7]=A,this}getNormalMatrix(A){return this.setFromMatrix4(A).invert().transpose()}transposeIntoArray(A){const Q=this.elements;return A[0]=Q[0],A[1]=Q[3],A[2]=Q[6],A[3]=Q[1],A[4]=Q[4],A[5]=Q[7],A[6]=Q[2],A[7]=Q[5],A[8]=Q[8],this}setUvTransform(A,Q,I,B,C,E,i){const D=Math.cos(C),w=Math.sin(C);return this.set(I*D,I*w,-I*(D*E+w*i)+E+A,-B*w,B*D,-B*(-w*E+D*i)+i+Q,0,0,1),this}scale(A,Q){return this.premultiply(QQ.makeScale(A,Q)),this}rotate(A){return this.premultiply(QQ.makeRotation(-A)),this}translate(A,Q){return this.premultiply(QQ.makeTranslation(A,Q)),this}makeTranslation(A,Q){return A.isVector2?this.set(1,0,A.x,0,1,A.y,0,0,1):this.set(1,0,A,0,1,Q,0,0,1),this}makeRotation(A){const Q=Math.cos(A),I=Math.sin(A);return this.set(Q,-I,0,I,Q,0,0,0,1),this}makeScale(A,Q){return this.set(A,0,0,0,Q,0,0,0,1),this}equals(A){const Q=this.elements,I=A.elements;for(let B=0;B<9;B++)if(Q[B]!==I[B])return!1;return!0}fromArray(A,Q=0){for(let I=0;I<9;I++)this.elements[I]=A[I+Q];return this}toArray(A=[],Q=0){const I=this.elements;return A[Q]=I[0],A[Q+1]=I[1],A[Q+2]=I[2],A[Q+3]=I[3],A[Q+4]=I[4],A[Q+5]=I[5],A[Q+6]=I[6],A[Q+7]=I[7],A[Q+8]=I[8],A}clone(){return new this.constructor().fromArray(this.elements)}}const QQ=new dA,mQ=new dA().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),pQ=new dA().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function eI(){const g={enabled:!0,workingColorSpace:xQ,spaces:{},convert:function(B,C,E){return this.enabled===!1||C===E||!C||!E||(this.spaces[C].transfer===$A&&(B.r=YA(B.r),B.g=YA(B.g),B.b=YA(B.b)),this.spaces[C].primaries!==this.spaces[E].primaries&&(B.applyMatrix3(this.spaces[C].toXYZ),B.applyMatrix3(this.spaces[E].fromXYZ)),this.spaces[E].transfer===$A&&(B.r=eA(B.r),B.g=eA(B.g),B.b=eA(B.b))),B},fromWorkingColorSpace:function(B,C){return this.convert(B,this.workingColorSpace,C)},toWorkingColorSpace:function(B,C){return this.convert(B,C,this.workingColorSpace)},getPrimaries:function(B){return this.spaces[B].primaries},getTransfer:function(B){return B===nI?WQ:this.spaces[B].transfer},getLuminanceCoefficients:function(B,C=this.workingColorSpace){return B.fromArray(this.spaces[C].luminanceCoefficients)},define:function(B){Object.assign(this.spaces,B)},_getMatrix:function(B,C,E){return B.copy(this.spaces[C].toXYZ).multiply(this.spaces[E].fromXYZ)},_getDrawingBufferColorSpace:function(B){return this.spaces[B].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(B=this.workingColorSpace){return this.spaces[B].workingColorSpaceConfig.unpackColorSpace}},A=[.64,.33,.3,.6,.15,.06],Q=[.2126,.7152,.0722],I=[.3127,.329];return g.define({[xQ]:{primaries:A,whitePoint:I,transfer:WQ,toXYZ:mQ,fromXYZ:pQ,luminanceCoefficients:Q,workingColorSpaceConfig:{unpackColorSpace:iA},outputColorSpaceConfig:{drawingBufferColorSpace:iA}},[iA]:{primaries:A,whitePoint:I,transfer:$A,toXYZ:mQ,fromXYZ:pQ,luminanceCoefficients:Q,outputColorSpaceConfig:{drawingBufferColorSpace:iA}}}),g}const DA=eI();function YA(g){return g<.04045?g*.0773993808:Math.pow(g*.9478672986+.0521327014,2.4)}function eA(g){return g<.0031308?g*12.92:1.055*Math.pow(g,.41666)-.055}class IQ{constructor(A=0,Q=0,I=0,B=1){this.isQuaternion=!0,this._x=A,this._y=Q,this._z=I,this._w=B}static slerpFlat(A,Q,I,B,C,E,i){let D=I[B+0],w=I[B+1],o=I[B+2],s=I[B+3];const a=C[E+0],t=C[E+1],c=C[E+2],y=C[E+3];if(i===0){A[Q+0]=D,A[Q+1]=w,A[Q+2]=o,A[Q+3]=s;return}if(i===1){A[Q+0]=a,A[Q+1]=t,A[Q+2]=c,A[Q+3]=y;return}if(s!==y||D!==a||w!==t||o!==c){let n=1-i;const M=D*a+w*t+o*c+s*y,J=M>=0?1:-1,G=1-M*M;if(G>Number.EPSILON){const F=Math.sqrt(G),U=Math.atan2(F,M*J);n=Math.sin(n*U)/F,i=Math.sin(i*U)/F}const h=i*J;if(D=D*n+a*h,w=w*n+t*h,o=o*n+c*h,s=s*n+y*h,n===1-i){const F=1/Math.sqrt(D*D+w*w+o*o+s*s);D*=F,w*=F,o*=F,s*=F}}A[Q]=D,A[Q+1]=w,A[Q+2]=o,A[Q+3]=s}static multiplyQuaternionsFlat(A,Q,I,B,C,E){const i=I[B],D=I[B+1],w=I[B+2],o=I[B+3],s=C[E],a=C[E+1],t=C[E+2],c=C[E+3];return A[Q]=i*c+o*s+D*t-w*a,A[Q+1]=D*c+o*a+w*s-i*t,A[Q+2]=w*c+o*t+i*a-D*s,A[Q+3]=o*c-i*s-D*a-w*t,A}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get w(){return this._w}set w(A){this._w=A,this._onChangeCallback()}set(A,Q,I,B){return this._x=A,this._y=Q,this._z=I,this._w=B,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(A){return this._x=A.x,this._y=A.y,this._z=A.z,this._w=A.w,this._onChangeCallback(),this}setFromEuler(A,Q=!0){const I=A._x,B=A._y,C=A._z,E=A._order,i=Math.cos,D=Math.sin,w=i(I/2),o=i(B/2),s=i(C/2),a=D(I/2),t=D(B/2),c=D(C/2);switch(E){case"XYZ":this._x=a*o*s+w*t*c,this._y=w*t*s-a*o*c,this._z=w*o*c+a*t*s,this._w=w*o*s-a*t*c;break;case"YXZ":this._x=a*o*s+w*t*c,this._y=w*t*s-a*o*c,this._z=w*o*c-a*t*s,this._w=w*o*s+a*t*c;break;case"ZXY":this._x=a*o*s-w*t*c,this._y=w*t*s+a*o*c,this._z=w*o*c+a*t*s,this._w=w*o*s-a*t*c;break;case"ZYX":this._x=a*o*s-w*t*c,this._y=w*t*s+a*o*c,this._z=w*o*c-a*t*s,this._w=w*o*s+a*t*c;break;case"YZX":this._x=a*o*s+w*t*c,this._y=w*t*s+a*o*c,this._z=w*o*c-a*t*s,this._w=w*o*s-a*t*c;break;case"XZY":this._x=a*o*s-w*t*c,this._y=w*t*s-a*o*c,this._z=w*o*c+a*t*s,this._w=w*o*s+a*t*c;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+E)}return Q===!0&&this._onChangeCallback(),this}setFromAxisAngle(A,Q){const I=Q/2,B=Math.sin(I);return this._x=A.x*B,this._y=A.y*B,this._z=A.z*B,this._w=Math.cos(I),this._onChangeCallback(),this}setFromRotationMatrix(A){const Q=A.elements,I=Q[0],B=Q[4],C=Q[8],E=Q[1],i=Q[5],D=Q[9],w=Q[2],o=Q[6],s=Q[10],a=I+i+s;if(a>0){const t=.5/Math.sqrt(a+1);this._w=.25/t,this._x=(o-D)*t,this._y=(C-w)*t,this._z=(E-B)*t}else if(I>i&&I>s){const t=2*Math.sqrt(1+I-i-s);this._w=(o-D)/t,this._x=.25*t,this._y=(B+E)/t,this._z=(C+w)/t}else if(i>s){const t=2*Math.sqrt(1+i-I-s);this._w=(C-w)/t,this._x=(B+E)/t,this._y=.25*t,this._z=(D+o)/t}else{const t=2*Math.sqrt(1+s-I-i);this._w=(E-B)/t,this._x=(C+w)/t,this._y=(D+o)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(A,Q){let I=A.dot(Q)+1;return IMath.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=I):(this._x=0,this._y=-A.z,this._z=A.y,this._w=I)):(this._x=A.y*Q.z-A.z*Q.y,this._y=A.z*Q.x-A.x*Q.z,this._z=A.x*Q.y-A.y*Q.x,this._w=I),this.normalize()}angleTo(A){return 2*Math.acos(Math.abs(u(this.dot(A),-1,1)))}rotateTowards(A,Q){const I=this.angleTo(A);if(I===0)return this;const B=Math.min(1,Q/I);return this.slerp(A,B),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(A){return this._x*A._x+this._y*A._y+this._z*A._z+this._w*A._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let A=this.length();return A===0?(this._x=0,this._y=0,this._z=0,this._w=1):(A=1/A,this._x=this._x*A,this._y=this._y*A,this._z=this._z*A,this._w=this._w*A),this._onChangeCallback(),this}multiply(A){return this.multiplyQuaternions(this,A)}premultiply(A){return this.multiplyQuaternions(A,this)}multiplyQuaternions(A,Q){const I=A._x,B=A._y,C=A._z,E=A._w,i=Q._x,D=Q._y,w=Q._z,o=Q._w;return this._x=I*o+E*i+B*w-C*D,this._y=B*o+E*D+C*i-I*w,this._z=C*o+E*w+I*D-B*i,this._w=E*o-I*i-B*D-C*w,this._onChangeCallback(),this}slerp(A,Q){if(Q===0)return this;if(Q===1)return this.copy(A);const I=this._x,B=this._y,C=this._z,E=this._w;let i=E*A._w+I*A._x+B*A._y+C*A._z;if(i<0?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,i=-i):this.copy(A),i>=1)return this._w=E,this._x=I,this._y=B,this._z=C,this;const D=1-i*i;if(D<=Number.EPSILON){const t=1-Q;return this._w=t*E+Q*this._w,this._x=t*I+Q*this._x,this._y=t*B+Q*this._y,this._z=t*C+Q*this._z,this.normalize(),this}const w=Math.sqrt(D),o=Math.atan2(w,i),s=Math.sin((1-Q)*o)/w,a=Math.sin(Q*o)/w;return this._w=E*s+this._w*a,this._x=I*s+this._x*a,this._y=B*s+this._y*a,this._z=C*s+this._z*a,this._onChangeCallback(),this}slerpQuaternions(A,Q,I){return this.copy(A).slerp(Q,I)}random(){const A=2*Math.PI*Math.random(),Q=2*Math.PI*Math.random(),I=Math.random(),B=Math.sqrt(1-I),C=Math.sqrt(I);return this.set(B*Math.sin(A),B*Math.cos(A),C*Math.sin(Q),C*Math.cos(Q))}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w}fromArray(A,Q=0){return this._x=A[Q],this._y=A[Q+1],this._z=A[Q+2],this._w=A[Q+3],this._onChangeCallback(),this}toArray(A=[],Q=0){return A[Q]=this._x,A[Q+1]=this._y,A[Q+2]=this._z,A[Q+3]=this._w,A}fromBufferAttribute(A,Q){return this._x=A.getX(Q),this._y=A.getY(Q),this._z=A.getZ(Q),this._w=A.getW(Q),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class FA{constructor(A=0,Q=0,I=0){FA.prototype.isVector3=!0,this.x=A,this.y=Q,this.z=I}set(A,Q,I){return I===void 0&&(I=this.z),this.x=A,this.y=Q,this.z=I,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setComponent(A,Q){switch(A){case 0:this.x=Q;break;case 1:this.y=Q;break;case 2:this.z=Q;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+A)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this}addVectors(A,Q){return this.x=A.x+Q.x,this.y=A.y+Q.y,this.z=A.z+Q.z,this}addScaledVector(A,Q){return this.x+=A.x*Q,this.y+=A.y*Q,this.z+=A.z*Q,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this}subVectors(A,Q){return this.x=A.x-Q.x,this.y=A.y-Q.y,this.z=A.z-Q.z,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this}multiplyVectors(A,Q){return this.x=A.x*Q.x,this.y=A.y*Q.y,this.z=A.z*Q.z,this}applyEuler(A){return this.applyQuaternion(fQ.setFromEuler(A))}applyAxisAngle(A,Q){return this.applyQuaternion(fQ.setFromAxisAngle(A,Q))}applyMatrix3(A){const Q=this.x,I=this.y,B=this.z,C=A.elements;return this.x=C[0]*Q+C[3]*I+C[6]*B,this.y=C[1]*Q+C[4]*I+C[7]*B,this.z=C[2]*Q+C[5]*I+C[8]*B,this}applyNormalMatrix(A){return this.applyMatrix3(A).normalize()}applyMatrix4(A){const Q=this.x,I=this.y,B=this.z,C=A.elements,E=1/(C[3]*Q+C[7]*I+C[11]*B+C[15]);return this.x=(C[0]*Q+C[4]*I+C[8]*B+C[12])*E,this.y=(C[1]*Q+C[5]*I+C[9]*B+C[13])*E,this.z=(C[2]*Q+C[6]*I+C[10]*B+C[14])*E,this}applyQuaternion(A){const Q=this.x,I=this.y,B=this.z,C=A.x,E=A.y,i=A.z,D=A.w,w=2*(E*B-i*I),o=2*(i*Q-C*B),s=2*(C*I-E*Q);return this.x=Q+D*w+E*s-i*o,this.y=I+D*o+i*w-C*s,this.z=B+D*s+C*o-E*w,this}project(A){return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix)}unproject(A){return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld)}transformDirection(A){const Q=this.x,I=this.y,B=this.z,C=A.elements;return this.x=C[0]*Q+C[4]*I+C[8]*B,this.y=C[1]*Q+C[5]*I+C[9]*B,this.z=C[2]*Q+C[6]*I+C[10]*B,this.normalize()}divide(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this}divideScalar(A){return this.multiplyScalar(1/A)}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this}clamp(A,Q){return this.x=u(this.x,A.x,Q.x),this.y=u(this.y,A.y,Q.y),this.z=u(this.z,A.z,Q.z),this}clampScalar(A,Q){return this.x=u(this.x,A,Q),this.y=u(this.y,A,Q),this.z=u(this.z,A,Q),this}clampLength(A,Q){const I=this.length();return this.divideScalar(I||1).multiplyScalar(u(I,A,Q))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,Q){return this.x+=(A.x-this.x)*Q,this.y+=(A.y-this.y)*Q,this.z+=(A.z-this.z)*Q,this}lerpVectors(A,Q,I){return this.x=A.x+(Q.x-A.x)*I,this.y=A.y+(Q.y-A.y)*I,this.z=A.z+(Q.z-A.z)*I,this}cross(A){return this.crossVectors(this,A)}crossVectors(A,Q){const I=A.x,B=A.y,C=A.z,E=Q.x,i=Q.y,D=Q.z;return this.x=B*D-C*i,this.y=C*E-I*D,this.z=I*i-B*E,this}projectOnVector(A){const Q=A.lengthSq();if(Q===0)return this.set(0,0,0);const I=A.dot(this)/Q;return this.copy(A).multiplyScalar(I)}projectOnPlane(A){return BQ.copy(this).projectOnVector(A),this.sub(BQ)}reflect(A){return this.sub(BQ.copy(A).multiplyScalar(2*this.dot(A)))}angleTo(A){const Q=Math.sqrt(this.lengthSq()*A.lengthSq());if(Q===0)return Math.PI/2;const I=this.dot(A)/Q;return Math.acos(u(I,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const Q=this.x-A.x,I=this.y-A.y,B=this.z-A.z;return Q*Q+I*I+B*B}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)+Math.abs(this.z-A.z)}setFromSpherical(A){return this.setFromSphericalCoords(A.radius,A.phi,A.theta)}setFromSphericalCoords(A,Q,I){const B=Math.sin(Q)*A;return this.x=B*Math.sin(I),this.y=Math.cos(Q)*A,this.z=B*Math.cos(I),this}setFromCylindrical(A){return this.setFromCylindricalCoords(A.radius,A.theta,A.y)}setFromCylindricalCoords(A,Q,I){return this.x=A*Math.sin(Q),this.y=I,this.z=A*Math.cos(Q),this}setFromMatrixPosition(A){const Q=A.elements;return this.x=Q[12],this.y=Q[13],this.z=Q[14],this}setFromMatrixScale(A){const Q=this.setFromMatrixColumn(A,0).length(),I=this.setFromMatrixColumn(A,1).length(),B=this.setFromMatrixColumn(A,2).length();return this.x=Q,this.y=I,this.z=B,this}setFromMatrixColumn(A,Q){return this.fromArray(A.elements,Q*4)}setFromMatrix3Column(A,Q){return this.fromArray(A.elements,Q*3)}setFromEuler(A){return this.x=A._x,this.y=A._y,this.z=A._z,this}setFromColor(A){return this.x=A.r,this.y=A.g,this.z=A.b,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z}fromArray(A,Q=0){return this.x=A[Q],this.y=A[Q+1],this.z=A[Q+2],this}toArray(A=[],Q=0){return A[Q]=this.x,A[Q+1]=this.y,A[Q+2]=this.z,A}fromBufferAttribute(A,Q){return this.x=A.getX(Q),this.y=A.getY(Q),this.z=A.getZ(Q),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const A=Math.random()*Math.PI*2,Q=Math.random()*2-1,I=Math.sqrt(1-Q*Q);return this.x=I*Math.cos(A),this.y=Q,this.z=I*Math.sin(A),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const BQ=new FA,fQ=new IQ,VQ={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},yA={h:0,s:0,l:0},VA={h:0,s:0,l:0};function gQ(g,A,Q){return Q<0&&(Q+=1),Q>1&&(Q-=1),Q<1/6?g+(A-g)*6*Q:Q<1/2?A:Q<2/3?g+(A-g)*6*(2/3-Q):g}class CQ{constructor(A,Q,I){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(A,Q,I)}set(A,Q,I){if(Q===void 0&&I===void 0){const B=A;B&&B.isColor?this.copy(B):typeof B=="number"?this.setHex(B):typeof B=="string"&&this.setStyle(B)}else this.setRGB(A,Q,I);return this}setScalar(A){return this.r=A,this.g=A,this.b=A,this}setHex(A,Q=iA){return A=Math.floor(A),this.r=(A>>16&255)/255,this.g=(A>>8&255)/255,this.b=(A&255)/255,DA.toWorkingColorSpace(this,Q),this}setRGB(A,Q,I,B=DA.workingColorSpace){return this.r=A,this.g=Q,this.b=I,DA.toWorkingColorSpace(this,B),this}setHSL(A,Q,I,B=DA.workingColorSpace){if(A=YI(A,1),Q=u(Q,0,1),I=u(I,0,1),Q===0)this.r=this.g=this.b=I;else{const C=I<=.5?I*(1+Q):I+Q-I*Q,E=2*I-C;this.r=gQ(E,C,A+1/3),this.g=gQ(E,C,A),this.b=gQ(E,C,A-1/3)}return DA.toWorkingColorSpace(this,B),this}setStyle(A,Q=iA){function I(C){C!==void 0&&parseFloat(C)<1&&console.warn("THREE.Color: Alpha component of "+A+" will be ignored.")}let B;if(B=/^(\\w+)\\(([^\\)]*)\\)/.exec(A)){let C;const E=B[1],i=B[2];switch(E){case"rgb":case"rgba":if(C=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(i))return I(C[4]),this.setRGB(Math.min(255,parseInt(C[1],10))/255,Math.min(255,parseInt(C[2],10))/255,Math.min(255,parseInt(C[3],10))/255,Q);if(C=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(i))return I(C[4]),this.setRGB(Math.min(100,parseInt(C[1],10))/100,Math.min(100,parseInt(C[2],10))/100,Math.min(100,parseInt(C[3],10))/100,Q);break;case"hsl":case"hsla":if(C=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(i))return I(C[4]),this.setHSL(parseFloat(C[1])/360,parseFloat(C[2])/100,parseFloat(C[3])/100,Q);break;default:console.warn("THREE.Color: Unknown color model "+A)}}else if(B=/^\\#([A-Fa-f\\d]+)$/.exec(A)){const C=B[1],E=C.length;if(E===3)return this.setRGB(parseInt(C.charAt(0),16)/15,parseInt(C.charAt(1),16)/15,parseInt(C.charAt(2),16)/15,Q);if(E===6)return this.setHex(parseInt(C,16),Q);console.warn("THREE.Color: Invalid hex color "+A)}else if(A&&A.length>0)return this.setColorName(A,Q);return this}setColorName(A,Q=iA){const I=VQ[A.toLowerCase()];return I!==void 0?this.setHex(I,Q):console.warn("THREE.Color: Unknown color "+A),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(A){return this.r=A.r,this.g=A.g,this.b=A.b,this}copySRGBToLinear(A){return this.r=YA(A.r),this.g=YA(A.g),this.b=YA(A.b),this}copyLinearToSRGB(A){return this.r=eA(A.r),this.g=eA(A.g),this.b=eA(A.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(A=iA){return DA.fromWorkingColorSpace(x.copy(this),A),Math.round(u(x.r*255,0,255))*65536+Math.round(u(x.g*255,0,255))*256+Math.round(u(x.b*255,0,255))}getHexString(A=iA){return("000000"+this.getHex(A).toString(16)).slice(-6)}getHSL(A,Q=DA.workingColorSpace){DA.fromWorkingColorSpace(x.copy(this),Q);const I=x.r,B=x.g,C=x.b,E=Math.max(I,B,C),i=Math.min(I,B,C);let D,w;const o=(i+E)/2;if(i===E)D=0,w=0;else{const s=E-i;switch(w=o<=.5?s/(E+i):s/(2-E-i),E){case I:D=(B-C)/s+(B{const i=E.trimEnd();return A?i:i.length>0?(A=!0,i):null}).filter(E=>E!=null);for(;Q.length>0&&Q[Q.length-1].length===0;)Q.pop();if(Q.length===0)return[];const I=(C=Q[0].match(/^\\s*/))==null?void 0:C[0];if(!I)return Q;const B=new RegExp(`^${I}`);return Q.map(E=>E.replace(B,""))}function rI(g){return UI(g).join(`\n`)}const EQ=new Float32Array(1),uQ=new Uint32Array(EQ.buffer);function UA(g){EQ[0]=g;const A=uQ[0],Q=A>>31&1,I=A>>23&255,B=A&8388607,C=Q<<15;if(I===255)return B!==0?C|32767:C|31744;const E=I-127+15;if(E>=31)return C|31744;if(E<=0){if(E<-10)return C;const D=(B|8388608)>>1-E+13;return C|D}const i=B>>13;return C|E<<10|i}function wA(g){const A=g>>15&1,Q=g>>10&31,I=g&1023;let B;if(Q===0)if(I===0)B=A<<31;else{let C=I,E=-14;for(;(C&1024)===0;)C<<=1,E--;C&=1023;const i=E+127,D=C<<13;B=A<<31|i<<23|D}else if(Q===31)I===0?B=A<<31|2139095040:B=A<<31|2143289344;else{const C=Q-15+127,E=I<<13;B=A<<31|C<<23|E}return uQ[0]=B,EQ[0]}function MA(g){return Math.max(0,Math.min(255,Math.round(g*255)))}function lI(g){const A=[],Q=new Set;function I(B){B&&typeof B=="object"&&!Q.has(B)&&(Q.add(B),B instanceof ArrayBuffer?A.push(B):ArrayBuffer.isView(B)?A.push(B.buffer):Array.isArray(B)?B.forEach(I):Object.values(B).forEach(I))}return I(g),A}function iQ(g,A,Q,I,B,C,E,i,D,w,o,s,a,t,c,y){const n=MA(t),M=MA(c),J=MA(y),G=MA(a),h=XQ(new IQ(D,w,o,s)),F=h&255,U=h>>>8&255,K=h>>>16&255,T=C===0?0:Math.min(255,Math.max(0,Math.round((Math.log(C)-GA)/JA)+1)),W=E===0?0:Math.min(255,Math.max(0,Math.round((Math.log(E)-GA)/JA)+1)),X=i===0?0:Math.min(255,Math.max(0,Math.round((Math.log(i)-GA)/JA)+1)),Y=UA(Q),$=UA(I),AA=UA(B),m=A*4;g[m]=n|M<<8|J<<16|G<<24,g[m+1]=Y|$<<16,g[m+2]=AA|F<<16|U<<24,g[m+3]=T|W<<8|X<<16|K<<24}function LI(g,A,Q,I,B){const C=UA(Q),E=UA(I),i=UA(B),D=A*4;g[D+1]=C|E<<16,g[D+2]=i|g[D+2]&4294901760}function SI(g,A,Q,I,B){const C=Q===0?0:Math.min(255,Math.max(0,Math.round((Math.log(Q)-GA)/JA)+1)),E=I===0?0:Math.min(255,Math.max(0,Math.round((Math.log(I)-GA)/JA)+1)),i=B===0?0:Math.min(255,Math.max(0,Math.round((Math.log(B)-GA)/JA)+1)),D=A*4;g[D+3]=C|E<<8|i<<16|g[D+3]&4278190080}function HI(g,A,Q,I,B,C){const E=XQ(new IQ(Q,I,B,C)),i=E&255,D=E>>>8&255,w=E>>>16&255,o=A*4;g[o+2]=g[o+2]&65535|i<<16|D<<24,g[o+3]=g[o+3]&16777215|w<<24}function dI(g,A,Q,I,B){const C=MA(Q),E=MA(I),i=MA(B),D=A*4;g[D]=C|E<<8|i<<16|g[D]&4278190080}function ZI(g,A,Q){const I=MA(Q),B=A*4;g[B]=g[B]&16777215|I<<24}new FA,new FA,new CQ,rI(`\n precision highp float;\n\n in vec3 position;\n\n void main() {\n gl_Position = vec4(position.xy, 0.0, 1.0);\n }\n`);function XQ(g){const A=g.clone().normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const Q=2*Math.acos(A.w),I=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),B=I<1e-6?new FA(1,0,0):new FA(A.x,A.y,A.z).divideScalar(I),C=Math.abs(B.x)+Math.abs(B.y)+Math.abs(B.z);let E=B.x/C,i=B.y/C;if(B.z<0){const t=E;E=(1-Math.abs(i))*(E>=0?1:-1),i=(1-Math.abs(t))*(i>=0?1:-1)}const D=E*.5+.5,w=i*.5+.5,o=Math.round(D*255),s=Math.round(w*255);return Math.round(Q*(255/Math.PI))<<16|s<<8|o}function uA(g,A,Q,I){const B=Math.max(-127,Math.min(127,g*127)),C=Math.max(-127,Math.min(127,A*127)),E=Math.max(-127,Math.min(127,Q*127)),i=Math.max(-127,Math.min(127,I*127));return B&255|(C&255)<<8|(E&255)<<16|(i&255)<<24}function DQ(g,A,Q){const I=A*2;for(let B=0;B<9;++B){const C=Math.max(-63,Math.min(63,Q[B]*63))&127,E=B*7,i=E+7,D=Math.floor(E/32),w=E-D*32,o=C<D*32+32){const s=C>>>32-w&4294967295;g[I+D+1]|=s}}}function wQ(g,A,Q){g[A*4+0]=uA(Q[0],Q[1],Q[2],Q[3]),g[A*4+1]=uA(Q[4],Q[5],Q[6],Q[7]),g[A*4+2]=uA(Q[8],Q[9],Q[10],Q[11]),g[A*4+3]=uA(Q[12],Q[13],Q[14],0)}function sQ(g,A,Q){const I=A*4;for(let B=0;B<21;++B){const C=Math.max(-31,Math.min(31,Q[B]*31))&63,E=B*6,i=E+6,D=Math.floor(E/32),w=E-D*32,o=C<D*32+32){const s=C>>>32-w&4294967295;g[I+D+1]|=s}}}class KI{constructor({fileBytes:A,chunkBytes:Q=64*1024}){this.fileBytes=A,this.chunkBytes=Q,this.offset=0,this.chunks=[],this.totalBytes=0,this.gunzip=new kI((I,B)=>{this.chunks.push(I),this.totalBytes+=I.length})}read(A){for(;this.totalBytes=this.fileBytes.length&&this.gunzip.push(new Uint8Array(0),!0),this.totalBytes2)throw new Error(`Unsupported SPZ version: ${this.version}`);this.numSplats=Q.getUint32(8,!0),this.shDegree=Q.getUint8(12),this.fractionalBits=Q.getUint8(13),this.flags=Q.getUint8(14),this.flagAntiAlias=(this.flags&1)!==0,this.reserved=Q.getUint8(15),this.parsed=!1}parseSplats(A,Q,I,B,C,E){if(this.parsed)throw new Error("SPZ file already parsed");if(this.parsed=!0,this.version===1){const i=this.reader.read(this.numSplats*3*2),D=new Uint16Array(i.buffer);for(let w=0;w>8)/i,a=((D[o+5]<<24|D[o+4]<<16|D[o+3]<<8)>>8)/i,t=((D[o+8]<<24|D[o+7]<<16|D[o+6]<<8)>>8)/i;A(w,s,a,t)}}else throw new Error("Unreachable");{const i=this.reader.read(this.numSplats);for(let D=0;D=1){const i=new Float32Array(9),D=this.shDegree>=2?new Float32Array(5*3):void 0,w=this.shDegree>=3?new Float32Array(7*3):void 0,o=this.reader.read(this.numSplats*qI[this.shDegree]*3);let s=0;for(let a=0;a{iQ(g,E,i,D,w,o{i&&(B.sh1||(B.sh1=new Uint32Array(I*2)),DQ(B.sh1,E,i)),D&&(B.sh2||(B.sh2=new Uint32Array(I*4)),wQ(B.sh2,E,D)),w&&(B.sh3||(B.sh3=new Uint32Array(I*4)),sQ(B.sh3,E,w))}),{packedArray:g,numSplats:I,extra:B}}function oQ(g){const A=YQ,Q=Math.max(iI,Math.min(eQ,Math.ceil(g/A))),I=Math.ceil(g/(A*Q));return A*Q*I}function mI(g){const A=new bI({fileBytes:g}),Q=A.numSplats,I=oQ(Q),B=new Uint32Array(I*4),C={};return A.parseSplats((E,i,D,w)=>{LI(B,E,i,D,w)},(E,i)=>{ZI(B,E,i)},(E,i,D,w)=>{dI(B,E,i,D,w)},(E,i,D,w)=>{SI(B,E,i,D,w)},(E,i,D,w,o)=>{HI(B,E,i,D,w,o)},(E,i,D,w)=>{i&&(C.sh1||(C.sh1=new Uint32Array(Q*2)),DQ(C.sh1,E,i)),D&&(C.sh2||(C.sh2=new Uint32Array(Q*4)),wQ(C.sh2,E,D)),w&&(C.sh3||(C.sh3=new Uint32Array(Q*4)),sQ(C.sh3,E,w))}),{packedArray:B,numSplats:Q,extra:C}}function pI(g){const A=Math.floor(g.length/32);if(A*32!==g.length)throw new Error("Invalid .splat file size");const Q=oQ(A),I=new Uint32Array(Q*4),B=new Float32Array(g.buffer);for(let C=0;C2)throw new Error(`Invalid .ksplat compression level: ${w}`);const o=B.getFloat32(36,!0)||-1.5,s=B.getFloat32(40,!0)||1.5,a=D,t=oQ(a),c=new Uint32Array(t*4),y={};let n=4096+i*1024;for(let J=0;J=1?new Float32Array(3*3):void 0,gA=j>=2?new Float32Array(5*3):void 0,cA=j>=3?new Float32Array(7*3):void 0,CA=W/2/Y,aA=n+AA,tA=n+m,N=new DataView(g.buffer,tA,R),d=new Float32Array(g.buffer,aA,T*3);for(let L=0;L=1){if(BA){y.sh1||(y.sh1=new Uint32Array(a*2));for(const[KA,bA]of v.entries())BA[KA]=G(k,bA);DQ(y.sh1,L,BA)}if(gA){y.sh2||(y.sh2=new Uint32Array(a*4));for(const[KA,bA]of sA.entries())gA[KA]=G(k,bA);wQ(y.sh2,L,gA)}if(cA){y.sh3||(y.sh3=new Uint32Array(a*4));for(const[KA,bA]of P.entries())cA[KA]=G(k,bA);sQ(y.sh3,L,cA)}}}n+=IA}return{packedArray:c,numSplats:a,extra:y}}const rA=31744,ZA=rA+1;let l=null;function _I({totalSplats:g,readback:A,ordering:Q}){l||(l=new Uint32Array(ZA)),l.fill(0);const I=A.map(D=>new Uint32Array(D.buffer)),B=I[0].length,C=Math.ceil(g/B);let E=0;for(let D=0;D=0;--B){const C=I+l[B];l[B]=I,I=C}for(let B=0;B { + (self.URL || self.webkitURL).revokeObjectURL(A); + }), I; + } catch { + return new Worker( + "data:text/javascript;charset=utf-8," + encodeURIComponent(tt), + { + name: Q == null ? void 0 : Q.name + } + ); + } finally { + A && (self.URL || self.webkitURL).revokeObjectURL(A); + } +} +class Ue { + constructor() { + this.messages = {}, this.messageIdNext = 0, this.worker = new ue(), this.worker.onmessage = (A) => this.onMessage(A); + } + makeMessageId() { + return ++this.messageIdNext; + } + makeMessagePromiseId() { + const A = this.makeMessageId(), I = new Promise((g, B) => { + this.messages[A] = { resolve: g, reject: B }; + }); + return { id: A, promise: I }; + } + onMessage(A) { + const { id: I, result: g, error: B } = A.data, C = this.messages[I]; + C && (delete this.messages[I], B ? C.reject(B) : C.resolve(g)); + } + // Invoke an RPC on the worker with the given name and arguments. + // The normal usage of a worker is to run one activity at a time, + // but this function allows for concurrent calls, tagging each request + // with a unique message Id and awaiting a response to that same Id. + // The method will automatically transfer any ArrayBuffers in the + // arguments to the worker. If you'd like to transfer a copy of a + // buffer then you must clone it before passing to this function. + async call(A, I) { + const { id: g, promise: B } = this.makeMessagePromiseId(); + return this.worker.postMessage( + { name: A, args: I, id: g }, + { transfer: sB(I) } + ), B; + } +} +let it = 4, QI = 0; +const st = [], ot = []; +async function Se() { + const Q = st.shift(); + if (Q) + return Q; + if (QI < it) { + const A = new Ue(); + return QI += 1, A; + } + return new Promise((A) => { + ot.push(A); + }); +} +function Le(Q) { + if (QI > it) { + QI -= 1; + return; + } + const A = ot.shift(); + if (A) { + A(Q); + return; + } + st.push(Q); +} +async function eQ(Q) { + const A = await Se(); + try { + return await Q(A); + } finally { + Le(A); + } +} +class JD extends Yt { + constructor(A) { + super(A), this.fileLoader = new dt(A); + } + load(A, I, g, B) { + this.fileLoader.setResponseType("arraybuffer"), this.fileLoader.setCrossOrigin(this.crossOrigin), this.fileLoader.setWithCredentials(this.withCredentials), this.fileLoader.setPath(this.path), this.fileLoader.setResourcePath(this.resourcePath), this.fileLoader.setRequestHeader(this.requestHeader), this.fileLoader.load( + A, + async (C) => { + if (I) { + const t = await at({ + input: C, + fileType: this.fileType, + pathOrUrl: A + }); + I(new fA(t)); + } + }, + g, + B + ); + } + async loadAsync(A, I) { + return new Promise((g, B) => { + this.load( + A, + (C) => { + g(C); + }, + I, + B + ); + }); + } + parse(A) { + return new OA({ packedSplats: A }); + } +} +var pe = /* @__PURE__ */ ((Q) => (Q.PLY = "ply", Q.WLG0 = "wlg0", Q.SPZ = "spz", Q.SPLAT = "splat", Q.KSPLAT = "ksplat", Q))(pe || {}); +function He(Q) { + const A = new DataView(Q.buffer); + if ((A.getUint32(0, !0) & 16777215) === 7957616) + return "ply"; + if (A.getUint32(0, !0) === 809978967) + return "wlg0"; + if ((A.getUint32(0, !0) & 16777215) === 559903) { + const I = hB(Q, 4); + return new DataView(I.buffer).getUint32(0, !0) === 1347635022 ? "spz" : void 0; + } +} +function fe(Q) { + const A = Q.split(/[?#]/, 1)[0], I = Math.max( + A.lastIndexOf("/"), + A.lastIndexOf("\\") + ), g = A.slice(I + 1), B = g.lastIndexOf("."); + return B <= 0 || B === g.length - 1 ? "" : g.slice(B + 1).toLowerCase(); +} +async function at({ + input: Q, + fileType: A, + pathOrUrl: I +}) { + const g = Q instanceof ArrayBuffer ? new Uint8Array(Q) : Q; + let B = A; + if (!A && (B = He(g), !B && I)) { + const C = fe(I); + C === "ply" ? B = "ply" : C === "wlg" ? B = "wlg0" : C === "spz" ? B = "spz" : C === "splat" ? B = "splat" : C === "ksplat" && (B = "ksplat"); + } + if (B === "wlg0") + return await eQ(async (C) => { + const { packedArray: E, numSplats: t } = await C.call("decodeWlg", { + fileBytes: g + }); + return { packedArray: E, numSplats: t }; + }); + if (B === "ply") { + const C = new kI({ fileBytes: g }); + await C.parseHeader(); + const E = C.numSplats, t = wA(E).maxSplats, s = { fileBytes: g, packedArray: new Uint32Array(t * 4) }; + return await eQ(async (o) => { + const { packedArray: a, numSplats: i, extra: D } = await o.call( + "unpackPly", + s + ); + return { packedArray: a, numSplats: i, extra: D }; + }); + } + if (B === "spz") + return await eQ(async (C) => { + const { packedArray: E, numSplats: t, extra: s } = await C.call( + "decodeSpz", + { + fileBytes: g + } + ); + return { packedArray: E, numSplats: t, extra: s }; + }); + if (B === "splat") + return await eQ(async (C) => { + const { packedArray: E, numSplats: t } = await C.call("decodeAntiSplat", { + fileBytes: g + }); + return { packedArray: E, numSplats: t }; + }); + if (B === "ksplat") + return await eQ(async (C) => { + const { packedArray: E, numSplats: t, extra: s } = await C.call( + "decodeKsplat", + { fileBytes: g } + ); + return { packedArray: E, numSplats: t, extra: s }; + }); + throw new Error("Unknown splat file type"); +} +var me = `precision highp float; +precision highp int; +precision highp sampler2D; +precision highp usampler2D; +precision highp isampler2D; +precision highp sampler2DArray; +precision highp usampler2DArray; +precision highp isampler2DArray; +precision highp sampler3D; +precision highp usampler3D; +precision highp isampler3D; + +#include + +uniform uint targetLayer; +uniform int targetBase; +uniform int targetCount; + +out uvec4 target; + +{{ GLOBALS }} + +void produceSplat(int index) { + {{ STATEMENTS }} +} + +void main() { + int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x); + int index = targetIndex - targetBase; + + if ((index >= 0) && (index < targetCount)) { + produceSplat(index); + } else { + target = uvec4(0u, 0u, 0u, 0u); + } +}`; +const K = class K { + constructor(A = {}) { + this.maxSplats = 0, this.numSplats = 0, this.packedArray = null, this.isInitialized = !1, this.target = null, this.source = null, this.needsUpdate = !0, this.extra = {}, this.dyno = new mI({ packedSplats: this }), this.initialized = Promise.resolve(this), this.reinitialize(A); + } + reinitialize(A) { + this.isInitialized = !1, A.url || A.fileBytes || A.construct ? this.initialized = this.asyncInitialize(A).then(() => (this.isInitialized = !0, this)) : (this.initialize(A), this.isInitialized = !0, this.initialized = Promise.resolve(this)); + } + initialize(A) { + A.packedArray ? (this.packedArray = A.packedArray, this.maxSplats = Math.floor(this.packedArray.length / 4), this.maxSplats = Math.floor(this.maxSplats / Z) * Z, this.numSplats = Math.min( + this.maxSplats, + A.numSplats ?? Number.POSITIVE_INFINITY + )) : (this.maxSplats = A.maxSplats ?? 0, this.numSplats = 0), this.extra = A.extra ?? {}; + } + async asyncInitialize(A) { + let { url: I, fileBytes: g, construct: B } = A; + if (I && (g = await fetch(I).then(async (C) => { + if (!C.ok) + throw new Error( + `${C.status} "${C.statusText}" fetching URL: ${I}` + ); + return await C.arrayBuffer(); + })), g) { + const C = await at({ + input: g, + fileType: A.fileType, + pathOrUrl: I + }); + this.initialize(C); + } + if (B) { + const C = B(this); + C instanceof Promise && await C; + } + } + // Call this when you are finished with the PackedSplats and want to free + // any buffers it holds. + dispose() { + this.target && (this.target.dispose(), this.target = null), this.source && (this.source.dispose(), this.source = null); + } + // Ensures that this.packedArray can fit numSplats Gsplats. If it's too small, + // resize exponentially and copy over the original data. + // + // Typically you don't need to call this, because calling this.setSplat(index, ...) + // and this.pushSplat(...) will automatically call ensureSplats() so we have + // enough splats. + ensureSplats(A) { + const I = A <= this.maxSplats ? this.maxSplats : ( + // Grow exponentially to avoid frequent reallocations + Math.max(A, 2 * this.maxSplats) + ), g = this.packedArray ? this.packedArray.length / 4 : 0; + if (!this.packedArray || I > g) { + this.maxSplats = wA(I).maxSplats; + const B = new Uint32Array(this.maxSplats * 4); + this.packedArray && B.set(this.packedArray), this.packedArray = B; + } + return this.packedArray; + } + // Ensure the extra array for the given level is large enough to hold numSplats + ensureSplatsSh(A, I) { + let g, B; + if (A === 0) + return this.ensureSplats(I); + if (A === 1) + g = 2, B = "sh1"; + else if (A === 2) + g = 4, B = "sh2"; + else if (A === 3) + g = 4, B = "sh3"; + else + throw new Error(`Invalid level: ${A}`); + let C = this.extra[B] ? this.extra[B].length / g : 0; + const E = I <= C ? C : Math.max(I, 2 * C); + if (!this.extra[B] || E > C) { + C = wA(E).maxSplats; + const t = new Uint32Array(C * g); + this.extra[B] && t.set(this.extra[B]), this.extra[B] = t; + } + return this.extra[B]; + } + // Unpack the 16-byte Gsplat data at index into the Three.js components + // center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, + // opacity: number 0..1, color: THREE.Color 0..1. + getSplat(A) { + if (!this.packedArray || A >= this.numSplats) + throw new Error("Invalid index"); + return yI(this.packedArray, A); + } + // Set all PackedSplat components at index with the provided Gsplat attributes + // (can be the same objects returned by getSplat). Ensures there is capacity + // for at least index+1 Gsplats. + setSplat(A, I, g, B, C, E) { + const t = this.ensureSplats(A + 1); + hI( + t, + A, + I.x, + I.y, + I.z, + g.x, + g.y, + g.z, + B.x, + B.y, + B.z, + B.w, + C, + E.r, + E.g, + E.b + ), this.numSplats = Math.max(this.numSplats, A + 1); + } + // Effectively calls this.setSplat(this.numSplats++, center, ...), useful on + // construction where you just want to iterate and create a collection of Gsplats. + pushSplat(A, I, g, B, C) { + const E = this.ensureSplats(this.numSplats + 1); + hI( + E, + this.numSplats, + A.x, + A.y, + A.z, + I.x, + I.y, + I.z, + g.x, + g.y, + g.z, + g.w, + B, + C.r, + C.g, + C.b + ), ++this.numSplats; + } + // Iterate over Gsplats index 0..=(this.numSplats-1), unpack each Gsplat + // and invoke the callback function with the Gsplat attributes. + forEachSplat(A) { + if (!(!this.packedArray || !this.numSplats)) + for (let I = 0; I < this.numSplats; ++I) { + const g = yI(this.packedArray, I); + A( + I, + g.center, + g.scales, + g.quaternion, + g.opacity, + g.color + ); + } + } + // Ensures our PackedSplats.target render target has enough space to generate + // maxSplats total Gsplats, and reallocate if not large enough. + ensureGenerate(A) { + if (this.target && (A ?? 1) <= this.maxSplats) + return !1; + this.dispose(); + const I = wA(A ?? 1), { width: g, height: B, depth: C } = I; + return this.maxSplats = I.maxSplats, this.target = new e.WebGLArrayRenderTarget(g, B, C, { + depthBuffer: !1, + stencilBuffer: !1, + generateMipmaps: !1, + magFilter: e.NearestFilter, + minFilter: e.NearestFilter + }), this.target.texture.format = e.RGBAIntegerFormat, this.target.texture.type = e.UnsignedIntType, this.target.texture.internalFormat = "RGBA32UI", !0; + } + // Given an array of splatCounts (.numSplats for each + // SplatGenerator/SplatMesh in the scene), compute a + // "mapping layout" in the composite array of generated outputs. + generateMapping(A) { + let I = 0; + const g = A.map((B) => { + const C = I, E = Math.ceil(B / Z) * Z; + return I += E, { base: C, count: B }; + }); + return { maxSplats: I, mapping: g }; + } + // Returns a THREE.DataArrayTexture representing the PackedSplats content as + // a Uint32x4 data array texture (2048 x 2048 x depth in size) + getTexture() { + return this.target ? this.target.texture : this.source || this.packedArray ? this.maybeUpdateSource() : K.getEmpty(); + } + // Check if source texture needs to be created/updated + maybeUpdateSource() { + if (!this.packedArray) + throw new Error("No packed splats"); + if (this.needsUpdate || !this.source) { + if (this.needsUpdate = !1, this.source) { + const { width: A, height: I, depth: g } = this.source.image; + this.maxSplats !== A * I * g && (this.source.dispose(), this.source = null); + } + if (this.source) + this.packedArray.buffer !== this.source.image.data.buffer && (this.source.image.data = new Uint8Array(this.packedArray.buffer)); + else { + const { width: A, height: I, depth: g } = wA(this.maxSplats); + this.source = new e.DataArrayTexture( + this.packedArray, + A, + I, + g + ), this.source.format = e.RGBAIntegerFormat, this.source.type = e.UnsignedIntType, this.source.internalFormat = "RGBA32UI", this.source.needsUpdate = !0; + } + this.source.needsUpdate = !0; + } + return this.source; + } + // Can be used where you need an uninitialized THREE.DataArrayTexture like + // a uniform you will update with the result of this.getTexture() later. + static getEmpty() { + if (!K.emptySource) { + const { width: A, height: I, depth: g, maxSplats: B } = wA(1), C = new Uint32Array(B * 4); + K.emptySource = new e.DataArrayTexture( + C, + A, + I, + g + ), K.emptySource.format = e.RGBAIntegerFormat, K.emptySource.type = e.UnsignedIntType, K.emptySource.internalFormat = "RGBA32UI", K.emptySource.needsUpdate = !0; + } + return K.emptySource; + } + // Get a program and THREE.RawShaderMaterial for a given GsplatGenerator, + // generating it if necessary and caching the result. + prepareProgramMaterial(A) { + let I = K.generatorProgram.get(A); + if (!I) { + const B = UA( + { index: "int" }, + { output: "uvec4" }, + ({ index: C }) => { + A.inputs.index = C; + const E = A.outputs.gsplat; + return { output: wg(E) }; + } + ); + K.programTemplate || (K.programTemplate = new HI( + me + )), I = new pI({ + graph: B, + inputs: { index: "index" }, + outputs: { output: "target" }, + template: K.programTemplate + }), Object.assign(I.uniforms, { + targetLayer: { value: 0 }, + targetBase: { value: 0 }, + targetCount: { value: 0 } + }), K.generatorProgram.set(A, I); + } + const g = I.prepareMaterial(); + return K.mesh.material = g, { program: I, material: g }; + } + saveRenderState(A) { + return { + xrPresenting: A.xr.isPresenting, + autoClear: A.autoClear, + scissorTest: A.getScissorTest() + }; + } + resetRenderState(A, I) { + A.setRenderTarget(null), A.xr.isPresenting = I.xrPresenting, A.autoClear = I.autoClear, A.setScissorTest(I.scissorTest); + } + // Executes a dyno program specified by generator which is any DynoBlock that + // maps { index: "int" } to { gsplat: Gsplat }. This is called in + // ForgeRenderer.updateInternal() to re-generate Gsplats in the scene for + // SplatGenerator instances whose version is newer than what was generated + // for it last time. + generate({ + generator: A, + base: I, + count: g, + renderer: B + }) { + if (!this.target) + throw new Error("Target must be initialized with ensureSplats"); + if (I + g > this.maxSplats) + throw new Error("Base + count exceeds maxSplats"); + const { program: C, material: E } = this.prepareProgramMaterial(A); + C.update(); + const t = this.saveRenderState(B), s = Math.ceil((I + g) / Z) * Z, o = Z * IQ; + for (E.uniforms.targetBase.value = I, E.uniforms.targetCount.value = g; I < s; ) { + const a = Math.floor(I / o); + E.uniforms.targetLayer.value = a; + const i = a * o, D = Math.floor((I - i) / Z), n = Math.min( + IQ, + Math.ceil((s - i) / Z) + ); + B.setRenderTarget(this.target, a), B.xr.isPresenting = !1, B.autoClear = !1, B.setScissorTest(!0), B.setScissor( + 0, + D, + Z, + n - D + ), B.render(K.scene, K.camera), I += Z * (n - D); + } + return this.resetRenderState(B, t), { nextBase: s }; + } +}; +K.emptySource = null, K.programTemplate = null, K.generatorProgram = /* @__PURE__ */ new Map(), K.geometry = new e.PlaneGeometry(2, 2), K.mesh = new e.Mesh( + K.geometry, + new e.RawShaderMaterial({ visible: !1 }) +), K.scene = new e.Scene().add(K.mesh), K.camera = new e.Camera(); +let fA = K; +class mI extends F { + constructor({ packedSplats: A } = {}) { + super({ + key: "packedSplats", + type: HQ, + globals: () => [CI], + value: { + texture: fA.getEmpty(), + numSplats: 0 + }, + update: (I) => { + var g, B; + return I.texture = ((g = this.packedSplats) == null ? void 0 : g.getTexture()) ?? fA.getEmpty(), I.numSplats = ((B = this.packedSplats) == null ? void 0 : B.numSplats) ?? 0, I; + } + }), this.packedSplats = A; + } +} +class FI extends e.InstancedBufferGeometry { + constructor(A, I) { + super(), this.ordering = A, this.setAttribute("position", new e.BufferAttribute(be, 3)), this.setIndex(new e.BufferAttribute(xe, 1)), this._maxInstanceCount = A.length, this.instanceCount = I, this.attribute = new e.InstancedBufferAttribute(A, 1, !1, 1), this.attribute.setUsage(e.DynamicDrawUsage), this.setAttribute("splatIndex", this.attribute); + } + update(A, I) { + this.ordering = A, this.attribute.array = A, this.instanceCount = I, this.attribute.addUpdateRange(0, I), this.attribute.needsUpdate = !0; + } +} +const be = new Float32Array([ + -1, + -1, + 0, + 1, + -1, + 0, + 1, + 1, + 0, + -1, + 1, + 0 +]), xe = new Uint16Array([0, 1, 2, 0, 2, 3]), XA = class XA { + constructor(A) { + if (this.lastTime = null, this.encodeLinear = !1, this.superXY = 1, this.display = null, this.sorting = null, this.pending = null, this.sortingCheck = !1, this.readback = new Uint16Array(0), this.forge = A.forge, this.camera = A.camera, this.viewToWorld = A.viewToWorld ?? new e.Matrix4(), A.target) { + const { width: I, height: g, doubleBuffer: B } = A.target, C = Math.max(1, Math.min(4, A.target.superXY ?? 1)); + if (this.superXY = C, I * C > 8192 || g * C > 8192) + throw new Error("Target size too large"); + this.target = new e.WebGLRenderTarget( + I * C, + g * C, + { + format: e.RGBAFormat, + type: e.UnsignedByteType, + colorSpace: e.SRGBColorSpace + } + ), B && (this.back = new e.WebGLRenderTarget( + I * C, + g * C, + { + format: e.RGBAFormat, + type: e.UnsignedByteType, + colorSpace: e.SRGBColorSpace + } + )), this.encodeLinear = !0; + } + this.onTextureUpdated = A.onTextureUpdated, this.sortRadial = A.sortRadial ?? !0, this.sortDistance = A.sortDistance, this.sortCoorient = A.sortCoorient, this.depthBias = A.depthBias, this.sort360 = A.sort360, this.orderingFreelist = new oB({ + allocate: (I) => new Uint32Array(I), + valid: (I, g) => I.length === g + }), this.autoUpdate = !1, this.setAutoUpdate(A.autoUpdate ?? !1); + } + // Call this when you are done with the ForgeViewpoint and want to + // free up its resources (GPU targets, pixel buffers, etc.) + dispose() { + var A; + this.setAutoUpdate(!1), this.target && (this.target.dispose(), this.target = void 0), this.back && (this.back.dispose(), this.back = void 0), this.display && (this.forge.releaseAccumulator(this.display.accumulator), this.display.geometry.dispose(), this.display = null), (A = this.pending) != null && A.accumulator && (this.forge.releaseAccumulator(this.pending.accumulator), this.pending = null); + } + // Use this function to change whether this viewpoint will auto-update + // its sort order whenever the attached ForgeRenderer updates the Gsplats. + // Turn this on or off depending on whether you expect to do renders from + // this viewpoint most frames. + setAutoUpdate(A) { + !this.autoUpdate && A ? this.forge.autoViewpoints.push(this) : this.autoUpdate && !A && (this.forge.autoViewpoints = this.forge.autoViewpoints.filter( + (I) => I !== this + )), this.autoUpdate = A; + } + // See below async prepareRenderPixels() for explanation of parameters. + // Awaiting this method updates the Gsplats in the scene and performs a sort of the + // Gsplats from this viewpoint, preparing it for a subsequent this.renderTarget() + // call in the same tick. + async prepare({ + scene: A, + camera: I, + viewToWorld: g, + update: B, + forceOrigin: C + }) { + var t; + for (g ? this.viewToWorld = g : (this.camera = I ?? this.camera, this.camera && (this.camera.updateMatrixWorld(), this.viewToWorld = this.camera.matrixWorld.clone())); B ?? !0; ) { + const s = C ? this.viewToWorld : void 0; + if (this.forge.updateInternal({ scene: A, originToWorld: s })) + break; + await new Promise((a) => setTimeout(a, 10)); + } + const E = this.forge.active; + E !== ((t = this.display) == null ? void 0 : t.accumulator) && (this.forge.active.refCount += 1), await this.sortUpdate({ accumulator: E, viewToWorld: this.viewToWorld }); + } + // Render out the viewpoint to the view target RGBA buffer. + // Swaps buffers if doubleBuffer: true was set. + // Calls onTextureUpdated(texture) with the resulting texture. + renderTarget({ + scene: A, + camera: I + }) { + var B; + const g = this.back ?? this.target; + if (!g) + throw new Error("Must initialize ForgeViewpoint with target"); + if (I = I ?? this.camera, !I) + throw new Error("Must provide camera"); + if (I instanceof e.PerspectiveCamera) { + const C = new e.PerspectiveCamera().copy(I, !1); + C.aspect = g.width / g.height, C.updateProjectionMatrix(), I = C; + } + this.viewToWorld = I.matrixWorld.clone(); + try { + this.forge.renderer.setRenderTarget(g), this.forge.prepareViewpoint(this), this.forge.renderer.render(A, I); + } finally { + this.forge.prepareViewpoint(this.forge.defaultView), this.forge.renderer.setRenderTarget(null); + } + g !== this.target && ([this.target, this.back] = [this.back, this.target]), (B = this.onTextureUpdated) == null || B.call(this, g.texture); + } + // Read back the previously rendered target image as a Uint8Array of packed + // RGBA values (in that order). If superXY was set greater than 1 then + // downsampling is performed in the target pixel array with simple averaging + // to derive the returned pixel values. Subsequent calls to this.readTarget() + // will reuse the same buffers to minimize memory allocations. + async readTarget() { + if (!this.target) + throw new Error("Must initialize ForgeViewpoint with target"); + const { width: A, height: I } = this.target, g = A * I * 4; + (!this.superPixels || this.superPixels.length < g) && (this.superPixels = new Uint8Array(g)), await this.forge.renderer.readRenderTargetPixelsAsync( + this.target, + 0, + 0, + A, + I, + this.superPixels + ); + const { superXY: B } = this; + if (B === 1) + return this.superPixels; + const C = A / B, E = I / B, t = C * E * 4; + (!this.pixels || this.pixels.length < t) && (this.pixels = new Uint8Array(t)); + const { superPixels: s, pixels: o } = this, a = B * B; + for (let i = 0; i < E; i++) { + const D = i * C; + for (let n = 0; n < C; n++) { + const w = n * B; + let c = 0, r = 0, y = 0, G = 0; + for (let M = 0; M < B; M++) { + const l = (i * B + M) * this.target.width; + for (let k = 0; k < B; k++) { + const R = (l + w + k) * 4; + c += s[R], r += s[R + 1], y += s[R + 2], G += s[R + 3]; + } + } + const h = (D + n) * 4; + o[h] = c / a, o[h + 1] = r / a, o[h + 2] = y / a, o[h + 3] = G / a; + } + } + return o; + } + // Render out a viewpoint as a Uint8Array of RGBA values for the provided scene + // and any camera/viewToWorld viewpoint overrides. By default update is true, + // which triggers its ForgeRenderer to check and potentially update the Gsplats. + // Setting update to false disables this and sorts the Gsplats as they are. + // Setting forceOrigin (default: false) to true forces the view update to + // recalculate the splats with this view origin, potentially altering any + // view-dependent effects. If you expect view-dependent effects to play a role + // in the rendering quality, enable this. + // + // Underneath, prepareRenderPixels() simply calls await this.prepare(...), + // this.renderTarget(...), and finally returns the result this.readTarget(), + // a Promise to a Uint8Array with RGBA values for all the pixels (potentially + // downsampled if the superXY parameter was used). These steps can also be called + // manually, for example if you need to alter the scene before and after + // this.renderTarget(...) to hide UI elements from being rendered. + async prepareRenderPixels({ + scene: A, + camera: I, + viewToWorld: g, + update: B, + forceOrigin: C + }) { + return await this.prepare({ scene: A, camera: I, viewToWorld: g, update: B, forceOrigin: C }), this.renderTarget({ scene: A, camera: I }), this.readTarget(); + } + // This is called automatically by ForgeRenderer, there is no need to call it! + // The method cannot be private because then ForgeRenderer would + // not be able to call it. + autoPoll({ accumulator: A }) { + var B, C, E; + this.camera && (this.camera.updateMatrixWorld(), this.viewToWorld = this.camera.matrixWorld.clone()); + let I = !1; + if (!this.display) + I = !0; + else if (A) { + I = !0; + const { mappingVersion: t } = this.display.accumulator; + A.mappingVersion === t && (this.forge.releaseAccumulator(this.display.accumulator), this.display.accumulator = A); + } + const g = ((B = this.sorting) == null ? void 0 : B.viewToWorld) ?? ((C = this.display) == null ? void 0 : C.viewToWorld); + g && !_Q({ + matrix1: this.viewToWorld, + matrix2: g, + // By default update sort each 1 cm + maxDistance: this.sortDistance ?? 0.01, + // By default for radial sort, update for intermittent movement so that + // we bring back splats culled by being behind the camera. + // For depth sort, small rotations can change sort order a lot, so + // update sort for even small rotations. + minCoorient: this.sortCoorient ?? this.sortRadial ? 0.99 : 0.999 + }) && (I = !0), I && (A && (A.refCount += 1), A && ((E = this.pending) != null && E.accumulator) && this.forge.releaseAccumulator(this.pending.accumulator), this.pending = { accumulator: A, viewToWorld: this.viewToWorld }, this.driveSort()); + } + async driveSort() { + var A; + for (; ; ) { + if (this.sorting || !this.pending) + return; + const I = this.pending.viewToWorld; + let g = this.pending.accumulator ?? ((A = this.display) == null ? void 0 : A.accumulator); + if (g || (g = this.forge.active, g.refCount += 1), this.pending = null, !g) + throw new Error("No accumulator to sort"); + this.sorting = { viewToWorld: I }, await this.sortUpdate({ accumulator: g, viewToWorld: I }), this.sorting = null; + } + } + async sortUpdate({ + accumulator: A, + viewToWorld: I + }) { + if (this.sortingCheck) + throw new Error("Only one sort at a time"); + this.sortingCheck = !0, A = A ?? this.forge.active; + const { numSplats: g, maxSplats: B } = A.splats; + let C = 0, E = this.orderingFreelist.alloc(B); + if (g > 0) { + const { + reader: t, + doubleSortReader: s, + dynoSortRadial: o, + dynoOrigin: a, + dynoDirection: i, + dynoDepthBias: D, + dynoSort360: n, + dynoSplats: w + } = XA.makeSorter(), c = Math.ceil(B / 2); + this.readback = t.ensureBuffer(c, this.readback); + const r = A.toWorld.clone().invert(), y = I.clone().premultiply(r); + o.value = this.sort360 ? !0 : this.sortRadial, a.value.set(0, 0, 0).applyMatrix4(y), i.value.set(0, 0, -1).applyMatrix4(y).sub(a.value).normalize(), D.value = this.depthBias ?? 1, n.value = this.sort360 ?? !1, w.packedSplats = A.splats, await t.renderReadback({ + renderer: this.forge.renderer, + reader: s, + count: Math.ceil(g / 2), + readback: this.readback + }); + const G = await eQ(async (h) => h.call("sortDoubleSplats", { + numSplats: g, + readback: this.readback, + ordering: E + })); + this.readback = G.readback, E = G.ordering, C = G.activeSplats; + } + this.updateDisplay({ accumulator: A, viewToWorld: I, ordering: E, activeSplats: C }), this.sortingCheck = !1; + } + updateDisplay({ + accumulator: A, + viewToWorld: I, + ordering: g, + activeSplats: B + }) { + if (!this.display) + this.display = { + accumulator: A, + viewToWorld: I, + geometry: new FI(g, B) + }; + else { + A !== this.display.accumulator && (this.forge.releaseAccumulator(this.display.accumulator), this.display.accumulator = A), this.display.viewToWorld = I; + const C = this.display.geometry.ordering; + C.length === g.length ? this.display.geometry.update(g, B) : (this.display.geometry.dispose(), this.display.geometry = new FI(g, B)), this.orderingFreelist.free(C); + } + this.forge.viewpoint === this && this.forge.prepareViewpoint(this); + } + static makeSorter() { + if (!XA.dynos) { + const A = new PQ({ value: !0 }), I = new hQ({ value: new e.Vector3() }), g = new hQ({ value: new e.Vector3() }), B = new gQ({ value: 1 }), C = new PQ({ value: !1 }), E = new mI(), t = new $Q(), s = UA( + { index: "int" }, + { rgba8: "vec4" }, + ({ index: o }) => { + if (!o) + throw new Error("No index"); + const a = { + sortRadial: A, + sortOrigin: I, + sortDirection: g, + sortDepthBias: B, + sort360: C + }, i = BA(o, q("int", 2)), D = dQ(E, i), n = jI({ gsplat: D, ...a }), w = dQ( + E, + cA(i, q("int", 1)) + ), c = jI({ gsplat: w, ...a }), r = HA({ + vectorType: "vec2", + x: n, + y: c + }); + return { rgba8: MC(lC(r)) }; + } + ); + XA.dynos = { + dynoSortRadial: A, + dynoOrigin: I, + dynoDirection: g, + dynoDepthBias: B, + dynoSort360: C, + dynoSplats: E, + reader: t, + doubleSortReader: s + }; + } + return XA.dynos; + } +}; +XA.EMPTY_TEXTURE = new e.Texture(), XA.dynos = null; +let II = XA; +const Ke = IA(` + float computeSort(Gsplat gsplat, bool sortRadial, vec3 sortOrigin, vec3 sortDirection, float sortDepthBias, bool sort360) { + if (!isGsplatActive(gsplat.flags)) { + return INFINITY; + } + + vec3 center = gsplat.center - sortOrigin; + float biasedDepth = dot(center, sortDirection) + sortDepthBias; + if (!sort360 && (biasedDepth <= 0.0)) { + return INFINITY; + } + + return sortRadial ? length(center) : biasedDepth; + } +`); +function jI({ + gsplat: Q, + sortRadial: A, + sortOrigin: I, + sortDirection: g, + sortDepthBias: B, + sort360: C +}) { + return pQ({ + inTypes: { + gsplat: v, + sortRadial: "bool", + sortOrigin: "vec3", + sortDirection: "vec3", + sortDepthBias: "float", + sort360: "bool" + }, + outTypes: { metric: "float" }, + globals: () => [rA, Ke], + inputs: { + gsplat: Q, + sortRadial: A, + sortOrigin: I, + sortDirection: g, + sortDepthBias: B, + sort360: C + }, + statements: ({ inputs: E, outputs: t }) => { + const { + gsplat: s, + sortRadial: o, + sortOrigin: a, + sortDirection: i, + sortDepthBias: D, + sort360: n + } = E; + return JA(` + ${t.metric} = computeSort(${s}, ${o}, ${a}, ${i}, ${D}, ${n}); + `); + } + }).outputs.metric; +} +class DI { + constructor() { + this.splats = new fA(), this.toWorld = new e.Matrix4(), this.mapping = [], this.refCount = 0, this.splatsVersion = -1, this.mappingVersion = -1; + } + ensureGenerate(A) { + this.splats.ensureGenerate(A) && (this.mapping = []); + } + // Generate all Gsplats from an array of generators + generateSplats({ + renderer: A, + modifier: I, + generators: g, + forceUpdate: B, + originToWorld: C + }) { + const E = this.mapping.reduce((o, a) => (o.set(a.node, a), o), /* @__PURE__ */ new Map()); + let t = 0, s = 0; + for (const { node: o, generator: a, version: i, base: D, count: n } of g) { + const w = E.get(o); + if ((B || a !== (w == null ? void 0 : w.generator) || i !== (w == null ? void 0 : w.version) || D !== (w == null ? void 0 : w.base) || n !== (w == null ? void 0 : w.count)) && a) { + const c = I.apply(a); + try { + this.splats.generate({ + generator: c, + base: D, + count: n, + renderer: A + }); + } catch (r) { + o.generator = void 0, o.generatorError = r; + } + t += 1; + } + s = Math.max(s, D + n); + } + return this.splats.numSplats = s, this.toWorld = C, this.mapping = g, t !== 0; + } + // Check if this accumulator has exactly the same generator mapping as + // the previous one. If so, we can reuse the Gsplat sort order. + hasCorrespondence(A) { + return this.mapping.length !== A.mapping.length ? !1 : this.mapping.every(({ node: I, base: g, count: B }, C) => { + const { + node: E, + base: t, + count: s + } = A.mapping[C]; + return I === E && g === t && B === s; + }); + } +} +var Ze = `const float LN_SCALE_MIN = -9.0; +const float LN_SCALE_MAX = 9.0; +const float LN_RESCALE = (LN_SCALE_MAX - LN_SCALE_MIN) / 254.0; + +const uint SPLAT_TEX_WIDTH_BITS = 11u; +const uint SPLAT_TEX_HEIGHT_BITS = 11u; +const uint SPLAT_TEX_DEPTH_BITS = 11u; +const uint SPLAT_TEX_LAYER_BITS = SPLAT_TEX_WIDTH_BITS + SPLAT_TEX_HEIGHT_BITS; + +const uint SPLAT_TEX_WIDTH = 1u << SPLAT_TEX_WIDTH_BITS; +const uint SPLAT_TEX_HEIGHT = 1u << SPLAT_TEX_HEIGHT_BITS; +const uint SPLAT_TEX_DEPTH = 1u << SPLAT_TEX_DEPTH_BITS; + +const uint SPLAT_TEX_WIDTH_MASK = SPLAT_TEX_WIDTH - 1u; +const uint SPLAT_TEX_HEIGHT_MASK = SPLAT_TEX_HEIGHT - 1u; +const uint SPLAT_TEX_DEPTH_MASK = SPLAT_TEX_DEPTH - 1u; + +const uint F16_INF = 0x7c00u; +const float PI = 3.1415926535897932384626433832795; + +const float INFINITY = 1.0 / 0.0; +const float NEG_INFINITY = -INFINITY; + +const float MAX_PIXEL_RADIUS = 512.0; +const float MIN_ALPHA = 0.01; +const float MAX_STDDEV = sqrt(8.0); + +float sqr(float x) { + return x * x; +} + +float pow4(float x) { + float x2 = x * x; + return x2 * x2; +} + +float pow8(float x) { + float x4 = pow4(x); + return x4 * x4; +} + +vec3 srgbToLinear(vec3 rgb) { + return pow(rgb, vec3(2.2)); +} + +vec3 linearToSrgb(vec3 rgb) { + return pow(rgb, vec3(1.0 / 2.2)); +} + +uint encodeQuatOctXy88R8(vec4 q) { + + if (q.w < 0.0) { + q = -q; + } + + float theta = 2.0 * acos(q.w); + float halfTheta = theta * 0.5; + float s = sin(halfTheta); + + vec3 axis = (abs(s) < 1e-6) ? vec3(1.0, 0.0, 0.0) : q.xyz / s; + + + + float sum = abs(axis.x) + abs(axis.y) + abs(axis.z); + vec2 p = vec2(axis.x, axis.y) / sum; + + if (axis.z < 0.0) { + float oldPx = p.x; + p.x = (1.0 - abs(p.y)) * (p.x >= 0.0 ? 1.0 : -1.0); + p.y = (1.0 - abs(oldPx)) * (p.y >= 0.0 ? 1.0 : -1.0); + } + + float u_f = p.x * 0.5 + 0.5; + float v_f = p.y * 0.5 + 0.5; + + uint quantU = uint(clamp(round(u_f * 255.0), 0.0, 255.0)); + uint quantV = uint(clamp(round(v_f * 255.0), 0.0, 255.0)); + + + + uint angleInt = uint(clamp(round((theta / 3.14159265359) * 255.0), 0.0, 255.0)); + + + return (angleInt << 16u) | (quantV << 8u) | quantU; +} + +vec4 decodeQuatOctXy88R8(uint encoded) { + + uint quantU = encoded & uint(0xFFu); + uint quantV = (encoded >> 8u) & uint(0xFFu); + uint angleInt = encoded >> 16u; + + + float u_f = float(quantU) / 255.0; + float v_f = float(quantV) / 255.0; + vec2 f = vec2(u_f * 2.0 - 1.0, v_f * 2.0 - 1.0); + + vec3 axis = vec3(f.xy, 1.0 - abs(f.x) - abs(f.y)); + float t = max(-axis.z, 0.0); + axis.x += (axis.x >= 0.0) ? -t : t; + axis.y += (axis.y >= 0.0) ? -t : t; + axis = normalize(axis); + + + float theta = (float(angleInt) / 255.0) * 3.14159265359; + float halfTheta = theta * 0.5; + float s = sin(halfTheta); + float w = cos(halfTheta); + + return vec4(axis * s, w); +} + + + + + + + + + + + + + + + + + + + + + +uvec4 packSplat(vec3 center, vec3 scales, vec4 quaternion, vec4 rgba) { + uvec4 uRgba = uvec4(round(clamp(rgba * 255.0, 0.0, 255.0))); + + uint uQuat = encodeQuatOctXy88R8(quaternion); + + + uvec3 uQuat3 = uvec3(uQuat & 0xffu, (uQuat >> 8u) & 0xffu, (uQuat >> 16u) & 0xffu); + + + uvec3 uScales = uvec3( + (scales.x == 0.0) ? 0u : uint(round(clamp((log(scales.x) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u, + (scales.y == 0.0) ? 0u : uint(round(clamp((log(scales.y) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u, + (scales.z == 0.0) ? 0u : uint(round(clamp((log(scales.z) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u + ); + + + uint word0 = uRgba.r | (uRgba.g << 8u) | (uRgba.b << 16u) | (uRgba.a << 24u); + uint word1 = packHalf2x16(center.xy); + uint word2 = packHalf2x16(vec2(center.z, 0.0)) | (uQuat3.x << 16u) | (uQuat3.y << 24u); + uint word3 = uScales.x | (uScales.y << 8u) | (uScales.z << 16u) | (uQuat3.z << 24u); + return uvec4(word0, word1, word2, word3); +} + +void unpackSplat(uvec4 packed, out vec3 center, out vec3 scales, out vec4 quaternion, out vec4 rgba) { + uint word0 = packed.x, word1 = packed.y, word2 = packed.z, word3 = packed.w; + + uvec4 uRgba = uvec4(word0 & 0xffu, (word0 >> 8u) & 0xffu, (word0 >> 16u) & 0xffu, (word0 >> 24u) & 0xffu); + rgba = vec4(uRgba) / 255.0; + + center = vec4( + unpackHalf2x16(word1), + unpackHalf2x16(word2 & 0xffffu) + ).xyz; + + uvec3 uScales = uvec3(word3 & 0xffu, (word3 >> 8u) & 0xffu, (word3 >> 16u) & 0xffu); + scales = vec3( + (uScales.x == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.x - 1u) * LN_RESCALE), + (uScales.y == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.y - 1u) * LN_RESCALE), + (uScales.z == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.z - 1u) * LN_RESCALE) + ); + + uint uQuat = ((word2 >> 16u) & 0xFFFFu) | ((word3 >> 8u) & 0xFF0000u); + quaternion = decodeQuatOctXy88R8(uQuat); + + +} + +vec3 quatVec(vec4 q, vec3 v) { + + vec3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); +} + +vec4 quatQuat(vec4 q1, vec4 q2) { + return vec4( + q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y, + q1.w * q2.y - q1.x * q2.z + q1.y * q2.w + q1.z * q2.x, + q1.w * q2.z + q1.x * q2.y - q1.y * q2.x + q1.z * q2.w, + q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + ); +} + +mat3 scaleQuaternionToMatrix(vec3 s, vec4 q) { + + return mat3( + s.x * (1.0 - 2.0 * (q.y * q.y + q.z * q.z)), + s.x * (2.0 * (q.x * q.y + q.w * q.z)), + s.x * (2.0 * (q.x * q.z - q.w * q.y)), + s.y * (2.0 * (q.x * q.y - q.w * q.z)), + s.y * (1.0 - 2.0 * (q.x * q.x + q.z * q.z)), + s.y * (2.0 * (q.y * q.z + q.w * q.x)), + s.z * (2.0 * (q.x * q.z + q.w * q.y)), + s.z * (2.0 * (q.y * q.z - q.w * q.x)), + s.z * (1.0 - 2.0 * (q.x * q.x + q.y * q.y)) + ); +} + +vec4 slerp(vec4 q1, vec4 q2, float t) { + + float cosHalfTheta = dot(q1, q2); + + + if (abs(cosHalfTheta) >= 0.999) { + return q1; + } + + + + if (cosHalfTheta < 0.0) { + q2 = -q2; + cosHalfTheta = -cosHalfTheta; + } + + + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + + + float ratioA = sin((1.0 - t) * halfTheta) / sinHalfTheta; + float ratioB = sin(t * halfTheta) / sinHalfTheta; + + + return q1 * ratioA + q2 * ratioB; +} + +ivec3 splatTexCoord(int index) { + uint x = uint(index) & SPLAT_TEX_WIDTH_MASK; + uint y = (uint(index) >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK; + uint z = uint(index) >> SPLAT_TEX_LAYER_BITS; + return ivec3(x, y, z); +}`, qe = `precision highp float; +precision highp int; + +#include + +uniform bool encodeLinear; +uniform float maxStdDev; +uniform bool disableFalloff; +uniform float falloff; + +out vec4 fragColor; + +in vec4 vRgba; +in vec2 vSplatUv; +in vec3 vNdc; + +void main() { + float z = dot(vSplatUv, vSplatUv); + if (z > (maxStdDev * maxStdDev)) { + discard; + } + + float alpha = vRgba.a; + alpha *= mix(1.0, exp(-0.5 * z), falloff); + if (alpha < MIN_ALPHA) { + discard; + } + + vec3 rgb = vRgba.rgb; + if (encodeLinear) { + rgb = srgbToLinear(rgb); + } + fragColor = vec4(rgb, alpha); +}`, We = `precision highp float; +precision highp int; +precision highp usampler2DArray; + +#include + +attribute uint splatIndex; + +out vec4 vRgba; +out vec2 vSplatUv; +out vec3 vNdc; + +uniform vec2 renderSize; +uniform uint numSplats; +uniform vec4 renderToViewQuat; +uniform vec3 renderToViewPos; +uniform float maxStdDev; +uniform float time; +uniform float deltaTime; +uniform bool debugFlag; +uniform bool enable2DGS; +uniform float blurAmount; +uniform float preBlurAmount; +uniform float clipXY; + +uniform usampler2DArray packedSplats; + +void main() { + + gl_Position = vec4(0.0, 0.0, 2.0, 1.0); + + if (uint(gl_InstanceID) >= numSplats) { + return; + } + if (splatIndex == 0xffffffffu) { + + return; + } + + ivec3 texCoord = ivec3( + splatIndex & SPLAT_TEX_WIDTH_MASK, + (splatIndex >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK, + splatIndex >> SPLAT_TEX_LAYER_BITS + ); + uvec4 packed = texelFetch(packedSplats, texCoord, 0); + + vec3 center, scales; + vec4 quaternion, rgba; + unpackSplat(packed, center, scales, quaternion, rgba); + + if (rgba.a < MIN_ALPHA) { + return; + } + bvec3 zeroScales = equal(scales, vec3(0.0)); + if (all(zeroScales)) { + return; + } + + + vec3 viewCenter = quatVec(renderToViewQuat, center) + renderToViewPos; + + + if (viewCenter.z >= 0.0) { + return; + } + + + vec4 clipCenter = projectionMatrix * vec4(viewCenter, 1.0); + + + if (abs(clipCenter.z) >= clipCenter.w) { + return; + } + + + float clip = clipXY * clipCenter.w; + if (abs(clipCenter.x) > clip || abs(clipCenter.y) > clip) { + return; + } + + + vec4 viewQuaternion = quatQuat(renderToViewQuat, quaternion); + + if (enable2DGS && any(zeroScales)) { + vRgba = rgba; + vSplatUv = position.xy * maxStdDev; + + vec3 offset; + if (zeroScales.z) { + offset = vec3(vSplatUv.xy * scales.xy, 0.0); + } else if (zeroScales.y) { + offset = vec3(vSplatUv.x * scales.x, 0.0, vSplatUv.y * scales.z); + } else { + offset = vec3(0.0, vSplatUv.xy * scales.yz); + } + + vec3 viewPos = viewCenter + quatVec(viewQuaternion, offset); + gl_Position = projectionMatrix * vec4(viewPos, 1.0); + vNdc = gl_Position.xyz / gl_Position.w; + return; + } + + + vec3 ndcCenter = clipCenter.xyz / clipCenter.w; + + + mat3 RS = scaleQuaternionToMatrix(scales, viewQuaternion); + mat3 cov3D = RS * transpose(RS); + + + vec2 focal = 0.5 * renderSize * vec2(projectionMatrix[0][0], projectionMatrix[1][1]); + float invZ = 1.0 / viewCenter.z; + vec2 J1 = focal * invZ; + vec2 J2 = -(J1 * viewCenter.xy) * invZ; + mat3 J = mat3( + J1.x, 0.0, J2.x, + 0.0, J1.y, J2.y, + 0.0, 0.0, 0.0 + ); + + + + + + + + + mat3 cov2D = transpose(J) * cov3D * J; + float a = cov2D[0][0]; + float d = cov2D[1][1]; + float b = cov2D[0][1]; + + + a += preBlurAmount; + d += preBlurAmount; + + + float detOrig = a * d - b * b; + a += blurAmount; + d += blurAmount; + float det = a * d - b * b; + + + float blurAdjust = sqrt(max(0.0, detOrig / det)); + rgba.a *= blurAdjust; + if (rgba.a < MIN_ALPHA) { + return; + } + + + float eigenAvg = 0.5 * (a + d); + float eigenDelta = sqrt(max(0.0, eigenAvg * eigenAvg - det)); + float eigen1 = eigenAvg + eigenDelta; + float eigen2 = eigenAvg - eigenDelta; + + vec2 eigenVec1 = normalize(vec2((abs(b) < 0.001) ? 1.0 : b, eigen1 - a)); + vec2 eigenVec2 = vec2(eigenVec1.y, -eigenVec1.x); + + float scale1 = position.x * min(MAX_PIXEL_RADIUS, maxStdDev * sqrt(eigen1)); + float scale2 = position.y * min(MAX_PIXEL_RADIUS, maxStdDev * sqrt(eigen2)); + + + vec2 pixelOffset = eigenVec1 * scale1 + eigenVec2 * scale2; + vec2 ndcOffset = (2.0 / renderSize) * pixelOffset; + vec3 ndc = vec3(ndcCenter.xy + ndcOffset, ndcCenter.z); + + vRgba = rgba; + vSplatUv = position.xy * maxStdDev; + vNdc = ndc; + gl_Position = vec4(ndc.xy * clipCenter.w, clipCenter.zw); +}`; +let nI = null; +function Ve() { + return nI || (e.ShaderChunk.splatDefines = Ze, nI = { + splatVertex: We, + splatFragment: qe + }), nI; +} +const zI = 5; +let RI = !1, JI = !1, et; +const Dt = e.Scene.prototype.add; +e.Scene.prototype.add = function(Q) { + return RI = RI || Q instanceof OA, JI = JI || Q instanceof gI, Dt.call(this, Q), this; +}; +const ve = e.Scene.prototype.onBeforeRender; +e.Scene.prototype.onBeforeRender = function(Q) { + if (RI) { + if (!JI) { + const A = et || new gI({ renderer: Q }); + this.add(A); + } + e.Scene.prototype.onBeforeRender = ve, e.Scene.prototype.add = Dt; + } +}; +const sA = class sA extends e.Mesh { + constructor(A) { + const I = sA.makeUniforms(), g = Ve(), B = new e.ShaderMaterial({ + glslVersion: e.GLSL3, + vertexShader: g.splatVertex, + fragmentShader: g.splatFragment, + uniforms: I, + transparent: !0, + blending: e.NormalBlending, + depthTest: !0, + depthWrite: !1, + side: e.DoubleSide + }); + super(OI, B), this.autoViewpoints = [], this.rotateToAccumulator = new fQ({ value: new e.Quaternion() }), this.translateToAccumulator = new hQ({ value: new e.Vector3() }), this.lastFrame = -1, this.lastUpdateTime = null, this.defaultCameras = [], this.pendingUpdate = null, this.envViewpoint = null, this.frustumCulled = !1, this.renderer = A.renderer, this.material = B, this.uniforms = I; + const C = UA( + { gsplat: v }, + { gsplat: v }, + ({ gsplat: E }) => { + if (!E) + throw new Error("gsplat not defined"); + return E = UI(E, { + rotate: this.rotateToAccumulator, + translate: this.translateToAccumulator + }), { gsplat: E }; + } + ); + this.modifier = new le(C), this.autoUpdate = A.autoUpdate ?? !0, this.preUpdate = A.preUpdate ?? !1, this.originDistance = A.originDistance ?? 1, this.maxStdDev = A.maxStdDev ?? Math.sqrt(8), this.enable2DGS = A.enable2DGS ?? !0, this.preBlurAmount = A.preBlurAmount ?? 0, this.blurAmount = A.blurAmount ?? 0.3, this.falloff = A.falloff ?? 1, this.clipXY = A.clipXY ?? 1.4, this.active = new DI(), this.accumulatorCount = 1, this.freeAccumulators = []; + for (let E = 0; E < 1; ++E) + this.freeAccumulators.push(new DI()), this.accumulatorCount += 1; + this.defaultView = new II({ + ...A.view, + autoUpdate: !0, + forge: this + }), this.viewpoint = this.defaultView, this.prepareViewpoint(this.viewpoint), this.clock = A.clock ? aB(A.clock) : new e.Clock(), et = this; + } + static makeUniforms() { + return { + // Size of render viewport in pixels + renderSize: { value: new e.Vector2() }, + // Total number of Gsplats in packedSplats to render + numSplats: { value: 0 }, + // SplatAccumulator to view transformation quaternion + renderToViewQuat: { value: new e.Quaternion() }, + // SplatAccumulator to view transformation translation + renderToViewPos: { value: new e.Vector3() }, + // Maximum distance (in stddevs) from Gsplat center to render + maxStdDev: { value: 1 }, + // Enable interpreting 0-thickness Gsplats as 2DGS + enable2DGS: { value: !1 }, + // Add to projected 2D splat covariance diagonal (thickens and brightens) + preBlurAmount: { value: 0 }, + // Add to 2D splat covariance diagonal and adjust opacity (anti-aliasing) + blurAmount: { value: 0.3 }, + // Modulate Gaussian kernal falloff. 0 means "no falloff, flat shading", + // 1 is normal e^-x^2 falloff. + falloff: { value: 1 }, + // Clip Gsplats that are clipXY times beyond the +-1 frustum bounds + clipXY: { value: 1.4 }, + // Gsplat collection to render + packedSplats: { type: "t", value: fA.getEmpty() }, + // Time in seconds for time-based effects + time: { value: 0 }, + // Delta time in seconds since last frame + deltaTime: { value: 0 }, + // Whether to encode Gsplat with linear RGB (for environment mapping) + encodeLinear: { value: !1 }, + // Debug flag that alternates each frame + debugFlag: { value: !1 } + }; + } + canAllocAccumulator() { + return this.freeAccumulators.length > 0 || this.accumulatorCount < zI; + } + maybeAllocAccumulator() { + let A = this.freeAccumulators.pop(); + if (A === void 0) { + if (this.accumulatorCount >= zI) + return null; + A = new DI(), this.accumulatorCount += 1; + } + return A.refCount = 1, A; + } + releaseAccumulator(A) { + A.refCount -= 1, A.refCount === 0 && this.freeAccumulators.push(A); + } + newViewpoint(A) { + return new II({ ...A, forge: this }); + } + onBeforeRender(A, I, g) { + var D, n; + const B = this.time ?? this.clock.getElapsedTime(), C = B - (this.viewpoint.lastTime ?? B); + this.viewpoint.lastTime = B; + const E = A.info.render.frame, t = E !== this.lastFrame; + this.lastFrame = E; + const s = this.viewpoint; + if (s === this.defaultView) { + if (t) + if (!A.xr.isPresenting) + this.defaultView.viewToWorld = g.matrixWorld.clone(), this.defaultCameras = [this.defaultView.viewToWorld]; + else { + const w = A.xr.getCamera().cameras; + this.defaultCameras = [ + w[0].matrixWorld, + w[1].matrixWorld + ], this.defaultView.viewToWorld = Te(this.defaultCameras) ?? new e.Matrix4(); + } + this.autoUpdate && this.update({ scene: I, viewToWorld: this.defaultView.viewToWorld }); + } + if (t && (this.uniforms.time.value = B, this.uniforms.deltaTime.value = C, this.uniforms.debugFlag.value = performance.now() / 1e3 % 2 < 1), s.target) + this.uniforms.renderSize.value.set( + s.target.width, + s.target.height + ); + else { + const w = A.getSize(this.uniforms.renderSize.value); + if (w.x === 1 && w.y === 1) { + const c = (D = A.xr.getSession()) == null ? void 0 : D.renderState.baseLayer; + c && (w.x = c.framebufferWidth, w.y = c.framebufferHeight); + } + } + this.uniforms.encodeLinear.value = s.encodeLinear, this.uniforms.maxStdDev.value = this.maxStdDev, this.uniforms.enable2DGS.value = this.enable2DGS, this.uniforms.preBlurAmount.value = this.preBlurAmount, this.uniforms.blurAmount.value = this.blurAmount, this.uniforms.falloff.value = this.falloff, this.uniforms.clipXY.value = this.clipXY; + const o = ((n = s.display) == null ? void 0 : n.accumulator.toWorld) ?? new e.Matrix4(), a = g.matrixWorld.clone().invert(); + o.clone().premultiply(a).decompose( + this.uniforms.renderToViewPos.value, + this.uniforms.renderToViewQuat.value, + new e.Vector3() + ); + } + // Update the uniforms for the given viewpoint. + // Note that the client expects to be able to call render() at any point + // to update the canvas, so we must switch the viewpoint back to + // defaultView when we're finished. + prepareViewpoint(A) { + if (this.viewpoint = A ?? this.viewpoint, this.viewpoint.display) { + const { accumulator: I, geometry: g } = this.viewpoint.display; + this.uniforms.numSplats.value = I.splats.numSplats, this.uniforms.packedSplats.value = I.splats.getTexture(), this.geometry = g; + } else + this.uniforms.numSplats.value = 0, this.uniforms.packedSplats.value = fA.getEmpty(), this.geometry = OI; + } + // If forge.autoUpdate is false then you must manually call + // forge.update({ scene }) to have the scene Gsplats be re-generated. + update({ + scene: A, + viewToWorld: I + }) { + const g = this.matrixWorld.clone(); + this.preUpdate ? this.updateInternal({ scene: A, originToWorld: g, viewToWorld: I }) : (this.pendingUpdate = { + scene: A, + originToWorld: g + }, setTimeout(() => { + if (this.pendingUpdate) { + const { scene: B, originToWorld: C } = this.pendingUpdate; + this.pendingUpdate = null, this.updateInternal({ scene: B, originToWorld: C, viewToWorld: I }); + } + }, 1)); + } + updateInternal({ + scene: A, + originToWorld: I, + viewToWorld: g + }) { + var D; + if (!this.canAllocAccumulator()) + return !1; + I || (I = this.active.toWorld), g = g ?? I.clone(); + const B = this.time ?? this.clock.getElapsedTime(), C = B - (this.lastUpdateTime ?? B); + this.lastUpdateTime = B; + const E = this.active.mapping.reduce((n, w) => (n.set(w.node, w), n), /* @__PURE__ */ new Map()), { generators: t, globalEdits: s } = this.compileScene(A); + for (const n of t) + (D = n.frameUpdate) == null || D.call(n, { + object: n, + time: B, + deltaTime: C, + viewToWorld: g, + globalEdits: s + }); + for (const n of t) { + const w = E.get(n), c = n.generator ? n.numSplats : 0; + (n.generator !== (w == null ? void 0 : w.generator) || c !== (w == null ? void 0 : w.count)) && n.updateVersion(); + } + const a = !_Q({ + matrix1: I, + matrix2: this.active.toWorld, + maxDistance: this.originDistance + }) || t.length !== E.size || t.some((n) => { + var w; + return n.version !== ((w = E.get(n)) == null ? void 0 : w.version); + }); + let i = null; + if (a) { + if (i = this.maybeAllocAccumulator(), !i) + throw new Error("Unreachable"); + const n = !_Q({ + matrix1: I, + matrix2: this.active.toWorld, + maxDistance: 1e-5, + minCoorient: 0.99999 + }), c = t.map((l, k) => { + const R = E.get(l); + return R ? ( + // Sort by version deltas then by previous ordering in the mapping, + // attempting to keep unchanging generators near the front + // to improve our chances of avoiding a re-generation. + [l.version - R.version, R.base, l] + ) : [Number.POSITIVE_INFINITY, l.version, l]; + }).sort((l, k) => l[0] !== k[0] ? l[0] - k[0] : l[1] - k[1]).map(([l, k, R]) => R), r = c.map((l) => l.numSplats), { maxSplats: y, mapping: G } = i.splats.generateMapping(r), h = c.map((l, k) => { + const { base: R, count: Y } = G[k]; + return { + node: l, + generator: l.generator, + version: l.version, + base: R, + count: Y + }; + }); + I.clone().invert().decompose( + this.translateToAccumulator.value, + this.rotateToAccumulator.value, + new e.Vector3() + ), i.ensureGenerate(y), i.generateSplats({ + renderer: this.renderer, + modifier: this.modifier, + generators: h, + forceUpdate: n, + originToWorld: I + }), i.splatsVersion = this.active.splatsVersion + 1; + const M = i.hasCorrespondence(this.active); + i.mappingVersion = this.active.mappingVersion + (M ? 0 : 1), this.releaseAccumulator(this.active), this.active = i, this.prepareViewpoint(); + } + return setTimeout(() => { + for (const n of this.autoViewpoints) + n.autoPoll({ accumulator: i ?? void 0 }); + }, 1), !0; + } + compileScene(A) { + const I = []; + A.traverse((B) => { + B instanceof iI && I.push(B); + }); + const g = /* @__PURE__ */ new Set(); + return A.traverseVisible((B) => { + if (B instanceof AI) { + let C = B.parent; + for (; C != null && !(C instanceof OA); ) + C = C.parent; + C == null && g.add(B); + } + }), { generators: I, globalEdits: Array.from(g) }; + } + // Renders out the scene to an environment map that can be used for + // Image-based lighting or similar applications. First optionally updates Gsplats, + // sorts them with respect to the provided worldCenter, renders 6 cube faces, + // then pre-filters them using THREE.PMREMGenerator and returns a THREE.Texture + // that can assigned directly to a THREE.MeshStandardMaterial.envMap property. + async renderEnvMap({ + renderer: A, + scene: I, + worldCenter: g, + size: B = 256, + near: C = 0.1, + far: E = 1e3, + hideObjects: t = [], + update: s = !1 + }) { + var n, w; + if (this.envViewpoint || (this.envViewpoint = this.newViewpoint({ sort360: !0 })), !sA.cubeRender || sA.cubeRender.target.width !== B || sA.cubeRender.near !== C || sA.cubeRender.far !== E) { + sA.cubeRender && sA.cubeRender.target.dispose(); + const c = new e.WebGLCubeRenderTarget(B, { + format: e.RGBAFormat, + generateMipmaps: !0, + minFilter: e.LinearMipMapLinearFilter + }), r = new e.CubeCamera(C, E, c); + sA.cubeRender = { target: c, camera: r, near: C, far: E }; + } + sA.pmrem || (sA.pmrem = new e.PMREMGenerator(A ?? this.renderer)); + const o = new e.Matrix4().setPosition(g); + await ((n = this.envViewpoint) == null ? void 0 : n.prepare({ scene: I, viewToWorld: o, update: s })); + const { target: a, camera: i } = sA.cubeRender; + i.position.copy(g); + const D = /* @__PURE__ */ new Map(); + for (const c of t) + D.set(c, c.visible), c.visible = !1; + this.prepareViewpoint(this.envViewpoint), i.update(A ?? this.renderer, I), this.prepareViewpoint(this.defaultView); + for (const [c, r] of D.entries()) + c.visible = r; + return (w = sA.pmrem) == null ? void 0 : w.fromCubemap(a.texture).texture; + } + // Utility function to recursively set the envMap property for any + // THREE.MeshStandardMaterial within the subtree of root. + recurseSetEnvMap(A, I) { + A.traverse((g) => { + if (g instanceof e.Mesh) + if (Array.isArray(g.material)) + for (const B of g.material) + B instanceof e.MeshStandardMaterial && (B.envMap = I); + else + g.material instanceof e.MeshStandardMaterial && (g.material.envMap = I); + }); + } + // Utility function that helps extract the Gsplat RGBA values from a + // SplatGenerator, including the result of any real-time RGBA SDF edits applied + // to a SplatMesh. This effectively "bakes" any computed RGBA values, which can + // now be used as a pipeline input via SplatMesh.splatRgba to inject these + // baked values into the Gsplat data. + getRgba({ + generator: A, + rgba: I + }) { + const g = this.active.mapping.find(({ node: B }) => B === A); + if (!g) + throw new Error("Generator not found"); + return I = I ?? new NI(), I.fromPackedSplats({ + packedSplats: this.active.splats, + base: g.base, + count: g.count, + renderer: this.renderer + }), I; + } + // Utility function that builds on getRgba({ generator }) and additionally + // reads back the RGBA values to the CPU in a Uint8Array with packed RGBA + // in that byte order. + async readRgba({ + generator: A, + rgba: I + }) { + return I = this.getRgba({ generator: A, rgba: I }), I.read(); + } +}; +sA.cubeRender = null, sA.pmrem = null; +let gI = sA; +const OI = new FI(new Uint32Array(1), 0); +UA( + { packedSplats: HQ, index: "int" }, + { gsplat: v }, + ({ packedSplats: Q, index: A }) => { + if (!Q || !A) + throw new Error("Invalid input"); + return { gsplat: dQ(Q, A) }; + } +); +function Te(Q) { + if (Q.length === 0) + return null; + const A = new e.Vector3(), I = new e.Quaternion(), g = new e.Vector3(), B = [], C = []; + for (const E of Q) + E.decompose(A, I, g), B.push(A), C.push(I); + return new e.Matrix4().compose( + DB(B), + nB(C), + new e.Vector3(1, 1, 1) + ); +} +class YD { + constructor({ fileBytes: A }) { + this.fileBytes = A instanceof ArrayBuffer ? new Uint8Array(A) : A, this.reader = new yB({ fileBytes: this.fileBytes }); + const I = new DataView(this.reader.read(16).buffer); + if (I.getUint32(0, !0) !== 1347635022) + throw new Error("Invalid SPZ file"); + if (this.version = I.getUint32(4, !0), this.version < 1 || this.version > 2) + throw new Error(`Unsupported SPZ version: ${this.version}`); + this.numSplats = I.getUint32(8, !0), this.shDegree = I.getUint8(12), this.fractionalBits = I.getUint8(13), this.flags = I.getUint8(14), this.flagAntiAlias = (this.flags & 1) !== 0, this.reserved = I.getUint8(15), this.parsed = !1; + } + parseSplats(A, I, g, B, C, E) { + if (this.parsed) + throw new Error("SPZ file already parsed"); + if (this.parsed = !0, this.version === 1) { + const t = this.reader.read(this.numSplats * 3 * 2), s = new Uint16Array(t.buffer); + for (let o = 0; o < this.numSplats; o++) { + const a = o * 3, i = CQ(s[a]), D = CQ(s[a + 1]), n = CQ(s[a + 2]); + A(o, i, D, n); + } + } else if (this.version === 2) { + const t = 1 << this.fractionalBits, s = this.reader.read(this.numSplats * 3 * 3); + for (let o = 0; o < this.numSplats; o++) { + const a = o * 9, i = ((s[a + 2] << 24 | s[a + 1] << 16 | s[a] << 8) >> 8) / t, D = ((s[a + 5] << 24 | s[a + 4] << 16 | s[a + 3] << 8) >> 8) / t, n = ((s[a + 8] << 24 | s[a + 7] << 16 | s[a + 6] << 8) >> 8) / t; + A(o, i, D, n); + } + } else + throw new Error("Unreachable"); + { + const t = this.reader.read(this.numSplats); + for (let s = 0; s < this.numSplats; s++) + I(s, t[s] / 255); + } + { + const t = this.reader.read(this.numSplats * 3), s = je / 0.15; + for (let o = 0; o < this.numSplats; o++) { + const a = o * 3, i = (t[a] / 255 - 0.5) * s + 0.5, D = (t[a + 1] / 255 - 0.5) * s + 0.5, n = (t[a + 2] / 255 - 0.5) * s + 0.5; + g(o, i, D, n); + } + } + { + const t = this.reader.read(this.numSplats * 3); + for (let s = 0; s < this.numSplats; s++) { + const o = s * 3, a = Math.exp(t[o] / 16 - 10), i = Math.exp(t[o + 1] / 16 - 10), D = Math.exp(t[o + 2] / 16 - 10); + B(s, a, i, D); + } + } + { + const t = this.reader.read(this.numSplats * 3); + for (let s = 0; s < this.numSplats; s++) { + const o = s * 3, a = t[o] / 127.5 - 1, i = t[o + 1] / 127.5 - 1, D = t[o + 2] / 127.5 - 1, n = Math.sqrt( + Math.max(0, 1 - a * a - i * i - D * D) + ); + C(s, a, i, D, n); + } + } + if (E && this.shDegree >= 1) { + const t = new Float32Array(9), s = this.shDegree >= 2 ? new Float32Array(5 * 3) : void 0, o = this.shDegree >= 3 ? new Float32Array(7 * 3) : void 0, a = this.reader.read( + this.numSplats * Xe[this.shDegree] * 3 + ); + let i = 0; + for (let D = 0; D < this.numSplats; D++) { + for (let n = 0; n < 9; ++n) + t[n] = (a[i + n] - 128) / 128; + if (i += 9, s) { + for (let n = 0; n < 15; ++n) + s[n] = (a[i + n] - 128) / 128; + i += 15; + } + if (o) { + for (let n = 0; n < 21; ++n) + o[n] = (a[i + n] - 128) / 128; + i += 21; + } + E(D, t, s, o); + } + } + } +} +const Xe = { 1: 3, 2: 8, 3: 15 }, je = 0.28209479177387814; +class dD { + constructor(A) { + this.mesh = A.mesh, this.numSplats = A.numSplats ?? this.mesh.numSplats; + const { width: I, height: g, depth: B, maxSplats: C } = wA(this.numSplats); + this.skinData = new Uint16Array(C * 4), this.skinTexture = new e.DataArrayTexture( + this.skinData, + I, + g, + B + ), this.skinTexture.format = e.RGBAIntegerFormat, this.skinTexture.type = e.UnsignedShortType, this.skinTexture.internalFormat = "RGBA16UI", this.skinTexture.needsUpdate = !0, this.numBones = A.numBones ?? 256, this.boneData = new Float32Array(this.numBones * 16), this.boneTexture = new e.DataTexture( + this.boneData, + 4, + this.numBones, + e.RGBAFormat, + e.FloatType + ), this.boneTexture.internalFormat = "RGBA32F", this.boneTexture.needsUpdate = !0, this.uniform = new F({ + key: "skinning", + type: nt, + globals: () => [ct], + value: { + numSplats: this.numSplats, + numBones: this.numBones, + skinTexture: this.skinTexture, + boneTexture: this.boneTexture + } + }); + } + // Apply the skeletal animation to a Gsplat in a dyno program. + modify(A) { + return Oe(A, this.uniform); + } + // Set the "rest" pose for a bone with position and quaternion orientation. + setRestQuatPos(A, I, g) { + const B = A * 16; + this.boneData[B + 0] = I.x, this.boneData[B + 1] = I.y, this.boneData[B + 2] = I.z, this.boneData[B + 3] = I.w, this.boneData[B + 4] = g.x, this.boneData[B + 5] = g.y, this.boneData[B + 6] = g.z, this.boneData[B + 7] = 0, this.boneData[B + 8] = 0, this.boneData[B + 9] = 0, this.boneData[B + 10] = 0, this.boneData[B + 11] = 1, this.boneData[B + 12] = 0, this.boneData[B + 13] = 0, this.boneData[B + 14] = 0, this.boneData[B + 15] = 0; + } + // Set the "current" position and orientation of a bone. + setBoneQuatPos(A, I, g) { + const B = A * 16, C = new e.Quaternion( + this.boneData[B + 0], + this.boneData[B + 1], + this.boneData[B + 2], + this.boneData[B + 3] + ), E = new e.Vector3( + this.boneData[B + 4], + this.boneData[B + 5], + this.boneData[B + 6] + ), t = C.clone().invert(), s = g.clone().sub(E); + s.applyQuaternion(t), t.multiply(I); + const o = new e.Quaternion( + s.x, + s.y, + s.z, + 0 + ).multiply(C); + this.boneData[B + 8] = t.x, this.boneData[B + 9] = t.y, this.boneData[B + 10] = t.z, this.boneData[B + 11] = t.w, this.boneData[B + 12] = 0.5 * o.x, this.boneData[B + 13] = 0.5 * o.y, this.boneData[B + 14] = 0.5 * o.z, this.boneData[B + 15] = 0.5 * o.w; + } + // Set up to 4 bone indices and weights for a Gsplat. For fewer than 4 bones, + // you can set the remaining weights to 0 (and index=0). + setSplatBones(A, I, g) { + const B = A * 4; + this.skinData[B + 0] = Math.min(255, Math.max(0, Math.round(g.x * 255))) + (I.x << 8), this.skinData[B + 1] = Math.min(255, Math.max(0, Math.round(g.y * 255))) + (I.y << 8), this.skinData[B + 2] = Math.min(255, Math.max(0, Math.round(g.z * 255))) + (I.z << 8), this.skinData[B + 3] = Math.min(255, Math.max(0, Math.round(g.w * 255))) + (I.w << 8); + } + // Call this to indicate that the bones have changed and the Gsplats need to be + // re-generated with updated skinning. + updateBones() { + this.boneTexture.needsUpdate = !0, this.mesh.needsUpdate = !0; + } +} +const nt = { type: "GsplatSkinning" }, ct = IA(` + struct GsplatSkinning { + int numSplats; + int numBones; + usampler2DArray skinTexture; + sampler2D boneTexture; + }; +`), ze = IA(` + void applyGsplatSkinning( + int numSplats, int numBones, + usampler2DArray skinTexture, sampler2D boneTexture, + int splatIndex, inout vec3 center, inout vec4 quaternion + ) { + if ((splatIndex < 0) || (splatIndex >= numSplats)) { + return; + } + + uvec4 skinData = texelFetch(skinTexture, splatTexCoord(splatIndex), 0); + + float weights[4]; + weights[0] = float(skinData.x & 0xffu) / 255.0; + weights[1] = float(skinData.y & 0xffu) / 255.0; + weights[2] = float(skinData.z & 0xffu) / 255.0; + weights[3] = float(skinData.w & 0xffu) / 255.0; + + uint boneIndices[4]; + boneIndices[0] = (skinData.x >> 8u) & 0xffu; + boneIndices[1] = (skinData.y >> 8u) & 0xffu; + boneIndices[2] = (skinData.z >> 8u) & 0xffu; + boneIndices[3] = (skinData.w >> 8u) & 0xffu; + + vec4 quat = vec4(0.0); + vec4 dual = vec4(0.0); + for (int i = 0; i < 4; i++) { + if (weights[i] > 0.0) { + int boneIndex = int(boneIndices[i]); + vec4 boneQuat = vec4(0.0, 0.0, 0.0, 1.0); + vec4 boneDual = vec4(0.0); + if (boneIndex < numBones) { + boneQuat = texelFetch(boneTexture, ivec2(2, boneIndex), 0); + boneDual = texelFetch(boneTexture, ivec2(3, boneIndex), 0); + } + + if ((i > 0) && (dot(quat, boneQuat) < 0.0)) { + // Flip sign if next blend is pointing in the opposite direction + boneQuat = -boneQuat; + boneDual = -boneDual; + } + quat += weights[i] * boneQuat; + dual += weights[i] * boneDual; + } + } + + // Normalize dual quaternion + float norm = length(quat); + quat /= norm; + dual /= norm; + vec3 translate = vec3( + 2.0 * (-dual.w * quat.x + dual.x * quat.w - dual.y * quat.z + dual.z * quat.y), + 2.0 * (-dual.w * quat.y + dual.x * quat.z + dual.y * quat.w - dual.z * quat.x), + 2.0 * (-dual.w * quat.z - dual.x * quat.y + dual.y * quat.x + dual.z * quat.w) + ); + + center = quatVec(quat, center) + translate; + quaternion = quatQuat(quat, quaternion); + } +`); +function Oe(Q, A) { + return new f({ + inTypes: { gsplat: v, skinning: nt }, + outTypes: { gsplat: v }, + globals: () => [ct, ze], + inputs: { gsplat: Q, skinning: A }, + statements: ({ inputs: g, outputs: B }) => { + const { skinning: C } = g, { gsplat: E } = B; + return JA(` + ${E} = ${g.gsplat}; + if (isGsplatActive(${E}.flags)) { + applyGsplatSkinning( + ${C}.numSplats, ${C}.numBones, + ${C}.skinTexture, ${C}.boneTexture, + ${E}.index, ${E}.center, ${E}.quaternion + ); + } + `); + } + }).outputs.gsplat; +} +function uD({ + // PackedSplats object to add splats to + splats: Q, + // min and max box extents of the grid + extents: A, + // step size along each grid axis + stepSize: I = 1, + // spherical radius of each Gsplat + pointRadius: g = 0.01, + // relative size of the "shadow copy" of each Gsplat placed behind it + pointShadowScale: B = 2, + // Gsplat opacity + opacity: C = 1, + // Gsplat color (THREE.Color) or function to set color for position: + // ((THREE.Color, THREE.Vector3) => void) (default: RGB-modulated grid) + color: E +}) { + const s = new e.Vector3(), o = new e.Vector3(), a = new e.Quaternion(0, 0, 0, 1); + E == null && (E = (D, n) => D.set( + 0.55 + 0.45 * Math.cos(n.x * 1), + 0.55 + 0.45 * Math.cos(n.y * 1), + 0.55 + 0.45 * Math.cos(n.z * 1) + )); + const i = new e.Color(); + for (let D = A.min.z; D < A.max.z + 1e-6; D += I) + for (let n = A.min.y; n < A.max.y + 1e-6; n += I) + for (let w = A.min.x; w < A.max.x + 1e-6; w += I) { + s.set(w, n, D); + for (let c = 0; c < 2; ++c) + o.setScalar(g * (c ? 1 : B)), c ? typeof E == "function" ? E(i, s) : i.copy(E) : i.setScalar(0), Q.pushSplat(s, o, a, C, i); + } +} +function UD({ + // PackedSplats object to add splats to + splats: Q, + // scale (Gsplat scale along axis) + scale: A = 0.25, + // radius of the axes (Gsplat scale orthogonal to axis) + axisRadius: I = 75e-4, + // relative size of the "shadow copy" of each Gsplat placed behind it + axisShadowScale: g = 2, + // origins of the axes (default single axis at origin) + origins: B = [new e.Vector3()] +}) { + const C = new e.Vector3(), E = new e.Vector3(), t = new e.Quaternion(0, 0, 0, 1), s = new e.Color(), o = 1; + for (const a of B) + for (let i = 0; i < 3; ++i) { + C.set( + a.x + (i === 0 ? A : 0), + a.y + (i === 1 ? A : 0), + a.z + (i === 2 ? A : 0) + ); + for (let D = 0; D < 2; ++D) + E.set( + (i === 0 ? A : I) * (D ? 1 : g), + (i === 1 ? A : I) * (D ? 1 : g), + (i === 2 ? A : I) * (D ? 1 : g) + ), s.setRGB( + D === 0 ? 0 : i === 0 ? 1 : 0, + D === 0 ? 0 : i === 1 ? 1 : 0, + D === 0 ? 0 : i === 2 ? 1 : 0 + ), Q.pushSplat(C, E, t, o, s); + } +} +function SD({ + // PackedSplats object to add splats to + splats: Q, + // center of the sphere (default: origin) + origin: A = new e.Vector3(), + // radius of the sphere + radius: I = 1, + // maximum depth of recursion for subdividing the sphere + // Warning: Gsplat count grows exponentially with depth + maxDepth: g = 3, + // filter function to apply to each point, for example to select + // points in a certain direction or other function ((THREE.Vector3) => boolean) + // (default: null) + filter: B = null, + // radius of each oriented Gsplat + pointRadius: C = 0.02, + // flatness of each oriented Gsplat + pointThickness: E = 1e-3, + // color of each Gsplat (THREE.Color) or function to set color for point: + // ((THREE.Color, THREE.Vector3) => void) (default: white) + color: t = new e.Color(1, 1, 1) +}) { + const s = {}; + function o(c) { + if (B && !B(c)) + return; + const r = `${c.x},${c.y},${c.z}`; + s[r] || (s[r] = c); + } + function a(c, r, y, G) { + if (o(r), o(y), o(G), c >= g) + return; + const h = new e.Vector3().addVectors(r, y).normalize(), M = new e.Vector3().addVectors(y, G).normalize(), l = new e.Vector3().addVectors(G, r).normalize(); + a(c + 1, r, h, l), a(c + 1, h, y, M), a(c + 1, l, M, G), a(c + 1, h, M, l); + } + for (const c of [-1, 1]) + for (const r of [-1, 1]) + for (const y of [-1, 1]) { + const G = new e.Vector3(c, 0, 0), h = new e.Vector3(0, r, 0), M = new e.Vector3(0, 0, y); + a(0, G, h, M); + } + const i = Object.values(s), D = new e.Vector3(C, C, E), n = new e.Quaternion(), w = typeof t == "function" ? new e.Color() : t; + for (const c of i) + n.setFromUnitVectors(new e.Vector3(0, 0, -1), c), typeof t == "function" && t(w, c), c.multiplyScalar(I), c.add(A), Q.pushSplat(c, D, n, 1, w); +} +function LD({ + // text string to display + text: Q, + // browser font to render text with (default: "Arial") + font: A, + // font size in pixels/Gsplats (default: 32) + fontSize: I, + // SplatMesh.recolor tint assuming white Gsplats (default: white) + color: g, + // Individual Gsplat color (default: white) + rgb: B, + // Gsplat radius (default: 0.8 covers 1-unit spacing well) + dotRadius: C, + // text alignment: "left", "center", "right", "start", "end" (default: "start") + textAlign: E, + // line spacing multiplier, lines delimited by "\n" (default: 1.0) + lineHeight: t +}) { + A = A ?? "Arial", I = I ?? 32, g = g ?? new e.Color(1, 1, 1), C = C ?? 0.8, E = E ?? "start", t = t ?? 1; + const s = Q.split(` +`), o = document.createElement("canvas"), a = o.getContext("2d"); + if (!a) + throw new Error("Failed to create canvas context"); + a.font = `${I}px ${A}`, a.textAlign = E; + const i = a.measureText(""), D = i.fontBoundingBoxAscent + i.fontBoundingBoxDescent; + let n = Number.POSITIVE_INFINITY, w = Number.NEGATIVE_INFINITY, c = Number.POSITIVE_INFINITY, r = Number.NEGATIVE_INFINITY; + for (let U = 0; U < s.length; ++U) { + const S = a.measureText(s[U]), T = D * t * U; + n = Math.min(n, -S.actualBoundingBoxLeft), w = Math.max(w, S.actualBoundingBoxRight), c = Math.min(c, T - S.actualBoundingBoxAscent), r = Math.max(r, T + S.actualBoundingBoxDescent); + } + const y = Math.floor(n), G = Math.floor(c), h = Math.ceil(w) - y, M = Math.ceil(r) - G; + o.width = h, o.height = M, a.font = `${I}px ${A}`, a.textAlign = E, a.textBaseline = "alphabetic", a.fillStyle = "#FFFFFF"; + for (let U = 0; U < s.length; ++U) { + const S = D * t * U - G; + a.fillText(s[U], -y, S); + } + const l = a.getImageData(0, 0, h, M), k = new Uint8Array(l.data.buffer), R = new fA(), Y = new e.Vector3(), d = new e.Vector3().setScalar(C), m = new e.Quaternion(0, 0, 0, 1); + B = B ?? new e.Color(1, 1, 1); + let J = 0; + for (let U = 0; U < M; ++U) + for (let S = 0; S < h; ++S) { + const T = k[J + 3]; + if (T > 0) { + const V = T / 255; + Y.set(S - 0.5 * (h - 1), 0.5 * (M - 1) - U, 0), R.pushSplat(Y, d, m, V, B); + } + J += 4; + } + const x = new OA({ packedSplats: R }); + return x.recolor = g, x; +} +function pD({ + // URL of the image to convert to splats (example: `url: "./image.png"`) + url: Q, + // Radius of each Gsplat, default covers 1-unit spacing well (default: 0.8) + dotRadius: A, + // Subsampling factor for the image. Higher values reduce resolution, + // for example 2 will halve the width and height by averaging (default: 1) + subXY: I, + // Optional callback function to modify each Gsplat before it's added. + // Return null to skip adding the Gsplat, or a number to set the opacity + // and add the Gsplat with parameter values in the objects center, rgba etc. were + // passed into the forEachSplat callback. Ending the callback in `return opacity;` + // will retain the original opacity. + // ((width: number, height: number, index: number, center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color) => number | null) + forEachSplat: g +}) { + return A = A ?? 0.8, I = Math.max(1, Math.floor(I ?? 1)), new OA({ + constructSplats: async (B) => new Promise((C, E) => { + const t = new Image(); + t.onerror = E, t.onload = () => { + const { width: s, height: o } = t, a = document.createElement("canvas"); + a.width = s, a.height = o; + const i = a.getContext("2d"); + if (!i) { + E(new Error("Failed to create canvas context")); + return; + } + i.imageSmoothingEnabled = !0, i.imageSmoothingQuality = "high"; + const D = Math.round(s / I), n = Math.round(o / I); + i.drawImage(t, 0, 0, D, n); + try { + const w = i.getImageData(0, 0, D, n), c = new Uint8Array(w.data.buffer), r = new e.Vector3(), y = new e.Vector3().setScalar(A), G = new e.Quaternion(0, 0, 0, 1), h = new e.Color(); + let M = 0; + for (let l = 0; l < n; ++l) + for (let k = 0; k < D; ++k) { + const R = M * 4, Y = c[R + 3]; + if (Y > 0) { + let d = Y / 255; + h.set( + c[R + 0] / 255, + c[R + 1] / 255, + c[R + 2] / 255 + ), r.set( + k - 0.5 * (D - 1), + 0.5 * (n - 1) - l, + 0 + ), y.setScalar(A), G.set(0, 0, 0, 1); + let m = !0; + if (g) { + const J = g( + D, + n, + M, + r, + y, + G, + d, + h + ); + d = J ?? d, m = J !== null; + } + m && B.pushSplat(r, y, G, d, h); + } + M += 1; + } + C(); + } catch (w) { + E(w); + } + }, t.src = Q; + }) + }); +} +function Pe({ + box: Q, + cells: A, + dotScale: I, + color: g, + opacity: B +}) { + A.x = Math.max(1, Math.round(A.x)), A.y = Math.max(1, Math.round(A.y)), A.z = Math.max(1, Math.round(A.z)), B = B ?? 1; + const C = A.x * A.y * A.z, E = q("int", A.x), t = q("int", A.y); + q("int", A.z); + const s = LA(0), o = new iI({ + numSplats: C, + generator: UA( + { index: "int" }, + { gsplat: v }, + ({ index: i }) => { + if (!i) + throw new Error("index is undefined"); + const D = GI(i, E), n = jQ(i, E), w = GI(n, t), c = jQ(n, t), r = HA({ + vectorType: "ivec3", + x: D, + y: w, + z: c + }), y = GC(s), G = HA({ vectorType: "ivec2", x: i, y }), h = NE(G), M = q("vec3", Q.min), l = q("vec3", Q.max), k = UQ(l, M), R = jQ(cA(EQ(r), h), q("vec3", A)); + let Y, d, m; + g ? (Y = q("float", g.r), d = q("float", g.g), m = q("float", g.b)) : { r: Y, g: d, b: m } = JQ(R).outputs; + const J = HA({ + vectorType: "vec4", + r: Y, + g: d, + b: m, + a: q("float", B) + }), x = cA(M, BA(k, R)), U = EQ(q("float", I)), S = q("vec4", new e.Quaternion(0, 0, 0, 1)); + let T = rQ({ + flags: OQ("uint", "GSPLAT_FLAG_ACTIVE"), + index: i, + center: x, + scales: U, + quaternion: S, + rgba: J + }); + return T = a.modify(T), { gsplat: T }; + }, + { + globals: () => [rA] + } + ), + update: ({ time: i }) => { + s.value = i, a.update(o), o.updateVersion(); + } + }), a = new nQ(); + return o; +} +const _e = { + box: new e.Box3( + new e.Vector3(-1, -1, -1), + new e.Vector3(1, 1, 1) + ), + density: 100, + fallDirection: new e.Vector3(-1, -3, 1).normalize(), + fallVelocity: 0.02, + wanderScale: 0.04, + wanderVariance: 2, + color1: new e.Color(1, 1, 1), + color2: new e.Color(0.5, 0.5, 1), + minScale: 1e-3, + maxScale: 5e-3, + anisoScale: new e.Vector3(1, 1, 1) +}, $e = { + box: new e.Box3( + new e.Vector3(-2, -1, -2), + new e.Vector3(2, 5, 2) + ), + density: 10, + fallDirection: new e.Vector3(0, -1, 0), + fallVelocity: 2, + wanderScale: 0.1, + wanderVariance: 1, + color1: new e.Color(1, 1, 1), + color2: new e.Color(0.25, 0.25, 0.5), + minScale: 5e-3, + maxScale: 0.01, + anisoScale: new e.Vector3(0.1, 1, 0.1) +}; +function AD({ + // min and max box extents of the snowBox + box: Q, + // minimum y-coordinate to clamp particle position, which can be used to + // fake hitting a ground plane and lingering there for a bit + minY: A, + // number of Gsplats to generate (default: calculated from box and density) + numSplats: I, + // density of Gsplats per unit volume (default: 100) + density: g, + // The xyz anisotropic scale of the Gsplat, which can be used for example + // to elongate rain particles (default: (1, 1, 1)) + anisoScale: B, + // Minimum Gsplat particle scale (default: 0.001) + minScale: C, + // Maximum Gsplat particle scale (default: 0.005) + maxScale: E, + // The average direction of fall (default: (0, -1, 0)) + fallDirection: t, + // The average speed of the fall (multiplied with fallDirection) (default: 0.02) + fallVelocity: s, + // The world scale of wandering overlay motion (default: 0.01) + wanderScale: o, + // Controls how uniformly the particles wander in sync, more variance mean + // more randomness in the motion (default: 2) + wanderVariance: a, + // Color 1 of the two colors interpolated between (default: (1, 1, 1)) + color1: i, + // Color 2 of the two colors interpolated between (default: (0.5, 0.5, 1)) + color2: D, + // The base opacity of the Gsplats (default: 1) + opacity: n, + // Optional callback function to call each frame. + onFrame: w +}) { + Q = Q ?? new e.Box3(new e.Vector3(-1, -1, -1), new e.Vector3(1, 1, 1)); + const c = (Q.max.x - Q.min.x) * (Q.max.y - Q.min.y) * (Q.max.z - Q.min.z); + g = g ?? 100, I = I ?? Math.max(1, Math.min(1e6, Math.round(c * g))); + const r = LA(C ?? 1e-3), y = LA(E ?? 5e-3), G = vA( + ((B == null ? void 0 : B.clone()) ?? new e.Vector3(1, 1, 1)).normalize() + ), h = vA( + (t ?? new e.Vector3(0, -1, 0)).normalize() + ), M = LA(s ?? 0.02), l = LA(o ?? 0.01), k = LA(a ?? 2), R = vA(i ?? new e.Color(1, 1, 1)), Y = vA(D ?? new e.Color(0.5, 0.5, 1)), d = LA(n ?? 1), m = LA(0), J = vA(new e.Vector3(0, 0, 0)), x = vA(Q.min), U = vA(Q.max), S = LA(A ?? Number.NEGATIVE_INFINITY), T = UQ(U, x), V = new iI({ + numSplats: I, + generator: UA( + { index: "int" }, + { gsplat: v }, + ({ index: _ }) => { + if (!_) + throw new Error("index not defined"); + const X = lI(_), aA = JQ(X).outputs.w; + let $ = EQ(X), iA = zQ(BA(aA, q("float", 100))); + iA = MI(BA(OQ("float", "PI"), iA)), iA = cA(r, BA(iA, UQ(y, r))); + const eA = BA(iA, G), YA = zQ(BA(aA, q("float", 10))), hA = zQ(aA), DA = kB(R, Y, hA), L = BA(DA, YA), yA = lI( + HA({ + vectorType: "ivec2", + x: _, + y: q("int", 6837) + }) + ); + let gA = EQ(yA), GA = BA(JQ(yA).outputs.w, k); + GA = cA(m, GA), $ = cA($, J); + const lA = MB( + $, + q("vec3", new e.Vector3(1, 1, 1)) + ); + $ = cA(x, BA(T, lA)); + const SA = q("vec4", new e.Quaternion(0, 0, 0, 1)); + gA = MI(cA(EQ(GA), gA)), gA = BA(gA, l); + let MA = cA($, gA), bA = JQ(MA).outputs.y; + bA = NB(S, bA), MA = HA({ vector: MA, y: bA }); + let NA = rQ({ + flags: OQ("uint", "GSPLAT_FLAG_ACTIVE"), + index: _, + center: MA, + scales: eA, + quaternion: SA, + rgb: L, + opacity: d + }); + return NA = P.modify(NA), { gsplat: NA }; + }, + { + globals: () => [rA] + } + ), + update: ({ object: _, time: X, deltaTime: aA }) => { + m.value = X, P.update(V); + const $ = h.value.clone().multiplyScalar(M.value * aA); + J.value.add($), _.visible = d.value > 0, w == null || w({ object: _, time: X, deltaTime: aA }), V.updateVersion(); + } + }), P = new nQ(); + return { + snow: V, + min: x, + max: U, + minY: S, + color1: R, + color2: Y, + opacity: d, + fallVelocity: M, + wanderVariance: k, + wanderScale: l, + fallDirection: h, + minScale: r, + maxScale: y, + anisoScale: G + }; +} +const HD = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DEFAULT_RAIN: $e, + DEFAULT_SNOW: _e, + snowBox: AD, + staticBox: Pe +}, Symbol.toStringTag, { value: "Module" })), YQ = class YQ { + static createButton(A, I = {}) { + const g = navigator.xr; + if (!g) + return null; + const B = g, C = document.createElement("button"); + A.xr.enabled = !0, A.xr.setReferenceSpaceType("local"); + function E() { + let i = null; + async function D(c) { + console.log("onSessionStarted"), c.addEventListener("end", n), await A.xr.setSession(c), C.textContent = "EXIT VR", i = c; + } + function n() { + console.log("onSessionEnded"), i == null || i.removeEventListener("end", n), C.textContent = "ENTER VR", i = null; + } + C.style.display = "", C.style.cursor = "pointer", C.style.left = "calc(50% - 100px)", C.style.width = "200px", C.style.height = "100px", C.textContent = "ENTER VR"; + const w = { + ...I, + optionalFeatures: [ + // "local-floor", + // "bounded-floor", + // "layers", + ...I.optionalFeatures || [] + ] + }; + C.onmouseenter = () => { + C.style.opacity = "1.0"; + }, C.onmouseleave = () => { + C.style.opacity = "0.5"; + }, C.onclick = () => { + i === null ? (console.log("requesting session"), B.requestSession("immersive-vr", w).then( + D + )) : (console.log("ending session"), i.end()); + }; + } + function t() { + C.style.display = "none", C.style.cursor = "auto", C.style.left = "calc(50% - 75px)", C.style.width = "150px", C.onmouseenter = null, C.onmouseleave = null, C.onclick = null; + } + function s() { + t(), C.textContent = "VR NOT SUPPORTED"; + } + function o(i) { + t(), console.warn( + "Exception when trying to call xr.isSessionSupported", + i + ), C.textContent = "VR NOT ALLOWED"; + } + function a(i) { + i.style.position = "absolute", i.style.bottom = "20px", i.style.padding = "12px 6px", i.style.border = "1px solid #fff", i.style.borderRadius = "4px", i.style.background = "rgba(0,0,0,0.1)", i.style.color = "#fff", i.style.font = "normal 13px sans-serif", i.style.textAlign = "center", i.style.opacity = "0.5", i.style.outline = "none", i.style.zIndex = "999"; + } + return C.id = "VRButton", C.style.display = "none", a(C), B.isSessionSupported("immersive-vr").then((i) => { + i ? E() : s(), i && YQ.xrSessionIsGranted && C.click(); + }).catch(o), C; + } + static registerSessionGrantedListener() { + const A = navigator.xr; + if (!A) + return null; + const I = A; + /WebXRViewer\//i.test(navigator.userAgent) || I.addEventListener("sessiongranted", () => { + YQ.xrSessionIsGranted = !0; + }); + } +}; +YQ.xrSessionIsGranted = !1; +let YI = YQ; +YI.registerSessionGrantedListener(); +const QD = 0.5, ID = 0.5, gD = 0; +var bI = /* @__PURE__ */ ((Q) => (Q.w = "wrist", Q.t0 = "thumb-metacarpal", Q.t1 = "thumb-phalanx-proximal", Q.t2 = "thumb-phalanx-distal", Q.t3 = "thumb-tip", Q.i0 = "index-finger-metacarpal", Q.i1 = "index-finger-phalanx-proximal", Q.i2 = "index-finger-phalanx-intermediate", Q.i3 = "index-finger-phalanx-distal", Q.i4 = "index-finger-tip", Q.m0 = "middle-finger-metacarpal", Q.m1 = "middle-finger-phalanx-proximal", Q.m2 = "middle-finger-phalanx-intermediate", Q.m3 = "middle-finger-phalanx-distal", Q.m4 = "middle-finger-tip", Q.r0 = "ring-finger-metacarpal", Q.r1 = "ring-finger-phalanx-proximal", Q.r2 = "ring-finger-phalanx-intermediate", Q.r3 = "ring-finger-phalanx-distal", Q.r4 = "ring-finger-tip", Q.p0 = "pinky-finger-metacarpal", Q.p1 = "pinky-finger-phalanx-proximal", Q.p2 = "pinky-finger-phalanx-intermediate", Q.p3 = "pinky-finger-phalanx-distal", Q.p4 = "pinky-finger-tip", Q))(bI || {}); +const wt = Object.keys(bI), fD = wt.length, mD = { + w: 0, + t0: 1, + t1: 2, + t2: 3, + t3: 4, + i0: 5, + i1: 6, + i2: 7, + i3: 8, + i4: 9, + m0: 10, + m1: 11, + m2: 12, + m3: 13, + m4: 14, + r0: 15, + r1: 16, + r2: 17, + r3: 18, + r4: 19, + p0: 20, + p1: 21, + p2: 22, + p3: 23, + p4: 24 +}, WQ = { + w: 0.02, + t0: 0.02, + t1: 0.014, + t2: 0.0115, + t3: 85e-4, + i0: 0.022, + i1: 0.012, + i2: 85e-4, + i3: 75e-4, + i4: 65e-4, + m0: 0.021, + m1: 0.012, + m2: 8e-3, + m3: 75e-4, + m4: 65e-4, + r0: 0.019, + r1: 0.011, + r2: 75e-4, + r3: 7e-3, + r4: 6e-3, + p0: 0.012, + p1: 0.01, + p2: 7e-3, + p3: 65e-4, + p4: 55e-4 +}, BD = [ + ["w", "t0", "t1", "t2", "t3"], + ["w", "i0", "i1", "i2", "i3", "i4"], + ["w", "m0", "m1", "m2", "m3", "m4"], + ["w", "r0", "r1", "r2", "r3", "r4"], + ["w", "p0", "p1", "p2", "p3", "p4"] +], CD = [ + [8, 10, 8, 6], + [8, 19, 14, 8, 6], + [8, 19, 14, 8, 6], + [8, 19, 14, 8, 6], + [8, 19, 14, 8, 6] +], bD = ["t3", "i4", "m4", "r4", "p4"], xD = ["i4", "m4", "r4", "p4"]; +var rt = /* @__PURE__ */ ((Q) => (Q.left = "left", Q.right = "right", Q))(rt || {}); +const dI = Object.keys(rt); +class KD { + constructor() { + this.hands = {}, this.last = {}, this.values = {}, this.tests = {}, this.lastTests = {}, this.updated = !1; + } + update({ xr: A, xrFrame: I }) { + const g = A.getSession(); + if (!g) + return; + const B = A.getReferenceSpace(); + if (B && I.getJointPose) { + this.last = this.hands, this.lastTests = this.tests, this.hands = {}, this.values = {}, this.tests = {}; + for (const C of g.inputSources) { + if (!C.hand) + continue; + const E = C.handedness; + this.hands[E] = {}; + for (const t of wt) { + const s = C.hand.get(bI[t]); + if (s) { + const o = I.getJointPose(s, B); + if (o) { + const { position: a, orientation: i } = o.transform; + this.hands[E][t] = { + position: new uA(a.x, a.y, a.z), + quaternion: new xI( + i.x, + i.y, + i.z, + i.w + ), + radius: o.radius || 1e-3 + }; + } + } + } + } + for (const C of dI) + for (const { key: E, value: t } of [ + { key: `${C}AllTips`, value: this.allTipsTouching(C) }, + { + key: `${C}IndexThumb`, + value: this.touching(C, "i4", C, "t3") + }, + { + key: `${C}MiddleThumb`, + value: this.touching(C, "m4", C, "t3") + }, + { + key: `${C}RingThumb`, + value: this.touching(C, "r4", C, "t3") + }, + { + key: `${C}PinkyThumb`, + value: this.touching(C, "p4", C, "t3") + }, + { key: `${C}TriTips`, value: this.triTipsTouching(C) } + ]) + this.values[E] = t, this.tests[E] = t === 1 ? !0 : t === 0 ? !1 : this.lastTests[E] ?? !1; + } + } + makeGhostMesh() { + const A = new uA(), I = new uA(0.01, 0.01, 0.01), g = new xI(0, 0, 0, 1), B = new KI(1, 1, 1), C = Math.PI * 3, E = new KI(1, 1, 1); + let t = 1; + const s = new OA({ + onFrame: () => { + let o = 0; + for (const a of dI) { + const i = this.values[`${a}MiddleThumb`], D = this.hands[a]; + for (const [n, w] of BD.entries()) + for (let c = 1; c < w.length; ++c) { + const r = CD[n][c - 1] * 2, y = c + 1 === w.length, G = D == null ? void 0 : D[w[c - 1]], h = D == null ? void 0 : D[w[c]]; + for (let M = 0; M < r; ++M) { + const l = (M + 0.5) / r; + if (t = 0, G && h) { + A.copy(G.position).lerp(h.position, l), g.copy(G.quaternion).slerp(h.quaternion, l); + const k = WQ[w[c - 1]], R = WQ[w[c]]; + let Y = (1 - l) * k + l * R; + y && l > 0.8 && (Y *= Math.sqrt(1 - ((l - 0.8) / 0.2) ** 2)), I.set(0.65 * Y, 0.5 * Y, 3e-3), B.set( + 0.55 + 0.45 * Math.sin(A.x * C), + 0.55 + 0.45 * Math.sin(A.y * C), + 0.55 + 0.45 * Math.sin(A.z * C) + ), a === "right" && B.set(1 - B.r, 1 - B.g, 1 - B.b), B.lerp(E, i), t = 0.75; + } + s.packedSplats.setSplat( + o, + A, + I, + g, + t, + B + ), o += 1; + } + } + } + s.packedSplats.numSplats = o, s.packedSplats.needsUpdate = !0, s.numSplats = o; + } + }); + return s; + } + distance(A, I, g, B, C = !1) { + const E = C ? this.last[A] : this.hands[A], t = C ? this.last[g] : this.hands[g], s = E == null ? void 0 : E[I], o = t == null ? void 0 : t[B]; + return !s || !o ? Number.POSITIVE_INFINITY : s.position.distanceTo(o.position); + } + separation(A, I, g, B, C = !1) { + const E = this.distance(A, I, g, B, C); + return E === Number.POSITIVE_INFINITY ? Number.POSITIVE_INFINITY : E - WQ[I] - WQ[B]; + } + touching(A, I, g, B, C = !1) { + const E = this.separation(A, I, g, B, C); + return E === Number.POSITIVE_INFINITY ? Number.POSITIVE_INFINITY : 1 - Math.max(0, Math.min(1, E / 0.01 - gD)); + } + allTipsTouching(A, I = !1) { + return Math.min( + this.touching(A, "t3", A, "i4", I), + this.touching(A, "i4", A, "m4", I), + this.touching(A, "m4", A, "r4", I), + this.touching(A, "r4", A, "p4", I) + // this.touching(hand, "p4", hand, "t3", last), + ); + } + triTipsTouching(A, I = !1) { + return Math.min( + this.touching(A, "t3", A, "i4", I), + this.touching(A, "i4", A, "m4", I), + this.touching(A, "m4", A, "t3", I) + ); + } +} +class ZD { + constructor({ + xrHands: A, + control: I, + moveInertia: g, + rotateInertia: B + }) { + this.lastGrip = {}, this.lastPivot = new uA(), this.rotateVelocity = 0, this.velocity = new uA(), this.xrHands = A, this.control = I, this.moveInertia = g ?? QD, this.rotateInertia = B ?? ID; + } + update(A) { + var C, E, t, s, o; + const I = {}; + for (const a of dI) { + const i = this.xrHands.hands[a]; + i && this.xrHands.tests[`${a}MiddleThumb`] && (I[a] = new uA().add(((C = i.t3) == null ? void 0 : C.position) ?? new uA()).add(((E = i.i4) == null ? void 0 : E.position) ?? new uA()).add(((t = i.m4) == null ? void 0 : t.position) ?? new uA()).add(((s = i.r4) == null ? void 0 : s.position) ?? new uA()).add(((o = i.p4) == null ? void 0 : o.position) ?? new uA()).multiplyScalar(1 / 5)); + } + if (I.left && I.right && this.lastGrip.left && this.lastGrip.right) { + const a = I.left.clone().add(I.right).multiplyScalar(0.5), i = this.lastGrip.left.clone().add(this.lastGrip.right).multiplyScalar(0.5); + this.lastPivot = a; + const D = a.clone().applyMatrix4(this.control.matrix); + D.sub(i.clone().applyMatrix4(this.control.matrix)), D.multiplyScalar(1 / A), this.velocity.lerp(D, 1 - Math.exp(-20 * A)); + const n = Math.atan2(I.left.z - a.z, I.left.x - a.x), w = Math.atan2( + this.lastGrip.left.z - i.z, + this.lastGrip.left.x - i.x + ); + let c = n - w; + c > Math.PI ? c -= Math.PI * 2 : c < -Math.PI && (c += Math.PI * 2); + const r = c / A, y = Math.exp(-20 * A); + this.rotateVelocity = this.rotateVelocity * y + r * (1 - y); + } else if (this.rotateVelocity *= Math.exp(-A / this.rotateInertia), I.left && this.lastGrip.left) { + const a = I.left.clone().applyMatrix4(this.control.matrix); + a.sub(this.lastGrip.left.clone().applyMatrix4(this.control.matrix)), a.multiplyScalar(1 / A), this.velocity.lerp(a, 1 - Math.exp(-20 * A)); + } else if (I.right && this.lastGrip.right) { + const a = I.right.clone().applyMatrix4(this.control.matrix); + a.sub( + this.lastGrip.right.clone().applyMatrix4(this.control.matrix) + ), a.multiplyScalar(1 / A), this.velocity.lerp(a, 1 - Math.exp(-20 * A)); + } else + this.velocity.multiplyScalar(Math.exp(-A / this.moveInertia)); + const g = this.lastPivot.clone().negate(), B = new sI().makeTranslation(g).premultiply(new sI().makeRotationY(this.rotateVelocity * A)).premultiply(new sI().makeTranslation(this.lastPivot)); + this.control.matrix.multiply(B), this.control.matrix.decompose( + this.control.position, + this.control.quaternion, + this.control.scale + ), this.control.updateMatrixWorld(!0), this.control.position.sub(this.velocity.clone().multiplyScalar(A)), this.lastGrip = I; + } +} +const ED = 1, tD = 2, iD = 2e-3, sD = 6e-3, oD = 15e-4, aD = 0.15, eD = 0.15, DD = 0.1, nD = 2, cD = 200, wD = 400, rD = 50, hD = { + KeyW: new e.Vector3(0, 0, -1), + KeyS: new e.Vector3(0, 0, 1), + KeyA: new e.Vector3(-1, 0, 0), + KeyD: new e.Vector3(1, 0, 0), + KeyR: new e.Vector3(0, 1, 0), + KeyF: new e.Vector3(0, -1, 0) +}, yD = { + ArrowUp: new e.Vector3(0, 0, -1), + ArrowDown: new e.Vector3(0, 0, 1), + ArrowLeft: new e.Vector3(-1, 0, 0), + ArrowRight: new e.Vector3(1, 0, 0), + PageUp: new e.Vector3(0, 1, 0), + PageDown: new e.Vector3(0, -1, 0) +}, GD = { + KeyQ: new e.Vector3(0, 0, 1), + KeyE: new e.Vector3(0, 0, -1) +}, lD = { + Home: new e.Vector3(0, -1, 0), + End: new e.Vector3(0, 1, 0), + Insert: new e.Vector3(-1, 0, 0), + Delete: new e.Vector3(1, 0, 0) +}; +class qD { + constructor({ canvas: A }) { + this.lastTime = 0, this.fpsMovement = new MD({}), this.pointerControls = new ND({ canvas: A }); + } + update(A) { + const I = performance.now(), g = (I - (this.lastTime || I)) / 1e3; + this.lastTime = I, this.fpsMovement.update(g, A), this.pointerControls.update(g, A); + } +} +class MD { + constructor({ + moveSpeed: A, + rollSpeed: I, + stickThreshold: g, + rotateSpeed: B, + keycodeMoveMapping: C, + keycodeRotateMapping: E, + gamepadMapping: t, + capsMultiplier: s, + shiftMultiplier: o, + ctrlMultiplier: a, + xr: i + } = {}) { + this.enable = !0, this.moveSpeed = A ?? ED, this.rollSpeed = I ?? tD, this.stickThreshold = g ?? DD, this.rotateSpeed = B ?? nD, this.keycodeMoveMapping = C ?? { + ...hD, + ...yD + }, this.keycodeRotateMapping = E ?? { + ...GD, + ...lD + }, this.gamepadMapping = t ?? { + 4: "rollLeft", + 5: "rollRight", + 6: "ctrl", + 7: "shift" + }, this.capsMultiplier = s ?? 10, this.shiftMultiplier = o ?? 5, this.ctrlMultiplier = a ?? 1 / 5, this.xr = i, this.keydown = {}, this.keycode = {}, document.addEventListener("keydown", (D) => { + this.keydown[D.key] = !0, this.keycode[D.code] = !0; + }), document.addEventListener("keyup", (D) => { + this.keydown[D.key] = !1, this.keycode[D.code] = !1; + }); + } + // Call this method in your render loop with `control` set to the object to control + // (`THREE.Camera` or a `THREE.Object3D` that contains it), with `deltaTime` + // in seconds since the last update. + update(A, I) { + var a, i; + if (!this.enable) + return; + const g = [new e.Vector2(), new e.Vector2()], B = navigator.getGamepads()[0]; + B && (g[0].set(B.axes[0], B.axes[1]), g[1].set(B.axes[2], B.axes[3])); + const C = (B == null ? void 0 : B.buttons.map((D) => D.pressed)) || [], E = Array.from(((i = (a = this.xr) == null ? void 0 : a.getSession()) == null ? void 0 : i.inputSources) ?? []); + for (const D of E) { + const n = D.gamepad; + if (n) + switch (D.handedness) { + case "none": { + g[0].x += n.axes[0], g[0].y += n.axes[1], g[1].x += n.axes[2], g[1].y += n.axes[3]; + break; + } + case "left": { + g[0].x += n.axes[2], g[0].y += n.axes[3]; + break; + } + case "right": { + g[1].x += n.axes[2], g[1].y += n.axes[3]; + break; + } + } + } + for (const D of g) + D.x = Math.abs(D.x) >= this.stickThreshold ? D.x : 0, D.y = Math.abs(D.y) >= this.stickThreshold ? D.y : 0; + const t = new e.Vector3( + g[1].x, + g[1].y, + 0 + ).multiplyScalar(this.rotateSpeed); + for (const [D, n] of Object.entries(this.keycodeRotateMapping)) + this.keycode[D] && t.add(n); + for (const D in this.gamepadMapping) + if (C[Number.parseInt(D)]) + switch (this.gamepadMapping[D]) { + case "rollLeft": + t.z += 1; + break; + case "rollRight": + t.z -= 1; + break; + } + if (t.multiply( + new e.Vector3(this.rotateSpeed, this.rotateSpeed, this.rollSpeed) + ), t.manhattanLength() > 0) { + t.multiplyScalar(A); + const D = new e.Euler().setFromQuaternion( + I.quaternion, + "YXZ" + ); + D.y -= t.x, D.x = Math.max( + -Math.PI / 2, + Math.min(Math.PI / 2, D.x - t.y) + ), D.z = Math.max(-Math.PI, Math.min(Math.PI, D.z + t.z)), I.quaternion.setFromEuler(D); + } + const s = new e.Vector3(g[0].x, 0, g[0].y); + for (const [D, n] of Object.entries(this.keycodeMoveMapping)) + this.keycode[D] && s.add(n); + let o = 1; + this.keydown.CapsLock && (o *= this.capsMultiplier), (this.keycode.ShiftLeft || this.keycode.ShiftRight) && (o *= this.shiftMultiplier), (this.keycode.ControlLeft || this.keycode.ControlRight) && (o *= this.ctrlMultiplier); + for (const D in this.gamepadMapping) + if (C[Number.parseInt(D)]) + switch (this.gamepadMapping[D]) { + case "shift": + o *= this.shiftMultiplier; + break; + case "ctrl": + o *= this.ctrlMultiplier; + break; + } + s.applyQuaternion(I.quaternion), I.position.add( + s.multiplyScalar(this.moveSpeed * o * A) + ); + } +} +class ND { + constructor({ + // The HTML canvas element to attach pointer events to + canvas: A, + // Speed of rotation (default DEFAULT_ROTATE_SPEED) + rotateSpeed: I, + // Speed of sliding when dragging with right/middle mouse button or two fingers + // (default DEFAULT_SLIDE_SPEED) + slideSpeed: g, + // Speed of movement when using mouse scroll wheel (default DEFAULT_SCROLL_SPEED) + scrollSpeed: B, + // Reverse the direction of rotation (default: false) + reverseRotate: C, + // Reverse the direction of sliding (default: false) + reverseSlide: E, + // Reverse the direction of swipe gestures (default: false) + reverseSwipe: t, + // Reverse the direction of scroll wheel movement (default: false) + reverseScroll: s, + // Inertia factor for movement (default: DEFAULT_MOVE_INERTIA) + moveInertia: o, + // Inertia factor for rotation (default: DEFAULT_ROTATE_INERTIA) + rotateInertia: a, + // Callback for double press events (default: () => {}) + doublePress: i + }) { + this.enable = !0, this.canvas = A, this.rotateSpeed = I ?? iD, this.slideSpeed = g ?? sD, this.scrollSpeed = B ?? oD, this.reverseRotate = C ?? !1, this.reverseSlide = E ?? !1, this.reverseSwipe = t ?? !1, this.reverseScroll = s ?? !1, this.moveInertia = o ?? eD, this.rotateInertia = a ?? aD, this.doublePress = i ?? (() => { + }), this.doublePressLimitMs = wD, this.doublePressDistance = rD, this.lastUp = null, this.rotating = null, this.sliding = null, this.dualPress = !1, this.scroll = new e.Vector3(), this.rotateVelocity = new e.Vector3(), this.moveVelocity = new e.Vector3(), A.addEventListener("pointerdown", (n) => { + const w = this.getPointerPosition(n), c = w.clone(), r = w.clone(), y = !this.rotating && (n.pointerType !== "mouse" || n.button === 0), { pointerId: G, timeStamp: h } = n; + if (y) + this.rotating = { initial: c, last: r, position: w, pointerId: G, timeStamp: h }, A.setPointerCapture(n.pointerId), this.dualPress = !1; + else if (!this.sliding) { + const M = n.pointerType === "mouse" ? n.button : void 0; + this.sliding = { + initial: c, + last: r, + position: w, + pointerId: G, + button: M, + timeStamp: h + }, A.setPointerCapture(n.pointerId), this.dualPress = this.rotating != null && h - this.rotating.timeStamp < cD; + } + }); + const D = (n) => { + var r, y; + ((r = this.rotating) == null ? void 0 : r.pointerId) === n.pointerId ? (this.rotating = null, A.releasePointerCapture(n.pointerId), this.dualPress && this.sliding && (A.releasePointerCapture(this.sliding.pointerId), this.sliding = null)) : ((y = this.sliding) == null ? void 0 : y.pointerId) === n.pointerId && (this.sliding = null, A.releasePointerCapture(n.pointerId), this.dualPress && this.rotating && (A.releasePointerCapture(this.rotating.pointerId), this.rotating = null)); + const w = this.getPointerPosition(n), c = this.lastUp; + if (this.lastUp = { position: w, time: n.timeStamp }, c && c.position.distanceTo(w) < this.doublePressDistance) { + const h = n.timeStamp - c.time; + h < this.doublePressLimitMs && (this.lastUp = null, this.doublePress({ position: w, intervalMs: h })); + } + }; + document.addEventListener("pointerup", D), document.addEventListener("pointercancel", D), document.addEventListener("pointermove", (n) => { + var w, c; + ((w = this.rotating) == null ? void 0 : w.pointerId) === n.pointerId ? this.rotating.position = this.getPointerPosition(n) : ((c = this.sliding) == null ? void 0 : c.pointerId) === n.pointerId && (this.sliding.position = this.getPointerPosition(n)); + }), A.addEventListener("contextmenu", (n) => { + n.preventDefault(); + }), A.addEventListener("wheel", (n) => { + this.scroll.add( + new e.Vector3(n.deltaX, n.deltaY, n.deltaZ) + ), n.preventDefault(); + }); + } + getPointerPosition(A) { + const I = this.canvas.getBoundingClientRect(); + return new e.Vector2( + A.clientX - I.left, + A.clientY - I.top + ); + } + update(A, I) { + if (!this.enable) + return; + if (this.dualPress && this.rotating && this.sliding) { + const B = [ + this.rotating.position.clone().sub(this.rotating.last), + this.sliding.position.clone().sub(this.sliding.last) + ], C = B[0].dot(B[1]); + if (C >= 0.2) { + const E = B[0].clone().add(B[1]), t = new e.Vector3(E.x, -E.y, 0); + t.multiplyScalar(this.slideSpeed * (this.reverseSwipe ? 1 : -1)), t.applyQuaternion(I.quaternion), I.position.add(t), this.moveVelocity = t.clone().multiplyScalar(1 / A); + } else if (C <= -0.2) { + const E = this.sliding.last.clone().sub(this.rotating.last), t = E.length(); + E.multiplyScalar(1 / t).normalize(); + const s = new e.Vector2(-E.y, E.x), o = [B[0].dot(E), B[1].dot(E)], a = [B[0].dot(s), B[1].dot(s)], i = this.rotating.last.clone().add(this.sliding.last).multiplyScalar(0.5); + let D = new e.Vector3(); + if (I instanceof e.Camera) { + const G = new e.Vector2( + i.x / this.canvas.clientWidth * 2 - 1, + -(i.y / this.canvas.clientHeight) * 2 + 1 + ), h = new e.Raycaster(); + h.setFromCamera(G, I), D = h.ray.direction; + } + const n = o[1] - o[0], w = D.multiplyScalar(n * this.slideSpeed); + I.position.add(w), this.moveVelocity = w.clone().multiplyScalar(1 / A); + const c = [ + Math.atan(a[0] / (-0.5 * t)), + Math.atan(a[1] / (0.5 * t)) + ], r = 0.5 * (c[0] + c[1]), y = new e.Euler().setFromQuaternion( + I.quaternion, + "YXZ" + ); + y.z = Math.max( + -Math.PI, + Math.min(Math.PI, y.z + 0.5 * r) + ), I.quaternion.setFromEuler(y); + } + this.rotating.last.copy(this.rotating.position), this.sliding.last.copy(this.sliding.position); + } else { + const B = new e.Vector3(); + if (this.rotating && !this.dualPress) { + const E = this.rotating.position.clone().sub(this.rotating.last); + this.rotating.last.copy(this.rotating.position), B.set(E.x, E.y, 0), B.multiplyScalar(this.rotateSpeed * (this.reverseRotate ? -1 : 1)), this.rotateVelocity = B.clone().multiplyScalar(1 / A); + } else + this.rotateVelocity.multiplyScalar( + Math.exp(-A / this.rotateInertia) + ), B.addScaledVector(this.rotateVelocity, A); + const C = new e.Euler().setFromQuaternion( + I.quaternion, + "YXZ" + ); + if (C.y -= B.x, C.x = Math.max( + -Math.PI / 2, + Math.min(Math.PI / 2, C.x - B.y) + ), C.z *= Math.exp(-0 * A), I.quaternion.setFromEuler(C), this.sliding && !this.dualPress) { + const E = this.sliding.position.clone().sub(this.sliding.last); + this.sliding.last.copy(this.sliding.position); + const t = this.sliding.button !== 2 ? new e.Vector3(E.x, 0, E.y) : new e.Vector3(E.x, -E.y, 0); + t.multiplyScalar(this.slideSpeed * (this.reverseSlide ? -1 : 1)), t.applyQuaternion(I.quaternion), I.position.add(t), this.moveVelocity = t.clone().multiplyScalar(1 / A); + } else + this.moveVelocity.multiplyScalar( + Math.exp(-A / this.moveInertia) + ), I.position.addScaledVector(this.moveVelocity, A); + } + const g = this.scroll.multiplyScalar(this.scrollSpeed); + g.set(g.x, g.z, g.y), this.reverseScroll && g.multiplyScalar(-1), g.applyQuaternion(I.quaternion), I.position.add(g), this.scroll.set(0, 0, 0); + } +} +export { + xD as FINGER_TIPS, + qD as ForgeControls, + gI as ForgeRenderer, + II as ForgeViewpoint, + MD as FpsMovement, + dI as HANDS, + rt as Hand, + ZD as HandMovement, + wt as JOINT_IDS, + mD as JOINT_INDEX, + WQ as JOINT_RADIUS, + BD as JOINT_SEGMENTS, + CD as JOINT_SEGMENT_STEPS, + bD as JOINT_TIPS, + bI as JointEnum, + fD as NUM_JOINTS, + fA as PackedSplats, + kI as PlyReader, + ND as PointerControls, + $Q as Readback, + As as Sint8ToFloat, + DI as SplatAccumulator, + AI as SplatEdit, + we as SplatEditRgbaBlendMode, + he as SplatEditSdf, + ne as SplatEditSdfType, + ye as SplatEdits, + pe as SplatFileType, + iI as SplatGenerator, + JD as SplatLoader, + OA as SplatMesh, + le as SplatModifier, + dD as SplatSkinning, + nQ as SplatTransformer, + YD as SpzReader, + $i as Uint8ToFloat, + YI as VRButton, + KD as XrHands, + UD as constructAxes, + uD as constructGrid, + SD as constructSpherePoints, + RD as dyno, + hs as flipPixels, + XQ as floatToSint8, + xA as floatToUint8, + CQ as fromHalf, + HD as generators, + He as getSplatFileType, + pD as imageSplats, + ws as isAndroid, + cs as isMobile, + rs as isOculus, + ys as pixelsToPngUrl, + hI as setPackedSplat, + LD as textSplats, + BQ as toHalf, + yI as unpackSplat, + at as unpackSplats, + FD as utils +}; diff --git a/docs/assets/images/hero-image.png b/docs/assets/images/hero-image.png new file mode 100644 index 0000000000000000000000000000000000000000..ea1ab046a77e841bfa0f7ac881c99924367cafb5 GIT binary patch literal 1397218 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

v9-~uvyR5GO06+jqL_t&sd&3eEM(fO! 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 z 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

+r0pF@KfKs-OfBBi8QDhOm$I@6A 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Ļ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

tE+)sG-sn2%s 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

-B2+a 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ΚRF*jae3K^Q-`KwC5uS% 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 LRtNL + + + + + + + diff --git a/docs/controls.md b/docs/controls.md new file mode 100644 index 0000000..6f1be65 --- /dev/null +++ b/docs/controls.md @@ -0,0 +1,152 @@ +# Controls + +A program using `Forge` can use any camera control scheme they want that is compatible with Three.js and will typically manipulate a `THREE.Camera` object's transform. `Forge` ships with simple, intuitive controls for navigating 3D space that use the keyboard + mouse, game pad, or mobile multi-touch. To add these controls, you can add: + +```typescript +const controls = new ForgeControls({ + canvas: HTMLCanvasElement; +}); + +renderer.setAnimationLoop((time) => { + renderer.render(scene, camera);) + controls.update(camera); +}); +``` + +`ForgeControls` instantiates two classes `FpsMovement` and `PointerControls` that it updates internally. You can also instantiate and use these two classes separately: + +## `class FpsMovement` + +`FpsMovement` implements controls that will be familiar to anyone who plays First Person Shooters using keyboard + mouse or a gamepad. Creating a `FpsMovement` instance provides many parameters: + +```typescript +const fpsMovement = new FpsMovement({ + moveSpeed?: number; + rollSpeed?: number; + stickThreshold?: number; + rotateSpeed?: number; + keycodeMoveMapping?: { [key: string]: THREE.Vector3 }; + keycodeRotateMapping?: { [key: string]: THREE.Vector3 }; + gamepadMapping?: { + [button: number]: "shift" | "ctrl" | "rollLeft" | "rollRight"; + }; + capsMultiplier?: number; + shiftMultiplier?: number; + ctrlMultiplier?: number; + xr?: THREE.WebXRManager; +}); +``` +When gamepads are connected, `FpsMovement` will always use gamepad index 0 for twin-stick movement and rotation. + +If `xr` is passed in, the WebXR controllers can be used as a split gamepad to control movement and rotation. (tested on Quest 3) + +### Optional parameters + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `moveSpeed` | `1.0` | Base movement speed | +| `rollSpeed` | `2.0` | Speed of roll rotation | +| `stickThreshold` | `0.1` | Deadzone for gamepad analog sticks | +| `rotateSpeed` | `2.0` | Speed of rotation when using gamepad or keys | +| `keycodeMoveMapping` | `{...WASD_KEYCODE_MOVE, ...ARROW_KEYCODE_MOVE}` | Maps keyboard keys to movement directions | +| `keycodeRotateMapping` | `{...QE_KEYCODE_ROTATE, ...ARROW_KEYCODE_ROTATE}` | Maps keyboard keys to rotation directions | +| `gamepadMapping` | `{4: "rollLeft", 5: "rollRight", 6: "ctrl", 7: "shift"}` | Maps gamepad buttons to actions | +| `capsMultiplier` | `10.0` | Speed multiplier when Caps Lock is active | +| `shiftMultiplier` | `5.0` | Speed multiplier when Shift is held | +| `ctrlMultiplier` | `0.2` | Speed multiplier when Ctrl is held | +| `xr` | `undefined` | Optional WebXR manager for XR controller stick support + +### `update(deltaTime, control)` + +Call this method in your render loop with `control` set to the object to control (`THREE.Camera` or a `THREE.Object3D` that contains it), with `deltaTime` in seconds since the last update. +The update method handles: + +- Processing keyboard input for movement and rotation +- Processing gamepad input for movement and rotation +- Applying speed multipliers based on modifier keys and gamepad buttons +- Applying movement and rotation to the controlled object + + +## `class PointerControls` + +`PointerControls` implements pointer/mouse/touch controls on the canvas, for both desktop and mobile web applications. Creating a new control: +```typescript +const pointerControls = new PointerControls({ + canvas: HTMLCanvasElement; + rotateSpeed?: number; + slideSpeed?: number; + scrollSpeed?: number; + reverseRotate?: boolean; + reverseSlide?: boolean; + reverseSwipe?: boolean; + reverseScroll?: boolean; + moveInertia?: number; + rotateInertia?: number; + doublePress?: ({ + position, + intervalMs, + }: { position: THREE.Vector2; intervalMs: number }) => void; +}) +``` + +### Require parameters + +| Parameter | Description | +|-----------|-------------| +| `canvas` | The HTML canvas element to attach pointer events to | + +### Optional parameters + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `rotateSpeed` | `0.002` | Speed of rotation when dragging | +| `slideSpeed` | `0.006` | Speed of sliding when dragging with right button or two fingers | +| `scrollSpeed` | `0.0015` | Speed of movement when using mouse wheel | +| `reverseRotate` | `false` | Reverse the direction of rotation | +| `reverseSlide` | `false` | Reverse the direction of sliding | +| `reverseSwipe` | `false` | Reverse the direction of swipe gestures | +| `reverseScroll` | `false` | Reverse the direction of scroll wheel movement | +| `moveInertia` | `0.15` | Inertia factor for movement | +| `rotateInertia` | `0.15` | Inertia factor for rotation | +| `doublePress` | `undefined` | Callback function for double-press/double-tap events | + +### `update(deltaTime, control)` + +Call this method in your render loop with `control` set to the object to control (`THREE.Camera` or a `THREE.Object3D` that contains it), with `deltaTime` in seconds since the last update. + +The update method handles: + +- Processing pointer/mouse/touch movements for rotation +- Handling dual-press touch gestures for camera movement +- Applying scroll wheel input +- Calculating and applying inertia for smooth motion +- Updating the camera position and orientation + + +## Adding a simple GUI to configure controls + +Add `lil-gui` to your package (`npm add lil-gui`) to provide a simple configurable GUI. + +```typescript +import GUI from "lil-gui"; + +const gui = new GUI({ title: "Settings + Controls" }).close(); +const controlOptions = { + reversePointerFps: false, + reversePointerPan: false, +}; +gui + .add(controlOptions, "reversePointerFps") + .name("Reverse Pointer FPS") + .onChange((value: boolean) => { + pointerControls.reverseRotate = value; + pointerControls.reverseScroll = value; + }); +gui + .add(controlOptions, "reversePointerPan") + .name("Reverse Pointer Pan") + .onChange((value: boolean) => { + pointerControls.reverseSlide = value; + pointerControls.reverseSwipe = value; + }); +``` diff --git a/docs/forge-renderer.md b/docs/forge-renderer.md new file mode 100644 index 0000000..e2ec3ab --- /dev/null +++ b/docs/forge-renderer.md @@ -0,0 +1,86 @@ +# ForgeRenderer + +## Adding to your `THREE.Scene` + +Using Forge begins with creating a `ForgeRenderer` object and adding it to your `THREE.Scene`. You can add it anywhere in the scene, for example at the root: +```typescript +const forge = new ForgeRenderer({ + renderer: myThreeWebGlRenderer, +}); +const scene = new THREE.Scene(); +scene.add(forge); +``` + +## Larger scenes + +All scene Gsplats are accumulated by SplatAccumulator into a single global PackedSplats, whose coordinates are relative to the ForgeRenderer's origin. Gsplats that are far away from this origin may exhibit float16 quantization artifacts, so if you plan on moving the camera large distances you can instead add the renderer as a child of your `THREE.Camera`, ensuring that coordinates near the camera viewpoint have higher precision: +```javascript +const aspect = canvas.width / canvas.height; +const camera = new THREE.PerspectiveCamera(75, aspect, 0.1, 1000); +scene.add(camera); +// Add ForgeRenderer as a child of camera to follow it +camera.add(forge); +``` + +## Creating a `ForgeRenderer` + +```typescript +const forge = new ForgeRenderer({ + renderer: THREE.WebGLRenderer; + clock?: THREE.Clock; + autoUpdate?: boolean; + preUpdate?: boolean; + originDistance?: number; + maxStdDev?: number; + enable2DGS?: boolean; + preBlurAmount?: number; + blurAmount?: number; + falloff?: number; + clipXY?: number; + view?: ForgeViewpointOptions; +}); +``` +### Required parameters +| **Parameter** | Description | +| ------------- | ----------- | +| **renderer** | Pass in your `THREE.WebGLRenderer` instance so Forge can perform work outside the usual render loop. Should be created with `antialias: false` (default setting) as WebGL anti-aliasing doesn't improve Gaussian Splatting rendering and significantly reduces performance. + +### Optional parameters + +| **Parameter** | Description | +| ----------------- | ----------- | +| **clock** | Pass in a `THREE.Clock` to synchronize time-based effects across different systems. Alternatively, you can set the `ForgeRenderer` properties `time` and `deltaTime` directly. (default: `new THREE.Clock`) +| **autoUpdate** | Controls whether to check and automatically update Gsplat collection after each frame render. (default: `true`) +| **preUpdate** | Controls whether to update the Gsplats before or after rendering. For WebXR this *must* be false in order to complete rendering as soon as possible. (default: `false`) +| **originDistance** | Distance threshold for ForgeRenderer movement triggering a Gsplat update at the new origin. (default: `1.0`) +| **maxStdDev** | Maximum standard deviations from the center to render Gaussians. Values `Math.sqrt(5)`..`Math.sqrt(8)` produce good results and can be tweaked for performance. (default: `Math.sqrt(8)`) +| **enable2DGS** | Enable 2D Gaussian splatting rendering ability. When this mode is enabled, any `scale` x/y/z component that is exactly `0` (minimum quantized value) results in the other two non-0 axis being interpreted as an oriented 2D Gaussian Splat, rather instead of the usual projected 3DGS Z-slice. When reading PLY files, scale values less than e^-20 will be interpreted as `0`. (default: `true`) +| **preBlurAmount** | Scalar value to add to 2D splat covariance diagonal, effectively blurring + enlarging splats. In scenes trained without the Gsplat anti-aliasing tweak this value was typically 0.3, but with anti-aliasing it is 0.0 (default: `0.0`) +| **blurAmount** | Scalar value to add to 2D splat covarianve diagonal, with opacity adjustment to correctly account for "blurring" when anti-aliasing. Typically 0.3 (equivalent to approx 0.5 pixel radius) in scenes trained with anti-aliasing. +| **falloff** | Modulate Gaussian kernel falloff. 0 means "no falloff, flat shading", while 1 is the normal Gaussian kernel. (default: `1.0`) +| **clipXY** | X/Y clipping boundary factor for Gsplat centers against view frustum. 1.0 clips any centers that are exactly out of bounds, while 1.4 clips centers that are 40% beyond the bounds. (default: `1.4`) +| **view** | Configures the `ForgeViewpointOptions` for the default `ForgeViewpoint` associated with this `ForgeRenderer`. Notable option: `sortRadial` (sort by radial distance or Z-depth) + +## `newViewpoint(options: ForgeViewpointOptions)` + +Create a new `ForgeViewpoint` for this `ForgeRenderer`. Note that every `ForgeRenderer` has an initial `forge.defaultView: ForgeViewpoint` created during construction, which is used for default canvas rendering. Calling this method allows you to create additional viewpoints, which can be updated automatically each frame (performing Gsplat sorting every time there is an update), or updated on-demand for controlled rendering for video frame rendering or similar applications. + +## `update({ scene })` + +If `forge.autoUpdate` is `false` then you must manually call `forge.update({ scene })` to have the scene Gsplats re-generated. + +## `renderEnvMap({ renderer, scene, worldCenter, ... })` + +Renders out the scene to an environment map that can be used for image-based lighting or similar applications. First updates Gsplats, sorts them with respect to the provided `worldCenter`, renders 6 cube faces, then pre-filters them using `THREE.PMREMGenerator` and returns a `THREE.Texture` that can assigned directly to a `THREE.MeshStandardMaterial.envMap` property. + +## `recurseSetEnvMap(root, envMap)` + +Utility function to recursively set the `envMap` property for any `THREE.MeshStandardMaterial` within the subtree of `root`. + +## `getRgba({ generator, ... })` + +Utility function that helps extract the Gsplat RGBA values from a `SplatGenerator`, including the result of any real-time RGBA SDF edits applied to a `SplatMesh`. This effectively "bakes" any computed RGBA values, which can now be used as a pipeline input via `SplatMesh.splatRgba` to inject these baked values into the Gsplat data. + +## `readRgba({ generator, ...})` + +Utility function that builds on `getRgba({ generator })` and additionally reads back the RGBA values to the CPU in a Uint8Array with packed RGBA in that byte order. diff --git a/docs/forge-viewpoint.md b/docs/forge-viewpoint.md new file mode 100644 index 0000000..66022ca --- /dev/null +++ b/docs/forge-viewpoint.md @@ -0,0 +1,81 @@ +# ForgeViewpoint + +A `ForgeViewpoint` is created from and tied to a `ForgeRenderer`, and represents an independent viewpoint of all the scene Gsplats and their sort order. Making these viewpoints explicit allows us to have multiple, simultaneous viewpoint renders, for example for camera preview panes or overhead map views. + +When creating a `ForgeRenderer` it automatically creates a default viewpoint `.defaultView` that is used in the normal render loop when drawing to the canvas, and is automatically updated whenever the camera moves. Additional viewpoints can be created and configured separately: + +## Creating a `ForgeViewpoint` + +```typescript +const viewpoint = forge.newViewpoint({ + autoUpdate?: boolean; + camera?: THREE.Camera; + viewToWorld?: THREE.Matrix4; + target?: { + width: number; + height: number; + doubleBuffer?: boolean; + superXY?: number; + }; + onTextureUpdated?: (texture: THREE.Texture) => void; + sortRadial?: boolean; + sortDistance?: number; + sortCoorient?: boolean; + depthBias?: number; + sort360?: boolean; +}); +``` + +### Optional parameters + +| **Parameter** | Description | +| ----------------- | ----------- | +| **autoUpdate** | Controls whether to auto-update its sort order whenever the ForgeRenderer updates the Gsplats. If you expect to render/display from this viewpoint most frames, set this to `true`. (default: `false`) +| **camera** | Set a `THREE.Camera` for this viewpoint to follow. (default: `undefined`) +| **viewToWorld** | Set an explicit view-to-world transformation matrix for this viewpoint (equivalent to `camera.matrixWorld`), overrides any `camera` setting. (default: `undefined`) +| **target** | Configure viewpoint with an off-screen render target. (default: `undefined`) +| **target.width** | Width of the render target in pixels. +| **target.height** | Height of the render target in pixels. +| **target.doubleBuffer** | If you want to be able to render a scene that depends on this target's output (for example, a recursive viewport), set this to `true` to enable double buffering. (default: `false`) +| **target.superXY** | Super-sampling factor for the render target. Values 1-4 are supported. Note that re-sampling back down to `.width` x `.height` is done on the CPU with simple averaging only when calling `readTarget()`. (default: `1`) +| **onTextureUpdated** | Callback function that is called when the render target texture is updated. Receives the texture as a parameter. Use this to update a viewport with the latest viewpoint render each frame. (default: `undefined`) +| **sortRadial** | Whether to sort splats radially (geometric distance) from the viewpoint (true) or by Z-depth (false). Most scenes are trained with the Z-depth sort metric and will render more accurately at certain viewpoints. However, radial sorting is more stable under viewpoint rotations. (default: `true`) +| **sortDistance** | Distance threshold for re-sorting splats. If the viewpoint moves more than this distance, splats will be re-sorted. (default: `0.01` units) +| **sortCoorient** | View direction dot product threshold for re-sorting splats. For `sortRadial: true` we use 0.99 while `sortRadial: false` uses 0.999 because it is more sensitive to view direction. (default: `0.99` if `sortRadial` else `0.999`) +| **depthBias** | Constant added to Z-depth to bias values into the positive range for `sortRadial: false`, but also used for culling Gsplats "well behind" the viewpoint origin (default: `1.0`) +| **sort360** | Set this to true if rendering a 360 to disable "behind the viewpoint" culling during sorting. This is set automatically when rendering 360 envMaps using the `ForgeRenderer.renderEnvMap()` utility function. (default: `false`) + +## `dispose()` + +Call this when you are done with the `ForgeViewpoint` and want to free up its resources (GPU targets, pixel buffers, etc.) + +## `setAutoUpdate(autoUpdate: boolean)` + +Use this function to change whether this viewpoint will auto-update its sort order whenever the attached `ForgeRenderer` updates the Gsplats. Turn this on or off depending on whether you expect to do renders from this viewpoint most frames. + +## `async prepareRenderPixels({ scene, camera?, viewToWOrld?, update?, forceOrigin? })` + +Render out a viewpoint as a Uint8Array of RGBA values for the provided scene and any `camera`/`viewToWorld` viewpoint overrides. By default `update` is `true`, which triggers its `ForgeRenderer` to check and potentially update the Gsplats. Setting `update` to `false` disables this and sorts the Gsplats as they are. Setting `forceOrigin` (default: `false`) to `true` forces the view update to recalculate the splats with this view origin, potentially altering any view-dependent effects. If you expect view-dependent effects to play a role in the rendering quality, enable this. + +Underneath, `prepareRenderPixels()` simply calls `await this.prepare(...)`, `this.renderTarget(...)`, and finally returns the result `this.readTarget()`, a Promise to a Uint8Array with RGBA values for all the pixels (potentially downsampled if the `superXY` parameter was used). These steps can also be called manually, for example if you need to alter the scene before and after `this.renderTarget(...)` to hide UI elements from being rendered. + +## `async prepare({ scene, camera?, viewToWorld?, update?, forceOrigin? })` + +See above `async prepareRenderPixels()` for explanation of parameters. Awaiting this method updates the Gsplats in the scene and performs a sort of the Gsplats from this viewpoint, preparing it for a subsequent `this.renderTarget()` call in the same tick. + +## `renderTarget({ scene, camera? })` + +Render out the viewpoint to the view target RGBA buffer. Swaps buffers if `doubleBuffer: true` was set. Calls `onTextureUpdated(texture)` with the resulting texture. + +## `async readTarget()` + +Read back the previously rendered target image as a Uint8Array of packed RGBA values (in that order). If `superXY` was set greater than `1` than downsampling is performed in the target pixel array with simple averaging to derive the returned pixel values. Subsequent calls to `this.readTarget()` will reuse the same buffers to minimize memory allocations. + +## `autoPoll()` + +This is called automatically by `ForgeRenderer`, there is no need to call it! The method cannot be private because then ForgeRenderer would not be able to call it. + +## `ForgeViewpoint.EMPTY_TEXTURE` + +If you need an empty `THREE.Texture` to use to initialize a uniform that is updated via `onTextureUpdated(texture)`, this static texture can be handy. + diff --git a/docs/getting-started.md b/docs/getting-started.md new file mode 100644 index 0000000..63884cc --- /dev/null +++ b/docs/getting-started.md @@ -0,0 +1,52 @@ +# Getting Started + +## Quick Start + +Copy and paste code below in an `index.html` file or remix in the [Web Playground](https://glitch.com/edit/#!/forge-dev) + +```html + + + +``` +## Install with NPM + +```shell +npm install forge-dev +``` +## Develop and contribute to Forge + +Build Forge (It requires [Rust](https://www.rust-lang.org/tools/install) installed in your machine) +``` +npm install +npm run dev +``` + +This will run a Web server at [http://localhost:8080/](http://localhost:8080/) with the examples. + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..85768bc --- /dev/null +++ b/docs/index.md @@ -0,0 +1,13 @@ +--- +title: Home +hide: + - navigation + - toc +--- + +

\ No newline at end of file diff --git a/docs/loading-splats.md b/docs/loading-splats.md new file mode 100644 index 0000000..9394da0 --- /dev/null +++ b/docs/loading-splats.md @@ -0,0 +1,86 @@ +# Loading Gsplats + +Forge provides loaders for most popular Gsplat file formats, including `.ply` (original "gsplat" format, some compressed variants, and plain x/y/z/r/g/b point clouds) and `.spz` (Niantic open source compressed format), both auto-detected from the file contents. + +Forge can also load popular formats `.splat` (from `antimatter15/splat`) and `.ksplat` (from `mkkellogg/GaussianSplats3D`) if the file type can be inferred from the URL/path extension, or set explicitly using the `fileType` property when creating a `SplatMesh` or `PackedSplats`. + +## Loading auto-detectable formats `.ply` and `.spz` + +Adding an individual `SplatMesh` from an auto-detectable format is easy and can be done as simply as below: + +```javascript +// Load and create SplatMesh in one go +const splats = new SplatMesh({ url: "./butterfly.ply" }); +scene.add(splats); + +scene.add(new SplatMesh({ url: "plyBin/0123456789abcdef" })); +scene.add(new SplatMesh({ url: "spzBin/fedcba9876543210" })); +``` + +### Load via `PackedSplats` + +Alternatively, you can load a `.ply` or `.spz` into a `PackedSplats`, which can then be used as an input source for multiple `SplatMesh` instances in the scene. + +```javascript +const packedSplats = new PackedSplats({ url: "./clone.ply" }); + +const splats1 = new SplatMesh({ packedSplats }); +scene.add(splats1); + +const splats2 = new SplatMesh({ packedSplats }); +scene.add(splats2); +``` + +### Load via `SplatLoader` + +Finally, you can make use of the `THREE.Loader` infrastructure via the `SplatLoader` class. A `Loader` has a synchronous and asynchronous interface. You can provide progress meters during downloads and invoke completion callbacks as follows: + +```javascript +const loader = new SplatLoader(); +loader.loadAsync(url, (event) => { + if (event.type === "progress") { + const progress = event.lengthComputable + ? `${((event.loaded / event.total) * 100).toFixed(2)}%` + : `${event.loaded} bytes`; + console.log(`Background download progress: ${progress}`); + } +}) +.then((packedSplats) => { + const splatMesh = new SplatMesh({ packedSplats }); + // Re-orient from OpenCV to OpenGL coordinates + splatMesh.quaternion.set(1, 0, 0, 0); + splatMesh.position.set(0, 0, -1); + splatMesh.scale.setScalar(0.5); + scene.add(splatMesh); +}) +.catch((error) => { + console.warn(error); +}); +``` + +## Loading additional formats `.splat` and `.ksplat` + +These formats are reliably auto-detected from the file contents, so we use two fall-back mechanism to enable support for these popular formats. + +First, the auto-detection fails on these files, which triggers file type inference via URL/path file extension. If the URL contains the `.splat` or `.ksplat` extensions (stripping out query parameters etc.), we set the corresponding file type. + +```javascript +const splats = new SplatMesh({ url: "./butterfly.splats" }); +scene.add(splats); + +const ksplats = new SplatMesh({ url: "./butterfly.ksplats" }); +scene.add(ksplats); +``` +If the URL contains a path with no obvious file extension, you can set the field `fileType` when constructing a `SplatMesh` or `PackedSplats`. + +```javascript +scene.add(new SplatMesh({ + url: "splatBin/0123456789abcdef", + fileType: SplatFileType.SPLAT, +})); + +scene.add(new SplatMesh({ + url: "ksplatBin/fedcba9876543210", + fileType: SplatFileType.KSPLAT, +})); +``` diff --git a/docs/overrides/main.html b/docs/overrides/main.html new file mode 100644 index 0000000..1057b49 --- /dev/null +++ b/docs/overrides/main.html @@ -0,0 +1,45 @@ +{% extends "base.html" %} +{% block extrahead %} + {{ super() }} + +{% endblock %} diff --git a/docs/overrides/partials/header.html b/docs/overrides/partials/header.html new file mode 100644 index 0000000..67b2763 --- /dev/null +++ b/docs/overrides/partials/header.html @@ -0,0 +1,30 @@ +
+ +
diff --git a/docs/overview.md b/docs/overview.md new file mode 100644 index 0000000..e222d76 --- /dev/null +++ b/docs/overview.md @@ -0,0 +1,17 @@ + +*Forge aims to expand what's possible with Gaussian Splatting and help 3D/4D creators bring their visions to life and share it with others.* + +# Overview + +Forge is a dynamic Gaussian splat (Gsplat) renderer built on Three.js. It renders Gsplat-based worlds and objects into Three.js scenes, giving you the ability to fuse AI-generated with photogrammetry and regular triangle meshes. Forge is also programmable and fully dynamic, giving you unprecedented control over how Gsplat elements are generated and rendered into the scene. + +## Features +- Render multiple splat objects together with correct sorting +- Integrates with Three.js rendering pipeline to fuse Gsplat + mesh-based objects +- Portable: Works across almost all devices, targeting 98%+ WebGL2 support +- Fast! Renders fast even on low-powered mobile devices +- File format support: all major formats supported including .PLY (including compressed), .SPZ, .SPLAT, .KSPLAT +- Render multiple viewpoints simultaneously +- Fully dynamic: each Gsplat can be transformed and edited for animation +- Real-time Gsplat color editing and skeletal animation +- Shader graph system to dynamically create/edit Gsplats on the GPU diff --git a/docs/packed-splats.md b/docs/packed-splats.md new file mode 100644 index 0000000..c52eccd --- /dev/null +++ b/docs/packed-splats.md @@ -0,0 +1,188 @@ +# PackedSplats + +A `PackedSplats` is a collection of Gaussian splats, packed into a format that takes exactly 16 bytes per Gsplat to maximize memory and cache efficiency. The `center` xyz coordinates are encoded as float16 (3 x 2 bytes), `scale` xyz as 3 x uint8 that encode a log scale from e^-9 to e^9, `rgba` as 4 x uint8, and quaternion encoded via axis+angle using 2 x uint8 for octahedral encoding of the axis direction and a uint8 to encode rotation amount from 0..Pi. + +## Creating a `PackedSplats` + +```typescript +const packedSplats = new PackedSplats({ + // Fetch PLY/WLG/SPZ/SPLAT/KSPLAT file from URL + url?: string; + // Decode raw PLY/WLG/SPZ/SPLAT/KSPLAT file bytes + fileBytes?: Uint8Array | ArrayBuffer; + // Override file type + fileType?: SplatFileType; + // Reserve space for at least this many splats for construction + maxSplats?: number; + // Use provided packed data array, 4 words per splat + packedArray?: Uint32Array; + // Override number of splats in packed array to a subset + numSplats?: number; + // Constructor callback to create splats + construct?: (splats: PackedSplats) => Promise | void; + // Extra splat data, such as sh1..3 components + extra?: Record; +}); +``` + +### Optional parameters + +Like for `SplatMesh` you can create a `new PackedSplats()` with no options, will create a new empty instance with 0 Gsplats. Similarly, you can provide an input `url`, `fileBytes`, `fileType` to decode from a file source. You can also create a `PackedSplats` from a raw `Uint32Array` where each successive 4 Uint32 values encodes one "packed" Gsplat. Finally, a `construct(splats)` callback provides an ergonomic way to create Gsplats procedurally with an in-line callback closure. + +| **Parameter** | Description | +| ----------------- | ----------- | +| **url** | URL to fetch a Gaussian splat file from (supports .ply, .splat, .ksplat, .spz formats). (default: `undefined`) +| **fileBytes** | Raw bytes of a Gaussian splat file to decode directly instead of fetching from URL. (default: `undefined`) +| **fileType** | Override the file type detection for formats that can't be reliably auto-detected (.splat, .ksplat). (default: `undefined` auto-detects other formats from file contents) +| **maxSplats** | Reserve space for at least this many splats when constructing the collection initially. The array will automatically resize past maxSplats so setting it is an optional optimization. (default: `0`) +| **packedArray** | Use provided packed data array, where each 4 consecutive uint32 values encode one "packed" Gsplat. (default: `undefined`) +| **numSplats** | Override number of splats in packed array to use only a subset. (default: length of packed array / 4) +| **construct** | Callback function to programmatically create splats at initialization. (default: `undefined`) +| **extra** | Additional splat data, such as spherical harmonics components (sh1, sh2, sh3). (default: `{}`) + +## Encoding / Decoding + +Utility functions are provided in Javascript to pack/unpack these encodings: +```javascript + +// Set via packedSplats interface +packedSplats.setSplat(index, center, scales, quaternion, opacity, color); + +// Set underlying Uint32 array directly +import { utils } from "@forge-gfx/forge"; +utils.setPackedSplat(packedSplats.packedArray, index, x, y, z, scaleX, scaleY, ...); + +// Set rotation components of underlying Uint32 array directly +utils.setPackedSplatQuat(packedSplats.packedArray, index, quatX, quatY, quatZ, quatW); + +// Unpack all Gsplat components from the Uint32 array +const { center, scales, quaternion, color, opacity } = utils.unpackSplat(packedSplats.packedArray, index); + +// Unpack all Gsplats with callback +packedSplats.forEachSplat((index, center, scales, quaternion, opacity, color) => { + // Use unpacked Gsplat data. Changing the inputs directly has no effect. + // Update just the scales component + utils.setPackedSplatScales(packedSplat.packedArray, index, 0.005, 0.01, 0.015); + // Update the entire splat + packedSplat.setSplat(index, center, scales, quaternion, opacity, color); +}); +``` + +In GLSL / `dyno` shader contexts you can use the following utility functions that are available via `splatDefines.glsl`: + +```glsl +// Pack a Gsplat into a uvec4 +uvec4 packSplat(vec3 center, vec3 scales, vec4 quaternion, vec4 rgba); + +// Unpack a Gsplat from a uvec4 +void unpackSplat(uvec4 packed, out vec3 center, out vec3 scales, out vec4 quaternion, out vec4 rgba); + +// Fetch and unpack a particular index from a PackedSplats. +const gsplat = dyno.readPackedSplat(packedSplats.dyno, index); +``` + +### Byte Layout + +Each `PackedSplat` occupies 16 bytes (4 × `uint32`), with the following layout of fields by byte offset: + +| Offset (bytes) | Field | Size (bytes) | Description | +|----------------|-----------------|--------------|------------------------------------------------------------| +| 0 | R | 1 | Red color channel (uint8 0–255 → 0.0–1.0) | +| 1 | G | 1 | Green color channel (uint8 0–255 → 0.0–1.0) | +| 2 | B | 1 | Blue color channel (uint8 0–255 → 0.0–1.0) | +| 3 | A | 1 | Alpha (opacity) channel (uint8 0–255 → 0.0–1.0) | +| 4–5 | center.x | 2 | X coordinate of splat center (float16) | +| 6–7 | center.y | 2 | Y coordinate of splat center (float16) | +| 8–9 | center.z | 2 | Z coordinate of splat center (float16) | +| 10 | quat oct.U | 1 | Octahedral quaternion U component (uint8) | +| 11 | quat oct.V | 1 | Octahedral quaternion V component (uint8) | +| 12 | scale.x | 1 | X scale, log-encoded to uint8 | +| 13 | scale.y | 1 | Y scale, log-encoded to uint8 | +| 14 | scale.z | 1 | Z scale, log-encoded to uint8 | +| 15 | quat angle (θ) | 1 | Encoded quaternion rotation angle (uint8, θ/π·255) | + +### Gsplat RGBA encoding + +RGB values are encoded are uint8 sRGB values with 0..255 mapping to 0..1. When loading from a PLY file these values are derived by calculating `ply[f_dc_0] * SH_C0 + 0.5`. + +Opacity is encoded on a linear scale where 0..255 maps to 0..1. + +### Gsplat center encoding + +The center x/y/z components are encoded as float16, which provides 10 bits of mantissa, or approximately 1K steps (0.1%) of resolution each power of 2 exponent, with a range of up to 32K in distance. If most of the Gsplats are positioned relative to the origin this provides enough positional resolution. Gsplats that are transformed far from the origin, however (for example when bringing multiple `SplatMesh`es together in a scene that are far apart) may lose precision when mapped to the space of `ForgeRenderer`. For scenes where the user camera may move far from the origin, you may want to tie the `ForgeRenderer` origin to your camera by adding it as a child of the camera. + +### Gsplat scales encoding + +The XYZ scales are encoded independently using the following mapping: Any scale values below e^-20 are interpreted as "true zero" scale, and encoded as `uint8(0)`. Any other values quantized by computing `ln(scale_xyz)`, mapping the range e^-9..e^9 to uint8 values 1..254, rounding, and clamping. This logarithmic scale range provides values from 0.0001 up to 8K in scale, with approximately 7% steps between discrete values. Seems to have minimal impact on perceptible visual quality. + +### Gsplat orientation encoding + +We encode a Gsplat's quaternion/orientation by encoding it explicitly in an axis + angle representation: 8 bits for each U/V coordinate for octahedral encoding of the axis direction, and 8 bits to encode the rotation angle range 0..Pi. + +This representation was chosen oven other internal rotation representations because it provided a good mix of speed/simplicity, uniformity of representable orientations, and especially its ability to handle rotations "near identity". Other encodings such as the more common "3 quaternion components" tend to have poor rotational resolution around I(1), which is a particularly important area of that parameter. + +### `extra` Gsplat data + +Each instance of `PackedSplats` also has a property `extra: Record` that is used to attach additional Gsplat-related data to the `PackedSplats` container. For example, spherical harmonics degrees 1..3 are stored in `sh1: Uint32Array(numSplats * 2)`, `sh2: Uint32Array(numSplats * 4)`, `sh3: Uint32Array(numSplats * 4)`, and intermediate textures are generated by `SplatMesh` and stored as `sh1Texture` etc. + +This structure can be used to extend and store additional data in a `PackedSplats`, but there is no specific convention yet to prevent collisions. + +`sh1` stores each of 3 x 3 RGB signed components as Sint7 (mapping -1..1) in 63 bits (8 bytes) per Gsplat. `sh2` stores each of 5 x 3 RGB signed components as Sint8 in 120 bits (16 bytes). `sh3` stores each of 7 x 3 RGB signed components as Sint6 in 126 bits (16 bytes) to improve memory bandwidth efficiency. + +## `PackedSplats` instance methods + +### `dispose()` + +Call this when you are finished with the PackedSplats and want to free any buffers it holds. + +### `ensureSplats(numSplats)` + +Ensures that `this.packedArray` can fit `numSplats` Gsplats. If it's too small, resize exponentially and copy over the original data. + +Typically you don't need to call this, because calling `this.setSplat(index, ...)` and `this.pushSplat(...)` will automatically call `ensureSplats()` so we have enough splats. + +### `getSplat(index): { center, scales, quaternion, opacity, color }` + +Unpack the 16-byte Gsplat data at `index` into the Three.js components `center: THREE.Vector3`, `scales: THREE.Vector3`, `quaternion: THREE.Quaternion`, `opacity: number 0..1`, `color: THREE.Color 0..1`. + +### `setSplat(index, center, scales, quaternion, opacity, color)` + +Set all PackedSplat components at `index` with the provided Gsplat attributes (can be the same objects returned by `getSplat`). Ensures there is capacity for at least `index+1` Gsplats. + +### `pushSplat(center, scales, quaternion, opacity, color)` + +Effectively calls `this.setSplat(this.numSplats++, center, ...)`, useful on construction where you just want to iterate and create a collection of Gsplats. + +### `forEachSplat(callback: (index, center, scales, quaternion, opacity, color) => void)` + +Iterate over Gsplats index `0..=(this.numSplats-1)`, unpack each Gsplat and invoke the callback function with the Gsplat attributes. + +### `getTexture()` + +Returns a `THREE.DataArrayTexture` representing the PackedSplats content as a Uint32x4 data array texture (2048 x 2048 x depth in size) + +### `getEmpty()` + +Can be used where you need an uninitialized `THREE.DataArrayTexture` like a uniform you will update with the result of `this.getTexture()` later. + +## Generating Gsplats on the GPU + +To generate a large number of Gsplats we can use the `dyno` shader graph system, which allows to create a computation graph mapping `{ index: DynoVal<"int"> }` to `{ gsplat: DynoVal }` via Javascript code, then have that synthesize GLSL code, which is finally compiled and executed in parallel on the GPU. + +This building block is used by `ForgeRenderer` to traverse each visible `SplatMesh`/`SplatGenerator` and have it "generate" its Gsplats into the global `PackedSplats` array managed by a `SplatAccumulator`. At its core a `PackedSplats` has the ability to run `dyno` computation graphs to produce its contents using the following methods, which are typically managed by `ForgeRenderer`: + +### `generateMapping(splatCounts: number[]): { maxSplats, mapping[] }` + +Given an array of splatCounts (`.numSplats` for each `SplatGenerator`/`SplatMesh` in the scene), compute a "mapping layout" in the composite array of generated outputs. + +### `ensureGenerate(maxSplats)` + +Ensures our `PackedSplats.target` render target has enough space to generate `maxSplats` total Gsplats, and reallocate if not large enough. + +### `generate({ generator, base, count, ... })` + +Executes a `dyno` program specified by `generator` which is any `DynoBlock` that maps `{ index: "int" }` to `{ gsplat: Gsplat }`. This is called in `ForgeRenderer.updateInternal()` to re-generate Gsplats in the scene for `SplatGenerator` instances whose version is newer than what was generated for it last time. + +## Using dynamic PackedSplats inputs in `dyno` + +You can use a `PackedSplats` as a `dyno` block using the function `dyno.readPackedSplats(packedSplats.dyno, dynoIndex)` where `dynoIndex` is of type `DynoVal<"int">` If you need to be able to change the input `PackedSplats` dynamically, however, you should create a `DynoPackedSplats`, whose property `packedSplats` you can change to any `PackedSplats` and that will be used in the `dyno` shader program. diff --git a/docs/performance.md b/docs/performance.md new file mode 100644 index 0000000..ba2206c --- /dev/null +++ b/docs/performance.md @@ -0,0 +1,16 @@ +# Performance Tuning + +Rendering millions of Gsplats at 60+ fps can be a demanding task, especially for mobile-class GPUs. Each Gsplat is rendered as two triangles that span the footprint of a Gaussian up to `sqrt(8)` standard deviations (default value) from the center. Each Gsplat is rendered as a transparent object and must be blended back-to-front. + +As a quick rule-of-thumb, the following "Gsplat budgets" are recommended: + +- Quest 3: 1 million Gsplats or less, not too many Gsplats concentrated in a small area +- Android phone: 1-2 million Gsplats +- iPhone: 1-3 million Gsplats +- Computer: 1-5 million Gsplats (10-20+ million on some desktops) + +Each Gsplat incurs overhead in transforming it via SplatAccumulator for sorting and rendering, and at around 1 million Gsplats this becomes a bottleneck on some systems. Unintuitively, when a large number of Gsplats are concentrated in a small area (for example 500K Gsplats from a Trellis object at a small screen scale) they can bottleneck the GPU's rendering and blending ability. + +## maxStdDev + +Adjust `ForgeRenderer.maxStdDev` (either directly on `ForgeRenderer` or via constructor options) to a value less than the default `Math.sqrt(8)`. This limits the extent of the Gaussian fall-off, which by default is approx 2.8. For VR a good value is `Math.sqrt(5)`, which is perceptually very similar to the default. \ No newline at end of file diff --git a/docs/procedural-splats.md b/docs/procedural-splats.md new file mode 100644 index 0000000..549fe84 --- /dev/null +++ b/docs/procedural-splats.md @@ -0,0 +1,286 @@ +# Procedural Splats + +Forge makes it easy to create Gaussian splat collections procedurally, and includes some splat constructors that may be useful for tasks like creating a grid or text made of splats. The example "Procedural Splats" puts some of these to use in a scene. + +## Adding splats to a collection + +To create a `PackedSplats` with custom, procedurally-derived splats use the methods `pushSplat` or `setSplat`: +```javascript +const splats = new PackedSplats(); +const center = new THREE.Vector3(0, 0, 0); +const scales = new THREE.Vector3(0.1, 0.1, 0.1); +const quaternion = new THREE.Quaternion(); +const opacity = 1.0; +const color = new THREE.Color() +splats.pushSplat(center, scales, quaternion, opacity, color); +... +``` + +The array in `PackedSplats` will be resized automatically to fit any splats you add. Alternatively, you can use the `construct` initializer callback: +```javascript +const splats = new PackedSplats({ + construct: (splats) => { + ... + for (let i = 0; i < NUM_SPLATS; ++i) { + // Compute splat #i + ... + splats.pushSplat(center, scales, quaternion, opacity, color); + } + }, +}); +``` + +Once you've created your `PackedSplats`, render it to the scene via a `SplatMesh`: +```javascript +const mesh = new SplatMesh({ packedSplats: splats }); +scene.add(mesh); +``` + +Alternatively, you can create the `SplatMesh` and its splats in the initializer, which internally passes your constructor to its contained `PackedSplats`: +```javascript +const mesh = new SplatMesh({ + constructSplats: (splats) => { + for (let i = 0; i < NUM_SPLATS; ++i) { + // Compute splat #i + ... + splats.pushSplat(center, scales, quaternion, opacity, color); + } + }, +}); +scene.add(mesh); +``` + +## Grid + +```javascript +import { constructGrid } from "@worldlabsai/forge"; + +const grid = new SplatMesh({ + constructSplats: (splats) => constructGrid({ + splats, + extents: new THREE.Box3( + new THREE.Vector3(-10, -10, -10), + new THREE.Vector3(10, 10, 10), + ), + }), +}); +scene.add(grid); +``` + +### Required parameters + +| Parameter | Description | +|-----------|-------------| +| `splats` | PackedSplats object to add splats to | +| `extents` | min and max box extents of the grid | + +### Optional parameters + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `stepSize` | `1` | step size along each grid axis | +| `pointRadius` | `0.01` | spherical radius of each Gsplat | +| `pointShadowScale` | `2.0` | relative size of the "shadow copy" of each Gsplat placed behind it | +| `opacity` | `1.0` | Gsplat opacity | +| `color` | RGB-modulated grid | Gsplat color (THREE.Color) or function to set color for position: ((THREE.Color, THREE.Vector3) => void) | + + +## XYZ axis + +```javascript +import { constructAxes } from "@worldlabsai/forge"; + +const axes = new SplatMesh({ + constructSplats: (splats) => constructAxes({ splats }), +}); +axes.position.set(0, 0, -1); +scene.add(axes); +``` + +### Required parameters + +| Parameter | Description | +|-----------|-------------| +| `splats` | PackedSplats object to add splats to | + +### Optional parameters + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `scale` | `0.25` | scale (Gsplat scale along axis) | +| `axisRadius` | `0.0075` | radius of the axes (Gsplat scale orthogonal to axis) | +| `axisShadowScale` | `2.0` | relative size of the "shadow copy" of each Gsplat placed behind it | +| `origins` | `[new THREE.Vector3()]` | origins of the axes (default single axis at origin) | + + +## Gsplat sphere + +```javascript +import { constructSpherePoints } from "@worldlabsai/forge"; + +const sphere = new SplatMesh({ + constructSplats: (splats) => constructSpherePoints({ + splats, + maxDepth: 4, + }), +}); +scene.add(sphere); +``` + +### Required parameters + +| Parameter | Description | +|-----------|-------------| +| `splats` | PackedSplats object to add splats to | + +### Optional parameters + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `origin` | `new THREE.Vector3()` | center of the sphere (default: origin) | +| `radius` | `1.0` | radius of the sphere | +| `maxDepth` | `3` | maximum depth of recursion for subdividing the sphere. Warning: Gsplat count grows exponentially with depth | +| `filter` | `null` | filter function to apply to each point, for example to select points in a certain direction or other function ((THREE.Vector3) => boolean) | +| `pointRadius` | `0.02` | radius of each oriented Gsplat | +| `pointThickness` | `0.001` | flatness of each oriented Gsplat | +| `color` | `new THREE.Color(1, 1, 1)` | color of each Gsplat (THREE.Color) or function to set color for point: ((THREE.Color, THREE.Vector3) => void) | + + +## Rasterizing Text + +```typescript +const splats = textSplats({ + text: string; + font?: string; + fontSize?: number; + color?: THREE.Color; + rgb?: THREE.Color; + dotRadius?: number; + textAlign?: "left" | "center" | "right" | "start" | "end"; + lineHeight?: number; +}); +scene.add(splats); +``` + +### Required parameters + +| Parameter | Description | +|-----------|-------------| +| `text` | text string to display | + +### Optional parameters + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `font` | `"Arial"` | browser font to render text with | +| `fontSize` | `32` | font size in pixels/Gsplats | +| `color` | `new THREE.Color(1, 1, 1)` | SplatMesh.recolor tint assuming white Gsplats | +| `rgb` | `new THREE.Color(1, 1, 1)` | Individual Gsplat color | +| `dotRadius` | `0.8` | Gsplat radius (0.8 covers 1-unit spacing well) | +| `textAlign` | `"start"` | text alignment: "left", "center", "right", "start", "end" | +| `lineHeight` | `1.0` | line spacing multiplier, lines delimited by "\n" | + +## Turning images into Gsplats + +```typescript +const image = imageSplats({ + url: string; + dotRadius?: number; + subXY?: number; + forEachSplat?: ( + width: number, + height: number, + index: number, + center: THREE.Vector3, + scales: THREE.Vector3, + quaternion: THREE.Quaternion, + opacity: number, + color: THREE.Color, + ) => number | null; +}); +scene.add(image); +``` + +### Required parameters + +| Parameter | Description | +|-----------|-------------| +| `url` | URL of the image to convert to splats (example: `url: "./image.png"`) | + +### Optional parameters + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `dotRadius` | `0.8` | Radius of each Gsplat, default covers 1-unit spacing well | +| `subXY` | `1` | Subsampling factor for the image. Higher values reduce resolution, for example 2 will halve the width and height by averaging | +| `forEachSplat` | `undefined` | Optional callback function to modify each Gsplat before it's added. Return null to skip adding the Gsplat, or a number to set the opacity and add the Gsplat with parameter values in the objects center, rgba etc. were passed into the forEachSplat callback. Ending the callback in `return opacity;` will retain the original opacity. | + +### Example + +```javascript +// Load RGBA image from image.png, subsample it 2x +// horizontally and vertically, and create Gsplats for +// the resulting pixels that have at least 10% opacity. +const image = imageSplats({ + url: "./image.png", + subXY: 2, + forEachSplat: (width, height, index, center, scales, quaternion, opacity, color) => { + // Only keep Gsplats with opacity 10% or higher + return (opacity >= 0.1) ? opacity : null; + }, +}); +scene.add(image); +``` + +## Particle Effects + +Some of the building blocks are meant to serve as "code inspiration", showing how a particle effect animation can be achieved using a "stateless" `dyno` computation graph that uses only the Gsplat `index` input to produce pseudo-random numbers that drive various randomized particle effects. + +Note that Gsplat sorting takes a little bit of time and can "lag behind" the Gsplat updates each frame, so it's important that there is a reasonably stable correspondence between each frame's Gsplat output for the same `index`. + +In `staticBox`, the AABB is sliced up into a 3D grid of cells, and random X/Y/Z points within those cells are sampled each frame, retaining consistency in Gsplat position between successive frames. See `examples/gsplat-sweets-garden/main.js` for an example that creates a `staticBox`. + +### `generators.snowBox(...options)` + +Similarly, `snowBox` produces Gsplat trajectories that move in a deterministic fashion over time, with high similarity between adjacent frames. See `examples/atmospheric/main.js` for an example that creates a `snowBox`. + +A snowBox instance has a collection of properties that can be tuned to achieve different particle effects. DEFAULT_SNOW and DEFAULT_RAIN are example parameter sets that look a lot like snow and rain, and can be used as a starting point for further tweaking: `const mySnow = { ...DEFAULT_SNOW, density: 500 };` + +```typescript +const snowControls = generators.snowBox({ + box, + minY, + numSplats, + density, + anisoScale, + minScale, + maxScale, + fallDirection, + fallVelocity, + wanderScale, + wanderVariance, + color1, + color2, + opacity, + onFrame, +}); +scene.add(snowControls.snow); +``` + +| Parameter | Default Value | Description | +|-----------|---------------|-------------| +| `box` | `new THREE.Box3(new THREE.Vector3(-1, -1, -1), new THREE.Vector3(1, 1, 1))` | min and max box extents of the snowBox | +| `minY` | `Number.NEGATIVE_INFINITY` | minimum y-coordinate to clamp particle position, which can be used to fake hitting a ground plane and lingering there for a bit | +| `numSplats` | calculated from box and density | number of Gsplats to generate | +| `density` | `100` | density of Gsplats per unit volume | +| `anisoScale` | `new THREE.Vector3(1, 1, 1)` | The xyz anisotropic scale of the Gsplat, which can be used for example to elongate rain particles | +| `minScale` | `0.001` | Minimum Gsplat particle scale | +| `maxScale` | `0.005` | Maximum Gsplat particle scale | +| `fallDirection` | `new THREE.Vector3(0, -1, 0)` | The average direction of fall | +| `fallVelocity` | `0.02` | The average speed of the fall (multiplied with fallDirection) | +| `wanderScale` | `0.01` | The world scale of wandering overlay motion | +| `wanderVariance` | `2` | Controls how uniformly the particles wander in sync, more variance means more randomness in the motion | +| `color1` | `new THREE.Color(1, 1, 1)` | Color 1 of the two colors interpolated between | +| `color2` | `new THREE.Color(0.5, 0.5, 1)` | Color 2 of the two colors interpolated between | +| `opacity` | `1` | The base opacity of the Gsplats | +| `onFrame` | `undefined` | Optional callback function to call each frame | diff --git a/docs/splat-editing.md b/docs/splat-editing.md new file mode 100644 index 0000000..2fcefe3 --- /dev/null +++ b/docs/splat-editing.md @@ -0,0 +1,88 @@ +# Gsplat Editing + +Forge provides the ability to apply "edits" to Gsplats as part of the standard `SplatMesh` pipeline. These edits take the form of a sequence of operations, applied one at a time to the set of Gsplats in its `packedSplats`. Each operation evaluates a 7-dimensional field (RGBA and XYZ displacement) at each point in space that derives from N=1 or more Signed Distance Field shapes (such as spheres, boxes, planes, etc.), blended together and across inside-outisde boundaries. + +The result is a an RGBA,XYZ value for each point in space, which combined with SplatEditRgbaBlendMode.MULTIPLY/SET_RGB/ADD_RGBA can be used to create special effects, for example simulating simple lighting or applying deformations in space, whose parameters can be updated each frame to create animated effects. + +## RGBA blend modes + +When creating a `SplatEdit` you can specify a `rgbaBlendMode?: SplatEditRgbaBlendMode` value from the enum to choose between 3 blend modes: + +| Blend Mode | Description | +|-------------------------------------------|----------------------------------------------------------------------------------------------------------------------| +| `SplatEditRgbaBlendMode.MULTIPLY` | The RGBA of the splat is multiplied component-wise by the SDF’s RGBA value at that point in space. | +| `SplatEditRgbaBlendMode.SET_RGB` | Ignore the Alpha value in the SDF, but set the splat’s RGB to equal the SDF’s RGB value at that point. | +| `SplatEditRgbaBlendMode.ADD_RGBA` | Add the SDF’s RGBA value at that point to the RGBA value of the Gsplat. This can produce hyper-saturated results, but is useful to easily “light up” areas. | + +## SDF Shapes + +The following SDF shapes are available in the `SplatEditSdfType` enum: + +| SDF Type | Description | Parameters | +|----------|-------------|------------| +| `ALL` | Affects all points in space | None | +| `PLANE` | Infinite plane | position, rotation | +| `SPHERE` | Sphere | position, radius | +| `BOX` | Box (with optional corner rounding) | position, rotation, sizes, radius | +| `ELLIPSOID` | Ellipsoid | position, rotation, sizes | +| `CYLINDER` | Cylinder | position, rotation, size_y | +| `CAPSULE` | Capsule | position, rotation, size_y | +| `INFINITE_CONE` | Infinite cone | position, rotation, radius=angle | + +## Creating a Gsplat edit operation + +A `SplatEdit` operation can be assigned to a particular `SplatMesh` through its `.edits[]` property or by adding the `SplatEdit` as a child of the `SplatMesh` in the scene hierarchy. If the `SplatEdit` has no `SplatMesh` ancestor, its edits will apply globally to all `SplatMesh`es whose `editable` property is set to default true. + +```typescript +const edit = new SplatEdit({ + name?: string; + rgbaBlendMode?: SplatEditRgbaBlendMode; + sdfSmooth?: number; + softEdge?: number; + invert?: boolean; + sdfs?: SplatEditSdf[]; +}); +scene.add(edit); +``` + +### Optional parameters + +| Parameter | Default | Description | +|-----------------|------------------------------------------|--------------------------------------------------------------------------------------------------------------| +| `name` | `undefined` (auto‐generated to `Edit `) | Name of this edit operation. If you omit it, a default `"Edit 1"`, `"Edit 2"`, … is assigned. | +| `rgbaBlendMode` | `SplatEditRgbaBlendMode.MULTIPLY` | How the SDF’s RGBA modifies each splat’s RGBA: multiply, overwrite RGB, or add RGBA. | +| `sdfSmooth` | `0.0` | Smoothing (in world‐space units) for blending between multiple SDF shapes at their boundaries. | +| `softEdge` | `0.0` | Soft‐edge falloff radius (in world‐space units) around each SDF shape’s surface. | +| `invert` | `false` | Invert the SDF evaluation (inside/outside swap). | +| `sdfs` | `null` | Explicit array of `SplatEditSdf` objects to include. If `null`, any child `SplatEditSdf` instances are used. | + +## Adding an SDF RGBA-XYZ shape to the edit operation + +```typescript +const shape1 = new SplatEditSdf({ + type?: SplatEditSdfType; + invert?: boolean; + opacity?: number; + color?: THREE.Color; + displace?: THREE.Vector3; + radius?: number; +}); +edit.add(shape1); +``` + +### Optional parameters + +| Parameter | Default | Description | +|-------------|------------------------------------|------------------------------------------------------------------------------------------------------------------------------------| +| `type` | `SplatEditSdfType.SPHERE` | The SDF shape type: `ALL`, `PLANE`, `SPHERE`, `BOX`, `ELLIPSOID`, `CYLINDER`, `CAPSULE`, or `INFINITE_CONE`. | +| `invert` | `false` | Invert the SDF evaluation, swapping inside and outside regions. | +| `opacity` | `1.0` | Opacity / "alpha" value used differently by blending modes | +| `color` | `new THREE.Color(1.0, 1.0, 1.0)` | RGB color applied within the shape. | +| `displace` | `new THREE.Vector3(0.0, 0.0, 0.0)` | XYZ displacement applied to splat positions inside the shape. | +| `radius` | `0.0` | Shape-specific size parameter: sphere radius, box corner rounding, cylinder/capsule radius, or for the infinite cone the angle factor (opening half-angle = π/4 × `radius`). | + +## Adding multiple SDF RGBA-XYZ shapes to the edit operation + +RGBA-XYZ values are computed by blending together values from all SDF shapes using the exponential "softmax" function, which is commutative (so blending order within a `SplatEdit` operation doesn't matter). The parameter `SplatEdit.sdfSmooth` controls the blending scale *between* SDF shapes, while `SplatEdit.softEdge` controls the scale of soft inside-outside shape edit blending. Their default values start at `0.0` and should be increased to soften the effect. + +Note that XYZ displacement values are blended in the same way as RGBA, with a resulting displacement field that can be quite complex but "softly" blending between shapes. These RGBA-XYZ edits, along with time-based and overlapping fields can create many interesting animations and special effects, such as rippling leaves in the wind, an angry fire, or a looping water effects. Simply update the `SplatEdit` and `SplatEditSdf` objects and the operations will be applied immediately to the Gsplats in the scene. diff --git a/docs/splat-mesh.md b/docs/splat-mesh.md new file mode 100644 index 0000000..531c06f --- /dev/null +++ b/docs/splat-mesh.md @@ -0,0 +1,123 @@ +# SplatMesh + +A `SplatMesh` is a high-level interface for displaying and manipulating a "Splat mesh", a collection of Gaussian splats that serves as an "object" of sorts. It is analagous to a traditional polygon `THREE.Mesh`, which consists of geometry (points and triangles) and materials (color and lighting). Similarly, a `SplatMesh` contains geometry (Gsplat centers, quaternion, and xyz scales) and materials (RGB color, opacity, spherical harmonics for directional lighting), and can be added anywhere in the scene hierarchy. + +The usual Three.js properties `position`, `quaternion`, `rotation` behave as you would expect, however `scale` only allows uniform scaling and averages the x/y/z scales. Additional properties `recolor` and `opacity` are multiplied in with the final Gsplat color and opacity. + +`SplatMesh` is a subclass of the more fundamental `SplatGenerator`, which itself is a subclass of `THREE.Object3D`. Any methods and properties on `Object3D` are also available in `SplatMesh`. `SplatGenerator` gives you more control over Gsplat generation and modification, but `SplatMesh` has an easier and higher-level API. + +## Creating a `SplatMesh` + +```typescript +const splats = new SplatMesh({ + // Fetch PLY/WLG/SPZ/SPLAT/KSPLAT file from URL + url?: string; + // Decode raw PLY/WLG/SPZ/SPLAT/KSPLAT file bytes + fileBytes?: Uint8Array | ArrayBuffer; + // Override file type + fileType?: SplatFileType; + // Use PackedSplats object as source + packedSplats?: PackedSplats; + // Reserve space for at least this many splats for construction + maxSplats?: number; + // Constructor callback to create splats + constructSplats?: (splats: PackedSplats) => Promise | void; + // Callback for when mesh initialization is complete + onLoad?: (mesh: SplatMesh) => Promise | void; + // Toggle controls whether SplatEdits have an effect, default true + editable?: boolean; + // Frame callback to update mesh. Call mesh.updateVersion() if we need to re-generate + onFrame?: ({ + mesh, + time, + deltaTime, + }: { mesh: SplatMesh; time: number; deltaTime: number }) => void; + // Object-space and world-space Gsplat modifiers to apply + objectModifier?: GsplatModifier; + worldModifier?: GsplatModifier; +}); +// Add to scene to show Gsplats (requires ForgeRenderer as well) +scene.add(splats); +``` + +### Optional parameters + +You can create a `new SplatMesh()` with no options, which will create a new default instance with `.numSplats=0`. Alternatively, you can provide an input `url` to fetch and decode, `fileBytes`, `packedSplats` (an existing collection of tightly "packed" Gsplats). Forge supports most Gsplat file types, including .ply, .splat, .ksplat, .spz. To load filetypes .splat and .ksplat (which can't be reliably auto-detected), use the optional `fileType` argument. + +Constructor argument callbacks can be used like `constructSplats` to create a collection of Gsplat programmatically at initialization, `onLoad` when loading and initialization completes, `onFrame` to update state on every frame. Gsplat effects can be injected into the standard Gsplat processinng pipeline that operate in object-space and world-space via `objectModifier` and `worldModifier` respectively. + +| **Parameter** | Description | +| ----------------- | ----------- | +| **url** | URL to fetch a Gaussian splat file from(supports .ply, .splat, .ksplat, .spz formats). (default: `undefined`) +| **fileBytes** | Raw bytes of a Gaussian splat file to decode directly instead of fetching from URL. (default: `undefined`) +| **fileType** | Override the file type detection for formats that can't be reliably auto-detected (.splat, .ksplat). (default: `undefined` auto-detects other formats from file contents) +| **packedSplats** | Use an existing PackedSplats object as the source instead of loading from a file. Can be used to share a collection of Gsplats among multiple `SplatMesh`es (default: `undefined` creates a new empty `PackedSplats` or decoded from a data source above) +| **maxSplats** | Reserve space for at least this many splats when constructing the mesh initially. (default: determined by file) +| **constructSplats** | Callback function to programmatically create splats at initialization in provided `PackedSplats`. (default: `undefined`) +| **onLoad** | Callback function that is called when mesh initialization is complete. (default: `undefined`) +| **editable** | Controls whether SplatEdits have any effect on this mesh. (default: `true`) +| **onFrame** | Callback function that is called every frame to update the mesh. Call `mesh.updateVersion()` if splats need to be regenerated due to some change. Calling `updateVersion()` is not necessary for object transformations, recoloring, or opacity adjustments as these are auto-detected. (default: `undefined`) +| **objectModifier** | Gsplat modifier to apply in object-space before any transformations. A `GsplatModifier` is a `dyno` shader-graph block that transforms an input `gsplat: DynoVal` to an output `gsplat: DynoVal` with `gsplat.center` coordinate in object-space. (default: `undefined`) +| **worldModifier** | Gsplat modifier to apply in world-space after transformations. (default: `undefined`) + +## Instance properties + +The constructor argument options `packedSplats`, `editable`, `onFrame`, `objectModifier`, and `worldModifier` can be modified directly on the `SplatMesh`. + +If you modify `packedSplats` you should set `splatMesh.packedSplats.needsUpdate = true` to signal to Three.js that it should re-upload the data to the underlying texture. Use this sparingly with objects with smaller Gsplat counts as it requires a CPU-GPU data transfer for each frame. Thousands to tens of thousands of Gsplats ir fine. (See `hands.ts` for an example of rendering "Gsplat hands" in WebXR using this technique.) + +If you modify `objectModifier` or `worldModifier` you should call `splatMesh.updateGenerator()` to update the pipeline and have it compile to run efficiently on the GPU. + +Additional properties you can modify on a `SplatMesh` instance: + +| **Property** | Description | +| ----------------- | ----------- | +| **initialized** | A `Promise` you can await to ensure fetching, parsing, and initialization has completed +| **isInitialized** | A `boolean` indicating whether initialization is complete +| **recolor** | A `THREE.Color` that can be used to tint all splats in the mesh. (default: `new THREE.Color(1, 1, 1)`) +| **opacity** | Global opacity multiplier for all splats in the mesh. (default: `1`) +| **context** | A `SplatMeshContext` consisting of useful scene and object `dyno` uniforms that can be used to in the Gsplat processing pipeline, for example via `objectModifier` and `worldModifier`. (created on construction) +| **enableViewToObject** | Set to `true` to have the `viewToObject` property in `context` be updated each frame. If the mesh has `extra.sh1` (first order spherical harmonics directional lighting) this property will always be updated. (default: `false` ) +| **enableViewToWorld** | Set to `true` to have `context.viewToWorld` updated each frame. (default: `false`) +| **enableWorldToView** | Set to `true` to have `context.worldToView` updated each frame. (default: `false`) +| **skinning** | Optional `SplatSkinning` instance for animating splats with dual-quaternion skeletal animation. (default: `null`) +| **edits** | Optional list of `SplatEdit`s to apply to the mesh. If `null`, any `SplatEdit` children in the scene graph will be added automatically. (default: `null`) +| **splatRgba** | Optional `RgbaArray` to overwrite splat RGBA values with custom values. Useful for "baking" RGB and opacity edits into the `SplatMesh`. (default: `null`) +| **maxSh** | Maximum Spherical Harmonics level to use. Call `updateGenerator()` after changing. (default: `3`) + +## `dispose()` + +Call this when you are finished with the `SplatMesh` and want to free any buffers it holds (via `packedSplats`). + +## `pushSplat(center, scales, quaternion, opacity, color)` + +Creates a new Gsplat with the provided parameters (all values in "float" space, i.e. 0-1 for opacity and color) and adds it to the end of the `packedSplats`, increasing `numSplats` by 1. If necessary, reallocates the buffer with an exponential doubling strategy to fit the new data, so it's fairly efficient to just `pushSplat(...)` each Gsplat you want to create in a loop. + +## `forEachSplat(callback: (index, center, scales, quaternion, opacity, color) => void)` + +This method iterates over all Gsplats in this instance's `packedSplats`, invoking the provided callback with `index: number` in `0..=(this.numSplats-1)` and `center: THREE.Vector3`, `scales: THREE.Vector3`, `quaternion: THREE.Quaternion`, `opacity: number` (0..1), and `color: THREE.Color` (rgb values in 0..1). Note that the objects passed in as `center` etc. are the same for every callback invocation: these objects are reused for efficiency. *Changing these values has no effect* as they are decoded/unpacked copies of the underlying data. To update the `packedSplats`, call `.packedSplats.setSplat(index, center, scales, quaternion, opacity, color)`. + +## `updateGenerator()` + +Call this whenever something changes in the Gsplat processing pipeline, for example changing `maxSh` or updating `objectModifier` or `worldModifier`. Compiled generators are cached for efficiency and re-use when the same pipeline structure emerges after successive changes. + +## `update(...)` + +This is called automatically by `ForgeRenderer` and you should not have to call it. It updates parameters for the generated pipeline and calls `updateGenerator()` if the pipeline needs to change. + +## `raycast(raycaster, intersects: { distance, point, object}[])` + +This method conforms to the standard `THREE.Raycaster` API, performing object-ray intersections using this method to populate the provided `intersects[]` array with each intersection point. + +Usage example: +```javascript +const raycaster = new THREE.Raycaster(); +canvas.addEventListener("click", (event) => { + raycaster.setFromCamera(new THREE.Vector2( + (event.clientX / canvas.width) * 2 - 1, + -(event.clientY / canvas.height) * 2 + 1, + ), camera); + const intersects = raycaster.intersectObjects(scene.children); + const splatIndex = intersects.findIndex((i) => i.object instanceof SplatMesh); +}); +``` diff --git a/docs/stylesheets/forge.css b/docs/stylesheets/forge.css new file mode 100644 index 0000000..3951f79 --- /dev/null +++ b/docs/stylesheets/forge.css @@ -0,0 +1,120 @@ +@font-face { + font-family: "Inter"; + src: url(https://fonts.googleapis.com/css2?family=Cinzel:wght@400..900&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Limelight&display=swap); +} + +:root { + --color-dark: white; + --color-light: black; + --md-primary-fg-color: #d43e4c; + --md-accent-fg-color: #cb6065; + --md-text-font: "Inter"; +} + +.md-typeset .md-button.md-button--primary { + background-color: --md-primary-fg-color; + border-color: --md-primary-fg-color; + color: white; + padding: 0.75em 2em; + font-size: 1rem; + border-radius: .75rem; +} + +.md-button.md-button--primary:hover { + opacity: 1.0; + text-decoration: none; +} + +.md-header__button.md-logo { + color: white; +} + +.md-search__form { + border-radius: 5px; +} + +.icon-github { + width: 30px; + height: 30px; +} + +.icon-github path { + fill: white; +} + +.md-logo { + height: 40px; +} + +.md-logo:hover { + text-decoration: none; + opacity: 1.0; +} + +.md-header { + padding: 5px; + padding-top: 15px; + padding-bottom: 15px; +} + +.md-header__inner { + display: flex; + justify-content: space-between; + align-items: center; +} + +.md-header__links { + display: flex; + gap: 1rem; + align-items: center; +} + +.md-nav { + line-height: 2; +} + +.md-nav__link { + margin-top: 0; +} + +.md-nav__link:hover, +.md-nav__link:focus { + text-decoration: underline; +} + +.md-header__option { + display: flex; + align-items: center; + gap: 1rem; +} + +.md-search { + display: flex; + align-items: center; +} + +.md-header__topic { + display: flex; + gap: 1.25rem; + align-items: center; +} + +.md-custom-header, +.md-header__title { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 18px; +} + +.md-custom-header-right { + display: flex; + align-items: center; + gap: 1rem; + margin-left: 20px; + margin-right: 20px; +} + +.md-custom-header-right .md-nav__link:hover { + color: white; +} diff --git a/docs/system-design.md b/docs/system-design.md new file mode 100644 index 0000000..c0090ca --- /dev/null +++ b/docs/system-design.md @@ -0,0 +1,29 @@ +# System Design + +One of the biggest challenges in real-time Gaussian splat (Gsplat) rendering is sorting the splats so that they can be drawn and blended in back-to-front order, known as Painter's algorithm. + +## Rendering data flow cycle + +`ForgeRenderer` is a key component in Forge that manages this process. It traverses the visible Three.js scene graph and compiles a complete list of all Gsplats across the scene, generated by instances of `SplatMesh` in the scene hierarchy. + +Each `ForgeRenderer` has a default `ForgeViewpoint`, which reads back a list of all Gsplat distances from the viewpoint, the computes the Gsplat draw order using an efficient bucket sort algorithm, run in a background worker thread via `SplatWorker`. You can spawn additional `ForgeViewpoint`s to create multiple simultaneous render viewpoints. + +Finally, on the next Three.js render() call, `ForgeRenderer` invokes a single instanced geometry draw call to draw all the scene's Gsplats in the correct back-to-front order, merging with other opaque Three.js geometry using the Z buffer. + +```typescript +const forge = new ForgeRenderer({ renderer: webGlRenderer }); +// Add it to the scene and it will manage rendering of SplatMeshes +scene.add(forge); +``` + +This design allows Gsplats from distinct scenes / object splat files to coexist in space and sort correctly w.r.t. each other's Gsplats. Gsplats from independent `SplatMesh`es are aggregated using a `SplatAccumulator`, which produces a `PackedSplats`, a collection Gsplats stored in a cache-efficient 16-byte/Gsplat format. + +## "Programmable Gsplats" + +Forge also uses this opportunity to run a user-programmable data pipeline on each Gsplat on the GPU. The standard pipeline provide high-level controls, such as rigid transforms, adjusting RGB / opacity, and spherical harmonics, but also special effects (via `SplatEdit`) and a skeletal animation system (`SplatSkinning`). The standard pipeline also allows injecting arbitrary code to modify each Gsplat via `dyno` shader graph system. + +`SplatMesh` derives from a more general base class `SplatGenerator`, which itself derives from `THREE.Object3D`. As such, it can be placed anywhere in the scene hierarchy and obeys expected local and global coordinate transforms. A `SplatGenerator` is the most general form of a "Gsplat object", whose Gsplats are produced programmatically via a `dyno` shader graph that maps `{ index: "int" }` to `{ gsplat: "Gsplat" }`. A `SplatMesh` is a higher-level object that implements such a mapping, reading source Gsplats from a template (loaded via a `url` constructor parameter or otherwise) at the given `index`, then applying functions such as transforming to world space. + +In contrast, implementing a `SplatGenerator` gives you full control to write any function that programmatically computes a Gsplat's attributes (center, scales, quaternion, rgba). These could be stateless (relying only on `index`, random-number generators, etc), or could rely on a complex combination of textures and global parameters for real-time procedural generation, and can vary with time to produce real-time animations. + +The `dyno` shader graph system allows you to create these programmatic pipelines with Javascript code, which is synthesized into GLSL code and compiled and run on the GPU. This `dyno` system powers other components of Forge as well, such as `Readback` (which can perform any computation and read back the resulting value), used to compute the sort distance metric for pairs of Gsplats and read them back for CPU sorting. \ No newline at end of file diff --git a/examples/animation-skinning/index.html b/examples/animation-skinning/index.html new file mode 100644 index 0000000..5659851 --- /dev/null +++ b/examples/animation-skinning/index.html @@ -0,0 +1,105 @@ + + + + Forge • Animation • Skinning + + + + + + + diff --git a/examples/assets.json b/examples/assets.json new file mode 100644 index 0000000..aa81661 --- /dev/null +++ b/examples/assets.json @@ -0,0 +1,90 @@ +{ + "robot-head.spz": { + "url": "https://forge-gfx.github.io/assets/splats/robot-head.spz", + "directory": "splats" + }, + "forge.spz": { + "url": "https://forge-gfx.github.io/assets/splats/forge.spz", + "directory": "splats" + }, + "butterfly-wings-closed.spz": { + "url": "https://forge-gfx.github.io/assets/splats/butterfly-wings-closed.spz", + "directory": "splats" + }, + "butterfly.spz": { + "url": "https://forge-gfx.github.io/assets/splats/butterfly.spz", + "directory": "splats" + }, + "fireplace.spz": { + "url": "https://forge-gfx.github.io/assets/splats/fireplace.spz", + "directory": "splats" + }, + "branzino-amarin.spz": { + "url": "https://forge-gfx.github.io/assets/splats/food/branzino-amarin.spz", + "directory": "splats/food" + }, + "burger-from-amboy.spz": { + "url": "https://forge-gfx.github.io/assets/splats/food/burger-from-amboy.spz", + "directory": "splats/food" + }, + "clams-and-caviar-by-ikoyi.spz": { + "url": "https://forge-gfx.github.io/assets/splats/food/clams-and-caviar-by-ikoyi.spz", + "directory": "splats/food" + }, + "coral-caviar.spz": { + "url": "https://forge-gfx.github.io/assets/splats/food/coral-caviar.spz", + "directory": "splats/food" + }, + "double-double-from-InNOut.spz": { + "url": "https://forge-gfx.github.io/assets/splats/food/double-Double-from-InNOut.spz", + "directory": "splats/food" + }, + "gyro.spz": { + "url": "https://forge-gfx.github.io/assets/splats/food/gyro.spz", + "directory": "splats/food" + }, + "iberico-sandwich-by-reserve.spz": { + "url": "https://forge-gfx.github.io/assets/splats/food/iberico-sandwich-by-reserve.spz", + "directory": "splats/food" + }, + "primerib-tamos.spz": { + "url": "https://forge-gfx.github.io/assets/splats/food/primerib-tamos.spz", + "directory": "splats/food" + }, + "steaksandwich-mels.spz": { + "url": "https://forge-gfx.github.io/assets/splats/food/steaksandwich-mels.spz", + "directory": "splats/food" + }, + "pad-thai.spz": { + "url": "https://forge-gfx.github.io/assets/splats/food/pad-thai.spz", + "directory": "splats/food" + }, + "tomahawk-niku.spz": { + "url": "https://forge-gfx.github.io/assets/splats/food/tomahawk-niku.spz", + "directory": "splats/food" + }, + "rubberduck.glb": { + "url": "https://forge-gfx.github.io/assets/models/rubberduck.glb", + "directory": "models" + }, + "table.glb": { + "url": "https://forge-gfx.github.io/assets/models/table.glb", + "directory": "models" + }, + "butterfly.png": { + "url": "https://forge-gfx.github.io/assets/images/butterfly.png", + "directory": "images" + }, + "furry.spz": { + "url": "https://forge-gfx.github.io/assets/splats/furry.spz", + "directory": "splats" + }, + "pedestal.spz": { + "url": "https://forge-gfx.github.io/assets/splats/pedestal.spz", + "directory": "splats" + }, + "cat.spz": { + "url": "https://forge-gfx.github.io/assets/splats/cat.spz", + "directory": "splats" + } +} diff --git a/examples/envmap/index.html b/examples/envmap/index.html new file mode 100644 index 0000000..75a8e7d --- /dev/null +++ b/examples/envmap/index.html @@ -0,0 +1,120 @@ + + + + + Forge • Environment Mapping + + + + + + + + + + \ No newline at end of file diff --git a/examples/hello-world/carousel.html b/examples/hello-world/carousel.html new file mode 100644 index 0000000..5895f47 --- /dev/null +++ b/examples/hello-world/carousel.html @@ -0,0 +1,121 @@ + + + + + Forge • Carousel + + + + + + + + + diff --git a/examples/hello-world/index.html b/examples/hello-world/index.html new file mode 100644 index 0000000..c811ef0 --- /dev/null +++ b/examples/hello-world/index.html @@ -0,0 +1,46 @@ + + + + + Forge • Hello World + + + + + + + + + diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 0000000..96265f8 --- /dev/null +++ b/examples/index.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/examples/interactivity/food.js b/examples/interactivity/food.js new file mode 100644 index 0000000..31c91b5 --- /dev/null +++ b/examples/interactivity/food.js @@ -0,0 +1,75 @@ +// Definition of all the food assets and some attributes for each +export const FOOD_ASSETS = [ + { + name: "Branzino Amarin", + file: "branzino-amarin.spz", + scale: 0.3, + shadowSize: 1.0, + }, + { + name: "Iberico Sandwich", + file: "iberico-sandwich-by-reserve.spz", + scale: 0.6, + shadowSize: 0, + offsetY: -0.05, + }, + { + name: "Coral Caviar", + file: "coral-caviar.spz", + scale: 0.4, + shadowSize: 0.7, + }, + { + name: "Pad Thai", + file: "pad-thai.spz", + scale: 0.2, + shadowSize: 1.0, + }, + { + name: "Prime Rib", + file: "primerib-tamos.spz", + scale: 0.3, + shadowSize: 1.1, + }, + { + name: "Double-Double", + file: "double-double-from-InNOut.spz", + scale: 0.5, + shadowSize: 0.6, + offsetY: 0.03, + }, + { + name: "Gyro Kebab", + file: "gyro.spz", + scale: 0.13, + shadowSize: 0, + offsetY: -0.13, + }, + { + name: "Mels Steak Sandwich", + file: "steaksandwich-mels.spz", + scale: 0.3, + shadowSize: 0, + offsetY: 0.08, + }, + { + name: "Clams and Caviar", + file: "clams-and-caviar-by-ikoyi.spz", + scale: 0.4, + shadowSize: 0.72, + }, + { + name: "Tomahawk Niku", + file: "tomahawk-niku.spz", + scale: 0.3, + shadowSize: 1.0, + }, + { + name: "Dh Burger", + file: "burger-from-amboy.spz", + scale: 0.4, + shadowSize: 0.6, + offsetY: 0.04, + }, +]; +export const FOOD_URL = "/examples/assets/splats/food/"; diff --git a/examples/interactivity/index.html b/examples/interactivity/index.html new file mode 100644 index 0000000..41aa8cc --- /dev/null +++ b/examples/interactivity/index.html @@ -0,0 +1,215 @@ + + + + + Forge • Multiple Splats + + + + + loading + + + + + + diff --git a/examples/interactivity/loading.gif b/examples/interactivity/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..016490dfd359db25a3bc94164eba469d147583fb GIT binary patch literal 23263 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 QB!+=5(HB|2XxQWb7cIdj761SM literal 0 HcmV?d00001 diff --git a/examples/interactivity/style.css b/examples/interactivity/style.css new file mode 100644 index 0000000..2e7c349 --- /dev/null +++ b/examples/interactivity/style.css @@ -0,0 +1,91 @@ +@import url("https://fonts.googleapis.com/css2?family=Mea+Culpa&display=swap"); + +body { + margin: 0; +} + +h1 { + font-family: "Mea Culpa", cursive; + font-weight: 500; + font-size: 5rem; +} + +h2 { + font-family: sans-serif; + font-weight: normal; + font-size: 0.8rem; +} + +h3 { + font-family: "Mea Culpa", cursive; + margin: 0; +} + +#menu { + position: absolute; + left: -12rem; + display: inline-block; + background-color: rgba(223, 203, 171, 0.8); + padding: 2rem 2rem; + margin-top: 4rem; + text-align: center; + font-size: 1.2rem; + line-height: 1.7rem; + left: 1rem; + border-radius: 0.5rem; + box-shadow: 0 0 15px rgba(0, 0, 0, 0.8); +} + +#menu .border { + border: 1.0px solid rgb(92, 92, 92); + padding: 1rem 3rem; +} + +#menu > .border { + border: 1.5px solid rgb(49, 49, 49); + padding: 5px 6px; +} + +#menu a { + font-style: italic; + display: block; + text-decoration: none; + color: rgb(30, 13, 140); +} + +#menu a:hover { + /* border-bottom: 1px solid black; */ + text-decoration: underline; +} + +#menu a.active { + text-decoration: underline; + font-weight: 500; +} + +#menu a.active::before { + content: "🙜 "; + font-weight: 100; +} + +#menu a.active::after { + content: " 🙟"; + font-weight: 100; +} + +#menu_list { + margin-bottom: 2rem; +} + +#menu h2 a { + font-weight: normal; + color: black; + display: inline; +} + +#loading { + display: none; + position: absolute; + top: 40vh; + left: 45vw; +} diff --git a/examples/js/get-asset-url.js b/examples/js/get-asset-url.js new file mode 100644 index 0000000..e296da4 --- /dev/null +++ b/examples/js/get-asset-url.js @@ -0,0 +1,15 @@ +export async function getAssetFileURL(assetFile) { + try { + const response = await fetch("/examples/assets.json"); + const assetsDirectory = "/examples/assets/"; + const assetsInfo = await response.json(); + let url = assetsInfo[assetFile].url; + if (window.forgeLocalAssets) { + url = `${assetsDirectory}${assetsInfo[assetFile].directory}/${assetFile}`; + } + return url; + } catch (error) { + console.error("Failed to load asset file URL:", error); + return null; + } +} diff --git a/examples/multiple-splats/index.html b/examples/multiple-splats/index.html new file mode 100644 index 0000000..7791662 --- /dev/null +++ b/examples/multiple-splats/index.html @@ -0,0 +1,100 @@ + + + + + Forge • Multiple Splats + + + + + + + + + + diff --git a/examples/multiple-viewpoints/index.html b/examples/multiple-viewpoints/index.html new file mode 100644 index 0000000..e247604 --- /dev/null +++ b/examples/multiple-viewpoints/index.html @@ -0,0 +1,94 @@ + + + + Forge • Multiple Viewpoints + + + + + + + diff --git a/examples/procedural-splats/index.html b/examples/procedural-splats/index.html new file mode 100644 index 0000000..e7c65dd --- /dev/null +++ b/examples/procedural-splats/index.html @@ -0,0 +1,141 @@ + + + + + Forge • Procedural Splats + + + + + + + + + \ No newline at end of file diff --git a/examples/raycasting/index.html b/examples/raycasting/index.html new file mode 100644 index 0000000..51cc054 --- /dev/null +++ b/examples/raycasting/index.html @@ -0,0 +1,106 @@ + + + + + Forge • Raycasting + + + + +
Click to select
+ + + + + diff --git a/examples/vfx-dynamic-lighting/index.html b/examples/vfx-dynamic-lighting/index.html new file mode 100644 index 0000000..cb64f9a --- /dev/null +++ b/examples/vfx-dynamic-lighting/index.html @@ -0,0 +1,222 @@ + + + + + Forge • VFX Dynamic Lighting + + + + +
+ + +
+ + + + + + + diff --git a/examples/vfx-particle-simulation/index.html b/examples/vfx-particle-simulation/index.html new file mode 100644 index 0000000..38cbbd3 --- /dev/null +++ b/examples/vfx-particle-simulation/index.html @@ -0,0 +1,46 @@ + + + + + Forge • Hello World + + + + + + + + + diff --git a/examples/viewer/index.html b/examples/viewer/index.html new file mode 100644 index 0000000..38cbbd3 --- /dev/null +++ b/examples/viewer/index.html @@ -0,0 +1,46 @@ + + + + + Forge • Hello World + + + + + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..e205e39 --- /dev/null +++ b/index.html @@ -0,0 +1,148 @@ + + + + Forge Examples + + + + + + +
+

Forge Examples

+ +
+ +
+ +

Examples

+ + + + diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 0000000..a6b9fee --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,6 @@ +pre-commit: + jobs: + - name: lint + run: npm run lint + - name: test + run: npm run test \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..651d069 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,32 @@ +site_name: Forge +site_url: https://www.forge.dev/ +theme: + name: material + logo: assets/images/logo.png + custom_dir: docs/overrides + features: + - content.code.copy +extra_css: + - stylesheets/forge.css +nav: + - Home: index.md + - Getting Started: getting-started.md + - Overview: overview.md + - System Design: system-design.md + - ForgeRenderer: forge-renderer.md + - ForgeViewpoint: forge-viewpoint.md + - SplatMesh: splat-mesh.md + - PackedSplats: packed-splats.md + - Loading Gsplats: loading-splats.md + - Procedural Splats: procedural-splats.md + - Splat RGBA-XYZ SDF editing: splat-editing.md + - Controls: controls.md + - Performance tuning: performance.md +markdown_extensions: + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.superfences diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..f4863a9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1958 @@ +{ + "name": "@forge-gfx/forge", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@forge-gfx/forge", + "version": "0.0.1", + "dependencies": { + "fflate": "^0.8.2", + "forge-internal-rs": "file:rust/forge-internal-rs/pkg" + }, + "devDependencies": { + "@biomejs/biome": "1.9.4", + "@types/three": "0.172.0", + "lefthook": "1.11.12", + "lil-gui": "^0.20.0", + "onchange": "7.1.0", + "stats.js": "^0.17.0", + "three": "^0.172.0", + "ts-node": "10.9.2", + "typescript": "^5.7.3", + "vite": "^6.0.11", + "vite-plugin-glsl": "^1.3.1" + } + }, + "node_modules/@biomejs/biome": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", + "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", + "dev": true, + "hasInstallScript": true, + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@blakeembrey/deque": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@blakeembrey/deque/-/deque-1.0.5.tgz", + "integrity": "sha512-6xnwtvp9DY1EINIKdTfvfeAtCYw4OqBZJhtiqkT3ivjnEfa25VQ3TsKvaFfKm8MyGIEfE95qLe+bNEt3nB0Ylg==", + "dev": true + }, + "node_modules/@blakeembrey/template": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@blakeembrey/template/-/template-1.2.0.tgz", + "integrity": "sha512-w/63nURdkRPpg3AXbNr7lPv6HgOuVDyefTumiXsbXxtIwcuk5EXayWR5OpSwDjsQPgaYsfUSedMduaNOjAYY8A==", + "dev": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz", + "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz", + "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz", + "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz", + "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz", + "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz", + "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz", + "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz", + "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz", + "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz", + "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz", + "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz", + "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz", + "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz", + "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz", + "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz", + "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz", + "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz", + "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz", + "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz", + "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@tweenjs/tween.js": { + "version": "23.1.3", + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", + "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.15.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.17.tgz", + "integrity": "sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==", + "dev": true, + "peer": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/stats.js": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz", + "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/three": { + "version": "0.172.0", + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.172.0.tgz", + "integrity": "sha512-LrUtP3FEG26Zg5WiF0nbg8VoXiKokBLTcqM2iLvM9vzcfEiYmmBAPGdBgV0OYx9fvWlY3R/3ERTZcD9X5sc0NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tweenjs/tween.js": "~23.1.3", + "@types/stats.js": "*", + "@types/webxr": "*", + "@webgpu/types": "*", + "fflate": "~0.8.2", + "meshoptimizer": "~0.18.1" + } + }, + "node_modules/@types/webxr": { + "version": "0.5.22", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.22.tgz", + "integrity": "sha512-Vr6Stjv5jPRqH690f5I5GLjVk8GSsoQSYJ2FVd/3jJF7KaqfwPi3ehfBS96mlQ2kPCwZaX6U0rG2+NGHBKkA/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webgpu/types": { + "version": "0.1.60", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.60.tgz", + "integrity": "sha512-8B/tdfRFKdrnejqmvq95ogp8tf52oZ51p3f4QD5m5Paey/qlX4Rhhy5Y8tgFMi7Ms70HzcMMw3EQjH/jdhTwlA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/esbuild": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/forge-internal-rs": { + "resolved": "rust/forge-internal-rs/pkg", + "link": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/lefthook": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-1.11.12.tgz", + "integrity": "sha512-refh8mlcNtwJfmHDH+2mN1KTIVjp1EHlrjzOjfH/hJ4vFQByH2+1KfFDlJLX9V16VESwUNyOGkEZ9cJEF6zNgg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "lefthook": "bin/index.js" + }, + "optionalDependencies": { + "lefthook-darwin-arm64": "1.11.12", + "lefthook-darwin-x64": "1.11.12", + "lefthook-freebsd-arm64": "1.11.12", + "lefthook-freebsd-x64": "1.11.12", + "lefthook-linux-arm64": "1.11.12", + "lefthook-linux-x64": "1.11.12", + "lefthook-openbsd-arm64": "1.11.12", + "lefthook-openbsd-x64": "1.11.12", + "lefthook-windows-arm64": "1.11.12", + "lefthook-windows-x64": "1.11.12" + } + }, + "node_modules/lefthook-darwin-arm64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.11.12.tgz", + "integrity": "sha512-nB3rZVGoign6lhlbdfT1/knk4fV4Kx7kgbho8oSFcpw/o2qRQpLqmclCWUTtf+Pyj4vCzE7hiee/m+uQtvu19w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/lefthook-darwin-x64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-1.11.12.tgz", + "integrity": "sha512-ExNz8ctFRRaVz2wpvjmOtV4GeZcRdsAZwnZbmvlu1fMcJ6WtjAuR6fB0ybtcsc03/zBNrfShiq+VtZLkGv8Oeg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/lefthook-freebsd-arm64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.11.12.tgz", + "integrity": "sha512-3Si6YJ8YLEMJ6TGsaBI2ni64XSrJX69N4gX7OKQp85IXeizPUEy7oorYAJCUaw5nMffRbIkzxNTjaMkcn4iwag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/lefthook-freebsd-x64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.11.12.tgz", + "integrity": "sha512-J18MNYZKkVdHJ5K54MT8kxJ/W4TBUxD8aCi4e+Oliw8UXAiwaJSTGPkdY5P8aUlVYDknN2w+6I99Dxre6CJRFw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/lefthook-linux-arm64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-1.11.12.tgz", + "integrity": "sha512-oIWcj7mcHnFB4tcfz4dsZTnDTXIyF7cjCEqhDQTvqJQLbE1XRfjU0RzQdgSKrzdmXIcUFB+lmcgeRwJnKBEJ8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/lefthook-linux-x64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-1.11.12.tgz", + "integrity": "sha512-sr9X5dW5dl9Fa3Kdk3x66DPGgCz/rykm+JHIyQGfnuvZnaeqkEaXgNubBaVGBbOimagXgtA5DwXc6D6fzUYALA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/lefthook-openbsd-arm64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-1.11.12.tgz", + "integrity": "sha512-4TuX8c/lwky1DSNIY6knIFlMIHQZrVBxh6O5vSTjOAjKv5YmIkNgeUlwcBD+SMru9tQBj7MvOpJSkVkaLK5hhQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/lefthook-openbsd-x64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-1.11.12.tgz", + "integrity": "sha512-Y/rPvyXtsIH+pxACfLHwxqc2Ahk+aExj8Izce3zXp75Wki5DH+6TXm5tWj5CgIuefL7CMqNFsOZCjEe1+SyM+w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/lefthook-windows-arm64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-1.11.12.tgz", + "integrity": "sha512-OJaElGktzsMrkmIpXBqwlc+eZx5kwxx+tJFByTXiW/rb8ttBwj0ueVyfo3lw/PqqlbMy73qc9Uj3CHYkaKsDKw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/lefthook-windows-x64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-1.11.12.tgz", + "integrity": "sha512-ZhKsisibIcaG+rv9i7UJUgnuejI6mfaS5T3FreqsWt5vAsEIvLLNmZUA15MHPr99n+L4La1YQ2jTqie1kH57dA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/lil-gui": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.20.0.tgz", + "integrity": "sha512-k7Ipr0ztqslMA2XvM5z5ZaWhxQtnEOwJBfI/hmSuRh6q4iMG9L0boqqrnZSzBR1jzyJ28OMl47l65ILzRe1TdA==", + "dev": true + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/meshoptimizer": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", + "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/onchange": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/onchange/-/onchange-7.1.0.tgz", + "integrity": "sha512-ZJcqsPiWUAUpvmnJri5TPBooqJOPmC0ttN65juhN15Q8xA+Nbg3BaxBHXQ45EistKKlKElb0edmbPWnKSBkvMg==", + "dev": true, + "dependencies": { + "@blakeembrey/deque": "^1.0.5", + "@blakeembrey/template": "^1.0.0", + "arg": "^4.1.3", + "chokidar": "^3.3.1", + "cross-spawn": "^7.0.1", + "ignore": "^5.1.4", + "tree-kill": "^1.2.2" + }, + "bin": { + "onchange": "dist/bin.js" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/rollup": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz", + "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.40.0", + "@rollup/rollup-android-arm64": "4.40.0", + "@rollup/rollup-darwin-arm64": "4.40.0", + "@rollup/rollup-darwin-x64": "4.40.0", + "@rollup/rollup-freebsd-arm64": "4.40.0", + "@rollup/rollup-freebsd-x64": "4.40.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", + "@rollup/rollup-linux-arm-musleabihf": "4.40.0", + "@rollup/rollup-linux-arm64-gnu": "4.40.0", + "@rollup/rollup-linux-arm64-musl": "4.40.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-musl": "4.40.0", + "@rollup/rollup-linux-s390x-gnu": "4.40.0", + "@rollup/rollup-linux-x64-gnu": "4.40.0", + "@rollup/rollup-linux-x64-musl": "4.40.0", + "@rollup/rollup-win32-arm64-msvc": "4.40.0", + "@rollup/rollup-win32-ia32-msvc": "4.40.0", + "@rollup/rollup-win32-x64-msvc": "4.40.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stats.js": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/stats.js/-/stats.js-0.17.0.tgz", + "integrity": "sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==", + "dev": true + }, + "node_modules/three": { + "version": "0.172.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.172.0.tgz", + "integrity": "sha512-6HMgMlzU97MsV7D/tY8Va38b83kz8YJX+BefKjspMNAv0Vx6dxMogHOrnRl/sbMIs3BPUKijPqDqJ/+UwJbIow==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "peer": true + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/vite": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.2.tgz", + "integrity": "sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.3", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.12" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-glsl": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/vite-plugin-glsl/-/vite-plugin-glsl-1.4.0.tgz", + "integrity": "sha512-mjT4AaU4qRmlpawgd0M2Qz72tvK4WF0ii2p0WbVRpr7ga6+cRScJUT3oIMv5coT8u/lqUe9u9T5+0zJLZ1uhug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.4" + }, + "engines": { + "node": ">= 20.17.0", + "npm": ">= 10.8.3" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "rust/forge-internal-rs/pkg": { + "name": "forge-internal-rs", + "version": "0.1.0", + "license": "Proprietary" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3e7ea3a --- /dev/null +++ b/package.json @@ -0,0 +1,55 @@ +{ + "name": "@forge-gfx/forge", + "private": true, + "version": "0.0.1", + "type": "module", + "description": "An advanced 3D Gaussian Splatting renderer for THREE.js", + "scripts": { + "assets:clean": "node scripts/clean-assets.js", + "assets:download": "node scripts/download-assets.js", + "build": "vite build --mode production && vite build --mode dev && tsc --emitDeclarationOnly --outFile dist/forge.d.ts", + "build:wasm": "node rust/build_wasm.js", + "build:watch": "onchange 'src/**/*.{ts,glsl}' -- npm run build", + "clean": "rm -rf dist/ && rm -rf node_modules/ && rm -rf rust/target/ && rm -rf rust/forge-internal-rs/pkg/ && npm run assets:clean", + "dev": "npm run build && (vite --host & npm run build:watch)", + "deploy": "node scripts/deploy.js", + "docs": "mkdocs serve", + "format": "biome format .", + "format:fix": "biome format . --fix", + "lint": "biome check .", + "lint:fix": "biome check . --fix", + "lint:summary": "biome check --reporter=summary", + "prepare": "npm run build:wasm && lefthook install", + "site:build": "npm run build && npm run site:clean && mkdocs build && node scripts/build-site.js", + "site:clean": "node scripts/clean-site.js", + "site:deploy": "node scripts/deploy-site.js", + "site:serve": "node scripts/serve-site.js site", + "start": "npm run dev", + "test": "node --no-warnings --loader ts-node/esm --test test/**/*.test.ts" + }, + "exports": { + ".": { + "types": "./dist/forge.d.ts", + "import": "./dist/forge.module.js", + "require": "./dist/forge.cjs.js" + } + }, + "files": ["dist"], + "devDependencies": { + "@biomejs/biome": "1.9.4", + "@types/three": "0.172.0", + "lefthook": "1.11.12", + "lil-gui": "^0.20.0", + "onchange": "7.1.0", + "stats.js": "^0.17.0", + "three": "^0.172.0", + "ts-node": "10.9.2", + "typescript": "^5.7.3", + "vite": "^6.0.11", + "vite-plugin-glsl": "^1.3.1" + }, + "dependencies": { + "fflate": "^0.8.2", + "forge-internal-rs": "file:rust/forge-internal-rs/pkg" + } +} diff --git a/rust/.gitignore b/rust/.gitignore new file mode 100644 index 0000000..56325ce --- /dev/null +++ b/rust/.gitignore @@ -0,0 +1,2 @@ +target/ +forge-internal-rs/pkg/ diff --git a/rust/Cargo.lock b/rust/Cargo.lock new file mode 100644 index 0000000..626229a --- /dev/null +++ b/rust/Cargo.lock @@ -0,0 +1,224 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "crunchy" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" + +[[package]] +name = "forge-internal-rs" +version = "0.1.0" +dependencies = [ + "anyhow", + "half", + "js-sys", + "wasm-bindgen", + "wlg", +] + +[[package]] +name = "half" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rustversion" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" + +[[package]] +name = "ruzstd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c581601827da5c717bfae77d7b187e54293d23d8fb6b700b4b5e9b5828a13cc3" +dependencies = [ + "twox-hash", +] + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "syn" +version = "2.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "twox-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7b17f197b3050ba473acf9181f7b1d3b66d1cf7356c6cc57886662276e65908" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wlg" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "half", + "ruzstd", + "serde", +] diff --git a/rust/Cargo.toml b/rust/Cargo.toml new file mode 100644 index 0000000..f1d92d0 --- /dev/null +++ b/rust/Cargo.toml @@ -0,0 +1,22 @@ +[workspace] +members = [ + "forge-internal-rs", + "wlg", +] +resolver = "2" + +[workspace.package] +rust-version = "1.82" +edition = "2021" +license = "Proprietary" +authors = ["World Labs Technologies"] +repository = "https://github.com/forge-gfx/forge" + +[workspace.dependencies] +anyhow = "1.0.98" +bincode = "1.3.3" +half = "2.6.0" +js-sys = "0.3.77" +ruzstd = "0.8.0" +serde = { version = "1.0.219", features = ["derive"] } +wasm-bindgen = "0.2.100" diff --git a/rust/build_rust_wasm.ps1 b/rust/build_rust_wasm.ps1 new file mode 100644 index 0000000..bf9fe88 --- /dev/null +++ b/rust/build_rust_wasm.ps1 @@ -0,0 +1,24 @@ +# Exit on any error +$ErrorActionPreference = "Stop" + +# Resolve the script's directory and change to it +Set-Location -Path (Split-Path -Parent $MyInvocation.MyCommand.Path) + +# Check if rustup is installed +if (-not (Get-Command rustup -ErrorAction SilentlyContinue)) { + Write-Host "Rust tool 'rustup' not found! Please install Rust to build." + Write-Host "Visit: https://www.rust-lang.org/tools/install" + exit 1 +} + +# Ensure wasm32-unknown-unknown target is installed +rustup target add wasm32-unknown-unknown + +# Check if wasm-pack is installed, and install if not +if (-not (Get-Command wasm-pack -ErrorAction SilentlyContinue)) { + cargo install wasm-pack +} + +# Change directory and build using wasm-pack +Set-Location -Path "./forge-internal-rs" +wasm-pack build --target web diff --git a/rust/build_rust_wasm.sh b/rust/build_rust_wasm.sh new file mode 100755 index 0000000..830dfe8 --- /dev/null +++ b/rust/build_rust_wasm.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Check if "rustup" tool is installed +if ! command -v rustup &> /dev/null; then + echo "Rust tool 'rustup' not found! Please install Rust to build." + echo "Visit Rust installation page: https://www.rust-lang.org/tools/install" + echo "- Likely install one-liner: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh" + exit 1 +fi + +cd $(dirname "$0") + +# Make sure Rust wasm target is installed +rustup target add wasm32-unknown-unknown + +# Make sure wasm-pack is installed +cargo install wasm-pack + +cd forge-internal-rs + +# Build the project +wasm-pack build --target web diff --git a/rust/build_wasm.js b/rust/build_wasm.js new file mode 100644 index 0000000..8a5d607 --- /dev/null +++ b/rust/build_wasm.js @@ -0,0 +1,18 @@ +const { execSync } = await import("node:child_process"); +const { platform } = await import("node:os"); + +const isWindows = platform() === "win32"; + +try { + if (isWindows) { + const output = execSync( + "powershell.exe -ExecutionPolicy Bypass -File ./rust/build_rust_wasm.ps1", + { stdio: "inherit" }, + ); + } else { + execSync("rust/build_rust_wasm.sh", { stdio: "inherit" }); + } +} catch (err) { + console.error("Failed to build RUST WASM:", err.message); + process.exit(1); +} diff --git a/rust/forge-internal-rs/Cargo.toml b/rust/forge-internal-rs/Cargo.toml new file mode 100644 index 0000000..9625bc3 --- /dev/null +++ b/rust/forge-internal-rs/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "forge-internal-rs" +version = "0.1.0" +rust-version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +repository.workspace = true + +[lib] +crate-type = ["cdylib"] + +[dependencies] +anyhow.workspace = true +half.workspace = true +js-sys.workspace = true +wasm-bindgen.workspace = true +wlg = { path = "../wlg" } diff --git a/rust/forge-internal-rs/README.md b/rust/forge-internal-rs/README.md new file mode 100644 index 0000000..b12097d --- /dev/null +++ b/rust/forge-internal-rs/README.md @@ -0,0 +1,35 @@ +# forge-internal-rs + +Rust WebAssembly functions for forge-internal. + +## Installing build tools + +First, we need to install Rust. Though it is possible to install it using Homebrew, we recommend installing `rustup` using the approach on the Rust homepage: + +https://www.rust-lang.org/tools/install + +It will most likely involve simply running: +``` +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +Once you have `rustup` and Rust, we need to install dependencies for building Rust Wasm. +``` +rustup target add wasm32-unknown-unknown +cargo install wasm-pack +``` + +## Building + +Run the following script inside `forge-internal/rust`: +``` +./build_rust_wasm.sh +``` + +You can also build it manually by running these commands: +``` +cd forge-internal-rs +wasm-pack build --target web +``` + +The generated files will be in the `pkg/` subdirectory, which is already symlinked in `forge-internal/package.json`. diff --git a/rust/forge-internal-rs/src/lib.rs b/rust/forge-internal-rs/src/lib.rs new file mode 100644 index 0000000..7c65c3e --- /dev/null +++ b/rust/forge-internal-rs/src/lib.rs @@ -0,0 +1,154 @@ + +use std::cell::RefCell; +use js_sys::{Array, ArrayBuffer, Float32Array, Object, Reflect, Uint16Array, Uint32Array, Uint8Array}; +use wasm_bindgen::prelude::*; + +use wlg::decode12_packed; + +mod sort; +use sort::{old_sort_internal, OldSortBuffers, sort_internal, SortBuffers}; + +mod raycast; +use raycast::{raycast_ellipsoids, raycast_spheres}; + +const RAYCAST_BUFFER_COUNT: u32 = 65536; + +thread_local! { + static SORT_BUFFERS: RefCell = RefCell::new(SortBuffers::default()); + static OLD_SORT_BUFFERS: RefCell = RefCell::new(OldSortBuffers::default()); + static RAYCAST_BUFFER: RefCell> = RefCell::new(vec![0; RAYCAST_BUFFER_COUNT as usize * 4]); +} + +#[wasm_bindgen] +pub fn decode_wlg(bytes: ArrayBuffer, tex_width: u32, tex_height: u32) -> Object { + let mut bytes = Uint8Array::new(&bytes).to_vec(); + let (_settings, packed_splats) = match decode12_packed(&mut bytes) { + Ok(result) => result, + Err(err) => { + wasm_bindgen::throw_str(&format!("{}", err)); + } + }; + + let num_splats = packed_splats.0.len() / 4; + let max_splats = if tex_width != 0 && tex_height != 0 { + let width = tex_width as usize; + let height = num_splats.div_ceil(width).min(tex_height as usize); + let depth = num_splats.div_ceil(width * height); + width * height * depth + } else { + num_splats + }; + + let packed = Uint32Array::new_with_length(max_splats as u32 * 4); + let packed_slice = packed.subarray(0, packed_splats.0.len() as u32); + packed_slice.copy_from(&packed_splats.0); + + let result = Object::new(); + Reflect::set(&result, &JsValue::from_str("numSplats"), &JsValue::from_f64(num_splats as f64)).unwrap(); + Reflect::set(&result, &JsValue::from_str("packedSplats"), &JsValue::from(packed)).unwrap(); + result +} + +#[wasm_bindgen] +pub fn old_sort_splats( + max_splats: u32, total_splats: u32, readback: Array, ordering: Uint32Array, +) -> u32 { + let max_splats = max_splats as usize; + let total_splats = total_splats as usize; + let num_layers = readback.length() as usize; + let layer_size = readback.get(0).dyn_into::().unwrap().length() as usize / 4; + + let active_splats = OLD_SORT_BUFFERS.with_borrow_mut(|buffers| { + buffers.ensure_size(max_splats); + + // Copy the readback data layers into a contiguous buffer + let mut layer_base = 0; + for layer in 0..num_layers { + let layer_count = layer_size.min(total_splats - layer_base); + if layer_count > 0 { + let layer_buffer = readback.get(layer as u32).dyn_into::().unwrap().buffer(); + let layer_uint32 = Uint32Array::new_with_byte_offset_and_length(&layer_buffer, 0, layer_count as u32); + layer_uint32.copy_to(&mut buffers.readback[layer_base..layer_base + layer_count]); + } + layer_base += layer_count; + } + + let active_splats = match old_sort_internal(buffers, total_splats) { + Ok(active_splats) => active_splats, + Err(err) => { + wasm_bindgen::throw_str(&format!("{}", err)); + } + }; + + if active_splats > 0 { + // Copy out ordering result + let subarray = &buffers.ordering[..active_splats as usize]; + ordering.subarray(0, active_splats).copy_from(&subarray); + } + active_splats + }); + + active_splats +} + +#[wasm_bindgen] +pub fn sort_splats( + num_splats: u32, readback: Uint16Array, ordering: Uint32Array, +) -> u32 { + let max_splats = readback.length() as usize; + + let active_splats = SORT_BUFFERS.with_borrow_mut(|buffers| { + buffers.ensure_size(max_splats); + let sub_readback = readback.subarray(0, num_splats); + sub_readback.copy_to(&mut buffers.readback[..num_splats as usize]); + + let active_splats = match sort_internal(buffers, num_splats as usize) { + Ok(active_splats) => active_splats, + Err(err) => { + wasm_bindgen::throw_str(&format!("{}", err)); + } + }; + + if active_splats > 0 { + // Copy out ordering result + let subarray = &buffers.ordering[..active_splats as usize]; + ordering.subarray(0, active_splats).copy_from(&subarray); + } + active_splats + }); + + active_splats +} + +#[wasm_bindgen] +pub fn raycast_splats( + origin_x: f32, origin_y: f32, origin_z: f32, + dir_x: f32, dir_y: f32, dir_z: f32, + near: f32, far: f32, + num_splats: u32, packed_splats: Uint32Array, + raycast_ellipsoid: bool, +) -> Float32Array { + let mut distances = Vec::::new(); + + _ = RAYCAST_BUFFER.with_borrow_mut(|buffer| { + let mut base = 0; + while base < num_splats { + let chunk_size = RAYCAST_BUFFER_COUNT.min(num_splats - base); + let subarray = packed_splats.subarray(4 * base, 4 * (base + chunk_size)); + let subbuffer = &mut buffer[0..(4 * chunk_size as usize)]; + subarray.copy_to(subbuffer); + + if raycast_ellipsoid { + raycast_ellipsoids(subbuffer, &mut distances, [origin_x, origin_y, origin_z], [dir_x, dir_y, dir_z], near, far); + } else { + raycast_spheres(subbuffer, &mut distances, [origin_x, origin_y, origin_z], [dir_x, dir_y, dir_z], near, far); + } + + base += chunk_size; + } + }); + + let output = Float32Array::new_with_length(distances.len() as u32); + output.copy_from(&distances); + output +} diff --git a/rust/forge-internal-rs/src/raycast.rs b/rust/forge-internal-rs/src/raycast.rs new file mode 100644 index 0000000..22c1348 --- /dev/null +++ b/rust/forge-internal-rs/src/raycast.rs @@ -0,0 +1,170 @@ +use half::f16; +use wlg::decode_scale; + +const MIN_OPACITY: f32 = 0.1; + +pub fn raycast_spheres( + buffer: &[u32], distances: &mut Vec, + origin: [f32; 3], dir: [f32; 3], near: f32, far: f32, +) { + let quad_a = vec3_dot(dir, dir); + + for packed in buffer.chunks(4) { + let opacity = ((packed[0] >> 24) as u8) as f32 / 255.0; + if opacity < MIN_OPACITY { + continue; + } + + let origin = vec3_sub(origin, extract_center(packed)); + let scale = extract_scale(packed); + + // Model the Gsplat as a sphere for faster approximate raycasting + let radius = (scale[0] + scale[1] + scale[2]) / 3.0; + + let quad_b = vec3_dot(dir, origin); + let quad_c = vec3_dot(origin, origin) - radius * radius; + let discriminant = quad_b * quad_b - quad_a * quad_c; + if discriminant < 0.0 { + continue; + } + + let t = (-quad_b - discriminant.sqrt()) / quad_a; + if t >= near && t <= far { + distances.push(t); + } + } +} + +pub fn raycast_ellipsoids( + buffer: &[u32], distances: &mut Vec, + origin: [f32; 3], dir: [f32; 3], near: f32, far: f32, +) { + for packed in buffer.chunks(4) { + let opacity = ((packed[0] >> 24) as u8) as f32 / 255.0; + if opacity < MIN_OPACITY { + continue; + } + + let origin = vec3_sub(origin, extract_center(packed)); + let scale = extract_scale(packed); + let quat = extract_quat(packed); + let inv_quat = [-quat[0], -quat[1], -quat[2], quat[3]]; + + // Model the Gsplat as an ellipsoid for higher quality raycasting + let local_origin = quat_vec(inv_quat, origin); + let local_dir = quat_vec(inv_quat, dir); + + let min_scale = scale[0].max(scale[1]).max(scale[2]) * 0.01; + let t = if scale[2] < min_scale { + // Treat it as a flat elliptical disk + if local_dir[2].abs() < 1e-6 { + continue; + } + let t = -local_origin[2] / local_dir[2]; + let p_x = local_origin[0] + t * local_dir[0]; + let p_y = local_origin[1] + t * local_dir[1]; + if sqr(p_x / scale[0]) + sqr(p_y / scale[1]) > 1.0 { + continue; + } + t + } else if scale[1] < min_scale { + // Treat it as a flat elliptical disk + if local_dir[1].abs() < 1e-6 { + continue; + } + let t = -local_origin[1] / local_dir[1]; + let p_x = local_origin[0] + t * local_dir[0]; + let p_z = local_origin[2] + t * local_dir[2]; + if sqr(p_x / scale[0]) + sqr(p_z / scale[2]) > 1.0 { + continue; + } + t + } else if scale[0] < min_scale { + // Treat it as a flat elliptical disk + if local_dir[0].abs() < 1e-6 { + continue; + } + let t = -local_origin[0] / local_dir[0]; + let p_y = local_origin[1] + t * local_dir[1]; + let p_z = local_origin[2] + t * local_dir[2]; + if sqr(p_y / scale[1]) + sqr(p_z / scale[2]) > 1.0 { + continue; + } + t + } else { + let inv_scale = [1.0 / scale[0], 1.0 / scale[1], 1.0 / scale[2]]; + let local_origin = vec3_mul(local_origin, inv_scale); + let local_dir = vec3_mul(local_dir, inv_scale); + + let a = vec3_dot(local_dir, local_dir); + let b = vec3_dot(local_origin, local_dir); + let c = vec3_dot(local_origin, local_origin) - 1.0; + let discriminant = b * b - a * c; + if discriminant < 0.0 { + continue; + } + + (-b - discriminant.sqrt()) / a + }; + if t >= near && t <= far { + distances.push(t); + } + } +} + +fn extract_center(packed: &[u32]) -> [f32; 3] { + let x = f16::from_bits(packed[1] as u16).to_f32(); + let y = f16::from_bits((packed[1] >> 16) as u16).to_f32(); + let z = f16::from_bits(packed[2] as u16).to_f32(); + [x, y, z] +} + +fn extract_scale(packed: &[u32]) -> [f32; 3] { + let scale_x = decode_scale(packed[3] as u8); + let scale_y = decode_scale((packed[3] >> 8) as u8); + let scale_z = decode_scale((packed[3] >> 16) as u8); + [scale_x, scale_y, scale_z] +} + +fn extract_quat(packed: &[u32]) -> [f32; 4] { + let quat_x = ((packed[2] >> 16) as i8) as f32 / 127.0; + let quat_y = ((packed[2] >> 24) as i8) as f32 / 127.0; + let quat_z = ((packed[3] >> 24) as i8) as f32 / 127.0; + let quat_w = (1.0 - quat_x * quat_x - quat_y * quat_y - quat_z * quat_z).max(0.0).sqrt(); + [quat_x, quat_y, quat_z, quat_w] +} + +fn sqr(x: f32) -> f32 { + x * x +} + +fn vec3_sub(a: [f32; 3], b: [f32; 3]) -> [f32; 3] { + [a[0] - b[0], a[1] - b[1], a[2] - b[2]] +} + +fn vec3_mul(a: [f32; 3], b: [f32; 3]) -> [f32; 3] { + [a[0] * b[0], a[1] * b[1], a[2] * b[2]] +} + +fn vec3_dot(a: [f32; 3], b: [f32; 3]) -> f32 { + a[0] * b[0] + a[1] * b[1] + a[2] * b[2] +} + +fn vec3_cross(a: [f32; 3], b: [f32; 3]) -> [f32; 3] { + [ + a[1] * b[2] - a[2] * b[1], + a[2] * b[0] - a[0] * b[2], + a[0] * b[1] - a[1] * b[0], + ] +} + +fn quat_vec(q: [f32; 4], v: [f32; 3]) -> [f32; 3] { + let q_vec = [q[0], q[1], q[2]]; + let uv = vec3_cross(q_vec, v); + let uuv = vec3_cross(q_vec, uv); + [ + v[0] + 2.0 * (q[3] * uv[0] + uuv[0]), + v[1] + 2.0 * (q[3] * uv[1] + uuv[1]), + v[2] + 2.0 * (q[3] * uv[2] + uuv[2]), + ] +} diff --git a/rust/forge-internal-rs/src/sort.rs b/rust/forge-internal-rs/src/sort.rs new file mode 100644 index 0000000..2a57235 --- /dev/null +++ b/rust/forge-internal-rs/src/sort.rs @@ -0,0 +1,133 @@ +use anyhow::anyhow; + +const DEPTH_INFINITY: u32 = 0x7c00; +const DEPTH_SIZE: usize = DEPTH_INFINITY as usize + 1; + +#[derive(Default)] +pub struct OldSortBuffers { + pub readback: Vec, + pub ordering: Vec, + pub buckets: Vec, +} + +impl OldSortBuffers { + pub fn ensure_size(&mut self, max_splats: usize) { + if self.readback.len() < max_splats { + self.readback.resize(max_splats, 0); + } + if self.ordering.len() < max_splats { + self.ordering.resize(max_splats, 0); + } + if self.buckets.len() < DEPTH_SIZE { + self.buckets.resize(DEPTH_SIZE, 0); + } + } +} + +pub fn old_sort_internal(buffers: &mut OldSortBuffers, total_splats: usize) -> anyhow::Result { + let OldSortBuffers { readback, ordering, buckets } = buffers; + let readback = &readback[..total_splats]; + + // Set the bucket counts to zero + buckets.clear(); + buckets.resize(DEPTH_SIZE, 0); + + // Count the number of splats in each bucket + for &readback_u32 in readback.iter() { + let priority = readback_u32 & 0x7FFF; + if priority < DEPTH_INFINITY { + buckets[priority as usize] += 1; + } + } + + // Compute bucket starting offset + let mut active_splats = 0; + for count in buckets.iter_mut() { + let new_total = active_splats + *count; + *count = active_splats; + active_splats = new_total; + } + + // Write out splat indices at the right location using bucket offsets + for (index, &readback_u32) in readback.iter().enumerate() { + let priority = readback_u32 & 0x7FFF; + if priority < DEPTH_INFINITY { + ordering[buckets[priority as usize] as usize] = index as u32; + buckets[priority as usize] += 1; + } + } + + // Sanity check + if buckets[DEPTH_SIZE - 1] != active_splats { + return Err(anyhow!( + "Expected {} active splats but got {}", + active_splats, + buckets[DEPTH_SIZE - 1] + )); + } + Ok(active_splats) +} + + +#[derive(Default)] +pub struct SortBuffers { + pub readback: Vec, + pub ordering: Vec, + pub buckets: Vec, +} + +impl SortBuffers { + pub fn ensure_size(&mut self, max_splats: usize) { + if self.readback.len() < max_splats { + self.readback.resize(max_splats, 0); + } + if self.ordering.len() < max_splats { + self.ordering.resize(max_splats, 0); + } + if self.buckets.len() < DEPTH_SIZE { + self.buckets.resize(DEPTH_SIZE, 0); + } + } +} + +pub fn sort_internal(buffers: &mut SortBuffers, num_splats: usize) -> anyhow::Result { + let SortBuffers { readback, ordering, buckets } = buffers; + let readback = &readback[..num_splats]; + + // Set the bucket counts to zero + buckets.clear(); + buckets.resize(DEPTH_SIZE, 0); + + // Count the number of splats in each bucket + for &metric in readback.iter() { + if (metric as u32) < DEPTH_INFINITY { + buckets[metric as usize] += 1; + } + } + + // Compute bucket starting offset + let mut active_splats = 0; + for count in buckets.iter_mut().rev().skip(1) { + let new_total = active_splats + *count; + *count = active_splats; + active_splats = new_total; + } + + // Write out splat indices at the right location using bucket offsets + for (index, &metric) in readback.iter().enumerate() { + if (metric as u32) < DEPTH_INFINITY { + ordering[buckets[metric as usize] as usize] = index as u32; + buckets[metric as usize] += 1; + } + } + + // Sanity check + if buckets[0] != active_splats { + return Err(anyhow!( + "Expected {} active splats but got {}", + active_splats, + buckets[0] + )); + } + Ok(active_splats) +} diff --git a/rust/wlg/Cargo.toml b/rust/wlg/Cargo.toml new file mode 100644 index 0000000..47016d2 --- /dev/null +++ b/rust/wlg/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "wlg" +version = "0.1.0" +rust-version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +repository.workspace = true + +[dependencies] +anyhow.workspace = true +bincode.workspace = true +half.workspace = true +serde.workspace = true +ruzstd.workspace = true diff --git a/rust/wlg/src/lib.rs b/rust/wlg/src/lib.rs new file mode 100644 index 0000000..f40f83a --- /dev/null +++ b/rust/wlg/src/lib.rs @@ -0,0 +1,15 @@ + +mod ordering; + +// WLG0 includes WLGv1 and WLGv2 +mod wlg0; + +pub use wlg0::{ + Wlg0Gaussian, PackedSplats, + Wlg0Settings, Wlg0EncodeSettings, + decode12, decode12_packed, + encode12, encode_scale, decode_scale, +}; + +// WLG3 will be used for future WLG versions +// mod wlg3; diff --git a/rust/wlg/src/ordering.rs b/rust/wlg/src/ordering.rs new file mode 100644 index 0000000..6c8d47b --- /dev/null +++ b/rust/wlg/src/ordering.rs @@ -0,0 +1,201 @@ +// Compute Morton index for 3D coordinates. + +pub fn morton_coord_to_index([x, y, z]: [u16; 3]) -> u64 { + fn expand3(x: u16) -> u64 { + let mut x = x as u64; + x = (x | x << 32) & 0x1f00000000ffff; + x = (x | x << 16) & 0x1f0000ff0000ff; + x = (x | x << 8) & 0x100f00f00f00f00f; + x = (x | x << 4) & 0x10c30c30c30c30c3; + x = (x | x << 2) & 0x1249249249249249; + x + } + + (expand3(x) << 0) | (expand3(y) << 1) | (expand3(z) << 2) +} + +pub fn morton_coord_to_index_24([x, y, z]: [u32; 3]) -> u128 { + fn expand3_24(x: u32) -> u128 { + let mut x = x as u128; + x = (x | x << 64) & 0x3ff0000000000000000ffffffffu128; + x = (x | x << 32) & 0x3ff00000000ffff00000000ffffu128; + x = (x | x << 16) & 0x30000ff0000ff0000ff0000ff0000ffu128; + x = (x | x << 8) & 0x300f00f00f00f00f00f00f00f00f00fu128; + x = (x | x << 4) & 0x30c30c30c30c30c30c30c30c30c30c3u128; + x = (x | x << 2) & 0x9249249249249249249249249249249u128; + x + } + + (expand3_24(x) << 0) | (expand3_24(y) << 1) | (expand3_24(z) << 2) +} + +// Compute Hilbert index for 3D coordinates. + +// Converts a 48-bit Hilbert index to 3D coordinates (x, y, z). +pub fn _hilbert_index_to_coord(mut index: u64) -> (u16, u16, u16) { + const BITS: u32 = 16; + + // Helper function to decode a Hilbert quad to coordinate bits. + fn hilbert_decode_step(quad: u16, s: &mut [u16; 3]) { + let (mut x, mut y, mut z) = (0u16, 0u16, 0u16); + + match quad { + 0 => { x = 0; y = 0; z = 0; }, + 1 => { x = 0; y = 0; z = 1; }, + 2 => { x = 0; y = 1; z = 1; }, + 3 => { x = 0; y = 1; z = 0; }, + 4 => { x = 1; y = 1; z = 0; }, + 5 => { x = 1; y = 1; z = 1; }, + 6 => { x = 1; y = 0; z = 1; }, + 7 => { x = 1; y = 0; z = 0; }, + _ => {}, + } + + s[0] = x; + s[1] = y; + s[2] = z; + } + + let mut mask = 1u16; // Start with the least significant bit + let mut h = [0u16; 3]; + let mut s = [0u16; 3]; + + for _ in 0..BITS { + let quad = (index & 7) as u16; // Extract the last 3 bits + index >>= 3; + + hilbert_decode_step(quad, &mut s); + + h[0] |= s[0] * mask; + h[1] |= s[1] * mask; + h[2] |= s[2] * mask; + + mask <<= 1; // Move to the next bit + } + + (h[0], h[1], h[2]) +} + +// Converts 3D coordinates (x, y, z) to a 48-bit Hilbert index. +pub fn hilbert_coord_to_index([x, y, z]: [u16; 3]) -> u64 { + const BITS: u32 = 16; + + // Helper function to encode coordinate bits to a Hilbert quad. + fn hilbert_encode_step(s: &mut [u16; 3]) -> u16 { + let x = s[0]; + let y = s[1]; + let z = s[2]; + + let mut quad = 0u16; + + if x == 0 && y == 0 && z == 0 { quad = 0; } + else if x == 0 && y == 0 && z == 1 { quad = 1; } + else if x == 0 && y == 1 && z == 1 { quad = 2; } + else if x == 0 && y == 1 && z == 0 { quad = 3; } + else if x == 1 && y == 1 && z == 0 { quad = 4; } + else if x == 1 && y == 1 && z == 1 { quad = 5; } + else if x == 1 && y == 0 && z == 1 { quad = 6; } + else if x == 1 && y == 0 && z == 0 { quad = 7; } + + quad + } + + let mut index = 0u64; + let mut h = [x, y, z]; + let mut s = [0u16; 3]; + + for _ in 0..BITS { + s[0] = h[0] & 1; + s[1] = h[1] & 1; + s[2] = h[2] & 1; + + let quad = hilbert_encode_step(&mut s); + index <<= 3; + index |= quad as u64; + + h[0] >>= 1; + h[1] >>= 1; + h[2] >>= 1; + } + + index +} + +// Converts a 72-bit Hilbert index to 3D coordinates (x, y, z). +pub fn _hilbert_index_coord_24(index: u128) -> (u32, u32, u32) { + const BITS: u32 = 24; + + // Helper function to decode a Hilbert quad to coordinates. + fn hilbert_decode_step(quad: u32, s: &mut [u32; 3]) { + match quad { + 0 => { s.swap(0, 1); }, + 1 => {}, + 2 => {}, + 3 => { s[2] ^= 1; }, + 4 => { s[0] ^= 1; s[1] ^= 1; s[2] ^= 1; }, + 5 => { s[0] ^= 1; s[1] ^= 1; s[2] ^= 1; s.swap(0, 1); }, + 6 => { s[0] ^= 1; s[1] ^= 1; s[2] ^= 1; s.swap(1, 2); }, + 7 => { s.swap(0, 2); }, + _ => {}, + } + } + + let mut idx = index; + + let mut mask = 1u32 << (BITS - 1); + let mut h = [0u32; 3]; + let mut s = [0u32; 3]; + + for _ in 0..BITS { + let quad = (idx & 7) as u32; + idx >>= 3; + + hilbert_decode_step(quad, &mut s); + h[0] |= s[0] & mask; + h[1] |= s[1] & mask; + h[2] |= s[2] & mask; + + mask >>= 1; + } + + (h[0], h[1], h[2]) +} + +// Converts 3D coordinates (x, y, z) to a 72-bit Hilbert index. +pub fn hilbert_coord_to_index_24([x, y, z]: [u32; 3]) -> u128 { + const BITS: u32 = 24; + + // Helper function to encode coordinates to a Hilbert quad. + fn hilbert_encode_step(s: &mut [u32; 3]) -> u32 { + let mut quad = 0u32; + let mut bits = [s[0], s[1], s[2]]; + + if bits[0] > bits[1] { bits.swap(0, 1); quad ^= 1; } + if bits[1] > bits[2] { bits.swap(1, 2); quad ^= 2; } + if bits[0] > bits[1] { bits.swap(0, 1); quad ^= 1; } + + s[0] = bits[0]; + s[1] = bits[1]; + s[2] = bits[2]; + + quad + } + + let mut index = 0u128; + let h = [x, y, z]; + let mut s = [0u32; 3]; + let mut mask = 1u32 << (BITS - 1); + + for _ in 0..BITS { + s[0] = (h[0] & mask) >> (BITS - 1); + s[1] = (h[1] & mask) >> (BITS - 1); + s[2] = (h[2] & mask) >> (BITS - 1); + + let quad = hilbert_encode_step(&mut s); + index = (index << 3) | quad as u128; + + mask >>= 1; + } + + index +} diff --git a/rust/wlg/src/wlg0/decode.rs b/rust/wlg/src/wlg0/decode.rs new file mode 100644 index 0000000..251751c --- /dev/null +++ b/rust/wlg/src/wlg0/decode.rs @@ -0,0 +1,268 @@ +use anyhow::anyhow; +use std::io::Read; +use half::f16; + +use super::{ + decompress_data, deobfuscate, encode_scale, first_cumulative, + PackedSplats, Wlg0Gaussian, Wlg0Header, Wlg0Settings, +}; + +pub(super) trait Wlg0Decoder { + fn init_num_splats(&mut self, num_splats: usize); + fn write_center(&mut self, index: usize, dim: usize, value: f32); + fn write_scale(&mut self, index: usize, dim: usize, value: f32); + fn write_quaternion_f32(&mut self, index: usize, dim: usize, value: f32); + fn write_quaternion_i8(&mut self, index: usize, dim: usize, value: i8); + fn write_quaternion_full_f32(&mut self, index: usize, value: [f32; 4]); + fn write_rgba(&mut self, index: usize, dim: usize, value: u8); +} + +impl Wlg0Decoder for Vec { + fn init_num_splats(&mut self, num_splats: usize) { + self.resize(num_splats, Wlg0Gaussian::default()); + } + + fn write_center(&mut self, index: usize, dim: usize, value: f32) { + self[index].center[dim] = value; + } + + fn write_scale(&mut self, index: usize, dim: usize, value: f32) { + self[index].ln_scale[dim] = value.ln(); + } + + fn write_quaternion_f32(&mut self, index: usize, dim: usize, value: f32) { + self[index].quaternion[dim] = value; + } + + fn write_quaternion_i8(&mut self, _index: usize, _dim: usize, _value: i8) { + // No-op sing we use the f32 variant + } + + fn write_quaternion_full_f32(&mut self, _index: usize, _value: [f32; 4]) { + // No-op + } + + fn write_rgba(&mut self, index: usize, dim: usize, value: u8) { + self[index].color[dim] = value as f32 / 255.0; + } +} + +impl Wlg0Decoder for PackedSplats { + fn init_num_splats(&mut self, num_splats: usize) { + self.0.resize(num_splats * 4, 0); + } + + fn write_center(&mut self, index: usize, dim: usize, value: f32) { + match dim { + 0 => { self.0[index * 4 + 1] |= f16::from_f32(value).to_bits() as u32; }, + 1 => { self.0[index * 4 + 1] |= (f16::from_f32(value).to_bits() as u32) << 16; }, + 2 => { self.0[index * 4 + 2] |= f16::from_f32(value).to_bits() as u32; }, + _ => unreachable!(), + } + } + + fn write_scale(&mut self, index: usize, dim: usize, value: f32) { + let scale8 = encode_scale(value); + match dim { + 0 => { self.0[index * 4 + 3] |= scale8 as u32; }, + 1 => { self.0[index * 4 + 3] |= (scale8 as u32) << 8; }, + 2 => { self.0[index * 4 + 3] |= (scale8 as u32) << 16; }, + _ => unreachable!(), + } + } + + fn write_quaternion_f32(&mut self, _index: usize, _dim: usize, _value: f32) { + // No-op since we use the i8 variant + } + + fn write_quaternion_i8(&mut self, _index: usize, _dim: usize, _value: i8) { + // Old Qxyz encoding: + // match dim { + // 0 => { self.0[index * 4 + 2] |= ((value as u32) & 0xff) << 16; }, + // 1 => { self.0[index * 4 + 2] |= ((value as u32) & 0xff) << 24; }, + // 2 => { self.0[index * 4 + 3] |= ((value as u32) & 0xff) << 24; }, + // 3 => { + // // Quaternion w is inferred from xyz in PackedSplats + // }, + // _ => unreachable!(), + // } + } + + fn write_quaternion_full_f32(&mut self, index: usize, value: [f32; 4]) { + // Encode as OctXy88R8 + let q = if value[3] < 0.0 { value.map(|v| -v) } else { value }; + let theta = 2.0 * q[3].acos(); + + let xyz_norm = (q[0] * q[0] + q[1] * q[1] + q[2] * q[2]).sqrt(); + let axis = if xyz_norm < 1e-6 { + [1.0, 0.0, 0.0] + } else { + [q[0] / xyz_norm, q[1] / xyz_norm, q[2] / xyz_norm] + }; + + let sum = axis[0].abs() + axis[1].abs() + axis[2].abs(); + let p = [axis[0] / sum, axis[1] / sum]; + let p = if axis[2] >= 0.0 { p } else { + [ + (1.0 - p[1].abs()) * p[0].signum(), + (1.0 - p[0].abs()) * p[1].signum(), + ] + }; + let uv = [ + ((p[0] * 0.5 + 0.5) * 255.0).round() as u8, + ((p[1] * 0.5 + 0.5) * 255.0).round() as u8, + ]; + + let angle = (theta * (255.0 / 3.14159265359)).round().clamp(0.0, 255.0) as u8; + self.0[index * 4 + 2] |= (uv[0] as u32) << 16; + self.0[index * 4 + 2] |= (uv[1] as u32) << 24; + self.0[index * 4 + 3] |= (angle as u32) << 24; + } + + fn write_rgba(&mut self, index: usize, dim: usize, value: u8) { + match dim { + 0 => { self.0[index * 4] |= value as u32; }, + 1 => { self.0[index * 4] |= (value as u32) << 8; }, + 2 => { self.0[index * 4] |= (value as u32) << 16; }, + 3 => { self.0[index * 4] |= (value as u32) << 24; }, + _ => unreachable!(), + } + } +} + +pub(super) fn decode_internal( + data: &mut [u8], + settings: &Wlg0Settings, + decoder: &mut D, +) -> anyhow::Result<()> { + if settings.enable_obfuscation { + deobfuscate(data); + } + + let data = if settings.enable_compression { + decompress_data(data)? + } else { + data.to_vec() + }; + + let mut reader = std::io::Cursor::new(&data); + let header = Wlg0Header::read(&mut reader)?; + + let num_splats = header.num_splats as usize; + decoder.init_num_splats(num_splats); + if !settings.enable_split_dims { + return Err(anyhow!("Unsupported WLG !settings.enable_split_dims")); + } + + let mut data_u8: Vec = vec![0; num_splats]; + + if settings.enable_split_center_bytes { + let mut data_u32: Vec = vec![0; num_splats]; + for d in 0..3 { + data_u32.iter_mut().for_each(|v| *v = 0); + + if settings.enable_24bit_center { + reader.read_exact(&mut data_u8)?; + if settings.enable_first_differences { + first_cumulative(&mut data_u8); + } + for (i, &byte) in data_u8.iter().enumerate() { + data_u32[i] = (byte as u32) << 16; + } + } + reader.read_exact(&mut data_u8)?; + if settings.enable_first_differences { + first_cumulative(&mut data_u8); + } + for (i, &byte) in data_u8.iter().enumerate() { + data_u32[i] |= (byte as u32) << 8; + } + reader.read_exact(&mut data_u8)?; + if settings.enable_first_differences { + first_cumulative(&mut data_u8); + } + for (i, &byte) in data_u8.iter().enumerate() { + data_u32[i] |= byte as u32; + } + + let resolution = if settings.enable_24bit_center { + 16777215.0 + } else { + 65535.0 + }; + let scale = header.center_scale / resolution; + let offset = header.center_offset[d]; + for (i, &value) in data_u32.iter().enumerate() { + decoder.write_center(i, d, value as f32 * scale + offset); + } + } + } else { + return Err(anyhow!( + "Unsupported WLG !settings.enable_split_center_bytes" + )); + } + + for d in 0..3 { + reader.read_exact(&mut data_u8)?; + let scale = header.ln_scale_max - header.ln_scale_min; + let offset = header.ln_scale_min; + for (i, &byte) in data_u8.iter().enumerate() { + let float = ((byte as f32 / 255.0) * scale + offset).exp(); + decoder.write_scale(i, d, float); + } + } + + { + let mut quaternions: Vec = vec![0; num_splats * 3]; + for d in 0..3 { + reader.read_exact(&mut data_u8)?; + for (i, &byte) in data_u8.iter().enumerate() { + quaternions[i * 3 + d] = byte as i8; + } + } + for i in 0..num_splats { + let quat: [f32; 3] = [ + quaternions[i * 3 + 0] as f32 / 127.0, + quaternions[i * 3 + 1] as f32 / 127.0, + quaternions[i * 3 + 2] as f32 / 127.0, + ]; + let w = (1.0 - quat.iter().map(|&v| v.powi(2)).sum::()) + .max(0.0) + .sqrt(); + let w8 = (w * 127.0).round() as i8; + + for d in 0..3 { + decoder.write_quaternion_f32(i, d, quat[d]); + decoder.write_quaternion_i8(i, d, quaternions[i * 3 + d]); + } + decoder.write_quaternion_f32(i, 3, w); + decoder.write_quaternion_i8(i, 3, w8); + decoder.write_quaternion_full_f32(i, [quat[0], quat[1], quat[2], w]); + } + } + + reader.read_exact(&mut data_u8)?; + if settings.enable_first_differences { + first_cumulative(&mut data_u8); + } + for (i, &byte) in data_u8.iter().enumerate() { + decoder.write_rgba(i, 3, byte); + } + + for d in 0..3 { + reader.read_exact(&mut data_u8)?; + if settings.enable_first_differences { + first_cumulative(&mut data_u8); + } + for (i, &byte) in data_u8.iter().enumerate() { + decoder.write_rgba(i, d, byte); + } + } + + let position = reader.position() as usize; + if position != data.len() { + return Err(anyhow!("Invalid WLG data size")); + } + + Ok(()) +} diff --git a/rust/wlg/src/wlg0/encode.rs b/rust/wlg/src/wlg0/encode.rs new file mode 100644 index 0000000..319e352 --- /dev/null +++ b/rust/wlg/src/wlg0/encode.rs @@ -0,0 +1,283 @@ +use std::io::Write; + +use super::{compress_data, obfuscate, Wlg0Gaussian, Wlg0Settings, Wlg0Header}; +use crate::ordering::{ + hilbert_coord_to_index, hilbert_coord_to_index_24, morton_coord_to_index, + morton_coord_to_index_24, +}; + +// WLG splat representation with fixed-point encoding. + +#[derive(Debug)] +struct WlgSplat { + order: u128, + center: [u32; 3], + scale: [u8; 3], + quaternion: [i8; 3], + opacity: u8, + color: [u8; 3], +} + +impl WlgSplat { + fn new( + settings: &Wlg0Settings, + index: usize, + center: [f32; 3], + scale: [f32; 3], + mut quaternion: [f32; 4], + opacity: f32, + color: [f32; 3], + ) -> Self { + use std::array::from_fn; + let center = if settings.enable_24bit_center { + from_fn(|d| (center[d] * 16777215.0).clamp(0.0, 16777215.0).round() as u32) + } else { + from_fn(|d| (center[d] * 65535.0).clamp(0.0, 65535.0).round() as u32) + }; + if quaternion[3] < 0.0 { + quaternion = from_fn(|d| -quaternion[d]); + } + Self { + order: if settings.enable_hilbert_reordering { + // Convert X/Y/Z into a single Hilbert curve index + if settings.enable_24bit_center { + hilbert_coord_to_index_24(center) as u128 + } else { + hilbert_coord_to_index(from_fn(|d| center[d] as u16)) as u128 + } + } else if settings.enable_morton_reordering { + // Interleave X/Y/Z bits into a single Morton index + if settings.enable_24bit_center { + morton_coord_to_index_24(center) as u128 + } else { + morton_coord_to_index(from_fn(|d| center[d] as u16)) as u128 + } + } else { + index as u128 + }, + center, + scale: from_fn(|d| (scale[d] * 255.0).clamp(0.0, 255.0).round() as u8), + quaternion: from_fn(|d| (quaternion[d] * 127.0).clamp(-127.0, 127.0).round() as i8), + opacity: (opacity * 255.0).clamp(0.0, 255.0).round() as u8, + color: from_fn(|d| (color[d] * 255.0).clamp(0.0, 255.0).round() as u8), + } + } +} + +// Encoding functions + +fn first_differences(settings: &Wlg0Settings, mut data: Vec) -> Vec { + if settings.enable_first_differences { + super::first_differences(&mut data); + } + data +} + +pub(super) fn encode_internal( + settings: &Wlg0Settings, + gaussians: &[Wlg0Gaussian], +) -> anyhow::Result> { + use std::array::from_fn; + let num_splats = gaussians.len(); + + // Compute min/max bounds for Gsplat centers + let center_min_max = ([f32::INFINITY; 3], [-f32::INFINITY; 3]); + let (center_min, center_max) = gaussians.iter().fold(center_min_max, |(min, max), g| { + let min = from_fn(|i| min[i].min(g.center[i])); + let max = from_fn(|i| max[i].max(g.center[i])); + (min, max) + }); + // println!("Center min: {:?}, max: {:?}", center_min, center_max); + // Compute scale factor and offset for center values + let center_ranges: [f32; 3] = from_fn(|i| center_max[i] - center_min[i]); + let center_scale = center_ranges.into_iter().reduce(|a, b| a.max(b)).unwrap(); + let center_offset = center_min; + + // Compute min/max bounds for Gsplat ln_scales + let ln_scale_min_max = (f32::INFINITY, -f32::INFINITY); + let (ln_scale_min, ln_scale_max) = + gaussians + .iter() + .fold(ln_scale_min_max, |(mut min, mut max), g| { + g.ln_scale.iter().for_each(|&ln_scale| { + let ln_scale = ln_scale.clamp(-10.0, 10.0); + min = min.min(ln_scale); + max = max.max(ln_scale); + }); + (min, max) + }); + // println!("ln_scale min: {}, max: {}", ln_scale_min, ln_scale_max); + + let mut splats: Vec<_> = gaussians + .iter() + .enumerate() + .map(|(index, g)| { + WlgSplat::new( + settings, + index, + from_fn(|d| (g.center[d] - center_offset[d]) / center_scale), + from_fn(|d| (g.ln_scale[d] - ln_scale_min) / (ln_scale_max - ln_scale_min)), + g.quaternion, + g.opacity, + from_fn(|d| g.color[d]), + ) + }) + .collect(); + + // Reorder splats using the provided ordering key, either Morton or original index. + splats.sort_by_key(|splat| splat.order); + + // Create buffer to write header and splats to + let mut buffer: Vec = Vec::new(); + + let header = Wlg0Header { + center_scale, + center_offset, + ln_scale_min, + ln_scale_max, + num_splats: num_splats as u32, + max_sh_order: 0, + num_sh_splats: [num_splats as u32, 0, 0, 0], + }; + header.write(&mut buffer)?; + + if settings.enable_split_dims { + // Write dimensions separately, i.e. a column-oriented format. + + for d in 0..3 { + if settings.enable_split_center_bytes { + // Split center values into separate bytes (MSB order) + if settings.enable_24bit_center { + let data: Vec = splats + .iter() + .map(|splat| (splat.center[d] >> 16) as u8) + .collect(); + buffer.write_all(&first_differences(settings, data))?; + } + let data: Vec = splats + .iter() + .map(|splat| (splat.center[d] >> 8) as u8) + .collect(); + buffer.write_all(&first_differences(settings, data))?; + let data: Vec = splats.iter().map(|splat| splat.center[d] as u8).collect(); + buffer.write_all(&first_differences(settings, data))?; + } else { + if settings.enable_24bit_center { + // Write 24-bit center values into u8 array in LSB order + let data: Vec = splats + .iter() + .flat_map(|splat| { + let center = splat.center[d]; + [center as u8, (center >> 8) as u8, (center >> 16) as u8] + }) + .collect(); + buffer.write_all(&data)?; + } else { + let data_u16: Vec = + splats.iter().map(|splat| splat.center[d] as u16).collect(); + let data: Vec = data_u16 + .iter() + .flat_map(|&v| v.to_le_bytes().to_vec()) + .collect(); + buffer.write_all(&data)?; + } + } + } + for d in 0..3 { + let data: Vec = splats.iter().map(|splat| splat.scale[d]).collect(); + buffer.write_all(&data)?; + } + for d in 0..3 { + let data: Vec = splats + .iter() + .map(|splat| splat.quaternion[d] as u8) + .collect(); + buffer.write_all(&data)?; + } + { + let data: Vec = splats.iter().map(|splat| splat.opacity).collect(); + buffer.write_all(&first_differences(settings, data))?; + } + for d in 0..3 { + let data: Vec = splats.iter().map(|splat| splat.color[d]).collect(); + buffer.write_all(&first_differences(settings, data))?; + } + } else { + // !enable_split_dims, write all dimensions interleaved (array of structs). + + if settings.enable_split_center_bytes { + if settings.enable_24bit_center { + let data: Vec = splats + .iter() + .flat_map(|splat| splat.center.iter().map(|&v| (v >> 16) as u8)) + .collect(); + buffer.write_all(&first_differences(settings, data))?; + } + let data: Vec = splats + .iter() + .flat_map(|splat| splat.center.iter().map(|&v| (v >> 8) as u8)) + .collect(); + buffer.write_all(&first_differences(settings, data))?; + let data: Vec = splats + .iter() + .flat_map(|splat| splat.center.iter().map(|&v| v as u8)) + .collect(); + buffer.write_all(&first_differences(settings, data))?; + } else { + if settings.enable_24bit_center { + let data: Vec = splats + .iter() + .flat_map(|splat| { + splat + .center + .iter() + .flat_map(|&d| [d as u8, (d >> 8) as u8, (d >> 16) as u8]) + }) + .collect(); + buffer.write_all(&data)?; + } else { + let data_u16: Vec = splats + .iter() + .flat_map(|splat| splat.center.iter().map(|&v| v as u16)) + .collect(); + let data: Vec = data_u16 + .iter() + .flat_map(|&v| v.to_le_bytes().to_vec()) + .collect(); + buffer.write_all(&data)?; + } + } + + let data: Vec = splats + .iter() + .flat_map(|splat| splat.scale.iter().copied()) + .collect(); + buffer.write_all(&data)?; + + let data: Vec = splats + .iter() + .flat_map(|splat| splat.quaternion.iter().map(|&v| v as u8)) + .collect(); + buffer.write_all(&data)?; + + let data: Vec = splats.iter().map(|splat| splat.opacity).collect(); + buffer.write_all(&first_differences(settings, data))?; + + let data: Vec = splats + .iter() + .flat_map(|splat| splat.color.iter().copied()) + .collect(); + buffer.write_all(&first_differences(settings, data))?; + } + + let mut payload = if settings.enable_compression { + compress_data(&buffer, settings.zstd_compression_level)? + } else { + buffer + }; + + if settings.enable_obfuscation { + obfuscate(&mut payload); + } + Ok(payload) +} diff --git a/rust/wlg/src/wlg0/mod.rs b/rust/wlg/src/wlg0/mod.rs new file mode 100644 index 0000000..50722e0 --- /dev/null +++ b/rust/wlg/src/wlg0/mod.rs @@ -0,0 +1,274 @@ +use serde::{Deserialize, Serialize}; +use std::io::{Read, Write}; + +use anyhow::anyhow; + +mod decode; +mod encode; + +#[derive(Debug, Default, Clone)] +pub struct Wlg0Gaussian { + pub center: [f32; 3], + pub ln_scale: [f32; 3], + pub quaternion: [f32; 4], + pub opacity: f32, + pub color: [f32; 3], +} + +pub const LN_SCALE_MIN: f32 = -9.0; +pub const LN_SCALE_MAX: f32 = 9.0; +pub const LN_RESCALE: f32 = (LN_SCALE_MAX - LN_SCALE_MIN) / 254.0; // 1..=255 + +pub fn encode_scale(scale: f32) -> u8 { + if scale == 0.0 { + 0 + } else { + // Allow scales below LN_SCALE_MIN to be encoded as 0, which signifies a 2DGS + ((scale.ln() - LN_SCALE_MIN) / LN_RESCALE + 1.0).clamp(0.0, 255.0).round() as u8 + } +} + +pub fn decode_scale(scale: u8) -> f32 { + if scale == 0 { + 0.0 + } else { + (LN_SCALE_MIN + (scale - 1) as f32 * LN_RESCALE).exp() + } +} + +pub struct PackedSplats(pub Vec); + +#[derive(Debug, Serialize, Deserialize)] +struct Wlg0Signature { + magic: [u8; 4], // "WLG0" + version: u32, // 1 or 2 +} + +impl Wlg0Signature { + const MAGIC: [u8; 4] = *b"WLG0"; + + fn new(version: u32) -> Self { + Self { + magic: Self::MAGIC, + version, + } + } + + fn check_version(&self) -> Option { + if self.magic == Self::MAGIC { + Some(self.version) + } else { + None + } + } + + fn write(&self, writer: &mut W) -> std::io::Result<()> { + writer.write_all(&bincode::serialize(self).unwrap()) + } + + fn read(reader: &mut R) -> std::io::Result { + let mut buf = [0; std::mem::size_of::()]; + reader.read_exact(&mut buf)?; + Ok(bincode::deserialize(&buf).unwrap()) + } +} + +#[derive(Debug, Clone)] +pub struct Wlg0Settings { + pub version: u32, + pub enable_compression: bool, + pub enable_first_differences: bool, + pub enable_morton_reordering: bool, + pub enable_hilbert_reordering: bool, + pub enable_split_center_bytes: bool, + pub enable_obfuscation: bool, + pub enable_split_dims: bool, + pub enable_24bit_center: bool, + pub zstd_compression_level: i32, // 0 selects default level (3), max is 22 +} + +const WLG012_SETTINGS: [Wlg0Settings; 3] = [ + // 0: WLGv0: Not a valid version, for testing purposes only + Wlg0Settings { + version: 0, + enable_compression: true, + enable_first_differences: true, + enable_morton_reordering: false, + enable_hilbert_reordering: true, + enable_split_center_bytes: true, + enable_obfuscation: true, + enable_split_dims: true, + enable_24bit_center: true, + zstd_compression_level: 0, + }, + // 1: WLGv1: Default settings for WLG v1 files + Wlg0Settings { + version: 1, + enable_compression: true, + enable_first_differences: true, + enable_morton_reordering: true, + enable_hilbert_reordering: false, + enable_split_center_bytes: true, + enable_obfuscation: true, + enable_split_dims: true, + enable_24bit_center: false, + zstd_compression_level: 0, + }, + // 2: WLGv2: Default settings for WLG v2 files + Wlg0Settings { + version: 2, + enable_compression: true, + enable_first_differences: true, + enable_morton_reordering: true, + enable_hilbert_reordering: false, + enable_split_center_bytes: true, + enable_obfuscation: true, + enable_split_dims: true, + enable_24bit_center: true, + zstd_compression_level: 0, + }, +]; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Wlg0Header { + // center[d] = center_int[d] * center_scale + center_offset + pub center_scale: f32, + pub center_offset: [f32; 3], + // scale[d] = exp(scale_int[d] / 255 * (scale_max - scale_min) + scale_min) + pub ln_scale_min: f32, + pub ln_scale_max: f32, + // Total # splats, regardless of SH order + pub num_splats: u32, + // 0 for "no spherical harmonics" + pub max_sh_order: u32, + // Supports maximum of SH=3 + pub num_sh_splats: [u32; 4], +} + +impl Wlg0Header { + pub fn write(&self, writer: &mut W) -> std::io::Result<()> { + writer.write_all(&bincode::serialize(self).unwrap()) + } + + pub fn read(reader: &mut R) -> std::io::Result { + let mut buf = [0; std::mem::size_of::()]; + reader.read_exact(&mut buf)?; + Ok(bincode::deserialize(&buf).unwrap()) + } +} + +fn obfuscate(data: &mut [u8]) { + let mut prev: u8 = 0; + let mut state: u32 = 0x1AB51AB5; + for byte in data { + state = state.wrapping_mul(1664525).wrapping_add(1013904223); + let rand_byte = (state >> 8) as u8; + let obf_byte = (*byte ^ prev).rotate_left(3) ^ rand_byte; + prev = obf_byte; + *byte = obf_byte; + } +} + +fn deobfuscate(data: &mut [u8]) { + let mut prev: u8 = 0; + let mut state: u32 = 0x1AB51AB5; + for obf_byte in data { + state = state.wrapping_mul(1664525).wrapping_add(1013904223); + let rand_byte = (state >> 8) as u8; + let tmp = (*obf_byte ^ rand_byte).rotate_right(3); + let byte = tmp ^ prev; + prev = *obf_byte; + *obf_byte = byte; + } +} + +fn compress_data(data: &[u8], _zstd_compression_level: i32) -> anyhow::Result> { + use ruzstd::encoding::{compress_to_vec, CompressionLevel}; + let compressed_data = compress_to_vec(data, CompressionLevel::Fastest); + Ok(compressed_data) +} + +fn decompress_data(data: &[u8]) -> anyhow::Result> { + let mut decoder = ruzstd::decoding::StreamingDecoder::new(data)?; + let mut decompressed_data = Vec::new(); + decoder.read_to_end(&mut decompressed_data)?; + Ok(decompressed_data) +} + +fn first_differences(data: &mut [u8]) { + // Compute first differences for array to aid compression + for i in (1..data.len()).rev() { + data[i] = data[i].wrapping_sub(data[i - 1]); + } +} + +fn first_cumulative(data: &mut [u8]) { + // Invert first differences + for i in 1..data.len() { + data[i] = data[i].wrapping_add(data[i - 1]); + } +} + +pub fn decode12(bytes: &mut [u8]) -> anyhow::Result<(Wlg0Settings, Vec)> { + let (offset, version) = { + let mut reader = std::io::Cursor::new(&bytes); + let signature = Wlg0Signature::read(&mut reader)?; + let Some(version) = signature.check_version() else { + return Err(anyhow!("Invalid WLG signature")); + }; + if (version != 1) && (version != 2) { + return Err(anyhow!("Unsupported WLG version")); + } + let offset = reader.position() as usize; + (offset, version) + }; + + let settings = WLG012_SETTINGS[version as usize].clone(); + let mut gaussians = Vec::new(); + decode::decode_internal(&mut bytes[offset..], &settings, &mut gaussians)?; + Ok((settings, gaussians)) +} + +pub fn decode12_packed(bytes: &mut [u8]) -> anyhow::Result<(Wlg0Settings, PackedSplats)> { + let (offset, version) = { + let mut reader = std::io::Cursor::new(&bytes); + let signature = Wlg0Signature::read(&mut reader)?; + let Some(version) = signature.check_version() else { + return Err(anyhow!("Invalid WLG signature")); + }; + if (version != 1) && (version != 2) { + return Err(anyhow!("Unsupported WLG version")); + } + let offset = reader.position() as usize; + (offset, version) + }; + + let settings = WLG012_SETTINGS[version as usize].clone(); + let mut packed_splats = PackedSplats(Vec::new()); + decode::decode_internal(&mut bytes[offset..], &settings, &mut packed_splats)?; + Ok((settings, packed_splats)) +} + +pub enum Wlg0EncodeSettings { + Wlg1, + Wlg2, + Custom(Wlg0Settings), +} + +pub fn encode12( + settings: &Wlg0EncodeSettings, + gaussians: &[Wlg0Gaussian], +) -> anyhow::Result<(Wlg0Settings, Vec)> { + let settings = match settings { + Wlg0EncodeSettings::Wlg1 => &WLG012_SETTINGS[1], + Wlg0EncodeSettings::Wlg2 => &WLG012_SETTINGS[2], + Wlg0EncodeSettings::Custom(custom) => custom, + } + .clone(); + let payload = encode::encode_internal(&settings, gaussians)?; + + let mut buffer = Vec::new(); + Wlg0Signature::new(settings.version).write(&mut buffer)?; + buffer.write_all(&payload)?; + Ok((settings, buffer)) +} diff --git a/scripts/build-site.js b/scripts/build-site.js new file mode 100644 index 0000000..daa2c53 --- /dev/null +++ b/scripts/build-site.js @@ -0,0 +1,32 @@ +import fs from "node:fs"; +import { copyFile, mkdir, rename } from "node:fs/promises"; +import path from "node:path"; + +function copyDir(src, dest) { + if (!fs.existsSync(dest)) { + fs.mkdirSync(dest, { recursive: true }); + } + + for (const entry of fs.readdirSync(src, { withFileTypes: true })) { + const srcPath = path.join(src, entry.name); + const destPath = path.join(dest, entry.name); + + if (entry.isDirectory()) { + copyDir(srcPath, destPath); + } else { + fs.copyFileSync(srcPath, destPath); + } + } +} + +// Example usage: +const sourceDir = "examples"; +const destinationDir = "site/examples"; + +copyDir("examples", "site/examples"); +await copyFile("index.html", "site/examples/index.html"); +await rename("site/examples/viewer", "site/viewer"); +await mkdir("site/examples/vendor", { recursive: true }); +copyDir("node_modules/three", "site/examples/js/vendor/three"); +copyDir("dist", "site/dist"); +console.log("Site generated in site directory."); diff --git a/scripts/clean-assets.js b/scripts/clean-assets.js new file mode 100644 index 0000000..e66de51 --- /dev/null +++ b/scripts/clean-assets.js @@ -0,0 +1,8 @@ +import { existsSync } from "node:fs"; +import { rm } from "node:fs/promises"; +const assetsDirectory = "examples/assets/"; + +if (existsSync(assetsDirectory)) { + await rm(assetsDirectory, { recursive: true, force: true }); + console.log(`Directory ${assetsDirectory} deleted`); +} diff --git a/scripts/clean-site.js b/scripts/clean-site.js new file mode 100644 index 0000000..5bdd605 --- /dev/null +++ b/scripts/clean-site.js @@ -0,0 +1,8 @@ +import { existsSync } from "node:fs"; +import { rm } from "node:fs/promises"; +const siteDirectory = "site"; + +if (existsSync(siteDirectory)) { + await rm(siteDirectory, { recursive: true, force: true }); + console.log(`Directory ${siteDirectory} deleted`); +} diff --git a/scripts/download-assets.js b/scripts/download-assets.js new file mode 100644 index 0000000..8c6401c --- /dev/null +++ b/scripts/download-assets.js @@ -0,0 +1,64 @@ +import { createWriteStream, existsSync } from "node:fs"; +import { mkdir, readFile, rm } from "node:fs/promises"; +import * as http from "node:http"; +import * as https from "node:https"; +import { get } from "node:https"; +import { basename, join } from "node:path"; +import { URL } from "node:url"; + +const assetsDirectory = "examples/assets/"; + +await mkdir(assetsDirectory, { recursive: true }); + +const urls = JSON.parse(await readFile("examples/assets.json", "utf8")); +let filesToDownload = 0; + +for (const [key, data] of Object.entries(urls)) { + const url = data.url; + const directory = assetsDirectory + data.directory; + const filePath = join(directory, key); + + await mkdir(directory, { recursive: true }); + + if (existsSync(filePath)) { + console.log( + `File: ${filePath} ' exists. Do not download again. npm run assets:clean to delete`, + ); + continue; + } + downloadFile(url, key, filePath); + console.log(`Downloading file ${key}, from URL: ${url}`); +} + +function downloadFile(fileUrl, fileName, filePath) { + const url = new URL(fileUrl); + const file = createWriteStream(filePath); + + const protocol = url.protocol === "https:" ? https.get : http.get; + + filesToDownload++; + + protocol(fileUrl, (response) => { + if (response.statusCode !== 200) { + filesToDownload--; + console.error( + `Download failed: ${response.statusCode} ${response.statusMessage}`, + ); + return; + } + + response.pipe(file); + + file.on("finish", () => { + file.close(() => { + filesToDownload--; + console.log(`${fileName} downloaded to ${filePath}`); + if (filesToDownload === 0) { + console.log("Success! All assets downloaded"); + } + }); + }); + }).on("error", (err) => { + console.error(`Error: ${err.message}`); + }); +} diff --git a/scripts/serve-site.js b/scripts/serve-site.js new file mode 100644 index 0000000..0305efb --- /dev/null +++ b/scripts/serve-site.js @@ -0,0 +1,64 @@ +import fs from "node:fs/promises"; +import http from "node:http"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +// Resolve __dirname in ESM +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +// Get directory to serve +const root = path.resolve(process.argv[2] || "."); + +const mimeTypes = { + ".html": "text/html", + ".js": "text/javascript", + ".css": "text/css", + ".json": "application/json", + ".png": "image/png", + ".jpg": "image/jpeg", + ".svg": "image/svg+xml", +}; + +const server = http.createServer(async (req, res) => { + try { + const requestedPath = decodeURIComponent(req.url.split("?")[0]); + const fullPath = path.join(root, requestedPath); + const safePath = path.normalize(fullPath); + + if (!safePath.startsWith(root)) { + res.writeHead(403); + return res.end("Access denied"); + } + + const stats = await fs.stat(safePath); + + if (stats.isDirectory()) { + const indexPath = path.join(safePath, "index.html"); + try { + const content = await fs.readFile(indexPath); + res.writeHead(200, { "Content-Type": "text/html" }); + return res.end(content); + } catch { + res.writeHead(403); + return res.end("Directory listing is disabled"); + } + } else { + const ext = path.extname(safePath).toLowerCase(); + const contentType = mimeTypes[ext] || "application/octet-stream"; + const content = await fs.readFile(safePath); + res.writeHead(200, { "Content-Type": contentType }); + res.end(content); + } + } catch (err) { + res.writeHead(err.code === "ENOENT" ? 404 : 500); + res.end( + err.code === "ENOENT" ? "Not Found" : `Server Error: ${err.message}`, + ); + } +}); + +const PORT = process.env.PORT || 3000; +server.listen(PORT, () => { + console.log(`Serving ${root} at http://localhost:${PORT}`); +}); diff --git a/src/ForgeRenderer.ts b/src/ForgeRenderer.ts new file mode 100644 index 0000000..4c71cfe --- /dev/null +++ b/src/ForgeRenderer.ts @@ -0,0 +1,856 @@ +import * as THREE from "three"; + +import { ForgeViewpoint, type ForgeViewpointOptions } from "./ForgeViewpoint"; +import { PackedSplats } from "./PackedSplats"; +import { RgbaArray } from "./RgbaArray"; +import { type GeneratorMapping, SplatAccumulator } from "./SplatAccumulator"; +import { SplatEdit } from "./SplatEdit"; +import { SplatGenerator, SplatModifier } from "./SplatGenerator"; +import { SplatGeometry } from "./SplatGeometry"; +import { SplatMesh } from "./SplatMesh"; +import { + DynoVec3, + DynoVec4, + Gsplat, + TPackedSplats, + dynoBlock, + readPackedSplat, + transformGsplat, +} from "./dyno"; +import { getShaders } from "./shaders"; +import { + averagePositions, + averageQuaternions, + cloneClock, + withinCoorientDist, +} from "./utils"; + +// ForgeRenderer aggregates splats from multiple generators into a single +// accumulated collection per frame. In normal operation we only need a +// maximum of 3 accumulators: One currently being viewed, one currently +// being sorted, and one more for generating the next frame. Accumulators +// must be "released" by each viewpoint using it, so in unusual cases +// such as slow render-outs, we may want to allow more than 3 so the +// pipeline can continue generating new frames, but we limit to a maximum +// of 5 to avoid excessive memory usage. +const MAX_ACCUMULATORS = 5; + +// Scene.onBeforeRender monkey-patch to +// inject a ForgeRenderer into a scene with SplatMeshes if there isn't +// one already. Restore original Scene.onBeforeRenderer and Scene.add when done. +let hasSplatMesh = false; +let hasForgeRenderer = false; + +let forgeRendererInstance: ForgeRenderer; + +const sceneAdd = THREE.Scene.prototype.add; +THREE.Scene.prototype.add = function (object) { + hasSplatMesh = hasSplatMesh || object instanceof SplatMesh; + hasForgeRenderer = hasForgeRenderer || object instanceof ForgeRenderer; + sceneAdd.call(this, object); + return this; +}; + +const sceneOnBeforeRender = THREE.Scene.prototype.onBeforeRender; +THREE.Scene.prototype.onBeforeRender = function (renderer) { + if (!hasSplatMesh) { + return; + } + if (!hasForgeRenderer) { + const forge = forgeRendererInstance || new ForgeRenderer({ renderer }); + this.add(forge); + } + THREE.Scene.prototype.onBeforeRender = sceneOnBeforeRender; + THREE.Scene.prototype.add = sceneAdd; +}; + +export type ForgeRendererOptions = { + // Pass in your THREE.WebGLRenderer instance so Forge can perform work + // outside the usual render loop. Should be created with antialias: false + // (default setting) as WebGL anti-aliasing doesn't improve Gaussian Splatting + // rendering and significantly reduces performance. + renderer: THREE.WebGLRenderer; + // Pass in a THREE.Clock to synchronize time-based effects across different + // systems. Alternatively, you can set the ForgeRenderer properties time and + // deltaTime directly. (default: new THREE.Clock) + clock?: THREE.Clock; + // Controls whether to check and automatically update Gsplat collection after + // each frame render. (default: true) + autoUpdate?: boolean; + // Controls whether to update the Gsplats before or after rendering. For WebXR + // this must be false in order to complete rendering as soon as possible. + // (default: false) + preUpdate?: boolean; + // Distance threshold for ForgeRenderer movement triggering a Gsplat update at + // the new origin. (default: 1.0) + originDistance?: number; + // Maximum standard deviations from the center to render Gaussians. Values + // Math.sqrt(5)..Math.sqrt(8) produce good results and can be tweaked for + // performance. (default: Math.sqrt(8)) + maxStdDev?: number; + // Enable 2D Gaussian splatting rendering ability. When this mode is enabled, + // any scale x/y/z component that is exactly 0 (minimum quantized value) results + // in the other two non-0 axis being interpreted as an oriented 2D Gaussian Splat, + // rather instead of the usual projected 3DGS Z-slice. When reading PLY files, + // scale values less than e^-20 will be interpreted as 0. (default: true) + enable2DGS?: boolean; + // Scalar value to add to 2D splat covariance diagonal, effectively blurring + + // enlarging splats. In scenes trained without the Gsplat anti-aliasing tweak + // this value was typically 0.3, but with anti-aliasing it is 0.0 (default: 0.0) + preBlurAmount?: number; + // Scalar value to add to 2D splat covarianve diagonal, with opacity adjustment + // to correctly account for "blurring" when anti-aliasing. Typically 0.3 + // (equivalent to approx 0.5 pixel radius) in scenes trained with anti-aliasing. + blurAmount?: number; + // Modulate Gaussian kernel falloff. 0 means "no falloff, flat shading", + // while 1 is the normal Gaussian kernel. (default: 1.0) + falloff?: number; + // X/Y clipping boundary factor for Gsplat centers against view frustum. + // 1.0 clips any centers that are exactly out of bounds, while 1.4 clips + // centers that are 40% beyond the bounds. (default: 1.4) + clipXY?: number; + // Configures the ForgeViewpointOptions for the default ForgeViewpoint + // associated with this ForgeRenderer. Notable option: sortRadial (sort by + // radial distance or Z-depth) + view?: ForgeViewpointOptions; +}; + +export class ForgeRenderer extends THREE.Mesh { + renderer: THREE.WebGLRenderer; + material: THREE.ShaderMaterial; + uniforms: ReturnType; + + autoUpdate: boolean; + preUpdate: boolean; + originDistance: number; + maxStdDev: number; + enable2DGS: boolean; + preBlurAmount: number; + blurAmount: number; + falloff: number; + clipXY: number; + + time?: number; + deltaTime?: number; + clock: THREE.Clock; + + // Latest Gsplat collection being displayed + active: SplatAccumulator; + // Free list of accumulators for reuse + private freeAccumulators: SplatAccumulator[]; + // Total number of accumulators currently allocated + private accumulatorCount: number; + // Default ForgeViewpoint used for rendering to the canvas + defaultView: ForgeViewpoint; + // List of ForgeViewpoints with autoUpdate enabled + autoViewpoints: ForgeViewpoint[] = []; + + // Dynos used to transform Gsplats to the accumulator coordinate system + private rotateToAccumulator = new DynoVec4({ value: new THREE.Quaternion() }); + private translateToAccumulator = new DynoVec3({ value: new THREE.Vector3() }); + private modifier: SplatModifier; + + // Last rendered frame number so we know when we're rendering a new frame + private lastFrame = -1; + // Last update timestamp to compute deltaTime + private lastUpdateTime: number | null = null; + // List of cameras used for the current viewpoint (for WebXR) + private defaultCameras: THREE.Matrix4[] = []; + + // Should be set to the defaultView, but can be temporarily changed to another + // viewpoint using prepareViewpoint() for rendering from a different viewpoint. + viewpoint: ForgeViewpoint; + + // Holds data needed to perform a scheduled Gsplat update. + private pendingUpdate: { + scene: THREE.Scene; + originToWorld: THREE.Matrix4; + } | null = null; + + // Internal ForgeViewpoint used for environment map rendering. + private envViewpoint: ForgeViewpoint | null = null; + + // Data and buffers used for environment map rendering + private static cubeRender: { + target: THREE.WebGLCubeRenderTarget; + camera: THREE.CubeCamera; + near: number; + far: number; + } | null = null; + private static pmrem: THREE.PMREMGenerator | null = null; + + constructor(options: ForgeRendererOptions) { + const uniforms = ForgeRenderer.makeUniforms(); + const shaders = getShaders(); + const material = new THREE.ShaderMaterial({ + glslVersion: THREE.GLSL3, + vertexShader: shaders.splatVertex, + fragmentShader: shaders.splatFragment, + uniforms, + transparent: true, + blending: THREE.NormalBlending, + depthTest: true, + depthWrite: false, + side: THREE.DoubleSide, + }); + + super(EMPTY_GEOMETRY, material); + // Disable frustum culling because we want to always draw them all + // and cull Gsplats individually in the shader + this.frustumCulled = false; + + this.renderer = options.renderer; + this.material = material; + this.uniforms = uniforms; + + // Create a Gsplat modifier that takes the output of any SplatGenerator + // and transforms them into the accumulator's coordinate system + const modifier = dynoBlock( + { gsplat: Gsplat }, + { gsplat: Gsplat }, + ({ gsplat }) => { + if (!gsplat) { + throw new Error("gsplat not defined"); + } + gsplat = transformGsplat(gsplat, { + rotate: this.rotateToAccumulator, + translate: this.translateToAccumulator, + }); + return { gsplat }; + }, + ); + this.modifier = new SplatModifier(modifier); + + this.autoUpdate = options.autoUpdate ?? true; + this.preUpdate = options.preUpdate ?? false; + this.originDistance = options.originDistance ?? 1; + this.maxStdDev = options.maxStdDev ?? Math.sqrt(8.0); + this.enable2DGS = options.enable2DGS ?? true; + this.preBlurAmount = options.preBlurAmount ?? 0.0; + this.blurAmount = options.blurAmount ?? 0.3; + this.falloff = options.falloff ?? 1.0; + this.clipXY = options.clipXY ?? 1.4; + + this.active = new SplatAccumulator(); + this.accumulatorCount = 1; + this.freeAccumulators = []; + // Start with the minimum of 2 total accumulators + for (let count = 0; count < 1; ++count) { + this.freeAccumulators.push(new SplatAccumulator()); + this.accumulatorCount += 1; + } + + // Create a default ForgeViewpoint that is used when we call render() + // on the scene and has the sorted Gsplat collection from that viewpoint. + this.defaultView = new ForgeViewpoint({ + ...options.view, + autoUpdate: true, + forge: this, + }); + this.viewpoint = this.defaultView; + this.prepareViewpoint(this.viewpoint); + + this.clock = options.clock ? cloneClock(options.clock) : new THREE.Clock(); + + forgeRendererInstance = this; + } + + static makeUniforms() { + // Create uniforms used for Gsplat vertex and fragment shaders + const uniforms = { + // Size of render viewport in pixels + renderSize: { value: new THREE.Vector2() }, + // Total number of Gsplats in packedSplats to render + numSplats: { value: 0 }, + // SplatAccumulator to view transformation quaternion + renderToViewQuat: { value: new THREE.Quaternion() }, + // SplatAccumulator to view transformation translation + renderToViewPos: { value: new THREE.Vector3() }, + // Maximum distance (in stddevs) from Gsplat center to render + maxStdDev: { value: 1.0 }, + // Enable interpreting 0-thickness Gsplats as 2DGS + enable2DGS: { value: false }, + // Add to projected 2D splat covariance diagonal (thickens and brightens) + preBlurAmount: { value: 0.0 }, + // Add to 2D splat covariance diagonal and adjust opacity (anti-aliasing) + blurAmount: { value: 0.3 }, + // Modulate Gaussian kernal falloff. 0 means "no falloff, flat shading", + // 1 is normal e^-x^2 falloff. + falloff: { value: 1.0 }, + // Clip Gsplats that are clipXY times beyond the +-1 frustum bounds + clipXY: { value: 1.4 }, + // Gsplat collection to render + packedSplats: { type: "t", value: PackedSplats.getEmpty() }, + // Time in seconds for time-based effects + time: { value: 0 }, + // Delta time in seconds since last frame + deltaTime: { value: 0 }, + // Whether to encode Gsplat with linear RGB (for environment mapping) + encodeLinear: { value: false }, + // Debug flag that alternates each frame + debugFlag: { value: false }, + }; + return uniforms; + } + + private canAllocAccumulator(): boolean { + // Returns true if can allocate an accumulator immediately + return ( + this.freeAccumulators.length > 0 || + this.accumulatorCount < MAX_ACCUMULATORS + ); + } + + private maybeAllocAccumulator(): SplatAccumulator | null { + // Allocate an accumulator immediately if possible, else return null + let accumulator = this.freeAccumulators.pop(); + if (accumulator === undefined) { + if (this.accumulatorCount >= MAX_ACCUMULATORS) { + return null; + } + accumulator = new SplatAccumulator(); + this.accumulatorCount += 1; + } + accumulator.refCount = 1; + return accumulator; + } + + releaseAccumulator(accumulator: SplatAccumulator) { + // Decrement reference count and recycle if no longer in use + accumulator.refCount -= 1; + if (accumulator.refCount === 0) { + this.freeAccumulators.push(accumulator); + } + } + + newViewpoint(options: ForgeViewpointOptions) { + // Create a new ForgeViewpoint for this ForgeRenderer. + // Note that every ForgeRenderer has an initial forge.defaultView: ForgeViewpoint + // from construction, which is used for the default canvas render loop. + // Calling this method allows you to create additional viewpoints, which can be + // updated automatically each frame (performing Gsplat sorting every time there + // is an update), or updated on-demand for controlled rendering for video render + // or similar applications. + return new ForgeViewpoint({ ...options, forge: this }); + } + + onBeforeRender( + renderer: THREE.WebGLRenderer, + scene: THREE.Scene, + camera: THREE.Camera, + ) { + // Called by Three.js before rendering this ForgeRenderer. + // At this point we can't modify the geometry or material, all these must + // be set in the scene already before this is called. Update the uniforms + // to render the Gsplats from the current active viewpoint. + const time = this.time ?? this.clock.getElapsedTime(); + const deltaTime = time - (this.viewpoint.lastTime ?? time); + this.viewpoint.lastTime = time; + + const frame = renderer.info.render.frame; + const isNewFrame = frame !== this.lastFrame; + this.lastFrame = frame; + + const viewpoint = this.viewpoint; + if (viewpoint === this.defaultView) { + // When rendering is triggered on the default viewpoint, + // perform automatic updates. + if (isNewFrame) { + if (!renderer.xr.isPresenting) { + // Non-WebXR mode, just a single camera + this.defaultView.viewToWorld = camera.matrixWorld.clone(); + this.defaultCameras = [this.defaultView.viewToWorld]; + } else { + // In WebXR mode we are called multiple times, once for each eye, + // so use their average to compute the sort center. + const cameras = renderer.xr.getCamera().cameras; + this.defaultCameras = [ + cameras[0].matrixWorld, + cameras[1].matrixWorld, + ]; + this.defaultView.viewToWorld = + averageOriginToWorlds(this.defaultCameras) ?? new THREE.Matrix4(); + } + } + + if (this.autoUpdate) { + this.update({ scene, viewToWorld: this.defaultView.viewToWorld }); + } + } + + // Update uniforms for rendering + + if (isNewFrame) { + // Keep these uniforms the same for both eyes if in WebXR + this.uniforms.time.value = time; + this.uniforms.deltaTime.value = deltaTime; + // Alternating debug flag that can aid in visual debugging + this.uniforms.debugFlag.value = (performance.now() / 1000.0) % 2.0 < 1.0; + } + + if (viewpoint.target) { + // Rendering to a texture target, so its dimensions + this.uniforms.renderSize.value.set( + viewpoint.target.width, + viewpoint.target.height, + ); + } else { + // Rendering to the canvas or WebXR + const renderSize = renderer.getSize(this.uniforms.renderSize.value); + if (renderSize.x === 1 && renderSize.y === 1) { + // WebXR mode on Apple Vision Pro returns 1x1 when presenting. + // Use a different means to figure out the render size. + const baseLayer = renderer.xr.getSession()?.renderState.baseLayer; + if (baseLayer) { + renderSize.x = baseLayer.framebufferWidth; + renderSize.y = baseLayer.framebufferHeight; + } + } + } + + // Update uniforms from instance properties + this.uniforms.encodeLinear.value = viewpoint.encodeLinear; + this.uniforms.maxStdDev.value = this.maxStdDev; + this.uniforms.enable2DGS.value = this.enable2DGS; + this.uniforms.preBlurAmount.value = this.preBlurAmount; + this.uniforms.blurAmount.value = this.blurAmount; + this.uniforms.falloff.value = this.falloff; + this.uniforms.clipXY.value = this.clipXY; + + // Calculate the transform from the accumulator to the current camera + const accumToWorld = + viewpoint.display?.accumulator.toWorld ?? new THREE.Matrix4(); + const worldToCamera = camera.matrixWorld.clone().invert(); + const originToCamera = accumToWorld.clone().premultiply(worldToCamera); + originToCamera.decompose( + this.uniforms.renderToViewPos.value, + this.uniforms.renderToViewQuat.value, + new THREE.Vector3(), + ); + } + + // Update the uniforms for the given viewpoint. + // Note that the client expects to be able to call render() at any point + // to update the canvas, so we must switch the viewpoint back to + // defaultView when we're finished. + prepareViewpoint(viewpoint?: ForgeViewpoint) { + this.viewpoint = viewpoint ?? this.viewpoint; + + if (this.viewpoint.display) { + const { accumulator, geometry } = this.viewpoint.display; + this.uniforms.numSplats.value = accumulator.splats.numSplats; + this.uniforms.packedSplats.value = accumulator.splats.getTexture(); + this.geometry = geometry; + } else { + // No Gsplats to display for this viewpoint yet + this.uniforms.numSplats.value = 0; + this.uniforms.packedSplats.value = PackedSplats.getEmpty(); + this.geometry = EMPTY_GEOMETRY; + } + } + + // If forge.autoUpdate is false then you must manually call + // forge.update({ scene }) to have the scene Gsplats be re-generated. + update({ + scene, + viewToWorld, + }: { scene: THREE.Scene; viewToWorld?: THREE.Matrix4 }) { + // Compute the transform for the ForgeRenderer to use as origin + // for Gsplat generation and accumulation. + const originToWorld = this.matrixWorld.clone(); + // Either do the update now, or in the next "tick" depending on preUpdate + if (this.preUpdate) { + this.updateInternal({ scene, originToWorld, viewToWorld }); + } else { + // Pass the update parameters to be performed on the next tick + this.pendingUpdate = { + scene, + originToWorld, + }; + setTimeout(() => { + if (this.pendingUpdate) { + const { scene, originToWorld } = this.pendingUpdate; + this.pendingUpdate = null; + this.updateInternal({ scene, originToWorld, viewToWorld }); + } + }, 1); + } + } + + updateInternal({ + scene, + originToWorld, + viewToWorld, + }: { + scene: THREE.Scene; + originToWorld?: THREE.Matrix4; + viewToWorld?: THREE.Matrix4; + }): boolean { + if (!this.canAllocAccumulator()) { + // We don't have any available accumulators because of sorting + // back pressure, so don't update this time but try again next time. + // Signal update not attempted. + return false; + } + + // Figure out the frame of the ForgeRenderer and current view + if (!originToWorld) { + originToWorld = this.active.toWorld; + } + viewToWorld = viewToWorld ?? originToWorld.clone(); + + const time = this.time ?? this.clock.getElapsedTime(); + const deltaTime = time - (this.lastUpdateTime ?? time); + this.lastUpdateTime = time; + + // Create a lookup from last active SplatGenerator to Gsplat mapping record + const activeMapping = this.active.mapping.reduce((map, record) => { + map.set(record.node, record); + return map; + }, new Map()); + + // Traverse visible scene to find all SplatGenerators and global SplatEdits + const { generators, globalEdits } = this.compileScene(scene); + + // Let all SplatGenerators run their frameUpdate() method + for (const object of generators) { + object.frameUpdate?.({ + object, + time, + deltaTime, + viewToWorld, + globalEdits, + }); + } + + // Make sure we have new version numbers for any objects with either + // generator or numSplats that have changed since the last frame. + for (const object of generators) { + const current = activeMapping.get(object); + const numSplats = object.generator ? object.numSplats : 0; + if ( + object.generator !== current?.generator || + numSplats !== current?.count + ) { + object.updateVersion(); + } + } + + // Check if the origin is within the maximum allowed distance before + // we trigger an update. + const originUpdate = !withinCoorientDist({ + matrix1: originToWorld, + matrix2: this.active.toWorld, + maxDistance: this.originDistance, + }); + + // Check if we need any update at all + const needsUpdate = + originUpdate || + generators.length !== activeMapping.size || + generators.some((g) => g.version !== activeMapping.get(g)?.version); + + let accumulator: SplatAccumulator | null = null; + if (needsUpdate) { + // Need to update, so allocate an accumulator + accumulator = this.maybeAllocAccumulator(); + if (!accumulator) { + // This should never happen since we checked canAllocAccumulator() above + throw new Error("Unreachable"); + } + + // Compute whether our view frame has changed enough to warrant + // doing a Gsplat sort. Check both distance epsilon and + // minimum co-orientation (dot product of quaternions) + const originChanged = !withinCoorientDist({ + matrix1: originToWorld, + matrix2: this.active.toWorld, + maxDistance: 0.00001, + minCoorient: 0.99999, + }); + + // Compute an ordering of the generators with the rough goal + // of keeping unchanging generators near the front to minimize + // the number of Gsplats that need to be regenerated. + const sorted = generators + .map((g, gIndex): [number, number, SplatGenerator] => { + const lastGen = activeMapping.get(g); + // If no previous generator, sort by absolute version, which will + // tend to push frequently updated generators toward the end + return !lastGen + ? [Number.POSITIVE_INFINITY, g.version, g] + : // Sort by version deltas then by previous ordering in the mapping, + // attempting to keep unchanging generators near the front + // to improve our chances of avoiding a re-generation. + [g.version - lastGen.version, lastGen.base, g]; + }) + .sort((a, b) => { + // Sort by first then second element of the tuple + if (a[0] !== b[0]) { + return a[0] - b[0]; + } + return a[1] - b[1]; + }); + const genOrder = sorted.map(([_version, _seq, g]) => g); + + // Compute sequential layout of generated splats + const splatCounts = genOrder.map((g) => g.numSplats); + const { maxSplats, mapping } = + accumulator.splats.generateMapping(splatCounts); + const newGenerators = genOrder.map((node, gIndex) => { + const { base, count } = mapping[gIndex]; + return { + node, + generator: node.generator, + version: node.version, + base, + count, + }; + }); + + // Compute worldToAccumulator origin transform (no scale) + originToWorld + .clone() + .invert() + .decompose( + this.translateToAccumulator.value, + this.rotateToAccumulator.value, + new THREE.Vector3(), + ); + + // Generate the Gsplats according to the mapping that need updating + accumulator.ensureGenerate(maxSplats); + const generated = accumulator.generateSplats({ + renderer: this.renderer, + modifier: this.modifier, + generators: newGenerators, + forceUpdate: originChanged, + originToWorld, + }); + + // Update splat version number + accumulator.splatsVersion = this.active.splatsVersion + 1; + // Increment the mapping version if the mapping isn't identical to before + const hasCorrespondence = accumulator.hasCorrespondence(this.active); + accumulator.mappingVersion = + this.active.mappingVersion + (hasCorrespondence ? 0 : 1); + + // Release the old accumulator and make the new one active + this.releaseAccumulator(this.active); + this.active = accumulator; + this.prepareViewpoint(); + } + + // Let the system breath before potentially triggering sorts + setTimeout(() => { + // Notify all auto-updating viewpoints that we updated the Gsplats + for (const view of this.autoViewpoints) { + view.autoPoll({ accumulator: accumulator ?? undefined }); + } + }, 1); + + // Signal update was performed + return true; + } + + private compileScene(scene: THREE.Scene): { + generators: SplatGenerator[]; + globalEdits: SplatEdit[]; + } { + // Take a snapshot of the SplatGenerators and SplatEdits in the scene + // to be used to run an update. + const generators: SplatGenerator[] = []; + scene.traverse((node) => { + if (node instanceof SplatGenerator) { + generators.push(node); + } + }); + + const globalEdits = new Set(); + scene.traverseVisible((node) => { + if (node instanceof SplatEdit) { + let ancestor = node.parent; + while (ancestor != null && !(ancestor instanceof SplatMesh)) { + ancestor = ancestor.parent; + } + if (ancestor == null) { + // Not part of a SplatMesh so it's a global edit + globalEdits.add(node); + } + } + }); + return { generators, globalEdits: Array.from(globalEdits) }; + } + + // Renders out the scene to an environment map that can be used for + // Image-based lighting or similar applications. First optionally updates Gsplats, + // sorts them with respect to the provided worldCenter, renders 6 cube faces, + // then pre-filters them using THREE.PMREMGenerator and returns a THREE.Texture + // that can assigned directly to a THREE.MeshStandardMaterial.envMap property. + async renderEnvMap({ + renderer, + scene, + worldCenter, + size = 256, + near = 0.1, + far = 1000, + hideObjects = [], + update = false, + }: { + renderer?: THREE.WebGLRenderer; + scene: THREE.Scene; + worldCenter: THREE.Vector3; + size?: number; + near?: number; + far?: number; + hideObjects?: THREE.Object3D[]; + update?: boolean; + }): Promise { + if (!this.envViewpoint) { + this.envViewpoint = this.newViewpoint({ sort360: true }); + } + if ( + !ForgeRenderer.cubeRender || + ForgeRenderer.cubeRender.target.width !== size || + ForgeRenderer.cubeRender.near !== near || + ForgeRenderer.cubeRender.far !== far + ) { + if (ForgeRenderer.cubeRender) { + ForgeRenderer.cubeRender.target.dispose(); + } + const target = new THREE.WebGLCubeRenderTarget(size, { + format: THREE.RGBAFormat, + generateMipmaps: true, + minFilter: THREE.LinearMipMapLinearFilter, + }); + const camera = new THREE.CubeCamera(near, far, target); + ForgeRenderer.cubeRender = { target, camera, near, far }; + } + + if (!ForgeRenderer.pmrem) { + ForgeRenderer.pmrem = new THREE.PMREMGenerator(renderer ?? this.renderer); + } + + // Prepare the viewpoint, sorting Gsplats for this view origin. + const viewToWorld = new THREE.Matrix4().setPosition(worldCenter); + await this.envViewpoint?.prepare({ scene, viewToWorld, update }); + + const { target, camera } = ForgeRenderer.cubeRender; + camera.position.copy(worldCenter); + + // Save the visibility state of objects we want to hide before render + const objectVisibility = new Map(); + for (const object of hideObjects) { + objectVisibility.set(object, object.visible); + object.visible = false; + } + + // Update the CubeCamera, which performs 6 cube face renders + this.prepareViewpoint(this.envViewpoint); + camera.update(renderer ?? this.renderer, scene); + + // Restore viewpoint to default and object visibility + this.prepareViewpoint(this.defaultView); + for (const [object, visible] of objectVisibility.entries()) { + object.visible = visible; + } + + // Pre-filter the cube map using THREE.PMREMGenerator + return ForgeRenderer.pmrem?.fromCubemap(target.texture).texture; + } + + // Utility function to recursively set the envMap property for any + // THREE.MeshStandardMaterial within the subtree of root. + recurseSetEnvMap(root: THREE.Object3D, envMap: THREE.Texture) { + root.traverse((node) => { + if (node instanceof THREE.Mesh) { + if (Array.isArray(node.material)) { + for (const material of node.material) { + if (material instanceof THREE.MeshStandardMaterial) { + material.envMap = envMap; + } + } + } else { + if (node.material instanceof THREE.MeshStandardMaterial) { + node.material.envMap = envMap; + } + } + } + }); + } + + // Utility function that helps extract the Gsplat RGBA values from a + // SplatGenerator, including the result of any real-time RGBA SDF edits applied + // to a SplatMesh. This effectively "bakes" any computed RGBA values, which can + // now be used as a pipeline input via SplatMesh.splatRgba to inject these + // baked values into the Gsplat data. + getRgba({ + generator, + rgba, + }: { generator: SplatGenerator; rgba?: RgbaArray }): RgbaArray { + const mapping = this.active.mapping.find(({ node }) => node === generator); + if (!mapping) { + throw new Error("Generator not found"); + } + + rgba = rgba ?? new RgbaArray(); + rgba.fromPackedSplats({ + packedSplats: this.active.splats, + base: mapping.base, + count: mapping.count, + renderer: this.renderer, + }); + return rgba; + } + + // Utility function that builds on getRgba({ generator }) and additionally + // reads back the RGBA values to the CPU in a Uint8Array with packed RGBA + // in that byte order. + async readRgba({ + generator, + rgba, + }: { generator: SplatGenerator; rgba?: RgbaArray }): Promise { + rgba = this.getRgba({ generator, rgba }); + return rgba.read(); + } +} + +const EMPTY_GEOMETRY = new SplatGeometry(new Uint32Array(1), 0); + +const reorderSplats = dynoBlock( + { packedSplats: TPackedSplats, index: "int" }, + { gsplat: Gsplat }, + ({ packedSplats, index }) => { + if (!packedSplats || !index) { + throw new Error("Invalid input"); + } + const gsplat = readPackedSplat(packedSplats, index); + return { gsplat }; + }, +); + +function averageOriginToWorlds( + originToWorlds: THREE.Matrix4[], +): THREE.Matrix4 | null { + if (originToWorlds.length === 0) { + return null; + } + + const position = new THREE.Vector3(); + const quaternion = new THREE.Quaternion(); + const scale = new THREE.Vector3(); + + const positions: THREE.Vector3[] = []; + const quaternions: THREE.Quaternion[] = []; + for (const matrix of originToWorlds) { + matrix.decompose(position, quaternion, scale); + positions.push(position); + quaternions.push(quaternion); + } + + return new THREE.Matrix4().compose( + averagePositions(positions), + averageQuaternions(quaternions), + new THREE.Vector3(1, 1, 1), + ); +} diff --git a/src/ForgeViewpoint.ts b/src/ForgeViewpoint.ts new file mode 100644 index 0000000..39112e6 --- /dev/null +++ b/src/ForgeViewpoint.ts @@ -0,0 +1,758 @@ +import * as THREE from "three"; + +import type { ForgeRenderer } from "./ForgeRenderer"; +import { DynoPackedSplats } from "./PackedSplats"; +import { Readback } from "./Readback"; +import type { SplatAccumulator } from "./SplatAccumulator"; +import { SplatGeometry } from "./SplatGeometry"; +import { + type DynoBlock, + DynoBool, + DynoFloat, + type DynoVal, + DynoVec3, + Gsplat, + add, + combine, + defineGsplat, + dyno, + dynoBlock, + dynoConst, + mul, + packHalf2x16, + readPackedSplat, + uintToRgba8, + unindent, + unindentLines, +} from "./dyno"; +import { withWorker } from "./splatWorker"; +import { FreeList, withinCoorientDist } from "./utils"; + +export type ForgeViewpointOptions = { + // Controls whether to auto-update its sort order whenever the ForgeRenderer + // updates the Gsplats. If you expect to render/display from this viewpoint + // most frames, set this to true. (default: false) + autoUpdate?: boolean; + // Set a THREE.Camera for this viewpoint to follow. (default: undefined) + camera?: THREE.Camera; + // Set an explicit view-to-world transformation matrix for this viewpoint (equivalent + // to camera.matrixWorld), overrides any camera setting. (default: undefined) + viewToWorld?: THREE.Matrix4; + // Configure viewpoint with an off-screen render target. (default: undefined) + target?: { + // Width of the render target in pixels. + width: number; + // Height of the render target in pixels. + height: number; + // If you want to be able to render a scene that depends on this target's + // output (for example, a recursive viewport), set this to true to enable + // double buffering. (default: false) + doubleBuffer?: boolean; + // Super-sampling factor for the render target. Values 1-4 are supported. + // Note that re-sampling back down to .width x .height is done on the CPU + // with simple averaging only when calling readTarget(). (default: 1) + superXY?: number; + }; + // Callback function that is called when the render target texture is updated. + // Receives the texture as a parameter. Use this to update a viewport with + // the latest viewpoint render each frame. (default: undefined) + onTextureUpdated?: (texture: THREE.Texture) => void; + // Whether to sort splats radially (geometric distance) from the viewpoint (true) + // or by Z-depth (false). Most scenes are trained with the Z-depth sort metric + // and will render more accurately at certain viewpoints. However, radial sorting + // is more stable under viewpoint rotations. (default: true) + sortRadial?: boolean; + // Distance threshold for re-sorting splats. If the viewpoint moves more than + // this distance, splats will be re-sorted. (default: 0.01 units) + sortDistance?: number; + // View direction dot product threshold for re-sorting splats. For + // sortRadial: true we use 0.99 while sortRadial: false uses 0.999 because it is + // more sensitive to view direction. (default: 0.99 if sortRadial else 0.999) + sortCoorient?: boolean; + // Constant added to Z-depth to bias values into the positive range for + // sortRadial: false, but also used for culling Gsplats "well behind" + // the viewpoint origin (default: 1.0) + depthBias?: number; + // Set this to true if rendering a 360 to disable "behind the viewpoint" + // culling during sorting. This is set automatically when rendering 360 envMaps + // using the ForgeRenderer.renderEnvMap() utility function. (default: false) + sort360?: boolean; +}; + +// A ForgeViewpoint is created from and tied to a ForgeRenderer, and represents +// an independent viewpoint of all the scene Gsplats and their sort order. Making +// these viewpoints explicit allows us to have multiple, simultaneous viewpoint +// renders, for example for camera preview panes or overhead map views. +// +// When creating a ForgeRenderer it automatically creates a default viewpoint +// .defaultView that is used in the normal render loop when drawing to the canvas, +// and is automatically updated whenever the camera moves. Additional viewpoints +// can be created and configured separately. + +export class ForgeViewpoint { + forge: ForgeRenderer; + autoUpdate: boolean; + camera?: THREE.Camera; + viewToWorld: THREE.Matrix4; + lastTime: number | null = null; + + target?: THREE.WebGLRenderTarget; + private back?: THREE.WebGLRenderTarget; + onTextureUpdated?: (texture: THREE.Texture) => void; + encodeLinear = false; + superXY = 1; + private superPixels?: Uint8Array; + private pixels?: Uint8Array; + + sortRadial: boolean; + sortDistance?: number; + sortCoorient?: boolean; + depthBias?: number; + sort360?: boolean; + + display: { + accumulator: SplatAccumulator; + viewToWorld: THREE.Matrix4; + geometry: SplatGeometry; + } | null = null; + + private sorting: { viewToWorld: THREE.Matrix4 } | null = null; + private pending: { + accumulator?: SplatAccumulator; + viewToWorld: THREE.Matrix4; + displayed: boolean; + } | null = null; + private sortingCheck = false; + + private readback: Uint16Array = new Uint16Array(0); + private orderingFreelist: FreeList; + + constructor(options: ForgeViewpointOptions & { forge: ForgeRenderer }) { + this.forge = options.forge; + this.camera = options.camera; + this.viewToWorld = options.viewToWorld ?? new THREE.Matrix4(); + + if (options.target) { + const { width, height, doubleBuffer } = options.target; + const superXY = Math.max(1, Math.min(4, options.target.superXY ?? 1)); + this.superXY = superXY; + if (width * superXY > 8192 || height * superXY > 8192) { + throw new Error("Target size too large"); + } + + this.target = new THREE.WebGLRenderTarget( + width * superXY, + height * superXY, + { + format: THREE.RGBAFormat, + type: THREE.UnsignedByteType, + colorSpace: THREE.SRGBColorSpace, + }, + ); + if (doubleBuffer) { + this.back = new THREE.WebGLRenderTarget( + width * superXY, + height * superXY, + { + format: THREE.RGBAFormat, + type: THREE.UnsignedByteType, + colorSpace: THREE.SRGBColorSpace, + }, + ); + } + this.encodeLinear = true; + } + this.onTextureUpdated = options.onTextureUpdated; + + this.sortRadial = options.sortRadial ?? true; + this.sortDistance = options.sortDistance; + this.sortCoorient = options.sortCoorient; + this.depthBias = options.depthBias; + this.sort360 = options.sort360; + + this.orderingFreelist = new FreeList({ + allocate: (maxSplats) => new Uint32Array(maxSplats), + valid: (ordering, maxSplats) => ordering.length === maxSplats, + }); + + this.autoUpdate = false; + this.setAutoUpdate(options.autoUpdate ?? false); + } + + // Call this when you are done with the ForgeViewpoint and want to + // free up its resources (GPU targets, pixel buffers, etc.) + dispose() { + this.setAutoUpdate(false); + if (this.target) { + this.target.dispose(); + this.target = undefined; + } + if (this.back) { + this.back.dispose(); + this.back = undefined; + } + if (this.display) { + this.forge.releaseAccumulator(this.display.accumulator); + this.display.geometry.dispose(); + this.display = null; + } + if (this.pending?.accumulator) { + this.forge.releaseAccumulator(this.pending.accumulator); + this.pending = null; + } + } + + // Use this function to change whether this viewpoint will auto-update + // its sort order whenever the attached ForgeRenderer updates the Gsplats. + // Turn this on or off depending on whether you expect to do renders from + // this viewpoint most frames. + setAutoUpdate(autoUpdate: boolean) { + if (!this.autoUpdate && autoUpdate) { + this.forge.autoViewpoints.push(this); + } else if (this.autoUpdate && !autoUpdate) { + this.forge.autoViewpoints = this.forge.autoViewpoints.filter( + (v) => v !== this, + ); + } + this.autoUpdate = autoUpdate; + } + + // See below async prepareRenderPixels() for explanation of parameters. + // Awaiting this method updates the Gsplats in the scene and performs a sort of the + // Gsplats from this viewpoint, preparing it for a subsequent this.renderTarget() + // call in the same tick. + async prepare({ + scene, + camera, + viewToWorld, + update, + forceOrigin, + }: { + scene: THREE.Scene; + camera?: THREE.Camera; + viewToWorld?: THREE.Matrix4; + update?: boolean; + forceOrigin?: boolean; + }) { + if (viewToWorld) { + this.viewToWorld = viewToWorld; + } else { + this.camera = camera ?? this.camera; + if (this.camera) { + this.camera.updateMatrixWorld(); + this.viewToWorld = this.camera.matrixWorld.clone(); + } + } + while (update ?? true) { + // Force an update, possibly with origin centered at this camera + // to yield the best quality output. + const originToWorld = forceOrigin ? this.viewToWorld : undefined; + const updated = this.forge.updateInternal({ scene, originToWorld }); + if (updated) { + break; + } + // A bit of a hack, but try again. We shouldn't be starved for long. + await new Promise((resolve) => setTimeout(resolve, 10)); + } + + const accumulator = this.forge.active; + if (accumulator !== this.display?.accumulator) { + this.forge.active.refCount += 1; + } + await this.sortUpdate({ accumulator, viewToWorld: this.viewToWorld }); + } + + // Render out the viewpoint to the view target RGBA buffer. + // Swaps buffers if doubleBuffer: true was set. + // Calls onTextureUpdated(texture) with the resulting texture. + renderTarget({ + scene, + camera, + }: { scene: THREE.Scene; camera?: THREE.Camera }) { + const target = this.back ?? this.target; + if (!target) { + throw new Error("Must initialize ForgeViewpoint with target"); + } + + camera = camera ?? this.camera; + if (!camera) { + throw new Error("Must provide camera"); + } + if (camera instanceof THREE.PerspectiveCamera) { + const newCam = new THREE.PerspectiveCamera().copy(camera, false); + newCam.aspect = target.width / target.height; + newCam.updateProjectionMatrix(); + camera = newCam; + } + this.viewToWorld = camera.matrixWorld.clone(); + + try { + this.forge.renderer.setRenderTarget(target); + this.forge.prepareViewpoint(this); + + this.forge.renderer.render(scene, camera); + } finally { + this.forge.prepareViewpoint(this.forge.defaultView); + this.forge.renderer.setRenderTarget(null); + } + + if (target !== this.target) { + // Swap back buffer and target + [this.target, this.back] = [this.back, this.target]; + } + this.onTextureUpdated?.(target.texture); + } + + // Read back the previously rendered target image as a Uint8Array of packed + // RGBA values (in that order). If superXY was set greater than 1 then + // downsampling is performed in the target pixel array with simple averaging + // to derive the returned pixel values. Subsequent calls to this.readTarget() + // will reuse the same buffers to minimize memory allocations. + async readTarget(): Promise { + if (!this.target) { + throw new Error("Must initialize ForgeViewpoint with target"); + } + const { width, height } = this.target; + const byteSize = width * height * 4; + if (!this.superPixels || this.superPixels.length < byteSize) { + this.superPixels = new Uint8Array(byteSize); + } + await this.forge.renderer.readRenderTargetPixelsAsync( + this.target, + 0, + 0, + width, + height, + this.superPixels, + ); + + const { superXY } = this; + if (superXY === 1) { + return this.superPixels; + } + + const subWidth = width / superXY; + const subHeight = height / superXY; + const subSize = subWidth * subHeight * 4; + if (!this.pixels || this.pixels.length < subSize) { + this.pixels = new Uint8Array(subSize); + } + + const { superPixels, pixels } = this; + const super2 = superXY * superXY; + for (let y = 0; y < subHeight; y++) { + const row = y * subWidth; + for (let x = 0; x < subWidth; x++) { + const superCol = x * superXY; + let r = 0; + let g = 0; + let b = 0; + let a = 0; + for (let sy = 0; sy < superXY; sy++) { + const superRow = (y * superXY + sy) * this.target.width; + for (let sx = 0; sx < superXY; sx++) { + const superIndex = (superRow + superCol + sx) * 4; + r += superPixels[superIndex]; + g += superPixels[superIndex + 1]; + b += superPixels[superIndex + 2]; + a += superPixels[superIndex + 3]; + } + } + const pixelIndex = (row + x) * 4; + pixels[pixelIndex] = r / super2; + pixels[pixelIndex + 1] = g / super2; + pixels[pixelIndex + 2] = b / super2; + pixels[pixelIndex + 3] = a / super2; + } + } + return pixels; + } + + // Render out a viewpoint as a Uint8Array of RGBA values for the provided scene + // and any camera/viewToWorld viewpoint overrides. By default update is true, + // which triggers its ForgeRenderer to check and potentially update the Gsplats. + // Setting update to false disables this and sorts the Gsplats as they are. + // Setting forceOrigin (default: false) to true forces the view update to + // recalculate the splats with this view origin, potentially altering any + // view-dependent effects. If you expect view-dependent effects to play a role + // in the rendering quality, enable this. + // + // Underneath, prepareRenderPixels() simply calls await this.prepare(...), + // this.renderTarget(...), and finally returns the result this.readTarget(), + // a Promise to a Uint8Array with RGBA values for all the pixels (potentially + // downsampled if the superXY parameter was used). These steps can also be called + // manually, for example if you need to alter the scene before and after + // this.renderTarget(...) to hide UI elements from being rendered. + async prepareRenderPixels({ + scene, + camera, + viewToWorld, + update, + forceOrigin, + }: { + scene: THREE.Scene; + camera?: THREE.Camera; + viewToWorld?: THREE.Matrix4; + update?: boolean; + forceOrigin?: boolean; + }) { + await this.prepare({ scene, camera, viewToWorld, update, forceOrigin }); + this.renderTarget({ scene, camera }); + return this.readTarget(); + } + + // This is called automatically by ForgeRenderer, there is no need to call it! + // The method cannot be private because then ForgeRenderer would + // not be able to call it. + autoPoll({ accumulator }: { accumulator?: SplatAccumulator }) { + if (this.camera) { + this.camera.updateMatrixWorld(); + this.viewToWorld = this.camera.matrixWorld.clone(); + } + + let needsSort = false; + let displayed = false; + + if (!this.display) { + // Need to do first sort + needsSort = true; + } else if (accumulator) { + needsSort = true; + const { mappingVersion } = this.display.accumulator; + if (accumulator.mappingVersion === mappingVersion) { + // Splat mapping has not changed, so reuse the existing sorted + // geometry to show updates faster. We will still fire off + // a re-sort if necessary. First release old accumulator. + this.forge.releaseAccumulator(this.display.accumulator); + this.display.accumulator = accumulator; + displayed = true; + } + } + + const latestView = this.sorting?.viewToWorld ?? this.display?.viewToWorld; + if ( + latestView && + !withinCoorientDist({ + matrix1: this.viewToWorld, + matrix2: latestView, + // By default update sort each 1 cm + maxDistance: this.sortDistance ?? 0.01, + // By default for radial sort, update for intermittent movement so that + // we bring back splats culled by being behind the camera. + // For depth sort, small rotations can change sort order a lot, so + // update sort for even small rotations. + minCoorient: (this.sortCoorient ?? this.sortRadial) ? 0.99 : 0.999, + }) + ) { + needsSort = true; + } + + if (!needsSort) { + // Stop here, no sort necessary + return; + } + + if (accumulator) { + // Hold a reference to the accumulator so it isn't released + accumulator.refCount += 1; + } + + if ( + accumulator && + this.pending?.accumulator && + this.pending.accumulator !== this.display?.accumulator + ) { + this.forge.releaseAccumulator(this.pending.accumulator); + } + this.pending = { accumulator, viewToWorld: this.viewToWorld, displayed }; + + // Don't await this, just trigger the sort if necessary + this.driveSort(); + } + + private async driveSort() { + while (true) { + if (this.sorting || !this.pending) { + return; // Sort already in process or nothing to sort + } + + const { viewToWorld, displayed } = this.pending; + let accumulator = this.pending.accumulator ?? this.display?.accumulator; + if (!accumulator) { + accumulator = this.forge.active; + accumulator.refCount += 1; + } + this.pending = null; + if (!accumulator) { + throw new Error("No accumulator to sort"); + } + + this.sorting = { viewToWorld }; + await this.sortUpdate({ accumulator, viewToWorld, displayed }); + this.sorting = null; + // Continue in loop with any queued sort + } + } + + private async sortUpdate({ + accumulator, + viewToWorld, + displayed = false, + }: { + accumulator?: SplatAccumulator; + viewToWorld: THREE.Matrix4; + displayed?: boolean; + }) { + if (this.sortingCheck) { + throw new Error("Only one sort at a time"); + } + this.sortingCheck = true; + + accumulator = accumulator ?? this.forge.active; + const { numSplats, maxSplats } = accumulator.splats; + let activeSplats = 0; + let ordering = this.orderingFreelist.alloc(maxSplats); + + if (numSplats > 0) { + const { + reader, + doubleSortReader, + dynoSortRadial, + dynoOrigin, + dynoDirection, + dynoDepthBias, + dynoSort360, + dynoSplats, + } = ForgeViewpoint.makeSorter(); + const halfMaxSplats = Math.ceil(maxSplats / 2); + this.readback = reader.ensureBuffer(halfMaxSplats, this.readback); + + const worldToOrigin = accumulator.toWorld.clone().invert(); + const viewToOrigin = viewToWorld.clone().premultiply(worldToOrigin); + + dynoSortRadial.value = this.sort360 ? true : this.sortRadial; + dynoOrigin.value.set(0, 0, 0).applyMatrix4(viewToOrigin); + dynoDirection.value + .set(0, 0, -1) + .applyMatrix4(viewToOrigin) + .sub(dynoOrigin.value) + .normalize(); + dynoDepthBias.value = this.depthBias ?? 1.0; + dynoSort360.value = this.sort360 ?? false; + dynoSplats.packedSplats = accumulator.splats; + + await reader.renderReadback({ + renderer: this.forge.renderer, + reader: doubleSortReader, + count: Math.ceil(numSplats / 2), + readback: this.readback, + }); + + const result = (await withWorker(async (worker) => { + return worker.call("sortDoubleSplats", { + numSplats, + readback: this.readback, + ordering, + }); + })) as { + readback: Uint16Array; + ordering: Uint32Array; + activeSplats: number; + }; + this.readback = result.readback; + ordering = result.ordering; + activeSplats = result.activeSplats; + } + + this.updateDisplay({ + accumulator, + viewToWorld, + ordering, + activeSplats, + displayed, + }); + this.sortingCheck = false; + } + + private updateDisplay({ + accumulator, + viewToWorld, + ordering, + activeSplats, + displayed = false, + }: { + accumulator: SplatAccumulator; + viewToWorld: THREE.Matrix4; + ordering: Uint32Array; + activeSplats: number; + displayed?: boolean; + }) { + if (!this.display) { + this.display = { + accumulator, + viewToWorld, + geometry: new SplatGeometry(ordering, activeSplats), + }; + } else { + if (!displayed && accumulator !== this.display.accumulator) { + this.forge.releaseAccumulator(this.display.accumulator); + this.display.accumulator = accumulator; + } + + this.display.viewToWorld = viewToWorld; + + const oldOrdering = this.display.geometry.ordering; + if (oldOrdering.length === ordering.length) { + this.display.geometry.update(ordering, activeSplats); + } else { + this.display.geometry.dispose(); + // console.log("*** alloc SplatGeometry", ordering.length); + this.display.geometry = new SplatGeometry(ordering, activeSplats); + } + this.orderingFreelist.free(oldOrdering); + } + if (this.forge.viewpoint === this) { + this.forge.prepareViewpoint(this); + } + } + + // If you need an empty THREE.Texture to use to initialize a uniform that is + // updated via onTextureUpdated(texture), this static texture can be handy. + static EMPTY_TEXTURE = new THREE.Texture(); + + private static dynos: { + dynoSortRadial: DynoBool; + dynoOrigin: DynoVec3; + dynoDirection: DynoVec3; + dynoDepthBias: DynoFloat; + dynoSort360: DynoBool; + dynoSplats: DynoPackedSplats; + reader: Readback; + doubleSortReader: DynoBlock<{ index: "int" }, { rgba8: "vec4" }>; + } | null = null; + + private static makeSorter() { + if (!ForgeViewpoint.dynos) { + const dynoSortRadial = new DynoBool({ value: true }); + const dynoOrigin = new DynoVec3({ value: new THREE.Vector3() }); + const dynoDirection = new DynoVec3({ value: new THREE.Vector3() }); + const dynoDepthBias = new DynoFloat({ value: 1.0 }); + const dynoSort360 = new DynoBool({ value: false }); + const dynoSplats = new DynoPackedSplats(); + + const reader = new Readback(); + const doubleSortReader = dynoBlock( + { index: "int" }, + { rgba8: "vec4" }, + ({ index }) => { + if (!index) { + throw new Error("No index"); + } + const sortParams = { + sortRadial: dynoSortRadial, + sortOrigin: dynoOrigin, + sortDirection: dynoDirection, + sortDepthBias: dynoDepthBias, + sort360: dynoSort360, + }; + const index2 = mul(index, dynoConst("int", 2)); + + const gsplat0 = readPackedSplat(dynoSplats, index2); + const metric0 = computeSortMetric({ gsplat: gsplat0, ...sortParams }); + + const gsplat1 = readPackedSplat( + dynoSplats, + add(index2, dynoConst("int", 1)), + ); + const metric1 = computeSortMetric({ gsplat: gsplat1, ...sortParams }); + + const combined = combine({ + vectorType: "vec2", + x: metric0, + y: metric1, + }); + const rgba8 = uintToRgba8(packHalf2x16(combined)); + return { rgba8 }; + }, + ); + + ForgeViewpoint.dynos = { + dynoSortRadial, + dynoOrigin, + dynoDirection, + dynoDepthBias, + dynoSort360, + dynoSplats, + reader, + doubleSortReader, + }; + } + return ForgeViewpoint.dynos; + } +} + +const defineComputeSortMetric = unindent(` + float computeSort(Gsplat gsplat, bool sortRadial, vec3 sortOrigin, vec3 sortDirection, float sortDepthBias, bool sort360) { + if (!isGsplatActive(gsplat.flags)) { + return INFINITY; + } + + vec3 center = gsplat.center - sortOrigin; + float biasedDepth = dot(center, sortDirection) + sortDepthBias; + if (!sort360 && (biasedDepth <= 0.0)) { + return INFINITY; + } + + return sortRadial ? length(center) : biasedDepth; + } +`); + +function computeSortMetric({ + gsplat, + sortRadial, + sortOrigin, + sortDirection, + sortDepthBias, + sort360, +}: { + gsplat: DynoVal; + sortRadial: DynoVal<"bool">; + sortOrigin: DynoVal<"vec3">; + sortDirection: DynoVal<"vec3">; + sortDepthBias: DynoVal<"float">; + sort360: DynoVal<"bool">; +}) { + return dyno({ + inTypes: { + gsplat: Gsplat, + sortRadial: "bool", + sortOrigin: "vec3", + sortDirection: "vec3", + sortDepthBias: "float", + sort360: "bool", + }, + outTypes: { metric: "float" }, + globals: () => [defineGsplat, defineComputeSortMetric], + inputs: { + gsplat, + sortRadial, + sortOrigin, + sortDirection, + sortDepthBias, + sort360, + }, + statements: ({ inputs, outputs }) => { + const { + gsplat, + sortRadial, + sortOrigin, + sortDirection, + sortDepthBias, + sort360, + } = inputs; + return unindentLines(` + ${outputs.metric} = computeSort(${gsplat}, ${sortRadial}, ${sortOrigin}, ${sortDirection}, ${sortDepthBias}, ${sort360}); + `); + }, + }).outputs.metric; +} diff --git a/src/PackedSplats.ts b/src/PackedSplats.ts new file mode 100644 index 0000000..7f2a43f --- /dev/null +++ b/src/PackedSplats.ts @@ -0,0 +1,656 @@ +import * as THREE from "three"; + +import type { GsplatGenerator } from "./SplatGenerator"; +import { type SplatFileType, unpackSplats } from "./SplatLoader"; +import { SPLAT_TEX_HEIGHT, SPLAT_TEX_WIDTH } from "./defines"; +import { + DynoProgram, + DynoProgramTemplate, + DynoUniform, + dynoBlock, + outputPackedSplat, +} from "./dyno"; +import { TPackedSplats, definePackedSplats } from "./dyno/splats"; +import computeUvec4Template from "./shaders/computeUvec4.glsl"; +import { getTextureSize, setPackedSplat, unpackSplat } from "./utils"; + +// Initialize a PackedSplats collection from source data via +// url, fileBytes, or packedArray. Creates an empty array if none are set, +// and splat data can be constructed using pushSplat()/setSplat(). The maximum +// splat size allocation will grow automatically, starting from maxSplats. +export type PackedSplatsOptions = { + // URL to fetch a Gaussian splat file from (supports .ply, .splat, .ksplat, + // .spz formats). (default: undefined) + url?: string; + // Raw bytes of a Gaussian splat file to decode directly instead of fetching + // from URL. (default: undefined) + fileBytes?: Uint8Array | ArrayBuffer; + // Override the file type detection for formats that can't be reliably + // auto-detected (.splat, .ksplat). (default: undefined auto-detects other + // formats from file contents) + fileType?: SplatFileType; + // Reserve space for at least this many splats when constructing the collection + // initially. The array will automatically resize past maxSplats so setting it is + // an optional optimization. (default: 0) + maxSplats?: number; + // Use provided packed data array, where each 4 consecutive uint32 values + // encode one "packed" Gsplat. (default: undefined) + packedArray?: Uint32Array; + // Override number of splats in packed array to use only a subset. + // (default: length of packed array / 4) + numSplats?: number; + // Callback function to programmatically create splats at initialization. + // (default: undefined) + construct?: (splats: PackedSplats) => Promise | void; + // Additional splat data, such as spherical harmonics components (sh1, sh2, sh3). (default: {}) + extra?: Record; +}; + +// A PackedSplats is a collection of Gaussian splats, packed into a format that +// takes exactly 16 bytes per Gsplat to maximize memory and cache efficiency. +// The center xyz coordinates are encoded as float16 (3 x 2 bytes), scale xyz +// as 3 x uint8 that encode a log scale from e^-9 to e^9, rgba as 4 x uint8, +// and quaternion encoded via axis+angle using 2 x uint8 for octahedral encoding +// of the axis direction and a uint8 to encode rotation amount from 0..Pi. + +export class PackedSplats { + maxSplats = 0; + numSplats = 0; + packedArray: Uint32Array | null = null; + extra: Record; + + initialized: Promise; + isInitialized = false; + + // Either target or source will be non-null, depending on whether the PackedSplats + // is being used as a data source or generated to. + target: THREE.WebGLArrayRenderTarget | null = null; + source: THREE.DataArrayTexture | null = null; + // Set to true if source packedArray is updated to have it upload to GPU + needsUpdate = true; + + // A PackedSplats can be used in a dyno graph using the below property dyno: + // const gsplat = dyno.readPackedSplats(this.dyno, dynoIndex); + dyno: DynoUniform; + + constructor(options: PackedSplatsOptions = {}) { + this.extra = {}; + this.dyno = new DynoPackedSplats({ packedSplats: this }); + + // The following line will be overridden by reinitialize() + this.initialized = Promise.resolve(this); + this.reinitialize(options); + } + + reinitialize(options: PackedSplatsOptions) { + this.isInitialized = false; + if (options.url || options.fileBytes || options.construct) { + // We need to initialize asynchronously given the options + this.initialized = this.asyncInitialize(options).then(() => { + this.isInitialized = true; + return this; + }); + } else { + this.initialize(options); + this.isInitialized = true; + this.initialized = Promise.resolve(this); + } + } + + initialize(options: PackedSplatsOptions) { + if (options.packedArray) { + this.packedArray = options.packedArray; + // Calculate number of horizontal texture rows that could fit in array. + // A properly initialized packedArray should already take into account the + // width and height of the texture and be rounded up with padding. + this.maxSplats = Math.floor(this.packedArray.length / 4); + this.maxSplats = + Math.floor(this.maxSplats / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + this.numSplats = Math.min( + this.maxSplats, + options.numSplats ?? Number.POSITIVE_INFINITY, + ); + } else { + this.maxSplats = options.maxSplats ?? 0; + this.numSplats = 0; + } + this.extra = options.extra ?? {}; + } + + async asyncInitialize(options: PackedSplatsOptions) { + let { url, fileBytes, construct } = options; + if (url) { + fileBytes = await fetch(url).then(async (response) => { + if (!response.ok) { + throw new Error( + `${response.status} "${response.statusText}" fetching URL: ${url}`, + ); + } + const arrayBuffer = await response.arrayBuffer(); + return arrayBuffer; + }); + } + + if (fileBytes) { + const unpacked = await unpackSplats({ + input: fileBytes, + fileType: options.fileType, + pathOrUrl: url, + }); + this.initialize(unpacked); + } + if (construct) { + const maybePromise = construct(this); + // If construct returns a promise, wait for it to complete + if (maybePromise instanceof Promise) { + await maybePromise; + } + } + } + + // Call this when you are finished with the PackedSplats and want to free + // any buffers it holds. + dispose() { + if (this.target) { + this.target.dispose(); + this.target = null; + } + if (this.source) { + this.source.dispose(); + this.source = null; + } + } + + // Ensures that this.packedArray can fit numSplats Gsplats. If it's too small, + // resize exponentially and copy over the original data. + // + // Typically you don't need to call this, because calling this.setSplat(index, ...) + // and this.pushSplat(...) will automatically call ensureSplats() so we have + // enough splats. + ensureSplats(numSplats: number): Uint32Array { + const targetSize = + numSplats <= this.maxSplats + ? this.maxSplats + : // Grow exponentially to avoid frequent reallocations + Math.max(numSplats, 2 * this.maxSplats); + const currentSize = !this.packedArray ? 0 : this.packedArray.length / 4; + + if (!this.packedArray || targetSize > currentSize) { + this.maxSplats = getTextureSize(targetSize).maxSplats; + const newArray = new Uint32Array(this.maxSplats * 4); + if (this.packedArray) { + // Copy over existing data + newArray.set(this.packedArray); + } + this.packedArray = newArray; + } + return this.packedArray; + } + + // Ensure the extra array for the given level is large enough to hold numSplats + ensureSplatsSh(level: number, numSplats: number): Uint32Array { + let wordsPerSplat: number; + let key: string; + if (level === 0) { + return this.ensureSplats(numSplats); + } + if (level === 1) { + // 3 x 3 uint7 = 63 bits = 2 uint32 + wordsPerSplat = 2; + key = "sh1"; + } else if (level === 2) { + // 5 x 3 uint8 = 120 bits = 4 uint32 + wordsPerSplat = 4; + key = "sh2"; + } else if (level === 3) { + // 7 x 3 uint6 = 126 bits = 4 uint32 + wordsPerSplat = 4; + key = "sh3"; + } else { + throw new Error(`Invalid level: ${level}`); + } + + // Figure out our current and desired maxSplats + let maxSplats: number = !this.extra[key] + ? 0 + : (this.extra[key] as Uint32Array).length / wordsPerSplat; + const targetSize = + numSplats <= maxSplats ? maxSplats : Math.max(numSplats, 2 * maxSplats); + + if (!this.extra[key] || targetSize > maxSplats) { + // Reallocate the array + maxSplats = getTextureSize(targetSize).maxSplats; + const newArray = new Uint32Array(maxSplats * wordsPerSplat); + if (this.extra[key]) { + // Copy over existing data + newArray.set(this.extra[key] as Uint32Array); + } + this.extra[key] = newArray; + } + return this.extra[key] as Uint32Array; + } + + // Unpack the 16-byte Gsplat data at index into the Three.js components + // center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, + // opacity: number 0..1, color: THREE.Color 0..1. + getSplat(index: number): { + center: THREE.Vector3; + scales: THREE.Vector3; + quaternion: THREE.Quaternion; + opacity: number; + color: THREE.Color; + } { + if (!this.packedArray || index >= this.numSplats) { + throw new Error("Invalid index"); + } + return unpackSplat(this.packedArray, index); + } + + // Set all PackedSplat components at index with the provided Gsplat attributes + // (can be the same objects returned by getSplat). Ensures there is capacity + // for at least index+1 Gsplats. + setSplat( + index: number, + center: THREE.Vector3, + scales: THREE.Vector3, + quaternion: THREE.Quaternion, + opacity: number, + color: THREE.Color, + ) { + const packedSplats = this.ensureSplats(index + 1); + setPackedSplat( + packedSplats, + index, + center.x, + center.y, + center.z, + scales.x, + scales.y, + scales.z, + quaternion.x, + quaternion.y, + quaternion.z, + quaternion.w, + opacity, + color.r, + color.g, + color.b, + ); + this.numSplats = Math.max(this.numSplats, index + 1); + } + + // Effectively calls this.setSplat(this.numSplats++, center, ...), useful on + // construction where you just want to iterate and create a collection of Gsplats. + pushSplat( + center: THREE.Vector3, + scales: THREE.Vector3, + quaternion: THREE.Quaternion, + opacity: number, + color: THREE.Color, + ) { + const packedSplats = this.ensureSplats(this.numSplats + 1); + setPackedSplat( + packedSplats, + this.numSplats, + center.x, + center.y, + center.z, + scales.x, + scales.y, + scales.z, + quaternion.x, + quaternion.y, + quaternion.z, + quaternion.w, + opacity, + color.r, + color.g, + color.b, + ); + ++this.numSplats; + } + + // Iterate over Gsplats index 0..=(this.numSplats-1), unpack each Gsplat + // and invoke the callback function with the Gsplat attributes. + forEachSplat( + callback: ( + index: number, + center: THREE.Vector3, + scales: THREE.Vector3, + quaternion: THREE.Quaternion, + opacity: number, + color: THREE.Color, + ) => void, + ) { + if (!this.packedArray || !this.numSplats) { + return; + } + for (let i = 0; i < this.numSplats; ++i) { + const unpacked = unpackSplat(this.packedArray, i); + callback( + i, + unpacked.center, + unpacked.scales, + unpacked.quaternion, + unpacked.opacity, + unpacked.color, + ); + } + } + + // Ensures our PackedSplats.target render target has enough space to generate + // maxSplats total Gsplats, and reallocate if not large enough. + ensureGenerate(maxSplats: number): boolean { + if (this.target && (maxSplats ?? 1) <= this.maxSplats) { + return false; + } + this.dispose(); + + const textureSize = getTextureSize(maxSplats ?? 1); + const { width, height, depth } = textureSize; + this.maxSplats = textureSize.maxSplats; + + // The packed Gsplats are stored in a 2D array texture of max size + // 2048 x 2048 x 2048, one RGBA32UI pixel = 4 uint32 = one Gsplat + this.target = new THREE.WebGLArrayRenderTarget(width, height, depth, { + depthBuffer: false, + stencilBuffer: false, + generateMipmaps: false, + magFilter: THREE.NearestFilter, + minFilter: THREE.NearestFilter, + }); + this.target.texture.format = THREE.RGBAIntegerFormat; + this.target.texture.type = THREE.UnsignedIntType; + this.target.texture.internalFormat = "RGBA32UI"; + return true; + } + + // Given an array of splatCounts (.numSplats for each + // SplatGenerator/SplatMesh in the scene), compute a + // "mapping layout" in the composite array of generated outputs. + generateMapping(splatCounts: number[]): { + maxSplats: number; + mapping: { base: number; count: number }[]; + } { + let maxSplats = 0; + const mapping = splatCounts.map((numSplats) => { + const base = maxSplats; + // Generation happens in horizonal row chunks, so round up to full width + const rounded = Math.ceil(numSplats / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + maxSplats += rounded; + return { base, count: numSplats }; + }); + return { maxSplats, mapping }; + } + + // Returns a THREE.DataArrayTexture representing the PackedSplats content as + // a Uint32x4 data array texture (2048 x 2048 x depth in size) + getTexture(): THREE.DataArrayTexture { + if (this.target) { + // Return the render target's texture + return this.target.texture; + } + if (this.source || this.packedArray) { + // Update source texture if needed and return + const source = this.maybeUpdateSource(); + return source; + } + + return PackedSplats.getEmpty(); + } + + // Check if source texture needs to be created/updated + private maybeUpdateSource(): THREE.DataArrayTexture { + if (!this.packedArray) { + throw new Error("No packed splats"); + } + + if (this.needsUpdate || !this.source) { + this.needsUpdate = false; + + if (this.source) { + const { width, height, depth } = this.source.image; + if (this.maxSplats !== width * height * depth) { + // The existing source texture isn't the right size, so dispose it + this.source.dispose(); + this.source = null; + } + } + if (!this.source) { + // Allocate a new source texture of the right size + const { width, height, depth } = getTextureSize(this.maxSplats); + this.source = new THREE.DataArrayTexture( + this.packedArray, + width, + height, + depth, + ); + this.source.format = THREE.RGBAIntegerFormat; + this.source.type = THREE.UnsignedIntType; + this.source.internalFormat = "RGBA32UI"; + this.source.needsUpdate = true; + } else if (this.packedArray.buffer !== this.source.image.data.buffer) { + // The source texture is the right size, update the data + this.source.image.data = new Uint8Array(this.packedArray.buffer); + } + // Indicate to Three.js that the source texture needs to be uploaded to the GPU + this.source.needsUpdate = true; + } + return this.source; + } + + private static emptySource: THREE.DataArrayTexture | null = null; + + // Can be used where you need an uninitialized THREE.DataArrayTexture like + // a uniform you will update with the result of this.getTexture() later. + static getEmpty(): THREE.DataArrayTexture { + if (!PackedSplats.emptySource) { + const { width, height, depth, maxSplats } = getTextureSize(1); + const emptyArray = new Uint32Array(maxSplats * 4); + PackedSplats.emptySource = new THREE.DataArrayTexture( + emptyArray, + width, + height, + depth, + ); + PackedSplats.emptySource.format = THREE.RGBAIntegerFormat; + PackedSplats.emptySource.type = THREE.UnsignedIntType; + PackedSplats.emptySource.internalFormat = "RGBA32UI"; + PackedSplats.emptySource.needsUpdate = true; + } + return PackedSplats.emptySource; + } + + // Get a program and THREE.RawShaderMaterial for a given GsplatGenerator, + // generating it if necessary and caching the result. + prepareProgramMaterial(generator: GsplatGenerator): { + program: DynoProgram; + material: THREE.RawShaderMaterial; + } { + let program = PackedSplats.generatorProgram.get(generator); + if (!program) { + // A Gsplat needs to be turned into a packed uvec4 for the dyno graph + const graph = dynoBlock( + { index: "int" }, + { output: "uvec4" }, + ({ index }) => { + generator.inputs.index = index; + const gsplat = generator.outputs.gsplat; + const output = outputPackedSplat(gsplat); + return { output }; + }, + ); + if (!PackedSplats.programTemplate) { + PackedSplats.programTemplate = new DynoProgramTemplate( + computeUvec4Template, + ); + } + // Create a program from the template and graph + program = new DynoProgram({ + graph, + inputs: { index: "index" }, + outputs: { output: "target" }, + template: PackedSplats.programTemplate, + }); + Object.assign(program.uniforms, { + targetLayer: { value: 0 }, + targetBase: { value: 0 }, + targetCount: { value: 0 }, + }); + PackedSplats.generatorProgram.set(generator, program); + } + + // Prepare and update our material we'll use to render the Gsplats + const material = program.prepareMaterial(); + PackedSplats.mesh.material = material; + return { program, material }; + } + + private saveRenderState(renderer: THREE.WebGLRenderer) { + return { + xrPresenting: renderer.xr.isPresenting, + autoClear: renderer.autoClear, + scissorTest: renderer.getScissorTest(), + pixelRatio: renderer.getPixelRatio(), + }; + } + + private resetRenderState( + renderer: THREE.WebGLRenderer, + state: { + xrPresenting: boolean; + autoClear: boolean; + scissorTest: boolean; + pixelRatio: number; + }, + ) { + renderer.setRenderTarget(null); + renderer.setPixelRatio(state.pixelRatio); + renderer.xr.isPresenting = state.xrPresenting; + renderer.autoClear = state.autoClear; + renderer.setScissorTest(state.scissorTest); + } + + // Executes a dyno program specified by generator which is any DynoBlock that + // maps { index: "int" } to { gsplat: Gsplat }. This is called in + // ForgeRenderer.updateInternal() to re-generate Gsplats in the scene for + // SplatGenerator instances whose version is newer than what was generated + // for it last time. + generate({ + generator, + base, + count, + renderer, + }: { + generator: GsplatGenerator; + base: number; + count: number; + renderer: THREE.WebGLRenderer; + }): { nextBase: number } { + if (!this.target) { + throw new Error("Target must be initialized with ensureSplats"); + } + if (base + count > this.maxSplats) { + throw new Error("Base + count exceeds maxSplats"); + } + + const { program, material } = this.prepareProgramMaterial(generator); + program.update(); + + const renderState = this.saveRenderState(renderer); + + // Generate the Gsplats in "layer" chunks, in horizontal row ranges, + // that cover the total count of Gsplats. + const nextBase = + Math.ceil((base + count) / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + const layerSize = SPLAT_TEX_WIDTH * SPLAT_TEX_HEIGHT; + material.uniforms.targetBase.value = base; + material.uniforms.targetCount.value = count; + + // Keep generating layers until we've reached the next generation's base + while (base < nextBase) { + const layer = Math.floor(base / layerSize); + material.uniforms.targetLayer.value = layer; + + const layerBase = layer * layerSize; + const layerYStart = Math.floor((base - layerBase) / SPLAT_TEX_WIDTH); + const layerYEnd = Math.min( + SPLAT_TEX_HEIGHT, + Math.ceil((nextBase - layerBase) / SPLAT_TEX_WIDTH), + ); + + // Render the desired portion of the layer + renderer.setPixelRatio(1); + renderer.setRenderTarget(this.target, layer); + renderer.xr.isPresenting = false; + renderer.autoClear = false; + renderer.setScissorTest(true); + renderer.setScissor( + 0, + layerYStart, + SPLAT_TEX_WIDTH, + layerYEnd - layerYStart, + ); + renderer.render(PackedSplats.scene, PackedSplats.camera); + + base += SPLAT_TEX_WIDTH * (layerYEnd - layerYStart); + } + + this.resetRenderState(renderer, renderState); + return { nextBase }; + } + + static programTemplate: DynoProgramTemplate | null = null; + + // Cache for GsplatGenerator programs + static generatorProgram = new Map(); + + // Static Three.js objects for pseudo-compute shader rendering + static geometry = new THREE.PlaneGeometry(2, 2); + static mesh = new THREE.Mesh( + PackedSplats.geometry, + new THREE.RawShaderMaterial({ visible: false }), + ); + static scene = new THREE.Scene().add(PackedSplats.mesh); + static camera = new THREE.Camera(); +} + +// You can use a PackedSplats as a dyno block using the function +// dyno.readPackedSplats(packedSplats.dyno, dynoIndex) where +// dynoIndex is of type DynoVal<"int">. If you need to be able to change +// the input PackedSplats dynamically, however, you should create a +// DynoPackedSplats, whose property packedSplats you can change to any +// PackedSplats and that will be used in the dyno shader program. + +export const dynoPackedSplats = (packedSplats?: PackedSplats) => + new DynoPackedSplats({ packedSplats }); + +export class DynoPackedSplats extends DynoUniform< + typeof TPackedSplats, + "packedSplats", + { + texture: THREE.DataArrayTexture; + numSplats: number; + } +> { + packedSplats?: PackedSplats; + + constructor({ packedSplats }: { packedSplats?: PackedSplats } = {}) { + super({ + key: "packedSplats", + type: TPackedSplats, + globals: () => [definePackedSplats], + value: { + texture: PackedSplats.getEmpty(), + numSplats: 0, + }, + update: (value) => { + value.texture = + this.packedSplats?.getTexture() ?? PackedSplats.getEmpty(); + value.numSplats = this.packedSplats?.numSplats ?? 0; + return value; + }, + }); + this.packedSplats = packedSplats; + } +} diff --git a/src/Readback.ts b/src/Readback.ts new file mode 100644 index 0000000..e8bbae0 --- /dev/null +++ b/src/Readback.ts @@ -0,0 +1,349 @@ +import * as THREE from "three"; + +import { SPLAT_TEX_HEIGHT, SPLAT_TEX_WIDTH } from "./defines"; +import { type Dyno, OutputRgba8, dynoBlock } from "./dyno"; +import { DynoProgram, DynoProgramTemplate } from "./dyno/program"; +import computeVec4Template from "./shaders/computeVec4.glsl"; +import { getTextureSize } from "./utils"; + +// Readback can be used to run a Dyno program that maps an index to a 32-bit +// RGBA8 value, which is the only allowed, portable readback format for WebGL2. +// Using data packing and conversion you can read back any 32-bit value, which +// Forge uses to read back 2 float16 Gsplat distance values per index. + +export type Rgba8Readback = Dyno<{ index: "int" }, { rgba8: "vec4" }>; + +// Readback can be performed with various typed buffers, making it convenient +// to encode readback data in a variety of formats. + +export type ReadbackBuffer = + | ArrayBuffer + | Uint8Array + | Int8Array + | Uint16Array + | Int16Array + | Uint32Array + | Int32Array + | Float32Array; + +export class Readback { + renderer?: THREE.WebGLRenderer; + target?: THREE.WebGLArrayRenderTarget; + capacity: number; + count: number; + + constructor({ renderer }: { renderer?: THREE.WebGLRenderer } = {}) { + this.renderer = renderer; + this.capacity = 0; + this.count = 0; + } + + dispose() { + if (this.target) { + this.target.dispose(); + this.target = undefined; + } + } + + // Ensure we have a buffer large enough for the readback of count indices. + // Pass in previous bufer of the desired type. + ensureBuffer(count: number, buffer: B): B { + // Readback is performed in a 2D array of pixels, so round up with SPLAT_TEX_WIDTH + const roundedCount = + Math.ceil(Math.max(1, count) / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + const bytes = roundedCount * 4; + if (buffer.byteLength >= bytes) { + return buffer; + } + + // Need a larger buffer, create a new one of the same type + const newBuffer = new ArrayBuffer(bytes); + if (buffer instanceof ArrayBuffer) { + return newBuffer as B; + } + + const ctor = buffer.constructor as { new (arrayBuffer: ArrayBuffer): B }; + return new ctor(newBuffer) as B; + } + + // Ensure our render target is large enough for the readback of capacity indices. + ensureCapacity(capacity: number) { + const { width, height, depth, maxSplats } = getTextureSize(capacity); + if (!this.target || maxSplats > this.capacity) { + this.dispose(); + this.capacity = maxSplats; + + // The only portable readback format for WebGL2 is RGBA8 + this.target = new THREE.WebGLArrayRenderTarget(width, height, depth, { + depthBuffer: false, + stencilBuffer: false, + generateMipmaps: false, + magFilter: THREE.NearestFilter, + minFilter: THREE.NearestFilter, + }); + this.target.texture.format = THREE.RGBAFormat; + this.target.texture.type = THREE.UnsignedByteType; + this.target.texture.internalFormat = "RGBA8"; + } + } + + // Get a program and THREE.RawShaderMaterial for a given Rgba8Readback, + // generating it if necessary and caching the result. + prepareProgramMaterial(reader: Rgba8Readback): { + program: DynoProgram; + material: THREE.RawShaderMaterial; + } { + let program = Readback.readbackProgram.get(reader); + if (!program) { + const graph = dynoBlock( + { index: "int" }, + { rgba8: "vec4" }, + ({ index }) => { + reader.inputs.index = index; + const rgba8 = new OutputRgba8({ rgba8: reader.outputs.rgba8 }); + return { rgba8 }; + }, + ); + if (!Readback.programTemplate) { + Readback.programTemplate = new DynoProgramTemplate(computeVec4Template); + } + // Create a program from the template and graph + program = new DynoProgram({ + graph, + inputs: { index: "index" }, + outputs: { rgba8: "target" }, + template: Readback.programTemplate, + }); + Object.assign(program.uniforms, { + targetLayer: { value: 0 }, + targetBase: { value: 0 }, + targetCount: { value: 0 }, + }); + Readback.readbackProgram.set(reader, program); + } + + const material = program.prepareMaterial(); + Readback.mesh.material = material; + return { program, material }; + } + + private saveRenderState(renderer: THREE.WebGLRenderer) { + return { + xrPresenting: renderer.xr.isPresenting, + autoClear: renderer.autoClear, + scissorTest: renderer.getScissorTest(), + pixelRatio: renderer.getPixelRatio(), + }; + } + + private resetRenderState( + renderer: THREE.WebGLRenderer, + state: { + xrPresenting: boolean; + autoClear: boolean; + scissorTest: boolean; + pixelRatio: number; + }, + ) { + renderer.setRenderTarget(null); + renderer.setPixelRatio(state.pixelRatio); + renderer.xr.isPresenting = state.xrPresenting; + renderer.autoClear = state.autoClear; + renderer.setScissorTest(state.scissorTest); + } + + private process({ + count, + material, + }: { count: number; material: THREE.RawShaderMaterial }) { + const renderer = this.renderer; + if (!renderer) { + throw new Error("No renderer"); + } + if (!this.target) { + throw new Error("No target"); + } + + // Run the program in "layer" chunks, in horizontal row ranges, + // that cover the total count of indices. + const layerSize = SPLAT_TEX_WIDTH * SPLAT_TEX_HEIGHT; + material.uniforms.targetBase.value = 0; + material.uniforms.targetCount.value = count; + let baseIndex = 0; + + // Keep generating layers until completed count items + while (baseIndex < count) { + const layer = Math.floor(baseIndex / layerSize); + const layerBase = layer * layerSize; + const layerYEnd = Math.min( + SPLAT_TEX_HEIGHT, + Math.ceil((count - layerBase) / SPLAT_TEX_WIDTH), + ); + material.uniforms.targetLayer.value = layer; + + // Render the desired portion of the layer + renderer.setPixelRatio(1); + renderer.setRenderTarget(this.target, layer); + renderer.xr.isPresenting = false; + renderer.autoClear = false; + renderer.setScissorTest(true); + renderer.setScissor(0, 0, SPLAT_TEX_WIDTH, layerYEnd); + renderer.render(Readback.scene, Readback.camera); + + baseIndex += SPLAT_TEX_WIDTH * layerYEnd; + } + + this.count = count; + } + + private async read({ + readback, + }: { readback: B }): Promise { + const renderer = this.renderer; + if (!renderer) { + throw new Error("No renderer"); + } + if (!this.target) { + throw new Error("No target"); + } + + const roundedCount = + Math.ceil(this.count / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + if (readback.byteLength < roundedCount * 4) { + throw new Error( + `Readback buffer too small: ${readback.byteLength} < ${roundedCount * 4}`, + ); + } + const readbackUint8 = new Uint8Array( + readback instanceof ArrayBuffer ? readback : readback.buffer, + ); + + // We can only read back one 2D array layer of pixels at a time, + // so loop through them, initiate the readback, and collect the + // completion promises. + + const layerSize = SPLAT_TEX_WIDTH * SPLAT_TEX_HEIGHT; + let baseIndex = 0; + const promises = []; + + while (baseIndex < this.count) { + const layer = Math.floor(baseIndex / layerSize); + const layerBase = layer * layerSize; + const layerYEnd = Math.min( + SPLAT_TEX_HEIGHT, + Math.ceil((this.count - layerBase) / SPLAT_TEX_WIDTH), + ); + + renderer.setPixelRatio(1); + renderer.setRenderTarget(this.target, layer); + + // Compute the subarray that this layer of readback corresponds to + const readbackSize = SPLAT_TEX_WIDTH * layerYEnd * 4; + const subReadback = readbackUint8.subarray( + layerBase * 4, + layerBase * 4 + readbackSize, + ); + const promise = renderer?.readRenderTargetPixelsAsync( + this.target, + 0, + 0, + SPLAT_TEX_WIDTH, + layerYEnd, + subReadback, + ); + promises.push(promise); + + baseIndex += SPLAT_TEX_WIDTH * layerYEnd; + } + return Promise.all(promises).then(() => readback); + } + + // Perform render operation to run the Rgba8Readback program + // but don't perform the readback yet. + render({ + reader, + count, + renderer, + }: { reader: Rgba8Readback; count: number; renderer?: THREE.WebGLRenderer }) { + this.renderer = renderer || this.renderer; + if (!this.renderer) { + throw new Error("No renderer"); + } + + this.ensureCapacity(count); + + const { program, material } = this.prepareProgramMaterial(reader); + program.update(); + + const renderState = this.saveRenderState(this.renderer); + this.process({ count, material }); + this.resetRenderState(this.renderer, renderState); + } + + // Perform a readback of the render target, returning a buffer of the + // given type. + async readback({ + readback, + }: { readback: B }): Promise { + if (!this.renderer) { + throw new Error("No renderer"); + } + const renderState = this.saveRenderState(this.renderer); + const promise = this.read({ readback }); + this.resetRenderState(this.renderer, renderState); + return promise; + } + + // Perform a render and readback operation for the given Rgba8Readback, + // and readback buffer (call ensureBuffer first). + async renderReadback({ + reader, + count, + renderer, + readback, + }: { + reader: Rgba8Readback; + count: number; + renderer?: THREE.WebGLRenderer; + readback: B; + }): Promise { + this.renderer = renderer || this.renderer; + if (!this.renderer) { + throw new Error("No renderer"); + } + + this.ensureCapacity(count); + + const { program, material } = this.prepareProgramMaterial(reader); + program.update(); + + const renderState = this.saveRenderState(this.renderer); + + // Generate output + this.process({ count, material }); + + // Initiate readback + const promise = this.read({ readback }); + + this.resetRenderState(this.renderer, renderState); + return promise; + } + + getTexture(): THREE.DataArrayTexture | undefined { + return this.target?.texture; + } + + static programTemplate: DynoProgramTemplate | null = null; + + // Cache for Rgba8Readback programs + static readbackProgram = new Map(); + + // Static Three.js objects for pseudo-compute shader rendering + static geometry = new THREE.PlaneGeometry(2, 2); + static mesh = new THREE.Mesh( + Readback.geometry, + new THREE.RawShaderMaterial({ visible: false }), + ); + static scene = new THREE.Scene().add(Readback.mesh); + static camera = new THREE.Camera(); +} diff --git a/src/RgbaArray.ts b/src/RgbaArray.ts new file mode 100644 index 0000000..49446df --- /dev/null +++ b/src/RgbaArray.ts @@ -0,0 +1,283 @@ +import * as THREE from "three"; + +import { DynoPackedSplats, type PackedSplats } from "./PackedSplats"; +import { Readback, type Rgba8Readback } from "./Readback"; +import { SPLAT_TEX_WIDTH } from "./defines"; +import { + Dyno, + type DynoBlock, + DynoInt, + DynoUniform, + type DynoVal, + add, + dynoBlock, + readPackedSplatRange, + splitGsplat, + unindent, + unindentLines, +} from "./dyno"; +import { getTextureSize } from "./utils"; + +// An RgbaArray is a collection of ordered RGBA8 values, which can be used as a dyno +// data source, for example for recoloring Gsplats via SplatMesh.splatRgba. +// It can be instantiated from a Uint8Array of RGBA8 values, or it can be +// generated using a Rgba8Readback dyno program. + +export type RgbaArrayOptions = { + // Reserve space for at least this many RGBA values. + capacity?: number; + // Use the provided array of RGBA8 values as the source. + array?: Uint8Array; + // The number of actual RGBA8 values in the array. + count?: number; +}; + +export class RgbaArray { + capacity = 0; + count = 0; + array: Uint8Array | null = null; + + readback: Readback | null = null; + source: THREE.DataArrayTexture | null = null; + // Set to true if source array is updated to have it upload to GPU + needsUpdate = true; + + // Use this as a TRgbaArray in a dyno graph + dyno: DynoUniform; + + constructor(options: RgbaArrayOptions = {}) { + this.dyno = new DynoUniform({ + key: "rgbaArray", + type: TRgbaArray, + globals: () => [defineRgbaArray], + value: { + texture: RgbaArray.getEmpty(), + count: 0, + }, + update: (value) => { + value.texture = + this.readback?.getTexture() ?? this.source ?? RgbaArray.getEmpty(); + value.count = this.count; + return value; + }, + }); + + if (options.array) { + // Initialize with given array + this.array = options.array; + this.capacity = Math.floor(this.array.length / 4); + this.capacity = + Math.floor(this.capacity / SPLAT_TEX_WIDTH) * SPLAT_TEX_WIDTH; + this.count = Math.min( + this.capacity, + options.count ?? Number.POSITIVE_INFINITY, + ); + } else { + this.capacity = options.capacity ?? 0; + this.count = 0; + } + } + + // Free up resources + dispose() { + if (this.readback) { + this.readback.dispose(); + this.readback = null; + } + if (this.source) { + this.source.dispose(); + this.source = null; + } + } + + // Ensure that our array is large enough to hold capacity RGBA8 values. + ensureCapacity(capacity: number): Uint8Array { + if (!this.array || capacity > (this.array?.length ?? 0) / 4) { + this.capacity = getTextureSize(capacity).maxSplats; + const newArray = new Uint8Array(this.capacity * 4); + if (this.array) { + // Copy over existing data + newArray.set(this.array); + } + this.array = newArray; + } + return this.array; + } + + // Get the THREE.DataArrayTexture from either the readback or the source. + getTexture(): THREE.DataArrayTexture { + let texture = this.readback?.getTexture(); + if (this.source || this.array) { + texture = this.maybeUpdateSource(); + } + return texture ?? RgbaArray.getEmpty(); + } + + // Create or get a THREE.DataArrayTexture from the data array. + private maybeUpdateSource(): THREE.DataArrayTexture { + if (!this.array) { + throw new Error("No array"); + } + + if (this.needsUpdate || !this.source) { + this.needsUpdate = false; + + if (this.source) { + const { width, height, depth } = this.source.image; + if (this.capacity !== width * height * depth) { + this.source.dispose(); + this.source = null; + } + } + if (!this.source) { + const { width, height, depth } = getTextureSize(this.capacity); + this.source = new THREE.DataArrayTexture( + this.array, + width, + height, + depth, + ); + this.source.format = THREE.RGBAFormat; + this.source.type = THREE.UnsignedByteType; + this.source.internalFormat = "RGBA8"; + this.source.needsUpdate = true; + } else if (this.array.buffer !== this.source.image.data.buffer) { + this.source.image.data = new Uint8Array(this.array.buffer); + } + this.source.needsUpdate = true; + } + return this.source; + } + + // Generate the RGBA8 values from a Rgba8Readback dyno program. + render({ + reader, + count, + renderer, + }: { reader: Rgba8Readback; count: number; renderer: THREE.WebGLRenderer }) { + if (!this.readback) { + this.readback = new Readback({ renderer }); + } + this.readback.render({ reader, count, renderer }); + this.capacity = this.readback.capacity; + this.count = this.readback.count; + } + + // Extract the RGBA8 values from a PackedSplats collection. + fromPackedSplats({ + packedSplats, + base, + count, + renderer, + }: { + packedSplats: PackedSplats; + base: number; + count: number; + renderer: THREE.WebGLRenderer; + }) { + const { dynoSplats, dynoBase, dynoCount, reader } = RgbaArray.makeDynos(); + dynoSplats.packedSplats = packedSplats; + dynoBase.value = base; + dynoCount.value = count; + this.render({ reader, count, renderer }); + return this; + } + + // Read back the RGBA8 values from the readback buffer. + async read(): Promise { + if (!this.readback) { + throw new Error("No readback"); + } + if (!this.array || this.array.length < this.count * 4) { + this.array = new Uint8Array(this.capacity * 4); + } + const result = await this.readback.readback({ readback: this.array }); + return result.subarray(0, this.count * 4); + } + + private static emptySource: THREE.DataArrayTexture | null = null; + + // Can be used where you need an uninitialized THREE.DataArrayTexture like + // a uniform you will update with the result of this.getTexture() later. + static getEmpty(): THREE.DataArrayTexture { + if (!RgbaArray.emptySource) { + const emptyArray = new Uint8Array(1 * 4); + RgbaArray.emptySource = new THREE.DataArrayTexture(emptyArray, 1, 1, 1); + RgbaArray.emptySource.format = THREE.RGBAFormat; + RgbaArray.emptySource.type = THREE.UnsignedByteType; + RgbaArray.emptySource.internalFormat = "RGBA8"; + RgbaArray.emptySource.needsUpdate = true; + } + return RgbaArray.emptySource; + } + + private static dynos: { + dynoSplats: DynoPackedSplats; + dynoBase: DynoInt; + dynoCount: DynoInt; + reader: DynoBlock<{ index: "int" }, { rgba8: "vec4" }>; + } | null = null; + + // Create a dyno program that can extract RGBA8 values from a PackedSplats + private static makeDynos() { + if (!RgbaArray.dynos) { + const dynoSplats = new DynoPackedSplats(); + const dynoBase = new DynoInt({ value: 0 }); + const dynoCount = new DynoInt({ value: 0 }); + const reader = dynoBlock( + { index: "int" }, + { rgba8: "vec4" }, + ({ index }) => { + if (!index) { + throw new Error("index is undefined"); + } + index = add(index, dynoBase); + const gsplat = readPackedSplatRange( + dynoSplats, + index, + dynoBase, + dynoCount, + ); + return { rgba8: splitGsplat(gsplat).outputs.rgba }; + }, + ); + RgbaArray.dynos = { dynoSplats, dynoBase, dynoCount, reader }; + } + return RgbaArray.dynos; + } +} + +// Dyno types and definitions + +export const TRgbaArray = { type: "RgbaArray" } as { type: "RgbaArray" }; + +export const defineRgbaArray = unindent(` + struct RgbaArray { + sampler2DArray texture; + int count; + }; +`); + +export function readRgbaArray( + rgba: DynoVal, + index: DynoVal<"int">, +): DynoVal<"vec4"> { + const dyno = new Dyno< + { rgba: typeof TRgbaArray; index: "int" }, + { rgba: "vec4" } + >({ + inTypes: { rgba: TRgbaArray, index: "int" }, + outTypes: { rgba: "vec4" }, + inputs: { rgba, index }, + globals: () => [defineRgbaArray], + statements: ({ inputs, outputs }) => + unindentLines(` + if ((index >= 0) && (index < ${inputs.rgba}.count)) { + ${outputs.rgba} = texelFetch(${inputs.rgba}.texture, splatTexCoord(index), 0); + } else { + ${outputs.rgba} = vec4(0.0, 0.0, 0.0, 0.0); + } + `), + }); + return dyno.outputs.rgba; +} diff --git a/src/SplatAccumulator.ts b/src/SplatAccumulator.ts new file mode 100644 index 0000000..12b667f --- /dev/null +++ b/src/SplatAccumulator.ts @@ -0,0 +1,120 @@ +import * as THREE from "three"; + +import { PackedSplats } from "./PackedSplats"; +import type { + GsplatGenerator, + SplatGenerator, + SplatModifier, +} from "./SplatGenerator"; + +// SplatAccumulator helps manage the generation of splats from multiple +// SplatGenerators, keeping track of the splat mapping, coordinate system, +// and reference count. + +// A GeneratorMapping describes a Gsplat range that was generated, including +// which generator and its version number. +export type GeneratorMapping = { + node: SplatGenerator; + generator?: GsplatGenerator; + version: number; + base: number; + count: number; +}; + +export class SplatAccumulator { + splats = new PackedSplats(); + // The transform from Accumulator coordinate system to world coordinates. + toWorld = new THREE.Matrix4(); + // An array of all Gsplat mappings that were used for generation + mapping: GeneratorMapping[] = []; + // Number of ForgeViewpoints (or other) that reference this accumulator, used + // to figure out when it can be recycled for use + refCount = 0; + + // Incremented every time the splats are updated/generated. + splatsVersion = -1; + // Incremented every time the splat mapping/layout is updated. + // Splat sort order can be reused between equivalent mapping versions. + mappingVersion = -1; + + ensureGenerate(maxSplats: number) { + if (this.splats.ensureGenerate(maxSplats)) { + // If we had to resize our PackedSplats then clear all previous mappings + this.mapping = []; + } + } + + // Generate all Gsplats from an array of generators + generateSplats({ + renderer, + modifier, + generators, + forceUpdate, + originToWorld, + }: { + renderer: THREE.WebGLRenderer; + modifier: SplatModifier; + generators: GeneratorMapping[]; + forceUpdate?: boolean; + originToWorld: THREE.Matrix4; + }) { + // Create a lookup from last SplatGenerator + const mapping = this.mapping.reduce((map, record) => { + map.set(record.node, record); + return map; + }, new Map()); + + // Run generators that are different from existing mapping + let updated = 0; + let numSplats = 0; + for (const { node, generator, version, base, count } of generators) { + const current = mapping.get(node); + if ( + forceUpdate || + generator !== current?.generator || + version !== current?.version || + base !== current?.base || + count !== current?.count + ) { + // Something is different from before so we should generate these Gsplats + if (generator && count > 0) { + const modGenerator = modifier.apply(generator); + try { + this.splats.generate({ + generator: modGenerator, + base, + count, + renderer, + }); + } catch (error) { + node.generator = undefined; + node.generatorError = error; + } + updated += 1; + } + } + numSplats = Math.max(numSplats, base + count); + } + + this.splats.numSplats = numSplats; + this.toWorld = originToWorld; + this.mapping = generators; + return updated !== 0; + } + + // Check if this accumulator has exactly the same generator mapping as + // the previous one. If so, we can reuse the Gsplat sort order. + hasCorrespondence(other: SplatAccumulator) { + if (this.mapping.length !== other.mapping.length) { + return false; + } + return this.mapping.every(({ node, base, count }, i) => { + const { + node: otherNode, + base: otherBase, + count: otherCount, + } = other.mapping[i]; + return node === otherNode && base === otherBase && count === otherCount; + }); + } +} diff --git a/src/SplatEdit.ts b/src/SplatEdit.ts new file mode 100644 index 0000000..0dfdb35 --- /dev/null +++ b/src/SplatEdit.ts @@ -0,0 +1,827 @@ +import * as THREE from "three"; + +import { + Dyno, + DynoInt, + DynoUniform, + type DynoVal, + Gsplat, + unindent, + unindentLines, +} from "./dyno"; +import { newArray } from "./utils"; + +// Forge provides the ability to apply "edits" to Gsplats as part of the standard +// SplatMesh pipeline. These edits take the form of a sequence of operations, +// applied one at a time to the set of Gsplats in its packedSplats. Each operation +// evaluates a 7-dimensional field (RGBA and XYZ displacement) at each point in +// space that derives from N=1 or more Signed Distance Field shapes (such as spheres, +// boxes, planes, etc.), blended together and across inside-outisde boundaries. + +// The result is a an RGBA,XYZ value for each point in space, which combined with +// SplatEditRgbaBlendMode.MULTIPLY/SET_RGB/ADD_RGBA can be used to create special +// effects, for example simulating simple lighting or applying deformations in space, +// whose parameters can be updated each frame to create animated effects. + +// RGBA-XYZ values are computed by blending together values from all SDF shapes using +// the exponential "softmax" function, which is commutative (so blending order within +// a SplatEdit operation doesn't matter). The parameter SplatEdit.sdfSmooth controls +// the blending scale between SDF shapes, while SplatEdit.softEdge controls the scale +// of soft inside-outside shape edit blending. Their default values start at 0.0 and +// should be increased to soften the effect. + +// Note that XYZ displacement values are blended in the same way as RGBA, with a +// resulting displacement field that can be quite complex but "softly" blending +// between shapes. These RGBA-XYZ edits, along with time-based and overlapping +// fields can create many interesting animations and special effects, such as +// rippling leaves in the wind, an angry fire, or a looping water effects. Simply +// update the SplatEdit and SplatEditSdf objects and the operations will be applied +// immediately to the Gsplats in the scene. + +export enum SplatEditSdfType { + // ALL: Affects all points in space + ALL = "all", + // PLANE: Infinite plane (position, rotation) + PLANE = "plane", + // SPHERE: Sphere (position, radius) + SPHERE = "sphere", + // BOX: Rounded box (position, rotation, sizes, radius) + BOX = "box", + // ELLIPSOID: Ellipsoid (position, rotation, sizes) + ELLIPSOID = "ellipsoid", + // CYLINDER: Cylinder (position, rotation, radius, size_y) + CYLINDER = "cylinder", + // CAPSULE: Capsule (position, rotation, radius, size_y) + CAPSULE = "capsule", + // INFINITE_CONE: Infinite cone (position, rotation, radius=angle) + INFINITE_CONE = "infinite_cone", +} + +function sdfTypeToNumber(type: SplatEditSdfType) { + switch (type) { + case SplatEditSdfType.ALL: + return 0; + case SplatEditSdfType.PLANE: + return 1; + case SplatEditSdfType.SPHERE: + return 2; + case SplatEditSdfType.BOX: + return 3; + case SplatEditSdfType.ELLIPSOID: + return 4; + case SplatEditSdfType.CYLINDER: + return 5; + case SplatEditSdfType.CAPSULE: + return 6; + case SplatEditSdfType.INFINITE_CONE: + return 7; + default: + throw new Error(`Unknown SDF type: ${type}`); + } +} + +export enum SplatEditRgbaBlendMode { + // The RGBA of the splat is multiplied component-wise by the SDF’s + // RGBA value at that point in space. + MULTIPLY = "multiply", + // Ignore the Alpha value in the SDF, but set the splat’s RGB to + // equal the SDF’s RGB value at that point. + SET_RGB = "set_rgb", + // Add the SDF’s RGBA value at that point to the RGBA value of + // the Gsplat. This can produce hyper-saturated results, but is useful + // to easily “light up” areas. + ADD_RGBA = "add_rgba", +} + +function rgbaBlendModeToNumber(mode: SplatEditRgbaBlendMode) { + switch (mode) { + case SplatEditRgbaBlendMode.MULTIPLY: + return 0; + case SplatEditRgbaBlendMode.SET_RGB: + return 1; + case SplatEditRgbaBlendMode.ADD_RGBA: + return 2; + default: + throw new Error(`Unknown blend mode: ${mode}`); + } +} + +export type SplatEditSdfOptions = { + // The SDF shape type: ALL, PLANE, SPHERE, BOX, ELLIPSOID, CYLINDER, CAPSULE, + // or INFINITE_CONE. (default: SplatEditSdfType.SPHERE) + type?: SplatEditSdfType; + // Invert the SDF evaluation, swapping inside and outside regions. (default: false) + invert?: boolean; + // Opacity / "alpha" value used differently by blending modes (default: 1.0) + opacity?: number; + // RGB color applied within the shape. (default: new THREE.Color(1.0, 1.0, 1.0)) + color?: THREE.Color; + // XYZ displacement applied to splat positions inside the shape. + // (default: new THREE.Vector3(0.0, 0.0, 0.0)) + displace?: THREE.Vector3; + // Shape-specific size parameter: sphere radius, box corner rounding, + // cylinder/capsule radius, or for the infinite cone the angle factor + // (opening half-angle = π/4 × radius). + radius?: number; +}; + +export class SplatEditSdf extends THREE.Object3D { + type: SplatEditSdfType; + invert: boolean; + opacity: number; + color: THREE.Color; + displace: THREE.Vector3; + radius: number; + + constructor(options: SplatEditSdfOptions = {}) { + super(); + const { type, invert, opacity, color, displace, radius } = options; + this.type = type ?? SplatEditSdfType.SPHERE; + this.invert = invert ?? false; + this.opacity = opacity ?? 1.0; + this.color = color ?? new THREE.Color(1.0, 1.0, 1.0); + this.displace = displace ?? new THREE.Vector3(0.0, 0.0, 0.0); + this.radius = radius ?? 0.0; + } +} + +export type SplatEditOptions = { + // Name of this edit operation. If you omit it, a default "Edit 1", "Edit 2", ... + // is assigned. + name?: string; + // How the SDF’s RGBA modifies each splat’s RGBA: multiply, overwrite RGB, + // or add RGBA. (default: MULTIPLY) + rgbaBlendMode?: SplatEditRgbaBlendMode; + // Smoothing (in world‐space units) for blending between multiple SDF shapes + // at their boundaries. (default: 0.0) + sdfSmooth?: number; + // Soft‐edge falloff radius (in world‐space units) around each SDF shape’s surface. + // (default: 0.0) + softEdge?: number; + // Invert the SDF evaluation (inside/outside swap). (default: false) + invert?: boolean; + // Explicit array of SplatEditSdf objects to include. If null, any child + // SplatEditSdf instances are used. + sdfs?: SplatEditSdf[]; +}; + +export class SplatEdit extends THREE.Object3D { + // ordering used to apply SplatEdit operations to Gsplats. This is implicitly + // increased with each new SplatEdit. Reassigning ordering can be used to + // reorder the operations. + ordering: number; + rgbaBlendMode: SplatEditRgbaBlendMode; + sdfSmooth: number; + softEdge: number; + invert: boolean; + + // Optional list of explicit SDFs to including in this edit. If it is null, then + // any SplatEditSdf children in the scene graph will be added automatically. + sdfs: SplatEditSdf[] | null; + + // The next ordering number to use for a new SplatEdit, auto-incremented + static nextOrdering = 1; + + constructor(options: SplatEditOptions = {}) { + const { + name, + rgbaBlendMode = SplatEditRgbaBlendMode.MULTIPLY, + sdfSmooth = 0.0, + softEdge = 0.0, + invert = false, + sdfs = null, + } = options; + + super(); + this.rgbaBlendMode = rgbaBlendMode; + this.sdfSmooth = sdfSmooth; + this.softEdge = softEdge; + this.invert = invert; + this.sdfs = sdfs; + // Assign and auto-increment unique ordering number for this edit + this.ordering = SplatEdit.nextOrdering++; + // Automatically assign a default name if not provided + this.name = name ?? `Edit ${this.ordering}`; + } + + addSdf(sdf: SplatEditSdf) { + if (this.sdfs == null) { + this.sdfs = []; + } + this.sdfs.push(sdf); + } + + removeSdf(sdf: SplatEditSdf) { + if (this.sdfs == null) { + return; + } + this.sdfs = this.sdfs.filter((s) => s !== sdf); + } +} + +// Dyno implementation of RGBA-XYZ SDF editing. +// The SDFs are encoded in a texture while the edits are encoded +// as a uniform uvec4 array. + +export class SplatEdits { + // Maximum number of SDFs allocated + maxSdfs: number; + // Number of SDFs currently in use + numSdfs: number; + // Encoded SDF data + sdfData: Uint32Array; + // Float interpretation of SDF data + sdfFloatData: Float32Array; + // Texture with encoded SDF data + sdfTexture: THREE.DataTexture; + // An SdfArray dyno uniform + dynoSdfArray: DynoUniform; + + // Maximum number of edits allocated + maxEdits: number; + // Number of edits currently in use + numEdits: number; + // Encoded edit data + editData: Uint32Array; + // Float interpretation of edit data + editFloatData: Float32Array; + // A dyno uniform for the number of edits + dynoNumEdits: DynoUniform<"int", "numEdits">; + // A dyno uniform for the encoded edits, one uvec4 per edit + dynoEdits: DynoUniform<"uvec4", "edits">; + + constructor({ maxSdfs, maxEdits }: { maxSdfs?: number; maxEdits?: number }) { + // Allocate at least 16 SDFs for efficiency + this.maxSdfs = Math.max(16, maxSdfs ?? 0); + this.numSdfs = 0; + + // Allocate space: 8 x (u)vec4 values per SDF, Uint32 and Float32 arrays + this.sdfData = new Uint32Array(this.maxSdfs * 8 * 4); + this.sdfFloatData = new Float32Array(this.sdfData.buffer); + this.sdfTexture = this.newSdfTexture(this.sdfData, this.maxSdfs); + this.dynoSdfArray = new DynoUniform({ + key: "sdfArray", + type: SdfArray, + globals: () => [defineSdfArray], + value: { + numSdfs: 0, + sdfTexture: this.sdfTexture, + }, + update: (uniform) => { + uniform.numSdfs = this.numSdfs; + uniform.sdfTexture = this.sdfTexture; + return uniform; + }, + }); + + // Allocate at least 16 edits slots for efficiency + this.maxEdits = Math.max(16, maxEdits ?? 0); + this.numEdits = 0; + // Allocate space: 1 uvec4 per edit + this.editData = new Uint32Array(this.maxEdits * 4); + this.editFloatData = new Float32Array(this.editData.buffer); + this.dynoNumEdits = new DynoInt({ value: 0 }); + this.dynoEdits = this.newEdits(this.editData, this.maxEdits); + } + + private newSdfTexture(data: Uint32Array, maxSdfs: number) { + const texture = new THREE.DataTexture( + data, + 8, + maxSdfs, + THREE.RGBAIntegerFormat, + THREE.UnsignedIntType, + ); + texture.internalFormat = "RGBA32UI"; + texture.needsUpdate = true; + return texture; + } + + private newEdits(data: Uint32Array, maxEdits: number) { + return new DynoUniform({ + key: "edits", + type: "uvec4", + count: maxEdits, + globals: () => [defineEdit], + value: data, + }); + } + + // Ensure our SDF texture and edits uniform array have enough capacity. + // Reallocate if not. + private ensureCapacity({ + maxSdfs, + maxEdits, + }: { maxSdfs: number; maxEdits: number }): boolean { + let dynoUpdated = false; + if (maxSdfs > this.sdfTexture.image.height) { + this.sdfTexture.dispose(); + // At least double the size to avoid frequent reallocations + this.maxSdfs = Math.max(this.maxSdfs * 2, maxSdfs); + this.sdfData = new Uint32Array(this.maxSdfs * 8 * 4); + this.sdfFloatData = new Float32Array(this.sdfData.buffer); + this.sdfTexture = this.newSdfTexture(this.sdfData, this.maxSdfs); + } + if (maxEdits > (this.dynoEdits.count ?? 0)) { + // At least double the size to avoid frequent reallocations + this.maxEdits = Math.max(this.maxEdits * 2, maxEdits); + this.editData = new Uint32Array(this.maxEdits * 4); + this.editFloatData = new Float32Array(this.editData.buffer); + this.dynoEdits = this.newEdits(this.editData, this.maxEdits); + dynoUpdated = true; + } + return dynoUpdated; + } + + private updateEditData(offset: number, value: number): boolean { + // Update an edit uint32 value and return true if it changed + const updated = this.editData[offset] !== value; + this.editData[offset] = value; + return updated; + } + + private updateEditFloatData(offset: number, value: number): boolean { + // Update an edit float32 value and return true if it changed + tempFloat32[0] = value; + const updated = this.editFloatData[offset] !== tempFloat32[0]; + if (updated) { + this.editFloatData[offset] = tempFloat32[0]; + } + return updated; + } + + private encodeEdit( + editIndex: number, + { + sdfFirst, + sdfCount, + invert, + rgbaBlendMode, + softEdge, + sdfSmooth, + }: { + sdfFirst: number; + sdfCount: number; + invert: boolean; + rgbaBlendMode: number; + softEdge: number; + sdfSmooth: number; + }, + ): boolean { + const base = editIndex * 4; + let updated = false; + // Encode the edit fields into the editData array and check if any changed + updated = + this.updateEditData(base + 0, rgbaBlendMode | (invert ? 1 << 8 : 0)) || + updated; + updated = + this.updateEditData(base + 1, sdfFirst | (sdfCount << 16)) || updated; + updated = this.updateEditFloatData(base + 2, softEdge) || updated; + updated = this.updateEditFloatData(base + 3, sdfSmooth) || updated; + return updated; + } + + private updateSdfData(offset: number, value: number): boolean { + // Update an SDF uint32 value and return true if it changed + const updated = this.sdfData[offset] !== value; + this.sdfData[offset] = value; + return updated; + } + + private updateSdfFloatData(offset: number, value: number): boolean { + // Update an SDF float32 value and return true if it changed + tempFloat32[0] = value; + const updated = this.sdfFloatData[offset] !== tempFloat32[0]; + if (updated) { + this.sdfFloatData[offset] = tempFloat32[0]; + } + return updated; + } + + private encodeSdf( + sdfIndex: number, + { + sdfType, + invert, + center, + quaternion, + scale, + sizes, + }: { + sdfType: number; + invert?: boolean; + center?: THREE.Vector3; + quaternion?: THREE.Quaternion; + scale?: THREE.Vector3; + sizes?: THREE.Vector4; + }, + values: THREE.Vector4[], + ): boolean { + // Encode the SDF fields into the sdfData array and check if any changed + const base = sdfIndex * (8 * 4); + const flags = sdfType | (invert ? 1 << 8 : 0); + let updated = false; + + updated = this.updateSdfFloatData(base + 0, center?.x ?? 0) || updated; + updated = this.updateSdfFloatData(base + 1, center?.y ?? 0) || updated; + updated = this.updateSdfFloatData(base + 2, center?.z ?? 0) || updated; + updated = this.updateSdfData(base + 3, flags) || updated; + + updated = this.updateSdfFloatData(base + 4, quaternion?.x ?? 0) || updated; + updated = this.updateSdfFloatData(base + 5, quaternion?.y ?? 0) || updated; + updated = this.updateSdfFloatData(base + 6, quaternion?.z ?? 0) || updated; + updated = this.updateSdfFloatData(base + 7, quaternion?.w ?? 0) || updated; + + updated = this.updateSdfFloatData(base + 8, scale?.x ?? 0) || updated; + updated = this.updateSdfFloatData(base + 9, scale?.y ?? 0) || updated; + updated = this.updateSdfFloatData(base + 10, scale?.z ?? 0) || updated; + updated = this.updateSdfData(base + 11, 0) || updated; + + updated = this.updateSdfFloatData(base + 12, sizes?.x ?? 0) || updated; + updated = this.updateSdfFloatData(base + 13, sizes?.y ?? 0) || updated; + updated = this.updateSdfFloatData(base + 14, sizes?.z ?? 0) || updated; + updated = this.updateSdfFloatData(base + 15, sizes?.w ?? 0) || updated; + + const nValues = Math.min(4, values.length); + for (let i = 0; i < nValues; ++i) { + const vBase = base + 16 + i * 4; + updated = this.updateSdfFloatData(vBase + 0, values[i].x) || updated; + updated = this.updateSdfFloatData(vBase + 1, values[i].y) || updated; + updated = this.updateSdfFloatData(vBase + 2, values[i].z) || updated; + updated = this.updateSdfFloatData(vBase + 3, values[i].w) || updated; + } + return updated; + } + + // Update the SDFs and edits from an array of SplatEdits and their + // associated SplatEditSdfs, updating it for the dyno shader program. + update(edits: { edit: SplatEdit; sdfs: SplatEditSdf[] }[]): { + updated: boolean; + dynoUpdated: boolean; + } { + const sdfCount = edits.reduce((total, { sdfs }) => total + sdfs.length, 0); + const dynoUpdated = this.ensureCapacity({ + maxEdits: edits.length, + maxSdfs: sdfCount, + }); + + const values = [new THREE.Vector4(), new THREE.Vector4()]; + const center = new THREE.Vector3(); + const quaternion = new THREE.Quaternion(); + const scale = new THREE.Vector3(); + const sizes = new THREE.Vector4(); + + let sdfIndex = 0; + let updated = dynoUpdated; + + if (edits.length !== this.dynoNumEdits.value) { + this.dynoNumEdits.value = edits.length; + this.numEdits = edits.length; + updated = true; + } + + for (const [editIndex, { edit, sdfs }] of edits.entries()) { + updated = + this.encodeEdit(editIndex, { + sdfFirst: sdfIndex, + sdfCount: sdfs.length, + invert: edit.invert, + rgbaBlendMode: rgbaBlendModeToNumber(edit.rgbaBlendMode), + softEdge: edit.softEdge, + sdfSmooth: edit.sdfSmooth, + }) || updated; + + let sdfUpdated = false; + for (const sdf of sdfs) { + sizes.set(sdf.scale.x, sdf.scale.y, sdf.scale.z, sdf.radius); + // Temporarily set the SDF scale to 1.0 to get the world-to-SDF + // transform without scaling. The SDF treats the scale separately. + sdf.scale.setScalar(1.0); + sdf.updateMatrixWorld(); + const worldToSdf = sdf.matrixWorld.clone().invert(); + worldToSdf.decompose(center, quaternion, scale); + + sdf.scale.set(sizes.x, sizes.y, sizes.z); + sdf.updateMatrixWorld(); + + values[0].set(sdf.color.r, sdf.color.g, sdf.color.b, sdf.opacity); + values[1].set(sdf.displace.x, sdf.displace.y, sdf.displace.z, 1.0); + + sdfUpdated = + this.encodeSdf( + sdfIndex, + { + sdfType: sdfTypeToNumber(sdf.type), + invert: sdf.invert, + center, + quaternion, + scale, + sizes, + }, + values, + ) || sdfUpdated; + + sdfIndex += 1; + } + this.numSdfs = sdfIndex; + if (sdfUpdated) { + this.sdfTexture.needsUpdate = true; + } + updated ||= sdfUpdated; + } + return { updated, dynoUpdated }; + } + + // Modify a Gsplat in a dyno shader program using the current edits and SDFs. + modify(gsplat: DynoVal): DynoVal { + return applyGsplatRgbaDisplaceEdits( + gsplat, + this.dynoSdfArray, + this.dynoNumEdits, + this.dynoEdits, + ); + } +} + +// Dyno types and components: + +// An SdfArray contains a collection of SDFs encoded in a texture. +// Each SDF has a type and geometric parameters, but also encodes +// 4 x vec4 values, which can all be blended across multiple SDFs. +// The SplatEdit system uses 7 of these 16 values to encode RGBA-XYZ edits, +// but more can be added, and these SDFs can be used for entirely different +// purposes as well. + +export const SdfArray = { type: "SdfArray" } as { type: "SdfArray" }; + +export const defineSdfArray = unindent(` + struct SdfArray { + int numSdfs; + usampler2D sdfTexture; + }; + + void unpackSdfArray( + usampler2D sdfTexture, int sdfIndex, out uint flags, + out vec3 center, out vec4 quaternion, out vec3 scale, out vec4 sizes, + int numValues, out vec4 values[4] + ) { + uvec4 temp = texelFetch(sdfTexture, ivec2(0, sdfIndex), 0); + flags = temp.w; + center = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z)); + + temp = texelFetch(sdfTexture, ivec2(1, sdfIndex), 0); + quaternion = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + + temp = texelFetch(sdfTexture, ivec2(2, sdfIndex), 0); + scale = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z)); + + temp = texelFetch(sdfTexture, ivec2(3, sdfIndex), 0); + sizes = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + + for (int i = 0; i < numValues; ++i) { + temp = texelFetch(sdfTexture, ivec2(4 + i, sdfIndex), 0); + values[i] = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w)); + } + } + + const uint SDF_FLAG_TYPE = 0xFFu; + const uint SDF_FLAG_INVERT = 1u << 8u; + + const uint SDF_TYPE_ALL = 0u; + const uint SDF_TYPE_PLANE = 1u; + const uint SDF_TYPE_SPHERE = 2u; + const uint SDF_TYPE_BOX = 3u; + const uint SDF_TYPE_ELLIPSOID = 4u; + const uint SDF_TYPE_CYLINDER = 5u; + const uint SDF_TYPE_CAPSULE = 6u; + const uint SDF_TYPE_INFINITE_CONE = 7u; + + float evaluateSdfArray( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos, + float smoothK, int numValues, out vec4 outValues[4] + ) { + float distanceAccum = (smoothK == 0.0) ? 1.0 / 0.0 : 0.0; + float maxExp = -1.0 / 0.0; + for (int i = 0; i < numValues; ++i) { + outValues[i] = vec4(0.0); + } + + uint flags; + vec3 center, scale; + vec4 quaternion, sizes; + vec4 values[4]; + + int sdfLast = min(sdfFirst + sdfCount, numSdfs); + for (int index = sdfFirst; index < sdfLast; ++index) { + unpackSdfArray(sdfTexture, index, flags, center, quaternion, scale, sizes, numValues, values); + uint sdfType = flags & SDF_FLAG_TYPE; + vec3 sdfPos = quatVec(quaternion, pos * scale) + center; + + float distance; + switch (sdfType) { + case SDF_TYPE_ALL: + distance = -1.0 / 0.0; + break; + case SDF_TYPE_PLANE: { + distance = sdfPos.z; + break; + } + case SDF_TYPE_SPHERE: { + distance = length(sdfPos) - sizes.w; + break; + } + case SDF_TYPE_BOX: { + vec3 q = abs(sdfPos) - sizes.xyz + sizes.w; + distance = length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - sizes.w; + break; + } + case SDF_TYPE_ELLIPSOID: { + vec3 sizes = sizes.xyz; + float k0 = length(sdfPos / sizes); + float k1 = length(sdfPos / dot(sizes, sizes)); + distance = k0 * (k0 - 1.0) / k1; + break; + } + case SDF_TYPE_CYLINDER: { + vec2 d = abs(vec2(length(sdfPos.xz), sdfPos.y)) - sizes.wy; + distance = min(max(d.x, d.y), 0.0) + length(max(d, 0.0)); + break; + } + case SDF_TYPE_CAPSULE: { + sdfPos.y -= clamp(sdfPos.y, -0.5 * sizes.y, 0.5 * sizes.y); + distance = length(sdfPos) - sizes.w; + break; + } + case SDF_TYPE_INFINITE_CONE: { + float angle = 0.25 * PI * sizes.w; + vec2 c = vec2(sin(angle), cos(angle)); + vec2 q = vec2(length(sdfPos.xy), -sdfPos.z); + float d = length(q - c * max(dot(q, c), 0.0)); + distance = d * (((q.x * c.y - q.y * c.x) < 0.0) ? -1.0 : 1.0); + break; + } + } + + if ((flags & SDF_FLAG_INVERT) != 0u) { + distance = -distance; + } + + if (smoothK == 0.0) { + if (distance < distanceAccum) { + distanceAccum = distance; + for (int i = 0; i < numValues; ++i) { + outValues[i] = values[i]; + } + } + } else { + float scaledDistance = -distance / smoothK; + if (scaledDistance > maxExp) { + float scale = exp(maxExp - scaledDistance); + distanceAccum *= scale; + for (int i = 0; i < numValues; ++i) { + outValues[i] *= scale; + } + maxExp = scaledDistance; + } + + float weight = exp(scaledDistance - maxExp); + distanceAccum += weight; + for (int i = 0; i < numValues; ++i) { + outValues[i] += weight * values[i]; + } + } + } + + if (smoothK == 0.0) { + return distanceAccum; + } else { + // Very distant SDFs may result in 0 accumulation + if (distanceAccum == 0.0) { + return 1.0 / 0.0; + } + for (int i = 0; i < numValues; ++i) { + outValues[i] /= distanceAccum; + } + return (-log(distanceAccum) - maxExp) * smoothK; + } + } + + float modulateSdfArray( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos, + float smoothK, int numValues, out vec4 values[4], + float softEdge, bool invert + ) { + float distance = evaluateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, numValues, values); + if (invert) { + distance = -distance; + } + + return (softEdge == 0.0) ? ((distance < 0.0) ? 1.0 : 0.0) + : clamp(-distance / softEdge + 0.5, 0.0, 1.0); + } +`); + +export const defineEdit = unindent(` + const uint EDIT_FLAG_BLEND = 0xFFu; + const uint EDIT_BLEND_MULTIPLY = 0u; + const uint EDIT_BLEND_SET_RGB = 1u; + const uint EDIT_BLEND_ADD_RGBA = 2u; + const uint EDIT_FLAG_INVERT = 0x100u; + + void decodeEdit( + uvec4 packedEdit, out int sdfFirst, out int sdfCount, + out bool invert, out uint rgbaBlendMode, out float softEdge, out float sdfSmooth + ) { + rgbaBlendMode = packedEdit.x & EDIT_FLAG_BLEND; + invert = (packedEdit.x & EDIT_FLAG_INVERT) != 0u; + + sdfFirst = int(packedEdit.y & 0xFFFFu); + sdfCount = int(packedEdit.y >> 16u); + + softEdge = uintBitsToFloat(packedEdit.z); + sdfSmooth = uintBitsToFloat(packedEdit.w); + } + + void applyRgbaDisplaceEdit( + usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, inout vec3 pos, + float smoothK, float softEdge, bool invert, uint rgbaBlendMode, inout vec4 rgba + ) { + vec4 values[4]; + float modulate = modulateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, 2, values, softEdge, invert); + // On Android, moving values[0] is necessary to work around a compiler bug. + vec4 sdfRgba = values[0]; + vec4 sdfDisplaceScale = values[1]; + + vec4 target; + switch (rgbaBlendMode) { + case EDIT_BLEND_MULTIPLY: + target = rgba * sdfRgba; + break; + case EDIT_BLEND_SET_RGB: + target = vec4(sdfRgba.rgb, rgba.a * sdfRgba.a); + break; + case EDIT_BLEND_ADD_RGBA: + target = rgba + sdfRgba; + break; + default: + // Debug output if blend mode not set + target = vec4(fract(pos), 1.0); + } + rgba = mix(rgba, target, modulate); + pos += sdfDisplaceScale.xyz * modulate; + } + + void applyPackedRgbaDisplaceEdit(uvec4 packedEdit, usampler2D sdfTexture, int numSdfs, inout vec3 pos, inout vec4 rgba) { + int sdfFirst, sdfCount; + bool invert; + uint rgbaBlendMode; + float softEdge, sdfSmooth; + decodeEdit(packedEdit, sdfFirst, sdfCount, invert, rgbaBlendMode, softEdge, sdfSmooth); + applyRgbaDisplaceEdit(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, sdfSmooth, softEdge, invert, rgbaBlendMode, rgba); + } +`); + +function applyGsplatRgbaDisplaceEdits( + gsplat: DynoVal, + sdfArray: DynoVal, + numEdits: DynoVal<"int">, + rgbaDisplaceEdits: DynoVal<"uvec4">, +): DynoVal { + const dyno = new Dyno< + { + gsplat: typeof Gsplat; + sdfArray: typeof SdfArray; + numEdits: "int"; + rgbaDisplaceEdits: "uvec4"; + }, + { gsplat: typeof Gsplat } + >({ + inTypes: { + gsplat: Gsplat, + sdfArray: SdfArray, + numEdits: "int", + rgbaDisplaceEdits: "uvec4", + }, + outTypes: { gsplat: Gsplat }, + globals: () => [defineSdfArray, defineEdit], + inputs: { gsplat, sdfArray, numEdits, rgbaDisplaceEdits }, + statements: ({ inputs, outputs }) => { + const { sdfArray, numEdits, rgbaDisplaceEdits } = inputs; + const { gsplat } = outputs; + return unindentLines(` + ${gsplat} = ${inputs.gsplat}; + if (isGsplatActive(${gsplat}.flags)) { + for (int editIndex = 0; editIndex < ${numEdits}; ++editIndex) { + applyPackedRgbaDisplaceEdit( + ${rgbaDisplaceEdits}[editIndex], ${sdfArray}.sdfTexture, ${sdfArray}.numSdfs, + ${gsplat}.center, ${gsplat}.rgba + ); + } + } + `); + }, + }); + return dyno.outputs.gsplat; +} + +const tempFloat32 = new Float32Array(1); diff --git a/src/SplatGenerator.ts b/src/SplatGenerator.ts new file mode 100644 index 0000000..e1407b9 --- /dev/null +++ b/src/SplatGenerator.ts @@ -0,0 +1,216 @@ +import * as THREE from "three"; +import type { SplatEdit } from "./SplatEdit"; +import { + type Dyno, + DynoFloat, + type DynoVal, + DynoVec3, + DynoVec4, + Gsplat, + dynoBlock, + transformGsplat, +} from "./dyno"; + +// A GsplatGenerator is a dyno program that maps an index to a Gsplat's properties + +export type GsplatGenerator = Dyno<{ index: "int" }, { gsplat: typeof Gsplat }>; + +// A GsplatModifier is a dyno program that inputs a Gsplat, modifies, and outputs it + +export type GsplatModifier = Dyno< + { gsplat: typeof Gsplat }, + { gsplat: typeof Gsplat } +>; + +// A SplatModifier is a utility class to apply a GsplatModifier to +// a GsplatGenerator pipeline, caching the combined result for efficiency. + +export class SplatModifier { + modifier: GsplatModifier; + cache: Map; + + constructor(modifier: GsplatModifier) { + this.modifier = modifier; + this.cache = new Map(); + } + + apply(generator: GsplatGenerator): GsplatGenerator { + let modified = this.cache.get(generator); + if (!modified) { + modified = dynoBlock( + { index: "int" }, + { gsplat: Gsplat }, + ({ index }) => { + const { gsplat } = generator.apply({ index }); + return this.modifier.apply({ gsplat }); + }, + ); + this.cache.set(generator, modified); + } + return modified; + } +} + +// A SplatTransformer is a utility class to apply a transform to a Gsplat +// via a scale, rotation, and translation. Scale is a single float because +// anisotropic scaling of Gsplats is not supported. + +export class SplatTransformer { + scale: DynoFloat; + rotate: DynoVec4; + translate: DynoVec3; + + // Create the dyno uniforms that parameterize the transform, setting them + // to initial values that are different from any valid transform. + constructor() { + this.scale = new DynoFloat({ value: Number.NEGATIVE_INFINITY }); + this.rotate = new DynoVec4({ + value: new THREE.Quaternion( + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + ), + }); + this.translate = new DynoVec3({ + value: new THREE.Vector3( + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + Number.POSITIVE_INFINITY, + ), + }); + } + + // Apply the transform to a Gsplat in a dyno program. + modify(gsplat: DynoVal): DynoVal { + return transformGsplat(gsplat, { + scale: this.scale, + rotate: this.rotate, + translate: this.translate, + }); + } + + // Update the uniforms to match the given transform matrix. + updateFromMatrix(transform: THREE.Matrix4) { + const scale = new THREE.Vector3(); + const quaternion = new THREE.Quaternion(); + const position = new THREE.Vector3(); + transform.decompose(position, quaternion, scale); + const newScale = (scale.x + scale.y + scale.z) / 3; + + let updated = false; + if (newScale !== this.scale.value) { + this.scale.value = newScale; + updated = true; + } + if (!position.equals(this.translate.value)) { + this.translate.value.copy(position); + updated = true; + } + if (!quaternion.equals(this.rotate.value)) { + this.rotate.value.copy(quaternion); + updated = true; + } + return updated; + } + + // Update this transform to match the object's to-world transform. + update(object: THREE.Object3D): boolean { + object.updateMatrixWorld(); + return this.updateFromMatrix(object.matrixWorld); + } +} + +// SplatGenerator is an Object3D that can be placed anywhere in the scene +// to generate Gsplats into the world for ForgeRenderer. All Gsplats from +// SplatGenerators across the scene will be accumulated into a single +// SplatAccumulator, which are sorted and rendered together. +// +// Each SplatGenerator has two main properties: +// - numSplats: the number of Gsplats to generate +// - generator: a GsplatGenerator dyno program that maps a splat index +// to a Gsplat's properties +// Each of these properties can be changed at anytime, however changing +// numSplats means we no longer have a correspondence between Gsplats +// in successive frames, meaning we can't reuse the previous Gsplat sort +// order. Similarly, changing the generator requires re-generating the +// shader program, which will trigger a GPU shader compilation the first +// time (possibly a perceptible "hickup" in the framerate) but is cached +// subsequence times if the generator is the same as one that was used previously. +// +// A SplatGenerator also has a custom frameUpdate function that is called +// on each execution, allowing you to update uniforms or other parameters that +// affect the generation. If the Gsplats are changed, you must call +// updateVersion() (alternatively, set needsUpdate to true) to trigger a +// re-generation of the Gsplats for this SplatGenerator. + +export class SplatGenerator extends THREE.Object3D { + numSplats: number; + generator?: GsplatGenerator; + generatorError?: unknown; + frameUpdate?: ({ + object, + time, + deltaTime, + viewToWorld, + globalEdits, + }: { + object: SplatGenerator; + time: number; + deltaTime: number; + viewToWorld: THREE.Matrix4; + globalEdits: SplatEdit[]; + }) => void; + version: number; + + constructor({ + numSplats, + generator, + construct, + update, + }: { + numSplats?: number; + generator?: GsplatGenerator; + construct?: (object: SplatGenerator) => { + generator?: GsplatGenerator; + numSplats?: number; + frameUpdate?: (object: SplatGenerator) => void; + }; + update?: ({ + object, + time, + deltaTime, + viewToWorld, + globalEdits, + }: { + object: SplatGenerator; + time: number; + deltaTime: number; + viewToWorld: THREE.Matrix4; + globalEdits: SplatEdit[]; + }) => void; + }) { + super(); + + this.numSplats = numSplats ?? 0; + this.generator = generator; + this.frameUpdate = update; + this.version = 0; + + if (construct) { + const constructed = construct(this); + // If we returned something, update our properties + Object.assign(this, constructed); + } + } + + updateVersion() { + this.version += 1; + } + + set needsUpdate(value: boolean) { + if (value) { + this.updateVersion(); + } + } +} diff --git a/src/SplatGeometry.ts b/src/SplatGeometry.ts new file mode 100644 index 0000000..6db33a4 --- /dev/null +++ b/src/SplatGeometry.ts @@ -0,0 +1,44 @@ +import * as THREE from "three"; + +// SplatGeometry is an internal class used by ForgeRenderer to render a collection +// of Gsplats in a single draw call by extending THREE.InstancedBufferGeometry. +// Each Gsplat is drawn as two triangles, with the order of the Gsplats determined +// by the instance attribute "ordering". + +export class SplatGeometry extends THREE.InstancedBufferGeometry { + ordering: Uint32Array; + attribute: THREE.InstancedBufferAttribute; + + constructor(ordering: Uint32Array, activeSplats: number) { + super(); + + this.ordering = ordering; + + this.setAttribute("position", new THREE.BufferAttribute(QUAD_VERTICES, 3)); + this.setIndex(new THREE.BufferAttribute(QUAD_INDICES, 1)); + + // Hack to work around Three.js + // @ts-ignore + this._maxInstanceCount = ordering.length; + this.instanceCount = activeSplats; + + this.attribute = new THREE.InstancedBufferAttribute(ordering, 1, false, 1); + this.attribute.setUsage(THREE.DynamicDrawUsage); + this.setAttribute("splatIndex", this.attribute); + } + + update(ordering: Uint32Array, activeSplats: number) { + this.ordering = ordering; + this.attribute.array = ordering; + this.instanceCount = activeSplats; + this.attribute.addUpdateRange(0, activeSplats); + this.attribute.needsUpdate = true; + } +} + +// Each instance draws to triangles covering a quad over coords (-1,-1,0)..(1,1,0) +const QUAD_VERTICES = new Float32Array([ + -1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0, +]); + +const QUAD_INDICES = new Uint16Array([0, 1, 2, 0, 2, 3]); diff --git a/src/SplatLoader.ts b/src/SplatLoader.ts new file mode 100644 index 0000000..108c644 --- /dev/null +++ b/src/SplatLoader.ts @@ -0,0 +1,218 @@ +import { FileLoader, Loader, type LoadingManager } from "three"; +import { PackedSplats } from "./PackedSplats"; +import { SplatMesh } from "./SplatMesh"; +import { PlyReader } from "./ply"; +import { withWorker } from "./splatWorker"; +import { decompressPartialGzip, getTextureSize } from "./utils"; + +// SplatLoader implements the THREE.Loader interface and supports loading a variety +// of differeng Gsplat file formats. Formats .PLY and .SPZ can be auto-detected +// from the file contents, while .SPLAT and .KSPLAT require either having the +// appropriate file extension as part of the path, or it can be explicitly set +// in the loader using the fileType property. + +export class SplatLoader extends Loader { + fileLoader: FileLoader; + fileType?: SplatFileType; + + constructor(manager?: LoadingManager) { + super(manager); + this.fileLoader = new FileLoader(manager); + } + + load( + url: string, + onLoad?: (decoded: PackedSplats) => void, + onProgress?: (event: ProgressEvent) => void, + onError?: (error: unknown) => void, + ) { + this.fileLoader.setResponseType("arraybuffer"); + this.fileLoader.setCrossOrigin(this.crossOrigin); + this.fileLoader.setWithCredentials(this.withCredentials); + this.fileLoader.setPath(this.path); + this.fileLoader.setResourcePath(this.resourcePath); + this.fileLoader.setRequestHeader(this.requestHeader); + this.fileLoader.load( + url, + async (response) => { + if (onLoad) { + const input = response as ArrayBuffer; + const decoded = await unpackSplats({ + input, + fileType: this.fileType, + pathOrUrl: url, + }); + onLoad(new PackedSplats(decoded)); + } + }, + onProgress, + onError, + ); + } + + async loadAsync( + url: string, + onProgress?: (event: ProgressEvent) => void, + ): Promise { + return new Promise((resolve, reject) => { + this.load( + url, + (decoded) => { + resolve(decoded); + }, + onProgress, + reject, + ); + }); + } + + parse(packedSplats: PackedSplats): SplatMesh { + return new SplatMesh({ packedSplats }); + } +} + +export enum SplatFileType { + PLY = "ply", + WLG0 = "wlg0", + SPZ = "spz", + SPLAT = "splat", + KSPLAT = "ksplat", +} + +export function getSplatFileType( + fileBytes: Uint8Array, +): SplatFileType | undefined { + const view = new DataView(fileBytes.buffer); + if ((view.getUint32(0, true) & 0x00ffffff) === 0x00796c70) { + return SplatFileType.PLY; + } + if (view.getUint32(0, true) === 0x30474c57) { + return SplatFileType.WLG0; + } + if ((view.getUint32(0, true) & 0x00ffffff) === 0x00088b1f) { + // Gzipped file, unpack beginning to check magic number + const header = decompressPartialGzip(fileBytes, 4); + const gView = new DataView(header.buffer); + if (gView.getUint32(0, true) === 0x5053474e) { + return SplatFileType.SPZ; + } + // Unknown Gzipped file type + return undefined; + } + // Unknown file type + return undefined; +} + +// Returns the lowercased file extension from a path or URL +export function getFileExtension(pathOrUrl: string): string { + const noTrailing = pathOrUrl.split(/[?#]/, 1)[0]; + const lastSlash = Math.max( + noTrailing.lastIndexOf("/"), + noTrailing.lastIndexOf("\\"), + ); + const filename = noTrailing.slice(lastSlash + 1); + const lastDot = filename.lastIndexOf("."); + if (lastDot <= 0 || lastDot === filename.length - 1) { + return ""; // No extension + } + return filename.slice(lastDot + 1).toLowerCase(); +} + +export async function unpackSplats({ + input, + fileType, + pathOrUrl, +}: { + input: Uint8Array | ArrayBuffer; + fileType?: SplatFileType; + pathOrUrl?: string; +}): Promise<{ + packedArray: Uint32Array; + numSplats: number; + extra?: Record; +}> { + const fileBytes = + input instanceof ArrayBuffer ? new Uint8Array(input) : input; + let splatFileType = fileType; + if (!fileType) { + splatFileType = getSplatFileType(fileBytes); + if (!splatFileType && pathOrUrl) { + const extension = getFileExtension(pathOrUrl); + if (extension === "ply") { + splatFileType = SplatFileType.PLY; + } else if (extension === "wlg") { + splatFileType = SplatFileType.WLG0; + } else if (extension === "spz") { + splatFileType = SplatFileType.SPZ; + } else if (extension === "splat") { + splatFileType = SplatFileType.SPLAT; + } else if (extension === "ksplat") { + splatFileType = SplatFileType.KSPLAT; + } + } + } + + if (splatFileType === SplatFileType.WLG0) { + return await withWorker(async (worker) => { + const { packedArray, numSplats } = (await worker.call("decodeWlg", { + fileBytes, + })) as { packedArray: Uint32Array; numSplats: number }; + return { packedArray, numSplats }; + }); + } + if (splatFileType === SplatFileType.PLY) { + const ply = new PlyReader({ fileBytes }); + await ply.parseHeader(); + const numSplats = ply.numSplats; + const maxSplats = getTextureSize(numSplats).maxSplats; + const args = { fileBytes, packedArray: new Uint32Array(maxSplats * 4) }; + return await withWorker(async (worker) => { + const { packedArray, numSplats, extra } = (await worker.call( + "unpackPly", + args, + )) as { + packedArray: Uint32Array; + numSplats: number; + extra: Record; + }; + return { packedArray, numSplats, extra }; + }); + } + if (splatFileType === SplatFileType.SPZ) { + return await withWorker(async (worker) => { + const { packedArray, numSplats, extra } = (await worker.call( + "decodeSpz", + { + fileBytes, + }, + )) as { + packedArray: Uint32Array; + numSplats: number; + extra: Record; + }; + return { packedArray, numSplats, extra }; + }); + } + if (splatFileType === SplatFileType.SPLAT) { + return await withWorker(async (worker) => { + const { packedArray, numSplats } = (await worker.call("decodeAntiSplat", { + fileBytes, + })) as { packedArray: Uint32Array; numSplats: number }; + return { packedArray, numSplats }; + }); + } + if (splatFileType === SplatFileType.KSPLAT) { + return await withWorker(async (worker) => { + const { packedArray, numSplats, extra } = (await worker.call( + "decodeKsplat", + { fileBytes }, + )) as { + packedArray: Uint32Array; + numSplats: number; + extra: Record; + }; + return { packedArray, numSplats, extra }; + }); + } + throw new Error("Unknown splat file type"); +} diff --git a/src/SplatMesh.ts b/src/SplatMesh.ts new file mode 100644 index 0000000..d2554dc --- /dev/null +++ b/src/SplatMesh.ts @@ -0,0 +1,842 @@ +import * as THREE from "three"; + +import init_wasm, { raycast_splats } from "forge-internal-rs"; +import { PackedSplats } from "./PackedSplats"; +import { type RgbaArray, readRgbaArray } from "./RgbaArray"; +import { SplatEdit, SplatEditSdf, SplatEdits } from "./SplatEdit"; +import { + type GsplatModifier, + SplatGenerator, + SplatTransformer, +} from "./SplatGenerator"; +import type { SplatFileType } from "./SplatLoader"; +import type { SplatSkinning } from "./SplatSkinning"; +import { + DynoFloat, + DynoUsampler2DArray, + type DynoVal, + DynoVec4, + Gsplat, + add, + combineGsplat, + defineGsplat, + dyno, + dynoBlock, + dynoConst, + extendVec, + mul, + normalize, + readPackedSplat, + splitGsplat, + sub, + unindent, + unindentLines, +} from "./dyno"; +import { getTextureSize } from "./utils"; + +export type SplatMeshOptions = { + // URL to fetch a Gaussian splat file from(supports .ply, .splat, .ksplat, + // .spz formats). (default: undefined) + url?: string; + // Raw bytes of a Gaussian splat file to decode directly instead of fetching + // from URL. (default: undefined) + fileBytes?: Uint8Array | ArrayBuffer; + // Override the file type detection for formats that can't be reliably + // auto-detected (.splat, .ksplat). (default: undefined auto-detects other + // formats from file contents) + fileType?: SplatFileType; + // Use an existing PackedSplats object as the source instead of loading from + // a file. Can be used to share a collection of Gsplats among multiple SplatMeshes + // (default: undefined creates a new empty PackedSplats or decoded from a + // data source above) + packedSplats?: PackedSplats; + // Reserve space for at least this many splats when constructing the mesh + // initially. (default: determined by file) + maxSplats?: number; + // Callback function to programmatically create splats at initialization + // in provided PackedSplats. (default: undefined) + constructSplats?: (splats: PackedSplats) => Promise | void; + // Callback function that is called when mesh initialization is complete. + // (default: undefined) + onLoad?: (mesh: SplatMesh) => Promise | void; + // Controls whether SplatEdits have any effect on this mesh. (default: true) + editable?: boolean; + // Callback function that is called every frame to update the mesh. + // Call mesh.updateVersion() if splats need to be regenerated due to some change. + // Calling updateVersion() is not necessary for object transformations, recoloring, + // or opacity adjustments as these are auto-detected. (default: undefined) + onFrame?: ({ + mesh, + time, + deltaTime, + }: { mesh: SplatMesh; time: number; deltaTime: number }) => void; + // Gsplat modifier to apply in object-space before any transformations. + // A GsplatModifier is a dyno shader-graph block that transforms an input + // gsplat: DynoVal to an output gsplat: DynoVal with gsplat.center + // coordinate in object-space. (default: undefined) + objectModifier?: GsplatModifier; + // Gsplat modifier to apply in world-space after transformations. + // (default: undefined) + worldModifier?: GsplatModifier; +}; + +export type SplatMeshContext = { + transform: SplatTransformer; + viewToWorld: SplatTransformer; + worldToView: SplatTransformer; + viewToObject: SplatTransformer; + recolor: DynoVec4; + time: DynoFloat; + deltaTime: DynoFloat; +}; + +export class SplatMesh extends SplatGenerator { + // A Promise you can await to ensure fetching, parsing, + // and initialization has completed + initialized: Promise; + // A boolean indicating whether initialization is complete + isInitialized = false; + + // If you modify packedSplats you should set + // splatMesh.packedSplats.needsUpdate = true to signal to Three.js that it + // should re-upload the data to the underlying texture. Use this sparingly with + // objects with smaller Gsplat counts as it requires a CPU-GPU data transfer for + // each frame. Thousands to tens of thousands of Gsplats ir fine. (See hands.ts + // for an example of rendering "Gsplat hands" in WebXR using this technique.) + packedSplats: PackedSplats; + + // A THREE.Color that can be used to tint all splats in the mesh. + // (default: new THREE.Color(1, 1, 1)) + recolor: THREE.Color = new THREE.Color(1, 1, 1); + // Global opacity multiplier for all splats in the mesh. (default: 1) + opacity = 1; + + // A SplatMeshContext consisting of useful scene and object dyno uniforms that can + // be used to in the Gsplat processing pipeline, for example via objectModifier and + // worldModifier. (created on construction) + context: SplatMeshContext; + onFrame?: ({ + mesh, + time, + deltaTime, + }: { mesh: SplatMesh; time: number; deltaTime: number }) => void; + + objectModifier?: GsplatModifier; + worldModifier?: GsplatModifier; + // Set to true to have the viewToObject property in context be updated each frame. + // If the mesh has extra.sh1 (first order spherical harmonics directional lighting) + // this property will always be updated. (default: false) + enableViewToObject = false; + // Set to true to have context.viewToWorld updated each frame. (default: false) + enableViewToWorld = false; + // Set to true to have context.worldToView updated each frame. (default: false) + enableWorldToView = false; + + // Optional SplatSkinning instance for animating splats with dual-quaternion + // skeletal animation. (default: null) + skinning: SplatSkinning | null = null; + + // Optional list of SplatEdits to apply to the mesh. If null, any SplatEdit + // children in the scene graph will be added automatically. (default: null) + edits: SplatEdit[] | null = null; + editable: boolean; + // Compiled SplatEdits for applying SDF edits to splat RGBA + centers + private rgbaDisplaceEdits: SplatEdits | null = null; + // Optional RgbaArray to overwrite splat RGBA values with custom values. + // Useful for "baking" RGB and opacity edits into the SplatMesh. (default: null) + splatRgba: RgbaArray | null = null; + + // Maximum Spherical Harmonics level to use. Call updateGenerator() + // after changing. (default: 3) + maxSh = 3; + + constructor(options: SplatMeshOptions = {}) { + const transform = new SplatTransformer(); + const viewToWorld = new SplatTransformer(); + const worldToView = new SplatTransformer(); + const viewToObject = new SplatTransformer(); + const recolor = new DynoVec4({ + value: new THREE.Vector4( + Number.NEGATIVE_INFINITY, + Number.NEGATIVE_INFINITY, + Number.NEGATIVE_INFINITY, + Number.NEGATIVE_INFINITY, + ), + }); + const time = new DynoFloat({ value: 0 }); + const deltaTime = new DynoFloat({ value: 0 }); + const context = { + transform, + viewToWorld, + worldToView, + viewToObject, + recolor, + time, + deltaTime, + }; + + super({ + update: ({ time, deltaTime, viewToWorld, globalEdits }) => + this.update({ time, deltaTime, viewToWorld, globalEdits }), + }); + + this.packedSplats = options.packedSplats ?? new PackedSplats(); + this.numSplats = this.packedSplats.numSplats; + this.editable = options.editable ?? true; + this.onFrame = options.onFrame; + + this.context = context; + this.objectModifier = options.objectModifier; + this.worldModifier = options.worldModifier; + + this.updateGenerator(); + + if ( + options.url || + options.fileBytes || + options.constructSplats || + (options.packedSplats && !options.packedSplats.isInitialized) + ) { + // We need to initialize asynchronously given the options + this.initialized = this.asyncInitialize(options).then(async () => { + this.updateGenerator(); + + this.isInitialized = true; + if (options.onLoad) { + const maybePromise = options.onLoad(this); + if (maybePromise instanceof Promise) { + await maybePromise; + } + } + return this; + }); + } else { + this.isInitialized = true; + this.initialized = Promise.resolve(this); + if (options.onLoad) { + const maybePromise = options.onLoad(this); + // If onLoad returns a promise, wait for it to complete + if (maybePromise instanceof Promise) { + this.initialized = maybePromise.then(() => this); + } + } + } + } + + async asyncInitialize(options: SplatMeshOptions) { + const { url, fileBytes, fileType, maxSplats, constructSplats } = options; + if (url || fileBytes || constructSplats) { + const packedSplatsOptions = { + url, + fileBytes, + fileType, + maxSplats, + construct: constructSplats, + }; + this.packedSplats.reinitialize(packedSplatsOptions); + } + if (this.packedSplats) { + await this.packedSplats.initialized; + this.numSplats = this.packedSplats.numSplats; + this.updateGenerator(); + } + } + + static staticInitialized = SplatMesh.staticInitialize(); + static isStaticInitialized = false; + + static dynoTime = new DynoFloat({ value: 0 }); + + static async staticInitialize() { + await init_wasm(); + SplatMesh.isStaticInitialized = true; + } + + // Creates a new Gsplat with the provided parameters (all values in "float" space, + // i.e. 0-1 for opacity and color) and adds it to the end of the packedSplats, + // increasing numSplats by 1. If necessary, reallocates the buffer with an exponential + // doubling strategy to fit the new data, so it's fairly efficient to just + // pushSplat(...) each Gsplat you want to create in a loop. + pushSplat( + center: THREE.Vector3, + scales: THREE.Vector3, + quaternion: THREE.Quaternion, + opacity: number, + color: THREE.Color, + ) { + this.packedSplats.pushSplat(center, scales, quaternion, opacity, color); + } + + // This method iterates over all Gsplats in this instance's packedSplats, + // invoking the provided callback with index: number in 0..=(this.numSplats-1) and + // center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, + // opacity: number (0..1), and color: THREE.Color (rgb values in 0..1). + // Note that the objects passed in as center etc. are the same for every callback + // invocation: these objects are reused for efficiency. Changing these values has + // no effect as they are decoded/unpacked copies of the underlying data. To update + // the packedSplats, call .packedSplats.setSplat(index, center, scales, + // quaternion, opacity, color). + forEachSplat( + callback: ( + index: number, + center: THREE.Vector3, + scales: THREE.Vector3, + quaternion: THREE.Quaternion, + opacity: number, + color: THREE.Color, + ) => void, + ) { + this.packedSplats.forEachSplat(callback); + } + + // Call this when you are finished with the SplatMesh and want to free + // any buffers it holds (via packedSplats). + dispose() { + this.packedSplats.dispose(); + } + + constructGenerator({ transform, viewToObject, recolor }: SplatMeshContext) { + const generator = dynoBlock( + { index: "int" }, + { gsplat: Gsplat }, + ({ index }) => { + if (!index) { + throw new Error("index is undefined"); + } + // Read a Gsplat from the PackedSplats template + let gsplat = readPackedSplat(this.packedSplats.dyno, index); + + if (this.maxSh >= 1) { + // Inject lighting from SH1..SH3 + const { sh1Texture, sh2Texture, sh3Texture } = + this.ensureShTextures(); + if (sh1Texture) { + //Calculate view direction in object space + const viewCenterInObject = viewToObject.translate; + const { center } = splitGsplat(gsplat).outputs; + const viewDir = normalize(sub(center, viewCenterInObject)); + + // Evaluate Spherical Harmonics + let rgb = evaluateSH1(gsplat, sh1Texture, viewDir); + if (this.maxSh >= 2 && sh2Texture) { + rgb = add(rgb, evaluateSH2(gsplat, sh2Texture, viewDir)); + } + if (this.maxSh >= 3 && sh3Texture) { + rgb = add(rgb, evaluateSH3(gsplat, sh3Texture, viewDir)); + } + + // Flash off for 0.3 / 1.0 sec for debugging + // const fractTime = fract(SplatMesh.dynoTime); + // const lessThan05 = lessThan(fractTime, dynoConst("float", 0.3)); + // rgb = select(lessThan05, dynoConst("vec3", new THREE.Vector3()), rgb); + + // Add SH lighting to RGBA + let { rgba } = splitGsplat(gsplat).outputs; + rgba = add(rgba, extendVec(rgb, dynoConst("float", 0.0))); + gsplat = combineGsplat({ gsplat, rgba }); + } + } + + if (this.splatRgba) { + // Overwrite RGBA with baked RGBA values + const rgba = readRgbaArray(this.splatRgba.dyno, index); + gsplat = combineGsplat({ gsplat, rgba }); + } + + if (this.skinning) { + // Transform according to bones + skinning weights + gsplat = this.skinning.modify(gsplat); + } + + if (this.objectModifier) { + // Inject object-space Gsplat modifier dyno + gsplat = this.objectModifier.apply({ gsplat }).gsplat; + } + + // Transform from object to world-space + gsplat = transform.modify(gsplat); + + // Apply any global recoloring and opacity + const recolorRgba = mul(recolor, splitGsplat(gsplat).outputs.rgba); + gsplat = combineGsplat({ gsplat, rgba: recolorRgba }); + + if (this.rgbaDisplaceEdits) { + // Apply RGBA edit layer SDFs + gsplat = this.rgbaDisplaceEdits.modify(gsplat); + } + if (this.worldModifier) { + // Inject world-space Gsplat modifier dyno + gsplat = this.worldModifier.apply({ gsplat }).gsplat; + } + + // We're done! Output resulting Gsplat + return { gsplat }; + }, + ); + this.generator = generator; + } + + // Call this whenever something changes in the Gsplat processing pipeline, + // for example changing maxSh or updating objectModifier or worldModifier. + // Compiled generators are cached for efficiency and re-use when the same + // pipeline structure emerges after successive changes. + updateGenerator() { + this.constructGenerator(this.context); + } + + // This is called automatically by ForgeRenderer and you should not have to + // call it. It updates parameters for the generated pipeline and calls + // updateGenerator() if the pipeline needs to change. + update({ + time, + viewToWorld, + deltaTime, + globalEdits, + }: { + time: number; + viewToWorld: THREE.Matrix4; + deltaTime: number; + globalEdits: SplatEdit[]; + }) { + this.numSplats = this.packedSplats.numSplats; + this.context.time.value = time; + this.context.deltaTime.value = deltaTime; + SplatMesh.dynoTime.value = time; + + const { transform, viewToObject, recolor } = this.context; + let updated = transform.update(this); + + if ( + this.context.viewToWorld.updateFromMatrix(viewToWorld) && + this.enableViewToWorld + ) { + updated = true; + } + const worldToView = viewToWorld.clone().invert(); + if ( + this.context.worldToView.updateFromMatrix(worldToView) && + this.enableWorldToView + ) { + updated = true; + } + + const objectToWorld = new THREE.Matrix4().compose( + transform.translate.value, + transform.rotate.value, + new THREE.Vector3().setScalar(transform.scale.value), + ); + const worldToObject = objectToWorld.invert(); + const viewToObjectMatrix = worldToObject.multiply(viewToWorld); + if ( + viewToObject.updateFromMatrix(viewToObjectMatrix) && + (this.enableViewToObject || this.packedSplats.extra.sh1) + ) { + // Only trigger update if we have view-dependent spherical harmonics + updated = true; + } + + const newRecolor = new THREE.Vector4( + this.recolor.r, + this.recolor.g, + this.recolor.b, + this.opacity, + ); + if (!newRecolor.equals(recolor.value)) { + recolor.value.copy(newRecolor); + updated = true; + } + + const edits = this.editable ? (this.edits ?? []).concat(globalEdits) : []; + if (this.editable && !this.edits) { + // If we haven't set any explicit edits, add any child SplatEdits + this.traverseVisible((node) => { + if (node instanceof SplatEdit) { + edits.push(node); + } + }); + } + + edits.sort((a, b) => a.ordering - b.ordering); + const editsSdfs = edits.map((edit) => { + if (edit.sdfs != null) { + return { edit, sdfs: edit.sdfs }; + } + const sdfs: SplatEditSdf[] = []; + edit.traverseVisible((node) => { + if (node instanceof SplatEditSdf) { + sdfs.push(node); + } + }); + return { edit, sdfs }; + }); + + if (editsSdfs.length > 0 && !this.rgbaDisplaceEdits) { + const edits = editsSdfs.length; + const sdfs = editsSdfs.reduce( + (total, edit) => total + edit.sdfs.length, + 0, + ); + this.rgbaDisplaceEdits = new SplatEdits({ + maxEdits: edits, + maxSdfs: sdfs, + }); + this.updateGenerator(); + } + if (this.rgbaDisplaceEdits) { + const editResult = this.rgbaDisplaceEdits.update(editsSdfs); + updated ||= editResult.updated; + if (editResult.dynoUpdated) { + this.updateGenerator(); + } + } + + if (updated) { + this.updateVersion(); + } + + this.onFrame?.({ mesh: this, time, deltaTime }); + } + + // This method conforms to the standard THREE.Raycaster API, performing object-ray + // intersections using this method to populate the provided intersects[] array + // with each intersection point. + raycast( + raycaster: THREE.Raycaster, + intersects: { + distance: number; + point: THREE.Vector3; + object: THREE.Object3D; + }[], + ) { + if (!this.packedSplats.packedArray || !this.packedSplats.numSplats) { + return; + } + + const { near, far, ray } = raycaster; + const worldToMesh = this.matrixWorld.clone().invert(); + const worldToMeshRot = new THREE.Matrix3().setFromMatrix4(worldToMesh); + const origin = ray.origin.clone().applyMatrix4(worldToMesh); + const direction = ray.direction.clone().applyMatrix3(worldToMeshRot); + const scales = new THREE.Vector3(); + worldToMesh.decompose(new THREE.Vector3(), new THREE.Quaternion(), scales); + const scale = (scales.x * scales.y * scales.z) ** (1.0 / 3.0); + + const RAYCAST_ELLIPSOID = true; + const distances = raycast_splats( + origin.x, + origin.y, + origin.z, + direction.x, + direction.y, + direction.z, + near, + far, + this.packedSplats.numSplats, + this.packedSplats.packedArray, + RAYCAST_ELLIPSOID, + ); + + for (const distance of distances) { + const point = ray.direction + .clone() + .multiplyScalar(distance) + .add(ray.origin); + intersects.push({ + distance, + point, + object: this, + }); + } + } + + private ensureShTextures(): { + sh1Texture?: DynoUsampler2DArray<"sh1", THREE.DataArrayTexture>; + sh2Texture?: DynoUsampler2DArray<"sh2", THREE.DataArrayTexture>; + sh3Texture?: DynoUsampler2DArray<"sh3", THREE.DataArrayTexture>; + } { + // Ensure we have textures for SH1..SH3 if we have data + if (!this.packedSplats.extra.sh1) { + return {}; + } + + let sh1Texture = this.packedSplats.extra.sh1Texture as + | DynoUsampler2DArray<"sh1", THREE.DataArrayTexture> + | undefined; + if (!sh1Texture) { + let sh1 = this.packedSplats.extra.sh1 as Uint32Array; + const { width, height, depth, maxSplats } = getTextureSize( + sh1.length / 2, + ); + if (sh1.length < maxSplats * 2) { + const newSh1 = new Uint32Array(maxSplats * 2); + newSh1.set(sh1); + this.packedSplats.extra.sh1 = newSh1; + sh1 = newSh1; + } + + const texture = new THREE.DataArrayTexture(sh1, width, height, depth); + texture.format = THREE.RGIntegerFormat; + texture.type = THREE.UnsignedIntType; + texture.internalFormat = "RG32UI"; + texture.needsUpdate = true; + + sh1Texture = new DynoUsampler2DArray({ + value: texture, + key: "sh1", + }); + this.packedSplats.extra.sh1Texture = sh1Texture; + } + + if (!this.packedSplats.extra.sh2) { + return { sh1Texture }; + } + + let sh2Texture = this.packedSplats.extra.sh2Texture as + | DynoUsampler2DArray<"sh2", THREE.DataArrayTexture> + | undefined; + if (!sh2Texture) { + let sh2 = this.packedSplats.extra.sh2 as Uint32Array; + const { width, height, depth, maxSplats } = getTextureSize( + sh2.length / 4, + ); + if (sh2.length < maxSplats * 4) { + const newSh2 = new Uint32Array(maxSplats * 4); + newSh2.set(sh2); + this.packedSplats.extra.sh2 = newSh2; + sh2 = newSh2; + } + + const texture = new THREE.DataArrayTexture(sh2, width, height, depth); + texture.format = THREE.RGBAIntegerFormat; + texture.type = THREE.UnsignedIntType; + texture.internalFormat = "RGBA32UI"; + texture.needsUpdate = true; + + sh2Texture = new DynoUsampler2DArray({ + value: texture, + key: "sh2", + }); + this.packedSplats.extra.sh2Texture = sh2Texture; + } + + if (!this.packedSplats.extra.sh3) { + return { sh1Texture, sh2Texture }; + } + + let sh3Texture = this.packedSplats.extra.sh3Texture as + | DynoUsampler2DArray<"sh3", THREE.DataArrayTexture> + | undefined; + if (!sh3Texture) { + let sh3 = this.packedSplats.extra.sh3 as Uint32Array; + const { width, height, depth, maxSplats } = getTextureSize( + sh3.length / 4, + ); + if (sh3.length < maxSplats * 4) { + const newSh3 = new Uint32Array(maxSplats * 4); + newSh3.set(sh3); + this.packedSplats.extra.sh3 = newSh3; + sh3 = newSh3; + } + + const texture = new THREE.DataArrayTexture(sh3, width, height, depth); + texture.format = THREE.RGBAIntegerFormat; + texture.type = THREE.UnsignedIntType; + texture.internalFormat = "RGBA32UI"; + texture.needsUpdate = true; + + sh3Texture = new DynoUsampler2DArray({ + value: texture, + key: "sh3", + }); + this.packedSplats.extra.sh3Texture = sh3Texture; + } + + return { sh1Texture, sh2Texture, sh3Texture }; + } +} + +const defineEvaluateSH1 = unindent(` + vec3 evaluateSH1(Gsplat gsplat, usampler2DArray sh1, vec3 viewDir) { + // Extract sint7 values packed into 2 x uint32 + uvec2 packed = texelFetch(sh1, splatTexCoord(gsplat.index), 0).rg; + vec3 sh1_0 = vec3(ivec3( + int(packed.x << 25u) >> 25, + int(packed.x << 18u) >> 25, + int(packed.x << 11u) >> 25 + )) / 63.0; + vec3 sh1_1 = vec3(ivec3( + int(packed.x << 4u) >> 25, + int((packed.x >> 3u) | (packed.y << 29u)) >> 25, + int(packed.y << 22u) >> 25 + )) / 63.0; + vec3 sh1_2 = vec3(ivec3( + int(packed.y << 15u) >> 25, + int(packed.y << 8u) >> 25, + int(packed.y << 1u) >> 25 + )) / 63.0; + + return sh1_0 * (-0.4886025 * viewDir.y) + + sh1_1 * (0.4886025 * viewDir.z) + + sh1_2 * (-0.4886025 * viewDir.x); + } +`); + +const defineEvaluateSH2 = unindent(` + vec3 evaluateSH2(Gsplat gsplat, usampler2DArray sh2, vec3 viewDir) { + // Extract sint8 values packed into 4 x uint32 + uvec4 packed = texelFetch(sh2, splatTexCoord(gsplat.index), 0); + vec3 sh2_0 = vec3(ivec3( + int(packed.x << 24u) >> 24, + int(packed.x << 16u) >> 24, + int(packed.x << 8u) >> 24 + )) / 127.0; + vec3 sh2_1 = vec3(ivec3( + int(packed.x) >> 24, + int(packed.y << 24u) >> 24, + int(packed.y << 16u) >> 24 + )) / 127.0; + vec3 sh2_2 = vec3(ivec3( + int(packed.y << 8u) >> 24, + int(packed.y) >> 24, + int(packed.z << 24u) >> 24 + )) / 127.0; + vec3 sh2_3 = vec3(ivec3( + int(packed.z << 16u) >> 24, + int(packed.z << 8u) >> 24, + int(packed.z) >> 24 + )) / 127.0; + vec3 sh2_4 = vec3(ivec3( + int(packed.w << 24u) >> 24, + int(packed.w << 16u) >> 24, + int(packed.w << 8u) >> 24 + )) / 127.0; + + return sh2_0 * (1.0925484 * viewDir.x * viewDir.y) + + sh2_1 * (1.0925484 * viewDir.y * viewDir.z) + + sh2_2 * (0.3153915 * (2.0 * viewDir.z * viewDir.z - viewDir.x * viewDir.x - viewDir.y * viewDir.y)) + + sh2_3 * (1.0925484 * viewDir.x * viewDir.z) + + sh2_4 * (0.5462742 * (viewDir.x * viewDir.x - viewDir.y * viewDir.y)); + } +`); + +const defineEvaluateSH3 = unindent(` + vec3 evaluateSH3(Gsplat gsplat, usampler2DArray sh3, vec3 viewDir) { + // Extract sint6 values packed into 4 x uint32 + uvec4 packed = texelFetch(sh3, splatTexCoord(gsplat.index), 0); + vec3 sh3_0 = vec3(ivec3( + int(packed.x << 26u) >> 26, + int(packed.x << 20u) >> 26, + int(packed.x << 14u) >> 26 + )) / 31.0; + vec3 sh3_1 = vec3(ivec3( + int(packed.x << 8u) >> 26, + int(packed.x << 2u) >> 26, + int((packed.x >> 4u) | (packed.y << 28u)) >> 26 + )) / 31.0; + vec3 sh3_2 = vec3(ivec3( + int(packed.y << 22u) >> 26, + int(packed.y << 16u) >> 26, + int(packed.y << 10u) >> 26 + )) / 31.0; + vec3 sh3_3 = vec3(ivec3( + int(packed.y << 4u) >> 26, + int((packed.y >> 2u) | (packed.z << 30u)) >> 26, + int(packed.z << 24u) >> 26 + )) / 31.0; + vec3 sh3_4 = vec3(ivec3( + int(packed.z << 18u) >> 26, + int(packed.z << 12u) >> 26, + int(packed.z << 6u) >> 26 + )) / 31.0; + vec3 sh3_5 = vec3(ivec3( + int(packed.z) >> 26, + int(packed.w << 26u) >> 26, + int(packed.w << 20u) >> 26 + )) / 31.0; + vec3 sh3_6 = vec3(ivec3( + int(packed.w << 14u) >> 26, + int(packed.w << 8u) >> 26, + int(packed.w << 2u) >> 26 + )) / 31.0; + + float xx = viewDir.x * viewDir.x; + float yy = viewDir.y * viewDir.y; + float zz = viewDir.z * viewDir.z; + float xy = viewDir.x * viewDir.y; + float yz = viewDir.y * viewDir.z; + float zx = viewDir.z * viewDir.x; + + return sh3_0 * (-0.5900436 * viewDir.y * (3.0 * xx - yy)) + + sh3_1 * (2.8906114 * xy * viewDir.z) + + + sh3_2 * (-0.4570458 * viewDir.y * (4.0 * zz - xx - yy)) + + sh3_3 * (0.3731763 * viewDir.z * (2.0 * zz - 3.0 * xx - 3.0 * yy)) + + sh3_4 * (-0.4570458 * viewDir.x * (4.0 * zz - xx - yy)) + + sh3_5 * (1.4453057 * viewDir.z * (xx - yy)) + + sh3_6 * (-0.5900436 * viewDir.x * (xx - 3.0 * yy)); + } +`); + +export function evaluateSH1( + gsplat: DynoVal, + sh1: DynoUsampler2DArray<"sh1", THREE.DataArrayTexture>, + viewDir: DynoVal<"vec3">, +): DynoVal<"vec3"> { + return dyno({ + inTypes: { gsplat: Gsplat, sh1: "usampler2DArray", viewDir: "vec3" }, + outTypes: { rgb: "vec3" }, + inputs: { gsplat, sh1, viewDir }, + globals: () => [defineGsplat, defineEvaluateSH1], + statements: ({ inputs, outputs }) => { + const statements = unindentLines(` + if (isGsplatActive(${inputs.gsplat}.flags)) { + ${outputs.rgb} = evaluateSH1(${inputs.gsplat}, ${inputs.sh1}, ${inputs.viewDir}); + } else { + ${outputs.rgb} = vec3(0.0); + } + `); + return statements; + }, + }).outputs.rgb; +} + +export function evaluateSH2( + gsplat: DynoVal, + sh2: DynoVal<"usampler2DArray">, + viewDir: DynoVal<"vec3">, +): DynoVal<"vec3"> { + return dyno({ + inTypes: { gsplat: Gsplat, sh2: "usampler2DArray", viewDir: "vec3" }, + outTypes: { rgb: "vec3" }, + inputs: { gsplat, sh2, viewDir }, + globals: () => [defineGsplat, defineEvaluateSH2], + statements: ({ inputs, outputs }) => + unindentLines(` + if (isGsplatActive(${inputs.gsplat}.flags)) { + ${outputs.rgb} = evaluateSH2(${inputs.gsplat}, ${inputs.sh2}, ${inputs.viewDir}); + } else { + ${outputs.rgb} = vec3(0.0); + } + `), + }).outputs.rgb; +} + +export function evaluateSH3( + gsplat: DynoVal, + sh3: DynoVal<"usampler2DArray">, + viewDir: DynoVal<"vec3">, +): DynoVal<"vec3"> { + return dyno({ + inTypes: { gsplat: Gsplat, sh3: "usampler2DArray", viewDir: "vec3" }, + outTypes: { rgb: "vec3" }, + inputs: { gsplat, sh3, viewDir }, + globals: () => [defineGsplat, defineEvaluateSH3], + statements: ({ inputs, outputs }) => + unindentLines(` + if (isGsplatActive(${inputs.gsplat}.flags)) { + ${outputs.rgb} = evaluateSH3(${inputs.gsplat}, ${inputs.sh3}, ${inputs.viewDir}); + } else { + ${outputs.rgb} = vec3(0.0); + } + `), + }).outputs.rgb; +} diff --git a/src/SplatSkinning.ts b/src/SplatSkinning.ts new file mode 100644 index 0000000..f5e90f1 --- /dev/null +++ b/src/SplatSkinning.ts @@ -0,0 +1,298 @@ +import * as THREE from "three"; + +// SplatSkinning is an experimental class that implements dual-quaternion +// skeletal animation for Gsplats. A skeletal animation system consists +// of a set of bones, each with a "rest" pose that consists of a position +// and orientation, and a weighting of up to 4 bones for each Gsplat. +// By moving and rotating the bones you can animate all the Gsplats like +// your would for a normal 3D animated mesh. +// Note that the dual-quaternion formulation assumes that mass/volume +// is conserved through these transformations, which helps avoid common +// issues with linear blend skinning such as joint collapse or bulging. +// However, it is not as good a fit for animations that involve explicit +// deformations, such as cartoon animations. + +import type { SplatMesh } from "./SplatMesh"; +import { + Dyno, + DynoUniform, + type DynoVal, + Gsplat, + unindent, + unindentLines, +} from "./dyno"; +import { getTextureSize } from "./utils"; + +export type SplatSkinningOptions = { + // Specifies the SplatMesh that will be animated. + mesh: SplatMesh; + // Overrides the number of Gsplats in the mesh that will be animated. + // (default: mesh.numSplats) + numSplats?: number; + // Set the number of bones used to animate the SplatMesh, with a maximum + // of 256 (in order to compactly encode the bone index). (default: 256) + numBones?: number; +}; + +export class SplatSkinning { + mesh: SplatMesh; + numSplats: number; + + // Store the skinning weights for each Gsplat, composed of a 4-vector + // of bone indices and weight + skinData: Uint16Array; + skinTexture: THREE.DataArrayTexture; + + numBones: number; + boneData: Float32Array; + boneTexture: THREE.DataTexture; + + uniform: DynoUniform; + + constructor(options: SplatSkinningOptions) { + this.mesh = options.mesh; + this.numSplats = options.numSplats ?? this.mesh.numSplats; + + const { width, height, depth, maxSplats } = getTextureSize(this.numSplats); + this.skinData = new Uint16Array(maxSplats * 4); + this.skinTexture = new THREE.DataArrayTexture( + this.skinData, + width, + height, + depth, + ); + this.skinTexture.format = THREE.RGBAIntegerFormat; + this.skinTexture.type = THREE.UnsignedShortType; + this.skinTexture.internalFormat = "RGBA16UI"; + this.skinTexture.needsUpdate = true; + + this.numBones = options.numBones ?? 256; + this.boneData = new Float32Array(this.numBones * 16); + this.boneTexture = new THREE.DataTexture( + this.boneData, + 4, + this.numBones, + THREE.RGBAFormat, + THREE.FloatType, + ); + this.boneTexture.internalFormat = "RGBA32F"; + this.boneTexture.needsUpdate = true; + + this.uniform = new DynoUniform({ + key: "skinning", + type: GsplatSkinning, + globals: () => [defineGsplatSkinning], + value: { + numSplats: this.numSplats, + numBones: this.numBones, + skinTexture: this.skinTexture, + boneTexture: this.boneTexture, + }, + }); + } + + // Apply the skeletal animation to a Gsplat in a dyno program. + modify(gsplat: DynoVal): DynoVal { + return applyGsplatSkinning(gsplat, this.uniform); + } + + // Set the "rest" pose for a bone with position and quaternion orientation. + setRestQuatPos( + boneIndex: number, + quat: THREE.Quaternion, + pos: THREE.Vector3, + ) { + const i16 = boneIndex * 16; + this.boneData[i16 + 0] = quat.x; + this.boneData[i16 + 1] = quat.y; + this.boneData[i16 + 2] = quat.z; + this.boneData[i16 + 3] = quat.w; + this.boneData[i16 + 4] = pos.x; + this.boneData[i16 + 5] = pos.y; + this.boneData[i16 + 6] = pos.z; + this.boneData[i16 + 7] = 0; + this.boneData[i16 + 8] = 0; + this.boneData[i16 + 9] = 0; + this.boneData[i16 + 10] = 0; + this.boneData[i16 + 11] = 1; + this.boneData[i16 + 12] = 0; + this.boneData[i16 + 13] = 0; + this.boneData[i16 + 14] = 0; + this.boneData[i16 + 15] = 0; + } + + // Set the "current" position and orientation of a bone. + setBoneQuatPos( + boneIndex: number, + quat: THREE.Quaternion, + pos: THREE.Vector3, + ) { + const i16 = boneIndex * 16; + const origQuat = new THREE.Quaternion( + this.boneData[i16 + 0], + this.boneData[i16 + 1], + this.boneData[i16 + 2], + this.boneData[i16 + 3], + ); + const origPos = new THREE.Vector3( + this.boneData[i16 + 4], + this.boneData[i16 + 5], + this.boneData[i16 + 6], + ); + + const relQuat = origQuat.clone().invert(); + const relPos = pos.clone().sub(origPos); + relPos.applyQuaternion(relQuat); + relQuat.multiply(quat); + const dual = new THREE.Quaternion( + relPos.x, + relPos.y, + relPos.z, + 0.0, + ).multiply(origQuat); + + this.boneData[i16 + 8] = relQuat.x; + this.boneData[i16 + 9] = relQuat.y; + this.boneData[i16 + 10] = relQuat.z; + this.boneData[i16 + 11] = relQuat.w; + this.boneData[i16 + 12] = 0.5 * dual.x; + this.boneData[i16 + 13] = 0.5 * dual.y; + this.boneData[i16 + 14] = 0.5 * dual.z; + this.boneData[i16 + 15] = 0.5 * dual.w; + } + + // Set up to 4 bone indices and weights for a Gsplat. For fewer than 4 bones, + // you can set the remaining weights to 0 (and index=0). + setSplatBones( + splatIndex: number, + boneIndices: THREE.Vector4, + weights: THREE.Vector4, + ) { + const i4 = splatIndex * 4; + this.skinData[i4 + 0] = + Math.min(255, Math.max(0, Math.round(weights.x * 255.0))) + + (boneIndices.x << 8); + this.skinData[i4 + 1] = + Math.min(255, Math.max(0, Math.round(weights.y * 255.0))) + + (boneIndices.y << 8); + this.skinData[i4 + 2] = + Math.min(255, Math.max(0, Math.round(weights.z * 255.0))) + + (boneIndices.z << 8); + this.skinData[i4 + 3] = + Math.min(255, Math.max(0, Math.round(weights.w * 255.0))) + + (boneIndices.w << 8); + } + + // Call this to indicate that the bones have changed and the Gsplats need to be + // re-generated with updated skinning. + updateBones() { + this.boneTexture.needsUpdate = true; + this.mesh.needsUpdate = true; + } +} + +// dyno program definitions for SplatSkinning + +export const GsplatSkinning = { type: "GsplatSkinning" } as { + type: "GsplatSkinning"; +}; + +export const defineGsplatSkinning = unindent(` + struct GsplatSkinning { + int numSplats; + int numBones; + usampler2DArray skinTexture; + sampler2D boneTexture; + }; +`); + +export const defineApplyGsplatSkinning = unindent(` + void applyGsplatSkinning( + int numSplats, int numBones, + usampler2DArray skinTexture, sampler2D boneTexture, + int splatIndex, inout vec3 center, inout vec4 quaternion + ) { + if ((splatIndex < 0) || (splatIndex >= numSplats)) { + return; + } + + uvec4 skinData = texelFetch(skinTexture, splatTexCoord(splatIndex), 0); + + float weights[4]; + weights[0] = float(skinData.x & 0xffu) / 255.0; + weights[1] = float(skinData.y & 0xffu) / 255.0; + weights[2] = float(skinData.z & 0xffu) / 255.0; + weights[3] = float(skinData.w & 0xffu) / 255.0; + + uint boneIndices[4]; + boneIndices[0] = (skinData.x >> 8u) & 0xffu; + boneIndices[1] = (skinData.y >> 8u) & 0xffu; + boneIndices[2] = (skinData.z >> 8u) & 0xffu; + boneIndices[3] = (skinData.w >> 8u) & 0xffu; + + vec4 quat = vec4(0.0); + vec4 dual = vec4(0.0); + for (int i = 0; i < 4; i++) { + if (weights[i] > 0.0) { + int boneIndex = int(boneIndices[i]); + vec4 boneQuat = vec4(0.0, 0.0, 0.0, 1.0); + vec4 boneDual = vec4(0.0); + if (boneIndex < numBones) { + boneQuat = texelFetch(boneTexture, ivec2(2, boneIndex), 0); + boneDual = texelFetch(boneTexture, ivec2(3, boneIndex), 0); + } + + if ((i > 0) && (dot(quat, boneQuat) < 0.0)) { + // Flip sign if next blend is pointing in the opposite direction + boneQuat = -boneQuat; + boneDual = -boneDual; + } + quat += weights[i] * boneQuat; + dual += weights[i] * boneDual; + } + } + + // Normalize dual quaternion + float norm = length(quat); + quat /= norm; + dual /= norm; + vec3 translate = vec3( + 2.0 * (-dual.w * quat.x + dual.x * quat.w - dual.y * quat.z + dual.z * quat.y), + 2.0 * (-dual.w * quat.y + dual.x * quat.z + dual.y * quat.w - dual.z * quat.x), + 2.0 * (-dual.w * quat.z - dual.x * quat.y + dual.y * quat.x + dual.z * quat.w) + ); + + center = quatVec(quat, center) + translate; + quaternion = quatQuat(quat, quaternion); + } +`); + +function applyGsplatSkinning( + gsplat: DynoVal, + skinning: DynoVal, +): DynoVal { + const dyno = new Dyno< + { gsplat: typeof Gsplat; skinning: typeof GsplatSkinning }, + { gsplat: typeof Gsplat } + >({ + inTypes: { gsplat: Gsplat, skinning: GsplatSkinning }, + outTypes: { gsplat: Gsplat }, + globals: () => [defineGsplatSkinning, defineApplyGsplatSkinning], + inputs: { gsplat, skinning }, + statements: ({ inputs, outputs }) => { + const { skinning } = inputs; + const { gsplat } = outputs; + return unindentLines(` + ${gsplat} = ${inputs.gsplat}; + if (isGsplatActive(${gsplat}.flags)) { + applyGsplatSkinning( + ${skinning}.numSplats, ${skinning}.numBones, + ${skinning}.skinTexture, ${skinning}.boneTexture, + ${gsplat}.index, ${gsplat}.center, ${gsplat}.quaternion + ); + } + `); + }, + }); + return dyno.outputs.gsplat; +} diff --git a/src/controls.ts b/src/controls.ts new file mode 100644 index 0000000..e7bcfd2 --- /dev/null +++ b/src/controls.ts @@ -0,0 +1,682 @@ +import * as THREE from "three"; + +// Forge controls for keyboard + mouse, game pad, or mobile multi-touch + +const DEFAULT_MOVEMENT_SPEED = 1.0; +const DEFAULT_ROLL_SPEED = 2.0; +const DEFAULT_ROTATE_SPEED = 0.002; +const DEFAULT_SLIDE_SPEED = 0.006; +const DEFAULT_SCROLL_SPEED = 0.0015; +const DEFAULT_ROLL_SPRING = 0.0; +const DEFAULT_ROTATE_INERTIA = 0.15; +const DEFAULT_MOVE_INERTIA = 0.15; +const DEFAULT_STICK_THRESHOLD = 0.1; +const DEFAULT_FPS_ROTATE_SPEED = 2.0; + +// Time limit for double-finger press (pinch etc) +const DUAL_PRESS_MS = 200; +// Time limit for double-click/double-tap +const DOUBLE_PRESS_LIMIT_MS = 400; +// Distance limit for double-click +const DOUBLE_PRESS_DISTANCE = 50; + +// Standard WASD movement keys with R+F for up/down +const WASD_KEYCODE_MOVE = { + KeyW: new THREE.Vector3(0, 0, -1), + KeyS: new THREE.Vector3(0, 0, 1), + KeyA: new THREE.Vector3(-1, 0, 0), + KeyD: new THREE.Vector3(1, 0, 0), + KeyR: new THREE.Vector3(0, 1, 0), + KeyF: new THREE.Vector3(0, -1, 0), +}; + +// Arrow key movement with PageUp/PageDown +const ARROW_KEYCODE_MOVE = { + ArrowUp: new THREE.Vector3(0, 0, -1), + ArrowDown: new THREE.Vector3(0, 0, 1), + ArrowLeft: new THREE.Vector3(-1, 0, 0), + ArrowRight: new THREE.Vector3(1, 0, 0), + PageUp: new THREE.Vector3(0, 1, 0), + PageDown: new THREE.Vector3(0, -1, 0), +}; + +// Rolling with Q/E +const QE_KEYCODE_ROTATE = { + KeyQ: new THREE.Vector3(0, 0, 1), + KeyE: new THREE.Vector3(0, 0, -1), +}; + +// Home/End/Insert/Delete for rotation +const ARROW_KEYCODE_ROTATE = { + Home: new THREE.Vector3(0, -1, 0), + End: new THREE.Vector3(0, 1, 0), + Insert: new THREE.Vector3(-1, 0, 0), + Delete: new THREE.Vector3(1, 0, 0), +}; + +// ForgeControls provides simple, intuitive controls for navigating 3D space that +// use the keyboard + mouse, game pad, or mobile multi-touch. Internally it +// instantiates and updates a `FpsMovement` and `PointerControls` instance. + +export class ForgeControls { + fpsMovement: FpsMovement; + pointerControls: PointerControls; + lastTime = 0; + + constructor({ canvas }: { canvas: HTMLCanvasElement }) { + this.fpsMovement = new FpsMovement({}); + this.pointerControls = new PointerControls({ canvas }); + } + + update(control: THREE.Object3D) { + const time = performance.now(); + const deltaTime = (time - (this.lastTime || time)) / 1000; + this.lastTime = time; + + this.fpsMovement.update(deltaTime, control); + this.pointerControls.update(deltaTime, control); + } +} + +// FpsMovement implements controls that will be familiar to anyone who plays +// First Person Shooters using keyboard + mouse or a gamepad. Creating a FpsMovement +// instance provides many parameters for configuring the controls. +// +// When gamepads are connected, FpsMovement will always use gamepad index 0 +// for twin-stick movement and rotation. +// +// If xr is passed in, the WebXR controllers can be used as a split gamepad +// to control movement and rotation. (tested on Quest 3) + +export class FpsMovement { + moveSpeed: number; + rollSpeed: number; + stickThreshold: number; + rotateSpeed: number; + keycodeMoveMapping: { [key: string]: THREE.Vector3 }; + keycodeRotateMapping: { [key: string]: THREE.Vector3 }; + gamepadMapping: { + [button: number]: "shift" | "ctrl" | "rollLeft" | "rollRight"; + }; + capsMultiplier: number; + shiftMultiplier: number; + ctrlMultiplier: number; + xr?: THREE.WebXRManager; + // Enable/disable controls updates + enable = true; + + // Currently active event.key values + keydown: { [key: string]: boolean }; + // Currently active event.code values + keycode: { [key: string]: boolean }; + + constructor({ + moveSpeed, + rollSpeed, + stickThreshold, + rotateSpeed, + keycodeMoveMapping, + keycodeRotateMapping, + gamepadMapping, + capsMultiplier, + shiftMultiplier, + ctrlMultiplier, + xr, + }: { + // Base movement speed (default DEFAULT_MOVEMENT_SPEED) + moveSpeed?: number; + // Base roll speed (default DEFAULT_ROLL_SPEED) + rollSpeed?: number; + // Stick threshold (default DEFAULT_STICK_THRESHOLD) + stickThreshold?: number; + // Speed of rotation when using gamepad or keys (default DEFAULT_FPS_ROTATE_SPEED) + rotateSpeed?: number; + // Maps keyboard keys to movement directions + // (default {...WASD_KEYCODE_MOVE, ...ARROW_KEYCODE_MOVE}) + keycodeMoveMapping?: { [key: string]: THREE.Vector3 }; + // Maps keyboard keys to rotation directions + // (default {...QE_KEYCODE_ROTATE, ...ARROW_KEYCODE_ROTATE}) + keycodeRotateMapping?: { [key: string]: THREE.Vector3 }; + // Maps gamepad buttons to control actions + // (default {4: "rollLeft", 5: "rollRight", 6: "ctrl", 7: "shift"}) + gamepadMapping?: { + [button: number]: "shift" | "ctrl" | "rollLeft" | "rollRight"; + }; + // Speed multiplier when Caps Lock is active (default: 10) + capsMultiplier?: number; + // Speed multiplier when Shift is active (default: 5) + shiftMultiplier?: number; + // Speed multiplier when Ctrl is active (default: 1/5) + ctrlMultiplier?: number; + // Optional WebXR manager for XR controller stick support + xr?: THREE.WebXRManager; + } = {}) { + this.moveSpeed = moveSpeed ?? DEFAULT_MOVEMENT_SPEED; + this.rollSpeed = rollSpeed ?? DEFAULT_ROLL_SPEED; + this.stickThreshold = stickThreshold ?? DEFAULT_STICK_THRESHOLD; + this.rotateSpeed = rotateSpeed ?? DEFAULT_FPS_ROTATE_SPEED; + this.keycodeMoveMapping = keycodeMoveMapping ?? { + ...WASD_KEYCODE_MOVE, + ...ARROW_KEYCODE_MOVE, + }; + this.keycodeRotateMapping = keycodeRotateMapping ?? { + ...QE_KEYCODE_ROTATE, + ...ARROW_KEYCODE_ROTATE, + }; + this.gamepadMapping = gamepadMapping ?? { + 4: "rollLeft", + 5: "rollRight", + 6: "ctrl", + 7: "shift", + }; + this.capsMultiplier = capsMultiplier ?? 10.0; + this.shiftMultiplier = shiftMultiplier ?? 5.0; + this.ctrlMultiplier = ctrlMultiplier ?? 1.0 / 5.0; + + this.xr = xr; + + this.keydown = {}; + this.keycode = {}; + + document.addEventListener("keydown", (event) => { + this.keydown[event.key] = true; + this.keycode[event.code] = true; + }); + document.addEventListener("keyup", (event) => { + this.keydown[event.key] = false; + this.keycode[event.code] = false; + }); + } + + // Call this method in your render loop with `control` set to the object to control + // (`THREE.Camera` or a `THREE.Object3D` that contains it), with `deltaTime` + // in seconds since the last update. + update(deltaTime: number, control: THREE.Object3D) { + if (!this.enable) { + return; + } + + // Update gamepad / XR controllers + + const sticks = [new THREE.Vector2(), new THREE.Vector2()]; + const gamepad = navigator.getGamepads()[0]; + if (gamepad) { + sticks[0].set(gamepad.axes[0], gamepad.axes[1]); + sticks[1].set(gamepad.axes[2], gamepad.axes[3]); + } + const gamepadButtons = + gamepad?.buttons.map((button) => button.pressed) || []; + + const xrSources = Array.from(this.xr?.getSession()?.inputSources ?? []); + for (const source of xrSources) { + const gamepad = source.gamepad; + if (gamepad) { + switch (source.handedness) { + case "none": { + sticks[0].x += gamepad.axes[0]; + sticks[0].y += gamepad.axes[1]; + sticks[1].x += gamepad.axes[2]; + sticks[1].y += gamepad.axes[3]; + break; + } + case "left": { + sticks[0].x += gamepad.axes[2]; + sticks[0].y += gamepad.axes[3]; + break; + } + case "right": { + sticks[1].x += gamepad.axes[2]; + sticks[1].y += gamepad.axes[3]; + break; + } + } + } + } + + for (const stick of sticks) { + stick.x = Math.abs(stick.x) >= this.stickThreshold ? stick.x : 0; + stick.y = Math.abs(stick.y) >= this.stickThreshold ? stick.y : 0; + } + + // Rotation + + const rotate = new THREE.Vector3( + sticks[1].x, + sticks[1].y, + 0, + ).multiplyScalar(this.rotateSpeed); + + for (const [keycode, rot] of Object.entries(this.keycodeRotateMapping)) { + if (this.keycode[keycode]) { + rotate.add(rot); + } + } + for (const button in this.gamepadMapping) { + if (gamepadButtons[Number.parseInt(button)]) { + switch (this.gamepadMapping[button]) { + case "rollLeft": + rotate.z += 1; + break; + case "rollRight": + rotate.z -= 1; + break; + } + } + } + + rotate.multiply( + new THREE.Vector3(this.rotateSpeed, this.rotateSpeed, this.rollSpeed), + ); + + if (rotate.manhattanLength() > 0.0) { + rotate.multiplyScalar(deltaTime); + const eulers = new THREE.Euler().setFromQuaternion( + control.quaternion, + "YXZ", + ); + eulers.y -= rotate.x; + eulers.x = Math.max( + -Math.PI / 2, + Math.min(Math.PI / 2, eulers.x - rotate.y), + ); + eulers.z = Math.max(-Math.PI, Math.min(Math.PI, eulers.z + rotate.z)); + control.quaternion.setFromEuler(eulers); + } + + // Movement + + const moveVector = new THREE.Vector3(sticks[0].x, 0, sticks[0].y); + + for (const [keycode, move] of Object.entries(this.keycodeMoveMapping)) { + if (this.keycode[keycode]) { + moveVector.add(move); + } + } + + let speedMultiplier = 1.0; + if (this.keydown.CapsLock) { + speedMultiplier *= this.capsMultiplier; + } + if (this.keycode.ShiftLeft || this.keycode.ShiftRight) { + speedMultiplier *= this.shiftMultiplier; + } + if (this.keycode.ControlLeft || this.keycode.ControlRight) { + speedMultiplier *= this.ctrlMultiplier; + } + for (const button in this.gamepadMapping) { + if (gamepadButtons[Number.parseInt(button)]) { + switch (this.gamepadMapping[button]) { + case "shift": + speedMultiplier *= this.shiftMultiplier; + break; + case "ctrl": + speedMultiplier *= this.ctrlMultiplier; + break; + } + } + } + + // Apply movement in view direction + moveVector.applyQuaternion(control.quaternion); + control.position.add( + moveVector.multiplyScalar(this.moveSpeed * speedMultiplier * deltaTime), + ); + } +} + +type PointerState = { + initial: THREE.Vector2; + last: THREE.Vector2; + position: THREE.Vector2; + pointerId: number; + button?: number; + timeStamp: DOMHighResTimeStamp; +}; + +// `PointerControls` implements pointer/mouse/touch controls on the canvas, +// for both desktop and mobile web applications. + +export class PointerControls { + canvas: HTMLCanvasElement; + rotateSpeed: number; + slideSpeed: number; + scrollSpeed: number; + reverseRotate: boolean; + reverseSlide: boolean; + reverseSwipe: boolean; + reverseScroll: boolean; + moveInertia: number; + rotateInertia: number; + // Enable/disable controls updates + enable = true; + + doublePress: ({ + position, + intervalMs, + }: { position: THREE.Vector2; intervalMs: number }) => void; + // Time limit for double press (default DOUBLE_PRESS_LIMIT_MS) + doublePressLimitMs: number; + // Distance limit for double press (default DOUBLE_PRESS_DISTANCE) + doublePressDistance: number; + // Last pointer up event (default: null) + lastUp: { position: THREE.Vector2; time: number } | null; + + // Pointer state for currently active rotating pointer + rotating: PointerState | null; + // Pointer state for currently active sliding pointer + sliding: PointerState | null; + // Whether we pressed two pointers at the same time + dualPress: boolean; + // Cumulative scroll movement + scroll: THREE.Vector3; + + // Current rotation velocity + rotateVelocity: THREE.Vector3; + // Current movement velocity + moveVelocity: THREE.Vector3; + + constructor({ + // The HTML canvas element to attach pointer events to + canvas, + // Speed of rotation (default DEFAULT_ROTATE_SPEED) + rotateSpeed, + // Speed of sliding when dragging with right/middle mouse button or two fingers + // (default DEFAULT_SLIDE_SPEED) + slideSpeed, + // Speed of movement when using mouse scroll wheel (default DEFAULT_SCROLL_SPEED) + scrollSpeed, + // Reverse the direction of rotation (default: false) + reverseRotate, + // Reverse the direction of sliding (default: false) + reverseSlide, + // Reverse the direction of swipe gestures (default: false) + reverseSwipe, + // Reverse the direction of scroll wheel movement (default: false) + reverseScroll, + // Inertia factor for movement (default: DEFAULT_MOVE_INERTIA) + moveInertia, + // Inertia factor for rotation (default: DEFAULT_ROTATE_INERTIA) + rotateInertia, + // Callback for double press events (default: () => {}) + doublePress, + }: { + canvas: HTMLCanvasElement; + rotateSpeed?: number; + slideSpeed?: number; + scrollSpeed?: number; + reverseRotate?: boolean; + reverseSlide?: boolean; + reverseSwipe?: boolean; + reverseScroll?: boolean; + moveInertia?: number; + rotateInertia?: number; + doublePress?: ({ + position, + intervalMs, + }: { position: THREE.Vector2; intervalMs: number }) => void; + }) { + this.canvas = canvas; + this.rotateSpeed = rotateSpeed ?? DEFAULT_ROTATE_SPEED; + this.slideSpeed = slideSpeed ?? DEFAULT_SLIDE_SPEED; + this.scrollSpeed = scrollSpeed ?? DEFAULT_SCROLL_SPEED; + this.reverseRotate = reverseRotate ?? false; + this.reverseSlide = reverseSlide ?? false; + this.reverseSwipe = reverseSwipe ?? false; + this.reverseScroll = reverseScroll ?? false; + this.moveInertia = moveInertia ?? DEFAULT_MOVE_INERTIA; + this.rotateInertia = rotateInertia ?? DEFAULT_ROTATE_INERTIA; + + this.doublePress = doublePress ?? (() => {}); + this.doublePressLimitMs = DOUBLE_PRESS_LIMIT_MS; + this.doublePressDistance = DOUBLE_PRESS_DISTANCE; + this.lastUp = null; + + this.rotating = null; + this.sliding = null; + this.dualPress = false; + this.scroll = new THREE.Vector3(); + + this.rotateVelocity = new THREE.Vector3(); + this.moveVelocity = new THREE.Vector3(); + + canvas.addEventListener("pointerdown", (event: PointerEvent) => { + const position = this.getPointerPosition(event); + const initial = position.clone(); + const last = position.clone(); + + // Determine if we're starting a rotation pointer action + const isRotate = + !this.rotating && (event.pointerType !== "mouse" || event.button === 0); + const { pointerId, timeStamp } = event; + + if (isRotate) { + this.rotating = { initial, last, position, pointerId, timeStamp }; + // Capture the pointer so events continue to be delivered even if it leaves the canvas. + canvas.setPointerCapture(event.pointerId); + + this.dualPress = false; + } else if (!this.sliding) { + // If it's not a rotation action and we're not yet sliding, the next + // pointer activates a sliding action + const button = event.pointerType === "mouse" ? event.button : undefined; + this.sliding = { + initial, + last, + position, + pointerId, + button, + timeStamp, + }; + // Capture the pointer so events continue to be delivered even if it leaves the canvas. + canvas.setPointerCapture(event.pointerId); + + // Check if we pressed both pointers at roughly the same time + this.dualPress = + this.rotating != null && + timeStamp - this.rotating.timeStamp < DUAL_PRESS_MS; + } + }); + + const pointerUp = (event: PointerEvent) => { + if (this.rotating?.pointerId === event.pointerId) { + this.rotating = null; + canvas.releasePointerCapture(event.pointerId); + if (this.dualPress && this.sliding) { + canvas.releasePointerCapture(this.sliding.pointerId); + this.sliding = null; + } + } else if (this.sliding?.pointerId === event.pointerId) { + this.sliding = null; + canvas.releasePointerCapture(event.pointerId); + if (this.dualPress && this.rotating) { + canvas.releasePointerCapture(this.rotating.pointerId); + this.rotating = null; + } + } + + const position = this.getPointerPosition(event); + const lastUp = this.lastUp; + this.lastUp = { position, time: event.timeStamp }; + if (lastUp) { + const distance = lastUp.position.distanceTo(position); + if (distance < this.doublePressDistance) { + const intervalMs = event.timeStamp - lastUp.time; + if (intervalMs < this.doublePressLimitMs) { + // We pressed and release twice within the time and distance limits + this.lastUp = null; + this.doublePress({ position, intervalMs }); + } + } + } + }; + + document.addEventListener("pointerup", pointerUp); + document.addEventListener("pointercancel", pointerUp); + + document.addEventListener("pointermove", (event: PointerEvent) => { + if (this.rotating?.pointerId === event.pointerId) { + this.rotating.position = this.getPointerPosition(event); + } else if (this.sliding?.pointerId === event.pointerId) { + this.sliding.position = this.getPointerPosition(event); + } + }); + + canvas.addEventListener("contextmenu", (event: MouseEvent) => { + // Prevent context menu appearing on right click + event.preventDefault(); + }); + + canvas.addEventListener("wheel", (event: WheelEvent) => { + this.scroll.add( + new THREE.Vector3(event.deltaX, event.deltaY, event.deltaZ), + ); + event.preventDefault(); + }); + } + + getPointerPosition(event: PointerEvent): THREE.Vector2 { + const rect = this.canvas.getBoundingClientRect(); + return new THREE.Vector2( + event.clientX - rect.left, + event.clientY - rect.top, + ); + } + + update(deltaTime: number, control: THREE.Object3D) { + if (!this.enable) { + return; + } + + if (this.dualPress && this.rotating && this.sliding) { + // We pressed both pointers at the same time, either pinching or sliding + const motion = [ + this.rotating.position.clone().sub(this.rotating.last), + this.sliding.position.clone().sub(this.sliding.last), + ]; + const coincidence = motion[0].dot(motion[1]); + + if (coincidence >= 0.2) { + // Similar directions so slide the camera on the XY plane + const totalMotion = motion[0].clone().add(motion[1]); + const slide = new THREE.Vector3(totalMotion.x, -totalMotion.y, 0); + slide.multiplyScalar(this.slideSpeed * (this.reverseSwipe ? 1 : -1)); + slide.applyQuaternion(control.quaternion); + control.position.add(slide); + this.moveVelocity = slide.clone().multiplyScalar(1 / deltaTime); + } else if (coincidence <= -0.2) { + // Opposite directions so either pinch or roll motion + const deltaDir = this.sliding.last.clone().sub(this.rotating.last); + const deltaDist = deltaDir.length(); + deltaDir.multiplyScalar(1 / deltaDist).normalize(); + + const orthoDir = new THREE.Vector2(-deltaDir.y, deltaDir.x); + const motionDir = [motion[0].dot(deltaDir), motion[1].dot(deltaDir)]; + const motionOrtho = [motion[0].dot(orthoDir), motion[1].dot(orthoDir)]; + + // Pinching motion + const midpoint = this.rotating.last + .clone() + .add(this.sliding.last) + .multiplyScalar(0.5); + let midpointDir = new THREE.Vector3(); + if (control instanceof THREE.Camera) { + const ndcMidpoint = new THREE.Vector2( + (midpoint.x / this.canvas.clientWidth) * 2 - 1, + -(midpoint.y / this.canvas.clientHeight) * 2 + 1, + ); + const raycaster = new THREE.Raycaster(); + raycaster.setFromCamera(ndcMidpoint, control); + midpointDir = raycaster.ray.direction; + } + const pinchOut = motionDir[1] - motionDir[0]; + const slide = midpointDir.multiplyScalar(pinchOut * this.slideSpeed); + control.position.add(slide); + this.moveVelocity = slide.clone().multiplyScalar(1 / deltaTime); + + // Rolling motion + // Calculate angle of orthogonal motion change over distance deltaDist/2 + // motionOrtho[0] and 1 are already in float distance + const angles = [ + Math.atan(motionOrtho[0] / (-0.5 * deltaDist)), + Math.atan(motionOrtho[1] / (0.5 * deltaDist)), + ]; + const rotate = 0.5 * (angles[0] + angles[1]); + const eulers = new THREE.Euler().setFromQuaternion( + control.quaternion, + "YXZ", + ); + eulers.z = Math.max( + -Math.PI, + Math.min(Math.PI, eulers.z + 0.5 * rotate), + ); + control.quaternion.setFromEuler(eulers); + } + + this.rotating.last.copy(this.rotating.position); + this.sliding.last.copy(this.sliding.position); + } else { + // Didn't press both pointers at the same time, so we're in rotating + // or FPS mode + const rotate = new THREE.Vector3(); + if (this.rotating && !this.dualPress) { + const delta = this.rotating.position.clone().sub(this.rotating.last); + this.rotating.last.copy(this.rotating.position); + rotate.set(delta.x, delta.y, 0); + rotate.multiplyScalar(this.rotateSpeed * (this.reverseRotate ? -1 : 1)); + // Update rotation velocity from last delta + this.rotateVelocity = rotate.clone().multiplyScalar(1 / deltaTime); + } else { + // Continue to rotate with inertia + this.rotateVelocity.multiplyScalar( + Math.exp(-deltaTime / this.rotateInertia), + ); + rotate.addScaledVector(this.rotateVelocity, deltaTime); + } + + // Apply rotation in Euler angles space + const eulers = new THREE.Euler().setFromQuaternion( + control.quaternion, + "YXZ", + ); + eulers.y -= rotate.x; + eulers.x = Math.max( + -Math.PI / 2, + Math.min(Math.PI / 2, eulers.x - rotate.y), + ); + eulers.z *= Math.exp(-DEFAULT_ROLL_SPRING * deltaTime); + control.quaternion.setFromEuler(eulers); + + if (this.sliding && !this.dualPress) { + const delta = this.sliding.position.clone().sub(this.sliding.last); + this.sliding.last.copy(this.sliding.position); + + // Slide on plane depending on center/right mouse button + const slide = + this.sliding.button !== 2 + ? new THREE.Vector3(delta.x, 0, delta.y) + : new THREE.Vector3(delta.x, -delta.y, 0); + slide.multiplyScalar(this.slideSpeed * (this.reverseSlide ? -1 : 1)); + + slide.applyQuaternion(control.quaternion); + control.position.add(slide); + // Update movement velocity from last delta + this.moveVelocity = slide.clone().multiplyScalar(1 / deltaTime); + } else { + // Continue to move with inertia + this.moveVelocity.multiplyScalar( + Math.exp(-deltaTime / this.moveInertia), + ); + control.position.addScaledVector(this.moveVelocity, deltaTime); + } + } + + const scroll = this.scroll.multiplyScalar(this.scrollSpeed); + scroll.set(scroll.x, scroll.z, scroll.y); + if (this.reverseScroll) { + scroll.multiplyScalar(-1); + } + scroll.applyQuaternion(control.quaternion); + control.position.add(scroll); + this.scroll.set(0, 0, 0); + } +} diff --git a/src/defines.ts b/src/defines.ts new file mode 100644 index 0000000..affea6c --- /dev/null +++ b/src/defines.ts @@ -0,0 +1,36 @@ +// LN_SCALE_MIN..LN_SCALE_MAX define the internal scale range of for Gsplats, +// covering approx 0.0001..8000 in range with discrete steps 7% apart. +// The value "0" is reserved for truly flat scales, indicating a 2DGS. +// If these values are changed, the corresponding values in splatDefines.glsl +// must also be updated to match. + +export const LN_SCALE_MIN = -9.0; +export const LN_SCALE_MAX = 9.0; +export const LN_RESCALE = (LN_SCALE_MAX - LN_SCALE_MIN) / 254.0; // 1..=255 +export const SCALE_MIN = Math.exp(LN_SCALE_MIN); +export const SCALE_MAX = Math.exp(LN_SCALE_MAX); + +// Gsplats are stored in textures that are 2^11 x 2^11 x up to 2^11 +// Most WebGL2 implementations support 2D textures up to 2^12 x 2^12 (max 16M Gsplats) +// 2D array textures and 3D textures up to 2^11 x 2^11 x 2^11 (max 8G Gsplats), +// so we use 2D array textures for our representation for higher limits. + +export const SPLAT_TEX_WIDTH_BITS = 11; +export const SPLAT_TEX_HEIGHT_BITS = 11; +export const SPLAT_TEX_DEPTH_BITS = 11; +export const SPLAT_TEX_LAYER_BITS = + SPLAT_TEX_WIDTH_BITS + SPLAT_TEX_HEIGHT_BITS; + +export const SPLAT_TEX_WIDTH = 1 << SPLAT_TEX_WIDTH_BITS; // 2048 +export const SPLAT_TEX_HEIGHT = 1 << SPLAT_TEX_HEIGHT_BITS; // 2048 +export const SPLAT_TEX_DEPTH = 1 << SPLAT_TEX_DEPTH_BITS; // 2048 +export const SPLAT_TEX_MIN_HEIGHT = 1; + +export const SPLAT_TEX_WIDTH_MASK = SPLAT_TEX_WIDTH - 1; +export const SPLAT_TEX_HEIGHT_MASK = SPLAT_TEX_HEIGHT - 1; +export const SPLAT_TEX_DEPTH_MASK = SPLAT_TEX_DEPTH - 1; + +// Enable/disable Gsplat sorting via Rust WASM code. In testing the sorting +// time between pure JS and WASM are minimal and don't make a big difference. + +export const WASM_SPLAT_SORT = true; diff --git a/src/dyno.ts b/src/dyno.ts new file mode 100644 index 0000000..13d499b --- /dev/null +++ b/src/dyno.ts @@ -0,0 +1,16 @@ +export * from "./dyno/types"; +export * from "./dyno/base"; +export * from "./dyno/value"; +export * from "./dyno/output"; +export * from "./dyno/uniforms"; +export * from "./dyno/program"; +export * from "./dyno/math"; +export * from "./dyno/logic"; +export * from "./dyno/util"; +export * from "./dyno/splats"; +export * from "./dyno/transform"; +export * from "./dyno/control"; +export * from "./dyno/convert"; +export * from "./dyno/texture"; +export * from "./dyno/trig"; +export * from "./dyno/vecmat"; diff --git a/src/dyno/base.ts b/src/dyno/base.ts new file mode 100644 index 0000000..9e48e27 --- /dev/null +++ b/src/dyno/base.ts @@ -0,0 +1,575 @@ +import type { IUniform } from "three"; +import type { DynoType } from "./types"; +import { + DynoLiteral, + DynoOutput, + type DynoVal, + DynoValue, + type HasDynoOut, + valType, +} from "./value"; + +const DEFAULT_INDENT = " "; + +export class Compilation { + globals: Set = new Set(); + statements: string[] = []; + uniforms: Record = {}; + declares: Set = new Set(); + updaters: (() => void)[] = []; + sequence = 0; + indent: string = DEFAULT_INDENT; + + constructor({ indent }: { indent?: string } = {}) { + this.indent = indent ?? DEFAULT_INDENT; + } + + nextSequence() { + return this.sequence++; + } +} + +export type IOTypes = Record; +type GenerateContext = { + inputs: { [K in keyof InTypes]?: string }; + outputs: { [K in keyof OutTypes]?: string }; + compile: Compilation; +}; + +export class Dyno { + inTypes: InTypes; + outTypes: OutTypes; + + inputs: { [K in keyof InTypes]?: DynoVal }; + update?: () => void; + globals?: ({ + inputs, + outputs, + compile, + }: GenerateContext) => string[]; + statements?: ({ + inputs, + outputs, + compile, + }: GenerateContext) => string[]; + generate: ({ + inputs, + outputs, + compile, + }: GenerateContext) => { + globals?: string[]; + statements?: string[]; + uniforms?: Record; + }; + + constructor({ + inTypes, + outTypes, + inputs, + update, + globals, + statements, + generate, + }: { + inTypes?: InTypes; + outTypes?: OutTypes; + inputs?: { [K in keyof InTypes]?: DynoVal }; + update?: () => void; + globals?: ({ + inputs, + outputs, + compile, + }: GenerateContext) => string[]; + statements?: ({ + inputs, + outputs, + compile, + }: GenerateContext) => string[]; + generate?: ({ + inputs, + outputs, + compile, + }: GenerateContext) => { + globals?: string[]; + statements?: string[]; + uniforms?: Record; + }; + }) { + this.inTypes = inTypes ?? ({} as InTypes); + this.outTypes = outTypes ?? ({} as OutTypes); + this.inputs = inputs ?? {}; + this.update = update; + + this.globals = globals; + this.statements = statements; + this.generate = + generate ?? + (({ inputs, outputs, compile }) => { + return { + globals: this.globals?.({ inputs, outputs, compile }), + statements: this.statements?.({ inputs, outputs, compile }), + }; + }); + } + + get outputs(): { [K in keyof OutTypes]: DynoVal } { + const outputs = {} as { [K in keyof OutTypes]: DynoVal }; + for (const key in this.outTypes) { + outputs[key] = new DynoOutput(this, key); + } + return outputs; + } + + apply(inputs: { [K in keyof InTypes]?: DynoVal }): { + [K in keyof OutTypes]: DynoVal; + } { + Object.assign(this.inputs, inputs); + return this.outputs; + } + + compile({ + inputs, + outputs, + compile, + }: { + inputs: { [K in keyof InTypes]?: string }; + outputs: { [K in keyof OutTypes]?: string }; + compile: Compilation; + }): string[] { + const result = [ + `// ${this.constructor.name}(${Object.values(inputs).join(", ")}) => (${Object.values(outputs).join(", ")})`, + ]; + + const declares: (keyof OutTypes)[] = []; + for (const key in outputs) { + const name = outputs[key]; + if (name && !compile.declares.has(name)) { + compile.declares.add(name); + declares.push(key); + } + } + + const { globals, statements, uniforms } = this.generate({ + inputs, + outputs, + compile, + }); + for (const global of globals ?? []) { + compile.globals.add(global); + } + for (const key in uniforms) { + compile.uniforms[key] = uniforms[key]; + } + if (this.update) { + compile.updaters.push(this.update); + } + + for (const key of declares) { + const name = outputs[key]; + if (name) { + if (!compile.uniforms[name]) { + result.push(`${dynoDeclare(name, this.outTypes[key])};`); + } + } + } + + if (statements?.length) { + result.push("{"); + result.push(...statements.map((line) => compile.indent + line)); + result.push("}"); + } + return result; + } +} + +export type DynoBlockType = ( + inputs: { [K in keyof InTypes]?: DynoVal }, + outputs: { [K in keyof OutTypes]?: DynoVal }, + { roots }: { roots: Dyno[] }, +) => { [K in keyof OutTypes]?: DynoVal } | undefined; + +export class DynoBlock< + InTypes extends IOTypes, + OutTypes extends IOTypes, +> extends Dyno { + construct: DynoBlockType; + + constructor({ + inTypes, + outTypes, + inputs, + update, + globals, + construct, + }: { + inTypes?: InTypes; + outTypes?: OutTypes; + inputs?: { [K in keyof InTypes]?: DynoVal }; + update?: () => void; + globals?: ({ + inputs, + outputs, + compile, + }: GenerateContext) => string[]; + construct: DynoBlockType; + }) { + super({ + inTypes, + outTypes, + inputs, + update, + globals, + generate: (args) => this.generateBlock(args), + }); + this.construct = construct; + } + + generateBlock({ + inputs, + outputs, + compile, + }: { + inputs: { [K in keyof InTypes]?: string }; + outputs: { [K in keyof OutTypes]?: string }; + compile: Compilation; + }) { + const blockInputs: { [K in keyof InTypes]?: DynoVal } = {}; + const blockOutputs: { [K in keyof OutTypes]?: DynoVal } = {}; + + for (const key in inputs) { + if (inputs[key] != null) { + blockInputs[key] = new DynoLiteral(this.inTypes[key], inputs[key]); + } + } + for (const key in outputs) { + if (outputs[key] != null) { + blockOutputs[key] = new DynoValue(this.outTypes[key]); + } + } + + const options = { roots: [] }; + const returned = this.construct(blockInputs, blockOutputs, options); + + for (const global of this.globals?.({ inputs, outputs, compile }) ?? []) { + compile.globals.add(global); + } + + const ordering: Dyno[] = []; + const nodeOuts = new Map< + Dyno, + { sequence: number; outNames: Map; newOuts: Set } + >(); + + function visit( + node: Dyno, + outKey?: string, + outName?: string, + ) { + let outs = nodeOuts.get(node); + if (!outs) { + // First time visiting this node + outs = { + sequence: compile.nextSequence(), + outNames: new Map(), + newOuts: new Set(), + }; + nodeOuts.set(node, outs); + + for (const key in node.inputs) { + let input = node.inputs[key]; + while (input) { + if (input instanceof DynoValue) { + if (input instanceof DynoOutput) { + visit(input.dyno, input.key); + } + break; + } + // Must be as HasDynoOut + input = input.dynoOut(); + } + } + ordering.push(node); + } + if (outKey) { + if (!outName) { + outs.newOuts.add(outKey); + } + outs.outNames.set(outKey, outName ?? `${outKey}_${outs.sequence}`); + } + } + + for (const root of options.roots) { + visit(root); + } + + for (const key in blockOutputs) { + let value = returned?.[key] ?? blockOutputs[key]; + while (value) { + if (value instanceof DynoValue) { + if (value instanceof DynoOutput) { + visit(value.dyno, value.key, outputs[key]); + } + break; + } + // Must be as HasDynoOut + value = value.dynoOut(); + } + blockOutputs[key] = value; + } + + const steps = []; + + for (const dyno of ordering) { + // compile.statements.push(`// ${dyno.constructor.name}(${Object.values(inputs).join(", ")}) => (${Object.values(outputs).join(", ")})`); + + const inputs: Record = {}; + const outputs: Record = {}; + + for (const key in dyno.inputs) { + let value = dyno.inputs[key]; + while (value) { + if (value instanceof DynoValue) { + if (value instanceof DynoLiteral) { + inputs[key] = value.getLiteral(); + } else if (value instanceof DynoOutput) { + const source = nodeOuts.get(value.dyno)?.outNames.get(value.key); + if (!source) { + throw new Error( + `Source not found for ${value.dyno.constructor.name}.${value.key}`, + ); + } + inputs[key] = source; + } + break; + } + // Must be as HasDynOut + value = value.dynoOut(); + } + } + + const outs = nodeOuts.get(dyno) ?? { outNames: new Map() }; + for (const [key, name] of outs.outNames.entries()) { + outputs[key] = name; + } + + const newSteps = dyno.compile({ inputs, outputs, compile }); + steps.push(newSteps); + } + + const literalOutputs = []; + for (const key in outputs) { + if (blockOutputs[key] instanceof DynoLiteral) { + literalOutputs.push( + `${outputs[key]} = ${blockOutputs[key].getLiteral()};`, + ); + } + } + if (literalOutputs.length > 0) { + steps.push(literalOutputs); + } + + const statements = steps.flatMap((step, index) => { + // Add a blank line between steps + return index === 0 ? step : ["", ...step]; + }); + return { statements }; + } +} + +export function dynoBlock< + InTypes extends Record, + OutTypes extends Record, +>( + inTypes: InTypes, + outTypes: OutTypes, + construct: DynoBlockType, + { update, globals }: { update?: () => void; globals?: () => string[] } = {}, +) { + return new DynoBlock({ inTypes, outTypes, construct, update, globals }); +} + +export function dyno< + InTypes extends Record, + OutTypes extends Record, +>({ + inTypes, + outTypes, + inputs, + update, + globals, + statements, + generate, +}: { + inTypes: InTypes; + outTypes: OutTypes; + inputs?: { [K in keyof InTypes]?: DynoVal }; + update?: () => void; + globals?: ({ + inputs, + outputs, + compile, + }: GenerateContext) => string[]; + statements?: ({ + inputs, + outputs, + compile, + }: GenerateContext) => string[]; + generate?: ({ + inputs, + outputs, + compile, + }: GenerateContext) => { + globals?: string[]; + statements?: string[]; + uniforms?: Record; + }; +}) { + return new Dyno({ + inTypes, + outTypes, + inputs, + update, + globals, + statements, + generate, + }); +} + +export function dynoDeclare(name: string, type: DynoType, count?: number) { + const typeStr = typeof type === "string" ? type : type.type; + if (!typeStr) { + throw new Error(`Invalid DynoType: ${String(type)}`); + } + return `${typeStr} ${name}${count != null ? `[${count}]` : ""}`; +} + +export function unindentLines(s: string): string[] { + let seenNonEmpty = false; + const lines = s + .split("\n") + .map((line) => { + const trimmedLine = line.trimEnd(); + if (seenNonEmpty) { + return trimmedLine; + } + if (trimmedLine.length > 0) { + seenNonEmpty = true; + return trimmedLine; + } + return null; + }) + .filter((line) => line != null); + while (lines.length > 0 && lines[lines.length - 1].length === 0) { + lines.pop(); + } + if (lines.length === 0) { + return []; + } + + const indent = lines[0].match(/^\s*/)?.[0]; + if (!indent) { + return lines; // No indent, return as is + } + // Remove indent from the beginning of each line + const regex = new RegExp(`^${indent}`); + return lines.map((line) => line.replace(regex, "")); +} + +export function unindent(s: string): string { + return unindentLines(s).join("\n"); +} + +export class UnaryOp< + A extends DynoType, + OutType extends DynoType, + OutKey extends string, + > + extends Dyno<{ a: A }, { [key in OutKey]: OutType }> + implements HasDynoOut +{ + constructor({ + a, + outKey, + outTypeFunc, + }: { a: DynoVal; outKey: OutKey; outTypeFunc: (aType: A) => OutType }) { + const inTypes = { a: valType(a) }; + const outType = outTypeFunc(valType(a)); + const outTypes = { [outKey]: outType } as { [key in OutKey]: OutType }; + super({ inTypes, outTypes, inputs: { a } }); + this.outKey = outKey; + } + + outKey: OutKey; + dynoOut(): DynoValue { + return new DynoOutput(this, this.outKey); + } +} + +export class BinaryOp< + A extends DynoType, + B extends DynoType, + OutType extends DynoType, + OutKey extends string, + > + extends Dyno<{ a: A; b: B }, { [key in OutKey]: OutType }> + implements HasDynoOut +{ + constructor({ + a, + b, + outKey, + outTypeFunc, + }: { + a: DynoVal; + b: DynoVal; + outKey: OutKey; + outTypeFunc: (aType: A, bType: B) => OutType; + }) { + const inTypes = { a: valType(a), b: valType(b) }; + const outType = outTypeFunc(valType(a), valType(b)); + const outTypes = { [outKey]: outType } as { [key in OutKey]: OutType }; + super({ inTypes, outTypes, inputs: { a, b } }); + this.outKey = outKey; + } + + outKey: OutKey; + dynoOut(): DynoValue { + return new DynoOutput(this, this.outKey); + } +} + +export class TrinaryOp< + A extends DynoType, + B extends DynoType, + C extends DynoType, + OutType extends DynoType, + OutKey extends string, + > + extends Dyno<{ a: A; b: B; c: C }, { [key in OutKey]: OutType }> + implements HasDynoOut +{ + constructor({ + a, + b, + c, + outKey, + outTypeFunc, + }: { + a: DynoVal; + b: DynoVal; + c: DynoVal; + outKey: OutKey; + outTypeFunc: (aType: A, bType: B, cType: C) => OutType; + }) { + const inTypes = { a: valType(a), b: valType(b), c: valType(c) }; + const outType = outTypeFunc(valType(a), valType(b), valType(c)); + const outTypes = { [outKey]: outType } as { [key in OutKey]: OutType }; + super({ inTypes, outTypes, inputs: { a, b, c } }); + this.outKey = outKey; + } + + outKey: OutKey; + dynoOut(): DynoValue { + return new DynoOutput(this, this.outKey); + } +} diff --git a/src/dyno/control.ts b/src/dyno/control.ts new file mode 100644 index 0000000..7835f6b --- /dev/null +++ b/src/dyno/control.ts @@ -0,0 +1,22 @@ +// TODO: +// if, switch, for, comment, +// arrayIndex, arrayLength, + +export const dynoIf = () => { + throw new Error("Not implemented"); +}; +export const dynoSwitch = () => { + throw new Error("Not implemented"); +}; +export const dynoFor = () => { + throw new Error("Not implemented"); +}; +export const comment = () => { + throw new Error("Not implemented"); +}; +export const arrayIndex = () => { + throw new Error("Not implemented"); +}; +export const arrayLength = () => { + throw new Error("Not implemented"); +}; diff --git a/src/dyno/convert.ts b/src/dyno/convert.ts new file mode 100644 index 0000000..9837431 --- /dev/null +++ b/src/dyno/convert.ts @@ -0,0 +1,451 @@ +import { UnaryOp } from "./base"; +import { type SimpleTypes, typeLiteral } from "./types"; +import type { DynoVal } from "./value"; + +export const bool = ( + value: DynoVal, +): DynoVal<"bool"> => new Bool({ value }); +export const int = ( + value: DynoVal, +): DynoVal<"int"> => new Int({ value }); +export const uint = ( + value: DynoVal, +): DynoVal<"uint"> => new Uint({ value }); +export const float = ( + value: DynoVal, +): DynoVal<"float"> => new Float({ value }); + +export const bvec2 = ( + value: DynoVal, +): DynoVal<"bvec2"> => new BVec2({ value }); +export const bvec3 = ( + value: DynoVal, +): DynoVal<"bvec3"> => new BVec3({ value }); +export const bvec4 = ( + value: DynoVal, +): DynoVal<"bvec4"> => new BVec4({ value }); + +export const ivec2 = ( + value: DynoVal, +): DynoVal<"ivec2"> => new IVec2({ value }); +export const ivec3 = ( + value: DynoVal, +): DynoVal<"ivec3"> => new IVec3({ value }); +export const ivec4 = ( + value: DynoVal, +): DynoVal<"ivec4"> => new IVec4({ value }); + +export const uvec2 = ( + value: DynoVal, +): DynoVal<"uvec2"> => new UVec2({ value }); +export const uvec3 = ( + value: DynoVal, +): DynoVal<"uvec3"> => new UVec3({ value }); +export const uvec4 = ( + value: DynoVal, +): DynoVal<"uvec4"> => new UVec4({ value }); + +export const vec2 = < + T extends "float" | "bvec2" | "ivec2" | "uvec2" | "vec2" | "vec3" | "vec4", +>( + value: DynoVal, +): DynoVal<"vec2"> => new Vec2({ value }); +export const vec3 = < + T extends "float" | "bvec3" | "ivec3" | "uvec3" | "vec3" | "vec4", +>( + value: DynoVal, +): DynoVal<"vec3"> => new Vec3({ value }); +export const vec4 = ( + value: DynoVal, +): DynoVal<"vec4"> => new Vec4({ value }); + +export const mat2 = ( + value: DynoVal, +): DynoVal<"mat2"> => new Mat2({ value }); +export const mat3 = ( + value: DynoVal, +): DynoVal<"mat3"> => new Mat3({ value }); +export const mat4 = ( + value: DynoVal, +): DynoVal<"mat4"> => new Mat4({ value }); + +export const floatBitsToInt = (value: DynoVal<"float">): DynoVal<"int"> => + new FloatBitsToInt({ value }); +export const floatBitsToUint = (value: DynoVal<"float">): DynoVal<"uint"> => + new FloatBitsToUint({ value }); +export const intBitsToFloat = (value: DynoVal<"int">): DynoVal<"float"> => + new IntBitsToFloat({ value }); +export const uintBitsToFloat = (value: DynoVal<"uint">): DynoVal<"float"> => + new UintBitsToFloat({ value }); + +export const packSnorm2x16 = (value: DynoVal<"vec2">): DynoVal<"uint"> => + new PackSnorm2x16({ value }); +export const unpackSnorm2x16 = (value: DynoVal<"uint">): DynoVal<"vec2"> => + new UnpackSnorm2x16({ value }); +export const packUnorm2x16 = (value: DynoVal<"vec2">): DynoVal<"uint"> => + new PackUnorm2x16({ value }); +export const unpackUnorm2x16 = (value: DynoVal<"uint">): DynoVal<"vec2"> => + new UnpackUnorm2x16({ value }); + +export const packHalf2x16 = (value: DynoVal<"vec2">): DynoVal<"uint"> => + new PackHalf2x16({ value }); +export const unpackHalf2x16 = (value: DynoVal<"uint">): DynoVal<"vec2"> => + new UnpackHalf2x16({ value }); + +export const uintToRgba8 = (value: DynoVal<"uint">): DynoVal<"vec4"> => + new UintToRgba8({ value }); + +export class SimpleCast< + Allowed extends SimpleTypes, + OutType extends SimpleTypes, + OutKey extends string, +> extends UnaryOp { + constructor({ + value, + outType, + outKey, + }: { value: DynoVal; outType: OutType; outKey: OutKey }) { + super({ a: value, outTypeFunc: () => outType, outKey }); + this.statements = ({ inputs, outputs }) => [ + `${outputs[outKey]} = ${typeLiteral(outType)}(${inputs.a});`, + ]; + } +} + +export class Bool extends SimpleCast< + "bool" | "int" | "uint" | "float", + "bool", + "bool" +> { + constructor({ + value, + }: { value: DynoVal<"bool" | "int" | "uint" | "float"> }) { + super({ value, outType: "bool", outKey: "bool" }); + } +} + +export class Int extends SimpleCast< + "bool" | "int" | "uint" | "float", + "int", + "int" +> { + constructor({ + value, + }: { value: DynoVal<"bool" | "int" | "uint" | "float"> }) { + super({ value, outType: "int", outKey: "int" }); + } +} + +export class Uint extends SimpleCast< + "bool" | "int" | "uint" | "float", + "uint", + "uint" +> { + constructor({ + value, + }: { value: DynoVal<"bool" | "int" | "uint" | "float"> }) { + super({ value, outType: "uint", outKey: "uint" }); + } +} + +export class Float extends SimpleCast< + "bool" | "int" | "uint" | "float", + "float", + "float" +> { + constructor({ + value, + }: { value: DynoVal<"bool" | "int" | "uint" | "float"> }) { + super({ value, outType: "float", outKey: "float" }); + } +} + +export class BVec2 extends SimpleCast< + "bool" | "bvec2" | "ivec2" | "uvec2" | "vec2", + "bvec2", + "bvec2" +> { + constructor({ + value, + }: { value: DynoVal<"bool" | "bvec2" | "ivec2" | "uvec2" | "vec2"> }) { + super({ value, outType: "bvec2", outKey: "bvec2" }); + } +} + +export class BVec3 extends SimpleCast< + "bool" | "bvec3" | "ivec3" | "uvec3" | "vec3", + "bvec3", + "bvec3" +> { + constructor({ + value, + }: { value: DynoVal<"bool" | "bvec3" | "ivec3" | "uvec3" | "vec3"> }) { + super({ value, outType: "bvec3", outKey: "bvec3" }); + } +} + +export class BVec4 extends SimpleCast< + "bool" | "bvec4" | "ivec4" | "uvec4" | "vec4", + "bvec4", + "bvec4" +> { + constructor({ + value, + }: { value: DynoVal<"bool" | "bvec4" | "ivec4" | "uvec4" | "vec4"> }) { + super({ value, outType: "bvec4", outKey: "bvec4" }); + } +} + +export class IVec2 extends SimpleCast< + "int" | "bvec2" | "ivec2" | "uvec2" | "vec2", + "ivec2", + "ivec2" +> { + constructor({ + value, + }: { value: DynoVal<"int" | "bvec2" | "ivec2" | "uvec2" | "vec2"> }) { + super({ value, outType: "ivec2", outKey: "ivec2" }); + } +} + +export class IVec3 extends SimpleCast< + "int" | "bvec3" | "ivec3" | "uvec3" | "vec3", + "ivec3", + "ivec3" +> { + constructor({ + value, + }: { value: DynoVal<"int" | "bvec3" | "ivec3" | "uvec3" | "vec3"> }) { + super({ value, outType: "ivec3", outKey: "ivec3" }); + } +} + +export class IVec4 extends SimpleCast< + "int" | "bvec4" | "ivec4" | "uvec4" | "vec4", + "ivec4", + "ivec4" +> { + constructor({ + value, + }: { value: DynoVal<"int" | "bvec4" | "ivec4" | "uvec4" | "vec4"> }) { + super({ value, outType: "ivec4", outKey: "ivec4" }); + } +} + +export class UVec2 extends SimpleCast< + "uint" | "ivec2" | "bvec2" | "uvec2" | "vec2", + "uvec2", + "uvec2" +> { + constructor({ + value, + }: { value: DynoVal<"uint" | "ivec2" | "bvec2" | "uvec2" | "vec2"> }) { + super({ value, outType: "uvec2", outKey: "uvec2" }); + } +} + +export class UVec3 extends SimpleCast< + "uint" | "ivec3" | "bvec3" | "uvec3" | "vec3", + "uvec3", + "uvec3" +> { + constructor({ + value, + }: { value: DynoVal<"uint" | "ivec3" | "bvec3" | "uvec3" | "vec3"> }) { + super({ value, outType: "uvec3", outKey: "uvec3" }); + } +} + +export class UVec4 extends SimpleCast< + "uint" | "ivec4" | "bvec4" | "uvec4" | "vec4", + "uvec4", + "uvec4" +> { + constructor({ + value, + }: { value: DynoVal<"uint" | "ivec4" | "bvec4" | "uvec4" | "vec4"> }) { + super({ value, outType: "uvec4", outKey: "uvec4" }); + } +} + +export class Vec2 extends SimpleCast< + "float" | "bvec2" | "ivec2" | "uvec2" | "vec2" | "vec3" | "vec4", + "vec2", + "vec2" +> { + constructor({ + value, + }: { + value: DynoVal< + "float" | "bvec2" | "ivec2" | "uvec2" | "vec2" | "vec3" | "vec4" + >; + }) { + super({ value, outType: "vec2", outKey: "vec2" }); + } +} + +export class Vec3 extends SimpleCast< + "float" | "bvec3" | "ivec3" | "uvec3" | "vec3" | "vec2" | "vec4", + "vec3", + "vec3" +> { + constructor({ + value, + }: { + value: DynoVal< + "float" | "bvec3" | "ivec3" | "uvec3" | "vec3" | "vec2" | "vec4" + >; + }) { + super({ value, outType: "vec3", outKey: "vec3" }); + } +} + +export class Vec4 extends SimpleCast< + "float" | "bvec4" | "ivec4" | "uvec4" | "vec4", + "vec4", + "vec4" +> { + constructor({ + value, + }: { value: DynoVal<"float" | "bvec4" | "ivec4" | "uvec4" | "vec4"> }) { + super({ value, outType: "vec4", outKey: "vec4" }); + } +} + +export class Mat2 extends SimpleCast< + "float" | "mat2" | "mat3" | "mat4", + "mat2", + "mat2" +> { + constructor({ + value, + }: { value: DynoVal<"float" | "mat2" | "mat3" | "mat4"> }) { + super({ value, outType: "mat2", outKey: "mat2" }); + } +} + +export class Mat3 extends SimpleCast< + "float" | "mat2" | "mat3" | "mat4", + "mat3", + "mat3" +> { + constructor({ + value, + }: { value: DynoVal<"float" | "mat2" | "mat3" | "mat4"> }) { + super({ value, outType: "mat3", outKey: "mat3" }); + } +} + +export class Mat4 extends SimpleCast< + "float" | "mat2" | "mat3" | "mat4", + "mat4", + "mat4" +> { + constructor({ + value, + }: { value: DynoVal<"float" | "mat2" | "mat3" | "mat4"> }) { + super({ value, outType: "mat4", outKey: "mat4" }); + } +} + +export class FloatBitsToInt extends UnaryOp<"float", "int", "int"> { + constructor({ value }: { value: DynoVal<"float"> }) { + super({ a: value, outKey: "int", outTypeFunc: () => "int" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.int} = floatBitsToInt(${inputs.a});`]; + }; + } +} + +export class FloatBitsToUint extends UnaryOp<"float", "uint", "uint"> { + constructor({ value }: { value: DynoVal<"float"> }) { + super({ a: value, outKey: "uint", outTypeFunc: () => "uint" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.uint} = floatBitsToUint(${inputs.a});`]; + }; + } +} + +export class IntBitsToFloat extends UnaryOp<"int", "float", "float"> { + constructor({ value }: { value: DynoVal<"int"> }) { + super({ a: value, outKey: "float", outTypeFunc: () => "float" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.float} = intBitsToFloat(${inputs.a});`]; + }; + } +} + +export class UintBitsToFloat extends UnaryOp<"uint", "float", "float"> { + constructor({ value }: { value: DynoVal<"uint"> }) { + super({ a: value, outKey: "float", outTypeFunc: () => "float" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.float} = uintBitsToFloat(${inputs.a});`]; + }; + } +} + +export class PackSnorm2x16 extends UnaryOp<"vec2", "uint", "uint"> { + constructor({ value }: { value: DynoVal<"vec2"> }) { + super({ a: value, outKey: "uint", outTypeFunc: () => "uint" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.uint} = packSnorm2x16(${inputs.a});`]; + }; + } +} + +export class UnpackSnorm2x16 extends UnaryOp<"uint", "vec2", "vec2"> { + constructor({ value }: { value: DynoVal<"uint"> }) { + super({ a: value, outKey: "vec2", outTypeFunc: () => "vec2" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.vec2} = unpackSnorm2x16(${inputs.a});`]; + }; + } +} + +export class PackUnorm2x16 extends UnaryOp<"vec2", "uint", "uint"> { + constructor({ value }: { value: DynoVal<"vec2"> }) { + super({ a: value, outKey: "uint", outTypeFunc: () => "uint" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.uint} = packUnorm2x16(${inputs.a});`]; + }; + } +} + +export class UnpackUnorm2x16 extends UnaryOp<"uint", "vec2", "vec2"> { + constructor({ value }: { value: DynoVal<"uint"> }) { + super({ a: value, outKey: "vec2", outTypeFunc: () => "vec2" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.vec2} = unpackUnorm2x16(${inputs.a});`]; + }; + } +} + +export class PackHalf2x16 extends UnaryOp<"vec2", "uint", "uint"> { + constructor({ value }: { value: DynoVal<"vec2"> }) { + super({ a: value, outKey: "uint", outTypeFunc: () => "uint" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.uint} = packHalf2x16(${inputs.a});`]; + }; + } +} + +export class UnpackHalf2x16 extends UnaryOp<"uint", "vec2", "vec2"> { + constructor({ value }: { value: DynoVal<"uint"> }) { + super({ a: value, outKey: "vec2", outTypeFunc: () => "vec2" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.vec2} = unpackHalf2x16(${inputs.a});`]; + }; + } +} + +export class UintToRgba8 extends UnaryOp<"uint", "vec4", "rgba8"> { + constructor({ value }: { value: DynoVal<"uint"> }) { + super({ a: value, outKey: "rgba8", outTypeFunc: () => "vec4" }); + this.statements = ({ inputs, outputs }) => { + return [ + `uvec4 uRgba = uvec4(${inputs.a} & 0xffu, (${inputs.a} >> 8u) & 0xffu, (${inputs.a} >> 16u) & 0xffu, (${inputs.a} >> 24u) & 0xffu);`, + `${outputs.rgba8} = vec4(uRgba) / 255.0;`, + ]; + }; + } +} diff --git a/src/dyno/logic.ts b/src/dyno/logic.ts new file mode 100644 index 0000000..c191fc6 --- /dev/null +++ b/src/dyno/logic.ts @@ -0,0 +1,434 @@ +import { BinaryOp, TrinaryOp, UnaryOp } from "./base"; +import { + type AllIntTypes, + type BoolTypes, + type IntTypes, + type ScalarTypes, + type SimpleTypes, + type UintTypes, + type ValueTypes, + isBoolType, + isIntType, + isScalarType, + isUintType, + isVector2Type, + isVector3Type, +} from "./types"; +import { type DynoVal, valType } from "./value"; + +export const and = ( + a: DynoVal, + b: DynoVal, +): DynoVal => new And({ a, b }); +export const or = ( + a: DynoVal, + b: DynoVal, +): DynoVal => new Or({ a, b }); +export const xor = ( + a: DynoVal, + b: DynoVal, +): DynoVal => new Xor({ a, b }); +export const not = ( + a: DynoVal, +): DynoVal => new Not({ a }); + +export const lessThan = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new LessThan({ a, b }); +export const lessThanEqual = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new LessThanEqual({ a, b }); +export const greaterThan = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new GreaterThan({ a, b }); +export const greaterThanEqual = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new GreaterThanEqual({ a, b }); +export const equal = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new Equal({ a, b }); +export const notEqual = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new NotEqual({ a, b }); + +export const any = ( + a: DynoVal, +): DynoVal<"bool"> => new Any({ a }); +export const all = ( + a: DynoVal, +): DynoVal<"bool"> => new All({ a }); +export const select = ( + cond: DynoVal<"bool">, + t: DynoVal, + f: DynoVal, +): DynoVal => new Select({ cond, t, f }); + +export const compXor = ( + a: DynoVal, +): DynoVal> => new CompXor({ a }); + +export class And extends BinaryOp< + T, + T, + T, + "and" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outTypeFunc: (aType: T, bType: T) => aType, outKey: "and" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.and === "bool") { + return [`${outputs.and} = ${inputs.a} && ${inputs.b};`]; + } + return [`${outputs.and} = ${inputs.a} & ${inputs.b};`]; + }; + } +} + +export class Or extends BinaryOp< + T, + T, + T, + "or" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outTypeFunc: (aType: T, bType: T) => aType, outKey: "or" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.or === "bool") { + return [`${outputs.or} = ${inputs.a} || ${inputs.b};`]; + } + return [`${outputs.or} = ${inputs.a} | ${inputs.b};`]; + }; + } +} + +export class Xor extends BinaryOp< + T, + T, + T, + "xor" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outTypeFunc: (aType: T, bType: T) => aType, outKey: "xor" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.xor === "bool") { + return [`${outputs.xor} = ${inputs.a} ^^ ${inputs.b};`]; + } + return [`${outputs.xor} = ${inputs.a} ^ ${inputs.b};`]; + }; + } +} + +export class Not extends UnaryOp< + T, + T, + "not" +> { + constructor({ a }: { a: DynoVal }) { + super({ a, outTypeFunc: (aType: T) => aType, outKey: "not" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.not === "bool") { + return [`${outputs.not} = !${inputs.a};`]; + } + return [`${outputs.not} = not(${inputs.a});`]; + }; + } +} + +export class LessThan extends BinaryOp< + T, + T, + CompareOutput, + "lessThan" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ + a, + b, + outTypeFunc: (aType: T, bType: T) => compareOutputType(aType, "lessThan"), + outKey: "lessThan", + }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.lessThan === "bool") { + return [`${outputs.lessThan} = ${inputs.a} < ${inputs.b};`]; + } + return [`${outputs.lessThan} = lessThan(${inputs.a}, ${inputs.b});`]; + }; + } +} + +export class LessThanEqual extends BinaryOp< + T, + T, + CompareOutput, + "lessThanEqual" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ + a, + b, + outTypeFunc: (aType: T, bType: T) => + compareOutputType(aType, "lessThanEqual"), + outKey: "lessThanEqual", + }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.lessThanEqual === "bool") { + return [`${outputs.lessThanEqual} = ${inputs.a} <= ${inputs.b};`]; + } + return [ + `${outputs.lessThanEqual} = lessThanEqual(${inputs.a}, ${inputs.b});`, + ]; + }; + } +} + +export class GreaterThan extends BinaryOp< + T, + T, + CompareOutput, + "greaterThan" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ + a, + b, + outTypeFunc: (aType: T, bType: T) => + compareOutputType(aType, "greaterThan"), + outKey: "greaterThan", + }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.greaterThan === "bool") { + return [`${outputs.greaterThan} = ${inputs.a} > ${inputs.b};`]; + } + return [ + `${outputs.greaterThan} = greaterThan(${inputs.a}, ${inputs.b});`, + ]; + }; + } +} + +export class GreaterThanEqual extends BinaryOp< + T, + T, + CompareOutput, + "greaterThanEqual" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ + a, + b, + outTypeFunc: (aType: T, bType: T) => + compareOutputType(aType, "greaterThanEqual"), + outKey: "greaterThanEqual", + }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.greaterThanEqual === "bool") { + return [`${outputs.greaterThanEqual} = ${inputs.a} >= ${inputs.b};`]; + } + return [ + `${outputs.greaterThanEqual} = greaterThanEqual(${inputs.a}, ${inputs.b});`, + ]; + }; + } +} + +export class Equal extends BinaryOp< + T, + T, + EqualOutput, + "equal" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outTypeFunc: equalOutputType, outKey: "equal" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.equal === "bool") { + return [`${outputs.equal} = ${inputs.a} == ${inputs.b};`]; + } + return [`${outputs.equal} = equal(${inputs.a}, ${inputs.b});`]; + }; + } +} + +export class NotEqual extends BinaryOp< + T, + T, + NotEqualOutput, + "notEqual" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outTypeFunc: notEqualOutputType, outKey: "notEqual" }); + this.statements = ({ inputs, outputs }) => { + if (this.outTypes.notEqual === "bool") { + return [`${outputs.notEqual} = ${inputs.a} != ${inputs.b};`]; + } + return [`${outputs.notEqual} = notEqual(${inputs.a}, ${inputs.b});`]; + }; + } +} + +export class Any extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outTypeFunc: (aType: T) => "bool", outKey: "any" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.any} = any(${inputs.a});`]; + }; + } +} + +export class All extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outTypeFunc: (aType: T) => "bool", outKey: "all" }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.all} = all(${inputs.a});`]; + }; + } +} + +export class Select extends TrinaryOp< + "bool", + T, + T, + T, + "select" +> { + constructor({ + cond, + t, + f, + }: { cond: DynoVal<"bool">; t: DynoVal; f: DynoVal }) { + super({ + a: cond, + b: t, + c: f, + outKey: "select", + outTypeFunc: (aType: "bool", bType: T, cType: T) => bType, + }); + this.statements = ({ inputs, outputs }) => { + const { a: cond, b: t, c: f } = inputs; + return [`${outputs.select} = (${cond}) ? (${t}) : (${f});`]; + }; + } +} + +type CompareOutput = T extends ScalarTypes + ? "bool" + : T extends "ivec2" | "uvec2" | "vec2" + ? "bvec2" + : T extends "ivec3" | "uvec3" | "vec3" + ? "bvec3" + : T extends "ivec4" | "uvec4" | "vec4" + ? "bvec4" + : never; + +function compareOutputType( + type: T, + operator: string, +): CompareOutput { + if (isScalarType(type)) { + return "bool" as CompareOutput; + } + if (type === "ivec2" || type === "uvec2" || type === "vec2") { + return "bvec2" as CompareOutput; + } + if (type === "ivec3" || type === "uvec3" || type === "vec3") { + return "bvec3" as CompareOutput; + } + if (type === "ivec4" || type === "uvec4" || type === "vec4") { + return "bvec4" as CompareOutput; + } + throw new Error(`Invalid ${operator} type: ${type}`); +} + +type EqualOutput = A extends ScalarTypes + ? "bool" + : A extends BoolTypes + ? A + : A extends "ivec2" | "uvec2" | "vec2" + ? "bvec2" + : A extends "ivec3" | "uvec3" | "vec3" + ? "bvec3" + : A extends "ivec4" | "uvec4" | "vec4" + ? "bvec4" + : never; + +function equalOutputType( + type: A, + operator = "equal", +): EqualOutput { + if (isScalarType(type)) { + return "bool" as EqualOutput; + } + if (isBoolType(type)) { + return type as EqualOutput; + } + if (type === "ivec2" || type === "uvec2" || type === "vec2") { + return "bvec2" as EqualOutput; + } + if (type === "ivec3" || type === "uvec3" || type === "vec3") { + return "bvec3" as EqualOutput; + } + if (type === "ivec4" || type === "uvec4" || type === "vec4") { + return "bvec4" as EqualOutput; + } + throw new Error(`Invalid ${operator} type: ${type}`); +} + +type NotEqualOutput = EqualOutput; + +function notEqualOutputType( + type: A, +): NotEqualOutput { + return equalOutputType(type, "notEqual"); +} + +type CompXorOutput = A extends BoolTypes + ? "bool" + : A extends IntTypes + ? "int" + : A extends UintTypes + ? "uint" + : never; + +function compXorOutputType( + type: A, +): CompXorOutput { + if (isBoolType(type)) { + return "bool" as CompXorOutput; + } + if (isIntType(type)) { + return "int" as CompXorOutput; + } + if (isUintType(type)) { + return "uint" as CompXorOutput; + } + throw new Error(`Invalid compXor type: ${type}`); +} + +export class CompXor extends UnaryOp< + T, + CompXorOutput, + "compXor" +> { + constructor({ a }: { a: DynoVal }) { + const outType = compXorOutputType(valType(a)); + super({ a, outTypeFunc: (aType: T) => outType, outKey: "compXor" }); + this.statements = ({ inputs, outputs }) => { + if (isScalarType(this.outTypes.compXor)) { + return [`${outputs.compXor} = ${inputs.a};`]; + } + const components = isVector2Type(outType) + ? ["x", "y"] + : isVector3Type(outType) + ? ["x", "y", "z"] + : ["x", "y", "z", "w"]; + const operands = components.map((c) => `${inputs.a}.${c}`); + const operator = isBoolType(outType) ? "^^" : "^"; + return [`${outputs.compXor} = ${operands.join(` ${operator} `)};`]; + }; + } +} diff --git a/src/dyno/math.ts b/src/dyno/math.ts new file mode 100644 index 0000000..d5e6031 --- /dev/null +++ b/src/dyno/math.ts @@ -0,0 +1,534 @@ +import { BinaryOp, Dyno, TrinaryOp, UnaryOp } from "./base"; +import { + type AddOutput, + type ClampOutput, + type DivOutput, + type IModOutput, + type IsInfOutput, + type IsNanOutput, + type MaxOutput, + type MinOutput, + type MixOutput, + type ModOutput, + type MulOutput, + type SmoothstepOutput, + type StepOutput, + type SubOutput, + absOutputType, + addOutputType, + ceilOutputType, + clampOutputType, + divOutputType, + exp2OutputType, + expOutputType, + floorOutputType, + fractOutputType, + imodOutputType, + inversesqrtOutputType, + isInfOutputType, + isNanOutputType, + log2OutputType, + logOutputType, + maxOutputType, + minOutputType, + mixOutputType, + modOutputType, + modfOutputType, + mulOutputType, + negOutputType, + powOutputType, + roundOutputType, + signOutputType, + smoothstepOutputType, + sqrOutputType, + sqrtOutputType, + stepOutputType, + subOutputType, + truncOutputType, +} from "./mathTypes"; +import type { + AllIntTypes, + AllSignedTypes, + AllValueTypes, + BoolTypes, + FloatTypes, + SignedTypes, + ValueTypes, +} from "./types"; +import { type DynoVal, valType } from "./value"; + +export const add = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new Add({ a, b }); +export const sub = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new Sub({ a, b }); +export const mul = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new Mul({ a, b }); +export const div = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new Div({ a, b }); +export const imod = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new IMod({ a, b }); +export const mod = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new Mod({ a, b }); +export const modf = (a: DynoVal) => + new Modf({ a }).outputs; + +export const neg = (a: DynoVal): DynoVal => + new Neg({ a }); +export const abs = (a: DynoVal): DynoVal => + new Abs({ a }); +export const sign = (a: DynoVal): DynoVal => + new Sign({ a }); +export const floor = (a: DynoVal): DynoVal => + new Floor({ a }); +export const ceil = (a: DynoVal): DynoVal => + new Ceil({ a }); +export const trunc = (a: DynoVal): DynoVal => + new Trunc({ a }); +export const round = (a: DynoVal): DynoVal => + new Round({ a }); +export const fract = (a: DynoVal): DynoVal => + new Fract({ a }); + +export const pow = ( + a: DynoVal, + b: DynoVal, +): DynoVal => new Pow({ a, b }); +export const exp = (a: DynoVal): DynoVal => + new Exp({ a }); +export const exp2 = (a: DynoVal): DynoVal => + new Exp2({ a }); +export const log = (a: DynoVal): DynoVal => + new Log({ a }); +export const log2 = (a: DynoVal): DynoVal => + new Log2({ a }); +export const sqr = (a: DynoVal): DynoVal => + new Sqr({ a }); +export const sqrt = (a: DynoVal): DynoVal => + new Sqrt({ a }); +export const inversesqrt = (a: DynoVal): DynoVal => + new InverseSqrt({ a }); + +export const min = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new Min({ a, b }); +export const max = ( + a: DynoVal, + b: DynoVal, +): DynoVal> => new Max({ a, b }); +export const clamp = ( + a: DynoVal, + min: DynoVal, + max: DynoVal, +): DynoVal> => new Clamp({ a, min, max }); +export const mix = ( + a: DynoVal, + b: DynoVal, + t: DynoVal, +): DynoVal> => new Mix({ a, b, t }); +export const step = ( + edge: DynoVal, + x: DynoVal, +): DynoVal> => new Step({ edge, x }); +export const smoothstep = ( + edge0: DynoVal, + edge1: DynoVal, + x: DynoVal, +): DynoVal> => + new Smoothstep({ edge0, edge1, x }); + +export const isNan = ( + a: DynoVal, +): DynoVal> => new IsNan({ a }); +export const isInf = ( + a: DynoVal, +): DynoVal> => new IsInf({ a }); + +export class Add< + A extends AllValueTypes, + B extends AllValueTypes, +> extends BinaryOp, "sum"> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "sum", outTypeFunc: addOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.sum} = ${inputs.a} + ${inputs.b};`]; + }; + } +} + +export class Sub< + A extends AllValueTypes, + B extends AllValueTypes, +> extends BinaryOp, "difference"> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "difference", outTypeFunc: subOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.difference} = ${inputs.a} - ${inputs.b};`]; + }; + } +} + +export class Mul< + A extends AllValueTypes, + B extends AllValueTypes, +> extends BinaryOp, "product"> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "product", outTypeFunc: mulOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.product} = ${inputs.a} * ${inputs.b};`]; + }; + } +} + +export class Div< + A extends AllValueTypes, + B extends AllValueTypes, +> extends BinaryOp, "quotient"> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "quotient", outTypeFunc: divOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.quotient} = ${inputs.a} / ${inputs.b};`]; + }; + } +} + +export class IMod< + A extends AllIntTypes, + B extends AllIntTypes, +> extends BinaryOp, "remainder"> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "remainder", outTypeFunc: imodOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.remainder} = ${inputs.a} % ${inputs.b};`]; + }; + } +} + +export class Mod extends BinaryOp< + A, + B, + ModOutput, + "remainder" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "remainder", outTypeFunc: modOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.remainder} = mod(${inputs.a}, ${inputs.b});`]; + }; + } +} + +export class Modf extends Dyno< + { a: A }, + { fract: A; integer: A } +> { + constructor({ a }: { a: DynoVal }) { + const inTypes = { a: valType(a) }; + const outType = modfOutputType(inTypes.a); + const outTypes = { + fract: outType, + integer: outType, + }; + super({ inTypes, outTypes, inputs: { a } }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.fract} = modf(${inputs.a}, ${outputs.integer});`]; + }; + } +} + +export class Neg extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "neg", outTypeFunc: negOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.neg} = -${inputs.a};`]; + }; + } +} + +export class Abs extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "abs", outTypeFunc: absOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.abs} = abs(${inputs.a});`]; + }; + } +} + +export class Sign extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "sign", outTypeFunc: signOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.sign} = sign(${inputs.a});`]; + }; + } +} + +export class Floor extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "floor", outTypeFunc: floorOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.floor} = floor(${inputs.a});`]; + }; + } +} + +export class Ceil extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "ceil", outTypeFunc: ceilOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.ceil} = ceil(${inputs.a});`]; + }; + } +} + +export class Trunc extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "trunc", outTypeFunc: truncOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.trunc} = trunc(${inputs.a});`]; + }; + } +} + +export class Round extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "round", outTypeFunc: roundOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.round} = round(${inputs.a});`]; + }; + } +} + +export class Fract extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "fract", outTypeFunc: fractOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.fract} = fract(${inputs.a});`]; + }; + } +} + +export class Pow extends BinaryOp { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "power", outTypeFunc: powOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.power} = pow(${inputs.a}, ${inputs.b});`]; + }; + } +} + +export class Exp extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "exp", outTypeFunc: expOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.exp} = exp(${inputs.a});`]; + }; + } +} + +export class Exp2 extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "exp2", outTypeFunc: exp2OutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.exp2} = exp2(${inputs.a});`]; + }; + } +} + +export class Log extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "log", outTypeFunc: logOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.log} = log(${inputs.a});`]; + }; + } +} + +export class Log2 extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "log2", outTypeFunc: log2OutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.log2} = log2(${inputs.a});`]; + }; + } +} + +export class Sqr extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "sqr", outTypeFunc: sqrOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.sqr} = ${inputs.a} * ${inputs.a};`]; + }; + } +} + +export class Sqrt extends UnaryOp { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "sqrt", outTypeFunc: sqrtOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.sqrt} = sqrt(${inputs.a});`]; + }; + } +} + +export class InverseSqrt extends UnaryOp< + A, + A, + "inversesqrt" +> { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "inversesqrt", outTypeFunc: inversesqrtOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.inversesqrt} = inversesqrt(${inputs.a});`]; + }; + } +} + +export class Min extends BinaryOp< + A, + B, + MinOutput, + "min" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "min", outTypeFunc: minOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.min} = min(${inputs.a}, ${inputs.b});`]; + }; + } +} + +export class Max extends BinaryOp< + A, + B, + MaxOutput, + "max" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "max", outTypeFunc: maxOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.max} = max(${inputs.a}, ${inputs.b});`]; + }; + } +} + +export class Clamp< + A extends ValueTypes, + MinMax extends ValueTypes, +> extends TrinaryOp, "clamp"> { + constructor({ + a, + min, + max, + }: { a: DynoVal; min: DynoVal; max: DynoVal }) { + super({ + a, + b: min, + c: max, + outKey: "clamp", + outTypeFunc: clampOutputType, + }); + this.statements = ({ inputs, outputs }) => { + const { a, b: min, c: max } = inputs; + return [`${outputs.clamp} = clamp(${a}, ${min}, ${max});`]; + }; + } +} + +export class Mix< + A extends FloatTypes, + T extends FloatTypes | BoolTypes, +> extends TrinaryOp, "mix"> { + constructor({ a, b, t }: { a: DynoVal; b: DynoVal; t: DynoVal }) { + super({ a, b, c: t, outKey: "mix", outTypeFunc: mixOutputType }); + this.statements = ({ inputs, outputs }) => { + const { a, b, c: t } = inputs; + return [`${outputs.mix} = mix(${a}, ${b}, ${t});`]; + }; + } +} + +export class Step< + Edge extends FloatTypes, + X extends FloatTypes, +> extends BinaryOp, "step"> { + constructor({ edge, x }: { edge: DynoVal; x: DynoVal }) { + super({ + a: edge, + b: x, + outKey: "step", + outTypeFunc: stepOutputType, + }); + this.statements = ({ inputs, outputs }) => { + const { a: edge, b: x } = inputs; + return [`${outputs.step} = step(${edge}, ${x});`]; + }; + } +} + +export class Smoothstep< + X extends FloatTypes, + Edge extends X | "float", +> extends TrinaryOp< + Edge, + Edge, + X, + SmoothstepOutput, + "smoothstep" +> { + constructor({ + edge0, + edge1, + x, + }: { edge0: DynoVal; edge1: DynoVal; x: DynoVal }) { + super({ + a: edge0, + b: edge1, + c: x, + outKey: "smoothstep", + outTypeFunc: smoothstepOutputType, + }); + this.statements = ({ inputs, outputs }) => { + const { a: edge0, b: edge1, c: x } = inputs; + return [`${outputs.smoothstep} = smoothstep(${edge0}, ${edge1}, ${x});`]; + }; + } +} + +export class IsNan extends UnaryOp< + A, + IsNanOutput, + "isNan" +> { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "isNan", outTypeFunc: isNanOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.isNan} = isNan(${inputs.a});`]; + }; + } +} + +export class IsInf extends UnaryOp< + A, + IsInfOutput, + "isInf" +> { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "isInf", outTypeFunc: isInfOutputType }); + this.statements = ({ inputs, outputs }) => { + return [`${outputs.isInf} = isInf(${inputs.a});`]; + }; + } +} diff --git a/src/dyno/mathTypes.ts b/src/dyno/mathTypes.ts new file mode 100644 index 0000000..13bcada --- /dev/null +++ b/src/dyno/mathTypes.ts @@ -0,0 +1,717 @@ +import { + type AllFloatTypes, + type AllIntTypes, + type AllSignedTypes, + type AllValueTypes, + type BaseType, + type BoolTypes, + type FloatTypes, + type IntTypes, + type SignedTypes, + type UintTypes, + type ValueTypes, + isAllFloatType, + isFloatType, + isIntType, + isMat2, + isMat3, + isMat4, + isUintType, +} from "./types"; + +export type AddOutput< + A extends AllValueTypes, + B extends AllValueTypes, +> = BaseType & + (A extends B + ? A + : A extends "int" + ? B extends IntTypes + ? B + : never + : B extends "int" + ? A extends IntTypes + ? A + : never + : A extends "uint" + ? B extends UintTypes + ? B + : never + : B extends "uint" + ? A extends UintTypes + ? A + : never + : A extends "float" + ? B extends AllFloatTypes + ? B + : never + : B extends "float" + ? A extends AllFloatTypes + ? A + : never + : never); + +export type SubOutput< + A extends AllValueTypes, + B extends AllValueTypes, +> = AddOutput; + +export type MulOutput< + A extends AllValueTypes, + B extends AllValueTypes, +> = BaseType & + (A extends "int" + ? B extends IntTypes + ? B + : never + : B extends "int" + ? A extends IntTypes + ? A + : never + : A extends "uint" + ? B extends UintTypes + ? B + : never + : B extends "uint" + ? A extends UintTypes + ? A + : never + : A extends "float" + ? B extends AllFloatTypes + ? B + : never + : B extends "float" + ? A extends AllFloatTypes + ? A + : never + : A extends IntTypes + ? B extends A + ? A + : never + : B extends IntTypes + ? A extends B + ? A + : never + : A extends UintTypes + ? B extends A + ? A + : never + : B extends UintTypes + ? A extends B + ? A + : never + : // Vector * Matrix/Vector + A extends "vec2" + ? B extends "vec2" | "mat2" | "mat2x2" + ? "vec2" + : B extends "mat3x2" + ? "vec3" + : B extends "mat4x2" + ? "vec4" + : never + : A extends "vec3" + ? B extends "mat2x3" + ? "vec2" + : B extends "vec3" | "mat3" | "mat3x3" + ? "vec3" + : B extends "mat4x3" + ? "vec4" + : never + : A extends "vec4" + ? B extends "mat2x4" + ? "vec2" + : B extends "mat3x4" + ? "vec3" + : B extends "vec4" | "mat4" | "mat4x4" + ? "vec4" + : never + : // Matrix * Vector + B extends "vec2" + ? A extends "mat2" | "mat2x2" + ? "vec2" + : A extends "mat2x3" + ? "vec3" + : A extends "mat2x4" + ? "vec4" + : never + : B extends "vec3" + ? A extends "mat3x2" + ? "vec2" + : A extends "mat3" | "mat3x3" + ? "vec3" + : A extends "mat3x4" + ? "vec4" + : never + : B extends "vec4" + ? A extends "mat4x2" + ? "vec2" + : A extends "mat4x3" + ? "vec3" + : A extends "mat4" | "mat4x4" + ? "vec4" + : never + : // Matrix * Matrix: mat{Acols}x{Arows} * mat{Bcols}x{Brows} => mat{Bcols}x{Arows} + A extends "mat2" | "mat2x2" // Acols = 2 => Brows = 2 + ? B extends "mat2" | "mat2x2" + ? "mat2" + : B extends "mat3x2" + ? "mat3x2" + : B extends "mat4x2" + ? "mat4x2" + : never + : A extends "mat2x3" // Acols = 2 => Brows = 2 + ? B extends "mat2" | "mat2x2" + ? "mat2x3" + : B extends "mat3x2" + ? "mat3" + : B extends "mat4x2" + ? "mat4x3" + : never + : A extends "mat2x4" // Acols = 2 => Brows = 2 + ? B extends "mat2" | "mat2x2" + ? "mat2x4" + : B extends "mat3x2" + ? "mat3x4" + : B extends "mat4x2" + ? "mat4" + : never + : A extends "mat3x2" // Acols = 3 => Brows = 3 + ? B extends "mat2x3" + ? "mat2" + : B extends "mat3" | "mat3x3" + ? "mat3x2" + : B extends "mat4x3" + ? "mat4x2" + : never + : A extends "mat3" | "mat3x3" // Acols = 3 => Brows = 3 + ? B extends "mat2x3" + ? "mat2x3" + : B extends "mat3" | "mat3x3" + ? "mat3" + : B extends "mat4x3" + ? "mat4x3" + : never + : A extends "mat3x4" // Acols = 3 => Brows = 3 + ? B extends "mat2x3" + ? "mat2x4" + : B extends "mat3" | "mat3x3" + ? "mat3x4" + : B extends "mat4x3" + ? "mat4" + : never + : A extends "mat4x2" // Acols = 4 => Brows = 4 + ? B extends "mat2x4" + ? "mat2" + : B extends "mat3x4" + ? "mat3x2" + : B extends + | "mat4" + | "mat4x4" + ? "mat4x2" + : never + : A extends "mat4x3" // Acols = 4 => Brows = 4 + ? B extends "mat2x4" + ? "mat2x3" + : B extends "mat3x4" + ? "mat3" + : B extends + | "mat4" + | "mat4x4" + ? "mat4x3" + : never + : A extends "mat4" | "mat4x4" // Acols = 4 => Brows = 4 + ? B extends "mat2x4" + ? "mat2x4" + : B extends "mat3x4" + ? "mat3x4" + : B extends + | "mat4" + | "mat4x4" + ? "mat4" + : never + : never); + +export type DivOutput< + A extends AllValueTypes, + B extends AllValueTypes, +> = AddOutput; + +export type IModOutput< + A extends AllIntTypes, + B extends AllIntTypes, +> = BaseType & + (A extends B + ? A + : A extends "int" + ? B extends IntTypes + ? B + : never + : B extends "int" + ? A extends IntTypes + ? A + : never + : A extends "uint" + ? B extends UintTypes + ? B + : never + : B extends "uint" + ? A extends UintTypes + ? A + : never + : never); + +export type ModOutput = BaseType & + (A extends B ? A : B extends "float" ? A : never); + +export type PowOutput = BaseType & + (A extends B ? A : never); + +export type MinOutput = BaseType & + (A extends B + ? A + : B extends "float" + ? A extends FloatTypes + ? A + : never + : B extends "int" + ? A extends IntTypes + ? A + : never + : B extends "uint" + ? A extends UintTypes + ? A + : never + : never); +export type MaxOutput = MinOutput< + A, + B +>; +export type ClampOutput = BaseType & + (B extends "float" + ? A extends FloatTypes + ? A + : never + : B extends "int" + ? A extends IntTypes + ? A + : never + : B extends "uint" + ? A extends UintTypes + ? A + : never + : never); +export type MixOutput< + A extends FloatTypes, + T extends FloatTypes | BoolTypes, +> = BaseType & + (T extends A + ? A + : T extends "float" + ? A + : T extends "bool" + ? A extends "float" + ? A + : never + : T extends "bvec2" + ? A extends "vec2" + ? A + : never + : T extends "bvec3" + ? A extends "vec3" + ? A + : never + : T extends "bvec4" + ? A extends "vec4" + ? A + : never + : never); +export type StepOutput = BaseType & + (A extends B ? B : A extends "float" ? B : never); +export type SmoothstepOutput< + A extends FloatTypes, + B extends FloatTypes, + C extends FloatTypes, +> = BaseType & + (A extends B ? (A extends C ? C : A extends "float" ? C : never) : never); + +export type IsNanOutput = BaseType & + (A extends "float" + ? "bool" + : A extends "vec2" + ? "bvec2" + : A extends "vec3" + ? "bvec3" + : A extends "vec4" + ? "bvec4" + : never); +export type IsInfOutput = IsNanOutput; + +// // Run-time type helper functions + +export function addOutputType( + a: A, + b: B, + operation = "add", +): AddOutput { + const error = () => { + throw new Error(`Invalid ${operation} types: ${a}, ${b}`); + }; + // @ts-ignore + if (a === b) return a as AddOutput; + if (a === "int") { + if (isIntType(b)) return b as AddOutput; + error(); + } + if (b === "int") { + if (isIntType(a)) return a as AddOutput; + error(); + } + if (a === "uint") { + if (isUintType(b)) return b as AddOutput; + error(); + } + if (b === "uint") { + if (isUintType(a)) return a as AddOutput; + error(); + } + if (a === "float") { + if (isAllFloatType(b)) return b as AddOutput; + error(); + } + if (b === "float") { + if (isAllFloatType(a)) return a as AddOutput; + error(); + } + throw new Error(`Invalid ${operation} types: ${a}, ${b}`); +} + +export function subOutputType( + a: A, + b: B, +): SubOutput { + return addOutputType(a, b, "sub"); +} + +export function mulOutputType( + a: A, + b: B, +): MulOutput { + const error = () => { + throw new Error(`Invalid mul types: ${a}, ${b}`); + }; + const result = (value: unknown) => value as MulOutput; + if (a === "int") { + if (isIntType(b)) return result(b); + error(); + } + if (b === "int") { + if (isIntType(a)) return result(a); + error(); + } + if (a === "uint") { + if (isUintType(b)) return result(b); + error(); + } + if (b === "uint") { + if (isUintType(a)) return result(a); + error(); + } + if (a === "float") { + if (isAllFloatType(b)) return result(b); + error(); + } + if (b === "float") { + if (isAllFloatType(a)) return result(a); + error(); + } + if (isIntType(a) || isUintType(a) || isIntType(b) || isUintType(b)) { + // @ts-ignore + if (a === b) return result(a); + error(); + } + // Vector * Matrix/Vector + if (a === "vec2") { + if (b === "vec2" || isMat2(b)) return result("vec2"); + if (b === "mat3x2") return result("vec3"); + if (b === "mat4x2") return result("vec4"); + error(); + } + if (a === "vec3") { + if (b === "mat2x3") return result("vec2"); + if (b === "vec3" || isMat3(b)) return result("vec3"); + if (b === "mat4x3") return result("vec4"); + error(); + } + if (a === "vec4") { + if (b === "mat2x4") return result("vec2"); + if (b === "mat3x4") return result("vec3"); + if (b === "vec4" || isMat4(b)) return result("vec4"); + error(); + } + // Matrix * Vector + if (b === "vec2") { + if (isMat2(a)) return result("vec2"); + if (a === "mat2x3") return result("vec3"); + if (a === "mat2x4") return result("vec4"); + error(); + } + if (b === "vec3") { + if (a === "mat3x2") return result("vec2"); + if (isMat3(a)) return result("vec3"); + if (a === "mat3x4") return result("vec4"); + error(); + } + if (b === "vec4") { + if (a === "mat4x2") return result("vec2"); + if (a === "mat4x3") return result("vec3"); + if (isMat4(a)) return result("vec4"); + error(); + } + // Matrix * Matrix: mat{Acols}x{Arows} * mat{Bcols}x{Brows} => mat{Bcols}x{Arows} + if (isMat2(a)) { + if (isMat2(b)) return result("mat2"); + if (b === "mat3x2") return result("mat3x2"); + if (b === "mat4x2") return result("mat4x2"); + error(); + } + if (a === "mat2x3") { + if (isMat2(b)) return result("mat2x3"); + if (b === "mat3x2") return result("mat3"); + if (b === "mat4x2") return result("mat4x3"); + error(); + } + if (a === "mat2x4") { + if (isMat2(b)) return result("mat2x4"); + if (b === "mat3x2") return result("mat3x4"); + if (b === "mat4x2") return result("mat4"); + error(); + } + if (a === "mat3x2") { + if (b === "mat2x3") return result("mat2"); + if (isMat3(b)) return result("mat3x2"); + if (b === "mat4x3") return result("mat4x2"); + error(); + } + if (isMat3(a)) { + if (b === "mat2x3") return result("mat2x3"); + if (isMat3(b)) return result("mat3"); + if (b === "mat4x3") return result("mat4x3"); + error(); + } + if (a === "mat3x4") { + if (b === "mat2x3") return result("mat2x4"); + if (isMat3(b)) return result("mat3x4"); + if (b === "mat4x3") return result("mat4"); + error(); + } + if (a === "mat4x2") { + if (b === "mat2x4") return result("mat2"); + if (b === "mat3x4") return result("mat3x2"); + if (isMat4(b)) return result("mat4x2"); + error(); + } + if (a === "mat4x3") { + if (b === "mat2x4") return result("mat2x3"); + if (b === "mat3x4") return result("mat3"); + if (isMat4(b)) return result("mat4x3"); + error(); + } + if (isMat4(a)) { + if (b === "mat2x4") return result("mat2x4"); + if (b === "mat3x4") return result("mat3x4"); + if (isMat4(b)) return result("mat4"); + error(); + } + throw new Error(`Invalid mul types: ${a}, ${b}`); +} + +export function divOutputType( + a: A, + b: B, +): DivOutput { + return addOutputType(a, b, "div"); +} + +export function imodOutputType( + a: A, + b: B, +): IModOutput { + // @ts-ignore + if (a === b) return a as IModOutput; + if (a === "int") { + if (isIntType(b)) return b as IModOutput; + } else if (b === "int") { + if (isIntType(a)) return a as IModOutput; + } else if (a === "uint") { + if (isUintType(b)) return b as IModOutput; + } else if (b === "uint") { + if (isUintType(a)) return a as IModOutput; + } + throw new Error(`Invalid imod types: ${a}, ${b}`); +} + +export function modOutputType( + a: A, + b: B, +): ModOutput { + // @ts-ignore + if (a === b || b === "float") return a as ModOutput; + throw new Error(`Invalid mod types: ${a}, ${b}`); +} + +export function modfOutputType(a: A): A { + return a; +} + +export function negOutputType(a: A): A { + return a; +} + +export function absOutputType(a: A): A { + return a; +} + +export function signOutputType(a: A): A { + return a; +} + +export function floorOutputType(a: A): A { + return a; +} + +export function ceilOutputType(a: A): A { + return a; +} + +export function truncOutputType(a: A): A { + return a; +} + +export function roundOutputType(a: A): A { + return a; +} + +export function fractOutputType(a: A): A { + return a; +} + +export function powOutputType(a: A): A { + return a; +} + +export function expOutputType(a: A): A { + return a; +} + +export function exp2OutputType(a: A): A { + return a; +} + +export function logOutputType(a: A): A { + return a; +} + +export function log2OutputType(a: A): A { + return a; +} + +export function sqrOutputType(a: A): A { + return a; +} + +export function sqrtOutputType(a: A): A { + return a; +} + +export function inversesqrtOutputType(a: A): A { + return a; +} + +export function minOutputType( + a: A, + b: B, + operation = "min", +): MinOutput { + // @ts-ignore + if (a === b) return a as MinOutput; + if (b === "float") { + if (isFloatType(a)) return a as MinOutput; + } else if (b === "int") { + if (isIntType(a)) return a as MinOutput; + } else if (b === "uint") { + if (isUintType(a)) return a as MinOutput; + } + throw new Error(`Invalid ${operation} types: ${a}, ${b}`); +} + +export function maxOutputType( + a: A, + b: B, +): MaxOutput { + return minOutputType(a, b, "max"); +} + +export function clampOutputType( + a: A, + b: B, + _c: B, +): ClampOutput { + if (b === "float") { + if (isFloatType(a)) return a as ClampOutput; + } else if (b === "int") { + if (isIntType(a)) return a as ClampOutput; + } else if (b === "uint") { + if (isUintType(a)) return a as ClampOutput; + } + throw new Error(`Invalid clamp types: ${a}, ${b}`); +} + +export function mixOutputType< + A extends FloatTypes, + C extends FloatTypes | BoolTypes, +>(a: A, b: A, c: C): MixOutput { + // @ts-ignore + if (c === a) return a as MixOutput; + if (c === "float") return a as MixOutput; + if (c === "bool" && a === "float") return a as MixOutput; + if (c === "bvec2" && a === "vec2") return a as MixOutput; + if (c === "bvec3" && a === "vec3") return a as MixOutput; + if (c === "bvec4" && a === "vec4") return a as MixOutput; + throw new Error(`Invalid mix types: ${a}, ${b}, ${c}`); +} + +export function stepOutputType( + a: A, + b: B, +): StepOutput { + // @ts-ignore + if (a === b || b === "float") return b as StepOutput; + throw new Error(`Invalid step types: ${a}, ${b}`); +} + +export function smoothstepOutputType< + A extends FloatTypes, + B extends FloatTypes, + C extends FloatTypes, +>(a: A, b: B, c: C): SmoothstepOutput { + // @ts-ignore + if (a === b) { + if (a === c || a === "float") return c as SmoothstepOutput; + } + throw new Error(`Invalid smoothstep types: ${a}, ${b}, ${c}`); +} + +export function isNanOutputType( + a: A, + operation = "isNan", +): IsNanOutput { + if (a === "float") return "bool" as IsNanOutput; + if (a === "vec2") return "bvec2" as IsNanOutput; + if (a === "vec3") return "bvec3" as IsNanOutput; + if (a === "vec4") return "bvec4" as IsNanOutput; + throw new Error(`Invalid ${operation} types: ${a}`); +} + +export function isInfOutputType(a: A): IsInfOutput { + return isNanOutputType(a, "isInf"); +} diff --git a/src/dyno/output.ts b/src/dyno/output.ts new file mode 100644 index 0000000..494295b --- /dev/null +++ b/src/dyno/output.ts @@ -0,0 +1,66 @@ +import { Dyno, unindentLines } from "./base"; +import { Gsplat, defineGsplat } from "./splats"; +import { + DynoOutput, + type DynoVal, + type DynoValue, + type HasDynoOut, +} from "./value"; + +export const outputPackedSplat = (gsplat: DynoVal) => + new OutputPackedSplat({ gsplat }); +export const outputRgba8 = (rgba8: DynoVal<"vec4">) => + new OutputRgba8({ rgba8 }); + +export class OutputPackedSplat + extends Dyno<{ gsplat: typeof Gsplat }, { output: "uvec4" }> + implements HasDynoOut<"uvec4"> +{ + constructor({ gsplat }: { gsplat?: DynoVal }) { + super({ + inTypes: { gsplat: Gsplat }, + inputs: { gsplat }, + globals: () => [defineGsplat], + statements: ({ inputs, outputs }) => { + const { output } = outputs; + if (!output) { + return []; + } + const { gsplat } = inputs; + if (gsplat) { + return unindentLines(` + if (isGsplatActive(${gsplat}.flags)) { + ${output} = packSplat(${gsplat}.center, ${gsplat}.scales, ${gsplat}.quaternion, ${gsplat}.rgba); + } else { + ${output} = uvec4(0u, 0u, 0u, 0u); + } + `); + } + return [`${output} = uvec4(0u, 0u, 0u, 0u);`]; + }, + }); + } + + dynoOut(): DynoValue<"uvec4"> { + return new DynoOutput(this, "output"); + } +} + +export class OutputRgba8 + extends Dyno<{ rgba8: "vec4" }, { rgba8: "vec4" }> + implements HasDynoOut<"vec4"> +{ + constructor({ rgba8 }: { rgba8?: DynoVal<"vec4"> }) { + super({ + inTypes: { rgba8: "vec4" }, + inputs: { rgba8 }, + statements: ({ inputs, outputs }) => [ + `target = ${inputs.rgba8 ?? "vec4(0.0, 0.0, 0.0, 0.0)"};`, + ], + }); + } + + dynoOut(): DynoValue<"vec4"> { + return new DynoOutput(this, "rgba8"); + } +} diff --git a/src/dyno/program.ts b/src/dyno/program.ts new file mode 100644 index 0000000..97c2897 --- /dev/null +++ b/src/dyno/program.ts @@ -0,0 +1,117 @@ +import * as THREE from "three"; + +import { IDENT_VERTEX_SHADER } from "../utils"; +import { Compilation, type Dyno, type IOTypes } from "./base"; + +export class DynoProgram { + graph: Dyno; + template: DynoProgramTemplate; + inputs: Record; + outputs: Record; + shader: string; + uniforms: Record; + updaters: (() => void)[]; + + constructor({ + graph, + inputs, + outputs, + template, + }: { + graph: Dyno; + inputs?: Record; + outputs?: Record; + template: DynoProgramTemplate; + }) { + this.graph = graph; + this.template = template; + this.inputs = inputs ?? {}; + this.outputs = outputs ?? {}; + + const compile = new Compilation({ indent: this.template.indent }); + for (const key in this.outputs) { + if (this.outputs[key]) { + compile.declares.add(this.outputs[key]); + } + } + const statements = graph.compile({ + inputs: this.inputs, + outputs: this.outputs, + compile, + }); + + this.shader = template.generate({ globals: compile.globals, statements }); + this.uniforms = compile.uniforms; + this.updaters = compile.updaters; + // console.log("*** COMPILED SHADER", this.shader); + // console.log("*** UNIFORMS", this.uniforms); + } + + prepareMaterial(): THREE.RawShaderMaterial { + return getMaterial(this); + } + + update() { + for (const updater of this.updaters) { + updater(); + } + } +} + +export class DynoProgramTemplate { + before: string; + between: string; + after: string; + indent: string; + + constructor(template: string) { + const globals = template.match(/^([ \t]*)\{\{\s*GLOBALS\s*\}\}/m); + const statements = template.match(/^([ \t]*)\{\{\s*STATEMENTS\s*\}\}/m); + if (!globals || !statements) { + throw new Error( + "Template must contain {{ GLOBALS }} and {{ STATEMENTS }}", + ); + } + + this.before = template.substring(0, globals.index); + this.between = template.substring( + (globals.index as number) + globals[0].length, + statements.index, + ); + this.after = template.substring( + (statements.index as number) + statements[0].length, + ); + this.indent = statements[1]; + } + + generate({ + globals, + statements, + }: { globals: Set; statements: string[] }): string { + return ( + this.before + + Array.from(globals).join("\n\n") + + this.between + + statements.map((s) => this.indent + s).join("\n") + + this.after + ); + } +} + +const programMaterial = new Map(); + +function getMaterial(program: DynoProgram): THREE.RawShaderMaterial { + let material = programMaterial.get(program); + if (material) { + return material; + } + + material = new THREE.RawShaderMaterial({ + glslVersion: THREE.GLSL3, + vertexShader: IDENT_VERTEX_SHADER, + fragmentShader: program.shader, + uniforms: program.uniforms, + }); + programMaterial.set(program, material); + return material; +} diff --git a/src/dyno/splats.ts b/src/dyno/splats.ts new file mode 100644 index 0000000..51abe39 --- /dev/null +++ b/src/dyno/splats.ts @@ -0,0 +1,593 @@ +import { Dyno, UnaryOp, unindent, unindentLines } from "./base"; +import { + DynoOutput, + type DynoVal, + type DynoValue, + type HasDynoOut, +} from "./value"; + +export const Gsplat = { type: "Gsplat" } as { type: "Gsplat" }; +export const TPackedSplats = { type: "PackedSplats" } as { + type: "PackedSplats"; +}; + +export const numPackedSplats = ( + packedSplats: DynoVal, +): DynoVal<"int"> => new NumPackedSplats({ packedSplats }); +export const readPackedSplat = ( + packedSplats: DynoVal, + index: DynoVal<"int">, +): DynoVal => new ReadPackedSplat({ packedSplats, index }); +export const readPackedSplatRange = ( + packedSplats: DynoVal, + index: DynoVal<"int">, + base: DynoVal<"int">, + count: DynoVal<"int">, +): DynoVal => + new ReadPackedSplatRange({ packedSplats, index, base, count }); +export const splitGsplat = (gsplat: DynoVal) => + new SplitGsplat({ gsplat }); +export const combineGsplat = ({ + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b, +}: { + gsplat?: DynoVal; + flags?: DynoVal<"uint">; + index?: DynoVal<"int">; + center?: DynoVal<"vec3">; + scales?: DynoVal<"vec3">; + quaternion?: DynoVal<"vec4">; + rgba?: DynoVal<"vec4">; + rgb?: DynoVal<"vec3">; + opacity?: DynoVal<"float">; + x?: DynoVal<"float">; + y?: DynoVal<"float">; + z?: DynoVal<"float">; + r?: DynoVal<"float">; + g?: DynoVal<"float">; + b?: DynoVal<"float">; +}): DynoVal => { + return new CombineGsplat({ + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b, + }); +}; +export const gsplatNormal = (gsplat: DynoVal): DynoVal<"vec3"> => + new GsplatNormal({ gsplat }); + +export const transformGsplat = ( + gsplat: DynoVal, + { + scale, + rotate, + translate, + recolor, + }: { + scale?: DynoVal<"float">; + rotate?: DynoVal<"vec4">; + translate?: DynoVal<"vec3">; + recolor?: DynoVal<"vec4">; + }, +): DynoVal => { + return new TransformGsplat({ gsplat, scale, rotate, translate, recolor }); +}; + +export const defineGsplat = unindent(` + struct Gsplat { + vec3 center; + uint flags; + vec3 scales; + int index; + vec4 quaternion; + vec4 rgba; + }; + const uint GSPLAT_FLAG_ACTIVE = 1u << 0u; + + bool isGsplatActive(uint flags) { + return (flags & GSPLAT_FLAG_ACTIVE) != 0u; + } +`); + +export const definePackedSplats = unindent(` + struct PackedSplats { + usampler2DArray texture; + int numSplats; + }; +`); + +export class NumPackedSplats extends UnaryOp< + typeof TPackedSplats, + "int", + "numSplats" +> { + constructor({ + packedSplats, + }: { packedSplats: DynoVal }) { + super({ a: packedSplats, outKey: "numSplats", outTypeFunc: () => "int" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.numSplats} = ${inputs.a}.numSplats;`, + ]; + } +} + +const defineReadPackedSplat = unindent(` + bool readPackedSplat(usampler2DArray texture, int numSplats, int index, out Gsplat gsplat) { + if ((index >= 0) && (index < numSplats)) { + uvec4 packed = texelFetch(texture, splatTexCoord(index), 0); + unpackSplat(packed, gsplat.center, gsplat.scales, gsplat.quaternion, gsplat.rgba); + return true; + } else { + return false; + } + } +`); + +export class ReadPackedSplat + extends Dyno< + { packedSplats: typeof TPackedSplats; index: "int" }, + { gsplat: typeof Gsplat } + > + implements HasDynoOut +{ + constructor({ + packedSplats, + index, + }: { packedSplats?: DynoVal; index?: DynoVal<"int"> }) { + super({ + inTypes: { packedSplats: TPackedSplats, index: "int" }, + outTypes: { gsplat: Gsplat }, + inputs: { packedSplats, index }, + globals: () => [defineGsplat, definePackedSplats, defineReadPackedSplat], + statements: ({ inputs, outputs }) => { + const { gsplat } = outputs; + if (!gsplat) { + return []; + } + const { packedSplats, index } = inputs; + let statements: string[]; + if (packedSplats && index) { + statements = unindentLines(` + if (readPackedSplat(${packedSplats}.texture, ${packedSplats}.numSplats, ${index}, ${gsplat})) { + bool zeroSize = all(equal(${gsplat}.scales, vec3(0.0, 0.0, 0.0))); + ${gsplat}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE; + } else { + ${gsplat}.flags = 0u; + } + `); + } else { + statements = [`${gsplat}.flags = 0u;`]; + } + statements.push(`${gsplat}.index = ${index ?? "0"};`); + return statements; + }, + }); + } + + dynoOut(): DynoValue { + return new DynoOutput(this, "gsplat"); + } +} + +export class ReadPackedSplatRange + extends Dyno< + { + packedSplats: typeof TPackedSplats; + index: "int"; + base: "int"; + count: "int"; + }, + { gsplat: typeof Gsplat } + > + implements HasDynoOut +{ + constructor({ + packedSplats, + index, + base, + count, + }: { + packedSplats?: DynoVal; + index?: DynoVal<"int">; + base?: DynoVal<"int">; + count?: DynoVal<"int">; + }) { + super({ + inTypes: { + packedSplats: TPackedSplats, + index: "int", + base: "int", + count: "int", + }, + outTypes: { gsplat: Gsplat }, + inputs: { packedSplats, index, base, count }, + globals: () => [defineGsplat, definePackedSplats, defineReadPackedSplat], + statements: ({ inputs, outputs }) => { + const { gsplat } = outputs; + if (!gsplat) { + return []; + } + const { packedSplats, index, base, count } = inputs; + let statements: string[]; + if (packedSplats && index && base && count) { + statements = unindentLines(` + ${gsplat}.flags = 0u; + if ((${index} >= ${base}) && (${index} < (${base} + ${count}))) { + if (readPackedSplat(${packedSplats}.texture, ${packedSplats}.numSplats, ${index}, ${gsplat})) { + bool zeroSize = all(equal(${gsplat}.scales, vec3(0.0, 0.0, 0.0))); + ${gsplat}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE; + } + } + `); + } else { + statements = [`${gsplat}.flags = 0u;`]; + } + statements.push(`${gsplat}.index = ${index ?? "0"};`); + return statements; + }, + }); + } + + dynoOut(): DynoValue { + return new DynoOutput(this, "gsplat"); + } +} + +export class SplitGsplat extends Dyno< + { gsplat: typeof Gsplat }, + { + flags: "uint"; + active: "bool"; + index: "int"; + center: "vec3"; + scales: "vec3"; + quaternion: "vec4"; + rgba: "vec4"; + rgb: "vec3"; + opacity: "float"; + x: "float"; + y: "float"; + z: "float"; + r: "float"; + g: "float"; + b: "float"; + } +> { + constructor({ gsplat }: { gsplat?: DynoVal }) { + super({ + inTypes: { gsplat: Gsplat }, + outTypes: { + flags: "uint", + active: "bool", + index: "int", + center: "vec3", + scales: "vec3", + quaternion: "vec4", + rgba: "vec4", + rgb: "vec3", + opacity: "float", + x: "float", + y: "float", + z: "float", + r: "float", + g: "float", + b: "float", + }, + inputs: { gsplat }, + globals: () => [defineGsplat], + statements: ({ inputs, outputs }) => { + const { gsplat } = inputs; + const { + flags, + active, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b, + } = outputs; + return [ + !flags ? null : `${flags} = ${gsplat ? `${gsplat}.flags` : "0u"};`, + !active + ? null + : `${active} = isGsplatActive(${gsplat ? `${gsplat}.flags` : "0u"});`, + !index ? null : `${index} = ${gsplat ? `${gsplat}.index` : "0"};`, + !center + ? null + : `${center} = ${gsplat ? `${gsplat}.center` : "vec3(0.0, 0.0, 0.0)"};`, + !scales + ? null + : `${scales} = ${gsplat ? `${gsplat}.scales` : "vec3(0.0, 0.0, 0.0)"};`, + !quaternion + ? null + : `${quaternion} = ${gsplat ? `${gsplat}.quaternion` : "vec4(0.0, 0.0, 0.0, 1.0)"};`, + !rgba + ? null + : `${rgba} = ${gsplat ? `${gsplat}.rgba` : "vec4(0.0, 0.0, 0.0, 0.0)"};`, + !rgb + ? null + : `${rgb} = ${gsplat ? `${gsplat}.rgba.rgb` : "vec3(0.0, 0.0, 0.0)"};`, + !opacity + ? null + : `${opacity} = ${gsplat ? `${gsplat}.rgba.a` : "0.0"};`, + !x ? null : `${x} = ${gsplat ? `${gsplat}.center.x` : "0.0"};`, + !y ? null : `${y} = ${gsplat ? `${gsplat}.center.y` : "0.0"};`, + !z ? null : `${z} = ${gsplat ? `${gsplat}.center.z` : "0.0"};`, + !r ? null : `${r} = ${gsplat ? `${gsplat}.rgba.r` : "0.0"};`, + !g ? null : `${g} = ${gsplat ? `${gsplat}.rgba.g` : "0.0"};`, + !b ? null : `${b} = ${gsplat ? `${gsplat}.rgba.b` : "0.0"};`, + ].filter(Boolean) as string[]; + }, + }); + } +} + +export class CombineGsplat + extends Dyno< + { + gsplat: typeof Gsplat; + flags: "uint"; + index: "int"; + center: "vec3"; + scales: "vec3"; + quaternion: "vec4"; + rgba: "vec4"; + rgb: "vec3"; + opacity: "float"; + x: "float"; + y: "float"; + z: "float"; + r: "float"; + g: "float"; + b: "float"; + }, + { gsplat: typeof Gsplat } + > + implements HasDynoOut +{ + constructor({ + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b, + }: { + gsplat?: DynoVal; + flags?: DynoVal<"uint">; + index?: DynoVal<"int">; + center?: DynoVal<"vec3">; + scales?: DynoVal<"vec3">; + quaternion?: DynoVal<"vec4">; + rgba?: DynoVal<"vec4">; + rgb?: DynoVal<"vec3">; + opacity?: DynoVal<"float">; + x?: DynoVal<"float">; + y?: DynoVal<"float">; + z?: DynoVal<"float">; + r?: DynoVal<"float">; + g?: DynoVal<"float">; + b?: DynoVal<"float">; + }) { + super({ + inTypes: { + gsplat: Gsplat, + flags: "uint", + index: "int", + center: "vec3", + scales: "vec3", + quaternion: "vec4", + rgba: "vec4", + rgb: "vec3", + opacity: "float", + x: "float", + y: "float", + z: "float", + r: "float", + g: "float", + b: "float", + }, + outTypes: { gsplat: Gsplat }, + inputs: { + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b, + }, + globals: () => [defineGsplat], + statements: ({ inputs, outputs }) => { + const { gsplat: outGsplat } = outputs; + if (!outGsplat) { + return []; + } + const { + gsplat, + flags, + index, + center, + scales, + quaternion, + rgba, + rgb, + opacity, + x, + y, + z, + r, + g, + b, + } = inputs; + return [ + `${outGsplat}.flags = ${flags ?? (gsplat ? `${gsplat}.flags` : "0u")};`, + `${outGsplat}.index = ${index ?? (gsplat ? `${gsplat}.index` : "0")};`, + `${outGsplat}.center = ${center ?? (gsplat ? `${gsplat}.center` : "vec3(0.0, 0.0, 0.0)")};`, + `${outGsplat}.scales = ${scales ?? (gsplat ? `${gsplat}.scales` : "vec3(0.0, 0.0, 0.0)")};`, + `${outGsplat}.quaternion = ${quaternion ?? (gsplat ? `${gsplat}.quaternion` : "vec4(0.0, 0.0, 0.0, 1.0)")};`, + `${outGsplat}.rgba = ${rgba ?? (gsplat ? `${gsplat}.rgba` : "vec4(0.0, 0.0, 0.0, 0.0)")};`, + !rgb ? null : `${outGsplat}.rgba.rgb = ${rgb};`, + !opacity ? null : `${outGsplat}.rgba.a = ${opacity};`, + !x ? null : `${outGsplat}.center.x = ${x};`, + !y ? null : `${outGsplat}.center.y = ${y};`, + !z ? null : `${outGsplat}.center.z = ${z};`, + !r ? null : `${outGsplat}.rgba.r = ${r};`, + !g ? null : `${outGsplat}.rgba.g = ${g};`, + !b ? null : `${outGsplat}.rgba.b = ${b};`, + ].filter(Boolean) as string[]; + }, + }); + } + + dynoOut(): DynoValue { + return new DynoOutput(this, "gsplat"); + } +} + +export const defineGsplatNormal = unindent(` + vec3 gsplatNormal(vec3 scales, vec4 quaternion) { + float minScale = min(scales.x, min(scales.y, scales.z)); + vec3 normal; + if (scales.z == minScale) { + normal = vec3(0.0, 0.0, 1.0); + } else if (scales.y == minScale) { + normal = vec3(0.0, 1.0, 0.0); + } else { + normal = vec3(1.0, 0.0, 0.0); + } + return quatVec(quaternion, normal); + } +`); + +export class GsplatNormal extends UnaryOp { + constructor({ gsplat }: { gsplat: DynoVal }) { + super({ a: gsplat, outKey: "normal", outTypeFunc: () => "vec3" }); + this.globals = () => [defineGsplat, defineGsplatNormal]; + this.statements = ({ inputs, outputs }) => [ + `${outputs.normal} = gsplatNormal(${inputs.a}.scales, ${inputs.a}.quaternion);`, + ]; + } +} + +export class TransformGsplat + extends Dyno< + { + gsplat: typeof Gsplat; + scale: "float"; + rotate: "vec4"; + translate: "vec3"; + recolor: "vec4"; + }, + { gsplat: typeof Gsplat } + > + implements HasDynoOut +{ + constructor({ + gsplat, + scale, + rotate, + translate, + recolor, + }: { + gsplat?: DynoVal; + scale?: DynoVal<"float">; + rotate?: DynoVal<"vec4">; + translate?: DynoVal<"vec3">; + recolor?: DynoVal<"vec4">; + }) { + super({ + inTypes: { + gsplat: Gsplat, + scale: "float", + rotate: "vec4", + translate: "vec3", + recolor: "vec4", + }, + outTypes: { gsplat: Gsplat }, + inputs: { gsplat, scale, rotate, translate, recolor }, + globals: () => [defineGsplat], + statements: ({ inputs, outputs, compile }) => { + const { gsplat } = outputs; + if (!gsplat || !inputs.gsplat) { + return []; + } + const { scale, rotate, translate, recolor } = inputs; + const indent = compile.indent; + const statements = [ + `${gsplat} = ${inputs.gsplat};`, + `if (isGsplatActive(${gsplat}.flags)) {`, + + scale ? `${indent}${gsplat}.center *= ${scale};` : null, + rotate + ? `${indent}${gsplat}.center = quatVec(${rotate}, ${gsplat}.center);` + : null, + translate ? `${indent}${gsplat}.center += ${translate};` : null, + + scale ? `${indent}${gsplat}.scales *= ${scale};` : null, + + rotate + ? `${indent}${gsplat}.quaternion = quatQuat(${rotate}, ${gsplat}.quaternion);` + : null, + recolor ? `${indent}${gsplat}.rgba *= ${recolor};` : null, + "}", + ].filter(Boolean) as string[]; + return statements; + }, + }); + } + + dynoOut(): DynoValue { + return new DynoOutput(this, "gsplat"); + } +} diff --git a/src/dyno/texture.ts b/src/dyno/texture.ts new file mode 100644 index 0000000..92b924a --- /dev/null +++ b/src/dyno/texture.ts @@ -0,0 +1,239 @@ +import { Dyno } from "./base"; +import type { + AllSamplerTypes, + IsamplerTypes, + NormalSamplerTypes, + Sampler2DArrayTypes, + Sampler2DTypes, + Sampler3DTypes, + SamplerCubeTypes, + SamplerShadowTypes, + SamplerTypes, + UsamplerTypes, +} from "./types"; +import { + DynoOutput, + type DynoVal, + type DynoValue, + type HasDynoOut, + valType, +} from "./value"; + +export const textureSize = ( + texture: DynoVal, + lod?: DynoVal<"int">, +): DynoVal> => new TextureSize({ texture, lod }); +export const texture = ( + texture: DynoVal, + coord: DynoVal>, + bias?: DynoVal<"float">, +): DynoVal> => new Texture({ texture, coord, bias }); +export const texelFetch = ( + texture: DynoVal, + coord: DynoVal>, + lod?: DynoVal<"int">, +): DynoVal> => new TexelFetch({ texture, coord, lod }); + +export class TextureSize + extends Dyno<{ texture: T; lod: "int" }, { size: TextureSizeType }> + implements HasDynoOut> +{ + constructor({ texture, lod }: { texture: DynoVal; lod?: DynoVal<"int"> }) { + const textureType = valType(texture); + super({ + inTypes: { texture: textureType, lod: "int" }, + outTypes: { size: textureSizeType(textureType) }, + inputs: { texture, lod }, + statements: ({ inputs, outputs }) => [ + `${outputs.size} = textureSize(${inputs.texture}, ${inputs.lod ?? "0"});`, + ], + }); + } + + dynoOut(): DynoValue> { + return new DynoOutput(this, "size"); + } +} + +export class Texture + extends Dyno< + { texture: T; coord: TextureCoordType; bias: "float" }, + { sample: TextureReturnType } + > + implements HasDynoOut> +{ + constructor({ + texture, + coord, + bias, + }: { + texture: DynoVal; + coord: DynoVal>; + bias?: DynoVal<"float">; + }) { + const textureType = valType(texture); + super({ + inTypes: { + texture: textureType, + coord: textureCoordType(textureType), + bias: "float", + }, + outTypes: { sample: textureReturnType(textureType) }, + inputs: { texture, coord, bias }, + statements: ({ inputs, outputs }) => [ + `${outputs.sample} = texture(${inputs.texture}, ${inputs.coord}${inputs.bias ? `, ${inputs.bias}` : ""});`, + ], + }); + } + + dynoOut(): DynoValue> { + return new DynoOutput(this, "sample"); + } +} + +export class TexelFetch + extends Dyno< + { texture: T; coord: TextureSizeType; lod: "int" }, + { texel: TextureReturnType } + > + implements HasDynoOut> +{ + constructor({ + texture, + coord, + lod, + }: { + texture: DynoVal; + coord: DynoVal>; + lod?: DynoVal<"int">; + }) { + const textureType = valType(texture); + super({ + inTypes: { + texture: textureType, + coord: textureSizeType(textureType), + lod: "int", + }, + outTypes: { texel: textureReturnType(textureType) }, + inputs: { texture, coord, lod }, + statements: ({ inputs, outputs }) => [ + `${outputs.texel} = texelFetch(${inputs.texture}, ${inputs.coord}, ${inputs.lod ?? "0"});`, + ], + }); + } + + dynoOut(): DynoValue> { + return new DynoOutput(this, "texel"); + } +} + +type TextureSizeType = T extends + | Sampler2DTypes + | SamplerCubeTypes + ? "ivec2" + : T extends Sampler3DTypes | Sampler2DArrayTypes + ? "ivec3" + : never; + +function textureSizeType( + textureType: T, +): TextureSizeType { + switch (textureType) { + case "sampler2D": + case "usampler2D": + case "isampler2D": + case "samplerCube": + case "usamplerCube": + case "isamplerCube": + case "sampler2DShadow": + case "samplerCubeShadow": + return "ivec2" as TextureSizeType; + case "sampler3D": + case "usampler3D": + case "isampler3D": + case "sampler2DArray": + case "usampler2DArray": + case "isampler2DArray": + case "sampler2DArrayShadow": + return "ivec3" as TextureSizeType; + default: + throw new Error(`Invalid texture type: ${textureType}`); + } +} + +type TextureCoordType = T extends Sampler2DTypes + ? "vec2" + : T extends + | Sampler3DTypes + | Sampler2DArrayTypes + | SamplerCubeTypes + | Sampler2DArrayTypes + ? "vec3" + : T extends "samperCubeShadow" | "sampler2DArrayShadow" + ? "vec4" + : never; + +function textureCoordType( + textureType: T, +): TextureCoordType { + switch (textureType) { + case "sampler2D": + case "usampler2D": + case "isampler2D": + return "vec2" as TextureCoordType; + case "sampler3D": + case "usampler3D": + case "isampler3D": + case "samplerCube": + case "usamplerCube": + case "isamplerCube": + case "sampler2DArray": + case "usampler2DArray": + case "isampler2DArray": + case "sampler2DShadow": + return "vec3" as TextureCoordType; + case "samplerCubeShadow": + case "sampler2DArrayShadow": + return "vec4" as TextureCoordType; + default: + throw new Error(`Invalid texture type: ${textureType}`); + } +} + +type TextureReturnType = T extends SamplerTypes + ? "vec4" + : T extends UsamplerTypes + ? "uvec4" + : T extends IsamplerTypes + ? "ivec4" + : T extends SamplerShadowTypes + ? "float" + : never; + +function textureReturnType( + textureType: T, +): TextureReturnType { + switch (textureType) { + case "sampler2D": + case "sampler2DArray": + case "sampler3D": + case "samplerCube": + case "sampler2DShadow": + return "vec4" as TextureReturnType; + case "usampler2D": + case "usampler2DArray": + case "usampler3D": + case "usamplerCube": + return "uvec4" as TextureReturnType; + case "isampler2D": + case "isampler2DArray": + case "isampler3D": + case "isamplerCube": + return "ivec4" as TextureReturnType; + case "samplerCubeShadow": + case "sampler2DArrayShadow": + return "float" as TextureReturnType; + default: + throw new Error(`Invalid texture type: ${textureType}`); + } +} diff --git a/src/dyno/transform.ts b/src/dyno/transform.ts new file mode 100644 index 0000000..97fcdd2 --- /dev/null +++ b/src/dyno/transform.ts @@ -0,0 +1,155 @@ +import { Dyno } from "./base"; +import type { DynoVal } from "./value"; + +export const transformPos = ( + position: DynoVal<"vec3">, + { + scale, + scales, + rotate, + translate, + }: { + scale?: DynoVal<"float">; + scales?: DynoVal<"vec3">; + rotate?: DynoVal<"vec4">; + translate?: DynoVal<"vec3">; + }, +): DynoVal<"vec3"> => { + return new TransformPosition({ position, scale, scales, rotate, translate }) + .outputs.position; +}; +export const transformRay = ( + ray: DynoVal<"vec3">, + { + scale, + scales, + rotate, + }: { + scale?: DynoVal<"float">; + scales?: DynoVal<"vec3">; + rotate?: DynoVal<"vec4">; + }, +): DynoVal<"vec3"> => { + return new TransformRay({ ray, scale, scales, rotate }).outputs.ray; +}; +export const transformQuat = ( + quaternion: DynoVal<"vec4">, + { rotate }: { rotate?: DynoVal<"vec4"> }, +): DynoVal<"vec4"> => { + return new TransformQuaternion({ quaternion, rotate }).outputs.quaternion; +}; + +export class TransformPosition extends Dyno< + { + position: "vec3"; + scale: "float"; + scales: "vec3"; + rotate: "vec4"; + translate: "vec3"; + }, + { position: "vec3" } +> { + constructor({ + position, + scale, + scales, + rotate, + translate, + }: { + position?: DynoVal<"vec3">; + scale?: DynoVal<"float">; + scales?: DynoVal<"vec3">; + rotate?: DynoVal<"vec4">; + translate?: DynoVal<"vec3">; + }) { + super({ + inTypes: { + position: "vec3", + scale: "float", + scales: "vec3", + rotate: "vec4", + translate: "vec3", + }, + outTypes: { position: "vec3" }, + inputs: { position, scale, scales, rotate, translate }, + statements: ({ inputs, outputs }) => { + const { position } = outputs; + if (!position) { + return []; + } + const { scale, scales, rotate, translate } = inputs; + return [ + `${position} = ${inputs.position ?? "vec3(0.0, 0.0, 0.0)"};`, + !scale ? null : `${position} *= ${scale};`, + !scales ? null : `${position} *= ${scales};`, + !rotate ? null : `${position} = quatVec(${rotate}, ${position});`, + !translate ? null : `${position} += ${translate};`, + ].filter(Boolean) as string[]; + }, + }); + } +} + +export class TransformRay extends Dyno< + { ray: "vec3"; scale: "float"; scales: "vec3"; rotate: "vec4" }, + { ray: "vec3" } +> { + constructor({ + ray, + scale, + scales, + rotate, + }: { + ray?: DynoVal<"vec3">; + scale?: DynoVal<"float">; + scales?: DynoVal<"vec3">; + rotate?: DynoVal<"vec4">; + }) { + super({ + inTypes: { ray: "vec3", scale: "float", scales: "vec3", rotate: "vec4" }, + outTypes: { ray: "vec3" }, + inputs: { ray, scale, scales, rotate }, + statements: ({ inputs, outputs }) => { + const { ray } = outputs; + if (!ray) { + return []; + } + const { scale, scales, rotate } = inputs; + return [ + `${ray} = ${inputs.ray ?? "vec3(0.0, 0.0, 0.0)"};`, + !scale ? null : `${ray} *= ${scale};`, + !scales ? null : `${ray} *= ${scales};`, + !rotate ? null : `${ray} = quatVec(${rotate}, ${ray});`, + ].filter(Boolean) as string[]; + }, + }); + } +} + +export class TransformQuaternion extends Dyno< + { quaternion: "vec4"; rotate: "vec4" }, + { quaternion: "vec4" } +> { + constructor({ + quaternion, + rotate, + }: { quaternion?: DynoVal<"vec4">; rotate?: DynoVal<"vec4"> }) { + super({ + inTypes: { quaternion: "vec4", rotate: "vec4" }, + outTypes: { quaternion: "vec4" }, + inputs: { quaternion, rotate }, + statements: ({ inputs, outputs }) => { + const { quaternion } = outputs; + if (!quaternion) { + return []; + } + return [ + `${quaternion} = ${inputs.quaternion ?? "vec4(0.0, 0.0, 0.0, 1.0)"};`, + !rotate + ? null + : `${quaternion} = quatQuat(${inputs.rotate}, ${quaternion});`, + ].filter(Boolean) as string[]; + }, + }); + } +} diff --git a/src/dyno/trig.ts b/src/dyno/trig.ts new file mode 100644 index 0000000..ce9c008 --- /dev/null +++ b/src/dyno/trig.ts @@ -0,0 +1,182 @@ +import { BinaryOp, UnaryOp } from "./base"; +import type { FloatTypes } from "./types"; +import type { DynoVal } from "./value"; + +export const radians = ( + degrees: DynoVal, +): DynoVal => new Radians({ degrees }); +export const degrees = ( + radians: DynoVal, +): DynoVal => new Degrees({ radians }); + +export const sin = (radians: DynoVal): DynoVal => + new Sin({ radians }); +export const cos = (radians: DynoVal): DynoVal => + new Cos({ radians }); +export const tan = (radians: DynoVal): DynoVal => + new Tan({ radians }); + +export const asin = (sin: DynoVal): DynoVal => + new Asin({ sin }); +export const acos = (cos: DynoVal): DynoVal => + new Acos({ cos }); +export const atan = (tan: DynoVal): DynoVal => + new Atan({ tan }); +export const atan2 = ( + y: DynoVal, + x: DynoVal, +): DynoVal => new Atan2({ y, x }); + +export const sinh = (x: DynoVal): DynoVal => + new Sinh({ x }); +export const cosh = (x: DynoVal): DynoVal => + new Cosh({ x }); +export const tanh = (x: DynoVal): DynoVal => + new Tanh({ x }); + +export const asinh = (x: DynoVal): DynoVal => + new Asinh({ x }); +export const acosh = (x: DynoVal): DynoVal => + new Acosh({ x }); +export const atanh = (x: DynoVal): DynoVal => + new Atanh({ x }); + +export class Radians extends UnaryOp { + constructor({ degrees }: { degrees: DynoVal }) { + super({ a: degrees, outTypeFunc: (aType) => aType, outKey: "radians" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.radians} = radians(${inputs.a});`, + ]; + } +} + +export class Degrees extends UnaryOp { + constructor({ radians }: { radians: DynoVal }) { + super({ a: radians, outTypeFunc: (aType) => aType, outKey: "degrees" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.degrees} = degrees(${inputs.a});`, + ]; + } +} + +export class Sin extends UnaryOp { + constructor({ radians }: { radians: DynoVal }) { + super({ a: radians, outTypeFunc: (aType) => aType, outKey: "sin" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.sin} = sin(${inputs.a});`, + ]; + } +} + +export class Cos extends UnaryOp { + constructor({ radians }: { radians: DynoVal }) { + super({ a: radians, outTypeFunc: (aType) => aType, outKey: "cos" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.cos} = cos(${inputs.a});`, + ]; + } +} + +export class Tan extends UnaryOp { + constructor({ radians }: { radians: DynoVal }) { + super({ a: radians, outTypeFunc: (aType) => aType, outKey: "tan" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.tan} = tan(${inputs.a});`, + ]; + } +} + +export class Asin extends UnaryOp { + constructor({ sin }: { sin: DynoVal }) { + super({ a: sin, outTypeFunc: (aType) => aType, outKey: "asin" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.asin} = asin(${inputs.a});`, + ]; + } +} + +export class Acos extends UnaryOp { + constructor({ cos }: { cos: DynoVal }) { + super({ a: cos, outTypeFunc: (aType) => aType, outKey: "acos" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.acos} = acos(${inputs.a});`, + ]; + } +} + +export class Atan extends UnaryOp { + constructor({ tan }: { tan: DynoVal }) { + super({ a: tan, outTypeFunc: (aType) => aType, outKey: "atan" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.atan} = atan(${inputs.a});`, + ]; + } +} + +export class Atan2 extends BinaryOp { + constructor({ y, x }: { y: DynoVal; x: DynoVal }) { + super({ + a: y, + b: x, + outTypeFunc: (aType, bType) => aType, + outKey: "atan2", + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.atan2} = atan2(${inputs.a}, ${inputs.b});`, + ]; + } +} + +export class Sinh extends UnaryOp { + constructor({ x }: { x: DynoVal }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "sinh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.sinh} = sinh(${inputs.a});`, + ]; + } +} + +export class Cosh extends UnaryOp { + constructor({ x }: { x: DynoVal }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "cosh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.cosh} = cosh(${inputs.a});`, + ]; + } +} + +export class Tanh extends UnaryOp { + constructor({ x }: { x: DynoVal }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "tanh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.tanh} = tanh(${inputs.a});`, + ]; + } +} + +export class Asinh extends UnaryOp { + constructor({ x }: { x: DynoVal }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "asinh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.asinh} = asinh(${inputs.a});`, + ]; + } +} + +export class Acosh extends UnaryOp { + constructor({ x }: { x: DynoVal }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "acosh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.acosh} = acosh(${inputs.a});`, + ]; + } +} + +export class Atanh extends UnaryOp { + constructor({ x }: { x: DynoVal }) { + super({ a: x, outTypeFunc: (aType) => aType, outKey: "atanh" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.atanh} = atanh(${inputs.a});`, + ]; + } +} diff --git a/src/dyno/types.ts b/src/dyno/types.ts new file mode 100644 index 0000000..2fbad55 --- /dev/null +++ b/src/dyno/types.ts @@ -0,0 +1,420 @@ +import type * as THREE from "three"; + +export type BoolTypes = "bool" | "bvec2" | "bvec3" | "bvec4"; +export type IntTypes = "int" | "ivec2" | "ivec3" | "ivec4"; +export type UintTypes = "uint" | "uvec2" | "uvec3" | "uvec4"; +export type AllIntTypes = IntTypes | UintTypes; +export type FloatTypes = "float" | "vec2" | "vec3" | "vec4"; +export type ScalarTypes = "uint" | "int" | "float"; +export type Vector2Types = "vec2" | "ivec2" | "uvec2"; +export type Vector3Types = "vec3" | "ivec3" | "uvec3"; +export type Vector4Types = "vec4" | "ivec4" | "uvec4"; +export type VectorTypes = Vector2Types | Vector3Types | Vector4Types; +export type MatFloatTypes = + | "mat2" + | "mat2x2" + | "mat2x3" + | "mat2x4" + | "mat3" + | "mat3x2" + | "mat3x3" + | "mat3x4" + | "mat4" + | "mat4x2" + | "mat4x3" + | "mat4x4"; +export type SquareMatTypes = + | "mat2" + | "mat3" + | "mat4" + | "mat2x2" + | "mat3x3" + | "mat4x4"; +export type AllFloatTypes = FloatTypes | MatFloatTypes; +export type SignedTypes = IntTypes | FloatTypes; +export type AllSignedTypes = SignedTypes | MatFloatTypes; +export type ValueTypes = FloatTypes | IntTypes | UintTypes; +export type AllValueTypes = AllFloatTypes | IntTypes | UintTypes; +export type SimpleTypes = BoolTypes | AllValueTypes; + +export type VectorElementType = A extends FloatTypes + ? "float" + : A extends IntTypes + ? "int" + : A extends UintTypes + ? "uint" + : never; + +export type SameSizeVec = T extends ScalarTypes + ? "float" + : T extends "vec2" | "ivec2" | "uvec2" + ? "vec2" + : T extends "vec3" | "ivec3" | "uvec3" + ? "vec3" + : T extends "vec4" | "ivec4" | "uvec4" + ? "vec4" + : never; + +export type SameSizeUvec = T extends ScalarTypes + ? "uint" + : T extends "vec2" | "ivec2" | "uvec2" + ? "uvec2" + : T extends "vec3" | "ivec3" | "uvec3" + ? "uvec3" + : T extends "vec4" | "ivec4" | "uvec4" + ? "uvec4" + : never; + +export type SameSizeIvec = T extends ScalarTypes + ? "int" + : T extends "vec2" | "ivec2" | "uvec2" + ? "ivec2" + : T extends "vec3" | "ivec3" | "uvec3" + ? "ivec3" + : T extends "vec4" | "ivec4" | "uvec4" + ? "ivec4" + : never; + +export type SamplerTypes = + | "sampler2D" + | "sampler2DArray" + | "sampler3D" + | "samplerCube"; +export type UsamplerTypes = + | "usampler2D" + | "usampler2DArray" + | "usampler3D" + | "usamplerCube"; +export type IsamplerTypes = + | "isampler2D" + | "isampler2DArray" + | "isampler3D" + | "isamplerCube"; +export type NormalSamplerTypes = SamplerTypes | UsamplerTypes | IsamplerTypes; +export type SamplerShadowTypes = + | "sampler2DShadow" + | "sampler2DArrayShadow" + | "samplerCubeShadow"; +export type AllSamplerTypes = NormalSamplerTypes | SamplerShadowTypes; +export type Sampler2DTypes = + | "sampler2D" + | "usampler2D" + | "isampler2D" + | "sampler2DShadow"; +export type Sampler2DArrayTypes = + | "sampler2DArray" + | "usampler2DArray" + | "isampler2DArray" + | "sampler2DArrayShadow"; +export type Sampler3DTypes = "sampler3D" | "usampler3D" | "isampler3D"; +export type SamplerCubeTypes = + | "samplerCube" + | "usamplerCube" + | "isamplerCube" + | "samplerCubeShadow"; + +export function isBoolType(type: DynoType): boolean { + return ( + type === "bool" || type === "bvec2" || type === "bvec3" || type === "bvec4" + ); +} + +export function isScalarType(type: DynoType): boolean { + return type === "int" || type === "uint" || type === "float"; +} + +export function isIntType(type: DynoType): boolean { + return ( + type === "int" || type === "ivec2" || type === "ivec3" || type === "ivec4" + ); +} + +export function isUintType(type: DynoType): boolean { + return ( + type === "uint" || type === "uvec2" || type === "uvec3" || type === "uvec4" + ); +} + +export function isFloatType(type: DynoType): boolean { + return ( + type === "float" || type === "vec2" || type === "vec3" || type === "vec4" + ); +} + +export function isMatFloatType(type: DynoType): boolean { + return ( + type === "mat2" || + type === "mat2x2" || + type === "mat2x3" || + type === "mat2x4" || + type === "mat3" || + type === "mat3x2" || + type === "mat3x3" || + type === "mat3x4" || + type === "mat4" || + type === "mat4x2" || + type === "mat4x3" || + type === "mat4x4" + ); +} + +export function isAllFloatType(type: DynoType): boolean { + return isFloatType(type) || isMatFloatType(type); +} + +export function isVector2Type(type: DynoType): boolean { + return type === "vec2" || type === "ivec2" || type === "uvec2"; +} + +export function isVector3Type(type: DynoType): boolean { + return type === "vec3" || type === "ivec3" || type === "uvec3"; +} + +export function isVector4Type(type: DynoType): boolean { + return type === "vec4" || type === "ivec4" || type === "uvec4"; +} + +export function isVectorType(type: DynoType): boolean { + return isVector2Type(type) || isVector3Type(type) || isVector4Type(type); +} + +export function isMat2(type: DynoType): boolean { + return type === "mat2" || type === "mat2x2"; +} +export function isMat3(type: DynoType): boolean { + return type === "mat3" || type === "mat3x3"; +} +export function isMat4(type: DynoType): boolean { + return type === "mat4" || type === "mat4x4"; +} + +export function vectorElementType( + type: A, +): VectorElementType { + switch (type) { + case "vec2": + return "float" as VectorElementType; + case "vec3": + return "float" as VectorElementType; + case "vec4": + return "float" as VectorElementType; + case "ivec2": + return "int" as VectorElementType; + case "ivec3": + return "int" as VectorElementType; + case "ivec4": + return "int" as VectorElementType; + case "uvec2": + return "uint" as VectorElementType; + case "uvec3": + return "uint" as VectorElementType; + case "uvec4": + return "uint" as VectorElementType; + default: + throw new Error(`Invalid vector type: ${type}`); + } +} + +export function vectorDim(type: A): number { + switch (type) { + case "vec2": + case "ivec2": + case "uvec2": + return 2; + case "vec3": + case "ivec3": + case "uvec3": + return 3; + case "vec4": + case "ivec4": + case "uvec4": + return 4; + default: + throw new Error(`Invalid vector type: ${type}`); + } +} + +export function sameSizeVec(type: T): SameSizeVec { + if (isScalarType(type)) { + return "float" as SameSizeVec; + } + if (isVector2Type(type)) { + return "vec2" as SameSizeVec; + } + if (isVector3Type(type)) { + return "vec3" as SameSizeVec; + } + if (isVector4Type(type)) { + return "vec4" as SameSizeVec; + } + throw new Error(`Invalid vector type: ${type}`); +} + +export function sameSizeUvec(type: T): SameSizeUvec { + if (isScalarType(type)) { + return "uint" as SameSizeUvec; + } + if (isVector2Type(type)) { + return "uvec2" as SameSizeUvec; + } + if (isVector3Type(type)) { + return "uvec3" as SameSizeUvec; + } + if (isVector4Type(type)) { + return "uvec4" as SameSizeUvec; + } + throw new Error(`Invalid vector type: ${type}`); +} + +export function sameSizeIvec(type: T): SameSizeIvec { + if (isScalarType(type)) { + return "int" as SameSizeIvec; + } + if (isVector2Type(type)) { + return "ivec2" as SameSizeIvec; + } + if (isVector3Type(type)) { + return "ivec3" as SameSizeIvec; + } + if (isVector4Type(type)) { + return "ivec4" as SameSizeIvec; + } + throw new Error(`Invalid vector type: ${type}`); +} + +export type BaseType = SimpleTypes | AllSamplerTypes; +export type UserType = { type: string }; +export type DynoType = BaseType | UserType; + +export type DynoJsType = T extends "bool" + ? boolean + : T extends "uint" + ? number + : T extends "int" + ? number + : T extends "float" + ? number + : T extends "bvec2" + ? [boolean, boolean] + : T extends "uvec2" + ? THREE.Vector2 | [number, number] | Uint32Array + : T extends "ivec2" + ? THREE.Vector2 | [number, number] | Int32Array + : T extends "vec2" + ? THREE.Vector2 | [number, number] | Float32Array + : T extends "bvec3" + ? [boolean, boolean, boolean] + : T extends "uvec3" + ? THREE.Vector3 | [number, number, number] | Uint32Array + : T extends "ivec3" + ? THREE.Vector3 | [number, number, number] | Int32Array + : T extends "vec3" + ? + | THREE.Vector3 + | THREE.Color + | [number, number, number] + | Float32Array + : T extends "bvec4" + ? [boolean, boolean, boolean, boolean] + : T extends "uvec4" + ? + | THREE.Vector4 + | [number, number, number, number] + | Uint32Array + : T extends "ivec4" + ? + | THREE.Vector4 + | [number, number, number, number] + | Int32Array + : T extends "vec4" + ? + | THREE.Vector4 + | THREE.Quaternion + | [number, number, number, number] + | Float32Array + : T extends "mat2" + ? THREE.Matrix2 | Float32Array + : T extends "mat2x2" + ? THREE.Matrix2 | Float32Array + : T extends "mat2x3" + ? Float32Array + : T extends "mat2x4" + ? Float32Array + : T extends "mat3" + ? THREE.Matrix3 | Float32Array + : T extends "mat3x2" + ? Float32Array + : T extends "mat3x3" + ? THREE.Matrix3 | Float32Array + : T extends "mat3x4" + ? Float32Array + : T extends "mat4" + ? THREE.Matrix4 | Float32Array + : T extends "mat4x2" + ? Float32Array + : T extends "mat4x3" + ? Float32Array + : T extends "mat4x4" + ? + | THREE.Matrix4 + | Float32Array + : T extends "usampler2D" + ? THREE.Texture + : T extends "isampler2D" + ? THREE.Texture + : T extends "sampler2D" + ? THREE.Texture + : T extends "sampler2DShadow" + ? THREE.Texture + : T extends "usampler2DArray" + ? THREE.DataArrayTexture + : T extends "isampler2DArray" + ? THREE.DataArrayTexture + : T extends "sampler2DArray" + ? THREE.DataArrayTexture + : T extends "sampler2DArrayShadow" + ? THREE.Texture + : T extends "usampler3D" + ? THREE.DataArrayTexture + : T extends "isampler3D" + ? THREE.DataArrayTexture + : T extends "sampler3D" + ? THREE.DataArrayTexture + : T extends "usamplerCube" + ? THREE.DataArrayTexture + : T extends "isamplerCube" + ? THREE.DataArrayTexture + : T extends "samplerCube" + ? THREE.DataArrayTexture + : T extends "samplerCubeShadow" + ? THREE.Texture + : unknown; + +export function typeLiteral(type: DynoType): string { + if (typeof type === "string") { + return type; + } + if (typeof type === "object" && type.type) { + return type.type; + } + throw new Error(`Invalid DynoType: ${String(type)}`); +} + +export function numberAsInt(value: number): string { + return Math.trunc(value).toString(); +} + +export function numberAsUint(value: number): string { + const v = Math.max(0, Math.trunc(value)); + return `${v.toString()}u`; +} + +export function numberAsFloat(value: number): string { + return value === Number.POSITIVE_INFINITY + ? "INFINITY" + : value === Number.NEGATIVE_INFINITY + ? "-INFINITY" + : Number.isInteger(value) + ? value.toFixed(1) + : value.toString(); +} diff --git a/src/dyno/uniforms.ts b/src/dyno/uniforms.ts new file mode 100644 index 0000000..136591f --- /dev/null +++ b/src/dyno/uniforms.ts @@ -0,0 +1,826 @@ +import type { IUniform } from "three"; +import { Dyno, dynoDeclare } from "./base"; +import type { DynoJsType, DynoType } from "./types"; +import { DynoOutput, type DynoValue, type HasDynoOut } from "./value"; + +export const uniform = >( + key: string, + type: DynoType, + value: V, +) => new DynoUniform({ key, type, value }); +export const dynoBool = (value = false, key?: string) => + new DynoBool({ key, value }); +export const dynoUint = (value = 0, key?: string) => + new DynoUint({ key, value }); +export const dynoInt = (value = 0, key?: string) => new DynoInt({ key, value }); +export const dynoFloat = (value = 0.0, key?: string) => + new DynoFloat({ key, value }); + +export const dynoBvec2 = >( + value: V, + key?: string, +) => new DynoBvec2({ key, value }); +export const dynoUvec2 = >( + value: V, + key?: string, +) => new DynoUvec2({ key, value }); +export const dynoIvec2 = >( + value: V, + key?: string, +) => new DynoIvec2({ key, value }); +export const dynoVec2 = >( + value: V, + key?: string, +) => new DynoVec2({ key, value }); + +export const dynoBvec3 = >( + value: V, + key?: string, +) => new DynoBvec3({ key, value }); +export const dynoUvec3 = >( + value: V, + key?: string, +) => new DynoUvec3({ key, value }); +export const dynoIvec3 = >( + value: V, + key?: string, +) => new DynoIvec3({ key, value }); +export const dynoVec3 = >( + value: V, + key?: string, +) => new DynoVec3({ key, value }); + +export const dynoBvec4 = >( + value: V, + key?: string, +) => new DynoBvec4({ key, value }); +export const dynoUvec4 = >( + value: V, + key?: string, +) => new DynoUvec4({ key, value }); +export const dynoIvec4 = >( + value: V, + key?: string, +) => new DynoIvec4({ key, value }); +export const dynoVec4 = >( + value: V, + key?: string, +) => new DynoVec4({ key, value }); + +export const dynoMat2 = >( + value: V, + key?: string, +) => new DynoMat2({ key, value }); +export const dynoMat2x2 = >( + value: V, + key?: string, +) => new DynoMat2x2({ key, value }); +export const dynoMat2x3 = >( + value: V, + key?: string, +) => new DynoMat2x3({ key, value }); +export const dynoMat2x4 = >( + value: V, + key?: string, +) => new DynoMat2x4({ key, value }); + +export const dynoMat3 = >( + value: V, + key?: string, +) => new DynoMat3({ key, value }); +export const dynoMat3x2 = >( + value: V, + key?: string, +) => new DynoMat3x2({ key, value }); +export const dynoMat3x3 = >( + value: V, + key?: string, +) => new DynoMat3x3({ key, value }); +export const dynoMat3x4 = >( + value: V, + key?: string, +) => new DynoMat3x4({ key, value }); + +export const dynoMat4 = >( + value: V, + key?: string, +) => new DynoMat4({ key, value }); +export const dynoMat4x2 = >( + value: V, + key?: string, +) => new DynoMat4x2({ key, value }); +export const dynoMat4x3 = >( + value: V, + key?: string, +) => new DynoMat4x3({ key, value }); +export const dynoMat4x4 = >( + value: V, + key?: string, +) => new DynoMat4x4({ key, value }); + +export const dynoUsampler2D = >( + value: V, + key?: string, +) => new DynoUsampler2D({ key, value }); +export const dynoIsampler2D = >( + value: V, + key?: string, +) => new DynoIsampler2D({ key, value }); +export const dynoSampler2D = >( + value: V, + key?: string, +) => new DynoSampler2D({ key, value }); + +export const dynoUsampler2DArray = >( + value: V, + key?: string, +) => new DynoUsampler2DArray({ key, value }); +export const dynoIsampler2DArray = >( + key: string, + value: V, +) => new DynoIsampler2DArray({ key, value }); +export const dynoSampler2DArray = >( + value: V, + key?: string, +) => new DynoSampler2DArray({ key, value }); + +export const dynoUsampler3D = >( + value: V, + key?: string, +) => new DynoUsampler3D({ key, value }); +export const dynoIsampler3D = >( + value: V, + key?: string, +) => new DynoIsampler3D({ key, value }); +export const dynoSampler3D = >( + value: V, + key?: string, +) => new DynoSampler3D({ key, value }); + +export const dynoUsamplerCube = >( + value: V, + key?: string, +) => new DynoUsamplerCube({ key, value }); +export const dynoIsamplerCube = >( + value: V, + key?: string, +) => new DynoIsamplerCube({ key, value }); +export const dynoSamplerCube = >( + value: V, + key?: string, +) => new DynoSamplerCube({ key, value }); + +export const dynoSampler2DShadow = >( + value: V, + key?: string, +) => new DynoSampler2DShadow({ key, value }); +export const dynoSampler2DArrayShadow = < + V extends DynoJsType<"sampler2DArrayShadow">, +>( + value: V, + key?: string, +) => new DynoSampler2DArrayShadow({ key, value }); +export const dynoSamplerCubeShadow = < + V extends DynoJsType<"samplerCubeShadow">, +>( + value: V, + key?: string, +) => new DynoSamplerCubeShadow({ key, value }); + +export class DynoUniform< + T extends DynoType, + K extends string = "value", + V extends DynoJsType = DynoJsType, + > + extends Dyno, { [key in K]: T }> + implements HasDynoOut +{ + public type: T; + public count?: number; + public outKey: K; + public value: V; + public uniform: { value: V; type?: string }; + + constructor({ + key, + type, + count, + value, + update, + globals, + }: { + key?: K; + type: T; + count?: number; + value: V; + update?: (value: V) => V | undefined; + globals?: ({ + inputs, + outputs, + }: { inputs: unknown; outputs: { [key in K]?: string } }) => string[]; + }) { + key = (key ?? "value") as K; + super({ + outTypes: { [key]: type } as { [key in K]: T }, + update: () => { + if (update) { + const value = update(this.value); + if (value !== undefined) { + this.value = value; + } + } + this.uniform.value = this.value; + }, + generate: ({ inputs, outputs }) => { + const allGlobals = globals?.({ inputs, outputs }) ?? []; + const uniforms: Record = {}; + const name = outputs[key]; + if (name) { + allGlobals.push(`uniform ${dynoDeclare(name, type, count)};`); + uniforms[name] = this.uniform; + } + return { globals: allGlobals, uniforms }; + }, + }); + this.type = type; + this.count = count; + this.value = value; + this.uniform = { value }; + this.outKey = key; + } + + dynoOut(): DynoValue { + return new DynoOutput(this, this.outKey); + } +} + +export class DynoBool extends DynoUniform< + "bool", + K, + boolean +> { + constructor({ + key, + value, + update, + }: { + key?: K; + value: boolean; + update?: (value: boolean) => boolean | undefined; + }) { + super({ key, type: "bool", value, update }); + } +} + +export class DynoUint extends DynoUniform<"uint", K, number> { + constructor({ + key, + value, + update, + }: { + key?: K; + value: number; + update?: (value: number) => number | undefined; + }) { + super({ key, type: "uint", value, update }); + } +} + +export class DynoInt extends DynoUniform<"int", K, number> { + constructor({ + key, + value, + update, + }: { + key?: K; + value: number; + update?: (value: number) => number | undefined; + }) { + super({ key, type: "int", value, update }); + } +} + +export class DynoFloat extends DynoUniform< + "float", + K, + number +> { + constructor({ + key, + value, + update, + }: { + key?: K; + value: number; + update?: (value: number) => number | undefined; + }) { + super({ key, type: "float", value, update }); + } +} + +export class DynoBvec2< + K extends string, + V extends DynoJsType<"bvec2">, +> extends DynoUniform<"bvec2", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "bvec2", value, update }); + } +} + +export class DynoUvec2< + K extends string, + V extends DynoJsType<"uvec2">, +> extends DynoUniform<"uvec2", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "uvec2", value, update }); + } +} + +export class DynoIvec2< + K extends string, + V extends DynoJsType<"ivec2">, +> extends DynoUniform<"ivec2", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "ivec2", value, update }); + } +} + +export class DynoVec2< + K extends string, + V extends DynoJsType<"vec2">, +> extends DynoUniform<"vec2", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "vec2", value, update }); + } +} + +export class DynoBvec3< + K extends string, + V extends DynoJsType<"bvec3">, +> extends DynoUniform<"bvec3", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "bvec3", value, update }); + } +} + +export class DynoUvec3< + V extends DynoJsType<"uvec3">, + K extends string = "value", +> extends DynoUniform<"uvec3", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "uvec3", value, update }); + } +} + +export class DynoIvec3< + V extends DynoJsType<"ivec3">, + K extends string = "value", +> extends DynoUniform<"ivec3", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "ivec3", value, update }); + } +} + +export class DynoVec3< + V extends DynoJsType<"vec3">, + K extends string = "value", +> extends DynoUniform<"vec3", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "vec3", value, update }); + } +} + +export class DynoBvec4< + K extends string, + V extends DynoJsType<"bvec4">, +> extends DynoUniform<"bvec4", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "bvec4", value, update }); + } +} + +export class DynoUvec4< + K extends string, + V extends DynoJsType<"uvec4">, +> extends DynoUniform<"uvec4", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "uvec4", value, update }); + } +} + +export class DynoIvec4< + K extends string, + V extends DynoJsType<"ivec4">, +> extends DynoUniform<"ivec4", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "ivec4", value, update }); + } +} + +export class DynoVec4< + V extends DynoJsType<"vec4">, + K extends string = "value", +> extends DynoUniform<"vec4", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "vec4", value, update }); + } +} + +export class DynoMat2< + K extends string, + V extends DynoJsType<"mat2">, +> extends DynoUniform<"mat2", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "mat2", value, update }); + } +} + +export class DynoMat2x2< + K extends string, + V extends DynoJsType<"mat2x2">, +> extends DynoUniform<"mat2x2", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "mat2x2", value, update }); + } +} + +export class DynoMat2x3< + K extends string, + V extends DynoJsType<"mat2x3">, +> extends DynoUniform<"mat2x3", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "mat2x3", value, update }); + } +} + +export class DynoMat2x4< + K extends string, + V extends DynoJsType<"mat2x4">, +> extends DynoUniform<"mat2x4", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "mat2x4", value, update }); + } +} + +export class DynoMat3< + K extends string, + V extends DynoJsType<"mat3">, +> extends DynoUniform<"mat3", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "mat3", value, update }); + } +} + +export class DynoMat3x2< + K extends string, + V extends DynoJsType<"mat3x2">, +> extends DynoUniform<"mat3x2", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "mat3x2", value, update }); + } +} + +export class DynoMat3x3< + K extends string, + V extends DynoJsType<"mat3x3">, +> extends DynoUniform<"mat3x3", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "mat3x3", value, update }); + } +} + +export class DynoMat3x4< + K extends string, + V extends DynoJsType<"mat3x4">, +> extends DynoUniform<"mat3x4", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "mat3x4", value, update }); + } +} + +export class DynoMat4< + K extends string, + V extends DynoJsType<"mat4">, +> extends DynoUniform<"mat4", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "mat4", value, update }); + } +} + +export class DynoMat4x2< + K extends string, + V extends DynoJsType<"mat4x2">, +> extends DynoUniform<"mat4x2", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "mat4x2", value, update }); + } +} + +export class DynoMat4x3< + K extends string, + V extends DynoJsType<"mat4x3">, +> extends DynoUniform<"mat4x3", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "mat4x3", value, update }); + } +} + +export class DynoMat4x4< + K extends string, + V extends DynoJsType<"mat4x4">, +> extends DynoUniform<"mat4x4", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "mat4x4", value, update }); + } +} + +export class DynoUsampler2D< + K extends string, + V extends DynoJsType<"usampler2D">, +> extends DynoUniform<"usampler2D", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "usampler2D", value, update }); + } +} + +export class DynoIsampler2D< + K extends string, + V extends DynoJsType<"isampler2D">, +> extends DynoUniform<"isampler2D", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "isampler2D", value, update }); + } +} + +export class DynoSampler2D< + K extends string, + V extends DynoJsType<"sampler2D">, +> extends DynoUniform<"sampler2D", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "sampler2D", value, update }); + } +} + +export class DynoUsampler2DArray< + K extends string, + V extends DynoJsType<"usampler2DArray">, +> extends DynoUniform<"usampler2DArray", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "usampler2DArray", value, update }); + } +} + +export class DynoIsampler2DArray< + K extends string, + V extends DynoJsType<"isampler2DArray">, +> extends DynoUniform<"isampler2DArray", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "isampler2DArray", value, update }); + } +} + +export class DynoSampler2DArray< + K extends string, + V extends DynoJsType<"sampler2DArray">, +> extends DynoUniform<"sampler2DArray", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "sampler2DArray", value, update }); + } +} + +export class DynoUsampler3D< + K extends string, + V extends DynoJsType<"usampler3D">, +> extends DynoUniform<"usampler3D", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "usampler3D", value, update }); + } +} + +export class DynoIsampler3D< + K extends string, + V extends DynoJsType<"isampler3D">, +> extends DynoUniform<"isampler3D", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "isampler3D", value, update }); + } +} + +export class DynoSampler3D< + K extends string, + V extends DynoJsType<"sampler3D">, +> extends DynoUniform<"sampler3D", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "sampler3D", value, update }); + } +} + +export class DynoUsamplerCube< + K extends string, + V extends DynoJsType<"usamplerCube">, +> extends DynoUniform<"usamplerCube", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "usamplerCube", value, update }); + } +} + +export class DynoIsamplerCube< + K extends string, + V extends DynoJsType<"isamplerCube">, +> extends DynoUniform<"isamplerCube", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "isamplerCube", value, update }); + } +} + +export class DynoSamplerCube< + K extends string, + V extends DynoJsType<"samplerCube">, +> extends DynoUniform<"samplerCube", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "samplerCube", value, update }); + } +} + +export class DynoSampler2DShadow< + K extends string, + V extends DynoJsType<"sampler2DShadow">, +> extends DynoUniform<"sampler2DShadow", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "sampler2DShadow", value, update }); + } +} + +export class DynoSampler2DArrayShadow< + K extends string, + V extends DynoJsType<"sampler2DArrayShadow">, +> extends DynoUniform<"sampler2DArrayShadow", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "sampler2DArrayShadow", value, update }); + } +} + +export class DynoSamplerCubeShadow< + K extends string, + V extends DynoJsType<"samplerCubeShadow">, +> extends DynoUniform<"samplerCubeShadow", K, V> { + constructor({ + key, + value, + update, + }: { key?: K; value: V; update?: (value: V) => V | undefined }) { + super({ key, type: "samplerCubeShadow", value, update }); + } +} diff --git a/src/dyno/util.ts b/src/dyno/util.ts new file mode 100644 index 0000000..ec1a15c --- /dev/null +++ b/src/dyno/util.ts @@ -0,0 +1,419 @@ +import { Dyno, DynoBlock, unindent } from "./base"; +import { float, vec2, vec3, vec4 } from "./convert"; +import { mul } from "./math"; +import { + ScalarTypes, + type ValueTypes, + Vector2Types, + Vector3Types, + Vector4Types, + isIntType, + isScalarType, + isUintType, + isVector2Type, + isVector3Type, + isVector4Type, + sameSizeUvec, +} from "./types"; +import { + DynoOutput, + type DynoVal, + type DynoValue, + type HasDynoOut, + dynoConst, + valType, +} from "./value"; +import { combine } from "./vecmat"; + +export const remapIndex = ( + index: DynoVal<"int">, + from: DynoVal<"int">, + to: DynoVal<"int">, +): DynoVal<"int"> => { + return new DynoRemapIndex({ index, from, to }); +}; +export const pcgMix = ( + value: DynoVal, +): DynoVal<"uint"> => { + return new PcgMix({ value }); +}; +export const pcgNext = (state: DynoVal<"uint">): DynoVal<"uint"> => { + return new PcgNext({ state }); +}; +export const pcgHash = (state: DynoVal<"uint">): DynoVal<"uint"> => { + return new PcgHash({ state }); +}; +export const hash = ( + value: DynoVal, +): DynoVal<"uint"> => { + return new Hash({ value }); +}; +export const hash2 = ( + value: DynoVal, +): DynoVal<"uvec2"> => { + return new Hash2({ value }); +}; +export const hash3 = ( + value: DynoVal, +): DynoVal<"uvec3"> => { + return new Hash3({ value }); +}; +export const hash4 = ( + value: DynoVal, +): DynoVal<"uvec4"> => { + return new Hash4({ value }); +}; +export const hashFloat = ( + value: DynoVal, +): DynoVal<"float"> => { + return new HashFloat({ value }); +}; +export const hashVec2 = ( + value: DynoVal, +): DynoVal<"vec2"> => { + return new HashVec2({ value }); +}; +export const hashVec3 = ( + value: DynoVal, +): DynoVal<"vec3"> => { + return new HashVec3({ value }); +}; +export const hashVec4 = ( + value: DynoVal, +): DynoVal<"vec4"> => { + return new HashVec4({ value }); +}; + +export class DynoRemapIndex + extends Dyno<{ from: "int"; to: "int"; index: "int" }, { index: "int" }> + implements HasDynoOut<"int"> +{ + constructor({ + from, + to, + index, + }: { from: DynoVal<"int">; to: DynoVal<"int">; index: DynoVal<"int"> }) { + super({ + inTypes: { from: "int", to: "int", index: "int" }, + outTypes: { index: "int" }, + inputs: { from, to, index }, + statements: ({ inputs, outputs }) => { + return [ + `${outputs.index} = ${inputs.index} - ${inputs.from} + ${inputs.to};`, + ]; + }, + }); + } + + dynoOut(): DynoValue<"int"> { + return new DynoOutput(this, "index"); + } +} + +export class PcgNext + extends Dyno<{ state: T }, { state: "uint" }> + implements HasDynoOut<"uint"> +{ + constructor({ state }: { state: DynoVal }) { + const type = valType(state); + super({ + inTypes: { state: type }, + outTypes: { state: "uint" }, + inputs: { state }, + globals: () => [ + unindent(` + uint pcg_next(uint state) { + return state * 747796405u + 2891336453u; + } + `), + ], + statements: ({ inputs, outputs }) => { + const toUint = + type === "uint" + ? `${inputs.state}` + : type === "int" + ? `uint(${inputs.state})` + : `floatBitsToUint(${inputs.state})`; + return [`${outputs.state} = pcg_next(${toUint});`]; + }, + }); + } + dynoOut(): DynoValue<"uint"> { + return new DynoOutput(this, "state"); + } +} + +export class PcgHash + extends Dyno<{ state: "uint" }, { hash: "uint" }> + implements HasDynoOut<"uint"> +{ + constructor({ state }: { state: DynoVal<"uint"> }) { + super({ + inTypes: { state: "uint" }, + outTypes: { hash: "uint" }, + inputs: { state }, + globals: () => [ + unindent(` + uint pcg_hash(uint state) { + uint hash = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; + return (hash >> 22u) ^ hash; + } + `), + ], + statements: ({ inputs, outputs }) => [ + `${outputs.hash} = pcg_hash(${inputs.state});`, + ], + }); + } + dynoOut(): DynoValue<"uint"> { + return new DynoOutput(this, "hash"); + } +} + +export class PcgMix + extends Dyno<{ value: T }, { state: "uint" }> + implements HasDynoOut<"uint"> +{ + constructor({ value }: { value: DynoVal }) { + const type = valType(value); + const tempType = sameSizeUvec(type); + super({ + inTypes: { value: type }, + outTypes: { state: "uint" }, + inputs: { value }, + globals: () => [ + unindent(` + uint pcg_mix(uint value) { + return value; + } + uint pcg_mix(uvec2 value) { + return value.x + 0x9e3779b9u * value.y; + } + uint pcg_mix(uvec3 value) { + return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z; + } + uint pcg_mix(uvec4 value) { + return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z + 0xc2b2ae35u * value.w; + } + `), + ], + statements: ({ inputs, outputs }) => { + const toUvec = isUintType(type) + ? `${inputs.value}` + : isIntType(type) + ? `${tempType}(${inputs.value})` + : `floatBitsToUint(${inputs.value})`; + return [ + `${tempType} bits = ${toUvec};`, + `${outputs.state} = pcg_mix(bits);`, + ]; + }, + }); + } + dynoOut(): DynoValue<"uint"> { + return new DynoOutput(this, "state"); + } +} + +export class Hash + extends DynoBlock<{ value: T }, { hash: "uint" }> + implements HasDynoOut<"uint"> +{ + constructor({ value }: { value: DynoVal }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "uint" }, + inputs: { value }, + construct: ({ value }) => { + if (!value) { + throw new Error("value is required"); + } + let state = new PcgMix({ value: value }).outputs.state; + state = new PcgNext({ state }).outputs.state; + return new PcgHash({ state }).outputs; + }, + }); + } + dynoOut(): DynoValue<"uint"> { + return new DynoOutput(this, "hash"); + } +} + +export class Hash2 + extends DynoBlock<{ value: T }, { hash: "uvec2" }> + implements HasDynoOut<"uvec2"> +{ + constructor({ value }: { value: DynoVal }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "uvec2" }, + inputs: { value }, + construct: ({ value }) => { + if (!value) { + throw new Error("value is required"); + } + let state = new PcgMix({ value: value }).outputs.state; + state = new PcgNext({ state }).outputs.state; + const x = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const y = new PcgHash({ state }).outputs.hash; + return { hash: combine({ vectorType: "uvec2", x, y }) }; + }, + }); + } + dynoOut(): DynoValue<"uvec2"> { + return new DynoOutput(this, "hash"); + } +} + +export class Hash3 + extends DynoBlock<{ value: T }, { hash: "uvec3" }> + implements HasDynoOut<"uvec3"> +{ + constructor({ value }: { value: DynoVal }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "uvec3" }, + inputs: { value }, + construct: ({ value }) => { + if (!value) { + throw new Error("value is required"); + } + let state = new PcgMix({ value: value }).outputs.state; + state = new PcgNext({ state }).outputs.state; + const x = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const y = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const z = new PcgHash({ state }).outputs.hash; + return { hash: combine({ vectorType: "uvec3", x, y, z }) }; + }, + }); + } + dynoOut(): DynoValue<"uvec3"> { + return new DynoOutput(this, "hash"); + } +} + +export class Hash4 + extends DynoBlock<{ value: T }, { hash: "uvec4" }> + implements HasDynoOut<"uvec4"> +{ + constructor({ value }: { value: DynoVal }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "uvec4" }, + inputs: { value }, + construct: ({ value }) => { + if (!value) { + throw new Error("value is required"); + } + let state = new PcgMix({ value: value }).outputs.state; + state = new PcgNext({ state }).outputs.state; + const x = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const y = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const z = new PcgHash({ state }).outputs.hash; + state = new PcgNext({ state }).outputs.state; + const w = new PcgHash({ state }).outputs.hash; + return { hash: combine({ vectorType: "uvec4", x, y, z, w }) }; + }, + }); + } + dynoOut(): DynoValue<"uvec4"> { + return new DynoOutput(this, "hash"); + } +} + +export class HashFloat + extends DynoBlock<{ value: T }, { hash: "float" }> + implements HasDynoOut<"float"> +{ + constructor({ value }: { value: DynoVal }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "float" }, + inputs: { value }, + construct: ({ value }) => { + if (!value) { + throw new Error("value is required"); + } + const word = hash(value); + return { hash: mul(float(word), dynoConst("float", 1 / 2 ** 32)) }; + }, + }); + } + dynoOut(): DynoValue<"float"> { + return new DynoOutput(this, "hash"); + } +} + +export class HashVec2 + extends DynoBlock<{ value: T }, { hash: "vec2" }> + implements HasDynoOut<"vec2"> +{ + constructor({ value }: { value: DynoVal }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "vec2" }, + inputs: { value }, + construct: ({ value }) => { + if (!value) { + throw new Error("value is required"); + } + const words = hash2(value); + return { hash: mul(vec2(words), dynoConst("float", 1 / 2 ** 32)) }; + }, + }); + } + dynoOut(): DynoValue<"vec2"> { + return new DynoOutput(this, "hash"); + } +} + +export class HashVec3 + extends DynoBlock<{ value: T }, { hash: "vec3" }> + implements HasDynoOut<"vec3"> +{ + constructor({ value }: { value: DynoVal }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "vec3" }, + inputs: { value }, + construct: ({ value }) => { + if (!value) { + throw new Error("value is required"); + } + const words = hash3(value); + return { hash: mul(vec3(words), dynoConst("float", 1 / 2 ** 32)) }; + }, + }); + } + dynoOut(): DynoValue<"vec3"> { + return new DynoOutput(this, "hash"); + } +} + +export class HashVec4 + extends DynoBlock<{ value: T }, { hash: "vec4" }> + implements HasDynoOut<"vec4"> +{ + constructor({ value }: { value: DynoVal }) { + super({ + inTypes: { value: valType(value) }, + outTypes: { hash: "vec4" }, + inputs: { value }, + construct: ({ value }) => { + if (!value) { + throw new Error("value is required"); + } + const words = hash4(value); + return { hash: mul(vec4(words), dynoConst("float", 1 / 2 ** 32)) }; + }, + }); + } + dynoOut(): DynoValue<"vec4"> { + return new DynoOutput(this, "hash"); + } +} diff --git a/src/dyno/value.ts b/src/dyno/value.ts new file mode 100644 index 0000000..88227bb --- /dev/null +++ b/src/dyno/value.ts @@ -0,0 +1,289 @@ +import * as THREE from "three"; + +import type { Dyno, IOTypes } from "./base"; +import { + type DynoJsType, + type DynoType, + type SimpleTypes, + isAllFloatType, + isBoolType, + isIntType, + isUintType, + numberAsFloat, + numberAsInt, + numberAsUint, +} from "./types"; + +export type DynoVal = DynoValue | HasDynoOut; + +export function valType(val: DynoVal): T { + if (val instanceof DynoValue) { + return val.type; + } + const value = val.dynoOut(); + return value.type; +} + +export interface HasDynoOut { + dynoOut(): DynoValue; +} + +export class DynoValue { + type: T; + // This field prevents TypeScript structural matching on objects with a "type" field + private __isDynoValue = true; + + constructor(type: T) { + this.type = type; + } +} + +export class DynoOutput< + T extends DynoType, + InTypes extends IOTypes, + OutTypes extends IOTypes, +> extends DynoValue { + dyno: Dyno; + key: string; + + constructor(dyno: Dyno, key: string) { + super(dyno.outTypes[key] as T); + this.dyno = dyno; + this.key = key; + } +} + +export class DynoLiteral extends DynoValue { + literal: string; + + constructor(type: T, literal: string) { + super(type); + this.literal = literal; + } + + getLiteral(): string { + return this.literal; + } +} + +export function dynoLiteral( + type: T, + literal: string, +): DynoLiteral { + return new DynoLiteral(type, literal); +} + +export class DynoConst extends DynoLiteral { + value: DynoJsType; + + constructor(type: T, value: DynoJsType) { + super(type, ""); + this.value = value; + } + + getLiteral(): string { + const { type, value } = this; + switch (type) { + case "bool": + return value ? "true" : "false"; + case "uint": + return numberAsUint(value as number); + case "int": + return numberAsInt(value as number); + case "float": + return numberAsFloat(value as number); + case "bvec2": { + const v = value as [boolean, boolean]; + return `bvec2(${v[0]}, ${v[1]})`; + } + case "uvec2": { + if (value instanceof THREE.Vector2) { + return `uvec2(${numberAsUint(value.x)}, ${numberAsUint(value.y)})`; + } + const v = value as [number, number] | Uint32Array; + return `uvec2(${numberAsUint(v[0])}, ${numberAsUint(v[1])})`; + } + case "ivec2": { + if (value instanceof THREE.Vector2) { + return `ivec2(${numberAsInt(value.x)}, ${numberAsInt(value.y)})`; + } + const v = value as [number, number] | Int32Array; + return `ivec2(${numberAsInt(v[0])}, ${numberAsInt(v[1])})`; + } + case "vec2": { + if (value instanceof THREE.Vector2) { + return `vec2(${numberAsFloat(value.x)}, ${numberAsFloat(value.y)})`; + } + const v = value as [number, number] | Float32Array; + return `vec2(${numberAsFloat(v[0])}, ${numberAsFloat(v[1])})`; + } + case "bvec3": { + const v = value as [boolean, boolean, boolean]; + return `bvec3(${v[0]}, ${v[1]}, ${v[2]})`; + } + case "uvec3": { + if (value instanceof THREE.Vector3) { + return `uvec3(${numberAsUint(value.x)}, ${numberAsUint(value.y)}, ${numberAsUint(value.z)})`; + } + const v = value as [number, number, number] | Uint32Array; + return `uvec3(${numberAsUint(v[0])}, ${numberAsUint(v[1])}, ${numberAsUint(v[2])})`; + } + case "ivec3": { + if (value instanceof THREE.Vector3) { + return `ivec3(${numberAsInt(value.x)}, ${numberAsInt(value.y)}, ${numberAsInt(value.z)})`; + } + const v = value as [number, number, number] | Int32Array; + return `ivec3(${numberAsInt(v[0])}, ${numberAsInt(v[1])}, ${numberAsInt(v[2])})`; + } + case "vec3": { + if (value instanceof THREE.Vector3) { + return `vec3(${numberAsFloat(value.x)}, ${numberAsFloat(value.y)}, ${numberAsFloat(value.z)})`; + } + const v = value as [number, number, number] | Float32Array; + return `vec3(${numberAsFloat(v[0])}, ${numberAsFloat(v[1])}, ${numberAsFloat(v[2])})`; + } + case "bvec4": { + const v = value as [boolean, boolean, boolean, boolean]; + return `bvec4(${v[0]}, ${v[1]}, ${v[2]}, ${v[3]})`; + } + case "uvec4": { + if (value instanceof THREE.Vector4) { + return `uvec4(${numberAsUint(value.x)}, ${numberAsUint(value.y)}, ${numberAsUint(value.z)}, ${numberAsUint(value.w)})`; + } + const v = value as [number, number, number, number] | Uint32Array; + return `uvec4(${numberAsUint(v[0])}, ${numberAsUint(v[1])}, ${numberAsUint(v[2])}, ${numberAsUint(v[3])})`; + } + case "ivec4": { + if (value instanceof THREE.Vector4) { + return `ivec4(${numberAsInt(value.x)}, ${numberAsInt(value.y)}, ${numberAsInt(value.z)}, ${numberAsInt(value.w)})`; + } + const v = value as [number, number, number, number] | Int32Array; + return `ivec4(${numberAsInt(v[0])}, ${numberAsInt(v[1])}, ${numberAsInt(v[2])}, ${numberAsInt(v[3])})`; + } + case "vec4": { + if (value instanceof THREE.Vector4) { + return `vec4(${numberAsFloat(value.x)}, ${numberAsFloat(value.y)}, ${numberAsFloat(value.z)}, ${numberAsFloat(value.w)})`; + } + if (value instanceof THREE.Quaternion) { + return `vec4(${numberAsFloat(value.x)}, ${numberAsFloat(value.y)}, ${numberAsFloat(value.z)}, ${numberAsFloat(value.w)})`; + } + const v = value as [number, number, number, number] | Float32Array; + return `vec4(${numberAsFloat(v[0])}, ${numberAsFloat(v[1])}, ${numberAsFloat(v[2])}, ${numberAsFloat(v[3])})`; + } + case "mat2": + case "mat2x2": { + const m = value as DynoJsType<"mat2">; + const e = + m instanceof THREE.Matrix2 ? m.elements : (value as Float32Array); + const arg = new Array(4).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type as string}(${arg.join(", ")})`; + } + case "mat2x3": { + const e = value as DynoJsType<"mat2x3">; + const arg = new Array(6).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type as string}(${arg.join(", ")})`; + } + case "mat2x4": { + const e = value as DynoJsType<"mat2x4">; + const arg = new Array(8).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type as string}(${arg.join(", ")})`; + } + case "mat3": + case "mat3x3": { + const m = value as DynoJsType<"mat3">; + const e = + m instanceof THREE.Matrix3 ? m.elements : (value as Float32Array); + const arg = new Array(9).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type as string}(${arg.join(", ")})`; + } + case "mat3x2": { + const e = value as DynoJsType<"mat3x2">; + const arg = new Array(6).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type as string}(${arg.join(", ")})`; + } + case "mat3x4": { + const e = value as DynoJsType<"mat3x4">; + const arg = new Array(12).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type as string}(${arg.join(", ")})`; + } + case "mat4": + case "mat4x4": { + const m = value as DynoJsType<"mat4">; + const e = + m instanceof THREE.Matrix4 ? m.elements : (value as Float32Array); + const arg = new Array(16).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type as string}(${arg.join(", ")})`; + } + case "mat4x2": { + const e = value as DynoJsType<"mat4x2">; + const arg = new Array(8).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type as string}(${arg.join(", ")})`; + } + case "mat4x3": { + const e = value as DynoJsType<"mat4x3">; + const arg = new Array(12).fill(0).map((_, i) => numberAsFloat(e[i])); + return `${type as string}(${arg.join(", ")})`; + } + default: + throw new Error(`Type not implemented: ${String(type)}`); + } + } +} + +export function dynoConst( + type: T, + value: DynoJsType, +): DynoConst { + return new DynoConst(type, value); +} + +export function literalZero(type: SimpleTypes): string { + const typeString = String(type); + if (isBoolType(type)) { + return `${typeString}(false)`; + } + if (isAllFloatType(type)) { + return `${typeString}(0.0)`; + } + if (isIntType(type)) { + return `${typeString}(0)`; + } + if (isUintType(type)) { + return `${typeString}(0u)`; + } + throw new Error(`Type not implemented: ${typeString}`); +} + +export function literalOne(type: SimpleTypes): string { + const typeString = String(type); + if (isBoolType(type)) { + return `${typeString}(true)`; + } + if (isAllFloatType(type)) { + return `${typeString}(1.0)`; + } + if (isIntType(type)) { + return `${typeString}(1)`; + } + if (isUintType(type)) { + return `${typeString}(1u)`; + } + throw new Error(`Type not implemented: ${typeString}`); +} + +export function literalNegOne(type: SimpleTypes): string { + const typeString = String(type); + if (isBoolType(type)) { + return `${typeString}(true)`; + } + if (isAllFloatType(type)) { + return `${typeString}(-1.0)`; + } + if (isIntType(type)) { + return `${typeString}(-1)`; + } + if (isUintType(type)) { + return `${typeString}(0xFFFFFFFFu)`; + } + throw new Error(`Type not implemented: ${typeString}`); +} diff --git a/src/dyno/vecmat.ts b/src/dyno/vecmat.ts new file mode 100644 index 0000000..56e831f --- /dev/null +++ b/src/dyno/vecmat.ts @@ -0,0 +1,835 @@ +import { BinaryOp, Dyno, TrinaryOp, UnaryOp } from "./base"; +import { + type FloatTypes, + type IntTypes, + type MatFloatTypes, + type SquareMatTypes, + type UintTypes, + type VectorElementType, + type VectorTypes, + isFloatType, + isIntType, + isUintType, + vectorDim, + vectorElementType, +} from "./types"; +import { + DynoOutput, + type DynoVal, + type DynoValue, + type HasDynoOut, + literalZero, + valType, +} from "./value"; + +export const length = ( + a: DynoVal, +): DynoVal<"float"> => new Length({ a }); +export const distance = ( + a: DynoVal, + b: DynoVal, +): DynoVal<"float"> => new Distance({ a, b }); +export const dot = ( + a: DynoVal, + b: DynoVal, +): DynoVal<"float"> => new Dot({ a, b }); +export const cross = ( + a: DynoVal<"vec3">, + b: DynoVal<"vec3">, +): DynoVal<"vec3"> => new Cross({ a, b }); +export const normalize = ( + a: DynoVal, +): DynoVal => new Normalize({ a }); +export const faceforward = ( + a: DynoVal, + b: DynoVal, + c: DynoVal, +): DynoVal => new FaceForward({ a, b, c }); +export const reflectVec = ( + incident: DynoVal, + normal: DynoVal, +): DynoVal => new ReflectVec({ incident, normal }); +export const refractVec = ( + incident: DynoVal, + normal: DynoVal, + eta: DynoVal<"float">, +): DynoVal => new RefractVec({ incident, normal, eta }); +export const split = (vector: DynoVal): Split => + new Split({ vector }); +export const combine = >({ + vector, + vectorType, + x, + y, + z, + w, + r, + g, + b, + a, +}: { + vector?: DynoVal; + vectorType?: V; + x?: DynoVal; + y?: DynoVal; + z?: DynoVal; + w?: DynoVal; + r?: DynoVal; + g?: DynoVal; + b?: DynoVal; + a?: DynoVal; +}): DynoVal => new Combine({ vector, vectorType, x, y, z, w, r, g, b, a }); +export const projectH = ( + a: DynoVal, +): DynoVal> => new ProjectH({ a }); +export const extendVec = ( + a: DynoVal, + b: DynoVal<"float">, +): DynoVal> => new ExtendVec({ a, b }); +export const swizzle = ( + a: DynoVal, + select: S, +): DynoVal>> => + new Swizzle({ vector: a, select }); +export const compMult = ( + a: DynoVal, + b: DynoVal, +): DynoVal => new CompMult({ a, b }); +export const outer = < + A extends "vec2" | "vec3" | "vec4", + B extends "vec2" | "vec3" | "vec4", +>( + a: DynoVal, + b: DynoVal, +): DynoVal> => new Outer({ a, b }); +export const transpose = ( + a: DynoVal, +): DynoVal> => new Transpose({ a }); +export const determinant = ( + a: DynoVal, +): DynoVal<"float"> => new Determinant({ a }); +export const inverse = (a: DynoVal): DynoVal => + new Inverse({ a }); + +export class Length extends UnaryOp< + A, + "float", + "length" +> { + constructor({ a }: { a: DynoVal }) { + super({ a, outTypeFunc: (aType) => "float", outKey: "length" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.length} = length(${inputs.a});`, + ]; + } +} + +export class Distance extends BinaryOp< + A, + A, + "float", + "distance" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "distance", outTypeFunc: (aType, bType) => "float" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.distance} = distance(${inputs.a}, ${inputs.b});`, + ]; + } +} + +export class Dot extends BinaryOp< + A, + A, + "float", + "dot" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "dot", outTypeFunc: (aType, bType) => "float" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.dot} = dot(${inputs.a}, ${inputs.b});`, + ]; + } +} + +export class Cross extends BinaryOp<"vec3", "vec3", "vec3", "cross"> { + constructor({ a, b }: { a: DynoVal<"vec3">; b: DynoVal<"vec3"> }) { + super({ a, b, outKey: "cross", outTypeFunc: (aType, bType) => "vec3" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.cross} = cross(${inputs.a}, ${inputs.b});`, + ]; + } +} + +export class Normalize extends UnaryOp< + A, + A, + "normalize" +> { + constructor({ a }: { a: DynoVal }) { + super({ a, outTypeFunc: (aType) => aType, outKey: "normalize" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.normalize} = normalize(${inputs.a});`, + ]; + } +} + +type ProjectHOutput = A extends "vec3" + ? "vec2" + : A extends "vec4" + ? "vec3" + : never; + +function projectHOutputType( + type: A, +): ProjectHOutput { + if (type === "vec3") { + return "vec2" as ProjectHOutput; + } + if (type === "vec4") { + return "vec3" as ProjectHOutput; + } + throw new Error("Invalid type"); +} + +export class ProjectH extends UnaryOp< + A, + ProjectHOutput, + "projected" +> { + constructor({ a }: { a: DynoVal }) { + super({ + a, + outTypeFunc: (aType) => projectHOutputType(aType), + outKey: "projected", + }); + this.statements = ({ inputs, outputs }) => { + if (this.inTypes.a === "vec3") { + return [`${outputs.projected} = ${inputs.a}.xy / ${inputs.a}.z;`]; + } + if (this.inTypes.a === "vec4") { + return [`${outputs.projected} = ${inputs.a}.xyz / ${inputs.a}.w;`]; + } + throw new Error("Invalid type"); + }; + } +} + +type ExtendVecOutput = A extends "float" + ? "vec2" + : A extends "vec2" + ? "vec3" + : A extends "vec3" + ? "vec4" + : never; + +function extendVecOutputType( + type: A, +): ExtendVecOutput { + if (type === "float") return "vec2" as ExtendVecOutput; + if (type === "vec2") return "vec3" as ExtendVecOutput; + if (type === "vec3") return "vec4" as ExtendVecOutput; + throw new Error("Invalid type"); +} + +export class ExtendVec extends BinaryOp< + A, + "float", + ExtendVecOutput, + "extend" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal<"float"> }) { + const type = valType(a); + const outType = extendVecOutputType(type); + super({ a, b, outKey: "extend", outTypeFunc: () => outType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.extend} = ${outType}(${inputs.a}, ${inputs.b});`, + ]; + } +} + +export class FaceForward extends TrinaryOp< + A, + A, + A, + A, + "forward" +> { + constructor({ a, b, c }: { a: DynoVal; b: DynoVal; c: DynoVal }) { + super({ + a, + b, + c, + outKey: "forward", + outTypeFunc: (aType, bType, cType) => aType, + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.forward} = faceforward(${inputs.a}, ${inputs.b}, ${inputs.c});`, + ]; + } +} + +export class ReflectVec extends BinaryOp< + A, + A, + A, + "reflection" +> { + constructor({ + incident, + normal, + }: { incident: DynoVal; normal: DynoVal }) { + super({ + a: incident, + b: normal, + outKey: "reflection", + outTypeFunc: (aType, bType) => aType, + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.reflection} = reflect(${inputs.a}, ${inputs.b});`, + ]; + } +} + +export class RefractVec extends TrinaryOp< + A, + A, + "float", + A, + "refraction" +> { + constructor({ + incident, + normal, + eta, + }: { incident: DynoVal; normal: DynoVal; eta: DynoVal<"float"> }) { + super({ + a: incident, + b: normal, + c: eta, + outKey: "refraction", + outTypeFunc: (aType, bType, cType) => aType, + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.refraction} = refract(${inputs.a}, ${inputs.b}, ${inputs.c});`, + ]; + } +} + +export class CompMult extends BinaryOp< + A, + A, + A, + "product" +> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "product", outTypeFunc: (aType, bType) => aType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.product} = matrixCompMult(${a}, ${b});`, + ]; + } +} + +type OuterOutput< + A extends "vec2" | "vec3" | "vec4", + B extends "vec2" | "vec3" | "vec4", +> = A extends "vec2" + ? B extends "vec2" + ? "mat2" + : B extends "vec3" + ? "mat3x2" + : B extends "vec4" + ? "mat4x2" + : never + : A extends "vec3" + ? B extends "vec2" + ? "mat2x3" + : B extends "vec3" + ? "mat3" + : B extends "vec4" + ? "mat4x3" + : never + : A extends "vec4" + ? B extends "vec2" + ? "mat2x4" + : B extends "vec3" + ? "mat3x4" + : B extends "vec4" + ? "mat4" + : never + : never; + +function outerOutputType< + A extends "vec2" | "vec3" | "vec4", + B extends "vec2" | "vec3" | "vec4", +>(aType: A, bType: B): OuterOutput { + if (aType === "vec2") { + if (bType === "vec2") return "mat2" as OuterOutput; + if (bType === "vec3") return "mat3x2" as OuterOutput; + if (bType === "vec4") return "mat4x2" as OuterOutput; + } + if (aType === "vec3") { + if (bType === "vec2") return "mat2x3" as OuterOutput; + if (bType === "vec3") return "mat3" as OuterOutput; + if (bType === "vec4") return "mat4x3" as OuterOutput; + } + if (aType === "vec4") { + if (bType === "vec2") return "mat2x4" as OuterOutput; + if (bType === "vec3") return "mat3x4" as OuterOutput; + if (bType === "vec4") return "mat4" as OuterOutput; + } + throw new Error(`Invalid outer type: ${aType}, ${bType}`); +} + +export class Outer< + A extends "vec2" | "vec3" | "vec4", + B extends "vec2" | "vec3" | "vec4", +> extends BinaryOp, "outer"> { + constructor({ a, b }: { a: DynoVal; b: DynoVal }) { + super({ a, b, outKey: "outer", outTypeFunc: outerOutputType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.outer} = outerProduct(${inputs.a}, ${inputs.b});`, + ]; + } +} + +type TransposeOutput = A extends SquareMatTypes + ? A + : A extends "mat2x3" + ? "mat3x2" + : A extends "mat2x4" + ? "mat4x2" + : A extends "mat3x2" + ? "mat2x3" + : A extends "mat3x4" + ? "mat4x3" + : A extends "mat4x2" + ? "mat2x4" + : A extends "mat4x3" + ? "mat3x4" + : never; + +function transposeOutputType( + type: A, +): TransposeOutput { + if (type === "mat2") return "mat2" as TransposeOutput; + if (type === "mat3") return "mat3" as TransposeOutput; + if (type === "mat4") return "mat4" as TransposeOutput; + if (type === "mat2x2") return "mat2x2" as TransposeOutput; + if (type === "mat2x3") return "mat3x2" as TransposeOutput; + if (type === "mat2x4") return "mat4x2" as TransposeOutput; + if (type === "mat3x2") return "mat2x3" as TransposeOutput; + if (type === "mat3x3") return "mat3x3" as TransposeOutput; + if (type === "mat3x4") return "mat4x3" as TransposeOutput; + if (type === "mat4x2") return "mat2x4" as TransposeOutput; + if (type === "mat4x3") return "mat3x4" as TransposeOutput; + if (type === "mat4x4") return "mat4x4" as TransposeOutput; + throw new Error(`Invalid transpose type: ${type}`); +} + +export class Transpose extends UnaryOp< + A, + TransposeOutput, + "transpose" +> { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "transpose", outTypeFunc: transposeOutputType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.transpose} = transpose(${inputs.a});`, + ]; + } +} + +export class Determinant extends UnaryOp< + A, + "float", + "det" +> { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "det", outTypeFunc: (aType) => "float" }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.det} = determinant(${inputs.a});`, + ]; + } +} + +export class Inverse extends UnaryOp< + A, + A, + "inverse" +> { + constructor({ a }: { a: DynoVal }) { + super({ a, outKey: "inverse", outTypeFunc: (aType) => aType }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.inverse} = inverse(${a});`, + ]; + } +} + +type SplitOutTypes = A extends "vec2" + ? { x: "float"; y: "float"; r: "float"; g: "float" } + : A extends "vec3" + ? { x: "float"; y: "float"; z: "float"; r: "float"; g: "float"; b: "float" } + : A extends "vec4" + ? { + x: "float"; + y: "float"; + z: "float"; + w: "float"; + r: "float"; + g: "float"; + b: "float"; + a: "float"; + } + : A extends "ivec2" + ? { x: "int"; y: "int"; r: "int"; g: "int" } + : A extends "ivec3" + ? { x: "int"; y: "int"; z: "int"; r: "int"; g: "int"; b: "int" } + : A extends "ivec4" + ? { + x: "int"; + y: "int"; + z: "int"; + w: "int"; + r: "int"; + g: "int"; + b: "int"; + a: "int"; + } + : A extends "uvec2" + ? { x: "uint"; y: "uint"; r: "uint"; g: "uint" } + : A extends "uvec3" + ? { + x: "uint"; + y: "uint"; + z: "uint"; + r: "uint"; + g: "uint"; + b: "uint"; + } + : A extends "uvec4" + ? { + x: "uint"; + y: "uint"; + z: "uint"; + w: "uint"; + r: "uint"; + g: "uint"; + b: "uint"; + a: "uint"; + } + : never; + +function splitOutTypes(type: A): SplitOutTypes { + const result = (value: unknown) => value as SplitOutTypes; + switch (type) { + case "vec2": + return result({ x: "float", y: "float", r: "float", g: "float" }); + case "vec3": + return result({ + x: "float", + y: "float", + z: "float", + r: "float", + g: "float", + b: "float", + }); + case "vec4": + return result({ + x: "float", + y: "float", + z: "float", + w: "float", + r: "float", + g: "float", + b: "float", + a: "float", + }); + case "ivec2": + return result({ x: "int", y: "int", r: "int", g: "int" }); + case "ivec3": + return result({ + x: "int", + y: "int", + z: "int", + r: "int", + g: "int", + b: "int", + }); + case "ivec4": + return result({ + x: "int", + y: "int", + z: "int", + w: "int", + r: "int", + g: "int", + b: "int", + a: "int", + }); + case "uvec2": + return result({ x: "uint", y: "uint", r: "uint", g: "uint" }); + case "uvec3": + return result({ + x: "uint", + y: "uint", + z: "uint", + r: "uint", + g: "uint", + b: "uint", + }); + case "uvec4": + return result({ + x: "uint", + y: "uint", + z: "uint", + w: "uint", + r: "uint", + g: "uint", + b: "uint", + a: "uint", + }); + default: + throw new Error(`Invalid vector type: ${type}`); + } +} + +export class Split extends Dyno< + { vector: V }, + SplitOutTypes +> { + constructor({ vector }: { vector: DynoVal }) { + const type = valType(vector); + const inTypes = { vector: type }; + const outTypes = splitOutTypes(inTypes.vector); + super({ inTypes, outTypes, inputs: { vector } }); + this.statements = ({ inputs, outputs }) => { + const { x, y, z, w, r, g, b, a } = outputs as unknown as Record< + string, + string + >; + const { vector } = inputs; + return [ + x ? `${x} = ${vector}.x;` : null, + y ? `${y} = ${vector}.y;` : null, + z ? `${z} = ${vector}.z;` : null, + w ? `${w} = ${vector}.w;` : null, + r ? `${r} = ${vector}.r;` : null, + g ? `${g} = ${vector}.g;` : null, + b ? `${b} = ${vector}.b;` : null, + a ? `${a} = ${vector}.a;` : null, + ].filter(Boolean) as string[]; + }; + } +} + +export class Combine> + extends Dyno & { vector: V }, { vector: V }> + implements HasDynoOut +{ + constructor({ + vector, + vectorType, + x, + y, + z, + w, + r, + g, + b, + a, + }: { + vector?: DynoVal; + vectorType?: V; + x?: DynoVal; + y?: DynoVal; + z?: DynoVal; + w?: DynoVal; + r?: DynoVal; + g?: DynoVal; + b?: DynoVal; + a?: DynoVal; + }) { + if (!vector && !vectorType) { + throw new Error("Either vector or vectorType must be provided"); + } + const vType = vectorType ?? valType(vector as DynoVal); + const elType = vectorElementType(vType); + const dim = vectorDim(vType); + + const inTypes = { + vector: vType, + x: elType, + y: elType, + r: elType, + g: elType, + } as unknown as SplitOutTypes & { vector: V }; + const inputs = { vector, x, y, r, g }; + if (dim >= 3) { + Object.assign(inTypes, { z: elType, b: elType }); + Object.assign(inputs, { z, b }); + } + if (dim >= 4) { + Object.assign(inTypes, { w: elType, a: elType }); + Object.assign(inputs, { w, a }); + } + // @ts-ignore + super({ inTypes, outTypes: { vector: vType }, inputs }); + this.statements = ({ inputs, outputs }) => { + const { vector } = outputs; + const { + vector: input, + x, + y, + z, + w, + r, + g, + b, + a, + } = inputs as Record; + const statements = [ + `${vector}.x = ${x ?? r ?? (input ? `${input}.x` : literalZero(elType))};`, + `${vector}.y = ${y ?? g ?? (input ? `${input}.y` : literalZero(elType))};`, + ]; + if (dim >= 3) + statements.push( + `${vector}.z = ${z ?? b ?? (input ? `${input}.z` : literalZero(elType))};`, + ); + if (dim >= 4) + statements.push( + `${vector}.w = ${w ?? a ?? (input ? `${input}.w` : literalZero(elType))};`, + ); + return statements; + }; + } + + dynoOut(): DynoValue { + return new DynoOutput & { vector: V }, { vector: V }>( + this, + "vector", + ); + } +} + +type SwizzleOutput< + A extends VectorTypes, + Len extends number, +> = A extends FloatTypes + ? Len extends 1 + ? "float" + : Len extends 2 + ? "vec2" + : Len extends 3 + ? "vec3" + : Len extends 4 + ? "vec4" + : never + : A extends IntTypes + ? Len extends 1 + ? "int" + : Len extends 2 + ? "ivec2" + : Len extends 3 + ? "ivec3" + : Len extends 4 + ? "ivec4" + : never + : A extends UintTypes + ? Len extends 1 + ? "uint" + : Len extends 2 + ? "uvec2" + : Len extends 3 + ? "uvec3" + : Len extends 4 + ? "uvec4" + : never + : never; + +type SwizzleSelectLen = S extends Swizzle1Select + ? 1 + : S extends Swizzle2Select + ? 2 + : S extends Swizzle3Select + ? 3 + : S extends Swizzle4Select + ? 4 + : never; + +function swizzleOutputType( + type: A, + swizzle: S, +): SwizzleOutput> { + let result = null; + if (isFloatType(type)) { + result = + swizzle.length === 1 + ? "float" + : swizzle.length === 2 + ? "vec2" + : swizzle.length === 3 + ? "vec3" + : swizzle.length === 4 + ? "vec4" + : null; + } else if (isIntType(type)) { + result = + swizzle.length === 1 + ? "int" + : swizzle.length === 2 + ? "ivec2" + : swizzle.length === 3 + ? "ivec3" + : swizzle.length === 4 + ? "ivec4" + : null; + } else if (isUintType(type)) { + result = + swizzle.length === 1 + ? "uint" + : swizzle.length === 2 + ? "uvec2" + : swizzle.length === 3 + ? "uvec3" + : swizzle.length === 4 + ? "uvec4" + : null; + } + if (result == null) { + throw new Error(`Invalid swizzle: ${swizzle}`); + } + return result as SwizzleOutput>; +} + +type Swizzle1Select = `${"x" | "y" | "z" | "w"}|${"r" | "g" | "b" | "a"}`; +type Swizzle2Select = + | `${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}` + | `${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}`; +type Swizzle3Select = + | `${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}` + | `${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}`; +type Swizzle4Select = + | `${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}${"x" | "y" | "z" | "w"}` + | `${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}${"r" | "g" | "b" | "a"}`; +type SwizzleSelect = + | Swizzle1Select + | Swizzle2Select + | Swizzle3Select + | Swizzle4Select; + +export class Swizzle< + A extends VectorTypes, + S extends SwizzleSelect, +> extends UnaryOp>, "swizzle"> { + constructor({ vector, select }: { vector: DynoVal; select: S }) { + super({ + a: vector, + outKey: "swizzle", + outTypeFunc: (aType) => swizzleOutputType(aType, select), + }); + this.statements = ({ inputs, outputs }) => [ + `${outputs.swizzle} = ${inputs.a}.${select};`, + ]; + } +} diff --git a/src/generators.ts b/src/generators.ts new file mode 100644 index 0000000..97318f2 --- /dev/null +++ b/src/generators.ts @@ -0,0 +1,2 @@ +export * from "./generators/static"; +export * from "./generators/snow"; diff --git a/src/generators/snow.ts b/src/generators/snow.ts new file mode 100644 index 0000000..971b430 --- /dev/null +++ b/src/generators/snow.ts @@ -0,0 +1,276 @@ +import * as THREE from "three"; + +import { SplatGenerator, SplatTransformer } from "../SplatGenerator"; +import { + Gsplat, + add, + combine, + combineGsplat, + defineGsplat, + dynoBlock, + dynoConst, + dynoFloat, + dynoLiteral, + fract, + hashVec4, + max, + mix, + mod, + mul, + sin, + split, + sub, + vec3, +} from "../dyno"; +import { dynoVec3 } from "../dyno"; + +// snowBox produces Gsplat trajectories that move in a deterministic fashion over time, +// with high similarity between adjacent frames. See examples/atmospheric/main.js +// for an example that creates a snowBox. + +// A snowBox instance has a collection of properties that can be tuned to achieve +// different particle effects. The below DEFAULT_SNOW and DEFAULT_RAIN are example +// parameter sets that look a lot like snow and rain, and can be used as a starting +// point for further tweaking: `const mySnow = { ...DEFAULT_SNOW, density: 500 };` + +export const DEFAULT_SNOW = { + box: new THREE.Box3( + new THREE.Vector3(-1, -1, -1), + new THREE.Vector3(1, 1, 1), + ), + density: 100, + fallDirection: new THREE.Vector3(-1, -3, 1).normalize(), + fallVelocity: 0.02, + wanderScale: 0.04, + wanderVariance: 2, + color1: new THREE.Color(1, 1, 1), + color2: new THREE.Color(0.5, 0.5, 1), + minScale: 0.001, + maxScale: 0.005, + anisoScale: new THREE.Vector3(1, 1, 1), +}; + +export const DEFAULT_RAIN = { + box: new THREE.Box3( + new THREE.Vector3(-2, -1, -2), + new THREE.Vector3(2, 5, 2), + ), + density: 10, + fallDirection: new THREE.Vector3(0, -1, 0), + fallVelocity: 2, + wanderScale: 0.1, + wanderVariance: 1, + color1: new THREE.Color(1, 1, 1), + color2: new THREE.Color(0.25, 0.25, 0.5), + minScale: 0.005, + maxScale: 0.01, + anisoScale: new THREE.Vector3(0.1, 1, 0.1), +}; + +// Calling snowBox creates a new snowBox instance and returns an object with +// the snowBox itself as well `as` a collection of controls that can be used to +// adjust the snowBox's properties over time: +// +// - snow: the SplatGenerator snowBox instance +// - min: the vec3 uniform of the snowBox minimum position +// - max: the vec3 uniform of the snowBox maximum position +// - minY: the float uniform of the snowBox minimum y-coordinate +// - color1: the vec3 uniform of the snowBox first color +// - color2: the vec3 uniform of the snowBox second color +// - opacity: the float uniform of the snowBox opacity +// - fallVelocity: the float uniform of the snowBox fall velocity +// - wanderVariance: the float uniform of the snowBox wander variance +// - wanderScale: the float uniform of the snowBox wander scale +// - fallDirection: the vec3 uniform of the snowBox fall direction +// - minScale: the float uniform of the snowBox minimum scale +// - maxScale: the float uniform of the snowBox maximum scale +// - anisoScale: the vec3 uniform of the snowBox anisotropic scale + +export function snowBox({ + // min and max box extents of the snowBox + box, + // minimum y-coordinate to clamp particle position, which can be used to + // fake hitting a ground plane and lingering there for a bit + minY, + // number of Gsplats to generate (default: calculated from box and density) + numSplats, + // density of Gsplats per unit volume (default: 100) + density, + // The xyz anisotropic scale of the Gsplat, which can be used for example + // to elongate rain particles (default: (1, 1, 1)) + anisoScale, + // Minimum Gsplat particle scale (default: 0.001) + minScale, + // Maximum Gsplat particle scale (default: 0.005) + maxScale, + // The average direction of fall (default: (0, -1, 0)) + fallDirection, + // The average speed of the fall (multiplied with fallDirection) (default: 0.02) + fallVelocity, + // The world scale of wandering overlay motion (default: 0.01) + wanderScale, + // Controls how uniformly the particles wander in sync, more variance mean + // more randomness in the motion (default: 2) + wanderVariance, + // Color 1 of the two colors interpolated between (default: (1, 1, 1)) + color1, + // Color 2 of the two colors interpolated between (default: (0.5, 0.5, 1)) + color2, + // The base opacity of the Gsplats (default: 1) + opacity, + // Optional callback function to call each frame. + onFrame, +}: { + box?: THREE.Box3; + minY?: number; + numSplats?: number; + density?: number; + anisoScale?: THREE.Vector3; + minScale?: number; + maxScale?: number; + fallDirection?: THREE.Vector3; + fallVelocity?: number; + wanderScale?: number; + wanderVariance?: number; + color1?: THREE.Color; + color2?: THREE.Color; + opacity?: number; + onFrame?: ({ + object, + time, + deltaTime, + }: { object: SplatGenerator; time: number; deltaTime: number }) => void; +}) { + box = + box ?? + new THREE.Box3(new THREE.Vector3(-1, -1, -1), new THREE.Vector3(1, 1, 1)); + const volume = + (box.max.x - box.min.x) * (box.max.y - box.min.y) * (box.max.z - box.min.z); + density = density ?? 100; + numSplats = + numSplats ?? Math.max(1, Math.min(1000000, Math.round(volume * density))); + + const dynoMinScale = dynoFloat(minScale ?? 0.001); + const dynoMaxScale = dynoFloat(maxScale ?? 0.005); + const dynoAnisoScale = dynoVec3( + (anisoScale?.clone() ?? new THREE.Vector3(1, 1, 1)).normalize(), + ); + const dynoFallDirection = dynoVec3( + (fallDirection ?? new THREE.Vector3(0, -1, 0)).normalize(), + ); + const dynoFallVelocity = dynoFloat(fallVelocity ?? 0.02); + const dynoWanderScale = dynoFloat(wanderScale ?? 0.01); + const dynoWanderVariance = dynoFloat(wanderVariance ?? 2); + const dynoColor1 = dynoVec3(color1 ?? new THREE.Color(1, 1, 1)); + const dynoColor2 = dynoVec3(color2 ?? new THREE.Color(0.5, 0.5, 1)); + const dynoOpacity = dynoFloat(opacity ?? 1); + + const dynoTime = dynoFloat(0); + const globalOffset = dynoVec3(new THREE.Vector3(0, 0, 0)); + const dynoMin = dynoVec3(box.min); + const dynoMax = dynoVec3(box.max); + const dynoMinY = dynoFloat(minY ?? Number.NEGATIVE_INFINITY); + const minMax = sub(dynoMax, dynoMin); + const snow = new SplatGenerator({ + numSplats, + generator: dynoBlock( + { index: "int" }, + { gsplat: Gsplat }, + ({ index }) => { + if (!index) { + throw new Error("index not defined"); + } + const random = hashVec4(index); + const randomW = split(random).outputs.w; + let position = vec3(random); + + let size = fract(mul(randomW, dynoConst("float", 100))); + size = sin(mul(dynoLiteral("float", "PI"), size)); + size = add(dynoMinScale, mul(size, sub(dynoMaxScale, dynoMinScale))); + const scales = mul(size, dynoAnisoScale); + + const intensity = fract(mul(randomW, dynoConst("float", 10))); + const hue = fract(randomW); + const color = mix(dynoColor1, dynoColor2, hue); + const rgb = mul(color, intensity); + + const random2 = hashVec4( + combine({ + vectorType: "ivec2", + x: index, + y: dynoConst("int", 0x1ab5), + }), + ); + let perturb = vec3(random2); + let timeOffset = mul(split(random2).outputs.w, dynoWanderVariance); + timeOffset = add(dynoTime, timeOffset); + + position = add(position, globalOffset); + const modulo = mod( + position, + dynoConst("vec3", new THREE.Vector3(1, 1, 1)), + ); + position = add(dynoMin, mul(minMax, modulo)); + + const quaternion = dynoConst("vec4", new THREE.Quaternion(0, 0, 0, 1)); + + perturb = sin(add(vec3(timeOffset), perturb)); + perturb = mul(perturb, dynoWanderScale); + let center = add(position, perturb); + + let centerY = split(center).outputs.y; + centerY = max(dynoMinY, centerY); + center = combine({ vector: center, y: centerY }); + + let gsplat = combineGsplat({ + flags: dynoLiteral("uint", "GSPLAT_FLAG_ACTIVE"), + index: index, + center, + scales, + quaternion, + rgb, + opacity: dynoOpacity, + }); + gsplat = transformer.modify(gsplat); + return { gsplat }; + }, + { + globals: () => [defineGsplat], + }, + ), + update: ({ object, time, deltaTime }) => { + dynoTime.value = time; + const _updated = transformer.update(snow); + + const fallDelta = dynoFallDirection.value + .clone() + .multiplyScalar(dynoFallVelocity.value * deltaTime); + globalOffset.value.add(fallDelta); + + // Enable/disable splats based on opacity + object.visible = dynoOpacity.value > 0; + + onFrame?.({ object, time, deltaTime }); + snow.updateVersion(); + }, + }); + const transformer: SplatTransformer = new SplatTransformer(); + return { + snow, + min: dynoMin, + max: dynoMax, + minY: dynoMinY, + color1: dynoColor1, + color2: dynoColor2, + opacity: dynoOpacity, + fallVelocity: dynoFallVelocity, + wanderVariance: dynoWanderVariance, + wanderScale: dynoWanderScale, + fallDirection: dynoFallDirection, + minScale: dynoMinScale, + maxScale: dynoMaxScale, + anisoScale: dynoAnisoScale, + }; +} + +export type SNOW_RESULT_TYPE = ReturnType; diff --git a/src/generators/static.ts b/src/generators/static.ts new file mode 100644 index 0000000..e909be2 --- /dev/null +++ b/src/generators/static.ts @@ -0,0 +1,117 @@ +import * as THREE from "three"; +import { SplatGenerator, SplatTransformer } from "../SplatGenerator"; +import { + type DynoVal, + Gsplat, + add, + combine, + combineGsplat, + defineGsplat, + div, + dynoBlock, + dynoConst, + dynoFloat, + dynoLiteral, + floatBitsToInt, + hashVec3, + imod, + mul, + split, + sub, + vec3, +} from "../dyno"; + +export function staticBox({ + box, + cells, + dotScale, + color, + opacity, +}: { + box: THREE.Box3; + cells: THREE.Vector3; + dotScale: number; + color?: THREE.Color; + opacity?: number; +}) { + cells.x = Math.max(1, Math.round(cells.x)); + cells.y = Math.max(1, Math.round(cells.y)); + cells.z = Math.max(1, Math.round(cells.z)); + opacity = opacity ?? 1; + const numSplats = cells.x * cells.y * cells.z; + const dynoX = dynoConst("int", cells.x); + const dynoY = dynoConst("int", cells.y); + const dynoZ = dynoConst("int", cells.z); + + const dynoTime = dynoFloat(0); + const generator = new SplatGenerator({ + numSplats, + generator: dynoBlock( + { index: "int" }, + { gsplat: Gsplat }, + ({ index }) => { + if (!index) { + throw new Error("index is undefined"); + } + const cellX = imod(index, dynoX); + const index2 = div(index, dynoX); + const cellY = imod(index2, dynoY); + const cellZ = div(index2, dynoY); + const cell = combine({ + vectorType: "ivec3", + x: cellX, + y: cellY, + z: cellZ, + }); + + const intTime = floatBitsToInt(dynoTime); + const inputs = combine({ vectorType: "ivec2", x: index, y: intTime }); + const random = hashVec3(inputs); + const min = dynoConst("vec3", box.min); + const max = dynoConst("vec3", box.max); + const size = sub(max, min); + const coord = div(add(vec3(cell), random), dynoConst("vec3", cells)); + let r: DynoVal<"float">; + let g: DynoVal<"float">; + let b: DynoVal<"float">; + if (color) { + r = dynoConst("float", color.r); + g = dynoConst("float", color.g); + b = dynoConst("float", color.b); + } else { + ({ r, g, b } = split(coord).outputs); + } + const rgba = combine({ + vectorType: "vec4", + r, + g, + b, + a: dynoConst("float", opacity), + }); + const center = add(min, mul(size, coord)); + const scales = vec3(dynoConst("float", dotScale)); + const quaternion = dynoConst("vec4", new THREE.Quaternion(0, 0, 0, 1)); + let gsplat = combineGsplat({ + flags: dynoLiteral("uint", "GSPLAT_FLAG_ACTIVE"), + index: index, + center, + scales, + quaternion, + rgba, + }); + gsplat = transformer.modify(gsplat); + return { gsplat }; + }, + { + globals: () => [defineGsplat], + }, + ), + update: ({ time }) => { + dynoTime.value = time; + const _updated = transformer.update(generator); + generator.updateVersion(); + }, + }); + const transformer: SplatTransformer = new SplatTransformer(); + return generator; +} diff --git a/src/hands.ts b/src/hands.ts new file mode 100644 index 0000000..670e4ae --- /dev/null +++ b/src/hands.ts @@ -0,0 +1,475 @@ +import { + Color, + Matrix4, + type Object3D, + Quaternion, + Vector3, + type WebXRManager, +} from "three"; +import { SplatMesh } from "./SplatMesh"; + +// Experimental WebXR hand tracking and movement + +const DEFAULT_MOVE_INERTIA = 0.5; +const DEFAULT_ROTATE_INERTIA = 0.5; +const TOUCH_BIAS = 0.0; + +export enum JointEnum { + w = "wrist", + t0 = "thumb-metacarpal", + t1 = "thumb-phalanx-proximal", + t2 = "thumb-phalanx-distal", + t3 = "thumb-tip", + i0 = "index-finger-metacarpal", + i1 = "index-finger-phalanx-proximal", + i2 = "index-finger-phalanx-intermediate", + i3 = "index-finger-phalanx-distal", + i4 = "index-finger-tip", + m0 = "middle-finger-metacarpal", + m1 = "middle-finger-phalanx-proximal", + m2 = "middle-finger-phalanx-intermediate", + m3 = "middle-finger-phalanx-distal", + m4 = "middle-finger-tip", + r0 = "ring-finger-metacarpal", + r1 = "ring-finger-phalanx-proximal", + r2 = "ring-finger-phalanx-intermediate", + r3 = "ring-finger-phalanx-distal", + r4 = "ring-finger-tip", + p0 = "pinky-finger-metacarpal", + p1 = "pinky-finger-phalanx-proximal", + p2 = "pinky-finger-phalanx-intermediate", + p3 = "pinky-finger-phalanx-distal", + p4 = "pinky-finger-tip", +} +export type JointId = keyof typeof JointEnum; +export const JOINT_IDS = Object.keys(JointEnum) as JointId[]; +export const NUM_JOINTS = JOINT_IDS.length; + +export const JOINT_INDEX: { [key in JointId]: number } = { + w: 0, + t0: 1, + t1: 2, + t2: 3, + t3: 4, + i0: 5, + i1: 6, + i2: 7, + i3: 8, + i4: 9, + m0: 10, + m1: 11, + m2: 12, + m3: 13, + m4: 14, + r0: 15, + r1: 16, + r2: 17, + r3: 18, + r4: 19, + p0: 20, + p1: 21, + p2: 22, + p3: 23, + p4: 24, +}; + +export const JOINT_RADIUS: { [key in JointId]: number } = { + w: 0.02, + t0: 0.02, + t1: 0.014, + t2: 0.0115, + t3: 0.0085, + i0: 0.022, + i1: 0.012, + i2: 0.0085, + i3: 0.0075, + i4: 0.0065, + m0: 0.021, + m1: 0.012, + m2: 0.008, + m3: 0.0075, + m4: 0.0065, + r0: 0.019, + r1: 0.011, + r2: 0.0075, + r3: 0.007, + r4: 0.006, + p0: 0.012, + p1: 0.01, + p2: 0.007, + p3: 0.0065, + p4: 0.0055, +}; + +export const JOINT_SEGMENTS: JointId[][] = [ + ["w", "t0", "t1", "t2", "t3"], + ["w", "i0", "i1", "i2", "i3", "i4"], + ["w", "m0", "m1", "m2", "m3", "m4"], + ["w", "r0", "r1", "r2", "r3", "r4"], + ["w", "p0", "p1", "p2", "p3", "p4"], +]; + +export const JOINT_SEGMENT_STEPS: number[][] = [ + [8, 10, 8, 6], + [8, 19, 14, 8, 6], + [8, 19, 14, 8, 6], + [8, 19, 14, 8, 6], + [8, 19, 14, 8, 6], +]; + +export const JOINT_TIPS: JointId[] = ["t3", "i4", "m4", "r4", "p4"]; +export const FINGER_TIPS: JointId[] = ["i4", "m4", "r4", "p4"]; + +export enum Hand { + left = "left", + right = "right", +} +export const HANDS = Object.keys(Hand) as Hand[]; + +export type Joint = { + position: Vector3; + quaternion: Quaternion; + radius: number; +}; + +export type HandJoints = { [key in JointId]?: Joint }; +export type HandsJoints = { [key in Hand]?: HandJoints }; + +export class XrHands { + hands: HandsJoints = {}; + last: HandsJoints = {}; + + values: Record = {}; + tests: Record = {}; + lastTests: Record = {}; + + updated = false; + + update({ xr, xrFrame }: { xr: WebXRManager; xrFrame: XRFrame }) { + const xrSession = xr.getSession(); + if (!xrSession) { + return; + } + const referenceSpace = xr.getReferenceSpace(); + if (!referenceSpace) { + return; + } + if (!xrFrame.getJointPose) { + return; + } + + this.last = this.hands; + this.lastTests = this.tests; + + this.hands = {}; + this.values = {}; + this.tests = {}; + + for (const inputSource of xrSession.inputSources) { + if (!inputSource.hand) { + continue; + } + + const hand = inputSource.handedness as Hand; + this.hands[hand] = {}; + + // Iterate over JointId + for (const jointId of JOINT_IDS) { + const jointSpace = inputSource.hand.get(JointEnum[jointId]); + if (jointSpace) { + const jointPose = xrFrame.getJointPose(jointSpace, referenceSpace); + if (jointPose) { + const { position, orientation } = jointPose.transform; + this.hands[hand][jointId] = { + position: new Vector3(position.x, position.y, position.z), + quaternion: new Quaternion( + orientation.x, + orientation.y, + orientation.z, + orientation.w, + ), + radius: jointPose.radius || 0.001, + }; + } + } + } + } + + for (const hand of HANDS) { + for (const { key, value } of [ + { key: `${hand}AllTips`, value: this.allTipsTouching(hand) }, + { + key: `${hand}IndexThumb`, + value: this.touching(hand, "i4", hand, "t3"), + }, + { + key: `${hand}MiddleThumb`, + value: this.touching(hand, "m4", hand, "t3"), + }, + { + key: `${hand}RingThumb`, + value: this.touching(hand, "r4", hand, "t3"), + }, + { + key: `${hand}PinkyThumb`, + value: this.touching(hand, "p4", hand, "t3"), + }, + { key: `${hand}TriTips`, value: this.triTipsTouching(hand) }, + ]) { + this.values[key] = value; + this.tests[key] = + value === 1.0 + ? true + : value === 0.0 + ? false + : (this.lastTests[key] ?? false); + } + } + } + + makeGhostMesh(): SplatMesh { + const center = new Vector3(); + const scales = new Vector3(0.01, 0.01, 0.01); + const quaternion = new Quaternion(0, 0, 0, 1); + const color = new Color(1, 1, 1); + const CYCLE = Math.PI * 3; + const WHITE = new Color(1, 1, 1); + let opacity = 1.0; + + const mesh = new SplatMesh({ + onFrame: () => { + let splatIndex = 0; + for (const handedness of HANDS) { + const active = this.values[`${handedness}MiddleThumb`]; + + const xrHand = this.hands[handedness]; + for (const [index, segment] of JOINT_SEGMENTS.entries()) { + for (let i = 1; i < segment.length; ++i) { + const segmentSplats = JOINT_SEGMENT_STEPS[index][i - 1] * 2; + const lastSegment = i + 1 === segment.length; + const jointA = xrHand?.[segment[i - 1]]; + const jointB = xrHand?.[segment[i]]; + + for (let j = 0; j < segmentSplats; ++j) { + const t = (j + 0.5) / segmentSplats; + opacity = 0.0; + if (jointA && jointB) { + center.copy(jointA.position).lerp(jointB.position, t); + quaternion + .copy(jointA.quaternion) + .slerp(jointB.quaternion, t); + const radiusA = JOINT_RADIUS[segment[i - 1]]; + const radiusB = JOINT_RADIUS[segment[i]]; + let radius = (1 - t) * radiusA + t * radiusB; + if (lastSegment && t > 0.8) { + // Round out finger tips + radius *= Math.sqrt(1 - ((t - 0.8) / 0.2) ** 2); + } + scales.set(0.65 * radius, 0.5 * radius, 0.003); + color.set( + 0.55 + 0.45 * Math.sin(center.x * CYCLE), + 0.55 + 0.45 * Math.sin(center.y * CYCLE), + 0.55 + 0.45 * Math.sin(center.z * CYCLE), + ); + if (handedness === "right") { + color.set(1 - color.r, 1 - color.g, 1 - color.b); + } + + color.lerp(WHITE, active); + opacity = 0.75; + } + mesh.packedSplats.setSplat( + splatIndex, + center, + scales, + quaternion, + opacity, + color, + ); + splatIndex += 1; + } + } + } + } + mesh.packedSplats.numSplats = splatIndex; + mesh.packedSplats.needsUpdate = true; + mesh.numSplats = splatIndex; + }, + }); + return mesh; + } + + distance( + handA: Hand, + jointA: JointId, + handB: Hand, + jointB: JointId, + last = false, + ): number { + const hA = last ? this.last[handA] : this.hands[handA]; + const hB = last ? this.last[handB] : this.hands[handB]; + const jA = hA?.[jointA]; + const jB = hB?.[jointB]; + if (!jA || !jB) { + return Number.POSITIVE_INFINITY; + } + return jA.position.distanceTo(jB.position); + } + + separation( + handA: Hand, + jointA: JointId, + handB: Hand, + jointB: JointId, + last = false, + ): number { + const d = this.distance(handA, jointA, handB, jointB, last); + if (d === Number.POSITIVE_INFINITY) { + return Number.POSITIVE_INFINITY; + } + return d - JOINT_RADIUS[jointA] - JOINT_RADIUS[jointB]; + } + + touching( + handA: Hand, + jointA: JointId, + handB: Hand, + jointB: JointId, + last = false, + ): number { + const d = this.separation(handA, jointA, handB, jointB, last); + if (d === Number.POSITIVE_INFINITY) { + return Number.POSITIVE_INFINITY; + } + return 1 - Math.max(0, Math.min(1, d / 0.01 - TOUCH_BIAS)); + } + + allTipsTouching(hand: Hand, last = false): number { + return Math.min( + this.touching(hand, "t3", hand, "i4", last), + this.touching(hand, "i4", hand, "m4", last), + this.touching(hand, "m4", hand, "r4", last), + this.touching(hand, "r4", hand, "p4", last), + // this.touching(hand, "p4", hand, "t3", last), + ); + } + + triTipsTouching(hand: Hand, last = false): number { + return Math.min( + this.touching(hand, "t3", hand, "i4", last), + this.touching(hand, "i4", hand, "m4", last), + this.touching(hand, "m4", hand, "t3", last), + ); + } +} + +export class HandMovement { + xrHands: XrHands; + control: Object3D; + moveInertia: number; + rotateInertia: number; + + lastGrip: { [key in Hand]?: Vector3 } = {}; + lastPivot: Vector3 = new Vector3(); + rotateVelocity = 0; + velocity: Vector3 = new Vector3(); + + constructor({ + xrHands, + control, + moveInertia, + rotateInertia, + }: { + xrHands: XrHands; + control: Object3D; + moveInertia?: number; + rotateInertia?: number; + }) { + this.xrHands = xrHands; + this.control = control; + this.moveInertia = moveInertia ?? DEFAULT_MOVE_INERTIA; + this.rotateInertia = rotateInertia ?? DEFAULT_ROTATE_INERTIA; + } + + update(deltaTime: number) { + const grip: { [key in Hand]?: Vector3 } = {}; + for (const handedness of HANDS) { + const hand = this.xrHands.hands[handedness]; + if (hand && this.xrHands.tests[`${handedness}MiddleThumb`]) { + grip[handedness] = new Vector3() + .add(hand.t3?.position ?? new Vector3()) + .add(hand.i4?.position ?? new Vector3()) + .add(hand.m4?.position ?? new Vector3()) + .add(hand.r4?.position ?? new Vector3()) + .add(hand.p4?.position ?? new Vector3()) + .multiplyScalar(1 / 5); + } + } + + if (grip.left && grip.right && this.lastGrip.left && this.lastGrip.right) { + const mid = grip.left.clone().add(grip.right).multiplyScalar(0.5); + const lastMid = this.lastGrip.left + .clone() + .add(this.lastGrip.right) + .multiplyScalar(0.5); + this.lastPivot = mid; + + const delta = mid.clone().applyMatrix4(this.control.matrix); + delta.sub(lastMid.clone().applyMatrix4(this.control.matrix)); + delta.multiplyScalar(1 / deltaTime); + this.velocity.lerp(delta, 1 - Math.exp(-20 * deltaTime)); + + const angle = Math.atan2(grip.left.z - mid.z, grip.left.x - mid.x); + const lastAngle = Math.atan2( + this.lastGrip.left.z - lastMid.z, + this.lastGrip.left.x - lastMid.x, + ); + // Find closest rotation over circle between angle and lastAngle + let closestAngle = angle - lastAngle; + if (closestAngle > Math.PI) { + closestAngle -= Math.PI * 2; + } else if (closestAngle < -Math.PI) { + closestAngle += Math.PI * 2; + } + const rotateVelocity = closestAngle / deltaTime; + + const blend = Math.exp(-20 * deltaTime); + this.rotateVelocity = + this.rotateVelocity * blend + rotateVelocity * (1 - blend); + } else { + this.rotateVelocity *= Math.exp(-deltaTime / this.rotateInertia); + + if (grip.left && this.lastGrip.left) { + const delta = grip.left.clone().applyMatrix4(this.control.matrix); + delta.sub(this.lastGrip.left.clone().applyMatrix4(this.control.matrix)); + delta.multiplyScalar(1 / deltaTime); + this.velocity.lerp(delta, 1 - Math.exp(-20 * deltaTime)); + } else if (grip.right && this.lastGrip.right) { + const delta = grip.right.clone().applyMatrix4(this.control.matrix); + delta.sub( + this.lastGrip.right.clone().applyMatrix4(this.control.matrix), + ); + delta.multiplyScalar(1 / deltaTime); + this.velocity.lerp(delta, 1 - Math.exp(-20 * deltaTime)); + } else { + this.velocity.multiplyScalar(Math.exp(-deltaTime / this.moveInertia)); + } + } + + const negPivot = this.lastPivot.clone().negate(); + const rotate = new Matrix4() + .makeTranslation(negPivot) + .premultiply(new Matrix4().makeRotationY(this.rotateVelocity * deltaTime)) + .premultiply(new Matrix4().makeTranslation(this.lastPivot)); + this.control.matrix.multiply(rotate); + this.control.matrix.decompose( + this.control.position, + this.control.quaternion, + this.control.scale, + ); + this.control.updateMatrixWorld(true); + + this.control.position.sub(this.velocity.clone().multiplyScalar(deltaTime)); + this.lastGrip = grip; + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..594d274 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,90 @@ +export { ForgeRenderer, type ForgeRendererOptions } from "./ForgeRenderer"; +export { ForgeViewpoint, type ForgeViewpointOptions } from "./ForgeViewpoint"; + +export * as dyno from "./dyno"; + +export { + SplatLoader, + unpackSplats, + SplatFileType, + getSplatFileType, +} from "./SplatLoader"; +export { PlyReader } from "./ply"; +export { SpzReader } from "./spz"; + +export { PackedSplats, type PackedSplatsOptions } from "./PackedSplats"; +export { + SplatGenerator, + type GsplatGenerator, + SplatModifier, + type GsplatModifier, + SplatTransformer, +} from "./SplatGenerator"; +export { SplatAccumulator, type GeneratorMapping } from "./SplatAccumulator"; +export { Readback, type Rgba8Readback, type ReadbackBuffer } from "./Readback"; + +export { + SplatMesh, + type SplatMeshOptions, + type SplatMeshContext, +} from "./SplatMesh"; +export { SplatSkinning, type SplatSkinningOptions } from "./SplatSkinning"; +export { + SplatEdit, + type SplatEditOptions, + SplatEditSdf, + type SplatEditSdfOptions, + SplatEditSdfType, + SplatEditRgbaBlendMode, + SplatEdits, +} from "./SplatEdit"; + +export { + constructGrid, + constructAxes, + constructSpherePoints, + imageSplats, + textSplats, +} from "./splatConstructors"; + +export * as generators from "./generators"; + +export { VRButton } from "./vrButton"; +export { + type JointId, + JointEnum, + JOINT_IDS, + NUM_JOINTS, + JOINT_INDEX, + JOINT_RADIUS, + JOINT_SEGMENTS, + JOINT_SEGMENT_STEPS, + JOINT_TIPS, + FINGER_TIPS, + Hand, + HANDS, + type Joint, + type HandJoints, + type HandsJoints, + XrHands, + HandMovement, +} from "./hands"; + +export { ForgeControls, FpsMovement, PointerControls } from "./controls"; + +export { + isMobile, + isAndroid, + isOculus, + flipPixels, + pixelsToPngUrl, + toHalf, + fromHalf, + floatToUint8, + floatToSint8, + Uint8ToFloat, + Sint8ToFloat, + setPackedSplat, + unpackSplat, +} from "./utils"; +export * as utils from "./utils"; diff --git a/src/ply.ts b/src/ply.ts new file mode 100644 index 0000000..b29757a --- /dev/null +++ b/src/ply.ts @@ -0,0 +1,930 @@ +// PLY file format reader + +export type PlyPropertyType = + | "char" + | "uchar" + | "short" + | "ushort" + | "int" + | "uint" + | "float" + | "double"; + +export type PlyElement = { + name: string; + count: number; + properties: Record; +}; + +export type PlyProperty = { + isList: boolean; + type: PlyPropertyType; + countType?: PlyPropertyType; +}; + +// Callback for parseSplats base Gsplat data +export type SplatCallback = ( + index: number, + x: number, + y: number, + z: number, + scaleX: number, + scaleY: number, + scaleZ: number, + quatX: number, + quatY: number, + quatZ: number, + quatW: number, + opacity: number, + r: number, + g: number, + b: number, +) => void; + +// Callback for parseSplats SH coefficients +export type SplatShCallback = ( + index: number, + sh1: Float32Array, + sh2?: Float32Array, + sh3?: Float32Array, +) => void; + +// A PlyReader is used to parse PLY files for Gsplat data. +// It takes a Uint8Array/ArrayBuffer as input fileBytes, parses the text header, +// and provides a method parseData to iterate over the entire binary data +// efficiently, or parseSplats to iterate over Gsplat data. + +export class PlyReader { + fileBytes: Uint8Array; + header = ""; + littleEndian = true; + elements: Record = {}; + comments: string[] = []; + data: DataView | null = null; + static defaultPointScale = 0.001; + + numSplats = 0; + + // Create a PlyReader from a Uint8Array/ArrayBuffer, no parsing done yet + constructor({ fileBytes }: { fileBytes: Uint8Array | ArrayBuffer }) { + this.fileBytes = + fileBytes instanceof ArrayBuffer ? new Uint8Array(fileBytes) : fileBytes; + } + + // Identify and parse the PLY text header (assumed to be <64KB in size). + // this.elements will contain all the elements in the file, typically + // "vertex" contains the Gsplat data. + async parseHeader() { + const bufferStream = new ReadableStream({ + start: (controller: ReadableStreamController) => { + // Assume the header is less than 64KB + controller.enqueue(this.fileBytes.slice(0, 65536)); + controller.close(); + }, + }); + const decoder = bufferStream + .pipeThrough(new TextDecoderStream()) + .getReader(); + + // Find the end of the text section of the PLY file + this.header = ""; + const headerTerminator = "end_header\n"; + while (true) { + const { value, done } = await decoder.read(); + if (done) { + throw new Error("Failed to read header"); + } + + this.header += value as string; + const endHeader = this.header.indexOf(headerTerminator); + if (endHeader >= 0) { + this.header = this.header.slice(0, endHeader + headerTerminator.length); + break; + } + } + // Partition the file into header and binary data + const headerLen = new TextEncoder().encode(this.header).length; + this.data = new DataView(this.fileBytes.buffer, headerLen); + + this.elements = {}; + let curElement: PlyElement | null = null; + this.comments = []; + + this.header + .trim() + .split("\n") + .forEach((line: string, lineIndex: number) => { + const trimmedLine = line.trim(); + if (lineIndex === 0) { + if (trimmedLine !== "ply") { + throw new Error("Invalid PLY header"); + } + return; + } + if (trimmedLine.length === 0) { + return; // Skip empty lines + } + + const fields = trimmedLine.split(" "); + switch (fields[0]) { + case "format": + if (fields[1] === "binary_little_endian") { + this.littleEndian = true; + } else if (fields[1] === "binary_big_endian") { + this.littleEndian = false; + } else { + // ascii formats not supported + throw new Error(`Unsupported PLY format: ${fields[1]}`); + } + if (fields[2] !== "1.0") { + throw new Error(`Unsupported PLY version: ${fields[2]}`); + } + break; + case "end_header": + break; + case "comment": + this.comments.push(trimmedLine.slice("comment ".length)); + break; + case "element": { + const name = fields[1]; + curElement = { + name, + count: Number.parseInt(fields[2]), + properties: {}, + }; + this.elements[name] = curElement; + break; + } + case "property": + if (curElement == null) { + throw new Error("Property must be inside an element"); + } + if (fields[1] === "list") { + curElement.properties[fields[4]] = { + isList: true, + type: fields[3] as PlyPropertyType, + countType: fields[2] as PlyPropertyType, + }; + } else { + curElement.properties[fields[2]] = { + isList: false, + type: fields[1] as PlyPropertyType, + }; + } + break; + default: + // console.warn(`Skipping unsupported PLY keyword: ${fields[0]}`); + } + }); + + if (this.elements.vertex) { + this.numSplats = this.elements.vertex.count; + } + } + + parseData( + elementCallback: ( + element: PlyElement, + ) => + | null + | ((index: number, item: Record) => void), + ) { + // Go through the entire binary data of the PLY file, starting at offset 0 + let offset = 0; + const data = this.data; + if (data == null) { + throw new Error("No data to parse"); + } + + for (const elementName in this.elements) { + const element = this.elements[elementName]; + const { count, properties } = element; + const item: Record = {}; + // Construct an array of parser function to parse each property in an item + const parsers = []; + for (const [propertyName, property] of Object.entries(properties)) { + if (!property.isList) { + item[propertyName] = 0; + parsers.push(() => { + item[propertyName] = PARSE_FIELD[property.type]( + data, + offset, + this.littleEndian, + ); + offset += FIELD_BYTES[property.type]; + }); + } else { + // Property is a list, so parse the count first + item[propertyName] = []; + parsers.push(() => { + const list = item[propertyName] as number[]; + list.length = PARSE_FIELD[property.countType as PlyPropertyType]( + data, + offset, + this.littleEndian, + ); + offset += FIELD_BYTES[property.countType as PlyPropertyType]; + for (let i = 0; i < list.length; i++) { + list[i] = PARSE_FIELD[property.type]( + data, + offset, + this.littleEndian, + ); + offset += FIELD_BYTES[property.type]; + } + }); + } + } + + // Parse all the items in the element + const callback = elementCallback(element) ?? (() => {}); + for (let index = 0; index < count; index++) { + for (const parser of parsers) { + parser(); + } + callback(index, item); + } + } + } + + // Parse all the Gsplat data in the PLY file in go, invoking the given + // callbacks for each Gsplat. + parseSplats(splatCallback: SplatCallback, shCallback?: SplatShCallback) { + if (this.elements.vertex == null) { + throw new Error("No vertex element found"); + } + + let isSuperSplat = false; + const ssChunks: SSChunk[] = []; + + let numSh = 0; + let sh1Props: string[] = []; + let sh2Props: string[] = []; + let sh3Props: string[] = []; + let sh1: Float32Array | undefined = undefined; + let sh2: Float32Array | undefined = undefined; + let sh3: Float32Array | undefined = undefined; + + function prepareSh() { + // Prepare SH coefficient names and arrays for numSh total SH levels + const num_f_rest = NUM_SH_TO_NUM_F_REST[numSh]; + sh1Props = new Array(3) + .fill(null) + .flatMap((_, k) => + [0, 1, 2].map((_, d) => `f_rest_${k + (d * num_f_rest) / 3}`), + ); + sh2Props = new Array(5) + .fill(null) + .flatMap((_, k) => + [0, 1, 2].map((_, d) => `f_rest_${3 + k + (d * num_f_rest) / 3}`), + ); + sh3Props = new Array(7) + .fill(null) + .flatMap((_, k) => + [0, 1, 2].map((_, d) => `f_rest_${8 + k + (d * num_f_rest) / 3}`), + ); + sh1 = numSh >= 1 ? new Float32Array(3 * 3) : undefined; + sh2 = numSh >= 2 ? new Float32Array(5 * 3) : undefined; + sh3 = numSh >= 3 ? new Float32Array(7 * 3) : undefined; + } + + function ssShCallback( + index: number, + item: Record, + ) { + // Decode SH for SuperSplat compressed data + if (!sh1) { + throw new Error("Missing sh1"); + } + for (const [i, key] of sh1Props.entries()) { + sh1[i] = ((item[key] as number) * 8) / 255 - 4; + } + if (sh2) { + for (const [i, key] of sh2Props.entries()) { + sh2[i] = ((item[key] as number) * 8) / 255 - 4; + } + } + if (sh3) { + for (const [i, key] of sh3Props.entries()) { + sh3[i] = ((item[key] as number) * 8) / 255 - 4; + } + } + shCallback?.(index, sh1, sh2, sh3); + } + + function initSuperSplat(element: PlyElement) { + const { + min_x, + min_y, + min_z, + max_x, + max_y, + max_z, + min_scale_x, + min_scale_y, + min_scale_z, + max_scale_x, + max_scale_y, + max_scale_z, + min_r, + min_g, + min_b, + max_r, + max_g, + max_b, + } = element.properties; + if ( + !min_x || + !min_y || + !min_z || + !max_x || + !max_y || + !max_z || + !min_scale_x || + !min_scale_y || + !min_scale_z || + !max_scale_x || + !max_scale_y || + !max_scale_z || + !min_r || + !min_g || + !min_b || + !max_r || + !max_g || + !max_b + ) { + throw new Error("Missing PLY chunk properties"); + } + + // SuperSplat chunks are used to quantize splat data, so we need to store them + isSuperSplat = true; + return (index: number, item: Record) => { + const { + min_x, + min_y, + min_z, + max_x, + max_y, + max_z, + min_scale_x, + min_scale_y, + min_scale_z, + max_scale_x, + max_scale_y, + max_scale_z, + min_r, + min_g, + min_b, + max_r, + max_g, + max_b, + } = item as Record; + ssChunks.push({ + min_x, + min_y, + min_z, + max_x, + max_y, + max_z, + min_scale_x, + min_scale_y, + min_scale_z, + max_scale_x, + max_scale_y, + max_scale_z, + min_r, + min_g, + min_b, + max_r, + max_g, + max_b, + }); + }; + } + + function decodeSuperSplat(element: PlyElement) { + // Decode SuperSplat compressed data in vertex and sh elements + if (shCallback && element.name === "sh") { + numSh = getNumSh(element.properties); + prepareSh(); + return ssShCallback; + } + if (element.name !== "vertex") { + return null; + } + + const { packed_position, packed_rotation, packed_scale, packed_color } = + element.properties; + if ( + !packed_position || + !packed_rotation || + !packed_scale || + !packed_color + ) { + throw new Error( + "Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color", + ); + } + + const SQRT2 = Math.sqrt(2); + + return (index: number, item: Record) => { + // SuperSplat data are quantized within chunks with 256 Gsplats each + const chunk = ssChunks[index >>> 8]; + if (chunk == null) { + throw new Error("Missing PLY chunk"); + } + const { + min_x, + min_y, + min_z, + max_x, + max_y, + max_z, + min_scale_x, + min_scale_y, + min_scale_z, + max_scale_x, + max_scale_y, + max_scale_z, + min_r, + min_g, + min_b, + max_r, + max_g, + max_b, + } = chunk; + const { packed_position, packed_rotation, packed_scale, packed_color } = + item as Record; + + const x = + (((packed_position >>> 21) & 2047) / 2047) * (max_x - min_x) + min_x; + const y = + (((packed_position >>> 11) & 1023) / 1023) * (max_y - min_y) + min_y; + const z = ((packed_position & 2047) / 2047) * (max_z - min_z) + min_z; + + const r0 = (((packed_rotation >>> 20) & 1023) / 1023 - 0.5) * SQRT2; + const r1 = (((packed_rotation >>> 10) & 1023) / 1023 - 0.5) * SQRT2; + const r2 = ((packed_rotation & 1023) / 1023 - 0.5) * SQRT2; + const rr = Math.sqrt(Math.max(0, 1.0 - r0 * r0 - r1 * r1 - r2 * r2)); + + const rOrder = packed_rotation >>> 30; + const quatX = rOrder === 0 ? r0 : rOrder === 1 ? rr : r1; + const quatY = rOrder <= 1 ? r1 : rOrder === 2 ? rr : r2; + const quatZ = rOrder <= 2 ? r2 : rr; + const quatW = rOrder === 0 ? rr : r0; + + const scaleX = Math.exp( + (((packed_scale >>> 21) & 2047) / 2047) * + (max_scale_x - min_scale_x) + + min_scale_x, + ); + const scaleY = Math.exp( + (((packed_scale >>> 11) & 1023) / 1023) * + (max_scale_y - min_scale_y) + + min_scale_y, + ); + const scaleZ = Math.exp( + ((packed_scale & 2047) / 2047) * (max_scale_z - min_scale_z) + + min_scale_z, + ); + + const r = + (((packed_color >>> 24) & 255) / 255) * (max_r - min_r) + min_r; + const g = + (((packed_color >>> 16) & 255) / 255) * (max_g - min_g) + min_g; + const b = + (((packed_color >>> 8) & 255) / 255) * (max_b - min_b) + min_b; + const opacity = (packed_color & 255) / 255; + + splatCallback( + index, + x, + y, + z, + scaleX, + scaleY, + scaleZ, + quatX, + quatY, + quatZ, + quatW, + opacity, + r, + g, + b, + ); + }; + } + + const elementCallback = (element: PlyElement) => { + if (element.name === "chunk") { + if ( + this.comments.some((comment) => + comment.toLowerCase().includes("supersplat"), + ) + ) { + // SuperSplat compressed format detected + return initSuperSplat(element); + } + } + if (isSuperSplat) { + return decodeSuperSplat(element); + } + + if (element.name !== "vertex") { + return null; + } + + const { + x, + y, + z, + scale_0, + scale_1, + scale_2, + rot_0, + rot_1, + rot_2, + rot_3, + opacity, + f_dc_0, + f_dc_1, + f_dc_2, + red, + green, + blue, + alpha, + } = element.properties; + + if (!x || !y || !z) { + throw new Error("Missing PLY properties: x, y, z"); + } + // Pure point cloud PLY files have no scales or rotations + const hasScales = scale_0 && scale_1 && scale_2; + const hasRots = rot_0 && rot_1 && rot_2 && rot_3; + // Quantization scale factor for argb values + const alphaDiv = alpha != null ? FIELD_SCALE[alpha.type] : 1; + const redDiv = red != null ? FIELD_SCALE[red.type] : 1; + const greenDiv = green != null ? FIELD_SCALE[green.type] : 1; + const blueDiv = blue != null ? FIELD_SCALE[blue.type] : 1; + + numSh = getNumSh(element.properties); + prepareSh(); + + return (index: number, item: Record) => { + const scaleX = hasScales + ? Math.exp(item.scale_0 as number) + : PlyReader.defaultPointScale; + const scaleY = hasScales + ? Math.exp(item.scale_1 as number) + : PlyReader.defaultPointScale; + const scaleZ = hasScales + ? Math.exp(item.scale_2 as number) + : PlyReader.defaultPointScale; + + const quatX = hasRots ? (item.rot_1 as number) : 0; + const quatY = hasRots ? (item.rot_2 as number) : 0; + const quatZ = hasRots ? (item.rot_3 as number) : 0; + const quatW = hasRots ? (item.rot_0 as number) : 1; + + const op = + opacity != null + ? 1.0 / (1.0 + Math.exp(-item.opacity as number)) + : alpha != null + ? (item.alpha as number) / alphaDiv + : 1.0; + const r = + f_dc_0 != null + ? (item.f_dc_0 as number) * SH_C0 + 0.5 + : red != null + ? (item.red as number) / redDiv + : 1.0; + const g = + f_dc_1 != null + ? (item.f_dc_1 as number) * SH_C0 + 0.5 + : green != null + ? (item.green as number) / greenDiv + : 1.0; + const b = + f_dc_2 != null + ? (item.f_dc_2 as number) * SH_C0 + 0.5 + : blue != null + ? (item.blue as number) / blueDiv + : 1.0; + + splatCallback( + index, + item.x as number, + item.y as number, + item.z as number, + scaleX, + scaleY, + scaleZ, + quatX, + quatY, + quatZ, + quatW, + op, + r, + g, + b, + ); + + if (shCallback && sh1) { + if (sh1) { + for (const [i, key] of sh1Props.entries()) { + sh1[i] = item[key] as number; + } + } + if (sh2) { + for (const [i, key] of sh2Props.entries()) { + sh2[i] = item[key] as number; + } + } + if (sh3) { + for (const [i, key] of sh3Props.entries()) { + sh3[i] = item[key] as number; + } + } + shCallback(index, sh1, sh2, sh3); + } + }; + }; + + this.parseData(elementCallback); + } + + // Inject RGBA values into original PLY file, which can be used to modify + // the color/opacity of the Gsplats and write out the modified PLY file. + injectRgba(rgba: Uint8Array) { + // Go through the entire binary data of the PLY file, starting at offset 0 + let offset = 0; + const data = this.data; + if (data == null) { + throw new Error("No parsed data"); + } + if (rgba.length !== this.numSplats * 4) { + throw new Error("Invalid RGBA array length"); + } + + for (const elementName in this.elements) { + const element = this.elements[elementName]; + const { count, properties } = element; + const parsers = []; + + let rgbaOffset = 0; + const isVertex = elementName === "vertex"; + if (isVertex) { + for (const name of ["opacity", "f_dc_0", "f_dc_1", "f_dc_2"]) { + if (!properties[name] || properties[name].type !== "float") { + throw new Error(`Can't injectRgba due to property: ${name}`); + } + } + } + + for (const [propertyName, property] of Object.entries(properties)) { + if (!property.isList) { + if (isVertex) { + if ( + propertyName === "f_dc_0" || + propertyName === "f_dc_1" || + propertyName === "f_dc_2" + ) { + const component = Number.parseInt( + propertyName.slice("f_dc_".length), + ); + parsers.push(() => { + // Inject DC coefficients + const value = + (rgba[rgbaOffset + component] / 255 - 0.5) / SH_C0; + SET_FIELD[property.type]( + data, + offset, + this.littleEndian, + value, + ); + }); + } else if (propertyName === "opacity") { + parsers.push(() => { + // Inject opacity sigmoid, clamped to [-100, 100] + const value = Math.max( + -100, + Math.min( + 100, + -Math.log(1.0 / (rgba[rgbaOffset + 3] / 255) - 1.0), + ), + ); + SET_FIELD[property.type]( + data, + offset, + this.littleEndian, + value, + ); + }); + } + } + parsers.push(() => { + offset += FIELD_BYTES[property.type]; + }); + } else { + parsers.push(() => { + const length = PARSE_FIELD[property.countType as PlyPropertyType]( + data, + offset, + this.littleEndian, + ); + offset += FIELD_BYTES[property.countType as PlyPropertyType]; + offset += length * FIELD_BYTES[property.type]; + }); + } + } + + for (let index = 0; index < count; index++) { + // Go through all the data and field parsers to compute offset + for (const parser of parsers) { + parser(); + } + if (isVertex) { + rgbaOffset += 4; + } + } + } + } +} + +export const SH_C0 = 0.28209479177387814; + +type FieldParser = ( + data: DataView, + offset: number, + littleEndian: boolean, +) => number; +type FieldSetter = ( + data: DataView, + offset: number, + littleEndian: boolean, + value: number, +) => void; + +const PARSE_FIELD: Record = { + char: (data: DataView, offset: number, littleEndian: boolean) => { + return data.getInt8(offset); + }, + uchar: (data: DataView, offset: number, littleEndian: boolean) => { + return data.getUint8(offset); + }, + short: (data: DataView, offset: number, littleEndian: boolean) => { + return data.getInt16(offset, littleEndian); + }, + ushort: (data: DataView, offset: number, littleEndian: boolean) => { + return data.getUint16(offset, littleEndian); + }, + int: (data: DataView, offset: number, littleEndian: boolean) => { + return data.getInt32(offset, littleEndian); + }, + uint: (data: DataView, offset: number, littleEndian: boolean) => { + return data.getUint32(offset, littleEndian); + }, + float: (data: DataView, offset: number, littleEndian: boolean) => { + return data.getFloat32(offset, littleEndian); + }, + double: (data: DataView, offset: number, littleEndian: boolean) => { + return data.getFloat64(offset, littleEndian); + }, +}; + +const SET_FIELD: Record = { + char: ( + data: DataView, + offset: number, + littleEndian: boolean, + value: number, + ) => { + data.setInt8(offset, value); + }, + uchar: ( + data: DataView, + offset: number, + littleEndian: boolean, + value: number, + ) => { + data.setUint8(offset, value); + }, + short: ( + data: DataView, + offset: number, + littleEndian: boolean, + value: number, + ) => { + data.setInt16(offset, value, littleEndian); + }, + ushort: ( + data: DataView, + offset: number, + littleEndian: boolean, + value: number, + ) => { + data.setUint16(offset, value, littleEndian); + }, + int: ( + data: DataView, + offset: number, + littleEndian: boolean, + value: number, + ) => { + data.setInt32(offset, value, littleEndian); + }, + uint: ( + data: DataView, + offset: number, + littleEndian: boolean, + value: number, + ) => { + data.setUint32(offset, value, littleEndian); + }, + float: ( + data: DataView, + offset: number, + littleEndian: boolean, + value: number, + ) => { + data.setFloat32(offset, value, littleEndian); + }, + double: ( + data: DataView, + offset: number, + littleEndian: boolean, + value: number, + ) => { + data.setFloat64(offset, value, littleEndian); + }, +}; + +const FIELD_BYTES: Record = { + char: 1, + uchar: 1, + short: 2, + ushort: 2, + int: 4, + uint: 4, + float: 4, + double: 8, +}; + +const FIELD_SCALE: Record = { + char: 127, + uchar: 255, + short: 32767, + ushort: 65535, + int: 2147483647, + uint: 4294967295, + float: 1, + double: 1, +}; + +const NUM_F_REST_TO_NUM_SH: Record = { + 0: 0, + 9: 1, + 24: 2, + 45: 3, +}; +const NUM_SH_TO_NUM_F_REST: Record = { + 0: 0, + 1: 9, + 2: 24, + 3: 45, +}; + +function getNumSh(properties: Record) { + let num_f_rest = 0; + while (properties[`f_rest_${num_f_rest}`]) { + num_f_rest += 1; + } + const numSh = NUM_F_REST_TO_NUM_SH[num_f_rest]; + if (numSh == null) { + throw new Error(`Unsupported number of SH coefficients: ${num_f_rest}`); + } + return numSh; +} + +type SSChunk = { + min_x: number; + min_y: number; + min_z: number; + max_x: number; + max_y: number; + max_z: number; + min_scale_x: number; + min_scale_y: number; + min_scale_z: number; + max_scale_x: number; + max_scale_y: number; + max_scale_z: number; + min_r: number; + min_g: number; + min_b: number; + max_r: number; + max_g: number; + max_b: number; +}; diff --git a/src/shaders.ts b/src/shaders.ts new file mode 100644 index 0000000..8e03d7c --- /dev/null +++ b/src/shaders.ts @@ -0,0 +1,19 @@ +import * as THREE from "three"; + +import splatDefines from "./shaders/splatDefines.glsl"; +import splatFragment from "./shaders/splatFragment.glsl"; +import splatVertex from "./shaders/splatVertex.glsl"; + +let shaders: Record | null = null; + +export function getShaders(): Record { + if (!shaders) { + // @ts-ignore + THREE.ShaderChunk.splatDefines = splatDefines; + shaders = { + splatVertex, + splatFragment, + }; + } + return shaders; +} diff --git a/src/shaders/computeUvec4.glsl b/src/shaders/computeUvec4.glsl new file mode 100644 index 0000000..65d54ef --- /dev/null +++ b/src/shaders/computeUvec4.glsl @@ -0,0 +1,36 @@ +precision highp float; +precision highp int; +precision highp sampler2D; +precision highp usampler2D; +precision highp isampler2D; +precision highp sampler2DArray; +precision highp usampler2DArray; +precision highp isampler2DArray; +precision highp sampler3D; +precision highp usampler3D; +precision highp isampler3D; + +#include + +uniform uint targetLayer; +uniform int targetBase; +uniform int targetCount; + +out uvec4 target; + +{{ GLOBALS }} + +void produceSplat(int index) { + {{ STATEMENTS }} +} + +void main() { + int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x); + int index = targetIndex - targetBase; + + if ((index >= 0) && (index < targetCount)) { + produceSplat(index); + } else { + target = uvec4(0u, 0u, 0u, 0u); + } +} diff --git a/src/shaders/computeVec4.glsl b/src/shaders/computeVec4.glsl new file mode 100644 index 0000000..471af7c --- /dev/null +++ b/src/shaders/computeVec4.glsl @@ -0,0 +1,36 @@ +precision highp float; +precision highp int; +precision highp sampler2D; +precision highp usampler2D; +precision highp isampler2D; +precision highp sampler2DArray; +precision highp usampler2DArray; +precision highp isampler2DArray; +precision highp sampler3D; +precision highp usampler3D; +precision highp isampler3D; + +#include + +uniform uint targetLayer; +uniform int targetBase; +uniform int targetCount; + +out vec4 target; + +{{ GLOBALS }} + +void computeReadback(int index) { + {{ STATEMENTS }} +} + +void main() { + int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x); + int index = targetIndex - targetBase; + + if ((index >= 0) && (index < targetCount)) { + computeReadback(index); + } else { + target = vec4(0.0, 0.0, 0.0, 0.0); + } +} diff --git a/src/shaders/splatDefines.glsl b/src/shaders/splatDefines.glsl new file mode 100644 index 0000000..035993a --- /dev/null +++ b/src/shaders/splatDefines.glsl @@ -0,0 +1,321 @@ +const float LN_SCALE_MIN = -9.0; +const float LN_SCALE_MAX = 9.0; +const float LN_RESCALE = (LN_SCALE_MAX - LN_SCALE_MIN) / 254.0; // 1..=255 + +const uint SPLAT_TEX_WIDTH_BITS = 11u; +const uint SPLAT_TEX_HEIGHT_BITS = 11u; +const uint SPLAT_TEX_DEPTH_BITS = 11u; +const uint SPLAT_TEX_LAYER_BITS = SPLAT_TEX_WIDTH_BITS + SPLAT_TEX_HEIGHT_BITS; + +const uint SPLAT_TEX_WIDTH = 1u << SPLAT_TEX_WIDTH_BITS; +const uint SPLAT_TEX_HEIGHT = 1u << SPLAT_TEX_HEIGHT_BITS; +const uint SPLAT_TEX_DEPTH = 1u << SPLAT_TEX_DEPTH_BITS; + +const uint SPLAT_TEX_WIDTH_MASK = SPLAT_TEX_WIDTH - 1u; +const uint SPLAT_TEX_HEIGHT_MASK = SPLAT_TEX_HEIGHT - 1u; +const uint SPLAT_TEX_DEPTH_MASK = SPLAT_TEX_DEPTH - 1u; + +const uint F16_INF = 0x7c00u; +const float PI = 3.1415926535897932384626433832795; + +const float INFINITY = 1.0 / 0.0; +const float NEG_INFINITY = -INFINITY; + +const float MAX_PIXEL_RADIUS = 512.0; +const float MIN_ALPHA = 0.01; +const float MAX_STDDEV = sqrt(8.0); + +float sqr(float x) { + return x * x; +} + +float pow4(float x) { + float x2 = x * x; + return x2 * x2; +} + +float pow8(float x) { + float x4 = pow4(x); + return x4 * x4; +} + +vec3 srgbToLinear(vec3 rgb) { + return pow(rgb, vec3(2.2)); +} + +vec3 linearToSrgb(vec3 rgb) { + return pow(rgb, vec3(1.0 / 2.2)); +} + +// uint encodeQuatXyz888(vec4 q) { +// // Encode quaternion in three int8s, flipping sign to remove ambiguity +// vec3 quat3 = (q.w < 0.0) ? -q.xyz : q.xyz; +// ivec3 iQuat3 = ivec3(round(clamp(quat3 * 127.0, -127.0, 127.0))); +// uvec3 uQuat3 = uvec3(iQuat3) & 0xffu; +// return (uQuat3.x << 16u) | (uQuat3.y << 8u) | uQuat3.z; +// } + +// vec4 decodeQuatXyz888(uint encoded) { +// ivec3 iQuat3 = ivec3( +// int(encoded << 24u) >> 24, +// int(encoded << 16u) >> 24, +// int(encoded << 8u) >> 24 +// ); +// vec4 quat = vec4(vec3(iQuat3) / 127.0, 0.0); +// quat.w = sqrt(max(0.0, 1.0 - dot(quat.xyz, quat.xyz))); +// return quat; +// } + +// Encode a quaternion (vec4) into a 24‐bit uint with folded octahedral mapping. +uint encodeQuatOctXy88R8(vec4 q) { + // Ensure minimal representation: flip if q.w is negative. + if (q.w < 0.0) { + q = -q; + } + // Compute rotation angle: θ = 2 * acos(q.w) ∈ [0,π] + float theta = 2.0 * acos(q.w); + float halfTheta = theta * 0.5; + float s = sin(halfTheta); + // Recover the rotation axis; use a default if nearly zero rotation. + vec3 axis = (abs(s) < 1e-6) ? vec3(1.0, 0.0, 0.0) : q.xyz / s; + + // --- Folded Octahedral Mapping (inline) --- + // Compute p = (axis.x, axis.y) / (|axis.x|+|axis.y|+|axis.z|) + float sum = abs(axis.x) + abs(axis.y) + abs(axis.z); + vec2 p = vec2(axis.x, axis.y) / sum; + // If axis.z < 0, fold the mapping. + if (axis.z < 0.0) { + float oldPx = p.x; + p.x = (1.0 - abs(p.y)) * (p.x >= 0.0 ? 1.0 : -1.0); + p.y = (1.0 - abs(oldPx)) * (p.y >= 0.0 ? 1.0 : -1.0); + } + // Remap from [-1,1] to [0,1] + float u_f = p.x * 0.5 + 0.5; + float v_f = p.y * 0.5 + 0.5; + // Quantize to 8 bits (0 to 255) + uint quantU = uint(clamp(round(u_f * 255.0), 0.0, 255.0)); + uint quantV = uint(clamp(round(v_f * 255.0), 0.0, 255.0)); + + // --- Angle Quantization --- + // Quantize θ ∈ [0,π] to 8 bits (0 to 255) + uint angleInt = uint(clamp(round((theta / 3.14159265359) * 255.0), 0.0, 255.0)); + + // Pack bits: bits [0–7]: quantU, [8–15]: quantV, [16–23]: angleInt. + return (angleInt << 16u) | (quantV << 8u) | quantU; +} + +// Decode a 24‐bit encoded uint into a quaternion (vec4) using the folded octahedral inverse. +vec4 decodeQuatOctXy88R8(uint encoded) { + // Extract the fields. + uint quantU = encoded & uint(0xFFu); // bits 0–7 + uint quantV = (encoded >> 8u) & uint(0xFFu); // bits 8–15 + uint angleInt = encoded >> 16u; // bits 16–23 + + // Recover u and v in [0,1], then map to [-1,1]. + float u_f = float(quantU) / 255.0; + float v_f = float(quantV) / 255.0; + vec2 f = vec2(u_f * 2.0 - 1.0, v_f * 2.0 - 1.0); + + vec3 axis = vec3(f.xy, 1.0 - abs(f.x) - abs(f.y)); + float t = max(-axis.z, 0.0); + axis.x += (axis.x >= 0.0) ? -t : t; + axis.y += (axis.y >= 0.0) ? -t : t; + axis = normalize(axis); + + // Decode the angle θ ∈ [0,π]. + float theta = (float(angleInt) / 255.0) * 3.14159265359; + float halfTheta = theta * 0.5; + float s = sin(halfTheta); + float w = cos(halfTheta); + + return vec4(axis * s, w); +} + +// // Encode a quaternion (vec4) into a 24‐bit uint by converting it to Euler angles. +// // We assume the quaternion is normalized. +// // Euler angles (roll, pitch, yaw) are assumed in radians in the range [-PI, PI]. +// // Each angle is normalized: value = (angle + PI) / (2*PI) and quantized to 8 bits. +// uint encodeQuatEulerXyz888(vec4 q) { +// // Compute roll (x), pitch (y) and yaw (z) using Tait–Bryan angles. +// float sinr_cosp = 2.0 * (q.w * q.x + q.y * q.z); +// float cosr_cosp = 1.0 - 2.0 * (q.x * q.x + q.y * q.y); +// float roll = atan(sinr_cosp, cosr_cosp); + +// float sinp = 2.0 * (q.w * q.y - q.z * q.x); +// float pitch = abs(sinp) >= 1.0 ? (sign(sinp) * 1.57079632679) : asin(sinp); + +// float siny_cosp = 2.0 * (q.w * q.z + q.x * q.y); +// float cosy_cosp = 1.0 - 2.0 * (q.y * q.y + q.z * q.z); +// float yaw = atan(siny_cosp, cosy_cosp); + +// // Normalize each angle from [-PI, PI] to [0, 1] +// float normRoll = (roll + 3.14159265359) / (2.0 * 3.14159265359); +// float normPitch = (pitch + 3.14159265359) / (2.0 * 3.14159265359); +// float normYaw = (yaw + 3.14159265359) / (2.0 * 3.14159265359); + +// // Quantize each normalized angle to 8 bits (0..255) +// uint rollQ = uint(round(normRoll * 255.0)); +// uint pitchQ = uint(round(normPitch * 255.0)); +// uint yawQ = uint(round(normYaw * 255.0)); + +// // Pack into a 24-bit uint: +// // Bits 0..7 : rollQ, +// // Bits 8..15 : pitchQ, +// // Bits 16..23 : yawQ. +// return (yawQ << 16u) | (pitchQ << 8u) | rollQ; +// } + +// // Decode a 24‐bit uint into a quaternion (vec4) by unpacking 8‐bit quantized Euler angles. +// // The Euler angles are assumed to be stored in the order: roll, pitch, yaw (each in [0,255]) corresponding to [-PI, PI]. +// // Convert the Euler angles to a quaternion using the Tait–Bryan (roll, pitch, yaw) formula. +// vec4 decodeQuatEulerXyz888(uint encoded) { +// // Unpack each 8-bit field. +// uint rollQ = encoded & 0xFFu; +// uint pitchQ = (encoded >> 8u) & 0xFFu; +// uint yawQ = (encoded >> 16u) & 0xFFu; + +// // Convert back to the [0,1] range. +// float normRoll = float(rollQ) / 255.0; +// float normPitch = float(pitchQ) / 255.0; +// float normYaw = float(yawQ) / 255.0; + +// // Map from [0,1] back to [-PI, PI]. +// float roll = normRoll * (2.0 * 3.14159265359) - 3.14159265359; +// float pitch = normPitch * (2.0 * 3.14159265359) - 3.14159265359; +// float yaw = normYaw * (2.0 * 3.14159265359) - 3.14159265359; + +// // Convert Euler angles (roll, pitch, yaw) to quaternion. +// float cr = cos(roll * 0.5); +// float sr = sin(roll * 0.5); +// float cp = cos(pitch * 0.5); +// float sp = sin(pitch * 0.5); +// float cy = cos(yaw * 0.5); +// float sy = sin(yaw * 0.5); + +// // Tait-Bryan (roll, pitch, yaw) to quaternion conversion. +// vec4 q; +// q.w = cr * cp * cy + sr * sp * sy; +// q.x = sr * cp * cy - cr * sp * sy; +// q.y = cr * sp * cy + sr * cp * sy; +// q.z = cr * cp * sy - sr * sp * cy; + +// return q; +// } + +// Pack a Gsplat into a uvec4 +uvec4 packSplat(vec3 center, vec3 scales, vec4 quaternion, vec4 rgba) { + uvec4 uRgba = uvec4(round(clamp(rgba * 255.0, 0.0, 255.0))); + + uint uQuat = encodeQuatOctXy88R8(quaternion); + // uint uQuat = encodeQuatXyz888(quaternion); + // uint uQuat = encodeQuatEulerXyz888(quaternion); + uvec3 uQuat3 = uvec3(uQuat & 0xffu, (uQuat >> 8u) & 0xffu, (uQuat >> 16u) & 0xffu); + + // Encode scales in three uint8s, where 0=>0.0 and 1..=255 stores log scale + uvec3 uScales = uvec3( + (scales.x == 0.0) ? 0u : uint(round(clamp((log(scales.x) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u, + (scales.y == 0.0) ? 0u : uint(round(clamp((log(scales.y) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u, + (scales.z == 0.0) ? 0u : uint(round(clamp((log(scales.z) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u + ); + + // Pack it all into 4 x uint32 + uint word0 = uRgba.r | (uRgba.g << 8u) | (uRgba.b << 16u) | (uRgba.a << 24u); + uint word1 = packHalf2x16(center.xy); + uint word2 = packHalf2x16(vec2(center.z, 0.0)) | (uQuat3.x << 16u) | (uQuat3.y << 24u); + uint word3 = uScales.x | (uScales.y << 8u) | (uScales.z << 16u) | (uQuat3.z << 24u); + return uvec4(word0, word1, word2, word3); +} + +// Unpack a Gsplat from a uvec4 +void unpackSplat(uvec4 packed, out vec3 center, out vec3 scales, out vec4 quaternion, out vec4 rgba) { + uint word0 = packed.x, word1 = packed.y, word2 = packed.z, word3 = packed.w; + + uvec4 uRgba = uvec4(word0 & 0xffu, (word0 >> 8u) & 0xffu, (word0 >> 16u) & 0xffu, (word0 >> 24u) & 0xffu); + rgba = vec4(uRgba) / 255.0; + + center = vec4( + unpackHalf2x16(word1), + unpackHalf2x16(word2 & 0xffffu) + ).xyz; + + uvec3 uScales = uvec3(word3 & 0xffu, (word3 >> 8u) & 0xffu, (word3 >> 16u) & 0xffu); + scales = vec3( + (uScales.x == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.x - 1u) * LN_RESCALE), + (uScales.y == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.y - 1u) * LN_RESCALE), + (uScales.z == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.z - 1u) * LN_RESCALE) + ); + + + uint uQuat = ((word2 >> 16u) & 0xFFFFu) | ((word3 >> 8u) & 0xFF0000u); + quaternion = decodeQuatOctXy88R8(uQuat); + // quaternion = decodeQuatXyz888(uQuat); + // quaternion = decodeQuatEulerXyz888(uQuat); +} + +// Rotate vector v by quaternion q +vec3 quatVec(vec4 q, vec3 v) { + // Rotate vector v by quaternion q + vec3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); +} + +// Apply quaternion q1 after quaternion q2 +vec4 quatQuat(vec4 q1, vec4 q2) { + return vec4( + q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y, + q1.w * q2.y - q1.x * q2.z + q1.y * q2.w + q1.z * q2.x, + q1.w * q2.z + q1.x * q2.y - q1.y * q2.x + q1.z * q2.w, + q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + ); +} + +mat3 scaleQuaternionToMatrix(vec3 s, vec4 q) { + // Compute the matrix of scaling by s then rotating by q + return mat3( + s.x * (1.0 - 2.0 * (q.y * q.y + q.z * q.z)), + s.x * (2.0 * (q.x * q.y + q.w * q.z)), + s.x * (2.0 * (q.x * q.z - q.w * q.y)), + s.y * (2.0 * (q.x * q.y - q.w * q.z)), + s.y * (1.0 - 2.0 * (q.x * q.x + q.z * q.z)), + s.y * (2.0 * (q.y * q.z + q.w * q.x)), + s.z * (2.0 * (q.x * q.z + q.w * q.y)), + s.z * (2.0 * (q.y * q.z - q.w * q.x)), + s.z * (1.0 - 2.0 * (q.x * q.x + q.y * q.y)) + ); +} + +// Spherical lerp between two quaternions +vec4 slerp(vec4 q1, vec4 q2, float t) { + // Compute the cosine of the angle between the two vectors + float cosHalfTheta = dot(q1, q2); + + // If q1=q2 or q1=-q2 then theta = 0 and we can return q1 + if (abs(cosHalfTheta) >= 0.999) { + return q1; + } + + // If q1 and q2 are more than 180 degrees apart, + // we need to negate one to get the shortest path + if (cosHalfTheta < 0.0) { + q2 = -q2; + cosHalfTheta = -cosHalfTheta; + } + + // Calculate temporary values + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + + // Calculate the interpolation factors + float ratioA = sin((1.0 - t) * halfTheta) / sinHalfTheta; + float ratioB = sin(t * halfTheta) / sinHalfTheta; + + // Calculate the interpolated quaternion + return q1 * ratioA + q2 * ratioB; +} + +ivec3 splatTexCoord(int index) { + uint x = uint(index) & SPLAT_TEX_WIDTH_MASK; + uint y = (uint(index) >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK; + uint z = uint(index) >> SPLAT_TEX_LAYER_BITS; + return ivec3(x, y, z); +} diff --git a/src/shaders/splatFragment.glsl b/src/shaders/splatFragment.glsl new file mode 100644 index 0000000..f59aed0 --- /dev/null +++ b/src/shaders/splatFragment.glsl @@ -0,0 +1,35 @@ + +precision highp float; +precision highp int; + +#include + +uniform bool encodeLinear; +uniform float maxStdDev; +uniform bool disableFalloff; +uniform float falloff; + +out vec4 fragColor; + +in vec4 vRgba; +in vec2 vSplatUv; +in vec3 vNdc; + +void main() { + float z = dot(vSplatUv, vSplatUv); + if (z > (maxStdDev * maxStdDev)) { + discard; + } + + float alpha = vRgba.a; + alpha *= mix(1.0, exp(-0.5 * z), falloff); + if (alpha < MIN_ALPHA) { + discard; + } + + vec3 rgb = vRgba.rgb; + if (encodeLinear) { + rgb = srgbToLinear(rgb); + } + fragColor = vec4(rgb, alpha); +} diff --git a/src/shaders/splatVertex.glsl b/src/shaders/splatVertex.glsl new file mode 100644 index 0000000..00a009b --- /dev/null +++ b/src/shaders/splatVertex.glsl @@ -0,0 +1,172 @@ + +precision highp float; +precision highp int; +precision highp usampler2DArray; + +#include + +attribute uint splatIndex; + +out vec4 vRgba; +out vec2 vSplatUv; +out vec3 vNdc; + +uniform vec2 renderSize; +uniform uint numSplats; +uniform vec4 renderToViewQuat; +uniform vec3 renderToViewPos; +uniform float maxStdDev; +uniform float time; +uniform float deltaTime; +uniform bool debugFlag; +uniform bool enable2DGS; +uniform float blurAmount; +uniform float preBlurAmount; +uniform float clipXY; + +uniform usampler2DArray packedSplats; + +void main() { + // Default to outside the frustum so it's discarded if we return early + gl_Position = vec4(0.0, 0.0, 2.0, 1.0); + + if (uint(gl_InstanceID) >= numSplats) { + return; + } + if (splatIndex == 0xffffffffu) { + // Special value reserved for "no splat" + return; + } + + ivec3 texCoord = ivec3( + splatIndex & SPLAT_TEX_WIDTH_MASK, + (splatIndex >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK, + splatIndex >> SPLAT_TEX_LAYER_BITS + ); + uvec4 packed = texelFetch(packedSplats, texCoord, 0); + + vec3 center, scales; + vec4 quaternion, rgba; + unpackSplat(packed, center, scales, quaternion, rgba); + + if (rgba.a < MIN_ALPHA) { + return; + } + bvec3 zeroScales = equal(scales, vec3(0.0)); + if (all(zeroScales)) { + return; + } + + // Compute the view space center of the splat + vec3 viewCenter = quatVec(renderToViewQuat, center) + renderToViewPos; + + // Discard splats behind the camera + if (viewCenter.z >= 0.0) { + return; + } + + // Compute the clip space center of the splat + vec4 clipCenter = projectionMatrix * vec4(viewCenter, 1.0); + + // Discard splats outside near/far planes + if (abs(clipCenter.z) >= clipCenter.w) { + return; + } + + // Discard splats more than clipXY times outside the XY frustum + float clip = clipXY * clipCenter.w; + if (abs(clipCenter.x) > clip || abs(clipCenter.y) > clip) { + return; + } + + // Compute view space quaternion of splat + vec4 viewQuaternion = quatQuat(renderToViewQuat, quaternion); + + if (enable2DGS && any(zeroScales)) { + vRgba = rgba; + vSplatUv = position.xy * maxStdDev; + + vec3 offset; + if (zeroScales.z) { + offset = vec3(vSplatUv.xy * scales.xy, 0.0); + } else if (zeroScales.y) { + offset = vec3(vSplatUv.x * scales.x, 0.0, vSplatUv.y * scales.z); + } else { + offset = vec3(0.0, vSplatUv.xy * scales.yz); + } + + vec3 viewPos = viewCenter + quatVec(viewQuaternion, offset); + gl_Position = projectionMatrix * vec4(viewPos, 1.0); + vNdc = gl_Position.xyz / gl_Position.w; + return; + } + + // Compute NDC center of the splat + vec3 ndcCenter = clipCenter.xyz / clipCenter.w; + + // Compute the 3D covariance matrix of the splat + mat3 RS = scaleQuaternionToMatrix(scales, viewQuaternion); + mat3 cov3D = RS * transpose(RS); + + // Compute the Jacobian of the splat's projection at its center + vec2 focal = 0.5 * renderSize * vec2(projectionMatrix[0][0], projectionMatrix[1][1]); + float invZ = 1.0 / viewCenter.z; + vec2 J1 = focal * invZ; + vec2 J2 = -(J1 * viewCenter.xy) * invZ; + mat3 J = mat3( + J1.x, 0.0, J2.x, + 0.0, J1.y, J2.y, + 0.0, 0.0, 0.0 + ); + + // Compute the 2D covariance by projecting the 3D covariance + // and picking out the XY plane components. + // Keeping below because we may need it in the future + // for skinning deformations. + // mat3 W = transpose(mat3(viewMatrix)); + // mat3 T = W * J; + // mat3 cov2D = transpose(T) * cov3D * T; + mat3 cov2D = transpose(J) * cov3D * J; + float a = cov2D[0][0]; + float d = cov2D[1][1]; + float b = cov2D[0][1]; + + // Optionally pre-blur the splat to match non-antialias optimized splats + a += preBlurAmount; + d += preBlurAmount; + + // Do convolution with a 0.5-pixel Gaussian for anti-aliasing: sqrt(0.3) ~= 0.5 + float detOrig = a * d - b * b; + a += blurAmount; + d += blurAmount; + float det = a * d - b * b; + + // Compute anti-aliasing intensity scaling factor + float blurAdjust = sqrt(max(0.0, detOrig / det)); + rgba.a *= blurAdjust; + if (rgba.a < MIN_ALPHA) { + return; + } + + // Compute the eigenvalue and eigenvectors of the 2D covariance matrix + float eigenAvg = 0.5 * (a + d); + float eigenDelta = sqrt(max(0.0, eigenAvg * eigenAvg - det)); + float eigen1 = eigenAvg + eigenDelta; + float eigen2 = eigenAvg - eigenDelta; + + vec2 eigenVec1 = normalize(vec2((abs(b) < 0.001) ? 1.0 : b, eigen1 - a)); + vec2 eigenVec2 = vec2(eigenVec1.y, -eigenVec1.x); + + float scale1 = position.x * min(MAX_PIXEL_RADIUS, maxStdDev * sqrt(eigen1)); + float scale2 = position.y * min(MAX_PIXEL_RADIUS, maxStdDev * sqrt(eigen2)); + + // Compute the NDC coordinates for the ellipsoid's diagonal axes. + vec2 pixelOffset = eigenVec1 * scale1 + eigenVec2 * scale2; + vec2 ndcOffset = (2.0 / renderSize) * pixelOffset; + vec3 ndc = vec3(ndcCenter.xy + ndcOffset, ndcCenter.z); + + vRgba = rgba; + vSplatUv = position.xy * maxStdDev; + vNdc = ndc; + gl_Position = vec4(ndc.xy * clipCenter.w, clipCenter.zw); +} diff --git a/src/splatConstructors.ts b/src/splatConstructors.ts new file mode 100644 index 0000000..8122bce --- /dev/null +++ b/src/splatConstructors.ts @@ -0,0 +1,413 @@ +import * as THREE from "three"; +import { PackedSplats } from "./PackedSplats"; +import { SplatMesh } from "./SplatMesh"; + +export function constructGrid({ + // PackedSplats object to add splats to + splats, + // min and max box extents of the grid + extents, + // step size along each grid axis + stepSize = 1, + // spherical radius of each Gsplat + pointRadius = 0.01, + // relative size of the "shadow copy" of each Gsplat placed behind it + pointShadowScale = 2.0, + // Gsplat opacity + opacity = 1.0, + // Gsplat color (THREE.Color) or function to set color for position: + // ((THREE.Color, THREE.Vector3) => void) (default: RGB-modulated grid) + color, +}: { + splats: PackedSplats; + extents: THREE.Box3; + stepSize?: number; + pointRadius?: number; + pointShadowScale?: number; + opacity?: number; + color?: THREE.Color | ((color: THREE.Color, point: THREE.Vector3) => void); +}) { + const EPSILON = 1.0e-6; + const center = new THREE.Vector3(); + const scales = new THREE.Vector3(); + const quaternion = new THREE.Quaternion(0, 0, 0, 1); + if (color == null) { + color = (color, point) => + color.set( + 0.55 + 0.45 * Math.cos(point.x * 1), + 0.55 + 0.45 * Math.cos(point.y * 1), + 0.55 + 0.45 * Math.cos(point.z * 1), + ); + } + const pointColor = new THREE.Color(); + for (let z = extents.min.z; z < extents.max.z + EPSILON; z += stepSize) { + for (let y = extents.min.y; y < extents.max.y + EPSILON; y += stepSize) { + for (let x = extents.min.x; x < extents.max.x + EPSILON; x += stepSize) { + center.set(x, y, z); + for (let layer = 0; layer < 2; ++layer) { + scales.setScalar(pointRadius * (layer ? 1 : pointShadowScale)); + if (!layer) { + pointColor.setScalar(0.0); + } else if (typeof color === "function") { + color(pointColor, center); + } else { + pointColor.copy(color); + } + splats.pushSplat(center, scales, quaternion, opacity, pointColor); + } + } + } + } +} + +export function constructAxes({ + // PackedSplats object to add splats to + splats, + // scale (Gsplat scale along axis) + scale = 0.25, + // radius of the axes (Gsplat scale orthogonal to axis) + axisRadius = 0.0075, + // relative size of the "shadow copy" of each Gsplat placed behind it + axisShadowScale = 2.0, + // origins of the axes (default single axis at origin) + origins = [new THREE.Vector3()], +}: { + splats: PackedSplats; + scale?: number; + axisRadius?: number; + axisShadowScale?: number; + origins?: THREE.Vector3[]; +}) { + const center = new THREE.Vector3(); + const scales = new THREE.Vector3(); + const quaternion = new THREE.Quaternion(0, 0, 0, 1); + const color = new THREE.Color(); + const opacity = 1.0; + for (const origin of origins) { + for (let axis = 0; axis < 3; ++axis) { + center.set( + origin.x + (axis === 0 ? scale : 0), + origin.y + (axis === 1 ? scale : 0), + origin.z + (axis === 2 ? scale : 0), + ); + for (let layer = 0; layer < 2; ++layer) { + scales.set( + (axis === 0 ? scale : axisRadius) * (layer ? 1 : axisShadowScale), + (axis === 1 ? scale : axisRadius) * (layer ? 1 : axisShadowScale), + (axis === 2 ? scale : axisRadius) * (layer ? 1 : axisShadowScale), + ); + color.setRGB( + layer === 0 ? 0.0 : axis === 0 ? 1.0 : 0.0, + layer === 0 ? 0.0 : axis === 1 ? 1.0 : 0.0, + layer === 0 ? 0.0 : axis === 2 ? 1.0 : 0.0, + ); + splats.pushSplat(center, scales, quaternion, opacity, color); + } + } + } +} + +export function constructSpherePoints({ + // PackedSplats object to add splats to + splats, + // center of the sphere (default: origin) + origin = new THREE.Vector3(), + // radius of the sphere + radius = 1.0, + // maximum depth of recursion for subdividing the sphere + // Warning: Gsplat count grows exponentially with depth + maxDepth = 3, + // filter function to apply to each point, for example to select + // points in a certain direction or other function ((THREE.Vector3) => boolean) + // (default: null) + filter = null, + // radius of each oriented Gsplat + pointRadius = 0.02, + // flatness of each oriented Gsplat + pointThickness = 0.001, + // color of each Gsplat (THREE.Color) or function to set color for point: + // ((THREE.Color, THREE.Vector3) => void) (default: white) + color = new THREE.Color(1, 1, 1), +}: { + splats: PackedSplats; + origin?: THREE.Vector3; + radius?: number; + maxDepth?: number; + filter?: ((point: THREE.Vector3) => boolean) | null; + pointRadius?: number; + pointThickness?: number; + color?: THREE.Color | ((color: THREE.Color, point: THREE.Vector3) => void); +}) { + const pointsHash: { [key: string]: THREE.Vector3 } = {}; + + function addPoint(p: THREE.Vector3) { + if (filter && !filter(p)) { + return; + } + const key = `${p.x},${p.y},${p.z}`; + if (!pointsHash[key]) { + pointsHash[key] = p; + } + } + + function recurse( + depth: number, + p0: THREE.Vector3, + p1: THREE.Vector3, + p2: THREE.Vector3, + ) { + addPoint(p0); + addPoint(p1); + addPoint(p2); + if (depth >= maxDepth) { + return; + } + const p01 = new THREE.Vector3().addVectors(p0, p1).normalize(); + const p12 = new THREE.Vector3().addVectors(p1, p2).normalize(); + const p20 = new THREE.Vector3().addVectors(p2, p0).normalize(); + recurse(depth + 1, p0, p01, p20); + recurse(depth + 1, p01, p1, p12); + recurse(depth + 1, p20, p12, p2); + recurse(depth + 1, p01, p12, p20); + } + + for (const x of [-1, 1]) { + for (const y of [-1, 1]) { + for (const z of [-1, 1]) { + const p0 = new THREE.Vector3(x, 0, 0); + const p1 = new THREE.Vector3(0, y, 0); + const p2 = new THREE.Vector3(0, 0, z); + recurse(0, p0, p1, p2); + } + } + } + + const points = Object.values(pointsHash); + const scales = new THREE.Vector3(pointRadius, pointRadius, pointThickness); + const quaternion = new THREE.Quaternion(); + const pointColor = typeof color === "function" ? new THREE.Color() : color; + for (const point of points) { + quaternion.setFromUnitVectors(new THREE.Vector3(0, 0, -1), point); + if (typeof color === "function") { + color(pointColor, point); + } + point.multiplyScalar(radius); + point.add(origin); + splats.pushSplat(point, scales, quaternion, 1.0, pointColor); + } +} + +export function textSplats({ + // text string to display + text, + // browser font to render text with (default: "Arial") + font, + // font size in pixels/Gsplats (default: 32) + fontSize, + // SplatMesh.recolor tint assuming white Gsplats (default: white) + color, + // Individual Gsplat color (default: white) + rgb, + // Gsplat radius (default: 0.8 covers 1-unit spacing well) + dotRadius, + // text alignment: "left", "center", "right", "start", "end" (default: "start") + textAlign, + // line spacing multiplier, lines delimited by "\n" (default: 1.0) + lineHeight, +}: { + text: string; + font?: string; + fontSize?: number; + color?: THREE.Color; + rgb?: THREE.Color; + dotRadius?: number; + textAlign?: "left" | "center" | "right" | "start" | "end"; + lineHeight?: number; +}) { + font = font ?? "Arial"; + fontSize = fontSize ?? 32; + color = color ?? new THREE.Color(1, 1, 1); + dotRadius = dotRadius ?? 0.8; + textAlign = textAlign ?? "start"; + lineHeight = lineHeight ?? 1; + const lines = text.split("\n"); + + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + if (!ctx) { + throw new Error("Failed to create canvas context"); + } + + ctx.font = `${fontSize}px ${font}`; + ctx.textAlign = textAlign; + const metrics = ctx.measureText(""); + const fontHeight = + metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent; + + let minLeft = Number.POSITIVE_INFINITY; + let maxRight = Number.NEGATIVE_INFINITY; + let minTop = Number.POSITIVE_INFINITY; + let maxBottom = Number.NEGATIVE_INFINITY; + for (let line = 0; line < lines.length; ++line) { + const metrics = ctx.measureText(lines[line]); + const y = fontHeight * lineHeight * line; + minLeft = Math.min(minLeft, -metrics.actualBoundingBoxLeft); + maxRight = Math.max(maxRight, metrics.actualBoundingBoxRight); + minTop = Math.min(minTop, y - metrics.actualBoundingBoxAscent); + maxBottom = Math.max(maxBottom, y + metrics.actualBoundingBoxDescent); + } + const originLeft = Math.floor(minLeft); + const originTop = Math.floor(minTop); + const width = Math.ceil(maxRight) - originLeft; + const height = Math.ceil(maxBottom) - originTop; + canvas.width = width; + canvas.height = height; + + ctx.font = `${fontSize}px ${font}`; + ctx.textAlign = textAlign; + ctx.textBaseline = "alphabetic"; + ctx.fillStyle = "#FFFFFF"; + for (let i = 0; i < lines.length; ++i) { + const y = fontHeight * lineHeight * i - originTop; + ctx.fillText(lines[i], -originLeft, y); + } + + const imageData = ctx.getImageData(0, 0, width, height); + const rgba = new Uint8Array(imageData.data.buffer); + const splats = new PackedSplats(); + const center = new THREE.Vector3(); + const scales = new THREE.Vector3().setScalar(dotRadius); + const quaternion = new THREE.Quaternion(0, 0, 0, 1); + rgb = rgb ?? new THREE.Color(1, 1, 1); + + let offset = 0; + for (let y = 0; y < height; ++y) { + for (let x = 0; x < width; ++x) { + const a = rgba[offset + 3]; + if (a > 0) { + const opacity = a / 255; + center.set(x - 0.5 * (width - 1), 0.5 * (height - 1) - y, 0); + splats.pushSplat(center, scales, quaternion, opacity, rgb); + } + offset += 4; + } + } + + const mesh = new SplatMesh({ packedSplats: splats }); + mesh.recolor = color; + return mesh; +} + +export function imageSplats({ + // URL of the image to convert to splats (example: `url: "./image.png"`) + url, + // Radius of each Gsplat, default covers 1-unit spacing well (default: 0.8) + dotRadius, + // Subsampling factor for the image. Higher values reduce resolution, + // for example 2 will halve the width and height by averaging (default: 1) + subXY, + // Optional callback function to modify each Gsplat before it's added. + // Return null to skip adding the Gsplat, or a number to set the opacity + // and add the Gsplat with parameter values in the objects center, rgba etc. were + // passed into the forEachSplat callback. Ending the callback in `return opacity;` + // will retain the original opacity. + // ((width: number, height: number, index: number, center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color) => number | null) + forEachSplat, +}: { + url: string; + dotRadius?: number; + subXY?: number; + forEachSplat?: ( + width: number, + height: number, + index: number, + center: THREE.Vector3, + scales: THREE.Vector3, + quaternion: THREE.Quaternion, + opacity: number, + color: THREE.Color, + ) => number | null; +}): SplatMesh { + dotRadius = dotRadius ?? 0.8; + subXY = Math.max(1, Math.floor(subXY ?? 1)); + + return new SplatMesh({ + constructSplats: async (splats) => { + return new Promise((resolve, reject) => { + const img = new Image(); + img.onerror = reject; + img.onload = () => { + const { width, height } = img; + const canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext("2d"); + if (!ctx) { + reject(new Error("Failed to create canvas context")); + return; + } + ctx.imageSmoothingEnabled = true; + ctx.imageSmoothingQuality = "high"; + const destWidth = Math.round(width / subXY); + const destHeight = Math.round(height / subXY); + ctx.drawImage(img, 0, 0, destWidth, destHeight); + try { + const imageData = ctx.getImageData(0, 0, destWidth, destHeight); + const rgba = new Uint8Array(imageData.data.buffer); + + const center = new THREE.Vector3(); + const scales = new THREE.Vector3().setScalar(dotRadius); + const quaternion = new THREE.Quaternion(0, 0, 0, 1); + const rgb = new THREE.Color(); + + let index = 0; + for (let y = 0; y < destHeight; ++y) { + for (let x = 0; x < destWidth; ++x) { + const offset = index * 4; + const a = rgba[offset + 3]; + if (a > 0) { + let opacity = a / 255; + rgb.set( + rgba[offset + 0] / 255, + rgba[offset + 1] / 255, + rgba[offset + 2] / 255, + ); + center.set( + x - 0.5 * (destWidth - 1), + 0.5 * (destHeight - 1) - y, + 0, + ); + scales.setScalar(dotRadius); + quaternion.set(0, 0, 0, 1); + let push = true; + if (forEachSplat) { + const maybeOpacity = forEachSplat( + destWidth, + destHeight, + index, + center, + scales, + quaternion, + opacity, + rgb, + ); + opacity = maybeOpacity ?? opacity; + push = maybeOpacity !== null; + } + if (push) { + splats.pushSplat(center, scales, quaternion, opacity, rgb); + } + } + index += 1; + } + } + resolve(); + } catch (error) { + reject(error); + } + }; + img.src = url; + }); + }, + }); +} diff --git a/src/splatWorker.ts b/src/splatWorker.ts new file mode 100644 index 0000000..2c9a430 --- /dev/null +++ b/src/splatWorker.ts @@ -0,0 +1,128 @@ +import { getArrayBuffers } from "./utils.js"; +import BundledWorker from "./worker?worker&inline"; + +// SplatWorker is an internal class that manages a WebWorker for executing +// longer running CPU tasks such as Gsplat file decoding and sorting. +// Although a SplatWorker can be created and used directly, the utility +// function withWorker() is recommended to allocate from a managed +// pool of SplatWorkers. + +export class SplatWorker { + worker: Worker; + messages: Record< + number, + { resolve: (value: unknown) => void; reject: (reason?: unknown) => void } + > = {}; + messageIdNext = 0; + + constructor() { + // this.worker = new Worker(new URL("./worker", import.meta.url), { type: "module" }); + this.worker = new BundledWorker(); + this.worker.onmessage = (event) => this.onMessage(event); + } + + makeMessageId(): number { + return ++this.messageIdNext; + } + + makeMessagePromiseId(): { id: number; promise: Promise } { + const id = this.makeMessageId(); + const promise = new Promise((resolve, reject) => { + this.messages[id] = { resolve, reject }; + }); + return { id, promise }; + } + + onMessage(event: MessageEvent) { + // console.log("SplatWorker.onMessage:", event); + const { id, result, error } = event.data; + // console.log(`SplatWorker.onMessage(${id}):`, result, error); + const handler = this.messages[id]; + if (handler) { + delete this.messages[id]; + if (error) { + handler.reject(error); + } else { + handler.resolve(result); + } + } + } + + // Invoke an RPC on the worker with the given name and arguments. + // The normal usage of a worker is to run one activity at a time, + // but this function allows for concurrent calls, tagging each request + // with a unique message Id and awaiting a response to that same Id. + // The method will automatically transfer any ArrayBuffers in the + // arguments to the worker. If you'd like to transfer a copy of a + // buffer then you must clone it before passing to this function. + async call(name: string, args: unknown): Promise { + const { id, promise } = this.makeMessagePromiseId(); + // console.log(`SplatWorker.call(${name}):`, args); + this.worker.postMessage( + { name, args, id }, + { transfer: getArrayBuffers(args) }, + ); + return promise; + } +} + +let maxWorkers = 4; + +let numWorkers = 0; +const freeWorkers: SplatWorker[] = []; +const workerQueue: ((worker: SplatWorker) => void)[] = []; + +// Set the maximum number of workers to allocate for the pool. (default: 4) +export function setWorkerPool(count = 4) { + maxWorkers = count; +} + +// Allocate a worker from the pool. If none are available and we are below the +// maximum, create a new one. Otherwise, add the request to a queue and wait +// for it to be fulfilled. +export async function allocWorker(): Promise { + const worker = freeWorkers.shift(); + if (worker) { + return worker; + } + + if (numWorkers < maxWorkers) { + const worker = new SplatWorker(); + numWorkers += 1; + return worker; + } + + return new Promise((resolve) => { + workerQueue.push(resolve); + }); +} + +// Return a worker to the pool. Pass the worker to any pending waiter. +export function freeWorker(worker: SplatWorker) { + if (numWorkers > maxWorkers) { + // Worker no longer needed + numWorkers -= 1; + return; + } + + const waiter = workerQueue.shift(); + if (waiter) { + waiter(worker); + return; + } + + freeWorkers.push(worker); +} + +// Allocate a worker from the pool and invoke the callback with the worker. +// When the callback completes, the worker will be returned to the pool. +export async function withWorker( + callback: (worker: SplatWorker) => Promise, +): Promise { + const worker = await allocWorker(); + try { + return await callback(worker); + } finally { + freeWorker(worker); + } +} diff --git a/src/spz.ts b/src/spz.ts new file mode 100644 index 0000000..0648d19 --- /dev/null +++ b/src/spz.ts @@ -0,0 +1,185 @@ +import { GunzipReader, fromHalf } from "./utils"; + +// SPZ file format reader + +export class SpzReader { + fileBytes: Uint8Array; + reader: GunzipReader; + + version: number; + numSplats: number; + shDegree: number; + fractionalBits: number; + flags: number; + flagAntiAlias: boolean; + reserved: number; + parsed: boolean; + + constructor({ fileBytes }: { fileBytes: Uint8Array | ArrayBuffer }) { + this.fileBytes = + fileBytes instanceof ArrayBuffer ? new Uint8Array(fileBytes) : fileBytes; + this.reader = new GunzipReader({ fileBytes: this.fileBytes }); + + const header = new DataView(this.reader.read(16).buffer); + if (header.getUint32(0, true) !== 0x5053474e) { + throw new Error("Invalid SPZ file"); + } + this.version = header.getUint32(4, true); + if (this.version < 1 || this.version > 2) { + throw new Error(`Unsupported SPZ version: ${this.version}`); + } + + this.numSplats = header.getUint32(8, true); + this.shDegree = header.getUint8(12); + this.fractionalBits = header.getUint8(13); + this.flags = header.getUint8(14); + this.flagAntiAlias = (this.flags & 0x01) !== 0; + this.reserved = header.getUint8(15); + this.parsed = false; + } + + parseSplats( + centerCallback: (index: number, x: number, y: number, z: number) => void, + alphaCallback: (index: number, alpha: number) => void, + rgbCallback: (index: number, r: number, g: number, b: number) => void, + scalesCallback: ( + index: number, + scaleX: number, + scaleY: number, + scaleZ: number, + ) => void, + quatCallback: ( + index: number, + quatX: number, + quatY: number, + quatZ: number, + quatW: number, + ) => void, + shCallback?: ( + index: number, + sh1: Float32Array, + sh2?: Float32Array, + sh3?: Float32Array, + ) => void, + ) { + if (this.parsed) { + throw new Error("SPZ file already parsed"); + } + this.parsed = true; + + if (this.version === 1) { + // float16 centers + const centerBytes = this.reader.read(this.numSplats * 3 * 2); + const centerUint16 = new Uint16Array(centerBytes.buffer); + for (let i = 0; i < this.numSplats; i++) { + const i3 = i * 3; + const x = fromHalf(centerUint16[i3]); + const y = fromHalf(centerUint16[i3 + 1]); + const z = fromHalf(centerUint16[i3 + 2]); + centerCallback(i, x, y, z); + } + } else if (this.version === 2) { + // 24-bit fixed-point centers + const fixed = 1 << this.fractionalBits; + const centerBytes = this.reader.read(this.numSplats * 3 * 3); + for (let i = 0; i < this.numSplats; i++) { + const i9 = i * 9; + const x = + (((centerBytes[i9 + 2] << 24) | + (centerBytes[i9 + 1] << 16) | + (centerBytes[i9] << 8)) >> + 8) / + fixed; + const y = + (((centerBytes[i9 + 5] << 24) | + (centerBytes[i9 + 4] << 16) | + (centerBytes[i9 + 3] << 8)) >> + 8) / + fixed; + const z = + (((centerBytes[i9 + 8] << 24) | + (centerBytes[i9 + 7] << 16) | + (centerBytes[i9 + 6] << 8)) >> + 8) / + fixed; + centerCallback(i, x, y, z); + } + } else { + throw new Error("Unreachable"); + } + + { + const bytes = this.reader.read(this.numSplats); + for (let i = 0; i < this.numSplats; i++) { + alphaCallback(i, bytes[i] / 255); + } + } + { + const rgbBytes = this.reader.read(this.numSplats * 3); + const scale = SH_C0 / 0.15; + for (let i = 0; i < this.numSplats; i++) { + const i3 = i * 3; + const r = (rgbBytes[i3] / 255 - 0.5) * scale + 0.5; + const g = (rgbBytes[i3 + 1] / 255 - 0.5) * scale + 0.5; + const b = (rgbBytes[i3 + 2] / 255 - 0.5) * scale + 0.5; + rgbCallback(i, r, g, b); + } + } + { + const scalesBytes = this.reader.read(this.numSplats * 3); + for (let i = 0; i < this.numSplats; i++) { + const i3 = i * 3; + const scaleX = Math.exp(scalesBytes[i3] / 16 - 10); + const scaleY = Math.exp(scalesBytes[i3 + 1] / 16 - 10); + const scaleZ = Math.exp(scalesBytes[i3 + 2] / 16 - 10); + scalesCallback(i, scaleX, scaleY, scaleZ); + } + } + { + const quatBytes = this.reader.read(this.numSplats * 3); + for (let i = 0; i < this.numSplats; i++) { + const i3 = i * 3; + const quatX = quatBytes[i3] / 127.5 - 1; + const quatY = quatBytes[i3 + 1] / 127.5 - 1; + const quatZ = quatBytes[i3 + 2] / 127.5 - 1; + const quatW = Math.sqrt( + Math.max(0, 1 - quatX * quatX - quatY * quatY - quatZ * quatZ), + ); + quatCallback(i, quatX, quatY, quatZ, quatW); + } + } + + if (shCallback && this.shDegree >= 1) { + const sh1 = new Float32Array(3 * 3); + const sh2 = this.shDegree >= 2 ? new Float32Array(5 * 3) : undefined; + const sh3 = this.shDegree >= 3 ? new Float32Array(7 * 3) : undefined; + const shBytes = this.reader.read( + this.numSplats * SH_DEGREE_TO_VECS[this.shDegree] * 3, + ); + + let offset = 0; + for (let i = 0; i < this.numSplats; i++) { + for (let j = 0; j < 9; ++j) { + sh1[j] = (shBytes[offset + j] - 128) / 128; + } + offset += 9; + if (sh2) { + for (let j = 0; j < 15; ++j) { + sh2[j] = (shBytes[offset + j] - 128) / 128; + } + offset += 15; + } + if (sh3) { + for (let j = 0; j < 21; ++j) { + sh3[j] = (shBytes[offset + j] - 128) / 128; + } + offset += 21; + } + shCallback(i, sh1, sh2, sh3); + } + } + } +} + +const SH_DEGREE_TO_VECS: Record = { 1: 3, 2: 8, 3: 15 }; +const SH_C0 = 0.28209479177387814; diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..a01141c --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,1260 @@ +import { Gunzip } from "fflate"; +import * as THREE from "three"; + +// Miscellaneous utility functions for Forge + +import { + LN_RESCALE, + LN_SCALE_MIN, + SPLAT_TEX_HEIGHT, + SPLAT_TEX_MIN_HEIGHT, + SPLAT_TEX_WIDTH, +} from "./defines.js"; +import { unindent } from "./dyno/base.js"; + +const f32buffer = new Float32Array(1); +const u32buffer = new Uint32Array(f32buffer.buffer); + +// Reinterpret the bits of a float32 as a uint32 +export function floatBitsToUint(f: number): number { + f32buffer[0] = f; + return u32buffer[0]; +} + +// Reinterpret the bits of a uint32 as a float32 +export function uintBitsToFloat(u: number): number { + u32buffer[0] = u; + return f32buffer[0]; +} + +// Encode a number as a float16, stored as a uint16 number. +export function toHalf(f: number): number { + // Store the value into the shared Float32 array. + f32buffer[0] = f; + const bits = u32buffer[0]; + + // Extract sign (1 bit), exponent (8 bits), and fraction (23 bits) + const sign = (bits >> 31) & 0x1; + const exp = (bits >> 23) & 0xff; + const frac = bits & 0x7fffff; + const halfSign = sign << 15; + + // Handle special cases: NaN and Infinity + if (exp === 0xff) { + // NaN: set all exponent bits to 1 and some nonzero fraction bits. + if (frac !== 0) { + return halfSign | 0x7fff; + } + // Infinity + return halfSign | 0x7c00; + } + + // Adjust the exponent from float32 bias (127) to float16 bias (15) + const newExp = exp - 127 + 15; + + // Handle overflow: too large to represent in half precision. + if (newExp >= 0x1f) { + return halfSign | 0x7c00; // Infinity + } + if (newExp <= 0) { + // Handle subnormals and underflow. + if (newExp < -10) { + // Too small: underflows to zero. + return halfSign; + } + // Convert to subnormal: add the implicit leading 1 to the fraction, + // then shift to align with the half-precision's 10 fraction bits. + const subFrac = (frac | 0x800000) >> (1 - newExp + 13); + return halfSign | subFrac; + } + + // Normalized half-precision number: shift fraction to fit into 10 bits. + const halfFrac = frac >> 13; + return halfSign | (newExp << 10) | halfFrac; +} + +// Convert a float16 stored as a uint16 number back to a float32. +export function fromHalf(h: number): number { + // Extract the sign (1 bit), exponent (5 bits), and fraction (10 bits) + const sign = (h >> 15) & 0x1; + const exp = (h >> 10) & 0x1f; + const frac = h & 0x3ff; + + let f32bits: number; + + if (exp === 0) { + if (frac === 0) { + // Zero (positive or negative) + f32bits = sign << 31; + } else { + // Subnormal half-precision number. + // Normalize the subnormal number: + let mant = frac; + let e = -14; // For half, the exponent for subnormals is fixed at -14. + // Shift left until the implicit leading 1 is in place. + while ((mant & 0x400) === 0) { + // 0x400 === 1 << 10 + mant <<= 1; + e--; + } + // Remove the leading 1 (which is now implicit) + mant &= 0x3ff; + // Convert the half exponent (e) to the 32-bit float exponent: + const newExp = e + 127; // 32-bit float bias is 127. + const newFrac = mant << 13; // Align to 23-bit fraction (23 - 10 = 13) + f32bits = (sign << 31) | (newExp << 23) | newFrac; + } + } else if (exp === 0x1f) { + // Handle special cases for Infinity and NaN. + if (frac === 0) { + // Infinity + f32bits = (sign << 31) | 0x7f800000; + } else { + // NaN (we choose a quiet NaN) + f32bits = (sign << 31) | 0x7fc00000; + } + } else { + // Normalized half-precision number. + // Adjust exponent from half (bias 15) to float32 (bias 127) + const newExp = exp - 15 + 127; + const newFrac = frac << 13; + f32bits = (sign << 31) | (newExp << 23) | newFrac; + } + + // Write the 32-bit bit pattern to the shared buffer, + // then read it as a float32 to return a JavaScript number. + u32buffer[0] = f32bits; + return f32buffer[0]; +} + +// Convert a number 0..1 to a 0..255 uint +export function floatToUint8(v: number): number { + // Converts from 0..1 float to 0..255 uint8 + return Math.max(0, Math.min(255, Math.round(v * 255))); +} + +// Convert a number -1..1 to a -127..127 int +export function floatToSint8(v: number): number { + // Converts from -1..1 float to -127..127 int8 + return Math.max(-127, Math.min(127, Math.round(v * 127))); +} + +// Convert a 0..255 uint to a 0..1 float +export function Uint8ToFloat(v: number): number { + // Converts from 0..255 uint8 to 0..1 float + return v / 255; +} + +// Convert a -127..127 int to a -1..1 float +export function Sint8ToFloat(v: number): number { + // Converts from -127..127 int8 to -1..1 float + return v / 127; +} + +// A simple utility class for caching a fixed number of items +export class DataCache { + // Maximum number of items to cache + maxItems: number; + + // Function to fetch data for a key + asyncFetch: (key: string) => Promise; + + // Array of cached items + items: { key: string; data: unknown }[]; + + // Create a DataCache with a given function that fetches data not in the cache. + constructor({ + asyncFetch, + maxItems = 5, + }: { asyncFetch: (key: string) => Promise; maxItems?: number }) { + this.asyncFetch = asyncFetch; + this.maxItems = maxItems; + this.items = []; + } + + // Fetch data for the key, returning cached data if available. + async getFetch(key: string): Promise { + // Fetches data for a key and caches it, returns cached data if available. + const index = this.items.findIndex((item) => item.key === key); + if (index >= 0) { + // Data exists in our cache, move it to the end of the array + const item = this.items.splice(index, 1)[0]; + this.items.push(item); + // Return the cached data + return item.data; + } + + // Fetch the data from the asyncFetch function + const data = await this.asyncFetch(key); + // Add the data to the cache + this.items.push({ key, data }); + // If the cache is too large, remove the oldest accessed item + while (this.items.length > this.maxItems) { + this.items.shift(); + } + // Return the fetched data + return data; + } +} + +// Like Array.map but for objects +export function mapObject( + obj: Record, + fn: (value: unknown, key: string) => unknown, +): Record { + // Maps over an object, applying a function to each value and key + const entries = Object.entries(obj).map(([key, value]) => [ + key, + fn(value, key), + ]); + // Returns a new object with the mapped values + return Object.fromEntries(entries); +} + +// Like Array.map().filter() but for objects. +// The callback fn() should return undefined to filter out the key. +export function mapFilterObject( + obj: Record, + fn: (value: unknown, key: string) => unknown, +): Record { + // Maps over an object, applying a function to each value and key + // If no return (or return undefined), the key is not included in the result + const entries = Object.entries(obj) + .map(([key, value]) => [key, fn(value, key)]) + .filter(([_, value]) => value !== undefined); + // Returns a new object with the filtered values + return Object.fromEntries(entries); +} + +// Recursively finds all ArrayBuffers in an object and returns them as an array +// to use as transferable objects to send between workers. +export function getArrayBuffers(ctx: unknown): Transferable[] { + const buffers: ArrayBuffer[] = []; + const seen = new Set(); + + function traverse(obj: unknown) { + if (obj && typeof obj === "object" && !seen.has(obj)) { + seen.add(obj); + + if (obj instanceof ArrayBuffer) { + buffers.push(obj); + } else if (ArrayBuffer.isView(obj)) { + // Handles TypedArrays and DataView + buffers.push(obj.buffer); + } else if (Array.isArray(obj)) { + obj.forEach(traverse); + } else { + Object.values(obj).forEach(traverse); + } + } + } + + traverse(ctx); + return buffers; +} + +// Create an array of the given size and initialize element with initFunction() +export function newArray( + n: number, + initFunction: (index: number) => T, +): T[] { + // Creates a new array and calls a constructor function for each element with index + return new Array(n).fill(null).map((_, i) => initFunction(i)); +} + +// A free list that has a pool of items of type T, with callbacks +// for constructing, disposing, and checking if an item is valid for the given args. +export class FreeList { + items: T[]; + allocate: (args: Args) => T; + dispose?: (item: T) => void; + valid: (item: T, args: Args) => boolean; + + constructor({ + // Allocate a new item with the given args + allocate, + // Dispose of an item (optional, if GC is enough) + dispose, + // Check if an existing item in the list is valid for the given args, + // allowing you to store heterogeneous items in the list. + valid, + }: { + allocate: (args: Args) => T; + dispose?: (item: T) => void; + valid: (item: T, args: Args) => boolean; + }) { + this.items = []; + this.allocate = allocate; + this.dispose = dispose; + this.valid = valid; + } + + // Allocate a new item from the free list, first checking if a existing item + // on the freelist is valid for the given args. + alloc(args: Args): T { + while (true) { + const item = this.items.pop(); + if (!item) { + // No items in the free list, allocate a new one + break; + } + if (this.valid(item, args)) { + // Found a valid item, return it + // console.log(`FreeList.alloc(${JSON.stringify(args)}): found valid item. Reusing...`); + return item; + } + // Item isn't valid for our args, dispose of it and try again + if (this.dispose) { + // console.log(`FreeList.alloc(${JSON.stringify(args)}): disposing invalid item.`); + this.dispose(item); + } + } + // console.log(`FreeList.alloc(${JSON.stringify(args)}): allocating new item`); + return this.allocate(args); + } + + free(item: T) { + // Return item to the free list + this.items.push(item); + } + + disposeAll() { + // Disposes of all items in the free list + let item: T | undefined; + item = this.items.pop(); + while (item) { + if (this.dispose) { + this.dispose(item); + } + item = this.items.pop(); + } + } +} + +// Encode a PackedSplat as 4 consecutive Uint32 elements in the packedSplats array. +// The center coordinates x,y,z are encoded as float16, the scales x,y,z as a +// logarithmic uint8, rotation as three uint8s representing rotation axis and angle, +// and RGBA as 4xuint8. +export function setPackedSplat( + packedSplats: Uint32Array, + index: number, + x: number, + y: number, + z: number, + scaleX: number, + scaleY: number, + scaleZ: number, + quatX: number, + quatY: number, + quatZ: number, + quatW: number, + opacity: number, + r: number, + g: number, + b: number, +) { + const uR = floatToUint8(r); + const uG = floatToUint8(g); + const uB = floatToUint8(b); + const uA = floatToUint8(opacity); + + // Alternate internal encodings commented out below. + const uQuat = encodeQuatOctXy88R8( + new THREE.Quaternion(quatX, quatY, quatZ, quatW), + ); + // const uQuat = encodeQuatXyz888(new THREE.Quaternion(quatX, quatY, quatZ, quatW)); + // const uQuat = encodeQuatEulerXyz888(new THREE.Quaternion(quatX, quatY, quatZ, quatW)); + const uQuatX = uQuat & 0xff; + const uQuatY = (uQuat >>> 8) & 0xff; + const uQuatZ = (uQuat >>> 16) & 0xff; + + // Allow scales below LN_SCALE_MIN to be encoded as 0, which signifies a 2DGS + const uScaleX = + scaleX === 0.0 + ? 0 + : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleX) - LN_SCALE_MIN) / LN_RESCALE) + 1, + ), + ); + const uScaleY = + scaleY === 0.0 + ? 0 + : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleY) - LN_SCALE_MIN) / LN_RESCALE) + 1, + ), + ); + const uScaleZ = + scaleZ === 0.0 + ? 0 + : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleZ) - LN_SCALE_MIN) / LN_RESCALE) + 1, + ), + ); + + const uCenterX = toHalf(x); + const uCenterY = toHalf(y); + const uCenterZ = toHalf(z); + + // Encode the splat as 4 consecutive Uint32 elements + const i4 = index * 4; + packedSplats[i4] = uR | (uG << 8) | (uB << 16) | (uA << 24); + packedSplats[i4 + 1] = uCenterX | (uCenterY << 16); + packedSplats[i4 + 2] = uCenterZ | (uQuatX << 16) | (uQuatY << 24); + packedSplats[i4 + 3] = + uScaleX | (uScaleY << 8) | (uScaleZ << 16) | (uQuatZ << 24); +} + +// Encode the center coordinates x,y,z in the packedSplats Uint32Array, +// leaving all other fields as is. +export function setPackedSplatCenter( + packedSplats: Uint32Array, + index: number, + x: number, + y: number, + z: number, +) { + const uCenterX = toHalf(x); + const uCenterY = toHalf(y); + const uCenterZ = toHalf(z); + + const i4 = index * 4; + packedSplats[i4 + 1] = uCenterX | (uCenterY << 16); + packedSplats[i4 + 2] = uCenterZ | (packedSplats[i4 + 2] & 0xffff0000); +} + +// Encode the scales x,y,z in the packedSplats Uint32Array, leaving all other fields as is. +export function setPackedSplatScales( + packedSplats: Uint32Array, + index: number, + scaleX: number, + scaleY: number, + scaleZ: number, +) { + // Allow scales below LN_SCALE_MIN to be encoded as 0, which signifies a 2DGS + const uScaleX = + scaleX === 0.0 + ? 0 + : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleX) - LN_SCALE_MIN) / LN_RESCALE) + 1, + ), + ); + const uScaleY = + scaleY === 0.0 + ? 0 + : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleY) - LN_SCALE_MIN) / LN_RESCALE) + 1, + ), + ); + const uScaleZ = + scaleZ === 0.0 + ? 0 + : Math.min( + 255, + Math.max( + 0, + Math.round((Math.log(scaleZ) - LN_SCALE_MIN) / LN_RESCALE) + 1, + ), + ); + + const i4 = index * 4; + packedSplats[i4 + 3] = + uScaleX | + (uScaleY << 8) | + (uScaleZ << 16) | + (packedSplats[i4 + 3] & 0xff000000); +} + +// Encode the rotation quatX, quatY, quatZ, quatW in the packedSplats Uint32Array, +// leaving all other fields as is. +export function setPackedSplatQuat( + packedSplats: Uint32Array, + index: number, + quatX: number, + quatY: number, + quatZ: number, + quatW: number, +) { + const uQuat = encodeQuatOctXy88R8( + new THREE.Quaternion(quatX, quatY, quatZ, quatW), + ); + // const uQuat = encodeQuatXyz888(new THREE.Quaternion(quatX, quatY, quatZ, quatW)); + // const uQuat = encodeQuatEulerXyz888(new THREE.Quaternion(quatX, quatY, quatZ, quatW)); + const uQuatX = uQuat & 0xff; + const uQuatY = (uQuat >>> 8) & 0xff; + const uQuatZ = (uQuat >>> 16) & 0xff; + + const i4 = index * 4; + packedSplats[i4 + 2] = + (packedSplats[i4 + 2] & 0x0000ffff) | (uQuatX << 16) | (uQuatY << 24); + packedSplats[i4 + 3] = (packedSplats[i4 + 3] & 0x00ffffff) | (uQuatZ << 24); +} + +// Encode the RGB color in the packedSplats Uint32Array, leaving other fields alone. +export function setPackedSplatRgb( + packedSplats: Uint32Array, + index: number, + r: number, + g: number, + b: number, +) { + const uR = floatToUint8(r); + const uG = floatToUint8(g); + const uB = floatToUint8(b); + + const i4 = index * 4; + packedSplats[i4] = + uR | (uG << 8) | (uB << 16) | (packedSplats[i4] & 0xff000000); +} + +// Encode the opacity in the packedSplats Uint32Array, leaving other fields alone. +export function setPackedSplatOpacity( + packedSplats: Uint32Array, + index: number, + opacity: number, +) { + const uA = floatToUint8(opacity); + + const i4 = index * 4; + packedSplats[i4] = (packedSplats[i4] & 0x00ffffff) | (uA << 24); +} + +const packedCenter = new THREE.Vector3(); +const packedScales = new THREE.Vector3(); +const packedQuaternion = new THREE.Quaternion(); +const packedColor = new THREE.Color(); +const packedFields = { + center: packedCenter, + scales: packedScales, + quaternion: packedQuaternion, + color: packedColor, + opacity: 0.0, +}; + +// Unpack all components of a PackedSplat from the packedSplats Uint32Array into +// THREE.js vector objects. The returned objects will be reused each call. +export function unpackSplat( + packedSplats: Uint32Array, + index: number, +): { + center: THREE.Vector3; + scales: THREE.Vector3; + quaternion: THREE.Quaternion; + color: THREE.Color; + opacity: number; +} { + // Returns a static object which is reused each time + const result = packedFields; + + const i4 = index * 4; + const word0 = packedSplats[i4]; + const word1 = packedSplats[i4 + 1]; + const word2 = packedSplats[i4 + 2]; + const word3 = packedSplats[i4 + 3]; + + result.color.set( + (word0 & 0xff) / 255, + ((word0 >>> 8) & 0xff) / 255, + ((word0 >>> 16) & 0xff) / 255, + ); + result.opacity = ((word0 >>> 24) & 0xff) / 255; + result.center.set( + fromHalf(word1 & 0xffff), + fromHalf((word1 >>> 16) & 0xffff), + fromHalf(word2 & 0xffff), + ); + + const uScalesX = word3 & 0xff; + result.scales.x = + uScalesX === 0 ? 0.0 : Math.exp(LN_SCALE_MIN + (uScalesX - 1) * LN_RESCALE); + const uScalesY = (word3 >>> 8) & 0xff; + result.scales.y = + uScalesY === 0 ? 0.0 : Math.exp(LN_SCALE_MIN + (uScalesY - 1) * LN_RESCALE); + const uScalesZ = (word3 >>> 16) & 0xff; + result.scales.z = + uScalesZ === 0 ? 0.0 : Math.exp(LN_SCALE_MIN + (uScalesZ - 1) * LN_RESCALE); + + const uQuat = ((word2 >>> 16) & 0xffff) | ((word3 >>> 8) & 0xff0000); + decodeQuatOctXy88R8(uQuat, result.quaternion); + // decodeQuatXyz888(uQuat, result.quaternion); + // decodeQuatEulerXyz888(uQuat, result.quaternion); + + return result; +} + +// Compute a texture array size that is large enough to fit numSplats. The most +// common 2D texture size in WebGL2 is 4096x4096 which only allows for 16M splats, +// so Forge stores Gsplat data in a 2D texture array, which most platforms support +// up to 2048x2048x2048 = 8G splats. Allocations that fit within a single 2D texture +// array layer will be rounded up to fill an entire texture row. Once a texture +// array layer is filled, the allocation will be rounded up to fill an entire layer. +// This is done so the entire set of splats can be covered by min/max coords across +// each dimension. +export function getTextureSize(numSplats: number): { + width: number; + height: number; + depth: number; + maxSplats: number; +} { + // Compute a texture array size that is large enough to fit numSplats. + // The width is always 2048, the height sized to fit the splats but no larger than 2048. + // The depth is the number of layers needed to fit the splats. + // maxSplats is computed as the new total available splats that can be stored. + const width = SPLAT_TEX_WIDTH; + const height = Math.max( + SPLAT_TEX_MIN_HEIGHT, + Math.min(SPLAT_TEX_HEIGHT, Math.ceil(numSplats / width)), + ); + const depth = Math.ceil(numSplats / (width * height)); + const maxSplats = width * height * depth; + return { width, height, depth, maxSplats }; +} + +// Heuristic function to determine if we are running on a mobile device. +export function isMobile(): boolean { + if (navigator.maxTouchPoints > 0) { + // Touch-enabled device, assume it's mobile + return true; + } + return /Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test( + navigator.userAgent, + ); +} + +// Heuristic function to determine if we are running on an Android device. +// (does not include Oculus Quest) +export function isAndroid(): boolean { + return /Android/.test(navigator.userAgent); +} + +// Heuristic function to determine if we are running on an Oculus Quest device. +export function isOculus(): boolean { + return /Oculus/.test(navigator.userAgent); +} + +// Take an array of RGBA8 encoded pixels and flip them vertically in-place. +// This is useful for converting between top-left and bottom-left coordinate systems +// in standard 2D images vs WebGL2. +export function flipPixels( + pixels: Uint8Array, + width: number, + height: number, +): Uint8Array { + // Flips pixels vertically in-place, returns original array. + const tempLine = new Uint8Array(width * 4); + + // Only need to process half the height since we're swapping + for (let y = 0; y < height / 2; y++) { + const topOffset = y * width * 4; + const bottomOffset = (height - 1 - y) * width * 4; + + // Save top line to temp buffer + tempLine.set(pixels.subarray(topOffset, topOffset + width * 4)); + // Move bottom line to top + pixels.set( + pixels.subarray(bottomOffset, bottomOffset + width * 4), + topOffset, + ); + // Move saved top line to bottom + pixels.set(tempLine, bottomOffset); + } + return pixels; +} + +// Utility to take an array of RGBA8 encoded pixels and convert them to a +// PNG-encoded image data URL that can be downloaded to the client. +export function pixelsToPngUrl( + pixels: Uint8Array, + width: number, + height: number, +): string { + const canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext("2d"); + if (!ctx) { + throw new Error("Can't get 2d context"); + } + const imageData = ctx.createImageData(width, height); + imageData.data.set(pixels); + ctx.putImageData(imageData, 0, 0); + return canvas.toDataURL("image/png"); +} + +// Manually clone a THREE.Clock object. +export function cloneClock(clock: THREE.Clock): THREE.Clock { + const newClock = new THREE.Clock(clock.autoStart); + newClock.startTime = clock.startTime; + newClock.oldTime = clock.oldTime; + newClock.elapsedTime = clock.elapsedTime; + newClock.running = clock.running; + return newClock; +} + +// Utility to filter out an undefined values from an object. +export function omitUndefined(obj: T): Partial { + return Object.fromEntries( + Object.entries(obj).filter(([_, value]) => value !== undefined), + ) as Partial; +} + +// "Identity" vertex shader that just passes through the position. +export const IDENT_VERTEX_SHADER = unindent(` + precision highp float; + + in vec3 position; + + void main() { + gl_Position = vec4(position.xy, 0.0, 1.0); + } +`); + +// Returns the average position of an array of THREE.Vector3. +export function averagePositions(positions: THREE.Vector3[]): THREE.Vector3 { + const sum = new THREE.Vector3(); + for (const position of positions) { + sum.add(position); + } + return sum.divideScalar(positions.length); +} + +// Returns an "average" of an array of THREE.Quaternion objects. +// Note that this is not a spherical lerp between quaternions but +// rather an arithmetic mean that is normalized to unit length. +export function averageQuaternions( + quaternions: THREE.Quaternion[], +): THREE.Quaternion { + if (quaternions.length === 0) { + return new THREE.Quaternion(); + } + const sum = quaternions[0].clone(); + for (let i = 1; i < quaternions.length; i++) { + if (quaternions[i].dot(quaternions[0]) < 0.0) { + sum.x -= quaternions[i].x; + sum.y -= quaternions[i].y; + sum.z -= quaternions[i].z; + sum.w -= quaternions[i].w; + } else { + sum.x += quaternions[i].x; + sum.y += quaternions[i].y; + sum.z += quaternions[i].z; + sum.w += quaternions[i].w; + } + } + return sum.normalize(); +} + +// Compare two coordinates given by matrix1 and matrix2, returning the distance +// between their origins and the "coincidence" of their orientations, defined +// as the dot product of their "-z" axes. +export function coinciDist(matrix1: THREE.Matrix4, matrix2: THREE.Matrix4) { + const origin1 = new THREE.Vector3(0, 0, 0).applyMatrix4(matrix1); + const origin2 = new THREE.Vector3(0, 0, 0).applyMatrix4(matrix2); + const direction1 = new THREE.Vector3(0, 0, -1) + .applyMatrix4(matrix1) + .sub(origin1) + .normalize(); + const direction2 = new THREE.Vector3(0, 0, -1) + .applyMatrix4(matrix2) + .sub(origin2) + .normalize(); + + const distance = origin1.distanceTo(origin2); + const coincidence = direction1.dot(direction2); + return { distance, coincidence }; +} + +// Utility function that returns whether two coordinate system origins +// given by matrix1 and matrix2 are within a certain maxDistance of each other. +export function withinDist({ + matrix1, + matrix2, + maxDistance, +}: { + matrix1: THREE.Matrix4; + matrix2: THREE.Matrix4; + maxDistance: number; +}): boolean { + const origin1 = new THREE.Vector3(0, 0, 0).applyMatrix4(matrix1); + const origin2 = new THREE.Vector3(0, 0, 0).applyMatrix4(matrix2); + return origin1.distanceTo(origin2) <= maxDistance; +} + +// Utility function that returns whether two coordinate systems are "close" +// to each other, defined by a maxDistance and a minCoincidence. +export function withinCoinciDist({ + matrix1, + matrix2, + maxDistance, + minCoincidence, +}: { + matrix1: THREE.Matrix4; + matrix2: THREE.Matrix4; + maxDistance: number; + minCoincidence?: number; +}): boolean { + const { distance, coincidence } = coinciDist(matrix1, matrix2); + return ( + distance <= maxDistance && + (minCoincidence == null || coincidence >= minCoincidence) + ); +} + +// Compare two coordinate systems given by matrix1 and matrix2, returning the +// distance between their origins and the "coorientation" of their orientations, +// define as the dot product of their quaternion transforms (flipping their +// orientation to be on the same hemisphere if necessary). +export function coorientDist(matrix1: THREE.Matrix4, matrix2: THREE.Matrix4) { + const [origin1, rotate1] = [new THREE.Vector3(), new THREE.Quaternion()]; + const [origin2, rotate2] = [new THREE.Vector3(), new THREE.Quaternion()]; + matrix1.decompose(origin1, rotate1, new THREE.Vector3()); + matrix2.decompose(origin2, rotate2, new THREE.Vector3()); + + const distance = origin1.distanceTo(origin2); + const coorient = Math.abs(rotate1.dot(rotate2)); + return { distance, coorient }; +} + +// Utility function that returns whether two coordinate systems are "close" +// to each other, defined a maxDistance and a minCoorient. +export function withinCoorientDist({ + matrix1, + matrix2, + maxDistance, + minCoorient, +}: { + matrix1: THREE.Matrix4; + matrix2: THREE.Matrix4; + maxDistance: number; + minCoorient?: number; +}): boolean { + const { distance, coorient } = coorientDist(matrix1, matrix2); + return ( + distance <= maxDistance && (minCoorient == null || coorient >= minCoorient) + ); +} + +// Like Math.sign but with a custom epsilon value. +export function epsilonSign(value: number, epsilon = 0.001): number { + if (Math.abs(value) < epsilon) { + return 0; + } + return Math.sign(value); +} + +// Encode a THREE.Quaternion into a 24-bit integer, converting the xyz coordinates +// to signed 8-bit integers (w can be derived from xyz), and flipping the sign +// of the quaternion if necessary to make this possible (q == -q for quaternions). +export function encodeQuatXyz888(q: THREE.Quaternion): number { + const negQuat = q.w < 0.0; + const iQuatX = floatToSint8(negQuat ? -q.x : q.x); + const iQuatY = floatToSint8(negQuat ? -q.y : q.y); + const iQuatZ = floatToSint8(negQuat ? -q.z : q.z); + const uQuatX = iQuatX & 0xff; + const uQuatY = iQuatY & 0xff; + const uQuatZ = iQuatZ & 0xff; + return uQuatX | (uQuatY << 8) | (uQuatZ << 16); +} + +// Decode a 24-bit integer of the quaternion's xyz coordinates into a THREE.Quaternion. +export function decodeQuatXyz888( + encoded: number, + out: THREE.Quaternion, +): THREE.Quaternion { + const iQuatX = (encoded << 24) >> 24; + const iQuatY = (encoded << 16) >> 24; + const iQuatZ = (encoded << 8) >> 24; + out.set(iQuatX / 127.0, iQuatY / 127.0, iQuatZ / 127.0, 0.0); + const dotSelf = out.x * out.x + out.y * out.y + out.z * out.z; + out.w = Math.sqrt(Math.max(0.0, 1.0 - dotSelf)); + return out; +} + +/** + * Encodes a THREE.Quaternion into a 24‐bit integer. + * + * Bit layout (LSB → MSB): + * - Bits 0–7: quantized U (8 bits) + * - Bits 8–15: quantized V (8 bits) + * - Bits 16–23: quantized angle θ (8 bits) from [0,π] + * + * This version uses folded octahedral mapping (all inline). + */ +export function encodeQuatOctXy88R8(q: THREE.Quaternion): number { + // Force the minimal representation (q.w >= 0) + const qnorm = q.clone().normalize(); + if (qnorm.w < 0) { + qnorm.set(-qnorm.x, -qnorm.y, -qnorm.z, -qnorm.w); + } + // Compute the rotation angle θ in [0, π] + const theta = 2 * Math.acos(qnorm.w); + // Recover the rotation axis (default to (1,0,0) for near-zero rotation) + const xyz_norm = Math.sqrt( + qnorm.x * qnorm.x + qnorm.y * qnorm.y + qnorm.z * qnorm.z, + ); + const axis = + xyz_norm < 1e-6 + ? new THREE.Vector3(1, 0, 0) + : new THREE.Vector3(qnorm.x, qnorm.y, qnorm.z).divideScalar(xyz_norm); + // const foldAxis = (axis.z < 0); + + // --- Folded Octahedral Mapping (inline) --- + // Compute p = (axis.x, axis.y) / (|axis.x|+|axis.y|+|axis.z|) + const sum = Math.abs(axis.x) + Math.abs(axis.y) + Math.abs(axis.z); + let p_x = axis.x / sum; + let p_y = axis.y / sum; + // Fold the lower hemisphere. + if (axis.z < 0) { + const tmp = p_x; + p_x = (1 - Math.abs(p_y)) * (p_x >= 0 ? 1 : -1); + p_y = (1 - Math.abs(tmp)) * (p_y >= 0 ? 1 : -1); + } + // Remap from [-1,1] to [0,1] + const u_f = p_x * 0.5 + 0.5; + const v_f = p_y * 0.5 + 0.5; + // Quantize to 7 bits (0..127) + const quantU = Math.round(u_f * 255); + const quantV = Math.round(v_f * 255); + // --- Angle Quantization: Quantize θ ∈ [0,π] to 10 bits (0..1023) --- + const angleInt = Math.round(theta * (255 / Math.PI)); + + // Pack into 24 bits: bits [0–7]: quantU, [8–15]: quantV, [16–23]: angleInt. + return (angleInt << 16) | (quantV << 8) | quantU; +} + +/** + * Decodes a 24‐bit encoded quaternion (packed in a number) back to a THREE.Quaternion. + * + * Assumes the same bit layout as in encodeQuatOctXy88R8. + */ +export function decodeQuatOctXy88R8( + encoded: number, + out: THREE.Quaternion, +): THREE.Quaternion { + // Extract 8‐bit quantU and quantV, and 8‐bit angleInt. + const quantU = encoded & 0xff; // bits 0–7 + const quantV = (encoded >>> 8) & 0xff; // bits 8–15 + const angleInt = (encoded >>> 16) & 0xff; // bits 16–23 + + // Recover u and v in [0,1] then map to [-1,1] + const u_f = quantU / 255; + const v_f = quantV / 255; + let f_x = (u_f - 0.5) * 2; + let f_y = (v_f - 0.5) * 2; + // Inverse folded mapping: recover z from the constraint |p_x|+|p_y|+z = 1. + const f_z = 1 - (Math.abs(f_x) + Math.abs(f_y)); + const t = Math.max(-f_z, 0); + f_x += f_x >= 0 ? -t : t; + f_y += f_y >= 0 ? -t : t; + const axis = new THREE.Vector3(f_x, f_y, f_z).normalize(); + + // Decode the angle: θ ∈ [0,π] + const theta = (angleInt / 255) * Math.PI; + const halfTheta = theta * 0.5; + const s = Math.sin(halfTheta); + const w = Math.cos(halfTheta); + // Reconstruct the quaternion from axis-angle: (axis * sin(θ/2), cos(θ/2)) + out.set(axis.x * s, axis.y * s, axis.z * s, w); + return out; +} + +/** + * Encodes a THREE.Quaternion into a 24‑bit unsigned integer + * by converting it to Euler angles (roll, pitch, yaw). + * The Euler angles are assumed to be in radians in the range [-π, π]. + * Each angle is normalized to [0,1] and quantized to 8 bits. + * Bit layout (LSB→MSB): + * - Bits 0–7: roll (quantized) + * - Bits 8–15: pitch (quantized) + * - Bits 16–23: yaw (quantized) + */ +export function encodeQuatEulerXyz888(q: THREE.Quaternion): number { + // Normalize quaternion to ensure a proper rotation. + const qNorm = q.clone().normalize(); + + // Tait–Bryan angles (roll, pitch, yaw) + const sinr_cosp = 2.0 * (qNorm.w * qNorm.x + qNorm.y * qNorm.z); + const cosr_cosp = 1.0 - 2.0 * (qNorm.x * qNorm.x + qNorm.y * qNorm.y); + const roll = Math.atan2(sinr_cosp, cosr_cosp); + + const sinp = 2.0 * (qNorm.w * qNorm.y - qNorm.z * qNorm.x); + const pitch = + Math.abs(sinp) >= 1.0 ? Math.sign(sinp) * (Math.PI / 2) : Math.asin(sinp); + + const siny_cosp = 2.0 * (qNorm.w * qNorm.z + qNorm.x * qNorm.y); + const cosy_cosp = 1.0 - 2.0 * (qNorm.y * qNorm.y + qNorm.z * qNorm.z); + const yaw = Math.atan2(siny_cosp, cosy_cosp); + + // Map each angle from [-π, π] to [0, 1] + const normRoll = (roll + Math.PI) / (2 * Math.PI); + const normPitch = (pitch + Math.PI) / (2 * Math.PI); + const normYaw = (yaw + Math.PI) / (2 * Math.PI); + + // Quantize to 8 bits (0 to 255) + const rollQ = Math.round(normRoll * 255); + const pitchQ = Math.round(normPitch * 255); + const yawQ = Math.round(normYaw * 255); + + // Pack into a 24-bit unsigned integer: + // Bits 0–7: rollQ, Bits 8–15: pitchQ, Bits 16–23: yawQ. + return (yawQ << 16) | (pitchQ << 8) | rollQ; +} + +/** + * Decodes a 24‑bit unsigned integer into a THREE.Quaternion + * by unpacking three 8‑bit values (roll, pitch, yaw) in the range [0,255] + * and then converting them back to Euler angles in [-π, π] and to a quaternion. + */ +export function decodeQuatEulerXyz888( + encoded: number, + out: THREE.Quaternion, +): THREE.Quaternion { + // Unpack 8‑bit values. + const rollQ = encoded & 0xff; + const pitchQ = (encoded >>> 8) & 0xff; + const yawQ = (encoded >>> 16) & 0xff; + + // Convert quantized values back to normalized [0,1] values. + const normRoll = rollQ / 255; + const normPitch = pitchQ / 255; + const normYaw = yawQ / 255; + + // Map from [0,1] to [-π, π] + const roll = normRoll * (2 * Math.PI) - Math.PI; + const pitch = normPitch * (2 * Math.PI) - Math.PI; + const yaw = normYaw * (2 * Math.PI) - Math.PI; + + // Convert Euler angles to quaternion (Tait–Bryan: roll, pitch, yaw). + const cr = Math.cos(roll * 0.5); + const sr = Math.sin(roll * 0.5); + const cp = Math.cos(pitch * 0.5); + const sp = Math.sin(pitch * 0.5); + const cy = Math.cos(yaw * 0.5); + const sy = Math.sin(yaw * 0.5); + + out.w = cr * cp * cy + sr * sp * sy; + out.x = sr * cp * cy - cr * sp * sy; + out.y = cr * sp * cy + sr * cp * sy; + out.z = cr * cp * sy - sr * sp * cy; + out.normalize(); + return out; +} + +// Pack four signed 8-bit values into a single uint32. +function packSint8Bytes( + b0: number, + b1: number, + b2: number, + b3: number, +): number { + const clampedB0 = Math.max(-127, Math.min(127, b0 * 127)); + const clampedB1 = Math.max(-127, Math.min(127, b1 * 127)); + const clampedB2 = Math.max(-127, Math.min(127, b2 * 127)); + const clampedB3 = Math.max(-127, Math.min(127, b3 * 127)); + return ( + (clampedB0 & 0xff) | + ((clampedB1 & 0xff) << 8) | + ((clampedB2 & 0xff) << 16) | + ((clampedB3 & 0xff) << 24) + ); +} + +// Encode an array of 9 signed RGB SH1 coefficients (clamped to [-1,1]) into +// a pair of uint32 values, where each coefficient is stored as a sint7 +export function encodeSh1Rgb( + sh1Array: Uint32Array, + index: number, + sh1Rgb: Float32Array, +) { + // Pack sint7 values into 2 x uint32 + const base = index * 2; + for (let i = 0; i < 9; ++i) { + const value = Math.max(-63, Math.min(63, sh1Rgb[i] * 63)) & 0x7f; + const bitStart = i * 7; + const bitEnd = bitStart + 7; + + const wordStart = Math.floor(bitStart / 32); + const bitOffset = bitStart - wordStart * 32; + const firstWord = (value << bitOffset) & 0xffffffff; + sh1Array[base + wordStart] |= firstWord; + + if (bitEnd > wordStart * 32 + 32) { + const secondWord = (value >>> (32 - bitOffset)) & 0xffffffff; + sh1Array[base + wordStart + 1] |= secondWord; + } + } +} + +// Encode an array of 15 signed RGB SH2 coefficients (clamped to [-1,1]) into +// an array of 4 uint32 values, where each coefficient is stored as a sint8. +export function encodeSh2Rgb( + sh2Array: Uint32Array, + index: number, + sh2Rgb: Float32Array, +) { + // Pack sint8 values into 4 x uint32 + sh2Array[index * 4 + 0] = packSint8Bytes( + sh2Rgb[0], + sh2Rgb[1], + sh2Rgb[2], + sh2Rgb[3], + ); + sh2Array[index * 4 + 1] = packSint8Bytes( + sh2Rgb[4], + sh2Rgb[5], + sh2Rgb[6], + sh2Rgb[7], + ); + sh2Array[index * 4 + 2] = packSint8Bytes( + sh2Rgb[8], + sh2Rgb[9], + sh2Rgb[10], + sh2Rgb[11], + ); + sh2Array[index * 4 + 3] = packSint8Bytes( + sh2Rgb[12], + sh2Rgb[13], + sh2Rgb[14], + 0, + ); +} + +// Encode an array of 21 signed RGB SH3 coefficients (clamped to [-1,1]) into +// an array of 4 uint32 values, where each coefficient is stored as a sint6. +export function encodeSh3Rgb( + sh3Array: Uint32Array, + index: number, + sh3Rgb: Float32Array, +) { + // Pack sint6 values into 4 x uint32 + const base = index * 4; + for (let i = 0; i < 21; ++i) { + const value = Math.max(-31, Math.min(31, sh3Rgb[i] * 31)) & 0x3f; + const bitStart = i * 6; + const bitEnd = bitStart + 6; + + const wordStart = Math.floor(bitStart / 32); + const bitOffset = bitStart - wordStart * 32; + const firstWord = (value << bitOffset) & 0xffffffff; + sh3Array[base + wordStart] |= firstWord; + + if (bitEnd > wordStart * 32 + 32) { + const secondWord = (value >>> (32 - bitOffset)) & 0xffffffff; + sh3Array[base + wordStart + 1] |= secondWord; + } + } +} + +// Partially decompress a gzip-encoded Uint8Array, returning a Uint8Array of +// the specified numBytes from the start of the file. +export function decompressPartialGzip( + fileBytes: Uint8Array, + numBytes: number, +): Uint8Array { + const chunks: Uint8Array[] = []; + let totalBytes = 0; + let result: Uint8Array | null = null; + + const gunzip = new Gunzip((data, final) => { + chunks.push(data); + totalBytes += data.length; + if (final || totalBytes >= numBytes) { + const allBytes = new Uint8Array(totalBytes); + let offset = 0; + for (const chunk of chunks) { + allBytes.set(chunk, offset); + offset += chunk.length; + } + result = allBytes.slice(0, numBytes); + } + }); + + const CHUNK_SIZE = 1024; + let offset = 0; + while (result == null && offset < fileBytes.length) { + const chunk = fileBytes.slice(offset, offset + CHUNK_SIZE); + gunzip.push(chunk, false); + offset += CHUNK_SIZE; + } + + if (result == null) { + gunzip.push(new Uint8Array(), true); + if (result == null) { + throw new Error("Failed to decompress partial gzip"); + } + } + return result; +} + +export class GunzipReader { + fileBytes: Uint8Array; + chunkBytes: number; + + offset: number; + chunks: Uint8Array[]; + totalBytes: number; + gunzip: Gunzip; + + constructor({ + fileBytes, + chunkBytes = 64 * 1024, + }: { fileBytes: Uint8Array; chunkBytes?: number }) { + this.fileBytes = fileBytes; + this.chunkBytes = chunkBytes; + this.offset = 0; + this.chunks = []; + this.totalBytes = 0; + + this.gunzip = new Gunzip((chunk, _final) => { + this.chunks.push(chunk); + this.totalBytes += chunk.length; + }); + } + + read(numBytes: number): Uint8Array { + while (this.totalBytes < numBytes && this.offset < this.fileBytes.length) { + const end = Math.min( + this.offset + this.chunkBytes, + this.fileBytes.length, + ); + this.gunzip.push(this.fileBytes.subarray(this.offset, end), false); + this.offset = end; + } + + if (this.totalBytes < numBytes && this.offset >= this.fileBytes.length) { + this.gunzip.push(new Uint8Array(0), true); + } + + if (this.totalBytes < numBytes) { + throw new Error( + `Unexpected EOF: needed ${numBytes}, got ${this.totalBytes}`, + ); + } + + const allBytes = new Uint8Array(this.totalBytes); + let outOffset = 0; + for (const chunk of this.chunks) { + allBytes.set(chunk, outOffset); + outOffset += chunk.length; + } + + const result = allBytes.subarray(0, numBytes); + this.chunks = [allBytes.subarray(numBytes)]; + this.totalBytes -= numBytes; + return result; + } +} diff --git a/src/vrButton.ts b/src/vrButton.ts new file mode 100644 index 0000000..2bd2d8a --- /dev/null +++ b/src/vrButton.ts @@ -0,0 +1,164 @@ +import type * as THREE from "three"; + +export class VRButton { + static createButton( + renderer: THREE.WebGLRenderer, + sessionInit: XRSessionInit = {}, + ): HTMLElement | null { + const navigatorXr = navigator.xr; + if (!navigatorXr) { + // Only allow creation if WebXR is supported + return null; + } + const xr = navigatorXr; + + const button = document.createElement("button"); + renderer.xr.enabled = true; + renderer.xr.setReferenceSpaceType("local"); + + function showEnterVR(/*device*/) { + let currentSession: XRSession | null = null; + + async function onSessionStarted(session: XRSession) { + console.log("onSessionStarted"); + + session.addEventListener("end", onSessionEnded); + + await renderer.xr.setSession(session); + button.textContent = "EXIT VR"; + + currentSession = session; + } + + function onSessionEnded(/*event*/) { + console.log("onSessionEnded"); + currentSession?.removeEventListener("end", onSessionEnded); + + button.textContent = "ENTER VR"; + + currentSession = null; + } + + button.style.display = ""; + button.style.cursor = "pointer"; + button.style.left = "calc(50% - 100px)"; + button.style.width = "200px"; + button.style.height = "100px"; + button.textContent = "ENTER VR"; + + // WebXR's requestReferenceSpace only works if the corresponding feature + // was requested at session creation time. For simplicity, just ask for + // the interesting ones as optional features, but be aware that the + // requestReferenceSpace call will fail if it turns out to be unavailable. + // ('local' is always available for immersive sessions and doesn't need to + // be requested separately.) + + const sessionOptions: XRSessionInit = { + ...sessionInit, + optionalFeatures: [ + // "local-floor", + // "bounded-floor", + // "layers", + ...(sessionInit.optionalFeatures || []), + ], + }; + + button.onmouseenter = () => { + button.style.opacity = "1.0"; + }; + button.onmouseleave = () => { + button.style.opacity = "0.5"; + }; + button.onclick = () => { + if (currentSession === null) { + console.log("requesting session"); + xr.requestSession("immersive-vr", sessionOptions).then( + onSessionStarted, + ); + // xr.requestSession( "immersive-ar", sessionOptions ).then( onSessionStarted ); + } else { + console.log("ending session"); + currentSession.end(); + } + }; + } + + function disableButton() { + button.style.display = "none"; + button.style.cursor = "auto"; + button.style.left = "calc(50% - 75px)"; + button.style.width = "150px"; + + button.onmouseenter = null; + button.onmouseleave = null; + button.onclick = null; + } + + function showWebXRNotFound() { + disableButton(); + button.textContent = "VR NOT SUPPORTED"; + } + + function showVRNotAllowed(exception: any) { + disableButton(); + console.warn( + "Exception when trying to call xr.isSessionSupported", + exception, + ); + button.textContent = "VR NOT ALLOWED"; + } + + function stylizeElement(element: HTMLElement) { + element.style.position = "absolute"; + element.style.bottom = "20px"; + element.style.padding = "12px 6px"; + element.style.border = "1px solid #fff"; + element.style.borderRadius = "4px"; + element.style.background = "rgba(0,0,0,0.1)"; + element.style.color = "#fff"; + element.style.font = "normal 13px sans-serif"; + element.style.textAlign = "center"; + element.style.opacity = "0.5"; + element.style.outline = "none"; + element.style.zIndex = "999"; + } + + button.id = "VRButton"; + button.style.display = "none"; + stylizeElement(button); + + xr.isSessionSupported("immersive-vr") + .then((supported) => { + // xr.isSessionSupported( "immersive-ar" ).then( function ( supported ) { + supported ? showEnterVR() : showWebXRNotFound(); + + if (supported && VRButton.xrSessionIsGranted) { + button.click(); + } + }) + .catch(showVRNotAllowed); + + return button; + } + + static registerSessionGrantedListener() { + const navigatorXr = navigator.xr; + if (!navigatorXr) { + // Only allow creation if WebXR is supported + return null; + } + const xr = navigatorXr; + + // WebXRViewer (based on Firefox) has a bug where addEventListener + // throws a silent exception and aborts execution entirely. + if (/WebXRViewer\//i.test(navigator.userAgent)) return; + + xr.addEventListener("sessiongranted", () => { + VRButton.xrSessionIsGranted = true; + }); + } + + static xrSessionIsGranted = false; +} + +VRButton.registerSessionGrantedListener(); diff --git a/src/worker.ts b/src/worker.ts new file mode 100644 index 0000000..3dda89e --- /dev/null +++ b/src/worker.ts @@ -0,0 +1,833 @@ +import init_wasm, { + decode_wlg, + old_sort_splats, + sort_splats, +} from "forge-internal-rs"; +import { + SCALE_MIN, + SPLAT_TEX_HEIGHT, + SPLAT_TEX_MIN_HEIGHT, + SPLAT_TEX_WIDTH, + WASM_SPLAT_SORT, +} from "./defines"; +import { PlyReader } from "./ply"; +import { SpzReader } from "./spz"; +import { + encodeSh1Rgb, + encodeSh2Rgb, + encodeSh3Rgb, + fromHalf, + getArrayBuffers, + setPackedSplat, + setPackedSplatCenter, + setPackedSplatOpacity, + setPackedSplatQuat, + setPackedSplatRgb, + setPackedSplatScales, +} from "./utils"; + +// WebWorker for Forge's background CPU tasks, such as Gsplat file decoding +// and sorting. + +async function onMessage(event: MessageEvent) { + // Unpack RPC function name, arguments, and ID from the main thread. + const { name, args, id }: { name: string; args: unknown; id: number } = + event.data; + // console.log(`worker.onMessage(${id}, ${name}):`, args); + + // Initialize return result/error, to be filled out below. + let result = undefined; + let error = undefined; + + try { + switch (name) { + case "unpackPly": { + const { packedArray, fileBytes } = args as { + packedArray: Uint32Array; + fileBytes: Uint8Array; + }; + const decoded = await unpackPly({ packedArray, fileBytes }); + result = { + id, + numSplats: decoded.numSplats, + packedArray: decoded.packedArray, + extra: decoded.extra, + }; + break; + } + case "decodeWlg": { + const { fileBytes } = args as { fileBytes: Uint8Array }; + const decoded = decode_wlg( + fileBytes, + SPLAT_TEX_WIDTH, + SPLAT_TEX_HEIGHT, + ) as { numSplats: number; packedSplats: Uint32Array }; + result = { + id, + numSplats: decoded.numSplats, + packedArray: decoded.packedSplats, + }; + break; + } + case "decodeSpz": { + const { fileBytes } = args as { fileBytes: Uint8Array }; + const decoded = unpackSpz(fileBytes); + result = { + id, + numSplats: decoded.numSplats, + packedArray: decoded.packedArray, + extra: decoded.extra, + }; + break; + } + case "decodeAntiSplat": { + const { fileBytes } = args as { fileBytes: Uint8Array }; + const decoded = unpackAntiSplat(fileBytes); + result = { + id, + numSplats: decoded.numSplats, + packedArray: decoded.packedArray, + }; + break; + } + case "decodeKsplat": { + const { fileBytes } = args as { fileBytes: Uint8Array }; + const decoded = unpackKsplat(fileBytes); + result = { + id, + numSplats: decoded.numSplats, + packedArray: decoded.packedArray, + extra: decoded.extra, + }; + break; + } + case "sortSplats": { + // Sort maxSplats splats using readback data, which encodes one uint32 per + // Gsplats, with the low bytes encoding a float16 distance sort metric. + const { maxSplats, totalSplats, readback, ordering } = args as { + maxSplats: number; + totalSplats: number; + readback: Uint8Array[]; + ordering: Uint32Array; + }; + // Sort totalSplats splats each with 4 bytes of readback, and outputs Uint32Array ordering of splat indices + if (WASM_SPLAT_SORT) { + result = { + id, + readback, + ordering, + activeSplats: old_sort_splats( + maxSplats, + totalSplats, + readback, + ordering, + ), + }; + } else { + result = { + id, + readback, + ...oldSortSplats({ totalSplats, readback, ordering }), + }; + } + break; + } + case "sortDoubleSplats": { + // Sort numSplats splats using the readback distance metric, which encodes + // one float16 per splat (no unused high bytes like for sortSplats). + const { numSplats, readback, ordering } = args as { + numSplats: number; + readback: Uint16Array; + ordering: Uint32Array; + }; + result = { + id, + readback, + ordering, + }; + if (WASM_SPLAT_SORT) { + result = { + id, + readback, + ordering, + activeSplats: sort_splats(numSplats, readback, ordering), + }; + } else { + result = { + id, + readback, + ...sortSplats({ numSplats, readback, ordering }), + }; + } + break; + } + default: { + throw new Error(`Unknown name: ${name}`); + } + } + } catch (e) { + error = e; + } + + // Send the result or error back to the main thread, making sure to transfer any ArrayBuffers + self.postMessage( + { id, result, error }, + { transfer: getArrayBuffers(result) }, + ); +} + +async function unpackPly({ + packedArray, + fileBytes, +}: { packedArray: Uint32Array; fileBytes: Uint8Array }): Promise<{ + packedArray: Uint32Array; + numSplats: number; + extra: Record; +}> { + const ply = new PlyReader({ fileBytes }); + await ply.parseHeader(); + const numSplats = ply.numSplats; + + const extra: Record = {}; + // Anything below this is considered zero and can be rendered as 2DGS + const ZERO_CUTOFF = Math.exp(-20); + + ply.parseSplats( + ( + index, + x, + y, + z, + scaleX, + scaleY, + scaleZ, + quatX, + quatY, + quatZ, + quatW, + opacity, + r, + g, + b, + ) => { + setPackedSplat( + packedArray, + index, + x, + y, + z, + scaleX < ZERO_CUTOFF ? 0 : Math.max(SCALE_MIN, scaleX), + scaleY < ZERO_CUTOFF ? 0 : Math.max(SCALE_MIN, scaleY), + scaleZ < ZERO_CUTOFF ? 0 : Math.max(SCALE_MIN, scaleZ), + quatX, + quatY, + quatZ, + quatW, + opacity, + r, + g, + b, + ); + }, + (index, sh1, sh2, sh3) => { + if (sh1) { + if (!extra.sh1) { + extra.sh1 = new Uint32Array(numSplats * 2); + } + encodeSh1Rgb(extra.sh1 as Uint32Array, index, sh1); + } + if (sh2) { + if (!extra.sh2) { + extra.sh2 = new Uint32Array(numSplats * 4); + } + encodeSh2Rgb(extra.sh2 as Uint32Array, index, sh2); + } + if (sh3) { + if (!extra.sh3) { + extra.sh3 = new Uint32Array(numSplats * 4); + } + encodeSh3Rgb(extra.sh3 as Uint32Array, index, sh3); + } + }, + ); + + return { packedArray, numSplats, extra }; +} + +function computeMaxSplats(numSplats: number): number { + // Compute the size of a Gsplat array texture (2048x2048xD) that can fit + // numSplats splats, and return the total number of splats that can be stored + // in such a texture. + const width = SPLAT_TEX_WIDTH; + const height = Math.max( + SPLAT_TEX_MIN_HEIGHT, + Math.min(SPLAT_TEX_HEIGHT, Math.ceil(numSplats / width)), + ); + const depth = Math.ceil(numSplats / (width * height)); + return width * height * depth; +} + +function unpackSpz(fileBytes: Uint8Array): { + packedArray: Uint32Array; + numSplats: number; + extra: Record; +} { + const spz = new SpzReader({ fileBytes }); + const numSplats = spz.numSplats; + const maxSplats = computeMaxSplats(numSplats); + const packedArray = new Uint32Array(maxSplats * 4); + const extra: Record = {}; + + spz.parseSplats( + (index, x, y, z) => { + setPackedSplatCenter(packedArray, index, x, y, z); + }, + (index, alpha) => { + setPackedSplatOpacity(packedArray, index, alpha); + }, + (index, r, g, b) => { + setPackedSplatRgb(packedArray, index, r, g, b); + }, + (index, scaleX, scaleY, scaleZ) => { + setPackedSplatScales(packedArray, index, scaleX, scaleY, scaleZ); + }, + (index, quatX, quatY, quatZ, quatW) => { + setPackedSplatQuat(packedArray, index, quatX, quatY, quatZ, quatW); + }, + (index, sh1, sh2, sh3) => { + if (sh1) { + if (!extra.sh1) { + extra.sh1 = new Uint32Array(numSplats * 2); + } + encodeSh1Rgb(extra.sh1 as Uint32Array, index, sh1); + } + if (sh2) { + if (!extra.sh2) { + extra.sh2 = new Uint32Array(numSplats * 4); + } + encodeSh2Rgb(extra.sh2 as Uint32Array, index, sh2); + } + if (sh3) { + if (!extra.sh3) { + extra.sh3 = new Uint32Array(numSplats * 4); + } + encodeSh3Rgb(extra.sh3 as Uint32Array, index, sh3); + } + }, + ); + return { packedArray, numSplats, extra }; +} + +function unpackAntiSplat(fileBytes: Uint8Array): { + packedArray: Uint32Array; + numSplats: number; +} { + const numSplats = Math.floor(fileBytes.length / 32); // 32 bytes per splat + if (numSplats * 32 !== fileBytes.length) { + throw new Error("Invalid .splat file size"); + } + const maxSplats = computeMaxSplats(numSplats); + const packedArray = new Uint32Array(maxSplats * 4); + const f32 = new Float32Array(fileBytes.buffer); + + for (let i = 0; i < numSplats; ++i) { + const i32 = i * 32; + const i8 = i * 8; + const x = f32[i8 + 0]; + const y = f32[i8 + 1]; + const z = f32[i8 + 2]; + const scaleX = f32[i8 + 3]; + const scaleY = f32[i8 + 4]; + const scaleZ = f32[i8 + 5]; + const r = fileBytes[i32 + 24] / 255; + const g = fileBytes[i32 + 25] / 255; + const b = fileBytes[i32 + 26] / 255; + const opacity = fileBytes[i32 + 27] / 255; + const quatW = (fileBytes[i32 + 28] - 128) / 128; + const quatX = (fileBytes[i32 + 29] - 128) / 128; + const quatY = (fileBytes[i32 + 30] - 128) / 128; + const quatZ = (fileBytes[i32 + 31] - 128) / 128; + setPackedSplat( + packedArray, + i, + x, + y, + z, + scaleX, + scaleY, + scaleZ, + quatX, + quatY, + quatZ, + quatW, + opacity, + r, + g, + b, + ); + } + return { packedArray, numSplats }; +} + +type KsplatCompression = { + bytesPerCenter: number; + bytesPerScale: number; + bytesPerRotation: number; + bytesPerColor: number; + bytesPerSphericalHarmonicsComponent: number; + scaleOffsetBytes: number; + rotationOffsetBytes: number; + colorOffsetBytes: number; + sphericalHarmonicsOffsetBytes: number; + scaleRange: number; +}; + +const KSPLAT_COMPRESSION: Record = { + 0: { + bytesPerCenter: 12, + bytesPerScale: 12, + bytesPerRotation: 16, + bytesPerColor: 4, + bytesPerSphericalHarmonicsComponent: 4, + scaleOffsetBytes: 12, + rotationOffsetBytes: 24, + colorOffsetBytes: 40, + sphericalHarmonicsOffsetBytes: 44, + scaleRange: 1, + }, + 1: { + bytesPerCenter: 6, + bytesPerScale: 6, + bytesPerRotation: 8, + bytesPerColor: 4, + bytesPerSphericalHarmonicsComponent: 2, + scaleOffsetBytes: 6, + rotationOffsetBytes: 12, + colorOffsetBytes: 20, + sphericalHarmonicsOffsetBytes: 24, + scaleRange: 32767, + }, + 2: { + bytesPerCenter: 6, + bytesPerScale: 6, + bytesPerRotation: 8, + bytesPerColor: 4, + bytesPerSphericalHarmonicsComponent: 1, + scaleOffsetBytes: 6, + rotationOffsetBytes: 12, + colorOffsetBytes: 20, + sphericalHarmonicsOffsetBytes: 24, + scaleRange: 32767, + }, +}; + +const KSPLAT_SH_DEGREE_TO_COMPONENTS: Record = { + 0: 0, + 1: 9, + 2: 24, + 3: 45, +}; + +function unpackKsplat(fileBytes: Uint8Array): { + packedArray: Uint32Array; + numSplats: number; + extra: Record; +} { + const HEADER_BYTES = 4096; + const SECTION_BYTES = 1024; + + let headerOffset = 0; + const header = new DataView(fileBytes.buffer, headerOffset, HEADER_BYTES); + headerOffset += HEADER_BYTES; + + const versionMajor = header.getUint8(0); + const versionMinor = header.getUint8(1); + if (versionMajor !== 0 || versionMinor < 1) { + throw new Error( + `Unsupported .ksplat version: ${versionMajor}.${versionMinor}`, + ); + } + const maxSectionCount = header.getUint32(4, true); + // const sectionCount = header.getUint32(8, true); + // const maxSplatCount = header.getUint32(12, true); + const splatCount = header.getUint32(16, true); + const compressionLevel = header.getUint16(20, true); + if (compressionLevel < 0 || compressionLevel > 2) { + throw new Error(`Invalid .ksplat compression level: ${compressionLevel}`); + } + // const sceneCenterX = header.getFloat32(24, true); + // const sceneCenterY = header.getFloat32(28, true); + // const sceneCenterZ = header.getFloat32(32, true); + const minSphericalHarmonicsCoeff = header.getFloat32(36, true) || -1.5; + const maxSphericalHarmonicsCoeff = header.getFloat32(40, true) || 1.5; + + const numSplats = splatCount; + const maxSplats = computeMaxSplats(numSplats); + const packedArray = new Uint32Array(maxSplats * 4); + const extra: Record = {}; + + let sectionBase = HEADER_BYTES + maxSectionCount * SECTION_BYTES; + + for (let section = 0; section < maxSectionCount; ++section) { + const section = new DataView(fileBytes.buffer, headerOffset, SECTION_BYTES); + headerOffset += SECTION_BYTES; + + const sectionSplatCount = section.getUint32(0, true); + const sectionMaxSplatCount = section.getUint32(4, true); + const bucketSize = section.getUint32(8, true); + const bucketCount = section.getUint32(12, true); + const bucketBlockSize = section.getFloat32(16, true); + const bucketStorageSizeBytes = section.getUint16(20, true); + const compressionScaleRange = + (section.getUint32(24, true) || + KSPLAT_COMPRESSION[compressionLevel]?.scaleRange) ?? + 1; + // const fullBucketCount = section.getUint32(32, true); + const partiallyFilledBucketCount = section.getUint32(36, true); + const bucketsMetaDataSizeBytes = partiallyFilledBucketCount * 4; + const bucketsStorageSizeBytes = + bucketStorageSizeBytes * bucketCount + bucketsMetaDataSizeBytes; + const sphericalHarmonicsDegree = section.getUint16(40, true); + const shComponents = + KSPLAT_SH_DEGREE_TO_COMPONENTS[sphericalHarmonicsDegree]; + + const { + bytesPerCenter, + bytesPerScale, + bytesPerRotation, + bytesPerColor, + bytesPerSphericalHarmonicsComponent, + scaleOffsetBytes, + rotationOffsetBytes, + colorOffsetBytes, + sphericalHarmonicsOffsetBytes, + } = KSPLAT_COMPRESSION[compressionLevel]; + const bytesPerSplat = + bytesPerCenter + + bytesPerScale + + bytesPerRotation + + bytesPerColor + + shComponents * bytesPerSphericalHarmonicsComponent; + const splatDataStorageSizeBytes = bytesPerSplat * sectionMaxSplatCount; + const storageSizeBytes = + splatDataStorageSizeBytes + bucketsStorageSizeBytes; + + const sh1Index = [0, 3, 6, 1, 4, 7, 2, 5, 8]; + const sh2Index = [ + 9, 14, 19, 10, 15, 20, 11, 16, 21, 12, 17, 22, 13, 18, 23, + ]; + const sh3Index = [ + 24, 31, 38, 25, 32, 39, 26, 33, 40, 27, 34, 41, 28, 35, 42, 29, 36, 43, + 30, 37, 44, + ]; + const sh1 = + sphericalHarmonicsDegree >= 1 ? new Float32Array(3 * 3) : undefined; + const sh2 = + sphericalHarmonicsDegree >= 2 ? new Float32Array(5 * 3) : undefined; + const sh3 = + sphericalHarmonicsDegree >= 3 ? new Float32Array(7 * 3) : undefined; + + const compressionScaleFactor = bucketBlockSize / 2 / compressionScaleRange; + const bucketsBase = sectionBase + bucketsMetaDataSizeBytes; + const dataBase = sectionBase + bucketsStorageSizeBytes; + const data = new DataView( + fileBytes.buffer, + dataBase, + splatDataStorageSizeBytes, + ); + const bucketArray = new Float32Array( + fileBytes.buffer, + bucketsBase, + bucketCount * 3, + ); + + function getSh(splatOffset: number, component: number) { + if (compressionLevel === 0) { + return data.getFloat32( + splatOffset + sphericalHarmonicsOffsetBytes + component * 4, + true, + ); + } + if (compressionLevel === 1) { + return fromHalf( + data.getUint16( + splatOffset + sphericalHarmonicsOffsetBytes + component * 2, + true, + ), + ); + } + const t = + data.getUint8(splatOffset + sphericalHarmonicsOffsetBytes + component) / + 255; + return ( + minSphericalHarmonicsCoeff + + t * (maxSphericalHarmonicsCoeff - minSphericalHarmonicsCoeff) + ); + } + + for (let i = 0; i < sectionSplatCount; ++i) { + const splatOffset = i * bytesPerSplat; + const bucketIndex = Math.floor(i / bucketSize); + + const x = + compressionLevel === 0 + ? data.getFloat32(splatOffset + 0, true) + : (data.getUint16(splatOffset + 0, true) - compressionScaleRange) * + compressionScaleFactor + + bucketArray[3 * bucketIndex + 0]; + const y = + compressionLevel === 0 + ? data.getFloat32(splatOffset + 4, true) + : (data.getUint16(splatOffset + 2, true) - compressionScaleRange) * + compressionScaleFactor + + bucketArray[3 * bucketIndex + 1]; + const z = + compressionLevel === 0 + ? data.getFloat32(splatOffset + 8, true) + : (data.getUint16(splatOffset + 4, true) - compressionScaleRange) * + compressionScaleFactor + + bucketArray[3 * bucketIndex + 2]; + + const scaleX = + compressionLevel === 0 + ? data.getFloat32(splatOffset + scaleOffsetBytes + 0, true) + : fromHalf(data.getUint16(splatOffset + scaleOffsetBytes + 0, true)); + const scaleY = + compressionLevel === 0 + ? data.getFloat32(splatOffset + scaleOffsetBytes + 4, true) + : fromHalf(data.getUint16(splatOffset + scaleOffsetBytes + 2, true)); + const scaleZ = + compressionLevel === 0 + ? data.getFloat32(splatOffset + scaleOffsetBytes + 8, true) + : fromHalf(data.getUint16(splatOffset + scaleOffsetBytes + 4, true)); + + const quatW = + compressionLevel === 0 + ? data.getFloat32(splatOffset + rotationOffsetBytes + 0, true) + : fromHalf( + data.getUint16(splatOffset + rotationOffsetBytes + 0, true), + ); + const quatX = + compressionLevel === 0 + ? data.getFloat32(splatOffset + rotationOffsetBytes + 4, true) + : fromHalf( + data.getUint16(splatOffset + rotationOffsetBytes + 2, true), + ); + const quatY = + compressionLevel === 0 + ? data.getFloat32(splatOffset + rotationOffsetBytes + 8, true) + : fromHalf( + data.getUint16(splatOffset + rotationOffsetBytes + 4, true), + ); + const quatZ = + compressionLevel === 0 + ? data.getFloat32(splatOffset + rotationOffsetBytes + 12, true) + : fromHalf( + data.getUint16(splatOffset + rotationOffsetBytes + 6, true), + ); + + const r = data.getUint8(splatOffset + colorOffsetBytes + 0) / 255; + const g = data.getUint8(splatOffset + colorOffsetBytes + 1) / 255; + const b = data.getUint8(splatOffset + colorOffsetBytes + 2) / 255; + const opacity = data.getUint8(splatOffset + colorOffsetBytes + 3) / 255; + + setPackedSplat( + packedArray, + i, + x, + y, + z, + scaleX, + scaleY, + scaleZ, + quatX, + quatY, + quatZ, + quatW, + opacity, + r, + g, + b, + ); + + if (sphericalHarmonicsDegree >= 1) { + if (sh1) { + if (!extra.sh1) { + extra.sh1 = new Uint32Array(numSplats * 2); + } + for (const [i, key] of sh1Index.entries()) { + sh1[i] = getSh(splatOffset, key); + } + encodeSh1Rgb(extra.sh1 as Uint32Array, i, sh1); + } + if (sh2) { + if (!extra.sh2) { + extra.sh2 = new Uint32Array(numSplats * 4); + } + for (const [i, key] of sh2Index.entries()) { + sh2[i] = getSh(splatOffset, key); + } + encodeSh2Rgb(extra.sh2 as Uint32Array, i, sh2); + } + if (sh3) { + if (!extra.sh3) { + extra.sh3 = new Uint32Array(numSplats * 4); + } + for (const [i, key] of sh3Index.entries()) { + sh3[i] = getSh(splatOffset, key); + } + encodeSh3Rgb(extra.sh3 as Uint32Array, i, sh3); + } + } + } + sectionBase += storageSizeBytes; + } + return { packedArray, numSplats, extra }; +} + +// Array of buckets for sorting float16 distances with range [0, DEPTH_INFINITY]. +const DEPTH_INFINITY = 0x7c00; +const DEPTH_SIZE = DEPTH_INFINITY + 1; +let depthArray: Uint32Array | null = null; + +function oldSortSplats({ + totalSplats, + readback, + ordering, +}: { totalSplats: number; readback: Uint8Array[]; ordering: Uint32Array }): { + activeSplats: number; + ordering: Uint32Array; +} { + // Sort totalSplats Gsplats, each with 4 bytes of readback, and outputs Uint32Array + // of indices from most distant to nearest. Each 4 bytes encode a float16 distance + // and unused high bytes. + if (!depthArray) { + depthArray = new Uint32Array(DEPTH_SIZE); + } + depthArray.fill(0); + + const readbackUint32 = readback.map((layer) => new Uint32Array(layer.buffer)); + const layerSize = readbackUint32[0].length; + const numLayers = Math.ceil(totalSplats / layerSize); + + let layerBase = 0; + for (let layer = 0; layer < numLayers; ++layer) { + const readbackLayer = readbackUint32[layer]; + const layerSplats = Math.min(readbackLayer.length, totalSplats - layerBase); + for (let i = 0; i < layerSplats; ++i) { + const pri = readbackLayer[i] & 0x7fff; + if (pri < DEPTH_INFINITY) { + depthArray[pri] += 1; + } + } + layerBase += layerSplats; + } + + let activeSplats = 0; + for (let j = 0; j < DEPTH_SIZE; ++j) { + const nextIndex = activeSplats + depthArray[j]; + depthArray[j] = activeSplats; + activeSplats = nextIndex; + } + + layerBase = 0; + for (let layer = 0; layer < numLayers; ++layer) { + const readbackLayer = readbackUint32[layer]; + const layerSplats = Math.min(readbackLayer.length, totalSplats - layerBase); + for (let i = 0; i < layerSplats; ++i) { + const pri = readbackLayer[i] & 0x7fff; + if (pri < DEPTH_INFINITY) { + ordering[depthArray[pri]] = layerBase + i; + depthArray[pri] += 1; + } + } + layerBase += layerSplats; + } + if (depthArray[DEPTH_SIZE - 1] !== activeSplats) { + throw new Error( + `Expected ${activeSplats} active splats but got ${depthArray[DEPTH_SIZE - 1]}`, + ); + } + + return { activeSplats, ordering }; +} + +// Sort numSplats splats, each with 2 bytes of float16 readback for distance metric, +// using one bucket sort pass, outputting Uint32Array of indices. +function sortSplats({ + numSplats, + readback, + ordering, +}: { numSplats: number; readback: Uint16Array; ordering: Uint32Array }): { + activeSplats: number; + ordering: Uint32Array; +} { + // Ensure depthArray is allocated and zeroed out for our buckets. + if (!depthArray) { + depthArray = new Uint32Array(DEPTH_SIZE); + } + depthArray.fill(0); + + // Count the number of splats in each bucket (cull Gsplats at infinity). + for (let i = 0; i < numSplats; ++i) { + const pri = readback[i]; + if (pri < DEPTH_INFINITY) { + depthArray[pri] += 1; + } + } + + // Compute the beginning index of each bucket in the output array and the + // total number of active (non-infinity) splats, going in reverse order + // because we want most distant Gsplats to be first in the output array. + let activeSplats = 0; + for (let j = DEPTH_INFINITY - 1; j >= 0; --j) { + const nextIndex = activeSplats + depthArray[j]; + depthArray[j] = activeSplats; + activeSplats = nextIndex; + } + + // Write out the sorted indices into the output array according + // bucket order. + for (let i = 0; i < numSplats; ++i) { + const pri = readback[i]; + if (pri < DEPTH_INFINITY) { + ordering[depthArray[pri]] = i; + depthArray[pri] += 1; + } + } + // Sanity check that the end of the closest bucket is the same as + // our total count of active splats (not at infinity). + if (depthArray[0] !== activeSplats) { + throw new Error( + `Expected ${activeSplats} active splats but got ${depthArray[0]}`, + ); + } + + return { activeSplats, ordering }; +} + +// Buffer to queue any messages received while initializing, for example +// early messages to unpack a Gsplat file while still initializing the WASM code. +const messageBuffer: MessageEvent[] = []; + +function bufferMessage(event: MessageEvent) { + messageBuffer.push(event); +} + +async function initialize() { + // Hold any messages received while initializing + self.addEventListener("message", bufferMessage); + + await init_wasm(); + + self.removeEventListener("message", bufferMessage); + self.addEventListener("message", onMessage); + + // Process any buffered messages + for (const event of messageBuffer) { + onMessage(event); + } + messageBuffer.length = 0; +} + +initialize().catch(console.error); diff --git a/test/utils.test.ts b/test/utils.test.ts new file mode 100644 index 0000000..fc53027 --- /dev/null +++ b/test/utils.test.ts @@ -0,0 +1,7 @@ +import assert from "node:assert"; +import { floatToUint8 } from "../src/utils.js"; + +assert.strictEqual(floatToUint8(0), 0, "floatToUint8 test 1 Failed"); +assert.strictEqual(floatToUint8(1), 255, "floatToUint8 test 2 Failed"); + +console.log("✅ All test cases passed!"); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..a8639b3 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "es2020", + "lib": ["ES2020", "DOM"], + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "moduleResolution": "bundler", + "declaration": true, + "emitDeclarationOnly": true, + "sourceMap": true, + "outDir": "./dist", + "rootDir": "./src", + "types": ["vite/client", "vite-plugin-glsl/ext"] + }, + "ts-node": { + "experimentalSpecifierResolution": "node", + "transpileOnly": true, + "esm": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "examples"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..f257ba2 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,92 @@ +import fs from "node:fs"; +import path from "node:path"; +import { defineConfig } from "vite"; +import glsl from "vite-plugin-glsl"; + +const assetsDirectory = "examples/assets"; +const localAssetsDirectoryExist = fs.existsSync(assetsDirectory); +if (!localAssetsDirectoryExist) { + console.log( + "************************************************************************", + ); + console.log(" Examples assets will be fetched from an external server."); + console.log( + " To work offline you can download them: npm run assets:download", + ); + console.log( + "************************************************************************", + ); +} + +export default defineConfig(({ mode }) => { + const isMinify = mode === "production"; + const isFirstPass = mode === "production"; + + return { + appType: "mpa", + + plugins: [ + glsl({ + include: ["**/*.glsl"], + }), + + { + name: "serve-three-alias", + configureServer(server) { + const urlPath = "/examples/js/vendor/three/"; + + const filePath = path.resolve("node_modules/three/"); + server.middlewares.use(urlPath, (req, res, next) => { + if (fs.existsSync(filePath)) { + res.setHeader("Content-Type", "application/javascript"); + fs.createReadStream(filePath).pipe(res); + } else { + res.statusCode = 404; + res.end("three.module.js not found"); + } + }); + + console.log(`📦 Dev alias active: ${urlPath} → ${filePath}`); + }, + }, + ], + + build: { + minify: isMinify, + lib: { + entry: path.resolve(__dirname, "src/index.ts"), + name: "forge", + formats: ["es", "cjs"], + fileName: (format) => { + const base = format === "es" ? "forge.module" : `forge.${format}`; + return isMinify ? `${base}.min.js` : `${base}.js`; + }, + }, + rollupOptions: { + external: ["three"], + output: { + globals: { + three: "THREE", + }, + }, + }, + emptyOutDir: isFirstPass, + }, + + server: { + watch: { + usePolling: true, + }, + port: 8080, + }, + + optimizeDeps: { + force: true, + exclude: ["three"], // prevent Vite pre-bundling + }, + + define: { + forgeLocalAssets: localAssetsDirectoryExist, + }, + }; +});

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